rsync Linux
Escrito por: Guillermo Garron
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/