initramfs が必要なのはなぜですか?

initramfs が必要なのはなぜですか?

jffsファイルシステムとしてまたはを選択した場合sd( ではなく)、カーネル サイズが非常に小さくなることがわかりました(の場合は 3.4MB であるinitramfsのに対し、 の場合は 1.4MB )。つまり、 はかなり大きなスペースを占めます。したがって、可能であれば を完全に削除して、非常に小さなカーネルにします。それが私の望みです。initramfsinitramfs

私の頭に浮かぶ基本的な疑問は、「なぜ が必要なのかinitramfs? 初期ファイルシステムがなくても Linux カーネルは起動できないのか?」 ということです。

私の最終アプリケーションは計算と通信のみを行い、ストレージは一切行いません。そのため、少なくとも私のアプリケーションでは、ファイルシステムのない OS が理にかなっています。

答え1

initramfs を使用することでサイズが増加するのは、ramfs ドライバー (わずか数 KB で、他の用途にも必要) によるものではなく、initramfs 自体によるものです。initramfs には、実際のルート ファイル システムを組み立ててマウントするために必要なプログラムが含まれています。

Initramfs を使用すると、システムの起動が非常に簡単になり、場合によっては起動が可能になります (暗号化されている場合など/)。ホットプラグ可能な周辺機器を多数備えた PC スタイルのハードウェアにインストールすることを強くお勧めします。一方、組み込みデバイスを initramfs なしで起動し、そのデバイス用に構築された特定のハードウェア構成のみをサポートするカーネルを使用することは理にかなっています。

もちろん、カーネルはファイルシステムから起動する必要があります。実行したいアプリケーションをロードするための何らかの方法が必要です。何も実行しない場合は、マシンの電源をオフにしておく方がよいでしょう。

initramfs を使用したくない場合は、ブートローダに initramfs を渡さないように指示するだけです。また、もちろんカーネル ビルドの出力に initramfs を含めないでください。これがどのように行われるかは、アーキテクチャとブートローダに依存します。たとえば、vmlinuxinitramfs bzImage(それぞれ生のカーネルと圧縮されたカーネル) を含めないでください。ただし、uImage(U-Boot の場合) カーネルと initramfs がある場合は両方をパックします。

(技術的には、マイクサーブ注記: initramfs は常に存在しますが、デフォルトでは空の 134 バイトのアーカイブです。あなたが見ている、そして削除したいのは、ビルド プロセスによって作成された「真の」空ではない initramfs であり、ルート ファイル システムをマウントするために使用されるツールが含まれています。

ただし、initramfs は、永続的なデータを持たない単一アプリケーション システムを作成するための合理的な方法である可能性があります。すべてのアプリケーションを initramfs に配置し、それを起動して保存します。これにより、永続ストレージまたはブート イメージの整理が容易になります (必要なのはカーネルと initramfs のみで、これらはバンドルできます)。ただし、このアプローチには欠点があります。initramfs 内のすべてのデータは RAM に永続的に保存され、ブート イメージ内のファイルを簡単に変更できず、アーカイブを再構築する必要があります。

答え2

からLFS:

initramfs の唯一の目的は、ルート ファイルシステムをマウントすることです。initramfs は、通常のルート ファイルシステムにあるディレクトリの完全なセットです。これは単一の cpio アーカイブにまとめられ、いくつかの圧縮アルゴリズムの 1 つを使用して圧縮されます。

...

LFS 環境に initramfs を配置する主な理由は 4 つだけです。ネットワークから rootfs をロードする、LVM 論理ボリュームからロードする、パスワードが必要な暗号化された rootfs を持つ、または rootfs を LABEL または UUID として指定する利便性のためなどです。それ以外の場合は通常、カーネルが適切に構成されていないことを意味します。

...

ほとんどのディストリビューションでは、カーネル モジュールが initramfs を持つ最大の理由です。一般的なディストリビューションでは、ファイル システムの種類やディスク レイアウトなど、不明な点が多くあります。ある意味では、これはシステムの機能とレイアウトがわかっていて、カスタム カーネルが通常構築される LFS とは正反対です。この状況では、initramfs が必要になることはほとんどありません。

別の情報源カーネル

これ以外にも、initramfs を使用しないルーターなどの Linux システムが多数あります。

答え3

ネットワーク ブート、LVM、RAID などのより複雑なセットアップには、ルート ファイル システムへのアクセスを構成するためのユーザー モード ユーティリティが必要なため、initramfs が必要です。ディスク上のシンプルで従来のパーティションの場合は、ディスク ドライバーがカーネルに組み込まれていて、ルート引数を UUID ではなくデバイス パスで指定している限り、initramfs は不要です。もちろん、デバイス パスは、接続しているプラ​​グ アンド プレイ (USB など) デバイスや、単にランダムなタイミングの変動によって変更される可能性があります。そのため、信頼性のために、ほとんどの人が UUID と initramfs を使用しています。

答え4

ルート パーティションが MBR パーティション テーブルを使用するディスク上にあり、root=カーネルのパラメータとして永続的なブロック デバイス名が必要な場合は、initramfs を使用する必要があります。/dev/sdXは永続的ではなく、PARTUUID=GPT のみの機能であり、LABEL=起動UUID=の初期段階ではカーネルには表示されません。 initramfs はストレージとファイル システム ドライバーをロードできるため、LABEL=UUID=カーネルに表示されます。

関連情報