17 votos

rsync a múltiples destinos, usando el mismo archivo?

Me pregunto si es posible que rsync para copiar un directorio a múltiples destinos remotos de una sola vez, o en paralelo. (no es necesario, pero podría ser útil.)

Normalmente, algo como lo siguiente funcionaría muy 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, voy a usar eso. Sin embargo, basura o se encuentra en una unidad lento con un buen par de archivos, y la reconstrucción de la filelist de algunos ~12,000 archivos cada vez es dolorosamente lento (~5 minutos) en comparación con la transferencia real/actualización. Es posible hacer algo como esto, para lograr la misma cosa:

$ rsync -Pav /junk user@host1:/backup user@host2:/backup user@host3:/backup 

Gracias por mirar!

8voto

Chloe Puntos 230

Aquí está la información de la página man rsync sobre el modo por lotes.

EL MODO POR LOTES

El modo por lotes puede ser utilizado para aplicar el mismo conjunto de actualizaciones para muchos sistemas idénticos. Supongamos que uno tiene un árbol que se replica en un número de hosts. Supongamos ahora que se han realizado algunas modificaciones a esta el árbol de código fuente y los cambios que se propague a otros hosts. Con el fin de hacer esto utilizando el modo por lotes, rsync se ejecuta con la escritura del lote opción para aplicar los cambios realizados en el árbol de código fuente para uno de los destino de los árboles. La escritura del lote opción hace que el cliente rsync para almacenar en un "archivo de proceso por lotes" toda la información necesaria para que se repita esta operación en contra de otros, idéntico destino de los árboles.

Generar el archivo de proceso por lotes una vez que ahorra tener que realizar el estado del archivo, de la suma de comprobación, y el bloque de datos de la generación de más de una vez cuando la actualización de varios de destino de los árboles. Multicast protocolos de transporte puede se utiliza para la transferencia de la actualización por lotes de archivos en paralelo a muchas máquinas a la vez, en lugar de enviar los mismos datos a cada host de forma individual.

Para aplicar los cambios registrados a otro destino árbol, ejecutar rsync con la lectura por lotes, especificando el nombre de la misma archivo de proceso por lotes, y el destino de árbol. Rsync actualiza el destino árbol usando la información almacenada en el archivo por lotes.

Para su comodidad, un archivo de secuencia de comandos también se crea cuando la escritura del lote se utiliza la opción: será el mismo nombre que el archivo de proceso por lotes ".sh" que se anexa. Este archivo de secuencia de comandos contiene una línea de comandos adecuado para la actualización de un destino árbol utilizando los asociados archivo de proceso por lotes. Puede ser ejecutado mediante un Bourne (o Bourne) shell, opcionalmente pasar en un destino alterno árbol de ruta que es usada en vez de la original ruta de destino. Esto es útil cuando el destino de la ruta del árbol en el host actual difiere de la utilizada para crear el archivo de proceso por lotes.

   Examples:

          $ rsync --write-batch=foo -a host:/source/dir/ /adest/dir/
          $ scp foo* remote:
          $ ssh remote ./foo.sh /bdest/dir/

          $ rsync --write-batch=foo -a /source/dir/ /adest/dir/
          $ ssh remote rsync --read-batch=- -a /bdest/dir/ <foo

En estos ejemplos, rsync se utiliza para actualizar /adest/dir/ de /de la fuente/dir/ y la información para que se repita esta operación se almacena en "foo" y "foo.sh". El host remoto "" a continuación, se actualiza con la los lotes de datos en el directorio /bdest/dir. Las diferencias entre los dos ejemplos que pone de manifiesto algunos de la flexibilidad que tiene en la manera de afrontar los lotes:

  • El primer ejemplo muestra que la copia inicial no tiene que ser local -- usted puede empujar o tirar de datos a/desde un host remoto utilizando el control remoto de cáscara de sintaxis o demonio rsync sintaxis, como deseado.

  • El primer ejemplo utiliza el creado "foo.sh" archivo de obtener el derecho de rsync opciones cuando se ejecuta el comando de proceso por lotes en el host remoto.

  • El segundo ejemplo se leen los datos del lote a través de la entrada estándar, de modo que el archivo de proceso por lotes no deben ser copiados a la máquina remota primera. En este ejemplo se evita la foo.sh script porque necesario el uso de una versión modificada de-leer-lote opción, pero usted puede editar el archivo de secuencia de comandos si desea hacer uso de ella (sólo asegúrese de que no hay ninguna otra opción tratando de usar la entrada estándar, tales como el "--exclude-de= -").

    Advertencias:

    La lectura por lotes espera que el destino del árbol que está actualizando a ser idéntica a la de destino árbol que se utilizó para crear el lote de actualización fileset. Cuando la diferencia entre el desti‐ nación árboles se encuentra la actualización puede ser descartado con una advertencia (si el archivo parece estar actualizada ya) o el archivo de actualización se puede intentar y luego, si el archivo no se verifica, la actualización descarta con un error. Esto significa que debe ser seguro para volver a ejecutar una lectura de operación por lotes si el comando se quedó interrumpido. Si desea forzar los lotes de actualización para siempre intento sin importar el tamaño del archivo y la fecha, utilice la opción-I (al leer el lote). Si se produce un error, el destino, el árbol probablemente en un estado parcialmente actualizado. En ese caso, rsync puede ser utilizado en su normal (sin lote) el modo de operación para fijar el destino de árbol.

    El rsync versión utilizada en todos los destinos debe ser al menos tan nueva como la usada para generar el archivo de proceso por lotes. Rsync van a morir con un error si la versión del protocolo en el archivo de proceso por lotes es demasiado nuevo para el lote de lectura de rsync para manejar. Vea también la opción --opción de protocolo para una manera de tener a la creación de rsync generar un archivo por lotes que un viejo rsync puede entender. (Tenga en cuenta que los archivos de proceso por lotes cambiado para‐ estera en la versión 2.6.3, por lo que la mezcla de versiones anteriores de que con las nuevas versiones no funcionará.)

    Cuando la lectura de un archivo de proceso por lotes, rsync se fuerza el valor de ciertas opciones para que coincida con los datos en el archivo de proceso por lotes si no ha ajustado a la misma como el lote de escritura de comandos. Otras opciones pueden (y debe ser cambiado. Por ejemplo: escribir-cambios por lotes para-leer-lote --archivos-de se ha caído, y el --filtro/--include/--excluir opciones no son necesarios a menos que uno de los --opciones de borrado es especificado.

    El código que crea el BATCH.sh archivo transforma cualquier filtro/incluir/excluir de las opciones en una sola lista que se anexa como un "aquí" documento para el archivo de secuencia de comandos de shell. Un usuario avanzado puede utilizar para modificar la lista de exclusión si un cambio en lo que se elimina mediante el --delete es deseado. Un usuario normal puede ignorar este detalle y sólo tiene que utilizar la secuencia de comandos shell como una manera fácil de ejecutar apropiado --lectura-comando de proceso por lotes por lotes de datos.

    El original modo de proceso por lotes en rsync se basa en "rsync+", pero la última versión utiliza una nueva aplicación.

Me imagino que usted podría intentar

rsync --write-batch=foo -Pav /junk user@host1:/backup
foo.sh user@host2:/backup
foo.sh user@host3:/backup

4voto

VoxPelli Puntos 778

Usted podría tratar de usar al unísono. Debería ser mucho más rápido en la construcción de la lista de archivos, ya que mantiene una caché de los archivos.

3voto

codecrank Puntos 21

El rsync modo de proceso por lotes es compatible con la multidifusión. Si esto es posible en la red, podría ser digno de mirar en que.

1voto

jneves Puntos 832

Una mejor solución sería la creación de un repositorio con git y sólo empujar a los 3 ejércitos. Más rápido, no necesita el archivo de la lista de la parte y consume menos recursos.

1voto

mfinni Puntos 29745

Cómo acerca de la ejecución de la rsync trabajos de host1, host2 y host3? O bien, ejecute un trabajo de copia para el host1 y, a continuación, ejecutarlo en host2 y host3 a obtener de host1.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: