You use indirect block pointers, instead of pointing at blocks of data. You point at blocks that point to the blocks. Basically lists of lists.
The first layer of this is called single indirect block pointers, the lists of lists. Then we go to double indirect block pointers. Lists of lists of lists. Then down to triple indirect block pointers, lists of lists of lists of lists.
On a EXT based system, the short answer is the information is stored in the Inode Table.
That really does not mean much if you don’t have understanding of what the filesystem looks like.
A little explanation is needed.
The first section of the filesystem is going to contain the Super Block (block 1), there could be boot code in front of that (Unused). The Super block contains information about the file system, such as block sizes, total number of inodes and the volume name to list a few.
Following the Super Block is the Group Descriptor Tables, this is what we need. This will have a backup of the Super Block, and contains the Block Bitmap, Inode Bitmap and group descriptor data structure for every block in group in the filesystem. These are the basic structures we need to locate information on the disk.]]>