Distintas formas de backup
Particularmente desde que conozco la opción --link-dest de rsync no soy el mismo. He ido mejorando poco a poco la política de copias, empezando por no tener ninguna hasta llegar al sistema actual que intento explicar.
Fast Backup
Referenciada anteriormente. Se trata de una copia de seguridad rápida, para ayer como suelen decir los jefes, en máquinas con pocos datos y que se pretenden reinstalar en el mínimo tiempo:# mkdir -p /root/Backup/ # cd Backup/ # cp -r /etc ./ # cp -r /usr/local/etc ./ # pkg_info >> pkg_info.txt # for i in `pkg_info | cut -f1 -d" "`; do pkg_info -L $i >> pkg_info-l.txt; done # tar cfvz bck-`hostname -s`-`date "+%Y%m%d"`.tar.gz ./También válido como sugiere Borja:
# mkdir /home/backup # cd /home/backup # tar -jcvvf fullbackup-`hostname -s`-`date +%F`.tar.bz2 /etc /usr/local/etc /var/db/pkgOjo con el tamaño de la partición donde se almacena, por aquello de no llenarla. (nótese que es basada en BSD, pkg_info se tendría que sustituir por *ponga aquí su gestor de paquetes*).
Basic Backup
Referenciada anteriormente. Es una copia básica de cada uno de los directorios que nos parezcan importantes a un dispositivo de almacenamiento a través de rsync. Es extrapolable a máquinas en distintas redes siempre y cuando el acceso remoto sea factible:#!/usr/local/bin/bash # Montando la partición de seguridad /sbin/mount /backup # Sincronizando bbdd y htdocs /usr/local/bin/rsync --progress --delete -lprtvvzog /var/lib/mysql/ /backup/mysql/ /usr/local/bin/rsync --progress --delete -lprtvvzog /var/www/ /backup/htdocs/ # Copiando partes importantes del sistema /usr/local/bin/rsync --progress --delete -lprtvvzog /etc/ /backup/etc/ /usr/local/bin/rsync --progress --delete -lprtvvzog /var/log/messages/ /backup/logs/ /usr/local/bin/rsync --progress --delete -lprtvvzog /home/ /backup/home/ # Desmontando la partición de seguridad /sbin/umount /backup
Complete Backup
Basándonos en la genial idea de Juanjo y arreglando el script a mis necesidades he parido lo siguiente:#!/bin/bash # ------------------------------------------------------------ # Variables Generales # ------------------------------------------------------------ COUNT=168 # numero de rotaciones BASE=backup # nombre base para las copias WORK=/media/backup2/muro/ # directorio de trabajo IP=192.168.0.1 # ip del servidor a copiar LOGDIR=/media/backup2/log/ LOGNAME=backup_muro.`date '+%d.%m.%Y_%H:%M'`.log EMAIL_ADMIN=logs@gmail.com CMD_RSYNC=/usr/bin/rsync # ------------------------------------------------------------ # Directorios # ------------------------------------------------------------ SRCDIR=( /etc/ /bin/ ) DSTDIR=( /sys/etc/ /sys/bin/ ) # --------------------------------------------------------- # Verificamos que los arrays tienen los mismos elementos # --------------------------------------------------------- SRCNUM=${#SRCDIR[@]} DSTNUM=${#DSTDIR[@]} if [ $SRCNUM -ne $DSTNUM ]; then echo "Los arrays son desiguales" exit fi # ------------------------------------------------------------ # Movemos $base.0 a $base.1 para dej last backup en 0 # Restamos uno alum de elementos del array (empieza en 0) # Y empezamos la copia de seguridad SOLO si la IP responde # al ping que enviamos # ------------------------------------------------------------ if ping -c 1 $IP >/dev/null 2>&1 then cd $WORK k=$COUNT rm -rf $BASE.$k while [ $k -gt 0 ]; do mv $BASE.$(($k-1)) $BASE.$k 2> /dev/null mv $BASE.$(($k-1))-info $BASE.$k-info 2>/dev/null k=$(($k-1)) done for i in `seq 0 $(($SRCNUM-1))`; do # Creamos los directorios correspondientes echo "mkdir -p $BASE.0${DSTDIR[$i]}" # Sincronizamos echo "$CMD_RSYNC -lprtvvzog -e ssh --link-dest=$WORK$BASE.1${DSTDIR[$i]} root@$IP:${SRCDIR[$i]} $WORK$BASE.0${DSTDIR[$i]}" done # Reportando la informacion echo "Rotated on `date '+%d.%m.%Y_%H:%M'`" > $BASE.0-info cat $LOGDIR/$LOGNAME | mail -s "$LOGNAME" $EMAIL_ADMIN else echo "$IP no responde" exit fi # EOFDonde las dos primeras secciones son las configurables. Variables generales que hablan por si mismas y dos arrays con los directorios a backupear, $SRCDIR para el origen y $DSTDIR para el destino dentro del directorio base ($WORK).
Algo es algo y tener copias completas ocupando (tanto en disco como en ancho de banda) como incrementales no tiene precio. Claro que este script es mejorable, así que ideas, sugerencias y críticas a los comentarios.
Comentarios
Me dio por mirarlo y la verdad es que es muy muy comodo. Con un simple `rdiff-backup dir_origen dir_destino` esta herramienta ya hace un copia incremental del directorio dir_origen sobre dir_destino, y luego tu puedes hacer un `rdiff-backup restore` para recuperar la ultima copia (que tambien puedes recuperar con cp por que almacena los datos "tal cual") o `rdiff-backup -restore-as-of X` para recuperar la copia tal cual estaba el dia X (con fechas y un monton de opciones mas.
Desde luego, una opcion a tener en cuenta rdiff-backup.