Настройка резервного копирования в bacula

Серверная часть

/etc/portage/package.use/bacula
app-backup/bacula logwatch mysql -postgres python readline -sqlite3 ssl tcpd

Предварительные телодвижения.

# Ставим.
emerge -avt app-backup/bacula
 
rc-update add bacula-dir default 
rc-update add bacula-sd default 
rc-update add bacula-fd default 
 
# Создаём базу-каталог.
/usr/libexec/bacula/grant_mysql_privileges
/usr/libexec/bacula/create_mysql_database
/usr/libexec/bacula/make_mysql_tables
mysql -e "update user set Password=Password('bacula-db-passwd') where user.User = 'bacula'"
mysql -e "FLUSH PRIVILEGES"
 
# Готовим место, куда будем складывать бекапы.
mkdir /bck 
chown bacula:bacula /bck
 
# Создаём директорию, где будут лежать куски конфига директора, и сохраняем дефолтовые конфиги.
cd /etc/bacula/
mkdir include
for f in *.conf ; do cp ${f}{,.dist} ; done

Схема именования: {имя_хоста}-{тип_объекта}-{уточнение1}-…-{уточнениеN}

Этот файл почти весь по дефолтовому конфигу:

bacula-sd.conf
Storage {
  Name                          = xxx-sd
  SDPort                        = 9103
  WorkingDirectory              = "/var/lib/bacula"
  Pid Directory                 = "/var/run"
  Maximum Concurrent Jobs       = 20
  Heartbeat Interval            = 30 sec
}
 
Director {
  Name                          = xxx-dir
  Password                      = "xxx-sd-passwd"
}
 
Director {
  Name                          = xxx-mon
  Password                      = "xxx-sd-mon-passwd"
  Monitor                       = yes
}
 
Device {
  Name                          = xxx-sddev-bck
  Media Type                    = File
  Archive Device                = /bck
  LabelMedia                    = yes;
  Random Access                 = yes;
  AutomaticMount                = yes;
  RemovableMedia                = no;
  AlwaysOpen                    = no;
}
 
Messages {
  Name                          = Standard
  director                      = xxx-dir = all
}

Эта часть конфига директора тоже почти вся по дефолту, кроме того, что описание пулов, клиентов и заданий вынесено в отдельные файлы:

bacula-dir.conf
Director {
  Name                          = xxx-dir
  Description                   = "Main backup server"
  DIRport                       = 9101
  QueryFile                     = "/usr/libexec/bacula/query.sql"
  WorkingDirectory              = "/var/lib/bacula"
  PidDirectory                  = "/var/run"
  Maximum Concurrent Jobs       = 1
  Password                      = "xxx-dir-passwd"
  Messages                      = Daemon
}
 
Storage {
  Name                          = xxx-storage
  Address                       = xxx.sabitov.ru                # N.B. Use a fully qualified name here
  SDPort                        = 9103
  Password                      = "xxx-sd-passwd"
  Device                        = xxx-sddev-bck
  Media Type                    = File
}
 
Console {
  Name                          = xxx-mon
  Password                      = "xxx-console-passwd"
  CommandACL                    = status, .status
}
 
Catalog {
  Name                          = MyCatalog
  dbname                        = "bacula"; dbuser = "bacula"; dbpassword = "bacula-db-passwd"
}
 
Schedule {
  Name                          = "WeeklyCycle"
  Run                           = Full 1st sun at 00:25
  Run                           = Differential 2nd-5th sun at 00:25
  Run                           = Incremental mon-sat at 00:25
}
 
Schedule {
  Name                          = "WeeklyCycleAfterBackup"
  Run                           = Full sun-sat at 00:27
}
 
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@xxx.sabitov.ru = all, !skipped
  operator                      = root@xxx.sabitov.ru = mount
  console                       = all, !skipped, !saved
  append                        = "/usr/var/bacula/working/bacula.log" = all, !skipped
  catalog                       = all
}
 
Messages {
  Name                          = Daemon
  mailcommand                   = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r"
  mail                          = root@xxx.catalysis.ru = all, !skipped
  console                       = all, !skipped, !saved
  append                        = "/usr/var/bacula/working/bacula.log" = all, !skipped
}
 
 
@/etc/bacula/include/xxx-dir-default-jobs-pools-etc.conf
 
