1

Я ищу лучший способ синхронизации моего домашнего каталога с USB-накопителем на 120 ГБ. Загвоздка в том , что я использую Монтирование (которые я не хочу , чтобы следовать) и жесткие ссылки (которые я хочу быть сохранены). Rsync может сделать это, но это одно направление, в то время как у меня есть изменения с обеих сторон.

Unison выглядит так, как будто он может интеллектуально обрабатывать двунаправленную синхронизацию, но я не могу найти какой-либо вариант, чтобы ограничить его одной файловой системой или игнорировать bind-mounts, а в документации сказано: « Unison не понимает жесткие ссылки ». Однако по умолчанию unison использует rsync для передачи. Есть ли способ использовать понимание rsync жестких ссылок и привязывать монтирования?

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

Примечание. В прошлом я использовал FreeFileSync, но что-то пошло не так, и я чуть не потерял свои файлы и резервную копию! Возможно, это была моя вина, но теперь я боюсь использовать FreeFileSync.

1 ответ1

2

Я подозреваю, что, используя только Unison, ответ на ваш вопрос - нет. В общем, трудно сказать Unison синхронизировать или не синхронизировать файлы / каталоги со свойством, которое нельзя указать с помощью какого-либо сопоставления с шаблоном в их имени, например, с каталогами, которые являются монтируемыми или жесткими ссылками в вашем случае.

Не совсем корректно говорить « по умолчанию unison использует rsync для передачи ». Unison использует тот же базовый алгоритм / протокол, что и rsync, но использует свою собственную реализацию; фактический исполняемый файл rsync не вызывается, поэтому вы не можете обратиться к функциям исполняемого файла rsync , и вы не сможете решить вашу проблему таким образом. Хотя, если rsync может это сделать, то я думаю, что Unison может сделать это, если кто-то напишет эту функцию.

Поскольку, как вы указали, Unison не понимает жестких ссылок, я думаю, вам просто не повезло. Вы можете использовать внешнюю программу для умного игнорирования монтирования bind. Вы можете использовать findmnt, чтобы вывести список каталогов, которые являются подключаемыми , и затем вставить строку ignore = Path /path/to/bind/mount в свой профиль Unison для каждого подключения bind.

Кроме того, поскольку похоже, что вы собираетесь делать это вручную с помощью сценария или чего-то еще, вы должны знать об инструментах inotify.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .