web-dev-qa-db-ja.com

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

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

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を使用してドライブを復元する必要がありますか?

19
fox

/dev/sdbまたは/dev/sdb1ではなく/dev/sdb2ddを使用すると、allがコピーされます上記のドライブのパーティションoneファイルに変換します。

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


ファイルからパーティションをマウントするには、最初にどこを見つける必要がありますパーティションが存在するファイル内。

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

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

PartitionStartsector
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))

sidenote:これを実行する前に、/mnt/sdb2が存在することを確認してください。

楽しんで!


update:回答では、イメージのセクターサイズは512であると想定しました。参照してください この質問 =それを計算する方法について。

27
Stefan

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

_losetup -Prf sdb.img_は、最初のフリーループデバイス(_-f_)を読み取り専用(_-r_)として画像ファイル_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
_

すべてを読み取り専用に保つことはオプションですが、代替画像を作成する場合に適しています。

update:_-P_オプションが追加されました 2012年にutil-linux-2.21を使用。受け入れられた回答が書かれた時間。また、これと他の回答はLinuxに固有のものであることに注意してください。 OpenBSDとNetBSDは vnconfig(8) によって管理されるvnodeディスクを持ち、FreeBSDは mdconfig(8) によって管理されるメモリディスクを持っています。

7
escrl

または、kpartxというNiceツールを使用することもできます。 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番目のパーティションが必要な場合。

2
Omer Dagan