nvme の温度を調べる
nvme が発熱でサーマル・スロットリング(温度保護)が走ってるっぽいので、温度のログを保存することにした。
その時に、そのもそもnvmeの温度を調べるにはどうするか考えた。
nvme の温度(temp/temparature) を調べる方法
コマンド | apt 必要 | root必要 |
---|---|---|
cat /sys | - | - |
sensors | ✓ | - |
smartctl | ✓ | ✓ |
nvme | ✓ | ✓ |
ルート権限なし /sys ファイルシステム
/sys
から取得すれば、ルート権限なしで取得できる。
cat /sys/class/nvme/nvme0/device/hwmon/hwmon1/temp1_input
sensorsコマンド
これはインストールが必要、実行時にはroot権限はいらない。
sudo apt install lm-sensors sudo sensors-detect
温度取得
sensors
smatctl
SMARTで直接にデバイスへ取りに行く。
インストールが必要、実行時に デバイスへのRoot権限が必要
sudo apt install smartctl
温度取得
sudo smartctl -a /dev/nvme0 | grep -i Temp
nvme-cli コマンド
smart等のデータを含めて、nvmeを管理するコマンド、温度取得も可能
sudo apt install nvme-cli
温度取得
sudo nvme smart-log /dev/nvme0
ルート権限が必要なコマンドを一般ユーザに許可する
SetSUID すれば、一般ユーザでも実行可能にすることが出来る。諸刃の剣。smratctl くらいなら問題な無いと思う。
SIDをつかって、一般ユーザでもsmartctl出来るようにする
sudo chmod u+s /usr/sbin/smartctl
smartctl で情報見る程度でsudo求められるのもなんか違うと思うし。
もしくは、温度を見る専用のコマンドを作って、そのコマンドををSetSIDする。 コマンドを作っておいて、このコマンドだけは一般ユーザでもrootとして動かせるようにしてもいいと思いますが、forkしてexecvするとかC言語で書くとか面倒なのですよね。
結論
ルート権限がないなら、/sys
から見る
sudo できるなら smartctl で見る。
これらが確実なようです。