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

в 8:38, , рубрики: bacula, резервное копирование, системное администрирование

Введение

Это краткая пошаговая инструкция для начинающих: как изменить уже работающую систему резервного копирования на базе Bacula. Такая работа поможет Вам понять взаимосвязи элементов конфигурации bacula.

В современных дистрибутивах GNU/Linux установленная из пакетов Bacula нередко уже настроена для копирования конфигурации ОС. Если у Вас bacula не настроена предварительно, возьмите полное руководство (см. «Литература»).

Общее описание

Задача — помимо существующего хранилища добавить новое и организовать резервное копирование на новое место. Для такой задачи необходимо выполнить 4 шага.

  1. В файл конфигурации демона-хранителя bacula-sd нужно добавить секцию «Device», чтобы демон узнал о новом месте хранения.
  2. В файл конфигурации демона-управляющего bacula-dir (bacula-dir.conf) нужно добавить секцию «Storage», которая опишет новое «хранилище» (организованное на новом «устройстве» демона хранения).
  3. В файл bacula-dir.conf нужно добавить секцию «Pool», которая объявит новый набор томов (размещаемый на новом «хранилище»).
  4. В файл bacula-dir.conf нужно добавить секцию «Job», которая опишет новое задание резервного копирования (использующее новый набор томов).

Помимо создания резервных копий нужно настроить возможность восстановления файлов. Для этого необходимо создать задание для восстановления – новую секцию «Job» с типом задания «Restore».

В случае, если необходимо задать новое расписание резервного копирования, нужно будет добавить секцию «Shedule» в файл bacula-dir.conf и тогда новое расписание можно использовать в существующем или новом задании. Можно также описать несколько наборов томов, например, для длительного хранения полных копий и кратковременного — инкрементальных архивов, после чего с этими наборами томов создайте соответствующие задания.

Если же Вы измените параметры набора томов (если изменилось содержание какой-нибудь уже существовавшей секции «Pool»), обязательно выполните в консоли bacula команду update. По этой команде демон bacula-dir обновит интервалы (длительность хранения) ранее созданных томов изменённого набора.

Шаг 1. Добавляем место хранения (Device) в bacula-sd.conf

В конфигурации демона хранения bacula-sd добавим новое место («устройство») для хранения файлов – секцию «Device{}».

1.1. Создаём файл /etc/bacula/device/backupstorage.conf
– копируем имеющийся «в коробке» /etc/bacula/device/file.conf
и меняем в нём путь для размещения файлов, имя и тип носителя. «Name» и «media type» должны быть уникальны среди описаний «Device» – они будут использоваться для выбора места хранения в задании резервного копирования.

# Definition of file storage device
# iSCSI volume "iqn.2012-07.com.lenovoemc:storage.ix4-300d.ix4-300d-vol3g"
# mapped to /dev/disk/by-label/backupstorage
# and mounted to /srv/backup/backupstorage
#
Device {                                                                                                                                                                   
  Name = BackupStorage
  Media Type = File-NAS
  Archive Device = "/srv/backup/backupstorage"
  LabelMedia = yes;
  Random Access = Yes;
  AutomaticMount = yes;
  RemovableMedia = no;
  AlwaysOpen = no;
}

1.2. Добавляем этот файл в конфигрурацию /etc/bacula/bacula-sd.conf рядом с другими:

…
@/etc/bacula/device/filestorage.conf
@/etc/bacula/device/tapedrives.conf
@/etc/bacula/device/backupstorage.conf

#
# Send all messages to the Director, 
# mount messages also are sent to the email address
#
Messages {
  Name = Standard
  director = labara-host = all, !skipped, !restored
}

1.3. Даём демону bacula-sd команду перечитать конфигурацию.

service bacula-sd reload
или
/etc/init.d/bacula-sd reload

Шаг 2. Добавляем хранилище в bacula-dir.conf

Теперь добавим информацию о новом месте хранения в конфигурацию демона bacula-dir – вставим новую секцию «Storage{}» в файл «bacula-dir.conf».

2.1. Создаём файл /etc/bacula/storage/backupstorage.conf – можно скопировать имеющийся /etc/bacula/storage/file.conf и заменить параметры «Name», «Device» и «Media Type». Имя пишем новое, для «Device» используем «Name» из «Шага 1», для «Media Type» – «Media Type» из «Шага 1».

# Definition of storage instance for
# iSCSI volume "iqn.2012-07.com.lenovoemc:storage.ix4-300d.ix4-300d-vol3g",
# mounted to /srv/backup/backupstorage
#
Storage {
  Name = NASBackupStorage
  Address = "192.0.2.3"
  SDPort = 9103
@/etc/bacula/bacula-sd-password.conf
  Device = BackupStorage
  Media Type = File-NAS
}

2.2. Вставляем /etc/bacula/storage/backupstorage.conf в /etc/bacula/bacula-sd.conf рядом с другими:

…
@/etc/bacula/client/client1.conf

@/etc/bacula/storage/file.conf
@/etc/bacula/storage/example.conf
@/etc/bacula/storage/backupstorage.conf

@/etc/bacula/messages/standart.conf
@/etc/bacula/messages/daemon.conf

@/etc/bacula/pool/default.conf
…

Шаг 3. Добавляем пул томов в bacula-dir.conf

Чтобы bacula отдельно учитывала файлы, расположенные нв NAS, создаём пул для них. Этот пул явно не привязан к хранилищу, он будет использован в задании.
Одно и то же хранилище можно привязать к множеству пулов, например, можно сделать разные пулы для еженедельных, ежемесячных и ежедневных резервных копий, в каждом разное время хранения томов.

