LinuxでストレージのSMART情報を取得

ストレージ(HDDやSSDなど)は、OSやアプリだけでなく、ユーザーが作成したデータの保存にも使用される。
常にデータの読み書きが行われるため、ストレージには寿命がある(自分は消耗品と考えている)。
しかし、個体差がかなりあるため、いつ故障するのかは予測がつきにくい。

SMARTとは、大半のストレージが持っている自己診断機能。
SMARTから得られる情報を見ることで、ストレージの障害を早期に発見することが出来る。
ただし、健康なストレージでも突然死する可能性はあるため、あくまで目安と考えた方が良い。

SMARTの情報はストレージのメーカーや機種によって仕様が異なる。
また、USB接続で外付けしているストレージの場合、製品に使われているチップ(コントローラー)にも依存する。
結果的に、SMART情報はOS標準では読み取れなくて、対応するソフトを使用する必要がある。

Windowsの場合、「CrystalDiskInfo」というソフトが有名だが、Linuxでは使えない。
以降では、LinuxでSMART情報を表示する方法を記載する。
なお、これ以降はストレージのことをディスクと呼ぶ(物理的な製品自体をストレージと呼び、ソフトウェア上ではドライブやディスクと呼ぶことが多い)。


ソフトのインストール

# Debian系
sudo apt install smartmontools

# RedHat系
sudo dnf install smartmontools


各種情報の表示

# ディスクの一覧を表示
sudo smartctl --scan

# SMARTの対応状況やディスクの情報を表示
sudo smartctl -i /dev/sda

# 全てのSMART情報を表示
sudo smartctl -a /dev/sda

SMART情報の表示例(抜粋)
SMART情報はメーカーや機種によって表示される項目が異なる。
確認する個所は以下の通り。

VALUE現在の値。常に変動する数値。
WORST最悪値。過去に計測した最も悪い時の数値。
THRESH異常の有無を判断する閾値。
メーカーが定める値だが、設定されてない場合もある。
TYPE項目の種類。
Pre-fail:ディスクが故障する可能性を示す項目
Old_age:ディスクの設計上の寿命を示す項目
WHEN_FAILED現在の値(VALUE)が閾値(THRESH)を超えているか否か。
「-」なら問題なし。
ただし、閾値が設定されてない場合、自分で値の増減を定期的に監視する必要がある。
RAW_VALUESMART情報のリアルタイムのデータ。

ID# ATTRIBUTE_NAME          VALUE WORST THRESH TYPE      UPDATED WHEN_   RAW_
                                                                 FAILED  VALUE
  1 Raw_Read_Error_Rate     100   100   000    Pre-fail  Always    -     0
  5 Reallocated_Sector_Ct   100   100   000    Pre-fail  Always    -     0
  9 Power_On_Hours          100   100   000    Old_age   Always    -     6737
 12 Power_Cycle_Count       100   100   000    Old_age   Always    -     965
170 Grown_Failing_Block_Ct  100   100   000    Pre-fail  Always    -     4395
171 Program_Fail_Count      100   100   000    Old_age   Always    -     0
172 Erase_Fail_Count        100   100   000    Old_age   Always    -     0
173 Wear_Leveling_Count     098   098   000    Pre-fail  Always    -     131
174 Unexpect_Power_Loss_Ct  100   100   000    Old_age   Always    -     3
183 SATA_Iface_Downshift    100   100   000    Old_age   Always    -     0
184 End-to-End_Error        100   100   000    Pre-fail  Always    -     0
187 Reported_Uncorrect      100   100   000    Old_age   Always    -     0
188 Command_Timeout         100   100   000    Old_age   Always    -     0
189 Factory_Bad_Block_Ct    100   100   000    Old_age   Always    -     177
195 Hardware_ECC_Recovered  100   100   000    Old_age   Always    -     0
196 Reallocated_Event_Count 100   100   000    Old_age   Always    -     0
197 Current_Pending_Sector  100   100   000    Old_age   Always    -     0
198 Offline_Uncorrectable   100   100   000    Old_age   Offline   -     0
199 UDMA_CRC_Error_Count    100   100   000    Old_age   Always    -     0
202 Percent_Lifetime_Used   098   098   000    Old_age   Offline   -     2
206 Write_Error_Rate        100   100   000    Old_age   Always    -     0

ディスクの自己診断テスト

自己診断テストには、以下のようなものがある。
short 簡易的な自己診断
long または Extended 詳細な自己診断
Conveyance ディスク輸送中に受ける可能性があるダメージの有無を確認

メーカーや機種によってテストの対応有無や所要時間は変わる。
short や Conveyance は10分以内に終わることが多いが、long または Extended は数時間かかることもある。

# ディスクが対応しているテストの種類と所要時間を表示
sudo smartctl -c /dev/sda

# 自己診断テストを実行
# 自己診断はバックグラウンドで行われるため、実行時に表示される
# 終了予定時間(Test will complete after ~の部分)まで
# 待ってから、テスト結果の確認を行う
sudo smartctl -t short /dev/sda
sudo smartctl -t long  /dev/sda
sudo smartctl -t conveyance /dev/sda

# 実行中の自己診断テストをキャンセル
sudo smartctl -X /dev/sda

# 自己診断テストの結果を表示
# 過去の結果も表示され、最新の結果は一番上に表示される
sudo smartctl -l selftest /dev/sda

タイトルとURLをコピーしました