Rsnapshot (basado en Rsync): una utilidad de copia de seguridad del sistema de archivos local/remoto para Linux


rsnapshot es una utilidad de copia de seguridad del sistema de archivos local/remoto de código abierto que se escribió en lenguaje Perl que aprovecha el poder del programa Rsync y SSH para crear copias de seguridad incrementales programadas de sistemas de archivos Linux/Unix, mientras que solo ocupa el espacio de una única copia de seguridad completa más las diferencias y mantenga esas copias de seguridad en un disco local en un disco duro diferente, un dispositivo USB externo, un disco montado en NFS o simplemente en la red a otra máquina a través de SSH.

Este artículo demostrará cómo instalar, configurar y usar rsnapshot para crear copias de seguridad locales incrementales cada hora, diaria, semanal y mensual, así como copias de seguridad remotas. Para realizar todos los pasos de este artículo, debe ser usuario root.

Paso 1: Instalar Rsnapshot Backup en Linux

La instalación de rsnapshot usando Yum y APT puede diferir levemente si está usando distribuciones basadas en Red Hat y Debian.

Primero deberá instalar y habilitar el repositorio de terceros llamado EPEL. Siga el enlace a continuación para instalar y habilitar en sus sistemas RHEL/CentOS. Los usuarios de Fedora no requieren ninguna configuración de repositorio especial.

  1. Instale y habilite el repositorio EPEL en RHEL/CentOS 6/5/4

Una vez que haya configurado las cosas, instale rsnapshot desde la línea de comando como se muestra.

# yum install rsnapshot

De forma predeterminada, rsnapshot se incluye en los repositorios de Ubuntu, por lo que puede instalarlo usando el comando apt-get como se muestra.

# apt-get install rsnapshot

Paso 2: Configuración de inicio de sesión sin contraseña SSH

Para respaldar servidores Linux remotos, su servidor de respaldo rsnapshot podrá conectarse a través de SSH sin una contraseña. Para lograr esto, deberá crear una clave SSH pública y privada para autenticarse en el servidor rsnapshot. Siga el enlace a continuación para generar claves públicas y privadas en su servidor de respaldo de rsnapshot.

  1. Cree un inicio de sesión SSH sin contraseña mediante SSH Keygen

Paso 3: configurar Rsnapshot

Ahora deberá editar y agregar algunos parámetros al archivo de configuración rsnapshot. Abra el archivo rsnapshot.conf con el editor vi o nano.

# vi /etc/rsnapshot.conf

A continuación, cree un directorio de copia de seguridad, donde desea almacenar todas sus copias de seguridad. En mi caso, la ubicación de mi directorio de respaldo es “/ data/backup /”. Busque y edite el siguiente parámetro para establecer la ubicación de la copia de seguridad.

snapshot_root			 /data/backup/

También elimine el comentario de la línea "cmd_ssh" para permitir realizar copias de seguridad remotas a través de SSH. Para quitar el comentario de la línea, elimine el “#” al frente de la siguiente línea para que rsnapshot pueda transferir sus datos de forma segura a un servidor de respaldo.

cmd_ssh			/usr/bin/ssh

A continuación, debe decidir cuántas copias de seguridad antiguas le gustaría conservar, porque rsnapshot no tenía idea de la frecuencia con la que desea tomar instantáneas. Debe especificar cuántos datos guardar, agregar intervalos para mantener y cuántos de cada uno.

Bueno, la configuración predeterminada es lo suficientemente buena, pero aún así me gustaría que habilitaras el intervalo "mensual" para que también puedas tener copias de seguridad a más largo plazo. Edite esta sección para que tenga un aspecto similar a la siguiente configuración.

#########################################
#           BACKUP INTERVALS            #
# Must be unique and in ascending order #
# i.e. hourly, daily, weekly, etc.      #
#########################################

interval        hourly  6
interval        daily   7
interval        weekly  4
interval        monthly 3

Una cosa más que necesita editar es la variable "ssh_args". Si ha cambiado el puerto SSH predeterminado (22) por otro, debe especificar ese número de puerto de su servidor de respaldo remoto.

ssh_args		-p 7851

Finalmente, agregue sus directorios de respaldo locales y remotos de los que desea respaldar.

Si ha decidido hacer una copia de seguridad de sus directorios localmente en la misma máquina, la entrada de la copia de seguridad se vería así. Por ejemplo, estoy haciendo una copia de seguridad de mis directorios/tecmint y/etc.

backup		/tecmint/		localhost/
backup		/etc/			localhost/

Si desea hacer una copia de seguridad de los directorios de un servidor remoto, entonces necesita decirle al rsnapshot dónde está el servidor y qué directorios desea respaldar. Aquí estoy haciendo una copia de seguridad del directorio “/ home” de mi servidor remoto en el directorio “/ data/backup” en el servidor rsnapshot.

backup		 [email protected]:/home/ 		/data/backup/

Leer también:

  1. Cómo hacer una copia de seguridad/sincronizar directorios con la herramienta Rsync (sincronización remota)
  2. Cómo transferir archivos/carpetas mediante el comando SCP

