カーネル自体にファイルシステムドライバを含め、代わりにInitrd / Initramfsを使用するとどうなりますか?

カーネル自体にファイルシステムドライバを含め、代わりにInitrd / Initramfsを使用するとどうなりますか?

Linuxカーネルにはほとんどのデバイスで起動するために必要なコードはほとんど含まれていませんが、Initrd / Initramfsを使用する必要はありません。
私が理解したのは、Initrd / Initramfsの仕事は、実際にはルートファイルシステムをロードするためにファイルシステムドライバを一時的に提供することです。
それでは、必要なファイルシステムドライバをカーネル自体に追加するのはどうでしょうか?
私たちは最終的にカーネルとInitrd / Initramfsをロードする必要があります。したがって、両方とも同じ量のメモリを占めるので、1つの画像ファイルに統合するのはどうでしょうか?


******アップデート**********

1. Linuxカーネルは実際に何で作られましたか?それはvmlinuzイメージ(約5〜6 MB)ですか、それともロード可能なモジュール、vmlinuzイメージ、initrdファイル、およびその他のコンポーネントのコレクションですか?
2.カーネルイメージvmlinuzのサイズ(約5〜6 MB)がinitrdファイルのサイズ(約18 MB)より小さいのはなぜですか?ファイルシステムマウント用のコードのみを含むinitrdと比較して、カーネルには他の多くのコードが含まれています。

ベストアンサー1

まず、これは単純なファイルシステムドライバではありません。また、ファイルシステムがあるすべてのストレージデバイスのドライバです。 LVM、暗号化などを使用する場合は、より多くの可能性があります。

それにもかかわらず、カーネルにビルドすることは確かに可能です。私はスラックウェアに少なくとも「huge」というカーネルオプションがあることを知っています。このオプションは一般的なPCハードウェアのinitramfsを必要としません。

欠点は、これらのカーネルには誰にでも必要なもの、つまりrootとして使用できるすべてのファイルシステム、そのファイルシステムを保持できるデバイスドライバなどを含める必要があることです。そのため、使用しないコードが多く、メモリが無駄になる膨らんだカーネルになります。

カーネルモジュールでのみ構築できるドライバもあると思いますが、これは実際の技術的な限界というよりはデザイン選択に近いです。

編集者に返信:

  1. おそらく誰に、どのような状況で尋ねるかによって異なります。私にとっては、カーネル空間で動作するすべてのものなので、すべてのドライバが含まれています。カーネル開発者はさまざまな視点を持つことができ、さまざまな部分にもっと名前を付けることができます。

  2. 実際、カーネルコードのほとんどはロード可能なモジュールとドライバです。それらのいくつかはかなり大きいです。私のシステムでは、btrfsだけが500kBに圧縮されました。 NFSはほぼ似ています。 ext4は300KBです。また、サポートされている多くのストレージデバイスがあり、これらのうちルートファイルシステムを入手する必要があるかもしれません。 Linuxシステムを検索してみるとわかり/lib/modules/*/kernel/drivers/ます。

おすすめ記事