為什麼 tar|tar 比 cp 快這麼多?

為什麼 tar|tar 比 cp 快這麼多?

對於遞歸複製目錄,使用tar打包目錄然後將輸出通過管道傳輸到另一個目錄tar進行解包似乎比使用cp -r( 或cp -a) 快得多。

為什麼是這樣?為什麼不能透過cp在引擎蓋下以相同的方式進行操作來加快速度呢?

編輯:當我嘗試複製包含數萬個檔案和資料夾的巨大目錄結構時,我注意到了這種差異,這些檔案和資料夾深度嵌套,但總共只有大約 50MB。不確定這是否相關。

答案1

Cp在所有檔案上循環執行開啟-讀取-關閉-開啟-寫入-關閉。因此,從一個地方讀取資料和向另一個地方寫入資料是完全交錯發生的。Tar|tar在單獨的進程中進行讀取和寫入,此外還tar使用多個線程「一次」讀取(和寫入)多個文件,從而有效地允許磁碟控制器一次獲取、緩衝和儲存許多資料區塊。總而言之,tar允許每個組件高效工作,同時cp將問題分解為不同的、低效的小塊。

答案2

您的編輯朝著好的方向發展:cp不一定比tar | tar.例如取決於文件​​的數量和大小。對於大文件,普通文件cp是最好的,因為這是推送資料的簡單工作。對於許多小文件,物流是不同的,並且tar可能會做得更好。請參閱範例這個答案

相關內容