用于独立磁盘冗余阵列RAID的方法和装置与流程

文档序号:18108033发布日期:2019-07-06 11:48阅读:210来源:国知局
用于独立磁盘冗余阵列RAID的方法和装置与流程

本公开内容一般性地涉及一种存储系统和方法,并且更特别地涉及一种用于独立磁盘冗余阵列RAID的方法和装置。



背景技术:

在可以构成独立磁盘冗余阵列RAID的磁盘中,若干种类的磁盘具有低劣的性能但是具有大的容量,诸如NL-SAS磁盘。结果,当包括NL-SAS磁盘的RAID降级(degraded)时,针对新磁盘的重构将持续很长的时间,甚至是几天。在这种情形中,RAID在过长的时间内停留在危险的状态中(潜在的数据不可用/数据丢失),因为来自这个RAID的任何其他磁盘失效将导致整个RAID损坏(如果RAID是RAID-5类型)。来自这个RAID的所有数据将不可用。总之,当RAID处于降级状态中时,客户将频繁地遭遇到数据不可用风险。

然而,RAID自从第一个磁盘失效时开始已经重构了较长时间,并且一些RAID条带(stripe)中的数据已经被恢复,在RAID中的一个磁盘已经被重构了一段时间然后另一个磁盘损坏的情况下,仍然具有恢复一些数据的可能性。



技术实现要素:

鉴于现有技术中存在的上述问题,本公开内容的实施例的目的在于提供一种用于独立磁盘冗余阵列RAID的方法和装置,以解决现有技术中的上述以及其他的问题。具体地,本公开内容的实施例将提供一种用于从损坏的RAID(例如,在上面所描述的情况中)恢复数据的新方法以及相应的装置。

根据本公开内容的第一方面,提供了一种用于独立磁盘冗余阵列RAID的方法。该方法包括:将RAID划分为多个子RAID;生成与每个子RAID相对应的子RAID元数据;以及响应于RAID中的一个磁盘被更换,基于每个子RAID元数据来重构对应的子RAID中的数据。

在一些实施例中,子RAID元数据可以包括重构状态,并且该方法包括:响应于RAID中的一个磁盘被更换,设置重构状态以指示该磁盘需要重构;根据重构状态的指示来重构需要重构的磁盘;以及响应于完成对该磁盘的重构,设置重构状态以指示该磁盘不需要重构。

在一些实施例中,RAID中的每个磁盘可以对应于重构状态中的一个比特,并且该方法包括:对所述重构状态中与该磁盘对应的比特进行设置以指示该磁盘是否需要重构。

在一些实施例中,子RAID元数据可以包括重构优先级,并且该方法包括:按照优先级顺序来重构所述多个子RAID中的数据。

在一些实施例中,该方法进一步包括:生成与RAID相对应的RAID元数据。

在一些实施例中,RAID元数据包括磁盘签名,磁盘签名包括唯一识别磁盘的磁盘标识符以及唯一识别RAID的RAID标识符。

在一些实施例中,该方法进一步包括:当RAID中的一个磁盘被更换时,确定新磁盘的磁盘签名是否存在于RAID元数据中;如果确定新磁盘的磁盘签名存在于RAID元数据中,则直接将新磁盘连接到RAID中;以及如果确定新磁盘的磁盘签名不存在于RAID元数据中,则利用RAID的RAID标识符来更新新磁盘的磁盘签名,并且将经更新的磁盘签名存储在RAID元数据中。

在一些实施例中,RAID元数据可以包括需要重构的子RAID的数目以及需要重构的子RAID的列表,并且该方法进一步包括:响应于完成对一个子RAID中的数据的重构,相应地更新需要重构的子RAID的数目以及需要重构的子RAID的列表。

在一些实施例中,该方法进一步包括:在尚未完成对全部子RAID中的数据的重构并且RAID中的另一磁盘变为不可用时,确定每个子RAID元数据中的重构状态是否指示有磁盘需要重构;如果子RAID元数据中的重构状态指示没有磁盘需要重构,则恢复出子RAID中的数据;以及如果子RAID元数据中的重构状态指示有磁盘需要重构,则将子RAID中的数据标记为丢失。

