尽管 /etc/fstab 中的根条目错误,系统仍能正常启动

尽管 /etc/fstab 中的根条目错误,系统仍能正常启动

我有以下磁盘结构:

sda1 : Windows
sda2 : an old Linux distribution
sda3 : a new Linux distribution
sda4 : data partition

我安装了 grub,并在启动时选择系统。我现在只在 sda3 上使用新的 Linux 发行版,并且运行正常。我一直在设置 /etc/fstab 文件,以便它在启动时安装 CDROM 和数据分区。

我最近看到新的Linux系统(sda3)中的/etc/fstab文件如下所示:

/dev/sda2  /  ext4  errors=remount-ro   0   1  #NOTE THIS ENTRY HAS SDA2!
/dev/sda4  /media/me_user/datapart      ext4      defaults        1      1
/dev/sr0   /media/cdrom0   auto   ro,user,noauto,unhide  0  0

看来根条目是错误的:它应该是/dev/sda3(我一定是错误地更改了它)。但是,系统工作正常,当我启动时,主文件夹仅位于 sda3 上,而不位于 sda2 上。

我尝试从 /etc/fstab 中删除根条目行。然后,在启动时,我会看到终端提示,要求我登录。我仍然可以登录,但图形无法启动。

我已经更正了 fstab 文件,以便根条目适用于 sda3,但我想澄清这个问题。为什么我的系统工作正常并且我正在访问 sda3 上的主文件夹,而 /etc/fstab 中的根条目适用于 sda2?

答案1

我最近遇到了类似的问题并做了一些研究。我的理解是它有效,因为您在以下位置设置了正确的分区:

  • 内核命令行root=<UUID of />参数。萨特韦尔就此写了更多文章。
  • 引导加载程序设置。例如,假设grub-gnulinux-simple-<UUID of />--set=root <UUID /boot>(可能与 UUID 不同,也可能不同/)。

现在,作为引导过程的一部分/etc/fstab被读取并安装文件系统(/正在重新安装可写[ rw])。对于重新安装,/etc/fstab使用来自的选项。正如 satwell 所写,这可能解释了/从文件中删除挂载行时出现的问题。至于为什么它与错误分区的UUID一起工作?可能是因为mount()系统调用在重新挂载时忽略了错误的 UUID(并使用已经建立的 [且正确的] UUID)。

man 2 mount

重新安装现有安装

 和source参数filesystemtype被忽略。

答案2

/etc/fstab不直接控制哪个文件系统作为 root 挂载。 (这是有道理的。您必须先安装根文件系统,然后才能读取/etc/fstab。)

根文件系统通常在内核命令行参数中指定。如果你跑去cat /proc/cmdline检查它们,你可能会看到root=/dev/sda3root=UUID=<uuid of /dev/sda3>

这些参数一般在bootloader配置中配置。这里的详细信息取决于您使用的发行版,但假设您使用的是 grub,您可能会在/boot/grub/grub.cfg或中找到它的配置/boot/grub2/grub.cfg。如果此配置正确,那么您最终应该挂载正确的根文件系统。

/那么为什么当你从 中删除时启动会失败呢/etc/fstab?系统启动过程的一部分会/使用 中指定的选项重新安装/etc/fstab,这可能就是失败的原因。

相关内容