前言

之前在filestore里面,pg是直接暴露到文件系统的,也就是可以直接进去查看或者拷贝,在极端情况下,多个osd无法启动,pg无法导出的时候,那么对pg内部对象的操作处理,是可以作为最后恢复数据的一种方式的

这个在bluestore里面就没那么直接了,之前也碰到过一次,osd无法启动,内部死循环,pg无法export,osd就僵死在那里了,实际上,bluestore也提供了接口把对象能够直接显示出来

具体操作实践

我们选择一个pg 1.7

[root@lab101 ceph]# ceph pg dump|grep 1.7
dumped all
1.7 128 0 0 0 0 524353536 1583 1583 active+clean 2019-07-26 10:05:17.715749 14'3583 14:3670 [1] 1 [1] 1 0'0 2019-07-26 10:01:20.337218 0'0 2019-07-26 10:01:20.337218

可以看到pg 1.7是有128个对象存储在osd.1上

检查挂载点

[root@lab101 ceph]# df -h|grep ceph-1
tmpfs 16G 48K 16G 1% /var/lib/ceph/osd/ceph-1

可以看到是挂载到tmpfs的,我们先停止掉osd.1

我们把osd的数据挂载起来

[root@lab101 ceph]# ceph-objectstore-tool --op fuse --data-path /var/lib/ceph/osd/ceph-1 --mountpoint /osdmount/
mounting fuse at /osdmount/ ...

开另外一个终端

[root@lab101 ~]# df -h|grep osdmount
foo 3.7T 3.7T 3.7T 51% /osdmount

可以看到有了新的挂载点,我们看下里面的数据结构

我们随便选取一个对象

[root@lab101 ~]# ll /osdmount/1.7_head/all/#1\:fc00bae4\:\:\:rbd_data.10166b8b4567.00000000000001fc\:head#/data
-rwx------ 1 root root 4194304 Jan 1 1970 /osdmount/1.7_head/all/#1:fc00bae4:::rbd_data.10166b8b4567.00000000000001fc:head#/data
[root@lab101 ~]# md5sum /osdmount/1.7_head/all/#1\:fc00bae4\:\:\:rbd_data.10166b8b4567.00000000000001fc\:head#/data
7def453c4a818e6cd542bfba4dea9943 /osdmount/1.7_head/all/#1:fc00bae4:::rbd_data.10166b8b4567.00000000000001fc:head#/data

这个对象的名称为:rbd_data.10166b8b4567.00000000000001fc

我们把数据弄到本地

[root@lab101 ~]# cp /osdmount/1.7_head/all/#1\:fc00bae4\:\:\:rbd_data.10166b8b4567.00000000000001fc\:head#/data /tmp/rbd_data.10166b8b4567.00000000000001fc-inbluestore

我们通过rados的接口查询获取这个对象

[root@lab101 ceph]# rados -p rbd ls|grep 00000000000001fc
rbd_data.10166b8b4567.00000000000001fc
[root@lab101 ceph]# rados -p rbd get rbd_data.10166b8b4567.00000000000001fc /tmp/rbd_data.10166b8b4567.00000000000001fc-radosget

现在就有下面两个对象了

[root@lab101 ceph]# ls /tmp/rbd_data.10166b8b4567.00000000000001fc-* -hl
-rwx------ 1 root root 4.0M Jul 26 10:17 /tmp/rbd_data.10166b8b4567.00000000000001fc-inbluestore
-rw-r--r-- 1 root root 4.0M Jul 26 10:19 /tmp/rbd_data.10166b8b4567.00000000000001fc-radosget

这两个对象分别从rados获取的,也就是前端获取的,一个从底层磁盘提取的,也就是模拟的故障提取

我们来比较一下两个文件的md5值

[root@lab101 ceph]# md5sum /tmp/rbd_data.10166b8b4567.00000000000001fc-*
7def453c4a818e6cd542bfba4dea9943 /tmp/rbd_data.10166b8b4567.00000000000001fc-inbluestore
7def453c4a818e6cd542bfba4dea9943 /tmp/rbd_data.10166b8b4567.00000000000001fc-radosget

可以看到文件的内容一样的了

因此通过这个方法在底层获取对象是可以获取到正确的对象的

总结

之前对bluestore的感觉一直不太好,是因为一旦出现故障,数据的提取相当困难,之前还有过bluestore内部数据库损坏无法启动osd的,如果用过filestore,应该都做过很多故障的修复,leveldb的数据库的损坏,从其他机器弄回来,bluestore这个在封装以后,一些操作变的困难,虽然也有提供一些repair的工具,但是有时还是无法生效,并不是每个人都能够去做代码级的修复

随着文件系统对外接口提供的越来越多的时候,修复的方式方法也会增多,相信这个也会越来越稳定的,我们需要做的就是,在任何故障下,做最大的可能去修复,才能更好的面对未来的故障

变更记录

Why Who When
创建 武汉-运维-磨渣 2019-07-26

