平行文件複製

平行文件複製

我有一個需要在 Linux 系統上複製的檔案清單 - 每個檔案的大小範圍為 10 到 100GB。

我只想複製到本機檔案系統。有沒有辦法並行執行此操作 - 每個進程負責複製檔案 - 在一個簡單的方式?

我可以輕鬆地編寫一個多執行緒程式來執行此操作,但我有興趣了解是否有一個低階 Linux 方法可以執行此操作。

答案1

如果您的系統沒有受到它的影響(例如,檔案可能在快取中),那麼 GNU Parallelhttp://www.gnu.org/software/parallel/可能適合你:

find . -type f -print0 | parallel -0 -j10 cp {} destdir

這將運行 10 個並發cp

優點:它很容易閱讀。

缺點:GNU Parallel 在大多數系統上都不是標準的 - 因此您可能必須安裝它。

如果你想保留目錄結構:

find . -type f -print0 |
  parallel -0 -j10 mkdir -p destdir/{//}';' cp {} destdir/{//}

觀看介紹影片以了解更多資訊:http://www.youtube.com/watch?v=OpaiGYxkSuQ

也可以看看https://oletange.wordpress.com/2015/07/04/parallel-disk-io-is-it-faster/有關並行磁碟 I/O 的討論。

答案2

沒有低階機制可以做到這一點,原因很簡單:這樣做會破壞系統效能。對於碟片驅動器,每次寫入都會爭奪磁頭的位置,從而導致大量 I/O 等待。對於 SSD,這最終會使一個或多個系統匯流排飽和,從而導致其他問題。

答案3

如前所述,這是一個糟糕的主意。但我相信每個人都應該能夠實施自己的可怕計劃,所以......

for FILE in *;do cp $FILE <destination> &;done

星號可以替換為文件的正規表示式,或者$(cat <listfile>)如果您將它們全部保存在文字文件中。 & 符號在背景啟動命令,因此循環將繼續,產生更多副本。

如前所述,這將徹底消滅您的 IO。所以...我真的不建議這樣做。

——克里斯多福‧卡雷爾

答案4

這是一個分散式/並行和分散的檔案複製工具,它將對檔案進行分割並並行複製所有區塊。只有當您擁有支援多個串流或具有多個磁碟頭的某種設定的 SSD 時,它可能才會對您有所幫助。

https://github.com/hpc/dcp

相關內容