Одним из важных аспектов при организации IT-инфраструктуры является обеспечение процесса резервного копирования. Регулярное копирование поможет сохранить и легко восстановить важные данные при возникновении сбоев и при потере данных.
Если для резервного копирования небольших фрагментов данных можно использовать такие инструменты, как tar
, sp
или rsync
, то для большого объема данных необходимо использовать более комплексное решение. Одним из таких решений является продукт Bacula — кроссплатформенное клиент-серверное программное обеспечение, которое позволяет создавать резервные копии файлов и директорий, а также СУБД, данных почтовых серверов (Postfix, Exim, Sendmail, Dovecot), системных образов и операционных систем.
Сегодня подробно рассмотрим установку и настройку Bacula на Linux, а также процесс создания резервных копий и восстановления пользовательских данных.
Чтобы начать использовать Bacula, нам понадобится сервер или виртуальная машина с любым предустановленным дистрибутивом Linux. В данной статье мы будем использовать дистрибутив Debian версии 12.
Создание облачного сервера
В рамках этой статьи мы будем использовать облачный сервер Timeweb Cloud.
- Входим в аккаунт при помощи логина или адреса электронной почты и пароля или при помощи Passkey, ВКонтакте, GitHub, Google.
- После успешной авторизации отобразится панель управления текущего проекта. Переходим в раздел «Облачные серверы» и нажимаем «Создать» или «Добавить».
- Выбираем операционную систему, которая будет установлена на сервер. В нашем случае нам необходим дистрибутив Debian версии 12.
- Выбираем регион, в котором будет находиться наш сервер.
Выбирать рекомендуется тот регион, который ближе всего находится к вам физически. У каждого доступного региона справа вверху отображается ping, т.е. время, необходимое для передачи данных с вашего компьютера на сервер. Чем меньше указанное время, тем быстрее будет осуществляться передача данных.
- Далее выбираем необходимую конфигурацию для сервера.
Так как в данной статье будет рассмотрена только установка и базовая настройка Bacula без реальной нагрузки, то для конфигурации сервера мы выберем конфигурацию, включающую в себя одноядерный процессор, 2 ГБ оперативной памяти и 30 ГБ места на NVMe-диске.
В реальности вам необходимо выбирать ту конфигурацию, которая будет удовлетворять вашим потребностям при организации резервного копирования.
Выбираем соответствующий тариф:
- Далее необходимо решить, будет ли сервер доступен из внешний сети или же только из приватной (частной) сети. Если не уверены в настройках, оставьте эти параметры без изменений.
- По желанию можно оформить дополнительные услуги, включая резервные копии и защиту от DDoS-атак (последняя доступна только в Санкт-Петербурге и в Москве).
- Также заранее можно загрузить SSH-ключ, чтобы не входить на север при помощи пароля.
- Можно задать необходимое имя для сервера которое будет отображаться в панели управления, а также выбрать проект.
- Для создания сервера необходимо нажать на кнопку «Заказать»:
Если на вашем аккаунте недостаточно средств, то будет выведено предупреждение о необходимости пополнить баланс. После оплаты и создания сервера откроется Дашборд сервера, где можно будет найти IP-адрес, логин и пароль для подключения.
Что такое Bacula
Bacula представляет собой кроссплатформенное (поддерживает операционные системы Linux, включая отечественные дистрибутивы Astra Linux и ALT Linux, UNIX, Windows, macOS) клиент-серверное программное обеспечение, которое, помимо создания резервных копий, также обладает функционалом по поиску и восстановлению потерянных или поврежденных данных. Управлять Bacula можно как из командной строки, так и при помощи графического интерфейса.
Архитектура Bacula
В основу архитектуры Bacula заложены такие компоненты, как:
- Director (Bacula Director)
Основной и главный компонент системы, который отвечает за управлением всеми процессами связанными с резервным копированием, восстановлением и верификацией данных. Director отвечает за планирование заданий, отправку команд другим компонентам и запись информации в базу данных.
- Storage Daemon (Bacula Storage)
Storage Daemon отвечает за взаимодействие с устройствами хранения данных включая диски, облачные хранилища и т.д. Storage Daemon получает данные от компонента File Daemon и сохраняет их на указанные носители.
- File Daemon (Bacula File)
Агент, устанавливаемый на клиентских машинах, с помощью которого выполняются операции по резервному копированию.
- Catalog (каталог)
Bacula использует базу данных (MySQL, PostgreSQL или SQLite) для хранения данных о состоянии выполненных заданий, таких как информация о резервных копиях, списки файлов и история восстановления.
- Console (Bacula Console, bconsole)
Интерфейс в виде утилиты командной строки для взаимодействия с Bacula. Console позволяет администратору взаимодействовать с основным компонентом Director через интерфейс командной строки (CLI). Существуют также графические интерфейсы, такие как Bacula Web и Baculum.
- Monitor
Необязательный компонент используемый для мониторинга состояния системы Bacula. Он позволяет отслеживать статусы заданий, демонов и устройств хранения.
Также Bacula обладает следующими дополнительными компонентами:
- GUI-интерфейc
Например, 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 на один сервер. Также поддерживается вариант установки компонентов программы на разные сервера. Такие компоненты, как Bacula Director, Storage Daemon, Bacula Client (клиентская часть) и СУБД можно установить на отдельные серверы, тем самым организовав децентрализованную систему, которую можно эффективно использовать для резервного копирования нескольких систем, не нагружая при этом один сервер.
Установка всех компонентов будет производиться на Debian версии 12. Также будет использоваться встроенная база данных PostgreSQL (при необходимости можно развернуть отдельно).
Для установки Bacula необходимо выполнить следующее:
- Обновляем индекс репозиториев и устанавливаем пакеты серверной и клиентской части 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 и Postgresql.
Проверка статуса компонента 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 осуществляется путем редактирования конфигурационных файлов компонентов программы. По умолчанию все конфигурационные файлы Bacula хранятся в директории /etc/bacula
:
Далее мы будем настраивать каждый компонент Bacula по отдельности.
Настройка Bacula Director
- При помощи любого текстового редактора открываем на редактирование конфигурационный файл
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
}
Рассмотрим параметры подробнее:
- Name
Имя для компонента Director. Представляет собой уникальное имя, идентифицирующее данный Director в конфигурации. Оно используется для связи с другими компонентами, такими как File Daemon и Storage Daemon. По умолчанию в качестве имени используется имя хоста сервера и префикс dir
. Например: 4142939-bi08079-dir
.
- DIRport
Порт, который Bacula Director слушает для входящих соединений от консоли управления (bconsole). По умолчанию используется порт 9101.
- QueryFile
Путь к SQL-файлу со скриптом, используемым для выполнения запросов к базе данных. Этот файл содержит предопределенные SQL-запросы для управления заданиями, проверками, восстановлением данных и т. д. По умолчанию используется путь /etc/bacula/scripts/query.sql
.
- WorkingDirectory
Рабочая директория Bacula Director, где временно сохраняются файлы, создаваемые во время выполнения заданий.
- PidDirectory
Директория, в которой Bacula Director сохраняет PID-файл (идентификатор процесса). PID-файл помогает отслеживать, запущен ли процесс Director.
- Maximum Concurrent Jobs
Максимальное количество заданий, которые могут выполняться одновременно. Это ограничение помогает избежать перегрузки системы. По умолчанию задано 20 (означает, что одновременно могут выполняться до 20 заданий).
- Password
Задается пароль, который используется для аутентификации при подключении консоли управления (bconsole) к компоненту Director. Пароль должен совпадать с тем, который указан в конфигурации консоли.
- Messages
Имя ресурса сообщений, который определяет, как обрабатываются сообщения об ошибках, предупреждениях и других событиях. В качестве значений можно указать следующие: Daemon, Standard, Custom.
- DirAddress
IP-адрес, на котором компонент Director прослушивает входящие соединения. Можно задать 127.0.0.1 (локальный хост) или указать внешний IP-адрес сервера. В нашем случае мы укажем 127.0.0.1.
- По умолчанию Bacula поставляется со своим экземпляром PostgreSQL который разворачивается на том же хосте что и сама Bacula. В этом случае настройки подключения к базе данных править не надо. Если же база данных будет развернута на отдельном хосте (рекомендуется при использование в production окружениях) то ее данные включая адрес, имя пользователя и пароль пользователя прописываются в блоке Catalog:
Catalog {
Name = MyCatalog
dbname = "bacula"; DB Address = "localhost"; dbuser = "bacula"; dbpassword = "StrongPassword4747563"
}
Расшифровка параметров:
- dbname
Имя базы данных, в которой будут храниться настройки Bacula. Используемая база данных по умолчанию называется bacula
. Сама база данных должна быть создана заранее (при развертывании отдельного инстанса СУБД).
- DB Address
Адрес, где развернута СУБД. Можно указать как IP-адрес, так и доменное имя. Если СУБД находится на одном хосте вместе с Bacula, то указывается адрес localhost или 127.0.0.1.
- dbuser
Пользователь, от имени которого будет осуществляться подключение к базе данных для выполнения запросов.
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
используются следующие параметры:
- Name: Задает имя для блока
FileSet
. Имя используется для идентификации набора файлов в конфигурации. - Options задает параметры копирования для файлов, определенных в блоке
Include
. - signature = MD5: Указывает тип контрольной суммы (хэш-функции), которая будет использоваться для проверки целостности файлов. Алгоритм MD5 создает 128-битную контрольную сумму. Используется для проверки целостности данных (например, для определения изменений в файлах).
- Exclude: Блок
Exclude
в конфигурации программы Bacula используется для указания файлов и директорий, которые исключаются из резервного копирования. Данный блок обычно размещается внутри определенияFileSet
и действует на файлы/директории, включенные в блокInclude
.
Exclude {
File = /var/lib/bacula
…
}
- Настроим секцию
Pool
. В BaculaPool
(пул) представляет собой группу томов (volumes
), которые используются для хранения данных резервного копирования. Пул помогает организовать и управлять томами, определяя, как данные распределяются, хранятся и удаляются.
Pool {
Name = Default
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 7 days
Maximum Volume Bytes = 10G
Maximum Volumes = 2
}
- Name: Имя пула. В данном случае он называется
Default
. Это может быть стандартный пул, используемый для заданий по умолчанию. - Pool Type: Тип пула. Тип
Backup
указывает, что данный пул предназначен для хранения резервных копий. Возможные значения:Backup
— обычное резервное копирование.Archive
— долговременное архивирование.Cloning
— клонирование данных.
- Recycle: Указывает, можно ли перерабатывать тома в пуле (перезаписывать их, когда они больше не нужны). Возможные значения:
yes
: Тома могут быть повторно использованы.no
: Тома нельзя перерабатывать.
- AutoPrune: Указывает, следует ли автоматически очищать устаревшие или ненужные данные (обрезка томов).
yes
: Устаревшие тома автоматически очищаются.no
: Автоочистка не выполняется.
- Volume Retention: Указывает период хранения данных на каждом томе. В данном случае том хранит данные 7 дней. По истечении этого времени он становится доступен для переработки (если
Recycle = yes
). - Maximum Volume Bytes: Ограничивает максимальный размер каждого тома в пуле. В данном случае размер каждого тома не превышает 10 ГБ. Если данные превышают этот объем, Bacula создаст новый том (при условии, что не превышено количество томов).
- Maximum Volumes: Указывает максимальное количество томов в пуле. Пул может содержать не более 2 томов. Если достигнут лимит, старые тома будут переработаны (при условии, что
Recycle = yes
).
- После того как все изменения были внесены, необходимо проверить файл на наличие ошибок:
/usr/sbin/bacula-dir -t -c /etc/bacula/bacula-dir.conf
Если вывод команды будет пустым, то ошибок в синтаксисе файла нет. При наличии ошибок будет указан номер строки и описание ошибки.
- Перезапускаем сервис
bacula-director
:
systemctl restart bacula-director
Настройка Bacula Storage
Следующим этапом настроим 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
}
Здесь:
- Name: Имя хранилища, которое идентифицирует конкретный Storage Daemon.
- SDPort: Номер порта, на котором слушает Storage Daemon. Используемый порт по умолчанию — 9103.
- WorkingDirectory: Рабочая директория для Storage Daemon. Используется для хранения временных файлов. По умолчанию используется директория
/var/lib/bacula
. - Pid Directory: Указывает директорию, где хранится файл с PID (идентификатор процесса) для Storage Daemon. По умолчанию используется директория
/run/bacula
. - Plugin Directory: Директория, где находятся плагины Bacula для Storage Daemon. Эти плагины могут использоваться для дополнительных функций, таких как шифрование или работа с облачными хранилищами.
- Maximum Concurrent Jobs: Максимальное количество задач, которые одновременно выполняются при помощи компонента Storage Daemon.
- SDAddress: IP-адрес, по которому доступен Storage Daemon. Можно указать как IP-адрес, так и доменное имя. Так как в нашем случае Storage Daemon находится на одном сервере вместе с компонентом Director, то в качестве адреса используется localhost.
- Следующий блок для настройки —
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:
- Name: Имя автозагрузчика для идентификации (загрузчиков может быть больше одного).
- Device: Указывает имя устройства, связанного с этим автозагрузчиком. Это имя должно соответствовать имени, указанному в блоке
Device
в конфигурации Storage Daemon (bacula-sd.conf
). - Changer Command: Указывает команду или скрипт, который используется для управления автозагрузчиком (например, смена носителей). В нашем примере используется пустое значение —
Changer Command = ""
. Пустое значение указывает, что команда для автозагрузчика не используется. Это характерно для виртуальных автозагрузчиков или простых конфигураций, где смена носителей не требуется. - Changer Device: Указывает устройство, связанное с автозагрузчиком. Обычно используется для связи с физическим автозагрузчиком.
Блок Device:
- Name: Указывает имя устройства. Используется для идентификации этого устройства.
- Media Type: Указывает тип носителя, с которым связано устройство. Этот параметр должен совпадать с типом носителя, заданным в блоке
Pool
. - Archive Device: Используется для обозначения полного пути к устройству или каталогу, где будут храниться файлы с резервной копией. В нашем примере файлы резервной копии будут храниться в каталоге
/srv/backup
. - LabelMedia: Определяет, должен ли Bacula автоматически маркировать (label) носители, которые еще не были промаркированы.
- Random Access: Указывает, поддерживает ли устройство произвольный доступ.
- AutomaticMount: Указывает, следует ли автоматически монтировать устройство при его использовании.
- RemovableMedia: Указывает, является ли носитель съемным.
- AlwaysOpen: Указывает, должно ли устройство оставаться открытым постоянно или открываться только при необходимости.
- Maximum Concurrent Jobs: Указывает максимальное количество задач (jobs), которые могут одновременно использовать это устройство.
- Так как ранее мы задали директорию, где будут храниться файлы резервной копии, то создаем ее:
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 следующие:
- T (Success) — Задание успешно выполнено.
- E (Error) — Задание завершилось с ошибкой.
- A (Canceled) — Задание было остановлено пользователем.
- F (Fatal) — Задание завершилось с критической ошибкой.
- R (Running) → Terminated — Задание завершилось после выполнения (с успешным или другим статусом).
- Также отслеживать процесс и возможные ошибки резервных копий можно из лог-файла:
cat /var/log/bacula/bacula.log
- После завершения создания резервной копии файл будет сохранен в ранее созданную директорию:
file Vol-0001
Восстановление файлов из резервной копии
Ранее мы сделали резервную копию директории /root/test_backups
, где располагались шесть файлов с расширением .txt
. Предположим, мы удалили или утратили данные файлы. Запустим процесс восстановления, используя следующие шаги:
- Переходим в консоль Bacula:
bconsole
- Далее вводим команду
restore
:
restore
- Для восстановления данных доступно 12 различных опций. Мы воспользуемся опцией под цифрой 3 — «Enter list of comma separated JobIds to select», которая принимает уникальный номер совершенной операции. Вводим цифру 3:
- Ранее мы создали резервную копию под номером 1. Соответственно используем данный номер введя его в терминале:
- Мы попадаем в режим выбора файлов, которые необходимо восстановить. Наши файлы хранились в каталоге
root/test_backups
. Переходим туда:
Как можно увидеть, программа отобразила все ранее сохраненные файлы.
- Т.к. нам нужно восстановить всю директорию, то возвращаемся назад на один каталог:
cd . .
И, используя команду mark
, отмечаем весь каталог test_backups
:
mark test_backups/
- Вводим команду
done
:
done
Система выведет финальный отчет о том, какие данные будут восстановлены и куда они будут сохранены. В нашем случае это директория /root/restored-files
.
Вводим yes
для начала процесса восстановления:
Проверяем результат восстановления:
Надежные VDS для ваших проектов
Заключение
По итогу мы рассмотрели установку и настройку программы Bacula. Bacula представляет собой клиент-серверное приложение для создания резервных копий. Программу можно использовать не только для копирования обычных файлов, но также для создания копий виртуальных машин, образов ОС и многих других файлов благодаря поддержке различных плагинов.