一种基于存储对象的数据重构方法与流程

文档序号:13236160阅读:258来源:国知局
一种基于存储对象的数据重构方法与流程

本发明涉及存储系统,更具体地,涉及在存储系统中的驱动器失效时对数据进行重建的方法与系统。



背景技术:

现有的raid(redundantarraysofindependentdisks,独立磁盘冗余阵列)技术将多个物理驱动器(例如,磁盘)聚合成盘组,在盘组上划分条带,每个条带上通过冗余技术对数据提供保护。现有技术的raid系统中,当多个驱动器中的一个或多个发生故障,会启动备用驱动器,并进行数据重构,以保持raid系统的数据保护能力以及性能。在故障驱动器被更换后,需要再将备用驱动器中的数据复制回新驱动器。raid系统可提供多种数据保护级别,例如,raid5系统能纠正一块驱动器发生故障,而raid6系统能纠正两块驱动器发生的故障。

参看图8,控制器将驱动器80、驱动器82、驱动器84与驱动器86组成raid系统。图8的raid系统中,根据驱动器的物理存储位置划分条带,各个驱动器的相同物理存储位置构成提供数据保护的条带。当驱动器86发生故障时,将驱动器88作为备用驱动器,从驱动器80、驱动器82与驱动器84的每个条带中读出数据,并重建出故障驱动器86的对应条带的数据,以及将重建的数据写入驱动器88。这一过程中,产生了对驱动器80、驱动器82与驱动器84完整的读操作,以及对驱动器88的完整的写操作。当用新驱动器替换了驱动器86后,还需要对数据再次重构,将备用驱动器88的数据复制到新驱动器。在这个过程中,所有的写操作最终都会集中在备用驱动器88以及新驱动器上,从而使得现有技术的raid系统的数据重构性能被限制在单一驱动器性能。

现有技术的raid系统至少存在下列问题:(1)数据域和物理域是紧耦合的关系(条带直接对应于物理存储位置),这种紧耦合的关系将会导致raid数据重构过程非常漫长,raid系统数据重构的性能无法随着磁盘的数量线性增长。并且随着驱动器容量的增大,数据重构过程时间将会线性增加。

(2)由于重构时间长,重构过程中大量的数据读写增加驱动器的负担,使得的驱动器更容易发生故障。

(3)无法做到局部重构,在驱动器组中一个驱动器发生故障时,传统raid技术会对整个驱动器的所有存储空间进行重构操作,整驱动器重构会占用大量时间。

(4)无法做到根据优先级重构,传统的重构无法根据故障级别进行优先级重构。

(5)无法做到数据感知,位于块设备层的现有技术的raid系统在数据布局上是固定的,并且无法知道上层应用的数据语义,因此无法做到数据感知的重构操作,只能通过完整驱动器重构的方式恢复数据。对于新型的固态驱动器(ssd,solidstatedrive)而言,如果采用全驱动器重构的方式,那么将会导致备用驱动器或被替换的驱动器被全部刷写一遍,既导致性能显著下降,又导致ssd的寿命受到影响。



技术实现要素:

在本发明中,采用存储资源池架构,将驱动器提供的所有的存储资源进行池化处理,然后通过分配器将资源动态分配给存储对象。当驱动器盘出现故障时,针对存储对象进行重构,并使存储资源池中的所有驱动器参与到数据重构过程中,从而达到快速、灵活、高效的重构。

根据本发明的第一方面,提供了根据本发明第一方面的第一基于存储对象的数据重构方法,包括:响应于存储池中的第一驱动器故障,获取使用了第一驱动器提供的数据块的存储对象;从存储池中获取处于空闲状态的第一数据块分配给所述存储对象;将所述存储对象中存储在第一驱动器的数据块中的数据,存储到所述第一数据块。

根据本发明第一方面的第一基于存储对象的数据重构方法,提供了根据本发明第一方面的第二基于存储对象的数据重构方法,其中从存储池中获取处于空闲状态的第一数据块,使得被分配的数据块随机分布于构成所述存储池的多个驱动器中。

