【Linux 系统篇(二十七)】文件(四):Ext 系列文件系统(上):从物理磁盘到逻辑抽象

发布时间:2026/10/8 13:10:48

【Linux 系统篇(二十七)】文件(四):Ext 系列文件系统(上):从物理磁盘到逻辑抽象 大家好欢迎来到 huangjin007_ 的博客⭐个人主页huangjin007_文章收录专栏Linux 内功修炼手册(系统篇)总会有一些坚持能从冰封的土地里培育出十万朵怒放的蔷薇Linux 系统篇(二十六) —— Ext 系列文件系统上文章目录Linux 系统篇(二十六) —— Ext 系列文件系统上一、 硬件底层认知磁盘、服务器、机房核心概念1.1 机械磁盘的核心特性1.2 拓展科普机房、服务器、磁盘磁铁原理二、 磁盘完整物理结构2.1 核心物理组件三、 磁盘存储逻辑结构磁道、扇区、柱面3.1 磁道Track3.2 扇区Sector3.3 柱面Cylinder3.4 参数汇总3.5 磁盘容量计算公式3.6 数据存储本质四、 传统 CHS 三维寻址原理与致命缺陷4.1 CHS 寻址逻辑4.2 CHS 寻址的硬件位数限制五、 磁盘逻辑重构从三维 CHS 到一维 LBA 寻址5.1 生活化类比磁带模型5.2 磁盘三维数组本质底层核心模型5.3 关键核心地址转换执行者六、 CHS 与 LBA 精准换算公式6.1 编号规则6.2 前置变量6.3 CHS 转 LBA6.4 LBA 转 CHS6.5 最终操作系统视角七、 文件系统第一层抽象块Block机制7.1 为什么需要块7.2 块的核心规则7.3 块号与 LBA 扇区换算八、 文件系统第二层抽象分区Partition8.1 分区的本质8.2 Linux 分区特性8.3 分区最小单位柱面九、inode 索引节点9.1 Linux 文件核心设计思想9.2 ls -l 与 stat 指令实操解析9.3 inode 核心定义9.4 超级关键坑点9.5 原生 ext2_inode 磁盘结构体内核源码级详解9.6 15 级块指针模型Ext 文件系统核心结语一、 硬件底层认知磁盘、服务器、机房核心概念1.1 机械磁盘的核心特性在整个计算机硬件体系中机械硬盘HDD是唯一的纯机械设备。CPU、内存、显卡、网卡均为纯电子元器件依靠电信号光速传输数据唯独机械硬盘依靠马达旋转、磁臂摆动、磁头悬浮等物理机械运动完成读写。基于硬件属性机械磁盘具备四大核心特征属于外设设备磁盘不属于计算机核心内存设备是典型外部存储外设。CPU 无法直接读取磁盘数据必须先加载到内存再由 CPU 处理。速度极慢机械运动速度远低于电子信号寻道、旋转、等待扇区对齐是磁盘 IO 延迟的根本来源。容量巨大、性价比极高相比固态硬盘机械硬盘单位 TB 价格极低是服务器冷数据、长期备份数据的核心存储介质。结构精密、怕震动、怕磁场、怕灰尘。1.2 拓展科普机房、服务器、磁盘磁铁原理1.2.1 机房与服务器科普我们日常使用的云服务器、云主机物理载体全部托管在专业 IDC 机房服务器企业级专用主机支持硬盘热插拔、7×24 小时不间断运行硬盘负载、转速、精度远高于家用硬盘机柜标准化机架一台机柜可堆叠数十台服务器集中供电、集中散热机房恒温、恒湿、防静电、双路供电、消防隔离的专业场地保障存储设备全年无停机。家用电脑硬盘仅适合间歇性使用无法承受服务器级别的不间断读写压力。1.2.2 磁盘与磁铁的核心原理机械硬盘的存储本质是磁记录原理盘片表面涂覆磁性介质磁头通过改变介质磁极的南北方向区分二进制的0和1从而永久存储数据。由此得出两个关键结论磁盘惧怕强磁铁强磁场会直接打乱盘片磁性排布导致数据永久性损坏。磁盘绝对不能私自开盖硬盘内部为高度无尘高端盘为充氦环境普通空气的微小灰尘落在高速旋转的盘片上会直接刮伤盘面造成物理坏道、磁盘报废普通环境无法维修。二、 磁盘完整物理结构机械硬盘所有的数据存储、寻址、读写逻辑全部依赖以下物理组件所有文件系统底层原理均源于此。2.1 核心物理组件盘片Platter磁盘的数据真正存储载体一般为铝合金/玻璃基底表面镀磁性涂层。一块硬盘可包含多张盘片每张盘片分为正反两个盘面均可独立存储数据。主轴 主轴马达所有盘片固定在同一根主轴上马达驱动所有盘片同步高速旋转7200/10000 转/分钟。所有盘片转速完全一致无法单独旋转某一张盘片。磁头Head磁盘的读写“笔尖”悬浮在盘面上方纳米级高度不接触盘面。规则一个盘面对应一个独立磁头一张盘片对应两个磁头。磁头传动臂核心重点所有磁头全部固定在同一根传动臂上共进退、共移动磁臂摆动时所有盘面的磁头同时向圆心/外圈移动无法单独移动单个磁头。驱动电机 控制电路板含伺服系统负责驱动磁臂摆动音圈马达、磁头信号解析、磁盘固件运算、以及后面要讲的 LBA 与 CHS 地址转换工作。三、 磁盘存储逻辑结构磁道、扇区、柱面磁盘高速旋转、磁头静止就会在盘面划出完整的同心圆由此诞生磁盘三大核心硬件单位。3.1 磁道Track盘面上同心圆环轨道即为磁道。编号规则从最外圈从 0 开始编号向内圈依次递增。特殊细节磁盘最内侧靠近主轴的磁道不存储任何数据仅作为磁头断电停泊区保护数据盘面不被划伤。3.2 扇区Sector一条环形磁道被均等切分为无数个扇形小块每一个小块就是扇区。硬件核心定义扇区是磁盘硬件读写的最小单位标准固定 512 字节。磁盘硬件不支持读写半个扇区所有硬件 IO 的最小粒度都是一整个扇区。3.3 柱面Cylinder结合「磁头共进退」的关键特性当磁臂固定在某一个径向位置时所有盘面、相同半径的所有磁道堆叠形成一个虚拟圆柱体这个虚拟结构就是柱面。关键点柱面是逻辑概念磁盘无真实物理结构柱面总数 单盘面磁道总数同一柱面下所有磁道的扇区数量完全一致。3.4 参数汇总磁头Head每个盘片一般有上下两面分别对应1个磁头共2个磁头。磁道Track从盘片外圈往内圈编号0磁道1磁道……靠近主轴的同⼼圆用于停靠磁头不存储数据。柱面Cylinder所有盘片上相同半径的磁道在逻辑上构成了一个圆柱面称为柱面。数量上等同于磁道个数。扇区Sector每个磁道被切分成很多扇形区域每道的扇区数量相同。扇区是磁盘存储数据的基本单位通常大小为512字节。盘片Platter就是盘片的数量。3.5 磁盘容量计算公式磁盘容量 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数3.6 数据存储本质文件 文件内容 文件属性。无论是文件的文字数据、二进制数据还是权限、大小、时间等属性数据本质都是二进制数据全部存储在磁盘扇区中。只要可以精准定位单个扇区就可以连续定位多个扇区从而存储完整文件数据。四、 传统 CHS 三维寻址原理与致命缺陷4.1 CHS 寻址逻辑早期磁盘操作系统通过三维物理坐标精准定位任意一个扇区这套机制即为 CHS 寻址CCylinder柱面号移动磁臂定位目标半径轨道层HHead磁头号切换对应盘面的读写磁头SSector扇区号等待盘面旋转对齐目标扇区。简单理解先找层柱面→ 再找面磁头→ 最后找块扇区三维定位唯一扇区。4.2 CHS 寻址的硬件位数限制早期 BIOS 固件固定使用特定位数存储 CHS 坐标直接限制了磁盘最大容量磁头8bit → 最大 2⁸ 256柱面10bit → 最大 2¹⁰ 1024扇区6bit → 最大 2⁶ 63代入容量公式最大容量 256 × 1024 × 63 × 512B 8064MB ≈ 8.4GB五、 磁盘逻辑重构从三维 CHS 到一维 LBA 寻址5.1 生活化类比磁带模型磁带是所有人都能理解的一维线性存储结构数据从头到尾连续排列只有一个线性下标。磁盘物理上是环形三维结构但操作系统不喜欢复杂的三维坐标。于是系统做了顶级抽象把卷曲的磁盘彻底拉直为一条线性磁带。拉直后的每一个扇区拥有唯一、连续、从 0 开始的线性下标这个下标就是LBALogical Block Address逻辑块地址。5.2 磁盘三维数组本质底层核心模型我们可以用 C 语言数组完美诠释磁盘存储结构单条磁道展开后是一维数组元素为单个扇区单个柱面包含所有盘面的同半径磁道是二维数组整块磁盘由无数柱面堆叠是三维数组C/H/S。CHS 寻址本质就是访问三维数组的[C][H][S]坐标。但在计算机底层所有多维数组最终都会被编译器平铺为一维数组。磁盘同理三维 CHS 结构最终被硬件平铺为一维 LBA 线性结构。5.3 关键核心地址转换执行者操作系统只使用 LBA完全不感知 CHSLBA 与 CHS 的互相转换不是内核、不是软件完成而是由磁盘自带固件、伺服硬件电路自动完成。OS 下发指令读取 LBA1000磁盘固件自动换算 CHS 物理坐标 → 控制磁臂、磁头、盘面完成读写。六、 CHS 与 LBA 精准换算公式6.1 编号规则柱面 C、磁头 H从 0 开始编号扇区 S硬件规则从 1 开始编号LBA 线性地址从 0 开始编号6.2 前置变量单个柱面总扇区数 磁头数 × 每道扇区数6.3 CHS 转 LBALBA 柱面号C × 单个柱面的扇区总数 磁头号H × 每磁道扇区数 扇区号S - 1即LBA 柱面号C × (磁头数 × 每磁道扇区数) 磁头号H × 每磁道扇区数 扇区号S - 1注意扇区号通常是从1开始的而在LBA中地址是从0开始的。所以要-1消除扇区的编号偏移。柱面和磁道都是从0开始编号的。总柱面、磁道个数、扇区总数等信息在磁盘内部会自动维护上层开机的时候会获取到这些参数。6.4 LBA 转 CHS柱面号C LBA // (磁头数 × 每磁道扇区数)【//表示除取整即单个柱面的扇区总数】磁头号H (LBA % (磁头数 × 每磁道扇区数)) // 每磁道扇区数扇区号S (LBA % 每磁道扇区数) 16.5 最终操作系统视角整块磁盘 存储扇区的一维数组下标 LBA。操作系统只需传入一个数字即可访问磁盘任意位置。七、 文件系统第一层抽象块Block机制7.1 为什么需要块硬件最小读写单位是 512B 扇区。如果操作系统每次 IO 只读写 512B会产生海量细碎 IO、频繁硬件调度磁盘性能会极其低下。为了优化 IO 效率文件系统引入块Block概念一次性整合多个连续扇区作为操作系统读写的最小单位。7.2 块的核心规则块大小在mkfs格式化分区时确定终身不可修改Linux 默认标准1块 8个扇区 4KB块是文件系统读写的最小单位软件层面扇区是磁盘硬件读写的最小单位硬件层面。扇区是硬件概念块是文件系统软件概念。7.3 块号与 LBA 扇区换算磁盘就是一个三维数组我们把它看待成为一个“一维数组”数组下标就是LBA每个元素都是扇区。每个扇区都有LBA那么8个扇区一个块每一个块的地址我们也能算出来。知道LBA块号 LBA / 8知道块号LBA 块号 * 8 n(n是块内第几个扇区)八、 文件系统第二层抽象分区Partition8.1 分区的本质整块物理磁盘容量巨大为了隔离系统数据、用户数据、业务数据我们将磁盘划分为多个独立区域这就是分区。Windows 的 C盘、D盘Linux 的/dev/sda1、/dev/sda2本质都是分区。8.2 Linux 分区特性Linux 一切皆文件磁盘与分区均以设备文件形式存在于/dev目录/dev/sda整块物理磁盘/dev/sda1第一个分区8.3 分区最小单位柱面传统 MBR 分区机制中分区划分的最小单位是柱面。此时我们可以将硬盘上的柱面分区进行平铺将其想象成一个大的平面。分区只需记录两个参数起始柱面号结束柱面号通过柱面数量、单柱面扇区数即可精准算出分区总扇区数、分区总容量、分区对应的 LBA 地址区间。九、inode 索引节点9.1 Linux 文件核心设计思想Linux 文件 内容数据 属性数据内容与属性完全分离存储文件正文、二进制数据 → 存储在数据块 Block 中文件权限、大小、属主、时间、链接数 → 存储在inode 索引节点中9.2 ls -l 与 stat 指令实操解析执行基础列表指令ls -l展示 7 大文件属性权限模式、硬链接数、所有者、所属组、大小、修改时间、文件名。执行详细属性指令stat test.c展示的绝大多数元数据全部来源于 inode包括 Inode 号、Links 数、IO Block、Access/Modify/Change 时间等。9.3 inode 核心定义inode索引节点专门存储文件属性元数据的磁盘数据结构一个文件对应唯一一个 inode每个 inode 拥有全局唯一 inode 编号Ext2/Ext3 默认 128字节Ext4 支持 256字节无论文件大小inode 占用磁盘大小固定不变。9.4 超级关键坑点文件名 不存储在 inode 内部文件名存储在目录文件的数据块中目录文件维护「文件名 → inode号」的映射关系。这也是硬链接可以多个文件名对应同一个 inode 的底层原理。9.5 原生 ext2_inode 磁盘结构体内核源码级详解structext2_inode{__le16 i_mode;// 文件类型、权限__le16 i_uid;// 所有者UID低16位__le32 i_size;// 文件字节大小__le32 i_atime;// 最近访问时间__le32 i_ctime;// 属性修改时间__le32 i_mtime;// 内容修改时间__le32 i_dtime;// 文件删除时间__le16 i_gid;// 所属组GID低16位__le16 i_links_count;// 硬链接计数__le32 i_blocks;// 文件占用磁盘块数__le32 i_flags;// 文件特殊标志union{// 多系统保留字段}osd1;// 核心15个块指针定位文件数据块__le32 i_block[EXT2_N_BLOCKS];__le32 i_generation;// NFS文件版本__le32 i_file_acl;// 访问控制列表__le32 i_dir_acl;__le32 i_faddr;union{// 多系统保留字段}osd2;};#defineEXT2_NDIR_BLOCKS12#defineEXT2_IND_BLOCKEXT2_NDIR_BLOCKS#defineEXT2_DIND_BLOCK(EXT2_IND_BLOCK1)#defineEXT2_TIND_BLOCK(EXT2_DIND_BLOCK1)#defineEXT2_N_BLOCKS(EXT2_TIND_BLOCK1)// 最终i_block[15]9.6 15 级块指针模型Ext 文件系统核心i_block[15]是 inode 最核心的结构负责定位文件所有数据块12个直接块指针直接指向数据块小文件直接访问速度最快1个一级间接块指针指向间接块表间接表存储数据块指针1个二级间接块指针二级跳转支撑中大文件1个三级间接块指针三级跳转支撑超大文件。设计目的兼顾小文件访问速度同时支持超大文件存储。结语今天的内容到这里就结束了希望你能有所收获~干货整理到手抖觉得有用的话赏个三连回回血__(:ᗤ」ㄥ)_ _
延伸阅读

