Чи може rsync оновити великий файл, який змінився лише частково без повної повторної передачі?


15

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

Чи існує спосіб, щоб rsync визначив різницю у файлі та лише надіслав невелику різницю по мережі?


3
Під час копіювання через мережу rsyncповодиться так за замовчуванням. Поки незначна зміна - це незначна зміна файлу, а файл вже існує по обидва боки посилання в майже однакових версіях, передані дані повинні бути набагато меншими, ніж загальний розмір файлу. З першого абзацу на головній сторінці: "Він відомий своїм алгоритмом передачі дельта, який зменшує кількість даних, що надсилаються по мережі, надсилаючи лише відмінності між вихідними файлами та існуючими файлами в пункті призначення".
user4556274

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

Відповіді:


11

rsyncалгоритм передачі дельта робить це за замовчуванням. Цитуючи сторінку rsync :

ОПИС

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

Якщо ви хочете відключити його, вам доведеться скористатися опцією -Wабо --whole-file.

-W, - чий файл

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

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

-B, --block-size = БЛОКСІЗАЦІЯ

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

А якщо ви хочете отримати більше інформації про сам алгоритм, ви можете знайти його тут: Алгоритм Rsync


Справедливо кажучи, форма множини "файлів" на сторінці сторінки неоднозначна: "надсилаючи лише відмінності між вихідними файлами та існуючими файлами ..." Я взяв "файли" означати колекцію окремих файлів, і це rsync надсилатиме (цілі) файли, які були б різними. Це слід уточнити.
Русь
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.