根据本发明第一方面的第一或第二基于存储对象的数据重构方法,提供了根据本发明第一方面的第三基于存储对象的数据重构方法,其中从存储池中获取处于空闲状态的第一数据块,所述第一数据块来自未被所述存储对象使用的驱动器。

根据本发明第一方面的第三基于存储对象的数据重构方法,提供了根据本发明第一方面的第四基于存储对象的数据重构方法,其中从存储池中获取处于空闲状态的第一数据块,使得所述第一数据块来自构成所述存储池的多个驱动器中负载轻或者空闲容量多的驱动器。

根据本发明第一方面的第一至第四基于存储对象的数据重构方法之一,提供了根据本发明第一方面的第五基于存储对象的数据重构方法,还包括:获取使用了第一驱动器提供的数据块多个存储对象的故障级别;以及获取所述多个存储对象中故障级别高的存储对象。

根据本发明第一方面的第一至第五基于存储对象的数据重构方法之一,提供了根据本发明第一方面的第六基于存储对象的数据重构方法,还包括:响应于存储池中的第一驱动器的一个或多个地址区段故障,获取使用了所述一个或多个地址区段提供的数据块的一个或多个存储对象。

根据本发明第一方面的第一至第六基于存储对象的数据重构方法之一,提供了根据本发明第一方面的第七基于存储对象的数据重构方法,其中从所述存储对象中重构所述存储对象中存储在第一驱动器的数据块中的数据,将所述数据存储到所述第一数据块。

根据本发明第一方面的第一至第七基于存储对象的数据重构方法之一,提供了根据本发明第一方面的第八基于存储对象的数据重构方法,其中若没有任何存储对象使用了第一驱动器提供的数据块,所述方法完成。

根据本发明第一方面的第一至第八基于存储对象的数据重构方法之一,提供了根据本发明第一方面的第九基于存储对象的数据重构方法,其中所述故障级别对应于所述存储对象中位于故障驱动器的数据块的数量。

根据本发明的第二方面,提供了根据本发明第二方面的第一基于存储对象的数据重构系统,包括:存储对象获取模块,用于响应于存储池中的第一驱动器故障,获取使用了第一驱动器提供的数据块的存储对象;数据块分配模块,用于从存储池中获取处于空闲状态的第一数据块分配给所述存储对象;以及数据恢复模块,用于将所述存储对象中存储在第一驱动器的数据块中的数据,存储到所述第一数据块。

根据本发明的第二方面的第一基于存储对象的数据重构系统,提供了根据本发明第二方面的第二基于存储对象的数据重构系统,其中所述数据分配模块用于从存储池中获取处于空闲状态的第一数据块,使得被分配的数据块随机分布于构成所述存储池的多个驱动器中。

根据本发明的第二方面的第一或第二基于存储对象的数据重构系统,提供了根据本发明第二方面的第三基于存储对象的数据重构系统,其中所述数据分配模块用于从存储池中获取处于空闲状态的第一数据块,所述第一数据块来自未被所述存储对象使用的驱动器。

根据本发明的第二方面的第三基于存储对象的数据重构系统,提供了根据本发明第二方面的第四基于存储对象的数据重构系统,其中所述数据分配模块用于从存储池中获取处于空闲状态的第一数据块,使得所述第一数据块来自构成所述存储池的多个驱动器中负载轻或者空闲容量多的驱动器。

根据本发明的第二方面的第一至第四基于存储对象的数据重构系统之一,提供了根据本发明第二方面的第五基于存储对象的数据重构系统,还包括:故障级别获取模块,用于获取使用了第一驱动器提供的数据块多个存储对象的故障级别;以及存储对象选择模块,用于获取所述多个存储对象中故障级别高的存储对象。

根据本发明的第二方面的第一至第五基于存储对象的数据重构系统之一,提供了根据本发明第二方面的第六基于存储对象的数据重构系统,还包括:第二故障模块选择模块,用于响应于存储池中的第一驱动器的一个或多个地址区段故障,获取使用了所述一个或多个地址区段提供的数据块的一个或多个存储对象。

根据本发明的第二方面的第一至第六基于存储对象的数据重构系统之一,提供了根据本发明第二方面的第七基于存储对象的数据重构系统,其中数据恢复模块,还用于从所述存储对象中重构所述存储对象中存储在第一驱动器的数据块中的数据,将所述数据存储到所述第一数据块。

