Bareos на Ubuntu: сервер резервного копирования, веб-интерфейс и задания
Bareos (Backup Archiving Recovery Open Sourced) — открытая система резервного копирования с централизованным управлением: Director (управление), File Daemon (агент сбора данных), Storage Daemon (хранение) и веб-интерфейс. В качестве базы используется PostgreSQL.
Инструкция для Ubuntu 22.04/24.04/26.04.
Подготовка системы
Пакеты
apt update
apt upgrade
apt install wget curl
Время
apt install chrony
timedatectl set-timezone Europe/Moscow
Брандмауэр
Открываем порты:
80и443— веб-интерфейс;9101— Director (bareos-dir);9102— File Daemon (bareos-fd);9103— Storage Daemon (bareos-sd).
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
Установка Bareos
На сайте загрузок смотрим поддерживаемые дистрибутивы и создаём переменную:
DIST=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
Устанавливаем:
apt install bareos bareos-database-postgresql
Пакет bareos и поддержка PostgreSQL.
На запрос конфигурирования БД отвечаем no:
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 apache2 libapache2-mod-php
systemctl restart apache2
systemctl restart bareos-dir
Открываем http://<IP-сервера> — стартовая страница Apache.
2. Доступ и вход
bconsole
* configure add console name=admin password=my_password profile=webui-admin tlsenable=no
где:
admin— имя учётной записи;my_password— пароль;profile— профиль доступа из/etc/bareos/bareos-dir.d/profile(по умолчанию:webui-admin— полный доступ,operator— работа с заданиями,webui-readonly— только просмотр);tlsenable=no— без TLS (иначе ошибка аутентификации).
Created resource config file "/etc/bareos/bareos-dir.d/console/admin.conf":
Console {
Name = "admin"
Password = "my_password"
Profile = webui-admin
TlsEnable = no
}
* reload
* exit
Открываем http://<IP-сервера>/bareos-webui/, входим под созданной учёткой.
Можно обойтись без bconsole — создать файл /etc/bareos/bareos-dir.d/console/admin.conf вручную и перезапустить bareos-dir.
3. SSL (опционально)
Для HTTPS нужно: доменное имя, сертификат (Let’s Encrypt / внутренний CA / коммерческий) и настройка Apache.
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 — цепочка CA (если не встроена в файл сертификата).
apachectl configtest
apachectl graceful
Открываем https://bareos.imaxis.ru/bareos-webui/.
Клиент
Тип и версию системы смотрим командой:
cat /etc/os-release
Установка на Ubuntu/Debian
DIST=xUbuntu_22.04
wget https://download.bareos.org/current/${DIST}/bareos.list -O /etc/apt/sources.list.d/bareos_${DIST}.list
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
apt install bareos-filedaemon
systemctl enable bareos-filedaemon
Брандмауэр (9102/tcp):
iptables -I INPUT -p tcp --dport 9102 -j ACCEPT
apt install iptables-persistent
netfilter-persistent save
Установка на CentOS/Rocky
DIST=EL_9
wget https://download.bareos.org/current/${DIST}/bareos.repo -O /etc/yum.repos.d/bareos_${DIST}.repo
yum install bareos-fd
systemctl enable bareos-fd --now
firewall-cmd --permanent --add-port=9102/tcp
firewall-cmd --reload
Добавление клиента на сервере
bconsole
* configure add client name=client_name address=192.168.0.22 password=client_password
где client_name — произвольное имя, 192.168.0.22 — адрес клиента, client_password — пароль для подключения.
Нестандартный порт задаётся опцией port:
* configure add client name=client_name address=192.168.0.22 port=9103 password=client_password
Вывод:
Exported resource file ".../bareos-fd.d/director/bareos-dir.conf":
Director {
Name = bareos-dir
Password = "[md5]23ea8b731947b6aff12b13c98bca39ae"
}
Created resource config file ".../client/client_name.conf":
Client {
Name = "client_name"
Address = "192.168.0.22"
Password = "client_password"
}
* reload
* exit
На клиенте в /etc/bareos/bareos-fd.d/director/bareos-dir.conf прописываем полученный блок Director с паролем и перезапускаем:
# Ubuntu
systemctl restart bareos-filedaemon
# CentOS
systemctl restart bareos-fd
В веб-интерфейсе в разделе «Клиенты» появятся добавленные хосты. Отсутствие значков и версий — нормально, они появятся после первых заданий.
Работа с заданиями
Каталоги
/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. Нужны Full + Differential.
- Incremental — изменения с момента последнего Differential/Full. Мало места, сложнее восстановление.
Типы заданий
Restore, Backup, Admin, Migrate, Copy, Verify, Consolidate.
Синтаксис расписаний
| Момент | Описание | Примеры |
|---|---|---|
<week-keyword> |
Неделя месяца | 1st…5th, first…last |
<wday-keyword> |
День недели | mon…sun, monday…sunday |
<week-of-year-keyword> |
Неделя года | w00…w53 |
<month-keyword> |
Месяц | jan…dec |
<hour> / <minute> |
Время | 0…23 / 0…59 |
<time> |
Время | <hour>:<minute> |
<time-spec> |
Момент | at <time>, hourly |
<day-spec> |
Дни | <day>, <wday-keyword>, daily |
<month-spec> |
Месяцы | <month-keyword>, 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— имя задания;Level—Full/Differential/Incremental;Storage— устройство хранения (по умолчаниюFile);Pool— пул (по умолчаниюFull,Differential,Incremental);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"
}
}
где:
Include— добавление файлов;Options— настройки группы файлов;Signature—MD5илиSHA1;File— путь (обязательно в двойных кавычках).
Тестируем:
echo "test" > /tmp/backup_test_file
bconsole
* reload
* run job=FirstJob
OK to run? (yes/mod/no): yes
Job queued. JobId=8
* exit
В веб-интерфейсе на вкладке «Задания» появится выполненное задание.
Проверим восстановление:
rm -f /tmp/backup_test_file
В веб-интерфейсе → «Восстановление» → выбираем клиента и задание → файл → указываем каталог и нажимаем «Восстановление».
Файл /tmp/backup_test_file восстановится в /tmp/tmp/backup_test_file.
2. Задание для агента
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
В SecondJob.conf меняем:
Name = "SecondJob"
Client = "ubuntu"
FileSet = "SecondFileset"
В SecondFileset.conf:
Name = "SecondFileset"
...
File = "/tmp"
File = "/etc"
Две цели бэкапа — /tmp и /etc.
bconsole
* reload
* run job=SecondJob
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
}
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"
}
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
}
Задание выполняется дважды в день — в 7:00 и 21:00.
Привязка в задании или шаблоне:
Schedule = "EveryDay"
systemctl reload bareos-dir
На вкладке «Расписания» появится задание.
5. Скрипты до/после задания
Простой способ:
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
Оптимизация пулов
По умолчанию пул может занять всё дисковое пространство.
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 Oldest Volume = yes
Purge Oldest Volume = yes
Auto Prune = yes
где:
Recycle Oldest Volume— перезаписывает самый старый том;Purge Oldest Volume— принудительная переработка старого тома;Auto Prune— автоочистка поVolume Retention.
systemctl restart bareos-sd
Анализ и устранение проблем
Debug при выполнении заданий
bconsole
* setdebug client=client_name level=200 trace=1
2000 OK setdebug=200 trace=1 ... tracefile=/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» … Profile = webui-admin
Причина: Bareos не видит файлы профилей из bareos-webui.
Решение:
systemctl restart bareos-dir
2. Sorry, cannot authenticate. Wrong username, password or SSL/TLS handshake failed
Причина: с версии 18.2 используется TLS-PSK, не поддерживаемый PHP по умолчанию.
Решение: отключить шифрование между Director и UI:
vi /etc/bareos/bareos-dir.d/console/admin.conf
Console {
...
TLS Enable = No
}
systemctl restart bareos-dir
3. BnetHost2IpAddrs() for host «XXX» failed: ERR=Name or service not known
Причина: клиент не может разрешить имя Storage-сервера.
Решение: проверить адрес в конфиге storage:
vi /etc/bareos/bareos-dir.d/storage/File.conf
Address = bareos.imaxis.ru
systemctl restart bareos-dir
nslookup bareos.imaxis.ru
Если DNS нет — добавить в /etc/hosts на клиенте:
192.168.0.20 bareos.imaxis.ru
4. Issued certificate has expired
Причина: устарели корневые сертификаты.
Решение: быстрый способ — wget --no-check-certificate; правильный — обновить ca-certificates.
5. Could not connect to Storage daemon on XXX:9103. ERR=No route to host
Причина: Director не может подключиться к Storage daemon по сети.
Решение: проверить Address в /etc/bareos/bareos-dir.d/storage/File.conf и доступность сервера.
Тонкости и подводные камни
- Только PostgreSQL — поддержка MySQL/MariaDB прекращена.
bareos-filedaemonvsbareos-fd— на Debian/Ubuntu служба называетсяbareos-filedaemon, на RPM —bareos-fd.- Скрипты БД запускать от
postgres—su - postgres -c /usr/lib/bareos/scripts/.... - TLS-PSK и webui — при проблемах входа отключайте TLS для консоли (
TLS Enable = No). - Имя storage должно разрешаться на клиенте — иначе задания падают с ошибкой DNS.
- Пулы по умолчанию не ограничены — обязательно настраивайте
Maximum Volumes/Volume Retention. - Двойные кавычки в
File— одинарные не работают.
Шпаргалка
DIST=xUbuntu_24.04
wget https://download.bareos.org/current/${DIST}/bareos.list -O /etc/apt/sources.list.d/bareos_${DIST}.list
curl -fsSL https://download.bareos.org/current/${DIST}/Release.key | gpg --dearmor -o /etc/apt/trusted.gpg.d/bareos.gpg
apt update && apt install bareos bareos-database-postgresql postgresql
su - postgres -c /usr/lib/bareos/scripts/create_bareos_database
su - postgres -c /usr/lib/bareos/scripts/make_bareos_tables
su - postgres -c /usr/lib/bareos/scripts/grant_bareos_privileges
apt install bareos-webui apache2 libapache2-mod-php
bconsole
* configure add console name=admin password=my_password profile=webui-admin tlsenable=no
* reload
Проверено на: Ubuntu 22.04/24.04/26.04 + Bareos (current), PostgreSQL.
Дата: Сентябрь 2026.