1

Как я могу узнать, какие процессы записывают на определенный диск с течением времени?

В моем конкретном случае у меня был небольшой домашний сервер, работающий 24/7, и я включил в crontab скрипт для отключения всех неиспользуемых дисков (без изменений в /proc /diskstats в течение 15 минут).

Но мой системный диск не сработает вообще. Я подозреваю, что журналы, но это, вероятно, не только записи журналов в файловую систему на системном диске, и я не хочу идти полностью, перемещая файлы журналов к чему-то другому, просто чтобы узнать, что диск все еще не вращается, и есть ничего не могу с этим поделать.

2 ответа2

4

Используйте команду iotop .

Это подробно покажет вам все команды, которые пишутся на диск.

Пример вывода:

Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    3 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    4 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:0]
    6 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    7 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]
    8 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/1]
   10 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/1]
   11 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:1]
   12 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/1]
   13 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [cpuset]
   14 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [khelper]
   15 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kdevtmpfs]
   16 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [netns]
   17 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [sync_supers]
   18 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [bdi-default]
   19 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kintegrityd]
   20 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kblockd]
   21 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ata_sff]
   22 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [khubd]
   23 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [md]
   24 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/1:1]
   25 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [khungtaskd]
   26 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kswapd0]
   27 be/5 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksmd]

Дополнительно используйте команду iostat пример вывода которой выглядит следующим образом:

Linux 3.2.6 (z)         10/03/2012      _i686_  (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.14    0.01    0.26    0.01    0.00   99.59

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               0.81        13.67         9.14    8968739    5996546

Пожалуйста, также старайтесь при поиске уже отвеченных вопросов.

2

Я не знаю, но я предполагаю, что вы ничего не можете с этим поделать. Вот мои рассуждения:

Когда вы говорите "системный диск", я представляю, что вы имеете в виду диск с корневой файловой системой.

Корневая файловая система содержит несколько каталогов и файлов, которые отслеживаются различными утилитами, включая /etc/cron.* который отслеживается и обрабатывается cron. Вероятно, вы можете поместить /etc в файловую систему, отличную от /, но это почти наверняка принесет больше хлопот, чем стоит, и, конечно, это не обычная установка.

/proc/diskstats включает в себя активность чтения с диска, а не только запись.

Каждый раз, когда cron выполняет ваш скрипт, чтобы проверить, была ли какая-либо активность на диске, это почти наверняка приведет к многократному чтению (даже если не записи в) из разных мест: crontabs, интерпретаторов команд, используемых ими библиотек и т.д. Если вы не используете В вашей системе с noatime эти операции чтения также приводят к записи для обновления временных меток времени доступа к рассматриваемым файлам / индексам.

Таким образом, каждый раз, когда ваш скрипт выполняется, чтобы проверить, была ли какая-либо активность диска в соответствии с /proc /diskstats, это само по себе приводит к активности диска в соответствии с /proc /diskstats. Таким образом, ваши критерии "без изменений значений" никогда не будут выполнены, и привод никогда не будет вращаться.

Если это вызывает у вас серьезную озабоченность, я бы предложил переместить все, что не обязательно должно быть в корневой файловой системе, в другую файловую систему и запустить корневую файловую систему с SSD или флэш-устройства, возможно, даже смонтированного для чтения. только. Это должно позволить приводу вращающегося диска отключиться в моменты, когда нет явной активности. Тем не менее, я полагаю, что сделать это, скорее всего, больше проблем, чем оно того стоит. Если вы просто хотите, чтобы диски вращались вниз, чтобы избавиться от шума, перемещение того, что у вас сейчас есть в корневой файловой системе, на небольшое твердотельное устройство (SSD или флэш-память), скорее всего, сделает то же самое с гораздо меньшими усилиями. Просто учтите тот факт, что у них ограниченное количество циклов записи до сбоя (как минимум, рассмотрите возможность работы с noatime или с файловой системой, разработанной с учетом SSD).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .