文章目录
引言
阅读本文前建议先阅读如下文章,了解卷和快照的概念,及其元数据和数据的存储方式。
克隆概述
快照是保存某个时间点的原卷的数据,但快照是只读的,如果想在此快照的基础上继续存储数据,就需要创建克隆卷。克隆的主要操作有两个:
- 克隆(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 |.

1912

被折叠的 条评论
为什么被折叠?



