掌桥专利:专业的专利平台
掌桥专利
首页

改变纠错配置

文献发布时间:2024-04-18 19:58:26


改变纠错配置

背景技术

存储系统可以用于存储数据。为了避免数据丢失,数据可以分布在存储系统的多个存储设备上,并且可以添加冗余数据,使得在存储设备发生故障(部分或全部)时可以恢复原始数据。冗余数据可以是原始数据的副本的形式,或者可以是基于对原始数据应用纠错编码而产生的编码数据的形式。

附图说明

关于以下附图描述了本公开的一些实施方式。

图1是根据本公开的一些示例的包括多个故障域和柔性编码数据管理引擎的布置的框图。

图2是示出根据一些示例包括更大数量的故障域的布置的框图。

图3是根据一些示例的存储机器可读指令的存储介质的框图。

图4是根据一些示例的系统的框图。

图5是根据一些示例的过程的流程图。

在所有附图中,相同的附图标记指代相似但不一定相同的要素。附图不一定是按比例绘制的,并且一些部分的尺寸可以被放大以更清楚地图示所示的示例。此外,附图提供了与描述一致的示例和/或实施方式;然而,描述不限于附图中提供的示例和/或实施方式。

具体实施方式

在本公开中,除非上下文另外明确指示,否则使用术语“一个/一种(a/an)”或“所述(the)”旨在同样包括复数形式。同样地,当在本公开中使用时,术语“包括(includes/including/comprises/comprising)”、“具有(have/having)”指明存在所述元件,但不排除存在或添加其他元件。

如这里所使用的,“原始数据”可以指旨在通过由请求者发起的写操作来写入存储系统的数据版本,请求者可以是用户、程序或机器。

存储系统可以包括一定数量的物理存储设备。“存储系统”也可以被称为“存储池”、“存储阵列”或任何其他表示在存储布置中存在多个物理存储设备的术语。存储设备的示例可以包括以下各项中的任何一项或某种组合:基于磁盘的存储设备、固态驱动器等等。

对原始数据应用纠删编码会在内部产生冗余编码数据,该数据可以用于在数据丢失的情况下(比如由于存储设备(或存储设备的一部分)故障、程序出错、恶意软件攻击或其他原因)恢复原始数据。

可以用于保护数据的纠删码的一个示例是里德-所罗门(Reed-Solomon)纠删码。为了能够在丢失任何m>0个块的情况下恢复n(n>1)个原始数据块,里德-所罗门纠删编码的应用可以产生具有n+m个块的编码数据,其中,m>0。

这n+m个块存储在存储系统的n+m个相应存储设备上。每个编码数据块存储在存储系统的不同存储设备上。如这里所使用的“块”可以指从更大的数据集合中划分出来的任何数据部分(其中,该数据部分具有指定的大小)。如果较大的数据集合没有均匀划分为n个块,则最后一个块可以用零填充。

如果至少有n个编码数据块幸存,则从编码数据中恢复原始数据是可能的。如果n>>m(n远大于m),则添加m个冗余数据块的相对存储空间开销很小,并且数据恢复可以是高效的。

在一些示例中,存储系统中的d个存储设备可以用于存储编码数据,其中,d>n+2m。例如,编码数据的数据块可以分布在存储系统中的d个存储设备上进行存储。在存储系统中具有多于n+m个存储设备允许故障恢复系统保证即使几个存储设备出现故障并且在很长一段时间内不能被更换的情况下,故障恢复系统仍然可以提供期望级别的数据冗余。附加编码数据的数据块可以不同地分布在d个存储设备上,使得每个存储设备上可以存储大致相等的数据总量。

在其他示例中,不同于里德-所罗门纠删码的纠删码可以定义使用m个冗余数据块来保护n个原始数据块。也可以使用其他代码,如戈莱(Golay)码或博斯-乔赫里-霍克文黑姆(Bose-Chaudhuri-Hocquenghem,BCH)码。在最简单的极端情况下,基于对n个原始数据块(或n个原始数据块的一些修改版本)执行异或运算来计算冗余数据块。以这种方式使用异或形成的n+1代码可以用于构建RAID-4或RAID-5存储系统。