根据本发明的第二方面的第一至第七基于存储对象的数据重构系统之一,提供了根据本发明第二方面的第八基于存储对象的数据重构系统,其中若没有任何存储对象使用了第一驱动器提供的数据块,所述数据重构系统的数据重构完成。

根据本发明的第二方面的第一至第八基于存储对象的数据重构系统之一,提供了根据本发明第二方面的第九基于存储对象的数据重构系统,其中所述故障级别对应于所述存储对象中位于故障驱动器的数据块的数量。

根据本发明的第三方面,提供一种包含计算机程序代码的计算机程序,当被载入计算机系统并在计算机系统上执行时,所述计算机程序代码使所述计算机系统执行根据本发明第一方面提供的基于存储对象的数据重构方法。

根据本发明的第六方面,提供一种包括程序代码的程序,当被载入存储系统并在存储系统上执行时,所述计程序代码使所述存储系统执行根据本发明第一方面提供的基于存储对象的数据重构方法。

本发明的技术方案有以下优点:

(1)基于存储对象进行重构,破除单驱动器写入瓶颈,极大加快重构速度。

(2)可以进行数据感知,只针对存储有数据的存储对象进行重构,数据重构量和用户数据量成正比。

(3)可以针对存储对象的故障级别,进行优先级重构。

(4)基于存储对象,可以实现对一段地址区域进行局部重构,避免了对全盘进行重构。

附图说明

当连同附图阅读时,通过参考后面对示出性的实施例的详细描述,将最佳地理解本发明以及优选的使用模式和其进一步的目的和优点,其中附图包括:

图1示出了根据本发明实施例的存储系统的架构;

图2示出了根据本发明实施例的存储对象的结构;

图3是根据本发明的实施例驱动器发生故障的示意图;

图4a是根据本发明的实施例对存储对象实施重构的示意图;

图4b是根据本发明的实施例对存储对象实施重构的流程图;

图5是根据本发明的另一实施例的对存储对象实施重构的示意图;

图6是根据本发明的又一实施例的对存储对象实施重构的示意图;

图7是根据本发明的依然另一实施例的对存储对象实施重构的示意图;以及

图8是现有技术的raid系统的示意图。

具体实施方式

参看图1,图1示出了根据本发明实施例的存储系统的架构。根据本发明的存储系统包括计算机或服务器(统称为主机)以及耦合到主机的多个驱动器。优选地,驱动器是固态驱动器(ssd)。可选地,根据本发明的实施例中也可以包括磁盘驱动器。

通过存储资源池来维护各个驱动器提供的存储资源。存储资源池中记录了各个驱动器中的数据块或数据大块(chunk,简称大块)。作为举例,数据大块是预定大小的逻辑空间或物理空间连续的多个数据块。数据大块的大小,作为举例,可以是数百kb或mb。可选地,存储资源中记录的是各个驱动器中尚未分配给存储对象的数据块或数据大块,这些数据块或数据大块又被成为空闲数据块或空闲数据大块。存储资源池也是一种虚拟化技术,将来自物理驱动器的存储资源虚拟化为数据块或数据大块以供上层访问或使用。在存储系统中,存储资源池可以有多个,而在图1的例子中,仅展示了单一的存储资源池。

根据本发明实施例中提供的存储对象,代表存储系统的部分存储空间。存储对象是带有raid功能的存储单元,后面会结合图2详细描述存储对象结构。根据本发明的实施例中提供存储对象层,存储对象层提供多个存储对象。存储对象可以被创建和销毁。一个存储对象被创建时,从通过分配器从存储资源池中获取所需数量的大块,这些大块组成存储对象。一个大块在同一时刻可以仅属于一个存储对象。已经被分配给存储对象的大块不会再被分配给其他存储对象。存储对象被销毁时,构成该存储对象的大块被释放回存储资源池,并可被再次分配给其他存储对象。根据本发明实施例的数据重构方法,是针对存储对象进行数据重构。

图2示出了根据本发明实施例的存储对象的结构。存储对象包括多个数据块或数据大块。在图2的例子中,存储对象包括大块220、大块222、大块224以及大块226。构成存储对象的大块来自不同的驱动器。参看图2,大块220来自驱动器210,大块222来自驱动器212,大块224来自驱动器214以及大块226来自驱动器216。从而,当单一驱动器发生故障时,存储对象中的一个或少数大块无法访问,而通过存储对象的其他大块,能够重建存储对象的数据,以满足数据可靠性的要求。

通过raid技术为存储对象提供数据保护,并提供存储对象的高性能访问。参看图2,存储对象包括多个raid条带(条带230、条带232……条带238),每个条带由来自不同大块的存储空间组成。同一条带的来自不同大块的存储空间可具有相同或不同的地址范围。条带是存储对象的最小写入单位,从而通过向多块驱动器的并行写入数据来提升性能。存储对象的读操作没有大小限制。在条带中实现raid技术。依然参看图2,构成条带230的来自4个大块的存储空间中,3个存储空间用于存储用户数据,而另1个存储空间用于存储校验数据,使得在条带230上提供raid5级别的数据保护。

可选地,每个大块中还存储元数据信息。在图2的例子中,大块220-大块226的每个上都保存相同的元数据信息,从而保证了元数据信息的可靠性,即使属于同一存储对象的部分大块发生故障,从其他大块中依然能获取元数据信息。元数据用于记录大块所属的存储对象、大块所在存储对象的数据保护级别(raid级别)、大块的擦写次数等信息。

图3是根据本发明的实施例驱动器发生故障的示意图。在图3中,一块驱动器发生故障(由多条竖线指示故障状态),并导致由故障驱动器提供的大块无法使用,需要对使用了这块驱动器的大块作为存储资源的那些存储对象进行重构。参看图3,故障驱动器提供了4个大块,而存储对象1、存储对象4、存储对象6与存储对象7使用了来自故障驱动器的大块,因而需要对存储对象1、存储对象4、存储对象6与存储对象7进行重构。

虽然图3中,示出了存储资源池中的大块出现故障,并且这些大块已经分配了存储对象,然而在其他的实施方式中,存储资源池中仅维护尚未被分配给存储对象的大块。在存储对象的大块的元数据中记录了大块与存储对象的对应关系,还可以另外地维护已使用的大块与存储对象的对应关系,使得在驱动器故障时,能够获取受到影响的存储对象。

图4a是根据本发明的实施例对存储对象实施重构的示意图。参看图4a,故障驱动器导致存储对象1的大块4无法访问,需要对存储对象1进行重构。由于存储对象1中得到raid5技术(作为举例)的保护,虽然大块4无法访问,但通过构成存储对象1的大块1、大块2与大块3能够恢复出大块4的数据。

为实施重构,从存储资源池中为存储对象1分配新的大块(大块5),以替换发生故障的带块4。可从存储资源池中选择任何的空闲大块分配给存储对象1。可选地,选择来自不同驱动器的大块分配给存储对象1,以保证访问存储对象1时能够充分利用多个驱动器提供的并行性。例如,参看图4a,构成存储对象1的大块1来自驱动器2,大块2来自驱动器3,大块3来自驱动器4,而发生故障的大块4来自故障驱动器,那么从尚未给存储对象1提供的大块的驱动器中选择一个驱动器(例如,驱动器8)来为存储对象1提供新的大块(例如,大块5)。以此方式,使得存储对象中的大块分别来来自于不同的驱动器,因此,在重构的过程中,所有驱动器都会参与到重构中,因而不会因单盘读/写操作而影响性能,因此可以实现快速重构。

对于故障驱动器使得多个存储对象都需要重建的情况下,新分配的空闲大块来自于不同的驱动器。对空闲大块的写操作被分散到不同的驱动器上,消除了现有技术中的重构技术引入的单盘瓶颈。

在另一个实施例中,从存储资源池中随机选取大块,而不必考虑存储对象已经使用了来自哪些驱动器的大块。由于存储系统中有较多数量的驱动器,随机选取大块的方式使得从相同驱动器中为同一存储对象分配多个大块的几率较低,以及在需要重构多个存储对象的情况下,新分配的大块来自随机选择的驱动器,从而重构时引起的写操作也被分散到不同的驱动器。

