以前からそんな印象はあったのだけれど、今回に調べてみて本当にそうらしいと思えた。
これまで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ノード番号に変換できるので、同じようなことはできる。
後日追記予定
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