smartctlを利用してデバイスの健康状態を診断する（S.M.A.R.T.）

## はじめに

備忘録

実行環境はこちら

- Linux(Ubuntu) 
  バージョン: 22.04

**背景**
購入した中古PCの寿命が近いのかどうか気になった

## 「S.M.A.R.T.」とは？



:::note
_Self-Monitoring, Analysis and Reporting Technology_ 
コンピュータのHDDやSSDなどのストレージデバイスに組み込まれた、自己監視、分析、および報告技術の規格。この技術は、ストレージデバイスの健康状態やパフォーマンスを監視し、問題を事前に検出するのに役立つ。
:::

- 自己監視（Self-Monitoring）
ストレージデバイスは、自身の状態を監視し異常が発生する前に問題を検出する機能がある。これによりデバイスの故障やデータの喪失を事前に予測できる。

- 分析（Analysis）: 
S.M.A.R.T.データはデバイスの稼働状態を評価し問題の発生要因を分析する。例えば、「不良セクタの増加」や「温度の上昇」などの異常が検出された場合、それに関する情報を提供する。

- 報告（Reporting）: 
S.M.A.R.T.データはユーザーやシステム管理者に提供され、問題の警告や異常の詳細を通知する。これにより適切な対策を講じるための情報が提供される。

## 「smartctl」とは

`smartctl`はS.M.A.R.T.を制御し、ストレージデバイス（HDDやSSDなど）の健康状態を監視・管理するために使用されるコマンドラインツールのこと。このツールを使用することで、ストレージデバイスのS.M.A.R.T.属性や情報を取得し、問題の検出・診断・報告が可能になる。

## 「smartctl」を使う

**基本構文**
`smartctl [オプション] [デバイス名]`

**ヘルプを表示**
`smartctl -h/--help/--usage [デバイス名]`
※オプション沢山ある（40個くらい）

```bash:Ubuntu
# インストール
$ sudo apt install smartmontools
# which
$ which smartctl
/usr/sbin/smartctl
# [デバイス名]を調べる
$ smartctl --scan
/dev/sda -d scsi # /dev/sda, SCSI device
# Prints all SMART information
$ smartctl --all /dev/sda
## これが出てれば基本問題なし
SMART Error Log Version: 1
No Errors Logged
```

`--all`はすべての情報を出力する。情報量が多い。

`-A`のオプションを使うとSMART情報のところだけ表示される。
```bash:Ubuntu
$ smartctl -A /dev/sda
...
=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 1
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0033   100   100   010    Pre-fail  Always       -       0
  9 Power_On_Hours          0x0032   099   099   000    Old_age   Always       -       924
 12 Power_Cycle_Count       0x0032   099   099   000    Old_age   Always       -       794
170 Unused_Rsvd_Blk_Ct_Chip 0x0032   100   100   010    Old_age   Always       -       0
171 Program_Fail_Count_Chip 0x0032   100   100   010    Old_age   Always       -       0
172 Erase_Fail_Count_Chip   0x0032   100   100   010    Old_age   Always       -       0
173 Wear_Leveling_Count     0x0033   093   093   005    Pre-fail  Always       -       56
174 Unexpect_Power_Loss_Ct  0x0032   099   099   000    Old_age   Always       -       7
178 Used_Rsvd_Blk_Cnt_Chip  0x0013   100   100   010    Pre-fail  Always       -       0
180 Unused_Rsvd_Blk_Cnt_Tot 0x0013   100   100   010    Pre-fail  Always       -       1850
184 End-to-End_Error        0x0033   100   100   097    Pre-fail  Always       -       0
187 Uncorrectable_Error_Cnt 0x0032   100   100   000    Old_age   Always       -       0
194 Temperature_Celsius     0x0032   069   017   000    Old_age   Always       -       31
199 CRC_Error_Count         0x003e   100   100   000    Old_age   Always       -       0
233 Media_Wearout_Indicator 0x0013   093   093   000    Pre-fail  Always       -       15602809
241 Total_LBAs_Written      0x0032   099   099   000    Old_age   Always       -       3431
242 Total_LBAs_Read         0x0032   099   099   000    Old_age   Always       -       2901
249 NAND_Writes_1GiB        0x0032   099   099   000    Old_age   Always       -       14448
```

項目が沢山ある。この結果を見ると今のところ問題はない状態のよう。

**主要な項目の意味合い**
- Reallocated_Sector_Ct: 
リアロケーションされたセクタのカウントが0で、これは良好。リアロケーションはディスク上の不良セクタを修正するために行われるが、カウントが増えるとディスクの健康状態が悪化する可能性あり。
- Power_On_Hours: 
稼働時間は923時間で、これは Old_age 状態。ドライブが長時間稼働していることを示しているけど、特に問題はなし。
- Wear_Leveling_Count: 
ウェアレベリングカウントが56で、これは Pre-fail 状態。ウェアレベリングはSSDの寿命を管理するための機能で、カウントが低い場合、SSDの寿命が短くなる可能性あり。ただし、現在の値は問題のある数値ではない。
- Temperature_Celsius: 
温度が35度で、通常の範囲内。過熱の兆候はなし。
- Uncorrectable_Error_Cnt: 
修正不能なエラーカウントが0で、これは問題なし。
- Media_Wearout_Indicator: 
メディアの摩耗指標が15602809で、Pre-fail 状態。この値はSSDの寿命に関連していて、低→高への値の変化が寿命を示す。現在の値はまだ健康的な範囲内。
- Total_LBAs_WrittenとTotal_LBAs_Read: 
これらの値はデータの書き込みと読み取りの統計情報だが、特に問題なし。
- NAND_Writes_1GiB: 
これは1ギガバイトあたりの書き込み回数を示しているが、これも特に問題なし。


## 「S.M.A.R.T.」属性の見方について

[参照]
[Wikipedia: Self-Monitoring, Analysis and Reporting Technology](https://ja.wikipedia.org/wiki/Self-Monitoring,_Analysis_and_Reporting_Technology)

表でまとまっている。

## おわりに

内容整理おわり