Главная >> Инструкции >> Установка и настройка Bacula

Установка и настройка Bacula

Резервное копирование - это одна из самых важных вещей если вы управляете серверами или у вас есть хотя бы один свой сервер. Непредвиденная ситуация может произойти в любой момент. Для того чтобы потерять данные не надо никакого особого случая. У вас может выйти из строя жесткий диск, у хостинг провайдера может что-то сломаться, или вы можете сами случайно снести базу данных забыв, что она где-то используется и в ней ещё есть важные данные.

В этой статье мы рассмотрим как выполняется установка и настройка Bacula. Это одна из самых популярных систем резервного копирования для Linux с открытым исходным кодом.


Содержание статьи

Что такое Bacula

Bacula - это система резервного копирования корпоративного уровня. Она имеет клиент-серверную архитектуру и состоит из таких компонентов:

  • Bacula Director (сервис bacula-dir) - основной сервис, который управляет всеми другими процессами по резервному копированию и восстановлению;
  • Bacula Storage (сервис bacula-sd) - хранилище, предназначенное для сохранения резервных копий на диске;
  • Bacula File Daemon (сервис bacula-fd) - клиентская часть сервиса, которая нужна для доступа к файлам на сервере, с которого будет выполнятся резервное копирование.

Все компоненты могут быть установлены как на одном сервере, так и на разных, но каждый из них должен иметь возможность обратится к другому по сети. Для управления всем этим используется утилита командной строки bconsole. Для неё существует как консольный так и веб-интерфейс, но основной способ управления - командная строка.

Установка и настройка Bacula

Шаг 1. Установка Bacula на сервер

Для версии сервера можно устанавливать полностью группу пакетов bacula. В Ubuntu по умолчанию будут установлены также такие пакеты, как PostgreSQL и Postfix. Команда установки будет выглядеть вот так:

sudo apt install bacula

Для работы Bacula нужна какая-нибудь база данных поэтому без Postgresql обойтись не получится, но Postfix можно не ставить, для этого просто допишите в команде установки postfix-. Например:

sudo apt install bacula postfix-

В процессе установки программа предложит настроить базу данных для Bacula. Лучше сделать это сейчас чтобы потом не делать вручную. Поэтому выберите Yes в следующем окне:

Поскольку база данных находится на том же сервере, что и Bacula достаточно выбрать localhost:

Далее введите пароль от будущей базы данных:

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

Шаг 2. Настройка Bacula Storage

Давайте первым делом настроем хранилище для Bacula. Конфигурация хранилища находится в файле /etc/bacula/bacula-sd.conf. В конфигурационном файле есть несколько секций:

  • Storage - секция, с основными настройками хранилища, здесь настраивается имя хранилища, а также IP адрес на котором оно будет доступно, для локальной сети пока достаточно 127.0.0.1.
  • Director - настраивается авторизация для управляющего сервиса, тут надо прописать имя сервиса, который может подключится и пароль, который он должен использовать.
  • Device - здесь настраивается способ хранения файлов на физическом диске и путь к папке, где они будут хранится.
  • Messages - отправка сообщений, можно оставить как есть.

Каждая секция имеет такой синтаксис:

имя_секции {
параметр = значение
}

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

sudo mv /etc/bacula/bacula-sd.conf{,_back}

sudo vi /etc/bacula/bacula-sd.conf

Удалять оригинальный файл не стоит, потому что может в будущем изменятся какие-либо пути и вам надо будет сверится с этим файлом. Сначала секция Storage:

Storage {
  Name = eizenhorn-sd #имя хранилища, hostname+sd
  SDPort = 9103 #порт на котором оно доступно
  WorkingDirectory = "/var/lib/bacula"
  Pid Directory = "/run/bacula"
  Plugin Directory = "/usr/lib/bacula"
  Maximum Concurrent Jobs = 20
  SDAddress = 127.0.0.1 #IP адрес на котором будет ожидать соединений хранилище
}

Дальше секция Director:

Director {
  Name = eizenhorn-dir #director сервис будет называться hostname+dir
  Password = "очень сложный пароль"
}

Секция Device:

Device {
  Name = Local-Device #имя устройства
  Media Type = File #устройство является файлом
  Archive Device = /backup #путь в файловой системе где хранятся резервные копии
  LabelMedia = yes;
  Random Access = Yes; #поддерживает произвольный доступ
  AutomaticMount = yes;
  RemovableMedia = no; #не съемный накопитель
  AlwaysOpen = no; #открывать накопитель только при необходимости
  Maximum Concurrent Jobs = 5 #максимальное количество одновременно работающих задач
}

Некоторые опции довольно странные. Это потому что изначально программа использовала не жесткие диски, а накопители на магнитной ленте для хранения данных. Последняя секция Messages. Всё остается как было в оригинальном файле:

Messages {
  Name = Standard
  director = eizenhorn-dir = all
}

После завершения редактирования конфигурационного файла необходимо проверить его на ошибки. Для этого используйте такую команду:

sudo /usr/sbin/bacula-sd -t -c /etc/bacula/bacula-sd.conf

Если программа не вывела в консоль вообще ничего можно двигаться дальше. Перезапустите сервис чтобы применить изменения:

sudo systemctl restart bacula

Шаг 3. Настройка локального клиента Bacula File Daemon

Эта служба используется для доступа к файлам на сервере. Она должна быть запущена на машинах, с которых вы хотите делать резервные копии. Конфигурация стандартная, для локальной машины вы можете оставить то, что там есть по умолчанию. Рассмотрим основные секции:

sudo vi /etc/bacula/bacula-fd.conf

Director {
  Name = eizenhorn-dir #имя директора, который может сюда подключаться hostname+dir
  Password = "очень сложный пароль"
}

Дальше идет секция с основными настройками File Daemon:

FileDaemon {
  Name = eizenhorn-fd # название, используется при подключении, hostname+fd
  FDport = 9102 # порт, на котором программа ожидает подключения
  WorkingDirectory = /var/lib/bacula
  Pid Directory = /run/bacula
  Maximum Concurrent Jobs = 20
  Plugin Directory = /usr/lib/bacula
  FDAddress = 127.0.0.1 # IP адрес на котором программа ожидает подключений
}

Ну и стандартная секция для отправки сообщений в Director:

Messages {
  Name = Standard
  director = eizenhorn-dir = all, !skipped, !restored
}

Если что-то меняли, не забудьте проверить конфигурацию на ошибки и перезапустить сервис bacula-fd.

Шаг 3. Настройка Bacula Director

Конфигурационный файл Bacula Director находится по такому пути /etc/bacula/bacula-director.conf. Здесь тоже всё разбито на секции. Вы можете поступить аналогично настройке Storage. Переименовать его и добавлять секции в пустой файл. Давайте рассмотрим основные секции. Главная секция, описывающая сам сервис управления называется Director:

Director {
  Name = eizenhorn-dir #имя сервиса hostname+dir
  DIRport = 9101 #порт, на котором ожидает соединений сервис
  QueryFile = "/etc/bacula/scripts/query.sql" #файл с запросами SQL
  WorkingDirectory = "/var/lib/bacula"
  PidDirectory = "/run/bacula"
  Maximum Concurrent Jobs = 20 #максимальное количество одновременно выполняемых задач
  Password = "очень сложный пароль" #используется для подключения к сервису из консоли
  Messages = Daemon
  DirAddress = 127.0.0.1
}

Следующая секция не обязательная, но она есть в конфигурационном файле Bacula - JobDefs. Эта секция содержит значения по умолчанию, которые потом можно будет использовать при создании задач (Job):

JobDefs {
  Name = "DefaultJob" #имя
  Type = Backup #тип задачи - резервное копирование (Backup) или восстановление (Restore)
  Level = Incremental - #тип резервного копирования
  Client = eizenhorn-fd - #имя клиента, который используется для доступа к файлам
  FileSet = "Catalog" - #имя набора файлов
  Schedule = "LocalDaily" #имя расписания
  Storage = eizenhorn-sd #имя хранилища
  Messages = Standard
  Pool = File #имя пула
  SpoolAttributes = yes
  Priority = 10
  Write Bootstrap = "/var/lib/bacula/%c.bsr" - куда записывать файл с метаданными.
}

Файл с метаданными в формате bsr содержит информацию в ASCII о том, где и какие файлы находятся. Она необходима для того чтобы потом можно было восстановить из резервной копии отдельные файлы без восстановления всего что было сохранено. Дальше идёт секция с именем Catalog, в которой описывается способ подключения к базе данных Postgresql, которая была создана и настроена во время установки. Если всё сделано правильно, то в оригинальном конфигурационном файле уже есть верные данные:

