Одним из важных аспектов при организации IT-инфраструктуры является обеспечение процесса резервного копирования. Регулярное копирование поможет сохранить и легко восстановить важные данные при возникновении сбоев и при потере данных.
Если для резервного копирования небольших фрагментов данных можно использовать такие инструменты, как tar
, sp
или rsync
, то для большого объема данных необходимо использовать более комплексное решение. Одним из таких решений является продукт Bacula — кроссплатформенное клиент-серверное программное обеспечение, которое позволяет создавать резервные копии файлов и директорий, а также СУБД, данных почтовых серверов (Postfix, Exim, Sendmail, Dovecot), системных образов и операционных систем.
Сегодня подробно рассмотрим установку и настройку Bacula на Linux, а также процесс создания резервных копий и восстановления пользовательских данных.
Чтобы начать использовать Bacula, нам понадобится сервер или виртуальная машина с любым предустановленным дистрибутивом Linux. В данной статье мы будем использовать дистрибутив Debian версии 12.
В рамках этой статьи мы будем использовать облачный сервер Timeweb Cloud.
Выбирать рекомендуется тот регион, который ближе всего находится к вам физически. У каждого доступного региона справа вверху отображается ping, т.е. время, необходимое для передачи данных с вашего компьютера на сервер. Чем меньше указанное время, тем быстрее будет осуществляться передача данных.
Так как в данной статье будет рассмотрена только установка и базовая настройка Bacula без реальной нагрузки, то для конфигурации сервера мы выберем конфигурацию, включающую в себя одноядерный процессор, 2 ГБ оперативной памяти и 30 ГБ места на NVMe-диске.
В реальности вам необходимо выбирать ту конфигурацию, которая будет удовлетворять вашим потребностям при организации резервного копирования.
Выбираем соответствующий тариф:
Если на вашем аккаунте недостаточно средств, то будет выведено предупреждение о необходимости пополнить баланс. После оплаты и создания сервера откроется Дашборд сервера, где можно будет найти IP-адрес, логин и пароль для подключения.
Bacula представляет собой кроссплатформенное (поддерживает операционные системы Linux, включая отечественные дистрибутивы Astra Linux и ALT Linux, UNIX, Windows, macOS) клиент-серверное программное обеспечение, которое, помимо создания резервных копий, также обладает функционалом по поиску и восстановлению потерянных или поврежденных данных. Управлять Bacula можно как из командной строки, так и при помощи графического интерфейса.
В основу архитектуры Bacula заложены такие компоненты, как:
Основной и главный компонент системы, который отвечает за управлением всеми процессами связанными с резервным копированием, восстановлением и верификацией данных. Director отвечает за планирование заданий, отправку команд другим компонентам и запись информации в базу данных.
Storage Daemon отвечает за взаимодействие с устройствами хранения данных включая диски, облачные хранилища и т.д. Storage Daemon получает данные от компонента File Daemon и сохраняет их на указанные носители.
Агент, устанавливаемый на клиентских машинах, с помощью которого выполняются операции по резервному копированию.
Bacula использует базу данных (MySQL, PostgreSQL или SQLite) для хранения данных о состоянии выполненных заданий, таких как информация о резервных копиях, списки файлов и история восстановления.
Интерфейс в виде утилиты командной строки для взаимодействия с Bacula. Console позволяет администратору взаимодействовать с основным компонентом Director через интерфейс командной строки (CLI). Существуют также графические интерфейсы, такие как Bacula Web и Baculum.
Необязательный компонент используемый для мониторинга состояния системы Bacula. Он позволяет отслеживать статусы заданий, демонов и устройств хранения.
Также Bacula обладает следующими дополнительными компонентами:
Например, Bacula Web или Baculum предоставляют удобный графический интерфейс для управления и мониторинга системы.
Bacula поддерживает множество плагинов для интеграции с различными приложениями (базы данных, системы виртуализации и т. д.).
Создадим файлы для тестирования резервного копирования. Хранить их будем в директории /root
. Создаем новую директорию test_backups
и переходим в нее:
mkdir /root/test_backups && cd /root/test_backups
Далее создаем шесть порядковых файлов файлов при помощи команды:
touch file{1..6}.txt
Также заранее создаем директорию, где будут сохраняться файлы восстановления:
mkdir /root/restored-files
vds
В данной статье мы будем производить установку Bacula на один сервер. Также поддерживается вариант установки компонентов программы на разные сервера. Такие компоненты, как Bacula Director, Storage Daemon, Bacula Client (клиентская часть) и СУБД можно установить на отдельные серверы, тем самым организовав децентрализованную систему, которую можно эффективно использовать для резервного копирования нескольких систем, не нагружая при этом один сервер.
Установка всех компонентов будет производиться на Debian версии 12. Также будет использоваться встроенная база данных PostgreSQL (при необходимости можно развернуть отдельно).
Для установки Bacula необходимо выполнить следующее:
apt update && apt -y install bacula-server bacula-client
Также будет установлена СУБД PostgreSQL 15 версии.
1.1. При появлении фразы «Configure database for bacula-director-pgsql with dbconfig-common?» нажимаем на клавишу ENTER:
1.2. Далее установщик предложит выбрать имя хоста где будет установлена СУБД. Так как мы устанавливаем все на одном сервере, то выбираем пункт localhost:
1.3. При появление фразы «PostgreSQL application password for bacula-director-pgsql» необходимо задать пароль для базы данных:
Не оставляйте данное поле пустым иначе, будет сгенерирован случайный пароль.
1.4. На следующем шаге необходимо ввести пароль еще раз:
Далее установка продолжится в обычном режиме.
Проверка статуса компонента bacula-director
:
systemctl status bacula-director
Проверка статуса компонента Storage Daemon:
systemctl status bacula-sd
Проверка статуса компонента File Daemon:
systemctl status bacula-fd
Проверка статуса СУБД PostgreSQL:
systemctl status postgresql
Если в статусе всех компонентов отображается active
, то Bacula успешно установлена и запущена.
Настройка Bacula осуществляется путем редактирования конфигурационных файлов компонентов программы. По умолчанию все конфигурационные файлы Bacula хранятся в директории /etc/bacula
:
Далее мы будем настраивать каждый компонент Bacula по отдельности.
bacula-dir.conf
:nano /etc/bacula/bacula-dir.conf
Начнем с блока Director
, в котором задаются основные настройки для компонента Director:
Director {
Name = 4142939-bi08079-dir
DIRport = 9101
QueryFile = "/etc/bacula/scripts/query.sql"
WorkingDirectory = "/var/lib/bacula"
PidDirectory = "/run/bacula"
Maximum Concurrent Jobs = 20
Password = "ohzb29XNWSFISd6qN6fG2urERzxOl9w68"
Messages = Daemon
DirAddress = 127.0.0.1
}
Рассмотрим параметры подробнее:
Имя для компонента Director. Представляет собой уникальное имя, идентифицирующее данный Director в конфигурации. Оно используется для связи с другими компонентами, такими как File Daemon и Storage Daemon. По умолчанию в качестве имени используется имя хоста сервера и префикс dir
. Например: 4142939-bi08079-dir
.
Порт, который Bacula Director слушает для входящих соединений от консоли управления (bconsole). По умолчанию используется порт 9101.
Путь к SQL-файлу со скриптом, используемым для выполнения запросов к базе данных. Этот файл содержит предопределенные SQL-запросы для управления заданиями, проверками, восстановлением данных и т. д. По умолчанию используется путь /etc/bacula/scripts/query.sql
.
Рабочая директория Bacula Director, где временно сохраняются файлы, создаваемые во время выполнения заданий.
Директория, в которой Bacula Director сохраняет PID-файл (идентификатор процесса). PID-файл помогает отслеживать, запущен ли процесс Director.
Максимальное количество заданий, которые могут выполняться одновременно. Это ограничение помогает избежать перегрузки системы. По умолчанию задано 20 (означает, что одновременно могут выполняться до 20 заданий).
Задается пароль, который используется для аутентификации при подключении консоли управления (bconsole) к компоненту Director. Пароль должен совпадать с тем, который указан в конфигурации консоли.
Имя ресурса сообщений, который определяет, как обрабатываются сообщения об ошибках, предупреждениях и других событиях. В качестве значений можно указать следующие: Daemon, Standard, Custom.
IP-адрес, на котором компонент Director прослушивает входящие соединения. Можно задать 127.0.0.1 (локальный хост) или указать внешний IP-адрес сервера. В нашем случае мы укажем 127.0.0.1.
Catalog {
Name = MyCatalog
dbname = "bacula"; DB Address = "localhost"; dbuser = "bacula"; dbpassword = "StrongPassword4747563"
}
Расшифровка параметров:
Имя базы данных, в которой будут храниться настройки Bacula. Используемая база данных по умолчанию называется bacula
. Сама база данных должна быть создана заранее (при развертывании отдельного инстанса СУБД).
Адрес, где развернута СУБД. Можно указать как IP-адрес, так и доменное имя. Если СУБД находится на одном хосте вместе с Bacula, то указывается адрес localhost или 127.0.0.1.
Пользователь, от имени которого будет осуществляться подключение к базе данных для выполнения запросов.
dbpassword
Пароль пользователя, который указан в параметре dbuser
. Пароль должен быть задан пользователю заранее.
Job
с именем RestoreFiles
, который отвечает за восстановление файлов. В данном блоке находим параметр Where
, в котором необходимо задать полный путь до директории, куда будут сохраняться файлы восстановления из резервной копии. Ранее для восстановленных файлов мы создали отдельную директорию — /root/restored-files
, которую мы и укажем:Job {
Name = "RestoreFiles"
Type = Restore
Client=4244027-bi08079-fd
Storage = File1
# The FileSet and Pool directives are not used by Restore Jobs
# but must not be removed
FileSet="Full Set"
Pool = File
Messages = Standard
Where = /root/restored-files
}
Schedule
, где настроим расписание, по которому будут создаваться резервные копии.Создаем расписание сначала для полной (Full
) резервной копии, которое будет выполняться каждый понедельник в 0:01, далее будет создаваться дифференциальное резервное копирование (Differential
), которое будет выполняться каждое воскресенье с 2-й по 5-ю неделю месяца в 23:05. Далее создаем инкрементальное резервное копирование (Incremental
), которое будет выполняться с понедельника по воскресенье в 23:00:
Schedule {
Name = "WeeklyCycle"
Run = Full 1st mon at 00:01
Run = Differential 2nd-5th sun at 23:05
Run = Incremental mon-sun at 23:00
}
FileSet
. Ранее мы создали директорию /root/test_backups
, в которой присутствует шесть файлов. Укажем данную директорию в параметре File
:FileSet {
Name = "Full Set"
Include {
Options {
signature = MD5
}
File = /root/test_backups
}
В блоке FileSet
используются следующие параметры:
FileSet
. Имя используется для идентификации набора файлов в конфигурации.Include
.Exclude
в конфигурации программы Bacula используется для указания файлов и директорий, которые исключаются из резервного копирования. Данный блок обычно размещается внутри определения FileSet
и действует на файлы/директории, включенные в блок Include
.Exclude {
File = /var/lib/bacula
…
}
Pool
. В Bacula Pool
(пул) представляет собой группу томов (volumes
), которые используются для хранения данных резервного копирования. Пул помогает организовать и управлять томами, определяя, как данные распределяются, хранятся и удаляются.Pool {
Name = Default
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 7 days
Maximum Volume Bytes = 10G
Maximum Volumes = 2
}
Default
. Это может быть стандартный пул, используемый для заданий по умолчанию.Backup
указывает, что данный пул предназначен для хранения резервных копий. Возможные значения:
Backup
— обычное резервное копирование.Archive
— долговременное архивирование.Cloning
— клонирование данных.yes
: Тома могут быть повторно использованы.no
: Тома нельзя перерабатывать.yes
: Устаревшие тома автоматически очищаются.no
: Автоочистка не выполняется.Recycle = yes
).Recycle = yes
)./usr/sbin/bacula-dir -t -c /etc/bacula/bacula-dir.conf
Если вывод команды будет пустым, то ошибок в синтаксисе файла нет. При наличии ошибок будет указан номер строки и описание ошибки.
bacula-director
:systemctl restart bacula-director
Следующим этапом настроим Bacula Storage, где будут храниться файлы с резервной копией.
bacula-sd.conf
:nano /etc/bacula/bacula-sd.conf
Начнем с блока Storage
, который используется для описания хранилища данных, где физически будут сохраняться резервные копии:
Storage {
Name = 4149195-bi08079-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
}
Здесь:
/var/lib/bacula
./run/bacula
.Device
, используемый для описания устройств хранения, на которые будут записываться резервные копии.Устройство может быть физическим (например, ленточный привод) или логическим (каталог на диске). В качестве теста нам будет достаточно одного блока Device
. По умолчанию в файле bacula-sd.conf
может быть указано более одного блока Device
, в котором указываются Virtual Autochanger
(виртуальный автозагрузчик) — механизм, который эмулирует работу физического автозагрузчика (автоматического устройства для работы с лентами или другими носителями). Он используется для управления множеством виртуальных носителей, обычно в виде файлов на диске, так, как если бы это были физические ленты в ленточном библиотечном устройстве.
Находим блок Autochanger
, в котором удаляем значение FileChgr1-Dev2
из параметра Device
:
Autochanger {
Name = FileChgr1
Device = FileChgr1-Dev1
Changer Command = ""
Changer Device = /dev/null
}
Далее в блоке Device
ниже указываем полный путь до директории, которую мы создали заранее для хранения файлов резервной копии (/srv/backup
). Путь указываем в параметре Archive Device
:
Device {
Name = FileChgr1-Dev1
Media Type = File1
Archive Device = /srv/backup
LabelMedia = yes;
Random Access = Yes;
AutomaticMount = yes;
RemovableMedia = no;
AlwaysOpen = no;
Maximum Concurrent Jobs = 5
}
Блоки ниже, в которых присутствуют имена FileChgr2
и FileChgr1-dev2
, необходимо удалить:
Описание используемой конфигурации приведено ниже.
Блок Autochanger:
Device
в конфигурации Storage Daemon (bacula-sd.conf
).Changer Command = ""
. Пустое значение указывает, что команда для автозагрузчика не используется. Это характерно для виртуальных автозагрузчиков или простых конфигураций, где смена носителей не требуется.Блок Device:
Pool
./srv/backup
.mkdir -p /srv/backup
Укажем в качестве владельца пользователя bacula
:
chown bacula:bacula /srv/backup
/usr/sbin/bacula-sd -t -c /etc/bacula/bacula-sd.conf
Если вывод команды будет пустым, то ошибок в синтаксисе файла нет. При наличии ошибок будет указан номер строки и описание ошибки.
bacula-sd
:systemctl restart bacula-sd
Резервное копирование в Bacula осуществляется при помощи консольный инструмент bconsole
. Запускаем утилиту:
bconsole
Если соединение с компонентом Director будет установлено, то в выводе отобразится статус 1000 OK
.
Прежде чем начать процедуру резервного копирования, можно проверить статус всех компонентов. Для этого в консоли необходимо ввести команду status
.
В ответ команда вернет список из 5 компонентов системы Bacula которые можно проверить. Если необходимо проверить все компоненты то необходимо ввести цифру 6.
run
:BackupClient1
(имя клиента будет отличаться в зависимости от ранее заданного имени в конфигурационном файле) путем ввода цифры 1.Далее система предложит три варианта действий:
yes
— начнется процесс резервного копирования;mod
— отобразится список параметров, которые можно изменить перед процедурой резервного копирования;no
— операция по резервному копированию будет отменена:Если была введена опция mod
, то утилита отобразит девять параметров которые можно поменять:
yes
.Отобразить список всех процессов по созданию/восстановлению данных, а также их статус можно при помощи команды:
list jobs
В нашем случае была создана резервная копия с номером 1:
list jobid=1
Статус T говорит о том, что резервное копирование было успешно выполнено.
Возможные статусы в столбце Terminated Jobs следующие:
cat /var/log/bacula/bacula.log
file Vol-0001
Ранее мы сделали резервную копию директории /root/test_backups
, где располагались шесть файлов с расширением .txt
. Предположим, мы удалили или утратили данные файлы. Запустим процесс восстановления, используя следующие шаги:
bconsole
restore
:restore
root/test_backups
. Переходим туда:Как можно увидеть, программа отобразила все ранее сохраненные файлы.
cd . .
И, используя команду mark
, отмечаем весь каталог test_backups
:
mark test_backups/
done
:done
Система выведет финальный отчет о том, какие данные будут восстановлены и куда они будут сохранены. В нашем случае это директория /root/restored-files
.
Вводим yes
для начала процесса восстановления:
Проверяем результат восстановления:
Надежные VDS для ваших проектов
По итогу мы рассмотрели установку и настройку программы Bacula. Bacula представляет собой клиент-серверное приложение для создания резервных копий. Программу можно использовать не только для копирования обычных файлов, но также для создания копий виртуальных машин, образов ОС и многих других файлов благодаря поддержке различных плагинов.