文章目录
一、RBD回收机制
ceph RBD默认提供回收站机制trash
,也就是我们可以把块数据放在回收站,在回收站中保持一定的存储周期,当我们后期还需要使用的时候可以在回收站在拿回来。
同样,在公有云也有硬盘的回收站,作用和RBD回收站类似,当我们后不确定是否后期还会使用,回收站会为我们保留一定时间的周期
到期7天后仍未续费的云硬盘,会在回收站中保留7天,这期间您可以续费进行恢复。7天后,这些云硬盘会被彻底释放,不可恢复。
回收站有两个好处
- 可以有效的防止误删除操作 (正常情况下数据就会销毁掉了,但是有了回收站,数据是存放在回收站中)
- 还有一种情况多发生的云存储中,例如我们的服务器忘记续费,过期后默认情况下是直接被释放了,但是有了回收站,数据就会在回收站在为我们保留一段时间
接下来我们将rbd文件删除,并演示如何从回收站中删除和恢复rbd文件
[root@ceph-01 ~]# ceph osd lspools #首先我们查看一下我们的pool
1 abcdocker
2 .rgw.root
3 default.rgw.control
4 default.rgw.meta
5 default.rgw.log
6 default.rgw.buckets.index
7 default.rgw.buckets.data
8 cephfs_data
9 cephfs_metadata
[root@ceph-01 ~]# rbd -p abcdocker ls #这里可以找到之前创建的rbd文件
abcdocker-rbd.img
#这里我们在创建一块rbd文件,为我们rbd创建一个10G的rbd块存储
[root@ceph-01 ~]# rbd create abcdocker/ceph-trash.img --size 10G #创建名称为ceph-trash的rbd文件,大小为10G
[root@ceph-01 ~]# rbd -p abcdocker ls
abcdocker-rbd.img
ceph-trash.img
#rbd文件大小
[root@ceph-01 ~]# rbd info abcdocker/ceph-trash.img
rbd image 'ceph-trash.img':
size 10 GiB in 2560 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 32109b54fb476
block_name_prefix: rbd_data.32109b54fb476
format: 2
features: layering
op_features:
flags:
create_timestamp: Wed Mar 9 15:47:10 2022
access_timestamp: Wed Mar 9 15:47:10 2022
modify_timestamp: Wed Mar 9 15:47:10 2022
rbd删除操作
默认情况下,删除rbd镜像文件是直接删除,没有保留到回收站。在回收站中也没有进行保留
#第一种: 直接删除,不存放到回收站
[root@ceph-01 ~]# rbd rm abcdocker/ceph-trash.img
Removing image: 100% complete...done.
[root@ceph-01 ~]# rbd -p abcdocker ls
abcdocker-rbd.img
#第二种: 将RBD文件移动到回收站
[root@ceph-01 ~]# rbd trash move abcdocker/ceph-trash.img --expires-at 20220310
#trash 表示存放到回收站
#move 移动操作
#abcdocker/ceph-trash.img pool为abcdocker,rbd文件为ceph-trash.img
#--expires-at 表示释放时间,日期只可以精确到日
#移动到回收站后,在正常的资源池已经看不到。但是在回收站中还可以看到
[root@ceph-01 ~]# rbd -p abcdocker ls
abcdocker-rbd.img
[root@ceph-01 ~]# rbd trash -p abcdocker ls
32142766bcf53 ceph-trash.img
rbd回收站找回操作
前面说我们通过trash move
将rbd文件移动到回收站,例如后面我们想把rbd文件找回,可以通过下面的方式进行找回操作
[root@ceph-01 ~]# rbd trash -p abcdocker ls #查看回收站中的rbd文件
32142766bcf53 ceph-trash.img
[root@ceph-01 ~]# rbd trash restore -p abcdocker 32142766bcf53 #恢复到abcdocker pool中
[root@ceph-01 ~]# rbd trash -p abcdocker ls #再次查看回收站中的rbd文件
[root@ceph-01 ~]# rbd -p abcdocker ls #查看pool中的rbd文件已经恢复
abcdocker-rbd.img
ceph-trash.img
二、RBD镜像制作快照
和云硬盘一样,RBD也是支持快照的功能,对某个时刻的RBD文件进行保留生成快照。
RBD是块存储基于文件系统上的,我们在生成快照时需要确保文件系统正常。否则生成的快照也出现损坏
云硬盘也属于块存储,和RBD一样支持快照。 (同时,公有云还可以定期为云硬盘做快照)
我们使用之前创建的rbd文件,将rbd挂载到本地的文件系统中,写入文件并做快照
[root@ceph-01 ~]# rbd -p abcdocker ls #首先查看rbd文件中的设备
abcdocker-rbd.img
ceph-trash.img
[root@ceph-01 ~]# rbd device map abcdocker/ceph-trash.img #将rbd文件挂载到本地
/dev/rbd0
[root@ceph-01 ~]# mkfs.ext4 /dev/rbd0 #格式化ceph-trash.img设备
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=1024 blocks, Stripe width=1024 blocks
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information:
done
[root@ceph-01 ~]# mount /dev/rbd0 /mnt/ #将/dev/rbd0设备挂载到/mnt下
[root@ceph-01 ~]# echo "i4t.com" >/mnt/abcdocker.txt #写入测试文件查看
[root@ceph-01 ~]# cat /mnt/abcdocker.txt
i4t.com
[root@ceph-01 ~]# df -h #df -h已经可以看到挂载点了
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 50G 2.3G 48G 5% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 33M 1.9G 2% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
tmpfs 1.9G 24K 1.9G 1% /var/lib/ceph/osd/ceph-0
tmpfs 1.9G 24K 1.9G 1% /var/lib/ceph/osd/ceph-3
192.168.31.20:6789:/ 180G 35G 146G 20% /abcdocker
tmpfs 380M 0 380M 0% /run/user/1000
/dev/rbd0 9.8G 37M 9.2G 1% /mnt
通过device ls
可以看到镜像名称和对应的挂载点
[root@ceph-01 mnt]# rbd device ls
id pool namespace image snap device
0 abcdocker ceph-trash.img - /dev/rbd0
1 abcdocker ceph-test-01.img - /dev/rbd1
2 abcdocker ceph-temp.img - /dev/rbd2
3 abcdocker abcdocker-rbd.img - /dev/rbd3
4 abcdocker ceph-trash.img - /dev/rbd4
取消device 映射
[root@ceph-01 new]# rbd device ls
id pool namespace image snap device
0 abcdocker ceph-temp.img - /dev/rbd0
1 abcdocker ceph-bak.img - /dev/rbd1
2 abcdocker ceph-bak-new.img - /dev/rbd2
[root@ceph-01 new]# rbd device unmap /dev/rbd0 #后面参数为device目录
[root@ceph-01 new]# rbd device ls
id pool namespace image snap device
1 abcdocker ceph-bak.img - /dev/rbd1
2 abcdocker ceph-bak-new.img - /dev/rbd2
接下来我们创建快照,将现在的状态进行保存
[root@ceph-01 ~]# rbd -p abcdocker ls #查看pool下的rbd文件
abcdocker-rbd.img
ceph-trash.img
[root@ceph-01 ~]# rbd snap create abcdocker/ceph-trash.img@snap_test_2022-03-09 #执行快照备份
#snap为快照参数
#abcdocker为pool名称
#ceph-trash.img 为rbd文件
#@snap_test_2022-03-09为快照名称
[root@ceph-01 ~]# rbd snap ls abcdocker/ceph-trash.img #使用ls命令可以查看快照列表,以及创建时间
SNAPID NAME SIZE PROTECTED TIMESTAMP
4 snap_test_2022-03-09 10 GiB Wed Mar 9 16:36:23 2022
删除快照可以通过下面的命令
[root@ceph-01 ~]# rbd snap remove abcdocker/ceph-trash.img@snap_test_2022-03-09 #格式和创建的格式相同,命令替换为remove (相当于rm)
Removing snap: 100% complete...done.
[root@ceph-01 ~]# rbd snap ls abcdocker/ceph-trash.img
##如果我们镜像没有在使用了,可以通过purge直接删除所有快照
[root@ceph-01 ~]# rbd snap purge abcdocker/ceph-trash.img
Removing all snapshots: 100% complete...done.
[root@ceph-01 ~]# rbd snap ls abcdocker/ceph-trash.img
三、RBD快照数据恢复
当我们做好备份后,后续有需求需要回滚。 可以通过下面的命令进行回滚操作。将rbd文件恢复到之前创建好快照的位置
#首先我们删除现在rbd挂载中的文件
[root@ceph-01 ~]# rm /mnt/abcdocker.txt
rm: remove regular file ‘/mnt/abcdocker.txt’? y
[root@ceph-01 ~]# ls /mnt/
lost+found
使用快照进行恢复
#首先我们执行rollback命令,进行数据恢复
[root@ceph-01 ~]# rbd snap rollback abcdocker/ceph-trash.img@snap_test_2022-03-09
Rolling back to snapshot: 100% complete...done.
#参数解释
#snap 为快照参数
#rollback 为恢复快照
#abcdocker 为pool名称
#ceph-trash.img 为rbd文件名称
#@snap_test_2022-03-09 为快照名称(需要恢复的快照名称)
恢复完成后,文件系统不能马上识别出来,需要我们重新挂载块设备进行恢复
[root@ceph-01 ~]# umount /mnt/
[root@ceph-01 ~]# mount /dev/rbd0 /mnt/
[root@ceph-01 ~]# ls /mnt/
abcdocker.txt lost+found
[root@ceph-01 ~]# cat /mnt/abcdocker.txt
i4t.com
四、RBD镜像克隆
Ceph支持为块设备快照创建许多写时复制COW
克隆。快照分层使Ceph块设备客户端能够非常快速的创建映射。例如,我们创建一个块设备镜像,其中写入一个Linux;然后对镜像进行快照、保护快照并创建写时克隆。快照是只读的,写入将写入到新的位置--进行快速克隆
- 完整克隆
- 快速克隆 (快速克隆使用的就是写时复制)
每个克隆镜像子级存储对父级镜像为引用作用,子级会读取父级别的数据
parent代表镜像父级
Child 代表克隆的子级
COW克隆和Ceph块设备完全相同,可以进行读取、写入和调整镜像大小。克隆镜像没用特殊限制。但是,写时复制克隆是指快照,因此必须在克隆快照之前对其保护
Ceph目前只支持format 2镜像的克隆,内核rbd create --image-format 2还不支持。rbd因此必须使用QEMU/KVM或者librbd直接访问版本中的克隆
4.1 RBD分层概念
Ceph块设备分层是一个简单的过程,首先我们必须创建镜像的快照,并且需要保护快照,保护完成就可以开始克隆快照
克隆的镜像有对父快照的引用,包括池ID、镜像ID和快照ID。
1.镜像模板: 块设备分层的一个常见用例是创建一个主镜像和一个用做克隆模板的快照。
2.扩展模板: 提供比基础镜像更多的信息,例如用户可以克隆镜像并按照其他软件,然后对扩展镜像进行快照,该扩展镜像本身可以更新就像基本镜像一样
3.模板池: 使用块设备分层的一个方法是创建一个pool,其中包含充当模板的主镜像以及这些模板的快照。然后可以将只读权限扩展到用户,以便可以直接克隆快照,但是无法在池中写入和执行
4.镜像迁移/恢复: 使用块设备分层的一个方法是将数据从一个pool迁移或者恢复到另一个pool中
4.2 RBD快照保护
如果用户不小心删除了父快照,所有的克隆都会终端。为了防止克隆的镜像丢失,必须保护快照才可以进行克隆
[root@ceph-01 ~]# rbd create abcdocker/ceph-temp.img --size 10G #为了掩饰数据,我们创建一个新的镜像,大小为10G
[root@ceph-01 ~]# rbd -p abcdocker ls
abcdocker-rbd.img
ceph-temp.img
ceph-trash.img
下面为镜像制作一个快照
[root@ceph-01 ~]# rbd snap create abcdocker/ceph-temp.img@temp #创建名称为temp的快照
[root@ceph-01 ~]# rbd snap ls abcdocker/ceph-temp.img #查看一下快照
SNAPID NAME SIZE PROTECTED TIMESTAMP
8 temp 10 GiB Thu Mar 10 15:03:39 2022
制作完快照后,我们将快照保护起来
[root@ceph-01 ~]# rbd snap protect abcdocker/ceph-temp.img@temp #通过protect保护
[root@ceph-01 ~]# rbd snap rm abcdocker/ceph-temp.img@temp #这里我们就可以看到,已经无法删除了
Removing snap: 0% complete...failed.
rbd: snapshot 'temp' is protected from removal.
2022-03-10 15:06:10.564 7f39f6a09c80 -1 librbd::Operations: snapshot is protected
取消保护,如果我们想取消保护,可以通过unproject参数
[root@ceph-01 ~]# rbd snap unprotect abcdocker/ceph-temp.img@temp
4.3 RBD克隆快照
这会我们的父镜像已经制作好了,开始克隆子镜像
克隆可以选择pool,可以和父镜像不在一个pool中
[root@ceph-01 ~]# rbd clone abcdocker/ceph-temp.img@temp abcdocker/ceph-test-01.img #使用clone克隆参数
[root@ceph-01 ~]# rbd clone abcdocker/ceph-temp.img@temp abcdocker/ceph-test-02.img
[root@ceph-01 ~]# rbd clone abcdocker/ceph-temp.img@temp abcdocker/ceph-test-03.img
[root@ceph-01 ~]# rbd -p abcdocker ls #查看克隆后的镜像
abcdocker-rbd.img
ceph-temp.img
ceph-test-01.img #这里就是我们刚刚克隆完毕的
ceph-test-02.img
ceph-test-03.img
ceph-trash.img
[root@ceph-01 ~]#
挂载测试,因为里面没有数据实际上挂载的都一样
[root@ceph-01 ~]# rbd -p abcdocker ls #查看当前rbd文件
abcdocker-rbd.img
ceph-temp.img
ceph-test-01.img
ceph-test-02.img
ceph-test-03.img
ceph-trash.img
[root@ceph-01 ~]# rbd device map abcdocker/ceph-test-01.img #将rbd文件映射到本地
/dev/rbd1
[root@ceph-01 ~]# mkdir /mnnt #创建挂载目录
[root@ceph-01 ~]# mkfs.ext4 /dev/rbd1 #因为我们是新建的镜像,需要做格式化操作,我们可以将格式化后的状态在做一个快照,在重新保护起来使用
[root@ceph-01 ~]# mount /dev/rbd1 /mnnt
[root@ceph-01 ~]# ls /mnnt/
lost+found
4.4 RBD取消父级
使用flatten取消依赖关系,此时我们在删除temp模板镜像,下面的ceph-test-03就不受影响
[root@ceph-01 ~]# rbd children abcdocker/ceph-temp.img@temp #使用children查看当前快照下面创建的镜像
abcdocker/ceph-test-01.img
abcdocker/ceph-test-02.img
abcdocker/ceph-test-03.img
[root@ceph-01 ~]# rbd flatten abcdocker/ceph-test-03.img #执行flatten取消父级依赖,默认就会修改为完整克隆
Image flatten: 100% complete...done.
五、RBD备份与恢复
5.1 RBD全备
RBD备份分为两种,一种是全备,另外一个是增量备份
全备操作 export
这里我创建一个快照,并且将快照导出成一个单独的镜像。然后我们在挂载上去使用
[root@ceph-01 mnt]# rbd -p abcdocker ls #查看我们所有的镜像
abcdocker-rbd.img
ceph-temp.img
ceph-test-01.img
ceph-test-02.img
ceph-test-03.img
ceph-trash.img
[root@ceph-01 mnt]# rbd snap ls abcdocker/ceph-temp.img #查看当前快照列表
SNAPID NAME SIZE PROTECTED TIMESTAMP
8 temp 10 GiB yes Thu Mar 10 15:03:39 2022
[root@ceph-01 mnt]# rbd snap create abcdocker/ceph-temp.img@bak_2022-03-10 #创建快照
[root@ceph-01 mnt]# rbd export abcdocker/ceph-temp.img@bak_2022-03-10 /root/ceph-bak.img #执行export导出
Exporting image: 100% complete...done.
此时我们数据已经备份完毕
5.2 RBD全量数据恢复
首先我们需要将原来的挂载点进行卸载
[root@ceph-01 mnt]# umount /mnnt #卸载点
恢复RBD备份 import
[root@ceph-01 mnt]# rbd import /root/ceph-bak.img abcdocker/ceph-bak.img
Importing image: 100% complete...done.
[root@ceph-01 mnt]# rbd -p abcdocker ls
abcdocker-rbd.img
ceph-bak.img
刚刚已经在rbd中可以看到对应的ceph-bak.img文件,我们在进行挂载即可
[root@ceph-01 mnt]# rbd device map abcdocker/ceph-bak.img
/dev/rbd5
[root@ceph-01 mnt]# mount /dev/rbd5 /mnnt
针对挂载提示rbd: map failed: (6) No such device or address 解决方案可以参考下面文章
https://www.cnblogs.com/zphj1987/p/13575352.html
或者临时解决 rbd feature disable abcdocker/ceph-bak.img object-map fast-diff deep-flatten
5.3 RBD增量备份
对于增量备份,常用于ceph异地备份,或者kvm、OpenStack相关备份。可以减少空间占用大小
可以写成定时脚本,定时基于全备添加增量的备份
增量备份
增量备份使用的参数为export-diff
#首先我们先创建增量的快照
[root@ceph-01 ~]# rbd device map abcdocker/ceph-bak.img #添加镜像映射
/dev/rbd1
[root@ceph-01 ~]# mount /dev/rbd1 /mnnt #挂载
[root@ceph-01 ~]# cd /mnnt/
[root@ceph-01 mnnt]# ls
1 110 122 134 146 158 17 181 193 24 36 48 6 71 83 95
10 111 123 135 147 159 170 182 194 25 37 49 60 72 84 96
100 112 124 136 148 16 171 183 195 26 38 5 61 73 85 97
101 113 125 137 149 160 172 184 196 27 39 50 62 74 86 98
102 114 126 138 15 161 173 185 197 28 4 51 63 75 87 99
103 115 127 139 150 162 174 186 198 29 40 52 64 76 88 lost+found
104 116 128 14 151 163 175 187 199 3 41 53 65 77 89 seq
105 117 129 140 152 164 176 188 2 30 42 54 66 78 9
106 118 13 141 153 165 177 189 20 31 43 55 67 79 90
107 119 130 142 154 166 178 19 200 32 44 56 68 8 91
108 12 131 143 155 167 179 190 21 33 45 57 69 80 92
109 120 132 144 156 168 18 191 22 34 46 58 7 81 93
11 121 133 145 157 169 180 192 23 35 47 59 70 82 94
接下来为rbd文件添加全量备份
[root@ceph-01 mnnt]# rbd snap create abcdocker/ceph-bak.img@all_bak_2022-03-10 #创建名称为all_bak_2022-03-10的快照
[root@ceph-01 mnnt]# rbd snap ls abcdocker/ceph-bak.img #查看快照
SNAPID NAME SIZE PROTECTED TIMESTAMP
10 all_bak_2022-03-10 10 GiB Mon Mar 14 14:04:33 2022
[root@ceph-01 mnnt]# rbd export abcdocker/ceph-bak.img@all_bak_2022-03-10 /root/ceph-bak_all_bak_2022-03-10.img #导出快照
Exporting image: 100% complete...done.
[root@ceph-01 mnnt]# ll /root/ceph-bak_all_bak_2022-03-10.img -h #查看快照大小,目前快照大写10个G
-rw-r--r-- 1 root root 10G Mar 14 14:05 /root/ceph-bak_all_bak_2022-03-10.img
全量备份添加完毕后,我们在创建新数据,充当增量备份
#上面是我们之前的数据,现在我们在创建200个文件
[root@ceph-01 mnnt]# for i in `seq 200`;do touch $i.log;done
接下来做增量的备份 (增量备份恢复的时候也是要基于全量做备份)
#增量备份也是要添加快照,我们在创建一个快照
[root@ceph-01 mnnt]# rbd snap ls abcdocker/ceph-bak.img
SNAPID NAME SIZE PROTECTED TIMESTAMP
10 all_bak_2022-03-10 10 GiB Mon Mar 14 14:04:33 2022
[root@ceph-01 mnnt]# rbd snap create abcdocker/ceph-bak.img@new_v1 #新new_v1快照
[root@ceph-01 mnnt]# rbd snap ls abcdocker/ceph-bak.img #查看所有快照
SNAPID NAME SIZE PROTECTED TIMESTAMP
10 all_bak_2022-03-10 10 GiB Mon Mar 14 14:04:33 2022
11 new_v1 10 GiB Mon Mar 14 14:09:20 2022
目前all_bak_2022-03-10
为全量的快照,new_v1
为增量备份的快照
接下来导出快照
[root@ceph-01 mnnt]# rbd export-diff abcdocker/ceph-bak.img@new_v1 /root/ceph_new_v1.img #导出增量备份文件
Exporting image: 100% complete...done.
[root@ceph-01 mnnt]# ls -lh /root/ceph_new_v1.img #查看增量备份文件
-rw-r--r-- 1 root root 44M Mar 14 14:10 /root/ceph_new_v1.img
目前可以看到增量备份文件只有大概44M,全量备份文件为10G
对于增量备份,常用于ceph异地备份,或者kvm、OpenStack相关备份。可以减少空间占用大小
5.4 RBD增量数据恢复
前面已经说了RBD的增量备份,增量备份完成我们就需要考虑如何进行增量恢复数据
首先RBD增量数据恢复需要安装顺序进行恢复,即v1,v2,v3,v4 按照顺序进行恢复
即如果全量数据有影响,首先恢复全量数据
在恢复增量v1、增量v2、增量v3 以此类推
数据恢复可以恢复新的镜像中,也可以在原有的镜像恢复
下面我们将6.3 RBD增量备份
生成的.log文件删除,然后使用import-diff
命令实现增量恢复
我这里演示的是在全量数据没有受影响的情况下,只删除增量备份前的数据进行恢复
#前往挂载点,删除*.log文件
[root@ceph-01 mnnt]# rm -rf *.log
执行增量恢复
[root@ceph-01 ~]# rbd -p abcdocker ls #确认需要恢复镜像
abcdocker-rbd.img
ceph-bak.img
ceph-temp.img
ceph-test-01.img
ceph-test-02.img
ceph-test-03.img
ceph-trash.img
[root@ceph-01 ~]# rbd snap ls abcdocker/ceph-bak.img #查看镜像快照
SNAPID NAME SIZE PROTECTED TIMESTAMP
10 all_bak_2022-03-10 10 GiB Mon Mar 14 14:04:33 2022
11 new_v1 10 GiB Mon Mar 14 14:09:20 2022
#我刚刚已经把new_v1备份前的数据删除,也就是目前是缺少new_v1的快照数据
使用import-diff
恢复到abcdocker/ceph-bak.img镜像中
目前的文件夹
恢复的时候我们需要把快照名称删除
[root@ceph-01 mnnt]# rbd snap rm abcdocker/ceph-bak.img@new_v1
Removing snap: 100% complete...done.
[root@ceph-01 mnnt]# rbd snap ls abcdocker/ceph-bak.img
SNAPID NAME SIZE PROTECTED TIMESTAMP
10 all_bak_2022-03-10 10 GiB Mon Mar 14 14:04:33 2022
#如果不删除快照名称,会提示我们恢复的快照已经存在
[root@ceph-01 mnnt]# rbd import-diff /root/ceph_new_v1.img abcdocker/ceph-bak.img #执行恢复
Importing image diff: 100% complete...done.
[root@ceph-01 mnnt]# rbd snap ls abcdocker/ceph-bak.img
SNAPID NAME SIZE PROTECTED TIMESTAMP
10 all_bak_2022-03-10 10 GiB Mon Mar 14 14:04:33 2022
13 new_v1 10 GiB Mon Mar 14 14:36:36 2022
#接下来我们重新mount
[root@ceph-01 ~]# umount -lf /mnnt/
[root@ceph-01 ~]# mount /dev/rbd1 /mnnt
[root@ceph-01 ~]# cd /mnnt/
数据如下图
下面说一下如何恢复到新的镜像名称中
目前我们将ceph-bak.img镜像做了全备和增量备份,我们现在需要将这块镜像恢复到一个名为ceph-bak-new.img中
[root@ceph-01 mnnt]# rbd snap ls abcdocker/ceph-bak.img
SNAPID NAME SIZE PROTECTED TIMESTAMP
10 all_bak_2022-03-10 10 GiB Mon Mar 14 14:04:33 2022
13 new_v1 10 GiB Mon Mar 14 14:36:36 2022
#导出文件我们依旧采用之前的
[root@ceph-01 mnnt]# ll -h /root/ceph-bak_all_bak_2022-03-10.img
-rw-r--r-- 1 root root 10G Mar 14 14:05 /root/ceph-bak_all_bak_2022-03-10.img
[root@ceph-01 mnnt]# ll -h /root/ceph_new_v1.img
-rw-r--r-- 1 root root 44M Mar 14 14:10 /root/ceph_new_v1.img
开始恢复数据,需要先恢复全量数据
[root@ceph-01 mnnt]# rbd import /root/ceph-bak_all_bak_2022-03-10.img abcdocker/ceph-bak-new.img #恢复全备文件
Importing image: 100% complete...done.
#接下来开始恢复增量备份
[root@ceph-01 mnnt]# rbd import-diff /root/ceph_new_v1.img abcdocker/ceph-bak-new.img
Importing image diff: 100% complete...done.
此时我们可以看一下新镜像的快照
[root@ceph-01 mnnt]# rbd snap ls abcdocker/ceph-bak-new.img
SNAPID NAME SIZE PROTECTED TIMESTAMP
14 new_v1 10 GiB Mon Mar 14 14:43:31 2022
#这里只包含一个增量的备份,因为这个系统是基于全量备份,所以看不到全量的镜像
接下来我们进行映射挂载
[root@ceph-01 mnnt]# rbd device map abcdocker/ceph-bak-new.img
/dev/rbd2
[root@ceph-01 mnnt]#
[root@ceph-01 mnnt]# mkdir /new
[root@ceph-01 mnnt]# mount /dev/rbd2 /new
数据如下
我们可以看一下挂载点,数据是一模一样的
[root@ceph-01 new]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 50G 2.6G 48G 6% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
tmpfs 1.9G 24K 1.9G 1% /var/lib/ceph/osd/ceph-0
tmpfs 1.9G 24K 1.9G 1% /var/lib/ceph/osd/ceph-3
tmpfs 380M 0 380M 0% /run/user/1000
/dev/rbd1 9.8G 37M 9.2G 1% /mnnt #旧镜像
/dev/rbd2 9.8G 37M 9.2G 1% /new #新镜像
[root@ceph-01 new]# rbd device ls
id pool namespace image snap device
1 abcdocker ceph-bak.img - /dev/rbd1 #旧
2 abcdocker ceph-bak-new.img - /dev/rbd2 #新