如何在多台机器上自动同步目录树?

如何在多台机器上自动同步目录树?

我有两台 Mac 笔记本电脑和一台 Debian 服务器,每台电脑都有一个目录,我希望三台电脑之间保持同步。解决方案应满足以下标准(按重要性大致排序):

  • 不得使用任何第三方服务(例如 Dropbox、SugarSync、Google 等)。这不包括安装其他软件(只要是免费的)。
  • 它一定不能要求我使用特定目录或改变我的存储方式。(如果我没记错的话,Dropbox 就是这样做的)
  • 它必须在各个方向上发挥作用(在任何机器上所做的更改都应推送到其他机器)
  • 所有发送的数据都必须加密(我ssh已经设置了密钥对)
  • 即使并非所有机器都可用,它也必须工作(当机器重新上线时,应将更改推送到机器)
  • 即使某些机器上的 /directories/ 不可用(它们可能存储在不会总是被挂载的磁盘映像上),它也必须工作
    • launchd对于 Mac 来说,可以通过在安装和卸载映像时自动启动和终止(或以某种方式改变其行为)用于同步的守护进程来解决此问题。
  • 它必须是即时的(使用基于事件的系统,而不是像 这样的周期性系统cron
  • 它必须具有灵活性(如果添加更多机器,我应该能够轻松地将它们合并)

我也有一些希望实现但不必实现的偏好:

  • 如果发生冲突或其他错误,它应该以某种方式通知我。
  • 它应该识别符号和硬链接并创建相应的链接。
  • 它应该允许我创建一个例外列表(根本不会同步的子目录)。
  • 它不应该要求我设置端口转发或重新配置网络。
    • 这个问题可以通过使用具有反向端口转发的隧道来解决ssh

如果您有一个满足部分但不是全部标准的解决方案,请在评论中贡献它,因为它可能在某种程度上有用,并且可能能够单独满足某些标准。


我尝试过的方法以及为什么没有奏效:

  • rsynclsyncd支持双向同步
  • csync2专为服务器集群而设计,似乎不适用于具有动态 IP 的机器
  • DRBD(由莫兹格)需要安装内核模块,但似乎无法在运行 OS X 的系统上运行

答案1

这是一长串的要求,我认为没有任何东西可以完全满足所有要求。不过,我确实有两个建议可能非常接近。

星火共享

我发现火花分享一个非常巧妙的解决方案。它是跨平台的,提供 GUI 集成/通知等。与 Dropbox 非常相似,但由您自己托管。您唯一需要的就是某个服务器上的中央 Git 存储库。

启动新项目的向导要求您将文件存储在特定目录中,这不符合您的第二个要求。但是,您可以尝试在config.xml来修复这个问题。

我认为只需要一个要求:硬链接支持。sparkleshare 中使用 Git 可以防止这种情况发生 - 请参阅Git 和硬链接。如果你真的真的需要这个,那么这可能会是一个阻碍。

Git-annex 助手

您可能还会参与另一个类似的项目,但仍处于早期开发阶段:git-annex 助手。因为它使用了 Git-annex,所以它可能会克服硬链接检测的限制。

相关内容