Catalog {
  Name = MyCatalog
  dbname = "bacula"; DB Address = "localhost"; dbuser = "bacula"; dbpassword = "пароль"
}

Ещё тут есть секция Messages с именем Standart и секция Console. В них ничего менять не надо, просто скопируйте их из оригинального конфигурационного файла.

Шаг 4. Резервное копирование локальной папки

Теперь у вас есть полностью настроенное хранилище, eizenhorn-sd и файловый демон eizenhorn-fd. Можно приступать к настройке резервного копирования локальной папки. Для этого в конфигурационный файл директора надо добавить несколько секций. Давайте сначала добавим пул, где будут хранится данные. Фактически, эта секция описывает набор томов (Volume), а фактически файлов в файловой системе с одинаковым префиксом, в которые будут записываться резервные копии. Это полезно, например, если вы хотите хранить резервные копии каждой машины в отдельном файле:

sudo vi /etc/bacula/bacula-dir.conf

Pool {
  Name = LocalPool #имя пула
  Pool Type = Backup #тип пула, на данный момент доступно только это значение
  Recycle = yes # переиспользование не нужных больше томов
  AutoPrune = yes # включает автоматическое удаление данных, которые больше не нужны
  Volume Retention = 365 days # сколько надо хранить резервные копии
  Maximum Volume Bytes = 50G # максимальный размер тома
  Maximum Volumes = 100 # максимальное количество томов
  Label Format = "Local-" # метка для файлов тома в файловой системе
}

Пул готов, дальше надо определиться какой клиент мы будем использовать для доступа к файлам. Поскольку это локальная машина, надо использовать ранее настроенный eizenhorn-fd:

Client {
  Name = eizenhorn-fd # имя, должно совпадать с именем в настройках клиента
  Address = localhost # хост на котором ожидает соединений клиент
  FDPort = 9102 # порт, на котором ожидает соединений клиент
  Catalog = MyCatalog # каталог для метаданных, который мы создали ранее
  Password = "пароль" # пароль и настроек клиента
  File Retention = 60 days # сколько хранить информацию о файлах
  Job Retention = 6 months # сколько хранить информацию о задачах
  AutoPrune = yes # Автоматически удалять данные о файлах и задачах по истечении срока
}

Тут надо разобраться с группой параметров удаления данных. Раньше, в настройке пула использовался параметр Volume Retention, в настройке клиента ещё два. Вот их значения:

  • Job Retention - период хранения информации о выполненных задачах. Она занимает не много места, поэтому хранить её можно долго. После удаления вы не сможете посмотреть какие задачи когда были выполнены.
  • File Retention - период хранения информации о местонахождении файлов. Занимает уже больше места, но позволяет восстановить отдельные файлы из резервной копии. Без него вы сможете восстановить файлы только распаковав резервную копию полностью.
  • Volume Retention - отвечает за хранение самих данных резервных копий. После удаления вы уже не сможете получить к ним доступ.

После того как клиент есть осталось понять какие файлы надо поместить в резервную копию, для этого есть секция FileSet:

FileSet {
  Name = "Local-configuration"
  Include { 
    Options {
      signature = MD5
    }
    File = /etc
  }
}

В данном случае интересен только параметр File, который указывает путь к папке, которую надо поместить в резервную копию. В данном случае это папка с конфигурацией системы - /etc.

Теперь надо указать когда запускать резервную копию с помощью секции Scedule:

Schedule {
  Name = "LocalDaily"
  Run = Level=Full daily at 06:00
}

Имя Name может быть произвольным, вы его будете использовать позже, при составлении задачи, а параметр Run должен указывать когда надо запускать резервную копию, а также может переопределять параметры заданные в задаче (Job). Кроме того можно задать несколько директив Run для того чтобы настроить разные типы резервного копирования.

Переопределяя уровень резервирования (Level) можно указать такие параметры:

  • Full - все файлы и каталоги перечисленные в FileSet не зависимо от того изменились они или нет.
  • Incremental - только те файлы и каталоги из FileSet, которые изменились с момента последней резервной копии.

