La Gaceta de Linux ...¡ haciendo a Linux un poco más divertido !

Copias de Resguardo Automáticas con rsync y Anacron

Por Barry O'Donovan

Traducción al español por Gustavo Conturzo
el día 19 de Abril de 2005, para La Gaceta de Linux

1. Introducción

El objeto acerca de las copias de resguardo es que realmente pueden ser un dolor. Todo el mundo verdaderamente sabe lo importante que son, pero muy pocas personas realmente se toman el tiempo para realizar correctas copias de resguardo. Incluso después de haber sentido el dolor de perder aquellos archivos importantes.

En este artículo voy a mostrarte cómo configurar rápidamente tu computadora para realizar copias de resguardo simples, sin molestias y transparentes, usando solamente rsync y cron (o Anacron). La premisa es simple: cada noche tu computadora hará un espejo automático de todos los archivos que quieras resguardar, y en intervalos elegidos estos espejos serán archivados y mantenidos por un periodo específico de tiempo.

Antes de ensuciarte las manos con la actual implementación necesitas diseñar tu propia política de resguardo. En la sección 3 trato lo que una política de resguardo debería ser y lo que no. Luego introduciré la información previa necesaria sobre rsync y cron por separado. Finalmente, la pondré toda junta dejándote con un simple pero efectivo régimen de resguardo.

2. Audiencia Deseada

Este artículo y el procedimiento de resguardo presentado están dirigidos a cualquiera que desee mantener un efectivo resguardo de sus datos importantes. Definitivamente no está dirigido a grandes organizaciones o negocios con control de datos críticos. Imagino que los candidatos ideales incluirían: usuarios hogareños, usuarios de oficinas hogareñas/pequeñas oficinas, estudiantes/postgraduados, e investigadores.

3. Políticas de Resguardo

Una idea equivocada común entre muchas personas es que una buena política de resguardo es tan simple como hacer una copia regular de tus datos ("hacer una copia espejo de tus datos"), siempre sobrescribiendo la copia anterior. Esto, aunque más esfuerzo del que la mayoría puede hacer, es casi tan malo como no hacer nada.

Considera, por ejemplo, si uno de tus archivos se vuelve corrupto en el tiempo. Te lleva una semana o dos antes de que lo uses otra vez. En ese momento, has hecho dos "resguardos". Abres tu archivo para encontrar tus datos destruidos. "Pero",  piensas, "está bien, sólo volveré a mi resguardo". Abres tu resguardo para encontrar el mismo archivo corrupto. Te das cuenta demasiado tarde de lo inútil que fue tu política de resguardo.

La mayoría de nosotros tenemos cientos, si no es que miles, de archivos importantes en nuestros directorios home; libretas de direcciones, correos electrónicos, cartas, trabajo relacionados con datos, programas en los que hemos estado trabajando, etc. Algunos de estos archivos se pueden usar cada semana, mientras que otros pueden no ser vistos en meses o incluso años.

Una buena política de resguardo es aquella que toma "instantáneas" de tus datos y las mantiene por un periodo específico de tiempo. Está en cada uno decidir sencillamente cuántas instantáneas mantener y a qué intervalos. A menudo esto lo decidirás por las limitaciones de almacenamiento. Cuando sea posible, los datos que cambian regularmente se beneficiarán de instantáneas de intervalos más pequeños, mientras que los datos que pocas veces cambia requieren menos intervalos. La siguiente tabla demuestra mi propio procedimiento de resguardo:

Datos Fraq. de Cambio Tamaño Espejo Diario
Instantáneas Semanales
Instantáneas Mensuales
Espacio Requerido
1 2 3 1 2 3 4 6 12
E-mails Diariamente 100Mb S S S S S N S N S S 500Mb
Datos MySQL
Diariamente 30Mb S S N N S N S N S N 70Mb
Sitio web
Mensualmente 900Mb S S N N S N N S N N 3,200Mb
/etc 2-3 Semanas 28Mb S S S S S S S S S S 200Mb
Tesis Diariamente 25Mb S S S S S S S S S N 190Mb
Código de Búsqueda
Pocas veces
60Mb S S N N S N S N S S 200Mb
Total de espacio requerido: 4,360Mb

