我有两台 Mac 笔记本电脑和一台 Debian 服务器,每台电脑都有一个目录,我希望三台电脑之间保持同步。解决方案应满足以下标准(按重要性大致排序):
- 不得使用任何第三方服务(例如 Dropbox、SugarSync、Google 等)。这不包括安装其他软件(只要是免费的)。
- 它一定不能要求我使用特定目录或改变我的存储方式。(如果我没记错的话,Dropbox 就是这样做的)
- 它必须在各个方向上发挥作用(在任何机器上所做的更改都应推送到其他机器)
- 所有发送的数据都必须加密(我
ssh
已经设置了密钥对) - 即使并非所有机器都可用,它也必须工作(当机器重新上线时,应将更改推送到机器)
即使某些机器上的 /directories/ 不可用(它们可能存储在不会总是被挂载的磁盘映像上),它也必须工作launchd
对于 Mac 来说,可以通过在安装和卸载映像时自动启动和终止(或以某种方式改变其行为)用于同步的守护进程来解决此问题。
- 它必须是即时的(使用基于事件的系统,而不是像 这样的周期性系统
cron
) - 它必须具有灵活性(如果添加更多机器,我应该能够轻松地将它们合并)
我也有一些希望实现但不必实现的偏好:
- 如果发生冲突或其他错误,它应该以某种方式通知我。
- 它应该识别符号和硬链接并创建相应的链接。
- 它应该允许我创建一个例外列表(根本不会同步的子目录)。
它不应该要求我设置端口转发或重新配置网络。- 这个问题可以通过使用具有反向端口转发的隧道来解决
ssh
。
- 这个问题可以通过使用具有反向端口转发的隧道来解决
如果您有一个满足部分但不是全部标准的解决方案,请在评论中贡献它,因为它可能在某种程度上有用,并且可能能够单独满足某些标准。
我尝试过的方法以及为什么没有奏效:
rsync
不lsyncd
支持双向同步csync2
专为服务器集群而设计,似乎不适用于具有动态 IP 的机器- DRBD(由莫兹格)需要安装内核模块,但似乎无法在运行 OS X 的系统上运行
答案1
这是一长串的要求,我认为没有任何东西可以完全满足所有要求。不过,我确实有两个建议可能非常接近。
星火共享
我发现火花分享一个非常巧妙的解决方案。它是跨平台的,提供 GUI 集成/通知等。与 Dropbox 非常相似,但由您自己托管。您唯一需要的就是某个服务器上的中央 Git 存储库。
启动新项目的向导要求您将文件存储在特定目录中,这不符合您的第二个要求。但是,您可以尝试在config.xml
来修复这个问题。
我认为只需要一个要求:硬链接支持。sparkleshare 中使用 Git 可以防止这种情况发生 - 请参阅Git 和硬链接。如果你真的真的需要这个,那么这可能会是一个阻碍。
Git-annex 助手
您可能还会参与另一个类似的项目,但仍处于早期开发阶段:git-annex 助手。因为它使用了 Git-annex,所以它可能会克服硬链接检测的限制。