Доброго времени суток %habrauser%!
Как известно backup — must be! Но просто сделать архив данных — это еще не значит грамотный бэкап. Когда у наших клиентов начали появляться сервера на базе Calculate directory server встал вопрос о выборе средств для создания резервных копий данных. Поиск готовых решений ничего толкового не дал, поэтому пришлось писать самим.
Для начала скажу что нам прежде всего нужно от программы:
К п.1 у нас особые требования. Не все архиваторы умеют делать инкременты от уже инкрементального архива, а именно это нам и необходимо.
Программа написана на баше. Сам текст скрипта я здесь приводить не буду ибо он достаточно большой. Лучше прокомментирую дефолтный конфиг, так, по-моему, луше будет видно возможности программы.
Файл конфигурации содержит в себе блоки параметров: один обязательный «main» и дополнительные. Обязательный блок имеет строго определенное название «main» и описывает основные параметры архивации, здесь же можно задавать единые параметры архивации которые будут использованны для всех дополнительных блоков. Дополнительные блоки могут иметь произвольные имена. В них происходит описание параметров конкретных архивов. Порядок описания блоков не имеет значения, главное указать какой блок будет обработан следующим.
Приведеный ниже конфиг описывает следующую логику архивирования:
Для задания объектов подлежащих архивации, а так же исключенных из нее, используются обычные файлы списки, которые воспринимает tar. Эти два файла должны находиться в папке с конфигом. Так же в папке с конфигом находится папка «services». В эту папку можно кидать линки на службы, которые непосредственно перед архивацией будут останавливаться, а после снова запускаться. Так же туда можно кидать и исполняемые файлы, в которых можно описать дополнительные действия до и после архивации. Все эти файлы запускаются с параметром «stop» перед архивацией и «start» после архивации.
Для установки скачайте архив bbackup.tar и распакуйте его куда не жалко и запустите «setup.sh».
Сам запуск программы до безобразия прост:
bbackup.sh <файл конфига>
Например:
$ bbackup.sh /etc/defconf/main.conf
Но скрипт создавался для автоматизации, поэтому запихнем его в крон на ежедневное исполнение.
На этом пожалуй я и закончу. Всем удачных бэкапов и пусть они вам никогда не пригодятся!
P.S. Сразу приношу свои извенения за некоторую сумбурность и неструктурированность данного поста. Я уже давно хотел его написать, но все никак руки не доходили, посему это писалось в порыве энтузиазизма в ущерб сна %)
Как известно backup — must be! Но просто сделать архив данных — это еще не значит грамотный бэкап. Когда у наших клиентов начали появляться сервера на базе Calculate directory server встал вопрос о выборе средств для создания резервных копий данных. Поиск готовых решений ничего толкового не дал, поэтому пришлось писать самим.
Для начала скажу что нам прежде всего нужно от программы:
- Инкреметальность архивов
- Уверенность в наличии архивов
- Гибкость настройки
- Отчет о работе
К п.1 у нас особые требования. Не все архиваторы умеют делать инкременты от уже инкрементального архива, а именно это нам и необходимо.
Программа написана на баше. Сам текст скрипта я здесь приводить не буду ибо он достаточно большой. Лучше прокомментирую дефолтный конфиг, так, по-моему, луше будет видно возможности программы.
Файл конфигурации содержит в себе блоки параметров: один обязательный «main» и дополнительные. Обязательный блок имеет строго определенное название «main» и описывает основные параметры архивации, здесь же можно задавать единые параметры архивации которые будут использованны для всех дополнительных блоков. Дополнительные блоки могут иметь произвольные имена. В них происходит описание параметров конкретных архивов. Порядок описания блоков не имеет значения, главное указать какой блок будет обработан следующим.
Приведеный ниже конфиг описывает следующую логику архивирования:
- Первого числа каждого месяца делать полный архив данных (ежемесячный архив). Он будет помещен в папку "/backup/ARCH/Monthly/" с именем «fullsystem.tar». При удачном завершении старые архивы, старше 3х месяцев, будут удалены.
- Каждое воскресенье делать инкрементальный архив от ежемесячного (еженедельный архив). Будет помещен в папку "/backup/ARCH/Weekly/" с тем же именем. При удачном завершении старые архивы, старше 4х недель, будут удалены.
- Каждый день делать инкрементальный архив от еженедельного (ежедневный архив). Будет помещен в папку "/backup/ARCH/Dayly/" с тем же именем. При удачном завершении старые архивы, старше 8ми дней, будут удалены.
- Список файлов которые будут заархивированны указаны в файле «monthly.include», файлы которые следует исключить заданны в «monthly.exclude»
$ cat /etc/defconf/main.conf
# Блок основных параметров
# Здесь задаются основные настройки бекапирования, для более точной настройки могут
# быть определенны в разделах описания архива. Исключением являються параметры с меткой (m)
main {
# В конфигурационном файле допускается использование
# своих переменных.
DEF_ARCHIVE_PATH="/backup/ARCH"
# Путь к папке с бэкапами
ARCHIVE_PATH=$DEF_ARCHIVE_PATH
# Имя архива
ARCHIVE_NAME="fullsystem.tar"
# Количество последних архивов которые не будут удалены
REMOVE_DEPTH=3
# Дополнительные параметры tar (m)
TAR_ADD_PARAMS="-vR"
# Ошибки которые не будут прерывать выполнение скрипта
# (в конце обязателен пробел) (m)
TAR_ERR_EXCLUDE="0 "
# Настройки почты (не забудте настроить "/etc/ssmtp/ssmtp.conf",
# а так же установить почтовый клиент "mutt")
# Тема письма
SUBJECT="ITEq Error level: $ERROR_CODE"
# Получатель
MAILTO="logger@site.ru"
# Посылать ли лог по почте (all - отправлять всегда, error - только при ошибках,
# при любом другом значении письмо отправлено не будет)
SENDMAIL='all'
# Первый блок конфига бекапа который будет обработан
NEXT=montly
}
# Месячный бэкап
# Первый блок всегда описывает полый архив
# все последующие будут выполняться инкрементным
# архивом от предыдущего
montly {
ARCHIVE_PATH="$DEF_ARCHIVE_PATH/Monthly/"
# Задает номер месяца когда разрешено делать архивацию
# Возможные значения от 1 до 12; 0 - любой месяц (равносильно 1-12 и 0/1)
# Так же можно задавать значения в виде интервала (1-3) или
# кратного числа (0/3). Далее идут три эквивалентные записи
MONTH=0
#MONTH=1-12
#MONTH=0/1
# Задает день месяца когда разрешено делать архивацию
# Возможные значения от 1 до 31
# Варианты записи аналогичны заданию месяца
DAY=1
# Задает день недели когда разрешено делать архивацию
# Возможные значения от 1 до 7 (1 - понедельник)
# Варианты записи аналогичны заданию месяца и дня месяца
DAY_OF_WEEK=0
# Задает имя файла в котором перечисляються объекты подлежащие архивации
TO_ARCHIVE_FILE_LIST="monthly.include"
# Задает имя файла с объектами исключенными из архива
EXCLUDE_FROM_ARCHIVE="monthly.exclude"
# Указываеться количество хранимых архивов
REMOVE_DEPTH=3
# Задает секцию с описанием следующего архива
NEXT=weekly
}
# Недельный бэкап
weekly {
ARCHIVE_PATH="$DEF_ARCHIVE_PATH/Weekly/"
MONTH=0
DAY=0
DAY_OF_WEEK=7
TO_ARCHIVE_FILE_LIST="monthly.include"
EXCLUDE_FROM_ARCHIVE="monthly.exclude"
REMOVE_DEPTH=4
NEXT=dayly
}
#Ежедневный бэкап
dayly {
ARCHIVE_PATH="$DEF_ARCHIVE_PATH/Dayly/"
MONTH=0/1
DAY=0
DAY_OF_WEEK=0
TO_ARCHIVE_FILE_LIST="monthly.include"
EXCLUDE_FROM_ARCHIVE="monthly.exclude"
REMOVE_DEPTH=8
NEXT=none
}
Для задания объектов подлежащих архивации, а так же исключенных из нее, используются обычные файлы списки, которые воспринимает tar. Эти два файла должны находиться в папке с конфигом. Так же в папке с конфигом находится папка «services». В эту папку можно кидать линки на службы, которые непосредственно перед архивацией будут останавливаться, а после снова запускаться. Так же туда можно кидать и исполняемые файлы, в которых можно описать дополнительные действия до и после архивации. Все эти файлы запускаются с параметром «stop» перед архивацией и «start» после архивации.
Для установки скачайте архив bbackup.tar и распакуйте его куда не жалко и запустите «setup.sh».
Сам запуск программы до безобразия прост:
bbackup.sh <файл конфига>
Например:
$ bbackup.sh /etc/defconf/main.conf
Но скрипт создавался для автоматизации, поэтому запихнем его в крон на ежедневное исполнение.
echo -e "#!/bin/sh\n/sbin/bbackup.sh /etc/bbackup/defconf/main.conf">/etc/cron.daily/bbackup.sh
На этом пожалуй я и закончу. Всем удачных бэкапов и пусть они вам никогда не пригодятся!
P.S. Сразу приношу свои извенения за некоторую сумбурность и неструктурированность данного поста. Я уже давно хотел его написать, но все никак руки не доходили, посему это писалось в порыве энтузиазизма в ущерб сна %)