LUKS FDE 上的 LVM:GRUB 不會在引導期間掛載我的根分區 / 即使在 grub.cfg 中給出了 cryptomount 和 cryptdevice
我有一個三重引導設置(3xLinux)。所有 Linuce 共享
/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(完全加密,即在駐留在 openSUSE 系統分區上的 grub 菜單之前需要磁碟解鎖密碼
/
)。問題: 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
為什麼這是必要的?
cryptomount
安裝在 (和cryptdevice
) 中給出了兩次(grub.cfg
這確實被使用了)。編輯:
也許這與EFI有關?如果是,我會收到 EFI 錯誤嗎?
grub.cfg
openSUSE 通過 EFI 啟動,從它的鏈載入/
,然後啟動 Arch - 這裡是linuxefi
正確的嗎?就在 GRUB2 將我放到緊急 shell 之前,我可以鍵入鍵,它們會出現在螢幕上。當外殼打開時,鍵入的字元仍在緩衝區中並輸入到該外殼中。
使用添加的 rd.debug (init-ramdisk debug) 核心標誌啟動您的系統。這應該可以說明出了什麼問題。
如果你有它,如果你自己不能解決問題,那麼你可以用 xtrace 輸出最後一兩個螢幕。
此外,您還可以將輸出定向到文件(即,將 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 ~]#