Thank you for reading this post, don't forget to subscribe!
Bacula – это средство резервного копирования с открытым исходным кодом, которое позволяет создавать резервные копии и выполнять восстановление данных в компьютерных системах. Программа Bacula очень гибкая и надежная, хотя и немного сложна в настройке. Система резервного копирования – важный компонент большинства серверных инфраструктур, так как восстановление данных часто является одним из основных этапов плана аварийного восстановления всей системы.
Данное руководство научит устанавливать и настраивать серверные компоненты Bacula на сервере CentOS 7. Здесь вы узнаете, как с помощью Bacula создавать локальные резервные копии (т. е. резервные копии хоста, на котором установлена система Bacula).
Компоненты Bacula
Bacula состоит из нескольких программных компонентов и основывается на модели «сервер-клиент». Рассмотрим компоненты Bacula подробнее.
- Сервер Bacula (также сервер бэкапа) включает в себя следующие компоненты:
Bacula Director (DIR): программное обеспечение, которое управляет операциями резервного копирования и восстановления, выполняемыми демонами File и Storage. - Storage Daemon (SD): программное обеспечение, которое выполняет операции чтения и записи на устройствах хранения, используемых для резервного копирования.
- Catalog (каталог): сервисы, которые поддерживают базу данных резервных копий файлов. Данные хранятся в БД SQL, например, в MySQL или PostgreSQL.
- Bacula Console: интерфейс командной строки, который позволяет администратору резервного копирования взаимодействовать с Bacula Director и управлять им.
Примечание: Компоненты сервера Bacula не обязательно запускать на одном сервере.
Клиент Bacula (сервер, данные которого будут копироваться) запускает File Daemon (FD). Это программное обеспечение, которое предоставляет серверу Bacula (в частности, Bacula Director) доступ к данным, которые нужно скопировать. Такие серверы называются клиентами бэкапа, или просто клиентами.
Установка MySQL и Bacula
Для хранения каталога данных Bacula использует БД SQL, такие как MySQL или PostreSQL. В этом руководстве предлагаем установить MariaDB, форк проекта MySQL. Чтобы установить Bacula и MariaDB Server, введите:
sudo yum install -y bacula-director bacula-storage bacula-console bacula-client mariadb-server
Запустите MariaDB:
sudo systemctl start mariadb
После этого нужно создать пользователя БД и таблицы. Для этого запустите сценарии:
/usr/libexec/bacula/grant_mysql_privileges
/usr/libexec/bacula/create_mysql_database -u root
/usr/libexec/bacula/make_mysql_tables -u bacula
Затем нужно запустить простой сценарий, который удалит некоторые опасные настройки по умолчанию и заблокирует доступ к системе баз данных. Запустите интерактивный сценарий:
sudo mysql_secure_installation
Программа запросит root-пароль. Поскольку вы только установили MySQL, скорее всего, такого пароля нет. Просто нажмите Enter, чтобы пропустить поле. После этого будет предложено выбрать такой пароль. Нажмите Enter и выберите root-пароль. Чтобы принять значения по умолчанию в остальных запросах, просто нажмите Enter.
Это удалит образцы баз данных и пользователей, отключит удаленный доступ root и сразу обновит настройки MySQL.
Теперь нужно выбрать пароль для пользователя БД Bacula.
Откройте консоль MySQL как root.
mysql -u root -p
Введите root-пароль MySQL.
Теперь установите пароль пользователя Bacula (вместо bacula_db_password укажите свой пароль).
1 2 |
UPDATE mysql.user SET Password=PASSWORD('bacula_db_password') WHERE User='bacula'; FLUSH PRIVILEGES; |
Закройте командную строку MySQL.
exit
Добавьте MariaDB в автозагрузку.
sudo systemctl enable mariadb
Настройка Bacula для использования MySQL
По умолчанию Bacula использует библиотеку PostgreSQL. Это нужно изменить.
Запустите команду:
sudo alternatives --config libbaccats.so
Вы увидите следующее меню. Чтобы выбрать MySQL, введите 1.
1 2 3 4 5 6 7 |
There are 3 programs which provide 'libbaccats.so'. Selection Command ----------------------------------------------- 1 /usr/lib64/libbaccats-mysql.so 2 /usr/lib64/libbaccats-sqlite3.so *+ 3 /usr/lib64/libbaccats-postgresql.so Enter to keep the current selection[+], or type selection number: 1 |
Теперь серверные и клиентские компоненты Bacula установлены. Создайте каталоги для резервного копирования и восстановления.
Каталоги для бэкапа и восстановления
Для хранения резервных копий и их восстановления Bacula использует каталоги backup и restore соответственно.
Если в системе несколько разделов, создайте каталоги в том разделе, в котором достаточно места.
Создайте новые каталоги:
sudo mkdir -p /bacula/backup /bacula/restore
Измените права доступа к каталогам. Они должны быть заблокированы для всех, кроме процесса bacula и суперпользователя.
sudo chown -R bacula:bacula /bacula
sudo chmod -R 700 /bacula
Настройка Bacula Director
Bacula состоит из нескольких компонентов, каждый из которых требует индивидуальной настройки. Все конфигурационные файлы хранятся в каталоге /etc/bacula.
Для начала настройте Bacula Director.
Откройте конфигурационный файл компонента:
sudo vi /etc/bacula/bacula-dir.conf
Настройка ресурса Director
Найдите ресурс Director и настройте его для прослушивания 127.0.0.1 (localhost). Для этого добавьте в раздел строку DirAddress.
1 2 3 4 5 6 7 8 9 10 11 |
Director { # define myself Name = bacula-dir DIRport = 9101 # where we listen for UA connections QueryFile = "/etc/bacula/query.sql" WorkingDirectory = "/var/spool/bacula" PidDirectory = "/var/run" Maximum Concurrent Jobs = 1 Password = "@@DIR_PASSWORD@@" # Console password Messages = Daemon DirAddress = 127.0.0.1 } |
Настройка локальных задач
Задачи Bacula (job) выполняют резервное копирование и восстановление данных. Ресурсы задания – это подробные данные о том или ином задании: имя клиента, файлы для бэкапа или восстановления (FileSet) и многое другое.
Попробуйте настроить задачу для резервного копирования локальной файловой системы.
Найдите ресурс Job с именем BackupClient1. Замените значение в строке Name именем BackupLocalFiles.
1 2 3 4 |
Job { Name = "BackupLocalFiles" JobDefs = "DefaultJob" } |
Затем найдите ресурс Job с именем RestoreFiles. В строке Name укажите имя RestoreLocalFiles, а в строке Where – каталог /bacula/restore.
1 2 3 4 5 6 7 8 9 10 |
Job { Name = "RestoreLocalFiles" Type = Restore Client=BackupServer-fd FileSet="Full Set" Storage = File Pool = Default Messages = Standard Where = /bacula/restore } |
Теперь RestoreLocalFiles сможет хранить файлы в каталоге /bacula/restore.
Файлы для бэкапа
FileSet определяет список файлов и каталогов, которые нужно включить или исключить из резервного копирования.
Найдите ресурс FileSet по имени Full Set (под комментарием # List of files to be backed up). Сюда нужно внести следующие изменения:
- Добавить сжатие gzip.
- В разделе Include заменить /usr/sbin в строке File на /.
- В конце раздела Exclude добавить строку File = /bacula.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
FileSet { Name = "Full Set" Include { Options { signature = MD5 compression = GZIP } File = / } Exclude { File = /var/lib/bacula File = /proc File = /tmp File = /.journal File = /.fsck File = /bacula } } |
Рассмотрим изменения в FileSet под названием Full Set. Во-первых, при создании резервного архива будет использоваться сжатие gzip. Во-вторых, в резервное копирование включается весь корневой раздел. В-третьих, из резервного копирования исключается каталог /bacula, потому что иначе Bacula будет создавать резервные копии каталога, в котором хранятся резервные копии.
Примечание: Если в / смонтированы другие разделы, которые нужно включить в FileSet, создайте в разделе Include дополнительные записи File для каждого из них.
Имейте в виду: резервные копии широких наборов FileSet (таких как Full Set) занимают больше места на диске, чем резервные копии более конкретных списков файлов. Например, если у вас есть четкий план, вам может хватить набора FileSet из пользовательских конфигурационных файлов и баз данных. Это поможет сэкономить дисковое пространство.
Настройка Storage Daemon
В конфигурационном файле Bacula Director есть ресурс Storage. Он определяет работу Storage Daemon, к которому подключается Director.
Найдите ресурс Storage. В строке Address замените значение localhost внутренним IP-адресом или FQDN.
1 2 3 4 5 6 7 8 9 |
Storage { Name = File # Do not use "localhost" here Address = backup_server_private_FQDN # N.B. Use a fully qualified name here SDPort = 9103 Password = "ITXAsuVLi1LZaSfihQ6Q6yUCYMUssdmu_" Device = FileStorage Media Type = File } |
Это важно, поскольку демон Storage Daemon будет прослушивать интерфейс частной сети, чтобы поддерживать взаимодействие с удаленными клиентами.
Настройка каталога
Ресурс Catalog определяет БД, к которой будет подключаться Director.
Найдите ресурс Catalog по имени MyCatalog (под комментарием Generic catalog service). Обновите значение dbpassword и укажите пароль пользователя MySQL bacula.
1 2 3 4 5 6 7 |
# Generic catalog service Catalog { Name = MyCatalog # Uncomment the following line if you want the dbi driver # dbdriver = "dbi:postgresql"; dbaddress = 127.0.0.1; dbport = dbname = "bacula"; dbuser = "bacula"; dbpassword = "bacula_db_password" } |
Теперь Bacula Director сможет подключиться к БД MySQL.
Настройка пула
Ресурс Pool определяет набор хранилищ, используемых Bacula для записи резервных копий. В данном случае в качестве томов хранения используются файлы. Обновите метки, чтобы локальные резервные копии были правильно помечены.
Найдите ресурс Pool по имени File (под комментарием # File Pool definition). Добавьте в него строку Label Format.
1 2 3 4 5 6 7 8 9 10 11 |
# File Pool definition Pool { Name = File Pool Type = Backup Label Format = Local- Recycle = yes # Bacula can automatically recycle Volumes AutoPrune = yes # Prune expired volumes Volume Retention = 365 days # one year Maximum Volume Bytes = 50G # Limit Volume size to something reasonable Maximum Volumes = 100 # Limit number of Volumes in Pool } |
Сохраните и закройте файл. Настройка компонента Bacula Director завершена.
Проверка настроек
Убедитесь, что в файле нет ошибок:
sudo bacula-dir -tc /etc/bacula/bacula-dir.conf
Если команда не вернула сообщений об ошибках, значит, bacula-dir.conf содержит правильные настройки.
Настройка Storage Daemon
Сервер Bacula почти готов. Осталось только настроить Storage Daemon, чтобы система Bacula понимала, где хранить файлы.
Откройте конфигурационный файл SD.
sudo vi /etc/bacula/bacula-sd.conf
Настройка ресурса Storage
Найдите в файле ресурс Storage. Он определяет, где процесс SD будет прослушивать соединения. Добавьте параметр SDAddress и укажите в нем FQDN (или внутренний IP-адрес) сервера бэкапа:
1 2 3 4 5 6 7 8 |
Storage { # definition of myself Name = BackupServer-sd SDPort = 9103 # Director's port WorkingDirectory = "/var/lib/bacula" Pid Directory = "/var/run/bacula" Maximum Concurrent Jobs = 20 SDAddress = backup_server_private_FQDN } |
Настройка устройства хранения
Затем найдите ресурс Device по имени FileStorage и обновите значение Archive Device, указав в нем путь к каталогу backup:
1 2 3 4 5 6 7 8 9 10 |
Device { Name = FileStorage Media Type = File Archive Device = /bacula/backup LabelMedia = yes; # lets Bacula label unlabeled media Random Access = Yes; AutomaticMount = yes; # when device opened, read it RemovableMedia = no; AlwaysOpen = no; } |
Сохраните и закройте файл.
Проверка настроек
Убедитесь, что в конфигурационном файле Storage Daemon нет ошибок.
sudo bacula-sd -tc /etc/bacula/bacula-sd.conf
Если команда не выдала сообщений об ошибках, значит, в файле их нет.
Пароли компонетов Bacula
Director, SD и FD используют пароли для межкомпонентной аутентификации. Эти пароли можно установить вручную, но вам эти пароли знать не нужно. Потому их можно сгенерировать с помощью команды и вставить в конфигурационные файлы Bacula автоматически.
Следующие команды сгенерируют случайный пароль для Director и вставят его в файл.
1 2 3 |
DIR_PASSWORD=`date +%s | sha256sum | base64 | head -c 33` sudo sed -i "s/@@DIR_PASSWORD@@/${DIR_PASSWORD}/" /etc/bacula/bacula-dir.conf sudo sed -i "s/@@DIR_PASSWORD@@/${DIR_PASSWORD}/" /etc/bacula/bconsole.conf |
Этот набор команд сгенерирует и установит пароль для Storage Daemon. Director подключается к SD, потому ему тоже нужен пароль.
1 2 3 |
SD_PASSWORD=`date +%s | sha256sum | base64 | head -c 33` sudo sed -i "s/@@SD_PASSWORD@@/${SD_PASSWORD}/" /etc/bacula/bacula-sd.conf sudo sed -i "s/@@SD_PASSWORD@@/${SD_PASSWORD}/" /etc/bacula/bacula-dir.conf |
Эти команды генерируют и устанавливают пароль File Daemon (клиентское программное обеспечение Bacula). Director подключается к FD, поэтому ему тоже нужен пароль.
1 2 3 |
FD_PASSWORD=`date +%s | sha256sum | base64 | head -c 33` sudo sed -i "s/@@FD_PASSWORD@@/${FD_PASSWORD}/" /etc/bacula/bacula-dir.conf sudo sed -i "s/@@FD_PASSWORD@@/${FD_PASSWORD}/" /etc/bacula/bacula-fd.conf |
Запуск компонентов Bacula
Запустите Bacula Director, Storage Daemon и локальный File Daemon с помощью команд:
sudo systemctl start bacula-dir
sudo systemctl start bacula-sd
sudo systemctl start bacula-fd
После успешного запуска компонентов добавьте их в автозагрузку.
sudo systemctl enable bacula-dir
sudo systemctl enable bacula-sd
sudo systemctl enable bacula-fd
Создание тестовой задачи
Для запуска первой задачи можно использовать Bacula Console.
Чтобы открыть консоль, введите:
sudo bconsole
Вы попадете в командную строку Bacula Console, которая обозначена символом *.
Создание метки
Введите команду label.
label
Команда запросит имя тома.
Enter new Volume name:
MyVolume
Затем выберите пул для бэкапа. В данном примере используется пул File. Чтобы выбрать его, введите 2.
Select the Pool (1-3):
2
Запуск резервного копирования вручную
Bacula теперь знает, как нужно записывать данные резервной копии. Теперь можно запустить резервное копирование, чтобы убедиться, что Bacula работает правильно:
run
Программа предложит выбрать задачу, которую нужно запустить. Чтобы выбрать BackupLocalFiles, введите 1.
Select Job resource (1-3):
1
Чтобы запустить задачу, на запрос Run Backup job нужно ответить yes.
yes
Проверка сообщений и состояния
После запуска задачи Bacula создаст сообщения, в которых хранится вывод, сгенерированный задачей.
Чтобы проверить сообщения, введите:
messages
В сообщениях должно быть указано «No prior Full backup Job record found» и что задача резервного копирования запустилась. Если при запуске задачи что-то пошло не так, в сообщениях вы найдете подсказки по устранению неполадок.
Также вы можете узнать состояние задачи. Для этого нужно запросить состояние Director. Введите в bconsole:
status director
Если задача выполняется успешно, вы увидите примерно такой вывод:
1 2 3 4 5 6 |
Running Jobs: Console connected at 09-Apr-15 12:16 JobId Level Name Status ====================================================================== 3 Full BackupLocalFiles.2015-04-09_12.31.41_06 is running ==== |
Когда задача будет завершена, в отчете о состоянии она перейдет в раздел Terminated Jobs:
1 2 3 4 |
Terminated Jobs: JobId Level Files Bytes Status Finished Name ==================================================================== 3 Full 161,124 877.5 M OK 09-Apr-15 12:34 BackupLocalFiles |
Состояние OK значит, что задача выполнена успешно.
Теперь у вас есть резервная копия Full Set, созданная с помощью Bacula.
Тестовое восстановление
Создав резервную копию, важно проверить ее восстановление. Команда restore позволяет восстанавливать скопированные файлы.
Полное восстановление
Для примера попробуйте восстановить все файлы последней резервной копии:
restore all
На экране появится меню, в котором можно выбрать резервный набор, который необходимо восстановить. Поскольку у вас есть только одна резервная копия, выберите вариант 5, «Select the most recent backup»:
Select item (1-13):
5
Поскольку в данной настройке есть всего один клиент, он будет выбран автоматически.
Затем программа предложит выбрать FileSet. Чтобы выбрать Full Set, введите 2.
Select FileSet resource (1-2):
2
Это переведет вас в виртуальное файловое дерево со всей структурой каталогов, которая находится в резервной копии. Этот интерфейс позволяет добавлять и исключать файлы, которые нужно восстановить.
Поскольку для восстановления использовалась команда restore all, все скопированные файлы уже выбраны. Файлы, которые входят в список восстанавливаемых, отмечены звездочкой *.
Чтобы откорректировать список файлов, вы можете перемещаться и просматривать содержимое с помощью команд cd и ls, а также добавлять и исключать файлы с помощью команд mark и unmark.
Чтобы получить полный список команд, введите help.
Выбрав все необходимые файлы, введите:
done
Подтвердите выбор:
OK to run? (yes/mod/no):
yes
Проверка сообщений и состояния
Как и после резервного копирования, после восстановления нужно проверить сообщения и состояние Director.
Проверьте сообщения:
messages
Вы увидите сообщение, которое подтверждает, что восстановление прошло успешно, или было прервано с состоянием Restore OK. В случае возникновения неполадок здесь вы найдете подсказки по их устранению.
Проверьте состояние Director:
status director
Чтобы закрыть Bacula Console, введите:
exit
Проверка восстановления
Теперь убедитесь, что скопированные данные успешно восстановились. Откройте каталог /bacula/restore:
sudo ls -la /bacula/restore
В нем должны быть восстановленные копии файлов. Чтобы восстановить утраченные данные, можете скопировать восстановленные файлы в соответствующие каталоги.
Удаление восстановленных файлов
Вы можете удалить восстановленные файлы, чтобы освободить место на диске. Для этого используйте следующую команду:
sudo -u root bash -c "rm -rf /bacula/restore/*"
Запустите эту команду как root, так как многие восстановленные файлы принадлежат пользователю root.