web-dev-qa-db-ja.com

なぜinitramfsとinitrdが必要なのですか

たとえば、ディスク上にエキゾチックなファイルシステムがあり、システムをロードするには、マウントルートファイルシステムが必要です。しかし、カーネルイメージに適切なドライバが存在しないため、できません。

kernelinitrdをどのように理解しているかを説明しましょう。

  1. カーネルがコンパイルされると、カーネルイメージに含めるさまざまなモジュールを選択できます(1つのファイル)
  2. たとえば、私のルートファイルシステムはreiserfsであり、このファイルシステムにmoduleを含まないようにカーネルを構成しました
  3. この場合、カーネルはそのようなファイルシステムをマウントする方法を知らず、いくつかの助けが必要です->したがって、initramfsをメモリにロードします
  4. Ram fs(lib/modulesなど)で適切なモジュールを見つける
  5. このモジュールをカーネルにロードします
  6. これで、カーネルはreiserfsをマウントでき、ramfsが占有するメモリをアンロード(解放)します。

私は正しいですか?

しかし、特定のドライバーのほとんどがカーネルイメージ(単一ファイル)に既に存在する場合、なぜすべてのディストリビューションでinitramfsが必要なのか(私はこれまでにインストールしたすべてのディストリビューションでそれを確認しました)がわかりません。さらに、カーネルの起動時にファイルシステム用のドライバが必要です。他のドライバは、マウント後にファイルシステムからロードできます。

それで、それはどんなディストリビューションの本当に不可欠な部分ですか?

P.S initramfsまたはinitrdでよく使用されるものとその理由は何ですか?

5
solderingiron

強みは、モジュールのロード以外のすべてのことができることにあります。基本的にそれはあなたにユーザースペースとそれからあなたがすることができるすべてのことをする可能性を与えます。

例:initrdを使用して暗号化されたルートfsを作成します。これを設定するには、カーネルに意味のないコードが必要です。

initrdのウィキペディアページ の「Rationale」セクションには、さらに多くの例があります。

initramfsは、同じアイデアの新しい(ただしかなり古い)実装ですが、initrdという名前は、初期のユーザー空間として使用されているイメージを指すためにしばしば存続しました。

私が今考えたまったく異なる理由:組み込みデバイス、すべてを含むカーネルに対処するのに十分なメモリがない可能性があります。

Initramfsを使用する理由はたくさんありますが、以下にいくつかあります。

  1. 別の/ usr、/ varが必要な場合、一部のディストリビューションは/にこれらのディレクトリがあることに依存します。
  2. /を暗号化したいが、暗号化された/ bootを使用できないため、USBスティックに/ bootを配置したい場合
  3. カーネルに何かを組み込みたくなく、代わりにモジュールとして使用したい場合は、必要なものだけをロードします。これは初期のユーザースペースで行われます。
  4. /でdmraidを使用する場合
  5. より細かい制御が必要な場合、つまり暗号化したリモートサーバーがあり、その上で/を復号化して通常のブートを続行できるようにdropbear(小さなsshデーモン)とともに初期ユーザースペースでネットワークをセットアップする必要があります。 )

Initramfsが必要な理由を何度も続けることができますが、最終的に、「switch_root ...」の前に実行する必要のあるソフトウェアがある場合は、そのためのinitramfsが必要になります。

2
likewhoa

modernハードウェアが問題にならないのは事実だと思います。 50MBのカーネル。すべてを個別のモジュールとしてロードすることは、しばらくの間それほど重要ではなかったと主張することができます。

ただし、初期のRAMシステムでは、カーネルで特別な処理を行うことなく、可能な構成をブートストラップできます。カーネルコードを書くことは大したことです。最初のramシステムが正しい解決策です。メインシステムと同様のコードをたくさん使用できます。 systemd ;-)。

暗号化されたファイルシステムからの起動は、この良い例の1つです。カーネルはパスフレーズを要求する必要はありません。

everyの最新のインストール使用例は、UUID(またはLVMボリューム名)によってルートファイルシステムを見つけることです。これは、関係のないパーティションを削除するとブートが中断するため、すべて番号が付け直されるため便利です。または、コンピュータ間またはコンピュータ間でディスクを移動したとき。または、ディスクがライブCDの場合。

なぜRAMファイルシステムが必要なのですか?ファームウェア/ブートローダーに緊密に結合されたくないからです。データをメモリのブロックとして渡すだけで、完了です。ブートプロセスをできるだけシンプルに保ちたいと考えています。起動は重要であり、特別なケースです。 other特殊なケースのソフトウェアとの複雑なインターフェースは必要ありません。 特にファームウェアの場合。ファームウェアは非常に特殊なケースであるため、それ以外の時間は気にしません。誰も気付かないバグがたくさんあります。また、ファームウェアは非常に重要であるため、ファームウェアの修正には非常にリスクが伴います。以前はROMでしたが、まったくパッチを当てることができませんでした。

1
sourcejedi