S.M.A.R.T.
S.M.A.R.T. (Self-Monitoring, Analysis, and Reporting Technology) は近代的なストレージデバイスに内蔵されている補助コンポーネントです。ストレージの温度・代替処理された不良セクタの数・シークエラーなどの統計からデバイスの健康状態を推察し、故障を予測したり危険な値が出たときに通知することができます。
目次
Smartmontools
smartmontools パッケージはストレージデバイスを診断するための2つのユーティリティ (smartctl
と smartd
) を含んでいます。公式リポジトリから smartmontools をインストールしてください。
デバイスが SMART 対応かどうか確認する
デバイスが SMART 機能を有しているかどうかチェックするには次のコマンドを実行します (対象が ATA デバイスの場合 --device=ata
オプションが必要です):
# smartctl --info /dev/<device>
<device> は sda, hda,...
などに置き換えて下さい。このコマンドはデバイスに関する全般的な情報を表示します。対応している場合、下の2行が確認できるはずです:
SMART support is: Available - device has SMART capability. SMART support is: Enabled
SMART が有効でない場合、以下を実行して有効化します:
# smartctl --smart=on /dev/<device>
デバイスの健康状態を調べる
実行中のデバイスの健康状態を調べる3つの方法があります (どのテストもユーザーデータには影響を与えません):
- Short (デバイスの問題を高い確率で発見するテストを実行する)
- Extended (または Long。ディスクの完全なチェックを行う)
- Conveyance (デバイスの輸送中に破損が発生しなかったか確認する)
-c
(または --capabilities
) フラグを使うことでデバイスがどのテストに対応しているのか、そしてそれらの診断にどれくらい時間がかかるのか調べられます:
# smartctl -c /dev/sda […] Short self-test routine recommended polling time: ( 1) minutes. Extended self-test routine recommended polling time: ( 74) minutes. Conveyance self-test routine recommended polling time: ( 2) minutes. […]
テストを実行するには:
# smartctl -t short /dev/<device> # smartctl -t long /dev/<device> # smartctl -t conveyance /dev/<device>
テスト結果を表示
デバイスの健康状態は -H
フラグで表示できます。デバイスが不健康だと報告された場合、デバイスが既に壊れているか、あるいは24時間に故障することが予想されます。できる限り早くディスクからデータを抜き出して、どこか別のところにコピーすることを推奨します:
# smartctl -H /dev/<device>
最近のテスト結果のリストを表示するには:
# smartctl -l selftest /dev/<device>
デバイスの詳細な情報を表示するには:
# smartctl -a /dev/<device>
デバイスの監視
smartd デーモンは SMART の状態を監視して、何か問題が発生したらメールを送信します。起動時にデバイスを監視するには、systemd で smartd.service
ユニットを有効にしてください。/etc/smartd.conf
で設定をすることが可能です。
監視するデバイスの定義
全てのデバイスの全ての属性を監視するには以下を記述します:
DEVICESCAN -a
/dev/sda
と /dev/sdb
の全ての SMART エラーを監視するには (他のデバイスは無視):
/etc/smartd.conf
/dev/sda -a /dev/sdb -a
外部接続されたディスクの SMART エラーを監視する場合、再起動で /dev/sdX
が変わってしまう可能性があるため、UUID を使用するほうが良いでしょう。
まず、監視したいディスクの UUID を確認します:
ls -lah /dev/disk/by-uuid/
lrwxrwxrwx 1 root root 9 Nov 5 22:41 820cdd8a-866a-444d-833c-1edb0f4becac -> ../../sde lrwxrwxrwx 1 root root 10 Nov 5 22:41 b51b87f3-425e-4fe7-883f-f4ff1689189e -> ../../sdf2 lrwxrwxrwx 1 root root 9 Nov 5 22:42 ea2199dd-8f9f-4065-a7ba-71bde11a462c -> ../../sda lrwxrwxrwx 1 root root 10 Nov 5 22:41 fe9e886a-8031-439f-a909-ad06c494fadb -> ../../sdf1
次に、/dev/disk/by-uuid/
のパスを使って監視したいディスクを SMARTd に設定してください:
/etc/smartd.conf
/dev/disk/by-uuid/820cdd8a-866a-444d-833c-1edb0f4becac -a
潜在的な問題をメールする
新しいエラーが発生したり、何らかの問題が発生した時にメールされるようにするには、-m
を用います:
DEVICESCAN -m address@domain.com
(root メールアカウントではなく) 外部にメールを送信するには、MTA (Mail Transport Agent) か MUA (Mail User Agent) のインストール・設定が必要です。よく使われる MTA は msmtp と SSMTP です。よく使われる MTU は sendmail や Postfix です。メールするだけなら、S-nail を設定するだけで足ります。
-M test
オプションを使うと smartd デーモンが起動するたびにテストメールが送信されます:
/etc/smartd.conf
DEVICESCAN -m address@domain.com -M test
メールが届くまでに時間がかかることもあります。すぐに対応が必要な場合、以下のようにスクリプトを定義すると良いでしょう:
/etc/smartd.conf
DEVICESCAN -m address@domain.com -M exec /usr/local/bin/smartdnotify
メールを送信してシステムの通知を表示するには、/usr/local/bin/smartdnotify
に以下を記述:
#!/bin/sh # Send mail echo "$SMARTD_MESSAGE" | mail -s "$SMARTD_FAILTYPE" "$SMARTD_ADDRESS" # Notify user wall "$SMARTD_MESSAGE"
電源管理
電源管理によってコンピュータを制御している場合、低電力モードの HDD を扱う方法を設定するべきです。通常、SMART コマンドが実行されるとディスクのプラッタはスピンアップします。以下のオプションを使うことで、低電圧モードの HDD を定期的にスピンアップさせて高電圧モードになってしまうを防げます:
DEVICESCAN -n standby,15,q
詳しい情報は smartmontools wiki を見てください。
デバイスによっては -n が機能しない場合があります。syslog に以下のようなエラーメッセージが出力されます:
journalctl -u smartd
CHECK POWER MODE: incomplete response, ATA output registers missing Device: /dev/sdb [SAT], no ATA CHECK POWER STATUS support, ignoring -n Directive
別の方法として smartd の -i オプションを利用することがあります。状態を確認するためにディスクをスピンアップする頻度を制御します。デフォルトは30分です。頻度を変更するには /etc/default/smartmontools
を作成・編集 (例: 3時間ごとに確認):
/etc/default/smartmontools
SMARTD_ARGS="-i 21600"
詳しくは smartd manpage を参照してください。
自己診断の予定を組む
smartd はスケジュールに従って自己診断の実行をするようディスクに通知することができます。以下の /etc/smartd.conf
の設定では毎日午前2-3時の間に短い自己診断、土曜日の午前3-4時の間に長い自己診断が行われるようにします:
DEVICESCAN -s (S/../.././02|L/../../6/03)
温度が変わったら警告する
smartd はディスクの温度を記録して、急激な温度上昇が起こった時や温度の上限に達した時に警告をすることができます。以下の例では温度が4度以上変わった時と35度に到達した時にログを記録し、さらに温度が40度と危険なときにはログを取ってメールを送信します:
DEVICESCAN -W 4,35,40
完全な smartd.conf
の例
上記の例を全てまとめると以下のような設定になります:
DEVICESCAN
(smartd は全てのディスクを監視対象にし、監視を実行する)-a
(全ての属性を監視する)-o on
(自動オンラインデータ収集を有効化する)-S on
(自動属性保存を有効化する)-n standby,q
(ディスクが待機中の時チェックを実行せず、ディスクアクセスが発生しないようにログに書き込まない)-s ...
(短いもしくは長いテストの予定を立てる)-W ...
(温度を監視する)-m ...
(メールアラート)
DEVICESCAN -a -o on -S on -n standby,q -s (S/../.././02|L/../../6/03) -W 4,35,40 -m <username or email>
smartd
サービスの起動・リロードと状態の確認
# systemctl start smartd
または
# systemctl reload smartd
状態を確認する:
# systemctl status smartd
全ての smartd
ログ:
# journalctl -u smartd
GUI アプリケーション
- Gsmartcontrol — smartctl ハードディスクドライブ状態調査ツールの GNOME フロントエンド。