CHKDSK とその新しいスイッチ /C および /I について

文書翻訳 文書翻訳
文書番号: 187941 - 対象製品
この記事は、以前は次の ID で公開されていました: JP187941
Microsoft Windows XP については、次の資料を参照してください。 314835
すべて展開する | すべて折りたたむ

目次

概要

Windows NT 4.0 Service Pack 4 (SP4) および Windows 2000 では、Chkdsk.exe に新しいスイッチが 2 つ追加されています。これらのスイッチにより、CHKDSK または AUTOCHK の実行によって発生するダウンタイムの管理が容易になります。

Windows NT 4.0 SP4 および Windows 2000 に追加された /C および /I スイッチは、対象のドライブが NTFS 形式である場合にのみ有効です。これらのスイッチは、NTFS データ構造の整合性を検証するために通常実行する特定の操作を省略するよう、CHKDSK ルーチンに指示するものです。

警告 : /f スイッチを指定して CHKDSK を実行した場合、CHKDSK プロセスを中断するとディスクの整合性は保証されません。/f スイッチを指定した場合には、CHKDSK プログラムを中断しないことをお勧めします。

詳細

Chkdsk.exe は、Windows 上のファイル システムの論理的な整合性を検証するプログラムのためのコマンド ライン インターフェイスです。CHKDSK が論理的な不整合を検出すると、読み取り専用モードでない場合、ファイル システムのデータの修復を試みます。

CHKDSK をオンラインで実行する場合、実際に検証を実行するコードは、Untfs.dll や Ufat.dll などのユーティリティ DLL に存在します。Chkdsk.exe が呼び出す検証ルーチンは、エクスプローラやディスクの管理ユーティリティのグラフィカル ユーザー インターフェイスでボリュームが検証される場合と同じものです。ただし、CHKDSK を再起動時に実行するようにスケジュールした場合、検証コードが含まれているバイナリ モジュールは Autochk.exe です。Autochk.exe は、Windows のネイティブ アプリケーションで、仮想メモリや Win32 サービスが利用できないブート シーケンスの初期の段階で実行されます。Autochk.exe は Chkdsk.exe によって呼び出されるユーティリティ DLL と同様の出力テキストを生成しますが、Autochk.exe はこの出力テキストをブート処理中の画面に表示するだけでなく、アプリケーション イベント ログにもイベントを記録します。記録されるイベント情報には、イベント ログのデータ バッファに収まる限り、できるだけ多くの出力テキストが含まれます。

Chkdsk.exe によって使用されるユーティリティ DLL と Autochk.exe の検証コードは同じソース コードに基づいているため、この資料の残りの部分では、これらの総称として "CHKDSK" という用語を使用します。また、この資料では NTFS ボリュームに対する CHKDSK の変更だけを対象としているため、CHKDSK の動作について記述された内容は NTFS ボリュームに対する操作を示します。

/C および /I スイッチを使用する場合、CHKDSK の実行後もボリュームが破損したままになる可能性があるため、これらのスイッチはダウンタイムを最小にしなければならない場合にのみ使用することをお勧めします。これらのスイッチの使用は、非常に大きなボリュームに対して CHKDSK を実行しなければならず、ダウンタイムの管理に柔軟性を持たせることが必要な状況を対象としています。

どのような状況においてこれらのスイッチを使用することが適切であるかを判断するには、NTFS 内部データ構造体の一部、発生する可能性のある破損の種類、ボリュームの検証時に CHKDSK が実行する操作、および CHKDSK の通常の検証手順を省略した場合に起こる可能性のある結果についての基本的な理解を持つことが重要です。

CHKDSK の処理は、ボリューム上のすべてのメタデータを検証する 3 つの主要なステージと、オプションの 4 番目のステージに分かれます。メタデータとは、"データに関するデータ" です。メタデータはいわばファイル システムのオーバーヘッドであり、ボリュームに保存されているすべてのファイルに関する情報を追跡します。メタデータには、特定のファイルに対するデータがどのアロケーション ユニットに作成されているか、どのアロケーション ユニットが解放されているか、どのアロケーション ユニットに不良セクタが含まれているか、などの情報が含まれます。一方、ファイルに含まれるデータは、"ユーザー データ" と呼ばれます。NTFS は、トランザクション ログを使用することにより、そのメタデータを保護します。ユーザー データはこの方法では保護されません。