bluestore对象挂载到系统进行提取的更多相关文章

  1. 挂载nfs系统问题之: Root-NFS: Server returned error -13 while mounting

    今天换了个路由器,由于是自动分的IP,现在的IP和之前的不在同一网段.以前是192.168.0.xxx,现在是192.168.1.xxx.本以为将serverip,ipaddr,bootargs这些参 ...

  2. Oracle 用户、对象权限、系统权限

    --================================ --Oracle 用户.对象权限.系统权限 --================================  一.用户与模式 ...

  3. Oracle笔记之对象权限与系统权限总结

    对象权限与系统权限 创建表和创建session是系统权限: 系统管理员是有权限去訪问其它表的 以sys登录     sqlplus sys/on_change_install as sysdba; 创 ...

  4. 给Amazon ec2 增加卷(Volume)并挂载到系统

    给Amazon ec2 增加卷(Volume)并挂载到系统 前言 导师让师弟把实验的网站挂到亚马逊的EC2云服务器上.师弟对linux不太熟悉.就跑过来问我.于是花了一个小时搞定.问题主要是将EC2的 ...

  5. 第一个lucene程序,把一个信息写入到索引库中、根据关键词把对象从索引库中提取出来、lucene读写过程分析

    新建一个Java Project :LuceneTest 准备lucene的jar包,要加入的jar包至少有: 1)lucene-core-3.1.0.jar     (核心包) 2) lucene- ...

  6. Linux系统挂载Windows系统下的共享文件

    声明:本文是小编借鉴大神们的经验,仅供学习使用. 第一步:在Windows系统上选择要共享的文件夹,右击“属性”-“共享”-“高级共享”-勾选“共享此文件”-设置共享名-“权限”-“添加”-“高级”- ...

  7. C/C++注册动态对象到Lu系统并进行运算符重载

    欢迎访问Lu程序设计 C/C++注册动态对象到Lu系统并进行运算符重载 1 说明 要演示本文的例子,你必须下载Lu32脚本系统.本文的例子需要lu32.dll.lu32.lib.C格式的头文件lu32 ...

  8. 嵌入式Linux系统挂载NFS系统

    在建立交叉编译环境的时候,经常需要网嵌入式Linux环境中拷贝文件,nfs网络共享文件系统是一种很方便的方式. 在嵌入式Linux挂载nfs系统,需要用到如下命令: mount -t nfs -o n ...

  9. Delphi - 互斥对象下实现系统的单例模式

    使用CreateMutex函数创建互斥对象 利用Windows系统函数CreateMutex(),找出当前系统是否已经存在指定进程的实例,如果没有则创建一个互斥体. CreateMutex函数原型如下 ...

随机推荐

  1. 深入理解RabbitMQ中的prefetch_count参数

    前提 在某一次用户标签服务中大量用到异步流程,使用了RabbitMQ进行解耦.其中,为了提高消费者的处理效率针对了不同节点任务的消费者线程数和prefetch_count参数都做了调整和测试,得到一个 ...

  2. 题解 CF1428A 【Box is Pull】

    通过理解题意,我们发现: 当需要拐弯的时候,兔子需要先走回箱子的位置,再走向拐弯的方向.则拐弯操作的花费为 \(2\) .而直行的操作花费为 \(1\) . 所以, 如果不需要拐弯,也就是 \(x1= ...

  3. golang 爬取百度贴吧绝地求生页面

    package main import ( "github.com/antchfx/htmlquery" "io" "net/http" & ...

  4. spring boot: 用thymeleaf嵌套循环展示多层数据(spring boot 2.3.2)

    一,什么情况下会用到嵌套循环? 当我们展示多个分类时,每个分类下又展示出推荐的前几个商品,   这时我们需要用到嵌套循环 看一个例子: 说明:刘宏缔的架构森林是一个专注架构的博客,地址:https:/ ...

  5. ansible的copy模块应用(ansible 2.9.5)

    一,copy模块的作用: 复制文件到受控的远程主机 说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest 对应的源码可以访问 ...

  6. IntelliJ IDEA 15款 神级超级牛逼插件推荐(超赞,谁用谁知道)

    满满的都是干货  所有插件都是在 ctrl+alt+s 里的plugins 里进行搜索安装 1.CodeGlance 代码迷你缩放图插件 2. Codota 代码提示工具,扫描你的代码后,根据你的敲击 ...

  7. vue知识点11

    1. Vue.js 是什么       Vue是一套用于构建用户界面的渐进式框架 2. vue的环境搭建(Vue2 ) 3. 经典的hello world         new Vue({      ...

  8. 攻防世界-web2

    打开题目直接一梭子代码,给我们了个加密的密文,然我们解出flag 审计一波 先时将flag字符串逆序,然后每一个ascii码数值+1,然后base64加密,然后逆序,然后再rot13加密 得到加密的密 ...

  9. 用c++获取随机数

    计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子.(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535 ...

  10. 利用数据库拿shell的一些姿势

    0x01.利用MySQL命令导出getshell 利用条件: 1.拥有网站的写入权限 2.Secure_file_priv参数为空或者为指定路径 3.知道网站的绝对路径 方法: 通过into outf ...