rdiff-backup: una herramienta de copia de seguridad incremental remota para Linux


rdiff-backup es un script de Python potente y fácil de usar para la copia de seguridad incremental local/remota, que funciona en cualquier sistema operativo POSIX como Linux, Mac OS X o Cygwin. Reúne las características notables de un espejo y una copia de seguridad incremental.

De manera significativa, conserva subdirectorios, archivos dev, enlaces físicos y atributos de archivos críticos, como permisos, propiedad de uid/gid, tiempos de modificación, atributos extendidos, acls y bifurcaciones de recursos. Puede funcionar en un modo de ancho de banda eficiente a través de una tubería, de manera similar a la popular herramienta de respaldo rsync.

rdiff-backup hace una copia de seguridad de un directorio en otro a través de una red usando SSH, lo que implica que la transferencia de datos está encriptada y, por lo tanto, segura. El directorio de destino (en el sistema remoto) termina siendo una copia exacta del directorio de origen, sin embargo, las diferencias inversas adicionales se almacenan en un subdirectorio especial en el directorio de destino, lo que hace posible recuperar archivos perdidos hace algún tiempo.

Para usar rdiff-backup en Linux, necesitará los siguientes paquetes instalados en su sistema:

  • Python v2.2 o posterior
  • librsync v0.9.7 o posterior
  • Los módulos pylibacl y pyxattr Python son opcionales pero necesarios para la lista de control de acceso POSIX (ACL) y el soporte de atributos extendidos respectivamente.
  • rdiff-backup-statistics requiere Python v2.4 o posterior.

Cómo instalar rdiff-backup en Linux

Importante: si está operando en una red, tendrá que instalar rdiff-backup en ambos sistemas, preferiblemente ambas instalaciones de rdiff-backup tendrán que ser exactamente de la misma versión.

El script ya está presente en los repositorios oficiales de las principales distribuciones de Linux, simplemente ejecute el siguiente comando para instalar rdiff-backup y sus dependencias:

Para instalar Rdiff-Backup en Ubuntu Focal o Debian Bullseye o más reciente (tiene 2.0).

$ sudo apt-get update
$ sudo apt-get install librsync-dev rdiff-backup

Para instalar Rdiff-Backup en los backports de Ubuntu para versiones anteriores (necesita un backported 2.0).

$ sudo add-apt-repository ppa:rdiff-backup/rdiff-backup-backports
$ sudo apt update
$ sudo apt install rdiff-backu

Para instalar Rdiff-Backup en CentOS y RHEL 8 (de COPR).

$ sudo yum install yum-plugin-copr epel-release
$ sudo yum copr enable frankcrawford/rdiff-backup
$ sudo yum install rdiff-backup

Para instalar Rdiff-Backup en CentOS y RHEL 7 (de COPR).

$ sudo yum install yum-plugin-copr epel-release
$ sudo yum copr enable frankcrawford/rdiff-backup
$ sudo yum install rdiff-backup
$ sudo yum install centos-release-scl
$ sudo yum install rh-python36 gcc libacl-devel
$ scl enable rh-python36 bash
$ sudo pip install rdiff-backup pyxattr pylibacl
$ echo 'exec scl enable rh-python36 -- rdiff-backup "[email protected]"' | sudo tee /usr/bin/rdiff-backup
$ sudo chmod +x /usr/bin/rdiff-backup

Para instalar Rdiff-Backup en Fedora 32+.

$ sudo dnf install rdiff-backup

Cómo utilizar rdiff-backup en Linux

Como mencioné antes, rdiff-backup usa SSH para conectarse a máquinas remotas en su red, y la autenticación predeterminada en SSH es el método de nombre de usuario/contraseña, que normalmente requiere interacción humana.

Sin embargo, para automatizar tareas como las copias de seguridad automáticas con scripts y más, deberá configurar una sincronización o transferencia de archivos sencilla.

Una vez que haya configurado el inicio de sesión sin contraseña SSH, puede comenzar a usar el script con los siguientes ejemplos.

El siguiente ejemplo hará una copia de seguridad del directorio /etc en un directorio de copia de seguridad en otra partición:

$ sudo rdiff-backup /etc /media/aaronkilik/Data/Backup/mint_etc.backup

Para excluir un directorio en particular, así como sus subdirectorios, puede usar la opción --exclude de la siguiente manera:

$ sudo rdiff-backup --exclude /etc/cockpit --exclude /etc/bluetooth /media/aaronkilik/Data/Backup/mint_etc.backup

Podemos incluir todos los archivos de dispositivo, archivos de FIFO, archivos de socket y enlaces simbólicos con la opción --include-special-files como se muestra a continuación:

$ sudo rdiff-backup --include-special-files --exclude /etc/cockpit /media/aaronkilik/Data/Backup/mint_etc.backup

