web-dev-qa-db-ja.com

ディスクイメージをマウントするにはどうすればよいですか?

ディスクイメージがありますmyimage.diskには、パーティションテーブルとプライマリパーティション(つまり、FAT32ファイルシステム)が含まれています。それをUSBペンのイメージと考えてください。

プライマリパーティションをローカルディレクトリにマウントしたい。 loop utilsを使用してパーティションイメージをマウントする方法は知っていますが、ここにはディスクイメージがあります。私の推測では、パーティションテーブルを「スキップ」してイメージをマウントする必要がありますが、それを行うにはどうすればよいですか?

26
Emiliano

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
45
scott.squires

これが見つかりました:

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を使用して各パーティションを個別のファイルに抽出します。

4
Emiliano

現在、udisksを使用すると、作業を最小限に抑えることができます。 ArchWiki:udisks-マウントループデバイス からの解決策

ISOイメージを簡単にマウントするには、次のコマンドを使用します。

udisksctl loop-setup -r -f image.iso

これにより、ループデバイスが作成され、マウントの準備ができているISOイメージが表示されます。アンマウントされると、ループデバイスはudevによって終了されます。

-r読み取り専用オプションがあります。

3
ephemerr
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}
2
spew