簡體   English   中英

加速從一台機器到另一台機器的文件傳輸

[英]speed up file transfers from one machine to other machine

我必須將大約 25 個文件從一台機器復制到另一台機器。 每個文件大小約為 15 GB。 我有 1GB 的鏈接,這兩台機器都是非常強大的盒子。 他們有大約 40 個 CPU。 現在復制所有這些文件,對我來說需要 50 分鍾。

下面是我在我應該復制文件的盒子上運行的腳本。 它在/data01/test_primary文件夾中復制 15 個文件,在/data02/test_secondary復制其他 10 個文件。 邏輯很簡單,我弄清楚要從哪台本地機器復制數據,如果本地機器宕機了,我就去遠程機器復制數據。

export PRIMARY=/data01/test_primary
export SECONDARY=/data02/test_secondary
export dir3=/bat/data/snapshot/20180227
PRIMARY_FILES=(685 959 682 679 688 651 909 906 657 881 884 878 853 707 847)
SECONDARY_FILES=(950 883 887 890 1001 994 997 1058 981 833)

export LOCATION_1="machineA"
export LOCATION_2="machineB"
export LOCATION_3="machineC"

do_Copy() {
  el=$1
  PRIMSEC=$2
  scp golden@"$LOCATION_1":"$dir3"/proc_"$el"_5.data "$PRIMSEC"/. || scp golden@"$LOCATION_2":"$dir3"/proc_"$el"_5.data "$PRIMSEC"/. || scp golden@"$LOCATION_3":"$dir3"/proc_"$el"_5.data "$PRIMSEC"/. || exit 1
}
export -f do_Copy
parallel -j 5 do_Copy {} $PRIMARY ::: ${PRIMARY_FILES[@]} &
parallel -j 5 do_Copy {} $SECONDARY ::: ${SECONDARY_FILES[@]} &
wait

echo "All copied."

我相信我的腳本的主要問題是我可能會為每個文件打開一個單獨的 scp 連接,這會增加很多不必要的開銷。 有什么我可以在這里優化的嗎? 所以我想我可以在這里做一些改進,以便它可以快速復制。 到目前為止,我正在將 scp 與 gnu-parallel 結合起來,以便我可以實現並行性。

我有哪些選項可以加快速度? 我准備嘗試不同的東西,看看它是否對我有幫助。

啟用scp (-C 標志)壓縮可能會加快速度(取決於數據)。 請記住,您有很多 CPU 不應該花很長時間來壓縮。

或者,如果可能,另一種選擇是使用rsync (-z 啟用壓縮)而不是 scp。 rsync 添加了一些優化以使操作更快,並且還具有特殊的增量傳輸算法(在更新文件的情況下)

我必須將大約 25 個文件從一台機器復制到另一台機器。

當您只復制差異時, rsync很好。 根據您的描述,聽起來好像這些文件是新文件,而不僅僅是現有文件的更新。

新文件是否與現有文件相似? 在這種情況下,你可以這樣做:

receiver$ cp existing new
receiver$ rsync sender:new new

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM