[ext4]磁盘布局 - inode bitmap & table

在[磁盘布局 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。

 

转载于:https://www.cnblogs.com/youngerchina/p/5624479.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ext4文件系统的Inode结构体定义在内核源代码中的`include/linux/ext4_fs.h`文件中。 其结构体定义如下: ``` struct ext4_inode { __le16 i_mode; /* File mode */ __le16 i_uid; /* Low 16 bits of Owner Uid */ __le32 i_size_lo; /* Size in bytes */ __le32 i_atime; /* Access time */ __le32 i_ctime; /* Creation time */ __le32 i_mtime; /* Modification time */ __le32 i_dtime; /* Deletion Time */ __le16 i_gid; /* Low 16 bits of Group Id */ __le16 i_links_count; /* Links count */ __le32 i_blocks_lo; /* Blocks count */ __le32 i_flags; /* File flags */ union { struct { __le32 l_i_version; } linux1; struct { __u32 h_i_translator; } hurd1; struct { __u32 m_i_reserved1; } masix1; } osd1; /* OS dependent 1 */ __le32 i_block[EXT4_N_BLOCKS];/* Pointers to blocks */ __le32 i_generation; /* File version (for NFS) */ __le32 i_file_acl_lo; /* File ACL */ __le32 i_size_high; __le32 i_obso_faddr; /* Obsoleted fragment address */ union { struct { __le16 l_i_blocks_high; /* were l_i_reserved1 */ __le16 l_i_file_acl_high; __le16 l_i_uid_high; /* these 2 fields */ __le16 l_i_gid_high; /* were reserved2[0] */ __le16 l_i_checksum_lo;/* crc32c(uuid+inum+inode) LE */ __le16 l_i_reserved; } linux2; struct { __le16 h_i_reserved1; /* Obsoleted fragment number/size which are removed in ext4 */ __u16 h_i_mode_high; __u16 h_i_uid_high; __u16 h_i_gid_high; __u32 h_i_author; } hurd2; struct { __le16 h_i_reserved1; /* Obsoleted fragment number/size which are removed in ext4 */ __u16 m_i_file_acl_high; __u32 m_i_reserved2[1]; } masix2; } osd2; /* OS dependent 2 */ }; ``` 可以看到,`ext4_inode`结构体包含了文件的基本属性信息,如文件大小、文件类型、访问、修改和创建时间、文件所属用户和组、文件权限等。此外,还包含了指向文件内容的指针、文件所在的磁盘块号、文件版本号、文件ACL等信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值