首页 > ceph-dencoder工具使用详解

ceph-dencoder工具使用详解

文章目录

      • 简介
      • 使用
        • decode命令用法
        • encode

简介

ceph-dencoder工具是一个序列化编码、解码并且打印ceph数据结构的工具。它主要用来调试和测试ceph不同版本之间的兼容性问题

该工具是由

ceph-common-12.2.1.06-0.el7.centos.x86_64 rpm包生成

本文章是根据ceph-12.2.1版本来描述改命令的使用方式

使用

执行ceph-dencoder -h 命令可以查看到如下帮助信息

[root@node1 ~]# ceph-dencoder -h
usage: ceph-dencoder [commands ...]version             print version string (to stdout)import <encfile>    read encoded data from encfileexport <outfile>    write encoded data to outfileset_features <num>  set feature bits used for encodingget_features        print feature bits (int) to stdoutlist_types          list supported typestype <classname>    select in-memory typeskip <num>          skip <num> leading bytes before decodingdecode              decode into in-memory objectencode              encode in-memory objectdump_json           dump in-memory object as json (to stdout)hexdump             print encoded data in hexcopy                copy object (via operator=)copy_ctor           copy object (via copy ctor)count_tests         print number of generated test objects (to stdout)select_test <n>     select generated test object as in-memory objectis_deterministic    exit w/ success if type encodes deterministically

decode命令用法

本文我们主要看一下decode命令的具体使用方式

如果我们想要查看一个cephfs内部的元数据对象内容,执行如下命令

  • 先获取元数对象,通过rados命令get获取,关于rados命令可以参考文档rados使用详解
    [root@node1 ~]# ceph fs ls   #获取元数据pool
    name: cephfs, metadata pool: fs_meta_pol, data pools: [fs_pol ] 
    [root@node1 ~]# rados -p fs_meta_pol ls #通过rados命令获取元数据pool中的对象
    601.00000000
    602.00000000
    600.00000000
    603.00000000
    1.00000000.inode
    mds_snaptable
    605.00000000
    mds0_inotable
    100.00000000
    mds0_sessionmap
    ...
    [root@node1 ~]# rados -p fs_meta_pol get 601.00000000 mds.out  #借用rados命令将对象内容放入到指定文件mds.out中
    
  • ceph-dencoder命令解析

    先执行命令ceph-dencoder list_types命令来获取你想知道的对象属性信息,改属性信息包括ceph各个组件元数据操作信息,从集群各个组件表项,到pg元数据信息,到对象元数据信息,都会存放在bufferlist,由bufferlist进行编码序列化(encode)存放到数据库中,使用得时候又从数据库中取出,经过bufferlist进行反序列化(decode)进行使用。这里的list_types即是各个数据属性存放再bufferlist中的内容,在进行反序列化查看属性内容的时候需要进行指定
    [root@node1 ~]# ceph-dencoder type MDSMap::mds_info_t import mds.out  decode dump_json
    { "gid": 0,"name": "","rank": -1,"incarnation": 0,"state": "up:standby","state_seq": 0,"addr": "-","standby_for_rank": -1,"standby_for_fscid": -1,"standby_for_name": "","standby_replay": false,"export_targets": [],"features": 0
    }
    

如果我们想要查看osdmap 进行decode之后的元数据内容时可以进行如下操作

ceph-kvstore-tool rocksdb /var/lib/ceph/mon/ceph-node1/store.db/ list|grep osdmap|tail -n 10 使用ceph-kvstore-tool工具从mon数据库查看较新的osdmap表项以及对应的版本

[root@node1 mdsmap]# ceph-kvstore-tool rocksdb /var/lib/ceph/mon/ceph-node1/store.db/ list|grep osdmap|tail -n 10
osdmap	full_992
osdmap	full_993
osdmap	full_994
osdmap	full_995
osdmap	full_996
osdmap	full_997
osdmap	full_998
osdmap	full_999
osdmap	full_latest
osdmap	last_committed

