一种数据恢复的方法及装置
技术领域
本发明涉及计算机领域,特别涉及一种数据恢复的方法及装置。
背景技术
RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)是一种把多块独立的物理磁盘按特定方式组合在一起的磁盘阵列组,其数据集成度、数据备份功能、容错功能和容量相对于单个磁盘具有非常大的优势,但其也可能像单个磁盘一样出现坏道,此时系统软件需要恢复出现坏道的区域中的数据。
目前,现有技术提供了一种数据恢复的方法,可以为:系统软件对RAID中出现坏道的磁盘中的数据进行恢复,如果在对RAID中出现坏道的磁盘中的数据进行恢复的过程中,该RAID中的另一个磁盘中的某个区域也出现坏道,系统软件就无法继续恢复出现坏道的区域中的数据,为确保其他磁盘中大部分数据可以被正常访问,系统软件会自动标记出现坏道的区域,使该区域中的数据不能被访问。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
系统软件仅仅标记了出现坏道的区域以使该区域中的数据不能被访问,会导致该区域的数据丢失。
发明内容
为了防止出现坏道的区域中的数据丢失,本发明提供了一种数据恢复的方法及装置。所述技术方案如下:
第一方面,一种数据恢复的方法,所述方法包括:
一种数据恢复的方法,所述方法包括:
对出现坏道条带单元的第一磁盘包括的第一条带单元中的数据进行恢复,所述第一磁盘为RAID包括的磁盘,所述第一条带单元为所述第一磁盘中的任一条带单元;
如果在恢复的过程中第二磁盘上的第二条带单元出现坏道,则获取第一磁盘上的第二条带单元的存储时间和所述第三磁盘上的第二条带单元的存储时间,所述第二磁盘为所述RAID包括的除所述第一磁盘以外的一个磁盘,所述第三磁盘为所述RAID包括的除所述第一磁盘和所述第二磁盘以外的其他磁盘,所述第一磁盘上的第一条带单元与所述第二磁盘上的第二条带单元位于不同的条带,所述第一磁盘上的第二条带单元、所述第二磁盘上的第二条带单元和所述第三磁盘上的第二条带单元位于同一条带;
如果所述第三磁盘上的第二条带单元的存储时间不超过所述第一磁盘上的第二条带单元的存储时间,则根据所述第三磁盘上的第二条带单元中的数据和所述第一磁盘上的第二条带单元中的数据,对所述第二磁盘上的第二条带单元中的数据进行恢复。
结合第一方面,在第一方面的第一种可能的实现方式中,所述对出现坏道条带单元的第一磁盘包括的第一条带单元中的数据进行恢复之前,还包括:
获取待存储的数据、所述待存储的数据对应的条带单元以及存储时间,将所述待存储的数据和所述存储时间存储在所述待存储的数据对应的条带单元中。
结合第一方面,在第一方面的第二种可能的实现方式中,所述根据所述第三磁盘上的第二条带单元中的数据和所述第一磁盘上的第二条带单元中的数据,对所述第二磁盘上的第二条带单元中的数据进行恢复,包括:
对所述第三磁盘上的第二条带单元中的数据和所述第一磁盘上的第二条带单元中的数据进行异或运算;
将异或运算的结果确定为所述第二磁盘上的第二条带单元中恢复的数据。
结合第一方面,在第一方面的第三种可能的实现方式中,所述根据所述第三磁盘上的第二条带单元中的数据和所述第一磁盘上的第二条带单元中的数据,对所述第二磁盘上的第二条带单元中的数据进行恢复之后,还包括:
获取存储时间,将所述第二磁盘上的第二条带单元中恢复的数据和所述存储时间存储在所述第二磁盘上的第二条带单元中。
结合第一方面,在第一方面的第四种可能的实现方式中,所述将所述恢复的数据和所述存储时间存储在所述第二磁盘上的第二条带单元中之后,还包括:
在恢复完所述第一磁盘上的第一条带单元中的数据以及所述第二磁盘上的第二条带单元中的数据后,根据所述第二磁盘上的第二条带单元中的数据和所述第三磁盘上的第二条带单元中的数据,对所述第一磁盘上的第二条带单元中的数据进行恢复。
第二方面,一种数据恢复的装置,所述装置包括:
第一恢复模块,用于对出现坏道条带单元的第一磁盘包括的第一条带单元中的数据进行恢复,所述第一磁盘为RAID包括的磁盘,所述第一条带单元为所述第一磁盘中的任一条带单元;
第一获取模块,用于如果在恢复的过程中第二磁盘上的第二条带单元出现坏道,则获取第一磁盘上的第二条带单元的存储时间和所述第三磁盘上的第二条带单元的存储时间,所述第二磁盘为所述RAID包括的除所述第一磁盘以外的一个磁盘,所述第三磁盘为所述RAID包括的除所述第一磁盘和所述第二磁盘以外的其他磁盘,所述第一磁盘上的第一条带单元与所述第二磁盘上的第二条带单元位于不同的条带,所述第一磁盘上的第二条带单元、所述第二磁盘上的第二条带单元和所述第三磁盘上的第二条带单元位于同一条带;
第二恢复模块,用于如果所述第三磁盘上的第二条带单元的存储时间不超过所述第一磁盘上的第二条带单元的存储时间,则根据所述第三磁盘上的第二条带单元中的数据和所述第一磁盘上的第二条带单元中的数据,对所述第二磁盘上的第二条带单元中的数据进行恢复。
结合第二方面,在第二方面的第一种可能的实现方式中,所述装置还包括:
存储模块,用于获取待存储的数据、所述待存储的数据对应的条带单元以及存储时间,将所述待存储的数据和所述存储时间存储在所述待存储的数据对应的条带单元中。
结合第二方面,在第二方面的第二种可能的实现方式中,所述第二恢复模块包括:
运算单元,用于对所述第三磁盘上的第二条带单元中的数据和所述第一磁盘上的第二条带单元中的数据进行异或运算;
确定单元,用于将异或运算的结果确定为所述第二磁盘上的第二条带单元中恢复的数据。
结合第二方面,在第二方面的第三种可能的实现方式中,所述装置还包括:
第二获取模块,用于获取存储时间,将所述第二磁盘上的第二条带单元中恢复的数据和所述存储时间存储在所述第二磁盘上的第二条带单元中。
结合第二方面,在第二方面的第四种可能的实现方式中,所述装置还包括:
第三恢复模块,用于在恢复完所述第一磁盘上的第一条带单元中的数据以及所述第二磁盘上的第二条带单元中的数据后,根据所述第二磁盘上的第二条带单元中的数据和所述第三磁盘上的第二条带单元中的数据,对所述第一磁盘上的第二条带单元中的数据进行恢复。
在本发明实施例中,对出现坏道条带单元的第一磁盘包括的第一条带单元中的数据进行恢复;如果在恢复的过程中第二磁盘上的第二条带单元出现坏道,则获取第一磁盘上的第二条带单元的存储时间和第三磁盘上的第二条带单元的存储时间,如果第三磁盘上的第二条带单元的存储时间不超过第一磁盘上的第二条带单元的存储时间,则根据第三磁盘上的第二条带单元中的数据和第一磁盘上的第二条带单元中的数据,对第二磁盘上的第二条带单元中的数据进行恢复。然后继续对第一磁盘包括的未恢复的条带单元中的数据进行恢复,可以防止出现坏道的条带单元中的数据丢失。
附图说明
图1是本发明实施例1提供的一种数据恢复的方法流程图;
图2-1是本发明实施例2提供的一种RAID示意图;
图2-2是本发明实施例2提供的一种数据恢复的方法流程图;
图3是本发明实施例3提供的一种数据恢复的装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例1
参见图1,本发明实施例提供了一种数据恢复的方法,该方法包括:
步骤101:对出现坏道条带单元的第一磁盘包括的第一条带单元中的数据进行恢复,第一磁盘为RAID包括的磁盘,第一条带单元为第一磁盘中的任一条带单元;
步骤102:如果在恢复的过程中第二磁盘上的第二条带单元出现坏道,则获取第一磁盘上的第二条带单元的存储时间和第三磁盘上的第二条带单元的存储时间,第二磁盘为RAID包括的除第一磁盘以外的一个磁盘,第三磁盘为RAID包括的除第一磁盘和第二磁盘以外的其他磁盘,第一磁盘上的第一条带单元与第二磁盘上的第二条带单元位于不同的条带,第一磁盘上的第二条带单元、第二磁盘上的第二条带单元和第三磁盘上的第二条带单元位于同一条带;
步骤103:如果第三磁盘上的第二条带单元的存储时间不超过第一磁盘上的第二条带单元的存储时间,则根据第三磁盘上的第二条带单元中的数据和第一磁盘上的第二条带单元中的数据,对第二磁盘上的第二条带单元中的数据进行恢复。
进一步地,对出现坏道条带单元的第一磁盘包括的第一条带单元中的数据进行恢复之前,还包括:
获取待存储的数据、待存储的数据对应的条带单元以及存储时间,将待存储的数据和存储时间存储在待存储的数据对应的条带单元中。
优选地,根据第三磁盘上的第二条带单元中的数据和第一磁盘上的第二条带单元中的数据,对第二磁盘上的第二条带单元中的数据进行恢复,包括:
对第三磁盘上的第二条带单元中的数据和第一磁盘上的第二条带单元中的数据进行异或运算;
将异或运算的结果确定为第二磁盘上的第二条带单元中恢复的数据。
进一步地,根据第三磁盘上的第二条带单元中的数据和第一磁盘上的第二条带单元中的数据,对第二磁盘上的第二条带单元中的数据进行恢复之后,还包括:
获取存储时间,将第二磁盘上的第二条带单元中恢复的数据和存储时间存储在第二磁盘上的第二条带单元中。
进一步地,将恢复的数据和存储时间存储在第二磁盘上的第二条带单元中之后,还包括:
在恢复完第一磁盘上的第一条带单元中的数据以及第二磁盘上的第二条带单元中的数据后,根据第二磁盘上的第二条带单元中的数据和第三磁盘上的第二条带单元中的数据,对第一磁盘上的第二条带单元中的数据进行恢复。
在本发明实施例中,对出现坏道条带单元的第一磁盘包括的第一条带单元中的数据进行恢复;如果在恢复的过程中第二磁盘上的第二条带单元出现坏道,则获取第一磁盘上的第二条带单元的存储时间和第三磁盘上的第二条带单元的存储时间,如果第三磁盘上的第二条带单元的存储时间不超过第一磁盘上的第二条带单元的存储时间,则根据第三磁盘上的第二条带单元中的数据和第一磁盘上的第二条带单元中的数据,对第二磁盘上的第二条带单元中的数据进行恢复。然后继续对第一磁盘包括的未恢复的条带单元中的数据进行恢复,可以防止出现坏道的条带单元中的数据丢失。
实施例2
在实施例1所示的方法基础之上,本发明实施例提供了一种数据恢复的方法。该方法可以对RAID中出现坏道的条带单元中的数据进行恢复。
RAID包括至少三个磁盘,且在RAID中按条带进行分组,例如,参见图2-1所示的RAID包括磁盘1、磁盘2、磁盘3和磁盘4,以及包括条带1、条带2、条带3和条带4。条带1包括条带单元11、条带单元12、条带单元13和条带单元14,且条带单元11、条带单元12、条带单元13和条带单元14分别位于磁盘1、磁盘2、磁盘3和磁盘4上;条带2包括条带单元21、条带单元22、条带单元23和条带单元24,且条带单元21、条带单元22、条带单元23和条带单元24分别位于磁盘1、磁盘2、磁盘3和磁盘4上;条带3包括条带单元31、条带单元32、条带单元33和条带单元34,且条带单元31、条带单元32、条带单元33和条带单元34分别位于磁盘1、磁盘2、磁盘3和磁盘4上;条带4包括条带单元41、条带单元42、条带单元43和条带单元44,且条带单元41、条带单元42、条带单元43和条带单元44分别位于磁盘1、磁盘2、磁盘3和磁盘4上。
任一条带包括的条带单元分为两类,分别为条带内容单元和条带校验单元,条带内容单元的个数至少为两个,条带校验单元的个数至少为一个。其中,条带内容单元用于存储内容数据以及存储该内容数据的存储时间,条带校验单元用于存储该条带的校验数据以及存储该校验数据的存储时间,条带校验单元中存储的校验数据是对该条带包括的每个条带内容单元中存储的内容数据进行异或运算得到的。另外,需要说明的是,对于该条带包括的任一条带单元中存储的数据,可以通过对该条带包括的其他每个条带单元中存储的数据进行异或运算得到。
其中,当需要向某个条带单元中存储待存储的数据时,待存储的数据可以为内容数据或校验数据,获取当前时间作为存储待存储的数据的存储时间,将待存储的数据和获取的存储时间存储在该条带单元中。
例如,在图2-1所示的RAID中,条带单元14为条带1中的条带校验单元,条带单元11、条带单元12和条带单元13为条带1中的条带内容单元,条带单元14中存储的校验数据D14是对条带单元11中存储的内容数据D11、条带单元12中存储的内容数据D12和条带单元13中存储的内容数据D13进行异或运算得到的。另外,对于条带单元11中的数据D11,可以通过对条带单元12中存储的数据D12、条带单元13中存储的数据D13和条带单元14中存储的数据D14进行异或运算得到;对于条带单元12中的数据D12,可以通过对条带单元11中存储的数据D11、条带单元13中存储的数据D13和条带单元14中存储的数据D14进行异或运算得到;同样可以利用上述方法得到条带单元13和条带单元14中存储的数据。
同理,上述方法也同样适用于得到条带2、条带3以及条带4包括的条带单元中存储的数据。
在本发明实施例中,当RAID中的某个磁盘上的某个条带单元出现坏道时,需要通过如下流程来对该磁盘包括的每个条带单元中存储的数据进行恢复,为了便于说明将该磁盘称为第一磁盘,将当前将要恢复的条带单元称为第一条带单元。参见图2-2,该方法流程包括:
步骤201:对第一磁盘包括的第一条带单元中的数据进行恢复;
具体地,当对第一磁盘包括的第一条带单元中的数据进行恢复时,确定第一条带单元所在的条带,从RAID包括的除第一磁盘以外的其他每个磁盘中获取该条带包括的条带单元,对获取的每个条带单元中存储的数据进行异或运算,得到第一条带单元中的数据,以实现对第一条带单元中的数据进行恢复。
在此步骤之前,技术人员为该RAID接入一个热备盘,热备盘包括的条带单元与第一磁盘包括的条带单元一一对应。
进一步地,在恢复完第一磁盘中的某一条带单元中的数据时,获取该条带单元在热备盘中对应的条带单元,以及获取当前时间作为存储时间,将该条带单元恢复的数据和获取的存储时间存储在从热备盘中获取的条带单元中。
例如,磁盘1上的条带单元11出现坏道,则需要对磁盘上的条带单元11中存储的数据、条带单元21中存储的数据、条带单元31中存储的数据以及条带单元41中存储的数据进行恢复,假设,当前将要对条带单元11中存储的数据进行恢复,确定条带单元11所在的条带为条带1,从RAID包括的除磁盘1以外的磁盘2、磁盘3和磁盘4中分别获取条带1包括的条带单元12、条带单元13和条带单元14,以及分别读取条带单元12中存储的数据D12、条带单元13中存储的数据D13和条带单元14中存储的数据D14,对条带单元12中存储的数据D12、条带单元13中存储的数据D13和条带单元14中存储的数据D14按照如下公式(1)进行异或运算,将异或运算的结果作为条带单元11中的数据D11;
D11=D12xor D13xor D14……(1);
其中,在公式(1)中,xor为异或运算符号。
进一步地,在恢复完磁盘1上的条带单元11中的数据D11时,获取条带单元11在热备盘中对应的条带单元15,获取当前时间T15作为存储时间,将条带单元11恢复的数据D11和获取的存储时间T15存储在获取的条带单元15中。
其中,对第一条带单元中的数据进行恢复需要一段时间,当在恢复的过程中,发现除第一磁盘以外的其他某个磁盘上出现坏道的条带单元,且其他某个磁盘上出现坏道的条带单元与第一条带单元位于不同的条带,则可以进行后续处理。为了便于说明,将其他某个磁盘称为第二磁盘,将其他某个磁盘上出现坏道的条带单元称为第二条带单元。
例如,在本发明实施例中,在对条带单元11中的数据D11进行恢复的过程需要一段时间,当在恢复的过程中,发现除条带单元11所在的条带1以外的条带单元22出现坏道,且条带单元22是除磁盘1以外的磁盘2上的条带单元,则执行如下步骤。
步骤202:获取第三磁盘上的第二条带单元的存储时间和第一磁盘上的第二条带单元的存储时间,第三磁盘是RAID除第一磁盘和第二磁盘以外的其他磁盘,第一磁盘上的第二条带单元、第二磁盘上的第二条带单元和第三磁盘上的第二条带单元位于同一条带;
例如,在技术人员将磁盘1重新接入该RAID中之后,分别访问磁盘3上的条带单元23、磁盘4上的条带单元24和磁盘1上的条带单元21;分别读取磁盘3上的条带单元23中存储的数据D23以及存储时间T23、磁盘4上的条带单元24存储中的数据D24以及存储时间T24和磁盘1上的条带单元21中存储的数据D21以及存储时间T21。
步骤203:判断第三磁盘上的第二条带单元的存储时间是否超过第一磁盘上的第二条带单元的存储时间,如果未超过,则执行步骤204;
例如,判断磁盘3上的条带单元23的存储时间T23和磁盘4上的条带单元24的存储时间T24是否均超过磁盘1上的条带单元21的存储时间T21,如果均未超过,则说明磁盘3上的条带单元23和磁盘4上的条带单元24中存储的数据未被更新,可以通过如下步骤204并根据磁盘1上的条带单元21中存储的数据D21、磁盘3上的条带单元23中存储的数据D23和磁盘4上的条带单元24中存储的数据D24对磁盘2上的条带单元22中存储的数据进行恢复。
步骤204:根据第一磁盘上的第二条带单元中存储的数据和第三磁盘上的第二条带单元中存储的数据对第二磁盘上的第二条带单元中存储的数据进行恢复;
具体地,对获取的第一磁盘上的第二条带单元中存储的数据和第三磁盘上的第二条带单元中的存储的数据进行异或运算,得到第二磁盘上的第二条带单元中的数据,以实现对第二磁盘上的第二条带单元中的数据进行恢复。
进一步地,在恢复完第二磁盘上的第二条带单元中的数据时,获取当前时间作为存储时间,将第二磁盘上的第二条带单元恢复的数据和获取的存储时间存储在第二磁盘上的第二条带单元中。
例如,对获取的磁盘1上的条带单元21中存储的数据D21、磁盘3上的条带单元23中存储的数据D23和磁盘4上的条带单元24中存储的数据D24按照如下公式(2)进行异或运算,将异或运算的结果作为条带单元22中的数据D22;
D22=D21xor D23xor D24……(2)。
进一步地,在恢复完磁盘2上的条带单元22中的数据D22时,获取当前时间T22作为存储时间,将条带单元22恢复的数据D22和获取的存储时间T22存储在条带单元22中。
步骤205:继续对第一磁盘包括的未恢复的条带单元中的数据进行恢复。
具体地,在恢复完第二磁盘上的第二条带单元中的数据后,继续对第一磁盘包括的未恢复的条带单元中的数据进行恢复,在恢复完成后,获取该条带单元在热备盘中对应的条带单元,以及获取当前时间作为存储时间,将该条带单元恢复的数据和获取的存储时间存储在从热备盘中获取的条带单元中。当恢复完第一磁盘上所有的条带单元中的数据时,将该热备盘作为该RAID的第一磁盘,将原第一磁盘从RAID中隔离。
其中,在对第一磁盘包括的未恢复的条带单元中的数据进行恢复的过程中,如果除第一磁盘以外的其他磁盘中的一个条带单元出现坏道,该条带单元与当前恢复的条带单元位于不同的条带,则可以按照恢复第二磁盘上的第二条带单元中的数据的方法恢复该条带单元中的数据。
例如,在对磁盘1中的条带单元31中的数据进行恢复的过程中,如果磁盘3上的条带单元43出现坏道,则可以按照恢复磁盘2上的条带单元22中存储的数据的方法恢复磁盘3上的条带单元43中存储的数据。
在本发明实施例中,对出现坏道条带单元的第一磁盘包括的第一条带单元中的数据进行恢复;如果在恢复的过程中第二磁盘上的第二条带单元出现坏道,则获取第一磁盘上的第二条带单元的存储时间和第三磁盘上的第二条带单元的存储时间,如果第三磁盘上的第二条带单元的存储时间不超过第一磁盘上的第二条带单元的存储时间,则根据第三磁盘上的第二条带单元中的数据和第一磁盘上的第二条带单元中的数据,对第二磁盘上的第二条带单元中的数据进行恢复。然后继续对第一磁盘包括的未恢复的条带单元中的数据进行恢复,可以防止出现坏道的条带单元中的数据丢失。
实施例3
参见图3,本发明实施例提供了一种数据恢复的装置,该装置包括:
第一恢复模块301,用于对出现坏道条带单元的第一磁盘包括的第一条带单元中的数据进行恢复,第一磁盘为RAID包括的磁盘,第一条带单元为第一磁盘中的任一条带单元;;
第一获取模块302,用于如果在恢复的过程中第二磁盘上的第二条带单元出现坏道,则获取第一磁盘上的第二条带单元的存储时间和第三磁盘上的第二条带单元的存储时间,第二磁盘为RAID包括的除第一磁盘以外的一个磁盘,第三磁盘为RAID包括的除第一磁盘和第二磁盘以外的其他磁盘,第一磁盘上的第一条带单元与第二磁盘上的第二条带单元位于不同的条带,第一磁盘上的第二条带单元、第二磁盘上的第二条带单元和第三磁盘上的第二条带单元位于同一条带;
第二恢复模块303,用于如果第三磁盘上的第二条带单元的存储时间不超过第一磁盘上的第二条带单元的存储时间,则根据第三磁盘上的第二条带单元中的数据和第一磁盘上的第二条带单元中的数据,对第二磁盘上的第二条带单元中的数据进行恢复。
进一步地,该装置还包括:
存储模块,用于获取待存储的数据、待存储的数据对应的条带单元以及存储时间,将待存储的数据和存储时间存储在待存储的数据对应的条带单元中。
优选地,第二恢复模块303包括:
运算单元,用于对第三磁盘上的第二条带单元中的数据和第一磁盘上的第二条带单元中的数据进行异或运算;
确定单元,用于将异或运算的结果确定为第二磁盘上的第二条带单元中恢复的数据。
进一步地,该装置还包括:
第二获取模块,用于获取存储时间,将第二磁盘上的第二条带单元中恢复的数据和存储时间存储在第二磁盘上的第二条带单元中。
进一步地,该装置还包括:
第三恢复模块,用于在恢复完第一磁盘上的第一条带单元中的数据以及第二磁盘上的第二条带单元中的数据后,根据第二磁盘上的第二条带单元中的数据和第三磁盘上的第二条带单元中的数据,对第一磁盘上的第二条带单元中的数据进行恢复。
在本发明实施例中,对出现坏道条带单元的第一磁盘包括的第一条带单元中的数据进行恢复;如果在恢复的过程中第二磁盘上的第二条带单元出现坏道,则获取第一磁盘上的第二条带单元的存储时间和第三磁盘上的第二条带单元的存储时间,如果第三磁盘上的第二条带单元的存储时间不超过第一磁盘上的第二条带单元的存储时间,则根据第三磁盘上的第二条带单元中的数据和第一磁盘上的第二条带单元中的数据,对第二磁盘上的第二条带单元中的数据进行恢复。然后继续对第一磁盘包括的未恢复的条带单元中的数据进行恢复,可以防止出现坏道的条带单元中的数据丢失。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。