本文针对grub故障及服务故障导致的开机无法启动的情况进行模拟,并给出修复详细步骤。


一、grub各配置文件问题引起的开机故障

      可能出现此故障场景

  • 当前硬盘没有grub,每次启动都是通过有grub的光盘或U盘启动的当前硬盘上的操作系统

  • 有两块硬盘其中有一块没有安装grub

  • 主机WindowsLinux双系统共存,后来由于Windows坏了重装了Windows此时Linuxbootloader就被覆盖

  1、模拟stage1阶段(操作系统所在磁盘分区的前446字节)被破坏导致的开机故障

    模拟操作:

CentOS 6 系统无法开机故障修复_启动修复

    故障现象:开机停留在如果所示界面

CentOS 6 系统无法开机故障修复_启动修复_02


修复方法1:

①如上图选择Rescue installed system(救援模式),或者在该界面按Esc进入boot命令行接口

键入圈红内容也可以进入紧急救援模式。之后需选择语言及键盘图略。

CentOS 6 系统无法开机故障修复_启动修复_03

②是否设置网络信息

CentOS 6 系统无法开机故障修复_centos_04


注:若要通过网络服务器上的文件修复grub可启动该项,此处要通过光盘修复选择“No”

紧急救援模式接下来会尝试查找本机硬盘上是否有装过操作系统,如果有的话它会把找到的根挂载至当前启动的小的紧急救援模式的Linux系统的/mnt/sysp_w_picpath目录下,稍后用户可以到该目录下找所需要的文件,若要这样选择“continue” 。后续确定图略

CentOS 6 系统无法开机故障修复_启动修复_05

④选择shell,进入系统开始修复阶段

CentOS 6 系统无法开机故障修复_启动修复_06

CentOS 6 系统无法开机故障修复_启动修复_07

chroot /mnt/sysp_w_picpath从救援模式的根切到已损坏操作系统,因为后续要把grub安装到该操作系统。

grub-install /dev/sda重新安装grub,以修复系统。

⑤sync将修改写入磁盘,退出已grub修复的系统进入紧急救援模式下的Linux重启系统。

CentOS 6 系统无法开机故障修复_启动修复_08

重启过程中拆除光盘避免系统以光盘启动,如下图不打勾“启动时连接”即可

CentOS 6 系统无法开机故障修复_开机无法_09   

重启系统成功图略。

修复方法2:如方法1前面步骤至切根操作(chroot /mnt/sysp_w_picpath),之后键入grub进入grub命令行界面交互操作,


grub> root (hd#,#)

grub> setup (hd#)

quit

“#”视情况而定,例如root(hd0,0)操作系统在第一块硬盘,第一个分区。setup (hd0)代表把grub装到哪块硬盘。

注意:第二种方法要求/boot/grub目录下必须有stage1stage2和各类stage1_5。局限性较大,推荐使用第一种方法进行修复。

2、模拟stage1_5阶段(操作系统所在磁盘分区的512字节约3个扇区)被破坏导致的开机故障

     模拟操作:

CentOS 6 系统无法开机故障修复_开机无法_10   故障现象为卡在全黑屏(不用截图了吧)

 修复方法:开机按Esc进入救模式界面,之后操作同stage1阶段。


3、模拟stage1_5阶段(操作系统所在磁盘分区的512字节约3个扇区)被破坏导致的开机故障

     模拟操作:将/boot/grub/目录下除grub.conf文件其余全部删除。

  故障现象:如图所示

CentOS 6 系统无法开机故障修复_centos_11修复方法:开机按Esc进入救模式界面,之后操作同stage1阶段。

4、将/boot/grub目录删除导致的无法开机。

 故障现象:如图

CentOS 6 系统无法开机故障修复_启动修复_12开机会卡在grub命令行界面。

修复方法:如下图键入root、kernel、initrd三条主要信息(内容以实际故障计算机为准),重启后进入救援模式重复上述操作(切根、生产grub配置信息),

重写配置文件:/boot/grub/grub.conf

简单的写一下:

title jinbus

root (hd0,0)

kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/sda3

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

重启解决问题。

CentOS 6 系统无法开机故障修复_启动修复_13

5、删除/boot目录下的所有文件,导致的开机无法启动。

  模拟故障:rm –rf /boot

  

此时删除了启动时需要的:

   内核文件:vmlinuz-2.6.32-642.el6.x86_64

      虚拟文件系统:initramfs-2.6.32-642.el6.x86_64.img

        grub 的启动文件:stage1.5 stage2

             grubstage1.5 :如果之前发生过修复,那么启动时用到的数据存在于MBR之后,stage1.5同样存在于文件夹下,但是不会用到 。

        grub的配置文件:grub.conf

  修复方法:进入光盘救援模式,恢复内核文件:vmlinuz-2.6.32-642.el6.x86_64  及 虚拟文件系统:initramfs-2.6.32-642.el6.x86_64.img

       方案1:安装 kernel进行修复,

chroot /mnt/sysimange

           mount /dev/sr0 /mnt/sr0

           rmp –ivh /mnt/sr0/Packages/kernel.****.rpm

     方案2:分别修复

        ①  chroot /mnt/sysimange

            cp /mnt/isolinux/vmlinuz-2.6.32-642.el6.x86_64 /boot

            cp /mnt/isolinux/initramfs-2.6.32-642.el6.x86_64.img /boot

         ②  创建虚拟文件系统文件


            mkinitrd /boot/initramfs-`uname  -r `.img  `uname  -r `

         ③ 安装 grub 使用命令:

        grub-install /dev/sda

         ④  重写 grub.config

         ⑤  sync 同步 


二、服务问题引起的开机故障


   模拟服务故障环境:在/etc/init.d/下新建故障服务test.sh,

CentOS 6 系统无法开机故障修复_开机无法_14

新建该脚本要遵循LSB服务脚本定义的规范进行编写基本格式如上图,能接受4个基本参数即可{start|stop|status|restart}。在start函数中写入sleep 10000模拟开机无法启动的环境。

CentOS 6 系统无法开机故障修复_centos_15

如图设置test.sh服务为开机自启动。

故障现象:卡到某一服务无法开机

修复方法1:一般服务在单用户模式下不会设为自启动,开机至grub菜单界面。

CentOS 6 系统无法开机故障修复_centos_16

选中要启动的内核,a键编辑内核参数。如图在参数后面添加1(或者s、S、single)进入单用户模式。

CentOS 6 系统无法开机故障修复_centos_17

CentOS 6 系统无法开机故障修复_开机无法_18

chkconfig test.sh off 将故障服务off掉即可。

如果单用户模式都设为了开机启动,就需要使用第二种方法进行修复。

修复方法2:grub菜单a键编辑内核参数,后面添加如下图所示内容

CentOS 6 系统无法开机故障修复_centos_19

回车,b键启动

CentOS 6 系统无法开机故障修复_开机无法_20此时bash作为第一个启动的程序,会跳过initrd设定的服务。

CentOS 6 系统无法开机故障修复_centos_21此时是只读挂载没有修改权限,需重新挂载并进行后续操作。

重启完成修复。