stringtranslate.com

sincronización r

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-filese 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).

Historia

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 , Wayne Davison se encarga de su mantenimiento. [2]

Debido a su flexibilidad, velocidad y capacidad de creación de scripts, rsyncse 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 .

Usar

Similar a cp, rcpy scp, rsyncrequiere 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.

rsyncPuede sincronizar clientes Unix con un servidor Unix central mediante rsync/ sshy 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 cronpuede llevar a cabo tareas como rsyncla duplicación automatizada basada en cifrado entre varios hosts y un servidor central.

Ejemplos

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

Conexión

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-runopció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.

Algoritmo

Cómo determinar qué archivos enviar

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.

Cómo determinar qué partes de un archivo han cambiado

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 .

Variaciones

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 -Eque --extended-attributespermite 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]

aplicaciones rsync

Véase también

Notas

  1. ^ GPL-3.0 o posterior desde el 10-07-2007, versión preliminar 3.0.0pre1 el 5-10-2007, versión estable 3.0.0 el 1-3-2008.
  2. ^ Sólo GPL-3.0 desde el 7 de julio de 2007 hasta el 9 de julio de 2007.
  3. ^ Sólo GPL-2.0 desde el 4 de febrero de 2007 hasta el 7 de julio de 2007.
  4. ^ GPL-2.0 o posterior desde el 16 de junio de 1996 hasta el 31 de enero de 2007, versiones 0.1 a 2.6.9.

