跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
Shell / Bash

Linux Ext 系列文件系统原理与实战

综述由AI生成深入解析 Linux Ext 系列文件系统,从硬盘物理结构讲起,涵盖磁道、扇区及 LBA 寻址原理。重点阐述 Ext2 文件系统的核心组件,包括超级块、组描述符、位图及 inode 机制。文章解释了文件属性与内容分离存储的设计思想,以及路径解析过程中 dentry 缓存的作用。最后对比了软硬链接的本质区别及其应用场景,帮助读者建立完整的文件系统认知框架。

战神发布于 2026/3/23更新于 2026/4/252 浏览
Linux Ext 系列文件系统原理与实战

Linux Ext 系列文件系统原理与实战

文件在操作系统中通常分为'内存级(已打开)'和'磁盘级(未打开)'两种状态。本文重点讨论存储在磁盘上的文件对象,以经典的 Ext2 文件系统为例,梳理从硬件底层到逻辑结构的完整链路。

理解硬件基础

存储层级概览

机械磁盘(HDD)属于外部存储设备,具有速度慢、容量大、成本低的特点。它是服务器的一部分,多台服务器组成机柜,多个机柜构成机房。这种层级结构是数据中心的基础形态。

物理与存储结构

机械磁盘写入数据的本质是磁介质的'两态'变化。其物理结构包含盘片(Platter),每个盘片有上下两个面,每面对应一个磁头。

  • 磁道(Track):同心圆环状的数据存储区域,从外圈向内圈编号,最内圈通常用于磁头停靠。
  • 柱面(Cylinder):所有盘片相同半径的磁道组成的逻辑单元。柱面数等于单个盘面的磁道数。
  • 扇区(Sector):磁盘存储数据的基本单位,通常为 512B,也是块设备的概念。

磁盘容量的计算公式为:磁头数 × 单个盘面的磁道数(柱面数)× 每道扇区数 × 每扇区字节数。

寻址方式:CHS 与 LBA

早期通过 CHS(柱面 - 磁头 - 扇区)定址来定位扇区。现代操作系统则直接使用 LBA(Logical Block Address,逻辑块地址)。

LBA 将三维的物理结构展开为一维线性数组,每个扇区都有唯一下标。转换公式如下:

LBA = C * (磁头数 * 每磁道扇区数) + H * 每磁道扇区数 + S - 1

其中 C 为柱面号,H 为磁头号,S 为扇区号。注意磁头和柱面编号从 0 开始,扇区从 1 开始。现代磁盘控制器会自动完成 LBA 到物理位置的映射,应用程序只需关注逻辑地址。

引入文件系统概念

块与分区

操作系统访问磁盘不以扇区为单位,效率太低,而是以'块'(Block)为单位,通常是连续的 8 个扇区(4KB)。知道 LBA 后,块号可通过 LBA / 8 计算得出。

由于块数量巨大,需要进行分区管理,以便独立维护不同的文件系统。

Inode 概念

在 Linux 下,文件的属性与内容是分离存储的。保存文件属性的集合称为 struct inode 对象,每个文件对应一个 inode,内含唯一的标识符 inode 号。文件名作为属性因大小不确定,不直接存入 inode,而是通过目录项关联。

Ext2 文件系统结构

Ext2 文件系统结构清晰,适合理解文件系统的基本原理。

核心组件

  • MBR:磁盘总控,负责启动引导和分区管理。
  • Boot Sector:分区入口,加载该分区的操作系统。
  • Data Blocks:存储文件内容,基本单位是块。
  • inode Table:存放 struct inode 对象,大小一般为 128 字节。一个块可存储 32 个 inode 对象。

文件的内容和数据块号对应,属性在 inode 表中。两者都跨组编号但不跨分区编号,确保同一分区内编号唯一。

位图与元数据

  • Block Bitmap:记录数据块是否被使用。

  • inode Bitmap:记录 inode 是否被使用。 删除文件时,只需将对应的位图置为 0,因此删除操作非常快。

  • GDT(组描述符表):描述组的属性,有多少个组就有多少个描述符。

  • Super Block(超级块):存放整个分区的文件系统信息,重要且会被备份在多个组中。

目录与路径解析

目录本身也是文件,其内容不是普通数据,而是'文件名 → inode 号'的映射表。

读取文件如 /home/user/file.txt 时,系统会逐级查找目录项:

  1. 找到根目录 / 的 inode 号(通常为 2)。
  2. 在根目录数据块中找到 home 的 inode 号。
  3. 继续查找 user 和 file.txt 的 inode 号。

有了 inode 号,即可获取文件属性和内容。为了加速,Linux 会使用 struct dentry 节点形成多叉树,利用 Hash 和 LRU 机制缓存历史路径结构。

挂载分区

解析路径时,遇到挂载点(如 /mnt/data)会切换到对应的文件系统。例如访问 /mnt/data/file.txt,先解析挂载点,再在该分区文件系统中查找 inode。

总结来说,给一个 inode 号就能获得文件属性与内容,而路径解析则是获取 inode 号的过程。

软硬链接机制

软链接

软链接是一个独立的文件,拥有自己的 inode 号。其内容是指向目标文件的路径,类似于 Windows 下的快捷方式。如果源文件被删除,软链接将失效。

硬链接

硬链接不是独立文件,没有独立的 inode 号。它本质上是一组新的文件名和 inode 号的映射关系。创建硬链接速度快,常用于备份。但用户不支持对目录创建硬链接,以避免路径环问题。

当前目录中的 . 和 .. 其实也是硬链接,分别指向当前目录和上级目录。

目录

  1. Linux Ext 系列文件系统原理与实战
  2. 理解硬件基础
  3. 存储层级概览
  4. 物理与存储结构
  5. 寻址方式:CHS 与 LBA
  6. 引入文件系统概念
  7. 块与分区
  8. Inode 概念
  9. Ext2 文件系统结构
  10. 核心组件
  11. 位图与元数据
  12. 目录与路径解析
  13. 挂载分区
  14. 软硬链接机制
  15. 软链接
  16. 硬链接
  • 💰 8折买阿里云服务器限时8折了解详情
  • 💰 8折买阿里云服务器限时8折购买
  • 🦞 5分钟部署阿里云小龙虾了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • VS Code 中 GitHub Copilot 无法自定义模型 API
  • ERNIE-4.5-0.3B 轻量化部署与效能突破实战
  • 网络安全基础与渗透测试全流程指南
  • 算法实战:滑动窗口解决水果成篮与字母异位词
  • Spring Boot 核心架构与自动配置原理深度解析
  • 大模型时代:为何传统机器学习仍是 AI 入门最佳路径
  • 前端调用 AI 接口全流程及具体案例
  • 计算机视觉基础、模型架构与实战应用
  • 大模型产品经理必备技能与成长路径指南
  • AI 绘画创意文字制作全流程指南
  • Ubuntu 24.04 虚拟机安装教程
  • 2026 届学位论文 AIGC 检测率要求汇总及应对策略
  • HTML 前端游戏项目合集
  • 大模型基础面试知识全解析:架构、训练与微调策略
  • SpringBoot 微服务重试常用解决方案汇总与使用详解
  • Java Map 常用方法与核心实现类详解
  • FPGA 开发入门:Vivado 下载与烧录流程详解
  • 二分算法:8 道经典题目详解与实战
  • AcWing 1152 格雷码:递归与位运算解析
  • 自然语言处理在金融领域的应用与实战

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online