NTFS では、トランザクション ログを使用して(ファイルの実体であるユーザデータではなく、)ボリュームに保存されているすべてのファイルに関する情報を追跡するためのメタデータ(各アロケーション ユニットに於ける未使用、不良セクタの所在などに関する情報)を保持している。CHKDSKがチェック、修復をするのは、これら各アロケーション ユニットとファイルの実体とを紐付けるメタデータの整合性情報である。
ディスクの破損が発生した場合、すぐに CHKDSK の完全な処理を実行しても、NTFS では(MFTとNTFSのメタデータ相互の整合性は取るが)ファイル実体であるユーザー データの整合性は保証されない。CHKDSK では修復できないファイルが存在する場合や、CHKDSK で修復したファイルに内部的な破損が残っている場合がある[8]。
フェーズ 1 : ファイルのチェック
ファイルエントリのチェックを行う。ボリュームのマスター ファイル テーブル (MFT) 内の各ファイル レコード セグメントを検証し、NTFS ボリューム上の各ファイルおよびディレクトリを一意に識別する。各ファイル レコード セグメントの内部的な整合性を検証して、使用中のファイル レコード セグメントを表すビットマップと、ボリューム上の使用中のクラスタを示すビットマップの 2 つのビットマップを作成する。このフェーズの最終段階で、MFT 内とボリューム全体の両方について、使用中の領域と使用可能な領域を識別し、MFTとは別にNTFS では、ディスク上に保存されている独自のビットマップでこれと同様の情報を追跡・保持しているので、その比較差分をの出力情報に表示する。使用中のファイル レコード セグメントに破損が検出された場合、対応するディスク クラスタを使用可能とするか使用中とするか、など。
フェーズ 2 : インデックスのチェック
ディレクトリエントリのチェックを行う。ボリューム上の各ディレクトリのNTFSインデックスに対し、ディレクトリ内で参照されている全てのファイルやサブディレクトリが、MFT 内の有効なファイル レコード セグメントとして実際に存在しているか、ディレクトリの循環参照がないか、ファイル のタイム スタンプとサイズが最新の情報であるかどうかを確認する。正当なファイル レコード セグメントがあるが、どのディレクトリ一覧にも存在しない孤立したファイルを適切と見なされるディレクトリへ復帰させ、適切なディレクトリが既に削除されているなどで見当たらない場合はルート ディレクトリに仮ディレクトリを作成し、そこにファイルを格納する。ディレクトリ一覧に対応するファイル実体がない場合は、そのファイル レコード セグメントに対するディレクトリ エントリの方を削除して整合性を取る。
フェーズ 3 : セキュリティ記述子のチェック
ファイルやディレクトリの所有者、NTFS アクセス許可、監査に関する情報などのセキュリティ記述子の整合性を取る。但し、記載のあるユーザーやグループが実際に存在するかや、付与されているアクセス許可が適切かの検証は行われない。
フェーズ 4 : セクタのチェック
ボリュームの空き領域にある不良セクタのチェックを行う(/R オプションまたは /B オプション)。ボリューム上のすべてのセクタを読み取って、使用可能セクタかを確認し、読み取り不能なセクタを含むクラスタを不良クラスタの一覧に追加する。不良クラスタのデータを修復して、不良クラスタに代わる新しいクラスタにデータを書き込む。もしデータの修復ができない場合は、0xFF バイトのパターンを新しいクラスタに設定する。 MS-DOS 5.0のCHKDSKとUNDELETEにはデータを破壊するバグがある。ディスクのFATで256セクタを使用している環境でCHKDSK /Fを実行するとデータを消失し、UNDELETEを実行すると予測不能な結果を引き起こす。通常、この問題は128MBの倍数の容量を持つディスクで発生する。これは1991年4月9日付のタイムスタンプのCHKDSK.EXEとUNDELETE.EXEに適用される。このバグはMS-DOS 5.0aでは修正されている[9]。 PC DOS J6.3/Vでは、CHKDSKをUSモード(英語モード)で実行すると日本語文字のディレクトリ下にあるファイルやディレクトリが消去される場合がある。これを回避するため、バージョンJ6.30A/VのCSD(問題修正ディスケット)でUSモード用のCHKDSKUS.COMが追加された[10]。 Windows 7の正式リリース前、InfoWorld Neowin
欠陥
MS-DOS 5 バグ
PC DOS J6.3/V USモードのバグ
Windows 7のバグ疑惑