web-dev-qa-db-ja.com

systemd、UEFI、lvm2 rootfsでsystemdEFIブートでgentooをブートする方法は?

そのセットアップでArchLinuxをインストールしました。そして今、私はgentooとのデュアルブートが欲しいです。ただし、gentooを起動すると、ルートUUID(LVM上)が検出されません。私のパーティションスキームは次のようなものです:(lsblk -f

sda                                                                    
├─sda1         vfat        E3B9-CCB0                               /boot
└─sda2         LVM2_member GwYKZG-fjl2-UV2L-KX57-1O8J-rBdp-fpdheC 
  ├─lvm-Arch   ext4        67ce60f0-1a30-4da3-bb14-8dbfa0e4ea1d    /
  └─lvm-gentoo ext4        4db48ce0-3163-4a4d-ab8a-1961935cb680

/boot/loader/entries/Arch.conf設定ファイルでArchLinuxを起動できます。

title           Arch Linux (LVM)
linux           /vmlinuz-Arch
initrd          /initramfs-Arch.img
options         root=UUID=67ce60f0-1a30-4da3-bb14-8dbfa0e4ea1d rw

Gentooのインストールが完了したら、/boot/loader/entries/gentoo.confファイルを作成します。

title           Gentoo (LVM)
linux           /vmlinuz-gentoo
initrd          /initramfs-gentoo.img
options         root=UUID=4db48ce0-3163-4a4d-ab8a-1961935cb680 rw

/boot/EFI/systemd/systemd-bootx64.efiを使用して起動します。 gentooオプションはブートメニューに表示されましたが、選択してもまったく応答がありません。ただ空白。ハードドライブを使用してvirtualboxで直接起動しようとしましたが、起動はrootfsが見つかるまでしか機能しません。どういうわけか、/dev/mapper/lvm-gentooUUIDが見つかりません。 /dev/sda2UUIDのみが検出されます。

私の推測では、カーネルまたはinitramfsに何か問題があります。しかし、私はデバイスマッパーをサポートしてカーネルをコンパイルしました。そして、私はやることができませんでした:

genkernel --lvm --install initramfs

私は何が欠けていましたか?

2
Mas Bagol

論理ボリュームマネージャー(LVM)だけでなくUniversal Unique Identifier(UUID)も使用する必要があるため、genkernelコマンドに--disklabelという別のオプションを追加する必要があります。これにより、次のようになります。

genkernel --lvm --disklabel --install initramfs

--disklabelオプションを使用すると、blkidおよびその他のコマンドがinitramfsに含まれ、ブートフェーズで使用できるようになります。

他のアドバイスは、すべてのドライバーも利用できることを確認するために別のオプションを試すことです。カーネルではなくモジュールとしてビルドしたのかもしれません。 --all-ramdisk-modulesは、すべてのカーネルモジュールをinitramfsイメージに含めます。これは必須ではありませんが、念のために試すことができます。

1
Scantlight

Rootが論理ボリューム上にある場合、systemd-bootloader-fileは次のようになります。

title      Debian10
linux      /vmlinuz-4.19.0-4-AMD64
initrd     /initrd.img-4.19.0-4-AMD64
options    root=/dev/mapper/VG01-LV01 rw

LVパスを取得するには、次を使用します。
lsblk --path --output name,kname,fstype,mountpoint,model
name列)

0
MrCalvin