Bacula

Аватар пользователя Raven2000


Bacula — кроссплатформенное клиент-серверное программное обеспечение, позволяющее централизованно управлять резервным копированием, восстановлением, и проверкой данных по сети. Bacula также может работать на единственном сервере или, распределёно на нескольких, может записывать резервные копии на различные типы носителей, включая ленты, ленточные библиотеки, диски. Предлагает широкие возможности для управления хранилищами данных, облегчает поиск и восстановление потерянных или повреждённых файлов. Благодаря модульной структуре, Bacula легко масштабируемая система и может работать как в маленьких так и в крупных сетях. Дает возможность управления через CLI, GUI и веб-интерфейс.

Содержание:

Введение

Bacula разделена на несколько отдельных модулей это придает ей гибкости в работе:

  • Director (DIR) (порт 9101) — директор осуществляет централизованный контроль и администрирование всего комплекса задач. Планирование и управление заданиями на резервное копирование (Job). Обслуживание Каталога (Catalog) — центральной БД для хранения метаданных.
  • Storage Daemon (SD) (порт 9103) — сервер хранения читает и пишет данные на физический носитель: диск, ленту, DVD, USB.
  • File Daemon (FD) (порт 9102) — клиент выполняющий непосредственное копирование, восстановление и проверку данных по запросу Director. File Daemon должен быть установлен на нужной клиентской машине и он обменивается информацией с Director и Storage Daemon.
  • Console — консоль управления для администратора. Поддерживает списки ACL для разных пользователей консоли. Типы консолей: TTY, wxWidgets (GUI) для Linux, Unix, Win32, GNOME (GUI), несколько веб-интерфейсов, Qt4.
  • Catalog database — база данных для хранения метаданных SQL: MySQL, PostgreSQL, или SQLite.
  • Tray Monitor — апплет GNOME/KDE/Win32 GUI для показа активности Director, File daemons, Storage daemon в реальном времени.

Планирование

Первое, что вы должны будете сделать это понять и описать кто, что и когда будет резервироваться. В нашем примере я буду использовать три сервера.

Оборудование
  • thor.kmps.local - FreeBSD 8.2 amd64. ISC-DHCP, Web, NUT, Bacula и т.п. [DIR, SD, FD]
  • srv1.kmps.local - Windows 2003, AD, сетевые директории, DNS, SEP, WSUS, Bacula и т.п. [FD]
  • srv2.kmps.local - Windows 2003 БД 1С, Гарант, Консультант+, Bacula и т.п. [FD]

Как я сказал Bacula может быть распределена в сети и при грамотном ведении хозяйства и бюджета наша задача выглядит примерно так.

Примечание: чтобы не усложнять схему я специально убрал из неё трей-монитор, командную консоль, и БД каталога тк их можно поставить на другие машины. Пример

К слову сказать готовые ленты желательно переносить в другое здание (или помещение) тк от чрезвычайных случаев никто не застрахован. И вот еще я как и все вы живем в России обычно бюджет фирм на ИТ небольшой и приходиться выкручиваться самому так, что реальная схема часто выглядит так.

Схема резервного копирования

Для начала вам понадобится нарисовать простую таблицу примерно такого вида.

Так вы можете наглядно понять, что необходимо и как нужно сделать, дальше следуйте вашей схеме. В процессе схему можете дополнять и оптимизировать не забывая все документировать. Вы документируете свою работу ведь правда?

Типы резервного копирования

Дополнительно опишем типы резервного копирования их плюсы и минусы:

  1. Полное копирование (Full backup) - производится копирование данных в полном объеме. Самый надежный способ копирования. В случае выхода из строя свежей копии данные можно восстановить из предыдущих копий. Эффективный и быстрый метод восстановления. Недостаток - требует носителей большого объема и длительного времени выполнения.
  2. Дифференциальное копирование (Differential backup) - копируются файлы, изменившиеся после последнего Full backup. Данные копируются "нарастающим итогом", так что последняя копия всегда будет содержать все изменения с момента последнего Full backup. Выполняется быстрее чем Full backup, при повреждении одной из копий не приводит к потере всех данных за последующий и предыдущий период (при наличии живого Full backup). Так или иначе требуется регулярный Full backup и бывает что последняя копия (при длительной работе) по размеру изменений приближается к Full backup.
  3. Инкрементное копирование (Incremental backup) - выполняется копирование только информации, измененной после выполнения предыдущего Incremental backup. Это самый быстрый метод резервирования и занимает меньше всего объема, но и самый ненадежный метод. В случае повреждения одной из копий все последующие становятся шлаком. И соответственно при повреждении Full backup все становиться негодным. Восстановление данных занимает продолжительное время.

Предпочтителен Full backup но это"дорого" обходиться. Если данные не очень ценны или ресурсов мало то используйте Incremental backup. Differential backup это компромисс, но бывает что последняя копия приближается объему полного копирования так что следите за ним =). Есть еще и другие типы копирования такие как VirtualFull и Base вы можете познакомиться с ними сами.

Установка

Установка стандартна так что следуйте за белым кроликом...

# make search name=bacula-server
Port:   bacula-server-5.0.3
Path:   /usr/ports/sysutils/bacula-server
Info:   The network backup solution (server)
Maint:  dan@langille.org
B-deps: gettext-0.18.1.1 libiconv-1.13.1_1 postgresql-client-8.3.15,1
R-deps: gettext-0.18.1.1 libiconv-1.13.1_1 postgresql-client-8.3.15,1
WWW:    _http://www.bacula.org/
 
# cd /usr/ports/sysutils/bacula-server
# make config
 
Options for bacula-server 5.0.3
 
[ ] SQLITE3     Use SQLite-3 database
[X] MYSQL       Use MySQL database
[ ] POSTGRESQL  Use PostgreSQL database
[ ] MTX         Install mtx for control of autochanger devices
[X] NLS         Native Language Support via gettext utilities
[X] OPENSSL     Enable OpenSSL for encrypted communication
 
# make install clean
You may use the following build options (or make config):
 
  WITH_CLIENT_ONLY=yes  if you only want the file daemon.
  WITH_MTX=yes          if you want to use mtx instead of chio for autochanger control.
  WITH_SQLITE3=yes      if you want SQLite-3 as the database (not recommended).
  WITH_OPENSSL=yes      Enable OpenSSL for encrypted communication.
~~~
===> SECURITY REPORT:
      This port has installed the following files which may act as network
      servers and may therefore pose a remote security risk to the system.
/usr/local/lib/libbac.so.5
 
      This port has installed the following startup scripts which may cause
      these network services to be started at boot time.
/usr/local/etc/rc.d/bacula-sd
/usr/local/etc/rc.d/bacula-dir
 
      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.
 
      For more information, and contact details about the security
      status of this software, see the following webpage:
http://www.bacula.org/
===>  Cleaning for bacula-server-5.0.3

База данных

Для работы Bacula Director ему необходима база данных для накопления и оперирования всевозможными данными о собранных резервных копиях. Такая база называется Каталог (Catalog) и храниться она в СУРБД (MySQL, Postgres). Каталогов может быть несколько, в зависимости от потребностей. Перед запуском, необходимо подготовить хотя бы один.
Cоздадим базу данных в MYSQL, например BACULA_DB, и пользователя имеющего полные права на эту базу данных.

# mysqladmin -uADMIN_USER -pADMIN_PASS create BACULA_DB
# mysql -uADMIN_USER -pADMIN_PASS -e"GRANT ALL ON BACULA_DB.* TO \
 BACULA_USER@localhost IDENTIFIED BY 'BACULA_USER_PASS'" BACULA_DB

Для заполнения базы необходимыми таблицами есть готовый скрипт находящийся /usr/local/share/bacula/make_mysql_tables. В нем по умолчанию используется база данных с именем bacula. Кто использует другое имя БД для Bacula то вам необходимо внести изменение в этот скрипт и запустить его.
# /usr/local/share/bacula/make_mysql_tables -u BACULA_USER -pBACULA_USER_PASS
Creation of Bacula MySQL tables succeeded.

Настройка

Необходимо создать директорию (а лучше взять новый диск для хранения резервных копий и еще лучше это использовать ленточный накопитель) куда будем писать резервные копии, и даем доступ на запись пользователю bacula и примонтируем (в моем случае) диск для бекапов:

# mkdir /home/bacula/backup
# chown bacula:bacula /home/bacula/backup
# mount /dev/ad6s1d /home/bacula/backup

Добавим в fstab строчку про монтирование диска (в моем случае).

# cat /etc/fstab
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/mirror/gm0s1b              none            swap    sw              0       0
/dev/mirror/gm0s1a              /               ufs     rw              1       1
/dev/mirror/gm0s1f              /home           ufs     rw              2       2
/dev/mirror/gm0s1d              /usr            ufs     rw              2       2
/dev/mirror/gm0s1e              /var            ufs     rw              2       2
/dev/ad6s1d              /home/bacula/backup    ufs     rw              2       2
/dev/acd0               /cdrom          cd9660  ro,noauto       0       0
tmpfs                   /tmp            tmpfs   rw              0       0

Заметка: лучше всего монтировать сразу к корневому каталогу, а не выстраивать лесенок, так как могут быть последствия некорректного монтирования при недоступности вашей директории.

Director (DIR)

Необходимо создать конфигурационные файлы для DIR и SD на основе шаблонов и отредактировать их в соответствии с желаемой конфигурацией.

# cd /usr/local/etc
# ll |grep bacula
-r--r--r--  1 root  wheel    949B 11 май 11:56 bacula-barcodes.samples
-rw-r-----  1 root  bacula   8,8K 11 май 11:56 bacula-dir.conf.sample
-rw-r-----  1 root  wheel    5,8K 11 май 11:56 bacula-sd.conf.sample
# cp bacula-dir.conf.sample bacula-dir.conf
# cp bacula-sd.conf.sample bacula-sd.conf

Разберем дефолтный конфигурационный файл DIR:

# cat bacula-dir.conf
 
#
# Дефолтный файл конфигурации Bacula Director 
#
# Единственное, что должно быть изменено, это добавить одну или
# несколько имен файлов или директорий в директиве Include
# набора FileSet.
#
# Для Bacula релиза 5.0.3 (04 августа 2010) - FreeBSD 8.2-RELEASE
#
# Вы также можете изменить адрес электронной почты по умолчанию
# от root до вашего адреса. См. директивы "mail" и "operator"
# в ресурсах сообщения.
#
 
Director {                            # Определим себя
  Name = thor.kmps.local-dir          # Имя
  DIRport = 9101                      # Порт который слушает DIR
  QueryFile = "/usr/local/share/bacula/query.sql"
  WorkingDirectory = "/var/db/bacula" # Рабочий каталог
  PidDirectory = "/var/run"
  Maximum Concurrent Jobs = 1  # Максимальное количество
                               # параллельных заданий. Не рекомендуется
                               # одновременно записывать
                               # несколько заданий в один пул.
  Password = "SECRET"          # Пароль для анонимной консоли (фулл контрол)
  Messages = Daemon            # Набор настроек для отправки сообщений
}
 
JobDefs {                     # Дефолтное задание
  Name = "DefaultJob"         # Имя задания
  Type = Backup               # Тип (backup, restore и т.д.)
  Level = Incremental         # Уровень бэкапа (Full, Incremental, Differential и тп)
  Client = thor.kmps.local-fd # Имя клиента
  FileSet = "Full Set"        # Набора файлов для сохранения.
  Schedule = "WeeklyCycle"    # Расписание
  Storage = File              # Файловое хранилище
  Messages = Standard         # Поведение уведомлений
  Pool = File                 # Пул, куда будем писать бэкапы
  Priority = 10               # Приоритет. Давая заданиям приоритеты
                              # от 1 (max) до 10 (min), можно регулировать
                              # последовательность выполнения.
  Write Bootstrap = "/var/db/bacula/%c.bsr" # Файл хранит информацию откуда извлекать
                                            # данные при восстановлении
}
# Определим основные ночные сохранения заданий резервного копирования
# По умолчанию, работа резервного копирование будет на диске в /tmp
Job {
  Name = "BackupClient1"
  JobDefs = "DefaultJob"
}
 
#Job {
#  Name = "BackupClient2"
#  Client = thor.kmps.local2-fd
#  JobDefs = "DefaultJob"
#}
 
# Резервное копирование каталога базы данных (после ночных сохранений)
Job {
  Name = "BackupCatalog"
  JobDefs = "DefaultJob"
  Level = Full
  FileSet="Catalog"
  Schedule = "WeeklyCycleAfterBackup"
  # Это создает копию ASCII из каталога
  # Аргументы make_catalog_backup.pl являются:
  #  make_catalog_backup.pl <catalog-name>
  RunBeforeJob = "/usr/local/share/bacula/make_catalog_backup.pl MyCatalog"
  # Это удаляет копию каталога
  RunAfterJob  = "/usr/local/share/bacula/delete_catalog_backup"
  Write Bootstrap = "/var/db/bacula/%n.bsr"
  Priority = 11                   # после основного резервного копирования
}
#
# Стандартный шаблон восстановления, который может изменен консольной программой
# Только одна такая работа необходима для всех Работа/Клиентов/Хранилищ...
# [единственное я изменил путь к Where для клиента thor.kmps.local-fd
# это куда Bacula будет складывать восстановленные из архивов файлы]
Job {
  Name = "RestoreFiles"
  Type = Restore
  Client=thor.kmps.local-fd
  FileSet="Full Set"
  Storage = File
  Pool = Default
  Messages = Standard
  #Where = /tmp/bacula-restores
  Where = /home/bacula/bacula-restores
}
 
 
# Список файлов для резервного копирования
FileSet {               # Список файлов
  Name = "Full Set"     # Имя списка файлов
  Include {
    Options {
      signature = MD5   # Тип сигнатур MD5\SHA1
    }
#
# Поместить список файлов, вы можете предшествует 'File =', по одному на строку
# или включить внешний список:
#
#    File = <file-name
#
# Обратите внимание: "/" резервное копирование всего корневого раздела.
# если у вас есть другие разделы, такие как "/usr" / или "/home"
# вероятно, вы захотите, чтобы добавить их тоже.
#
# По умолчанию это определяется, чтобы указать для Bacula бинарный
# каталог, чтобы дать набор файлов для резервного копирования на
# диск во время начального тестирования.
#
    File = /usr/local/sbin
  }
#
# Если вы сохраняете корневой каталог, следующие два исключения 
# файлов могут быть полезны
#
  Exclude {                # Исключения
    File = /var/db/bacula  ##Исключаемые директории
    File = /tmp            ##
    File = /proc           ##
    File = /tmp            ##
    File = /.journal       ###Исключаемые файлы
    File = /.fsck          ###
  }
}
 
#
# Когда делать резервные копии, полную резервную копию в первое
# воскресенье месяца, дифференциальный (т.е. дополнительные к полной)
# каждые остальные воскресенья, так и инкрементный в другие дни.
Schedule {                                # Планировщик
  Name = "WeeklyCycle"                    # Имя планировщика
  Run = Full 1st sun at 23:05             # Запуск полного бекапа в..
  Run = Differential 2nd-5th sun at 23:05 # Запуск диф. бекапа в..
  Run = Incremental mon-sat at 23:05      # Запуск инк. бекапа в..
}
 
# Этот график для каталога. Он запускается после WeeklyCycle
Schedule {
  Name = "WeeklyCycleAfterBackup"
  Run = Full sun-sat at 23:10
}
 
# Это резервное копирование каталога Bacula [изменил из-за БД имя]
FileSet {
  Name = "Catalog"
  Include {
    Options {
      signature = MD5
    }
    #File = "/var/db/bacula/bacula.sql"
    File = "/var/db/bacula/BACULA_DB.sql"
  }
}
 
Client {
  Name = thor.kmps.local-fd        # Имя клиента
  Address = thor.kmps.local        # Адрес
  FDPort = 9102                    # Порт на котором клиент сидит
  Catalog = MyCatalog              # Каталог в MySQL
  Password = "SECRET"              # пароль для FileDaemon
  File Retention = 30 days         # 30 дней - период, на протяжении
                                   # которого в каталоге будет храниться 
                                   # инфа о файлах этого клиента
  Job Retention = 6 months         # 6 месяцев - тоже, но про задания
  AutoPrune = yes                  # Удаление истекших заданий/файлов
}
 
#
# Второй клиент (File Services) для резервного копирования
# Вы должны изменить имя, адрес и пароль, прежде чем использовать
#
#Client {
#  Name = thor.kmps.local2-fd
#  Address = localhost2
#  FDPort = 9102
#  Catalog = MyCatalog
#  Password = "SECRET"                 # пароль для FileDaemon 2
#  File Retention = 30 days            # 30 дней
#  Job Retention = 6 months            # 6 месяцев
#  AutoPrune = yes                     # Удаление истекших заданий/файлов
#}
 
 
# Определение устройства хранения файлов
Storage {
  Name = File                 # Имя. Используется в определениях job
# Не используйте здесь "localhost"
  Address = thor.kmps.local   # Здесь использовать полное имя
  SDPort = 9103               # Порт SD
  Password = "SECRET"         # Пароль к SD
  Device = FileStorage        # Устройство. Должно быть определено
                              # в настройках секции Device сервера хранения
  Media Type = File           # Файл, диск, лента
}
# Определение DDS ленточного устройство хранения данных
#Storage {
#  Name = DDS-4
#  Не используйте здесь "localhost"
#  Address = localhost             # Здесь использовать полное имя
#  SDPort = 9103                   # Порт SD
#  Password = "SECRET"             # пароль для Storage daemon
#  Device = DDS-4                  # должен быть таким же, как Device в Storage daemon
#  Media Type = DDS-4              # должен быть таким же, как MediaType в Storage daemon
#  Autochanger = yes               # включить для авточейнджера устройства
#}
 
# Определение 8мм устройства хранения ленты
#Storage {
#  Name = "8mmDrive"
#  Не используйте здесь "localhost"
#  Address = localhost
#  SDPort = 9103
#  Password = "SECRET"
#  Device = "Exabyte 8mm"
#  MediaType = "8mm"
#}
 
# Определение DVD накопителя
#Storage {
#  Name = "DVD"
#  Не используйте здесь "localhost"
#  Address = localhost
#  SDPort = 9103
#  Password = "SECRET"
#  Device = "DVD Writer"
#  MediaType = "DVD"
#}
 
# Службы общего каталога
Catalog {
  Name = MyCatalog
# Раскомментируйте следующую строку, если вы хотите использовать dbi драйвера
# dbdriver = "dbi:mysql"; dbaddress = 127.0.0.1; dbport =
  dbdriver = "dbi:mysql"; dbaddress = 127.0.0.1; dbport = 3306
  dbname = "kmps_bacula"; dbuser = "kmps_bacula"; dbpassword = "PASSWORD"
}
 
# Умеренная доставки сообщения - отправить большинство сообщений на адрес
# электронной почты и консоль
Messages {
  Name = Standard
#
# ПРИМЕЧАНИЕ! Если вы отправляете на два почтовых адреса или более 
# адресов электронной почты, необходимо будет заменить %r в поле 
# (-f части) с одиним действительным адресом электронной почты в 
# обоих mailcommand, так и operatorcommand. Что это делает, он
# устанавливает адрес электронной почты, сообщения электронной почты
# будет отображаться в поле «ОТ», который является по умолчанию 
# такое же письмо, как они его передали. Однако если вы отправляете
# сообщение на более чем один адрес, то вам придется вручную,
# установить адреса на один адрес. Например, «no-reply@mydomain.com»,
# лучше так, что стремится сказать (большинству) людей, которые
# его получат с автоматизированного источника рассылки сообщений.
 
  mailcommand = "/usr/local/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" /
-s \"Bacula: %t %e of %c %l\" %r"
  operatorcommand = "/usr/local/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" /
-s \"Bacula: Intervention needed for %j\" %r"
  mail = root@localhost = all, !skipped
  operator = root@localhost = mount
  console = all, !skipped, !saved
#
# ВНИМАНИЕ! Переменная указанная ниже создаст файл, который вам
# нужно будет ротировать newsyslog'ом Однако, он также будет
# держать все ваши сообщения, если они просматриваются
# с консоли.
  append = "/var/db/bacula/log" = all, !skipped
  catalog = all
}
 
#
# Доставка сообщений для демона сообщений (не работы).
Messages {
  Name = Daemon
  mailcommand = "/usr/local/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" /
-s \"Bacula daemon message\" %r"
  mail = root@localhost = all, !skipped
  console = all, !skipped, !saved
  append = "/var/db/bacula/log" = all, !skipped
}
 
# Определение пула по умолчанию
# Pool - отдельное описание для каждого набора томов (лент, DVD, файлов)
# используется при описании задания для указания пула из которого 
# должен быть взят том. В каждый пул может входить несколько томов.
 
Pool {                         # Пул
  Name = Default               # Имя пула
  Pool Type = Backup           # Тип пула
  Recycle = yes                # Bacula может автоматически рециркулировать тома (Volumes)
  AutoPrune = yes              # Удалять из каталога записи о файлах и
                               # заданиях, срок хранения которых истёк в
                               # соответствии с Volume Retention, 
                               # при поиске доступного на запись тома.
  Volume Retention = 365 days  # Через один год
}
 
# Определения пула файлов
Pool {                         # Пул
  Name = File                  # Имя пула
  Pool Type = Backup           # Тип пула
  Recycle = yes                # Bacula может автоматически рециркулировать тома (Volumes)
  AutoPrune = yes              # Удаление истекших томов (Volumes)
  Volume Retention = 365 days  # через один год
  Maximum Volume Bytes = 50G   # Ограничение размера тома
  Maximum Volumes = 100        # Ограничить количество томов в пуле
}
 
# Определения пула Scratch
# Scratch зарезервировано для пула запасных том - при необходимости
# система самостоятельно переводит том из него в требуемый пул
Pool {
  Name = Scratch
  Pool Type = Backup
}
 
#
# Ограниченная консоль, используемая в трей мониторе для получения
# статуса директора DIR
#
Console {
  Name = thor.kmps.local-mon
  Password = "SECRET"
  CommandACL = status, .status
}
 
# Свои конфигурационные файлы
#@/usr/local/etc/client_schedule.conf
@/usr/local/etc/client_thor.conf
@/usr/local/etc/client_srv1.conf
@/usr/local/etc/client_srv2.conf

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

Последовательность действий

Что бы эффективно управлять системой резервного копирования, нужно как следует подумать и попрактиковаться, пока не придет понимание как эта система работает. В конфигурационном файле вы должны описать к примеру работу для одного клиента несколькими переменными такими как Job, Storage, Pool, Client, FileSet, Schedule. Каждой переменной присваивается понятное имя и далее в Job указываются необходимые имена переменных чтобы это было законченной задачей и могло работать согласно вашим указаниям. Рабочий клиент состоит из 6ти элементов:

  • Job (Работа) - это объект которому присваивают понятное имя и это совокупность вещей и указаний как, кого, что и куда будем резервировать. По его имени эту задачу можно определять, исполнять и вызывать из консоли.
  • Client (Клиент) - здесь указывается имя клиента для этой работы, сам клиент и его имя определяется отдельно.
  • FileSet (Набор файлов) - указывается набор файлов\директорий и их исключений для этой работы, сам набор файлов и его имя определяется отдельно.
  • Schedule (Планировщик) - планировщик для этой работы, в нем описываем периодичность работы и перераспределение ресурсов это когда делать полное копирование когда дифференциальное и тд. Сам планировщик и его имя определяется отдельно и вы можете для удобства завести отдельный конфиг.
  • Storage (Хранилище) - Определение устройства хранения файлов для этой работы. В этом хранилище есть секция Device (см по имени) в котором есть указание, где будем хранить резервные копии.
  • Pool (Пул) - определяем для работы нужный нам Пул это отдельное описание для каждого набора томов (лент, DVD, файлов)

Примечание: Все переменные вы можете использовать в различных комбинациях указав нужное имя в нужной работе к примеру Schedule с именем Weekly_1st можете использовать в разных работах которым необходимо одинаковое время и периодичность работ.

Свои конфигурационные файлы

Создадим дополнительные конфигурационный файлы для трех серверов и включим их в bacula-dir.conf.
Клиент THOR

# cat client_thor.conf
# Клиент Thor
# Создаем задание thor_backup-job и указываем ресурсы.
Job {
  Name = "thor_backup-job"          # Имя задания
  Type = Backup                     # Тип (backup, restore и т.д.)
  Level = Full                      # Уровень бэкапа
  Client = thor-fd                  # Имя клиента
  FileSet = "thor-fileset"          # Набора файлов для сохранения.
  Schedule = "Month-1hrs-sun"       # Расписание
  Storage = backup-disk1            # Файловое хранилище
  Messages = Daemon                 # Поведение уведомлений
  Pool = thor-pool                  # Пул, куда будем писать бэкапы
  Priority = 10                     # Приоритет. Давая заданиям приоритеты
                                    # от 1 до 10, можно регулировать
                                    # последовательность выполнения.
  Write Bootstrap = "/var/db/bacula/thor_backup-job.bsr"
}
 
# Определяем список резервируемых файлов
FileSet {
  Name = "thor-fileset"     # Имя списка
  Include {
    Options {
      signature = MD5
    }
    File = /etc             # Указываем каталоги, который будем бэкапить
    File = /home/Raven2000
  }
  Exclude {                 # Исключим пару каталогов
    File = /home/Raven2000/www/tmp
    File = /home/Raven2000/www/log
  }
}
 
# Pool - описание набора  устройств хранение
# В каждый пул будет входить несколько томов. Регулировать, в какой конкретно
# том бакула будет писать задание нельзя. Я хотел, чтобы каждое задание
# у меня писалось в отдельный файл, поэтому на каждый backup job у меня
# будет отдельный пул.
Pool {
  Name = thor-pool             # Имя пула
  Pool Type = Backup           # Тип пула
  Recycle = yes                # Автоматически менять тома.
  AutoPrune = yes              # Автоматическое удаление из БД заданий с
                               # истекшим сроком годности.
  Volume Retention = 365 days  # Срок, по истечении которого тома будут
                               # удаляться из пула.
  Maximum Volume Bytes = 50G   # Ограничение размера тома
  Maximum Volumes = 100        # Ограничить количество томов в пуле
  Label Format = "thor-"       # Шаблон для создания имени тома при
                               # автоматическом создании метки тома
                               # требует указания Label Media в 
                               # настройках сервера хранения.
  Recycle Oldest Volume = yes  # Удаляем старые копии при нехватке места для новых
}
 
# Определения клиентов
Client {
  Name = thor-fd              # Имя клиента
  Address = thor.kmps.local   # адрес
  FDPort = 9102               # Порт, на котором клиент нас ждет
  Catalog = "MyCatalog"       # Каталог в MySQL
  Password = "SECRET"         # Пароль к клиенту
  File Retention = 30 days    # Период, на протяжении которого в каталоге
                              # будет храниться инфа о файлах этого клиента
  Job Retention = 3 months    # То же, только о заданиях этого клиента
  AutoPrune = yes             # Удалять из каталога
                              # данные о файлах и заданиях, срок хранения
                              # которых истек.
}
 
# Определения файловых хранилищ.
Storage {
  Name = backup-disk1       # Имя хранилища будет использоваться в
                            # определениях job
  Address = thor.kmps.local # Адрес сервера хранения. Настоятельно не
                            # рекомендуется использовать localhost
  SDPort = 9103             # Порт, где file storage нас ждет
  Password = "SECRET"       # Пароль к нему
  Device = backup-disk1     # Устройство. Должно быть определено
                            # в настройках секции Device сервера хранения
  Media Type = File         # Файл, диск, лента и т.д.
}
 
# Планировщик
Schedule {
  Name = "Month-1hrs-sun"
  Run = Full 1st sun at 1:00
  Run = Differential 2nd-5th sun at 1:00
  Run = Incremental mon-sat at 1:00
}

Клиент SRV1

# cat client_srv1.conf
# Клиент SRV1
# Создаем задание srv1_backup-job и указываем ресурсы.
Job {
  Name = "srv1_backup-job"
  Type = Backup
  Level = Full
  Client = srv1-fd
  FileSet = "srv1-fileset"
  Schedule = "Month-1hrs-sun-srv1"
  Storage = File-SRV1
  Messages = Daemon
  Pool = srv1-pool
  Priority = 10
  Write Bootstrap = "/var/db/bacula/srv1_backup-job.bsr"
}
 
FileSet {
  Name = "srv1-fileset"
  Enable VSS = YES      # Использовать Volume Shadow Copy Service (VSS) для клиента Win32
                        # VSS позволяет Bacula копировать открытых файлы
  Include {
    Options {
      compression = GZIP  # Сжатие производится на стороне клиента пофайлово в один поток
      signature = MD5     # Тип сигнатур MD5\SHA1
      portable = no       # переносимый формат сохраняет не все атрибуты NTFS
      noatime = yes       # Позволяет читать файлы без изменения времён atime и ctime
      checkfilechanges = yes # Выдаётся предупреждение, если размер или время
                             # модификации файла изменяется при резервном копировании
      Ignore Case = yes   # Игнор-ть регистр букв при сопост-и шаблонов и рег-х выражений
      wildfile = "*.avi"  # Шаблон
      wildfile = "*.wmv"  # Шаблон
      wildfile = "*.mp3"  # Шаблон
      wildfile = "pagefile.sys"  # Шаблон
      wildfile = "hiberfil.sys"  # Шаблон
      wilddir = "System Volume Information"  # Шаблон
      wilddir = "TEMP"  # Шаблон
      exclude = yes # Подошедшие под шаблоны файлы исключаются из списка
    }
    File = "D:/Shared_buch"      # Что резервируем
    File = "E:/Backup/Windows"   # Что резервируем
  }
}
 
Pool {
  Name = srv1-pool
  Pool Type = Backup
  Recycle = yes
  AutoPrune = yes
  Volume Retention = 365 days
  Maximum Volume Bytes = 50G
  Maximum Volumes = 100
  Recycle Oldest Volume = yes  # Удаляем старые копии при нехватке места для новых
  Label Format = "srv1-"       # Шаблон для создания имени тома при
                               # автоматическом создании метки тома
                               # требует указания Label Media в 
                               # настройках сервера хранения.
}
 
Client {
  Name = srv1-fd
  Address = srv1.kmps.local
  FDPort = 9102
  Catalog = MyCatalog
  Password = "QbTQzNv/823/spZGTu4buOxFuKT/tiBfg+ZlESr3R1lU"
  File Retention = 30 days
  Job Retention = 6 months
  AutoPrune = yes
}
 
Storage {
  Name = File-SRV1
  Address = thor.kmps.local
  SDPort = 9103
  Password = "SECRET"
  Device = FileStorage-srv1
  Media Type = File
}
 
Schedule {
  Name = "Month-1hrs-sun-srv1"
  Run = Full 1st sun at 3:00
  Run = Differential 2nd-5th sun at 3:00
  Run = Incremental mon-sat at 3:00
}

Клиент SRV2

# cat client_srv2.conf
# Клиент SRV2
# Создаем задание srv2_backup-job и указываем ресурсы.
Job {
  Name = "srv2_backup-job"
  Type = Backup
  Level = Full
  Client = srv2-fd
  FileSet = "srv2-fileset"
  Schedule = "Month-1hrs-sun"
  Storage = backup-disk1
  Messages = Daemon
  Pool = srv2-pool
  Priority = 10
  Write Bootstrap = "/var/db/bacula/srv2_backup-job.bsr"
}
 
FileSet {
  Name = "srv2-fileset"
  Enable VSS = YES
  Include {
    Options {
      compression = GZIP
      signature = MD5
      portable=no
      noatime = yes
      checkfilechanges = yes
      Ignore Case = yes
      wildfile = "*.avi"
      wildfile = "*.wmv"
      wildfile = "*.mp3"
      wildfile = "pagefile.sys"
      wildfile = "hiberfil.sys"
      wilddir = "System Volume Information"
      wilddir = "TEMP"
      exclude = yes
    }
    File = "D:/1SBase"
    File = "E:/Backup/Windows"
  }
}
 
