概要
Linuxシステムのブートには、さまざまなコンポーネントが関係しています。 この章では、基本になっている原則と、関係しているコンポーネントについて説明します。ランレベルの概念およびsysconfigによるSUSEのシステム設定についても、この章で説明します。
Linuxのブートプロセスは、いくつかの段階から成り、それぞれを別のコンポーネントが代表しています。次のリストに、主要なすべてのコンポーネントが関与するブートプロセスと機能を簡潔にまとめています。
BIOS. コンピュータに電源を投入すると、BIOSで画面とキーボードの初期化およびメインメモリのテストが行われます。この段階まで、コンピュータは大容量ストレージメディアにアクセスしません。 続いて、現在の日付、時刻、および最も重要な周辺機器に関する情報が、CMOS値からロードされます。最初のハードディスクとそのジオメトリが認識されると、システム制御がBIOSからブートローダに移ります。
ブートローダ. 最初のハードディスクの先頭の512バイト物理データセクタがメインメモリにロードされ、このセクタの先頭に常駐するブートローダが起動します。ブートローダによって実行されたコマンドがブートプロセスの残りの部分を確定します。したがって、最初のハードディスクの先頭512バイトのことをマスタブートレコード(MBR)といいます。次に、ブートローダは実際のオペレーティングシステム(この場合はLinuxカーネル)に制御を渡します。GRUB(Linuxのブートローダ)の詳細については、章 29. ブートローダを参照してください。
カーネルとinitramfs. システムに制御を渡すために、ブートローダは、カーネルとRAMベースの初期ファイルシステム(initramfs)をメモリにロードします。 初期RAMファイルシステムの内容は、カーネルから直接使用されます。 初期RAMファイルシステムには、initと呼ばれる小さな実行可能ファイルが含まれています。これは本当のルートファイルシステムのマウントを行います。 SUSE Linuxの以前のバージョンでは、これらのタスクはそれぞれinitrdとlnuxrcによって実行されていました。 initramfsについての詳細は、項28.1.1. 「initramfs」を参照してください。
initramfs上のinit. このプログラムは、適切なルートファイルシステムをマウントするために必要なすべてのアクションを実行します。たとえば、必要なファイルシステム用のカーネル機能や、大容量ストレージコントローラ用のデバイスドライバを提供します。 ルートファイルシステムが見つかると、エラーをチェックしてからマウントします。 これが正常に実行されれば、initramfsはクリアされ、ルートファイルシステムのinitが実行されます。 initについての詳細は、項28.1.2. 「initramfs上のinit」を参照してください。
init. initは、さまざまなレベルでシステムの実際のブートを処理し、各種の機能を提供します。initについては、項28.2. 「initプロセス」で説明しています。
initramfsは、カーネルがRAMディスクにロードできる、小さなファイルシステムです。また、実際のルートファイルシステムがマウントされる前にプログラムを実行できるようにする最低限のLinux環境を提供します。 この最低限のLinux環境は、BIOSルーチンでメモリにロードされます。十分な容量のメモリがあること以外には具体的なハードウェア要件はありません。 initramfsには必ず、initという名前の実行可能ファイルがあります。これは、ブートプロセスが進行するにつれて、ルートファイルシステム上の本当のinitプログラムを実行することになります。
実際のルートファイルシステムをマウントして実際のオペレーティングシステムを起動する前に、カーネルには、ルートファイルシステムが配置されているデバイスにアクセスするための対応ドライバが必要です。 こうしたドライバには、特定のハードディスク用の特殊なドライバや、ネットワークファイルシステムにアクセスするためのネットワークドライバが含まれる場合もあります。 ルートファイルシステムで必要となるモジュールは、initramfs上のinitによってロードされます。 initramfsは、ブートプロセス中はずっと利用可能です。 これにより、ブート中に生成されたすべてのhotplugイベントを処理することが可能になります。
インストール済みのシステムのハードウェア(ハードディスク)を変更する必要が生じ、このハードウェアがブート時にカーネル内に存在している以外のドライバを必要とする場合には、initramfsを更新する必要があります。 これは、initramfsの前身であるinitrdの場合と同様に、mkinitrdを呼び出すことによって行えます。 引数を付けずにmkinitrdを呼び出すと、initramfsが作成されます。 mkinitrd -Rを呼び出すと、initrdが作成されます。 SUSE Linuxでは、ロードするモジュールは、/etc/sysconfig/kernelの変数INITRD_MODULESで指定されます。 インストール後に、この変数は自動的に正しい値に設定されます。モジュールは、INITRD_MODULESに指定されている順序で正確にロードされます。複数のSCSIドライバが使用されている場合は、この順序が特に重要です。その理由は、順序が正しくなければハードディスクの名前が変わってしまうためです。厳密に言えば、ルートファイルシステムにアクセスするために必要なドライバをロードするだけで十分でしょう。 しかし、後でロードすると問題が生じることがあるため、initramfsは、インストールに必要なすべてのSCSIドライバをロードします。
![]() | initramfsまたはinitrdの更新 |
|---|---|
ブートローダは、カーネルと同じようにinitramfsまたはinitrdをロードします。 GRUBはブート時にディレクトリ内の正しいファイルを検索するので、initramfsまたはinitrdの更新後にGRUBを再インストールする必要はありません。 | |
initramfs上のinitの主な目的は、実際のルートファイルシステムのマウントとそのファイルシステムへのアクセスの準備です。 実際のシステム設定に基づいて、initは以下のタスクを実行します。
ハードウェア設定によっては、使用するコンピュータのハードウェアコンポーネント(ハードディスクになる最も重要なコンポーネント)にアクセスするために特殊なドライバが必要になる場合があります。最終的なルートファイルシステムにアクセスするには、カーネルが適切なファイルシステムドライバをロードする必要があります。
RAIDまたはLVMの下でルートファイルシステムを保持するようにシステムを設定した場合、initはLVMまたはRAIDをセットアップして、後でルートファイルシステムにアクセスできるようにします。RAIDについては、項2.3. 「ソフトウェアRAID設定」を参照してください。LVMについては、項2.2. 「LVMの設定」を参照してください。
ネットワークマウントしたルートファイルシステム(NFSを介したマウント)を使用するようにシステムを設定した場合、linuxrcは適切なネットワークドライバがロードされ、ドライバがルートファイルシステムにアクセスできるように設定されていることを確認する必要があります。
初期ブート時にlinuxrcがインストールプロセスの一環として呼び出される場合、そのタスクは前に説明したタスクと異なります。
インストールプロセスを開始すると、使用するコンピュータでは、インストーラでインストールカーネルと特殊なinitrdがインストールメディアからロードされます。RAMファイルシステムで実行されるインストーラには、インストールメディアにアクセスしてオペレーティングシステムをインストールするために、そのメディアの実際の場所に関する情報が必要になります。
項28.1.1. 「initramfs」で説明しているように、ブートプロセスは、ほとんどのハードウェア設定で使用できる最小限のドライバセットで開始されます。 initは、ハードウェア設定に適したドライバセットを確定する、初期ハードウェアスキャンプロセスを開始します。こうした値は、それ以降のブートプロセスでカスタムinitrdを使用できるように、後で/etc/sysconfig/kernelのINITRD_MODULESに書き込まれます。 インストールプロセスの間に、initはこの変数で指定されたモジュールセットをロードします。
ハードウェアが正しく認識され、適切なドライバがロードされるとすぐに、linuxrcはインストールシステムを起動します。このシステムには、実際のインストーラまたはレスキューシステムが含まれています。
最後に、initはYaSTを起動します。これはパッケージのインストールとシステム設定を開始します。