我尝试将通过 SMB 安装的共享镜像到本地目录。该共享托管在 Windows 2016 服务器上,我无法访问该服务器,也无法安装任何工具。因此,我只有一个 SMB 共享。
该共享包含大约 350GB 的数据,大部分是小文件(4MB)。每天晚上rsync
都会运行一个作业并将所有更新传输到本地目录。这需要很长时间才能完成。发送增量文件列表大约需要 10 到 15 分钟(我需要验证这一点),但随后 rsync 需要传输几 MB(每晚大约更改 20 个文件),耗时长达 12 小时。
也许我对工作原理有误解rsync
。但我的印象是,收到增量文件列表后,rsync
能够确定需要传输哪些文件。所以剩下的就是选择更改的文件并传输它们,这应该不会超过几分钟,最多一个小时。
通过安装 SMB 共享选项,我能够将传输时间从 12 小时缩短到 9 小时actimeo=600
。但仍然比预期的要长得多。
因此这是安装(在 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
需要大量时间来遍历目录树,要么发生了其他事情。
答案1
我认为解决问题的唯一方法是在两端都运行守护进程。由于我不想在远程 Windows Server(不受我控制)上安装 Cygwin 或 WSL,因此我最终使用了 Unison,到目前为止,它运行良好。同步现在需要 10-15 分钟。因此,将 Unison 与 SSH 一起使用,我从 GitHub 上的 PowerShell 存储库下载了 SSH 二进制文件。因此,我有两个二进制文件/便携式应用程序,我可以直接将它们放在服务器上并使其正常运行。使用 Unison 时,请确保使用相同版本的 Unison 和 OCAML。