Aquí, voy a excluir todo, y luego solo definiré específicamente lo que quiero respaldar. Para hacer esto, necesita crear un archivo de exclusión.

# vi /data/backup/tecmint.exclude

Primero obtenga la lista de directorios de los que desea hacer una copia de seguridad y agregue (- *) para excluir todo lo demás. Esto solo hará una copia de seguridad de lo que enumeró en el archivo. Mi archivo de exclusión se parece a lo que se muestra a continuación.

+ /boot
+ /data
+ /tecmint
+ /etc
+ /home
+ /opt
+ /root
+ /usr
- /usr/*
- /var/cache
+ /var
- /*

El uso de la opción de exclusión de archivos puede ser muy complicado debido al uso de la recursividad rsync. Por lo tanto, mi ejemplo anterior puede no ser lo que está buscando. A continuación, agregue el archivo de exclusión al archivo rsnapshot.conf.

exclude_file    /data/backup/tecmint.exclude

Finalmente, casi ha terminado con la configuración inicial. Guarde el archivo de configuración “/etc/rsnapshot.conf” antes de continuar. Hay muchas opciones para explicar, pero aquí está mi archivo de configuración de muestra.

config_version  1.2
snapshot_root   /data/backup/
cmd_cp  /bin/cp
cmd_rm  /bin/rm
cmd_rsync       /usr/bin/rsync
cmd_ssh /usr/bin/ssh
cmd_logger      /usr/bin/logger
cmd_du  /usr/bin/du
interval        hourly  6
interval        daily   7
interval        weekly  4
interval        monthly 3
ssh_args	-p 25000
verbose 	2
loglevel        4
logfile /var/log/rsnapshot/
exclude_file    /data/backup/tecmint.exclude
rsync_long_args --delete        --numeric-ids   --delete-excluded
lockfile        /var/run/rsnapshot.pid
backup		/tecmint/		localhost/
backup		/etc/			localhost/
backup		[email protected]:/home/ 		/data/backup/

Todas las opciones y explicaciones de argumentos anteriores son las siguientes:

  1. config_version 1.2 u003d Versión del archivo de configuración
  2. snapshot_root u003d Destino de copia de seguridad para almacenar instantáneas
  3. cmd_cp u003d Ruta para copiar el comando
  4. cmd_rm u003d Ruta para eliminar el comando
  5. cmd_rsync u003d Ruta a rsync
  6. cmd_ssh u003d Ruta a SSH
  7. cmd_logger u003d Ruta a la interfaz de comandos de shell para syslog
  8. cmd_du u003d Ruta al comando de uso del disco
  9. intervalo por hora u003d cuántas copias de seguridad por hora se deben mantener.
  10. intervalo diario u003d cuántas copias de seguridad diarias se deben conservar.
  11. intervalo semanal u003d cuántas copias de seguridad semanales se deben conservar.
  12. intervalo mensual u003d cuántas copias de seguridad mensuales se deben mantener.
  13. ssh_args u003d Argumentos SSH opcionales, como un puerto diferente (-p)
  14. verbose u003d autoexplicativo
  15. loglevel u003d Se explica por sí mismo
  16. logfile u003d Ruta al archivo de registro
  17. exclude_file u003d Ruta al archivo de exclusión (se explicará con más detalle)
  18. rsync_long_args u003d Argumentos largos para pasar a rsync
  19. lockfile u003d Se explica por sí mismo
  20. copia de seguridad u003d ruta completa a lo que se respaldará seguida de la ruta relativa de ubicación.

Paso 4: verificar la configuración de Rsnapshot

Una vez que haya terminado con toda su configuración, es hora de verificar que todo funciona como se esperaba. Ejecute el siguiente comando para verificar que su configuración tenga la sintaxis correcta.

# rsnapshot configtest

Syntax OK

Si todo está configurado correctamente, recibirá un mensaje de "Sintaxis correcta". Si recibe algún mensaje de error, eso significa que debe corregir esos errores antes de ejecutar rsnapshot.

A continuación, realice una ejecución de prueba en una de las instantáneas para asegurarse de que estamos generando resultados correctos. Tomamos el parámetro "hourly" para hacer una ejecución de prueba usando el argumento -t (prueba). El siguiente comando mostrará una lista detallada de las cosas que hará, sin hacerlas realmente.

# rsnapshot -t hourly
echo 2028 > /var/run/rsnapshot.pid 
mkdir -m 0700 -p /data/backup/ 
mkdir -m 0755 -p /data/backup/hourly.0/ 
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /home \
    /backup/hourly.0/localhost/ 
mkdir -m 0755 -p /backup/hourly.0/ 
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /etc \
    /backup/hourly.0/localhost/ 
mkdir -m 0755 -p /data/backup/hourly.0/ 
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
    /usr/local /data/backup/hourly.0/localhost/ 
touch /data/backup/hourly.0/

Nota: El comando anterior le dice a rsnapshot que cree una copia de seguridad "por hora". De hecho, imprime los comandos que ejecutará cuando lo ejecutemos realmente.

Paso 5: Ejecutar Rsnapshot manualmente

Después de verificar sus resultados, puede eliminar la opción "-t" para ejecutar el comando realmente.

# rsnapshot hourly

El comando anterior ejecutará el script de respaldo con toda la configuración que agregamos en el archivo rsnapshot.conf y crea un directorio de “respaldo” y luego crea la estructura de directorio debajo de él que organiza nuestros archivos. Después de ejecutar el comando anterior, puede verificar los resultados yendo al directorio de respaldo y listar la estructura del directorio usando el comando ls -l como se muestra.

# cd /data/backup
# ls -l

total 4
drwxr-xr-x 3 root root 4096 Oct 28 09:11 hourly.0

Paso 6: Automatización del proceso

Para automatizar el proceso, debe programar rsnapshot para que se ejecute en ciertos intervalos desde Cron. De forma predeterminada, rsnapshot viene con un archivo cron en "/etc/cron.d/rsnapshot", si no existe, cree uno y agregue las siguientes líneas.

De forma predeterminada, las reglas están comentadas, por lo que debe eliminar el "#" de delante de la sección de programación para habilitar estos valores.

# This is a sample cron file for rsnapshot.
# The values used correspond to the examples in /etc/rsnapshot.conf.
# There you can also set the backup points and many other things.
#
# To activate this cron file you have to uncomment the lines below.
# Feel free to adapt it to your needs.

0     */4    * * *    root    /usr/bin/rsnapshot hourly
30     3     * * *    root    /usr/bin/rsnapshot daily
0      3     * * 1    root    /usr/bin/rsnapshot weekly
30     2     1 * *    root    /usr/bin/rsnapshot monthly

