LUKS FDEのLVM:grub.cfgにcryptomountとcryptdeviceが提供されていても、GRUBは起動中にルートパーティションをマウントしません。

LUKS FDEのLVM:grub.cfgにcryptomountとcryptdeviceが提供されていても、GRUBは起動中にルートパーティションをマウントしません。

トリプルブート設定(3xLinux)があります。すべてのLinuxは共有され、/home互いに隣にパーティションがswapあります。/すべてLUKSのLVMにあります。

# lsblk
NAME                     MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
nvme0n1                  259:0    0 951.8G  0 disk  
|-nvme0n1p1              259:1    0   800M  0 part  /boot/efi
|-nvme0n1p2              259:2    0    32G  0 part  
|-nvme0n1p3              259:3    0   619M  0 part  
`-nvme0n1p4              259:4    0 706.5G  0 part  
  `-cryptolvm            254:0    0 706.5G  0 crypt 
    |-cryptolvm-swap     254:1    0    32G  0 lvm   [SWAP]
    |-cryptolvm-home     254:2    0 430.0G  0 lvm   /home
    |-cryptolvm-centos   254:3    0    41G  0 lvm   /mnt/centos
    |-cryptolvm-arch     254:4    0    41G  0 lvm   /
    `-cryptolvm-opensuse 254:5    0    41G  0 lvm   /mnt/opensuse

openSUSEはGRUB2を管理します(完全暗号化の使用、つまりgrubメニューがopenSUSEシステムパーティションに常駐する前にディスクロック解除パスワードが必要です/)。

質問:Archは暗号化されたディスクのロックを解除しないため、/dev/nvme0n1p4起動/中にアクセスできません。緊急警報を見ることができます。

これはArch Linuxの設定です:

mkinitcpio設定(はい、この設定を変更して再作成しました/boot/initramfs-linux.img):

# grep crypt /etc/mkinitcpio.conf | tail -1
HOOKS=(base udev autodetect modconf keyboard block encrypt lvm2 filesystems fsck)

openSUSEのGRUB2構成:

# grep --after=18 Arch /mnt/opensuse/boot/grub2/grub.cfg
menuentry 'Arch Linux (rolling) (on /dev/mapper/cryptolvm-arch)' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa' {
    insmod part_gpt
    insmod cryptodisk
    insmod luks
    insmod gcry_rijndael
    insmod gcry_rijndael
    insmod gcry_sha256
    insmod lvm
    insmod ext2
    cryptomount -u 99999999999999999999999999999999
    set root='lvmid/VVVVVV-VVVV-VVVV-VVVV-VVVV-VVVV-VVVVVV/qqqqqq-qqqq-qqqq-qqqq-qqqq-qqqq-qqqqqq'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint='lvmid/VVVVVV-VVVV-VVVV-VVVV-VVVV-VVVV-VVVVVV/qqqqqq-qqqq-qqqq-qqqq-qqqq-qqqq-qqqqqq'  aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa
    else
      search --no-floppy --fs-uuid --set=root aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa
    fi
    linuxefi /boot/vmlinuz-linux cryptdevice=UUID=99999999999999999999999999999999:cryptolvm root=/dev/mapper/cryptolvm-arch  resume=/dev/cryptolvm/swap splash=silent quiet showopts
    initrdefi /boot/initramfs-linux.img
}

LVMデバイス:

# vgs -v
  VG        Attr   Ext   #PV #LV #SN VSize   VFree    VG UUID                                VProfile
  cryptolvm wz--n- 4.00m   1   5   0 706.45g <120.51g VVVVVV-VVVV-VVVV-VVVV-VVVV-VVVV-VVVVVV

# lvs -v | grep arch
  arch     cryptolvm    1 -wi-ao----  <40.96g  -1  -1  254    4  qqqqqq-qqqq-qqqq-qqqq-qqqq-qqqq-qqqqqq

ディスク/パーティションUUID:

# blkid | egrep '(p4|arch)'
/dev/nvme0n1p4: UUID="99999999-9999-9999-9999-999999999999" TYPE="crypto_LUKS" PARTUUID="cccccccc-cccc-cccc-cccc-cccccccccccc"
/dev/mapper/cryptolvm-arch: UUID="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" PARTUUID="cccccccc-cccc-cccc-cccc-cccccccccccc"

解決策:

GRUB2(またはinitramfs)を使用すると(または)/dev/mapper/cryptolvm-archにインストールできないため、プロンプトが表示されます。したがって、起動するたびに次のように手動で入力します。//new_root

> cryptsetup open /dev/nvme0n1p4 cryptolvm
(...)
> mount /dev/mapper/cryptolvm-arch /new_root
> ^D

これはなぜ必要ですか?このインストールは2回(cryptomountおよび)提供されました(実際に使用されました)cryptdevicegrub.cfg

編集する:

たぶんこれはEFIに関連していますか?もしそうなら、EFIエラーが発生しますか? openSUSEはEFIを介して起動し、grub.cfgEFIからチェーンをロードして/Archを起動します。linuxefiこれは正しいですか?

GRUB2が緊急シェルに送信する直前にキーを入力すると、画面に表示されます。シェルが開いている場合、入力した文字はまだバッファに残り、シェルに入力されます。

答え1

システムを起動し、rd.debug(init-ramdiskデバッグ)カーネルフラグを追加します。これは問題を説明する必要があります。
1つがある場合はxtrace出力を使用して最後の画面を表示するか、自分で理解できない場合は2つを表示できます。

あるいは、出力をファイルに送信することもできます(カーネルオプションにrd.log = allフラグを追加するなど)、起動が完了した後にログをコピー可能でより良いスクロール可能なテキストとして取得できる必要があります。

また、上記のスニペットで何らかの理由でUUIDを匿名化したことを忘れていました。元の構成が何であるかはわかりませんが、ダッシュを忘れていました。
私のシステムの例(blkidはカーネルオプションで物理デバイスを見つけるために実行するコマンドでありcryptdevice=UUID=21685fd6-f2e3-4037-8645-3957cff3568c:cryptolvm、cryptodevice =の最初のコロンまでの部分は次のように検索されます。

[root@ArchTestVM ~]# blkid -lt "UUID=21685fd6-f2e3-4037-8645-3957cff3568c" -o device
/dev/nvme0n1p2
[root@ArchTestVM ~]# blkid -lt "UUID=21685fd6f2e3403786453957cff3568c" -o device
[root@ArchTestVM ~]# 

答え2

/dev/mapper/cryptolvm-arch「GRUB2はインストールできないのでプロンプトを表示します/」と言うが、GRUBプロンプトのようには見えません。入力したコマンドはGRUBコマンドではなく(Arch)Linuxコマンドです。 EFI、GRUB、そして明らかにArchに移動しましたinitramfs

プロンプトは、initramfsベースの緊急シェルプロンプトのように見えます。 GRUBの使命は、カーネルとinitramfsファイルの2つをロードすることです。 GRUBがこれを完了し、コントロールをカーネルに渡した後、GRUBの使命は次のとおりです。完璧。このcryptomountコマンドはGRUBにこの目的のために暗号化されたディスクのロックを解除するように指示しますが、GRUBはこのロック解除状態または暗号化パスワードでさえカーネルに渡すことはできません。

カーネルが起動したら、initramfsパスワードの再入力を求めるか、initramfsファイルにパスワードを保存してディスク暗号化を再ロックするために必要なすべてのツールが必要です。これは、initramfsファイルが暗号化されたディスクに保存されるためです。 、可能です。許可されます。

また、「…設置できませんから」とおっしゃったことに注意して/dev/mapper/cryptolvm-archください/。エラーメッセージがまさにそのような場合、initramfsが/何らかの理由で直接マウントしようとするのが問題かもしれません。これはできません。代わりに、新しいルートファイルシステムを最初に別の場所(たとえば/new_root)にマウントする必要があります。その後、initramfsの特別なコマンド変化新しいルートファイルシステムを準備しました。

EFIとGRUBを見るのではなく、Arch initramfsファイルの内容に集中する必要があります。手動で入力した2つのコマンドを正確に実行する必要があります(構文置換を使用/dev/nvme0n1p4UUID=、何らかの理由でそのようなことは発生しません。理由を見つけたら、問題の原因を見つけることができます。

関連情報