О том, как я неделю вдуплял в Bareos

в 8:59, , рубрики: backup, bareos, резервное копирование, системное администрирование, метки:

Попала ко мне задача организовать резервное копирование с GUI и чтобы прям как у больших дядек. Ранее стоял rsnapshot и всё работало чудесно пока объёмы не возросли до сотен гигабайт, сайты и базы данных, сотни тестовых площадок. Увеличился парк серверов и управлять всем этим делом стало трудно. Из всех имеющихся решений мы выбирали опенсорс и остановились на bareos как на самом часто используемом, чтобы в случае чего быстренько загуглить.

Имелось сервер под ОС Centos 7, raid5 12Tb. Начал я с установки и сразу столкнулся с тем, что до меня уже пытался кто то поставить bareos. Дабы не мучатся и переделать с нуля выключил демоны mariadb, bareos-sd, bareos-fd, bareos-dir.

sudo systemctl stop mariadb bareos-dir bareos-sd bareos-fd

И удалил старые конфиги:

sudo systemctl stop mariadb
sudo rm -rf /etc/bareos/*
sudo rm -rf /etc/bareos/.* # при установке создаётся скрытый файл со сгенерированными паролями
mysql -uroot -p -e "DROP DATABASE IF EXISTS 'bareos';"

Если не знаете пароль root:

Сбросить пароль root mysql

sudo systemctl stop mariadb
sudo mysqld_safe --skip-grant-tables &
mysql -uroot -e "UPDATE mysql.user SET Password=PASSWORD('Ваш_новый_пароль') WHERE User='root';"
sudo systemctl restart mariadb

В случае если мы ещё не устанавливали bareos и mariadb.

Добавляем репозиторий bareos:

sudo wget http://download.bareos.org/bareos/release/latest/CentOS_7/bareos.repo -O /etc/yum.repos.d/bareos.repo && sudo sed -i 's/7/$releasever/g' /etc/yum.repos.d/bareos.repo && sudo sed -i 's//1...///latest//g' /etc/yum.repos.d/bareos.repo 

Устанавливаем пакеты bareos и mariadb:

sudo yum install -y bareos-client bareos-database-tools bareos-filedaemon bareos-database-mysql bareos bareos-bconsole bareos-database-common bareos-storage bareos-director bareos-common mariadb-server
sudo systemctl enable mariadb && sudo systemctl enable bareos-fd && sudo systemctl enable bareos-sd && sudo systemctl enable bareos-dir && sudo systemctl start mariadb
sudo mysql_secure_installation

Создаём базу данных bareos:

/usr/lib/bareos/scripts/create_bareos_database
/usr/lib/bareos/scripts/make_bareos_tables -uroot -p
/usr/lib/bareos/scripts/grant_bareos_privileges -uroot -p

Теперь у нас есть база данных и пользователь bareos. Эти скрипты создают пользователя без пароля, укажем пароль для bareos:

mysql -uroot -e "UPDATE mysql.user SET Password=PASSWORD('Ваш_новый_пароль') WHERE User='bareos';"

Чтож, примитив кончился, теперь в чём был собственно затык. Всегда знал, что linux строится из огромного количества простых кусочков. Понять, как настроить bareos, мне показалось сложным, и вот почему. В многих мануалах в интернете описываются настройки конфигурации для bacula прародителя bareos, а документация написана так, что за 3 секунды не понять, что куда пихать. Многие мануалы имеют ошибки, в одном я вообще не понял, зачем секцию job помещают в демон storage. Скурив всю документацию по bareos и bacula я понял, что если я хочу понять, то придётся на бумажке рисовать каждую секцию и что она делает с полным описанием всех параметров и связей между демонами.

Схема связи с офф. документации

image

Итак, пойдём медленно по кусочкам. Забудем про все демоны и прочие прибулды кроме mariadb и bareos-dir. Весь основной функционал описывается в конфиге bareos-dir.conf, расположенном в каталоге /etc/bareos/. Права на каталог должны быть 770, владелец root группа bareos. Права на файлы в каталоге должны быть 640, владелец root группа bareos, если вы используете вложенные директории — не забывайте, что бит исполнения для каталога позволяет просматривать содержимое каталога, поэтому права вложенных каталогов так же должны быть 770, владелец root группа bareos.

/etc/bareos/bareos-dir.conf

# С решётки начинаются комментарии, обязательные параметры не закомментированы
Director { # начало описании секции сервера
Name = agima-dir # Имя этого сервера
#WorkingDirectory = "$HOME/bareos/bin/working" # Так указывается рабочая директория
#Pid Directory = "$HOME/bareos/bin/working" # Место расположения PID файла
QueryFile = "/usr/lib/bareos/scripts/query.sql" #набор sql запросов для работы с метаданными
#Maximum Concurrent Jobs = 10 # Максимальное количество одновременно запущенных задач
Password = «password» # Пароль для доступа к этому серверу
#Description = «Main Bareos Director» # Описание сервера
Messages = Daemon # указываем имя секции генерации сообщений
#Auditing = yes # записывать действия производимые на сервере(вход, запуск задачи, восстановлени и др.). Этот отдельный параметр отпочковался от параметра Messages.
#FD Connect Timeout = 180 # время сколько ожидать ответ клиента
#SD Connect Timeout = 1800 # время сколько ожидать ответ от сервера хранения
#Maximum Connections = 30 # максимальное количество одновременных подключений к этому серверу
#Maximum Console Connections = 30 # максимальное количество одновременных подключенных консолей к этому серверу

#Dir Address = 1.2.3.4 9101 # доменное имя или айпи адрес, порт должен быть указан через пробел или в отдельном параметре

#Dir Addresses = { # Чтобы указать несколько определённых доменов и/или айпи адресов
# ip = { addr = 1.2.3.4; port = 1205;}
# ipv4 = { addr = 1.2.3.4; port = http;}
# ipv6 = { addr = 201:220:222::2; port = 1205; }
# ip = { addr = server.example.com }
#}

#Dir Port = 9101 # номер порта на котором будет слушать сервер
}
# С символа @ начинаются вставки(include) других файлов
# Если вы хотите вставить несколько файлов из директории вы можете использовать конструкцию ниже
#@|«sh -c ’for f in /etc/bareos/jobs/*.conf; do echo @${f}; done’»
#@/etc/bareos/jobs/1.conf

# В файле указаны не все параметры секции Director, более полный список можно получить на официальном сайте программы bareos.org

Мы описали сервер, теперь мы можем его запустить:

systemctl start bareos-dir

Сервер есть, он работает, но ничего не делает и у него нет места куда бы положить наши бэкапы. За размещение файлов отвечает демон bareos-sd, его конфигурационный файл называется bareos-sd.conf:

/etc/bareos/bareos-sd.conf

Storage { # начало секции описания демона хранения
#Absolute Job Timeout = 20 # полное время ожидания задачи
#Allow Bandwidth Bursting = no # разрешить увеличивать ширину канала
#Client Connect Wait = 1800 #время сколько ожидать ответ консоли
#Collect Device Statistics = no # собирать статистику по устройствам
#Collect Job Statistics = no # собирать статистику по задачам
#Compatible = no # режим совместимости с bacula
Description = «First storage server» # Описание сервера
#FD Connect Timeout = 1800 # время сколько ожидать ответ клиента
#File Device Concurrent Read = no # разрешить одновременное чтение с устройств
#Maximum Bandwidth Per Job = 1 k/s # Максимальная ширина канала на 1 задачу, значения скорости k/s, kb/s, m/s or mb/s.
#Maximum Concurrent Jobs = 20 # Максимальное количество одновременно выполняемых задач
#Maximum Network Buffer Size = 65536 # размер сетевого буфера в байтах, если низкая скорость попробуйте изменить. Иногда для повышения скорости стоит уменьшить размер буфера.
Messages = Standard # указываем имя секции генерации сообщений
Name = agima-sd # имя этого сервера хранения
#Pid Directory = /var/lib/bareos # Место расположения PID файла
#SD Address = 1.2.3.4 9103 # доменное имя или айпи адрес, порт должен быть указан через пробел или в отдельном параметре

#SD Addresses = { # Чтобы указать несколько определённых доменов и/или айпи адресов
# ip = { addr = 1.2.3.4; port = 1205;}
# ipv4 = { addr = 1.2.3.4; port = http;}
# ipv6 = { addr = 201:220:222::2; port = 1205; }
# ip = { addr = server.example.com }
#}

#SD Connect Timeout = 1800# Максимальное время ожидания соединения
#SD Port= 9103# номер порта на котором будет слушать сервер
#SD Source Address = # специфичный(отдельный) адрес который слушает сервер для связи с клиентом
#Secure Erase Command = string# параметр для указания, какую использовать команду для безвозвратного удаления
#Statistics Collect Interval = 30 # интервал для сбора статистики
#Working Directory = /var/lib # рабочая директория
}

Director { # начало описании секции подключения к этому серверу хранения
Name = agima-dir # указываем имя сервера который может подключаться к нам
Password=«password1» # пароль с которым будут подключатся
Description = «Backup server» # Описание сервера
#Key Encryption Key = password # ключ шифрования обмена данных
#Maximum Bandwidth Per Job = 1 k/s # Максимальная ширина канала на 1 задачу, значения скорости k/s, kb/s, m/s or mb/s.
#Monitor = no # Разрешает полный или ограниченный доступ к серверу. Ограниченный доступ позволяет только просматривать статус сервера.
}

Device { # начало описания места хранения
Always Open = no; # Всегда держать открытым устройство
Archive Device = /opt/backup # Путь сохранения
#Auto Deflate = out # Параметр работает только при включении модуля autoxflate-sd. Значения: in — сжатие потоков при чтении с устройства, out сжатие при записи на устройство, both сжати в обоих случаях.
#Auto Deflate Algorithm = GZIP # GZIP — gzip level 1–9, LZO, LZFAST, LZ4, LZ4HC
#Auto Deflate Level = 6 # уровень сжатия
#Auto Inflate = in # Параметр работает только при включении модуля autoxflate-sd. Значения: in — сжатие потоков при чтении с устройства, out сжатие при записи на устройство, both сжати в обоих случаях.
#Auto Select = yes # Автоматический выбор данного устройства
#Automatic Mount = yes; # автоматически монтировать устройство
#Block Checksum = yes # Включает проверку контрольных сумм CRC32, так же позволяет считывать битые данные
#Check Labels = yes # Включает проверку меток для записей не ANSI формата
#Close On Poll = no # перемонтировать устройство
#Collect Statistics = yes # Собирать статистику
Description = «Primary raid storage» # Описание устройства
#Device Options = string # опции устройства используются для внешних плагинов Ceph и GlusterFS
Device Type = File # Тип устройства: Tape касеты; File флешки, диски, сетевые диски; GFAPI (GlusterFS); Rados (Ceph Object Store); Fifo устройства последоватьльного доступа только для чтения или только для записи.
Label Media = yes; # разрешать серверу устанавливать метку на блоки / accept Bareos set label unlabeled media
Label Type = primary # метка которая будет установленна
Maximum Concurrent Jobs = 4 # максимальное количество одновременных задач
Maximum File Size = 500 Gb # максимальный размер файла
#Maximum Job Spool Size = # Максиамальный объём очереди задачи
#Maximum Network Buffer Size = 65536 # размер сетевого буфера в байтах, если низкая скорость попробуйте изменить. Иногда для повышения скорости стоит уменьшить размер буфера.
Maximum Open Volumes = 1 # максимальное количество открытых томов
Maximum Open Wait = 15 # максимальное время ожидания устройства
#Maximum Spool Size = # Максиамальный объём очереди задач
Media Type = File # это текстовой параметр где вы можете свободно указать тип устройства какое вам больше всего нравится
#Mount Command = Strname # команда монтирования данного устройства
#Mount Point = Strname # точка монтирования
Name = AgimaStorage # имя этого места хранения
Random Access = yes; # указывает поддержку случайного доступа к данным, кассеты не имеют такой возможности
Removable Media = no; # указываем отключаемое ли устройство
Requires Mount = no # требуется ли монтирование данного устройства
#Spool Directory = directory # Директория для создания временных файлов, по умолчанию рабочий каталог
#Unmount Command = Strname # команда размонтирования
#Volume Capacity = # размер тома
}

Messages {
Name = Standard # название текущего уведомления
Description = «Standard messages file daemon» # описание уведомления
#Mail Command = # команда отправки email, должна быть описана перед параметрами Mail, Mail On Error, Mail On Success
#Mail Command = "/usr/sbin/bsmtp -h mail.example.com -f "(Bareos) %r" -s «Bareos: %t %e of %c %l» %r"

##%% = % символ процента
##%c = Client’s name Имя клиента
##%d = Director’s name Имя сервера
##%e = Job Exit code (OK, Error, ...) Статус завершения
##%h = Client address хост клиента
##%i = Job Id Идентификатор задачи
##%j = Unique Job name Уникально имя задачи
##%l = Job level приоритет задачи
##%n = Job name Имя задачи
##%r = Recipients получатели
##%s = Since time # Буду рад если кто то объяснит что же означает этот параметр
##%t = Job type (e.g. Backup, ...) Тип задачи
##%v = Read Volume name (Only on director side) Прочитано том с именем
##%V = Write Volume name (Only on director side) Записан том с именем

#Operator Command = string # должно быть описано до параметра Operator. Аналогично Mail Command, но отправляет оператору

##Типы уведомлений message-type:
##info информационные сообщения
##warning Уведомления
##error ошибки
##fatal ошибки из-за которых задачи останавливаются
##terminate сообщения при отключении сервера
##notsaved файлы не сохранены
##skipped пропущенные файлы, попавшие в исключения или при инкрементальном бэкапе или при других настройках или действиях пользователя
##mount монтирование завершено
##restored список восстановленных файлов
##all все сообщения
##security сообщения info и warning только при попытках подключится
##alert сообщения генерируемые tape alerts
##volmgmt сообщения управления томами
##audit сообщения о выполняемых действиях

#Append = [ address = ] message-type [, message-type ]* # Добавляет сообщение в файл, если файл не существует он будет создан
director = backup-dir = all # отправка сообщения на сервер bareos
#Catalog = # отправка сообщения в базу данных каталога
#Console = # отправка сообщения в консоль
#File = # отправка сообщения в файл, если файл существует он будет перезаписан
#Mail = # отправка сообщения на указанный адрес
#Mail On Error = # email при ошибке
#Mail On Success = # email при успехе
#Operator = # отправить email на указанный адрес оператору
#Stderr = # отправка сообщения в стандартный вывод ошибок
#Stdout = # отправка сообщения на стандартный вывод
#Syslog = # отправка сообщения в Syslog журнал
}

Итак теперь мы настроили сервер хранения, подключим его к нашему серверу, добавляем в конец файла:

/etc/bareos/bareos-dir.conf

Storage {
Address = 127.0.0.1 # адрес к которому подключаемся
Allow Compression = yes # Разрешить ли сжатие
#Auth Type = MD5 # метод авторизации None|Clear|MD5
#Collect Statistics = yes # Собирать ли статистику
Description = «Primary storage» # Описание текущей секции
Device = FirstStorage # используемое устройство, значение равно параметру name секции device
Enabled = yes # включен ли данный сервер хранения
#Maximum Bandwidth Per Job = 1 k/s # Максимальная ширина канала на 1 задачу, значения скорости k/s, kb/s, m/s or mb/s.
#Maximum Concurrent Jobs = 1 # максимальное количество одновременных задач
#Maximum Concurrent Read Jobs = 0 # максимальное количество одновременных задач на чтене
Media Type = File # это текстовой параметр где вы можете в свободной форме указать тип устройства какое вам больше всего нравится
Name = agima-sd # имя данной секции
Password = password1 # пароль для подключения к серверу хранения
#Port = 9103 # порт к которому подключатся
}

Catalog {
DB Address = localhost # сетевой адрес Базы данных
DB Driver = mysql # Выбираем СУБД postgresql | mysql | sqlite
DB Name = bareos # Имя базы данных
DB Password = «123» # Пароль пользователя для СУБД
DB Port = 3306 # Порт на котором работает СУБД
#DB Socket = string # путь до сокета Базы данных, если мы используем сокет
DB User = bareos # Пользователь субд СУБД
Description = «Catalog metadata for bareos» # Описание Секции
Disable Batch Insert = no # Разрешает множественные вставки
#Exit On Fatal = no # закрывать программу при ошибке
#Idle Timeout = 30 # Время ожидания связи с базой
#Inc Connections = 1 # Если закончились свободные соединения, можно добавить сколько указано в этом параметре
#Max Connections = 5 # Максимальное количество соединений
#Min Connections = 1 # Минимальное количество соединений
Name = agima-meta # Имя текущей секции
Reconnect = yes # Переподключаться к базе данных если связь разорвана
#Validate Timeout = 120 # Время проверки, работает ли БД или нет
}

Перезагружаем сервер и запускаем хранение:

sudo systemctl restart bareos-dir
sudo systemctl start bareos-sd

Если между ними нету связи настраиваем firewall.

Теперь у нас есть сервер и место куда складывать бэкапы. Серверы запущены, но бэкапы делать некому. Настроим клиент который будет делать бэкапы. Клиентом является демон bareos-fd, его конфигурационный файл называется bareos-fd.conf и он самый простой:

/etc/bareos/bareos-fd.conf

Client {
#Absolute Job Timeout = 20 # полное время ожидания задачи
#Allow Bandwidth Bursting = yes # разрешить увеличивать ширину канала
#Allowed Job Command = # Типы разрешённых команд для этого клиента: backup создание бэкапов; restore восстановление файлов; verify проверка файлов; estimate проверка разрешённых команд; runscript запуск скриптов
#Allowed Script Dir = # Директории из которых клиенту разрешено запускать скрипты
#Compatible = no # Режим совместимости с bacula
Description = «First client on server example.com» # описание клиента
#FD Address = 1.2.3.4 9102 # доменное имя или айпи адрес, порт должен быть указан через пробел или в отдельном параметре
#FD Addresses = { # Чтобы указать несколько определённых доменов и/или айпи адресов
# ip = { addr = 1.2.3.4; port = 1205;}
# ipv4 = { addr = 1.2.3.4; port = http;}
# ipv6 = { addr = 201:220:222::2; port = 1205; }
# ip = { addr = server.example.com }
#}
#FD Port = 9102 # номер порта на котором будет слушать клиент
#FD Source Address = # специфичный(отдельный) адрес который слушает клиент для связи с сервером хранения
#Maximum Bandwidth Per Job = 1 k/s # Максимальная ширина канала на 1 задачу, значения скорости k/s, kb/s, m/s or mb/s.
#Maximum Concurrent Jobs = 20 # Максимальное количество одновременно выполняемых задач
#Maximum Network Buffer Size = 65536 # размер сетевого буфера в байтах, если низкая скорость попробуйте изменить. Иногда для повышения скорости стоит уменьшить размер буфера.
Messages = standard # указываем имя секции генерации сообщений
Name = agima-client # Имя данного клиента
#Pid Directory = /var/lib/bareos # Директория хранения PID файла
#Scripts Directory = directory # Директория где хранятся скрипты
#SD Connect Timeout = 1800 # Время ожидания для яподключения к серверу хранения
#Secure Erase Command = string # Команда бзвозвратного удаления
#Working Directory = /var/lib/bareos # Рабочая директория
}

Director {
#Address = 1.2.3.4 # Адрес к которому подключаемся
#Allowed Job Command = # Типы разрешённых команд для сервера: backup создание бэкапов; restore восстановление файлов; verify проверка файлов; estimate проверка разрешённых команд; runscript запуск скриптов
#Allowed Script Dir = "/etc/bareos" # Директории из которых серверу разрешено запускать скрипты
#Allowed Script Dir = "/path/that/is/also/allowed" #
Description = «General backup server» # Описание сервера
#Maximum Bandwidth Per Job = 1 k/s # Максимальная ширина канала на 1 задачу, значения скорости k/s, kb/s, m/s or mb/s.
#Monitor = no # Разрешает полный или ограниченный доступ к серверу. Ограниченный доступ позволяет только просматривать статус сервера.
Name = backup-dir # Имя сервера который может подключаться
Password = Md5password # пароль для подключения к клиенту зашифрованный в md5
}

Messages {
Name = Standard # название текущего уведомления
Description = «Standard messages file daemon» # описание уведомления
#Mail Command = # команда отправки email, должна быть описана перед параметрами Mail, Mail On Error, Mail On Success
#Mail Command = "/usr/sbin/bsmtp -h mail.example.com -f "(Bareos) %r" -s «Bareos: %t %e of %c %l» %r"

##%% = % символ процента
##%c = Client’s name Имя клиента
##%d = Director’s name Имя сервера
##%e = Job Exit code (OK, Error, ...) Статус завершения
##%h = Client address хост клиента
##%i = Job Id Идентификатор задачи
##%j = Unique Job name Уникально имя задачи
##%l = Job level приоритет задачи
##%n = Job name Имя задачи
##%r = Recipients получатели
##%s = Since time # Буду рад если кто то объяснит что же означает этот параметр
##%t = Job type (e.g. Backup, ...) Тип задачи
##%v = Read Volume name (Only on director side) Прочитано том с именем
##%V = Write Volume name (Only on director side) Записан том с именем

#Operator Command = string # должно быть описано до параметра Operator. Аналогично Mail Command, но отправляет оператору

##Типы уведомлений message-type:
##info информационные сообщения
##warning Уведомления
##error ошибки
##fatal ошибки из-за которых задачи останавливаются
##terminate сообщения при отключении сервера
##notsaved файлы не сохранены
##skipped пропущенные файлы, попавшие в исключения или при инкрементальном бэкапе или при других настройках или действиях пользователя
##mount монтирование завершено
##restored список восстановленных файлов
##all все сообщения
##security сообщения info и warning только при попытках подключится
##alert сообщения генерируемые tape alerts
##volmgmt сообщения управления томами
##audit сообщения о выполняемых действиях

#Append = [ address = ] message-type [, message-type ]* # Добавляет сообщение в файл, если файл не существует он будет создан
director = backup-dir = all # отправка сообщения на сервер bareos
#Catalog = # отправка сообщения в базу данных каталога
#Console = # отправка сообщения в консоль
#File = # отправка сообщения в файл, если файл существует он будет перезаписан
#Mail = # отправка сообщения на указанный адрес
#Mail On Error = # email при ошибке
#Mail On Success = # email при успехе
#Operator = # отправить email на указанный адрес оператору
#Stderr = # отправка сообщения в стандартный вывод ошибок
#Stdout = # отправка сообщения на стандартный вывод
#Syslog = # отправка сообщения в Syslog журнал
}

Ура мы описали клиента, теперь подключим его к нашему серверу, вставим в конец файла bareos-dir.conf:

/etc/bareos/bareos-dir.conf

Client {
#Allow Client Connect = yes # разрешить входящие соединения от клиента
#Auth Type = MD5 # Тип авторизации None|Clear|MD5
#Auto Prune = no # Автоматический очищать записи из каталога об устаревших задачах
#Catalog = resource-name # каталог используемый для хранения метаданых
#Description = string # описание данного клиента
#Enabled = yes # включен ли данный клиент
#FD Address = string # адрес для подключения к клиенту
#FD Password = password # пароль для соединения с клиентом
#FD Port = 9102 # порт на котором
#File Retention = 5184000 # Длительность хранения истории о файлах в каталоге
#Hard Quota = 0 # Объём данных доступный для ипспользования, при превышении задача отменяется
#Job Retention = 15552000 # Длительность хранения истории о задачах в каталоге
#Maximum Bandwidth Per Job = 1 k/s # Максимальная ширина канала на 1 задачу, значения скорости k/s, kb/s, m/s or mb/s.
#Maximum Concurrent Jobs = 1 # максимальное количество одновременно запущеных задач
#Name = agima-client # уникальное имя клиента к которому подключаемся
#Passive = no # пассивный режим, входящие соединения недоступны
#Quota Include Failed Jobs = yes # Учитывать объём неудачных задач в квотах
#Soft Quota = 0 # Объём данных доступный для ипспользования, при превышении задача не отменяется
}

Запускаем клиент, перезапускаем сервер и как обычно не забываем настраивать firewall.

sudo systemctl restart bareos-dir
sudo systemctl start bareos-fd

Теперь у нас всё есть, но бэкапы всё равно не делаются. Добавим задачи и расписание для их выполнения.

Развернуть

Pool {
#Action On Purge = Truncate # Обрезать разделы при очистке для уменьшения занятого объёма
Auto Prune = yes # Автоматически удалять устаревшие разделы
Catalog = resource-name # Указываем каталог в котором хранить метаданные
Catalog Files = yes # Записывать имена файлов в каталог
Description = string # Описание пула
#File Retention = time # Как долго сохранять записи о файлах в каталоге
#Job Retention = time # Как долго сохранять записи о задачах в каталоге
Label Format = «backup-» # префикс для файлов бэкапа
#Label Type = ANSI|IBM|Bareos # Тип префикса
#Maximum Blocksize = positive-integer # Максимальный размер блока по умолчанию 63КB
Maximum Volume Bytes = Size64 # Максимальное размер тома(файла резервного архива)
Maximum Volume Files = positive-integer # Максимальное количество задач в одном томе
Maximum Volume Jobs = positive-integer # Максимальное количество задач в одном томе
Maximum Volumes = positive-integer # Максимальное количество томов
Name = agima-pool # Имя данного пула
Pool Type = Strname # Тип пула Backup, *Archive, *Cloned, *Migration, *Copy, *Save
Purge Oldest Volume = yes # Удалять устаревшие тома
Recycle = yes # Если недостаточно места, искать устаревшие файлы и тома и очищать их
Recycle Current Volume = yes # Очищать текущий том
Recycle Oldest Volume = yes # Очищать устаревшие тома
Recycle Pool = resource-name # Очищать пул, повзоляет автоматически перемещать в другой пул бэкапы
Scratch Pool = resource-name # имя Scratch зарезервировано для пула запасных томов — при необходимости система самостоятельно переводит том из него в требуемый пул
Storage = ResourceList # Используемый серверы хранения
Use Catalog = yes # Сохранять метаданые в БД
Volume Retention = 31536000 # Как долго сохранять записи о томах в каталоге
Volume Use Duration = 7 days # Как долго том доступен для записи
}

FileSet { # правило набора файлов
Description = string # Описание текущих правил
#Enable VSS = yes # Включает теневое копирование тома для Windows
Name = agima-site# уникальное название данного правила
# Exclude { # указываем какие файлы мы исключаем
# Options {
# AutoExclude = yes # Используется для Windows. Проверят по реестру исключённые файлы.
# fstype=ext2 # Доступные файловые системы для полного копирования дискового тома. ext2, jfs, ntfs, proc, reiserfs, xfs, usbdevfs, sysfs, smbfs, iso9660
# sparse=yes # в raw файлах исключать нули если их 32К в блоке подряд
# onefs=yes # Использовать только 1 файловую систему
# signature=MD5 # SHA1 алгоритм для проверки изменений.
# recurse=yes # рекурсивный проход по директориям
# noatime=yes # не изменять время доступа к файлу
# mtimeonly=yes # Для инкрементального и диффиринциального копирования проверять только st_mtime. В выключенном состоянии проверяет ещё и st_ctime.
# keepatime=yes # не изменять время доступа
# checkfilechanges=yes # проверять изменения файлов
# aclsupport=yes # Поддержка расширенного списка доступа для линукс
# xattrsupport=yes # Поддержка дополнительных атрибутов файла
# ignore case=yes # Не учитывать регистр
# DriveType=Windows-drive-type # Используемый тип диска для Windows: removable, fixed, remote, cdrom, ramdisk
# hfsplussupport=yes # Поддержка файловой системы apple

# size=
#- — Select file in range size — size. # Размер в диапазоне
#<size — Select files smaller than size. # Файлы меньше чем указанный размер
#>size — Select files bigger than size. # Файлы больше чем указанный размер
#size — Select files which are within 1 % of size. # Файлы указаного размера ± 1%

# verify=
#i compare the inodes # Сравнения индексных дескрипторов
#p compare the permission bits # Сравнения прав на файл
#n compare the number of links # Количество ссылок на файл
#u compare the user id # Сравнение идентификатора пользователя
#g compare the group id # Сравнение идентификатора группы
#s compare the size # Сравнения размера
#a compare the access time # Сравнения времения доступа
#m compare the modification time (st_mtime) # Сравнения времения модификации
#c compare the change time (st_ctime) # Сравнения времения изменения
#d report file size decreases # отчёт изменения файла размера
#5 compare the MD5 signature # Сравнение хеш сумм файлов MD5
#1 compare the SHA1 signature # Сравнение хеш сумм файлов SHA1
#A Only for Accurate option, it allows to always backup the file # опция Accurate при описании набора файлов (позволяет задать проверку контрольных сумм, а не только проверку времени создания/изменения файла при определении списка изменённых файлов)

# compression=GZIP5 # включить сжатие GZIP1-9|LZO|LZFAST|LZ4|LZ4HC
# }
# File = "|sh -c ’df -l | grep "^/dev/hd[ab]" | grep -v ".*/tmp" | awk "{print \$6}"’"
# File = /
# File = /usr
# }
Ignore File Set Changes = no # В случае изменения правила, следущая задача которая его использует будет делать полный бэкап. При установке значения yes до следущего полного бэкапа будет использоваться старое правило.
# Include { # указываем какие файлы мы берём
# Options {
# File = /
# File = /usr
# Exclude Dir Containing = .nobackup # исключить директорию содержащую файл
# }
}

Schedule {
Description = string # Описание расписания
Enabled = yes # Включение расписания
Name = MonthlyCycle # Уникальное имя расписания
Run = Level=Full Pool=Monthly 1st sun at 2:05
Run = Level=Differential 2nd-5th sun at 2:05
Run = Level=Incremental Pool=Daily mon-sat at 2:05
# Месяца jan | feb | mar | apr | may | jun | jul | aug | sep | oct | nov | dec | january | february |… | december | monthly
# Дни недели sun | mon | tue | wed | thu | fri | sat | sunday | monday | tuesday | wednesday | thursday | friday | saturday | daily
# Номера недель в месяце 1st | 2nd | 3rd | 4th | 5th | first | second | third | fourth | fifth | last
# часы и минуты «at 00:00»
# Номера недель в году w00 | w01 |… w52 | w53
# доступны номера дней в месяце и диапазоны через "-"
}

Job {
Accurate = yes # получает от директора список файлов, сохранённых в предыдущих заданиях, для файловых систем с большим количеством файлов требуется много ОП на клиенте
Add Prefix = string # Добавление префикса
Add Suffix = string # Добавление постфикса
Allow Duplicate Jobs = yes # Разрешает дублировать запуск задачи
Allow Higher Duplicates = yes # если дубликаты запрещены, то выбрать задание с высшим приоритетом
Allow Mixed Priority = no # позволяет приоритетному заданию начаться, не дожидаясь завершения низкоприоритетного
Base = ResourceList # при любом типе резервного копирования файлы, не изменившиеся со времени базового копирования, не дублируются. Указывается имя задачи.
Bootstrap = directory # при резервном копировании в этот файл записывается информация, которая позволяет легче восстанавливать файлы

#%% — %
#%c — имя клиента
#%d — имя директора
#%e — статус выполнения (OK, Error, Fatal Error, Canceled, Differences, Unknown term code)
#%i — идентификатор задания
#%j — уникальный идентификатор задания
#%l — тип резервного копирования
#%n — имя задания
#%s — время (?)
#%t — тип задания
#%v — имя тома

Cancel Lower Level Duplicates = yes # если дубликаты запрещены, то прервать низкоприоритетную задачу
Cancel Queued Duplicates = yes # если дубликаты запрещены и в очереди уже стоит задание с тем же именем, то прервать его
Cancel Running Duplicates = yes # если дубликаты запрещены и задание с тем же именем уже выполняется, то прервать его
Catalog = agima-meta # Имя используемого каталога для сохранения метаданых
Client = agima-client # На каком клиенте запускать задачу
Client Run After Job = RunscriptShort # Запуск скрипта на клиенте после выполнения задачи
Client Run Before Job = RunscriptShort # Запуск скрипта на клиенте перед выполнением задачи
Description = string # Описание задачи
Differential Backup Pool = agima-pool # Используемый пул для диффиринциального бэкапа
Differential Max Runtime = time # Максимальное мремя выполнения дифф бэкапа
Enabled = yes # Включена ли задача
File Set = agima-site # Используемое правило набора файлов
Full Backup Pool = agima-pool # Используемый пул для полного бэкапа
Full Max Runtime = time # Максимальное мремя выполнения полного бэкапа
Incremental Backup Pool = agima-pool # Используемый пул для диффиринциального бэкапа
#Incremental Max Runtime = time # Максимальное время выполнения инкрементального бэкапа
#Job Defs = resource-name # Предустановки для описания задачи.
#Job To Verify = resource-name # Задача для проверки бэкапа
Level = BackupLevel # Устанавливает уровень для типа задачи: для создания бэкапов VirtualFull | Full | Incremental | Differential, для проверки InitCatalog проверка существующих файлов со списком из каталога | Catalog сравнения текущего списка и предыдущего | VolumeToCatalog сравнивает атрибуты файлов с записями в каталоге и если в каталоге записывают хэш суммы сравнивает и их | DiskToCatalog тоже что и предыдущий только для дисков, для восстановления Restore.
Max Concurrent Copies = 100 # Максимальное количество одновременно защеных копий задачи
Max Diff Interval = time # позволяет задать максимальный промежуток времени между дифференциальными резервными копиями, при его превышении резервное копирование изменений превращается в дифференциальное копирование
Max Full Interval = time # позволяет задать максимальный промежуток времени между полными резервными копиями, при его превышении резервное копирование изменений превращается в полное копирование
Max Run Time = time # максимальное время исполнения
Max Start Delay = time # максимальное ожидание в очереди на запуск
Max Virtual Full Interval = time # позволяет задать максимальный промежуток времени между пробными полными резервными копиями, при его превышении резервное копирование изменений превращается в пробное полное копирование
Max Wait Time = time # ожидание установки тома от момента запуска
Maximum Bandwidth = k/s # Максимальная ширина канала, значения скорости k/s, kb/s, m/s or mb/s.
Maximum Concurrent Jobs = 1 # количество одновременно запущенных задач
Maxrun Sched Time = time # (Max Start Delay + Max Run Time)
Messages = standard required # Используемые уведомления
Name = agima-site required # Уникальное имя задачи
#Next Pool = resource-name # имя пула назначения для задания миграции
Pool = agima-pool # Используемый пул
Prefer Mounted Volumes = yes # минимизирует количество монтирований или распараллеливает запись
Prefix Links = no # при восстановлении «не на место» абсолютные символьные ссылки модифицируются в соответствии
Priority = 10 # Приоритет задачи чем больше цифра тем важнее. 1-255
Prune Files = no # очищать файлы из каталога
Prune Jobs = no # очищать задачи из каталога
Prune Volumes = no # очищать тома из каталога
Purge Migration Job = no # Удалять задачу миграции по окончании
Regex Where = string # При восстановлении
Replace = Always # always — всегда, ifnewer — если новее, never — никогда, ifolder — если старше При восстановлении заменять файлы по указаным правилам
Rerun Failed Levels = yes # повышать приоритет задачи при перезапуске
Reschedule Interval = 1800 # перезапустить через указанный интервал
Reschedule On Error = yes # Перезапускать задачу при ошибке
Reschedule Times = 5 # количество повторных попыток запуска
Run = «Nightly-backup level=%l since=»%s" storage=DDS-4" # Имя задачи, уровень, параметры сервер хранения
Run Script {
Command = «echo test» # выполняемая команда
Runs When = After # Когда запускать Never никогда | Before перед | After после | Always всегда | AfterVSS после теневого копирования
Runs On Failure = yes # Запуск при ошибке
Runs On Client = no # запуск на клиенте
Runs On Success = yes # Запуск при успехе
}
Schedule = MonthlyCycle # Используемое расписание
Storage = ResourceList # Используемый сервер хранения
Strip Prefix = string # При восстановлении обрезать указанный префикс
Type = JobType # Backup создание бэкапа, Restore восстановление бэкапа, Verify проверка бэкапа, Migrate перемещение бэкапа, Admin запускается для автоочистки данных в каталоге, Copy проверка есть ли данные для копирования
#Virtual Full Backup Pool = resource-name # Используемый пул для полного виртаульного бэкапа
Where = directory # директория куда будут восстанавливаться файлы
Write Bootstrap = directory # директория сохранения файлов описывающих
Write Verify List = directory # место сохранения лога проверки
}