CHKDSK の最初のステージでは、CHKDSK がファイルを検証していることを示すメッセージが表示され、検証の完了した割合が 0% から 100% まで表示されます。このステージでは、ボリュームのマスタ ファイル テーブル (MFT) 内の各ファイル レコード セグメント (FRS) が CHKDSK により検証されます。NTFS ボリューム上のすべてのファイルおよびディレクトリは、MFT 内の特定の FRS により、一意に識別されます。このステージで "パーセント終了しました" に表示される数値は、CHKDSK が検証した MFT の割合を示しています。このステージでは、CHKDSK により各 FRS 内部の一貫性が検証され、2 つのビットマップが構築されます。一方のビットマップは使用中の FRS を表し、もう一方はボリューム上で使用中のクラスタを表します。このステージの終わりに、MFT 内およびボリューム全体の両方で、使用中の領域と使用可能な領域が CHKDSK により特定されます。NTFS は、ディスクに保存されている独自のビットマップ内でこの情報を追跡します。その結果は、NTFS が保持するビットマップと比較されます。不一致がある場合、その不一致は CHKDSK の出力に書き込まれます。たとえば、使用中だった FRS が破損していることが判明した場合、その FRS に関連付けられているディスク クラスタは CHKDSK ビットマップ内で "使用可能" とマークされますが、NTFS ビットマップ内では "使用中" とマークされます。

CHKDSK の 2 番目のステージでは、CHKDSK がインデックスを検証していることを示すメッセージが表示され、完了した割合が再度 0% から 100% まで表示されます。このステージでは、ボリューム上の各インデックスが CHKDSK により検証されます。インデックスは、原則的に NTFS ディレクトリです。このステージで "パーセント終了しました" に表示される数値は、ボリュームでチェック済みのディレクトリの総数の割合を示しています。このステージでは、CHKDSK によりボリューム上の各ディレクトリが検証され、内部の一貫性がチェックされて、MFT 内の FRS により表されるファイルとディレクトリのすべてが、最低でも 1 つのディレクトリで参照されているかどうかが検証されます。さらに、ディレクトリで参照されるファイルまたはサブディレクトリのすべてが有効な FRS として実際に MFT 内に存在するかどうかが確認され、循環ディレクトリ参照もチェックされます。最後に、ファイルのタイムスタンプおよびファイル サイズ情報が、それらのファイルのディレクトリ一覧で最新のものであるかどうかが確認されます。このステージの終わりでは、"孤立した" ファイルがないかどうかと、すべてのディレクトリ一覧にあるファイルすべてが正当なものであるかどうかが CHKDSK により確認されます。孤立したファイルとは、正当な FRS が存在するが、どのディレクトリ一覧にも存在しないファイルのことです。孤立したファイルが検出され、正当なディレクトリがまだ残っている場合は、多くの場合そのディレクトリに復元できます。ファイルを保持していた正当なディレクトリが既に存在しない場合は、CHKDSK によりルート ディレクトリにディレクトリが作成され、ファイルがそこに配置されます。使用中でなくなった FRS、または使用中だがディレクトリ一覧に含まれているファイルに対応しない FRS に対するディレクトリ一覧が CHKDSK により検出された場合、その FRS に対するディレクトリ エントリは削除されます。

CHKDSK の 3 番目のステージでは、CHKDSK がセキュリティ記述子を検証していることを示すメッセージが表示され、進行状況が "パーセント終了しました" に再度 0% から 100% まで表示されます。このステージでは、ボリューム上のファイルまたはディレクトリに関連付けられている各セキュリティ記述子が、CHKDSK により検証されます。セキュリティ記述子には、ファイルまたはディレクトリの所有者、ファイルまたはディレクトリに対する NTFS アクセス許可、ファイルまたはディレクトリの監査に関する情報が含まれています。この場合の "パーセント終了しました" に表示される数値は、ボリュームでチェック済みのファイルとディレクトリの割合を示しています。ここでは、各セキュリティ記述子の構造の形式が正しいかどうかと、内部に一貫性があるかどうかが CHKDSK により検証されます。一覧に含まれているユーザーまたはグループが実際に存在するかどうかや、付与されたアクセス許可が適切かどうかは検証されません。

