Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #62, ЯНВАРЬ 2006 г.

Пингвинья резервация

Alexander S. Salieff

Спецвыпуск: Хакер, номер #062, стр. 062-066-4


Первый хэш называется «быстрым», он рассчитывается очень быстро и неточно, его задача — быстро сигнализировать о сильных отличиях блоков. Если быстрые хэши на источнике и в хранилище отличаются, значит, блок однозначно требует пересылки, и тогда тратить ресурсы на расчет второго хэша не нужно. Если же быстрые хэши совпадают, есть вероятность (да, только вероятность: они неточные, могут совпадать и при различных блоках) идентичности блоков и требуется расчет второго, «точного» хэша.

Точный хэш рассчитывается дольше и намного точнее, вероятность его коллизии стремится к нулю. Если расчет точных хэшей все-таки выявил различие, блок требует пересылки, иначе оставить его в покое.

Rsync поддерживает локальное копирование (в этом случае один процесс обсчитывает обе копии):

$> rsync -azv srcdir/* dstdir

Здесь a — это комбинированная опция, заменяющая набор -rlptgoD (то есть рекурсивно, сохраняя симлинки, права доступа, таймстемпы, группы, владельцев и специальные файлы девайсов); z — gzip компрессия; v — вывод дополнительной информации. Также можно синхронизироваться по сети. В этом случае rsync подключается к удаленной системе с помощью произвольного remote shell'а, запускает там свой аналог (на удаленной системе тоже должен присутствовать rsync), и они устанавливают взаимодействие между собой. По умолчанию используется все тот же ssh:

$> rsync -avz srcdir/* dstuser@dsthost.ru:~/dstdir

Rdiff-backup как комплексное решение

Опираясь на изложенные концепции, плавно перейдем к пакету rdiff-backup — к комплекту скриптов, написанных на языке python и использующих библиотеку librsync. К сожалению, ни сам пакет, ни librsync обычно не входят в стандартные дистрибутивы, посему придется скачать и поставить их самостоятельно. С другой стороны, эти действия достаточно тривиальны и нет смысла заострять внимание на них. Этот пакет умеет бэкапить и локально, и поверх ssh-транспорта:

$> rdiff-backup srcdir dstdir

$> rdiff-backup srcdir dstuser@dsthost.ru::dstdir

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

$> rdiff-backup -r now dstdir srcdir

Назад на стр. 062-066-3  Содержание  Вперед на стр. 062-066-5