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


9

故障したドライブのイメージを作成しました:

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または何かを使用して)をコピーすることです。そうすれ、不良ビットをコピーできなくなります。

更新1:試してみましたdd if=/mnt/image001.dd of=/mnt/image001.part1.dd bs=512 count=204800 skip=1が、mount文句を言うのでNTFS signature is missing、正しく行っていないと思います。

回答:


17

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

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ます。


これとkpartx私の問題の両方を解決します。私は想像するので、私はこの答えを選んだのpartedより一般的ですkpartxが、kpartx少し簡単です。
ジョーA

16

単に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、クリーンアップしてください。


1
+1これはいいことですが、そのツールについて聞いたことはありません。
スヴェン

これと以下のSvenWの答えはどちらも非常にうまく機能します!どちらもドライブイメージ内にパーティションをマウントします。
ジョーA
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.