dd 比应有的速度快

dd 比应有的速度快

dd if=/dev/zero of=tmp.dat bs=1M count=1024 status=progress当我在 500G HDD 上运行命令时,我得到

833617920 bytes (834 MB, 795 MiB) copied, 1 s, 829 MB/s
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.41974 s, 756 MB/s

这似乎是假的(756MB/s!),据我所知,SATA 上的机械驱动器最高可达 100MB/s 左右。

为了证实这一点,我然后跑了sudo hdparm -t /dev/sda并得到了

/dev/sda:
 Timing buffered disk reads: 350 MB in  3.01 seconds = 116.26 MB/sec

这看起来更合理(116MB/s)。

然而,更令人困惑的是,我运行了另一个测试:(rm tmp.dat;dd if=/dev/zero of=tmp.dat bs=1M count=512 status=progress同样的事情,复制一半的数据),它给出了更荒谬的结果:

512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 0.576224 s, 932 MB/s

机械驱动器上的读/写速度几乎每秒千兆字节!在 SATA+HDD 上复制一个如此大小的文件怎么可能只需要不到一秒(0.576 秒)呢?为什么 dd 报告和 hdparm 报告之间存在差异?为什么它会根据输出文件大小而变化?

显然我在这里遗漏了一些东西。 *nix大师,请教我

答案1

您所观察到的称为“肮脏的 页数“并且是大多数现代操作系统的一项功能。写入文件后,内核不会立即将数据物理写入磁盘 - 这允许更智能地将数据写入磁盘,以避免碎片。

要禁用此行为,请dd运行conv=fsync.

相关内容