El proceso que se seguirá para realizar una copia de seguridad es el siguiente:
Bacula Director Daemon(backuo01) se comunica con Bacula Client Daemon para que inicie la copia de seguirdad de virtual01.
- Bacula Client Daemon(produccion01) sera el encargado de comprobar el estado de virtual01. Y si se encuentra corriendo suspenderá.
La copia de seguridad de una maquina completa debe realizarse con la maquina parada o suspendida. De hacerse de otro modo los datos que copiemos pueden estar corruptos y en caso de tener que restaurar los datos no se podría asegurar que en caso de tener que restaurar la maquina virtual, esta funcione correctamente. - Una vez suspedida sera produccion01 el encargado de ejecutar la instrucción reflink que proporcionará una copia del fichero de la maquina virtual en suspensión.
- Con esta copia de virtual01, sera produccion01 la encargada de restaurar a virtual01 de su estado de suspensión, haciendo que virtual01 vuelva ha estar en ejecución.
- Una vez que se tiene una copia de la maquina de la cual se quiere realizar el backup y la original se encuentra en ejecución se comprime, lo que hará que disminuya el tiempo transferencia de la copia a backupstorage. y ahorrando espacio en disco en el backupstorage.
- El siguiente paso es que el Bacula Client Daemon(produccion01) se ponga en contacto con Bacula Storage Daemon(desarrollo01) para que se realice el almacenamiento de virtual01 en el backupstorage.
- Por último si la copia se ha ejecutado correctamente se borran los ficheros creados tanto por la instrucción reflink como por el proceso de compresión .
Una vez explicado el proceso que se va ha seguir para realizar las copias de seguridad se pasa a configurar el fichero Bacula Director Daemon, alojado en backup01 el nuevo Job. Job es la nomenclatura que utiliza Bacula para definir las tareas de respaldo que se quieren programar. Para definir el nuevo Job es necesario añadir 3 nuevos campos a este fichero de configuración. Se añade el cliente que realizara esta nueva tarea:
Client { Name = produccion01-fd Address = produccion01 # IP FDPort = 9102 Catalog = MyCatalog Password = "produccion01-fd.password" File Retention = 1 year Job Retention = 1 year AutoPrune = yes Maximum Concurrent Jobs = 10 }
Client { Name = produccion01-fd Address = produccion01 # IP FDPort = 9102 Catalog = MyCatalog Password = "produccion01-fd.password" File Retention = 1 year Job Retention = 1 year AutoPrune = yes Maximum Concurrent Jobs = 10 } |
Se añade a continuación donde el cliente almacenara la copia de seguridad:
Storage { Name = storage_virtual01_full" Address = desarrollo01 SDPort = 9103 Password = "desarrollo01-sd.password" Device = backup_erp01_full Maximum Concurrent Jobs = 10 Media Type = file_virtual01_full" } |
Por ultimo se añade el Job que el cliente va a realizar.
Schedule { Name = "schedule_virtual01_full" Run = Level=Full Pool=pool_mensual on 1,16 at 3:00 Run = Level=Full Pool=pool_quincenal sun-sat at 3:00 } FileSet { Name = "fileset_virtual01_full" Include { Options { signature = SHA1; onefs = yes ; } File = /storage/virtual01-bk . tar .gz } } Job { Name = "job_virtual01_full" Type = Backup Level = Full Client = produccion01-fd FileSet = "fileset_virtual01_full" Schedule = "schedule_virtual01_full" Storage = storage_virtual01_full" Messages = Standard Pool = pool_anual Full Backup Pool = pool_mensual Incremental Backup Pool = pool_quincenal Priority = 11 Write Bootstrap = "/apps/bacula/opt/bacula/working/virtual01_full.bsr" ## Script running on client Client Run Before Job = "/bacula/script/vm_stop.sh virtual01" Client Run After Job = "/bacula/script/vm_start.sh virtual01" } |
File = /storage/virtual01-bk . tar .gz |
Y los scripts que se van a encargar de parar y restaurar virtual01 y borrar los ficheros creados durante la copia de seguridad. Estos scripts se detallan mas adelante.
Client Run Before Job = "/apps/bacula/script/vm_stop.sh virtual01" Client Run After Job = "/apps/bacula/script/vm_start.sh virtual01" |
Si desea conocer en profundidad el resto de parámetros configurados acudir a la documentación de Bacula que puede encontrase en su pagina web (www.bacula.org)
Una vez definido el Job en el Bacula Director Daemon, se debe crear Device (lugar en el que se almacenara la copia de seguridad de virtual01) en el Bacula Storage Daemon (desarrollo01), para ello se edita el fichero de configuración (.../bacula/etc/bacula-sd.conf) añadiendo las siguientes lineas.
Device { Name = backup_virtual01_full Media Type = file_erp01_sql Archive Device = /backup/vm/virtual01 LabelMedia = yes ; Random Access = Yes; AutomaticMount = yes ; RemovableMedia = no; AlwaysOpen = no; Maximum Concurrent Jobs = 10 } |
Por ultimo, se deben crear dos scripts encargados de suspender la maquina virtual para realizar la copia y de volver a restaurarla y el script que borra la copia de seguridad ya copiada a storagebackup. Estos scripts deben estar almacenados en produccion01 (Bacula Client Daemon)
vm_stop.sh
##/bin/bash PASS=` cat /root/pass ` MACHINE=$1 LOGFILE= /bacula/log/log_ $MACHINE.log DATE=` date +%d%m%Y` echo " " >> $LOGFILE echo "-------------------------------" $MACHINE "--" ` date +%d`-` date +%m`-` date +%Y` ` date +%H`:` date +%M` "---------------------------------------" >> $LOGFILE ESTADO=`flexadm guest-status -p $PASS -g $MACHINE` if [ $ESTADO = "running" ] then echo "`date +%d`-`date +%m`-`date +%Y` `date +%H`:`date +%M` $MACHINE esta en ejecucion, se suspende..." >> $LOGFILE flexadm -p $PASS -g $MACHINE suspend -w sleep 300 ESTADO=`flexadm guest-status -p $PASS -g $MACHINE` if [ $ESTADO = "running" ] then echo "`date +%d`-`date +%m`-`date +%Y` `date +%H`:`date +%M` $MACHINE No se ha suspendido después de 5 minutos se suspende la copia." >> $LOGFILE flexadm -p $PASS -g $1 restore -w #Asegurar que la maquina queda en ejecucion elif [ $ESTADO = "suspended" ] then echo "`date +%d`-`date +%m`-`date +%Y` `date +%H`:`date +%M` $MACHINE se ha suspendido, se crea backup ($MACHINE-bk)." >> $LOGFILE LUGAR=`flexadm -p $PASS -g $1 guest-images` reflink $LUGAR $LUGAR-bk if [ $? - eq 0 ] then if [ -f $LUGAR-bk ] then echo "`date +%d`-`date +%m`-`date +%Y` `date +%H`:`date +%M` $MACHINE-bk creado, se comprime ($MACHINE-bk_$DATE.tar.gz)." >> $LOGFILE fi tar -cf $LUGAR-bk_$DATE. tar .gz $LUGAR-bk if [ $? - eq 0 ] then if [ -f $LUGAR-bk_$DATE. tar .gz ] then echo "`date +%d`-`date +%m`-`date +%Y` `date +%H`:`date +%M` $MACHINE-bk comprimida ($MACHINE-bk_$DATE.tar.gz), se borra $MACHINE-bk." >> $LOGFILE rm -rf $LUGAR-bk if [ $? - eq 0 ] then if [ ! -f $LUGAR-bk ] then echo "`date +%d`-`date +%m`-`date +%Y` `date +%H`:`date +%M` $MACHINE-bk borrada." >> $LOGFILE echo "`date +%d`-`date +%m`-`date +%Y` `date +%H`:`date +%M` Backup de $MACHINE creado correctamente." >> $LOGFILE fi else echo "`date +%d`-`date +%m`-`date +%Y` `date +%H`:`date +%M` ERROR AL BORRAR $MACHINE-bk" >> $LOGFILE fi fi else echo "`date +%d`-`date +%m`-`date +%Y` `date +%H`:`date +%M` ERROR AL COMPRIMIR $MACHINE-bk NO SE HA CREADO ($MACHINE-bk_$DATE.tar.gz)" >> $LOGFILE fi else echo "`date +%d`-`date +%m`-`date +%Y` `date +%H`:`date +%M` ERROR AL CREAR $MACHINE-bk" >> $LOGFILE fi fi elif [ $ESTADO = "suspended" ] then echo "`date +%d`-`date +%m`-`date +%Y` `date +%H`:`date +%M` $MACHINE suspendida" >> $LOGFILE fi echo "--------------------------------------------------------------------------------------------------------" >> $LOGFILE |
Este script es el encargado de borrar la copia de la maquina virtual, virtual01 que ya ha sido guardada en storagebackup.
vm_stop.sh
#!/bin/bash
PASS=`
cat
/root/pass
`
MACHINE=$1
LOGFILE=
/bacula/log/log_
$MACHINE.log
DATE=`
date
+%d%m%Y`
echo
" "
>> $LOGFILE
echo
"-------------------------------"
$MACHINE
"--"
`
date
+%d`-`
date
+%m`-`
date
+%Y` `
date
+%H`:`
date
+%M`
"---------------------------------------"
>> $LOGFILE
ESTADO=`flexadm guest-status -p $PASS -g $MACHINE`
if
[ $ESTADO =
"running"
]
then
echo
"`date +%d`-`date +%m`-`date +%Y` `date +%H`:`date +%M` $MACHINE esta restaurada"
>> $LOGFILE
LUGAR=`flexadm -p $PASS -g $MACHINE guest-images`
if
[ -f $LUGAR-bk.
tar
.gz ]
then
rm
-rf $LUGAR-bk.
tar
.gz
if
[ $? -
eq
0 ]
then
if
[ ! -f $LUGAR-bk.
tar
.gz ]
then
echo
"`date +%d`-`date +%m`-`date +%Y` `date +%H`:`date +%M` $MACHINE-bk.tar.gz borrado con exito"
>> $LOGFILE
else
echo
"`date +%d`-`date +%m`-`date +%Y` `date +%H`:`date +%M` $MACHINE-bk.tar.gz no se ha borrado"
>> $LOGFILE
fi
else
echo
"`date +%d`-`date +%m`-`date +%Y` `date +%H`:`date +%M` ERROR AL BORRAR $MACHINE-bk.tar.gz"
>> $LOGFILE
fi
else
echo
"`date +%d`-`date +%m`-`date +%Y` `date +%H`:`date +%M` $MACHINE-bk.tar.gz no existe"
>> $LOGFILE
fi
fi
echo
"--------------------------------------------------------------------------------------------------------"
>> $LOGFILE