2011-08-23 14 views
15

Sto provando a scrivere uno script Python che monitorerà un trasferimento rsync e fornirò una stima (approssimativa) del progresso percentuale. Per il mio primo tentativo, ho guardato un comando rsync --progress e ho visto che la stampa messaggi come:Monitoraggio dei progressi di Rsync

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

Ho scritto un parser per tali messaggi, e usato la parte a-check per produrre una percentuale di avanzamento, qui, questo sarebbe completo al 60%.

Tuttavia, ci sono due difetti in questo:

  • Nelle grandi trasferimenti, la "numeratore" della frazione al-check non sembra diminuire monotonicamente, quindi la percentuale di completezza può saltare all'indietro.
  • Tale messaggio non viene stampato per tutti i file, il che significa che il progresso può saltare in avanti.

Ho dato un'occhiata ad altre alternative di messaggi da utilizzare, ma non sono riuscito a trovare nulla. Qualcuno ha qualche idea?

Grazie in anticipo!

+3

I valori salta perché rsync inizia a trasferire dati mentre sta ancora valutando il lavoro che deve svolgere. È una misura valida quanto quella che otterrai. – hop

+0

Non c'è modo di fare una valutazione preliminare del lavoro che deve fare? --dry-run --stats sembra essere il tipo di cosa da fare, sfortunatamente i valori che produce per i dati da trasferire non sono corretti. – paulmdavies

+0

perché dovresti rallentarlo, solo per farlo mostrare informazioni inutili? – hop

risposta

0

Per il pieno controllo del trasferimento, è necessario utilizzare uno strumento di diffusione di livello più basso e gestire autonomamente l'elenco di directory e il trasferimento dei dati.

Sulla base librsync c'è sia la riga di comando rdiff o il modulo python pysync

24

La versione corrente di rsync (al momento della redazione 3.1.2) ha un'opzione --info=progress2 che vi mostrerà il progresso di tutta la trasferimento invece di singoli file.

Da the man page:

C'è anche un --info = progress2 opzione che emette statistiche basate su tutto il trasferimento, piuttosto che i singoli file. Usa questo flag senza emettere un nome file (es. Evita -v o specifica --info = nome0 se vuoi vedere come sta andando il trasferimento senza far scorrere lo schermo con molti nomi. (Non devi specificare il - opzione di progresso, al fine di utilizzare --info = progress2.)

Quindi, se possibile, sul proprio sistema è possibile eseguire l'aggiornamento a una versione rsync corrente che contiene l'opzione.

+0

Molto bella da ascoltare! Grazie! – Avio

+0

Se solo potessi compilare rsync su MinGW:/ – msiemens

+0

backup incrementale non mostra la barra di avanzamento corretta – LOKESH

6

È possibile disattivare la ricorsione incrementale con l'argomento --no-inc-recursive. rsync eseguirà una pre-scansione dell'intera struttura di directory, quindi conosce il numero totale di file che deve controllare.

Questo è in realtà il vecchio modo in cui ricorreva. La ricorsione incrementale, l'impostazione predefinita corrente, è stata aggiunta per la velocità.

4

Nota l'avvertenza che anche qui è --info=progress2non del tutto affidabile in quanto questa è la percentuale in base al numero di file rsync sa riguardo al momento in cui viene visualizzato lo stato di avanzamento. Questo non è necessariamente il numero totale di file che devono essere sincronizzati (ad esempio, se rileva un numero elevato di file di grandi dimensioni in una directory profondamente annidata).

Un modo per garantire che --info=progress2 non salto indietro nell'indicazione progresso sarebbe quello di costringere rsync per eseguire la scansione di tutte le directory ricorsivamente prima di iniziare la sincronizzazione (invece del suo comportamento predefinito di fare una scansione in modo incrementale ricorsiva), fornendo anche l'opzione --no-inc-recursive. Si noti tuttavia che questa opzione aumenterà anche l'utilizzo della memoria rsync e il tempo di esecuzione.

+0

questo funziona perfettamente per me, grazie per la spiegazione dell'opzione –