2023年7月19日发(作者:)
cephfs的数据与元数据组织形式(cephfs探索⼆) cephfs ⽂件系统,由数据和元数据2部分组成。元数据即⽬录和⽂件。数据就是⽂件⾥的数据和内容。 不管数据还是元数据,最后在底层filestore层,都以对象⽂件的形式存储。⼀,cephfs相关模块 1,ceph-fuse,cephfs-kernel ceph客户端有2种模式,使⽤ceph-fuse挂载为应⽤层模式,使⽤内核的mount - ceph挂载是内核模式。 ⽤户使⽤客户端挂载cephfs成本地⽂件夹后,访问ceph集群。 2,ceph-mds 这是cephfs元数据的内存缓存,为了加快元数据的访问,⾥⾯有元数据的cache,也有类似journal⼀样保持数据
⼀致性的⽇志系统。ceph-mds core dump了,并不会引起数据丢失,他仅仅是个缓存,数据已经持久化保存在osd上。重启mds的时候会通过replay的⽅式从osd上加载之前缓存的元数据。 3,ceph-osd cephfs⽂件系统⾥的数据(⽂件内容)和元数据(⽬录,⽂件)最后都以对象⽂件的形式保存在osd上。⼆,数据 cephfs的⽂件⾥的数据会被切分为4M⼤⼩的对象⽂件。假如有⼀个20M⼤⼩的⽂件,会被切分成5个对象⽂件 1,下⾯我们做⼀个实验,在cephfs⽂件系统⾥写⼊⼀个20M的⽂件
2, 查看⽂件的inode号为:1
3,这个inode号是10进制的,我们⽤计算器换算成16进制,正好等于1 然后查看⽂件系统数据池⾥的对象 rados ls -p cephfs_data
4,总结下上⾯的实验结果: ⼀个20M的⽂件被切分成5个对象,对象的名称为⽂件的inode号.偏移值。 偏移值是在内核⾥切割⽂件时给出的。(具体怎么切割和发送数据的,且听下回分解)三,元数据 上⾯解释了⽂件⾥的数据是怎么存放的,下⾯我们解释下⽂件名和⽬录是怎么存放的。以及⽬录树是怎么构建的。 ⼀个⽂件系统的⽬录,是树形状的,⾸先是树的根"/" ,然后根据根"/"的元数据dentry,可以找到⼦⽬录元数据存储的位置(即⼦⽬录的dentry和inode)。逐层遍历,最后形成整个⽂件系统树的关联关系。 1,⽂件系统的元数据。 ⼀个⽂件系统本⾝也有元数据,superblock,根⽬录的元数据,等相关信息。当我们创建⼀个cephfs⽂件系统的时候,不⽤往⽂件系统⾥写数据,就会产⽣⼀些对象,⽤来保存⽂件系统本⾝的元数据。下⾯为初创⽂件系统的元数据相关对象
这些对象⾥除了保存了⽂件系统的元数据,还⽤做保存cephfs⽇志,⽇志是⽤来恢复mds⾥的元数据缓存,和还没有应⽤成对象的元数据。 2, ⽬录的保存⽅式 cephfs⾥⾯元数据写⼊⾸先写⼊⽇志mdlog,然后再把⽇志⾥的元数据应⽤到对象上。下⾯我们创建⼀个⽬录,并且强制让他应⽤成对象。 创建⽬录fsaaaaa
fsaaaaa的inode号为1,换算成16进制为:1
因为创建⽬录后,⾸先元数据只是提交到了⽇志⾥,还没有应⽤成对象,下⾯我们强制元数据刷新成对象 ceph daemon /var/run/ceph/ flush journal
return 0 ,刷新成功
查看⽣成的元数据对象。 这样我们的fsaaaaa⽬录就保存到了到了1.00000000这个对象⾥
3,⽂件元数据的保存⽅式 我们cd进fsaaaaa⽬录,创建⼀些⽂件和⽂件夹,继续测试
我们发现,只能找到⽬录的元数据对象,不能找到⽂件元数据对象。
我个⼈认为因为⽂件没有下级⽬录,所以没必要单独弄⼀个对象来保存元数据,只需要保存在上级⽬录的元数据⾥⾯ 4,⽬录和⼦⽬录,⼦⽂件的关联关系 每个⽬录的元数据都保存了下级⽬录和⽂件的名称,以及inode号 我们查看下fsaaaa⽬录的元数据,fsaaaaa对应的对象名为:1.00000000 rados -p cephfs_metadata listomapvals 1.00000000
我们可以看到fsaaaaa⽬录的对象⾥保存了⼦⽬录和⼦⽂件的名称和inode编号(注意:因为linux是⼩端模式,看内存数据得倒着看),这样就可以建⽴⼀个⽂件系统数的元数据对应关系。四,应⽤ 理解数据关系,可以很好的理解cephfs的设计思路,并且可以做元数据的备份和恢复,即使mds不起作⽤了,我们也能从对象⽂件中恢复出⼀个⽂件系统。
发布者:admin,转转请注明出处:http://www.yc00.com/news/1689764816a284317.html
评论列表(0条)