火曜日, 5月 26, 2009

ハードディスクイメージのマウント

ディスクイメージの作成
dd if=/dev/hdb of=/root/hdd.img bs=512 obs=1024k count=488397168 conv=sync,noerror

obsは出力する単位で、こちらはバッファリングするだけですので大きな値にすると高速化できるそうです。

countは後述するnoerrorで終端が無効になって無限ループするのを防ぐために指定します。countはbs単位です。countの値はdmesgやfdisk -luなどの出力などを見てハードディスク全体の長さになるよう決めます。

convはオプションでsyncは読み込めないセクタがあってもヌルパディングしてデータの位置を保持する、noerrorはエラーがあっても無視して続けることをそれぞれ表しています。



ディスクイメージのoffsetの調査
losetup -f   #使われていないloopデバイスを調べる
losetup /dev/loop0 /root/hdd.img #イメージをマウントする
fdisk -lu /dev/loop0 #セクタ単位でパーティションの位置を確認する
losetup -d /dev/loop0 #アンマウント


パーティションのマウント
mount /root/hdd.img /mnt/ntfs -t ntfs -o ro,loop,offset=32256,nls=utf8

offsetが重要でパーティションの開始位置をバイト単位で指定します。パーティションの開始位置とはセクタサイズ512byteのハードディスクの場合、fdisk -luで出てくるStartにセクタサイズの512をかけた値になります(今回は32256=512*63)。

ntfsパーティションをマウントする場合はnls=utf8を指定しないと日本語ファイルがLinuxから見えなくなります。utf8の指定方法にはiocharset=utf8とする方法や、-oとは別に-utfする方法がありますが、いずれも現在は推奨されずnlsを使うのが良いようです。


losetupしてからmountしても同じ事ができます
losetup /dev/loop0 /root/hdd.img --offset=32256
mount /dev/loop0 /mnt/ntfs -t ntfs -o ro,loop,nls=utf8


参照:ハードディスクイメージのマウント

0 件のコメント: