1997年01月06日
多くのLinux インストールパッケージに附属するLILO(LInux LOader) から Windows NT を起動する方法について実験してみました。
なお、このドキュメントではインテル系CPU によるAT 互換機環境を対象とします。
DEC Alpha やPower PC アーキテクチャにはあてはまらないと思います。
AT 互換機プラットフォームのLinux でハードディスクのパーティションに関する情報を表示したり、 パーティションを切り直したり、初期化するためにfdisk コマンドを用います。
詳しくは man コマンドでfdisk を調べて下さい。
fdisk コマンドによると、私のLinux マシンの1台目のIDE HDD は次のようなパーティションになっています。
Device Boot Begin Start End Blocks Id System /dev/hda1 * 1 1 305 614848+ 6 DOS 16-bit >=32M /dev/hda2 306 306 465 322560 83 Linux native /dev/hda3 466 466 481 32256 82 Linux swap /dev/hda4 482 482 621 282240 7 OS/2 HPFS
上で、OS/2 HPFS となっているのは、実はWindows NT のNTFS です。
メールで寄せられた情報によると、HPFS と NTFS は同じ partition ID を使用している為、両者の区別は実際にその partition の中身を参照してみないと解からないそうです。 (惣慶@ソネットさん、ありがとうございました)
Linux はSlackware-3.1(1996 Aug.16 InfoMagic LINUX Developer's Resource Sept 1996) でKernel 2.0.21, NT は日本語版4.0 WS プレリリースです。
PC-DOS 6.3J/V も入っています。
Mbr(Master Boot Record:OS を起動するためのプログラムが格納されているディスク上の512 バイトの領域) にはLILO をいれてあります。
Windows NT を起動したい場合は、LILO のプロンプトから、まずdos パーティションを選択し、次にdos パーティションにNT がインストールした選択メニューからNT を選ぶ、つまり
Mbr -> DOS ブートセクタ -> NT ブートセクタ
と2段式で起動していました。
NT を起動するために、関係のないDOS パーティションのブートセクタを1度経由していたわけです。
そこでLILO から直接NT を起動できるかどうか確認するために、LILO の設定ファイル /etc/lilo.conf の最後にnt の設定(最後の3行) を記述し、次のようにしました。
# LILO configuration file # generated by 'liloconfig' # # Start LILO global section boot = /dev/hda #compact # faster, but won't work on all systems. delay = 50 vga = normal # force sane state ramdisk = 0 # paranoia setting # End LILO global section # Linux bootable partition config begins image = /vmlinuz root = /dev/hda2 label = linux read-only # Non-UMSDOS filesystems should be mounted read-only for checking # Linux bootable partition config ends # DOS bootable partition config begins other = /dev/hda1 label = dos table = /dev/hda # DOS bootable partition config ends other = /dev/hda4 label = nt table = /dev/hda
このあとlilo.conf の設定を有効化するためにroot 権限で/sbin/lilo を実行してMBR を新しいLILO で書き換え、再起動してLILO からnt を指示したところ、Windows NT は起動失敗してしまいました。
NT をインストールするときにDOS やWindows95 が既に入っている場合はNT 起動のためのローダー等がそれらの(V)FAT パーティションに入ってしまいます。
そのため、LILO からNT のパーティションに制御を移しても自力で起動できないようです。
そこで安易にDOS パーティションから ntldr, ntdetect.com, boot.ini (全て隠しファイルです)をNT のルートディレクトリにコピーして再起動しました。
(もしntbootdd.sys というファイルもある場合はそれもコピーしなければいけないかも)
/etc/lilo.conf は実験1のままです。
するとLILO から起動できました!!
ちなみに、DOS やWindows 95 との共存ではなく、Windows NT 単独でインストールした場合は上記のntldr, ntdetect.com,boot.ini がNT の起動パーティションに存在するそうです。
実験2で、DOS のパーティションのブートセクタを経由せずMBR のLILO から直接NTFS パーティションのブートセクタへジャンプできました。
しかし、そのとき現れるのはDOS パーティションの時と同じ、NT, NT(VGA), DOS の選択メニューです。
その後でNT を選択し、無事にNT が起動するのですが...
NT とNT(VGA)の選択メニューはやっぱり省略したくないので、そのメニューにDOS があっても同じことで、* 私の場合は * LILO にnt というエントリがあってもあんまり意味がありません (^^;)
(LILO からSVGA NT とVGA NT が直接選択できると、私が本当にやりたいことが実現できるのですが...)
ただ、DOS やWindows95 を入れずにWindows NT とLinux をLILO で選択できるようにしたい場合は、今回の私のlilo.conf のように、DOS と同じ感じで記述するとよさそうですね。
上記のlilo.conf はLinux, DOS, NT が全て第1ディスクに入っている場合の例で、ディスクをまたぐ場合はloader という設定が必要なはずです。
/usr/lib/lilo/README ファイルが大変参考になりました。
LILO の機能, MBR の解説、lilo.conf の解説が記述されています。