¿Por qué rsync no usa delta-transfer para archivos locales?

25

Tengo una gran imagen iso que está descargando actualmente un cliente de torrent con la reserva de espacio activada: eso significa que el tamaño del archivo no cambia mientras que algunos fragmentos en (4 Mib) cambian constantemente debido a una descarga.

Con una descarga del 90%, hago la rsync inicial para ahorrar tiempo más tarde:

$ rsync -Ph DVD.iso / media / another-hdd /
Enviar lista de archivos incrementales

DVD.iso
       2.60G 100% 40.23MB / s 0:01:01 (xfer # 1, para verificar = 0/1)

enviado 2.60G bytes recibidos 73 bytes 34.59M bytes / seg
el tamaño total es 2.60G, la aceleración es 1.00

Luego, cuando el archivo está completamente descargado, vuelvo a sincronizar:

total size is 2.60G   speedup is 1.00

Speedup = 1 dice que no se utilizó la transferencia delta, aunque el 90% del archivo no ha cambiado, el directorio de destino está en otro FS y la copia lleva varios minutos. ¿Por qué no intenta acelerar la transferencia? ¿Cómo puedo forzar rsynca usar delta-transfer?

Kolypto
fuente
66
Lo que estás haciendo no tiene ningún sentido. El propósito de rsync es acelerar la transferencia de archivos a través de la red, no localmente. Para encontrar las diferencias, tiene que leer tanto el origen como el destino. En el tiempo que lleva leer el destino localmente para encontrar las diferencias, también puede hacer una copia normal. Simplemente descargue el archivo al destino en primer lugar en lugar de copiarlo.
psusi
1
Entonces, ¿simplemente no usa delta-xfer porque, trabajando localmente, es más rápido copiar que calcular hashes? En caso afirmativo, publique la respuesta por
favor
99
Leer puede ser más rápido que escribir en un disco local en ciertas circunstancias. También puede reducir el desgaste de un SSD. Esta es ciertamente una pregunta válida y la respuesta es muy valiosa para mí.
HRJ
2
@psusi, aparte del comentario anterior de HRJ, también considere el caso en que el archivo de destino se ha vuelto a vincular (por ejemplo, en btrfs u ocfs2). Minimizar las escrituras durante la sincronización puede marcar una enorme diferencia en el uso general del espacio.

Respuestas:

20

De acuerdo con la página de manual , psusi es correcto:

-W, --whole-file : la transferencia puede ser más rápida si esta opción se usa cuando el ancho de banda entre las máquinas de origen y de destino es mayor que el ancho de banda al 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 una opción de escritura por lotes activa.

liganico
fuente
10
¡Oh gracias! Miseed this line :) Para activar delta-trasfer, use-no-W
kolypto
1
En mi sistema -no-Wno funciona solo la opción larga -no-whole-file. Mi razón para necesitar este interruptor es cuando configuro una copia de seguridad y tengo archivos grandes (por ejemplo, imágenes) que no tienen el mismo tiempo de modificación. Es MUCHO más rápido, la aceleración es 163.26, para sincronizar estos archivos usando la transferencia delta en mi sistema de archivos local.
Jesse the Wind Wanderer
66
@JessetheWindWanderer, la opción larga es --no-whole-file(por favor, tenga en cuenta el doble --al principio).
Eddie C.
Gracias Eddie C. Editaría mi comentario si pudiera entender cómo :-(
Jesse the Wind Wanderer
17

La respuesta directa a esta pregunta es:

Use la --no-Wbandera para forzar la compresión delta, sin importar local o remota.

Actualización: Parece que hay más en la historia. El delta compressionparece estar permitido sólo entre recibir y procesar transmisión de rsync. Al enviar el archivo al sistema de archivos, rsyncaún puede escribir todo el archivo (s), incluso con la compresión delta activada.

Vea la investigación de "Wakan Tanka" aquí .

HRJ
fuente
2
--no-WSiempre transfiero todo el archivo en mi caso. Por favor, consulte unix.stackexchange.com/questions/291156/…
Wakan Tanka
@WakanTanka ¡Eso es interesante! He actualizado mi respuesta.
HRJ
3

Por defecto, rsync primero crea una nueva copia del archivo de destino y luego lo reemplaza, por varias razones de seguridad. Puede anular esto especificando --inplacejunto con --no-whole-file. Esto le dice a rsync que realice una edición en el lugar del archivo de destino, aceptando los diversos riesgos (generalmente menores para esta situación) como se documenta en la página del manual.

kartik_subbarao
fuente
0

Por defecto rsynccrea una copia del archivo en el destino y luego reemplaza atómicamente el original con la nueva copia. Esto se hace por razones de seguridad. Lo que está buscando es la --inplaceopción, que hará que se rsyncmodifiquen solo las partes del archivo de destino que han cambiado en relación con la fuente.

Para el caso de uso del OP, recomiendo desactivar también la preasignación, de modo que se pueda sincronizar una copia dispersa, que será mucho más rápida. Para las descargas, no se preocupe por la fragmentación a menos que esté usando un sistema de archivos muy antiguo como VFAT. Los archivos multimedia en particular no se leen con el máximo rendimiento de los medios de almacenamiento, por lo que desfragmentarlos es un esfuerzo inútil.

Para copiar escasamente su directorio de descargas al volumen de destino, le recomiendo estos indicadores y operaciones, en este orden:

rsync --ignore-existing -vxaHAXS /source /destination
rsync --inplace -vxaHAX /source /destination

El primer pase copiará los archivos nuevos escasamente al destino. El segundo pase actualizará los archivos existentes en el lugar, copiando solo los cambios.

Dado que está haciendo copias delta dispersas e in situ, puede ejecutar esto repetidamente sin incurrir en mucho IO adicional. Incluso si tiene 20 torrents ejecutándose simultáneamente, no amplificará las escrituras en el destino ni alterará los volúmenes de origen / destino.

Wil
fuente
¿Qué quieres decir con "escasamente" aquí, Wil? Realmente no refleja el significado real de la palabra, por lo que puedo decir.
Julio
@Julius: significa exactamente lo que implica: copie los archivos con soporte completo para una asignación escasa, por ejemplo, sus películas HDR de 40 GB no ocuparán más espacio en el destino que en la fuente. Lo mismo con las imágenes de disco de VirtualBox. Como se indicó, el OP necesitaría deshabilitar la preasignación para que eso funcione.
Wil