Messages {
Name = Standard # название текущего уведомления
Description = «Standard messages file daemon» # описание уведомления
#Mail Command = # команда отправки email, должна быть описана перед параметрами Mail, Mail On Error, Mail On Success
#Mail Command = "/usr/sbin/bsmtp -h mail.example.com -f "(Bareos) %r" -s «Bareos: %t %e of %c %l» %r"

##%% = % символ процента
##%c = Client’s name Имя клиента
##%d = Director’s name Имя сервера
##%e = Job Exit code (OK, Error, ...) Статус завершения
##%h = Client address хост клиента
##%i = Job Id Идентификатор задачи
##%j = Unique Job name Уникально имя задачи
##%l = Job level приоритет задачи
##%n = Job name Имя задачи
##%r = Recipients получатели
##%s = Since time # Буду рад если кто то объяснит что же означает этот параметр
##%t = Job type (e.g. Backup, ...) Тип задачи
##%v = Read Volume name (Only on director side) Прочитано том с именем
##%V = Write Volume name (Only on director side) Записан том с именем

#Operator Command = string # должно быть описано до параметра Operator. Аналогично Mail Command, но отправляет оператору

##Типы уведомлений message-type:
##info информационные сообщения
##warning Уведомления
##error ошибки
##fatal ошибки из-за которых задачи останавливаются
##terminate сообщения при отключении сервера
##notsaved файлы не сохранены
##skipped пропущенные файлы, попавшие в исключения или при инкрементальном бэкапе или при других настройках или действиях пользователя
##mount монтирование завершено
##restored список восстановленных файлов
##all все сообщения
##security сообщения info и warning только при попытках подключится
##alert сообщения генерируемые tape alerts
##volmgmt сообщения управления томами
##audit сообщения о выполняемых действиях

#Append = [ address = ] message-type [, message-type ]* # Добавляет сообщение в файл, если файл не существует он будет создан
director = backup-dir = all # отправка сообщения на сервер bareos
#Catalog = # отправка сообщения в базу данных каталога
#Console = # отправка сообщения в консоль
#File = # отправка сообщения в файл, если файл существует он будет перезаписан
#Mail = # отправка сообщения на указанный адрес
#Mail On Error = # email при ошибке
#Mail On Success = # email при успехе
#Operator = # отправить email на указанный адрес оператору
#Stderr = # отправка сообщения в стандартный вывод ошибок
#Stdout = # отправка сообщения на стандартный вывод
#Syslog = # отправка сообщения в Syslog журнал
}

Авторизация по сертификатам осталась вне этой статьи, вы всегда можете прочитать официальную документацию или другие руководства в интернете. Принимаются замечания по оформлению.

Автор: AlexGluck

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js