web-dev-qa-db-ja.com

'dd'で作成されたドライブイメージをパーティションごとに別々のファイルに分割するにはどうすればよいですか?

故障したドライブのイメージを次のように作成しました。

dd if=/dev/sde of=/mnt/image001.dd

ドライブには2つのパーティションしかありませんでした。

   Device Boot      Start         End      Blocks   Id  System
/dev/sde1   *           1          13      102400    7  HPFS/NTFS
/dev/sde2              13       60802   488282112    7  HPFS/NTFS

イメージ(image001.dd)を2つまたは3つのファイルに分割するにはどうすればよいですか(1:MBR; 2:パーティション1; 3:パーティション2)ファイルシステムをマウントできるようにそれ?

私がうまくいかないことがわかった解決策は、splitを使用して多数の512Kファイルを作成し、次にそれらをcatして3つのファイル(1:512K、2:105M、 3:残り)、しかし私はそのためのディスクスペースを持っていません。

歴史:
イメージ全体を新しいドライブにコピーしましたが、起動してほとんど機能します。 FSは古い故障したドライブで破損しており、ddは破損した部分を(必要に応じて)コピーしたようです。それらを新しいドライブに書き込みました。私の解決策コピーしたFS)をマウントし、ファイルだけをコピーして(rsyncなどを使用)、うまくいけば悪いビットはコピーしません。

UPDATE 1dd if=/mnt/image001.dd of=/mnt/image001.part1.dd bs=512 count=204800 skip=1を試しましたが、mountNTFS signature is missingと文句を言っているので、やっていないと思います正しくやってはいけません。

9
Joe A

これを分割する必要はまったくありません。

partedを使用して、パーティションテーブルの詳細を取得します。

parted image001.dd

partedで、コマンドu、次にBを使用してバイト単位に切り替えます。その後、コマンドprintを発行します。

次のような出力が得られます(出力は実際のシステムからのものであり、画像ではありません)。

Model: Virtio Block Device (virtblk)
Disk /dev/vda: 25165824000B
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start         End           Size          Type     File system     Flags
 2      1048576B      400556031B    399507456B    primary  ext4            boot
 3      400556032B    21165506559B  20764950528B  primary  ext4
 1      21165506560B  25164775423B  3999268864B   primary  linux-swap(v1)

ループバックマウントのオフセットとしてStart番号を使用できます。

mount -o loop,ro,offset=400556032 image001.dd /mnt/rescue

3番目のパーティションを/mnt/rescueにマウントします。

17
Sven

単にkpartxツールを使用する方がはるかに優れています。

usage : kpartx [-a|-d|-l] [-v] wholedisk
    -a add partition devmappings
    -d del partition devmappings
    -l list partitions devmappings that would be added by -a
    ...

例:

# kpartx -l whole_disk # only listing
loop0p1 : 0 518144 /dev/loop0 2048
loop0p2 : 0 3674112 /dev/loop0 520192
# kpartx -a whole_disk 
# file -sL /dev/mapper/loop0p*
/dev/mapper/loop0p1: Linux/i386 swap file (new style), version 1 (4K pages), size 64767 pages, no label, UUID=e4990860-c87d-4850-9e8d-ecb0a0506516
/dev/mapper/loop0p2: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)

この時点でマウントできます/dev/mapper/loop0p2

マウントを解除した後、kpartx -d whole_disk そうじする。

16
kupson