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 user
como 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://").
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 [ref], 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 .
Al igual que cp, rcpy scp, rsync
requiere 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.
rsync
Puede sincronizar clientes Unix con un servidor Unix central utilizando rsync
/ ssh
y 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 cron
puede realizar tareas como rsync
la duplicación automatizada basada en cifrado entre múltiples hosts y un servidor central.
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
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.
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.
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 .
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 -E
que --extended-attributes
permite 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]
rsync ampliamente utilizado.