Bacula backup labor

Краткий обзор системы 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

Настройка конфигурационного файла Bacula Director bacula-dir.conf

# nano /etc/bacula/bacula-dir.conf

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
}

Настройка конфигурационного файла Bacula Storage bacula-sd.conf

# 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

NEXT STEP – BAT

# 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"
}

Перезапустите bacula-fd службу:

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 консоль на сервере.
В ней должна видеться положительно законченная работа по сохранению данных с клиентской машины.

 

HELP

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/