Eterbackup

Материал из Etersoft wiki
Перейти к навигацииПерейти к поиску

Вводная

В связи с тем, что не удалось обнаружить существующее средство бэкапирования, работающее в условиях миллионов файлов, терабайтных объёмов, удалённых облачных хранилищ и не требующее больших ресурсов и использования платного или закрытого ПО, было принято решение разработать инструменты, обладающие следующими свойствами:

  • упаковка файлов и их изменений в журналируемый многотомный архив (файлы которого не изменяются при внесении изменений в архив)
  • сжатие данных
  • поддержка дедубликации на уровне отдельных блоков
  • не имеющего практических ограничений по размеру архивируемых данных
  • поддержку локального архивирования
  • поддержку удалённого архивирования (без хранения архивов локально)
  • не требующего ротации и уничтожения данных в виду отсутствия повторов данных
  • не создающего большого количества файлов на выходе
  • не использующего базы данных или специальные необходимые для восстановления файлы с метаинформацией (то есть архив, данные из которого можно восстановить и руками)
  • не создающего огромные файлы, в которых лежит всё
  • предназначенное для ведения как быстродоступных бэкапов, так и долгоживущих с удалённым хранением

В качестве средства создания архивов был выбран 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.

Ссылки