将整个分区或硬盘驱动器克隆到稀疏文件

将整个分区或硬盘驱动器克隆到稀疏文件

我喜欢将整个分区或整个硬盘驱动器克隆到更大的外部磁盘上,但喜欢创建稀疏文件。我经常用于dd克隆,但它不支持稀疏文件。作为解决方法,我使用了类似的方法:

cp --sparse=always <(dd if=/dev/sda1 bs=8M) /mount/external/backup/sda1.raw

然而,这对我来说有点太棘手,并且不允许我在中止时恢复该过程。有趣的是,有一个 NTFS 工具可以实现此目的 ( ntfsclone),但 Linux 的本机文件系统 (EXT2-4) 却没有这样的工具。

有没有更好的工具,例如dd具有稀疏支持的变体?我不想寻找一些用于磁盘备份的专有软件,而只是想制作一个稀疏克隆副本,如果需要,我可以将其安装为循环设备。

答案1

你要dd_rescue

dd_rescue -a -b 8M /dev/sda1 /mount/external/backup/sda1.raw

复制可能会随时被 中断Ctrl-C,显示当前位置。重新启动时可以使用该值,通过将-s和 位置添加到原始命令中,例如

dd_rescue -a -b 8M -s 42000k /dev/sda1 /mount/external/backup/sda1.raw

更简单的是指定第三个文件名,它充当日志文件。重新启动时dd_rescue将读取该日志文件并从中断处继续。

答案2

只是为了完整性,要求解救--sparseor标志-S允许稀疏地写入目的地:

$ ddrescue -S -b8M /dev/sda1 /mount/external/backup/sda1.raw

或者使用长选项:

$ ddrescue --sparse --block-size 8M /dev/sda1 /mount/external/backup/sda1.raw

或者如果你愿意的话米布斯:

$ ddrescue -S -b8Mi /dev/sda1 /mount/external/backup/sda1.raw

要允许中断和恢复救援,您还可以使用日志文件:

$ ddrescue -S -b8Mi /dev/sda1 /mount/external/backup/sda1.raw ~/sda1.rescue.log

请注意,GNUddrescue和GNUdd_rescue是不同的程序。但 GNUddrescue似乎更广泛。例如它已经打包了GRML

答案3

有一个提供补丁2007 年在 GNU dd 中提供稀疏文件支持,但它看起来还没有进入 coreutils(至少在 8.4 中没有)。我怀疑 dd 从那时起已经改变了太多,该补丁可能适用于当前版本,而无需进行大量工作。

我对你的问题中的创造性使用也印象深刻cp,它让我走上了使用它来完成恢复的轨道(这里从〜80M恢复到源代码):

cp --sparse=always \
  <(dd if=/dev/sda1 bs=8M skip=10) /dev/stdout \
  | dd bs=8M seek=10 of=/mount/external/backup/sda1.raw

编辑:从头开始。第二个dd当然是在输出文件中寻找错误的位置,因为它的长度与输入的长度不同。

答案4

只是加上我的 2 美分。从原始磁盘创建稀疏文件的另一种方法是qemu-img使用类似:

qemu-img convert -f raw /dev/sda /tmp/sda.raw

您也可以在单个分区上使用它。此外,您还可以选择将原始磁盘/分区转换为 qemu-img 支持的任何其他格式(QCOW2、VHD[x]、vmdk 等)

相关内容