Permítanme explicar exactamente lo que hacen las reglas cron anteriores:

  1. Se ejecuta cada 4 horas y crea un directorio por hora en el directorio/backup.
  2. Se ejecuta todos los días a las 3:30 a. m. y crea un directorio diario en el directorio/backup.
  3. Se ejecuta semanalmente todos los lunes a las 3:00 a. m. y crea un directorio semanal en el directorio/backup.
  4. Se ejecuta todos los meses a las 2:30 a. m. y crea un directorio mensual en el directorio/backup.

Para comprender mejor cómo funcionan las reglas cron, le sugiero que lea nuestro artículo que las describe.

  1. 11 ejemplos de programación cron

Paso 7: Informes de Rsnapshot

La rsnapshot proporciona un pequeño script de Perl de informes que le envía una alerta por correo electrónico con todos los detalles de lo que ocurrió durante la copia de seguridad de sus datos. Para configurar este script, debe copiar el script en algún lugar bajo “/ usr/local/bin” y hacerlo ejecutable.

# cp /usr/share/doc/rsnapshot-1.3.1/utils/rsnapreport.pl /usr/local/bin
# chmod +x /usr/local/bin/rsnapreport.pl

A continuación, agregue el parámetro "–stats" en su archivo "rsnapshot.conf" a la sección de argumentos largos de rsync.

vi /etc/rsnapshot.conf
rsync_long_args --stats	--delete        --numeric-ids   --delete-excluded

Ahora edite las reglas de crontab que se agregaron anteriormente y llame al script rsnapreport.pl para pasar los informes a la dirección de correo electrónico especificada.

# This is a sample cron file for rsnapshot.
# The values used correspond to the examples in /etc/rsnapshot.conf.
# There you can also set the backup points and many other things.
#
# To activate this cron file you have to uncomment the lines below.
# Feel free to adapt it to your needs.

0     */4    * * *    root    /usr/bin/rsnapshot hourly 2>&1  | \/usr/local/bin/rsnapreport.pl | mail -s "Hourly Backup" [email protected]
30     3     * * *    root    /usr/bin/rsnapshot daily 2>&1  | \/usr/local/bin/rsnapreport.pl | mail -s "Daily Backup" [email protected]
0      3     * * 1    root    /usr/bin/rsnapshot weekly 2>&1  | \/usr/local/bin/rsnapreport.pl | mail -s "Weekly Backup" [email protected]
30     2     1 * *    root    /usr/bin/rsnapshot monthly 2>&1  | \/usr/local/bin/rsnapreport.pl | mail -s "Montly Backup" [email protected]

Una vez que haya agregado las entradas anteriores correctamente, recibirá un informe en su dirección de correo electrónico similar al que se muestra a continuación.

SOURCE           TOTAL FILES	FILES TRANS	TOTAL MB    MB TRANS   LIST GEN TIME  FILE XFER TIME
--------------------------------------------------------------------------------------------------------
localhost/          185734	   11853   	 2889.45    6179.18    40.661 second   0.000 seconds

Enlaces de referencia

  1. rsnapshot página de inicio

Eso es todo por ahora, si ocurre algún problema durante la instalación, envíeme un comentario. Hasta entonces, permanezca atento a TecMint para obtener más artículos interesantes sobre el mundo del código abierto.