Get updates via: rss | twitter | email

rsync Linux

Escrito por:
Fecha: 2020-04-24 10:05:00 00:00

Introducción

El nombre rsync viene del ingles remote sync o sincronización remota si lo traducimos a la lengua de Cervantes, se utiliza para sincronizar directorios en un mismo servidor o entre servidores.

Cuando existe la necesidad de copiar archivos entre dos directorios del mismo servidor o directorios de distintos servidores puedes usar rsync, se debe tener en cuenta que ambos servidores lo tienen que tener instalado en caso de copiar entre dos servidores.

¿Cómo funciona rsync?

Para sincronizar los archivos de dos directorios que tiene el mismo archivo rsync revisa el tamaño y la fecha y hora de ambos archivos y si se detectan cambios entonces el archivo del origen es copiado al destino. Usar este algoritmo, es barato en términos de cómputo, pero puede tener errores, pues solo revisando esos dos parámetros pueden haber cambios que no detecte.

Usando la opción -checksum entonces rsync realizará checksums de ambos archivos y de esta manera si puede detectar el más mínimo cambio y realizar la actualización del archivo en destino con la copia del de origen.

En el servidor de destino rsync realiza dos checksums un MD5 y un Rolling Hash y envía los resultados al servidor origen, en el origen rsync divide el archivo en partes y corre checksums en ellas y compara con lo recibido del origen, de esta manera determina que parte del archivo ha cambiado y envía esta al destino, junto con la información de donde debe insertar esta parte. Así ambos lados tienen la misma copia sin utilizar mucho ancho de banda.

Sintáxis

   opciones origen
        |     |
        v     v
rsync -av /home/user1/ user@remoteserver:/home/user
  ^                          ^
  |                          |
comando                   destino
  • comando: El comando en sí mismo.
  • Opciones: En este lugar van las opciones de rsync, veremos las más usadas abajo
  • Origen: El servidor que contiene los archivos de origen
  • Destino: El servidor donde los archivos se van a copiar

Algunos ejemplos

Antes de comenzar, vamos a aprender una de las opciones más útiles, –dry-run, con esta opción el comando simulará realizar lo indicado, pero no hará ningún cambio en ningún archivo, así podemos ver que sucederá cuando se ejecute el comando sin esta opción y sea ejecutado de verdad.

rsync -avz --dry-run /sourcefolder user@host:/destinationfolder/

Sincronizar dos directorios locales

Como se indicó arriba, se puede utilizar rsync para sincronizar dos directorios locales:

rsync -av /home/user1/my-app/ /home/user1/my-app-bak/

Sincronizar archivos entre dos servidores

Veamos como sincronizar dos servidores, en este ejemplo el local es el origen y el remoto el destino.

rsync -av /home/user1/my-app/ user@server1:/home/user1/my-app/

Sincronizando el remoto al local

Ahora al revés, el remote es el origen y el local el destino.

rsync -av user1@server1:/home/user1/my-app/ /home/user1/my-app/

Otros ejemplos

rsync -avz localfolder/ user1@host:/remotefolder/

Veamos cada una de las opciones usadas en este ejemplo:

-a
Este es un equivalente de -rlptgoD. Hace copias recursivas, y mantiene los atributos del orgien en el destino
-v
Esta opción hace que se despliege muchas más información en pantalla mientras se ejecuta el comando
-z
Con esta opción indicamos a rsync que comprima los datos previo al envío, así ganamos velocidad y ahorramos ancho de banda

Mantener dos archivos en sincronía

Si lo que deseas es mantener dos directorios perfectamente sincronizados, este sería el comando a utilizar.

rsync -cazv --delete /localfolder/ user@remote:/remotefolder/

Vamos ahora a la explicación de cada una de las opciones.

-c
Checksum, con esta opción se usará el checksum como fue explicado antes.
--delete
Borra los archivos en el destino que ya no están presentes en el origen

¿Cómo excluir archivos?

Si deseas excluir algunos archivos de la sincronización puedes usar el switch --exlude, como se puede ver en los ejemplos de abajo:

Excluir un solo archivo

rsync -avz --exclude 'file' source/ destination/

Excluir todos los archivos de un determinado tipo (por extensión)

rsync -avz --exclude '*.typ' source/ destination/

Excluir todo un directorio

rsync -avz --exclude 'folder' source/ destination/

Excluir multiples archivos o directorios

rsync -avz --exclude '*.file_type' --exclude 'folder' source/ destination/

Definir el máximos tamaño de archivo a transferir

rsync -avz --max-size="250k" /sourcefolder/ user@server:/destinationfolder/

Con la opción --max-size se pone un límite al tamaño de archivos a ser transferidos o sincronizados, cualquier archivo de un tamaño mayor no será tomado en cuenta en la sincronización

Borrar los archivos del origen cuando fueron copiados

Esta opción más que sincronizar sirve para "mover" los archivos, pues una vez copiados, se borran del origen.

rsync -zv --remove-source-files /sourcefolder/ user@host:/destinationfolder/

Limitar la velocidad de transferencia

Si se van a transferir un buen volumen de archivos, y sobre todo una considerable cantidad de megas, entonces conviene limitar la velocidad de transferencia o vas a saturar tu ancho de banda por completo.

rsync --bwlimit=100k -avz /sourcefolder/ user@host:/destinationserver/

En el ejemplo, se ve que se limita a 100kbps, puedes usar 1.5m por ejemplo para limitar a un mega y medio.

Especificar el protocolo a usar

Para usar ssh como protocolo para transferir los archivos.

rsync -avz -e ssh /sourcefolder/ user@host:/destinationserver/

y si queremos que ssh use otro puerto:

rsync -avz -e 'ssh -p 4000' /sourcefolder/ user@host:/destinationfolder/