Initrd
初期RAMディスク(initial ramdisk)はLinuxカーネルのブート時に一時的なルートファイルシステムをメモリに読み込むための方式。 真のルートファイルシステムをマウントできるようになる前にファイルシステムを必要とする場面で使用される。 initrd とinitramfs(Linux 2.6.13 以降利用可能)の2種類の方式があるが、文脈によってはこれらを総称してinitrdと呼んでいる場合もある。 本記事でもinitrdとinitramfsの両方を記述する。
これらはマウントに当たって特別な処理を必要とする。
もう1つ問題を複雑化させることとして、カーネルがハイバネーションをサポートしていることがある。ハイバネーションとは、システムを停止させて、その時点の全システムイメージをスワップパーティションや普通のファイルにダンプし、電源を切る機能である。次回立ち上げたとき、そのイメージをメモリにロードするには、ディスク上のイメージにアクセスできなければならない。
これらの特殊ケースに対応してカーネルにコードを加えるのを防ぐため、立ち上げの初期段階では一時的なルートファイルシステムを使う。これを初期ユーザ空間などと呼ぶ。このルートファイルシステムには真のルートファイルシステムのマウントに必要となる、ハードウェア検出、モジュールローディング、デバイス発見などのユーザー空間ヘルパーが存在する。
多くのディストリビューションではデフォルトで圧縮されたext2ファイルシステムをinitrdイメージに採用している。他には(Debian 3.1 など)、メモリの限られたシステムでもブートできるようcramfsを使うものもある。cramfsは伸長の際に追加のメモリを必要としない。
初期化用ルートファイルシステムが利用可能になると、カーネルは最初のプロセスとして /linuxrc を実行する。そのプロセスが終了 (exit) するとカーネルは真のルートファイルシステムのマウントが完了したと判断し、"/sbin/init" を実行して通常のユーザー空間の立ち上げ処理を開始する。
そのイメージがgzipで圧縮されたcpioアーカイブの場合、中間段階としてカーネルがそれを展開して initramfs (Linux 2.6.13 以降利用可能なtmpfsの特殊インスタンス)とし、それを初期化用ルートファイルシステムとする。ext2などのファイルシステムのドライバをカーネルに組み込んでおく必要がなくなるという利点がある。
initramfs 上で、カーネルは最初のプロセスとして /init を実行する。/init は終了 (exit) しない。