ハードディスクの物理障害で、比較的ありがちなものとして、不良セクタがあります。
ハードディスク内に不良セクタが存在すると、正常な読み書きが行えない場合があるので、
状況によってはユーザー側で対処する必要があります。

不良セクタ

でもここで問題なのは、「不良セクタ」という単語が指し示しているものが、必ずしも同一ではないことです。
具体的には、

  • ファイルシステム上の不良セクタ
  • ファームウェアで認識されている不良セクタ
  • 物理的な不良セクタ

これらは一見同じようで、微妙に違います。

不良セクタがあると、その箇所において正常な読み書きができなくなりますから、
パソコンはシステム全体としてこれを回避するような仕組みを持っています。
つまり、特段ユーザーが意識しなくても、自動的に不良セクタを使わないような処理がなされています。

不良セクタが問題になるのは、これらの処理に問題がある場合です。
そうすると、不良セクタが何なのか、どうやったら復旧できるのかといったことを考える必要が出てきます。

ファイルシステム上の不良セクタ

「不良セクタ」という単語がユーザーの目にとまる最たるものが、「chkdsk」実行後の画面だと思います。

CHKDSK - 不良セクタ

「○KB : 不良セクタ」という形で表示されます。

ここで表示されているのは、そのパーティションのファイルシステムで認識されている不良セクタです。
「chkdsk」で不良セクタが検出されたからといって、すぐさま再度「chkdsk」を実行しても、この数値は減りません。

不良セクタとは、正常な読み書きができないセクタのことですから、
ファイルを読み書きする仕組みであるファイルシステムとしても、不良セクタは避けるべきものです。
ファイルシステムは、不良セクタが検出されると、不良セクタを含むクラスタの場所を記録します。
そして、今後その場所を使わないようにします。
その領域のサイズが、「chkdsk」後の「不良セクタ」として表示されています。

ところで、ファイルシステムはセクタ単位ではなく、クラスタ単位で情報を管理しています
ファイルのプロパティでも、「サイズ」と「ディスク上のサイズ」というのが別々に表示されているとおりです。
NTFSパーティションなら、クラスタサイズ(アロケーションユニットサイズ)は4KBになっていることが多いので、
「chkdsk」で検出される不良セクタも4KB単位になっているはずです。
つまり、

クラスタサイズ×不良クラスタ数=「chkdsk」で表示される不良セクタ

となります。
従って、「chkdsk」で表示される不良セクタの分だけ実際の不良セクタが存在しているわけではありません。
実際の不良セクタに比べると、かなり大きい数値に切り上げられています。

「chkdsk」で表示されているのは、ファイルシステムに認識されている不良セクタ(というより不良クラスタ)なので、
これが正しく認識されているのであれば、あえてこの数値を減らす必要はありません
それは、不良セクタが使われないための処理がなされていることを意味するからです。
無理にこの数値を減らそうとするのは、実際の不良セクタを使おうとするのと同義です。
「chkdsk」を実行する度に不良セクタが増えるようなら問題ですが、
不良セクタのサイズが一定のままなら、一旦は落ち着いているといえます。

一方、古いハードディスクから新しいハードディスクへパーティションを丸ごとコピーした場合は、
不良セクタが存在していないのに、ファイルシステム上は不良セクタが記録されたままになります。
この状態を解消するには、やはり「chkdsk」を使用します。
具体的には、

chkdsk c:(対象のドライブレター) /b

と入力して実行します。
インデックスに記録されている不良セクタの情報を無視して、不良セクタをチェックし直します。

CHKDSK - 不良クラスタ削除

対象領域に不良セクタがなくなっていれば、
途中、セキュリティ記述子の検査において、不良クラスタの登録が削除されます。

CHKDSK - 不良セクタの回復

ファイルシステムが修正され、不良セクタがゼロになりました。

ただし、「chkdsk」で不良セクタを修復できるわけではありません
この操作の目的は、ファイルシステムの情報を修正することにあります。
※先の例は、「HDAT2」で不良セクタを修復した後、「chkdsk」でファイルシステムを修復したもの。

別の方法として、フォーマットし直しても、ファイルシステム上の不良セクタの情報はリセットされます。
もちろん、ファイルもすべて消えます。

ファームウェアで認識されている不良セクタ

この不良セクタの多くは、Windows等のOSからは見えません。
OS側で対応しなくてもいいように、ハードディスクのファームウェアで不良セクタを判別しているからです。
OS側で対応したものがファイルシステムで認識されている不良セクタだとすると、
これはもっと前の段階、ハードディスクの中だけで完結しているものです。

この不良セクタは、ハードディスクの動作を司るファームウェアによって管理されています。
ファームウェアで管理している情報をユーザーが知るには、SMART属性値を見ればいいです。
「SMART」とは、ハードディスクの自己診断機能です。
ハードディスク内部の状態を知るには、このSMART属性値を見るのが一番手っとり早いです。

SMART属性値を確認するには、それ用のツールを使います。
代表的なものとして、CrystalDiskInfoがあります。

CrystalDiskInfo - SMART属性値

SMART属性値の詳細については、下記ページ参照。

不良セクタに関するSMART属性値 - SMART属性値と不良セクタ

特に、不良セクタに関して修正可能なSMART属性値があります。
「C5(197)」、代替処理保留中のセクタ数です。

代替処理保留中のセクタは、少なくとも実際に読み取りエラーが発生したセクタであり、
しかもまだそれを使っている状態です。
セクタ代替処理済であれば、再び不安定なセクタを使うことはありません
ファームウェアが不良セクタと判断して、不安定なセクタを使うのをあきらめた状態だからです。

もし、不安定なセクタが原因でハードディスクに正常なアクセスができないとしたら、
代替処理保留中の不安定なセクタを白黒はっきりさせることには意味があります。

代替保留セクタの代替処理は、該当セクタへの書き込みがあったタイミングで行われます。
従って、ゼロフィルを行えば「C5(197)」の値はゼロになります。
ただし、ゼロフィルしてしまうと、同時にすべてのデータが失われます。
できることならデータは保持したまま、でも不良セクタのある箇所は修復したいものです。

そこで、極力データを維持したままセクタ代替処理を行わせるツールがあります。
下記ページは、その一例です。

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

物理的な不良セクタ

最終的な原因、ハードディスクのプラッタ上にある不良セクタです。

不良セクタとは、正常な読み書きができないセクタのことです。
物理的な不良セクタは、修復できません。
物理セクタにおいて読み書きが不安定なものは、どうしようもありません。
根本的には、ハードディスクの交換が必要です。

不良セクタの物理的な欠陥は修復できませんが、
これまでに書いてきた不良セクタを回避する仕組みを使って、論理的に正常なデータのやりとりをすることはできます。

不良セクタの判定基準はファームウェアによって異なり、
またファイルシステム側でも別の判定基準を設けています

それらがすべて正しく機能していればいいんですが、必ずしもそういうわけではありません。
不良セクタの修復とは、これらの仕組みが正しく機能できるよう対処することです。
それ以上のことをするには、専用の装置や部品の交換が必要になってきます。