尝试使用rsync命令更新服务器上的文件:
rsync -ravq -e "ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -ServerAliveCountMax=2" --delete ./local_dir user@$SERVER:/dest_dir
损坏的数据包错误不断被抛出,具体来说:
rsync: writefd_unbuffered Failed to write 4092 bytes to socket [sender]: Broken pipe (32) rsync: connection unexpectedly closed (11337 bytes received so far) [sender] rsync error: unexplained error (code 255) at /home/lapo/package/rsync-3.0.9-1/src/rsync-3.0.9/io.c(605) [sender=3.0.9]
这可能与ssh超时有关,因为它似乎发生在大(r)文件中.此外,我一直在使用WinSCP获得超时.这只发生在我身上;我使用过这个服务器的几个人没有同样的问题.
在Windows 7中使用来自Cygwin终端的rsync,对着Centos 6.3服务器.
我不确定其他信息可能有用或如何获得它.我会根据任何建议更新问题或添加评论.
我该怎么解决这个问题?
非常感谢!
解决方法
我不确定什么可能导致丢失连接的损坏数据包问题,但您可能会发现rsync的–partial或–partial-dir选项在传输大文件时很有用,这样当您重新启动传输时它将继续传输离开而不必重新开始转移整个文件:
–partial-DIR = .rsync偏
所以您可以像这样修改原始命令:
rsync -rav --progress --partial -e "ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -ServerAliveCountMax=2" --delete ./local_dir user@$SERVER:/dest_dir
要么
rsync -rav --progress --partial-dir=.rsync-partial -e "ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -ServerAliveCountMax=2" --delete ./local_dir user@$SERVER:/dest_dir
请注意,对于此示例,我删除了-q( – quiet)选项并在第一个示例中添加了–progress选项,在第二个示例中添加了–partial-dir = .rsync-partial.
–partial和–partial-dir = .rsync-partial之间的区别在于,后者会创建一个目录,使得部分文件与完全传输的文件分开(如果这对您在接收(服务器端)方面很重要).
rsync manpage将进一步详细解释这一点,但我还要从手册页中指出一个重要的安全说明:
IMPORTANT: the –partial-dir should not be writable by other users or it is a security risk. E.g. AVOID “/tmp”.