Установка и настройка Bacula на Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.5)

Подготовка инфраструктуры для управления системой резервного копирования

Для проведения теста необходимо три машины:

Director Daemon 10.0.0.23 - главный сервер, осуществляющий резервное копирование, назовем его bakula-dir.
Storage Daemon 10.0.0.24 - машина, куда будут складываться бэкапы. Ее назовем bakula-sd.
File Daemon 10.0.0.25 - машина, откуда будут копироваться данные и куда будет разворачиваться бэкап. Это bakula-fd.

На Director Daemon должны быть установлены пакеты:
postgresql-9.4 pgadmin3 bacula-common bacula-common-pgsql bacula-console bacula-director-common bacula-director-pgsql

При настройке базы bacula может произойти ошибка, проигнорируйте ее, базу мы настроим позже.

На Storage Daemon должны быть установлены пакеты:
bacula-sd-pgsql

На File Daemon:
bacula-fd

На Director Daemon
В файле /etc/postgresql/9.4/main/postgresql.conf указать параметр:

listen_addresses='*'


В файле /etc/postgresql/9.4/main/pg_hba.conf указать метод trust для всех.
Обязательно добавить host с ip адресом, где будет работать bacula-dir.


local all postgres trust 

local all all trust

host all all 127.0.0.1/32 trust

host all all 10.0.0.23/24 trust


Выполнить запуск БД:

pg_ctlcluster 9.4 main restart

Присвоить пароль пользователю postgres:


passwd postgres


Пароль ввести 1


Присвоить пароль пользователю bacula:


passwd bacula


Пароль ввести bacula


Создать пользователя БД для работы с bacula, выполнять не из-под root:

#psql template1 -U postgres -h 10.0.0.23 -p PORT

где PORT можно определить командой pg_lsclusters


template1=# CREATE ROLE bacula;
template1=# ALTER USER bacula PASSWORD 'bacula';
template1=# ALTER USER bacula LOGIN SUPERUSER CREATEDB CREATEROLE;

Создать БД bacula


CREATE DATABASE bacula;
ALTER DATABASE bacula OWNER TO bacula;

Для корректного функционирования авторизации черезе PAM, пользователю postgres необходимо выдать права на чтение
информации из БД пользователей и сведений о метках безопасности и привилегиях:


usermod -a -G shadow postgres
setfacl -d -m u:postgres:r /etc/parsec/macdb
setfacl -R -m u:postgres:r /etc/parsec/macdb
setfacl -m u:postgres:rx /etc/parsec/macdb

setfacl -d -m u:postgres:r /etc/parsec/capdb
setfacl -R -m u:postgres:r /etc/parsec/capdb
setfacl -m u:postgres:rx /etc/parsec/capdb


Пользователю bacula задаем минимальный и максимальный уровень:

pdpl-user bacula -l 0:0

В скриптах /usr/share/bacula-director/make_postgresql_tables и /usr/share/bacula-director/grant_postgresql_privileges вносим изменения:


db_name=${db_name:-bacula}
psql -U bacula -h 10.0.0.23 -p 5433 -f - -d ${db_name} $* <<END-OF-DATA

Сохраняем изменения и запускаем скрипты make_postgresql_tables и grant_postgresql_privileges

На машине, где будет работать Storage Daemon необходимо создать каталог /back, в него будут сохранятся бэкапы, и присвоить ему владельца bacula:


mkdir /back
chown -R bacula /back

На машине, где будет работать File Daemon необходимо создать каталог /etc2, в него будет разворачиваться бэкап:


mkdir /etc2


Если подготовительные настройки выполнены корректно, база стартует без ошибок, скрипты выполнились без ошибок, то можно приступить к настройке bacula.

Настройка bacula

Подготовка Bacula к работе заключается в настройке каждого компонента в отдельности и последующей настройке их взаимодействия.

Настройка Director Daemon

Приступаем к конфигурированию Director Daemon в конфигурационном файле /etc/bacula/bacula-dir сервера bakula1. 
В первую очередь необходимо определить основные параметры в секции Director. На начальном этапе важно установить параметры Name и Password. Name задаёт уникальное имя Director Daemon, а Password – пароль, который будет использоваться при соединениях BC с DD. Остальные параметры можно оставить в значениях по умолчанию.

Director {                           
    Name = bacula-dir
    DIRport = 9101             
    QueryFile = "/etc/bacula/scripts/query.sql" 
    WorkingDirectory = "/var/lib/bacula" 
    PidDirectory = "/run/bacula" 
    Maximum Concurrent Jobs = 1
    Password = "1"         # Console password
    Messages = Daemon
    DirAddress = 10.0.0.23
 }

