![EFIブートパーティションを共有する方法](https://rvso.com/image/1520700/EFI%E3%83%96%E3%83%BC%E3%83%88%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E5%85%B1%E6%9C%89%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95.png)
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 してsda
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 つは、あるいは多くのことを間違えていると思います (シンボリック リンクはひどいハックのようです)。カーネルが何らかの形で干渉しているようです。どうすればこれを修正できますか?
答え1
私はなんとか助けを求めるArch フォーラムで見つけたので、ここで共有したいと思います。
各システムは異なるinitramfsイメージに書き込んでいたが、両方とも同じカーネルを上書きしていた。リナックスリポジトリに含まれるパッケージは、常にイメージを /boot/vmlinuz-linux に配置します。いくつかのオプションが議論されました:
- 1 つのシステムに別のメインライン Linux パッケージをインストールします。
- カーネルの名前を変更する AUR からカスタム Linux パッケージを構築します。
- システムごとに個別の 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
。