尝试使用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/