Показаны сообщения с ярлыком backup. Показать все сообщения
Показаны сообщения с ярлыком backup. Показать все сообщения

пятница, 23 сентября 2011 г.

Bacula, SATA Диски вместо ленточек

Использую Bacula для резервного копирования. Хранил все резервные копии на RAID массиве, но в один прекрасный момент место на нём стало подходить к концу. Решил попробовать организовать резервное копирование на внешние диски (USB, eSATA, SATA).

О системе: ОСь CentOS 5.6, Bacula 5.0.3 (из репозитория http://www.pramberger.at/ ), vchanger (http://sourceforge.net/projects/vchanger/), autofs, все диски одного объема по 1,5 тБ.

Будем считать что у вас уже имеется настроенная и рабочая система. Если нет, тогда вам сюда: http://wiki.bacula.org, http://www.bog.pp.ru/work/bacula.html

Терминология:
Чейнджер - виртуальное устройство которое создает vchanger
Ленточка - файл в который происходит запись, он же "том" (volume) в бакуле.
Магазин - наш сменный диск с "ленточками"
Количество слотов - сколько ленточек может быть в магазине
Отсеки для магазинов - сколько одновременно магазинов можно использовать.

Настроим autofs, чтобы при обращении к поддиректории в директории /bacula/uuid, происходила попытка смонтировать диск с одноименным UUID:
В файл /etc/auto.master добавим строчку:
/bacula/uuid /etc/auto.uuid --timeout=10

Создадим файл /etc/auto.uuid, добавим туда:
* -fstype=auto,rw :/dev/disk/by-uuid/&

Надо проверить что диск монтируется автоматически.
cd /bacula/uuid/ИдентификаторРазделаДиска
В результате должна появиться папка ИдентификаторРазделаДиска и в неё же подмаонтироваться наш раздел.

Настроим vchanger, программа для эмуляции ленточного ченжера.
Мы будем использовать один ченжер для дисков одинакого объёма.
Создадим файл /etc/bacula/c1500.conf:
# 1500 gb диски
# Использую это имя и в бакуле тоже
changer_name = "c1500"
work_dir = "/var/lib/bacula/c1500"
logfile = "/var/lib/bacula/c1500/c1500.log"
log_level = LOG_EMERG
# Число приводов - сколько одновременно ленточек можно записывать
Virtual_Drives = 4
# Сколько ленточек умещается в магазине, определяем как (объем диска - 15%)/(max volume size из свойств пула в бакуле)
slots_per_magazine = 60
# Сколько одновременно магазинов (дисков) можно использовать, у меня это количество свободных eSATA портов
magazine_bays = 4
# Папка, где будут монтироваться магазины
automount_dir = /bacula/uuid
# Теперь нам нужно перечислить магазины с ленточками которые мы используем
magazine = "UUID:69ceced2-a9ab-4b10-9314-177e912279e7" #1 inc
magazine = "UUID:c83dad52-bd34-49bf-a1dd-fe49e9f6f9bf" #2 diff
# Бывает что по UUID vchanger не может подмонтировать диск, тогда укажем папку.
# В итоге, я настроил все через папки, чтобы было всё единообразно.
magazine = "/bacula/uuid/60182fad-27bc-451f-a4e1-123a619bba2e" #3 full
magazine = "/bacula/uuid/7e68d7be-a98f-47fd-be0d-49d2bea9be24" #4 inc
magazine = "/bacula/uuid/6e834c12-cf8f-4266-8791-4731fdd58207" #5 diff
magazine = "/bacula/uuid/3d4d3dfb-6159-43da-b9d3-75dc802a0e07" #6 full


На этом настройка vchanger завершена. Мы получили виртуальный ченжер с четырьмя приводами для записи ленточек, возможность подключить одновременно 4 магазина с ленточками по 60 ленточек в каждом.

Теперь приступим к настройке бакулы. в конфигурационный файл директора добавляем:
Пулы:
Pool {
Name = "chg-full"
Pool Type = backup
Storage = c1500
Maximum Volume Bytes = 20gb # Тут определяется максимальный размер каждой ленточки
Volume Retention = 200 days
Recycle = Yes
}

Pool {
Name = "chg-diff"
Pool Type = backup
Storage = c1500
Maximum Volume Bytes = 20gb
Volume Retention = 60 days
Recycle = Yes
}

Pool {
Name = "chg-inc"
Pool Type = backup
Storage = c1500
Maximum Volume Bytes = 20gb
Volume Retention = 14 days
Recycle = Yes
}

Обращу ваше вниманеи вот на какой параметр:
Maximum Volume Bytes = 20gb. Тут определяется максимальный размер каждой ленточки, а количество ленточек в магазине (в нашем случае диске) определяется в настройках vchangerа, собственно по этому, если хотим использовать один пул для объединения леточек с дисков разного объёма, мы вынуждены создавать отдельный ченжер для дисков каждого объёма.

Теперь добавим ресурс Storage для нашего виртуальног ченжера:
Storage {
Name = c1500
Address = bacula-sd.local
Password = "123456"
Device = c1500
Media Type = File
Autochanger = yes;
Maximum Concurrent Jobs = 20
}


Создадим расписание расписание для тестирования, Полная копия в 12-05, дифиринциальная в 16-05, и инкрементальные примерно раз в час с 8 до 23. Каждый уровень резервного копирования будет использовать свой пул.
Schedule {
Name = test-gfsCycle
Run = Level=Full Pool=chg-full at 12:05
Run = Level=Differential Pool=chg-diff at 16:05
Run = Level=Incremental Pool=chg-inc at 8:05,9:20,10:20,11:20,14:20,15:20,17:20,18:20,19:20,20:20,21:20,22:20,23:20
}


Для окончательной настройки осталось добавить задания для резервного копирования.
# Сделаем шаблон задания с нашим расписанием и пулом.
JobDefs {
Name = "DefaultJobchg"
Maximum Concurrent Jobs = 20
Type = Backup
Schedule = "test-gfsCycle"
Messages = Standard
Priority = 10
Pool = chg-inc
SpoolData = yes
Spool Size = 300 GB
}
# Сделаем тестовое задание, по шаблону выше
Job {
Name = "at0038-test-job"
JobDefs = "DefaultJobchg"
Write Bootstrap = "/var/lib/bacula/at0038-test.bsr"
Client = at0038-fd
FileSet = "at0038-test-FileSet"
Enabled = Yes
}
# Сделаем набор файлов для архивирования по заданию
FileSet {
Name = "at0038-test-FileSet"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /etc/bacula
}
}


