一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据恢复方法、装置、可读存储介质及电子设备与流程

2022-06-11 15:08:28 来源:中国专利 TAG:

1.本发明涉及计算机存储器领域,特别是涉及一种数据恢复方法、装置、可读存储介质及电子设备。


背景技术:

2.在闪存内部每一个plane上有两个缓存:cache register和page register。为了优化闪存的访问速度可以将两级缓存都利用起来,这就是缓存写(cache program)。虽然闪存采用cache program的方式可以优化前端的写性能,但是采用这种方式有一个弊端:cache program命令结束之后返回的写成功或失败的状态是当前写入数据所在lun上的前一笔数据的写完成状态。如lun0上顺序发送cache program命令为:command1、comand2、command3和command4,那么command2结束时获得command1的执行结果,command 3结束时获得command2的执行结果,command4结束时获得command3的执行结果。因此当主控端得知有写失败发生的时,写失败的命令已经完成,存储数据的内存已经释放,无法再次写入对数据进行恢复。而普通的program命令结束之后返回的状态(写成功或者写失败)是当前写入数据的状态,因此即使写入失败也能够及时的对数据进行恢复。
3.如果闪存空间内有足够大的内存空间,那么可以将命令的数据内存保留直到收到该命令的执行结果之后再做处理。即program成功就释放内存,program失败就重新分配页(page)将数据重写一遍。但是在ssd主控中,特别是在没有动态随机存取存储器(dynamic random access memory,dram)的主控中,内存的大小非常有限,为了高效利用内存,在收到cache program结束的报告时,将立马释放当前命令的数据内存,则使得program失败就没办法立马重写数据,即出现上述cache program写入方式问题。
4.针对上述问题,通常的做法为一、对于cache program失败不做任何处理,即导致数据会丢失。二、采用普通的磁盘阵列(redundant arraysof independent disks,raid)模式。一般是raid5:如图1和图2所示,即将raid的parity(奇偶校验位)写到一个超级块的一个lun上。当出现cache program写失败之后使用parity恢复出错的数据。但这种方式会浪费一定的闪存空间用于写parity。同时在写入parity的时候会也占用带宽,导致主机写性能下降。


技术实现要素:

