用于多维独立磁盘冗余阵列的方法和系统的制作方法

文档序号:6533337阅读:215来源:国知局
用于多维独立磁盘冗余阵列的方法和系统的制作方法
【专利摘要】一种用于存储数据的方法。该方法包括接收写入数据的请求。响应于该请求,选择RAID网格中的RAID网格位置来写入数据,将数据写入至存储器,更新数据结构以反映RAID网格位置被填充。该方法还包括使用数据结构来确定RAID网格中的数据网格是否被填充,其中,RAID网格位置在数据网格中,以及基于数据网格被填充的确定:使用数据来为RAID网格计算奇偶校验位值,确定与RAID网格位置相对应的永久存储器中的物理地址,将数据写入至与物理地址相对应的永久存储器中的物理位置,以及将奇偶校验位值写入至永久存储器。
【专利说明】用于多维独立磁盘冗余阵列的方法和系统
进旦冃月^
[0001]为了防止存储系统中的潜在数据丢失,实施一种复制方案通常是有利的。当前的复制方案仅能承受在存储系统内的数据不能被读取之前的有限错误量。


【发明内容】

[0002]总的来说,一方面,本发明涉及一种用于存储数据的方法。该方法包括:接收写入数据的请求;响应于该请求,选择RAID(Redundant Array of Independent Disk,独立磁盘冗余阵列)网格中的RAID网格位置来写入数据;将数据写入至存储器,其中数据被临时存储于存储器中;更新数据结构以指示RAID网格位置被填充;使用数据结构来确定RAID网格中的数据网格是否被填充,其中RAID网格的位置是在数据网格中;基于数据网格被填充的确定:使用数据来计算RAID网格的奇偶校验值,将数据写入至与物理地址相对应的永久存储器中的物理位置,以及将奇偶校验值写入至永久存储器。
[0003]总的来说,一方面,本发明涉及一种用于重构数据的方法。该方法包括:接收对第一数据的请求;获得第一数据,其中第一数据从永久存储器中的第一物理位置而获得、且其中第一物理位置与第一物理地址相关联;作出第一确定:第一数据是从由被破坏且未被获得的数据组成的组中选择的数据;基于第一确定,标识(identify)对应于第一物理地址的第一 RAID网格位置;标识第一 RAID网格与第一 RAID网格位置相关联;标识与第一 RAID网格相关联的RAID立方体(RAID Cube),其中RAID立方体包括第一 RAID网格和第二 RAID网格;作出使用第一 RAID网格中的至少一个值来重构第一数据的第一尝试,其中第一尝试失败;在第一尝试失败后,作出使用第二 RAID网格中的至少一个值来重构第一数据的第二尝试,其中第二尝试成功;以及将经重构的第一数据提供给客户端。
[0004]总的来说,一方面,本发明涉及一种用于重构数据的方法。该方法包括:接收对数据的请求;获得数据,其中数据从永久存储器中的物理位置获得且其中物理位置与物理地址相关联;作出第一确定:第一数据是从由被破坏且未被获得的数据组成的组中选择的数据;基于第一确定,标识对应于物理地址的第一 RAID网格位置;标识RAID网格与第一 RAID网格位置相关联;作出使用第二 RAID网格位置中的第一值来重构数据的第一尝试,其中第二 RAID网格位置位于从由RAID网格中的第一行和第一列组成的组中选择的至少一个网格中,其中第一 RAID网格位置是第一行和第一列的一部分,其中第一尝试失败;在第一尝试失败后,作出重构数据的第二尝试,其中第二尝试成功,且其中第二尝试包括:重构从由RAID网格中的第二行和第二列组成的组中选择的至少一个网格以获得RAID网格的经重构部分,其中RAID网格的经重构部分与从由第一行和第一列组成的组中选择的至少一个网格相交(intersect),使用第三RAID网格位置中的第二值来重构数据,其中第三RAID网格位置是RAID网格的经重构部分的一部分,其中第三RAID网格位置位于从由第一行和第一列组成的组中选择的一个网格中;以及将经重构的数据提供给客户端。
[0005]从以下描述和所附权利要求中,本发明的其他方面将显而易见。

【专利附图】

【附图说明】
[0006]图1示出根据本发明的一个实施例的系统。
[0007]图2示出根据本发明的一个实施例的RAID网格。
[0008]图3示出根据本发明的一个实施例的RAID立方体及RAID立方体的各个视图。
[0009]图4示出根据本发明的一个实施例的数据结构。
[0010]图5A-5C示出根据本发明的一个实施例的流程图。
[0011]图6A-6C示出根据本发明的一个或多个实施例的示例。
[0012]图7A-7D示出根据本发明的一个或多个实施例的示例。
[0013]图8示出根据本发明的一个或多个实施例的流程图。
[0014]图9A-9D示出根据本发明的一个或多个实施例的示例。

