Chkdsk の動作について

こんにちは、Windows プラットフォーム サポートの 高谷 です。
今回は Chkdsk プログラムの使い方についてご紹介します。

■ そもそも Chkdsk はどんな時に使うのか?

Chkdsk はWindows XP/2000 から実装されたファイル システムの整合性を確認および修復するツールです。ソース:NTFS イベント ID:55 などのファイル システムの破損を示唆するエラーのイベント ログが発生した場合に、Chkdsk コマンドを使用します。オプションを指定することで、ファイル システムに不整合が発生している箇所を自動的に修復することができます。オプションを設定せずに Chkdsk 読み取り専用モードで実行することで、整合性の確認のみ (エラーの修復は実行しない) を行うこともできるため、比較的使用する機会の多いコマンドになります。

基本的な構文と使用例を以下に示します。

//読み取り専用モードで Chkdsk を行う場合

>chkdsk [Volume:]

例えば、D ドライブのファイル システムの整合性の確認を行う場合は、以下のようになります。

コマンドの例)

>chkdsk D:

※ドライブを指定しない場合は現在のドライブについて処理が行われます。

ソース:NTFS イベント ID:55 につきましては以下の公開情報をご確認ください。

参考資料)
“ソース : NTFS、ID: 55 のイベント”
https://blogs.technet.microsoft.com/askcorejp/2014/09/08/ntfsid-55

■ 実践的な Chkdsk の利用方法について
.

ファイル システムの破損を修復したいときや、ファイル システムの整合性を確認したいときが Chkdsk コマンドの出番となります。事例をもとに、実践的なChkdsk コマンドの利用方法についてご案内いたします。

【状況】ソース:NTFS イベント ID:55 のイベント ログが記録された。

-------------------------------------------------------------
イベントの種類: エラー
イベント ソース: NTFS
イベント ID: 55
説明:
ディスク上のファイル システム構造が壊れていて使えません。
chkdsk ユーティリティをボリューム (D:) で実行してください。
-------------------------------------------------------------

1. まずはファイル システムの整合性を確認したい。

整合性を確認したい場合は、オプションを付けず、読み取り専用モードで実行します。
オンラインでエラーのチェックを行うため、ユーザーが使用中のボリュームでも実行可能です。
結果として対象ボリュームのファイル システムの整合性確認の結果が出力されます。

コマンドの例)

>Chkdsk D:

実行結果において、以下のように表示された場合は、そのボリュームの整合性には問題がなかったことを示しています。

-------------------------------------------------------------
Windows でファイル システムのスキャンが終了しました。
問題は見つかりませんでした。
これ以上の操作は必要ありません。
-------------------------------------------------------------

2. ファイル システムの整合性を確認の上、修復も同時に行いたい。

修復まで行う場合には、2 通りの実施方法があります。状況に合わせて使い分けを行いますが、特に理由がなければ /f で十分修復が可能です。/r では膨大な時間を要する場合があります。

2-1. /f のオプションを使用する。

Chkdsk /f で実施する場合は、オフラインでボリューム内のエラーを修復する動作となりますので、ボリュームの一時的な解除が必要となり、ユーザーは対象のボリュームにアクセスすることができない状態となります。

コマンドの例)

>Chkdsk D: /f

2-2. /r のオプションを使用する。

chkdsk /f がインデックスの修正のみを行うのに加えて、ディスクに物理的な破損箇所があるかを検出する (および、該当箇所を使用しないようにマークするなどの) 物理セクターに対する処理が行われるためchkdsk /f より、非常に長い時間を要します。

コマンドの例)

>Chkdsk D: /r

■ /scan および /spotfix オプションについて (Windows Server 2012 以降のみ)
.

ここまでは Windows Server 2008 R2 までの一般的なChkdsk の実行方法について述べました。ここからはWindows Server 2012 以降の OS に新たに追加された /scan および /spotfix というオプションについてご説明いたします。Chkdsk /scan を実施した後に、Chkdsk /spotfix を合わせて行うことで、Chkdsk /f とほぼ同等の修復作業を、より短い時間で行うことができるのが特徴です。

- /scan
読み取り専用モードと同じく、オンラインでエラーのチェックを行います。オンライン状態で修復が可能なエラーについては修復を行い、オンラインで修復できないその他のエラー情報については、メタ ファイルに保存されます。

- /spotfix
chkdsk /scan で発見されたオンラインで修復できないエラーについて、オフラインで修復が行われます。chkdsk /spotfix オプションによるオフライン修復では、chkdsk /scan オプションの結果として必要であると判断された領域のみ修復処理が実施されます。

参考資料)
“chkdsk の刷新と新しい NTFS 正常性モデルの追加”
https://blogs.msdn.com/b/b8\_ja/archive/2012/05/16/chkdsk-ntfs.aspx

まれに、Chkdsk /scan の結果で以下のメッセージが表示されることがあります。

--------------------------------------------------------------------------------------
Windows は "フル Chkdsk が必要です" 状態であるため、ボリュームで
オンライン スキャンを実行できません。
"chkdsk /f" を実行してボリュームを修復してください。
--------------------------------------------------------------------------------------

