Windowsは、「chkdsk」というドライブのエラーチェックツールを備えています。
ハードディスク等について何らかのエラーが発生した場合には、かなり高い確率でお世話になるプログラムです。

chkdsk c: /f

ただ同時に、「chkdsk」は誤解を招きやすいプログラムでもあります。
「chkdsk」は、ハードディスクのエラーをチェックするためのプログラムではありません
ましてや、ハードディスクのエラーを修復するプログラムでもありません。

「chkdsk」は、ファイルシステムのエラーをチェックし、修復するためのプログラムです。
つまり、「chkdsk」がチェックして修復する対象は、あくまでもソフトウェア的なものであり、
決してハードウェア的なものではない
のです。

一応、「chkdsk」で副次的にハードディスクのエラーをチェックすることもできますが、
内容はセクタエラーのチェックに限られ、しかも、管理はクラスタ単位で行われます。
これは、そもそも「chkdsk」の役割が、
異常の可能性があるWindowsのファイルシステムをチェックし、修正するためのものだからです。

従って、ハードディスクにエラーがあるかどうかを調べるために「chkdsk」を走らせるというのは、
誤った使用方法であると言ってもいいかもしれません。
たとえば、すでにそのパーティションのファイルシステムで認識されているセクタエラーについては、
「chkdsk」を実行しても無視され、そのまま終了します。
ハードディスクのエラーチェックが主目的である場合には、
各ハードディスクメーカーから提供されているツール等を使うべきです。

何も修復しない「chkdsk」

「chkdsk」には、いろんな動作オプションがあります。
「chkdsk」はオプションを指定せずに実行すると、一切の修復作業を行いません
文字通り、ディスクのチェックを行うだけです。
これは、自動で修復まで行うと、それが原因で状況がより悪化してしまう危険性があるからです。

「chkdsk」による修復の目的は、Windowsにとって正しいファイルシステムにすることです。
ユーザーにとって必要なファイルを修復することではありません。
従って、その過程でユーザーにとって必要なデータが上書きされることがあります
そもそもWindowsには、ユーザーの必要とするデータがわかりません。
必要なデータを判断する前提となるファイルシステム自体に異常があるからです。
必要なデータがどれなのか、はっきりしない状態で機械任せに作業を行うことになるため、
ユーザーにとって必要なデータが失われる可能性があるのです。

また、「chkdsk」はハードディスクに対して負荷の高いプログラムです。
「chkdsk」で修復を試みるのは、極力後回しにしたほうがいいです。
特に、ハードディスクのセクタエラーが頻発するような状況で修復を行うと、
いつまで経っても「chkdsk」が終了しなくなる恐れがあります。

ただのチェックだけならまだしも、
「chkdsk」での修復作業が完了しないというのは、とってもまずい状態なんです。
ほぼ確実に、パーティション内のファイルシステムの整合性が断たれてしまうからです。
その結果、今まで認識できていたものまで認識できなくなってしまいます。

そして、「chkdsk」による修復作業は、インデックスを上書きすることによって行われています。
つまり、後戻りできません

必要なデータは、「chkdsk」を実行する前に必ずバックアップを取っておいてください
とはいえ、ファイルシステムに問題がある状態では、ファイル操作がままなりません。
従って、ファイルシステムを無視してデータを扱う必要があります。
このような操作ができるソフトとしては、ファイナルデータ等があります。

しつこいようですが、「chkdsk」で修復作業を実行した後、データを元に戻すことはできません
「chkdsk」による修復作業を行う際は、このようなリスクがあることを事前に把握しておいてください。

「chkdsk」を実行する

ここでは、コマンドプロンプトから「chkdsk」を実行してみます。
そのほうが、より詳細な情報を得ることができ、また回復コンソールでの使用等、応用がきくからです。
というわけで、コマンドプロンプトを起動します。

まず、文字通り「chkdsk」と入力し、
半角スペースの後、続けてチェック対象となるドライブを入力します。

例えば「Cドライブ」をチェックしたい場合は、

chkdsk c:

と入力します。
まだ「Enter」キーは押さないでください。

「chkdsk」の修復オプション

