在挂载 root 之前如何访问 /etc/fstab?

sas*_*alm 25 startup boot mount fstab root-filesystem

我正在对 进行一些更改/etc/fstab,当我遇到这个鸡和蛋的问题时 - 如果/etc/fstab包含安装文件系统的说明,包括根分区,那么操作系统首先如何读取该文件?

rep*_*lay 20

当引导加载程序调用内核时,它会向内核传递一个名为root. 因此,一旦内核完成初始化,它将继续挂载给定的根分区/,然后调用/sbin/init(除非这已被其他参数覆盖)。

然后,该init进程通过加载定义为在默认运行级别中启动的所有服务来启动系统的其余部分。

根据您的配置和您使用的初始化系统,我提到的步骤之间可能还有多个其他步骤。目前 Linux 上最流行的 init 系统是 SysVInit(传统的)、Upstart 和 Systemd。您可以在这篇维基百科文章中找到有关启动过程的更多详细信息。

这是我的 Grub 配置的简化示例。回答您的问题的重要部分是倒数第二行,有一个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  
}
Run Code Online (Sandbox Code Playgroud)

在许多配置中,内核/以只读模式挂载,所有其余选项都设置为默认值。在/etc/fstab你可以指定一次的init重新装载它这将被应用文件系统参数。

  • 根分区最初由内核以只读方式挂载。一个`init`进程然后根据那里的参数挂载`/etc/fstab`中的东西,这通常意味着重新挂载根分区读写。 (2认同)