grub rescue救援模式的处理

简要版本解决办法

  1. ls查看已有分区
  2. ls (hd0,6)可以看到里面有GRUB目录
  3. set命令查看当前的变量,发现都是hd0,7
  4. set root=(hd0,6)
  5. set prefix=(hd0,6)/grub
  6. insmod normal
  7. normal

每次开机都这么折腾一遍太麻烦,怎么办呢?解决办法:

  1. sudo update-grub
  2. sudo grub-install /dev/sda

Grub2的运行模式

Normal 也就是常规模式,包括了菜单界面与控制台,即是 Grub 传统版的默认模式。
Rescue 这个是受限模式,比如 Grub 没有能找到 root 设备,就会进入这种模式。

通常,我们可以在 normal 模式下输入 'rescue' 即可进入 rescue 模式;在 rescue 模式下输入 'normal' 即可进入 normal 模式。

可是,通常后一种情况,需要我们做些一个相关设置才可以进入菜单:

set
 root=(hd0,1)            # 指定根分区为第一个磁盘,里面包含了 grub.cfg
 set prefex=/boot/grub   # 指定路径前缀,以构成菜单文件字符串'(hd0,1)/boot/grub/grub.cfg'(通常也不需要修改)

然后输入 'normal' 就可以换回常规的菜单模式了。

set 查看环境变量,这里可以查看启动路径和分区。
ls 查看设备
insmod 加载模块
root 指定用于启动系统的分区,在救援模式下设置grub启动分区
prefix 设定grub启动路径

修复操作说明

我的linux在调整分区后,出现了grub rescue>

这表示grub2的配置文件坏了,由于分区调整或分区UUID改变造成GRUB2不能正常启动,从而进入修复模式(grub rescue)也称救援模式。

# ls查看一下设备状态,可使用tab键自动补全,并有各分区提示信息
grub rescue> ls (hd0,msdos3)
error: bad filename.
# 提示:错误的文件名,我在测试时发现必须是后面加一个/

grub rescue> ls (hd0,msdos3)/
./  ../  lost+found/
# 通过查看发现在(hd0,msdos1)/下有一个boot目录
insmod /boot/grub/normal.mod       #加载基本模块
normal  #进入普通模式,出现菜单,如果加载grub.cfg(错误的)可能出现问题,按shift可以出现菜单,之后按c键进入控制台

进入正常模式后就会出现grub>这样的提示符,在这里支持的命令就非常多了。

set root=(hd0,msdos1)  #设置正常启动分区
linux /boot/vmlinuz ....  ro text root=/dev/sda1  #加载内核,进入控制台模式
initrd  /boot/initrd ....  #加载initrd.img
boot #引导
# 进入系统后,先更新grub
更新:update-grub            #更新
# 修改grub.cfg后,再执行install
安装:grub-install /dev/sda  #安装