我怎样才能将用“dd”创build的驱动器镜像分割为每个分区的单独文件?

我创build了一个失败的驱动器的图像:

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

该驱动器只有两个分区:

  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)分割成两个或三个文件 (1:MBR; 2:分区1; 3:分区2), 以便我可以在其中装入文件系统

我发现的一个解决scheme对我来说是行不通的,就是使用split创build许多512K文件,然后将它们一起重新整理成三个文件(1:512K,2:105M,3:其余部分)没有这个磁盘空间。

历史:
我已经将整个图像复制到一个新的驱动器,它启动,大部分工作。 看起来FS在旧的故障驱动器上损坏了,并且dd复制了损坏的部分(如它应该的那样),然后我把它们写到新的驱动器上。 我的解决scheme是安装我复制的FS和副本只是文件(使用rsync或其他),所以希望我不会复制坏的位。

更新1 :我试过dd if=/mnt/image001.dd of=/mnt/image001.part1.dd bs=512 count=204800 skip=1但是mount抱怨说NTFS signature is missing ,所以我觉得我没有'不要这样做。

你根本不需要拆分它。

使用parted来获取有关分区表的详细信息:

 parted image001.dd 

parted用命令uB切换到字节单位。 之后,发出命令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 

将在/mnt/rescue挂载第三个分区。

简单地使用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进行清理。