Windows Vista/7/8/10と MS-DOS 7.1のマルチブート

Copyright (C) 2015-16 DOSsoft(まりも)
2015.8.1、2016.2.19

 1. はじめに

 MS-DOS 7.1(Windows 98のDOS)とWindows Vista/7/8/10(以下Win7と略記)を一台のハードディスクから両方ブートできるようにしたい場合、MS-DOSが先に存在している状態で、後でWin7をインストールしても、自動的にマルチブート可能な状態になりません。通常は、アクティブであるDOS領域にWin7のブートマネージャのみ置かれ、別の領域にWin7の本体がおかれて、Win7のみが起動するようにブートマネージャが構成されてしまいます。すなわち表向きはDOSとのデュアルブートをサポートしていません。

 したがって、DOS環境があるところにWin7をインストールするのも、Win7環境があるところにDOSをインストールするのも、マルチブートを構成する方法は同じ、つまり後者の場合を考えればよいと言うことになります。  既に別アーティクルで述べたように、Win7のブートマネージャの存在領域はファイルシステムがNTFSでなくFATでもよいことがわかっています。FAT32でなくFAT16でも行けるようです。

※ ご注意

 bcdeditを使ってブートマネージャに対し起動ドライブの変更を行う操作は、ハードウェア環境の変更とみなされて、Windowsの再認証(アクティベーション)が発生する場合があります。ブートマネージャの編集はアクティベーション前に行うことを推奨します。

2.MS-DOSが起動できるパーティションを維持してWin7を後からインストールする場合

 この場合はまず拙作DOSソフト「DosBtImg」を実行してDOSパーティションに適用し、BOOTSECT.DOSというファイルをそのrootディレクトリに作っておいてください。その後Vista/7/8/10(以下Win7と略記)をインストールします。DOSのパーティションがアクティブとなっているわけですので、Win7のブート関連のファイルは、DOSがあるパーティションに作られます(Win7本体は別のパーティションに作られます)。

 なおWindows 8/8.1/10ではこのドライブのrootに「BOOTSECT.BAK」というファイルが作られますが、これはBOOTSECT.DOS ファイルと中身が同じです。Windows 8/8.1/10をインストールする場合は、最初にBOOTSECT.DOS を作らなくても、インストール後に「BOOTSECT.BAK」を「BOOTSECT.DOS」に名前変更しておけば同じ結果となります。

 引き続く操作については3.を飛ばして4.をお読みください。

3.Win7がインストール済みのディスクに後からMS-DOSパーティションを作る場合

 まずMS-DOSを入れるためのFAT16/FAT32のパーティションを作り、そこを「アクティブ」の属性にしておきます。このあとはWin7が起動できなくなりますから、別途MS-DOSが起動できる手段(CD/DVD,USBからのMS-DOS起動)は用意しておいてください。そしてFAT16/FAT32のパーティションにMS-DOSを入れます。MS-DOSのファイルのコピーはもちろんですが、ブートローダはSYSコマンドを使って転送するか、拙作「BOOTSECT」というプログラムで作成してください。そして拙作DOSソフト「DosBtImg」を実行してDOSパーティションに適用し、BOOTSECT.DOSというファイルをrootディレクトリに作っておいてください。

 次にWin7の領域(NTFS)にあるブートマネージャ関連のプログラムファイルを、DOSの領域(FAT)にコピーします。ブートマネージャ関連のプログラムファイルは次のものです。

Win7は自身を起動させたブート関連ファイルも他のWin7のそれもロックしていますので、別のOS,例えばWinXPやLinuxを使ってコピーすることになります。

 ブートマネージャ関連のファイルをFATパーティションにコピーしても、起動するのは元の通りMS-DOSです。そこで「BOOTSECT」プログラムを再びDOS上で使って、このDOSパーティションのブートローダ(IPL)をWin7仕様のブートローダに変更します。次に起動したときは元の通りWin7が起動するはずですが、もしかすると起動に失敗するかもしれません。そのときはWin7のインストールDVDを使って「修復」を行ってください。なおこのときアクティブなパーティションはMS-DOSパーティションになっている必要があります。それ以外ではWin7起動の修復はできてもDOSとのマルチブートの準備にはなりません。

