我正在从 Yosemite 客户端同步到共享网络主机。
我已经设置了授权密钥,可以很好地进行 ssh,并且 scp 文件也没有问题。
当我使用 -n (空运行)选项进行 rsync 时,它列出了更改的文件,没有错误。
但是当我使用不带 -n 的相同命令时,我得到:
building file list ... done
rsync: connection unexpectedly closed (8 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at /SourceCache/rsync/rsync-45/rsync/io.c(453) [sender=2.6.9]
不知道为什么——我在网上搜索了一个小时,没有任何线索,也没有任何其他错误消息。
有什么想法吗?
答案1
服务器可能正在返回一条@ERROR
消息,但客户端可能会将其错误报告为过早的 EOF。
第一步是找出潜在的错误是什么。我建议您使用更简单的标志运行 rsync 以查看它是否有效。 rsync 可能无法加载,libz
但直到需要压缩某些内容时它才会注意到。
第二步是让 Yosemite 端客户端告诉您有关它收到的 8 个字节的信息。如果添加足够的-v
标志还不能解决问题,我建议构建一个更新的 rsync(例如使用 Homebrew 和homebrew/dups
keg)。它可能会告诉你一些有用的信息,而 OSX 中相对较旧的 rsync 却没有。
如果您不介意麻烦地设置它,您可以在 Yosemite 计算机上设置一个 rsync 守护进程,用于ssh -R
启用返回到它的端口转发,并在 Web 主机 shell 上手动运行 rsync,以便它连接到您计算机上的 rsync 守护进程。那么它的错误信息就会一目了然。
答案2
这个问题已经被问过一段时间了,但它可能会对某人有所帮助。
我在同步到服务器时遇到了相同的错误消息。就我而言,服务器端缺少一个我想要同步的文件夹。创建文件夹解决了问题。
答案3
我发现这种情况主要发生在复制大树时。 Mac版本连接到服务器,然后构建文件列表。如果花费的时间太长,另一端的服务器会关闭连接,因为它处于非活动状态的时间太长。
新版本的 rsync 增量地构建文件列表,因此几乎立即开始复制,并且连接永远不会空闲。这两个优点是:
- 等待 rsync 数百万个文件的时间后不会断开连接。
- 每次运行该命令都会取得进展,即使网络连接不可靠并且不时断开连接也是如此。
通过安装更新版本的 rsync 在 Mac OS X 上修复此问题,例如使用brew brew install rsync
:。从 Mac OS X 默认版本 2.6.9 升级到 3.1.3 解决了该问题。
答案4
确保目标目录存在于远程服务器上。rsync
可以补偿一级丢失的目录,但如果丢失两级以上的目录,则会抛出您所看到的错误。