Ceph入门到精通-恢复BlueStore中对象数据

news2024/11/19 16:42:38

1.基本原理介绍

1.1 ceph中的对象(object)

在Ceph存储中,一切数据最终都会以对象(Object)的形式存储在硬盘(OSD)上,每个的Object默认大小为4M。

通过rados命令,可以查看一个存储池中的所有object信息,例如下面的命令列出了存储池中的所有object。

rados -p pool-842bd759258f4ec9843afd1e78549350 ls

1.2 rbd块与object之间的对应关系

知道一切数据都会以object的形式存在于硬盘中后,我们还需要了解对象和rbd块之间的对应关系是什么。在ceph存储中,每个rbd块都有一个block_name_prefix。这个值是唯一的,通过rbd info或rados命令可以查询到,每个存储rbd块真实数据的对象会以这个作为名称前缀。所以通过blocak_name_prefix我们可以找到rbd块对应的对象有哪些。

1.3 rbd块中object的先后顺序如何区分

我们知道,一个object的大小为4M,因此一个rbd块对应的object通常会有多个。那么我们如何知道一个object对应rbd块中的哪一部分数据呢?要知道这个,我们就需要了解一下object的命令规则。

Object 名称由三部分组成:

  • rbd_data.:这是 RBD 存储卷的默认块名称前缀,用来标识这个 Object 存储的是一个 RBD 存储卷。
  • 115ea266096aee.:这是 RBD 存储卷的 ID,用来唯一标识一个 RBD 存储卷。每个 RBD 存储卷有一个唯一的 ID,可以通过 rbd info 命令查看。
  • 0000000000000c45:这是块的序号,用于标识这个 Object 存储的是 RBD 存储卷中的第几个块。在 RBD 存储卷中,每个块都有一个唯一的序号。采用的是16进制

所以通过objec的序号,我们可以知道object中保存了rbd块中哪个位置的数据。

2.object操作工具介绍

ceph-objectstore-tool是ceph提供的一个能对osd中存储的object进行增删改查的工具。该工具只能操作处于停止状态的osd。

下面的命令列出osd2中所有的object,包括object所属的pg和位置信息

ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-2 --op list

下面的命令是根据上一条命令获取的信息将object导出到本地的文件test.raw中

ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-2/ --type bluestore --pgid $pgid ‘$Object_attr’ get-bytes > test.raw

3.离线导出数据实战
3.1数据导出整体流程

  1. 通过rbd的name,获取rbd块的object前缀
  2. 停止掉一台服务器上的全部osd,通过object前缀找出rbd相关的所有对象数据并导出。三副本故障域为服务器的情况下,如果ceph集群有四台或以上存储服务器的话,一台服务器上可能不具备一个rbd块的完整副本,需要将多个节点的osd上导出的数据拼成一个完整的副本。
  3. 通过dd命令将所有对象数据拼接成一个完整的rbd卷

3.2手动导出数据

rados -p $pool-name listomapvals rbd_directory|grep $rbd_name -C 5  ##获取rbd块的blocak_name_prefix信息

通过上图可以看到rbd的id为59adb9d46665c,可以得到blocak_name_prefix为rbd_data.59adb9d46665c

接着查询osd2中与rbd块相关的对象,查询前需要先将osd2停,输出的结果中一行为一个对象。

systemctl stop ceph-osd@2
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-2 --op list 2>/dev/null  | grep rbd_data.59adb9d46665c

再通过查询到的object信息,将object数据导出到本地

ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-$i/ --type bluestore --pgid $PGID '$OBJECT_JSON' get-bytes > $RBD_PREFIX/$OID

通过dd命令创建一个新卷,再将object中的数据复制到新卷中,复制对象中的数据时,要根据object的位置调整数据写入的位置,即seek的值。object数据复制操作要执行多次,直到所有object中的数据都复制到创建的新卷中,数据导出操作完成。

dd if=/dev/zero of=rbd_data.1cabc42df0c8c4.raw bs=1 count=0 seek=2147483648  ##创建一个空文件,用来放对象的中的数据


echo $(( 0x00000000000000ff ))  ##16进制转十进制,获取对象在rbd块中的位置信息


dd if=rbd_data.1cabc42df0c8c4.0000000000000000 of=rbd_data.1cabc42df0c8c4.raw seek=0 bs=4M count=1 conv=notrunc   ##将对象中的数据复制到之前创建的空文件中。

数据导出完成后,默认是一个raw格式的文件,可以根据需要转换成qcow2或其他格式的文件。

qemu-img convert -f raw -O qcow2 -p rbd_data.115ea266096aee.build.raw restore.qcow2

3.3通过脚本导出数据

手动导出rbd数据是一个十分繁琐的操作,因此下面提供了两个脚本,可以完成导出对象数据,以及将对象数据合并成一个新卷的操作。

数据导出脚本,将某个rbd中的对象从osd中导出到本地。脚本执行前有两个地方需要修改。RBD_PREFIX的值修改为要导出rbd的blocak_name_prefix。declare osds的值修改为要执行脚本服务器上所有的osd id。

#!/bin/bash
# Export rbd_data.xxxxxxxxx to local file from all inactive osds


# Number of concurrent
N=64
RBD_PREFIX=rbd_data.39c97c1ed6026c 
mkdir $RBD_PREFIX


#all osd id in one ceph node
declare osds=(8 9 10 11) 
for i in ${osds[@]}
do
(echo $RBD_PREFIX in osd $i


echo "Export object..."
for j in $(ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-$i --op list 2>/dev/null|grep $RBD_PREFIX)
do
echo $j
PGID=$(echo $j|jq ".[0]" -r)
OBJECT_JSON=$(echo $j | jq ".[1]")
OID=$(echo $j | jq ".[1].oid" -r)
ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-$i/ --type bluestore --pgid $PGID "$OBJECT_JSON" get-bytes > $RBD_PREFIX/$OID
done
) &


if [[ $(jobs -r -p | wc -l) -ge $N ]]; then
wait
fi
done
wait
echo "All done."

数据合并脚本。将导出到本地的对象中的数据复制到一个新卷中。脚本在执行前需要将RBD_PREFIX的值修改为要导出rbd的blocak_name_prefix。

#!/bin/bash
RBD_PREFIX=rbd_data.3262b63ba984f7
IMAGE_NAME=$RBD_PREFIX.build.raw
rm -f $IMAGE_NAME
dd if=/dev/zero of=$IMAGE_NAME bs=1 count=0 seek=2147483648
for i in $(ls ./$RBD_PREFIX | sort)
do
idx=$(echo $i|awk -F '.' '{print $3}')
idxOct=$(echo $((0x$idx)))
dd if=./$RBD_PREFIX/$i of=$IMAGE_NAME seek=$idxOct bs=4M count=1 conv=notrunc
done

4 总结

ceph本身提供了rbd export命令用来导出rbd块。用命令导出数据的方式更简单直接。本文主要针对某些osd无法启动、rbd命令无法执行的场景,可以通过文中的方式来进行数据导出。同时通过这种导出对象的方式,我们也能了解ceph数据存储的更多细节。

5 参考资料

https://docs.ceph.com/en/pacifi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1149955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SPI、IIC信号隔离

除了时钟信号SCK不用接上拉,其他信号都需要接10K上拉电阻到3.3V电源。 一、SPI信号隔离: 二、 IIC信号隔离

用例设计需遵循哪些规范标准?

不同的人因经验、方法、技巧不同,同样的用例编写质量差异大。 大家平时编写用例都有遵循哪些规范标准呢? 虽然是一名开发,但是我们做需求时也需要和测试一起进行用例评审,总结一下我们公司在进行用例设计时的标准。 我们公司要求用…

运大模型风起云涌,图解AI如何赋能产业升级?

导读 随着AI技术加速迭代,国内虚拟人市场规模呈现强势增长态势。据艾集咨询数居显示,2022年中国虚以人带动产业市场规模和核心市场规模预测值分别为1866,1亿元和120.8亿元呈现强劲的增长态势。随着数字化娱乐场景需求的增加,AI等技术不断送…

使用Swift模拟用户登录当网获取数据并保存到MySQL中

前言 当当网作为中国最大的综合性网上商城之一,通过爬取当当网数据,我们可以获取商品信息、用户评价、销售数据等宝贵的信息资源。这些数据可以帮助企业了解市场趋势、分析竞争对手、优化产品定价等,从而做出更明智的决策。 为什么使用Swif…

quartus+modesim仿真验证基本流程(使用自带仿真波形编辑器)

文章目录 环境搭建一、quartus设置二、quartus中新建工程三、仿真结果本文演示如何在quartus中启用modelsim进行功能仿真,同时重要一点是利用quartus中自带的仿真波形编辑工具,给输入信号通过图形界面生成想要的波形,之后调用modelsim进行仿真,将仿真结果直接显示在仿真波形…

synchronized总结:怎么保证可见性、有序性、原子性?

synchronized的原子性 synchronized 底层实际上通过JVM来实现的,同一时间只能有一个线程去执行synchronized 中的代码块。 原子性:既然同一时间只有一个线程去运行里面的代码,那么这个操作就是不能被其它线程打断的,所以这里天然…

语音芯片怎么录音 以及如何选择合适的录音芯片

一、语音芯片如何录音 语音芯片怎么录音 以及如何选择合适的录音芯片 语音芯片,其中就有一个品类,称之为录音芯片 其实他们是合并在一个芯片里面的,也就是说,录音芯片肯定是又可以录又可以播 但是能播放的语音芯片&#xff0c…

