本发明涉及数据存储,特别是涉及一种数据重构方法、设备、存储介质及程序产品。
背景技术:
1、对于目前常用的分布式raid(redundant array of independent disks,独立磁盘冗余阵列),可以通过虚拟化技术将硬盘分为多个相同大小的分块,每个硬盘上各取一个分块组成一个条带,每个条带可以被视作一个小型的传统raid,分布式raid就是由这些大量条带组成。对一个条带来说,存在存放数据的数据块,和存放校验数据的校验块,这两种分块的数量总和被称作条带宽度,如果硬盘数据较多,条带中还存在其他分块,这些分块可以作为热备分块,即发生不超过raid冗余级别的硬盘故障时,可以通过重构任务,将丢失的数据或校验分块重构计算出来,并写入校验分块,在重构完成后,raid可以恢复其冗余级别;但如果条带中已没有可用的热备分块,raid将失去其冗余度,直到插入新的硬盘提供热备块并完成重构任务,对于目前常用的raid配置,为提高硬盘使用率不会提供过多的额外硬盘作为热备使用,则上述故障场景时有发生,这种场景下若再次出现硬盘故障,容易造成业务宕机和数据丢失。
2、目前为了解决不存在热备空间的场景发生硬盘故障的问题,可以将丢失的数据重构到未使用的分块当中,形成一些新的条带,即通过减少条带中数据块的数量,保证条带中校验块数量不减少,raid的冗余能力不下降,即缩列重构。但是缩列重构完成后,相当于所有条带的条带宽度都发生了减小,并且对于原有的条带,减少了一个数据块之后,现有的校验块全部失效,加上新生成的条带也没有校验块,则整个raid需要进行一个全量的校验块重新计算的过程,该过程耗时较长,且该过程种raid不具备冗余能力。并且重新插入新硬盘进行恢复时,需要将之前新生成的条带中的数据重新写入原始的条带中,这样原始条带的条带宽度又发生变化,仍需要进行全量的校验块重新计算,若之前发生过多次缩列重构,则需要进行多次全量的校验块重新计算,任务量巨大,耗时也会极长。而且,如果发生缩列重构的条带中重构的分块为校验分块,需要进行额外的处理,即需要在剩余分块中选取一个分块,作为新的校验块,而将该分块的数据作为缩列重构的目标分块。上述方案也导致对于访问被重构区域的接口,通过原有路径已经无法访问,需要对上层提供新的路径,这增加了不同模块间的耦合及数据错误的风险。
3、可见,如何提高分布式raid发生故障后重构的效率,是本领域技术人员需要解决的问题。
技术实现思路
1、本发明实施例的目的是提供一种数据重构方法、设备、存储介质及程序产品,可以解决分布式raid发生故障后重构效率低的问题。
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、本发明的有益效果在于:可以建立一个缩列重构后的分块与原分块的映射关系,从而使原条带可以维持原有条带宽度,无需改变条带宽度而重新计算校验块,并且当插入新硬盘进行数据恢复时,由于使用元数据储存并维护这些映射关系,根据分块间的映射情况直接写回相应的数据即可完成恢复,无需进行额外的校验块计算,简化了raid数据重构的流程,提高了数据恢复速度,可以实现一种故障恢复速率较快,重构计算量小,稳定性高的缩列重构方法。