ramdisk)はLinuxカーネルのブート時に一時的なルートファイルシステムをメモリに読み込むための方式。真のルートファイルシステムをマウントできるようになる前にファイルシステムを必要とする場面で使用される。以降利用可能)の2種類の方式があるが、文脈によってはこれらを総称してinitrdと呼んでいる場合もある。本記事でもinitrdとinitramfsの両方を記述する。外部リンク原理[編集]Linuxディストリビューションの多くは、なるべく広範囲なハードウェアでブートできるよう、単一の汎用的カーネルイメージで出荷されている。この汎用カーネルイメージのデバイスドライバ群はローダブル・カーネル・モジュールになっており、メモリの限られたコンピュータやフロッピーディスクなどの低容量媒体からもブートができるようカーネルイメージを巨大化させない工夫をしている[1]。このような方式では、ルートファイルシステムをブート時にマウントするには、事前に(ルートファイルシステム上にある)必要なモジュールを検出してロードしなければならないという問題が生じる(あるいは、ルートファイルシステムそのものがどこにあってどういう種類かを事前に知る必要がある)[1]。問題を複雑にするのは、ルートファイルシステムがソフトウェアRAIDボリュームだったり、LVMだったり、(ディスクレス・ワークステーションの場合)NFSだったり、暗号化されたパーティションだったりする点である。これらはマウントに当たって特別な処理を必要とする[2]。1つ問題を複雑化させることとして、カーネルがハイバネーションをサポートしていることがある。ハイバネーションとは、システムを停止させて、その時点の全システムイメージをスワップパーティションや普通のファイルにダンプし、電源を切る機能である。次回立ち上げたとき、そのイメージをメモリにロードするには、ディスク上のイメージにアクセスできなければならない。これらの特殊ケースに対応してカーネルにコードを加えるのを防ぐため、立ち上げの初期段階では一時的なルートファイルシステムを使う。これを初期ユーザ空間などと呼ぶ。このルートファイルシステムには真のルートファイルシステムのマウントに必要となる、ハードウェア検出、モジュールローディング、デバイス発見などのユーザー空間ヘルパーが存在する[2]。ファイルシステムイメージ(およびカーネルイメージ)は、Linuxのブートローダやファームウェアがアクセスできる場所に格納しておく必要がある。これには、次のようなものがある。メモリアドレスを渡す。ブートの最終段階で、カーネルはinitrdイメージの先頭数ブロックを読み込み、そのフォーマットを判断する。して利用可能にし、ルートファイルシステムとしてマウントする[3]。このファイルシステム用のドライバはカーネル内に静的にコンパイルしておく必要がある。多くのディストリビューションではデフォルトで圧縮されたext2ファイルシステムをinitrdイメージに採用している。)、メモリの限られたシステムでもブートできるようcramfsを使うものもある。cramfsは伸長の際に追加のメモリを必要としない。実行して通常のユーザー空間の立ち上げ処理を開始する[3]。以降利用可能なtmpfsの特殊インスタンス)とし、それを初期化用ルートファイルシステムとする。ext2などのファイルシステムのドライバをカーネルに組み込んでおく必要がなくなるという利点がある[4]。