システムをブートすると、 BIOS は一台目のディスク(またはフロッピーや CDROM)からセクタ 0 (MBR - Master Boot Record として知られている)を読み出し、 そこにあるコード - 通常は何らかのブートストラップローダ - へジャンプします。 この小さなブートストラッププログラムは 普通はそれ自身のディスクドライバは持ってなく BIOS サービスを利用します。 これは、Linux カーネルが最初の 1024 シリンダ内に完全に収まっている時のみ ブート可能であることを意味します。
この問題はとても簡単に解決できます: BIOS がアクセス可能なディスク - おそらく一台目か二台目のディスク - の最初の 1024 シリンダ内に完全に収まるパーティションに、 カーネル(と、LILO のマップファイルのようにもしかしたら ブートアップの最中に使用されるかもしれない他のファイル) を配置すればいいのです。
したがって、カーネル用の領域として 10 MB くらいの小さなパーティションを、
一台目か二台目のディスクの先頭から 1024 シリンダ内に完全に収まるように
作成してください。これを /boot
としてマウントし、
LILO がここにカーネルを置くようにしてください。
もう一つの注意点は、ブートローダと BIOS がディスクジオメトリについて
意見が一致している必要があることです。
LILO はジオメトリについてカーネルに問い合わせますが、
ディスクドライバの作者の大多数は、
BIOS が使用するであろう LILO が告げる値の代わりに、
パーティションテーブルからジオメトリを得るという悪い癖を受け継いでいます。
したがって、カーネルから供給されるジオメトリはしばしば役に立ちません。
このような場合、LILO に `linear
' オプションを与えましょう。
この効果は、ブートローダのインストール時に LILO がジオメトリ情報を必要とせず
(マップ中にリニアアドレス(訳注: のうち下位 24bit)を格納する)、
しかしブート時にリニアアドレスを変換する、というものです。
何故これがデフォルトではないのでしょう?
そうですね、一つ不具合があるのです:
`linear' オプションを付けると、LILO はシリンダ数を知る必要がなくなり、
したがってカーネルの一部が 1024シリンダ制限を越えて格納されても
警告を出さなくなり、
しまいにはブートしないシステムが出来て終わる可能性があるのです。
Tim Williams はこういってます: 「私は Linux のパーティションを最初の 1024 シリンダ以内に作成しましたが、 それでもなお起動しませんでした。1GB 以内に移動したらやっと動きました。」 どうしてなんでしょう? そう、これは AHA2940UW コントローラに接続された SCSI ディスクで、 このコントローラはファームウェアと BIOS の設定オプションに依存して H=64, S=32 (1シリンダは 1 MiB = 1.05 MB になる)か、 H=255, S=63 (1シリンダは 8.2 MB になる)のどちらか使用します。 間違いなく BIOS が前者の設定になっていて、 よって 1024 シリンダ制限が 1 GiB になっています。 しかし Linux が後者の値を使っている間は LILO は制限が 8.4GB であると思っているわけです。