Ubuntu 18.04 中具有单独驱动器的 UEFI 多重引导系统中的引导问题

Ubuntu 18.04 中具有单独驱动器的 UEFI 多重引导系统中的引导问题

我最近在 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。

我可以使用备用安装程序以 UEFI 模式安装吗?

如何将 GRUB 重新安装到 EFI 分区?

首先在 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 副本。

相关内容