btrfs连载(一) test目录代码走读之extent-buffer-test.c

概述:本文作为ceph-btrfs块存储系类的第一遍文章,没想有什么大的出息,只作为记录,而且的确很多的地方不明白希望找到志同道合者共同解疑,本系列的文章都会围绕ceph以及btrfs这两部分展开,首先从btrfs开始,对于btrfs的简要描述不在重复,只求共同弄明白btrfs这个基于btree为基础存储metadata而设计的filesystem的技术细节,并且如果有能力深入,弄明白基于btree的cow机制如何实现metadata的cow。

第一章,首先从btrfs的基础test目录开始,从这个test目录,我们可以很清楚地知道btrfs各个模块到底提供了那些主要的interface供其他模块使用,对于了解btrfs的软件层次以及各个层次的interface是有大帮助的,其次,通过这些主要的interface的测试用例也可以大致了解到这些模块实现的基本功能以及数据结构和设计思想。

本章首先展开讲述extent-buffer-test.c这个文件,这个c文件主要提供的interface测试为:

setup_items_for_insert

write_extent_buffer

read_extent_buffer

等;

针对这个extent_buffer测试首先我们得弄明白什么是extent_buffer。btrfs通过btree来管理各种元数据,比如inode、目录项,等。这些B+树的每一个节点(包括叶子节点和上层节点)都存储在一个单位的extent中。extent_buffer,即是extent在内存中的缓冲,它是btrfs文件系统磁盘空间管理的核心,每次要读取元数据或者要向磁盘写入元数据,则通常先先将数据读入extent_buffer或者向extent_buffe写入数据。

下图让我们看看extent数据的具体结构


详细内容请移步官方wikibtrfs.wiki.kernel.org/index.php/btrfs_design


因此,extent就是btree的管理单元,区分上层节点和叶子节点的区别,首先让我们看看整体的测试代码包含alloc write 以及read:

// please read follow explain, at here, path is the key words, path->nodes[BTRFS_MAX_LEVEL] means the btree structure in this

// code is 8 level deep btree, the longest read for an block's cost is 8 * 15ms, mostly, cost 10ms as metadata has already read into buffer cache.

// 这个setup item for insert 函数包含具体的对整个btree的操作,具体就是针对extent的item部分进行操作,extent节点如果非叶子节点item中只包含key和location对,
 // 如果是叶子节点extent就是包含item以及data的对应关系让我们来看看extent_buffer是如何构造的。

最重要的函数:

alloc_dummy_extent_buffer

setup_items_for_insert

write_extent_buffer

read_extent_buffer


// nodesize is the data size already exsit in node->pages

这其中最重要的应该算是setup_items_for_insert,接下来的分析我们将单独开一个页来讲解这个函数


"io.containerd.snapshotter.v1.btrfs必须是一个btrfs文件系统"是一个错误信息,提示容器运行时需要使用btrfs文件系统作为快照存储驱动程序。 btrfs(B-tree文件系统)是一种高级的Copy-on-Write (CoW)文件系统,旨在提供可靠性、性能和数据完整性。它支持快照(snapshot)、文件系统缩放和检验等高级功能。这个错误信息表明,容器运行时使用的快照存储驱动程序要求底层文件系统必须是btrfs。 要解决这个问题,可以按照以下步骤进行操作: 1. 首先确保你的系统支持btrfs文件系统。使用命令`sudo modprobe btrfs`来加载btrfs模块。 2. 确认你的文件系统是否为btrfs。使用命令`sudo blkid /dev/[your_device]`,将[your_device]替换为你的文件系统所在的设备。如果输出中包含`TYPE="btrfs"`,则表示你的文件系统为btrfs。如果不是,那么你需要创建一个新的btrfs分区或者格式化已有的分区为btrfs。 3. 如果你的文件系统已经是btrfs,但仍然收到该错误消息,检查是否存在其他与容器运行时相关的配置或设置。确保配置文件中指定了正确的存储驱动程序,并将其设置为btrfs。 4. 如果以上步骤都没有解决问题,可能需要重新安装或更新容器运行时,以确保其与btrfs文件系统的兼容性。 总结而言,要解决这个错误信息,你需要确保系统支持和使用btrfs文件系统,并将其配置为容器运行时的存储驱动程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值