ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

文件系统制作-基础理论篇

文件系统制作-基础理论篇 目录1. 文件系统的四大核心作用① 提供“文件名”到“磁盘地址”的映射核心② 提供层级化的目录结构树形管理③ 管理存储空间分配与回收④ 记录文件的元数据Metadata和权限2.根文件系统Root Filesystem3.恐慌”Kernel Panic1. 终极使命必须启动用户态的第一个进程PID12. 必要的运行环境标准输入/输出Console需要设备节点3. 依赖关系内核无法独自提供操作系统功能文件系统File System是一种用于在存储设备上组织、存储和管理数据的软件结构和方法。它定义了数据如何以文件File和目录Directory/Folder的形式呈现给用户和应用程序。1. 文件系统的四大核心作用① 提供“文件名”到“磁盘地址”的映射核心这是最基本的作用。硬盘只认扇区LBA地址如第 10086 号扇区但人类记不住这些数字。文件系统建立了一个翻译表当你要读/home/photo.jpg时文件系统通过目录项和 inode索引节点层层查找最终定位到这张图片具体存储在硬盘的 3、5、8 号扇区。如果去掉这层映射你只能直接操作扇区地址这几乎不可能用于现代操作系统。② 提供层级化的目录结构树形管理文件系统把无数散乱的文件组织成树状目录根目录/下面挂着home、etc、var等。作用方便用户分类管理也方便操作系统设置不同目录的权限比如/root只能管理员进。③ 管理存储空间分配与回收当你删除一个文件文件系统会标记对应的磁盘块为“空闲”当你新建文件它会从“空闲列表”中找出合适的连续或不连续的空块分配给该文件。关键策略为了防止“磁盘碎片”现代文件系统如 ext4、NTFS会采用复杂的分配算法尽量让大文件连续存放提升读写速度。④ 记录文件的元数据Metadata和权限文件系统不光存文件内容数据还存文件的“属性”元数据文件大小、创建时间、修改时间、访问时间。访问权限Linux 下的rwx读/写/执行权限以及文件所有者User、所属组Group。意义正是因为文件系统记录了这些才能对重要文件执行chmod 600禁止他人查看内核在加载/sbin/init时也要检查该文件是否有执行权限x2.根文件系统Root Filesystem根文件系统Root Filesystem是内核启动后挂载的第一个文件系统挂载点为/。内核的内核本身不包含“打开文件”的完整逻辑吗包含但内核只能操作块设备Block Device。要想解析路径/sbin/init内核必须依赖根文件系统提供的目录树解析功能和inode 读取功能才能把硬盘上的二进制程序代码加载到内存中执行。3.恐慌”Kernel Panic内核“起不来”并不意味着内核没有运行而是指内核启动过程最终会因为“恐慌”Kernel Panic而主动停机或死循环。实际上内核在挂载根文件系统之前已经完成了大部分核心初始化工作如CPU、内存、中断、调度器等。但在此之后如果没有根文件系统内核一定会触发恐慌并停止原因归结于Linux的设计哲学和“终极使命”。以下是根本原因的三层剖析1. 终极使命必须启动用户态的第一个进程PID1Linux 内核的本质是一个“管家”它负责管理硬件资源但它本身不执行具体的应用程序逻辑。内核启动的最后一步rest_init()函数是寻找并执行用户态的第一个进程——即 PID1 的init进程或现在的systemd。路径在哪init程序的路径通常是/sbin/init、/bin/init或/linuxrc。问题所在这些路径全部位于根文件系统Root Filesystem中。致命链没有根文件系统 → 无法读取/sbin/init这个二进制文件 → 内核找不到 PID1 进程 → 内核无事可做立即调用panic()函数报错VFS: Unable to mount root fs on unknown-block并挂起。内核源代码中的铁律kernel_init()函数中明确判断如果无法执行init程序则直接返回错误并触发panic。2. 必要的运行环境标准输入/输出Console需要设备节点即使是嵌入式系统内核在启动过程中也需要通过控制台Console输出日志并预留用户交互的入口/dev/console。这个特殊的设备文件必须存放在根文件系统的/dev目录下。如果内核没有根文件系统就无法获得/dev/console作为stdin/stdout/stderr。即便内核启动了因为没有终端接口内核也无法与外界通信系统处于“盲哑”状态这在工程上被视为启动失败。3. 依赖关系内核无法独自提供操作系统功能Linux 遵循“机制与策略分离”的原则。内核只提供驱动和机制而具体的策略如网络配置、防火墙规则、加载其他模块、挂载其他分区全部由用户态工具如mount、insmod、ifconfig完成。这些工具同样存放在根文件系统的/bin、/sbin或/usr/bin下。没有根文件系统内核即使探测到了硬盘也无法执行mount命令去挂载其他分区整个系统无法产生任何功能性行为。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表