El backup es una copia de la informacion sensible de un sistema informatico disponible en otro medio para proteccion de la misma.
En un servidor en produccion normalmente es parte de la planificacion inicial del mismo, por lo que a la hora de tener datos generados los mismos ya estan protegidos. Esta planificacion tiene varios aspectos a considerar siendo algunos de ellos:
1- Programa o aplicacion con que se lleva adelante la tarea
2- Tratamiento que se le efectual a las copias
3- medios en los que se almacenan las copias
4- metodos de recuperacion de los datos
5- documentacion que explique el proceso
En un servidor GNU/Linux se encuentran disponibles varias herramientas para generar copias de seguridad, cada una con mayor o menor complejidad en su funcionamiento.
-Tar, empaqueta directorios y archivos
-rsync, sistema de copia y sincronizacion de samba team
-rdiff-backup, para backups diferenciales e incrementales
-otras soluciones completas como Amanda o Bacula
Debe considerarse si los datos se van a comprimir, encriptar, dividir en tamaño de acuerdo al soporte donde se almacenaran, comprobacion de integridad de datos, etc.
Las copias pueden ser guardadas en Cds, DVDs, en discos remotos, etc. Datos replicados sin compresion ni empaquetado en discos locales para su pronta restauracion.
De acuerdo al volumen del backup en ocaciones puede resultar engorroso encontrar el archivo/s a restaurar, a la vez que en una situacion de daño total en el servidor es muy importante tener en cuenta el metodo de restauracion que posee nuestro sistema de backup
finalmente cuanto mejor documentado este nuestro sistema de backup, menos problematico terminara siendo su administracion
En mi caso particular tengo un servidor de bases de datos y otro de archivos. Para hacer la copia de seguridad me arme un simple script que vuelca las bases de datos a un temporal y lo comprime.
Se rota durante siete dias y empieza a eliminar el mas antiguo
Este backup se copia a una unidad nfs remota, se divide en partes para guardarlo en DVDs regrabables y al a vez tambien queda guardado en otra unidad de disco rigido en el mismo servidor.
Como el dump de la base se realiza todos los dias, un backup incremental no estaria funcionando dado el cambio de fecha y tamaño (o no) de los archivos. Entonces estoy probando si la opcion de backup diferencial funciona bien y solo detecta los agregado de las bases y actualiza esos archivos.
Esto lo realizo con DAR con el que tambien genero controles de integridad de archivos y es posible que mas adelante implemente la encriptacion de las copias.
Para el caso del servidor de archivos, tengo una unidad de disco en el servidor que solo se monta al efecto de sincronizar los datos con rsync y en caso de caidas, solo tengo que montar esa unidad en lugar de la que esta en produccion. Si el daño es total se recupera de la unidad remota por nfs o se recurre a las copias en DVD. Lo demas funciona como el anterior, con el DAR hago copias diarias con eliminacion de las antiguas en un periodo de 7 dias. Para mas adelante voy a implementar copias completas cada 30 dias pero por el momento solo tengo una copia completa inicial.
Las copias estan automatizadas con el Cron y periodicamente hago chequeos manuales de integridad de datos. Esto podria hacerlo en forma automatica tambien, pero he preferido dedicarle un tiempo en persona ya que al mismo tiempo que monto la unidad de disco local para backup para copiarlo a DVD le paso el chequeo CRC.
Scrip de backup de bases:
#!/bin/bash
# Realiza el respaldo de la base de datos en localhost
FECHA=`date -I -d today`
USER="-u user"
CLAVE="-pclave"
MYSQL_DATABASES="OpenBiblio biblioteca geeklog libros webbiblio2 webbiblio3"
# Comprueba que existe el temporal
! test -d /tmp/bases && mkdir --parent /tmp/bases
# dump de bases al temporal
for base in $MYSQL_DATABASES
{
mysqldump --opt $USER $CLAVE $base > /tmp/bases/$base.sql
}
# genera el tarball en la unidad remota nfs
cd /tmp/bases
/bin/tar -zcvf /backup/databases.$FECHA.tgz *
# borra el temporal
rm -f /tmp/bases/*
# borra el backup 7 dias mas viejo
rm -f /backup/databases.`date -d "$FECHA 7 day ago" +%Y-%m-%d`.tgz
# monta la unidad de backup local
# Realiza el respaldo de la base de datos en localhost
FECHA=`date -I -d today`
USER="-u user"
CLAVE="-pclave"
MYSQL_DATABASES="OpenBiblio biblioteca geeklog libros webbiblio2 webbiblio3"
# Comprueba que existe el temporal
! test -d /tmp/bases && mkdir --parent /tmp/bases
# dump de bases al temporal
for base in $MYSQL_DATABASES
{
mysqldump --opt $USER $CLAVE $base > /tmp/bases/$base.sql
}
# genera el tarball en la unidad remota nfs
cd /tmp/bases
/bin/tar -zcvf /backup/databases.$FECHA.tgz *
# borra el temporal
rm -f /tmp/bases/*
# borra el backup 7 dias mas viejo
rm -f /backup/databases.`date -d "$FECHA 7 day ago" +%Y-%m-%d`.tgz
# monta la unidad de backup local
mount /dev/sda4 /mnt/backup
dar -c /mnt/backup/databases -R /backup -A /mnt/backup/databases1/completo.dar
umount /mnt/backup
Este script este editado a partir de otros varios que he visto dando vueltas en internet y he tomado lo que necesitaba para cumplir con mis necesidades. He colocado solo algunas variables y no le incorpore avisos, ni exit codes ni logs, etc. que son los adicionales que finalmente me hicieron decidir por armar algo que haga solamente lo que necesito.
Hay conceptos que corregir lo que ire descubriendo con el uso, como por ejemplo de que manera se maneja los diferenciales, no comprimir el tarbal sino enviar los archivos planos al DAR, etc.
En una segunda oportunidad les traere la guia de como restaurar archivos, directorios, restaurar parcial o totalmente.
Sysadmin
Colegio San Esteban
Bariloche