initrdは、通常HDDなどにインストールされているLinuxシステムのルートファイルシステムをマウントするための前準備専用ルートシステムである。
ここで行われることは、ルートファイルシステムをマウントするために必要なドライバモジュールを読み込むことと、実際にルートマウントすることである。
起動直後はinitrd自体がルートとなっているが、目的とするルートファイルシステムも同じくルートなため上書きでマウントすることはできない。
そこでpivot_rootという仕組みが用いられる。
pivot_rootはマウント済みのディレクトリをルートファイルシステムとする命令だ。
同様の機能であるchrootが指定のディレクトリをルートとしてしまうだけなのに対して、pivot_rootは指定ディレクトリをルートにすると同時に、現在ルートである古いルートを新しいルートのどこにマウントするのかを指定できる。ちょいとややこしいが、交換する感じで古いルートも新しいルートのどこかに残すことができるのだ。
通常、initrdによる古いルートは必要ではないためunmountされて破棄される。
この仕組みにより、仮ルートから本採用ルートを呼び出すことが可能となる。
CDブートLinuxにおいてinitrdの役割は、
- CDをマウントするのに必要なドライバを読み込む
- CD内のファイルをルートとして準備してそこへ制御を移すこと
となる。PS3Linuxに限った話ではないが、Fedora CoreなどのディストリビューションをHDDにインストールした時のinitrdの役目は、HDDのマウントとなる。CDブートにする際は、CDドライブへアクセスできるドライバとファイルシステムのドライバをロードするように変更する必要がある。
つまり、CDブートLinuxを作成しようとした時に、最も重要な作業はこのinitrd作成であるといっても良いだろう。