更多相关文章

2026/10/8 13:05:48

Unity内嵌浏览器ZFBrowser实战指南:数字孪生与网页交互

做数字孪生项目时我遇到一个很典型的需求:要在Unity场景里嵌入一个实时网页仪表盘,用户可以一边看3D设备状态,一边滚动查看网页上的数据图表。一开始我走的是UITexture加浏览器截图的野路子,结果延迟高、不能点击、页面一滚动就卡…

2026/10/8 14:00:56

网络协议栈底层原理:从CPU流水线到物理链路全解析

简介:本资源是一份面向计算机等级考试三级网络技术考生及网络基础学习者的系统性知识点精要总结,聚焦核心概念梳理与应试关键点提炼。内容覆盖计算机发展史、四大特性、性能指标(MIPS/MFLOPS、MTBF/MTTR、寻道/等待时间等)、软硬件…

2026/10/8 14:00:56

TortoiseGit连接被拒?从TCP握手到SSH配置的排查指南

用 TortoiseGit 拉代码或推代码的时候,弹出一个红色报错框:“Network error: Connection refused”。这个场景我见过太多次了,说真的,第一次遇到时我也懵过——感觉网络明明是通的,浏览器也能打开网页,怎么…

2026/10/8 14:00:56

FlashInfer 提交 PR 前的自审指南:从 diff 到可辩护的代码评审

大模型深度学习算子库后端高性能计算 【免费下载链接】flashinfer FlashInfer: Kernel Library for LLM Serving 项目地址: https://gitcode.com/gh_mirrors/fl/flashinfer 点击查看 免费下载 本篇指南面向 FlashInfer 内核库的贡献者与 AI 辅助开发流程&#xff0…

2026/10/8 14:00:56

AppCode停更背后:JetBrains生态、Rider与Xcode迁移指南

2024年下半年,JetBrains官方博客放出一则消息:停止开发并停止销售AppCode。对只写后端、Web的开发者来说,这个名字可能有点陌生,长期用IntelliJ IDEA的人也只是偶尔在官网产品列表里瞥到过它。但对Objective-C、Swift开发者来说&a…

2026/10/8 14:00:56

用COM ATL开发Windows任务栏右键菜单扩展

简介:这是一套面向Windows开发者的COM外壳扩展项目源码,基于ATL实现任务栏右键菜单自定义菜单项并显示图标。资源共30个文件,主要包含C/C源代码(.cpp/.h)、COM接口定义与注册脚本(.idl/.rgs/.def&#xff0…

2026/10/8 13:55:55

医药管理系统源码拆包:从class反编译到MySQL落库的完整链路

简介:这是一套基于Java Web技术栈的医药管理系统源码,面向计算机专业学生、课程设计开发者及需要练手SSM/JSP项目的初学者,可帮助快速搭建药品进销存管理场景。系统覆盖药品添加与查看、高级查询、库存管理、类别维护与统计、购买药品、销售管…

2026/10/8 10:03:18

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/8 10:03:20

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/8 6:05:44

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 0:02:17

自然数立方等于连续奇数之和:从证明到编程验证

十几年来我一直游走在数学科普和编程教学这两块内容之间,对“看起来像魔法、拆开全是数学”的结论总是格外敏感。最近翻资料时又撞见一句话:任何一个自然数 m 的立方,都可以写成 m 个连续奇数之和。2 的立方等于 3 加 5,3 的立方等…

2026/10/8 0:02:17

C#上位机SSH连接实战:用SSH.NET补齐超时、批量与密钥认证

简介:这是一份基于 C# 开发的 SSH 连接功能半成品工程,原本作为另一个主项目的子功能模块,现独立打包分享。工程采用 WinForms 界面,包含源码、解决方案、安装部署工程、NuGet 依赖包及说明文档,适合正在做远程连接、网…

2026/10/8 0:02:17

Java SpringBoot一体化智能售后系统设计与实现全解析

毕业设计年年做,Java Web 方向的题目翻来覆去就那么几个,但“一体化智能售后系统”这个题,每次看到我都觉得值得认真聊一聊。它不是一个简单 curd 堆出来的管理系统,而是把客户、工单、派单、处理、回访、统计整条链路串起来的一套…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