3.1. Создаём файл /etc/bacula/pool/nas.conf с описанием секции Pool. Отличия от дефолтного — формат метки (чтобы отличать файлы с хранимыми данными) и имя.

# Default pool definition for NAS Storage
Pool {
  Name = NAS
  Pool Type = Backup
  Recycle = yes                       # Bacula can automatically recycle Volumes
  AutoPrune = yes                     # Prune expired volumes
  Volume Retention = 365 days         # one year
  LabelFormat = "bn"
  # Use not more Maximum Volume Bytes on disk
  Maximum Volume Bytes = 4G
}

3.2. Вставляем /etc/bacula/pool/nas.conf в /etc/bacula/bacula-sd.conf рядом с другими.

…
@/etc/bacula/pool/default.conf
@/etc/bacula/pool/scratch.conf
@/etc/bacula/pool/nas.conf
…

Шаг 4. Добавляем задания в bacula-dir.conf

Теперь добавим задание, используя существующее расписание (Schedule) «WeeklyCycle» (см. файл /etc/bacula/schedule/weeklycycle.conf). Если существующее расписание нас устраивает, иначе придётся создать новые расписания, в которых укажем пулы, время запуска и режимы создания резервных копий, и уже после их создания — новые задания.
4.1. Чтобы много раз не писать одинаковые параметры резервного копирования на подмонтированный том NAS, создаём файл с секцией «JobDefs» /etc/bacula/job/defaultnasjob.conf:

JobDefs {
  Name = "NASDefaultJob"
  Type = Backup
  Level = Incremental
  Client = fd
  FileSet = "Full Set"
  Storage = NASBackupStorage
  Messages = Standard
  Pool = NAS
  Priority = 10
}

4.2. Задание для сохранения файлов сервера на том NAS, его очередь — «10». Создаём файл задания /etc/bacula/job/baculadup.conf

#
# Define the duplicate of main backup job. This job stores backup into NAS.
#
Job {
  Name = "BackupFullSetDup"
  JobDefs = "NASDefaultJob"
  Schedule = "WeeklyCycle"
  Write Bootstrap = "/srv/backup/backupstorage/bacula/DUPClient1.bsr"
}

4.3. Задание для сохранения базы bacula на том NAS, которое нужно выполнять в последнюю очередь, номер очереди «11». Создаём файл задания /etc/bacula/job/backupcatalognas.conf:

Job {
  Name = "BackupCatalogNAS"
  JobDefs = "NASDefaultJob"
  Level = Full
  FileSet="Catalog"
  Schedule = "WeeklyCycleAfterBackup"
  # This creates an ASCII copy of the catalog
  RunBeforeJob = "/usr/share/bacula/scripts/make_catalog_backup"
  # This deletes the copy of the catalog
  RunAfterJob  = "/usr/share/bacula/scripts/delete_catalog_backup"
  Write Bootstrap = "/srv/backup/backupstorage/bacula/BackupCatalogNAS.bsr"
  Priority = 11                   # run after main backup
}

4.4. Вставляем новые файлы заданий в /etc/bacula/bacula-sd.conf рядом с другими:

…
@/etc/bacula/pool/default.conf
@/etc/bacula/pool/scratch.conf
@/etc/bacula/pool/nas.conf

@/etc/bacula/job/defaultjob.conf
@/etc/bacula/job/backupcatalog.conf
@/etc/bacula/job/bacula.conf

@/etc/bacula/job/defaultnasjob.conf
@/etc/bacula/job/baculadup.conf
@/etc/bacula/job/backupcatalognas.conf

Шаг 5. Проверяем

5.1. Даём команду демону bacula-dir перечитать конфигурацию. Наиболее надёжный способ для этого — команда reload в консоли bacula-dir: если изменённая конфигурация содержит ошибку, демон покажет место ошибки в консоли и продолжит работу в прежней конфигурации.

Подключитесь к демону bacula-dir с помощью bconsole или BAT. В консоли введите команду reload (в BAT можно воспользоваться графическим интерфейсом, а не вводить команду: на строке «console» кликните правой кнопкой мышки и в контекстном меню выберите «Reload bacula-dir.conf»).

Если что-то неправильно, Вы увидите в консоли сообщение об ошибке, если всё в порядке, никаких сообщений в консоли не будет.

5.2. Выполняем резервное копирование нового задания. Это удобнее всего сделать в BAT: откройте вкладку «Jobs», в списке заданий выберите имя нового задания (например, «BackupFullSetDup»), кликните правой кнопкой мышки и в контекстном меню выберите «RunJob».

Состояние задания смотрите на вкладке «Jobs Run». В консоли смотрите этапы выполнения задания )команда .message). Если задание завершится с ошибкой, в консоли Вы сможете увидеть сообщение об ошибке.

Шаг 6. Создаём задание для восстановления файлов

Чтобы можно было быстро восстановить утерянный (удалённый или изменённый) файл, подготовим задание типа «Restore». В нём используются те же Pool, Storage, Fileset и Client, что и в задании типа «Backup», добавлен путь для восстановления («Where»), отличается тип, нет расписания и уровня.

6.1. Добавим файл /etc/bacula/job/restorefromnas.conf:

Job {
  Name = "RestoreFromNAS"
  Type = Restore
  Client=fd
  FileSet="Full Set"
  Storage =  NASBackupStorage
  Pool = NAS
  Messages = Standard
  Where = /tmp/bacula-restores
}

6.2. Вставляем новый файл задания в /etc/bacula/bacula-sd.conf рядом с другими:

…
@/etc/bacula/job/restore.conf
@/etc/bacula/job/restorefromnas.conf
…

Литература

Автор: grumbler66rus

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js