rsync ( remote sync) es una utilidad para transferir y sincronizar archivos entre una computadora y una unidad de almacenamiento y entre computadoras en red comparando los tiempos de modificación y los tamaños de los archivos. [8] Se encuentra comúnmente en sistemas operativos tipo Unix y está bajo la licencia GPL-3.0 o posterior . [4] [5] [9] [10] [11] [12]
rsync está escrito en C como una aplicación de un solo subproceso . [13] El algoritmo rsync es un tipo de codificación delta y se utiliza para minimizar el uso de la red. Se pueden utilizar Zstandard , LZ4 o Zlib para una compresión de datos adicional , [8] y se pueden utilizar SSH o stunnel para la seguridad.
rsync se utiliza normalmente para sincronizar archivos y directorios entre dos sistemas diferentes. Por ejemplo, si rsync local-file user@remote-host:remote-file
se ejecuta el comando, rsync utilizará SSH para conectarse a user
. remote-host
[ 14] Una vez conectado, invocará el rsync del host remoto y luego los dos programas determinarán qué partes del archivo local deben transferirse para que el archivo remoto coincida con el local. Una aplicación de rsync es la sincronización de repositorios de software en sitios espejo utilizados por sistemas de gestión de paquetes . [15] [16]
rsync también puede operar en modo demonio (rsyncd), sirviendo y recibiendo archivos en el protocolo nativo rsync (usando la rsync://
sintaxis).
Andrew Tridgell y Paul Mackerras escribieron el rsync original, que se anunció por primera vez el 19 de junio de 1996. [1] Es similar en función e invocación a rdist ( rdist -c
), creado por Ralph Campbell en 1983 y lanzado como parte de 4.3BSD . [17] Tridgell analiza el diseño, la implementación y el rendimiento de rsync en los capítulos 3 a 5 de su tesis doctoral de 1999. [18] A partir de 2023 [árbitro], Wayne Davison se encarga de su mantenimiento. [2]
Debido a su flexibilidad, velocidad y capacidad de creación de scripts, rsync
se ha convertido en una utilidad estándar de Linux, incluida en todas las distribuciones populares de Linux. [ cita requerida ] Se ha portado a Windows (a través de Cygwin , Grsync o SFU [19] ), FreeBSD , [20] NetBSD , [21] OpenBSD , [22] y macOS .
Similar a cp, rcpy scp, rsync
requiere la especificación de una fuente y un destino, de los cuales al menos uno debe ser local. [23]
Sintaxis genérica:
rsync [ OPCIÓN ] … ORIGEN … [ USUARIO@ ] HOST:DESTINO rsync [ OPCIÓN ] … [ USUARIO@ ] HOST:ORIGEN [ DESTINO ]
donde SRC es el archivo o directorio (o una lista de múltiples archivos y directorios) desde donde copiar, DEST es el archivo o directorio al que copiar y los corchetes indican parámetros opcionales.
rsync
Puede sincronizar clientes Unix con un servidor Unix central mediante rsync
/ ssh
y cuentas Unix estándar. Puede utilizarse en entornos de escritorio, por ejemplo, para sincronizar archivos de manera eficiente con una copia de seguridad en un disco duro externo. Una utilidad de programación como cron
puede llevar a cabo tareas como rsync
la duplicación automatizada basada en cifrado entre varios hosts y un servidor central.
Una línea de comandos para reflejar FreeBSD podría verse así: [24]
$ rsync -avz --delete ftp4.de.FreeBSD.org::FreeBSD/ /pub/FreeBSD/
El servidor HTTP Apache admite rsync únicamente para actualizar espejos. [25]
$ rsync -avz --delete --safe-links rsync.apache.org::apache-dist /ruta/al/espejo
La forma preferida (y más sencilla) de reflejar un sitio web de PuTTY en el directorio actual es usar rsync. [26]
rsync -auH rsync ://rsync.chiark.greenend.org.uk/ftp/users/sgtatham/putty-website-mirror/ .
Una forma de imitar las capacidades de Time Machine (macOS) ; [27]
$ date = $( date "+%FT%H-%M-%S" ) # rsync interpreta ":" como separador entre host y puerto (es decir, host:puerto), por lo que no podemos usar %T o %H:%M:%S aquí, por lo que usamos %H-%M-%S
$ rsync -aP --link-dest = $HOME /Backups/current /path/to/important_files $HOME /Backups/back- $date
$ ln -nfs $HOME /Backups/back- $date $HOME /Backups/current
Realice una copia de seguridad completa del directorio raíz del sistema: [28]
$ rsync -avAXHS --progress --exclude ={ "/dev/*" , "/proc/*" , "/sys/*" , "/tmp/*" , "/run/*" , "/mnt/*" , "/media/*" , "/lost+found" } / /ruta/a/la/carpeta/de/copia/de/respaldo
Eliminar todos los archivos y directorios, dentro de un directorio, de forma extremadamente rápida:
# Crea un directorio vacío en algún lugar, que es la primera ruta, y la segunda ruta es el directorio que quieres vaciar.
$ rsync -a --delete /path/to/empty/dir /path/to/dir/to/empty
Un proceso rsync opera comunicándose con otro proceso rsync, un emisor y un receptor. Al iniciarse, un cliente rsync se conecta a un proceso par. Si la transferencia es local (es decir, entre sistemas de archivos montados en el mismo host), el par se puede crear con fork, después de configurar las tuberías adecuadas para la conexión. Si está involucrado un host remoto, rsync inicia un proceso para manejar la conexión, generalmente Secure Shell . Tras la conexión, se emite un comando para iniciar un proceso rsync en el host remoto, que utiliza la conexión así establecida. Como alternativa, si el host remoto ejecuta un demonio rsync, los clientes rsync pueden conectarse abriendo un socket en el puerto TCP 873, posiblemente utilizando un proxy. [29]
Rsync tiene numerosas opciones de línea de comandos y archivos de configuración para especificar shells, opciones y comandos alternativos, posiblemente con la ruta completa y los números de puerto. Además de utilizar shells remotos, se puede utilizar la tunelización para que los puertos remotos aparezcan como locales en el servidor donde se ejecuta un demonio rsync. Esas posibilidades permiten ajustar los niveles de seguridad al estado del arte, mientras que un demonio rsync ingenuo puede ser suficiente para una red local.
Una solución es la --dry-run
opción que permite a los usuarios validar sus argumentos de línea de comandos y simular lo que sucedería al copiar los datos sin realizar ningún cambio ni transferir ningún dato.
De forma predeterminada, rsync determina qué archivos difieren entre los sistemas de envío y recepción comprobando la hora de modificación y el tamaño de cada archivo. Si la hora o el tamaño son diferentes entre los sistemas, transfiere el archivo del sistema de envío al sistema de recepción. Como esto solo requiere leer la información del directorio de archivos, es rápido, pero no detectará modificaciones inusuales que no cambien ninguno de los dos. [8]
Rsync realiza una comprobación más lenta pero completa si se invoca con --checksum
. Esto fuerza una comparación completa de la suma de comprobación en cada archivo presente en ambos sistemas. Salvo que se produzcan colisiones poco frecuentes de suma de comprobación , esto evita el riesgo de perder archivos modificados a costa de leer todos los archivos presentes en ambos sistemas.
La utilidad rsync utiliza un algoritmo inventado por el programador informático australiano Andrew Tridgell para transmitir de manera eficiente una estructura (como un archivo) a través de un enlace de comunicaciones cuando la computadora receptora ya tiene una versión similar, pero no idéntica, de la misma estructura. [30]
El destinatario divide su copia del archivo en fragmentos y calcula dos sumas de comprobación para cada fragmento: el hash MD5 y una " suma de comprobación continua " más débil pero más fácil de calcular. [31] Envía estas sumas de comprobación al remitente.
El remitente calcula la suma de comprobación para cada sección continua en su versión del archivo que tenga el mismo tamaño que los fragmentos utilizados por el destinatario. Mientras que el destinatario calcula la suma de comprobación solo para fragmentos que comiencen en múltiplos completos del tamaño del fragmento, el remitente calcula la suma de comprobación para todas las secciones que comiencen en cualquier dirección. Si alguna de esas sumas de comprobación continua calculadas por el remitente coincide con una suma de comprobación calculada por el destinatario, entonces esta sección es candidata para no transmitir el contenido de la sección, sino solo la ubicación en el archivo del destinatario. En este caso, el remitente usa el hash MD5, más costoso computacionalmente, para verificar que la sección del remitente y el fragmento del destinatario sean iguales. Tenga en cuenta que la sección en el remitente puede no estar en la misma dirección de inicio que el fragmento en el destinatario. Esto permite una transmisión eficiente de archivos que difieren por inserciones y eliminaciones. [32] Luego, el remitente envía al destinatario aquellas partes de su archivo que no coincidieron, junto con información sobre dónde fusionar los bloques existentes en la versión del destinatario. Esto hace que las copias sean idénticas.
La suma de comprobación continua utilizada en rsync se basa en la suma de comprobación adler-32 de Mark Adler , que se utiliza en zlib , y a su vez se basa en la suma de comprobación de Fletcher .
Si las versiones del archivo del remitente y del destinatario tienen muchas secciones en común, la utilidad necesita transferir relativamente pocos datos para sincronizar los archivos. Si se utilizan algoritmos de compresión de datos típicos , los archivos que son similares cuando están descomprimidos pueden ser muy diferentes cuando están comprimidos, y por lo tanto será necesario transferir todo el archivo. Algunos programas de compresión, como gzip , proporcionan un modo especial "rsyncable" que permite sincronizar eficazmente estos archivos, al garantizar que los cambios locales en el archivo descomprimido produzcan solo cambios locales en el archivo comprimido.
Rsync admite otras funciones clave que ayudan significativamente en las transferencias de datos o las copias de seguridad. Entre ellas se incluyen la compresión y descompresión de datos bloque por bloque mediante Zstandard , LZ4 o zlib , y la compatibilidad con protocolos como ssh y stunnel .
ElLa utilidad rdiff utiliza el algoritmo rsync para generararchivos deltacon la diferencia entre el archivo A y el archivo B (como la utilidaddiff, pero en un formato delta diferente). El archivo delta se puede aplicar al archivo A, convirtiéndolo en el archivo B (similar a lapatch). rdiff funciona bien conarchivos binarios.
El script rdiff-backup mantiene un espejo de respaldo de un archivo o directorio ya sea localmente o remotamente a través de la red en otro servidor. rdiff-backup almacena deltas rdiff incrementales con el respaldo, con lo cual es posible recrear cualquier punto de respaldo. [33]
La biblioteca librsync que utiliza rdiff es una implementación independiente del algoritmo rsync. No utiliza el protocolo de red rsync y no comparte ningún código con la aplicación rsync. [34] La utilizan Dropbox , rdiff-backup, duplicity y otras utilidades. [34]
La biblioteca acrosync es una implementación independiente y multiplataforma del protocolo de red rsync. [35] A diferencia de librsync, es compatible con rsync (versión de protocolo 29 o 30). Se publica bajo la Licencia Pública Recíproca y la utiliza el software comercial rsync Acrosync . [36]
El software de respaldo Duplicity escrito en Python permite realizar respaldos incrementales con servicios de almacenamiento de backend simples como el sistema de archivos local, sftp , Amazon S3 y muchos otros. Utiliza librsync para generar datos delta contra firmas de versiones de archivos anteriores, encriptándolos con gpg y almacenándolos en el backend. Por razones de rendimiento, se utiliza un directorio de archivo local para almacenar en caché las firmas de la cadena de respaldo, pero se puede volver a descargar desde el backend si es necesario.
A partir de macOS 10.5 y posteriores, existe un interruptor especial -E
que --extended-attributes
permite conservar gran parte de los metadatos de los archivos HFS+ al sincronizar entre dos máquinas que admiten esta función. Esto se logra transmitiendo la bifurcación de recursos junto con la bifurcación de datos. [37]
zsync es una herramienta similar a rsync optimizada para muchas descargas por versión de archivo. zsync es utilizado por distribuciones Linux como Ubuntu [38] para distribuir archivos de imagen ISO beta que cambian rápidamente . zsync utiliza el protocolo HTTP y archivos .zsync con hash rotativo precalculado para minimizar la carga del servidor y permitir la transferencia de diferencias para la optimización de la red. [39]
Rclone es una herramienta de código abierto inspirada en rsync que se centra en la nube y otros tipos de almacenamiento de alta latencia. Admite más de 50 proveedores diferentes y proporciona una interfaz similar a rsync para el almacenamiento en la nube. [40] Sin embargo, Rclone no admite sumas de comprobación continuas para la sincronización parcial de archivos (diferencias binarias) porque los proveedores de almacenamiento en la nube no suelen ofrecer la función y Rclone evita almacenar metadatos adicionales. [41]
rsync ampliamente utilizado.