存储那些事儿(五):BTRFS文件系统之Btree结构详解

本文详细介绍了BTRFS文件系统中的Btree数据结构,包括其在存储不同数据类型中的作用,节点类型(非叶子节点与叶子节点)以及各自的数据结构。Btree的btrfs_header包含了节点的校验和、文件系统ID、层级和块计数,用于元数据验证。同时,文章探讨了generation和checksum在确保元数据正确性中的角色,以及inode和文件(小文件的inline storage和大文件的extent存储)在Btree中的组织方式。
摘要由CSDN通过智能技术生成

   Btree数据结构可以说是BTRFS文件系统的基础。它提供了一个通用的方式去存储不同的数据类型。它仅仅存储3个数据类型:key, item和block header。

   btrfs_header的定义如下:

struct btrfs_header {
    u8 csum[32];
    u8 fsid[16];
    __le64 blocknr;
    __le64 flags;

    u8 chunk_tree_uid[16];
    __le64 generation;
    __le64 owner;
    __le32 nritems;
    u8 level;
}
 btrfs_disk_key的定义如下:

struct btrfs_disk_key {
    __le64 objectid;
    u8 type;
    __le64 offset;
}
  btrfs_item的定义如下:

struct btrfs_item {
    struct btrfs_disk_key key;
    __le32 offset;
    __le32 size;
}

   对于b-tree的非叶子节点,它仅仅保存了[Key, block-pointer]。而叶子(Leaf)节点则保存了[item, data]。data的大小是不固定的。leaf在开始的地方保存了items的一个数组。而在结尾则以反方向保存了data的数组。这两个数组是向中间增长的。结构体btrfs_item.offset保存了data的偏移量,而btrfs_item.size则保存了data的大小。下面的图可以形象的说明

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值