Referencias

  1. ^ abc Tridgell, Andrew (19 de junio de 1996). «First release of rsync – rcp replacement». Grupo de noticias : comp.os.linux.announce. Usenet:  [email protected]. Archivado desde el original el 8 de noviembre de 2011. Consultado el 19 de julio de 2007 .
  2. ^ ab "rsync". Archivado desde el original el 27 de noviembre de 2014 . Consultado el 28 de noviembre de 2014 .
  3. ^ "NOTICIAS de rsync 3.3.0 (6 de abril de 2024)". 6 de abril de 2024. Consultado el 7 de abril de 2024 .
  4. ^ ab "Noticias".
  5. ^ ab "ajustando un poco más el texto de la licencia".
  6. ^ "licencia de rsync".
  7. ^ "licencia de rsync".
  8. ^ abc «rsync(1) – Página del manual de Linux». linux.die.net . Archivado desde el original el 1 de enero de 2017 . Consultado el 2 de febrero de 2017 .
  9. ^ Sawood, Khalid (18 de diciembre de 2002). Manual de compresión sin pérdida. Elsevier. ISBN 9780080510491. Recuperado el 18 de agosto de 2014 .
  10. ^ Almacenamiento en caché y distribución de contenido web: actas del 8º Taller Internacional. Springer Science & Business Media. 2004. pág. 316. ISBN 9781402022579. Recuperado el 18 de agosto de 2014 – vía Internet Archive . rsync ampliamente utilizado.
  11. ^ Rasch, David; Burns, Randal; In-Place Rsync: sincronización de archivos para dispositivos móviles e inalámbricos Archivado el 13 de abril de 2016 en Wayback Machine , Departamento de Ciencias de la Computación, Universidad Johns Hopkins
  12. ^ Dempsey, Bert J.; Weiss, Debra (30 de abril de 1999). "Hacia un mecanismo de replicación eficiente y escalable para el proyecto I2-DSI". Informe técnico TR-1999-01 . CiteSeerX 10.1.1.95.5042 . 
  13. ^ "Bash - ¿Cómo acelerar rsync con transferencias de archivos simultáneas/concurrentes? - Stack Overflow". Archivado desde el original el 6 de agosto de 2019 . Consultado el 18 de diciembre de 2019 .
  14. ^ "Uso de Rsync y SSH". Troy.jdmz.net . Consultado el 18 de agosto de 2014 .
  15. ^ "Uso y funcionamiento de espejos". Proyecto GNU. Archivado desde el original el 16 de abril de 2020. Consultado el 15 de abril de 2020 .
  16. ^ "Cómo crear espejos públicos para CentOS". Wiki de CentOS. Archivado desde el original el 1 de abril de 2020. Consultado el 15 de abril de 2020 .
  17. ^ "dist(1)".
  18. ^ Tridgell, Andrew; Algoritmos eficientes para ordenar y sincronizar, febrero de 1999, consultado el 29 de septiembre de 2009
  19. ^ "Almacén de herramientas". Comunidad SUA . Archivado desde el original el 6 de abril de 2013.
  20. ^ "FreeBSD Ports" . Consultado el 24 de octubre de 2016 .
  21. ^ "Puertos NetBSD". Archivado desde el original el 25 de octubre de 2016 . Consultado el 24 de octubre de 2016 .
  22. ^ "Puertos OpenBSD" . Consultado el 24 de octubre de 2016 .
  23. ^ Ver el archivo README Archivado el 10 de diciembre de 2007 en Wayback Machine.
  24. ^ "Cómo crear una réplica de FreeBSD (con rsync)". Freebsd.org . Consultado el 18 de agosto de 2014 .
  25. ^ "Cómo convertirse en un espejo de la Apache Software Foundation". Apache.org. Archivado desde el original el 21 de agosto de 2014. Consultado el 18 de agosto de 2014 .
  26. ^ "PuTTY Web Site Mirrors: Mirroring Guidelines" (Directrices para la creación de espejos en sitios web de PuTTY). Chiark.greenend.org.uk. 20 de diciembre de 2007. Archivado desde el original el 19 de agosto de 2014. Consultado el 18 de agosto de 2014 .
  27. ^ "Rsync configurado para funcionar como Time Machine". Blog.interlinked.org. Archivado desde el original el 15 de noviembre de 2007. Consultado el 18 de agosto de 2014 .
  28. ^ "Copia de seguridad completa del sistema con rsync". wiki.archlinux.org. Archivado desde el original el 11 de febrero de 2015. Consultado el 15 de diciembre de 2014 .
  29. ^ "Cómo funciona Rsync". Archivado desde el original el 16 de diciembre de 2016 . Consultado el 24 de enero de 2017 .
  30. ^ "RSync – Descripción general". Archivado desde el original el 10 de abril de 2017 . Consultado el 9 de abril de 2017 .
  31. ^ Novedades sobre rsync 3.0.0 Archivado el 20 de marzo de 2008 en Wayback Machine (1 de marzo de 2008)
  32. ^ Norman Ramsey. El algoritmo Rsync
  33. ^ copia de seguridad de rdiff
  34. ^ ab Pool, Martin; "librsync" Archivado el 9 de diciembre de 2013 en Wayback Machine.
  35. ^ Chen, Gilbert. «acrosync-library». github.com. Archivado desde el original el 10 de febrero de 2017. Consultado el 22 de junio de 2016 .
  36. ^ "acrosync.com". Archivado desde el original el 20 de diciembre de 2019 . Consultado el 29 de julio de 2020 .
  37. ^ "Biblioteca para desarrolladores de Mac". Developer.apple.com. Archivado desde el original el 26 de septiembre de 2012. Consultado el 18 de agosto de 2014 .
  38. ^ "Zsync Cd Image". ubuntu.com . Consultado el 6 de enero de 2015 .
  39. ^ Sitio web de zsync
  40. ^ Craig-Wood, Nick. «Descripción general de los sistemas de almacenamiento en la nube». rclone.org . Archivado desde el original el 4 de octubre de 2017. Consultado el 10 de julio de 2017 .
  41. ^ Craig-Wood, Nick. "Preguntas frecuentes sobre Rclone". rclone.org . Archivado desde el original el 10 de mayo de 2022. Consultado el 13 de mayo de 2022 .
  42. ^ "Grsync para Windows". SourceForge . 12 de julio de 2016. Archivado desde el original el 24 de marzo de 2019 . Consultado el 24 de marzo de 2019 .

Enlaces externos