Supermicro サーバーのファン回転数を Python で自動制御!smfc 徹底解説
bash ファイル名.sh を実行してください(中身を一度確認してから実行すると安心です)。
(macOS / Linux 環境が必要) Supermicro サーバーのファン回転数を Python で自動制御!smfc 徹底解説
ひとことでいうと
smfc(Supermicro Fan Control)は、Supermicro 製マザーボードを搭載したサーバーのファン回転数を自動で調整してくれる Python 製のツールです。CPU・HDD・NVMe・GPU の温度をリアルタイムで監視し、あらかじめ設定した温度とファン速度の対応表(カーブ)に従って、ファンの速さを動的に変えてくれます。「うるさいのは嫌だけど、冷却もしっかりしたい」という矛盾を解消するために作られており、自宅サーバーや NAS(ネットワーク接続ストレージ)の静音化に効果的です。GitHub でオープンソース(MIT ライセンス)として公開されており、Python 3.10〜3.14 に対応、2026 年現在も活発にメンテナンスされています。
こんな人におすすめ
1. 自宅 NAS・ホームサーバーを静かに運用したい方
Supermicro X10〜X13 世代のマザーボードで HDD アレイ(複数のディスクをまとめて管理する構成)を運用している方に特に向いています。標準の IPMI 自動制御では「ファンがうるさすぎる」または「逆に冷却が足りない」と感じているケースに最適です。ディスクの温度に連動して静かに、かつ安全に冷却を行えます。
2. Proxmox や TrueNAS などの仮想環境を管理している方
仮想マシン(VM)に HDD を直接渡している構成(PCI パススルー)でも利用できます。remote_parameters= というオプションを使えば、ホスト OS と仮想マシンが分離していても smfc がファン制御を担い続けます。複雑なサーバー構成でも柔軟に対応できます。
3. GPU サーバー・AI 推論機を運用しているエンジニア
Nvidia GPU(nvidia-smi というツール経由)または AMD GPU(rocm-smi 経由)の温度を読み取り、GPU 専用の IPMI ゾーン(ファンのグループ)のファンを独立して制御できます。深夜に AI の推論バッチを回すなど、負荷の波が大きい環境で特に効果を発揮します。
インストール・使い方
smfc にはいくつかのインストール方法があります。Debian 系 Linux(Ubuntu など)では DEB パッケージが最も簡単です。ここでは手順をステップごとに説明します。
ターミナルとは: 文字を入力してパソコンに命令を送る画面のことです。下記のコマンドはすべてコピー&ペーストして使えます。
Step 1: 必要なパッケージを確認・インストールする
# ipmitool と Python 3.10 以上が必要です
apt install ipmitool python3
# SATA ディスクの温度を読むためのカーネルモジュールを読み込みます
modprobe coretemp # Intel CPU の場合
modprobe k10temp # AMD CPU の場合
modprobe drivetemp # SATA HDD/SSD の場合(Linux カーネル 5.6 以上が必要)
ipmitool はサーバーのハードウェア管理インターフェース(IPMI)を操作するためのコマンドラインツールです。modprobe は Linux のカーネルモジュール(機能の追加ブロック)を読み込む命令です。
Step 2: DEB パッケージでインストールする(Debian/Ubuntu 向け)
curl -fsSL https://petersulyok.github.io/smfc-deb/smfc-repo.gpg \
| sudo gpg --dearmor -o /etc/apt/keyrings/smfc-repo.gpg
echo "deb [signed-by=/etc/apt/keyrings/smfc-repo.gpg] https://petersulyok.github.io/smfc-deb stable main" \
| sudo tee /etc/apt/sources.list.d/smfc.list
sudo apt update && sudo apt install smfc
公式のリポジトリ(ソフトウェアの配布サーバー)を登録して、apt(Ubuntu のパッケージ管理ツール)経由でインストールする手順です。署名検証も含まれており、安全にインストールできます。
Step 3: Docker で実行する(任意)
# docker/docker-compose.yaml を参照して設定後
docker compose up -d
Docker(アプリをコンテナと呼ばれる箱に閉じ込めて動かす仕組み)を使う方法もあります。リポジトリには Alpine Linux 向けの軽量イメージと、GPU(nvidia / amd)対応の専用イメージが別々に用意されています。ハードウェアへのアクセス権限が必要なため、docker-compose.yaml に適切な設定が必要です。
Step 4: 設定ファイルを編集する
インストール後に /etc/smfc/smfc.conf を開いて、自分の環境に合わせて編集します。最低限 [CPU] セクションを以下のように設定することで動作が始まります。
[CPU]
enabled=1
ipmi_zone=0
min_temp=30.0
max_temp=60.0
min_level=35
max_level=100
steps=6
この設定は「CPU が 30°C のとき最低 35%、60°C のとき最大 100%、6 段階のステップで変化させる」という意味です。ご自身のサーバーとファンの特性に合わせて数値を調整してください。
Step 5: サービスを起動して確認する
systemctl daemon-reload
systemctl start smfc.service
systemctl status smfc.service
# テスト実行(画面にデバッグログを表示する)
smfc -o 0 -l 3
systemctl は Linux のサービス(バックグラウンドで動くプログラム)を管理するコマンドです。smfc -o 0 -l 3 を実行するとデバッグログが画面に出力され、実際に温度やファンレベルが正しく読み取られているかを確認できます。
動かしてみた
Docker 環境(Python 3.12.13)でリポジトリのファイル構成と依存関係を確認しました。以下のようにプロジェクトの主要ファイルが揃っており、ローカルでのビルドにも対応した整備された構成です。
./docker/docker-compose.yaml
./docker/Dockerfile-alpine
./docker/Dockerfile-gpu-nvidia
./bin/install.sh
./bin/create_python_env.sh
./pyproject.toml
./uv.lock
pyproject.toml と uv.lock(依存関係を固定するためのファイル)が揃っており、uv sync && uv build というコマンドでローカルビルドが可能な構成になっています。また bin/install.sh スクリプトが用意されており、GitHub から直接インストールするワンライナーも動作します。
Docker イメージは用途ごとに分かれており、軽量な Alpine Linux 向けと GPU(Nvidia/AMD)対応のものが選べます。pip(Python のパッケージインストーラー)によるインストールも問題なく完了しており、仮想環境(venv や uv)経由でのクリーンなインストールが推奨されています。
ブラウザで試す(デモ)
smfc の核心となる「温度 → ファンレベルへの変換アルゴリズム」をブラウザ上でシミュレーションできるデモが用意されています。実際の IPMI ハードウェアがなくても、制御パラメータ(min_temp・max_temp・min_level・max_level・steps)を変えながら、どのファンレベルが出力されるかをインタラクティブに確認できます。多区間の折れ線カーブを表す control_function= オプションも試すことができ、設定のイメージをつかむのに役立ちます。
実践のコツ:はじめの一歩
設定の中で最も躓きやすいのは、IPMI センサーのしきい値(Lower Critical / Upper Critical)とファンレベル(min_level / max_level)の整合性です。以下のポイントを押さえておくと、スムーズに動かせます。
- ファンの RPM 範囲を事前に確認する: メーカーサイトや ipmitool でファンの実際の回転数範囲を調べ、
ipmitool sensor thresh FAN1 lower 0 100 200などのコマンドでしきい値を先に設定してから smfc を起動するのが定石です。 - ファン速度が突然 100% になったら: IPMI のアサーションイベント(センサーアラーム)が原因のことが多いです。
ipmitool sel listでイベントログを確認し、問題のあるファンのしきい値を調整しましょう。 sensitivity=パラメータで静音化: この値を大きめ(例: 5.0)に設定すると、ちょっとした温度変動ではファン速度が変わりにくくなります。静音性を重視するなら最初に試す価値があります。- 多区間制御関数で細かいカーブを作る:
control_function=30-35, 50-55, 60-90, 65-100のように記述すると、30°C で 35%・60°C で 90%・65°C 以上で 100% という細かい折れ線カーブが実現できます。低温時は極限まで静音に、高温時だけ積極冷却するという理想の制御が可能です。 - まずテストモードで確認する:
smfc -o 0 -l 3で実行すると、実際にファン速度を変更せずにログだけを確認できます。本番投入前に必ず試しましょう。
活用例
smfc の設定を活かした代表的な構成と活用シーンを紹介します。
- ZFS RAID のスタンバイガード:
[HD] standby_guard_enabled=1を有効にすると、RAID メンバーの一部がスタンバイ(省電力待機)状態に入ったとき、アレイ全体を自動的にスタンバイへ誘導します。深夜のアクセスがない時間帯に HDD を静音化・節電するのに有効です。 - CPU と NVMe の共有ゾーン調停: CPU ゾーンに CPU と NVMe(高速な M.2 SSD)の両コントローラーをアサインすると、より高い要求レベルが自動的に採用されます。M.2 SSD が高温になるような重い作業でも、適切な冷却が維持されます。
- 複数ファンカーブの使い分け(Zone 0 + Zone 1): 同じ温度ソースに対して IPMI ゾーンごとに別のカーブを定義できます。静音性を求めるケースファンと、冷却重視の CPU クーラーで異なる制御特性を持たせることが可能です。
- AI 推論サーバーの夜間バッチ対応: GPU の温度(nvidia-smi 経由)を監視して専用ゾーンのファンを制御します。昼間は静かに、AI バッチが走る深夜帯だけしっかり冷やすという運用が自動で実現できます。
- 省電力 NAS のリモート管理:
remote_parameters=オプションで BMC(マザーボード上の管理チップ)にリモートから IPMI アクセスができます。ホスト OS と仮想マシンが分離した Proxmox 環境でも、smfc 単独でファン制御を継続できます。 - 段階的なカーブ設計で学習・研究用途にも: ブラウザデモでパラメータを変えながらカーブの挙動を確認し、実機に反映するというサイクルが組めます。制御工学の入門としてもわかりやすく、学習・研究用のプラットフォームとしても活用できます。
用語とポイント解説
IPMI(Intelligent Platform Management Interface) サーバーのハードウェアを遠隔から監視・操作するための標準規格です。かんたんに言うと「OS が起動していなくてもサーバーを管理できる仕組み」です。smfc はこの IPMI 経由でファンの速度を指示します。電源が入っている限りアクセスでき、OS のクラッシュ中でも操作できるのが特徴です。
BMC(Baseboard Management Controller) マザーボード上に搭載された独立した管理用チップのことです。かんたんに言うと「サーバー専用の、小さな管理コンピューター」です。Supermicro の場合は ASPEED AST シリーズが多く採用されており、smfc はこの BMC と通信してファン速度を制御します。
IPMI ゾーン ファンをグループ分けした論理的な区画のことです。かんたんに言うと「CPU 側のファンのグループ」と「その他のファンのグループ」に分けて個別に制御できる仕組みです。一般的に Zone 0 が CPU 系、Zone 1 が周辺機器系として使われます。
アサーションイベント ファン回転数がしきい値(安全な範囲の境界)を超えたとき、IPMI が発生させるアラームのことです。かんたんに言うと「危ないと判断したら自動で全力冷却に切り替わる安全装置」です。このイベントが発生するとファンが強制的に 100% になるため、しきい値の設定が重要になります。
drivetemp SATA HDD の温度をカーネル(OS の中核部分)の中で直接読み取るための Linux モジュールです。かんたんに言うと「HDD の体温計をカーネルに組み込む部品」です。Linux カーネル 5.6 以上で利用可能で、smfc が HDD 温度を取得する際に使います。
ipmitool IPMI デバイスをコマンドライン(文字入力の操作画面)から操作するためのツールです。かんたんに言うと「サーバーのファンやセンサーに直接命令できる便利な道具」です。smfc はこのツールを内部的に呼び出してファン速度の読み書きを行います。
steps(ステップ数) 温度とファンレベルの対応を何段階に分けるかを決めるパラメータです。かんたんに言うと「温度変化に対してファン速度を何刻みで変えるか」の設定です。値が大きいほど細かく制御でき、小さいほど大きく飛び飛びに変化します。
control_function(制御関数) 温度とファンレベルの対応を複数の区間で個別に定義できるパラメータです。かんたんに言うと「折れ線グラフのように、温度帯ごとに異なる制御カーブを描く設定」です。たとえば低温帯はゆるやかに、高温帯は急激にファンを上げるといった細かい制御が可能になります。
uv / venv(仮想環境) Python のパッケージ(追加ライブラリ)を、システム全体に影響を与えずに管理するための仕組みです。かんたんに言うと「このプロジェクト専用の Python の部屋を作る」ようなイメージです。smfc のインストールでは uv または venv 経由でのクリーンな環境構築が推奨されています。
smfc は、Supermicro サーバーを静かに・安全に・効率よく運用したいすべての人にとって強力な味方です。複雑に見える設定も、ステップを踏んで試していけば着実に理想の動作を実現できます。ぜひ自宅 NAS の静音化や GPU サーバーの温度管理、ZFS RAID の省電力スタンバイ制御などに活用してみてはいかがでしょうか。