第8章 Linuxシステムのブートと設定

目次

8.1. Linuxのブートプロセス
8.2. initプロセス
8.3. /etc/sysconfigによるシステム設定

概要

Linuxシステムのブートには、さまざまなコンポーネントが関係しています。 この章では、基本になっている原則と、関係しているコンポーネントについて説明します。 ランレベルの概念およびsysconfigによるSUSEのシステム設定についても、この章で説明します。


8.1 Linuxのブートプロセス

Linuxのブートプロセスは、いくつかの段階から成り、それぞれを別のコンポーネントが代表しています。 次のリストに、主要なすべてのコンポーネントが関与するブートプロセスと機能を簡潔にまとめています。

  1. BIOS.  コンピュータに電源を投入すると、BIOSで画面とキーボードの初期化およびメインメモリのテストが行われます。 この段階まで、コンピュータは大容量ストレージメディアにアクセスしません。 続いて、現在の日付、時刻、および最も重要な周辺機器に関する情報が、CMOS値からロードされます。 最初のハードディスクとそのジオメトリが認識されると、システム制御がBIOSからブートローダに移ります。

  2. ブートローダ.  最初のハードディスクの先頭の512バイト物理データセクタがメインメモリにロードされ、このセクタの先頭に常駐するブートローダが起動します。 ブートローダによって実行されたコマンドがブートプロセスの残りの部分を確定します。 したがって、最初のハードディスクの先頭512バイトのことをマスタブートレコード(MBR)といいます。 次に、ブートローダは実際のオペレーティングシステム(この場合はLinuxカーネル)に制御を渡します。 GRUB(Linuxのブートローダ)の詳細については、第9章 ブートローダを参照してください。

  3. カーネルとinitramfs.  システムに制御を渡すために、ブートローダは、カーネルとRAMベースの初期ファイルシステム(initramfs)をメモリにロードします。 初期RAMファイルシステムの内容は、カーネルから直接使用されます。 初期RAMファイルシステムには、initと呼ばれる小さな実行可能ファイルが含まれています。これは本当のルートファイルシステムのマウントを行います。 SUSE Linuxの以前のバージョンでは、これらのタスクはそれぞれinitrdとlnuxrcによって実行されていました。 initramfsについての詳細は、8.1.1項 「initramfs」を参照してください。

  4. initramfs上のinit.  このプログラムは、適切なルートファイルシステムをマウントするために必要なすべてのアクションを実行します。たとえば、udevに必要なファイルシステム用のカーネル機能や、大容量ストレージコントローラ用のデバイスドライバを提供します。 ルートファイルシステムが見つかると、エラーをチェックしてからマウントします。 これが正常に実行されれば、initramfsはクリアされ、ルートファイルシステムのinitが実行されます。 initについての詳細は、8.1.2項 「initramfs上のinit」を参照してください。 udevの詳細は、第12章 udevを使用した動的カーネルデバイス管理を参照してください。

  5. init.  initは、さまざまなレベルでシステムの実際のブートを処理し、各種の機能を提供します。initについては、8.2項 「initプロセス」で説明しています。

8.1.1 initramfs

initramfsは、カーネルがRAMディスクにロードできる、小さなcpioアーカイブです。 また、実際のルートファイルシステムがマウントされる前にプログラムを実行できるようにする最低限のLinux環境を提供します。 この最低限のLinux環境は、BIOSルーチンでメモリにロードされます。十分な容量のメモリがあること以外には具体的なハードウェア要件はありません。initramfsには必ず、initという名前の実行可能ファイルがあります。これは、ブートプロセスが進行するにつれて、ルートファイルシステム上の本当のinitプログラムを実行することになります。

実際のルートファイルシステムをマウントして実際のオペレーティングシステムを起動する前に、カーネルには、ルートファイルシステムが配置されているデバイスにアクセスするための対応ドライバが必要です。 こうしたドライバには、特定のハードディスク用の特殊なドライバや、ネットワークファイルシステムにアクセスするためのネットワークドライバが含まれる場合もあります。 ルートファイルシステムで必要となるモジュールは、initramfs上のinitによってロードされます。 モジュールがロードされた後は、udevは、initramfsに必要なデバイスを提供し、initramfsをブートプロセス全体で使用できるようにします。 これにより、ブート中に生成されたすべてのデバイスイベントを処理することができるようになります。

インストール済みのシステムのハードウェア(ハードディスク)を変更する必要が生じ、このハードウェアがブート時にカーネル内に存在している以外のドライバを必要とする場合には、initramfsを更新する必要があります。 これは、initramfsの前身であるinitrdの場合と同様に、mkinitrdを呼び出すことによって行えます。 引数を付けずにmkinitrdを呼び出すと、initramfsが作成されます。 mkinitrd -Rを呼び出すと、initrdが作成されます。 USE Linuxでは、ロードするモジュールは、/etc/sysconfig/kernelの変数INITRD_MODULESで指定されます。インストール後に、この変数は自動的に正しい値に設定されます。 モジュールは、INITRD_MODULESに指定されている順序で正確にロードされます。 複数のSCSIドライバが使用されている場合は、この順序が特に重要です。その理由は、順序が正しくなければハードディスクの名前が変わってしまうためです。 厳密に言えば、ルートファイルシステムにアクセスするために必要なドライバをロードするだけで十分でしょう。 しかし、後でロードすると問題が生じることがあるため、initramfsは、インストールに必要なすべてのSCSIドライバをロードします。

[Important]initramfsまたはinitrdの更新

ブートローダは、カーネルと同じようにinitramfsまたはinitrdをロードします。 GRUBはブート時にディレクトリ内の正しいファイルを検索するので、initramfsまたはinitrdの更新後にGRUBを再インストールする必要はありません。

8.1.2 initramfs上のinit

initramfs上のinitの主な目的は、実際のルートファイルシステムのマウントとそのファイルシステムへのアクセスの準備です。 実際のシステム設定に基づいて、initは以下のタスクを実行します。

カーネルモジュールのロード

ハードウェア設定によっては、使用するコンピュータのハードウェアコンポーネント(ハードディスクになる最も重要なコンポーネント)にアクセスするために特殊なドライバが必要になる場合があります。 最終的なルートファイルシステムにアクセスするには、カーネルが適切なファイルシステムドライバをロードする必要があります。

特別なブロックファイルの提供

ロードされたモジュールごとに、カーネルはデバイスイベントを生成します。udevは、これらのイベントを処理し、RAMファイルシステム上で必要とされるデバイス特定ファイルを/dev内に生成します。 これらの特別なファイルがないと、ファイルシステムにはアクセスできません。

RAIDとLVMのセットアップの管理

RAIDまたはLVMの下でルートファイルシステムを保持するようにシステムを設定した場合、initはLVMまたはRAIDをセットアップして、後でルートファイルシステムにアクセスできるようにします。 RAIDについては、2.2項 「ソフトウェアRAID設定」を参照してください。 LVMについては、2.1項 「LVMの設定」を参照してください。

ネットワーク設定の管理

ネットワークマウントしたルートファイルシステム(NFSを介したマウント)を使用するようにシステムを設定した場合、linuxrcは適切なネットワークドライバがロードされ、ドライバがルートファイルシステムにアクセスできるように設定されていることを確認する必要があります。

初期ブート時にlinuxrcがインストールプロセスの一環として呼び出される場合、そのタスクは前に説明したタスクと異なります。

インストールメディアの検出

インストールプロセスを開始すると、使用するコンピュータでは、インストーラでインストールカーネルと特殊なinitrdがインストールメディアからロードされます。 RAMファイルシステムで実行されるインストーラには、インストールメディアにアクセスしてオペレーティングシステムをインストールするために、そのメディアの実際の場所に関する情報が必要になります。

ハードウェア認識の開始および適切なカーネルモジュールのロード

8.1.1項 「initramfs」で説明しているように、ブートプロセスは、ほとんどのハードウェア設定で使用できる最小限のドライバセットで開始されます。initは、ハードウェア設定に適したドライバセットを確定する、初期ハードウェアスキャンプロセスを開始します。 これらの値は、後で、後続のブートプロセスでカスタムinitrdで使用できるように/etc/sysconfig/kernel内のINITRD_MODULES、またはデバイスがブートプロセス中に必要とされない場合は/etc/sysconfig/hardware/hwconfig-*ファイルに書き込まれます。 インストールプロセスの間に、initはこの変数で指定されたモジュールセットをロードします。

インストールシステムまたはレスキューシステムのロード

ハードウェアが正しく認識され、適切なドライバがロードされ、udevがデバイス特定ファイルを作成するとすぐに、linuxrcはインストールシステムを起動します。このシステムには、実際のインストーラまたはレスキューシステムが含まれています。

YaSTの開始

最後に、initはYaSTを起動します。これはパッケージのインストールとシステム設定を開始します。