具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
现有技术中,为了进一步提高RAID组的可靠性,通常会增设一个或者多个热备盘,当某个盘出现故障时,将故障盘的数据恢复到热备盘中,实现数据的安全。本发明实施例不再设置独立的热备盘,而是以盘内热备空间的形式,将热备盘的功能整合到RAID组的每个硬盘中,本发明实施例占用的总存储资源与现有技术相同,但由于对已经有热备的数据不用做恢复,减少了数据恢复量;对没有热备的数据虽然要做恢复,但恢复数据分别写入各个硬盘的热备空间中,而不是集中写到一个热备盘中,因此写入速度更快。
需要特别说明的是,本领域普通技术人员应该明白,本发明实施例中的成员盘可以是可以组成RAID的可擦写存储介质,例如软盘、硬盘、可擦写光盘、固态硬盘等。
图1为本发明数据重构方法实施例一的流程图,如图1所示,本实施例提供了一种数据重构方法,可以具体包括如下步骤:
步骤101,当一个成员盘损坏时,判断所述成员盘中各成员空间是否存在镜像的热备空间,其中,RAID组中的每个成员盘上均包含至少一个热备空间,各所述热备空间与下一个成员盘中与所述热备空间对应的成员空间互为镜像。
为了解决现有技术中热备盘替换损坏的成员盘时需要重构的数据量大等的缺陷,本实施例将热备盘的热备功能分散到各个成员盘,RAID组中的每个成员盘均包含至少一个热备空间,每个热备空间分别与相邻成员盘中与该热备空间的地址相同的成员空间互为镜像。即本实施例中的每个成员盘可以均包含一个热备空间,或者均包含多个热备空间,每个成员盘中的热备空间的大小是相等的。每个成员盘中的热备空间在该成员盘的下一个成员盘中存在与之相对应的成员空间,该热备空间与下一个成员盘中与该热备空间相对应的成员空间互为镜像。本实施例中所指的下一个成员盘表示逻辑意义上的下一个成员盘,并不一定是物理意义上的下一个成员盘位置关系,只要保证每一个成员盘都拥有下一个成员盘,而且不同成员盘的下一个成员盘不同即可。例如将n个成员盘按照任意的规律分别编号为1、2、3、……n共计n个成员盘,2号成员盘是1号成员盘的下一个成员盘,2号成员盘是1号成员盘的下一个成员盘,3号成员盘是2号成员盘的下一个成员盘……,1号成员盘是n号成员盘的下一个成员盘;本实施例中成员空间与热备空间之间的对应关系可以根据实际情况预先设定,可以各种方式来表示互为镜像的成员空间与热备空间的对应关系,只需满足一个热备空间唯一对应到一个成员空间,不同热备空间对应的成员空间各不相同即可。例如,可以将对应关系具体设定为一个热备空间和下一个成员盘中与该热备空间的地址相同的成员空间相对应,也可以设定为一个热备空间和下一个成员盘中与地址等于该热备空间的地址加1的成员空间相对应,等等。此处的镜像关系具体理解为两个互为镜像的空间中存储的数据完全相同,在数据读写过程中二者互相备份,当其中一个空间出现问题损坏时,另一个空间可以直接替代损坏的空间,替代是指将原本读写损坏空间的操作,改为读取损坏空间的镜像空间。
此处的与热备空间对应的成员空间可以具体为下一个成员盘中与热备空间的地址相同的成员空间。本实施例中RAID组中的每个成员盘的容量相等,每个成员盘被划分为大小均等的多个空间,每个空间在成员盘中具有与其他空间相区别的地址,该地址仅用于标识该空间在其所处的成员盘中的位置。假设一个成员盘的容量大小为T,如果该成员盘划分为n个大小相等的空间,则该成员盘中第一个空间的地址可以表示为0~T/n,第二个空间的地址可以表示为(T+1)/n~2T/n,以此类推。因此,在本实施例中,由于一个RAID组中各成员盘的空间划分方式相同,则每个成员盘中均存在与其他成员盘中地址相等的空间。对于每个热备空间来说,与相邻成员盘中地址与其相同的成员空间互为镜像,例如,当热备空间位于成员盘中第一个位置时,该热备空间的地址可以表示为0~T/n,则该成员盘的相邻成员盘中地址为0~T/n的成员空间与该热备空间互为镜像,即相邻成员盘中第一个成员空间与该热备空间互为镜像,该热备空间为该成员空间的镜像的热备空间。本实施例中所指的相邻成员盘是逻辑上的相邻关系,并不一定是物理上的相邻关系。
图2为本发明数据重构方法实施例一中的热备空间分布示意图,如图2所示,RAID组中包含6个成员盘,每个成员盘中单独分配一个空间用作热备空间;将第一个成员盘中的第一个空间作为该成员盘中的热备空间,即标号为A1的空间为该成员盘中的热备空间;第二个成员盘中的第二个空间作为该成员盘中的热备空间,即标号为B2的空间为该成员盘中的热备空间;第三个成员盘中的第三个空间作为该成员盘中的热备空间,即标号为C3的空间为该成员盘中的热备空间;第四个成员盘中的第四个空间作为该成员盘中的热备空间,即标号为D4的空间为该成员盘中的热备空间;第五个成员盘中的第五个空间作为该成员盘中的热备空间,即标号为E5的空间为该成员盘中的热备空间;第六个成员盘中的第六个空间作为该成员盘中的热备空间,即标号为F6的空间为该成员盘中的热备空间。
其中,每个热备空间在相邻成员盘中均设置有与其镜像的成员空间,此处的相邻成员盘可以为热备空间所在成员盘的下一个成员盘。以上述图2为例,第一个成员盘中标号为A1的热备空间与第二个成员盘中标号为B1的成员空间地址相同,则可以将二者设置为互为镜像,第二个成员盘中标号为B2的热备空间与第三个成员盘中标号为C2的成员空间互为镜像,第三个成员盘中标号为C3的热备空间与第四个成员盘中标号为D3的成员空间互为镜像,第四个成员盘中标号为D4的热备空间与第五个成员盘中标号为E4的成员空间互为镜像,第五个成员盘中标号为E5的热备空间与第六成员盘中标号为F5的成员空间互为镜像,第六个成员盘中标号为F6的热备空间与第一成员盘中标号为A6的成员空间互为镜像。
本步骤为当RAID中的一个成员盘损坏时,依次判断该成员盘中各成员空间是否存在镜像的热备空间。在一个成员盘中,包括多个成员空间和至少一个热备空间,本实施例对多个成员空间依次进行判断,判断其中哪个或哪几个成员空间存在镜像的热备空间。当一个RAID中的每个成员盘中均包含两个大小相等的热备空间时,一个成员盘中可能有两个成员空间存在镜像的热备空间。以上述图2为例,当RAID组中第三个成员盘损坏时,判断其中的成员空间C1、C2、C4、C5、C6是否存在镜像的热备空间。
步骤102,若一个成员空间存在镜像的热备空间,则利用所述成员空间的镜像的热备空间替代所述成员空间,对该成员空间中的数据进行读写操作。
在本实施例中,互为镜像的两个空间中的数据是完全一致的,即成员空间的镜像的热备空间中保存有该成员空间的数据。经过上述步骤的判断,若其中某个成员空间存在镜像的热备空间时,由于该热备空间中保存有该成员空间的数据,则可以利用该镜像的热备空间直接替代该成员空间,将所述成员空间替换为成员空间的镜像的热备空间,使通过读写该热备空间来替代对成员空间的读写操作,从而无需对该成员空间的数据再进行重构备份。例如,第三个成员盘中的成员空间C2与第二个成员盘中的热备空间B2互为镜像,则当第三个成员盘损坏时,无需对成员空间C2中的数据进行重构备份,而直接使用热备空间B2替代成员空间C2进行数据读取即可。
步骤103,若一个成员空间不存在镜像的热备空间,则将所述成员空间中的数据重构到与所述成员空间对应的一个热备空间上。
经过上述步骤的判断,若某个成员空间不存在镜像的热备空间时,则将该成员空间中的数据重构到与该成员空间对应的一个热备空间上。假设本实施例中的成员空间与热备空间的对应关系具体为地址相同,则本步骤可以具体为将该成员空间中的数据重构到与该成员空间地址相同的一个热备空间上。由于热备空间有序分散在各成员盘中,且在不同成员盘中热备空间的地址均不相同,当RAID组中每个成员盘只包含一个热备空间时,成员盘中的每个成员空间在其他成员盘上均能找到与其地址相同的一个热备空间;当RAID组中每个成员盘均包含多个热备空间时,成员盘中的每个成员空间在其他成员盘上均能找到与其地址相同的多个热备空间。在本实施例中,在对一个成员空间的数据进行重构备份时,只选择一个与其地址相同的热备空间进行重构。以上述图2为例,当第三个成员盘损坏时,其中成员空间C1不存在镜像的热备空间,在其他成员盘中选择与其地址相同的热备空间,则获取到第一个成员盘中的热备空间A1的地址与成员空间C1的地址相同,从而将成员空间C1中的数据重构到热备空间A1上。如果某个成员空间中的数据因成员盘损坏而丢失,则在重构之前可以通过现有的RAID恢复技术将该数据恢复出来。在RAID技术中,由于每个地址上均保存有用户数据和校验数据,而用户数据与校验数据的异或的结果为0,则可以由此反推恢复出用户数据。由此,损坏的成员盘中不同成员空间中的数据将重构到不同成员盘中的热备空间上,从而避免了对一个盘造成的重构压力。
本实施例提供了一种数据重构方法,当RAID组中的一个成员盘损坏时,先判断该成员盘中各成员空间是否存在镜像的热备空间,对于存在镜像的热备空间的成员空间来说,则通过读写该热备空间来替代对成员空间的读写;对于不存在镜像的热备空间的成员空间来说,则将该成员空间中的数据重构到与成员空间的地址相同的一个热备空间上。由于存在热备空间的成员空间可以不用重构,因此本实施例的重构过程无需重构损坏的成员盘中的所有数据,减小了重构数据量;重构时,查找损坏成员盘各成员空间对应在其他盘的热备空间,将各成员空间的内容重构到与其对应的一个热备空间中,由于这些热备空间分布在各个成员盘上,因此重构的写压力分散到各个成员盘上,从而克服了现有技术中存在的写瓶颈,大大减少了重构时间。
图3为本发明数据重构方法实施例二的流程图,如图3所示,本实施例提供了一种数据重构方法,可以具体包括如下步骤:
步骤301,在RAID组中的n个成员盘中的每个成员盘上分别设置m个所述热备空间,其中,m×n个所述热备空间构成m组热备空间组,每组热备空间组包含n个热备空间,每组热备空间中的n个所述热备空间的地址各不相同。
本步骤为在RAID组中的n个成员盘中的每个成员盘上分别设置m个热备空间,即每个成员盘均包含m个大小相等的热备空间,其中,n为RAID组中成员盘的数量,m为每个成员盘上预设的热备空间的数量,且m和n均为正整数。在本实施例中,RAID组中的m×n个热备空间构成了m组热备空间组,每组热备空间组分别包含n个热备空间,每组热备空间中的n个热备空间的地址各不相同。本实施例将m×n个热备空间分别分散到n个不同的成员盘中,每个成员盘中包含m个热备空间,其中,热备空间1,2,…n构成一组热备空间组,这n个热备空间分别设置在n个成员盘上,热备空间(n+1),(n+2),…2n构成另一组热备空间组,这n个热备空间分别设置在n个成员盘上,以此类推,成员盘1包含热备空间1,(n+1),…((m-1)×n+1),成员盘2包含热备空间2,(n+2),…((m-1)×n+2),成员盘n包含热备空间n,2n,…m×n。每个热备空间在成员盘中对应一个地址,该地址为与该成员盘中其他空间相区别的地址,该地址仅用于标识该空间在其所处的成员盘中的位置,且该地址与该热备空间所属的热备空间组中其他热备空间在其所属成员盘中的地址不同。
假设一个成员盘的容量大小为T,如果该成员盘划分为n个大小相等的空间,则该成员盘中第一个空间的地址可以表示为0~T/n,第二个空间的地址可以表示为(T/n+1)~2T/n,以此类推。本实施例在每个成员盘中设置热备空间时,需要将各热备空间设置为地址各不相同的位置上。例如,将第一个成员盘中地址为0~T/n的空间设置为热备空间,将第二个成员盘中的地址为(T/n+1)~2T/n的空间设置为热备空间,以此类推,将第n个成员盘中地址为((n-1)T/n+1)~T的设置为热备空间,从而达到了将热备空间按序分散到各成员盘的目的,且各热备空间的地址各不相同。
如果需要在n个成员盘中设置2n个热备空间,每个成员盘中设置两个热备空间,类似的,每个热备空间组中n个热备空间的地址各不相同。如图4所示为本发明数据重构方法实施例二中的热备空间分布示意图,图中的热备空间为空间A1、B2、C3、D4、E5、F6,以及A5、B6、C1、D2、E3、F4,构成两个热备空间组,一个热备空间组中的热备空间A1、B2、C3、D4、E5、F6的地址各不相同,另一个热备空间组中的热备空间A5、B6、C1、D2、E3、F4的地址各不相同。
步骤302,将第i个成员盘中的热备空间设置为与第i+1个成员盘中与所述热备空间对应的成员空间互为镜像,将第n个成员盘中的热备空间设置为与第1个成员盘中与所述热备空间对应的成员空间互为镜像。
在通过上述步骤在各成员盘中设置热备空间后,对各热备空间进行镜像设置,具体将第i个成员盘中的热备空间设置为与第i+1个成员盘中与该热备空间对应的成员空间互为镜像,其中,i=1,2,3…n-1,将第n个成员盘中的热备空间设置为与第1个成员盘中与所述热备空间对应的成员空间互为镜像。其中,互为镜像的热备空间与成员空间之间的对应关系可以根据不同的情况来设定,如设定为地址相同的热备空间与成员空间互为镜像,或者,设定为与热备空间互为镜像的成员空间的地址为热备空间的地址加1等,此处具体以地址相同为例进行说明。以上述图4为例,对于第一组热备空间组来说,将第一个成员盘中的热备空间A1设置为与第二个成员盘中与该热备空间A1的地址相同的成员空间互为镜像,第二个成员盘中与热备空间A1的地址相同的成员空间为B1,则将热备空间A1设置为成员空间B1的镜像的热备空间。将第二个成员盘中的热备空间B2设置为与第三个成员盘中与该热备空间B2的地址相同的成员空间互为镜像,第三个成员盘中与热备空间B2的地址相同的成员空间为C2,则将热备空间B2设置为成员空间C2的镜像的热备空间。以此类推,将热备空间C3设置为成员空间D3的镜像的热备空间,将热备空间D4设置为成员空间E4的镜像的热备空间,将热备空间E5设置为成员空间F5的镜像的热备空间,将热备空间F6设置为成员空间A6的镜像的热备空间,从而完成了第一组热备空间组A1、B2、C3、D4、E5、F6的设置。
继续参见图4,对于第二组热备空间组来说,将第一个成员盘中的热备空间A5设置为与第二个成员盘中与该热备空间A5的地址相同的成员空间互为镜像,第二个成员盘中与热备空间A5的地址相同的成员空间为B5,则将热备空间A5设置为成员空间B5的镜像的热备空间。将第二个成员盘中的热备空间B6设置为与第三个成员盘中与该热备空间B6的地址相同的成员空间互为镜像,第三个成员盘中与热备空间B6的地址相同的成员空间为C6,则将热备空间B6设置为成员空间C6的镜像的热备空间。以此类推,将热备空间C1设置为成员空间D1的镜像的热备空间,将热备空间D2设置为成员空间E2的镜像的热备空间,将热备空间E3设置为成员空间F3的镜像的热备空间,将热备空间F4设置为成员空间A4的镜像的热备空间,从而完成了第一组热备空间组A5、B6、C1、D2、E3、F4的设置。
步骤303,当对RAID组执行写操作时,将待写数据写入到一个成员空间以及所述成员空间的镜像的热备空间中。
在完成热备空间的设置之后,本实施例可以利用热备空间对RAID组中各成员盘中的数据进行正常的读写操作。当需要对RAID组执行写操作时,将待写数据写入到一个成员空间以及该成员空间的镜像的热备空间中,即每次在一个成员空间中写入数据,则同时将写入的数据也写入到该成员空间的镜像的热备空间中,使得该热备空间上保存的数据可以与该成员空间同步,以备后续成员盘损坏时使用。
步骤304,当对RAID组中的数据执行读操作时,从待读数据所在的成员空间中读取待读数据。
当需要对RAID组中的数据执行读操作时,从待读数据所在的成员空间中读取待读数据。具体地,当某个成员盘中某个成员空间的读压力过大或者成员空间不稳定或者其他情况时,或者完全根据使用者的设置,也可以考虑从该成员盘的镜像的热备空间中读取数据。
步骤305,当一个成员盘损坏时,依次判断所述成员盘中各成员空间是否存在镜像的热备空间,如果是,则执行步骤306,否则执行步骤307。
当一个成员盘损坏时,先判断该成员盘中一个成员空间是否存在镜像的热备空间,如果是,则执行步骤306,并对下一个成员空间进行判断,直到完成该成员盘中所有成员空间的判断,否则执行步骤307,并对下一个成员空间进行判断,直到完成该成员盘中所有成员空间的判断。
步骤306,利用成员空间的镜像的热备空间替代所述成员空间,对所述成员空间中的数据进行读写操作。
当一个成员空间存在镜像的热备空间时,由于该热备空间中保存有该成员空间的数据,则可以利用该镜像的热备空间直接替代该成员空间,通过读写该热备空间来替代对成员空间的读写操作,从而无需对该成员空间的数据再进行重构备份。例如,仍以上述图2为例,当第三个成员盘损坏时,第三个成员盘中的成员空间C2与第二个成员盘中的热备空间B2互为镜像,则当第三个成员盘损坏时,无需对成员空间C2中的数据进行重构备份,而直接使用热备空间B2代替成员空间C2进行数据读取即可。
步骤307,将成员空间中的数据重构到与成员空间对应的一个热备空间上。
若某个成员空间不存在镜像的热备空间时,则将该成员空间中的数据重构到与该成员空间对应的一个热备空间上。假设本实施例中的成员空间与热备空间的对应关系具体为地址相同,则本步骤可以具体为将该成员空间中的数据重构到与该成员空间地址相同的一个热备空间上。由于热备空间有序分散在各成员盘中,且在不同成员盘中热备空间的地址均不相同,当RAID组中每个成员盘只包含一个热备空间时,成员盘中的每个成员空间在其他成员盘上均能找到与其地址相同的一个热备空间;当RAID组中每个成员盘包含多个热备空间时,成员盘中的每个成员空间在其他成员盘上均能找到与其地址相同的多个热备空间,在本实施例中,在对一个成员空间的数据进行重构备份时,只选择一个与其地址相同的热备空间进行重构,在其他实施例中,也可以选择多个与其地址相同的热备空间进行重构。以上述图2为例,当第三个成员盘损坏时,其中成员空间C1不存在镜像的热备空间,在其他成员盘中选择与其地址相同的热备空间,则获取到第一个成员盘中的热备空间A1的地址与成员空间C1的地址相同,从而将成员空间C1中的数据重构到热备空间A1上。由此,损坏的成员盘中不同成员空间中的数据将重构到不同成员盘中的热备空间上,从而避免了对一个盘造成的重构压力。
本实施例提供了一种数据重构方法,当RAID组中的一个成员盘损坏时,先判断该成员盘中各成员空间是否存在镜像的热备空间,对于存在镜像的热备空间的成员空间来说,则通过读写该热备空间来替代对成员空间的读写;对于不存在镜像的热备空间的成员空间来说,则将该成员空间中的数据重构到与成员空间的地址相同的一个热备空间上。由于存在热备空间的成员空间可以不用重构,因此本实施例将现有技术中的热备盘方式修改为将热备空间均匀分布于各成员盘中,并使得成员盘中的部分数据与对应的热备空间构成镜像,当成员盘损坏时,本实施例的重构过程无需重构损坏的成员盘中的所有数据,减小了重构的数据量;重构时,查找损坏成员盘各成员空间对应在其他盘的热备空间,将各成员空间的内容重构到与其对应的一个热备空间中,由于这些热备空间分布在各个成员盘上,因此重构的写压力分散到各个成员盘上,从而克服了现有技术中存在的数据写瓶颈,大大减少了重构时间,加快了重构过程中数据的恢复速度。由于镜像的存在,热备空间可以为成员空间承担一定的读压力。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
图5为本发明存储设备实施例的结构图,如图5所示,本实施例提供了一种存储设备,可以具体执行上述方法实施例中的各个步骤,此处不再赘述。本实施例提供的存储设备可以包括存储控制器1和RAID组2,所述RAID组2包括至少两个成员盘21,每个成员盘21均包含至少一个热备空间,各所述热备空间分别与下一个成员盘中与所述热备空间对应的成员空间互为镜像。存储控制器1用于当一个成员盘损坏时,判断所述成员盘中各成员空间是否存在镜像的热备空间;若一个成员空间存在镜像的热备空间,则利用所述成员空间的镜像的热备空间替代所述成员空间,对所述成员空间中的数据进行读写操作;若一个成员空间不存在镜像的热备空间,则将所述成员空间中的数据重构到与所述成员空间对应的一个热备空间上。
进一步地,本实施例中的存储控制器1还用于在RAID组中的n个成员盘21中的每个成员盘21上分别设置m个热备空间,将第i个成员盘21中的热备空间设置为与第i+1个成员盘21中与所述热备空间对应的成员空间互为镜像,将第n个成员盘21中的热备空间设置为与第1个成员盘21中与所述热备空间对应的成员空间互为镜像,其中,m×n个所述热备空间构成m组热备空间组,每组热备空间组包含n个热备空间。所述n为所述RAID组中成员盘21的数量,所述m为每个成员盘21上预设的热备空间的数量,且m和n均为正整数,i=1,2,3…n-1。
进一步地,本实施例中的成员盘21用于当接收到写操作时,将待写数据写入到一个成员空间以及所述成员空间的镜像的热备空间中,当接收到读操作时,从待读数据所在的成员空间中读取所述待读数据。
本实施例提供了一种存储设备,当RAID组中的一个成员盘损坏时,先判断该成员盘中各成员空间是否存在镜像的热备空间,对于存在镜像的热备空间的成员空间来说,则通过读写该热备空间来替代对成员空间的读写,对于不存在镜像的热备空间的成员空间来说,则将该成员空间中的数据重构到与成员空间的地址相同的一个热备空间上。由于存在热备空间的成员空间可以不用重构,因此本实施例将现有技术中的热备盘方式修改为将热备空间均匀分布于各成员盘中,并使得成员盘中的部分数据与对应的热备空间构成镜像,当成员盘损坏时,本实施例的重构过程无需重构损坏的成员盘中的所有数据,减小了重构的数据量;重构时,查找损坏成员盘各成员空间对应在其他盘的热备空间,将各成员空间的内容重构到与其对应的一个热备空间中,由于这些热备空间分布在各个成员盘上,因此重构的写压力分散到各个成员盘上,从而克服了现有技术中存在的数据写瓶颈,大大减少了重构时间,加快了重构过程中数据的恢复速度。由于镜像的存在,热备空间可以为成员空间承担一定的读压力。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。