LINUX.ORG.RU

Объясните как работает rsync


0

1

Читаю алгоритм rsync (just for fun), но как-то медленно доходит. Вот, допустим, очередной блок S не совпал. Как он понимает длину участка который отличается? Неужели он рассчитывает контрольную сумму длиной S для всех возможных смещений? Т.е. если в середину файла вставить один мегабайт то он миллион (2^20) раз посчитает «плавающую» контрольную сумму?

Описание алгоритма: http://rsync.samba.org/tech_report/

★★★★★

Это даже я понимаю.

Во-первых он действительно считает контрольную сумму для всех смещений, НО эта сумма позволяет «вычесть» один байт с начала и добавить один байт в конец. Т.е. ничего пересчитывать не надо.

Плюс там схема с двоичным поиском в виде заготовленных таблиц хешей и чё-то ещё.

ziemin ★★
()

Понятия не имею как на самом деле работает rsync, но всегда предполагал что так:

- для локального файла считаются блочные CRC (объём получается небольшой, ибо блоки относительно большие -> их мало)

- пересылаются на удалённую сторону

- удалённая сторона считает бегущую сумму по своему файлу и ищет блоки с совпавшей CRC в том что получила от меня

- совпавшие блоки перепроверяются более надёжной нециклической контрольной суммой, отсутствующие блоки просто пересылаются

- итого, с минимальным оверхедом по трафику и не увеличивая сложности алгоритма сверх O(размера файла) умеем находить совпадения даже по нечётным смещениям, profit

slovazap ★★★★★
()
Ответ на: комментарий от slovazap

Спрошу сдесь же. А почему adler32 состоит из двух половинок которые отличаются лишь на единицу? Разве оно не остаётся, по сути, 16-битным хэшем?

cast ziemin

true_admin ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.