- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Btrfs关键代码解析
第四章 Btrfs关键代码解析4.1 Tree of root tree介绍为了管理所有的树,btrfs 采用 Tree of tree root来保存所有树的根节点,(super_block-s_fs_info = tree_root(struct btrfs_root), tree_root- fs_info = fs_info(struct btrfs_fs_info)),也就是btrfs_fs_info结构,其定义为:fs/btrfs/ctree.h802 struct btrfs_fs_info {803 u8 fsid[BTRFS_FSID_SIZE];804 u8 chunk_tree_uuid[BTRFS_UUID_SIZE];805struct btrfs_root *extent_root;806struct btrfs_root *tree_root;807struct btrfs_root *chunk_root;808struct btrfs_root *dev_root;809struct btrfs_root *fs_root;810struct btrfs_root *csum_root;图 Tree of root tree超级块记录着一个分区的整体信息,Btrfs磁盘super_block结构用btrfs_super_block来描述。//磁盘中的super blocku8 csum[BTRFS_CSUM_SIZE];/* the first 4 fields must match struct btrfs_header */u8 fsid[BTRFS_FSID_SIZE]; /* FS specific uuid */__le64 bytenr; /* this block number */__le64 flags;/* allowed to be different from the btrfs_header from here own down */__le64 magic;__le64 generation;__le64 root; #root树的根节点位置__le64 chunk_root; #chunk树的根节点位置__le64 log_root; #log数的根节点位置FS Tree 管理文件相关的元数据,如 inode,dir等; Chunk tree管理设备,每一个磁盘设备都在Chunk Tree中有一个item;Extent Tree管理磁盘空间分配,btrfs每分配一段磁盘空间,便将该磁盘空间的信息插入到Extent tree。查询Extent Tree将得到空闲的磁盘空间信息;checksum Tree 保存数据块的校验和;Tree of tree root保存很多 BTree 的根节点。比如用户每建立一个快照,btrfs 便会创建一个FS Tree。4.2 Btrfs基本结构btrfs使用b+树数据结构,树的内部节点和页节点使用3种数据类型:btrfs_header, btrfs_disk_key, btrfs_item. 每个节点都是一个extent, 内部节点和页节点大小可以不一样. 每个节点都以btrfs_header开头,内部节点就是{key,value}数组,key是btrfs_disk_key, value就是指针,逻辑磁盘位置. 页节点同样包括相通的key,value,不过位置是key一块,value一块..而且key是btrfs_item。图 btrfs基本结构其中btrfs_header结构体为:u8 csum[32]; # extent的校验码u8 fsid[16]; #文件系统的uuid__le64 blocknr; #此节点的逻辑磁盘位置__le64 flags; #u8 chunk_tree_uid[16]; #chunk tree的uuid,可能是dev的uuid__le64 generation; #transaction id__le64 owner; # 节点有多个父节点__le32 nritems; #u8 level; # 在树中的层数,0表示leafbtrfs_disk_key结构体为:#对于不同的树结构,这3个成员有不同的意义,反正他们代表一个节点的key__le64 objectid;u8 type;__le64 offset;btrfs_item结构体为:#叶子节点使用的(key, item) item可能是具体的数据结构,可能是无结构数据..struct btrfs_disk_key key;__le32 offset;__
您可能关注的文档
最近下载
- TBIE 004—2023通孔回流焊接技术规范团标.pdf
- 国开《MySQL数据库应用》形考1-4(试题及答案).pdf VIP
- 煤矿安全生产作业规程操作规程安全技术措施编制审批贯彻及执行管理制度.doc
- 2020年光学膜行业研究报告.pdf
- 采血管种类和应用ppt课件.pptx VIP
- 职业生涯报告六篇.pdf VIP
- Unit 4 Plants arounds us PartA Let's talk(课件)人教PEP版(2024)英语三年级上册.pptx
- 七年级上册生物:必考问答式知识点汇总(背诵+默写).docx
- 《青纱帐——甘蔗林》课件【中职专用】高教版 基础模块下册.pptx
- 国家开放大学学位英语历年真题试卷号1909.docx
文档评论(0)