В процессе многолетней эксплуатации Bacula у меня возникла ситуация когда мониторинг ругался что диск заполнен, а Bacula даже не собиралась удалять старые тома. Пришлось чистить ручками.
UPDATED: Автоматизация процесса.
Запускаем консоль
# bconsole
Переходим в режим SQL запросов к каталогу
*sqlquery Entering SQL query mode. Terminate each query with a semicolon. Terminate query mode with a blank line. Enter SQL query:
select concat('prune yes volume=',VolumeName) from Media where LastWritten < '2013-01-01' order by VolumeName;
На выходе список был обрамлён псевдографикой и я «выкосил» её поточным редактором sed и только после этого запостил список прямо в bconsole из клипборда. Не забудьте выйти из SQL режима bconsole.
*prune yes volume=s01.youngblog.hoster-ok.com_Monthly.2013-02-12-09-53 ....
Командой приведённой ниже выводится список тех томов которые bacula «почистит» при первой необходимости в свободном пространстве для новых бэкапов. В выводе должны присутствовать тома которые были только что помечены на удаление. Эту команду нужно давать в режиме SQL запросов к каталогу как было описано ранее.
select * from Media where VolStatus = 'Purged';
При желании освободить место на диске немедленно нужно удалить тома сначала командой delete, и только потом удалить файлы с диска.
Для этого способом который приводился выше получаем такой же список но со словом delete.
select concat('delete yes volume=',VolumeName) from Media where LastWritten < '2013-01-01' order by VolumeName;
отчищаем от псевдографики и вставляем в bconsole.
* delete yes volume=s01.youngblog.hoster-ok.com_Monthly.2013-02-12-09-53
Теперь эти записи удалены из каталога что можно проверить выполнив первую команду select. Обратите внимание что команда delete удаляет только записи из каталога и все связанные с ней задания если они есть. Но она не касается файлов бэкапа которые хранятся на диске. Поэтому файлы нужно удалить вручную. Я взял этот же список из команды select и заменив в нём начало “delete yes volume=”на “rm ” с пробелом получил список команд который выполнил в bash в целевом каталоге и удалил эти самые файлы с диска. Конечно речь идёт о списке в клипборде так как select после удаления записей вернёт пустое множество.
Во время просмотра таблицы Media обнаружились записи со статусом Error я их тоже удалил. А потом такой командой проверил что вывод пустой.
select * from Media where VolStatus = 'Error';
При работе список я вставлял из клипборда прямо в bconsole. Но при желании список можно скармливать файлик через и конвеер stdin:
for vol in "список строк что скармливать"; do echo "delete yes volume=$vol" done | bconsole