我有以下磁盘结构:
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/sda3
或root=UUID=<uuid of /dev/sda3>
。
这些参数一般在bootloader配置中配置。这里的详细信息取决于您使用的发行版,但假设您使用的是 grub,您可能会在/boot/grub/grub.cfg
或中找到它的配置/boot/grub2/grub.cfg
。如果此配置正确,那么您最终应该挂载正确的根文件系统。
/
那么为什么当你从 中删除时启动会失败呢/etc/fstab
?系统启动过程的一部分会/
使用 中指定的选项重新安装/etc/fstab
,这可能就是失败的原因。