CentOS7 smartctlの見方と不良セクタの修復方法
・smartの見方
# smartctl -A /dev/sda 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 - 173 3 Spin_Up_Time 0x0027 227 180 021 Pre-fail Always - 3641 4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 121 5 Reallocated_Sector_Ct 0x0033 184 184 140 Pre-fail Always - 486 7 Seek_Error_Rate 0x002e 100 253 000 Old_age Always - 0 9 Power_On_Hours 0x0032 053 053 000 Old_age Always - 34589 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 - 121 192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 51 193 Load_Cycle_Count 0x0032 200 200 000 Old_age Always - 69 194 Temperature_Celsius 0x0022 124 109 000 Old_age Always - 26 196 Reallocated_Event_Count 0x0032 191 191 000 Old_age Always - 9 197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 1 198 Offline_Uncorrectable 0x030 100 253 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x0032 200 200 000 Old_age Always - 0 200 Multi_Zone_Error_Rate 0x0008 100 253 000 Old_age Offline - 0
注目すべき値は下記項目
1 Raw_Read_Error_Rate 読み取りエラー発生率 5 Reallocated_Sector_Ct 代替処理済みセクタ数 197 Current_Pending_Sector 代替処理保留中セクタ数 198 Offline_Uncorrectable 代替不能セクタ数 ※「RAW_VALUE」を見ること ※「VALUE」や「THRESH」は値が一定範囲に収まるように正規化されている
・1 Raw_Read_Error_Rate 読み取りエラー発生率
・危険水域は、この値が1以上になった時で、0の時に比べ、60日後の故障確率は39倍になると言われている ・SG製HDDは正常なHDDでも大きな値になるので、参考にはならない
・5 Reallocated_Sector_Ct 代替処理済みセクタ数
・危険水域は、この値が1以上になった時で、0の時に比べ、60日後の故障確率は14倍になると言われている ・HDDの代替セクタ(※)を上回らなければ使用は可能(メーカーやHDDによって数が違う。非公開情報だが、2TBで1000程度はある模様) ・短期間で増えるようであれば早急にバックアップを取って交換する ・増えないのであれば使用は可能だが信頼性は落ちるので、交換した方が無難
・197 Current_Pending_Sector 代替処理保留中セクタ数
・198 Offline_Uncorrectable 不良セクタ数
・危険水域は、この値が1以上になった時で、0の時に比べ、60日後の故障確率は14〜16倍になると言われている ・たまたまデータの読み書きができなかった場合でも増えるため、手動で修復(※後述)すれば解消する場合がある ギリギリ動作しているHDDに対して実施するとトドメとなる場合があるため、手動でやる場合は事前にバックアップを取ること ・修復しても数が0にならない場合は交換した方が無難 ・修復して数が0になっても、その後、短期間で増えるようであれば交換する。
・手動修復方法1
・不良論理ブロックアドレスの特定 # smartctl -t short /dev/sdc # smartctl -a /dev/sdc SMART Self-test log structure revision number 1 Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error # 1 Short offline Completed: read failure 90% 39257 347602 ・不良セクタの計算で使う値の確認 # fdisk -l デバイス 開始位置 終了位置 セクタ サイズ タイプ /dev/sdc1 2048 5860532223 5860530176 2.7T Microsoft 基本データ セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト ・不良セクタの計算 (347602 - 2048) * 512 / 4096 = 43194 ※347602 はsmartctlで調べたLBA_of_first_errorの値 ※2048、512、4096 はfdiskで調べた値 ・不良セクタを使用しているinodeの特定 # sudo debugfs -R "icheck 43194" /dev/sdc1 debugfs 1.44.3 (10-July-2018) Block Inode number 43194 83099729 ※Inode numberが表示されない場合はinodeが使用されていない ・inodeに対応するファイルパスの特定 # sudo debugfs -R "ncheck 83099729" /dev/sdc1 debugfs 1.44.3 (10-July-2018) Inode Pathname 83099729 /application/MovieConvertor4PSP/jre-6u10-beta-windows-i586-p.exe hdparmによる書き込みを実行するとファイルが壊れるので、バックアップからもどすなど適当に対応しておく ・特定した不良論理ブロックアドレスへの書き込み # hdparm --yes-i-know-what-i-am-doing --write-sector 347602 /dev/sdc ※セクター番号 smartctl で特定した値を指定する ※書き込み成功すればエラー件数が減るなどする ・Current_Pending_Sectorが減っていることの確認 # smartctl -a /dev/sdc ※減っていない場合は、減るまで不良論理ブロックアドレスの特定〜特定した不良論理ブロックアドレスへの書き込みを繰り返す
・手動修復方法2
・badblockの特定 # badblocks -vs -o badblocks.txt /dev/sdc1 ・不良セクタの修復(マーキング) # e2fsck -y -l badblocks.txt /dev/sda1 ※不良セクタを使用しないようにマーキングしているだけなので、不良セクタが本当に直るわけではない ・不良セクタの検出と修復をまとめて実施 # fsck -t -y -f -c /dev/sda1