假如看到grub rescue,表示mbr (master boot record)的资料,完全对应不上磁盘的状况,所以无法辨别系统的所有分区,更不用说连grub menu都无法读入。所以,处理的方法就是帮他找到grub的设置。
ls
# (hd0), (hd0,msdos3), (hd0,msdos2), (hd0,msdos1)
# ls可以列出所有的硬碟与分区,(hd0)是第一个硬碟,(hd0,msdos1)是第一颗硬碟的第一个分区。以此类推。输入指令时,可以简写成(hd0,1)表示。若是GPT分割,出现的会是(hd0,gpt0)的格式。
# 只出现(hd0),那表示你的分区表已经损坏;
ls (hd0,1)/
# 确定各个分区那个是 / ,哪个是/boot,就可以开始继续处理。现在假设 / 是(hd0,2),/boot 是(hd0,2)/boot。
#正式设置
grub rescue> set root=(hd0,2)
grub rescue> set prefix=(hd0,2)/boot/grub
grub rescue> insmod normal
grub rescue> normal
第一行指令:设置根目录所在的分区
第二行指令:设置grub目录。这样他才知道哪里去找模组。此行设置错误,第三行指令执行时,就无法载入模组。假如你的 /boot 没有额外分割,那这行就要写成 set prefix=(hd0,2)/boot/grub
第三行指令:载入normal模组
第四行指令:执行normal模组
normal模组作用是什麼?
会把一些指令,文件系统模组,及其他需要的模组自动呼叫进来。假如你的grub.cfg没有问题,应该就可以看见grub菜单了。
grub> set root=(hd0,2)
grub> linux /boot/vmlinuz-3.11.0-18-generic root=/dev/sda3
grub> initrd /boot/initrd.img-3.11.0-18-generic
grub> boot
# 第一行:设置根目录所在的分区
# 第二行:设置核心所在,并设置根目录所在分区
# 第三行:设置虚拟系统启动核心所在。
# 注:如果是grub0.9.8.e即grub-legacy在开机区,那么需要把linux改成kernel
# 第四行:开机,直接进入系统没有菜单
系统可以找到grub.cfg,但是上头的资料有问题,无法找到核心。常发生在变更分割表后,因grub无法辨识uuid或者label造成
本文由博客群发一文多发等运营工具平台 OpenWrite 发布