Система резервування Bacula. Встановлення і налаштовування

Bacula – пакет програм архітектури “клієнт-сервер” з відкритим початковим кодом, призначений для створення резервних копій даних, що знаходяться на комп’ютерах з різними операційними системами; для відновлення і перевірки збережених даних. Цей пакет має модульну архітектуру, легко масштабується, та може бути використаний, як для невеликої локальної мережі з кількох комп’ютерів, так і для мережі підприємства, що складається з кількох сотень комп’ютерів.

Основу Bacula складають 5 основних програм:

  1. Директор (Bacula Director), призначений для зберігання і запуску завдань резервного копіювання або відновлення, та ведення журналу всіх операцій.
  2. Зберігач (Bacula Storage Daemon), призначений для запису даних на фізичні носії: жорсткий диск, магнітну стрічку, оптичний диск тощо.
  3. Клієнт (Bacula File Daemon). Клієнтська частина, яка встановлюється на комп’ютері, що містить дані для архівації.
  4. Консоль керування. Призначена для контролю та керування операціями. Існують текстові та графічні консолі для Unix-подібних операційних систем та для ОС Windows.
  5. Монітор. Призначений для спостереження за станом Директора, Зберігача та Клієнтів.
  6. Каталог — реляційна база даних, в якій Bacula зберігає інформації про кожний архівований файл, що дає змогу швидко та ефективно відновлювати інформацію з архівів. На сьогодні Bacula підтримує бази даних MySQL, PostgreSQL та SQLite. База може бути розташована як на тому комп’ютері, що й демон керування, так і на іншому

В статті розглянутий приклад використання пакету Bacula 2.4.4 в локальній мережі, що складається з кількох робочих станцій під керуванням ОС Windows XP та серверу з ОС FreeBSD 7.0, на якому встановлена система керування базами даних MySQL.

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

На сервері з ОС FreeBSD 7.0 було зібрано з колекції портів Директор, Зберігач і Консоль керування:

cd /usr/ports/sysutils/bacula-server
make install clean

та Клієнт:

cd /usr/ports/sysutils/bacula-client
make install clean

Програми були зібрані з підтримкою MySQL та NLS (Native Language Support via gettext utilities ).

Для автоматичного завантаження Директора, Зберігача та Клієнта в конфігураційний файл системи /etc/rc.conf необхідно додати, відповідно:

bacula_dir_enable="YES"
bacula_sd_enable="YES"
bacula_fd_enable="YES"

Далі, була створена база даних під керуванням MySQL для зберігання журналів операцій. Для цього були використані сценарії командної оболонки, розташовані в директорії /usr/local/share/bacula:

  1. create_mysql_database – створення бази;
  2. grant_mysql_privileges — надання привілеїв користувачеві “bacula”;
  3. make_mysql_tables — створення таблиць бази даних.

На робочих станціях з ОС Windows XP був встановлений клієнт winbacula 2.4.4, який можна отримати на сайті http://sourceforge.net.

Інсталяційний пакет winbacula, крім власне клієнта, також дає змогу встановити текстову та графічну консоль керування.

Після встановлення системи Bacula необхідно створити конфігураційні файли для Директора, Зберігача, Клієнта і Консолі. Для полегшення цієї операції, в директорію /usr/local/etc (для ОС FreeBSD) записуються файли-зразки: bacula-dir.conf.sample, bacula-sd.conf.sample, bacula-fd.conf.sample, bconsole.conf.sample. Ці файли потрібно перейменувати, прибравши з їх назви суфікс .sample, та відредагувати відповідно до власних потреб.

Основні терміни

Перш, ніж розпочати налаштовування системи, необхідно визначити основні терміни, що використовуються в системі Bacula.

  • Завдання (Job) — операція створення архіву файлів, або відновлення інформації з архіву.
  • Том (Volume) — одиниця збереження інформації, що становить собою окремий файл, магнітну стрічку, CD, DVD. Один том може містити кілька завдань, або одне завдання може займати кілька томів.
  • Пул (Pool) — група томів.
  • Набір файлів (FileSet) — списки директорій та окремих файлів, що повинні бути архівовані. Можуть містити регулярні вирази.
  • Повідомлення (Messages) — інформація про стан компонентів Bacula і завдань. Можуть передаватися по електронній пошті, або записуватися в журнал.
  • Файл початкового завантаження (bootstrap) — спеціальний текстовий файл, що містить інформацію про архівовані файли та томи. Цей файл використовується під час операції відновлення.

Всього існують три типи архівування:

  1. Повне (Full) — усі файли.
  2. Диференційне (Differential) — файли, що були змінені після останнього вдалого повного копіювання.
  3. Інкрементне (Incremental) — файли, що були змінені після останнього вдалого копіювання будь-якого типу.

Налаштовування Директора

Конфігураційний файл Директора bacula-dir.conf, як і решта конфігураційних файлів Bacula, складається з логічних розділів, що описують окремі ресурси. Розділ кожного ресурсу узятий в фігурні дужки. Рядки з коментарями починаються з символу #. Приклад bacula-dir.conf:

