[시스템] lm_sensors 를 통한 하드웨어 점검
lm_sensors 는 CPU 온도, 마더보드 온도, 팬 상태, 전압등의 시스템의 상황을 실시간으로 알수
있는 유틸리티입니다. (오버클럭커들이나, 열악한 환경의 서버등에서는 아주 유용하겠지요?)
저는 lm_sensors를 주로 cpu, 비디오 카드의 오버클럭 후에 온도등 하드웨어 상태를 보기 위해
사용했으며, 모니터링은 소프트웨어 뿐만 아니라 액정 판넬, LED등의 사용등 하드웨어 해킹을 즐기는
분들에게도 유용합니다.
의외로 이 패키지에 대해 모르는 분들이 많은것 같아 소개하는 수준에서 간단하게 썼습니다.
– 지원하는 센서 디바이스
가지고 있는 하드웨어가 지원되는지 일단 http://www2.lm-sensors.nu/~lm78/support.html에서
확인해 봅니다. 자신의 하드웨어 디바이스를 알지 못한다면 패키지 설치후 인식 유틸리티를 사용할수도 있습니다.
제가 테스트해본 마더보드와 칩셋은 다음과 같으며, 커널 2.2.x, 2.4.x 에서 모두 잘 작동했습니다.
기가 바이트 6BXD (w83781), Abit BH6 (LM79), Abit KT7 (via686a), Nforce2
– 소스 구하기
필요한 패키지는 다음 두가지이며, 모두 http://www2.lm-sensors.nu/~lm78/download.html
에서 구하실수 있습니다.
kernel v2.5, v2.6에는 이미 i2c 드라이버가 포함되어 있으므로 lm_sensors만 받으신 후
make user; make user_install 해서 라이브러리와 유틸리티만 컴파일/설치 하시면 됩니다.
또한, sysfs를 사용하므로, /sys 디렉토리를 만든후 fstab에 “sysfs /sys sysfs defaults 0 0″를 추가합니다.
참고 : http://bbs.kldp.org/viewtopic.php?p=127786
i2c
lm_sensors
– 설치 하기
설치 방법은 커널을 패치하는 방법과 독립적인 모듈 로딩방식이 있는데 저는 커널 소스를 건드리고
싶진 않아서 후자를 택했습니다.
먼저 i2c 를 풀어 make ; make install 해주면 필요한 모듈과 헤더파일들이 인스톨 됩니다.
역시 lm_sensors 도 make ; make install 해주면 커널 모듈들이 인스톨 됩니다.
이때 커널 모듈들은 모두 /lib/modules/2.x.x/misc/ 에 인스톨 되며 모듈 의존성 검사를 위해
depmod -a 를 일단 실행해 줍니다.
이 센서 모듈들이 제대로 작동하기 위한 디바이스 파일을 만들어 주기 위해 lm_sensors 소스 디렉토리의
prog/mkdev/mkdev.sh 스크립트를 실행합니다.
하드웨어에 맞는 모듈을 알아내기 위해 역시 lm_sensors 소스 디렉토리의 prog/detect/sensors-detect
를 실행하면 센서 하드웨어를 인식하여 다음과 같이 필요한 모듈의 목록을 표시해줍니다.
다음은 제 박스에서의 결과로 마더보드는 abit KT7 입니다.
#—-cut here—-
# I2C adapter drivers
modprobe i2c-isa
# I2C chip drivers
modprobe via686a
#—-cut here—-
To make the sensors modules behave correctly, add these lines to either
/etc/modules.conf or /etc/conf.modules:
#—-cut here—-
# I2C module options
alias char-major-89 i2c-dev
#—-cut here—-
위의 결과를 참고해 필요한 모듈과 센서 core 모듈등이 부팅될때 로딩되도록 /etc/rc.d/rc.local 에 넣어줍니다.
modprobe i2c-core
modprobe i2c-isa
modprobe i2c-proc.o
modprobe via686a
lm_sensors 2.6.0 이후부터는 sensors.o 모듈이 없어지고, i2c-proc.o 로 바뀌었습니다.
alias char-major-89 i2c-dev 는 /etc/modules.conf 에 추가합니다.
이제 정상적으로 작동하는지 테스트해 보려면 필요한 모듈을 모두 로드한후에 prog/sensors/sensors
를 실행해봅니다.
이것의 설정 파일은 소스 트리의 etc/sensors.conf.eg 인데 이것을 /etc/sensors.conf 로 복사해
주면 되며, 내용 그대로 사용하여도 대부분의 칩셋에서 문제없이 결과값을 보여줍니다.
[ home@root ]./sensors
via686a-isa-6000
Adapter: ISA adapter
Algorithm: ISA algorithm
CPU core: +1.81 V (min = +1.79 V, max = +2.18 V)
I/O: +3.30 V (min = +2.95 V, max = +3.62 V)
+5V: +4.94 V (min = +4.47 V, max = +5.07 V)
+12V: +12.10 V (min = +11.03 V, max = +12.16 V)
CPU Fan: 6136 RPM (min = 3000 RPM, div = 2)
P/S Fan: 0 RPM (min = 3000 RPM, div = 2)
SYS Temp: +27.7 C (limit = +60 C, hysteresis = +50 C)
CPU Temp: +38.8 C (limit = +60 C, hysteresis = +50 C)
현재 제 시스템은 듀론 800을 1G로 오버한것인데 사실 40도가 넘으면 좀 불안해지기 시작합니다.
( need water cooling 🙂
– 응용 프로그램들
lm_sensors 패키지에는 sensors 이외에 몇가지 유용한 것들이 들어있습니다. prog/daemon/healthd.sh 는
sensors가 sensors.conf 에 설정된 값(최대 온도, 최저 팬 rpm등)을 참고해 ALARM 메세지를
보여주는 것을 이용한 간단한 쉘 스크립트입니다.
또한 sensord 는 주기적으로 하드웨어 센서 정보를 읽어서 로그를 남겨주는 데몬입니다.
다음 스크립트는 주기적으로 sensors를 실행시켜 시스템이 비정상일때 시스템을
shutdown 시키는 간단한 데몬입니다.
#!/bin/bash
PATH=”/bin:/usr/bin:/usr/local/bin:${PATH}”
ADMIN_EMAIL=”root@localhost”
while true
do
sleep 15
if [ -n “`sensors | grep ALARM`” ]
then
sensors | mail -s “**** Hardware Health Warning ****” $ADMIN_EMAIL
shutdown -h now
sleep 600
fi
done