Узнайте, какие процессы записывают на жесткий диск


32

На моем Lenovo T400 и Ubuntu индикатор записи на жесткий диск продолжает мигать. Мне было интересно, если в Linux можно узнать, какие процессы делают ввод / вывод на жесткий диск? Также как topвы можете узнать, какие процессы используют больше всего ресурсов процессора и памяти.

Ответы:


42

Iotop - это хороший инструмент для того, что вы хотите. Это также позволяет отображать накопленное количество входов / выходов на любом из дисков DISK READ, DISK WRITE, SWAPIN и IO (общий процент). Это через отличный интерфейс:

  • Вы просто нажимаете aна клавиатуре, и она сортирует самые голодные процессы сверху.
  • В обратном порядке вы просто нажимаете r.
  • Если вы хотите отсортировать по другим столбцам, просто нажмите левую / правую клавишу.

Мол top, презентация довольно занята. Другое дело, что у него нет бесчисленных опций top(например, я не могу скрыть ни одну из колонок, в которых я не заинтересован), но инструмент более чем достаточно хорош для его конкретной цели.


3
Powertop также полезен для определения того, что расходует батарею на ноутбуке; iotop по-прежнему является первым местом для поиска доступа к диску.
— Жиль "ТАК - перестань быть злым"

Можно выполнить pass -o( --only), чтобы фактически отфильтровать все задачи, не выполняя никаких операций ввода-вывода. Это делает список менее многолюдным
— Марчин Орловски

15

Вы можете использовать lsof( man lsof ). Далее будет возвращен список всех файлов, открытых для записи:

lsof | grep -e "[[:digit:]]\+w"

1
Какие файлы открыты и какие файлы на самом деле доступны, это две разные вещи.
— Псуси

@psusi Очень вероятно, что открытый файл для записи "доступен". Кроме того, дополнительную информацию можно получить, изучив lsof через его справочную страницу.
— Джеймс Самнерс

5
Файлы, открытые для записи, могут быть записаны в определенный момент, но не обязательно прямо сейчас. Многие файлы остаются открытыми, но редко пишутся. С другой стороны, файлы для записи могут открываться и закрываться быстро и поэтому не будут отображаться в lsof. В любом случае, это мало помогает выяснить, какой процесс в действительности записывает на диск в данный момент.
— Псуси

Приведенная wвыше команда from заставляет вас grep для файлов, которые открыты только для записи . Файлы, открытые для записи и чтения ( u), не будут отображаться, но они также могут быть записаны. Если вы хотите, чтобы файлы были открыты для записи и для чтения + записи, я думаю, это то, что вы ищете:lsof | grep -e "[[:digit:]]\+[wu]\{1\}"
— Martijn

1
@Martijn Вы хотите использовать, grep -e**w**чтобы избежать сопоставления [0-9]\+[wu]внутри других столбцов


2

Специально для низкой активности диска необходимо использовать iotop в пакетном режиме, чтобы предотвратить быстрое исчезновение коротких линий доступа. Ответ: Как мне записать чтение / запись файловой системы по имени файла в Linux? показывает, как это сделать.

Пока что iotopэто лучшее общее решение. Следующая команда дает в реальном времени вывод всех процессов, использующих диск.

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

Если у вас есть идентификатор процесса, вы также можете найти файлы с

 lsof -p $PID

1
Чем этот ответ отличается от приведенных выше (очень старых) ответов? При ответе на старый вопрос полезно объяснить, чем ваш ответ отличается от предыдущих. Это помогает читателю сортировать ответы.
— Стивен Раух

Спасибо за указание на это. Я отредактировал этот ответ с учетом вашего комментария.
— Фрэнк
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.