🚨 问题背景
今日在维护一台 CentOS 8 服务器时,重启后系统无法正常引导,直接进入 grub rescue> 模式,控制台抛出关键错误:
plaintext
error: ../../grub-core/kern/disk.c:258:no such partition.
Entering rescue mode...
grub rescue>
尝试执行 ls 查看磁盘分区时,所有分区均提示 unknown filesystem,无法识别文件系统结构,系统完全不可用。
🔍 问题分析
核心错误解读
表格
| 错误信息 | 含义 |
|---|---|
no such partition | GRUB 引导程序无法找到配置中指定的根分区或 /boot 分区 |
unknown filesystem | GRUB 缺少对应文件系统驱动模块,无法读取分区内容 |
根因定位
- 磁盘分区顺序变动或分区被删除 / 格式化,导致 GRUB 配置指向的分区不存在
/boot/grub模块目录损坏或丢失,GRUB rescue 模式无法加载文件系统驱动- 初步排查发现:bash运行
grub rescue> ls (hd0) (hd1) (hd1,msdos1)所有分区访问均提示文件系统未知,直接加载ext4/part_msdos等模块也因找不到路径失败,确认无法在 rescue 模式下完成修复。
✅ 解决方案:Live 环境修复 GRUB
步骤 1:准备 CentOS 8 Live 启动盘
- 下载 CentOS 8 Live ISO 镜像
- 使用 Rufus / Etcher 工具将镜像写入 U 盘,制作成可引导启动盘
- 服务器插入 U 盘,重启后按
F12/Del进入 BIOS,设置从 U 盘启动 - 进入 Live 系统后,选择「试用 CentOS Linux 8」(不安装)
步骤 2:挂载系统分区
打开终端,执行以下命令:
# 查看磁盘分区,定位系统根分区
sudo lsblk
# 挂载根分区到 /mnt(示例:系统分区为 /dev/sdb1)
sudo mount /dev/sdb1 /mnt
# 挂载系统必需目录(为 chroot 做准备)
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
⚠️ 若存在独立
/boot分区,需额外执行:sudo mount /dev/sdb2 /mnt/boot
步骤 3:切换到系统环境并修复 GRUB
# 切换到本机系统环境
sudo chroot /mnt
# 重新安装 GRUB 到磁盘(⚠️ 必须指定磁盘,如 /dev/sdb,而非分区 /dev/sdb1)
grub2-install /dev/sdb
# 重新生成 GRUB 配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
# 退出 chroot 环境
exit
# 卸载所有挂载分区
sudo umount -R /mnt
# 重启服务器
reboot
步骤 4:验证修复结果
重启后拔掉 U 盘,系统正常进入 GRUB 启动菜单,选择默认内核后成功启动 CentOS 8 系统,服务恢复正常。
💡 避坑总结
- GRUB rescue 局限性:rescue 模式本身不包含完整文件系统驱动,必须依赖
/boot/grub目录加载模块,若分区无法读取则无法继续,需通过 Live 环境修复 - 命令细节:
grub2-install必须指定磁盘(如/dev/sdb)而非分区(如/dev/sdb1),否则会安装失败 - 预防建议:
- 避免随意修改磁盘分区顺序或删除分区
- 定期备份
/boot目录和/etc/default/grub配置文件 - 系统内核升级后,执行
grub2-mkconfig同步引导配置
📌 结语
CentOS 8 系统启动故障多与 GRUB 引导配置相关,遇到 grub rescue> 模式时不必慌张,通过 Live 环境挂载系统并重建 GRUB 是最可靠的修复方案。日常运维中做好备份和规范操作,能有效避免此类问题发生。