Hard-Disk
dd 比它應該的要快
當我在 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
.