Bacula: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
 
(не показано 70 промежуточных версий 10 участников)
Строка 4: Строка 4:
Если требуется создавать простую резервную копию — возможно, достаточно просто {{pkg|tar}}, {{pkg|rsync}} или несложных систем вроде {{pkg|rdiff-backup}} или {{pkg|bontmia}}. Но если надо работать с несколькими клиентами, стораджами, наборами данных, расписаниями бэкапа — лучше сразу посмотреть на {{pkg|bacula}}.
Если требуется создавать простую резервную копию — возможно, достаточно просто {{pkg|tar}}, {{pkg|rsync}} или несложных систем вроде {{pkg|rdiff-backup}} или {{pkg|bontmia}}. Но если надо работать с несколькими клиентами, стораджами, наборами данных, расписаниями бэкапа — лучше сразу посмотреть на {{pkg|bacula}}.


== Дистрибутив ==
== Подводные грабли ==
Существует бета-версия дистрибутива Bran Backup, созданная Станиславом Иевлевым (inger@) и Виталием Кузнецовым (vitty@). Она представляет собой удобный инсталятор Bacula на базе ALT Linux.
Перед подъёмом боевой бакулы есть смысл хотя бы неделю потренироваться на учебной установке; хорошо бы при этом заметить такой момент как настройка VolumeRetention и Recycle/AutoPrune, иначе рано или поздно настанет день, когда единственный здоровенный том подойдёт к концу и сделать с этим ничего не получится, потому что bacula их _только_ дописывает и никогда не начинает перезаписывать место в томе, которое было занято уже удалёнными заданиями.  Стоит делать небольшие (пусть десятки гигов, а не терабайты) тома и наладить их автоматизированный оборот.
Дистрибутивы для различных архитектур лежат [http://beta.altlinux.com/backup-server/ здесь].
В настоящее время статус этих версий: Бета
=== Планируемые доработки ===
* Доработать branding
* Реализовать возможность удобной настройки шифрования передаваемых данных и получившихся архивов
* Реализовать возможность восстановления из архива


== Базовая настройка Bacula ==
== Базовая настройка Bacula ==
Строка 17: Строка 11:
Установим необходимые пакеты:<br>
Установим необходимые пакеты:<br>
На сервере:
На сервере:
<pre># apt-get install bacula7-common bacula7-console bacula7-director-common bacula7-director-mysql bacula7-storage mt-st</pre>\
<pre># apt-get install bacula13-common bacula13-console bacula13-director-common bacula13-director-mysql bacula13-storage mt-st</pre>
На клиенте:
На клиенте:
<pre># apt-get install bacula7-client</pre>
<pre># apt-get install bacula13-client</pre>
{{Attention|Если у Вас включен SELinux, то на время настройки выключите его}}
{{Attention|Если у Вас не запускаются сервисы Bacula с ошибкой Cannot not open pid file. См. [https://bugzilla.altlinux.org/33645 Bug 33645]}}
Для исправления запуска сервисов ([https://bugzilla.altlinux.org/33645 Bug 33645]) необходимо привести файл {{path|/lib/tmpfiles.d/bacula.conf}} к следующему виду:
<pre>d /var/run/bacula 0775 root bacula -</pre>
И перезагрузить сервер.
{{Attention|Если у Вы используете 5 версию Bacula то все файлы с описаниями задач, расписаний, списков файлов и т.д. необходимо добавлять в конфигурационные файлы сервисов с помощью такой строки: '''@/etc/bacula/job/bacula.conf'''}}
=== Настройка базы данных MySQL ===
=== Настройка базы данных MySQL ===
Запустим сервис и добавим его в автозагрузку:
Если вы хотите подключиться к уже имеющемуся серверу БД MySQL. Вы можете использовать скрипты расположенные в
<tt>/usr/share/bacula/scripts</tt>. Данные скрипты не связаны и не обращаются за параметрами указанными в bacula-dir.conf в вашем <tt>/etc/bacula</tt>, поэтому используйте данные скрипты следующим образом. Например, если вы хотите создать табличную структуру в базе данных по умолчанию на сервере 199.199.199.199, то скрипт make_mysql_tables нужно запускать так:
  ./make_mysql_tables -u bacula -p bacula -h 199.199.199.199
Аналогично вы можете использовать и все остальные скрипты в папке <tt>/usr/share/bacula/scripts</tt>
 
Далее мы продолжим настраивать MySQL на локальном сервере. Процесс запуска и настройки MySQL сервера описан [[MySQL|тут]]<br>
 
Запустим сервер MySQL и добавим его в автозагрузку:
<pre># systemctl start mysqld
<pre># systemctl start mysqld
# systemctl enable mysqld</pre>
# systemctl enable mysqld</pre>
Подключимся к MySQL:
В bacula присутствуют скрипты для создания базы, пользователя и таблиц.<br>
<pre># mysql -u root -p</pre>
Для того чтобы задать пароль для пользователя bacula необходимо отредактировать следующую строку в файле {{path|/usr/share/bacula/scripts/grant_mysql_privileges}}:
Создадим базу bacula:
<pre>...
<pre>mysql> CREATE DATABASE `bacula`;</pre>
db_password="DBPaSSword"
Создадим пользователя bacula с паролем "Pa$$word":
...</pre>
<pre>mysql> CREATE USER 'bacula'@'localhost' IDENTIFIED BY 'Pa$$word';</pre>
В противном случае пользователь создастся без пароля.<br>
Дадим пользователю права на базу:
Выполним следующие скрипты используя пароль mysql для root:
<pre>mysql> GRANT ALL PRIVILEGES ON `bacula`.* TO 'bacula'@'localhost';
<pre># /usr/share/bacula/scripts/create_mysql_database -p
mysql> FLUSH PRIVILEGES;</pre>
# /usr/share/bacula/scripts/make_mysql_tables -p
Для создания необходимых таблиц существуют скрипт:
# /usr/share/bacula/scripts/grant_mysql_privileges -p</pre>
<pre># /usr/share/bacula/scripts/make_mysql_tables</pre>


=== Настройка Director ===
=== Настройка Director ===
За настройку Bacula Director отвечает файл {{path|/etc/bacula/bacula-dir.conf}}:
За настройку Bacula Director отвечает файл {{path|/etc/bacula/bacula-dir.conf}}:
<pre>Director {
<pre>Director {
   Name = dir # Имя  
   Name = dir # Имя  
Строка 54: Строка 59:
   dbname = bacula # Имя базы данных
   dbname = bacula # Имя базы данных
   user = bacula # Имя пользователя базы данных
   user = bacula # Имя пользователя базы данных
   password = "Specify password for catalog here" # Пароль пользователя базы данных
   password = "DBPaSSword" # Пароль пользователя базы данных
}
}
# Дальнейшие строчки подгружают конфигурационные файлы из подкаталогов job.d fileset.d schedule.d client.d storage.d messages.d pool.d
# Дальнейшие строчки подгружают конфигурационные файлы из подкаталогов job.d fileset.d schedule.d client.d storage.d messages.d pool.d
Строка 64: Строка 69:
@|"sh -c 'for f in /etc/bacula/messages.d/*.conf ; do echo @${f} ; done'"
@|"sh -c 'for f in /etc/bacula/messages.d/*.conf ; do echo @${f} ; done'"
@|"sh -c 'for f in /etc/bacula/pool.d/*.conf ; do echo @${f} ; done'"</pre>
@|"sh -c 'for f in /etc/bacula/pool.d/*.conf ; do echo @${f} ; done'"</pre>
==== Описание хранилищ ====
В каталоге {{path|storage.d}} находятся конфигурационные файлы хранилищ к которым director имеет доступ:
<pre>Storage {
  Name = File # Имя хранилища
  Address = 10.10.50.49 # IP или FQN хранилища (если указать 127.0.0.1, то будет доступен только локальный backup)
  SDPort = 9103 # Порт
@/etc/bacula/bacula-sd-password.conf # Пароль для доступа к хранилищу
  Device = FileStorage
  Media Type = File
}</pre>
==== Описание наборов файлов ====
В каталоге {{path|fileset.d}} находятся описания списков файлов для резервирования:
<pre>catalog.conf: # Описывает резервирование дампа базы данных bacula
FileSet {
  Name = "Catalog"
  Include {
    Options {
      signature = MD5
    }
    File = /var/lib/bacula/bacula.sql
  }
}</pre>
<pre>fullset.conf: # Полный бэкап системы
FileSet {
  Name = "Full Set"
  Include { # Какие файлы включать
    Options {
      signature = MD5
    }
    File = /
  }
  Exclude { # Какие файлы не включать в бэкап
    File = /proc
    File = /sys
    File = /dev
    File = /tmp
    File = /.journal
    File = /.fsck
  }
}
</pre>
==== Описание задач ====
В каталоге {{path|job.d}} описываются задания резервирования.<br>
{{path|backupcatalog.conf}} - Делает дамп базы и резервирует его:
<pre>Job {
  Name = "BackupCatalog" # Имя
  JobDefs = "DefaultJob" # Используемый шаблон
  Level = Full
  FileSet="Catalog" # Список файлов для бэкапа
  Schedule = "WeeklyCycleAfterBackup" # Расписание
  RunBeforeJob = "/usr/share/bacula/scripts/make_catalog_backup" # Скрипт выполняемый до бэкапа (создает дамп базы)
  RunAfterJob  = "/usr/share/bacula/scripts/delete_catalog_backup" # Скрипт выполняемый после бэкапа (удаляет дамп базы)
  Write Bootstrap = "/var/lib/bacula/BackupCatalog.bsr" # файл необходимый для востановления
  Priority = 11 # Очередность выполнения
}</pre>
{{path|bacula.conf}} - делает полный бэкап:
<pre>Job {
  Name = "BackupFullSet"
  JobDefs = "DefaultJob"
  Schedule = "WeeklyCycle"
  Write Bootstrap = "/var/lib/bacula/Client1.bsr"
}</pre>
{{path|defaultjob.conf}} - описывает параметры задачи по умочанию:
<pre>JobDefs {
  Name = "DefaultJob" # Имя
  Type = Backup # Тип
  Level = Incremental # Вид бэкапа
  Client = fd # Клиент с которого нужно сделать бэкап
  FileSet = "Full Set" # Список файлов
  Storage = File # Хранилище
  Messages = Standard
  Pool = Default
  Priority = 10 # Приоритет
}</pre>
{{path|restore.conf}} - восстанавливает файлы:
<pre>Job {
  Name = "RestoreFiles" # Имя задачи
  Type = Restore # Тип
  Client=fd # Клиент на котором востанавливать файлы
  FileSet="Full Set" # Набор файлов
  Storage = File # Хранилище
  Pool = Default
  Messages = Standard
  Where = /tmp/bacula-restores # Папка куда востанавливать файлы
}
</pre>
==== Описание пулов ====
Пул объединяет в себе несколько томов, чтобы отдельная резервная копия не была ограничена объемом тома.<br>
Том это отдельная единица в которую ведется запись, может быть файлом или ленточкой.<br>
{{path|default.conf}} - описывает пул по умолчанию:
<pre>Pool {
  Name = Default # Имя
  Pool Type = Backup # Тип
  Recycle = yes # Разрешает bacula удалять задания из томов
  AutoPrune = yes # Разрешает bacula очищать тома
  Volume Retention = 365 days # Время в течении которого  bacula не будет очищать том
  LabelFormat = "b" # Формат меток (в случае с файлами - имена файлов)
}</pre>
==== Описание клиентов ====
В файле {{path|client1.conf}} описан локальный клиент:
<pre>Client {
  Name = fd # Имя клиента
  Address = 127.0.0.1 # IP или FQN
  FDPort = 9102 # Порт
  Catalog = MyCatalog # Используемый каталог
@/etc/bacula/bacula-fd-password.conf # Пароль для доступа к клиенту
  File Retention = 30 days # Срок хранения метаданных о файлах
  Job Retention = 6 months # Срок хранения метаданных о задачах
  AutoPrune = yes # Автоматическое удаление устаревших метаданных
}</pre>
Добавим удаленного клиента с IP 10.10.50.50, для этого создадим файл {{path|client2.conf}} следующего содержания:
<pre>Client {
  Name = fd2
  Address = 10.10.50.50
  FDPort = 9102
  Catalog = MyCatalog
  Password = "Pa$$wordClient2"
  File Retention = 30 days
  Job Retention = 6 months
  AutoPrune = yes
}</pre>
==== Проверка конфигурационных файлов ====
Проверить корректность конфигурационных файлов bacula director можно так:
<pre># bacula-dir -t -c /etc/bacula/bacula-dir.conf</pre>
==== Автозапуск сервиса ====
Запустим и добавим в автозапуск сервис:
<pre># systemctl start bacula-dir
# systemctl enable bacula-dir</pre>
=== Настройка Storage ===
Основной файл конфигурации хранилищ находится это {{path|/etc/bacula/bacula-sd.conf}}, также к нему присоединяются все файлы из каталога {{path|device.d}}<br>
По умочанию этот файл выглядит так:
<pre>Storage {
  Name = sd # Имя хранилища
  SDPort = 9103 # Порт
  WorkingDirectory = "/var/lib/bacula"
  Pid Directory = "/var/run/bacula"
  Maximum Concurrent Jobs = 20
}
Director {
  Name = dir # Имя director, который может подсоединяться к этому хранилищу
@/etc/bacula/bacula-sd-password.conf # Файл с паролем к хранилищу
}
@|"sh -c 'for f in /etc/bacula/device.d/*.conf ; do echo @${f} ; done'"
Messages {
  Name = Standard
  director = dir = all
}</pre>
В каталоге {{path|device.d}} находится файл с описанием устройства:
<pre>Device {
  Name = FileStorage # Имя устройства
  Media Type = File # Тип устройства
  Archive Device = /srv/backup # Папка для хранения
  LabelMedia = yes;
  Random Access = Yes;
  AutomaticMount = yes;
  RemovableMedia = no;
  AlwaysOpen = no;
}</pre>
Каталог {{path|/srv/backup}} должнен существовать и принадлежать пользователю bacula:
<pre># mkdir /srv/backup
# chown bacula:bacula /srv/backup</pre>
==== Проверка конфигурационных файлов ====
Проверить корректность конфигурационных файлов bacula storage можно так:
<pre># bacula-sd -t -c /etc/bacula/bacula-sd.conf</pre>
==== Автозапуск сервиса ====
Запустим и добавим в автозагрузку сервис:
<pre># systemctl start bacula-sd
# systemctl enable bacula-sd</pre>
=== Настройка File Daemon ===
Установим необходимые пакеты:
<pre># apt-get install bacula7-client</pre>
Конфигурационный файл клиента находится по адресу {{path|/etc/bacula/bacula-fd.conf}}:
<pre># Список directors, которые могут подключаться к клиенту
Director {
  Name = dir
  Password = "Pa$$wordClient2"
}
FileDaemon {
  Name = fd2
  FDport = 9102
  WorkingDirectory = /var/lib/bacula
  Pid Directory = /var/run/bacula
  Maximum Concurrent Jobs = 20
}</pre>
==== Автозапуск сервиса ====
Запустим и добавим в автозагрузку сервис:
<pre># systemctl start bacula-fd
# systemctl enable bacula-fd</pre>
== Проверка работоспособности ==
Для управления bacula используется специальная утилита bconsole.<br>
<pre># bconsole
Connecting to Director 127.0.0.1:9101
1000 OK: 102 dir Version: 7.4.7 (16 March 2017)
Enter a period to cancel a command.</pre>
Для проcмотра статуса всех компонентов введем status:
<pre>*status
Status available for:
    1: Director
    2: Storage
    3: Client
    4: Scheduled
    5: All
Select daemon type for status (1-5): 5</pre>
=== Создание резервной копии ===
<pre># bconsole
Connecting to Director 127.0.0.1:9101
1000 OK: 102 dir Version: 7.4.7 (16 March 2017)
Enter a period to cancel a command.
*run
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
A job name must be specified.
The defined Job resources are:
    1: BackupCatalog
    2: BackupFullSet
    3: RestoreFiles
Select Job resource (1-3): 2
Run Backup job
JobName:  BackupFullSet
Level:    Incremental
Client:  fd
FileSet:  Full Set
Pool:    Default (From Job resource)
Storage:  File (From Job resource)
When:    2017-07-10 16:00:54
Priority: 10
OK to run? (yes/mod/no): mod
Parameters to modify:
    1: Level
    2: Storage
    3: Job
    4: FileSet
    5: Client
    6: When
    7: Priority
    8: Pool
    9: Plugin Options
Select parameter to modify (1-9): 5
The defined Client resources are:
    1: fd
    2: fd2
Select Client (File daemon) resource (1-2): 2
Run Backup job
JobName:  BackupFullSet
Level:    Incremental
Client:  fd2
FileSet:  Full Set
Pool:    Default (From Job resource)
Storage:  File (From Job resource)
When:    2017-07-10 16:00:54
Priority: 10
OK to run? (yes/mod/no): yes
Job queued. JobId=1</pre>
За ходом выолнения можно наблюдать выбрав статус director:
<pre># bconsole
*status
Status available for:
    1: Director
    2: Storage
    3: Client
    4: Scheduled
    5: All
Select daemon type for status (1-5): 1
dir Version: 7.4.7 (16 March 2017) x86_64-alt-linux-gnu redhat
Daemon started 10-ию-2017 16:22, conf reloaded 10-июл-2017 16:22:18
Jobs: run=0, running=1 mode=0
Heap: heap=389,120 smbytes=71,240 max_bytes=71,612 bufs=249 max_bufs=255
Scheduled Jobs:
Level          Type    Pri  Scheduled          Job Name          Volume
===================================================================================
Incremental    Backup    10  10-ию-2017 23:05 BackupFullSet      b0001
Full          Backup    11  10-ию-2017 23:10 BackupCatalog      b0001
====
Running Jobs:
Console connected at 10-ию-2017 16:22
JobId  Type Level    Files    Bytes  Name              Status
======================================================================
    2  Back Full          0        0  BackupFullSet    is running
====
No Terminated Jobs.
====
</pre>
=== Востановление из резервной копии ===
<pre># bconsole
*restore
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
First you select one or more JobIds that contain files
to be restored. You will be presented several methods
of specifying the JobIds. Then you will be allowed to
select which files from those JobIds are to be restored.
To select the JobIds, you have the following choices:
    1: List last 20 Jobs run
    2: List Jobs where a given File is saved
    3: Enter list of comma separated JobIds to select
    4: Enter SQL list command
    5: Select the most recent backup for a client
    6: Select backup for a client before a specified time
    7: Enter a list of files to restore
    8: Enter a list of files to restore before a specified time
    9: Find the JobIds of the most recent backup for a client
    10: Find the JobIds for a backup for a client before a specified time
    11: Enter a list of directories to restore for found JobIds
    12: Select full restore to a specified Job date
    13: Cancel</pre>
Выбираем 1 пункт - показать последнии 20 задач
<pre>Select item:  (1-13): 1
+-------+--------+---------------------+----------+----------+---------------+
| JobId | Client | StartTime          | JobLevel | JobFiles | JobBytes      |
+-------+--------+---------------------+----------+----------+---------------+
| 2    | fd2    | 2017-07-10 16:22:47 | F        | 49995    | 1194397517    |
+-------+--------+---------------------+----------+----------+---------------+
To select the JobIds, you have the following choices:
    1: List last 20 Jobs run
    2: List Jobs where a given File is saved
    3: Enter list of comma separated JobIds to select
    4: Enter SQL list command
    5: Select the most recent backup for a client
    6: Select backup for a client before a specified time
    7: Enter a list of files to restore
    8: Enter a list of files to restore before a specified time
    9: Find the JobIds of the most recent backup for a client
    10: Find the JobIds for a backup for a client before a specified time
    11: Enter a list of directories to restore for found JobIds
    12: Select full restore to a specified Job date
    13: Cancel</pre>
Выбираем 3 пункт - ввести номера задач через запятую и вводим номер задачи 2
<pre>Select item:  (1-13): 3
Enter JobId(s), comma separated, to restore: 2
You have selected the following JobId: 2
Building directory tree for JobId(s) 2 ...  ++++++++++++++++++++++++++++++++++++++++++++
44,444 files inserted into the tree.
You are now entering file selection mode where you add (mark) and
remove (unmark) files to be restored. No files are initially added, unless
you used the "all" keyword on the command line.
Enter "done" to leave this mode.
</pre>
Bacula построит дерево файлов в котором мы можем выбрать файлы для востановления.<br>
Выберем файлы в каталоге /etc
<pre>cwd is: /
$ mark etc
1,933 files marked.
$ done
Bootstrap records written to /var/lib/bacula/dir.restore.1.bsr
Bootstrap records written to /var/lib/bacula/dir.restore.1.bsr
The Job will require the following (*=>InChanger):
  Volume(s)                Storage(s)                SD Device(s)
===========================================================================
 
    b0001                    File                      FileStorage             
Volumes marked with "*" are in the Autochanger.
1,933 files selected to be restored.</pre>
Выберем клиента для востановления:
<pre>Defined Clients:
    1: fd
    2: fd2
Select the Client (1-2): 2</pre>
Проверим все параметры задачи и запустим её:
<pre>Using Catalog "MyCatalog"
Run Restore job
JobName:        RestoreFiles
Bootstrap:      /var/lib/bacula/dir.restore.1.bsr
Where:          /tmp/bacula-restores
Replace:        Always
FileSet:        Full Set
Backup Client:  fd2
Restore Client:  fd2
Storage:        File
When:            2017-07-10 16:33:04
Catalog:        MyCatalog
Priority:        10
Plugin Options: 
OK to run? (yes/mod/no): yes
Job queued. JobId=3
*</pre>
Файлы востановленны в каталог {{path|/tmp/bacula-restores}}
== Настройка Bacula для PostgreSQL ==
=== Настройка клиента ===
{{Attention|Для работы с Bacula на сервере PostgreSQL должно быть настроено онлайн резервирование [[PostgreSQL#Continuous_Archiving_and_Point-in-Time_Recovery|PITR]])}}
На клиенте в каталоге /etc/bacula создадим следующие скрипты:<br>
<br>
'''pre-base-backup.sh''':
<source lang="bash">#!/bin/bash
DATE=`date +"%b %d %T"`
/usr/bin/pg_basebackup -D /var/lib/pgsql/backup -F t -z -U postgres -w -c fast -l "pg_basebackup ${DATE}"</source>
Этот скрипт создает полную копию базы данных и выполняется перед выполнением задачи резервного копирования базы.<br>
<br>
'''post-base-backup.sh''':
<source lang="bash">#!/bin/bash
rm -f /var/lib/pgsql/backup/*</source>
Этот скрипт удаляет созданную копию базы данных и будет выполнен после задачи резервного копирования базы.<br>
<br>
'''pre-logs-backup.sh''':
<source lang="bash">#!/bin/bash
touch /var/lib/pgsql/backup_in_progress</source>
Этот скрипт создает файл backup_in_progress и выполняется перед выполнением задачи резервного копирования журналов. Этот файл нужен, чтобы во время резервного копирования PostgreSQL не архивировал новые журналы ([[PostgreSQL#Настройка_журналов_WAL|copy_wal.sh]])<br>
<br>
'''post-logs-backup.sh''':
<source lang="bash">#!/bin/bash
rm -f /var/lib/pgsql/wals/*
rm -f /var/lib/pgsql/backup_in_progress</source>
Этот скрипт очищает каталог с журналами и файл backup_in_progress, и будет выполнен после задачи резервного копирования журналов.
Далее необходимо сделать эти скрипты исполняемыми:
<pre># chmod 750 pre-base-backup.sh
# chmod 750 post-logs-backup.sh
# chmod 750 post-base-backup.sh
# chmod 750 pre-logs-backup.sh</pre>
На этом настройка клиента завершена.
=== Настройка сервера ===
Для онлайн резервного копирования PostgreSQL необходимо добавить в Bacula клиента и создать для него задачи. В этом примере рассмотрим настройку на примере клиента zabbix-fd.
==== Списки файлов ====
Создадим списки файлов для резервного копирования в каталоге {{path|/etc/bacula/fileset.d}}:<br>
Список для копирования полной резервной копии базы {{path|PGSQL-Full-Base-set.conf}}:
<pre>FileSet {
  Name = "PGSQL-Full-Base-set"
  Include {
    Options {
      signature = MD5
      Sparse = yes
      aclsupport = yes
      xattrsupport = yes
    }
    File = "/var/lib/pgsql/backup"
    }
}</pre>
==== Журналы ====
Список для копирования журналов {{path|PGSQL-Logs-set.conf}}:
<pre>FileSet {
  Name = "PGSQL-Logs-set"
  Include {
    Options {
      signature = MD5
      Sparse = yes
      aclsupport = yes
      xattrsupport = yes
    }
    File = "/var/lib/pgsql/wals"
    }
}</pre>
==== Пул ====
Создадим отдельный пул для наших бекапов в каталоге {{path|/etc/bacula/pool.d}}:<br>
Файл {{path|zabbix.conf}}:
<pre>Pool {
  Name = Zabbix
  Pool Type = Backup
  Recycle = yes                     
  AutoPrune = yes                   
  Volume Retention = 365 days       
  LabelFormat = "zabbix"
}</pre>
==== Расписания ====
Создадим расписания для резервирования базы и журналов в каталоге {{path|/etc/bacula/schedule.d}}:<br>
Файл {{path|PGSQL-Full-Base-Cycle.conf}}:
<pre>Schedule {
  Name = "PGSQL-Full-Base-Cycle"
  Run = Full sun at 01:00 # задание будет выполнять полный бэкап каждое воскресенье в 01:00
}</pre>
файл {{path|PGSQL-Logs-Cycle.conf}}:
<pre>Schedule {
  Name = "PGSQL-Logs-Cycle"
  Run = Incremental mon-sat at 01:30 # задание будет выполнять инкрементальный бэкап каждый день с пн-сб в 01:30
}</pre>
==== Задачи ====
Создадим задачи резервного копирования в каталоге {{path|/etc/bacula/job.d}}:<br>
Задача резервного копирования базы {{path|zabbix-pgsql-base-fd.conf}}:
<pre>Job {
  Name = "zabbix-pgsql-base-fd"
  JobDefs = "DefaultJob"
  Client = zabbix-fd
  FileSet = "PGSQL-Full-Base-set"
  Accurate = no
  Pool = Zabbix
  Priority = 10 # приоритет выполнения задачи
  Schedule = "PGSQL-Full-Base-Cycle"
  ClientRunBeforeJob = "/etc/bacula/pre-base-backup.sh" # скрипт выполняющийся до задачи
  ClientRunAfterJob = "/etc/bacula/post-base-backup.sh" # скрипт выполняющийся после задачи
}</pre>
Задача резервного копирования журналов {{path|zabbix-pgsql-logs-fd.conf}}:
<pre>Job {
  Name = "zabbix-pgsql-logs-fd"
  JobDefs = "DefaultJob"
  Client = zabbix-fd
  FileSet = "PGSQL-Logs-set"
  Accurate = no
  Pool = Zabbix
  Priority = 11 # приоритет ниже чем у задачи резервного копирования базы
  Schedule = "PGSQL-Logs-Cycle"
  ClientRunBeforeJob = "/etc/bacula/pre-logs-backup.sh" # скрипт выполняющийся до задачи
  ClientRunAfterJob = "/etc/bacula/post-logs-backup.sh"# скрипт выполняющийся после задачи
}</pre>
Теперь необходимо перезапустить сервис Bacula Director:
<pre># systemctl restart bacula-dir</pre>
== Базовая настройка Baculum ==
Рассмотрим базовую установку web интерфейса baculum.
Установим необходимые пакеты на сервере:<br>
<pre># apt-get install baculum9-postgresql
# apt-get install baculum9-apache2</pre><br>
Далее включим сайты {{path|baculum-api.conf}} и {{path|baculum-web.conf}} в apache2:<br>
<pre># a2ensite baculum-api
# a2ensite baculum-web</pre><br>
Включаем следующие модули для работы baculum web: <pre>auth_basic authn_core authn_file authz_core authz_host authz_user mod_php7 negotiation rewrite setenvif</pre>
c помощью команды: <pre>Пример # a2enmod auth_basic</pre>
Добавляем пользователя apache2 в группу bacula:<pre># usermod -a -G bacula apache2</pre><br>
Запустим сервис httpd2:<pre># systemctl start httpd2</pre>
Для работы с bconsole веб серверу даём право запускать необходимые бинарники без пароля:
</pre>
<pre>
# control sudo public
# echo "Defaults:apache2 "'!'"requiretty
apache2 ALL=NOPASSWD: /usr/bin/bconsole
apache2 ALL=NOPASSWD: /usr/sbin/bdirjson
apache2 ALL=NOPASSWD: /usr/sbin/bsdjson
apache2 ALL=NOPASSWD: /usr/sbin/bfdjson
apache2 ALL=NOPASSWD: /usr/sbin/bbconsjson" > /etc/sudoers.d/baculum</pre>
Переходим по ссылке http://IPадрес:9096 попадаем в интерфейс настройки baculum-api:<br><br>
Выбираем язык --> Настраиваем доступ к базе данных<br>
<pre>Database type: PostgreSQL
Database name: bacula
Login: bacula
Password: пароль от базы(по умолчанию пустой)
IP address (or hostname): localhost
Port:5432
</pre>
{{Attention|Необходимо поставить галочку Use  sudo где это возможно.}}
<br> Настраиваем интерфейс для выполнения команд в bconsole: <br>
<pre>Bconsole binary file path: /usr/bin/bconsole
Bconsole admin config file path:/etc/bacula/bconsole.conf</pre><br> Настраиваем Config API<br>
General configuration<br>
<pre>Directory path for new config files: /etc/bacula/new - перед применением настроек нужно создать эту директорию.</pre>
Director<br><pre>bdirjson binary file path:/usr/sbin/bdirjson
Main Director config file path (usually bacula-dir.conf): /etc/bacula/bacula-dir.conf</pre><br> Storage Daemon<br> <pre>bsdjson binary file path:/usr/sbin/bsdjson
Main Storage Daemon config file path (usually bacula-sd.conf): /etc/bacula/bacula-sd.conf</pre>
<br>File Daemon/Client<br>
<pre>bfdjson binary file path:/usr/sbin/bfdjson
Main File Daemon config file path (usually bacula-fd.conf): /etc/bacula/bacula-fd.conf</pre> <br>Bconsole<br><pre>bbconsjson binary file path: /usr/sbin/bbconsjson
Admin Bconsole config file path (usually bconsole.conf): /etc/bacula/bconsole.conf<br></pre>
Далее выберите Use HTTP Basic authentication введите логин пароль. Save.<br><br>
Переходим по ссылке http://IPадрес:9095 попадаем в интерфейс настройки baculum-web:<br>
Выбираем язык --> Вводим API логин пароль Use HTTP Basic authentication остальное оставим по умолчанию --> Далее вводим логин пароль<br>
На этом базовая настройка web интерфейса baculum завершена.


== Ссылки ==
== Ссылки ==
Строка 70: Строка 633:
* [http://www.enterprisenetworkingplanet.com/nethub/print.php/3810891 Кратенько по настройке со стримерами]
* [http://www.enterprisenetworkingplanet.com/nethub/print.php/3810891 Кратенько по настройке со стримерами]
* [http://baheyeldin.com/linux/using-tape-backup-on-linux-for-a-home-network.html Довольно обстоятельное введение в ленточки]
* [http://baheyeldin.com/linux/using-tape-backup-on-linux-for-a-home-network.html Довольно обстоятельное введение в ленточки]
[[Категория:Admin]]
[[Категория:Backup]]
{{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=Резервное копирование|category=Backup|sortkey={{SUBPAGENAME}}}}
 
[[Категория:Bacula]]
{{Category navigation|title=Bacula|category=Bacula|sortkey={{SUBPAGENAME}}}}

Текущая версия от 18:59, 27 марта 2024

Бэкапы обстоятельно

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

Если требуется создавать простую резервную копию — возможно, достаточно просто tar, rsync или несложных систем вроде rdiff-backup или bontmia. Но если надо работать с несколькими клиентами, стораджами, наборами данных, расписаниями бэкапа — лучше сразу посмотреть на bacula.

Подводные грабли

Перед подъёмом боевой бакулы есть смысл хотя бы неделю потренироваться на учебной установке; хорошо бы при этом заметить такой момент как настройка VolumeRetention и Recycle/AutoPrune, иначе рано или поздно настанет день, когда единственный здоровенный том подойдёт к концу и сделать с этим ничего не получится, потому что bacula их _только_ дописывает и никогда не начинает перезаписывать место в томе, которое было занято уже удалёнными заданиями. Стоит делать небольшие (пусть десятки гигов, а не терабайты) тома и наладить их автоматизированный оборот.

Базовая настройка Bacula

Рассмотрим минимальную установку сервера bacula.
Установим необходимые пакеты:
На сервере:

# apt-get install bacula13-common bacula13-console bacula13-director-common bacula13-director-mysql bacula13-storage mt-st

На клиенте:

# apt-get install bacula13-client
Внимание! Если у Вас включен SELinux, то на время настройки выключите его
Внимание! Если у Вас не запускаются сервисы Bacula с ошибкой Cannot not open pid file. См. Bug 33645

Для исправления запуска сервисов (Bug 33645) необходимо привести файл /lib/tmpfiles.d/bacula.conf к следующему виду:

d /var/run/bacula 0775 root bacula -

И перезагрузить сервер.

Внимание! Если у Вы используете 5 версию Bacula то все файлы с описаниями задач, расписаний, списков файлов и т.д. необходимо добавлять в конфигурационные файлы сервисов с помощью такой строки: @/etc/bacula/job/bacula.conf

Настройка базы данных MySQL

Если вы хотите подключиться к уже имеющемуся серверу БД MySQL. Вы можете использовать скрипты расположенные в /usr/share/bacula/scripts. Данные скрипты не связаны и не обращаются за параметрами указанными в bacula-dir.conf в вашем /etc/bacula, поэтому используйте данные скрипты следующим образом. Например, если вы хотите создать табличную структуру в базе данных по умолчанию на сервере 199.199.199.199, то скрипт make_mysql_tables нужно запускать так:

 ./make_mysql_tables -u bacula -p bacula -h 199.199.199.199

Аналогично вы можете использовать и все остальные скрипты в папке /usr/share/bacula/scripts

Далее мы продолжим настраивать MySQL на локальном сервере. Процесс запуска и настройки MySQL сервера описан тут

Запустим сервер MySQL и добавим его в автозагрузку:

# systemctl start mysqld
# systemctl enable mysqld

В bacula присутствуют скрипты для создания базы, пользователя и таблиц.
Для того чтобы задать пароль для пользователя bacula необходимо отредактировать следующую строку в файле /usr/share/bacula/scripts/grant_mysql_privileges:

...
db_password="DBPaSSword"
...

В противном случае пользователь создастся без пароля.
Выполним следующие скрипты используя пароль mysql для root:

# /usr/share/bacula/scripts/create_mysql_database -p
# /usr/share/bacula/scripts/make_mysql_tables -p
# /usr/share/bacula/scripts/grant_mysql_privileges -p

Настройка Director

За настройку Bacula Director отвечает файл /etc/bacula/bacula-dir.conf:

Director {
  Name = dir # Имя 
  DIRport = 9101 # Порт который будет слушать Director
  QueryFile = "/usr/share/bacula/scripts/query.sql"
  WorkingDirectory = "/var/lib/bacula"
  PidDirectory = "/var/run/bacula"
  Maximum Concurrent Jobs = 1
@/etc/bacula/bacula-dir-password.conf # Файл с паролем для доступа к Director
  Messages = Daemon
}
# Параметры каталога
Catalog {
  Name = MyCatalog # Имя каталога
  dbname = bacula # Имя базы данных
  user = bacula # Имя пользователя базы данных
  password = "DBPaSSword" # Пароль пользователя базы данных
}
# Дальнейшие строчки подгружают конфигурационные файлы из подкаталогов job.d fileset.d schedule.d client.d storage.d messages.d pool.d
@|"sh -c 'for f in /etc/bacula/job.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'"
@|"sh -c 'for f in /etc/bacula/client.d/*.conf ; do echo @${f} ; done'"
@|"sh -c 'for f in /etc/bacula/storage.d/*.conf ; do echo @${f} ; done'"
@|"sh -c 'for f in /etc/bacula/messages.d/*.conf ; do echo @${f} ; done'"
@|"sh -c 'for f in /etc/bacula/pool.d/*.conf ; do echo @${f} ; done'"

Описание хранилищ

В каталоге storage.d находятся конфигурационные файлы хранилищ к которым director имеет доступ:

Storage {
  Name = File # Имя хранилища
  Address = 10.10.50.49 # IP или FQN хранилища (если указать 127.0.0.1, то будет доступен только локальный backup)
  SDPort = 9103 # Порт
@/etc/bacula/bacula-sd-password.conf # Пароль для доступа к хранилищу
  Device = FileStorage
  Media Type = File
}

Описание наборов файлов

В каталоге fileset.d находятся описания списков файлов для резервирования:

catalog.conf: # Описывает резервирование дампа базы данных bacula
FileSet {
  Name = "Catalog"
  Include {
    Options {
      signature = MD5
    }
    File = /var/lib/bacula/bacula.sql
  }
}
fullset.conf: # Полный бэкап системы
FileSet {
  Name = "Full Set"
  Include { # Какие файлы включать
    Options {
      signature = MD5
    }
    File = /
  }
  Exclude { # Какие файлы не включать в бэкап
    File = /proc
    File = /sys
    File = /dev
    File = /tmp
    File = /.journal
    File = /.fsck
  }
}

Описание задач

В каталоге job.d описываются задания резервирования.
backupcatalog.conf - Делает дамп базы и резервирует его:

Job {
  Name = "BackupCatalog" # Имя
  JobDefs = "DefaultJob" # Используемый шаблон
  Level = Full
  FileSet="Catalog" # Список файлов для бэкапа
  Schedule = "WeeklyCycleAfterBackup" # Расписание
  RunBeforeJob = "/usr/share/bacula/scripts/make_catalog_backup" # Скрипт выполняемый до бэкапа (создает дамп базы)
  RunAfterJob  = "/usr/share/bacula/scripts/delete_catalog_backup" # Скрипт выполняемый после бэкапа (удаляет дамп базы)
  Write Bootstrap = "/var/lib/bacula/BackupCatalog.bsr" # файл необходимый для востановления
  Priority = 11 # Очередность выполнения
}

bacula.conf - делает полный бэкап:

Job {
  Name = "BackupFullSet"
  JobDefs = "DefaultJob"
  Schedule = "WeeklyCycle"
  Write Bootstrap = "/var/lib/bacula/Client1.bsr"
}

defaultjob.conf - описывает параметры задачи по умочанию:

JobDefs {
  Name = "DefaultJob" # Имя
  Type = Backup # Тип
  Level = Incremental # Вид бэкапа
  Client = fd # Клиент с которого нужно сделать бэкап
  FileSet = "Full Set" # Список файлов
  Storage = File # Хранилище
  Messages = Standard
  Pool = Default
  Priority = 10 # Приоритет
}

restore.conf - восстанавливает файлы:

Job {
  Name = "RestoreFiles" # Имя задачи
  Type = Restore # Тип
  Client=fd # Клиент на котором востанавливать файлы
  FileSet="Full Set" # Набор файлов
  Storage = File # Хранилище
  Pool = Default
  Messages = Standard
  Where = /tmp/bacula-restores # Папка куда востанавливать файлы
}


Описание пулов

Пул объединяет в себе несколько томов, чтобы отдельная резервная копия не была ограничена объемом тома.
Том это отдельная единица в которую ведется запись, может быть файлом или ленточкой.
default.conf - описывает пул по умолчанию:

Pool {
  Name = Default # Имя
  Pool Type = Backup # Тип
  Recycle = yes # Разрешает bacula удалять задания из томов
  AutoPrune = yes # Разрешает bacula очищать тома
  Volume Retention = 365 days # Время в течении которого  bacula не будет очищать том
  LabelFormat = "b" # Формат меток (в случае с файлами - имена файлов)
}

Описание клиентов

В файле client1.conf описан локальный клиент:

Client {
  Name = fd # Имя клиента
  Address = 127.0.0.1 # IP или FQN
  FDPort = 9102 # Порт
  Catalog = MyCatalog # Используемый каталог
@/etc/bacula/bacula-fd-password.conf # Пароль для доступа к клиенту
  File Retention = 30 days # Срок хранения метаданных о файлах
  Job Retention = 6 months # Срок хранения метаданных о задачах
  AutoPrune = yes # Автоматическое удаление устаревших метаданных
}

Добавим удаленного клиента с IP 10.10.50.50, для этого создадим файл client2.conf следующего содержания:

Client {
  Name = fd2
  Address = 10.10.50.50
  FDPort = 9102
  Catalog = MyCatalog
  Password = "Pa$$wordClient2"
  File Retention = 30 days
  Job Retention = 6 months
  AutoPrune = yes
}

Проверка конфигурационных файлов

Проверить корректность конфигурационных файлов bacula director можно так:

# bacula-dir -t -c /etc/bacula/bacula-dir.conf

Автозапуск сервиса

Запустим и добавим в автозапуск сервис:

# systemctl start bacula-dir
# systemctl enable bacula-dir

Настройка Storage

Основной файл конфигурации хранилищ находится это /etc/bacula/bacula-sd.conf, также к нему присоединяются все файлы из каталога device.d
По умочанию этот файл выглядит так:

Storage {
  Name = sd # Имя хранилища
  SDPort = 9103 # Порт
  WorkingDirectory = "/var/lib/bacula"
  Pid Directory = "/var/run/bacula"
  Maximum Concurrent Jobs = 20
}
Director {
  Name = dir # Имя director, который может подсоединяться к этому хранилищу
@/etc/bacula/bacula-sd-password.conf # Файл с паролем к хранилищу
}
@|"sh -c 'for f in /etc/bacula/device.d/*.conf ; do echo @${f} ; done'"
Messages {
  Name = Standard
  director = dir = all
}

В каталоге device.d находится файл с описанием устройства:

Device {
  Name = FileStorage # Имя устройства
  Media Type = File # Тип устройства
  Archive Device = /srv/backup # Папка для хранения
  LabelMedia = yes;
  Random Access = Yes;
  AutomaticMount = yes;
  RemovableMedia = no;
  AlwaysOpen = no;
}

Каталог /srv/backup должнен существовать и принадлежать пользователю bacula:

# mkdir /srv/backup
# chown bacula:bacula /srv/backup

Проверка конфигурационных файлов

Проверить корректность конфигурационных файлов bacula storage можно так:

# bacula-sd -t -c /etc/bacula/bacula-sd.conf

Автозапуск сервиса

Запустим и добавим в автозагрузку сервис:

# systemctl start bacula-sd
# systemctl enable bacula-sd

Настройка File Daemon

Установим необходимые пакеты:

# apt-get install bacula7-client

Конфигурационный файл клиента находится по адресу /etc/bacula/bacula-fd.conf:

# Список directors, которые могут подключаться к клиенту
Director {
  Name = dir 
  Password = "Pa$$wordClient2"
}
FileDaemon {
  Name = fd2
  FDport = 9102
  WorkingDirectory = /var/lib/bacula
  Pid Directory = /var/run/bacula
  Maximum Concurrent Jobs = 20
}

Автозапуск сервиса

Запустим и добавим в автозагрузку сервис:

# systemctl start bacula-fd
# systemctl enable bacula-fd

Проверка работоспособности

Для управления bacula используется специальная утилита bconsole.

# bconsole
Connecting to Director 127.0.0.1:9101
1000 OK: 102 dir Version: 7.4.7 (16 March 2017)
Enter a period to cancel a command.

Для проcмотра статуса всех компонентов введем status:

*status
Status available for:
     1: Director
     2: Storage
     3: Client
     4: Scheduled
     5: All
Select daemon type for status (1-5): 5

Создание резервной копии

# bconsole
Connecting to Director 127.0.0.1:9101
1000 OK: 102 dir Version: 7.4.7 (16 March 2017)
Enter a period to cancel a command.
*run
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
A job name must be specified.
The defined Job resources are:
     1: BackupCatalog
     2: BackupFullSet
     3: RestoreFiles
Select Job resource (1-3): 2
Run Backup job
JobName:  BackupFullSet
Level:    Incremental
Client:   fd
FileSet:  Full Set
Pool:     Default (From Job resource)
Storage:  File (From Job resource)
When:     2017-07-10 16:00:54
Priority: 10
OK to run? (yes/mod/no): mod
Parameters to modify:
     1: Level
     2: Storage
     3: Job
     4: FileSet
     5: Client
     6: When
     7: Priority
     8: Pool
     9: Plugin Options
Select parameter to modify (1-9): 5
The defined Client resources are:
     1: fd
     2: fd2
Select Client (File daemon) resource (1-2): 2
Run Backup job
JobName:  BackupFullSet
Level:    Incremental
Client:   fd2
FileSet:  Full Set
Pool:     Default (From Job resource)
Storage:  File (From Job resource)
When:     2017-07-10 16:00:54
Priority: 10
OK to run? (yes/mod/no): yes
Job queued. JobId=1

За ходом выолнения можно наблюдать выбрав статус director:

# bconsole
*status
Status available for:
     1: Director
     2: Storage
     3: Client
     4: Scheduled
     5: All
Select daemon type for status (1-5): 1
dir Version: 7.4.7 (16 March 2017) x86_64-alt-linux-gnu redhat 
Daemon started 10-ию-2017 16:22, conf reloaded 10-июл-2017 16:22:18
 Jobs: run=0, running=1 mode=0
 Heap: heap=389,120 smbytes=71,240 max_bytes=71,612 bufs=249 max_bufs=255

Scheduled Jobs:
Level          Type     Pri  Scheduled          Job Name           Volume
===================================================================================
Incremental    Backup    10  10-ию-2017 23:05 BackupFullSet      b0001
Full           Backup    11  10-ию-2017 23:10 BackupCatalog      b0001
====

Running Jobs:
Console connected at 10-ию-2017 16:22
 JobId  Type Level     Files     Bytes  Name              Status
======================================================================
     2  Back Full          0         0  BackupFullSet     is running
====
No Terminated Jobs.
====

Востановление из резервной копии

# bconsole
*restore
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"

First you select one or more JobIds that contain files
to be restored. You will be presented several methods
of specifying the JobIds. Then you will be allowed to
select which files from those JobIds are to be restored.

To select the JobIds, you have the following choices:
     1: List last 20 Jobs run
     2: List Jobs where a given File is saved
     3: Enter list of comma separated JobIds to select
     4: Enter SQL list command
     5: Select the most recent backup for a client
     6: Select backup for a client before a specified time
     7: Enter a list of files to restore
     8: Enter a list of files to restore before a specified time
     9: Find the JobIds of the most recent backup for a client
    10: Find the JobIds for a backup for a client before a specified time
    11: Enter a list of directories to restore for found JobIds
    12: Select full restore to a specified Job date
    13: Cancel

Выбираем 1 пункт - показать последнии 20 задач

Select item:  (1-13): 1
+-------+--------+---------------------+----------+----------+---------------+
| JobId | Client | StartTime           | JobLevel | JobFiles | JobBytes      |
+-------+--------+---------------------+----------+----------+---------------+
| 2     | fd2    | 2017-07-10 16:22:47 | F        | 49995    | 1194397517    |
+-------+--------+---------------------+----------+----------+---------------+
To select the JobIds, you have the following choices:
     1: List last 20 Jobs run
     2: List Jobs where a given File is saved
     3: Enter list of comma separated JobIds to select
     4: Enter SQL list command
     5: Select the most recent backup for a client
     6: Select backup for a client before a specified time
     7: Enter a list of files to restore
     8: Enter a list of files to restore before a specified time
     9: Find the JobIds of the most recent backup for a client
    10: Find the JobIds for a backup for a client before a specified time
    11: Enter a list of directories to restore for found JobIds
    12: Select full restore to a specified Job date
    13: Cancel

Выбираем 3 пункт - ввести номера задач через запятую и вводим номер задачи 2

Select item:  (1-13): 3
Enter JobId(s), comma separated, to restore: 2
You have selected the following JobId: 2

Building directory tree for JobId(s) 2 ...  ++++++++++++++++++++++++++++++++++++++++++++
44,444 files inserted into the tree.

You are now entering file selection mode where you add (mark) and
remove (unmark) files to be restored. No files are initially added, unless
you used the "all" keyword on the command line.
Enter "done" to leave this mode.

Bacula построит дерево файлов в котором мы можем выбрать файлы для востановления.
Выберем файлы в каталоге /etc

cwd is: /
$ mark etc
1,933 files marked.
$ done
Bootstrap records written to /var/lib/bacula/dir.restore.1.bsr
Bootstrap records written to /var/lib/bacula/dir.restore.1.bsr

The Job will require the following (*=>InChanger):
   Volume(s)                 Storage(s)                SD Device(s)
===========================================================================
   
    b0001                     File                      FileStorage              

Volumes marked with "*" are in the Autochanger.


1,933 files selected to be restored.

Выберем клиента для востановления:

Defined Clients:
     1: fd
     2: fd2
Select the Client (1-2): 2

Проверим все параметры задачи и запустим её:

Using Catalog "MyCatalog"
Run Restore job
JobName:         RestoreFiles
Bootstrap:       /var/lib/bacula/dir.restore.1.bsr
Where:           /tmp/bacula-restores
Replace:         Always
FileSet:         Full Set
Backup Client:   fd2
Restore Client:  fd2
Storage:         File
When:            2017-07-10 16:33:04
Catalog:         MyCatalog
Priority:        10
Plugin Options:  
OK to run? (yes/mod/no): yes
Job queued. JobId=3
*

Файлы востановленны в каталог /tmp/bacula-restores

Настройка Bacula для PostgreSQL

Настройка клиента

Внимание! Для работы с Bacula на сервере PostgreSQL должно быть настроено онлайн резервирование PITR)

На клиенте в каталоге /etc/bacula создадим следующие скрипты:

pre-base-backup.sh:

#!/bin/bash
DATE=`date +"%b %d %T"`
/usr/bin/pg_basebackup -D /var/lib/pgsql/backup -F t -z -U postgres -w -c fast -l "pg_basebackup ${DATE}"

Этот скрипт создает полную копию базы данных и выполняется перед выполнением задачи резервного копирования базы.

post-base-backup.sh:

#!/bin/bash
rm -f /var/lib/pgsql/backup/*

Этот скрипт удаляет созданную копию базы данных и будет выполнен после задачи резервного копирования базы.

pre-logs-backup.sh:

#!/bin/bash
touch /var/lib/pgsql/backup_in_progress

Этот скрипт создает файл backup_in_progress и выполняется перед выполнением задачи резервного копирования журналов. Этот файл нужен, чтобы во время резервного копирования PostgreSQL не архивировал новые журналы (copy_wal.sh)

post-logs-backup.sh:

#!/bin/bash
rm -f /var/lib/pgsql/wals/*
rm -f /var/lib/pgsql/backup_in_progress

Этот скрипт очищает каталог с журналами и файл backup_in_progress, и будет выполнен после задачи резервного копирования журналов. Далее необходимо сделать эти скрипты исполняемыми:

# chmod 750 pre-base-backup.sh
# chmod 750 post-logs-backup.sh
# chmod 750 post-base-backup.sh
# chmod 750 pre-logs-backup.sh

На этом настройка клиента завершена.

Настройка сервера

Для онлайн резервного копирования PostgreSQL необходимо добавить в Bacula клиента и создать для него задачи. В этом примере рассмотрим настройку на примере клиента zabbix-fd.

Списки файлов

Создадим списки файлов для резервного копирования в каталоге /etc/bacula/fileset.d:
Список для копирования полной резервной копии базы PGSQL-Full-Base-set.conf:

FileSet {
  Name = "PGSQL-Full-Base-set"
  Include {
    Options {
      signature = MD5
      Sparse = yes
      aclsupport = yes
      xattrsupport = yes
     }
    File = "/var/lib/pgsql/backup"
    }
}

Журналы

Список для копирования журналов PGSQL-Logs-set.conf:

FileSet {
  Name = "PGSQL-Logs-set"
  Include {
    Options {
      signature = MD5
      Sparse = yes
      aclsupport = yes
      xattrsupport = yes
     }
    File = "/var/lib/pgsql/wals"
    }
}

Пул

Создадим отдельный пул для наших бекапов в каталоге /etc/bacula/pool.d:
Файл zabbix.conf:

Pool {
  Name = Zabbix
  Pool Type = Backup
  Recycle = yes                       
  AutoPrune = yes                    
  Volume Retention = 365 days        
  LabelFormat = "zabbix"
}

Расписания

Создадим расписания для резервирования базы и журналов в каталоге /etc/bacula/schedule.d:
Файл PGSQL-Full-Base-Cycle.conf:

Schedule {
  Name = "PGSQL-Full-Base-Cycle"
  Run = Full sun at 01:00 # задание будет выполнять полный бэкап каждое воскресенье в 01:00
}

файл PGSQL-Logs-Cycle.conf:

Schedule {
  Name = "PGSQL-Logs-Cycle"
  Run = Incremental mon-sat at 01:30 # задание будет выполнять инкрементальный бэкап каждый день с пн-сб в 01:30
}

Задачи

Создадим задачи резервного копирования в каталоге /etc/bacula/job.d:
Задача резервного копирования базы zabbix-pgsql-base-fd.conf:

Job {
  Name = "zabbix-pgsql-base-fd"
  JobDefs = "DefaultJob"
  Client = zabbix-fd
  FileSet = "PGSQL-Full-Base-set"
  Accurate = no
  Pool = Zabbix
  Priority = 10 # приоритет выполнения задачи
  Schedule = "PGSQL-Full-Base-Cycle"
  ClientRunBeforeJob = "/etc/bacula/pre-base-backup.sh" # скрипт выполняющийся до задачи
  ClientRunAfterJob = "/etc/bacula/post-base-backup.sh" # скрипт выполняющийся после задачи
}

Задача резервного копирования журналов zabbix-pgsql-logs-fd.conf:

Job {
  Name = "zabbix-pgsql-logs-fd"
  JobDefs = "DefaultJob"
  Client = zabbix-fd
  FileSet = "PGSQL-Logs-set"
  Accurate = no
  Pool = Zabbix
  Priority = 11 # приоритет ниже чем у задачи резервного копирования базы
  Schedule = "PGSQL-Logs-Cycle"
  ClientRunBeforeJob = "/etc/bacula/pre-logs-backup.sh" # скрипт выполняющийся до задачи
  ClientRunAfterJob = "/etc/bacula/post-logs-backup.sh"# скрипт выполняющийся после задачи
}

Теперь необходимо перезапустить сервис Bacula Director:

# systemctl restart bacula-dir

Базовая настройка Baculum

Рассмотрим базовую установку web интерфейса baculum. Установим необходимые пакеты на сервере:

# apt-get install baculum9-postgresql
# apt-get install baculum9-apache2


Далее включим сайты baculum-api.conf и baculum-web.conf в apache2:

# a2ensite baculum-api
# a2ensite baculum-web


Включаем следующие модули для работы baculum web:

auth_basic authn_core authn_file authz_core authz_host authz_user mod_php7 negotiation rewrite setenvif

c помощью команды:

Пример # a2enmod auth_basic

Добавляем пользователя apache2 в группу bacula:

# usermod -a -G bacula apache2


Запустим сервис httpd2:

# systemctl start httpd2

Для работы с bconsole веб серверу даём право запускать необходимые бинарники без пароля:

# control sudo public
# echo "Defaults:apache2 "'!'"requiretty
apache2 ALL=NOPASSWD: /usr/bin/bconsole
apache2 ALL=NOPASSWD: /usr/sbin/bdirjson
apache2 ALL=NOPASSWD: /usr/sbin/bsdjson
apache2 ALL=NOPASSWD: /usr/sbin/bfdjson
apache2 ALL=NOPASSWD: /usr/sbin/bbconsjson" > /etc/sudoers.d/baculum

Переходим по ссылке http://IPадрес:9096 попадаем в интерфейс настройки baculum-api:

Выбираем язык --> Настраиваем доступ к базе данных

Database type: PostgreSQL
Database name: bacula
Login: bacula
Password: пароль от базы(по умолчанию пустой)
IP address (or hostname): localhost
Port:5432
Внимание! Необходимо поставить галочку Use  sudo где это возможно.


Настраиваем интерфейс для выполнения команд в bconsole:

Bconsole binary file path: /usr/bin/bconsole
Bconsole admin config file path:/etc/bacula/bconsole.conf


Настраиваем Config API

General configuration

Directory path for new config files: /etc/bacula/new - перед применением настроек нужно создать эту директорию.

Director

bdirjson binary file path:/usr/sbin/bdirjson 
Main Director config file path (usually bacula-dir.conf): /etc/bacula/bacula-dir.conf


Storage Daemon

bsdjson binary file path:/usr/sbin/bsdjson
Main Storage Daemon config file path (usually bacula-sd.conf): /etc/bacula/bacula-sd.conf


File Daemon/Client

bfdjson binary file path:/usr/sbin/bfdjson
Main File Daemon config file path (usually bacula-fd.conf): /etc/bacula/bacula-fd.conf


Bconsole

bbconsjson binary file path: /usr/sbin/bbconsjson
Admin Bconsole config file path (usually bconsole.conf): /etc/bacula/bconsole.conf<br>

Далее выберите Use HTTP Basic authentication введите логин пароль. Save.

Переходим по ссылке http://IPадрес:9095 попадаем в интерфейс настройки baculum-web:
Выбираем язык --> Вводим API логин пароль Use HTTP Basic authentication остальное оставим по умолчанию --> Далее вводим логин пароль
На этом базовая настройка web интерфейса baculum завершена.

Ссылки