grub损坏时可通过五种方法修复:一、live usb重装grub;二、grub rescue下临时引导后修复;三、uefi系统改用systemd-boot或efibootmgr;四、boot-repair图形化自动修复;五、仅重建grub.cfg配置文件。

如果您启动Linux系统时遇到GRUB菜单缺失、黑屏、grub rescue>提示符或“error: unknown filesystem”等错误,则说明GRUB引导程序已损坏或被覆盖。以下是修复或重装GRUB的多种可行方法:
一、使用Live USB进入系统并重新安装GRUB到主硬盘
该方法适用于能正常挂载原系统根分区,但GRUB未正确写入MBR或EFI系统分区的情形。需借助与目标系统架构一致的Linux Live环境(如Ubuntu、CentOS或Debian Live USB)。
1、插入Live USB并从其启动,选择“Try without installing”进入桌面环境。
2、打开终端,执行sudo fdisk -l识别原Linux系统所在磁盘(例如/dev/sda)及根分区(例如/dev/sda2)、EFI系统分区(例如/dev/sda1,FAT32格式,标有EFI System)。
3、创建挂载点并挂载根分区:sudo mkdir /mnt && sudo mount /dev/sda2 /mnt(请将/dev/sda2替换为实际根分区)。
4、若系统使用UEFI模式,还需挂载EFI系统分区:sudo mkdir -p /mnt/boot/efi && sudo mount /dev/sda1 /mnt/boot/efi(请将/dev/sda1替换为实际ESP分区)。
5、挂载必要虚拟文件系统:sudo mount --bind /dev /mnt/dev && sudo mount --bind /proc /mnt/proc && sudo mount --bind /sys /mnt/sys。
6、切换到原系统环境:sudo chroot /mnt。
7、重新安装GRUB:对于BIOS系统,执行grub-install /dev/sda;对于UEFI系统,执行grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu(请根据发行版调整--bootloader-id值,如centos、debian等)。
8、更新GRUB配置:update-grub(Debian/Ubuntu)或grub2-mkconfig -o /boot/grub2/grub.cfg(RHEL/CentOS/Fedora)。
9、退出chroot并重启:exit,然后执行sudo reboot,拔出Live USB。
二、在grub rescue>提示符下临时引导进入系统并修复
该方法适用于GRUB核心映像(core.img)尚可加载,但无法定位正常模块或配置文件的情形,可临时加载内核和initrd完成启动,再进行持久化修复。
1、在grub rescue>提示符下,输入ls查看所有磁盘分区,例如输出为(hd0) (hd0,msdos1) (hd0,msdos2)。
2、逐个检查分区是否含/boot目录:ls (hd0,msdos2)/boot/,直到发现包含vmlinuz-和initrd.img-文件的分区。
3、设定根设备:set root=(hd0,msdos2)(使用上一步确认的分区)。
4、设定Linux内核路径:linux /boot/vmlinuz-$(version)-root=/dev/sda2(请替换$(version)为实际内核版本号,如5.15.0-91-generic;/dev/sda2为根设备)。
5、设定initrd路径:initrd /boot/initrd.img-$(version)(版本号需与上一步一致)。
6、启动系统:boot。
7、成功登录后,立即执行对应发行版的GRUB重装命令(同方法一第7–8步)。
三、使用systemd-boot或efibootmgr替代GRUB(仅限UEFI系统)
当GRUB反复损坏且系统为UEFI固件时,可绕过GRUB,直接通过UEFI固件加载Linux内核,避免依赖复杂引导链。此方案不重装GRUB,而是建立独立启动项。
1、确保系统已安装systemd-boot或efibootmgr工具,通常随发行版默认提供。
2、挂载EFI系统分区(如未挂载):sudo mount /dev/sda1 /boot/efi。
3、安装systemd-boot(如未安装):sudo bootctl install(Arch、Fedora 38+、Debian 12+等支持)。
4、创建启动项配置文件/boot/efi/loader/entries/arch.conf(以Arch为例)或对应发行版路径,内容包括title Arch Linux、linux /vmlinuz-linux、initrd /initramfs-linux.img、options root=UUID=xxxx ro(UUID需用blkid查得)。
5、手动添加UEFI启动项:sudo efibootmgr -c -d /dev/sda -p 1 -L "MyLinux" -l "\vmlinuz-linux" -u "root=UUID=xxxx ro initrd=\initramfs-linux.img"(-d指定磁盘,-p指定ESP分区编号)。
6、重启并进入UEFI固件设置,将新条目设为第一启动项。
四、使用Boot-Repair工具自动化修复(适用于Ubuntu/Debian系)
Boot-Repair是一个图形化修复工具,可自动检测多重启动配置、恢复GRUB、修复EFI分区权限及生成详细日志,适合不熟悉命令行的用户。
1、在Live环境中连接网络,打开终端。
2、添加官方仓库并安装:sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt update && sudo apt install -y boot-repair。
3、运行工具:boot-repair,等待界面加载完成。
4、点击Recommended repair按钮,工具将自动执行分区检测、GRUB重装、配置更新等操作。
5、修复完成后,记录屏幕上显示的URL(如paste.ubuntu.com/xxxxx),该链接包含完整诊断日志,可用于进一步分析。
6、关闭工具,重启系统并拔出Live介质。
五、重建GRUB配置文件而不重装引导程序
当GRUB可正常显示菜单但缺少某操作系统条目、内核未更新或自定义菜单失效时,往往只需刷新配置文件,无需重写MBR或ESP。
1、以管理员身份登录正在运行的Linux系统。
2、确认/boot/grub/目录存在且包含grub.cfg(BIOS)或/boot/grub2/grub.cfg(RHEL系)或/boot/efi/EFI/ubuntu/grub.cfg(UEFI)。
3、对于Debian/Ubuntu系统,执行:sudo update-grub。
4、对于RHEL/CentOS/Fedora系统,执行:sudo grub2-mkconfig -o /boot/grub2/grub.cfg。
5、若使用自定义主题或脚本,需确保/etc/default/grub中GRUB_DISABLE_OS_PROBER=false已启用,并确认os-prober包已安装且未被禁用。
6、验证生成结果:sudo grep -i "menuentry" /boot/grub2/grub.cfg | head -5,确认Windows、其他Linux等条目已列出。










