如何共享 EFI 启动分区

如何共享 EFI 启动分区

我在使用 gummiboot 设置的 EFI 系统上安装了两个 Archlinux。一个根目录为 /dev/sda2,另一个根目录为 /dev/sdb1。两者都使用 EFI 系统分区 /dev/sda1 作为其 /boot 分区,但将其内核映像放在不同的位置:

/boot/loader/entries/arch.conf:

title   Arch Linux
linux   /vmlinuz-linux
initrd  /intel-ucode.img
initrd  /initramfs-linux.img
options root=/dev/sda2 rw

/boot/loader/entries/arch-here.conf:

title   HERE Arch Linux
linux   /here-img/vmlinuz-linux
initrd  /here-img/intel-ucode.img
initrd  /here-img/initramfs-linux.img
options cryptdevice=/dev/sdb1:cryptroot root=/dev/mapper/cryptroot rw

一切都很好,直到我将内核从 4.8.13 更新到 4.9 sdb。下次我启动时sda,它失败了

Warning: /lib/modules/4.8.13-1-ARCH/modules.devname not found
...
ERROR: device '/dev/sda2 not found. Skipping fsck.
...

我重新启动sdb,重新安装内核 4.8.13,发现我可以sda再次启动。但是,现在我无法再启动sdb,因为它无法加载打开 /dev/sdb1 所需的加密钩子。

我通过 chroot 到 /dev/sdb1sda并再次安装 4.9 解决了这个问题。这允许我启动sdb但不能sda

现在我陷入了一个循环,每次我想在安装之间切换时,我都需要重建内核映像。似乎两个内核在某种程度上互相干扰。

sda每次我想要启动时,我都会执行以下步骤sdb

sudo cryptsetup open /dev/sdb1 cryptroot
sudo mount /dev/mapper/cryptroot /mnt/
sudo mount /dev/sda1 /mnt/boot/
chroot /mnt/
sudo pacman -U /var/cache/pacman/pkg/linux-4.8.13-1-x86_64.pkg.tar.xz /var/cache/pacman/pkg/nvidia-375.20-3-x86_64.pkg.tar.xz /var/cache/pacman/pkg/nvidia-utils-375.20-3-x86_64.pkg.tar.xz

sdb我想移动到时所经历的步骤sda类似,但失败了

/lib/modules/4.8.13-1-ARCH is not a valid kernel module directory

我通过将 /lib/modules/4.9-1-ARCH 符号链接到 /lib/modules/4.8.13-1-ARCH 来解决这个问题。

我确信我至少犯了一个错误,如果不是很多错误的话(那个符号链接看起来像是一个糟糕的黑客行为)。似乎我的内核以某种方式干扰了。我该如何解决这个问题?

答案1

我设法得到一些帮助在 Arch 论坛上并想在这里分享。

尽管每个系统都在写入不同的 initramfs 映像,但两者都在覆盖相同的内核。Linux的存储库中包含的软件包始终将映像放置在 /boot/vmlinuz-linux 中。讨论了几个选项:

  1. 在一个系统上安装不同的主流 Linux 包。
  2. 从 AUR 构建一个重命名内核的自定义 Linux 包。
  3. 为每个系统使用单独的 EFI 分区。

我选择了 1,因为它看起来最简单。在一个系统上安装linux-lts而不是linux在一个系统上安装可以防止内核干扰。启动项现在如下所示:

/boot/loader/entries/arch.conf

title   Arch Linux
linux   /vmlinuz-linux
initrd  /intel-ucode.img
initrd  /initramfs-linux.img
options root=/dev/sda2 rw

/boot/loader/entries/arch-here.conf

title   HERE Arch Linux
linux   /vmlinuz-linux-lts
initrd  /initramfs-linux-lts.img
options cryptdevice=/dev/sdb1:cryptroot root=/dev/mapper/cryptroot rw

请注意,想要采用这种方法的 nvidia 用户需要安装nvidia-lts而不是nvidia

相关内容