我有一个 cron 作业,用于使用 rsync 同步 Windows Samba 共享上的数据(我在启动时使用 /etc/fstab 挂载)。我的问题是传输似乎花费的时间与初始传输几乎一样长。我有大量文件,所以我想它仍然必须检查每个文件是否有变化,但第二次应该会更快一点吗?我刚刚使用了这样的命令:
rsync -aver ssh /mnt/winserver/d/www /path/to/disk/rsync-backup/
其中 /mnt/winserver 是已安装的 cifs 共享,而 /path/to/disk 是我的本地磁盘空间。
答案1
要记住的是,当 rsync 服务器在远程系统上运行时并且客户端在本地系统上时,增量算法最有用。
当由于 stat() 输出不同(大小、修改日期)而决定需要传输大型文件时,某些 rsync 进程将需要读取源文件和目标文件。如果您已挂载远程文件,则在本地系统上运行的进程将通过网络读取整个文件。如果您连接到远程系统上的 rsync 守护程序,则远程 rsync 进程将读取文件,并将使用算法来决定哪些块需要更新,并且只有差异才会通过网络。
至于为什么速度慢,可能有很多原因。如果你选择的文件基本上是大量小文件,那么传输所需的时间可能无关紧要,你正在等待 stat() 完成。
如果您通过广域网连接运行 SMB,则可能会遇到标准 SMB 因高延迟链路问题而导致的问题。
您可能需要考虑在 Windows 机器上设置一个可以运行 rsync 的 SSH 服务器。它不再免费,但我通常使用 CopSSH/cwRsync。