IT備忘録

LINUX関連 .NET関連 DB関連 正規表現 その他 情報

起動時に毎回chkdsk(チェックディスク)が勝手に実行されるのを止める
レアケースだとは思うんですが、たまたま僕が行き当たってしまったので
報告がてら、記事にしてみます。

別に何も特別なこともせず普通にPCを終了したハズなのに、ある時から
起動時に毎回chkdsk(チェックディスク)が勝手に実行され始めました(→こんな画面)。

10秒以内に何かキーを押せばキャンセルされますし、
chkdsk自体、そんな大した時間がかかるわけではないんですけども
意味不明なこの状態は気持ち悪いので直そう!と思ったわけです。

以下、仕組みと解決法


◆なぜ起こるか?
XPは起動時にダーティビット(ある種の命令です)がセットされていると
chkdsk(チェックディスク)を実行する仕組みになっています。
通常、ダーティビットはOS起動時にセットされ、終了と同時にクリアされます。

しかしフリーズや強制終了など異常終了すると
ダーティビットが残ったままなので、次回の起動時に
何か不具合が起こってないか調べるためにchkdskが実行される、というわけです

通常は一回実行されて終わりのハズです。
が、しかし何らかの理由でこのダーティビットがクリアされないままだと
毎回chkdskされるハメになります。

以下、解決法
◆まずダーティビットがセットされてるか確認

[スタート]ボタン-[ファイル名を指定して実行]でcmdとタイプして[Enter]キー
コマンドプロンプトが起動しますので
chkntfs c: d: と入力して[Enter]キー
※この例は、CドライブとDドライブをチェックしてます。
 ご自分の環境に合わせてドライブ名のトコを変えて下さい。
 複数ドライブを指定する場合は表記のように半角空白でつなげて入力します。
C:?>chkntfs c: d:
ファイル システムの種類は NTFS です。
C: が正しくありません。/C オプションで次回起動時に
このドライブに対して CHKDSK を起動するようにスケジュールできます。
ファイル システムの種類は FAT32 です。
D: は正常です。
この場合、Cドライブにダーティビットがセットされてるコトが確認できます

また、別の確認方法として
fsutil dirty query c: と入力してもOK(こちらの場合、ドライブは一つずつ確認)
C:?>fsutil dirty query c:
ボリューム - c: は Dirty です

C:?>fsutil dirty query d:
ボリューム - d: は Dirty ではありません
この場合もまた、Cドライブにダーティビットがセットされてると確認できます


◆ダーティビットのクリアの方法
引き続き、コマンドプロンプトで
chkntfs /x c: と入力して[Enter]
これでシステムのチェックスケジュールがキャンセルされたハズ。
修正(08.4/20):
ゴメンなさい。間違ってました。
上記コマンドは、自動的なchkdsk作業をスキップさせるだけで、
ダーティビットをクリアしません
(=不具合があった場合、スキップしたまま放置…では問題解決にならない上に悪化する危険が)
なので、下の行にあるようにchkdsk c: /fで強制的にchkdskを一度行って
ダーティービットをクリアしてください

上記の確認で C: が正しくありません。 と出てしまう場合や、
最初の段階からどちらの確認方法でもダーティビットのセットが確認できない場合には
chkdsk c: /f と入力してchkdskを強制的に一度実行しちゃいます。
ドライブによって、その場でchkdskが実行されるか、
もしくは次回起動時に一度だけchkdskが起動して、ダーティビットはクリアされるハズです。

確認のため、もう一度
chkntfs c: を実行→ C: は正常です と表示されたなら成功。
次回起動時からはchkdskは実行されないハズです。

参考:
・システム起動時の自動chkdskをスキップする -@IT
・システム起動時に強制的にchkdskを実行させる -@IT


以上のダーティビットに起因しない場合はレジストリを見てみましょう
◆もう一つの原因 - レジストリ
[スタート]ボタン-[ファイル名を指定して実行]でregeditとタイプして[Enter]キー
レジストリエディタが起動しますので
HKEY_LOCAL_MACHINE?SYSTEM?CurrentControlSet?Control?Session Manager
と、たどって下さい。
[Session Manager]の右ペインにある[BootExecute]の値が
autocheck autochk * (注意:文字列間は半角空白。最後の * も必要)かどうか確認(→画像)。
もし違う場合は、[BootExecute]をダブルクリックして値を書き換えてみて下さい。

 リンク

AJAX実装サンプル
よく使うショートカットキー一覧
参考内容
[IT備忘録]のサイト内にある文章の正確性については一切責任を持ちません。
実開発の際には、技術的内容は十分確認した上で作業してください。

(C) 2010 IT備忘録 All rights reserved.