一般而言,n+m纠删码支持在多达m个块丢失的情况下恢复n个原始数据块。

传统上,一旦存储系统被配置为支持具体的纠删码,例如包括分布在n+m个块存储设备上的n+m个块的里德-所罗门纠删码,该数据的编码就是固定的,并且不会改变,除非该数据被完全复制成具有新冗余数据的新形式。在这样的示例中,改变数据的编码(如,将基于原始数据的编码数据分布在改变了数量的存储设备上,例如,由于添加存储设备以扩展存储系统的存储容量)将涉及基于整个原始数据集合来重新计算编码数据,这在计算上是昂贵的。

根据本公开的一些实施方式,提供了支持对数据进行柔性编码以用于数据保护的机制或技术,其中,当存储系统改变时,比如由于添加存储设备或移除存储设备,数据编码可以高效地即时改变(例如,使得编码数据可以分布在改变了数量的存储设备上,而不需要完全重新计算编码数据,并且在一些情况下,只需要重新排列数据和删除一些数据)。

更一般地,通过应用纠删编码(例如,里德-所罗门纠删编码)产生的柔性编码数据允许通过重新组织编码数据块来改变故障域的数量,其中,故障域数量的改变可以在不必重新计算任何编码数据的情况下实施,或者通过仅重新计算少量编码数据而大部分重新使用现有编码数据块来实施。柔性的编码数据可以被拉伸到更多的故障域或压缩到更少的故障域。

图1是包括故障域102的集合的示例布置的框图。“故障域”可以指与数据存储相关联的实体,其中,数据丢失可能潜在地发生在该实体处(例如,由于该实体的故障),并且其中,该故障域是使得能够从故障域中的数据丢失中进行数据恢复的故障域集合的一部分。在一些示例中,故障域102的集合可以包括存储系统中的存储设备的集合。在其他示例中,故障域102的集合可以包括服务器计算机或其他机器的集合、程序的集合(如虚拟机或应用程序等)等等。

在故障域102的集合包括服务器计算机集合的示例中,服务器计算机用于管理存储设备中的数据访问。每个服务器计算机可以连接到相应的存储设备集合(单个存储设备或多个存储设备),并且服务器计算机管理所连接的存储设备集合中的数据访问。在示例无共享布置中,连接到一个服务器计算机的存储设备集合不与任何其他服务器计算机共享。

服务器计算机集合中给定服务器计算机的故障会导致数据丢失。在n+m个故障域的集合中采用n+m纠删编码的示例中,纠删码(如里德-所罗门纠删码)可以支持从多达m个故障域中的数据丢失中进行数据恢复。

故障域102的集合可以是支持在存储设备中存储数据的整个系统100(或简称“系统”)的一部分。系统100可以包括耦接到存储设备的服务器计算机。例如,服务器计算机可以接收来自请求者的读写请求,以访问存储设备中的数据。可替代地,系统100可以由包括请求者无需通过如服务器计算机等中介就可以访问的存储设备的存储系统构成。

在示例中,系统100最初可以由第一数量的故障域102(例如,第一数量的服务器计算机、第一数量的存储设备等)构建。随着时间的推移,系统100中故障域的数量可能改变,这或者是由于一个或多个新故障域被添加到系统100中的扩展(如增加存储容量),或者是由于一个或多个现有故障域被移除的收缩(如由于数据丢失、维护、减少存储容量等)。在图1中,被添加或移除的(多个)故障域被表示为“(多个)改变故障域104”。因此,(多个)改变故障域104可以各自表示已经被添加的新故障域或者被移除的现有故障域。

注意,可能只有一个或多于一个改变的故障域104(例如,由于添加了多个新的故障域,或移除了多个现有故障域)。

