Ext4 Design
From Ext4
(Difference between revisions)
Line 1: | Line 1: | ||
− | ''' | + | '''Design for ext4''' <br> |
− | * Ext3: default filesystem for many users, reputation of dependability & compatibility | + | * Ext3: default filesystem for many users, reputation of dependability & compatibility, leave existing ext3 users undisturbed, stable |
− | * Scaling up to support large filesystems: Storage advancements, Increasing data storage requirements | + | * Scaling up to support large filesystems: Storage advancements, Increasing data storage requirements, only large filesystem users move to ext4 |
* Features requiring on-disk format change: nanosec timestamps, fast EA, preallocation | * Features requiring on-disk format change: nanosec timestamps, fast EA, preallocation | ||
− | * Reliability wrt on-disk corruption | + | * Reliability wrt on-disk corruption |
+ | * 64 bit JBD split | ||
+ | * Forward compatibility/upgradeability | ||
'''On-Disk Structures''' <br> | '''On-Disk Structures''' <br> |
Revision as of 17:03, 1 April 2008
Design for ext4
- Ext3: default filesystem for many users, reputation of dependability & compatibility, leave existing ext3 users undisturbed, stable
- Scaling up to support large filesystems: Storage advancements, Increasing data storage requirements, only large filesystem users move to ext4
- Features requiring on-disk format change: nanosec timestamps, fast EA, preallocation
- Reliability wrt on-disk corruption
- 64 bit JBD split
- Forward compatibility/upgradeability
On-Disk Structures
/* * This is the extent on-disk structure. * It's used at the bottom of the tree. */ struct ext4_extent { __le32 ee_block; /* first logical block extent covers */ __le16 ee_len; /* number of blocks covered by extent */ __le16 ee_start_hi; /* high 16 bits of physical block */ __le32 ee_start_lo; /* low 32 bits of physical block */ }; /* * This is index on-disk structure. * It's used at all the levels except the bottom. */ 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; /* high 16 bits of physical block */ __u16 ei_unused; };