一种写时重定向引擎快照流方法与流程

文档序号:17360360发布日期:2019-04-09 22:01阅读:303来源:国知局
一种写时重定向引擎快照流方法与流程

本发明属于计算机及数据保护技术领域,具体是一种写时重定向(row)引擎快照流方法。



背景技术:

snia(storagenetworkingindustryassociation,全球网络存储工业协会)对cdp(continuousdataprotection,持续数据保护)的定义:持续数据保护是一种在不影响主要数据运行的前提下,可以实现持续捕捉或跟踪目标数据所发生的任何改变,并且能够恢复到此前任意时间点的技术方法。

在传统(copy-on-write)cow-cdp技术方案中,当处于cow-cdp保护下的源磁盘收到写io请求时,首先将源磁盘上即将写入位置的数据(即历史数据)复制到另一存储上(称之为cow-cdp保存盘),再将写io请求分发给底层的磁盘驱动处理,完成写请求,在此种方式下,一个写源磁盘的io请求被转化成读源磁盘io、写cow-cdp保存盘io、写源磁盘io三个io请求,性能影响很大,快照生成所需空间也较大,因此如何提高大型数据中心存储设备在利用快照进行数据存储备份时的效率和减少备份空间大小是一个迫切需要解决的问题。



技术实现要素:

本发明主要是应用row-cdp技术模型,将源磁盘的所有写io请求被直接重定向到cdp保存盘上而不是源磁盘,row-cdp将这种重定向映射元数据也保存在cdp保存盘,在此种方式下,写io被转化成查找映射及重定向写io,其中重定向映射元数据可以利用cache进行缓存以减少读元数据的io。在第一次快照之后更改的数据单元地址和更改前的值记录在快照区域中的一个快照单元中。在数据恢复期间,读取当前时间和待恢复时刻之间的所有快照单元,并按时间顺序恢复数据存储区域。在触发多个快照的情况下,每次接收到修改数据存储区域的数据单元的指令时,快照处理系统要执行的操作仅在快照的当前快照之后分配的快照单元区域中被触发,执行一次数据单元地址的遍历和比较,并将至多一次写入操作写入到新分配的快照单元。因此,完成一次数据修改所需的系统处理资源与已触发的快照数量无关,从而提高了快照系统的处理能力和效率,减少了备份所需的存储空间。

本发明方法的具体步骤是:

步骤(1):对快照源设备的i/o请求类型进行界定,具体界定如下:

1)写请求:即在数据操作过程中向磁盘内写入数据到数据块。

2)读请求:即在数据操作过程中从磁盘中读出数据块上存储的数据。

步骤(2):根据步骤(1)接收到操作请求,判断请求类型,若为写请求,执行步骤(3),否则执行步骤(12);

步骤(3):根据步骤(2)寻找查询快照数据源块,判断快照数据源块是否存在,若存在,执行步骤(4),否则,执行步骤(5);

步骤(4):判断快照源是否存在前一个写缓冲正在重定向写入数据,若存在,执行步骤(6),否则执行步骤(7);

步骤(5):在目标磁盘中申请分配新的存储空间来存放待写入数据块,记录相应的重定向指针,启动cdp-row引擎,然后结束本次写请求操作;

步骤(6):重定向写快照源时将当前写请求缓冲头缓冲到待处理例外哈希表中,等待前一个写缓冲重定向写入数据完成;

步骤(7):判断是否存在可共享数据块地址,若存在,执行步骤(8),否则,执行步骤(9);

步骤(8):将新进入的写请求数据块划分进入目标磁盘的地址数据块,目标卷分配新的存储空间,将修改后的数据块重定向写入新分配的存储空间中,记录相应的重定向指针,启动cdp-row引擎,然后结束本次写请求操作;

步骤(9):判断待写入数据块中是否所有数据均有效,若是,执行步骤(10),否则,执行步骤(11);

步骤(10):更改无效数据块在bitmap表中映射索引,将修改后的数据块重定向写入目标卷的存储空间,记录相应的重定向指针,启动cdp-row引擎,然后结束本次写请求操作;

步骤(11):将待写入数据块重定向写入目标卷的存储空间,记录相应的重定向指针,启动cdp-row引擎,然后结束本次写请求操作。

步骤(12):根据步骤(6),待处理例外哈希表中相应的写缓冲处理完毕后,使本次未成功的写请求操作再次进入循环。

较佳地,在所述步骤(2)之后,该方法进一步包括:

步骤(13)根据步骤(2)接收到对已写快照的读请求操作命令,寻找查询数据源块,判断数据源块是否存在,若存在,执行步骤(14),否则,执行步骤(15);

步骤(14):判断源块显示是否可读,若可读,执行步骤(16),否则执行步骤(17);

步骤(15):启动cdp‐row引擎,读请求根据重定向指针读取其所指向初始磁盘块上的数据,然后结束本次读请求操作;

