Windowsでシステム起動時に強制的にchkdskを実行させるTech TIPS

システム起動時に、ファイル・システムがダーティであれば、chkdskが実行される。ファイル・システムの一貫性を保つためには、ときどきchkdskをかけるのがよい。fsutil dirtyコマンドを利用すると、システム起動時にchkdskを実行させることができる。

» 2006年09月23日 05時00分 公開
[打越浩幸デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

対象OS:Windows XP/Windows Server 2003



解説

●ファイル・システムが「ダーティ」とは?

 Windows OSでは、システム起動時にディスクの状態を調べ、NTFSファイル・システムが「ダーティ」な状態であれば、各ドライブに対して自動的にchkdskコマンドを実行するようになっている。ダーティ(汚れている)とは、正常な方法以外でシステムがシャットダウンされたことを表す状態であり、例えば、システムの稼働中にいきなり電源が切断されたり、リセット・ボタンを押して強制的に再起動させたりした場合に起こる。また、システムに致命的なエラーが発生し、いわゆる「ブルー・スクリーン」状態で再起動したような場合も該当する。

 あるディスク(ドライブ)がダーティかどうかは、NTFSボリュームの管理領域に記録された「ダーティ・フラグ(ダーティ・ビット)」で判断される。Windows OSは、システムが起動すると各ドライブのダーティ・ビットをセットし、シャットダウン時にそれをクリアする。つまり、正常にシャットダウンすれば(正規の手続きを踏んでシャットダウンすれば)、ダーティ・ビットはクリアされているはずである。だが障害などによってシステムが突然停止すると、起動時にはダーティ・ビットはセットされたままになる。

 Windows OSはシステムの起動時にこのダーティ・ビットの状態を調査し、もしセットされていれば予期せぬシャットダウンが起こったと判断する。そしてファイル・システムの整合性を検査するためにchkdskを実行し、必要ならば修復や破損しているファイルのサルベージ(救出)を行う。

●chkdsk /fによる強制的なディスクの検査

 ファイル・システムの整合性の破たん(要するに壊れること)は、突然の電源断だけで起こるものではない。ディスクにエラーが生じた場合や、システムやディスクのバグなどによって引き起こされる可能性もある。そのため、定期的にchkdskを実行し、ファイル・システムが正常かどうかを確認するのがよい。といっても、一般的には毎日実行する必要はなく、例えばフルバックアップを取るときに、同時にchkdskも実行しておけばよいだろう。

 強制的にchkdskを実行するには、コマンド・プロンプトを開き、「chkdsk c: /f」や「chkdsk d: /f」というコマンドを実行する。ここで「c:」や「d:」は、検査対象のドライブである。全ドライブに対してこのコマンドを実行すればよい。なお「/f」オプションを付けないと、検査でエラーが見つかっても、ディスクは修復されない(検査のみとなる)。

 だがこのコマンドを実行しようとしても、現在使用中(オープン中)のファイルがあるドライブに対しては、実行できない。ファイルがオープン中だと、ディスク上の管理情報などが不完全な状態になっているからだ。

 このような場合、Windows OSは、すべてのファイルを強制的にクローズして直ちにchkdskを実行するか、それとも次回の再起動時に行うかなどを選択することができる。ただし、システム・ドライブの場合は強制クローズはできず、再起動時の検査しか選択できない。

※システム・ドライブの場合

C:\>chkdsk c: /f ……C:をchkdskする
ファイル システムの種類は NTFS です。
現在のドライブはロックできません。

ボリュームが別のプロセスで使用されているため、CHKDSK を
実行できません。次回のシステム再起動時に、このボリュームの
チェックをスケジュールしますか (Y/N)? Y ……次回行うならYを入力

次回のシステム再起動時に、このボリュームはチェックされます。


※非システム・ドライブの場合

C:\>chkdsk d: /f ……D:をchkdskする
ファイル システムの種類は NTFS です。

ボリュームが別のプロセスによって使用されているため、Chkdsk
を実行できません。Chkdsk を実行するにはこのボリュームのマウントを解除する必要
があります。
そのときは、このボリュームへのすべての開かれたハンドルは無効になります。
このボリュームを強制的にマウントを解除しますか? (Y/N) N ……強制クローズするならYを入力

ボリュームが別のプロセスで使用されているため、CHKDSK を
実行できません。次回のシステム再起動時に、このボリュームの
チェックをスケジュールしますか (Y/N)? Y ……次回行うならYを入力

次回のシステム再起動時に、このボリュームはチェックされます。



 もしオープン中のファイルがなければ、chkdsk /fと入力すると、直ちにディスクの検査が始まる。だが場合によってはこれは望ましくないことがある。たまたまいまは誰も使っていないかもしれないが、すぐに使う予定があるような場合は、chkdskは後で実行したいだろう。特にファイル・サーバなどでは、ユーザーが誰も接続していない、メンテナンス時(フルバックアップの前後の時間)にまとめて実行できると便利である。だが、バックアップのときに手動で1台ずつchkdskコマンドを入力するのも面倒なので、可能ならば、chkdskの実行をあらかじめスケジュールしておきたい。

 このような場合には、手動で各ドライブにダーティ・ビットをセットしておけばよい。こうすると、次回の再起動時(フルバックアップのときなど)に、自動的に各ドライブに対してchkdskが実行されるようになる。本TIPSでは、この方法について解説する。

操作方法

 各ドライブの状態を強制的にダーティにするには、fsutil dirty setというコマンドを利用する。例えば、C:とD:の2つのドライブをダーティ状態にするには、次のようなコマンドを発行する(指定できるのはNTFSボリュームのみ。1度セットしたビットはクリアできない)。

C:\>fsutil dirty set c: …C:ドライブをダーティにセット
ボリューム - c: は Dirty とマークされます

C:\>fsutil dirty set d: …D:ドライブをダーティにセット
ボリューム - d: は Dirty とマークされます



 ドライブがダーティかどうかを調べるには、fsutil dirty queryコマンドを実行する。

C:\>fsutil dirty query c:
ボリューム - c: は Dirty です

C:\>fsutil dirty query d:
ボリューム - d: は Dirty です

C:\>fsutil dirty query e:
ボリューム - e: は Dirty ではありません



●自動chkdskの確認

 以上のようにセットしたあと、システムを再起動すると、ブート時にchkdskが実行される。デフォルトでは、10秒待ち、その間にキー入力(管理者のキャンセルの指示入力)がなければ、自動的にchkdskが実行される。ドライブの台数が多かったり、ディスク・サイズが大きい場合はいくらか時間がかかる。また、1度自動chkdskが動作すると、そのドライブのダーティ・ビットはクリアされるので、また自動chkdskさせたい場合は、その都度設定を行う必要がある。

 なおこれはWindows OSが起動する前に実行される特別な処理であり、コンソール画面でしかその実行状態を確認することができない。例えば、リモート・デスクトップでログオンして、自動実行されるchkdskの進行状態を確認するといったことはできない。

 その代わりというわけではないが、ブート時の自動chkdskの結果は、イベント・ログに出力されるようになっている。イベント・ビューア管理ツールを起動し、[アプリケーション]カテゴリを開くと、「WinLogon」というソースのイベントが記録されているのが分かるはずである。これを開くと、chkdsk実行の画面表示の内容(テキスト)がそのまま記録されている。システムの起動後、エラー(ファイル・システムの破損など)が起こっていなかったかどうか、よく確認していただきたい。もしエラーがあれば、例えばファイルがサルベージされたといった情報が記録されているので、適宜対処する必要がある。

ログオン時の自動chkdsk処理のイベント・ログ ログオン時の自動chkdsk処理のイベント・ログ
自動chkdskが実行されると、その結果はイベント・ログに出力されているので、システム起動後に確認すること。エラーがあれば(そして何を修復したかは)、ここに記録されている。
  (1)[アプリケーション]カテゴリを開く。
  (2)これが自動chkdskの結果のイベント。
  (3)ソースはWinLogonとなっている。
  (4)実行した時刻。だいたい再起動した時間になっているはずである。
  (5)実行したコンピュータ名。
  (6)自動chkdskの出力結果。再起動時にコンソール画面に出力されていたメッセージがすべてそのまま記録されている。chkdskの進行状態や、エラーの状態、何をどう修復したかなどの情報が記録されている。

 なおTIPS「システム起動時の自動chkdskをスキップする」では、この自動chkdskをさせないようにする方法を紹介している。本TIPSでは、「ダーティ・ビットをセットする方法」について解説しているが、先のTIPSでは、「ダーティ・ビットを参照し、ダーティならばchkdskを起動する機能」をスキップさせる方法について説明している。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。