Pool {
  Name = srv2-pool
  Pool Type = Backup
  Recycle = yes
  AutoPrune = yes
  Volume Retention = 365 days
  Maximum Volume Bytes = 50G
  Maximum Volumes = 100
  Recycle Oldest Volume = yes  # Удаляем старые копии при нехватке места для новых
  Label Format = "srv2-"       # Шаблон для создания имени тома при
                               # автоматическом создании метки тома
                               # требует указания Label Media в 
                               # настройках сервера хранения.
}
 
Client {
  Name = srv2-fd
  Address = srv2.kmps.local
  FDPort = 9102
  Catalog = MyCatalog
  Password = "MkfdcfGqds5qFoSL/W2uBG0DqIvY5bbVDWq/ZuHN39Ct"
  File Retention = 30 days
  Job Retention = 6 months
  AutoPrune = yes
}
 
Storage {
  Name = File-SRV2
  Address = thor.kmps.local
  SDPort = 9103
  Password = "SECRET"
  Device = FileStorage-srv2
  Media Type = File
}
 
Schedule {
  Name = "Month-1hrs-sun-srv2"
  Run = Full 1st sun at 6:00
  Run = Differential 2nd-5th sun at 6:00
  Run = Incremental mon-sat at 6:00
}


Заметка: привыкайте делать включения в основной конфигурационный файл так будет аккуратней и проще в работе и эксплуатации.
Включим ваши конфиги в конец файла bacula-dir.conf

# cat bacula-dir.conf |grep client
#@/usr/local/etc/client_schedule.conf
@/usr/local/etc/client_thor.conf
@/usr/local/etc/client_srv1.conf
@/usr/local/etc/client_srv2.conf

Протестируем конфигурационный файл

# bacula-dir -t -d /usr/local/etc/bacula-dir.conf
# bacula-dir -t -d /usr/local/etc/client_thor.conf
# bacula-dir -t -d /usr/local/etc/client_srv1.conf
# bacula-dir -t -d /usr/local/etc/client_srv2.conf

Если шибок не выдало значит все в порядке.

Storage Daemon (SD)

# vi bacula-sd.conf
#
# Дефолтный файл конфигурации Bacula Storage Daemon
#
# Для Bacula релиза 5.0.3 (04 августа 2010) — FreeBSD 8.2-RELEASE
#
# Может потребоваться изменить имя вашего накопителя в директиве 
# «Archive Device» в устройство ресурсов. Если изменить имя и/или
# «Тип носителя» в ресурсе устройства, убедитесь, что bacula-dir.conf
# имеет соответствующие изменения.
#
 
Storage {                             # Определим себя
  Name = thor.kmps.local-sd           # Имя
  SDPort = 9103                       # Порт, где ждать директора
  WorkingDirectory = "/var/db/bacula" 
  Pid Directory = "/var/run"          # Собственно PID
  Maximum Concurrent Jobs = 20        # Дополнительные ограничения
}
 
#
# Список директоров, которым разрешается связаться с Демоном хранения (SD)
#
Director {
  Name = thor.kmps.local-dir       # Имя директора
  Password = "SECRET"              # Пароль
}
 
#
# Ограниченный директор, используемые в трей мониторе
# для получения статуса демона хранения
#
Director {
  Name = thor.kmps.local-mon       # Имя директора
  Password = "SECRET"              # Пароль
  Monitor = yes
}
 
#
# Примечание, список дополнительных шаблонов устройств смотрите в 
# каталоге <bacula-source>/examples/devices
# Или перейдите по следующей ссылке:
#  _http://bacula.svn.sourceforge.net/viewvc/bacula/trunk/bacula/examples/devices/
#
 
#
# Устройства записи, поддерживаемые данным Демоном хранения (SD)
# это жесткий диск, ленточный накопитель, dvd.
# Для подключения, устройства к директору в bacula-dir.conf
# должны иметь то же Name и MediaType.
#
 
Device {
  Name = FileStorage             # Имя 
  Media Type = File              # Укажем, что будем бекапить 
  Archive Device = /tmp          # Каталог для бекапов
  LabelMedia = yes;              # разрешить Bacula размечать тома
  Random Access = Yes;
  AutomaticMount = yes;          # когда устройство открыто, читать его
  RemovableMedia = no;
  AlwaysOpen = no;
}
#
# Авточенджер с двумя дисками
#
#Autochanger {
#  Name = Autochanger
#  Device = Drive-1
#  Device = Drive-2
#  Changer Command = "/usr/local/share/bacula/mtx-changer %c %o %S %a %d"
#  Changer Device = /dev/sg0
#}
 
#Device {
#  Name = Drive-1                      #
#  Drive Index = 0
#  Media Type = DLT-8000
#  Archive Device = /dev/nst0
#  AutomaticMount = yes;               # когда устройство открыто, читать его
#  AlwaysOpen = yes;
#  RemovableMedia = yes;
#  RandomAccess = no;
#  AutoChanger = yes
#  #
#  # Включить команду Alert, только если у вас есть MTX пакет загрузки
#  # Обратите внимание, по-видимому, в некоторых системах, tapeinfo
#  # сбрасывает контроллер SCSI. Tаким образом если вы включаете это,
#  # убедитесь, что он не сбрасывает ваш контроллер SCSI. У меня
#  # никогда не было каких-либо проблем, и smartctl, по-видимому,
#  # не вызывают таких проблем.
#  #
# Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
# Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo
# Alert Command = "sh -c 'smartctl -H -l error %c'"
#}
 
#Device {
#  Name = Drive-2                      #
#  Drive Index = 1
#  Media Type = DLT-8000
#  Archive Device = /dev/nst1
#  AutomaticMount = yes;               # когда устройство открыто, читать его
#  AlwaysOpen = yes;
#  RemovableMedia = yes;
#  RandomAccess = no;
#  AutoChanger = yes
#  # Включить команду оповещения, только если у вас есть MTX пакет загрузки
#  Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
#  Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo
#  Alert Command = "sh -c 'smartctl -H -l error %c'"
#}
#
# Linux или Solaris LTO-2 ленточный накопитель
#
#Device {
#  Name = LTO-2
#  Media Type = LTO-2
#  Archive Device = /dev/nrsa0
#  AutomaticMount = yes;               # когда устройство открыто, читать его
#  AlwaysOpen = yes;
#  RemovableMedia = yes;
#  RandomAccess = no;
#  Maximum File Size = 3GB
## Changer Command = "/usr/local/share/bacula/mtx-changer %c %o %S %a %d"
## Changer Device = /dev/sg0
## AutoChanger = yes
#  # Включить команду оповещения, только если у вас есть MTX пакет загрузки
## Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
## Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo
## Alert Command = "sh -c 'smartctl -H -l error %c'"
#}
 
#
# Linux или Solaris LTO-3 ленточный накопитель
#
#Device {
#  Name = LTO-3
#  Media Type = LTO-3
#  Archive Device = /dev/nrsa0
#  AutomaticMount = yes;               # когда устройство открыто, читать его
#  AlwaysOpen = yes;
#  RemovableMedia = yes;
#  RandomAccess = no;
#  Maximum File Size = 4GB
## Changer Command = "/usr/local/share/bacula/mtx-changer %c %o %S %a %d"
## Changer Device = /dev/sg0
## AutoChanger = yes
#  # Включить команду оповещения, только если у вас есть MTX пакет загрузки
## Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
## Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo
## Alert Command = "sh -c 'smartctl -H -l error %c'"
#}
#
# Linux или Solaris LTO-4 ленточный накопитель
#
#Device {
#  Name = LTO-4
#  Media Type = LTO-4
#  Archive Device = /dev/nrsa0
#  AutomaticMount = yes;               # когда устройство открыто, читать его
#  AlwaysOpen = yes;
#  RemovableMedia = yes;
#  RandomAccess = no;
#  Maximum File Size = 5GB
## Changer Command = "/usr/local/share/bacula/mtx-changer %c %o %S %a %d"
## Changer Device = /dev/sg0
## AutoChanger = yes
#  # Включить команду оповещения, только если у вас есть MTX пакет загрузки
## Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
## Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo
## Alert Command = "sh -c 'smartctl -H -l error %c'"
#}
#
# FreeBSD ленточный накопитель
#
#Device {
#  Name = DDS-4
#  Description = "DDS-4 for FreeBSD"
#  Media Type = DDS-4
#  Archive Device = /dev/nsa1
#  AutomaticMount = yes;               # когда устройство открыто, читать его
#  AlwaysOpen = yes
#  Offline On Unmount = no
#  Hardware End of Medium = no
#  BSF at EOM = yes
#  Backward Space Record = no
#  Fast Forward Space File = no
#  TWO EOF = yes
#  IIf you have smartctl, enable this, it has more info than tapeinfo
#  Alert Command = "sh -c 'smartctl -H -l error %c'"
#}
#
# Передать все сообщения директора, mount сообщения 
# также отправляются на адрес электронной почты
#
Messages {                            # Будем отправлять все сообщения DIR
  Name = Standard
  director = thor.kmps.local-dir = all
}

Теперь соберем свой конфигурационный файл:

# cat bacula-sd.conf | grep -v ^#
 
Storage {
  Name = thor.kmps.local-sd
  SDPort = 9103
  WorkingDirectory = "/var/db/bacula"
  Pid Directory = "/var/run"
  Maximum Concurrent Jobs = 20
}
 
Director {
  Name = thor.kmps.local-dir
  Password = "SECRET"
}
 
Director {
  Name = thor.kmps.local-mon
  Password = "SECRET"
  Monitor = yes
}
 
Device {
  Name = FileStorage
  Media Type = File
  Archive Device = /home/bacula/backup
  #Archive Device = /tmp
  LabelMedia = yes;
  Random Access = Yes;
  AutomaticMount = yes;
  RemovableMedia = no;
  AlwaysOpen = no;
}
 
Device {
 Name = backup-disk1
 Media Type = File
 Archive Device = /home/bacula/backup
 LabelMedia = yes;
 Random Access = Yes;
 AutomaticMount = yes;
 RemovableMedia = no;
 AlwaysOpen = no;
}
 
Device {
 Name = FileStorage-srv1
 Media Type = File
 Archive Device = /home/bacula/SRV1
 LabelMedia = yes;
 Random Access = Yes;
 AutomaticMount = yes;
 RemovableMedia = no;
 AlwaysOpen = no;
}
 
Device {
 Name = FileStorage-srv2
 Media Type = File
 Archive Device = /home/bacula/SRV2
 LabelMedia = yes;
 Random Access = Yes;
 AutomaticMount = yes;
 RemovableMedia = no;
 AlwaysOpen = no;
}
 
Messages {
  Name = Standard
  director = thor.kmps.local-dir = all
}

Протестируем

# bacula-sd -t /usr/local/etc/bacula-sd.conf

Ничего не выдало значит все в порядке.

Console

Настроим консоль

# cd /usr/local/etc
# cp bconsole.conf.sample bconsole.conf
# cat bconsole.conf
#
# Bacula User Agent (or Console) Configuration File
#
 
