Ext2与Ext3文件系统及进程通信机制详解
1. Ext2磁盘数据结构
在Ext2分区中,第一个块通常不被Ext2文件系统管理,它被预留作为分区引导扇区。分区的其余部分被划分为块组(block groups),每个块组具有特定的布局。块组的引入有助于减少文件碎片化,因为内核会尽可能将属于同一文件的数据块存放在同一个块组中。
每个块组中的块包含以下几类信息:
- 文件系统超级块(superblock)的副本
- 块组描述符(block group descriptors)的副本
- 数据块位图(data block bitmap)
- inode位图(inode bitmap)
- inode表(inode table)
- 属于文件的数据块
如果一个块不包含任何有意义的信息,则被视为空闲块。虽然超级块和块组描述符在每个块组中都有副本,但内核仅使用块组0中的这两个结构,其余的保持不变。当e2fsck程序对文件系统进行一致性检查时,它会参考块组0中的超级块和块组描述符,并将其复制到其他块组。若块组0中的主超级块或主块组描述符损坏,系统管理员可指示e2fsck参考其他副本。
2. Ext2内存数据结构
为提高效率,当文件系统挂载时,Ext2分区磁盘数据结构中的大部分信息会被复制到RAM中,这样内核就能避免后续频繁的磁盘读取操作。一些基本操作会导致数据结构频繁变化,例如:
- 创建新文件时,Ext2超级块中的s_free_inodes_count字段和相应块组描述符中的bg_free_inodes_count