Cada una de las instantáneas se comprime para reducir espacio. Los datos más grandes en mi política son los sitios web. Estos cambian rara vez de modo que mantengo sólo unas pocas instantáneas. Mi directorio de sistema /etc también cambia rara vez, pero como son sólo 28 MB he elegido mantener todas las instantáneas posibles. Ahora deberías hacer una tabla similar y decidir qué datos quieres resguardar y con qué frecuencia.

Lo siguiente a tener en cuenta es dónde almacenar tus resguardos. Otra vez, esta es tu propia elección. Algunas ubicaciones simplemente no estarán disponibles mientras que otras podrían sólo parecer exageradas. La siguiente lista da varias opciones listadas de mejor a peor:

1. En una computadora de red en una ubicación remota (tal como resguardar desde tu casa a tu computadora de la oficina, o viceversa)
Esta claramente es la situación ideal. Tus datos estarán protegidos del fuego, robo, cortes de energía, variaciones de energía, daños del agua/regadera, etc.

2. En una computadora de red en otra habitación de tu casa u oficina
No tan buena como la primera ya que ambas computadoras, original y de resguardo, podrían ser alcanzadas por el fuego, variaciones de energía, etc.

3. En un segundo disco duro en tu computadora
Mucho mejor que no tener copias de resguardo en absoluto, y estarás protegido si uno de los discos duros falla, pero todavía serás vulnerable al fuego, robo, etc. Seguro recomendaría un estabilizador de energía si tu UPS (unidad de suministro de energía) no tiene uno incorporado.

4. En una partición separada en el mismo disco duro

5. En la misma partición en el mismo disco duro
Las dos últimas en mi lista son por mucho las peores. Esto realmente no se podría considerar una política de resguardo de mérito. Cualquier problema del disco duro, un virus, un error accidental, etc., te arruinarían. En realidad sólo te estás asegurando contra eliminación por accidente u operación similar sobre los archivos originales.

Si tú mismo no tienes acceso a una computadora remota, entonces considera conectarte con un amigo; cada uno de ustedes hará copias de resguardo de la computadora del otro. Los asuntos de seguridad pueden ser direccionados al encriptar los datos antes/durante la transferencia y sencillamente ubicando las versiones encriptadas en la computadora remota.

4. rsync - La Utilidad de Transferencia de Archivos Rápida, Flexible

