ルートマウントの前に/etc/fstabにアクセスするには?

ルートマウントの前に/etc/fstabにアクセスするには?

いくつかの点を変更しながら、/etc/fstab鶏と卵の問題について考えました。/etc/fstabファイルシステム(ルートパーティションを含む)をマウントするための指示が含まれている場合、オペレーティングシステムは最初にそのファイルをどのように読み込みますか?

答え1

ブートローダがカーネルを呼び出すと、カーネルにというパラメータを渡しますroot。したがって、カーネルが初期化を終了する/と、呼び出す前に指定されたルートパーティションマウントを実行します/sbin/init(他のパラメータでオーバーライドされない限り)。

その後、プロセスinitはデフォルトの実行レベルで開始するように定義されているすべてのサービスをロードし、システムの残りの部分を開始します。

構成および使用する初期化システムによっては、前述のステップの間にいくつかの異なるステップがあります。現在、Linuxで最も広く使用されているinitシステムは、SysVInit(伝統)、Upstart、およびSystemdです。ここでは、起動プロセスの詳細を確認できます。ウィキペディア記事

これはGrub構成の単純化された例です。あなたの質問に答える重要な部分は、最後の行の2番目の部分です。次のようになりますroot=/dev/sda3

menuentry 'Gentoo GNU/Linux' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-40864544-2d0f-471a-ab67-edd7e4754dae' {
    set root='hd0,msdos1'
    echo    'Loading Linux 3.12.6-gentoo-c2 ...'
    linux   /kernel-3.12.6-gentoo-c2 root=/dev/sda3 ro  
}

多くの構成では、カーネルは、残りの/すべてのオプションがデフォルト値に設定されている読み取り専用モードでマウントされます。/etc/fstabinitが再マウントされたら、適用するファイルシステムパラメータを指定できます。

答え2

fstabこれは、デフォルト以外のインストールオプションを指定する場合に必要です。しかし今、systemd正しいカーネルデバイスとfstypeはfstabもう必要ありません。ルートエントリを次のように置き換えることができます。

#UUID=8f74237d-b689-4beb-9d1f-f60b426c9969 /            ext4        rw,relatime,data=ordered    0 1
dummy /             auto        rw,relatime,data=ordered,debug  0 1

そしてsystemdはまだマウントオプションを尊重します。

/dev/sdz1誤ったUUIDを除き、誤ったデバイス名(たとえば)を使用する可能性があります。 UUIDが間違っていると、起動時にメッセージが印刷されますが、Failed to start Remount Root and Kernel File Systemsシステムはまだ起動します。

関連情報