С директором закончили, едем дальше. Настраиваем стораж демон. Создаем авто ченджер с четырьмя приводами и описываем каждый привод.
Autochanger {
Name = c1500
Device = c1500-drive-0
Device = c1500-drive-1
Device = c1500-drive-2
Device = c1500-drive-3
Changer Command = "/usr/local/bin/vchanger %c %o %S %a %d"
Changer Device = "/etc/bacula/c1500.conf"
}

Device {
Name = c1500-drive-0
DriveIndex = 0
Autochanger = yes;
DeviceType = File
MediaType = File
ArchiveDevice = /var/lib/bacula/c1500/0/drive0
RemovableMedia = no;
RandomAccess = yes;
Spool Directory = /bacula/spool/0
Maximum Spool Size = 200 GB
Maximum Job Spool Size = 60 GB
Maximum Concurrent Jobs = 20
}

Device {
Name = c1500-drive-1
DriveIndex = 1
Autochanger = yes;
DeviceType = File
MediaType = File
ArchiveDevice = /var/lib/bacula/c1500/1/drive1
RemovableMedia = no;
RandomAccess = yes;
Spool Directory = /bacula/spool/1
Maximum Spool Size = 200 GB
Maximum Job Spool Size = 60 GB
Maximum Concurrent Jobs = 20
}
Device {
Name = c1500-drive-2
DriveIndex = 2
Autochanger = yes;
DeviceType = File
MediaType = File
ArchiveDevice = /var/lib/bacula/c1500/2/drive2
RemovableMedia = no;
RandomAccess = yes;
Spool Directory = /bacula/spool/2
Maximum Spool Size = 200 GB
Maximum Job Spool Size = 60 GB
Maximum Concurrent Jobs = 20
}

Device {
Name = c1500-drive-3
DriveIndex = 3
Autochanger = yes;
DeviceType = File
MediaType = File
ArchiveDevice = /var/lib/bacula/c1500/3/drive3
RemovableMedia = no;
RandomAccess = yes;
Spool Directory = /bacula/spool/3
Maximum Spool Size = 200 GB
Maximum Job Spool Size = 60 GB
Maximum Concurrent Jobs = 20
}


