воскресенье, 23 ноября 2008 г.

Backup Parts - модульная система резервного копирования

Введение

В этой статье рассматривается подход при котором система резервного копирования строится по модульному принципу. Модули можно выборочно подключать и комбинировать произвольным образом.

Описываемая система Backup Parts (BP) представляет из себя набор Shell-скриптов. Принцип работы BP очень прост:
  • Запустить пред-задания из директории before.d
  • Создать tarball с данными
  • Запустить пост-задания из директории after.d
Для большей гибкости, в директориях before.d и after.d располагаются не сами задания, а символические ссылки на них. Запуск пред- и пост-заданий осуществляется при помощи утилиты run-parts(8). Порядок запуска определяется двузначным числовым префиксом в имени символической ссылки.

Таким образом, система BP позволяет выполнить определенную работу как до, так и после создания резервной копии. Пред-задание, к примеру, может подготовить дамп базы данных, а пост-задание - записать его на DVD или сохранить на FTP-сервере.

Установка и настройка

Скачать BP можно отсюда. Также открыт доступ через SVN:
svn co http://opensvn.csie.org/bp/trunk bp-dev
svn co http://opensvn.csie.org/bp/tags/r10 bp-1.0
Наконец, с содержимым SVN-репозитория можно ознакомиться и не загружая саму программу.

Комплектация программы:
  • bp.sh - главный скрипт;
  • bp.conf - конфигурация программы;
  • email_last_error.sh - отправка отчета об ошибке;
  • add_symlink.sh - скрипт для назначения заданий;
  • scripts/ - директория для модулей;
  • scripts/rotate_backups.sh - модуль ротации резервных копий;
  • scripts/burn_cd.sh - модуль записи данных на CD/DVD;
  • before.d/ - директория для пред-заданий;
  • after.d/ - директория для пост-заданий;
  • log/ - директория для логов.
Установить программу можно в любую директорию. После установки следует отредактировать пути в конфигурационном файле bp.conf. Настройки из конфигурационного файла будут доступны модулям как переменные окружения. Параметры, специфичные для конкретных модулей, задаются прямо внутри соответствующих скриптов.

Следующим этапом настройки следует назначить пред- и пост-задания. Это можно сделать при помощи скрипта add_symlink.sh:
./add_symlink.sh
1) burn_cd.sh
2) fail.sh
3) rotate_backups.sh
Select script: 3
1) BEFORE
2) AFTER
Select script type: 2
Enter script weight [00..99]: 20
`./after.d/20_rotate_backups.sh' -> `../scripts/rotate_backups.sh'
1) burn_cd.sh
2) fail.sh
3) rotate_backups.sh
Select script:
^C
Bye.
На этом этап настройки завершен. Теперь можно запустить скрипт bp.sh и проверить результат работы. Весь вывод от запускаемых программ перенаправляется в лог. После завершения работы пустые логи автоматически удаляются.

Запуск по расписанию

Вот пример настройки Cron-а для запуска BP по расписанию:
PATH=/bin:/usr/bin:/path/to/bp
MAILTO=admin@domain.tld
# min(0-59) hours(0-23) day(1-31) month(1-12) dow(0-7) command
0 3 * * * bp.sh || email_last_error.sh
Если bp.sh завершится с ошибкой, то email_last_error.sh отправит ее описание по адресу admin@domain.tld.

Ротация резервных копий

Ротацию резервных копий можно организовать с помощью модуля rotate_backups.sh. По умолчанию, будут поддерживаться последние 10 файлов. При необходимости это значение можно переопределить.

Запись на CD/DVD

Для записи резервных копий на CD/DVD диски служит модуль burn_cd.sh. В модуле используются утилиты mkisofs(1) и cdrecord(1) из пакета Cdrtools.

Нужного мне модуля нет!

Так напишите его! Создание нового модуля и подключение его к системе не представляет особых сложностей: достаточно написать программу на любом удобном для вас языке программирования, разместить ее в директории scripts/ и назначить в качестве пред- или пост-задания.

Заключение

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

0 коммент.:

Отправить комментарий