NAS向けに購入したHDDの初期不良チェック

自宅で運用している BTRFS ファイルサーバの容量が不足してきたので、新しいHDDを購入しました。そのときの作業のうち、今回はハードディスク初期不良をチェックしたことについてメモしておきます。

HDD:TOSHIBA MN08ADA8

東芝NAS 向け 8TB ハードディスクです。

購入時の値段はXPRICE で 17,800 円。当時、XPRICE後払いで支払うと20%相当を請求から値引きというキャンペーンをやっており、これを活用し実質 14,240 円でした。 CMR で NAS 用途の 8TB HDD としては破格だと思います。高信頼をうたう HDD がこの価格ならコスパの面でもかなり良好です。

なお私が運用しているのは NAS といっても相当のワークロードがあるわけではなく、利用者はほとんど私のみ、常時通電している倉庫ぐらいの使い方です。

今回用意したのは 1 台のみです。

初期不良チェック

ストレージプールに組み込む前に不良セクタのチェックを行います。 Western DigitalSeagate であれば自社ハードディスク向けのユーティリティツールがあるようなのですが、東芝は無いみたいなので、以下のサイトを参考に実施することにします。

このページによると、実際の内容は以下のリポジトリから確認ができ、スクリプトも公開されています。

このスクリプトの著者によると、以下の内容を実施しているようです。

  1. S.M.A.R.T. ショートテストを実施
  2. badblocks コマンドで全ブロック点検
  3. S.M.A.R.T. ロングテストを実施

せっかくなので、手動でやってみることにします。

S.M.A.R.T. ショートテスト

今回テストするハードディスクは /dev/sdb に接続されています。

$ sudo smartctl -t short /dev/sdb
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-91-generic] (local build)
Copyright (C) 2002-19, 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 Dec 15 20:36:18 2021 JST
Use smartctl -X to abort test.

言われたとおりに数分待ったあと、結果を確認します。

$ sudo smartctl -A /dev/sdb
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-91-generic] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000b   100   100   050    Pre-fail  Always       -       0
  2 Throughput_Performance  0x0005   100   100   050    Pre-fail  Offline      -       0
  3 Spin_Up_Time            0x0027   100   100   001    Pre-fail  Always       -       12131
  4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       4
  5 Reallocated_Sector_Ct   0x0033   100   100   050    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000b   100   100   050    Pre-fail  Always       -       0
  8 Seek_Time_Performance   0x0005   100   100   050    Pre-fail  Offline      -       0
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       0
 10 Spin_Retry_Count        0x0033   100   100   030    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       4
191 G-Sense_Error_Rate      0x0032   100   100   000    Old_age   Always       -       0
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       2
193 Load_Cycle_Count        0x0032   100   100   000    Old_age   Always       -       4
194 Temperature_Celsius     0x0022   100   100   000    Old_age   Always       -       22 (Min/Max 15/24)
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0030   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       0
220 Disk_Shift              0x0002   100   100   000    Old_age   Always       -       33554435
222 Loaded_Hours            0x0032   100   100   000    Old_age   Always       -       0
223 Load_Retry_Count        0x0032   100   100   000    Old_age   Always       -       0
224 Load_Friction           0x0022   100   100   000    Old_age   Always       -       0
226 Load-in_Time            0x0026   100   100   000    Old_age   Always       -       516
240 Head_Flying_Hours       0x0001   100   100   001    Pre-fail  Offline      -       0

badblocks コマンドで全ブロック点検

$ sudo nohup badblocks -b 4096 -e 1 -vsw -o sdb.bb /dev/sdb

Checking for bad blocks in read-write mode
From block 0 to 1953506645
Testing with pattern 0xaa: done
Reading and comparing: done
Testing with pattern 0x55: done
Reading and comparing: done
Testing with pattern 0xff: done
Reading and comparing: done
Testing with pattern 0x00:  99.13% done, 75:55:37 elapsed. (0/0/0 errors)

