Linux:rsync 將 SMB 鏡像掛載到本地磁碟非常慢
我嘗試將通過 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
lftp
帶mirror --dry-run --no-perms --exclude-glob="*." --exclude-glob="* " --parallel --only-newer
選項也需要大約 9 到 12 小時才能完成。所以這是沒有辦法的。- 在 GUI 中或通過
cp
4.7MB 文件的簡單複制大約需要 2-3 秒才能完成。- 我從
rsync
選項--dry-run
開始。我一有結果就會更新這篇文章。更新 2
rsync
with--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。