Kann ich den Fortschritt eines Synchronisierungsvorgangs verfolgen?

103

Ich habe eine große Datei mit Async auf ein USB-Laufwerk kopiert, das auf einem Linux-System installiert ist. Das kehrt relativ schnell zu einer Eingabeaufforderung zurück, aber wenn ich tippe sync, muss natürlich alles auf die Festplatte, und das dauert lange.

Ich verstehe, dass es langsam wird, aber gibt es irgendwo einen Punkt, an dem ich zusehen kann, wie ein Zähler auf Null zurückgeht? Beobachten buffersin topnicht hilft.

mattdm
quelle
Weitere Informationen finden Sie unter: lwn.net/Articles/572911
lanoxx

Antworten:

162

Wenn Sie auf /proc/meminfoschauen, wird sich die DirtyAnzahl mit der Zeit verringern, wenn alle Daten aus dem Speicher entfernt werden. Einiges davon kann auch in das System gelangen Writeback. Das ist eine Zusammenfassung für alle Geräte, aber in den Fällen, in denen ein Gerät im System viel langsamer als der Rest ist, werden Sie normalerweise dort enden, wo alles in dieser Warteschlange damit zusammenhängt. Sie werden wahrscheinlich feststellen, dass die DirtyZahl beim Starten und syncBeenden ungefähr zur gleichen Zeit wie bei 0 groß ist . Versuchen Sie Folgendes, um eine interaktive Anzeige zu erhalten:

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

Bei normalen Datenträgern kann ich normalerweise ignorieren Writeback, bin mir jedoch nicht sicher, ob der USB-Übertragungspfad häufiger betroffen ist. Wenn es nur auf und ab springt, ohne dass ein eindeutiger Trend erkennbar ist, können Sie sich wahrscheinlich nur die DirtyZahl ansehen .

Greg Smith
quelle
4
Auf meinem System bleibt der Rückschreibevorgang bei einigen Megabyte, bis kurz vor dem Ende Dirty leer ist und zu diesem Zeitpunkt auch ein Rückgang einsetzt.
Mattdm
24

Sie können /sys/block/<device>/statwährend der Synchronisierung in der Datei nach dem entsprechenden Gerät suchen . In der neunten Spalte wird die Anzahl der In-Flight-Anfragen auf dem Gerät angegeben, die nach Abschluss der Synchronisierung auf Null sinken sollten.
Sie wissen nicht, wie Sie das in eine Anzahl von Bytes übersetzen können, aber es sollte Ihnen eine ungefähre Vorstellung davon geben, wie viel "Zeug" noch aussteht.

Weitere Informationen finden Sie in der Datei stat.txt in der Kernel-Dokumentation. ( inflightIn diesem Verzeichnis befindet sich auch eine Datei auf meinem System, die anscheinend während des Flugs gelesene und geschriebene Anforderungen enthält. Ich kann jedoch keine Dokumente dafür finden.)

Matte
quelle
3
Nur zum leichteren Nachschlagen, um eine Idee aus einer anderen Antwort zu kombinieren:watch -t -n1 'awk "{ print \$9 }" /sys/block/sdd/stat'
mattdm
4
Bei meinem USB-Stick schwankt dieser während des gesamten Kopiervorgangs und syncdanach in der Regel um 150 . Es geht auf 0, aber nur ganz am Ende. Das macht die andere Antwort nützlicher, um den Fortschritt ungeduldig zu beobachten.
Mattdm
1
(Auch wenn ich mir theoretisch lieber nur das passende Gerät als die systemweite Information anschaue.)
mattdm
Gibt es eine Möglichkeit, die Anzahl der geschriebenen (synchronisierten, nicht im Flug gelöschten) oder zwischengespeicherten Bytes auf das Laufwerk zu übertragen? Wenn ich eine Schreib-Cache-Größe pro Laufwerk hätte, könnte ich diese verwenden, duum die tatsächlichen Daten zu berechnen, die auf dem Laufwerk synchronisiert werden.
unfa
10

Wenn Sie Gregs Antwort verwenden, können Sie einfach syncim Hintergrund ausgeführt werden, während der Status des Dirty-Blocks im Speicher angezeigt wird.

Führen Sie dazu einfach den folgenden Befehl aus:

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

Dies ruft syncim Hintergrund auf, während es im Vordergrund ausgeführt wird watch. Wenn der syncBefehl beendet ist (ungefähr wenn die Größe des Dirty-Blocks 0 erreicht hat), erhalten Sie eine Ausgabe, die wie folgt aussieht:

1]  + 27260 done        sync

Dies bedeutet, dass der Befehl beendet wurde und Sie den watchBefehl mit Ctrl+ beenden können C.

jflemieux
quelle
BTW: Ich weiß, dass dies eine alte Frage ist, aber es ist die erste, die bei Google auftaucht, wenn jemand danach sucht, und ich wollte die Lösung hinzufügen, die ich gefunden habe.
Jflemieux
1
Schade, dass Sync / Umount keine Updates vom Kernel bekommen hat und solche Sachen direkt drucken kann, wenn man dazu aufgefordert wird.
mcr