Назад | Перейти на главную страницу

синхронизация между двумя (или более) файловыми серверами: блокировать открытые файлы во избежание конфликтов

"Укороченная версия": Когда пользователь открывает файл на локальном общем ресурсе, другие пользователи могут открывать файл только для чтения, пока он не будет закрыт. Я хочу, чтобы это было верно для удаленной копии файла: только для чтения при открытии локального файла.

"Подробности": У меня есть два (для начала) удаленных файловых сервера (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. Если они будут работать с текстовыми файлами, они смогут легко увидеть различия между версиями.

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