Rsync, який обробляє, рухається розважливо


10

Я успішно використовую rsync для синхронізації домашніх каталогів між моїм ноутбуком та моїм нетбуком (обидва використовують ext4 з Linux). Єдина моя проблема з цим полягає в тому, що раз у раз мені подобається повністю реорганізувати певні каталоги, і rsync сприймає це як видалення та створення нових файлів, що робить це дуже повільним і неефективним.

Хтось знає про хороше програмне забезпечення, яке добре обробляє файли?

Я виявив, що унісон повинен бути на це здатний, але, схоже, це не працює на практиці. Я перевірив унісон , синхронізувавши два локальні каталоги, у кожному з великим файлом у ньому, і він все ще виявив мій хід як видалення + створення і був фактично повільнішим за rsync .

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

"Здається, останній джерело цього файлу видалено, а в дереві каталогів нового файлу є інший файл, який має той самий mdate, розмір та номер inode, тому я просто припускаю, що це був крок і відповідно перемістіть цільовий аналог замість того, щоб робити видалення + копію. "

Мені важливо, щоб я міг швидко синхронізувати ці машини.

Будь-які пропозиції?

Відповіді:


6

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

Останній реліз - старий (2009 р.), Але це ознака стабільності.


2
Хтось це спробував?
туман

3

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

Unison засновує свої рішення на вмісті файлів, він не відслідковує числа inode.


1

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

Ми закінчили просте рішення, яке створить приховане дерево жорстких посилань всередині вихідного / цільового каталогу, базовий сценарій може бути таким:

# 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 . Але я раджу зробити велику кількість тестування, перш ніж використовувати цей метод на виробництві.


0

Якщо ви хочете синхронізувати файли між декількома машинами, ви можете просто використовувати централізовану систему управління версіями, наприклад Subversion (або FSVS, яка використовує SVN як резервний). Приємним є те, що все у вашому / домашньому (що ви додаєте до керування версіями) потім розроблено і його можна легко синхронізувати з іншими машинами або відкотити назад.


0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.