2005年04月20日

起動HDDの chkdsk /r をキャンセルする。

 会社のPCのHDDがご臨終間近、「なんか調子が悪いなぁ・・・」と思っていたらHDDが逝きそうだっただけらしい、音を聞くと何度もSpinupする音が聞こえる。HDDの診断にはHDD Healthを使用していたのだが、画面には故障する日が今日と表示されている。こいつはヤバイ、と思い代替えHDDを仕入れ早速データを移動することにした。

 とにかく新しいHDDに全コピー、とHDDをコピーするソフトを用意してコピーし始めるのだが、途中でCRCエラーとなって停止してしまう。どうせCRCエラー部分なんてディスクの修復をしてもデータは戻ってこないのだから無視してスキップしてくれればいいのだが、律儀にもエラーを発見すると停止して終了してくれる。

 気が進まないが先にHDDを修復しようかとWindowsを再度起動してChkdsk /rを予約し、再起動した。なぜ気が進まないかと言うと、こういう壊れ始めたHDDは一旦ガタガタ言い出すと使えば使うほど連鎖反応的にエラー箇所が増えていく。なので出来ればあまり何度もさわらず、コピー時の読み込み1回だけにしておきたい。しかしエラーがあるとコピー出来ないっぽいのでしょうがなくChkdsk /r(全セクタ検査)をスケジュールして再起動した。

 Chkdskが始まる・・・・・が、やっぱ予想したとおり全然進行状況の%が進ま無いので待ちきれなくてリセット。とりあえず別の方法でやろうと思ってChkdskをキャンセルしようとしたが全くキャンセルが出来ない。アレコレ試したけどダメ。Googleで検索したが、どこのページを見てもキャンセルする方法は無いと書いてあるが「んなわきゃねーだろ」と作業し、めでたくChkdskをキャンセル出来たのでここで紹介する。

 Microsoftの訳の分からない機械翻訳技術資料を見ると、レジストリ内でChkdskを実行する指示を出してる文字列は「autocheck autochk * / r\DosDevice\C :」らしいので、これをBart's PEで起動したWindowsからバイナリエディタで消す。説明はXP環境だが、2000の場合は下で説明しているSystemrootフォルダの「windows」を「winnt」にすればOKのはず。確認していないので確認した方はコメントに書き込んでもらえるとありがたい。

 さて、実際の作業だが、

 1.まず Bart's PE と バイナリエディタを用意。バイナリエディタはFDやCDRに入れてBart's PEから利用できる状態にしておく。俺の場合は対象のHDDにBzが既に入っているので、そのままそのHDDから利用した。

 2.Bart's PEでWindowsを起動。

 3.Bzでレジストリファイルを開く。場所は直したいシステムが入っているHDDの\WINDOWS\system32\config\ の中のsystemというファイル、拡張子は無し。ファイルを書き換えるのでBzの場合は起動してから「編集」>「読み込み時リードオンリ」を選択してチェックを外してからファイルを開くこと。壊すといけないので一応systemのバックアップを取っておこう、systemをCTRL+ドラッグでコピ〜systemを作っておけばOK。

 4.対象の文字列を検索する。検索するバイナリは

  61 00 75 00 74 00 6F 00 63 00 68 00 6B

  Bzの右画面で見ると「a.u.t.o.c.h.k」。Bzの場合はツールバーの窓に「#61 00 75 00 74 00 6F 00 63 00 68 00 6B」と入れて隣の双眼鏡ボタンをクリックすれば検索される。

  「a.u.t.o.c.h.k.*」が何回か出てくると思うが、検索を続けていると「a.u.t.o.c.h.k./.r」が見つかると思う。こいつが消す対象だ。

reg1.gif

 5.「a.u.t.o.c.h.k./.r.(省略).c.:」となっていると思うので、これを 「a.u.t.o.c.h.k.*」に変更。左のバイナリ画面で 2F を 2A に変更、そこから 3A までを00で埋める。

reg2.gif

 6.再起動

 これでChkdskをしなくなったはずだ。俺は結局丸ごとコピーはあきらめ、Bart'sPEから wincpy.exeを使ってファイルコピーし、起動パーティションが違うのでboot.ini内の起動パーティション指定を変更、回復コンソールから fixboot c:(必要無いかもしれない)と fixmbr を実行してHDDの交換に成功した。このソフトはCRCエラーを無視してくれるので便利だが、どのファイルが壊れているか判らなくなってしまうがまぁそれどころではないので無視。

 尚、レジストリを直接どころかバイナリエディタで変更する為、この作業によって発生したいかなるトラブルも私は責任を持たないのであしからず。起動したらレジストリエディタで作業した箇所が正常かどうか確認してほしい。