Bacula – пакет программ архитектуры «клиент-сервер» с открытым исходным кодом, предназначенный для создания резервных копий данных, находящихся на компьютерах с различными операционными системами, для восстановления и проверки хранящихся данных. Этот пакет имеет модульную архитектуру, легко масштабируется и может быть использован, как для небольшой локальной сети из нескольких компьютеров, так и для сети предприятия, состоящего из нескольких сотен компьютеров.
Система построена по технологии клиент-сервер, и для передачи данных использует протокол TCP. Резервные копии создаются в собственном, полностью открытом формате.
Система резервирования данных Bacula состоит из четырёх основных элементов: Director Daemon, Storage Daemon, File Daemon и Bacula Console. Все эти элементы реализованы в виде самостоятельных приложений.
Director Daemon (DD) – это центральный элемент системы, осуществляющий управление её остальными компонентами. В его задачи входит управление процессом резервирования/восстановления данных, обеспечение интерфейса управления для администраторов и многое другое. Говоря проще – это диспетчер, который инициирует все процессы и отслеживает ход их выполнения.
Storage Daemon (SD) – приложение, отвечающее за чтение/запись данных непосредственно на устройства хранения информации. Принимает управляющие команды от DD, а также резервируемые данные от/к File Daemon.
File Daemon (FD) – этот элемент ещё можно назвать Агентом. Ведь именно он работает в рамках операционной системы, данные которой необходимо резервировать. File Daemon выполняет всю рутину, осуществляя обращение к резервируемым файлам и их дальнейшую передачу к SD. Также на стороне FD выполняется шифрование резервных копий, если это определено конфигурацией.
Bacula Console (BC) – интерфейс администратора сиcтемы. По своей сути, это командный интерпретатор для управления Bacula. Строго говоря, Bacula Console может быть расширена с помощью графических систем управления, которые, как правило, являются всего лишь надстройкой над BC. К таким системам можно отнести Tray Monitor и Bat. Первая устанавливается на компьютере администратора системы и осуществляет наблюдение за работой системы резервирования, а вторая обеспечивает возможность управления посредством графического интерфейса.
Bacula Catalog – база данных, в которой хранятся сведения обо всех зарезервированных файлах и их местонахождении в резервных копиях. Каталог необходим для обеспечения эффективной адресации к требуемым файлам. Поддерживаются MySql, PostgreSql и SqLite.
Такое структурное деление позволяет организовать очень гибкую систему резервирования, когда Storage Daemon разворачивается на выделенном сервере с несколькими устройствами хранения данных. Также Bacula Director может управлять несколькими экземплярами SD, обеспечивая резервирование части данных на одно устройство хранения, а части – на другое.
Если ваша инфраструктура включает в себя всего один сервер, то все необходимые элементы могут быть развёрнуты на нём
Прежде, чем начать настройку системы, необходимо определить основные термины, используемые в системе Bacula.
Задача (Job) – операция создания архива файлов или восстановления информации с архиву.
Том (Volume) – единица хранения информации, представляет собой отдельный файл, магнитную ленту, CD, DVD. Один том может содержать несколько задач, или одна задача может занимать несколько томов.
Пул (Pool) – группа томов.
Набор файлов (FileSet) – списки директорий и отдельных файлов, которые должны быть заархивированы. Могут содержать регулярные виражения.
Уведомление (Messages) – информация о состоянии компонентов Bacula и задач. Могут передаваться по электронной почте, либо записываться в журнал.
Файл начальной загрузки (bootstrap) – специальный текстовый файл, содержащий информацию об архивированных файлах и томах. Этот файл используется во время операции восстановления.
Типы резервного копирования
Полное копирование (Full backup) — производится копирование данных в полном объеме. Самый надежный способ копирования. В случае выхода из строя свежей копии данные можно восстановить из предыдущих копий. Эффективный и быстрый метод восстановления. Недостаток — требует носителей большого объема и длительного времени выполнения.
Дифференциальное копирование (Differential backup) — копируются файлы, изменившиеся после последнего Full backup. Данные копируются «нарастающим итогом», так что последняя копия всегда будет содержать все изменения с момента последнего Full backup. Выполняется быстрее чем Full backup, при повреждении одной из копий не приводит к потере всех данных за последующий и предыдущий период (при наличии живого Full backup). Так или иначе требуется регулярный Full backup и бывает что последняя копия (при длительной работе) по размеру изменений приближается к Full backup.
Инкрементное копирование (Incremental backup) — выполняется копирование только информации, измененной после выполнения предыдущего Incremental backup. Это самый быстрый метод резервирования и занимает меньше всего объема, но и самый ненадежный метод. В случае повреждения одной из копий все последующие становятся шлаком. И соответственно при повреждении Full backup все становиться негодным. Восстановление данных занимает продолжительное время.
Предпочтителен Full backup но это»дорого» обходиться. Если данные не очень ценны или ресурсов мало то используйте Incremental backup. Differential backup это компромисс, но бывает что последняя копия приближается объему полного копирования так что следите за ним. Есть еще и другие типы копирования такие как VirtualFull и Base вы можете познакомиться с ними сами.
Bacula поддерживает следующие типы сообщений:
информационное (info)
предупреждение (warning)
ошибка (error)
критическая ошибка (fatal)
остановка (terminate)
перечень пропущенных файлов (skipped);
список файлов, сохраненных без ошибок (saved)
список файлов, которые не удалось сохранить (notsaved)
перечень восстановленных файлов (restored)
потребность подключить новый том (mount)
ошибка авторизации (security)
все типы (all).
Для отправки сообщений Bacula использует собственный средство – bsmtp, который может отправлять сообщения не только локальным пользователям, но и на удаленный smtp-сервер.
В статье рассматривается установка и настройка Bacula Director, Bacula Storage Daemon на одном сервере. Также предполагается, что сервер MySql, в котором будет развёрнута база данных Bacula Catalog, уже установлен и запущен на этом же сервере
Клиентами Bacula File Daemon будут выступать локальный сервер Bacula и удаленный сервер на Ubuntu/Centos
На машинах, с которых будет выполняется резервное копирование, нужно установить bacula-fd (Bacula File Daemon)
1.Установка Bacula
Установка Bacula Director, Bacula Storage Daemon, Bacula File Daemon, bacula-console на Bacula-сервере
Ubuntu
1 |
# apt-get install bacula |
При установке буде предложено настроить базу данных bacula
При подтверждении создания будет создана база данных с именем bacula, mysql пользователь bacula с доступом к этой базе и с паролем, указанным Вами
Эти данные автоматичски пропишутся в секцию
Catalog { }
В файле /etc/bacula/bacula-dir.conf
После успешной настройки проверяем наличие базы и таблиц в ней
1 |
# mysql -u root -p -e "use bacula; show tables" |
Centos
1 |
# yum install bacula-director-mysql bacula-console bacula-client bacula-storage-mysql |
В отличии от Ubuntu в Centos нужно вручную создавать базу bacula и таблицы в ней, пользователя с доступом к этой базе. Для этого воспользуемся штатными скриптами
В данном случаем используем рутовый MySQL-аакаунт
1 |
# /usr/libexec/bacula/grant_mysql_privileges -u root -p |
1 |
# /usr/libexec/bacula/create_mysql_database -u root -p |
1 |
# /usr/libexec/bacula/make_mysql_tables -u root -p |
1 |
# /usr/libexec/bacula/grant_bacula_privileges -u root -p |
Задаем пароль для пользователя bacula
1 |
mysql> UPDATE mysql.user SET password=PASSWORD("baculapassword") WHERE user='bacula'; |
1 |
mysql> flush privileges; |
2. Настройка Bacula Director Daemon
Конфигурационный файл Директора bacula-dir.conf, как и остальные конфигурационных файлов Bacula, состоит из логических разделов, описывающих отдельные ресурсы. Раздел каждого ресурса взят в фигурные скобки {}. Строки с комментариями начинаются с символа #
В ключах регистр и пробелы полностью игнорируются. Поэтому ключи: name, Name, и N a m e полностью индентичны. Пробелы до и после знака «равно» игнорируются. Если «значение» содержит пробелы, оно должно быть заключено в двойные кавычки, а пробелы должны быть экранированы обратным слешем.
1 |
# cp /etc/bacula/bacula-dir.conf /etc/bacula/bacula-dir.conf~ |
1 |
# nano /etc/bacula/bacula-dir.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
Director { Name = bacula-dir # Имя директора DIRport = 9101 # Порт который слушает DIR QueryFile = "/usr/libexec/bacula/query.sql" WorkingDirectory = "/var/spool/bacula" # Директория, в которой лежат статус-файлы Директора PidDirectory = "/var/run" Maximum Concurrent Jobs = 1 # Максимальное количество параллельных заданий.Не рекомендуется одновременно запускать более одного задания Password = "directorpassword" # Пароль директора (для привилегированной консоли - bconsole) Messages = Daemon } #Этот ресурс хранит задачу-шаблон, которую потом могут расширять и изменять Job-ресурсы # Дефолтное задание, "шаблон" JobDefs { Name = "DefaultJob" # Имя задания Type = Backup # Тип (backup, restore и т.д.) Level = Differential # Уровень бэкапа (Full, Incremental, Differential и т.п) Client = localhost-fd # Имя клиента FileSet = "localhost-fs" # Набора файлов для сохранения Schedule = "WeeklyDiffCycle" # Расписание, по которому запускается создание бекапов Storage = File # Файловое хранилище Messages = Standard # Поведение уведомлений Pool = File # Пул, куда будем писать бэкапы.Если мы хотиим сделать отдельный пул для каждого клиента, или использовать префиксы, тогда пул указывается в Job для каждого клиента переопределяя тем самым эту настройку Priority = 10 # Приоритет. Давая заданиям приоритеты от 1 (max) до 10 (min), можно регулировать последовательность выполнения. Write Bootstrap = "/var/spool/bacula/%c.bsr" # Файл хранит информацию откуда извлекать данные при восстановлении } #По умолчанию, одновременно запускается только 1 задание, остальные ставятся в очередь. Это регулируется параметром Maximum Concurrent Jobs = number, которое офф. мануал не рекомендует ставить больше еденицы. Job { Name = "BackupCatalog" JobDefs = "DefaultJob" Level = Full FileSet="Catalog" Schedule = "WeeklyCycleAfterBackup" # This creates an ASCII copy of the catalog # Arguments to make_catalog_backup.pl are: # make_catalog_backup.pl <catalog-name> RunBeforeJob = "/usr/libexec/bacula/make_catalog_backup.pl MyCatalog" # This deletes the copy of the catalog RunAfterJob = "/usr/libexec/bacula/delete_catalog_backup" Write Bootstrap = "/var/spool/bacula/%n.bsr" Priority = 11 # run after main backup } FileSet { Name = "Catalog" Include { Options { signature = MD5 } File = "/var/spool/bacula/bacula.sql" } } #Здесь указываем путь и учетные данные для доступа к базе данных. На Ubuntu создается автоматически Catalog { Name = MyCatalog # Uncomment the following line if you want the dbi driver # dbdriver = "dbi:sqlite3"; dbaddress = 127.0.0.1; dbport = dbname = "bacula"; dbuser = "bacula"; dbpassword = "baculapassword" } Job { Name = "RestoreFiles" Type = Restore Client=localhost-fd FileSet="localhost-fs" Storage = File Pool = Default Messages = Standard Where = /bacula/restore } #Описывает, КОГДА будет запускаться Задание (Job) по выполению бекапа. Так же скорее всего будет свой для каждого клиента Schedule { Name = "WeeklyDiffCycle" # Run = Full 1st sun at 23:05 # Run = Differential 2nd-5th sun at 23:05 # Run = Incremental mon-sat at 23:05 Run = Full sun at 23:05 Run = Differential mon-sat at 23:05 } Schedule { Name = "DailyFull" Run = Full sun-sat at 23:05 } # This schedule does the catalog. It starts after the WeeklyCycle Schedule { Name = "WeeklyCycleAfterBackup" Run = Full sun-sat at 23:10 } # Definition of file storage device Storage { Name = File # имя хранилища Address = <Externak-IP-address-Storage-ser ver> # fqdn имя сервера ИЛИ ВНЕШНИЙ IP-адрес Storage-демона.Do not use "localhost" here. В данном случае Bacula Director и Bacula Storage Daemon запускаются на одном сервере SDPort = 9103 # порт оставляем стандартный Password = "storagepassword" # пароль хранилища Device = FileStorage # имя устройства хранения, которое описано в файле bacula-sd.conf Media Type = File # Указывает, устройство хранения - это файл (то бишь - не лента).Также должно совпадать с тем,что описано в файле bacula-sd.conf } # Reasonable message delivery -- send most everything to email address # and to the console Messages { Name = Standard # Имя Отправителя mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r" # Команда отправки сообщений operatorcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: Intervention needed for %j\" %r" mail = your@email = all, !skipped # Отправлять на этот почтовый адрес все сообщения, за исключением пропущенных operator = your@email = mount console = all, !skipped, !saved # Выводить на консоль сообщения за исключением пропущенных и сохраненных append = "/var/spool/bacula/log" = all, !skipped # Записывать сообщения в файл, за исключением пропущенных catalog = all } # Message delivery for daemon messages (no job). Messages { Name = Daemon mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r" mail = your@email = all, !skipped console = all, !skipped, !saved append = "/var/log/bacula.log" = all, !skipped } # Определение пула по умолчанию # Pool - отдельное описание для каждого набора томов (лент, DVD, файлов) # используется при описании задания для указания пула из которого # должен быть взят том. В каждый пул может входить несколько томов. Pool { Name = Default Pool Type = Backup Recycle = yes AutoPrune = yes Volume Retention = 32 days } # Определения пула файлов Pool { Name = File Pool Type = Backup Recycle = yes # Bacula can automatically recycle Volumes AutoPrune = yes # Prune expired volumes Volume Retention = 32 days # how long store backup files Maximum Volume Jobs = 1 # one task = one file Maximum Volumes = 32 # Limit number of Volumes in Pool LabelFormat = "File-MyCatalog" } # Определения пула Scratch # Scratch зарезервировано для пула запасных том - при необходимости # система самостоятельно переводит том из него в требуемый пул Pool { Name = Scratch Pool Type = Backup } # Ограниченная консоль, используемая в трей мониторе для получения # статуса директора DIR # Console { Name = bacula-mon Password = "consolepassword" CommandACL = status, .status } |
Для каждого компьютера, файлы которого архивируются, мы будем создавать отдельный ресурс Client, FileSet, Pool, Job Backup и Job Restore( Storage будет один для всех клиентов)
В конфигурационном файле вы должны описать к примеру работу для одного клиента несколькими переменными такими как Job, Pool, Client, FileSet, Storage, Schedule. Каждой переменной присваивается понятное имя и далее в Job указываются необходимые имена переменных чтобы это было законченной задачей и могло работать согласно вашим указаниям. Рабочий клиент состоит из 6ти элементов:
Job (Работа) — это объект которому присваивают понятное имя и это совокупность вещей и указаний как, кого, что и куда будем резервировать. По его имени эту задачу можно определять, исполнять и вызывать из консоли.
Client (Клиент) — здесь указывается имя клиента для этой работы, сам клиент и его имя определяется отдельно.
FileSet (Набор файлов) — указывается набор файлов\директорий и их исключений для этой работы, сам набор файлов и его имя определяется отдельно.
Schedule (Планировщик) — планировщик для этой работы, в нем описываем периодичность работы и перераспределение ресурсов это когда делать полное копирование когда дифференциальное и тд. Сам планировщик и его имя определяется отдельно и вы можете для удобства завести отдельный конфиг.
Storage (Хранилище) — Определение устройства хранения файлов для этой работы. В этом хранилище есть секция Device (см по имени) в котором есть указание, где будем хранить резервные копии.
Pool (Пул) — определяем для работы нужный нам Пул это отдельное описание для каждого набора томов (лент, DVD, файлов)
Повторюсь,что Storage у меня используется один и он описан в шаблоне DefaultJob, а все типы расписания описаны в файле bacula-dir.conf.Поэтому я буду в клиентcком файле задавать только эти значения
Client, FileSet, Pool, Job Backup и Job Restore
Это приводит разрастания конфигурационного файла до довольно больших размеров, поэтому удобнее описывать эти ресурсы в отдельном файле, который включается в bacula-dir.conf с помощью директивы @. Например, ресурсы Client, FileSet, Pool, Job Backup и Job Restore для сервера, на котором установлена система Bacula, можно поместить в файл localhost.conf, и включить его в bacula-dir.conf:
@/etc/bacula/conf.d/localhost.conf
У каждого клиента будет свой пул – метки на тома в этом пуле будут выставляться согласно меткам для каждого пула клиента автоматически(опция LabelFormat в пуле клиента).Это возможно благодаря опции
LabelMedia = yes; в файле bacula-sd.conf т.е нет необходимости вручную размечать тома
Для того,чтобы не повторять одни и теже опции в задании для всех клиентов
Type = Backup
Storage = File
Messages = Standard
Priority = 10
Используется шаблон DefaultJob
Параметры, которые меняются – уникальны для каждого клиента
Client
FileSet
Pool
Job
Job Restore
Все шаблоны расписаний описаны в файле bacula-dir.conf, эти шаблоны применяются при создании Job-задании бекапа клиента
1 |
# mkdir /etc/bacula/conf.d |
Создаем каталоги для сохранения бекапа всех клиентов и для восстановления из бекапа локального сервера
1 |
# mkdir -p /bacula/{backup,restore} |
1 |
# chown -R bacula:bacula /bacula/ |
1 |
# chgrp -R bacula /etc/bacula/conf.d/ |
1 |
# nano /etc/bacula/conf.d/localhost.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# Описывает задание по созданию бекапа Job { Name = "BackupLocalhostFD" # имя задания JobDefs = "DefaultJob" # Используем шаблон Client = localhost-fd # имя клиента FileSet="localhost-fs" # имя файл-сета(там рассказано что бекапить, а что не бекапить) Pool = LocalhostFDPool # имя пула(для разных клиентов разные пулы томов(volume) куда пишутся сами бекапы) Schedule = "WeeklyDiffCycle" # расписание бекапа,определенное в файле bacula-dir.conf #ClientRunBeforeJob = "/root/sh/before_bg_db_backup.sh" # скрипт запускающийся ДО выполнения задания (путь до скрипта -это путь НА КЛИЕНТЕ!) #ClientRunAfterJob = "/root/sh/after_bg_db_backup.sh" # скрипт запускающийся ПОСЛЕ выполнения задания # в этом файле содержится информация о том, какие файлы должны будут # востанавливаться, на каком вольюме находятся файлы, # где конкретно они находятся - это очень важные файлы, их нужно бэкапить. # Этот файл позволит восстановить копии в случае каких-либо проблем с sql-каталогом Write Bootstrap = "/var/spool/bacula/localhost-fd.bsr" } # Шаблон восстановления # Стандартный шаблон восстановления, который может изменен консольной программой # Только одно такое задание необходима для всех Job/Client/Storage... Job { Name = "RestoreLocalhostFiles" Type = Restore Client=localhost-fd FileSet="localhost-fs" Storage = File Pool = LocalhostFDPool Messages = Standard ## Это путь НА КЛИЕНТЕ, куда будут восстановлены файлы. Если он пустой ## или / - файлы восстановятся на свои места и перазапишут (!!!) существующие файлы ## Должен начинаться со слеша. Where = /bacula/restore } # Описывает, какие файлы будут бекапится с клиента. У каждой клиентской машины будет свой FileSet Name = "localhost-fs" Include { Options { signature = MD5 Compression=GZIP } # При наличии в пути пробелов нужно использовать двойные кавычки # Слэш нужно всегда экранировать, или можно использовать бэкслэш. File = /etc File = /usr/local/nagios File = /usr/lib64/nagios/plugins File = /var/lib/cacti File = /usr/share/cacti File = /var/www/html File = /home/users } Exclude { File = /home/users/kamaok/kamaok.org.ua/wp-content/backupwordpress-d0ae06f24f-backups } } # Описывает физическую машину - клиента, которая будет бекапится Client { Name = localhost-fd # имя Address = 127.0.0.1 # ip адрес клиента FDPort = 9102 # порт, который клиент слушает Catalog = MyCatalog # имя mysql базы данных Bacula Password = "localclientpassword" # пароль для FileDaemon, указанный в файле backup-fd.conf File Retention = 32 days # период, в течении которого информация о ФАЙЛАХ хранится в базе данных, по истечению периода эта информация удаляется(но не сам$ Job Retention = 32 days # тоже самое, только для ЗАДАНИЙ AutoPrune = yes # удалять записи из каталога(бд mysql) старше вышеуказанных значений } Pool { Name = LocalhostFDPool # имя пула, указывается в заданиях резервного копирования Pool Type = Backup # тип пула (может быть только Backup) Recycle = yes # повторно использовать тома(сначала пишет в 1-ый, потом в 2-ой,потом 3-й, 3-й закончился - снова в 1-й) AutoPrune = yes # удалять записи из bacula catalog(из mysql базы бакулы) старше нижеуказанных значений # Период в течении которого информация о томах(volumes) # хранится в базе данных, по истечению периода эта информация удаляется. # То есть можно восстановить файлы за Х дней Volume Retention = 1 months #Это будет означать, что в рамках одного носителя данных могут быть размещены резервные данные, пол$ #Носитель данных – это устройство, на которое непосредственно записываются данные (оптические диски$ #Если размер созданной резервной копии много меньше размера носителя, то имеет смысл сохранить на н$ #Но если мы говорим о файлах, то желательно придерживаться правила "один файл – одна копия", т.е. в$ #Для каждого последующего будут создаваться новые файлы. Maximum Volume Jobs = 1 # максимальное количество томов в пуле Maximum Volumes = 32 # с каких символов начинается имя тома. Удобно использовать для каждого клиента свой префикс. # Тогда нужно описать столько пулов, сколько клиентов. Если у вас разные пулы для фул и # инкрементал бекапов, возможно, вы захотите использовать такие названия, как Full- и Incr-) LabelFormat = "File-LocalhostFDPool" } |
3.Настройка Хранителя (Bacula Storage Daemon)
1 |
# cp /etc/bacula/bacula-sd.conf /etc/bacula/bacula-sd.conf~ |
1 |
# nano /etc/bacula/bacula-sd.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
Storage { Name = bacula-sd # имя для SD SDPort = 9103 # порт стандартный WorkingDirectory = "/var/spool/bacula" # рабочая директория процесса(для статус файлов) Pid Directory = "/var/run" # расположение pid файла Maximum Concurrent Jobs = 20 } Director { Name = bacula-dir # имя BD, того самого, который был описан ранее Password = "directorpassword" # пароль из файла /etc/bacula/bacula-dir.conf в секции Storage } Director { Name = bacula-mon Password = "consolepassword" Monitor = yes } # # Devices supported by this Storage daemon # To connect, the Director's bacula-dir.conf must have the # same Name and MediaType. # Device { Name = FileStorage # Уникальное имя подключенного устройства – совпадает с Device в файле /etc/bacula/bacula-dir.conf в секции Storage Media Type = File # тип – совпадает с Media Type, описанным в файле /etc/bacula/bacula-dir.conf в секции Storage Archive Device = /bacula/backup # Путь к каталогу, в котором будут размещаться резервные копии LabelMedia = yes; # Автоматическое маркирование носителей информации. Новые тома будут обзываться согласно настроек Pool'а Random Access = Yes; # Указывает на возможность случайной (непоследовательной) адресации. Для устройства типа File должно быть yes AutomaticMount = yes; # если устройство открыто, использовать его RemovableMedia = no; # возможно ли извлечение устройства хранения. Необходимо для Tape, CD и т.д. Для файлов устанавливается no AlwaysOpen = no; # открывать только тогда, когда стартует соответствующие задание } Messages { Name = Standard director = bacula-dir = all } |
4. Настройка клиента локального (Bacula File Daemon)
1 |
# cp /etc/bacula/bacula-fd.conf /etc/bacula/bacula-fd.conf~ |
1 |
# nano /etc/bacula/bacula-fd.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Director { Name = bacula-dir # имя из bacula-dir.conf секция Director Password = "localclientpassword" # пароль из /etc/bacula/conf.d/localhost.conf секция Client } Director { Name = backup-mon # имя из bacula-dir.conf секция Console Password = "consolepassword" # пароль из bacula-dir.conf секция Console Monitor = yes } FileDaemon { Name = localhost-fd FDport = 9102 WorkingDirectory = /var/spool/bacula Pid Directory = /var/run Maximum Concurrent Jobs = 20 FDAddress = 127.0.0.1 } # Send all messages except skipped files back to Director Messages { Name = Standard director = bacula-dir = all, !skipped, !restored } |
5.Настройка консоли управления bconsole
1 |
# cp /etc/bacula/bconsole.conf /etc/bacula/bconsole.conf~ |
1 |
# nano /etc/bacula/bconsole.conf |
1 2 3 4 5 6 |
Director { Name = bacula-dir # имя Bacula Director,указанного в файле bacula-dir.conf в секции Director DIRport = 9101 address = localhost Password = "directorpassword" # пароль Bacula Director,указанного в файле bacula-dir.conf в секции Director } |
6.Тестирование конфигурационных файлов и добавление сервисов в автозагрузку.
Запуск служб и проверка корректности запуска.
1 |
# cd /etc/bacula/ |
1 |
# bacula-dir -t -c bacula-dir.conf |
1 |
# bacula-sd -t -c bacula-sd.conf |
1 |
# bacula-fd -t -c bacula-fd.conf |
1 |
# bconsole -t -c bconsole.conf |
1 |
# chkconfig --level 2345 bacula-dir on |
1 |
# chkconfig --level 2345 bacula-sd on |
1 |
# chkconfig --level 2345 bacula-fd on |
Логи смотрим
1 |
# tail -f /var/log/bacula/bacula.log |
1 |
# /etc/init.d/bacula-director start |
1 |
# /etc/init.d/bacula-sd start |
1 |
# /etc/init.d/bacula-fd start |
1 |
# ps ax | grep [b]acula |
1 2 3 |
2758 ? Ssl 0:00 bacula-fd -c /etc/bacula/bacula-fd.conf 2878 ? Ssl 0:00 bacula-sd -c /etc/bacula/bacula-sd.conf 6115 ? Ssl 0:00 bacula-dir -c /etc/bacula/bacula-dir.conf |
1 |
# netstat -nlpt | grep [b]acula |
1 2 3 |
tcp 0 0 0.0.0.0:9101 0.0.0.0:* LISTEN 6115/bacula-dir tcp 0 0 127.0.0.1:9102 0.0.0.0:* LISTEN 2758/bacula-fd tcp 0 0 0.0.0.0:9103 0.0.0.0:* LISTEN 2878/bacula-sd |
Проверяем статус всех трех компонентов
1 |
# bconsole |
1 2 3 4 |
Connecting to Director localhost:9101 1000 OK: bacula-dir Version: 5.0.0 (26 January 2010) Enter a period to cancel a command. * |
1 |
*status |
1 2 3 4 5 6 |
Status available for: 1: Director 2: Storage 3: Client 4: All Select daemon type for status (1-4):4 |
7.Запуск задания по созданию бекапа вручную
1 |
*run |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
A job name must be specified. The defined Job resources are: 1: BackupCatalog 2: RestoreFiles 3: BackupLocalhostFD 4: RestoreLocalhostFiles Select Job resource (1-4): 3 Run Backup job JobName: BackupLocalhostFD Level: Differential Client: localhost-fd FileSet: localhost-fs Pool: LocalhostFDPool (From Job resource) Storage: File (From Job resource) When: 2016-01-29 22:46:11 Priority: 10 OK to run? (yes/mod/no): mod Т.к это первый бекап, а по умолчанию cтоит создавать дифференциальный бекап, то в консоли я укажу,что нужно создать полный бекап Parameters to modify: 1: Level 2: Storage 3: Job 4: FileSet 5: Client 6: When 7: Priority 8: Pool 9: Plugin Options Select parameter to modify (1-9): Select parameter to modify (1-9): 1 Levels: 1: Full 2: Incremental 3: Differential 4: Since 5: VirtualFull Select level (1-5): 1 Run Backup job JobName: BackupLocalhostFD Level: Full Client: localhost-fd FileSet: localhost-fs Pool: LocalhostFDPool (From Job resource) Storage: File (From Job resource) When: 2016-01-29 22:46:11 Priority: 10 OK to run? (yes/mod/no): yes Job queued. JobId=1 * Проверяю стаус создания бекапа *messages …………………………… Termination: Backup OK |
После чего проверяем статус , как описано выше
После окончания выполнения задания на почту придет уведомление
Также,е сли будут какие-то ошибки Bacula проинформирует через E-Mail
Логи смотрим
1 |
# tail -f /var/log/bacula/bacula.log |
Проверяем статус после окончания выполнения бекапа
1 |
*status |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
Status available for: 1: Director 2: Storage 3: Client 4: All Select daemon type for status (1-4): 4 bacula-dir Version: 5.0.0 (26 January 2010) x86_64-redhat-linux-gnu redhat Daemon started 29-Jan-16 22:09, 1 Job run since started. Heap: heap=253,952 smbytes=67,206 max_bytes=108,857 bufs=236 max_bufs=262 Terminated Jobs: JobId Level Files Bytes Status Finished Name ==================================================================== 1 Full 8,000 62.81 M OK 29-Jan-16 22:48 BackupLocalhostFD bacula-sd Version: 5.0.0 (26 January 2010) x86_64-redhat-linux-gnu redhat Daemon started 29-Jan-16 22:02, 1 Job run since started. Heap: heap=135,168 smbytes=84,877 max_bytes=152,855 bufs=68 max_bufs=84 Sizes: boffset_t=8 size_t=8 int32_t=4 int64_t=8 Terminated Jobs: JobId Level Files Bytes Status Finished Name 1 Full 8,000 63.96 M OK 29-Jan-16 22:48 BackupLocalhostFD ==== localhost-fd Version: 5.0.0 (26 January 2010) x86_64-redhat-linux-gnu redhat Daemon started 29-Jan-16 22:02, 1 Job run since started. Heap: heap=135,168 smbytes=84,885 max_bytes=722,174 bufs=67 max_bufs=158 Sizeof: boffset_t=8 size_t=8 debug=0 trace=0 Terminated Jobs: JobId Level Files Bytes Status Finished Name ====================================================================== 1 Full 8,000 62.81 M OK 29-Jan-16 22:48 BackupLocalhostFD |
1 |
# ls -l /bacula/backup/ |
1 2 |
total 62784 -rw-r----- 1 root root 64286614 Jan 29 22:48 File-LocalhostFDPool0001 |
8.Настройка удаленного клиента, с которого будем снимать бекап
Имя клиента – app01.amazon.com
Установка и настройка Bacula File Daemon на клиенте
Centos
1 |
# yum install bacula-client |
Ubuntu
1 |
# apt-get install bacula-client |
1 |
# mkdir -p /bacula/restore |
1 |
# chown -R bacula:bacula /bacula |
1 |
# chmod -R 700 /bacula |
1 |
# cd /etc/bacula |
1 |
# cp bacula-fd.conf bacula-fd.conf~ |
1 |
# nano /etc/bacula/bacula-fd.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Director { Name = bacula-dir Password = "remoteclientpassword" } Director { Name = bacula-mon Password = "consolepassword" Monitor = yes } FileDaemon { Name = app01.amazon.com FDport = 9102 WorkingDirectory = /var/lib/bacula Pid Directory = /var/run/bacula Maximum Concurrent Jobs = 20 FDAddress = <External-IP-address-remote-client> } Messages { Name = Standard director = bacula-dir = all, !skipped, !restored } |
1 |
# bacula-fd -t -c bacula-fd.conf |
1 |
# /etc/init.d/bacula-fd start |
1 |
# /etc/init.d/bacula-fd status |
Настройка iptables на клиенте для разрешения подключения на порт 9102 с Bacula Director сервера
1 |
# iptables -N bacula |
1 |
# iptables -A INPUT -p tcp --dport 9102 -j bacula |
1 |
# iptables -A bacula -s <IP-address-bacula-director-server> -j ACCEPT |
1 |
# iptables -A bacula -j LOG --log-prefix "input bacula: " |
1 |
# iptables -A bacula -j DROP |
1 |
# service iptables save |
Настройка Bacula Director на поддержку нового клиента
1 |
# nano /etc/bacula/bacula-dir.conf |
1 2 |
……………………… @/etc/bacula/conf.d/app01.amazon.com.conf |
1 |
# nano /etc/bacula/conf.d/app01.amazon.com.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
Job { Name = "Backup-app01-amazon-com-FD" JobDefs = "DefaultJob" Client = app01-amazon-com-fd FileSet="app01-amazon-com-fs" Pool = app01-amazon-com-FDPool Schedule = "DailyFull" #ClientRunBeforeJob = "/root/sh/before_bg_db_backup.sh" #ClientRunAfterJob = "/root/sh/after_bg_db_backup.sh" Write Bootstrap = "/var/spool/bacula/app01-amazon-com-fd.bsr" } Job { Name = "Restore-app01-amazon-com-Files" Type = Restore Client=app01-amazon-com-fd FileSet="app01-amazon-com-fs" Storage = File Pool = app01-amazon-com-FDPool Messages = Standard Where = /bacula/restore } FileSet { Name = "app01-amazon-com-fs" Include { Options { signature = MD5 Compression=GZIP } File = /etc File = /home } } Client { Name = app01-amazon-com-fd Address = <External-IP-address-remote-client> FDPort = 9102 Catalog = MyCatalog Password = "remoteclientpassword" File Retention = 32 days Job Retention = 32 days AutoPrune = yes } Pool { Name = app01-amazon-com-FDPool Pool Type = Backup Recycle = yes AutoPrune = yes Volume Retention = 32 days Maximum Volume Jobs = 1 Maximum Volumes = 32 LabelFormat = "File-app01-amazon-com-FDPool" } |
1 |
# bacula-dir -t -c bacula-dir.conf |
1 |
# /etc/init.d/bacula-dir restart |
Bacula-Storage сервер должен принимать подключения от удаленных клиентов на порту 9103.
Поэтому не забудьте настроить ваш firewall на Storage-сервере
Проверка подключения к клиенту с Bacula-director
1 |
# bconsole |
1 2 3 |
Connecting to Director localhost:9101 1000 OK: bacula-dir Version: 5.0.0 (26 January 2010) Enter a period to cancel a command. |
1 |
*status |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Status available for: 1: Director 2: Storage 3: Client 4: All Select daemon type for status (1-4): 3 The defined Client resources are: 1: localhost-fd 2: app01-amazon-com-fd Select Client (File daemon) resource (1-2): 2 Connecting to Client app01-amazon-com-fd at <External-IP-address-remote-client>:9102 app01.amazon.com Version: 5.2.6 (21 February 2012) x86_64-pc-linux-gnu ubuntu 14.04 Daemon started 30-Jan-16 19:45. Jobs: run=0 running=0. Heap: heap=270,336 smbytes=16,889 max_bytes=17,036 bufs=49 max_bufs=50 Sizeof: boffset_t=8 size_t=8 debug=0 trace=0 Running Jobs: Director connected at: 30-Jan-16 19:46 No Jobs running. ==== Terminated Jobs: ==== You have messages. * |
9.Создание бекапа удаленного клиента вручную
1 |
# bconsole |
1 2 3 |
Connecting to Director localhost:9101 1000 OK: bacula-dir Version: 5.0.0 (26 January 2010) Enter a period to cancel a command. |
1 |
*run |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
Automatically selected Catalog: MyCatalog Using Catalog "MyCatalog" A job name must be specified. The defined Job resources are: 1: BackupCatalog 2: RestoreFiles 3: BackupLocalhostFD 4: RestoreLocalhostFiles 5: Backup-app01-amazon-com-FD 6: Restore-app01-amazon-com-Files Select Job resource (1-6): 5 Run Backup job JobName: Backup-app01-amazon-com-FD Level: Differential Client: app01-amazon-com-fd FileSet: app01-amazon-com-fs Pool: app01-amazon-com-FDPool (From Job resource) Storage: File (From Job resource) When: 2016-01-30 20:18:45 Priority: 10 OK to run? (yes/mod/no): mod Parameters to modify: 1: Level 2: Storage 3: Job 4: FileSet 5: Client 6: When 7: Priority 8: Pool 9: Plugin Options Select parameter to modify (1-9): 1 Levels: 1: Full 2: Incremental 3: Differential 4: Since 5: VirtualFull Select level (1-5): 1 Run Backup job JobName: Backup-app01-amazon-com-FD Level: Full Client: app01-amazon-com-fd FileSet: app01-amazon-com-fs Pool: app01-amazon-com-FDPool (From Job resource) Storage: File (From Job resource) When: 2016-01-30 20:18:45 Priority: 10 OK to run? (yes/mod/no): yes Job queued. JobId=9 You have messages. *messages Termination: Backup OK |
10.Восстановление каталогов/файлов
Например ,восстановим каталог /etc сервера app01.amazon.com на этот же удаленный сервер
Для этого запустим задание по восстановлению файлов/каталогов, которое было описано
в файле /etc/bacula/conf.d/app01.amazon.com.conf под именем Restore-app01-amazon-com-Files
Как видно из задания, файлы будут записываться на удаленном клиенте в каталог /bacula/restore
Если он не существует или / , тогда файлы восстановятся на свои места и перазапишут (!!!) существующие файлы. Путь должен начинаться со слеша.
1 |
# bconsole |
1 2 3 |
Connecting to Director localhost:9101 1000 OK: bacula-dir Version: 5.0.0 (26 January 2010) Enter a period to cancel a command. |
1 |
*restore |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
Automatically selected Catalog: MyCatalog Using Catalog "MyCatalog" First you select one or more JobIds that contain files to be restored. You will be presented several methods of specifying the JobIds. Then you will be allowed to select which files from those JobIds are to be restored. To select the JobIds, you have the following choices: 1: List last 20 Jobs run 2: List Jobs where a given File is saved 3: Enter list of comma separated JobIds to select 4: Enter SQL list command 5: Select the most recent backup for a client 6: Select backup for a client before a specified time 7: Enter a list of files to restore 8: Enter a list of files to restore before a specified time 9: Find the JobIds of the most recent backup for a client 10: Find the JobIds for a backup for a client before a specified time 11: Enter a list of directories to restore for found JobIds 12: Select full restore to a specified Job date 13: Cancel Select item: (1-13): 1 +-------+---------------------+---------------------+----------+----------+------------+ | JobId | Client | StartTime | JobLevel | JobFiles | JobBytes | +-------+---------------------+---------------------+----------+----------+------------+ | 10 | app01-amazon-com-fd | 2016-01-30 20:31:08 | D | 0 | 0 | | 9 | app01-amazon-com-fd | 2016-01-30 20:18:58 | F | 5017 | 15399754 | | 5 | localhost-fd | 2016-01-30 13:53:24 | F | 1 | 1138886 | | 2 | localhost-fd | 2016-01-30 11:05:02 | D | 435 | 6654468 | | 1 | localhost-fd | 2016-01-29 22:48:15 | F | 8000 | 62810730 | +-------+---------------------+---------------------+----------+----------+------------+ To select the JobIds, you have the following choices: 1: List last 20 Jobs run 2: List Jobs where a given File is saved 3: Enter list of comma separated JobIds to select 4: Enter SQL list command 5: Select the most recent backup for a client 6: Select backup for a client before a specified time 7: Enter a list of files to restore 8: Enter a list of files to restore before a specified time 9: Find the JobIds of the most recent backup for a client 10: Find the JobIds for a backup for a client before a specified time 11: Enter a list of directories to restore for found JobIds 12: Select full restore to a specified Job date 13: Cancel Select item: (1-13): 3 Enter JobId(s), comma separated, to restore: 9 You have selected the following JobId: 9 Building directory tree for JobId(s) 9 ... ++++++++++++++++++++++++++++++++++++++++++++ 4,476 files inserted into the tree. You are now entering file selection mode where you add (mark) and remove (unmark) files to be restored. No files are initially added, unless you used the "all" keyword on the command line. Enter "done" to leave this mode. cwd is: / $ ls etc/ home/ $ mark etc 1,940 files marked. $ done Bootstrap records written to /var/spool/bacula/bacula-dir.restore.1.bsr The job will require the following Volume(s) Storage(s) SD Device(s) =========================================================================== File-app01-amazon-com-FDP File FileStorage Volumes marked with "*" are online. 1,940 files selected to be restored. The defined Restore Job resources are: 1: RestoreFiles 2: RestoreLocalhostFiles 3: Restore-app01-amazon-com-Files Select Restore Job (1-3): 3 Defined Clients: 1: app01-amazon-com-fd 2: localhost-fd Select the Client (1-2): 1 Run Restore job JobName: Restore-app01-amazon-com-Files Bootstrap: /var/spool/bacula/bacula-dir.restore.1.bsr Where: /bacula/restore Replace: always FileSet: app01-amazon-com-fs Backup Client: app01-amazon-com-fd Restore Client: app01-amazon-com-fd Storage: File When: 2016-01-30 20:51:09 Catalog: MyCatalog Priority: 10 Plugin Options: *None* OK to run? (yes/mod/no): yes Job queued. JobId=11 *messages Termination: Restore OK |
Провереям наличие каталога /etc со всем содержимым на удаленном клиенте в каталоге /bacula/restore/
1 |
# ls -l /bacula/restore/ |
1 2 |
total 4 drwxr-xr-x 104 root root 4096 Jan 30 19:04 etc |
1 |
# find /bacula/restore/etc/ -type f | wc -l |
1 |
901 |
1 |
# find /etc -type f | wc -l |
1 |
901 |
Источник:
https://www.ibm.com/developerworks/ru/library/l-Backup_4/
http://www.ignix.ru/book/freebsd/daemon/bacula
http://habrahabr.ru/post/135291/
https://habrahabr.ru/post/86526/
http://golddragonoptics.ru/sistema-rezervirovaniya-bacula-ustanovka-i-nastrojka.html
https://linux-notes.org/ustanovka-i-nastrojka-bacula-i-webmin-dlya-sozdaniya-be-kapov-servera-na-redhat-centos-fedora/