为了提高速度,使用 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
是合理的。ibs
obs
所有这些原因使得它dd
通常不是创建磁盘映像的最佳工具,特别是如果您不太了解它的怪癖。(注意:“不是最好的”仍然可以是“好的”)。使用ddrescue
扇区大小 ( -b
) 与源设备的物理扇区大小相匹配的 GNU 以及相对较大的簇大小 ( -c
) 以获得性能。使用-S
它可以利用稀疏性。
在两种情况下我dd
更喜欢ddrescue
:
- (琐碎)何时
dd
可用,何时ddrescue
不可用。 - 当我需要溪流(管道)输出。
ddrescue
需要一个可查找的输出文件;dd
我可以通过管道将输出传输到nc
,pv
,gzip
(这个答案再次,压缩文件方法)或其他什么。
将该图像还原到原始驱动器时怎么样?
前提是您可以无错误地读取映像,并且原始驱动器是健康的。如果是这样,那dd
就没问题,大块大小就可以了。
如果读取图像时出现读取错误(表明保存图像的设备或/和文件系统已损坏),您应该继续使用不健康的源设备(如上所述),并承认原始驱动器上的结果数据可能(部分)已损坏。
如果在写入原始驱动器时出现写入错误,则恢复映像就没有什么意义;您根本不应该使用该驱动器。