2011-08-23 8 views
15

Estoy tratando de escribir un script de Python que supervise una transferencia de rsync y proporcione una estimación (aproximada) del progreso porcentual. Para mi primer intento, miré a un comando rsync --progress y vi que imprime mensajes tales como:Supervisión del progreso de Rsync

1614 100% 1.54MB/s 0:00:00 (xfer#5, to-check=4/10)

me escribió un programa de análisis de este tipo de mensajes, y se utiliza la parte de verificación para producir un porcentaje de avance, aquí, esto sería 60% completado.

Sin embargo, hay dos fallas en este:

  • En las transferencias grandes, el "numerador" de la fracción a-cheque no parece disminuir de forma monótona, por lo que el porcentaje de integridad puede saltar hacia atrás.
  • Este mensaje no se imprime para todos los archivos, lo que significa que el progreso puede avanzar.

He echado un vistazo a otras alternativas de mensajes para usar, pero no he podido encontrar nada. ¿Alguien tiene alguna idea?

¡Gracias de antemano!

+3

Los valores saltan porque rsync comienza a transferir datos mientras todavía está evaluando el trabajo que tiene que hacer. Es una medida tan buena como cualquiera que obtendrás. – hop

+0

¿No hay forma de hacer una evaluación previa del trabajo que necesita hacer? --dry-run --stats parece ser el tipo de cosa para hacer esto, desafortunadamente los valores que produce para que los datos sean transferidos no son correctos. – paulmdavies

+0

¿por qué reduciría la velocidad, solo para que muestre información inútil? – hop

Respuesta

0

Para un control total sobre la transferencia, debe usar una herramienta de diff de más bajo nivel y administrar la lista de directorios y la transferencia de datos usted mismo.

Basado en librsync no es la línea de comandos rdiff o el módulo de Python pysync

24

La versión actual de rsync (en el momento de la edición 3.1.2) tiene una opción --info=progress2 que le mostrará el progreso de la totalidad transferir en lugar de archivos individuales.

De the man page:

También hay una opción --info = progress2 que da salida a las estadísticas sobre la base de toda la transferencia, en lugar de archivos individuales. Utilice esta bandera sin generar un nombre de archivo (por ejemplo, evite -v o especifique --info = name0 si desea ver cómo funciona la transferencia sin desplazarse por la pantalla con muchos nombres. (No necesita especificar el - opción de progreso con el fin de utilizar --info = progress2.)

por lo tanto, si es posible en su sistema se podría actualizar rsync a una versión actual que contiene esa opción.

+0

¡Muy bueno escuchar! ¡Gracias! – Avio

+0

Si solo pudiera compilar rsync en MinGW:/ – msiemens

+0

copia de seguridad incremental no muestra la barra de progreso correcta – LOKESH

6

usted puede desactivar la recursión incremental El argumento --no-inc-recursive. rsync hará un escaneo previo de toda la estructura del directorio, por lo que conoce el número total de archivos que tiene que verificar.

Esta es en realidad la antigua forma en que recursó. La recursividad incremental, el valor predeterminado actual, se agregó para la velocidad.

4

Nota La advertencia aquí es que incluso --info=progress2no del todo fiable ya que este porcentaje se basa en el número de archivos rsync sabe acerca en el momento cuando se visualiza el progreso. Este no es necesariamente el número total de archivos que deben sincronizarse (por ejemplo, si descubre una gran cantidad de archivos de gran tamaño en un directorio profundamente anidado).

Una manera de asegurarse de que no --info=progress2salto hacia atrás en la indicación de progreso sería forzar rsync para analizar todos los directorios de forma recursiva antes de iniciar la sincronización (en lugar de su comportamiento predeterminado de hacer un escaneo de forma incremental recursivo), proporcionando también la opción --no-inc-recursive. Sin embargo, tenga en cuenta que esta opción también aumentará el uso de la memoria rsync y el tiempo de ejecución.

+0

esto funciona muy bien para mí, gracias por la explicación de la opción –