Director {
  Name = thor.kmps.local-dir
  DIRport = 9101
  address = localhost
  Password = "SECRET"
}

Посмотрим, что она может и отработаем несколько операций:

# /usr/local/sbin/bconsole
Connecting to Director localhost:9101
1000 OK: thor.kmps.local-dir Version: 5.0.3 (04 August 2010)
Enter a period to cancel a command.
 
*help
  Command       Description
  =======       ===========
  add           Добавить новый том к пулу в каталоге; для 
                форматирования тома используйте команду label
  autodisplay   Выдаётся извещение о наличии новых сообщений от директора
  automount     Лента монтируется автоматически после форматирования
                командой label
  cancel        Отменить задание
  create        Создать запись Пула в БД из описания ресурса в файле  
  delete        Удалить из каталога информацию о задании, томе
                или пуле вместе со всеми зависимостями
  disable       Запретить автоматическое планирование работы задания
  enable        Разрешить автоматическое планирование работы задания
  estimate      Считает приблизительный объём сохраняемых данных до 
                сжатия, листинг дает полный список
  exit          Прекращение сессии Bconsole
  gui           Не интерактивный режим gui
  help          Печать справки по определенной команде
  label         Добавить новый том к пулу в БД и форматировать том;
                предварительно может потребоваться размонтировать ленту;
                если лента уже отформатирована, то требуется выполнить
                команды purge и relabel
  list          Список объектов из каталога БД
  llist         Полный или длинный список, как список команд
  messages      вывести накопившиеся сообщения от директора
  memory        Вывести текущее использование памяти DIR
  mount         Монтировать хранилище
  prune         Удалить из БД информацию о файлах, заданиях или томах с
                истёкшим сроком хранения и всё с нею связанное
  purge         Очистка записей из каталога о файлах, заданиях или томах
                с истёкшим сроком хранения и всё с нею связанное
  python        Команда управления Python
  quit          Прекращение сессии Bconsole
  query         Запрос каталога
  restore       Восстановить файлы
  relabel       Заново отформатировать старый том (должен быть в 
                состоянии Purged или Recycle)
  release       перемотать ленту (перед следующим использованием
                заново прочесть метку)
  reload        Перечитать заново конфигурационный файл bacula-dir.conf
  run           Запустить задание\работу
  status        Отчет о состоянии
  setdebug      Устанавить уровень отладки
  setip         Установить новый адрес клиента - если рзрешено
  show          Показать текущее значение ресурсов файла настройки
  sqlquery      Использование SQL для запроса каталога
  time          Показать текущее временя
  trace         Включение / выключение трассировки в файл
  unmount       Размонтирование хранилища
  umount        Размонтировать - для старых Unix парней, см. unmount =)
  update        Обновить информацию томов, пула или статистики 
  use           Использовать каталог xxx
  var           Подстановка переменных
  version       Показать версию DIR
  wait          Ждать завершения задания
 
В режиме ввода команд, введите точку что бы отменить командный режим
 
Вам сообщение.

Работа с Томами

Добавим новый том и отформатируем его (это при условии что вы не выставили в Pool, Label Format = "ИМЯ_ТОМА" при этом том автоматически форматируется и добавляется). Для этого выберем нужный SD (backup-disk1) укажем название Тома (как он будет сохраняться на HDD) и выберем нужный Пул.

# bconsole
Connecting to Director localhost:9101
1000 OK: thor.kmps.local-dir Version: 5.0.3 (04 August 2010)
Enter a period to cancel a command.
*label
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
The defined Storage resources are:
     1: File
     2: backup-disk1
     3: File-SRV1
     4: File-SRV2
Select Storage resource (1-4): 3
Enter new Volume name: srv1_volume
Defined Pools:
     1: Default
     2: Scratch
     3: thor-pool
     4: File
     5: srv2-pool
     6: srv1-pool
Select the Pool (1-6): 6
Connecting to Storage daemon File-SRV1 at thor.kmps.local:9103 ...
Sending label command for Volume "srv1_volume" Slot 0 ...
3000 OK label. VolBytes=213 DVD=0 Volume="srv1_volume" Device="FileStorage-srv1"
 (/home/bacula/SRV1)
Catalog record for Volume "srv1_volume", Slot 0  successfully created.
Requesting to mount FileStorage-srv1 ...
3906 File device "FileStorage-srv1" (/home/bacula/SRV1) is always mounted.
You have messages.
 
*label
The defined Storage resources are:
     1: File
     2: backup-disk1
     3: File-SRV1
     4: File-SRV2
Select Storage resource (1-4): 4
Enter new Volume name: srv2_volume
Defined Pools:
     1: Default
     2: Scratch
     3: thor-pool
     4: File
     5: srv2-pool
     6: srv1-pool
Select the Pool (1-6): 5
Connecting to Storage daemon File-SRV2 at thor.kmps.local:9103 ...
Sending label command for Volume "srv2_volume" Slot 0 ...
3000 OK label. VolBytes=213 DVD=0 Volume="srv2_volume" Device="FileStorage-srv2"
 (/home/bacula/SRV2)
Catalog record for Volume "srv2_volume", Slot 0  successfully created.
Requesting to mount FileStorage-srv2 ...
3906 File device "FileStorage-srv2" (/home/bacula/SRV2) is always mounted.
 
*label
The defined Storage resources are:
     1: File
     2: backup-disk1
Select Storage resource (1-2): 2
Enter new Volume name: thor_volume
Defined Pools:
     1: Default
     2: File
     3: Scratch
     4: thor-pool
Select the Pool (1-4): 4
Connecting to Storage daemon backup-disk1 at thor.kmps.local:9103 ...
Sending label command for Volume "thor_volume" Slot 0 ...
3000 OK label. VolBytes=213 DVD=0 Volume="thor_volume" Device="backup-disk1"
 (/home/bacula/backup)
Catalog record for Volume "thor_vol", Slot 0  successfully created.
Requesting to mount backup-disk1 ...
3906 File device "backup-disk1" (/home/bacula/backup) is always mounted.

Как видим создался Том thor_volume

# ll /home/bacula/backup/
total 8450
-rw-r-----  1 bacula  bacula   8,2M 17 май 23:50 FileDefault
-rw-r-----  1 bacula  bacula   213B 18 май 14:59 thor_volume

File Daemon (FD)
UNIX клиент

Установим клиента на UNIX машине:

# cd /usr/ports/sysutils/bacula-client
# make config
 
Options for bacula-client 5.0.3
 
[ ] WXCONSOLE  Build with wxGTK based GUI console: deprecated
[ ] SFDAEMON   Build with staticly compiled file daemon
[X] NLS        Native Language Support via gettext utilities
[X] OPENSSL    Enable OpenSSL for encrypted communication
 
# make install clean
~~
################################################################################
 
NOTE:
Sample files are installed in /usr/local/etc:
bconsole.conf.sample, bacula-barcodes.sample, bacula-fd.conf.sample
 
  Please read this file:
 
        /usr/local/share/doc/bacula/ReleaseNotes
 
  as installed by docs port for the upgrade procedure.
 
Read the ReleaseNotes for further information.
 
################################################################################
===>   Running ldconfig
/sbin/ldconfig -m /usr/local/lib
===>   Registering installation for bacula-client-5.0.3
===> SECURITY REPORT:
      This port has installed the following files which may act as network
      servers and may therefore pose a remote security risk to the system.
/usr/local/lib/libbac.so.5
 
      This port has installed the following startup scripts which may cause
      these network services to be started at boot time.
/usr/local/etc/rc.d/bacula-fd
 
      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.
 
      For more information, and contact details about the security
      status of this software, see the following webpage:
http://www.bacula.org/
===>  Cleaning for bacula-client-5.0.3

Скопируем конфигурационный файл и изменим его настройки.
# cp /usr/local/etc/bacula-fd.conf.sample /usr/local/etc/bacula-fd.conf

Разберемся что внутри:

#cat/usr/local/etc/bacula-fd.conf
#
# Дефолтный файл конфигурации Bacula File Daemon
#
# Для Bacula релиза 5.0.3 (04 августа 2010) — FreeBSD 8.2-RELEASE
#
# Тут не так много, чтобы менять здесь, за исключением, возможно,
# Имени File Daemon
#
 
#
#Список директоров, которым разрешено связаться с этим File Daemon
#
 
Director {
  Name = thor.kmps.local-dir
  Password = "sIad48UBgVYD2gNAh6mRWKahMFtzjwRWNjtL8p28ma3Z"
}
 
#
# Ограничение директора, используемого в tray-monitor, 
# для получения статуса File Daemon
#
Director {
  Name = thor.kmps.local-mon
  Password = "GkSSv/HoUCX7Y7Pi5m62xRD0cnykZnzaYTinCqdhM8t3"
  Monitor = yes
}
 
#
# "Глобальные" спецификации конфигурации File daemon
#
FileDaemon {                     # Определим FD
  Name = thor.kmps.local-fd      # Имя FD
  FDport = 9102                  # Где слушать директора
  WorkingDirectory = /var/db/bacula
  Pid Directory = /var/run
  Maximum Concurrent Jobs = 20   # Максимальное кол-во заданий
}
 
