ハードディスクの/bin/ddを使用して作成された「img」をマウントする方法は?

ハードディスクの/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

答え1

または代わりにddonを使用するとコピーされます。/dev/sdb/dev/sdb1/dev/sdb2みんなこれ分割上記のドライブから入力一つ文書。

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


到着パーティション文書まず、ファイル内のパーティションがある場所を見つける必要があります。

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

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

分割     スタートセクター
1 63
2 10233405
3 82750815

単一パーティションをマウントX するにはスタートセクターこのパーティションを実行しています。

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

だからインストールするには2番目のパーティション、次を実行する必要があります。

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

注:/mnt/sdb2このコマンドを実行する前に存在することを確認してください。

楽しくお過ごしください!


修正する:答えでは、画像のセクタサイズが512次のようになると仮定します。この問題計算方法について。

答え2

Linuxのマウントコマンドで受け入れられた回答ループデバイスは暗黙的に生成されます。ディスクイメージ全体に正しいパーティションテーブル(カーネルが理解している)があると仮定すると、次のことをお勧めします。losetup(8)オフセットを計算する手間を直接軽減します。また、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

すべてを読み取り専用に保つことはオプションですが、バックアップイメージには適しています。

修正する: -P追加されたオプションutil-linux-2.21を使用した2012また、この回答と他の回答はLinux固有です。 OpenBSD と NetBSD には、次の構成の vnode ディスクがあります。vnconfig(8)FreeBSDのメモリディスクは次のように構成されています。mdconfig(8)

答え3

またはkpartx。マニュアルページから:

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番目のパーティションが必要な場合は、それをマウントできます。

関連情報