2004 г.
Мониторинг материнских плат в Linux
Виталий Колесник, Комиздат
При решении задачи по организации мониторинга материнской платы
TYAN S2460 Tiger MP оказалось, что одним только файлом справки пакета lm_sensors
не обойтись. Дополнительные знания требовались на каждом шагу. Пусть же они помогут в
аналогичной ситуации еще кому-нибудь
К тому же описание данного процесса подойдет к большинству случаев
по организации мониторинга различных материнских плат в операционной системе Linux.
Эффективная эксплуатация сложных технических комплексов, в частности
компьютерных, невозможна без исчерпывающей и непрерывно поступающей информации об основных
параметрах функционирования системы. Особенно эта проблема актуальна для систем, функционирующих
по схеме 24 x 7 x 365, а также для систем, к которым персонал имеет ограниченный доступ.
В каждом конкретном случае список таких параметров может содержать
сотни позиций. Но практически в любой рабочей станции, сервере, кластере очень важной
является информация о техническом состоянии аппаратуры. Основные характеристики материнских
плат, подлежащие отслеживанию (мониторингу) таковы:
- напряжение питания;
- скорость вращения вентиляторов охладителей;
- температура процессоров;
- температура внутри системного блока.
Производители материнских плат и операционных систем предлагают собственные
решения для мониторинга. Существуют также и программные средства от третьих производителей.
В дистрибутивах Линукс, которые в последнее время нашли широкое распространение
в серверных системах, стандартом де-факто для программ мониторинга материнских плат стал
пакет lm_sensors (http://www.lm-sensors.nu/).
Он поставляется в составе некоторых дистрибутивов Linux и имеет широкие возможности.
Однако, чем сложнее и универсальнее инструмент, тем труднее его освоение.
Настоящий материал призван осветить практические вопросы настройки
пакета lm_sensors для мониторинга материнских плат TYAN S2460 Tiger MP.
К сожалению, в документации на пакет (файл quickstart) не изложены
некоторые тонкие особенности настройки. Попробуем восполнить этот пробел.
Шаг 1
Сначала проверим, установлены ли исходники и/или готовые модули для
мониторинга на компьютере. Готовые модули лежат** в
/lib/modules/(номер_версии_ОС)/kernel/drivers/sensors и
/lib/modules/(номер_версии_ОС)/kernel/drivers/i2c.
В первом каталоге ищем модуль с именем w83781d, во втором - модули i2c-core, i2c-amd756,
i2c-dev, i2c-proc.
Если они есть, значит, модули мониторинга в вашей операционной системе установлены.
Нам понадобятся также исходники.
Шаг 2
Не помешает проверить, подгружены ли упомянутые выше модули при загрузке
операционной системы (может, помимо вас, кто-то еще мониторит уже плату). В консоли (дальше
все действия выполняем в консоли, где необходимо - с правами root'а) надо дать команду:
lsmod
В выводе команды ищем названия модулей:
i2c-core, i2c-amd756, i2c-dev, i2c-proc, w83781d.
Если все они есть - значит, кто-то уже позаботился о мониторинге и вам повезло.
Но предположим, что вам не повезло - ничего не найдено. То есть начинаем
работу на машине, где отсутствуют исходники и готовые модули пакета lm_sensors. Те же,
у кого пакет уже установлен, разобравшись в документации, а также внимательно и творчески
изучив данный документ, смогут без проблем добиться успеха.
Шаг 3
Итак, начнем с получения дистрибутива lm_sensors. Лучше всего загрузить
его с сайта разработчиков (http://secure.netroedge.com/~lm78/download.html),
где он выложен для свободного скачивания. Так мы обеспечим себя последней версией пакета.
Если интернет по какой-либо причине недоступен, то пакет в виде rpm-файла можно будет
найти и в вашем дистрибутиве. Учтите - нужны именно исходники.
Шаг 4
Добытые исходники положим в какой-нибудь каталог в распакованном виде.
Неплохим будет выбор каталога /usr/src/linux.
Шаг 5
Теперь самое интересное: компилируем и устанавливаем пакет lm_sensors.
В каталоге /usr/src/linux/lm_sensors-номер_версии последовательно выполним несколько команд:
make
make install
depmod -a
Шаг 6
Теперь проверим, появился ли в каталоге
/usr/src/linux/lm_sensors-номер_версии/kernel/busses
модуль i2c-amd756.o, дата создания совпадает которого с текущей датой.
Шаг 7
Аналогичнім образом следует проверить наличие "свежего" модуля w83781d.o
в каталоге /usr/src/linux/lm_sensors-номер_версии/chips. Теперь заглянем в файл /etc/ld.so.conf.
Ищем там строку /usr/local/lib. Если такой не находим -добавляем ее туда вручную, после
чего выполняем команду:
ldconfig
Теперь внимание! До этого момента мы только компилировали и устанавливали необходимые
для мониторинга программные компоненты. Часть компонентов, согласно концепции Линукс,
в задаче мониторинга является файлами устройств. Элементам материнской платы - таким как
термодатчики, датчики оборотов вентиляторов, датчики напряжений питания - в пакете lm_sensors
соответствуют файлы виртуальных устройств, располагающиеся в каталоге /proc/sys/dev/sensors.
Самое время заглянуть в указанный каталог.
При заходе в /proc/sys/dev мы не увидим подкаталога sensors. Это и
понятно - его никто еще не создавал, поэтому датчики платы нам недоступны. Следующая команда
как раз и предназначена для создания файлов датчиков платы. Выполните ее:
/usr/src/linux/lm_sensors-номер_версии/prog/mkdev/mkdev.sh
Вывод команды покажет Вам имена создаваемых устройств.
Шаг 8
Итак, необходимые программные файлы откомпилированы, файлы устройств
созданы. Теперь необходима настройка системы. В ее ходе мы обеспечим подгрузку необходимых
модулей, откорректируем файлы инициализации, чтобы все необходимое запускалось при старте
операционной системы; создадим шаблон для вывода на консоль информации о контролируемых
параметрах. Далее кратко и практически без комментариев приводится последовательность
действий по настройке lm_sensors применительно к плате TYAN S2460 Tiger MP.
Шаг 9
В каталоге /usr/src/linux/lm_sensors-номер_версии/lib ищем файл libsensors.so.x.x.x
(например, libsensors.so.1.2.1) и копируем его в /lib. Вместе с этим файлом хранятся две
ссылки на него: libsensors.so и libsensors.so.1 - копируем в /lib и их (если же этих ссылок
нет, то в /lib следует их создать).
Шаг 10
В каталоге /usr/src/linux/lm_sensors-номер_версии/prog/init находим файл lm_sensors.init
и копируем его в каталог /etc/rc.d/init.d под именем lm_sensors.
Шаг 11
В каталоге /usr/src/linux/lm_sensors-номер_версии/prog/init вручную
редактируем файл lm_sensors.sysconfig. В самом его конце оставляем незакомментированными
только строки:
MODULE_1=i2c-amd756
MODULE_2=i2c-dev
MODULE_3=w83781d
Далее копируем этот файл в каталог /etc/sysconfig под именем lm_sensors.
Шаг 12
Из каталога /usr/src/linux/lm_sensors-номер_версии/prog/sensors копируем
в каталог /usr/bin файл с именем sensors. Он должен иметь права на выполнение.
Шаг 13
В файле /etc/modules.conf добавим в конце строку:
alias char-major-89 i2c-dev
Шаг 14
В файле /etc/rc.d/rc в конце добавим приведенные ниже строки (для загрузки
необходимых модулей в процессе старта операционной системы):
modprobe i2c-amd756
modprobe i2c-dev
modprobe w83781d init=0
Шаг 15
В каталоге /usr/src/linux/lm_sensors-номер_версии/kernel/busses найдите файл
i2c-amd756.o, заархивируйте его командой:
gzip i2c-amd756.o.
На выходе должен получиться файл i2c-amd756.o.gz. Полученный файл скопируйте в каталог
/lib/modules/(номер_версии_Линукс) kernel/drivers/i2c.
Шаг 16
В каталоге /usr/src/linux/lm_sensors-номер_версии/kernel/chips найдите
файл w83781d.o и заархивируйте его командой:
gzip w83781d.o
На выходе должен получиться файл w83781d.o.gz. Скопируйте его в каталог
/lib/modules/(номер_версии_Линукс) kernel/drivers/sensors.
Шаг 17
После этого можно последовательно выполнить с консоли команды, описанные в предыдущем
пункте:
modprobe i2c-amd756
modprobe i2c-dev
modprobe w83781d init=0
ВНИМАНИЕ! Последняя команда, запущенная без параметра init=0, намертво
завешивает систему! Поэтому не делайте этого, если на системе в данный момент выполняются
критичные приложения. Иначе придется перезагружаться. Но чтобы избежать зависания, при
плановой перезагрузке не забывайте этот параметр ни при ручной подгрузке модуля, ни в
файле /etc/rc.d/rc.
После выполнения трех указанных команд проверим, что изменилось в системе. Сначала
выполним
lsmod
Должна появиться информация о том, что загружены модули:
i2c-core, i2c-amd756, i2c-dev, i2c-proc, w83781d
Теперь самое время посмотреть в /proc/sys/dev. Там должен появиться
подкаталог sensors, а в нем подкаталог w83782d-i2c-0-2d и файл chips. В файле chips ничего
интересного нет, а вот в w83782d-i2c-0-2d надо бы заглянуть. Там мы увидим достаточно
много файлов, среди которых можно по названиям узнать датчики мониторинга платы. Например,
fan1, fan2, fan3 - датчики вентиляторов; temp1, temp2 - датчики температуры и т.д.
Это файлы виртуальных устройств, которые были созданы нами ранее. Они становятся доступными
при подгрузке соответствующих модулей, что мы и увидели. Под этими же названиями они используются
в файле настройки шаблона вывода информации на консоль.
Шаг 18
Файл настройки шаблона вывода информации на консоль должен находиться
в каталоге /etc/sysconfig и иметь имя sensors.conf. Туда мы его и копируем (с переименованием)
из каталога /usr/src/linux/lm_sensors-номер_версии/etc, где этой файл имеет имя sensors.conf.eg.
Файл написан с учетом всех поддерживаемых микросхем мониторинга. Но
нам так много не нужно. Нам достаточно одной только секции, начинающейся строкой:
chip "w83782d-*" "w83783s-*" "w83627hf-*"
Все, что выше этой строки, вплоть до самых комментариев можно удалить.
Комментарии оставьте - пригодятся. Удалите также остальные секции, начинающиеся со строки
(и вместе с ней):
chip "w83697hf-*"
Вообще-то говоря, удалять лишнее вовсе не обязательно - на работе системы
это никак не отразится. Просто в более коротком файле, где нет ничего лишнего, гораздо
проще будет разобраться при настройке формата вывода на консоль. Комментарии, которые
имеются в начале этого файла, исчерпывающи настолько, что добавить нечего**.
Отметим только, что для правильного отображения температуры процессоров
надо в соответствующих строках sensors.conf указать второй тип термодатчика - то есть
строки с описанием типа термодатчика должны выглядеть так:
set sensor1 2
set sensor2 2
set sensor3 2
Шаг 19
Для удобства получения информации о состоянии системы создадим скрипт
и положим его в каталог /usr/bin. Скрипт перечитывает файл sensors.conf для правильного
отображения информации и запускает команду sensors вывода информации на консоль. Назовем
файл sensor. Его содержание очень простое:
#! /bin/bash
cd /etc/sysconfig
bash /usr/bin/sensors -s -c /etc/sysconfig/sensors.conf
/usr/bin/sensors
Не забываем дать этому файлу права на исполнение. Теперь, если модули
загружены, команда sensor с консоли выводит информацию о состоянии датчиков материнской
платы. Как поступить с этой информацией дальше: отправить по почте, на SMS сисадмину или
же записать в лог - каждый решит сам.
Дополнение
Если необходимо организовать мониторинг нескольких материнских плат
S2460 Tiger MP (например, в кластере), то не обязательно проводить все указанные
операции, включая компиляцию на всех компьютерах. Достаточно проделать это один раз, и
использовать потом полученные файлы на других компьютерах. Для этого нужно только поместить
эти файлы в соответствующие каталоги.
Изложенный подход с успехом можно использовать и для организации мониторинга
других материнских плат (в том числе - плат других производителей). Для этого необходимо
учесть отличия в исполнении конкретной материнской платы, например: что за чипсет используется,
какая внутренняя шина, с которой пакетом lm_sensors считываются данные, каков внешний
чип (в рассмотренном случае это были, соответственно, AMD 760MP, I2C и W83781d). Поддерживаемые
чипсеты, шины и внешние чипы приведены в файле /lm_sensors/etc/sensors.conf.eg дистрибутива
lm_sensors.
Автор выражает особую благодарность разработчикам пакета lm_sensors,
всем, кто участвовал в его отладке и поделился информацией об его использовании, а также
производителям платы TYAN S2460 Tiger MP, выпустившим отличное "железо".