VDI 파일의 원시 디스크 이미지는 qemu-nbd를 사용하여 마운트할 수 있지만 루프 장치를 사용하지 않습니까?

VDI 파일의 원시 디스크 이미지는 qemu-nbd를 사용하여 마운트할 수 있지만 루프 장치를 사용하지 않습니까?

VirtualBox에 아주 오래된 버전의 Slack(3.2)을 설치하고 RAW 형식(ext2)으로 변환했습니다. 그런데 어떤 이유에서인지 losstup을 사용하여 설치할 수 없는데 qemu-nbd는 잘 작동합니다. 왜?

나는 노력했다. losetup -P -f --show slack-3.2.img

하지만 파티션을 생성하지는 않습니다. GRUB_CMDLINE_LINUX="loop.max_part=63" 및 grub-mkconfig 등이 되도록 /etc/default/grub을 수정했지만 여전히 이미지에서 파티션을 생성하지 않습니다.

나는 시도했고 kpartx -av slack-3.2.img그 후에 얻었습니다.

read error, sector 0
read error, sector 1
read error, sector 29

나는 심지어 시도했다dd if=slack-3.2.img of=slack.part bs=512 skip=63 count=409185

하지만 sudo losetup -P -f --show slack.part여전히 실패합니다. 왜 작동하지 않나요?

sudo fdisk -l slack-3.2.img

Disk slack-3.2.img: 200 MiB, 209715200 bytes, 409600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device         Boot Start    End Sectors   Size Id Type
slack-3.2.img1         63 409247  409185 199.8M 83 Linux

답변1

읽기 오류, 섹터 0

이는 파일에 액세스하는 커널에 문제가 있음을 나타냅니다. vboxfs라고 의심됩니다. 나는 심볼릭 링크와 하드 링크를 지원하지 않는 오래된 버그를 갖고 있는데, 내 생각에는 전자만 수정한 것 같습니다.

qemu-nbd OTOH는 파일만 읽기 때문에 문제가 없습니다. 하지만 커널은 mmap 및 기타 저수준 액세스를 사용합니다.

해결책은 이미지를 (가상) 파티션의 ext2/4에 복사하는 것입니다.

답변2

VirtualBox는 일반적으로 원시 파일을 사용하지 않고 특수 내부 형식의 이미지를 사용하기 때문입니다.

원시 데이터로 변환하려면 다음을 사용하십시오.

qemu-img convert -O raw INPUT OUTPUT 

또 다른 설명은 파일을 작업하고 있지만 시도하는 많은 작업에는 블록 장치가 필요하다는 것입니다. 이는 ndb 또는 losstup에서 얻을 수 있습니다.

losetup -o $((63 * 512)) /dev/loop7 FILE

직접 분할해야 합니다.

관련 정보