当前位置: 首页 > 编程日记 > 正文

ceph-objectstore-tool工具使用详解

文章目录

      • 简介
      • 使用
        • OSD相关操作
        • PG相关操作
        • 对象相关操作
      • 总结

简介

ceph-objectstore-tool工具,能够操作到ceph最底层的数据,包括pg,对象层级。它能够对底层pg以及对象相关数据进行获取、修改。并能够对一些问题pg和对象进行简单修复。所以使用该工具进行操作的时候需要谨慎(涉及到修改的操作最好备份一份数据),防止误操作造成数据丢失。
该工具的使用主要针对对象PG,所以这里我们的使用主要为以下两种

  • PG的相关操作
    info #查看pg的信息
    log  #查看pg的元数据信息
    remove #从当前osd移除pg
    mkfs #重新初始化osd
    fsck #检查bluefs数据正确性
    export #导出pg元数据
    import #导入pg元数据
    list #列出pg内部对象或者当前osd所有对象
    fix-lost #修复pg丢失的对象
    list-pgs #列出当前osd所有pg
    rm-past-intervals 
    dump-journal #针对filestore,打印日志
    dump-super #打印osd的超级块信息
    meta-list #打印元数据信息列表
    get-osdmap #获取osdmap
    set-osdmap #设置osd map
    get-inc-osdmap #从当前osd 获取inc 信息
    set-inc-osdmap #将inc设置进入当前osd信息
    mark-complete #标记为complete,让bluestore认为可以pg可以选举出权威日志
    
  • 对象的相关操作,这里主要列出常用的对象操作
     list-attrs  #列出对象的一些属性list-omap #列出对象的omp信息remove|removeall #移除对象或者移除所有对象dump #打印对象元数据信息
    

使用

