不良セクタのあるハードディスクへの対応

読めないものは読めない

不良セクタのあるハードディスクは、放っておいても状況が良くなることはありません
再起動したところで、意味がないです。
データを読み出そうとしても読み出せないから不良セクタになっているわけで、
原因となっている不良セクタに対処しない限り、状況は変わりません。

ハードディスクに不良セクタがあっても、程度問題なので、
少数であれば実用上はほとんど問題なく、ユーザーが気づかないことも多いですが、
ひどくなると、ハードディスクにまともにアクセスできなくなります。

ユーザーが不良セクタに対処しようというときには、すでに状況が悪化していることが多いと考えられますが、
ハードディスクに対して何もできないわけではありません。
ただし、相応のリスクがあることは理解しておいてください。

不良セクタの確認

不良セクタにも様々なものがありますが、ハードディスクの読み込みに関して特に問題になるのは、
論理的な不良セクタではなく、物理的な不良セクタです。
というわけで、まず問題となる不良セクタが存在するかどうかを調べるには、
ハードディスクのSMART情報を確認します。

ここで不良セクタが確認でき、しかもハードディスクの読み込みがままならないときは、
何らかの手を打つ必要があります。

不良セクタ - CrystalDiskInfo

特に注意すべきは「C5(197)」、つまり「代替処理保留中のセクタ数」(ペンディングセクタ数)です。
※かっこ内の数値は、16進値を10進表記したもの。
「C5(197)」の「生の値」が「0」でなければ、正常にデータを読み出せないセクタがあるということです。
「05」に関しても同様に重要ですが、
不良セクタは「C5(197)」を経て代替処理された後に、「05」としてカウントされるのが一般的です。
データを読み出せないセクタとして検出されたものは、「C5(197)」にカウントされます
まずは、「C5(197)」の「生の値」を見ておくべきかと。

もちろん、「05」の「代替処理済のセクタ数」だけが異様に増えていても問題ですが、
このへん判定と属性値の取り扱いはファームウェア次第なので、適宜判断すべきと思います。

逆に、不良セクタが存在しても、とりあえずハードディスクの読み書きに重大な問題が生じていなければ、
特別急いで何かをしなければならないわけではありません。
何もしないよりは対処したほうがいい場合もありますが、緊急度、重要度共にそれほど高くはありません。

ただし、ハードディスクへのアクセスが不安定な場合は別です。
不良セクタのあるハードディスクへの対応は、緊急で、かつ重要な作業になります。

ディスクコピーを行う

最低限必要な作業は、これだけです。
その他の内容は、補助的なものといってもいいです。

根本的には、不良セクタが正常なセクタに回復することはありません
従って、最も優先度が高いのは、
不良セクタが発生したハードディスクから、正常なハードディスクへデータを移行すること
です。
その後、正常動作するハードディスクを対象に復旧作業を行うべきです。

さもないと、不良セクタが多数存在するハードディスクに対して復旧作業を行ったところで、
元が動作不安定なので、ユーザーの意図した通りの結果を得られないかもしれないからです。

ところが、不良セクタが多数存在するハードディスクでは、データのコピーすらままなりません。
不良セクタの箇所で、データの読み出しに失敗するからです。
従って、不良セクタを意図的にスキップしてデータを転送する必要があります。

特に、不良セクタのあるハードディスクに特化したディスクコピーツールとして、
「ddrescue」があります。

ddrescue

「ddrescue」の使い方

不良セクタの代替処理を行う

ディスクコピーを行うには、同容量以上のハードディスクが必要になるため、
気軽にすぐ実行できるものではありません。
そこで二次的な手段として、不良セクタのあるハードディスクの状態を改善する方法を考えます。
ただし、ディスクコピーに比べてリスクは高いです。

不良セクタにおいてデータの読み出しに問題が発生するのは、
読めない不良セクタを読み続けるからです。
この場合、不良セクタのデータをあきらめ、不良セクタの代替処理を促進させると、
ハードディスクとしてはデータの転送が滞りなく行えるようになります

HDAT2を使って、読み出しエラーの発生するセクタに書き込み命令を送ることで、
セクタ代替処理を促進できます。

HDAT2

「HDAT2」による不良セクタの修復

ペンディングセクタを代替処理した後のハードディスクは、
一時的にでも、読み出しエラーが発生しにくい状態となります。
その間に、必要な復旧作業を試みるのは有効です。

ただし、致命的な状況を脱したからといって、継続使用するのはおすすめしません。
本質的には、ハードディスクの状態は変わっていないからです。

不良セクタを使わないようにする

不良セクタが少数で、手軽に対処しておきたい場合は、
「chkdsk」を実行するのが有効です。
「chkdsk」によって不良セクタが検出されると、
不良セクタを含むクラスタは、以後ファイルシステム上使われなくなります。

ただし、「chkdsk」は万能ではありません
ファイルシステムの機能で不良セクタに対応しようとするもので、
ハードディスクの不良セクタを直接操作するものではありません。
これまで書いてきたような、不良セクタを根本的にどうにかするものとは異なります。

状態の悪いハードディスクに対して「chkdsk」を実行すると、作業が完了しなくなる恐れがあります。
それでも「chkdsk」に触れるのは、不良セクタに対処する手段であることには違いなく、
正しく使用すれば、「chkdsk」が有効なケースは多いからです。

やってはいけないのは、必要なデータをバックアップすることなく、
不良セクタが多数存在するような状態の悪いハードディスクに対して、「chkdsk」をいきなり実行すること。
従って、ハードディスクの状態確認は先に行っておくべきで、
素性のわからないものに「chkdsk」を実行するのは避けたほうがいいです。
ほとんどバクチです。

chkdsk

「chkdsk」と修復オプション

「chkdsk」の詳細は上記ページに任せるとして、不良セクタに関するオプションは2種類あります。
「/r」と「/b」です。

違いがわかりにくいので、ざっくりとだけ説明します。

/r ハードディスクの不良セクタがそのままの状態で、
「chkdsk」によって不良セクタを回避したい場合
/b ハードディスクに存在していた不良セクタが正常なセクタに置き換わっているのに、
ファイルシステム上の不良セクタがそのまま残っているのを修正したい場合。

早い話が、「chkdsk」のみで不良セクタに対処したい場合は「/r」
前述の方法等で不良セクタの状況が変わった時に使うのが「/b」。
というわけで、実際に使う機会が多いのは「/r」だと思います。

具体的には、コマンドプロンプト(Windows PowerShell)を管理者として実行し、

chkdsk e: /r

chkdsk (対象のドライブ) /r

と入力して「Enter」キー

「/r」での修復に成功すれば、その後不良セクタの代替処理を行う必要はありません。
もうその領域は使われませんので。