组装恢复rbd
标签: ceph,ceph实验,rbd
cluster相关环境:
# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
# ceph -v
ceph version 12.2.1 (3e7492b9ada8bdc9a5cd0feafd42fbca27f9c38e) luminous (stable)
比如需要恢复所有前缀为 rbd_data.1041643c9869 的块设备,该块设备名为foo,文件系统类型为xfs,大小1G,挂载到了/root/foocon/目录下,并有三个文件:
[root@node3 ~]# ls foocon/
file1.txt file2.txt file3.txt
[root@node3 ~]# cat foocon/file2.txt
Ceph
2222222222222222222222222222222222222
恢复该foo块设备需要进行下面的操作
1. 从集群下载前缀相同的所有对象到本地:
1.1 查看rbd存储池中的对象:
[root@node3 ~]# rados -p rbd ls|sort
rbd_data.1041643c9869.0000000000000000
rbd_data.1041643c9869.0000000000000001
rbd_data.1041643c9869.000000000000001f
rbd_data.1041643c9869.000000000000003e
rbd_data.1041643c9869.000000000000005d
rbd_data.1041643c9869.000000000000007c
rbd_data.1041643c9869.000000000000007d
rbd_data.1041643c9869.000000000000007e
rbd_data.1041643c9869.000000000000009b
rbd_data.1041643c9869.00000000000000ba
rbd_data.1041643c9869.00000000000000d9
rbd_data.1041643c9869.00000000000000f8
rbd_data.1041643c9869.00000000000000ff
rbd_directory
rbd_header.1041643c9869
rbd_id.foo
rbd_info
1.2 从集群获取前缀为 rbd_data.1041643c9869 的所有对象到本地:
如:
[root@node3 ~]# rados -p rbd get rbd_data.1041643c9869.0000000000000000 rbd_data.1041643c9869.0000000000000000
[root@node3 ~]# rados -p rbd get rbd_data.1041643c9869.0000000000000001 rbd_data.1041643c9869.0000000000000001
……
2. 创建脚本组装该rbd:
2.1 创建 mkrbd.sh 脚本:
[root@node3 ~]# touch mkrbd.sh
[root@node3 ~]# chmod +x mkrbd.sh
2.2 编辑脚本:
[root@node3 ~]# vi mkrbd.sh
输入以下内容:
#!/bin/sh
# Rados object size 这是刚刚的4M的大小
obj_size=4194304
# DD bs value
rebuild_block_size=512
#rbd="${1}"
rbd="foo" #生成的块名
#base="${2}" #prefix
base="rbd_data.1041643c9869"
#rbd_size="${3}" #1G
rbd_size="1073741824"
base_files=$(ls -1 ${base}.* 2>/dev/null | wc -l | awk '{print $1}')
if [ ${base_files} -lt 1 ]; then
echo "COULD NOT FIND FILES FOR ${base} IN $(pwd)"
exit
fi
# Create full size sparse image. Could use truncate, but wanted
# as few required files and dd what a must.
dd if=/dev/zero of=${rbd} bs=1 count=0 seek=${rbd_size} 2>/dev/null
for file_name in $(ls -1 ${base}.* 2>/dev/null); do
seek_loc=$(echo ${file_name} | awk -v os=${obj_size} -v rs=${rebuild_block_size} -F. '{print os*strtonum("0x" $NF)/rs}')
dd conv=notrunc if=${file_name} of=${rbd} seek=${seek_loc} bs=${rebuild_block_size} 2>/dev/null
done
执行该脚本后在本地生成了一个foo的文件
2.3 查看挂载组装后的foo:
[root@node3 ~]# file foo
foo: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
[root@node3 ~]# du -sh foo
11M foo
[root@node3 ~]# ll -h foo
-rw-r--r-- 1 root root 1.0G 10月 17 16:04 foo
可以看出foo是xfs文件,使用了11M,大小为1G
[root@node3 ~]# mount foo /mnt
mount: 文件系统类型错误、选项错误、/dev/loop0 上有坏超级块、
缺少代码页或助手程序,或其他错误
有些情况下在 syslog 中可以找到一些有用信息- 请尝试
dmesg | tail 这样的命令看看。
[root@node3 ~]# dmesg|tail
[88818.307314] XFS (rbd0): Mounting V5 Filesystem
[88818.865978] XFS (rbd0): Ending clean mount
[91099.845834] bash (6208): drop_caches: 1
[91492.345582] bash (6208): drop_caches: 1
[93485.275727] libceph: osd2 down
[93485.275739] libceph: osd5 down
[93495.518099] libceph: osd2 up
[93495.518165] libceph: osd5 up
[95288.897917] loop: module loaded
[98449.535689] XFS (loop0): Filesystem has duplicate UUID 313b2d89-f4bc-4ee6-a1d8-a996190222fd - can't mount
挂载foo时出现了上面的错误提示,这是因为原来的foo块是/dev/rbd0的克隆,所以foo的UUID是和/dev/rbd0的是一样的,这时候我们umount /foo即可:
[root@node3 ~]# umount foo/
[root@node3 ~]# mount foo /mnt
[root@node3 ~]# ls /mnt/
file1.txt file2.txt file3.txt
[root@node3 ~]# cat /mnt/file2.txt
Ceph
2222222222222222222222222222222222222
可以看到已将完全恢复出了原来的foo块设备的内容
参考文献:
组装恢复rbd的更多相关文章
- ceph中rbd的增量备份和恢复
ceph中rbd的增量备份和恢复 ceph的文档地址:Ceph Documentation 在调研OpenStack中虚机的备份和恢复时,发现OpenStack和ceph紧密结合,使用ceph做O ...
- rbd的增量备份和恢复
前言 快照的功能一般是基于时间点做一个标记,然后在某些需要的时候,将状态恢复到标记的那个点,这个有一个前提是底层的东西没用破坏,举个简单的例子,Vmware 里面对虚拟机做了一个快照,然后做了一些系统 ...
- ceph的rbd备份软件ceph-backup
teralytics是一家国外的大数据公司,这个是他们开源的ceph的备份的工具,在twitter上搜索相关信息的时候看到,觉得不错就拿来试用一番 这是个什么软件 一个用来备份 ceph 的 rbd ...
- CEPH-2:rbd功能详解及普通用户应用ceph集群
ceph集群rbd使用详解 一个完整的ceph集群,可以提供块存储.文件系统和对象存储. 本节主要介绍rbd存储功能如何灵活的使用,集群背景: $ ceph -s cluster: id: 53717 ...
- ceph mimic版本 部署安装
ceph 寻址过程 1. file --- object映射, 把file分割成N个相同的对象 2. object - PG 映射, 利用静态hash得到objectID的伪随机值,在 "位 ...
- TCP/IP协议(转)
摘自:http://jpkc.nwpu.edu.cn/jp2006/rjjs/work/dzjc/rppt/chap08/08CH0005.HTM TCP/IP(Transmission Contro ...
- [Java开发之路](9)对象序列化与反序列化
1. 对象序列化 当你创建对象时.仅仅要你须要.它会一直存在,可是程序终止时,不管何时它都不会继续存在.虽然这样做是很有意义的,可是在某些情况下.假设程序不执行时扔能存在而且保存其信息,那将对我们很实 ...
- Ceph osd故障恢复
1 调高osd的日志等级 加上红框那一行就可以了 osd的日志路径:/var/log/ceph/ceph-osd.3.log 注意:加上了这一行后日志会刷很多,所以要特别注意日志容量的变化,以防把v ...
- Ceph块设备
Ceph块设备 来自这里. 块是一个字节序列(例如,一个512字节的数据块).基于块的存储接口是最常见的存储数据的方法,它通常基于旋转介质,像硬盘.CD.软盘,甚至传统的9道磁带. 基本的块设备命令 ...
随机推荐
- GDKOI2017游记
去年的GDKOI在寒假(虽然我没参加),但由于一些机♂缘♂巧♂合♂,比赛时间变成了开学之后的第一周,于是直接导致了当我的同学们在认真学习的同时,我在广州无所事事地和同学谈♂笑♂风♂生♂.(太好了,可以 ...
- easyui,datagrid 分页,跨域访问数据
http://blog.itpub.net/30980622/viewspace-2051035/ 思路: 1.通过配置属性,loader加载跨域资源 2.获得$(pager).pagination对 ...
- ggplot笔记002——qplot()函数
qplot()函数 一年前就听说过ggplot,很多人都说ggplot强大,ggplot无所不能,从今天开始就让我们一起来见证一下这个神奇的R包. 首先要加载ggplot2: 1 if(!suppre ...
- ZooKeeper服务-操作(API、集合更新、观察者、ACL)
操作 create:创建一个znode(必须要有父节点)delete:删除一个znode(该znode不能有任何子节点)exists:测试一个znode是否存在并且查询它的元数据getACL,setA ...
- 手把手教你安装SSL证书升级https
是不是觉得别人网站前面的小绿锁很好看? 而且,Google官方也正式承认过https是影响搜索排名的一个因素,那么如何将自己的网站全面升级为https呢?今天的内容就介绍一下如何将部署在Nginx的W ...
- linux系统内SAMBA共享问题
最近将项目迁移到了公司服务器上,以后客户端调试和服务端开发都要去链接这台服务器,但是开发就需要调试,也需要log信息,同一局域网内,如何链接服务器并随时查看服务器上的log信息呢? 今天搞了一下,把步 ...
- 关于选中的磁盘具有MBR分区表。在EFI系统上,Windows只能安装到GPT磁盘。问题解决
昨天在为一位学弟装系统的时候需要了这个问题,现在把解决问题的步骤写下来. 在此界面按shift+F10 启动cmd命令行模式 在cmd模式中输入diskpart,进入diskpart模式 此时,lis ...
- centos 验证mysql的安装
一.验证mysql是否安装 1.whereis mysql:如果安装了mysql就会显示mysql安装的地址 2.which mysql:查看文件的运行地址 3.chkconfig --list my ...
- ssh学习(1)
雇员薪资管理系统(crud) ①先搞定spring ②引入spring包 ③编写applicationContext.xml文件(或者beans.xml),我们把该文件放在src目录下 ④测试一下sp ...
- hzau 1210 Happiness
1210: Happiness Time Limit: 1 Sec Memory Limit: 1280 MBSubmit: 1149 Solved: 301[Submit][Status][We ...