一种数据重组方法

文档序号:6386164阅读:595来源:国知局
专利名称:一种数据重组方法
技术领域
本发明涉及一种数据处理方法,具体涉及一种独立冗余磁盘阵列(RAID)的数据重组方法。
背景技术
随着科学技术的飞速发展与计算机技术的普遍应用,人们对存储设备的性能要求越来越高,RAID技术已作为一项成熟的技术广泛的应用于磁盘阵列中。
简单地说,RAID是把多块独立的物理硬盘按不同方式组合起来形成一个逻辑硬盘组,从而提供了比单个硬盘更高的存储性能和提供数据冗余的技术。数据冗余技术是指在用户数据一旦发生损坏后,利用冗余信息可以使损坏数据得以恢复,从而保障了用户数据的安全。磁盘阵列因其组成方式不同形成了不同的RAID级别,现在的RAID包括从RAID0到RAID6的七种不同基本级别。另外,还有一些基本RAID级别的组合形式,如RAID0+1为RAID0与RAID1的组合,RAID0+5为RAID0与RAID5的组合。不同RAID级别代表不同的存储性能、数据安全性和存储成本。比如RAID0将数据分成许多块,然后并行地将它们写到磁盘阵列中的各个硬盘上;读出数据时,RAID控制器从各个硬盘上读取数据,把这些数据恢复为原来顺序后传给主机。这种方法的优点是采用数据分块、并行传送方式,能够提高主机读写速度,并且磁盘阵列中存储空间没有冗余。但它对系统的可靠性没有任何提高,任一个硬盘介质出现故障时,系统无法恢复。为了保证数据重组过程的安全性,现今的数据重组一般采用双控制器共同工作的方式,即其中一个控制器为正在重组控制器,对数据的重组进程及主机读写请求等进行控制;另一个控制器则为正在重组控制器的备份,当正在重组控制器出现错误或失效时,此备份控制器可立即接替其工作。
RAID1把磁盘阵列中的硬盘分成相同的两组,互为镜像,当任一磁盘介质出现故障时,可以利用其镜像上的数据恢复,从而提高系统的容错能力。它对数据仍采用分块后并行传输的方式,不仅提高了读写速度,也加强了系统的可靠性,但对硬盘的利用率低,冗余度为50%。
RAID3同RAID0一样,也采用数据分块并行传送的方法,不同的是它在数据分块之后计算分块数据的奇偶校验和,然后把分块数据和奇偶校验信息一并写到硬盘阵列中。该方法对数据的存取速度和可靠性都有所改善,可利用未损坏数据盘和奇偶校验盘上的信息重构被损坏的数据。RAID3的硬盘利用率比RAID1要高,例如由5个硬盘组成的阵列,冗余度只有20%。不过,由于RAID3的奇偶校验信息固定存储在一个硬盘上,使该硬盘负担较重,从而产生新的瓶颈。
RAID5与RAID3所采用的数据处理方法相似,所不同的是它把奇偶校验信息交叉写到阵列中的每个硬盘上,从而克服了RAID3中的瓶颈问题。
所以对一个RAID来说,它将源于主机的读写请求分散到各个组成该RAID的成员磁盘上,以提高主机的读写性能,并且利用RAID中的校验数据或镜像数据提高系统的冗余性,以便在组成RAID的一个或多个成员磁盘失效后,能通过校验数据或镜像数据,恢复失效成员磁盘上的数据。同时一个RAID的读写性能及有效存储大小,与其RAID类型及组成该RAID的成员磁盘数量也有关。比如RAID5的写性能比RAID0+1差,这是因为RAID5写数据时,需要异或重新生成校验数据,而RAID0+1只需写镜像数据。又如RAID 3D+1P和RAID 7D+1P,其中D代表磁盘,D前的数字代表磁盘数量;P为校验数据,P前的数字为每分条的校验数据量,由于后者读写请求被分散到了更多的RAID成员磁盘上,提高了读写的并行性,RAID 7D+1P的读写性能相比RAID 3D+1P更好。但是,随着RAID的性能提高,其成本也随之增加。比如RAID 7D+1P相比RAID 3D+1P的性能有所提高,但其成员磁盘数量则由RAID 3D+1P的4个增加到了8个。因此,配置何种RAID类型取决于用户的应用场合、性能及成本要求。并且,在使用过程中,用户时常根据需求的变更来动态调整原有的RAID类型。比如随着用户存储信息的增加,原有的RAID 3D+1P已无法满足用户的需求,用户可增加一个或多个磁盘到原有的3D+1P系统中,即3D+1P将变成(3+r)D+1P,其中r为新增的磁盘数量。这样,既动态增加了RAID系统的容量,同时也提高了系统的性能。这种操作改变了RAID的级别,与此同时,就需要将原来磁盘阵列上的数据重新整理到作为一个整体的新的磁盘阵列上,而这种对数据进行重新整理的过程就叫做数据重组。
一般情况下,在动态扩展或修改RAID类型时,需要重点考虑两个问题一个是要高效地将原RAID类型的数据重组成新RAID类型。另一个就是要保证在数据重组过程中,数据始终能保持一致性及安全性。
在现有技术中,有很多专利涉及动态扩展RAID类型时的数据重组问题,其中一个有代表性的就是日立公司的专利EP0654736A2,如图1所示。其数据重组的方向为从低地址向高地址逐区域进行。重组过程中,先将原类型数据以原类型模式读到高速缓冲存储器(Cache)中,然后根据扩展后的模式重新生成新校验数据,最后将重组后的数据按新模式写入磁盘阵列。具体而言,该方法将所有数据按存储地址分成三个区域和两个点,其中区域6040为尚未重组区域,该区域仍为原RAID类型,对其访问必须按照原RAID类型进行;区域6020则为已完成重组区域,该区域已为新RAID类型,对其访问必须按照新RAID类型进行;而区域6030则为正在重组区域,该区域RAID类型混乱,对其访问必须在Cache中进行。
两个点则为6011与6012,其中6011为尚未重组起始点,即尚未重组区域6040的逻辑起始地址;6012为已完成重组结束点,即已完成重组区域6020的逻辑结束地址。重组过程中,这两个点在Cache中保存并动态更新。
于是,当主机需要读写阵列时,对已完成重组部分6020、尚未重组部分6040,分别按照扩展前与扩展后的模式访问阵列即可,但对正在重组的部分6030,则在Cache中完成读写请求。
这种方法重组效率较高,也能通过重构恢复失效磁盘数据的方法,解决重组过程中磁盘失效问题。但是,对数据重组操作正在执行的区域而言,如果正按照新RAID类型重组数据时RAID控制器突然出现故障,由于原RAID类型区域中的数据已被覆盖,而该区域中新RAID类型数据的重组操作尚未完成,则该区域内的数据将失去原来的完整性与一致性。
另一个同样具有代表性的数据重组技术就是MYLEX公司的专利WO98/15895。为了防止出现重组过程中原RAID类型数据被覆盖,新RAID类型数据尚未完全写入而造成数据无法恢复的问题,原RAID类型中需要重组的数据将被先拷贝到RAID系统的空闲空间,之后再开始重组。图2说明了其重组思路,图2中,D1至D3为原RAID类型磁盘阵列,D4为新增磁盘,图2a至2d分别为数据重组过程中不同存储状态的示意图。
首先,在原RAID类型磁盘中确定一个区域,一般称之为破坏区(Destructive Zone),Destructive Zone的大小=N×M=2×3=6,即原RAID类型从0至5的区域,如图2a所示。
然后,根据Destructive Zone大小,将D3最后6块分条数据单元(DB)DB1至DB6中的数据从下向上拷贝到新增磁盘D4的对应位置中,以便在D3中空出一个与Destructive Zone大小相同的空间,如图2b所示。
接着,将需要重组的Destructive Zone大小的数据0至5从下向上拷贝到D3空出的最后6块数据空间中,同时,再将此数据拷贝到D4中DB6上方紧邻的一块区域中。拷贝双份的目的,主要是为了防止重组过程中出现磁盘失效而丢失数据,如图2c所示。
最后,将Destructive Zone中的原RAID类型数据重组为新RAID类型数据,如图2d所示。
以上操作就是对一定量数据进行完整重组的过程。其余的重组,全部重复上述过程,即每次先拷贝双份将要重组数据分别放到D3最后6块数据空间及D4中DB6之上的相同大小数据空间中,再将原类型数据进行重组,如此循环,直至重组完成。
这种数据重组方法,有效地解决了数据重组过程中可能出现的数据不一致问题,提高了数据重组的安全性。但因该方法是将原RAID类型的数据备份到别处,在原位置进行重组。这样,对将要重组的数据必须经过数次读写操作之后,才能进行重组,以至于重组的效率被大大降低了。