在依然另一个实施例中,从存储资源池中选取大块时,选取工作负载轻和/或空闲容量多(未被分配的大块多)的驱动器来提供大块,从而使存储系统的负载在多个驱动器之间更好的分配,以提升存储系统的性能、寿命和/或可靠性。

在对存储对象实施重构时,将数据写入新分配的大块5。从构成存储对象的其他大块中恢复出故障大块3的数据,并将恢复的数据写入新分配的大块5。由于构成存储对象的大块发生变化,可选地,还更新属于存储对象1的各个大块上记录的元数据,以反映存储对象1的变化。

图4b是根据本发明的实施例对存储对象实施重构的流程图。响应于存储系统中的(一个或多个)驱动器出现故障,获取使用了故障驱动器提供的大块的(一个或多个)存储对象(410)。由于在大块的元数据中存储了大块与存储对象的对应关系,从中能够识别故障驱动器提供的大块被哪个或哪些存储对象所使用。在另外的例子中,也单独地维护记录大块与存储对象的对应关系的表,从而有效识别故障驱动器所影响的存储对象。

从存储资源池中获取空闲大块(参见图4a,大块5)分配给存储对象1(420)。有多种选取空闲大块的策略。例如,从存储资源池中随机选取大块,或者选取来自存储对象1未使用的驱动器提供的大块。

从存储对象1的未发生故障的大块(参看图4a,大块1、大块2与大块3)中重建故障大块4的数据,并将重建的数据写入新分配的大块5(430)。可选地,还更新存储对象1的大块(参看图4a,大块1、大块2、大块3与大块5)的元数据信息,以反映对存储对象1的重构。

对于受故障驱动器所影响的每个存储对象,通过图4b所示出的方法实施重构。

在进一步的实施例中,故障驱动器被更换,新的驱动器被安装或加入到存储资源池,使存储资源池维护新驱动器提供的大块,以供分配给存储对象。

通过本发明实施例,实现了存储对象的重构的性能随存储系统内驱动器的数量变化而线性增加,具有良好的扩展性,实现了快速重构的目的。

图5是根据本发明的另一实施例的对存储对象实施重构的示意图。

基于存储对象的重构可以实现对数据的感知重构。在根据本发明的实施例中,所有的重构操作都是针对已经被写入数据的存储对象,用户请求的数据都将被映射到对存储对象的访问,而没有写入数据的存储空间(例如,数据块或大块)并不会分配给存储对象。

现有技术的重构中无法判断存储位置是否被写入有效数据,因而要对全盘进行长时间重构。而在图5的实施例中,驱动器1发生故障(由图5中的多条竖线示出),驱动器1提供了多个大块(由图5中的多条竖线示出)。而仅有大块4被分配给存储对象(参看图5,存储对象1),驱动器1的其他大块并未被分配给存储对象。选出占用故障驱动器1中的大块的那些存储对象(参看图5,存储对象1)进行重构。存储对象是在被写入用户有效数据时创建的,在创建存储对象时为其分配大块。因而存储对象中一定存有用户有效数据。在图5的实施例中,仅对存储对象1进行重构,从存储资源池中选择新的大块(大块5)来替换故障的大块4,并恢复大块4的数据写入新分配给存储对象1的大块5。

在另一个例子中,驱动器发生故障,但故障驱动器的大块未分配给任何存储对象,那么无需进行重构,故障驱动器可以直接移除或被更换。依然参看图5,虽然驱动器1发生故障,但存储对象2的多个大块(大块6、大块7、大块8与大块9)没有任何一个来自驱动器1,因而无需对存储对象2进行重构。

虽然图5中,示出了存储资源池中的大块出现故障,并且这些大块之一(大块4)被分配了存储对象,而其他故障大块并未被分配给存储对象,然而在其他的实施方式中,存储资源池中仅维护尚未被分配给存储对象的大块。