基本命令使用如下:
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore xxx一般前半部分如左,指定osd路径,指定存储引擎(bluestore或者filestore

PS:使用之前需要停止当前操作的osd,否则会报错

OSD相关操作

  • 检查bluestore的bluefs是否文件系统被损坏,并尝试修复
    ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore --op fsck

  • 列出当前osd所有对象
    ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore --op list

  • 获取当前osd的osdmap信息,并指定对应的输出文件
    ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore --op get-osdmap --file 1.txt

    [root@node1 ceph]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore --op get-osdmap --file 1.txt
    osdmap#1457 exported.
    
  • 导入一个osdmap信息到当前osd
    ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore --op set-osdmap --file 1.txt

    [root@node1 ceph]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore --op set-osdmap --file 1.txt
    Wrote osdmap.145
    
  • 获取当前osd的超级块信息
    ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore --op dump-super 输出如下:

    {
    "cluster_fsid": "fa27f041-0ce9-4df1-a4bd-5e37678834bd",
    "osd_fsid": "c03c2fdb-cfd4-42bd-8e32-61e359281078",
    "whoami": 8,
    "current_epoch": 1457,
    "oldest_map": 784,
    "newest_map": 1457,
    "weight": 0.000000,
    "compat": {"compat": {},"ro_compat": {},"incompat": {"feature_1": "initial feature set(~v.18)","feature_2": "pginfo object","feature_3": "object locator","feature_4": "last_epoch_clean","feature_5": "categories","feature_6": "hobjectpool","feature_7": "biginfo","feature_8": "leveldbinfo","feature_9": "leveldblog","feature_10": "snapmapper","feature_11": "sharded objects","feature_12": "transaction hints","feature_13": "pg meta object","feature_14": "explicit missing set","feature_15": "fastinfo pg attr","feature_16": "deletes in missing set"}
    },
    "clean_thru": 1457,
    "last_epoch_mounted": 1456
    }
    
  • 获取当前osd的所有pg
    ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore --op list-pgs 其中--op表示对当前osd或者当前pg的操作

    17.es1
    17.as0
    17.8s1
    17.4s2
    17.3s1
    17.3fs0
    17.3ds0
    17.3cs2
    17.23s2
    17.2es0
    

PG相关操作

  • 针对单个pg,列出当前pg的基本信息
    ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore --pgid 17.es1 --op info输出如下
    "pgid": "17.es1",
    "last_update": "1380'5116",
    "last_complete": "1380'5116",
    "log_tail": "1376'4854",
    "last_user_version": 5118,
    "last_backfill": "MAX",
    "last_backfill_bitwise": 0,
    "purged_snaps": [],
    "history": {"epoch_created": 1290,"epoch_pool_created": 1290,"last_epoch_started": 1457,"last_interval_started": 1456,"last_epoch_clean": 1350,"last_interval_clean": 1349,"last_epoch_split": 0,"last_epoch_marked_full": 0,"same_up_since": 1456,"same_interval_since": 1456,"same_primary_since": 1290,"last_scrub": "0'0","last_scrub_stamp": "2019-08-12 11:14:04.515869","last_deep_scrub": "0'0","last_deep_scrub_stamp": "2019-08-12 11:14:04.515869","last_clean_scrub_stamp": "2019-08-12 11:14:04.515869"...
    
  • 针对单个pg,列出当前pg元数据信息
    ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore --pgid 17.es1 --op log
    该命令的输出主要包括pg的历史版本信息,记录着每个对象的相关操作,以及当时pg epoch和对应的pg小版本
    "pg_log_t": {"head": "1380'5116","tail": "1376'4854","log": [{"op": "modify","object": "17:713bbf48:::rbd_data.18.cf83c74b0dc51.0000000000023ba0:head","version": "1376'4855","prior_version": "0'0","reqid": "client.852676.0:164001","extra_reqids": [],"mtime": "2019-08-12 14:40:08.571459","return_code": 0,"mod_desc": {"object_mod_desc": {"can_local_rollback": true,"rollback_info_completed": true,"ops": [{"code": "CREATE"}]}}},...
    
  • 打印pg中对象的元数据
    ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore --pgid 17.es1 --op meta-list
    ["meta",{"oid":"osdmap.1372","key":"","snapid":0,"hash":168878088,"max":0,"pool":-1,"namespace":"","max":0}]
    ["meta",{"oid":"osdmap.1053","key":"","snapid":0,"hash":168945672,"max":0,"pool":-1,"namespace":"","max":0}]
    ["meta",{"oid":"osdmap.1266","key":"","snapid":0,"hash":168892424,"max":0,"pool":-1,"namespace":"","max":0}]
    ["meta",{"oid":"osdmap.1101","key":"","snapid":0,"hash":168920072,"max":0,"pool":-1,"namespace":"","max":0}]
    ...
    
  • 将pg的元数据导出到指定文件,一般用作 备份
    ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore --pgid 17.es1 --op export --file /mnt/test.obj
  • 将指定的pg元数据导入到当前pg
    这里导入前需要先移除当前pg(remove之前请先export备份一下pg数据)
    ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore --pgid 17.es1 --op remove
    ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore --pgid 17.es1 --op import --file /mnt/test.obj
  • 将集群中incomplete的pg标记为complete,这里需要根据集群的副本数将相关的所有osd上的pg进行标记
    ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore --pgid 17.es1 --op mark-complete

对象相关操作

  • 列出当前pg的所有对象
    ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore --pgid 17.es1 --op list
    输出如下:
    ["17.es1",{"oid":"rbd_data.18.cf83c74b0dc51.000000000001bda5","key":"","snapid":-2,"hash":1725693966,"max":0,"pool":17,"namespace":"","shard_id":1,"max":0}]
    ["17.es1",{"oid":"rbd_data.18.cf83c74b0dc51.0000000000033137","key":"","snapid":-2,"hash":1782448142,"max":0,"pool":17,"namespace":"","shard_id":1,"max":0}]
    ["17.es1",{"oid":"rbd_data.18.cf83c74b0dc51.000000000003f128","key":"","snapid":-2,"hash":1246789646,"max":0,"pool":17,"namespace":"","shard_id":1,"max":0
    ...
    ...
    
  • 从以上获取的对象中取一个,打印对象的元数据信息
    ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore rbd_data.18.cf83c74b0dc51.000000000003925a dump
    {
    "id": {"oid": "rbd_data.18.cf83c74b0dc51.000000000003925a","key": "","snapid": -2,"hash": 1962672078,"max": 0,"pool": 17,"namespace": "","shard_id": 1,"max": 0
    },
    "info": {"oid": {"oid": "rbd_data.18.cf83c74b0dc51.000000000003925a","key": "","snapid": -2,"hash": 1962672078,"max": 0,"pool": 17,"namespace": ""},...
    
    • 获取对象的属性信息
      ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore
       [root@node1 ceph]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore rbd_data.18.cf83c74b0dc51.000000000003925a list-attrs
      _
      hinfo_key
      snapset
      
  • 删除对象
    ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore rbd_data.18.cf83c74b0dc51.000000000003925a remove请慎重测试,如有pg备份,则可以进行测试
    [root@node1 ceph]# ceph-objectstore-tool-bak --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore rbd_data.18.cf83c74b0dc51.000000000003925a remove
    remove 1#17:73ffdf2e:::rbd_data.18.cf83c74b0dc51.000000000003925a:head#
    
    查看pg中是否还有该对象
    ceph-objectstore-tool-bak --data-path /var/lib/ceph/osd/ceph-8/ --type bluestore --pgid 17.es1 --op list|grep rbd_data.18.cf83c74b0dc51.000000000003925a并无输出

总结

由于该工具是对Ceph底层数据以及元数据进行操作,所以使用需谨慎,处处要备份。如有兴趣,可以对该工具的具体操作源码进行阅读
src/tools/ceph_objectstore_tool.cc路径,修改对应代码之后需要同时将libceph-common.so.0以及libceph-common.so.0拷贝到测试设备才能够正常使用

相关文章:

slf4j导入那个依赖_学习SPRINGBOOT结合日志门面SLF4J和日志实现LOGBACK的混合使用

一、此处主要介绍在springboot工程下如何使用 logback slf4j 进行日志记录。logback主要包含三个组成部分:Loggers(日志记录器)、Appenders(输出目的在)、Layouts(日志输出格式) slf4j :如jdbc一样,定义了一套接口,是一个日志门面…

linux下发布的执行文件崩溃的问题定位 心得一则

C Release版本发布到客户处执行时,如果程序崩溃,有什么办法能够快速的确认程序的问题呢? 如果能gdb调试的话,比较简单了,可以使用gdb命令,类似如下:gdb ##set args ****b mainr#eipx/10i 0xb736…

7 个漂亮的 JavaScript 的时间轴组件 [转]

时间轴:通过互联网技术,依据时间顺序,把一方面或多方面的 时间足迹事件串联起来,形成相对完整的记录体系,再运用图文的形式呈现给用户;时间轴可以运用于不同领域,最大的作用就是把过去的事物系统…

Python 学习笔记: 反射

Python 反射应用 例子1: class Person:def __init__(self, name, age):self.name nameself.age agedef show(self):print(%s \s age is %s%(self.name, self.age))alex Person(alex, 18) # alex.show() if hasattr(alex, show):getattr(alex, show)() 转载于:ht…

C++多线程:互斥变量 std::mutex

文章目录描述成员函数总结描述 头文件 <mutex>使用 std::mutex <variable>简介 mutex是一种多线程变成中的同步原语&#xff0c;它能够让共享数据不被多个线程同时访问&#xff0c;它不支持递归得对互斥对象上锁特点 用方线程从它成功调用 lock 或 try_lock 开始&…

vim替换字符串带斜杠_Vim、gvim操作替换

~ 回复 以下关键词 查看更多IC设计教程 ~目前支持的关键词有&#xff1a;Innovus ICC or IC CompilerDC or Design Compiler PT or PrimeTimeUser Guide or UG LedaVCS Formality工艺节点 …

SharePoint2010沙盒解决方案基础开发——关于TreeView树形控件读取列表数据(树形导航)的webpart开发及问题...

转&#xff1a;http://blog.csdn.net/miragesky2049/article/details/7204882 SharePoint2010沙盒解决方案基础开发——关于TreeView树形控件读取列表数据&#xff08;树形导航&#xff09;的webpart开发及问题 1、实现效果如下&#xff1a; 点击各个节点进入相应的链接 2、测试…

智能医疗?轻松实现!

每个中国人都及其关注养老和住房问题&#xff0c;在中国每个人都十分有存钱的意识。就目前来看&#xff0c;现在的医疗和住房保障还没有能够满足我们现在的需求&#xff0c;因而&#xff0c;存钱显得尤为重要。我们关注医疗&#xff0c;是因为每个人都会面临年老&#xff0c;每…

TokuDB vs Innodb 基准测试对比

随着业务的发展以及mysql存储数据量的越来越大&#xff0c;很多超大表不仅仅存储变的不易&#xff0c;维护也变得越来越困难&#xff0c;特别是频繁的ddl操作让运维变得痛苦不堪。当然表拆分可以解决类似的问题&#xff0c;但是对一个稳定的系统来说&#xff0c;表拆分对业务的…

C++ 多线程:互斥对象 lock_gurad

描述 头文件:<mutex>声明方式: template< class Mutex > class lock_guard;简介 lock_guard是一种互斥包装器&#xff0c;它提供了非常便捷的raii资源管控技术用来在对象生存周期内提供互斥锁。 lock_gurad很好得解决了互斥变量mutex的锁成员在函数异常期间无法正…

太TM难看了,我自己都看不下去了

继续研究文件IO。 作用是用System.in输入一个文件路径&#xff0c;然后打印文件里的所有行。 而且虽然没仔细检查过&#xff0c;哦不就是因为没检查过&#xff0c;所以肯定不够健壮。 1 import java.io.*;2 import java.util.Scanner;3 4 public class test {5 public stat…

儿童吹泡泡水简单配方_自制泡泡水最简单配方的做法教程

泡泡吸引着各个年龄段的人&#xff0c;就像是反射彩虹的表面&#xff0c;在微风中漂浮。无论您是出于什么原因&#xff0c;都很容易在其中找到快乐。吹泡泡可以让小孩玩上几个小时&#xff0c;而大一点的孩子可以尝试制作最佳泡泡液。对于年轻的萌芽科学家来说&#xff0c;制备…

Linux系统下统计目录及其子目录文件个数

改变脚本权限&#xff1a;(这里假设你的脚本叫FileCount.sh) chmod ax FileCount.sh 脚本&#xff1a; 1 #!/bin/sh 2 echo 查看某目录下文件的个数 3 ls -l |grep "^-"|wc -l 4 5 echo 查看某目录下文件的个数&#xff0c;包括子目录里的。 6 ls -lR|grep "^-…

【Rsync项目实战一】备份全网服务器数据

目录 【Rsync项目实战】备份全网服务器数据 【企业案例】1.1 环境部署1.2 开始部署backup服务器&#xff1a;Rsync服务端过程&#xff1a;1.3 开始部署nfs01服务器&#xff1a;Rsync客户端过程&#xff1a;【Rsync项目实战】备份全网服务器数据 标签&#xff08;空格分隔&#…

C++ 多线程:条件变量 std::condition_variable

文章目录描述使用描述 头文件<condition_variable> 定义 class condition_variable; 简介 之前我们也已经介绍过了C多线程中互斥变量存在&#xff0c;已经足够支持多线程中对共享普通系统数据的合理访问。但是因为多线程中同一时刻必然会有一个线程持有锁&#xff0c;一…

小晶粒zsm分子筛合成表征实验报告_Nat. Mater.:区域选择性合成亚纳米金属-分子筛材料...

本文来自微信公众号&#xff1a;X-MOLNews亚纳米尺度的负载型催化剂是近些年多相催化领域以及相关材料科学领域的热门方向。围绕着单原子催化剂、团簇催化剂的论文如井喷一般出现在各大期刊上。关于亚纳米尺度金属催化剂的制备方法、表征方法、催化性能或是相关的理论研究都在如…

【翻译】使用新的Sencha Cmd 4命令app watch

原文&#xff1a;http://www.sencha.com/blog/using-the-new-app-watch-command-in-sencha-cmd-4/作者&#xff1a;Don Griffin Don Griffin is a member of the Ext JS core team. He was an Ext JS user for 2 years before joining Sencha and has over 20 years of softwar…

《设计模式解析(第2版)》

2019独角兽企业重金招聘Python工程师标准>>> 1. 软件开过程中的视角 视角 描述 概念 “软件要负责什么&#xff1f;” 规约 “怎么使用软件&#xff1f;” 实现 ”软件怎样履行自己的责任&#xff1f;“ 可能使用的另外一组视角&#xff1a;使用视角和创建/…

Nmap帮助文档解释

目标指定&#xff08;target specifiction&#xff09; 1、用法:Nmap[扫描类型][设置]{设备列表} 注&#xff1a;[]{} -> 中的内容必须有 <> -> 中的内容可以有可以没有 2、地址类型&#xff1a;主机名、ip地址、网段 3、-iL<文件名> 通过文件输入地址 4、-i…

C++ 多线程:future 异步访问类(线程之间安全便捷的数据共享)

文章目录future前言future描述future类成员使用总结future前言 首先查看如下代码 #include <iostream> #include <thread> #include <future> #include <mutex>using namespace std;void fun1(int n,int &x) {int res 1;for (int i n; i>1;…

bldc不同载波频率_广播百科 频率调制

∧ 请关注为星标&#xff0c;在知识的海洋每天进步1%第 463期频率调制&#xff0c;简称“调频”&#xff0c;它是一种使载波的瞬时频率随调制信号的变化规律而变化的调制方法。实现这种调制方法的电路称调频器,广泛用于调频广播、电视伴音、微波通信、锁相电路和扫频仪等方面。…

基于visual Studio2013解决面试题之0403串联字符串

&#xfeff;&#xfeff;&#xfeff;题目解决代码及点评/*有 n个长为 m1的字符串&#xff0c;如果某个字符串的最后m个字符与某个字符串的前m个字符匹配&#xff0c;则两个字符串可以联接&#xff0c;问这n个字符串最多可以连成一个多长的字符串&#xff0c;如果出现循环&…

MIT开放式课程“自然语言处理”介绍

MIT开放式课程“自然语言处理”介绍 发表于 2009年01月2号 由 52nlp从订阅的Google快讯上知道这个“麻省理工学院“开放式课程网页” | 电机工程与计算机科学 | 6.881 2004秋季课程&#xff1a;自然语言处理 | 课堂讲稿”网站&#xff0c;看介绍是MIT开放课程的中文翻译计划&am…

怎么将对象里面部分的属性放到一个空的对象里面去

var obj{name:jack,age:18,sex:male}var {name,age}objvar obj2{name,age}console.log(obj2) //{name: "jack", age: 18} 这是es6的用法 还有其他的3种方法,关于对象复制的 es6 var obj {name: jack,age: 18}var data Object.assign(obj)console.log(data) //{nam…

C++多线程:thread类创建线程的多种方式

文章目录描述函数成员简介总结描述 头文件 <thread> 声明方式&#xff1a;std::thread <obj> 简介 线程在构造关联的线程对象时立即开始执行&#xff0c;从提供给作为构造函数参数的顶层函数开始。如果顶层函数抛出异常&#xff0c;则调用 std::terminate。正如我…

C C++的编译过程详解

C/C编译过程C/C编译过程主要分为4个过程1) 编译预处理2) 编译、优化阶段3) 汇编过程4) 链接程序一、编译预处理&#xff08;1&#xff09;宏定义指令&#xff0c;如#define Name TokenString&#xff0c;#undef等。 对于前一个伪指令&#xff0c;预编译所要做的是将程序中的所有…

python queue 调试_学Python不是盲目的,是有做过功课认真去了解的

有多少伙伴是因为一句‘人生苦短&#xff0c;我用Python’萌生想法学Python的&#xff01;我跟大家更新过很多Python学习教程普及过多次的Python相关知识&#xff0c;不过大家还是还得计划一下Python学习路线&#xff01;Python入门前&#xff0c;你必须得知道这些&#xff0c;…

嘿嘿 刚刚进来 记录下

大家好&#xff0c;小弟刚刚进来&#xff0c;记录一下&#xff0c;发现这个网站真是太好了&#xff01;&#xff01;转载于:https://blog.51cto.com/wikowin/1112039

Oracle数据库查看表空间是否为自增的

表空间是有数据文件组成的&#xff0c;所以看表空间是否自增即看数据文件&#xff0c;如下查自增的表空间&#xff1a; select tablespace_name,file_name,autoextensible from dba_data_files where autoextensibleYES; autoextensible: YES/NO 即表示是否自增。 转载于:https…

C++多线程:异步操作std::async和std::promise

文章目录std::async简介使用案例std::promise简介成员函数总结之前的文章中提到了C多线程中的异步操作机制 C 多线程&#xff1a;future 异步访问类&#xff08;线程之间安全便捷的数据共享)&#xff0c;接下来分享关于异步操作中 async和 promise的相关使用总结。std::async …