我创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用命令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工具好多了。
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进行清理。