4.Win7のブートマネージャで起動OSを選択できるようにする

 DOSとWin7ブートマネージャの両方が入ったFATパーティションからのWin7の起動を確認後、そのパーティションにドライブ文字が割り当てられているか確認します。割り当てられていなければ、「ディスク管理」で割り当ててください。ここではそれがX:ドライブになっているとして進めます。

 ここまで来ればあとはブートファイル(BCD)を編集することになります。ブートファイルの編集には、管理者権限でBCDEDITを使います。まず「ブートエントリ」を作成するために、次のコマンドを実行します。application bootsector というキーワードがDOSブートでは必須です。/d 以下のダブルクォーテーションの文字列は、ブートメニューに現れるもので、任意でかまいません。
bcdedit /create /d "MS-DOS 7.1" /application bootsector
すると{ }で囲まれたGUIDが生成され、その結果がコンソール画面に表示されます。今度はそれを使って、次のコマンドセットを実行します。{エントリ}と書かれているところはそのGUIDの値を埋め込む必要があります。
bcdedit /set {エントリ} device partition=X:   ←ブートマネージャ&DOSのドライブ名に合わせる
bcdedit /set {エントリ} path \BOOTSECT.DOS
bcdedit /displayorder {エントリ} /addlast

最後の /addlast はブート選択リストの最後に位置させる場合で、先頭に持ってくるためには /addfirst とします。なおこれを行ってもデフォルトのブートエントリは変更されるわけではなく、以前からのWin7領域が優先的に起動します。

 このコマンドが問題なく実行できれば、次からは起動の際に、もとのWin7領域とDOS領域との選択画面が出てマルチブートは完了します。

 なおWindows 8/8.1/10の場合は、Windows Vista/7と違い、ブートマネージャのメニューはグラフィカルになっていますが、Windows VISTA/7のそれと上位互換性があります。Windows 8/8.1/10のブートマネージャでは、MS-DOS起動を選択すると一旦起動時BIOSメッセージに戻ったような画面が現れてからDOSが起動します。ブートマネージャの起動の軽さからいうとWindows VISTA/7用のもののほうがよいと思います。

3.応用

 /applocation bootsector指定で作るGUIDは複数個が許容されるようです。つまり複数のDOS領域の起動は可能だということになります。それぞれのドライブ文字で bcdedit /set {エントリ} device partition=ドライブ: を 実行できます。さらに、pathに指定した\BOOTSECT.DOSの代わりに、FAT32のWinXPパーティションのブートセクタ(12セクタ)から抽出したファイルを指定すると、WinXPも起動できます。{ntldr}指定の方法ですと1個しか記述できませんでしたが、この方法ではWinXPの起動パーティションも複数可能だということになります。

 またMS-DOSだけでなくLinuxの選択起動もこの方法でできます。ただしLinuxのインストール時に、アクティブなDOS/FATパーティションからのGRUB起動となっており、MBR(マスターブートレコード)にはGRUBを入れていないという形になっている必要があります。MBRにGRUBがある場合はMicrosoftのMBRを入れるとLinuxが起動できなくなりますし、そもそもGRUBでOSの選択起動をすればよいわけですから、本稿で紹介するマルチブートの方法をわざわざ使う意味はないと思います。

 うまく工夫すれば、MS-DOS, Windows XP, Win7, Linuxの4つを選択するブートマネージャにすることも可能となります。基本パーティションは4個までしか作れない制約があるので、Linuxは最初から拡張DOSパーティションに本体の領域とスワップ領域を作ってインストールしておく必要があります。もっとも、最後にLinuxをインストールしGRUBをインストールすれば直接他のOSの起動も面倒みてくれるので、本稿のような手段は必要はないわけですが。

[OS関連ノウハウに戻る]