initramfsがなぜ必要ですか?

initramfsがなぜ必要ですか?

ファイルシステムとして(代わりに)またはをjffs選択すると、カーネルサイズは非常に小さくなります(3.4MBと比較して1.4MB)。これはかなりの量のスペースが必要であることを意味します。だから、可能であれば完全に削除し、非常に小さなコアを取得します。これが私が望むものです。sdinitramfsinitramfsinitramfs

私の心に浮かぶ基本的な質問は、これがなぜ必要なのかということですinitramfs。初期ファイルシステムなしでLinuxカーネルを起動できませんか?

私の最終アプリケーションは計算と通信のみを実行し、ストレージスペースはまったくありません。したがって、ファイルシステムを持たないOSは、少なくとも私のアプリケーションに適しています。

答え1

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

/Initramfsを使用すると、システムの起動が容易になり、場合によっては暗号化などが可能になります。ホットスワップ可能な周辺機器が多いPCスタイルのハードウェアにこれを維持することをお勧めします。一方、initramfsなしで組み込みデバイスを起動するのは完全に合理的であり、カーネルはビルドされた特定のハードウェア構成のみをサポートします。

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

initramfsを使用したくない場合は、ブートローダにそれを渡さないように指示します。もちろん、カーネルビルドの出力には1つを含めないでください。これがどのように起こるかは、アーキテクチャとブートローダによって異なります。たとえば、initramfsは含まれていませvmlinuxbzImage(それぞれ生のカーネルと圧縮カーネルです)。しかし、uImage(U-Bootの場合)カーネルとinitramfs(存在する場合)の両方がパッケージ化されています。

(技術的に言えば、マックサイフ常にinitramfsがありますが、デフォルトでは空の134バイトアーカイブです。あなたが見て削除したいのは、ルートファイルシステムをマウントするためのツールを含むビルドプロセスによって生成された「実際の」空ではないinitramfsです。 )

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

答え2

~からリニアFS:

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

...

LFS環境でinitramfsを使用する主な理由は、ネットワークからのrootfsのロード、LVM論理ボリュームからのロード、パスワードが必要な場合は暗号化されたrootfsの保持、またはrootfsのラベル付けの4つです。または便宜上UUIDです。その他は、通常、カーネルが正しく設定されていないことを意味します。

...

ほとんどのディストリビューションでは、カーネルモジュールがinitramfsを持つ最大の理由です。一般的なディストリビューションには、ファイルシステムの種類、ディスクレイアウトなどの不明な要素がたくさんあります。いくつかの点で、これはシステム機能とレイアウトが知られており、カスタムカーネルがしばしば構築されるLFSの逆です。この場合、initramfsはほとんど必要ありません。

その他のソースwww.kernel.org

また、initramfsを使用していないルーターに似たLinuxシステムがたくさんあります。

答え3

ルートfsへのアクセスを構成するには、いくつかのユーザーモードユーティリティが必要なため、ネットワークブート、lvm、raidなどのより複雑な設定にはinitramfsが必要です。ディスクの単純汎用パーティションの場合、ディスクドライバがカーネルに組み込まれていて、ルートパラメータがUUIDの代わりにデバイスパスとして指定されている限り、initramfsは必要ありません。もちろん、デバイスパスは、接続しているプラ​​グアンドプレイ(USBなど)デバイスに応じて変更することも、任意のタイミング差に応じて変更することもできます。これがまさにほぼすべての人が安定性のためにuuidとinitramfsを使用する理由です。

答え4

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

関連情報