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

이것이 왜 필요한가요? 이 설치는 두 번( cryptomount및 ) 제공되었습니다(실제로 사용되었습니다) cryptdevice.grub.cfg

편집하다:

어쩌면 이것이 EFI와 관련이 있을까요? 그렇다면 EFI 오류가 발생합니까? openSUSE는 EFI를 통해 부팅하고, grub.cfgEFI에서 체인로드한 /다음 Arch를 부팅합니다. linuxefi이것이 맞습니까?

GRUB2가 비상 쉘로 보내기 직전에 키를 입력하면 화면에 표시됩니다. 셸이 열려 있으면 입력한 문자는 여전히 버퍼에 남아 있으며 셸에 입력됩니다.

답변1

시스템을 부팅하고 rd.debug(init-ramdisk 디버그) 커널 플래그를 추가합니다. 이것은 문제를 설명해야합니다.
하나가 있는 경우 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 ~]# 

답변2

/dev/mapper/cryptolvm-arch"GRUB2는 설치할 수 없기 때문에 프롬프트를 표시합니다 /"라고 말하지만GRUB 프롬프트처럼 보이지 않습니다.입력한 명령은 GRUB 명령이 아니고 (Arch) Linux 명령입니다. EFI, GRUB, 그리고 분명히 Arch로 이동했습니다 initramfs.

프롬프트는 initramfs 기반 비상 쉘 프롬프트처럼 보입니다. GRUB의 임무는 커널과 initramfs 파일이라는 두 가지를 로드하는 것입니다. GRUB가 이 작업을 완료하고 제어권을 커널에 넘겨주고 나면 GRUB의 임무는 다음과 같습니다.완벽한. 이 cryptomount명령은 GRUB에게 이 목적을 위해 암호화된 디스크를 잠금 해제하도록 지시하지만 GRUB은 이 잠금 해제 상태나 암호화 비밀번호조차 커널에 전달할 수 없습니다.

커널이 부팅되면 initramfs암호를 다시 묻는 메시지를 표시하거나 initramfs 파일에 암호를 저장하여 디스크 암호화를 다시 잠금 해제하는 데 필요한 모든 도구가 있어야 합니다. 이는 initramfs 파일이 암호화된 디스크에 저장되기 때문입니다. , 가능합니다. 허용됩니다.

또한 "...설치할 수 없기 때문에"라고 말씀하신 점에 유의 /dev/mapper/cryptolvm-arch하세요 /. 오류 메시지가 정확히 그와 같다면 initramfs가 /어떤 이유로 직접 마운트를 시도 하는 것이 문제일 수 있습니다 .당신은 이것을 할 수 없습니다.대신, 새 루트 파일 시스템을 먼저 다른 곳(예 /new_root: )에 마운트해야 합니다. 그런 다음 initramfs의 특수 명령이변화새로운 루트 파일 시스템이 준비되었습니다.

EFI와 GRUB를 보는 대신 Arch initramfs 파일의 내용에 집중해야 할 것입니다. 수동으로 입력한 두 명령을 정확하게 실행해야 하지만( 구문 대체 /dev/nvme0n1p4사용 UUID=) 어떤 이유로든 그런 일은 발생하지 않습니다. 이유를 찾으면 문제의 원인을 찾을 수 있습니다.

관련 정보