以下是我试图实现的场景。我有三台机器,J、T 和 R,它们最终需要获取相同的数据(暂时的轻微差异是可以接受的)。J 和 T 是每天打开和关闭的台式机。R 是远程文件服务器。J 和 T 上的用户可以更改一个目录(通过组权限共享)和他们自己的主目录中的共享数据。两台 J 和 T 机器中只有一台在任何时候运行,这是相当常见的。R 的互联网连接相当可靠,但 R 距离较远,延迟使其不适合用作主文件服务器。我尝试使用 NFS,但非常痛苦。连接不够可靠,无法始终依赖它进行访问。
目前,安装本地服务器并通过 NFS 或 CIFS 提供共享驱动器不是一个选择。虽然这样做会容易得多,但这不是选择。
我尝试了交叉安装的 NFS 导出,并设法获取了几个简单的 shell 脚本来安装驱动器等。但如果 J 从 T 安装驱动器并将其用作基本文件共享,然后关闭 T,数据更改就会丢失。所以我需要某种方法来不断同步数据。
我查看了 rsync,最终找到了 csync(不是 csync2,后者是完全不同的项目)。它允许我在机器之间运行定期同步。但是,它是在 cron 中,而不是按需执行的。我还发现了 lsyncd,它看起来可能适合在两个工作站都启动时复制更改,但不擅长在本地系统关闭而另一个工作站进行更改时找出更改的内容。
我查看了 Ubuntu One、Dropbox 等,发现免费文件限制是个问题。预算非常非常有限,需要避免经常性成本。iFolder 可能是一个选择,但它似乎需要某个地方的服务器。
我希望是这样的:
将远程和本地副本挂载到工作目录中。在那里进行更改,并让文件系统将它们推送到其他位置。
登录后,开始与其他两台机器重新同步,以赶上机器关闭时所做的任何更改。
两个工作站中的一个可能会连续几天处于关闭状态,因此会积累大量更改。只有两个常用用户,因此更改率不是很高,但一周后,更改就会累积起来。
是否有类似文件系统 RAID1 的 FUSE 模块?由于可能断开连接的时间较长,Gluster FS、AFS 和 NBD 之类的东西似乎不太合适。
如果有办法进行 NFS 客户端故障转移(其他工作站发生故障,则改用本地副本),那么这种方法也行得通。我对此进行了一些研究,除了有人提到“autofs 应该支持这一点,但实际上不支持”外,我并没有发现太多其他信息。
我更喜欢基于 NFS/CIFS 的解决方案,因为这样我就可以锁定文件,并且不会出现用户同时尝试修改同一文件的潜在问题。但我不确定如何解决客户端故障转移。
您将如何解决这个问题?同样,目前无法使用本地文件服务器。
答案1
结尾应该可以满足您的要求。它是一个强力支持本地缓存和断线客户端操作的网络文件系统。
答案2
如果你想要恢复使用同步工具,请务必查看齐奏。它是基于 rsync 库的双向同步,可以处理正在修改的内容。它可以将发生冲突(双方均已更新)的文件保存到备份文件夹。
同步仍然需要由用户、cron 或某种启动脚本来启动。