Блок JobDefs нам не нужен, его можно закомментировать.

Все настройки мы свяжем воедино с помощью секции Job, в которой мы даём задание планировщику по выполнению резервирования данных. Здесь мы уже не будем описывать все параметры, отметив лишь основные.
Параметр Type указывает на тип задания. Типов существует несколько, и к ним мы еще вернемся в продолжение цикла. Здесь же достаточно указать Backup.
Параметр Schedule указывает на предопределённое расписание, согласно которому будет выполняться резервирование данных. Все расписания определены здесь же, в файле bacula-dir.conf. Пример расписания WeeklyCycle приведён ниже, комментировать в нём нечего.
Параметр Where указывает на каталог, где будет развернут бэкап.
Параметр Write Bootstrap указывает путь к файлу, в который будет записываться информация, с помощью которой данные могут быть восстановлены из резервной копии без наличия подключения к Bacula Catalog. Вместо %n будет подставлено значение параметра Name:

Job {
    Name = "BackupClient1" 
    Type = Backup
    Client = bacula-fd
    FileSet="Catalog" 
    Schedule = "DailyCycle" 
    Messages = Standard
    Pool = Default
    Write Bootstrap = "/var/lib/bacula/%n.bsr" 
    Priority = 1
 }
Job {
    Name = "RestoreFiles" 
    Type = Restore
    Client=bacula-fd
    FileSet="Catalog" 
    Storage = File
    Pool = Default
    Messages = Standard
    Where = /home2
}

Одна из интересных секций – FileSet, она позволяет предопределить несколько наборов резервируемых файлов. Например, один набор для Windows, другой – для Linux или один для серверов, а другой – для рабочих станций. Основные параметры здесь следующие.

Параметр Name определяет уникальное имя набора.
Секция Include содержит пути к резервируемым файлам/каталогам, а Exclude – пути к файлам и каталогам, которые необходимо исключить из списка резервируемых. В секции Include возможна секция Options, в которой определяются параметры резервирования.
Параметр signature указывает алгоритм вычисления контрольных сумм файлов.
Параметр compression указывает алгоритм компрессии файлов.
Параметр recurse указывает на необходимость рекурсивного резервирования, включая подкаталоги и файлы.
Параметр File указывает на каталог, который мы копируем.
Параметр xattrsupport указывает на возможность включения поддержки расширенных атрибутов, это обязательный параметр для работы с метками безопасности.