在一些实施例中,子RAID元数据和RAID元数据被存储在RAID之外的存储空间中。

根据本公开内容的第二方面,提供了一种用于独立磁盘冗余阵列RAID的装置。该装置包括:划分单元,被配置为将RAID划分为多个子RAID;生成单元,被配置为生成与每个子RAID相对应的子RAID元数据;以及重构单元,被配置为响应于RAID中的一个磁盘被更换,基于每个子RAID元数据来重构对应的子RAID中的数据。

在一些实施例中,子RAID元数据包括重构状态,并且该装置包括:设置单元,被配置为响应于所述RAID中的一个磁盘被更换,设置重构状态以指示该磁盘需要重构;重构单元进一步被配置为,根据重构状态的指示来重构需要重构的磁盘;并且设置单元进一步被配置为,响应于完成对该磁盘的重构,设置重构状态以指示该磁盘不需要重构。

在一些实施例中,RAID中的每个磁盘对应于重构状态中的一个比特,并且设置单元进一步被配置为:对重构状态中与该磁盘对应的比特进行设置以指示该磁盘是否需要重构。

在一些实施例中,子RAID元数据包括重构优先级,并且重构单元进一步被配置为:按照优先级顺序来重构多个子RAID中的数据。

在一些实施例中,生成单元进一步被配置为:生成与RAID相对应的RAID元数据。

在一些实施例中,RAID元数据包括磁盘签名,磁盘签名包括唯一识别磁盘的磁盘标识符以及唯一识别RAID的RAID标识符。

在一些实施例中,该装置进一步包括:确定单元,被配置为当RAID中的一个磁盘被更换时,确定新磁盘的磁盘签名是否存在于所述RAID元数据中;连接单元,被配置为如果确定新磁盘的磁盘签名存在于RAID元数据中,则直接将新磁盘连接到RAID中;以及更新单元,被配置为如果确定新磁盘的磁盘签名不存在于RAID元数据中,则利用RAID的RAID标识符来更新该新磁盘的磁盘签名,并且将经更新的磁盘签名存储在RAID元数据中。

在一些实施例中,RAID元数据包括需要重构的子RAID的数目以及需要重构的子RAID的列表,并且更新单元进一步被配置为:响应于完成对一个子RAID中的数据的重构,相应地更新需要重构的子RAID的数目以及需要重构的子RAID的列表。

在一些实施例中,确定单元进一步被配置为,在尚未完成对全部子RAID中的数据的重构并且RAID中的另一磁盘变为不可用时,确定每个子RAID元数据中的重构状态是否指示有磁盘需要重构;并且该装置进一步包括:恢复单元,被配置为如果子RAID元数据中的重构状态指示没有磁盘需要重构,则恢复出子RAID中的数据;以及标记单元,被配置为如果子RAID元数据中的重构状态指示有磁盘需要重构,则将子RAID中的数据标记为丢失。

在一些实施例中,子RAID元数据和RAID元数据可以被存储在RAID之外的存储空间中。

根据本公开内容的第三方面,提供了一种计算机可读存储介质,该计算机可读存储介质具有存储在其上的计算机可读程序指令,这些计算机可读程序指令用于执行第一方面的方法。

根据本公开内容的第四方面,提供了一种存储系统,该存储系统包括根据本公开内容第二方面的装置。

在本公开内容中,多个方面和多个实施例提供了对于RAID的条带挖掘(stripe mining),即一种用于从常规的损坏的RAID恢复数据的新方法和装置。多个方面和多个实施例修改了包含RAID元数据的RAID元数据结构,以便于在RAID损坏时恢复部分的RAID,这种方法可以称为条带挖掘。相比于常规的RAID,根据本公开内容的实施例的新结构和新方法引入了以下的优点。

