initrdを使わずにLVMにルートを置くことはできますか?

initrdを使わずにLVMにルートを置くことはできますか?

私はGentooベースシステムを設定しました(つまり、起動してログインしていくつかの操作を実行できます)。私のルートパーティションはLVM2仮想グループ(別の/bootパーティションを含む)にあります。起動するには、次のパラメータをカーネルに渡す必要があります。

root=/dev/ram0 real_root=/dev/vg/rootlv init=/linuxrc dolvm

明らかに、初期のRAMディスクを使用してルートをマウントする前に作業を実行します(私の推測ではLVMエントリをロードする)。 initrdが必要ないように、このコードをカーネル自体に入れる方法はありますか?そうでない場合、どのように直接initrdを作成できますか?

役に立つかもしれない追加の注意:initrdなしでLVM以外のルートをカーネルでコンパイルしようとしましたが、うまくいきました。その後、すべてをLVMの下に置こうとしましたが、コンピュータを起動できませんでした(LVMタスクを処理できなかったようです)。その後、genkernelそのオプションと一緒にツールを使用して、--lvm現在使用中の動作カーネルとinitrdを作成しました。

genkernel今、私はマシンがより速く起動するようにinitrdなしですべてを直接スキップしたいと思います(とにかく柔軟性は必要ありません)。

答え1

簡単な答え:いいえ。 LVMが必要な場合はinitrdが必要です。

しかし、以前に他の人が言ったように、LVMはシステムの速度を遅くしたり悪いことをしないでください。

initrdを使用すると、カーネルをロードできます。カーネルがLVMドライブにある場合は、カーネルを含むバイナリをロードする前にLVM環境全体を設定する必要があります。

確認するinitrdのWikipediaエントリinitrdが何をするのか、そしてこれが必要な理由について説明します。

もう一つの注意:自分で仕事をしたいあなたの意図を理解してください。しかし、genkernelを使用しても手が汚れている可能性があります。 genkernel --menuconfig allを使用すると、デフォルトではツールサポートなしでカーネルを構築するのと同じようにすべてを設定できます。 genkernel は make bzImage、makemodules、makemodules_install の行を追加し、不快な initrd 操作を実行します。

明らかに説明されているようにinitrdを直接作成できます。ここにinitramfsがありますまたはここにinitrdがあります

答え2

編集:私はLVMから起動しようとしていることに気づきました。私はLVMを設定したことも必要もなく、ここでのアプローチがうまくいかない可能性があります。

initrdのないカーネルを作成するために実行する必要がある基本的な規則は次のとおりです(メモリからはっきり覚えていません)。

  1. カーネルを再コンパイルし、カーネルに組み込まれていることを確認してください(重要:モジュールではありません!):

    1. マザーボードドライバとハードディスクドライバ(以下の両方Device Drivers
    2. //etc/*およびファイルシステムドライバ/lib/modules/*(以下File systems

    デフォルトでは、カーネルはルートファイルシステムをマウントし、/ etc / fstabを読み込み、追加のドライバモジュール(必要な場合)をロードし、ルート以外のファイルシステムをマウントして残りの起動プロセスを完了できるようにする必要があります。ネットワークブートなど、より複雑なブートプロセスがある場合は、これらのドライバを組み込む必要があります。

  2. カーネル「一般設定>初期RAMファイルシステムとRAMディスク(initramfs / initrd)のサポート」(CONFIG_BLK_DEV_INITRD = nとも呼ばれます)でinitrdを無効にします。

  3. init= および realroot= が不要になるように GRUB 構成を変更し、root= をルートファイルシステムデバイスを指すように設定します。

私の考えでは、それはすべてだったと思います。問題が発生した場合に備えて、バックアップカーネルと起動可能なLive CDの完全なコピーをアーカイブすることを忘れないでください。

間違っている可能性がある:誤ったドライバをコンパイルしたり、デフォルトドライバをモジュールにコンパイルすると、カーネルはファイルシステムを読み取ることができません。新しいカーネルを使用するか、Live CD を使用して再起動し、正しいドライバでカーネルを再コンパイルします。

唯一の難しい部分は、どのドライバがあなたのハードウェアに関連しているかを決定することです。lspciとを使用すると、lshwハードウェアを識別するのに役立ちます。まだこれらのツールがない場合emerge lshw pciutils

答え3

はい、initrdが必要です。理由は次のとおりです。

一般的なブートプロセスは、カーネルを見つけて実行するのに十分なシステムを知っているブートローダから始まります。 (GRUB2はLVM2またはRAIDパーティション内のカーネルを見つけるのに十分スマートですが、GRUB1はそうではないため、通常は単純化されたレイアウトを使用して/ bootを別々のパーティションに作成することをお勧めします。)ロード後にカーネルを起動するプロセスを開始できます。ルートファイルシステムを見つけることができます。ただし、ルートファイルシステムに存在し、ルートファイルシステムに存在するLVMツールなしでロードできない特定のユーザースペースツールによってトリガーされないと、LVMを起動できません... ;)

このサイクルを破るために、initrdまたはinitramfsは、必要なLVMやMDなどのサービスを開始するのに十分なLinuxシステムを含むカーネル(/bootまたはカーネル自体の内部)に格納されている圧縮ファイルシステムです。これは一時ファイルシステムであり、実際のルートをロードできるだけのルートファイルシステムとして機能します。

実際の生産に関する限り、そのトピックに関するほとんどの文書は驚くほど古いです。たとえば、lvm2create_initrdはGentooでも機能しなくなりました。 (私は数ヶ月前に同じことを設定し、動作するinitrdを取得する前にスクリプトを再構築する必要がありました。)独自のinitramfsを作成するのは楽しいかもしれません。これは絶対に最小限の起動プロセスを得る唯一の方法です。 (そしてその過程でLinuxがどのように起動するかを学びましょう。)しかし、多くの作業があります。

短い答え:Dracutを使用してください。これは、ほとんどが自動化された方法でinitramfsを生成するために作成された新しいフレームワークであり、Portageにあります。ドキュメントは少し不足していますが、理解するのに十分で信頼できるinitramfsとLVMルートを取得する最も簡単な方法です。

答え4

はい。

grub2をインストールして使用すると、initrdの作成と処理の複雑さが意味をなさなくなります。 grub2 ウィキペディアhttp://grub.enbug.org/LVMandRAID/boot を lvm に置く方法を説明します。 grub.cfg(grub構成ファイル)にはinsmod lvmのみが必要なので、initrdは必要ありません。

grub2は現在バージョン1.98ですが、まだGentooの実験的ブランチにあります。ただし、他のスロットに取り付けることで完全に使用できます。

楽しむ!

関連情報