Linux Grub 启动故障排查方法

7次阅读

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 alldebian系)或sudo dracut -f(RHEL系)
  • 检查/etc/fstab中所有挂载项是否真实存在且格式正确,错误条目会导致启动卡在“Started File System Check on Root Device”
text=ZqhQzanResources