ディスクのS.M.A.R.T.(以降、SMART)から情報を取得したり、ディスクのチェックができる。
FreeBSDではsysutils/smartmontoolsからインストールできる。
smartmontoolsのインストール、実施例はいろんなところに書かれているので、ここではメモ程度にまとめる。
FreeBSD 9.2-RELEASE-p3(i386), smartmontools-6.2_1での内容。
インストール
portsもpkgもsysutils/smartmontoolsからインストールできる。
smartctlとsmartdが/usr/local/sbin/にインストールされる。
smartctlがメインのコマンド。
smartdがデーモンプログラム。
立ち上げておくと、定期的にディスクチェックを行い、結果をdaemonファシリティのログに書き込んでくれる。
必要であれば問題発生時にメールも送ってくれる。
設定ファイルは/usr/local/etc/smartd.conf。
ディスクの確認
何はともあれ、どんなディスクが繋がっているか調べる。
smartctl -scanで得られる。
なお、SMARTにアクセスするには管理者権限が必要。
以下は実行例。
ここではHDDは/dev/ada0である。
環境により/dev/da0の場合もあるでしょう。
$ sudo smartctl --scan
/dev/ada0 -d atacam # /dev/ada0, ATA device
/dev/cd0 -d atacam # /dev/cd0, ATA device
ディスクが分かったら、SMARTに対応しているかどうかを調べる。
smartctlでデバイスファイルを開いてみればよい。
$ sudo smartctl /dev/ada0
smartctl 6.2 2013-07-26 r3841 [FreeBSD 9.2-RELEASE-p3 i386] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org
ATA device successfully opened
Use 'smartctl -a' (or '-x') to print SMART (and more) information
大丈夫そう。
SMARTからの情報の取得
smartctl -a <デバイスファイル>で情報を全部、-xでSMART以外の情報も表示。
実行例
$ sudo smartctl -a /dev/ada0
smartctl 6.2 2013-07-26 r3841 [FreeBSD 9.2-RELEASE-p3 i386] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Model Family: Seagate Barracuda 7200.10
Device Model: ST380815AS
Serial Number: 5RW18X0V
Firmware Version: 3.ADA
User Capacity: 80,000,000,000 bytes [80.0 GB]
Sector Size: 512 bytes logical/physical
Device is: In smartctl database [for details use: -P show]
ATA Version is: ATA/ATAPI-7 (minor revision not indicated)
Local Time is: Thu Feb 27 23:10:37 2014 JST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
See vendor-specific Attribute list for marginal Attributes.
(略)
ディスクのテスト実行
smartctl -t short <デバイスファイル>で実行する。
-tはテストの種類の指定。
shortと指定しているが、shortとくればlongもある。
それ以外にもある。
詳しくはman smartctl(「-test」で検索するとよい)。
shortだと10分以内、longだと数十分単位でのテスト。
運用中でも可能。
上記のコマンドは、ディスクのSMARTに対して「テストをせい」と指示をするだけ。
コマンド叩いたときには、「何時何分ごろに終わるからね」と言うだけで結果は表示されない。
結果はsmartctl -aで確認する。
smartctl -Xでテストを中止する。
以下実行例。
$ sudo smartctl -t short /dev/ada0
パスワード:
smartctl 6.2 2013-07-26 r3841 [FreeBSD 9.2-RELEASE-p3 i386] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Short self-test routine immediately in off-line mode".
Drive command "Execute SMART Short self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 2 minutes for test to complete.
Test will complete after Thu Feb 27 23:35:37 2014
Use smartctl -X to abort test.
$
結果確認
smartctl -aで確認する。
見るのはSelf-test execution status、SMART Self-test logの二つのエリア
以下の通り、「Self-test execution status」「SMART Self-test log」ともにエラーなし(without error)となっている。
なお、テスト実行をしてすぐsmartctl -aとすると、「いまテストしているところだよ」という表示になるので興味があればご覧ください。
(前略)
Self-test execution status: ( 0) The previous self-test routine completed
without error or no self-test has ever
been run.
(略)
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Short offline Completed without error 00% 41957 -
# 2 Short offline Completed without error 00% 41956 -
# 3 Short offline Completed without error 00% 0 -
常時モニタリングのためのsmartd
cronでsmartctlを実行してもよいけど、smartdを立ち上げおくのがよい。
テストの自動実行や、後述するようなディスクの変化についてもレポートしてくれる。
/usr/local/etc/smartd.confが設定ファイル。
デフォルトでは問題のあったときにしか報告してくれない。
日々のログを吐き出させたいのなら、syslogd, newsyslogの設定変更も必要。
smartd.confの変更
最低限やることは二つ。
①DEVICESCANはコメントアウト
②ディスクとテスト種別、スケジュールを指定。
①DEVICESCANのコメントアウト
デフォルトではDEVICESCANが有効になっている。
DEVICESCANがあると、smartdはそれ以降の設定をすべて無視して、実行される都度、デバイスのスキャンを行う。
それよりも、チェックするデバイスを明示した方がよい。
②ディスクとテスト種別、スケジュールを指定。
書式例は以下の通り。
<ディスク> <各種オプション> -s <スケジュール>
実際の例は以下の通り。
/dev/ada0 -a -o on -S on -s S/../.././02
<ディスク>にはデバイスファイルを指定。
<各種オプション>は以下の通り。
-a: ATAではデフォルト。全部入り。黙ってつけとけ。
-o: ATA専用。SMARTのオフラインテストを有効にするか。ONにしとけ。
-S: autosaveを有効にするか。ONにしとけ。
-s: T/MM/DD/d/HH でスケジュール指定。
T/MM/DD/d/HH
T: テストのタイプ。short(S)かlong(L)か。
MM: 月。01-12で指定。必ず二桁で指定。
DD: 日。01-31で指定。必ず二桁で指定。
d: 曜日。1が月曜、7が日曜。
HH: 時刻。00-23で指定。必ず二桁で指定。
以下だと毎日の午前2時にshortのテストを実施。
-s S/../.././02
syslogdの設定
smartdは、デフォルトではdaemonファシリティにログを吐く。
そのままだと使いにくいので、ログの出力先を変える。
たとえばlocal3ファシリティにする。
それには/etc/rc.confで、smartd_flagsとして指定する。
/etc/rc.conf
#SMART monitor tool
smartd_enable="YES" # マシン起動時にsmartdも起動させる設定
smartd_flags=" -l local3 " # ログ出力先の指定
そうしておいて、/etc/syslog.confにて以下を追加。
/etc/syslog.conf
#
# smartd(smartmontools)
#
local3.* /var/log/smartd.log
変更したらsyslogdを再起動。
$ sudo service syslogd restart
Stopping syslogd.
Waiting for PIDS: 26185
Starting syslogd.
$
しかしこのままだとsmartd.logが際限なく大きくなる。
newsyslog.confにも変更を加える。
newsyslog.confの設定
以下を追加。
/etc/newsyslog.conf
#
# smartd(smartmontools)
#
/var/log/smartd.log 640 10 1024 * JC
1MBを超えたらログをローテート。bzipで圧縮。10個まで保存。圧縮後のパーミッションは640。
終わったらnewsyslogを一回再起動しておくとよいかな。
$ sudo service newsyslog restart
Creating and/or trimming log files.
$
やっと準備完了。
smartdを起動しよう。
smartdの起動
再掲になるけれども、/etc/rc.confを修正してsmartdを起動する。
/etc/rc.conf
#SMART monitor tool
smartd_enable="YES" # マシン起動時にsmartdも起動させる設定
smartd_flags=" -l local3 " # ログ出力先の指定
smartdを起動する。
$ sudo service smartd start
Starting smartd.
$
先ほど指定したログファイルを見る。
$ cat /var/log/smartd.log
Mar 4 22:17:59 ascomoid newsyslog[38905]: logfile first created
Mar 4 22:26:32 ascomoid smartd[53036]: smartd 6.2
(略)
Mar 4 22:26:32 ascomoid smartd[53038]: file /var/run/smartd.pid written containing PID 53038
動いていますね。
ただこれだけでは、指定したディスクをチェックしてくれるか、分からない。
smartdはSIGUSR1シグナルを送ってやるとステータスチェックをしてくれるというので試してみよう。
なお、smartdのpidはさっきのログファイルに書いてあるし、あるいはservice smartd statusとやればpidを知ることができる。
$ sudo kill -SIGUSR1 53038
$
そのうえでログファイルを見てみると。
以下のような行が増えているはず。
/dev/ada0のチェックが出来ていますね。
Mar 4 22:35:10 ascomoid smartd[53038]: Signal USR1 - checking devices now rather than in 682 seconds.
Mar 4 22:35:10 ascomoid smartd[53038]: Device: /dev/ada0, SMART Usage Attribute: 190 Airflow_Temperature_Cel changed from 52 to 53
Mar 4 22:35:10 ascomoid smartd[53038]: Device: /dev/ada0, SMART Usage Attribute: 194 Temperature_Celsius changed from 48 to 47
daily status
以下のような行を/etc/periodic.confに追加するとレポートをroot宛てに送ってくれる。
複数ディスクの場合は、スペースで区切り。
下記のようなメールが届く。
SMART status:
Checking health of /dev/ada0: OK
Checking health of /dev/ada1: OK
Checking health of /dev/ada2: OK
以上。