Rdiff-backup: Herramienta para realizar backups

rdiff-backup es capaz de realizar una copia casi exacta del directorio origen, preservando toda la información de los recursos: permisos, usuarios y grupos, fecha de modificación, enlaces simbólicos, ficheros fifos, etc., manteniéndola independientemente

Índice de contenidos

1. Introducción

Hace tiempo en el tutorial “Backup Manager: Herramienta de backup en sistema Linux” os mostramos una de las herramientas que podemos utilizar para realizar backup en sistema Unix. A pesar de ser una herramienta muy interesante, siempre se le puede encontrar alguna deficiencia, como el excesivo consumo de disco cuando se mantienen varias copias completas, o la lentitud de recuperación de algún fichero cuando trabajamos con backups de gran tamaño (5GB).

Parte de los problemas encontrados en backup-manager se resuelven con la herramienta que os mostramos en este tutorial. rdiff-backup nos ayuda a realizar copias de seguridad de nuestro sistema de ficheros tanto local como remoto (usando ssh), combinando las mejores características de un mirror y el backup incremental.

rdiff-backup es capaz de realizar una copia casi exacta del directorio origen, preservando toda la información de los recursos: permisos, usuarios y grupos, fecha de modificación, enlaces simbólicos, ficheros fifos, etc., manteniéndola independientemente de la plataforma y sistema de ficheros donde se almacene, gracias a que toda esa información se guarda en ficheros independientes de metadatos. Además seremos capaces de recuperar una foto exacta de un determinado día, restaurando el estado que en ese momento tenía nuestro directorio (fichero eliminados, modificados, etc..).

Otra característica importante es la eficiencia del espacio usado. Los backups incrementales que utilizan herramientas como backup-manager, realizan una copia completa de los recursos modificados, en cambio, rdiff-backup sólo almacena las fracciones de datos que realmente han cambiado.

El backup de recursos remotos es otro de sus puntos fuertes y que considero importante destacar. La transferencia de recursos remotos esta optimizada; sólo se transfiere por la red la información que realmente ha cambiado, haciendo un uso eficiente del ancho de banda. El único requisito es que en la máquina remota también se encuentre instalado rdiff-backup.

diff-backup lo podemos ver como el hermano open source de la herramienta Time Machine de Apple. Su funcionamiento es muy similar, pero eso sí, con una interfaz menos atractiva.

2. Entorno

Entorno utilizado para escribir este tutorial:

  • Sistema Operativo: Ubuntu Server 64 bits
  • Kernel: 2.6.35-22
  • rdiff-backup: 1.2.8

3. Instalación

rdiff-backup está disponible en todas las distribuciones de Linux. En nuestro caso, al disponer de un sistema operativo basado en Debian, utilizaremos el comando apt-get para su instalación. Como root ejecutamos:

apt-get update
apt-get install rdiff-backup

Para comprobar que se ha instalado correctamente ejecutamos:

rdiff-backup –version

4. Trabajando con rdiff-backup

4.1. Realizando Backups

Realizar copias de seguridad con rdiff-backup es realmente sencillo, es como si estuviéramos usando el comando cp de Linux. Únicamente tendremos que indicar el directorio origen (del que se quiere realizar el backup) y el directorio destino (donde se almacenará el backup).

rdiff-backup dir_ori dir_dest

Podemos encontrarnos varios escenarios posibles dependiendo de donde se encuentren situados los directorios origen y destino.

  • directorio origen local y destino local
  • directorio origen remoto y destino local
  • directorio origen local y destino remoto

Independientemente de cada caso su uso es idéntico, sólo cambia la forma de acceder a los directorios remotos. Por ejemplo, el comando que deberíamos lanzar para realizar un backup de nuestro directorio local /home/autentia al directorio destino /mnt/backup situado en la misma máquina sería:

rdiff-backup /home/autentia /mnt/backup

Si alguno de los dos directorios estuviese en una máquina remota deberíamos hacer preceder al directorio del usuario y el nombre de la máquina. Por ejemplo, vamos a imaginar que queremos realizar el backup del directorio /etc de la maquina benji (utilizando el usuario backup para acceder a la máquina) al directorio /mnt/backup/benji de nuestra máquina local. El comando que deberíamos ejecutar sería:

rdiff-backup backup@benji::/etc /mnt/backup/benji

Obviamente, para que este comando funcione, deberemos tener configurada correctamente nuestra máquina para acceder al otro equipo sin necesidad de contraseña. Para saber cómo se hace os recomiendo que os leáis el tutorial “ Cómo hacer ‘scp’ de varios ficheros sin que nos pida la password cada vez

Si accedemos al directorio de backup y listamos su contenido, veremos que además de los ficheros existe un directorio llamado “rdiff-backup-data”. En él se almacena información para el correcto funcionamiento de rdiff-backup; concretamente, se almacenan los backup incrementales y la metainformación de los ficheros (permisos, usuarios y grupos, etc..).

Tenemos que tener muy claro que en el directorio de backups siempre tendremos la última versión de los ficheros de la última ejecución. Si quisiéramos acceder al estado del fichero de una fecha en concreto deberíamos acceder a “rdiff-backup-data/increments” que es donde rdiff-backup almacena las versiones anteriores de los ficheros a lo largo del tiempo.

4.2. Restaurando ficheros

Restaurar una copia de seguridad hecha con rdiff-backup es muy sencillo. Podremos utilizar los comandos cp o rdiff-backup. La posibilidad de utilizar cp existe porque rdiff-backup no comprime o realiza un procesamiento especial de los ficheros origen, sino que mantiene la misma estructura y permisos de la original.

Aunque podamos usar cp lo recomendable es utilizar rdiff-backup porque nos aporta muchas más posibilidades de restauración que cp.

El proceso de restauración es muy similar al de backup; únicamente tendremos que añadir la opción -r (restore-as-of) junto con la marca de tiempo a restaurar, el directorio donde se encuentra el backup y el directorio donde queremos que se restaure.

El formato de la marca de tiempo es bastante potente; podremos indicar por ejemplo que nos restaure la copia de hoy usando la palabra “now”, restaurar la copia de hace 10 días usando “10D” o incluso indicarle los minutos y segundos “5m4s”.

Por ejemplo, el siguiente comando restaura el directorio home de la copia realizada el 10 de Enero de 2010 en /tmp/home.

rdiff-backup -r 2010-01-10 /mnt/backup/home /tmp/home

Otro ejemplo, restauramos la copia actual situada en la máquina remota benji en el directorio /temp.

rdiff-backup -r now backup@benji::/mnt/backup /temp

4.3. Eliminando Backup antiguos

Aunque rdiff-backup intenta maximizar el espacio almacenando sólo los ficheros que han cambiado, puede que en determinadas circunstancias necesitemos liberar espacio.

La opción –remove-older-than nos permitirá realizar este proceso. Al igual que la opción de restauración, tendremos que indicarle una marca del tiempo a partir de la cual borrará los backup incrementales.

Por ejemplo, si queremos eliminar de nuestro directorio de backup las versiones de los ficheros con más de 2 semanas deberíamos ejecutar:

rdiff-backup –remove-older-than 2W /mnt/backup

4.4. Filtrado de ficheros

Algunas veces no queremos realizar una copia de seguridad de todos los ficheros. rdiff-backup proporciona varias opciones que nos permiten filtrar los recursos que serán copiados: –include, –include, –include-filelist, –exclude-filelist, –include-globbing-filelist, etc..

De todas ellos sólo vamos a ver el más importante –include-globbing-filelist, porque nos va a permitir usar patrones.

Con include-globbing-filelist le indicamos a rdiff-backup el fichero que contiene el listado de directorios que serán copiados. Debemos añadir una línea por cada patrón, pudiendo tener los signos – y + que indican cuales serán eliminados o añadidos respectivamente.

