我正在嘗試傳輸大約 100k 個文件,總計 90GB。現在我正在使用 rsync 守護進程,但它的速度很慢,為 3.4mb/s,我需要多次執行此操作。我想知道我有什麼選擇可以最大程度地透過網路建立 100 兆位元的連接並且非常可靠。
答案1
你有沒有考慮過運動鞋網?對於大數據集,隔夜運輸通常比透過網路傳輸更快、更便宜。
答案2
如何?或 TL;DR
tar
我發現的最快方法是,mbuffer
和的組合ssh
。
例如:
tar zcf - bigfile.m4p | mbuffer -s 1K -m 512 | ssh otherhost "tar zxf -"
使用它,我在 1Gb 鏈路上實現了超過 950 Mb/s 的持續本地網路傳輸。替換每個 tar 命令中的路徑以適合您要傳輸的內容。
為什麼?緩衝區!
到目前為止,透過網路傳輸大檔案的最大瓶頸是磁碟 I/O。答案是mbuffer
或buffer
。它們大致相似,但也mbuffer
有一些優點。預設緩衝區大小為 2MB mbuffer
,預設緩衝區大小為 1MB buffer
。較大的緩衝區更有可能永遠不會為空。選擇目標檔案系統和目標檔案系統上本機區塊大小的最小公倍數的區塊大小將提供最佳效能。
緩衝是讓全部區別!有的話就用吧!如果你沒有,那就去獲取吧!使用(m}?buffer
任何東西都比單獨使用任何東西更好。它幾乎可以說是解決緩慢網路檔案傳輸的靈丹妙藥。
如果您要傳輸多個文件,請使用tar
將它們「集中」到一個資料流中。如果是單一文件,您可以使用cat
I/O 重定向。tar
vs.的開銷cat
在統計上是微不足道的,所以我總是使用tar
(或zfs -send
在我可以的地方),除非它已經是壓縮包。這些都不能保證為您提供元資料(尤其是cat
不會)。如果您需要元數據,我會將其作為練習留給您。
最後,用於ssh
傳輸機制既安全又開銷很小。同樣,ssh
與 的開銷nc
在統計上是微不足道的。
答案3
你提到“rsync”,所以我假設你使用的是Linux:
為什麼不創建 tar 或 tar.gz 檔案?一個大檔案的網路傳輸時間比許多小檔案快。如果你願意的話,你甚至可以壓縮它......
未壓縮的 tar:
在來源伺服器上:
tar -cf file.tar /path/to/files/
然後在接收端:
cd /path/to/files/
tar -xf /path/to/file.tar
壓縮後的 tar:
在來源伺服器上:
tar -czf file.tar.gz /path/to/files/
然後在接收端:
cd /path/to/files/
tar -xzf /path/to/file.tar.gz
您只需使用 rsync 來執行 (tar|tar.gz) 檔案的實際傳輸。
答案4
您可以使用 rsync 的各種壓縮選項。
-z, --compress compress file data during the transfer
--compress-level=NUM explicitly set compression level
--skip-compress=LIST skip compressing files with suffix in LIST
二進位檔案的壓縮率非常低,因此您可以使用 --skip-compress 跳過這些文件,例如 iso、已存檔和壓縮的 tarball 等。