新規購入したHDDの初期不良のチェックやRAIDアレイの再構成が一段落ついたので、 先日故障が発覚したHDD(Seagate Barracuda 3.5, ST3000DM008-2DM166)で遊んでみたいと思います。
とにかくドライブのサイズがそれなりに大きいので、一つのコマンドの結果が返ってくるまでに5時間など当たり前なので、一日一コマンドづつしか入力できないのがもどかしいのですが、まあ折角ですので、これまで何度もやっているとはいえ、訓練を重ねることは悪いことではありません。
今回はまず、不良セクタを何とかしたいと思います。
今回の状況としては、/dev/sddとして接続し、ext4の単体ドライブとしてmkfs.ext4をしなおしたうえでrsyncコマンドで元のRAIDの内容をコピーしてある状況を作りました。
まずは異常セクタの特定から行いたいのですが、前回書いた通り、smartctl -t longテストでは異常なしとか平気で言い放つ始末で手に負えません。
実際には以下のパラメータが48まで上昇しているにもかかわらず、です。
・197 Current_Pending_Sector
・198 Offline_Uncorrectable
そこで、badblocksコマンドを用いて異常セクタを検出したいと思います。
まあ、念のため、再度ブロックサイズを確認します。
1 2 | # tune2fs -l /dev/sdd1|grep -i "block size" Block size: 4096 |
1 2 3 4 | # nohup badblocks -b 4096 -vs -o badblocks.txt /dev/sdd1& tail -f nohup.out Checking blocks 0 to 732566271 100.00% done, 5:23:20 elapsed. (139/0/0 errors) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x000f 097 093 006 Pre-fail Always - 40328485 3 Spin_Up_Time 0x0003 096 096 000 Pre-fail Always - 0 4 Start_Stop_Count 0x0032 100 100 020 Old_age Always - 6 5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 8 7 Seek_Error_Rate 0x000f 076 060 030 Pre-fail Always - 49566908 9 Power_On_Hours 0x0032 063 063 000 Old_age Always - 32571 10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 0 12 Power_Cycle_Count 0x0032 100 100 020 Old_age Always - 6 183 Runtime_Bad_Block 0x0032 100 100 000 Old_age Always - 0 184 End-to-End_Error 0x0032 100 100 099 Old_age Always - 0 187 Reported_Uncorrect 0x0032 001 001 000 Old_age Always - 262 188 Command_Timeout 0x0032 100 100 000 Old_age Always - 0 0 0 189 High_Fly_Writes 0x003a 099 099 000 Old_age Always - 1 190 Airflow_Temperature_Cel 0x0022 076 060 045 Old_age Always - 24 (Min/Max 20/26) 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 - 4 193 Load_Cycle_Count 0x0032 073 073 000 Old_age Always - 55928 194 Temperature_Celsius 0x0022 024 040 000 Old_age Always - 24 (0 13 0 0 0) 197 Current_Pending_Sector 0x0012 094 094 000 Old_age Always - 1112 198 Offline_Uncorrectable 0x0010 094 094 000 Old_age Offline - 1112 199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0 240 Head_Flying_Hours 0x0000 100 253 000 Old_age Offline - 32556h+15m+05.395s 241 Total_LBAs_Written 0x0000 100 253 000 Old_age Offline - 25786278431 242 Total_LBAs_Read 0x0000 100 253 000 Old_age Offline - 1151768457351 |
1 2 | # 1 Short offline Completed: read failure 90% 32571 - # 2 Extended offline Completed without error 00% 32452 - |
全然教えてくれる気はないようです。
しかし、前回、異常が発生しているにもかかわらずエラーなし(#2です)で正常終了していたのが、read failureで異常終了(#1です)しているのはせめてもの事でした。
異常なしっていう時点でおかしいですもの。
まあ、HDDが異常セクタを教えてくれないとのことですので、それならばbadblocksで検出した139の異常セクタをどうにかすればsmart値はどうなるのかを見ていきたいと思います。
その前に、異常セクタにあるファイルを削除するため、先ほどのbadblocksコマンドで生成された badblocks.txt に記録されているセクタ番号をもとに、debugfsコマンドでセクタ番号から使用されているinode番号を取得して、そのinode番号をもとにファイル名を特定します。
無論、すぐに廃棄する予定のHDDでここまでする必要はないのですが、せっかくの演習ですから壊れても惜しくない大容量HDD(いや、もう壊れているのですが)、有効活用してみたいと思います。
まずは指定したセクタに何らかのデータが記録されているかを調べるには以下です。
セクタ番号が524726232として、icheck <セクタ番号>で調査します。
1 2 3 4 | # debugfs -R "icheck 524726232" /dev/sdd1 debugfs 1.42.9 (28-Dec-2013) Block Inode number 524726232 117966080 |
1 2 3 4 | # debugfs -R "icheck 620236906" /dev/sdd1 debugfs 1.42.9 (28-Dec-2013) Block Inode number 620236906 <block not found> |
1 | # debugfs -R "ncheck 117966080" /dev/sdd1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 | # dd if=/dev/zero of=/dev/sdd1 bs=4096 count=1 seek=524726232 1+0 レコード入力 1+0 レコード出力 4096 バイト (4.1 kB) コピーされました、 0.00141101 秒、 2.9 MB/秒 # sync # smartctl -a /dev/sdd1 ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE (略) 5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 8 (略) 197 Current_Pending_Sector 0x0012 094 094 000 Old_age Always - 1104 198 Offline_Uncorrectable 0x0010 094 094 000 Old_age Offline - 1104 (略) |
1 2 3 | 5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 8 197 Current_Pending_Sector 0x0012 100 094 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0010 100 094 000 Old_age Offline - 0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # fsck.ext4 -l badblocks.txt /dev/sdd1 e2fsck 1.42.9 (28-Dec-2013) /dev/sdd1: Updating bad block inode. Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information Free blocks count wrong for group #18928 (23698, counted=23699). Fix<y>? yes Free blocks count wrong for group #19312 (24543, counted=24544). Fix<y>? yes Free blocks count wrong for group #20416 (24543, counted=24544). Fix<y>? yes Free blocks count wrong for group #22000 (24543, counted=24544). Fix<y>? yes Free blocks count wrong for group #22032 (24542, counted=24544). Fix<y>? yes Free blocks count wrong (63487139, counted=63487145). Fix<y>? yes /dev/sdd1: ***** FILE SYSTEM WAS MODIFIED ***** /dev/sdd1: 97313/183148544 files (1.5% non-contiguous), 669079127/732566272 blocks |
1 | # smartctl -t long /dev/sdd |
0 件のコメント:
コメントを投稿