Respaldo incremental usando rsync

Cuando deseamos respaldar una aplicación o sitio web que es muy pesado usamos respaldos incrementales y no diferenciales para ahorrar espacio de almacenamiento.

El siguiente es un script que muestra como hacer un respaldo incremental con una política de retención de 30 días usando rsync.

#!/bin/sh

#La fecha de hoy
TODAY=`date '+%d-%m-%Y'`

#La fecha de ayer
DAY1=`date '+%d-%m-%Y' -d "1 day ago"`

#La fecha hace 30 dias
DAY30=`date '+%d-%m-%Y' -d "30 days ago"`

#Directorio de origen
SRC="/var/www/htdocs/mi_sitio_web"

#Directorio de destino
TRG="/backup/mi_sitio_web/$TODAY"

#Directorio de enlace
LNK="/backup/mi_sitio_web/$DAY1"

#Eliminar el respaldo de hace 30 dias en caso de existir
if [[ -d /backup/mi_sitio_web/$DAY30 ]]; then
	rm -rf /backup/mi_sitio_web/$DAY30
fi

#Ejecutar respaldo incremental
rsync -avh --delete --link-dest=$LNK $SRC $TRG

*Nota: Este script asume que ya tienes un respaldo completo en el directorio /backup/mi_sitio_web/

Explicación:

La parte fundamental en este script es la opción --link-dest. El uso común de rsync es de las siguientes 2 formas:

rsync -a /alfa /beta

Este comando copia el directorio alfa y todo su contenido dentro del directorio beta

rsync -a  /alfa/ /beta

Este comando copia el contenido del directorio alfa dentro del directorio beta

rsync compara el contenido del directorio de origen contra el directorio de destino y copia las diferencias haciendo una sincronización del contenido pero, cuando usamos la opción --link-dest le decimos a rsync que compare contra un directorio diferente para hacer la sincronización. Ejemplo

rsync -a --link-dest=/gama /alfa /beta

En este ejemplo le estamos diciendo a rsync que compare a alfa contra gama y sincronice en “beta” haciendo un enlace entre ellos. Usando esto a nuestro favor es como logramos hacer respaldos incrementales utilizando rsync.

Deja tus comentarios y/o sugerencias