为什么dd需要太长时间?

Modified on: Sat, 30 Jun 2018 04:36:00 +0800

我需要将一个磁盘复制到另一个磁盘。我尝试使用下面的命令,复制1 TB的磁盘需要将近一天的时间。

dd if=/dev/sda of=/dev/sdb 

我已经在Unix系统上使用以下命令尝试了相同的操作,并在几个小时内完成

dd if=/dev/sda of=/dev/rdsk

我可以用什么方法从磁盘复制到磁盘更快?

作者:,KKD

最佳答案

dd有很多(奇怪的)选项,请参阅DD(1)

您应该明确说明缓冲区大小,因此请尝试

dd if=/dev/sda of=/dev/sdb bs=16M

IIRC,默认缓冲区大小仅为512字节。上面的命令将其设置为16兆字节。您可以尝试更小的东西(例如bs=1M),但是您应该使用超过默认值的东西(特别是在最近具有4K字节扇区的磁盘硬件上,即高级格式)。我天真地推荐一些至少一兆字节的两个电源。

使用默认的512字节缓冲区大小,我猜(但我可能非常错误)硬件要求内核为每个512字节块传输4K。

关于rdsksd( 4)手册页说:

  

此时,仅提供块设备。原始设备没有
         尚未实施。

增加dd的缓冲区大小将为读写操作提供更高的性能。现在所有磁盘都有硬件读/写缓冲区。但是如果你将增加dd的缓冲区大小而不是硬件缓冲区,它的性能将会降低,因为当第二个磁盘将从其自己的硬件缓冲区写入时,dd将从第一个磁盘读取到缓冲区。您需要为每个不同设备的不同值设置dd命令的bs选项。


相关问答

添加新评论