Dowiedz się, jakie procesy zapisują na dysku twardym

31

W moim Lenovo T400 i Ubuntu lampka zapisu na dysku twardym wciąż miga. Zastanawiałem się, czy w systemie Linux można dowiedzieć się, jakie procesy wykonują operacje we / wy na dysku twardym? Podobnie jak wcześniej top, możesz dowiedzieć się, które procesy wykorzystują najwięcej procesora i pamięci.

Tim
źródło

Odpowiedzi:

41

Iotop to dobre narzędzie do tego, czego chcesz. Pozwala także na wyświetlenie skumulowanej liczby operacji we / wy na dowolnym z funkcji ODCZYT DYSKU, ZAPIS DYSKU, SWAPIN i IO (całkowity procent). Odbywa się to poprzez sprytny interfejs:

  • Po prostu naciskasz aklawiaturę, a to posortuje najbardziej głodne procesy na górze.
  • Odwracając zamówienie, wystarczy nacisnąć r.
  • Jeśli chcesz sortować według innych kolumn, po prostu naciśnij lewy / prawy klawisz.

Jak top, prezentacja jest dość zajęty. Inną rzeczą jest to, że nie ma niezliczonych opcji top(np. Nie mogę ukryć żadnej kolumny, w której mnie nie interesuje), ale narzędzie jest wystarczająco dobre do określonego celu.

tshepang
źródło
3
Powertop jest również przydatny, aby znaleźć, co zużywa baterię w laptopie; iotop jest nadal pierwszym miejscem, w którym można uzyskać dostęp do dysku.
Gilles „SO- przestań być zły”
można przekazać -o( --only), aby odfiltrować wszystkie zadania, które nie wykonują żadnych operacji we / wy. To sprawia, że ​​lista jest mniej zatłoczona
Marcin Orłowski
15

Możesz użyć lsof( man lsof ). Poniższe spowoduje zwrócenie listy wszystkich plików, które można otworzyć:

lsof | grep -e "[[:digit:]]\+w"
James Sumners
źródło
1
Jakie pliki są otwarte i jakie pliki są faktycznie dostępne, to dwie różne rzeczy.
psusi
@psusi Bardzo prawdopodobne jest, że „otwarty plik” do zapisu. Ponadto można uzyskać więcej informacji, ucząc się lsof na jego stronie podręcznika.
James Sumners
5
Pliki otwarte do zapisu mogą w pewnym momencie zostać zapisane, ale niekoniecznie teraz. Wiele plików jest otwartych, ale rzadko są zapisywane. Z drugiej strony, zapisywane pliki mogą być szybko otwierane i zamykane, więc nie będą wyświetlane w lsof. Tak czy inaczej, niewiele pomaga dowiedzieć się, jaki proces aktualnie zapisuje się na dysku.
psusi
Powyższe wpolecenie powoduje grep dla plików, które są otwarte tylko do zapisu . Pliki otwarte do zapisu i odczytu ( u) nie będą wyświetlane, ale można je również zapisać. Jeśli chcesz, aby pliki były otwarte do zapisu oraz do odczytu i zapisu, wierzę, że tego właśnie szukasz:lsof | grep -e "[[:digit:]]\+[wu]\{1\}"
Martijn
1
@Martijn Będziesz chciał użyć, grep -e**w**aby uniknąć dopasowania [0-9]\+[wu]w innych kolumnach
2

Zastosowanie strace.

Mehrdad
źródło
6
To powie ci, co robi konkretny proces, nie pomoże ci ustalić, który proces coś robi.
Gilles „SO- przestań być zły”
2

Szczególnie w przypadku niskiej aktywności dysku konieczne jest użycie iotop w trybie wsadowym, aby zapobiec szybkiemu znikaniu krótkich linii dostępu. Odpowiedź: Jak zalogować system plików do odczytu / zapisu według nazwy pliku w systemie Linux? pokazuje, jak to zrobić.

Jak dotąd iotopjest to najlepsze ogólne rozwiązanie. Poniższe polecenie zapewnia dane wyjściowe wszystkich procesów korzystających z dysku w czasie rzeczywistym.

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

Po uzyskaniu identyfikatora procesu możesz także znaleźć pliki za pomocą

 lsof -p $PID
Frank Breitling
źródło
1
Czym różni się ta odpowiedź od powyższych (bardzo starych) odpowiedzi? Dobrze jest odpowiedzieć na stare pytanie, aby wyjaśnić, w jaki sposób Twoja odpowiedź różni się od poprzednich odpowiedzi. Pomaga to czytelnikowi w sortowaniu odpowiedzi.
Stephen Rauch,
Dzięki za zwrócenie na to uwagi. Zredagowałem tę odpowiedź, biorąc pod uwagę twój komentarz.
Frank Breitling,