
私が理解しているように、initramfsは「実際の」ルートファイルシステムをロードする役割を担っています。
次に、このルートを2つの場所で定義します。まず、項目をに入れます/etc/fstab
。次に、カーネルブートコマンド(たとえば)にデバイスを挿入しますroot=/dev/sda1
。
initramfsは、ルートファイルシステムの場所を決定するためにどれを使用しますか?ルートカーネルパラメータを使用している場合、エントリがあるのはなぜですか/etc/fstab
? 2番目のオプション(read)は、ファイルがinitramfsが最初にマウントしようとするルートデバイスにある/etc/fstab
ため、非常に非論理的です。/etc/fstab
とても混乱した内容です。
答え1
あなたが言ったように、initramfsの目的は「実際の」ルートファイルシステムをマウントすることです(他の作業も実行できますが、これは一般的な作業です)。
initramfsが存在しない場合、カーネルは通常パーティションを読み取り専用でマウントし、.initramfsに制御を渡します/sbin/init
。通常、ルートファイルシステムが通常のパーティション(mdraid、lvm、暗号化など)ではない場合、カーネルはこの操作を置き換えます。 。
これで、initramfsの背景に加えて、/etc/fstab
ルートファイルシステムにも存在します。したがって、initramfsが起動すると、ルートファイルシステムが存在しないため、fstabにアクセスできません(鶏と卵の問題)。
代わりに、initramfsが使用するカーネルブートパラメータにパラメータを渡す必要があります。通常、これはroot=/dev/sdX
ルートデバイスの位置を自動的に把握するため、パラメータはまったくありません。これはソフトウェア(通常はスクリプト)なので、実際にデバイスをルーティングするために必要なすべての操作を実行できます。
前述のように、カーネルは実際のルートを読み取り専用としてマウントします。 initramfsはこれを行う必要があります。 initramfsが完了すると、システムはinitramfsがまったく存在しないかのように起動し/sbin/init
続けます。その後、この初期化はすべての一般的な起動スクリプトを起動します。そのうちの1つは読み取り/etc/fstab
、ルートを読み取り/書き込みに切り替え、他のすべてのファイルシステムをマウントします。
答え2
そうかもしれないし。 Initramfsはさまざまな方法で構築できます(カーネルはそれをロードして実行して目的の/init
タスクを実行します)。ただし、パラメータを使用すると柔軟性が向上するため、より一般的です。つまり、変更がある場合は、開始項目を編集して作業を続行できます。組み込みのハードコーディングされたルートを使用すると、これは必ずしも可能ではありません。
それにもかかわらず、fstabエントリはマウントオプション(一部はいつでも変更される可能性があります)や順序などのfsck
他のものも決定するため、依然として必要になる場合があります。また、完全に重複していても(Initramfsが処理している場合はそうではないかもしれません)、完全性のためにその項目を残しておきます。
答え3
/etc/fstabを静的マウントとして考えることができます。これはこれらのタスクを実行する唯一の方法ですが、実際にmountコマンドを実行する唯一の方法ではなく、fstabに多くのファイルシステムがないことがわかります。 udevやudiskなどのサービスは/etc/fstabファイルを無視し、ほとんどの「自動マウント」を管理します。
したがって、何かがインストールされたり頻繁にインストールされていない場合、これは/ etc / fstabとは何の関係もありません。
initramfsは、「実際の」rootfsがマウントされるまで起動中に使用される一時rootfsです。しかし、なぜinitramfsは/ etc / fstabにあるのですか?