Windows NTのOSローダーによる
マルチOSブートの試み

最終更新 1999.4.30


目次

  1. はじめに
  2. Windows NTとWindows 95のブートについて
  3. マルチOSブートの実現
  4. OSローダーのみのインストール
  5. その他
  6. おわりに

表目次

  1. Windows NTのブート関連ファイル
  2. Windows 95と旧版MS-DOSのファイル名の対応
  3. パーティション構成例
  4. PBRイメージファイル名の例
  5. OS/2のインストール形態と、 NTのOSローダーからのブート可能性との関係

1. はじめに

本稿では、Windows NTのOSローダーを用いて、 複数のOSを選択ブートする方法について解説します。 対象機種はPC/AT互換機で、 OSはMS-DOS、Windows 95、Windows NT、FreeBSD、Linuxです。

本稿の内容は、参考文献に示したWWWページの内容に基づいています。 そちらもあわせて熟読されることをおすすめします。

なお、本稿の内容を運用した結果について筆者は責任を負いません。 手順を誤ると、OSがブートしなくなったり、 パーティションがアクセス不能になったりするおそれがあります。 十分に内容を理解した上で慎重に作業を行ってください。


2. Windows NTとWindows 95のブートについて

ここでは、本題に入る前の予備知識として、 AT互換機の起動処理、Windows NT/95のブート処理について簡単に解説します。 すでに知っている方は読み飛ばしてください。

2.1 PC/AT互換機の起動処理

POST終了後、BIOSは1台目のHDDのマスターブートレコード(MBR)を読み出し、 処理を移します。 MBRはパーティションテーブルを保持しており、 アクティブな基本パーティションのパーティションブートレコード(PBR)を読み出し、 処理を移します。 PBRはOSをブートします。 MBRは特定のOSには依存しませんが、PBRはOSやファイルシステムに依存します。

このように、標準のブート処理はきわめて限定されたものであり、 PC-98のように起動時にOSを選択することなどはできません。 そのため、さまざまなブートセレクターが出回っています。

2.2 Windows NTのブート処理

NTは、PBRから起動される独自のブートセレクターを持っています。 これは、NTのブートに密接に関係していますが、 他のOS(のPBR)をブートすることもできます。

NTをインストールすると、 1台目のHDDのアクティブな基本パーティション(ドライブC:)のPBRに、 NTのPBRが書き込まれます。 C:にすでに他のOS(通常はDOS/Win95)がある場合、 古いPBRはBOOTSECT.DOSとして保存されます。

このパーティションを起動すると、 NTのPBRは、NTLDRをロードして処理を移します。 NTLDRは、BOOT.INIを読み込んでOSローダー画面を表示し、 ブートするOSをユーザーに選択させます。 ここで、NTが選択されると、 NTDETECT.COMを呼び出してハードウェアの構成を調査させ、 カーネル(NTOSKRNL.EXEまたはNTMPKRNL.EXE)をロードしてNTをブートします。 NT以外のOSが選択されると、 BOOT.INIで指定したPBRイメージファイル(デフォルトはBOOTSECT.DOS)を読み込み、処理を移します。 これにより、MBRから直接そのPBRが呼ばれたのと同じ状況になるため、 目的のOSをブートすることができます。

Windows NTのブート関連ファイル
ファイル名 内容
NTLDR OSローダー本体
NTDETECT.COM ハードウェアの構成を調査する
BOOT.INI OSローダーの設定
BOOTFONT.BIN 日本語フォント
BOOTSECT.DOS 元のPBR
NTBOOTDD.SYS SCSIドライバ

BOOT.INIがないと、 デフォルトのパス

multi(0)disk(0)rdisk(0)partition(1)\WINNT

からNTをブートします。 BOOTFONT.BINがないと、OSローダーは英語モードで動作します。 NTBOOTDD.SYSは、BIOSを持たないSCSIカードに接続されたHDDからのブートに使われます (実体は、そのSCSIカードのNT用デバイスドライバそのものらしいです)。

2.3 Windows 95のブート処理

