Acelerando rsync sobre smb


8

Estoy haciendo una copia de seguridad de una caja de Linux sobre SMB en un NAS. Monto el NAS localmente y luego sincronizo una gran cantidad de datos (aproximadamente 100 GB). Creo que lleva mucho tiempo hacerlo: más de 12 horas. Esperaría ser mucho más rápido una vez que todo se haya copiado, ya que casi nada cambia de día a día.

¿Hay alguna manera de acelerar esto?

¿Estaba pensando que tal vez rsync piensa que está trabajando con discos duros locales y usa suma de verificación en lugar de comparaciones de tiempo / tamaño? Pero no encontré una manera de forzar comparaciones de fecha y hora. ¿Algo más que pueda verificar?


También sugeriría mirar NFS en lugar de SMB: me he dado cuenta (y tal vez soy solo yo) de que es más rápido que Samba
Warren

Desafortunadamente, este NAS no tiene NFS y por ahora, estoy atascado con él.
pupeno

Verifique las capacidades del NAS utilizando un mapeador de puertos, como nmap. Me he encontrado con varias unidades NAS que ejecutaban un servicio rsync nativo, a pesar de que no se mencionaba en la documentación y no se mencionaba en la configuración.
Kyle__

Compruebe también este hilo ["rsync to NAS copia todo cada vez"] [1] [1]: serverfault.com/questions/262411/…
dtoubelis

Compruebe también este hilo [rsync to NAS copia todo cada vez] [1] [1]: serverfault.com/questions/262411/…
dtoubelis

Respuestas:


28

Creo que está teniendo un malentendido del algoritmo rsync y cómo se debe aplicar la herramienta.

La ventaja de rendimiento de Rsync proviene de hacer transferencias delta, es decir, mover solo los bits modificados en un archivo. Para determinar los bits modificados, el archivo debe ser leído por los hosts de origen y de destino y debe bloquearse las sumas de verificación para determinar qué bits han cambiado. Esta es la parte "mágica" de rsync: el algoritmo rsync mismo.

Cuando monta el volumen de destino con SMB y usa rsync para copiar archivos de lo que Linux "ve" como una fuente local y un destino local (ambos montados en esa máquina), la mayoría de las versiones modernas de rsync cambian al modo de copia 'archivo completo' , y apague el algoritmo de copia delta. Esto es un "triunfo" porque, con el algoritmo delta-copy activado, rsync leería todo el archivo de destino (a través del cable del NAS) para determinar qué bits del archivo han cambiado.

La "forma correcta" de usar rsync es ejecutar el servidor rsync en una máquina y el cliente rsync en la otra. Cada máquina leerá archivos de su propio almacenamiento local (que debería ser muy rápido), acordará qué bits de los archivos han cambiado y solo transferirá esos bits. De la misma manera que estás usando cantidades rsync de un 'cp' inventado. Podrías lograr lo mismo con 'cp' y probablemente sería más rápido.

Si su dispositivo NAS admite la ejecución de un servidor rsync (o cliente), entonces está en el negocio. Si solo va a montarlo en la máquina fuente a través de SMB, entonces también podría usar 'cp' para copiar los archivos.


77
Ooo! ¡Votos a favor! Me gustaría saber por qué rechazaste la respuesta, considerando que es técnicamente precisa.
Evan Anderson

No puedo ejecutar el servidor rsync en el NAS; de lo contrario, lo estaría haciendo. Cuando no se usa un servidor rsync, rsync puede usar la suma de comprobación o el tamaño y la fecha y hora para averiguar si un archivo cambió o no. Según la página de manual, usará el tamaño y la fecha y hora de forma predeterminada, pero mi experiencia es que no está haciendo eso y no veo una manera de forzarlo. Solo veo una forma de forzar la suma de comprobación. --checksum: sin esta opción, rsync usa una "verificación rápida" que (por defecto) verifica si el tamaño y la hora de la última modificación de cada archivo coinciden entre el remitente y el receptor.
pupeno

Evan, dame un par de minutos para escribir mi comentario.
pupeno

2
¿Qué comportamiento estás viendo que te dice que está sumando los archivos? El comportamiento de "verificación rápida" es el comportamiento predeterminado, por lo que no hay forma de "forzarlo". Si no puede ejecutar rsync en el NAS, simplemente use 'cp'. Será tan rápido o más rápido.
Evan Anderson

