MicroBackup - краткое описание

MicroBackup -- это программа-менеджер резервного копирования для ОС Unix/Linux, написанная на языке Perl. Она осуществляет сохранение резервных копий произвольных данных путём вызова вспомогательных утилит: find, egrep и внешнего архиватора.

Преимущества

Причиной для написания "ещё одной программы..." для меня послужило отсутствие в существующих системах резервного копирования следующих характеристик:

Итак, во-первых, для отбора архивируемых файлов можно указывать не только их имена (а также любые параметры, которые поддерживает find), но и маску содержимого в виде регулярного выражения для egrep.

В одном из примеров эта возможность используется для архивации только тех файлов в каталоге /etc, которые содержат системное имя одного из членов группы wheel, то есть содержат следы ручного редактирования после инсталляции.

Из-за этого резервная копия не только становится существенно меньше, но и перестаёт конфликтовать с теми конфигурационными файлами, которые вручную не изменялись, но заменяются впоследствии при установке новых версий ПО.

Другим важным критерием для отбора может служить отсутствие архивируемого файла в любом из инсталляционных пакетов, или несовпадение даты файла на диске с записью в пакете. Эту работу выполняет утилита rpmuncovered, включённая в состав MicroBackup вместе с примером использования. Для её подключения к выводимому командой find списку файлов используется директива add_filter.

Вы можете подключать к обработке выводимого find'ом списка свои собственные фильтры. Например, некоторые файлы в /etc не входят в RPM-пакеты, а генерируются при установке, поэтому помещать их в архив смысла не имеет. Прекрасно:

find_point  /etc
add_filter  rpmuncovered -
add_filter  egrep -vf /etc/microbackup/ignore_etc_files
   

Во-вторых, кроме создания новых архивов MicroBackup умеет стирать старые. Как правило, чем больше проходит времени с момента создания архива, тем с меньшей частотой должны храниться копии. Допустим, состояние системы за последнюю неделю для нас важно с точностью до суток, за последний месяц - с точностью до недели, за последний год - с точностью до месяца, и далее - с точностью до года. Лишние резервные копии по мере устаревания MicroBackup будет удалять. Рассмотрим следующий пример настроек в файле-политике:

backup_type  snapshot
snapshot_policy  1 30  7 48  60 999
archive_name  /var/mbackup/something/some
find_point  /etc
Это означает:

Кроме режима snapshot (возможно, удачнее было бы назвать его "exhaustic"?), поддерживаются также режимы plain для безусловного вызова архиватора и incremental для архивации только тех файлов, которые обновлялись позже, чем самый свежий архив. Старые архивы в этих режимах не удаляются.

Категорически не рекомендуется держать в каталоге с резервными копиями посторонние файлы, у которых начальная часть пути совпадает с archive_name, потому что MicroBackup примет их за архивы. Также не рекомендуется изменять архивы после создания. И то, и другое приведёт к плачевным результатам в режимах incremental (при создании следующего архива часть исходных файлов может оказаться старше, чем один из изменённых архивов или посторонний файл) и snapshot (архив со сбитой датой или посторонний файл попадёт в чужой интервал проверки и будет либо удалён сам, либо спровоцирует удаление другого архива).

В-третьих, MicroBackup не пытается делать работу, которую хорошо умеют выполнять другие программы. Поиск выполняет find, в этом ему помогают egrep и внешние фильтры, далее наступает очередь архивирования. Оно может обладать спецификой как при чтении исходных файлов (например, базы Самбы требуется читать утилитой tdbdump), так и при записи архива (копирование на другой компьютер через SFTP, заверение цифровой подписью, сжатие и т.д.).

Как пример внешнего архиватора, в состав MicroBackup входит утилита diffbackup, создающая построчные списки отличий текущего содержимого файлов от последнего запомненного в архиве, а затем заменяющая архивную копию текущей для сравнения в следующий раз. В сопроводительных примерах она используется при создании резервных копий каталога /etc, списка установленных RPM-пакетов и списка программ в каталогах [/usr]/[s]bin.

