web-dev-qa-db-ja.com

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

非常に古いSlackバージョン(3.2)をVirtualBoxにインストールし、それをRAW形式(ext2)に変換しました。ただし、何らかの理由でlosetupを使用してマウントできませんが、qemu-nbdは正常に機能します。どうして?

試してみました、losetup -P -f --show slack-3.2.img

ただし、パーティションは作成されません。/etc/default/grubを変更して、GRUB_CMDLINE_LINUX = "loop.max_part = 63"やgrub-mkconfigなどを作成しましたが、それでもイメージからパーティションは作成されません。

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
Dennis

読み取りエラー、セクター0

これは、カーネルがファイルにアクセスする際の問題を示しており、vboxfsが原因であると強く疑っています。シンボリックリンクとハードリンクをサポートしていないという長いオープンバグがあり、前者を修正しただけだと思います。

qemu-nbd OTOHはファイルを読み取るだけなので問題ありませんが、カーネルはmmapやその他の低レベルのアクセスを使用します。

解決策は、イメージを(仮想)パーティションのext2/4にコピーすることです。

0
Bernhard M.

これは、VirtualBoxは通常、rawファイルではなく、特別な内部形式の画像を使用するためです。

生に変換するには、

qemu-img convert -O raw INPUT OUTPUT 

別の説明としては、ファイルを操作することもできますが、試行する操作の多くはブロックデバイスを想定しており、ndbまたはlosetupから取得します。

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

パーティションを直接提供する必要があります。

0
Bernhard M.