機器の修理というよりは、制御用PCのハードディスクのWindowsNTの復旧なので、ソフトウエアの話題である。 日本光電のNeuropackは古くから販売されており、ブラウン管組み込みの世代から1代上の機種はMEB-2200になるが、 WindowsNT 4.0/ ISAボードバージョンがあるのを最近知った。研究室ではUSBバージョンしか見たことしかなかった。
Maxtorの6.4GBのハードディスクが故障してしまい、バッドセクタが出て起動しなくなったので、復旧が必要となった。 昔の機種が動いている場合は、故障に備えて、まず、ハードディスクの全セクタのイメージバックアップ(dd) をとるべきであったが、今回は油断してとっていなかったのが災いした。マシンはDELLのOptiPlex GX110 PentiumIII 500MHzで、20年近く前の機種になるから、良く持ったとも言える。
執筆時点では、GNU ddrescueがお勧めである。 始めに一通り読んでから読めないところを何回か再読込する。残念ながら一部読み込みが出来なかった。hexeditで周囲をチェックすると大まかに損傷部位が推測出来るが、一部は不明であった。
IDEハードディスクは CF(コンパクトフラッシュ) と信号・プロトコルが基本同じなので、簡単な変換基板があれば基本的にシリコンディスク化できる。書き戻し先はCFへ行った。
Linux上でマウントすると$MFTのエラーで進まないので、TestDiskでMFTだけ復旧させて走らせるが、 いくつかのファイルがI/Oエラーになるようで、 B+ treeも一部損傷しているようである。 まず別のWindowsNT 4.0 (VMware等)でchkdsk /Fを走らせて出来る範囲で修復した。修復したイメージを書き戻した時の始めの起動時のエラーは、下記で、ハイブの損傷であった。
SYSTEMハイブはSYSTEMとSYSTEM.ALTの二つが保持されており、調べたところ運良く両方で別のアドレスが損傷していたので、 バイナリエディタ(Stirling)でそれぞれを見ながら補完しつつ修復した。

これで済んだと思って書き戻して起動させると今度はBSOD画面で別のエラーが出力される。
このエラーはwinsrv.dllが壊れている時も出るが、SOFTWAREハイブが損傷している時も出る。 regedit.exeでHKEY_USERに一時的にSOFTWAREハイブをロードさせてもエラーは出ないが、内部的には何らかの損傷があると思われる。 repairディレクトリ等にある別の正常なSOFTWAREハイブ(software._等のrepairファイルは圧縮ファイルなので、中の$$hive$$.tmpを7zip等で解凍して作る)の 中身をすべてクリアしてから、NirsoftのRegFileExport.exe で損傷のあると思われるSOFTWAREハイブをテキスト出力し、パスを上記でロードさせているツリーに書き換えてから読み込み、 ハイブアンロードすると正常なハイブが生成される。これをもう一度書き戻すとまた別のエラーになる。
万事休すと思われたが、今度はめげずに、WindowsNT 4.0 SP6aのDLL、EXE、SYS、DRV、TTF等をすべて上書きしてみる。すると今度はVGAドライバに切り替わってログイン画面の前まで来るが、 肝心の下のログイン画面が待てども待てどもいっこうに現れない。少なくともいくつかのDLLは壊れていたか、MFTの損傷でアドレスがおかしくなって正常なファイルでなくなっていたと思われる。 今度はセキュリティハイブがおかしいと思い、SAMハイブとSECURITYハイブとdefaultハイブを 同様にregedit.exeで作り直して書き戻すが、効果がない。SAMとSECURITYについてはレジストリアクセスのセキュリティ要件が少し難しいので、 こちらだけはrepairディレクトリのSAMとSECURITYを書き戻すと、やっとログイン画面に辿り着き、ログインできた。 プロファイルが再作成されたりするので、前のNTuser.datハイブやその他のファイルはレジストリエディタで書き戻すかコピーする必要があるが、これは上記に比べればずっと楽だろう。

最後に分かってしまえば、だいぶ楽だが、辿り着くまでは数日かかってしまった。現象だけでどこが壊れているか判断するのはかなり難しい。 さらに、エラー表示だけでどこがおかしいと完全に特定できるわけでもない。こういう時はソースコードがあると楽である。デバッガがあるとなおさらか。 尤も、WindowsNTのソースコードは契約で取得出来るし、同コードが流出したことはあったので、頑張ればどこからか取得することはできるかもしれないが。 regedit.exeではロード出来るハイブに何らかの損傷があってエラーが出ていたというのは よくわからないが、ハイブを再構成したのはWindows7上であったが使えたことから、こんなに昔のWindowsNTとも未だに互換性のあるファイル構造であるのには驚いた。 昔の技術に基づいて今の技術があるということは実感させられる。久しぶりにWindowsに振り回された感があるが、バックアップの重要性を再認識した件であった。
Chuck Norris wrote a complete Perl 6 implementation in a day, but then
destroyed all evidence with his bare hands, so no-one will know his secrets.
-- Shlomi Fish
-- Chuck
Norris Facts by Shlomi Fish ( http://www.shlomifish.org/humour/bits/facts/Chuck-Norris/ )
* rindolf tries to think what can cause the KDE 4 SNAFU on
his user.
<rindolf> And hopefully to avoid bissecting the KDE 4 config tree.
<Zuu> snafu... that wounds like a delicious cake :D
<Zuu> *sounds
<rindolf> Zuu: Situation Normal - All F****ed up.
<Zuu> :/
* Zuu gives the snafu cake to Dmage :D
<Zuu> Dmage, just eat the cake already
<Dmage> Zuu, are you hate my english? ;)
<Zuu> i hate your non-english
<Black_Phoenix> I english your hate
<Dmage> xD
<Zuu> Dmage, but i dont hate you! :D
<Black_Phoenix> and now I can do that
<Dmage> Zuu, learn russian then! :)
<Zuu> Hehe
<Zuu> Dmage, i think you'd hate my russion far more than i
would ever hate your english
<rindolf> Spasiva.
<Dmage> xD
<Dmage> learn 'Eto huinya!'
* Zuu steals the snafu cake back from Dmage and gives it
to rindolf instead
<Dmage> and apply everywhere
* rindolf eats the SNAFU cake
<Zuu> :D
* rindolf eats Zuu's Danish too.
<Zuu> Noooh!
* rindolf loves Zuu's Danish.
<rindolf> Yum yum.
<Zuu> tis mine!
<Zuu> My daaaanish :'(
<rindolf> My precioussssssssss!
<Zuu> tis gone :<
-- SNAFU Cake
-- ##programming, Freenode