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

Обновлено и опубликовано Опубликовано:

Используемые термины: BareosUbuntu, 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:

Начальная страница веб-сервера Apache в Ubuntu

Веб-сервер работает. Идем дальше.

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/ — мы должны увидеть окно авторизации. Вводим наши логин и пароль:

Страница входа в веб-интерфейс Bareos

Мы должны попасть на страницу со панели управления.

Стоит отметить, что мы могли обойтись и без командной оболочки bconsole — нужно создать файл /etc/bareos/bareos-dir.d/console/admin.conf с нужными значениями и перезапустить bareos.

3. SSL (опционально)

Хорошей идеей будет настройка доступа к веб-интерфейсу по защищенному протоколу https. Для этого нам нужно:

  1. Выделить доменное имя подключения к серверу.
  2. Получить корректных сертификат для имени, по которому мы решили обращаться к серверу.
  3. Настроить веб-сервер 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

# Ubuntu # Резервное копирование # Серверы
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет