Linux文件系统
目录
一、磁盘物理结构与存储原理
机械硬盘的物理构造
1、核心物理部件
2、存储结构划分
3、辅助组件
4、磁盘存储结构
5、如何在多块磁片中,定位到一块扇区呢?
二、磁盘的逻辑存储结构
三.理解文件系统
1如何管理磁盘
文件系统块组核心结构
1. 元数据管理层
2. 资源状态位图
3. 块组描述体系
inode的理解
查找:
删除:
关于文件名和文件系统:
一、磁盘物理结构与存储原理
机械硬盘的物理构造
1、核心物理部件
-
盘片(Platter)
- 由铝或玻璃制成,表面覆盖磁性材料用于数据存储13
- 单个硬盘通常包含多个平行盘片,每个盘片两面均可存储数据26
-
磁头(Head)
- 安装在悬臂(Actuator Arm)末端,负责读写数据15
- 每个盘面配备独立磁头,通过悬浮在盘片表面极小距离(非接触)进行操作35
-
悬臂与主轴
- 悬臂通过控制器驱动,使磁头在盘片半径方向移动以定位磁道15
- 主轴带动盘片高速旋转,转速(RPM)直接影响数据访问速度58
2、存储结构划分
-
磁道(Track)
- 盘面上的同心圆环,同一盘片磁道从外向圆心编号13
- 早期设计内侧磁道密度更高,现代技术(如ZDR)通过外圈扇区数量优化存储利用率4
-
扇区(Sector)
- 磁道的最小存储单元,通常为512字节或4KB大小23
- 相邻扇区间存在间隙(Inter-Sector Gap),用于物理分隔数据区域3
-
柱面(Cylinder)
- 所有盘片相同半径磁道形成的圆柱体,通过柱面编号实现高效寻址23
3、辅助组件
- 驱动器控制器:控制磁头移动、盘片旋转及数据传输57
- 缓存(Cache):临时存储频繁访问数据,减少物理读写延迟1
存储容量公式:磁头数 × 柱面数 × 每磁道扇区数 × 扇区字节数
每个盘面对应一个磁头。所有的磁头都是连在同一个磁臂上的,因此所有磁头只能“共退”。
所有盘面中相对位置相同的磁道组成
柱面
。如上图,柱面的存在使得更为方便的找到每一块扇区。
技术演进:尽管SSD在消费级市场普及,但企业级存储仍依赖HDD:
- 成本优势:单位存储成本仅为SSD的1/5-1/3
- 容量优势:2025年单盘容量可达30TB+
- 可靠性优势:SSD存在P/E循环寿命限制,HDD更适合高并发场景
磁盘是由很多盘片叠加在一起的。 一个盘片有两个盘面,每个盘面都可以读取数据,每个盘面都有磁头,盘片数=磁头数=盘面数*2
4、磁盘存储结构
存储单元通过三级物理坐标定位67:
- 柱面(Cylinder):所有盘面同半径磁道构成的虚拟圆柱
- 磁头(Head):指定具体盘面(编号0开始)
- 扇区(Sector):磁道的最小存储单元(固定512字节)
5、如何在多块磁片中,定位到一块扇区呢?
先定位在哪一个磁盘(cylinder),也就是柱面(Track),再定位在哪一个盘面(head),最后定位扇区(sector)。我们可以定位任何一个扇区,也就可以定位任意多个扇区
磁盘中定义一个扇区,采用硬件的方式:CHS定位法。
二、磁盘的逻辑存储结构
上面是过去常见的磁带,磁带的存储就是里面的长长的磁带,而磁盘的存储结构与磁带的存储结构类似,磁盘物理上是一种圆形结构,我们可以理解成线性结构!
映射到磁盘中,可以将其看成一个三维数组
为什么OS要对存储结构做逻辑抽象呢?直接用CHS不可以吗?
- 便于管理。
- 不想让代码和硬件强耦合。
三.理解文件系统
1如何管理磁盘
我们可以采用分组的方法进行管理
将一个磁盘化为一个个分区,在将分区化为一个个分组,每个分组进行管理
文件=内容+属性,Linux下的内容和属性是分批存储的,但是一个未打开的文件的内容和属性信息都存储在哪里呢?
文件系统块组核心结构
1. 元数据管理层
Inode Table(索引节点表)
- 全量存储块组内所有索引节点资源池
- 包含已分配(存储文件元数据)与未分配(空闲资源)的inode实体
- 每个inode通过唯一ID标识,包含文件属性及数据块映射关系
Data Blocks(数据块池)
- 集中管理块组内所有数据存储单元
- 存储内容类型:
常规文件内容(文本/二进制数据流)
目录结构(文件名-inode映射表)
扩展属性(ACL、加密信息等)2. 资源状态位图
Inode Bitmap(索引节点位图)
- 二进制状态映射器,位长度与Inode Table容量严格对应
- 比特位逻辑:
1
- 对应序号的inode已被占用
0
- 对应序号的inode处于空闲状态- 实现O(1)时间复杂度快速检索空闲inode
Block Bitmap(数据块位图)
- 数据块资源分配状态的全景视图
- 比特位映射规则:
1
- 对应物理位置的数据块已写入数据
0
- 对应数据块处于可分配状态- 采用位操作加速空间回收与分配
3. 块组描述体系
Group Descriptor Table(块组描述符表)
- 块组级元数据中心仓库,核心字段包含:
数据块总量/已用量(Block Bitmap维度)
inode总量/已用量(Inode Bitmap维度)
块组内关键结构物理偏移量(如位图起始位置)
块组状态标记(是否包含超级块副本等)Super Block(超级块)
文件系统全局控制中枢
inode的理解
文件属性存储在Inode中,Inode是固定大小,一个人文件,一个Inode。一个文件的所有属性几乎都存储在Inode中,但是文件名并不存储在Inode中。
文件的内容存储在data block数据块中,数据块随着应用类型的变化,大小也会发生变化。
关于Inode属性集合由于每个文件都有Inode,为了区分彼此,每个Inode都有自己的编号。编号是以组为单位进行编的
查找:
查找一个文件,要通过Inode编号。
- 通过inode bitmap 查找对应的比特位的位置是1还是0
- 如果这个编号被占用,在inode Table找到这个Inode,然后确定一下是否是我们要查找的文件。
删除:
只要将这个文件的Inode编号对应的比特位由1置为0就可以了。然后将block bitmap由1置为0就可以了。这里并没有直接删除数据块,所以Linux下删除是可以恢复的。
关于文件名和文件系统:
inode中不存在文件名,只有inode,而计算机中也只要有inode就可以对文件进行操作,而文件名只是方便我们用户使用的,目录文件的内容就是编号和文件名之间的映射关系。记录文件名是目录的事情。
--------------------------------------------------------------------------------------------------------------------------------
本篇讲解到此结束