1. 磁盘布局
Superblock(超级块):
位于文件系统的起始位置,保存文件系统的整体信息,如文件系统的大小、块大小、inode数量等。例如,在创建ext4文件系统时,超级块会记录文件系统的UUID、版本号、创建时间等信息。
为了提高可靠性,超级块会在多个区块组中备份,防止某个备份损坏导致整个文件系统无法恢复。
Group descriptors(组符):
每个区块组的信息,包括该组的inode数量、块数量、空闲块数量等。
Block bitmap(块位图):
用于记录每个数据块的使用情况,1表示已使用,0表示空闲。
Inode bitmap(索引节点位图):
记录每个inode的使用情况,1表示已使用,0表示空闲。
Inode table(索引节点表):
存储文件和目录的元数据,如文件的大小、权限、创建时间、修改时间等。每个文件或目录都有一个对应的inode。
Directory Entries(目录项):
存储文件名和对应的inode编号,用于在目录中查找文件。
2. 文件操作原理
文件创建:
当创建一个文件时,文件系统会在inode位图中找到一个空闲的inode,在块位图中找到足够的空闲块来存储文件数据。然后更新inode表、目录项等相关信息。
文件读取:
通过目录项找到文件的inode编号,然后从inode表中读取文件的元数据,根据元数据中的块指针找到文件的数据块。
文件删除:
将文件对应的inode位图和块位图中的相应位设置为空闲,删除目录项中的记录,但文件数据块中的数据不会立即清除,而是在后续的磁盘空间分配中被覆盖。
二、Linux ext4文件系统的性能特点
1. 支持大容量
ext4文件系统能够支持最大1 EB(1 exabyte)的文件系统大小,单个文件大小在Red Hat Enterprise Linux 7中最大可支持16 TB,文件系统最多支持50 TB。
2. 高性能
更快的文件操作:
包括更快的文件创建、删除和文件系统检查等操作。例如,在创建文件时,ext4的分配方式改进使得写入性能提高;删除文件时,ext4的extent特性可以快速删除大文件。
延迟分配:
写数据时不会马上分配磁盘空间,而是等待一段时间,允许合并和重新排序写操作,以获得更好的磁盘性能。但在小文件很多的情况下可能造成磁盘碎片增多。
多块分配:
一次性分配多个连续的数据块,减少了磁盘寻道时间,提高了大文件的读写性能。
持久预分配:
提前为文件预留磁盘空间,适用于需要连续磁盘空间的应用场景,如视频编辑等。
3. 可靠性增强
日志校验:
增加了更多的日志类型,如延迟分配日志、多块分配日志等,在系统崩溃后可以通过日志快速恢复文件系统的一致性。
支持在线文件系统检查和碎片整理:
可以在不卸载文件系统的情况下进行检查和碎片整理,提高了文件系统的可用性和性能。
4. 加密和压缩功能

ext4文件系统增加了文件系统级别的加密和压缩功能,提高了数据的安全性和存储效率。
三、Linux ext4文件系统的稳定性
ext4文件系统通过日志功能增强了可靠性和稳定性。日志记录了文件系统的操作,在系统崩溃或意外断电后,可以通过日志恢复文件系统的状态,减少数据丢失的风险。
四、Linux ext4文件系统的应用场景
对性能、可靠性和扩展性要求较高的场景:
如数据库服务器、邮件服务器、文件共享服务器等。这些场景需要处理大量的文件和目录,ext4的高性能和可靠性能够满足需求。
需要高度保护数据安全和存储效率的场景:
如金融、医疗、等领域。ext4的加密和压缩功能可以保护数据安全并提高存储效率。
需要在线文件系统检查和碎片整理的场景:
如云计算、虚拟化等环境。ext4支持在线操作,不会影响系统的正常运行。