在[磁盘布局 group部分]已经介绍过ext4的整体布局,其中存在两个与inode有关的名称:inode bitmap和inode table。
Inode bitmap,用于表示inode table中对应的inode entry是否已经使用。Bitmap中每个位对应于一个table中inode entry。一个group中Inodebitmap只占用一个block,并且block所有的空间均用于标识inode的使用情况。
Inode table至少存放sb.s_inode_size* sb.s_inodes_per_group bytes大小。Table中的entries仅用来存放ext4_inode,每个entry大小为256 bytes。Inode所在的block Number可以通过下面的计算公式获得
(inode_number - 1) /sb.s_inodes_per_group
Inode在group table中的offset:
(inode_number -1) % sb.s_inodes_per_group
Ext4_inode的磁盘布局:
参见地址:https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Inode_Table
其中ext4_inode中的i_block值得我们仔细分析:
如果是非inlinedata inode,那么在i_block中将存放ext4_extent_header结构体数据(大小为12bytes),另外还有4个entry,用于索引extent tree。