如何将用“ dd”创建的驱动器映像分割为每个分区的单独文件?


9

我使用以下方法创建了故障驱动器的映像:

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),以便可以在其中安装文件系统?

我发现一个对我不起作用的解决方案是用于split创建许多512K文件,然后将cat它们重新组合成三个文件(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=1mount抱怨了NTFS signature is missing,所以我认为我做得不好。

Answers:


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

将在挂载第三个分区/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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.