Posso vedere lo stato di avanzamento di un'operazione di sincronizzazione?


103

Ho copiato un file di grandi dimensioni su un disco USB montato su un sistema Linux con asincrono. Questo ritorna a un prompt dei comandi relativamente rapidamente, ma quando scrivo sync, ovviamente, tutto deve andare su disco e ciò richiede molto tempo.

Capisco che sarà lento, ma c'è un posto dove posso vedere un contatore scendere a zero? Guardando buffersin topnon aiuta.


per ulteriori informazioni, consultare: lwn.net/Articles/572911
lanoxx,

Risposte:


162

Guardando /proc/meminfomostrerai il Dirtynumero che si riduce nel tempo man mano che tutti i dati vengono inviati; anche in parte potrebbe fuoriuscire Writeback. Sarà un riepilogo su tutti i dispositivi, ma nei casi in cui un dispositivo sul sistema è molto più lento degli altri, di solito finirai dove tutto ciò che è in quella coda è correlato ad esso. Probabilmente troverai il Dirtynumero grande quando inizi e il synctempo è quasi nello stesso momento in cui si avvicina a 0. Prova questo per ottenere un display interattivo:

watch -d grep -e Dirty: -e Writeback: /proc/meminfo

Con i normali dischi posso normalmente ignorare Writeback, ma non sono sicuro che sia coinvolto più spesso nel percorso di trasferimento USB. Se rimbalza su e giù senza una chiara tendenza, probabilmente puoi semplicemente guardare il Dirtynumero.


4
Sul mio sistema, il writeback rimane a pochi mega fino alla fine, quando Dirty è vuoto, a quel punto inizia anche a scendere.
mattdm,

24

Puoi guardare il /sys/block/<device>/statfile per il dispositivo appropriato durante la sincronizzazione. La nona colonna indicherà il numero di richieste in volo sul dispositivo, che dovrebbe scendere a zero al termine della sincronizzazione.
Non conosco un modo per tradurlo in un numero di byte, ma dovrebbe darti un'idea approssimativa di quanta "roba" è ancora in sospeso.

Vedi il file stat.txt nella documentazione del kernel per qualche informazione in più. (C'è anche un inflightfile in quella directory sul mio sistema che potrebbe contenere richieste di lettura e scrittura in volo, ma non riesco a trovare documenti per quello.)


3
Solo per un comodo riferimento, combinando un'idea da un'altra risposta:watch -t -n1 'awk "{ print \$9 }" /sys/block/sdd/stat'
mattdm

4
Per la mia chiavetta USB, questo tende a librarsi intorno a 150 per tutta la durata dell'operazione di copia e syncsuccessive. Va a 0, ma solo alla fine. Ciò rende l'altra risposta più utile per osservare impazientemente i progressi.
Mattdm,

1
(Anche se in teoria mi piace guardare solo il dispositivo appropriato anziché le informazioni di sistema.)
mattdm

C'è un modo per ottenere la quantità di byte scritti (sincronizzati, scaricati non in volo) o memorizzati nella cache per essere scritti su disco? Se avessi una dimensione della cache di scrittura per unità, potrei usarla con duper calcolare i dati reali che sono sincronizzati sull'unità.
unfa,

10

Usando la risposta di Greg, puoi semplicemente synceseguire in background mentre visualizzi lo stato del blocco Dirty in memoria.

Per ottenere ciò, esegui semplicemente questo comando:

sync & watch -n 1 grep -e Dirty: /proc/meminfo

Questo chiamerà syncin background mentre si esegue watchin primo piano. Al termine del synccomando (circa quando la dimensione del blocco Dirty ha raggiunto 0), si avrà un output simile al seguente:

1]  + 27260 done        sync

Ciò significa che il comando è terminato e puoi terminare il watchcomando con Ctrl+ C.


A proposito: so che questa è una vecchia domanda, ma è la prima che viene visualizzata su Google quando qualcuno la cerca, e volevo aggiungere la soluzione che ho trovato.
jflemieux,

1
Peccato che la sincronizzazione / umount non abbia ricevuto aggiornamenti dal kernel e potrebbe stampare questo tipo di cose direttamente se richiesto.
mcr
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.