Interrupted at block 1936496128

オプションの意味は以下の通りです。(作者のページにもあります)

  • -b 4096: ブロックサイズを指定する。S.M.A.R.T. 情報により1ブロック4096バイトであることを確認できているので、4096を指定。
  • -e 1: 1つ以上の不良セクタが見つかったら途中終了。
  • -v: 詳細出力。
  • -s: 進捗を表示。
  • -w: 各ブロックにパターンを書き込み、その通りに読み込みができるかを確認する。(0xaa, 0x55, 0xff, 0x00 の4パターン) これを指定するとディスクの内容が消えます。
  • -o sdb.bb: sdb.bb ファイルに不良セクタを記録。

このログは途中終了していますが、原因は ssh で接続していたターミナルウィンドウを間違って閉じてしまったことによるものです。全ブロックを3週チェックできたみたいなので、OK としました。75 時間以上やってるし。

一応、不良ブロックファイルに何も記録されていないことを確認します。

$ ls -l sdb.bb
-rw-r--r-- 1 root root 0 Dec 15 20:42 sdb.bb

S.M.A.R.T. ロングテスト

$ sudo smartctl -t long /dev/sdb
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-91-generic] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Extended self-test routine immediately in off-line mode".
Drive command "Execute SMART Extended self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 680 minutes for test to complete.
Test will complete after Sun Dec 19 12:07:26 2021 JST
Use smartctl -X to abort test.

11時間かかると。こちらも言われたとおりの時刻まで待ってから結果を確認します。

$ sudo smartctl -A /dev/sdb
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-91-generic] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000b   100   100   050    Pre-fail  Always       -       0
  2 Throughput_Performance  0x0005   100   100   050    Pre-fail  Offline      -       0
  3 Spin_Up_Time            0x0027   100   100   001    Pre-fail  Always       -       12131
  4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       4
  5 Reallocated_Sector_Ct   0x0033   100   100   050    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000b   100   100   050    Pre-fail  Always       -       0
  8 Seek_Time_Performance   0x0005   100   100   050    Pre-fail  Offline      -       0
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       88
 10 Spin_Retry_Count        0x0033   100   100   030    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       4
191 G-Sense_Error_Rate      0x0032   100   100   000    Old_age   Always       -       0
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       2
193 Load_Cycle_Count        0x0032   100   100   000    Old_age   Always       -       4
194 Temperature_Celsius     0x0022   100   100   000    Old_age   Always       -       17 (Min/Max 15/28)
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0030   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       0
220 Disk_Shift              0x0002   100   100   000    Old_age   Always       -       84934658
222 Loaded_Hours            0x0032   100   100   000    Old_age   Always       -       87
223 Load_Retry_Count        0x0032   100   100   000    Old_age   Always       -       0
224 Load_Friction           0x0022   100   100   000    Old_age   Always       -       0
226 Load-in_Time            0x0026   100   100   000    Old_age   Always       -       516
240 Head_Flying_Hours       0x0001   100   100   001    Pre-fail  Offline      -       0

これの確認ポイントですが、東芝ハードディスク販売代理店のフィールドレイク社のFAQによると、以下の値が重要とのことです。

  • 05(0x05) Reallocated Sectors Count
  • 187(0xBB) Reported Uncorrectable Errors
  • 188(0xBC) Command Timeout
  • 197(0xC5) Current Pending Sector Count
  • 198(0xC6) Uncorrectable Sector Count

187/188 の値は確認できませんが、他は 0 なので問題なさそうです。 S.M.A.R.T. の見方には諸説あるようですけども、販売代理店が情報を公開してくれているのは心強いですね。

まとめ

めっちゃ時間がかかった。

「新しいハードディスクを運用する前は初期不良チェックすべし」という話題は何度か見聞きしたことがあったのですが、実際に自分でやってみたのは初めてでした。今後も実施するかもしれないので自分用のメモとして記録しました。