Обнаружение, что вращает жесткий диск

$ time perl -e \
    '$count=1024*1024; while ($count>0) { print "x" x 384; $count--; }' > out
real    0m1.284s
user    0m0.316s
sys 0m0.961s
$ ls -lh out
-rw-r--r-- 1 me group 384M Apr 16 19:47 out

Замена "x" x 384 (который производит строку 384 xs) с чем Вам нравится.

Можно оптимизировать это далее при помощи большей строки в каждом цикле и обхода нормального стандарта, буферизующего.

$ perl -e \
   '$count=384; while ($count>0) {
      syswrite(STDOUT, "x" x (1024*1024),  1024*1024);
      $count--;
    }' > out

В этом случае, syswrite вызовы передадут 1M за один раз к базовому write syscall, который становится довольно хорошим. (Я обхожу 0,940 пользователей с с этим.)

Подсказка: удостоверьтесь, что Вы звоните sync между каждым тестом, чтобы не иметь сбрасывание предыдущего выполнения вмешиваются во ввод-вывод текущего выполнения.

Для ссылки я добираюсь на этот раз:

$ time dd if=/dev/zero bs=1024 count=$((1024*384)) of=./out
393216+0 records in
393216+0 records out
402653184 bytes (403 MB) copied, 1.41404 s, 285 MB/s

real    0m1.480s
user    0m0.054s
sys 0m1.410s
9
20.01.2012, 18:47
4 ответа

inotify-инструменты являются простым способом сделать это. Существует несколько примеров на их сайте, который смог бы сделать то, что Вы хотите (см. inotifywatch пример для действительно основного).

6
27.01.2020, 20:05
  • 1
    я в настоящее время изучаю это. Во-первых, я должен скомпилировать источник для ARMv5TE cpu. Это могло бы оказаться достаточно трудным :) –  Andreas 19.01.2012, 19:34

Попытайтесь работать iotop возможно? Я нашел это полезным в прошлом.

6
27.01.2020, 20:05

Другая подсказка: Используйте Systemtap, существует набор тестовых сценариев на сайте systemtap, достаточно полезном для нахождения преступника.

В другом случае в целом,

Если Вы хотите узнать, какой процесс заставил диск вращаться, можно собрать информацию путем установки флага /proc/sys/vm/block_dump. Когда этот флаг установлен, Linux сообщает обо всем чтении с диска и операциях записи, которые происходят, и все dirtyings блока, сделанные в файлы. Это позволяет отладить, почему диск должен вращаться, и увеличить ресурс аккумулятора еще больше. Вывод block_dump записан в вывод ядра, и он может быть получен с помощью "dmesg" или посмотреть средство керна системного журнала для места назначения сообщений отладки. Обычно это должно быть /var/log/debug . Когда Вы используете block_dump, и Ваш уровень входа ядра также включает сообщения отладки ядра, Вы, вероятно, хотите выключить klogd, иначе вывод block_dump будет зарегистрирован, вызывая активность диска, которая обычно не является там.

2
27.01.2020, 20:05

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

So:

# sync
# echo 1 > /proc/sys/vm/block_dump
# dmesg -c | grep '/dev/sda'

sync смывает все отложенные записи на диски, так что вы увидите только новые чтения или записи.
dmesg -c показывает сообщения ядра, и очищает их (иначе вы видите и старые тоже, каждый раз при запуске dmesg). grep фильтрует вывод dmesg для интересующего вас диска. Замените /dev/sda на ваше фактическое устройство.

Обычно я использую что-то подобное для вращения диска, а затем проверяю, когда он снова вращается:

# sync
# hdparm -y /dev/sda
# while true; do hdparm -C /dev/sda ; sleep 600 ; done

Цикл while проверяет состояние активного/завершенного диска каждые 10 минут. Когда вы увидите, что он включился, запустите строку dmesg выше, чтобы увидеть whodunnit.

.
2
27.01.2020, 20:05

Теги

Похожие вопросы