ブート時にカーネル全体がメモリにロードされていますか?


14

初期のRAMディスクの機能について説明しているこの人気のあるIBM文書(Webでかなり頻繁に参照されています)を読みます。

しかし、これがどのように機能するかを概念化する際に壁にぶつかりました。

ドキュメントでは、それは言います

GRUBなどのブートローダーは、ロードされるカーネルを特定し、このカーネルイメージと関連するinitrdをメモリにコピーします

私はすでに混乱しています:カーネル全体をメモリにコピーしますか、それともその一部ですか?カーネル全体がメモリ内にある場合、なぜ初期RAMディスクが必要なのでしょうか?

initrdの目的は、小さな汎用カーネルイメージを作成できるようにすることであり、カーネルイメージがロードされる前にinitrdが正しいモジュールをインストールすることだと思いました。しかし、カーネル全体がすでにメモリにある場合、なぜinitrdが必要なのでしょうか?

それは私を混乱させる別のことももたらします-カーネルにロードされるモジュールはどこにありますか?すべてのカーネルモジュールはinitrd内に格納されていますか?


はい。カーネル全体。そしてその最初のrootfs。しかし、Linuxカーネルは長年initrdを使用していません。
mikeserv

まさにそれを読んでいた。その大部分はinitramfsに置き換えられましたか?そして、initramfsを使用した同様のプロセスは正しいですか?
user1028270

1
2.6シリーズ以降、すべてのカーネルで完全に置き換えられました。しかし、プロセスは initramfsがアンマウントされないことを除いて、多少似ています-常にそこにあり、常にルートです。実際にルートdevをマウントする必要があります。また、個別のブロックdevなどをエミュレートする必要がないという利点もあります。
mikeserv

あなたがリンクした記事を読みます。カーネルモジュールはinitramfs rootfsに保存されていますか?
user1028270

1
@edwardtorvalds-それudevは通常、すべて自動的に処理されます。
mikeserv

回答:


17

カーネル全体がブート時にメモリにロードされますが、これは一般的にinitramfs最近のことです。(システムをセットアップせずに起動することは可能ですinitramfsが、デスクトップやサーバーでは珍しいことです。)

initramfs役割は、 『本物』のファイルシステムをマウントし、システムの起動を続行するために必要な機能を提供することです。これには、カーネルモジュールとさまざまなバイナリが関係します。少なくとも、udevkmodが関係します。、おそらくネットワーク、モジュールをロードします。

モジュールは、起動するだけでなくカーネルに読み込むことができるため、カーネルによる特別な準備はありませんinitramfs。彼らはどこにでも保存することができますinitramfs/lib/modulesあなたはモジュールを開発している場合、実際のファイルシステムに、開発ツリーに... initramfsのみ(残りが含まれている)ルートファイルシステムをマウントするために必要なモジュールが含まれている必要があります。


わかりました。カーネルイメージとそれが使用するファイルシステムは、明らかに完全に分離されているので、統合したと思います。
user1028270

5

カーネル全体(モジュールではなく)がメモリにロードされます。ファイルシステムが利用可能になる前にカーネルが必要とするモジュールがある場合(これは通常、ファイルシステムとそのデバイスのドライバーを意味します)、それらのモジュールはinitramfs(メモリ内)にあり、カーネルはそこからそれらをロードします。他のモジュールは、後でファイルシステムからロードできます。


3

最新のLinuxセットアップのカーネルは非常にモジュールベースです。つまり、適切なカーネル(ブート時にRAMにロードされる)には最低限の機能のみが含まれ、残りはすべてモジュールとしてコンパイルされます(実行時にロード可能)。たとえば、ブートに必要なデバイスまたはファイルシステムがモジュールの場合でもこれを機能させるにinitramfsは、カーネルにロードされます(名前が示すように、これはブート時にマウントされる単純なファイルシステムを持つRAM領域です)。この一時ファイルシステムはにマウントされ/、起動プログラムと必要なモジュールが含まれています。起動initramfsが完了すると、Linuxはpivot_root(8)、実際の部分をマウントし/initramfsコンテンツます。

この複雑さのポイントは、たとえば、ディストリビューションが1つのカーネル(最小カーネルと完全なモジュールセット)をコンパイルでき、カーネルのインストール時initramfsに、ターゲットマシンのハードウェアとセットアップに合わせて作成できることです。「パーソナルコンピュータ」のさまざまなデバイスと構成のために、これはすべて必要です。


しませんpivot_root
mikeserv
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.