用于多维独立磁盘冗余阵列的方法和系统
相关申请的交互参考
本申请是2014年9月18日进入中国国家阶段、申请号为201380015047.9、发明名称为“用于多维独立磁盘冗余阵列的方法和系统”的发明专利申请的分案申请。
背景
为了防止存储系统中的潜在数据丢失,实施一种复制方案通常是有利的。当前的复制方案仅能承受在存储系统内的数据不能被读取之前的有限错误量。
发明内容
总的来说,一方面,本发明涉及一种用于存储数据的方法。该方法包括:接收写入数据的请求;响应于该请求,选择RAID(Redundant Array of Independent Disk,独立磁盘冗余阵列)网格中的RAID网格位置来写入数据;将数据写入至存储器,其中数据被临时存储于存储器中;更新数据结构以指示RAID网格位置被填充;使用数据结构来确定RAID网格中的数据网格是否被填充,其中RAID网格的位置是在数据网格中;基于数据网格被填充的确定:使用数据来计算RAID网格的奇偶校验值,将数据写入至与物理地址相对应的永久存储器中的物理位置,以及将奇偶校验值写入至永久存储器。
总的来说,一方面,本发明涉及一种用于重构数据的方法。该方法包括:接收对第一数据的请求;获得第一数据,其中第一数据从永久存储器中的第一物理位置而获得、且其中第一物理位置与第一物理地址相关联;作出第一确定:第一数据是从由被破坏且未被获得的数据组成的组中选择的数据;基于第一确定,标识(identify)对应于第一物理地址的第一RAID网格位置;标识第一RAID网格与第一RAID网格位置相关联;标识与第一RAID网格相关联的RAID立方体(RAID Cube),其中RAID立方体包括第一RAID网格和第二RAID网格;作出使用第一RAID网格中的至少一个值来重构第一数据的第一尝试,其中第一尝试失败;在第一尝试失败后,作出使用第二RAID网格中的至少一个值来重构第一数据的第二尝试,其中第二尝试成功;以及将经重构的第一数据提供给客户端。
总的来说,一方面,本发明涉及一种用于重构数据的方法。该方法包括:接收对数据的请求;获得数据,其中数据从永久存储器中的物理位置获得且其中物理位置与物理地址相关联;作出第一确定:第一数据是从由被破坏且未被获得的数据组成的组中选择的数据;基于第一确定,标识对应于物理地址的第一RAID网格位置;标识RAID网格与第一RAID网格位置相关联;作出使用第二RAID网格位置中的第一值来重构数据的第一尝试,其中第二RAID网格位置位于从由RAID网格中的第一行和第一列组成的组中选择的至少一个网格中,其中第一RAID网格位置是第一行和第一列的一部分,其中第一尝试失败;在第一尝试失败后,作出重构数据的第二尝试,其中第二尝试成功,且其中第二尝试包括:重构从由RAID网格中的第二行和第二列组成的组中选择的至少一个网格以获得RAID网格的经重构部分,其中RAID网格的经重构部分与从由第一行和第一列组成的组中选择的至少一个网格相交(intersect),使用第三RAID网格位置中的第二值来重构数据,其中第三RAID网格位置是RAID网格的经重构部分的一部分,其中第三RAID网格位置位于从由第一行和第一列组成的组中选择的一个网格中;以及将经重构的数据提供给客户端。从以下描述和所附权利要求中,本发明的其他方面将显而易见。
附图说明
图1示出根据本发明的一个实施例的系统。
图2示出根据本发明的一个实施例的RAID网格。
图3示出根据本发明的一个实施例的RAID立方体及RAID立方体的各个视图。
图4示出根据本发明的一个实施例的数据结构。
图5A-5C示出根据本发明的一个实施例的流程图。
图6A-6C示出根据本发明的一个或多个实施例的示例。
图7A-7D示出根据本发明的一个或多个实施例的示例。
图8示出根据本发明的一个或多个实施例的流程图。
图9A-9D示出根据本发明的一个或多个实施例的示例。
具体实施方式
现在将参照附图详细描述本发明的具体实施例。在本发明实施例的以下详细描述中,提出了许多具体细节以便提供本发明更为详尽的理解。然而,对于本领域技术人员显而易见的是,本发明可以无需这些具体细节而被实现。在其他实例中,未详细描述众所周知的特征以避免使描述变得不必要的复杂。
在下述对于图1-9D的描述中,在本发明的各个实施例中,关于一个附图描述的任一组件可以等效于关于任一其他附图描述的一个或多个被类似命名的组件。为简洁起见,将不会关于每一附图重复这些组件的描述。因此,每一附图的各个组件中的每一个和每一个实施例通过引用被结合,并且被假定为任选地存在于具有一个或多个被类似命名的组件的每一个其他附图中。此外,根据本发明的各个实施例,一个附图中对于这些部件的任何描述将被解释为一个可实现的可选实施例,以附加于、结合于、或者代替结合任何其他附图中对于一个对应的被类似命名的部件而描述的实施例。
总的来说,本发明的实施例涉及使用多维RAID方案复制数据的方法和系统。更为具体的,本发明的实施例提供了用于实现二维(2D)RAID方案和三维(3D)RAID方案的方法和系统。
使用2D RAID方案,实现这一RAID方案的RAID网格内存储的数据可以在给定的RAID带(RAID stripe)中存在多于两个错误时被恢复。类似地,使用3D RAID方案,实现这一RAID方案的RAID立方体中存储的数据可以在给定的RAID带中存在多于两个错误时被恢复。而且,在本发明的各个实施例中,当在多于一个独立故障域(IFD)中存在故障时,所有数据将被恢复。
在本发明的一个或多个实施例中,IFD对应于故障模式,故障模式导致给定位置处的数据不可访问。每一IFD对应于存储阵列中的独立故障模式。例如,如果数据被存储在NAND闪存中,其中NAND闪存是存储模块(包括多个NAND管芯(die))的一部分,则IFD可以是(i)存储模块、(ii)通道(即,存储模块控制器(未示出)用来将数据写入至NAND闪存的通道)、以及(iii)NAND管芯。
为本发明的目的,这里使用的术语“RAID”是指“独立磁盘冗余阵列(RedundantArray of Independent Disks)”。尽管“RAID”是指任何独立磁盘的阵列,但本发明的实施例可以使用任何类型的永久存储设备来实现,其中RAID网格位置(见例如图2)可以基于本发明的实现方式(见例如图3和4)跨一个或多个永久存储设备而分布。
图1示出根据本发明的一个实施例的系统。如图1所示,系统包括一个或多个客户端(100A、100M)、RAID控制器(104)、存储器(106)、可选的FPGA(102)以及存储阵列(108)。
在本发明的一个实施例中,客户端(100A、100M)是任何系统或系统上执行的进程,它包括向RAID控制器(104)发出读取请求或写入请求的功能。在本发明的一个实施例中,客户端(100A、100M)中的每一个可包括处理器(未示出)、存储器(未示出)和永久存储器(未示出)。在本发明的一个实施例中,RAID控制器(104)被配置成实现多维RAID方案,多维RAID方案包括以与多维RAID方案(见图5A-5C)一致的方式将数据写入至存储阵列、以及以与多维RAID方案(见图8)一致的方式从存储阵列读取数据(包括重构数据)。在本发明的一个实施例中,RAID控制器(104)包括处理器,处理器被配置成执行指令以实现本发明的一个或多个实施例,其中,指令被存储于非暂时性计算机可读介质(未示出)上,非暂时性计算机可读介质位于RAID控制器(104)内或与RAID控制器(104)可操作地连接。或者,RAID控制器(104)可以使用硬件来实现。本领域的技术人员将理解,RAID控制器(104)可以使用软件和/或硬件的任意组合来实现。
在本发明的一个实施例中,RAID控制器(104)可操作地连接至存储器(106)。存储器(106)可以是任何易失性存储器,包括但不限于:动态随机存取存储器(DRAM)、同步DRAM、SDR SDRAM和DDR SDRAM。在本发明的一个实施例中,存储器(106)被配置成在各种数据(包括奇偶校验数据)被存储于存储阵列中之前临时存储这种数据。
在本发明的一个实施例中,FPGA(102)(若存在)包括为将数据存储于存储阵列(108)中的目的而计算P和/或Q奇偶校验信息的功能以及/或者执行恢复使用多维RAID方案存储的已破坏数据所必要的各种计算的功能。根据本发明的一个或多个实施例,RAID控制器(104)可以使用FPGA(102)来履行(offload)各种数据的处理。在本发明的一个实施例中,存储阵列(108)包括多个个别的永久存储设备,包括但不限于:磁性存储设备、光学存储设备、固态存储设备、相变存储设备、任何其他适当类型的永久存储设备、或它们的任意组合。
本领域的技术人员将理解,尽管图1示出FPGA,但本发明可以没有FPGA而实现。而且,本领域的技术人员将理解,其他组件可以替代FPGA而被使用,而不背离本发明。例如,本发明可以使用以下各设备来实现:(多个)ASIC、(多个)图形处理单元(GPU)、(多个)通用处理器、能够为将数据存储于存储阵列中的目的而计算P和/或Q奇偶校验信息以及/或者执行恢复使用多维RAID方案存储的已破坏数据所必要的各种计算的任何其他硬件设备;包括硬件、固件和/或软件的组合的任何设备、或者它们的任一组合,其中所述硬件、固件和/或软件被配置成为将数据存储于存储阵列(108)中的目的而计算P和/或Q奇偶校验信息以及/或者执行恢复使用多维RAID方案存储的已破坏数据所必要的各种计算。
图2示出根据本发明的一个实施例的RAID方案。在本发明的一个实施例中,如果RAID控制器实现2D RAID方案或3D RAID方案(见图3),RAID控制器就将数据存储于RAID网格(200)中。图2示出根据本发明的一个或多个实施例的RAID网格的概念部分。RAID网格(200)包括多个RAID网格位置,其中每个RAID网格位置最终被写入至存储阵列中的唯一物理地址。RAID网格(200)包括(i)数据网格(202),包括存储从客户端接收的数据(即,客户端指示RAID控制器写入至存储阵列的数据)的RAID网格位置;(ii)行P奇偶校验位组(204),包括存储于P奇偶校验位值中的RAID网格位置,该P奇偶校验位值是使用一行中的RAID网格位置中的数据计算的(以下描述);(iii)行Q奇偶校验位组(206),包括存储于Q奇偶校验位值中的RAID网格位置,该Q奇偶校验位值是使用一行中的RAID网格位置中的数据计算的(以下描述);(iv)列P奇偶校验位组(208),包括存储于P奇偶校验位值中的RAID网格位置,该P奇偶校验位值是使用一列中的RAID网格位置中的数据计算的(以下描述);(v)列Q奇偶校验位组(210),包括存储于Q奇偶校验位值中的RAID网格位置,该Q奇偶校验位值是使用一列中的RAID网格位置中的数据计算的(以下描述);以及(vi)交叉奇偶校验位组(212),包括使用以下数据计算的奇偶校验位值:(a)来自行P奇偶校验位组(204)中的RAID网格位置的数据、(b)来自行Q奇偶校验位组(206)中的RAID网格位置的数据、(c)来自列P奇偶校验位组(208)中的RAID网格位置的数据和(d)来自列Q奇偶校验位组(210)中的RAID网格位置的数据(以下描述)。
参见行(214),在本发明的一个实施例中,行(214)中存储在RAID网格位置中被表示为Pr的数据是通过对行(214)中所有包括数据的RAID网格位置应用P奇偶校验函数而计算的(例如,Pr=fP(D1,D2,D3,D4))。类似地,在本发明的一个实施例中,行(214)中存储在RAID网格位置中被表示为Qr的数据是通过对行(214)中所有包括数据的RAID网格位置应用Q奇偶校验函数而计算的(例如,Qr=fQ(D1,D2,D3,D4))。
参见列(216),在本发明的一个实施例中,列(216)中存储在RAID网格位置中被表示为PC的数据是通过对列(216)中所有包括数据的RAID网格位置应用P奇偶校验函数而计算的(例如,PC=fP(D5,D2,D6,D7))。。类似地,在本发明的一个实施例中,列(216)中存储在RAID网格位置中被表示为QC的数据是通过对列(216)中所有包括数据的RAID网格位置应用Q奇偶校验函数而计算的(例如,QC=fQ(D5,D2,D6,D7))。
参见交叉奇偶校验位组(212),在本发明的一个实施例中,存储在RAID网格位置中被表示为Ir1的数据可通过下述方式计算:对行P奇偶校验位组(204)中的所有RAID网格位置应用P奇偶校验函数或者对列P奇偶校验位组(208)中的所有RAID网格位置应用P奇偶校验函数。例如,Ir1=fP(Pr1,Pr2,Pr3,Pr4)或Ir1=fP(Pc5,Pc6,Pc7,Pc8)。
在本发明的一个实施例中,存储在RAID网格位置中被表示为Ir2的数据可通过下述方式计算:对行Q奇偶校验位组(204)中的所有RAID网格位置应用P奇偶校验函数或者对列P奇偶校验位组(208)中的所有RAID网格位置应用Q奇偶校验函数。例如,Ir2=fP(Qr1,Qr2,Qr3,Qr4)或Ir2=fQ(Pc5,Pc6,Pc7,Pc8)。
在本发明的一个实施例中,存储在RAID网格位置中被表示为Ir3的数据可通过下述方式计算:对列Q奇偶校验位组(210)中的所有RAID网格位置应用P奇偶校验函数或者对行P奇偶校验位组(204)中的所有RAID网格位置应用Q奇偶校验函数。例如,Ir3=fP(Qc5,Qc6,Qc7,Qc8)或Ir3=fQ(Pc1,Pc2,Pc3,Pc4)。
在本发明的一个实施例中,存储在RAID网格位置中被表示为Ir4的数据可通过下述方式计算:对列Q奇偶校验位组(210)中的所有RAID网格位置应用Q奇偶校验函数或者对行Q奇偶校验位组(206)中的所有RAID网格位置应用Q奇偶校验函数。例如,Ir4=fQ(Qc1,Qc2,Qc3,Qc4)或Ir4=fQ(Qc5,Qc6,Qc7,Qc8)。
在本发明的一个实施例中,用于计算所有奇偶校验位组的值的P和Q奇偶校验函数可以对应于用于实现RAID 6的任何P和Q奇偶校验函数。
如以上讨论的,图2所示的RAID网格(200)表示RAID网格的概念布局。然而,当个别的RAID网格位置被写入至存储阵列时,各个RAID网格位置的相对位置可以跨一行或一列而变化。例如,参见行(214),当行(214)内的RAID网格位置被写入至存储阵列时,包括数据的RAID网格位置(由“D”表示)以及包括奇偶校验位数据的RAID网格位置(即,表示为“Pr”和“Qr”的RAID网格位置)的相对位置可为如下:<D1、D2Pr2、D3Qr2、D4>、<Pr2、Qr2、D1、D2、D3、D4>,或者行(214)内的任何其他排列。类似地,参见列(216),包括数据的RAID网格位置(由“D”表示)以及包括奇偶校验位数据的RAID网格位置(即,表示为“PC”和“QC”的RAID网格位置)的相对位置可为如下:<D5、D2、D6、Pc6、D6、Qc6>、<Pc6、D5、D2、Qc6、D6、D7>、或者列(216)内的任何其他排列。
RAID控制器(或系统中的另一实体)可以确定每一个RAID网格位置被写入至存储阵列中的哪一个物理地址。该确定可以在从客户端接收用于特定RAID网格的任何数据(表示为“D”)之前被作出。或者,该确定可以在将RAID网格位置写入至存储阵列之前被作出。
本领域的技术人员将理解,尽管图2示出RAID网格为6×6,但RAID网格可以使用任何其他尺寸来实现,而不背离本发明。
在本发明的一个实施例中,P奇偶校验位值是里德所罗门特征值(Reed-Solomonsyndrome),由此,P奇偶校验函数可对应于能产生里德所罗门特征值的任何函数。在本发明的一个实施例中,P奇偶校验函数是异或(XOR)函数。
在本发明的一个实施例中,Q奇偶校验位值是里德所罗门特征值,由此,Q奇偶校验函数可对应于能产生里德所罗门特征值的任何函数。在本发明的一个实施例中,Q奇偶校验位值是里德所罗门编码(Reed-Solomon code)。在本发明的一个实施例中,Q=g0·D0+g1·D1+g2·D2+...+gn-1·Dn-1,其中Q对应于参照图2定义的Q奇偶校验位值的任一个,g是场发生器,D的值对应于数据(可同时包括来自数据网格的值和/或来自包括P或Q奇偶校验位值的一个或多个行或列的值)。
本领域的技术人员将理解,尽管图2中的RAID网格包括每一行和每一列的P和Q奇偶校验位,但本发明的实施例可以使用更多或更少的奇偶校验位值来实现,而不背离本发明。例如,每一行和每一列可以仅包括P奇偶校验位值。在另一示例中,每一行和每一列可以包括三个奇偶校验位值。上述示例并非意图限制本发明。在本发明的一个实施例中,无论本发明的实现中使用的奇偶校验位值的数量为多少,每一个奇偶校验位值都是里德所罗门特征值。
图3示出根据本发明的一个实施例的RAID立方体(RAID cube)及RAID立方体的各个视图。如图3所示,RAID立方体(300)对应于RAID网格(302)的概念堆栈。如以上讨论的,RAID控制器(或系统中的另一实体)选择存储阵列内的物理地址,在物理地址内存储每一个RAID网格位置的数据。在本发明的一个实施例中,物理地址的选择可以根据IFD来确定,该RAID网格(或RAID立方体)是被设计为防止该IFD。换言之,物理地址可以以防止一个或多个IFD中的故障的方式而被选择。例如,如图3所示,给定RAID网格(302、304)的每个RAID网格位置(未示出)被写入至存储阵列(未示出)中的物理地址(或者将被写入至物理地址),该物理地址使用来自IFD 1和IFD 2的唯一值对(unique pair of values)来选择、但却与IFD 3具有相同值。例如,如果存储阵列中的数据被存储在NAND闪存中,其中NAND闪存是存储模块(包括多个NAND管芯)的一部分,则IFD可为如下:(i)IFD 1=存储模块;(ii)IFD2=通道;以及(iii)IFD 3=NAND管芯。因而,在给定的RAID网格中,每个RAID网格位置中的数据被写入至存储模块(IFD 1)和通道(IFD2)的唯一组合,但被写入至(在每一个存储模块上的)同一NAND管芯。本领域的技术人员将理解,本发明不限于上述三个独立的故障域(faultdomain)。而且,本领域的技术人员将理解,本发明不限于包括NAND闪存的存储阵列。
继续参见图3,如以上讨论的,RAID立方体(300)是RAID网格的概念堆栈。更具体而言,在本发明的一个实施例中,RAID立方体(300)可以包括(i)数据部分(316)和奇偶校验位部分(318),数据部分(316)包括两个或更多个RAID网格(304、306、308、310)(参见图2),奇偶校验部分(318)包括P奇偶校验位RAID网格(312)和Q奇偶校验位网格(314)。
在本发明的一个实施例中,数据部分(316)中的RAID网格(304、306、308、310)包括奇偶校验位数据(见图2),允许仅使用RAID网格内的数据(包括奇偶校验位数据)来恢复RAID网格内的数据。在本发明的一个实施例中,RAID立方体被设置以使得给定RAID网格(304、306、308、310)中的给定RAID网格位置的数据可以使用来自其他RAID网格(数据部分(316)和奇偶校验位部分(318)两者中)的数据(包括奇偶校验位数据)来恢复。在本发明的一个实施例中,RAID立方体的奇偶校验位部分(318)提供(enable)这一恢复机制。
在本发明的一个实施例中,P奇偶校验位RAID网格(312)与下方(underlying)的RAID网格(304、306、308、310)尺寸相同,其中,P奇偶校验位RAID网格内的每一RAID网格位置中的数据是通过对来自数据部分(316)中的RAID网格的数据(包括奇偶校验位数据)应用P奇偶校验函数(例如,异或函数)计算得到(见图7)。类似地,Q奇偶校验位RAID网格(314)与下方的RAID网格(304、306、308、310)尺寸相同,其中,Q奇偶校验位RAID网格内的每一RAID网格位置中的数据是通过对来自数据部分(316)中的RAID网格的数据(包括奇偶校验位数据)应用Q奇偶校验函数计算得到(见图7)。
图4示出根据本发明的一个实施例的数据结构。在本发明的一个实施例中,RAID控制器包括一个或多个数据结构以实现多维RAID方案。
在本发明的一个实施例中,RAID控制器包括数据结构,该数据结构跟踪客户端所提供的数据和存储阵列中这些数据的物理地址之间的映射。在本发明的一个实施例中,RAID控制器使用逻辑地址(400)和物理地址(402)之间的映射来跟踪上述信息,逻辑地址是例如<对象,偏移>(<object,offset>),逻辑地址从客户端的视角标识数据,物理地址标识存储阵列内的数据位置。在本发明的一个实施例中,映射可以是在由应用散列(hash)函数得到的散列值(例如,MD5,SHA 1)到<对象,偏移>之间的映射。本领域的技术人员将理解,可以使用任何形式的逻辑地址而不背离本发明。
在本发明的一个实施例中,RAID控制器包括数据结构,该数据结构跟踪每一RAID网格位置(404)(见图2)如何被映射到存储阵列中的特定物理地址(402)。
在本发明的一个实施例中,RAID控制器包括数据结构,该数据结构跟踪哪个RAID网格(包括数据部分和奇偶校验位部分中的RAID网格)(408)与哪个RAID立方体(406)相关联(假定RAID控制器正在实现3D RAID方案)、还跟踪哪个RAID网格位置(404)与每个RAID网格(408)相关联。
在本发明的一个实施例中,RAID控制器包括跟踪每一RAID网格位置(404)的状态(410)的数据结构。在本发明的一个实施例中,RAID网格位置的状态(410)可以被设为已填充(表示数据(或奇偶校验位数据)已被写入至RAID网格位置)或空(表示没有数据(或奇偶校验位数据)被写入至RAID网格位置)。在本发明的一个实施例中,如果RAID控制器已经标识了RAID控制器内的数据要被写入至RAID网格位置,则RAID控制器也可以将RAID网格位置的状态设为已填充(见图5,步骤506)。
在本发明的一个实施例中,RAID控制器包括跟踪RAID网格的几何形状(geometry)的数据结构。在本发明的一个实施例中,RAID网格的几何形状包括但不限于:RAID网格的尺寸以及与RAID网格的每一维度相关联的IFD。该数据结构(或另一数据结构)也可以跟踪RAID立方体的尺寸以及与RAID立方体的每一维度相关联的IFD。
在本发明的一个实施例中,RAID控制器包括数据结构,该数据结构跟踪每一RAID网格内的每一行和/或每一列内的每个P和Q奇偶校验位值(包括交叉奇偶校验位组中的奇偶校验位值(见图2))的位置。
在本发明的一个实施例中,RAID控制器包括数据结构,该数据结构跟踪RAID立方体的数据部分中的哪些RAID网格位置被用来分别计算P奇偶校验RAID网格和Q奇偶校验RAID网格中的每个P和Q奇偶校验位值。
图5A-5C示出根据本发明的一个或多个实施例的多个流程图。更具体而言,图5A-5C示出根据本发明的一个或多个实施例的一种用于将数据存储于存储阵列中的方法。尽管顺序地表示和描述了流程图中的各个步骤,但是本领域的技术人员将理解,一些或全部步骤可以以不同的顺序执行、可以被组合或省略、以及一些或全部步骤可以并行地被执行。在本发明的一个实施例中,图5A、5B和5C所示的方法可以并行地执行。
参见图5A,在步骤502中,从客户端接收到写入数据的请求。在本发明的一个实施例中,请求包括从客户端的视角标识数据的<对象,偏移>。在步骤504中,RAID控制器响应于该请求而将数据写入至RAID控制器存储器中的位置。
在步骤506中,RAID控制器更新数据结构(见图4)中的一个或多个。更具体而言,在本发明的一个实施例中,RAID控制器可以(i)选择存储阵列中的物理地址,从客户端接收到的数据将要被写入至该物理地址中、以及(ii)创建数据的<对象,偏移>和所选的物理地址之间的映射。在本发明的一个实施例中,在选择要将数据写入至其中的物理地址之前的某一时间点,RAID控制器指定(i)至少一个RAID网格、(ii)RAID网格的RAID网格位置、以及(iii)与每一RAID网格位置相关联的存储阵列中的物理地址。此外,RAID控制器可以将每一RAID网格位置的状态初始化为空。
在本发明的一个实施例中,图5B示出根据本发明的一个或多个实施例的一种用于将RAID网格写入至存储阵列的方法。参照图5B,在步骤508中,确定给定RAID网格(例如,图2中的202)内的数据网格是否被填充。在本发明的一个实施例中,该确定使用参照图4描述的数据结构中的一个或多个来作出。如果给定RAID网格内的数据网格被填充,则过程进行至步骤510;否则,过程结束。
在步骤510中,使用来自数据网格中RAID网格位置的适当值,为行P奇偶校验位组(例如图2中的204)中的每一RAID网格位置计算P奇偶校验位。在步骤512中,使用来自数据网格中RAID网格位置的适当值,为行Q奇偶校验位组(例如图2中的206)中的每一RAID网格位置计算Q奇偶校验位。在步骤514中,使用来自数据网格中RAID网格位置的适当值,为列P奇偶校验位组(例如图2中的208)中的每一RAID网格位置计算P奇偶校验位。在步骤516中,使用来自数据网格中RAID网格位置的适当值,为列Q奇偶校验位组(例如图2中的210)中的每一RAID网格位置计算Q奇偶校验位。
在步骤518中,使用来自行P奇偶校验位组(例如图2中的204)、行Q奇偶校验位组(例如图2中的206)、行Q奇偶校验位组(例如图2中的206)和列Q奇偶校验位组(例如图2中的210)中的一个或多个之中RAID网格位置的适当值,为交叉奇偶校验位组(例如图2中的212)中的所有RAID网格位置计算奇偶校验位值。
在步骤520,与RAID网格的每一RAID网格位置相关联的数据被写入至存储阵列中的适当的物理地址。在本发明的一个实施例中,用于每一RAID网格位置写入数据的物理地址是从参照图4描述的数据结构的一个或多个中获得。在步骤522中,更新参照图4描述的一个或多个数据结构以反映RAID网格已被写入至存储阵列。
在本发明的一个实施例中,如果RAID控制器正在实现3D RAID方案,则RAID控制器可以执行图5C所示的方法。参照图5C,在步骤524中,确定RAID立方体的数据部分是否被填充。如果RAID立方体的数据部分被填充,则过程继续至步骤526;否则,过程结束。在本发明的一个实施例中,使用参照图4描述的数据结构中的一个或多个来作出该确定。
在步骤526中,计算P奇偶校验RAID网格(例如图3中的312)中的每一RAID网格位置的P奇偶校验位值。在本发明的一个实施例中,使用从RAID立方体的数据部分(例如图3中的316)中的每一RAID网格获得的一个值,来计算每一RAID网格位置的多个值。
在步骤528中,计算Q奇偶校验RAID网格(例如图3中的314)中的每一RAID网格位置的Q奇偶校验位值。在本发明的一个实施例中,使用从RAID立方体的数据部分(例如图3中的316)中的每一RAID网格获得的一个值,来计算每一RAID网格位置的多个值。
在步骤530中,与奇偶校验RAID网格(例如,P奇偶校验RAID网格和Q奇偶校验RAID网格)中的每一RAID网格位置相关联的数据被写入至存储阵列中的适当物理地址。在本发明的一个实施例中,用于每一RAID网格位置写入数据的物理地址从参照图4描述的数据结构中的一个或多个获得。在步骤532中,更新参照图4描述的一个或多个数据结构以反映RAID立方体已被写入至存储阵列。
图6A-6C示出根据本发明的一个或多个实施例的用于填充RAID网格的示例。该示例并非意图限制本发明的范围。
参照图6A,来自客户端的数据(被表示为“D”)被写入至RAID网格内的数据网格(600)。一旦数据网格(600)被填充(如图6A所示),RAID控制器(未示出)为以下组中的RAID网格位置计算多个值:行P奇偶校验位组(602)、行Q奇偶校验位组(604)、行Q奇偶校验位组(606)和列Q奇偶校验位组(608)。图6B示出在计算了上述RAID网格位置的所有值之后的RAID网格。在此阶段,仅剩的要计算的值是交叉RAID组(610)中的RAID网格位置的值。图6C示出在计算了交叉RAID组(610)中的所有值之后的RAID网格。
在本发明的一个实施例中,在RAID控制器将RAID网格写入至存储阵列之前,给定RAID网格的所有RAID网格位置的所有值被存储于RAID控制器存储器中。
图7A-7D示出根据本发明的一个或多个实施例的用于填充RAID立方体的示例。该示例并非意图限制本发明。
考虑图7D所示的RAID立方体,RAID立方体包括RAID网格A(700)、RAID网格B(702)、RAID网格C(704)、P奇偶校验RAID网格(706)和Q奇偶校验RAID网格(708)。而且,RAID立方体中的每一RAID网格(700、702、704、706、708)包括跨IFD 1和IFD 2被写入、但却具有IFD3的定值的RAID网格位置。因而,在本发明的一个实施例中,RAID网格中的RAID网格位置(“目标RAID网格位置”)的值可以使用以下值来恢复:(i)仅使用目标RAID网格位置所处的行或列中的RAID网格位置的值;(ii)使用目标RAID网格位置所处的RAID网格内的任一RAID网格位置的值;或(iii)使用目标RAID网格位置所处的RAID立方体内的任一RAID网格位置的值。换言之,在本发明的一个实施例中,RAID网格和/或RAID立方体内的数据和奇偶校验位值的排列允许在目标RAID网格位置所处的每一行和每一列中存在多于两个错误时、恢复目标RAID网格位置中的值。
参照图7A,图7A包括组成RAID立方体的数据部分的三个RAID网格(700、702、704)。RAID网格(700、702、704)的每一个中的每一RAID网格位置包括一3元组(tuple),该3元组定义了RAID网格位置中的数据要被写入的存储阵列中的位置。在该示例中,3元组中的元素如下对应于IFD:<IFD1,IFD2,IFD3>。3元组说明存储阵列中的位置如何跨各个IFD被选择。具体而言,RAID网格A中的每一RAID网格位置包括IFD1和IFD2的唯一组合,但对于IFD3是同一值。例如,如果IFD1是存储模块,IFD2是通道,IFD3是NAND管芯,则3元组<4,2,1>指示特定RAID网格位置中的数据将使用通道2被写入至存储模块4中的NAND管芯1中的物理地址。类似地,3元组<2,3,1>指示特定RAID网格位置中的数据将使用通道3被写入至存储模块2中的NAND管芯1中的物理地址。
RAID网格B(702)和RAID网格C(704)以类似于RAID网格A(700)的方式被排列。然而,RAID网格B(702)中RAID网格位置的3元组中的IFD3的值不同于RAID网格A(700)的RAID网格位置的3元组中的IFD3的值。而且,RAID网格C(704)的RAID网格位置的3元组中的IFD3的值不同于RAID网格A(700)和RAID网格B(702)的RAID网格位置的3元组中的IFD3的值。
参照图7B,P奇偶校验RAID网格(706)中的每一RAID网格位置中的数据以类似于RAID网格A(700)、RAID网格B(702)和RAID网格C(704)的方式被排列。而且,如以上讨论的,使用来自RAID立方体中每一数据网格(即,RAID网格A(700)、RAID网格B(702)、RAID网格C(704))中的一个RAID网格位置的数据,计算P奇偶校验RAID网格(706)中的每一RAID网格位置中的数据值。例如,P奇偶校验RAID网格(706)中RAID网格位置<1,1,4>处的数据值是通过向来自以下RAID网格位置的数据应用P奇偶校验函数(例如,异或函数)而确定:(i)来自RAID网格A(700)<1,1,1>的数据、(ii)来自RAID网格B(702)<1,1,2>的数据、以及(iii)来自RAID网格C(704)<1,1,3>的数据。以类似方式计算P奇偶校验RAID网格(706)中的其他RAID网格位置中的数据值。
参照图7C,Q奇偶校验RAID网格(708)中的每一RAID网格位置中的数据以类似于RAID网格A(700)、RAID网格B(702)和RAID网格C(704)的方式被排列。而且,如以上讨论的,Q奇偶校验RAID网格(708)中的每一RAID网格位置中的数据值是使用来自RAID立方体中每一数据网格(即,RAID网格A(700)、RAID网格B(702)、RAID网格C(704))中的一个RAID网格位置的数据来计算。例如,Q奇偶校验RAID网格(708)中RAID网格位置<1,1,5>处的数据值是通过向来自以下RAID网格位置的数据应用Q奇偶校验函数(如上所述)而确定:(i)来自RAID网格A(700)<1,1,1>的数据、(ii)来自RAID网格B(702)<1,1,2>的数据、以及(iii)来自RAID网格C(704)<1,1,3>的数据。Q奇偶校验RAID网格(708)中的其他RAID网格位置中的数据值以类似方式计算。
图8示出根据本发明的一个或多个实施例的流程图。更具体而言,图8示出根据本发明的一个或多个实施例的用于从存储阵列获得数据的方法。
在步骤800中,从RAID网格位置获得数据。在本发明的一个实施例中,响应于来自客户端的请求而获得数据。在本发明的一个实施例中,请求可以指定<对象,偏移>(<object,offset>),而RAID控制器可以使用参照图4描述的数据结构中的一个或多个来确定存储阵列中将存储所请求的数据的物理地址。RAID控制器可随后从存储阵列获得所请求的数据。
在步骤802中,确定步骤800中获得数据是否被损坏。在本发明的一个实施例中,RAID控制器可以实现任意已知方法(例如,校验和)来确定数据是否已损坏。如果数据未损坏,则过程继续到步骤804;否则,过程继续到步骤806。在步骤804中,数据被返回至客户端,过程结束。在本发明的另一个实施例中,如果不能获得数据,例如由于永久存储器被损坏或未通电或读命令失败,则过程可继续至步骤806。
在步骤806中,RAID控制器确定从哪个RAID网格获得数据。在步骤808中,RAID控制器尝试使用包括该数据的RAID网格位置所处的行和/或列内的其他RAID网格位置,来重构数据。
在步骤810中,确定步骤808中的重构尝试是否成功。在本发明的一个实施例中,RAID控制器可以实现任意已知方法(例如,校验和)来确定重构尝试是否成功。如果步骤808中的重构尝试成功,则过程继续至步骤812;否则,过程继续至步骤814。在步骤812中,经重构的数据被返回至客户端,过程结束。
在步骤814中,RAID控制器尝试使用RAID网格中的其他行和/或列中的其他RAID网格位置来重构数据。在步骤816中,确定步骤814中的重构尝试是否成功。在本发明的一个实施例中,RAID控制器可以实现任意已知方法(例如,校验和)来确定重构尝试是否成功。如果步骤814中的重构尝试成功,则过程继续至步骤812;否则,过程继续至步骤818。
在步骤818中,RAID控制器尝试使用RAID立方体中的其他RAID网格来重构数据。在步骤820中,确定步骤818中的重构尝试是否成功。在本发明的一个实施例中,RAID控制器可以实现任意已知方法(例如,校验和)来确定重构尝试是否成功。如果步骤818中的重构尝试成功,则过程继续至步骤822;否则,过程继续至步骤824。在步骤822中,经重构的数据被返回至客户端,过程结束。在步骤824中,RAID控制器向客户端返回一错误(error),该错误表明RAID控制器不能从存储阵列取得(retrieve)所请求的数据。
本领域的技术人员将理解,使用RAID立方体中的其他RAID网格来重构数据仅出现在RAID控制器正在实现3D RAID方案的情况下。
图9A-9D示出根据本发明的一个或多个实施例的示例。该示例并非意图限制本发明的范围。参照图9A,考虑客户端从RAID网格位置(900)请求数据的场景。然而,来自RAID网格位置(900)的数据被损坏(由阴影表示)。RAID控制器首先尝试(根据图8中的步骤808)使用来自行(904)和/或列(902)中RAID网格位置的数据来重构RAID网格位置(900)中的数据。然而,由于行(904)和列(902)各自包括含有已损坏数据的三个RAID网格位置,因此RAID网格位置(900)中的数据不能仅使用来自行(904)和/或列(902)的数据而被恢复。
参照图9B,RAID控制器尝试(根据图8中的步骤814)使用来自RAID网格中其他RAID网格位置的数据来重构RAID网格位置(900)中的数据。在该示例中,RAID控制器重构行(906)中的所有已损坏数据。参照图9C,基于行(906)中已损坏数据的重构,RAID控制器能够重构列(908)中的所有已损坏数据。最后,参照图9D,基于列(908)中已损坏数据的重构,RAID控制器能够使用行(910)中的其他未损坏数据来重构RAID网格位置(900)中的数据。在本发明的一个实施例中,如图9B-9D所示的各个已损坏数据的重构作为图8中步骤814的一部分被执行。
尽管没有在图9A-9D中示出,但如果不能仅使用RAID网格中的数据来构造RAID网格位置(900)中的数据,如果RAID控制器正在实现3D RAID方案,那么RAID控制器就会尝试使用RAID立方体(未示出)内其他RAID网格中的数据来重构RAID网格位置(900)中的数据(根据图8中的步骤818)。
本领域的技术人员将理解,尽管本发明的各个示例是关于将数据按照(along)IFD存储于存储阵列中以及/或者将数据存储于NAND闪存而描述,然而本发明的实施例可以在任何多维磁盘阵列上实现而不背离本发明。例如,本发明的一个或多个实施例可以使用磁盘(磁性的、光学的、固态的或任何其他类型的存储设备)的二维阵列来实现,其中,RAID网格中每一RAID网格位置的数据被存储于单独的磁盘上。
而且,在本发明的一个实施例中,在RAID控制器正在使用磁盘的二维阵列实现3DRAID方案的情况下,RAID控制器可以使用以下n元组来存储每一RAID网格位置的数据:<磁盘x,磁盘y,逻辑块地址(LBA)z>,其中x和y是磁盘阵列的维度。而且,对于给定的RAID网格,LBA对于单个RAID网格的每一RAID网格位置而言是恒定的(constant);然而,LBA跨RAID立方体中的多个RAID网格是不同的。
以上使用二维磁盘阵列来实现本发明多个实施例的多个示例并非意图限制本发明的范围。
本领域的技术人员将理解,尽管已经参照2D RAID方案和3D RAID方案描述了本发明,但是本发明的实施例可以被扩展至任何多维的RAID方案。
本发明的一个或多个实施例可以使用由系统中的一个或多个处理器执行的指令来实现。而且,这种指令可对应于被存储于一个或多个非暂时性的计算机可读介质上的计算机可读指令。
尽管已经参照有限数量的实施例描述了本发明,但是受益于本文公开内容,本领域的技术人员将理解,可以设计不背离此处公开的本发明范围的其他实施例。因而,本发明的范围仅应受权利要求所限。