首先,我们来了解Linux文件系统的一个核心基础概念。
Ext(Linux extended file system,即Linux扩展文件系统)并非单一组件,而是一个家族系列——Ext2、Ext3、Ext4 均属其升级版本。Ext2 为第二代扩展文件系统,Ext3 和 Ext4 在其基础上增添了日志功能,且彼此向下兼容。因此,行业内常将 Ext2 称为“索引式文件系统”,而 Ext3/Ext4 则归为“日志式文件系统”。
当然,Linux所支持的文件系统远不止这些,还包括网络文件系统(NFS)以及Windows的FAT系列等。若想查看当前系统支持哪些文件系统,只需执行 ls -l /lib/modules/$(uname -r)/kernel/fs 命令即可。

若要了解哪些文件系统已加载到内存中,可以使用 cat /proc/filesystems 命令查看,一目了然。

核心设计解析
数据区
数据区中的元素相对固定,磁盘格式化完成后便不再变动。具体包含以下几个关键组成部分:
1. inode(索引节点)
每个文件都拥有唯一的inode,其中记录了文件的权限、属性以及实际数据所在的block号码。可以将其理解为“文档索引”,通过该编号就能定位文件的所有信息。
2. block(数据区块)
block是实际存储文件内容的区域,也称为data block。每个block都有唯一编号。Ext2支持的block大小仅有1KB、2KB、4KB三种。值得注意的是,为便于inode管理,磁盘格式化后block大小即固定不变。每个block仅能存放一个文件的数据:若文件过大,则占用多个block;若文件过小,block剩余空间则被浪费。因此,在分区格式化前,最好预先评估文件系统的预期使用情况。
中介数据(Metadata)
这些元素旨在维护文件系统的运行状态,主要由动态配置信息构成,属于描述性数据。
1. superblock(超级块)
superblock记录了文件系统的全局信息,包括inode和block的总量、已用量、剩余量、大小,以及文件系统的格式等相关元数据。其大小通常为1024字节。一旦superblock损坏,恢复过程将十分复杂。
2. block group(区块群组)
设想磁盘容量达数百GB,格式化后inode和block的数量将极其庞大。为高效管理,Ext文件系统引入了“区块群组”(block group)概念。每个群组拥有独立的inode、block和superblock,相当于将大文件系统划分为多个小单元。
此处有个细节:superblock对文件系统至关重要,但系统中仅有一个主superblock。为避免单点故障,除第一个block group外,后续的block group通常都会保留一份superblock备份。
3. block bitmap(区块对照表)
每个block只能被一个文件占用。当新增文件时,需要找到空闲block来存储数据。如何快速获知哪些block可用?答案就是block bitmap(区块对照表)。它记录了所有block的使用状态,标记为已用或未用。删除文件时,系统同样会定位到对应block号码,将其标志更新为“未使用”,然后释放该block。
inode bitmap(inode 对照表)
其设计理念与block bitmap相同,区别在于它记录的是inode号码的使用情况,此处不再赘述。
group descriptor(群组描述符)
group descriptor用于描述每个区块群组的起始和结束block号码,并说明每个群组中inode bitmap、block bitmap、inode table所处的block范围。
如果想查看系统中所有已格式化的设备,执行 blkid 命令即可。

若要进一步查看某个已格式化设备的具体文件系统信息,可使用 dumpe2fs /dev/vda1 命令查看完整详情。


请注意上面输出中的Magic签名:0xEF53——这是识别ext2/ext3文件系统的重要标记,类似于通过文件头部的Magic数字判断文件类型。
总结
Ext文件系统家族是Linux支持最广泛、最完善的文件系统之一。格式化完成后,系统即已完成inode、block、metadata的规划,无需动态配置,这是其最大优势。然而,这也成为其短板:磁盘容量越大,格式化耗时越长。正因如此,从CentOS 7.x开始,默认文件系统已更换为XFS,这并非偶然。