发明内容
有鉴于此,本发明的主要目的在于提供一种独立冗余磁盘阵列中的数据重组方法,在简化数据重组过程的同时,既保证有较高的安全性又能提高重组效率。
为达到上述目的,本发明的技术方案是这样实现的本发明公开了一种独立冗余磁盘阵列中的数据重组方法,在原独立冗余磁盘阵列系统高地址侧尾部预留一块磁盘空间作为重组区域,将该预留重组区域的高地址作为写入数据的起始地址,并将原独立冗余磁盘阵列系统中存有数据的高地址作为重组数据的起始高地址,该数据重组方法还包含以下步骤a.确定当前要重组数据的低地址,并将当前要重组数据高地址到低地址之间的数据重组为新独立冗余磁盘阵列类型数据;b.将重组后的数据从写入数据的起始地址向低地址方向,顺序写入新独立冗余磁盘阵列系统中;c.判断是否还有数据需要重组,如果有,则将当前要重组数据低地址的邻接低地址作为下次要重组数据的高地址,当前写入数据低地址的邻接低地址作为下次写入数据的起始地址,返回步骤a;否则结束当前重组流程。
所述预留重组区域包括至少一块大小为新独立冗余磁盘阵列系统的成员磁盘数量与原独立冗余磁盘阵列系统的成员磁盘数量的比值向上取整的区域。
上述方案中,每次进行重组的数据区域的大小与预留重组区域的大小相同。
步骤a中所述确定要重组数据低地址为用当前要重组数据的高地址减去预留重组区域的大小再加1,得到当前要重组数据的低地址。当得到的要重组数据的低地址小于0时,将当前要重组数据的低地址设置为0。
步骤a还进一步包括将当前要重组数据高地址到低地址之间的数据拷贝至高速缓存器,在高速缓存器中重组为新独立冗余磁盘阵列类型数据。
上述方案中,用指针标识每次拷贝到高速缓存器中的数据在原独立冗余磁盘阵列中的地址,并将此指针镜像到备份控制器中。用指针标识每次完成重组数据写入新独立冗余磁盘阵列中的地址。
与现有技术相比,本发明所提供的数据重组方法将数据重组顺序改为从高地址向低地址进行,将原类型数据的拷贝进行重组,写到另外的特定区域中,大大提高了数据重组速度,避免了数据重组过程中可能出现的数据一致性及完整性因重组过程中控制器出现故障而遭到破坏的情况,保证了数据重组过程的安全性。


