¿Puede rsync actualizar un archivo grande que solo ha cambiado parcialmente sin una retransmisión completa?

¿Puede rsync actualizar un archivo grande que solo ha cambiado parcialmente sin una retransmisión completa?

Estoy haciendo un cambio menor en un archivo de imagen muy grande (solo unos pocos píxeles de diferencia) que tarda mucho en transferirse a través de la red.

¿Hay alguna manera de que rsync identifique la diferencia en el archivo y solo envíe la pequeña diferencia a través de la red?

Respuesta1

rsyncEl algoritmo de transferencia delta hace esto de forma predeterminada. Citandopágina de manual de rsync:

DESCRIPCIÓN

Rsync es una herramienta de copia de archivos rápida y extraordinariamente versátil. Puede copiar localmente, hacia/desde otro host a través de cualquier shell remoto, o hacia/desde un demonio rsync remoto. Ofrece una gran cantidad de opciones que controlan todos los aspectos de su comportamiento y permiten una especificación muy flexible del conjunto de archivos a copiar.Es famoso por su algoritmo de transferencia delta, que reduce la cantidad de datos enviados a través de la red enviando solo las diferencias entre los archivos de origen y los archivos existentes en el destino.. Rsync se usa ampliamente para copias de seguridad y duplicación y como un comando de copia mejorado para el uso diario.

Si desea desactivarlo, deberá utilizar la opción -Wo --whole-file.

-W, --archivo completo

Esta opción deshabilita el algoritmo de transferencia delta de rsync, lo que hace que todos los archivos transferidos se envíen completos. La transferencia puede ser más rápida si se utiliza esta opción cuando el ancho de banda entre las máquinas de origen y de destino es mayor que el ancho de banda del disco (especialmente cuando el "disco" es en realidad un sistema de archivos en red). Este es el valor predeterminado cuando tanto el origen como el destino se especifican como rutas locales, pero solo si no hay ninguna opción de escritura por lotes vigente.

Si realmente sabe cuánto ha cambiado su archivo, incluso podría optimizar este comportamiento de transferencia delta ajustando el tamaño de su bloque delta:

-B, --block-size = TAMAÑO DE BLOQUE

Esto fuerza el tamaño de bloque utilizado en el algoritmo de transferencia delta de rsync a un valor fijo. Normalmente se selecciona en función del tamaño de cada archivo que se actualiza. Consulte el informe técnico para obtener más detalles.

Y si quieres más información sobre el algoritmo en sí, puedes encontrarla aquí:El algoritmo Rsync

Respuesta2

Lo que estabas buscando son las opciones --partialy . --inplaceLos encontré ayer porque necesito actualizar archivos individuales de 100 GB a 300 GB a través de la red. También funciona mejor con versiones más nuevas de rsync. El de cygwin no parece funcionar nada bien. Pero de cualquier linux semimoderno a linux, el límite no es la red, sino la velocidad con la que cada extremo puede leer los archivos ya transferidos.

Yo uso esto específicamente:

rsync -avPHx --inplace --partial src/foo remote_host:/target/path/

Editar: la fuente erahttps://fedoramagazine.org/copiar-archivos-grandes-con-rsync-and-some-misconceptions/- tenga en cuenta que --append, mencionado en el artículo fuente, puede ser peligroso porque si el archivo crece Y tiene cambios en el medio, --appendno funcionará como se esperaba. Básicamente, solo se usa --appendpara cosas como archivos de registro a los que solo se agregan.

Respuesta3

Lo que todo el mundo dice es cierto sobre cómo funciona rsync, pero los únicos formatos en los que un pequeño cambio en la imagen probablemente dé como resultado un pequeño cambio en el archivo son los formatos de mapa de bits sin formato (.bmp, .pnm, algunos tipos de .tif). Los archivos habituales .png o JPEG, o Gimp o Photoshop .xcf o .psd, ya están comprimidos, por lo que lo más probable es que un pequeño cambio de imagen resulte en un archivo casi totalmente diferente en el disco. Es por eso que el algoritmo delta de rsync parece bastante ineficaz.

información relacionada