RBD块存储COW克隆解除父子镜像的依赖关系
1.COW镜像克隆存在的依赖关系
在前面使用copy-on-write机制基于快照做出来的链接克隆,与快照依赖性很强,如果快照损坏或者丢失,那么克隆的镜像将无法使用,使用这个镜像创建的虚拟机也会就此瘫痪,虽然可以对快照进行保护,但是也不可能做到百分百的保证,一旦快照丢失,产生的影响面将会非常广。
在RBD块存储中提供flatten机制,可以解除克隆的镜像与快照的父子关系,相当于将克隆的镜像独立出来,解除父子关系后,相当于是完整克隆了,会占用更多的空间 。
2.将COW克隆的镜像与快照的依赖关系解除
1)查看基于快照克隆的镜像
可以看到有两个镜像是基于快照克隆的。
[root@ceph-node-1 ~]# rbd children pool-test/rbd-storage.img@snap-system-image
pool-test/vm1-clone.img
pool-test/vm2-clone.img
2)将克隆的镜像与快照解除依赖关系
[root@ceph-node-1 ~]# rbd flatten pool-test/vm1-clone.img
Image flatten: 100% complete...done.
解除完依赖关系后,将不会在快照中显示该镜像。
[root@ceph-node-1 ~]# rbd children pool-test/rbd-storage.img@snap-system-image
pool-test/vm2-clone.img
将另外一个镜像也解除关系。
[root@ceph-node-1 ~]# rbd flatten pool-test/vm2-clone.img
Image flatten: 100% complete...done.
3)查看解除依赖关系后的镜像属性
[root@ceph-node-1 ~]# rbd info pool-test/vm1-clone.img
rbd image 'vm1-clone.img':
size 10 GiB in 2560 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 8ab1b874b899
block_name_prefix: rbd_data.8ab1b874b899
format: 2
features: layering
op_features: #已经没有任何依赖了
flags:
create_timestamp: Sat Apr 9 15:14:10 2022
access_timestamp: Sat Apr 9 15:14:10 2022
modify_timestamp: Sat Apr 9 15:14:10 2022
3.解除依赖关系后将快照删除验证镜像是否可用
1)将快照删除
1.解除快照的保护模式
[root@ceph-node-1 ~]# rbd snap unprotect pool-test/rbd-storage.img@snap-system-image
2.删除快照
[root@ceph-node-1 ~]# rbd snap remove pool-test/rbd-storage.img@snap-system-image
Removing snap: 100% complete...done.
2)验证镜像块存储映射的磁盘是否可用
[root@ceph-node-1 ~]# rbd device ls
id pool namespace image snap device
0 pool-test rbd-storage.img - /dev/rbd0
1 pool-test vm1-clone.img - /dev/rbd1 #依旧存在
[root@ceph-node-1 ~]# ls /mnt
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9 lost+found
映射的磁盘依旧还在,数据也没有丢失。