如何共享 EFI 啟動分割區

如何共享 EFI 啟動分割區

我在 EFI 系統上安裝了兩台 Archlinux,並使用 Gummiboot 設定。一個根目錄位於 /dev/sda2,另一個根目錄位於 /dev/sdb1。兩者都使用 /dev/sda1(EFI 系統分割區)作為其 /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.
...

我重新啟動進入,重新安裝核心 4.8.13,發現我可以再次sdb啟動。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 映像,但兩者都覆蓋相同的核心。這作業系統儲存庫中包含的軟體包始終將映像放置在 /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.

相關內容