一种独立磁盘冗余阵列数据重建方法和装置的制作方法

文档序号:6425136阅读:189来源:国知局
专利名称:一种独立磁盘冗余阵列数据重建方法和装置的制作方法
技术领域
本发明涉及数据存储技术领域,尤其涉及一种独立磁盘冗余阵列数据重建方法和
直O
背景技术
随着科学技术的飞速发展和计算机技术的普遍应用,人们对存储设备的性能要求越来越高。作为一项成熟的技术,独立冗余磁盘阵列(RAID,Redundant Array of Independent Disk,)技术已经广泛应用于数据存储的各种场合。RAID是一种通过磁盘阵列与数据条块化相结合,以提高数据可用率的结构,通过数据镜像实现数据冗余,可直接从镜像拷贝中读取数据,并将多个数据磁盘通过RAID控制器结合成虚拟的单台大容量硬盘使用,通过同时使用多个磁盘提高数据的传输速率,通过在多个磁盘上同时存储和读取数据提高存储系统的数据吞吐量。同时,RAID还可以通过数据校验提供容错功能,以提高系统的稳定冗余性。此外,根据应用场合的不同,RAID可以划分为多种规范,包括RAID0、RAID1、 RAID2、RAID3、RAID4、RAID5、RAID6和RAID7等,每种规范分别具有各自的强项和弱项。RAID中为避免因磁盘故障而出现不可用状态,一般会添加一块或多块额外的磁盘作为备用盘,当某个数据盘故障后,可以启动RAID数据重建过程,此时备用盘作为重建磁盘加入到RAID中,根据正常磁盘中的数据计算故障数据盘中的数据并写入重建磁盘中,在数据重建之后,重建磁盘顶替故障磁盘的工作,达到与原阵列一样的状态。RAID中的磁盘被划分为多个分块,每个磁盘上对应位置的分块的组合称为条带, 数据重建包括对每个条带的重建。其中,RAID5也被叫做带分布式奇偶位的条带。每个条带上都有相当于一个“块”那么大的地方被用来存放奇偶位。RAID5把奇偶位信息也分布在所有的磁盘上,而并非一个磁盘上,大大减轻了奇偶校验盘的负担。通常我们把一个条带上的奇偶位信息称为校验和,该条带上校验和之外的数据称之为普通数据。在现有实现中,当RAID数据重建时,从该RAID中除重建磁盘外的正常磁盘中读重建所需数据,当所述重建所需数据出现读错误时,有两种处理方法一种处理方法是RAID 数据重建停止,等待用户或应用对无法读出数据的地址块进行写操作,以修复该正常磁盘的数据,以便继续重建,另一种处理方法是,记录该条带的地址,并且记录该条带未完成重建,表明该条带数据不一致,继续重建剩余的条带(在RAID数据重建过程中,是逐个条带进行数据重建的)。上述第一个解决方案在重建时由于一个磁盘的数据无法读取,不能及时重建,只能等到数据恢复后才可以再重建;第二个解决方案是记录整条带数据不一致,重建磁盘在此条带上的数据是无效的,如果该条带其它磁盘数据再出现读错误,不能对读错误数据进行恢复,因此不能提供冗余。

