grub rescue救援模式的处理
简要版本解决办法
- ls查看已有分区
- ls (hd0,6)可以看到里面有GRUB目录
- set命令查看当前的变量,发现都是hd0,7
- set root=(hd0,6)
- set prefix=(hd0,6)/grub
- insmod normal
- normal
每次开机都这么折腾一遍太麻烦,怎么办呢?解决办法:
- sudo update-grub
- sudo grub-install /dev/sda
Grub2的运行模式
- 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' 就可以换回常规的菜单模式了。
- 在rescue救援模式下只有很少的命令可以用:
set | 查看环境变量,这里可以查看启动路径和分区。 |
ls | 查看设备 |
insmod | 加载模块 |
root | 指定用于启动系统的分区,在救援模式下设置grub启动分区 |
prefix | 设定grub启动路径 |
修复操作说明
我的linux在调整分区后,出现了grub rescue>
这表示grub2的配置文件坏了,由于分区调整或分区UUID改变造成GRUB2不能正常启动,从而进入修复模式(grub rescue)也称救援模式。
- 确认boot目录位置
# ls查看一下设备状态,可使用tab键自动补全,并有各分区提示信息 grub rescue> ls (hd0,msdos3) error: bad filename. # 提示:错误的文件名,我在测试时发现必须是后面加一个/ grub rescue> ls (hd0,msdos3)/ ./ ../ lost+found/ # 通过查看发现在(hd0,msdos1)/下有一个boot目录
-
设置grub的启动分区和路径
set root=(hd0,msdos1) #设置grub启动分区 set prefix=(hd0,msdos1)/boot/grub/ #设置grub启动路径 # 查看一下设置情况,直接输入set可以查看root和prefix的配置 grub rescue> set prefix=(hd0,msdos1)/boot/grub root=hd0,msdos1
- 加载基本模块
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
# 进入系统后,先更新grub 更新:update-grub #更新 # 修改grub.cfg后,再执行install 安装:grub-install /dev/sda #安装