首先,数据可以变得更加安全。即使RAID损坏了,仍然能够从其中恢复部分数据。其次,提供了对数据的灵活重构和优先级化的重构。本公开内容的实施例不需要像正常的RAID那样按次序地发起重构。替代地,本公开内容的实施例能够优选地对RAID的某个部分发起重构,还能够选择不重构一些区域并且节省重构时间。此外,本公开内容的实施例可以采用与现今RAID产品相同的RAID重构计算。例如,4+1 RAID 5可以具有专用的计算库用以在RAID中的一个磁盘损坏并且空闲磁盘进入RAID的情况下重构数据。

附图说明

通过参考附图阅读下文的详细描述,本公开内容的实施例的上述以及其他目的、特征和优点将变得容易理解。在附图中,以示例性而非限制性的方式示出了本公开内容的若干实施例,其中:

图1示意性地示出了一个示例RAID的数据和元数据的布局。

图2示意性地示出了根据本公开内容的一个实施例的用于RAID的方法。

图3示意性地示出了根据本公开内容的一个实施例的子RAID及其元数据。

图4示意性地示出了根据本公开内容的一个实施例的子RAID元数据和父RAID元数据的数据结构。

图5示意性地示出了根据本公开内容的一个实施例的磁盘签名的定义。

图6示意性地示出了根据本公开内容的一个实施例的磁盘签名处理的流程图。

图7示意性地示出了根据本公开内容的一个实施例的用于标记新磁盘需要重构的流程图。

图8示意性地示出了根据本公开内容的一个实施例的用于重构数据的流程图。

图9示意性地示出了根据本公开内容的一个实施例的用于恢复数据的流程图。

图10示意性地示出了根据本公开内容的一个实施例的用于RAID的装置。

图11示意性地示出了可以用来实现本公开内容的实施例的示例性计算机系统/服务器的框图。

具体实施方式

下面将参考附图中所示出的若干示例性实施例来描述本公开内容的原理和精神。应当理解,描述这些具体的实施例仅是为了使本领域的技术人员能够更好地理解并实现本公开,而并非以任何方式限制本公开内容的范围。

图1示意性地示出了一个示例RAID的数据和元数据的布局。如图1中所示出的,在诸如EMC公司的VNX2之类的产品中,用户可以在多个磁盘上创建独立磁盘冗余阵列RAID。RAID的磁盘空间可以被划分为块(chunk),并且每个块的大小可以是1兆字节。进一步地,RAID可以定义元数据来描述块状态,诸如需要重构的信息,并且可以将元数据存储在各磁盘末尾的区域中。数据区和元数据区可以使用相同的RAID几何结构和算法。1个元数据元素可以描述1个块的用户数据状态。

当RAID中的一个磁盘被移除或者损坏时,如果存在被配置为该阵列中的空闲磁盘,则一个新磁盘将自动地换到RAID中以代替失效的磁盘。RAID通过利用重构信息来修改元数据而将这个新磁盘标记为需要重构。当一个磁盘需要重构时,有关的比特将被标记。在重构结束之后,RAID将从元数据中清除它的重构信息并且脱离降级状态。

图2示意性地示出了根据本公开内容的一个实施例的用于RAID的方法200。如图2中所示出的,方法200在开始之后可以进入步骤201。在步骤201中,可以将RAID划分为多个子RAID。接着,方法200可以前进到步骤202。在步骤202中,可以生成与每个子RAID相对应的子RAID元数据。

在本公开内容的实施例中,可以定义两个级别的RAID:父RAID和子RAID。在这个方面,图3示意性地示出了根据本公开内容的一个实施例的子RAID及其元数据。如图3中所示出的,一个RAID可以被划分为多个子RAID。这个被划分的RAID可以称为父RAID,并且划分得出的RAID可以称为子RAID。

根据本公开内容的一些实施例,父RAID可以包含全部的RAID信息。例如,重构核查点、用于每个块的重构信息、磁盘信息,等等。相比之下,子RAID可以包含少得多的元数据以节省存储空间。根据本公开内容的一些实施例,可以使用本领域中已知的用于为RAID生成元数据的方法来分别针对各个子RAID和父RAID生成对应的元数据。

此外,每个子RAID的大小可以取决于具体的实施方式。如果大小更大,则需要较少的存储空间来存储子元数据,但是当RAID损坏时可能会丢失更多的数据。根据本公开内容的一些实施例,子RAID的大小可以是相同的,也可以是不同的,这可以由本领域的技术人员根据具体的技术环境和要求来进行选择。

根据本公开内容的一些实施例,子RAID元数据和父RAID元数据不能以相同的RAID算法存储在相同的RAID的磁盘中。在一个实施方式中,子RAID元数据和父RAID元数据可以被存储在RAID之外的磁盘空间中。例如,可以存储在另一个三向镜像RAID中。这保证了当RAID损坏时子元数据将不会丢失。

接着,方法200可以前进到步骤203。在步骤203中,可以响应于RAID中的一个磁盘被更换,基于每个子RAID元数据来重构对应的子RAID中的数据。

本领域的技术人员可以理解,在RAID中,当一个磁盘由于损坏、被移除、或者其他原因变为不可用时,可以使用空闲磁盘来替代这个不可用的磁盘。当该空闲磁盘进入RAID中时,需要对被替换的磁盘中所存储的数据在该新加入磁盘中进行重构,从而使得新加入的磁盘能够替代之前的磁盘。

相比于以前需要针对完全的RAID来对新加入的磁盘进行重构,由于RAID被划分为多个子RAID,根据本公开内容的实施例能够以子RAID为单位,基于每个子RAID元数据来重构对应的子RAID中的数据。如上文所论述的,在以完全的RAID为单位重构数据时,如果重构需要较长的时间,而此时另一个磁盘也变为不可用时,由于之前的不可用磁盘中的数据尚未重构完成,这将会导致先前磁盘中的所有数据变为不可用。相对照地,根据本公开内容的实施例由于以子RAID为单位进行数据重构,因此在该场景中,已经被重构的子RAID中的数据可以被恢复。下面参考图4来具体地描述根据本公开内容的实施例的子RAID元数据和父RAID元数据的定义。

图4示意性地示出了根据本公开内容的一个实施例的子RAID元数据和父RAID元数据的数据结构。如图4中所示出的,子RAID和父RAID的未分页的(NP)元数据被存储在当前RAID之外的另一位置。子RAID和父RAID两者都具有NP元数据信息。子/父NP元数据结构可以定义如下。本领域的技术人员应当理解,图4仅是根据本公开内容的实施例的一种具体的子RAID元数据和父RAID元数据的定义,本公开内容的范围并不被限制于该具体示例。

根据本公开内容的一些实施例,子RAID元数据可以包括2字节的重构状态。一般而言,RAID中的最大磁盘数目是16,所以2字节的重构状态的每个比特可以指示哪个磁盘需要重构。如图4中所示出的,子RAID元数据还可以包括2字节的重构优先级。重构优先级的数字指示了用于重构的优先级别。在一个实施例中,该数字越小意味着用于重构的更高优先级。此外,子RAID元数据还可以包括8字节的重构核查点,它记录了子RAID的当前的重构位置。在一个实施例中,该重构位置可以用逻辑块地址LBA来表示。

相应地,根据本公开内容的一些实施例,方法200可以包括:响应于RAID中的一个磁盘被更换,设置重构状态以指示该磁盘需要重构;根据重构状态的指示来重构该磁盘;以及响应于完成对该磁盘的重构,设置重构状态以指示该磁盘不需要重构。本领域的技术人员可以理解,对于针对每个子RAID的数据重构过程而言,都通过查询重构状态来确定某个磁盘是否需要被重构,并且每当完成一个磁盘的重构时,就将对应磁盘的重构状态设置为不需要重构。

根据本公开内容的一些实施例,正如上面结合图4所描述的示例,RAID中的每个磁盘可以对应于重构状态中的一个比特。在这种情况下,方法200中设置重构状态的步骤可以包括:对重构状态中与该磁盘对应的比特进行设置以指示该磁盘是否需要重构。

根据本公开内容的一些实施例,在子RAID元数据包括重构优先级的情况下,方法200可以包括:按照优先级顺序来重构多个子RAID中的数据。

在RAID中的一个磁盘被更换时,如果所换入的新磁盘是该RAID以前曾经连接过的磁盘,并且该磁盘之后并没有连接到其他的RAID中,那么RAID所知晓的之前关于该磁盘的信息仍然是可用的。在这种情况下,该磁盘就可以直接连接到RAID中,而无需进行其他设置。如果该磁盘之前没有连接过该RAID或者该磁盘在连接了该RAID之后又连接了其他的RAID,就需要对该磁盘进行必要的设置之后再连接到RAID中进行工作。

在这个方面,根据本公开内容的一些实施例,父RAID元数据可以包括磁盘签名,磁盘签名可以包括唯一识别磁盘的磁盘标识符以及唯一识别RAID的RAID标识符。因此,可以使用磁盘签名来识别属于RAID的每个磁盘。具体地,如图4中所描绘的,父RAID元数据可以包括磁盘签名,其可以是16×16字节。这是因为可能需要16字节用于每个磁盘并且支持用于每个RAID的最大16个磁盘。在一些实施例中,磁盘签名还可以被写入到每个磁盘中不能被RAID访问的某个区域中。

图5示意性地示出了根据本公开内容的一个实施例的磁盘签名的定义。如图5中所示出的,根据本公开内容的一些实施例,磁盘签名对于每个磁盘是唯一的,磁盘签名可以包括全球名称WWN种子和磁盘序列号,WWN种子和磁盘序列号可以分别是8字节。每个RAID具有唯一的WWN种子,所以能够使用WWN种子来跟踪磁盘插入到哪个RAID中。磁盘序列号由盘制造商指配给盘,磁盘序列号被用来识别磁盘,所以序列号将能够指示哪个RAID使这个磁盘被插入。

当一个磁盘连接到RAID时,软件将扫描相关的数据库以查看该磁盘的磁盘签名是否已经存在于RAID的相关系统中。如果存在,则意味着它不是新磁盘,则可以默认地连接该磁盘。如果磁盘签名不存在,则需要将磁盘签名标记到磁盘中。

图6示意性地示出了根据本公开内容的一个实施例的磁盘签名处理的流程图。如图6中所示出的,在步骤601中,磁盘可以被换入RAID中。接着,在步骤602中,可以确定该磁盘的磁盘签名是否存在。如果存在,则在步骤605中可以确定是原有的磁盘被放回到RAID中。在这种情况下,在步骤607中,可以向上一层发送磁盘换入RAID的事件。另一方面,如果在步骤602中确定不存在该磁盘的磁盘签名,则在步骤603中可以确定该磁盘是以前没有连接在该RAID中或者连接过该RAID之后又连接到其他RAID的新磁盘。相应地,在步骤604中,可以在RAID的软件中对该磁盘进行相应的创建。接着,在步骤606中,可以将该磁盘的更新后的磁盘签名写入该磁盘中。在完成步骤606或者607之后,图6中的流程可以结束。

相应地,根据本公开内容的一些实施例,方法200可以进一步包括:当RAID中的一个磁盘被更换时,确定新磁盘的磁盘签名是否存在于RAID元数据中;如果确定新磁盘的磁盘签名存在于RAID元数据中,则直接将新磁盘连接到RAID中;以及如果确定新磁盘的磁盘签名不存在于RAID元数据中,则利用RAID的RAID标识符来更新新磁盘的磁盘签名,并且将经更新的磁盘签名存储在RAID元数据中。以这种方式,每当一个磁盘被换入到RAID中时,可以通过查找磁盘签名来确定该磁盘是否可以无需设置地直接连接到RAID中。

如图4中所描绘的,在一些实施例中,父RAID元数据还可以包括需要重构的子RAID数目,其可以是2字节。它记录了需要重构的子RAID的数目。此外,父RAID元数据还可以包括需要重构的子RAID列表。父RAID元数据还可以包括多个2字节的块信息,它记录了磁盘中的哪个块需要被重构。

具体而言,当RAID中的一个磁盘失效或者被移除时,RAID将会降级。此时需要通过对子RAID的元数据的重构状态进行设置,而将所有的子RAID标记为需要重构。此外,还更新重构子RAID数目以及父RAID元数据中的需要重构的子RAID列表。当RAID中的一个磁盘失效或者被移除时,空闲的磁盘将被换到RAID中。当该磁盘被换到RAID中时,需要标记父RAID元数据上的RAID需要重构。

当换入新磁盘时,可以采用以下的步骤。首先,可以更新记录在父RAID元数据中的磁盘签名,在记录它之后,该磁盘可以成为这个RAID的一部分。其次,可以将所有的块信息标记为需要重构。最后,结束标记重构处理,稍后RAID将在后台重构服务上把数据重构到新磁盘。

图7示意性地示出了根据本公开内容的一个实施例的用于标记新磁盘需要重构的流程图。如图7中所示出的,在步骤701中,磁盘可以被换入到RAID中。接着,在步骤702中,可以在完成对该磁盘的磁盘签名的更新之后,将更新后的磁盘签名记录在父RAID元数据中,即更新被记录在父RAID元数据中的磁盘签名。接着,在步骤703中,可以将该磁盘的所有块都标记为需要重构,这可以通过对相应的父RAID元数据和子RAID元数据中的相应参数进行设置来实现。最后,在步骤704中,可以完成针对该磁盘的重构标记。

相应地,根据本公开内容的一些实施例,方法200可以进一步包括:响应于完成对一个子RAID中的数据的重构,相应地更新需要重构的子RAID的数目以及需要重构的子RAID的列表。

根据本公开内容的一些实施例,当RAID正在重构并且其中的另一磁盘失效时,常规的RAID将会由于双重磁盘失效而损坏。但是利用子RAID元数据设计,本公开内容的实施例能够使用相应的过程来恢复部分数据。

在这个方面,方法200可以进一步包括:在尚未完成对全部子RAID中的数据的重构并且RAID中的另一磁盘变为不可用时,确定每个子RAID元数据中的重构状态是否指示有磁盘需要重构;如果子RAID元数据中的重构状态指示没有磁盘需要重构,则恢复出子RAID中的数据;以及如果子RAID元数据中的重构状态指示有磁盘需要重构,则将子RAID中的数据标记为丢失。以这种方式,相比于常规的RAID在两个磁盘故障时数据丢失,本公开内容的实施例可以将已经被重构的子RAID中的数据恢复出来供用户使用。

在完成步骤203之后,方法200可以结束。

下面将结合图8和图9,以具体示例的方式来进一步地阐述根据本公开内容的实施例的数据重构过程和数据恢复过程。本领域的技术人员可以理解,本公开内容的实施例并不被限制于这些具体示例中的技术细节。

图8示意性地示出了根据本公开内容的一个实施例的用于重构数据的流程图。如上文所提到的,在正常的RAID中,需要依次地发起重构。在本公开内容的实施例中,向每个子RAID提供了重构优先级。在一些实施例中,当在RAID上创建逻辑单元号LUN时,LUN将占用多个子RAID。LUN可以提供重构优先级并且将优先级信息保存到子RAID元数据中。由于每个子RAID包含重构优先级信息,所以能够首先选择具有最高优先级的子RAID来进行重构。如此,能够首先选择重构具有更重要数据的某个区域。

如图8中所示出的,在步骤801中,查找需要重构的具有最高优先级的子RAID。接着,在步骤802中,如果不能找到任何子RAID,则可以前进到步骤805。在步骤805中,所有的子RAID被重构,清除用于父RAID的重构信息,现在RAID处于正常状态。另一方面,如果在步骤802中可以找到下一个具有最高优先级的子RAID,则可以前进到步骤803。在步骤803中,在这个子RAID中发起对各个块的重构。接着,在步骤804中,清除用于这个子RAID的重构状态元数据,并且回到步骤801。

图9示意性地示出了根据本公开内容的一个实施例的用于恢复数据的流程图。如上文所提到的,当RAID正在重构并且另一磁盘失效时,常规的RAID将会由于双重磁盘失效而损坏。但是利用子RAID元数据的设计,能够使用以下过程来恢复部分数据。根据本公开内容的一些实施例,当父RAID损坏时,如果子RAID已经被重构,则恢复过程将把子RAID标记为有效,并且如果子RAID不能被重构,则将子RAID标记为数据丢失。

具体地,在步骤901中,可以查找下一个子RAID。接着,在步骤902中,如果找到下一个子RAID,则可以在步骤903中核查这个RAID的元数据的重构状态。假设某个磁盘需要重构,则将重构状态与该磁盘相对应的比特设置为1。在这种情形下,如果重构状态不是零,则不能恢复这个子RAID,因为这个子RAID中的数据还没有被重构。因此,在步骤906中,将这个子RAID中的所有块标记为数据丢失,之后可以回到步骤901。另一方面,如果在步骤903中确定重构状态为零,则这个子RAID已经被重构。在这种情形下,在步骤904中,可以将这个RAID中的所有数据标记为有效,之后可以回到步骤901。另一方面,在步骤902中,如果不能找到更多的子RAID,则子RAID中的所有数据被检查,标记为数据丢失或者有效,之后可以将RAID设置为降级。

根据本公开内容的一些实施例,还向用户提供了接口来确定他们是否想要在上面的恢复过程之后找回损坏的RAID。对于有效的子RAID中的这部分数据,没有数据丢失。

图10示意性地示出了根据本公开内容的一个实施例的用于RAID的装置1000。在图10中,虚线框中表示该单元是可选的。

如图10中所示出的,装置1000可以包括:划分单元1010、生成单元1020、以及重构单元1030。根据本公开内容的一些实施例,装置1000可以进一步包括:设置单元1040、确定单元1050、连接单元1060、更新单元1070、恢复单元1080、以及标记单元1090。

根据本公开内容的一些实施例,划分单元1010可以被配置为将RAID划分为多个子RAID。生成单元1020可以被配置为生成与每个子RAID相对应的子RAID元数据。重构单元1030可以被配置为响应于RAID中的一个磁盘被更换,基于每个子RAID元数据来重构对应的子RAID中的数据。

根据本公开内容的一些实施例,子RAID元数据可以包括重构状态,并且装置1000可以包括设置单元1040。设置单元1040可以被配置为响应于RAID中的一个磁盘被更换,设置重构状态以指示该磁盘需要重构。重构单元1030可以进一步被配置为,根据重构状态的指示来重构需要重构的磁盘。设置单元1040可以进一步被配置为,响应于完成对该磁盘的重构,设置重构状态以指示该磁盘不需要重构。

根据本公开内容的一些实施例,RAID中的每个磁盘可以对应于重构状态中的一个比特,并且设置单元1040可以进一步被配置为:对重构状态中与该磁盘对应的比特进行设置以指示该磁盘是否需要重构。

根据本公开内容的一些实施例,子RAID元数据可以包括重构优先级,并且重构单元1030可以进一步被配置为:按照优先级顺序来重构多个子RAID中的数据。

根据本公开内容的一些实施例,生成单元1020可以进一步被配置为:生成与RAID相对应的RAID元数据。

根据本公开内容的一些实施例,RAID元数据可以包括磁盘签名,磁盘签名包括唯一识别磁盘的磁盘标识符以及唯一识别RAID的RAID标识符。

根据本公开内容的一些实施例,装置1000可以进一步包括:确定单元1050、连接单元1060、以及更新单元1070。确定单元1050可以被配置为当RAID中的一个磁盘被更换时,确定新磁盘的磁盘签名是否存在于RAID元数据中。连接单元1060可以被配置为如果确定新磁盘的磁盘签名存在于RAID元数据中,则直接将新磁盘连接到RAID中。更新单元1070可以被配置为如果确定新磁盘的磁盘签名不存在于RAID元数据中,则利用RAID的RAID标识符来更新新磁盘的磁盘签名,并且将经更新的磁盘签名存储在RAID元数据中。

根据本公开内容的一些实施例,RAID元数据可以包括需要重构的子RAID的数目以及需要重构的子RAID的列表,并且更新单元1070可以进一步被配置为:响应于完成对一个子RAID中的数据的重构,相应地更新需要重构的子RAID的数目以及需要重构的子RAID的列表。

