GRUB引导程序损坏时,最直接有效的修复方式是用Live CD/USB进入救援模式,通过chroot环境重新安装并配置grub;判断依据包括出现grub rescue>提示符、error: unknown filesystem等引导层错误,而非系统服务故障。

GRUB引导程序损坏时,grub rescue>、error: unknown filesystem、黑屏卡住或直接跳进安装界面,基本可以确定是引导扇区或核心映像丢失,不是系统服务或内核崩溃——修复必须走Live环境+chroot+重装grub-install,别指望update-grub自己救回来。
怎么确认真是GRUB引导程序坏了,不是配置或文件丢了
看开机第一眼报错:
-
grub rescue>或grub>提示符:说明core.img加载失败,/boot/grub/目录可能缺失、模块没加载,或磁盘路径识别错 -
error: unknown filesystem:GRUB不认当前分区的文件系统(比如用了Btrfs但GRUB版本太老,或没加载xfs/btrfs模块) -
error: no such partition或压根没提示就黑屏:MBR/ESP被覆盖,grub-install根本没写进去 - 能进GRUB菜单但选任何项都报
Error 15或Error 17:那是grub.cfg或内核文件问题,不是引导程序本体损坏
Live环境里挂载和chroot最容易漏的三步
很多人chroot后执行grub-install却静默失败或装到Live系统上,根源在挂载不全:
- 必须挂载
/dev、/proc、/sys:用mount --bind /dev /mnt/dev等三行,缺一不可;否则grub-install查不到设备节点,会误判目标磁盘 -
/boot是否独立要分清:如果/boot是单独分区(如/dev/nvme0n1p1),得mount /dev/nvme0n1p1 /mnt/boot;合并在/里就不用额外挂 - UEFI必须挂
/boot/efi:先mkdir -p /mnt/boot/efi,再mount /dev/nvme0n1p1 /mnt/boot/efi(确认该分区flag是esp且格式为FAT32);否则grub-install --target=x86_64-efi直接报failed to get canonical path of `/boot/efi'
grub-install执行失败的三个典型错误和对应操作
grub-install报错不等于命令写错了,而是环境或目标不匹配:
-
grub-install: error: failed to get canonical path of `/boot/efi':UEFI模式下/boot/efi没挂载,或挂载点路径不对(比如挂成了/mnt/efi而不是/mnt/boot/efi) -
grub-install: error: /usr/lib/grub/x86_64-efi/modinfo.sh doesn't exist:Live环境是BIOS启动的,但你在装UEFI版GRUB;换UEFI启动的Live镜像,或手动apt install grub-efi-amd64-bin(Debian/Ubuntu) - 执行完
grub-install还是进不去系统:漏了update-grub(Debian/Ubuntu)或grub2-mkconfig -o /boot/grub2/grub.cfg(RHEL/CentOS);grub-install只写引导程序,不生成菜单
BIOS和UEFI的grub-install命令不能混用
目标磁盘、参数、甚至Live启动方式都得对齐,否则白忙一场:
- BIOS+MBR:Live必须BIOS启动,
grub-install /dev/nvme0n1(注意是磁盘/dev/nvme0n1,不是分区/dev/nvme0n1p1) - UEFI:Live必须UEFI启动,
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu;--bootloader-id建议用发行版名(centos、fedora),避免和Windows冲突 - NVMe盘别手抖写成
/dev/sda:用lsblk或fdisk -l确认真实设备名,/dev/nvme0n1和/dev/sda是不同总线,装错目标根本不会报错,只会无效
真正容易被忽略的是:grub-install成功不代表引导链通了——它只负责把core.img和模块写进MBR或ESP,后续能否找到vmlinuz、解析root=参数、加载initramfs,全靠grub.cfg和文件系统状态。所以grub-install之后必须跟update-grub,且得确保/boot里真有对应内核文件。


