DOSがインストールされているパーティションにWindows 95をインストールした場合、 95とDOSの選択ブートが可能になります。 これは、両方のシステムファイル(IO.SYSMSDOS.SYSなど)を保持しておき、 ブート時に起動メニューなどの選択によってリネームして入れかえることで実現されています。

Windows 95と旧版MS-DOSのファイル名の対応
ファイル名DOS版Win95版
IO.SYS IO.DOS WINBOOT.SYS
MSDOS.SYS MSDOS.DOS MSDOS.W40
COMMAND.COM COMMAND.DOS COMMAND.W40
CONFIG.SYS CONFIG.DOS CONFIG.W40
AUTOEXEC.BAT AUTOEXEC.DOS AUTOEXEC.W40

なお、PC DOSではIO.SYSMSDOS.SYSのかわりに IBMBIO.COMIBMDOS.COMというファイル名になっています。 ここに95をインストールすると、 空のIO.DOSMSDOS.DOSが作られてしまい、 起動メニューからPC DOSをブートできなくなることがあります。 その場合は、これらのファイルを消してください。


3. マルチOSブートの実現

3.1 前提

対象とするOSは以下の通りです。

ここでは、1台のEIDE HDDにすべてインストールする以下のような構成を想定します。

パーティション構成例
パーティション OS ファイルシステム ドライブ名 ARCパーティション番号 FreeBSDデバイス名 Linuxデバイス名
基本 PC DOS、Windows 95 VFAT16 C: 1 wd0s1 hda1
基本 FreeBSD UFS -- 2 wd0s2 hda2
拡張 Windows NT VFAT16/NTFS D: 3 wd0s5 hda5
Linux swap -- 4 wd0s6 hda6
ext2 -- 5 wd0s7 hda7

DOSとWindows 95は同一の基本パーティションに、 NTとFreeBSDとLinuxはそれぞれ独立のパーティションにインストールするものとします。NTとLinuxは拡張パーティションにインストールできますので、 基本パーティションを節約するためにそうしています。

なお、LinuxにUFSサポートを組み込んだ場合、 FreeBSDのパーティション(スライス)中にある各UFSパーティションが/dev/hda5以降に割り当てられますので、 Linuxのパーティションのデバイス名が変化します。

3.2 作業の概要

  1. 各OSのPBRをHDDから読み取り、イメージファイルを作成します。
  2. BOOT.INIを設定します。

3.3 PBRのイメージファイルの作成

OSローダーでNT以外のOSをブートするためには、 そのOSのPBRのイメージファイルを作る必要があります。 ファイル名はなんでもかまいませんが、 ここでは筆者の趣味(※)で以下のようにします。 BOOTSECT.DOSというファイル名のファイルを用意する必要はありません。

PBRイメージファイル名の例
OS ファイル名
PC DOS PCDOS.PBR
Windows 95 WIN95.PBR
FreeBSD FREEBSD.PBR
Linux LINUX.PBR

ファイルを置いておくディレクトリもどこでもよいのですが、 ここではC:\に置くことにします。

他の文献ではBOOTSECT.DOSに倣ってBOOTSECT.W95とかBOOTSECT.LNXなどとしていますが、 拡張子はファイルの形式を表すものであるという原則に立てば、 このようなネーミングは不適切といえます。

それでは、各OSのPBRのイメージファイルを作る方法を説明します。 作業の前に、インストールした各OSが通常の手順で正しくブートすることを確認してください。 また、非常時に備えて、 各OSのインストール(ブート)メディアと緊急用ブートフロッピーを必ず用意しておきましょう。

まっさらなHDDに新規にインストールする場合は、以下の順序をお勧めします。

  1. DOSをインストールする。
  2. DOSのPBRを保存する。
  3. Win95をインストールする。
  4. 基本パーティションに他のOS(ここではFreeBSD)をインストールする。
  5. NTをインストールする。
  6. 拡張パーティションに他のOS(ここではLinux)をインストールする。
  7. BOOT.INIを編集する(後述)。

3.4 BOOT.INIの設定

NTをインストールした後のBOOT.INIは、 次のようになっていることと思います。

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(3)\WINNT

