트리플 부팅 설정(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.cfg
EFI에서 체인로드한 /
다음 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=
) 어떤 이유로든 그런 일은 발생하지 않습니다. 이유를 찾으면 문제의 원인을 찾을 수 있습니다.