步骤(16):启动cdp‐row引擎,读请求根据重定向指针直接读取其所指向目标磁盘块上的数据,然后结束本次读请求操作;

步骤(17):判断快照源是否存在前一个读缓冲正在重定向读取数据,若存在,执行步骤(18),否则执行步骤(19);

步骤(18):重定向读快照源时将当前读请求缓冲头缓冲到待处理例外哈希表中,等待前一个读缓冲重定向读取数据完成;

步骤(19):添加修复作业,增加该读请求权限,重定向读快照源时将当前读请求缓冲头缓冲到待处理例外哈希表中,等待前一个读缓冲重定向读取数据完成;

步骤(20):根据步骤(18)和步骤(19),待处理例外哈希表中相应的读缓冲处理完毕后,使本次未成功的读请求操作再次进入循环。

本发明的有益效果:

本发明提出的写时重定向引擎快照流的方法,在多个快照被触发的情况下,每接受到一个对数据存储区的数据单元进行修改的指令,只需在快照区中本次快照被触发后所分配的快照单元中,进行一次针对数据单元地址的遍历和比较,最多再加上一次对新分配的快照单元的写入操作,在两个快照时刻之间,只有发生变化的数据单元,才会在快照区中对应最多一个快照单元,一次数据修改的完成所需要占用的系统处理资源与已经被触发的快照数无关,因此减少了对备份存储介质资源的占用,从而节约了系统的处理能力,提高了系统的处理效率。

附图说明

图1为row模式读写的流程图;

图2为cdp-row引擎快照流生成示意图;

图3为传统快照与cdp-row快照资源利用率示意图;

具体实施方式

本发明主要是应用row-cdp技术模型,将源磁盘的所有写io请求被直接重定向到cdp保存盘上而不是源磁盘,row-cdp将这种重定向映射元数据也保存在cdp保存盘,在此种方式下,写io被转化成查找映射及重定向写io,其中重定向映射元数据可以利用cache进行缓存以减少读元数据的io。在第一次快照之后更改的数据单元地址和更改前的值记录在快照区域中的一个快照单元中。在数据恢复期间,读取当前时间和待恢复时刻之间的所有快照单元,并按时间顺序恢复数据存储区域。在触发多个快照的情况下,每次接收到修改数据存储区域的数据单元的指令时,快照处理系统要执行的操作仅在快照的当前快照之后分配的快照单元区域中被触发,执行一次数据单元地址的遍历和比较,并将至多一次写入操作写入到新分配的快照单元。因此,完成一次数据修改所需的系统处理资源与已触发的快照数量无关,从而提高了快照系统的处理能力和效率,减少了备份所需的存储空间。

参照图1-3,本发明方法的具体步骤是:

步骤(1):对快照源设备的i/o请求类型进行界定,具体界定如下:

1)写请求:即在数据操作过程中向磁盘内写入数据到数据块。

2)读请求:即在数据操作过程中从磁盘中读出数据块上存储的数据。

步骤(2):根据步骤(1)接收到操作请求,判断请求类型,若为写请求,执行步骤(3),否则执行步骤(12);

步骤(3):根据步骤(2)寻找查询快照数据源块,判断快照数据源块是否存在,若存在,执行步骤(4),否则,执行步骤(5);

步骤(4):判断快照源是否存在前一个写缓冲正在重定向写入数据,若存在,执行步骤(6),否则执行步骤(7);

步骤(5):在目标磁盘中申请分配新的存储空间来存放待写入数据块,记录相应的重定向指针,启动cdp-row引擎,然后结束本次写请求操作;

步骤(6):重定向写快照源时将当前写请求缓冲头缓冲到待处理例外哈希表中,等待前一个写缓冲重定向写入数据完成;

步骤(7):判断是否存在可共享数据块地址,若存在,执行步骤(8),否则,执行步骤(9);

步骤(8):将新进入的写请求数据块划分进入目标磁盘的地址数据块时候需要进行删除cdp历史数据,进行io合并,对传统的row-cdp技术方案进行优化,删除cdp历史数据时最大化重定向映射元数据而非进行io合并具体实现如下:

1)定义dm_snapid_max:表示普通cdp历史快照点id的最大值为0x7ffffffe

dm_snapid_reseved:表示普通cdp历史快照点id的结束标志0x7fffffff

dm_snapid_rbase:cdp历史快照数据恢复写io对应变化映射项基点(0x80000000)

2)删除cdp历史数据的逻辑进行优化,减少io合并:

根据待删除snapid遍历重定向元数据,处理如下(next_valid_snapid定义为最新cdp历史快照点id):

2.1>snapid在[snapid-x,dm_snapid_reseved)之间(x>=0),检查是否还有cdp历史快照其它id在[snapid-x,dm_snapid_reseved)区间:

