对任何计算机系统来说,数据都是非常重要的资产,计算机中的数据通常是以文件的形式保存在磁盘上的。对大多数的计算机用户来说,通常只需要关心文件呈现出来的组织方式,而不需要关心它们在磁盘上保存和管理的技术细节。但是对某些特殊应用的开发人员来说,仅仅了解到这种程度是远远不够的,还需要对数据在磁盘上的组织方式的细节有更深入地理解,有时甚至还需要针对特定的应用场景设计自己的文件系统。
本节课我们就以历史悠久而又应用广泛的 Ext 文件系统为例,深入到它底层的数据结构细节,来看看它是如何组织和使用磁盘的存储空间的。通过对它的理解,希望读者可以对文件系统的设计方法和实现思路有基本的理解和认识,主要包括以下几方面内容:
- Ext 文件系统概述
- Ext2 文件系统的总体结构
- 每个块组中存储块数量的确定
- 超级块与组描述符
- 数据位图与索引位图
- 索引节点
- 日志功能
8.1 Ext 文件系统概述
Linux 上最早的比较成熟的文件系统是 1994 年引入的 Ext2,它比其前代 Ext 文件系统更加高效和稳定,从而得到了广泛的使用。再到后来,增加了日志操作支持的 Ext3 文件系统,把异常状态下文件系统的一致性检查恢复时间从数小时减少到数十秒,从而使其变得更加实用。
目前,大多数主流 Linux 发行版采用的 Ext4 文件系统,是对 Ext2 和 Ext3 的进一步改进,提供了更大容量的支持,更大的单个文件的支持,提高了大文件操作的效率,以及其他一些扩展性和性能方面的改进。但是其基础仍然是 Ext2 和 Ext3,所以