TS-112PのCPU/SSD温度を共有フォルダに記録してみる

SSD化+ファンレス化したTS-112Pの温度が気になったので、自分自身の共有フォルダに記録できるようにしてみました。

TS-112Pファンレス化 (ゲートリンク製ダミーファンキット仕様)
TS-112PのSSD化によりHDDの頃より発熱の心配が少なくなったので、以前から構想していた静音化 = ファンレス化に挑戦してみ...

1.基本方針

ZabbixやSNMPサーバがあれば定期ポーリングして温度を記録・監視できそうな気がしますが、あいにく環境がないので別の方法を考えることにします。以下の2ポイントをを実現したいところ。WebUIで取得できているのでLinuxとしてもどこかに出力されているでしょう。

  1. TS-112P単体で記録可能
  2. 後からグラフ化しやすいフォーマットで保存
2.コマンド単体でCPU温度を取得してみる

/procディレクトリ配下を覗いてみたところCPU温度は以下のコマンドで取得可能でした。

# cat /proc/tsinfo/systemp
53
3.コマンド単体でSSDの温度を取得してみる

SSDの温度は/proc配下には記録されていないようですが、SMARTで温度を拾えそうな気がするので試してみます。デフォルトで以下のパスにSMARTコマンドが設置されているので「-d」オプションでディスクナンバーを指定してみます。

# /sbin/get_hd_smartinfo -d 1
005 Reallocated_Sector_Ct        0        100 100 000 OK
009 Power_On_Hours               1285     100 100 000 OK
012 Power_Cycle_Count            7        100 100 000 OK
165 Unknown_Attribute            2490388  100 100 000 OK
166 Unknown_Attribute            0        100 100 000 OK
167 Unknown_Attribute            70       100 100 000 OK
168 Unknown_Attribute            1        100 100 000 OK
169 Unknown_Attribute            657      100 100 000 OK
170 Reserve_Block_Count          0        100 100 000 OK
171 Program_Fail_Count           0        100 100 000 OK
172 Erase_Fail_Count             0        100 100 000 OK
173 Unknown_Attribute            0        100 100 000 OK
174 Unexpected_Power_Loss        5        100 100 000 OK
184 End_To_End_Error             0        100 100 000 OK
187 Uncorrectable_Errors         0        100 100 000 OK
188 Unknown_Attribute            0        100 100 000 OK
194 Temperature_Celsius          45       055 048 000 OK
199 UDMA_CRC_Error_Count         0        100 100 000 OK
230 Head_Amplitude               17179869188 100 100 000 OK
232 Available_Reserved_Space     100      100 100 004 OK
233 Media_Wearout_Indicator      476      100 100 000 OK
234 Uncorrectable_ECC_Count      502      100 100 000 OK
241 Lifetime_Writes_From_Host    494      253 253 000 OK
242 Lifetime_Reads_To_Host       993      253 253 000 OK
244 Unknown_Attribute            0        000 100 000 OK

17行目「Temperature_Celsius」行の3列目がSSDの温度と思われます。awkで整形して温度だけを取り出してみます。

# /sbin/get_hd_smartinfo -d 1 | awk 'NR==17{print $3}'
45
または
# /sbin/get_hd_smartinfo -d 1 | grep Temp | awk '{print $3}'
45
4.取得時間とあわせて出力してみる

グラフ化のために温度とあわせて取得時間を記録したいので、awkとstrftime()関数で時刻を整形します。

# cat /proc/tsinfo/systemp| awk '{print strftime("%Y/%m/%d %H:%M:%S"), $0}' 
2019/06/24 00:10:53 53

# /sbin/get_hd_smartinfo -d 1 | awk 'NR==17{print strftime("%Y/%m/%d %H:%M:%S"), $3}'
2019/06/24 00:13:00 45

これらのコマンド実行結果を別々のファイルに記録してもよいのですが、CPUとSSDの温度をセットでグラフ化したいので1行目にまとめます。SSDの温度はgrepで

