私が知る限り、initrd
はブロック デバイスとして機能するため、ファイルシステム ドライバ (などext2
) が必要です。のファイルシステムを検出するために、カーネルには少なくとも 1 つの組み込みモジュールが必要ですinitrd
。この記事、初期 RAM ディスクの新しいモデルである initramfs の紹介では、次のように書かれています。
しかし、RAM ディスクは実際にはキャッシングのためにさらに多くのメモリを浪費します。Linux は、ブロック デバイスから読み書きされるすべてのファイルとディレクトリ エントリをキャッシュするように設計されているため、Linux は RAM ディスクとの間でデータを「ページ キャッシュ」(ファイル データの場合) と「dentry キャッシュ」(ディレクトリ エントリの場合) にコピーします。 . ブロック デバイスのふりをする RAM ディスクの欠点は、ブロック デバイスのように扱われることです。
page cache
とは何dentry cache
ですか?その段落ではramdisk
、ブロックデバイスとして扱われ、すべてのデータがキャッシュされるため、データが複製されたということですか?
対照的に、ramfs
:
数年前、Linus Torvalds は素晴らしいアイデアを思いつきました: Linux のキャッシュをファイルシステムのようにマウントできるとしたら? ファイルをキャッシュに保持するだけで、ファイルが削除されるかシステムが再起動するまで削除されませんか? Linus は「ramfs」と呼ばれるキャッシュの小さなラッパーを作成し、他のカーネル開発者は「tmpfs」と呼ばれる改良版を作成しました (これは、データをスワップ スペースに書き込み、特定のマウント ポイントのサイズを制限して、消費する前にいっぱいになるようにします)。使用可能なすべてのメモリ)。initramfs は tmpfs のインスタンスです。
これらの RAM ベースのファイルシステムは、含まれるデータのサイズに合わせて自動的に拡大または縮小します。ファイルを ramfs に追加する (または既存のファイルを拡張する) と、より多くのメモリが自動的に割り当てられ、ファイルを削除または切り詰めると、そのメモリが解放されます。ブロック デバイスがないため、ブロック デバイスとキャッシュの間に重複はありません。キャッシュ内のコピーは、データの唯一のコピーです。何よりも、これは新しいコードではなく、既存の Linux キャッシング コードの新しいアプリケーションです。つまり、サイズがほとんど追加されず、非常にシンプルで、非常によくテストされたインフラストラクチャに基づいています。
要するに、ramfs
ファイルを開いてメモリにロードするだけですよね?
initrd
とはどちらもramfs
コンパイル時に圧縮されますが、違いは、initrd
ブート時にカーネルによってマウントされるようにアンパックされたブロック デバイスであり、一方ramfs
は cpio を介してメモリにアンパックされます。私は正しいですか?それともramfs
、非常に最小限のファイル システムですか?
最後に、今日まで、initrd
イメージは最新のカーネルで表示されています。しかし、それはinitrd
実際にramfs
今日使用されており、その名前は単に歴史的な目的のためのものですか?