Rsync, который обрабатывает движения разумно

10

Я успешно использую rsync для синхронизации моих домашних каталогов между моим ноутбуком и моим нетбуком (оба используют ext4 с Linux). Моя единственная проблема в том, что время от времени мне нравится полностью реорганизовывать определенные каталоги, и rsync рассматривает это как удаление и создание новых файлов, что делает его очень медленным и неэффективным.

Кто-нибудь знает хорошую программу, которая хорошо обрабатывает файлы?

Я обнаружил, что унисон должен быть способен на это, но на практике это не работает. Я проверил unison , синхронизировав две локальные директории, в каждой из которых был большой файл, и он все еще определял мой ход как удаление + создание, и в действительности он работал даже медленнее, чем rsync .

Более того, если я правильно помню из моего глядя на унисон «с исходным кодом пару месяцев назад, он пытался что - то делать , как делать Ша суммы и я не хочу , чтобы мое идеальное решение , чтобы сделать ша суммы-это слишком медленно на больших файлы / каталоги. Я хотел бы что-то, что замечает такие вещи, как:

«Похоже, что последний исходный аналог этого файла был удален, и в другом месте в дереве исходных каталогов есть новый файл с тем же mdate, размером и номером inode, так что я просто собираюсь предположить, что это был ход и соответственно переместите целевой объект вместо удаления + копирования. "

Для меня важно, чтобы я мог быстро синхронизировать эти машины.

Какие-либо предложения?

PSkocik
источник

Ответы:

6

Вы должны взглянуть на rdiff-backup, который он делает rsyncснизу, но с дополнительным интеллектом, который вам требуется (и он позволяет инкрементным резервным копиям откатываться, но вы можете настроить его отключение).

Последний выпуск - старый (2009), но это признак стабильности.

Zelda
источник
2
Кто-нибудь пробовал это?
туман
3

Unison делает то, что вы хотите, но только для удаленной синхронизации. Попробуйте использовать в ssh://localhost/path/to/dirкачестве одного из корней.

Unison основывает свои решения на содержимом файлов, он не отслеживает номера инодов.

Жиль "ТАК - перестань быть злым"
источник
1

Вы можете обрабатывать перемещенные и переименованные файлы с помощью rsync, если файловые системы в исходном и целевом каталоге поддерживают жесткие ссылки. Идея состоит в том, чтобы позволить rsync восстанавливать жесткие ссылки перед реальной передачей. Вы можете найти хорошее объяснение здесь

В итоге мы получили простое решение, которое создает скрытое дерево жестких ссылок внутри директории source / target, основной скрипт может выглядеть так:

# Name of hidden directory
Shadow=".rsync_shadow"

# do real sync
rsync -ahHv --stats --no-inc-recursive --delete --delete-after "$Source"/ "$Target"

# update/create hidden dir of hard links in source
rsync -a --delete --link-dest="$Source" --exclude="/$Shadow" "$Source"/ "$Source/$Shadow"

# update/create hidden dir of hard links in target
rsync -a --delete --link-dest="$Target" --exclude="/$Shadow" "$Target"/ "$Target/$Shadow"

У меня есть пример скрипта на GitHub . Но я советую вам сделать большое количество испытаний, прежде чем использовать этот метод на производстве.

dparoli
источник
0

Если вы хотите синхронизировать файлы между несколькими компьютерами, то вы можете просто использовать централизованную систему контроля версий, такую ​​как Subversion (или FSVS, которая использует SVN в качестве бэкэнда). Приятно то, что все в вашем / home (что вы добавляете в систему управления версиями) затем становится версионным и может быть легко синхронизировано с другими машинами или откатано.

tgharold
источник
0

lsyncd также обрабатывает перемещенные файлы с поведением rsync + ssh, хотя и несколько ошибочно (я получаю около 15% перемещений, которые обрабатываются как удаление / копирование, но пока не могу понять, почему). Большую часть времени это работает.

Поддержка NK
источник