VDIファイルのrawディスクイメージはqemu-nbdを使用してマウントできますが、ループデバイスを使用しませんか?

VDIファイルのrawディスクイメージは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

直接分割する必要があります。

関連情報