Ext4 Design
ext4的设计
- Ext3: 许多用户的默认文件系统,以可靠性和兼容性闻名,不影响现有的ext3用户,稳定的
- 向上扩展以支持更大的文件系统:存储的发展,增加的数据存储需求,只有需要大的文件系统的用户迁移到ext4
- 需要磁盘格式化的特性:纳秒级的时间戳,快速extent分配,预分配
- Reliability wrt on-disk corruption
- 64位的JBD分割
- 前向兼容性/可升级性
- 多块分配
- 延迟分配
- 1级配额支持(正在实现中)
- 大分配块(还没实现,正在设计阶段)
Ext4 Extents
Ext4文件系统的核心是对extents的支持。一个extent是文件中一些在逻辑上和底层块设备上相邻的块。同时期的文件系统尽了很大的努力去为文件分配连续的块去使得I/O操作更快,所以文件中的块在逻辑上是相邻的,在物理上也是相邻的。以extents存储文件的结构会很大程度压缩文件的元数据,因为一个单一的extent可以取代很多数量的块指针。元数据的减少也使得访问更快。
在磁盘上的数据结构
/*
* 这是extent在磁盘上的结构.
* 它用于树的底部.
*/
struct ext4_extent {
__le32 ee_block; /* 第一个逻辑块 extent 覆盖 */
__le16 ee_len; /* number of blocks covered by extent */
__le16 ee_start_hi; /* 物理块的高16位 */
__le32 ee_start_lo; /* 物理块的低32位 */
};
/*
* 这是索引在磁盘上的结构.
* 它用在所有的层次中除了底部.
*/
struct ext4_extent_idx {
__le32 ei_block; /* index covers logical blocks from 'block' */
__le32 ei_leaf_lo; /* pointer to the physical block of the next *
* level. leaf or next index could be there */
__le16 ei_leaf_hi; /* 物理块的高16位 */
__u16 ei_unused;
};