stringtranslate.com

sincronización

rsync 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. [9] Se encuentra comúnmente en sistemas operativos tipo Unix y está bajo la licencia GPL-3.0 o posterior . [5] [6] [10] [11] [12] [13]

rsync está escrito en C como una aplicación de un solo subproceso . [14] El algoritmo rsync es un tipo de codificación delta y se utiliza para minimizar el uso de la red. Se pueden usar Zstandard , LZ4 o Zlib para compresión de datos adicional , [9] y SSH o stunnel por seguridad.

rsync se utiliza normalmente para sincronizar archivos y directorios entre dos sistemas diferentes. Por ejemplo, si se ejecuta el comando rsync local-file user@remote-host:remote-file, rsync usará SSH para conectarse usercomo remote-host. [15] 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 los sistemas de gestión de paquetes . [16] [17]

rsync también puede operar en modo demonio (rsyncd), sirviendo y recibiendo archivos en el protocolo rsync nativo (usando la sintaxis "rsync://").

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 . [18] Tridgell analiza el diseño, la implementación y el rendimiento de rsync en los capítulos 3 a 5 de su doctorado de 1999. tesis. [19] A partir de 2023 , lo mantiene Wayne Davison. [2]

Debido a la flexibilidad, velocidad y capacidad de secuencias de comandos de rsync, se ha convertido en una utilidad estándar de Linux, incluida en todas las distribuciones populares de Linux. [ cita necesaria ] Se ha portado a Windows (a través de Cygwin , Grsync o SFU [20] ), FreeBSD , [21] NetBSD , [22] OpenBSD , [23] y macOS .

Usar

Al igual que cp, rcpy scp, rsyncrequiere la especificación de un origen y un destino, de los cuales al menos uno debe ser local. [24]

Sintaxis genérica:

rsync [ OPCIÓN ] … SRC … [ USUARIO@ ] HOST:DEST     rsync [ OPCIÓN ][ USUARIO@ ] HOST:SRC [ DEST ]    

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 donde copiar y los corchetes indican parámetros opcionales.

rsyncPuede sincronizar clientes Unix con un servidor Unix central utilizando rsync/ sshy cuentas Unix estándar. Se puede utilizar 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 la que cronpuede realizar tareas como rsyncla duplicación automatizada basada en cifrado entre múltiples hosts y un servidor central.

Ejemplos

Una línea de comando para reflejar FreeBSD podría verse así:

$ rsync -avz --delete ftp4.de.FreeBSD.org::FreeBSD/ /pub/FreeBSD/ [25]

El servidor HTTP Apache admite rsync solo para actualizar espejos.

$ rsync -avz --delete --safe-links rsync.apache.org::apache-dist /ruta/al/espejo [26]

La forma preferida (y más sencilla) de reflejar un sitio web PuTTY en el directorio actual es utilizar rsync.

$ rsync -auH rsync://rsync.chiark.greenend.org.uk/ftp/users/sgtatham/putty-website-mirror/ . [27]

Una forma de imitar las capacidades de Time Machine (macOS) ; [28]

