• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
+380 (44) 364 05 71

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

 

Оглавление

 

 

Bacula — решение для резервного копирования под Linux

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

Резервное копирование — процесс создания копии данных на резервный носитель.

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

Прежде всего отметим, что Bacula — это клиент-серверное решение, основные компоненты которого — Bacula Director, Bacula Storage, Bacula File Daemon. Ниже поясним детально про каждый из них.

Bacula Director (bacula-dir) — это главный компонент системы, назначение которого управлять всеми процессами резервирования и восстановления данных. Основной смысл этого сервиса в планировании и управлении задачами по резервному копированию (Job), а также в обслуживании Каталога (Catalog).

Bacula Storage (bacula-sd) — сервис, который представляет из себя хранилище, назначение которого, сохранять резервные копии на физическом носителе.

Bacula File Daemon (bacula-fd) — это клиент, который устанавливается на каждой машине, он выполняет резервное копирование (или восстановление и проверку данных) по запросу Bacula Director.

Также еще имеются такие важные сервисы, как Bacula Console и Catalog.

  • Bacula Console (bconsole) — это специальная утилита для управления Bacula из командной строки, есть и другие ее варианты (под веб-интерфейс).
  • Catalog — это БД для хранения информации о местонахождении всех зарезервированных файлов в резервных копиях и для обеспечения эффективной адресации к нужным файлам. Как правило, для Ubuntu поддерживаются следующие СУБД: PostgreSql и Postfix.

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

Далее, мы расскажем, как произвести установку и настройку Bacula под Ubuntu 20.04.

Процесс установки и настройки Bacula под Ubuntu 20

Этап 1. Инсталляция Bacula на сервер

Покажем на примере, как установить Bacula на сервер, вместе с Bacula в Ubuntu 20.04 также будут установлены пакеты для работы с БД: PostgreSql и Postfix. Основная команда, с помощью которой можно установить Bacula, выглядит так:

sudo apt install bacula

Однако, нам для работы нужна всего одна из СУБД, например PostgreSql, тогда Postfix мы устанавливать не будем:

sudo apt install bacula postfix-

Установка Bacula в Ubuntu 20.04

Далее установщик Bacula предложит нам создать базу данных, удобнее всего это сделать именно на этапе установки (выбираем yes в следующем экране процесса установки):

создание базы данных при установке Bacula

На следующем шаге выберем localhost, так как наша БД будет расположена на том же сервере, что и Bacula:

выбор localhost при установке БД

Сейчас можно задать пароль от нашей базы данных (например, R19031946d):

пароль к БД в Bacula

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

Этап 2. Процесс настройки Bacula Storage

Для начала произведем настройки хранилища Bacula (Bacula Storage). Все основные параметры находятся в конфигурационном файле /etc/bacula/bacula-sd.conf. Этот файл состоит из следующих основных секций:

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

Общий синтаксис для каждой секции:

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

Ниже приведем настройки конфигурационного файла для нашего случая, старый файл лучше не удалять, поэтому поместим его в _back следующей командой:

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

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

sudo nano /etc/bacula/bacula-sd.conf
#
Storage {
  Name = freehost-sd #имя хранилища, hostname+sd
  SDPort = 9103 #порт на котором оно доступно
  WorkingDirectory = "/var/lib/bacula"
  Pid Directory = "/run/bacula"
  Plugin Directory = "/usr/lib/bacula"
  Maximum Concurrent Jobs = 20
}

Director {
  Name = freehost-dir #director сервис будет называться hostname+dir
  Password = "010101qwerty"
}

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

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

настройка конфигурационного файла bacula-sd.conf

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

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

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

sudo systemctl restart bacula-sd

проверка файла на ошибки и перезагрузка сервиса

Этап 3. Процесс настройки клиента Bacula File Daemon

Bacula File Daemon должен быть установлен на каждом компьютере, где будет производится резервное копирование, он предназначен для доступа к файлам на сервере.

Отредактируем конфигурационный файл следующим образом:

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

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

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

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

Настройка bacula-fd.conf

На следующем шаге, нужно проверить настройки на ошибки:

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

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

sudo systemctl restart bacula-sd

Этап 4. Процесс настройки Bacula Director и задач резервного копирования

Файл конфигурации Bacula Director находится здесь:

/etc/bacula/bacula-dir.conf

Рассмотрим основные секции этого конфигурационного файла и затем покажем его полную настройку. Можно поступить аналогичным образом, как при настройке Bacula Storage, т.е. старый файл с настройками переименовать, а нужные секции вписать уже в пустой файл.

Секция, необходимая для описания самого сервиса управления — это Director. JobDefs — эта секция включает в себя значения «по умолчанию», которые в будущем мы используем для создания задач (Job).

Примечание: В секции JobDefs используется специальный файл с метаданными (в формате bsr), содержащий данные в формате ASCII о местоположении файлов. Эта информация нужна, чтобы при необходимости можно было бы восстановить из резервной копии только отдельные (выбранные нами) файлы, не восстанавливая весь бэкап.

Секция Catalog служит для описания метода подключения к БД Postgresql, которая создана и уже настроена автоматически на первых этапах установки Bacula.

Секции Messages (имя ее Standart) и Console являются стандартными, в них можно ничего не менять (оставить значения «по умолчанию»).

На предыдущих этапах мы уже настроили хранилище freehost-sd и файловый демон freehost-fd, сейчас же завершим настройку конфигурационного файла Director (bacula-dir.conf), добавив в него несколько специальных секций для организации резервного копирования.

Секция Pool служит для хранения данных и описывает набор томов (Volume), здесь можно настроить параметры хранения томов данных для каждой рабочей машины.

Затем необходимо заполнить секцию Client, в ней мы укажем какой именно клиент мы будем использовать для обеспечения доступа к файлам, например, freehost-fd.

Разберемся детально с параметром Volume Retention (он уже встречался нам в настройке секции Pool), при настройке секции Client добавились еще такие опции:

  • Job Retention — это период хранения информации о задачах, которые исполнены. Хранить такие данные можно достаточно долго, а вот после удаления этой информации, уже невозможно конкретно посмотреть, какие именно задачи и в какое время были выполнены.
  • File Retention — это период хранения информации о местонахождении конкретных файлов. С помощью этой опции можно восстановить нужные нам файлы из резервной копии (а не всю копию).
  • Volume Retention — необходим для хранения самих данных резервных копий. Если вы удалите его, то уже не сможете получить доступ к данным.

Секция FileSet служит для того, чтобы определить, какие именно файлы стоит поместить в резервную копию. В ней есть такой параметр File, в котором нужно указать путь к папке, которую мы будем помещать в резервную копию, например, папка /etc.

Секция Schedule предназначена для указания времени и расписания резервного копирования. Параметр Name можно задать произвольно, Run определяет время запуска резервной копии, можно задать несколько параметров Run для различных типов резервного копирования. Параметр Level нужен для определения уровней резервирования:

  • Full — в резервную копию пишутся все файлы и каталоги, заданные в секции FileSet (без учета фактора их изменения).
  • Incremental — резервируются конкретные файлы и каталоги из секции FileSet, которые претерпели изменения с момента последнего резервирования.

Синтаксис для указания формата времени следующий:

день at ЧЧ:ММ

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

Например, если необходимо делать ежедневные копии, то указываем daily (каждый день), для указания конкретных дней недели используем sun, mon, the, wed, thu, fri, sat.

Чтобы указать номер недели, используем обозначения: 1st, 2st, 3st, 4st, 5st.

Указанные выше параметры объединим в задаче (Job). Пример получившегося конфигурационного файла см. ниже:

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

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

Catalog {
  Name = default
  dbname = “bacula”; DB Address = “localhost”; dbuser = “bacula”; dbpassword = “R19031946d”
}

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

