Ir para o conteúdo
ou

Software livre Brasil

Heitor Medrado de Faria

 Voltar a Blog
Tela cheia

bsplitter – Divisão Dinâmica de FileSets do Bacula para Backups paralelos

21 de Setembro de 2020, 0:29 , por Bacula do Brasil - 0sem comentários ainda | Ninguém está seguindo este artigo ainda.
Visualizado 7 vezes

Este script permite listar dinamicamente subdiretórios e arquivos de um diretório de backup, divindo listas de arquivos para backup classificadas por tamanho.
No exemplo do comando:

/opt/bacula/scripts/bsplitter 3 1 /var/lib/pgsql
  • “3” é o número total de Jobs e FileSets. Estes precisam ser criados manualmente pelo administrador, e devem ser configurados para execução em paralelo.
  • “1” é a parcela do backup que será realizado. Então para cada FileSet, você modificará a parcela que será backupeada. Exemplo:

FileSet1: bsplitter 3 1 /var/lib/pgsql
FileSet2: bsplitter 3 2 /var/lib/pgsql
FileSet3: bsplitter 3 3 /var/lib/pgsql

  • “/var/lib/pgsql” é o diretório cujo conteúdo do backup será fracionado em parcelas.

Se estiver usando BWeb, como na Figura 1, basta chamar o script a seguir no campo Include do FileSet:

Figura 1. No BWeb, basta inserir no Include: \|/opt/bacula/scripts/bsplitter 3 1 /var/lib/pgsql

Segue o script, a ser salvo idealmente no caminho “/opt/bacula/scripts/bsplitter” de seu host Cliente do backup.

#!/bin/bash
#
# Autoria: Heitor Faria (Copyleft: all rights reversed).
# Orientador: Prof. Julio Neves (http://www.livrate.com.br/).
# Testador: xxxx
#
# Deve ser chamado no sub-recurso INCLUDE do FileSet do bacula-dir.conf, referente ao backup do cliente instalado que deseja fracionar a quantidade de subdiretórios:
#
# File = "\\|/opt/bacula/scripts/bsplitter 3 1 /var/lib/pgsql"
#                            <parallelism><parcel><dir_to_split>
#
#
bwdir="/opt/bacula/working"
sname=$(sed 's|/|.|g' <<< $3)
# tempo mínimo entre a verificação de novos arquivos, em minutos. 22 horas padrão
minupdate=1320

if  [ $(find $bwdir/$sname.txt -mmin -$minupdate  2>/dev/null | wc -l) -eq 0 ]
  then
    rm -f $bwdir/$sname.part*
    ListaOrdenada=$(find $3 -type f -printf "%s\t%p\n" | sort -nr | cut -f2  | sed 's/ /^/')  # subst o espaço por ^ para não quebrar
    ApontaVet=o
    Sinal=1
    while read Arq
      do
        let ApontaVet+=Sinal
           ((ApontaVet > $1)) && {
              let ApontaVet--
              let Sinal*=-1
           }
           ((ApontaVet < 1)) && {
              ApontaVet=1
              let Sinal*=-1
           }
       eval V$ApontaVet+='($Arq)'
    done < <(echo "$ListaOrdenada")
for ((N=1; N<=$1; N++))
do
    eval TodosArqs=\${V$N[@]}  # Gera uma linha com todos arquivos para cada vetor
    for Nome in $TodosArqs     # Desmembra a lista um a um para criar a pilha de arquivos
    do
        eval Nome=\${Nome//^/ }
        echo $Nome >> $bwdir/$sname.part$N 
    done
done
fi
cat $bwdir/$sname.part$2

Obs.: FileSets dinâmicos não são compatíveis com o Exclude do bacula. Exclusões devem ser tratadas no próprio script.

No exemplo específico do PostgreSQL, para garantia de integridade, este backup está sendo feito de um snapshot de LVM montado em outra máquina. De outra maneira o banco teria de ser parado durante o backup ou colocado em modo backup (ex.: com o plugin Bacula Enterprise pgsql).

De qualquer maneira, o bsplitter pode ser utilizado para qualquer conjunto grande de arquivos de um mesmo host, para o qual se deseja paralelismo.

Restore

Na restauração, você pode concatenar os n conjuntos de jobs feitos para uma única operação de restore, informando os jobids dos jobs paralelizados. Exemplo bconsole:

restore jobid=x,y,z

No BWeb, como exibido na Figura 2, também é possível concatenar diversos Jobs na tela de seleção de arquivos para restores, desmarcando a opção “Only Selected Fileset”

Figura 2. Restauração múltiplos Jobs BWeb, desmarcando “Only Selected Fileset”

 


Fonte: http://www.bacula.lat/bsplitter-divisao-dinamica-de-filesets-do-bacula-para-backups-paralelos/

0sem comentários ainda

Enviar um comentário

Os campos são obrigatórios.

Se você é um usuário registrado, pode se identificar e ser reconhecido automaticamente.