@/etc/bacula/include/xxx-dir-win-client.conf
@/etc/bacula/include/xxx-dir-xxx-client.conf

Тут описываем всё, что не относится к бекапу конкретных клиентов.

include/xxx-dir-default-jobs-pools-etc.conf
Job {
  Name                          = RestoreFiles
  Type                          = Restore
  Client                        = xxx-fd
  FileSet                       = xxx-fileset
  Storage                       = xxx-storage
  Pool                          = Default-Pool
  Messages                      = Standard
  Where                         = /tmp/bacula-restores
}
 
Job {
  Name                          = BackupCatalog
  Type                          = Backup
  Client                        = xxx-fd
  Storage                       = xxx-storage
  Level                         = Full
  FileSet                       = Catalog
  Schedule                      = WeeklyCycleAfterBackup
  Messages                      = Standard
  Pool                          = Catalog-Pool
  RunBeforeJob                  = "/usr/libexec/bacula/make_catalog_backup.pl MyCatalog"
  RunAfterJob                   = "/usr/libexec/bacula/delete_catalog_backup"
  Write Bootstrap               = "/var/lib/bacula/%n.bsr"
  Priority                      = 11                            # run after main backup
}
 
FileSet {
  Name                          = Catalog
  Include {
    Options {
      signature = MD5
    }
    File                        = "/var/lib/bacula/bacula.sql"
  }
}
 
Pool {
  Name                          = Default-Pool
  Pool Type                     = Backup
  Recycle                       = yes
  AutoPrune                     = yes
  Volume Retention              = 365 days
}
 
Pool {
  Name                          = Catalog-Pool
  Pool Type                     = Backup
  Recycle                       = yes
  Recycle Oldest Volume         = yes
  AutoPrune                     = yes
  Volume Retention              = 365 days
  Label Format                  = "Catalog-${Year}-${Month:p/2/0/r}-${Day:p/2/0/r}-${Hour:p/2/0/r}-${Minute:p/2/0/r}"
}
 
Pool {
  Name                          = Scratch
  Pool Type                     = Backup
}

Описание виндового клиента:

include/xxx-dir-win-client.conf
Job {
  Name                          = win-job-bck
  Type                          = Backup
  Level                         = Incremental
  Client                        = win-fd
  FileSet                       = win-fileset
  Storage                       = xxx-storage
  Pool                          = win-filepool
  Schedule                      = WeeklyCycle
  Messages                      = Standard
  Priority                      = 10
  Write Bootstrap               = "/var/lib/bacula/%c.bsr"
}
 
Client {
  Name                          = win-fd
  Address                       = win.locnet
  FDPort                        = 9102
  Catalog                       = MyCatalog
  Password                      = "win7-fd-passwd"
  File Retention                = 30 days
  Job Retention                 = 6 months
  AutoPrune                     = yes
}
 
FileSet {
  Name                          = "win-fileset"
  Include {
    Options {
      signature = MD5
    }
    # Разделитель директорий юниксовый! Если есть пробелы и т.п. 
    # в имени файла/директории, то они специально никак не экранируются
    File                        = "C:/Users"
  }
  Include { # Exclude in real
    Options {
      # Этот параметр означает, что файлы, удовлетворяющие условиям, 
      # будут удалятся из набора 
      Exclude = yes
 
      WildFile                  = "*.avi"
      WildFile                  = "*.mpg"
      WildFile                  = "*.mpeg"
      WildFile                  = "*.wma"
      WildFile                  = "*.wmv"
      WildFile                  = "*.wtv"
      WildFile                  = "*.wav"
      WildFile                  = "*.mp3"
    }
  }
}
 
