Linux 系统编程:Ext2 文件系统核心架构解析
一、文件系统的三大核心基础概念
在深入 Ext2 文件系统之前,我们必须先搞懂三个核心基础概念——块(Block)、分区(Partition)、inode(索引节点)。这三个概念就像盖房子的'砖块''地基'和'户型图',是理解 Ext2 架构的前提。
1.1 块(Block):文件存储的'最小单元'
我们知道,磁盘的最小物理存储单位是扇区(Sector),每个扇区固定为 512 字节。但如果操作系统每次都以扇区为单位读写数据,效率会非常低下——想象一下,拷贝一个 1GB 的文件,需要读写 200 多万个扇区,这对磁盘的机械结构(磁头移动、盘片旋转)是巨大的负担。
为了解决这个问题,文件系统引入了块(Block)的概念:将多个连续的扇区'打包'成一个更大的存储单元,这个单元就是块。块是文件系统中文件存取的最小单位,其大小在格式化时确定,一旦确定后不可修改,常见的块大小为 4KB(即 8 个连续扇区)。
1.1.1 块的核心特性
- 大小固定:格式化时指定(如 1KB、2KB、4KB、8KB),4KB 是最常用的选择,兼顾了小文件存储效率和大文件读写性能;
- 连续扇区组成:一个块由多个连续的扇区构成,例如 4KB 块 = 8 × 512 字节扇区;
- 地址可计算:每个块都有唯一的块号,块号与扇区的 LBA 地址可以相互转换(块号 = LBA 地址 ÷ 每块扇区数;LBA 地址 = 块号 × 每块扇区数 + 块内扇区偏移);
- 读写原子性:文件系统对块的读写是原子操作,要么完整读写一个块,要么失败,保证数据一致性。
1.1.2 实战:查看文件的块信息
在 Linux 系统中,我们可以通过 stat 命令查看文件的块相关信息。例如,查看一个名为 main.c 的文件:
stat main.c
命令输出示例:

关键信息解读:
Size: 488:文件实际大小为 488 字节;Blocks: 8:文件占用 8 个'磁盘块'(这里的'Blocks'是指文件系统的块,每个块 4KB,8 个块实际占用 32KB 空间);IO Block: 4096:文件系统的块大小为 4096 字节(4KB)。
为什么 488 字节的文件会占用 8 个块?因为文件系统是以块为单位分配存储空间的,即使文件大小不足一个块,也会占用一整个块(这就是'内部碎片'的来源)。

1.2 分区(Partition):磁盘的'逻辑割据'
一块物理磁盘的容量可能很大(如 1TB、2TB),如果将所有数据都存储在一个'大空间'里,会导致文件系统管理混乱、查找效率低下,同时也存在数据丢失的风险(一旦文件系统损坏,所有数据都可能丢失)。
为了解决这个问题,我们引入了**分区(Partition)**的概念:将物理磁盘划分为多个独立的'逻辑区域',每个分区可以单独格式化、单独管理,就像把一个大仓库分割成多个小房间,每个房间独立使用。






