一种去重方法装置与系统的制作方法

文档序号:6532524阅读:173来源:国知局
一种去重方法装置与系统的制作方法
【专利摘要】本发明提供了一种数据处理技术,用于数据去重,对多个数据块进行指纹检测,当多个数据块的指纹相同时,进一步检测数据块所在分条组的稳定性,保留稳定性高的数据块,或者当数据块所在分条组可靠性不高时,对数据块所在分条组进行数据恢复。本发明可以提高数据块所在分条组的可靠性,提升数据安全。
【专利说明】一种去重方法装置与系统

【技术领域】
[0001]本发明涉及存储领域,特别涉及一种去重技术。

【背景技术】
[0002]在存储领域中,为了节约存储空间,去重(De-duplicate)是一种经常被使用到的技术,其做法是如果需要对多份相同的数据进行存储时,只存储其中的一份,其余与这份数据重复的数据不再存储。也就是说重复的数据被删除,因此这种技术也称为重复数据删除。
[0003]在粒度的选择上,可以把文件拆分成数据块,以数据块作为去重的基本单位。在以数据块作为去重的基本单位时,可以为每个数据块赋予指纹,指纹和数据块的内容强相关。当两个数据块的指纹相同时,我们可以得出这两个数据块的内容相同的结论,通过执行去重操作,只存储其中一个数据块到存储系统中,另外一个数据块不存储。
[0004]然而,去重技术也带来了数据安全性降低的问题,如果这仅有的一份数据因为存储系统故障而损坏,可能造成数据的安全性大大降低或者数据永久性丢失。


【发明内容】

[0005]本发明可以提高数据安全性。
[0006]第一方面,本发明提供一种数据处理方法,用于控制器中,该方法包括:当有多个数据块有相同的指纹时,根据所述指纹查询所述数据块的地址,根据所述数据块地址查找所述数据块所占用的分条组;校验所述数据块的所述分条组的独立廉价磁盘冗余阵列RAID分条状态,根据校验结果保存分条一致的分条组中的数据块;所述根据校验结果保存分条一致的分条组中的数据块,包括下述至少一种:如果存在分条一致的所述分条组,并且存在非分条一致的所述分条组,则保留分条一致的所述分条组中的数据块,删除其余所述分条组中的数据块;如果不存在分条一致的所述分条组,并且存在降级的分条组,则通过RAID算法修复将降级的分条组修复为分条一致的分条组,所述分条一致的分条组中存储有所述数据块,删除其余所述分条组中的所述数据块。
[0007]第二方面,本发明提供一种数据块处理装置,该装置包括:指纹比对模块,用于对存储设备中数据块的指纹进行比对;地址查找模块,当所述存储设备中有多个数据块有相同的指纹时,根据所述指纹查询所述多个数据块的地址,根据所述多个数据块地址查找所述多个数据块所占用的分条组;一致性校验模块,用于校验所述多个数据块的所述分条组的独立廉价磁盘冗余阵列RAID分条状态,根据校验结果保存分条一致的分条组中的数据块;所述根据校验结果保存分条一致的分条组中的数据块,包括下述至少一种:如果存在分条一致的所述分条组,并且存在非分条一致的所述分条组,则保留分条一致的所述分条组中的数据块,删除其余所述分条组中的数据块;如果不存在分条一致的所述分条组,并且存在降级的分条组,则通过RAID算法修复将降级的分条组修复为分条一致的分条组,所述分条一致的分条组中存储有所述数据块,删除其余所述分条组中的所述数据块。
[0008]第三方面,本发明提供一种数据块处理方法,用于控制器中,该方法包括:查询存储设备中数据块的指纹库,当存储设备中存在和所述待存储数据块拥有相同指纹的已存储数据块时,检测所述已存储数据块所在分条组的独立廉价磁盘冗余阵列RAID分条状态;根据检测进行数据块存储,包括:如果所述分条组的分条状态是分条一致,则不存储所述待存储数据块;如果所述分条组的分条状态是分条降级,则:存储所述待存储数据块,删除所述已存储数据块;或者,存储根据RAID算法由所述降级分条组对所述已存储数据块进行修复;或者,如果所述分条组的分条状态是分条不一致,则:存储所述待存储数据块,删除所述已存储数据块;或者,如果数据分条单元未发生数据错误,则根据RAID算法对所述已存储数据块进行修复。
[0009]第四方面,本发明提供一种数据块处理装置,该装置包括:查询模块61,用于查询存储设备中数据块的指纹库;一致性校验模块62,用于当存储设备中存在和所述待存储数据块拥有相同指纹的已存储数据块时,检测所述已存储数据块所在分条组的独立廉价磁盘冗余阵列RAID分条状态;根据检测进行数据块存储,包括:如果所述分条组的分条状态是分条一致,则不存储所述待存储数据块;如果所述分条组的分条状态是分条降级,则:存储所述待存储数据块,删除所述已存储数据块;或者,存储根据RAID算法由所述降级分条组对所述已存储数据块进行修复;或者,如果所述分条组的分条状态是分条不一致,则:存储所述待存储数据块,删除所述已存储数据块;或者,如果数据分条单元未发生数据错误,则根据RAID算法对所述已存储数据块进行修复。
[0010]本发明方案,可以在数据块去重时,同时对数据块所在分条组进行稳定性检测,当稳定性不足时通过重新存储或者修复的方式,提高数据块所在分条组稳定性,从而提高了数据安全性。

【专利附图】

