Acelere / evite el cálculo de listas de archivos rsync

Pregunta:

Utilizo rsync 3.1.1 para mantener sincronizados dos discos, uno de los cuales está en la red y montado como un /mnt/ROUTER_WD_2TB/ compartido de samba en /mnt/ROUTER_WD_2TB/ . Esta es la fuente, con una velocidad máxima de 30-40 MB / s debido a las limitaciones de la red. El otro, el destino, se monta localmente (máximo /mnt/BACKUP_HITACHI_2TB/ s) y es /mnt/BACKUP_HITACHI_2TB/ .

Utilizo el siguiente comando rsync:

rsync  -haAXi --quiet --append-verify --delete /mnt/ROUTER_WD_2TB/* /mnt/BACKUP_HITACHI_2TB/.

Los discos contienen muchos archivos, la mayoría de ellos pequeños.

El problema es que rsync tarda bastante (10-20 m) antes de comenzar a mover archivos, supongo que porque tiene que calcular listas de archivos para una gran cantidad de archivos pequeños. Durante este período, la utilización de la nueva red se sitúa en un mínimo de 200-500 KB / s, mientras que al transferir archivos la velocidad es de aproximadamente 40 MB / s.

Suele suceder que rsync tarda unos 15 m en encontrar finalmente algo que tiene que copiar, luego tarda 5 segundos en copiarlo y luego sigue comprobando si hay otros archivos para copiar durante otros 5 minutos. Con todo, ¡una copia de archivo de 5 segundos termina durando 20 minutos!

¿Hay alguna medida que pueda tomar para evitar este largo período antes de copiar los archivos, además de excluir carpetas? ¿Algún tipo de "caché" que pueda implementar para que rsync no tenga que reconstruir toda la lista de archivos desde cero?

Respuesta:

En lo que respecta a rsync , está copiando entre dos árboles de archivos locales, por lo que deshabilita la mayoría de sus optimizaciones (incluido su algoritmo delta por el que es famoso). Si puede ejecutar un rsync en su servidor remoto (para obtener un verdadero escenario cliente-servidor en su red) obtendrá una cantidad significativa de tracción.

Sin embargo, aquí hay otras opciones a considerar.

  1. Copiar sin preocuparse por eliminar archivos antiguos. Esto puede permitirle realizar una transferencia más rápida con más frecuencia y relegar la limpieza más lenta a decir, solo una vez al día:

     cp -au /mnt/ROUTER_WD_2TB/. /mnt/BACKUP_HITACHI_2TB/
  2. Utilice una variación del algoritmo de eliminación predeterminado de rsync para evitar crear una lista completa de archivos antes de la transferencia:

     rsync -haAXi --quiet --delete --delete-during /mnt/ROUTER_WD_2TB/ /mnt/BACKUP_HITACHI_2TB/
  3. Divida los directorios de nivel superior en tareas independientes y ejecútelas en paralelo. Puede encontrar que si está vinculado a E / S de disco, esto realmente no ayudará, y para los platos giratorios es casi seguro que empeorará las cosas.

     for d in /mnt/ROUTER_WD_2TB/* do rsync -haAXi --quiet --delete --delete-during "$d" /mnt/BACKUP_HITACHI_2TB/ >"/tmp/rsync.${d/*\/}.log" 2>&1 & done wait cat /tmp/rsync.*.log rm -f /tmp/rsync.*.log

Si ninguna de estas sugerencias ayuda, valdría la pena agregar otro --verbose a rsync para ver qué está haciendo. Sospecho que está revisando todos los archivos sin cambios, y si tiene suficientes archivos, esto simplemente lleva mucho tiempo.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım