2.2. ブートの基礎

フロッピーディスクからブートする場合は、ディスクの先頭セクター、つまりブート セクターがロードされます。そのブートセクターには、各々のオペレーティング システムをロードする小さなプログラムを含んでいます。MS-DOS のブートセクターは ディスクやファイルシステムのパラメータ(クラスタサイズ、セクター数、ヘッド数 など)を格納したデータ領域なども含んでいます。

ハードディスクからブートする場合は、ディスクの最先頭セクター、つまりマスター ブートレコードがロードされます。このセクターにはローダプログラムとディスク のパーティションテーブルが含まれています。ローダプログラムは大抵、フロッピー からブートした時と同じようにブートセクターをロードします。

マスターブートレコードとブートセクターの両者には、特に機能的な違いがある訳で はないことに注意してください。ただし、マスターブートレコードはパー ティション 情報を持っている反面、特定のファイルシステムに特化した情報(例えば MS-DOS の ディスクパラメータ)は持っていない点は違います。

マスターブートレコードの先頭 446 (0x1BE) バイトはローダプログラムによって 使用されます。その後に 64 (0x40) バイトのパーティションテーブルが続きます。 最後の 2 バイトは、時折そのセクターが正しいブートセクターなのかを確認する ために使われるマジックナンバーとなっています。

考え得るブート構成は、非常にたくさんあります。最も普通の構成は以下の セクションで説明します。

2.2.1. MS-DOS のみ

   +-------------------------------------------------------------------+
   | マスターブートレコード  ブートセクター   オペレーティングシステム |
   |-------------------------------------------------------------------|
   | DOS-MBR --------------> MS-DOS --------> COMMAND.COM              |
   +-------------------------------------------------------------------+

これは MS-DOS をハードディスクからブートした時の通常のパターン− DOS-MBR は アクティブなパーティションを決定し、MS-DOS のブートセクターをロードします。 このブートセクターは、MS-DOS をロードし、最終的には COMMAND.COM に制御を渡し ます。(非常に単純です)

2.2.2. LOADLIN

   +-------------------------------------------------------------------+
   | マスターブートレコード  ブートセクター   オペレーティングシステム |
   |-------------------------------------------------------------------|
   | DOS-MBR --------------> MS-DOS --------> COMMAND.COM              |
   |                                     ---> LOADLIN -------> Linux   |
   +-------------------------------------------------------------------+

典型的な LOADLIN 設定− 殆どは MS-DOS の時と同じですが、CONFIG.SYS か AUTOEXEC.BAT で LOADLIN が呼び出されます。大抵は、BOOT.SYS のようなプログラム を使って CONFIG.SYS や AUTOEXEC.BAT の複数の構成セクションを選択します。 この方法は、ブートセクターを変更しなくて済むという、優れた特性を持っています。

2.2.3. DOS-MBR による LILO の起動

   +-------------------------------------------------------------------+
   | マスターブートレコード  ブートセクター   オペレーティングシステム |
   |-------------------------------------------------------------------|
   | DOS-MBR --------------> LILO ----------> Linux                    |
   |                    ---> 他の OS                                   |
   +-------------------------------------------------------------------+

これは``安全''な LILO の設定です− LILO は DOS-MBR によってロードされます。 決して他のブートセクターを触ることはありません。もし他の OS (もし複数の OS が使用されている場合は、そのうちの一つ)を LILO を使わないでブートしたいなら、 そのパーティションを、fdisk か activate を使ってアクティブにしなければなり ません。

2.2.4. 複数の分岐処理

   +-------------------------------------------------------------------+
   | マスターブートレコード  ブートセクター   オペレーティングシステム |
   |-------------------------------------------------------------------|
   | DOS-MBR --------------> MS-DOS --------> COMMAND.COM              |
   |                                     ---> LOADLIN -------> Linux   |
   |                    ---> LILO ----------> Linux                    |
   |                                     ---> MS-DOS --- ...           |
   +-------------------------------------------------------------------+

上記のような拡張パターン− MBR は変更せず、双方の分岐はそれぞれ Linux と MS-DOS をブートできます。(LILO はまた別のオペレーティングシステムをブート することができます)

2.2.5. BOOTACTV [1] による LILO の起動

   +-------------------------------------------------------------------+
   | マスターブートレコード  ブートセクター   オペレーティングシステム |
   |-------------------------------------------------------------------|
   | BOOTACTV -------------> LILO ----------> Linux                    |
   |                    ---> 他の OS                                   |
   +-------------------------------------------------------------------+

ここでは、MBR が BOOTACTV(または他の対話型ブートパーティションセレクター) によって置き換えられ、ブート時に、Linux と他のオペレーティングシステムを 選択することができます。LILO が他のオペレーティングシステムを起動できない 場合などにこの方法を使うべきでしょう。 [2]

インストール

  • Linux をブートします。

  • 以下のようにして、MBR のバックアップをとります。
     dd if=/dev/hda of=/fd/MBR bs=512 count=1
     

  • Linux パーティションのブートセクターに、LILO をインストールします。

  • 以下のようにして、MBR に BOOTACTV をインストールします。
      dd if=bootactv.bin of=/dev/hda bs=446 count=1
     

  • 再起動します。

アンインストール

  • Linux をブートします。

  • 以下のようにして、元の MBR を復元します。
     dd if=/fd/MBR of=/dev/hda bs=446 count=1
     
    または、MS-DOS上で
     FDISK /MBR
     

もし MBR を書き換えるのがいやで、第 2 の Linux パーティション(たとえば /usr など、swap パーティションではだめ)があるなら、BOOTACTV は パーティション テーブルと合わせて、そのパーティションのブートセクターとして格納することが できます。そしてそのパーティションをアクティブにすることで、DOS-MBR から ブートさせることができます。

Warning

警告− ディスクのパーティションのきり直しをした時は、必ず``予備''の Linux パーティションのこの合併したブートセクターも更新してください。

2.2.6. LILO のみ

   +--------------------------------------------------+
   | マスターブートレコード  オペレーティングシステム |
   |--------------------------------------------------|
   | LILO -----------------> Linux                    |
   |                    ---> 他の OS                  |
   +--------------------------------------------------+

LILO はまた全ブート手続きを引き受けることもできます。MBR にインストールした 場合、LILO は Linux と他の OS のブートに関し、責任を持つことになります。 この方法にはデメリットもあります。元の MBR は上書きされるので、もしシステム から Linux を削除する場合、それは復元されなければなりません。(バックアップ コピーからか、最新のバージョンの MS-DOS 上で、FDISK /MBR を行うか、BOOTACTV のようなもので上書きするか)

この方法を試す前に、あなたの他のオペレーティングシステムを LILO がブート できるかを確認しておくべきでしょう。

もしマスターブートレコードに LILO をインストールする場合は、(構成変数の BOOT=... などで)ブートセクターを明示的に指定しなければいけません。そうで ないと LILO は現在のルートパーティションのブートセクターを使おうとします。 これは一見うまく動作するように見えますが、実際はたぶんあなたのシステムは 依然ブートできないままでしょう。

2.2.7. 用例

以下の用例は、ブートセクターやオペレーティングシステムの構成物の説明に使った ものです。

2.2.8. ``正しい''ブートコンセプトの選択

LILO はいろいろな方法でインストールできますが、その時のシステムのセットアップ 状態によって取り得る方法は限定されるので、この場合、既存のシステムにそのまま 適用できる設定の数は少ないと思います。 以下のセクションでは、様々な考えられるケースを説明しています。合わせて BIOS 制限セクションも参照して ください。

例として、以下のような設定ファイル「/etc/lilo.conf」があったとします。

