martes, 6 de agosto de 2013

Respaldos Automaticos con Rsync

Acá les dejo un Script para realizar Respaldos Automáticos con Rsync en Debian, me funcionó y es bastante práctico.

Rsync es una aplicación libre para sistemas de tipo Unix y Microsoft Windows que ofrece transmisión eficiente de datos incrementales, que opera también con datos comprimidos y cifrados. Mediante una técnica de delta encoding, permite sincronizar archivos y directorios entre dos máquinas de una red o entre dos ubicaciones en una misma máquina, minimizando el volumen de datos transferidos. Una característica importante de rsync no encontrada en la mayoría de programas o protocolos es que la copia toma lugar con sólo una transmisión en cada dirección. rsync puede copiar o mostrar directorios contenidos y copia de archivos, opcionalmente usando compresión y recursión. (Wikipedia)

Funciona para realizar respaldos hacia sitios remotos, por lo que en ambos extremos se debe instalar rsync, ejecutar el siguiente Comando:

 # aptitude install rsync

Adicionalmente se necesita instalar sshpass para pasarle la Contraseña del Servidor Remoto en mismo Script y no realizarlo de manera interactiva:

 # aptitude install sshpass

Copiar dentro de un archivo .sh todas las líneas que siguen y adaptarlo a la necesidad:

 # vim archivo.sh

 #!/bin/bash
 # Creado: 070813
 # Respaldo Automatizado Servidores en Servidor Remoto
 # Instalar rsync y sshpass: aptitude install rsync sshpass
 logres=/root/log_res.log
 resdir="/home/jrojas/ /var/www"
 nombresrv=`hostname`
 dirip=`ifconfig | grep "inet addr:10.100" | cut -d":" -f2 | cut -d" " -f1`
 fecha=`date +%d-%m-%Y-%H%M`
 echo "Iniciando el Proceso de Respaldo!" > $logres-$fecha
 date >> $logres-$fecha
 echo "Enviando Archivos: " >> $logres-$fecha
 sshpass -p 'contraseña_remoto' rsync -avzb --inplace --delete --backup-dir=Respaldo_$fecha -e ssh --exclude-from 'backupexcluir.txt' $resdir usuario-remoto@xx.xx.xx.xx:./$nombresrv-$dirip >> $logres-$fecha
 sshpass -p 'contraseña-remoto' rsync -avz -e ssh $logres-$fecha usuario-remoto@xx.xx.xx.xx:./$nombresrv-$dirip
 rm $logres-$fecha
 exit 0

 # sshpass -p: para pasarle la contraseña dentro del script del Servidor Remoto.
 # La opcion -a engloba varias funciones de rsync, por ejemplo:
 # -r: para que recorra toda la estructura de directorios
 # -l: para que mantenga enlaces simbolicos
 # -p: para que mantenga permisos en archivos y subdirectorios
 # -t: para que mantenga la hora y fecha
 # -g: para que mantenga grupo
 # -o: para que mantenga dueño (owner)
 # -D: para que manenga archivos de dispositivo (root)
 # En resumen el modo -a es el modo Archive.
 # -v: modo "verbose", muestra por consola el progreso.
 # -z : activa compresión.
 # -b: modo backup, para poder usar la opcion --backup-dir.
 # --inplace actualiza archivos en el lugar de destino.
 # --delete: borra en el destino los archivos que ya no estén en el origen
 # --backup-dir: Con esta opcion se puede crear un directorio con todos los archivos modificados y
 # eliminados en origen, es decir, --delete borra lo que se halla eliminado en origen pero con
 # esta opción antes de borrar el archivo es copiado en otra carpeta del destino.
 # -e "Opciones ssh": especifica protocolo para envío a Servidor Remoto
 # --exclude-from: aquí se añade una lista de archivos a excluir a la hora de hacer el respaldo.

O puedes visualizar el script solamente en este enlace.

Guardarlo y colocar en crontab para que se ejecute automáticamente cada cierto tiempo, dependiendo de la necesidad, por ejemplo:
 # vim /etc/crontab

55 11   * * 2   root    /root/archivo.sh


Saludos y espero les sirva de ayudar, cualquier duda pueden preguntar.

@jomarore