web-dev-qa-db-ja.com

ルートがマウントされる前に/ etc / fstabにどのようにアクセスしますか?

私が/etc/fstabにいくつかの変更を加えていたとき、このニワトリと卵の質問が発生しました-/etc/fstabにルートパーティションを含むファイルシステムのマウント手順が含まれている場合、OSはそのファイルをどのように読み取りますかそもそも?

22
sashoalm

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

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

ご使用の構成および使用するinitシステムによっては、前述のステップの間に他の複数のステップが存在する可能性があります。現在Linuxで最も人気のある初期化システムは、SysVInit(従来のシステム)、Upstart、およびSystemdです。ブートプロセスの詳細については、この wikipediaの記事 を参照してください。

これが私の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/fstabでは、initが再マウントすると適用されるファイルシステムパラメータを指定できます。

18
replay

デフォルト以外のマウントオプションを指定する場合は、fstabのエントリが必要です。ただし、現在のsystemdでは、正しいカーネルデバイスとfstabのfstypeは不要です。ルートエントリは次のように置き換えることができます。

#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、しかしシステムはとにかく起動します。

3
basin