Grub2

LUKS FDE 上的 LVM:GRUB 不會在引導期間掛載我的根分區 / 即使在 grub.cfg 中給出了 cryptomount 和 cryptdevice

  • October 13, 2019

我有一個三重引導設置(3xLinux)。所有 Linuce 共享/homeswap,並且它們的/分區彼此相鄰。全部駐留在 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.cfgopenSUSE 通過 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 ~]# 

引用自:https://unix.stackexchange.com/questions/544622