Sincronizar Directorios con Rsync

Muchas veces resulta útil una herramienta flexible y sencilla mediante la cual podamos sincronizar un directorio, ya sea en el mismo equipo o en uno remoto.
Con rsync podríamos fácilmente poner en producción un sistema de backups en linux.

Características principales

1. Eficiencia: es muy eficiente al copiar y/o sincronizar archivos local o remotamente, es mas rápido que scp a la hora de hacer sincronizaciones, ya que necesita copiar archivos enteros solo la primera vez. A partir de la segunda, solo copiará los datos que hayan cambiado.
2. Copia permisos, grupos y propietarios
3. Consume menos AB ya que en la transferencia comprime (y posteriormente descomprime en el destino) los datos.

Instalación:

[root@local ~]# yum install rsync

La sintaxis básica es la siguiente:

rsync [opciones] [origen] [destino]

El destino puede ser local o remoto.

Opciones mas comunes:

-v: modo verboso.
-r: copia datos en forma recursiva pero no mantiene permisos ni propietarios.
-a: modo de archivo. Copia datos en forma recursiva y mantiene propietarios y permisos.
-z: comprime los datos al copiar.
-h: muestra números amigables para el usuario.

Para copiar directorios se utiliza la opción -a o su equivalente en formato largo –archive, que es una combinación de las siguientes opciones:

-r : Recorrer la estructura de directorios recursivamente
-l : Copiar enlaces simbólicos
-p : Conservar los permisos
-t : Conservar la hora
-g : Conservar el grupo
-o : Conservar el propietario
-D : Mantener archivos de dispositivo (solo para root)

También se pueden incluir o excluir determinados archivos mediante el uso de las siguientes opciones:

–exclude=PATTERN Excluir archivos que coinciden con la expresión PATTERN
–exclude-from=FILE Obtener el conjunto de expresiones del archivo especificado por FILE
–include=PATTERN No excluir los archivos que coinciden con la expresión PATTERN
–include-from=FILE Obtener el conjunto de expresiones del archivo especificado por FILE
–files-from=FILE Incluir los archivos especificados en el archivo FILE

Ejemplo Práctico:

Se requiere automatizar un respaldo diario del directorio local /home/reportes en el host remoto 192.168.13.24 detro del directorio destino /backups/datos, transferir el directorio comprimido.

1. Crear el usuario mediante el cual se realizará la sincronización del directorio:

[root@local ~]# useradd backupusr
[root@local ~]# passwd backupusr

2. Generar la autenticación entre host local y remoto mediante llave pública (para que no solicite contraseña ya que vamos a automatizar)

Generar la clave pública en el host local, no ingresar passphrase:

[root@local ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
e3:a8:e1:a2:e3:1f:fc:ee:f7:7a:a7:e5:c1:da:5a:01 root@local
The key’s randomart image is:
+–[ RSA 2048]—-+
| |
| |
| |
| |
| S E |
| + o .. |
| . * oo|
| +.o . oO|
| .++oo+. .o*B|
+—————–+

Copiar la clave pública al host remoto:

[root@local~]# ssh-copy-id -i ~/.ssh/id_rsa.pub backupusr@192.168.13.24

backupusr@192.168.13.24’s password:
Now try logging into the machine, with “ssh ‘backupusr@192.168.13.24′”, and check in:

.ssh/authorized_keys

Comprobamos y validamos que podemos entrar sin password al host remoto:

[root@local ~]# ssh backupusr@192.168.13.24
[backupusr@remoto ~]$

3. Crear un script bash con el comando a ejecutar
Nota: se agrega la opción –delete ya que rsync por defecto si borramos un archivo del directorio origen este no lo elimina en el directorio destino a menos que se le agregue dicah opción.

[root@local ~]# vi sincronizadir.sh

#!/bin/bash

rsync -avz –delete /home/reportes backupusr@192.168.13.24:/backups/datos/

4. Agregar una tarea de cron para la ejecución del comando

[root@local ~]# vi /etc/crontab

#Tarea que se ejecuta diariamente a la 1:05 AM, salida y errores se guardan en log_sincroniza.txt
05 1 * * * root /bin/sh /root/sincronizadir.sh > /root/log_sincroniza.txt 2>&1

Dejar un comentario

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