GNU/Linux >> Tutoriales Linux >  >> Linux

Mostrando el progreso total en rsync:¿es posible?

Solución 1:

Ahora hay una forma oficial de hacer esto en rsync (versión 3.1.0 del protocolo versión 31, probado con Ubuntu Trusty 14.04).

#> ./rsync -a --info=progress2 /usr .
    305,002,533  80%   65.69MB/s    0:00:01  xfr#1653, ir-chk=1593/3594)

Probé con mi /usr carpeta porque quería esta función para transferir sistemas de archivos completos, y /usr parecía ser una buena muestra representativa.

El --info=progress2 da un buen porcentaje general, incluso si es solo un valor parcial. De hecho, mi /usr la carpeta tiene más de 6 gigas:

#> du -sh /usr
6,6G    /usr/

y rsync tomó mucho tiempo para escanear todo. Entonces, casi todo el tiempo, el porcentaje que he visto fue completado en un 90%, pero no obstante, es reconfortante ver que algo se está copiando :)

Referencias:

  • https://stackoverflow.com/a/7272339/1396334
  • https://download.samba.org/pub/rsync/NEWS#3.1.0

Solución 2:

Lo siguiente se aplica a la versión 3.0.0 y superior de rsync. Las opciones que se describen a continuación se introdujeron en esa versión el 1 de marzo de 2008.

Junto con --info=progress2 también puede usar --no-inc-recursive opción (o su forma más corta --no-i-r alias) para deshabilitar la recursividad incremental.

Esto creará la lista completa de archivos al principio, en lugar de descubrir más archivos de forma incremental a medida que avanza la transferencia. Dado que conocerá todos los archivos antes de comenzar, brindará un mejor informe del progreso general. Esto se aplica a la cantidad de archivos; no informa ningún progreso según el tamaño de los archivos.

Esto implica un intercambio. Crear toda la lista de archivos antes de tiempo consume más memoria y puede retrasar significativamente el inicio de la transferencia real. Como era de esperar, cuantos más archivos haya, mayor será el retraso y más memoria requerirá.

Lo siguiente es del manual de rsync (fuente:http://rsync.samba.org/ftp/rsync/rsync.html):

-r, --recursivo

Esto le dice a rsync que copie los directorios recursivamente. Véase también --dirs (-d). A partir de rsync 3.0.0, el algoritmo recursivo que se usa ahora es un escaneo incremental que usa mucha menos memoria que antes y comienza la transferencia después de que se haya completado el escaneo de los primeros directorios. Este escaneo incremental solo afecta nuestro algoritmo recursivo y no cambia una transferencia no recursiva. También es posible solo cuando ambos extremos de la transferencia tienen al menos la versión 3.0.0.

Algunas opciones requieren que rsync conozca la lista completa de archivos, por lo que estas opciones deshabilitan el modo de recursión incremental. Estos incluyen:--delete-before, --delete-after, --prune-empty-dirs y --delay-updates. Debido a esto, el modo de eliminación predeterminado cuando especifica --delete ahora es --delete-durante cuando ambos extremos de la conexión son al menos 3.0.0 (utilice --del o --delete-durante para solicitar este modo de eliminación mejorado explícitamente). Vea también la opción --delete-delay que es una mejor opción que usar --delete-after.

La recursividad incremental se puede deshabilitar mediante --no-inc-recursive opción o su forma más corta --no-i-r alias.

Consulte también https://rsync.samba.org para conocer las diferencias de versión específicas (desplácese hacia abajo y consulte los enlaces de Noticias de lanzamiento).

Solución 3:

Puedes con 'pv' (apt-get install pv con Debian y ubuntu). Recomiendo controlar la cantidad de archivos transferidos, ya que la cantidad de datos transferidos no está correlacionada con el tamaño de los archivos sino con el delta entre el origen y el destino. Y contar archivos contará el mismo progreso para un delta grande y otro con delta pequeño. Lo que significa que, en cualquier caso, la estimación de ETA podría estar muy lejos. La ETA basada en el tamaño solo funciona si su destino está vacío, en este caso delta ==tamaño de la fuente.

La idea general es emitir una línea por archivo 'transferido' desde rsync y contar esas líneas con 'pv':

rsync -ai /source remote:/dest | pv -les [number of files] >/dev/null

Tiendo a hacer copias de seguridad de sistemas de archivos completos (por varias razones), en este caso puede usar el mucho más económico df para obtener el número de archivos (en lugar de du o find que atravesará su jerarquía de fuentes en otro momento después de que rsync lo haya hecho). Aparece la opción -x para asegurarse de que rsync permanece en el mismo sistema de archivos de origen (y no sigue otros montajes internos):

rsync -aix /source remote:/dest | pv -les $(df -i /source | perl -ane 'print $F[2] if $F[5] =~ m:^/:') >/dev/null

Si desea contar archivos en /source de forma general, use find /source|wc -l (Advertencia de nuevo:puede ser lento y pesado en E/S).

Solución 4:

danakim es correcto. No hay formas triviales de agregar un indicador de progreso total.

La razón de esto es que cuando rsync mira una lista de archivos para sincronizar, no sabe de antemano qué archivos necesitarán cambiar. Si está realizando transferencias delta, los deltas mismos deben calcularse con anticipación para brindar una imagen total del trabajo que debe realizarse.

En otras palabras, la forma más fácil de calcular cuánto trabajo hay que hacer es realmente hacerlo.

Solución 5:

Para transferencias largas, estoy contento con ejecutar du -s a ambos lados. Incluso watch -n1 du -s , si me siento realmente ansioso.

watch ejecuta un comando (du -s aquí) periódicamente (cada 1 segundo aquí) y muestra la salida a pantalla completa.


Linux
  1. ¿Transferencias de archivos más inteligentes que Rsync?

  2. ¿Es posible emular versiones anteriores de Bash?

  3. ¿Cómo silenciar selectivamente Rsync?

  4. ¿Configurar una pantalla de 3 monitores?

  5. Usando rsync para sincronizar archivos

Linux Mint KDE todavía es posible

Rsync Mostrar barra de progreso al copiar archivos en Linux

¿Cómo programar un comando Rsync?

¿Es posible abortar el apagado en Linux?

¿Es posible usar / en un nombre de archivo?

¿Es posible hacer ping a una dirección:puerto?