いろいろな方法があるようですが今回はsetを使ってみます。またCSVファイルとして開きやすいように列の区切り記号に「,」を使用します。

set -- $(cat /proc/tsinfo/systemp; /sbin/get_hd_smartinfo -d 1 |awk 'NR==17{print strftime("%Y/%m/%d %H:%M:%S"), $3}'); echo "$2,$3,$4,$1"
2019/06/26,00:06:33,42,50
5.TS-112Pのhomeフォルダにファイルを保存する

このコマンド結果を、PCから簡単にアクセスできる場所にcsvファイルで保存しようと思います。QTSの共有フォルダは/shareディレクトリ配下に実ディレクトリへのシンボリックリンクが作成されているので、この中の任意のディレクトリを指定して保存します。

set -- $(cat /proc/tsinfo/systemp; /sbin/get_hd_smartinfo -d 1 |awk 'NR==17{print strftime("%Y/%m/%d %H:%M:%S"), $3}'); echo "$2,$3,$4,$1" >> /share/homes/risca/document/temp/`date +%Y%m`_qnaptemp.csv

エクスプローラで共有フォルダ「home」にアクセスし、コマンドで作成したCSVファイルが表示されることを確認します。

6.cronで定期的に実行できるようスクリプト化する

ここまでくればもう少しで完成です。自作スクリプトを実行するためのautorunディレクトリの中にスクリプトファイルを作成し実行権限を付与します。

autorunディレクトリの作成方法はこちらを参考にしてください。

QNAP TS-112のPowerLEDを消灯する (QTS4.2.1)
TS-112のPowerLEDは青色LEDなので結構まぶしいのですが、残念ながら輝度調整や消灯する方法がありませんでした。CLIで...
# vi /share/HDA_DATA/.qpkg/autorun/ts112temp.sh
#!/bin/sh

PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/local/sbin:/usr/local/bin
export PATH

set -- $(cat /proc/tsinfo/systemp; /sbin/get_hd_smartinfo -d 1 |awk 'NR==17{print strftime("%Y/%m/%d %H:%M:%S"), $3}'); echo "$2,$3,$4,$1" >> /share/homes/risca/document/temp/`date +%Y%m`_qnaptemp.csv
# chmod +x /share/HDA_DATA/.qpkg/autorun/ts112temp.sh

# cd /share/HDA_DATA/.qpkg/autorun/
[/share/HDA_DATA/.qpkg/autorun] # ll
drwxr-xr-x    2 admin    administ      4.0k Jun  4 00:28 ./
drwxrwxrwx    7 admin    administ      4.0k Jun 23 05:08 ../
-rwxr-xr-x    1 admin    administ      1.2k Jun  4 00:28 autorun.sh*
-rw-r--r--    1 admin    administ      1.2k Dec 14  2016 autorun.sh.bak
-rwxr-xr-x    1 admin    administ       295 Jun  3 23:18 ts112temp.sh*

最後に作成したスクリプトをcronに追加します。「crontab -e」で登録するとTS-112P再起動のたびに設定が消えてしまうので、元ファイルの「/etc/config/crontab」にts112temp.shを5分毎に実行する設定を追加します。

# echo */5 * * * * /share/HDA_DATA/.qpkg/autorun/ts112temp.sh >> /etc/config/crontab

# cat /etc/config/crontab
# m h dom m dow cmd
...
  0-59/20 3 * * * /sbin/adjust_time
+ */5 * * * * /share/HDA_DATA/.qpkg/autorun/ts112temp.sh
  0 9,21 * * * /sbin/notify_update -s -p 1>/dev/null 2>&1
...

cronを再起動し、追加した設定を読み込みます。

# /etc/init.d/crond.sh restart
7.定期的に温度を取得できているか確認

しばらく時間をおいてからCSVファイルを開いてスクリプトが5分毎に実行されているか確認します。