我正在设置 rsync 以在不同网络中的两个独立服务器(A 和 B)之间同步文件,这两个服务器都运行 Solaris 10 操作系统。我正在使用 --daemon。
现在,我可以从服务器 A 获取服务器 B 的模块列表,也可以从 B 下载文件到 A。但是,当尝试将文件从 A 上传到 B 时,该过程会挂起。
分析 rsync 生成的日志文件,我可以看到服务器之间的连接已建立但随后丢失。
日志文件服务器A:
root# rsync -rltgD --progress testfile x.x.x.x::test/
building file list ...
1 file to consider
testfile
rsync: writefd_unbuffered failed to write 4 bytes [sender]: Broken pipe (32)
rsync: read error: Connection timed out (145)
rsync: error: error in rsync protocol data stream (code 12) at io.c(604) [sender=2.6.9]
日志文件服务器B:
[4799] connect from UNKNOWN (x.x.x.x)
[4799] rsync to test/ from UNKNOWN (x.x.x.x)
[4799] receiving file list
[4657] rsync: read error: Connection timed out (145)
[4657] rsync error: error in rsync protocol data stream (code 12) at io.c(604) [receiver=2.6.9]
[4657] rsync error: error in rsync protocol data stream (code 12) at io.c(453) [generator=2.6.9]
目标(服务器 B)中的权限定义为 chmod 777。inetd 配置为允许 rsync 匿名访问。我尝试更改路径和所有权,使两个服务器中的路径和所有权相等,但没有成功。我还将版本匹配为 2.6.9,并使用虚拟机和物理机,但问题仍然存在。我也尝试了不同的操作系统,即 CentOS 和 Windows 7 Professional。使用这些 rsync 客户端,我可以毫无问题地与服务器 B 同步文件(这些机器与服务器 B 位于同一网络中)。我捕获了服务器 B 和 CentOS 6.7 机器之间成功同步的数据包,并将它们与服务器 B 和服务器 A 之间失败的同步进行了比较,我得出了与日志文件相同的结论:TCP 和 rsync 连接已建立,但文件未传输。
任何有关此问题的帮助都将不胜感激。此致。
答案1
如果有人遇到此问题,我使用 MTU 参数解决了它。由于服务器 B 的 ICMP 协议被阻止,因此 MTU 值自动定义为 1500 字节。当在服务器 A 上将此值更改为 1280 字节时,连接开始正常工作。