尝试使用以下命令更新服务器上的文件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
,因为这种情况似乎发生在大文件上。此外,我使用 WinSCP 时总是遇到超时。这种情况只发生在我身上;与我一起工作的几个使用此服务器的人没有遇到同样的问题。
从 Windows 7 中的 Cygwin 终端使用rsync
,针对 Centos 6.3 服务器。
我不确定其他哪些信息可能有用或如何获取这些信息。我会根据任何建议更新问题或添加评论。
我该如何解决这个问题?
非常感谢!
答案1
我不确定是什么原因导致了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
(--quiet
)选项,并--progress
在第一个示例和--partial-dir=.rsync-partial
第二个示例中添加了该选项。
--partial
和之间的区别--partial-dir=.rsync-partial
在于,如果这对接收(服务器)端的您很重要,后者会创建一个目录,将部分文件与完全传输的文件分开。
这rsync 手册页我将进一步详细解释这一点,但我也会指出一个重要的安全说明来自手册页:
重要提示:--partial-dir 不应被其他用户写入,否则存在安全风险。例如,避免使用“/tmp”。
答案2
损坏表明您的计算机中的 NIC 或 NIC 驱动程序有问题;我妻子的 Windows 机器上就出现过这种情况:不得不反复尝试安装 rsync。成功后,我可以反复调用 rsync 来传输和修复所需的其他软件,其中最值得注意的是包括更新的 NIC 驱动程序和校验和工具。
答案3
我刚刚遇到了同样的问题。我遇到的根本问题是,我要传输到的机器磁盘空间不足。
答案4
循环直到最终传输
while ! sshpass -p 'xxxx' rsync --partial --append-verify --progress -a -e 'ssh -p 22' /source/ [email protected]:/dest/; do sleep 5;done