Местонахождение его базы данных и параметры подключения к ней
Другую основную служебную информацию
Как должны с ним общаться другие компоненты
Как он должен общаться с другими компонентами
Какие задания он должен выполнять
Где он должен выполнять эти задания
Набор файлов и как с этими файлами надо работать при выполнении заданий
По каким расписаниям и с каким приоритетом выполнять задания
С какими томами и пулами (группами томов) работать при выполнении заданий
Как и куда сообщать о своем состоянии и работах
Основной файл конфигурации Bacula Director
Приступаем к основной настройке.
Файл конфигурации Bacula по умолчанию /etc/bacula/bacula-dir.conf имеет в себе более 300 строк, в которых много служебной информации и примеры. Нам все это не нужно.
Создадим папку куда сложим бекапы файлов конфигурации Bacula по умолчанию:
sudo mkdir /etc/bacula/backup-default-conf
Сделаем резервную копию основного файлов конфигурации:
Создадим новый основной файл конфигурации (пустой):
sudo touch /etc/bacula/bacula-dir.conf
Основная конфигурация Директора (Main conf)
при копировании проверяйте правильность указанных IP адресов
Director {
# имя Директора
Name = dir-dir
# какой порт слушать (используется значение по умолчанию)
DIRport = 9101
# путь к сценарию, содержащему sql запросы для работы с Bacula Catalog
QueryFile = "/etc/bacula/scripts/query.sql"
# папка в которой лежат статус-файлы Директора
WorkingDirectory = "/var/lib/bacula"
# pid-файл демона Директора
PidDirectory = "/run/bacula"
# Максимальное количество выполняемых заданий.
# (не рекомендуется одновременно запускать более одного задания)
Maximum Concurrent Jobs = 1
# Пароль Директора
Password = "dirpass"
# Конфигурация параметров уведомлений (описано в секции Messages)
Messages = Daemon
# fqdn имя или IP-адрес Директора
DirAddress = 192.168.244.70
}
Подключение к базе данных (Bacula Catalog)
Далее нам необходимо сконфигурировать подключение к БД, добавив в этот файл ( /etc/bacula/bacula-dir.conf ) следующее:
при копировании проверяйте правильность указанных IP адресов
Catalog {
# наименование Bacula Catalog
Name = BaculaCatalog
# адрес сервера БД PostgreSQL
DB Address = 192.168.244.70
# порт подключения на сервере
DB PORT = 5432
# имя базы данных на сервере PostgreSQL
dbname = bacula
# имя пользователя базы данных на сервере PostgreSQL
dbuser = bacula
# пароль пользователя базы данных на сервере PostgreSQL
dbpassword = bacula
}
Шаблонное задание (DefaultJob)
Шаблонное задание - это задание по умолчанию, параметры которого могут быть использованы другими заданиями.
Шаблонное задание необходимо создавать с максимальным набором параметров. В дальнейшем при создании заданий резервного копирования для клиентов достаточно будет просто сослаться за Шаблонное задание если все имеющиеся в нем параметры для выполнения соответствуют запросам резервного копирования для клиента. По необходимости, при создании заданий резервного копирования для клиента, некоторые параметры можно переопределить под конкретные потребности.
Логика работы такова: Bacula читает настройки из задания для клиента и если в нем есть отсылка на Шаблонное задание то параметры, если они не указаны в созданном задании берутся из Шаблона.
Далее нам необходимо сконфигурировать шаблонное задание, добавив в этот файл ( /etc/bacula/bacula-dir.conf ) следующее:
JobDefs {
# Имя задания
Name = "DefaultJob"
# Тип задания (backup, restore и т.д.)
Type = Backup
# Уровень бэкапа (Full, Incremental, Differential и т.п)
Level = Incremental
# Имя клиента на котором выполняется задание
Client = dir-fd
# Набор файлов для выполнения задания
FileSet = "Full Set"
# Расписание выполнения задания
Schedule = "WeeklyCycle"
# Файловое хранилище
Storage = stor-sd
# Поведение уведомлений
Messages = Standard
# Пул, куда будем писать бэкапы. Если мы хотим сделать отдельный пул для каждого клиента,
# или использовать префиксы, тогда пул указывается в задании для каждого клиента
# переопределяя тем самым эту настройку
Pool = File
# Буферизация атрибутов файлов
SpoolAttributes = yes
# Приоритет. Давая заданиям приоритеты от 1 (max) до 10 (min), можно регулировать последовательность их выполнения.
Priority = 10
# Файл хранит информацию откуда извлекать данные при восстановлении
Write Bootstrap = "/var/lib/bacula/%c.bsr"
}
Подключение к Хранилищу (Storage)
Так как хранилище бекапов у нас одно, то параметры работы с ним мы так же укажем в основном конфигурационном файле:
при копировании проверяйте правильность указанных IP адресов
Storage {
# имя Хранилища
Name = stor-sd
# fqdn имя или IP-адрес хранилища.
# Даже если хранилище на этой же машине "localhost" использовать не рекомендуется
Address = 192.168.244.80
# порт оставляем стандартный
SDPort = 9103
# пароль Хранилища
Password = "storpass"
# имя устройства хранения, описаное в файле bacula-sd.conf
Device = Autochanger1
# Должно соответствовать директиве Media Type ресурса Device настройки
Media Type = File1
# Максимальное количество выполняемых заданий.
# (не рекомендуется одновременно запускать более одного задания)
Maximum Concurrent Jobs = 1 }
Настройка групп томов Хранилища (Pool's)
Группа томов нашего хранилища одна, параметры работы с ней так же укажем в основном конфигурационном файле:
Pool {
# имя пула, указывается в заданиях резервного копирования
Name = File
# тип пула
Pool Type = Backup
# Bacula может автоматически очищать или перезаписывать тома пула
Recycle = yes
# период в течении которого информация о заданиях и файлах хранится в БД, по истечению периода эта информация удаляется
Volume Retention = 365 days
# удалять из БД записи о заданиях и файлах , срок хранения которых истёк в соответствии с Volume Retention
AutoPrune = yes
# максимальный объем тома в пуле
Maximum Volume Bytes = 50G
# максимальное количество томов в пуле
Maximum Volumes = 100
# с каких символов начинаются имена томов пула
Label Format = "Vol-"
}
Поведение уведомлений (Messages)
Далее мы опишем уведомления и так как их всего два типа, то они так же буду включены в основной файл конфигурации.
# Данная секция описывает стандартное поведение уведомлений
append = "/var/log/bacula/bacula.log" = all, !skipped
}
# Дальнейшие строчки подгружают все конфигурационные файлы из папок
# «job.d» «client.d» «fileset.d» «schedule.d»
@|"sh -c 'for f in /etc/bacula/job.d/*.conf ; do echo @${f} ; done'"
@|"sh -c 'for f in /etc/bacula/client.d/*.conf ; do echo @${f} ; done'"
@|"sh -c 'for f in /etc/bacula/fileset.d/*.conf ; do echo @${f} ; done'"
@|"sh -c 'for f in /etc/bacula/schedule.d/*.conf ; do echo @${f} ; done'"
Дополнительные конфигурационные файлы (Фрагментация конфигурации)
Чтобы было проще ориентироваться в конфигурационных файлах, вынесем часть конфигурации в отдельные файлы.
В моем случае ресурсы DefaultJob (Шаблонное задание), Storage (Хранилище), Pool (Пул томов) и Messages (Уведомления) в виду их небольшого количества описаны в основном конфигурационном файле. Остальные файлы конфигурации мы разложим по отдельным папкам и дадим им понятные названия. Делается это в первую очередь для того, чтобы избежать разрастания основного конфигурационного файла до больших размеров, а так же для гибкости настройки.
Создадим папки:
Папка в которой будут находиться файлы настроек расписаний «schedule.d»
sudo mkdir /etc/bacula/schedule.d/
Папка в которой будут находиться файлы настроек Клиентов «client.d»
sudo mkdir /etc/bacula/client.d/
Папка в которой будут находиться файлы настроек наборов файлов Клиентов «fileset.d»
sudo mkdir /etc/bacula/fileset.d/
Папка в которой будут находиться файлы настроек заданий «job.d»
sudo mkdir /etc/bacula/job.d/
Конфигурации расписании (Schedule's)
Создадим файл настроек расписания обработки файлов при выполнении заданий для нашего Клиента (пустой):
sudo touch /etc/bacula/schedule.d/dir-fd.conf
И приступим к его заполнению:
Schedule {
# Имя расписания
Name = "WeeklyCycle"
# Тип бекапа, периодичность и время запуска
Run = Full 1st sun at 23:05
Run = Differential 2nd-5th sun at 23:05
Run = Incremental mon-sat at 23:05
}
Создадим файл настроек расписания обработки файлов при выполнении заданий для Bacula Catalog (пустой):
sudo touch /etc/bacula/schedule.d/catalog.conf
И приступим к его заполнению:
Schedule {
# Имя расписания
Name = "WeeklyCycleAfterBackup"
# Тип бекапа, периодичность и время запуска
Run = Full sun-sat at 23:10
}
Конфигурация Клиента (Client)
Создадим файл настроек Клиента (пустой):
sudo touch /etc/bacula/client.d/dir-fd.conf
И приступим к его заполнению:
при копировании проверяйте правильность указанных IP адресов
Client {
# имя Клиента
Name = dir-fd
# fqdn имя или IP-адрес Клиента
Address = 192.168.244.90
# порт, который клиент слушает
FDPort = 9102
# имя PostgreSQL базы данных Bacula
Catalog = BaculaCatalog
# пароль Клиента
Password = "clientpass"
# период, в течении которого информация о ФАЙЛАХ хранится в базе данных
File Retention = 60 days
# период, в течении которого информация о ЗАДАНИЯХ хранится в базе данных
Job Retention = 6 months
# удалять записи из Bacula Catalog старше вышеуказанных значений
AutoPrune = yes
}
Конфигурации наборов файлов (FileSet's)
Создадим файл настроек наборов файлов Клиента:
sudo touch /etc/bacula/fileset.d/dir-fd.conf
И приступим к его заполнению:
FileSet {
# Имя Клиента
Name = "Full Set"
# Секция содержит пути к резервируемым файлам/каталогам
# Файл хранит информацию откуда извлекать данные при восстановлении
Write Bootstrap = "/var/lib/bacula/%n.bsr"
# Приоритет запуска после выполнения основного бекапа
Priority = 11
}
Для того, чтобы при выполнении резервного копирования не регистрировались ошибки вида:
14-июл 13:47 dir-dir JobId 3: shell command: run AfterJob "/etc/bacula/scripts/delete_catalog_backup"
14-июл 13:47 dir-dir JobId 3: Error: Runscript: AfterJob returned non-zero status=208. ERR=Нет такого файла или каталога
следует в файле /etc/bacula/job.d/catalog.conf закомментировать параметры RunBeforeJob и RunAfterJob, определяющие файлы сценариев, автоматически вызыветмых до и после выполнения резервного копирования (или создать эти файлы с пустыми сценариями для дальнейшего использования):
# скрипт выполняемый до основного задания
#RunBeforeJob = "/etc/bacula/scripts/make_catalog_backup.pl BaculaCatalog"
# скрипт выполняемый после основного задания
#RunAfterJob = "/etc/bacula/scripts/delete_catalog_backup"
Присвоение необходимых прав созданным файлам и папкам и назначение им владельца (chmod and chown on file's and dir's)
Далее нам необходимо присвоить необходимые права созданным файлам и папкам и назначить им владельца командами:
при копировании проверяйте правильность указанных IP адресов
Director {
# Имя Директора
Name = dir-dir
# Порт Директора
DIRport = 9101
# fqdn имя или IP-адрес Директора
address = 192.168.244.70
# пароль Директора
Password = "dirpass"
}
Перезапуск сервиса Директора
Необходимо перезапустить сервис командой:
sudo systemctl restart bacula-director.service
Если все настроено правильно, то никаких сообщений об ошибках мы не увидим. Если что то пошло не так - смотрим журналы Bacula и системы, проверяем права доступа к каталогам и к файлам самой Bacula на Директоре. Так же пониманию возникших ошибок хорошо помогает анализ вывода команды:
sudo journalctl -xe
Создаем сценарий script.sh со следующим содержимым:
Данный сценарий предоставлен в ознакомительных целях и подразумевает его использование пользователем исключительно на свой страх и риск.
Перед выполнением сценария присвоить ему маску 777 ( sudo chmod 777 script.sh )
Выполнять сценарий из под администратора системы с высоким МКЦ и с использованием механизма sudo ( sudo ./script.sh )
При копировании проверяйте правильность указанных IP адресов и синтаксис (точки, пробелы, слэши, кавычки, апострофы и тп - могут быть неправильно перенесены)
Данный сценарий лишь открывает на редактирование созданные файлы, а не заполняет их!!!