比較的よく使う、「chkdsk」の代表的な修復オプションを列挙します。

/f ファイルシステムを修復する
あくまでもソフトウェア的な修復で、ハードディスクのセクタチェックは行わない。
つまり、インデックスの修正に特化したもの
インデックスの修復が主目的である場合は、これ一択でいいです。
最も使用頻度の高いオプション。
/r 不良セクタを特定し、不良クラスタから読み取り可能なデータは回収する
また、「/f」のオプションを包括する。
領域内の全セクタをチェックするため、非常に時間がかかる。
読み取り不能のデータはそのまま失われるので、過信は禁物。
ちなみに、「/f」でダメだと、こっちでもダメな場合がほとんどです。
/b インデックスに記録されている不良クラスタをチェックし直す※Vista以降のみ。
また、「/r」のオプションを包括する。
壊れかけのハードディスクから新しいハードディスクへ、パーティション丸ごと移した場合に有効かと。

上記3つのオプションは、完全な包括関係にあります
「/r」のオプションを指定すると、「/f」も指定したことになり、
「/b」を指定すると、「/r」も「/f」も指定したことになります。

でも実際には、ほとんど「/f」しか使いません
「/f」だけ覚えておいてもいいくらいです。

負荷の高い「/r」オプション

「/r」のオプションは、「/f」とは比べものにならないぐらい時間がかかります
倍とか、そんな生やさしいもんじゃないです。
10倍をはるかに超える時間がかかることも多いので、覚悟しておいてください。

相応に、ハードディスクに対する負荷も高いです。
壊れかけのハードディスクが応答しなくなっても知りません。

大は小を兼ねる的発想で、一見「/r」を使いたくなる気持ちもわからなくはないんですが、
「chkdsk」を実行する目的が何なのかをよく考えたうえで、オプションを選択すべきです。
個人的に、「chkdsk」を使用する状況ではハードディスクの動作が怪しいことが多いので、
極力余計なことはしないほうがいいと考えます。
「/r」オプションを実行するのは、最後でいいです。

chkdsk c: /f

「chkdsk」による修復作業が必要な場合は、
上の画像のように修復オプションを入力し、「Enter」キーを押します。

対象がシステムパーティションの場合、
Windowsの動作中に、修復オプションを指定して「chkdsk」を実行することはできません

ファイルシステムを修正するためにはインデックスを書き換える必要があるので、
修復対象のパーティションを一旦マウント解除する必要があります。
ところが、システムの動作中にシステムパーティションをマウント解除することはできません。
なので、再起動時に「chkdsk」を実行するかどうか、確認を求められます。

「Y」と入力して「Enter」キーを押すと、再起動時に「chkdsk」が実行されます。
「chkdsk」による修復が目的であれば、即座に再起動してください。

「chkdsk」プログラムは、完了するまでに非常に長い時間を要する場合がありますが、
ひたすら待って、一連の作業を完了させてください。

GUIのチェックディスクとの対応

「chkdsk」は、GUIから実行することもできます。
ディスクのプロパティからの「チェックディスク」と言えば、わかるでしょうか。

  1. ドライブ(「Cドライブ」等)の右クリックメニューから「プロパティ」
  2. 「ツール」タブの「チェックする」
  3. 修復オプションを選択してから「開始」

というのが一連の操作です。

操作がGUIになっているだけで、裏でやっていることは結局同じです。
「Windows XP」だと2つのオプションがあり、それぞれ

となっています。

コマンドラインのオプションと対比させるとよくわかりますが、

ファイルシステムエラーを自動的に修復する /f
不良セクタをスキャンし、回復する /r

ということです。
ただし、GUIのオプションは包括関係になく、チェックボックスの見た目通り、個別に選択できます。

Windowsが起動できるのであれば、GUIからチェックディスクを行ったほうが楽ですね。
それでもこれを最初に書かなかったのは、チェックディスクによる修復の危険性を認識してほしかったからです。

ちなみに、「不良セクタをスキャンし、回復する」と書かれていますが、
不良セクタが復活するわけではありませんので、誤解なきよう。
不良セクタを含んだクラスタは不良クラスタとして、ファイルシステム上使わないようにするだけです。