没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Ext4 Disk Layout
From Ext4
is document aempts to describe the on-disk format for ext4 filesystems. e same general
ideas should apply to ext2/3 filesystems as well, though they do not support all the features that
ext4 supports, and the fields will be shorter.
NOTE: is is a work in progress, based on notes that the author (djwong) made while picking
apart a filesystem by hand. e data structure definitions were pulled out of Linux 3.11 and
e2fsprogs-1.42.8. He welcomes all comments and corrections, since there is undoubtedly plenty
of lore that doesn't necessarily show up on freshly created demonstration filesystems.
Contents
1 Terminology
2 Overview
2.1 Blocks
2.2 Layout
2.3 Flexible Block Groups
2.4 Meta Block Groups
2.5 Lazy Block Group Initialization
2.6 Special inodes
2.7 Block and Inode Allocation Policy
2.8 Checksums
2.9 Bigalloc
2.10 Inline Data
2.10.1 Inline Directories
3 e Super Block
4 Block Group Descriptors
5 Block and inode Bitmaps
6 Inode Table
6.1 Finding an Inode
6.2 Inode Size
6.3 Inode Timestamps
7 e Contents of inode.i_block
7.1 Symbolic Links
Ext4 Disk Layout - Ext4 hps://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout
1 of 43 10/21/2013 10:43 PM
7.2 Direct/Indirect Block Addressing
7.3 Extent Tree
7.4 Inline Data
8 Directory Entries
8.1 Linear (Classic) Directories
8.2 Hash Tree Directories
9 Extended Aributes
9.1 POSIX ACLs
10 Multiple Mount Protection
11 Journal (jbd2)
11.1 Layout
11.2 Block Header
11.3 Super Block
11.4 Descriptor Block
11.5 Data Block
11.6 Revocation Block
11.7 Commit Block
12 Areas in Need of Work
13 Other References
Terminology
ext4 divides a storage device into an array of logical blocks both to reduce bookkeeping
overhead and to increase throughput by forcing larger transfer sizes. Generally, the block size
will be 4KiB (the same size as pages on x86 and the block layer's default block size), though the
actual size is calculated as 2 ^ (10 + sb.s_log_block_size) bytes. roughout this
document, disk locations are given in terms of these logical blocks, not raw LBAs, and not
1024-byte blocks. For the sake of convenience, the logical block size will be referred to as
$block_size throughout the rest of the document.
When referenced in preformatted text blocks, sb refers to fields in the super block, and
inode refers to fields in an inode table entry.
Overview
An ext4 file system is split into a series of block groups. To reduce performance difficulties due
to fragmentation, the block allocator tries very hard to keep each file's blocks within the same
group, thereby reducing seek times. e size of a block group is specified in
Ext4 Disk Layout - Ext4 hps://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout
2 of 43 10/21/2013 10:43 PM
sb.s_blocks_per_group blocks, though it can also calculated as 8 *
block_size_in_bytes. With the default block size of 4KiB, each group will contain 32,768
blocks, for a length of 128MiB. e number of block groups is the size of the device divided by
the size of a block group.
All fields in ext4 are wrien to disk in lile-endian order. HOWEVER, all fields in jbd2 (the
journal) are wrien to disk in big-endian order.
Blocks
ext4 allocates storage space in units of "blocks". A block is a group of sectors between 1KiB and
64KiB, and the number of sectors must be an integral power of 2. Blocks are in turn grouped
into larger units called block groups. Block size is specified at mkfs time and typically is 4KiB.
You may experience mounting problems if block size is greater than page size (i.e. 64KiB blocks
on a i386 which only has 4KiB memory pages). By default a filesystem can contain 2^32 blocks;
if the '64bit' feature is enabled, then a filesystem can have 2^64 blocks.
File System Maximums
32-bit mode 64-bit mode
Item 1KiB 2KiB 4KiB 64KiB 1KiB 2KiB 4KiB
Blocks 2^32 2^32 2^32 2^32 2^64 2^64 2^64
Inodes 2^32 2^32 2^32 2^32 2^32 2^32 2^32
File
System
Size
4TiB 8TiB 16TiB 256PiB 16ZiB 32ZiB 64ZiB
Blocks
Per
Block
Group
8,192 16,384 32,768 524,288 8,192 16,384 32,768
Inodes
Per
Block
Group
8,192 16,384 32,768 524,288 8,192 16,384 32,768
Block
Group
Size
8MiB 32MiB 128MiB 32GiB 8MiB 32MiB 128MiB
Blocks
Per
2^32 2^32 2^32 2^32 2^32 2^32 2^32
Ext4 Disk Layout - Ext4 hps://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout
3 of 43 10/21/2013 10:43 PM
File,
Extents
Blocks
Per
File,
Block
Maps
16,843,020 134,480,396 1,074,791,436 4,398,314,962,956 16,843,020 134,480,396 1,074,791,436
File
Size,
Extents
4TiB 8TiB 16TiB 256TiB 4TiB 8TiB 16TiB
File
Size,
Block
Maps
16GiB 256GiB 4TiB 256PiB 16GiB 256GiB 4TiB
Note: Files not using extents (i.e. files using block maps) must be placed in the first 2^32 blocks
of a filesystem.
Layout
e layout of a standard block group is approximately as follows (each of these fields is
discussed in a separate section below):
Group 0
Padding
ext4
Super
Block
Group
Descriptors
Reserved
GDT Blocks
Data Block
Bitmap
inode
Bitmap
inode
Table
Data
Blocks
1024 bytes 1 block many blocks many blocks 1 block 1 block
many
blocks
many
more
blocks
For the special case of block group 0, the first 1024 bytes are unused, to allow for the installation
of x86 boot sectors and other oddities. e superblock will start at offset 1024 bytes, whichever
block that happens to be (usually 0). However, if for some reason the block size = 1024, then
block 0 is marked in use and the superblock goes in block 1. For all other block groups, there is
no padding.
e ext4 driver primarily works with the superblock and the group descriptors that are found in
block group 0. Redundant copies of the superblock and group descriptors are wrien to some of
the block groups across the disk in case the beginning of the disk gets trashed, though not all
Ext4 Disk Layout - Ext4 hps://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout
4 of 43 10/21/2013 10:43 PM
block groups necessarily host a redundant copy (see following paragraph for more details). If
the group does not have a redundant copy, the block group begins with the data block bitmap.
Note also that when the filesystem is freshly formaed, mkfs will allocate "reserve GDT block"
space aer the block group descriptors and before the start of the block bitmaps to allow for
future expansion of the filesystem. By default, a filesystem is allowed to increase in size by a
factor of 1024x over the original filesystem size.
e location of the inode table is given by grp.bg_inode_table_*. It is continuous range of
blocks large enough to contain sb.s_inodes_per_group * sb.s_inode_size bytes.
As for the ordering of items in a block group, it is generally established that the super block and
the group descriptor table, if present, will be at the beginning of the block group. e bitmaps
and the inode table can be anywhere, and it is quite possible for the bitmaps to come aer the
inode table, or for both to be in different groups (flex_bg). Leover space is used for file data
blocks, indirect block maps, extent tree blocks, and extended aributes.
Flexible Block Groups
Starting in ext4, there is a new feature called flexible block groups (flex_bg). In a flex_bg, several
block groups are tied together as one logical block group; the bitmap spaces and the inode table
space in the first block group of the flex_bg are expanded to include the bitmaps and inode
tables of all other block groups in the flex_bg. For example, if the flex_bg size is 4, then group 0
will contain (in order) the superblock, group descriptors, data block bitmaps for groups 0-3,
inode bitmaps for groups 0-3, inode tables for groups 0-3, and the remaining space in group 0 is
for file data. e effect of this is to group the block metadata close together for faster loading,
and to enable large files to be continuous on disk. Backup copies of the superblock and group
descriptors are always at the beginning of block groups, even if flex_bg is enabled. e number
of block groups that make up a flex_bg is given by 2 ^ sb.s_log_groups_per_flex.
Meta Block Groups
Without the option META_BG, for safety concerns, all block group descriptors copies are kept
in the first block group. Given the default 128MiB(2^27 bytes) block group size and 64-byte
group descriptors, ext4 can have at most 2^27/64 = 2^21 block groups. is limits the entire
filesystem size to 2^21 ∗ 2^27 = 2^48bytes or 256TiB.
e solution to this problem is to use the metablock group feature (META_BG), which is already
in ext3 for all 2.6 releases. With the META_BG feature, ext4 filesystems are partitioned into
many metablock groups. Each metablock group is a cluster of block groups whose group
descriptor structures can be stored in a single disk block. For ext4 filesystems with 4 KB block
size, a single metablock group partition includes 64 block groups, or 8 GiB of disk space. e
metablock group feature moves the location of the group descriptors from the congested first
Ext4 Disk Layout - Ext4 hps://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout
5 of 43 10/21/2013 10:43 PM
剩余42页未读,继续阅读
资源评论
风去沙来
- 粉丝: 189
- 资源: 18
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功