CHKDSK の 4 番目のステージは /R スイッチが指定されている場合にのみ実行されます。/R スイッチはボリュームの空き領域の不良セクタを検出するために使用されます。CHKDSK は、ボリューム上のすべてのセクタを読み取ることにより、セクタが使用可能であることを確認します。/R スイッチを使用しない場合でも、メタデータに関連付けられているセクタは常に読み取られます。/R スイッチが指定されている場合、ユーザー データに関連付けられているセクタは、CHKDSK の前のステージで読み取られます。CHKDSK により読み取り不可のセクタが検出された場合、そのセクタを含むクラスタは NTFS により不良クラスタの一覧に追加されます。その不良クラスタが使用中の場合、不良クラスタの処理を実行するための新しいクラスタが CHKDSK により割り当てられます。フォールト トレラント ディスク ドライバを使用している場合は、NTFS により不良クラスタのデータが回復され、新しく割り当てられたクラスタにデータが書き込まれます。フォールト トレラント ディスク ドライバを使用していない場合、新しいクラスタには 0xFF バイトのパターンが書き込まれます。通常の操作の実行中に、NTFS により読み取り不可のセクタが検出された場合、そのセクタは CHKDSK 実行時と同じ方法で NTFS により再マップされます。このため、通常 /R スイッチの使用は必須ではありません。ただし、ディスクに不良セクタがあると疑われる場合、/R スイッチの使用はボリューム全体をスキャンするのに便利な方法です。

CHKDSK の各実行ステージに関する上記の説明では、NTFS ボリュームの整合性を検証するために CHKDSK が実際に行う動作の概要のみを示しました。この他にも、ここに記載されていない各ステージにおける多くの付加的なチェックやステージ間でのいくつかの簡単なチェックが実行されます。ここでの概要は、CHKDSK の実行にかかる時間への影響と、SP4 で用意された新しい /C および /I スイッチの効果に関する以下の説明の基礎とすることができます。

CHKDSK の最初のステージと 3 番目のステージでは、"パーセント終了しました" インジケータの進行状況は比較的滑らかですが、若干のばらつきが起こる可能性があります。未使用の FRS は使用中のものより処理に必要な時間が短く、大きなセキュリティ記述子は小さなものより処理に必要な時間が長くなるなどのばらつきがありますが、全体としては、このステージで必要な実際の時間が、"パーセント終了しました" に十分正確に反映されます。

この傾向は、CHKDSK の 2 番目のステージについては必ずしも当てはまりません。ディレクトリの処理に必要な時間の合計は、そのディレクトリ内に存在するファイルとサブディレクトリの数に密接に関連しますが、このステージでの "パーセント終了しました" は、CHKDSK が検証しなければならないディレクトリの数だけに基づいており、ディレクトリの処理時間のばらつきは考慮されていません。たとえば、ボリューム上に多くの小さなディレクトリと 1 つの大きなディレクトリがある場合、0% から 10% まで急速に進行した後、長い時間停滞したままになり、その後また急速に 10% から 100% まで進行することがあります。このため、ボリューム上の各ディレクトリに含まれているファイル数が均一である場合を除き、このステージでの "パーセント終了しました" の表示は、残り時間を判断するときの実際の進行状況を正確に反映したものと考えることはできません。

予定外の CHKDSK 処理を行っているユーザーには残念ですが、CHKDSK の 2 番目のステージは通常、実行に最も長い時間がかかるステージです。

これまで説明してきたように、CHKDSK の実行にかかる時間は、ボリュームの状態に関連する多くの要因により変動します。特定のボリュームに対する CHKDSK の実行に必要な時間を予測する際には、ファイルとディレクトリの数、ボリューム断片化のおよその程度 (特にマスタ ファイル テーブルの断片化の程度)、長い名前と 8.3 形式の名前が混在しているかどうか、および CHKDSK で修復が必要な実際の破損量などを考慮する必要があります。また、CHKDSK の実行にかかる時間が、システム メモリの量、CPU の速度、ディスクの速度などハードウェアに影響されることは言うまでもありません。

特定のハードウェア上の特定のボリュームに対して CHKDSK の実行時間を予測することは簡単ではありません。状況によって数秒から数日と大きく異なります。/R スイッチを使用しない場合、任意のハードウェア プラットフォーム上で時間に関係する最も大きな要因は、ボリュームの絶対的なサイズではなく、ボリューム上に存在するファイルとディレクトリの数です。たとえば、大きなデータベース ファイルを 1 つか 2 つ含む 50 GB のボリュームに対して /R を指定しないで CHKDSK を実行した場合、数秒〜数十秒程度で終了します。/R を指定した場合、CHKDSK ではボリューム上のすべてのセクタが検証のために読み取られ、大きなボリュームほど実行時間が増えます。一方、比較的小さなボリュームでも数十万または数百万の小さなファイルを含む場合には、/R を指定するかどうかにかかわらず、CHKDSK の実行に数時間かかることがあります。

特定のボリュームに対する CHKDSK の実行にかかる時間を予測する最も良い方法は、システムの使用率が低い時間帯に、読み取り専用モードで試験実行を実際に行うことです。ただし、以下の理由のため、この方法はよく注意して実行する必要があります。
  • CHKDSK を読み取り専用モードで実行すると、初期のステージでエラーが発生した場合、3 つのステージがすべて完了する前に CHKDSK が中止され、CHKDSK が誤ってエラーを報告することがあります。たとえば、実際にはディスクに破損がない場合でも CHKDSK がディスクの破損を報告することがあります。この状況は、CHKDSK がディスクを検証している間に、何らかのプログラムの処理によって NTFS によりディスクの領域が修正された場合に発生する可能性があります。正確な検証を行うには、ボリュームが変化しないことが必要であり、変化しない状態を保証する唯一の方法はボリュームをロックすることです。CHKDSK は、/F または /R スイッチ (/F を包含する) を指定した場合にのみボリュームをロックします。このように、読み取り専用モードで CHKDSK のすべてのステージを完了するには、複数回の CHKDSK 実行が必要な場合があります。
  • CHKDSK の実行にかかる時間は、システムの負荷、およびオンラインと Windows NT ブート シーケンスのどちらで CHKDSK が実行されているかに左右されます。CHKDSK では、CPU とディスクの両方が集中的に使用されます。どの要因がボトルネックになるかは、ハードウェア環境に依存しますが、読み取り専用モードで CHKDSK を実行中に CPU の使用率が高くなったり、ディスク I/O が頻繁に行われたりすると、CHKDSK の実行時間は長くなります。また、Autochk.exe は Chkdsk.exe とは別の環境で動作します。Autochk.exe を介して CHKDSK を実行した場合、CHKDSK は CPU および I/O リソースを排他的に使用できますが、仮想メモリを使用できません。このため、Autochk.exe は、通常 Chkdsk.exe よりも速く動作しますが、コンピュータで使用可能な RAM が比較的少ない場合は、Autochk.exe の方が長くかかることがあります。
  • 破損の修正により、必要な時間が増加します。読み取り専用モードの CHKDSK は、重大な破損が検出されなかった場合にのみ実行が完了します。小さな破損のみがディスクで見つかった場合、問題を修正する場合の実行時間は、読み取り専用モードで CHKDSK を実行した場合よりも若干長くなるだけです。しかし、たとえばヘッドの破損や重大なハードウェア障害など、大きな破損が CHKDSK により検出された場合、CHKDSK の実行に必要な時間は CHKDSK が修復しなければならない破損ファイルの数に比例して長くなる可能性があります。極端な場合、CHKDSK の実行に必要な時間は 2 倍以上になることがあります。

/C および /I スイッチについて

