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

32

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

Тим
источник

Ответы:

42

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

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

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

tshepang
источник
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

Использование strace.

Mehrdad
источник
6
Это скажет вам, что делает конкретный процесс, но это не поможет определить, какой процесс что-то делает.
Жиль "ТАК - перестань быть злым"
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
Чем этот ответ отличается от приведенных выше (очень старых) ответов? При ответе на старый вопрос полезно объяснить, чем ваш ответ отличается от предыдущих. Это помогает читателю сортировать ответы.
Стивен Раух
Спасибо за указание на это. Я отредактировал этот ответ с учетом вашего комментария.
Фрэнк