それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

nvmeの温度を取得する方法ー3種類

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 で見る。

これらが確実なようです。