aiuto: progress bar per rsync

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
Eberoth
Linux 2.x
Linux 2.x
Messaggi: 403
Iscritto il: lun ago 24, 2009 9:22
Slackware: -current
Kernel: 3.13.6
Desktop: KDE4
Distribuzione: Slackel64

aiuto: progress bar per rsync

Messaggioda Eberoth » dom lug 31, 2016 21:55

Salve,
tempo fa scrissi uno script per fare dei backup incrementali. Man mano che la mia conoscenza di bash cresceva, il codice dello script è stato ampliato e rivisto una miriade di volte e, allo stato attuale, è una cosa piuttosto efficiente... ma non mi convince il feedback che da durante l'esecuzione.
Il cuore sello script è questo:

Codice: Seleziona tutto

rsync -azhv --stats --info=name0 --info=progress2 --del --exclude-from=$EXFILE --link-dest="$DESTDIR"/old "$ORIG"/ "$DESTDIR"/$NEW/


dove
DESTDIR è la directory dove tengo tutti i backup, "old" è il backup precedente e NEW quello che si sta creando. ORIG è, ovviamente, la directory di cui fare il backup ( di solito, / ).

L'efficienza dello script ruota attorno al parametro "--link-dest" che, per i file presenti in tutti e due i backup senza variazioni, crea hardlinks invece di copie, risparmiando su tempo e spazio occupato.
Il problema è che, rsync, anche quando forzato a dare statistiche "totali" con "--info=name0 --info=progress2", è una fonte del tutto inattendibile, perché fa la scansione della sorgente _durante_ la copia e non prima... per cui ci sono casi in cui si passa dal 90% al 60% di completamento....
La soluzione sarebbe lanciare due volte rsync, la prima in "dry run" da usare come fonte per creare una barra di avanzamento; oppure forzarlo ad indicizzare tutti i file prima della copia... ma entrambi i sistemi sono del tutto inefficienti: il primo quasi raddoppia il tempo d'esecuzione dello script, mentre il secondo ne aumenta di pareccio l'uso di CPU e memoria...

Ora, possibile che non ci sia un modo di ottenere dati attendibili sulla durata del processo e, magari, convertirli in una elegante progressbar ascii??

Se serve, posso postare l'intero script, ma è piuttosto lungo e non credo che altre sue parti siano rilevanti...

Avatar utente
lablinux
Linux 4.x
Linux 4.x
Messaggi: 1094
Iscritto il: gio nov 27, 2008 12:23
Desktop: Gnome
Distribuzione: Debian testing
Località: Rho

Re: aiuto: progress bar per rsync

Messaggioda lablinux » lun ago 01, 2016 11:19

sono ignorante in materia, ma anche la semplice copia non ha mai una tempistica certa.
Credo sia pressoche impossibile sapere con esattezza il tempo necessario.
Se copi 1 file da 1 tera o 10.000 file che sommati fanno un tera il tempo necessario, credo, sia molto superiore nel secondo caso.
E questo, sempre secondo me, ti fa sballare il tempo residuo o la percentuale di avanzamento. In base alla dimensione dei file che sta copiando in quel momento.

Avatar utente
Eberoth
Linux 2.x
Linux 2.x
Messaggi: 403
Iscritto il: lun ago 24, 2009 9:22
Slackware: -current
Kernel: 3.13.6
Desktop: KDE4
Distribuzione: Slackel64

Re: aiuto: progress bar per rsync

Messaggioda Eberoth » lun ago 01, 2016 11:35

Sì, infatti l'idea di base era quella di usare il numero di file copiati/numero da copiare (o la dimensione in byte) come base per lo scorrimento. E' quello che rsync "cerca" di fare di suo, ed è quello che fanno praticamente tutti i tool con barre simili (wget, lftp, pv, bar...)... uno dei problemi che ho, è quello di reperire la dimensione/numero di file in un tempo decente e poi utilizzarla come base per la progress bar. Diciamo che più che sapere quanto "tempo" manca, mi interessa sapere a che punto è la copia...

Per capirci, lo script fa il backup di circa 400GB in 3h e qualcosa (meno se non uso il pc, visto che usa "ionice -c3")... se dovessi fare un dry run con rsync, starei sulle 6 ore...

Avatar utente
lablinux
Linux 4.x
Linux 4.x
Messaggi: 1094
Iscritto il: gio nov 27, 2008 12:23
Desktop: Gnome
Distribuzione: Debian testing
Località: Rho

Re: aiuto: progress bar per rsync

Messaggioda lablinux » lun ago 01, 2016 12:27

"se dovessi fare un dry run con rsync" :?: cos'è egiziano antico :faroah:
ma rsync non copia solo ciò che è cambiato?

Avatar utente
Eberoth
Linux 2.x
Linux 2.x
Messaggi: 403
Iscritto il: lun ago 24, 2009 9:22
Slackware: -current
Kernel: 3.13.6
Desktop: KDE4
Distribuzione: Slackel64

Re: aiuto: progress bar per rsync

Messaggioda Eberoth » lun ago 01, 2016 14:51

... sì, rsync copia solo ciò che è cambiato, SE ha qualcosa con cui confrontarlo. Se è il primo "backup" della serie, la directory di destinazione è vuota e quindi deve copiare ogni cosa. Senza considerare che, in alcuni casi, anche in un backup successivo posso avere differenze di una o due centinaia di GB tra backup vecchio ed attuale... e comunque, in ogni caso, rsync deve leggere l'intera sorgente per sapere "cosa è cambiato".
Tra l'altro, per misurare l'efficienza di uno script, io mi metto nel caso peggiore: è ovvio che se lancio 2 volte di fila rsync con gli stessi parametri, la seconda volta l'esecuzione sarà quasi immediata, visto che non troverà niente da copiare, ma che senso ha? A me importa che non impieghi mezze giornate quando poi deve fare lavoro serio.

Riguardo a "dry run", preferisci il termine "simulazione"? Ok, la chiamo simulazione: se lancio rsync 2 volte, la prima come "simulazione", rischio di trovarmi con tempi di esecuzione proibitivi. Meglio? Andiamo avanti...

Avatar utente
lablinux
Linux 4.x
Linux 4.x
Messaggi: 1094
Iscritto il: gio nov 27, 2008 12:23
Desktop: Gnome
Distribuzione: Debian testing
Località: Rho

Re: aiuto: progress bar per rsync

Messaggioda lablinux » lun ago 01, 2016 15:01

Grazie delle risposte.