CentOS开机只剩黑底光标?别慌,手撕grub.cfg让它满血复活
CentOS grub界面丢失:重建grub.cfg笔记

服务器重启后屏幕一黑,只剩左上角小光标在闪,连熟悉的系统选择菜单都不见?别急着重装,九成是grub.cfg跑路。把这篇笔记啃完,半小时内让机器重新唱歌。
先别砸键盘,三分钟判断是不是grub.cfg失踪
开机无菜单、直接掉进grub rescue模式,或提示“error: file '/grub2/grub.cfg' not found”,基本就能定罪。若还能看到内核选项但进系统报错,那是另一码事,别混为一谈。
手边常备:一只CentOS镜像U盘+一根冷静的神经
镜像版本最好与系统同大版,小版可向下兼容。插上U盘,BIOS选U盘启动,选“Troubleshooting—Rescue a CentOS system”,等它滚完码,进shell后输入1回车,把原系统挂到/mnt/sysimage,再敲chroot /mnt/sysimage,此时你就相当于坐在原系统里发号施令。
找到“失踪人口”存放路径

grub2的配置默认躺在/boot/grub2/grub.cfg,UEFI机型则在/boot/efi/EFI/centos/grub.cfg。先确认分区表格式:ls /sys/firmware/efi有输出就是UEFI,反之为Legacy。路径别搞错,否则后面全白搭。
重建第一步:让grub2重新扫描磁盘
在chroot环境里执行:
grub2-mkconfig -o /boot/grub2/grub.cfg
UEFI机型加条尾巴:
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

命令跑完会打印“Found linux image …”,看到内核版本号就算成功一半。
Legacy BIOS:把引导扇区也刷一遍
仅重建cfg不够,还要把stage2写进MBR。假设/boot在/dev/sda1,系统盘是/dev/sda:
grub2-install /dev/sda
若提示“cannot find EFI directory”直接无视,那是grub2-install误把BIOS当UEFI,加参数强制:
grub2-install --target=i386-pc /dev/sda
出现“Installation finished. No error reported.”才算踏实。
UEFI机型:把efi文件注册回NVRAM
部分主板在丢失cfg后会把CentOS启动项一并清掉,需重新登记:
efibootmgr -c -d /dev/sda -p 1 -L "CentOS" -l '\EFI\centos\shimx64.efi'
命令里单引号中的反斜杠别改成斜杠,否则主板不认。回显“Boot000* CentOS”即写入成功。
多系统共存?先别急着退出chroot
如果机器原本Windows+CentOS双启,重建cfg后Windows选项消失,再跑一遍:
os-prober
grub2-mkconfig -o /boot/grub2/grub.cfg
第二条命令会把Windows捡回来。没有os-prober就装:
yum install -y os-prober
特殊坑:LVM、软RAID、加密盘
/boot被LVM吞掉的情况极少,但若真遇上,先vgchange -ay激活卷组,再挂载/boot分区。软RAID同理,确保md设备已组装。加密盘/boot没加密可照常操作;如果/boot也在LUKS里,那就得先解密:
cryptsetup luksOpen /dev/sda2 boot_crypt
挂载后再走重建流程,记得更新initramfs:
dracut -f
最后检查:重启前必做的三条命令
1. 核对cfg时间戳
ls -l /boot/grub2/grub.cfg看时间是否刚刷新。
2. 确认内核链完整
grep vmlinuz /boot/grub2/grub.cfg能搜到版本号即可。
3. 退出chroot并同步缓存
exit
sync
然后输入reboot,拔掉U盘,眼瞅着熟悉的启动菜单蹦出来,收工。
如果还是进不去?三步回滚方案
1. 重启再进U盘,切chroot,把刚生成的cfg改名备份,拷回之前的老cfg试试,排除手误。
检查磁盘UUID是否变动:blkid对比grub.cfg里的UUID,若不同,改/etc/fstab与grub.cfg对应项。
主板关闭Secure Boot,部分老旧主板在NVRAM掉电后会瞎保护,关之立竿见影。
预防下次掉坑:写个定时快照
在/etc/cron.daily下放个脚本,每天把/boot/grub2/grub.cfg与/etc/grub.d/打包丢到/root/grub_backup.tgz,真再丢文件直接解压覆盖,三十秒搞定。脚本三行就够,别懒。
常见疑问快答
Q:能直接拷贝别的机器cfg用吗?
A:UUID与分区名不同,100%翻车,别图省事。
Q:grub2-install提示“cannot find a device for /boot”?
A:/boot没挂载或挂载错路径,先df -h /boot确认。
Q:为什么菜单出来了但一进系统就kernel panic?
A:initramfs缺失或版本不匹配,dracut -f重新生成,再重建cfg。
把这份笔记丢进收藏夹,下次CentOS grub界面丢失,五分钟自己就能重建grub.cfg,再也不用半夜抓耳挠腮。