Según entiendo el trabajo de rsync, debería verificar la fecha y hora local, la fecha y hora remotas y si coinciden, no copie el archivo. Lo que significa que no debería copiar el 99% de los archivos, pero el hecho de que demore más de 12 horas en 60 GB o menos me dice que está copiando todo (lo que parece ser lo que estás diciendo al decir que cp será más rápido) o que en realidad es una suma de comprobación, lo que significa que no está copiando todo, sino que está descargando todo.
pupeno


4

Sí, puedes acelerarlo. Debe hacer que el origen o el destino se vean como una máquina remota, digamos dirigiéndolo como " localhost:".

Usted declaró que está montando el recurso compartido SMB localmente. Esto hace que el origen o el destino parezca una ruta local a rsync. La página de manual de rsync indica que las copias donde el origen y el destino son rutas locales copiarán todo el archivo. Esto se afirma en el párrafo para la opción "--whole-file" en la página del manual. Por lo tanto, el algoritmo delta no se usa. El uso de la " localhost:" solución alternativa restaurará la funcionalidad del algoritmo delta y acelerará las transferencias.


1
Me pregunto qué sentido debería tener ... rsyncusa la marca de fecha y hora para verificar si un archivo necesita o no actualizarse. Si necesita una actualización, rsync dividirá el archivo en fragmentos y comparará las sumas de verificación. Eso significa que leerá todo el archivo para poder hacer eso. Por lo tanto, si no tiene un demonio rsync ejecutándose de forma remota, deberá transferir todo el archivo de todos modos para realizar la fragmentación y la suma de comprobación para que pueda transferirlo de inmediato. Por lo tanto, la "solución" descrita aquí no le compra nada en este escenario.
TylerDurden

3

Pensé que arrojaría mi 2p aquí.

Mi hermano acaba de instalar un Buffalo NAS en la red de su oficina. Ahora está buscando copias de seguridad fuera del sitio, por lo que si la oficina se incendia, al menos todavía tiene todos sus documentos comerciales en otros lugares (a cientos de millas de distancia).

Mi primer obstáculo fue obtener el VPS que tiene (un pequeño servidor privado virtual de Linux, nada demasiado robusto) para marcar como usuario VPN en su enrutador de banda ancha (está usando un DrayTek para esto) para que pueda ser parte de él. su VPN, y así puede acceder al NAS directamente, de manera segura. Lo tengo ordenado y trabajando brillantemente.

El siguiente problema fue transferir los archivos del NAS al servidor VPS. Comencé haciendo un montaje de Samba y me encontré exactamente con el mismo problema (o incluso peor) que has descrito. Hice un rsync de ejecución en seco y me llevó más de 1 hora y 30 minutos solo averiguar qué archivos iba a transferir, porque como dice Evan, bajo este método, el otro extremo no es rsync, por lo que tiene que hacer muchos archivos el sistema llama / lee en el montaje Samba (a través de una conexión PPTP / tunelizada, con un tiempo de ida y vuelta de aproximadamente 40 ms). Completamente inviable.

Poco sabía que el búfalo en realidad ejecuta un demonio rsync, por lo que, usando eso, todo el proceso en seco tarda solo 1 minuto y 30 segundos para 87k archivos con un total de 50 Gb. Obviamente, transferir 50 Gb de archivos (desde un NAS que está en un enlace de banda ancha con solo 100k / seg de ancho de banda de salida) es algo completamente diferente (esto tomará varios días) pero, una vez que se complete la sincronización inicial, cualquier copia de seguridad incremental debería ser Aligeramiento de la grasa (sus datos no van a cambiar mucho a diario).

Mi sugerencia es usar un NAS decente, que admita rsync, por las razones que Evan ha dicho anteriormente. Resolverá todos tus problemas.


+1 por informarme de que los NAS de Buffalo ejecutan rsync, ¡gracias!
Michael

0

Huele como si tuvieras un NAS más barato. También podría ser de su ancho de banda de red ...

Los NAS de consumo "estándar" son realmente débiles cuando se trata de E / S pesadas, que es lo que está tratando de hacer aquí. También podría ser un interruptor barato que conecta su PC y su NAS que no es lo suficientemente fuerte como para manejar todos los paquetes correctamente.


El mismo NAS, el mismo conmutador, otra computadora, con Windows, copia de seguridad, mucha más información, en menos de cuatro horas.
pupeno


0

Hay dos fuentes potenciales del problema: o utiliza opciones de línea de comando incorrectas o su NAS tiene problemas con la marca de tiempo (o ambas :-). Consulte este hilo "rsync to NAS copia todo cada vez" para obtener más información.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.