Теперь надо подготовить диски, я использую 6 дисков по 1,5 тБ. По два в каждом пуле.
Создаем разделы на всех. Узнаём их идентификаторый и записываем их в конфигурацию vchangera.
Права на раздел должны принадлежать пользователю от которого запускается vchanger. В моем случае это тпользователь bacula.
magazine = "/bacula/uuid/60182fad-27bc-451f-a4e1-123a619bba2e" #3 full
Это значит что на диске нарисована маркером цифра 3, а в бакуле он добавлен в chg-full пул
После этого инифиализируем диск в vchangerе:
vchanger -u bacula -g bacula /etc/bacula/c1500.conf initmag 1

Теперь необходимо применить настройки и промаркировать ленточки в наших маназинах.
В консоле управления бакулы:
label storage=c1500 pool=chg-full slot=1-60 barcodes
label storage=c1500 pool=chg-full slot=121-180 barcodes (если диск, например, в третьем слоте для магазинов)
Обновим информацию о ленточках в слотах магазинов, в консоле:
update slots storage=c1500

Ну вот пожалуй и всё с настройкой.
При эксплуатации выявились некоторые нюансы. Привод не всегда отпускал ленточку после завершения резервного копирования (звучит так как будт-то разговор идёт о реальном приводе :). Пришлось сделать задание с наименьшим прироритетом которое запускается после заданий на резервное копирование и даёт команду освободить приводы. И ещё одна проблема когда вставляешь диск, бакула не знает какая ленточка в каком слоте, для решение также сделал задание в бакуле, с наивысшим приоритетом, который запускается перед всеми остальными и загружает ленточки в слоты.

Добавляем в конфигурацию директора шаблон и задания
JobDefs {
Name = "DefaultJobchgAdmin"
Maximum Concurrent Jobs = 20
Type = Admin
Schedule = "gfsCycle"
Messages = Standard
Priority = 10
Pool = chg-full
Fileset = Default
}

Job {
Name = at0038-updateslots
JobDefs = "DefaultJobchgAdmin"
Client = at0038-fd
RunBeforeJob = "/etc/bacula/scripts/chg_update_slots.sh >> /tmp/chg_update_slots.log"
Priority = 8
}

Job {
Name = at0038-releasestorage
JobDefs = "DefaultJobchgAdmin"
Client = at0038-fd
Schedule = "WeeklyCycleAfterBackup"
RunAfterJob = "/etc/bacula/scripts/chg_release_tapes.sh >> /tmp/chg_release_tapes.log"
Priority = 30
}


Создаем файл chg_release_tapes.sh
#!/bin/bash
bconsole="/usr/bin/bconsole -s -c /etc/bacula/bconsole.conf"
$bconsole <<EOD
release storage=c1500 drive=0
release storage=c1500 drive=1
release storage=c1500 drive=2
release storage=c1500 drive=3
release storage=c500 drive=0
release storage=c500 drive=1
release storage=c500 drive=2
release storage=c500 drive=3
quit
EOD

Создаем Файл chg_update_slots.sh
#!/bin/bash
bconsole="/usr/bin/bconsole -s -c /etc/bacula/bconsole.conf"
$bconsole <<EOD_UPSLOTS
update slots storage=c1500 drive=0
quit
EOD_UPSLOTS


ну вот теперь всё.

Спасибо создателям vchanger, людям на http://wiki.bacula.org, и http://www.bog.pp.ru/work/bacula.html. Неоценимо помогли эти материалы.

пятница, 26 августа 2011 г.

Скрипт резервного копирования настроек роутеров DFL 800, 210, 860e

Генерим SSH ключ для пользователя bacula или root, Открытый ключ загружаем на DFL и добавляем его пользователю admin. На DFLях есть глюк, когда пользователь отличный от admin получает по ssh полномочия auditor. Приходится использовать пользователя admin. разрешаем на DFLе ssh доступ. Вуаля. 


#!/bin/bash
# здесь необходимо указать адреса DFL-ек конфу которых надо бекапить
# в каждой строчке указываю все адреса одной DFLки
DFLSLIST="
222.111.222.111

1.2.3.4
4.5.6.7
"

