フルディスクイメージファイルからファイルシステムを読み取るには?

フルディスクイメージファイルからファイルシステムを読み取るには?

次のコマンドを実行しました。

VBoxManage clonehd d6b9f0a5-98df-48ca-83c8-91a0809ec349 --format RAW Debian.raw
sudo dd if=~/.VirtualBox/HardDisks/Debian.raw of=/dev/sda5

パーティションをマウントしようとすると、次の苦情が表示されます。

EXT4-fs (sda5): VFS: Can't find ext4 filesystem

これで、仮想マシンにext4パーティションがあることがわかりました。私は何が間違っていましたか?

ベストアンサー1

イメージはファイルシステムイメージではなくディスクイメージです。ファイルシステムはそのイメージ内のパーティションにあります(非常に珍しいことをしない限り)。file Debian.rawとを実行してこれを確認できますfdisk -l Debian.raw

このパーティションにアクセスする最も簡単な方法は、ループデバイスに接続することです。可能であれば、ドライバがこのオプションをサポートしてロードしていることをloop確認してください。その後、ディスクイメージをループデバイスに関連付けると、次のようになります。max_partsrmmod loop; modprobe loop max_part=63

losetup -fs Debian.raw     # prints /dev/loop0 (or some other number)
mount /dev/loop0p1 /mnt    # 0 as above, 1 is the partition number

ループドライバにパ​​ーティションを使用させることができない場合は、ディスクイメージ内のパーティションのオフセットを見つける必要があります。実行してfdisk -lu Debian.rawパーティションをリストし、開始セクターS(セクターは512バイト)を見つけます。その後、losetup屋根ふき装置がこのオフセットで開始されることを望んでいることを伝えます。

fdisk -lu Debian.raw  # note starting sector $S
losetup -fs -o $(($S * 512)) Debian.raw
mount /dev/loop0 /mnt  # /dev/loop0 or whatever losetup prints

VMイメージからシステムにパーティションをコピーする場合は、上記のように開始($S)および終了()オフセットを決定します。その後、パーティションをコピーします。$Efdisk -lu

<Debian.raw tail -c +$((512*$S)) | dd of=/dev/sda5 bs=4M

(ソースとターゲットが同じディスクにない場合は面倒ではなく、出力にリダイレクトするだけです。dd同じディスクにある場合は、より大きなパラメータを使用する方がはるかに高速です。)tail/dev/sda5ddbs

おすすめ記事