вторник, 6 мая 2008 г.

Мониторинг температуры жесткого диска


Сегодня на работе сгорел кулер на жестком диске. Ничего страшного, не считая вони горелого пластика, однако это событие натолкнуло меня на мысль найти утилитку для мониторинга температуры жесткого диска под линукс. Под виндой для таких случаев у меня лежит hddlife-pro. Долго гуглить не пришлось, уже на первой странице поиска нашлись достойные претенденты.

Вот тут описываются несколько полезных утилит, которые отлично справляются с поставленной задачей, также рекомендую прочитать предыдущую статью с этого же блога, в которой рассказывается о мониторинге состояния системы в целом. Однако все предлагаемые решения основываются на выводе информации в виде апплетов на панели. Меня такое положение вещей однозначно не устраивает, я поклонник conky, и поэтому мне важнее возможности получения данных через консоль, для дальнейшего форматирования и использования в упомянутом системном мониторе. С поставленными задачами лучше всего справляется hddtemp, её и будем использовать для ритуальных обрядов извлечения данных о температуре жесткого диска.

Сперва займемся установкой, тут все просто:
$sudo apt-get install hddtemp
В ходе установки будет предложено запустить hddtemp на локальной машине в виде демона, на что я ответил однозначным согласием. Почему - будет сказано ниже. После установки и автоматического запуска демона можно приступть к тестированию. Набираем в терминале:
$sudo hddtemp /dev/sda - где необходимо заменить путем к своему жесткому диску и, если все прошло успешно, наблюдаем что-то подобное:
/dev/sda: ST3160827AS: 35°C
На этом этапе остановимся по-подробнее. С первого раза у меня встала версия утилиты 0.3-beta15-33, и на запрос, вместо температуры, упорно утверждала что на жестком диске нет датчика. Решается эта проблема двумя способами - добавляем параметр -w при запуске утилитки, или ставим боле позднюю версию, в моем случае помогла 0.3-beta15-36. Другая возможная проблема - отключенная в биосе функция SMART. То есть если вместо температуры мы видим сообщение о острой недостаче SMART(а) - идем в биос и ищем причину там.

Как видно, для запуска hddtemp требуются права суперпользователя, что создает определенный проблемы при использовании утилиты вместе с conky. Решить задачу можно двумя способами. Первое что пришло мне в голову (еще до установки, во время "курения манов") - написать простенький скрипт, который будет вызывать hddtemp и перенаправлять полученные данные во временный файл, а conky уже из этого файла будет забирать показатели температуры. Все что остается - закинуть файл в crontab и поставить на регулярное выполнение, скажем раз в 5 минут. Второе решение - использовать запущенный демон. В этом случае мы используем netcat для получения данных, обращаясь к проту локальной машины, на котором запущен демон hddtemp. Для проверки наберите в терминале $ netcat localhost 7634. Если железный друг радостно сообщил что-то вроде |/dev/sda|ST3160827AS|35|C|, значит испытания прошли успешно. В таком случае, как советуют в этом руководстве, в файл ~/.conkyrc достаточно добавить строку Hard Drive Temp: ${execi 300 nc localhost 7634 | cut -c23-24 ;} C. Однако для правильной работы приходится вичислять номера символов значений температуры (cut -c23-24), которорые отличаются в зависимости от используемого диска. Мы же будем умнее и унифицируем предложенное решение - ведь в мире линукса есть прекрастный скриптовый язык для работы с текстовыми строками - awk. Часть cut -c23-24 мы заменим на awk -F\| '{print $4}': Hard Drive Temp: ${execi 300 nc localhost 7634 | awk -F\| '{print $3}' ;} C

Вот как выглядит результат у меня:

conky

Комментариев нет: