具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施方式,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用于解释本发明,并不用于限定本发明。
在RAID(也称为RAID组或RAID磁盘组)的应用系统中,一个硬盘框中包括多个磁盘(或硬盘、固态硬盘等其他存储介质),且该硬盘框由控制系统进行控制。用户可以通过管理装置(例如管理软件、管理客户端等)下发各种指令到控制系统,并由控制系统根据该指令来执行相应操作,例如:使用硬盘框中的若干个磁盘创建各种级别的RAID、以及对创建的RAID进行访问等。
为了方便理解,首先介绍一下RAID的结构。如图2所示,四个竖条代表了RAID包括的4个磁盘,可以分别编号为第0-3块磁盘;RAID中的数据被划分为多个LUN(也可以称为逻辑卷(Volume)),每个LUN又可以进一步划分为多个条带(Stripe),即在磁盘相同偏移处横向逻辑分割形成条带;一个条带所占用的单块磁盘上的区域称作一个分条单元(Segment),每个条带的分条单元分布在RAID的不同磁盘上。
实施例一
图3是根据本发明实施例一的RAID的数据恢复方法的流程图,该方法可以在上述应用系统中实现,并可以由该应用系统中的管理装置和控制系统来执行。如图3所示,该方法包括以下步骤:
步骤S302,将保护磁盘与RAID进行关联;
例如,根据用户输入的所要保护的RAID的标识以及保护磁盘的标识,建立该保护磁盘与该RAID之间的关联关系。在实际应用系统中,用户可以在管理装置提供的界面中输入所要保护的RAID的信息,再输入要作为保护磁盘的空闲磁盘的信息,然后通过下发相应指令通知控制系统将该RAID与该保护磁盘进行关联,例如建立该RAID与该保护磁盘的对应关系。在关联的过程中,并不会改变该RAID的配置信息、级别等,因而也不影响该所要保护的RAID的读写性能。
如图4所示,RAID中创建了三个LUN,分别为LUN A、LUN B和LUNC,用户通过管理装置的界面选定保护磁盘之后,将根据这三个LUN中的各个条带的数据生成保护数据,并写入保护磁盘中的对应位置。图4中仅示出了保护磁盘为一个的情况,可以理解,在实际应用中根据实际需要保护磁盘也可以是多个。
步骤S304,使用RAID中的数据生成保护数据,并将保护数据写入保护磁盘;
例如,可以使用RAID中各个磁盘的数据并按照预定的算法生成保护数据,例如RAID5中的P校验数据的算法、RAID6中的Q校验数据的算法等。另外,在将生成的保护数据写入保护磁盘时,为了方便管理,可以按照RAID的各个条带在所述RAID中的位置,将与所述各个条带相对应的保护数据依次写入到所述保护磁盘中。
步骤S306,当RAID中的至少一块磁盘发生故障时,使用保护磁盘中的保护数据以及RAID中未发生故障的磁盘中的数据,对发生故障的磁盘中的数据进行恢复。
本发明实施例通过将RAID以外的磁盘作为保护磁盘与RAID进行关联,并将保护数据存储在该保护磁盘中,在RAID出现异常如其中的一块或多块磁盘发生故障时,可以使用该保护磁盘中的保护数据对发生故障的磁盘中的数据进行恢复,从而实现了对RAID中的数据的保护,提高了RAID的可靠性。与现有技术相比,本发明实施例将保护数据写入到RAID以外的磁盘中,在提高了RAID的可靠性的基础上,不会影响原RAID的读写性能以及配置信息等,并且无需对原RAID中的数据进行迁移活动,从而避免了现有技术中由于数据迁移带来的较大的风险。
另外,由于关联的保护磁盘不会影响原RAID的读写性能以及配置信息等,这样RAID的级别不会发生改变RAID,原RAID的读写性能也不受影响,使得RAID既保持了原有读写性能不下降,又提高了可靠性,实现了在可靠性和性能之间的动态平衡。由于RAID的级别不变,因此,也避免了现有技术级别迁移后,若用户要想重新使用迁移前的状态还需再次进行动态级别迁移的问题。
并且,现有技术在动态级别迁移的过程中,需要将利用RAID5组中的数据算出的PQ校验位写入到原RAID组的成员盘中,这样,由于向原RAID组的成员盘中增加了数据(即算出的PQ校验位),因此需要预先计算好具有新RAID级别(RAID6)的RAID组的容量,当新RAID级别(RAID6)的RAID组的容量小于或等于原RAID磁盘组的容量限值时,迁移才可能成功。从而,上述现有的技术方案受限于RAID磁盘组的容量限值,而且会存在由于磁盘空间不足而导致动态级别迁移失败的情况。而本发明实施例由于保护数据写入到RAID以外的保护磁盘中而非写入到RAID中,从而本发明实施例不会受限于原RAID的容量限值,同样也不会发生由于原RAID的容量不足而失败的情况。
实施例二
下面以RAID的级别为RAID5为例,详细说明如图3所示的数据恢复方法的具体处理流程,包括以下步骤:
步骤1:如图4所示,将所要保护的RAID5与作为保护磁盘的空闲磁盘进行关联;该步骤对应于图3中的步骤S302。
步骤2:依次获取RAID5的各个条带的数据,并根据获取的各个条带的数据,计算各个条带所对应的保护数据;
其中,对于每个条带,可以按照RAID6的Q校验算法计算该条带所对应的保护数据Q,具体参见如下公式(1):
其中,D
0,D
1,...,D
n分别表示该条带的数据中第0号,第1号,...,第n号磁盘上的分条单元的数据,
表示异或算法,×表示有限域上的数据变换算法,n表示RAID5包括的磁盘的个数-1,n为自然数。
从公式(1)中可以看出,保护数据是将RAID5中各个磁盘上的数据先进行有限域变换,然后进行异或的结果值。按照上述公式(1)即可计算得到每个条带所对应的保护数据。
在实际应用时,可以以RAID上的每个LUN来实现,每个LUN可以拆分至条带实现。由于考虑到此时RAID中并非每个LUN均已写入数据,因此,在获取数据时可以仅获取已经写入数据的LUN(即数据已经更新完毕)中的数据。如图5所示,生成保护数据的流程包括以下步骤:
步骤S502:依次获取RAID5中数据已经更新完毕的LUN;
步骤S504,判断是否还有数据已经更新完毕的LUN,若是,则转入步骤S506,若否,则结束保护数据生成流程;
步骤S506,根据当前LUN中的数据,生成当前LUN对应的保护数据。
具体地,在每个LUN中,又以条带为单位进行保护数据的生成。例如:RAID5中的条带的数据分布如图6所示,按照上述公式(1)可以得到,该条带对应的保护数据
由于RAID5本身具有的P校验数据,且P等于各个磁盘中的数据进行异或后的结果值
因此,在图6所示的条带中
按照上述步骤S502-步骤S506就可以生成RAID内所有数据更新完毕的LUN所对应的保护数据。
步骤3:按照各个条带在RAID5中的位置,将与各个条带相对应的保护数据Q依次写入到保护磁盘中。
在实际应用时,如果在生成保护数据时是以RAID上的每个LUN来实现,每个LUN又拆分至条带实现,则在写入时,就可以将各个LUN对应的保护数据写入到保护磁盘中的对应位置。如图7所示,Por A为RAID5中LUN A对应的保护数据,Por B为RAID5中LUN B对应的保护数据,Por C为RAID5中LUN C对应的保护数据。同样,对于每个LUN(LUN A、LUN B或LUN C)中的各个条带所对应的保护数据,也是与各个条带在RAID中的位置对应的。
上述步骤2和步骤3对应于图3中的步骤S304。在实际应用中,用户可以通过管理装置的界面下发指令,由上述控制系统来执行保护数据的生成及写入。在具体实施时,可以采取边生成保护数据边写入的并行方式,也可以采用在保护数据全部生成完毕后再写入的串行方式,可以根据实际需要来实施。
步骤4:当RAID5中有两个磁盘发生故障时,使用保护磁盘中的保护数据对发生故障的磁盘中的数据进行恢复。
例如,RAID5中的第x号磁盘和第y块磁盘发生了故障,此时,这两个磁盘的数据恢复的处理包括以下步骤:
步骤41,依次获取RAID5中各个条带的数据(显然,只能获得各个条带中未发生故障的磁盘上的分带单元数据)、以及保护磁盘中与上述各个条带对应的保护数据Q;
步骤42,根据在步骤41中获取到的数据,计算上述各个条带中两个磁盘上的分条单元对应的恢复数据;
其中,对于每个条带,按照以下公式(2)分别计算该条带中第x号磁盘和第y块磁盘上的分条单元对应的恢复数据Dx和Dy:
其中,x和y表示发生故障的所述两个磁盘的编号,Dx表示该条带中第x号磁盘上的分条单元对应的恢复数据,Dy表示该条带中第y号磁盘上的分条单元对应的恢复数据,0≤x<y≤n,x和y均为自然数,P表示该条带中的P校验数据,Q表示保护磁盘中与该条带对应的保护数据。
从公式(2)中可以看出,P′等于未发生故障的磁盘的数据进行异或的结果值,而Q′等于未发生故障的磁盘先进行有限域变换后再进行异或的结果值。
例如,如图8所示,假设x=0,y=1,即,RAID5中的第0块磁盘和第1块磁盘发生了故障,未发生故障的磁盘仅有第2号磁盘,则此时从而,使用未发生故障的磁盘中的数据以及保护磁盘中的保护数据,实现了对发生故障磁盘的数据恢复。
同理,如果出现了单块磁盘发生故障,此时就可以通过原RAID5组中的P校验数据进行恢复,即,可以直接通过P来进行异或恢复。
在实际实施时,在步骤42中得到了恢复数据后,还可以执行步骤43,将各个条带中第x号磁盘和第y块磁盘上的分条单元对应的恢复数据Dx和Dy,依次写入到对应的替换了发生故障的磁盘的新磁盘中。即,在将发生了故障的第x号磁盘和第y块磁盘替换为正常的新磁盘之后,将Dx写入到新第x号磁盘中,以及将Dy写入到新第x号磁盘中。
在上述实施例二中,将图3所述的方法应用在RAID5上,这样,无需改变RAID5的级别,从而实现了使得RAID在保持RAID5的高读写性能的同时,又可以达到如RAID6般的高可靠性(支持双盘失效)。由于无需进行数据迁移,因此在避免了数据迁移所带来的风险性以外,也降低了操作复杂度。
显然,在该实施例二中,除了可以采用上述公式(1)生成保护数据以及公式(2)得到恢复数据以外,也可以利用其他的校验算法来生成保护数据,并利用相应的算法得到恢复数据。例如:NetApp的RAID-DP、HP的RAID5-DP等。本领域技术人员在实际实施的过程中,可以根据需要来采用不同的校验算法实现保护数据的生成以及故障磁盘的数据恢复。本发明实施例对此不做限定,只要能够实现两块磁盘的数据恢复即可。
实施例三
由于RAID3与RAID5相比,区别仅在于RAID3中的P校验数据全部存储在同一块校验盘上,而RAID5中的P校验数据是分布在各个成员盘(即RAID包括的磁盘)上,因此,在上述的数据恢复方法应用于RAID3时,具体的具体处理流程与上述实施例二相同,这里不再赘述。
同样,在上述的数据恢复方法应用于RAID3时,具体的具体处理流程也与上述实施例二相同。
实施例四
当所要保护的RAID的级别为RAID10(即RAID 0+1,是RAID 0和RAID1的组合),由于RAID10中并不存在校验数据,因此,在关联的保护磁盘为1块的情况下,可以采用P校验算法生成保护数据;而在关联的保护磁盘为2块的情况下,可以采用P+Q校验算法生成保护数据,同上述实施例二。
具体地,(一)在关联的保护磁盘为1块的情况下,具体处理流程如下:
步骤1:与实施例二中的步骤1相同;
步骤2:与实施例二中的步骤2基本类似,但是计算一个条带对应的保护数据时,采用RAID5的P校验算法,具体参见下述公式(3):
其中,D
0,D
1,...,D
n分别表示该条带的数据中第0号,第1号,...,第n号磁盘上的分条单元的数据,第0号,第1号,...,第n号磁盘为RAID10中的源盘,
表示异或算法,×表示有限域上的数据变换算法,n表示[(RAID10包括的磁盘的个数)/2]-1,n为自然数。
RAID10中的数据是完全备份的,则互为备份的磁盘称为源盘(可以为一个或多个)和备份磁盘。
步骤3:按照各个条带在RAID10中的位置,将与各个条带相对应的保护数据P依次写入到保护磁盘中;
步骤4:当RAID10中的某一块磁盘(如第x号磁盘)及其备份磁盘均发生故障时,对第x号磁盘进行数据恢复时,采用如下公式(4):
其中,P即为保护磁盘中的数据,而P′即为所有未发生故障的源盘中的数据进行异或的结果值。
其他同上述实施例二中的步骤4。
显然,此时RAID10具备了如RAID5般的高可靠性,能够支持RAID10中一对互为备份的磁盘失效。
(二)在关联的保护磁盘为2块(记为第一保护磁盘和第二保护磁盘)的情况下,具体处理流程如下:
步骤1:同实施例二的步骤1;
步骤2-3:按照上述公式(3)计算保护数据P,并将保护数据P放入到第一保护磁盘中;按照上述公式(1)计算保护数据Q,并将保护数据Q放入到第二保护磁盘中,注意此时公式(2)中的第0号,第1号,...,第n号磁盘为RAID10中的源盘,n表示[(RAID10包括的磁盘的个数)/2]-1;
步骤4:当RAID10中有两个磁盘(如第x号磁盘和第y号磁盘)发生故障,并且第x号磁盘和第y号磁盘对应的备份磁盘也发生了故障时,同实施例二中的步骤4,按照上述公式(2)分别计算第x号磁盘对应的恢复数据Dx和第x号磁盘对应的恢复数据Dy。需要注意的是:此时公式(2)中的P表示第一保护磁盘中与该条带对应的保护数据,Q表示第二保护磁盘中与该条带对应的保护数据,第0号,第1号,...,第n号磁盘为RAID10中的源盘,n表示[(RAID10包括的磁盘的个数)/2]-1。
显然,此时RAID10具备了如RAID6般的高可靠性,能够支持RAID10中两对互为备份的磁盘失效。
在上述实施例一至实施例四中,多关联一块保护磁盘即在原RAID的基础上多增加了一块冗余保护磁盘,从而也就可以多支持RAID中的一块磁盘失效的情况,当然前提是需要不同的算法支持。例如在所要保护的RAID的级别为RAID5时,关联2个保护磁盘可以支持RAID5中的3块磁盘发生故障时的数据恢复,在生成2块保护磁盘中的保护数据时只需分别采用不同的算法即可,本领域技术人员可以根据实际实施情况采用现有算法来实现。
同样,还可以将上述方法应用于其他级别中如RAID6等,来实现各种级别的RAID的可靠性的提高。
此外,在上述实施例一至实施例四中,可以在超过有效保护期后,再动态地解除保护磁盘与RAID的关联。在实际应用时,解除保护磁盘与RAID的关联只需用户在管理装置的界面中清除该RAID和保护磁盘的关联关系即可。拆除后的保护磁盘可以重新作为空闲磁盘来使用,方便用户管理。这样,保护磁盘可以动态地添加和删除,用户管理方便、简单。
图9是根据本发明实施例的RAID的数据恢复装置,该装置可以仅由上述RAID应用系统中控制系统来实现,也可以由控制系统和管理装置共同实现。如图9所示,该恢复装置包括以下功能模块:关联模块10,用于将保护磁盘与所要保护的RAID进行关联;生成写入模块20,用于使用该RAID中的数据生成保护数据,并将生成的保护数据写入到保护磁盘中;恢复模块30,用于当该RAID中的至少一块磁盘发生故障时,使用保护磁盘中的保护数据以及RAID中未发生故障的磁盘中的数据,对发生故障的磁盘中的数据进行恢复。
本发明实施例通过关联模块将RAID以外的磁盘作为保护磁盘与RAID进行关联,并通过生成写入模块将保护数据存储在该保护磁盘中,在RAID出现异常如其中的一块或多块磁盘发生故障时,恢复模块可以使用该保护磁盘中的保护数据对发生故障的磁盘中的数据进行恢复,从而实现了对RAID中的数据的保护,提高了RAID的可靠性。与现有技术相比,本发明实施例将保护数据写入到RAID以外的磁盘中,在提高了RAID的可靠性的基础上,不会影响原RAID的读写性能以及配置信息等,并且无需对原RAID中的数据进行迁移活动,从而避免了现有技术中由于数据迁移带来的较大的风险。
在实际应用中,关联模块10可以根据用户输入的RAID的标识以及保护磁盘的标识,建立保护磁盘与RAID之间的关联关系。
另外,由于关联的保护磁盘不会影响原RAID的读写性能以及配置信息等,这样RAID的级别不会发生改变RAID,原RAID的读写性能也不受影响,使得RAID既保持了原有读写性能不下降,又提高了可靠性,实现了在可靠性和性能之间的动态平衡。
其中,如图10所示,生成写入模块20包括:第一获取模块202,用于依次获取该RAID的各个条带的数据;生成模块204,用于根据第一获取模块202获取的各个条带的数据,计算各个条带所对应的保护数据;以及第一写入模块206,用于按照RAID的各个条带在RAID中的位置,将与各个条带相对应的保护数据依次写入到保护磁盘中。
在实际应用中,上述第一获取模块202、生成模块204和第一写入模块206可以采用并行的工作方式,也可以采用串行的工作方式,根据实际需要而定。
则,恢复模块30包括:第二获取模块302,用于依次获取上述各个条带的数据(显然此时仅能获取到未发生故障的磁盘上的分条单元数据)、以及保护磁盘中与各个条带对应的保护数据;计算模块304,用于根据第二获取模块302获取到的数据,计算各个条带中发生故障的磁盘上的分条单元对应的恢复数据。
在实际应用中,在计算模块304得到了恢复数据之后,就可以通过恢复模块30中的第二写入模块306将计算模块304计算得到的恢复数据依次写入到对应的新磁盘中,其中,上述新磁盘替换了发生故障的磁盘,显然,此时新磁盘位于发生故障的磁盘所在的位置。
在实际应用时,上述第二获取模块302、计算模块304和第一写入模块306可以采用并行的工作方式,也可以采用串行的工作方式,根据实际需要而定。
例如,当所要保护的RAID的级别为RAID5、RAID3或RAID4时,生成模块204可以按照上述公式(1)计算一个条带所对应的保护数据Q。则,在该RAID中有两个磁盘(例如第x号磁盘和第y号磁盘)发生故障的情况下,计算模块304可以按照上述公式(2)分别计算一个条带中第x号磁盘和第y号磁盘上的分条单元对应的恢复数据Dx和Dy。从而使得RAID5、RAID3或RAID4在保持高读写性能的基础上,又能够具有如RAID6般的可靠性。
当所要保护的RAID的级别为RAID10时,生成模块204可以在保护磁盘为1块的情况下,按照上述公式(3)计算一个条带所对应的保护数据P。则在保护磁盘为1块、且RAID10中的第x号磁盘及其备份磁盘均发生故障的情况下,计算模块304可以按照上述公式(4)计算一个条带中第x号磁盘上的分条单元对应的恢复数据。从而,使得RAID10在保持高读写性能的基础上,又能够具有如RAID5般的可靠性,能够支持RAID10中一对互为备份的磁盘失效。
当所要保护的RAID的级别为RAID10时,生成模块204可以在保护磁盘为2块(例如为第一保护磁盘和第二保护磁盘)的情况下,按照以下公式计算一个条带所对应的保护数据:
其中,P表示该条带所对应的第一保护磁盘的保护数据,Q表示该条带所对应的第二保护磁盘的保护数据,D
0,D
1,...,D
n分别表示该条带的数据中第0号,第1号,...,第n号磁盘上的分条单元的数据,第0号,第1号,...,第n号磁盘为所述RAID10中的源盘,
表示异或算法,×表示有限域上的数据变换算法,n表示[(所述RAID10包括的磁盘的个数)/2]-1,n为自然数。则,在保护磁盘为2块、且RAID10中的第x号磁盘及其备份磁盘和第y号磁盘及其备份磁盘均发生故障的情况下,计算模块304可以按照以下公式计算该条带中第x号磁盘上的分条单元对应的恢复数据D
x和第y号磁盘上的分条单元对应的恢复数据D
y:
其中,0≤x<y ≤n,x和y均为自然数,P表示第一保护磁盘中与该条带所对应的保护数据,Q表示第二保护磁盘中与该条带所对应的保护数据。从而,使得RAID10在保持高读写性能的基础上,又能够具有如RAID6般的可靠性,能够支持RAID10中两对互为备份的磁盘失效。
采用上述的装置,无需改变RAID的级别,使得RAID在保持RAID的高读写性能的同时,又可以达到提高可靠性的目的。由于无需进行数据迁移,因此在避免了数据迁移所带来的风险性以外,也降低了操作复杂度。
如图11所示,上述恢复装置还可以包括:解除模块40,用于解除保护磁盘与RAID的关联。在实际应用时,解除保护磁盘与RAID的关联只需用户在管理装置的界面中清除该RAID和保护磁盘的关联关系即可。拆除后的保护磁盘可以重新作为空闲磁盘来使用,方便用户管理。这样,保护磁盘可以动态地添加和删除,用户管理方便、简单。
上述实施例的方法和装置为了实现提高RAID可靠性,将保护数据存储在RAID以外的保护磁盘中,当RAID中的至少一个磁盘发生故障后,就可以利用其中的保护数据对发生故障的磁盘进行数据恢复,从而能够在保持RAID的级别和高读写性能的基础上又进一步提高了可靠性,由于无需进行复杂和风险高的数据迁移,从而能够实现可靠性和读写性能的合理平衡。另外,当数据不需要较高的可靠性保护时,还可以动态地解除保护磁盘与RAID的关联,方便用户管理和实施。
本发明上述实施例的方法和装置主要针对在近线业务,也就是通常所说的WORM(即一次写入多次读取)场景下,提高数据所在RAID的可靠性。WORM场景存在于流媒体、视频类的应用,以及特定行业、特定场景下的应用。流媒体等视频类的应用,因为数据量比较大,而且在数据写入后,删除修改的频率比较少,因此比较适合使用本发明上述实施例。而特定行业以及特定场景,例如医疗行业的PACS(Picture Archiving and CommunicationSystem,医疗影像存取与传输系统)系统主要用于存储大量的医疗影像、手术过程录像等资料,也是一旦写入后,更新的频率比较少,同样适合使用本发明上述实施例。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。