【具体实施方式】
[0015]现在将参照附图详细描述本发明的具体实施例。在本发明实施例的以下详细描述中,提出了许多具体细节以便提供本发明更为详尽的理解。然而,对于本领域技术人员显而易见的是,本发明可以无需这些具体细节而被实现。在其他实例中,未详细描述众所周知的特征以避免使描述变得不必要的复杂。
[0016]在下述对于图1-9D的描述中,在本发明的各个实施例中,关于一个附图描述的任一组件可以等效于关于任一其他附图描述的一个或多个被类似命名的组件。为简洁起见,将不会关于每一附图重复这些组件的描述。因此,每一附图的各个组件中的每一个和每一个实施例通过引用被结合,并且被假定为任选地存在于具有一个或多个被类似命名的组件的每一个其他附图中。此外,根据本发明的各个实施例,一个附图中对于这些部件的任何描述将被解释为一个可实现的可选实施例,以附加于、结合于、或者代替结合任何其他附图中对于一个对应的被类似命名的部件而描述的实施例。
[0017]总的来说,本发明的实施例涉及使用多维RAID方案复制数据的方法和系统。更为具体的,本发明的实施例提供了用于实现二维(2D)RAID方案和三维(3D)RAID方案的方法和系统。
[0018]使用2D RAID方案,实现这一 RAID方案的RAID网格内存储的数据可以在给定的RAID带(RAID stripe)中存在多于两个错误时被恢复。类似地,使用3D RAID方案,实现这一 RAID方案的RAID立方体中存储的数据可以在给定的RAID带中存在多于两个错误时被恢复。而且,在本发明的各个实施例中,当在多于一个独立故障域(IFD)中存在故障时,所有数据将被恢复。
[0019]在本发明的一个或多个实施例中,IFD对应于故障模式,故障模式导致给定位置处的数据不可访问。每一 IFD对应于存储阵列中的独立故障模式。例如,如果数据被存储在NAND闪存中,其中NAND闪存是存储模块(包括多个NAND管芯(die))的一部分,则IFD可以是⑴存储模块、(?)通道(即,存储模块控制器(未示出)用来将数据写入至NAND闪存的通道)、以及(iii) NAND管芯。
[0020]为本发明的目的,这里使用的术语“RAID”是指“独立磁盘冗余阵列(RedundantArray of Independent Disks)”。尽管“RAID”是指任何独立磁盘的阵列,但本发明的实施例可以使用任何类型的永久存储设备来实现,其中RAID网格位置(见例如图2)可以基于本发明的实现方式(见例如图3和4)跨一个或多个永久存储设备而分布。
[0021]图1示出根据本发明的一个实施例的系统。如图1所示,系统包括一个或多个客户端(100A、100M)、RAID控制器(104)、存储器(106)、可选的FPGA (102)以及存储阵列(108)。
[0022]在本发明的一个实施例中,客户端(100A、100M)是任何系统或系统上执行的进程,它包括向RAID控制器(104)发出读取请求或写入请求的功能。在本发明的一个实施例中,客户端(100AU00M)中的每一个可包括处理器(未示出)、存储器(未示出)和永久存储器(未示出)。在本发明的一个实施例中,RAID控制器(104)被配置成实现多维RAID方案,多维RAID方案包括以与多维RAID方案(见图5A-5C) —致的方式将数据写入至存储阵列、以及以与多维RAID方案(见图8) —致的方式从存储阵列读取数据(包括重构数据)。在本发明的一个实施例中,RAID控制器(104)包括处理器,处理器被配置成执行指令以实现本发明的一个或多个实施例,其中,指令被存储于非暂时性计算机可读介质(未示出)上,非暂时性计算机可读介质位于RAID控制器(104)内或与RAID控制器(104)可操作地连接。或者,RAID控制器(104)可以使用硬件来实现。本领域的技术人员将理解,RAID控制器(104)可以使用软件和/或硬件的任意组合来实现。
[0023]在本发明的一个实施例中,RAID控制器(104)可操作地连接至存储器(106)。存储器(106)可以是任何易失性存储器,包括但不限于:动态随机存取存储器(DRAM)、同步DRAM、SDR SDRAM和DDR SDRAM。在本发明的一个实施例中,存储器(106)被配置成在各种数据(包括奇偶校验数据)被存储于存储阵列中之前临时存储这种数据。
[0024]在本发明的一个实施例中,FPGA(102)(若存在)包括为将数据存储于存储阵列(108)中的目的而计算P和/或Q奇偶校验信息的功能以及/或者执行恢复使用多维RAID方案存储的已破坏数据所必要的各种计算的功能。根据本发明的一个或多个实施例,RAID控制器(104)可以使用FPGA(102)来履行(offload)各种数据的处理。在本发明的一个实施例中,存储阵列(108)包括多个个别的永久存储设备,包括但不限于:磁性存储设备、光学存储设备、固态存储设备、相变存储设备、任何其他适当类型的永久存储设备、或它们的任意组合。
[0025]本领域的技术人员将理解,尽管图1示出FPGA,但本发明可以没有FPGA而实现。而且,本领域的技术人员将理解,其他组件可以替代FPGA而被使用,而不背离本发明。例如,本发明可以使用以下各设备来实现:(多个)ASIC、(多个)图形处理单元(GPU)、(多个)通用处理器、能够为将数据存储于存储阵列中的目的而计算P和/或Q奇偶校验信息以及/或者执行恢复使用多维RAID方案存储的已破坏数据所必要的各种计算的任何其他硬件设备;包括硬件、固件和/或软件的组合的任何设备、或者它们的任一组合,其中所述硬件、固件和/或软件被配置成为将数据存储于存储阵列(108)中的目的而计算P和/或Q奇偶校验信息以及/或者执行恢复使用多维RAID方案存储的已破坏数据所必要的各种计算。
[0026]图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网格位置中的数据计算的(以下描述)行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网格位置的数据(以下描述)。
[0027]参见行(214),在本发明的一个实施例中,行(214)中存储在RAID网格位置中被表示为Pr的数据是通过对行(214)中所有包括数据的RAID网格位置应用P奇偶校验函数而计算的(例如,Pr =类似地,在本发明的一个实施例中,行(214)中存储在RAID网格位置中被表示为Qr的数据是通过对行(214)中所有包括数据的RAID网格位置应用Q奇偶校验函数而计算的(例如,Qr = fjDi,D2, D3, D4))。
[0028]参见列(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))。
[0029]参见交叉奇偶校验位组(212),在本发明的一个实施例中,存储在RAID网格位置中被表示为Irl的数据可通过下述方式计算:对行P奇偶校验位组(204)中的所有RAID网格位置应用P奇偶校验函数或者对列P奇偶校验位组(208)中的所有RAID网格位置应用P 奇偶校验函数。例如,Irl = fP(Prl, Pr2, Pr3, Pr4)或 Irl = fP(Pc5, Pc6, Pc7, Pc8)。
[0030]在本发明的一个实施例中,存储在RAID网格位置中被表示为Ir2的数据可通过下述方式计算:对行Q奇偶校验位组(204)中的所有RAID网格位置应用P奇偶校验函数或者对列P奇偶校验位组(208)中的所有RAID网格位置应用Q奇偶校验函数。例如,Ir2 =fp(Qrl.Qr2.Qrs.Qr4)或工『2 = fQ (Pc5, Pc6, Pc7, Pc8)。
[0031]在本发明的一个实施例中,存储在RAID网格位置中被表示为Ir3的数据可通过下述方式计算:对列Q奇偶校验位组(210)中的所有RAID网格位置应用P奇偶校验函数或者对行P奇偶校验位组(204)中的所有RAID网格位置应用Q奇偶校验函数。例如,Ir3 =fp(Qc5.Qc6.Qct.Qc8)或 Ir3 = fQ (Pcl, Pc2, Pc3, Pc4)。
[0032]在本发明的一个实施例中,存储在RAID网格位置中被表示为Ir4的数据可通过下述方式计算:对列Q奇偶校验位组(210)中的所有RAID网格位置应用Q奇偶校验函数或者对行Q奇偶校验位组(206)中的所有RAID网格位置应用Q奇偶校验函数。例如,Ir4 =
fQ(Qcl.Qc2.Qc3.Qc4)或 1『4 = fQ (Qc5, Qc6, Qc7.Qc8)。
[0033]在本发明的一个实施例中,用于计算所有奇偶校验位组的值的P和Q奇偶校验函数可以对应于用于实现RAID 6的任何P和Q奇偶校验函数。
[0034]如以上讨论的,图2所示的RAID网格(200)表示RAID网格的概念布局。然而,当个别的RAID网格位置被写入至存储阵列时,各个RAID网格位置的相对位置可以跨一行或一列而变化。例如,参见行(214),当行(214)内的RAID网格位置被写入至存储阵列时,包括数据的RAID网格位置(由“V’表示)以及包括奇偶校验位数据的RAID网格位置(即,表示为“Pr”和“Qr”的RAID网格位置)的相对位置可为如下XD。D2Pr2、D3Qr2、D4>、<Pr2、Qr2、Dp D2、D3、D4>,或者行(214)内的任何其他排列。类似地,参见列(216),包括数据的RAID网格位置(由“D”表示)以及包括奇偶校验位数据的RAID网格位置(即,表示为“PC”和“QC” 的 RAID 网格位置)的相对位置可为如下:〈D5、D2、D6、Pe6、D6、Qe6>、<Pe6、D5、D2、Qe6、D6、D7>、或者列(216)内的任何其他排列。
[0035]RAID控制器(或系统中的另一实体)可以确定每一个RAID网格位置被写入至存储阵列中的哪一个物理地址。该确定可以在从客户端接收用于特定RAID网格的任何数据(表示为“D”)之前被作出。或者,该确定可以在将RAID网格位置写入至存储阵列之前被作出。
[0036]本领域的技术人员将理解,尽管图2示出RAID网格为6X6,但RAID网格可以使用任何其他尺寸来实现,而不背离本发明。
[0037]在本发明的一个实施例中,P奇偶校验位值是里德所罗门特征值(Reed-Solomonsyndrome),由此,P奇偶校验函数可对应于能产生里德所罗门特征值的任何函数。在本发明的一个实施例中,P奇偶校验函数是异或(X0R)函数。
[0038]在本发明的一个实施例中,Q奇偶校验位值是里德所罗门特征值,由此,Q奇偶校验函数可对应于能产生里德所罗门特征值的任何函数。在本发明的一个实施例中,Q奇偶校验位值是里德所罗门编码(Reed-Solomon code)。在本发明的一个实施例中,Q =g°.Do+g1.Di+g2.D2+...+gn^.Dn_i,其中Q对应于参照图2定义的Q奇偶校验位值的任一个,g是场发生器,D的值对应于数据(可同时包括来自数据网格的值和/或来自包括P或Q奇偶校验位值的一个或多个行或列的值)。
[0039]本领域的技术人员将理解,尽管图2中的RAID网格包括每一行和每一列的P和Q奇偶校验位,但本发明的实施例可以使用更多或更少的奇偶校验位值来实现,而不背离本发明。例如,每一行和每一列可以仅包括P奇偶校验位值。在另一示例中,每一行和每一列可以包括三个奇偶校验位值。上述示例并非意图限制本发明。在本发明的一个实施例中,无论本发明的实现中使用的奇偶校验位值的数量为多少,每一个奇偶校验位值都是里德所罗门特征值。
[0040]图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 ofvalues)来选择、但却与IFD3具有相同值。例如,如果存储阵列中的数据被存储在NAND闪存中,其中NAND闪存是存储模块(包括多个NAND管芯)的一部分,则IFD可为如下:(i)IFD I =存储模块;(ii)IFD2 =通道;以及(iii) IFD 3 = NAND管芯。因而,在给定的RAID网格中,每个RAID网格位置中的数据被写入至存储模块(IFD I)和通道(IFD 2)的唯一组合,但被写入至(在每一个存储模块上的)同一 NAND管芯。本领域的技术人员将理解,本发明不限于上述三个独立的故障域(fault domain)。而且,本领域的技术人员将理解,本发明不限于包括NAND闪存的存储阵列。
[0041]继续参见图3,如以上讨论的,RAID立方体(300)是RAID网格的概念堆栈。更具体而言,在本发明的一个实施例中,RAID立方体(300)可以包括(i)数据部分(316)和奇偶校验位部分(318),数据部分(316)包括两个或更多个RAID网格(304、306、308、310)(参见图2),奇偶校验部分(318)包括P奇偶校验位RAID网格(312)和Q奇偶校验位网格(314)。
[0042]在本发明的一个实施例中,数据部分(316)中的RAID网格(304、306、308、310)包括奇偶校验位数据(见图2),允许仅使用RAID网格内的数据(包括奇偶校验位数据)来恢复RAID网格内的数据。在本发明的一个实施例中,RAID立方体被设置以使得给定RAID网格(304、306、308、310)中的给定RAID网格位置的数据可以使用来自其他RAID网格(数据部分(316)和奇偶校验位部分(318)两者中)的数据(包括奇偶校验位数据)来恢复。在本发明的一个实施例中,RAID立方体的奇偶校验位部分(318)提供(enable)这一恢复机制。
[0043]在本发明的一个实施例中,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)。
[0044]图4示出根据本发明的一个实施例的数据结构。在本发明的一个实施例中,RAID控制器包括一个或多个数据结构以实现多维RAID方案。
[0045]在本发明的一个实施例中,RAID控制器包括数据结构,该数据结构跟踪客户端所提供的数据和存储阵列中这些数据的物理地址之间的映射。在本发明的一个实施例中,RAID控制器使用逻辑地址(400)和物理地址(402)之间的映射来跟踪上述信息,逻辑地址是例如〈对象,偏移> (〈object, offset? ,逻辑地址从客户端的视角标识数据,物理地址标识存储阵列内的数据位置。在本发明的一个实施例中,映射可以是在由应用散列(hash)函数得到的散列值(例如,MD5,SHA I)到〈对象,偏移〉之间的映射。本领域的技术人员将理解,可以使用任何形式的逻辑地址而不背离本发明。
[0046]在本发明的一个实施例中,RAID控制器包括数据结构,该数据结构跟踪每一 RAID网格位置(404)(见图2)如何被映射到存储阵列中的特定物理地址(402)。
[0047]在本发明的一个实施例中,RAID控制器包括数据结构,该数据结构跟踪哪个RAID网格(包括数据部分和奇偶校验位部分中的RAID网格)(408)与哪个RAID立方体(406)相关联(假定RAID控制器正在实现3DRAID方案)、还跟踪哪个RAID网格位置(404)与每个RAID网格(408)相关联。
[0048]在本发明的一个实施例中,RAID控制器包括跟踪每一 RAID网格位置(404)的状态(410)的数据结构。在本发明的一个实施例中,RAID网格位置的状态(410)可以被设为已填充(表示数据(或奇偶校验位数据)已被写入至RAID网格位置)或空(表示没有数据(或奇偶校验位数据)被写入至RAID网格位置)。在本发明的一个实施例中,如果RAID控制器已经标识了 RAID控制器内的数据要被写入至RAID网格位置,则RAID控制器也可以将RAID网格位置的状态设为已填充(见图5,步骤506)。
[0049]在本发明的一个实施例中,RAID控制器包括跟踪RAID网格的几何形状(geometry)的数据结构。在本发明的一个实施例中,RAID网格的几何形状包括但不限于:RAID网格的尺寸以及与RAID网格的每一维度相关联的IFD。该数据结构(或另一数据结构)也可以跟踪RAID立方体的尺寸以及与RAID立方体的每一维度相关联的IFD。
[0050]在本发明的一个实施例中,RAID控制器包括数据结构,该数据结构跟踪每一 RAID网格内的每一行和/或每一列内的每个P和Q奇偶校验位值(包括交叉奇偶校验位组中的奇偶校验位值(见图2))的位置。
[0051]在本发明的一个实施例中,RAID控制器包括数据结构,该数据结构跟踪RAID立方体的数据部分中的哪些RAID网格位置被用来分别计算P奇偶校验RAID网格和Q奇偶校验RAID网格中的每个P和Q奇偶校验位值。
[0052]图5A-5C示出根据本发明的一个或多个实施例的多个流程图。更具体而言,图5A-5C示出根据本发明的一个或多个实施例的一种用于将数据存储于存储阵列中的方法。尽管顺序地表示和描述了流程图中的各个步骤,但是本领域的技术人员将理解,一些或全部步骤可以以不同的顺序执行、可以被组合或省略、以及一些或全部步骤可以并行地被执行。在本发明的一个实施例中,图5A、5B和5C所示的方法可以并行地执行。
[0053]参见图5A,在步骤502中,从客户端接收到写入数据的请求。在本发明的一个实施例中,请求包括从客户端的视角标识数据的〈对象,偏移 >。在步骤504中,RAID控制器响应于该请求而将数据写入至RAID控制器存储器中的位置。
[0054]在步骤506中,RAID控制器更新数据结构(见图4)中的一个或多个。更具体而言,在本发明的一个实施例中,RAID控制器可以(i)选择存储阵列中的物理地址,从客户端接收到的数据将要被写入至该物理地址中、以及(ii)创建数据的〈对象,偏移〉和所选的物理地址之间的映射。在本发明的一个实施例中,在选择要将数据写入至其中的物理地址之前的某一时间点,RAID控制器指定⑴至少一个RAID网格、(ii)RAID网格的RAID网格位置、以及(iii)与每一 RAID网格位置相关联的存储阵列中的物理地址。此外,RAID控制器可以将每一 RAID网格位置的状态初始化为空。
[0055]在本发明的一个实施例中,图5B示出根据本发明的一个或多个实施例的一种用于将RAID网格写入至存储阵列的方法。参照图5B,在步骤508中,确定给定RAID网格(例如,图2中的202)内的数据网格是否被填充。在本发明的一个实施例中,该确定使用参照图4描述的数据结构中的一个或多个来作出。如果给定RAID网格内的数据网格被填充,则过程进行至步骤510 ;否则,过程结束。
[0056]在步骤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奇偶校验位。
[0057]在步骤518中,使用来自行P奇偶校验位组(例如图2中的204)、行Q奇偶校验位组(例如图2中的206)、行Q奇偶校验位组(例如图2中的206)和列Q奇偶校验位组(例如图2中的210)中的一个或多个之中RAID网格位置的适当值,为交叉奇偶校验位组(例如图2中的212)中的所有RAID网格位置计算奇偶校验位值。
[0058]在步骤520,与RAID网格的每一 RAID网格位置相关联的数据被写入至存储阵列中的适当的物理地址。在本发明的一个实施例中,用于每一 RAID网格位置写入数据的物理地址是从参照图4描述的数据结构的一个或多个中获得。在步骤522中,更新参照图4描述的一个或多个数据结构以反映RAID网格已被写入至存储阵列。
[0059]在本发明的一个实施例中,如果RAID控制器正在实现3D RAID方案,则RAID控制器可以执行图5C所示的方法。参照图5C,在步骤524中,确定RAID立方体的数据部分是否被填充。如果RAID立方体的数据部分被填充,则过程继续至步骤526;否则,过程结束。在本发明的一个实施例中,使用参照图4描述的数据结构中的一个或多个来作出该确定。
[0060]在步骤526中,计算P奇偶校验RAID网格(例如图3中的312)中的每一 RAID网格位置的P奇偶校验位值。在本发明的一个实施例中,使用从RAID立方体的数据部分(例如图3中的316)中的每一 RAID网格获得的一个值,来计算每一 RAID网格位置的多个值。
[0061]在步骤528中,计算Q奇偶校验RAID网格(例如图3中的314)中的每一 RAID网格位置的Q奇偶校验位值。在本发明的一个实施例中,使用从RAID立方体的数据部分(例如图3中的316)中的每一 RAID网格获得的一个值,来计算每一 RAID网格位置的多个值。
[0062]在步骤530中,与奇偶校验RAID网格(例如,P奇偶校验RAID网格和Q奇偶校验RAID网格)中的每一 RAID网格位置相关联的数据被写入至存储阵列中的适当物理地址。在本发明的一个实施例中,用于每一RAID网格位置写入数据的物理地址从参照图4描述的数据结构中的一个或多个获得。在步骤532中,更新参照图4描述的一个或多个数据结构以反映RAID立方体已被写入至存储阵列。
[0063]图6A-6C不出根据本发明的一个或多个实施例的用于填充RAID网格的不例。该示例并非意图限制本发明的范围。
[0064]参照图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网格。
[0065]在本发明的一个实施例中,在RAID控制器将RAID网格写入至存储阵列之前,给定RAID网格的所有RAID网格位置的所有值被存储于RAID控制器存储器中。
[0066]图7A-7D不出根据本发明的一个或多个实施例的用于填充RAID立方体的不例。该示例并非意图限制本发明。
[0067]考虑图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被写入、但却具有IFD 3的定值的RAID网格位置。因而,在本发明的一个实施例中,RAID网格中的RAID网格位置(“目标RAID网格位置”)的值可以使用以下值来恢复:(i)仅使用目标RAID网格位置所处的行或列中的RAID网格位置的值;(ii)使用目标RAID网格位置所处的RAID网格内的任一 RAID网格位置的值;或(iii)使用目标RAID网格位置所处的RAID立方体内的任一 RAID网格位置的值。换言之,在本发明的一个实施例中,RAID网格和/或RAID立方体内的数据和奇偶校验位值的排列允许在目标RAID网格位置所处的每一行和每一列中存在多于两个错误时、恢复目标RAID网格位置中的值。
[0068]参照图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中的物理地址。
[0069]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的值。
[0070]参照图7B,P奇偶校验RAID网格(706)中的每一 RAID网格位置中的数据以类似于RAID网格A(700)、RAID网格B (702)和RAID网格C(704)的方式被排列。而且,如以上讨论的,使用来自RAID立方体中每一数据网格(S卩,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)〈l,l,l>的数据、(ii)来自RAID网格B(702)〈l,1,2>的数据、以及(iii)来自RAID网格C(704)〈l,l,3>的数据。以类似方式计算P奇偶校验RAID网格(706)中的其他RAID网格位置中的数据值。
[0071]参照图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)〈l,l,l>的数据、(ii)来自RAID网格B (702)〈1,1,2>的数据、以及(iii)来自RAID网格C(704)〈1,1,3>的数据。Q奇偶校验RAID网格(708)中的其他RAID网格位置中的数据值以类似方式计算。
[0072]图8示出根据本发明的一个或多个实施例的流程图。更具体而言,图8示出根据本发明的一个或多个实施例的用于从存储阵列获得数据的方法。
[0073]在步骤800中,从RAID网格位置获得数据。在本发明的一个实施例中,响应于来自客户端的请求而获得数据。在本发明的一个实施例中,请求可以指定〈对象,偏移> ?object, offset?,而RAID控制器可以使用参照图4描述的数据结构中的一个或多个来确定存储阵列中将存储所请求的数据的物理地址。RAID控制器可随后从存储阵列获得所请求的数据。
[0074]在步骤802中,确定步骤800中获得数据是否被损坏。在本发明的一个实施例中,RAID控制器可以实现任意已知方法(例如,校验和)来确定数据是否已损坏。如果数据未损坏,则过程继续到步骤804 ;否则,过程继续到步骤806。在步骤804中,数据被返回至客户端,过程结束。在本发明的另一个实施例中,如果不能获得数据,例如由于永久存储器被损坏或未通电或读命令失败,则过程可继续至步骤806。
[0075]在步骤806中,RAID控制器确定从哪个RAID网格获得数据。在步骤808中,RAID控制器尝试使用包括该数据的RAID网格位置所处的行和/或列内的其他RAID网格位置,
来重构数据。
[0076]在步骤810中,确定步骤808中的重构尝试是否成功。在本发明的一个实施例中,RAID控制器可以实现任意已知方法(例如,校验和)来确定重构尝试是否成功。如果步骤808中的重构尝试成功,则过程继续至步骤812 ;否则,过程继续至步骤814。在步骤812中,经重构的数据被返回至客户端,过程结束。
[0077]在步骤814中,RAID控制器尝试使用RAID网格中的其他行和/或列中的其他RAID网格位置来重构数据。在步骤816中,确定步骤814中的重构尝试是否成功。在本发明的一个实施例中,RAID控制器可以实现任意已知方法(例如,校验和)来确定重构尝试是否成功。如果步骤814中的重构尝试成功,则过程继续至步骤812 ;否则,过程继续至步骤818。
[0078]在步骤818中,RAID控制器尝试使用RAID立方体中的其他RAID网格来重构数据。在步骤820中,确定步骤818中的重构尝试是否成功。在本发明的一个实施例中,RAID控制器可以实现任意已知方法(例如,校验和)来确定重构尝试是否成功。如果步骤818中的重构尝试成功,则过程继续至步骤822 ;否则,过程继续至步骤824。在步骤822中,经重构的数据被返回至客户端,过程结束。在步骤824中,RAID控制器向客户端返回一错误(error),该错误表明RAID控制器不能从存储阵列取得(retrieve)所请求的数据。
[0079]本领域的技术人员将理解,使用RAID立方体中的其他RAID网格来重构数据仅出现在RAID控制器正在实现3D RAID方案的情况下。
[0080]图9A-9D示出根据本发明的一个或多个实施例的示例。该示例并非意图限制本发明的范围。参照图9A,考虑客户端从RAID网格位置(900)请求数据的场景。然而,来自RAID网格位置(900)的数据被损坏(由阴影表示)。RAID控制器首先尝试(根据图8中的步骤808)使用来自行(904)和/或列(902)中RAID网格位置的数据来重构RAID网格位置(900)中的数据。然而,由于行(904)和列(902)各自包括含有已损坏数据的三个RAID网格位置,因此RAID网格位置(900)中的数据不能仅使用来自行(904)和/或列(902)的数据而被恢复。
[0081]参照图9B,RAID控制器尝试(根据图8中的步骤814)使用来自RAID网格中其他RAID网格位置的数据来重构RAID网格位置(900)中的数据。在该示例中,RAID控制器重构行(906)中的所有已损坏数据。参照图9C,基于行(906)中已损坏数据的重构,RAID控制器能够重构列(908)中的所有已损坏数据。最后,参照图9D,基于列(908)中已损坏数据的重构,RAID控制器能够使用行(910)中的其他未损坏数据来重构RAID网格位置(900)中的数据。在本发明的一个实施例中,如图9B-9D所示的各个已损坏数据的重构作为图8中步骤814的一部分被执行。
[0082]尽管没有在图9A-9D中示出,但如果不能仅使用RAID网格中的数据来构造RAID网格位置(900)中的数据,如果RAID控制器正在实现3D RAID方案,那么RAID控制器就会尝试使用RAID立方体(未示出)内其他RAID网格中的数据来重构RAID网格位置(900)中的数据(根据图8中的步骤818)。
[0083]本领域的技术人员将理解,尽管本发明的各个示例是关于将数据按照(along) IFD存储于存储阵列中以及/或者将数据存储于NAND闪存而描述,然而本发明的实施例可以在任何多维磁盘阵列上实现而不背离本发明。例如,本发明的一个或多个实施例可以使用磁盘(磁性的、光学的、固态的或任何其他类型的存储设备)的二维阵列来实现,其中,RAID网格中每一 RAID网格位置的数据被存储于单独的磁盘上。
[0084]而且,在本发明的一个实施例中,在RAID控制器正在使用磁盘的二维阵列实现3DRAID方案的情况下,RAID控制器可以使用以下η元组来存储每一 RAID网格位置的数据:〈磁盘X,磁盘y,逻辑块地址(LBA)z>,其中X和y是磁盘阵列的维度。而且,对于给定的RAID网格,LBA对于单个RAID网格的每一 RAID网格位置而言是恒定的(constant);然而,LBA跨RAID立方体中的多个RAID网格是不同的。
[0085]以上使用二维磁盘阵列来实现本发明多个实施例的多个示例并非意图限制本发明的范围。
[0086]本领域的技术人员将理解,尽管已经参照2D RAID方案和3D RAID方案描述了本发明,但是本发明的实施例可以被扩展至任何多维的RAID方案。
[0087]本发明的一个或多个实施例可以使用由系统中的一个或多个处理器执行的指令来实现。而且,这种指令可对应于被存储于一个或多个非暂时性的计算机可读介质上的计算机可读指令。
[0088]尽管已经参照有限数量的实施例描述了本发明,但是受益于本文公开内容,本领域的技术人员将理解,可以设计不背离此处公开的本发明范围的其他实施例。因而,本发明的范围仅应受权利要求所限。
【权利要求】
1.一种包括指令的非暂时性计算机可读介质,所述指令在被执行时执行一种用于存储数据的方法,所述方法包括: 接收写入数据的请求; 响应于所述请求,选择独立磁盘冗余阵列(RAID)网格中的RAID网格位置来写入所述数据; 将所述数据写入存储器,其中所述数据被临时存储于所述存储器中; 更新数据结构以表明所述RAID网格位置已被填充; 使用所述数据结构确定所述RAID网格中的数据网格是否被填充,其中所述RAID网格位置位于所述数据网格中; 基于所述数据网格已被填充的确定: 使用所述数据为所述RAID网格计算奇偶校验位值,其中所述RAID网格包括行Q奇偶校验位组、行P奇偶校验位组、列Q奇偶校验位组、列P奇偶校验位组和交叉奇偶校验位组,其中每一奇偶校验位值与由行Q奇偶校验位组、行P奇偶校验位组、列Q奇偶校验位组、列P奇偶校验位组和交叉奇偶校验位组组成的组中选择的一个奇偶校验位组相关联,且其中与所述交叉奇偶校验位组相关联的奇偶校验位值是使用来自自行Q奇偶校验位组、行P奇偶校验位组、列Q奇偶校验位组、列P奇偶校验位组和交叉奇偶校验位组组成的组中选择的至少一个奇偶校验位组的奇偶校验位值来计算; 确定对应于所述RAID网格位置的永久存储器中的物理地址; 将所述数据写入至对应于所述物理地址的永久存储器中的物理位置;以及 将所述奇偶校验位值写入至所述永久存储器。
2.如权利要求1所述的非暂时性计算机可读介质,所述方法还包括: 确定RAID立方体的数据部分是否被填充,其中所述数据部分包括多个RAID网格,其中所述RAID网格是所述多个RAID网格之一; 基于所述数据部分被填充的确定: 使用所述数据部分中的值来为所述RAID立方体的奇偶校验部分计算奇偶校验位值;以及 将所述奇偶校验部分的奇偶校验位值写入至永久存储器。
3.如权利要求2所述的非暂时性计算机可读介质,其特征在于,所述奇偶校验部分包括P奇偶校验RAID网格和Q奇偶校验RAID网格。
4.如权利要求2所述的非暂时性计算机可读介质,其特征在于,所述RAID立方体包括第一维度、第二维度和第三维度,其中所述第一维度与第一独立故障域相关联,所述第二维度与第二独立故障域相关联,及所述第三维度与第三独立故障域相关联。
5.如权利要求4所述的非暂时性计算机可读介质,其特征在于,所述永久存储器中的物理位置至少部分使用所述第一独立故障域、所述第二独立故障域和所述第三独立故障域来指定。
6.如权利要求4所述的非暂时性计算机可读介质,其特征在于,所述永久存储器包括多个存储模块,其中所述多个存储模块的每一个包括固态存储器,且其中所述第一独立故障域是所述多个存储模块,所述第二故障域是所述多个存储模块的每一个中的多个通道,其中所述第三故障域是所述多个存储模块的每一个中的多个NAND管芯。
7.如权利要求1所述的非暂时性计算机可读介质,其特征在于,所述奇偶校验位值包括从由P奇偶校验位值、Q奇偶校验位值和交叉奇偶校验位值组成的组中选择的至少一个值。
8.如权利要求1所述的非暂时性计算机可读介质,其特征在于,所述RAID网格包括第一维度和第二维度,其中所述第一维度与第一独立故障域相关联,所述第二维度与第二独立故障域相关联。
9.如权利要求8所述的非暂时性计算机可读介质,其特征在于,所述永久存储器中的物理位置至少部分使用所述第一独立故障域和所述第二独立故障域来指定。
10.如权利要求9所述的非暂时性计算机可读介质,其特征在于,所述永久存储器包括多个存储模块,其中所述多个存储模块的每一个包括固态存储器,且其中所述第一独立故障域是所述多个存储模块,及所述第二故障域是所述多个存储模块的每一个中的多个通道。
11.如权利要求9所述的非暂时性计算机可读介质,其特征在于,所述永久存储器包括多个存储模块,其中所述多个存储模块的每一个包括固态存储器,且其中所述第一独立故障域是所述多个存储模块的每一个中的多个通道,及所述第二故障域是所述多个存储模块的每一个中的多个NAND管芯。
12.一种包括指令的非暂时性计算机可读介质,所述指令在被执行时执行一种用于重构数据的方法,所述方法包括: 接收对第一数据的请求; 获得所述第一数据,其中所述第一数据从永久存储器中的第一物理位置获得,其中所述第一物理位置与第一物理地址相关联; 作出所述第一数据是从由已损坏和未被获得的数据的组中选择的数据的第一确定; 基于所述第一确定: 标识与所述第一物理地址相对应的第一 RAID网格位置; 标识第一 RAID网格与第一独立磁盘冗余阵列(RAID)网格位置相关联; 标识与所述第一 RAID网格相关联的RAID立方体,其中所述RAID立方体包括所述第一RAID网格和第二 RAID网格; 作出使用所述第一 RAID网格中的至少一个值来重构所述第一数据的第一尝试,其中所述第一尝试失败; 在所述第一尝试失败之后作出第二尝试,以使用所述第二 RAID网格中的至少一个值来重构所述第一数据,其中所述第二尝试成功;以及将经重构的第一数据提供至客户端。
13.如权利要求12所述的方法,还包括: 接收对第二数据的请求; 获得所述第二数据,其中所述第二数据从永久存储器中的第二物理位置获得,其中所述第二物理位置与第二物理地址相关联; 作出所述第二数据被损坏的第三确定; 基于所述第三确定: 标识与所述第二物理地址相对应的第二 RAID网格位置; 标识所述第一 RAID网格与所述第二 RAID网格位置相关联; 作出使用所述第一 RAID网格中的至少一个值来重构所述第二数据的第三尝试,其中所述第三尝试失败; 在所述第三尝试失败之后作出第四尝试,以使用所述第二 RAID网格中的至少一个值来重构所述第二数据,其中所述第四尝试失败;以及 在所述第四尝试失败之后作出第五尝试,以使用来自所述RAID立方体的奇偶校验部分的至少一个值来重构所述第二数据,其中所述第五尝试成功;以及 将经重构的第二数据提供至客户端。
14.如权利要求1所述的非暂时性计算机可读介质,其特征在于,所述奇偶校验部分包括P奇偶校验位值和Q奇偶校验位值。
15.如权利要求14所述的非暂时性计算机可读介质,其特征在于,所述P奇偶校验位值使用与所述第一 RAID网格相关联的至少一个值以及与所述第二 RAID网格相关联的至少一个值来计算。
16.如权利要求12所述的非暂时性计算机可读介质,其特征在于, 所述第一 RAID网格包括从由所述第一 RAID网格的行Q奇偶校验位组、所述第一 RAID网格的行P奇偶校验位组、所述第一 RAID网格的列Q奇偶校验位组和所述第一 RAID网格的列P奇偶校验位组组成的组中选择的至少一个组;以及 其中,所述第二 RAID网格包括从由所述第二 RAID网格的行Q奇偶校验位组、所述第二RAID网格的行P奇偶校验位组、所述第二 RAID网格的列Q奇偶校验位组和所述第二 RAID网格的列P奇偶校验位组组成的组中选择的至少一个组。
17.如权利要求12所述的非暂时性计算机可读介质,其特征在于,所述第一RAID网格中的至少一个值是从由以下值组成的组中选择的一个值:对应于数据网格中的RAID网格位置的值、对应于和所述第一 RAID网格的行Q奇偶校验位组相关联的RAID网格位置的值、对应于和所述第一 RAID网格的行P奇偶校验位组相关联的RAID网格位置的值、对应于和所述第一 RAID网格的列Q奇偶校验位组相关联的RAID网格位置的值、以及对应于和所述第一 RAID网格的列P奇偶校验位组相关联的RAID网格位置的值,其中所述第一 RAID网格包括所述数据网格。
18.如权利要求12所述的非暂时性计算机可读介质,其特征在于,所述永久存储器是固态存储器。
19.一种包括指令的非暂时性计算机可读介质,所述指令在被执行时执行一种用于重构数据的方法,所述方法包括: 接收对数据的请求; 获得所述数据,其中所述数据从永久存储器中的物理位置获得,其中所述物理位置与物理地址相关联; 作出所述数据是从由已损坏和未被获得的数据的组中选择的数据的第一确定; 基于所述第一确定: 标识与所述物理地址相对应的第一 RAID网格位置; 标识RAID网格与所述第一 RAID网格位置相关联; 作出使用第二 RAID网格位置中的第一值来重构所述数据的第一尝试,其中所述第二RAID网格位置是位于从由所述RAID网格中的第一行和第一列组成的组中选择的至少一个之中,其中所述第一 RAID网格位置是所述第一行和所述第一列的一部分,其中所述第一尝试失败; 在所述第一尝试失败之后作出第二尝试以重构所述数据,其中所述第二尝试成功,且其中所述第二尝试包括: 重构从由所述RAID网格中的第二行和第二列组成的组中选择的至少一个以获得所述RAID网格的经重构部分,其中所述RAID网格的经重构部分与从由所述第一行和所述第一列组成的组中选择的至少一个相交; 使用第三RAID网格位置中的第二值来重构所述数据,其中所述第三RAID网格位置是所述RAID网格的经重构部分的一部分,且其中所述第三RAID网格位置是位于从由所述第一行和所述第一列组成的组中选择的一个之中;以及将经重构的数据提供至客户端。
20.一种包括指令的非暂时性计算机可读介质,所述指令在被执行时执行一种用于重构数据的方法,所述方法包括: 接收对数据的请求; 尝试从永久存储器中的物理位置获得所述数据,其中所述物理位置与物理地址相关联; 作出所述数据是从由已损坏和不可用的数据的组中选择的数据的确定; 基于所述确定: 使用奇偶校验位值来重构与第二物理地址相对应的第一独立磁盘冗余阵列(RAID)网格位置以获得第一值, 使用所述奇偶校验位值来重构与第三物理地址相对应的第二 RAID网格位置以获得第二值, 使用所述第一值来重构与第四物理地址相对应的第三RAID网格位置以获得第三值,以及 使用所述第二值和所述第三值来重构所述数据, 其中所述第一 RAID网格位置是位于RAID网格内的第一带中, 其中所述第二 RAID网格位置是位于所述RAID网格内的第二带中, 其中所述奇偶校验位值是位于所述RAID网格内的第四RAID网格位置中,以及 其中在所述第四RAID网格位置中有所述第一带和所述第二带的一部分;以及 将经重构的数据提供至客户端。
21.如权利要求20所述的非暂时性计算机可读介质,其特征在于,所述第一带是所述RAID网格中的行,所述第二带是所述RAID网格中的列。
22.如权利要求20所述的非暂时性计算机可读介质,其特征在于,所述第一带是所述RAID网格中的列,所述第二带是所述RAID网格中的行。
23.如权利要求20所述的非暂时性计算机可读介质,其特征在于,所述第四RAID网格位置是所述RAID网格中的交叉奇偶校验位组的一部分。
24.如权利要求20所述的非暂时性计算机可读介质,其特征在于,所述奇偶校验位值是交叉奇偶校验位值。
25.如权利要求20所述的非暂时性计算机可读介质,其特征在于,所述奇偶校验位值使用所述第一带中的至少一个其他奇偶校验位值来计算。
26.如权利要求25所述的非暂时性计算机可读介质,其特征在于,所述至少一个其他奇偶校验位值是从由行P奇偶校验位组和行Q奇偶校验位组组成的组中选择的组的一部分。
27.如权利要求20所述的非暂时性计算机可读介质,其特征在于,所述奇偶校验位值使用所述第二带中的至少一个其他奇偶校验位值来计算。
28.如权利要求27所述的非暂时性计算机可读介质,其特征在于,所述至少一个其他奇偶校验位值是从由列P奇偶校验位组和列Q奇偶校验位组组成的组中选择的组的一部分。
29.如权利要求20所述的非暂时性计算机可读介质,其特征在于,所述数据与第五RAID网格位置相关联,其中所述第五RAID网格位置不是所述第一带的一部分且不是所述第二带的一部分。
【文档编号】G06F11/10GK104272261SQ201380015047
【公开日】2015年1月7日 申请日期:2013年3月21日 优先权日:2012年3月23日
【发明者】J·S·邦威克 申请人:Dssd股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1