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