Está en la página 1de 4

10/8/2020 Sincronizar directorios remotos con rsync vía SSH

Sincronizar directorios remotos con rsync vía SSH

07 Septiembre 2018

SSH backup rsync

Rsync es una herramienta de copia y sincronización de archivos locales y remotos muy utilizada
para mantener copias sincronizadas (mirrors) y realizar backups. Permite copiar localmente o
desde/hacia otro host remoto sobre una shell. Posee un gran número de opciones que posibilitan
controlar cada aspecto del conjunto de archivos a ser copiado. A su vez, utiliza un algoritmo que
transmite sólo las diferencias entre archivos, lo que optimiza el uso de la red.

Para identificar qué archivos necesitan ser copiados, rsync utiliza un algoritmo de verificación
rápida, el cual compara las fechas de modificación y tamaño.

Este artículo explica cómo sincronizar una copia remota de un directorio utilizando rsync a través
de SSH.

Supongamos que en el sistema "devuan.linuxito.com" existe un directorio /backups/ del cual se


desea mantener una copia local sincronizada:

root@devuan:~# ls -l /backups/
total 932
-rw-r--r-- 1 root root 952727 sep 7 12:59 etc.tar.gz

Se observa que inicialmente cuenta con un único archivo.

El sistema local es "hal9000" y se desea mantener una copia del directorio remoto
en /data/backups :

emi@hal9000:/data/backups % ls -l /data/backups/
total 0

El uso típico de rsync tiene la forma:

rsync -av <ORIGEN> <DESTINO>

La opción -v indica que la salida sea verbosa (informativa), mientras que -a (modo de archivo)
es una opción que engloba varias opciones comunes ( -rlptgoD ):

-r : modo recursivo.
-l : copiar enlaces simbólicos.
-p : preservar los permisos.
-t : preservar fechas de modificación.

https://www.linuxito.com/gnu-linux/nivel-basico/1097-sincronizar-directorios-remotos-con-rsync-via-ssh 1/4
10/8/2020 Sincronizar directorios remotos con rsync vía SSH

-g : preservar el grupo.
-o : preservar el dueño.
-D : preservar dispositivos y archivos especiales.

Para realizar la copia de archivos a través de SSH, es necesario utilizar la opción -e . Como
parámetro a esta opción es posible agregar cualquier parámetro u opción necesaria para SSH,
como por ejemplo el puerto (si se utiliza uno personalizado).

La sintaxis para especificar un host remoto es idéntica a la de, por ejemplo, scp:

usuario@host:ruta

De esta forma, para actualizar nuestro directorio local /data/backups/ según el


directorio /backups/ del host "devuan.linuxito.com" a través de SSH (y autenticando como el
usuario "emi"), se ejecuta el siguiente comando:

emi@hal9000:/data/backups % rsync -av -e 'ssh -p22' emi@devuan.linuxito.com:/backups/ /data/backu


emi@devuan.linuxito.com's password:
receiving incremental file list
./
etc.tar.gz

sent 46 bytes received 953,074 bytes 272,320.00 bytes/sec


total size is 952,727 speedup is 1.00

emi@hal9000:/data/backups % ls -l
total 992
-rw-r--r-- 1 emi wheel 952727 Sep 7 12:59 etc.tar.gz

Se observa que se ha traído el archivo "etc.tar.gz".

Prueba de concepto

Veamos qué sucede si se agregan nuevos archivos en el directorio remoto (origen):

root@devuan:~# echo hola > /backups/hola1.txt


root@devuan:~# echo hola > /backups/hola2.txt
root@devuan:~# ls -l /backups/
total 940
-rw-r--r-- 1 root root 952727 sep 7 12:59 etc.tar.gz
-rw-r--r-- 1 root root 5 sep 7 13:02 hola1.txt
-rw-r--r-- 1 root root 5 sep 7 13:03 hola2.txt

Al sincronizar nuevamente, sólo se traen desde el host remotos los nuevos archivos:

https://www.linuxito.com/gnu-linux/nivel-basico/1097-sincronizar-directorios-remotos-con-rsync-via-ssh 2/4
10/8/2020 Sincronizar directorios remotos con rsync vía SSH

emi@hal9000:/data/backups % rsync -av -e 'ssh -p22' emi@devuan.linuxito.com:/backups/ /data/backu


emi@devuan.linuxito.com's password:
receiving incremental file list
./
hola1.txt
hola2.txt

