关于Linux根目录挂载机制、fstab作用及多系统分区场景的技术问询
其实你问到了一个很关键的逻辑顺序问题——毕竟/etc/fstab本身就在根分区里,总不能还没挂载根就去读它对吧?我来一步步给你捋清楚:
根目录的挂载完全不依赖
/etc/fstab,这是核心逻辑!
电脑开机后,先由BIOS/UEFI找到引导设备(比如带有/boot分区的硬盘),然后加载引导加载器(最常见的是GRUB)。引导加载器的配置文件(比如/boot/grub/grub.cfg)里早就写好了两个关键信息:要启动的内核文件路径,以及哪个分区是根分区——这里通常用UUID来标识分区,比/dev/sda1这类设备名更可靠,避免硬盘顺序变动导致的识别错误。内核启动后,会直接根据引导加载器传递的参数,把指定的分区挂载为只读模式的根目录。等内核启动完成,交给初始化进程(现在主流是
systemd,以前是init)处理后续工作时,才会去读取/etc/fstab。这个文件的作用是:- 挂载其他非根分区(比如
/home、/var或者额外的存储分区); - 把已经挂载的根目录重新挂载为读写模式(启动初期用只读是为了防止文件系统在初始化过程中损坏)。
- 挂载其他非根分区(比如
你问的
/boot分区的作用:没错,它里面的引导加载器配置文件就是用来告诉内核「该挂载哪个分区当根」的关键,相当于给内核指了条明路,不用瞎找。系统绝对不会扫描所有分区找
/etc/fstab,那样既低效又容易出错。它完全是靠引导加载器传递的参数精准定位根分区的,一步到位。多系统的情况也不用担心:比如你在不同分区装了Ubuntu和Fedora,GRUB菜单里会有两个独立的引导项。每个引导项对应的配置会指向各自的内核和根分区——当你选Ubuntu启动时,内核就挂载Ubuntu的根分区,然后读它自己的
/etc/fstab;选Fedora时同理。各个系统的/etc/fstab完全独立,不会互相干扰,因为每个系统启动后只会访问自己根分区里的文件。
备注:内容来源于stack exchange,提问作者John

