本申请涉及数据存储领域,尤其涉及应用于存储阵列的数据修复方法与装置及存储设备。
背景技术:
存储阵列又被称为磁盘阵列(英文:redundantarraysofindependentdisks,简称:raid)是指由独立磁盘构成的具有冗余能力的阵列。存储设备在存储数据时,会在存储阵列的每个硬盘上选择一些存储单元组成一组,每个存储单元组用于存储用户数据和校验数据,并使所述用户数据和校验数据满足特定的运算规则,这样,如果某些数据块发生损坏时,通过这个运算规则,可以通过该存储单元组内未损坏的用户数据和校验数据,将损坏的用户数据修复来。
由于存储阵列通常由多个磁盘构成,因此在实际应用中,常会出现两个硬盘保存的数据同时损坏,即出现双盘失效的情况。为在双盘失效时也能够恢复存储阵列中所保存的数据,本领域技术人员开始越来越多的使用斜线raid数据修复。采用斜线raid数据修复方法实现双盘失效的数据修复,在使用保存数据时,不仅需要使用一个磁盘保存存储阵列每一行中存储单元所保存的用户数据的行校验数据,而且还需要另一个磁盘保存斜线校验组中存储单元所保存的用户数据的斜线校验数据。
但是,采用现有斜线raid数据修复方法,如果存储单元组中有n列用于存储用户数据,那么该存储单元组中只能有n-1行用于存储用户数据。由于用于存储用户数据的行数小于用于存储用户数据的列数,而斜线校验数据的数量则等于用于存储用户数据的列数。因此,可能会导致存储斜线校验数据所需的存储单元数量大于存储阵列的行数。为充分利用存储阵列中的存储单元,就需要将部分的斜线校验数据保存在用于保存用户数据的列的存储单元中。
而将部分斜线校验数据保存在用于保存用户数据的列的存储单元中,在两个磁盘同时发生失效(即双盘失效)时,即便是所述存储阵列第n列中各个存储单元所保存的数据未被损坏,也有很可能会发生行校验数据、列校验数据及用户数据同时被损坏的情况,使存储设备无法有效的修复存储阵列中损坏的数据。
技术实现要素:
本申请实施例提供了存储阵列数据生成及修复方法及装置与存储设备,可以在双盘失效时,有效修复存储阵列各个存储单元所存储的数据中损坏的用户数据。
第一方面,本申请实施例提供了一种存储阵列数据生成方法用于在所述硬盘发生双盘失效导致所述存储单元所存储的数据被损坏时,修复损坏的数据,该方法包括:如果所述存储阵列第n列中各个存储单元所保存的数据未被损坏,使用第一指定行中各个存储单元所存储的数据中未损坏的数据,及所述第一指定存储单元所存储的额外校验数据,修复所述存储阵列的第一指定行的各个存储单元中所存储的数据中损坏的数据;使用第二指定行中各个存储单元所存储的数据中未损坏的数据,及所述第二指定存储单元所存储的额外校验数据,修复所述存储阵列的第二指定行的各个存储单元中所存储的数据中损坏的数据;使用所述行校验数据及斜线校验数据,逐一修复除所述第一指定行及所述第二指定行外其它各行中存储单元所保存的用数据中损坏的数据,其中,所述存储阵列包含n行n列存储单元,n≥4,且所述存储阵列同一列中的存储单元位于一个磁盘上,所述存储阵列同一行中的存储单元分别位于不同的磁盘上;其中,除位于第n行第m列的存储单元之外,其他位于第1至m列中的存储单元均用于存储用户数据,m=n-2;位于第n行第n-1列的存储单元及位于第n行第m列的存储单元,用于存储第n行中各个存储单元所存储用户数据的行校验数据;位于第n-1列中且与第i行相对应的存储单元,用于存储第i行中各个存储单元所存储用户数据的行校验数据,i=1,2,3,……,n-1;位于第n列中且与第k个斜线校验组相对应的存储单元,用于存储第k个斜线校验组中各个存储单元所存储用户数据的斜线校验数据,k=1,2,3,……,m;位于第n列中的第一指定存储单元,用于存储第一指定行中各个存储单元所存储用户数据的额外校验数据;位于第n行中的第二指定存储单元,用于存储第二指定行中各个存储单元所存储用户数据的额外校验数据,其中,所述第一指定行与所述第二指定行为所述存储阵列第1行至第n-1行中的任意两行。
采用本方面所提供的方法,在两个硬盘同时失效时,如果所述存储阵列第n列中各个存储单元所保存的数据未被损坏,存储设备可以使用所述存储阵列第n列中存储的额外校验数据,修复所述存储阵列两个指定行中各个存储单元所存储的数据,进而可以有效修复存储阵列各个存储单元所存储的数据中损坏的用户数据,从而减少无法修复存储阵列中损坏的数据的情况。
结合第一方面,在第一方面第一种可能的实现方式中,使用所述行校验数据及斜线校验数据,逐一修复除所述第一指定行及所述第二指定行外其它各行中存储单元所保存的用数据中损坏的数据包括:当两个存储有用户数据的所述硬盘失效时,使用斜线校验数据及行校验数据,逐一修复所述存储阵列各个存储单元中损坏的用户数据。
采用该实现方式,可以在两个存储有用户数据的所述硬盘失效时,修复所述存储阵列的各个存储单元中损坏的用户数据。
结合第一方面第一种可能的实现方式,在第一方面第二种可能的实现方式中,使用所述行校验数据及斜线校验数据,逐一修复除所述第一指定行及所述第二指定行外其它各行中存储单元所保存的用数据中损坏的数据包括:当一个存储有用户数据的硬盘与一个存储有行校验数据的硬盘失效时,修复所述存储阵列的第n行中各个存储单元所存储的数据中损坏的数据;在所述存储阵列的第n行中各个存储单元所存储的数据中损坏的数据被修复后,使用斜线校验数据及行校验数据,逐一修复所述存储阵列各个存储单元中损坏的用户数据及损坏的行校验数据。
采用该实现方式,可以在一个存储有用户数据的硬盘与一个存储有行校验数据的硬盘失效时,修复所述磁盘阵列中各个存储单元所述保存的数据损坏时,修复损坏的用户数据及行校验数据。
结合第一方面第二种可能的实现方式,在第一方面第三种可能的实现方式中,修复所述存储阵列的第n行中各个存储单元所存储的数据中损坏的数据包括:在所述存储阵列第n行第m列中的数据未损坏时,以位于第n行第m列的存储单元中所存储的数据作为第n行中的存储单元所保存用户数据的行校验数据修复第n行中各个存储单元所存储的用户数据中损坏的用户数据。
采用该实现方式,可以在所述存储阵列第n行第m列中的数据未损坏时,修复第n行中各个存储单元所存储的用户数据中损坏的用户数据。
结合第一方面第二种可能的实现方式,在第一方面第四种可能的实现方式中,修复所述存储阵列的第n行中各个存储单元所存储的数据中损坏的数据包括:在所述存储阵列第n行第m列中的数据损坏时,根据所述第n行第1至m列中各个存储单元所述存储的用户数据计算出第n行第n-1列及第n行第m列中各个存储单元所述存储的行校验数据。
采用该实现方式,可以在在所述存储阵列第n行第m列中的数据损坏时,修复第n行第n-1列及第n行第m列中各个存储单元所述存储的行校验数据。
第二方面,本申请实施例还提供了一种存储阵列数据修复装置,该装置包括用于执行第一方面及第一方面各实现方式的中方法步骤的单元。
第三方面,本申请实施例还提供了一种存储设备,该存储设备包括处理器、存储器及通信单元。所述处理器执行所述存储中所存储的程序,从而完成第一方面及第一方面各实现方式的中方法步骤。
第四方面,本申请还提供了一种存储阵列,所述存储阵列包含n行n列存储单元,n≥4,且所述存储阵列同一列中的存储单元位于一个磁盘上,所述存储阵列同一行中的存储单元分别位于不同的磁盘上;其中,除位于第n行第m列的存储单元之外,其他位于第1至m列中的存储单元均用于存储用户数据,m=n-2;位于第n行第n-1列的存储单元及位于第n行第m列的存储单元,用于存储第n行中各个存储单元所存储用户数据的行校验数据;位于第n-1列中且与第i行相对应的存储单元,用于存储第i行中各个存储单元所存储用户数据的行校验数据,i=1,2,3,……,n-1;位于第n列中且与第k个斜线校验组相对应的存储单元,用于存储第k个斜线校验组中各个存储单元所存储用户数据的斜线校验数据,k=1,2,3,……,m;位于第n列中的第一指定存储单元,用于存储第一指定行中各个存储单元所存储用户数据的额外校验数据;位于第n行中的第二指定存储单元,用于存储第二指定行中各个存储单元所存储用户数据的额外校验数据,其中,所述第一指定行与所述第二指定行为所述存储阵列第1行至第n-1行中的任意两行。
第五方面,本申请实施例还提供了一种存储介质,该存储介质可存储有程序,该程序执行时可包括本申请提供的用于存储阵列的数据修复方法的各实施例中的部分或全部步骤。
采用本方面所提供的数据修复方法、装置及存储设备等,可以在任意两个硬盘同时失效时,有效修复存储阵列各个存储单元所存储的数据中损坏的用户数据。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本申请存储系统一个实施例的结构示意图;
图2为本申请存储阵列结构示意图。
图3为本申请存储阵列的数据存储效果示意图;
图4为本申请数据修复方法一个实施例的流程示意图;
图5为本申请数据修复方法一个实施例的数据损坏示意图;
图6为本申请数据修复方法一个实施例的数据修复效果示意图;
图7为本申请数据修复方法一个实施例的数据损坏示意图;
图8为本申请数据修复方法一个实施例的数据修复效果示意图;
图9为本申请数据修复方法一个实施例的数据损坏示意图;
图10为本申请数据修复方法一个实施例的数据修复效果示意图;
图11为本申请数据存储装置一个实施例的结构示意图。
具体实施方式
参见图1,为本申请存储系统一个实施例的结构示意图。
如图1所示,所述存储系统可以包括存储设备10及至少四个磁盘组成的磁盘组20。
其中,所述存储设备可以包括:处理器101、存储器102及通信模块103。处理器101、存储器102及通信单元103。这些组件通过一条或多条总线进行通信,本领域技术人员可以理解,图中示出的结构并不构成对本申请的限定,它既可以是总线形结构,也可以是星型结构,还可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
所述处理器101,为存储设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器102内的软件程序和/或模块,以及调用存储在存储器内的数据,以执行电子设备的各种功能和/或处理数据。所述处理器可以由集成电路(integratedcircuit,简称ic)组成,例如可以由单颗封装的ic所组成,也可以由连接多颗相同功能或不同功能的封装ic而组成。举例来说,处理器101可以仅包括中央处理器(centralprocessingunit,简称cpu)。在本申请实施方式中,cpu可以是单运算核心,也可以包括多运算核心。
所述存储器102,用于存储程序。处理器101执行存储器102中存储的程序,从而实现本申请提供的用于存储阵列的数据修复方法的各实施例中的部分或全部步骤。
所述通信单元103,用于建立存储设备10与磁盘组20之间的通信信道,从而使所述存储设备可以与磁盘组进行通信,使所述存储设备10可以读取各个所述磁盘所保存的数据,或向各个所述磁盘中写入数据。
在此需要说明的是,在本申请的其他实施例中,所述磁盘组20中的磁盘也可以直接通过总线与所述处理器101相连,在此情况下,所述存储设备也可以不包括所述存储器102或通信单元103。
参见图2,为本申请存储阵列结构示意图。
如图2所示,所述存储阵列可以包含n*n个存储单元,n≥4,其中,每一个存储单元用于独立的存放一个数据块,通常情况下每个存储单元的存储容量为1比特(英文:bit)。所述存储阵列中的存储单元以n行n列的方式排布,且所述存储阵列同一列中的存储单元位于所述磁盘组20的同一个磁盘上,所述存储阵列同一行中的存储单元分别位于不同的磁盘上,所述磁盘可以为物理磁盘(英文:physicaldisk),也可以为逻辑磁盘(英文:logicaldisk)。
在所述存储阵列中,除位于第n行第m列的存储单元之外,其他位于第1至m列中的存储单元均用于存储用户数据,m=n-2。
在所述存储阵列中,位于第n行第n-1列的存储单元及位于第n行第m列的存储单元,则用于存储第n行中各个存储单元所存储用户数据的行校验数据。
例如,第n行第n-1列及指定的存储单元可以用于存储第n行中的存储单元所保存用户数据的行校验数据,其中第i行第n-1列用于存储第i行的行校验数据,i=1,2,3,……,n-1。
在所述存储阵列中,位于第n-1列中且与第i行相对应的存储单元,用于存储第i行中各个存储单元所存储用户数据的行校验数据,i=1,2,3,……,n-1。
例如,位于第i行第n-1列的存储单元,可以用于存储第i行中各个存储单元所存储用户数据的行校验数据。
在所述存储阵列中,位于第n列中且与第k个斜线校验组相对应的存储单元,用于存储第k个斜线校验组中各个存储单元所存储用户数据的斜线校验数据,k=1,2,3,……,m。
例如,位于第k行第n列的存储单元,可以用于存储第k个斜线校验组中各个存储单元所存储用户数据的斜线校验数据。
位于第n列中的第一指定存储单元,用于存储第一指定行中各个存储单元所存储用户数据的额外校验数据;位于第n行中的第二指定存储单元,用于存储第二指定行中各个存储单元所存储用户数据的额外校验数据。其中,所述第一指定行与所述第二指定行为所述存储阵列第1行至第n-1行中的任意两行。
在使用所述存储阵列存储数据时,可以首先将用户数据存储至第1至m列中除第n行第m列之外的存储单元。存储设备可以采用逐列存储的方式存储用户数据,也可以采用逐行存储的方式向所述存储阵列写入用户数据。
在用户数据存储完成后,或者在用户数据存储过程中,存储设备可以生成所述存储阵列中每一行中存储单元所保存用户数据的行校验数据。其中,行校验数据生成方式为预先设定的校验数据生成方式。
为减少运算量,缩短行校验数据的生成时间,存储设备可以采用异或校验方式生成每一行中存储单元所保存用户数据的行校验数据。具体来说,可以令同一行中的用户数据与该行的行校验数据的异或运算和为预定值,从而确定行校验数据。根据实际需要,所述预定值可以为0或1。
例如,第i行用户数据与第i行的行校验值之间可以满足如下关系:
所述存储阵列每一行中存储单元所保存用户数据的行校验数据可以存储在存储阵列第n-1列中与该行对应的位置。
为便于完成数据修复,第i行的行校验数据仅需存储一份,而第n行中的存储单元所保存用户数据的行校验数据则需存储两份;其中,第i行的行校验数据可以存储在第i行第n-1列,i=1,2,3,……,n-1;第n行中的存储单元所保存用户数据的行校验数据则可以存储在第n行第n-1列及第n行第m列。
在用户数据存储完成后,或者在用户数据存储过程中,存储设备还可以生成每一个斜线校验组中的存储单元所保存用户数据的斜线校验数据。其中,所述斜线校验组是指所述存储阵列中处在同一个斜线上的存储单元所组成的校验组。
其中,斜线校验数据的生成方式也为预先设定的校验数据生成方式。为减少运算量,缩短行校验数据的生成时间,存储设备也可以采用异或校验方式生成每一个斜线校验组的斜线行校验数据。具体来说,可以令同一斜线校验组中存储单元所保存的用户数据与该斜线校验组斜线校验数据的异或运算和为预定值。根据实际需要,所述预定值可以为0或1。
例如,第k个斜线校验组中的用户属于与第k个斜线校验组的斜线校验数据可以满足如下关系:
所述存储阵列每一个斜线校验组中的存储单元所保存用户数据的斜线校验数据可以存储在存储阵列第n列中与该斜线校验组相对应的位置。通常情况下,所述额外校验数据可以按照顺序以存储在所述存储阵列第n列的存储单元中,例如,第k个斜线校验组的斜线校验数据保存在第k行第n列。
在用户数据存储完成后,或者在用户数据存储过程中,存储设备还可以生成所述存储阵列第一指定行的中的存储单元所保存用户数据的斜线校验数据及第二指定行的中的存储单元所保存用户数据的斜线校验数据。其中,第一指定行与第二指定行可以为的任意两行,通常情况下,可以以第1行与第n-1行作为分别作为第一指定行与第二指定行。额外校验数据的生成方式可以与行校验数据及斜线校验数据的生成方式均不相同。例如,可以采用raid6解决方案中校验数据的生成方式生成所述额外校验数据,或者采用循环冗余校验(英文:cyclicredundancycheck,简称crc)生成所述额外校验数据。
在额外校验数据生成之后,可以第一指定行的中的存储单元所保存用户数据的斜线校验数据存储在所述存储阵列第n列中的第一指定存储单元,并将第二指定行的中的存储单元所保存用户数据的斜线校验数据存储在第n列中的第二指定存储单元,其中,所述第一指定存储单元及所述第二指定存储单元为所述存储阵列第n列中除用于保存斜线校验数据的存储单元之外的存储单元。
当n的取值为6时,数据存储状况可以如图3所示。
其中,d1表示属于第1个斜线教研组中的存储单元所保存的用户数据,d2表示属于第2个斜线教研组中的存储单元所保存的用户数据,d3表示属于第3个斜线教研组中的存储单元所保存的用户数据,d4表示属于第4个斜线教研组中的存储单元所保存的用户数据;p1至p6分别表示所述存储阵列第1至6行中的存储单元所保存用户数据的行校验数据;q1至q4分别表示第1至4个斜线教研组中的存储单元所保存用户数据的斜线校验数据。e1为第1行中的存储单元所保存用户数据的额外校验数据,e2为第n-1行中存储单元所保存的用户数据的额外校验数据。
与前述存储阵列相对应,本申请还提供了数据修复方法。所述数据修复方法用于在双盘失效时,对采用前述实施例所述方法存储的数据进行修复。
其中,双盘失效是在指所述存储阵列所使用的硬盘中,由于两个磁盘同时失效,导致所述存储阵列中部分存储单元中存储的数据(包括用户数据、行校验数据、斜线校验数据及额外校验数据)被损坏。
所述存储阵列发生双盘失效情况包括以下四种:用于存储行校验数据的磁盘及存储有斜线校验数据的磁盘失效(即所述存储阵列第n-1列中的存储单元所在的磁盘,及第n列中的存储单元所在的磁盘失效);存储有斜线校验数据的磁盘及一个存储有用户数据的磁盘失效(即,第n列中的存储单元所在的磁盘,及第1至m-1列中任一列中的存储单元所在的磁盘失效);两个存储有用户数据的磁盘失效(即,第1至m-1列中任两列中的存储单元所在的磁盘失效);用于存储行校验数据的磁盘及一个存储有用户数据的磁盘失效(即,第n-1列中的存储单元所在的磁盘,及第1至m-1列中任一列中的存储单元所在的磁盘失效)。
当用于存储行校验数据的磁盘及存储有斜线校验数据的磁盘失效时,可以按照预先的生成规则使用用户数据重新计算行校验数据、斜线校验数据及额外校验数据,具体的数据修复过程在此就不再赘述。
当存储有斜线校验数据的磁盘及一个存储有用户数据的磁盘失效,可以先使用行校验数据修复各行中损坏的用户数据,在用户数据修复完成后,使用用户数据修复斜线校验数据及额外校验数据,具体的数据修复过程在此也不再赘述。
以下实施例主要用于说明两个存储有用户数据的磁盘失效时存储阵列中数据修的复过程,以及用于存储行校验数据的磁盘及一个存储有用户数据的磁盘失效时存储阵列中数据修。
参见图4,为本申请用于存储阵列的数据修复方法一个实施例的流程示意图。该实施例所述的方法可以由存储设备的处理器执行。如图4所示,所述方法包括:
步骤401,当所述存储阵列第n列中的数据未损坏时,修复第一指定行及第二指定行中各个存储单元所存储的数据中损坏的数据。
当所述存储阵列第n列中的数据未损坏时,处理器可以使用所述存储阵列第n列中保存的额外校验数据,修复第一指定行及第二指定行中各个存储单元所存储的数据中损坏的数据。
具体来说,处理器可以使用第一指定行中未损坏的数据及所述第一指定行的中的存储单元所保存用户数据的斜线校验数据,修复第一指定行中各个存储单元所存储的数据中损坏的数据;并使用第二指定行中未损坏的数据及第二指定行的中的存储单元所保存用户数据的斜线校验数据,修复第二指定行中各个存储单元所存储的数据中损坏的数据。
其中,所述第一指定行可以为第1行,所述第二指定行可以为第n-1行,所述第一指定行的中的存储单元所保存用户数据的斜线校验数据可以存储在第n-1行第n列,所述第二指定行的中的存储单元所保存用户数据的斜线校验数据可以存储在第n行第n列。
根据发生双盘失效的磁盘不同,处理器修复所述存储阵列第一指定行及第二指定行中损坏数据的具体方式也不相同。
当两个存储有用户数据的磁盘失效时,由于第一指定行的行校验数据及第一指定行的中的存储单元所保存用户数据的斜线校验数据均为未损坏,因此,处理器可以使用第1行的行校验数据、第1行的额外校验数据以及第1行中未损坏的用户数据,修复第1行中损坏的两个用户数据。同样的,由于第二指定行中损坏的用户数据也可以采用类似的方式修复。
例如,如图5所示,当6个磁盘中,只有磁盘3及磁盘4失效时,处理器可以使用p1及e1修复第1行中损坏的用户数据,并可以使用p5及e2修复第5行中损坏的用户数据。修复的效果如图6所示。
当一个存储有用户数据的磁盘及用于存储行校验数据的磁盘失效时,由于第一指定行中仅有一个用户数据损坏,并且第一指定行的中的存储单元所保存用户数据的斜线校验数据未损坏,因此处理器可以使用第一指定行的中的存储单元所保存用户数据的斜线校验数据修复第一指定行中损坏的用户数据,并且根据未损坏的用户数据及修复的用户数据修复第一指定行的行校验数据。同样的,由于第二指定行中损坏的用户数据及第二指定行的行校验数据也可以采用类似的方式修复。
例如,如图7所示,当磁盘3及磁盘5失效时,处理器可以使用e1修复第1行中损坏的用户数据,并可以使用e2修复第5行中损坏的用户数据。此时,待修复的数据如图8所示。
又如,如图9所示,当磁盘4及磁盘5失效时,处理器同样可以e1修复第1行中损坏的用户数据,并可以使用e2修复第5行中损坏的用户数据。此时,待修复的数据如图10所示。
在此需要说明的是,本申请不对修复第一指定行及第二指定行中各个存储单元所存储的数据中损坏的数据的顺序进行限制。在实际使用中,可以先修复第一指定行中各个存储单元所存储的数据中损坏的数据,也可以先修复及第二指定行中各个存储单元所存储的数据中损坏的数据。
步骤402,使用所述行校验数据及斜线校验数据,逐一修复除所述第一指定行及所述第二指定行外其它各行中存储单元所保存的用数据中损坏的数据。
在第一指定行及第二指定行中各个存储单元所存储的数据中损坏的数据被修复之后,处理器可以逐一修复所述存储阵列除第一指定行及第二指定行外其它行中各个存储单元所存储的数据中损坏的数据。
由于双盘失效至少包含两个存储有用户数据的磁盘失效及一个存储有用户数据的磁盘与一个存储有行校验数据的磁盘失效两种情况,针对这两种情况,可以使用不同的方式进行修复。
当两个存储有用户数据的磁盘失效时,处理器可以使用斜线校验数据及行校验数据逐一修复损坏的用户数据。
例如,在待修复的数据如图6所示时,可以首先使用斜线校验数据第4斜线校验组的未损坏的用户数据及修复第4斜线教研组中,即第4行第3列中,损坏的数据;然后使用第4行的行校验数据及第4行中未损坏及被修复后的用户数据修复第4行第4列中的损坏的用户数据。其它损坏的用户数据也可以照此方式修复,在此就不再赘述。
当一个存储有用户数据的磁盘与一个存储有行校验数据的磁盘失效时,处理器可以首先修复第n行中各个存储单元所存储的数据中损坏的数据;在第n行中各个存储单元所存储的数据中损坏的数据被修复后,使用斜线校验数据及行校验数据逐一修复损坏的用户数据及损坏的行校验数据。
在所述存储阵列第n行第m列中的数据未损坏时,处理器以位于第n行第m列的存储单元中所存储的数据作为第n行中的存储单元所保存用户数据的行校验数据修复第n行中各个存储单元所存储的用户数据中损坏的用户数据。
例如,在待修复的数据如图8所示时,处理器可以首先利用第6行第4列中保存的行校验数据及第六行中未损坏的用户数据修复第6行第3列及第6行第5列中的数据,从而修复第6行中损坏的用户数据。在第6行中的数据都被修复完成后,再利用与斜线校验数据逐一修复每一个斜线校验组中损坏的用户数据,并逐一修复每一个损坏的行校验数据。
而在所述存储阵列第n行第m列中的数据损坏时,处理器可以根据所述第n行第1至m列中各个存储单元所述存储的用户数据计算出第n行第n-1列及第n行第m列中各个存储单元所述存储的行校验数据。
例如,在待修复的数据如图10所示时,处理器可以首先根据第6行中未损坏的用户数据计算出第6行的行的行校验数据,第6行的行校验数据即为第6行第4列及第6行第5列中的数据。在第6行中的数据都被修复完成后,再利用与斜线校验数据逐一修复每一个斜线校验组中损坏的用户数据,并逐一修复每一个损坏的行校验数据。
采用本实施例所提供的方法,可以在发生双盘失效时,修复所述存储阵列中存储单元所保存的用数据中损坏的数据。
与本申请用于存储阵列的数据修复方法相对应,本申请还提供了用于存储阵列的数据修复装置。该装置可以设置在存储设备上,也可以是存储设备本身。
参见图11,为本申请数据修复装置一个实施例的结构示意图。
如图11所示,该装置可以包括:第一修复单元1101及第二修复单元1102。
其中,第一修复单元1101,用于修复第一指定行及第二指定行中各个存储单元所存储的数据中损坏的数据;第二修复单元1102,用于在第一指定行及第二指定行中各个存储单元所存储的数据中损坏的数据被修复之后,逐一修复所述存储阵列除第一指定行及第二指定行外其它行中各个存储单元所存储的数据中损坏的数据。
其中,如果所述存储阵列第n列中各个存储单元所保存的数据未被损坏,所述第一修复单元1101,可以用于使用第一指定行中各个存储单元所存储的数据中未损坏的数据,及所述第一指定存储单元所存储的额外校验数据,修复第一指定行的各个存储单元中所存储的数据中损坏的数据;并且用于使用第二指定行中各个存储单元所存储的数据中未损坏的数据,及所述第二指定存储单元所存储的额外校验数据,修复第二指定行的各个存储单元中所存储的数据中损坏的数据。
可选的,所述第二修复单元1102,具体用于当两个存储有用户数据的磁盘失效时,使用斜线校验数据及行校验数据逐一修复损坏的用户数据。
可选的,所述第二修复单元1102包括:指定行修复子单元,用于当一个存储有用户数据的磁盘与一个存储有行校验数据的磁盘失效时,修复第n行中各个存储单元所存储的数据中损坏的数据;其它行修复子单元,用于在第n行中各个存储单元所存储的数据中损坏的数据被修复后,使用斜线校验数据及行校验数据,逐一修复所述存储阵列各个存储单元中损坏的用户数据及损坏的行校验数据。
可选的,所述指定行修复子单元,具体用于在所述存储阵列第n行第m列中的数据未损坏时,以位于第n行第m列的存储单元中所存储的数据作为第n行中的存储单元所保存用户数据的行校验数据修复第n行中各个存储单元所存储的用户数据中损坏的用户数据。
可选的,所述指定行修复子单元,具体用于在所述存储阵列第n行第m列中的数据未损坏时,以位于第n行第m列的存储单元中所存储的数据作为第n行中的存储单元所保存用户数据的行校验数据修复第n行中各个存储单元所存储的用户数据中损坏的用户数据。
可选的,所述指定行修复子单元,具体用于在所述存储阵列第n行第m列中的数据损坏时,根据所述第n行第1至m列中各个存储单元所述存储的用户数据计算出第n行第n-1列及第n行第m列中各个存储单元所述存储的行校验数据。
具体实现中,本申请还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时可包括本申请提供的用于存储阵列的数据修复方法的各实施例中的部分或全部步骤。所述的存储介质可为磁碟、光盘、只读存储记忆体(英文:read-onlymemory,简称:rom)或随机存储记忆体(英文:randomaccessmemory,简称:ram)等。
本领域的技术人员可以清楚地了解到本申请实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中各个实施例之间相同相似的部分互相参见即可。尤其,对于装置与设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例中的说明即可。
以上所述的本申请实施方式并不构成对本申请保护范围的限定。