Vamos a verlo con un ejemplo. Supongamos que queremos hacer un backup de los directorios /etc, /opt y /home pero no queremos copiar ni los directorios .m2 ni nobackup de los directorios de los usuarios. Lo primero nos creamos un fichero llamado files_backup.txt con el siguiente contenido.

- /home/*/nobackup
- /home/*/.m2
+ /etc
+ /opt
+ /home
- **

 

Ejecutamos:

rdiff-backup –include-globbing-filelist files_backup.txt / /mnt/backup

4.5. Recuperación de información de los backups

También con rdiff-backup podremos obtener mucha más información de los backup.

Por ejemplo con la opción -l podremos obtener el listado con los cambios incrementales de un fichero:

rdiff-backup -l /mnt/backup/file

Con –list-changed-since podremos saber cuántos ficheros han cambiado desde una marca de tiempo en concreto. Por ejemplo con el siguiente comando estamos viendo que ficheros han cambiado en los últimos 10 días.

rdiff-backup –list-changed-since 10D /mnt/backup/etc

–list-at-time lista todos los ficheros que estuvieron presentes en un determinado momento. Esto incluye tanto fichero eliminados como aquellos que no han sido modificados.

rdiff-backup –list-at-time 5D /mnt/backup/home

Y por último podremos comparar los cambios producidos entre el backup y un directorio en concreto. rdiff-backup proporciona dos opciones –compare y –compare-at-time; este último para poder comparar con una marca de tiempo determinada. Por ejemplo:

rdiff-backup –compare /home /mnt/backup/home
rdiff-backup –compare-at-time 2W /home /mnt/backup/home

5. Conclusiones

El uso de herramientas como rdiff-backup es de vital importancia. La información es un elemento importante en el día a día de cualquier empresa. Desde Autentia (www.autentia.com), recomendamos realizar copias de seguridad que reduzcan en la medida de lo posible la pérdida de información debida a cualquier tipo de fenómeno adverso.

Comentarios

Un comentario

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

He leído y acepto la política de privacidad

Información básica acerca de la protección de datos

  • Responsable: IZERTIS S.A.
  • Finalidad: Envío información de carácter administrativa, técnica, organizativa y/o comercial sobre los productos y servicios sobre los que se nos consulta.
  • Legitimación: Consentimiento del interesado
  • Destinatarios: Otras empresas del Grupo IZERTIS. Encargados del tratamiento.
  • Derechos: Acceso, rectificación, supresión, cancelación, limitación y portabilidad de los datos.
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad

Consultor tecnológico de desarrollo de proyectos informáticos. Co-autor del libro "Actualización y mantenimiento del PC (Edición de 2010) publicado por Anaya Multimedia. Ingeniero Técnico en Informática de Sistemas e Ingeniero en Informática (premio al mejor expediente de su promoción). Puedes encontrarme en Autentia: Ofrecemos servicios de soporte a desarrollo, factoría y formación. Somos expertos en Java/Java EE

¿Quieres publicar en Adictos al trabajo?

Te puede interesar

22/06/2026

Juan Antonio Jiménez Torres

Vamos a instrumentalizar un SDD para un microservicio bancario. En este artículo sobre SDD - Spec Driven Development, instrumentalizado sobre OpenSpec vamos a construir una PoC de algo más serio que una tabla periódica. Un microservicio bancario muy simplificado que gestione cuentas y permita hacer transferencias

16/06/2026

Juan Antonio Jiménez Torres

Este es el segundo artículo sobre SDD, Spec Driven Development, instrumentalizado sobre OpenSpec. Pero esta vez nos acercaremos usando softwere gratuito. Por un lado OpenCode en lugar de ClaudeCode y usando el modelo gratuito Gemma4 de Google en lugar de otros de pago.

08/06/2026

Juan Antonio Jiménez Torres

Aprenderemos sobre SDD – Spec Driven Development instrumentalizado sobre OpenSpec. Haremos un primer acercamiento usando ClaudeCode con Sonnet, para luego, en un artículo posterior pasarnos a la versión gratuita de OpenCode con Gemma4