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 键自动补全:避免手动输入错误
- 修复后必须执行永久修复命令,否则重启故障重现
- 操作前务必创建快照
评论