Cephfs的MDS侧元数据池和mdcache存储数据结构分析

一,元数据池中的数据结构

1,Dir

Cephfs 的元数据池中主要存放着目录dir或目录分裂后的分片对象,数据池中存放着文件的对象(根据偏移可以划分多个)。

查看名为vdb.1_1.dir(目录下有100万个文件)的目录的inode号为1099511627788,转换为16进制为1000000000C
image.png

通过inode号在metapool里搜到513个对象,去掉原目录1000000000c.00000000,可以看到该目录存在512个目录分片,每个分片由inode号1000000000c和分片号frag_t(32位)组成,前8位表示有效位数,后面24位为value值,这里前8位为09表示value前9位有效。每一个目录分片在元数据池中作为一个dir对象存在。

[root@node2 cephfs]# rados -p cephfs-metadata ls
image.png

2,Dentry和Inode组织结构

通过查看元数据池中目录分片的内容,我们可以看到对应dir对象中存在的文件的dentry和inode信息,以1000000000c.09640000分片为例,如下可见dir对象中存放的items map记录管理的目录项dentry, 每一个目录或文件的dentry信息以key-value键值对的形式存在dir中。

[root@node2 testSetattr]# rados -p cephfs-metadata listomapvals 1000000000c.09640000
image.png

以文件vdb_f0033为例,在其所在的分片1000000000c.09640000中,key是以文件名_head的形式存在,value里面存放着对应文件的元数据inode信息(包含inode号,如上图红框所示为1000000002D,小端模式需要倒着看。
从数据池中能找到这个对象,对象的名称为文件的inode号.编号(总大小/对象大小object_size个),对象存的数据多了就根据偏移拆成多个)
image.png

我们目前的目录vdb.1_1.dir的下级文件的元数据信息就全部找到了,按照元数据的组织结构,不管是文件或者目录,其inode信息和dentry都存放在其上级目录dir(或者对应分片)的items map之内。
image.png

以vdb.1_1.dir为例,其父目录为testSetattr,inode号为109951163887,转成16进制为10000002B59。查看10000002b59.00000000对象可以找到vdb.1_1.dir的元数据信息。

[root@node3 cephfs]# rados -p cephfs-metadata listomapvals 10000002b59.00000000
image.png

由于testSetattr目录上级目录就是文件系统根目录,所以其inode信息存放在根目录的dir对象中(根目录的inode号为1),通过以下命令查到
[root@node3 cephfs]# rados -p cephfs-metadata listomapvals 1.00000000
image.png

而针对于根目录的inode信息,存放在1.00000000.inode对象当中。

二,内存对象中的结构

image.png

大体的内存组织结构借用上图表示,下面详细介绍:

1,Dir

CInode          *inode;  // my inode
frag_t           frag;   // my frag
...
dentry_key_map   items;

Dir内存结构主要是其自身的inode索引和当前的分片号,以及存在其中的dentry 列表items,具体参数见Dir.h。
通过CDir::fetch()读取metapool中的数据,填充自己的CDir::items,从而在内存初中创建相应的dentry和inode结构。

2,Dentry

image.png
image.png

简要地说,dentry的内存结构主要包含对应文件或目录的名字mempool::mds_co::string name,其归属的目录或者分片CDir *dir,以及链接的inode信息linkage_t linkage,链接linkage包含inode或remote inode(跟硬链接有关)索引。

3,Inode

image.png
image.png
image.png

Inode的数据结构较为复杂,主要变量CDentry *parent(正常链接的primary dentry)和remote_parents(硬链接使用),指向其所链接的dentry,dirfragtree是当前inode为dir的情况下指向对应目录分片。
主要信息存在其继承的InodeStoreBase类中,其包含了具体inode信息所在的inode_t(即mempool_inode结构),和对应文件或目录的扩展属性xattr,inode_t则包含了传统inode的元数据信息,包括ctime、mtime、mode、uid、gid等等具体的属性信息。

车水... manong...

0 声望
5 粉丝
0 条评论
推荐阅读
写个 .NET 程序解决 Windows 版微信 3.9 收到文件“只读”的问题
Windows 版微信升级到 3.9 之后,接收到的文件都变成了只读属性,对需要经常修改微信接收文件进行交流的人来说极为不便。虽然从业务功能上来说,需要频繁交流的文档还是用在线协同(比如腾讯文档)比较好一些,但...

边城3阅读 1.3k评论 3

封面图
【寻人启事】达坦科技持续招人ing
达坦科技(DatenLord)专注于打造新一代开源跨云存储平台。通过软硬件深度融合的方式打通云云壁垒,实现无限制跨云存储、跨云联通,建立海量异地、异构数据的统一存储访问机制,为云上应用提供高性能安全存储支持...

Datenlord阅读 1.1k

封面图
FreeBSD - ext2 文件系统磁盘块和 inode 的申请
磁盘块与文件 inode entry 的申请和释放的处理机制总体上是一致的,所以就放到一起进行分享。在之前的文章中介绍了ext2文件系统磁盘的的总体布局,为了方便说明,这里就假设磁盘只有一个块组。

Douyiya阅读 807

云原生数据库-KaiwuDB SST文件结构
LSM tree保证数据库是有序写入(memtable-skiplist),起高了写性能,但是因为其本身的分层结构,牺牲了读性能(一个key如存储在了低级别的level,从上到下每一层都要进行查找,代价极大)。所以,针对读的性能提...

KaiwuDB阅读 710

封面图
cephadm 安装部署 ceph 集群
cephadm 安装部署 ceph 集群介绍手册:[链接][链接]ceph可以实现的存储方式:块存储:提供像普通硬盘一样的存储,为使用者提供“硬盘”文件系统存储:类似于NFS的共享方式,为使用者提供共享文件夹对象存储:像百度...

小陈运维阅读 532

Curve 文件存储在 Elasticsearch 冷热数据存储中的应用实践
Elasticsearch在生产环境中有广泛的应用,本文介绍一种方法,基于网易数帆开源的Curve文件存储,实现Elasticsearch存储成本、性能、容量和运维方面的显著提升。

网易数帆阅读 528

扬州万方:基于申威平台的 Curve 块存储在高性能和超融合场景下的实践
扬州万方科技股份有限公司主要从事通信、计算机和服务器、智能车辆、基础软件等产品的科研生产,是国家高新技术企业、专精特新小巨人企业、国家火炬计划承担单位。

网易数帆阅读 330

车水... manong...

0 声望
5 粉丝
宣传栏