[operating systems]
multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT Workstation 4.00"
multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT Workstation 4.00 [VGA mode]" /basevideo /sos
C:\="Microsoft Windows"

[operating systems]セクションには、 ブートするOSの名称とその所在を記述します。 所在は、NTの場合はSystemRootディレクトリをARCパス名で記述し、 他のOSの場合はPBRのイメージファイルをフルパスで記述します (ファイル名を省略するとBOOTSECT.DOSとみなされます)。

[boot loader]セクションについてはとくに説明の必要はないでしょう。 なお、timeoutに-1を指定するとタイムアウトが無効になります。

以上から、マルチOSブートを実現するためには、 PBRイメージファイル(*.PBR)をC:\におき、 BOOT.INIを以下のように記述します。

[boot loader]
timeout=30
default=C:\PCDOS.PBR

[Operating Systems]
multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT"
multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT [VGA mode]" /basevideo /sos
C:\PCDOS.PBR="PC DOS/V" /win95dos
C:\WIN95.PBR="Windows 95" /win95
C:\FREEBSD.PBR="FreeBSD"
C:\LINUX.PBR="Linux"

ここで、DOSのエントリについている/win95dosスイッチと、 95のエントリについている/win95スイッチが重要です。 これらは、OSローダーの非公式な機能で、 95の起動メニューと同様にシステムファイルのリネームを行います。 この機能はNT 3.51以降のOSローダーで有効です。

なお、ここではタイムアウト時にPC DOSをブートするように指定していますが、 もちろん他のOSを指定してもかまいません。

MBRに何らかのブートセレクター(lilo、booteasyなど)が入っている場合は、 わずらわしくないよう、外しておきます。 DOSでFDISK /MBRとするのが簡単です。


4. OSローダーのみのインストール

ここでは、NTをインストールせずにOSローダーのみをインストールする方法を説明します。 前提とする構成は、前章の構成からNTを除いたものとします。

以下のような手順を踏みます。

  1. 各OSのPBRをイメージファイル化する
  2. OSローダーのファイルをコピーする
  3. BOOT.INIを書く
  4. C:にNTのPBRを書く

4.1 PBRのイメージファイルの作成

ここは前と同じですので省略します。 ただし、NTのインストーラーがBOOTSECT.DOSを作ってくれるということはありませんので、 DOS/Win95のDEBUGコマンドやUNIXのddコマンドですべて作る必要があります。

4.2 OSローダーのファイルのコピー

NTのCD-ROMから、NTLDRBOOTFONT.BINC:\にコピーします。 NTをブートするわけではないのでNTDETECT.COMは不要です。 また、英語表示でかまわなければBOOTFONT.BINも不要です。

4.3 BOOT.INIの作成

エディタを使ってBOOT.INIを書きます。 ここでは以下のようにします。

[boot loader]
timeout=30
default=C:\PCDOS.PBR

[Operating Systems]
C:\PCDOS.PBR="PC DOS/V" /win95dos
C:\WIN95.PBR="Windows 95" /win95
C:\FREEBSD.PBR="FreeBSD"
C:\LINUX.PBR="Linux"

4.4 PBRの更新

C:のPBRを、NTのもので置き換えます。 NTの修復インストールで「ブートセクタの検査」を選べばよいように思いますが、 実際にやってみると、修復ディスクがあるかNTをインストールしてあることを要求されるので、うまくいきません。 ここでは、NTのセットアップディスクからブートレコードを読み出し、PBRとして利用します。 ただし、これはNTLDRの代わりにSETUPLDR.BINを読むようになっているので、そこを書き換える必要があります。 また、PBRにはBPB(BIOS Parameter Block)が記録されているので、 元のC:のBPBを壊さないようコピーします。 手順を誤ると非常に危険ですので注意してください。

C:\>DEBUG
-L 100 0 0 1		ドライブA:のブートレコードを0100H番地に読み込む
-E 2DC "NTLDR      "	読み出すファイル名をNTLDRに書き換える
-L 1000 2 0 1		ドライブC:のPBRを1000H番地に読み込む
-M 100B 103D 10B	BPBをコピーする
-W 100 2 0 1		ドライブC:のPBRに書き出す
-Q