5.本发明所要解决的技术问题是:提供一种数据恢复方法、装置、可读存储介质及电子设备,针对以cache program方式写入的出错数据恢复,同时不影响数据写入性能并且不浪费存储空间。
6.为了解决上述技术问题,本发明采用的技术方案为:获取命令执行结果,判断所述执行结果是否为写入失败;若是,则获取所述写入失败的page的标号以及储存在磁盘阵列的缓存中的与所述写入失败的page对应的异或结果,并从闪存空间读取当前所有已写入数据的page的数据;
根据所述异或结果和所有所述已写入数据的page的数据得到所述写入失败的page对应的恢复数据;根据所述写入失败的page的标号将所述恢复数据所在超级块所有数据重新写入下一个超级块。
7.为了解决上述技术问题,本发明采用的另一技术方案为:一种数据恢复装置,包括:获取模块,用于获取命令执行结果,判断所述执行结果是否为写入失败;执行模块,用于获取所述写入失败的page的标号以及储存在磁盘阵列的缓存中的与所述写入失败的page对应的异或结果,并从闪存空间读取当前所有已写入数据的page的数据;恢复模块,用于根据所述异或结果和所有所述已写入数据的page的数据得到所述写入失败的page对应的恢复数据;更新模块,用于根据所述写入失败的page的标号将所述恢复数据所在超级块所有数据重新写入下一个超级块。
8.为了解决上述技术问题,本发明采用的另一技术方案为:一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述的一种数据恢复方法中的各个步骤。
9.为了解决上述技术问题,本发明采用的另一技术方案为:一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述的一种数据恢复方法中的各个步骤。
10.本发明的有益效果在于:在获取到cache program失败的命令执行结果后,通过分别从磁盘阵列缓存中获取以写入数据的异或结果,从闪存空间读取当前所有已写入数据的page的数据,再根据得到的异或结果和当前所有已写入数据的page的数据对写入失败的page的数据进行恢复,实现对cache program失败的page的数据进行恢复,同时将异或结果存储在磁盘阵列缓存中而不是闪存空间中,使得闪存空间不需要提供额外的空间用于存储异或结果,能够将所有的存储空间用于数据的存储,提高闪存空间利用率,并且不需要占用额外的带宽用于将异或结果写入闪存空间,从而在既能够实现cache program失败之后数据的恢复数据,又可以保证主机写性能不受影响,而且不浪费闪存空间。
附图说明
11.图1为现有技术中的raid模式结构示意图;图2为现有技术中的raid模式中超级块的结构示意图;图3为本发明实施例中的一种数据恢复方法的步骤流程图;图4为本发明实施例中的一种数据恢复方法的超级块的结构示意图;图5为本发明实施例中的一种数据恢复方法的数据写入结构示意图;图6为本发明实施例中的一种数据恢复方法的数据恢复结构示意图;图7为本发明实施例的一种数据恢复装置的结构示意图;图8为本发明实施例的一种电子设备的结构示意图。
具体实施方式
12.为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
13.请参照图3,一种数据恢复方法,包括步骤:获取命令执行结果,判断所述执行结果是否为写入失败;若是,则获取所述写入失败的page的标号以及储存在磁盘阵列的缓存中的与所述写入失败的page对应的异或结果,并从闪存空间读取当前所有已写入数据的page的数据;根据所述异或结果和所有所述已写入数据的page的数据得到所述写入失败的page对应的恢复数据;根据所述写入失败的page的标号将所述恢复数据所在超级块所有数据重新写入下一个超级块。
14.由上述描述可知,本发明的有益效果在于:在获取到cache program失败的命令执行结果后,通过分别从磁盘阵列缓存中获取以写入数据的异或结果,从闪存空间读取当前所有已写入数据的page的数据,再根据得到的异或结果和当前所有已写入数据的page的数据对写入失败的page的数据进行恢复,实现对cache program失败的page的数据进行恢复,同时将异或结果存储在磁盘阵列缓存中而不是闪存空间中,使得闪存空间不需要提供额外的空间用于存储异或结果,能够将所有的存储空间用于数据的存储,提高闪存空间利用率,并且不需要占用额外的带宽用于将异或结果写入闪存空间,从而在既能够实现cache program失败之后数据的恢复数据,又可以保证主机写性能不受影响,而且不浪费闪存空间。
15.进一步地,所述根据所述异或结果和所有所述已写入数据的page的数据得到所述写入失败的page对应的恢复数据包括:遍历所述已写入数据的page的数据;将所述已写入数据的page内的数据与所述异或结果进行异或操作,得到更新的所述异或结果;将更新的所述异或结果更新至所述磁盘阵列的缓存中,直至每一所述已写入数据的page内的数据均完成所述异或操作,得到所述恢复数据。
16.由上述描述可知,通过从闪存空间内将每一page内的数据读出后依次与异或结果进行异或操作,并将每一次得到的异或结果更新至磁盘阵列的缓存中,并最终计算得到恢复数据,从而保证异或结果以及恢复数据的可靠性进一步地,还包括:接收数据写入命令,根据所述数据写入命令将数据写入所述当前待写入的page内,并获取所述当前待写入的page的前一page所对应的异或结果;将当前待写入的page对应的数据与前一page所对应的所述异或结果进行异或操作,得到更新的所述异或结果;将更新的所述异或结果存储至所述磁盘阵列的缓存中。
17.由上述描述可知,当每一数据写入时,将待写入的数据与储存在磁盘阵列的缓存中的异或结果进行异或操作,并将得到的异或结果更新至磁盘阵列的缓存中,从而为每一次写入的数据生成对应的异或结果,当cache program失败后能够通过生成的异或结果对
该数据进行恢复,保证写入数据的可恢复性。
18.进一步地,还包括:获取所述当前待写入的page所在的逻辑块内储存平面的数量;根据所述储存平面的数量在所述磁盘阵列设置对应数量的缓存大小用于存储所述异或结果。
19.由上述描述可知,通过根据当前待写入的page所在的逻辑块内储存平面的数量在磁盘阵列内设置对应数量的缓存大小用于存储异或结果,使得每一储存平面都有分别对应的一个异或结果,当cache program失败后每一储存平面能够根据对应的异或结果进行数据恢复,保证写入数据的可恢复性。
20.进一步地,所述当前待写入的page所在超级块上的所有page均写入数据成功后,清理所述磁盘阵列的缓存。
21.由上述描述可知,通过在每一超级块上的所有page均写入数据成功后将磁盘阵列的缓存清除,从而当对下一超级块进行数据写入时能够再次利用磁盘阵列的缓存对新超级块的异或结果进行缓存。
22.请参照图7,本发明另一实施例提供了一种数据恢复装置,包括:获取模块,用于获取命令执行结果,判断所述执行结果是否为写入失败;执行模块,用于获取所述写入失败的页的标号以及储存在磁盘阵列的缓存中的与所述写入失败的页对应的异或结果,并从闪存空间读取当前已写入的所有页的数据;恢复模块,用于根据所述异或结果和所有所述页的数据得到所述写入失败的页对应的恢复数据;更新模块,根据所述写入失败的page的标号将所述恢复数据所在超级块所有数据重新写入下一个超级块。
23.本发明另一实施例提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述的一种数据恢复方法中的各个步骤。
24.请参照图8,本发明另一实施例提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述的一种数据恢复方法中的各个步骤。
25.本发明上述数据恢复方法、装置、计算机可读存储介质及电子设备能够适用于各种类型的ssd储存产品,解决cache program失败后数据恢复的问题,以下通过具体实施方式进行说明:名词解释:lun:逻辑单元;page:页;plane:储存平面;实施例一请参照图3和图4,一种数据恢复方法,包括步骤:s1、获取命令执行结果,判断所述执行结果是否为写入失败;如当前接收到超级块中lun0上的page2写入操作的执行结果;若是,s2、获取所述写入失败的page的标号以及储存在磁盘阵列的缓存中的与所述写入失败的page对应的异或结果,并从闪存空间读取当前所有已写入数据的page的数据;如判断得到执行结果为page2写入失败,则获取到page2对应的标号为lun0_plane0_page2以及page2对应的异或结果parity0,并读取page2之前已写入的lun0上的page0和
page1、lun1上的page0、page1和page2、lun2上的page0、page1和page2以及lun3上的page0、page1和page2上的数据;具体的,当发生写失败时根据cache program的原则找到写失败的page;即每次获得的写状态反应的是相同lun上的相同plane的上一个page的program命令的结果;如lun0上的plane0的page3收到写失败的结果,但实际写失败的page是lun0上的plane0的page2;同理可以推导到其他page上得到真实写失败的page;同时,获取命令执行结果可以在当前数据写入之前或写入之后,若为写入后则当前已写入数据的page为:lun0_plane0_page0至lun0_plane0_page3;若为写入前,则当前已写入数据的page1为lun0_plane0_page0至lun3_plane0_page2;s3、根据所述异或结果和所有所述已写入数据的page的数据得到所述写入失败的page对应的恢复数据;所述异或结果parity0为lun0_plane0上的page0、page1和page2、lun1_plane0上的page0和page1、lun2_plane0上的page0和page1以及lun3_plane0上的page0和page1的总异或结果;即p0=[lun0_plane0_page0] xor [lun1_plane0_page0] xor [lun2_plane0_page0] xor [lun3_plane0_page0] xor [lun0_plane0_page1] xor [lun1_plane0_page1] xor [lun2_plane0_page1] xor [lun3_plane0_page1] xor [lun0_plane0_page2] xor...xor [lun3_plane0_page2];s31、遍历所述已写入数据的page的数据;即依次读取lun0_plane0_page0至lun3_plane0_page2的有效数据(不包括lun0_plane0_page2),可案标号顺序进行读取或随机读取等方式进行读取;s32、将所述已写入数据的page内的数据与所述异或结果进行异或操作,得到更新的所述异或结果;如当前读取的page为lun0_plane0_page0,即p0
new
=p0 xor [lun0_plane0_page0];s33、将更新的所述异或结果更新至所述磁盘阵列的缓存中,直至每一所述已写入数据的page内的数据均完成所述异或操作,得到所述恢复数据;即将用于下一次的异或计算,得到p0
new
=lun0_plane0_page2=[lun0_plane0_page0] xor [lun1_plane0_page0] xor [lun2_plane0_page0] xor[lun3_plane0_page0] xor [lun0_plane0_page1] xor [lun1_plane0_page1] xor [lun2_plane0_page1] xor [ lun3_plane0_page1] xor ...xor [lun3_plane0_page2] xor p0;s4、根据所述写入失败的page的标号将所述恢复数据所在超级块所有数据重新写入下一个超级块;根据标号lun0_plane0_page2将最终的所述异或结果p0
new
数据以及所在超级块所有数据重新写入下一个超级块内;由于ssd只能顺序写,因此需要将所述恢复数据所在超级块所有数据重新写入下一个超级块内;虽然恢复数据需要的时间相对常规的做法要长很多,但是在nand的整个生命周期program fail的次数很少,这个时候因为数据恢复而影响了性能是可以接受的情况。
[0026]
实施例二本实施例与实施例一的不同在于,限定了数据写入的过程;请参照图5,包括如下步骤:w1、接收数据写入命令,根据所述数据写入命令将数据写入所述当前待写入的page内,并获取所述当前待写入的page的前一page所对应的异或结果;一plane0为例,若当
前待写入的page为lun0上的page0,而lun0为超级块上的第一个page不存在前一个异或结果,即异或结果初始值为空值;若当前待写入的page为lun0上的page1,则获取得到异或结果为lun3上的page0对应的异或结果;w2、将当前待写入的page对应的数据与前一page所对应的所述异或结果进行异或操作,得到更新的所述异或结果;如当前待写入的page为lun0上的page0,将lun0_plane0_page0与空值进行异或操作,即得到p= lun0_plane0_page0;如当前待写入的page为lun0上的page1,将lun0_plane0_page1与lun3_plane0_page0对应的异或结果进行异或操作,即得到p=[ lun0_plane0_page0] xor [lun1_plane0_page0] xor [lun2_plane0_page0] xor[lun3_plane0_page0] xor [lun0_plane0_page1];其中[ lun0_plane0_page0] xor [lun1_plane0_page0] xor [lun2_plane0_page0] xor [lun3_plane0_page0]为lun0_plane0_page1之前所有以写入数据的page的总异或结果,即每一page对应的异或结果为已写入数据的page的总异或结果;w3、将更新的所述异或结果存储至所述磁盘阵列的缓存中;如将对应的parity0结果存入磁盘阵列的缓存中如raid buffer0;从而在数据写入的过程中不需要将对应的异或结果parity0写nand中,不仅能够用于后续数据的恢复,而且不占用nand的存储空间;w4、所述当前待写入的page所在超级块上的所有page均写入数据成功后,清理所述磁盘阵列的缓存;即等待系统重新分配另一超级块进行数据的写入操作;同时,通常写操作是以一个lun为单位,即当数据写入lun0上的page2时同时将数据写入lun0上的plane0的page2以及lun0上的plane1的page2;因此当lun0上的page2写入时,lun0上的plane0的page2以及plane1的page2同时写入数据;因此,在一个可选的实施方式中,w1之前还包括步骤:w01、获取所述当前待写入的page所在的逻辑块内储存平面的数量;如lun0内包括plane0和plane1两个储存平面,即数量为2;w02、根据所述储存平面的数量在所述磁盘阵列设置对应数量的缓存大小用于存储所述异或结果;分别在raid模块内分别设置raid buffer0用于储存plane0的异或结果parity0,设置raid buffer1用于储存plane1的异或结果parity1;并且,当写操作失败时,即当数据写入lun0上的page2写入失败时,lun0上的plane0的page2以及lun0上的plane1的page2上的数据都写入失败,因此,需要分别对lun0上的plane0的page2以及lun0上的plane1的page2上的数据进行恢复;请参照图6,当恢复数据时,依次从nand中将对应的数据出,并获取raid buffer0/1中储存的parity0/1对lun0上的plane0的page2以及lun0上的plane1的page2上的数据进行恢复,具体步骤请参照实施例一。
[0027]
实施例三请参照图7,一种数据恢复装置,包括:获取模块,用于获取命令执行结果,判断所述执行结果是否为写入失败;执行模块,用于获取所述写入失败的页的标号以及储存在磁盘阵列的缓存中的与所述写入失败的页对应的异或结果,并从闪存空间读取当前已写入的所有页的数据;恢复模块,用于根据所述异或结果和所有所述页的数据得到所述写入失败的页对应的恢复数据;
memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0035]
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本发明所必须的。
[0036]
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
[0037]
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献