古代では、カーネルはデバイスのメジャー/マイナー番号を知るためにハードコードされ、カーネルに組み込まれたすべてのデバイスドライバーを初期化した後にそのデバイスをマウントしていました。このrdevユーティリティを使用すると、カーネルイメージのルートデバイス番号を再コンパイルせずに変更できます。
最終的にブートローダーが登場し、コマンドラインをカーネルに渡すことができました。root=引数が渡された場合、それはカーネルに組み込み値の代わりにルートfsがある場所を伝えました。ドライバーは、それにアクセスする必要があり、カーネルにまだ組み込まれていなければなりませんでした。引数は/devディレクトリ内の通常のデバイスノードのように見えますが、明らかに/devルートfsがマウントされる前にディレクトリがないため、カーネルはそこでdevノードを検索できません。代わりに、特定のよく知られているデバイス名がカーネルにハードコードされているため、文字列をデバイス番号に変換できます。このため、カーネルはなどのようなものを認識できますが、ボリュームUUID /dev/sda1などのよりエキゾチックなものは認識できません/dev/mapper/vg0-root。
後で、initrd写真に入ってきました。カーネルとともに、ブートローダーはinitrdイメージをロードします。イメージは、何らかの圧縮ファイルシステムイメージです(gzip圧縮されたext2イメージ、gzip圧縮されたromfsイメージ、squashfsが最終的に支配的になりました)。カーネルはこのイメージをRAMディスクに解凍し、RAMディスクをルートfsとしてマウントします。このイメージには、実際のの代わりにいくつかの追加のドライバーとブートスクリプトが含まれていましたinit。これらのブートスクリプトは、ハードウェアを認識し、RAIDアレイやLVMなどをアクティブにし、UUIDを検出し、カーネルコマンドラインを解析して実際のルートを見つけるためのさまざまなタスクを実行しました。次に、実際のルートfsをマウントし/initrd、pivot_rootシステムコールを実行してカーネルをスワップし/、/initrd、次に/sbin/init実際のルートでexec を実行する/initrdと、ramdiskがアンマウントされて解放されます。
最後に、今日はがありinitramfsます。これはに似ていinitrdますが、ramdiskにロードされる圧縮ファイルシステムイメージではなく、圧縮されたcpioアーカイブです。tmpfsがルートとしてマウントされ、アーカイブがそこに抽出されます。pivot_rootダーティハックと見なされていたを使用する代わりに、initramfsブートスクリプトは実際のルートをにマウント/rootし、tmpfsルート内のすべてのファイルを削除chrootして/rootから、にexecし/sbin/initます。