# Отправить все сообщения, за исключением пропущенных файлов
# обратно Директору
Messages {
  Name = Standard
  director = thor.kmps.local-dir = all, !skipped, !restored

Теперь соберем свой конфигурационный файл:

# cat bacula-fd.conf | grep -v ^#
 
Director {
  Name = thor.kmps.local-dir
  Password = "SECRET"
}
 
Director {
  Name = thor.kmps.local-mon
  Password = "SECRET"
  Monitor = yes
}
 
FileDaemon {
  Name = thor.kmps.local-fd
  FDport = 9102
  WorkingDirectory = /var/db/bacula
  Pid Directory = /var/run
  Maximum Concurrent Jobs = 20
}
 
Messages {
  Name = Standard
  director = thor.kmps.local-dir = all, !skipped, !restored
}

Проверим на наличие ошибок и добавим в rc.conf для запуска при старте ОС.

# bacula-fd -t -d /usr/local/etc/bacula-fd.conf
# echo 'bacula_fd_enable="YES"' >> /etc/rc.conf
# /usr/local/etc/rc.d/bacula-fd start
Starting bacula_fd.
# sockstat | grep bacula
root     bacula-fd  9295  3  tcp4   *:9102                *:*
bacula   bacula-sd  97221 3  tcp4   *:9103                *:*
bacula   bacula-dir 97212 4  tcp4   *:9101                *:*

Windows клиент

Загружаем программу клиент Win32_64 и запускаем установку программы там указываем следующее.

Тип установки:
Instalation Type: Automatic (так же вы можете поставить только fd без консоли и доков.)

Указываем характеристики DIR:
DIR name: thor.kmps.local-dir
DIR Password: SECRET
DIR Adress: thor.kmps.local

В конце установки предложили сохранить файл C:\srv2-fd.conf такого содержания:

# Client (File Services) to backup
Client {
  Name = srv2-fd
  Address = srv2.kmps.local
  FDPort = 9102
  Catalog = MyCatalog
  Password = "MkfdcfGqds5qFoSL/W2uBG0DqIvY5bbVDWq/ZuHN39Ct"      # password for FileDaemon
  File Retention = 30 days            # 30 days
  Job Retention = 6 months            # six months
  AutoPrune = yes                     # Prune expired Jobs/Files
}

Вы можете эту информацию с последующим изменением пароля копировать в файл конфигурации сервера DIR, где формируется работа по этому клиенту. После корректной установки FD в Windows становиться службой и в трее висит монитор клиента, где можно посмотреть статус.

Запуск

Для автоматического запуска DIR, SD и FD сервисов при запуске сервера необходимо добавить строчки в /etc/rc.conf:

# echo 'bacula_dir_enable="YES"' >> /etc/rc.conf
# echo 'bacula_sd_enable="YES"' >> /etc/rc.conf
# echo 'bacula_fd_enable="YES"' >> /etc/rc.conf

Запуск сервисов:

# /usr/local/etc/rc.d/bacula-dir.sh start
# /usr/local/etc/rc.d/bacula-sd.sh start
# /usr/local/etc/rc.d/bacula-fd start
# ps -ax | grep bacula
 2060  ??  Is     0:00,19 /usr/local/sbin/bacula-fd -u root -g wheel -v -c /usr/local/etc/bacula-fd.conf
56766  ??  Is     0:19,37 /usr/local/sbin/bacula-sd -u bacula -g bacula -v -c /usr/local/etc/bacula-sd.conf
61339  ??  Ss     0:00,14 /usr/local/sbin/bacula-dir -u bacula -g bacula -v -c /usr/local/etc/bacula-dir.conf
64965   0  S+     0:00,00 grep bacula
 
# sockstat | grep bacula
bacula   bacula-dir 61339 5  tcp4   *:9101                *:*
bacula   bacula-dir 61339 6  dgram  -> /var/run/log
bacula   bacula-sd  56766 4  tcp4   *:9103                *:*
root     bacula-fd  2060  3  tcp4   *:9102                *:*

Сохранение данных

Автоматическое сохранение данных уже настроено и поэтому вы должны следить чтобы все работы шли без ошибок, проверять оставшееся место на HDD. Если вы выполните команду run без параметров она вам выдаст все созданные задачи и вы можете выбрать и запустить нужную. Вы можете сразу запустить нужную задачу с указанным именем задачи *run job=имя-задания.

*run
A job name must be specified.
The defined Job resources are:
     1: BackupClient1
     2: BackupCatalog
     3: RestoreFiles
     4: thor_backup-job
     5: srv1_backup-job
     6: srv2_backup-job
Select Job resource (1-6): 6
Run Backup job
JobName:  srv2_backup-job
Level:    Full
Client:   srv2-fd
FileSet:  srv2-fileset
Pool:     srv2-pool (From Job resource)
Storage:  File-SRV2 (From Job resource)
When:     2011-05-20 23:56:51
Priority: 10
OK to run? (yes/mod/no): yes
Job queued. JobId=79

Проверим выполнение задачи и объем на HDD
*status dir
thor.kmps.local-dir Version: 5.0.3 (04 August 2010) amd64-portbld-freebsd8.2 freebsd 8.2-
Daemon started 20-май-11 23:32, 5 Jobs run since started.
Heap: heap=0 smbytes=102,439 max_bytes=237,812 bufs=365 max_bufs=395
~~~~~~~~
 
Terminated Jobs:
 JobId  Level    Files      Bytes   Status   Finished        Name
====================================================================
    75  Full        831    717.5 M  OK       20-май-11 23:34 srv1_backup-job
    76              831    800.9 M  OK       20-май-11 23:39 RestoreFiles
    77                1    6.825 K  OK       20-май-11 23:44 RestoreFiles
    78                1    6.825 K  OK       20-май-11 23:48 RestoreFiles
    79  Full        109    29.67 M  OK       20-май-11 23:57 srv2_backup-job
====

Все в порядке как мы видим задача выполнена ему присвоен JobId=79 сохранено файлов 109 общим обьемом 29 Мб.

Восстановление

И так с имитируем следующую ситуацию потеря\удаления файла\директории. Восстановим из архива данный файл с помощью bconsole. Директория E:/SIT_v1.1 утеряна вся.
Управление при перемещении и маркировки файлов в этом режиме довольно необычны так, что привыкайте.

*restore
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
 
Сначала выберите один или несколько JobIds, которые содержат файлы
которые должны быть восстановлены. Вам будет предложен ряд методов
указания JobIds. Тогда вам будет разрешено выбрать, какие 
файлы из этих JobIds должны быть восстановлены.
 
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    |
+-------+--------------------+---------------------+----------+----------+-------------+
| 79    | srv2-fd            | 2011-05-20 23:56:55 | F        | 109      | 29670528    |
| 75    | srv1-fd            | 2011-05-20 23:32:37 | F        | 831      | 717551775   |
| 74    | srv1-fd            | 2011-05-20 23:30:46 | F        | 0        | 0           |
| 73    | srv2-fd            | 2011-05-20 23:29:24 | F        | 109      | 29670528    |
| 72    | srv2-fd            | 2011-05-20 23:26:51 | F        | 109      | 29670528    |
+-------+--------------------+---------------------+----------+----------+-------------+
Для выбора JobIds, у вас есть следующие варианты [дальше лучше без перевода]:
     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: 79
You have selected the following JobId: 79
 
Building directory tree for JobId(s) 79 ...  ++++++++++++++++++++++++++++++++
97 files inserted into the tree.
 
Сейчас вы работаете в режиме выбора файла, где вы добавляете (mark) и
удалять (unmark) файлы, котоfрые будут восстановлены. Нет изначально
добавленных файлов, вы можете использовать ключевое слов "all" в 
командной строке чтобы отметить всё.
Введите "done ", чтобы завершить этот режим.
 
cwd is: /
$ ls
E:/
$ cd E:/
cwd is: E:/
$ ls
SIT_v1.1/
$ mark SIT_v1.1
109 files marked.
$ done
Bootstrap records written to /var/db/bacula/thor.kmps.local-dir.restore.4.bsr
 
The job will require the following
   Volume(s)                 Storage(s)                SD Device(s)
===========================================================================
    srv2_volume               File-SRV2                 FileStorage-srv2        
Volumes marked with "*" are online.
 
109 files selected to be restored.
 
Defined Clients:
     1: srv1-fd
     2: srv2-fd
     3: thor-fd
     4: thor.kmps.local-fd
Select the Client (1-4): 2
Run Restore job
JobName:         RestoreFiles
Bootstrap:       /var/db/bacula/thor.kmps.local-dir.restore.4.bsr
Where:           /home/bacula/bacula-restores
Replace:         always
FileSet:         Full Set
Backup Client:   srv2-fd
Restore Client:  srv2-fd
Storage:         File-SRV2
When:            2011-05-21 00:01:10
Catalog:         MyCatalog
Priority:        10
Plugin Options:  *None*
OK to run? (yes/mod/no): yes
Job queued. JobId=80

Посмотрим статус директора и что он сказал на эту работу:

*status dir
thor.kmps.local-dir Version: 5.0.3 (04 August 2010) amd64-portbld-freebsd8.2 freebsd 8.2-
Daemon started 20-май-11 23:32, 6 Jobs run since started.
 Heap: heap=0 smbytes=103,909 max_bytes=240,228 bufs=366 max_bufs=395
 
~~~
 
Terminated Jobs:
 JobId  Level    Files      Bytes   Status   Finished        Name
====================================================================
~~~
    78                1    6.825 K  OK       20-май-11 23:48 RestoreFiles
    79  Full        109    29.67 M  OK       20-май-11 23:57 srv2_backup-job
    80              109    29.67 M  OK       21-май-11 00:01 RestoreFiles
====

Все в порядке данные восстановлены (JobId=80).

Проверка

Заходим на srv2.kmps.local и на диске C:\ появляется с восставленная директория.
C:\home\bacula\bacula-restores\E\SIT_v1.1
Восстановление файлов на Unix клиентах рассматривать не буду в виду аналогичной работы.

Гибридный метод

Я сторонник простых и надежных решений, а так же дублирующих систем. К примеру у меня как и у всех стоит RAID-1 на всех серверах и это хорошо. Идем дальше у меня до бакулы на серверах был отдельный раздел\слайс\жеский диск созданный специально для бекапов и туда резервные копии складывает утилита или скрипт. К примеру:

  • Windows сервера обрабатывает утилита ntbackup она сохраняет весь системный диск и складывает копии в директорию E:/Backup/Windows каждое 1й понедельник месяца.
  • Unix сервера обрабатывает утилита dump сохраняя необходимые разделы в /backup каждый 1й понедельник месяца.

Бакула дополнила существующую схема:

  • Windows сервера - копирует E:/Backup/Windows, расшаренные ресурсы и 1С.
  • Unix сервера - копирует /backup и некоторые слайсы.

Переменные

Pool

Пул это описание для набора томов. Тома это файлы, ленты и DVD. Он используется при описании задания для указания нужного тома.

  • Name - наименование пула
  • Maximum Volumes (0 - бесконечность) - ограничить количество томов в пуле
  • Pool Type - Backup остальные не реализованы, Archive, Cloned, Migration, Copy, Save
  • Storage - описывает сервер хранения, он перекрывает значение, заданное в Job и Schedule и необходимо для работы заданий миграции
  • Maximum Volume Jobs (0 - бесконечность) - по достижении указанного числа заданий, записанных на том, том переводится в состояние Used (плохо совместим с одновременной записью нескольких заданий на том)
  • Maximum Volume Files (0 - бесконечность) - по достижении указанного числа файлов, записанных на том, том переводится в состояние Used. Проверка производится только в конце задания
  • Maximum Volume Bytes (0 - бесконечность) - по достижении указанного числа байт, записанных на том, том переводится в состояние Used
  • Volume Use Duration (0 - бесконечность) - отсчитывается с момента первой записи по достижении которой том переводится в состояние Used
  • Catalog Files - заносить информацию о сохранённых файлах в каталог
  • Volume Retention - время хранения информации о заданиях и файлах на данном томе в каталоге. Отсчёт начинается с момента перехода из состояния Appendable в Full или Used. Так же не рекомендуется устанавливать меньше 2х интервалов между полным сохранением. Сами данные не стираются
  • AutoPrune - удалять из каталога записи о файлах и заданиях, срок хранения которых истёк в соответствии с Volume Retention, при поиске доступного на запись тома
  • RecyclePool - в какой пул переводить том при освобождении места по умолчанию - оставлять в текущем
  • Recycle - если bacule требуется том для записи, но нет ни одного дополняемого тома в пуле (состояние Appendable), то bacule ищет том, все задания и файлы которого удалены из каталога (состояние Purged) по истечению срока хранения или вручную, и использует его, переведя в состояние Recycled
  • Recycle Oldest Volume - если bacule требуется том для записи, но нет ни одного дополняемого тома в пуле (состояние Appendable), то она очистит самый старый том (удалит информацию из каталога в соответствии со сроками хранения Job Retention, File Retention и Volume Retention). Если на томе не осталось ничего полезного, то повторно использовать его. Не использовать, если в пуле всего 1 том
  • Recycle Current Volume - попробовать освободить смонтированный том. Не использовать, если в пуле всего 1 том
  • Purge Oldest Volume - если bacule требуется том для записи, но нет ни одного дополняемого тома в пуле (состояние Appendable), то удаляются из каталога все записи о заданиях и файлах на самом старом томе независимо от срока хранения и том повторно используется. Не рекомендуетс)
  • Cleaning Prefix - если имя тома начинается с указанной строки, то том считается чистящей лентой и запись на него не производится - для автомагазинов со штриховыми метками
  • Label Format - шаблон для создания имени тома при автоматическом создании метки тома. Требует указания Label Media в настройках сервера хранения. Имя тома может содержать буквы, цифры и '-_:.'; шаблон заключается в кавычки; шаблон может включать имена переменных - начинаются с '$', '${' или '['; переменные делятся на счётчики, переменные окружения и внутренние переменные (Year, Month, Day, Hour, Minute, Second, WeekDay, Job, Dir (имя директора), Level, Type, JobId, JobName, Storage, Client, NumVols, Pool (не рекомендуется, т.к. это может оказаться не тот пул), Catalog, MediaType); определено множество функций над переменными, но привыкать к ним не надо, т.к. в новых версиях Label Format заменена скриптом на python; если имена переменных в шаблоне не используются, то имя тома образуется из строки, к которой добавляется число томов в пуле + 1, дополненное нулями до 4 цифр ("File-" => "File-0003"); не стоит использовать NumVols, если вы предполагаете удаление томов)
  • Next Pool - имя пула назначения для задания миграции
  • Migration Time - максимальное время хранения заданий в томах для отбора при миграции типа PoolTime
  • Migration High Bytes -максимальный граница размера пула для задания миграции типа PoolOccupancy
  • Migration Low Bytes - нижняя граница размера пула для задания миграции типа PoolOccupancy
  • JobRetention - интервал хранения информации о заданиях, приоритет над описанием клиента
  • FileRetention - интервал хранения информации о файлах, приоритет над описанием клиента
  • ActionOnPurge - Truncate обнуление размера файла при очистке тома)
