Tiny Core LinuxでHDDのエラーチェック

「[Tiny Core Linux 7をUSBメモリにインストール](42bc90c13e35d0f81467)」で作ったTiny Core LinuxでshredやSecure EraseでHDDのデータ消去を行った後、再利用できるかどうかエラーチェックを行った時のメモです。
※データ消去後のHDDの状態をチェックする事を想定しています。消えてはいけないようなデータの残っているHDDでは試さない方が良いと思います。

## smartctlを使ったチェック
smartctlを使ってHDDのS.M.A.R.T.情報を確認することができます。smartctlはsmartmontoolsパッケージに含まれますのでインストールし、`-H`オプションで健康状態をチェックしてみます。

```console
$ tce-load -wi smartmontool
$ sudo smartctl -H /dev/sda
smartctl 5.41 2011-06-09 r3365 [i686-linux-3.2.0-80-generic] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
```

PASSED、という事は健康という事だと思うのですが、念のため`-a`オプションで全情報を表示してみます。

```console
$ sudo smartctl -a /dev/sda | egrep "(ID|Pre-fail)"
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   102   100   006    Pre-fail  Always       -       3753517
  3 Spin_Up_Time            0x0003   100   100   085    Pre-fail  Always       -       0
  5 Reallocated_Sector_Ct   0x0033   090   090   036    Pre-fail  Always       -       219
  7 Seek_Error_Rate         0x000f   100   253   030    Pre-fail  Always       -       0
 10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0
```

Reallocated_Sector_CtのRAW_VALUEの値が219なんですが、RAW_VALUEはベンダー固有でフォーマットは規定されていないため無視しても良いらしいです。VALUEは090でしきい値（THRESH）以上と言えば以上なので正常の範囲内らしいです。

どうも疑いの目が晴れないので`-t`オプションを使ってテストしてみます。`-t short`オプションを使ってテストを実行すると2分で終わるというメッセージが表示されるので2分ほど待ちます。

```console:-tでテスト
$ sudo smartctl -t short /dev/sda
smartctl 6.1 2013-03-16 r3800 [i686-linux-4.2.9-tinycore] (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 Wed Feb  1 06:47:27 2017

Use smartctl -X to abort test.
```

2分ほど待ったら`-l selftest`オプションで結果を表示してみます。

```console:結果表示
$ sudo smartctl -l selftest /dev/sda
smartctl 6.1 2013-03-16 r3800 [i686-linux-4.2.9-tinycore] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed: read failure       90%        24         485190997
# 2  Short offline       Completed: read failure       90%        24         485190997
# 3  Short offline       Completed: read failure       90%        24         485190997
-
```

正常なら「Completed without error」となるところが「Completed: read failure」なのでやっぱりちょい怪しいです。

## badblocksを使ったチェック
badblocksコマンドを使えば全セクターの読み込みテストを行い不良セクターをチェックすることができます。badblocksコマンドはe2fsprogsパッケージに含まれますのでインストールします。

```console:badblocksのインストール
$ tce-load -wi e2fsprogs
```

以下のコマンドでチェックを行うことができます。全セクターの読み込みテストを行いますので時間がかかります。80GのHDDで36分ほどかかりました。同じHDDをshredやSecure Eraseで消去した時も36分ほどかかりましたので、それと同じくらい時間が掛かると思っておけば良いのではないでしょうか。

```console:badblocksによるエラーチェック（正常なHDDの場合）
$ time badblocks -sv /dev/sda
Checking blocks 0 to 78150743
Checking for bad blocks (read-only test):   0.00% done, 0:00 elapsed. (0/0/0 errdone                                                 
Pass completed, 0 bad blocks found. (0/0/0 errors)
real	36m 13.71s
user	0m 4.12s
sys	1m 42.29s
```

先ほどのsmartctlで`-H`でPASSEDだったのに`-t short`はread failureになるHDDをbadblocksでチェックしてみたところエラーが次々と表示されました。

```console:badblocksによるエラーチェック（エラーのあるHDDの場合）
$ badblocks -sv /dev/sda
（省略）
Pass completed, 382 bad blocks found. (382/0/0 errors)
```

## 結果として…
時間は掛かりますが、smartctlの`-H`ではなく`-t short`や`-t long`オプション、badblocksコマンドの結果を確認した方がよさそうです。

## 関連リンク

- [UbuntuからTiny Core Linux 7をUSBメモリにインストール](42bc90c13e35d0f81467)
- [Tiny Core Linux 7でSecure Eraseを使ったHDDデータ消去](c8cc9418c84d563bee29)
- [Tiny Core Linux 7でshredを使ったHDDデータ消去](d1c7ad58009f41e2d252)
- [Tiny Core Linux 7でddを使ったHDDデータ消去](28e15e54700dc9aadb44)