NAS向けに購入したHDDの初期不良チェック
自宅で運用している BTRFS ファイルサーバの容量が不足してきたので、新しいHDDを購入しました。そのときの作業のうち、今回はハードディスク初期不良をチェックしたことについてメモしておきます。
HDD:TOSHIBA MN08ADA8
購入時の値段はXPRICE で 17,800 円。当時、XPRICE後払いで支払うと20%相当を請求から値引きというキャンペーンをやっており、これを活用し実質 14,240 円でした。 CMR で NAS 用途の 8TB HDD としては破格だと思います。高信頼をうたう HDD がこの価格ならコスパの面でもかなり良好です。
なお私が運用しているのは NAS といっても相当のワークロードがあるわけではなく、利用者はほとんど私のみ、常時通電している倉庫ぐらいの使い方です。
今回用意したのは 1 台のみです。
初期不良チェック
ストレージプールに組み込む前に不良セクタのチェックを行います。 Western Digital や Seagate であれば自社ハードディスク向けのユーティリティツールがあるようなのですが、東芝は無いみたいなので、以下のサイトを参考に実施することにします。
このページによると、実際の内容は以下のリポジトリから確認ができ、スクリプトも公開されています。
このスクリプトの著者によると、以下の内容を実施しているようです。
- S.M.A.R.T. ショートテストを実施
- badblocks コマンドで全ブロック点検
- 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. の見方には諸説あるようですけども、販売代理店が情報を公開してくれているのは心強いですね。
まとめ
めっちゃ時間がかかった。
「新しいハードディスクを運用する前は初期不良チェックすべし」という話題は何度か見聞きしたことがあったのですが、実際に自分でやってみたのは初めてでした。今後も実施するかもしれないので自分用のメモとして記録しました。