¿Por qué mi rsync es tan lento en comparación con cp puro o incluso scp?

15

Estoy transfiriendo los archivos de Linux a Windows 7 a través de un recurso compartido montado (el recurso compartido está montado desde Windows en Linux). Estoy copiando muchos datos (es decir, casi un TB) de la máquina vieja a la nueva dentro de mi LAN . Ya tengo la mala suerte de tener solo 100 MB. Naturalmente, utilicé ciegamente rsync, pero después de un día ya me preguntaba por qué se siente tan lento. Habilitar el medidor de progreso me mostró una velocidad de transferencia de aproximadamente 2 MB / s.

Así que tomé un archivo grande razonable (800 MB) y rastreé el tiempo de transferencia (1):

cp : 05:33
scp (2): 06:33
rsync : 21:51

1) Eliminé los archivos entre cada ejecución
2) scp a través de localhost a la misma máquina Linux directamente en el recurso compartido; completamente inútil pero proporcionó un medidor de progreso

Las pruebas fueron tan simples como

(cp|scp|rsync) <source> <destination>

No hay argumentos especiales excepto host / puerto para scp. Incluso probé el -Wcambio para rsync pero lo cancelé después de diez minutos. rsync es 3.0.3 ejecutándose en Lenny. Para poder interrumpir el proceso de copia en cualquier momento y reanudar me llevo a rsync, pero ahora creo que realmente necesito reconsiderar este requisito.

¿Cómo es posible una diferencia tan grande?

Actualización / Resuelto:

Gracias a rschuler pude resolver el problema: use el demonio rsync en lugar del montaje smb por razones de eficiencia. Dicho DeltaCopy funciona, pero hay que tener cuidado con algunas cosas

  • es un buen contenedor GUI pero si algo va mal, es bueno saber cómo solucionarlo. Parece que ingresé mis credenciales de usuario, bajo las cuales ejecutar el servicio rsync, incorrecta la primera vez, pero la GUI no me permitió establecer una nueva. Me di cuenta de que se estaba ejecutando como un servicio y pude establecer las credenciales adecuadas allí
  • Necesario para agregar manualmente el puerto al firewall para permitir conexiones
  • Gusto personal: asegúrese de que los recursos compartidos estén protegidos con contraseña o, si no, tal vez asegúrese de que el servicio no se inicie automáticamente con Windows; por si acaso
  • El binario rsync envuelto no es un puerto nativo de Windows, sino que se basa en cygwin. Sin embargo, la DLL cygwin contenida no maneja UTF8 correctamente y manipula caracteres no ascii. Obtenga una DLL fija de http://www.okisoft.co.jp/esc/utf8-cygwin/ .

Después de eso, la tasa de transferencia aumentó de 2 MB / sa ~ 8 MB / s; ¡absolutamente fantástico!

marca
fuente
¿Eliminó el archivo de destino entre cada ejecución de su prueba? Si el archivo de destino ya existía y los metadatos no eran correctos, entonces necesitaría sumar tanto el origen como el destino.
Zoredache
@ Zoredache: eliminé los archivos entre las ejecuciones; también -Wse supone que el interruptor debe ignorar eso
marque

Respuestas:

18

(el recurso compartido está montado desde Windows en Linux)

Este es tu problema. rsync está haciendo sumas de comprobación sucesivas sobre el destino. Las ventanas comparten. Está extrayendo todos los datos a través de la red para calcular las sumas de verificación. (Posiblemente más de una vez).

Lo que debe hacer es ejecutar rsync en ambas máquinas. De esa forma, solo las diferencias (y sumas de verificación) se transferirán a través del cable de red. DeltaCopy es una ventana rsync. Tiene documentos lo suficientemente buenos como para ponerte en marcha.

Vea la respuesta más votada a esta pregunta para obtener una mejor explicación de por qué creo que podría estar usando indebidamente rsync.

Rodney Schuler
fuente
Bingo, tu respuesta no podría ser más precisa. Muchas gracias, aprendí mi lección.
Marque