之前写过一篇关于如何使用对象网关存储池中的对象来将对象网关中的文件拼接出来的文章,其实cephfs文件系统中的文件也可以使用对象来进行拼接的,以下是操作方法:
1、首先查看cephfs的存储池信息:
ceph fs ls
上图中我们可以看到有一个名称为ceph的cephfs文件系统,它的元数据池为metadata,数据池为data
2、在集群cephfs挂载目录中创建一个test目录,然后拷贝一个文件到test目录下;;
3、刷新文件元数据信息到mds;
ceph daemon mds.node11 flush journal
4、查看文件的Inode ID号,并将其转换成16进制,得出的这个值就是该文件的对象标识;
printf %x `stat -c %i 有道翻译.exe`;printf " "
5、根据文件的对象标识,在ceph文件系统的数据存储池中查找该文件的所有对象;
rados -p data ls|grep 1000063ef10|sort
6、将步骤5中查询到的数据导出到本地一个文档中,注意一定要按照对象的切片顺序排列好;
rados -p data ls|grep 1000063ef10|sort>yd
7、使用导出的对象列表文档,将文件拼接出来;
for i in `cat yd`;do rados -p data get $i $i; cat $i >> ydfy.exe;done
8、检查原始文件的md5值和拼接出来的文件的md5值,md5值一致表示两个文件一样;
这篇文章有助于更加直观的理解cephfs文件系统下文件存储的过程,可以看到文件是如何转化为对象并进行存储的。
最后说明一下就是在cephfs文件系统中,目录只有元数据对象,目录的元数据对象中存储的是该目录下面的所有子目录(不包含子目录下面的子目录和文件)和文件的元数据信息(文件名称和Inode号信息)。