谁实际挂载文件系统并创建 /bin、/dev、/etc 等目录

谁实际挂载文件系统并创建 /bin、/dev、/etc 等目录

我有一个非常基本的疑问,哪一部分创建了所有这些目录,安装新操作系统时创建目录的配置存储在哪里?

这些目录的创建顺序是什么?它们是在/boot内核挂载后创建的,由内核的哪一部分创建?

答案1

根文件系统首先安装(只读)在启动时,正如您的引导日志可以告诉您的那样:

[kernel] [    2.242830] VFS: Mounted root (ext4 filesystem) readonly on device 8:24.

然后它将被重新安装在初始化时:

[kernel] [    2.266181] Run /sbin/init as init process
...
[kernel] [    6.882156] EXT4-fs (sdb8): re-mounted. Opts: (null)
[kernel] [    6.882160] ext4 filesystem being remounted at /

顺便从那里人口稠密(至少)所有标准基本目录(/bin、/usr、/dev、/etc...)可能为空,可能作为挂载点,仍然作为 init 进程的一部分...

其他磁盘文件系统将安装以下/etc/fstab指令:

[kernel] [    7.155270] EXT4-fs (sdb9): mounted filesystem with writeback data mode. Opts: data=writeback,commit=120
[kernel] [    7.155274] ext4 filesystem being mounted at /var
[kernel] [    7.222851] EXT4-fs (sdb10): mounted filesystem with writeback data mode. Opts: data=writeback
[kernel] [    7.222855] ext4 filesystem being mounted at /home

这是某些初始化服务的成功结果(例如本地挂载在 openrc 中),顺便填充任何 *x 系统的每个标准目录以及可能......甚至更多。

顺便说一句,自从内核不需要/boot文件系统,它很可能永远不会被安装。它只是可以在初始化时取决于 /etc/fstab条目。

网络文件系统 (vg 不一定)也被安装在初始化时,在某种程度上取决于初始化系统(例如网络挂载openrc 中的服务)作为一个明显的先决条件,照顾网络服务之前必须已成功启动。

特别的文件系统(procfs / sysfs / configfs 或其他虚拟的?将操作系统的非文件元素呈现为文件的文件系统)将根据适当的 CONFIG_* 内核可调参数进行安装在初始化时,取决于 init 系统(例如/lib/rc/sh/init.shopenrc 的执行)并因此自动人口稠密的

临时文件系统(数据存储在易失性存储器中而不是持久性存储设备中)也可以挂载在初始化时以下指令在/etc/fstab例如中找到

tmpfs  /tmp  tmpfs   rw,nosuid,noatime,nodev,size=4G,mode=1777

/dev 特殊情况:

/dev目录根据/安装情况与内核在早期启动时所需的两个节点一起存在:/dev/console/dev/null
内核将在/dev目录中添加新节点在启动时以下设备的枚举。
如果内核配置为启用临时文件系统,则不会在根分区中创建节点:
内核将首先在目录上挂载一个空的临时文件系统/dev,覆盖其内容。

[kernel] [    2.262470] devtmpfs: mounted

因此,允许在检测到(或访问)设备时动态地将设备创建到该文件系统中。

当然,Linux 作为即插即用操作系统,其数量可能会在运行时发生变化。

相关内容