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


21

我知道做dd if = / dev / hda of / dev / hdb会做深层硬盘复制。我听说人们已经可以通过使用“ bs”选项增加一次读取和写入的字节数(512)来加快处理速度。

我的问题是:

是什么决定从硬盘驱动器复制的理想字节大小?

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


我认为必须将其完全均匀地划分为驱动器或分区的大小:因此,我试图确定目标分区的确切字节大小,获取质数因子,并确定一个合理的大块,该块是倍数的倍数。其中几个主要因素...
PP。

Answers:


18

正如Chris S所说,最佳块大小取决于硬件。以我的经验,它总是大于默认的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

4
在OS X中,“ 1M ... 8M”应小写为“ 1m ... 8m”。
马特·贝克曼

1
您可以在dd前面添加一个“时间”,以获取有关花费在等待IO上的时间和实际工作量上的时间的更多信息……
Olivier Dulac 2013年

1
@lain /dev/zero生成,无需从磁盘读取它;你可以dd if=/dev/zero ibs=1M count=32 obs=$bs of=/var/tmp/outfile@ olivier-dulac好,dd已经打印出速度了;我不认为time(或/usr/bin/time)添加任何有价值的信息。
bufh 2014年

1

不幸的是,完美的大小取决于您的系统总线,硬盘驱动器控制器,特定的驱动器本身以及每个驱动器。找到最佳尺寸的唯一方法是继续尝试不同的尺寸。有道理的警告是,某些设备仅支持一个块大小,尽管这种情况很少见,通常,驱动程序还是会弥补这一点。

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

“完美大小”几乎总是2的幂。


0

我可以保证在浪费任何时间之前,先对正在使用的设备执行测试的结果进行测量,这是值得的。我愚蠢地没有去打扰,并且在测量之后,然后调整了块大小,将590Gb传输的DD持续时间削减了一半。使用不同的球童/驱动器组合,相同的BS值只能将时间减少20%。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.