「chkdsk」と修復オプション

ファイルシステムの修復

chkdsk

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

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

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

従って、ハードディスクにエラーがあるかどうかを調べるために「chkdsk」を走らせるというのは、
誤った使用方法であると言ってもいいかもしれません。
たとえば、すでにそのドライブのファイルシステムで管理されている不良セクタについては、
「chkdsk」を実行しても無視され、そのまま終了します。
ハードディスクのエラーチェックが主目的の場合は、他に方法があります

「chkdsk」による修復に伴うリスク

「chkdsk」による修復には、リスクがあります。
必ず、現在のファイルシステムの管理情報を上書きするからです。
元に戻すことはできません

「chkdsk」のリスクは、大きく2つに分けられます。

  • ハードディスクの損傷が進む
  • ファイル及びそのデータが消失することがある

つまり、物理的か論理的かの違いです。

「chkdsk」は、ハードディスクに対して負荷の高いプログラムです。
重大な問題を抱えたハードディスクに対して、「chkdsk」のような負荷の高いプログラムを実行すると、
今まで読めていたものが読めなくなったり、
最悪、ハードディスクが応答しなくなることがあります。

特に、ハードディスクの状態が末期的な場合には注意が必要です。
ハードディスクのエラーが頻発するような状態で修復を行うと、
いつまで経っても「chkdsk」が終了しなくなる恐れがあります。
「chkdsk」の修復作業が完了しないと、ファイルシステムの整合性は失われます

また、ハードディスクが正常であっても、ファイルシステムに問題が発生することはあります。
そこで、「chkdsk」による修復は役に立つのですが、
「chkdsk」による修復の目的は、Windowsにとって正しいファイルシステムにすることです。
ユーザーにとって必要なファイルを修復することではありません。
従って、その過程でユーザーにとって必要なデータが上書きされることがあります

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

ただし、「chkdsk」も積極的にデータを消すわけではありません。
できるだけ安全に動作しようとします。
「chkdsk」で修復を試みるということは、現在のファイルシステムに問題があるはずです。
この、ファイルシステムに問題が発生した、
直前のファイル操作に関するファイルが影響を受ける可能性が極めて高い
です。

仮に、「chkdsk」によってファイルが削除されたとしても、
ファイル復元ソフトを使ってファイルを復元すればよさそうですが、
ファイルが見つからなかったり、サイズが0バイトになっていて、データが失われていることがあります。
このため、「chkdsk」による修復は極力後回しにすべきです。

必要なデータは、「chkdsk」を実行する前に必ずバックアップを取っておいてください
とはいえ、ファイルシステムに問題がある状態では、ファイル操作がままなりません。
従って、現状のファイルシステムに依存せずデータを扱う必要があります。
具体的には、下記ページ参照。

動作不安定なハードディスクのデータ救出

「chkdsk」の実行

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

まず、文字通り「chkdsk」と入力し、
半角スペースの後、チェック対象となるドライブレターを入力します。
たとえば、「Cドライブ」をチェックしたい場合は、

chkdsk c:

chkdsk c:

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

「chkdsk」の実行対象

ドライブレターを入力することからもわかるように、
「chkdsk」を実行するには、少なくとも対象となるドライブを認識している必要があります
ドライブレターが与えられていない場合、つまりパーティションを認識していない場合は、
「chkdsk」を実行できません。
TestDisk」等を使って、パーティションの復旧を試みてください。

また、「chkdsk」がファイルシステムのチェックをするには、
「chkdsk」が認識できるファイルシステムである必要があります。
たとえば、Microsoftが開発したNTFS、FAT32は対象となりますが、
Linuxのファイルシステムであるext4は対象外です。
指定したドライブのファイルシステムは、「chkdsk」が自動で判別します。

読み取り専用モード

ちなみに、オプションを指定せずそのまま「Enter」キーを押すと、
「chkdsk」を読み取り専用モードで実行できます。
データを上書きしないので、比較的安全に実行することができます。