FileSet {
     Name = "Catalog" 
     Include {
     Options {
     signature = MD5
     compression = GZIP
     aclsupport = yes
     xattrsupport = yes
}
     File = /home
   }

Блок Exclude нужно закомментировать

 Schedule {
    Name = "DailyCycle" 
    Run = Full daily at 15:30
    Run = Differential 2nd-5th sun at 23:05
    Run = Incremental mon-sat at 23:05
}

Второй блок Schedule и еще один блок FileSet нужно закомментировать.

Ну, а теперь укажем параметры нашего единственного Агента.

 Client {
    Name = bacula-fd
    Address = 10.0.0.25
    FDPort = 9102
    Catalog = MyCatalog
    Password = "1"          
    File Retention = 30 days            
    Job Retention = 6 months           
    AutoPrune = yes                     
 }

Теперь настала пора определить SD, на который будет производиться передача данных для дальнейшей записи на устройство хранения. Storage Daemon у нас настроен и готов к работе, определим реквизиты доступа к нему в секции Storage файла bacula-dir.conf.
Параметр Name – уникальное имя, использующееся для адресации секции Storage в рамках файла bacula-dir.conf
Параметры Device и MediaType дублируют одноимённые параметры файла bacula-sd.conf.
Параметр Password содержит пароль, который будет использоваться при подключении к Storage Daemon.

 Storage {
    Name = File
    Address = 10.0.0.24                
    SDPort = 9103
    Password = "1" 
    Device = FileStorage
    Media Type = File
 }

Следующей группой параметров, которые необходимо определить, является секция Catalog. Здесь необходимо указать реквизиты доступа к базе данных, а также назначить уникальное имя данного Bacula Catalog с помощью параметра Name:

Catalog {
    Name = MyCatalog
    dbname = "bacula"; DB Address = "10.0.0.23"; dbuser = "bacula"; dbpassword =     "bacula"; DB PORT = "5433" 
 }
Messages {
  Name = Standard
    mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r" 
    operatorcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: Intervention needed for %j\" %r" 
    mail = root = all, !skipped
    operator = root = mount
    console = all, !skipped, !saved
    append = "/var/log/bacula/bacula.log" = all, !skipped
    catalog = all
Messages {
    Name = Daemon
    mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r" 
    mail = root = all, !skipped
    console = all, !skipped, !saved
    append = "/var/log/bacula/bacula.log" = all, !skipped
}

Секция Pool определяет набор носителей информации и параметры, определяющие то, как SD будет их обрабатывать. Каждый Pool взаимодействует с устройством хранения данных, и поэтому необходимо создать столько же пулов, сколько определено устройств хранения. Фактически если для каждого File Daemon вы определяете отдельное устройство, то для каждого FD необходимо определить и Pool. Рассмотрим перечень наиболее значимых параметров.
Параметр Name определяет уникальное имя пула.
Параметр ool Type определяет тип, и для резервных копий должен быть установлен в значение Backup.
Параметр Maximum Volume Jobs рекомендуется установить в значение 1. Это будет означать, что в рамках одного носителя данных могут быть размещены резервные данные, полученные в ходе выполнения только одного задания. Носитель данных – это устройство, на которое непосредственно записываются данные (оптические диски, магнитные ленты). Если размер созданной резервной копии много меньше размера носителя, то имеет смысл сохранить на него и другие копии, которые будут создаваться в будущем. Но если мы говорим о файлах, то желательно придерживаться правила "один файл – одна копия", т.е. в одном файле Bacula должны храниться резервные данные, которые были сформированы в рамках выполнения одного задания. Для каждого последующего будут создаваться новые файлы.
Volume Retention – время, по прошествии которого данные о резервной копии, хранящейся на носителе, будут удалены из каталога. Для обеспечения работоспособности Bacula необходимо помнить о том, что информация обо всех зарезервированных файлах хранится в базе данных, по записи на каждый файл. Если вы резервируете тысячи файлов, то очень скоро база данных станет огромной, что может затруднить работу Bacula. Поэтому очень важно своевременно очищать базу от устаревшей информации. При этом сам носитель информации не будет очищен автоматически. Он будет промаркирован как устаревший, но вы всегда сможете использовать его для восстановления данных в ручном режиме.
Maximum Volumes – максимальное количество носителей (в нашем случае файлов), доступных в данном пуле.
Параметр Recycle указывает на необходимость повторного использования носителей, помеченных как устаревшие. При этом реальная перезапись носителя произойдёт лишь в случае, когда свободных носителей не останется. Свободные носители определяются из параметра Maximum Volumes.
Параметр AutoPrune указывает на то, необходимо ли производить удаление устаревших записей из Bacula Catalog автоматически после завершения выполнения очередного задания.
Параметр Label Format определяет префикс, который будет использован Bacula для маркирования носителей информации, в нашем случае – для именования файлов.
Параметр Storage указывает на имя устройства хранения данных, указанного в параметре Name секции Storage файла bacula-dir.conf.

 Pool {
    Name = Default
    Pool Type = Backup
    Recycle = yes                      
    AutoPrune = yes                     
    Volume Retention = 1 month         
    Maximum Volume Jobs = 5
    Maximum Volumes = 32
    Storage = File
    Label Format = "volume-" 
}

Два следующих блока Pool тоже комментируем.

Console {
    Name = bacula-mon
    Password = "1" 
    CommandACL = status, .status
 }

Далее необходимо настроить доступ к DD со стороны Bacula Console в файле /etc/bacula/bconsole.conf сервера Director Daemon :

Director {
      Name = bacula-dir
      DIRport = 9101
      address = 10.0.0.23
      Password = "1" 
}

На машине, где развернут Director Daemon следует удалить пакеты bacula-sd и bacula-fd, если они установлены:

apt-get remove bacula-sd
apt-get remove bacula-fd

Конфиги bacula-sd и bacula-fd в /etc/bacula следует либо переименовать, либо удалить.
Сервисы bacula-sd и bacula-fd следует остановить:

/etc/init.d/bacula-sd stop
/etc/init.d/bacula-fd stop


Настройка Storage Daemon

Начнём подготовку Storage Daemon, который будет отвечать за непосредственную работу с устройством хранения данных. Bacula поддерживает широкий спектр устройств, начиная от оптических дисков и заканчивая полнофункциональными ленточными библиотеками. Список поддерживаемых устройств вы сможете найти на официальном сайте проекта. Мы рассмотрим самый распространённый вариант – обычный жёсткий диск с существующей файловой системой (например, ext3). Итак, на сервере bakula2редактируем файл /etc/bacula/bacula-sd.conf. В нём находим секцию основных параметров – Storage, где определяем параметр Name, который задаёт уникальное имя Storage Daemon. Остальные параметры можно оставить в значениях по умолчанию.
Секция Director необходима для указания уникального имени DD и пароля, с которым этот DD может подключаться к SD. Секций может быть несколько, что даёт возможность использовать единый сервер хранения данных для нескольких систем резервирования. Все остальные секции Director, найденные в файле, закомментируйте, они пока не понадобятся.

Storage {                             
    Name = bacula-sd
    DPort = 9103                  
    WorkingDirectory = "/var/lib/bacula" 
    Pid Directory = "/var/run/bacula" 
    Maximum Concurrent Jobs = 20
    SDAddress = 10.0.0.24
}
Director {
    Name = bacula-dir
    Password = "1" 
 }

Но основные настройки, определяющие взаимодействие с устройствами хранения, кроются в секции Device. Рассмотрим параметры, необходимые для хранения резервных копий в рамках существующей файловой системы, подключенной в каталог /back.
Параметр Name определяет уникальное имя подключенного устройства. Если вы планируете создавать изолированные друг от друга резервные копии для каждого из File Daemon, то вам необходимо создать несколько секций Device с уникальными именами. В противном случае резервируемые файлы со всех FD будут размещаться в одном и том же файле, что может несколько затруднить дальнейшее обслуживание системы.
Параметр Media Type определяет произвольное уникальное имя, которое будет использоваться Bacula при восстановлении данных. Согласно ему определяется устройство хранения, с которого будет производиться восстановление. Если вы храните резервные копии в файлах, то для КАЖДОЙ секции Device должен быть задан уникальный Media Type.
Параметр Archive Device указывает путь к файлу устройства в каталоге /dev или путь к каталогу, в котором будут размещаться резервные копии.
Параметр Device Type определяет тип устройства. Для размещения в существующей файловой системе указывается File.
Параметр Random Access указывает на возможность случайной (непоследовательной) адресации. Для файлов указывается Yes.
Параметр RemovableMedia указывает, возможно ли извлечение устройства хранения. Необходимо для ленточных устройств, приводов оптических дисков и т.д. Для файлов устанавливается в значение No.
Параметр LabelMedia указывает на необходимость автоматического маркирования носителей информации.

Device {
Name = FileStorage
Media Type = File
Archive Device = /back
LabelMedia = yes;                   
Random Access = Yes;
AutomaticMount = yes;           
RemovableMedia = no;
AlwaysOpen = no;
  }
Messages {
    Name = Standard
    director = bacula-dir = all
 }

Для базовой настройки этого достаточно

На машине, где будет Storage Daemon следует удалить пакет bacula-fd:

apt-get remove bacula-fd

Конфиг bacula-fd в /etc/bacula следует либо переименовать, либо удалить.
Сервис bacula-fd следует остановить:

/etc/init.d/bacula-fd stop


Настройка File Daemon

Перейдём к настройке File Daemon на рабочей станции bakula3.
Для настройки используется файл /etc/bacula/bacula-fd, в котором для базовой настройки достаточно лишь определить параметры секции Director, где указывается пароль, который будет использовать DD при подключении к FD, а также секции FileDaemon, где указываются настройки FD. Все остальные секции Director, найденные в файле, закомментируйте, они пока не понадобятся.

Director {
    Name = bacula-dir
    Password = "1" 
  }

В секции FileDaemon нас, на данном этапе, интересует только параметр Name, в котором указывается уникальное имя File Daemon:

FileDaemon {                         
    Name = bacula-fd
    FDport = 9102               
    WorkingDirectory = /var/lib/bacula
    Pid Directory = /var/run/bacula
    Maximum Concurrent Jobs = 20
    FDAddress = 10.0.0.25
  }
Messages {
    Name = Standard
    director = bacula-dir = all, !skipped, !restored
  }

На машине, где будет File Daemon следует удалить пакет bacula-sd:

apt-get remove bacula-sd

Конфиг bacula-sd в /etc/bacula следует либо переименовать, либо удалить.
Сервис bacula-sd следует остановить:

/etc/init.d/bacula-sd stop

Теперь запустим все компоненты соответствующими командами, данными на соответствующих серверах::

/etc/init.d/bacula-director restart
/etc/init.d/bacula-sd restart
/etc/init.d/bacula-fd restart

После этого bacula будет работать. Управление bacula осуществляется через bconsole. Настройки каталогов, заданий, расписаний и прочие задаются в конфиурационных файлах.

Для тестовой проверки выполните bconsole, далее выполните run, выберете job 1, войдите в меню набрав mod, выберете 1 (Level), выберете 1 (Full), подтвердите выполнение набрав yes. Будет создан бэкап в каталоге /back на машине с Storage Daemon. Для разворота бэкапа выполните restore, выберете пункт 12, введите номер job id, укажите параметр маркировки mark *, подтвердите выполнение командой done. Будет развернут бэкап в каталоге /etc2 на машине с File Daemon.