hddtempはsmartの情報を元にHDDの温度情報を取得するツールである。
配布元よりtar.bz2形式のソースを取得し、コンパイルインストールを行なう。
HDDデータベースファイル(hddtemp.db)は初期状態では保管場所として /usr/share/misc が指定されているが、下記例では保管場所を /etc 配下に変更している。
wget http://www.guzu.net/linux/hddtemp-0.3-beta12.tar.bz2
bunzip2 hddtemp-0.3-beta12.tar.bz2 tar xfv hddtemp-0.3-beta12.tar cd hddtemp-0.3-beta12
./configure --with-db-path=/etc/hddtemp.db make make install
cd /etc wget http://www.guzu.net/linux/hddtemp.db
実行ファイルは /usr/local/sbin に配置される。
測定は対象のデバイスファイル名を引数に指定する。
# hddtemp /dev/hda /dev/hda: ST340016A: 40℃
SMART対応ではあるがhdtemp.dbに情報が登録されていないドライブの検査を行なうと、以下のような警告メッセージが表示される。
# hddtemp /dev/hdc WARNING: Drive /dev/hdc doesn't appear in the database of supported drives WARNING: But using a common value, it reports something. WARNING: Note that the temperature shown could be wrong. WARNING: See --help, --debug and --drivebase options. WARNING: And don't forget you can add your drive to hddtemp.db /dev/hdc: WDC WD2000BB-00DWA0: 34・ or ・
上記の表示結果ではモデルナンバー表示と温度測定(赤色部分)はできていることから、SMART対応ドライブであるがhddtemp.dbに情報が無いだけであると分かる。
この様な場合はhddtemp.dbに情報を追加することで警告表示を抑制できる。
hddtemp.dbへのHDD情報登録はhddtempをデバッグモードにて動作させ、値を取得するフィールドを調査する必要がある。
# hddtemp -D /dev/hdc
出力結果は以下となる。
このHDDの場合は赤文字行(194)の値を使用するが、全てのHDDがこの行に温度情報を持つ訳ではない。
このため、実温度と比較して適正と思われる行を温度として使用する。
================= hddtemp 0.3-beta12 ================== Model: WDC WD2000BB-00DWA0 field(1) = 0 field(3) = 204 field(4) = 77 field(5) = 3 field(7) = 0 field(9) = 97 field(10) = 0 field(11) = 0 field(12) = 76 field(194) = 47 field(196) = 3 field(197) = 0 field(198) = 0 field(199) = 0 field(200) = 0
hddtemp.dbへの登録情報は以下となる。
"WDC WD2000BB-00DWA0" 194 C "Western Digital Caviar 200GB Special Edition 2MB"
登録後の再実行結果は以下となる。
# hddtemp /dev/hdc /dev/hdc: WDC WD2000BB-00DWA0: 36℃
SNMPマネージャに計測情報を送りグラフ化する場合は以下の様なスクリプトを作成し、snmpd.confのexec行にて実行できるよう設定を行う。
#!/bin/sh
# ------------------------
# hdd temp data script
# ------------------------
# Version : 1.0
# update : 2004.11.10
export LANG=C
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
# Setting
HDDTEMP="/usr/local/sbin/hddtemp"
DRIVE="/dev/"$1
# Check
if [ -z $1 ]; then
echo "ERR : please input device name"
echo "usage: hddtemp.sh hda"
exit 0
fi
# Exec
$HDDTEMP $DRIVE | awk 'BEGIN{FS=":"}{print $3}' | awk '{print $1}' | sed -e 's/+//' -e 's/[^0-9+\.].*//'
# EOF