Linuxの初期RAMディスク

初期RAMディスク(initrd/initramfs)とは、Linuxの起動時において、本番用ルートファイルシステムが使用可能となるまでの間、暫定的に利用する仮のルートファイルシステム、およびディバイスドライバのロードスクリプト(linuxrc)の総称である。

Linuxは、カーネルの容量を抑えるため、汎用的なモジュール以外をローダブルモジュールとして独立して配置し、必要に応じてカーネルへ取り込んで利用する。したがって、特殊なディバイスドライバは、起動直後にはカーネル上に存在しない。
もし、ルートファイルシステムを保有するディバイスがローダブルモジュールとして実装されていた場合、ディバイスへアクセスしようにも自身のローダブルモジュールを読み込めないため、結果としてモジュールのロードが行えないといった状態が発生する。

初期RAMディスクは、このようなジレンマを解決するために考えられたアイデアである。

RAMディスクは、実体はメモリ上に配置された情報であり、これをあたかもファイルシステムのように扱えるようにしたものである。初期RAMディスクは、これをカーネルのブートに必要な機能だけを保持したルートファイルシステムに対して適用したものである。

初期RAMディスクイメージとカーネルイメージをブートローダがメモリ上へロードし、カーネルへ制御が渡されると初期RAMディスクイメージをファイルシステムとしてマウントし、この中に含まれるディバイスのドライバをロードするためのスクリプト(linuxrc)を実行する。

したがって初期RAMディスクイメージは、ブートイメージと同様で、ブートローダやハードウェアの持つファームウェアがサポートするディバイスでアクセス可能な領域へ配置する必要がある。


メモリ上へのロードからディバイスドライバ読み込み処理の流れ

(近日掲載)


構築・インストール

ここでは、初期RAMディスクの作成方法について説明する。

なお、初期RAMディスクを利用するには、ブートローダの設定が必要である。
必要に応じて、こちらも参照して頂きたい。

初期RAMディスクの作成

初期RAMディスクは、ファイルシステムのイメージを圧縮したinitrdと、cpioアーカイブを圧縮したinitramfsの2種類がある。
最近のディストリビューションでは、後者が利用されることが多い。

作成はそれぞれ、以下のコマンドを実行することで行える。

・initrd

# mkinitrd (イメージ名) バージョン

initrdは、gzipで圧縮されたファイルシステムイメージファイルである。
作成されたイメージの展開には、gunzipコマンドを用いる。

# gunzip -S .img /tmp/initrd-X.X.XX.img

これらはファイルとして展開されるため、ファイルシステムのように扱うためには、ループバックマウントを用いる。

# mount -o loop ./initrd-X.X.XX.img /mnt/rootfs

・initramfs

# mkinitramfs -o (イメージ名) バージョン

initramfsは、ファイルシステムイメージをcpioアーカイブ化しgunzipにより圧縮したものである。
したがって、initrdとは異なり、2段階のステップを踏む。

# gunzip ./initrd-X.X.XX.img.gz
# mkdir ./initrd
# cd ./initrd
# cat ../initrd-X.X.XX | cpio -id

ループバックマウントし、ファイルシステムとして扱う。

# mount -o loop ./initrd-X.X.XXX

初期RAMディスクの配置


設定・調整

(近日掲載)

  • 最終更新:2009-12-26 03:52:51

このWIKIを編集するにはパスワード入力が必要です

認証パスワード