Bacula является ведущим решением в области резервного копирования и восстановления данных среди opensource проектов. На первый взгляд кажущаяся сложность в освоении растворяется по мере изучения принципов работы этой системы. Ну что же, вспомним знаменитое "админы делятся на две группы - тех, кто ещё не делают бекапы, и тех, кто уже делает", и приступим к процессу присоединения ко вторым.
Итак, что же такое Bacula и как её едят. Bacula - клиент-серверная система для централизованного управления резервным копированием, восстановлением и проверкой данных по сети. Клиенты имеются почти под все популярные ОС.

Bacula состоит из следующих компонентов(сервисов):
Установку и настройку компонент Director, Storage, File и Console мы будем производить на CentOS 6. Ещё один клиент будет установлен в Windows. В качестве базы данных для Bacula будем использовать MySQL. Строго говоря, компоненты(Director, Storage, MySQL) лучше устанавливать на разные сервера - всё зависит от нагрузок и имеющегося в наличие оборудования. В данном случае будем рассматривать "всё в одном", разница только в адресах, которые будут указаны в директивах конфигурационных файлов. Компоненты Console и Tray Monitor для удобства лучше установить на компьютере администратора(если у вас линукс как десктоп, конечно). И ещё, для более понятного восприятия всех параметров условимся называть Windows сервер server-buh, Linux сервер server-common, и сервер с установленными MySQL назовём server-backup. Ну что ж, приступим.
Установим bacula:
Теперь установим MySQL и выполним действия по первоначальной настройке(вы можете смело пропустить этот пункт, если у вас есть готовый рабочий сервер MySQL или вы знаете как это делать):
Теперь воспользуемся скриптами, идущими в комплекте с bacula, для первоначальной конфигурации базы(по запросу вводить пароль root от MySQL):
Теперь создадим пароль пользователю bacula MySQL:
На этом приготовления закончены, перейдём к правке конфигурационных файлов bacula, предварительно отметив, что все они состоят из объектов под названием "ресурсы".
bacula-clients.conf:
bacula-filesets.conf:
bacula-storages.conf:
bacula-pools.conf:
bacula-schedules.conf:
bacula-jobs.conf:
Конфигурационный файл текстовой консоли bconsole.conf состоит из двух ресурсов:
Конфигурационный файл графического инструмента Bacula Admin Tool (BAT) ничем не отличается от bconsole, за исключением названия - bat.conf. Его содержимое полностью аналогично bconsole.conf.
Вот как выглядит простенький конфигурационный файл tray-monitor.conf:

Напоследок, нам осталось запустить все компоненты. Но перед эти выполним проверку всех конфигурационных файлов на предмет ошибок:
Теперь добавим в автозагрузку наши сервисы:
Конечно же, самая полная информация по настройке содержится в официальной документации.
На этом всё. Берегите свою информацию ;)
Итак, что же такое Bacula и как её едят. Bacula - клиент-серверная система для централизованного управления резервным копированием, восстановлением и проверкой данных по сети. Клиенты имеются почти под все популярные ОС.

