Я успешно использую rsync для синхронизации моих домашних каталогов между моим ноутбуком и моим нетбуком (оба используют ext4 с Linux). Моя единственная проблема в том, что время от времени мне нравится полностью реорганизовывать определенные каталоги, и rsync рассматривает это как удаление и создание новых файлов, что делает его очень медленным и неэффективным.
Кто-нибудь знает хорошую программу, которая хорошо обрабатывает файлы?
Я обнаружил, что унисон должен быть способен на это, но на практике это не работает. Я проверил unison , синхронизировав две локальные директории, в каждой из которых был большой файл, и он все еще определял мой ход как удаление + создание, и в действительности он работал даже медленнее, чем rsync .
Более того, если я правильно помню из моего глядя на унисон «с исходным кодом пару месяцев назад, он пытался что - то делать , как делать Ша суммы и я не хочу , чтобы мое идеальное решение , чтобы сделать ша суммы-это слишком медленно на больших файлы / каталоги. Я хотел бы что-то, что замечает такие вещи, как:
«Похоже, что последний исходный аналог этого файла был удален, и в другом месте в дереве исходных каталогов есть новый файл с тем же mdate, размером и номером inode, так что я просто собираюсь предположить, что это был ход и соответственно переместите целевой объект вместо удаления + копирования. "
Для меня важно, чтобы я мог быстро синхронизировать эти машины.
Какие-либо предложения?
источник
Unison делает то, что вы хотите, но только для удаленной синхронизации. Попробуйте использовать в
ssh://localhost/path/to/dir
качестве одного из корней.Unison основывает свои решения на содержимом файлов, он не отслеживает номера инодов.
источник
Вы можете обрабатывать перемещенные и переименованные файлы с помощью rsync, если файловые системы в исходном и целевом каталоге поддерживают жесткие ссылки. Идея состоит в том, чтобы позволить rsync восстанавливать жесткие ссылки перед реальной передачей. Вы можете найти хорошее объяснение здесь
В итоге мы получили простое решение, которое создает скрытое дерево жестких ссылок внутри директории source / target, основной скрипт может выглядеть так:
У меня есть пример скрипта на GitHub . Но я советую вам сделать большое количество испытаний, прежде чем использовать этот метод на производстве.
источник
Если вы хотите синхронизировать файлы между несколькими компьютерами, то вы можете просто использовать централизованную систему контроля версий, такую как Subversion (или FSVS, которая использует SVN в качестве бэкэнда). Приятно то, что все в вашем / home (что вы добавляете в систему управления версиями) затем становится версионным и может быть легко синхронизировано с другими машинами или откатано.
источник
lsyncd также обрабатывает перемещенные файлы с поведением rsync + ssh, хотя и несколько ошибочно (я получаю около 15% перемещений, которые обрабатываются как удаление / копирование, но пока не могу понять, почему). Большую часть времени это работает.
источник