高原の里

> パソコン
> > マザーボードの温度監視

lm_sensorsとMRTGによるマザーボードの温度監視

何ができるか

マザーボードの温度監視ができないかと考えていました。Linuxで動くBP-6の温度監視ということで、googleを使いあれこれと探したところ、lm_sensorsというプロジェクトがあるそうです。

  http://www2.lm-sensors.nu/~lm78/index.html

早速、インストールし、SNMPにて監視できるようにして、MRTGを用いてマザーボードの温度変化のグラフを自動生成するようにしました。これで出先からマザーボードの温度がわかります。

すでに、SNMPとMRTGの設定は済んでいることを仮定しています。まだの人は、ITMEDIAの「エンタープライズ ヘルプデスク: Linux How-To - 第6回:SNMPによるネットワークモニタリング」

  http://www.itmedia.co.jp/help/howto/linux/0007master/06/index.html

などを参考にして、ネットワークカードのトラヒックを監視できるようにしておきましょう

なお、お約束ですが、本インストールは自己責任でお願いします。

インストール

  1. 上記アドレスのダウンロードページより、i2c-2.8.1.tar.gz と lm_sensors-2.8.1.tar.gz (新しいものがあればそちらを)をダウンロードします。
  2. /usr/src/linuxにソースツリーを用意します。

    [Debian使いの方へ] 
    カーネルをコンパイルし直さなくてもかまいません。rootになり、以下の(1)-(4)の作業を行います。

    (1) dselectを用いて、カーネルに対応する kernel-header と kernel-source をダウンロードします。
    (2) kernerl-sourceを展開するため、/usr/srcディレクトリーに移り、bzip2 [カーネルソース圧縮ファイル] | tar xvf - 実行します。
    (3) /usr/src/linux 以下にソースツリーが見えるようにするため、ln -s [カーネルソース展開ディレクトリー] linux 実行します。
    (4) 次のコマンドを実行して、カーネルコンパイル時の条件がソースツリーに残るようにします。
      cd linux
      mv include include.old
      ln -s ../[カーネルヘッダーディレクトリー]/include .
      ln -s ../[カーネルヘッダーディレクトリー]/.config .

    これで、i2cやlm_sensorをだませます...。私はwoodyの2.4.18-1-686-smpカーネルでうまくいきました。
  3. tar xvfz i2c-2.8.1.tar.gz としてファイルを展開し、I2Cのディレクトリーに移り、makeを実行します。一時的にrootになり、make installを実行します。
  4. 次に、tar xvfz lm_sensors-2.8.1.tar.gz としてファイルを展開して、lm_sensorsのディレクトリーに移り、makeを実行します。一時的にrootになり、make installを実行し、depmod -aを実行します。私の環境では、depmod実行時に「Unresolved symbols in ... matroxfb_maven.o」というエラーが出ますが、make実行時のコメントにあるように、このエラーは無視してかまいません。
  5. /etc/ld.so.conf に /usr/local/lib を追加して、ldconfigを実行します。
  6. prog/mkdev/mkdev.shを実行します。/devの下に関係デバイスファイル(/dev/i2c-0, /dev/i2c-1, ..., /dev/i2c-31)が作成されます。

    [Debian使いの方へ]
    ここで、mkdir /etc/sysconfigとしてディレクトリーをつくっておきます。
  7. prog/detect/sensors-detectを実行します。たくさん質問されますが、規定値で大丈夫です。最後に次にようなメッセージが表示されます。最後の、/etc/modules.confに追加するものはメモしておきましょう。
    To make the sensors modules behave correctly, add these lines to
    /etc/modules.conf:
    
    #----cut here----
    # I2C module options
    alias char-major-89 i2c-dev
    #----cut here----
    
    To load everything that is needed, add this to some /etc/rc* file:
    
    #----cut here----
    # I2C adapter drivers
    modprobe i2c-isa
    # I2C chip drivers
    modprobe w83781d
    # sleep 2 # optional
    /usr/local/bin/sensors -s # recommended
    #----cut here----
  8. /etc/modules.confに先のモジュールの記述(alias char-major-89...)を追加します。

    [Debian使いの方へ]
    システムがこのファイルを管理していますので、次のようにします。/etc/modutils/lm_sensorsというファイルを作成して、この部分を書きます。その後、update-modulesを実行します。前述の「*** Unresolved symbols...」が出ても気にしてはいけません。
  9. prog/init/lm_sensors.init を /etc/rc.d/init.d/lm_sensorsにコピーして、chkconfigで起動可能にします。

    [Debian使いの方へ]
    prog/init/lm_sensors.init を /etc/init.d/lm_sensorsにコピーして、update-rc.d lm_sensors defaults を実行します。
  10. ここでsensorsを実行すれば、いろいろな情報が得られるはずです。うまくいかなければ、再起動してみてください。このとき、温度を示すセンサー名を記録しておきます。私の使用しているBP-6では、w83782d-isa-0290でした。sensors w83782d-isa-0290 とすれば、次のような情報が得られます。温度の部分は、℃の丸の部分が文字化けして「庵」となっています。
    w83782d-isa-0290
    Adapter: ISA adapter
    Algorithm: ISA algorithm
    VCore 1:   +2.04 V  (min =  +4.08 V, max =  +4.08 V)
    VCore 2:   +1.52 V  (min =  +4.08 V, max =  +4.08 V)
    +3.3V:     +3.37 V  (min =  +2.97 V, max =  +3.63 V)
    +5V:       +5.11 V  (min =  +4.50 V, max =  +5.48 V)
    +12V:     +12.20 V  (min = +10.79 V, max = +13.11 V)
    -12V:     -11.98 V  (min = -13.21 V, max = -10.90 V)
    -5V:       -5.17 V  (min =  -5.51 V, max =  -4.51 V)
    V5SB:      +5.04 V  (min =  +4.50 V, max =  +5.48 V)
    VBat:      +2.03 V  (min =  +2.70 V, max =  +3.29 V)
    fan1:        0 RPM  (min = 3000 RPM, div = 2)
    fan2:        0 RPM  (min = 3000 RPM, div = 2)
    fan3:        0 RPM  (min = 3000 RPM, div = 2)
    temp1:       +39庵  (limit =  +60庵)                       sensor = thermistor
    
    temp2:     +35.5庵  (limit =  +60庵, hysteresis =  +50庵) sensor = thermistor
    
    temp3:     +45.0庵  (limit =  +60庵, hysteresis =  +50庵) sensor = thermistor
    
    vid:      +2.000 V
    alarms:
    beep_enable:
              Sound alarm disabled
  11. ここまでくれば、後はSNMPやMRTGにうまく読み込ませるだけです。上述のsensorコマンド実行例から、温度を読み取るためには、sensorコマンド出力の16行目から18行目までを切り出せばよいことがわかります。そこで、/usr/local/bin/sensor4mrtgというファイルを作成して、次の内容を書き込み、chmod 755 sensor4mrtg として実行可能にします。
            /usr/local/bin/sensors w83782d-isa-0290 | \
            /usr/bin/awk '{if ((16 <= NR ) && (NR <= 18)) print $2}' | \
            /bin/sed -e 's/+//' -e 's/[^0-9+\.].*//'
  12. 次に、/etc/snmp/snmpd.confに次の内容を追加します。その後、snmpdにHUPのシグナルを送ります(kill -HUP [snmpdのプロセス番号])。
    exec .1.3.6.1.4.1.2021.53 sensors /usr/local/bin/sensor4mrtg
  13. /etc/mrtg.cfgに次の内容を追加します。下記の例では、コミュニティ名をpublic、ホスト名をhostとしています。環境に合わせて修正してください。
    Target[temp-cpu]: 1.3.6.1.4.1.2021.53.101.1&1.3.6.1.4.1.2021.53.101.2:public@host
    MaxBytes[temp-cpu]: 80
    Title[temp-cpu]: CPU Temperture (Host)
    PageTop[temp-cpu]: <H1>CPU Temperture (Host)</H1>
    Options[temp-cpu]: gauge, absolute
    YLegend[temp-cpu]: Temperature [C]
    ShortLegend[temp-cpu]: C
    Legend1[temp-cpu]: CPU1
    Legend2[temp-cpu]: CPU2
    LegendI[temp-cpu]: CPU1
    LegendO[temp-cpu]: CPU2
    
    Target[temp-sys]: 1.3.6.1.4.1.2021.53.101.3&1.3.6.1.4.1.2021.53.101.3:public@host
    MaxBytes[temp-sys]: 80
    Title[temp-sys]: System Temperture (Host)
    PageTop[temp-sys]: <H1>System Temperture (Host)</H1>
    Options[temp-sys]: gauge, absolute
    YLegend[temp-sys]: Temperature [C]
    ShortLegend[temp-sys]: C
    Legend1[temp-sys]: System
    Legend2[temp-sys]: System
    LegendI[temp-sys]: System
    LegendO[temp-sys]: System
  14. ウェブの表示ディレクトリーに移り、indexmaker /etc/mrtg.cfg > index.html を実行します。そして、ブラウザーにはCPU温度と、システム温度が現れるはずです。お疲れ様でした。

冷却ファンの効果

先日のパソコンケース内の温度上昇対策のため、秋葉原でファンを購入しました。通常タイプのものです。2000円くらいでした。あまり期待していなかったのですが、ケース内温度が10度くらい下がります。現在50度くらいです。ちなみに、ケースを外しても、同じ50度くらいに下がりました。

冷却ファンの効果。日曜日に取り付けた。シャーシー内温度が10度近く下がった。


高原の里 - パソコンの部屋 - lm_sensorsとMRTGによるマザーボードの温度監視