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


26

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

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


7
参照してくださいsuperuser.com/questions/117136/...あなたは、単に使用することlosetup --partscan --find --show disk.imgが続くmount /dev/loop0p1 /mnt/disk
フロー

回答:


44

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

1
-o loop上記は不要で、/dev/mapper/loop0p1すでにブロックデバイスです(ループデバイスの上にあるマッパーデバイスです。ループデバイスの上に別のループデバイスのレイヤーは必要ありません)。
sch 14

2
実行/dev/loop0p1後にパーティションデバイス(など)を取得しない場合はlosetup、を実行しpartprobe /dev/loop0ます。
ウラジミールパンテレエフ16

kpartxLinux Mint 18にはデフォルトでインストールされているようです。
unfa18年

4

これを見つけました:

http://www.andremiller.net/content/mounting-hard-disk-image-include-partitions-using-linux

まさに私が探していたもののようです。

重要な部分は次のとおりです。

mount -o loop,ro,offset=32256 hda.img /mnt/rabbit

ここで、オフセットの値はバイト単位です。オフセットを取得するための推奨される方法partedは、画像をポイントし、バイト単位でユニットBを指定し、印刷出力から開始値を取得することです。別の方法として、ディスク領域があると仮定して、明らかなことを行いddます。オフセットとサイズを取得したら、各パーティションを個別のファイルに抽出するために使用します。


1
本当に素晴らしい答えを書くために、ここで最も重要な部分を説明してもらえますか?リンクがあるのは素晴らしいことですが、ここに情報があるのがベストでしょう。
slhck

1
キー部分は次のとおりmount -o loop,ro,offset=32256 hda.img /mnt/rabbitです。の値offsetはバイト単位です。オフセットを取得するための推奨される方法は、画像を別の場所にunit B向けてstartから、バイト単位でprint出力から値を取得することです。別の方法として、ディスク領域があると仮定して、明らかなことを行いddます。オフセットとサイズを取得したら、各パーティションを個別のファイルに抽出するために使用します。
CVn

はい、短すぎてすみません。マイケルが指摘したように、関連する部分は、もちろん、オプションmountを含む行offsetです。
エミリアーノ

2
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}

1
これは質問に答える可能性がありますが、その理由を説明することができれば、より良い答えになります。
DavidPostill

2

現在、を使用して作業を最小限に抑えることができますudisksArchWikiのソリューション:udisks-ループデバイスのマウント

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

udisksctl loop-setup -r -f image.iso

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

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


これは驚くべきことです、情報をありがとう。これが初めての参照を見つけたのはクレイジーudisksctlです。
オックスウィビ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.