Подробно о формате времени можно узнать в официальной документации. В упрощенном варианте можно использовать такой синтаксис:

день at ЧЧ:ММ

Или:

месяц номер_недели день at ЧЧ:ММ

В качестве дня можно использовать daily (каждый день) или sun, mon, the, wed, thu, fri, sat. В качестве номера недели: 1st, 2st, 3st, 4st, 5st. Например, можно записать вот так:

Schedule {
  Name = "LocalWeekCycle"
  Run = Level=Full sun at 06:00 # в воскресенье в 6:00
  Run = Level=Incremental mon-sat at 06:00 # с понедельника по субботу включительно
  Run = Level=Full monthly 1st sun at 06:00 # в первое воскресенье каждого месяца
}

Дальше осталось объединить всё созданное ранее в задаче (Job):

Job {
  Name = "LocalBackup" # имя задачи, будет использоваться для ручного запуска и выводится в логах
  JobDefs = "DefaultJob" # значения по умолчанию, которые мы определили раньше
  Enabled = yes # задача активна
  Level = Full # по умолчанию полная резервная копия
  FileSet = "Local-configuration" # набор файлов, должно совпадать с FileSet созданным раньше
  Schedule = "LocalDaily" # расписание запусков, должно совпадать c Schedule созданным раньше
  Storage = eizenhorn-sd # хранилище, в которое сохраняется резервная копия
  Pool = "LocalPool" # имя пула, созданного ранее
}

После завершения настройки проверьте конфигурационный файл на ошибки:

sudo /usr/sbin/bacula-dir -t -c /etc/bacula/bacula-dir.conf

И если всё хорошо, перезапустите сервис:

sudo systemctl restart bacula-dir

Шаг 5. Настройка консоли

Конфигурационный файл консоли находится здесь /etc/bacula/bconsole.conf. В нём есть только одна секция и здесь нужно указать на каком IP адресе ожидает соединений Bacula Director, а также пароль, к нему настроенный в секции Director файла /etc/bacula/bacula-dir.conf. Например:

Director {
  Name = eizenhorn-dir #имя директора, должно совпадать с настроенным в директоре
  DIRport = 9101 # порт
  address = 127.0.0.1 # IP
  Password = "очень сложный пароль"
}

Дальше можно переходить к работе с консолью.

Шаг 5. Резервное копирование в консоли

Работать с консолью Bacula довольно непривычно. Но у неё есть свои плюсы. Для запуска консоли выполните такую команду:

sudo bconsole

Вы увидите такое окно, с приглашением ввода в виде звездочки:

Для запуска задачи по резервному копированию выполните команду run. Поскольку сейчас задача одна, вам сразу же будет предложено её выполнить, в дальнейшем надо будет выбрать номер задачи или явно указать её имя команде в параметре команды run. После выполнения задачи она будет просто поставлена в очередь:

Больше ничего выведено не будет. Но результат выполнения задачи никуда не теряется. Он приходит вам в виде сообщений. Вы можете закрыть консоль и снова войти или просто нажать Enter и увидите сообщение о том, что You have messages:

Для того чтобы прочитать сообщения используйте команду messages:

messages

В данном случае будет выведена краткая статистика по задаче, а также результат её выполнения, ОК:

Посмотреть список выполненных задач можно командой list jobs:

Обратите внимание, что у каждой задачи есть свой ID и вы можете с помощью него посмотреть список файлов каждой задачи:

list files jobid=14

Шаг 6. Восстановление данных

Для восстановления данных можно создать специальную задачу (Job), а затем воспользоваться командой restore, которая позволяет восстановить нужную резервную копию. Сначала надо добавить нужную задачу в конфигурационный файл /etc/bacula/bacula-dir.conf. Например, для восстановления ранее сделанной резервной копии папки /etc:

Job {
Name = "LocalRestore" # имя задачи
Type = Restore # означает, что эта задача используется для восстановления
Client= "eizenhorn-fd" # клиент для работы с файлами
FileSet="Local-configuration" # набор файлов для восстановления
Storage = eizenhorn-sd # хранилище
Pool = "File" #пул
Messages = Standard
Where = /opt/restore # куда восстанавливать
}

Сохраните изменения и перезапустите bacula-dir, затем создайте папку, куда будет выполнятся восстановление:

sudo mkdir /opt/restore

