Linux

Linux:rsync 將 SMB 鏡像掛載到本地磁碟非常慢

  • September 15, 2020

我嘗試將通過 SMB 掛載的共享鏡像到本地目錄。該共享託管在 Windows 2016 伺服器上,我無權訪問,也無法安裝任何工具。因此,我所擁有的只是一個 SMB 共享。

該共享包含大約 350GB 的數據,主要是小文件 (4MB)。每天晚上,rsync作業都會執行並將所有更新傳輸到本地目錄。這需要很長時間才能完成。發送增量文件列表大約需要 10 到 15 分鐘(我需要驗證這一點),但是 rsync 需要在 12 小時內傳輸幾 MB(每晚大約更改 20 個文件)。

也許我對如何rsync工作有誤解。但我的印像是,在收到增量文件列表後rsync,能夠找出需要傳輸的文件。所以剩下的就是選擇更改的文件並傳輸它們,這應該不超過幾分鐘到最多一小時。

actimeo=600通過安裝帶有選項的 SMB 共享,我能夠將傳輸時間從 12 小時縮短到 9 小時。但它仍然需要比預期更長的時間。

所以這是安裝(在 Synology NAS 上):

mount -t cifs //remote.server/share /volume1/sysadmin/share -o vers=3.0,username=john,password='***',domain=EXAMPLE,ro,soft,uid=1026,forceuid,gid=100,forcegid,addr=remote.server,file_mode=0777,dir_mode=0777,iocharset=utf8,nocase,cache=none,noserverino,actimeo=600

這是 rsync 工作:

rsyncOptions=(
   --delete
   --human-readable
   --itemize-changes
   "--modify-window=1"
   --partial
   --protect-args
   --recursive
   --stats
   --times
   --verbose
)
rsyncExclusions=(
   --exclude=.DS_Store
   --exclude=.Trash
   --exclude=.TemporaryItems
   --exclude=._*
   --exclude=.AppleDB
   --exclude=.AppleDouble
   --exclude=__MACOSX
   --exclude=.AppleDesktop
   --exclude=.~lock*
   --exclude=.fseventsd
   --exclude=.lock
   --exclude=.afpDeleted*
   --exclude=.smbdelete*
   --exclude=.TEMP_*
   --exclude=@eaDir
   --exclude=Thumbs.db
   --exclude='* '
   --exclude='*.'
)
/usr/bin/rsync "${rsyncOptions[@]}" "${rsyncExclusions[@]}" "/volume1/sysadmin/share/" "/volume1/share/

這是上次同步的統計資訊:

Number of files: 571170
Number of files transferred: 279
Total file size: 351.95G bytes
Total transferred file size: 387.34M bytes
Literal data: 387.34M bytes
Matched data: 0 bytes
File list size: 25.95M
File list generation time: 0.526 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 413.57M
Total bytes received: 223.89K

sent 413.57M bytes  received 223.89K bytes  13.11K bytes/sec
total size is 351.95G  speedup is 850.56

我怎樣才能加快傳輸速度?也許其他工具lftp更適合完成此任務……任何指針表示讚賞。

更新 1

  • lftpmirror --dry-run --no-perms --exclude-glob="*." --exclude-glob="* " --parallel --only-newer選項也需要大約 9 到 12 小時才能完成。所以這是沒有辦法的。
  • 在 GUI 中或通過cp4.7MB 文件的簡單複制大約需要 2-3 秒才能完成。
  • 我從rsync選項--dry-run開始。我一有結果就會更新這篇文章。

更新 2

  • rsyncwith--dry-run現在執行了 6 個多小時。我想假設它也需要 9 個小時以上是節省的。日誌中唯一且唯一的條目是sending incremental file list. 今天是這裡的公共假期(因此沒有更改文件/目錄)所以我不確定完成這部分過程需要多長時間。

更新 3

啟用更多日誌記錄後,結果如下所示:

2019/10/04 04:00:03 [20771] building file list
2019/10/04 05:42:16 [20771] .d..t...... dir1/
2019/10/04 05:42:17 [20771] >f+++++++++ dir1/file1
2019/10/04 05:42:44 [20771] .d..t...... dir1/subdir1/
2019/10/04 05:42:44 [20771] >f.st...... dir1/subdir1/file1
2019/10/04 05:43:19 [20771] >f..t...... dir1/subdir1/file2
2019/10/04 05:43:20 [20771] >f.st...... dir1/subdir1/file3
2019/10/04 05:43:20 [20771] .d..t...... dir1/subdir2/
2019/10/04 05:43:21 [20771] >f+++++++++ dir1/subdir2/file1
2019/10/04 10:16:38 [20771] .d..t...... dir2/subdir1/

...

請注意 dir1 和 dir2 之間的巨大時間間隔,要麼rsync需要大量時間來遍歷目錄樹,要麼我正在發生其他事情。

我認為解決我的問題的唯一方法是在雙方都執行一個守護程序。由於我不想在刪除的 Windows Server 上安裝 Cygwin 或 WSL(不在我的控制之下),所以我最終使用了 Unison,到目前為止它工作得很好。現在同步需要 10-15 分鐘。所以使用 Unison 和 SSH 我從 GitHub 上的 PowerShell 儲存庫下載了 SSH 二進製文件。所以我有兩個二進製文件/攜帶式應用程序,我可以放在伺服器上並讓事情正常工作。請確保在使用 Unison 時使用相同版本的 Unison 和 OCAML。

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