发明内容
有鉴于此,本发明主要目的是提供一种RAID数据重建方法,在能够及时数据重建的情况下,如果该条带其它磁盘数据再出现读错误时,最大可能地提供了冗余。所述RAID 中包括正常磁盘和重建磁盘,所有磁盘被划分成多个分块,每个磁盘上对应位置的分块的组合称为条带,在数据重建时,对于每个条带,该方法包括从正常磁盘中读取重建所需数据,如果成功读出,则用读出的数据计算重建数据, 并将计算结果写入重建磁盘对应位置;如果存在无法读出重建所需数据且是该条带的校验和时,以预设固定值替代重建磁盘对应位置的数据,根据已读出的重建所需数据和用于替代重建磁盘对应位置数据的预设固定值计算该条带新的校验和,并将计算出的新的校验和写入该条带存储原校验和的磁盘的对应位置,记录该条带重建磁盘对应位置的地址及长度;如果存在无法读出重建所需数据且是该条带的普通数据时,当已读出的重建所需数据包含该条带的普通数据与校验和,则以所述预设固定值分别替代无法读出的数据和所述重建磁盘对应位置的数据,根据已读出的普通数据、用于替代无法读出的数据的预设固定值,以及用于替代重建磁盘对应位置的数据的预设固定值,计算该条带新的校验和,并将计算出的新的校验和写入该条带存储原校验和的磁盘的对应位置,记录该条带重建磁盘对应位置的地址及长度;如果存在无法读出重建所需数据且是该条带的普通数据时,当已读出的重建所需数据都是普通数据,则以所述预设固定值替代无法读出的数据,根据已读出的普通数据、用于替代无法读出的数据的预设固定值,计算该条带新的校验和,并将计算出的新的校验和写入重建磁盘的对应位置。其中,如果存在无法读出重建所需数据时,该方法进一步包括建立无法读出数据的记录表;如果存在无法读出重建所需数据且是该条带的校验和时,则将所述记录的该条带重建磁盘对应位置的地址及长度保存在所述记录表中;如果存在无法读出重建所需数据且是该条带的普通数据时,当已读出的重建所需数据包含该条带的普通数据与校验和,则将该条带重建磁盘对应位置的地址及长度存保存在所述记录表中,同时还记录无法读出数据的磁盘对应位置的地址及长度,并保存在所述记录表中;如果存在无法读出重建所需数据且是该条带的普通数据时,当已读出的重建所需数据都是普通数据,则记录无法读出数据的磁盘对应位置的地址及长度,并保存在所述记录表中。所述从正常磁盘中读取重建所需数据,之前该方法进一步包括查询所述记录表, 如果该条带数据所在位置地址有无法读取数据的记录时,不读取有无法读取数据记录的磁盘对应位置数据,用预设固定值替代无法读出的数据来计算该条带新的校验和。所述数据重建完成之后,该方法进一步包括读数据;所述读数据方法为RAID读数据,查询无法读出数据的记录表,如果要读取数据对应位置地址在所述记录表有记录,则返回读数据错误;如果要读取数据对应位置地址在所述记录表无记录,且能直接读出数据,则返回读数据;
如果要读取数据对应位置地址在所述记录表中无记录,但不能读出数据,当要读取的数据所在条带的其它磁盘对应位置地址在所述记录表中有记录时,则以预设固定值替代记录表中无法读出的数据,根据用于替代无法读出的数据,以及已读出的数据,通过校验恢复要读取的数据,返回读数据;如果要读取数据对应位置地址在所述记录表中无记录,但不能读出数据,当要读取的数据所在条带的其它磁盘对应位置地址在所述记录表中都无记录时,则根据已读出的数据,通过校验恢复要要读取的数据,返回读数据。所述数据重建完成之后,该方法进一步包括写数据;所述写数据方法为RAID写数据,查询无法读出数据的记录表,如果要写入数据的地址在所述记录表中无记录时,则直接写入数据;如果要写入数据的地址在所述记录表中有记录,且要写入数据的地址所在条带要整条带数据写入时,直接写入整条带数据;如果要写入数据的地址在所述记录表中有记录,且只写入要写数据时,则以预设固定值替代所述要写入数据的地址存储的数据,重新计算该条带数据校验和,并写入该条带存储原校验和磁盘的对应位置,将要写入的数据写入对应地址。所述直接写入整条带数据,之后进一步包括写入成功后,清除所述记录表中要写入数据对应地址数据无法读出记录;所述将要写入的数据写入对应地址,之后进一步包括写入成功后,清除所述记录表中要写入数据对应地址数据无法读出记录。所述计算方法为异或运算。 所述磁盘地址为磁盘LBA地址或物理地址。本发明的另一个主要目的是提供一种RAID数据重建装置,在能够及时数据重建的情况下,如果该条带其它磁盘数据再出现读错误时,最大可能地提供了冗余。该装置包括读数据模块和数据重建模块;所述读数据模块,与所述数据重建模块相连,对于每个条带用于从正常磁盘中读取重建所需数据,如果成功读出,将成功读出的重建所需数据发送给所述数据重建模块;如果存在无法读出重建所需数据且是该条带的校验和时,以预设固定值替代重建磁盘对应位置的数据,并将已读出的重建所需数据和用于替代重建磁盘对应位置数据的预设固定值发送给所述数据重建模块;记录该条带重建磁盘对应位置的地址及长度;如果存在无法读出重建所需数据且是该条带的普通数据时,当已读出的重建所需数据包含该条带的普通数据与校验和,则将预设固定值分别替代无法读出的数据和所述重建磁盘对应位置的数据,并将已读出的普通数据、用于替代无法读出的数据的预设固定值,以及用于替代重建磁盘对应位置的数据的预设固定值发送给所述数据重建模块;记录该条带重建磁盘对应位置的地址及长度;如果存在无法读出重建所需数据且是该条带的普通数据时,当已读出的重建所需数据都是普通数据,则以所述预设固定值替代无法读出的数据,并将已读出的普通数据和用于替代无法读出的数据的预设固定值发送给所述数据重建模块;所述数据重建模块,收到所述读数据模块发来的重建所需数据,用重建所需数据计算重建数据,并将计算结果写入重建磁盘对应的位置;收到所述读数据模块发来的已读出的重建所需数据和用于替代重建磁盘对应位置数据的预设固定值,将收到的数据做异或运算,计算该条带新的校验和,并将计算出的新的校验和写入该条带存储原校验和的磁盘的对应位置;收到所述读数据模块发来的已读出的普通数据、用于替代无法读出的数据的预设固定值,以及用于替代重建磁盘对应位置的数据的预设固定值,将收到数据做异或运算,计算该条带新的校验和,并将计算出的新的校验和写入该条带存储原校验和的磁盘的对应位置;收到所述读数据模块发来的已读出的普通数据和用于替代无法读出的数据的预设固定值,用于将收到的数据做异或运算,计算该条带新的校验和,并将计算出的新的校验和写入重建磁盘的对应位置。其中,该装置进一步包括存储模块;所述读数据模块,进一步用于无法成功读出数据时建立无法读出数据的记录表, 并发送给所述存储模块;如果存在无法读出重建所需数据且是该条带的校验和时,将记录该条带重建磁盘对应位置的地址及长度发送给所述存储模块;如果存在无法读出重建所需数据且是该条带的普通数据时,当已读出的重建所需数据包含该条带的普通数据与校验和时,记录无法读出数据的磁盘对应位置的地址及长度,将该条带重建磁盘对应位置的地址及长度,及无法读出数据的磁盘对应位置的地址及长度发送给所述存储模块;如果存在无法读出重建所需数据且是该条带的普通数据时,当已读出的重建所需数据都是普通数据, 则记录无法读出数据的磁盘对应位置的地址及长度,并发送给所述存储模块;所述存储模块,与所述读数据模块相连,用于收到所述读数据模块发来的无法读取数据的记录表,将记录表存储,收到所述数据模块的发来的地址及长度,将地址及长度存储在记录表中。该装置进一步包括查询模块;所述查询模块与所述存储模块和所述读数据模块相连,用于从所述存储模块中存储的记录表中查找,如果该条带的数据所在位置地址有有无法读出数据的记录时,向所述数据读取模块发送不对取该对应位置地址的数据,如果重建需要该位置地址对应的数据, 以预设固定值替代;否则不发送消息给所述读数据模块;所述读数据模块,进一步用于收到所述查询模块发来的消息,不再读取对应位置地址的数据,如果需要发送该对应位置的数据,则用预设固定值替代发送给所述数据重建模块。该装置进一步包括数据读模块;所述数据读模块与所述数据重建模块和所述存储模块相连,用于读数据,查询所述存储模块中无法读出数据的记录表,如果要读取数据对应位置地址在所述记录表有记录,则返回读数据错误;如果要读取数据对应位置地址在所述记录表无记录,且能直接读出数据,则返回读数据;如果要读取数据对应位置地址在所述记录表中无记录,但不能读出数据,当要读取的数据所在条带的其它磁盘对应位置地址在所述记录表中有记录时,则以预设固定值替代记录表中无法读出的数据,根据用于替代无法读出的数据,以及已读出的数据,通过校验恢复要读取的数据,返回读数据;如果要读取数据对应位置地址在所述记录表中无记录,但不能读出数据,当要读取的数据所在条带的其它磁盘对应位置地址在所述记录表中都无记录时,则根据已读出的数据,通过校验恢复要要读取的数据,返回读数据。该装置进一步包括数据写模块;
所述数据写模块与所述数据重建模块和所述存储模块相连,用于写数据,查询所述存储模块中无法读出数据的记录表,如果要写入数据的地址在所述记录表中无记录时, 则直接写入数据;如果要写入数据的地址在所述记录表中有记录,且要写入数据的地址所在条带要整条带数据写入时,直接写入整条带数据;如果要写入数据的地址在所述记录表中有记录,且只写入要写数据时,则以预设固定值替代所述要写入数据的地址存储的数据, 重新计算该条带数据校验和,并写入该条带存储原校验和磁盘的对应位置,将要写入的数据写入对应地址。综上所述,本发明在RAID数据重建,如果重建所需数据均能读出时,直接计算重建磁盘对应位置数据;如果重建所需数据中的普通数据无法读出时,以预设固定值分别替代无法读出的数据和重建磁盘对应位置的数据,计算条带新的校验和;如果重建所需数据中的校验和无法读出时,用预设固定值替代重建磁盘对应位置的数据,计算新的校验和;当重建磁盘是存放该条带校验和的磁盘或数据能够直接计算时,将新的校验和或直接计算的数据写入重建磁盘;否则记录重建磁盘对应位置地址无法读出数据。通过上述重建磁盘的方法,本发明在能够及时数据重建的情况下,如果该条带其它磁盘数据再出现无法读出时, 最大可能地提供了冗余。


