2014年9月23日火曜日

HDDは長いことアクセスしないファイルから壊れる

以前からそんな印象はあったのだけれど、今回に調べてみて本当にそうらしいと思えた。
これまでHDDのエラーは長いことアクセスしていないファイルで起きる印象があったのだが、これはHDDが怪しくなってきたブロックに出会うと回復処理をしていたためと思われる。

smartctlでHDDの情報を見ると以下のようなものがある。
 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       -       5388
 197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       409
Pending_Sectorの方は、エラーが検出されたが回復できていないセクター数を表している。
上記のようなエラーとして現れるケースでカウントアップされるものと思われる。

それでは頻繁にアクセスしているとなぜエラーにならないか。どうも読みだしアクセスであってもリトライが必要など怪しいセクターに出会うと、読めたデータを書き直してリトライ要不要を見る、改善しないならスペアセクターへ移すなどしているようなのだ。そのため、頻繁にアクセスするファイルはリフレッシュがかかり、そうではないファイルにアクセスするとエラーに出会うことになる。

どうしても読めないセクターは書き込めばスペアに移るので、最悪はそのようにするわけだが、どうも定期的にディスク全域をスキャンして回復処理をさせた方がデータを失わずにすみそうに思える。

英語なのだが、Linuxの場合に不良セクターをどう処理するか、以下に良く説明されている。
Linuxの不良セクター回復方法(英語)
FreeBSDの場合もfsdb(8)でブロック番号をiノード番号に変換できるので、同じようなことはできる。
後日追記予定


0 件のコメント:

コメントを投稿