![Ayush Ranjan](/assets/img/avatar_default.png)
This commit aims to fix the following issues in ext4 documentation: - Flexible block group docs said that the aim was to group block metadata together instead of block group metadata. - The documentation consistly uses "location" instead of "block number". It is easy to confuse location to be an absolute offset on disk. Added a line to clarify all location values are in terms of block numbers. - Dirent2 docs said that the rec_len field is shortened instead of the name_len field. - Typo in bg_checksum description. - Inode size is 160 bytes now, and hence i_extra_isize is now 32. - Cluster size formula was incorrect, it did not include the +10 to s_log_cluster_size value. - Typo: there were two s_wtime_hi in the superblock struct. - Superblock struct was outdated, added the new fields which were part of s_reserved earlier. - Multiple mount protection seems to be implemented in fs/ext4/mmp.c. Signed-off-by: Ayush Ranjan <ayushr2@illinois.edu> Signed-off-by: Theodore Ts'o <tytso@mit.edu> Reviewed-by: Andreas Dilger <adilger@dilger.ca>
145 lines
3 KiB
ReStructuredText
145 lines
3 KiB
ReStructuredText
.. SPDX-License-Identifier: GPL-2.0
|
|
|
|
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. The location
|
|
of structures is stored in terms of the block number the structure lives
|
|
in and not the absolute offset on disk.
|
|
|
|
For 32-bit filesystems, limits are as follows:
|
|
|
|
.. list-table::
|
|
:widths: 1 1 1 1 1
|
|
:header-rows: 1
|
|
|
|
* - Item
|
|
- 1KiB
|
|
- 2KiB
|
|
- 4KiB
|
|
- 64KiB
|
|
* - Blocks
|
|
- 2^32
|
|
- 2^32
|
|
- 2^32
|
|
- 2^32
|
|
* - Inodes
|
|
- 2^32
|
|
- 2^32
|
|
- 2^32
|
|
- 2^32
|
|
* - File System Size
|
|
- 4TiB
|
|
- 8TiB
|
|
- 16TiB
|
|
- 256PiB
|
|
* - Blocks Per Block Group
|
|
- 8,192
|
|
- 16,384
|
|
- 32,768
|
|
- 524,288
|
|
* - Inodes Per Block Group
|
|
- 8,192
|
|
- 16,384
|
|
- 32,768
|
|
- 524,288
|
|
* - Block Group Size
|
|
- 8MiB
|
|
- 32MiB
|
|
- 128MiB
|
|
- 32GiB
|
|
* - Blocks Per File, Extents
|
|
- 2^32
|
|
- 2^32
|
|
- 2^32
|
|
- 2^32
|
|
* - Blocks Per File, Block Maps
|
|
- 16,843,020
|
|
- 134,480,396
|
|
- 1,074,791,436
|
|
- 4,398,314,962,956 (really 2^32 due to field size limitations)
|
|
* - File Size, Extents
|
|
- 4TiB
|
|
- 8TiB
|
|
- 16TiB
|
|
- 256TiB
|
|
* - File Size, Block Maps
|
|
- 16GiB
|
|
- 256GiB
|
|
- 4TiB
|
|
- 256TiB
|
|
|
|
For 64-bit filesystems, limits are as follows:
|
|
|
|
.. list-table::
|
|
:widths: 1 1 1 1 1
|
|
:header-rows: 1
|
|
|
|
* - Item
|
|
- 1KiB
|
|
- 2KiB
|
|
- 4KiB
|
|
- 64KiB
|
|
* - Blocks
|
|
- 2^64
|
|
- 2^64
|
|
- 2^64
|
|
- 2^64
|
|
* - Inodes
|
|
- 2^32
|
|
- 2^32
|
|
- 2^32
|
|
- 2^32
|
|
* - File System Size
|
|
- 16ZiB
|
|
- 32ZiB
|
|
- 64ZiB
|
|
- 1YiB
|
|
* - Blocks Per Block Group
|
|
- 8,192
|
|
- 16,384
|
|
- 32,768
|
|
- 524,288
|
|
* - Inodes Per Block Group
|
|
- 8,192
|
|
- 16,384
|
|
- 32,768
|
|
- 524,288
|
|
* - Block Group Size
|
|
- 8MiB
|
|
- 32MiB
|
|
- 128MiB
|
|
- 32GiB
|
|
* - Blocks Per File, Extents
|
|
- 2^32
|
|
- 2^32
|
|
- 2^32
|
|
- 2^32
|
|
* - Blocks Per File, Block Maps
|
|
- 16,843,020
|
|
- 134,480,396
|
|
- 1,074,791,436
|
|
- 4,398,314,962,956 (really 2^32 due to field size limitations)
|
|
* - File Size, Extents
|
|
- 4TiB
|
|
- 8TiB
|
|
- 16TiB
|
|
- 256TiB
|
|
* - File Size, Block Maps
|
|
- 16GiB
|
|
- 256GiB
|
|
- 4TiB
|
|
- 256TiB
|
|
|
|
Note: Files not using extents (i.e. files using block maps) must be
|
|
placed within the first 2^32 blocks of a filesystem. Files with extents
|
|
must be placed within the first 2^48 blocks of a filesystem. It's not
|
|
clear what happens with larger filesystems.
|