Bacula состоит из следующих компонентов(сервисов):
- Director управляет резервированием, восстановлением, верификацией и архивированием данных(заметьте, именно "управляет").
- Storage отвечает за чтение и запись данных на ленточные накопители, жесткие диски, оптические диски и любые другие физические носители.
- File(bacula client) устанавливается непосредственно на "бекапируемую" машину и предоставляет файловые атрибуты и резервируемые данные сервису Storage(предоставляет их по требованию Director).
- Catalog - база данных(MySQL, PostgreSQL или SQLlite), в которой Bacula хранит записи обо всех используемых томах, всех выполненных заданиях и сохраненных файлах.
- Console - программа для взаимодействия администратора с Bacula Director. Существует в двух видах: текстовая консоль bconsole и с графическим интерфейсом Bacula Administration Tool(BAT).
- Tray Monitor представляет из себя программу, позволяющую следить за текущим состоянием сервисов Director, Storage и File. Работает только в UNIX системах.
Установку и настройку компонент Director, Storage, File и Console мы будем производить на CentOS 6. Ещё один клиент будет установлен в Windows. В качестве базы данных для Bacula будем использовать MySQL. Строго говоря, компоненты(Director, Storage, MySQL) лучше устанавливать на разные сервера - всё зависит от нагрузок и имеющегося в наличие оборудования. В данном случае будем рассматривать "всё в одном", разница только в адресах, которые будут указаны в директивах конфигурационных файлов. Компоненты Console и Tray Monitor для удобства лучше установить на компьютере администратора(если у вас линукс как десктоп, конечно). И ещё, для более понятного восприятия всех параметров условимся называть Windows сервер server-buh, Linux сервер server-common, и сервер с установленными MySQL назовём server-backup. Ну что ж, приступим.
Установим bacula:
[root@server-backup ~]# yum install bacula-common bacula-storage-mysql bacula-director-common bacula-client bacula-storage-common bacula-director-mysql bacula-console
Консоль мы дополнительно установим и на сервере, она там не помешает.Теперь установим MySQL и выполним действия по первоначальной настройке(вы можете смело пропустить этот пункт, если у вас есть готовый рабочий сервер MySQL или вы знаете как это делать):
[root@server-backup ~]# mysql mysql-server
[root@server-backup ~]# service mysqld start
[root@server-backup ~]# mysql_secure_installation
.
.
Enter current password for root (enter for none):
.
.
Change the root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
.
Remove anonymous users? [Y/n] Y
.
Disallow root login remotely? [Y/n] Y
.
Remove test database and access to it? [Y/n] Y
.
.
Reload privilege tables now? [Y/n] Y
.
.
All done! If you've completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!
[root@server-backup ~]# chkconfig mysqld on
[root@server-backup ~]# service mysqld start
[root@server-backup ~]# mysql_secure_installation
.
.
Enter current password for root (enter for none):
.
.
Change the root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
.
Remove anonymous users? [Y/n] Y
.
Disallow root login remotely? [Y/n] Y
.
Remove test database and access to it? [Y/n] Y
.
.
Reload privilege tables now? [Y/n] Y
.
.
All done! If you've completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!
[root@server-backup ~]# chkconfig mysqld on
Теперь воспользуемся скриптами, идущими в комплекте с bacula, для первоначальной конфигурации базы(по запросу вводить пароль root от MySQL):
[root@server-backup ~]# cd /usr/libexec/bacula/
[root@server-backup bacula]# ./grant_mysql_privileges -p
[root@server-backup bacula]# ./create_mysql_database -p
[root@server-backup bacula]# ./grant_mysql_privileges -p
[root@server-backup bacula]# ./create_mysql_database -p
Теперь создадим пароль пользователю bacula MySQL:
[root@server-backup bacula]# mysql -u root -p
Enter password:
mysql>SET PASSWORD FOR bacula@localhost = PASSWORD('bacula');
mysql>SET PASSWORD FOR bacula@"%" = PASSWORD('bacula');
Enter password:
mysql>SET PASSWORD FOR bacula@localhost = PASSWORD('bacula');
mysql>SET PASSWORD FOR bacula@"%" = PASSWORD('bacula');
На этом приготовления закончены, перейдём к правке конфигурационных файлов bacula, предварительно отметив, что все они состоят из объектов под названием "ресурсы".
Bacula Director
Все свои настройки Director хранит в конфигурационном файле bacula-dir.conf. Как было сказано выше, все конфигурационные файлы состоят из ресурсов. Файл bacula-dir.conf состоит из следующих ресурсов:- Director - определяет все основные характеристики демона Director как сетевого приложения(имя, пароль, рабочий каталог и т.д.). Должен быть в единственном экземпляре в файле bacula-dir.conf.
- Job - определяет задание для выполнения Bacula-ой. Именно этот ресурс указывает что, куда, как и когда будет выполнятся.
- JobDefs - необязательный ресурс, предоставляет настройки по-умолчанию для ресурса Job.
- Schedule - задаёт расписание выполнения задания.
- FileSet - задаёт набор файлов, подлежащих резервному копированию.
- Client - этот ресурс определяет клиента, файлы которого будут резервироваться или восстанавливаться.
- Storage - используется для указания хранилища, в которое будут складываться резервные копии.
- Pool - определяет набор томов(кассеты или файлы) в которые будут записываться резервируемые данные.
- Catalog - задаёт параметры подключения к базе данных(MySQL, PostgreSQL или SQLlite).
- Messages - определяет как обрабатывать сообщения(информационный, об ошибках) и куда их направлять.
- Console - необязательный ресурс, применяется для разграничения прав доступа пользователей к bacula, в частности будет использоваться для показа статуса Director в tray-monitor.
Director {
Catalog {
Messages {
#этот ресурс будет нужен для подключения bacula-tray-monitor
Console {
#список файлов, в которые вынесены однотипные ресурсы
@/etc/bacula/bacula-dir/bacula-clients.conf
@/etc/bacula/bacula-dir/bacula-filesets.conf
@/etc/bacula/bacula-dir/bacula-storages.conf
@/etc/bacula/bacula-dir/bacula-pools.conf
@/etc/bacula/bacula-dir/bacula-schedules.conf
@/etc/bacula/bacula-dir/bacula-jobs.conf
Знак "@" позволяет подключать файл в конфигурационные файлы bacula, чем мы и воспользовались. Теперь обо всех подключённых файлах по порядку.#имя ресурса Director(это же имя будет в ресурсах Director всех сервисов)
Name = bacula-dir
#порт, на котором демон Director слушает запросы на соединение от Console
DIRport = 9101
#заранее подготовленный набор инструкций для команды query Console
QueryFile = "/etc/bacula/query.sql"
#рабочий каталог демона Director
WorkingDirectory = "/var/spool/bacula"
#каталог, в котором находится pid-файл
PidDirectory = "/var/run"
#максимальное количество одновременных заданий
Maximum Concurrent Jobs = 3
#пароль для соединения с Console(аналогичный пароль в ресурсе Director сервиса Console)
Password = "password-dir"
#куда направлять сообщения от Director
Messages = Standard
}Name = bacula-dir
#порт, на котором демон Director слушает запросы на соединение от Console
DIRport = 9101
#заранее подготовленный набор инструкций для команды query Console
QueryFile = "/etc/bacula/query.sql"
#рабочий каталог демона Director
WorkingDirectory = "/var/spool/bacula"
#каталог, в котором находится pid-файл
PidDirectory = "/var/run"
#максимальное количество одновременных заданий
Maximum Concurrent Jobs = 3
#пароль для соединения с Console(аналогичный пароль в ресурсе Director сервиса Console)
Password = "password-dir"
#куда направлять сообщения от Director
Messages = Standard
Catalog {
#имя ресурса
Name = BaculaBase
#имя базы
dbname = bacula
#пользователь, от имени которого соединяться с базой
user = bacula
#пароль пользователя
password = "bacula"
#адрес базы данных
DB Address = <database_ip>
#порт базы
DB Port = 3306
}Name = BaculaBase
#имя базы
dbname = bacula
#пользователь, от имени которого соединяться с базой
user = bacula
#пароль пользователя
password = "bacula"
#адрес базы данных
DB Address = <database_ip>
#порт базы
DB Port = 3306
Messages {
#имя ресурса
Name = Standard
#команда для отправки сообщений
mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r"
#куда отправлять сообщение
mail = username@domain.net = all, !skipped
#отправлять сообщение в консоль bacula (bconsole)
console = all, !skipped, !saved
#какие сообщения записывать в каталог(базу данных)
catalog = all, !skipped, !saved
#направлять сообщение в указанный файл
append = "/var/spool/bacula/log" = all, !skipped
}Name = Standard
#команда для отправки сообщений
mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r"
#куда отправлять сообщение
mail = username@domain.net = all, !skipped
#отправлять сообщение в консоль bacula (bconsole)
console = all, !skipped, !saved
#какие сообщения записывать в каталог(базу данных)
catalog = all, !skipped, !saved
#направлять сообщение в указанный файл
append = "/var/spool/bacula/log" = all, !skipped
#этот ресурс будет нужен для подключения bacula-tray-monitor
Console {
#имя Console(аналогичное имя должно быть в ресурсе Monitor сервиса Tray Monitor)
Name = bacula-mon
#пароль для подключения монитора tray monitor
Password = "password-mon"
#список команд, доступных для выполнения консолью
CommandACL = status, .status
}Name = bacula-mon
#пароль для подключения монитора tray monitor
Password = "password-mon"
#список команд, доступных для выполнения консолью
CommandACL = status, .status
#список файлов, в которые вынесены однотипные ресурсы
@/etc/bacula/bacula-dir/bacula-clients.conf
@/etc/bacula/bacula-dir/bacula-filesets.conf
@/etc/bacula/bacula-dir/bacula-storages.conf
@/etc/bacula/bacula-dir/bacula-pools.conf
@/etc/bacula/bacula-dir/bacula-schedules.conf
@/etc/bacula/bacula-dir/bacula-jobs.conf
bacula-clients.conf:
Client {
Client {
Client {
#имя ресурса(используется в ресурсе Job)
Name = server-buh-fd
#адрес клинта
Address = <server-buh_ip>
#порт, по которому связываться с клиентом
FDPort = 9102
#имя ресурса Catalog
Catalog = BaculaBase
#пароль для установления связи с клиентом(такой же пароль в ресурсе Director на клиенте)
Password = "password-fd"
}Name = server-buh-fd
#адрес клинта
Address = <server-buh_ip>
#порт, по которому связываться с клиентом
FDPort = 9102
#имя ресурса Catalog
Catalog = BaculaBase
#пароль для установления связи с клиентом(такой же пароль в ресурсе Director на клиенте)
Password = "password-fd"
Client {
Name = server-backup-fd
Address = <server-backup_ip>
FDPort = 9102
Catalog = BaculaBase
Password = "password-fd"
}Address = <server-backup_ip>
FDPort = 9102
Catalog = BaculaBase
Password = "password-fd"
Client {
Name = server-common-fd
Address = <server-common_ip>
FDPort = 9102
Catalog = BaculaBase
Password = "password-fd"
}Address = <server-common_ip>
FDPort = 9102
Catalog = BaculaBase
Password = "password-fd"
bacula-filesets.conf:
FileSet {
FileSet {
FileSet {
#имя ресурса(используется в ресурсе Job)
Name = "server-buh-files"
Include {
}Name = "server-buh-files"
Include {
Options {
#список файлов, подлежащих резервированию
File = "D:/"
}#вычислять цифровую подпись для всех сохраненных файлов
signature = MD5
#сжимать все сохранённые файлы
compression = GZIP7
#не обновлять время доступа к файлам при резервном копировании
noatime = yes
#шаблон для каталогов
WildDir = "*RECYCLE*"
WildDir = "*System Volume Information*"
#исключить всё, что соответствует шаблонам
exclude = yes
}signature = MD5
#сжимать все сохранённые файлы
compression = GZIP7
#не обновлять время доступа к файлам при резервном копировании
noatime = yes
#шаблон для каталогов
WildDir = "*RECYCLE*"
WildDir = "*System Volume Information*"
#исключить всё, что соответствует шаблонам
exclude = yes
#список файлов, подлежащих резервированию
File = "D:/"
FileSet {
Name = "server-backup-files"
Include {
}Include {
Options {
File = "/home/mysqldump.sql"
}signature = MD5
compression = GZIP7
noatime = yes
#сохранять UNIX ACL-ы
aclsupport = yes
}compression = GZIP7
noatime = yes
#сохранять UNIX ACL-ы
aclsupport = yes
File = "/home/mysqldump.sql"
FileSet {
Name = "server-common-files"
Include {
}Include {
Options {
File = "/docs"
}signature = MD5
compression = GZIP7
noatime = yes
aclsupport = yes
}compression = GZIP7
noatime = yes
aclsupport = yes
File = "/docs"
bacula-storages.conf:
Storage {
Storage {
Storage {
#имя ресурса(используется в ресурсе Job)
Name = server-buh-storage
#адрес хранилища
Address = <storage_ip>
#порт для соединения с демоном Storage для выполнения задания
SDPort = 9103
#пароль для подключения к сервису Storage(этот же пароль должен быть в ресурсе Director сервиса Storage)
Password = "password-sd"
#имя ресурса Device демона Storage
Device = server-buh-device
#тип носителя информации хранилища
#(точно такой должен быть в ресурсе Device c именем service-buh-device сервиса Storage)
Media Type = server-buh-files
#максимальное число одновременных заданий
Maximum Concurrent Jobs = 2
}Name = server-buh-storage
#адрес хранилища
Address = <storage_ip>
#порт для соединения с демоном Storage для выполнения задания
SDPort = 9103
#пароль для подключения к сервису Storage(этот же пароль должен быть в ресурсе Director сервиса Storage)
Password = "password-sd"
#имя ресурса Device демона Storage
Device = server-buh-device
#тип носителя информации хранилища
#(точно такой должен быть в ресурсе Device c именем service-buh-device сервиса Storage)
Media Type = server-buh-files
#максимальное число одновременных заданий
Maximum Concurrent Jobs = 2
Storage {
Name = server-common-storage
Address = <storage_ip>
SDPort = 9103
Password = "password-sd"
Device = server-common-device
Media Type = server-common-files
Maximum Concurrent Jobs = 2
}Address = <storage_ip>
SDPort = 9103
Password = "password-sd"
Device = server-common-device
Media Type = server-common-files
Maximum Concurrent Jobs = 2
Storage {
Name = server-backup-storage
Address = <storage_ip>
SDPort = 9103
Password = "password-sd"
Device = server-backup-device
Media Type = server-backup-files
Maximum Concurrent Jobs = 2
}Address = <storage_ip>
SDPort = 9103
Password = "password-sd"
Device = server-backup-device
Media Type = server-backup-files
Maximum Concurrent Jobs = 2
bacula-pools.conf:
Pool {
Pool {
Pool {
Pool {
Pool {
Pool {
Pool {
Pool {
Стоит отметить, что смена параметров в пулах и перезапуск демона Director применят их только для не созданных томов. Для уже созданных томов(к примеру, в процессе эксперимента вы меняете интервалы или дни выполнения бекапов) вам необходимо выполнить update в консоли bacula.#имя ресурса(используется в ресурсе Job или Schedule)
Name = server-buh-Daily
#тип пула
Pool Type = Backup
#шаблон имени файла с резервируемыми данными
LabelFormat = "server-buh-Daily-"
#повторно использовать тома
Recycle = yes
#начинать повторное использование с самых старых
Recycle Oldest Volume = yes
#автоочистка
AutoPrune = yes
#срок жизни записей о томе в базе данных
Volume Retention = 5 days
#максимальное количество томов в пуле
Maximum Volumes = 5
#максимальное количество заданий в одном томе
Maximum Volume Jobs = 1
}Name = server-buh-Daily
#тип пула
Pool Type = Backup
#шаблон имени файла с резервируемыми данными
LabelFormat = "server-buh-Daily-"
#повторно использовать тома
Recycle = yes
#начинать повторное использование с самых старых
Recycle Oldest Volume = yes
#автоочистка
AutoPrune = yes
#срок жизни записей о томе в базе данных
Volume Retention = 5 days
#максимальное количество томов в пуле
Maximum Volumes = 5
#максимальное количество заданий в одном томе
Maximum Volume Jobs = 1
Pool {
Name = server-buh-Weekly
Pool Type = Backup
LabelFormat = "server-buh-Weekly-"
Recycle = yes
Recycle Oldest Volume = yes
AutoPrune = yes
Volume Retention = 4 weeks
Maximum Volumes = 4
Maximum Volume Jobs = 1
}Pool Type = Backup
LabelFormat = "server-buh-Weekly-"
Recycle = yes
Recycle Oldest Volume = yes
AutoPrune = yes
Volume Retention = 4 weeks
Maximum Volumes = 4
Maximum Volume Jobs = 1
Pool {
Name = server-buh-Monthly
Pool Type = Backup
LabelFormat = "server-buh-Monthly-"
Recycle = yes
Recycle Oldest Volume = yes
AutoPrune = yes
Volume Retention = 1 month
Maximum Volumes = 2
Maximum Volume Jobs = 1
}Pool Type = Backup
LabelFormat = "server-buh-Monthly-"
Recycle = yes
Recycle Oldest Volume = yes
AutoPrune = yes
Volume Retention = 1 month
Maximum Volumes = 2
Maximum Volume Jobs = 1
Pool {
Name = server-common-Daily
Pool Type = Backup
LabelFormat = "server-common-Daily-"
Recycle = yes
Recycle Oldest Volume = yes
AutoPrune = yes
Volume Retention = 5 days
Maximum Volumes = 5
Maximum Volume Jobs = 1
}Pool Type = Backup
LabelFormat = "server-common-Daily-"
Recycle = yes
Recycle Oldest Volume = yes
AutoPrune = yes
Volume Retention = 5 days
Maximum Volumes = 5
Maximum Volume Jobs = 1
Pool {
Name = server-common-Weekly
Pool Type = Backup
LabelFormat = "server-common-Weekly-"
Recycle = yes
Recycle Oldest Volume = yes
AutoPrune = yes
Volume Retention = 4 weeks
Maximum Volumes = 4
Maximum Volume Jobs = 1
}Pool Type = Backup
LabelFormat = "server-common-Weekly-"
Recycle = yes
Recycle Oldest Volume = yes
AutoPrune = yes
Volume Retention = 4 weeks
Maximum Volumes = 4
Maximum Volume Jobs = 1
Pool {
Name = server-common-Monthly
Pool Type = Backup
LabelFormat = "server-common-Monthly-"
Recycle = yes
Recycle Oldest Volume = yes
AutoPrune = yes
Volume Retention = 1 month
Maximum Volumes = 2
Maximum Volume Jobs = 1
}Pool Type = Backup
LabelFormat = "server-common-Monthly-"
Recycle = yes
Recycle Oldest Volume = yes
AutoPrune = yes
Volume Retention = 1 month
Maximum Volumes = 2
Maximum Volume Jobs = 1
Pool {
Name = server-backup-Weekly
Pool Type = Backup
LabelFormat = "server-backup-Weekly-"
Recycle = yes
Recycle Oldest Volume = yes
AutoPrune = yes
Volume Retention = 2 weeks
Maximum Volumes = 2
Maximum Volume Jobs = 1
}Pool Type = Backup
LabelFormat = "server-backup-Weekly-"
Recycle = yes
Recycle Oldest Volume = yes
AutoPrune = yes
Volume Retention = 2 weeks
Maximum Volumes = 2
Maximum Volume Jobs = 1
Pool {
Name = Default
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 2 days
}Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 2 days
bacula-schedules.conf:
Schedule {
Schedule {
Schedule {
#имя ресурса(используется в ресурсе Job)
Name = "server-buh_files"
#время выполнения(также можно переопределять уровни, пулы и т.д.)
Run = Level=Full Pool=server-buh-Monthly 1st sun at 18:00
Run = Level=Differential Pool=server-buh-Weekly 2nd-5th sun at 18:00
Run = Level=Incremental Pool=server-buh-Daily mon-fri at 18:00
}Name = "server-buh_files"
#время выполнения(также можно переопределять уровни, пулы и т.д.)
Run = Level=Full Pool=server-buh-Monthly 1st sun at 18:00
Run = Level=Differential Pool=server-buh-Weekly 2nd-5th sun at 18:00
Run = Level=Incremental Pool=server-buh-Daily mon-fri at 18:00
Schedule {
Name = "server-fs_files"
Run = Level=Full Pool=server-common-Monthly 1st sun at 18:00
Run = Level=Differential Pool=server-common-Weekly 2nd-5th sun at 18:00
Run = Level=Incremental Pool=server-common-Daily mon-fri at 18:00
}Run = Level=Full Pool=server-common-Monthly 1st sun at 18:00
Run = Level=Differential Pool=server-common-Weekly 2nd-5th sun at 18:00
Run = Level=Incremental Pool=server-common-Daily mon-fri at 18:00
Schedule {
Name = "server-backup_mysql"
Run = Level=Full Pool=server-backup-Weekly sun at 05:00
}Run = Level=Full Pool=server-backup-Weekly sun at 05:00
bacula-jobs.conf:
JobDefs {
Job {
Job {
Job {
#этот ресурс нужен только восстановления файлов
Job {
#имя ресурса
Name = "DefaultJob"
#тип задания
Type = Backup
#куда направлять сообщения
Messages = Standard
#приоритет задания
Priority = 10
#куда записывать Bootstrap файл
Write Bootstrap = "/backups/bacula/%n.bsr"
#пул по-умолчанию
Pool = Default
}Name = "DefaultJob"
#тип задания
Type = Backup
#куда направлять сообщения
Messages = Standard
#приоритет задания
Priority = 10
#куда записывать Bootstrap файл
Write Bootstrap = "/backups/bacula/%n.bsr"
#пул по-умолчанию
Pool = Default
Job {
Name = "server-buh-backup"
JobDefs = "DefaultJob"
#имя клиента
Client = "server-buh-fd"
#набор файлов
FileSet="server-buh-files"
#куда складывать
Storage = "server-buh-storage"
#время выполнения
Schedule = "server-buh-files"
#активировать автоматическое выполнение
Enabled = yes
#перезапускать неудавшиеся задания высшего уровня
Rerun Failed Levels = yes
}JobDefs = "DefaultJob"
#имя клиента
Client = "server-buh-fd"
#набор файлов
FileSet="server-buh-files"
#куда складывать
Storage = "server-buh-storage"
#время выполнения
Schedule = "server-buh-files"
#активировать автоматическое выполнение
Enabled = yes
#перезапускать неудавшиеся задания высшего уровня
Rerun Failed Levels = yes
Job {
Name = "server-backup-backup"
JobDefs = "DefaultJob"
Client = "server-backup-fd"
FileSet="server-backup-files"
Storage = "server-backup-storage"
Schedule = "server-backup-files"
Enabled = yes
Rerun Failed Levels = yes
#выполнить перед заданием
ClientRunBeforeJob = "/home/mysqlbackup root Bynth9athtywbZ@"
#выполнить после задания
ClientRunAfterJob = "/bin/rm -rf /home/mysqldump.sql"
}JobDefs = "DefaultJob"
Client = "server-backup-fd"
FileSet="server-backup-files"
Storage = "server-backup-storage"
Schedule = "server-backup-files"
Enabled = yes
Rerun Failed Levels = yes
#выполнить перед заданием
ClientRunBeforeJob = "/home/mysqlbackup root Bynth9athtywbZ@"
#выполнить после задания
ClientRunAfterJob = "/bin/rm -rf /home/mysqldump.sql"
Job {
Name = "server-common-backup"
JobDefs = "DefaultJob"
Client = "server-common-fd"
FileSet="server-common-files"
Storage = "server-common-storage"
Schedule = "server-common-files"
Enabled = yes
Rerun Failed Levels = yes
}JobDefs = "DefaultJob"
Client = "server-common-fd"
FileSet="server-common-files"
Storage = "server-common-storage"
Schedule = "server-common-files"
Enabled = yes
Rerun Failed Levels = yes
#этот ресурс нужен только восстановления файлов
Job {
Name = "RestoreFiles"
Type = Restore
Client=server-backup-fd
FileSet=server-buh-files
Storage = server-buh-storage
Pool = Default
Messages = Standard
Where = /backups/restores
}Type = Restore
Client=server-backup-fd
FileSet=server-buh-files
Storage = server-buh-storage
Pool = Default
Messages = Standard
Where = /backups/restores
Bacula Storage
Конфигурационный файл Bacula Storage bacula-sd.conf также состоит из ресурсов:- Storage - содержит все основные настройки демона Storage.
- Director - определяет параметры подключения к демону Director. Возможно несколько экземпляров в одном файле - необходимо для мониторинга через bacula-tray.
- Device - определяет характеристики накопителя.
- Messages - определяет как обрабатывать сообщения(информационный, об ошибках) и куда их направлять.
Storage {
Director {
#ресурс для мониторинга с помощью Tray Monitor
Director {
Device {
Device {
Device {
Messages {
Заметьте, что несмотря на то, что все типы хранилищ одинаковые, все параметры MediaType должны быть различны, даже если у вас все типы хранилищ - файловые. Это связано с тем, что bacula хранит только записи MediaType в базе(касательно устройств хранения) и при восстановлении возможны проблемы, поскольку bacula выберет первое доступное устройство. Подробнее здесь.Name = bacula-sd
SDPort = 9103
WorkingDirectory = "/var/spool/bacula"
Pid Directory = "/var/run"
Maximum Concurrent Jobs = 20
}SDPort = 9103
WorkingDirectory = "/var/spool/bacula"
Pid Directory = "/var/run"
Maximum Concurrent Jobs = 20
Director {
#имя ресурса Director сервиса Director
Name = bacula-dir
#пароль в ресурсе Storage сервиса Director
Password = "password-sd"
}Name = bacula-dir
#пароль в ресурсе Storage сервиса Director
Password = "password-sd"
#ресурс для мониторинга с помощью Tray Monitor
Director {
Name = bacula-mon
Password = "password-sd-mon"
Monitor = yes
}Password = "password-sd-mon"
Monitor = yes
Device {
#имя ресурса в ресурсе Storage сервиса Director
Name = server-buh-device
#тип хранилища(должно совпадать с типом в ресурсе Storage с именем server-buh-device сервиса Director)
Media Type = server-buh-files
#имя каталога, куда сохранять резервные копии
Archive Device = /backups/bacula/server-buh
#автоматически маркировать тома
LabelMedia = yes;
Random Access = Yes;
#Монтировать автоматически
AutomaticMount = yes;
#Наше устройство не съёмное
RemovableMedia = no;
}Name = server-buh-device
#тип хранилища(должно совпадать с типом в ресурсе Storage с именем server-buh-device сервиса Director)
Media Type = server-buh-files
#имя каталога, куда сохранять резервные копии
Archive Device = /backups/bacula/server-buh
#автоматически маркировать тома
LabelMedia = yes;
Random Access = Yes;
#Монтировать автоматически
AutomaticMount = yes;
#Наше устройство не съёмное
RemovableMedia = no;
Device {
Name = server-fs-device
Media Type = server-common-files
Archive Device = /backups/bacula/server-fs
LabelMedia = yes;
Random Access = Yes;
AutomaticMount = yes;
RemovableMedia = no;
}Media Type = server-common-files
Archive Device = /backups/bacula/server-fs
LabelMedia = yes;
Random Access = Yes;
AutomaticMount = yes;
RemovableMedia = no;
Device {
Name = server-backup-device
Media Type = server-backup-files
Archive Device = /backups/bacula/server-backup
LabelMedia = yes;
Random Access = Yes;
AutomaticMount = yes;
RemovableMedia = no;
}Media Type = server-backup-files
Archive Device = /backups/bacula/server-backup
LabelMedia = yes;
Random Access = Yes;
AutomaticMount = yes;
RemovableMedia = no;
Messages {
Name = Standard
director = bacula-dir = all
}director = bacula-dir = all
Bacula Client(File daemon)
Конфигурационный файл Bacula Client bacula-fd.conf состоит из следующих ресурсов:- Director - определяет параметры подключения к демону Director. Возможно несколько экземпляров в одном файле - необходимо для мониторинга через bacula-tray.
- FileDaemon - содержит все основные настройки демона File.
- Messages - определяет как обрабатывать сообщения(информационный, об ошибках) и куда их направлять.
Director {
#ресурс для мониторинга с помощью Tray Monitor
Director {
FileDaemon {
Messages {
#имя ресурса Director сервиса Director
Name = bacula-dir
#пароль в ресурсе Client сервиса Director
Password = "password-fd"
}Name = bacula-dir
#пароль в ресурсе Client сервиса Director
Password = "password-fd"
#ресурс для мониторинга с помощью Tray Monitor
Director {
Name = bacula-mon
Password = "password-fd-mon"
Monitor = yes
}Password = "password-fd-mon"
Monitor = yes
FileDaemon {
#имя ресурса
Name = server-backup-fd
#порт для подключения
FDport = 9102
WorkingDirectory = /var/spool/bacula
Pid Directory = /var/run
Maximum Concurrent Jobs = 2
}Name = server-backup-fd
#порт для подключения
FDport = 9102
WorkingDirectory = /var/spool/bacula
Pid Directory = /var/run
Maximum Concurrent Jobs = 2
Messages {
Name = Standard
director = bacula-dir = all, !skipped, !restored
}director = bacula-dir = all, !skipped, !restored
Bacula Console
Как было сказано выше, Bacula Console может быть двух видов: текстовая bconsole(только nix-системы) и графическая BAT.Конфигурационный файл текстовой консоли bconsole.conf состоит из двух ресурсов:
- Director - определяет параметры подключения к демону Director. Возможно несколько экземпляров в одном файле - необходимо для мониторинга через bacula-tray.
- Console - опциональный ресурс, который служит для использования ACL-ов(несколько пользователей с разными правами) .
Director {
#имя ресурса Director сервиса Director
Name = bacula-dir
#порт, для подключения к сервису Director
DIRport = 9101
#адрес сервиса Director
address = <director_ip>
#пароль для соединения Console с сервисом Director
Password = "password-dir"
}Name = bacula-dir
#порт, для подключения к сервису Director
DIRport = 9101
#адрес сервиса Director
address = <director_ip>
#пароль для соединения Console с сервисом Director
Password = "password-dir"
Конфигурационный файл графического инструмента Bacula Admin Tool (BAT) ничем не отличается от bconsole, за исключением названия - bat.conf. Его содержимое полностью аналогично bconsole.conf.
Bacula Tray Monitor
Tray Monitor устанавливается на Unix-десктоп для удобного мониторинга происходящих ситуаций на сервисах Director, File, Storage. Представляет из себя апплет для среды Gnome/KDE. Конфигурационный файл tray-monitor.conf состоит из таких ресурсов:- Monitor - определяет атрибуты монитора, работающего в сети. Параметры, определённые здесь, должны быть настроены в дополнительных ресурсах Director конфигурационных файлов сервисов Storage и Client и в ресурсе Console конфигурационного файла Director.
- Director - определяет параметры подключения к сервису Director для его мониторинга.
- Client - определяет параметры подключения к сервису Client для его мониторинга.
- Storage - определяет параметры подключения к сервису Storage для его мониторинга.
Вот как выглядит простенький конфигурационный файл tray-monitor.conf:
Monitor {
Client {
Client {
Client {
Storage {
Director {
Для понимания взаимосвязей паролей и имен ресурсов есть наглядная картинка из официальной документации:#это имя должно быть в ресурсе Console сервиса Director и ресурсах Director сервисов Storage и File
Name = bacula-mon
#пароль в ресурсе Console сервиса Director
Password = "password-mon"
RefreshInterval = 5 seconds
}Name = bacula-mon
#пароль в ресурсе Console сервиса Director
Password = "password-mon"
RefreshInterval = 5 seconds
Client {
#имя, отображаемое в Tray Monitor
Name = server-buh
Address = <server-buh_ip>
FDPort = 9102
#пароль в ресурсе Director сервиса File(тот который с директивой Monitor=yes)
Password = "password-fd-mon"
}Name = server-buh
Address = <server-buh_ip>
FDPort = 9102
#пароль в ресурсе Director сервиса File(тот который с директивой Monitor=yes)
Password = "password-fd-mon"
Client {
#имя, отображаемое в Tray Monitor
Name = server-backup
Address = <server-backup_ip>
FDPort = 9102
Password = "password-fd-mon"
}Name = server-backup
Address = <server-backup_ip>
FDPort = 9102
Password = "password-fd-mon"
Client {
#имя, отображаемое в Tray Monitor
Name = server-common
Address = <server-backup_ip>
FDPort = 9102
Password = "password-fd-mon"
}Name = server-common
Address = <server-backup_ip>
FDPort = 9102
Password = "password-fd-mon"
Storage {
#имя, отображаемое в Tray Monitor
Name = storage
Address = <storage_ip>
SDPort = 9103
#пароль в ресурсе Director сервиса Storage(тот который с директивой Monitor=yes)
Password = "password-sd-mon"
}Name = storage
Address = <storage_ip>
SDPort = 9103
#пароль в ресурсе Director сервиса Storage(тот который с директивой Monitor=yes)
Password = "password-sd-mon"
Director {
#имя ресурса Director сервиса Director
Name = bacula-dir
DIRport = 9101
address = <director_ip>
}Name = bacula-dir
DIRport = 9101
address = <director_ip>

Напоследок, нам осталось запустить все компоненты. Но перед эти выполним проверку всех конфигурационных файлов на предмет ошибок:
[root@server-backup ~]# bacula-dir -t -c bacula-dir.conf
[root@server-backup ~]# bacula-sd -t -c bacula-sd.conf
[root@server-backup ~]# bacula-fd -t -c bacula-fd.conf
[root@server-backup ~]# bconsole -t -c bconsole.conf
[root@server-backup ~]# bat -t -c bat.conf
Вывод каждой должен быть пустой, иначе будет выдан отчёт о найденной ошибке.[root@server-backup ~]# bacula-sd -t -c bacula-sd.conf
[root@server-backup ~]# bacula-fd -t -c bacula-fd.conf
[root@server-backup ~]# bconsole -t -c bconsole.conf
[root@server-backup ~]# bat -t -c bat.conf
Теперь добавим в автозагрузку наши сервисы:
[root@server-backup ~]# service bacula-dir start && service bacula-sd start && service bacula-fd start
[root@server-backup ~]# chkconfig bacula-dir on
[root@server-backup ~]# chkconfig bacula-sd on
[root@server-backup ~]# chkconfig bacula-fd on
[root@server-backup ~]# chkconfig bacula-dir on
[root@server-backup ~]# chkconfig bacula-sd on
[root@server-backup ~]# chkconfig bacula-fd on
Конечно же, самая полная информация по настройке содержится в официальной документации.
На этом всё. Берегите свою информацию ;)
спасибо за подробную статью. Но есть важное замечание. Админы на самом деле делятся на ТРИ категории:
ОтветитьУдалить1. Те, кто ЕЩЕ не делает бэкапов.
2. Те, кто УЖЕ делает бэкапы.
и 3. Те, кто только ДУМАЕТ, что делает бэкапы.
Всегда проверяйте, нормально ли проходит восстановление из резервной копии
Вы абсолютно правы, тестовое восстановление нужно проводить как минимум один раз в месяц
УдалитьТоже развернул у себя на сервере инкрементное резервное копирование. http://plutov.by/post/incremental_backup
ОтветитьУдалитьЕсть документация по Bacula на русском - https://www.backup-solutions.ru/chto-takoe-bacula-enterprise/.
ОтветитьУдалитьMerkur 20C Snow Peak Titanium Flask
ОтветитьУдалитьThe Merkur 20C Snow titanium wedding band sets Peak Titanium Flask, ford focus titanium hatchback made in Solingen, Germany by buy metal online Solingen, provides a carbon steel frame that holds the weight of titanium car a standard used ford edge titanium razor.
Сисадмину На Заметку: Резервное Копирование Данных С Помощью Bacula >>>>> Download Now
ОтветитьУдалить>>>>> Download Full
Сисадмину На Заметку: Резервное Копирование Данных С Помощью Bacula >>>>> Download LINK
>>>>> Download Now
Сисадмину На Заметку: Резервное Копирование Данных С Помощью Bacula >>>>> Download Full
>>>>> Download LINK 9X