我的笔记本电脑上预装了 Ubuntu 16.04。我安装了 Windows 10 和 Arch。当我为 Arch 安装 grub 时,我注意到一些奇怪的事情:os-prober 找不到我的 ubuntu 分区。然后我打开了默认安装 Ubuntu 的分区 ( /dev/sda3
),并看到它维护着自己的单独boot
文件夹。我的实际 ESP ( /dev/sda1
) 安装在(ubuntu 分区) 中。此外,Ubuntu 直接使用它自己的 efi 可执行文件启动,该可执行文件位于/boot/efi
( ESP)中。Ubuntu 在中维护自己的内核,但 Arch 将其内核直接安装在 中。那么我该如何清理这个烂摊子,并在中拥有一个 grub 存根,它将使用它们各自的内核来管理我的 Ubuntu 和 Arch 安装?/dev/sda3
efi/ubuntu/shimx64.efi
/dev/sda1
/boot
/dev/sda3
/dev/sda1
efi/grub
/dev/sda1
答案1
首先,我想澄清一些术语:在 Linux 的 EFI 引导加载程序上下文中,“EFI 存根”是指内置于 Linux 内核本身的引导加载程序,使内核能够作为 EFI 程序启动。您似乎使用这个术语来指代任何 EFI 引导程序,但这种用法可能会造成混淆。
os-prober
在 Arch 上处理应该有检测到了您的 Ubuntu 安装。我不知道为什么没有检测到,但是由于 Archos-prober
是 Arch 的一部分,而不是 Ubuntu,您可能想在 Arch 论坛上询问。另一方面,如果您听从我的建议,您将不会使用 Arch 的 GRUB,因此这一点将变得毫无意义。
Arch 为其内核提供了固定名称,这些名称不会在您更新内核时更改,而 Ubuntu 的内核名称包含版本字符串,因此在安装新内核时会更改。这很重要,因为引用内核的 GRUB 配置文件是由控制 GRUB 的操作系统创建的。因此,如果您使用 Arch 的 GRUB,则每当您更新 Ubuntu 内核时都需要在 Arch 中重新配置 GRUB。这可能很尴尬。另一方面,如果您使用 Ubuntu 的 GRUB,则在更新 Arch 内核时无需更新其配置。(当您安装新的 Ubuntu 内核时,Ubuntu 的脚本将自动更新 Ubuntu 的 GRUB。)因此,在这两者中,我建议使用 Ubuntu 的 GRUB,而不是 Arch 的 GRUB。
您可以在任一发行版中使用以下方法切换到 Ubuntu 的 GRUB efibootmgr
:
- 键入
sudo efibootmgr
以查看条目列表。注意行BootOrder
以及Boot####
Arch 和 Ubuntu 的条目。该BootOrder
行告诉您计算机尝试启动特定启动条目的顺序。考虑到您的操作系统,Arch 的 GRUB 很可能位于列表中的第一个BootOrder
。 - 确定 Ubuntu 编号后,您可以使用选项
Boot####
向固件传递新的启动顺序,如。这会将启动顺序设置为首先使用,然后如果失败则使用,最后如果前面两个都失败则使用。当然,细节会有所不同;您应该确保 Ubuntu 的条目是第一个。之后的内容可能无关紧要,但我建议确保列表中至少有一个已知有效的条目,以便系统启动到-o
efibootmgr
sudo efibootmgr -o 0004,0002,000A
Boot0004
Boot0002
Boot000A
某物即使 Ubuntu 进入失败。
重启后,Ubuntu 的 GRUB 应该会出现,但它可能有 Arch 的条目。您可以运行sudo update-grub
以生成新的 Ubuntu GRUB 菜单,然后重试。这可能会也可能不会检测到 Arch 的内核。如果没有,您可以编辑/etc/grub.d/40_custom
或使用GRUB 定制器添加 Arch 的条目。类似下面的代码应该有效:
menuentry "Arch Linux" {
set root=(hd0,1)
linux /vmlinuz-linux root=/dev/sda5 ro quiet splash
initrd /initramfs-linux.img
}
这只是一个粗略的例子,可能会有所改进。如果没有其他办法,您可能必须更改选项root=/dev/sda5
以指向 Arch 的真正根 ( /
) 分区。如果您想改进此示例,或者遇到问题,您可以检查 Arch 的 GRUB 配置或在 Arch 论坛上寻求帮助。
作为上述方法的替代方案,您可以使用 GRUB 以外的其他程序。大多数引导加载程序需要比 GRUB 更多的手动配置,但手动配置可能比 GRUB 的手动配置更容易。请参阅我的 Linux EFI 引导加载程序页面了解可用的内容。我自己的rEFInd 启动管理器对于多启动场景来说,配置起来更容易,因为它每次启动时都会主动扫描内核,因此不需要在每次内核更新时不断更新配置文件。另一方面,由于 Arch 的内核名称不会改变,如果您使用 Ubuntu 的 GRUB,您将不会遇到常见的多发行版 GRUB 问题,因此 rEFInd 在这方面不会有所改进。
最后一点:使用您的配置,Arch 内核存储在 EFI 系统分区 (ESP) 上。这是一个常见的 Arch 配置,但您应该确保您的 ESP 足够大。有时 ESP 小到 100 MB(甚至可能更小),一旦您的内核到位,可能会留下很少的额外空间。您可以使用df
查看分区上已使用和可用的空间,如df /boot/efi
。如果您的 ESP 几乎已满,您可能需要将 Arch 内核放在其他地方。虽然使用 ESP 存储内核是 Arch 中的常见做法,但这不是必需的,因此您可以做其他事情。