Я пытаюсь синхронизировать дерево папок между несколькими компьютерами. В настоящее время я использую unison в топологии «звезда» с центральным удаленным сервером. Я хочу, чтобы данные на сервере были зашифрованы, поэтому на сервере дерево unison (включая папку .unison ) хранится в дереве encfs . Для выполнения синхронизации каждый клиент:
- монтирует хранилище сервера с помощью
sshfs - монтирует хранилище
encfsповерхsshfsлокально - выполняет
unisonмежду локальной копией документов и смонтированной.
Установка имеет много преимуществ:
- инструменты с открытым исходным кодом
- скриптовое решение для командной строки
- безопасное общение через
ssh - конфиденциальность от сервера, потому что дерево папок
encfsтам никогда не расшифровывается - способность различать модификации во время синхронизации, потому что
unisonработает над открытым текстом
Одна вещь, которая не работает так хорошо, это скорость синхронизации. Поскольку папка encfs с сервера монтируется на клиенте, каждый вызов stat() выполняет клиент, должен перенаправляться через ssh на сервер. Документы дерево уже имеет тысячи файлов, и в unison синхронизации необходимо выполнить при минимальном один stat() вызова для каждого файла (чтобы исключить изменения WRT состояния , хранящегося в папке .unison Есть ли более быстрая альтернатива, которая поддерживает преимущества, перечисленные выше?
Примечание: Если бы я был удалить последнее условие, я мог бы работать в unison над Шифротекстом, и только смонтировать дерево encfs локально. Тогда unison будет запускаться локально на клиенте и на сервере, поэтому вызовы stat() будут быстрыми. Но приятно иметь возможность посмотреть хотя бы, какие файлы синхронизируются; с unison над encfs Шифротекст, имена файлов будут зашифрованы.
Я понимаю, что для решения этой проблемы необходимо эффективно передавать метаданные файла с сервера на клиент во время синхронизации. Мне интересно, есть ли способ (т. Е. Комбинация существующих инструментов), например, хранить метаданные в одном месте, чтобы все они передавались путем отправки только одного (или нескольких) блока (ов) данных вместо отправки тысяч блоков (что и делает переадресация вызовов stat() ).
Что, если бы я должен был заменить encfs , скажем, разделом ext4 over dm-crypt хранящимся в большом файле на сервере и смонтированным на клиенте с помощью losetup over sshfs? Будет ли файловая система ext4 хранить метаданные файла вместе, чтобы они передавались только при отправке нескольких блоков? Будет ли sshfs знать, что нужно отправлять только несколько блоков во время обновления вместо перезаписи всего зашифрованного файла?
