1997年01月06日

LILO からWindows NT を起動する方法


はじめに

多くの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度経由していたわけです。


実験1:/etc/lilo.conf にNT のエントリを追加

そこで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 は起動失敗してしまいました。


実験2: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 の解説が記述されています。

わたし流のLinux
ご意見箱