ディスクが壊れかけているけどエラーが検出されていない厄介な状態

古都の老兵
2023-03-15
2023-03-15

はじめに

 最近はインフラエンジニアはクラウド関係を触る事が多く、サーバーハードウェアを触る機会が減ってきていると思いますが、先日立て続けにストレージ周りでトラブルがありましたので、参考にして頂ければと思います。

 流石にサーバーですからハードウェアRAID等で冗長化されていると思います。一般的に考えると物理ディスクの1台が壊れたら切り離されると誰もが思う事でしょう。ただし、これは完全に壊れてくれた場合で完全に壊れおらず、壊れかけ状態だと読み書きにリトライが発生してしまい非常にストレージへの読み書きに時間が掛かるようになる。その結果、普通にファイルを参照するだけで体感出来るほど遅くなり、サーバー全体のパフォーマンスが落ちる事になる。
 このような状態に陥るような多くの場合は SMART エラーが検出される事がある。この場合はRAIDコントローラ上でどのストレージで発生しているかが確認できる為、SMARTエラーが発生しているストレージを手動で外す事で対応する事ができる。
 しかし、このSMARTエラーさえ出ずにストレージが同じような状態になる事がある。この様な状態に陥るとサーバーハードウェアメーカーが提供しているRAID関係のツールではどのストレージ上で発生しているか分からない為、smartctl コマンドで各ストレージを確認していく。

smartctl のインストール(RedHat系)

 smartctl はベースシステム内の smartmontools パッケージに含まれており、CentOS7やAlumaLinux8/9、RockyLinux8/9 とも共通だ。

dnf install smartmontools

確認の仕方

 smartctl でサポートされているRAIDコントローラは、MegaRAID/AacRaid/3wareRAID/ArecaRAID等があるが、使っているサーバーがどのRAIDコントローラかを調べる必要がある。自分が使っているコントローラを知っていれば容易かもしれないが、各メーカーでMegaRAID互換のRAIDコントローラを使っていても製品名が違っていたりする事があるので、実際にOS上から確認してみるのが手っ取り早いだろう。

# smartctl --scan
/dev/sda -d scsi # /dev/sda, SCSI device
/dev/bus/0 -d megaraid,8 # /dev/bus/0 [megaraid_disk_08], SCSI device
/dev/bus/0 -d megaraid,9 # /dev/bus/0 [megaraid_disk_09], SCSI device
/dev/bus/0 -d megaraid,10 # /dev/bus/0 [megaraid_disk_10], SCSI device
/dev/bus/0 -d megaraid,11 # /dev/bus/0 [megaraid_disk_11], SCSI device

 上記の例だと megaraid のドライバーを使っている事が分る。またディスクの番号は8~11までの4台存在している事も確認できる。

 使っているRAIDコントローラ、デバイス番号が判明したら各ディスクの状態を確認していく。

# smartctl -a -d megaraid,8 /dev/sda
smartctl 7.1 2020-08-23 r5080 [x86_64-linux-4.18.0-348.2.1.el8_5.x86_64] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Vendor:               ******
Product:              *************
Revision:             A360
Compliance:           SPC-4
User Capacity:        600,000,000,000 bytes [600 GB]
Logical block size:   512 bytes
Rotation Rate:        10020 rpm
Form Factor:          2.5 inches
Logical Unit id:      0x5000cca03c6287ec
Serial number:        *******
Device type:          disk
Transport protocol:   SAS (SPL-3)
Local Time is:        Fri Mar 10 18:07:08 2023 JST
SMART support is:     Available - device has SMART capability.
SMART support is:     Enabled
Temperature Warning:  Enabled

=== START OF READ SMART DATA SECTION ===
SMART Health Status: OK

Current Drive Temperature:     24 C
Drive Trip Temperature:        85 C

Manufactured in week 49 of year 2012
Specified cycle count over device lifetime:  50000
Accumulated start-stop cycles:  45
Specified load-unload count over device lifetime:  300000
Accumulated load-unload cycles:  3094
Elements in grown defect list: 0

Vendor (Seagate Cache) information
  Blocks sent to initiator = 3170189013155840

Error counter log:
           Errors Corrected by           Total   Correction     Gigabytes    Total
               ECC          rereads/    errors   algorithm      processed    uncorrected
           fast | delayed   rewrites  corrected  invocations   [10^9 bytes]  errors
read:    2695745    10022         0   2705767      12013        108.753           0
write:         0    73557         0     73557      74329       2884.291           0
verify: 10825148855    23398         0  10825172253      23479     261044.927           0

Non-medium error count:        0

No Self-tests have been logged

 実行結果の見方だが、最初にディスクの情報があり、SMART関係の情報等があるが、重要なのは Error counter log: 以下だ。特に ECC の delayed の数値を確認する必要がある。上記の結果は少々古いディスクの為、delayed が 0 ではないが異常時は万単位の数値となっている事が多い。また、他のディスクと比較して異常に多い数値が出ているディスクが無いかを確認する。

最後に

 各ディスクへの smartctl 実行時も問題のあるディスクに対しての実行速度が異常に遅かったりとほぼ該当のディスクに異常があると考えられるが、あくまで作業は自己責任でお願い致します。