chkdsk 読み取り専用モード

読み取り専用モードでも、ファイルシステムのエラーはチェックできます。
修正されないだけです。
ファイルシステムに関する現在の状況を確認できるので、これはこれで使いみちがあります。

また、「chkdsk」で時間がかかるのは、ファイルシステムの修正に関する部分がほとんどなので、
読み取り専用モードでの実行は、短時間で終了します。

「chkdsk」の修復オプション

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

/f ファイルシステムを修復する
ドライブ全体のスキャンは行わない。
つまり、ファイルシステムの管理情報の修正に特化したもの
ファイルシステムの修復が主目的である場合は、これ一択。
最も使用頻度の高いオプション。
/r 不良セクタを検出し、不良クラスタから読み出し可能なデータは回収する
また、「/f」のオプション動作を含む
領域内の全セクタをチェックするため、非常に時間がかかる。
読めないデータはそのまま失われるので、過信は禁物。
ちなみに、「/f」でダメだと、こっちでもダメな場合がほとんどです。
「/r」が有効なのは、必要なデータを取り出した後、
不良セクタがあると判明しているハードディスクに対して修復を行う場合
です。
/b ファイルシステムに登録されている不良クラスタをチェックし直す※Vista以降。
また、「/r」のオプション動作を含む
不良セクタのあるハードディスクから、新しいハードディスクへ、
パーティション丸ごと移した場合に有効かと。
詳細は、不良セクタの修復のページを参照。

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

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

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

「/r」のオプションは、「/f」とは比べものにならないぐらい時間がかかります
10倍をはるかに超える時間がかかることも多いので、覚悟しておいてください。
数時間で済めばいいほうで、ハードディスクによっては丸1日以上かかります。

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

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

chkdsk c: /f

「chkdsk」による修復作業が必要な場合は、
上の画像のように、ドライブレターとあわせて修復オプションを入力し、「Enter」キーを押します。

次回のシステム再起動時に、このボリュームのチェックをスケジュールしますか?

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

ファイルシステムを修正するには、管理情報を書き換える必要があるので、
修復対象のドライブを一旦マウント解除する必要があります。
でも当然ながら、システムドライブはシステムの動作中にマウント解除できません。
なので、再起動時に「chkdsk」を実行を予約するか、確認を求められます。

このボリュームを強制的にマウント解除しますか?

同様に、現在使用中のドライブは、マウント解除を求められます。
Windowsのシステムに関係のないドライブは、「chkdsk」を実行するために一旦マウント解除します。

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

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

ドライブのエラーチェックツールとの違い

WindowsのGUIから実行する、ドライブのエラーチェックツールもあります。
ディスクのプロパティからのチェックディスクと言えば、わかるでしょうか。

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

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

チェックディスク (Windows 7)

「Windows 7」だと、2つのオプションがあります。
「chkdsk」のオプションと対比させるとよくわかりますが、

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

です。
ただし、「チェックディスク」のオプションは包含関係になく、個別に指定できます

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

チェックディスク - Windows 8

「Windows 8」以降の「エラーチェック」では、チェックボックスもなく、
エラーがあれば修正を試みるといった感じで、より自動的になっています。
オプションの選択はできません
オプションを指定して実行するには、
前述のように、コマンドプロンプトから「chkdsk」を実行するしかありません。

これらドライブのエラーチェックツールと、「chkdsk」の違いは他にもあります。
「chkdsk」じゃないと、詳細な情報を得られません

詳細の表示 - チェックディスク

一応、ドライブのエラーチェックツールでも、
スキャン完了後に「詳細の表示」をクリックすると内容を確認できますが、
不良セクタに関する項目が表示されません
また、スキャンが完了するまで、実行内容を確認できません。

結果 - chkdsk

「chkdsk」であれば、過程も表示されますし、不良セクタについても確認できます。
「chkdsk」のほうができることが多いので、「chkdsk」を使っておいたほうがいいと思います。