Можно ли заставить Unison игнорировать монтируемые или жесткие ссылки?

370
Jesse the Wind Wanderer

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

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

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

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

1
Я имею в виду «вручную», например, написание собственного скрипта, который использует diff или аналогичный для поиска изменений, а затем rsync для внесения изменений. Jesse the Wind Wanderer 5 лет назад 0

1 ответ на вопрос

2
Mike Pierce

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

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

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

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

Спасибо, Майк, очевидно, это не тот ответ, на который я надеялся, но он очень хорошо объяснен. Итак, поскольку мне нужно написать сценарий или что-то для этого, знаете ли вы какие-либо примеры сценариев, которые я мог бы настроить? Конечно, я не единственный, кто хотел синхронизировать два дерева каталогов с обоими жесткими ссылками и привязывать монтирование в них. Jesse the Wind Wanderer 5 лет назад 0
@JessetheWindWanderer Вы, безусловно, нет. :) Но, к сожалению, я не знаю таких сценариев. Mike Pierce 5 лет назад 0