【附图说明】
[0011]为了更清楚地说明本发明实施例技术方案,下面将对实施例所需要使用的附图作简单地介绍,下面描述中的附图仅仅是本发明的一些实施例,还可以根据这些附图获得其他的附图。
[0012]图1是本发明应用场景拓扑图例;
[0013]图2是本发明实施例一种数据块处理方法流程图;
[0014]图3是本发明实施例一种数据块处理方法流程图;
[0015]图4是一种数据块处理装置实施例示意图;
[0016]图5是一种数据块处理装置实施例示意图。

【具体实施方式】
[0017]下面将结合本发明实施例中的附图,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例所获得的所有其他实施例,都属于本发明保护的范围。
[0018]存储系统通常由控制器和存储设备共同组成。控制器相当于一台电
[0019]脑,包括处理器和内存,可以对存储设备进行管理,并提供接口给主机及存储设备。存储设备提供物理上的存储空间,存储设备例如可以由固态硬盘(Solid StateDisc, SSD),串行连接小型计算机系统接口 SCSI (Serial Attached SCSI,SAS)盘组成。写数据时,主机的写数据请求先发往控制器,然后由控制器为这个写请求分配存储设备中的存储空间,并将写请求中携带的待写数据发往存储设备进行存储。读数据时,数据从存储设备读入控制器,然后由控制器发给主机。控制器和存储设备可以是物理上独立的设备,也可以把存储设备集成在控制器中。当把存储设备集成在控制器中,控制器与存储设备之间的数据交互成为控制器内部的数据交互,此时也可以把控制器称为存储服务器。
[0020]在另外一种拓扑结构中,控制器提供管理不提供数据的传递,存储设备与主机之间数据交换可以不经过控制器,也可以适用本发明实施例提供的计算方案。
[0021]去重技术可以分为在线(On-line)和离线(Off-line)两种方式。在线方式对存储设备的空间利用率更高;离线方式数据写入速度更快。
[0022]在线方式,控制器收到一个写请求,写请求携带有新数据块。在新数据块被写入存储设备前,控制器检查存储设备中是否已经存在相同的数据块,如果不存在,则存储新数据块到存储设备;如果存在,则不再存储这个新数据块,而建立拥有这个新数据块的LUN和那个已经存在的数据块之间的索引关系。这个索引关系例如可以是指针,当后续需要读取这个新数据块时,可以通过指针读取那个已经存在的数据块。
[0023]离线方式,在控制器收到一个写请求后,不论存储设备是否已经存储有相同的数据块,先把数据块存储到存储设备中。然后周期性的执行去重操作,或者待存储设备空闲时执行去重操作。去重操作过程中,重复的数据块仅保留一份,释放重复数据块占用的存储空间。把指向这些数据块的LUN都指向保留的那一个数据块。
[0024]由于重复数据仅保留一份,这仅有的一份数据的安全性就显得尤为重要。存储系统可以通过独立廉价磁盘冗余阵列(Redundant Arrays of Independent Disks, RAID)来提高其数据安全性。然而RAID能提供的保障也是有限的,当某个RAID的分条可靠性降低时,会导致其中存储的数据安全性降低。
[0025]在RAID技术中,分条(Stripe)由若干个分条单元(Stripe Unit, SU)组成,组成同一个分条的SU可以属于不同的物理存储器,分条又称为条带。属于同一个分条的SU,可以拥有相同大小的存储空间。为了管理方便,属于同一个分条的SU,还可以有相同的偏移量,也就是说它们位于不同存储器的相同位置。例如对于RAID5或者RAID6,SU可以分为数据SU和校验SU,数据SU用于存储业务数据,校验SU用于存储业务数据的校验数据,校验SU也可以称为冗余SU。整数个分条可以组成逻辑单元(Logic Unit,LU),LU可以作为面向主机的逻辑存储单位,在惯例上,逻辑单元也称为逻辑单元号(Logic Unit Number, LUN),本发明沿用这种惯例。
[0026]如图1所示,是本发明应用场景拓扑图示例。控制器I和存储设备2连接组成存储系统。控制器I由处理11和缓存12组成,缓存12中存储有计算机指令,处理器11运行计算机指令,对存储设备执行相应的操作即可完成本发明。存储设备2由多个存储器21组成,每个存储器21提供I个分条单元SU组成一个分条211。数据存储时,主机把数据发给通过控制器1,控制器把数据存储到存储设备的分条中。一个数据块占用整数个分条,控制器I可以以数据块为粒度对数据进行去重。
[0027]SU中的数据发生错误或者丢失称为SU故障。在一个分条中,当其中一个SU发生故障时,通过RAID算法,可以用未发生故障的SU中存储的数据对故障SU中的数据进行恢复,这个恢复数据的过程,称为分条的修复。有的RAID算法可以对单个SU故障进行数据恢复,有的RAID算法可以对更多数量的SU故障进行数据恢复。能够通过RAID算法恢复出的故障SU的数量,称为这个分条允许故障的SU数量,例如RAID5允许一个SU故障,而RAID6允许2个SU故障。
[0028]分条的状态包括:分条一致;分条降级;分条不一致;分条失效。处于这四种状态的分条的可靠性依次降低。
[0029]分条一致是正常状态,分条中的所有SU中的数据都正常,也就是说每个SU都数据都可以读出来,而且通过数据SU的数据计算得到的校验数据和校验SU中的数据相同。分条不一致,是指分条的每个SU中的数据都可以读出来,但是根据数据SU中的数据计算得到的校验数据和校验SU中存储的数据不同。分条不一致产生的原因可能是数据SU数据出错,也可能是校验SU的数据出错,或者既有数据SU数据出错又有校验SU数据出错。由于校验SU中存储的是冗余数据,因此当仅校验SU的数据出错,数据SU的数据没有出错时,不认为数据发送丢失,可以通过数据SU的数据重新计算校验SU的数据。
[0030]分条降级,是指分条中有故障SU,但可以借助分条中其余SU恢复故障SU中的数据。当分条允许发生故障的SU不止一个时,分条降级可以进一步细分成多个等级,故障的SU越多,可靠性越低。例如采用RAID6的分条,出现I个SU故障或者出现2个SU故障都称为分条降级,但出现2个分条故障时,分条中数据的安全性比出现I个分条故障时更低。分条失效,是指分条中有SU出现了故障,而且不能通过分条的其余SU恢复出故障SU中的数据,也就是说分条中有部分数据出现了永久性丢失。SU发生故障,是指SU的存储空间出现逻辑或者物理上的错误,导致SU中数据无法读出或者无法完整读出。
[0031]数据块(Block)是去重的基本单元。一个数据块会存储到一个或者多个分条中,存储同一个分条的数据块称为一个分条组。一个分条组包括一个分条或者多个分条。LUN的数据由LUN指向的数据组成。
[0032]本发明实施例在进行去重的过程中,同时考虑数据块所在的分条的可靠性等级。在离线去重时,当有多个相同数据块时,检查各个数据块所在的分条可靠性等级,保留可靠性最高的分条中的数据块,删除其余分条中的数据块。当所有分条的分条状态都不是分条一致,也就是每个分条都出现了一定程度的可靠性降低时,可以把数据块写入分条一致的分条中,删除其余分条中的数据。
[0033]在线去重时,如果存储设备中已经存储有与待存储数据块相同的数据块时,检测已存储的数据块所在的分条可靠性等级,如果分条状态不是分条一致,则把数据块写入分条一致的分条中,删除已存储的数据块。
[0034]数据块占用多个分条时,以可靠性最低的分条的可靠性等级作为整个分条组的可靠性等级。应用本发明实施例提供的技术,在去重过程中进一步考虑数据块所在分条的可靠性等级,把数据块存入可靠性更高的分条中。提高了数据块的安全性。
[0035]如图2所示,是一种数据块处理方法流程图,可以进行离线重删。方法包括以下步骤。
[0036]步骤31,控制器对存储系统中数据块的指纹进行比对。
[0037]每个数据块拥有一个指纹,例如可以用MD5,SHA128等算法对数据块的数据内容进行计算,把计算的结果作为数据块的指纹。拥有相同指纹的数据块是相同数据块。存储设备中数据块的指纹存储在控制器的指纹库中。
[0038]步骤32,当有多个数据块有相同的指纹时,根据所述指纹查询拥有这个指纹的所有数据块的地址,根据所述数据块地址查找所述数据块所占用的分条组。
[0039]当找到多个拥有相同指纹的数据块时,可以保留其中一个数据块,删除其余数据块,以减少对存储设备存储空间的占用。控制器存储有映射表,映射表中记录有指纹和指纹代表的数据块的存储地址。控制器可以根据数据块的地址,找到存储这个数据块的分条组。数据块存储在分条组中,数据块和分条组一一对应。数据块地址可以表现为LUN的偏移,可以被转换成物理地址,数据块所在分条组的位置信息可以是物理地址。
[0040]步骤33,校验所述数据块的所述分条组的独立廉价磁盘冗余阵列RAID分条状态,根据校验结果,保存分条一致的分条组中的数据块。
[0041]所述根据校验结果保存分条一致的分条组中的数据块,包括下述至少一种方案:如果已经存在分条一致的所述分条组,并且存在非分条一致的所述分条组,则保留分条一致的所述分条组中的数据块不变,删除其余所述分条组中的数据块;如果不存在分条一致的所述分条组,并且存在降级的分条组,则通过RAID算法修复降级的分条组,生成分条一致的分条组,删除其余所述分条组中的数据块。对每个分条组进行分条状态的校验,分条组的状态由分条组中可靠性最低的分条决定。
[0042]本发明实施例所说的修复,是指当分条中有部分SU出现数据错误或者SU故障时,利用正常SU中的数据使用RAID校验算法,重新计算出故障SU或者数据出错的SU中的数据,把正常SU中的数据以及重新计算出的数据新写入存储设备的分条组中。修复后的分条组的分条状态是分条一致,分条组中数据块的安全性比分条降级、分条不一致更高。修复后的数据块具体写入位置,可以重新分配分条组;在能够满足正常读写的情况下,也可以写入原分条组,覆盖原分条组中的数据。
[0043]本发明实施例提供的一种策略是:当有任意分条组的分条状态是分条一致时,说明这个分条中的数据块是可靠的,其他分条组可以不再执行分条状态的校验直接删除。
[0044]现有去重技术中,由于不执行分条校验,因此,如果既存在分条一致的所述分条组,又存在非分条一致的分条组。那么会随机保留其中一个分条组中的数据块。如果保留的是分条失效的分条组中的数据块,而清空其他分条组,那么数据块的内容将无法被正常读出,也就是说去重操作造成了数据丢失。非分条一致的分条组包括除了分条一致外的其他状态,例如分条不一致、分条降级或分条失效。从统计结果来看,在多次去重操作中,现有技术会造成数据丢失或者数据安全性降低。而本发明实施例相较于现有技术可以提高数据可靠性。
[0045]本发明实施例还提供另外一种策略:如果不存在分条一致的所述分条组,并且存在降级的分条组,则通过RAID算法把降级的分条组修复为分条一致的分条组,删除其余所述分条组中的数据块。
[0046]现有去重技术中,由于不对分条组进行执行分条校验,因此无法知道分条组的可靠性,去重后的数据块可能会被存到降级的分条组中,或者其他稳定性不高的分条组中。本发明实施例,针对此种情况,可以对降级分条组进行修复,使最终保留的数据块以分条一致的形式存储在分条组中。因此提高了数据安全性。
[0047]需要说明的是,这两种策略是独立的,任意执行一种,在统计上就可以提高存储设备的数据安全性。因此,对执行这个方法的装置或者控制器,可以对两种策略都支持,也可以仅其中一种策略。
[0048]本发明实施例还提供一种可选的策略:如果所有分条组都是失效分条组,则对所述失效分条组中分条一致的分条中的数据进行去重,并且删除失效的分条中的数据。和前两种策略一样,这种策略也是独立的,对执行这个方法的装置或者控制器,可以这任意一种策略,或者支持任意两种或者三种都支持。
[0049]当所有分条组都是失效分条组,意味着每个分条组都发生了永久性数据丢失,依靠单个分条组不足以恢复整个数据块。分条组由分条组成,本发明实施例可以挽救部分分条中的数据。挽救的分条可能可以凑成一个完整的分条组,即使挽救的分条组不足以凑成一个完整的分条组,保留这些分条中的数据也仍然是有意义的,例如在未来可能会有新的数据写入时,新写入的数据和已存储的分条可以凑成一个完整的分条组。因此这种策略避免或者减少了数据块的数据丢失。
[0050]挽留分条的措施包括:如果存在分条一致的分条,则对这些分条一致的分条进行去重;如果存在降级的分条,且不存在和降级的分条存储相同数据的分条一致的分条,则使用RAID算法修复降级的分条;如果存在不一致的分条,且不一致的分条的数据SU未发生错误,且不存在和不一致的分条所存储相同数据的分条一致的分条或者降级的分条,则使用RAID算法修复降级的分条。
[0051]步骤34,将指向所述数据块所在分条组的LUN指向所述分条一致的分条组。
[0052]LUN由控制器管理并提供主机使用。控制器记录有LUN所指向的分条组,分条组中的数据块组成LUN的数据,当主机读取数据时,可以通过LUN和分条组的指向关系找到存储在LUN中的数据块。在对数据去重的过程中,部分数据块被删除,保留的数据块供这些LUN公用,因此需要把指向那些被删除的数据块所在分条组的LUN,修改为指向分条一致的分条组。
[0053]按照步骤33所描述的不同情况,当步骤33的执行过程中原本就存在分条一致分条组时,这些LUN指向这个原本就存在的分条组;如果原本不存在分条一致的分条组,通过修复生成分条一致的分条组时,这些LUN指向修复生成的分条一致的分条组。
[0054]可选的,进一步更新控制器中记录的指纹和指纹代表的数据块的存储地址的映射表。把数据块存储的地址更新为指向分条一致的分条组。在下次进行去重时,可以使用这个对应关系找到数据块所在的分条组,再次确认分条组的分条状态。
[0055]步骤35,可选的,还可以更新所述数据块的引用次数,引用次数增加的数值等于删除的数据块的数量。控制器记录有数据块被引用的次数,引用次数用以描述指向这个数据块的LUN的数量。当引用次数为O时,表示没有LUN需要使用这个数据块,这个数据块可以被删除。步骤35和步骤34不限制执行的先后次序,可以任一先执行或者二者同时执行。
[0056]如图3所示,是一种数据块处理方法流程图,可以进行在线重删。方法包括以下步骤。该方法可以有控制器执行,具体而言是控制器的处理器执行缓存中的计算机指令。
[0057]步骤41,查询存储设备中数据块的指纹库,当存储设备中存在和所述待存储数据块拥有相同指纹的已存储数据块,检测所述已存储数据块所在分条组的独立廉价磁盘冗余阵列RAID分条状态。
[0058]控制器在把待存储数据块存入存储设备之前,先计算这个待存储数据块的指纹,然后检查指纹库中是否已经存在待存储数据块指纹。如果不存在,意味着这个待存储数据块未被存储过,待存储数据块需要存储到存储设备中。如果存在,意味着这个数据块已经存储过了,进一步判断是否需要重新存储待存储数据块。
[0059]步骤42,通过检测已存储数据块所在分条组的RAID分条状态,如果分条不一致,则需要生成分条一致的分条组。具体措施,可以用待存储数据块替换已存储数据块,重新存储的待存储数据块所在的分条组时分条一致的分条组;如果已存储数据块所在的分条组可以修复,也可以修复已存储数据块所在的分条组。如果分条状态是分条一致,就不需要存储待存储数据块,已存储数据块也不需要改变。
[0060]下面对策略进行具体说明,本发明实施例可以包括下述策略任意一种或多种。应用本发明实施例的控制器,可以同时具有支持多种策略的功能,也可以只支持其中一种策略。
[0061]策略A,如果已存储数据块所在分条组的分条状态是分条一致,则不存储所述待存储数据块。当然,如果用待存储数据块替换已存储数据块也是可以的。
[0062]策略B,如果所述分条组的分条状态是分条降级,则存储所述待存储数据块,删除所述已存储数据块,或者存储根据RAID算法由所述降级分条组对所述已存储数据块进行修复。处于降级的分条组,其故障SU中的数据是可以通过RAID算法修复的。
[0063]策略C,如果所述分条组的分条状态是分条不一致,则存储所述待存储数据块,删除所述已存储数据块。或者在确定不存在数据SU发生故障,也就是说故障SU全是校验SU时,修复分条组。具体修复办法,是根据RAID算法重新计算校验SU中的数据,然后将原数据SU中的数据和重新计算获得的校验SU中的数据,一起写入存储装置的分条组。可以是原数据SU所在分条组,也可以是重新申请的分条组。
[0064]确定有没有数据SU发生故障的方式是:计算数据SU中数据的指纹,如果指纹和待存储数据块的指纹相同,说明数据SU未发生数据损坏。可以不使用校验数据计算指纹。
[0065]步骤43,将待存储数据块所在的LUN指向所述分条一致的分条组。
[0066]经过步骤42的处理后,存储设备中存储有一个分条一致的分条组,这个分条一致的分条组中存储的数据块与待存储数据块相同。按照步骤42的不同策略,如果已存储数据块的分条状态是分条一致,那么LUN指向已存储数据块所在分条组;如果使用待存储数据块替换已存储数据块,那么LUN指向待存储数据块存储到存储设备后所在的分条组;如果对已存储数据块的分条组进行修复,那么LUN指向修复后的分条组。
[0067]可选的,进一步更新控制器中记录有指纹和指纹代表的数据块的存储地址的映射表。把数据块存储的地址更新为指向分条一致的分条组。在下次进行去重时,可以使用这个对应关系找到数据块所在的分条组,再次确认分条状态。
[0068]步骤44,可选的,更新数据块的引用次数。把已存储数据块的引用次数加I。
[0069]如图4所示,是一种数据块处理装置示意图。数据块处理装置5包括指纹比对模块51,地址查找模块52,一致性校验模块53以及索引模块54。还可以包括计数模块55。
[0070]指纹比对模块51,用于对存储系统中数据块的指纹进行比对。
[0071]每个数据块拥有一个指纹,例如可以用MD5,SHA128等算法对数据块的数据内容进行计算,把计算的结果作为数据块的指纹。拥有相同指纹的数据块是相同数据块。存储设备中数据块的指纹可以存储在控制器的指纹库中。
[0072]地址查找模块52,用于当有多个数据块有相同的指纹时,根据所述指纹查询所述数据块的地址,根据所述数据块地址查找所述数据块所占用的分条组。
[0073]当找到多个拥有相同指纹的数据块时,可以保留其中一个数据块,删除其余数据块,以减少对存储设备存储空间的占用。控制器存储有映射表,映射表中记录有指纹和指纹代表的数据块的存储地址。控制器可以根据数据块的地址,找到存储这个数据块的分条组。数据块存储在分条组中,数据块和分条组一一对应。
[0074]一致性校验模块53,用于校验所述数据块的所述分条组的独立廉价磁盘冗余阵列RAID分条状态,根据校验结果,保存分条一致的分条组中的数据块。
[0075]—致性校验模块53还可以用于修复分条组。所述根据校验结果保存分条一致的分条组中的数据块,包括下述至少一种方案:如果已经存在分条一致的所述分条组,并且存在非分条一致的所述分条组,则保留分条一致的所述分条组中的数据块不变,删除其余所述分条组中的数据块;如果不存在分条一致的所述分条组,并且存在降级的分条组,则通过RAID算法修复降级的分条组,生成分条一致的分条组,删除其余所述分条组中的数据块。对每个分条组进行分条状态的校验,分条组的状态由分条组中可靠性最低的分条。
[0076]本发明实施例所说的修复,是指当分条中有部分SU出现数据错误或者SU故障时,利用正常SU中的数据使用RAID校验算法,重新计算出故障SU或者数据出错的SU中的数据,把正常SU中的数据以及重新计算出的数据新写入存储设备的分条组中。修复后的分条组的分条状态是分条一致,分条组中数据块的安全性比分条降级、分条不一致更高。修复后的数据块具体写入位置,可以重新分配分条组;在能够满足正常读写的情况下,也可以写入原分条组,覆盖原分条组中的数据。
[0077]本发明实施例提供的一种策略是:当有任意分条组的分条状态是分条一致时,说明这个分条中的数据块是可靠的,其他分条组可以不再执行分条状态的校验直接删除。
[0078]现有去重技术中,由于不执行分条校验,因此,如果既存在分条一致的所述分条组,又存在非分条一致的分条组。那么会随机保留其中一个分条组中的数据块。如果保留的是分条失效的分条组中的数据块,而清空其他分条组,那么数据块的内容将无法被正常读出,也就是说去重操作造成了数据丢失。非分条一致的分条组包括除了分条一致外的其他状态,例如分条不一致、分条降级或分条失效。从统计结果来看,在多次去重操作中,现有技术会造成数据丢失或者数据安全性降低。而本发明实施例相较于现有技术可以提高数据可靠性。
[0079]本发明实施例还提供另外一种策略:如果不存在分条一致的所述分条组,并且存在降级的分条组,则通过RAID算法把降级的分条组修复为分条一致的分条组,删除其余所述分条组中的数据块。
[0080]现有去重技术中,由于不对分条组进行执行分条校验,因此无法知道分条组的可靠性,去重后的数据块可能会被存到降级的分条组中,或者其他稳定性不高的分条组中。本发明实施例,针对此种情况,可以对降级分条组进行修复,使最终保留的数据块以分条一致的形式存储在分条组中。因此提高了数据安全性。
[0081]需要说明的是,这两种策略是独立的,任意执行一种,在统计上就可以提高存储设备的数据安全性。因此,对执行这个方法的装置或者控制器,可以对两种策略都支持,也可以仅其中一种策略。
[0082]本发明实施例还提供一种可选的策略:如果所有分条组都是失效分条组,则对所述失效分条组中分条一致的分条中的数据进行去重,并且删除失效的分条中的数据。和前两种策略一样,这种策略也是独立的,对执行这个方法的装置或者控制器,可以这任意一种策略,或者支持任意两种或者三种都支持。
[0083]当所有分条组都是失效分条组,意味着每个分条组都发生了永久性数据丢失,依靠单个分条组不足以恢复整个数据块。分条组由分条组成,本发明实施例可以挽救部分分条中的数据。挽救的分条可能可以凑成一个完整的分条组,即使挽救的分条组不足以凑成一个完整的分条组,保留这些分条中的数据也仍然是有意义的,例如在未来可能会有新的数据写入时,新写入的数据和已存储的分条可以凑成一个完整的分条组。因此这种策略避免或者减少了数据块的数据丢失。
[0084]挽留分条的措施包括:如果存在分条一致的分条,则对这些分条一致的分条进行去重;如果存在降级的分条,且不存在和降级的分条存储相同数据的分条一致的分条,则使用RAID算法修复降级的分条;如果存在不一致的分条,且不一致的分条的数据SU未发生错误,且不存在和不一致的分条所存储相同数据的分条一致的分条或者降级的分条,则使用RAID算法修复降级的分条。
[0085]索引模块54,和一致性校验模块53连接,用于将指向所述数据块所在分条组的LUN指向所述分条一致的分条组。
[0086]LUN由控制器管理并提供主机使用。控制器记录有LUN所指向的分条组,分条组中的数据块组成LUN的数据,当主机读取数据时,可以通过LUN和分条组的指向关系找到存储在LUN中的数据块。在对数据去重的过程中,部分数据块被删除,保留的数据块供这些LUN公用,因此需要把指向那些被删除的数据块所在分条组的LUN,修改为指向分条一致的分条组。
[0087]如果存储设备中原本就存在分条一致分条组时,索引模块54将这些LUN指向这个原本就存在的分条组;如果原本不存在分条一致的分条组,通过修复生成分条一致的分条组时,索引模块54将这些LUN指向修复生成的分条一致的分条组。
[0088]可选的,索引模块54进一步更新控制器中记录的指纹和指纹代表的数据块的存储地址的映射表。把数据块存储的地址更新为指向分条一致的分条组。在下次进行去重时,可以使用这个对应关系找到数据块所在的分条组,再次确认分条组的分条状态。
[0089]计数模块55,和一致性校验模块53连接,可以更新所述数据块的引用次数,引用次数增加的数值等于删除的数据块的数量。控制器记录有数据块被引用的次数,引用次数用以描述指向这个数据块的LUN的数量。当引用次数为O时,表示没有LUN需要使用这个数据块,这个数据块可以被删除。
[0090]如图5所示,是一种数据块处理装置示意图,可以进行在线重删。数据块处理装置6包括:查询模块61,一致性校验模块62以及索引模块63。还可以包括计数模块64。
[0091]查询模块61,用于查询存储设备中数据块的指纹库,确定存储设备中是否存在和所述待存储数据块拥有相同指纹的已存储数据块。
[0092]控制器在把待存储数据块存入存储设备之前,先计算这个待存储数据块的指纹,然后检查指纹库中是否已经存在待存储数据块指纹。如果不存在,意味着这个待存储数据块未被存储过,待存储数据块需要存储到存储设备中。如果存在,意味着这个数据块已经存储过了,进一步判断是否需要重新存储待存储数据块。
[0093]一致性校验模块62,用于检测已存储数据块所在分条组的RAID分条状态,如果分条不一致,则需要生成分条一致的分条组。具体措施,可以用待存储数据块替换已存储数据块,重新存储的待存储数据块所在的分条组时分条一致的分条组;如果已存储数据块所在的分条组可以修复,也可以修复已存储数据块所在的分条组。如果分条状态是分条一致,就不需要存储待存储数据块,已存储数据块也不需要改变。
[0094]一致性校验模块62还具有修复分条组或者分条的功能。下面对一致性校验模块62的处理策略进行具体说明,本发明实施例可以包括下述策略任意一种或多种。应用本发明实施例的控制器,可以同时具有支持多种策略的功能,也可以只支持其中一种策略。
[0095]策略A,如果已存储数据块所在分条组的分条状态是分条一致,则不存储所述待存储数据块。当然,如果用待存储数据块替换已存储数据块也是可以的。
[0096]策略B,如果所述分条组的分条状态是分条降级,则存储所述待存储数据块,删除所述已存储数据块,或者存储根据RAID算法由所述降级分条组对所述已存储数据块进行修复。处于降级的分条组,其故障SU中的数据是可以通过RAID算法修复的。
[0097]策略C,如果所述分条组的分条状态是分条不一致,则存储所述待存储数据块,删除所述已存储数据块。或者在确定不存在数据SU发生故障,也就是说故障SU全是校验SU时,修复分条组。具体修复办法,是根据RAID算法重新计算校验SU中的数据,然后将原数据SU中的数据和重新计算获得的校验SU中的数据,一起写入存储装置的分条组。可以是原数据SU所在分条组,也可以是重新申请的分条组。
[0098]确定有没有数据SU发生故障的方式是:计算数据SU中数据的指纹,如果指纹和待存储数据块的指纹相同,说明数据SU未发生数据损坏。可以不使用校验数据计算指纹。
[0099]索引模块63,用于将待存储数据块所在的LUN指向所述分条一致的分条组。
[0100]一致性校验模块62处理后,存储设备中存储有一个分条一致的分条组,这个分条一致的分条组中存储的数据块与待存储数据块相同。按照步骤42的不同策略,如果已存储数据块的分条状态是分条一致,那么LUN指向已存储数据块所在分条组;如果使用待存储数据块替换已存储数据块,那么LUN指向待存储数据块存储到存储设备后所在的分条组;如果对已存储数据块的分条组进行修复,那么LUN指向修复后的分条组。
[0101]可选的,索引模块63进一步用于更新控制器中记录有指纹和指纹代表的数据块的存储地址的映射表。把数据块存储的地址更新为指向分条一致的分条组。在下次进行去重时,可以使用这个对应关系找到数据块所在的分条组,再次确认分条状态。
[0102]计数模块64,用于更新数据块的引用次数。把已存储数据块的引用次数加I。计数模块64是可选的。
[0103]本发明实施例还可以提供一种数据块处理系统,包括数据块处理装置5以及存储设备,存储设备用于存储数据块。数据块处理装置可以是控制器或者集成在控制器中的软件或硬件。
[0104]本发明实施例还可以提供一种数据块处理系统,包括数据块处理装置6以及存储设备,存储设备用于存储数据块。数据块处理装置可以是控制器或者集成在控制器中的软件或硬件。
[0105]本领域普通技术人员将会理解,本发明的各个方面、或各个方面的可能实现方式可以被具体实施为系统、方法或者计算机程序产品。因此,本发明的各方面、或各个方面的可能实现方式可以采用完全硬件实施例、完全软件实施例(包括固件、驻留软件等等),或者组合软件和硬件方面的实施例的形式,在这里都统称为“电路”、“模块”或者“系统”。此夕卜,本发明的各方面、或各个方面的可能实现方式可以采用计算机程序产品的形式,计算机程序产品是指存储在计算机可读介质中的计算机可读程序代码。
[0106]计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质包含但不限于电子、磁性、光学、电磁、红外或半导体系统、设备或者装置,或者前述的任意适当组合,如随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPR0M或者快闪存储器)、光纤、便携式只读存储器(CD-ROM)。
[0107]计算机中的处理器读取存储在计算机可读介质中的计算机可读程序代码,使得处理器能够执行在流程图中每个步骤、或各步骤的组合中规定的功能动作;生成实施在框图的每一块、或各块的组合中规定的功能动作的装置。
【权利要求】
1.一种数据处理方法,用于控制器中,其特征在于,该方法包括: 当有多个数据块有相同的指纹时,根据所述指纹查询所述数据块的地址,根据所述数据块地址查找所述数据块所占用的分条组; 校验所述数据块的所述分条组的独立廉价磁盘冗余阵列RAID分条状态,根据校验结果保存分条一致的分条组中的数据块; 所述根据校验结果保存分条一致的分条组中的数据块,包括下述至少一种: 如果存在分条一致的所述分条组,并且存在非分条一致的所述分条组,则保留分条一致的所述分条组中的数据块,删除其余所述分条组中的数据块; 如果不存在分条一致的所述分条组,并且存在降级的分条组,则通过RAID算法修复将降级的分条组修复为分条一致的分条组,所述分条一致的分条组中存储有所述数据块,删除其余所述分条组中的所述数据块。
2.根据权利要求1所述的数据处理方法,其特征在于,所述根据校验结果保存分条一致的分条组中的数据块,进一步包括: 如果所有分条组都是失效分条组,则对所述失效分条组中分条一致的分条中的数据进行去重,删除所述失效分条组中失效的分条中的数据。
3.根据权利要求1所述的数据处理方法,其特征在于,该方法之后进一步包括: 将指向所述数据块所在分条组的LUN指向所述分条一致的分条组。
4.根据权利要求1所述的数据处理方法,其特征在于,该方法之后进一步包括: 更新所述数据块的引用次数,更新后的引用次数等于原计数值加上删除的所述数据块的数量。
5.一种数据块处理装置,其特征在于,该装置包括: 指纹比对模块51,用于对存储设备中数据块的指纹进行比对; 地址查找模块52,当所述存储设备中有多个数据块有相同的指纹时,根据所述指纹查询所述多个数据块的地址,根据所述多个数据块地址查找所述多个数据块所占用的分条组; 一致性校验模块53,用于校验所述多个数据块的所述分条组的独立廉价磁盘冗余阵列RAID分条状态,根据校验结果保存分条一致的分条组中的数据块; 所述根据校验结果保存分条一致的分条组中的数据块,包括下述至少一种: 如果存在分条一致的所述分条组,并且存在非分条一致的所述分条组,则保留分条一致的所述分条组中的数据块,删除其余所述分条组中的数据块; 如果不存在分条一致的所述分条组,并且存在降级的分条组,则通过RAID算法修复将降级的分条组修复为分条一致的分条组,所述分条一致的分条组中存储有所述数据块,删除其余所述分条组中的所述数据块。
6.根据权利要求5所述的数据处理装置,其特征在于,所述根据校验结果保存分条一致的分条组中的数据块,进一步包括: 如果所有分条组都是失效分条组,则对所述失效分条组中分条一致的分条中的数据进行去重,删除所述失效分条组中失效的分条中的数据。
7.根据权利要求5所述的数据处理装置,其特征在于,所述装置进一步包括: 索引模块54,用于将指向所述数据块所在分条组的LUN指向所述分条一致的分条组。
8.根据权利要求5所述的数据处理装置,其特征在于,所述装置进一步包括: 计数模块55,用于更新所述数据块的计数值,更新后的计数值等于原计数值加上删除的所述数据块的数量。
9.一种存储系统,包括权利要求6-8任一项的存储装置,以及存储设备。
10.一种数据块处理方法,用于控制器中,其特征在于,该方法包括: 查询存储设备中数据块的指纹库,当存储设备中存在和所述待存储数据块拥有相同指纹的已存储数据块时,检测所述已存储数据块所在分条组的独立廉价磁盘冗余阵列RAID分条状态; 根据检测进行数据块存储,包括: 如果所述分条组的分条状态是分条一致,则不存储所述待存储数据块;如果所述分条组的分条状态是分条降级,则:存储所述待存储数据块,删除所述已存储数据块;或者,存储根据RAID算法由所述降级分条组对所述已存储数据块进行修复;或者如果所述分条组的分条状态是分条不一致,则:存储所述待存储数据块,删除所述已存储数据块;或者,如果数据分条单元未发生数据错误,则根据RAID算法对所述已存储数据块进行修复。
11.根据权利要求10所述的数据块处理方法,其特征在于,所述方法之后还包括: 将所述待存储数据块所属于的LUN,指向所述根据检测所存储的数据块。
12.根据权利要求10所述的数据块处理方法,其特征在于,所述方法之后还包括: 把所述已存储数据块的引用次数加I。
13.一种数据块处理装置,其特征在于,该装置包括: 查询模块61,用于查询存储设备中数据块的指纹库; 一致性校验模块62,用于当存储设备中存在和所述待存储数据块拥有相同指纹的已存储数据块时,检测所述已存储数据块所在分条组的独立廉价磁盘冗余阵列RAID分条状态;根据检测进行数据块存储,包括: 如果所述分条组的分条状态是分条一致,则不存储所述待存储数据块;如果所述分条组的分条状态是分条降级,则:存储所述待存储数据块,删除所述已存储数据块;或者,存储根据RAID算法由所述降级分条组对所述已存储数据块进行修复;或者如果所述分条组的分条状态是分条不一致,则:存储所述待存储数据块,删除所述已存储数据块;或者,如果数据分条单元未发生数据错误,则根据RAID算法对所述已存储数据块进行修复。
14.根据权利要求13所述的数据块处理装置,其特征在于,所述装置进一步包括: 索引模块63,用于将所述待存储数据块所属于的LUN,指向所述根据检测所存储的数据块。
15.根据权利要求13所述的数据块处理方法,其特征在于,所述装置进一步包括: 计数模块64,用于对所述已存储数据块的引用次数加I。
16.一种存储系统,包括权利要求13-15任一项的存储装置,以及存储设备。
17.—种控制器,和存储设备连接,所述控制器包括处理器和缓存,所述缓存用于存储计算机指令,所述控制器通过运行所述计算机指令执行以下步骤: 当有多个数据块有相同的指纹时,根据所述指纹查询所述数据块的地址,根据所述数据块地址查找所述数据块所占用的分条组; 校验所述数据块的所述分条组的独立廉价磁盘冗余阵列RAID分条状态,根据校验结果保存分条一致的分条组中的数据块; 所述根据校验结果保存分条一致的分条组中的数据块,包括下述至少一种: 如果存在分条一致的所述分条组,并且存在非分条一致的所述分条组,则保留分条一致的所述分条组中的数据块,删除其余所述分条组中的数据块; 如果不存在分条一致的所述分条组,并且存在降级的分条组,则通过RAID算法修复将降级的分条组修复为分条一致的分条组,所述分条一致的分条组中存储有所述数据块,删除其余所述分条组中的所述数据块。
18.根据权利要求17所述的控制器,其特征在于,所述根据校验结果保存分条一致的分条组中的数据块,进一步包括: 如果所有分条组都是失效分条组,则对所述失效分条组中分条一致的分条中的数据进行去重,删除所述失效分条组中失效的分条中的数据。
19.据权利要求17所述的控制器,其特征在于,所述处理器还用于执行: 将指向所述数据块所在分条组的LUN指向所述分条一致的分条组。
20.据权利要求17所述的控制器,其特征在于,所述处理器还用于执行: 更新所述数据块的引用次数,更新后的引用次数等于原计数值加上删除的所述数据块的数量。
21.—种控制器,和存储设备连接,所述控制器包括处理器和缓存,所述缓存用于存储计算机指令,所述控制器通过运行所述计算机指令执行以下步骤: 查询存储设备中数据块的指纹库,当存储设备中存在和所述待存储数据块拥有相同指纹的已存储数据块时,检测所述已存储数据块所在分条组的独立廉价磁盘冗余阵列RAID分条状态; 根据检测进行数据块存储,包括: 如果所述分条组的分条状态是分条一致,则不存储所述待存储数据块;如果所述分条组的分条状态是分条降级,则:存储所述待存储数据块,删除所述已存储数据块;或者,存储根据RAID算法由所述降级分条组对所述已存储数据块进行修复;或者如果所述分条组的分条状态是分条不一致,则:存储所述待存储数据块,删除所述已存储数据块;或者,如果数据分条单元未发生数据错误,则根据RAID算法对所述已存储数据块进行修复。
22.根据权利要求21所述的控制器,其特征在于,所述处理器还用于: 将所述待存储数据块所属于的LUN,指向所述根据检测所存储的数据块。
23.根据权利要求21所述的控制器,其特征在于,所述处理器还用于: 把所述已存储数据块的引用次数加I。
【文档编号】G06F17/30GK104205097SQ201380002564
【公开日】2014年12月10日 申请日期:2013年12月31日 优先权日:2013年12月31日
【发明者】薛迎春, 邵长庚 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1