BACKUPDIR="/tmp/bacula/dfls"
USERNAME=$2
PASSWORD=$3
UP=" --user=$USERNAME --password=$PASSWORD"
LOGFILE="/tmp/bacula/dfls/backupdfls.log"
SCP_PROG="/usr/bin/scp"
SCP_ARGS=" -2 -4 -C -q -B -o ConnectTimeout=5 "
SSH_PROG="/usr/bin/ssh"
SSH_ARGS=" -2 -4 -C -q -o ConnectTimeout=5 "
DATE=`date +%Y%m%d%H%M`

create_backup() {

   if [ ! -d $BACKUPDIR ]
       then
           mkdir -p $BACKUPDIR
   fi

   for DFL in $DFLSLIST
   do
       # echo $SCP_PROG $SCP_ARGS $1@$DFL:config.bak $BACKUPDIR/$DFL-`date +%Y%m%d%H%M`-config.bak
# узнаем по SNMP имя системы, задается в настройках удалённого доступа на DFL
       SYSNAME=`snmpget -Ovq -c public -v 2c $DFL 1.3.6.1.2.1.1.5.0 2>/dev/null`
       if [ $SYSNAME ]; then
           FILENAME=$BACKUPDIR/$SYSNAME-`date +%Y%m%d%H%M`
       else
           FILENAME=$BACKUPDIR/$DFL-`date +%Y%m%d%H%M`
       fi
       if [ ! -f $FILENAME-config.bak ]; then
           echo --- `date +%Y%m%d%H%M` start backing up Name:$SYSNAME Address:$DFL config >> $LOGFILE
           $SCP_PROG $SCP_ARGS $USERNAME@$DFL:config.bak $FILENAME-config.bak >> $LOGFILE 2>&1
       fi
       if [ -f $FILENAME-config.bak ]
       then
           echo --- `date +%Y%m%d%H%M` succes backing up Name:$SYSNAME Address:$DFL config.bak >> $LOGFILE
           echo --- `date +%Y%m%d%H%M` succes backing up Name:$SYSNAME Address:$DFL config.bak
       else
           echo --- `date +%Y%m%d%H%M` error backing up Name:$SYSNAME Address:$DFL config.bak >> $LOGFILE
           echo --- `date +%Y%m%d%H%M` error backing up Name:$SYSNAME Address:$DFL config.bak
       fi
       if [ ! -f $FILENAME-full.bak ]; then
           echo --- `date +%Y%m%d%H%M` start backing up Name:$SYSNAME Address:$DFL full >> $LOGFILE
           $SCP_PROG $SCP_ARGS $USERNAME@$DFL:full.bak $FILENAME-full.bak >> $LOGFILE 2>&1
       fi
       if [ -f $FILENAME-full.bak ]
       then
           echo --- `date +%Y%m%d%H%M` succes backing up Name:$SYSNAME Address:$DFL full.bak >> $LOGFILE
           echo --- `date +%Y%m%d%H%M` succes backing up Name:$SYSNAME Address:$DFL full.bak
       else
           echo --- `date +%Y%m%d%H%M` error backing up Name:$SYSNAME Address:$DFL full.bak >> $LOGFILE
           echo --- `date +%Y%m%d%H%M` error backing up Name:$SYSNAME Address:$DFL full.bak
       fi
       # $SSH_PROG $SSH_ARGS $1@$DFL "shutdown 15 -reboot"
       # $SSH_PROG $SSH_ARGS $1@$DFL "ls -al" > /dev/null
       # echo $DFL DON
   done
}

delete_backup() {
#    for DFL in $DFLSLIST
#       do
#           echo $SCP_PROG $SCP_ARGS $1@$DFL:config.bak $BACKUPDIR/$DFL-`date +%Y%m%d%H%M`-config.bak
#           $SCP_PROG $SCP_ARGS $USERNAME@$DFL:config.bak $BACKUPDIR/$DFL-`date +%Y%m%d%H%M`-config.bak
#           $SCP_PROG $SCP_ARGS $USERNAME@$DFL:full.bak $BACKUPDIR/$DFL-`date +%Y%m%d%H%M`-full.bak
#           $SSH_PROG $SSH_ARGS $USERNAME@$DFL "shutdown 15 -reboot"
#           $SSH_PROG $SSH_ARGS $USERNAME@$DFL "shutdown 2 -reboot" > /dev/null 2>/dev/null
#           echo $DFL DON
#    done
   rm -rf $BACKUPDIR
}

