在运行 dd
时如何计算最佳 block 大小?我对其进行了一些研究,但没有发现任何暗示如何实现这一点的信息。
我的印象是更大的 block 大小会导致更快的 dd
...这是真的吗?
我即将 dd
两个相同的 500gb Hitachi HDD,在运行 Intel Core i3 和 4GB DDR3 1333mhz RAM 的机器上以 7200rpm 运行,所以我试图找出 block 大小利用。 (我将从闪存驱动器启动 Ubuntu 10.10 x86,并从中运行它。)
最佳答案
最佳 block 大小取决于各种因素,包括操作系统(及其版本)以及所涉及的各种硬件总线和磁盘。一些类 Unix 系统(包括 Linux 和至少一些 BSD 风格)在 struct stat
中定义了 st_blksize
成员,它给出了内核认为的最佳 block 大小:
#include <sys/stat.h>
#include <stdio.h>
int main(void)
{
struct stat stats;
if (!stat("/", &stats))
{
printf("%u\n", stats.st_blksize);
}
}
最好的方法可能是进行实验:复制具有各种 block 大小和时间的千兆字节。 (记得在每次运行前清除内核缓冲区缓存:echo 3 >/proc/sys/vm/drop_caches
)。
但是,根据经验,我发现足够大的 block 大小可以让 dd
做得很好,例如 64 KiB 和 1 MiB 之间的差异很小,与 4 KiB 和 64 KiB 相比。 (虽然,不可否认,我已经有一段时间没有这样做了。我现在默认使用一个兆字节,或者只是让 dd
选择大小。)
关于linux - dd:如何计算最佳 block 大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6161823/