获取osdmap的制定版本内容,并放入指定文件中如下,关于ceph-kvstore-tool工具的使用可以参考文章ceph-kvstore-tool 工具使用详解

[root@node1 mdsmap]# ceph-kvstore-tool rocksdb /var/lib/ceph/mon/ceph-node1/store.db/ get osdmap full_998 out osdmap.998
(osdmap, full_998)

此时osdmap的full_998版本内容已经放入到了osdmap.998文件之中,因为该文件时序列化之后的,需要进行解码decode,同样我们的ceph-dencoder工具的decode子命令,可以看到如下decode之后的输出,osdmap数据结构非常清晰(由于内容较多,包括pool,osd的信息都有描述,暂不一一列举)

[root@node1 mdsmap]# ceph-dencoder import osdmap.998 type OSDMap decode dump_json
{ "epoch": 998,"fsid": "fa27f041-0ce9-4df1-a4bd-5e37678834bd","created": "2019-07-22 15:43:30.494296","modified": "2019-08-07 19:26:56.518397","flags": "noout,nobackfill,norecover,sortbitwise,recovery_deletes,purged_snapdirs","crush_version": 30,"full_ratio": 0.950000,"backfillfull_ratio": 0.900000,"nearfull_ratio": 0.850000,"cluster_snapshot": "","pool_max": 15,"max_osd": 10,"require_min_compat_client": "jewel","min_compat_client": "jewel","require_osd_release": "luminous",...

encode

encode子命令主要是将内存中产生对应type的ceph元数据实例进行序列化,并放入bufferlist之中

ceph-dencoder import osdmap.998 type OSDMap encode

关于ceph-dencoder的其他子命令的使用可以参见帮助文档,或者官方社区文档,个人认为该工具同样有助于我们对ceph源码的理解。ceph设计去固化什么样类型的元数据到数据库中,才能维持ceph的可靠,高度自治的特性。

就这样吧,存储路漫漫~

更多相关:

  • 文章目录简介使用总结 简介 ceph-kvstore-tool工具是用来获取存放在leveldb或者rocksdb数据库中的键值元数据。并且该工具能够对kvstore中的数据进行配置,就像是对离线后的osd操作osd map一样 使用该工具,需要安装ceph-test-12.2.1.06-0.el7.centos.x86_6...

  • 在DOS窗口执行了一些列命令完成某项工作后,如果要查看都执行了那些命令,该如何办呢?(前提:DOS窗口未关闭的情况下)     一、方法一:使用↑↓箭头上下翻看执行过的命令,此方式适宜执行命令较少的情况; 二、方法二:使用快捷键; F7快捷键查看所有执行过的命令 F3:调出上一条执行过的命令,调出后直接回车即可执行; F...

  • 在windows的DOS操作界面里面,清屏的命令是cls,那么在linux 里面的清屏命令是什么呢?下面笔者分享几种在linux下用过的清屏方法。 1、clear命令、这个命令将会刷新屏幕,本质上只是让终端显示页向后翻了一页,如果向上滚动屏幕还可以看到之前的操作信息。 2、Ctrl+l(小写的L)、这是一个清屏的快捷键,这个是笔者...

  • LINUX下用CTRL+R快速搜索HISTORY历史命令,快速索引到之前使用过的命令行语句 前提是,搜索已经使用的命令,否则是查不出来结果的。 ctrl+r 用途:反向搜索执行过的命令。(reverse-i-search) 1、任何目录下按住ctrl + r 2、输入历史命令中的字符串 ,比如 输入shut 会检索...

  • 刚开始接触linux,总有些简单的问题不知道怎么搞定,先将目前汇总的解决方法叫做"linux入门-1",后续在使用过程中逐步总结。   1. 连接 ADSL : sudo pon dsl-provider 断开 ADSL: sudo poff 查看 ADSL 状态: plog 2. dpkg 命令 dpkg 是 Debia...

  • 文章目录NVME 和 AHCI 性能比较NVME-CLI nvme工具使用1. 安装2. 命令综述3. 基本命令演示4. NVME 固件设备升级...