Cómo utilizar Rsync para sincronizar directorios locales y remotos

Introducción

Rsync, significa “sincronización remota”, es una herramienta de sincronización remota y local de archivos. Utiliza un algoritmo que minimiza la cantidad de datos copiados al mover solo las porciones de archivos que han cambiado.

En esta guía, cubriremos el uso básico de esta poderosa utilidad. Usaremos un Ubuntu VPS en los ejemplos, pero puedes usar cualquier distribución moderna de Linux para seguir el tutorial.

¿Qué es Rsync?

Rsync es una herramienta de sincronización habilitada para red muy flexible. Se puede también referirse al protocolo de red desarrollado para utilizar esta herramienta. Cuando hacemos referencia a rsync en esta guía, nos referimos principalmente a la utilidad, y no al protocolo.

Debido a su ubicuidad en Linux y sistemas similares a Unix y su popularidad como herramienta para los scripts del sistema, se incluye en la mayoría de las distribuciones de Linux por defecto.

Sintaxis básica

La sintaxis básica de rsync es muy sencilla y funciona de forma similar a ssh, scp y cp.
Crearemos dos directorios de prueba y algunos archivos de prueba con los siguientes comandos:

Ahora tenemos un directorio llamado dir1 con 100 archivos vacíos en él.

También tenemos un directorio vacío llamado dir2.

Para sincronizar los contenidos de dir1dir2 en el mismo sistema, debes escribir:

 La opción -r significa recursiva, que es necesaria para la sincronización de directorios.

También podríamos usar el indicador -a en su lugar:

La opción -a es un indicador de combinación. Significa “archivo”, se sincroniza recursivamente y conserva enlaces simbólicos, archivos especiales y de dispositivos, tiempos de modificación, grupo, propietario y permisos. Es más comúnmente usado que -r y usualmente es lo que quieres usar.

Una nota importante

Es posible que hayas notado que hay una barra inclinada (/) al final del primer argumento en los comandos anteriores:

Esto es necesario para indicar “los contenidos de dir1“. La alternativa, sin la barra diagonal final, incluiría dir1, incluido el directorio, dentro dir2. Esto crearía una jerarquía que se parece a lo siguiente:

Siempre debes verificar dos veces tus argumentos antes de ejecutar un comando rsync. Rsync proporciona un método para hacerlo pasando las opciones -n o –dry-run. El indicador -v (para ver más detalles) también es necesario para obtener el resultado apropiado:

Debes comparar esta salida con la salida que obtenemos cuando eliminamos la barra inclinada al final:

Puedes ver aquí que el directorio en sí se transfiere.

Cómo usar Rsync para sincronizar con un sistema remoto

La sincronización con un sistema remoto es trivial si tiene sacceso SSH a la máquina remota y rsync instalado en ambos lados. Si necesitas configurar claves SSH, has clic aquí.

Una vez que hayas verificado el acceso SSH entre las dos máquinas, puedes sincronizar la carpeta dir1 de una computadora anterior a la remota mediante el uso de esta sintaxis (ten en cuenta que queremos transferir el directorio real en este caso, por lo que omitiremos la barra diagonal):

Esto se denomina operación “push” porque empuja un directorio del sistema local a un sistema remoto. La operación opuesta es “pull”. Se utiliza para sincronizar un directorio remoto con el sistema local. Si dir1 estuvieran en el sistema remoto en lugar de nuestro sistema local, la sintaxis sería:

Como cp y herramientas similares, la fuente siempre es el primer argumento y el destino siempre es el segundo.

Opciones útiles para Rsync

Rsync proporciona muchas opciones para alterar el comportamiento predeterminado de la utilidad. Ya hemos discutido algunas de los indicadores más necesarios.

Si estás transfiriendo archivos que aún no se han comprimido, como los archivos de texto, puedes reducir la transferencia de red agregando compresión con la opción -z:

El indicador -P es muy útil. Combina los indicadores –progress y –partial. El primero de ellos te da una barra de progreso para las transferencias y el segundo le permite reanudar las transferencias interrumpidas:

Si ejecutamos el comando nuevamente, obtendremos una salida más corta, ya que no se han realizado cambios. Esto ilustra la capacidad de rsync para usar los tiempos de modificación para determinar si se han realizado cambios.

Podemos actualizar el tiempo de modificación en algunos de los archivos y ver que rsync copia de forma inteligente solo los archivos modificados:

Para mantener dos directorios verdaderamente sincronizados, es necesario eliminar los archivos del directorio de destino si se eliminan del origen. De forma predeterminada, rsync no elimina nada del directorio de destino.

Podemos cambiar este comportamiento con la opción –delete. Antes de usar esta opción, usa la opción –dry-run y realiza pruebas para evitar la pérdida de datos:

Si deseas excluir ciertos archivos o directorios ubicados dentro de un directorio que está sincronizando, puedes hacerlo especificándolos en una lista separada por comas después de la opción –exclude =:

Si hemos especificado un patrón para excluir, podemos anular esa exclusión para archivos que coincidan con un patrón diferente usando la opción –include = :

Finalmente, la opción –backup rsync se puede usar para almacenar copias de seguridad de archivos importantes. Se la utilizas junto con la opción –backup-dir, este especifica el directorio donde se deben almacenar los archivos de respaldo.

Conclusión

Rsync puede simplificar las transferencias de archivos a través de conexiones en red y agregar robustez a la sincronización de directorios locales. La flexibilidad de rsync lo convierte en una buena opción para muchas operaciones de nivel de archivo diferentes.

Un dominio de rsync te permite diseñar operaciones de copia de seguridad complejas y obtener un control preciso sobre lo que se transfiere y cómo se transfiere.