
我长期在活跃在数据中心与企业级服务器运维一线,遇到过形形色色的系统不可启动故障,其中最常见、最令人头疼的往往不是应用崩溃,而是系统无法启动------尤其由于 GRUB 引导损坏导致的启动失败。在这篇文章里,我将结合真实案例,系统性地分享在 CentOS 7 中排查与修复 GRUB 引导问题的工具、方法、关键命令及思路,同时给出实用的参数细节、硬件环境配置、代码示例与对比表,帮助你在生产环境快速定位与恢复。
一、故障背景与现象
1.1 典型故障触发场景
| 场景 | 触发原因 |
|---|---|
| 升级内核后重启 | 内核版本更新后未更新 GRUB 配置 |
| 修改 /etc/default/grub | 错误的参数导致引导行失效 |
| 磁盘或分区损坏 | 引导扇区或 EFI 分区损坏 |
| 多操作系统共存 | GRUB 配置冲突或设备映射错误 |
| RAID/存储控制器调整 | 设备顺序变化引起设备定位失败 |
1.2 典型启动失败现象
-
黑屏停在如下提示:
GRUB loading. Error: no such partition. -
直接进入
grub rescue>提示符 -
系统突然重启或卡在
dracut阶段 -
报错
file not found或unknown filesystem
二、硬件环境与系统配置
以下是一个典型用于线上数据库/应用的 CentOS 7 香港服务器硬件配置:
| 项目 | 参数 |
|---|---|
| 机型 | Dell PowerEdge R740 |
| CPU | 2 × Intel Xeon Silver 4214 (12 核/24 线程) |
| 内存 | 128GB DDR4 |
| 磁盘 | 2 × 1TB NVMe(RAID1) |
| 引导方式 | BIOS Legacy / UEFI 可切换 |
| 操作系统 | CentOS Linux 7.9 (core) |
| 文件系统 | XFS |
| 引导程序 | GRUB 2 (grub2) |
三、GRUB 引导原理简述
在 CentOS 7 中,GRUB2 是默认的引导程序,它负责:
- 在开机后装载最基本模块
- 读取
/boot/grub2/grub.cfg - 将控制权交给 Linux 内核与 initramfs
GRUB2 支持 BIOS 和 UEFI 两种启动模式,启动过程与磁盘布局息息相关。
3.1 BIOS vs UEFI
| 特性 | BIOS | UEFI |
|---|---|---|
| 启动模式 | Legacy | 新式 |
| 引导记录 | MBR | GPT + EFI System Partition |
| 引导配置位置 | /boot/grub2 | /boot/efi/EFI/centos |
| 保持兼容性 | 较好 | 需支持 UEFI 固件 |
四、问题排查思路
排查 GRUB 引导问题,A5数据www.a5idc.com一般遵循以下步骤:
4.1 确认当前运行环境是否落入 rescue 模式
系统显示 grub> 或 grub rescue> 时,说明 GRUB 已加载但无法正确定位配置文件。
bash
grub rescue> ls
(hd0) (hd0,msdos1) (hd1) ...
4.2 使用 LiveCD / Rescue 模式启动
- 使用 CentOS 7 安装介质(ISO/U盘)启动服务器
- 选择
Troubleshooting → Rescue a CentOS system - 进入
chroot /mnt/sysimage
五、修复 GRUB 引导
5.1 修复 BIOS 引导(MBR)
bash
# mount 关键分区
mount /dev/nvme0n1p2 /mnt
mount /dev/nvme0n1p1 /mnt/boot
# 绑定必要目录
for i in /dev /dev/pts /proc /sys; do
mount --bind $i /mnt$i
done
# chroot 进入系统
chroot /mnt
# 重新安装 grub
grub2-install /dev/nvme0n1
# 生成新的 grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg
exit
reboot
5.2 修复 UEFI 引导
bash
mount /dev/nvme0n1p2 /mnt
mount /dev/nvme0n1p1 /mnt/boot/efi
for i in /dev /proc /sys; do
mount --bind $i /mnt$i
done
chroot /mnt
# 安装 grub 到 EFI 分区
grub2-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=centos --recheck
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
exit
reboot
六、常见问题与解决方法
6.1 错误:grub2-mkconfig 找不到内核
原因:内核文件未正确存在于 /boot
解决:
bash
ls -l /boot/vmlinuz*
# 如果缺失,可尝试重新安装内核包
yum install kernel --skip-broken
6.2 错误:no such device
检查设备 UUID 是否匹配:
bash
blkid
vi /boot/grub2/grub.cfg
替换错误的 UUID,重新 grub2-mkconfig。
七、实战案例
7.1 案例:升级内核后引导失败
现象:
升级内核后重启停在 grub rescue>。
分析:
/boot/grub2/grub.cfg 未生成对应内核条目。
解决:
bash
chroot /mnt
grub2-mkconfig -o /boot/grub2/grub.cfg
grub2-install /dev/nvme0n1
八、辅助检测工具
| 工具 | 用途 |
|---|---|
lsblk |
查看磁盘分区 |
blkid |
查看 UUID |
efibootmgr |
查看 UEFI 启动项 |
grub2-insmod |
加载 GRUB 模块 |
grub2-editenv |
编辑 GRUB 环境变量 |
九、总结与建议
- GRUB 引导问题多与磁盘布局、配置文件、固件模式相关;
- 建议在每次内核升级后检查
/boot/grub2/grub.cfg是否包含新内核; - 在大规模生产部署中,做好自动化备份与恢复脚本;
- 对于 RAID 环境,请务必确认引导所在磁盘映射无误。