cla*_*ine 5 linux filesystems mount
设备可以安装到路径。例如“/dev/sda1”可以挂载到“/home/user”。我不明白的是“ / ”在启动过程中是如何以及在哪里安装的。有帮忙解释吗?
在 Unix 系统的引导过程中,内核会做一些它在正常操作中不会做的事情。其中之一是在目录上挂载文件系统/;这与正常的挂载操作完全不同,因为挂载不是由mount系统调用触发的,并且目标目录不是现有目录。另一件事是将程序作为 PID 1 执行,这与正常操作不同,因为这会在不复制现有进程的情况下创建进程。
在不同的 Unix 变体中,这种“魔法”挂载根目录的方式是非常不同的。内核根据可以通过多种方式指定的配置参数来选择要挂载的设备:编译时配置、内核映像中的运行时配置、某些预定义内存位置中的运行时配置、命令行参数……在你的机器上运行,你需要查看你的 Unix 变体的文档,并找到你的机器是如何配置的。
为了了解它的工作原理,这里概述了现代 Linux 内核的运行方式。这不是最简单的例子,因为 Linux 有很多历史和不同的用例。
/由存储在 RAM 中的文件组成。这个特殊的文件系统称为initramfs;它是 rootfs 文件系统类型的一个实例。initramfs 由引导加载程序通过依赖于体系结构的协议传递的内容填充,这些内容直接编译到引导加载程序加载到内存中的内核映像中。/内核中的初始化代码可识别的受限(但很大)卷类型集的一部分。此类设备类型包括常见类型磁盘上常见类型分区上的任何文件系统(任何类似 SCSI 的东西,包括 ATA、USB 等),以及 RAM 磁盘和 NFS 安装。这是来自bootup(7)Ubuntu 机器上的手册:
系统引导涉及许多不同的组件。开机后,系统 BIOS 将立即进行最少的硬件初始化,并将控制权移交给存储在持久存储设备上的引导加载程序。该引导加载程序随后将从磁盘(或网络)调用操作系统内核。在 Linux 情况下,该内核(可选)提取并执行初始 RAM 磁盘映像 (
initrd),例如由 生成的dracut(8),它会查找根文件系统(可能systemd(1)用于此目的)。找到并挂载根文件系统后,将initrd控制权移交给主机的系统管理器(例如systemd(1)) 存储在操作系统映像上,然后负责探测所有剩余的硬件,安装所有必要的文件系统并生成所有配置的服务。
您可以通过man boot阅读它并没有找到答案,而是看到bootup(7)手册底部的“另请参阅:”找到了这一点。
出于好奇,我随后查看了手册initrd:
在第一个启动阶段,内核启动并从
/dev/initrd(例如,由启动加载程序初始化的 RAM 磁盘)的内容安装初始根文件系统。在第二阶段,从初始根设备的内容加载附加驱动程序或其他模块。加载附加模块后,一个新的根文件系统(即普通的根文件系统)从不同的设备上安装。
您提到了“Unix”,所以我也会向您指出 OpenBSD第一阶段系统引导程序和第二阶段引导程序的文档。
| 归档时间: |
|
| 查看次数: |
2761 次 |
| 最近记录: |