Hay otras dos banderas importantes que podemos establecer para la selección de archivos; --max-file-size tamaño que excluye archivos que son más grandes que el tamaño dado en bytes y --min-file-size tamaño que excluye archivos que son más pequeños que el tamaño dado en bytes:

$ sudo rdiff-backup --max-file-size 5M --include-special-files --exclude /etc/cockpit /media/aaronkilik/Data/Backup/mint_etc.backup

Para el propósito de esta sección, usaremos:

Remote Server (tecmint)	        : 192.168.56.102 
Local Backup Server (backup) 	: 192.168.56.10

Como dijimos antes, debe instalar la misma versión de rdiff-backup en ambas máquinas, ahora intente verificar la versión en ambas máquinas de la siguiente manera:

$ rdiff-backup -V

En el servidor de respaldo, cree un directorio que almacenará los archivos de respaldo de la siguiente manera:

# mkdir -p /backups

Ahora, desde el servidor de respaldo, ejecute los siguientes comandos para hacer un respaldo de los directorios /var/log/ y /root desde el servidor Linux remoto 192.168.56.102 en /copias de seguridad :

# rdiff-backup [email protected]::/var/log/ /backups/192.168.56.102_logs.backup
# rdiff-backup [email protected]::/root/ /backups/192.168.56.102_rootfiles.backup

La siguiente captura de pantalla muestra el archivo raíz en el servidor remoto 192.168.56.102 y los archivos respaldados en el servidor trasero 192.168.56.10:

Tome nota del directorio rdiff-backup-data creado en el directorio backup como se ve en la captura de pantalla, contiene datos vitales sobre el proceso de respaldo y los archivos incrementales.

Ahora, en el servidor 192.168.56.102, se han agregado archivos adicionales al directorio raíz como se muestra a continuación:

Ejecutemos el comando de respaldo una vez más para obtener los datos modificados, podemos usar la opción -v [0-9] (donde el número especifica el nivel de verbosidad, el valor predeterminado es 3 que es silencioso) para establecer la función de verbosidad:

# rdiff-backup -v4 [email protected]::/root/ /backups/192.168.56.102_rootfiles.backup 

Y para enumerar el número y la fecha de las copias de seguridad incrementales parciales contenidas en el directorio /backups/192.168.56.102_rootfiles.backup, podemos ejecutar:

# rdiff-backup -l /backups/192.168.56.102_rootfiles.backup/

Podemos imprimir estadísticas resumidas después de una copia de seguridad exitosa con --print-statistics . Sin embargo, si no configuramos esta opción, la información seguirá estando disponible en el archivo de estadísticas de la sesión. Lea más sobre esta opción en la sección ESTADÍSTICAS de la página de manual.

Y el indicador –remote-schema nos permite especificar un método alternativo de conexión a una computadora remota.

Ahora, comencemos creando un script backup.sh en el servidor de respaldo 192.168.56.10 de la siguiente manera:

# cd ~/bin
# vi backup.sh

Agregue las siguientes líneas al archivo de secuencia de comandos.

#!/bin/bash

#This is a rdiff-backup utility backup script

#Backup command
rdiff-backup --print-statistics --remote-schema 'ssh -C %s "sudo /usr/bin/rdiff-backup --server --restrict-read-only  /"'  [email protected]::/var/logs  /backups/192.168.56.102_logs.back

#Checking rdiff-backup command success/error
status=$?
if [ $status != 0 ]; then
        #append error message in ~/backup.log file
        echo "rdiff-backup exit Code: $status - Command Unsuccessful" >>~/backup.log;
        exit 1;
fi

#Remove incremental backup files older than one month
rdiff-backup --force --remove-older-than 1M /backups/192.168.56.102_logs.back

Guarde el archivo y salga, luego ejecute el siguiente comando para agregar el script al crontab en el servidor de respaldo 192.168.56.10:

# crontab -e

Agregue esta línea para ejecutar su script de respaldo todos los días a la medianoche:

0   0  *  *  * /root/bin/backup.sh > /dev/null 2>&1

Guarde el crontab y ciérrelo, ahora hemos automatizado con éxito el proceso de copia de seguridad. Asegúrese de que esté funcionando como se esperaba.

Lea la página de manual de rdiff-backup para obtener información adicional, opciones de uso exhaustivas y ejemplos:

# man rdiff-backup

Página de inicio de rdiff-backup: http://www.nongnu.org/rdiff-backup/

¡Eso es todo por ahora! En este tutorial, le mostramos cómo instalar y básicamente usar rdiff-backup, un script de Python fácil de usar para la copia de seguridad incremental local/remota en Linux. Comparta sus pensamientos con nosotros a través de la sección de comentarios a continuación.