!!!!!!!!!!!! ПЕРЕПИСЫВАЮ
Описание компонентов:
Bareos Director — компонент который управляет заданиями (jobs) и операциями резервного копирования, или восстановления, а так же управляет File и Storage Daemon’ами. Baroes Console — текстовая консоль для управления Bareos Director’ом через специальный командный синтаксис. По умолчанию устанавливается вместе с Bareos Director, но может устанавливаться и отдельно для удаленного подключения к Bareos Director. Bareos Web UI — веб-интерфейс Bareos. По умолчанию устанавливается вместе с Bareos Director. Данный компонент пока что на стадии развития и используется больше для удобного мониторинга, но можно вручную запускать задачи на резервное копирование, или восстановление. Тогда как расписание и задания создаются в основном через текстовые конфиги, или через консоль bareos, а не через веб-интерфейс. Bareos Catalog — база данных, которая содержит информацию по расписаниям, заданиям, сохраненным файлам, клиентам, статусам. Storage Daemon — компонент, который выполняет операции чтения и записи на устройствах хранения, используемых для резервного копирования. File Daemon — агент, который используется для сбора с “клиентских” систем и их размещения при операциях восстановления.
Пример структуры каталогов по умолчанию для /etc/bareos:
. ├── bareos-dir.d │ ├── catalog │ │ └── MyCatalog.conf │ ├── client # конфиги клиентов \ учетные данные клиентов │ │ ├── bareos-fd.conf │ │ └── eyh.conf # конфиг клиента eyh │ ├── console │ │ ├── admin.conf │ │ ├── admin.conf.example │ │ └── bareos-mon.conf │ ├── director │ │ └── bareos-dir.conf │ ├── fileset # в этом каталоге мы задаем что бэкапим \ куда │ │ ├── Catalog.conf │ │ ├── eyh.conf # конфиг настроек бэкапа для eyh │ │ ├── LinuxAll.conf │ │ ├── SelfTest.conf │ │ └── Windows All Drives.conf │ ├── job # задания │ │ ├── backup-bareos-fd.conf │ │ ├── BackupCatalog.conf │ │ └── eyh.conf # │ ├── jobdefs │ │ ├── DefaultJob.conf │ │ └── eyh.conf │ ├── messages │ │ ├── Daemon.conf │ │ └── Standard.conf │ ├── pool │ │ ├── Differential.conf │ │ ├── Full.conf │ │ ├── Incremental.conf │ │ └── Scratch.conf │ ├── profile │ │ ├── operator.conf │ │ ├── webui-admin.conf │ │ ├── webui-limited.conf.example │ │ └── webui-readonly.conf │ ├── schedule │ │ ├── Daily.conf │ │ ├── Weekly.conf │ │ ├── WeeklyCycleAfterBackup.conf │ │ └── WeeklyCycle.conf │ ├── storage │ │ ├── eyh.conf │ │ ├── File.conf │ │ └── Restore.conf │ └── user ├── bareos-dir-export │ └── client │ └── eyh │ └── bareos-fd.d │ └── director │ └── bareos-dir.conf ├── bareos-fd.d │ ├── client │ │ └── myself.conf │ ├── director │ │ ├── bareos-dir.conf │ │ └── bareos-mon.conf │ └── messages │ └── Standard.conf ├── bareos-sd.d │ ├── device │ │ ├── eyh.conf │ │ ├── FileStorage.conf │ │ └── Restore.conf │ ├── director │ │ ├── bareos-dir.conf │ │ └── bareos-mon.conf │ ├── messages │ │ └── Standard.conf │ └── storage │ └── bareos-sd.conf └── bconsole.conf
Размещение бэкапов Bareos Storage Daemon
Сервер есть, он работает, но ничего не делает и у него нет места куда бы положить наши бэкапы. За размещение файлов отвечает демон bareos-sd /etc/bareos/bareos-sd.d/ - каталог конфигов bareos-sd /etc/bareos/bareos-sd.d/device/FileStorage.conf /etc/bareos/bareos-sd.d/director/bareos-dir.conf /etc/bareos/bareos-dir.d/storage/File.conf По дефолту пулы данных располагаются в /var/lib/bareos/storage Конфигурация самих пулов располагается в конфигах Bareos Director: /etc/bareos/bareos-dir.d/pool/Differential.conf /etc/bareos/bareos-dir.d/pool/Full.conf /etc/bareos/bareos-dir.d/pool/Incremental.conf /etc/bareos/bareos-dir.d/pool/Scratch.conf Иногда возникает необходимость вынести Storage Daemon на отдельный сервер, или добавить дополнительный Storage Pool расположенный на другом сервере. Для работы с обычными дисковыми накопителями нужно установить соответствующий бэкенд: пакет bareos-sd — для Centos, bareos-storage — для Debian, или Ubuntu. apt install bareos-storage - установка на debian
Пример настройки на отдельном сервере Storage Daemon
Конфигурируем Device на стороне Storage Daemon:
# cat /etc/bareos/bareos-sd.d/device/NewStorage.conf
Device {
Name = NewStorage
Media Type = File
Archive Device = /path/to/your/storage/mount/directory
LabelMedia = yes; # lets Bareos label unlabeled media
Random Access = yes;
AutomaticMount = yes; # when device opened, read it
RemovableMedia = no;
AlwaysOpen = no;
Description = "Your device description here."
}
Теперь, исходя из того, что Device имеет имя “NewStorage”, а Bareos Director — дефолтное “bareos-dir”, следующий конфиг:
# cat /etc/bareos/bareos-sd.d/director/bareos-dir.conf
Director {
Name = bareos-dir
Password = ""
Description = "Director, who is permitted to contact this storage daemon."
}
расположенный на стороне Storage Daemon, нужно разместить на стороне Bareos Director и привести к следующему виду:
# cat /etc/bareos/bareos-dir.d/storage/NewStorage.conf
Storage {
Name = NewStorage
Address = 10.0.0.12 # N.B. Use a FQDN or IP here
Password = ""
Device = NewStorage
Media Type = File
}
Обновить конфигурацию Bareos Director:
# bconsole
* reload
* exit
и перезапустить Storage Daemon для обновления конфигурации:
systemctl restart bareos-sd
Проверяем что у нас получилось
bconsole
status storage
Расписание и задания
Каждое из заданий может быть прикреплено к расписанию (Shedule) и частично предопределено в шаблоне (Job Definitions).
Задания так же могут ссылаться на Fileset’ы, где, например, для группы различных заданий предопределены какие-либо параметры.
Задания могут быть ни прикреплены к расписанию (запускаются только вручную через веб-интерфейс, или консоль), ни ссылаться на Fileset’ы.
Некоторые Fileset’ы создаются автоматически при установке Bareos Director:
/etc/bareos/bareos-dir.d/fileset/Catalog.conf
/etc/bareos/bareos-dir.d/fileset/LinuxAll.conf
/etc/bareos/bareos-dir.d/fileset/SelfTest.conf
/etc/bareos/bareos-dir.d/fileset/Windows\ All\ Drives.conf
Дефолтные задания на резервное копирование:
/etc/bareos/bareos-dir.d/job/backup-bareos-fd.conf
/etc/bareos/bareos-dir.d/job/BackupCatalog.conf
/etc/bareos/bareos-dir.d/job/RestoreFiles.conf
Дефолтное расписание выглядит следующим образом:
/etc/bareos/bareos-dir.d/schedule/WeeklyCycle.conf
/etc/bareos/bareos-dir.d/schedule/WeeklyCycleAfterBackup.conf
Создадим ежедневное:
# cat /etc/bareos/bareos-dir.d/schedule/Daily.conf
Daily.conf
Schedule {
# name (обязательно)
Name = "Daily"
# run time
# допустимы множество опций,
# можно создавать несколько в виде "Run =" times
# но для простоты будем запускать
# каждый день один раз в день в 21:10
Run = daily at 21:00
}
и еженедельное расписание:
# cat /etc/bareos/bareos-dir.d/schedule/Weekly.conf
Schedule {
Name = "Weekly"
Description = "This schedule creates weekly backup."
# создаем Full бэкап в пул "Full" каждую субботу в 21:00
Run = Level=Full Pool=Full sun at 21:00
}
!!! Собственно тут описывается что мы там бэкапим
Создадим Fileset:
# cat /etc/bareos/bareos-dir.d/fileset/MyFileset.conf
FileSet {
# name (required)
Name = "MyFileset"
# include directory
Include {
Options {
# считаем контрольную сумму для всех файлов из fileset
# можно использовать MD5/SHA1. Это полезно для длительного
# хранения, однако создает дополнительную нагрузку на CPU:
# SHA1 надежней, но в большинстве случаев достаточно менее
# требовательного к ресурсам процессора MD5
Signature = MD5
# запаковывать каждый файл из fileset
# наиболее используемые: LZ4/GZIP (см. мануал для остальных
# возможных опций). LZ4 - наиболее быстрый для запаковывания
# и распаковывания.
Compression = LZ4
# noatime - yes: Если ваша система поддерживает O_NOATIME
# Bareos откроет все файлы, скопированные с этой опцией.
# Это позволяет читать файл без обновления inode atime
# (а также без обновления inode ctime). Если опция не
# поддерживается, то будет автоматически игнорирована.
noatime = yes
# Указанные буквы опций используются при запуске
# Verify Level = Catalog, а также задания уровня
# DiskToCatalog. Буквы параметров могут быть любыми
# комбинациями из следующих:
#
# 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
# 1 - compare the SHA1 signature
# A - Only for Accurate option, allows to backup the file
Verify = pin5
}
# бэкапим определенные директории
# (указывать без обратных slash'ей)
# File = "/path/to/your/folder/"
#
# или:
#
# File = "/path/to/your/folder/"%n
# с опцией, задавая таким образом конечную папку с помощью
# имени задачи (Job Name).
#
# Возможно использовать:
# %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)
File = "/path/to/your/folder/"
}
}
Задания:
Задания бывают следующих типов: Backup, Restore, Verify, Admin, Migrate, Copy, Consolidate.
Но для примера рассмотрим только Backup и Restore (информацию об остальных можно найти в официальной документации). Для начала создадим шаблон задачи (Job Definition):
# cat /etc/bareos/bareos-dir.d/jobdefs/MyJobdef.conf
JobDefs {
Name = "MyJobdef"
# Тип определяемого Job Definition (Backup, Restore, Verify...)
Type = Backup
# Собирать данные со следующего клиента:
Client = clientname
# Раскоментируйте, если нужно предопределить Fileset, но можно на него и не ссылаться.
# Например:
# FileSet = "MyFileset"
# Закрепить Job Definition за следующим расписанием:
Schedule = "Weekly"
# Перед и после выполнения задания возможен запуск скриптов:
# ClientRunBeforeJob - запустит скрипт перед выполнением Job на
# стороне клиента,
# RunBeforeJob - запустит скрипт перед выполнением Job на
# стороне Bareos Director.
# ClientRunAfterJob - запустит скрипт после выполнения Job на
# стороне клиента,
# RunAfterJob - аналогично после Job на стороне Bareos Director.
# Таким образом, сначала запустится RunBeforeJob (например, это
# какой-либо скрипт для подготовки данных к бэкапу),
# непосредственно само резервное копирование (или восстановление, если
# Type = Restore) и по завершению - RunAfterJob (например,
# скрипт, который удалит подготовленные для бэкапа данные)
#
# Например:
#
# ClientRunBeforeJob = "/path/to/your/script/script.sh"
#
# Как и в Fileset, возможно так же передавать различные
# параметры:
# ClientRunBeforeJob = "/path/to/script.sh %n"
# С каким storage работать:
Storage = File
# Preset, определяющий как и какие сообщения собирать с
# клиентов. В большинстве случаев - стандартного достаточно.
Messages = Standard
# С каким пулом работать: например, для Full backups - Full.
Pool = Full
# Приоритет задачи: чем ниже, тем раньше других будет выполнена,
# если за один интвервал времени запланировано несколько
Priority = 10
# Вряд ли придется менять это значение, обычно оставляется
# по дефолту. Это файл начальной загрузки. Он содержит
# информацию ASCII, которая позволяет точно определить, какие
# файлы должны быть восстановлены, какой объем они находятся и
# где они находятся на томе. Это относительно компактная форма
# указания информации, является удобочитаемой и может быть
# отредактирована любым текстовым редактором.
Write Bootstrap = "/var/lib/bareos/%c.bsr"
# Указывает на то, что Full Backups записываются в пул "Full";
# Differential - в Differential и тд. Для примера так же можно
# настроить запись Full Backups в созданный выше NewPool:
# Full Backup Pool = NewPool
Full Backup Pool = Full
Differential Backup Pool = Differential
Incremental Backup Pool = Incremental
}
И далее создадим непосредственно саму задачу, ссылающийся на созданный Job Definition:
# cat /etc/bareos/bareos-dir.d/job/MyJob.conf
Job {
Name = "MyJob"
Description = "Backup files from clientname"
JobDefs = "MyJobdef"
Type = Backup
Level = Full
# При Accurate режиме демон файлов точно знает, какие файлы
# присутствовали после последней резервной копии. Таким
# образом, он способен обрабатывать удаленные или
# переименованные файлы.
# При восстановлении FileSet для заданной даты (включая «самые
# последние») Bareos может восстановить именно файлы и каталоги,
# существовавшие во время последней резервной копии до этой
# даты: удаленные файлы будут действительно удалены, а
# переименованные будут переименованы должным образом.
# При создании резервных копий VirtualFull рекомендуется
# использовать точный режим (Accurate Mode), иначе VirtualFull
# может содержать уже удаленные файлы.
# Однако использование точного режима также имеет недостатки:
# FileDaemon должен хранить данные о всех файлах в памяти.
# Итак, если у вас нет достаточной памяти, резервная копия может
# быть очень медленной или неудачной. Для 500 000 файлов
# (типичная desktop Linux-система) потребуется около 64 мегабайт
# ОЗУ на вашем File Daemon для хранения необходимой информации.
Accurate = yes
# Ссылаемся на созданное выше описание файлов (Fileset).
FileSet = "MyFileset"
# Привязываем задачу к еженедельному расписанию "Weekly"
Schedule = "Weekly"
# Собираем данные с клиента "clientname"
Client = "clientname"
# Если требуется, то можно переопределить:
# ClientRunBeforeJob = "/path/to/script.sh"
# ClientRunAfterJob = "/path/to/script.sh"
# Отправляет bootstrap для аварийного восстановления.
# Укажите здесь необходимого адресата, если требуется
Write Bootstrap = "|/usr/bin/bsmtp -h localhost -f \"\(Bareos\) \" -s \"Bootstrap for Job %j\" root@localhost"
# Приоритет. Дефолтные задания имеют приоритет 11.
Priority = 9
}
Если какие-то из параметров определены дважды (например: в Fileset и Job, или в Job Definition и Job), то параметры в Job переопределит (override) ранее заданные.
Выставляем права на все созданные конфигурации:
chown bareos.bareos /etc/bareos/bareos-dir.d/schedule/Daily.conf
chown bareos.bareos /etc/bareos/bareos-dir.d/schedule/Weekly.conf
chown bareos.bareos /etc/bareos/bareos-dir.d/fileset/MyFileset.conf
chown bareos.bareos /etc/bareos/bareos-dir.d/jobdefs/MyJobdef.conf
chown bareos.bareos /etc/bareos/bareos-dir.d/job/MyJob.conf
Применяем изменения:
bconsole
reload
Запускаем задание MyJob:
bconsole
run job=MyJob
Смотрим ошибки и правим файлы
mess
Incrimential Backups
Использование некоторых флагов позволит копировать только те файлы, которые были изменены.
Создадим fileset для Incrimential Backup’ов:
# cat /etc/bareos/bareos-dir.d/fileset/IncrimentialFileset.conf
FileSet {
Name = "IncrimentialFileset"
Description = "Incrimential Data fileset"
Include {
Options {
# Accurate options, использование которых позволяет
# определить Bareos, какие файлы копировать:
# 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
# 1 - compare the SHA1 signature
# В большинстве случаев опции "ms" вполне достаточно для
# копирования новых/измененных, но если требуется учитывать
# дату изменения файла, то "mcs".
Accurate = ms
Signature = MD5
Compression = LZ4
}
File = "/path/to/directory"
}
}
Теперь создадим Base Job, которую можно выполнять по расписанию для копирования всех файлов один раз в месяц, или год,
а можно и вовсе запускать разово вручную, если копировать в отдельный пул, авто очистка на котором отключена:
# cat /etc/bareos/bareos-dir.d/job/BaseJob.conf
Job {
Name = "BaseJob"
Description = "Base backup"
# Задаем базовый (Base) level:
Level = Base
Pool = Incremental
Storage = File
Type = Backup
FileSet = "IncrimentialFileset"
Client = "clientname"
Messages = Standard
# Раскоментируйте, если требуется выполнять Base Job по
# расписанию
# Schedule = "Monthly"
Write Bootstrap = "|/usr/bin/bsmtp -h localhost -f \"\(Bareos\) \" -s \"Bootstrap for Job %j\" root@localhost"
Priority = 11
}
И далее задание для инкрементальных бэкапов, которое уже будем выполнять по расписанию:
# cat /etc/bareos/bareos-dir.d/job/IncrimentialJob.conf
Job {
Name = "IncrimentialJob"
Description = "Incrimential data backup"
# Задает Base Job:
Base = "BaseJob"
Pool = Incremental
Storage = File
Type = Backup
Level = Incremental
FileSet = "IncrimentialFileset"
Schedule = "Daily"
Client = "clientname"
Messages = Standard
Write Bootstrap = "|/usr/bin/bsmtp -h localhost -f \"\(Bareos\) \" -s \"Bootstrap for Job %j\" root@localhost"
Priority = 11
}
Выставляем права, перезагружаем конфиг Bareos Director и запускаем Base Job:
chown bareos.bareos /etc/bareos/bareos-dir.d/fileset/IncrimentialFileset.conf
chown bareos.bareos /etc/bareos/bareos-dir.d/job/BaseJob.conf
chown bareos.bareos /etc/bareos/bareos-dir.d/job/IncrimentialJob.conf
Применяем изменения:
bconsole
* reload
Запускаем задание:
run job=BaseJob
И далее можно запустить задачу на создание инкрементального бэкапа:
run job=IncrimentialJob
В принципе, достаточно выполнять по расписанию только IncrimentialJob: если не будет найден полный бэкап, то он автоматически создастся.
Добавлять BaseJob в расписание не обязательно — это лишь для наглядности данного примера.
