GURB详解(实施级)

2024-06-15 11:12:58

一、什么是grub

GRand Unified Bootloader,由名字就能看出,这是一个多重开机管理系统。目前在centos 6.xlinux发行版上使用的是0.97版本,在centos 7系列用的是grub2。这里先讨论一下grub0.97版本,grub2的机制已经变了,后续讨论。

二、grub引导的三个阶段

Centos 6.8中在/boot/grub目录下,有如下文件:

wKiom1k_5nnRam_1AABd8WPNbgw640.png

其中,有stage1stage2以及若干个stage1.5

看字面意思,其启动顺序就是stage1àstage1.5àstage2

stage1执行系统启动,其目的是加载stage2,并将控制权转移到stage2中。stage1.5的作用是连接stage1stage2

stage2阶段,将会读取grub.conf配置文件,根据配置进行设置和显示操作系统选择界面。Stage2包含了除自引导之外的所有功能,是整个grub引导的核心。

首先说stage1stage1可以看作是booloader的备份,但是又不尽相同,注意,千万不可以将stage1直接覆盖bootloader

磁盘的第一个扇区,大小为512Bbootloader安装在这个扇区中,占用前446B。然后64B是分区表,接着2BMagic Number。也就是446+64+2=512

使用dd命令导出磁盘第一个扇区

dd if=/dev/sda of=./mbr bs=512 count=1

hexdump打开

wKioL1k_5oeRv3MaAADu8Iy9mXI900.png

红色部分为bootloader,蓝色部分为partation table分区表,×××部分为Magic Number

备份bootloader

dd if=/dev/sda of=./mbr.img bs=446 count=1

恢复bootloader

dd if=./mbr.img of=/dev/sda bs=446 count=1

资料中显示,stage1.S被放在00道的第1扇区,start.S被放在00道的第2扇区,而与boot分区相关的文件系统的xxfs_stage1_5被放在00道第3扇区开始的扇区里,其占据的扇区数目与该stage1_5文件的大小有关。而其余的stage1_5以及stage2都作为文件被存放在boot分区里。

可是我在测试环境中第二个扇区、第三个扇区一直到第64个扇区,都是空的。可以认为,stage2在磁盘中的位置被写死到stage1中,stage1无需识别文件系统,直接从磁盘指定位置读取指定长度的段。

这里是个疑问,会在以后的学习中注意。

三、grub的安装与修复

grub的安装有两种方式,分别适应两钟不同的情况。

1、 mbr损坏,但是/boot/grub下所有文件都正常,我们只需要修复mbr

进入救援模式之后,启动grub shell

grub> root (hd0,0)   //根据个人启动分区的不同进行设置。
root(hd0,0)Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0)
setup(hd0)Checking if "/boot/grub/stage1"exists... noChecking if "/grub/stage1" exists...yesChecking if "/grub/stage2" exists...yesChecking if "/grub/e2fs_stage1_5"exists... yesRunning "embed /grub/e2fs_stage1_5(hd0)"...  27 sectors are embedded.
succeededRunning "install /grub/stage1 (hd0)(hd0)1+27 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeeded
Done.

2、 替换引导。比如,linux在安装时就没有安装引导,或者以前用的是lilo,而现在想用grub

使用grub-install命令即可。

grub-install /dev/sda    //选定你要安装bootloader的磁盘或者分区。

这个命令会自动创建/boot/grub目录,并自动生成stage1 stage1.5stage2,然后将stage1写入mbr

四、grub的设置

在这里,首先可以了解一下grub.conf的结构。

