異国見聞私書録

異国から見たこと感じたこと気になったこと。そして時折テクノロジーのお話。

LinuxでHDDが壊れた時の見分け方

先日、外付ストレージとして使っていたハードディスクが壊れた。その際に行ったことをメモしておきたい。なお、このPCのOSにはLinux Mintを使用しており、Ubuntu系のLinuxであることから、それに基づいた記述をしている。

そもそもこの外付ストレージ、かなり荒技でmdadmを使ってのソフトウェアRAID構成をしていた。荒技というのはRAID5とRAID1を結合させて、あたかも一つのストレージに見せるという、ちょっと歪な構成になっていた。なぜこうなっていたというと、余っていたディスクを使ってストレージを作っていたからである。例を図で示すと以下のようになる。

容量の異なるディスクで構成されたディスクアレイだったので、RAID5とRAID1をLVMで束ねて作ってみたのだ。しかし、結果的にディスクが壊れた際の復旧が難しく、バックアップから戻す方法でデータは復活させた。よほどディスクアレイなどに精通している方以外は、この方法でのストレージ構成はお勧めしない。

ハードディスクが壊れる際は、異音がするなど、いろいろパターンがあるが今回はbad sectorが多発しての不具合だったようだ。まずSMARTの結果を見てみると以下のようになった。その前にsmartmontoolsをインストール。

sudo aptitude install smartmontools

そして以下を実行してみる。

sudo smartctl --all /dev/sdd
<一部省略>
=== 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     0x002f   200   200   051    Pre-fail  Always       -       76
3 Spin_Up_Time            0x0027   230   222   021    Pre-fail  Always       -       8466
4 Start_Stop_Count        0x0032   099   099   000    Old_age   Always       -       1006
5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0
7 Seek_Error_Rate         0x002e   200   200   000    Old_age   Always       -       0
9 Power_On_Hours          0x0032   098   098   000    Old_age   Always       -       1780
10 Spin_Retry_Count        0x0032   100   100   000    Old_age   Always       -       0
11 Calibration_Retry_Count 0x0032   100   100   000    Old_age   Always       -       0
12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       997
192 Power-Off_Retract_Count 0x0032   200   200   000    Old_age   Always       -       180
193 Load_Cycle_Count        0x0032   200   200   000    Old_age   Always       -       1006
194 Temperature_Celsius     0x0022   114   098   000    Old_age   Always       -       36
196 Reallocated_Event_Count 0x0032   200   200   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   192   192   000    Old_age   Always       -       1464
198 Offline_Uncorrectable   0x0030   200   200   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       1
200 Multi_Zone_Error_Rate   0x0008   200   200   000    Old_age   Offline      -       1

今回は、 「1 Raw_Read_Error_Rate」と「197 Current_Pending_Sector」の値に注目すべき点がある。Readエラーが頻発しているのと、代替処理保留中セクタ数が突出してカウントされている。代替保留されているセクタが多いということは、異常フラグすら立てられず、代替処理を行なっているということらしい。以下のサイトの説明が大変参考になった。

S.M.A.R.Tの見方とよくある誤解: アルファベット三文字の会 Ver.2

つまりこのディスクは既にほぼ死んでおり、交換時期が来たということだろう。事実、交換後に別のツールで不具合のあったディスクを調べてみた。

sudo badblocks -nvs /dev/sdd

<一部省略>

65459690done, 9:05:17 elapsed. (1526/0/0 errors)
65459691done, 9:05:31 elapsed. (1527/0/0 errors)
65459692done, 9:05:45 elapsed. (1528/0/0 errors)
6.70% done, 9:05:59 elapsed. (1529/0/0 errors)

すると、エラーが出るわ出るわ。途中でチェックを止めてしまったが、やはりもうこのハードディスクはご臨終だったようです。このツールも以下のサイトを参考にしながら使わせていただいた。

FaultyHardware - Community Help Wiki

How to Check your Hard Disk for Bad Blocks in Ubuntu | Tech Hacks

新しいディスクに交換した後のストレージ構成についてはまたの機会に紹介していきたい。