Script Criador de Testes de Restauração do Bacula

O seguinte script RunBeforeJob Bacula verifica cada cliente configurado e envia Jobs de restauração para cada um deles, usando os último trabalho de backup terminado. A quantidade de arquivos restaurados aleatoriamente é personalizada e o cliente de restauração é fixo.

#!/bin/bash
#
# Um Script para Bacula Restore Test
#
# Seleciona, aleatoriamente, x (files_per_job) para restaurar de cada Bacula Configured Client para um Restore Client fixo.
#
# Sugestão e local:
#
# Bacula Community: /etc/bacula/scripts/restore_test.sh
# Bacula Enterprise: /opt/bacula/scripts/restore_test.sh
#
# By Heitor Faria - http://www.bacula.com.br | http://bacula.us
# Alterações efetuadas por Wanderlei Hüttel -  https://github.com/wanderleihuttel
# Testes: Molinero - https://github.com/molinux
#
#######

bconsole=$(which bconsole)
restore_client="srv_bacula-fd"
restore_job="Restore_Files"
restore_where="/tmp/bacula_restore"
dir_tmp="/tmp"
files_per_job=10
debug=1 #0-Executa as restauracoes | #1-Apenas imprime os comandos

for client in $(echo ".clients" | ${bconsole} | sed '1,4d' | grep -v "You have messages" | sort);  do
    jobid=$(echo -e "gui on \nlist jobs client=${client} order=desc limit=1 jobstatus=T" | ${bconsole} | sed '1,9d' | grep "|" | cut -d"|" -f 2 | sed 's/\s//g')
    echo "llist files jobid=${jobid}" | ${bconsole} | sed '1,9d' | grep "|" | cut -d"|" -f 2 | sed 's/^[ \t]*//;s/[ \t]*$//' | sort -R | head -n ${files_per_job} > ${dir_tmp}/files_${jobid}.txt
    total_files=$(cat ${dir_tmp}/files_${jobid}.txt | wc -l)
    # Executa apenas jobs com pelo menos 1 arquivo
    if [ $total_files -gt 0 ]; then
        # Debug - Se 0 executa o restore, se 1 apenas imprime os comandos
        if [ $debug -eq 0 ]; then
            echo "restore jobid=\"${jobid}\" client=\"${client}\" restoreclient=\"${restore_client}\" restorejob=\"${restore_job}\" file=\"</tmp/files_${jobid}.txt\"  where=\"${restore_where}\" done yes" | ${bconsole}
        else
            echo "restore jobid=\"${jobid}\" client=\"${client}\" restoreclient=\"${restore_client}\" restorejob=\"${restore_job}\" file=\"</tmp/files_${jobid}.txt\"  where=\"${restore_where}\" done "
        fi
    fi
done

Não esqueça de prover permissão de execução no artigo do script. Exemplo:

chmod o+rx /etc/bacula/scripts/restore_test.sh

Crie um trabalho “Admin” no bacula-dir.conf para executar o script quando desejado. Por exemplo:

Job {
  Name = "CriadorTestesRestore"
  JobDefs = "DefaultJob"
  Type = Admin
  Client=hfaria-K46CB-fd
  Messages = Standard
  Schedule = "test_schedule"
  RunBeforeJob = /etc/bacula/scripts/restore_test.sh
}

Crie uma nova agenda (Schedule) para disparar o script com determinada periodicidade (por exemplo, toda segunda-feira):

Schedule {
  Name = "test_schedule"
  Run = Full  monday at 12:00
}

Verifique o log dos Jobs de Restore e a saúde dos arquivos restaurados dentro do Cliente de Restauração.


 

Disponível em: pt-brPortuguêsenEnglish (Inglês)esEspañol (Espanhol)

Deixe uma resposta