一般进入这个模式说明连引导都没有正常加载,相当于只加载了MBR中的预置程序。
问题现场:
连接VNC你会看到进入了这个模式:
grub rescue>
进入上述阶段说明grub后续阶段没有被正常加载,我们首先要找到/boot目录去哪了:
grub rescue> ls
(hd0),(hd0,gpt0),(hd0,gpt1),(hd0,gpt2),。。。。。
逐个分区去找:
grub rescue> ls (hd0,gpt1)/
找到以后执行如下步骤(例如我的环境boot目录跑到了gpt2分区的root目录下):
grub rescue> set root=(hd0,gpt2)
grub rescue> set prefix=(hd0,gpt2)/boot/grub
最后跳转到normal模式:
grub rescue> insmod normal
grub rescue> normal
至此grub找回了,恢复了正常模式,但是伴随着这种问题大概率内核和initramfs所在的路径也肯定是错误的,所以还得再手动找一次。 执行normal之后系统会跳转到grub界面,因为从前面的步骤我们已经加载了grub并找到了grub.cfg:
找到kernel和initramfs并加载:
grub > linuxefi (hd0,gpt2)/boot/vmlinuz-3.10.0-1160.71.1.el7.x86_64
grub > initrdefi (hd0,gpt2)/boot/initramfs-3.10.0-1160.71.1.el7.x86_64.img
grub > boot
启动后系统会停在initramfs作为根分区的环境下,执行如下命令可以切换到系统盘根分区下面:
:/# mount /dev/vda2 /sysroot
:/# mount --bind /dev/ /sysroot/dev
:/# mount --bind /proc/ /sysroot/proc
:/# mount --bind /sys/ /sysroot/sys
:/# chroot /sysroot
:/# source /root/.bashrc
:/# source /root/.bash_profile
上述方式可以完整的从initramfs切换到系统盘根分区,同时也是验证根分区是否还支持正常启动的基础方法。