rsync es una utilidad de transferencia de archivos muy rápida y flexible. Usa su propio protocolo de "actualización remota" para transferir solo las diferencias entre dos conjuntos de archivos. Puede operar localmente o a través de un enlace de red usando rcp, ssh o su propio demonio. rsync está incluido por defecto con la mayoría de las distribuciones Linux estándares, o se puede descarga desde su sitio web (http://rsync.samba.org).

Nosotros vamos a usar rsync para hacer copias espejos de nuestros archivos cada noche. rsync es la opción ideal ya que  sólo transferirá archivos nuevos, las diferencias entre archivos existentes que han cambiado, y quita los archivos viejos, minimizando el uso de ancho de banda para los clientes de conexión telefónica/banda ancha.

Los espejos son más fáciles de implementar cuando tomamos directorios enteros y sus subdirectorios. Vamos a tomar el caso cuando estás haciendo copias espejos de todos tus archivos de correo electrónico de tu computadora hogareña a la computadora de tu oficina. Usaríamos rsync como sigue:

rsync -r -e ssh --delete /home/nombreusuario/mail nombreusuario@micomputadora.micompania.com:/backups/mail

donde:

-r
Instruye a rsync a copiar directorios recursivamente.
-e ssh
Le dice a rsync que use el intérprete de comandos remoto ssh. Más sobre esto abajo.
--delete
Instruye a rsync a borrar archivos en el lado receptor que no existen en el lado que envía.
/home/nombreusuario/mail
El directorio que estamos haciendo la copia espejo.
nombreusuario@micomputadora.micompania.com:/backups/mail
Conecta como usuario nombreusuario en micomputadora.micompania.com y crea/actualiza el espejo en  /backups/mail

Esto creará un espejo de  /home/nombreusuario/mail en micomputadora.micompania.com bajo el directorio /backups/mail/mail. Esto es lo que queremos. Si querías lo inverso (resguardar desde micomputadora.micompania.com a tu computadora hogareña) simplemente cambiarías la fuente y el destino:

rsync -r -e ssh --delete nombreusuario@micomputadora.micompania.com:/home/nombreusuario/mail /backups/mail

Recomiendo que uses el protocolo ssh para asegurar la discreción de tus datos mientras se están siendo transferidos.  Si estás llevando a cabo este resguardo en una red cerrada, siéntete libre de usar el protocolo rsh más viejo o el propio demonio de rsync. El uso de copias de resguardo en red crea un problema más: queremos que sea automático, sin interacción de ningún usuario, pero el uso de rsh o ssh generalmente requiere que una contraseña sea ingresada. Using networked backups creates one more problem: we want this to be automatic, with no user interaction, but using rsh or ssh generally requires a password to be entered. Superaremos esto al usar claves públicas/privadas sin pasaje de expresiones para lograr esto.

4.1 Configuración de autenticación sin contraseña para ssh

Este artículo no intenta ser un tutorial sobre ssh así que sólo proporcionaré una breve instrucción sobre configurar la autenticación de clave privada/pública usando ssh. Por favor consulta la documentación de ssh para una discusión más profunda.

Los siguientes dos comandos configurarán la autenticación sin contraseña desde tu computadora a micomputadora.micompania.com:

$ ssh-keygen -b 1024 -t rsa -f /home/nombreusuario/.ssh/id_rsa
(no ingresar un pasaje de expresiones - dejarlo en blanco)
$ scp /home/nombreusuario/.ssh/id_rsa.pub nombredeusuario@micomputadora.micompania.com:/home/nombreusuario/.ssh/claves_autorizadas

Normalmente cualquier problema encontrado estará bajo los permisos de varios archivos claves. Utiliza ssh en modo verboso (ssh -v) y verifica que el demonio ssh se conecta en ambas máquinas (por lo general /var/log/secure).

Al usar este método es importante para ti estar conciente de los asuntos de seguridad que surgen. El comando  ssh-keygen produce dos archivos:

Deberías asegurarte que los permisos de la clave privada son -rw------- (por ejemplo, sólo lectura para el dueño). Este archivo es equivalente a tener un archivo de texto conteniendo tu contraseña de conexión a tu cuenta en  micomputadora.micompania.com; cualquiera que ponga sus manos en este archivo podrá conectarse en esa cuenta sin conocer tu contraseña. Sin embargo, cualquier hacker potencial primero debe tener acceso a tu computadora hogareña a fin de obtener ese archivo.

Si usas este método también deberías considerar las siguientes medidas de seguridad:

5. cron - El Demonio para Ejecutar Comandos Programados

cron es una parte integral de la mayoría de las distribuciones de Linux. Se usa para ejecutar comandos en tiempos específicos según lo que hayas previsto. Lo usaremos para configurar una copia espejo cada noche de todos los archivos que queramos resguardar, y para crear las instantáneas en los intervalos que determinamos en la sección 3.

Cada usuario en un sistema Linux tiene su propia tabla cron ("crontab") que contiene el programa de los comandos. Esta se puede listar usando 'crontab -l', eliminada con 'crontab -r' y editada con 'crontab -e'. Vamos a agregar el comando espejo diario para que ocurra a las 2 am todos los días al poner lo siguiente en nuestra crontab:

00 02 * * * rsync -r -e ssh --delete /home/nombreusuario/mail nombreusuario@micomputadora.micompania.com:/backups/mail

donde los cinco campos (0 2 * * *) son (respectivamente):

Campo Valores Permitidos
minuto
hora
día del mes
mes
día de la semana
0-59
0-23
1-31
1-12
0-7*
( *0 o 7 es Domingo)

Así que, en nuestro caso, haremos copias espejos de los contenidos de /home/nombreusuario/mail a las 02:00 todos los días de cada mes. Podemos poner entradas similares para todos los directorios que deseemos hacer copias espejos. Alternativamente, podríamos crear un script conteniendo todas las entradas y usar cron para ejecutar ese script.

Hay dos variables de entorno útiles que también puedes configurar cuando editas la crontab para evitar los valores por defecto:
SHELL=/bin/sh
MAILTO=nombreusuario

MAILTO es importante ya que todos los mensajes de error sólo serán enviados por correo electrónico y así serás notificado si tus copias de resguardo están fallando. Consulta la página man de crontab para más información y ejemplos.

6. Poniéndolo Todo Junto

Ahora que tenemos lo esencial de rsync y cron, todo lo que nos queda por hacer es poner todo junto para crear nuestra política de resguardo. Vamos a continuar con el ejemplo donde tu computadora hogareña está enviado su copia espejo diaria a la computadora de tu oficina. La computadora de tu oficina ahora será responsable del resto de la política de resguardo: las instantáneas a los intervalos predefinidos. Usaremos otra crontab en la máquina de la oficina para lograr esto y demostraré usando el programa para mi tesis de la sección 3.

El método es bastante simple. Por ejemplo, cada Domingo moveremos la instantánea de hace 3 semanas a la instantánea de hace 1 mes, la de hace 2 semanas a la de hace 3 semanas, la de hace 1 semana a la de hace 2 semanas y archivaremos el espejo a la de hace 1 semana. Así, dependiendo del tiempo de la semana, la instantánea de hace 3 semanas podría ser tan nueva como 2 semanas o tan antigua como 3 semanas.

Mi programa requiere instantáneas que son 1, 2 y 3 semanas antiguas y 1, 2, 3, 4 y 6 meses antiguas. Trabajaremos desde las más antiguas (ya que de otro modo sólo estaríamos propagando la nueva instantánea):

# Resguardar archivos de correo con instantáneas de 6, 4, 3, 2, 1 meses y 3, 2, 1 semanas
# Orden 4m->6m, 3m->4m, 2m->3m, 1m->2m, 3s->1s, 2s->3s, 1s->2s, espejo->1s

# A las 3am el 1ro de En,Mar,May,Jul,Sep,Nov copiar el 4m al 6m
00 03 1 1,3,5,7,9,11 * cp -f /backups/tesis/backup/4mes.tar.gz /backups/tesis/backup/6mes.tar.gz

# A las 3.02am del 1ro de cada mes mover el 3m al 4m (y continuar para los otros meses)
02 03 1 * * cp -f /backups/tesis/backup/3mes.tar.gz /backups/tesis/backup/4mes.tar.gz
04 03 1 * * cp -f /backups/tesis/backup/2mes.tar.gz /backups/tesis/backup/3mes.tar.gz
06 03 1 * * cp -f /backups/tesis/backup/1mes.tar.gz /backups/tesis/backup/2mes.tar.gz
08 03 1 * * cp -f /backups/tesis/backup/3semana.tar.gz /backups/tesis/backup/1mes.tar.gz

# Y luego cada Domingo cuidar las instantáneas semanales y el archivado de la copia espejo
10 03 * * 0 cp -f /backups/tesis/backup/2semana.tar.gz /backups/tesis/backup/3semana.tar.gz
12 03 * * 0 cp -f /backups/tesis/backup/1semana.tar.gz /backups/tesis/backup/2semana.tar.gz
14 03 * * 0 rm -f /backups/tesis/backup/1semana.tar.gz
16 03 * * 0 tar zcf /backups/tesis/backup/1semana.tar.gz /backups/tesis/tesis/*

Y ese mis amigos es su sistema de resguardo automático, libre de molestias y efectivo.

Algunos puntos sobre lo antes dicho:

7. Anacron vs. cron

Anacron es un programador periódico de comando similar a algunas aplicaciones de cron, pero no tiene en cuenta que el sistema corra continuamente. Sin embargo puede ser usado para nuestra política de resguardo en sistemas que no corran 24 horas al día. Justo como rsync y cron, Anacron ahora es parte de la mayoría de las distribuciones Linux estándares.

Cada vez que Anacron se ejecuta, éste lee un archivo de configuración que especifica los trabajos que Anacron controla, y sus periodos en días. Si un trabajo no fue ejecutado en los últimos n días, donde n es el periodo de ese trabajo, Anacron lo ejecuta. El archivo de configuración por lo general es /etc/anacrontab.

Para la copia espejo diaria podríamos agregar un línea a este archivo de configuración tal como:

1 20 mirror rsync -r -e ssh --delete /home/nombreusuario/tesis nombreusuario@micomputadora.micompania.com:/backups/tesis

donde los campos significan:

1
el periodo en días indicado con qué frecuencia se debería ejecutar este comando
20
el retraso en minutos después de que Anacron comience, antes de que deba ejecutar este comando
mirror
un único identificador para este trabajo de modo que Anacron pueda seguir la pista de cuándo fue ejecutado por última vez
rsync...
el comando a ejecutar

Y de forma similar en la máquina de resguardo pondríamos lo siguiente en el archivo de configuración de Anacron:

# Resguardar archivos de correo con instantáneas de 6,4,3,2,1 meses y 3,2,1 semanas
# Orden 4m->6m, 3m->4m, 2m->3m, 1m->2m, 3s->1m, 2s->3s, 1s->2s, espejo->1s

# Cada 60 días (2 meses)
60 20 bup1 cp -f /backups/tesis/backup/4mes.tar.gz /backups/tesis/backup/6mes.tar.gz

# cada 30 días (1 mes)
30 22 bup2 cp -f /backups/tesis/backup/3mes.tar.gz /backups/tesis/backup/4mes.tar.gz
30 24 bup3 cp -f /backups/tesis/backup/2mes.tar.gz /backups/tesis/backup/3mes.tar.gz
30 26 bup4 cp -f /backups/tesis/backup/1mes.tar.gz /backups/tesis/backup/2mes.tar.gz
30 28 bup5 cp -f /backups/tesis/backup/3semana.tar.gz /backups/tesis/backup/1mes.tar.gz

# Y cada 7 días
7 30 bup5 cp -f /backups/tesis/backup/2semana.tar.gz /backups/tesis/backup/3semana.tar.gz
7 32 bup7 cp -f /backups/tesis/backup/1semana.tar.gz /backups/tesis/backup/2semana.tar.gz7
7 34 bup8 rm -f /backups/tesis/backup/1semana.tar.gz
7 36 bup9 tar zcf /backups/tesis/backup/1semana.tar.gz /backups/tesis/tesis/*
Algunas notas sobre esto:

8. Recursos

Para una solución de resguardo más profesional:

Obtén notificaciones avanzadas antes que tu disco duro falle:

 


[BIO]Barry O'Donovan graduado de la Universidad Nacional de Irlanda, Galway con una Licenciatura (Honores) en ciencias de la computación y matemática. Actualmente está completando un Doctorado en ciencias de la computación con el Laboratorio de Ocultamiento de Información, Academia de la Universidad de Dublin, Irlanda en el área de marcas de audio.

Barry ha estado usando Linux desde 1997 y su actual gusto de elección es Fedora Core. Él es un miembro del Grupo Irlandés de Usuarios Linux. En los momentos que no está haciendo su Doctorado se lo puede encontrar en el pub local o corriendo en el parque.

Copyright © 2004, Barry O'Donovan. Publicado bajo los términos de la Open Publication license

Publicado en el Número 104 de la Gaceta de Linux, Julio de 2004