Краткий обзор системы bacula. Домашняя страница http://www.bacula.org.
HTML Manual, Bacula: для тех кому надо по-быстрому и в картинках, Централизованное резервное копирование данных Windows и *nix серверов средствами Bacula
Server system: Debian 7 linux debian7-gui.ova, bacula package
Target: Необходимо установить систему сетевого резервного копирования для сохранения данных клиентских рабочих станций построенных на линукс, windows, osx, bsd.
В даном примере адрес сервера(debian7-gui) - 172.18.14.23, клиента(debian7-gui или debian7) 172.18.14.21
NB!! Адреса примера в файлах конфигурации требуется заменить на реальные.
netstat -antp для проверки портов соответствующих служб.
Все службы должны подключаться к внешнему адресу хоста.
# apt-get install bacula-common bacula-console bacula-director-common bacula-fd bacula-sd mysql-server mtx mt-st
# apt-get install bacula-director-mysql
# mkdir /usr/bacula //директория где лежат файлы этого устройства(тома, volumes)
# chmod 777 /usr/bacula
Director {
# имя bacula director'а
Name = d70-dir
# какой порт слушать, у нас default
DIRport = 9101
# путь к скрипту, где лежат sql запросы для работы с Bacula Catalog(mysql database)
QueryFile = "/usr/lib/bacula/query.sql"
# здесь хранятся статус файлы демона
WorkingDirectory = "/var/lib/bacula"
# pid файл демона
PidDirectory = "/var/run/bacula"
# сколько заданий может запускаться одновременно
Maximum Concurrent Jobs = 1
# пароль для доступа в BC и управления демонами
Password = "Passw0rd"
# куда слать mail'ы, описано в ресурсе Messages
Messages = Daemon
# на какой адрес биндится процессу
DirAddress = 172.18.14.23
}
# 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"; DB Address = ""; dbuser = "bacula"; dbpassword = "Passw0rd"
}
Messages {
Name = Standard
mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r"
operatorcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: Intervention needed for %j\" %r"
mail = root = all, !skipped
operator = root = mount
console = all, !skipped, !saved
append = "/var/log/bacula/bacula.log" = all, !skipped
catalog = all
}
Messages {
# это имя прописано в ресурсе Director, помните?
Name = Daemon
# команда для отправки email
mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r"
# шлем все на майл админам(root алиас на admins@tpt.edu.ee)
# высылаются только алярмы, ероры и прочую важность
mail = root = all, !skipped
# что выводить на консоль
console = all, !skipped, !saved
# что в лог
append = "/var/lib/bacula/log" = all, !skipped
catalog = all
}
# Default pool definition
Pool {
Name = Default
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 365 days # one year
}
Pool {
# имя пула, указывается в заданиях резервного копирования
Name = File
# тип пула, емнип этой версии только такой поддерживается
Pool Type = Backup
# повторно использовать тома(сначала пишет в 1-ый, потом в 2-ой,
# потом 3-й, 3-й закончился - снова в 1-й)
Recycle = yes
# удалять записи из bacula catalog(из mysql базы бакулы)
# старше нижеуказанных значений
AutoPrune = yes
# период в течении которого информация о томах(volumes)
# хранится в базе данных, по истечению периода эта информация
# удаляется
Volume Retention = 365 days
# максимальный объем тома
Maximum Volume Bytes = 20G
# максимальное количество томов в пуле
Maximum Volumes = 100
# с каких символов начинается имя тома
LabelFormat = "Vol"
}
# Scratch pool definition
Pool {
Name = Scratch
Pool Type = Backup
}
Storage {
# имя хранилища и пароль (о соответствии имен и паролей в разных конфигах
Name = File
Password = "Passw0rd"
# fqdn имя сервера
Address = 172.18.14.23
# порт оставляем стандартный
SDPort = 9103
# имя девайса описанного в конфиге SD
Device = FileStorage
# у нас все пишется на софтовый рэйд в файлы собственного формата
Media Type = File
}
Client {
# имя
Name = d70-fd
# ip адрес клиента
Address = 172.18.14.21
# порт, который клиент слушает
FDPort = 9102
# имя mysql базы данных Bacula
Catalog = MyCatalog
# пароль для FD
Password = "Passw0rd"
# период в течении которого информация о файлах задания
# хранится в базе данных, по истечению периода эта информация
# удаляется(но не сами данные!!)
File Retention = 30 days
# тоже самое, только для самого задания
Job Retention = 6 month
# удалять записи из каталога(бд mysql) старше вышеуказанных значений
AutoPrune = yes
}
Job {
# имя задания
Name = "DefaultJob"
# тип(backup or restore)
Type = Backup
# уровень(полный, диференциальный или инкрементный)
Level = Full
# имя клиента
Client=d70-fd
# имя файл-сета(там рассказано что бекапить, а что не бекапить)
FileSet="Full set"
# имя SD ресурса
Storage = File
# имя пула(для разных клиентов разные пулы томов(volume) куда пишутся сами
# бекапы)
Pool = File
# имя ресурса messages, который будет использоваться для этого задания
Messages = Standard
# имя шедулера
Schedule = "WeeklyCycle"
# в этом файле содержится информация о том, какие файлы должны будут
# востанавливаться, на каком вольюме находятся файлы,
# где конкретно они находятся - это очень важные файлы, их нужно бэкапить
Write Bootstrap = "/var/lib/bacula/%c.bsr"
}
FileSet {
Name = "Full set"
Include {
Options {
# разработчики яро рекомендуют юзать это опцию,
# создается сигнатура забекапленных файлов в md5
signature = MD5
}
# перечисляем то, что нужно бекапить
File = /usr/backups
File = /etc
File = /root/sh
}
Exclude {
# а это бекапить нет нужo
File = /usr/backups/after_run_bacula_backup/*
File = /usr/backups/after_run_bacula_backup
}
}
# When to do the backups, full backup on first sunday of the month,
# differential (i.e. incremental since full) every other sunday,
# and incremental backups other days
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
}
# This schedule does the catalog. It starts after the WeeklyCycle
Schedule {
Name = "WeeklyCycleAfterBackup"
Run = Full sun-sat at 23:10
}
# Restricted console used by tray-monitor to get the status of the director
#
Console {
Name = d70-mon
Password = "Passw0rd"
CommandACL = status, .status
}
# nano /etc/bacula/bacula-sd.conf
Storage {
# имя для SD
Name = d70-sd
# порт стандартный
SDPort = 9103
# рабочая директория процесса(для статус файлов)
WorkingDirectory = "/var/lib/bacula"
# pid будет здесь
Pid Directory = "/var/run/bacula"
# биндится на этом ip
SDAddress = 172.18.14.23
}
Director {
# имя DD, того самого, который был описан ранее
Name = d70-dir
# пароль
Password = "Passw0rd"
}
Device {
# имя, о соответствии имен и паролей будет сказано ниже
Name = FileStorage
# тип
Media Type = File
# директория где лежат файлы этого устройства(тома, volumes)
Archive Device = /usr/bacula
# новые тома будут обзываться согласно настроек Pool'а(здесь Vol*) см.
# конфиг DD
LabelMedia = yes;
# для устройства типа File должно быть так
Random Access = Yes;
# если устройство открыто, использовать его
AutomaticMount = yes;
# думаю понятно =)
RemovableMedia = no;
# открывать только тогда, когда стартует соответствующие задание
AlwaysOpen = no;
}
# Send all messages to the Director,.
Messages {
Name = Standard
director = d70-dir = all
}
Проверить подключение служб:
root@d70:/etc/bacula# netstat -antp |grep "9101\|9103"
tcp 0 0 172.18.14.78:9101 0.0.0.0:* LISTEN 15320/bacula-dir
tcp 0 0 172.18.14.78:9103 0.0.0.0:* LISTEN 14086/bacula-sd
# sudo apt-get install bacula-console-qt //install GUI Bacula
# sudo service bacula-director restart //restart all
# sudo service bacula-sd restart
# bat //run GUI Bacula graphic control
Не забудьте про свич!
root@d70:/home/it# apt-get update
root@d70:/home/it# apt-get install bacula-client
root@d70:/home/it# nano /etc/bacula/bacula-fd.conf
#
# Default Bacula File Daemon Configuration file
#
# For Bacula release 5.2.6 (21 February 2012) -- debian 7.0
#
# There is not much to change here except perhaps the
# File daemon Name to
#
#
# List Directors who are permitted to contact this File daemon
#
Director {
Name = d70-dir
Password = "Passw0rd"
}
#
# Restricted Director, used by tray-monitor to get the
# status of the file daemon
#
#Director {
# Name = d70-mon
# Password = "Passw0rd"
# Monitor = yes
#}
#
# "Global" File daemon configuration specifications
#
FileDaemon { # this is me
Name = d702-fd
FDport = 9102 # where we listen for the director
WorkingDirectory = /var/lib/bacula
Pid Directory = /var/run/bacula
Maximum Concurrent Jobs = 20
FDAddress = 172.18.14.21
}
# Send all messages except skipped files back to Director
Messages {
Name = Standard
director = d70-dir = all, !skipped, !restored
}
root@d70:/home/it# nano /etc/bacula/bconsole.conf
#
# Bacula User Agent (or Console) Configuration File
#
Director {
Name = d70-dir
DIRport = 9101
address = 172.18.14.23
Password = "Passw0rd"
}
root@d70:/home/it# /etc/init.d/bacula-fd restart
Проверить подключение службы:
root@d70:/etc/bacula# netstat -antp |grep 9102
tcp 0 0 172.18.14.23:9102 0.0.0.0:* LISTEN 24852/bacula-fd
В терминале клиента запустите консоль bacula:root@d70:/home/it# bconsole
Connecting to Director 172.18.14.23:9101
1000 OK: d70-dir Version: 5.2.6 (21 February 2012)
Enter a period to cancel a command.
*label
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
Automatically selected Storage: File
Enter new Volume name: d70-sda1
Defined Pools:
1: Default
2: File
3: Scratch
Select the Pool (1-3): 1
Connecting to Storage daemon File at 172.18.14.23:9103 ...
Sending label command for Volume "sda1" Slot 0 ...
3000 OK label. VolBytes=185 DVD=0 Volume="sda1" Device="FileStorage" (/usr/bacula)
Catalog record for Volume "sda1", Slot 0 successfully created.
Requesting to mount FileStorage ...
3001 OK mount requested. Device="FileStorage" (/usr/bacula)
*run
A job name must be specified.
The defined Job resources are:
1: BackupClient1
2: BackupClient2
3: BackupCatalog
4: Backup_d702
Select Job resource (1-4): 4
Run Backup job
JobName: Backup_d702
Level: Incremental
Client: d702-fd
FileSet: Full Set
Pool: Default (From Job resource)
Storage: File (From Job resource)
When: 2015-03-05 15:40:49
Priority: 10
OK to run? (yes/mod/no): yes
Job queued. JobId=9
You have messages.
root@d70:/home/it# bconsole
*restore
First you select one or more JobIds that contain files
to be restored. You will be presented several methods
of specifying the JobIds. Then you will be allowed to
select which files from those JobIds are to be restored.
To select the JobIds, you have the following choices:
1: List last 20 Jobs run
2: List Jobs where a given File is saved
3: Enter list of comma separated JobIds to select
4: Enter SQL list command
5: Select the most recent backup for a client
6: Select backup for a client before a specified time
7: Enter a list of files to restore
8: Enter a list of files to restore before a specified time
9: Find the JobIds of the most recent backup for a client
10: Find the JobIds for a backup for a client before a specified time
11: Enter a list of directories to restore for found JobIds
12: Select full restore to a specified Job date
13: Cancel
Select item: (1-13): 1
+-------+---------+---------------------+----------+----------+------------+
| JobId | Client | StartTime | JobLevel | JobFiles | JobBytes |
+-------+---------+---------------------+----------+----------+------------+
| 12 | d70-fd | 2015-03-05 15:51:24 | F | 2 | 2 |
| 9 | d70-fd | 2015-03-05 15:40:52 | I | 0 | 0 |
| 8 | d70-fd | 2015-03-05 15:32:40 | F | 1999 | 14092385 |
+-------+---------+---------------------+----------+----------+------------+
To select the JobIds, you have the following choices:
1: List last 20 Jobs run
2: List Jobs where a given File is saved
3: Enter list of comma separated JobIds to select
4: Enter SQL list command
5: Select the most recent backup for a client
6: Select backup for a client before a specified time
7: Enter a list of files to restore
8: Enter a list of files to restore before a specified time
9: Find the JobIds of the most recent backup for a client
10: Find the JobIds for a backup for a client before a specified time
11: Enter a list of directories to restore for found JobIds
12: Select full restore to a specified Job date
13: Cancel
Select item: (1-13): 3
Enter JobId(s), comma separated, to restore: 12
You have selected the following JobId: 12
Building directory tree for JobId(s) 12 ...
1 files inserted into the tree.
You are now entering file selection mode where you add (mark) and
remove (unmark) files to be restored. No files are initially added, unless
you used the "all" keyword on the command line.
Enter "done" to leave this mode.
$ mark home
2 files marked.
$ lsmark
*home/
*privet/
*blablabla.ssh
$ done
Bootstrap records written to /var/lib/bacula/d70-dir.restore.1.bsr
The job will require the following
Volume(s) Storage(s) SD Device(s)
===========================================================================
D70-sda File FileStorage
Volumes marked with "*" are online.
2 files selected to be restored.
Defined Clients:
1: d70-fd
2: d702-fd
Select the Client (1-2): 2
Run Restore job
JobName: Restore_d70
Bootstrap: /var/lib/bacula/d70-dir.restore.1.bsr
Where: /nonexistant/path/to/file/archive/dir/bacula-restores
Replace: always
FileSet: Full Set
Backup Client: d70-fd
Restore Client: d70-fd
Storage: File
When: 2015-03-05 16:02:20
Catalog: MyCatalog
Priority: 10
Plugin Options: *None*
OK to run? (yes/mod/no): yes
Job queued. JobId=15
*
Показать учителю графическую bat консоль на сервере.
В ней должна видеться положительно законченная работа по сохранению данных с клиентской машины.
http://postimg.org/image/3zogf0brz/
https://www.digitalocean.com/community/tutorials/how-to-configure-remote-backups-using-bacula-in-an-ubuntu-12-04-vps
http://www.bacula.org/7.0.x-manuals/en/main/index.html
http://www.backupcentral.com/phpBB2/two-way-mirrors-of-external-mailing-lists-3/bacula-25/bat-aborting-after-directors-hostname-change-107885/
http://sourceforge.net/p/bacula/mailman/message/17312195/