Estoy tratando de transferir miles de archivos pequeños de un servidor a otro usando el siguiente comando:
rsync -zr --delete /home/user/ [email protected]::backup
Actualmente, la transferencia lleva mucho tiempo (no la he cronometrado). ¿Hay alguna manera de hacer esto más rápido? ¿Debo estar usando otra herramienta? ¿Debería usar rsync sobre ssh en lugar de usar el protocolo rsync?
stat()
.-a
pero-r
?Respuestas:
Necesitas determinar el cuello de botella. No es rsync. Probablemente no sea el ancho de banda de su red. Como sugirió @Zoredache, lo más probable es la gran cantidad de iops generados por todas las
stat()
llamadas. Cualquier herramienta de sincronización necesitará estadísticas de los archivos. Al sincronizar ejecutariostat
para verificar.Entonces la pregunta se vuelve; ¿Cómo optimizar estadísticas? Dos respuestas fáciles:
noatime
y agregue adir_index
).Si por casualidad no es el iops de su disco el límite, entonces podría experimentar dividiendo el árbol de directorios en varios árboles distintos y ejecutar múltiples rsyncs.
fuente
La compresión no es muy útil para archivos pequeños (digamos, menos de 100 bytes). Para archivos pequeños, a veces la versión comprimida puede ser incluso más grande que la original. Prueba el
rsync
comando sin la-z
bandera.ssh
es bueno para la seguridad, pero no hará que la transferencia sea más rápida. De hecho, haría la transferencia más lenta debido a la necesidad de cifrado / descifrado.rsync
Es posible que no parezca rápido la primera vez que se ejecuta porque hay muchos datos para transferir. Sin embargo, si planea ejecutar este comando periódicamente, las ejecuciones posteriores pueden ser mucho más rápidas ya quersync
es inteligente no transferir archivos que no han cambiado.fuente
rsync
cliente, usará SSH detrás de escena. Tienes que salir de tu camino para deshabilitar el cifrado cuando usas rsync. Ver: stackoverflow.com/a/1821574/64911¿Qué versión de rsync estás usando? Cualquier cosa anterior a 3.0.0 (en ambos extremos) no tiene la función de lista de archivos incremental, que acelera las transferencias grandes.
fuente
Agregar
-v --progress
a su línea de comando rsyncrsync se realiza en 2 pasos:
Si rsync tiene miles de archivos pequeños en directorios anidados, puede ser simplemente que rsync pasa la mayor parte del tiempo yendo a subdirectorios y buscando todos los archivos
Si no se invierte tiempo en navegar, el tiempo puede deberse simplemente a la adición de todas las latencias que comienzan cada nueva transferencia de archivos.
fuente
En caso de que estén involucrados los sistemas de archivos ext3 o ext4, verifique que ambos tengan habilitada la función dir_index . Esto triplicó el rendimiento de rsync en mi caso.
Vea los detalles en mi respuesta en: /server//a/759421/80414
fuente