如何修复 rsync 中(相对)较大文件的损坏数据包错误?

如何修复 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,因为这种情况似乎发生在大文件上。此外,我使用 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

相关内容