Ceph RBD:克隆 + 克隆卷元数据/数据IO详解

引言

阅读本文前建议先阅读如下文章,了解卷和快照的概念,及其元数据和数据的存储方式。

克隆概述

快照是保存某个时间点的原卷的数据,但快照是只读的,如果想在此快照的基础上继续存储数据,就需要创建克隆卷。克隆的主要操作有两个:

  • 克隆(rbd clone):在快照的基础上,创建克隆卷,此过程只创建卷,不进行数据操作。
  • 扁平化(rbd flatten):将clone卷未写过的位置,从快照卷中拷贝到clone卷,拷贝完成后解除与快照卷和原卷的关系,扁平化后的clone卷,可以独立使用。

本文结论

下面先列出克隆相关的关键点,后文会通过实践一步一步讲解。

  • 元数据
    • header:克隆卷header中记录parent,通过parent可以解析出克隆卷对应的原卷和快照。
    • rbd_children:记录了原卷和克隆卷的对应关系,通过此可以通过原卷对应的所有克隆卷。
  • 数据
    • 读:读克隆卷时不会将快照数据拷贝到克隆卷中。
    • 写:写克隆卷时数据会写入克隆卷。
    • 读写克隆卷对原卷和快照卷的数据没有任何影响。
  • 扁平化
    • 元数据:扁平化后,header中的parent和rbd-children中相关信息被清除。
    • 数据:扁平化过程中,会将快照卷的数据拷贝到克隆卷中。

克隆的元数据结构

创建卷vol_0

观察元数据为:

[root@VM-16-10-centos ~]# rados -p blockpool ls
rbd_directory
rbd_header.b5f02487a541c
rbd_info
rbd_object_map.b5f02487a541c
rbd_id.vol_0
[root@VM-16-10-centos ~]# rados -p blockpool listomapvals rbd_header.b5f02487a541c
access_timestamp
value (8 bytes) :
00000000  7d 01 60 62 16 0e 21 09                           |}.`b..!.|
00000008

create_timestamp
value (8 bytes) :
00000000  7d 01 60 62 16 0e 21 09                           |}.`b..!.|
00000008

features
value (8 bytes) :
00000000  3d 00 00 00 00 00 00 00                           |=.......|
00000008

modify_timestamp
value (8 bytes) :
00000000  7d 01 60 62 16 0e 21 09                           |}.`b..!.|
00000008

object_prefix
value (26 bytes) :
00000000  16 00 00 00 72 62 64 5f  64 61 74 61 2e 62 35 66  |....rbd_data.b5f|
00000010  30 32 34 38 37 61 35 34  31 63                    |02487a541c|
0000001a

order
value (1 bytes) :
00000000  16                                                |.|
00000001

size
value (8 bytes) :
00000000  00 00 40 06 00 00 00 00                           |..@.....|
00000008

snap_seq
value (8 bytes) :
00000000  00 00 00 00 00 00 00 00                           |........|
00000008

创建快照vol_0_snap_0

观察元数据,可以看到产生了快照卷,snap_seq也变化了。

[root@VM-16-10-centos ~]# rados -p blockpool ls
rbd_directory
rbd_object_map.b5f02487a541c.000000000000000a
rbd_header.b5f02487a541c
rbd_info
rbd_object_map.b5f02487a541c
rbd_id.vol_0
[root@VM-16-10-centos ~]# rados -p blockpool listomapvals rbd_header.b5f02487a541c
access_timestamp
value (8 bytes) :
00000000  7d 01 60 62 16 0e 21 09                           |}.`b..!.|
00000008

create_timestamp
value (8 bytes) :
00000000  7d 01 60 62 16 0e 21 09                           |}.`b..!.|
00000008

features
value (8 bytes) :
00000000  3d 00 00 00 00 00 00 00                           |=.......|
00000008

modify_timestamp
value (8 bytes) :
00000000  7d 01 60 62 16 0e 21 09                           |}.`b..!.|
00000008

object_prefix
value (26 bytes) :
00000000  16 00 00 00 72 62 64 5f  64 61 74 61 2e 62 35 66  |....rbd_data.b5f|
00000010  30 32 34 38 37 61 35 34  31 63                    |02487a541c|
0000001a

order
value (1 bytes) :
00000000  16                                                |.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值