
在備份包含原始程式碼的資料夾集合時(後來我意識到我可以排除某些包含庫檔案的資料夾,例如node_modules
),我注意到檔案傳輸速度慢得像爬行(與通常的60 mb/s 相比,只有幾kb/s)備份磁碟機允許的情況)。
我想了解瓶頸在哪裡。是否必須執行一些與純 I/O 交錯的計算,從而減慢整個過程,或者目標磁碟機上的檔案系統索引是否具有某些必須在檔案之間取得和釋放的中央鎖定?
我在目標備份磁碟機上使用 NTFS,它是 HDD。
答案1
問題在於檔案系統目錄(它表示檔案在硬碟上的位置)需要多次存取。
對於每個文件,副本需要執行以下操作:
- 從來源目錄開啟來源文件
- 在目標目錄中建立目標文件
- 複製文件
- 關閉來源檔案並將其目錄條目標記為已讀
- 關閉目標檔案並將其目錄條目標記為已建立。
這會導致來源磁碟和目標磁碟的磁頭在每次檔案複製期間多次從目錄中的檔案元資料切換到檔案本身。
在 SSD 上,這並不重要,但在 HDD 上,這可能會減慢大量小檔案副本的速度。基本上,HDD 主要是移動磁頭,這是比讀取或寫入慢得多的操作。
Windows 也無法有效地使用 RAM 作為快取,因為關閉檔案會導致其刷新到磁碟。