CN104035830B - 一种数据恢复方法和装置 - Google Patents
一种数据恢复方法和装置 Download PDFInfo
- Publication number
- CN104035830B CN104035830B CN201410288589.XA CN201410288589A CN104035830B CN 104035830 B CN104035830 B CN 104035830B CN 201410288589 A CN201410288589 A CN 201410288589A CN 104035830 B CN104035830 B CN 104035830B
- Authority
- CN
- China
- Prior art keywords
- data
- band
- failure
- caching
- write
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Debugging And Monitoring (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明提供一种数据恢复方法,包括:将写操作所涉及条带的条带号写入缓存;将所述条带中失效盘的存储数据写入缓存;当导致所述条带发生写操作失败的故障被恢复后,根据所述缓存中记录的条带号以及所述失效盘的存储数据对所述RAID存储阵列进行预恢复,以避免对所述条带中失效盘的数据进行重建时由于校验值发生变化而导致的存储数据丢失。通过本发明可以避免由于多块磁盘闪断或是系统掉电后,对当前条带再次进行写操作时校验值发生变化,从而造成的对当前条带中失效盘的数据进行重建时存储数据丢失的问题。
Description
技术领域
本发明涉及数据存储领域,尤其涉及一种数据恢复方法和装置。
背景技术
RAID(Redund ant Array of Independ ent Disks,独立磁盘冗余阵列)已经广泛应用于数据读写的各个领域中。目前较普遍的存储系统结构通常可被分为业务应用层、CACHE层、RAID控制层和物理磁盘层,其中CACHE层是由系统内存分割出的一部分作为RAID阵列的缓存,读写命令的数据块由业务应用层先写至CACHE层,然后CACHE层根据一定的策略将数据块刷写至RAID阵列的磁盘中;如果刷写成功,则CACHE层会将该数据块进行释放;如果刷写不成功,则该数据块会一直保留在CACHE中。因此,需要设备能够提供异常掉电后的UPS保护机制,以保证在异常掉电后记录到cache或内存里的数据可不丢失。
目前,RAID包括RAID0、RAID1、RAID10、RAID5、RAID6等级别,其中,以RAID5的应用最为常见。RAID5是块交叉分布式奇偶校验磁盘阵列,以条块(strip)和条带(stripe)为单位进行数据的分割与重构,使用奇偶校验来保存冗余信息。但它的奇偶校验值不是保存在固定的某一冗余盘上,而是分布在各个数据盘上。为保持校验信息与数据的一致性、有效性和可恢复特性,当一个Stripe中的部分数据(一个stripe或多个stripe的数据)改动后,必须同时改动校验信息。在实际读写中,当有块盘失效,阵列变成降级时,仍然可以进行正常的读写。
然而在具体应用时,极有可能出现写操作时多个磁盘闪断或是系统掉电的情况,这会导致当前条带中被写入磁盘以及校验盘中的数据还未写入完成或已完成时,RAID存储阵列无法或者还未来得及向CACHE层返回写入成功命令,导致被写入的数据仍然保留在CACHE中。此时被写入磁盘中可能存在完全没有写入或部分写入的情况,因此RAID存储阵列重新运行后,CACHE继续写入数据时,根据RMW算法计算出的校验值可能会发生变化,从而造成对当前条带中失效盘的数据进行重建或者局部重建时,根据异或运算计算出的数据也会发生变化,导致该磁盘上的存储数据完全丢失。
发明内容
有鉴于此,本发明提出一种数据恢复方法,应用于RAID存储阵列,所述RAID存储阵列可提供异常掉电后的UPS保护机制,所述方法包括:
步骤A、将写操作所涉及条带的条带号写入缓存;
步骤B、当所述条带存在失效盘时,将所述失效盘的存储数据写入缓存;
步骤C、当导致所述条带发生写操作失败的故障被恢复后,根据所述缓存中记录的条带号以及所述失效盘的存储数据对所述RAID存储阵列进行预恢复,以避免对所述条带中失效盘的数据进行重建时由于校验值发生变化而导致的存储数据丢失。
优选地,所述步骤C还包括:
当所述条带不存在失效盘,并且导致所述条带发生写操作失败的故障被恢复后,根据所述缓存中记录的条带号对所述RAID存储阵列进行预恢复。
优选地,所述将所述条带中失效盘的存储数据写入缓存包括:
判断所述失效盘在该条带中是否为数据盘;
如果是,将所述失效盘的存储数据写入缓存;
如果否,不将所述失效盘的存储数据写入缓存。
优选地,所述根据所述缓存中记录的条带号以及所述失效盘的存储数据对所述RAID存储阵列进行预恢复包括:
从所述缓存中读取条带号;
获取该条带上所有数据盘的存储数据以及所述缓存中记录的该条带的失效盘的存储数据;
对所述所有数据盘以及失效盘的存储数据进行异或运算得出校验值;
将所述校验值写入该条带的校验盘中。
优选地,所述根据所述缓存中记录的条带号对所述RAID存储阵列进行预恢复具体为:
从所述缓存中读取条带号;
获取该条带上所有数据盘的存储数据;
对所述所有数据盘的存储数据进行异或运算得出校验值;
将所述校验值写入该条带的校验盘中。
优选地,所述方法还包括:
当所述RAID存储阵列任一条带中写操作成功后,删除所述缓存中记录的该条带的条带号以及对应的失效盘的存储数据。
本发明还提出一种数据恢复装置,应用于RAID存储阵列,所述RAID存储阵列可提供异常掉电后的UPS保护机制,所述装置包括:
记录单元,用于将写操作所涉及条带的条带号写入缓存;
写入单元,用于当所述条带存在失效盘时,将所述失效盘的存储数据写入缓存;
预恢复单元,用于在导致所述条带发生写操作失败的故障被恢复后,根据所述缓存中记录的条带号以及所述失效盘的存储数据对所述RAID存储阵列进行预恢复,以避免对所述条带中失效盘的数据进行重建时由于校验值发生变化而导致的存储数据丢失。
优选地所述预恢复单元进一步用于:
当所述条带不存在失效盘,并且导致所述条带发生写操作失败的故障被恢复后,根据所述缓存中记录的条带号对所述RAID存储阵列进行预恢复。
优选地,所述写入单元进一步用于判断所述失效盘在该条带中是否为数据盘;
如果是,将所述失效盘的存储数据写入缓存;
如果否,不将所述失效盘的存储数据写入缓存。
优选地,当根据所述缓存中记录的条带号以及所述失效盘的存储数据对所述RAID存储阵列进行预恢复时,所述预恢复单元执行如下步骤:
从所述缓存中读取条带号;
获取该条带上所有数据盘的存储数据以及所述缓存中记录的该条带的失效盘的存储数据;
对所述所有数据盘以及失效盘的存储数据进行异或运算得出校验值;
将所述校验值写入该条带的校验盘中。
优选地,当根据所述缓存中记录的条带号对所述RAID存储阵列进行预恢复时,所述预恢复单元执行如下步骤:
从所述缓存中读取条带号;
获取该条带上所有数据盘的存储数据;
对所述所有数据盘的存储数据进行异或运算得出校验值;
将所述校验值写入该条带的校验盘中。
优选地,所述装置还包括:
删除单元,用于在所述RAID存储阵列任一条带中写操作成功后,删除所述缓存中记录的该条带的条带号以及对应的失效盘的存储数据。
本发明方案通过预先在缓存中写入写操作涉及的条带号以及该条带上失效盘的数据,当该条带发生写操作失败,并且导致所述写操作失败的故障清除后,根据缓存中已记录的条带号以及所述失效盘上的旧数据对所述RAID存储阵列进行预恢复,以防止后续按照现有技术执行读写操作或者对条带中失效盘的数据进行重建时,存储数据丢失的问题。
附图说明
图1是本发明示例性的一种实施方式中一种数据恢复方法的流程图;
图2是本发明示例性的一种对条带中失效盘的数据进行恢复的示意图;
图3是本发明示例性的一种RAID存储阵列的结构示意图;
图4是本发明示例性的一种数据恢复装置的结构框图。
具体实施方式
为了使本发明的技术方案更加清楚明白,以下结合附图并举实施例对本发明进行详细描述。
请参见图1,本发明示例性的一种实施方式中,提出一种数据恢复方法,应用于RAID存储阵列,其中所述RAID存储阵列可提供异常掉电后的UPS保护机制,以保证所述RAID存储阵列在多盘闪断或异常掉电后,记录到缓存中的数据不丢失,所述方法包括:
S101、将写操作所涉及条带的条带号写入缓存;
S102、当所述条带存在失效盘时,将所述失效盘的存储数据写入缓存;
S103、当导致所述条带发生写操作失败的故障被恢复后,根据所述缓存中记录的条带号以及所述失效盘的存储数据对所述条带进行预恢复,以避免对所述条带中失效盘的数据进行重建时由于校验值发生变化而导致的存储数据丢失;
在本实施例中,所述RAID存储阵列在每次写操作时,记录本次写操作所涉及的条带号,并将所述条带号写入预先设置的缓存区中;同时,如果本次写操作所涉及的条带中存在失效盘,还需将所述失效盘的数据也写入预先设置的缓存区中。将所述失效盘的存储数据写入缓存时可以先读取所述条带中其他正常盘的数据;然后对所述正常盘的数据进行异或运算以恢复出所述失效盘的数据,并将所述失效盘的数据写入缓存。
其中,由于校验盘中的数据可以通过数据盘中的数据直接进行异或运算得出,因此在将所述失效盘的数据写入所述缓存区中时,系统首先需要判断该失效盘在该条带中的类型;如果所述失效盘在该条带中为数据盘,那么将该失效盘中的数据写入所述缓存区;如果所述失效盘在该条带中为校验盘,那么该失效盘中的数据则不需要写入所述缓存区,此时缓存区中只需记录各条带的条带号。值得说明的是,在本实施例中,所述失效盘可以是指RAID阵列由正常状态变为降级状态后,缺失的存储磁盘。
在本实施例中,可以在RAID存储阵列的CACHE层中划分一部分存储空间作为所述缓存区,以存储所述条带号以及所述失效盘的数据;例如,考虑到一次写操作所述涉及的条带号不通常不超过1000个,如果每个条带用8个bit位表示,那么可以在CACHE层中划分1K左右的存储空间用于存储所述条带号。
还可以在CACHE层中划分出一定数量的数据存储块,用于存放所述RAID存储阵列各条带中失效盘的数据,其中所述数据存储块的数量取决于一次写操作所涉及的条带数;例如,RAID存储阵列每个条带所能容忍的失效盘的最大数目为1个,当某条带存在1个以上失效盘时,失效盘中的存储数据就无法根据异或运算进行恢复,从而造成数据丢失;因此,如果一次写操作所涉及的条带数为4条,那么用于存储所述失效盘数据的数据存储块的数目则可以为4个。
值得说明的是,所述失效盘的数据可通过获取当前条带中其他正常盘的数据后,通过对所述其他正常盘的数据进行异或运算后进行恢复。例如,请参见图2,假设图2中disk2为失效盘,那么可以通过对disk1、disk3和disk4存储的数据进行异或运算后恢复出disk2的数据。
当然,在具体实现时,所述缓存区也可以不在RAID存储阵列的CACHE层中设置,而是直接在RAID存储阵列的系统内存单独划分存储空间作为所述缓存区,在本实施例不对此作特别限定。
在本实施例中,在将所述条带号以及所述失效盘数据存储到所述缓存区时,可以将条带号以及该条带上的失效盘的存储数据进行关联存放。例如,可以将缓存区中的条带号以及该条带中失效盘的数据关联起来,从而在对RAID存储阵列进行预恢复时,当读取条带号后,根据所述条带号与所述失效盘数据之间的关联关系就能够准确找到对应的失效盘的数据。
当向所述RAID存储阵列中任一条带上写入数据时,如果写操作成功,表明当前存储阵列处于正常工作状态,可以执行正常的读写磁盘操作,于是删除缓存中记录的条带号以及该条带上的失效盘的存储数据删除。
如果发生写操作失败时,那么需要等待系统故障清除后对所述RAID存储阵列进行预恢复。其中,所述RAID存储阵列发生写操作失败通常是由于磁盘出现闪断或者系统掉电后,无法向CACHE层返回写入成功命令而导致的。因此,当RAID存储阵列发生写入操作失败,并且发生故障的磁盘全部恢复、或者部分恢复使得失效盘的数量满足最大失效盘的容忍数量,或者系统供电恢复后,可以通过所述缓存区中记录的条带号以及该条带上的失效盘的存储数据对当前RAID存储阵列进行预恢复。
具体地,在对所述RAID存储阵列进行预恢复时,首先检查所述缓存区中是否已记录了条带号以及对应的失效盘数据;如果没有,则直接运行阵列,继续上层业务操作;如果有,则进一步根据缓存区中记录的条带号和失效盘数据对RAID存储阵列进行预恢复。
具体地,对RAID存储阵列进行预恢复时,需要按照条带号的顺序逐个条带进行恢复。可以从缓存中读取该条带的条带号,再读取该条带上所有正常的数据盘的数据并且从缓存区中读取该条带中失效盘的存储数据,然后对这些数据进行异或运算计算出新的校验值后,将所述新的校验值重新写入该条带的校验盘中。当上述新的检验数据写成功后,将所述缓存区中记录的该条带的条带号以及该条带中失效盘的数据删除。
除了阵列中出现失效盘时会存在背景技术中提到的问题外,在阵列中的磁盘都正常的情况下,如果在用RMW算法执行写命令时出现系统掉电等类似异常导致未向CACHE层返回写入成功命令时,也会存在背景技术中提到的问题。所以,针对阵列中不存在失效盘的情况,在执行写命令时,也先将写操作所涉及条带的条带号写入缓存,如果发生写操作失败,并且后续导致所述条带发生写操作失败的故障(系统掉电等类似异常)被恢复后,则根据所述缓存中记录的条带号对所述RAID存储阵列进行预恢复。
具体地,首先从缓存中读取该条带的条带号,再读取该条带上所有数据盘的数据,然后对读出的所有数据盘上的数据执行异或运算计算出新的校验值后,将所述新的校验值重新写入该条带的校验盘中。当写入成功后,将所述缓存区中记录的该条带的条带号删除(条带无失效盘时缓存中只记录了该条带的条带号)。
当所述RAID存储阵列预恢复完成后,将CACHE层中的写操作失败的那些数据,根据RMW算法重新执行写入的操作。由于预恢复完成后的校验盘中的数据是正确的校验数据,从而后续按照现有技术执行的读写操作或者对条带中失效盘的数据的重建都能正确完成,存储数据不会丢失。
以下通过一个具体的应用实例,来详细阐述本发明。例如,请参见图3,假设阵列进行过同步或者strip0之前已写过数据,那么P0值是有效的。如果此时disk2掉线,RAID5阵列仍然能够向strip0写入新的数据;假设RAID5阵列往disk1中的D0数据块下刷写入新的数据D0′时,首先需要将D0′写入CACHE层,然后读取D0和P0并根据RMW算法计算新的校验值P0′;
具体地,根据RMW算法,新的校验值P0′=D0′⊕P0⊕D0;当计算出P0′后,将D0′和P0′分别写入disk1和disk4中。其中P0′为系统正常运行时计算出的理论校验值;如果在将D0′和P0′分别写入disk1和disk4中时,有磁盘发生闪断或是系统掉电,此时disk1和disk4中有可能数据还未写入完成或已完成,但阵列无法或还未来得及向CACHE返回成功,导致D0′仍然保留在CACHE中;此时,disk1和disk4中的数据可能完全写入、完全没有写入或者部分写入,根据排列组合此时disk1和disk4中存储的数据有以下九种情况:
情况 | A | B | C | D | E | F | G | H | I |
disk1 | D0 | D0' | D0 | D0 | D0' | D0' | D0″ | D0″ | D0″ |
disk4 | P0 | P0' | P0' | P0″ | P0 | P0″ | P0 | P0' | P0″ |
表1
其中,表1中D0″和P0″表示数据部分写入。
由于此时D0′仍然保留在CACHE中,因此当阵列故障恢复后,CACHE势必会继续向strip0写入D0′,然而由于此时disk1和disk4中的数据有可能完全写入或者部分写入,因此当再次通过RMW算法计算出新的校验值时,该新的校验值有可能已经发生变化;
比如,请参见表2,表2为在表1的基础上通过RMW算法计算出的新的校验值。
情况 | disk1 | disk4 | 按如下方式计算P值 |
A | D0 | P0 | D0'⊕D0⊕P0 |
B | D0' | P0' | D0'⊕D0'⊕P0' |
C | D0 | P0' | D0'⊕D0⊕P0' |
D | D0 | P0″ | D0'⊕D0⊕P0″ |
E | D0' | P0 | D0'⊕D0'⊕P0 |
F | D0' | P0″ | D0'⊕D0'⊕P0″ |
G | D0″ | P0 | D0'⊕D0″⊕P0 |
H | D0″ | P0' | D0'⊕D0″⊕P0' |
I | D0″ | P0″ | D0'⊕D0″⊕P0″ |
表2
由表2可见,只有情况A和情况B中,新计算出的校验值P值与P0'相同,因此,在具体应用中,其余7种情况都会造成再次写入D0′时根据RMW算法重新计算出的校验值会发生改变,从而导致对失效盘disk2的数据进行重建时,由于此时校验值已发生变化,通过异或运算恢复出的数据也等同的发生变化,造成该磁盘的存储数据全部丢失。
有鉴于此,本实施例中,当RAID5阵列向strip0写入新的数据时,可以在缓存中记录strip0的条带号以及strip0上的失效盘disk2的数据;当RAID5阵列往disk1中的D0数据块按照RMW算法写入新的数据D0′时,首先将D0′写入CACHE层,然后读取D0和P0并计算新的校验值P0′,此时新的校验值为P0′=D0′⊕P0⊕D0;然后将D0′和P0′写入对应的disk1和disk4。
如果在将D0′和P0′分别写入disk1和disk4中时,磁盘发生闪断或是系统掉电,为了避免造成disk1和disk4中数据未写入或者部分写入造成的P0′值发生改变的问题,可以在发生闪断的磁盘故障恢复或者系统重新加电后,使用缓存区里已保存的strip0的条带号以及disk2的数据对该条带进行预恢复。
首先从缓存区里读取strip0的条带号,然后读取strip0上所有正常的数据盘disk1和disk3的数据,再从缓存区里读取disk2的数据;当所有数据盘的数据都读取完成后,采用异或算法计算新的校验值P0′′,然后将新的校验值P0′′先写入该条带的校验盘。这里读取的数据盘disk1中的数据有可能是D0,也有可能是D0',或者是部分D0、部分D0′形成的组合数据。但是这都不影响新校验值的准确性。
新校验值写入到该条带的校验盘后,上述的预恢复操作也就结束了。接下来,阵列正常运行,后续的业务处理也将按照现有技术正常开展。比如说,对于写操作失败的D0′数据,此时按照RMW算法执行写入操作。该写入操作完成后,该条带校验盘中的校验值为D0′⊕D1⊕D2所得的结果。后续,当系统通过异或计算对失效磁盘disk2的数据进行重建时,不会造成由于校验值发生变化而导致的数据无法恢复以及存储数据丢失的问题,保证了存储数据的正确性以及各条带数据的一致性。
从层次化(业务层、Cache层、Raid层)处理清晰的角度以及尽快释放记录条带号和条块数据内存的角度来讲,本发明采用预恢复操作先保证校验值正确(所谓的校验值正确,是指该校验值为当前条带数据盘上数据对应的校验值),然后再执行写操作失败数据的重新写入。
值得说明的是,以上实例仅以本发明在最通用的RAID5阵列中的应用为示例性描述,并不用于限定本发明;即在实际应用中,本发明可以扩展应用到与RAID5阵列类似的其他级别的存储阵列中,其具体实现方法在本发明中不再进行详述,本领域技术人员可参考上述实施例中披露的具体步骤进行等同实施。
请参见图4,本发明示例性的一种实施方式中,还提出一种数据恢复装置40,应用于RAID存储阵列,所述RAID存储阵列可提供异常掉电后的UPS保护机制,所述装置40包括:
记录单元401,用于将写操作所涉及条带的条带号写入缓存;
写入单元402,用于在所述条带存在失效盘时,将所述失效盘的存储数据写入缓存;
预恢复单元403,用于在导致所述条带发生写操作失败的故障被恢复后,根据所述缓存中记录的条带号以及所述失效盘的存储数据对所述RAID存储阵列进行预恢复,以避免对所述条带中失效盘的数据进行重建时由于校验值发生变化而导致的存储数据丢失。
在本实施例中,所述预恢复单元403进一步用于:
当所述条带不存在失效盘,并且导致所述条带发生写操作失败的故障被恢复后,根据所述缓存中记录的条带号对所述RAID存储阵列进行预恢复。
在本实施例中,所述写入单元进一步用于判断所述失效盘在该条带中是否为数据盘;
如果是,将所述失效盘的存储数据写入缓存;
如果否,不将所述失效盘的存储数据写入缓存。
在本实施例中,当根据所述缓存中记录的条带号以及所述失效盘的存储数据对所述RAID存储阵列进行预恢复时,所述预恢复单元403执行如下步骤:
从所述缓存中读取条带号;
获取该条带上所有数据盘的存储数据以及所述缓存中记录的该条带的失效盘的存储数据;
对所述所有数据盘以及失效盘的存储数据进行异或运算得出校验值;
将所述校验值写入该条带的校验盘中。
在本实施例中,当根据所述缓存中记录的条带号对所述RAID存储阵列进行预恢复时,所述预恢复单元403执行如下步骤:
从所述缓存中读取条带号;
获取该条带上所有数据盘的存储数据以及所述缓存中记录的该条带的失效盘的存储数据;
对所述所有数据盘以及失效盘的存储数据进行异或运算得出校验值;
将所述校验值写入该条带的校验盘中。
在本实施例中,所述装置40还包括:
删除单元404,用于在所述RAID存储阵列中的任一条带写操作成功后,删除所述缓存中记录的该条带的条带号以及对应的失效盘的存储数据。
通过以上实施例的描述,本领域技术人员可以理解实施例中系统中的单元可以合并为一个单元,也可以进一步拆分成多个子单元。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (12)
1.一种数据恢复方法,应用于RAID存储阵列,所述RAID存储阵列可提供异常掉电后的UPS保护机制,其特征在于,所述方法包括:
步骤A、将写操作所涉及条带的条带号写入缓存;
步骤B、当所述条带存在失效盘时,将所述失效盘的存储数据写入缓存;其中,所述失效盘的存储数据为对所述条带中其他正常盘的数据进行异或运算恢复出的失效盘的数据;
步骤C、当所述写操作失败,并且导致所述条带发生写操作失败的故障被恢复后,根据所述缓存中记录的条带号以及所述失效盘的存储数据对所述RAID存储阵列进行预恢复,为所述条带计算新的校验值,并基于该新的校验值对所述失效盘的存储数据进行重建,以避免对所述条带中失效盘的数据进行重建时由于校验值发生变化而导致的存储数据丢失。
2.如权利要求1所述的方法,其特征在于,所述步骤C还包括:
当所述条带不存在失效盘,并且导致所述条带发生写操作失败的故障被恢复后,根据所述缓存中记录的条带号对所述RAID存储阵列进行预恢复。
3.如权利要求1所述的方法,其特征在于,所述将所述条带中失效盘的存储数据写入缓存包括:
判断所述失效盘在该条带中是否为数据盘;
如果是,将所述失效盘的存储数据写入缓存;
如果否,不将所述失效盘的存储数据写入缓存。
4.如权利要求1所述的方法,其特征在于,所述根据所述缓存中记录的条带号以及所述失效盘的存储数据对所述RAID存储阵列进行预恢复包括:
从所述缓存中读取条带号;
获取该条带上所有数据盘的存储数据以及所述缓存中记录的该条带的失效盘的存储数据;
对所述所有数据盘以及失效盘的存储数据进行异或运算得出校验值;
将所述校验值写入该条带的校验盘中。
5.如权利要求2所述的方法,其特征在于,所述根据所述缓存中记录的条带号对所述RAID存储阵列进行预恢复具体为:
从所述缓存中读取条带号;
获取该条带上所有数据盘的存储数据;
对所述所有数据盘的存储数据进行异或运算得出校验值;
将所述校验值写入该条带的校验盘中。
6.如权利要求1所述的方法,其特征在于,所述方法还包括:
当所述RAID存储阵列任一条带中写操作成功后,删除所述缓存中记录的该条带的条带号以及对应的失效盘的存储数据。
7.一种数据恢复装置,应用于RAID存储阵列,所述RAID存储阵列可提供异常掉电后的UPS保护机制,其特征在于,所述装置包括:
记录单元,用于将写操作所涉及条带的条带号写入缓存;
写入单元,用于当所述条带存在失效盘时,将所述失效盘的存储数据写入缓存;其中,所述失效盘的存储数据为对所述条带中其他正常盘的数据进行异或运算恢复出的失效盘的数据;
预恢复单元,用于在所述写操作失败,并且导致所述条带发生写操作失败的故障被恢复后,根据所述缓存中记录的条带号以及所述失效盘的存储数据对所述RAID存储阵列进行预恢复,为所述条带计算新的校验值,并基于该新的校验值对所述失效盘的存储数据进行重建,以避免对所述条带中失效盘的数据进行重建时由于校验值发生变化而导致的存储数据丢失。
8.如权利要求7所述的装置,其特征在于,所述预恢复单元进一步用于:
当所述条带不存在失效盘,并且导致所述条带发生写操作失败的故障被恢复后,根据所述缓存中记录的条带号对所述RAID存储阵列进行预恢复。
9.如权利要求7所述的装置,其特征在于,所述写入单元进一步用于判断所述失效盘在该条带中是否为数据盘;
如果是,将所述失效盘的存储数据写入缓存;
如果否,不将所述失效盘的存储数据写入缓存。
10.如权利要求7所述的装置,其特征在于,当根据所述缓存中记录的条带号以及所述失效盘的存储数据对所述RAID存储阵列进行预恢复时,所述预恢复单元执行如下步骤:
从所述缓存中读取条带号;
获取该条带上所有数据盘的存储数据以及所述缓存中记录的该条带的失效盘的存储数据;
对所述所有数据盘以及失效盘的存储数据进行异或运算得出校验值;
将所述校验值写入该条带的校验盘中。
11.如权利要求8所述的装置,其特征在于,当根据所述缓存中记录的条带号对所述RAID存储阵列进行预恢复时,所述预恢复单元执行如下步骤:
从所述缓存中读取条带号;
获取该条带上所有数据盘的存储数据;
对所述所有数据盘的存储数据进行异或运算得出校验值;
将所述校验值写入该条带的校验盘中。
12.如权利要求7所述的装置,其特征在于,所述装置还包括:
删除单元,用于在所述RAID存储阵列任一条带中写操作成功后,删除所述缓存中记录的该条带的条带号以及对应的失效盘的存储数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410288589.XA CN104035830B (zh) | 2014-06-24 | 2014-06-24 | 一种数据恢复方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410288589.XA CN104035830B (zh) | 2014-06-24 | 2014-06-24 | 一种数据恢复方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104035830A CN104035830A (zh) | 2014-09-10 |
CN104035830B true CN104035830B (zh) | 2017-12-15 |
Family
ID=51466604
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410288589.XA Active CN104035830B (zh) | 2014-06-24 | 2014-06-24 | 一种数据恢复方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104035830B (zh) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3128429B1 (en) | 2014-12-31 | 2019-02-20 | Huawei Technologies Co. Ltd. | Method for writing data into storage system and storage system |
CN105068896B (zh) * | 2015-09-25 | 2019-03-12 | 浙江宇视科技有限公司 | 基于raid备份的数据处理方法及装置 |
CN106227464B (zh) * | 2016-07-14 | 2019-03-15 | 中国科学院计算技术研究所 | 一种双层冗余存储系统及其数据写入、读取及恢复方法 |
CN106294032B (zh) * | 2016-08-05 | 2019-06-28 | 上海交通大学 | 一种磁盘阵列单盘恢复的缓存方法及系统 |
CN106325773B (zh) * | 2016-08-23 | 2019-05-28 | 浪潮(北京)电子信息产业有限公司 | 一种存储系统数据的一致性保障方法、系统及缓存装置 |
CN106371947B (zh) * | 2016-09-14 | 2019-07-26 | 郑州云海信息技术有限公司 | 一种用于raid的多故障盘数据恢复方法及其系统 |
CN106502579B (zh) * | 2016-09-22 | 2019-10-11 | 广州华多网络科技有限公司 | 一种数据存储失败时的重建方法及装置 |
CN106527983B (zh) * | 2016-11-02 | 2020-06-19 | 浙江宇视科技有限公司 | 一种数据存储方法以及磁盘阵列 |
CN108153482B (zh) * | 2016-12-05 | 2021-09-07 | 厦门旌存半导体技术有限公司 | Io命令处理方法与介质接口控制器 |
CN108874312B (zh) * | 2018-05-30 | 2021-09-17 | 郑州云海信息技术有限公司 | 数据存储方法以及存储设备 |
CN110795273B (zh) * | 2019-10-18 | 2021-06-15 | 苏州浪潮智能科技有限公司 | 一种raid的写洞保护方法、系统及存储介质 |
CN111240903A (zh) | 2019-11-04 | 2020-06-05 | 华为技术有限公司 | 数据恢复方法及相关设备 |
CN110874285B (zh) * | 2019-11-19 | 2022-06-21 | 厦门市美亚柏科信息股份有限公司 | 一种实现ext文件系统的可还原写操作的方法 |
CN111813609B (zh) | 2020-07-23 | 2021-10-15 | 深圳大普微电子科技有限公司 | 一种存储介质中数据恢复方法、数据恢复系统及相关设备 |
CN112817794A (zh) * | 2021-01-25 | 2021-05-18 | 浙江大华技术股份有限公司 | 数据备份方法和装置、存储介质及电子设备 |
CN115599607B (zh) * | 2022-11-29 | 2023-06-16 | 苏州浪潮智能科技有限公司 | 一种raid阵列的数据恢复方法及相关装置 |
CN115599589B (zh) * | 2022-11-29 | 2023-03-14 | 苏州浪潮智能科技有限公司 | 一种数据恢复方法及相关装置 |
CN115629714B (zh) * | 2022-12-06 | 2023-03-17 | 苏州浪潮智能科技有限公司 | Raid卡的写方法、raid卡的写系统及相关装置 |
CN116501263B (zh) * | 2023-06-21 | 2023-09-12 | 苏州浪潮智能科技有限公司 | 数据存储装置、服务器、数据存储方法、电子设备和介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1737745A (zh) * | 2004-08-18 | 2006-02-22 | 华为技术有限公司 | 一种磁盘阵列数据的读写方法及并行读写方法 |
CN101236482A (zh) * | 2008-02-26 | 2008-08-06 | 杭州华三通信技术有限公司 | 降级状态下处理数据的方法及独立冗余磁盘阵列系统 |
CN101527142A (zh) * | 2009-04-17 | 2009-09-09 | 杭州华三通信技术有限公司 | 一种磁盘冗余阵列中数据的读写方法和设备 |
CN101916173A (zh) * | 2010-08-27 | 2010-12-15 | 杭州华三通信技术有限公司 | 一种基于raid的数据读写方法及其系统 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080046644A1 (en) * | 2006-08-15 | 2008-02-21 | Kristof De Spiegeleer | Method and System to Provide a Redundant Buffer Cache for Block Based Storage Servers |
CN101526885A (zh) * | 2009-04-21 | 2009-09-09 | 杭州华三通信技术有限公司 | 一种提升独立磁盘冗余阵列性能的方法及其控制器 |
CN103823637B (zh) * | 2013-11-29 | 2017-07-07 | 华为技术有限公司 | 一种数据处理方法及设备 |
-
2014
- 2014-06-24 CN CN201410288589.XA patent/CN104035830B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1737745A (zh) * | 2004-08-18 | 2006-02-22 | 华为技术有限公司 | 一种磁盘阵列数据的读写方法及并行读写方法 |
CN101236482A (zh) * | 2008-02-26 | 2008-08-06 | 杭州华三通信技术有限公司 | 降级状态下处理数据的方法及独立冗余磁盘阵列系统 |
CN101527142A (zh) * | 2009-04-17 | 2009-09-09 | 杭州华三通信技术有限公司 | 一种磁盘冗余阵列中数据的读写方法和设备 |
CN101916173A (zh) * | 2010-08-27 | 2010-12-15 | 杭州华三通信技术有限公司 | 一种基于raid的数据读写方法及其系统 |
Also Published As
Publication number | Publication date |
---|---|
CN104035830A (zh) | 2014-09-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104035830B (zh) | 一种数据恢复方法和装置 | |
US7529970B2 (en) | System and method for improving the performance of operations requiring parity reads in a storage array system | |
US9189311B2 (en) | Rebuilding a storage array | |
US6067635A (en) | Preservation of data integrity in a raid storage device | |
US8839028B1 (en) | Managing data availability in storage systems | |
CN103718162B (zh) | 用于ssd中灵活的raid的方法和设备 | |
JP4754852B2 (ja) | ストレージ制御装置および方法 | |
US8356292B2 (en) | Method for updating control program of physical storage device in storage virtualization system and storage virtualization controller and system thereof | |
CN101916173B (zh) | 一种基于raid的数据读写方法及其系统 | |
CN102207895B (zh) | 一种独立磁盘冗余阵列数据重建方法和装置 | |
US20090204846A1 (en) | Automated Full Stripe Operations in a Redundant Array of Disk Drives | |
CN102184129B (zh) | 磁盘阵列的容错方法和装置 | |
US20070294565A1 (en) | Simplified parity disk generation in a redundant array of inexpensive disks | |
GB2414592A (en) | Decreasing failed disk reconstruction time in a RAID data storage system | |
TWI461901B (zh) | 資料儲存與重建的方法與系統 | |
CN101840360A (zh) | Raid系统的快速重建方法及装置 | |
CN101609420A (zh) | 实现磁盘冗余阵列重建的方法和磁盘冗余阵列及其控制器 | |
US20140245062A1 (en) | Preventing unrecoverable errors during a disk regeneration in a disk array | |
JP4114877B2 (ja) | 不正データを検出するための装置、方法、及びプログラム | |
CN109032513B (zh) | 基于ssd和hdd的raid架构及其备份、重建方法 | |
US20140189424A1 (en) | Apparatus and Method for Parity Resynchronization in Disk Arrays | |
WO2024037122A1 (zh) | 一种针对磁盘固件升级过程中的读写数据方法及计算设备 | |
US7240237B2 (en) | Method and system for high bandwidth fault tolerance in a storage subsystem | |
US7174476B2 (en) | Methods and structure for improved fault tolerance during initialization of a RAID logical unit | |
JP2010267037A (ja) | ディスクアレイ装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CB03 | Change of inventor or designer information |
Inventor after: Zhang Pengguo Inventor after: Xie Fei Inventor after: Xu Yong Inventor after: Guo Yongqiang Inventor before: Xie Fei Inventor before: Xu Yong Inventor before: Guo Yongqiang |
|
CB03 | Change of inventor or designer information |