RHEL6:修复启动过程

以下是几种系统无法启动的情况以及相应的解决方法。

查看系统启动信息

如果启动能进入GRUB引导,但是系统启动的时候出现问题,可以通过修改GRUB的配置来查看启动的调试信息,定位到问题再进行解决。
1.系统启动时进入GRUB菜单;
0-grub-menu
2.按键盘上的'e'键,进入编辑模式;
1-grub-menu
3.选中kernel一项,按e编辑,删除最后的“rhgb quiet”,按enter保存,最后按b启动。
2-grub-menu-kernel
4.于是就看到系统启动过程中的调试信息了。(貌似直接启动系统,然后按Esc也能看到,不用搞这么复杂。)
3-grub-booting
从GRUB手动启动系统 如果缺少了GRUB配置信息,进入GRUB后将无从引导系统。
这时可以进行手动引导。
grub的配置信息可以在/boot/grub/grub.conf中找到。

# vim /boot/grub/grub.conf 
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda3
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux (2.6.32-431.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=8f8608d3-c941-4092-a9c5-b5aa9221515f rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-431.el6.x86_64.img

如果grub.conf文件损坏,则开机的时候会出现 grub > (如下图)。
4-grub-conf
解决的方法是,手动输入系统引导信息。

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

root (hd0,0) 这里指定了/boot所在的磁盘分区,grub是从0开始算的,hd0,0是第一个硬盘第一个分区;
kernel 指定kernel的位置,输入 kernel /vm 后按tab键就能补全,root= 指明root(/)所在分区;
initrd 指定initrd镜像文件;
最后boot启动系统;

修复GRUB

GRUB程序在磁盘的前446字节,如果这446字节被破坏了,那么开机时就无法进入GRUB引导了。
可以用以下指令破坏GRUB程序(在虚拟机中实验)。

# dd if=/dev/zero of=/dev/sda bs=1 count=446

重启,然后GRUB就消失了。
6-grub-broken
修复方法:用光盘/U盘引导,进入救援模式(Rescue Mode),重新安装Grub引导。
进入救援模式后输入以下指令(sda是我虚拟机的硬盘,要按现实情况决定)

# chroot /mnt/sysimage
# grub-install /dev/sda
# sync

重启计算机,GRUB引导就回来了。

initrd镜像损坏

initrd镜像相当于最小的linux,它可以引导完整的系统。
initrd镜像存放在/boot/目录下,我虚拟机上的initrd镜像文件是/boot/initramfs-2.6.32-431.el6.x86_64.img
如果镜像文件损坏,系统将无法加载,过完GRUB引导后,会停滞不前,如图。
10-initrd
手动编辑Grub引导会发现缺少initrd镜像文件,如图。
11-initrd
修复方法:插入引导盘,进入救援模式,用 mkinitrd <镜像文件名> <内核版本号> 来修复initrd镜像。
进入救援模式后输入,

# chroot /mnt/sysimage/
# mkinitrd /boot/initramfs-2.6.32-431.el6.x86_64.img `uname -r`
# sync

重启即可。
`uname -r` 指令可以获得当前kernel版本号。