块设备快照方法、装置、计算机设备和计算机可读存储介质与流程

摘要: 本技术涉及计算机数据备份与容灾保护,特别是涉及一种块设备快照方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。背景技术:1、传统的块设备快照技术中,通...
块设备快照方法、装置、计算机设备和计算机可读存储介质与流程

本技术涉及计算机数据备份与容灾保护,特别是涉及一种块设备快照方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。

背景技术:

1、传统的块设备快照技术中,通常在i/o(input/output,输入/输出)路径上拦截写入操作并维护变更位图,快照创建时将活动位图通过内存拷贝复制到快照区域,再经由系统调用将位图从内核态拷贝至用户态。

2、然而,内存拷贝操作对于大容量存储设备耗时达毫秒级,直接影响备份恢复点目标的精度,而且拷贝过程中新到达的写i/o可能修改尚未拷贝的区域,导致快照不一致,若采用锁机制阻塞写入则又牺牲了i/o并发性能。这也使得用户空间获取快照数据所需额外系统调用和内存拷贝在周期性快照场景下累积开销显著,整体方案缺乏高效的内核-用户空间零拷贝协调机制。

技术实现思路

1、基于此,有必要针对上述技术问题,提供一种块设备快照方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。

2、第一方面,本技术提供了一种块设备快照方法,包括:

3、在内核块层,拦截针对块设备的写请求;

4、根据所述写请求,确定所述块设备中的待写入块,在分配在连续虚拟内存区域内的两个变更位图中确定活跃位图;

5、在所述活跃位图中,将所述待写入块对应的位信息确定为目标写入标识;目标写入标识,用于指示所述待写入块已被写入;

6、响应于用户空间进程发起的快照创建请求,将所述活跃位图确定为快照位图,将所述活跃位图从当前变更位图切换为另一个变更位图;所述用户空间进程,用于根据所述连续虚拟内存区域到所述用户空间进程的虚拟地址空间的映射,读取所述快照位图得到所述块设备的块写入情况。

7、在其中一个实施例中,所述将所述活跃位图确定为快照位图,将所述活跃位图从当前变更位图切换为另一个变更位图,包括:

8、获取检查点占用标识;所述检查点占用标识,用于指示检查点资源的当前状态;

9、在所述检查点占用标识指示所述检查点资源当前处于空闲状态的情况下,将所述检查点占用标识更新为目标占用标识;所述目标占用标识,用于指示所述检查点资源当前处于占用状态;

10、将所述活跃位图确定为快照位图,将所述活跃位图从当前变更位图切换为另一个变更位图,得到切换后的活跃位图;

11、清除所述切换后的活跃位图中的位信息。

12、在其中一个实施例中,所述连续虚拟内存区域中分配有所述两个变更位图和共享头部;所述共享头部包括共享快照索引;

13、所述将所述活跃位图确定为快照位图,将所述活跃位图从当前变更位图切换为另一个变更位图,得到切换后的活跃位图,包括:

14、将所述活跃位图的内核活跃索引确定为内核快照索引;所述内核活跃索引,用于指示所述活跃位图在所述连续虚拟内存区域内的地址信息;

15、将所述活跃位图从当前变更位图切换为另一个变更位图,得到切换后的活跃位图;

16、将所述内核快照索引写入所述共享快照索引,得到新的共享快照索引;所述新的共享快照索引,用于指示所述快照位图为切换前的所述活跃位图。

17、在其中一个实施例中,所述根据所述连续虚拟内存区域到所述用户空间进程的虚拟地址空间的映射,读取所述快照位图得到所述块设备的块写入情况,包括:

18、根据所述连续虚拟内存区域到所述用户空间进程的虚拟地址空间的映射,从所述共享头部读取所述新的共享快照索引和位图偏移字段;所述位图偏移字段,用于表征所述两个变更位图的位置偏移量;

19、根据所述新的共享快照索引和所述位图偏移字段,定位并遍历所述快照位图,得到置位信息;所述置位信息,用于表征所述块设备的块写入情况;

20、在确定当前满足预设的备份复制条件的情况下,根据所述置位信息,读取所述块设备中已被写入的块。

21、在其中一个实施例中,所述连续虚拟内存区域中分配有所述两个变更位图和共享头部;所述共享头部包括基准磁盘容量;

22、所述获取检查点占用标识,包括:

23、将所述块设备的当前磁盘容量与所述基准磁盘容量进行比对;

24、在所述当前磁盘容量与所述基准磁盘容量不一致的情况下,确定所述块设备进入故障状态,向所述用户空间进程返回错误指示信息;所述用户空间进程,用于根据所述错误指示信息确定所述块设备进入故障状态;

25、在所述当前磁盘容量与所述基准磁盘容量一致的情况下,读取检查点占用标识。

26、在其中一个实施例中,所述清除所述切换后的活跃位图中的位信息,包括:

27、在接收到用户空间进程发起的快照消费请求的情况下,校验所述快照消费请求携带的检查点序列号与当前检查点序列号一致后,释放所述检查点占用标识,并将所述切换后的活跃位图清零。

28、在其中一个实施例中,所述连续虚拟内存区域中分配有所述两个变更位图和共享头部;所述共享头部包括映射序号;

29、在所述将所述活跃位图从当前变更位图切换为另一个变更位图之后,还包括:对所述映射序号进行更新,得到更新后的映射序号;

30、所述根据所述连续虚拟内存区域到所述用户空间进程的虚拟地址空间的映射,读取所述快照位图得到所述块设备的块写入情况,包括:

