質問: initrdとinitramfsの違いは? 私の知る限り、initrdはブロックデバイスとして機能するため、ファイルシステムドライバー(ext2)。カーネルには、initrdのファイルシステムを検出するための組み込みモジュールが少なくとも1つ必要です。この記事では、 initramfsの紹介、初期ramディスク の新しいモデル、次のように書かれています。 しかし、実際にはramディスクはキャッシュのためにさらに多くのメモリを浪費します。 linuxは、ブロックデバイスとの間で読み書きされるすべてのファイルとディレクトリエントリをキャッシュするように設計されているため、linuxはramディスクとの間でデータを「ページキャッシュ」(ファイルデータ用)および「デントキャッシュ」(ディレクトリエントリ用)にコピーします。ブロックデバイスのふりをしたramディスクの欠点は、ブロックデバイスのように扱われることです。 page cacheおよびdentry cache?段落では、ramdiskがブロックデバイスとして扱われ、すべてのデータがキャッシュされるため、データが複製されたことを意味しますか?constrastでは、ramfs: 数年前、linus torvaldsはきちんとしたアイデアを持っていました。linuxのキャッシュをファイルシステムのようにマウントできるとしたらどうでしょうか。ファイルをキャッシュに保持し、それらが削除されるかシステムが再起動するまでそれらを削除しないでください? linusは「ramfs」と呼ばれるキャッシュの周りに小さなラッパーを作成し、他のカーネル開発者は「tmpfs」と呼ばれる改良版を作成しました。すべての利用可能なメモリ)。 initramfsはtmpfsのインスタンスです。 これらのramベースのファイルシステムは、含まれるデータのサイズに合わせて自動的に拡大または縮小します。 ramfsにファイルを追加(または既存のファイルを拡張)すると、より多くのメモリが自動的に割り当てられ、ファイルを削除または切り捨てるとそのメモリが解放されます。ブロックデバイスがないため、ブロックデバイスとキャッシュの間に重複はありません。キャッシュ内のコピーがデータの唯一のコピーです。とりわけ、これは新しいコードではなく、既存のlinuxキャッシングコード用の新しいアプリケーションです。つまり、サイズをほとんど追加せず、非常にシンプルで、非常によくテストされたインフラストラクチャに基づいています。 要するに、ramfsはファイルを開いてメモリにロードするだけです。initrdとramfsは両方ともコンパイル時に圧縮されますが、違いは、initrdは、起動時にカーネルによってマウントされるようにアンパックされたブロックデバイスであり、ramfsはcpioを介してメモリに展開されます。私は正しいですか?または、ramfsは非常に最小限のファイルシステムですか?最後に、今日まで、initrdイメージはまだ最新のカーネルに表示されています。しかし、initrdは実際に今日使用されているramfsであり、名前は歴史的な目的のためだけのものですか?
回答: あなたはすべて正しいと思います。違いは、ブート時に必要な手順に従うかどうかを簡単に確認できます。initrd ramdevブロックデバイスが作成されます。これはramベースのブロックデバイスであり、物理ディスクの代わりにメモリを使用するシミュレートされたハードディスクです。 initrdファイルが読み取られ、デバイスに解凍されます。まるでzcat initrd | dd of=/dev/ram0または同様のもの。 initrdにはファイルシステムのイメージが含まれているため、通常どおりファイルシステムをマウントできます:mount /dev/ram0 /root。当然、ファイルシステムにはドライバーが必要なので、ext2を使用する場合は、ext2ドライバーをカーネル内でコンパイルする必要があります。 できた! initramfs tmpfsがマウントされます:mount -t tmpfs nodev /root。 tmpfsはドライバーを必要とせず、常にカーネル上にあります。デバイスや追加のドライバーは必要ありません。 initramfsは、この新しいファイルシステムに直接圧縮解除されます:zcat initramfs | cpio -i、 または類似。 できた! はい、それは多くの場所でinitrdと呼ばれていますが、特にブートローダーではinitramfsですが、blobであるためです。違いは、osの起動時に行われます。