NVMe仕様のS.M.A.R.T.属性(1/4)：概要

# はじめに
　[前回の記事](https://qiita.com/ken-yossy/items/1fc34bfce35b11fd58e5)で、NVMe SSDのSelf-Monitoring Analysis and Reporting Technology (S.M.A.R.T.)属性（情報）のひとつPercentage Usedについて、私が使うPCに搭載されたSSDの値の変化をご紹介して説明しました。

　NVMe仕様のS.M.A.R.T.属性は[以前説明しました](https://qiita.com/ken-yossy/items/4d1f84f3c783caccc336)が、その記事は投稿からもう2年ほど経過しますし、その間にNVMe仕様もリビジョン2.0になりました。

　そこで、NVMe仕様のS.M.A.R.T.属性について改めてまとめます。今回は概要編です。

# まとめ
* 最新NVMe基本仕様のS.M.A.R.T.属性は、大まかに「警告」「現在値」「累積値」「設定値」に分類できる
* 「警告」分類の属性は値が非ゼロであれば早急な対応が必要、「現在値」および「累積値」分類の属性は継続した監視が重要

# NVMe仕様のS.M.A.R.T.属性
　NVMe基本仕様(Base Specification)の最新版<sup>[1]</sup>に定義されたS.M.A.R.T.属性（正確には"SMART / Health Information"）の一覧を示します。

　この一覧には独自の「分類」を併記しました。「警告」分類はその属性がSSDの状態に関する警告を示します。同様に、「現在値」分類は現在の値、「設定値」分類は設定された（した）値、「累積値」分類はSSD稼働開始からの積算値です。

_表：NVMe基本仕様におけるS.M.A.R.T.属性(SMART / Health Information)一覧_
| 名称 | 分類 | 意味（概要） |
|----:|:----:|:--:|
| Critical Warning | 警告 | 警告有無表示 |
| Composite Temperature | 現在値 | 代表温度 |
| Available Spare | 現在値 | 予備領域量(%) |
| Available Spare Threshold | 設定値 | 予備領域量警告閾値(%) |
| Percentage Used | 現在値 | 使用率(%) |
| Endurance Group Critical Warning Summary | 警告 | Endurance Group用警告有無表示 |
| Data Units Read / Written | 累積値 | 読み出し・書き込みデータ量 |
| Host Read / Write Commands | 累積値 | 読み出し・書き込みコマンド数 | 
| Controller Busy Time | 累積値 | コントローラ稼働時間 | 
| Power Cycles | 累積値 | 電源投入回数 | 
| Power On Hours | 累積値 | 電源投入時間 | 
| Unsafe Shutdowns | 累積値 | 非正規電源断回数 | 
| Media and Data Integrity Errors | 累積値 | メディアエラー回数 | 
| Number of Error Information Log Entries | 累積値 | エラーログ数 | 
| Warning Composite Temperature Time | 累積値 | 警告(Warning)温度超過時間 | 
| Critical Composite Temperature Time | 累積値 | 警告(Critical)温度超過時間 |  
| Temperature Sensor 1～8 | 現在値 | 温度センサの値 |
| Thermal Management Temperature 1/2 Transition Count | 累積値 | 設定温度(TMT1/2)超過回数 |
| Total Time For Thermal Management Temperature 1/2 | 累積値 | 設定温度(TMT1/2)超過時間 | 

# 「警告」分類の属性
　「警告」分類の属性は2つです。"Critical Warning"と"Endurance Group Critical Warning Summary"です。

　これらの属性はビットマップ形式で、各ビットがそれぞれ特定の状態や事象に対応します。例えば「読み出し専用モード(Read Only Mode)かどうか」です。値が0であれば正常（事象は発生していない）を、1であれば異常（事象が発生中）を意味します。

　この属性が非ゼロであることは**異常が発生してかつ未解消（解決）であること**を意味しますので、速やかな対応が必要です。

　なおEndurance Group Critical Warning Summaryは、"Endurance Group"という機能に関する警告有無表示属性です。Endurance Groupとは、NVMeリビジョン1.4で導入された、主にエンタープライズシステムやデータセンターで活用される機能です。この機能の詳細は説明しません。

# 「現在値」分類の属性
　「現在値」分類の属性は以下の3種類です。

* 予備領域量(Available Spare)
* 使用率(Percentage Used)
* 温度(Composite Temperature, Temperature Sensor 1～8)

　これらの属性は、その値はもちろんのこと「値の変化（履歴）」が重要です。

　予備領域量や使用率は、数時間や数日単位での急激な変化（増加）は通常ありません。逆に言えば、**これらの属性値の急激な変化は異常発生を意味します**。このため属性値の継続的な監視と傾向の把握が重要です。

　一方温度は急激な変化が起こり得ますが、SSDに起因しない環境要因での変化もあり得ますのでやはり継続的な監視が重要です。

# 「累積値」分類の属性
　NVMe仕様のS.M.A.R.T.属性では「累積値」分類の属性が最も多いです。いわゆる「統計情報」ですね。

　これらの属性も「現在値」分類の属性と同様に、継続的な監視を行い、傾向を把握することが重要です。何か事象が発生した時に、その原因を探る手掛かりがこれら「累積値」分類の属性に潜んでいることが良くあります。

　例えば、「エラーログ数が急に増えた」や「メディアエラー回数が急に増えた」という変化はSSDに異常が発生した可能性を示します。一方、「急に電源投入回数が増えた」や「書き込みコマンド数が急に増えた」という変化はSSDではなくむしろSSDの接続先システムに異常が発生した可能性があると解釈できます。

　なお、「エラーログ数(Number of Error Information Log Entries)」は「累積値」ではありますが、「SSDの電源が切られるとログは消去される」という仕様です（正確にはController Level Resetでも消去される）。このため「エラーログ数」の値が変化したら（増えたら）できるだけ早くそのログの内容を読み出すべきです。

# 「設定値」分類の属性
　「設定値」分類の属性は「予備領域量警告閾値」のみです。

　「現在値」分類の属性である「予備領域量」がこの属性値を下回ると「警告」分類の属性である「Critical Warning」に警告が表示される、という仕組みです。

　しかし、標準仕様ではホストはこの値を変更（カスタマイズ）できませんので、有効な用途がありません。

# まとめ
　今回の記事では、NVMe基本仕様の最新版（リビジョン2.0b）に定義されたS.M.A.R.T.属性を改めてご紹介し、それらの概要と値の見かたを説明しました。

　次回は、それらS.M.A.R.T.属性の中で、値に変化が起きた時に早急な対応が必要な「警告」分類の属性について説明します。

# Reference
[1] NVM Express, _"NVM Express Base Specification,"_ Revision 2.0b, Jan. 2022

# ライセンス表記
<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"><img alt="クリエイティブ・コモンズ・ライセンス" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a><br />この記事は<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンス</a>の下に提供されています。