Pool {
  Name                          = win-filepool
  Pool Type                     = Backup
  Recycle                       = yes           # Bacula can automatically recycle Volumes
  Recycle Oldest Volume         = yes
  AutoPrune                     = yes           # Prune expired volumes
  Volume Retention              = 365 days      # one year
  Label Format                  = "${Client}-${Year}-${Month:p/2/0/r}-${Day:p/2/0/r}-${Hour:p/2/0/r}-${Minute:p/2/0/r}"
  Maximum Volume Jobs           = 1
  Maximum Volume Bytes          = 5G            # Limit Volume size to something reasonable
  Maximum Volumes               = 30            # Limit number of Volumes in Pool
}
include/xxx-dir-xxx-client.conf
Job {
  Name                          = xxx-job-bck
  Type                          = Backup
  Level                         = Incremental
  Client                        = xxx-fd
  FileSet                       = xxx-fileset
  Storage                       = xxx-storage
  Pool                          = xxx-filepool
  Schedule                      = "WeeklyCycle"
  Messages                      = Standard
  Priority                      = 10
  Write Bootstrap               = "/var/lib/bacula/%c.bsr"
}
 
Client {
  Name                          = xxx-fd
  Address                       = xxx.catalysis.ru
  FDPort                        = 9102
  Catalog                       = MyCatalog
  Password                      = "xxx-fd-passwd"
  File Retention                = 30 days
  Job Retention                 = 6 months
  AutoPrune                     = yes
}
 
FileSet {
  Name                          = "xxx-fileset"
  Include {
    Options {
      signature = MD5
    }
    File                        = /boot
    File                        = /etc
    File                        = /root
    File                        = /tftproot
    File                        = /usr/local
    File                        = /var/lib/mysql
    File                        = /var/lib/portage
    File                        = /var/log
    File                        = /var/www
  }
  Exclude {
    File                        = /var/lib/bacula
    File                        = /tmp
    File                        = /proc
    File                        = /tmp
    File                        = /.journal
    File                        = /.fsck
  }
}
 
Pool {
  Name                          = xxx-filepool
  Pool Type                     = Backup
  Recycle                       = yes           # Bacula can automatically recycle Volumes
  Recycle Oldest Volume         = yes
  AutoPrune                     = yes           # Prune expired volumes
  Volume Retention              = 365 days      # one year
  Label Format                  = "${Client}-${Year}-${Month:p/2/0/r}-${Day:p/2/0/r}-${Hour:p/2/0/r}-${Minute:p/2/0/r}"
  Maximum Volume Jobs           = 1
  Maximum Volume Bytes          = 40G           # Limit Volume size to something reasonable
  Maximum Volumes               = 3             # Limit number of Volumes in Pool
}

Клиентская часть

/etc/portage/package.use/bacula
app-backup/bacula bacula-clientonly logwatch -mysql -sqlite3

Предварительные телодвижения.

# Ставим.
emerge -avt app-backup/bacula
rc-update add bacula-fd default 
 
# Сохраняем дефолтовые конфиги.
cd /etc/bacula/
for f in *.conf ; do cp ${f}{,.dist} ; done

Это конфиг линуксового клиента:

bacula-fd.conf
FileDaemon {
  Name                  = xxx-fd
  FDport                = 9102
  WorkingDirectory      = /var/lib/bacula
  Pid Directory         = /var/run
  Maximum Concurrent Jobs = 5
}
 
Director {
  Name                  = xxx-dir
  Password              = "xxx-fd-passwd"
}
 
Director {
  Name                  = xxx-mon
  Password              = "xxx-fd-mon-passwd"
  Monitor               = yes
}
 
Messages {
  Name                  = Standard
  director              = yam-dir = all, !skipped, !restored
}

Это конфиг виндового клиента:

bacula-fd.conf
FileDaemon {
  Name                  = win-fd
  FDport                = 9102
  WorkingDirectory      = "C:\\Program Files\\Bacula\\working"
  Pid Directory         = "C:\\Program Files\\Bacula\\working"
  Maximum Concurrent Jobs = 3
}
 
Director {
  Name                  = xxx-dir
  Password              = "win-fd-passwd"
}
 
Director {
  Name                  = xxx-mon
  Password              = "win-fd-mon-passwd"
  Monitor               = yes
}
 
Messages {
  Name = Standard
  director = yam-dir = all, !skipped, !restored
}

Все клиенты (fd) должны иметь доступ к директору (dir) по порту TCP9101 и к хранилищу по порту TCP9103. Все клиенты должны предоставлять доступ директору по порту TCP9102.

