Finden Sie heraus, welche Prozesse auf die Festplatte schreiben

31

Bei meinem Lenovo T400 und meinem Ubuntu blinkt die Anzeige für das Beschreiben der Festplatte ständig. Ich habe mich gefragt, ob es unter Linux möglich ist, herauszufinden, welche Prozesse die E / A-Vorgänge auf der Festplatte ausführen. Auf ähnliche Weise topkönnen Sie herausfinden, welche Prozesse die meiste CPU und den meisten Speicher belegen.

Tim
quelle

Antworten:

41

Iotop ist ein gutes Werkzeug für das, was Sie wollen. Sie können auch die akkumulierte E / A-Menge auf DISK READ, DISK WRITE, SWAPIN und IO (Gesamtprozentsatz) anzeigen. Dies ist durch eine raffinierte Schnittstelle:

  • Sie drücken einfach aauf die Tastatur, und es werden die hungrigsten Prozesse im Vordergrund sortiert.
  • Um die Reihenfolge umzukehren, drücken Sie einfach r.
  • Wenn Sie nach anderen Spalten sortieren möchten, drücken Sie einfach die linke / rechte Taste.

Wie top, die Präsentation ist ziemlich beschäftigt. Eine andere Sache ist, dass es nicht über die unzähligen Optionen topverfügt (z. B. kann ich keine der Spalten ausblenden, die mich nicht interessieren), aber das Tool ist mehr als gut genug für seinen spezifischen Zweck.

Tshepang
quelle
3
Powertop ist auch nützlich, um herauszufinden, wie viel der Akku eines Laptops verbraucht . iotop ist immer noch der erste Ort, an dem nach Festplattenzugriffen gesucht wird.
Gilles 'SO- hör auf böse zu sein'
man kann pass -o( --only) verwenden, um alle Aufgaben herauszufiltern, die keine E / A ausführen. Dies macht die Liste weniger überfüllt
Marcin Orlowski
15

Sie können lsof( man lsof ) verwenden. Das Folgende gibt eine Liste aller Dateien zurück, die zum Schreiben geöffnet sind:

lsof | grep -e "[[:digit:]]\+w"
James Sumners
quelle
1
Welche Dateien geöffnet sind und auf welche Dateien tatsächlich zugegriffen wird, ist zweierlei.
Psusi
@psusi Es ist sehr wahrscheinlich, dass auf eine offene Datei zum Schreiben zugegriffen wird. Weitere Informationen können auch abgerufen werden, indem lsof über die Manpage gelernt wird.
James Sumners
5
Dateien, die zum Schreiben geöffnet sind, können zu einem bestimmten Zeitpunkt geschrieben werden, müssen aber momentan nicht. Viele Dateien bleiben geöffnet, werden jedoch selten beschrieben. Andererseits können die Dateien, in die geschrieben wird, schnell geöffnet und geschlossen werden, sodass sie in lsof nicht angezeigt werden. In beiden Fällen ist es wenig hilfreich, herauszufinden, welcher Prozess gerade auf die Festplatte schreibt.
Psusi
Die waus dem obigen Befehl make grep Sie für Dateien , die für das Schreiben geöffnet sind nur . Zum Schreiben und Lesen geöffnete Dateien ( u) werden nicht angezeigt, können aber auch beschrieben werden. Wenn Sie möchten, dass Dateien zum Schreiben und zum Lesen und Schreiben geöffnet werden, ist dies genau das, wonach Sie suchen:lsof | grep -e "[[:digit:]]\+[wu]\{1\}"
Martijn
1
@ Martijn Sie möchten verwenden grep -e**w**, um Übereinstimmungen [0-9]\+[wu]in anderen Spalten zu vermeiden
2

Verwenden Sie strace.

Mehrdad
quelle
6
Das wird Ihnen sagen, was ein bestimmter Prozess tut, es wird nicht helfen, herauszufinden, welcher Prozess etwas tut.
Gilles 'SO- hör auf böse zu sein'
2

Insbesondere bei geringer Festplattenaktivität ist es erforderlich, iotop im Batch-Modus zu verwenden, um zu verhindern, dass kurze Zugriffsleitungen schnell verschwinden. Die Antwort von Wie protokolliere ich Dateisysteme mit Lese- / Schreibrechten nach Dateinamen in Linux? zeigt, wie das geht.

Bisher iotopist die beste Gesamtlösung. Mit dem folgenden Befehl erhalten Sie eine Echtzeitausgabe aller Prozesse, die den Datenträger verwenden.

iotop -bktoqqq -d .5

where: -b     is batch mode
       -k     is kilobytes/s
       -t     adds timestamp
       -o     only show processes or threads actually doing I/O
       -qqq   removes output headers
       -d .5  updates every .5 seconds

Sobald Sie die Prozess-ID haben, können Sie die Dateien auch mit finden

 lsof -p $PID
Frank Breitling
quelle
1
Wie unterscheidet sich diese Antwort von den obigen (sehr alten) Antworten? Wenn Sie eine alte Frage beantworten, sollten Sie erläutern, inwiefern sich Ihre Antwort von den vorherigen unterscheidet. Dies hilft dem Leser, die Antworten zu sortieren.
Stephen Rauch
Vielen Dank für den Hinweis. Ich habe diese Antwort unter Berücksichtigung Ihres Kommentars bearbeitet.
Frank Breitling