根据本公开内容的一些实施例,确定单元1050可以进一步被配置为,在尚未完成对全部子RAID中的数据的重构并且RAID中的另一磁盘变为不可用时,确定每个子RAID元数据中的重构状态是否指示有磁盘需要重构;并且装置1000可以进一步包括恢复单元1080和标记单元1090。恢复单元1080可以被配置为如果子RAID元数据中的重构状态指示没有磁盘需要重构,则恢复出子RAID中的数据。标记单元1090可以被配置为如果子RAID元数据中的重构状态指示有磁盘需要重构,则将子RAID中的数据标记为丢失。

根据本公开内容的一些实施例,子RAID元数据和RAID元数据可以被存储在RAID之外的存储空间中。

图11示意性地示出了可以用来实现本公开内容的实施例的示例性计算机系统/服务器1112的框图。应当注意,图11中所示出的计算机系统/服务器1112仅是一种示例,不对本公开内容的实施方式的功能和使用范围进行任何限制。

如图11中所示出的,计算机系统/服务器1112以通用计算设备的形式表现。计算机系统/服务器1112的组件可以包括但不限于:一个或者多个处理器或者处理单元1116,系统存储器1128,连接不同系统组件(包括系统存储器1128和处理单元1116)的总线1118。

总线1118表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。

计算机系统/服务器1112典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机系统/服务器1112访问的可用介质,包括易失性和非易失性介质,可移除的和不可移除的介质。

系统存储器1128可以包括易失性存储器形式的计算机系统可读介质,例如存储器1130和/或缓存器1132。计算机系统/服务器1112可以进一步包括其他可移除/不可移除的、易失性/非易失性计算机系统存储介质。尽管图11中未示出,可以提供用于对可移除非易失性磁盘(例如“软盘”)读写的磁盘磁盘,以及对可移除非易失性光盘(例如CD-ROM、DVD-ROM或者其他光介质)读写的光盘磁盘。在这些情况下,每个磁盘可以通过一个或者多个数据介质接口与总线1118相连。存储器1128可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本公开内容的各实施方式的功能。

具有至少一个程序模块1142的程序/实用工具1140,可以存储在例如存储器1128中,这样的程序模块1142包括但不限于:操作系统、一个或者多个应用程序、其他程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块1142通常执行本公开内容所描述的实施方式中的功能和/或方法。

根据需要,计算机系统/服务器1112也可以与一个或多个外部设备(例如显示设备1124、存储设备1114等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器812交互的设备通信,和/或与使得该计算机系统/服务器1112能与一个或多个其他计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口1122进行。并且,计算机系统/服务器812还可以通过网络适配器1120与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器1120通过总线1118与计算机系统/服务器1112的其他模块通信。应当明白,尽管图中未示出,可以结合计算机系统/服务器1112使用其他硬件和/或软件模块,包括但不限于:微代码、设备磁盘、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带磁盘以及数据备份存储系统等。

在对本公开内容的实施例的描述中,术语“包括”及其类似用语应当理解为开放性包含,即“包括但不限于”。术语“基于”应当理解为“至少部分地基于”。术语“一个实施例”或“该实施例”应当理解为“至少一个实施例”。

应当注意,本公开内容的实施例可以通过硬件、软件或者软件和硬件的结合来实现。硬件部分可以利用专用逻辑来实现;软件部分可以存储在存储器中,由适当的指令执行系统,例如微处理器或者专用设计硬件来执行。本领域的技术人员可以理解上述的设备和方法可以使用计算机可执行指令和/或包含在处理器控制代码中来实现,例如在可编程的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。

此外,尽管在附图中以特定顺序描述了本公开内容的方法的操作,但是这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。相反,流程图中描绘的步骤可以改变执行顺序。附加地或备选地,可以省略某些步骤,将多个步骤组合为一个步骤执行,和/或将一个步骤分解为多个步骤执行。还应当注意,根据本公开内容的两个或更多装置的特征和功能可以在一个装置中具体化。反之,上文描述的一个装置的特征和功能可以进一步划分为由多个装置来具体化。

虽然已经参考若干具体实施例描述了本公开内容,但是应当理解,本公开内容不限于所公开的具体实施例。本公开内容旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等效布置。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1