Консоль

Аутентификация и авторизация доступа к директору может быть 3 типов:

  • Анонимная консоль со всеми правами (пароль доступа к директору указывается в ресурсе Director настройки консоли и должен соответствовать директиве Password ресурса Director настройки директора)
  • "Именованная" консоль в настройках консоли и директора необходимо сконфигурировать ресурсы Console, в которых указывается имя консоли и пароль доступа к директору. Права доступа определяются с помощью ACL в ресурсе Console настройки директора.
  • Если имя консоли совпадает с именем клиента, то данная консоль имеет права выполнять команду SetIP, чтобы изменить значение Address соответствующего ресурса Client в настройке директора на IP консоли (необходимо при использовании динамических адресов DHCP); команда SetIP должна быть разрешена в ACL

Права доступа для именованной консоли по умолчанию - права отсутствуют, восстанавливать можно только в место по умолчанию.

  • Name - должно быть указано в настройках консоли в ресурсе Console
  • Password - должно быть указано в настройках консоли в ресурсе Console
  • JobACL - список через запятую имён ресурсов заданий, к которым имеет доступ данная консоль можно использовать ключевое слово "all"; можно использовать несколько директив.
  • ClientACL - разрешенные клиенты
  • StorageACL - разрешенные хранялища
  • ScheduleACL - разрешенные планировщики
  • PoolACL - разрешенные пулы
  • FileSetACL - разрешенные наборы файлов
  • CatalogACL - разрешенные каталоги
  • CommandACL - разрешенный список команд, к которым имеет доступ данная консоль
  • WhereACL - куда можно восстанавливать файлы можно использовать ключевое слово "all"; "/" означает восстановление на исходное место; можно использовать несколько директив
Schedule

Описание расписания запуска заданий и переопределения ресурсов Level, Pool, Storage, Messages для задания. Используется в описании задания для указания времени автоматического запуска.

  • Name - Имя расписания
  • Run - [переназначение ресурсов] [дата и время выполнения] можно описывать несколько запусков. К примеру в начале каждого часа (0-23), каждого дня недели (Monday-Sunday), каждого дня месяца (1-31), каждой недели (first-fifth), каждого месяца (january-december), и года. Ограничивающая маска может состоять из элементов или интервалов к примеру неделя начинается в понедельник. Используются шаблоны к примеру: monday-friday, daily, first (первая неделя месяца), w02 - вторая неделя года, а w01 - это соответственно первая неделя).

Остальные переменные буду добавлять по надобности.

Управление

Webacula

Воспользуемся Webacula это PHP (Zend Framework) веб-интерфейс для мониторинга и восстановление файлов.
Основные особенности программы:

  • Полная поддержка MySQL, PostgreSQL и Sqlite баз данных.
  • Запуск Задач
  • Восстановление всех файлов или выбранных файлов из Задач по JobId
  • Восстановление последней резервной копии клиента
  • Восстановление резервной копии клиента до указанного времени
  • Показывает линию времени для Заданий
  • Монтирует и размонтирует Хранилища
  • Показывает Задания, которые выполняются с ошибками (последние 7 дней)
  • Показывает состояние вашего Тома
  • Показывает запланированные задания (на 24 часа вперед)
  • Показывает все запущенные Задания
  • Показывает законченные Задачи (выполненных за последние 24 часа)
  • Поиск Задач по нескольким условиям
  • Подробная информация о Pools, Volumes, Storages и Clients
  • Лента RSS
  • Многоязычная поддержка - стандартный gettext (*.mo) файлы. В данный момент поддерживаются языки: английский, французский, немецкий, португальский, русский.
Установка

Для начала скачаем Webacula и ZendFramework к ней. (следите за новыми версиями и сами корректируйте линки для fetch). Установим последнюю версию, распакуем и дадим нужные права.

# cd /usr/local/www/
# fetch _http://sourceforge.net/projects/webacula/files/webacula/5.5.0/webacula-5.5.tar.gz
# fetch _http://framework.zend.com/releases/ZendFramework-1.11.6/ZendFramework-1.11.6-minimal.tar.gz
 
# tar zxvf webacula-5.5.tar.gz
# mv webacula-5.5 webacula
 
# tar zxvf ZendFramework-1.11.6-minimal.tar.gz
# cd ZendFramework-1.11.6-minimal/library/
# ls
Zend
# cp -R Zend/ /usr/local/www/webacula/library/Zend/
 
# cd /usr/local/www/
# chown -R www:www webacula/
 
# rm webacula-5.5.tar.gz ZendFramework-1.11.6-minimal.tar.gz

Проверка модулей

Проверим необходимые модули

# cd /usr/local/www/webacula/install/
# php-cgi  check_system_requirements.php
sqlite3: not found
X-Powered-By: PHP/5.3.6
Content-type: text/html
 
 
Webacula check System Requirements...
 
Current MySQL version = 5.0.92  OK
Current PostgreSQL version = 8.4.7      OK
 
Current PHP version = 5.3.6     OK
 
php pdo installed.      OK
php gd installed.       OK
php xml installed.      OK
php dom installed.      OK
 
php pdo_mysql installed.        OK
Warning. PHP extension pdo_pgsql not installed.
Warning. PHP extension pdo_sqlite not installed.
php-dom, php-xml installed.     OK

Кому, что не хватает тот доставит.

Конфигурационные файлы

Отредактируем конфигурационный файл webacula:

# cat /usr/local/www/webacula/application/config.ini
[general]
db.adapter = PDO_MYSQL
db.config.host = localhost
db.config.username = BACULA_USER
db.config.password = BACULA_USER_PASS
db.config.dbname = BACULA_DB
 
def.timezone = "Europe/Moscow"
locale = "ru"
 
bacula.sudo = "/usr/local/bin/sudo"
bacula.bconsole = "/usr/local/sbin/bconsole"
bacula.bconsolecmd = "-n -c /usr/local/etc/bconsole.conf"
 
[timeline]
fontsize   = 10
 
[webacula]
email.to_admin = root@localhost
email.from = webacula@localhost
 
[feed]
feed_title = "My Bacula backup server #1"
feed_desc  = "Description feed here"
 
[layout]
path = "default"

Отредактируем конфигурационный файл DB:

# vi /usr/local/www/webacula/install/db.conf
db_name="BACULA_DB"
db_user="BACULA_USER"
db_pwd="BACULA_USER_PASS"
 
# Веб аккаунт 'root', а пароль к нему укажите ниже
#
webacula_root_pwd="WEB_WEBACULA_PASSWORD"

База в MySQL

В новой версии Webacula 5.5 таблицы Bacula и Webacula совмещены те располагаются в одной БД.
Теперь нам необходимо добавить нужные таблицы и заполнить ACL:

# cd /usr/local/www/webacula/install/MySql/
# sh ./10_make_tables.sh
Creation of webacula MySQL tables succeeded.
# sh ./20_acl_make_tables.sh
Creation of Webacula ACLs MySQL tables succeeded.

Добавим права на запуск /usr/sbin/bconsole от имени www.

# visudo
WWW_USER ALL=NOPASSWD: /usr/local/sbin/bconsole

Веб-интерфейс

Я слинковал публичный html в нужную мне директорию своего веб сервера:

# cd /home/serv/www/data/
# ll
lrwxr-xr-x  1 root  serv     20B  5 авг  2010 glpi -> /usr/local/www/glpi/
lrwxr-xr-x  1 root  serv     26B  5 авг  2010 phpMyAdmin -> /usr/local/www/phpMyAdmin/
-rw-r--r--  1 serv  serv     21B  5 авг  2010 phpinfo.php
lrwxr-xr-x  1 root  serv     27B  5 авг  2010 phpldapadmin -> /usr/local/www/phpldapadmin
lrwxr-xr-x  1 root  serv     20B 17 авг  2010 sarg -> /usr/local/www/sarg/
drwxr-xr-x  3 serv  serv    512B 12 авг  2010 sqstat
lrwxr-xr-x  1 root  serv     29B 27 май 09:17 webacula -> /usr/local/www/webacula/html/

Отредактировал .htaccess

# vi /usr/local/www/webacula/html/.htaccess
SetEnv APPLICATION_ENV development
 SetEnv APPLICATION_ENV production
 
