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大师,请教我