Linux HDDの温度を調べるコマンド smartctl

 2013-12-16
自宅鯖のNASのHDDを新調するのを契機に、HDDの温度のログでも取ってみようかと思いました。

 
LinuxでHDDの温度を調べるツールとしては、smartmontooolsというものが有名。実際に使うコマンドとしてはsmartctlというものになる。
もしコマンドがなければ、yum install smartmontools とでもして入れておこう。apt-getは知りませんので適当にそれっぽいパッケージを入れてみてくださいな。

このツールはHDDのS.M.A.R.T.機能のデータを吸い出してくれるモノらしい。
動作はroot権限が必要ですので、sudoで実行するか、あらかじめ chmod u+s などでSUIDを立てておく。とする。



まずは何も考えずに内臓HDDの温度を見てみる。
[linux]% smartctl -A /dev/sda
smartctl 5.42 2011-10-20 r3458 [i686-linux-2.6.43.8-1.fc15.i686.PAE] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000d 100 100 050 Pre-fail Offline - 0
2 Throughput_Performance 0x0005 100 100 050 Pre-fail Offline - 0
3 Spin_Up_Time 0x0007 100 100 050 Pre-fail Always - 0
4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 363
5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0
7 Seek_Error_Rate 0x000f 100 100 050 Pre-fail Always - 735
8 Seek_Time_Performance 0x0005 100 100 050 Pre-fail Offline - 0
9 Power_On_Minutes 0x0032 085 085 000 Old_age Always - 7785h+00m
10 Spin_Retry_Count 0x0013 100 100 050 Pre-fail Always - 0
12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 354
191 G-Sense_Error_Rate 0x000a 100 100 000 Old_age Always - 51
192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 13
193 Load_Cycle_Count 0x0032 057 057 000 Old_age Always - 263424/263438
194 Temperature_Celsius 0x0022 098 048 000 Old_age Always - 41 (Min/Max 7/66)
195 Hardware_ECC_Recovered 0x001a 100 100 000 Old_age Always - 1
196 Reallocated_Event_Count 0x0032 100 100 000 Old_age Always - 0
197 Current_Pending_Sector 0x0032 100 100 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0
200 Multi_Zone_Error_Rate 0x0012 100 100 000 Old_age Always - 0
201 Soft_Read_Error_Rate 0x0012 100 100 000 Old_age Always - 0
223 Load_Retry_Count 0x0012 100 100 000 Old_age Always - 0
230 Head_Amplitude 0x0032 088 088 000 Old_age Always - 368089
250 Read_Error_Retry_Rate 0x000a 100 100 000 Old_age Always - 116

後半あたりにTemperature_Celsiusという行に41 (Min/Max 7/66)とある。今41℃というわけだ。
Min/Maxという隣に7/66とあるので、このHDDのS.M.A.R.T.が覚えている限りでは、最低7℃、最高66℃を経験したことがあるらしい。

内蔵HDDに関しては特にオプションなどなくても大抵のモノは見れると思います。



ちょっと面倒なのが外付けHDDの場合です。オプションの追加無くS.M.A.R.T.が読み出せるものもありますが、中には多少のオプションが必要なヤツがあります。
[linux]% smartctl -A /dev/sdc
smartctl 5.42 2011-10-20 r3458 [i686-linux-2.6.43.8-1.fc15.i686.PAE] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net

/dev/sdc: Unknown USB bridge [0x0411:0x0176 (0x100)]
Smartctl: please specify device type with the -d option.

Use smartctl -h to get a usage summary
たとえばUSB外付けのsdcを見ようとした時に、 Unknown USB bridge と怒られてしまいました。よくわからないUSBコントローラが間に仲介してて、S.M.A.R.T.が読めないぞーって言っているわけですね。自分が使っている外付けHDDのUSBコントローラを指定してあげる必要があります。

[linux]% smartctl -A -d sat,12 /dev/sdc
smartctl 5.42 2011-10-20 r3458 [i686-linux-2.6.43.8-1.fc15.i686.PAE] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x002f 200 200 051 Pre-fail Always - 0
3 Spin_Up_Time 0x0027 138 116 021 Pre-fail Always - 6100
4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 543
5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0
7 Seek_Error_Rate 0x002e 100 253 000 Old_age Always - 0
9 Power_On_Hours 0x0032 082 082 000 Old_age Always - 13492
10 Spin_Retry_Count 0x0032 100 100 000 Old_age Always - 0
11 Calibration_Retry_Count 0x0032 100 253 000 Old_age Always - 0
12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 21
192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 2
193 Load_Cycle_Count 0x0032 150 150 000 Old_age Always - 150364
194 Temperature_Celsius 0x0022 098 078 000 Old_age Always - 49
196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0
197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0030 200 200 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x0032 200 200 000 Old_age Always - 0
200 Multi_Zone_Error_Rate 0x0008 200 200 000 Old_age Offline - 0
今度は見れました。項目数が違いますが、S.M.A.R.T.はメーカーによって項目数が違うのでそういうものかと。
オプションに -d sat,12 というものを追加してます。どのオプションを追加すれば良いのかはsmartmontoolsのページから探してみてください。

ちなみに、私の手持ちの外付けHDDだと、 -d sat または -d sat,12 で全て見ることが出来ました。





さてここまでで、HDDの温度がどのくらいかを調べることが出来ました。
とにかく温度を把握したい場合はここまでで良いですが、ログを取ろうと思ったら余計なモノが一杯ついてて邪魔です。
なので適当にperlなりawkなりのスクリプト等で処理して欲しい部分だけ抜き取りましょう。

私の場合は、、 パイプで繋げて加工しちゃいましょ。面倒なので。
[linux]% smartctl -A -d sat,12 /dev/sdc | grep 'Temp' | expand | tr -s " " | cut -f10 -d" "
50
ということで、/dev/sdcは50℃らしいです。

grep 'Temp' で温度が記載されている行だけを抽出します。
expand でtabコードを半角のスペースへ変換します。おまじないです。
tr -s " " 連続する半角スペースを、スペース1つに減らします。
cut -f10 -d" " で温度の部分だけ切り出します。10フィールド目、区切り文字(デリミタ)は半角スペース



あとはこのコマンドを定期的に実行して、結果を適当なファイルに保存しておけば温度のログが採れます。

最終的にはsnmpに乗せて、cactiにグラフ化してもらう予定です。


 
コメント












管理者にだけ表示を許可する
トラックバック
トラックバックURL:
http://wbbwbb.blog83.fc2.com/tb.php/147-33b8902e
≪ トップページへこのページの先頭へ  ≫