在示例中,系统100可以从相对少量的故障域102开始。为了支持m=2(其中,响应于多达两个故障域102的丢失,数据恢复是可能的),非冗余块的数量被约束为使得n≤s-m,其中,s表示故障域102的数量。如果s相对较小(例如,s=4),则所使用的纠删编码技术可能相对低效,因为冗余故障域的数量(例如,2个)构成故障域102的总量(例如,4个)的很大一部分。可替代地,为了提高存储资源(例如,服务器计算机或存储设备)的使用效率,可以降低m的值,这减少了可容忍的故障数量。

随着故障域数量的增加(如通过添加新的故障域),通过增加n或通过增加可以容忍的故障数量(即,通过增加m)来修改纠删编码技术以获得效率可能变得可行(例如,通过从2+2纠删编码技术(n+m,其中n=2并且m=2)改变为3+2纠删编码技术(n+m其中n=3并且m=2))。

相反,故障域的数量可能会减少,如由于硬件故障或其他问题。例如,在难以进行定期维护的远程位置发生的硬件故障或其他问题可能意味着系统100将不得不在至少一个故障域丢失的情况下继续运行一段较长的时间。如果数据最初存储在n+n个故障域中,则一个或多个故障域的丢失可能需要重新配置系统100以使用n′+m个块,其中,n′

根据本公开的一些实施方式,系统100包括柔性编码数据管理引擎106,该引擎支持在故障域的数量改变(增加或减少)时重新配置在系统100中使用的纠删码。柔性编码数据管理引擎106能够改变纠删码,而不必基于存储在系统100中的整个数据集合从零开始重新计算纠删码。柔性编码数据管理引擎106支持在系统100按比例放大或缩小时重新配置纠删码。

如这里所使用的,“引擎”可以指硬件处理电路,该硬件处理电路可以包括微处理器、多核微处理器的核、微控制器、可编程集成电路、可编程门阵列或另一个硬件处理电路中的任何一项或某种组合。可替代地,“引擎”可以指硬件处理电路和可在硬件处理电路上执行的机器可读指令(软件和/或固件)的组合。

如图1中进一步描述的,系统100包括存储器108,其存储系统100中使用的当前纠删配置(其使用现有的纠删码)的信息110。存储器108可以使用存储器设备的集合(单个存储器设备或多个存储器设备)来实施。存储器设备可以包括以下各项中的任何一项或某种组合:动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪速存储器设备等。在其他示例中,当前纠删配置的信息110可以存储在另一种类型的存储装置中,如基于磁盘的存储装置、固态驱动器等。

柔性编码数据管理引擎106接收改变为新的纠删配置(其使用不同于现有纠删码的新纠删码)的请求112。请求112可以由用户、程序或机器提供。例如,由于系统100的配置的改变(如通过添加新的故障域或移除现有的故障域),远程计算设备处的用户可以通过网络向柔性编码数据管理引擎106发出请求。

在本公开的一些示例中,柔性编码数据管理引擎106可以将多个编码数据块114分组成段116。编码数据块114是通过对原始数据应用纠删编码而产生的编码数据块。对原始数据应用纠删编码产生了编码数据,该编码数据可以被划分成编码数据块114,以存储在多个故障域102上。

“段(segment)”可以指编码数据块114的集合(单个编码数据块或多个编码数据块)。在图1中,每个段116包括多个编码数据块114。根据本公开的一些实施方式,分段式纠删码(例如,分段式里德-所罗门纠删码)包括n+m个段,其中,每个段包括q≥1个编码数据块并被包含在相应的故障域中。在这种布置中,总共有nq+mq个数据块。相比之下,传统的纠删码(例如,传统的里德-所罗门纠删码)包括n+m个编码数据块。分段式纠删码最多可以防止m个段丢失。

在示例中,假设使用里德-所罗门纠删码对12个数据块进行编码,使得编码数据包括12+12个编码数据块b