图1为现有技术日立公司的专利EP0654736A2数据重组区域示意图;图2为现有技术MYLEX公司专利WO98/15895数据重组方法示意图;图3为本发明数据重组方法示意图;图4为本发明数据重组流程图。
具体实施例方式
为了使本发明的目的、技术方案和优点更清楚,下面结合具体实施方式
对本发明作进一步描述。
如图3所示,本发明中需要重组的原RAID系统高地址侧的尾部必须预留出至少一块大于等于K个分条的区域,作为预留的重组区域,用来写入第一次被重组成新类型的数据;第二次重组完成的数据则写入第一次被重组成新类型的数据之上,即相对于上次写入地址的低地址。
预留的重组区域的大小是这样确定的假定原RAID系统的成员磁盘数量等于M,新RAID系统的成员磁盘数量等于N,则预留重组区域 ,这里K的单位为分条,符号“ ”表示向上取整。比如原RAID类型是3D+1P,新RAID类型是7D+1P,则 。该区域最初为一个无数据区域,即没任何用户数据存在于其中。对常见的RAID系统而言,数据成员磁盘数量最大为7,最小为2,则K最大为4;而分条单元大小最大一般是64K,那么,用户最大可能预留大小就等于4×7×64K=1792K。这个空间大小用户是完全可以接受的,且因为RAID具有冗余性,所以K分条大小的预留重组区域中做到无数据是没有问题的。
确定了预留重组区域后,即可开始重组。但为了让数据在重组时具有一定的方向性和位置性,还需要有指针的配合设一指针X。若当前正在重组区域的分条号为从y到y+K-1,那么将y值赋给X,X就指向正在重组区域的分条号,则在重组过程中,小于X的区域,都是尚未重组的区域;大于等于X+K的区域,都是已经完成重组的区域。
数据重组时,其重组方向为从高地址向低地址进行,即从原RAID类型最后一个正在使用的分条开始,一直向上重组。每次重组K个分条大小的数据,直至重组完原RAID类型数据的第0号分条,重组既告结束。
具体过程为重组开始时,首先从原RAID类型中拷贝相当于重组区域大小的数据到Cache中,按照新RAID类型进行数据重组,并重新生成校验数据,之后将重组后的新类型数据写入预留的重组区域及新增的磁盘空间中,即写入新RAID中从最高地址到低地址的K个分条大小的数据空间中。第二次重组时,首先将邻接上次重组时拷贝数据低地址的相当于重组区域大小的数据拷贝到Cache中,按照新RAID类型进行数据重组,并重新生成校验数据,之后将重组后的新类型数据写入上次写入的数据之上,即写入上次写入地址的邻接低地址的相当于重组区域大小的空间中。以后每次对K分条大小的数据进行重组,均分别由上次拷贝及写入的邻接低地址拷贝及写入,直至重组完原RAID类型数据的第0号分条,重组即告结束。
伴随重组进程,当预留重组区域及新增磁盘空间与已使用空间中的新、原类型数据发生位置冲突时,已使用空间中的原类型数据则被重组后的新类型数据所覆盖,而此时处于被覆盖位置的这部分原类型数据早已被重组为新类型数据,因而不会影响数据重组的安全性。
重组过程中会实时存在主机请求,即RAID数据处理的读写请求。对尚未重组的区域而言,要按照原RAID类型处理读写请求;而已经重组的区域,则需按新RAID类型及新分条的位置处理读写请求;对于正在重组的区域,若为读请求,则按原RAID类型处理;若为写请求,则只能等待被请求处理数据重组完成后,按照新RAID类型及新分条位置进行。重组时,若遇到该区域数据正在回写或透写,则要等待回写或透写完成后才能继续进行。
另外,为防止重组过程中,正在重组控制器失效造成指针X丢失其指示地址,则每次更新X后,都将其镜像到另外一个备份控制器中,以便本地RAID控制器失效后,镜像端RAID控制器能接管操作,从而继续完成数据重组。
为了能更明确地了解数据重组过程,下面以流程图的方式进行介绍,如图4所示,其中步骤401到403为数据重组的准备工作。数据重组的具体流程包括以下步骤步骤401首先在原类型磁盘中确定预留重组区域的大小;步骤402确定原类型磁盘中要被重组数据的高地址,再根据预留重组区域的大小进一步确定原类型磁盘中要被重组数据的低地址;步骤403确定第一次被重组之后的数据写入的最高地址,此时的最高地址就是磁盘阵列的最高地址。
步骤404~406确定重组数据起始地址以及写入地址后,对当前要被重组数据的地址进行判断。一般,每次重组的数据大小都是K个分条,每完成一次重组都把要被重组数据的地址减K,但由于原类型磁盘中需要重组的数据大小不一定均为K的整数倍,所以每次重组前都要判断当前要重组数据的低地址是否小于0。如果当前要重组数据的低地址不小于0,则表示剩余未被重组数据量不小于K个分条,可继续重组,那么就进入步骤405查询要被重组数据的回写、透写状态,此时要重组数据的地址为y~(y+K-1);如果当前要重组数据的低地址小于0,则进入步骤406判断当前要重组数据的高地址是否小于0,如果当前要重组数据的高地址小于0,就表示数据已重组完毕,则结束本次重组流程;否则,就进入步骤405查询要被重组数据的回写、透写状态,此时要重组数据的地址为0~(y+K-1)。
步骤407判断要进行重组区域内是否有数据在回写或透写,如果有数据在回写或透写,则返回步骤405重新查询;如果没有数据在回写或透写,则进入步骤408。
步骤408禁止对要被重组数据区域内数据的回写、透写请求,为后续的数据重组操作提供安全的数据环境。实际上步骤404~408的目的就是区别两种情况禁止将要重组数据的回写、透写请求一种情况是,当发现没有数据在回写、透写时,立即禁止数据的回写、透写;另一种情况是,当发现有数据正在回写、透写时,则需等待数据回写、透写完毕才能禁止数据的回写、透写请求。
步骤409把要被重组数据拷贝到Cache中按照新RAID类型进行重组,并重新生成校验数据。
步骤410Cache对数据重组结束后,将完成重组的数据写到步骤403所确定的磁盘空间中,即从新类型磁盘最高地址到相对低地址的K个分条大小的数据空间中;之后把写入完成重组数据的指针地址减K,将新得地址赋值给写入完成重组数据的指针地址,作为下一次写入完成重组数据的指针地址。
至此,对数据的一次重组处理已经完成,可以取消对数据回写、透写的禁止,即进入步骤411。
步骤412将要被重组数据区域的指针值减K,使指针指向下一次要重组的K分条大小的原类型数据,并把这个新的指针值保存到备份控制器中,返回步骤404。
此时,一次数据重组的完整操作就完成了。如果还留有原类型数据需要重组,那么下一次的数据重组操作将再次进入步骤404判断当前要重组数据的低地址是否小于0,如果不小于0,则其后续操作与上次数据重组操作相同;如果当前要重组数据的低地址小于0,则要进入步骤406判断当前要重组数据的高地址是否小于0,如果不小于0,就进入步骤405查询要被重组的数据的回写、透写状态,之后进入步骤407判断是否有数据在回写或透写,此后的操作与每次数据重组的操作相同。如果在步骤406中的判断结果是当前要重组数据的高地址小于0,那就说明已经没有原类型数据需要重组,重组操作既告结束。
在上述数据重组流程中,步骤410与步骤411顺序可以互换;指针X也不是必须指向y,只要指针X在每次数据重组时能标识出原类型磁盘中将要重组数据的地址范围即可。
由本发明方法可知,本发明所提供的技术方法使数据在重组过程中保持了其完整性、统一性及安全性。以上所述仅为本发明的过程及方法实施例,并不用以限制本发明,凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种独立冗余磁盘阵列中的数据重组方法,其特征在于,在原独立冗余磁盘阵列系统高地址侧尾部预留一块磁盘空间作为重组区域,将该预留重组区域的高地址作为写入数据的起始地址,并将原独立冗余磁盘阵列系统中存有数据的高地址作为重组数据的起始高地址,该数据重组方法还包含以下步骤a.确定当前要重组数据的低地址,并将当前要重组数据高地址到低地址之间的数据重组为新独立冗余磁盘阵列类型数据;b.将重组后的数据从写入数据的起始地址向低地址方向,顺序写入新独立冗余磁盘阵列系统中;c.判断是否还有数据需要重组,如果有,则将当前要重组数据低地址的邻接低地址作为下次要重组数据的高地址,当前写入数据低地址的邻接低地址作为下次写入数据的起始地址,返回步骤a;否则结束当前重组流程。
2.如权利要求1所述的数据重组方法,其特征在于,所述预留重组区域包括至少一块大小为新独立冗余磁盘阵列系统的成员磁盘数量与原独立冗余磁盘阵列系统的成员磁盘数量的比值向上取整的区域。
3.如权利要求1所述的数据重组方法,其特征在于,每次进行重组的数据区域的大小与预留重组区域的大小相同。
4.如权利要求1、2或3所述的数据重组方法,其特征在于,步骤a中所述确定要重组数据低地址为用当前要重组数据的高地址减去预留重组区域的大小再加1,得到当前要重组数据的低地址。
5.如权利要求4所述的数据重组方法,其特征在于,所得到的要重组数据的低地址小于0时,将当前要重组数据的低地址设置为0。
6.如权利要求1、2或3所述的数据重组方法,其特征在于,步骤a进一步包括将当前要重组数据高地址到低地址之间的数据拷贝至高速缓存器,在高速缓存器中重组为新独立冗余磁盘阵列类型数据。
7.如权利要求1所述的数据重组方法,其特征在于,该方法进一步包括用指针标识每次拷贝到高速缓存器中的数据在原独立冗余磁盘阵列中的地址。
8.如权利要求7所述的数据重组方法,其特征在于,该方法进一步包括每次进行数据重组前,将标识要重组数据在原独立冗余磁盘阵列中地址的指针镜像到备份控制器中。
9.如权利要求1所述的数据重组方法,其特征在于,该方法进一步包括用指针标识每次完成重组数据写入新独立冗余磁盘阵列中的地址。
全文摘要
本发明公开了一种数据重组方法,在原独立冗余磁盘阵列(RAID)系统高地址侧尾部预留一块磁盘空间作为重组区域,将该预留重组区域的高地址作为写入数据的起始地址,并将原RAID系统中存有数据的高地址作为重组数据的起始高地址;数据重组完之前重复执行以下步骤确定当前要重组数据的低地址,并将当前要重组数据高地址到低地址之间的数据重组为新RAID类型数据;将重组后的数据从写入数据的起始地址向低地址方向,顺序写入新RAID系统中;当前要重组数据低地址的邻接低地址作为下次要重组数据的高地址,当前写入数据低地址的邻接低地址作为下次写入数据的起始地址。用户使用本发明可保证数据重组过程中的安全性,并且重组过程的简便性也提高了数据重组效率。
文档编号G06F3/06GK1670682SQ20041000894
公开日2005年9月21日 申请日期2004年3月15日 优先权日2004年3月15日
发明者张巍, 黄玉环, 张国彬, 张粤 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1