sent 65 bytes received 214 bytes 111.60 bytes/sec


total size is 952,737 speedup is 3,414.83
emi@hal9000:/data/backups % ls -l
total 1000
-rw-r--r-- 1 emi wheel 952727 Sep 7 12:59 etc.tar.gz
-rw-r--r-- 1 emi wheel 5 Sep 7 13:02 hola1.txt
-rw-r--r-- 1 emi wheel 5 Sep 7 13:03 hola2.txt

El archivo "etc.tar.gz" no se trae nuevamente porque simplemente no ha cambiado.

En cambio si se modifica un archivo existente:

root@devuan:~# echo hola >> /backups/hola1.txt


root@devuan:~# ls -l /backups/
total 940
-rw-r--r-- 1 root root 952727 sep 7 12:59 etc.tar.gz
-rw-r--r-- 1 root root 10 sep 7 13:03 hola1.txt
-rw-r--r-- 1 root root 5 sep 7 13:03 hola2.txt
root@devuan:~# cat /backups/hola1.txt
hola
hola

Al sincronizar nuevamente, este sí se actualiza (su tamaño se ha modificado):

emi@hal9000:/data/backups % rsync -av -e 'ssh -p22' emi@devuan.linuxito.com:/backups/ /data/backu


emi@devuan.linuxito.com's password:
receiving incremental file list
hola1.txt

sent 49 bytes received 167 bytes 86.40 bytes/sec


total size is 952,742 speedup is 4,410.84
emi@hal9000:/data/backups % ls -l
total 1000
-rw-r--r-- 1 emi wheel 952727 Sep 7 12:59 etc.tar.gz
-rw-r--r-- 1 emi wheel 10 Sep 7 13:03 hola1.txt
-rw-r--r-- 1 emi wheel 5 Sep 7 13:03 hola2.txt

Borrar archivos en el destino

Si luego de sincronizar se borran archivos en el origen:

root@devuan:~# rm /backups/hola*
root@devuan:~# ls -l /backups/
total 932
-rw-r--r-- 1 root root 952727 sep 7 12:59 etc.tar.gz

https://www.linuxito.com/gnu-linux/nivel-basico/1097-sincronizar-directorios-remotos-con-rsync-via-ssh 3/4
10/8/2020 Sincronizar directorios remotos con rsync vía SSH

Estos no serán borrados en el destino durante la próxima sincronización:

emi@hal9000:/data/backups % rsync -av -e 'ssh -p22' emi@devuan.linuxito.com:/backups/ /data/backu


emi@devuan.linuxito.com's password:
receiving incremental file list
./

sent 27 bytes received 72 bytes 28.29 bytes/sec


total size is 952,727 speedup is 9,623.51
emi@hal9000:/data/backups % ls -l
total 1000
-rw-r--r-- 1 emi wheel 952727 Sep 7 12:59 etc.tar.gz
-rw-r--r-- 1 emi wheel 10 Sep 7 13:03 hola1.txt
-rw-r--r-- 1 emi wheel 5 Sep 7 13:03 hola2.txt

Estos archivos presentes en el destino, pero que no existen en el origen, se denominan


"extraños". Rsync tiene la capacidad de borrar archivos extraños (si se desea mantener una
sincronización exacta) gracias a la opción --delete :

emi@hal9000:/data/backups % rsync -av --delete -e 'ssh -p22' emi@devuan.linuxito.com:/backups/ /d


emi@devuan.linuxito.com's password:
receiving incremental file list
deleting hola2.txt
deleting hola1.txt

sent 20 bytes received 69 bytes 35.60 bytes/sec


total size is 952,727 speedup is 10,704.80
emi@hal9000:/data/backups % ls -l
total 992
-rw-r--r-- 1 emi wheel 952727 Sep 7 12:59 etc.tar.gz

Sin embargo, cabe destacar que se debe utilizar con mucho cuidado, especialmente cuando se
utiliza junto con el modo recursivo ( -a o -r ).

En conclusión, rsync es una excelente herramienta para mantener copias actualizadas y realizar
copias de seguridad. Si se desea ejecutar este tipo de sincronización de manera programada y
desatendida, será necesario autenticar el usuario remoto a través de SSH mediante clave pública.

https://www.linuxito.com/gnu-linux/nivel-basico/1097-sincronizar-directorios-remotos-con-rsync-via-ssh 4/4

También podría gustarte