ディスクイメージがありますmyimage.disk
には、パーティションテーブルとプライマリパーティション(つまり、FAT32ファイルシステム)が含まれています。それをUSBペンのイメージと考えてください。
プライマリパーティションをローカルディレクトリにマウントしたい。 loop utilsを使用してパーティションイメージをマウントする方法は知っていますが、ここにはディスクイメージがあります。私の推測では、パーティションテーブルを「スキップ」してイメージをマウントする必要がありますが、それを行うにはどうすればよいですか?
Kpartxツールはこれを簡単にします。イメージ内のパーティションごとに、/ dev/mapperにループデバイスを作成します。次に、オフセットを手動で計算することなく、目的のパーティションに対応するループデバイスをマウントできます。
たとえば、ディスクイメージの最初のパーティションをマウントするには:
kpartx -a -v myimage.disk
mount /dev/mapper/loop0p1 /mnt/myimage
イメージを使い終わったら、ループデバイスを削除します。
umount /mnt/myimage
kpartx -d -v myimage.disk
あるいは、最近のカーネルがあり、起動時にloop.max_part = 63を渡す場合(ループが組み込まれている場合)またはmodprobeに渡す場合(ループがモジュールの場合)、次のように実行できます。
losetup /dev/loop0 myimage.disk
partprobe /dev/loop0 # Re-read partition table if /dev/loop0 was used with a different image before
mount /dev/loop0p1 /mnt/myimage
ループが終わったら:
losetup -d /dev/loop0
これが見つかりました:
http://www.andremiller.net/content/mounting-hard-disk-image-include-partitions-using-linux
それはまさに私が探していたもののようです。
ここに重要な部分があります:
mount -o loop,ro,offset=32256 hda.img /mnt/rabbit
ここで、offsetの値はバイト単位です。オフセットを取得するための推奨される方法は、parted
を画像に向け、次にバイトのユニットBを指定して、印刷出力から開始値を取得することです。別の方法として、ディスクスペースがあることを前提として、明白なことを行います。オフセットとサイズを取得したら、dd
を使用して各パーティションを個別のファイルに抽出します。
現在、udisks
を使用すると、作業を最小限に抑えることができます。 ArchWiki:udisks-マウントループデバイス からの解決策
ISOイメージを簡単にマウントするには、次のコマンドを使用します。
udisksctl loop-setup -r -f image.iso
これにより、ループデバイスが作成され、マウントの準備ができているISOイメージが表示されます。アンマウントされると、ループデバイスはudevによって終了されます。
-r
読み取り専用オプションがあります。
local_image_file=/var/tmp/image.img
first_byte=$(parted -m ${local_image_file} unit B print | grep Linux | cut --fields 2 --delimiter ':' | sed 's/.$//')
loop_file=/var/tmp/loop
mkdir -p ${loop_file}
mount -o loop,ro,offset=${first_byte} ${local_image_file} ${loop_file}