EFIブートパーティションを共有する方法

EFIブートパーティションを共有する方法

gummiboot でセットアップされた EFI システム上に 2 つの Arch Linux インストールがあります。1 つは /dev/sda2 をルートとし、もう 1 つは /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。ただし、/dev/sdb1 を開くために必要な暗号化フックをロードできなかったため、 を起動できなくなりましたsdb

私は、 から /dev/sdb1 に chroot してsda4.9 を再度インストールすることでこの問題を解決しました。これにより、 は起動できましたsdbが、 は起動できませんでしたsda

現在、インストールを切り替えるたびにカーネル イメージを再構築する必要があるというループに陥っています。 どうやら 2 つのカーネルが何らかの形で干渉しているようです。

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 つは、あるいは多くのことを間違えていると思います (シンボリック リンクはひどいハックのようです)。カーネルが何らかの形で干渉しているようです。どうすればこれを修正できますか?

答え1

私はなんとか助けを求めるArch フォーラムで見つけたので、ここで共有したいと思います。

各システムは異なるinitramfsイメージに書き込んでいたが、両方とも同じカーネルを上書きしていた。リナックスリポジトリに含まれるパッケージは、常にイメージを /boot/vmlinuz-linux に配置します。いくつかのオプションが議論されました:

  1. 1 つのシステムに別のメインライン Linux パッケージをインストールします。
  2. カーネルの名前を変更する AUR からカスタム Linux パッケージを構築します。
  3. システムごとに個別の EFI パーティションを使用します。

最もシンプルに思えたので、1 を選択しました。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

関連情報