Me pregunto si es posible que rsync copie un directorio a múltiples destinos remotos de una sola vez, o incluso en paralelo. (No es necesario, pero sería útil).
Normalmente, algo como lo siguiente funcionaría bien:
$ rsync -Pav /junk user@host1:/backup
$ rsync -Pav /junk user@host2:/backup
$ rsync -Pav /junk user@host3:/backup
Y si esa es la única opción, la usaré. Sin embargo, / junk se encuentra en un disco lento con bastantes archivos, y la reconstrucción de la lista de archivos de unos ~ 12,000 archivos cada vez es extremadamente lenta (~ 5 minutos) en comparación con la transferencia / actualización real. ¿Es posible hacer algo como esto, lograr lo mismo:
$ rsync -Pav /junk user@host1:/backup user@host2:/backup user@host3:/backup
¡Gracias por mirar!
remote destination is not allowed with --read-batch
-
para un nombre de archivo significa leer de la entrada estándar, y STDIN también se leefoo
en el ejemplo, un archivo local.Podrías intentar usar unísono . Debería ser mucho más rápido en la construcción de la lista de archivos porque mantiene un caché de los archivos.
fuente
El
rsync
--batch-mode
soporta multicast. Si esto es posible en su red, podría valer la pena investigarlo.fuente
¿Qué hay de cambiar los sistemas de archivos?
Hace algún tiempo, cambié un FS de varios terabytes de ext3 a XFS. ¡El tiempo para escanear los directorios (con alrededor de 600,000 archivos la última vez que revisé) pasó de 15-17 minutos a menos de 30 segundos!
fuente
No es una respuesta directa, pero si utiliza rsync versión 3+, comenzará a transferirse antes de generar la lista de archivos completa.
Otra opción, aún no muy eficiente, sería ejecutarlos como trabajos, por lo que algunos se ejecutan al mismo tiempo.
Además, solo pensé en esta estrangulación si no te importa usar tar:
Donde cada host local sería servidores diferentes, por supuesto (supone un inicio de sesión basado en claves). Sin embargo, nunca he usado lo anterior.
fuente
¿Qué tal si ejecuta los trabajos rsync desde host1, host2 y host3? O bien, ejecute un trabajo para copiar en host1 y luego ejecútelo en host2 y host3 para obtenerlo desde host1.
fuente
Una mejor solución sería crear un repositorio con git y simplemente presionar a los 3 hosts. Más rápido, no necesitaría la parte de la lista de archivos y consume menos recursos.
Buena suerte,
João Miguel Neves.
fuente
.git/
aunque los empujes a los controles remotos que ya tendrían la mayoría de los datos serían más rápidos. git no es un reemplazo para rsync.http
,nfs
yafp
. GitHub es un sitio web que se encarga de crear y mantener repositorios git para usted, y los hace públicos (a menos que pague).Al buscar esta respuesta por mí mismo, creo que primero deberías hacer un lote usando rsync y luego enviárselo a todos, lo que haría que la lista de archivos tuviera que ser procesada solo una vez, y luego podrías simplemente fondo los tres rsyncs para ejecutarlos en paralelo.
fuente
Otra posible solución es ejecutar tantos procesos rsync en paralelo como hosts, es decir, fork.
fuente