initramfsは/ etc / fstabを使用しますか?


20

私の理解では、initramfsは「実際の」ルートファイルシステムをロードする役割を担っています。

ここで、そのルートを定義する場所が2つあります。まず、エントリをに入れ/etc/fstabます。次に、デバイスをカーネルブートコマンドに配置しますroot=/dev/sda1

ルートファイルシステムがどこにあるかを決定するために、initramfsはどれを使用しますか?ルートカーネルパラメーターを使用する場合、なぜエントリがあり/etc/fstabますか?2番目のオプション(読み取り/etc/fstab)は、/etc/fstabファイルがinitramfsが最初にマウントしようとしている非常にルートデバイス上にあるため、まったく非論理的です。

非常に紛らわしいもの。

回答:


14

あなたが述べたように、initramfsの目的は、「実際の」ルートファイルシステムをマウントすることです(他のこともできますが、これは一般的なタスクです)。

initramfsがない場合、カーネルは通常パーティションを読み取り専用としてマウントし、制御をに渡し/sbin/initます。通常、ルートファイルシステムが通常のパーティション(mdraid、lvm、暗号化など)でない場合、initramfsはカーネルからこのタスクを引き継ぎます。

これで、initramfsの背景/etc/fstabは別として、ルートファイルシステムに常駐します。そのため、initramfsを起動すると、そのルートファイルシステムは存在しないため、fstabに到達できません(鶏と卵の問題)。
代わりに、initramfsが使用するカーネルブート引数にパラメーターを渡す必要があります。通常、これは次のようなものですroot=/dev/sdX。ただし、ルートデバイスがどこにあるかを自動的に把握するために何かを行う場合もあるため、パラメーターはまったくありません。それは単なるソフトウェア(通常はスクリプト)であるため、ルートデバイスのマウントに必要なことは何でも実行できます。

さて、前述のように、カーネルは実際のルートを読み取り専用としてマウントします。initramfsはこれを正確に行う必要があります。initramfsが完了すると、システムはinitramfsがまったく存在しないかのようにブートを続行し、/sbin/init起動します。このinitは通常のブートスクリプトをすべて起動します。これらのスクリプトの1つは、読み取り/etc/fstab、rootの読み取り/書き込みへの切り替え、および他のすべてのファイルシステムのマウントを行います。


だから、あなたは本当のルートファイルシステム内の/ sbin / initが/ etc / fstabのオプションを使用して再びルートを再マウントすると言っていますか?
アーメドゴニム

3
はい。通常、単純なを介してmount -o remount,rw /。マウントされているデバイスは変更されませんが、マウントのオプションは変更されます。マニュアルページから:After this call mount reads fstab (or mtab) and merges these options with options from command line
パトリック

grub2コマンドラインを使用している場合、カーネルブート引数にパラメーターを渡す方法を教えてください。なんらかの理由でシステムにgrubメニューが表示されません。
直観

@intuited新しい質問をする必要があります。コメントは、Q&Aのための場所ではありません
パトリック

lsinitramfs /boot/initrd* | fgrep fstab驚いたことに、少なくとも私にとっては、initramfsにはfstabファイルが含まれています。
youfu

2

かもしれないし、そうでないかもしれない。Initramfsはさまざまな方法で構築できるため(カーネルはそれをロードして実行/initするだけで、何でも実行します)。ただし、パラメータを使用するとより柔軟性が得られるため、パラメータの使用がより一般的です。つまり、何かが変更された場合、ブートエントリを編集するだけで機能し続けます。ハードコードされたルートが組み込まれている場合、これは必ずしも可能とは限りません。

fstabエントリは、マウントオプション(一部は移動中に変更可能)やfsck順序など、他のことも決定するため、どちらの方法でも必要になる場合があります。また、それが完全に不要な場合(およびInitramfsがそれを処理する場合、それがなくても動作する可能性があります)でも、単に完全を期すために、そこにエントリを保持します。


1

/ etc / fstabは静的なマウントと見なすことができます。これはそのようなタスクを実行する方法にすぎませんが、実際にはコマンドmountを実行するだけではなく、fstabに欠落している多くのファイルシステムがあります。udevやudiskなどのサービスは、/ etc / fstabファイルを無視して「自動マウント」の多くを管理します...

そのため、何かがマウントされている場合や頻繁にない場合は、/ etc / fstabとは関係ありません。

initramfsは、「真の」rootfsがマウントされるまでブートプロセス中に使用される一時的なrootfsのみであるため、なぜinitramfsを/ etc / fstabに配置する必要があるのですか?

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