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
Кроме режима 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. Сборка под другие платформы приветствуется.
Естественно, список приведён для ознакомления, а не для инсталляции -- при инсталляции его проверкой будет заниматься RPM+APT ;-)
Ключ "-d" у большинства моих утилит включает отладочный режим, то есть наиболее важные команды (удаление файлов, запуск программ) не выполняются, а распечатываются. Этот ключ всегда должен указываться первым!
В дополнение к этому, главная программа microbackup имеет ключ --msglevel nn, где nn можно менять от 0 (минимальная диагностика) до 100 (максимальная).