CEPH集群RBD快照創建、恢復、刪除、克隆(轉)


 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM