ハードドライブの/ bin / ddで作成された「img」をマウントするにはどうすればよいですか?


19

80GBドライブのddバックアップに使用しました

dd if=/dev/sdb of=~/sdb.img

次に、そのドライブ上のいくつかのファイルにアクセスする必要がありますが、「。img」をドライブ上にコピーしたくありません。

mount ~/sdb.img /mnt/sdb動作しません。それは返します:

mount: you must specify the filesystem type

私はファイルシステムタイプを見つけようとしました file -s

fox@shoebox $ file -s sdb.img
sdb.img: x86 boot sector; partition 1: ID=0x12, starthead 1, startsector 63, 10233342 sectors; partition 2: ID=0xc, active, starthead 0, startsector 10233405, 72517410 sectors; partition 3: ID=0xc, starthead 0, startsector 82750815, 73545570 sectors, code offset 0xc0

マウントすることは可能ですか、それともドライブの復元sdb.imgに使用ddする必要がありますか?

回答:


27

またはの代わりにddon を使用すると、上記のドライブからすべてパーティション1つのファイルにコピーます。/dev/sdb/dev/sdb1/dev/sdb2

各パーティションを個別にマウントする必要があります。


fileからパーティションをマウントするには、まずそのパーティションがファイル内のどこにあるかを調べる必要があります。

からの出力を使用して、パーティションごとにfile -s sdb.imgを見つけますstartsectors

sdb.img:x86ブートセクター。パーティション1:ID = 0x12、開始ヘッド1、startsector 63、10233342セクタ。パーティション2:ID = 0xc、アクティブ、開始ヘッド0、startsector 10233405、72517410セクター。パーティション3:ID = 0xc、開始ヘッド0、startsector 82750815、73545570セクター、コードオフセット0xc0

Partition      Startsector
1 63
2 10233405
3 82750815

単一のパーティションをマウントするにX は、そのパーティションのstartsectorは次のように実行します:

mount ~/sdb.img /mnt/sdb -o offset=$((X*512))

したがって、2番目のパーティションをマウントするには、を実行する必要があります。

mount ~/sdb.img /mnt/sdb2 -o offset=$((10233405*512))

サイドノート:/mnt/sdb2これを実行する前に存在することを確認してください。

楽しむ!


更新:答えでは512、あなたの画像のセクターサイズはであると仮定しました。それを計算する方法についてはこの質問をご覧ください。


またfile -l sdb.img、質問の回答に投稿されているものを使用して、開始形式を表形式で取得することもできます。unix.stackexchange.com
学生

@student:将来の読者への修正のみ:それはそうでfdisk -lはないでしょうfile -l
ルニウム

さらに明確化-コマンドに-uオプションを追加することで512バイトセクターの数を取得できます-そうfdisk -u -l sdb.img
アーロンメイソン14

のバージョンがfileデフォルトであまりおしゃべりでない場合は、-kスイッチを追加して、回答に示されているような出力を取得してみてくださいfile -k FILENAME.img
クリスチャンピーチュ14

7

Linuxでは、受け入れられた回答内のマウントコマンドは、ループデバイスを暗黙的に作成します。完全なディスクイメージに正しいパーティションテーブル(カーネルが理解できる)があると仮定すると、losetup(8)オフセットを計算する手間を省くために直接使用することを好むかもしれません。またkpartx、他の回答で提案されているような追加のツールは必要ありません。基本的に次と同じことを行います。

losetup -Prf sdb.imgは最初のフリーループデバイス(-f)を-rイメージファイルにreadonly()として関連付けますsdb.img。この-Pオプションは、カーネルにこのループデバイスのパーティションテーブルをスキャンさせ、各パーティションにループデバイスを作成します。

そのため、次のようになります。

$ lsblk
NAME      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0       7:0    0 167.7G  1 loop
├─loop0p1 259:0    0   500M  1 loop
└─loop0p2 259:1    0 167.2G  1 loop
...

これで、各パーティションを、もちろん読み取り専用で、目的のマウントポイントにマウントできます。

$ mount -r /dev/loop0p1 /tmp/backup_sdb1

すべてを読み取り専用にすることはオプションですが、バックアップイメージに対して行うことは良いことです。

更新: 2012年にutil-linux-2.21で-Pオプションが追加されました。そのため、受け入れられた回答が書かれた時点では利用できませんでした。また、これと他の回答はLinux固有のものであることに注意してください。OpenBSDおよびNetBSDにはvnodeディスクが管理されてvnconfig(8)おり、FreeBSDにはメモリディスクが管理されていmdconfig(8)ます。


2

または、という素敵なツールを使用できますkpartx。manページから:

kpartx-パーティションテーブルからデバイスマップを作成する

これは、imgファイルから直接、デバイスパーティションを使用して「疑似デバイス」を作成できることを意味します。

$ kpartx -av sdb.img
add map loop0p1 (254:2): 0 2048 linear /dev/loop0 0
add map loop0p2 (254:3): 0 31162 linear /dev/loop0 2048
$ lsblk
.
.
.
loop0                     7:0    0  16.2M  0 loop
├─loop0p1               254:2    0     1M  0 part
└─loop0p2               254:3    0  15.2M  0 part

次に/dev/mapper/loop0p2、たとえば、イメージに2番目のパーティションが必要な場合にマウントできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.