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 por 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. Install and Enable EPEL Repository in 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: Configurar el 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 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 rsnapshot.

  1. Create SSH Passwordless Login Using 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 vi o nano editor.

# 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 se vea 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 a 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. How to Backup/Sync Directories Using Rsync (Remote Sync) Tool
  2. How to Transfer Files/Folders Using SCP Command

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 realizar 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 es similar al siguiente.

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

El uso de la opción de exclusión de archivo puede ser muy complicado debido al uso de la recursividad rsync. Entonces, 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 = Configuration file version
  2. snapshot_root = Backup Destination to store snapshots
  3. cmd_cp = Path to copy command
  4. cmd_rm = Path to remove command
  5. cmd_rsync = Path to rsync
  6. cmd_ssh = Path to SSH
  7. cmd_logger = Path to shell command interface to syslog
  8. cmd_du = Path to disk usage command
  9. interval hourly = How many hourly backups to keep.
  10. interval daily = How many daily backups to keep.
  11. interval weekly = How many weekly backups to keep.
  12. interval monthly = How many monthly backups to keep.
  13. ssh_args = Optional SSH arguments, such as a different port (-p )
  14. verbose = Self-explanatory
  15. loglevel = Self-explanatory
  16. logfile = Path to logfile
  17. exclude_file = Path to the exclude file (will be explained in more detail)
  18. rsync_long_args = Long arguments to pass to rsync
  19. lockfile = Self-explanatory
  20. backup = Full path to what to be backed up followed by relative path of placement.

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. Runs every 4 hours and creates an hourly directory under /backup directory.
  2. Runs daily at 3:30am and create a daily directory under /backup directory.
  3. Runs weekly on every Monday at 3:00am and create a weekly directory under /backup directory.
  4. Runs every monthly at 2:30am and create a monthly directory under /backup directory.

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

  1. 11 Cron Scheduling Examples

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" y[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 homepage

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.