Ceph RBD:快照 + Bluestore/Filestore快照区别

引言

创建快照就是创建当前存储卷的一个只读副本,用于进行快照回滚等数据恢复操作。Ceph创建快照有如下特点:

  • 创建快照数据卷的配置流程,不进行数据操作,创建流程速度很快。
  • 快照创建后采用COW(copy on write)方式进行写时拷贝。
    • 原卷写:原卷写入新数据时才把原卷此位置的数据拷贝的快照卷,然后修改原卷数据。
    • 快照读:先读快照,如果没有数据,表示此位置没有经过原卷写,直接到原卷读数据。
  • COW在rados层进行,对于Bluestore和Filestore快照的COW机制有差别。
    • Filestore:rados对象本身对应磁盘划分的文件,在创建的时候已经分配好,因此快照对应的rados对象时固定的,因此只能在原卷写的过程中真实拷贝数据到快照中,对性能影响很大。
    • Bluestore:rados对象对应磁盘映射是记录在RocksDB的映射关系,可以修改。因此Bluestore实际上是使用ROW(Redirect-on-write)的方式实现,新数据写入新的rados对象,原卷的索引指向此rados对象,快照的索引指向原卷老rados对象。这样不会带来性能损耗。

创建卷和快照

建议先阅读Ceph RBD:创建image + image元数据详解后再继续阅读本文。

创建一个卷,写入lba为0,length为8M数据,每个rados对象为4M。

[root@VM-16-10-centos data]# rbd create blockpool/vol_2 --size 100M
[root@VM-16-10-centos data]# rados -p blockpool ls
rbd_directory
rbd_id.vol_2
rbd_data.2488ba1d0ed49.0000000000000001
rbd_info
rbd_object_map.2488ba1d0ed49
rbd_header.2488ba1d0ed49
rbd_data.2488ba1d0ed49.0000000000000000

创建快照,查看rados对象,除了多了一个rbd_object_map外没有变化。

[root@VM-16-10-centos data]# rbd snap create blockpool/vol_2@vol_2_snap_1
[root@VM-16-10-centos data]# rados -p blockpool ls
rbd_object_map.2488ba1d0ed49.0000000000000004
rbd_directory
rbd_id.vol_2
rbd_data.2488ba1d0ed49.0000000000000001
rbd_info
rbd_object_map.2488ba1d0ed49
rbd_header.2488ba1d0ed49
rbd_data.2488ba1d0ed49.0000000000000000

如何找到快照?rbd_header.{原卷id}

查看header文件,可以看到创建了一个snapshot_0000000000000004的快照,快照名称为vol_2_snap_1。因此创建快照的流程就是在原卷的元数据中修改header的过程。

[root@VM-16-10-centos data]# rados -p blockpool listomapvals rbd_header.2488ba1d0ed49
access_timestamp
value (8 bytes) :
00000000  49 96 56 62 1d d5 31 10                           |I.Vb..1.|
00000008

create_timestamp
value (8 bytes) :
00000000  49 96 56 62 1d d5 31 10                           |I.Vb..1.|
00000008

features
value (8 bytes) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值