viernes, 29 de abril de 2011

Script de copia de seguridad de documentos locales con rsync

Hoy os dejo un script para que podáis haceros una copia de seguridad automática cada 10 minutos de un directorio local a otro directorio local y a un directorio externo en un disco usb fat32.

Simplemente copiais el script, lo rellenais con vuestros datos (directorios, usuario), lo poneis en el crontab (crontab -e usuario) y voila, cada 10 min todos los cambios que hagais en la carpeta de origen se replicaran a la carpeta de destino local y al disco externo. Al usar rsync solo se transfieren los cambios y no consume muchos recursos.

El script esta muy bien documentado y es autoexplicativo.

#!/bin/bash

# Nombre: miscript.sh
# Localización del script: /home/usuario/scripts/miscript.sh
# Versión: 1.0.0
# Permisos: 770 usuario: usuario
# Autor: Francisco J. Bejarano
# Descripción:
# Realiza una copia de seguridad del directorio origen a un directorio local
# y a un directorio en disco externo con fat32
#
# Log: /home/usuario/Logs/rsync/doc_rsync_fecha.log
#
# Comentarios: -
#
# Frecuencia: crontab -e usuario
# Sincronización cada 10 min.
# */10 * * * * /home/usuario/scripts/miscript.sh

# Parámetros de configuración
# Aplicación rsync (si no lo teneis instalado poneis el siguiente comando en consola 
# sudo aptitude install rsync 
RSYNC_BIN="/usr/bin/rsync"

# Los directorios debeis tenerlos creados.
# Importante mantener la barra final en rutas de origen y destino de rsync
RUTA_ORIGEN="/home/usuario/Documentos/"
RUTA_DESTINO="/home/usuario/Backups/Documentos/"
RUTA_DESTINO_USB="/media/DISCOUSB/Backup/Documentos/"

# En el directorio de logs se guardará el registro de los cambios.
RUTA_LOG="/home/usuario/Logs/rsync"
LOG_FILE="doc_rsync-`date +%Y%m%d-%H%M%S`.log"

# Mantenemos permisos, propietarios, etc. Verbosity para el log y compresion.
# -a equivale a las opciones -rlptgoD (no -H,-A,-X)
# --delete elimina los ficheros en el destino que se eliminan en el origen.
#   si no quereis que se eliminen podeis usar las opciones
# --backup --backup-dir=/directorio/cambios_`date +%Y%m%d-%H%M%S` o eliminar la opcion 
# --delete.
RSYNC_OPT="-avh --delete --log-file=$RUTA_LOG/$LOG_FILE"

# Funcion que realiza la sincronización en el directorio local de backup
# y, si está montado el USB, en el disco externo.

function sincronzacion {

 # Nos aseguramos de que existe el directorio de Log
 if [ ! -d "$RUTA_LOG" ] ; then
     mkdir -p $RUTA_LOG
 fi
 
 # Sincronizacion a directorio local
 $RSYNC_BIN $RSYNC_OPT $RUTA_ORIGEN $RUTA_DESTINO
 
 # Sincronizacion a USB externo FAT32
 if [ -d "$RUTA_DESTINO_USB" ] ; then
     # Cambiamos las opciones ya que es un sistema de ficheros FAT32
            # y eliminamos los permisos, propietario, etc (-a)
            # -z comprimimos los ficheros y los comentarios anteriores de las
            # opciones de rsync también valen aquí.

     RSYNC_OPT="-rltvzh --delete"
     $RSYNC_BIN $RSYNC_OPT $RUTA_ORIGEN $RUTA_DESTINO_USB
 fi
 sync
} 

# Funcion para eliminar los logs de rsync mayores a 3 dias para que no
# crezca todo sin control. Aumentad el tiempo en días aumentando el número de
# ctime (+3 +4 +5...)

function del_logs_antiguos {
      find $RUTA_LOG/ -type f -name "*.log" -ctime +3 -exec rm -rf {} \;
}                                                                                                                                                    
# Inicio del programa principal

sincronzacion
del_logs_antiguos

# Fin de Script

Espero que os sea útil.
Related Posts with Thumbnails