Bacula/Использование накопителей

Здесь подразумевается использование файлов в качестве носителя.

В случае с лентами картина, по видимому, будет отличаться.

Ключевые параметры править

Расписание:

  • Schedule

И параметры, определяющие использование накопителей:

  • В настройках пула:
    • Maximum Volume Bytes
    • Maximum Volumes
    • Volume Retention
  • В настройках клиента:
    • File Retention
    • Job Retention

Schedule править

Время хранения резервных копий будет определяться расписанием и политикой хранения, где:

расписание будет определять минимальное время хранения (период хранения очевидно имеет смысл делать кратным расписанию).
а политика - максимальное.

Вот пример расписания из конфигурации по умолчанию:

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
}

Здесь описано полное копирование каждое первое воскресенье месяца и далее дифференциальные и инкрементальные.

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

Объём тома (volume) править

Максимальный объём тома. Необязательный параметр.

При использовании файлов в качестве носителей, и правиле "одно задание - один том", максимальный размер тома должен соответствовать самому большому возможному заданию.

Для определения необходимого значения можно замерить, какой объем займет полный бэкап файлсета (см. estimate в Bacula Console and Operator's Guide, а также прогнать пробное задание, если используется сжатие).

Maximum Volume Bytes

Количество томов (volume) править

Максимальное количество используемых в пуле томов.

Если хранится N томов, то нужно иметь в пуле как минимум на два тома больше. Один - на текущий бэкап, чтобы не затирать самый старый из предыдущих на случай ошибки бэкапа, и как минимум один - для свободы маневра в случае ошибок.

Maximum Volumes

Периоды хранения (retention) править

Определение периодов хранения.

Имеет смысл установить такие сроки хранения, чтобы "резервные тома" не понадобились при нормальной работе; например: Volume Retention на неделю дольше максимального срока хранения по политике, если между бэкапами проходит примерно месяц. В таком случае тома будут нормально ротироваться без привлечения резерва.

Пул править

Минимальное время хранения Тома перед его повторным использованием.

Должен быть в вдвое больше интервала полных резервных копий. Это означает, что, если полная резервная копия выполняется один раз в месяц, то минимальный период Volume Retention должен быть два месяца.

Этот параметр должен быть как минимум не менее определённого политикой резервного копирования периода хранения резервных копий.

Volume Retention

Клиент править

Определяют период хранения информации о задании, и отдельных файлах в нём, в базе данных бакулы (каталог). Не относятся непосредственно к хранению резервных копий.

Очевидно должны быть не менее времени хранения резервной копии. Хранить устаревшие записи нецелесообразно, чтобы не раздувать базу данных.

File Retention
Job Retention

Пример использования править

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

  1. Неделю хранить ежедневную копию
  2. Месяц хранить еженедельную
  3. Полгода хранить ежемесячную

Пример взят из официальной документации (Bacula Main Reference Guide, глава 27, Automated Disk Backup):

Если мы хотим также распределить эти резервные копии на разные накопители (например полный на ленту а инкрементальные и дифференциальные на диск), то storage нужно определять не в описании задания (job) а в каждом пуле. Если storage указан и там и там, то будет использован тот что указан в задании, у него приоритет выше.
Job {
 Name = client
 Type = Backup
 Client = client-fd
 FileSet = "Site_001"
 Schedule = "WeeklyCycle"
 Storage = File
 Messages = Standard
 Pool = Default
 Full Backup Pool = Full-Pool
 Incremental Backup Pool = Inc-Pool
 Differential Backup Pool = Diff-Pool
 Write Bootstrap = "/home/bacula/working/client.bsr"
 Priority = 10
}

FileSet {
 Name = "Site_001"
 Include = { Options { signature=SHA1; compression=GZIP9 }
  File = /var/www/html/site_001
 }
}

Schedule {
 Name = "WeeklyCycle"
 Run = Level=Full 1st sun at 2:05
 Run = Level=Differential 2nd-5th sun at 2:05
 Run = Level=Incremental mon-sat at 2:05
}

Client {
 Name = client-fd
 Address = client
 FDPort = 9102
 Catalog = MyCatalog
 Password = " *** CHANGE ME ***"
 AutoPrune = yes
 # Prune expired Jobs/Files
 Job Retention = 6 months
 File Retention = 60 days
}

Pool {
 Name = Full-Pool
 Pool Type = Backup
 Recycle = yes
 # automatically recycle Volumes
 AutoPrune = yes
 # Prune expired volumes
 Volume Retention = 6 months
 Maximum Volume Jobs = 1
 Label Format = Full-
 Maximum Volumes = 9
}

Pool {
 Name = Inc-Pool
 Pool Type = Backup
 Recycle = yes
 # automatically recycle Volumes
 AutoPrune = yes
 # Prune expired volumes
 Volume Retention = 20 days
 Maximum Volume Jobs = 1
 Label Format = Inc-
 Maximum Volumes = 7
}

Pool {
 Name = Diff-Pool
 Pool Type = Backup
 Recycle = yes
 AutoPrune = yes
 Volume Retention = 40 days
 Maximum Volume Jobs = 1
 Label Format = Diff-
 Maximum Volumes = 10
}

Мониторинг свободного места править

По материалам ru-bacula:

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

В секции Job:

 RunBeforeJob = "/path/to/diskmon.sh"

Скрипт:

#!/bin/sh

# (c) tim4dev

# *** start setup ***
ADMIN="admin-backup@gmail.com"

HOST="BACKUP"

# свободный размер диска в Гб
ERR_LIMIT=1
WARN_LIMIT=3
# *** end setup ***

ERR=0


# если надо измените следующую строку для grep (какие FS _НЕ_ нужно мониторить)
for STR in `df -k | grep -vE '^Filesystem|tmpfs|sda6|sda3|sda2|sda1' | awk '{ print $4 "___" $1 }'`
do
  avail_str=$(echo $STR | awk -F "___" '{ print $1}' | cut -d'%' -f1  )
  avail=$(echo "scale=0; $avail_str/1048576" | bc)
  partition=$(echo $STR | awk -F "___"  '{ print $2 }' )

  if [ "$avail" -le "$ERR_LIMIT" ]; then
     msg="ERROR: $HOST Very low disk space \"$partition (${avail}Gb)\" on $(hostname) as on $(date)"
     echo $msg
     echo $msg | mail -s "ERROR: $HOST Very low disk space ${avail}Gb" $ADMIN
     ERR=1
  else
     if [ ${avail} -le ${WARN_LIMIT} ]; then
        msg="WARNING: $HOST Low disk space \"$partition (${avail}Gb)\" on $(hostname) as on $(date)"
        echo $msg
        echo $msg | mail -s "WARNING: $HOST Low disk space ${avail}Gb" $ADMIN
     fi
  fi

done

if [ "${ERR}" == "0" ]; then
   exit 0;
else
   exit 1;
fi

Источник

Источники править

По материалам ru-bacula.