两个(或多个)文件服务器之间的同步:阻止打开文件以避免冲突

两个(或多个)文件服务器之间的同步:阻止打开文件以避免冲突

“简洁版本”:当用户打开本地共享上的文件时,其他用户只能以只读方式打开,直到关闭为止。我希望文件的远程副本也是如此:打开本地文件时为只读。

“细节”:我有两个(一开始)远程文件服务器(ubuntu),带有 Windows 客户端(许多文件和目录),用于通过互联网自动同步,在 ssh 隧道中(ADSL 连接非常差,有时会中断),文件系统是 ext4。现在我晚上使用 unison,使用强制更新选项和备份来避免丢失数据。

我想通过避免冲突来实现(几乎)实时同步,我不想手动解决冲突,或者尽可能少地解决冲突,因为有多个用户......

我在本地测试了 unison -repeat watch,他忘记了变化,所以不合适。

但是为什么不通过 cron 重复启动 unison,因为当文件更改很少时它的性能足够快...我的想法:如果 LAN A 上的用户在服务器 A 上打开一个文件,则发送一个命令(chattr +i?)将阻止服务器 B 上的同一个文件,以防止来自网络 B 的用户打开它(并对其进行更改)

当文件在 A 上关闭时,通过发送命令(chattr -i ?)在服务器 B 上解锁文件

反之亦然,从 B 到 A

通过 cron(chattr -R -i ?)在 12 点和 19 点本地解锁所有内容,例如半天锁定是可以接受的

问题:如何运行封锁?必须使用 inotify 检索名称和文件路径...lsyncd?pyinotify?其他?(监控必须是递归的)

如果打开文件时连接断开怎么办?

有“现成的”吗?谢谢你的帮助

答案1

为什么两个用户同时访问同一个文件?

如果您不能使用可以进行一些锁定的 Samba,那么就不要让它变得复杂,并教育您的用户使用 VCS[1] 并始终将更改或新文件“推送”到 VCS。如果他们使用纯文本文件,他们将受益匪浅,可以轻松看到版本之间的差异。

[1]http://en.wikipedia.org/wiki/Revision_control

相关内容