LINUX.ORG.RU

Двусторонняя синхронизация директорий

 , ,


0

2

Вот есть утилиты для двунаправленной синхронизации ящиков электронной почты - mbsync, offlineimap. Они позволяют совершать параллельные изменения над разными копиями, при этом копии равноправны и слияние изменений происходит автоматически. Например, ящик на главном почтовом сервере и копии на рабочих станциях, и везде пользователь может вносить правки. При этом нет существенной разницы, есть ли «главный» почтовый сервер, или рабочие станции синкаются между собой. Как я понимаю, это фишка используемого алгоритма слияния, 3-way merge. Понятно, что можно сделать такие вещи, которые невозможно трактовать однозначно, такие конфликты должны разруливаться руками (но вышеназванные утилиты, видимо, молча принимают решение сами, при этом не всегда получается то, что пользователь хотел бы).

Вопрос - почему такой же подход не используется для дисков с данными, которые должны быть синхронизированы между компьютерами?

Практический пример. Например, есть ноутбук и стационарный компьютер, и на всех компах есть каталог с нужными-важными данными, и на каждом компьютере нужна актуальная копия всех данных, при этом пользователь добавляет, удаляет и редактирует файлы на обеих рабочих станциях попеременно, при этом по разным причинам рабочие станции не всегда могут непрерывно общаться по сети (пользователь на выезде, свет выключили, не работает связь по сети...). При этом нужно следить за тем, чтобы имелись актуальные резервные копии, поэтому, если каталоги с данными будут автоматически синкаться между компьютерами, пользователь будет доволен. А конфликты пусть программа обнаруживает сама, и спрашивает пользователя, как их разрулить, при этом продолжая синхронизацию в фоне.

Git, конечно, рулит, но с его помощью трекать файлы даже на отдельном компьютере - уже боль (по опыту треканья корневой ФС на VPS), а уж на нескольких компах - боюсь, юзера быстро достанет обилие ручных действий, хотя они и заключаются в commit, pull --rebase и периодической подрезке истории. Если же Git, то нужен чёткий workflow и, желательно, скрипты для стандартных действий. Есть ли в готовом виде хотя бы таковой workflow? Интересно было бы услышать истории из личного опыта.

Написав текст этого поста, обнаружил, что есть нечто под названием git-annex. Если кратко, то оно трекает файлы git-ом, не трекая файлы в git :) Кто-нибудь пользовался?

Самый главный вопрос у меня не в том, какая софтина так умеет уже сейчас, а в том, верно ли я понимаю данный вопрос и верно ли оцениваю возможности известных алгоритмов. Если софтины нет, а алгоритмы - есть, то не проблема софтину создать.

Спасибо за ваше время, затраченное на прочтение этого многословного вопроса. Заранее благодарю за разумные комменты по делу.

★★

Последнее исправление: Andrey_Utkin (всего исправлений: 1)

Тут тривиальный алгоритм: при синхронизации пишем в файл версии всех файлов(например md5sum), при следующей синхронизации находим изменённые локально и удалённо файлы. Если файл изменили с одной стороны - то всё очевидно, копируем новый файл на вторую сторону. Если изменили с обеих сторон - спрашиваем у пользователя.

Готового не видел и не искал, при желании можно запилить за вечер на bash.

Сам использую rsync на нескольких машинах, но он затирает более новыми изменениями. Но в любом случае стараюсь не править одни и те же файлы с разных сторон, иначе придётся мержить вручную.

disarmer ★★★
()

Вопрос - почему такой же подход не используется для дисков с данными, которые должны быть синхронизированы между компьютерами?

Почему же...

Самый главный вопрос у меня не в том, какая софтина так умеет уже сейчас, а в том, верно ли я понимаю данный вопрос и верно ли оцениваю возможности известных алгоритмов.

Да, да.

если каталоги с данными будут автоматически синкаться между компьютерами, пользователь будет доволен.
А конфликты пусть программа обнаруживает сама, и спрашивает пользователя

Вот тут-то «довольство» и просядет в ноль.

Вопрос: зачем писать всю эту простыню, ты синхронизаторами никогда не пользовался? Написал бы apt install unison да сам посмотрел на «конфликты пусть программа обнаруживает сама, и спрашивает пользователя, как их разрулить». В потом поставил syncthing.

t184256 ★★★★★
()
Ответ на: комментарий от disarmer

Тут тривиальный алгоритм

Угу, у кого дата модицикации новее, тот и propagate'ится. А у тебя нетривиальный алгоритм.

t184256 ★★★★★
()
23 марта 2016 г.
Ответ на: комментарий от haku

Поддерживаю. Пользуюсь уже с пол года. Можно настроить простенький backup на случай случайного удаления или перезаписи файлов.

Kappitoshka
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.