У меня есть два ноутбука Mac и сервер Debian, у каждого из которых есть каталог, который я хотел бы синхронизировать между ними. Решение должно соответствовать следующим критериям (в грубом порядке важности):
- Он не должен использовать какие-либо сторонние службы (например, Dropbox, SugarSync, Google и т.д.). Это не включает установку дополнительного программного обеспечения (если оно бесплатное).
- Это не должно требовать, чтобы я использовал определенные каталоги или изменил мой способ хранения вещей. (Dropbox делает это IIRC)
- Он должен работать во всех направлениях (изменения, внесенные в /any / machine, должны быть перенесены в другие)
- Все отправленные данные должны быть зашифрованы (у меня уже настроены пары ключей
ssh
) - Он должен работать, даже когда не все машины доступны (изменения должны быть переданы на машину, когда она снова подключится)
Он должен работать, даже если каталоги / на некоторых машинах недоступны (они могут храниться на образах дисков, которые не всегда будут смонтированы)- Это может быть решено для Mac с помощью
launchd
для автоматического запуска и уничтожения (или каким-либо образом изменения поведения) любого демона, используемого для синхронизации, когда образы монтируются и отключаются.
- Это может быть решено для Mac с помощью
- Он должен быть немедленным (используя систему, основанную на событиях, а не периодическую, такую как
cron
) - Он должен быть гибким (если будет добавлено больше машин, я смогу легко их включить)
У меня также есть некоторые предпочтения, которые я хотел бы выполнить, но не обязательно:
- Он должен как-то уведомить меня, если есть конфликты или другие ошибки.
- Он должен распознавать символические и жесткие ссылки и создавать соответствующие.
- Это должно позволить мне создать список исключений (подкаталоги, которые вообще не будут синхронизироваться).
Это не должно требовать, чтобы я настроил переадресацию портов или иным образом перенастроил сеть.- Это можно решить с помощью туннеля
ssh
с переадресацией портов.
- Это можно решить с помощью туннеля
Если у вас есть решение, которое удовлетворяет некоторым, но не всем критериям, пожалуйста, внесите его в комментарии, так как оно может быть полезным в некотором роде, и некоторые из этих критериев могут быть выполнены по отдельности.
Что я пробовал, и почему это не сработало:
rsync
иlsyncd
не поддерживают двунаправленную синхронизациюcsync2
предназначен для кластеров серверов и не работает с машинами с динамическими IP-адресами.- DRBD (предложенный amotzg) включает в себя установку модуля ядра и не работает на системах под управлением OS X