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
命令的具体使用方式
如果我们想要查看一个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子命令主要是将内存中产生对应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 固件设备升级...