#php_flag magic_quotes_gpc off
#php_flag register_globals off
 
RewriteEngine On
 
# edit RewriteBase if necessary
RewriteBase   /webacula
 
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Запускаем:
http://webserver.local/webacula

BAT, tray-monitor

Для мониторинга и удобной работы с бакулой есть несколько утилит доступных в Unix системах:
BAT (Bacula Admin Tool) - графический интерфейс к бакуле скриншоты

Port:   bacula-bat-5.0.3
Path:   /usr/ports/sysutils/bacula-bat
Info:   The network backup solution (GUI)
Maint:  dan@langille.org
B-deps: expat-2.0.1_1 fixesproto-4.1.2 fontconfig-2.8.0,1 freetype2-2.4.4...
R-deps: expat-2.0.1_1 fixesproto-4.1.2 fontconfig-2.8.0,1 freetype2-2.4.4...
WWW:    _http://www.bacula.org/

tray-monitor - это Bacula KDE/GNOME tray monitor applet. Она вам показывает статус работы сервера.

Заметка: в опциях bacula-client еще есть WXCONSOLE Build with wxGTK based GUI console: deprecated.

Web интерфейсы - их достаточное количество и на любой вкус список.

FAQ

В) У меня не работают встроенные задания (к примеру BackupCatalog)
О) Проверьте разрешение на чтение пользователем bacula.

# ll bacula-dir.conf
-rw-r-----  1 root  bacula   9,4K 26 май 16:12 bacula-dir.conf
# ll bacula-sd.conf
-rw-r-----  1 root  bacula   6,7K 24 май 14:05 bacula-sd.conf
# ll bconsole.conf
-rw-r-----  1 root  bacula   279B 17 май 11:52 bconsole.conf

В) В самом начале статье было упоминание о утилите ntbackup где, для чего вы ее применяете.
О) До бакулы я сохранял образ системы с помощью этой утилиты с периодичностью раз в месяц и мне не хотелось ломать установленный порядок. Так же я настроил теневое копирование с переодичностью 1 раз в 4 часа для БД и расшаренных директорий и пользователи могут откатывать нужные файлы на нужную дату и время.

В) Что делать если сервер Windows\Unix сломался и не загружаться, но есть резервные копии диска C:\ (файл ntbackup) и\или дампы ФС.
О) Попробуем описать ход работы:
а1) Запускаете Recovery Console (Консоль Восстановления) с диска ОС в нем восстанавливаете загрузочные файлы и при удачном раскладе загружаетесь. Далее вытаскиваете из архива бакулы файл ntbackup для этого клиента и заливаете на него. Далее через “Мастер восстановления” утилиты ntbackup все разворачиваете обратно.
а2) Бывает что вариант а1 не работает никак не удается загрузить систему. Есть вариант с ASR, но требуется создание аварийной дискеты в ntbackup для этой машины. Восстановите файл ntbackup на любую машину с последующим копированием этого файла на сдохший сервер (возьмите любую LiveCD сбору WinPE\Linux) и далее запускаете CD c ОС выбирается восстановление ASR вставляете дискету и выполняете работу.
а3) Disast Recove Using Bacula (bacula rescue disk)

б1) Для Unix пытайтесь загрузиться или воспользуйтесь Unix LiveCD и подмонтируйте фс с последующим разворотом архивов\файлов в нужные слайсы.

Книги

Дополнительные материалы
Ваша оценка: Нет Средняя: 4.5 (28 голосов)

Весьма подробно, спасибо!

Весьма подробно, спасибо!

особенно понравилась схема

особенно понравилась схема для типичных российских предприятий =)

За статью спасибо!

За статью спасибо!

Почитал с удовольствием...

...а осадочек остался.
Много слышал хорошего про бакулу. Да вот после твоей статьи стало ясно, и тут недоделанность (или доделанность за отдельные деньги?)
Если есть вэб морда для восстановления файлов, то почему нет вэбморды для настройки самого сервера и создания задач для бэкапа? Зачем делать инструментарий на половину? чтото лепим через вэбморду, а чтото - по класике, ручками в туевой куче конфигов.
У меня вопрос, есть нормальный инструментарий олл-инклюзив для баккулы? или это мои мечты ?

В webmin -е есть возможность

В webmin -е есть возможность создавать задания, добавлять клиентов, пулы и др.

RE:Почитал с удовольствием...

Вкратце все должно идти через консоль и конфиги, а веб морда так чисто для информации, запуска готовых задач, и восстановления. Чтобы все в одном через веб то на ум приходит только Zmanda платная вещь на основе Amanda так что с бакулой пролетаем. У бакулы к сожалению нет других инструментов ну можно еще BAT глянуть и всё.

Если хочешь разобраться... Так иди и разбирайся!
[ igNix.ru | Технология жизни - технологии будущего ] [ Forum.igNix.ru ]

Zmanda

Я бы поостерегся использовать продукт с таким названием, и вам не советую.
А никакой половинчатости в веб-морде bacula нет - потому что настраивается он только через конфиги, веб-морда - для мониторинга.

аманда - бакула

Я пользуюсь амандой на паре серверов, но читал статью, и подумал - нада посмотреть воочию на бакулу.
Спасибо автору!

пробовал текстовый пароль,

пробовал текстовый пароль, правда ставил на все секции один и тот же, не помогло.

RE:пробовал текстовый пароль,

Сделайте пасс 123 и попробуйте во всех секциях и в FD|SD|DIR|CONSOLE и все должно заработать, а если нет то значит ошибка в конфигах. Вы тестировали конфиг? И просьба если не получиться то в ветки форума выложите свои конфиги.

Если хочешь разобраться... Так иди и разбирайся!
[ igNix.ru | Технология жизни - технологии будущего ] [ Forum.igNix.ru ]

Для Webacula еще лучше

Для Webacula еще лучше прописать

Messages {
  catalog = all, !skipped, !saved
}

тогда из Webacula можно будет просматривать консольные сообщения

Доброго дня! Я только

Доброго дня!
Я только установил Bacula, поэтому вопрос возможно глупый :) ногами не бейте :)
Итак, хочу сделать рез копирование, настроил Bacula согласно статьи, после запуска Job из консоли мне приходит письмо:
26-Aug 15:40 FreeBSD_IB.local-dir JobId 13: Start Backup JobId 13, Job=test_backup_job.2011-08-26_15.40.32_05
26-Aug 15:40 FreeBSD_IB.local-dir JobId 13: Using Device "File-test"
26-Aug 15:40 test-fd JobId 13: Error: /home/kern/bacula/k/bacula/src/lib/bsock.c:207
gethostbyname() for host "FreeBSD_IB.local" failed: ERR=Valid name, no data
record of resquested type.
26-Aug 15:40 test-fd JobId 13: Fatal error: Failed to connect to Storage daemon:
FreeBSD_IB.local:9103
26-Aug 15:40 FreeBSD_IB.local-dir JobId 13: Fatal error: Bad response to Storage command: wanted
2000 OK storage
, got 2902 Bad storage

Вот, команда Status клиента видит, директора тоже, а вот Storage пишет:
Device FileStorage (/usr/home/bacula/backup)is not open
Device File-test (/usr/home/bacula/backup)is not open

Куда рыть?)

RE:Доброго дня! Я только

Пожалуйста отпишитесь по своему вопросу на форуме в теме этой статьи.

Если хочешь разобраться... Так иди и разбирайся!
[ igNix.ru | Технология жизни - технологии будущего ] [ Forum.igNix.ru ]

Проблема с WEBACULA

Настроил Bacula работает нормально, но не получается Webacula завести, почему то все время выкидывает на страницу авторизации, как с этим бороться? спасибо

RE:Проблема с WEBACULA

>вопрос в форум >+лог апача

Если хочешь разобраться... Так иди и разбирайся!
[ igNix.ru | Технология жизни - технологии будущего ] [ Forum.igNix.ru ]

про инкрементальные бэкапы

Наладил работу бакулы, два пула - дисковый и ленточный, из дискового в ленточный задания копируются.
Выполняю только инкрементальные бэкапы.
Но вот беда, при наличии full в ленточном пуле и его отсутствии в дисковом не происходит создание нового full в дисковом, в случае, если у меня вариант выполнения бэкапа - инкрементальный, т.к. full существует.

Как бы так сделать, чтобы преобразование инкрементального в full происходило с проверкой только в указанном пуле?

Не совпадение параметров.

В клиенте SRV2 в секции "Job" не совпадает название параметра "Storage" с именем секции "Storage".

Компьютеризация всего мира!

У вас не совпадают имена

У вас не совпадают имена клиентов в конфиге bacula-fd.conf и в client_thor.conf.

Добрый вечер! Прочитал Вашу

Добрый вечер!

Прочитал Вашу статью, натсроил Бакулу, букапы настроил. Решил настроить Webacula.
Но столкнулся с проблемой: после выполнения всех Ваших рекомендаций, при входе на страничку вот такое сообщение.

Warning: include_once(Zend/Auth.php) [function.include-once]: failed to open stream: No such file or directory in /usr/local/www/webacula/library/Zend/Loader.php on line 146

Warning: include_once() [function.include]: Failed opening 'Zend/Auth.php' for inclusion (include_path='.:/usr/local/www/webacula/html/index.php/../library:../application/models/:../application/forms/:.:/usr/local/share/pear') in /usr/local/www/webacula/library/Zend/Loader.php on line 146

Fatal error: Uncaught exception 'Zend_Exception' with message 'File "Zend/Auth.php" does not exist or class "Zend_Auth" was not found in the file' in /usr/local/www/webacula/library/Zend/Loader.php:99 Stack trace: #0 /usr/local/www/webacula/html/index.php(45): Zend_Loader::loadClass('Zend_Auth') #1 {main} thrown in /usr/local/www/webacula/library/Zend/Loader.php on line 99

Лоооги

Всем добрый день , ооочень нужна помощь))
жила была себе бакула, работала, гоняла террабайты туда сюда, но пришел момент сменить сервак....
сервер сменили был centos 5 ? поставили centos 6 , не суть ))
так вот после переноса все заработало, все прекрасно, кроме одного mysql стал плодить логи огромнейшего размера вида mysql-bin.1234 и логи самой бакулы стали тоже безмерно расти,также таблица логов в mysql также безумных размеров, все конфиги один в один со старой системы, вообще в итоге забивает диск, промежуточными файлами бакулы и логами мускула, и вешает мускул....ну и естественно бакулу...

1. условие бинарные логи mysql нужны
2. ошибки в логе бакулы естественно нужны
почему может такое быть и где "ковырнуть" ?:)

update....в логи льются варнинги с ошибками ....например на несуществующий каталог.....странно что он постоянно это выдает, а не разово...делает это до бесконечности....

конечно можно создать каталог, но это не тру...должно работать в любых условиях...)))) в том числе если, каталог для какого-то джоба был удален и перемещен....

Последние статьи

Новые комментарии

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer