"Укороченная версия": Когда пользователь открывает файл на локальном общем ресурсе, другие пользователи могут открывать файл только для чтения, пока он не будет закрыт. Я хочу, чтобы это было верно для удаленной копии файла: только для чтения при открытии локального файла.
"Подробности": У меня есть два (для начала) удаленных файловых сервера (ubuntu) с клиентами Windows (много файлов и каталогов) для автоматической синхронизации через Интернет, в туннеле ssh (соединение ADSL довольно плохое, а иногда и обрезанное), файловая система ext4. На данный момент я использую unison ночью, с более новой опцией и резервным копированием, чтобы избежать потери данных.
Я хочу получить синхронизацию (почти) в реальном времени, избегая конфликтов, я не хочу разрешать конфликты вручную или как можно реже, потому что есть несколько пользователей ...
Я тестировал unison -Repeat смотреть локально, он забывает изменения, так что это не подходит.
Но почему бы не запускать unison повторно с помощью cron, потому что его производительность достаточно высока, когда есть несколько изменений файлов ... Моя идея: если файл открывается пользователем в локальной сети A на сервере A, отправляет команду (chattr + i ?), который заблокирует тот же файл на сервере B, чтобы пользователи из сети B не могли его открыть (и, таким образом, изменить его)
Разблокируйте файл на сервере B, когда он закрыт на сервере A, отправив команду (chattr -i?)
И наоборот от Б до А
Разблокировать все локально с помощью cron (chattr -R -i?), Например, до 12 и 19 часов, допустима блокировка на полдня
Проблемы: как запустить блокаду? должен получить имя и путь к файлу с помощью inotify ... lsyncd? pyinotify? Другой? (мониторинг должен быть рекурсивным)
Что делать, если при открытии файла соединение отсутствует?
Есть ли «готовые»? Спасибо за любую помощь
Почему два пользователя имеют доступ к одному и тому же файлу одновременно?
Если вы не можете использовать Samba, которая может выполнять некоторую блокировку, не усложняйте ее и научите своих пользователей использовать VCS [1] и всегда «проталкивать» изменения или новые файлы в VCS. Если они будут работать с текстовыми файлами, они смогут легко увидеть различия между версиями.