先日、私が5年間愛用しつづけてきたハードディスクドライブ(HDD)が、ついに昇天してしまった。思えば、Windows95プレインストールから、OSR2、98、Meなどと、どんどんOS入れ替えをしてきて、かなりこきつかったものだ。容量4GBは当時としては大容量だったが、今や20、30GBのUltraATAが1〜2万円で買えてしまう始末である。潮時といえば潮時だったか。
さて、HDD 20GBを新たに買ってきた。現状、OSはWinMeだが、その不安定さに閉口してしまい、Win2000のアップグレード版も購入した。今、私のPCにはIDEプライマリのマスタにその壊れたHDD、スレーブにはファイル倉庫として使っていたHDD 3GBがつながっている。このファイル倉庫HDDは2Gと1Gにパーティションが区切ってあり、2Gの方には、有用と思しきファイルのバックアップがとってある。1Gの方にはFreeBSDという別のOSが入っている。そして、セカンダリのマスタにはCD-ROMドライブ、スレーブは空き。これからどう再構築したものか。
まず、壊れたHDDを外して、新しいHDDの装着である。とりあえずこれでいっぺん電源をいれてBIOSに認識させてみる。初期表示で認識していることを確認して、そのまま電源を切る。次にWin2000を入れたいのだが、ここで困ったことにWin2000の起動ディスクがない(アップグレード版だけに)。なので、いっぺんアップグレード対象のOSをインストールして、そこから改めてWin2000を入れることになる。
追記... 後から気付いた。BIOSでCDからブートするようにして、Win2000のCD-ROMを突っ込んで起動すれば、そのままWin2000がセットアップできたのね(^^; Win2000のCDはアップグレード版でも起動可能なディスクになっているようで。
Win98の起動ディスクは作ってあったので、そいつでまず立ちあげる。20GB全部使うのはどうかと思い、これを10GBずつに領域を分けて最初の領域(C:)をFAT32でフォーマットして、そこにWin98をインストールすることにした。特に問題なくWin98のセットアップが完了。とりあえずWin98が起動する形になった。
追記... 結局Win2000を入れるつもりなら、最初からWin2000のアップグレードCDからブートしてそのままセットアップを開始しても良い。途中Win98などのアップグレード対象OSのCDを求められたら、そこで一旦ディスクを交換して、OKになったら引き続きWin2000のインストールを続行することができる。
次にWin2000を入れる。Win98を立ちあげて、Win2000のCDを突っ込むと、アップグレードするかどうか聞いてくる。ここは迷わず「はい」。今入れたばっかしのWin98に何の未練もない。ついでにファイルシステムもNTFSに変換してしまう。そのままWin2000のセットアップが始まり、程なくインストール終了である。なんとあっけない!と、ここまでくると欲が出てくる。せっかく購入したWinMeも使いたい(不安定だけど)。つまり、Win2000とWinMeをデュアルブートしたいというわけだ。
ここまできて失敗に気づく。NT系の後に9x系を入れると、NTが起動しなくなる、というのはどうも常識らしい。NTを起動するための情報がか書かれているディスクの先頭部分(MBRという。これは後述)がWin98の起動情報に置き換えられて、NT系OSが起動できなくなってしまうようなのだ。私は今まさにそれをやろうとしている。CドライブにはWin2000がインストール済み状態。ここから、Dドライブ(2つに分けたもう一方の領域)にWinMeを入れたいのである。
追記... 逆に、Win9x系の上からWinNT系を導入するのは大丈夫。WinNTのセットアップはちゃんとWin9xの起動情報を保存しておいてくれて、起動時にNTか9xかを選択できるようにBOOT.INIを設定してくれる。この辺は開発者の性格の違いかしらね(笑)
ひとつの方法として、そのままWinMeをDドライブに入れて(実際にはWin98を入れてから、それをアップグレード)WinMeが起動する状態にする。そこから、Win2000を起動ディスクから起動して修復セットアップを行う、という方法がある(起動ディスクは、Win2000で予めつくっておく)。Win2000のセットアップ画面(青いバックのやつ)で修復セットアップ(R)を選んで、さらに回復コンソール(C)を起動してWin2000にコンソールでログオンする(回復コンソールはC:\WINNTを見つけて、そこにログオンするように誘導してくれる)。そこでコマンドラインから「FIXMBR」と打てば、Win2000の起動情報がディスクの先頭部分に復活して、Win2000の起動情報が復活する。これはこれで手。
追記... ちなみに、DOSで立ち上げて(起動ディスクなどで)、「FDISK /MBR」 としても復旧できるらしい。
ところで、もっとスマートに、bootpartというツールを使用して復旧する方法もある。これは、NTローダに複数のブート可能な領域を認識させてデュアルブートを可能にするツールである。これを使うにはまずPC/AT互換機(いわゆるDOS/V)のOSをブートする仕組みを知っておく必要があった。まぁ勉強もかねて...
PC/AT互換機というのは、基本的にOSは一つしかブートできない仕組みであるらしい。BIOSは一番最初のHDD(デフォルトでプライマリのマスタにつながっているHDD、最近のBIOSなら選択することも可能になっている)の先頭セクタ(物理ディスクの最初の512Byte)に書かれているマスターブートレコード(MBR)を読み込んで、そこに書かれている基本パーティションのブート設定を確認する。基本パーティションのブート設定は、パーティションブートレコード(PBR)なるものに書き込まれており、そこに処理が渡されてOSの起動となる。つまり、MBRから処理を渡されるPBRにOSを選択するプログラムが起動するように書き込んでおけば良いわけだ。こうすれば、PBRが複数存在するシステムをつくって、そのどれかを選択して起動することが可能となる。
bootpartは、このMBRとPBRをつくって、そのOS選択プログラムとしてNTローダを設定するという仕事をやってくれる。実に便利。
ということで、とりあえず、DドライブにWin98を入れる(後でこれをMeにアップグレードする)。この際、Win98からはNTFSの領域は不可視なので、Dドライブは、98から見るとCドライブとなるらしい。これは都合が良い。Win98は基本的にCドライブにしかインストールできないからだ。しかし、Win98をインストールすると、MBRはWin98のパーティションの先頭を読むように設定されてしまう。ということで、この時点でWin2000のPBRは無視されてしまう。
さて、ここからそのまま98をMeにアップグレードしてしまえばいいような気もするが、そうすると、あとでbootpartの入る余地がなくなってしまうのだ。bootpartはDOS(またはNTのDOSプロンプト)で動くツールであり、9x系のWindowsのDOSプロンプトでは動作しないのだ。そして、なんとWinMeはDOSモードで立ちあげることができない。どうやらMSは、MeからDOSというものを切り離してしまう方針らしい。つまり、Win98であるこの時点でbootpartを使用するしかない。
追記... これも後から知ったのだが、WinMeでもDOSモードで立ち上げることはできるようである。ただ、起動時にF8ではだめで、起動用ディスクを作ってそこから立ち上げる、という手順が必要。起動用ディスクは、Meの「アプリケーションの追加と削除/起動ディスク」から作成できる。
とりあえず、インターネットにつながる環境にセットアップしたら、bootpartを入手。ここからダウンロードすることができる。
http://www.winimage.com/bootpart.htm
ダウンロードしたら、圧縮ファイルを適当なところへ展開して、その中の bootpart.exe (これがツール本体)を適当なフォルダへコピーしておく。フルパスでコマンドを打たなくてもいいようにパスの通ったフォルダ(C:\WINDOWS\COMMAND など)が良い。
ここまでできたら、DOSモードで再起動(Win9x上で動くDOSプロンプトでは駄目である。ちゃんとDOSモードに切り替える)。そして、とりあえず次のように打ってみる。
C:\>bootpart |
すると、次のような一覧が表示される。
0 : C:* type=7
(HPFS/NTFS), size = 9165088 KB 1 : C:* type=b (Win95 Fat32), size = 9096543 KB 2 : D:* type=a5 (BSD/386), size = 1096543 KB 3 : D: type=f (Win95 XInt 13 extended), size = 245407 KB |
ここで 0 と表示されているのが、実際はWin2000の入っているドライブだということに注意したい。Win98(DOS)からはそのパーティションが見えないので、Win98では 1 がCドライブとして認識されている。ちょっとややこしい。
では、Win98のインストールによって潰されたNTローダの設定をMBRに復活させよう。やり方は簡単、次のように打ち込むだけでよい。
C:\>bootpart winnt boot:C: |
これでNTローダを起動するMBRが0番のCドライブに復旧する。
追記... これはWin2000のCDから回復コンソールを起動して「FIXMBR」をしても良い。
ここでマシンを再起動してみる。最初にNTローダが立ち上がったら成功だ。BOOT.INIの設定によってはNTローダが立ち上がらずそのままWin2000が起動するかもしれない。これでも、一応成功。とにかく、そこからWin2000が起動すれば良い。あとは、Win2000のコマンドプロンプトを使用して作業する。Win2000なら、わざわざDOSで再起動する必要はなく(というか、できない)、そのままWin2000のDOSプロンプトが有効に使用できる。
DOSプロンプトを起動したら、デュアルブートの設定をする。今はCドライブからWin2000、DドライブからWin98を起動したいのだが、CからWin2000が起動する設定は、先ほどのコマンドで既に設定済みだ。なので、あとはDドライブからWin98を起動する設定をすれば良い。それには、まずWin98パーティションのPBRを作る必要がある。
もう一度、
C:\>bootpart |
とだけ入力して、パーティション構成を確認してみる。* 印 がついているパーティションがブート可能なパーティションなので、ここでは Win95 Fat32 となっているパーティションのPBRを作成する。ということで、
C:\>bootpart 1 win9x.pbr Windows9x |
と入力する。第一引数は一覧に表示されているドライブ番号、第二引数はファイル化されるPBRのファイル名、第三引数は boot.ini に書き込まれるOSの名称である。第二引数、第三引数は基本的に何でも良い。自分でわかりやすい名前で登録しておくのが良い。また、これらは後で boot.ini を編集することで変更可能だ。
このコマンド実行後、C:\ に先ほど作成したPBRファイルができているはずだ。念のために boot.ini も確認してみる。
C:\win9x.pbr="Windows9x"
という行が追加されていれば、設定完了だ。これでもう一度マシンを再起動する。すると、NTローダが立ち上がり、Win2000とWin9xの選択ができる画面となっているはず。ここで、Win9xの方を選択して起動する。
Win98が起動したら、あとはそれをWinMeにアップグレードすれば、すべての作業完了だ。
以上の手順のうち、Win98のPBRの作成がうまくいかないことがある。その場合は、Win98を起動して(多分、BIOSでスタートアップのディスクをWin98の入っているものに変更するしか手はない)、それをDOSモードにして、DEBUGコマンドでPBRファイルを作成する。この方法は多少面倒だ。例えば次のような感じ。
C:\>debug -l 100 2 0 1 -n Win9x.pbr -r BX BX 0000 :0 -r CX CX 0000 :200 -w |
意味は、ドライブの先頭セクタをアドレス100hに読み込んで、それをWin9x.pbrという名前のファイルで200Byte書き込み(保存)しろ、という感じ。-Rはレジスタ指定で、ここでどこからどこまで書き込むか指定している。とりあえずこれで「Writing 0200 bytes」と表示された後、Cドライブ直下に Win9x.pbr というファイルが作成されるはず。DEBUGコマンドの詳細については、
C:\>debug -? |
で確認できるので、やるなら自分でちゃんと確認しながらやるべし。
こででできたファイルをCドライブにコピーし、boot.ini のファイル名をそれに指定しなおせば起動できる(多分)。ただ、これはディスクの内容を直接操作するもので、一定のリスクが伴う。書き込みに失敗したりすると、何も起動できなくなってしまうこともある。
※注 このドキュメントによって何らの問題が発生したとしても私は一切の責任を負いません。
22, Sep, 2000
[ MENU ]