图6是根据本发明的又一实施例的对存储对象实施重构的示意图。在图6所示出的重构中,实现了优先级重构。参看图6的实施例,有6个存储对象存在故障大块,需要重构。比较需要重构的存储对象的故障等级,发现存储对象11与存储对象12的4个大块中有2个大块发生故障,而存储对象6、存储对象7、存储对象9以及存储对象10的4个大块中,有1个大块发生故障。作为举例,对于实现raid6的存储对象,有两个大块故障的存储对象,如不尽快进行重构,一旦再出现大块故障,就会导致数据丢失,因而在图6的存在故障的6个存储对象中,存储对象11与存储对象12迫切需要重构。存储对象中故障大块数量的多少指示了故障级别,在根据本发明的实施例中,对故障大块的数量多的存储对象优先进行重构。参看图6,根据故障优先级,存储对象11与存储对象12各有两个大块存在故障,必须被优先进行重构,防止数据丢失。

除了故障大块数量,有多种因素用于评估重构的优先级。例如,存储对象中故障大块与正常大块的比例,存储对象的数据保护级别(raid级别)与故障大块的数量,存储对象中存储的数据的属性(数据重要性、数据访问频度等)等。

图7是根据本发明的依然另一实施例的对存储对象实施重构的示意图。在图7的实施例中,存储资源池感知驱动器的部分地址空间出现故障。

在一个例子中,驱动器提供多个命名空间(namespace),每个命名空间占据整个逻辑地址空间的部分。由于多种原因(例如,驱动器的控制器更新,命名空间重新分配,驱动器主动限制了给存储系统的使用配额等),命名空间临时不可用,并导致由该命名空间提供的大块不可用。在另一个例子中,驱动器向存储系统提供物理地址空间,存储系统直接通过物理地址访问驱动器。由于出现坏块、存储介质到达预期寿命等原因,部分物理地址空间变得不可用。

基于出现故障的地址空间,获知存在故障的大块,进而确定故障所影响的存储对象(参看图7,存储对象6与存储对象7),并对存储对象6与存储对象7实施重构。从而仅针对驱动器故障所影响的存储对象实施重构,避免了全驱动器重构对存储系统性能的影响。

本发明实施例还提供一种包含程序代码的程序,当被载入cpu并在cpu中执行时,程序使cpu执行上面提供的根据本发明实施例的方法之一。

本发明实施例还提供一种包括程序代码的程序,当被载入主机并在主机上执行时,所述程序使主机的处理器执行上面提供的根据本发明实施例的方法之一。

应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以分别由包括计算机程序指令的各种装置来实施。这些计算机程序指令可以加载到通用计算机、专用计算机或其他可编程数据控制设备上以产生机器,从而在计算机或其他可编程数据控制设备上执行的指令创建了用于实现一个或多个流程图框中指定的功能的装置。

这些计算机程序指令还可以存储在可以引导计算机或其他可编程数据控制设备的计算机可读存储器中从而以特定方式起作用,从而能够利用存储在计算机可读存储器中的指令来制造包括用于实现一个或多个流程图框中所指定功能的计算机可读指令的制品。计算机程序指令还可以加载到计算机或其他可编程数据控制设备上以使得在计算机或其他可编程数据控制设备上执行一系列的操作操作,从而产生计算机实现的过程,进而在计算机或其他可编程数据控制设备上执行的指令提供了用于实现一个或多个流程图框中所指定功能的操作。

因而,框图和流程图的框支持用于执行指定功能的装置的组合、用于执行指定功能的操作的组合和用于执行指定功能的程序指令装置的组合。还应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以由执行指定功能或操作的、基于硬件的专用计算机系统实现,或由专用硬件和计算机指令的组合实现。

虽然当前发明参考的示例被描述,其只是为了解释的目的而不是对本发明的限制,对实施方式的改变,增加和/或删除可以被做出而不脱离本发明的范围。

这些实施方式所涉及的、从上面描述和相关联的附图中呈现的教导获益的领域中的技术人员将认识到这里记载的本发明的很多修改和其他实施方式。因此,应该理解,本发明不限于公开的具体实施方式,旨在将修改和其他实施方式包括在所附权利要求书的范围内。尽管在这里采用了特定的术语,但是仅在一般意义和描述意义上使用它们并且不是为了限制的目的而使用。

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