这是以前服务器遇到的一个grub损坏故障,导致业务中断,当时对于故障做了一个还原,确认出系统故障原因是人为操作。所以下以是分别做了两次实验grub修复,还原过程及解决思路。在Linux中这些故障虽然不常见,但是出现的话可能会让很多人摸不着头脑。这是centos7系统,运行在服务器上,其它linux系统大致可参考一下。
实验1,删除整个 grub2 目录
1、首先进入系统后把 /boot/grub2/ 整个目录删除

2、当系统再次重启时是无法进入的,默认会进到恢复模式 grub rescue 界面,因此我们需要借助
Centos 7 的安装光盘来启动系统,通过光盘启动时选择 Troubleshooting 模式

3、然后选择 Rescue a Centos system 模式,然后提示按任意键进入恢复模式

4、接下来选择1,后回车进入单用户模式

5、进入单用户模式后会提示切换到根目录,需要执行命令 chroot /mnt/sysimage

6、当切换根目录后可以看 shell 环境变化,从 sh-4.2 变成了 bash-4.2 ,然后找到/boot分区挂载的磁
盘,并执行命令 grub2-install /dev/sda 安装 grub2 到指定的磁盘上 ,看到提示没有错误报告即为
成功。

7、通过命令 grub2-mkconfig -o /boot/grub2/grub.cfg 命令,生成启动配置文件 grub.cfg ,看
最后出现 done 后表示生成配置文件成功。然后退出当前shell环境

8、退出 bash 环境后,直接 reboot 重启系统即可正常进入系统了
实验2 仅丢失了 grub.cfg 文件
1、正常进入系统后删除 /boot/grub2/grub.cfg 文件后重启系统

2、重启后直接进入 grub 命令窗口,可以执行的命令有限

ls -l 列出磁盘列表信息
insmod lvm 加载 lvm 模块,当加载完后 ls -l 即可以看到逻辑卷

// 因为默认为这个,可以不执行设置
grub> set root=(hd0,msdos1) (这里设置找到的boot分区)
//(root=这里设置的就是系统真正的根分区)
grub> linux /vmlinuz-3.10.0-327.el7.x86_64 root=/dev/mapper/centos-root
grub> initrd /initramfs-3.10.0-327.el7.x86_64.img
//引导系统启动
grub> boot

3、正常登陆系统后,需要生成一下 grub.cfg 文件,不然一重启系统就会再次进入刚开始的 grub 命令
窗口
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file …
Found linux image: /boot/vmlinuz-3.10.0-327.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-327.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-d90c9d4e275d43d798c856ad1137c137
Found initrd image: /boot/initramfs-0-rescue-
d90c9d4e275d43d798c856ad1137c137.img
done
总结
- 第一次实验由于整个 grub2 目录都已经被删除了,所以需要借助光盘来恢复,安装丢失的引导文
- 件及配置;面同时在 grub2-install /dev/sda 时是需要指定磁盘的,并不能指定 lvm 卷,因为无法使用 insmod lvm 怀导入驱动。
- 第二次直接恢复,并不需要光盘即可完成操作,因为文件都存在只是少了一个引导的配置文件。