如何解决与rsync相对大的文件损坏的数据包错误?

尝试使用rsync命令更新服务器上的文件:

 rsync -ravq -e "ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -ServerAliveCountMax=2" --delete ./local_dir user@$SERVER:/dest_dir 

corrupt packet错误不断抛出,具体为:

 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中的Cygwinterminal的rsync与Centos 6.3服务器。

我不确定其他信息可能有用或如何获得它。 我会根据任何build议更新问题或添加评论。

我应该如何解决这个问题?

非常感谢!

    我不确定什么可能会导致丢失连接的corrupt packet问题,但是在传输大文件时可能会发现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 (– --progress )选项,并在第一个示例中添加了--progress选项,在第二个示例中添加了--partial-dir=.rsync-partial

    --partial--partial-dir=.rsync-partial之间的区别是,后者创build一个目录,保持部分文件与完全传输的文件分开,如果这对接收(服务器)端的你很重要。

    rsync手册页将会更详细地解释这一点,不过我也会从manpage中指出一个重要的安全提示

    重要提示:–partial-dir不应该被其他用户写入,否则存在安全风险。 例如AVOID“/ tmp”。

    腐败表明您的计算机中存在错误的NIC或NIC驱动程序; 有一次,在我妻子的Windows机器上:不得不反复尝试安装rsync。 一旦成功,我可以反复调用rsync来传输和修复所需的其他软件,其中最值得一提的是包含更新的NIC驱动程序和校验和工具。

    如果ulimit值是0或一个小数字,它应该是给出这个错误。 尝试增加ulimit值(such as 9999999999)然后重试。 你可以写一个小shell脚本(a.sh)并使用如下所示:

     #!/bin/sh ulimit 99999999999 rsync -avrz --perms --delete --chmod=u+rwx,g+rx,o+x /dir1/ /dir2/