ハードディスクの不良セクター修復
ここ10年位のHDD(ハードディスク)には S.M.A.R.T という機能が内臓されています。このS.M.A.R.T機能(以下 smart)は、HDDの状態情報が保存されていて、情報を見ることができます。Linux や MacOS X では smartctl コマンドで操作することができ、Windowsではsmart関連のアプリケーションがあります。
最新の smartctl コマンドは (ver 1.4以上)、USBハードハードディスクのチップを多くサポートしていて、USB経由でsmartの情報閲覧・操作が可能です。
smart 情報
smart情報の概略をあげると以下のようなものです。
- メーカーや品番、シリアル、容量などの情報
- 稼動してきた時間(日数)
- 電源(PowerON)した回数
- シーク(読み込み)エラー、不良セクター、DMAエラーなどのエラー回数
- HDDの温度
- エラーのログ
- セクターテストの履歴(直近の数件)
これらのsmart情報は、コンピュータの電源を切ってもHDDに情報保存するため、初期の情報から加算されて追記されます。エラーログやテスト履歴などは、最新の数件のみ保存されます。
smart セクターの読み込みテスト
smartは、自らセクターのテスト・プログラム機能をもっていて、このテストはfsckと違い HDDの「物理セクターを読めるか」テストできます。そしてこのテストは、「HDD上で実行するリードテスト」でOSレベルで動作するものではないため、システム稼動状態、マウントされている状態で実行することができるし、システムのリソース(CPU,Memory)を消費しません。
テストとしては、簡単なテスト short(1,2分)や すべてのセクターをチェックする longテスト、そして セクターの範囲指定するテストがある。このテストは定期的にするのが良い。Linuxではsmartdというデーモンでスケジュールすることがでるし、エラーがあった場合、メールなどで報告させることができる。
私の経験上、HDDは定期的にセクターを「読み込み ro」「書き込み rw」しているのが望ましく、磁気の劣化を防止できると考えています。OSは空き容量のセクターを読み込みしない(触らない)。これはファイルシステムのテストプログラムやウィルスチェックであっても同じで、唯一 linuxのbadblockチェックは、空き容量もチェックするができるが、すべてのセクターではありません。したがって定期的なsmart longテストは、HDDの健全維持に貢献できると考えています。(これは根拠がなく経験上で申し訳ない)
smart 不良セクターの修復
さて smart のテストで不良セクターが見つかった場合、どうすればよいのか。
HDDには予備のセクター(代替セクター)が用意されている。不良セクターに対して「0」を書き込みすれば、エラーを判断し、不良セクターと代替セクターを交換してくれる。これによって実質、修復したことになる。但し、代替セクター数に制限があるので無制限に修復できるわけでない。
Windowsでは「イベント・ビュア」に「bad secter」のエラーがあった場合、Linuxでは カーネル・ログ(例えば dmesg)で 「bad bloks」があった場合、「smart long test」を実行して不良セクターを修復する手段があります。
linuxの ext2 ext3 ext4 で例にあげると以下のような修復になります。
- 不良セクターのアドレスを知る(以下 bad secter)
- bad secterをddコマンドで読み取る(何回かトライ)
- エラー、NGであれば、このセクターはエラーと判断
- fdiskの情報により、bad secter が どのパーティションであるか調べる
- tune2fsによりこのパーティションのブロックサイズを調べる
- bad secterとブロックサイズを元に不良ブロックを計算する(以下 bad block)
- dumpfsにより、bad block が使用されているか調べる(以下 使っていると想定)
- dumpfsで、bad blockからi-nodeを特定、ファイル名を調べる
- このファイルを可能な限りバックアップ(cpやddなど)する
- このbad blockを再利用させないように、リネームするなどして、正常なファイルと置き換える
- この「正常なファイル」とは、そのファイルが何であるかよって作業がかわる
- bad blockをddで0に埋める。(bad secterだけでは、失敗する可能性があるため)
- 代替セクターに成功したかどうか smartctlやsmart test で確認する
ddコマンドは細心の注意が必要
ここまでHDDの不良セクターについて説明してきましたが、実際に修復するというのはかなり難しく、危険を伴います。内のスタッフでさえもこの作業については「やりたくない」と思っているはずです。
それは、この不良セクター修復作業は dd コマンドを使うからで。ddコマンドは、HDDの物理的な情報(ビット)を操作・書き換えできるものだから、一歩間違えば部分的なデータはもとより全データを消失したり、システムの起動を不能にしてしまうものです。ddコマンドを操作するには、高レベルな知識と技術が必要で、なおかつ慎重・冷静である必要があります。
そんな訳で、ここで簡単に「ddコマンドの操作」を具体的にあげるには、適切でないので省略しますね。
smart情報を過信しないで
私の場合 Windows であっても 定期的に Linuxをブートして(USBブートなど)smartチェック作業をしています。実際にはWindowsのシステム全体バックアップ作業も兼ねています。
smartのエラー(secter error や DMA error)が周期的に増加している場合は要注意です。HDDが壊れる予兆として「心の準備」「障害の対策準備」をしておきましょう。もちろん、「smart情報の予兆」が無くとも突然壊れることは想定してください。何かに過信すると最悪のケースを引き起こしますから。