bluestore对象挂载到系统进行提取
前言
之前在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对象挂载到系统进行提取的更多相关文章
- 挂载nfs系统问题之: Root-NFS: Server returned error -13 while mounting
今天换了个路由器,由于是自动分的IP,现在的IP和之前的不在同一网段.以前是192.168.0.xxx,现在是192.168.1.xxx.本以为将serverip,ipaddr,bootargs这些参 ...
- Oracle 用户、对象权限、系统权限
--================================ --Oracle 用户.对象权限.系统权限 --================================ 一.用户与模式 ...
- Oracle笔记之对象权限与系统权限总结
对象权限与系统权限 创建表和创建session是系统权限: 系统管理员是有权限去訪问其它表的 以sys登录 sqlplus sys/on_change_install as sysdba; 创 ...
- 给Amazon ec2 增加卷(Volume)并挂载到系统
给Amazon ec2 增加卷(Volume)并挂载到系统 前言 导师让师弟把实验的网站挂到亚马逊的EC2云服务器上.师弟对linux不太熟悉.就跑过来问我.于是花了一个小时搞定.问题主要是将EC2的 ...
- 第一个lucene程序,把一个信息写入到索引库中、根据关键词把对象从索引库中提取出来、lucene读写过程分析
新建一个Java Project :LuceneTest 准备lucene的jar包,要加入的jar包至少有: 1)lucene-core-3.1.0.jar (核心包) 2) lucene- ...
- Linux系统挂载Windows系统下的共享文件
声明:本文是小编借鉴大神们的经验,仅供学习使用. 第一步:在Windows系统上选择要共享的文件夹,右击“属性”-“共享”-“高级共享”-勾选“共享此文件”-设置共享名-“权限”-“添加”-“高级”- ...
- C/C++注册动态对象到Lu系统并进行运算符重载
欢迎访问Lu程序设计 C/C++注册动态对象到Lu系统并进行运算符重载 1 说明 要演示本文的例子,你必须下载Lu32脚本系统.本文的例子需要lu32.dll.lu32.lib.C格式的头文件lu32 ...
- 嵌入式Linux系统挂载NFS系统
在建立交叉编译环境的时候,经常需要网嵌入式Linux环境中拷贝文件,nfs网络共享文件系统是一种很方便的方式. 在嵌入式Linux挂载nfs系统,需要用到如下命令: mount -t nfs -o n ...
- Delphi - 互斥对象下实现系统的单例模式
使用CreateMutex函数创建互斥对象 利用Windows系统函数CreateMutex(),找出当前系统是否已经存在指定进程的实例,如果没有则创建一个互斥体. CreateMutex函数原型如下 ...
随机推荐
- 可变数据类型不能作为python函数的参数
可变数据类型:列表.字典 不可变数据类型:整型.浮点型.字符串.元组 为什么可变数据类型不能作为python函数的参数?请看以下例子: def foo(a=[]): a.append(1) retur ...
- 【CF1428D】Bouncing Boomerangs 题解
原题链接 题意简介 毒瘤大模拟 给你一张n*n的图,在图上摆有一些物体.从每一列的底端往上扔回旋镖,每镖中一个东西,回旋镖就会向右转九十度.现在我们知道从每列i底端往上镖时撞上的物体个数ai,试构造出 ...
- centos8上安装phpmyadmin5
一,下载phpmyadmin5: 1,官网地址: https://www.phpmyadmin.net/ 2,下载 [root@yjweb source]# wget https://files.ph ...
- CentOS 6编译安装Redis
[root@localhost ~]# vim /etc/sysconfig/iptables # 添加如下:-A INPUT -m state –state NEW -m tcp -p tcp –d ...
- CentOS7防止root密码被破解
破解root密码 为了防止服务器被破坏,为了守护业务的和平,在服务器安全方面,首先我们要做到密码的安全.那么知道如何破解root密码才能让我们有针对性的防护.另外如果我们忘掉了root密码,也能知道如 ...
- 2020年Java基础超高频面试题汇总(1.2W字详细解析)
1. Java语言有哪些特点 (1)简单易学.有丰富的类库 (2)面向对象(Java最重要的特性,让程序耦合度更低,内聚性更高) (3)与平台无关性(JVM是Java跨平台使用的根本) (4)可靠安全 ...
- 预编译 - Js三部曲
预编译前奏 imply global - 暗示全局变量, window - 全局域 任何变量未经声明即赋值,该变量为全局所有 window 一切声明的 "全局" 变量,归windo ...
- CSS动画菜鸡记录板
Transition 过渡属性: (background 1s linear 0s) 缓动函数 linear,在 easings.net 可找到相应的功能 若想要多次不同执行,用逗号隔开 Animat ...
- s == t 何解?
Integer s=new Integer(9); Integer t=new Integer(9); Long u=new Long(9); (s==t) 这个是错的,只要有new这个关键字 ...
- 开发笔记:PDF生成文字和图片水印
背景 团队手里在做的一个项目,其中一个小功能是用户需要上传PDF文件到文件服务器上,都是一些合同或者技术评估文档,鉴于知识版权和防伪的目的,需要在上传的PDF文件打上水印, 这时候我们需要提供能力给客 ...