我知道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%。