Utilizo rsync 3.1.1 para mantener sincronizados dos discos, uno de los cuales está en la red y montado como un recurso compartido de samba /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 (pico 110 MB / s) y es /mnt/BACKUP_HITACHI_2TB/
.
Yo uso 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 lleva bastante tiempo (10-20m) antes de comenzar a mover cualquier archivo, supongo porque tiene que calcular listas de archivos para una gran cantidad de archivos pequeños. Durante este período, la utilización de redes nuevas se ubica en un nivel bajo 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, luego continúa buscando 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, aparte de excluir carpetas? ¿Puedo implementar algún tipo de "caché" para que rsync no tenga que reconstruir toda la lista de archivos desde cero?
Respuestas:
En lo que
rsync
a usted respecta, 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 unrsync
en su servidor remoto (para obtener un verdadero escenario cliente-servidor en su red) obtendrá una gran cantidad de tracción.Sin embargo, aquí hay otras opciones a considerar
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 para decir, solo una vez al día:
Utilice una variación del
rsync
algoritmo de eliminación predeterminado para evitar crear una lista completa de archivos antes de la transferencia:Divida los directorios de nivel superior en tareas separadas y ejecútelos en paralelo. Puede descubrir que si está vinculado a la E / S del disco, esto realmente no ayudará, y para los platos giratorios seguramente empeorará las cosas.
Si ninguna de estas sugerencias ayuda, entonces sería la pena añadir otra
--verbose
arsync
ver lo que está haciendo. Sospecho que está sacudiendo todos los archivos sin cambios, y si tiene suficientes archivos, esto simplemente lleva mucho tiempo.fuente
--delete --delete-during
no lo hizo por mí, que todavía envió una lista de archivos incremental, sino que--delete --delete-before
fue directamente a:, lobuilding file list
que parece un gran progreso. Yo creo que.--delete-before
,rsync
realiza dos pases a través del árbol de archivos: uno para eliminar y el siguiente para copiar.puede usar
-vv
para ver el registro completo dersync
.fuente