ESXi7にWindows98をインストールした
Ryzen CPUを使ってるESXiサーバにWindows 98をVMで入れようとしたら引っかかるところがあったのでメモ。
追記(2023/09/07)
これで全て解決した。 https://github.com/JHRobotics/patcher9x
ReleasesからFDイメージ(今回はpatcher9x-0.8.50-boot.ima)をダウンロードして起動 -> CD-ROMドライブに移動して SETUP.EXE /NM
で普通にインストール -> 再度FDで起動して patch9x
-> 全てdefaultを選択してパッチ当て -> 再起動でOK。
リポジトリのREADMEによると、どうやら当初書いていたVME bugではなくTLB invalidation bugとCPUが速すぎるために0除算が発生していたこと原因だったよう。
パッチの制作者様に感謝…。
環境
- ESXiホスト
- OS: ESXi 7.0 Update 3g (20328353)
- CPU: AMD Ryzen 7 1700
- ゲストOS: Windows 98 SE
やったこと
詳しくは調べられていないが、どうやらRyzen CPUにはVME bugと呼ばれるバグがあるらしく、VMでWindows 9x(16bitが使えるOS?)を動かすと問題が発生する。
試しに何も対策をせずにインストールすると、以下の画面のようにEXPLORERが6d007eHの例外を吐いて落ち、「SHELL32.DLL ファイルは 欠落エクスポート GDI32.DLL にリンクされています。」というエラーが表示されたきりセットアップが進まなくなってしまった。
この問題は32ビットプロテクトモードのディスクドライバを使用しない設定にすることで回避ができるが、Windowsのセットアップ中に問題が起きるため回避設定が入れられない。
そこで今回は、Windows98のインストール後かつセットアップ前に起動ディスク(FD)で起動し、レジストリを修正することで上記の設定を入れ、この問題を回避することにした。
FDで起動するタイミングは、1回目~2回目の再起動後。3回目の再起動後には例外が出てしまうためこのタイミングになる。
起動ディスクで起動したら、EDITコマンドなどを使いC直下など適当な場所に以下の内容を書いたファイルを作成する。今回は C:\FIX.REG
とした。
REGEDIT4
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
"ForceRMIO"=hex:01,00,00,00
その後、 cd C:\WINDOWS
でカレントディレクトリをWINDOWSのフォルダにし、以下のコマンドを実行する。
REGEDIT /L:SYSTEM.DAT /R:USER.DAT C:\FIX.REG
このコマンドで Importting file (100% complete) になったら対応は完了。
FDを外して RESTART
コマンドで再起動すれば正常にセットアップが完了する。
なお、この対策をしたからかWindows98からCDドライブが見えず、VMware Toolsのインストールが行えなかったため、再び起動ディスクで起動して一時的にCDからHDDにファイルをコピーすることでドライバのインストールを行った。
XCOPY32.EXEはC:\WINDOWS\COMMAND
の下に入っているので以下のような感じでコピーした。
MD C:\CDROM
CD C:\WINDOWS\COMMAND
XCOPY32 /E E:\ C:\CDROM
※長いファイル名に対応させるためXCOPY32を使っているが、ファイル名が削られるような気がするので、もしかしたら何か間違っているかもしれない。
なお、Windows9x用のVMware ToolsのISOは以下のURLからダウンロードできる。
https://customerconnect.vmware.com/jp/downloads/details?downloadGroup=VMTOOLS10012&productId=614
また、7-Zip 9.20はWindows 9xでも動作するため入れておくと便利かもしれない。