RSync en breve: qué es y para que sirve

¿Qué es?

El RSync (remote sync, sincronización remota) es una utilidad diseñada para realizar copias de datos, minimizando la cantidad de información que ha de transmitirse. Es un programa que nació para Unix, si bien hoy en día también hay versiones para windows. El truco de rsync consiste en utilizar un checksum rotatorio. Los archivos se dividen en bloques, y se utiliza una función de resumen (SHA1, por ejemplo) y un chequeo rotatorio para determinar los bloques que han cambiado. Entonces rsync sólo envía los bloques que se hayan modificado, mejorando la eficiencia de la transmisión considerablemente. Además, rsync dispone de modos en los que intenta recomponer archivos a partir de información ya disponible en el destino.

Por defecto, rsync sólo envía los ficheros cuando la fecha del sistema de archivos sea posterior a la que se encuentra en el destino, o no existan en él. Es posible forzar el uso de la función de resumen para todos los archivos con el parámetro -c para asegurase de que todo está en orden, si uno no se fía de las fechas del sistema de archivos.

Para la transmisión de datos, RSync puede utilizar distintos protocolos. Los casos más típicos son los de copia local, en cuyo caso rsync simplemente actuará como un cp más sofisticado, el uso de su propio puerto, o SSH. Este último mecanismo es quizás el más recomendable.

Uso básico de RSync.

RSync es un programa bastante complejo. Dada su función dispone de una gran cantidad de parámetros y modificadores para adaptar su comportamiento a las diferentes necesidades del administrador de sistemas en cuestión. No me puedo parar en cada uno de ellos, sino que me voy a fijar en el caso más común y comentar algunos de los modificadores típicos.

En general para invocar RSync, se usa un comando como este:

rsync modificadores fuente destino

Por ejemplo, pongamos que queremos copiar el directorio cosas al servidor ejemplo.es con el usuario admin y en el subdirectorio backup. Haríamos lo siguiente:

rsync cosas admin@ejemplo.es:backup

El usuario y el servidor se escriben como usuario@servidor indicando que se trata de una conexión SSH. Cuando se quiera utilizar el protocolo de rsync, será necesario utilizar un doble dos puntos (::) entre el servidor y el directorio.

Si se quiere realizar la copia en la otra dirección (copiar del servidor remoto al local) simplemente se coloca el patrón admin@ejemplo.es:backups en primer lugar.

Al elegir el directorio que queremos copiar, podemos añadir una barra (/) al final. Esto indicaría que lo que queremos copiar no es el directorio, sino sus contenidos. Si tenemos un directorio animales con archivos perro, gato y cisne, y lo queremos copiar a ejemplo.es:backup, si pusiéramos la barra, tendríamos:

  • backup/perro
  • backup/gato
  • backup/cisne

De no poner la barra, tendríamos:

  • backup/animales
  • backup/animales/perro
  • backup/animales/gato
  • backup/animales/cisne

Por último, comentaré los modificadores más comunes para RSync (hay muchos más). Para esto lo mejor es leer el manual, pero con esta lista podéis salir de algún aprieto puntual:

  • z: comprimir datos.
  • c: utilizar checksums para verificar que los archivos no han cambiado, no fiarse de la fecha.
  • r: copia recursiva.
  • a: archivo. Preserva permisos, y en general intenta ser fiel al origen.
  • v: muestra más información, como los nombres de archivos copiados.
  • P: muestra el progreso.
  • --delete, --delete-after y --delete-before: borra los archivos del destino que no estén en origen, y obviamente se puede elegir hacerlo después o antes de la transferencia.
  • y: intenta usar archivos parecidos para ahorrar datos.
  • u: no vuelve a copiar los archivos que son más nuevos en el destino.

Una cuestión importante es el medio por el que RSync detecta si los archivos han cambiado o no. El mecanismo por defecto consiste en comparar las fechas de modificación y el tamaño, y si hay variaciones, copiar el archivo. Pero se pueden utilizar otros mecanismos: -c utiliza checksums, -u sólo comprueba que el archivo de destino sea más moderno que el de la fuente, --size-only atiende sólo al tamaño, y -I copiará todo. Hay que considerar que si se hace una copia a un sistema de archivos de windows, es muy probable que la fecha de modificación sea la de la realización de la copia, de forma que es necesario utilizar -u o --size-only para evitar copias innecesarias.

Consideraciones para usar RSync en Windows.

IMPORTANTE. Si queréis utilizar la versión de RSync para Windows a la que me refiero más arriba, hay que tener en cuenta un par de ideas:

  1. Hay que editar el fichero cwrsync.cmd para establecer las rutas adecuadas, añadir el directorio de rsync a la variable de entorno path, etc.
  2. Para indicar rutas locales, podéis usar rutas relativas; pero para rutas absolutas hay que prefijar /cygdrive/unidad.
  3. Huelga decir que las rutas en rsync se separan con la barra (/) aunque sean en Windows, y si utilizáis espacios en las rutas es conveniente usar comillas para delimitarlas.

Espero que esta info os sea de utilidad para evaluar si RSync os puede sacar de un apuro, y para utilizarlo en los casos más comunes. Para lo demás, man rsync. Dicho esto, si os surgen dudas, no dudéis en contactarme.

links

social