原理
快照是源数据在某一时间点生成的数据副本。快照具有执行速度快、占用存储空间小等特点。
相关概念
- ROW
ROW是指写时重定向技术,是实现快照的核心技术。当系统收到写数据请求需要修改源数据时,存储系统在存储池中为新写入的数据指定新的存储位置,并将被修改数据块的指针指向新的存储位置。
- 数据组织形式
OceanStor Dorado V6系列存储系统存储池中创建的LUN包含了元数据卷和数据卷两部分组成。
- 元数据卷:记录LUN中数据组织形式(LBA、Version、Clone ID)及其属性的卷,结构形式为树形。
LBA(Logical Block Address)是逻辑区块地址,Version和快照的时间点信息是一一对应,Clone ID表示副本数。
- 数据卷:存放LUN中的实际数据的卷。
- 元数据卷:记录LUN中数据组织形式(LBA、Version、Clone ID)及其属性的卷,结构形式为树形。
- 源卷
需要进行快照操作的源数据所在的卷,对用户而言表现形式为源LUN或已经生成的快照。
- 快照卷
对源LUN创建快照后,逻辑上生成的数据副本。对用户而言表现形式为快照LUN。存储池中单个LUN采用(LBA、Version、Clone ID)数据组织形式建立相同LBA的多份数据,源卷和快照卷的共享元数据保存在同一颗共享树上。
- 快照副本
对快照进行复制,获得多份激活时间点快照副本的技术。即使对快照执行写操作,快照中的数据发生了改变,快照副本中的数据仍然与快照创建时间点的快照数据一致。
- 级联快照
即对生成的快照继续创建快照。与快照副本不同的是,级联快照是已生成的快照在某个时间点的一致性数据副本,包括写入源快照的数据。快照副本是源快照激活时间点的数据,不包含写入源快照的数据。级联快照的最大级联深度为8。
- 快照一致性组
保护组用于集合一组需要使用数据保护特性的的LUN,保证多个LUN之间数据的关联关系。OceanStor Dorado V6系列存储系统支持对保护组创建快照,即对保护组中的成员LUN在同一时间点创建快照。
快照一致性组主要应用于数据库场景。数据库中通常将不同的数据存放在不同的LUN上,且这些LUN之间是存在关联关系的,例如,数据库的online redo log卷和数据卷。当通过快照对数据库进行备份时,需要确保这些LUN在同一个时间点创建快照,确保进行数据库恢复时,数据完整可用。
原理实现
快照实现的核心技术为ROW。具体如下:
- 创建快照:快照创建激活后,系统会生成与源LUN一致的数据副本。此时,存储系统将源LUN的指针复制给快照,快照的指针指向源LUN数据的存储位置,即源LUN和快照的LBA相同。
- 源LUN写入数据:快照创建后,当应用服务器对源LUN有数据写入请求时,存储系统利用ROW技术将新写入的数据存放在存储池中新的位置,源LUN的指针更新,指向新数据的存放位置。快照的指针仍指向原始数据的存储位置,从而保存源LUN在快照创建时间点的数据。
- 读取快照:快照创建后,在源LUN使用期间,客户端应用程序可以访问快照,读取快照创建时间点(即LUN数据组织形式中的Version)的源LUN的数据。存储系统通过快照中块指针查找数据的存储位置,然后将查找到的数据返回给客户端。
创建快照前,源LUN数据分布图如图1-1所示。
以一个快照周期(只进行一次快照创建操作)为例,快照的读写过程如图1-2所示。
- 源LUN和快照都使用映射表访问物理空间, 源LUN的初始数据为“ABCDE”,且“ABCDE”在物理空间上也是顺序存放的。 快照的映射元数据一开始是空的,所有对快照的读访问都会重定向到源LUN。
- 当源LUN接收到一个把“C”修改为“F”的写操作时,并不会覆盖写入物理空间P2,而是直接写入一个新分配的物理空间P5,即图中步骤2。
- 完成写入后,向快照的映射元数据中插入映射项“L2 ->P2”,表明此后对快照逻辑地址L2的访问不再重定向到源LUN,而是直接读取物理空间P2。此步骤即图中步骤3。
- 将源LUN映射元数据中的映射项“L2 ->P2”修改为“L2 ->P5”,即图中步骤4。 此时源LUN的数据变为“ABFDE”,而快照的数据仍保持“ABCDE”不变。
完成快照读写流程后,快照和源LUN元数据分布图如图1-3所示。
快照不但能够快速生成源LUN在某个时间点的一致性副本,还提供了快速恢复源LUN的机制。当源LUN的数据遭到人为意外删除、破坏或病毒入侵时,通过回滚可以快速将源LUN的数据恢复到快照创建时间点的数据,减少源LUN数据的丢失量。