Copia de seguridad local con RSync

Escrito el 2 mayo 2013 por Luis Ignacio Díaz Martínez


Normalmente en nuestro día a día no imaginamos que por medio de algún tipo de desastre que desconozcamos podamos llegar a perder toda la información que con tanto cariño hemos conseguido recopilar en nuestros discos duros, como por ejemplo nuestras fotografías o nuestros proyectos.

Tenemos que ser conscientes de que los soportes de almacenamiento digital no son 100% fiables y que por lo tanto pueden fallar. Así que es recomendable tener una unidad de soporte y realizar copias de seguridad programadas y de forma automática evitando así descuidos.

En GNU/Linux tenemos múltiples utilidades que nos ayudan a realizar este tipo de tareas, la más extendida y conocida se llama RSync que nos permitirá sincronizar dos directorios de forma automática y con una serie de opciones que nos facilitará alguna que otra tarea.

Entorno

Voy a realizar todo esto bajo una distribución GNU/Linux ( Debian 6 ) y con dos discos duros de 1TB cada uno conectados por medio de los puertos USB.

Como nota complementaria, esta máquina realiza tareas de servidor tales como: web, compartición de ficheros, descarga de torrents…

RSync != Raid1

Esto tiene que quedar claro! RSync sincronizará un directorio (en nuestro caso la raíz del disco duro) con otro directorio… y gracias a la automatización de procesos (cron) conseguimos que cada “X” tiempo ejecute esta sincronización.

Si queremos que los discos estén sincronizados de forma automática e instantánea no necesitamos una sincronización de directorios lo que necesitaríamos en este caso es un Raid1 (modo espejo).

En un entorno empresarial se recomienda tener las dos opciones implementadas, la explicación es sencilla.

Si tenemos dos discos de 1Tb en funcionamiento y uno de ellos se cae el otro seguirá funcionando de forma continuada sin afectar al sistema ya que al estar en Raid1 el disco dañado se desconecta y el bueno sigue funcionando… a esto se le denomina sistemas de alta disponibilidad ya que la máquina cuenta con un sistema de no parada y funcionamiento tras un error cíclico (disco duro).

No obstante, si nosotros como usuarios eliminamos un documento con el raid1 no podremos recuperarlo ya que al ser un espejo el también lo habrá eliminado. Por ello utilizamos copias de seguridad incrementales permitiendo así tener los archivos eliminados temporalmente en nuestra copia.

Existen muchas formas de realizar copias de seguridad, normalmente se utilizan varios tipos de sistemas mezclados como el caso de utilizar un incremental cada dos horas y un total cada semana. El problema de esto es que necesitamos una gran cantidad de almacenamiento para albergar dicha información.

No obstante si la empresa tiene información delicada no le importará gastarse el dinero en unos cuantos discos duros que puedan contener de forma eficiente las copias de seguridad necesarias para su infraestructura.

Utilizando RSync

Aquí podríamos extendernos más y más… pero vamos a ir directamente a lo más básico! a sincronizar dos directorios de forma sencilla y rápida… podemos realizar dos tipos de sincronización… incremental en modo mirror… que vamos a ver a continuación.

Copia de disco a disco

Este método es el más básico… sencillamente copiaremos ( sincronizaremos ) los archivos de un directorio a otro. En mi caso los dos directorios hacen referencia al punto de montaje raíz de los dos discos duros. Este tipo de sincronización es incremental ya que en ningún momento eliminaremos ningún dato del destino.

Explicaré la sintaxis del domando:

  • a = Este modo habilitará la recursión en los archivos
  • v = Modo verbose para ver lo que hace!
  • z = Habilitamos la compresión
  • –progress = Visualizaremos el progreso de la sincronización
  • /media/HDD1/ = Directorio de origen
  • /media/HDD3/ = Directorio de destino

Este tipo de copia será incremental… quiere decir que los datos del destino que no están en el origen no serán eliminados, y que por lo tanto tendríamos acceso a los archivos que ya están borrados en el origen.

Mirror, sincronización entre discos

Quizás lo nombrado anteriormente nos servirá perfectamente si no queremos tener una copia exacta… conservando así en la copia de seguridad los archivos que hemos eliminado… renombrado… si tenemos espacio suficiente en el disco duro podemos incluso tener el sistema anterior más el sistema a continuación descrito combinados… consiguiendo así por ejemplo que cada día se realice una copia sin la eliminación en el destino y una vez por semana elimine los archivos que no se encuentran en el origen… es una buena práctica por si somos muy despistados y tardamos en ver la que hemos liado…

A continuación vemos como eliminar los archivos del destino que no se encuentran en el origen:

Sencillamente hemos introducido el parámetro “–delete“.

Nota: Particularmente utilizo la opción “–delete-after” con el fin de escanear y eliminar el contenido que no se encuentra en el origen una vez haya realizado la copia y transferencia de archivos.

Archivos eliminado en origen en otra ubicación

ToDo

No perder los permisos de usuario

Si no queremos perder los permisos que tienen asignados los archivos… podemos utilizar los siguiente parámetros de RSYNC:

Con ello mantendremos los permisos de usuarios asignados a los ficheros.

Automatizando con cron

Ahora vamos a intentar automatizar todo este proceso… para ello como realizaremos varias copias de seguridad de distintos tipos creamos un script que englobe todas estas acciones… donde lo llamaremos “local_backup.sh”.

Script de copia

Por lo tanto primero crearemos un script básico con el siguiente contenido:

Primero de todo vamos a definir las unidades de almacenamiento. La primera, será el origen y la segunda será el destino. Después comprobamos que estas unidades están montadas en el sistema y por lo tanto operativas. Si no es así, creará un log donde se almacenará el error correspondiente.

Después empaquetaremos el directorio donde almaceno mis proyectos (directorio web). A continuación lo copio a una ruta del disco origen.

Añadiendo script a cron

Ahora toca la parte importante… nuestro script se ejecutará de forma automática gracias a la ayuda de cron.  Cron es un pequeño programa que automatiza procesos por nosotros, definiendo así en su sintaxis de ejecución cuando y que se tiene que ejecutar. Para nuestro caso particular vamos a realizar lo siguiente:

Y añadimos lo siguiente al final del documento

Y guardamos el documento como si estuviéramos editando con nano ( control + o ).

Sencillamente hemos indicado que:

  • Cada minuto 0
  • De cada hora 10
  • En todos los días del mes
  • En todos los días del año
  • Y todos los días de la semana
  • Ejecutamos el comando….

Seamos conscientes de la hora que introducimos en el cron, que sea una hora en la cual el sistema esté iniciado!

Nota: Cron va relacionado con el usuario. Por lo tanto cada usuario tiene sus propios lanzadores automáticos… en mi caso he realizado este cron con el usuario root con tal de evitar problemas con los permisos… pese a que no es una práctica segura!

Referencias

Estas son las referencias que he utilizado para redactar este artículo…


Cargando...

Comentarios:


2 Comentarios

#2196 david

Hola,

muy buen artículo, pero no puedo ver el script de copia. Podrías subirlo otra vez?

gracias.

    #2330 Luis Ignacio Díaz Martínez

    Ya lo tienes solucionado! =) espero que te sirva… este artículo lo marcaré para revisarlo más entretenidamente.

    Gracias por el aviso!

Deja un comentario

Nombre *
Email *
Web