Запустите консоль и выполните команду restore для того чтобы начать восстановление:

sudo bconsole

restore

Дальше вам надо знать задачу по резервному копированию, которую вы хотите восстановить. Узнать её можно несколькими способами:

  • 1 - выведет последние 20 выполненных задач;
  • 2 - выведет задачи, у которых есть указанные файлы;
  • 3 - позволяет ввести вручную ID нужных задач;
  • 4 - позволяет выполнить SQL запрос.

Все варианты я рассматривать не буду. Для примера можно воспользоваться первым, и выбрать одну из ранее выполненных задач:

Давайте попробуем восстановить файлы из резервной копии, созданной заданием с ID 15. Для этого нажмите 3 и введите 15:

Здесь нужно перемещаться по виртуальной файловой системе с помощью команд cd и ls, а также отмечать или снимать отметку для файлов которые надо извлечь командами mark и unmark. Когда всё будет готово выполните команду done:

После этого утилита предложит выбрать клиент с помощью которого будет выполнятся восстановление:

А затем утилита покажет общую информацию о будущем восстановлении и вам надо набрать yes для того чтобы продолжать.

После завершения восстановления файлы появятся в папке /opt/restore. Если вы хотите восстановить все файлы из последней резервной копии, то вам не надо делать всё это достаточно выполнить команду run и передать ей имя задачи по восстановлению:

run LocalRestore

Выводы

Из этой статьи вы узнали как выполняется установка и настройка Bacula в Linux для резервного копирования локальных файлов. Удалённое резервное копирование не намного сложнее. Вам просто надо установить на удалённую машину клиент и прописать его IP адрес в директоре. Это довольно громоздкая платформа, но нельзя не отдать ей должное в том, что конфигурационные файлы вполне понятны и их не очень сложно редактировать. А если вы не хотите иметь дело с консолью и конфигурационными файлами, то у программы есть несколько сторонних веб-интерфейсов.

Pеклама
Посмотреть детали

Anubis – это максимально легкое open-source решение, созданное специально для защиты небольших веб-ресурсов от бесконечного потока запросов от ботов и AI парсеров. Этот инструмент можно считать "ядерным вариантом", потому что он заставляет ботов выполнять вычисления похожие на майнинг криптовалюты. Но это неплохая альтернатива для тех, кто не может или не хочет использовать Cloudflare. Посмотреть детали

Creative Commons License
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

5 комментариев к “Установка и настройка Bacula”

  1. Осмелюсь заметить, что Bacula постепенно идёт в сторону закрытия полезных фич в бесплатной редакции, перенося их исключительно в коммерческую.
    Уже несколько лет, как Bacula форкнули, и проект BareOS успешно развивается. Идеологически и концептуально - то же самое. Плюс, есть веб-морда (для статусов, ручного запуска заданий и восстановления из бэкапов)

    Ответить
  2. Почему вы проверяете дир а не сд ? sudo /usr/sbin/bacula-dir -t -c /etc/bacula/bacula-sd.conf
    тут все должны получить вот такую ошибку
    /usr/sbin/bacula-dir -t -c /etc/bacula/bacula-sd.conf
    bacula-dir: ERROR TERMINATION at parse_conf.c:1104
    Config error: Keyword "PluginDirectory" not permitted in this resource.
    Perhaps you left the trailing brace off of the previous resource.
    : line 22, col 19 of file /etc/bacula/bacula-sd.conf
    Plugin Directory = "/usr/lib/bacula"
    ПОТОМУ ЧТО проверять нужно имхо sudo /usr/sbin/bacula-SD -t -c /etc/bacula/bacula-sd.conf
    SD!!! а не DIR .
    сам с этим столкнулся и докопался до ответа вот тут: https://bacula-users.narkive.com/oSBhMuIt/problem-with-bacula-installation-and-configuration-urgent

    Ответить
  3. При выполнении команды systemctl restart bacula
    выдает ошибку Failed to restart bacula.service: Unit bacula.service not found.
    При выполнении команды systemctl restart bacula-sd.service все проходит нормально.

    Ответить
  4. По-моему AMANDA значительно проще настраивается, да и с ее помощью можно создавать резервные копии с клиентов Linux, Windows, MacOS X... То есть, мне она кажется более универсальной.

    Ответить

Оставьте комментарий