Настройка и использование сервера резервного копирования BAREOS на Ubuntu

Используемые термины: Bareos, Ubuntu, PostgreSQL.
В инструкции рассмотрим основные моменты по развертыванию системы резервного копирования на базе бесплатного программного продукта Bareos. В качестве операционной системы мы будем использовать Ubuntu 22.04 и 24.04. Также мы будем использовать в качестве базы данных PostgreSQL.
Предварительная настройка
Установка и обновление пакетов
Настройка времени
Открытие нужных портов
Обновление корневых сертификатов
Установка основных компонентов Bareos
Конфигурирование сервера баз данных
Настройка веб-интерфейса
Установка и запуск
Создание пользователя для доступа к веб-консоли
Настройка https
Конфигурирование агента на удаленную систему
Установка клиента
Регистрация агента на сервере
Работа с заданиями
Вводные данные по работе с задачами
Задание резервного копирования локальных файлов
Резервирование данных на удаленном сервере
Применение шаблона
Выполнение заданий по расписанию
Дополнительные опции при настройке заданий
Оптимизация настроек пула для оптимального хранения данных
Анализ проблем и ошибок
Включение отладки для заданий
Примеры встречающихся ошибок и способы их решения
Подготовка системы
Выполним предварительные настройки.
Пакеты
Обновим список пакетов в репозиториях:
apt update
На свежеустановленной системе также рекомендуется выполнить обновление пакетов:
apt upgrade
Установим пакеты:
apt install wget curl
* данные пакеты позволят загружать файлы по протоколам http и ftp.
Время
Для корректного отображения времени создания резервных копий и работы расписания, настроим часовой пояс и синхронизацию времени.
Установим сервис chrony:
apt install chrony
Для настройки часового пояса вводим:
timedatectl set-timezone Europe/Moscow
Настройка брандмауэра
Нам нужно разрешить следующие порты:
- 80 и 443 — для веб-интерфейса.
- 9101 — для Bareos Director: управление заданиями (служба bareos-dir).
- 9102 — File Daemon: сбор данных с клиентов (служба bareos-fd).
- 9103 — Storage Daemon: работа с накопителями для хранения резервных копий (служба bareos-sd).
По умолчанию, в системах на базе DEB, нет запрещающих правил. В этом случае, настраивать правила не обязательно.
В зависимости от утилитой управления брандмауэром, команды будут отличаться.
а) Для iptables:
apt install iptables iptables-persistent
iptables -I INPUT -p tcp --match multiport --dports 80,443 -j ACCEPT
iptables -I INPUT -p tcp --match multiport --dports 9101:9103 -j ACCEPT
netfilter-persistent save
б) Для UFW:
ufw allow 80,443
ufw allow 9101:9103
Корневые сертификаты
Репозиторий Bareos работает по https с сертификатом от Let's Encrypt. Если наши корневые сертификаты будут неактуальны, мы получим ошибку Issued certificate has expired.
Нам нужно выполнить две команды:
apt install ca-certificates
Подробнее процесс описан в инструкции Обновление корневых сертификатов на Linux.
Установка Bareos
Установка выполняется из репозитория. Однако, его нет в базовых репозиториях, поэтому сначала, выполним дополнительные действия.
На странице официального сайта мы должны ознакомиться с поддерживаемыми дистрибутивами. Для удобства работы, создаем переменную:
DIST=xUbuntu_24.04
* в нашем примере мы будем устанавливать программный продукт для группы релизов xUbuntu_24.04 (само значение для переменной мы смотрим в списке каталогов по ссылке выше).
Скачиваем настройки для репозитория:
wget https://download.bareos.org/current/${DIST}/bareos.list -O /etc/apt/sources.list.d/bareos_${DIST}.list
* если получим ошибку Issued certificate has expired переходим к решению ниже.
Устанавливаем пакет для шифровки и дешифровки цифровых подписей:
apt install gnupg2
Устанавливаем ключ подписи пакетов в репозитории:
curl -fsSL https://download.bareos.org/current/${DIST}/Release.key | gpg --dearmor -o /etc/apt/trusted.gpg.d/bareos.gpg
Обновляем список пакетов:
apt update
Можно устанавливать bareos:
apt install bareos bareos-database-postgresql
* мы установим сам пакет bareos и набор файлов для его работы с postgresql.
Установка завершена. Проверяем работу сервисов:
systemctl status bareos-dir bareos-fd bareos-sd
На запрос выполнения конфигурирования подключения к базе и самой базы отвечаем отрицательно:
Configure database for bareos-database-common with dbconfig-common? [yes/no] no
Развертывание и настройка сервера баз данных
На момент обновления инструкции в последней версии BAREOS была прекращена поддержка базы MySQL/MariaDB — осталась только postgresql. Выполним установку его серверной части:
apt install postgresql postgresql-contrib
Выполним скрипты для подготовки базы данных, которые шли в комплекте с установленным пакетом bareos-database-postgresql:
su - postgres -c /usr/lib/bareos/scripts/create_bareos_database
Мы должны увидеть результат:
Info: Creating database 'bareos'
CREATE DATABASE
ALTER DATABASE
Info: Database encoding OK
Info: Creation of database 'bareos' succeeded.
su - postgres -c /usr/lib/bareos/scripts/make_bareos_tables
su - postgres -c /usr/lib/bareos/scripts/grant_bareos_privileges
* в соответствии с названиями скриптов, первый создает базу, второй создает таблицы и третий — настраивает привилегии для созданных объектов.
Стартуем сервисы:
systemctl start bareos-dir bareos-fd bareos-sd
Посмотрим состояние командой:
systemctl status bareos-dir bareos-fd bareos-sd
Запускаем веб-интерфейс
Разобьем процесс на несколько этапов.
1. Установка и запуск веб-сервера
Устанавливаем компонент для обеспечения веб-интерфейса:
apt install bareos-webui
Также устанавливаем apache и модуль для PHP:
apt install apache2 libapache2-mod-php
Перезапускаем веб-сервер apache:
systemctl restart apache2
Перезапускаем компонент Director:
systemctl restart bareos-dir
Открываем браузер и переходим по адресу http://<IP-адрес сервера> — мы должны увидеть стартовую страницу Apache:
Веб-сервер работает. Идем дальше.
2. Создание доступа и вход
Создаем учетную запись для доступа к UI. Для этого входим в консоль управления bareos:
bconsole
И вводим команду:
* configure add console name=admin password=my_password profile=webui-admin tlsenable=no
* где:
- admin — имя учетной записи для входа;
- my_password — пароль.
- profile — профиль с политиками доступа. Хранятся в каталоге /etc/bareos/bareos-dir.d/profile. По умолчанию создается 3 профиля:
- webui-admin — расширенный доступ к системе.
- operator — доступы для работы с заданиями.
- webui-readonly — только просмотр статусов и конфигурации.
- tlsenable — наше подключение к сервису Director должно работать не по защищенному каналу. В противном случае, мы получим ошибку Sorry, cannot authenticate. Wrong username, password or SSL/TLS handshake failed.
Мы должны увидеть:
Created resource config file "/etc/bareos/bareos-dir.d/console/admin.conf":
Console {
Name = "admin"
Password = "my_password"
Profile = webui-admin
TlsEnable = no
}
Перезапускаем bareos и выходим из консоли:
* reload
* exit
Открываем браузер и переходим по адресу http://<IP-адрес сервера>/bareos-webui/ — мы должны увидеть окно авторизации. Вводим наши логин и пароль:
Мы должны попасть на страницу со панели управления.
Стоит отметить, что мы могли обойтись и без командной оболочки bconsole — нужно создать файл /etc/bareos/bareos-dir.d/console/admin.conf с нужными значениями и перезапустить bareos.
3. SSL (опционально)
Хорошей идеей будет настройка доступа к веб-интерфейсу по защищенному протоколу https. Для этого нам нужно:
- Выделить доменное имя подключения к серверу.
- Получить корректных сертификат для имени, по которому мы решили обращаться к серверу.
- Настроить веб-сервер Apache для работы с полученным сертификатом.
В рамках данной инструкции, мы не будем рассматривать подробно каждый из пунктов.
Доменное имя
Домен можно зарегистрировать на внутреннем DNS. Для большинства компаний это самый актуальный вариант. Если наш сервер должен быть доступен из глобальной сети, то можно использовать глобальный DNS для нашего домена. Ну и самый быстрый вариант, прописать hostname в локальный файл hosts, с которого мы будем заходить на сервер. Предположим, что наш сервер резервного копирования должен быть доступен по имени bareos.dmosk.ru.
Сертификат
Получить сертификат можно тоже несколькими способами:
- купить для нашего домена или использовать уже купленный wildcard.
- получить бесплатно от Let's Encrypt.
- получить от внутреннего центра сертификации, если такой имеется.
Предположим, что наш сертификат получен и его файлы размещены в каталогах /etc/pki/tls/certs. и /etc/pki/tls/certs.
Настройка Apache
Подробнее, процесс описан в инструкции Настройка Apache + SSL для работы сайта по HTTPS. Мы рассмотрим настройку кратко.
Устанавливаем модуль работы по SSL:
a2enmod ssl
Открываем файл:
vi /etc/apache2/mods-enabled/ssl.conf
Добавляем опции:
SSLCertificateFile /etc/pki/tls/certs/bareos.crt
SSLCertificateKeyFile /etc/pki/tls/private/bareos.key
SSLCertificateChainFile /etc/pki/tls/certs/bareos-chain.crt
* где SSLCertificateFile и SSLCertificateKeyFile — пути до файлов ключей с нашим сертификатом. SSLCertificateChainFile — при необходимости, путь до цепочки сертификатов (нужно использовать, если внутри файла SSLCertificateFile нет информации о всех сертификационных центрах).
Проверяем корректность настроек в Apache:
apachectl configtest
Если видим:
Syntax OK
Перечитываем конфигурацию apache:
apachectl graceful
Открываем браузер и переходим по адресу https://bareos.dmosk.ru/bareos-webui/, где bareos.dmosk.ru — имя хоста, для которого мы получили сертификат. Мы должны подключиться к веб-интерфейсу по защищенному соединению.
Установка и настройка клиента
Рассмотрим процесс подключения клиентов, которые работают под управлением Linux Ubuntu и CentOS. Узнать тип и версию системы можно командой:
cat /etc/os-release
Установка клиента
Также как с сервером, на странице официального сайта мы должны ознакомиться с поддерживаемыми дистрибутивами. После чего создаем переменную. В зависимости от дистрибутива операционной системы, наши действия будут отличаться.
На Linux DEB (Ubuntu / Debian)
Задаем переменную с названием дистрибутива, который мы нашли на сайте:
DIST=xUbuntu_22.04
* для Ubuntu версии 22.04.
Скачиваем настройки для репозитория:
wget https://download.bareos.org/current/${DIST}/bareos.list -O /etc/apt/sources.list.d/bareos_${DIST}.list
* если получим ошибку Issued certificate has expired переходим к решению ниже.
Устанавливаем пакет для шифровки и дешифровки цифровых подписей:
apt install gnupg2
Устанавливаем ключ подписи пакетов в репозитории:
curl -fsSL https://download.bareos.org/current/${DIST}/Release.key | gpg --dearmor -o /etc/apt/trusted.gpg.d/bareos.gpg
Обновляем список пакетов:
apt update
Устанавливаем пакет для bareos-fd:
apt install bareos-filedaemon
Разрешаем автозапуск сервиса:
systemctl enable bareos-filedaemon
Настраиваем брандмауэр (открываем порт 9102/tcp).
а) IPTABLES:
iptables -I INPUT -p tcp --dport 9102 -j ACCEPT
apt install iptables-persistent
netfilter-persistent save
а) UFW:
ufw allow 9102
На Linux CentOS / Rocky
Задаем переменные:
DIST=EL_9
* для CentOS или Rocky версии 9.
Скачиваем настройки для репозитория:
wget https://download.bareos.org/current/${DIST}/bareos.repo -O /etc/yum.repos.d/bareos_${DIST}.repo
* если получим ошибку Issued certificate has expired переходим к решению ниже.
Устанавливаем пакет для bareos-fd:
yum install bareos-fd
На все запросы принять ключ отвечаем утвердительно.
Разрешаем автозапуск сервиса и стартуем его:
systemctl enable bareos-fd --now
Настраиваем брандмауэр (открываем порт 9102/tcp):
firewall-cmd --permanent --add-port=9102/tcp
firewall-cmd --reload
Добавление клиента на сервер
Подключаемся к серверу и заходим в консоль bareos:
bconsole
И добавляем нового клиента:
* configure add client name=client_name address=192.168.0.22 password=client_password
* где client_name — произвольное имя, по которому нам будет удобно идентифицировать клиента; 192.168.0.22 — IP-адрес компьютера-клиента; client_password — пароль, который нужно будет использовать данному клиенту для подключения к серверу.
Если у нас есть необходимость подключить клиента по нестандартному порту (не 9102), то указываем его в опции port:
* configure add client name=client_name address=192.168.0.22 port=9103 password=client_password
Мы получим вывод на подобие:
Exported resource file "/etc/bareos/bareos-dir-export/client/client_name/bareos-fd.d/director/bareos-dir.conf":
Director {
Name = bareos-dir
Password = "[md5]23ea8b731947b6aff12b13c98bca39ae"
}
Created resource config file "/etc/bareos/bareos-dir.d/client/client_name.conf":
Client {
Name = "client_name"
Address = "192.168.0.22"
Password = "client_password"
}
You have messages.
Для нас теперь важно содержимое для экспорта, которое в нашем примере имеет вид:
Director {
Name = bareos-dir
Password = "[md5]23ea8b731947b6aff12b13c98bca39ae"
}
Перезапускаем сервис директора и выходим из консоли:
* reload
* exit
Переходим в консоль клиента, открываем файл:
vi /etc/bareos/bareos-fd.d/director/bareos-dir.conf
И меняем содержимое на то, что мы получили на стороне сервера:
Director {
Name = bareos-dir
Password = "[md5]23ea8b731947b6aff12b13c98bca39ae"
}
На клиенте перезапускаем файловую службу. Команды немного отличаются в зависимости от дистрибутива системы.
а) на Ubuntu:
systemctl restart bareos-filedaemon
б) на CentOS:
systemctl restart bareos-fd
Заходим на веб-интерфейс в раздел «Клиенты» — мы должны увидеть добавленных клиентов:
* нас не должно смущать отсутствие значков и версий для клиентов — они появятся после выполнения первых заданий на них.
Работа с заданиями
Bareos предлагает довольно большое количество настроек для создания заданий. Это могут быть задачи резервного копирования, восстановления, проверки. Также задачи могут подразделяться, например, для резервного копирования — полный бэкап, дифференциальный, инкрементальный. Мы можем настраивать полноценные задания или применять шаблоны. Попробуем в этом всем разобраться пошагово.
0. Вводная часть
Опишем общие моменты для наших заданий.
Мы будем работать в каталогах:
- /etc/bareos/bareos-dir.d/job — хранение файлов с описанием заданий.
- /etc/bareos/bareos-dir.d/fileset — списки файлов для резервного копирования или восстановления.
- /etc/bareos/bareos-dir.d/jobdefs — каталог для хранения шаблонов.
- /etc/bareos/bareos-dir.d/schedule — расписания для автоматического выполнения заданий.
Уровни резервирования и восстановления:
- Full. Полная копия файлов, указанных в задании. Удобен для восстановления, но занимает много места.
- Differential. Копия всех файлов, которые были изменены с момента последней копии Full. Для восстановления требуется 1 копия Differential и сделанная перед этим Full. Занимает намного меньше места, по сравнению с Full, но менее удобное восстановление.
- Incremental. Копия всех файлов, которые были изменены с момента последней копии Differential и/или Full. Для восстановления требуются все копии Incremental, которые сделаны после Differential и/или Full. Занимает мало места, но процесс восстановления самый неудобный.
Типы заданий:
- Restore — восстановление.
- Backup — резервное копирование.
- Admin — очистка каталога от мусора.
- Migrate — задание для проверки, есть ли что-то для миграции.
- Copy — задание для проверки, есть ли что-то для копирования.
- Verify — проверка резервных копий — сравнение файлов на источнике и целевом носителе.
- Consolidate — объединяет файлы для инкрементальных и дифференциальных копий. Доступно с версии bareos 16.2.4.
Синтаксис для расписаний:
Момент выполнения | Описание | Варианты |
---|---|---|
<week-keyword> | Неделя месяца | 1st | 2nd | 3rd | 4th | 5th | first | second | third | fourth | fifth | last |
<wday-keyword> | День недели | sun | mon | tue | wed | thu | fri | sat | sunday | monday | tuesday | wednesday | thursday | friday | saturday |
<week-of-year-keyword> | Неделя года | w00 | w01 | ... w52 | w53 |
<month-keyword> | Месяц | jan | feb | mar | apr | may | jun | jul | aug | sep | oct | nov | dec | january | february | ... | december |
<12hour> | Время в формате 12am/pm | 0 | 1 | 2 | ... 12 |
<hour> | Время в формате 24 | 0 | 1 | 2 | ... 23 |
<minute> | Минуты | 0 | 1 | 2 | ... 59 |
<day> | Дни месяца | 1 | 2 | ... 31 |
<time> | Время | <hour>:<minute> | <12hour>:<minute>am | <12hour>:<minute>pm |
<time-spec> | Указать на время выполнения | at <time> | hourly |
<day-range> | Диапазон дней | <day>-<day> |
<month-range> | Диапазон месяцев | <month-keyword>-<month-keyword> |
<wday-range> | Диапазон дней недели | <wday-keyword>-<wday-keyword> |
<modulo> | Чет, нечет | <day>/<day> | <week-of-year-keyword>/<week-of-year-keyword> |
<date> | Дата | <date-keyword> | <day> | <range> |
<day-spec> | Варианты для указания дней недели | <day> | <wday-keyword> | <day> | <wday-range> | <week-keyword> <wday-keyword> | <week-keyword> <wday-range> | daily |
<month-spec> | Варианты для указания месяцев | <month-keyword> | <month-range> | monthly |
* примеры взяты с официального сайта.
1. Создание простого задания резервного копирования
Для начала создадим задание резервного копирования некоторых файлов нашего сервера, которое нужно запускать вручную.
Создаем файл с описанием задания:
vi /etc/bareos/bareos-dir.d/job/FirstJob.conf
Job {
Name = "FirstJob"
Client = "bareos-fd"
Description = "Job Backup"
Level = Full
Storage = File
Pool = Full
Type = Backup
FileSet = "FirstFileset"
Messages = Standard
Priority = 5
}
* где:
- Name — любое произвольное название для нашего задания.
- Description — произвольное описание.
- Level — глубина задания: полное (Full), разностное (Differential), инкрементальное (Incremental).
- Storage — устройство хранения файлов с резервными копиями. По умолчанию, создано только одно с названием File.
- Pool — пулы хранения информации на устройстве. Создаются с целью настройки ограничений по времени хранения и разрешения ротации. По умолчанию, создано 3 пула — Full, Differential и Incremental, каждый из которых оптимален под соответствующий Level.
- Type — тип задания. Доступны варианты Backup, Restore и Verify.
- FileSet — набор файлов для резервного копирования. Описывается в отдельном файле. Мы создадим соответствующее описание ниже.
- Messages — пресет для сбора сообщений с клиентов.
- Priority — чем ниже число, тем выше приоритет. Низкий приоритет задания может привести к выполнению его в полследнюю очередь, если в данный момент нужно выполнить другие задания.
Теперь создадим файл со списком объектов для резервирования:
vi /etc/bareos/bareos-dir.d/fileset/FirstFileset.conf
FileSet {
Name = "FirstFileset"
Description = "Backup files"
Include {
Options {
Signature = MD5
}
File = "/tmp"
}
}
* где:
- Name — любое произвольное название для списка файлов.
- Description — произвольное описание.
- Include — директива для добавления файлов с дополнительными настройками.
- Options — дополнительные настройки для группы файлов, которые нужно включить в задание.
- Signature — алгоритм для расчета контрольной суммы для всех файлов в директиве Include. Возможны варианты MD5 или SHA1.
- File — путь до файла или каталога, который нужно включить в задание. Обязательно использовать двойные кавычки. Одинарные не работают.
Тестируем задание
Попробуем создать тестовый файл:
echo "test" > /tmp/backup_test_file
Открываем консоль bareos:
bconsole
Перезапускаем конфигурацию (чтобы применить наши настройки):
* reload
Запустим наше первое задание:
* run job=FirstJob
Система покажет сводную информацию и задаст вопрос, запустить ли задание — отвечаем утвердительно:
OK to run? (yes/mod/no): yes
Задание будет помещено в очередь:
Job queued. JobId=8
В веб-интерфейсе на вкладке «Задания» мы должны увидеть информацию об успешно выполненном задании:
Выходим из консоли
* exit
Попробуем удалить наш тестовый файл:
rm -f /tmp/backup_test_file
Заходим на веб-интерфейс - переходим на вкладку «Восстановление» - выбираем клиента и задание резервного копирования - справа в нее появится список файлов, которые попали в резервную копию - выбираем наш тестовый файл:
Пропишем путь до каталога, куда нужно восстановить файл и нажимаем Восстановление:
* в каталог /tmp будет восстановлен файл /tmp/backup_test_file. Полный путь будет /tmp/tmp/backup_test_file.
В списке заданий дожидаемся успешного выполнения и проверяем, что в каталоге /tmp/tmp появился нужный нам файл.
2. Задание для выполнения на агенте
Наши действия будут похожими на задание 1. Нам только нужно указать другого агента. Для начала, сделаем копии наших конфигурационных файлов:
cp /etc/bareos/bareos-dir.d/job/FirstJob.conf /etc/bareos/bareos-dir.d/job/SecondJob.conf
cp /etc/bareos/bareos-dir.d/fileset/FirstFileset.conf /etc/bareos/bareos-dir.d/fileset/SecondFileset.conf
Отредактируем файлы:
vi /etc/bareos/bareos-dir.d/job/SecondJob.conf
Меняем значение для:
Name = "SecondJob"
Client = "ubuntu"
...
FileSet = "SecondFileset"
* в нашем примере резервная копия будет делаться для клиента ubuntu, а также меняем набор файлов на SecondFileset.
Теперь открываем файл:
vi /etc/bareos/bareos-dir.d/fileset/SecondFileset.conf
И изменим набор файлов на:
Name = "SecondFileset"
...
...
File = "/tmp"
File = "/etc"
* обратите внимание, в данном примере мы перечислили 2 цели для бэкапа — каталоги /tmp и /etc.
Для проверки задания заходим в консоль, применяем настройки, запускаем задание:
bconsole
* reload
* run job=SecondJob
... и находим статус выполнения в веб-интерфейсе.
Попытка восстановления была рассмотрена в примере 1 — по аналогии можно попробовать вернуть некоторые файлы.
3. Использование шаблона
Усложним задачу — настроим шаблоны для более удобного управления заданиями.
По настройкам шаблоны ничем не отличаются от обычных заданий — они просто объединяют в себе нужные опции, чтобы не нужно было их повторять при описании заданий. Поняв это, работать с ними будет просто. Давайте приведем пример.
Создадим файл:
vi /etc/bareos/bareos-dir.d/jobdefs/DefThirdJob.conf
JobDefs {
Name = "DefThirdJob"
Description = "Job Definition Backup"
Level = Full
Storage = File
Pool = Full
Type = Backup
FileSet = "SettingsFileset"
Messages = Standard
Priority = 10
}
* как видим, все эти настройки мы уже использовали, когда создавали первую задачу.
В шаблоне мы используем набор файлов SettingsFileset — создадим его:
vi /etc/bareos/bareos-dir.d/fileset/SettingsFileset.conf
FileSet {
Name = "SettingsFileset"
Description = "Backup of Setting files"
Include {
Options {
Signature = MD5
Compression = LZ4
}
File = "/etc"
}
}
* мы добавили опцию Compression — позволяет архивировать наши файлы. Возможны варианты LZ4 и GZIP.
Теперь можно создать файл с заданием:
vi /etc/bareos/bareos-dir.d/job/ThirdJob.conf
Job {
Name = "ThirdJob"
Client = "CentOS"
Description = "Job Backup"
JobDefs = "DefThirdJob"
}
* наше задание будет привязано к шаблону DefThirdJob и выполняться для клиента CentOS.
Готово — запускаем:
bconsole
* reload
* run job=ThirdJob
... и находим статус выполнения в веб-интерфейсе.
4. Планируем задачу
Теперь сделаем так, чтобы наша задача выполнялась по расписанию.
Создаем файл:
vi /etc/bareos/bareos-dir.d/schedule/EveryDay.conf
Schedule {
Name = "EveryDay"
Run = daily at 21:00
Run = daily at 07:00
}
* наше задание должно выполняться ежедневно 2 раза — в 7 утра и 9 вечера.
Привязать задачу к расписанию можно в файле самого задания или в его шаблоне:
Schedule = "EveryDay"
Перезапустим сервис:
systemctl reload bareos-dir
* обратите внимание, что в этом примере мы решили перезапустить конфигурацию без консоли bconsole.
Переходим в веб-интерфейсе на вкладку «Расписания» — мы должны увидеть наше задание:
5. Дополнительные директивы
Рассмотрим некоторые дополнительные полезные опции.
Cкрипты до и после задания
Мы можем выполнить определенные команды до или после выполнения задания. Существует 2 метода настройки — полностью на стороне Bareos или запуск скрипта на агенте.
а) Запуск скрипта. Данные способ удобнее, если на удаленной системе есть готовый скрипт или требуется сложная логика выполнения, которую не описать одной командой и нужен скрипт.
Настраиваем в шаблоне или задании:
Run Before Job = '/path/to/script.sh'
Run After Job = '/path/to/script.sh'
* запустить скрипт на сервере соответственно до и после выполнения задания.
Client Run Before Job = '/path/to/script.sh'
Client Run After Job = '/path/to/script.sh'
* запустить скрипт на клиенте соответственно до и после выполнения задания.
Важно отметить, что данная директива требует в качестве значения использовать только путь до исполняемого скрипта и не передает параметров.
б) Команда при описании задания. Данным способом мы создаем дополнительную директиву RunScript при описании шаблона или задания. Это удобнее, если мы хотим полностью контролировать процесс на стороне сервера.
Например:
Job {
...
RunScript {
FailJobOnError = Yes
RunsOnClient = Yes
RunsWhen = Before
Command = "su postgres -c 'pg_dumpall > /var/tmp/postgresql_dump.sql'"
}
RunScript {
RunsOnSuccess = Yes
RunsOnClient = Yes
RunsWhen = After
Command = "/var/tmp/postgresql_dump.sql"
}
...
}
* где:
- FailJobOnError — завершить процесс резервного копирования, если скрипт вернул ошибку.
- RunsOnSuccess — запускать только при успешном выполнении резервной копии.
- RunsOnClient — запустить на клиенте (Yes) или на сервере (No).
- RunsWhen — когда запускать. Да резервного копирования (Before) или после (After).
- Command — команда, которую нужно выполнить.
Не забываем:
systemctl reload bareos-dir
Оптимизация настроек пула для оптимального хранения данных
По умолчанию, настройка пула выполнена таким образом, что наше хранилище очень легко может заполнить все дисковое пространство сервера или может закончится выделенное число пулов для резервного копирования.
Нам необходимо настроить пулы. Как правило, настраивать нужно пул Full, так как больше всего пространства занимает он:
vi /etc/bareos/bareos-dir.d/pool/Full.conf
Для начала обращаем внимание на две опции:
Volume Retention = 365 days
Maximum Volume Bytes = 50G
Maximum Volumes = 100
* где:
- Volume Retention — через какое время можно очищать данные из пула. Другими словами, через какое время бэкапы можно считать устаревшими.
- Maximum Volume Bytes — объем одного файла пула.
- Maximum Volumes — сколько файлов может быть создано для расширения пула.
Необходимо выполнить самостоятельно расчет, сколько данных может уместится на нашем носителе. Например, если у нас носитель на 4 Тб., то пул может занять 50G * 100 = 5 Тб. Значит нам нужно уменьшить либо количество файлов, либо их объем.
Второй, нам нужно добавить данные строки:
Recycle Current Volume = yes
Purge Oldest Volume = yes
Auto Prune = yes
* где:
- Recycle Current Volume — разрешает очистить текущий смонтированный том в пуле.
- Purge Oldest Volume — разрешает принудительную переработку самого старого тома, когда требуется новый.
- Auto Prune — разрешает применение автоматической чистки (для устаревших данных, согласно опции Volume Retention).
Чтобы применить настройку, перезапускаем демон для работы с носителями:
systemctl restart bareos-sd
Анализ и устранение проблем
Для резервного копирования очень важно уметь отслеживать и устранять ошибки. Мы рассмотрим процесс дебага при выполнении заданий, а также пример ошибок при настройке и эксплуатации сервера.
Debug при выполнении заданий
В консоли веб-интерфейса, а также логах сервера мы не сможем найти достаточно информации об ошибках, которые возникают в ходе выполнения заданий.
Чтобы получить нужную для процесса отслеживания ошибок информацию, мы должны включить трейс для клиента. Это делается в консоли bconsole, например:
* setdebug client=client_name level=200 trace=1
* в данном примере мы запустим логирование на клиенте client_name с уровнем детализации 200.
В ответ мы получим что-то на подобие:
2000 OK setdebug=200 trace=1 hangup=0 timestamp=0 tracefile=/var/lib/bareos/client_name-fd.trace
Готово, теперь на агенте в файл /var/lib/bareos/client_name-fd.trace будет записываться отладочная информация. Посмотреть ее можно командой:
tail -f /var/lib/bareos/client_name-fd.trace
После отладки и устранения проблемы, не забываем выключить режим дебага:
* setdebug client=client_name level=0 trace=0
А также на клиенте можно удалить файл с логами:
rm -f /var/lib/bareos/client_name-fd.trace
Возможные ошибки
Рассмотрим примеры ошибок, с которыми столкнулся я.
1. configure error: Could not find config Resource "Profile" referenced on line 4 : Profile = webui-admin
Ошибка появляется при попытке создать учетную запись для доступа к веб-интерфейсу.
Причина: bareos не видит файлы с описанием профилей, которые устанавливаются с пакетом bareos-webui.
Решение: как правило, такое происходит, если мы не перезапустили службу директора после установки дополнительного компонента. Выполним команду:
systemctl restart bareos-dir
2. Sorry, cannot authenticate. Wrong username, password or SSL/TLS handshake failed
Ошибка появляется при попытке входа в веб-интерфейс.
Причина: с версии 18.2 bareos использует по умолчанию TLS-PSK, которая не поддерживается со стороны PHP по умолчанию.
Решение: к сожалению, мне не удалось разобраться с правильным вариантом использования TLS-PSK, поэтому, в качестве решения, предлагается не использовать шифрование между основным сервисом bareos и UI. Для этого открываем файл с настроенной учетной записью входа (в нашем примере, admin):
vi /etc/bareos/bareos-dir.d/console/admin.conf
И добавим строку:
Console {
...
TLS Enable = No
}
Перезапустим сервис:
systemctl restart bareos-dir
Можно проверять.
3. Error: lib/bsock_tcp.cc:186 BnetHost2IpAddrs() for host "XXX" failed: ERR=Name or service not known
Также текст может быть такой:
Error: lib/bsock_tcp.cc:184 BnetHost2IpAddrs() for host "XXX" failed: ERR=Temporary failure in name resolution
Ошибка появляется при выполнении задания резервного копирования.
Причина: клиент, на котором выполняется резервное копирование не может определить имя хоста storage (оно указано в конфигурационном файле storage). Возможно, было изменено имя сервера или клиент находится за пределами внутренней сети и не может разрешать имена внутренних сервисов.
Решение: открываем файл на сервере:
vi /etc/bareos/bareos-dir.d/storage/File.conf
Необходимо убедиться, что в директиве Address у нас указано актуальное имя сервера:
...
Address = bareos.dmosk.ru
...
Если пришлось внести правки, перезапустим сервис:
systemctl restart bareos-dir
На стороне клиента нам нужно убедиться, что сервер доступен по имени. Для этого можно использовать утилиту nslookup:
nslookup bareos.dmosk.ru
Если на клиенте нет возможности указать DNS, который будет разрешать имя сервера BAREOS, то можно прописать его в файле hosts:
vi /etc/hosts
192.168.0.20 bareos.dmosk.ru
* здесь предполагается, что адрес сервера 192.168.0.20.
4. Issued certificate has expired
При попытке загрузить файл с настройками репозитория мы можем получить ошибку сертификата. Пример сообщения:
ERROR: cannot verify download.bareos.org's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=R3’:
Issued certificate has expired.
To connect to download.bareos.org insecurely, use `--no-check-certificate'.
Причина: наша система не доверяет сертификату, который используется репозиторием. Как правило, это наблюдается при устаревании корневых сертификатов на нашем компьютере.
Решение: мы можем решить проблемы 2 способами.
а) быстрый способ: подходит как временное решение. Мы можем сказать утилите wget не проверять сертификат — для этого добавляем опцию --no-check-certificate:
wget --no-check-certificate ...
б) правильный способ: обновить корневые сертификаты.
Подробнее процесс описан в статье Обновление корневых сертификатов на Linux.
5. Could not connect to Storage daemon on XXX:9103. ERR=No route to host
Задание зависает и выпадает с ошибкой. В сообщениях директора мы можем увидеть сообщение:
bareos-dir JobId 3: Warning: lib/bsock_tcp.cc:123 Could not connect to Storage daemon on bareos:9103. ERR=No route to host
Причина: сервер резервного копирования подключается к Storage daemon по сети. Данная ошибка говорит о том, что подключение не удалось.
Решение: открываем файл:
vi /etc/bareos/bareos-dir.d/storage/File.conf
А также остальные файлы из каталога /etc/bareos/bareos-dir.d/storage. Находим:
Address = bareos
* где bareos — имя сервера с ролью Storage daemon.
Нам нужно убедиться, что сервер из директивы Address доступен по сети.
6. DateTime::__construct()
При попытке загрузить данные в веб-интерфейсе на закладке Timeline ничего не происходит, а в консоль браузера отображается ошибка 500 при попытке загрузить данные со страницы /bareos-webui/job/getData/?data=timeline. Если перейти на данную страницу мы увидим исключение с текстом:
DateTime::__construct(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone.
Причина: по умолчанию php устанавливается без настройки временной зоны. Без данной настройки приложение не может работать корректно, так как не отрабатывает функция date_default_timezone_set.
Решение: открываем файл:
vi /etc/php.ini
Добавляем строку:
date.timezone = "Europe/Moscow"
* где Europe/Moscow — нужный часовой пояс.
Перезапускаем веб-сервер:
systemctl reload httpd