Eterbackup
Вводная
В связи с тем, что не удалось обнаружить существующее средство бэкапирования, работающее в условиях миллионов файлов, терабайтных объёмов, удалённых облачных хранилищ и не требующее больших ресурсов и использования платного или закрытого ПО, было принято решение разработать инструменты, обладающие следующими свойствами:
- упаковка файлов и их изменений в журналируемый многотомный архив (файлы которого не изменяются при внесении изменений в архив)
- сжатие данных
- поддержка дедубликации на уровне отдельных блоков
- не имеющего практических ограничений по размеру архивируемых данных
- поддержку локального архивирования
- поддержку удалённого архивирования (без хранения архивов локально)
- не требующего ротации и уничтожения данных в виду отсутствия повторов данных
- не создающего большого количества файлов на выходе
- не использующего базы данных или специальные необходимые для восстановления файлы с метаинформацией (то есть архив, данные из которого можно восстановить и руками)
- не создающего огромные файлы, в которых лежит всё
- предназначенное для ведения как быстродоступных бэкапов, так и долгоживущих с удалённым хранением
В качестве средства создания архивов был выбран ZPAQ. Для сохранения атрибутов файлов и каталогов применяется metastore, для сохранения специальных файлов (устройств, ссылок, pipe, socket) применяется pax.
Схемы использования
Популярные крайности архивируемых данных:
- миллионы мелких файлов (например, файлы сайтов, репозитории git с исходным кодом или SeaFile), разбросанные по тысячам каталогов
- файлы образов виртуальных систем (например, образы VirtualBox или VMWare), каждый из которых занимает гигабайты, а изменения в них происходят относительно небольшие
Использование
epmI eterbackup
eterpack --help eterbackup version 0.5 (c) Etersoft 2015 Run with /usr/bin/eterpack command [options] args Create/Update backup: $ eterbackup update /path/from /path/to Extract backup: $ eterbackup extract /path/backup /path/to Compare backup: $ eterbackup compare /path/backup /path/to Test backup: $ eterbackup test /path/backup Options: --depth N - set depth for subdirs (1 by default) (update only) --exclude name - exclude dir 'name' from packing (full path or level dir name) --execute command - execute 'command' after every archive --checksum - force checking file contains, not date only --noattribute - do not extra save owner/group, permissions and special files (use options strict in this order)
eterpack
eterpack формирует дерево каталогов, соответствующее исходному, но содержимое подкаталогов в нём заменено на архивы. Таким образом достигается существенное уменьшение количества обрабатываемых файлов, вместе с их упаковкой. Обрабатываются каталоги одного, указанного уровня. Это удобно, например, для архивирования домашних каталогов: для каждого каталога пользователя будет создан отдельный архив.
ZPAQ
Архиватор ZPAQ разрабатывается Мэттом Махони (Matt Mahoney) после серии экспериментов с архиватором w:PAQ. Страничка с описанием: http://mattmahoney.net/dc/zpaq.html.
Его отличительными особенностями является журналируемое архивирование и дополнение многотомных архивов (инкрементальное обновление), поддержка унесённых частей архива, дедубликация данных на основе анализа совпадающих блоков (для которых вычисляется SHA-1).
Формат ZPAQ не определяет алгоритм сжатия. Вместо этого в заголовок архива записывается на языке ZPAQL использованный для сжатия алгоритм, который выполняется при распаковке.
Используя алгоритм определения случайного содержимого, принимает решение не сжимать такие данные и экономит время.
Степень сжатия для наших целей значения не имеет.
К сожалению, он пока не имеет поддержки всех атрибутов файлов, а также символических ссылок, и других спец. файлов.
etertimemachine
Исходный код
https://github.com/vitlav/eterbackup
Благодарности
Мэтту Махони (Matt Mahoney) за создание алгоритмов PAQ и архиватор ZPAQ.
Chris Forno за его теорию о экспоненциально растущем интервале между резервными копиями и разработку log2rotate на Haskell.
Tomaz Solc за переписывание log2rotate на языке Python.
David Härdeman за разработку metastore, сохраняющего атрибуты файлов.
Przemysław Pawełczyk за продолжение разработки metastore.
Разработчикам pax, заменяющего tar и cpio.
Всем, кто создал среду, позволяющую запускать скрипты на Shell.