Supermicroのマザーボードでファンの回転数をIPMI経由で制御するには、以下のコマンドを投げつければよい。
# 制御モードをFullにする ipmitool raw 0x30 0x45 0x01 0x01 # "system"ゾーンの回転数を37.5%にする ipmitool raw 0x30 0x70 0x66 0x01 0x00 0x24 # "peripheral"ゾーンの回転数を25%にする ipmitool raw 0x30 0x70 0x66 0x01 0x01 0x16
まず、ファンの制御モードを“Full”にする必要がある。他のモード(Optimalとか)だと、その設定の方が優先されるとのこと。その後、ゾーン毎に回転数を設定してやる。
2~3つ目のipmitoolで送っているバイト列のうち、最後がファンのデューティー比、後ろから2番目がゾーン番号を表す。ゾーンのsystemとperipheralは、マザボのFAN用コネクタFan1系列とFanA系列に対応していると思われるが確認したわけではないので間違ってるかも。
デューティー比は0x00~0x64の64ステップとされている。でも、16進数なんだから0~100なんじゃないの?という気が…ま、ともかく0x00が最小で0x64がフル回転だそうなので、こまけぇこたぁいいんだよ!
実際のところ、Optimalで割とイイ感じに制御してくれるんだけど、ファンによってはデューティー比低すぎて止まっちゃうことがあるんですよね。で、ファン停止エラーが検出される→フル運転→エラーが止まる→デューティー比下がる→ファンが止まる→…の無限ループになるという。
この場合ipmitool sensor thresh
で最低回転数のスレッショルドを調整するのが定石。うちでは設定値が悪いのか、上手く動いた試しがない。
ファン制御やスレッショルドを弄ってにっちもさっちも行かなくなったら、ipmitool mc reset cold
でBMCをリセットしてやればおk。