a.若有且snapid>snapid-x保持映射项不变;

b.若有且snapid=snapid-x,修改映射项为[下一个有效快照点id,dm_snapid_reseved);

c.若无,修改映射项为[next_valid_snapid,dm_snapid_reseved)。

2.2>snapid在[snapid,snapid],查询此映射项对应chunk在[snapid+1,dm_snapid_reseved]有无依赖与相关映射项:

a.有依赖,暂保持映射项不变,触发io合并,io合并完成后删除映射项;

b.无依赖且有查询到后续快照点项,则删除此映射项;

c.无依赖且未查到后续快照点项,修改映射项为[next_valid_snapid,dm_snapid_reseved);

2.3>snapid在[snapid-x,snapid+y]之间(x>0,y>0),保持映射项不变;

2.4>snapid在[snapid,snapid+y]区间(y>0),修改映射项为[下一个有效快照点id,snapid+y];

2.5>snapid在[snapid-x,snapid]区间(x>0),修改映射项为[snapid-x,上一个有效快照点id];

2.6>对应映射项与待删除snapid无关,即snapid不在映射项的快照点id区间,不作处理。

之后目标卷分配新的存储空间,将修改后的数据块重定向写入新分配的存储空间中,记录相应的重定向指针,启动cdp‐row引擎,结束本次写请求操作;

步骤(9):判断待写入数据块中是否所有数据均有效,若是,执行步骤(10),否则,执行步骤(11);

步骤(10):更改无效数据块在bitmap表中映射索引,将修改后的数据块重定向写入目标卷的存储空间,记录相应的重定向指针,启动cdp-row引擎,然后结束本次写请求操作;

步骤(11):将待写入数据块重定向写入目标卷的存储空间,记录相应的重定向指针,启动cdp-row引擎,然后结束本次写请求操作。

步骤(12):根据步骤(6),待处理例外哈希表中相应的写缓冲处理完毕后,使本次未成功的写请求操作再次进入循环;。

步骤(13)根据步骤(2)接收到对已写快照的读请求操作命令,寻找查询数据源块,判断数据源块是否存在,若存在,执行步骤(14),否则,执行步骤(15);

步骤(14):判断源块显示是否可读,若可读,执行步骤(16),否则执行步骤(17);

步骤(15):启动cdp‐row引擎,读请求根据重定向指针读取其所指向初始磁盘块上的数据,然后结束本次读请求操作;

步骤(16):启动cdp‐row引擎,读请求根据重定向指针直接读取其所指向目标磁盘块上的数据,然后结束本次读请求操作;

步骤(17):判断快照源是否存在前一个读缓冲正在重定向读取数据,若存在,执行步骤(18),否则执行步骤(19);

步骤(18):重定向读快照源时将当前读请求缓冲头缓冲到待处理例外哈希表中,等待前一个读缓冲重定向读取数据完成;

步骤(19):添加修复作业,增加该读请求权限,重定向读快照源时将当前读请求缓冲头缓冲到待处理例外哈希表中,等待前一个读缓冲重定向读取数据完成;

步骤(20):根据步骤(18)和步骤(19),待处理例外哈希表中相应的读缓冲处理完毕后,使本次未成功的读请求操作再次进入循环。

下面结合附图和实施例对本发明进行进一步介绍。

如图2所示,cdp-row引擎快照流具体实现如下:

1)源端进行创建源卷的操作,获得镜像端磁盘信息;

2)源端将源卷id等信息映射给镜像端目标磁盘;

3)源端通知镜像端创建其磁盘上对应源卷的镜像卷;

4)镜像端收到通知并且创建镜像卷,创建完成后反馈信息给源端;

5)源端收到镜像端的成功信息之后进行创建本地cdp快照操作;

6)源端创建本地cdp快照成功后,创建本地快照cdp计划(包括cdp模式、cdp任务计划、cdp保存卷信息)并发送创建cdp计划指令至镜像端;

7)镜像端收到指令后创建快照镜像端cdp计划,完成后提交信息到源端;

8)源端收到镜像端成功信息后,向镜像端发出初始化镜像卷指令;

9)镜像端收到指令后执行初始化镜像卷操作。

本实施例利用cdp-row引擎来复制磁盘数据。备份系统在对备份源端节点进行数据复制时,用户需要在备份源端节点设置cdp任务计划,备份系统会将设定的引擎与相应的cdp任务计划绑定在一起,通过系统内核进行控制。cdp任务计划指定了cdp快照的创建周期,当备份系统需要执行任务计划时,会根据预先设定来完成基于时间点的快照增量复制。这样既可保证了复制的时间粒度足够密集,又节省了空间,如图3所示一样。

应该理解到的是:上述实施例只是对本发明的说明,而不是对本发明的限制,任何不超出本发明实质精神范围内的发明创造,均落入本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1