20 sept 2010

Sistema de Backup con rsync

Hoy me encuentro con la necesidad de poseer un sistema de backups ágil y dinámico para los sites que tengo hosteados. Ya había leído y escuchado de rsync, aunque nuca visto su potencial. Y debo decir que es magnifico, permite realizar backups de directorios completos manteniendo sus atributos, backups incrementales de los datos que "solo han sido modificados" (discerniendo los  archivos que han sido modificados y los suprimidos) .... EPETACULARRR !!!
Basta de vueltas aca va mi sencillo script:



#!/bin/bash
#Develepr By: Alejandro Andino =)
#set -x
export PATH=$PATH:/usr/bin:/usr/local/bin:/bin
# Directorio que se quiere backapear
from="/home/usr/"
# Donde se va a guardar el backup. Este es un site remoto mount.cifs
to="/home/usr/Storage"
# Patrones que no se copiaran desde el source
exclude=$HOME/rsync_pattern.txt
# Nombre del dir que contendra los cambios incrementales
incremental_dir=`date +%d-%m-%Y_%H%M`
# Opciones rsync
rsync_option="--force --ignore-errors --delete --delete-excluded --exclude-from=${exclude} --backup --backup-dir=${to}/${incremental_dir} -av"

/usr/bin/rsync $rsync_option $from $to

#NOTA:
#       1) Se realiza una copia completa del directorio en $to
#       2) Se crea el directorio incremental $to/$incremental (vacio la primera vez)
#               Lugar donde se almacenaran los archivos modificados y eliminados.
#       3) Si se crea un nuevo archivo/dir esta aparece por primera vez dentro del dir
#               de backup principal (main), no en el incremental.

Agregamos en /etc/rc.local el recurso remoto donde se almacena los backups de modo que cada vez que se inicie el equipo este el mismo disponible.

mount.cifs //StorageHost/DirBackup /home/usr/Storage/ -o user=usrDomain,domain=xxx,password=xxxx,rw,uid=usrOwnerFiles

Y bualá... un sistema de backup a nuestra medida, solo queda programarlo en el crontab.