我可以使用任意块大小的 dd 克隆包含操作系统的硬盘吗?

我可以使用任意块大小的 dd 克隆包含操作系统的硬盘吗?

为了提高速度,使用 dd 和任意大块大小将硬盘克隆到更大硬盘中的映像文件是否安全?使用不同的 bs 时生成的映像是否相同?将该映像还原到原始驱动器时怎么样?

答案1

是的,无论块大小都没有问题。

也就是说,使用时,dd您也会复制空白/未使用的空间,从而浪费目标文件中的空间。如果您喜欢通过网络直接访问目标磁盘,那么这没问题,但如果您要制作“主映像”来克隆一堆机器或用于备份,那就不太好。如果您打算这样做,我建议您考虑使用netcat类似dd的成像程序clonezilla

答案2

dd为了获得更好的速度,使用任意大的块大小将硬盘克隆到更大硬盘中的映像文件是否安全?

视情况而定。一般来说,不会。

如果您读取的硬盘驱动器是健康的,dd则将生成相同的输出,无论bs使用的块大小( )是多少(除非它非常大,您会memory exhausted立即得到而根本没有输出文件)。 并非所有设备都是如此(请参阅这个问题) 并且你需要iflag=fullblock

如果您读取的硬盘不健康,dd则会在遇到读取错误后停止。您需要conv=noerror处理此问题。此外,您还需要conv=sync iflag=fullblock。这只是一个神话conv=sync,noerror而已(见这个答案此评论)。

如果您读取的硬盘不健康,即使使用 ,您也可能会得到不同的图像conv=sync,noerror iflag=fullblock,具体取决于bs(严格来说:ibs)。想象一下硬盘上有一个错误的物理扇区。该扇区可能会影响一个或多个读取操作,结果将取决于块大小以及块与物理扇区的对齐方式。您可能会在图像中得到一个比错误扇区更大的“零洞”。如果块大小与物理扇区大小匹配,您将得到一个正好是这个大小的“零洞”,这是您可以得到的最佳(最小“洞”)。

另一方面更大bs可以提高吞吐量

还有一个方面。如果你读取的硬盘是健康的(或者至少你认为是健康的),你可能想要准备它,以便镜像作为稀疏文件占用更少的空间(这个答案,稀疏文件方法)。dd将尝试使用创建一个稀疏输出文件conv=sparse。此方法的有效性依赖于取决于bs;严格:开启,因此在这种情况下分别使用大和小obs是合理的。ibsobs

所有这些原因使得它dd通常不是创建磁盘映像的最佳工具,特别是如果您不太了解它的怪癖。(注意:“不是最好的”仍然可以是“好的”)。使用ddrescue扇区大小 ( -b) 与源设备的物理扇区大小相匹配的 GNU 以及相对较大的簇大小 ( -c) 以获得性能。使用-S它可以利用稀疏性。

在两种情况下我dd更喜欢ddrescue

  • (琐碎)何时dd可用,何时ddrescue不可用。
  • 当我需要溪流(管道)输出。ddrescue需要一个可查找的输出文件;dd我可以通过管道将输出传输到nc, pv, gzip(这个答案再次,压缩文件方法)或其他什么。

将该图像还原到原始驱动器时怎么样?

前提是您可以无错误地读取映像,并且原始驱动器是健康的。如果是这样,那dd就没问题,大块大小就可以了。

如果读取图像时出现读取错误(表明保存图像的设备或/和文件系统已损坏),您应该继续使用不健康的源设备(如上所述),并承认原始驱动器上的结果数据可能(部分)已损坏。

如果在写入原始驱动器时出现写入错误,则恢复映像就没有什么意义;您根本不应该使用该驱动器。

相关内容