たとえば、ディスク上にエキゾチックなファイルシステムがあり、システムをロードするには、マウントルートファイルシステムが必要です。しかし、カーネルイメージに適切なドライバが存在しないため、できません。
kernel
とinitrd
をどのように理解しているかを説明しましょう。
reiserfs
であり、このファイルシステムにmodule
を含まないようにカーネルを構成しましたinitramfs
をメモリにロードしますreiserfs
をマウントでき、ramfs
が占有するメモリをアンロード(解放)します。私は正しいですか?
しかし、特定のドライバーのほとんどがカーネルイメージ(単一ファイル)に既に存在する場合、なぜすべてのディストリビューションでinitramfs
が必要なのか(私はこれまでにインストールしたすべてのディストリビューションでそれを確認しました)がわかりません。さらに、カーネルの起動時にファイルシステム用のドライバが必要です。他のドライバは、マウント後にファイルシステムからロードできます。
それで、それはどんなディストリビューションの本当に不可欠な部分ですか?
P.S initramfs
またはinitrd
でよく使用されるものとその理由は何ですか?
強みは、モジュールのロード以外のすべてのことができることにあります。基本的にそれはあなたにユーザースペースとそれからあなたがすることができるすべてのことをする可能性を与えます。
例:initrdを使用して暗号化されたルートfsを作成します。これを設定するには、カーネルに意味のないコードが必要です。
initrdのウィキペディアページ の「Rationale」セクションには、さらに多くの例があります。
initramfsは、同じアイデアの新しい(ただしかなり古い)実装ですが、initrdという名前は、初期のユーザー空間として使用されているイメージを指すためにしばしば存続しました。
私が今考えたまったく異なる理由:組み込みデバイス、すべてを含むカーネルに対処するのに十分なメモリがない可能性があります。
Initramfsを使用する理由はたくさんありますが、以下にいくつかあります。
Initramfsが必要な理由を何度も続けることができますが、最終的に、「switch_root ...」の前に実行する必要のあるソフトウェアがある場合は、そのためのinitramfsが必要になります。
modernハードウェアが問題にならないのは事実だと思います。 50MBのカーネル。すべてを個別のモジュールとしてロードすることは、しばらくの間それほど重要ではなかったと主張することができます。
ただし、初期のRAMシステムでは、カーネルで特別な処理を行うことなく、可能な構成をブートストラップできます。カーネルコードを書くことは大したことです。最初のramシステムが正しい解決策です。メインシステムと同様のコードをたくさん使用できます。 systemd
;-)。
暗号化されたファイルシステムからの起動は、この良い例の1つです。カーネルはパスフレーズを要求する必要はありません。
everyの最新のインストール使用例は、UUID(またはLVMボリューム名)によってルートファイルシステムを見つけることです。これは、関係のないパーティションを削除するとブートが中断するため、すべて番号が付け直されるため便利です。または、コンピュータ間またはコンピュータ間でディスクを移動したとき。または、ディスクがライブCDの場合。
なぜRAMファイルシステムが必要なのですか?ファームウェア/ブートローダーに緊密に結合されたくないからです。データをメモリのブロックとして渡すだけで、完了です。ブートプロセスをできるだけシンプルに保ちたいと考えています。起動は重要であり、特別なケースです。 other特殊なケースのソフトウェアとの複雑なインターフェースは必要ありません。 特にファームウェアの場合。ファームウェアは非常に特殊なケースであるため、それ以外の時間は気にしません。誰も気付かないバグがたくさんあります。また、ファームウェアは非常に重要であるため、ファームウェアの修正には非常にリスクが伴います。以前はROMでしたが、まったくパッチを当てることができませんでした。