boot = /dev/hda2
compact
image = /vmlinuz
image = /vmlinuz.old
other = /dev/hda1
  table = /dev/hda
  label = msdos

この設定ファイルでは、Linux カーネル(/vmlinuz)、代わりの Linux カーネル (/vmlinuz.old)と /dev/hda1 から MS-DOS をブートするチェーンローダを インストールしています。2 行目の COMPACT オプションはマップインストーラに ロードを最適化するように指示します。

全ての例において、IDE タイプのハードディスクデバイスには(/dev/hda..)という ような名称を使います。他のタイプのハードディスク(例えばSCSI ハードディスクは /dev/sda...)でも同様です。

2.2.9. BIOS 制限

最近では、大容量ディスクや複数のディスクを装備したシステムが増えていますが、 標準の PC の BIOS のディスクインターフェースが設計された当時(約 16 年前)は、 そのような構成は、サポートに値することではないだろうと考えられていました。

LILO に影響する最も一般的な BIOS 制限は、2 台のハードディスクにしかアクセス できないこと、ディスク毎に 1024 シリンダーを越えた領域へのアクセスができない ことです。LILO は両方の条件を見つけることができますが、問題を回避するには、 手動による調整が必要です。

ドライブの制限は、全ての BIOS が持っている訳ではありません。いくつかの最新 のマザーボードやディスクコントローラなら、より多くの(大抵は 4 つですが) ディスクをサポートした BIOS を備えています。3 番目、4 番目のドライブに対し アクセスを試みた時、LILO は警告メッセージを表示しますが、処理は続行します。 BIOS が本当に複数ドライブをサポートしない限り、システムはその場合、ブートする ことはできません。

シリンダーの制限は、IDE ディスクでは非常に一般的な問題です。もしディスク容量 が 504 MB を超えていたら、シリンダー数が既に 1024 を超えているでしょう。 多くの SCSI ドライバ BIOS は、1GB あたりでこの制限に引っかかるようなディスク ジオメトリを提供します。最近のディスクコントローラなら、この制限を約 8GB くらいまで、押し上げます。1024 以降の全てのシリンダーに BIOS はアクセスでき ません。LILO はこの問題を見つけると、インストールを中止します。(もしLINEAR オプションが使用されていなければですが。グローバルオプションのセクション を参照してください)

一部分がその``禁止された領域''に及んでいるような大きなパーティションの場合、 最初は正しく動作しているように見えても、依然危険な状態であることに注意して ください。なぜなら、ファイルシステムはそのような制限を知らないので、カーネル のインストール時に 1024 シリンダー以降のディスク領域に配置してしまうかもしれ ないからです。それゆえ、LILO は警告メッセージを表示しますが、差し迫った危険が 存在しない限り、処理は続行します。

このような問題を解決する 4 つのアプローチがあります。

LILO は以下の項目のロードに際し、BIOS に依存します。

通常、このことは Linux のルートファイルシステムは、その``安全な''領域に 存在すべきであると受け取れます。しかし全てのカーネルを /boot に置いて、 そこを``良き''パーティションにマウントするか、そのようなパーティションに /boot のシンボリックをはるだけで十分 です。

大容量ディスクの問題のより詳しい説明は、/usr/src/linux/Documentation/ide.txt (または古いカーネルでは、/usr/src/linux/drivers/block/README.ide)を参照して ください。

2.2.10. ディスクが 1 つで、基本パーティションに Linux がある

第 1 ディスクの少なくとも一つの基本パーティションが Linux ファイルシステム (/, /usr, その他、ただしスワップパーティションでない)として使用されている なら、LILO ブートセクターは、そのパーティションに配置し、オリジナルマスター ブートレコードか、BOOTACTV のようなプログラムでロードすべきです。

            +--------------------------+
            | MBR            /dev/hda  |
            | +------------------------|
            | | MS-DOS       /dev/hda1 |
            | |------------------------|
        --> | | Linux /      /dev/hda2 |
            +--------------------------+

