「chkdsk」と修復オプション

ファイルシステムの修復

chkdsk

「chkdsk」は、Windowsで使われているドライブのエラーチェックツールです。
「chkdsk」に「/f」や「/r」のオプションを指定して実行することで、
ファイルシステムを修復することができます。

同時に、「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」の実行

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

まず、文字通り「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」プログラムは、完了するまでに非常に長い時間を要する場合もありますが、
ひたすら待って、一連の作業を完了させてください

「chkdsk」の実行結果と考察

「chkdsk」の実行結果を、具体例とともに示します。

ファイルシステムの修正

ファイルシステムを修正しました - 「chkdsk」実行結果

「chkdsk」の主な役割である、ファイルシステムの修正です。
アクセスできないファイルがある、つまりファイルシステムに異常のあるドライブに対して、
chkdsk /f」を実行した結果
です。
「chkdsk」の使用目的から考えても、最も多いケースだろうと思います。

ファイルシステムの修正が完了したことで、
当該ドライブに対して正常なファイル操作ができるようになりました
ただし、この過程で異常が認められたファイルは削除されています

「不良セクター」について

不良セクター - 「chkdsk」実行結果

不良セクタが存在するハードディスクに対して、「chkdsk /r」を実行した結果です。
「不良セクター」があるにも関わらず、「問題は見つかりませんでした」と表示されます。
不良セクタを「不良セクター」として、ファイルシステムの管理下に置いている状態が正常なのです。

ファイルシステム上の「不良セクター」を修正したい場合は、前述の「chkdsk /b」を使いますが、
ハードディスクに不良セクタが存在しないことが前提です。
実際に不良セクタが発生しているハードディスクの場合は、
「不良セクター」の数値を減らす必要はありません

「回復ファイル」について

回復ファイル - 「chkdsk」実行結果

同様に、アクセスできないファイルがあるドライブに対して「chkdsk /f」を実行した結果です。
「chkdsk」の実行中に、「破損チェーンをファイルに変換しますか?」と問われることがあります。
ここでも「Y」を選択してファイルの回収を試み、結果として5個の回復ファイルが作成されました。
しかし、データが破損したファイルばかりで、実質的には意味がありませんでした
関係の断たれたデータを無理やり結合してファイルにしてあるっぽいです。

一方で、この修復作業の過程で失われたファイルは10個ほどあります。
最後に保存したフォルダごと削除されていました。
このときは元データが別に存在していたので、大事には至りませんでしたが、
「chkdsk」による修復には、ファイル及びそのデータが失われるリスクがある
ということは理解しておいたほうがいいと思います。