Backup

如何使遠端伺服器中約 2M 文件的 rsync 對定期備份有效

  • January 24, 2019

我們在遠端伺服器上有大量文件,我想設置定期備份到本地系統以獲得額外的冗餘。一些細節:

  • 遠端系統不在我的控制範圍內。我只有 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。這部分是由於遠端伺服器在rsync2.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 分鐘。

這是非常高效的,除了執行這個作業我必須同時執行 28rsync個並且這會使可用連接數飽和——更不用說可能使網路飽和了。

有沒有人推薦rsync我可以添加的另一種變體或一些附加選項,以防止它同時使用這麼多連接,而不必在rsync一端按順序在 2.6.6 的範圍內進行此操作?

**編輯#1:**我們確實為往返於該外部提供商的頻寬付費,因此理想情況下,我們只會通過線路發送需要發送的內容,僅此而已。

在 40 小時的初始同步時間下載和同步所有數據之後,隨後對相同數據的掃描和同步(只是為了獲取更新)只用了 6.5 小時。用於執行的命令rsync是:

rsync -a --quiet USER@REMOTE_SERVER:ROOT/FOLDER/PATH/ /LOCAL/DESTINATION

我認為我最初的大量下載時間是雙重的:

  1. 初始數據集是 270GB 和 ~2M 文件,需要通過 Internet 掃描和下載很多文件(在我們的例子中,我們有一個 100mbit 同步連接,這是連接到一個大型 CDN 提供商)
  2. 我在初始同步時啟用了 -P 選項和 -v 選項,這導致大量本地控制台聊天顯示每個正在同步的文件和進度資訊。

所以,這裡的答案是:只使用rsync沒有那麼多冗長選項(--quiet理想情況下),它非常有效——即使是對於巨大的數據集。

引用自:https://serverfault.com/questions/950260