この例の場合、ルートパーティションにブートセクターを置くので、BOOT 変数は 省略できます。

2.2.11. ディスクが 1 つで、論理パーティションに Linux がある

第 1 ディスクに Linux で使用できる基本パーティションはないが、少なくとも一つ の拡張パーティション内の論理パーティションに Linux があるなら、LILO ブート セクターは、拡張パーティションのパーティションセクターに配置し、オリジナル マスターブートレコードか、BOOTACTV のようなプログラムでロードすべきです。

            +--------------------------+
            | MBR            /dev/hda  |
            | +------------------------|
            | | MS-DOS       /dev/hda1 |
            | |------------------------|
        --> | | 拡張領域     /dev/hda2 |
            | | +----------------------|
            | | | Linux      /dev/hda5 |
            | | |----------------------|
            | | | ...        /dev/hda6 |
            +--------------------------+

多くのディスクパーティション操作プログラムは、拡張パーティション (上記例 では /dev/hda2) をアクティブにすることを拒否するので、 LILO の配布物に同梱 されている activate というプログラムを使う必要が あります。

OS/2 のブートマネージャは、LILO ブートセクターを論理パーティションからブート することができます。この場合は、拡張パーティションへのインストールの必要は ありません。

2.2.12. ディスクが 2 つだが、(少なくとも部分的には) 第 1 ディスクに Linux がある

この場合は、1 ディスクで、そこにシステムがある構成と同じです。Linux ブート セクターは、第 1 ディスクに置き、第 2 ディスクは、ブートプロセスの後の方で 使います。

BIOS 制限セクションで記述されている 制限は、ブートセクター構成物の配置 のみにかかります。その他のもの (/boot/boot.b, /boot/map, ルートファイル システム、スワップパーティション、その他の Linux ファイルシステムなどなど) は第 2 ハードディスク上のどこにあっても構いません。

2.2.13. ディスクが 2 つで、Linux は第 2 ディスクにあり、第 1 ディスクは論理 パーティションがある

第 1 ディスクには、Linux パーティションは無いが、拡張パーティションがあれば、 LILO ブートセクターは、拡張パーティションのパーティションセクターに配置し、 オリジナルマスターブートレコードか、BOOTACTV のようなプログラムでロード すべきです。

                 第 1 ディスク                  第 2 ディスク
        +--------------------------+    +--------------------------+
        | MBR            /dev/hda  |    | MBR            /dev/hdb  |
        | +------------------------|    | +------------------------|
        | | MS-DOS       /dev/hda1 |    | | Linux        /dev/hdb1 |
        | |------------------------|    | |------------------------|
    --> | | 拡張領域     /dev/hda2 |    | | ...          /dev/hdb2 |
        | | +----------------------|    | |                        |
        | | | ...        /dev/hda5 |    | |                        |
        | | |----------------------|    | |                        |
        | | | ...        /dev/hda6 |    | |                        |
        +--------------------------+    +--------------------------+

拡張パーティションをアクティブにするには、LILO に同梱されるプログラム activate を使うべきです。なぜなら MS-DOS の FDISK や古いバージョンの Linux fdisk では、 それができないからです。(一般的にはこれは正しい考えですが)

2.2.14. ディスクが 2 つで、Linux は第 2 ディスクにあり、第 1 ディスクは 論理パーティションがない

第 1 ディスクに、Linux パーティションも拡張パーティションもない場合、もはや LILO ブートセクターを置ける場所は、一箇所しかありません。− そこはマスター ブートレコードです。

この構成の場合、LILO が他のオペレーティングシステムのブートもすべて責任を もつことになります。

                 第 1 ディスク                   第 2 ディスク
        +--------------------------+    +--------------------------+
    --> | MBR            /dev/hda  |    | MBR            /dev/hdb  |
        | +------------------------|    | +------------------------|
        | | MS-DOS       /dev/hda1 |    | | Linux        /dev/hdb1 |
        | |------------------------|    | |------------------------|
        | | ...          /dev/hda2 |    | | ...          /dev/hdb2 |
        +--------------------------+    +--------------------------+

LILO をインストールする前に、MBR のバックアップは必ずとるべきです。またこの アプローチをとる前に、LILO が他のオペレーティングシステムをブートできるか 確認する必要があります。

この例では /etc/lilo.conf
boot = /dev/hda2
という行を
boot = /dev/hda
に変更
する必要があります。

2.2.15. ディスクが 2 つ以上

システムに 2 つを越えるディスクがあっても、通常は最初の 2 つにしかアクセス できません。それゆえ、構成の選択肢としては、ディスク 2 つの場合と同じです。

その増設ディスクにアクセスしようとすると、LILO は( Warning: BIOS drive 0x<number> may not be accessible ) という警告メッセージを表示しますが、 処理を 中断することはしません。これは 2 ディスク以上を扱える極一部の BIOS(または コントローラ BIOS)がその特徴を利用できるように、そうしています。他の全ての 場合は、この警告は致命的なエラーと考えた方がいいでしょう。

2 ディスクの制限は、BIOS だけのことなので、一度ブートしてしまえば、Linux は 全てのディスクを利用するのに何の問題もありません。

2.2.16. DOS パーティション上の /boot

最新のカーネルは、LILO がマップファイルを MS-DOS(または UMSDOS)のファイル システム上に置くのに必要な機能を全てサポートしています。DOS パーティションは BIOS 制限 (BIOS 制限のセクションを 参照してください) に引っかからない ような場所に確実に配置される傾向があるので、BIOS 問題で、ネイティブな Linux ファイルシステムパーティションを利用できない場合は、/boot 用の場所として、 理想的な場所です。

これを可能にするため、DOS パーティションは、読み書き可能なようにマウントし、 (例えば /dos/linux のような)ディレク トリを作成し、そのディレクトリに /boot から、全てのファイルを移動し、/boot は そこにシンボリックリングを張ることで、 置き換え、カーネルもまたその新しいディレクトリに移し、これらの新しい場所を /etc/lilo.conf に記述して、最後に /sbin/lilo を実行します。

今後は、新しいカーネルは /sbin/lilo を実行する前に必ずその DOS パーティション 上のディレクトリにコピーする必要があります。例えばカーネルを再コンパイルした 時などは、標準の手続きは、

# make zlilo

から

# make zImage
# mv /dos/linux/vmlinuz /dos/linux/vmlinuz.old
# mv arch/i386/boot/zImage /dos/linux/vmlinuz
# /sbin/lilo

に変更します。

Warning

警告− DOS パーティションのデフラグメントは、Linux やシステム全体をブート不能 にしてしまいます。それゆえ、DOS パーティションのデフラグメントをしないか、 Linux を実行するために Linux ブートディスクを用意して(テストもして)から、 デフラグメント後、/sbin/lilo を実行してください。 [6]

Notes

[1]

他にも、たぶんより有名な切り替え型ブートプログラムとして、例えば OS/2 のブートマネージャなども同様の動作をします。インストールの手続きは普通 違うでしょうが。

[2]

もし他のブートパーティションセレクターでは起動できて、LILO では起動 できなかった場合、作者に知らせてもらいたいと思います。

[3]

LOADLIN は以下の anonymous FTP サイトから利用できます。

BOOT.SYS は以下の anonymous FTP サイトから利用できます。

[4]

LILO は以下の場所にあります。

[5]

pfdisk は以下の anonymous FTP サイトから利用できます。

PBOOT は以下の場所にあります。

[6]

* 重要なファイル(例えば C:\LINUX の全てのファイル)には、DOS 上でシステム 属性を付与しておくと、再編成から守ることができるかもしれません。しかし その場合でも、なおブートフロッピーは用意すべきです。