C:\>

Wコマンドで書き出す前に、Dコマンドで確認することを強くお勧めします。 また、この書き換えたPBRもファイル化しておくとよいでしょう。

最後にFDISKでC:をアクティブに設定し、 リブートしてOSローダーから各OSが起動できれば成功です。


5. その他


6. おわりに

AT互換機では、標準のブート処理が貧弱であり、 複数のOSを選択ブートするのには向いていません。 また、パーティション管理の制約と複雑さもこれに輪をかけています。

この欠点を補うべく、多くのブートセレクターが出回っていますが、

といった問題を常に抱えています。

NTのOSローダーは、 ファイル化したPBRを選択実行するという方法により、 原理的には多くのOSをブートすることが可能です。 PBRのイメージファイルを用意するのがやや面倒ではあるものの、 設定の変更はテキストファイルを編集することで容易に行え、 選択ブートの操作性も優れています。

本稿では、このような特長を生かした選択ブートの実現について説明しました。 皆さんのOS環境改善の一助となれば幸いです。 本稿に対するご意見や改良案、誤りの指摘を歓迎します。


付録A. DEBUGコマンドによるPBRの読み書きの例

DOSや95に付属しているDEBUGコマンドを用いて PBRを読み書きする例を示します。

PBRを読み込んでイメージファイルを書き出す

C:\>DEBUG
-L 100 2 0 1		ドライブC:のPBRを0100H番地に読み込む
-N NT40.PBR		書き出すファイル名を指定
-R BX			書き出すサイズを指定
BX 0000
:0
-R CX
CX 0000
:200
-W			0100H番地以降を書き出す
Writing 0200 bytes
-Q

C:\>

イメージファイルを読み込んでPBRに書き出す

PBRへの書き出しはとくに注意してください。 手順を誤るとOSがブートしなくなるおそれがあります。

C:\>DEBUG NT40.PBR	ファイルを0100H番地に読み込む
-W 100 2 0 1		ドライブC:のPBRに書き出す
-Q

C:\>

付録B. OS/2のブートについて

OS/2は、ブート方法やインストール先パーティションによって、 いくつかのインストール形態がありますが、 ほとんどの場合、NTのOSローダーからの直接ブートには困難を伴います。

OS/2のインストール形態と、 NTのOSローダーからのブート可能性との関係
インストール形態 ブート可能性 備考
ブート方法 パーティション ファイルシステム
2重ブート 基本(アクティブ) FAT BOOTコマンドで切り替えるとPBRの入れ替えが起きるため、 再度切り替えるまではOSローダーが起動しなくなります。 これを克服しても、 OSローダーではCONFIG.SYSAUTOEXEC.BATを入れ替えられないため、 ブートできるのはDOSとOS/2のうち有効になっている方だけです。
ブートマネージャー
または単独
基本(アクティブ) FAT C:にDOSを入れることはできません。
HPFS C:がHPFSになるので、 OSローダーを導入する環境としては現実的ではありません。
基本(非アクティブ) FAT × ブートしそうに見えますが、 ブートマネージャーの場合と違い、このパーティションがC:にならないので、 OS/2はファイルを見つけられず、ブートできません。
HPFS
ブートマネージャー 拡張 FAT × まったくブートしません。
HPFS

結局、OS/2に関しては、NTのOSローダーからの直接ブートはあきらめて、 他のブートセレクター(OS/2ブートマネージャーかMBR型のブートセレクター)を併用することになるでしょう。

OS/2ブートマネージャーを使う場合、OS/2を1つしかブートしないのであれば、 ブートマネージャーのタイムアウトを短くすることで、 見かけ上OSローダーから直接ブートすることができます。 ただし、OS/2ブートマネージャーは、基本パーティションを1つ占有するという欠点があります。 また、ブートマネージャーのパーティションはファイルシステムではないため、 そのPBRをファイル化するには、ディスクBIOSを呼ぶか、UNIXでddを使うか、 BootPartのような専用ツールを使う必要があります。

