linux - dd:如何计算最佳 block 大小?

标签 linux dd

在运行 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/

相关文章:

linux - 使用 ncftp 从远程 ftp 删除超过 7 天的备份

linux - 在 perl 中开始客户端服务器编程的最佳方法?

linux - 运行 dd 命令时是否可以添加安装计时器

linux - 在 bash/sh 中分别通过管道传输 stderr 和 stdout

linux - dd - 备份 MBR/分区表和第一个分区

linux - 在服务请求时将队列锁定在 block 设备驱动程序中的正确方法

linux - 无法使用 linux sed 在文件的特定行插入文本

c - linux 和 macOS 之间的不同打印行为

linux - 将 dd stdout 从 ec2 流式传输到 s3

python - 为什么 Python 将读取函数拆分为多个系统调用?