web-dev-qa-db-ja.com

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

GummibootでセットアップされたEFIシステムに2つのArchlinuxをインストールしています。 1つは/ dev/sda2にルートされ、もう1つは/ dev/sdb1にルートされます。どちらも/ bootパーティションとして/ dev/sda1、EFIシステムパーティションを使用しますが、カーネルイメージを異なる場所に配置します。

/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

sdbでカーネルを4.8.13から4.9に更新するまで、これは問題ありませんでした。次回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を起動できなくなりました。

sdaから/ dev/sdb1にchrootし、4.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つは実行していると確信しています(そのシンボリックリンクは恐ろしいハックのようです)。私のカーネルが何らかの形で干渉しているようです。どうすればこれを修正できますか?

2
rcorre

Archフォーラムでなんとか 助けを得る そしてここでそれを共有したかった。

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

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

最も単純に思えたので、私は1を選びました。 1つのシステムにlinuxの代わりにlinux-ltsをインストールすると、カーネルが干渉するのを防ぎました。ブートエントリは次のようになります。

/ boot/loader/entrys/Arch.conf

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

/ boot/loader/entrys/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ではなくnvidia-ltsをインストールする必要があることに注意してください。

1
rcorre