1. 前言
系统重装、分区调整或引导文件损坏后,Linux 常常无法正常启动,或者 BIOS 启动项里再也找不到 Ubuntu。本文整理了 GRUB 修复与启动项恢复的常见场景,涵盖老版本 GRUB、GRUB 2、GRUB 丢失、swap 分区 UUID 变化以及 UEFI 启动项丢失等问题,可直接对照操作。
2. 适用老版本 GRUB
使用已包含 GRUB 软件的 Linux 启动盘启动,进入 GRUB 命令行后执行:
grub grub>root(hdx,0)grub>setup(hdx,0)如果无法确定引导分区,可以先查找menu.lst的位置:
find/boot/grub/menu.lst根据查找结果确认分区(如(hd0,x)),再重新设置 root 并安装:
grub>root(hd0,x)grub>setup(hd0,x)reboot3. 适用新版本 GRUB 2
使用 Linux 启动盘启动(无需进入启动盘系统),在 GRUB 2 菜单出现时按e进入某个菜单项,再按F2进入 GRUB 命令行提示符。
grub>grub>ls# 列出存在的磁盘与分区grub>setroot=(hdx,y)# x、y 为 0~9 的数字,代表不同磁盘与分区,请选择正确的 boot 分区如果无法确认是哪个分区,可以用ls /查看当前所设 root 分区根目录的内容,从而确认分区是否正确。找到合适的分区后,重复上述命令即可。
grub>linux /boot/vmlinuzroot=/dev/sdaY# Y 为 1~9 的数字grub>initrd /boot/initrd.img grub>boot4. GRUB 丢失的修复方法
成功进入 Linux 系统后,尝试重新安装 GRUB:
grub-install /dev/sda如果出现如下错误:
grub-install:错误: 获取“/cow”的正规路径失败.说明当前处于 Live 环境,需要先挂载根分区再安装。假设根分区为/dev/sda5:
sudomount/dev/sda5 /mntsudogrub-install --boot-directory=/mnt/boot /dev/sda安装完成后更新 GRUB 配置:
sudoupdate-grub25. 分区调整后 UUID 变化导致启动缓慢
修改分区或调整分区大小后,UUID 可能发生变化,导致 Linux 启动缓慢。此时需要同步更新相关配置文件中的 UUID。
5.1 同步 swap 分区 UUID 与 /etc/fstab
先查看 swap 分区的 UUID:
sudoblkid# 查看 swap 分区的 UUID然后修改/etc/fstab中 swap 分区的 UUID,使其与blkid输出保持一致。
5.2 同步 swap 分区 UUID 与内核参数
修改/etc/initramfs-tools/conf.d/resume中的 UUID(如果该文件不存在可忽略),然后执行:
sudoupdate-initramfs-u6. 在 BIOS 中找回 Ubuntu 启动项
有时 Windows 更新或重新安装 Windows 后,双系统中的 Ubuntu 会从 BIOS 启动项中消失。此时可以在 Ubuntu 下重新创建 UEFI 启动项:
sudoefibootmgr-c-l"\EFI\ubuntu\shimx64.EFI"-Lubuntu-d/dev/nvme0n1-p1参数含义如下:
-c:创建新的 UEFI 启动项-d /dev/nvme0n1:目标磁盘-p 1:EFI 系统分区,X1 Carbon 通常是第 1 个分区-L "ubuntu":启动项显示名称-l '\EFI\ubuntu\shimx64.efi':ESP 分区内的引导文件路径
7. 小结
GRUB 修复的核心思路是:先确认引导分区,再重新安装 GRUB 并更新配置;UUID 变化时同步修改/etc/fstab与resume文件;UEFI 启动项丢失时用efibootmgr重新创建。操作前建议备份重要数据,避免误操作导致系统无法启动。