Hard-Disk

dd 比它應該的要快

  • February 20, 2022

當我在 500G 硬碟上執行命令dd if=/dev/zero of=tmp.dat bs=1M count=1024 status=progress時,我得到

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

機械驅動器上幾乎每秒 1 GB 的讀/寫速度!!!在 SATA+HDD 上複製這麼大的文件怎麼可能只用不到一秒(0.576 秒)?為什麼 dd 報告的內容和 hdparm 報告的內容之間存在差異?為什麼它會根據輸出文件大小而變化?

顯然我在這裡遺漏了一些東西。*nix大師,請教我

您所觀察到的稱為“ ”,是大多數現代作業系統的一個功能。核心不會在寫入文件後立即將數據物理寫入磁碟 - 這允許更智能地將數據寫入磁碟以避免碎片。

要禁用此行為,請dd使用conv=fsync.

引用自:https://unix.stackexchange.com/questions/691372