Ceph支持一個非常好的特性,以COW(寫時復制)的方式從RBD快照創建克隆,在Ceph中被稱為快照分層。分層特性允許用戶創建多個CEPH RBD克隆實例。這些特性應用於OpenStack等雲平台中
,使用快照形式保護ceph RBD 鏡像,快照是只讀的,但COW克隆是完全可以寫 ,可以多次來孵化實例,對雲平台來說是非常有用的。
Ceph RBD鏡像有format-1 和 format-2兩種類型,RBD支持這兩種類型,但是分層特性COW克隆特性只支持format-2鏡像,默認RBD創建的鏡像是format-1。
ceph snap幾個主要命令
ceph snap create (snap add) Create a snapshot.
snap list (snap ls) Dump list of image snapshots.
snap protect Prevent a snapshot from being deleted.
snap purge Deletes all snapshots.
snap remove (snap rm) Deletes a snapshot.
snap rename Rename a snapshot.
snap rollback (snap revert) Rollback image to snapshot.
snap unprotect Allow a snapshot to be deleted.
一、創建RBD鏡像實例:
1、在pool1上創建一個RBD鏡像,不使用-p <pool name>默認在rbd存儲池上創建,默認是M
[root@node2 ~]# rbd create rbd1 -p pool1 --size 1024 --image-format 1
rbd: image format 1 is deprecated
查看創建結果,使用-p指定存儲池
[root@node2 ~]# rbd list -p pool1
rbd1
[root@node2 ~]# rbd info --image pool1/rbd1
rbd image ‘rbd1‘:
size 5120 MB in 1280 objects
order 22 (4096 kB objects)
block_name_prefix: rb.0.15d23.238e1f29
format: 1
2、映射塊設備
[root@node2 ~]# rbd map --image pool1/rbd1
/dev/rbd3
查看映射的塊設備
[root@node2 ~]# rbd showmapped
id pool image snap device
0 rbd block-device1 - /dev/rbd0
1 rbd block-device3 - /dev/rbd1
2 rbd block-device4 - /dev/rbd2
3 pool1 rbd1 - /dev/rbd3
3、掛載文件系統使用
[root@node2 ~]# mkfs.xfs /dev/rbd3
meta-data=/dev/rbd3 isize=256 agcount=9, agsize=162816 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=1310720, imaxpct=25
= sunit=1024 swidth=1024 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@node2 ~]# mkdir /mnt/rbd3
[root@node2 ~]# mount /dev/rbd3 /mnt/rbd3
[root@node2 ~]# mount | grep rbd3
/dev/rbd3 on /mnt/rbd3 type xfs (rw,relatime,attr2,inode64,sunit=8192,swidth=8192,noquota)
[root@node2 ~]# touch /mnt/rbd3/test
[root@node2 ~]# ls /mnt/rbd3/
test
4、創建快照
[root@node2 ~]# rbd snap create pool1/rbd1@snapshot1
[root@node2 ~]# rbd snap ls pool1/rbd1
SNAPID NAME SIZE
4 snapshot1 5120 MB
5、在rbd3目錄下創建文件test1
[root@node2 ~]# touch /mnt/rbd3/test1
[root@node2 ~]# ls /mnt/rbd3/
test test1
6、恢復rbd1的快照
[root@node2 ~]# rbd snap rollback pool1/rbd1@snapshot1
Rolling back to snapshot: 100% complete...done.
語法:rbd snap rollback <pool-name>/<image-name>@<snap-name>
7、重新掛載文件系統,發現已經恢復到之前的狀態了
[root@node2 ~]# umount /mnt/rbd3
[root@node2 ~]# mount /dev/rbd3 /mnt/rbd3/
[root@node2 ~]# ls /mnt/rbd3/
test
[root@node2 ~]#
8、不再使用鏡像時可以刪除掉鏡像
[root@node2 ~]# rbd snap rm pool1/rbd1@snapshot1
[root@node2 ~]# rbd snap ls pool1/rbd1
語法:rbd snap rm <pool-name>/<image-name>@<snap-name>
9、刪除多個快照
[root@node2 ~]# rbd snap purge pool1/rbd1
語法:rbd snap purge <pool-name>/<image-name>
二、使用RBD克隆
創建rbd2,類型為format2的RBD鏡像
[root@node2 ~]# rbd create rbd2 --size 10240 --image-format 2
[root@node2 ~]# rbd info --image rbd2
rbd image ‘rbd2‘:
size 10240 MB in 2560 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.15821238e1f29
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
flags:
創建RBD鏡像快照
[root@node2 ~]# rbd snap create rbd/rbd2@snapshot1
[root@node2 ~]# rbd snap ls rbd/rbd2
SNAPID NAME SIZE
7 snapshot1 10240 MB
創建COW鏡像前先要保護這個快照,這是非常重要的一步
[root@node2 ~]# rbd snap protect rbd/rbd2@snapshot1
通過快照創建一個克隆的RBD鏡像
[root@node2 ~]# rbd clone rbd/rbd2@snapshot1 rbd/clone_rbd2
[root@node2 ~]# rbd info --image rbd/clone_rbd2
rbd image ‘clone_rbd2‘:
size 10240 MB in 2560 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.15c1b3d1b58ba
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
flags:
parent: rbd/rbd2@snapshot1
overlap: 10240 MB
創建克隆好了一個依賴於父鏡像快照的RBD鏡像后,為了讓這個克隆的RBD鏡像獨立於父鏡像,我們需要將父鏡像的信息合並flattern到子鏡像,一旦合並完成,RBD鏡像和它的父鏡像就不會存在任何關系了。
使用flatten合並
[root@node2 ~]# rbd flatten rbd/clone_rbd2
Image flatten: 100% complete...done.
合並完成后,查看這個鏡像信息,發現父鏡像/快照名字不存大了
[root@node2 ~]# rbd info --image clone_rbd2
rbd image ‘clone_rbd2‘:
size 10240 MB in 2560 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.15c1b3d1b58ba
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
flags:
[root@node2 ~]#
如果你不再使用父鏡像,可以先移除它的保護狀態,再刪除它
[root@node2 ~]# rbd snap unprotect rbd/rbd2@snapshot1
[root@node2 ~]# rbd snap rm rbd/rbd2@snapshot1
本文出自 “技術成就夢想” 博客,請務必保留此出處http://andyliu.blog.51cto.com/518879/1856669
