방금 데비안 설치를 마치고 부팅을 시도하고 있습니다. 하드 드라이브(LUKS)를 암호화했지만 파티션은 없고 거기에 LVM을 설정했습니다. 별도의 부팅 볼륨이 없으므로 시스템이 논리 볼륨에서 부팅됩니다 root
. BIOS를 GRUB로 교체했지만 시스템에 대한 GRUB 구성이 생성되지 않아 GRUB에서 수동으로 부팅해야 합니다.
올바른 GRUB 쉘 코드는 다음과 같습니다.
cryptomount ahci0
set root=lvm/vg-root
linux /vmlinuz root=/dev/mapper/vg-root cryptdevice=/dev/sda
initrd /initrd.img
이는 주어진 구성을 수정한 것입니다.여기다양한 암호화 LVM 설정의 경우.
GRUB는 드라이브의 암호를 잘 해독하지만 이와 같이 부팅하려고 하면 다음 메시지가 수십 번 나타납니다.
Begin: Running /scripts/local-block ... WARNING: Failed to connect to lvmetad. Falling back to device scanning.
Volume group "vg" not found
Cannot process volume group vg
done.
그런 다음 initramfs 쉘을 얻습니다. 커널이 디스크를 해독하기 전에 루트 논리 볼륨을 찾고 있는 것 같습니다. 예제를 사용하면 동일한 일이 발생하기 때문입니다 root=/dev/mapper/bogus-root
. 이 시스템을 부팅할 수 있는 커널 매개변수가 있습니까? 아니면 initrd를 변경해야 합니까?
답변1
/etc/crypttab
이는 initramfs에 추가된 Debian 패키지를 사용하여 해결할 수 있습니다 ( crypttab
파일 형식은 매뉴얼 페이지 참조).update-initramfs
initramfs-tools
먼저 암호화된 디스크를 마운트합니다. 그런 다음 예를 들어 호스트의 /dev
, /proc
, , 및 을 /sys
루트 파일 시스템에 바인딩합니다. 그런 다음 루트 파일 시스템으로 chroot합니다. 이제 chroot하기 전에 crypttab 파일을 어떤 위치에서든 생성하거나 복사할 수 있습니다./run
mount --bind /dev /mnt/dev
initramfs에 crypttab을 포함하려면 /usr/share/initramfs-tools/hooks
파일을 initramfs에 복사하는 후크 스크립트를 만듭니다. 두 가지 유형의 스크립트를 사용 합니다 initramfs-tools
. 부팅 스크립트는 시스템이 부팅될 때 initramfs에 의해 실행되고 init
, 후크 스크립트는 initramfs 이미지 생성 중에 실행됩니다.
후크 스크립트는 다음과 같아야 합니다(원천):
#!/bin/sh
. /usr/share/initramfs-tools/hook-functions
cp -pnL /path/to/crypttab ${DESTDIR}/etc/crypttab
chmod 644 ${DESTDIR}/etc/crypttab
${DESTDIR}
후크를 실행할 때 생성된 initramfs의 루트로 확장됩니다.
그런 다음 update-initramfs
적절한 옵션을 사용하여 실행하십시오. -k $(uname -r)
호스트와 대상이 동일한 커널 버전을 사용하기 때문에 사용합니다 . 또한 -c
, 및 를 사용하여 -b
이미지가 기록되는 위치를 지정합니다.
새 이미지를 마운트하거나 해당 경로를 GRUB에 전달한 후 초기 사용자 공간은 루트 볼륨 마운트를 시도하기 전에 디스크를 해독하고 포함된 논리 볼륨을 매핑해야 합니다. 유일하게 필요한 커널 매개변수는 루트 볼륨 경로입니다(예: root=/dev/mapper/vg-root
.