case "$1" in
create)
       create_backup
       ;;

delete)
       delete_backup
      ;;

*)
       echo "Usage: backup_dfls.sh [create|delete] username password "
       exit 1
       ;;
esac
exit 0

четверг, 8 октября 2009 г.

Удаляем старые резервные копии

Смысл: Скопились файлы с резервными копиями, информация о которых отсутсвует в каталоге Baculы. Надо бы от них избавиться.
Что делать? Надо узнать если информация в каталоге бакулы по каждому файлу в папках устройств.
Скрипт:
#!/bin/bash
devicesdir=/bacula/devices
medianame=''
result=''
mysql_host="localhost"
mysql_db="bacula"
mysql_user="bacula"
mysql_password=""

for myfile in $devicesdir/*/*
do
medianame=`echo "$myfile" | cut -d'/' -f5`
result=`echo "select VolumeName FROM Media WHERE VolumeName=\"$medianame\";" | mysql -h $mysql_host -u $mysql_user -p$mysql_password $mysql_db`
if [ "$result" = "" ]
then
rm -fv $myfile
fi
done

В итоге скрипт удалит все файлы, информация о которых не нашлась в каталоге.

Использовать крайне осторожно! Можно лишиться своих резервных копий.

среда, 1 апреля 2009 г.

Установка bacula

Журнал, backup сервер, установка и настройка
hostname нашего сервера: at0038

У меня контроллер на 8 дисков, по 500 гБ каждый
Делаем два RAID массива, system - 60 GB, data - 2700 GB
Это необходимо, из-за того, что CentOS не может установиться на раздел больше чем 2 ТБ.
sda1 - 10 gb / (корневой раздел оставляем не на ЛВМ)
sda2 - 50 gb pv
sdb1 - 2,6 tb pv
vg0 - /dev/sda2 (Один волумгруп для системных разделов)
vg1 - /dev/sdb1 (один волум групп для данных)
vg0/lv_swap - 2 gb - swap
vg0/lv_var - 10 gb - /var
vg0/lv_tmp - 10 gb - /tmp
vg0/lv_usr - 10 gb - /usr
vg1/lv_bacula - 2,6 tb - /bacula

Centos 5.2 - Установка поумолчанию.
Обновляемся после установки.

Качаем свежую сборку bacula rpms-contrib-fschwarz
Устанавливаем:
качаем ключ: wget http://freefr.dl.sourceforge.net/sourceforge/bacula/fschwarz.asc
устанавливаем ключ: rpm --import fschwarz.asc
yum --nogpgcheck install bacula-mysql-2.4.2-1.el5.i386.rpm bacula-bat-2.4.2-1.el5.i386.rpm bacula-gconsole-2.4.2-1.el5.i386.rpm
правим /etc/aliases:
root: тут адрес на который должны приходить инормационные письма
# newaliases
# /etc/init.d/sendmail restart
Настройка Bacula

Читать:
http://www.opennet.ru/soft/Short_Doc_Bacula.pdf
http://santa-claus-rpm.livejournal.com/5066.html
http://www.opennet.ru/soft/Bacula_PDC_backup.pdf
http://wiki.bacula.org/doku.php
http://www.bog.pp.ru/work/bacula.html

В папке /bacula/devices - создаю папки для каждого клиента, каждая папка устройство (device), бакула не может писать два задания на одно устройство одновременно, если хотим чтобы копирование происходило с нескольких клиентов одновременно, тогда нужно создать несколько устройств.

Конфигурационные файлы:

bacula-dir.conf:

Director {
Name = at0038-dir
DIRport = 9101
QueryFile = "/usr/lib/bacula/query.sql"
WorkingDirectory = "/var/lib/bacula"
PidDirectory = "/var/run"
Maximum Concurrent Jobs = 10
Password = "12345"
Messages = Daemon
}

Console {
Name = at0038-mon
Password = "12345"
CommandACL = status, .status
}

# Generic catalog service
Catalog {
Name = MyCatalog
dbname = "bacula"; dbuser = "bacula"; dbpassword = ""
}

JobDefs {
Name = "DefaultJob"
Maximum Concurrent Jobs = 20
Type = Backup
Level = Incremental
Schedule = "WeeklyCycle"
Messages = Standard
Pool = Default
Priority = 10

}

Job {
Name = "RestoreFiles"
Type = Restore
Client= at0038-fd
FileSet="at0038-FileSet"
Storage = FileStorage
Pool = Default
Messages = Standard
Where = /bacula/restores
Priority = 11
Maximum Concurrent Jobs = 100
}

Schedule {
Name = "WeeklyCycle"
Run = FullPool=fullbackup-pool Level=Full Pool=fullbackup-pool 1st fri at 23:05
Run = DifferentialPool=diffbackup-pool Level=Differential Pool=diffbackup-pool 2nd-5th fri at 23:05
Run = IncrementalPool=incbackup-pool Level=Incremental Pool=incbackup-pool sat,sun,mon,tue,wed,thu at 23:05
}

Schedule {
Name = "WeeklyCycleAfterBackup"
Run = Full sun-sat at 23:10
}

Storage {
Name = FileStorage
Maximum Concurrent Jobs = 1
Address = at0038
SDPort = 9103
Password = "12345"
Device = FileStorage
Media Type = File
}


Messages {
Name = Standard
operatorcommand = "/usr/sbin/bsmtp -h localhost -f bacula@at0038 -s \"Bacula: Intervention needed for %j\" %r"
mailcommand = "/usr/sbin/bsmtp -8 -h localhost -f bacula@at0038 -s \"%c %n %l %t: %e\" %r"
mail = root@localhost = all, !skipped
operator = root@localhost = mount
console = all, !skipped, !saved
append = "/var/lib/bacula/log" = all, !skipped
}

Messages {
Name = Daemon
mailcommand = "/usr/sbin/bsmtp -h localhost -f bacula@at0038 -s \"Bacula daemon message\" %r"
mail = root@localhost = all, !skipped
console = all, !skipped, !saved
append = "/var/lib/bacula/log" = all, !skipped
}

Pool {
Name = Default
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 365 days # one year
Label Format = "default-${Job}-${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
}

Pool {
Name = fullbackup-pool
Pool Type = Backup
Volume Retention = 200 days
AutoPrune = yes
RecyclePool = Scratch
Recycle = yes
Recycle Oldest Volume = yes
Label Format = "fullbackup-${Job}-${Year}${Month:p/2/0/r}${Day:p/2/0/r}-${Hour:p/2/0/r}${Minute:p/2/0/r}${Second:p/2/0/r}"
Use Volume Once = Yes
}

Pool {
Name = diffbackup-pool
Pool Type = Backup
Volume Retention = 40 days
AutoPrune = yes
RecyclePool = Scratch
Recycle = yes
Recycle Oldest Volume = yes
Label Format = "diffbackup-${Job}-${Year}${Month:p/2/0/r}${Day:p/2/0/r}-${Hour:p/2/0/r}${Minute:p/2/0/r}${Second:p/2/0/r}"
Use Volume Once = Yes
}

Pool {
Name = incbackup-pool
Pool Type = Backup
Volume Use Duration = 7 days
Volume Retention = 8 days
AutoPrune = yes
RecyclePool = Scratch
Recycle = yes
Recycle Oldest Volume = yes
Label Format = "incbackup-${Job}-${Year}${Month:p/2/0/r}${Day:p/2/0/r}-${Hour:p/2/0/r}${Minute:p/2/0/r}${Second:p/2/0/r}"
Use Volume Once = Yes
}

@/etc/bacula/conf.d/шаблон для каждого клиента компьютера (имякомпьютера-dir.conf)

bacula-sd.conf:

Storage { # definition of myself
Name = at0038-sd
SDPort = 9103
WorkingDirectory = "/var/lib/bacula"
Pid Directory = "/var/run"
Maximum Concurrent Jobs = 20
}

Director {
Name = at0038-dir
Password = "12345"
}

Director {
Name = at0038-mon
Password = "12345"
Monitor = yes
}

Device {
Name = FileStorage
Media Type = File
Archive Device = /bacula/devices/default
LabelMedia = yes
Random Access = Yes
AutomaticMount = yes
RemovableMedia = no
AlwaysOpen = no
}

Messages {
Name = Standard
director = at0038-dir = all
}

@/etc/bacula/conf.d/шаблон для каждого клиента компьютера (имякомпьютера-sd.conf)

bacula-fd.conf:

Director {
Name = at0038-dir
Password = "12345"
}

Director {
Name = at0038-mon
Password = "12345"
Monitor = yes
}

FileDaemon { # this is me
Name = at0038-fd
FDport = 9102 # where we listen for the director
# WorkingDirectory = "C:\\Documents and Settings\\All Users\\Application Data\\Bacula\\Work"
# Pid Directory = "C:\\Documents and Settings\\All Users\\Application Data\\Bacula\\Work"
WorkingDirectory = /var/lib/bacula
Pid Directory = /var/run
Maximum Concurrent Jobs = 20
}

Messages {
Name = Standard
director = at0038-dir = all, !skipped, !restored
}

bat.conf, bconsole.conf

Director {
Name = at0038-dir
DIRport = 9101
address = at0038
Password = "12345"
}

шаблон-dir.conf:

# %wintemplate% dir
# Client (File Services) to backup
Job {
Name = "%wintemplate%-job"
Maximum Concurrent Jobs = 10
JobDefs = "DefaultJob"
Write Bootstrap = "/var/lib/bacula/%wintemplate%.bsr"
Client = %wintemplate%-fd
FileSet = "%wintemplate%-FileSet"
Storage = "%wintemplate%-FileStorage"
ClientRunBeforeJob = "\"C:\\Documents and Settings\\All Users\\Application Data\\Bacula\\runbefore.bat\""
ClientRunAfterJob = "\"C:\\Documents and Settings\\All Users\\Application Data\\Bacula\\runafter.bat\""
}

Client {
Name = %wintemplate%-fd
Maximum Concurrent Jobs = 10
Address = %wintemplate%
FDPort = 9102
Catalog = MyCatalog
Password = "12345" # password for FileDaemon
File Retention = 60 days # 30 days
Job Retention = 6 months # six months
AutoPrune = yes # Prune expired Jobs/Files
}

# List of files to be backed up
FileSet {
Name = "%wintemplate%-FileSet"
Enable VSS = yes
Include {
Options {
signature = MD5
compression = GZIP
IgnoreCase = yes
Exclude = yes
WildDir = "[A-Z]:/temp"
WildFile = "*.tmp"
WildDir = "[A-Z]:/RECYCLER"
WildFile = "[A-Z]:/pagefile.sys"
WildFile = "*.mp1"
WildFile = "*.mp2"
WildFile = "*.mp3"
WildFile = "*.avi"
WildFile = "*.mpg"
WildFile = "*.mpeg"
WildFile = "*.ogg"
WildFile = "*.cdx"
}
File = C:/SystemStateBackup.bkf
}
Exclude {
}
}

# Definition of file storage device
Storage {
Name = %wintemplate%-FileStorage
Maximum Concurrent Jobs = 10
Address = at0038
SDPort = 9103
Password = "12345"
Device = %wintemplate%-FileStorage
Media Type = %wintemplate%-File
}

шаблон-dir.conf (linux):

# %nixtemplate% dir
# Client (File Services) to backup
Job {
Name = "%nixtmplate%-job"
Maximum Concurrent Jobs = 10
JobDefs = "DefaultJob"
Write Bootstrap = "/var/lib/bacula/at0038.bsr"
Client = at0038-fd
FileSet = "%nixtmplate%-FileSet"
Storage = %nixtmplate%-FileStorage
}

Client {
Name = %nixtmplate%-fd
Maximum Concurrent Jobs = 10
Address = %nixtmplate%
FDPort = 9102
Catalog = MyCatalog
Password = "12345" # password for FileDaemon
File Retention = 60 days # 30 days
Job Retention = 6 months # six months
AutoPrune = yes # Prune expired Jobs/Files
}

# List of files to be backed up
FileSet {
Name = "%nixtmplate%-FileSet"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /home
File = /etc
File = /usr/local
File = /opt
File = /root
File = /var/log
File = /var/run
File = /var/spool
}

Exclude {
File = /proc
File = /tmp
File = /.journal
File = /.fsck
}
}

# Definition of file storage device
Storage {
Name = %nixtmplate%-FileStorage
Maximum Concurrent Jobs = 10
Address = at0038
SDPort = 9103
Password = "12345"
Device = %nixtmplate%-FileStorage
Media Type = %nixtmplate%-File
}

шаблон-sd:

Device {
Name = %template%-FileStorage
Device Type = File
Media Type = %template%-File
Archive Device = /bacula/devices/%template%
Random Access = Yes
AutomaticMount = yes
RemovableMedia = no
AlwaysOpen = no
LabelMedia = yes
}