私が/etc/fstab
にいくつかの変更を加えていたとき、このニワトリと卵の質問が発生しました-/etc/fstab
にルートパーティションを含むファイルシステムのマウント手順が含まれている場合、OSはそのファイルをどのように読み取りますかそもそも?
ブートローダーはカーネルを呼び出すときに、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が再マウントすると適用されるファイルシステムパラメータを指定できます。
デフォルト以外のマウントオプションを指定する場合は、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
、しかしシステムはとにかく起動します。