初期ラムディスク
初期ラムディスク
カーネルはシステムに搭載されているいくつかのハードウェアを認識するため、初期ラムディクスを必要とします。RHEL4やSLES9のカーネル は、ともにモジュラカーネルの形式となっています。モジュラカーネルではあらかじめカーネル内にすべてのデバイスドライバを含めているのではなく、必要に 応じてデバイスドライバを順次カーネルに読み込ませる形で各種デバイスに対応します。
そのため、起動時のカーネル内に必要なデバイスドライバが含まれていないデバイスから起動しようとしても、デバイスドライバが存在しないために実デバイスにアクセスできず、必要なデバイスドライバのファイルを読み込むことができないといった問題が発生します。
わかりやすく例えると、缶詰の中に缶切りが入っている状態であり、そのままではいつまでたっても缶を開けることができません。そのような状態で缶詰を開けるためには、別の場所から缶切りを持ってくる必要があります。
初期ラムディスクというのは、その「別の場所」にあたるものであり、そこに必要なデバイスドライバを用意しておきます。そのため初期ラムディスク自身は、ブートローダからアクセスできる位置に存在する必要があります。
初期ラムディスクに用意する必要のあるデバイスドライバの例として、次のようなディスクサブシステムや、ファイルサブシステムまわりのデバイスドライバ関係をあげることができます。
- SCSIアダプタ用デバイスドライバ
- FibreChannel HBA用デバイスドライバ
- LVM用モジュール
ビジネスで使用されているサーバの多くは、ディスクサブシステムとしてSCSIディスクやFibre Channelで接続されたストレージを使用しています。また、LVMを使用して論理ボリューム管理をしている場合も多数あります。そのため、一般的に サーバシステムにおいて起動時にデバイスを利用できるようにするためには初期ラムディスクが必要だと考えていいでしょう。
初期ラムディスクの作成
通常、初期ラムディスクファイルは"mkinitrd"コマンドで作成します。RHEL3以前のRHELやSLES9では、初期ラムディスクファイ ルの構造はファイルシステムのイメージファイルを圧縮した形式となっています。そのため、初期ラムディスクファイルを解凍してループバックマウントするこ とにより、手動で編集することができます。
それに対して、RHEL4では初期ラムディクスファイルの構造はRHEL3以前のRHELやSLES9に構造から変更されています。こちらは、ファ イルシステムのイメージファイルではなく、"cpio"形式のアーカイブファイルとして圧縮したものになっています。また、こちらも手動での編集が可能で す。
| RHEL4 | SLES9 | |
|---|---|---|
| initrdの形式 | cpio形式 | ファイルシステム形式 |
通常では初期ラムディスクは"mkinitrd"コマンドで作成し、手動で編集する必要はありません。しかし、ここではRHEL4およびSLES9での初期ラムディスクの相違の理解を深めるため、あえて初期ラムディスクの展開方法を示してみます。
-RHEL4
# cat /boot/initrd-2.6.9-11.EL.img | gunzip | cpio -id
-SLES9 (RHEL3以前と同様)
# cat /boot/initrd | gunzip >./initrd.img
# mount -o loop ./initrd.img /mnt
起動したカーネルは初期ラムディクス内のスクリプトの定義に従って、デバイスドライバを読み込みます。RHEL4とSLES9ではそのスクリプトが異なりますが、前述のように初期ラムディスクの展開を行えば、スクリプトを確認することができます。
| RHEL4 | SLES9 | |
|---|---|---|
| スクリプト・ファイル | /init | /linuxrc |