Перед и после архивирования может потребоваться выполнение дополнительных команд -- например, остановка и запуск сервиса. В настроечной политике за это отвечают команды preexec и postexec. И тех, и других может быть несколько.

В частности, в сопроводительных примерах preexec используется для записи во временный файл списка членов группы wheel (затем он передаётся egrep), списка программ и списка установленных RPM (передаются в diffbackup). В postexec временные файлы удаляются.

Все настройки из конфигурационного файла доступны в выполняемых командах как переменные окружения:

postexec /usr/bin/pnupg --sign ${backup_name}${backup_suffix}

Если команда начинается c "@", она выполняется как инструкция Perl'a в контексте главной программы:

postexec @chdir("/tmp")
postexec echo $PWD

В-четвёртых, все настройки, что немаловажно, сведены в простые для редактирования текстовые файлы ("политики"). Одна политика содержит сейчас порядка 20 настроек, и практически все они элементарны. Откомментированный образец под названием microbackup_policy.full_sample включён в дистрибутив. Кроме того, имеется заготовка для ваших собственных политик в файле microbackup_policy.mini_sample.

Сейчас имя файла-политики передаётся MicroBackup'у в командной строке. В перспективе планируется поддержка глобальной политики, в которую будет вынесено большинство параметров по умолчанию, а также указание параметров непосредственно в командной строке.

В состав пакета входит сценарий для ежедневного запуска cron'ом. Этот сценарий выполняет все политики, хранящиеся в каталоге /etc/microbackup/policy).

Безопасность

По умолчанию архивы создаются с правами 0750. Политика и глобальный файл настроек могут содержать параметр umask (по умолчанию 027). Кроме того, администратор имеет возможность управлять доступом к архивам, вручную меняя права доступа к каталогу, в котором архивы создаются.

Каталог c настройками /etc/microbackup имеет права 750 root:root. Каталог для резервных копий /var/microbackup имеет права 2750 root:root (2750 = rwxr-s---), при этом подкаталог для сохранения последнего состояния файловой системы /var/microbackup/saveroot, используемый diffbackup'ом, имеет права 750 root:root.

Следует очень аккуратно следить за правами доступа к резервным копиям. Они должны быть не менее строгими, чем права доступа к оригиналам, чтобы исключить возможность утечки секретных сведений. Это же касается и профилей с настройками, потому что профили могут содержать пароли для подключения по сети и т.д.

Способ распространения

На данный момент собирается только RPM, и только под Alt Linux Master. Сборка под другие платформы приветствуется.

Что требуется для работы

  1. Cron -- из него запускается сценарий выполнения всех политик, найденных в /etc/microbackup/policy.
  2. Perl -- на нём написаны MicroBackup и rpmuncovered. Из дополнительных модулей используются POSIX::strftime и perl::RPM. Оба, естественно, входят в дистрибутив Alt Linux.
  3. Bash -- на нём написаны вспомогательные утилиты: group_members для распечатки имён членов заданной группы в формате для egrep (использует команду getent) и DiffBackup (использует diff ;-)
  4. find и egrep -- для формирования списка архивируемых файлов. egrep используется, только если политика содержит директиву grep_mask.
  5. Какой-нибудь архиватор. По умолчанию используется zip.

Естественно, список приведён для ознакомления, а не для инсталляции -- при инсталляции его проверкой будет заниматься RPM+APT ;-)

Отладка и тестирование

Ключ "-d" у большинства моих утилит включает отладочный режим, то есть наиболее важные команды (удаление файлов, запуск программ) не выполняются, а распечатываются. Этот ключ всегда должен указываться первым!

В дополнение к этому, главная программа microbackup имеет ключ --msglevel nn, где nn можно менять от 0 (минимальная диагностика) до 100 (максимальная).

Bugs & ToDo's

Автора!

Хостинг от uCoz