MBR型ブートセレクターを使う場合は、OSローダーとあわせて2段階の選択操作が必須です。


参考文献

How to Triple Boot to Windows NT, Windows 95, and MS-DOS
DIRECT BOOT INTO WinNT/Win95/DOS

NTのOSローダーを用いてNT/95/DOSを選択ブートする方法について述べています。 本稿の基本的アイデアです。

NT OS Loader + Linux mini-HOWTO/(邦訳)

LinuxのHOWTO文書です。NTのOSローダーを用いてLinuxをブートする方法について述べています。

どのようにしたら FreeBSD を NT ローダーからブートさせること ができますか?

FreeBSDのFAQ集の一節で、NTのOSローダーを用いたNTとFreeBSDのマルチブートについて述べています。

The NTLDR Hacking Guide

本稿と同じような内容の文書です。併せて読むと理解が深まるでしょう。 PBRの読み書きを行うツールもあります。

BootPart 2.0: Boot Partition for WinNT

PBRの読み書きを手軽に行うツールです。

Windows NTトレーニングキット、アスキー出版局

MCP試験向けの自習書です。NTのブートの仕組みについて比較的詳しい解説が載っています。

FreeBSD & the Windows NT Boot Loader

NTのOSローダーに関連して、2台目のHDDにインストールしたFreeBSDをブートする方法について述べています。

Windows95 OSR2 FAQ

OSR2の起動メニューではDOSを起動することができません。 これを解決する方法を紹介しています。

複数のOSを走らせる法(フレーム版)

AT互換機で複数のOSを動かす方法について、さまざまな角度から考察しています。


用語集

マスターブートレコード(MBR)

各物理HDD(とくに1台目のHDD)の先頭セクタのこと。 パーティションテーブルや、 アクティブパーティションのPBRを読み出して実行を移すコードが含まれている。

パーティションブートレコード(PBR)

各パーティション(拡張パーティションでは各論理ドライブ)の先頭セクタのこと。 そのパーティションのファイルシステムの諸元や、 OSをブートするコードが含まれている。 用語としては必ずしも定着しているものではない。

ブートセレクター

本稿では、複数のOSを選択ブートするプログラムをまとめてこう呼んでいる。

実現の形態から見ると、多い順に以下のようにわけられる。

また、提供形態としては、OSに付属するもの、 フリーソフト・シェアウェアとして配布されているもの、 単独で市販されているもの(SystemCommander)、などがある。

ARC

ARC(Advanced RISC Computing)仕様とは、 今は亡きACE(Advanced Computing Environment)コンソーシアム(Compaq、MS、MIPS、DEC、SCO他)が数年前に策定したMIPS R4000ベースのワークステーションの仕様。 BOOT.INIでパーティションを指定する場合には、 以下のようにARCの規約にしたがって表記(※)することになっている。

なんでそんなのを採用したかというと、 下記のBYTEの記事でもわかるように、 NTがOS/2 3.0と呼ばれていたころ、 これをIntel x86だけでなくARC仕様機でも動かす予定だったからでしょう。 その後NT 3.1としてデビューしたこのOSは、 x86とMIPSに加えてAlphaとPowerPCでも動くようになったわけですが、 マルチプラットフォーム化の先鞭となったMIPS版は、PowerPC版ともども、 NT 4.0を最後に消えてしまいました。

ARCに関する参考資料:

2重ブート

OS/2が提供する選択ブートの方法の一つ。 C:にDOSとOS/2を両方インストールし、 BOOTコマンドによって両者を切り替えてブートする (BOOT /DOSまたはBOOT /OS2)。 主に、DOSベースのシステムにOS/2を追加インストールするための方法である。

ブートするOSの切り替えは、PBRとCONFIG.SYSAUTOEXEC.BATを入れ替えることで実現されている。 入れ替えによって退避されたPBRとファイルは、 C:\OS2\SYSTEM*.DOSまたは*.OS2として(一方だけ)保存される。


Copyright (C) 1998-1999 ITO Takayuki, All rights reserved.

伊藤隆幸のホームページ