Вот сценарий, который я пытаюсь заставить работать. У меня есть три машины, J, T и R, которые должны в конечном итоге получить одни и те же данные (небольшие временные различия допустимы). J и T - рабочие столы, которые включаются и выключаются каждый день. R - удаленный файловый сервер. Пользователи J и T могут вносить изменения в общие данные в одном каталоге (совместно используемом с разрешениями группы) и в своих собственных домашних каталогах. Довольно часто в каждый момент времени работает только одна из двух машин J и T. Интернет-соединение с R довольно надежно, но R находится далеко, и из-за задержки его использование в качестве основного файлового сервера нежелательно. Я пробовал использовать NFS, и это было довольно болезненно. Соединение недостаточно надежно, чтобы постоянно зависеть от него при доступе.
На данный момент нельзя использовать локальный сервер и просто обслуживать общий диск через NFS или CIFS. Это могло бы сделать намного, намного проще, но это не вариант.
Я попробовал перекрестно смонтированный экспорт NFS, и мне удалось получить пару простых сценариев оболочки для монтирования дисков и т. Д., Но если J смонтировал диск из T и использовал его в качестве основного файлового ресурса, а затем T был отключен, изменения данных будут потерянный. Поэтому мне нужен способ постоянно синхронизировать данные.
Я посмотрел на rsync и в конце концов нашел csync (а не csync2, который является совершенно другим проектом). Это позволяет мне выполнять периодическую синхронизацию между машинами. Однако это делается в cron, а не по запросу. Я также нашел lsyncd, который, похоже, может быть полезен для копирования изменений, когда обе рабочие станции работают, но не годится для выяснения, что изменилось, когда локальная система не работала, а другая рабочая станция вносила изменения.
Я смотрел Ubuntu One, Dropbox и т. Д., И ограничения на бесплатные файлы - проблема. Бюджет очень и очень ограничен, и следует избегать повторяющихся расходов. iFolder может быть вариантом, но похоже, что ему где-то нужен сервер.
Я бы предпочел что-то вроде этого:
смонтировать как удаленные, так и локальные копии в рабочий каталог. Внесите там изменения и попросите файловую систему переместить их в другие места.
При входе в систему запустите повторную синхронизацию с обоими другими машинами, чтобы учесть любые изменения, сделанные, когда машина была выключена.
Одна из двух рабочих станций может быть отключена в течение нескольких дней, поэтому может накапливаться много изменений. Обычных пользователей всего два, поэтому скорость изменений не так высока, но через неделю они накапливаются.
Есть ли модуль FUSE с чем-то вроде RAID1 над файловыми системами? Из-за большой продолжительности возможных отключений такие вещи, как Gluster FS, AFS и NBD, не кажутся подходящими.
Если бы существовал способ отработки отказа клиента NFS (другая рабочая станция вышла из строя, используйте вместо этого локальную копию), это тоже сработало бы. Я провел некоторое исследование по этому поводу, и кроме некоторых упоминаний, что «autofs должен поддерживать это, но не поддерживает», я не нашел много.
Я бы предпочел решение на основе NFS / CIFS, потому что тогда я мог бы получить блокировки файлов, и у нас не было бы потенциальных проблем с пользователями, пытающимися одновременно изменить один и тот же файл. Но я не уверен, как решить отказоустойчивость на стороне клиента.
Как бы вы это решили? Опять же, наличие локального файлового сервера в настоящее время не вариант.
Coda должен соответствовать вашим требованиям. Это сетевая файловая система, которая полностью поддерживает локальное кэширование и работу с отключенным клиентом.
Если вы хотите вернуться к инструменту синхронизации, обязательно посмотрите унисон. Это двунаправленная синхронизация, основанная на библиотеках rsync, и она может обрабатывать изменяемые объекты. Он может сохранять файлы, в которых возник конфликт (обновленные с обеих сторон), в резервную папку.
Синхронизация все равно должна быть инициирована пользователем, cron или каким-либо сценарием запуска.