Sub*_*nil 2 boot grub2 dual-boot uefi 16.04
我的笔记本电脑上预装了 Ubuntu 16.04。我安装了 Windows 10 和 Arch。当我为 Arch 安装 grub 时,我注意到一些奇怪的事情:os-prober 没有找到我的 ubuntu 分区。然后我打开了默认安装 Ubuntu 的分区(/dev/sda3),看到它维护着自己的单独boot文件夹。我的实际ESP( /dev/sda1)安装到/boot/efi的/dev/sda3(Ubuntu的分区)。此外,Ubuntu是直接使用它自己的可执行EFI,它驻留在引导efi/ubuntu/shimx64.efi中/dev/sda1(ESP)。Ubuntu 在/bootof 中维护自己的内核/dev/sda3,但 Arch 将其内核直接安装到/dev/sda1. 那么,如何清理这个烂摊子,并有一个平头stub内efi/grub的/dev/sda1,这将使用它们单独的内核管理我的 Ubuntu 和 Arch 安装?
首先,我想澄清一些术语:在 Linux 的 EFI 引导加载程序的上下文中,“EFI 存根”是指内置于 Linux 内核本身的引导加载程序,使内核能够作为 EFI 程序启动。您似乎使用这个术语来指代任何 EFI 引导程序,但这种用法可能会造成混淆。
处理完毕,os-prober在 Arch 上应该已经检测到您的 Ubuntu 安装。我不知道为什么没有,但由于 Archos-prober是Arch 的一部分,而不是 Ubuntu,您可能想在 Arch 论坛上询问这个问题。OTOH,如果你听从我的建议,你就不会使用 Arch 的 GRUB,所以这一点将变得毫无意义。
Arch 为其内核提供固定名称,在更新内核时不会更改,而 Ubuntu 的内核名称包含版本字符串,因此在安装新内核时会更改。这很重要,因为引用内核的 GRUB 配置文件是由控制 GRUB 的操作系统创建的。因此,如果您使用 Arch 的 GRUB,则每当您更新 Ubuntu 内核时都需要在 Arch 中重新配置 GRUB。这很可能很尴尬。如果您使用 Ubuntu 的 GRUB、OTOH,则在更新 Arch 内核时不需要更新其配置。(当您安装新的 Ubuntu 内核时,Ubuntu 的脚本会自动更新 Ubuntu 的 GRUB。)因此,在这两者中,我建议使用 Ubuntu 的 GRUB,而不是 Arch 的 GRUB。
您可以通过efibootmgr在任一发行版中使用来切换到 Ubuntu 的 GRUB :
sudo efibootmgr以查看条目列表。注意该BootOrder行以及Boot####Arch 和 Ubuntu的条目。该BootOrder行告诉您计算机尝试启动特定引导条目的顺序。考虑到您的操作系统,Arch 的 GRUB 很可能会在BootOrder列表中排在第一位。Boot####编号后,您可以使用-o选项将新的引导顺序传递给固件efibootmgr,如sudo efibootmgr -o 0004,0002,000A。这会将引导顺序设置为Boot0004首先使用,然后Boot0002是失败,最后Boot000A是之前的两个都失败。当然,细节会因您而异。你应该确保 Ubuntu 的入口是第一个。之后的内容可能无关紧要,尽管我建议确保列表中至少有一个已知的工作条目,以便即使 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
}
Run Code Online (Sandbox Code Playgroud)
这只是一个粗略的例子,可能会得到改进。如果不出意外,您可能必须更改root=/dev/sda5选项以指向 Arch 的真正根 ( /) 分区。如果你想改进这个例子,或者你有问题,你可以检查 Arch 的 GRUB 配置或在 Arch 论坛上寻求帮助。
作为前面的替代方案,您可以使用 GRUB 以外的其他东西。大多数引导加载程序需要比 GRUB 更多的手动配置方式,但手动配置可能比 GRUB 的手动配置更容易。有关可用内容的概述,请参阅我的关于 Linux 的 EFI 引导加载程序的页面。我自己的rEFInd 引导管理器往往更容易为多引导场景进行配置,因为它每次引导时都会主动扫描内核,因此它不需要在每次内核更新时不断更新配置文件。OTOH,因为 Arch 的内核名称没有改变,如果您使用 Ubuntu 的 GRUB,您将不会遇到常见的多发行版 GRUB 问题,因此 rEFInd 不会在这个分数上有所改进。
最后一点:根据您的配置,您的 Arch 内核存储在您的 EFI 系统分区 (ESP) 上。这是一个常见的 Arch 配置,但你应该确保你的 ESP 足够大。有时 ESP 小到 100 MB(甚至可以想象得更小),一旦您的内核就位,这可能会留下很少的额外空间。您可以使用df查看分区上已使用和可用的空间量,如df /boot/efi. 如果你的 ESP 快满了,你可能想把你的 Arch 内核放在其他地方。虽然在 Arch 中使用 ESP 来存储内核是一种常见的做法,但这不是必需的,所以你可以做其他事情。
| 归档时间: |
|
| 查看次数: |
2001 次 |
| 最近记录: |