Btrfs关键代码解析.docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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;__

文档评论(0)

gangshou + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档