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


21

/etc/fstabこの鶏と卵の質問が私に起こったとき、私はいくつかに変更を加えていました- /etc/fstabルートパーティションを含むファイルシステムをマウントするための指示が含まれている場合、OSは最初にそのファイルをどのように読み取りますか?

回答:


18

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

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

構成と使用するinitシステムに応じて、前述した手順の間に複数の手順が存在する場合があります。現在、Linuxで最も人気のある初期化システムは、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
ルートパーティションは、最初はカーネルによって読み取り専用でマウントされます。次に、initプロセスは/etc/fstabそこにあるパラメータに従って物をマウントします。これは通常、ルートパーティションを読み書き可能に再マウントすることを意味します。
goldilocks

1
また、カーネルは、まだマウントされていないアクティブなパーティション上のいくつかの特別なファイルを探すハードコードされたルーチンでコンパイルできます。FreeBSDローダーはそのように動作します。
コンディバス14年

Linuxの@Kondybas LILOも、いくつかの固定ブロック番号でカーネルをロードするようにハードコードされています
-phuclv

3

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が正しくない場合、メッセージはboot:Failed to start Remount Root and Kernel File Systemsで出力されますが、システムはとにかく起動します。

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