我尝试将通过 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。