Director { # Параметри Директора
Name = backup-dir # Ім'я Директора
DIRport = 9101 # Порт, який прослуховує Директор
QueryFile = "/usr/local/share/bacula/query.sql" # Файл с SQL-запитами
WorkingDirectory = "/var/db/bacula" # Робоча директорія
PidDirectory = "/var/run" # Директорія, в якій знаходиться файл з номером процесу
Maximum Concurrent Jobs = 1 # Максимальна кількість паралельних завдань
Password = "********" # Пароль для підключення консолі
Messages = Daemon # Ім'я ресурсу, що використовується для відправлення повідомлень, які не пов'язані з конкретним завданням
}
JobDefs { # Шаблон завдання
Name = "DefaultJob" # Ім'я шаблона
Type = Backup # Тип завдання
Level = Incremental # Тип архівування
Client = backup-fd # Клієнт
FileSet = "Full Set" # Набір файлів, що архівуються
Schedule = "WeeklyCycle" # Розклад виконання завдання
Storage = File # Зберігач
Messages = Standard # Ресурс повідомлень
Pool = Default # Пул з томами
Priority = 10 # Пріоритет
}
Job { # Визначення завдання
Name = "Client1" # Ім'я завдання
Client = backup-fd # Ім'я клієнта
JobDefs = "DefaultJob" # Використаний шаблон завдання
Write Bootstrap = "/var/db/bacula/Client1.bsr" # Записати файл початкового завантаження
}
FileSet { # Набір файлів
Name = "Localhost Set" # Ім'я набору файлів (для серверу)
Include { # Включити:
Options { # Опції
signature = MD5 # Тип сигнатури
compression = GZIP # Стискання файлів
}
File = /boot # Директорії, що підлягають архівуванню
File = /etc
File = /usr/local
}
Exclude { # Виключити:
File = /usr/local/man # Директорія, що не підлягає архівуванню
}
}

Для комп'ютерів з ОС Windows, де потрібно архівувати документи Microsoft Office та OpenOffice.org, секція FileSet матиме наступний вигляд:

FileSet {
Name = "WinDiscCDoc" # Ім'я набору файлів
Include {
Options { compression = GZIP # Стискання файлів
signature = MD5 # Тип сигнатури
portable = no # Не зберігати атрибути NTFS
noatime = yes # Читати файли без зміни часу звернення до файлу
IgnoreCase = yes # Ігнорувати регістр букв
wildfile = "*.doc" # Шаблон для файлів
wildfile = "*.xls"
wildfile = "*.rtf"
wildfile = "*.ppt"
wildfile = "*.csv"
wildfile = "*.odt"
wildfile = "*.ods"
wildfile = "*.odp"
wildfile = "*.odg"
wildfile = "*.odb"
}
File = "C:/" # Директорії, що підлягають архівуванню
File = "D:/"
File = "E:/"
}
}
Schedule { # Розклад виконання завдання
Name = "WeeklyCycle" # Ім'я розкладу
Run = Full 1st sun at 23:05 # Виконувати повне архівування в першу неділю кожного місяця в 23:05
Run = Differential 2nd-5th sun at 23:05 # Виконувати диференційне архівування кожної неділі, крім першої в 23:05
Run = Incremental mon-sat at 23:05 # Виконувати інкрементне архівування з понеділка по суботу в 23:05
}
Client { # Комп'ютер, файли якого будуть архівовані
Name = backup-fd # Ім'я Клієнта
Address = 192.168.1.1 # Адреса Клієнта
FDPort = 9102 # Порт, який прослуховує Клієнт
Catalog = MyCatalog # Каталог
Password = "*********" # Пароль
File Retention = 30 days # Термін зберігання в базі інформації про файли
Job Retention = 6 months # Термін зберігання в базі інформації про завдання
AutoPrune = yes # Видаляти записи, термін зберігання яких скінчився
}
Storage { # Зберігач
Name = File # Ім'я Зберігача
Address = 192.168.1.1 # Адреса Зберігача
SDPort = 9103 # Порт, який прослуховує Зберігач
Password = "*********" # Пароль
Device = FileStorage # Пристрій, визначений в bacula-sd.conf
Media Type = File # Тип носія, визначений в bacula-sd.conf
}
Catalog { # Каталог
Name = MyCatalog # Ім'я Каталога
dbname = "bacula"; # Ім'я бази даних Каталога
dbuser = "bacula"; # Користувач
dbpassword = "*****" # Пароль
}
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 # Записувати повідомлення у файл, за винятком пропущених
}

Bacula підтримує наступні типи повідомлень:

  • інформаційне (info);
  • попередження (warning);
  • помилка (error);
  • критична помилка (fatal);
  • зупинка (terminate);
  • перелік пропущених файлів (skipped);
  • перелік файлів, збережених без помилок (saved);
  • перелік файлів, які не вдалося зберегти (notsaved);
  • перелік відновлених файлів (restored);
  • потреба підключити новий том (mount);
  • помилка авторизації (security);
  • усі типи (all).

Для відправлення повідомлень Bacula використовує власний засіб — bsmtp, який може надсилати повідомлення не тільки локальним користувачам, а й на віддалений smtp-сервер.

Pool { # Пул томів
Name = Default # Ім'я пулу
Pool Type = Backup # Тип пулу
Recycle = yes # Використовувати очищені томи
AutoPrune = yes # Помічати старі томи на очищення
Volume Retention = 365 days # Термін зберігання тому
}
Console { # Консоль керування
Name = backup-mon # Ім'я консолі
Password = "********" # Пароль
CommandACL = status, .status # Команди, які можна виконувати на цій консолі
}

Для кожного комп'ютера, файли якого архівуються, потрібно створити окремий ресурс Job, Client, а найчастіше також й FileSet та Pool. Це спричиняє розростання конфігураційного файлу до досить великих розмірів, тому зручніше описувати ці ресурси в окремому файлі, який включається до bacula-dir.conf за допомогою директиви @. Наприклад, ресурси Job, Client, FileSet, Pool для комп'ютера, на якому встановлена система Bacula, можна помістити у файл localhost.conf, та включити його до bacula-dir.conf:

@/usr/local/etc/bacula.conf/localhost.conf

Налаштовування Зберігача

Зберігач приймає данні від Клієнтів і зберігає їх на фізичному носії: у файлі, на магнітній стрічці, CD, DVD. Параметри Зберігача описуються в конфігураційному файлі bacula-sd .conf:

Storage { # Параметри Зберігача
Name = backup-sd # Ім'я Зберігача
SDPort = 9103 # Порт, який прослуховує Зберігач
WorkingDirectory = "/var/db/bacula" # Робоча директорія
Pid Directory = "/var/run" # Директорія, в якій знаходиться файл з номером процесу
Maximum Concurrent Jobs = 20 # Максимальна кількість паралельних завдань
}
Director { # Директор, завдання якого виконуватиме Клієнт
Name = backup-dir # Ім'я Директора
Password = "*********" # Пароль
}
Device { # Пристрій зберігання томів
Name = FileStorage # Ім'я
Media Type = File # Тип носія (файл)
Archive Device = /var/bacula # Шлях до пристрою
LabelMedia = yes; # Надавати томам позначки
Random Access = yes; # Пристрій з позиціюванням
AutomaticMount = yes; # Автоматичне підключення тому
RemovableMedia = no; # Чи є пристрій змінним?
AlwaysOpen = no; # Блокувати добування пристрою
}
Messages { # Ресурс повідомлень
Name = Standard # Ім'я ресурсу
director = backup-dir = all # Відсилати усі повідомлення за допомогою ресурсу Standard, що описаний в bacula-dir.conf
}

Налаштовування Клієнта

Параметри Клієнта описуються в конфігураційному файлі bacula-fd.conf:

Director { # Директор, завдання якого виконуватиме Клієнт
Name = backup-dir # Ім'я Директора
Password = "**********" # Пароль
}
FileDaemon { # Параметри Клієнта
Name = backup-fd # Ім'я Клієнта
FDport = 9102 # Порт, який прослуховує Клієнт
WorkingDirectory = /var/db/bacula # Робоча директорія
Pid Directory = /var/run # Директорія, в якій знаходиться файл з номером процесу
Maximum Concurrent Jobs = 20 # Максимальна кількість паралельних завдань
}
Messages { # Ресурс повідомлень
Name = Standard # Ім'я ресурсу
director = backup-dir = all, !skipped, !restored # Відсилати усі повідомлення за допомогою ресурсу Standard, що описаний в bacula-dir.conf, крім переліку пропущених та відновлених файлів
}

Для Windows-клієнта winbacula всі необхідні параметри вводяться інтерактивно, під час встановлення. Тому його конфігураційний файл, зазвичай, редагувати не потрібно.

Налаштовування Консолі керування

Параметри Консолі керування описуються в конфігураційному файлі bconsole.conf, який складається лише з одної секції Director:

Director { # Параметри доступу до Директора
Name = wmware-dir # Ім'я Директора
DIRport = 9101 # Порт для зв'язку з Директором
address = 192.168.1.1 # Адреса Директора
Password = "********" # Пароль
}

Існують кілька Консолей керування для різних операційних систем (Windows, Linux, FreeBSD). Особливості використання цих консолей будуть розглянуті у наступній статті.

Висновки

Система резервування Bacula має достатньо гнучкі настроювання та дозволяє робити копії файлів і директорій, що розташовані на комп'ютерах локальної мережі з різними операційними системами.

Завдяки модульній структурі, Bacula може бути налаштована для використання як в невеликій локальній мережі так і в мережі масштабу підприємства.

© Інформаційні технології. Аналітика , Рідна Мережа