初期RAMディスク(initrdの)は、典型的には、それに起動オフ実際のルートファイルシステムと手をマウントするために必要とされることのみを含むルートファイルシステムの機能縮小版です。
initrdが存在するのは、最近のシステムでは、ブートローダーを十分にスマートにしてルートファイルシステムを確実に検出できないためです。ブートローダーのような小さなプログラムがカバーする可能性は多すぎます。NFSルート、非標準のRAIDカードなどを検討してください。ブートローダーは、BIOSに加えて、ブートセクターに詰め込めるコードを使用して作業を行う必要があります。
initrdは、ブートローダーが見つけられる場所に保存されます。また、サイズが小さいため、通常、余分なスペースが必要になることはありません。(小さな組み込みシステムでは、通常「実際の」ルートはなく、initrdのみです。)
initrdは貴重です。initrdが壊れるとシステムが起動できないため、その内容はすべての条件下で保存する必要があります。これを保証するために設計者が行った1つの設計選択は、ブートローダーがinitrdを読み取り専用でロードするようにすることです。これに向けて機能する他の原則もあります。たとえば、「実際の」ルートが存在しない小規模なシステムの場合でも/tmp
、/var/cache
物を格納するために個別にマウントするなどです。initrdの変更はめったに行われないため、非常に注意深く行う必要があります。
そこに戻って通常の場合に取得され、実際のルートファイルシステムは、それが最初に読み取り専用でマウントされたinitrdがあったので。同じ理由で、可能な限り読み取り専用に保持されます。実行する必要がある実際のルートへの書き込みは、システムが起動されるまで、または優先的に、または少なくとも起動プロセスの後半でその優先設定が満たされなくなるまで延期されます。
この読み取り専用フェーズで発生する最も重要なことは、ルートファイルシステムをチェックして、正常にマウント解除されたかどうかを確認することです。これは、ブートローダーをinitrdに任せる代わりに確かに実行できることですが、ルートファイルシステムがきれいにアンマウントされなかった場合はどうなりますか?次に、呼び出しfsck
て確認し、場合によっては修正する必要があります。それで、「実際の」ルートへのハンドオフまで待つのではなく、このステップを担当した場合、どこでinitrd
get fsck
が発生しますか?あなたがコピーする必要があると言うことができるfsck
にinitrd
それを構築するとき、今それは大きいです。その上で、どれ fsck
をコピーしますか?Linuxシステムは定期的に数十種類のファイルシステムを使用しています。その時に実際のルートに必要なものだけをコピーしますかinitrd
創造された?ルートファイルシステムが後で他のファイルシステムタイプに移行され、誰かがinitrdの再構築を忘れた場合に備えて、initrd
利用可能なすべてのfsck.foo
プログラムをコピーしてのサイズにバルーンを付けますか?
Linuxブートシステムアーキテクトは、これらの問題をinitrdに負担させないことを賢明に選択しました。彼らはinitrdよりもそれを行うのに良い立場にあるので、彼らは実際のルートファイルシステムのチェックを実際のルートファイルシステムに委任しました。
安全に実行できる程度にブートプロセスが完了すると、initrdは実際のルートの下からでスワップアウトpivot_root(8)
され、ファイルシステムは読み書きモードで再マウントされます。