[HD-HTGL] LED をコントロールする

2007.01.01



Terastation のディスクステータスの LED は、残り 10% を切ると赤くなります。しかし、400GB x 4 で raid5 構成だと、 10% でも 110GB 強になります。つまり、あと 100GB 余っていても残容量の警告で LED が赤く点きます。 シャットダウンしても点きっぱなしでうるさいです。
これを何とかしたいと想います。

まず、LED をコントロールするコマンドを探しました。
Linkstation や Terastation の web インターフェースは、 /www 以下にあります。この中を探しました。 Linkstation では直接 /dev/ttyS1(AVR) へコマンドを送り込んでいます。
# grep 90 cgi-bin/* cgi-bin/*/*
いくつかのファイルが見つかりましたが、 単純に空き容量を計算してチェックしているだけでした。失敗。

次に何かデーモンがやっているのではないかと思い、 実行中のプロセスを探しました。
# ps -ax
怪しいデーモンがありました。
385 ? S 0:00 /usr/sbin/diskmon
diskmon、ディスクモニターでしょう。このコマンドを早速調べます。
# strings /usr/sbin/diskmon
コマンド実行の結果:
   :
miconapl -a leddisk %d green %s
miconapl -a leddisk %d red %s
miconapl -a leddiag off
miconapl -a leddiag err %d
   :
miconapl!!
以前インターネットで見たことある!で、再度検索してみましたが、 HD-HTGL の miconapl の解説は見つかりませんでした。 古いし、あまりユーザーもいなさそう。

自前で解析しました。その結果です。

miconapl の LED コントロール
LED機能パラメータ
POWER LED 点灯miconapl -a ledpower green on
消灯miconapl -a ledpower green off
点滅miconapl -a ledpower green blink
DIAG LED 点灯miconapl -a leddiag on
消灯miconapl -a leddiag off
点滅miconapl -a leddiag blink
LINK/ACT LED 点灯miconapl -a ledenet 100 on
消灯miconapl -a ledenet 100 off
点滅miconapl -a ledenet 100 blink
点灯miconapl -a ledenet 1000 on
消灯miconapl -a ledenet 1000 off
点滅miconapl -a ledenet 1000 blink
STATUS/FULL LED
([n] は 1 〜 4 で Disk 番号)
点灯miconapl -a leddisk [n] green on
消灯miconapl -a leddisk [n] green off
点滅miconapl -a leddisk [n] green blink
点灯miconapl -a leddisk [n] red on
消灯miconapl -a leddisk [n] red off
点滅miconapl -a leddisk [n] red blink

これで LED を変更できるようになりましたが、常に diskmon がディスクを監視していて、手動で変更してもすぐに元に戻ってしまいます。 試しに次の内容のシェルスクリプトを作成し、miconapl と入れ替えてみました。
#!/bin/bash
echo `date` " miconapl " $* >> /tmp/miconapl.log
作成されたmiconpal.log の内容は
Mon Jan 1 11:30:57 JST 2007 miconapl -a leddisk 1 green off
Mon Jan 1 11:30:57 JST 2007 miconapl -a leddisk 1 red on
Mon Jan 1 11:30:57 JST 2007 miconapl -a leddisk 2 green off
Mon Jan 1 11:30:57 JST 2007 miconapl -a leddisk 2 red on
Mon Jan 1 11:30:57 JST 2007 miconapl -a leddisk 3 green off
Mon Jan 1 11:30:57 JST 2007 miconapl -a leddisk 3 red on
Mon Jan 1 11:30:58 JST 2007 miconapl -a leddisk 4 green off
Mon Jan 1 11:30:58 JST 2007 miconapl -a leddisk 4 red on
Mon Jan 1 11:31:03 JST 2007 miconapl -a leddisk 1 green off
Mon Jan 1 11:31:03 JST 2007 miconapl -a leddisk 1 red on
Mon Jan 1 11:31:03 JST 2007 miconapl -a leddisk 2 green off
Mon Jan 1 11:31:03 JST 2007 miconapl -a leddisk 2 red on
Mon Jan 1 11:31:03 JST 2007 miconapl -a leddisk 3 green off
Mon Jan 1 11:31:03 JST 2007 miconapl -a leddisk 3 red on
Mon Jan 1 11:31:03 JST 2007 miconapl -a leddisk 4 green off
Mon Jan 1 11:31:03 JST 2007 miconapl -a leddisk 4 red on
Mon Jan 1 11:31:09 JST 2007 miconapl -a leddisk 1 green off
Mon Jan 1 11:31:09 JST 2007 miconapl -a leddisk 1 red on
Mon Jan 1 11:31:09 JST 2007 miconapl -a leddisk 2 green off
Mon Jan 1 11:31:09 JST 2007 miconapl -a leddisk 2 red on
Mon Jan 1 11:31:09 JST 2007 miconapl -a leddisk 3 green off
Mon Jan 1 11:31:09 JST 2007 miconapl -a leddisk 3 red on
Mon Jan 1 11:31:09 JST 2007 miconapl -a leddisk 4 green off
なんと約 5 秒置きに LED を赤くしています。まあ、 できるだけ短い間隔でディスクを監視しているんでしょうが、 これ、負荷にならないのかなぁ。

負荷がかかっているにしろ、diskmon をとめるわけにはいきません。 本当にディスク障害が起きたときにわからなくなります。
空き容量は、diskmon のパラメータで渡されているわけでもなく、 設定ファイルがある訳でもないので、 プログラムに直接埋め込まれているようです。
diskmon のソースでもあれば何とかなるのですが、探せませんでした。

対処法を変えましょう。一番気になっているのが、 シャットダウンしても容量警告の LED が光っているのことなので、 シャットダウンして diskmon がいなくなったときに、 LED をとめるようにします。

まず、ディスクに障害がないときには、 赤い LED をとめるようなシェルスクリプト(/etc/init.d/stopled.sh) を作成します。
#! /bin/bash
# Stop Disk STATUS/FULL red LED
# by sirius 2007/01/01
#
LED="red"
ONOFF="off"

# Check Failed Device on md0
FAILED_DEV=`mdadm -D /dev/md0|grep Failed |awk '{print $4}'`
if [ $FAILED_DEV -ne 0 ]; then
    exit
fi

# Check Failed Device on md1
FAILED_DEV=`mdadm -D /dev/md1|grep Failed |awk '{print $4}'`
if [ $FAILED_DEV -ne 0 ]; then
    exit
fi

# Stop Disk Status LED
/usr/sbin/miconapl -a leddisk 1 $LED $ONOFF
/usr/sbin/miconapl -a leddisk 2 $LED $ONOFF
/usr/sbin/miconapl -a leddisk 3 $LED $ONOFF
/usr/sbin/miconapl -a leddisk 4 $LED $ONOFF
もし、md2 も使っているなら md2 のチェックも必要でしょう。
次に、このシェルスクリプトが、シャットダウン時に実行されるようにします。
# ln -s /etc/init.d/stopled.sh /etc/rc.d/rc0.d/K19stopled.sh

これでシャットダウンすると赤い LED が消灯するようになります。
なお、はじめ、/etc/init.d/diskmon.sh の中で LED を消灯させようとしましたが、再起動すると修正内容が元に戻っていました。 どこかで何かやっていそう。


<< 戻る >>