GRUB 引导故障快速修复指南

一、手动引导(在 grub> 或 grub rescue> 下)

1. 查找根分区

ls                          # 列出所有分区
ls (hd0,msdos1)/            # 查看分区内容,寻找 etc/ home/ boot/ 目录
# 假设根分区为 (hd0,msdos1),对应设备 /dev/vda1(云)或 /dev/sda1(物理)

2. 设置并加载内核

set root=(hd0,msdos1)
set prefix=(hd0,msdos1)/boot/grub2   # 若报错则尝试 /boot/grub
insmod linux
# 若 insmod 报错,改用 linux16
linux /boot/vmlinuz-<按Tab补全> root=/dev/vda1 ro
initrd /boot/initramfs-<按Tab补全>.img
boot

3. 常见错误处理

错误 解决
linux.mod not found linux16 命令,或检查 prefix 路径
dracut-initqueue timeout root 设备名错误,改用 root=UUID=...(用 blkid 查看)
卡在 dracut shell mkdir -p /sysroot && mount /dev/vda1 /sysroot && exit

二、进入系统后永久修复

# 确认当前 root 参数
cat /proc/cmdline

# 修正 /etc/default/grub 中的 root= 为正确设备
sed -i 's|root=/dev/sda1|root=/dev/vda1|g' /etc/default/grub

# 重装 GRUB
grub2-install /dev/vda        # 磁盘名,不是分区
grub2-mkconfig -o /boot/grub2/grub.cfg
dracut --force
reboot

三、云服务器无救援模式的替代方案

  • VNC 进入 GRUB 菜单​:重启按 Esc,按 e 编辑内核行,修改 root=/dev/vda1,按 Ctrl+X 启动。
  • 使用 LiveCD ISO​:挂载 CentOS/Anolis LiveCD,从 CD-ROM 启动,挂载原系统盘后 chroot 修复。
  • 提交工单​:请求挂载救援系统。

四、关键命令速查

命令 作用
ls (hd0,msdos1)/ 查看分区根目录
set root=(hd0,msdos1) 设置根分区
linux /boot/vmlinuz-... root=/dev/vda1 ro 指定内核
initrd /boot/initramfs-... 指定 initrd
boot 启动
grub2-install /dev/vda 重装引导
grub2-mkconfig -o /boot/grub2/grub.cfg 生成配置
dracut --force 重建 initramfs

五、经验总结

  • 云环境常见问题​:设备名 /dev/sda1 应改为 /dev/vda1
  • Tab 键自动补全​:避免手动输入错误
  • 修复后必须执行永久修复命令​,否则重启故障重现
  • 操作前务必创建快照