1997年01月06日

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


はじめに

多くのLinux インストールパッケージに附属するLILO(LInux LOader) から Windows NT を起動する方法について実験してみました。

結論を先に書くと、これは普通にするとできた、という 事実の報告です。
別に技術的に難しいことを成し遂げたわけではありません (^^;;

なお、このドキュメントではインテル系CPU によるAT 互換機環境を対象 とします。
DEC Alpha やPower PC アーキテクチャにはあてはまらないと思います。

現状の説明

AT 互換機プラットフォームのLinux でハードディスクのパーティションに関する 情報を表示したり、パーティションを切り直したり、初期化するためにfdisk コマンドを用います(DOS と同じでややこしいですね)。
詳しくは 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 メニューへ戻る


私へのメールは専用フォームからどうぞ