Rsync
|
rsync es una aplicación de software para sistemas de tipo Unix que ofrece transmisión eficiente de datos incrementales, que opera también con datos comprimidos y cifrados. Mediante una técnica de delta encoding, permite sincronizar archivos y directorios entre dos máquinas de una red o entre dos ubicaciones en una misma máquina, minimizando el volumen de datos transferidos. Una característica importante de rsync no encontrada en la mayoría de programas o protocolos es que la copia toma lugar con sólo una transmisión en cada dirección. rsync puede copiar o mostrar directorios contenidos y copia de archivos, opcionalmente usando compresión y recursión.
Sumario
Historia
Los autores originales son Andrew Tridgell y Paul Mackerras. Tridgell usó rsync como el tema de su tesis para su grado de PhD en la Australian National University.
rsync fue anunciado por primera vez el 19 de junio de 1996.
Rsync 3.0 fue lanzado el 1 de marzo de 2008.
Modo Demonio
En modalidad de "Daemon" servidor, rsync escucha por defecto el puerto TCP 873, sirviendo archivos en el protocolo nativo rsync o via un terminal remoto como RSH o SSH. En el último caso, el ejecutable del cliente rsync debe ser instalado en el host local y remoto.
Algoritmo
El algoritmo en que se basa rsync fue creado por el programador australiano Andrew Tridgell, permite transmitir eficientemente una estructura (como un archivo) a través de un canal de comunicación cuando el receptor ya tiene una versión diferente de la misma estructura. Su funcionamiento a grandes rasgos es el siguiente:
- El receptor divide su copia del archivo en bloques de tamaño fijo S, no solapados, y calcula dos sumas de verificación (checksum) para cada bloque: el hash MD4, y un "rolling checksum" más débil. Luego envía estos checksums al emisor. La versión 30 del protocolo (lanzado con rsync versión 3.0.0) ahora utiliza MD5 en lugar de MD4.
- El emisor calcula el rolling checksum para cada posible bloque de tamaño S, solapando bloques. Esto se puede hacer eficientemente gracias a una propiedad del rolling checksum: si el rolling checksum de los bytes n a n+S-1 es R, se puede calcular el checksum de los bytes n+1 a n+S a partir del byte n, el byte n+S y R, sin tener que examinar los bytes intermedios. Entonces, si ya se ha calculado el rolling checksum de los bytes 1 a 25, se puede calcular el rolling checksum de los bytes 2 a 26 de manera separada a partir del checksum anterior, y de los bytes 1 a 26.
- El rolling checksum usado en rsync está basado en el checksum adler-32, de Mark Adler, que es utilizado en zlib y que está basado a su vez en el checksum de Fletcher.
- El emisor compara entonces sus rolling checksums con los enviados por el receptor para determinar si existen coincidencias. Cuando las encuentra, verifica calculando el checksum MD4 para el bloque propio coincidente y comparando con el del bloque del receptor.
- Finalizado el proceso el emisor envía únicamente los bloques para los cuales no se encontró ninguna coincidencia, junto con instrucciones para su ensamblado en la versión del receptor. En la práctica, esto crea un archivo idéntico a la copia del emisor. Sin embargo, es en principio posible que la copia del receptor sea distinta en este punto del emisor: esto puede pasar cuando los dos archivos tienen pedazos diferentes con el mismo hash y rolling checksum. Cabe destacar que las posibilidades de que esto suceda son en la práctica extremadamente remotas.
Si las versiones del archivo del emisor y receptor tienen muchas secciones en común, la utilidad necesita transmitir pocos datos para sincronizar los archivos.
Características y aplicaciones
Mientras que el algoritmo rsync forma parte del núcleo de la aplicación rsync y esencialmente optimiza las transferencias entre dos computadoras sobre TCP/IP, la aplicación rsync provee otras funciones que asisten en la transferencia. Estas incluyen compresión y descompresión de los datos bloque por bloque, utilizando zlib al enviar y recibir, y soporte para protocolos de cifrado, tal como SSH, lo que permite transmisión cifrada y eficientemente diferenciada de datos comprimidos usando el algoritmo rsync.
Adicionalmente puede utilizarse una aplicación de tunneling también para crear un túnel cifrado que asegure los datos transmitidos.
Además de archivos, el algoritmo permite copiar directorios, aún recursivamente, así como vínculos, dispositivos, grupos y permisos. No requiere por defecto privilegios de root para su uso.
rsync fue escrito como un reemplazo de rcp y SCP. Una de las primeras aplicaciones de rsync fue el espejado (mirroring) o respaldo de múltiples clientes Unix dentro de un servidor Unix central, usando rsync/ssh y cuentas estándares de Unix. Habitualmente se lo ejecuta mediante herramientas de scheduling como cron, para automatizar procesos de sincronización entre múltiples computadoras host y servidores centrales.
Uso de la aplicación
La invocación más simple de la aplicación a través de línea de comandos tiene la siguiente forma:
rsync [OPTION]... SRC [SRC]... DEST
La simplicidad de la aplicación se puede ver en el siguiente ejemplo (se utilizan opciones largas para facilitar su explicación, pero también se pueden utilizar opciones abreviadas):
rsync --verbose --compress --rsh=/usr/local/bin/ssh --recursive \ --times --perms --links --delete --exclude "*bak" --exclude "*~" \ /www/* webserver:/www
Este comando ejecuta rsync en modo verboso (muestra mensajes de estado por la salida estándar), con compresión, a través de ssh, en forma recursiva para los subdirectorios, preservando fechas y permisos del archivo origen, incluyendo vínculos, borrando archivos que fueron borrados en el directorio origen, excluyendo backups y archivos temporales (*bak, *~); el origen es el contenido del directorio /www y el destino el directorio /www en el host webserver.
Adicionalmente es necesario configurar uno de los puntos hosts como servidor rsync, ejecutando rsync en modo daemon:
rsync –-daemon
y configurando el archivo /etc/rsyncd.conf
.
Una vez configurado un servidor, cualquier máquina con rsync instalado puede sincronizar archivos hacia o desde éste.
Variantes
Existen otras utilidades basadas en el algoritmo rsync.
rdiff genera archivos delta con la diferencia entre dos archivos, que puede ser aplicada a uno para convertirlo en el otro en cualquier momento.
rdiff-backup utiliza rdiff para mantener espejos de backup de un directorio a través de una red. Rdiff-backup almacena delta rdiff incrementales, lo que permite recrear el directorio en cualquier punto de backup.
Existen además versiones para otros sistemas operativos, tal como rsyncX, una versión para Mac OS X que permite transferir forks de recursos, y que en su versión rsyncXCD permite además crear particiones booteables.
Incluso es posible utilizar rsync en Windows, a través de Cygwin.
Véase también
- CVSup
- Unison (file synchronizer)
- PowerFolder
- Jigdo
- Grsync, Graphical User Interface (GUI) for rsync
- cwRsync
Enlaces externos
- Página oficial de rsync (en inglés)
- Algoritmo de rsync (en inglés)
- Versión html de página man de rsync (en inglés)
- Using rsync on windows (en inglés)
- Official rdiff-backup site (en inglés)
- rsyncrypto home page (en inglés)
- QtdSync download (en inglés)