default=0
timeout=5
splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-642.4.2.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-642.4.2.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=autord_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-642.4.2.el6.x86_64.img
title CentOS (2.6.32-431.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-431.el6.x86_64.img

default=0 //指定默认的启动项,也就是第几个title。这里是编号为0的title。

timeout=5 //超时时间,5秒钟。5秒钟内不进行选择,那么将会自动启动default所指定的title。

splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz //背景图片。这个没有什么实质性的功能hiddenmenu //隐藏菜单,这个没啥实质×××,就是一个定制性的。

pasword zhou //但是这种方式是明文密码,任何人打开grub.conf都能看到。

password --md5$1$jWNz8/$aqDO19NluYIX1zkc1SVGp. //这种是密文密码,虽然可以修改,但是不可以被简单破解。

下面将要开始指定title,这里所写出的title都会在grub的启动列表中显示出来。每个title即指定一个启动,每个启动必须包括三个元素:

1、root元素:其实就是/boot分区所在位置。有些不寻常的时候,安装系统时,安装介质的识别导致磁盘顺序在系统中错误,root 元素的值在移除安装介质后与系统/boot分区所在的位置不一致。

2、kernel元素:指定Linux的kernel文件,同时指定各属性。具体属性参照扩展区域,这里实质性意义也不大,不太常用到修改kernel的参数。

3、initrd元素:指定initramfs所在的位置(6.x系列),initramfs有系统安装时根据系统硬件选择性编译的驱动,所以它不具备通用性,大部分情况下安装时产生的initramfs只能在当前系统中使用。

title CentOS (2.6.32-642.4.2.el6.x86_64)

root (hd0,0)

kernel /vmlinuz-2.6.32-642.4.2.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS.UTF-8 rd_NO_MDrd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

initrd /initramfs-2.6.32-642.4.2.el6.x86_64.img

password --md5$1$jWNz8/$aqDO19NluYIX1zkc1SVGp. //把密码设置在这里,意义完全不同。这里的作用是启动密码,如果要启动该内核,必须输入密码。这个也是拿来玩的东西。

title CentOS (2.6.32-431.el6.x86_64)

root (hd0,0)

kernel /vmlinuz-2.6.32-431.el6.x86_64 roroot=/dev/mapper/VolGroup-lv_root rd_NO_LUKS.UTF-8 rd_NO_MDrd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

initrd /initramfs-2.6.32-431.el6.x86_64.img

综上所述,如果我们要写一个最简化的grub.conf,格式可以如下:

timeout 5    //这个选项最好有,否则重启linux后不会自动进入系统,而是等待启动项选择。
title linux
root (hd0,0)
kernel /vmlinuz-2.6.32-642.4.2.el6.x86_64 ro root=/dev/sda3
initrd  /initramfs-2.6.32-642.4.2.el6.x86_64.img

五、grub的排错

linux偶尔会遇到开机无法启动的情况,无法启动的原因有很多,这里简单写一下常见的。

1、 开机直接显示grub shell

其实这种是最为容易解决的。因为能出现grub shell说明正常进入了stage2,但是由于grub.conf无法找到或者grub.conf中所写入的配置不正确,导致grub无法引导启动。

如果是grub.conf文件的位置被修改而无法找到了,那么在进入grub shell后可以手动查找grub.conf文件,然后

grub>configfile /grub/grub.conf.bak

如果是grub.conf配置出错,或者不存在了。

针对这种问题,可以手动指定grub.conftitle模块的3个元素进行启动。

grub>root (hd0,0)
grub>kernel / vmlinuz-2.6.32-431.el6.x86_64 roroot=/dev/sda3
grub>initrd /initramfs-2.6.32-431.el6.x86_64.img
grub>boot

这样就可以直接进入系统,然后针对grub.conf进行修改即可。

六、扩展信息

linux系统下与grub相关的命令

  • 1、grub

进入grub shell,可以在其中进行title块的元素指定。包括root、kernel、initrd、configfile,也可以使用find命令进行简单文件查找。

  • 2、grub-crypt

为grub密码进行加密,支持md5、sha-256、sha-512。

参数:

--md5

--sha-256

--sha-512     这个是默认参数,默认以sha-512进行加密。

  • 3、grub-md5-crypt

为grub密码进行md5加密,同grub-crypt --md5

  • 4、grub-terminfo

修改grub所适配的不同终端类型,默认为vt100-compatible,不常用。

转载于:https://blog.51cto.com/doctorz/1935097

GURB详解(实施级)相关推荐

  1. Pandas知识点-详解行列级批处理函数apply

    Pandas知识点-详解行列级批处理函数apply 在Pandas中,DataFrame和Series等对象需要执行批量处理操作时,可以借用apply()函数来实现. apply()的核心功能是实现& ...

  2. 闲鱼架构专家,详解亿级C2C电商平台,商品体系架构如何搭建?

    文章来源:咸鱼技术(XYtech_Alibaba) 作者:意境 背景 闲鱼是一个典型的C2C场景的闲置交易平台,每个在闲鱼的用户都能享受到自由交易的乐趣,只要简单的输入商品名,商品价格,库存等信息就能 ...

  3. 龙族幻想服务器维修到几点,龙族幻想修理工在哪?详解100级版本最新三个异闻怎么完成...

    哈喽小伙伴们,我是阿川.龙族幻想开放一百级版本时,同时更新了三个青铜异闻,很多小伙伴们不知道如何完成,下面为大家详细攻略一下. 养家之人--修理工?之前怕不是在咖啡店打工吧! 异闻"养家之人 ...

  4. 详解块级元素、行内元素、行内块级元素类型、区别及相互转化

    1)块级元素 特点: 1.总是从新的一行开始 2.高度.宽度都是可控的 3.宽度没有设置时,默认为100% 4.块级元素中可以包含块级元素和行内元素 5.块级文字元素中不能放入其他块级元素 6.块级大 ...

  5. 深度长文|详解现象级ChatGPT发展历程、原理、技术架构详解和产业未来

    来源:工业互联网研习社 作者:陈巍博士,曾担任华为系自然语言处理(NLP)企业的首席科学家,文章首发于「先进AI技术深入解读」 工业互联网浪潮来袭,你准备好了吗? 每一代GPT模型的参数量都爆炸式增长 ...

  6. C语言石头剪子布游戏(详解保姆级)

    石头剪子布游戏: (1)定义游戏规则剪刀 干掉 布石头 干掉 剪刀布 干掉石头 (2)显示玩家开始猜拳 (3)接收玩家输入的内容 (4)让电脑随机产生一种拳 (5)判断比较 (1)玩家赢的情况(显示玩 ...

  7. Html块级元素详解

    Html块级元素详解 *块级元素 常见的有:div , table, tr , from , ul ,li ,ol ,h1~h6, p 盒子 div 标签 <div class="bq ...

  8. 关于数据库连接池满了的问题详解

    关于数据库连接池满了的问题详解 代码级问题 实例问题 问题根源 问题扩展 代码级问题 问题重现: 某某系统在生产环境使用一定时间后表现出用户不能登录,后台tomcat日志报如下错: 2008-08-1 ...

  9. 高性能千万级定时任务管理服务forsun使用详解

    Forsun高性能高精度定时服务,轻松管理千万级定时任务. 项目地址: https://github.com/snower/forsun 使用 linux 系统定时器提供精确到秒级的定时调度,长时间运 ...

最新文章

  1. 5行代码,快速实现图像分割,代码逐行详解,手把手教你处理图像 | 开源
  2. REST 架构是什么
  3. Asp.net Mvc Codeplex Preview 5 第三篇 实现Action参数传递繁杂类型 【转】
  4. excel表格行宽列高怎么设置_excel表格怎么设置行高列宽
  5. Angular 应用的DevDependencies
  6. C,C++宏中#与##的讲解
  7. s3c6410 uboot代码分析《二》
  8. anyview下载java,下载AnyviewMobile Games Java - 596763 - ebook txt Anyview | mobile9
  9. 互联网人必读 | 大数据思维的十大核心原理
  10. ES6新特性_Promise实践练习-多个文件内容读取---JavaScript_ECMAScript_ES6-ES11新特性工作笔记028
  11. 安卓图片框架:universal-image-loader的高速使用
  12. coolfire文章之五
  13. ApowerREC v1.5.6.2 最佳屏幕录像机
  14. js实现文本语音播放
  15. 任意多边形的最大内切圆算法
  16. css样式代码的基本格式
  17. 关于 Alpine Docker 镜像漏洞 CVE-2019-5021
  18. API获取订单接口文档使用说明
  19. 塑料回收标志相关知识
  20. ad电阻原理图_Arduino动手做(2)光敏电阻模块

热门文章

  1. linux top命令查看内存及多核CPU的使用讲述 [转]
  2. Cisco 3560 丢失 IOS 解决过程
  3. Android微信智能心跳方案 Android微信智能心跳方案
  4. [C#]统计文本文件txt中的行数(快速读取)
  5. 【算法拾遗(java描写叙述)】--- 选择排序(直接选择排序、堆排序)
  6. JavaScript 页面间传值
  7. rhel5 LAMP配置详解
  8. Android实例RSS客户端开发(1)
  9. 静态联编与动态联编之virtual的作用
  10. 哈希加密:MD5()