31、将初始映射序号与所述更新后的映射序号进行比对;所述初始映射序号,在建立所述连续虚拟内存区域到所述用户空间进程的虚拟地址空间的映射时确定;

32、在所述初始映射序号与所述更新后的映射序号不一致的情况下,根据所述连续虚拟内存区域到所述用户空间进程的虚拟地址空间的映射,读取所述快照位图得到所述块设备的块写入情况。

33、在其中一个实施例中,所述在内核块层,拦截针对块设备的写请求,包括:

34、在所述内核块层对应的版本属于第一内核版本范围的情况下,将所述块设备的请求队列结构体中的第一函数指针保存在快照追踪设备结构体,将所述块设备的请求队列结构体中的所述第一函数指针替换为自定义的写拦截函数;

35、在所述内核块层对应的版本属于第二内核版本范围的情况下,复制所述块设备的块设备操作结构体得到结构体副本,将所述结构体副本中的第二函数指针替换为自定义的写拦截函数;

36、基于所述自定义的写拦截函数,在所述内核块层拦截针对所述块设备的写请求。

37、第二方面,本技术还提供了一种块设备快照装置,包括:

38、拦截模块,用于在内核块层,拦截针对块设备的写请求;

39、第一确定模块,用于根据所述写请求,确定所述块设备中的待写入块,在分配在连续虚拟内存区域内的两个变更位图中确定活跃位图;

40、第二确定模块,用于在所述活跃位图中,将所述待写入块对应的位信息确定为目标写入标识;目标写入标识,用于指示所述待写入块已被写入;

41、切换模块,用于响应于用户空间进程发起的快照创建请求,将所述活跃位图确定为快照位图,将所述活跃位图从当前变更位图切换为另一个变更位图;所述用户空间进程,用于根据所述连续虚拟内存区域到所述用户空间进程的虚拟地址空间的映射,读取所述快照位图得到所述块设备的块写入情况。

42、第三方面,本技术还提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

43、在内核块层,拦截针对块设备的写请求;

44、根据所述写请求,确定所述块设备中的待写入块,在分配在连续虚拟内存区域内的两个变更位图中确定活跃位图;

45、在所述活跃位图中,将所述待写入块对应的位信息确定为目标写入标识;目标写入标识,用于指示所述待写入块已被写入;

46、响应于用户空间进程发起的快照创建请求,将所述活跃位图确定为快照位图,将所述活跃位图从当前变更位图切换为另一个变更位图;所述用户空间进程,用于根据所述连续虚拟内存区域到所述用户空间进程的虚拟地址空间的映射,读取所述快照位图得到所述块设备的块写入情况。

47、第四方面,本技术还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

48、在内核块层,拦截针对块设备的写请求;

49、根据所述写请求,确定所述块设备中的待写入块,在分配在连续虚拟内存区域内的两个变更位图中确定活跃位图;

50、在所述活跃位图中,将所述待写入块对应的位信息确定为目标写入标识;目标写入标识,用于指示所述待写入块已被写入;

51、响应于用户空间进程发起的快照创建请求,将所述活跃位图确定为快照位图,将所述活跃位图从当前变更位图切换为另一个变更位图;所述用户空间进程,用于根据所述连续虚拟内存区域到所述用户空间进程的虚拟地址空间的映射,读取所述快照位图得到所述块设备的块写入情况。

52、第五方面,本技术还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:

53、在内核块层,拦截针对块设备的写请求;

54、根据所述写请求,确定所述块设备中的待写入块,在分配在连续虚拟内存区域内的两个变更位图中确定活跃位图;

55、在所述活跃位图中,将所述待写入块对应的位信息确定为目标写入标识;目标写入标识,用于指示所述待写入块已被写入;

56、响应于用户空间进程发起的快照创建请求,将所述活跃位图确定为快照位图,将所述活跃位图从当前变更位图切换为另一个变更位图;所述用户空间进程,用于根据所述连续虚拟内存区域到所述用户空间进程的虚拟地址空间的映射,读取所述快照位图得到所述块设备的块写入情况。

57、上述块设备快照方法、装置、计算机设备、计算机可读存储介质和计算机程序产品,在内核块层,拦截针对块设备的写请求;根据写请求,确定块设备中的待写入块,在分配在连续虚拟内存区域内的两个变更位图中确定活跃位图;在活跃位图中,将待写入块对应的位信息确定为目标写入标识;目标写入标识,用于指示待写入块已被写入;响应于用户空间进程发起的快照创建请求,将活跃位图确定为快照位图,将活跃位图从当前变更位图切换为另一个变更位图;用户空间进程,用于根据连续虚拟内存区域到用户空间进程的虚拟地址空间的映射,读取快照位图得到块设备的块写入情况。相较于传统技术,一方面,本技术在快照创建时无需对位图数据块进行逐字节拷贝,而是通过将活跃位图从当前变更位图切换为另一个变更位图的操作来完成快照位图的标定,而且,切换后原先的活跃位图不再接收新到达的写请求,无需为保持快照位图一致性而阻塞后续写i/o,能够在提升快照创建效率的同时保障写入路径的并发性能;另一方面,本技术利用连续虚拟内存区域到用户空间进程虚拟地址空间的直接映射,使得用户空间进程在读取快照位图时可直接经由映射访问内核态位图数据,无需额外执行从内核态到用户态的数据拷贝系统调用,从而在单次及周期性快照场景中均能够有效消除用户空间读取快照位图时所需的数据搬移与上下文切换开销。