发明内容
本发明实施例提供了一种存储介质中数据恢复方法、数据恢复系统及相关设备,用于实现“双重失效”的场景下的数据恢复,提高数据存储的稳定性。
本发明实施例第一方面提供了一种存储介质中数据恢复方法,可包括:
当在存储介质写入数据的过程中出现写失败的情况时,提取写失败数据对应的原数据以及所述原数据所属的原RAID条带中的原校验数据;
采用预设的校验算法对所述原数据及所述原校验数据进行计算,得到新校验数据;
将所述原RAID条带中除所述原数据之外的其它有效数据和所述新校验数据组成新RAID条带,并记录所述新RAID条带中的数据关系;
当读取所述新RAID条带中的数据过程中出现读失败的情况时,根据所述新RAID条带中的数据关系恢复读失败的数据。
可选的,作为一种可能的实施方式,本发明实施例中,所述记录所述新RAID条带中的数据关系,可以包括:
将所述新RAID条带中的数据关系记录在内存中,所述数据关系至少包括所述新RAID条带中有效数据的数据存储位置以及所述新校验数据的当前存储位置。
可选的,作为一种可能的实施方式,本发明实施例中的存储介质中数据恢复方法还可以包括:
将所述新RAID条带中未写入固态硬盘的数据写入固态硬盘以完成所述新RAID条带的持久化,并更新所述新RAID条带中的数据关系。
可选的,作为一种可能的实施方式,本发明实施例中的存储介质中数据恢复方法还可以包括:
在未完成所述新RAID条带的持久化之前,将所述新RAID条带的持久化进程写入日志文件中。
可选的,作为一种可能的实施方式,本发明实施例中,当所述原RAID条带符合RAID5标准时,采用预设的校验算法对所述原数据及所述原校验数据进行计算,得到新校验数据,可包括:
采用RAID5校验位算法对所述原数据及所述原校验数据进行奇偶运算,得到新校验数据。
可选的,作为一种可能的实施方式,本发明实施例中,根据所述新RAID条带中的数据关系恢复读失败的数据,可包括:
根据所述数据关系读取所述新RAID条带中的读失败的数据之外的其它目标数据;
采用RAID5校验位算法对所述其它目标数据进行奇偶运算,得到读失败的数据。
可选的,作为一种可能的实施方式,本发明实施例中的所述新RAID条带符合RAID5标准或符合RAID 6标准。
本发明实施例第二方面提供了一种数据恢复系统,可包括:
提取模块,当在存储介质写入数据的过程中出现写失败的情况时,提取写失败数据对应的原数据以及原数据所属的原RAID条带中的原校验数据;
计算模块,采用预设的校验算法对原数据及原校验数据进行计算,得到新校验数据;
记录模块,将原RAID条带中除原数据之外的其它有效数据和新校验数据组成新RAID条带,并记录新RAID条带中的数据关系;
恢复模块,当读取新RAID条带中的数据过程中出现读失败的情况时,根据新RAID条带中的数据关系恢复读失败的数据。
可选的,作为一种可能的实施方式,本发明实施例中的数据恢复系统中的记录模块还可以包括:
记录单元,将新RAID条带中的数据关系记录在内存中,数据关系至少包括新RAID条带中有效数据的数据存储位置以及新校验数据的当前存储位置。
可选的,作为一种可能的实施方式,本发明实施例中的数据恢复系统还可以包括:
更新模块,将新RAID条带中未写入固态硬盘的数据写入固态硬盘以完成新RAID条带的持久化,并更新新RAID条带中的数据关系。
可选的,作为一种可能的实施方式,本发明实施例中的数据恢复系统还可以包括:
日志模块,在未完成新RAID条带的持久化之前,将新RAID条带的持久化进程写入日志文件中。
可选的,作为一种可能的实施方式,本发明实施例中,当原RAID条带符合RAID 5标准时,计算模块可以包括:
计算单元,采用RAID5校验位算法对原数据及原校验数据进行奇偶运算,得到新校验数据。
可选的,作为一种可能的实施方式,本发明实施例中的恢复模块,可以包括:
提取单元,根据数据关系读取新RAID条带中的读失败的数据之外的其它目标数据;
恢复单元,采用RAID5校验位算法对其它目标数据进行奇偶运算,得到读失败的数据。
本发明实施例第三方面提供了一种计算机装置,所述计算机装置包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现如第一方面及第一方面中任意一种可能的实施方式中的步骤。
本发明实施例第四方面提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面及第一方面中任意一种可能的实施方式中的步骤。
从以上技术方案可以看出,本发明实施例具有以下优点:
本发明实施例中,当在存储介质写入数据的过程中出现写失败的情况时,数据恢复系统可以提取写失败数据对应的原数据以及原数据所属的原RAID条带中的原校验数据;然后,采用预设的校验算法对原数据及原校验数据进行计算,得到新校验数据;最后将原RAID条带中除原数据之外的其它有效数据和新校验数据组成新RAID条带,并记录新RAID条带中的数据关系;当读取新RAID条带中的数据过程中出现读失败的情况时,根据新RAID条带中的数据关系恢复读失败的数据。相对于现有技术,本发明实施例中通过构建新RAID条带的方式,实现了“双重失效”的场景下的数据恢复,提高了数据存储的稳定性。
具体实施方式
本发明实施例提供了一种存储介质中数据恢复方法、数据恢复系统及相关设备,用于实现“双重失效”的场景下的数据恢复,提高数据存储的稳定性。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
为了便于理解,先对RAID条带相关技术进行介绍。每一个固态硬盘SSD的存储介质(例如,NAND Flash)可以分为多个block(块),每个block包含一定数量的存储单元(page),在SSD上的数据操作必须以block为单位进行擦除操作,以存储单元(page)为单位进行编程、读取操作。以RAID 5条带为例,如图1所示,示例性的,在当前NAND Flash上的5个不同颗粒的5个Block中分别选择一个存储单元(page)用于存储RAID 5条带的一个数据块。前面4个Block中的存储单元(page)存用户数据块,最后一个Block中的存储单元(page)存校验数据。一个block上的中数据的按照stripe-1到stripe-N的顺序写入,同一个条带的各个数据块并行写入不同block的存储单元(page)上。
下面对本发明实施例中的具体流程进行描述,请参阅图2,本发明实施例中一种存储介质中数据恢复方法的一个实施例可包括:
201、当在存储介质写入数据的过程中出现写失败的情况时,提取写失败数据对应的原数据以及原数据所属的原RAID条带中的原校验数据;
RAID条带化相关技术中,当接收到用户数据之后,会将用户数据分为数据块,分别组成RAID条带,并为RAID条带中各个数据块分配存储位置,然后写入存储介质,例如固态硬盘。本发明实施例中的RAID条带可以为RAID5条带或RAID 6条带。
可以理解的是,本发明实施例中的存储介质可以是固态硬盘、机械硬盘以及其它用于数据存储的存储介质,为了便于理解,下面实施例内容仅以固态硬盘为例进行说明,实际运用中可以采用其它存储介质替代固态硬盘,具体此处不做限定。
在RAID条带的各个数据块写入固态硬盘过程中,可能会出现RAID条带上的某一个或多个数据块出现写失败的情况。出现写失败之后,由于正在写的RAID条带数据分布在未写满数据的block上,这类block由于存储介质工艺特性,相比写满的block,电子状态更加不稳定,读取已写入数据块的时候出现UNC(UNCorrectable)错误的概率比其他写满数据block更高。如果在同一个RAID条带写入固态硬盘过程中,出现写失败之后,又出现了UNC错误,即“双重失效”。
为了在上述“双重失效”场景下恢复固态硬盘中读失败的数据,本发明实施例中,当在存储介质写入数据的过程中出现写失败的情况时,数据恢复系统可以即时提取写失败数据对应的原数据以及该原数据所属的原RAID条带中的原校验数据,并将原RAID条带中除原数据之外的其它有效数据组成新RAID条带。
其中,数据恢复系统可以在内存中提取写失败数据对应的原数据,而该原数据所属的原RAID条带中的原校验数据可以在固态硬盘或内存中提取。
202、采用预设的校验算法对原数据及原校验数据进行计算,得到新校验数据;
因为新RAID条带中不包含写失败数据对应的原数据,所以需要重新计算新RAID条带中的数据块对应的新校验数据。本发明实施例中,数据恢复系统可以采用预设的校验算法对原数据及原校验数据进行计算,得到新校验数据。其中预设的校验算法需要根据用户所采用的RAID条带的类型进行确定,此处不做限定。
203、将原RAID条带中除原数据之外的其它有效数据和新校验数据组成新RAID条带,并记录新RAID条带中的数据关系;
在确定新RAID条带的数据组成之后,还需要记录新RAID条带中的数据关系,该数据关系中至少包含新RAID条带中所有数据块的当前存储位置。
可选的,本发明实施例中,可以将新RAID条带中的数据关系记录在内存中,以提高数据的安全性和稳定性。
204、当读取新RAID条带中的数据过程中出现读失败的情况时,根据新RAID条带中的数据关系恢复读失败的数据。
在出现上述步骤201中描述的“双重失效”的情况时,本发明实施例中,可以根据新RAID条带中的数据关系,读取新RAID条带中的所有数据块(包括新校验数据)根据对应的算法恢复读失败的数据。
以RAID 5条带为例,数据恢复系统可以根据数据关系读取新RAID条带中的读失败的数据之外的其它目标数据(目标数据包括有效数据和新校验数据),然后采用RAID5校验位算法对其它目标数据进行奇偶运算,得到读失败的数据。
本发明实施例中,当在存储介质写入数据的过程中出现写失败的情况时,数据恢复系统可以提取写失败数据对应的原数据以及原数据所属的原RAID条带中的原校验数据;然后,采用预设的校验算法对原数据及原校验数据进行计算,得到新校验数据;最后将原RAID条带中除原数据之外的其它有效数据和新校验数据组成新RAID条带,并记录新RAID条带中的数据关系;当读取新RAID条带中的数据过程中出现读失败的情况时,根据新RAID条带中的数据关系恢复读失败的数据。相对于现有技术,本发明实施例中通过构建新RAID条带的方式,实现了“双重失效”的场景下的数据恢复,提高了数据存储的稳定性。
为了便于理解,下面将以RAID 5条带为例,对本法实施例中的存储介质中数据恢复方法进行描述,请参阅图3,本发明实施例中一种存储介质中数据恢复方法的另一个实施例可包括:
301、当在存储介质写入数据的过程中出现写失败的情况时,提取写失败数据对应的原数据以及原数据所属的原RAID条带中的原校验数据;
本实施例中的步骤301中描述的内容与上述图2所示的实施例中的步骤201类似,此处不做赘述。
302、采用RAID5校验位算法对原数据及原校验数据进行奇偶运算,得到新校验数据;
因为新RAID条带中不包含写失败数据对应的原数据,所以需要重新计算新RAID条带中的数据块对应的新校验数据。当原RAID条带符合RAID 5标准时,数据恢复系统可以采用RAID5校验位算法对原数据及原校验数据进行奇偶运算,得到新校验数据。
可以理解的是,上述计算新校验数据的过程,仅仅是示例性的,当原RAID条带符合RAID 6标准时,可以设置与RAID 6条带对应的预设的校验算法计算新RAID条带的校验数据。
303、将原RAID条带中除原数据之外的其它有效数据和新校验数据组成新RAID条带,并记录新RAID条带中的数据关系;
304、当读取新RAID条带中的数据过程中出现读失败的情况时,根据新RAID条带中的数据关系恢复读失败的数据。
本实施例中的步骤303至304中描述的内容与上述图2所示的实施例中的步骤203至204类似,此处不做赘述。
可选的,当原RAID条带符合RAID 5标准时,根据新RAID条带中的数据关系恢复读失败的数据具体可以包括:根据数据关系读取新RAID条带中的读失败的数据之外的其它目标数据;采用RAID5校验位算法对其它目标数据进行奇偶运算,得到读失败的数据。
可选的,在上述图2或图3所示的实施例的基础上,在组成新RAID条带之后,为了减少对内存的占用,可以将新RAID条带中未写入固态硬盘的数据(具体可以包括新RAID条带中的新校验数据、存储位置发生改变的数据)写入固态硬盘以完成新RAID条带的持久化,并更新新RAID条带中的数据关系。
可选的,在上述图2或图3所示的实施例的基础上,在组成新RAID条带之后,在未完成新RAID条带的持久化之前,将新RAID条带的持久化进程写入日志文件中。在未完成新RAID条带的持久化之前,若出现掉电等意外情况时,重新上电之后,可以根据对应的日志文件重新进行新RAID条带的持久化。
为了便于理解,请参阅图4、图5,下面将以RAID 5条带为例,结合具体的运用实施例对本发明实施例中的存储介质中数据恢复方法进行描述,具体包括如下步骤:
一、构建新RAID5条带”
以图1为例,选择当前Nand上的5个不同Die(晶粒)的5个Block来组成RAID5条带。前面4个Block中的存储单元(page)存用户数据块,最后一个Block中的存储单元(page)存校验数据。
当某个存储单元位置出现写失败时,内存可能是两种状态:
1)条带数据不完整,当前校验还未提交写Nand Flash
如图4所示,这个RAID 5条带后续未写入数据的位置可以不再写入数据(对应上图中标记“未写入”的位置),固件新收到的写请求,写入其他新的条带。同时,写失败的数据,暂时不释放,将写失败的一份或者多份数据(对应上图中“写失败”的位置)对应的原数据在内存中提取出来,将原数据重新跟内存中的原校验数据进行异或运算,计算出新校验数据。此时已经写入Nand Flash的数据加上内存中这份新校验数据,组成了一个新RAID5条带,具备RAID保护的属性。可选的,写失败的数据对应的原数据可以重新再写入其他新分配的条带。
2)条带数据已经完整,校验数据的写已经提交写入Nand Flash
相关技术中,固态硬盘中的固件系统保证一个条带的校验数据在内存中,仅当这个条带的所有IO都成功返回时,才会释放。如图5所示,当中间某些位置出现写失败时,内存中始终存有这个条带的校验数据。当有的位置出现写失败时,将写失败的一份或者多份数据,重新跟内存中的校验进行异或运算,计算出新校验数据。将已经写入Nand Flash的数据加上内存中新的校验,组成了一个新RAID 5条带,具备RAID保护的属性。原校验数据不再使用。可选的,本条带写失败的用户数据对应的原数据,重新再写入其他新分配的条带,和其他数据继续组成新的条带。
特别的,此种场景写失败的是校验位置,校验数据不用重新写,保留内存的原校验数据不要释放即可。这样内存中的原校验数据加上持久化到NandFlash中的数据可以组成一个新RAID5条带。
二、持久化新RAID5条带
本实施中,数据恢复系统可以在内存中针对每个新RAID5条带保存有一份数据关系,主要是记录新RAID5条带有效数据的Nand Flash位置和新的校验位置(校验的位置有内存中和Nand Flash中两种情况)。步骤一生成新RAID5条带后,依次执行以下动作:
1)立即在内存中更新这个新RAID5条带的数据关系,包括这个新RAID5条带有效数据的数据位置,新校验数据的内存位置。此时新校验数据在内存中,所以这个新RAID5条带的数据关系中记录的校验位置是内存地址的一个索引。这样即使前面已写入的位置发生读UNC错误,可以用内存的校验数据加其他已经写入Nand的正确数据进行数据恢复。
2)将内存中这份新校验数据写入一个高可靠性的Nand Flash区域(比如SLC)持久化,然后再次更新当前这个新RAID5条带的数据关系,将校验数据的位置指向持久化的NandFlash位置,然后再将内存中的校验数据删除(释放内存)。最后生成一条Log(日志),后台启动这个新RAID5条带数据结构持久化。因为假设系统中出现大量新RAID5条带,可能也是一个很大的数据缓存,不能一直在内存中。
3)当新RAID5条带数据关系持久化以后删除Log
Log类似一个小的事务机制,当新RAID5条带数据持久化完成,Log就不需要存在,当新RAID5条带数据未持久化完成时,如果发生异常掉电,只需要利用电容备电将Log持久化,上电就可以恢复出未下刷的这部分新RAID5条带。
三、使用新RAID5条带恢复失效数据
新RAID5条带的数据读遇到UNC错误时,需要恢复的时候有两种情况:
1)新RAID5条带校验在内存中,此时利用内存校验和其他几份写入Nand的数据即可恢复;
2)新RAID5条带校验已经持久化到Nand中,此时通过内存维护的数据关系,找到校验的位置和其他数据的位置,读出来通过RAID5算法计算即可恢复。
可以理解的是,此处新RAID5条带的读请求可能来源于主机业务对硬盘的读请求,也可能来源于固件后台任务的读请求。在此方案下,数据都可以得到有效恢复。
四、新RAID5条带清除
可选的,SSD固件系统产生了新RAID5条带后,可以后台启动新RAID5条带的数据搬移,慢慢搬入一个新的位置。搬入新的位置这个过程中,数据会在新的位置重新形成新的条带。当新RAID5条带对应的数据都被搬走后,这些数据就不会再被访问,此时可以更新内存维护的新RAID5条带数据信息,释放持久化校验数据的Nand空间(类似删除掉这个新RAID5条带的数据关系)。这样只需要按照规格,可以提前计算好需要预留的持久化新RAID5条带校验的Nand空间大小。
请参阅图6,本发明实施例中还提供了一种数据恢复系统,可包括:
提取模块601,当在存储介质写入数据的过程中出现写失败的情况时,提取写失败数据对应的原数据以及原数据所属的原RAID条带中的原校验数据;
计算模块602,采用预设的校验算法对原数据及原校验数据进行计算,得到新校验数据;
记录模块603,将原RAID条带中除原数据之外的其它有效数据和新校验数据组成新RAID条带,并记录新RAID条带中的数据关系;
恢复模块604,当读取新RAID条带中的数据过程中出现读失败的情况时,根据新RAID条带中的数据关系恢复读失败的数据。
可选的,作为一种可能的实施方式,本发明实施例中的数据恢复系统中的记录模块还可以包括:
记录单元,将新RAID条带中的数据关系记录在内存中,数据关系至少包括新RAID条带中有效数据的数据存储位置以及新校验数据的当前存储位置。
可选的,作为一种可能的实施方式,本发明实施例中的数据恢复系统还可以包括:
更新模块,将新RAID条带中未写入固态硬盘的数据写入固态硬盘以完成新RAID条带的持久化,并更新新RAID条带中的数据关系。
可选的,作为一种可能的实施方式,本发明实施例中的数据恢复系统还可以包括:
日志模块,在未完成新RAID条带的持久化之前,将新RAID条带的持久化进程写入日志文件中。
可选的,作为一种可能的实施方式,本发明实施例中,当原RAID条带符合RAID 5标准时,计算模块可以包括:
计算单元,采用RAID5校验位算法对原数据及原校验数据进行奇偶运算,得到新校验数据。
可选的,作为一种可能的实施方式,本发明实施例中的恢复模块,可以包括:
提取单元,根据数据关系读取新RAID条带中的读失败的数据之外的其它目标数据;
恢复单元,采用RAID5校验位算法对其它目标数据进行奇偶运算,得到读失败的数据。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
上面从模块化功能实体的角度对本发明实施例中的数据恢复系统进行了描述,请参阅图7,下面从硬件处理的角度对本发明实施例中的计算机装置进行描述:
该计算机装置1可以包括存储器11、处理器12和输入输出总线13。处理器11执行计算机程序时实现上述图1所示的存储介质中数据恢复方法实施例中的步骤,例如图2所示的步骤201至204。或者,处理器执行计算机程序时实现上述各装置实施例中各模块或单元的功能。
本发明的一些实施例中,处理器具体用于实现如下步骤:
当在存储介质写入数据的过程中出现写失败的情况时,提取写失败数据对应的原数据以及原数据所属的原RAID条带中的原校验数据;
采用预设的校验算法对原数据及原校验数据进行计算,得到新校验数据;
将原RAID条带中除原数据之外的其它有效数据和新校验数据组成新RAID条带,并记录新RAID条带中的数据关系;
当读取新RAID条带中的数据过程中出现读失败的情况时,根据新RAID条带中的数据关系恢复读失败的数据。
可选的,作为一种可能的实施方式,处理器还可以用于实现如下步骤:
将新RAID条带中的数据关系记录在内存中,数据关系至少包括新RAID条带中有效数据的数据存储位置以及新校验数据的当前存储位置。
可选的,作为一种可能的实施方式,处理器还可以用于实现如下步骤:
将新RAID条带中未写入固态硬盘的数据写入固态硬盘以完成新RAID条带的持久化,并更新新RAID条带中的数据关系。
可选的,作为一种可能的实施方式,处理器还可以用于实现如下步骤:
在未完成新RAID条带的持久化之前,将新RAID条带的持久化进程写入日志文件中。
可选的,作为一种可能的实施方式,处理器还可以用于实现如下步骤:
采用RAID5校验位算法对原数据及原校验数据进行奇偶运算,得到新校验数据。
可选的,作为一种可能的实施方式,处理器还可以用于实现如下步骤:
根据数据关系读取新RAID条带中的读失败的数据之外的其它目标数据;
采用RAID5校验位算法对其它目标数据进行奇偶运算,得到读失败的数据。
其中,存储器11至少包括一种类型的可读存储介质,可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器11在一些实施例中可以是计算机装置1的内部存储单元,例如该计算机装置1的硬盘。存储器11在另一些实施例中也可以是计算机装置1的外部存储设备,例如计算机装置1上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器11还可以既包括计算机装置1的内部存储单元也包括外部存储设备。存储器11不仅可以用于存储安装于计算机装置1的应用软件及各类数据,例如计算机程序01的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
处理器12在一些实施例中可以是一中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器11中存储的程序代码或处理数据,例如执行计算机程序01等。
该输入输出总线13可以是外设部件互连标准(peripheral componentinterconnect,简称PCI)总线或扩展工业标准结构(extended industry standardarchitecture,简称EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。
进一步地,计算机装置还可以包括有线或无线网络接口14,网络接口14可选的可以包括有线接口和/或无线接口(如WI-FI接口、蓝牙接口等),通常用于在该计算机装置1与其他电子设备之间建立通信连接。
可选地,该计算机装置1还可以包括用户接口,用户接口可以包括显示器(Display)、输入单元比如键盘(Keyboard),可选的,用户接口还可以包括标准的有线接口、无线接口。可选的,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-Emitting Diode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在计算机装置1中处理的信息以及用于显示可视化的用户界面。
图7仅示出了具有组件11-14以及计算机程序01的计算机装置1,本领域技术人员可以理解的是,图7示出的结构并不构成对计算机装置1的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
本发明还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时,可以实现如下步骤:
当在存储介质写入数据的过程中出现写失败的情况时,提取写失败数据对应的原数据以及原数据所属的原RAID条带中的原校验数据;
采用预设的校验算法对原数据及原校验数据进行计算,得到新校验数据;
将原RAID条带中除原数据之外的其它有效数据和新校验数据组成新RAID条带,并记录新RAID条带中的数据关系;
当读取新RAID条带中的数据过程中出现读失败的情况时,根据新RAID条带中的数据关系恢复读失败的数据。
可选的,作为一种可能的实施方式,处理器还可以用于实现如下步骤:
将新RAID条带中的数据关系记录在内存中,数据关系至少包括新RAID条带中有效数据的数据存储位置以及新校验数据的当前存储位置。
可选的,作为一种可能的实施方式,处理器还可以用于实现如下步骤:
将新RAID条带中未写入固态硬盘的数据写入固态硬盘以完成新RAID条带的持久化,并更新新RAID条带中的数据关系。
可选的,作为一种可能的实施方式,处理器还可以用于实现如下步骤:
在未完成新RAID条带的持久化之前,将新RAID条带的持久化进程写入日志文件中。
可选的,作为一种可能的实施方式,处理器还可以用于实现如下步骤:
采用RAID5校验位算法对原数据及原校验数据进行奇偶运算,得到新校验数据。
可选的,作为一种可能的实施方式,处理器还可以用于实现如下步骤:
根据数据关系读取新RAID条带中的读失败的数据之外的其它目标数据;
采用RAID5校验位算法对其它目标数据进行奇偶运算,得到读失败的数据。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。