rsync-无法解释的错误

rsync-无法解释的错误

我正在使用这样的脚本:

rsync -avu --delete --progress user@host:~/backup .

并且每次过了一会儿,都会收到此错误:

rsync: connection unexpectedly closed (10251754 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [receiver=3.1.0]
rsync: connection unexpectedly closed (45482 bytes received so far)  [generator]
rsync error: unexplained error (code 255) at io.c(226) [generator=3.1.0]

# generator = Debian 5, rsync  version 3.0.3  protocol version 30 (Generator[A])
# receiver = Ubuntu 14.04, rsync  version 3.1.0  protocol version 31 (Receiver[A])

我有十多年的经验rsync,我尝试了一切方法,但我不明白为什么会发生这种情况。

两侧:日志中没有错误,tcpdump 中没有异常,没有连接问题,没有防火墙。只是一段时间后传输突然停止。

问题不局限于一台服务器

我认为这可能是 rsync 版本之间不兼容的问题,因此我将生成器切换到完全不同的服务器场上的全新服务器(Debian 8),并在接收器上更新 rsync,但出现此错误:

rsync: connection unexpectedly closed (31931964 bytes received so far) [receiver]
rsync: [generator] write error: Broken pipe (32)
rsync error: unexplained error (code 255) at io.c(820) [generator=3.1.2]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [receiver=3.1.2]

# generator = Debian 8, rsync  version 3.1.1  protocol version 31 (Generator[B])
# receiver = Ubuntu 14.04, rsync  version 3.1.2  protocol version 31 (Receiver[B])

然后我尝试通过代理同步接收器[A]和生成器[B],并且成功了

Receiver[A](Italy) <=> HTTP Proxy(Paris) <=>  Generator[B](Strasbourg)

所以现在我有

Receiver[A] <=> Generator[A] // ERROR
Receiver[A] <=> Generator[B] // ERROR   
Receiver[B] <=> Generator[B] // ERROR

Receiver[A] <=> HTTP Proxy <=> Generator[A] // OK
Receiver[A] <=> HTTP Proxy <=> Generator[B] // OK  

我也尝试过不使用 HTTP 代理

Receiver[A] <=> Generator[C] // OK
Receiver[A] <=> Generator[D] // OK  
Receiver[A] <=> Generator[E] // ERROR

其中发电机[C][D][E]是位于巴黎的服务器(与我的同一服务器场HTTP Proxyrsync 3.0.9, prot. v. 30

所以底线是:我在多个地点有多台服务器。Receiver[A]我没有防火墙,几天前一切正常。现在rsync回来了unexplained error,我不知道为什么。

我认为这是某种物理网络错误(不是在我的计算机上),但我不知道是否可以找到、隔离和重现这个错误。

感谢您的帮助!

答案1

看起来您很难确定问题所在,但重现问题没有问题。在这种情况下,如果您能排除 SSH 连接本身的故障以及通过该连接获取的数据,可能会有所帮助。

您可以像下面这样运行rsync命令,它将生成一些数据转储:

rsync -e 'bash -x -c "ssh -vvvv $0 $@ 2>/tmp/rsync-ssh.stderr | tee /tmp/rsync.stdout"' -avu --delete --progress user@host:~/backup .

查看这些文件的末尾可能会有一些有用的信息。例如,如果 SSH 连接中断,则应该在 中显示一些信息/tmp/rsync-ssh.stderr。如果问题确实出在另一端,则 中的实际 rsync 协议转储/tmp/rsync.stdout可能有一些字符串化的提示 ( strings /tmp/rsync.stdout)。

如果我不得不猜测的话,这要么是一个糟糕的防火墙,要么是一个损坏数据包的物理问题,导致 SSH 连接中断。

答案2

写入磁盘缓存的速度可能rsync比服务器上的磁盘能够跟上的速度更快,例如https://unix.stackexchange.com/a/331189/163108更详细的解释,以及https://unix.stackexchange.com/a/523896/163108对于类似的问题,但是在使用 / 安装的驱动器时情况rsync有所samba不同cifs

一种可能的解决方案是rsync使用该--bwlimit=选项进行节流。根据服务器的网络/磁盘性能,我建议尝试 2000-10000 之间的值(以 kbit/s 为单位)。

相关内容