このメッセージが出る場合、Chkdsk /f コマンドでしか修復できない破損が含まれています。
タイミングを見て Chkdsk /f コマンドを実行してください。

■ よくあるお問い合わせ (FAQ)
.

Q1. Chkdsk に失敗するときはどうしたらいい?

Chkdsk に失敗する場合、残念ながらファイル システムを修復する方法がございません。
ディスクのフォーマット、またはシステム バックアップからのデータ リストアによる復旧をご検討くださいますようお願いいたします。

Q2. Chkdsk が終わらないときはどうしたらいい?

Chkdsk を実行すると、(特にChkdsk /f や /r の場合) 長い時間処理を行います。環境にも依存しますが、容量が大きい場合は数日程度かかる場合もございます。さらに、Chkdsk を一旦開始すると、Windows OS 側で中断させる方法がありません。可能な限りChkdsk による修復処理をお待ちいただく事を推奨します。
また、以下の理由から、強制的に終了させる (電源を落とす) ことも推奨しておりません。

1) 対象ボリュームに配置されているフォルダーやファイルのセキュリティ情報が破損し、アクセス権が不正となる (アクセス権の消失)

2) 修復が完了しないため、次回起動時にも Chkdsk による修復処理が行われる。

セキュリティ記述子のチェックおよび修復のフェーズ (フェーズ 3 に該当) に途中で停止した場合、上記 1) が発生する可能性があります。
また、システムの電源を強制的に停止した場合には、NTFS ファイル システム内のトランザクション機能などを用いてファイル システム上の正常性を保つための内部動作が自動的に行われますが、上述の 1) にあたる事象が "Chkdsk.exe" の強制停止により発生した場合には、次回以降の Chkdsk で修復する事は困難となりますので、バックアップ データからの復元などをご実施いただく必要があります。

再起動時自動的に行われる Chkdskを、実施しないようにしたい場合、以下のコマンドにてChkdskをスキップすることが可能です。
※注意:設定を解除しない限りChkdskはスキップされ続けます。

>Chkntfs /x <ボリューム>

例) C ドライブに対して、再起動時に Chkdsk を実行しない場合
>Chkntfs /x C:

参考) 起動時に Chkdsk を実施しない設定を解除するとき
>Chkntfs /d

参考資料)
“Autochk”
https://technet.microsoft.com/en-us/library/cc771787(v=WS.10).aspxaspx

補足) Chkdsk の動作について
Chkdsk の動作は 5 段階のステージで構成されています。
オプションを付けない読み取り専用モードでの実行はステージ 3 まで実行し、/f オプションはステージ 4 まで、/r オプションはステージ 5 まで実行します。

- ステージ 1 : マスタ ファイル テーブル (MFT) 内の各ファイル レコード セグメント (FRS) の検証
- ステージ 2 : ボリューム内のフォルダーの検証
- ステージ 3 : 各ボリュームのセキュリティ記述子の検証
- ステージ 4 と 5 ( オプションのステージ ) : ボリューム内の全てのセクターの読み取り、安定性の確認

Q3. Chkdsk の時間の見積もり方法について教えてほしい。

最後に、Chkdsk の実行時間の見積もり方について、ご説明します。
一般的には、読み取り専用 Chkdsk ではそれほど長い時間はかかりませんが、/f または/r のオプションを付加して修復を行う場合に長い時間がかかります。
Chkdsk にかかる時間は、ボリュームの状態、ファイルの数、システムのスペックに依存するため、事前の予測は非常に困難です。
特にファイルの数に大きく依存しますので、ファイルの数が多い場合はそれだけ長い時間がかかるとお考え下さい。
見積もる方法としては対象のディスク/ボリュームのコピーを作成し、業務影響のない環境にて Chkdsk コマンドをお試しいただくことが挙げられます。

Q.4 Chkdsk の結果、修復できたのどうかはどこで確認できるのか?

Chkdsk による修復を実行しますと、アプリケーションのイベント ログに実行結果が記録されます。
コマンド プロンプトで実行した場合は、コマンド プロンプトの画面上に結果が確認できますが、PC の起動時に行った場合などは、イベント ログから修復が正常に完了したのかをご確認ください。

出力結果の例)
-----------------------------------------------------------
レベル:情報
日付と時刻:2018/08/27 02:00
ソース:Microsoft-Windows-Wininit
ID:1001
メッセージ:

Checking file system on C:
The type of the file system is NTFS.
Volume label is ボリューム.

<<中略>>

Windows has made corrections to the file system.
No further action is required.

xxxxxxxxx KB total disk space.
xxxxxxxxx KB in 10000 files.
.......xxxxx KB in 100 indexes.
...............x KB in bad sectors.
.....xxxxxx KB in use by the system.
.......xxxxx KB occupied by the log file.
xxxxxxxxx KB available on disk.

4096 bytes in each allocation unit.
xxxxxxxxx total allocation units on disk.
xxxxxxxxx allocation units available on disk.
-----------------------------------------------------------

上のような結果がイベント ログに表示されていた場合は、正常に修復が完了しています。

今回は Chkdsk についてご紹介させていただきましたが、いかがでしたでしょうか。
本ブログが少しでも皆様のお役に立てますと幸いです。