Для подключения нового клиента надо:

  1. на клиентской машине открыть на фаерволе доступ от директора к клиенту
  2. на серверной машине открыть доступ клиенту к директору и хранилищу
  3. на клиентскую машину поместить готовый конфиг от другого клиента и исправить:
    • Имя клиента
    • Пароли для директора и монитора
  4. на серверной машине скопировать готовый файл конфигурации xxx-dir-yyy-client.conf в xxx-dir-zzz-client.conf, где yyy и zzz — имена клиентов: существующего и нового. После чего исправить в конфиге все строки yyy на zzz. Проверить значение Client.Address и исправить FileSet.

Webacula

Для работы webacula у php должен быть поднят флаг pdo, и в систему должен быть установлен пакет dev-php/ZendFramework. Поскольку Zend у нас уже стоит в системе, разворачивать ZendFramework-*-minimal в библиотеки webacula не надо.

Качаем дистр от сюда http://webacula.sourceforge.net

Распаковываем в /var/www/localhost/htdocs, получаем webacula-5.5.1, делаем симлинк на эту директорию

ln -sndf webacula-5.5.1 webacula

Проверяем, что все ОК:

cd /var/www/localhost/htdocs/webacula-5.5.1/install/
./check_system_requirements.php

Далее, разглядываем файл /var/www/localhost/htdocs/webacula-5.5.1/docs/txt/install.txt и выполняем всё что там написано по шагам :)

Правим application/config.ini:

  • db.config.host
  • db.config.username
  • db.config.password
  • db.config.dbname
  • def.timezone
  • locale
  • bacula.sudo = «/usr/bin/sudo» — в оригинальном конфиге идёт /bin/sudo
  • email.to_admin
  • email.from
  • feed_title
  • feed_desc

Добавляем в /etc/sudoers

/etc/sudoers
apache ALL=NOPASSWD: /usr/sbin/bconsole

Далее разглядываем /var/www/localhost/htdocs/webacula-5.5.1/install/apache/webacula.conf:

  1. Копируем всё, начиная со строки «Alias /webacula…» в /etc/apache2/vhosts.d/default_vhost.include
  2. Меняем все строки /usr/share/webacula/ на /var/www/localhost/htdocs/webacula/
  3. у меня 2.4й индеец, поэтому:
    • убиваем все сроки Order deny,allow
    • там, где нет Allow, меняем Deny from all на Require all denied
    • там, где есть Allow, убиваем Deny from all
    • меняем Allow from на Require ip и Require host

Создаём таблицы для webacula:

cd /var/www/localhost/htdocs/webacula-5.5.1/install/MySql
./10_make_tables.sh
./20_acl_make_tables.sh
mysql bacula 
mysql> UPDATE webacula_users SET pwd=MD5('new_root_pwd') WHERE login='root';

Генерация паролей

При сборке бакулы используется следующая команда для автоматической генерации паролей:

openssl rand -base64 33

"Рекомендации ведущих собаководов"

http://bacula.org/en/, http://wiki.bacula.org/ — это официальный сайт и их вики.

http://habrahabr.ru/post/86526/ — не очень глубокий гайд про настройку bacula. Хорош низким «порогом вхождения».

http://www.lissyara.su/articles/freebsd/programms/bacula/ — еще один простой гайд, как настроить, чтобы заработало.

http://ru.wikibooks.org/wiki/Bacula — попытка подробно расписать что есть что в bacula. К сожалению, не описание местами рудиментарное, но в самом начале бывает полезно смотреть сюда, т.к. позволяет легко ориентироваться в сущностях бакулы.

http://www.bog.pp.ru/work/bacula.html — в высшей степени монументальный труд про настройку bacula. Подробно, всеобъемлюще и поэтому многа бакаф.

http://www.opennet.ru/base/sys/backup_plan.txt.html — «О разработке процедур резервного копирования (backup).» Еще один монументальный труд про резервное копирование. Рассматривается как его правильно организовать. Собственно, bacula, как таковая, не рассматривается.

http://myunix.dk/category/bacula/ — Large scale disk-to-disk backups using Bacula (серия статей, как люди настраивают бекап «по настоящему»)

Andrew A. Sabitov 2013-04-27 00:18


sys/настройка_резервного_копирования_в_bacula.txt · Последние изменения: 2016-06-07 11:03 — Andrew A. Sabitov