28-02-2021

rsyncHace muchos años que uso el sistema rsync para hacer instantáneas de mi sistema y mantener copias de seguridad separadas del disco principal. Esto, junto con la sincronización de mis diferentes dispositivos (sobremesa, portátil y tableta) con unison, que explicaré en un artículo futuro, permite tener siempre al día toda la información y no correr ningún peligro de pérdida de datos en caso de fallo del hardware. En este artículo breve explico como tengo configurada la captura de instantáneas. Para una explicación muy destllada del sistema, y posiblemente una configuración más pensada que la mía, consultése el siguiente artículo en inglés:

http://www.mikerubel.org/computers/rsync_snapshots/

Es mejor seguir este artículo para tener todos los detalles del sistema y una guía más robusta que la que se encuentra aquí. Aquí simplemente explico como me funciona a mí. Me funciona tan bien y desde hace tantos años que a veces me olvido que lo tengo en funcionamiento.

¿Qué permite este sistema y qué hace falta? El sistema permite copias (instantáneas) de los volúmenes con directorios y archivos que se desee, con la frecuencia que se decida. Por ejemplo en mi caso mantengo copias de todos mis datos (el disco duro completo) de hace 1, 2, 3 y 4 horas, y de hace 1, 2, 3, y 4 días, de hace 1, 2, 3, y 4 semanas y de hace 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 y 12 meses. Es decir que puedo ver exactamente qué había en mi disco en cualquiera de estos momentos, por ejemplo hace 7 meses. Eso también sirve para rehacerse de la eliminación involuntaria de archivos o directorios, si hace una hora que existían, simplemente tengo que ir a la instantánea de hace una hora, y lo puedo recuperar.

El directorio de instantáneas por esta razón se ve así:

Lo que se ve son directorios de las diferentes instantáneas con toda la información (todo el disco duro) para estos distintos momentos indicados arriba. Se pensará que se necesita mucho espacio de disco para mantener 23 versiones diferentes de lo mismo! La respuesta es que no, porque en realidad hay una sola copia y el resto solo contiene las diferencias con esta copia madre, lo que se denomina copia incremental. Esto se consigue con el comando "cp -a", que es un comando estándar de la línea de comandos Linux, y el programa "rsync", que es un programa antiguo en Linux que permite la sincronización unidireccional. Los detalles del funcionamiento técnico de estas copias incrementales los pueden encontrar en el artículo citado. En realidad, lo que hace el sistema propuesto es hacer una sola copia total de la información deseada (por ejemplo todo el disco duro) con "rsync", y actualitzar el resto con copias incrementales con "cp -a". El espacio que hace falta para las copias de seguridad es el doble del espacio que ocupa la información que queremos respaldar. Por ejemplo si tenemos un disco duro de 1 TB y queremos mantener una copia de todo el disco, hace falta un espacio de 2 TB para las copias, aunque no lo llenaremos nunca porque tampoco llenaremos nunca el disco original de 1TB, pero podemos estar cerca de llenarlo.

¿Cómo funciona? La primera copia que hace cuando ponemos el sistema en marcha es una copia total del sistema en "hourly.0" con "rsync". En la hora siguiente copia  "hourly.0" a "hourly." con "cp -a" y repite el paso 1. En la tercera hora mueve "hourly.1" a "hourly.2", i y repite el pasp 2 y el paso 1. En la cuarta hora mueve "hourly.2" a "hourly.3" y repite todos los pasos anteriores. A partir de este momento, va borrando "hourly.3" y repitiendo todos los pasos. Estos pasos están programados en  "make_snapshot_1.sh". En la noche, una vez al día, mueve las instantáneas diarias  ("daily.2" a "daily.3, "daily.1" a "dayly.",  "daily.0" a "daily.1) y crea un nuevo "daily.0" copiando "hourly.3" con "cp -a". Hace lo mismo una vez a la semana para mantener "weely.0" a "weekly.3", y una vez al mes pars mantener  "monthly.0" a "monthly.12".

Solo faltaría programar con cron que estos script se ejecuten en los momentos previstos, los "hourly.0" cada hora, los "daily" cada día a la medianoche, y así los otros con las frecuencia de cada uno. Yo en realidad tengo estos script duplicados porque voy haciendo las copias en 2 discos diferentes de 2 TB cada unao, por si falla uno de estos discos. Estas son las entradas en cron:

MAILTO="correu electrònic"

0 */4 * * * /home/wgarcia/jobs/make_snapshot_1.sh

0 2,6,10,14,18,22 * * * /home/wgarcia/jobs/make_snapshot_2.sh

0 1 * * * /home/wgarcia/jobs/daily_snapshot_rotate_1.sh

0 3 * * * /home/wgarcia/jobs/daily_snapshot_rotate_2.sh

0 2 * * 0 /home/wgarcia/jobs/weekly_snapshot_rotate_1.sh

0 4 * * 0 /home/wgarcia/jobs/weekly_snapshot_rotate_2.sh

0 3 28 * * /home/wgarcia/jobs/monthly_snapshot_rotate_1.sh

0 5 28 * * /home/wgarcia/jobs/monthly_snapshot_rotate_2.sh

No explico aquí como funciona el cron, pero básicamente va llamando estos scripts con la frecuencia requereida. Los scripts son bastante simples, no tienen nada que se tenga que configurar excepto los volúmenes que se quieren respaldar y el lugar donde se mantendrán las copias de seguridad, que para mi es  /mnt/Backup1/Work para el primer disco y /mnt/Backup2/Work para el segundo. Idealmente tendrían que estar montado en una máquina diferente (y en un lugar diferente) que el ordenador principal, por si el lugar donde está el ordenador le pasa como la Casa Usher y desaparece del mapa. Pero si está en otro disco, interno o externo, ya parece ser suficiente para proteger los datos.

Los scripts se pueden encontrar a continuación, e incluyen un  "exclude" por si se quiere excluir archivos o directorios de la copia de seguridad, por ejemplo archivos temporales que no tengan utilidad. Solo se tiene que cambiar la localización donde se tiene montado el disco de las copias de seguridad, es decir cambiar  "/mnt/Backup1/work" por el camino del disco donde se quiera respaldar la información, y cambiar los directorios o volúmenes que se quieren copiar en "make_snapshot_1.sh". Si se quiere tener un segundo disco de seguridad, se pueden crear versiones "2" de los mismos scripts solo cambiando el camino para que apunte al segundo disco.

Archivos:

make_snapshot_1.sh

daily_snapshot_rotate_1.sh

weekly_snapshot_rotate_1.sh

monthly_snapshot_rotate_1.sh

backup_exclude

 

 

Tags:
Funciona con Drupal

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer