bsplitter – División de FileSets Dinámicos de Bacula para Respaldos en Paralelo

Esta secuencia de comandos le permite enumerar de forma dinámica subdirectorios y archivos en un directorio de respaldo, dividiendo listas de archivos para respaldo clasificados por tamaño.
En el ejemplo de comando:

/opt/bacula/scripts/bsplitter 3 1 /var/lib/pgsql
  • «3» es el número total de FileSets y Jobs. Estos deben ser creados manualmente por el administrador y deben configurarse para ejecutarse en paralelo. Los Jobs deben contener la opción Accurate=yes.
  • «1» es la parte de la copia de seguridad que se realizará. Luego, para cada FileSet, modificará la parte que se respaldará. Ejemplo:

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

  • «/var/lib/pgsql» es el directorio cuyo contenido de la copia de seguridad se dividirá en porciones.

Si está utilizando BWeb, como en la Figura 1, simplemente llame al siguiente script en el campo Incluir de FileSet:

bsplitter - División de FileSets Dinámicos de Bacula para Respaldos en Paralelo 1Figura 1. En BWeb, simplemente inserte en Incluir: \|/opt/bacula/scripts/bsplitter 3 1 /var/lib/pgsql

Siga el script, idealmente guardado en la ruta «/opt/bacula/scripts/bsplitter» de su cliente de copia de seguridad host.

#!/bin/bash
#
# Autoria: Heitor Faria (Copyleft: all rights reversed).
# Orientador: Prof. Julio Neves (http://www.livrate.com.br/).
# Testador: xxxx
#
# Se debe llamar en el sub-recurso INCLUDE del FileSet de bacula-dir.conf, refiriéndose a la copia de seguridad del cliente instalado que quiere dividir el número de subdirectorios:
#
# File = "\\|/opt/bacula/scripts/bsplitter 3 1 /var/lib/pgsql"
#                            <parallelism><parcel><dir_to_split>
#
#
bwdir="/opt/bacula/working"
sname=$(sed 's|/|.|g' <<< $3)
# tiempo mínimo entre la comprobación de archivos nuevos, en minutos. 22 horas estándar
minupdate=1320

if  [ $(find $bwdir/$sname.part* -mmin -$minupdate  2>/dev/null | wc -l) -eq 0 ]
  then
    rm -f $bwdir/$sname.part*
    ListaOrdenada=$(find -L $3 \( -type f -o -type l \) -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[@]}  # Genera una línea con todos los archivos para cada vector.
    for Nome in $TodosArqs     # Divida la lista una por una para crear la pila de archivos
    do
        eval Nome=\${Nome//^/ }
        echo $Nome >> $bwdir/$sname.part$N 
    done
done
fi
cat $bwdir/$sname.part$2

Nota: Los conjuntos de archivos dinámicos no son compatibles con el Exclude de bacula. Las exclusiones deben manejarse en el propio script.

En el ejemplo específico de PostgreSQL, para garantizar la integridad, esta copia de seguridad se realiza a partir de una instantánea LVM montada en otra máquina. De lo contrario, el banco tendría que detenerse durante la copia de seguridad o ponerse en modo de copia de seguridad (por ejemplo, con el complemento pgsql de Bacula Enterprise).

De cualquier manera, bsplitter se puede utilizar para cualquier conjunto grande de archivos del mismo host, para el que desee paralelismo.

Restore

En la restauración, puede concatenar los n conjuntos de trabajos realizados para una única operación de restauración, informando los JobIDs de los trabajos paralelizados. Ejemplo de bconsole:

restore jobid=x,y,z

En BWeb, como se muestra en la Figura 2, también es posible concatenar varios Trabajos en la pantalla de selección de archivos para restauraciones, deseleccionando la opción «Solo Conjunto de Archivos Seleccionado»

bsplitter - División de FileSets Dinámicos de Bacula para Respaldos en Paralelo 2Figura 2. Restaurar varios trabajos de BWeb anulando la selección de «Solo conjunto de archivos seleccionado»

¡Importante! Para la restauración simultánea de múltiples copias de seguridad, deben haberse escrito en diferentes volúmenes/cintas/dispositivos. Una forma de garantizar esto es enviar copias de seguridad de los gráficos a diferentes grupos. Otra forma (más automática y más recomendada para copias de seguridad en disco) es deseleccionar la directiva «PreferMountedVolumes = no» en los dispositivos de bacula-sd.conf.

Disponível em: pt-brPortuguês (Portugués, Brasil)enEnglish (Inglés)esEspañol

Deja una respuesta