私が理解しているように、initrdはRAMにロード可能な小さなイメージです。これは、すべてのロード可能なモジュールを含む完全なカーネルを起動するために使用されます。プロセスの一部として、bzImageの名前が変更されたバージョンであるvmlinuzカーネルイメージが必要です。
initrdイメージを作成せずにカーネルを起動することは可能ですか?
initrd/initramfs はオプションであり、必須ではありません。bzImage は純粋なカーネル イメージであり、ブートローダーから直接起動できます。ただし、通常はファイルシステムおよびユーザー空間ツールへのアクセスを必要とするいくつかのタスク (ファイルシステムモジュールのロード、ディスクアクセス用のドライバー、交換可能なメディアからのルートファイルシステムのマウントなど) を実行する必要がある場合があります。
それがinitramfsの目的です。これは、カーネル イメージ自体、またはブート時にブートローダーによってカーネル イメージにアタッチされる CPIO アーカイブです (カーネル イメージは initramfs のコンテナーであり、その逆ではありません)。
その CPIO アーカイブには、すべてのデバイスをセットアップして適切なルート ファイルシステムにアクセスするために必要なモジュールを含む初期 rootfs と、それらのデバイスを識別し、モジュールをロードし、他の起動タスクを実行して適切なルート ファイル システムを / に再マウントし、/sbin を起動するために必要なモジュールが含まれています。 /初期化
initrdも同様ですが、主な違いはファイルシステム イメージであり、通常は圧縮されている場合があります。カーネルは、組み込みで使用されるファイルシステムをサポートしている必要があり、このイメージを最初の / としてマウントします。
CPIO は桁違いに単純であるため、initrd よりも initramfs が好まれます。これにより、組み込まれているファイルシステム モジュールの要件が節約され、initramfs の作成も容易になります。ext2 イメージを作成し、loopdevice をマウントしてデータを取り込む代わりに、tar を使用するのと同じように単純なアーカイブを作成します。
ただし、必要なすべてのドライバーとモジュールをカーネル イメージに組み込んでカーネルをコンパイルし、システム内でルート ファイル システム デバイスの名前が固定されている場合は、カーネルがそれ自体で処理できるため、initramfs は必要ありません。
initrd には、ルート ファイルシステムを理解するために必要なモジュールが含まれているため、カーネル モジュールの通常のストアにアクセスできます。
モジュールとしてではなく、すべてのコードが組み込まれた状態でカーネルがコンパイルされている場合、initrd は必要ありません。
はい、initrd イメージなしでシステムを起動できます。
initrd イメージは、gzip された ramdisc イメージ、または (最近ではより一般的に) gzip された .cpio イメージのいずれかです。
後者の場合、.cpio は initramfs と呼ばれるファイルシステムに展開されます。
.cpio イメージが存在しない場合、カーネルは代わりに組み込みイメージを使用します。このイメージには、少数の特殊ファイル (/dev/console、/dev/null、およびいくつかのディレクトリなど) のみが含まれますが、バイナリは含まれません。
次に、カーネルはいくつかの組み込みロジックとコマンドライン オプションを使用して、initramfs の「上」にマウントされているため、それを隠している「実際の」ルート ファイルシステムを見つけてマウントしようとします。
この「レガシー」ブート システムは、最近のディストリビューションではほとんど使用されていません。