Bareos (Backup Archiving Recovery Open Sourced) — высоконадежное сетевое кроссплатформенное программное обеспечение для резервного копирования, архивирования и восстановления данных. Bareos основан в 2010 году, как OpenSource ответвление от проекта Bacula и в настоящее время активно развивается и пополняется многими новыми функциями. На первый взгляд Bareos может казаться довольно сложным для внедрения, но по мере его изучения приходит понимание того, что Bareos обладает довольно мощным функционалом, который так же дополнительно расширяется за-счет плагинов. Bareos поддерживает множество различных типов носителей информации (от ленточных и дисковых до распределенных файловых систем), а так же обладает различными полезными опциями: архивирование, шифрование данных, возможность применения шаблонов задач (Job Definitions) и многое другое.
Условно архитектуру Bareos можно разделить на несколько компонентов, или служб (рис. 2):
-
- Bareos Director — компонент который управляет заданиями (jobs) и операциями резервного копирования, или восстановления, а так же управляет File и Storage Daemon’ами.
- Baroes Console — текстовая консоль для управления Bareos Director’ом через специальный командный синтаксис. По умолчанию устанавлиявется вместе с Bareos Director, но может устанавливаться и отдельно для удаленного подключения к Bareos Director.
- Bareos Web UI — веб-интерфейс Bareos (отсутствует на рис. 2). По умолчанию устанавливается вместе с Bareos Director. Данный компонент пока что на стадии развития и используется больше для удобного мониторинга, но можно вручную запускать задачи на резервное копировение, или восстановление. Тогда как расписание и задания создаются в основном через текстовые конфиги, или через консоль bareos, а не через веб-интерфейс.
- Bareos Catalog — база данных, которая содержит информацию по расписаниям, заданиям, сохраненным файлам, клиентам, статусам.
- Storage Daemon — компонент, который выполняет операции чтения и записи на устройствах хранения, используемых для резервного копирования.
- File Daemon — агент, который используется для сбора с “клиентских” систем и их размещения при операциях восстановления.
создаем пользователя admin для доступа к веб-интерфейсу:
# bconsole
* configure add console name=admin password=<your_password> profile=webui-admin
* exit
Команда создаст профиль пользователя следующего вида:
cat /etc/bareos/bareos-dir.d/console/admin.conf
Console {
Name = admin
Password = <your_password>
Profile = webui-admin
}
Логинимся к консоли на стороне Bareos Director и добавляем только что установленный “клиент”:
# bconsole
* configure add client name=clientname address=10.10.1.2 password=password
и получаем примерно следующий вывод:
Exported resource file "/etc/bareos/bareos-dir-export/client/clientname/bareos-fd.d/director/bareos-dir.conf":
Director {
Name = bareos-dir
Password = "[md5]5f4dcc3b5aa765d61d8327deb882cf99"
}
Created resource config file "/etc/bareos/bareos-dir.d/client/clientname.conf":
Client {
Name = clientname
Address = 10.10.1.2
Password = password
}
Это конфигурация клиента, которую необходимо скопировать на сторону “клиента”. Перезагружаем конфигурацию Bareos Director, выходим из консоли, копируем конфиг:
* reload
* exit
# scp /etc/bareos/bareos-dir-export/client/clientname/bareos-fd.d/director/bareos-dir.conf root@10.10.1.2:/etc/bareos/bareos-fd.d/director/
перезагружаем File Daemon на стороне клиентской системы:
# systemctl restart bareos-fd
Из консоли выполним:
# bconsole
* list clients
для вывода списка клиентов, или:
* status client
для выбора клиента и просмотра его статуса. Аналогично можно просмотреть информацию через веб-интерфейс (рис. 3), где можно так же посмотреть и его статус:
Connecting to Client client at 10.10.1.2:9102
bareos-client-fd Version: 17.2.4 (21 Sep 2017) x86_64-redhat-linux-gnu redhat CentOS Linux release 7.4.1708 (Core)
Daemon started 02-ав-2018 15:09. Jobs: run=0 running=0.
Heap: heap=143,360 smbytes=28,523 max_bytes=28,912 bufs=64 max_bufs=67
Sizeof: boffset_t=8 size_t=8 debug=0 trace=0 bwlimit=0kB/s
Running Jobs:
bareos-dir (director) connected at: 03-ав-2018 00:12
No Jobs running.
====
Terminated Jobs:
====
Включить, или отключить клиент из консоли можно командами:
# bconsole
* enable client clientname
* disable client clientname
Удалить клиент с Bareos Director можно путем удаления конфига из папки /etc/bareos/bareos-dir.d/client и перезагрузки конфигурации Bareos Director:
# rm -f /etc/bareos/bareos-dir.d/client/clientname.conf
# bconsole
* reload
* exit
Установка Bareos Storage Daemon.
По умочанию Storage Deamon устанавливается вместе с серверной частью Bareos и система, где установлен Bareos Director, уже является хранилищем. Если по каким-то причинам пакеты установились, но в веб-интерфейсе при попытке отобразить “Статус накопителя” пишет:
Connecting to Storage daemon File at bareos-server:9103
Failed to connect to Storage daemon File.
====
то сверями и исправляем следующие конфиги:
# cat /etc/bareos/bareos-sd.d/device/FileStorage.conf
Device {
Name = FileStorage
Media Type = File
Archive Device = /var/lib/bareos/storage
LabelMedia = yes; # lets Bareos label unlabeled media
Random Access = yes;
AutomaticMount = yes; # when device opened, read it
RemovableMedia = no;
AlwaysOpen = no;
Description = "File device. A connecting Director must have the same Name and MediaType."
}
# cat /etc/bareos/bareos-sd.d/director/bareos-dir.conf
Director {
Name = bareos-dir
Password = "<some_password_hash_here>"
Description = "Director, who is permitted to contact this storage daemon."
}
# cat /etc/bareos/bareos-dir.d/storage/File.conf
Storage {
Name = File
Address = bareos # N.B. Use a fully qualified name here (do
# not use "localhost" here).
Password = "<some_password_hash_here>"
Device = FileStorage
Media Type = File
Removable Media = no
}
и запущен ли File Daemon:
# systemctl status bareos-sd
По дефолту пулы данных располагаются в /var/lib/bareos/storage, тогда как конфигурация самих пулов распологается в конфигах Bareos Director:
# ls /etc/bareos/bareos-dir.d/pool
Differential.conf Full.conf Incremental.conf Scratch.conf
Иногда возникает необходимость вынести Storage Daemon на отдельный сервер, или добавить дополнительный Storage Pool расположенный на другом сервере. Рассмотрим установку Bareos Storage Daemon и подключение дополнительного storage, а так же создание пула для хранения данных. Для работы с обычными дисковыми накопителями нужно установить соответствующий бэкенд: пакет bareos-sd — для Centos, bareos-storage — для Debian, или Ubuntu. Для tape, ceph, или GlusterFS потребуются другие пакеты, просмотреть список которых можно командой:
# apt-cache search bareos | grep bareos-storage
Ниже будет рассмотрен пример с несменным HDD/SSD файловым storage backend’ом. За конфигурацией более специфичных устройств, примерами и дополнительными опциями можно обратиться к официальной документации.
Конфигурируем 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 = "<some_password_hash>"
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.10.1.1 # N.B. Use a FQDN or IP here
Password = "<some_password_hash>"
Device = NewStorage
Media Type = File
}
Обновить конфигурацию Bareos Director:
# bconsole
* reload
* exit
и перезапустить Storage Daemon для обновления конфигурации:
# systemctl restart bareos-sd
Просмотреть статус добавленного устройства можно в веб-интерфейсе, или через консоль:
# bconsole
* status storage
Создание Storage Pool.
Bareos хранит данные в различных томах (Volumes), каждый из которых располагается Pool’ах. Для каждого пула можно настроить свои параметры: автоуадаление и срок хранения тома, максимальное количество томов в пуле, максимальное количество заданий на каждый том, максимальные размер тома и другие опции. По умолчанию создаются три основных пула: Full, Incremental и Differential. Можно так же настроить Recycling с использованием Scratch Pool’а, но эта в опция полезна лишь для ленточных накопителей. За дополнительной информацией об устрйостве Pool’ов и Volume’ов можно обратиться к официальной документации. Создадим дополнительный Pool, который будет размещен на выше созданном NewStorage девайсе:
# cat /etc/bareos/bareos-dir.d/pool/NewPool.conf
Pool {
Name = NewPool
Pool Type = Backup
Recycle = yes # Bareos умеет автоматически
# удалять тома
AutoPrune = yes # Prune expired volumes
Recycle Oldest Volume = yes
Recycle Current Volume = yes
Volume Retention = 60 days # Как долго хранить
Maximum Volume Bytes = 1024G # Лимит объема для Volume'а
Maximum Volumes = 120 # Лимит количества Volumes в Pool'е
Label Format = "Full-" # Volume будем именован как
# "Full-<volume-id>"
Maximum Volume Jobs = 1 # Максимальное количество jobs
# на один Volume
RecyclePool = Scratch # Recycle пул = Scratch
}
Тогда как Scratch Pool выглядит:
# cat Scratch.conf
Pool {
Name = Scratch
Pool Type = Backup
}
Выставляем на всякий случай owner’а, обновляем конфиг Bareos Director и проверяем список Pool’ов:
# chown bareos:bareos NewPool.conf
# bconsole
* reload
* list pools
* exit
Расписание и задания.
Перед тем, как приступить к настройке расписания (Schedule), задач (Jobs) и их шаблонов (Job Definitions) на резервное копирование (Backup) и восстановление (Restore), рассмотрим структуру в папке конфигов Bareos Director. Взаимосвязь между комопонентами Bareos Director и конфигами схематически представлена на рис.
# ls -R /etc/bareos/bareos-dir.d | grep ":" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'
|---bareos-dir.d
|-----catalog # конфигурация Bareos Catalog
|-----client # конфиги клиентов (Bareos File Daemons)
|-----console # учетные записи для доступа к Bareos Director
|-----counter
|-----director # здесь расположен конфиг самого Bareos Director
|-----fileset # fileset'ы (или описания наборов файлов)
|-----job # задания
|-----jobdefs # щаблоны заданий (Job Definitions)
|-----messages # какие сообщения с File Daemon'ов сохранять
|-----pool # конфиги пулов
|-----profile # шаблоны доступов (профилей) для учеток в client
|-----schedule # расписание
|-----storage # конфиги storage
Каждое из заданий может быть прикреплено к расписанию (Shedule) и частично предопределено в шаблоне (Job Definitions). Задания так же могут ссылаться на Fileset’ы, где, например, для группы различных заданий предопределены какие-либо параметры. Задания могут быть ни прикреплены к расписанию (запускаются только вручную через веб-интерфейс, или консоль), ни ссылаться на Fileset’ы. Некоторые Fileset’ы создаются автоматически при установке Bareos Director:
# ls -1 /etc/bareos/bareos-dir.d/fileset/
Catalog.conf
LinuxAll.conf
SelfTest.conf
Windows All Drives.conf
так же как и дефолтные задания на резервное копирования Bareos и восстановление каталога (RestoreFiles.conf):
# ls -1 /etc/bareos/bareos-dir.d/job/
backup-bareos-fd.conf
BackupCatalog.conf
RestoreFiles.conf
Дефолтное расписание выглядит следующим образом:
# cat /etc/bareos/bareos-dir.d/schedule/WeeklyCycle.conf
Schedule {
Name = "WeeklyCycle"
Run = Full 1st sat at 21:00 # (#04)
Run = Differential 2nd-5th sat at 21:00 # (#07)
Run = Incremental mon-fri at 21:00 # (#10)
}
# cat /etc/bareos/bareos-dir.d/schedule/WeeklyCycleAfterBackup.conf
Schedule {
Name = "WeeklyCycleAfterBackup"
Description = "This schedule does the catalog. It starts after the WeeklyCycle."
Run = Full mon-fri at 21:10
}
WeeklyCycle задает расписание для каждого пула, после которого стартует WeeklyCycleAfterBackup и бэкапит настройки Bareos Director. Дефолтное расписание в последствии можно изменить, или удалить, предварительно исправив все ссылающиеся на него задания, которые можно просмотреть которые можно в веб-интферфейсе:
Расписание -> Показать -> Jobs Triggered
Создадим ежедневное:
# 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
* run job=MyJob
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 в расписание не обязательно — это лишь для наглядности данного примера.
Автоочистка Volumes и Admin Jobs.
Логично, что устаревшие данные периодически нужно чистить. И, казалось бы, если поделить емкость storage pool на количество необходимых volumes (c учетом максимального количества заданий, скажем, за 3 0 дней) мы получим максимальный размер каждого Volume, которые теоретически можно перезаписывать. То есть:
7 Tb / 716 = 716.8
и со следующими настройками для пула:
Pool {
Name = Full
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 30 days
File Retention = 30 days
Recycle Oldest Volume = yes
Recycle Current Volume = yes
Maximum Volume Bytes = 10G
Maximum Volumes = 716
Label Format = "Full-"
Maximum Volume Jobs = 1
RecyclePool = Scratch
}
после 30 дней тома в “Full” storage pool будут переходить в состояние Prune, и при выаолнении задания такие тома будут перезаписаны. Но, увы, даже если максимальное количество выполняемых для данного Pool’а заданий равно еденице, могут возникнуть такие ситуации, когда для перезаписи может не хватить места. Лучше всего, данные периодически очищать, используя Admin Jobs — служебные задания, предназначенные для запуска каких-либо скриптов.
Для очистки Pool’а можно использовать мой скрипт bareos-cleanup.sh [6.16 Kb] (cкачиваний: 594)
. Клонируем его в папку Bareos Director:
# cd /etc/bareos/bareos-dir.d
# clean_expired_baros_volumes.sh [3.71 Kb] (cкачиваний: 579)
# chmod +x /etc/bareos/bareos-dir.d/scripts-various/bareos-scripts/clean_expired_baros_volumes.sh
и создаем Admin Job для запуска этого скрипта. Допустим, очищать будем каждый день:
# cat /etc/bareos/bareos-dir.d/schedule/Daily.conf
Schedule {
Name = "Daily"
Run = daily at 21:00
}
перед остальными заданиями (наивысший приоритет — 1) все тома в пуле “Full”, старше 31 дня:
# cat /etc/bareos/bareos-dir.d/job/autoclean.conf
Job {
Name = "Autoclean"
JobDefs = "DefaultJob"
Schedule = "Daily"
Type = "Admin"
Priority = 1
RunScript {
Runs When = Before
Runs On Client = no
Fail Job On Error = yes
Command = "/etc/bareos/bareos-dir.d/scripts-various/bareos-scripts/clean_expired_baros_volumes.sh --action delete --expire 31 --name Full-"
}
}
и соответственно дефолтный JobDef (если вы не используете Differential и Incrimential Pool можно закоментировать, как в примере ниже):
# cat /etc/bareos/bareos-dir.d/jobdefs/DefaultJob.conf
JobDefs {
Name = "DefaultJob"
Type = Backup
Level = Incremental
Client = bareos-fd
FileSet = "Catalog"
Schedule = "Daily"
Storage = File
Messages = Standard
Pool = Full
Priority = 10
Write Bootstrap = "/var/lib/bareos/%c.bsr"
Full Backup Pool = Full
# Differential Backup Pool = Differential
# Incremental Backup Pool = Incremental
}
Вместо того, чтобы удалять все тома старше N дней можно так же фильтровать по их статусу: например, “Pruned”. Для этого нужно добавить параметр:
--filter Prune
Полное описание параметров можно получить:
# ./clean_expired_baros_volumes.sh --help
Допонительные операции над томами.
Иногда в отдельных случаях приходится выполнять отдельные операцин над томами. Все нижеперечисленные операции производятся от root’а. Получить список всех присутствующих в базе данных bareos пулов можно командами:
# bconsole
* list pool
а томов:
* list volume
Или одной строкой без последующего “quit”:
# echo "list pool" | bconsole
# echo "list volume" | bconsole
Соответственно, можно сравнить с помощью скрипта clean_missing_volumes.sh [57.25 Kb] (cкачиваний: 458)
и удалить тома с диска, которые отсутствуют в базе данных:
#!/bin/bash
# Set Pool mount folder
poolmount=/mnt/folder
cd $poolmount
for i in `find . -maxdepth 1 -type f -printf "%f\n"`; do
echo "list volume=$i" | bconsole | \
if grep --quiet "No results to list"; then
echo "$i is ready to be deleted"
rm -f $poolmount/$i
fi
done
exit 0
Перевод отдельного тома <volume_name> в состгяние “prune”:
# bconsole
* prune volume=<volume_name> yes
Замените “prune” на “purge”, или “delete” в зависимости от требуемого состояния тома. При переводе в состояние “delete” файл удаляется лишь из списка томов bareos, физически он по прежнему остается на диске:
# rm -f <volume_name>
Не сложно догадаться, что можно указать в цикле диапазон номеров томов (например: 0006–1020) и перевести их в необходимый статус. Следующий пример переводит тома в статус “delete”:
#!/bin/bash
echo "WARNING!"
echo "This will remove selected range of volumes in pool."
echo "Sleep 30 for sure..."
sleep 30
volumename="Incremental-"
for i in {0006..1020}
do
echo "Delete volume: ${volumename}${i}"
echo "delete volume=${volumename}${i} yes" | bconsole
done
Следующий скрипт purge_all_volumes_from_pool.sh [57.26 Kb] (cкачиваний: 424)
переведет все сущуествующие в базе данных bareos тома в пуле “Incremental” статус “purged”:
#!/bin/sh
poolname="Incremental"
volumes=`mysql -u root -B \
-e'select VolumeName from Media order by VolumeName;' bareos | \
tail -n+2 | grep $poolname`
echo "This will purge all volumes in ${volumename}.
echo "Sleep 30 for sure..."
sleep 30
for vol in `echo $volumes`
do
echo "purge volume=${vol} yes" | bconsole
done
и далее уже с помощью другого скрипта remove_purged_volumes.sh [55.58 Kb] (cкачиваний: 362)
физически удалить все тома, которые находятся в состоянии “purged”:
#!/bin/bash
for f in `echo "list volume" | bconsole | grep Purged | \
cut -d ' ' -f6`; do
echo "delete volume=$f yes" | bconsole;
rm -rf /mnt/nas/$f;
done
exit 0
Создавать тома можно командой label:
# bconsole
label
Full-9998
и выбираем Pool:
Defined Pools:
1: Scratch
2: Full
Select the Pool (1-2): 2
Соответственно, если задать диапазон и номер пула, то можно создать скриптом:
#!/bin/bash
volumename="Incremental"
for i in {9990..9999}
do
echo "Creating volume: ${volumename}-0${i}"
echo -e "label\n${volumename}-0${i}\n2" | bconsole
done
|