/C スイッチを使用すると、ディレクトリ構造の循環を検出するチェックが省略されます。循環は、サブディレクトリが自分自身を親オブジェクトと見なす非常にまれな破損の形式です。/C スイッチを使用すると、CHKDSK の速度が 1 〜 2% 向上しますが、NTFS ボリューム上のディレクトリ "ループ" を放置する可能性もあります。そのようなループは、ディレクトリ ツリーの別の部分からアクセスできないことがあり、Win32 プログラム (バックアップ プログラムを含む) からファイルが見えないという意味で、一部のファイルが孤立する可能性があります。

/I スイッチを使用すると、ディレクトリ エントリをそれらに対応する FRS と比較するチェックが省略されます。このため、ディレクトリ エントリ自体の一貫性はチェックされますが、このスイッチを有効にして CHKDSK を実行した後でも、ディレクトリ エントリが対応する FRS に保存されているデータと必ずしも一致しているとは限りません。通常、/I スイッチを使用すると、CHKDSK の時間が 50 〜 70% 短くなります。このスイッチを使用して正確にどの程度 CHKDSK が速くなるかは、ディレクトリに対するファイルの比率やディスク I/O の CPU に対する相対的な速度などの要因に依存するため、前もって予測することは困難です。/I スイッチの使用により、誤った FRS を参照するディレクトリ エントリ、またはどのディレクトリ エントリからも参照されていない FRS が放置される可能性があります。後者は、孤立のもう 1 つの形式です。FRS で表されるファイルは、バックアップ プログラムを含むすべての Win32 プログラムから見えないということを除いて、破損していない可能性があります。前者の場合には、ファイルが存在するように表示される可能性がありますが、アプリケーションがアクセスするとエラーが発生します。

ボリュームでディスクの破損が検出された場合の 3 つの基本オプション

  • 何も操作をしません。24 時間オンラインであることが期待される基幹業務のサーバーでは、多くの場合このオプションの選択が必要です。欠点は、破損が検出された後できるだけ早く修復しないと、比較的小さな破損が大きな破損に悪化する可能性があるという点です。そのため、破損したボリュームに保存されているデータの整合性を保証するよりも、データのオンラインを保持する方が重要な場合にだけこのオプションを検討してください。破損したボリューム上のすべてのデータは、CHKDSK を実行するまで "危険な状態" と見なされます。
  • CHKDSK の完全な処理を実行します。このオプションでは、すべてのファイル システム データを修復し、自動化された処理により回復可能なすべてのユーザー データを復元します。このオプションの欠点は、CHKDSK の完全な処理を実行すると、不適切な時点で基幹業務のサーバーに数時間のダウンタイムが発生する可能性があることです。
  • /C スイッチと /I スイッチのどちらか、または両方を使用することにより、CHKDSK の省略された処理を実行します。この処理では、大きな問題に悪化する可能性のある小さな破損が、CHKDSK の完全な処理よりも大幅に短い時間で修復されますが、存在する可能性のあるすべての破損が修復されるわけではありません。回復可能なすべてのデータを確実に回復するには、将来、完全な CHKDSK を実行する必要があります。
NTFS では、ディスクの破損が発生した場合、その検出後直ちに CHKDSK の完全な処理を実行しても、ユーザー データの整合性が保証されない点に注意してください。CHKDSK により復元できないファイルが存在する可能性があり、CHKDSK が修復したファイルでも、依然として内部的に破損している可能性があります。定期的なバックアップの実行、またはデータを復元する他の堅牢な方法を使用することにより、重要なデータを保護することがきわめて重要です。

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 187941 (最終更新日 2005-04-04) を基に作成したものです。

プロパティ

文書番号: 187941 - 最終更新日: 2005年5月20日 - リビジョン: 4.1
この資料は以下の製品について記述したものです。
  • Microsoft Windows NT Server 4.0 Terminal Server
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional
  • Microsoft Windows 2000 Datacenter Server
  • Microsoft Windows NT Workstation 4.0 Developer Edition
  • Microsoft Windows NT 4.0 Service Pack 4
キーワード:?
kbinfo kbfix kbfea KB187941
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com