Console {
  Name = freehost-mon
  Password = “010101qwerty”
  CommandACL = status, .status

#######################################################

#LocalBackup
Job {
  Name = “LocalBackup”
  Type = Backup
  Level = Incremental
  Client = freehost-fd
  FileSet = “local”
  Schedule = “local”
  Messages = Standard
  Pool = LocalPool
  Priority = 10
  Allow Duplicate Jobs = no
  Cancel Queued Duplicates = yes
  Cancel Running Duplicates = no
}

FileSet {
  Name = “local”
  Include {
    Options {
	signature = MD5
    }
    File = /etc
  }
}

Pool {
  Catalog = default
  Name = LocalPool
  Pool Type = Backup
  Recycle = yes
  AutoPrune = yes
  Volume Retention = 40 days
  Recycle Oldest Volume = yes
  Purge Oldest Volume = yes
  Action On Purge = Truncate
  Maximum Volume Jobs=1
  Maximum Volumes = 40
  Label Format = “local-“
  Storage = freehost-sd
}

Client {
  Name = freehost-fd
  Address = 127.0.0.1
  FDPort = 9102
  Catalog = default
  Password = “010101qwerty”
  AutoPrune = yes
  Maximum Concurrent Jobs = 1
}
Storage {
  Name = freehost-sd
  Address = 127.0.0.1
  SDPort = 9103
  Password = “010101qwerty”
  Device = freehost-files
  Media Type = File
  Maximum Concurrent Jobs = 1
}

Schedule {
  Name = “local”
  Run = Level=Full daily at 06:00
}

Пример конфигурационного файла bacula-dir.conf

Пример конфигурационного файла bacula-dir.conf

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

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

Если ошибок не обнаружено, то перезапустим сервис:

sudo systemctl restart bacula-dir

Проверка на ошибки bacula-dir.conf и его перезапуск

Этап 5. Процесс настройки консоли

На этом этапе необходимо произвести настройку консоли, для этого нам нужно отредактировать конфигурационный файл:

nano /etc/bacula/bconsole.conf

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

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

Редактирование bconsole.conf

После всех проведенных настроек, можно переходить к работе в консоли для выполнения резервного копирования.

Выполнение резервного копирования в Bacula из консоли

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

sudo bconsole

После выполнения этой команды мы увидим окно с приглашением в виде *, см. на рис. ниже:

Вход в консоль

Чтобы запустить задачу резервного копирования, выполните команду run.

запуск задачи резервного копирования в консоли

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

You have messages

Чтобы прочитать сообщение, можно воспользоваться командой:

messages

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

list jobs

просмотр списка выполненных задач в консоли

Любая задача имеет свой ID и с помощью него возможно посмотреть всю детализацию по задаче:

list files jobid=12
list files jobid=13:

просмотр данных по конкретной задаче

Процесс восстановления данных

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

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

создание задачи по восстановлению данных

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

Далее, создадим папку, в которую будут записываться восстановленные данные.

sudo mkdir /opt/restore

создание папки для записи восстановленных данных

Затем запустим консоль и выполним команду:

sudo bconsole
restore

выполнение команды restore

Далее, нужно указать конкретную задачу, которую вы собираетесь восстановить. На скриншоте выше приведены все способы, как это можно сделать, но для простоты лучше воспользоваться самым первым, который позволяет вывести на экран 20 последних задач.

К примеру, попробуем восстановить файлы из резервной копии (задача с ID 11), нажмем 3 и введем число 11 в консоли:

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

процесс восстановления файлов из резервной копии

Сейчас будем использовать команды cd и ls для перемещения по виртуальной файловой системе, а также команды mark и unmark, чтобы отмечать или наоборот, снимать отметку с файлов, которые необходимо будет извлечь. После этого, нужно будет выполнить команду done.

выбор файлов для восстановления

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

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

После завершения операции восстановленные файлы можно будет посмотреть в папке /opt/restore.

Для восстановления файлов из последней сделанной резервной копии достаточно выполнить команду:

run LocalRestore

Заключение

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

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

Кстати резервное копирование данных на нашем виртуальном хостинге реализовано именно при помощи Bacula. На данный момент наши сервера бекапов хранят более 100 Тб данных. При этом, если Вы пользуетесь нашим хостингом, можете увидеть, что восстановление данных обычно занимает до 5 минут.

Специалисты компании FREEhost.UA всегда помогут вам с инсталляцией Bacula на вашем VDS или выделенный сервер, окажут содействие в настройке конфигурационных файлов и организации процесса резервного копирования в вашей компании.

Мы что-то не указали или в чем-то ошиблись?

Напишите об этом в комментариях и мы с удовольствием на них ответим. Также просим Вас свои оценки.

Подписывайтесь на наш телеграмм - канал t.me/freehostua, чтобы быть в курсе новых полезных материалов. Смотрите наш Youtube канал на youtube.com/freehostua.

 

Дата: 08.10.2021
Автор: Евгений
Голосование

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
Спасибо, что выбираете FREEhost.UA