OA——菜单里无法找到流程监控

在门户引擎里面做查看菜单的权限设置 编辑里面的可查看权限管理 把权限给到对应的人员或者部门就可以

恒驰服务 | 华为云数据使能专家服务offering之数仓建设

恒驰大数据服务主要针对客户在进行智能数据迁移的过程中,存在业务停机、数据丢失、迁移周期紧张、运维成本高等问题,通过为客户提供迁移调研、方案设计、迁移实施、迁移验收等服务内容,支撑客户实现快速稳定上云,有效降低时间成本…

python的pytorch和torchvision利用wheel文件安装

python的pytorch和torchvision利用wheel文件安装 在做人工智能的时候,我们需要下载pytorch和torchvision,那么如何下载呢。利用wheel文件pip安装 下载 首先要看你的python版本,打开命令行,输入: python -V就可以看…

ip划分与私公网ip、ip的传递

报文问路:1、不知道跳转默认路由器,2、知道路径,向对应路径发出报文,3、路口路由器,下一步就是目标主机在哪。 想要通信必须同在一个局域网,其实将公网就可以看作一个大型的局域网。 在同一个局域网内发送…

制药、饮料等流程制造业主数据如何管?

业务背景——制造行业的数据转型过程中,主数据管理是成功的必要条件 MASTER DATA MANAGEMENT 流程制造是指被加工对像不间断地通过生产设备,通过一系列的加工装置使原材料进行化学或物理变化,最终得到产品。 由于流程制造中物料的变动性强&a…

C++ 写一个Data类的注意问题

Data类 声明和定义分离的一些问题 声明里面我们不带缺省参数&#xff0c;定义我们给缺省参数&#xff0c;如下面两段代码&#xff1a; Data.h#pragma once #include<iostream> using namespace std; class Data { public:Data(int year,int month,int day);private:in…

Python基础入门例程21-NP21 增加派对名单(二)(列表)

本专栏&#xff1a; Python365基础入门例程 作者&#xff1a;heda3 最近的博文&#xff1a; 1、Python基础入门例程19-NP19 列表的长度&#xff08;列表&#xff09;-CSDN博客 2、Python基础入门例程18-NP18 生成数字列表&#xff08;列表&#xff09;-CSDN博客 3、Pyth…

spring boot配置ssl(多cer格式)保姆级教程

1. 准备cer格式的证书&#xff1b; 2. 合并cer证书并转化成jks格式的证书 为啥有这一步&#xff0c;因为cer证书配置在spring boot项目中&#xff0c;项目启动不起来。如果有大佬想指导一下可以给我留言&#xff0c;在此先谢过大佬。 1&#xff09;先创建一个jks格式的证…

【教学类-19-04】202310《ABAB式-规律排序涂色-A4竖版2份》(中班)

展示效果&#xff1a; 单人使用样式&#xff1a; 单页打印样式 ​ 打印效果&#xff1a; 背景需求&#xff1a; 中班幼儿需要掌握ABAB规律排序&#xff0c;如下图所示&#xff0c;AB两个元素能外形不同、颜色不同。 2022年11月带领中3班&#xff08;现大3班&#xff09;幼…

maven子模块无法导入jar包问题

明明本地仓库有jar包 maven子模块无法导入jar包&#xff0c;然后放到父项目的pom.xml则可以导入 可以试试更新仓库后&#xff0c;引入成功

这款制作电子画册的网站,好用到爆

要是早点发现这款制作电子画册网站该多好啊&#xff01;由于缺乏相关知识和技能&#xff0c;一直没有找到合适的平台。直到最近&#xff0c;偶然发现了这个网站&#xff0c;才发现原来制作电子杂志如此简单 这个网站就是FLBOOK在线制作电子画册平台&#xff0c;它不仅提供了丰富…

PicoDiagnostics (NVH设备软件)-NVH软件计算原理探究

NVH 问题探讨 PicoDiagnostics (NVH设备软件)对于不同驱动方式的车辆、是否通过OBD口读取转速和速度&#xff0c;后轮差速传动比数值对其频率计算原理也是有影响的。究竟什么时候需要填后轮差速传动比呢&#xff1f;下面做一些探讨&#xff1a; 连接OBD诊断口计算速度&频率…

用思维导图成为职业规划达人

今天&#xff0c;我们来聊聊如何用思维导图来做职业规划&#xff1f;在外面进行职业规划的时候&#xff0c;常常包括以下几项自我认知以及定位、职位的要求以及自身与职位之间的匹配程度。 今天我们就用 在线制图工具ProcessOn&#xff0c;来制作这一份职业规划。 自我分析 …