Задача:
При каждом Job'е забэкапленные файлы пишутся в один volume. Volume имеет уникальный label, состоящий из имени клиента, даты и т.д. Вот как-то так:
Pool {
Name = LocalPool
Pool Type = Backup
Storage = LocalBackupStorage
Use Volume Once = yes
Maximum Volume Jobs = 1
Label Format = "${Client}-${Job}-${Type}-${Level}-${Year}${Month:p/2/0/r}${Day:p/2/0/r}-${Hour:p/2/0/r}${Minute:p/2/0/r}-${JobId+}"
}
Проблема:
Инкрементальный job может отработать так, что ни одного файла не забэкаплено, т.к. ничего не изменилось с момента выполнения предыдущего job'а (job bytes = 0). Следующий job в таком случае не создает новый volume, а пишет в предыдущий. Это нас приводит к тому, что содержимое volume не соответствует его названию.
Пробовал вот так вот подпереть костылем:
#!/bin/bash
# Usage:
#
# Job {
# ...
# RunScript {
# RunsWhen = After
# RunsOnFailure = yes
# RunsOnSuccess = yes
# RunsOnClient = no
# Command = "/etc/bacula/scripts/delete_empty_volume.sh %b %v"
# }
# }
#
[[ $# -ne 2 ]] && echo "Wrong argv length!" && exit
job_bytes=$1
shift
volume_name=$@
echo "Job bytes: $job_bytes"
echo "Volume name: $volume_name"
if [[ $job_bytes -eq 0 ]]
then
echo "Volume empty. Delete."
bconsole <<- _EOF_
delete volume="$volume_name"
yes
quit
_EOF_
fi
Какие еще есть варианты решения проблемы?
Используется bacula 7.0.5