假设我们有一个名为 的分区/dev/sda2
,为了使用这个分区,我们必须将其挂载到某个目录,例如我们可以将其挂载到该/mnt/sda2
目录。
现在说Linux安装在/dev/sda1
分区上,那么说Linux分区(/dev/sda1
)“挂载”到“/”目录是否准确,或者在这种情况下使用术语“挂载”不准确?
答案1
根文件系统有点特殊,因为它通常由 initramfs/initrd(在大多数主要发行版中)或内核(使用无 initramfs 内核配置,类似于经典 Unix 系统的方式)安装,作为引导过程,并且不能像任何其他文件系统一样真正卸载。
但说“根文件系统/dev/sda1
已安装到/
”并没有错。我认为一些旧的 Unix 教科书说过类似“根文件系统被神奇地安装到/
”的内容,因为该特殊安装过程的细节很棘手,并且本质上只与处理内核启动任务的内核开发人员相关。
当使用 initramfs 时,initramfs 映像会/
在内核启动时挂载。然后将根文件系统安装在某个临时位置,并/sbin/pivot_root
使用工具(或作为其他特定于发行版的工具的一部分的等效系统调用)来相互切换 initramfs 和真实根文件系统的位置。然后,真正的 init 进程exec()
从真正的根文件系统中删除,以将最后剩余的打开文件句柄释放给 initramfs,然后可以卸载 initramfs 并释放分配给它的 RAM。
在内核技术上保持运行的同时,可能可以再次使用相同的进程从一个根文件系统切换到另一个根文件系统,但实际上这通常不是很有用:无论如何,您都需要停止基本上所有进程才能获得所有打开的文件系统旧根文件系统上的文件已关闭,以便旧根文件系统可以在旋转后卸载。当您到达这一点时,您将有效地进入关闭程序,因此重新启动可能会更简单。作为奖励,通过在这种情况下重新启动,您将获得一个积极的证据,证明启动可以与新的根文件系统一起工作。
答案2
这是一个特例。如果没有 initrd / initramfs,则根文件系统由内核挂载。 Linux 内核开发人员使用这个术语。我认为没有理由反驳他们。
linux-v5.0/init/do_mounts.c#L533
我认为将 initrd / initramfs 描述为挂载根文件系统也是完全可以的。