如何使遠端伺服器中約 2M 文件的 rsync 對定期備份有效
我們在遠端伺服器上有大量文件,我想設置定期備份到本地系統以獲得額外的冗餘。一些細節:
- 遠端系統不在我的控制範圍內。我只有 SSH/rsync 或 FTP 訪問權限
- 遠端系統執行 rsync 2.6.6 無法升級
- 遠端系統最多允許 25 個並發連接,其中 5 個保留用於生產需求(因此,20 個可用)
- 遠端系統包含 2M 文件 - 其中大部分為 100-200K 大小
- 文件儲存在層次結構中
如同:
0123456789/ 0123456 abc/ 1.fff 2.fff 3.fff xyz/ 9.fff 8.fff 7.fff 9877656578/ 5674563 abc/ 1.fff 2.fff 3.fff xyz/ 9.fff 8.fff 7.fff
成千上萬個根文件夾僅包含一些內部文件夾/文件結構-但所有根文件夾都只是數字(0-9)。
我第一次用順子跑了這個
rsync -aP
,它花了3196m20.040s
。這部分是由於遠端伺服器在rsync
2.6.6 上,我無法使用 3.xx 中的增量文件功能編譯文件列表需要將近 12 個小時 - 每 10 秒執行大約 500 個文件。我預計後續執行不會花費這麼長時間,因為初始執行必須重新下載所有內容 - 但是即使 12 小時只是為了文件列表也太長了。文件夾命名分解如下:
$ ls | grep "^[^67]" | wc -l 295 $ ls | grep "^6" | wc -l 14167 $ ls | grep "^7" | wc -l 14414
我已經通過使用我同時執行其中的 8個和我使用的 6 個和 7 個
rsync -aWP --delete-during
來分解它來測試執行它-因為層次結構中的文件夾首當其衝以or開頭(每個or大約 1400 個)。--include="/0*/" --exclude="/*/"``0* 1* 2* 3* 4* 5* 8* 9*``60*``69*``70*-79*``6``7``6?*``7?*
所有不是 6 或 7 的東西總共需要大約 5 分鐘。6/7 個目錄(按 1/10 分解)每個需要 15 分鐘。
這是非常高效的,除了執行這個作業我必須同時執行 28
rsync
個並且這會使可用連接數飽和——更不用說可能使網路飽和了。有沒有人推薦
rsync
我可以添加的另一種變體或一些附加選項,以防止它同時使用這麼多連接,而不必在rsync
一端按順序在 2.6.6 的範圍內進行此操作?**編輯#1:**我們確實為往返於該外部提供商的頻寬付費,因此理想情況下,我們只會通過線路發送需要發送的內容,僅此而已。
在 40 小時的初始同步時間下載和同步所有數據之後,隨後對相同數據的掃描和同步(只是為了獲取更新)只用了 6.5 小時。用於執行的命令
rsync
是:rsync -a --quiet USER@REMOTE_SERVER:ROOT/FOLDER/PATH/ /LOCAL/DESTINATION
我認為我最初的大量下載時間是雙重的:
- 初始數據集是 270GB 和 ~2M 文件,需要通過 Internet 掃描和下載很多文件(在我們的例子中,我們有一個 100mbit 同步連接,這是連接到一個大型 CDN 提供商)
- 我在初始同步時啟用了 -P 選項和 -v 選項,這導致大量本地控制台聊天顯示每個正在同步的文件和進度資訊。
所以,這裡的答案是:只使用
rsync
沒有那麼多冗長選項(--quiet
理想情況下),它非常有效——即使是對於巨大的數據集。