Кто главный друг среди протоколов передачи данных в Linux? Правильный ответ BitTorrent. Качая не маленькие образы любимой Ubuntu с помощью BitTorrent, мы помогаем Canonical, разгружая её сервера и её зеркала.
Но BitTorrent не всесилен. Его плюс, что при закачивании файла, мы передаём куски файла (chunks - чанки) друг другу и качаем не с помощью централизованной технологии сервер-клиент как http, а используем распределённую p2p сеть. Но представьте, что вы хотите помочь Canonical и тестируете новые релизы Ubuntu и проверяете всё ли хорошо с переводами установщика или нет ли проблем при установке на экзотическое железо.
Каждый раз качать обновлённый iso образ даже по BitTorrent протоколу это всё равно заново скачивать ~700 мб!
Выход?
Нужно качать только "изменения". Инкрементное копирование придумано давно и используется, например, в замечательной утилите и протоколе rsync. Но проблема rsync в том, что ему нужна поддержка на стороне сервера.
Подробнее об плюсах и минусах в статье Comparison with rsync - zsync.moria.org.uk/paper/ch02s07.html.
Главное выход есть и это утилита zsync!
Как это работает?
Рядом с большим файлом, который будет раздаваться по http, кладут метафайл .zync. Скачав себе этот файл, вы скармливаете его zsync и он скачает вам большой файл, пользуясь информацией из метафайла.
Стойте! И чем это отличается от wget?
Отличия начинаются тогда, когда большой файл чуток изменят и сразу же автоматически изменится его контрольная сумма и большинство протоколов будут считать его абсолютно новым файлом и будут правы.
Вы будете вынуждены скачать снова большой объём информации из-за небольших изменений. Zsync скачает только изменения и применит их к старой версии большого файла и вы получите новый большой файл.
Вот реальный пример. Хочется потестировать Ubuntu 12.10. Зная, что образы iso будут изменяться постоянно на сервере и на определённых этапах постоянно будут нужны новые образы, чтобы протестировать локализацию установщика, решаем использовать zsync.
Новые образы будут выкладываться по адресу cdimage.ubuntu.com/daily-live/current/ и там копируем ссылку на файл cdimage.ubuntu.com/daily-live/current/quantal-desktop-i386.iso.zsync
Первый раз ну-у-у очень не хочется качать все 700 мб и хитрим. Берём образ Ubuntu 12.04 и делаем копию с новым именем quantal-desktop-i386.iso в специальную папку в которой будут в дальнейшем появляться служебные файлы zsync.
Командуем zsync http://cdimage.ubuntu.com/daily-live/current/quantal-desktop-i386.iso.zsync
Zsync обнаружил подкинутый quantal-desktop-i386.iso и сообщил мне, что 63% уже есть (Target 63.6% complete) и осталось докачать только 37%!
#################### 100.0% 45.5 kBps DONE reading seed file quantal-desktop-i386.iso: **** Read quantal-desktop-i386.iso. Target 63.6% complete. ********************************************* downloading from cdimage.ubuntu.com/daily-live/current/quantal-desktop-i386.iso: #################### 100.0% 168.7 kBps DONE verifying download...checksum matches OK used 472367104 local, fetched 270778956
Две трети файла качать не нужно. Не плохо? Отлично!
С выходом обновленных образов достаточно повторять команду в данной папке и zsync обновит ваш образ. Учитывая что образы будут несильно отличаться друг от друга, то и скачивание будет быстрым и не напрягающим.
Согласитесь что это здорово и точно лучше скачивания wget по http и даже лучше скачивания каждый раз заново файла по BitTorrent!
Peer2peer связь:
BTSync на службе у админа. Описание работы, параметры, FAQ.