本文主要讲解grub原理和系统启动过程中grub的作用过程.
grub是多数Linux发行版中使用的boot loader系统引导程序, 其主要作用是计算机从boot sequence中选取指定设备之后, 由grub找到系统内核kernel文件并加载内核文件的作用.
grub执行过程
grub作用过程中主要分为三个阶段的作用, 如下图所示:
stage1: 启动grub程序, 位于MBR的前446Byte中;
stage1.5: 识别内核所在分区的文件系统类型, 位于内核文件所在分区的boot sector中;
stage2: 根据grub的配置文件grub.conf中的启动菜单, 读取菜单中指定的内核vmlinuz文件及读取参数和initramfs文件, 位于内核vmlinuz文件所在的boot目录中.
其中内核文件命名方式为: vmlinuz-$(uname -r);
initrd文件命名方式为: initrd-$(uname -r).img(RHEL5)或initramfs-$(uname -r).img(RHEL6)
grub配置文件grub.conf的字段说明
default=0 指定默认启动的title菜单 timeout=5 指定等待时间 password --md5 $1$FRa2P$uZGEloRiLOH8sBMqhz5zP/ 指定通过命令行管理grub配置文件的密码 splashimage=(hd0,0)/grub/splash.xpm.gz 指定grub背景图片路径 hiddenmenu 指定隐藏菜单选项 title CentOS 6 (2.6.32-504.el6.x86_64) title字段指定菜单名称 root (hd0,0) root字段指定内核文件vmlinuz所在分区作为"grub根目录" kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/mapper/vg0-root kernel字段指定内核文件vmlinuz在"grub根目录"的绝对路径, 并指定以只读方式加载真正根文件系统的设备文件路径 initrd /initramfs-2.6.32-504.el6.x86_64.img initrd字段指定initramfs文件在"grub根目录"的绝对路径 password --md5 $1$FRa2P$uZGEloRiLOH8sBMqhz5zP/ 指定启用系统时的密码
注:
1 对grub而言,所有类型硬盘一律hd,格式为(hd#,N) : #表示第几个磁盘 , 最后的N表示对应磁盘的分区;可以通过查看 /boot/grub/device.map 来查看 grub 识别的对应磁盘编号
2 根据boot目录是否单独分区, "grub的根目录"会发生改变, kernel文件和initrd文件以"grub根目录"参考点的绝对路径也会改变:
boot目录单独分区/dev/sda1, /根目录为/dev/sda2 ==> "grub根目录"为/dev/sda1 ==> kernel文件以"grub根目录"参考点的绝对路径为/vmlinz-$(uname -r), initrd文件同理;
boot目录没有单独分区, 而是作为/根目录的一个子目录且/根目录为/dev/sda1 ==> "grub根目录"为/dev/sda1 ==> kernel文件以"grub根目录"参考点的绝对路径为/boot/vmlinz-$(uname -r), initrd文件同理.
grub主要作用
1 用户忘记登录密码
方法: 系统启动进入grub菜单画面后, 按e键进入菜单编辑模式, 选择第二行kernel菜单项后按e键对其进行编辑, 在其后加上1或s或S后, Esc退出后, 再按b键就会以单用户模式启动内核, 直接可以修改用户密码.
密码修改完成后可以通过init命令切换至原级别就可以正常使用.
2. grub.conf配置文件丢失或损坏
方法: 系统默认会进入grub的命令行模式 grub>
先通过 find (hd#,0)/+TAB键, 可以通过 find 和 Tab将命令查找到vmlinuz文件所在磁盘分区
grub> root (hd#,0)通过 root 指定 vmlinuz 所在磁盘分区 grub> kernel /vmlinuz-2.6.18-208.e15 ro root=/dev/mapper/vg0-root 通过 kernel 指定 kernel 文件, 并以只读方式挂载根文件系统 grub> initrd /initrd-2.6.18-208.e15.img通过 initrd 指定 initramfs 文件 grub> boot启动
正常开机启动后添加 GRUB 的配置文件
3. grub程序损坏
方法: grub损坏后无法通过grub引导系统内核, 系统提示为boot
在光驱中插入系统镜像光盘, 并设定启动顺序为光盘启动,
通过光盘启动后选择通过救援模式修复系统
在救援模式种类中选择光盘
选择救援模式后系统会提示尽力恢复原系统, 并将原系统挂载之/mnt/sysimage目录中
查找到原系统后会提示执行根切换 chroot /mnt/sysimage, 来将根切换至原有系统根目录下
进入救援模式的shell环境中, 将根切换至原有系统根目录下, 使用grub-install命令来对原有系统的对应磁盘的MBR中安装grub程序.
安装完成后, 退出原有根系统后, 在救援模式环境下重启系统即可还原为原系统,
如果此时配置文件没有损坏, 不需要修改配置文件; 如果配置文件损坏, 会在开机后进入grub命令行接口, 再手动指定grub.conf配置文件中的内容即可正常启动
# 重启系统后要将启动设备的光盘启动取消
本人水平有限, 如有理解不当的地方, 请大家给予指正, 非常感谢!
本文出自 “Pavel” 博客,请务必保留此出处http://pavel86.blog.51cto.com/8349178/1691685
原文地址:http://pavel86.blog.51cto.com/8349178/1691685