我最近在 UEFI 模式下的多重引导系统上安装了 Ubuntu 18.04,在自定义安装期间在单独的 SSD 中创建了必要的分区(包括 EFI),为引导加载程序安装选择了适当的分区 (/dev/sda1)。今天重启后更新后,我意识到引导加载程序的 ubuntu 文件夹不是位于 ubuntu 安装驱动器的 EFI 分区中,而是位于 Windows 安装驱动器的 EFI 分区中。但是,我可以通过第三个驱动器上的 Clover 引导加载程序使用 Ubuntu 或 Windows 10 进行引导。我如何检查当前情况(GRUB 安装在哪里?),以及如何在不重新安装 Ubuntu 的情况下恢复 Ubuntu 安装驱动器 EFI 分区中的 GRUB?
答案1
这里有一些信息:
如何将 Ubuntu 安装到 USB 密钥?(不使用启动盘创建器)
来自实时安装程序的 Chroot 方法。然后安装正确的 ESP。
首先在 fstab 中更改 ESP 的挂载,因为除非指定,否则 grub-install 将使用默认设置。您可能必须重新启动并且 ESP 必须存在,否则重新启动将出现问题。
man efibootmgr
man grub-install
sudo grub-install --bootloader-id ubuntu /dev/sda1
检查 fstab 和 UEFI 是否有正确的条目。UUID 必须是正确的 ESP。
lsblk -f
cat /etc/fstab
sudo efibootmgr -v
如果您刚刚将文件从 Ubuntu 默认安装位置复制到要使用的 ESP,则需要编辑 fstab 并使用 efibootmgr 创建新条目以从正确的 ESP 启动。您检查 GUID(又名 parttype)以了解是否正确。然后使用 efibootmgr 删除(-b & -B)具有旧 GUID/partuuid 的过时 ubuntu 启动条目。Efibootmgr 默认为 sda1 或第一个驱动器和分区,您必须使用 -d 指定驱动器并使用 -p 参数指定分区。如果 UEFI 条目不正确,您可以添加新条目。
lsblk -o +parttype
sudo efibootmgr -c -g -w -L "ubuntu" -l "\EFI\ubuntu\shimx64.efi" -d /dev/sda -p 1
sudo efibootmgr -v
sudo efibootmgr -b XXXX -B
这就是为什么使用 Boot-Repair 的高级模式(引导您完成简单的 chroot 以重新安装 grub)更容易。您仍然需要清理 UEFI 中的重复/旧 ubuntu 条目。
答案2
在 UEFI 中,引导加载程序只是 FAT 文件系统上的文件。只需将 sda EFI 分区中的所有内容复制到(空)Ubintu 磁盘的 EFI 即可。您不需要 Microsoft 引导加载程序,但复制它们是一个很好的备份。Ubuntu 设备现在应该启动(初始设置使用了 Ubuntu 根的正确 UUID,因此无需更改)。从 EFI 启动菜单中选择磁盘(开机时的一些功能键)。您可以通过使用 efibootmgr 删除其“ubuntu”EFI 启动项来从第一个磁盘中删除 grub(然后可以选择删除 sda EFI/ubuntu 中的文件(并将 bkpbootx64.efi 重命名为 bootx64.efi)。保持原样即可,但您需要将 grub 分布在两个磁盘上,并且两个磁盘都需要存在才能从 sda 启动 grub。
查看错误 1396379、1173457 和 1229488,并将自己添加到“这会影响我吗”列表中。
EFI 分区 Ubuntu 目录
EFI/BOOT/bootx64.efi (A copy of shimx64.efi)
| grubx64.efi (Must be in the same directory as shimx64.efi)
| bkpbootx64.efi (The old copy of bootx64.efi, probably the Microsoft bootmgfw.efi.)
|
|ubuntu/grub.cfg (grubx64.efi looks here regardless of where it is run.)
| shimx64.efi (Good to have shim/grub copies here in case the ones in BOOT
| grubx64/efi get overwritten...)
|
...Others, Microsoft...
EFI/BOOT 文件是设备引导加载程序。它们通常没有 nvram 条目,因此连接到任何 UEFI 计算机时都可以引导。shim/grub 组合将在启用或禁用安全引导的情况下引导。
我曾经同意 oldfred 的观点,即 grub-install 不是问题所在,但尝试使用 grub-install 进行上述设置表明我必须提交几个新的错误。我想多次运行 grub-install 或组合开关会起作用,一次使用 --removable 以正确设置 BOOT,一次使用 efi-directory 等。但默认将 shimx64.efi 放入 BOOT 作为 bootx64.efi 而不使用 grubx64.efi 根本无法引导,正如最近几个关于“缺少 grubx64.efi”的问题所表明的那样。
要清理原始 EFI,只需挂载它并删除您不需要的文件(.../EFI/ubuntu/...,然后将 bkpbootx64.efi 重命名为 bootx64.efi,假设这是 Windows bootmgfw.efi 副本。