如何确定 dd 命令的最佳字节大小

如何确定 dd 命令的最佳字节大小

我知道dd if=/dev/hda of=/dev/hdb做某事深度硬盘复制。我听说人们可以通过使用该选项增加一次读取和写入的字节数(默认值512:)来加快该过程bs

我的问题是:

  • 什么决定了从硬盘复制的理想字节大小?

  • 为什么这决定了理想的字节大小?

答案1

作为克里斯写于这个答案最佳块大小取决于硬件。根据我的经验,它总是大于默认的 512 字节。如果您使用原始设备,则覆盖文件系统几何结构将不会产生影响。我使用了下面的脚本来帮助“优化”dd 的块大小。

#!/bin/bash
#
#create a file to work with
#
echo "creating a file to work with"
dd if=/dev/zero of=/var/tmp/infile count=1175000

for bs in  1k 2k 4k 8k 16k 32k 64k 128k 256k 512k 1M 2M 4M 8M 
 
do
        echo "Testing block size  = $bs"
        dd if=/var/tmp/infile of=/var/tmp/outfile bs=$bs
        echo ""
done
rm /var/tmp/infile /var/tmp/outfile

答案2

不幸的是,最佳大小取决于您的系统总线、硬盘控制器、特定驱动器本身以及每个驱动器的驱动程序。找到最佳大小的唯一方法是不断尝试不同的大小。需要提醒的是,有些设备仅支持一种块大小,尽管这种情况很少见,而且通常驱动程序会弥补差异。

我发现,对于连接到 Adaptec SAS RAID 控制器、4x PCIe、64 位 FreeBSD 8.0-STABLE 的 WDC(8mb 缓存)SATA 驱动器,2^15 或 2^16 的块大小效果最佳。但对于我的便宜的旧拇指驱动器,2^10 的大小似乎是最快的。

“完美尺寸”几乎总是 2 的幂。

答案3

我可以保证在浪费时间之前先测量正在使用的设备进行测试的结果。我愚蠢地没有费心,在测量之后,然后调整我的块大小,将 590Gb 传输的 DD 持续时间缩短了一半。使用不同的盒式驱动器/驱动器组合,相同的 BS 值只能将时间减少 20%。

相关内容