[b

在示例中,上述编码数据块被分组成四个段,每个段包含q=6个数据块,如下所示:

段1=[b

段2=[b

段3=[b

段4=[b

这四个段可以用于实施2+2分段式纠删码(n+m,其中,n=2并且m=2)。在该纠删码中,每个段包括多个(在该示例中为q=6个)编码数据块,并且这四个段被包含在相应的四个故障域中。2+2分段式纠删码可以防止4个段中最多丢失任何2个,因为任何2个段包含12个编码数据块,这允许恢复12个原始数据块。

当通过添加(多个)新的故障域来扩展系统100时,可以重新组织分段式纠删码,以将纠删配置从当前的纠删配置(其使用现有的纠删码)改变为新的纠删配置(其使用新的纠删码)。当前的纠删配置可以使用上面的2+2分段式纠删码。如果添加了一个附加的故障域,则新的纠删配置使用3+2分段式纠删码(n+m,其中,n=3并且m=2),其中,编码数据块被重新分组成五个段,如下所示:

段1=[b

段2=[b

段3=[b

段4=[b

段5=[b

请注意,这5个段是通过简单地重新排列上述2+2代码中使用的数据块并丢弃4个编码数据块b

这五个段被包含在五个故障域中。如果再添加另一个故障域导致六个故障域,则新的纠删配置使用4+2分段式纠删码(n+m,其中,n=4并且m=2),其中,编码数据块被重新分组成六个段(被包含在相应的六个故障域中),如下所示:

段1=[b

段2=[b

段3=[b

段4=[b

段5=[b

段6=[b

请注意,这6个段是通过重新排列2+2或3+2代码中的数据块而形成的,除了之前丢弃的4个编码数据块(b

如果这六个故障域增加到14个故障域,则新的纠删配置使用12+2分段式纠删码(n+m,其中,n=12并且m=2),其中,编码数据块被重新分组成14个段(被包含在相应的14个故障域中),如下所示:

段1=[b

段2=[b

段3=[b

段4=[b

段5=[b

段6=[b

段7=[b

段8=[b

段9=[b

段10=[b

段11=[b

段12=[b

段13=[b

段14=[b

上述12+2分段式纠删码不使用编码数据块b

在这些示例中,分段式纠删码的重新组织通过以下方式来执行:简单地复制现有的编码数据块并丢弃一些编码数据块以形成编码数据块的新段来支持新的纠删码。

上述示例以24个编码数据块(即12+12,其中,n=12并且m=12)开始,其被编码使得12个编码数据块(例如,前n个块)可以从开始的24个编码数据块中的任何12个中恢复。由此可见,每个纠删配置包括原始24个编码块中的至少12个,使得能够在每个纠删配置中恢复12个原始数据块。

类似的过程可以用于将每段p个数据块的n+m个段纠删码转换为每段p′个数据块的任何n′+m′配置,只要n′p′≥np即可。进一步地,如果(n1+m′)p′≤(n+m)p,则转换仅涉及块的重新配置和删除。如果(n′+m′)p′>(n+m)p,则除了重新排列之外,还会对一些块进行重新计算。例如,从p=3的4+2配置转换为p′=4的3+2配置时,会重新计算块b

在当前纠删配置中,段116存储在第一数量的故障域102中。当前的纠删配置使得能够响应于指定数量(m)的故障域102中的丢失段进行错误恢复。

如图2所示,响应于请求112,柔性编码数据管理引擎106通过将段116重新组织成另外的段202来将纠删配置从当前纠删配置改变为新的纠删配置。

在图2的示例中,假设故障域102的第一数量(在改变之前)是4。假设添加了一个或多个新的故障域104(在图2的示例中示出了两个新的故障域104)。对于包括4个相应段116的4个故障域102,支持2+2纠删码。然而,通过添加两个新的故障域104,系统100被改变为包括第二数量的故障域(在图2的示例中为6个),其包括6个相应的段202,使得柔性编码数据管理引擎106可以从(现有纠删配置的)2+2纠删码改变为(新纠删配置的)4+2纠删码。

注意,每个段202包括与任何段116不同数量的编码数据块114。

在重新配置之后,柔性编码数据管理引擎106将段202存储在相应的故障域102和104(其构成第二数量的故障域)中,以提供新的纠删配置。

尽管本文讨论的示例涉及纠删编码的应用,但是根据将编码数据块重新排列成编码段的一些实施方式的技术或机制也可以应用于一般的错误编码以及纠删编码。在这种更一般的情况下,通常不知道哪个段可能已损坏,因此只能纠正

里德-所罗门纠删编码

下面描述里德-所罗门纠删编码。

原始数据可以写成具有n行的矩阵x,其中,每一行包含k(k≥1)个值,每个值都有w位。例如,w=8使得原始数据x或编码数据r中的每个值都是无符号的8位整数(通常称为字节),并且原始数据x包括n个块,每个块包含k个字节。

在其他示例中,w可以具有不同的非零值。

在该表示中,x的每一行都可以视为单个数据块。编码数据r是通过将编码矩阵A乘以原始数据x来计算的:

Ax=r。

编码矩阵A有n+m行,因此r的大小为(n+m)×k个字节。请注意,编码数据r具有n+m行(或者在一些示例中等同于n+m个块)。

对于里德-所罗门纠删编码,可以在模伽罗瓦域(modular Galois field)GF(2

在一些示例中,A表示系统码,其中,r中的前n个值与x中的值相同。系统码是一种当应用于输入数据时产生输出码的代码,该输出码的一部分由输入数据构成,并且另一部分包含冗余信息。

如果A表示系统码,则A可以表示为以下结构:

其中,I

F

(系统码A)乘以原始数据x产生以下编码数据r:

实际上,编码数据r可以写成原始数据x和由F

如果奇偶校验数据p相对于x很小(奇偶校验数据p的行数m远小于原始数据x的行数n),则计算p=F

然而,在本公开的其他示例中,A可以是非系统码。

在一些示例中,F

模伽罗瓦域GF(2

A′x=r′。

其中,A′(即A的子矩阵)的行对应于r′(即r的子集)的行。

如果矩阵的所有行和列都是线性独立的,则该矩阵是满秩的。

因为A′是满秩的,所以A′是可逆的,并且在给定r′的值和了解了哪n个行幸存(即,故障域的哪n个编码数据块没有丢失)的情况下,系统可以求解x。实际含义是,如果编码数据r的n+m行中的任何n行被保留,则可以恢复原始数据x的整个值。进一步地,由于m可能很小(例如,远小于n),因此A′可能与单位矩阵几乎相同,因此用于基于A′和r′推导出x的完整上下(LU)分解可以高效地执行。具体来说,因为A表示系统码,所以可以通过分解在A′中幸存的F

柔性的里德-所罗门纠删编码

下文描述了根据本公开的一些实施方式的柔性里德-所罗门纠删编码的一些示例。

根据本公开的一些示例,由柔性编码数据管理引擎106提供的柔性里德-所罗门纠删编码允许用比从原始数据的整个集合重新计算编码数据所使用的少得多的计算来改变纠删码。

在一些示例中,对于n+m里德-所罗门纠删码,m可以设置为1、2或3,并且n≤12。n的较大值(大于12)可能会导致编码效率的改善微不足道。上述约束允许构建基于里德-所罗门编码数据的相关纠删码系列,其最初可以以n=2开始,且n的值增加到3、4、6或12,例如通过简单地重新排列编码数据块(并丢弃一些编码数据块)。

增加n的值可以响应于增加故障域的数量来执行,如通过将服务器计算机或存储设备添加到系统100。

尽管上面给出了n和m的具体示例,但是应注意,在其他示例中,根据本公开的一些实施方式,柔性编码数据管理引擎106可以使用n和/或m的不同值。

在具体示例中,柔性编码数据管理引擎106可以定义12+12里德-所罗门纠删码的基本编码结构,逐行表示如下:

其中,x

上述12+12里德-所罗门纠删码的表示可以以分段式形式重新排列为:

其中,

这四个段

上述形式的12+12里德-所罗门纠删码可以用更简化的形式写成:

其中,

具有四个段的(在相应的4个故障域中)上述形式

如果添加了一个新的故障域以提供5个故障域,则上述纠删码

这5个段可以是图2中所示的段202的示例。

请注意,在这5个段中,奇偶校验数据p的行r

这5个段X

请注意,通过简单地重新排列原始数据的行x

类似的过程可以用于从3+2纠删码创建4+2纠删码,如下所述:

其中,奇偶校验数据p的行r

该4+2纠删(包括6个段)的输出可以通过重新排列原始数据的行x

类似的过程可以用于从4+2纠删码形成6+2纠删码,并且从6+2纠删码形成12+2纠删码。

根据本公开的一些实施方式,从n=2到n=3并最终到n=12的转换仅涉及复制和删除,而不涉及编码数据的计算。

在相反的方向上,为了减少故障域的数量(如通过移除一个或多个故障域),可能不得不执行少量的计算。例如,4+2纠删码可以转换为3+2纠删码,其中,对应于4+2纠删码的这6段X

请注意,对应于4+2纠删码的这6个段X

请注意,该示例中只计算了两行奇偶校验数据p,而不必重新计算奇偶校验数据p的所有行。

进一步的示例实施方式

图3是存储有机器可读指令的非暂态机器可读或计算机可读存储介质300的框图,所述机器可读指令在执行时使系统执行各种任务。该系统可以包括一个计算机或多个计算机。

机器可读指令包括第一段分组指令302,用于将多个编码数据块分组成第一段(例如,图1中的段116),其中,每个第一段包括这些多个块中的数个块,并且编码数据基于对输入数据应用纠删编码。

机器可读指令包括第一段存储指令304,用于以第一纠删配置将第一段存储在第一数量的故障域的相应故障域中,其中,第一纠删配置使得能够响应于多个故障域中指定数量(m)的故障域中丢失的编码数据进行错误恢复。

机器可读指令包括纠删配置改变指令306,用于通过将第一段重新组织成第二段(例如,图2中的202)来将纠删配置从第一纠删配置改变为第二纠删配置。每个第二段包括与第一段不同数量的编码数据块。

在一些示例中,将第一段重新组织成第二段以改变为第二纠删配置是在不基于输入数据重新计算编码数据的情况下执行的。

在一些示例中,重新组织丢弃多个编码数据块中的一些以产生多个编码数据块的剩余部分,其中,机器可读指令将多个编码数据块的剩余部分分组成第二段。

机器可读指令包括第二段存储指令308,用于以第二纠删配置将第二段存储在第二数量的故障域的相应故障域中,其中,第二数量不同于第一数量。

在一些示例中,根据第一纠删配置的第一段包括n

在一些示例中,机器可读指令通过将第二段重新组织为第三段来将纠删配置从第二纠删配置改变为第三纠删配置,这些第三段中的每个第三段包括与这些第二段中的第二段不同数量的编码数据块。

在一些示例中,第三纠删配置包括第三数量的故障域,第三数量不同于第二数量。

在一些示例中,机器可读指令将纠删配置从第二纠删配置改变为与少于第二数量的故障域的第三数量的故障域相关联的第三纠删配置,其中,将纠删配置从第二纠删配置改变为第三纠删配置包括将第二段中的编码数据块复制到第三段,以及重新计算要添加到第三段的编码数据块。

在一些示例中,重新计算要添加到第三段的编码数据块包括少于所述多个块的重新计算。

在一些示例中,这些第三段中的每个第三段比这些第二段中的第二段具有更大数量的编码数据块。

在一些示例中,第一数量的故障域包括第一数量的服务器计算机或第一数量的存储设备,并且第二数量的故障域包括第二数量的服务器计算机或第二数量的存储设备。

在一些示例中,多个编码数据块包括第一数量的输入数据块以及基于对输入数据应用编码矩阵而计算的第二数量的奇偶校验数据块。

图4是根据一些示例的系统400的框图。

系统400包括硬件处理器402(或多个硬件处理器)。硬件处理器可以包括微处理器、多核微处理器的核、微控制器、可编程集成电路、可编程门阵列、或另一硬件处理电路。

系统400包括存储介质404,该存储介质存储可在硬件处理器402上执行以执行各种任务的机器可读指令。可在硬件处理器上执行的机器可读指令可以指可在单个硬件处理器上执行的指令或可在多个硬件处理器上执行的指令。

存储介质404中的机器可读指令包括第一段分组指令406,用于将多个编码数据块分组成第一数量的段,第一数量的段中的每个段包括这些多个块中的数个块,并且编码数据基于对输入数据应用纠错编码(例如,纠删编码或其他纠错编码)。

存储介质404中的机器可读指令包括第一段存储指令408,用于以第一纠错配置将第一数量的段中的段存储在第一数量的故障域的相应的故障域中,其中,第一数量的段支持响应于第一数量的段的多达指定数量的丢失段进行数据恢复。

存储介质404中的机器可读指令包括纠错配置改变指令410,用于通过将第一数量的段重新组织为第二数量的段来将纠错配置从第一纠错配置改变为第二纠错配置,第二数量的段中的每个段包括与第一数量的段中的段不同数量的编码数据块。

存储介质404中的机器可读指令包括第二段存储指令412,用于以第二纠错配置将第二数量的段中的段存储在第二数量的故障域的相应故障域中,其中,第二数量不同于第一数量,并且第二数量的段中的段的数量不同于第一数量的段中的段的数量,并且其中,第二数量的段支持响应于第二数量的段的多达指定数量的丢失段进行数据恢复。

图5是可以由包括硬件处理器的系统执行的过程500的流程图。

过程500包括将多个纠删编码数据块分组(在502)成第一段,这些第一段中的每个第一段包括这些多个块中的数个块,并且纠删编码数据基于对输入数据应用里德-所罗门纠删编码。

过程500包括以第一纠删配置将第一段存储(在504)在第一数量的故障域的相应故障域中。第一纠删配置使得能够响应于指定数量(m)的故障域中丢失的纠删编码数据进行错误恢复。

过程500包括通过将第一段重新组织成第二段来将纠删配置从第一纠删配置改变(在506)为第二纠删配置,这些第二段中的每个第二段包括与这些第一段中的第一段不同数量的纠删编码数据块。

在一些示例中,改变纠删配置响应于由于存储硬件(例如,服务器计算机、存储设备等)的添加或移除而导致的故障域数量的改变。

过程500包括以第二纠删配置将第二段存储(在508)在第二数量的故障域的相应故障域中,其中,第二数量不同于第一数量,并且其中,第二纠删配置使得能够响应于指定数量(m)的故障域中丢失的纠删编码数据进行错误恢复。

存储介质(例如,图3中的300或图4中的404)可以包括以下各项中的任何一项或某种组合:半导体存储器设备,如动态或静态随机存取存储器(DRAM或SRAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)和闪速存储器;磁盘,如固定盘、软盘和可移动盘等;另一种磁介质,包括磁带;光学介质,如光盘(CD)或数字视频盘(DVD)等;或另一类型的存储设备。注意,上文讨论的指令可以在一个计算机可读或机器可读存储介质上提供,或者可替代地,可以在分布在具有可能多个节点的大型系统中的多个计算机可读或机器可读存储介质上提供。这种一个或多个计算机可读或机器可读存储介质被认为是物品(或制品)的一部分。物品或制品可以指任何制造的单个部件或多个部件。一个或多个存储介质可以位于运行机器可读指令的机器中、或者位于远程站点处,可以通过网络从所述远程站点下载机器可读指令以供执行。

在前述描述中,阐述了许多细节以使得理解本文中所公开的主题。然而,可以在没有这些细节中的一些细节的情况下实践实施方式。其他实施方式可以包括上文所讨论的细节的修改和变化。所附权利要求旨在覆盖这样的修改和变化。

相关技术
  • 一种闪存的纠错配置方法、纠错方法、系统、设备及介质
  • 一种参数可配置的自动检纠错电路及检纠错方法
技术分类

06120116495356