Рано или поздно перед любым системным администратором встает задача создания резервных копий. Решать ее можно по разному: можно делать резервные копии собственноручно, можно автоматизировать работу и написать подходящие скрипты, а можно использовать существующее ПО.
Анализ рынка показал что систем резервного копирования в мире СПО как кот наплакал, а находящихся в актуальном состоянии и того меньше, посему непродолжительным размышлением была выбрана система резервного копирования - Bacula.
По двум причинам:
- находится в актуальном состоянии
- является изначально свободной
- позволяет выполнять скрипты перед началом копирования и после завершения
Обзор:
Bacula - это набор компьютерных программ, которые позволяют системному администратору управлять резервным копированием, восстановлением из копий различных данных в сети с различных компьютеров.
Структура:
Bacula Director - центральный элемент системы, который управляет всеми остальными компонентами.
Bacula Console - инструмент управления.
Bacula Storage - управляет чтением и записью файлов на устройствах хранения.
Catalog - соединение, запись и выборка из БД.
Bacula File - клиент.
Расположение файлов конфигурации:
/etc/bacula/
Расположение скриптов создания структуры БД:
/usr/share/bacula-director
Расположение примеров конфигурационных файлов:
/usr/share/bacula-common/defconfig/
Особенности:
Наличие как сервера так и клиента под большое число различных ОС.
Установка сервера:
Установку будем производить на Ubuntu 12.04 x86_64, в качестве базы данных будем использовать MySQL.
1. Установка MySQL:
sudo apt-get install mysql-client mysql-common mysql-server
2. Установка Bacula:
sudo apt-get install bacula bacula-common bacula-common-mysql bacula-console bacula-director-common bacula-director-mysql bacula-sd bacula-sd-mysql bacula-server
3. Установка консоли управления:
sudo apt-get install bacula-console bacula-console-qt
Установка клиента:
На клиенте необходимо установить лишь один пакет - bacula-client:
sudo apt-get install bacula-client
Пример настройки:
При настройки Bacula главное правильно задать пароли и имена в различных секциях,
будьте внимательны и осторожны!!! Не запутаться с именами и паролями от секций поможет документация, там есть схема (стр. 140 или http://www.bacula.org/5.2.x-manuals/en/main/main/Customizing_Configuration_F.html#SECTION002240000000000000000), смотрите внимательно! Настройку будем производить поэтапно, сначала настроим Bacula Director (файл конфигурации bacula-dir.conf), потом Bacula Storage (файл конфигурации bacula-sd.conf), далее настроим Bacula Console (файл конфигурации bconsole.conf) и напоследок настроим клиента Bacula File (файл конфигурации bacula-fd.conf на клиенте). Таким образом понадобятся две машины (можно и на одной, но так не интересно): сервер и клиент.
Итак начнем.
!!! Внимание: Перед началом настройке сделайте резервные копии конфигурационных файлов, т.к. статья предполагает настройку с "чистого листа"!!!
В файле
/etc/bacula/bacula-dir.conf нам нужно будет определить следующие секции:
- Director - определяет имя Director'а и пароль для управления с консоли
- Messages - отправка и логирование сообщений
- Pool
- Storage - определяет устройство хранения: физическое или файл на диске
- Catalog - описывает подключение к базе данных
- Client - описывает клиента
- Job - определяет задачи копирования/восстановления, по работе на клиента
- FileSet - определяет набор файлов для резервного копирования
- Schedule - определяет расписание запуска работ (Job)
Поехали!
1. Определяем секцию Director:
Director {
#уникальное имя директора
Name = bacula-serv
#порт, который будет слушать директор
DIRport = 9101
QueryFile = "/etc/bacula/scripts/query.sql"
WorkingDirectory = "/var/lib/bacula"
PidDirectory = "/var/run/bacula"
#максимальное кол-во одновременно запущенных работ
Maximum Concurrent Jobs = 10
Password = "<пароль>"
Messages = Daemon
DirAddress = <IP - адресс сервера>
}
!!! Внимание: в дальнейшем имя директора нужно будет указать в секции Director в файлах bacula-sd.conf, bacula-fd.conf и bconsole.conf!!!
2. Определяем секцию Messages:
Messages {
Name = Daemon
mailcommand = "/usr/sbin/bsmtp -f \"\(Bacula) \<%r\>\" -s \"Bacula daemon message\" %r"
mail = root@localhost = alert,error,fatal,terminate, !skipped
console = all, !skipped, !saved
append = "/var/lib/bacula/log" =all, alert, error, fatal, terminate, !skipped
}
Messages {
Name = Standart
director = backup-dir = all
}
3. Определяем секцию Pool:
Pool {
Name = bgb
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 90 days
Maximum Volume Bytes = 3G
Maximum Volumes = 3
LabelFormat = "Vol"
}
4. Определяем секцию Storage:
Storage {
Name = BGB-F
Password = "<пароль для storage>"
Address = <IP - адресс сервера>
SDPort = 9103
Device = BGB-ST
Media Type = File
}
5. Определяем секцию Catalog:
Catalog {
Name = MyCatalog
dbname = bacula; DB Address = "127.0.0.1"; user = bacula; password = "123456"
#dbname - имя базы данных
#DB Address - адрес сервера с БД
#user - пользователь под которым соединяемся с БД
#password - пароль для подключения к БД
}
6. Определяем секцию Client:
Client {
#уникальное имя клиента
Name = client-fd
Address =<IP - адрес кл>
FDPort = 9102
#указываем имя Catalog, описанного выше
Catalog = MyCatalog
Password = "<пароль для клиента>"
File Retention = 45 days
Job Retention = 90 days
AutoPrune = yes
}
7. Определяем секцию FileSet:
FileSet {
#уникальное имя
Name = "bgb-set"
Include {
Options {
signature = MD5
}
#в нашем примере будем бэкапить лишь один каталог - /etc
File = /etc
}
}
8. Определяем секцию Schedule:
Schedule {
Name = "DaylyFullBGBBackup"
Run = Full mon-sat at 16:40
}
9. Определяем секцию Job:
Job {
Name = "Backup"
Type = Backup
Level = Full
#указываем имя клиента для которого будет выполняться работа
Client = client-fd
#указываем имя набора файлов для копирования
FileSet = "bgb-set"
#указываем имя хранилища
Storage = BGB-F
#указываем имя пула
Pool = bgb
Messages = Standart
#указываем имя расписания
Schedule = "DaylyFullBGBBackup"
Write Bootstrap = "/var/lib/bacula/bgb.bsr"
}
В файле
/etc/bacula/bacula-sd.conf нам нужно будет определить следующие секции:
- Storage - определяет демона управления хранением
- Director - определяет имя директора и пароль
- Device - описывает характеристики устройства хранения
- Messages - отправка и логирование сообщений
Поехали!
1. Определяем секцию Storage:
Storage {
Name = backup-sd
WorkingDirectory = "/var/lib/bacula"
Pid Directory = "/var/run/bacula"
SDPort = 9103
SDAddress = <IP - адресс сервера>
Maximum Concurrent Jobs = 1
}
2. Определяем секцию Director:
Director {
#имя, данное директору, в секции Director файла bacula-dir.conf
Name = bacula-serv
#пароль берем из секции Storage файла bacula-dir.conf
Password = "StorePass"
}
3. Определяем секцию Device:
Device {
#имя берем из секции Storage, поле Device файла bacula-dir.conf
Name = BGB-ST
#берем значение из секции Storage, поле Media Type файла bacula-dir.conf
Media Type = File
Archive Device = /home/bacula/backup/
LabelMedia = yes;
Random Access = yes;
AutomaticMount = yes;
RemovableMedia = no;
AlwaysOpen = no;
}
4. Определяем секцию Messages:
Messages {
Name = Standart
director = bacula-serv = all
}
В файле
/etc/bacula/bacula-fd.conf нам нужно будет определить следующие секции:
- Director - определяет имя директора и пароль
- FileDaemon - описывает собственно клиента
- Messages - отправка и логирование сообщений
Поехали!
1. Определяем секцию Director:
Director {
#имя, данное директору, в секции Director файла bacula-dir.conf
Name = bacula-serv
#пароль берем из секции Client файла bacula-dir.conf
Password = "FdPass"
}
2. Определяем секцию FileDaemon:
FileDaemon {
Name = client-fd
FDport = 9102
WorkingDirectory = /usr/lib/bacula
Pid Directory = /var/run/bacula
FdAddress = <IP - адрес клиента>
Maximum Concurrent Jobs = 2
}
3. Определяем секцию Messages:
Messages {
Name = Standart
director = bacula-serv = all, !skipped, !restored
append = "/var/log/bacula/" = all, error, alert, warning,!skipped
}
Осталось запустить демоны:
bacula-dir и bacula-sd на сервере,и bacula-fd на клиенте.