Each blocks group contains one special block which is actually a map of the
entire blocks in the group, with respect to their allocation status. Each
bit in the block bitmap indicated whether a specific block in the
group is used or free.
The format is actually quite simple - Just view the entire block as a series of bits. For example,
Suppose the block size is 1024 bytes. As such, there is a place for
1024*8=8192 blocks in a group block. This number is one of the fields in the
filesystem's superblock, which will be explained later.
A value of "1" in the appropriate bit signals that the block is
allocated, while a value of "0" signals that the block is
unallocated.
You will probably notice that typically, all the bits in a byte contain the
same value, making the byte's value 0 or 0ffh. This is done by
the kernel on purpose in order to group related data in physically close
blocks, since the physical device is usually optimized to handle such a close
relationship.