Linux Grub 启动故障排查方法

13次阅读

grub 启动故障通常无需重装系统,关键在定位配置、引导程序、内核路径或硬件识别问题;依据报错类型(如 grub>、error 15/17、黑屏)快速判断,并通过编辑启动项、live 环境重装 grub 或检查磁盘 / 文件系统修复。

Linux Grub 启动故障排查方法

GRUB 启动故障是 Linux 系统无法进入的第一道关卡,多数情况不用重装系统,关键在快速定位是配置、引导程序、内核路径还是硬件识别出了问题。

看报错信息,先分清类型

启动时出现的提示是重要线索:

  • “grub>”或“grub rescue>”:GRUB 主程序损坏或丢失,MBR/EFI 分区未正确安装
  • “Error 15: File not found”:配置里指定的内核(vmlinuz)或 initrd 路径错误,常见于手动改过 /boot/grub/grub.cfg/etc/grub.d/脚本后
  • “Error 17: Cannot mount selected partition”:root= 参数指向的分区不存在、UUID 变化、文件系统类型不识别,或 /boot 单独分区未挂载
  • 黑屏 / 卡在光标闪烁 / 无限重启:可能是显卡驱动冲突(尤其 NVIDIA)、initramfs 缺失、或内核 panic 但没显示出来

临时绕过,进系统再修复

在 GRUB 菜单界面按 e 编辑当前启动项,做最小干预:

  • 找到以 linux 开头的行,检查 root= 后面是否为当前根分区的正确 UUID(可用 blkid 命令确认),不是则改成 root=UUID=xxxx-xxxxroot=/dev/sda2
  • 确认 initrd 行中镜像文件名存在(如/boot/initrd.img-6.8.0-xx-generic),若路径不对或文件缺失,临时删掉整行试试
  • 显卡问题可追加内核参数:nomodeset(禁用 GPU 驱动)或acpi=off(关闭 ACPI,老硬件常用)
  • 编辑完按 Ctrl+XF10启动;成功进系统后立即执行sudo update-grub

用 Live 环境彻底重装 GRUB

当无法临时启动时,需借助 Live USB/CD 操作:

  • 启动 Live 系统,打开终端,识别硬盘和分区:lsblk -fsudo fdisk -l
  • 挂载根分区(假设为/dev/sda2):sudo mount /dev/sda2 /mnt
  • /boot/boot/efi是独立分区,一并挂载:sudo mount /dev/sda1 /mnt/bootsudo mount /dev/sda3 /mnt/boot/efi
  • 绑定必要虚拟文件系统:sudo mount -t proc proc /mnt/procsudo mount -t sysfs sys /mnt/syssudo mount -o bind /dev /mnt/dev
  • 切换到原系统环境:sudo chroot /mnt
  • 重新安装 GRUB:
      • BIOS 传统模式:grub-install /dev/sda
      • UEFI 模式:grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
      • 最后更新配置:update-grub
  • 退出 chroot,重启

检查底层支撑是否完好

GRUB 能跑起来,不代表底层没问题:

  • 运行 sudo smartctl -a /dev/sda 查看磁盘 SMART 健康状态,重点看 Reallocated_Sector_CtCurrent_Pending_Sector
  • 强制检查文件系统:sudo fsck -y /dev/sda2(ext 系列)或sudo xfs_repair -L /dev/sda2(xfs,- L 会清空日志,慎用)
  • 确认 initramfs 是否完整:ls /boot/initrd.img*,对比 uname -r 输出,缺失则重建:sudo update-initramfs -u -k all(Debian 系)或sudo dracut -f(RHEL 系)
  • 检查 /etc/fstab 中所有挂载项是否真实存在且格式正确,错误条目会导致启动卡在“Started File System Check on Root Device”
text=ZqhQzanResources