用于改进的数据去重的装置、系统及方法
2020-01-10

用于改进的数据去重的装置、系统及方法

公开了一种用于改进的数据去重的装置、系统和方法。在非易失性存储设备210中实现输入模块312、散列模块314和传输模块316。输入模块312从非易失性存储设备的内部或外部的请求实体接收散列请求302。散列请求包括数据单元标识符,该数据单元标识符标识了所请求的散列对应的数据单元。散列模块314使用散列函数产生该数据单元的散列。散列是使用非易失性存储设备的计算资源产生的。当输入模块312接收到散列请求时,传输模块316向接收实体发送散列。去重代理110使用该散列,以确定该数据单元是否是已存储在包括非易失性存储设备210的存储系统中的数据单元的副本。

在其它实施例中,散列产生装置230可以负责跟踪已经去重了哪些数据单元。在该实施例中,散列产生装置230可以包括跟踪模块318。跟踪模块318跟踪已经去重了主机设备(在本文中是非易失性存储装置214)上的哪些数据单元。跟踪模块318可以存储对非易失性存储装置214中哪些数据单元需要去重加以标识的信息,或者可以使用其它存储装置来维持该信息。在一个实施例中,每个数据单元包括元数据标记,所述元数据标记指示是特定数据单元是否已被去重。在该实施例中,跟踪模块318可以在易失性存储器中存储去重跟踪数据,并且在电源故障的情况下,或者在引起跟踪数据丢失的其它情况下,使用元数据标记重新创建去重跟踪数据。

因此,在存储系统中主要维持数据单元(例如文件)的仅单个逻辑拷贝。应该注意,在存储系统内可以存在多个物理拷贝一一例如,当读取或操作数据单元时,在存储系统中(例如在非易失性存储设备、RAM等中)可以存在数据单元的多个物理拷贝,这些物理拷贝是操作中的固有的。此外,可以存在数据单元的多个物理拷贝,以提供冗余和故障保护。例如,存储系统可以具有镜像存储装置;因此,存储系统维持了单个逻辑拷贝,但却具有相应的物理拷贝以及在冗余存储装置中的另一物理拷贝。简而言之,在上述系统中,存在用于提供数据保护的计划冗余,但是却避免了不必要地使用诸如存储空间之类的系统资源的非计划冗余。

因此,在存储系统中主要维持数据单元(例如文件)的仅单个逻辑拷贝。应该注意,在存储系统内可以存在多个物理拷贝一一例如,当读取或操作数据单元时,在存储系统中(例如在非易失性存储设备、RAM等中)可以存在数据单元的多个物理拷贝,这些物理拷贝是操作中的固有的。此外,可以存在数据单元的多个物理拷贝,以提供冗余和故障保护。例如,存储系统可以具有镜像存储装置;因此,存储系统维持了单个逻辑拷贝,但却具有相应的物理拷贝以及在冗余存储装置中的另一物理拷贝。简而言之,在上述系统中,存在用于提供数据保护的计划冗余,但是却避免了不必要地使用诸如存储空间之类的系统资源的非计划冗余。

方法1400以标识1402要去重的数据单元为开始。在一个实施例中,由去重代理来标识要去重的数据单元。在其它实施例中,可以由存储数据单元的非易失性存储设备来标识数据单元。在特定实施例中,可以使用标记来标识已去重的数据单元和尚未去重的数据单元。例如,可以在与数据单元相关联的元数据中实现标记。

散列请求302请求指定数据单元的散列,并包括数据单元标识符,其中该数据单元标识符指示了请求的散列所对应的一个或多个数据单元。在特定实施例中,从客户端208发送散列请求302,该散列请求302与以下请求一起发送或者作为其一部分来发送:在非易失性存储设备210上存储请求的散列所对应的数据单元的请求。散列模块314产生在散列请求302中标识的数据单元的散列。散列模块314使用针对数据单元而执行的散列函数产生数据单元的散列。在特定实施例中,散列模块314可以使用消息摘要算法5(MD5)、安全散列算法(SHA-l,SHA-2)、纠错码、指纹、或者可以用于产生散列的其它算法,所述散列适于标识产生的散列所对应的数据单元。还可以使用用于产生散列的其它方法。

在特定实施例中,存储在奇偶镜像设备上的数据段610A-C的散列被存储在奇偶镜像设备上。在其它实施例中,将数据条610A-C的散列存储在不同的非易失性存储设备210a-c上。在特定实施例中,可以选择非易失性存储设备210a-d之一来存储在系统600中存储的数据的散列。在其它实施例中,散列分布在系统600中的非易失性存储设备210a-d上。

在特定实施例中,当输入模块312接收散列请求302时,散列模块314产生数据单元的散列。输入模块312可以向散列模块314发送产生散列的指令,或调用散列模块314的散列产生功能。例如,输入模块312可以接收散列请求302,并且命令散列模块314产生所标识的数据单元的散列。然后,作为响应,散列模块314可以产生散列。

在所描述的实施例中,非易失性存储设备210包括高速缓存模块804。高速缓存模块804实现了针对非易失性存储设备210的高速缓存算法,并且确定何时应该将特定数据单元从非易失性存储设备210移到存储装置120上。在一个实施例中,高速缓存模块804还可以参与对去重代理110的去重处理的管理。

如上所述,客户端208可以包括去重代理110。去重代理110可以发送散列请求302,该散列请求302标识用于去重的特定RAID数据块并且请求数据块的散列。在一个实施例中,RAID控制器410接收散列请求302,并且确定要被去重的RAID数据块的数据段所处的位置。然后,RAID控制器410可以将散列请求302转换为多个散列请求302a-c,其中所述多个散列请求302a_c对非易失性存储设备210a_c中的每个非易失性存储设备上的相关数据段加以标识,并且向每个相关非易失性存储设备210a-c请求这些数据分段的散列。