图1为本发明RAID数据重建方法流程图;图2为本发明读数据过程流程图;图3为本发明写数据过程流程4为本发明RAID数据重建装置结构示意图。
具体实施例方式为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明所述方案作进一步地详细说明。在本发明中,预设一个固定值,当在RAID数据重建,从正常磁盘中读取普通数据无法读出时,用预设固定值替代无法读出的数据,计算所在条带新的校验和,并记录无法读出数据对应位置地址及长度。RAID中包括正常磁盘和重建磁盘,所有磁盘被划分成多个分块,每个磁盘上对应位置的分块的组合称为条带,在数据重建时,对于每个条带,数据的重建方法为从正常磁盘中读取重建所需数据,如果成功读出,则用读出的数据计算重建数据, 并将计算结果写入重建磁盘对应位置;如果存在无法读出重建所需数据且是该条带的校验和时,以预设固定值替代重建磁盘对应位置的数据,根据已读出的重建所需数据和用于替代重建磁盘对应位置数据的预设固定值计算该条带新的校验和,并将计算出的新的校验和写入该条带存储原校验和的磁盘的对应位置,记录该条带重建磁盘对应位置的地址及长度;如果存在无法读出重建所需数据且是该条带的普通数据时,当已读出的重建所需数据包含该条带的普通数据与校验和,则以所述预设固定值分别替代无法读出的数据和所述重建磁盘对应位置的数据,根据已读出的普通数据、用于替代无法读出的数据的预设固定值,以及用于替代重建磁盘对应位置的数据的预设固定值,计算该条带新的校验和,并将计算出的新的校验和写入该条带存储原校验和的磁盘的对应位置,记录该条带重建磁盘对应位置的地址及长度;如果存在无法读出重建所需数据且是该条带的普通数据时,当已读出的重建所需数据都是普通数据,则以所述预设固定值替代无法读出的数据,根据已读出的普通数据、用于替代无法读出的数据的预设固定值,计算该条带新的校验和,并将计算出的新的校验和写入重建磁盘的对应位置。参见图1,图1为本发明RAID数据重建流程图。其具体步骤为步骤101,RAID数据重建开始。步骤102,对于某个条带,RAID处理器从正常磁盘读取重建所需数据。在RAID的使用过程中,将所有数据磁盘分成多个大小相等、地址相同的分块,并将不同物理磁盘上的分块组织成条带。其中,分块为地址分配的最小粒度,也称为条带深度;条带为RAID中的不同物理磁盘上的位置相关的分块的集合,均勻地分布在各个物理磁盘上。在数据重建过程中,是一个条带一个条带的数据重建。此步骤中的读取重建所需数据是一个条带的数据。由于在读取数据时的最小单位并非上述所分块的大小,如最小512bit, 无法读出的数据可能是一个512bit,也可能是N个512bit,因此在描述无法读出的数据时不说无法读出的数据块,而称无法读出的数据。为了后续更精确的记录无法读出数据的地址及长度。步骤103,判断重建所需数据是否存在无法读出,如果是,执行步骤104 ;否则,执行步骤105。步骤104,判断无法读出的数据是否为该条带校验和,如果是,执行步骤106 ;否则,执行步骤107。RAID中,规范5以上的RAID,存储数据时均在阵列中一个磁盘存储条带数据的校验和,其它磁盘存储条带的普通数据。以RAID5为例,也被叫做带分布式奇偶位的条带。每个条带上都有相当于一个“块”那么大的地方被用来存放奇偶位。RAID5把奇偶位信息也分布在所有的磁盘上,而并非一个磁盘上,大大减轻了奇偶校验盘的负担。在本发明中,把奇偶位信息称为校验和,一个条带中的其它数据称为普通数据。步骤105,RAID处理器用读出的数据计算重建数据,并将计算出的数据写入重建磁盘对应位置。执行步骤110。步骤105的计算过程同现有技术,在本发明中不再赘述。步骤106,以预设固定值替代重建磁盘对应位置的数据,根据已读出的重建所需数据,以及用于替代重建磁盘对应位置数据的预设固定值计算该条带的校验和,并将计算出的新的校验和写入该条带存储原校验和的磁盘的对应位置。执行步骤110。当条带中在某个磁盘上的数据无法读取时,用预设固定值替代,该预设固定值可以为0,也可以为其他任意常数,一般设为0,计算要相对简单。无论该预设固定值是什么, 在替代无法无处数据时,数据长度应该同无法读出数据的长度,长度不够时,用0补齐。由于读数据最小单位是512bit,因此一般数据都不会超过该存储长度。在步骤106中,计算出的新的校验和相对现在的数据是正确的校验和,当再有磁盘发生故障时,新的校验和可以为下次重建或者数据读写时提供冗余。
在RAID数据重建过程中,一旦有数据读不出来,需要查看是否建立无法读出数据的记录表,如果已建立,将无法读出的数据及长度记录在该记录表中,如果记录表未建立, 此时建立无法读出数据的记录表。由于重新计算出的校验和相对现在的数据是正确的校验和,因此不记录该校验磁盘对应位置的地址。将重建磁盘该条带对应位置的地址记录为无法读出数据,并记录这段无法读出数据的长度。将无法读出数据对应的地址及长度记录在重建无法读出数据的记录表中。记录的地址为磁盘的对应位置的物理地址或者LBA地址。步骤107,判断已读出的数据是否包含该条带的校验和,如果是,执行步骤108 ;否则,执行步骤109。步骤108,以预设固定值分别替代无法读出的数据和重建磁盘对应位置的数据,根据已读出的普通数据、用于分别替代无法读出的数据、以及重建磁盘对应位置的数据的预设固定值,计算该条带新的校验和,将计算出的新的校验和写入该条带存储原校验和的磁盘的对应位置。执行步骤110。在重建无法读数据的记录表中记录无法读出数据的正常磁盘对应位置地址及长度,以及重建磁盘对应位置地址及长度。步骤109,用预设固定值替代无法读出的数据,根据已读出的普通数据、以及用于替代无法读出的数据的预设固定值,计算该条带新的校验和,并将计算出的新的校验和写入重建磁盘对应位置。在步骤109中,在重建无法读数据的记录表中记录无法读出数据的正常磁盘对应位置地址及长度。步骤110,写入成功后,向RAID处理器返回写入成功消息。步骤111,RAID处理器收到写入数据成功消息后,判断需要重建的所有条带是否都重建完成,如果是,执行步骤112,否则,执行步骤102。同现有技术一致,不再赘述。步骤112,RAID数据重建结束。当RAID处理器已建立了无法读出数据的记录表时,数据重建,从正常磁盘中读取重建所需数据之前需进行如下操作查询无法读出数据的记录表,如果要读取数据的条带所对应的磁盘地址中有有无法读出的记录时,不再读取有记录的地址对应位置数据,在后续计算该条带新的校验和时,用预设固定值替代记录表中有记录的数据。否则,直接执行步骤 102。下面详细描述在上述RAID阵列重建完成后的用户数据读写过程。首先详细描述磁盘读数据的过程。参见图2,图2为本发明读数据过程流程图。具体步骤为步骤201,RAID读数据,查询无法读出数据的记录表。步骤202,判断要读取数据对应位置地址在无法读出数据的记录表中是否有记录, 如果是,执行步骤203 ;否则,执行步骤204。步骤203,返回读数据错误。本流程结束。步骤204,直接读取要读取的数据,判断要读取的数据是否可以读出,如果是,执行步骤205 ;否则,执行步骤206。步骤205,返回读数据。本流程结束。
步骤206,查询要读取的数据所在条带的其它磁盘对应位置地址是否在无法读取数据的记录表中有记录,如果是,执行步骤207 ;否则,执行步骤208。步骤207,以预设固定值替代记录表中无法读出的数据,根据用于替代无法读出的数据,以及已读出的数据,通过校验恢复要读取的数据,返回读数据。本流程结束。步骤208,根据已读出的数据,通过校验恢复要要读取的数据,返回读数据。接下来详细描述磁盘写数据的过程。参见图3,图3为本发明写数据过程流程图。 具体步骤为步骤301,RAID写数据,查询无法读出数据的记录表。步骤302,判断要写入数据的地址在记录表中是否有记录,如果是,执行步骤304 ; 否则,执行步骤303。步骤303,直接写入数据。本流程结束。写入数据后,需重新计算该条带的校验和,并重新写入该条带校验和,该过程同现有技术一致,不再赘述。步骤304,判断要写入数据的地址所在条带是否整条带数据写入,如果是,执行步骤305,否则,执行步骤306。步骤305,直接写入整条带数据,写入成功后,清除记录表中该地址数据无法读出记录。本流程结束。本步骤中,记录表中该地址数据无法读出记录被清除,表明该条带所有数据恢复正常。步骤306,以预设固定值替代无法读出的数据,重新计算该条带数据校验和,并写入该条带存储原校验和磁盘的对应位置,将要写入的数据写入对应磁盘对应位置,写入成功后,清除记录表中该地址数据无法读出记录。本步骤中重新计算该条带数据校验和的方法为替代无法读出数据的预设固定值,同要写入的数据,以及该条带的原校验和做异或运算,得出的数据作为新的校验和。在本发明中,所提到的计算均为异或运算。记录表中该地址数据无法读出记录被清除,表明该条带恢复正常。基于与上述RAID数据重建方法同样的发明构思,本发明还提出一种RAID数据重建装置。参见图4,图4为RAID数据重建装置结构示意图。该装置在数据重建时,对于每个条带的重建方式一致,该装置包括读数据模块401和数据重建模块402。读数据模块401,与数据重建模块402相连,对于每个条带用于从正常磁盘中读取重建所需数据,如果成功读出,将成功读出的重建所需数据发送给数据重建模块402 ;如果存在无法读出重建所需数据且是该条带的校验和时,以预设固定值替代重建磁盘对应位置的数据,并将已读出的重建所需数据和用于替代重建磁盘对应位置数据的预设固定值发送给数据重建模块402 ;记录该条带重建磁盘对应位置的地址及长度;如果存在无法读出重建所需数据且是该条带的普通数据时,当已读出的重建所需数据包含该条带的普通数据与校验和,则将预设固定值分别替代无法读出的数据和所述重建磁盘对应位置的数据,并将已读出的普通数据、用于替代无法读出的数据的预设固定值,以及用于替代重建磁盘对应位置的数据的预设固定值发送给数据重建模块402 ;记录该条带重建磁盘对应位置的地址及长度;如果存在无法读出重建所需数据且是该条带的普通数据时,当已读出的重建所需数据都是普通数据,则以所述预设固定值替代无法读出的数据,并将已读出的普通数据和用于替代无法读出的数据的预设固定值发送给数据重建模块402。数据重建模块402,收到读数据模块401发来的重建所需数据,用重建所需数据计算重建数据,并将计算结果写入重建磁盘对应的位置;收到读数据模块401发来的已读出的重建所需数据和用于替代重建磁盘对应位置数据的预设固定值,将收到的数据做异或运算,计算该条带新的校验和,并将计算出的新的校验和写入该条带存储原校验和的磁盘的对应位置;收到读数据模块401发来的已读出的普通数据、用于替代无法读出的数据的预设固定值,以及用于替代重建磁盘对应位置的数据的预设固定值,将收到数据做异或运算, 计算该条带新的校验和,并将计算出的新的校验和写入该条带存储原校验和的磁盘的对应位置;收到读数据模块401发来的已读出的普通数据和用于替代无法读出的数据的预设固定值,用于将收到的数据做异或运算,计算该条带新的校验和,并将计算出的新的校验和写入重建磁盘的对应位置。该装置进一步包括存储模块403,与读数据模块401相连。读数据模块401,进一步用于无法成功读出数据时建立无法读出数据的记录表, 并发送给存储模块403 ;如果存在无法读出重建所需数据且是该条带的校验和时,将记录该条带重建磁盘对应位置的地址及长度发送给存储模块403 ;如果存在无法读出重建所需数据且是该条带的普通数据时,当已读出的重建所需数据包含该条带的普通数据与校验和时,记录无法读出数据的磁盘对应位置的地址及长度,将该条带重建磁盘对应位置的地址及长度,及无法读出数据的磁盘对应位置的地址及长度发送给存储模块403 ;如果存在无法读出重建所需数据且是该条带的普通数据时,当已读出的重建所需数据都是普通数据, 则记录无法读出数据的磁盘对应位置的地址及长度,并发送给存储模块403。存储模块403,收到读数据模块401发来的无法读取数据的记录表,将记录表存储,收到数据模块的401发来的地址及长度,将地址及长度存储在记录表中。该装置进一步包括查询模块404,与存储模块403和读数据模块401相连,用于从存储模块403中存储的记录表中查找,如果该条带的数据所在位置地址有有无法读出数据的记录时,向数据读取模块401发送不对取该对应位置地址的数据,如果重建需要该位置地址对应的数据,以预设固定值替代;否则不发送消息给读数据模块401。读数据模块401,进一步用于收到查询模块404发来的消息,不再读取对应位置地址的数据,如果需要发送该对应位置的数据,则用预设固定值替代发送给数据重建模块 402。该装置进一步包括数据读模块405,与数据重建模块402和存储模块403相连, 用于读数据,查询存储模块403中无法读出数据的记录表,如果要读取数据对应位置地址在所述记录表有记录,则返回读数据错误;如果要读取数据对应位置地址在所述记录表无记录,且能直接读出数据,则返回读数据;如果要读取数据对应位置地址在所述记录表中无记录,但不能读出数据,当要读取的数据所在条带的其它磁盘对应位置地址在所述记录表中有记录时,则以预设固定值替代记录表中无法读出的数据,根据用于替代无法读出的数据,以及已读出的数据,通过校验恢复要读取的数据,返回读数据;如果要读取数据对应位置地址在所述记录表中无记录,但不能读出数据,当要读取的数据所在条带的其它磁盘对应位置地址在所述记录表中都无记录时,则根据已读出的数据,通过校验恢复要要读取的数据,返回读数据。该装置进一步包括数据写模块406,与数据重建模块402和存储模块403相连, 用于写数据,查询存储模块403中无法读出数据的记录表,如果要写入数据的地址在所述记录表中无记录时,则直接写入数据;如果要写入数据的地址在所述记录表中有记录,且要写入数据的地址所在条带要整条带数据写入时,直接写入整条带数据;如果要写入数据的地址在所述记录表中有记录,且只写入要写数据时,则以预设固定值替代所述要写入数据的地址存储的数据,重新计算该条带数据校验和,并写入该条带存储原校验和磁盘的对应位置,将要写入的数据写入对应地址。综上所述,本发明在RAID数据重建,读数据存在未读出时,用预设固定值替代无法读出的数据计算新的校验和,并记录将数据的磁盘未读出数据对应位置地址及长度记录在无法读出数据的记录表中大小。因此,本发明所提供的技术方案不仅在重建读数据出错时可以继续重建,且重建后该条带还是数据冗余的。如果再有其它磁盘出现故障时,上次重建数据可以提供冗余,来重建新的故障磁盘。数据重建过程中无法读出数据的记录表中的记录,只要后续写该数据成功,就可将无法读出记录清除,该条带可恢复成正常的一致性冗余。本发明的实现方案对RAID的读写和重建流程改动较少,但是提高容错和可靠性效果明
Mo以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
权利要求
1.一种独立磁盘冗余阵列RAID数据重建方法,所述RAID中包括正常磁盘和重建磁盘, 所有磁盘被划分成多个分块,每个磁盘上对应位置的分块的组合称为条带,其特征在于,在数据重建时,对于每个条带,该方法包括从正常磁盘中读取重建所需数据,如果成功读出,则用读出的数据计算重建数据,并将计算结果写入重建磁盘对应位置;如果存在无法读出重建所需数据且是该条带的校验和时,以预设固定值替代重建磁盘对应位置的数据,根据已读出的重建所需数据和用于替代重建磁盘对应位置数据的预设固定值计算该条带新的校验和,并将计算出的新的校验和写入该条带存储原校验和的磁盘的对应位置,记录该条带重建磁盘对应位置的地址及长度;如果存在无法读出重建所需数据且是该条带的普通数据时,当已读出的重建所需数据包含该条带的普通数据与校验和,则以所述预设固定值分别替代无法读出的数据和所述重建磁盘对应位置的数据,根据已读出的普通数据、用于替代无法读出的数据的预设固定值, 以及用于替代重建磁盘对应位置的数据的预设固定值,计算该条带新的校验和,并将计算出的新的校验和写入该条带存储原校验和的磁盘的对应位置,记录该条带重建磁盘对应位置的地址及长度;如果存在无法读出重建所需数据且是该条带的普通数据时,当已读出的重建所需数据都是普通数据,则以所述预设固定值替代无法读出的数据,根据已读出的普通数据、用于替代无法读出的数据的预设固定值,计算该条带新的校验和,并将计算出的新的校验和写入重建磁盘的对应位置。
2.根据权利要求1所述的方法,其特征在于,如果存在无法读出重建所需数据时,该方法进一步包括建立无法读出数据的记录表;如果存在无法读出重建所需数据且是该条带的校验和时,则将所述记录的该条带重建磁盘对应位置的地址及长度保存在所述记录表中;如果存在无法读出重建所需数据且是该条带的普通数据时,当已读出的重建所需数据包含该条带的普通数据与校验和,则将该条带重建磁盘对应位置的地址及长度存保存在所述记录表中,同时还记录无法读出数据的磁盘对应位置的地址及长度,并保存在所述记录表中;如果存在无法读出重建所需数据且是该条带的普通数据时,当已读出的重建所需数据都是普通数据,则记录无法读出数据的磁盘对应位置的地址及长度,并保存在所述记录表中。
3.根据权利要求2所述的方法,其特征在于,所述从正常磁盘中读取重建所需数据,之前该方法进一步包括查询所述记录表,如果该条带数据所在位置地址有无法读取数据的记录时,不读取有无法读取数据记录的磁盘对应位置数据,用预设固定值替代无法读出的数据来计算该条带新的校验和。
4.根据权利要求2所述的方法,其特征在于,所述数据重建完成之后,该方法进一步包括读数据;所述读数据方法为RAID读数据,查询无法读出数据的记录表,如果要读取数据对应位置地址在所述记录表有记录,则返回读数据错误;如果要读取数据对应位置地址在所述记录表无记录,且能直接读出数据,则返回读数据;如果要读取数据对应位置地址在所述记录表中无记录,但不能读出数据,当要读取的数据所在条带的其它磁盘对应位置地址在所述记录表中有记录时,则以预设固定值替代记录表中无法读出的数据,根据用于替代无法读出的数据,以及已读出的数据,通过校验恢复要读取的数据,返回读数据;如果要读取数据对应位置地址在所述记录表中无记录,但不能读出数据,当要读取的数据所在条带的其它磁盘对应位置地址在所述记录表中都无记录时,则根据已读出的数据,通过校验恢复要要读取的数据,返回读数据。
5.根据权利要求2所述的方法,其特征在于,所述数据重建完成之后,该方法进一步包括写数据;所述写数据方法为RAID写数据,查询无法读出数据的记录表,如果要写入数据的地址在所述记录表中无记录时,则直接写入数据;如果要写入数据的地址在所述记录表中有记录,且要写入数据的地址所在条带要整条带数据写入时,直接写入整条带数据;如果要写入数据的地址在所述记录表中有记录,且只写入要写数据时,则以预设固定值替代所述要写入数据的地址存储的数据,重新计算该条带数据校验和,并写入该条带存储原校验和磁盘的对应位置,将要写入的数据写入对应地址。
6.根据权利要求5所述的方法,其特征在于,所述直接写入整条带数据,之后进一步包括写入成功后,清除所述记录表中要写入数据对应地址数据无法读出记录;所述将要写入的数据写入对应地址,之后进一步包括写入成功后,清除所述记录表中要写入数据对应地址数据无法读出记录。
7.根据权利要求1-6任意一项所述的方法,其特征在于,所述计算方法为异或运算。
8.根据权利要求1-6任意一项所述的方法,其特征在于,所述磁盘地址为磁盘LBA地址或物理地址。
9.一种独立磁盘冗余阵列RAID数据重建装置,其特征在于,该装置包括读数据模块和数据重建模块;所述读数据模块,与所述数据重建模块相连,对于每个条带用于从正常磁盘中读取重建所需数据,如果成功读出,将成功读出的重建所需数据发送给所述数据重建模块;如果存在无法读出重建所需数据且是该条带的校验和时,以预设固定值替代重建磁盘对应位置的数据,并将已读出的重建所需数据和用于替代重建磁盘对应位置数据的预设固定值发送给所述数据重建模块;记录该条带重建磁盘对应位置的地址及长度;如果存在无法读出重建所需数据且是该条带的普通数据时,当已读出的重建所需数据包含该条带的普通数据与校验和,则将预设固定值分别替代无法读出的数据和所述重建磁盘对应位置的数据,并将已读出的普通数据、用于替代无法读出的数据的预设固定值,以及用于替代重建磁盘对应位置的数据的预设固定值发送给所述数据重建模块;记录该条带重建磁盘对应位置的地址及长度;如果存在无法读出重建所需数据且是该条带的普通数据时,当已读出的重建所需数据都是普通数据,则以所述预设固定值替代无法读出的数据,并将已读出的普通数据和用于替代无法读出的数据的预设固定值发送给所述数据重建模块;所述数据重建模块,收到所述读数据模块发来的重建所需数据,用重建所需数据计算重建数据,并将计算结果写入重建磁盘对应的位置;收到所述读数据模块发来的已读出的重建所需数据和用于替代重建磁盘对应位置数据的预设固定值,将收到的数据做异或运算,计算该条带新的校验和,并将计算出的新的校验和写入该条带存储原校验和的磁盘的对应位置;收到所述读数据模块发来的已读出的普通数据、用于替代无法读出的数据的预设固定值,以及用于替代重建磁盘对应位置的数据的预设固定值,将收到数据做异或运算, 计算该条带新的校验和,并将计算出的新的校验和写入该条带存储原校验和的磁盘的对应位置;收到所述读数据模块发来的已读出的普通数据和用于替代无法读出的数据的预设固定值,用于将收到的数据做异或运算,计算该条带新的校验和,并将计算出的新的校验和写入重建磁盘的对应位置。
10.根据权利要求9所述的装置,其特征在于,该装置进一步包括存储模块;所述读数据模块,进一步用于无法成功读出数据时建立无法读出数据的记录表,并发送给所述存储模块;如果存在无法读出重建所需数据且是该条带的校验和时,将记录该条带重建磁盘对应位置的地址及长度发送给所述存储模块;如果存在无法读出重建所需数据且是该条带的普通数据时,当已读出的重建所需数据包含该条带的普通数据与校验和时, 记录无法读出数据的磁盘对应位置的地址及长度,将该条带重建磁盘对应位置的地址及长度,及无法读出数据的磁盘对应位置的地址及长度发送给所述存储模块;如果存在无法读出重建所需数据且是该条带的普通数据时,当已读出的重建所需数据都是普通数据,则记录无法读出数据的磁盘对应位置的地址及长度,并发送给所述存储模块;所述存储模块,与所述读数据模块相连,用于收到所述读数据模块发来的无法读取数据的记录表,将记录表存储,收到所述数据模块的发来的地址及长度,将地址及长度存储在记录表中。
11.根据权利要求10所述的装置,其特征在于,该装置进一步包括查询模块;所述查询模块与所述存储模块和所述读数据模块相连,用于从所述存储模块中存储的记录表中查找,如果该条带的数据所在位置地址有有无法读出数据的记录时,向所述数据读取模块发送不对取该对应位置地址的数据,如果重建需要该位置地址对应的数据,以预设固定值替代;否则不发送消息给所述读数据模块;所述读数据模块,进一步用于收到所述查询模块发来的消息,不再读取对应位置地址的数据,如果需要发送该对应位置的数据,则用预设固定值替代发送给所述数据重建模块。
12.根据权利要求11所述的装置,其特征在于,该装置进一步包括数据读模块;所述数据读模块与所述数据重建模块和所述存储模块相连,用于读数据,查询所述存储模块中无法读出数据的记录表,如果要读取数据对应位置地址在所述记录表有记录,则返回读数据错误;如果要读取数据对应位置地址在所述记录表无记录,且能直接读出数据, 则返回读数据;如果要读取数据对应位置地址在所述记录表中无记录,但不能读出数据,当要读取的数据所在条带的其它磁盘对应位置地址在所述记录表中有记录时,则以预设固定值替代记录表中无法读出的数据,根据用于替代无法读出的数据,以及已读出的数据,通过校验恢复要读取的数据,返回读数据;如果要读取数据对应位置地址在所述记录表中无记录,但不能读出数据,当要读取的数据所在条带的其它磁盘对应位置地址在所述记录表中都无记录时,则根据已读出的数据,通过校验恢复要要读取的数据,返回读数据。
13.根据权利要求12所述的装置,其特征在于,该装置进一步包括数据写模块; 所述数据写模块与所述数据重建模块和所述存储模块相连,用于写数据,查询所述存储模块中无法读出数据的记录表,如果要写入数据的地址在所述记录表中无记录时,则直接写入数据;如果要写入数据的地址在所述记录表中有记录,且要写入数据的地址所在条带要整条带数据写入时,直接写入整条带数据;如果要写入数据的地址在所述记录表中有记录,且只写入要写数据时,则以预设固定值替代所述要写入数据的地址存储的数据,重新计算该条带数据校验和,并写入该条带存储原校验和磁盘的对应位置,将要写入的数据写入对应地址。
全文摘要
本发明提供了一种独立磁盘冗余阵列RAID数据重建方法,该方法包括从正常磁盘中读取重建所需数据,如果重建所需数据中的普通数据存在无法读出时,以预设固定值分别替代无法读出的数据和重建磁盘对应位置的数据,计算条带新的校验和;如果重建所需数据中的校验和无法读出时,用预设固定值替代重建磁盘对应位置的数据,计算新的校验和;重建磁盘未能恢复的数据,记录重建磁盘对应位置地址无法读出数据。基于上述同样的发明构思,本发明还提出一种装置,在能够及时数据重建的情况下,如果该条带其它磁盘数据再出现无法读出时,最大可能地提供了冗余。
文档编号G06F11/10GK102207895SQ201110141358
公开日2011年10月5日 申请日期2011年5月27日 优先权日2011年5月27日
发明者胡荣国 申请人:杭州华三通信技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1