次のページ 前のページ 目次へ

5. ブート

システムをブートすると、 BIOS は一台目のディスク(またはフロッピーや CDROM)からセクタ 0 (MBR - Master Boot Record として知られている)を読み出し、 そこにあるコード - 通常は何らかのブートストラップローダ - へジャンプします。 この小さなブートストラッププログラムは 普通はそれ自身のディスクドライバは持ってなく BIOS サービスを利用します。 これは、Linux カーネルが最初の 1024 シリンダ内に完全に収まっている時のみ ブート可能であることを意味します。

この問題はとても簡単に解決できます: BIOS がアクセス可能なディスク - おそらく一台目か二台目のディスク - の最初の 1024 シリンダ内に完全に収まるパーティションに、 カーネル(と、LILO のマップファイルのようにもしかしたら ブートアップの最中に使用されるかもしれない他のファイル) を配置すればいいのです。

したがって、カーネル用の領域として 10 MB くらいの小さなパーティションを、 一台目か二台目のディスクの先頭から 1024 シリンダ内に完全に収まるように 作成してください。これを /boot としてマウントし、 LILO がここにカーネルを置くようにしてください。

5.1 LILO と `linear' オプション

もう一つの注意点は、ブートローダと BIOS がディスクジオメトリについて 意見が一致している必要があることです。 LILO はジオメトリについてカーネルに問い合わせますが、 ディスクドライバの作者の大多数は、 BIOS が使用するであろう LILO が告げる値の代わりに、 パーティションテーブルからジオメトリを得るという悪い癖を受け継いでいます。 したがって、カーネルから供給されるジオメトリはしばしば役に立ちません。 このような場合、LILO に `linear' オプションを与えましょう。 この効果は、ブートローダのインストール時に LILO がジオメトリ情報を必要とせず (マップ中にリニアアドレス(訳注: のうち下位 24bit)を格納する)、 しかしブート時にリニアアドレスを変換する、というものです。 何故これがデフォルトではないのでしょう? そうですね、一つ不具合があるのです: `linear' オプションを付けると、LILO はシリンダ数を知る必要がなくなり、 したがってカーネルの一部が 1024シリンダ制限を越えて格納されても 警告を出さなくなり、 しまいにはブートしないシステムが出来て終わる可能性があるのです。

5.2 1024 シリンダが 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 であると思っているわけです。


次のページ 前のページ 目次へ