zoukankan      html  css  js  c++  java
  • (原)查看cephfs中的元数据对象和数据对象信息

    此篇的调试信息和内容主要参考大神https://blog.csdn.net/a1454927420/article/details/79381134的这篇文章,进行验证。

    在继上一篇,单机上利用docker部署ceph集群环境搭建笔记之后,我们来看一下cephfs的元数据和数据对象信息:

    # 16、ceph -s命令解释
    当我们执行ceph -s的时候,其实ceph -s的全称是:
    ceph
    --name client.admin
    --keyring /etc/ceph/ceph.client.admin.keyring
    --conf /etc/ceph/ceph.conf
    --cluster ceph
    -s

    上面参数很好理解,Ceph内部自身使用CephX进行认证,和普通的认证没什么区别,同样需要用户名和密码进行认证,那么这里默认的用户名就叫做client.admin,而默认的秘钥保存位置就位于以下几个位置任一:

    /etc/ceph/ceph.client.admin.keyring
    /etc/ceph/ceph.keyring
    /etc/ceph/keyring
    /etc/ceph/keyring.bin
    一般我们选择第一个,因为秘钥的命名规则采用/etc/ceph/$cluster.$name.keyring也就是集群名加上用户名再加上keyring的后缀组成。所以在我们执行ceph -s的时候,默认使用的是client.admin用户,同时会去那四个默认位置搜索该用户的秘钥,如果和集群保存的认证信息一致,那么就会显示出集群的状态。

    因为我们上面在进行docker部署的时候,这些秘钥信息,是用的/www/这个目录,所以我们如果想要简单的执行ceph -s,就需要将/www/ceph/*目录下的秘钥文件拷贝到/etc/ceph目录下来;


    # 17、查看cephfs文件系统的元数据

    当我们创建完cephfs以后(执行完步骤11以后),我们来看一下元数据池中存储的元数据:
    root@ybelzjlpa9xmngcb-0315223:~/ceph_cluster/mycephfs# rados ls -p cephfs_metadata 
    2021-10-26 11:14:17.865896 7f57437be700 0 monclient: hunting for new mon
    mds0_openfiles.0
    609.00000000
    mds0_sessionmap
    mds_snaptable
    608.00000000
    400.00000000
    601.00000000
    602.00000000
    600.00000000
    603.00000000
    mds0_inotable
    100.00000000
    1.00000000.inode
    200.00000000
    200.00000001
    606.00000000
    604.00000000
    500.00000000
    607.00000000
    605.00000000
    100.00000000.inode
    1.00000000
    root@ybelzjlpa9xmngcb-0315223:~/ceph_cluster/mycephfs#

    上面的展示的元数据为一个初创文件系统的元数据相关对象。
    由此可知,当我们在创建cephfs文件系统后,即使不往文件系统里面写数据,他也是会存在一些对象数据的,这部分对象保存的就是文件系统本身的元数据,对应于我们常说的superblock,根目录的元数据,等相关信息。

    这些对象里除了保存了文件系统的元数据,还用做保存cephfs日志,日志是用来恢复mds里的元数据缓存,和还没有应用成对象的元数据。


    然后我们在挂载的目录下,创建一个新的目录:

    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs# mkdir test_dir

    然后再查看下文件系统的元数据:

    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs# rados ls -p cephfs_metadata
    2021-10-26 14:13:55.415477 7fc62defc700 0 monclient: hunting for new mon
    mds0_openfiles.0
    609.00000000
    mds0_sessionmap
    mds_snaptable
    608.00000000
    400.00000000
    601.00000000
    602.00000000
    600.00000000
    603.00000000
    mds0_inotable
    100.00000000
    1.00000000.inode
    200.00000000
    200.00000001
    606.00000000
    604.00000000
    500.00000000
    607.00000000
    605.00000000
    100.00000000.inode
    1.00000000
    //在查看一下创建目录的inode号:
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs# ll -i
    total 5
    1 drwxr-xr-x 1 root root 0 Oct 26 14:13 ./
    915713 drwxr-xr-x 3 root root 4096 Oct 26 10:47 ../
    1099511627776 drwxr-xr-x 1 root root 0 Oct 26 14:13 test_dir/
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs#

    可以看到test_dir目录的inode号为1099511627776;然后他的hex为100 0000 0000;

    然后再来看一下metadata中保存的元数据:
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs# rados ls -p cephfs_metadata
    2021-10-26 14:27:36.970190 7f21be598700 0 monclient: hunting for new mon
    mds0_openfiles.0
    609.00000000
    mds0_sessionmap
    mds_snaptable
    608.00000000
    400.00000000
    601.00000000
    602.00000000
    10000000000.00000000
    600.00000000
    603.00000000
    mds0_inotable
    100.00000000
    1.00000000.inode
    200.00000000
    200.00000001
    606.00000000
    604.00000000
    500.00000000
    607.00000000
    605.00000000
    100.00000000.inode
    1.00000000
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs#

    可以看到多了一个10000000000.00000000的对象,这个对象就是我们刚刚创建的目录的test_dir的元数据对象,对象的名称为文件的inode号.偏移值,其中偏移值是在内核里切割文件时给出的。(具体怎么切割和发送数据的,且听下回分解)

    然后我们再在test_dir目录下创建一个空文件:
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs# cd test_dir/
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs/test_dir# ls
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs/test_dir#
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs/test_dir# touch test_file
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs/test_dir# ll -i
    total 1
    1099511627776 drwxr-xr-x 1 root root 0 Oct 26 14:35 ./
    1 drwxr-xr-x 1 root root 0 Oct 26 14:13 ../
    1099511627777 -rw-r--r-- 1 root root 0 Oct 26 14:35 test_file
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs/test_dir#


    然后看下这个文件的元数据信息:
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs/test_dir# rados ls -p cephfs_metadata
    2021-10-26 14:36:16.600448 7fc7e539a700 0 monclient: hunting for new mon
    mds0_openfiles.0
    609.00000000
    mds0_sessionmap
    mds_snaptable
    608.00000000
    400.00000000
    601.00000000
    602.00000000
    10000000000.00000000
    600.00000000
    603.00000000
    mds0_inotable
    100.00000000
    1.00000000.inode
    200.00000000
    200.00000001
    606.00000000
    604.00000000
    500.00000000
    607.00000000
    605.00000000
    100.00000000.inode
    1.00000000
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs/test_dir#

    并没有新的元数据对象生成,即使我们上去到mds的服务器容器上强制刷新元数据:
    [root@dd2f52aeb014 /]# ceph daemon /run/ceph/ceph-mds.dd2f52aeb014.asok flush journal
    {
    "message": "",
    "return_code": 0
    }
    然后在看元数据对象信息,还是一样的,跟之前,如下:
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs# rados ls -p cephfs_metadata
    2021-10-26 14:39:09.128725 7f7a3673f700 0 monclient: hunting for new mon
    mds0_openfiles.0
    609.00000000
    mds0_sessionmap
    mds_snaptable
    608.00000000
    400.00000000
    601.00000000
    602.00000000
    10000000000.00000000
    600.00000000
    603.00000000
    mds0_inotable
    100.00000000
    1.00000000.inode
    200.00000000
    200.00000001
    606.00000000
    604.00000000
    500.00000000
    607.00000000
    605.00000000
    100.00000000.inode
    1.00000000
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs#

    然后再创建一个test_dir2目录,然后再看下元数据信息:
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs/test_dir# cd ..
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs# mkdir test_dir2
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs#
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs#
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs#
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs# ll -i
    total 6
    1 drwxr-xr-x 1 root root 0 Oct 26 14:38 ./
    915713 drwxr-xr-x 3 root root 4096 Oct 26 10:47 ../
    1099511627776 drwxr-xr-x 1 root root 0 Oct 26 14:35 test_dir/
    1099511627778 drwxr-xr-x 1 root root 0 Oct 26 14:38 test_dir2/
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs# rados ls -p cephfs_metadata
    2021-10-26 14:39:19.046819 7ff75423c700 0 monclient: hunting for new mon
    mds0_openfiles.0
    609.00000000
    mds0_sessionmap
    mds_snaptable
    608.00000000
    400.00000000
    601.00000000
    602.00000000
    10000000000.00000000
    600.00000000
    603.00000000
    10000000002.00000000
    mds0_inotable
    100.00000000
    1.00000000.inode
    200.00000000
    200.00000001
    606.00000000
    604.00000000
    500.00000000
    607.00000000
    605.00000000
    100.00000000.inode
    1.00000000
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs#

    可见,我们可以看到test_dir2和test_dir目录的元数据,但是看不到test_dir/test_file文件的元数据。
    参考(https://blog.csdn.net/a1454927420/article/details/79381134)博客的说法:
    因为文件没有下级目录,所以没必要单独弄一个对象来保存元数据,只需要保存在上级目录的元数据里面

    那么我们来看下test_file的上级目录test_dir目录的元数据对象信息:
    执行命令:
    rados -p cephfs_metadata listomapvals 10000000000.00000000

    元数据对象信息:
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs# rados -p cephfs_metadata listomapvals 10000000000.00000000
    2021-10-26 14:46:24.565441 7fd6eb8de700 0 monclient: hunting for new mon
    test_file_head
    value (488 bytes) :
    00000000 02 00 00 00 00 00 00 00 69 02 01 d9 01 00 00 00 |........i.......|
    00000010 00 00 00 06 04 cf 01 00 00 11 06 ad 01 00 00 01 |................|
    00000020 00 00 00 00 01 00 00 00 00 00 00 b5 a1 77 61 07 |.............wa.|
    00000030 5b af 31 a4 81 00 00 00 00 00 00 00 00 00 00 01 |[.1.............|
    00000040 00 00 00 00 00 00 00 00 00 00 00 00 02 02 18 00 |................|
    00000050 00 00 00 00 40 00 01 00 00 00 00 00 40 00 05 00 |....@.......@...|
    00000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
    00000070 00 00 01 00 00 00 ff ff ff ff ff ff ff ff 00 00 |................|
    00000080 00 00 00 00 00 00 00 00 00 00 b5 a1 77 61 31 8d |............wa1.|
    00000090 7b 31 b5 a1 77 61 31 8d 7b 31 01 00 00 00 00 00 |{1..wa1.{1......|
    000000a0 00 00 03 02 28 00 00 00 00 00 00 00 00 00 00 00 |....(...........|
    000000b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
    *
    000000d0 03 02 38 00 00 00 00 00 00 00 00 00 00 00 00 00 |..8.............|
    000000e0 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 |................|
    000000f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
    00000100 00 00 00 00 00 00 b5 a1 77 61 07 5b af 31 03 02 |........wa.[.1..|
    00000110 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |8...............|
    00000120 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 |................|
    00000130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
    00000140 00 00 00 00 b5 a1 77 61 07 5b af 31 04 00 00 00 |......wa.[.1....|
    00000150 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 |................|
    00000160 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 |................|
    00000170 00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff |................|
    00000180 00 00 00 00 01 01 10 00 00 00 00 00 00 00 00 00 |................|
    00000190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
    000001a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b5 a1 |................|
    000001b0 77 61 c8 fb f4 2a 00 00 00 00 00 00 00 00 ff ff |wa...*..........|
    000001c0 ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
    000001d0 00 00 00 00 00 00 00 00 00 00 00 00 fe ff ff ff |................|
    000001e0 ff ff ff ff 00 00 00 00 |........|
    000001e8

    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs#

    我们可以看到test_dir目录的对象里保存了子目录和子文件的名称和inode编号(注意:因为linux是小端模式,看内存数据得倒着看),这样就可以建立一个文件系统数的元数据对应关系。

    # 18、查看cephfs文件系统的数据池中的数据
    我们在上一步中,在test_dir目录下创建一个一个空的test_file文件,
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs# ll -i test_dir
    total 1
    1099511627776 drwxr-xr-x 1 root root 0 Oct 26 14:35 ./
    1 drwxr-xr-x 1 root root 0 Oct 26 14:38 ../
    1099511627777 -rw-r--r-- 1 root root 0 Oct 26 14:35 test_file
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs#

    可以看到test_file文件的inode号为1099511627777;换算成16进制hex=10000000001.00000000;

    接下来我们来看下数据池中目前有那些对象数据:

    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs# rados ls -p cephfs_data
    2021-10-26 15:04:31.269499 7f3fa6bfe700 0 monclient: hunting for new mon
    10000000001.00000000
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs#

    可以明显的看到数据池中的数据,存在10000000001.00000000对象数据,他就是test_file文件的对象,所以即使是空文件,也会在数据池中有记录。

    所以不管是元数据池还是数据池,对象的名称都为文件的inode号.偏移值。偏移值是在内核里切割文件时给出的。

    然后再来看一下这个对象的数据内容:
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs# rados -p cephfs_data listomapvals 10000000001.00000000
    2021-10-26 15:11:52.115247 7f0eab644700 0 monclient: hunting for new mon
    root@ybelzjlpa9xmngcb-0315223:/mnt/mycephfs#

    可以看到这个对象中没有数据。

  • 相关阅读:
    [Swift]LeetCode282. 给表达式添加运算符 | Expression Add Operators
    [Swift]LeetCode279. 完全平方数 | Perfect Squares
    [Swift]LeetCode275. H指数 II | H-Index II
    [Swift]LeetCode274.H指数 | H-Index
    [Swift]LeetCode273. 整数转换英文表示 | Integer to English Words
    [Swift]LeetCode267.回文全排列 II $ Palindrome Permutation II
    Cygwin与minGW
    pat-1087【最短路径】
    Codeforces Round #313 A. Currency System in Geraldion(简单题)
    DIV+CSS在不同浏览器中的表现
  • 原文地址:https://www.cnblogs.com/lihaiping/p/15465806.html
Copyright © 2011-2022 走看看