![谁实际挂载文件系统并创建 /bin、/dev、/etc 等目录](https://linux22.com/image/214584/%E8%B0%81%E5%AE%9E%E9%99%85%E6%8C%82%E8%BD%BD%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E5%B9%B6%E5%88%9B%E5%BB%BA%20%2Fbin%E3%80%81%2Fdev%E3%80%81%2Fetc%20%E7%AD%89%E7%9B%AE%E5%BD%95.png)
我有一个非常基本的疑问,哪一部分创建了所有这些目录,安装新操作系统时创建目录的配置存储在哪里?
这些目录的创建顺序是什么?它们是在/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.sh
openrc 的执行)并因此自动人口稠密的。
临时文件系统(数据存储在易失性存储器中而不是持久性存储设备中)也可以挂载在初始化时以下指令在/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 作为即插即用操作系统,其数量可能会在运行时发生变化。