문맥:
2개의 파티션이 있는 USB 드라이브가 있습니다. 첫 번째는 CentOS 7.6 1810(GNOME 포함)의 사용자 지정 비영구 이미지이고 두 번째는 암호화된 데이터 파티션입니다. 목표는 사용자가 암호화된 파티션을 마운트하여 파일을 저장할 수 있는 라이브 부팅 가능한 CentOS USB 드라이브를 갖는 것입니다. 대부분의 경우 모든 것이 예상대로 작동합니다. 결과 ISO는 VirtualBox와 완벽하게 작동하며 ISO에 문제가 발생한 적이 없습니다. 이 문제는 CentOS 라이브 USB 파티션을 USB 드라이브의 데이터 파티션과 병합할 때 발생합니다.
질문:
USB를 부팅할 때때때로다음 오류가 발생했습니다.
dracut: FATAL: Failed to mount block device of live image
dracut: Refusing to continue
system halted.
대부분의 경우 오류 없이 라이브 CentOS 이미지를 성공적으로 로드할 수 있습니다. 따라서 이것은 확률론적인 질문입니다. 즉, 잠재적인 경쟁 조건이 어딘가에 관련되어 있음을 의미합니다.
시작 시 로그 파일을 출력 하도록 디버그 옵션을 활성화했는데 dracut
현재 발생한 문제가 다음 줄로 강조 표시된 것 같습니다.
[ 4.015983] localhost dracut-initqueue[773]: + CMDLINE=' initrd=initrd0.img root=live:CDLABEL=CentOS-7-x86_64-LiveGNOME-1810 rootfstype=auto ro rd.live.image rd.shell rd.debug log_buf_len=1M rd.luks=0 rd.md=0 rd.dm=0 BOOT_IMAGE=vmlinuz0'
[ 4.016557] localhost dracut-initqueue[773]: + for arg in '$CMDLINE'
[ 4.017178] localhost dracut-initqueue[773]: + case $arg in
[ 4.017761] localhost dracut-initqueue[773]: + for arg in '$CMDLINE'
[ 4.018361] localhost dracut-initqueue[773]: + case $arg in
[ 4.018951] localhost dracut-initqueue[773]: + for arg in '$CMDLINE'
[ 4.019579] localhost dracut-initqueue[773]: + case $arg in
[ 4.020202] localhost dracut-initqueue[773]: + for arg in '$CMDLINE'
[ 4.020785] localhost dracut-initqueue[773]: + case $arg in
[ 4.021363] localhost dracut-initqueue[773]: + liverw=ro
[ 4.021952] localhost dracut-initqueue[773]: + for arg in '$CMDLINE'
[ 4.022584] localhost dracut-initqueue[773]: + case $arg in
[ 4.023205] localhost dracut-initqueue[773]: + for arg in '$CMDLINE'
[ 4.023798] localhost dracut-initqueue[773]: + case $arg in
[ 4.024390] localhost dracut-initqueue[773]: + for arg in '$CMDLINE'
[ 4.024970] localhost dracut-initqueue[773]: + case $arg in
[ 4.025584] localhost dracut-initqueue[773]: + for arg in '$CMDLINE'
[ 4.026135] localhost dracut-initqueue[773]: + case $arg in
[ 4.026745] localhost dracut-initqueue[773]: + for arg in '$CMDLINE'
[ 4.027375] localhost dracut-initqueue[773]: + case $arg in
[ 4.027941] localhost dracut-initqueue[773]: + for arg in '$CMDLINE'
[ 4.028544] localhost dracut-initqueue[773]: + case $arg in
[ 4.029125] localhost dracut-initqueue[773]: + for arg in '$CMDLINE'
[ 4.029652] localhost dracut-initqueue[773]: + case $arg in
[ 4.030241] localhost dracut-initqueue[773]: + for arg in '$CMDLINE'
[ 4.030788] localhost dracut-initqueue[773]: + case $arg in
[ 4.031377] localhost dracut-initqueue[773]: + mkdir -m 0755 -p /run/initramfs/live
[ 4.031924] localhost dracut-initqueue[773]: + '[' -f /dev/sda2 ']'
[ 4.032484] localhost dracut-initqueue[773]: ++ blkid -o value -s TYPE /dev/sda2
[ 4.033075] localhost dracut-initqueue[773]: + '[' '' '!=' ntfs ']'
[ 4.033564] localhost dracut-initqueue[773]: + mount -n -t auto -o ro /dev/sda2 /run/initramfs/live
[ 4.034100] localhost dracut-initqueue[773]: mount: wrong fs type, bad option, bad superblock on /dev/sda2,
[ 4.034593] localhost dracut-initqueue[773]: missing codepage or helper program, or other error
[ 4.035175] localhost dracut-initqueue[773]: In some cases useful info is found in syslog - try
[ 4.035726] localhost dracut-initqueue[773]: dmesg | tail or so.
[ 4.036299] localhost dracut-initqueue[773]: + '[' 32 '!=' 0 ']'
[ 4.036846] localhost dracut-initqueue[773]: + die 'Failed to mount block device of live image'
[ 4.037422] localhost dracut-initqueue[773]: + echo '<24>dracut: FATAL: Failed to mount block device of live image'
[ 4.037966] localhost dracut-initqueue[773]: + echo '<24>dracut: Refusing to continue'
[ 4.038553] localhost dracut-initqueue[773]: + echo 'warn dracut: FATAL: "Failed to mount block device of live image"'
[ 4.039143] localhost dracut-initqueue[773]: + echo 'warn dracut: Refusing to continue'
위 출력에 따르면 CentOS 파티션이 아닌 데이터 파티션 dracut
에서 라이브 이미지를 로드하려고 하여 부팅할 수 없는 것으로 보입니다 . /dev/sda2
즉, dracut
올바른 파티션을 사용하여 OS를 부팅하는 경우도 있지만 어떤 /dev/sda1
이유로 /dev/sda2
.root
root=/dev/sda1
blkid
셸에서 실행하면 다음이 dracut
생성됩니다.
/dev/sda1: UUID="2019-07-06-19-24-46-00" LABEL="CentOS-7-x86_x64-LiveGNOME-1810" TYPE="iso9660" PTTYPE="dos"
그러나 생성된 로그를 보면 dracut
다음과 같은 출력을 볼 수 있습니다.
+ blkid
/dev/sda1: UUID="2019-07-06-19-24-46-00" LABEL="CentOS-7-x86_64-LiveGNOME-1810" TYPE="iso9660" PTTYPE="dos"
+ blkid -o udev
ID_FS_UUID=2019-07-06-19-24-46-00
ID_FS_UUID_ENC=2019-07-06-19-24-46-00
ID_FS_LABEL=CentOS-7-x86_64-LiveGNOME-1810
ID_FS_LABEL_ENC=CentOS-7-x86_64-LiveGNOME-1810
ID_FS_TYPE=iso9660
ID_PART_TABLE_TYPE=dos
+ ls -l /dev/disk/by-id /dev/disk/by-label /dev/disk/by-path /dev/disk/by-uuid
/dev/disk/by-id:
total 0
lrwxrwxrwx 1 root 0 9 Jul 7 11:54 usb-SanDisk_Extreme_Pro_00000000000000000000-0:0 -> ../../sda
lrwxrwxrwx 1 root 0 10 Jul 7 11:54 usb-SanDisk_Extreme_Pro_00000000000000000000-0:0-part1 -> ../../sda1
lrwxrwxrwx 1 root 0 10 Jul 7 11:54 usb-SanDisk_Extreme_Pro_00000000000000000000-0:0-part2 -> ../../sda2
/dev/disk/by-label:
total 0
lrwxrwxrwx 1 root 0 10 Jul 7 11:54 CentOS-7-x86_64-LiveGNOME-1810 -> ../../sda2
/dev/disk/by-path:
total 0
lrwxrwxrwx 1 root 0 9 Jul 7 11:54 pci-0000:00:14.0-usb-0:1:1.0-scsi-0:0:0:0 -> ../../sda
lrwxrwxrwx 1 root 0 10 Jul 7 11:54 pci-0000:00:14.0-usb-0:1:1.0-scsi-0:0:0:0-part1 -> ../../sda1
lrwxrwxrwx 1 root 0 10 Jul 7 11:54 pci-0000:00:14.0-usb-0:1:1.0-scsi-0:0:0:0-part2 -> ../../sda2
/dev/disk/by-uuid:
total 0
lrwxrwxrwx 1 root 0 10 Jul 7 11:54 2019-07-06-19-24-46-00 -> ../../sda2
라벨은 왜 붙었는지 모르겠네요CentOS-7-x86_64-LiveGNOME-1810에 할당됩니다 sda2
.
질문:
100% 부팅 성공률을 보장하기 위해 항상 올바른 파티션이 선택되도록 하는 수정 사항이 있습니까? 이제 OS로 부팅할 수 있을 때까지 노트북의 전원을 껐다가 다시 켜야 합니다.
고쳐 쓰다:
이 문제는 2개의 파티션으로 인해 발생한 것 같습니다. 첫 번째는 CentOS 이미지이고 두 번째는 암호화된 파티션입니다. 이유를 완전히 설명할 수는 없지만 부팅 시 첫 번째 파티션(예:)의 레이블이 CentOS-7-x86_64-LiveGNOME-1810
두 번째 파티션에도 할당되는 것 같습니다. 따라서 부팅 순서에서 CentOS-7-x86_64-LiveGNOME-1810
레이블이 있는 파티션을 찾을 때 어떤 파티션이 먼저 나오는지에 따라 첫 번째 또는 두 번째 파티션을 반환합니다. 이로 인해 첫 번째 파티션이 먼저 선택될 때 일부 중요한 시작이 발생하고 두 번째 파티션이 반환되면 실패합니다.
두 번째 Veracrypt 암호화 파티션의 레이블을 변경해 보았지만 소용이 없었습니다. 루트 명령을 다음과 같이 변경하여 문제를 해결했습니다.
initrd=initrd0.img root=live:/dev/sdb1 rootfstype=auto ro rd.live.image rd.shell rd.debug log_buf_len=1M rd.luks=0 rd.md=0 rd.dm=0 BOOT_IMAGE=vmlinuz0
그러나 이로 인해 다른 장치에서는 USB 키가 작동하지 않습니다. 를 사용해 보았지만 root=live:/dev/disk/by-id/usb-SanDisk_Extreme_Pro_00000000000000000000-0:0-part1
그것도 작동하지 않는 것 같습니다.
대부분의 최신 노트북/데스크톱에서 작동하는 Veracrypt 파티션과 쌍을 이루는 이중 파티션 사용자 지정 CentOS 7.6 이미지를 얻는 데 도움이 될 수 있는 팁이 있는 사람이 있다면 매우 감사하겠습니다. EFI와 함께 사용하는 것이 가장 좋습니다. 지금은 MBR에 만족할 것입니다.