Basic functions of each component (block) of the ext4 filesystem
are:
Superblock, contains information about the file system. It is
one block and the first block.
Group Descriptors or Group Descriptors Table or Block Group
Descriptors or Block Group Descriptors Table), contains the
location of where the Data Block Bitmap, inode Bitmap and inode
Table are in a Block Group. So there are as many Group Descriptors
as number of Block Groups. Depending on the number of Block Groups,
it is one or more blocks. It always follows the Superblock.
Reserved Group Descriptor Table (GDT) Blocks. When you first
create the file system, these blocks are reserved for future
expansion of the file system, since ext4 file system can be
enlarged later. Future expansion means more Blocks and Block
Groups, so there will be a need for more Group Descriptors. It is
zero or more blocks and always follows the Group Descriptors.
resize_inode filesystem feature indicates there are reserved blocks
for filesystem expansion.
Data Block Bitmap, indicates which data blocks are in use. It
is one block. Its location is not fixed, it is indicated in the
Group Descriptor.
inode Bitmap, indicates which entries in inode table are in
use. It is one block. Its location is not fixed, it is indicated in
the Group Descriptor.
inode Table, contains inodes (inode structures). Inode is
basically a data structure for every file and directory. It is one
or typically more blocks. Its location is not fixed, it is
indicated in the Group Descriptor.
Data blocks, keep the actual contents of the files. It is one
or typically more blocks. It is basically all other blocks in a
Block Group.