$ fecha = $( fecha "+%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í, entonces usamos %H-%M-%S
$ rsync -aP --link-dest = $HOME /Backups/current /path/to/important_files $HOME /Backups/back- $date
$ ln -nfs $HOME /Copias de seguridad/back- $fecha $HOME /Copias de seguridad/actual            

Haga una copia de seguridad completa del directorio raíz del sistema: [29]

 $  rsync  -avAXHS  --progress  --exclude ={ "/dev/*" , "/proc/*" , "/sys/*" , "/tmp/*" , "/run/*" , "/mnt /*" , "/media/*" , "/perdido+encontrado" }  /  /ruta/a/copia de seguridad/carpeta

Elimina todos los archivos y directorios, dentro de un directorio, extremadamente rápido:

# Cree un directorio vacío en algún lugar, que es la primera ruta y la segunda ruta es el directorio que desea vaciar. $  rsync  -a  --delete  /ruta/a/empty/dir  /ruta/a/dir/a/empty

Conexión

Un proceso rsync opera comunicándose con otro proceso rsync, un remitente y un receptor. Al inicio, 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 una bifurcación, después de configurar las tuberías adecuadas para la conexión. Si hay un host remoto involucrado, 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 usando un proxy. [30]

Rsync tiene numerosas opciones de línea de comandos y archivos de configuración para especificar shells, opciones y comandos alternativos, posiblemente con rutas completas y 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 ingenuo demonio rsync puede ser suficiente para una red local.

Una opción es la opción " --dry-run ", 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

Determinar qué archivos enviar

De forma predeterminada, rsync determina qué archivos difieren entre los sistemas de envío y recepción al verificar la hora de modificación y el tamaño de cada archivo. Si el tiempo o el tamaño son diferentes entre los sistemas, transfiere el archivo del sistema de envío al de recepción. Como esto sólo requiere leer la información del directorio de archivos, es rápido, pero omitirá modificaciones inusuales que no cambian ninguna de las dos cosas. [9]

Rsync realiza una verificación más lenta pero completa si se invoca con --checksum. Esto obliga a realizar una comparación completa de la suma de comprobación de cada archivo presente en ambos sistemas. Salvo raras colisiones de suma de comprobación , esto evita el riesgo de perder archivos modificados a costa de leer todos los archivos presentes en ambos sistemas.

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 eficientemente 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. [31]

El destinatario divide su copia del archivo en fragmentos y calcula dos sumas de verificación para cada fragmento: el hash MD5 y una ' suma de verificación móvil ' más débil pero más fácil de calcular. [32] Envía estas sumas de verificación al remitente.

El remitente calcula la suma de comprobación para cada sección móvil en su versión del archivo que tiene el mismo tamaño que los fragmentos utilizados por el destinatario. Mientras que el destinatario calcula la suma de verificación solo para los fragmentos que comienzan en múltiplos completos del tamaño del fragmento, el remitente calcula la suma de verificación para todas las secciones que comienzan en cualquier dirección. Si dicha suma de verificación móvil calculada por el remitente coincide con una suma de verificació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 utiliza el hash MD5, más costoso desde el punto de vista computacional, para verificar que la sección del remitente y el fragmento del destinatario sean iguales. Tenga en cuenta que es posible que la sección del remitente no esté en la misma dirección inicial que el fragmento del destinatario. Esto permite una transmisión eficiente de archivos que se diferencian por inserciones y eliminaciones. [33] Luego, el remitente envía al destinatario aquellas partes de su archivo que no coinciden, 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 móvil 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 típicos de compresión de datos , los archivos que son similares cuando no se comprimen pueden ser muy diferentes cuando se comprimen y, por lo tanto, será necesario transferir todo el archivo. Algunos programas de compresión, como gzip , proporcionan un modo especial "rsyncable" que permite que estos archivos se sincronicen de manera eficiente, al garantizar que los cambios locales en el archivo sin comprimir produzcan solo cambios locales en el archivo comprimido.

Rsync admite otras funciones clave que ayudan significativamente en las transferencias o copias de seguridad de datos. Incluyen compresión y descompresión de datos bloque por bloque usando Zstandard , LZ4 o zlib , y soporte para protocolos como ssh y stunnel .

Variaciones

ElLa utilidad rdiff utiliza el algoritmo rsync para generararchivos deltacon la diferencia del archivo A al archivo B (como la utilidaddiff, pero en un formato delta diferente). Luego, el archivo delta se puede aplicar al archivo A, convirtiéndolo en el archivo B (similar a lade parche). rdiff funciona bien conarchivos binarios.

El script rdiff-backup mantiene una copia de seguridad de un archivo o directorio, ya sea local o remotamente a través de la red en otro servidor. rdiff-backup almacena deltas incrementales de rdiff con la copia de seguridad, con lo que es posible recrear cualquier punto de copia de seguridad. [34]

La biblioteca librsync utilizada por 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. [35] Lo utilizan Dropbox , rdiff-backup, duplicity y otras utilidades. [35]

La biblioteca acrosync es una implementación multiplataforma independiente del protocolo de red rsync. [36] A diferencia de librsync, es compatible por cable con rsync (versión de protocolo 29 o 30). Se publica bajo la Licencia Pública Recíproca y lo utiliza el software comercial rsync Acrosync . [37]

El software de copia de seguridad duplicidad escrito en Python permite realizar copias de seguridad incrementales con servicios backend de almacenamiento simples como el sistema de archivos local, sftp , Amazon S3 y muchos otros. Utiliza librsync para generar datos delta contra firmas de versiones anteriores de archivos, cifrándolos usando 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 servidor si es necesario.

A partir de macOS 10.5 y posteriores, hay un interruptor especial -Eque --extended-attributespermite conservar gran parte de los metadatos del archivo HFS+ al sincronizar entre dos máquinas que admiten esta función. Esto se logra transmitiendo el Resource Fork junto con el Data Fork. [38]

zsync es una herramienta similar a rsync optimizada para muchas descargas por versión de archivo. zsync es utilizado por distribuciones de Linux como Ubuntu [39] para distribuir archivos de imágenes ISO beta que cambian rápidamente . zsync utiliza el protocolo HTTP y archivos .zsync con hash rodante precalculado para minimizar la carga del servidor y al mismo tiempo permitir la transferencia de diferencias para la optimización de la red. [40]

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 almacenamiento en la nube. [41] Sin embargo, Rclone no admite sumas de verificación continuas para la sincronización parcial de archivos (diferencias binarias) porque los proveedores de almacenamiento en la nube generalmente no ofrecen la función y Rclone evita almacenar metadatos adicionales. [42]

aplicaciones rsync

Ver también

Notas

  1. ^ GPL-3.0 o posterior desde el 10 de julio de 2007, versión preliminar 3.0.0pre1 el 5 de octubre de 2007, 3.0.0 estable el 1 de marzo de 2008.
  2. ^ GPL-3.0 solo desde el 7 de julio de 2007 hasta el 9 de julio de 2007.
  3. ^ GPL-2.0 solo 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). "Primera versión de rsync: reemplazo de rcp". 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 para rsync 3.2.7".
  4. ^ "Lanzamiento v3.3.0pre1".
  5. ^ ab "NOTICIAS".
  6. ^ ab "modificando un poco más el texto de la licencia".
  7. ^ "licencia de rsync".
  8. ^ "licencia de rsync".
  9. ^ abc "rsync(1) - página de manual de Linux". linux.die.net . Archivado desde el original el 1 de enero de 2017 . Consultado el 2 de febrero de 2017 .
  10. ^ Sayod, Khalid (18 de diciembre de 2002). Manual de compresión sin pérdidas. Elsevier. ISBN 9780080510491. Consultado el 18 de agosto de 2014 .
  11. ^ Almacenamiento en caché y distribución de contenido web: actas del octavo taller internacional. Medios de ciencia y negocios de Springer. 2004. pág. 316.ISBN _ 9781402022579. Consultado el 18 de agosto de 2014 , a través de Internet Archive . rsync ampliamente utilizado.
  12. ^ Rasch, David; Quemaduras, Randal; Rsync in situ: 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
  13. ^ Dempsey, Bert J.; Weiss, Debra (30 de abril de 1999). "Hacia un mecanismo de replicación escalable y eficiente para el proyecto I2-DSI". Informe Técnico TR-1999-01 . CiteSeerX 10.1.1.95.5042 . 
  14. ^ "Bash - ¿Acelerar rsync con transferencias de archivos simultáneas/concurrentes? - Desbordamiento de pila". Archivado desde el original el 6 de agosto de 2019 . Consultado el 18 de diciembre de 2019 .
  15. ^ "Usando Rsync y SSH". Troy.jdmz.net . Consultado el 18 de agosto de 2014 .
  16. ^ "Usar y ejecutar espejos". Proyecto GNU. Archivado desde el original el 16 de abril de 2020 . Consultado el 15 de abril de 2020 .
  17. ^ "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 .
  18. ^ "rdist(1)".
  19. ^ Tridgell, Andrés; Algoritmos eficientes para la clasificación y sincronización, febrero de 1999, consultado el 29 de septiembre de 2009.
  20. ^ "Almacén de herramientas". Comunidad SUA . Archivado desde el original el 6 de abril de 2013.
  21. ^ "Puertos FreeBSD" . Consultado el 24 de octubre de 2016 .
  22. ^ "Puertos NetBSD". Archivado desde el original el 25 de octubre de 2016 . Consultado el 24 de octubre de 2016 .
  23. ^ "Puertos OpenBSD" . Consultado el 24 de octubre de 2016 .
  24. ^ Consulte el archivo README Archivado el 10 de diciembre de 2007 en Wayback Machine.
  25. ^ "Cómo duplicar FreeBSD (con rsync)". Freebsd.org . Consultado el 18 de agosto de 2014 .
  26. ^ "Cómo convertirse en un espejo de Apache Software Foundation". Apache.org. Archivado desde el original el 21 de agosto de 2014 . Consultado el 18 de agosto de 2014 .
  27. ^ "PuTTY Web Site Mirrors: pautas de duplicación". 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 .
  28. ^ "Rsync configurado para ejecutarse como Time Machine". Blog.interlinked.org. Archivado desde el original el 15 de noviembre de 2007 . Consultado el 18 de agosto de 2014 .
  29. ^ "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 .
  30. ^ "Cómo funciona Rsync". Archivado desde el original el 16 de diciembre de 2016 . Consultado el 24 de enero de 2017 .
  31. ^ "RSync: descripción general". Archivado desde el original el 10 de abril de 2017 . Consultado el 9 de abril de 2017 .
  32. ^ NOTICIAS para rsync 3.0.0 Archivado el 20 de marzo de 2008 en Wayback Machine (1 de marzo de 2008)
  33. ^ Norman Ramsey. El algoritmo Rsync
  34. ^ copia de seguridad rdiff
  35. ^ ab Piscina, Martín; "librsync" Archivado el 9 de diciembre de 2013 en Wayback Machine.
  36. ^ Chen, Gilbert. "biblioteca acrosync". github.com. Archivado desde el original el 10 de febrero de 2017 . Consultado el 22 de junio de 2016 .
  37. ^ "acrosync.com". Archivado desde el original el 20 de diciembre de 2019 . Consultado el 29 de julio de 2020 .
  38. ^ "Biblioteca para desarrolladores de Mac". Desarrollador.apple.com. Archivado desde el original el 26 de septiembre de 2012 . Consultado el 18 de agosto de 2014 .
  39. ^ "Imagen de CD Zsync". ubuntu.com . Consultado el 6 de enero de 2015 .
  40. ^ sitio web zsync
  41. ^ 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 .
  42. ^ 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 .
  43. ^ "Grsync para Windows". FuenteForge . 12 de julio de 2016. Archivado desde el original el 24 de marzo de 2019 . Consultado el 24 de marzo de 2019 .

enlaces externos