一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

针对存储系统中的数据恢复的编码的制作方法

2022-09-08 00:07:27 来源:中国专利 TAG:

针对存储系统中的数据恢复的编码


背景技术:

1.大多数大规模可行的数字数据存储介质系统使用冗余来帮助纠正更可能发生的错误类型。它们可以存在于单个数据扇区内、或跨单个介质内的多个数据扇区、或跨多个介质。例如,在单个扇区内,硬盘驱动器使用ldpc(低密度奇偶校验)作为小规模比特错误的纠错方法是很常见的。跨介质使用raid(独立磁盘的冗余阵列)来保护单个磁盘免受故障是常见的。
2.用于从单个介质内的扇区错误中恢复的方法和系统不太频繁地被使用并且倾向于更原始。例如,在磁盘驱动器上,保留小部分介质作为备用,并且在认为特定扇区的预分配区域出现失败时使用这些位置中的一个位置作为替代是常见的。如果备用区域太大或太小,这可能会有问题,因为它必须提前被选择,并且还会导致访问时延的不可预测性。在另一示例中,在基于磁带的系统上,写入后读取检查写入是否成功是常见的,如果不成功,则写入扇区的附加副本。这可能会有问题,因为它会导致磁带内的不可预测的容量。
3.更复杂和有效的方案在常规存储系统中是不可行的,因为它们必须处理数据被重写的情况,或者要写入整个介质中的全部数据不能同时获得的情况。此外,由于对跨多个介质的保护的需要,例如由于磁盘驱动器和磁带的相对高的失败率,它们通常变得不必要。
4.worm(一次写入多次读取)存储系统是其中所有数据在一次操作中写入一次的存储形式。尽管诸如cd和dvd两者的经典光学介质都是worm,并且在一次操作中写入所有数据,但是它们不倾向于使用复杂的介质范围冗余系统,因为需要在读取时以固定速率向例如音频或视频播放设备提供数据,和/或需要在消费者场景中保持成本极低的播放设备。
5.另一已知类型的光学worm存储使用石英玻璃作为存储介质。在超快激光(通常是飞秒激光)的帮助下,信息被印在结构上。这种激光具有在非常有限的空间内引导大量能量的能力,以受控和永久的方式改变该区域中玻璃的结构,并且因此在那里存储信息。一些这样的系统允许在介质的三维上存储数据,在这种情况下,给定位或符号的位置可以被称为体素(voxel)。然后,读取的工作原理是使用偏振敏感显微镜将光照射到玻璃的特定部分,并且通过测量观察到的光的特定属性来推断写入该区域的数据。


技术实现要素:

6.根据本文公开的一个方面,提供了一种从存储介质读取以便恢复信息扇区组的计算机实现的方法,每个信息扇区包括相应的信息有效载荷。该存储介质存储冗余数据,该冗余数据包括针对所述组的多个单独的冗余码,每个冗余码是项的线性和,该和中的每个项是来自所述组中信息扇区的不同的相应的信息扇区的信息有效载荷,不同的相应的信息扇区由针对冗余码的系数集中的相应系数加权。该方法包括,在冗余数据已经被存储在存储介质上之后,执行解码过程,包括:标识来自所述组的k’个信息扇区集,相应的信息有效载荷将基于冗余数据而从k’个信息扇区集中被恢复;选择冗余码中的k’个冗余码;确定方块矩阵e,其中每个矩阵列包括k’个信息扇区中的不同信息扇区的相应系数,并且每个矩阵行包括k’个冗余码中的不同冗余码的系数集,反之亦然;确定矩阵d是e的矩阵逆;以及通过计
算vi=∑j(d
i,j
·rj
)来恢复k’个信息有效载荷,其中vi是信息有效载荷,i是表示相应信息扇区的索引,并且j是表示每个冗余码rj的索引,其中d
i,j
是d的矩阵元素,并且∑j是k’个冗余码的和,该计算针对k’个信息扇区中的每个信息扇区的i来执行。
7.提供本发明内容是为了以简化形式介绍概念的选择,这些概念将在下面的具体实施方式中进一步描述。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用来限制所要求保护的主题的范围。所要求保护的主题也不限于解决本文指出的任何或所有缺点的实现。
附图说明
8.为了帮助理解本公开的实施例并且示出如何实施这样的实施例,仅作为示例,参考附图,其中:
9.图1是数据存储方案的示意表示,
10.图2是将数据存储到包括冗余数据的介质的方法的流程图,
11.图3是从包括基于冗余数据的恢复的介质读取数据的方法的流程图,以及
12.图4示意性地示出了具有冗余数据的行和列两者的方案。
具体实施方式
13.下文描述具有特定但非排他的应用于worm(一次写入多次读取)存储系统(诸如,石英玻璃)的网络存储和恢复方法,其中所有数据在一次操作中一次写入,并且其中介质特别耐用。这允许更好的介质内冗余错误恢复方法和系统。可以关于石英玻璃介质来描述实施例,但是所公开的方法也可以应用于任何worm介质,其中在写入时所有要写入的数据都可用于处理。
14.更一般地,所公开的方法可以与包括更传统的光盘、磁介质或电子存储介质的任何介质一起使用。然而,在实践中,它们倾向于用于实时或动态地读取和写入小部分数据。例如,尽管诸如cd和dvd两者的经典光学介质都是worm,并且在一次操作中写入所有数据,但是它们不倾向于使用复杂的介质范围冗余系统,因为需要在读取时以固定速率向例如音频或视频播放设备提供数据,和/或需要在消费者场景中保持成本极低的播放设备。本公开的方法对于长期存储系统具有特定但非排他的适用性,诸如在档案存储系统中,其中可以接受一次写入相对大量的数据,并且在需要恢复的情况下一次读取相对大量的数据。所公开的方法可以用于例如石英玻璃数据储存库中和/或基于云的档案系统中。
15.编码方法将待存储的数据划分为扇区,该扇区可以被称为内容扇区或信息扇区。信息扇区用于构建这些扇区中的信息的随机线性组合。这些组合可以被称为恢复扇区或冗余扇区。信息扇区和冗余扇区两者都可以存储在存储介质上。备选地,可以经由单独的介质使读取器知道冗余信息。无论哪种方式,在读取过程中,都会应用用于确定哪些扇区已被正确读取以及哪些扇区丢失的方法。然后,通过反转随机线性组合,使用正确读取的冗余扇区来恢复丢失的信息扇区。这一过程类似于对线性方程组求逆。
16.作为可选的优化,信息扇区可以被分组,冗余编解码操作可以独立应用于每个分组。该方法以最小的纠错性能降级减少了前述编解码的计算开销。备选地,可以将整个介质上的所有扇区编码为一个组。
17.用于线性组合的系数集可以是预定的。作为增加编码灵活性的另一可选扩展,系数可以与编码扇区一起存储。然而,这将具有相对较大的存储成本。因此,取而代之的是,为了减少开销,可以从确定性伪随机过程中生成系数。因此,存储初始化随机过程的种子以及产生系数的随机过程的索引就足够了。
18.在存储和网络应用两者中,编解码是提供可靠性的常见技术。代码的不同之处在于它们组合原始内容以构建编码的信息的方式。这些差异旨在权衡可靠性性能、编解码开销、编码和解码计算复杂度以及其他因素。本公开的方法类似于us 7,756,051中公开的网络编解码技术,用于编码要在网络上传输的数据以用于内容分发,而不是存储。然而,现有的网络编码技术是“非系统的”,这意味着有效载荷数据本身是由添加冗余的相同编码方案编码的,并且总是理所当然地需要解码以提取有效载荷信息。而在本公开的方法中,编码是“系统的”,这意味着有效载荷保持未被应用于添加冗余的编码方法进行编码(即使有效载荷碰巧由某种其他正交的较低层编码方案进行编码,诸如用于压缩和/或加密目的而不是冗余)。相反,冗余数据与有效载荷信息分开,例如被追加在单独的冗余扇区中,或者甚至在单独的介质上传送。在系统的情况下,仅在需要恢复有效载荷信息中的错误的情况下才需要相应的解码方法,而不一定对于每次读取。
19.与其他编码技术相比,网络编解码针对广泛的故障场景提供了非常好的可靠性性能(即,可以以适当的存储开销以高概率进行解码),并且还允许构造任意数目的编码扇区。为了提供这些好处,它可能会牺牲计算性能。本公开将现有网络编码型编解码方案的范围扩展到包括存储的应用。
20.因此,所公开的用于构造纠错码的方法为诸如档案存储的应用提供了可靠的数据恢复,并且可以提供可量化的可靠性保证。在实施例中,与现有系统相比,它还减少了存储开销。
21.在实施例中,附近的存储元素(各自存储单个比特或其他这样的基本数据符号)可以被分组在一起以限定扇区。扇区通常存储几十千字节的数据,并且通常大小相同。与所有存储系统一样,由于写入和读取缺陷,扇区中的元素在写入或读取时可能有错误。为了解决这个问题,冗余信息存储在每个扇区中,这允许检测扇区中的错误,并且通常纠正这些错误。此外,可以以散列或校验和的形式存储完整性检查,以便确定前述校正是否成功。有许多用于确定完整性的已知算法。该扇区中的一些可用字节可以被保留以存储完整性检查信息。在读取扇区中的所有元素并且检查完整性之后,然后可以确定该扇区整体是否已被正确读取(以非常高的概率),或者该扇区中是否存在错误。然后,当前公开的解码方法可以恢复包含错误的扇区。
22.该方法包括生成(在实施例中,存储在介质中)可以用于恢复错误扇区的专门制作的代码。在实施例中,这些冗余码可以存储在介质上它们自己的冗余扇区中。因此,可以在介质中保留一些扇区,用于存储特殊冗余扇区,而不是用户数据。为了恢复丢失的用户扇区,将冗余扇区与已被正确读取的其他用户扇区组合。
23.在一种实现中,可以使用任何冗余扇区来恢复任何用户扇区。换言之,跨整个介质被存储的所有用户数据可以用来构建所有冗余扇区,因此,每个冗余扇区可以帮助恢复每个用户扇区。即使这种方法是可能的,但在实践中,它在计算上可能是不可行的。因此,作为优化,可以改为将用户扇区分成组,并且编码方法构建特定于组的冗余扇区。在这种情况
下,仅在给定组内部执行恢复,将来自单个组的用户扇区与来自同一组的冗余扇区组合以恢复(该组的)丢失的用户扇区。这些组的大小(用户和冗余扇区的数目)是设计参数,它取决于预期的扇区读取失败率、期望的可靠性目标和其他实际问题。
24.现在参考图1至图4更详细地讨论本公开的技术的一些示例实施例。
25.图1示出了将数据布置到存储介质上的扇区中的方案。数据由存储计算机存储。存储介质可以是存储计算机的组成部分,或者可以是外部或可移动介质。存储计算机可以包括位于一个或多个位置的一个或多个计算机单元(在一个或多个外壳中)。读取计算机可以读取数据并且恢复错误。读取计算机可以是与存储计算机相同的计算机或不同的计算机,或者在多个计算机单元上实现的情况下,可以共享一个或一些相同的单元。在多个计算机单元的情况下,适当的分布式计算技术本身将是本领域技术人员所熟悉的。存储和读取计算机的该计算机单元或每个计算机单元包括分别运行所公开的存储和读取方法的一个或多个处理器。该处理器或每个处理器可以包括一个或多个核。这样的处理器的示例包括通用cpu(中央处理单元);和协处理器、加速器处理器或专用处理器,诸如专用存储器处理器,或重新调整用途的gpu(图形处理器)、dsp(数字信号处理器)或密码处理器等。
26.在实施例中,存储介质是基于石英玻璃的存储介质。然而,这并不是限制性的。更一般地,存储介质可以是任何worm(一次写入、多次读取)介质、或rom(只读存储器)、甚至是可重写(但非易失性)存储器。rom和worm之间的区别在于,rom是在工厂中写入的,而worm只能由最终用户(消费者)在现场一次写入。存储介质可以是诸如石英玻璃或光盘(例如,cd或dvd)的光学介质;诸如硬盘驱动器、软盘或磁带的磁介质;或例如硬连线rom、eprom(可擦除可编程rom)、eeprom(电可擦除可编程rom)、或闪存或固态驱动器的电子介质。其他类型的存储介质也可能是本领域技术人员所熟悉的,并且最一般地,所公开的方法适用于用于存储数据的任何类型的计算机可读介质。
27.在实施例中,存储介质可以包括单个、连续的可写材料片,例如,单片石英玻璃或单个磁盘等。备选地,该介质可以包括多于一片的可写材料,例如,多片玻璃或多个磁盘等。在后一种情况下,除了盘片内的大量扇区的冗余之外,所公开的方案还可以提供跨多个单独的可写材料片(“盘片”)的冗余。例如,该应用空间在档案存储中可能特别重要。
28.无论介质采用何种形式,要存储的信息在信息扇区组si,i=1

n中划分。在本文使用的符号表示中,i表示组内的相应信息扇区si的索引,并且组中有n多个信息扇区。出于符号表示的目的,索引i被表示为从1到n,以表示它可以取指示任何n个信息扇区中的值。这并不一定意味着读或写计算机用来索引扇区的实际数字参数在数字上从1到n(例如,在实践中这可以以二进制形式从0到n-1)。可以理解,这只是一种方便的数学表示或符号表示。
29.n个信息扇区组可以是介质(例如,玻璃、盘或磁带等)上的所有信息扇区,或者可以仅是该介质上的信息扇区的多个组中的一个组。在后一种情况下,以下方案可以仅应用于组中的一个组,或者独立地应用于某些组或所有组中的每个组。下文描述给定组内的存储和编码。
30.每个信息扇区si代表数据的单独部分。每个信息扇区si存储在存储介质的不同的相应物理扇区中。在实施例中,物理扇区中的每个物理扇区可以彼此大小相同。在实施例中,存储在物理扇区上的信息扇区可以各自具有彼此相同的大小。在实施例中,组内的物理扇区可以彼此连续,或者可以与一个或多个其他组的扇区交错。每个物理扇区包括多个存
储元素,各自用于存储数据的单个基本符号(例如,位)。例如,在3d石英玻璃介质中,这些将是单个体素。在实施例中,给定物理扇区内的存储元素可以形成元素的连续系列或阵列,例如体素的连续矩形或矩形长方体。然而,这不是必要的,扇区可以只是不绑定到物理存储元素的底层物理布局的逻辑扇区。
31.每个信息扇区si至少包括信息有效载荷vi,即数据内容(用户数据)。这是用户期望存储的实际数据。在实施例中,每个信息有效载荷可以包括组成信息值的向量,并且作为构成信息值的向量来处理。因此,信息有效载荷vi在本文也可以被称为信息向量。
32.读取计算机还将需要某种机制来检测每个信息扇区si的信息有效载荷vi是否已被正确读取。为了实现这一点,可以将相应的错误检测码zi与信息有效载荷vi中的每个信息有效载荷相关联。在实施例中,这与其相应的信息有效载荷vi一起存储在每个单个信息扇区si中,例如追加到相应的有效载荷vi。然而,备选地,它原则上可以存储在同一介质上的其他地方,或者甚至可以存储在阅读计算机的不同介质上的其他地方。无论存储在哪里,错误恢复码zi都是一小段冗余数据,诸如奇偶校验比特或校验和,其允许读取计算机在读取有效载荷和错误检测码时检测(但不一定校正)相应信息有效载荷vi中的错误。这可以包括在最初将信息有效载荷vi写入介质时发生的错误、或者由于在写入与读取之间的时间在介质上劣化而发生的错误、或者在读取过程中发生的读取错误、或者这些中的任何两个或更多个的组合。
33.除了信息扇区si和错误检测码zi之外,还计算多个冗余码rj,j=1

k。这些使得能够在读取时检测到任何类型的错误(写入、劣化或读取)的情况下恢复信息有效载荷vi中的一个或多个信息有效载荷,例如基于(多个)错误检测码或者甚至仅仅是完全读取故障。在实施例中,每个信息有效载荷可以包括构成元素的向量,并且可以作为构成元素的向量来处理。因此,恢复码rj在本文也可以被称为冗余向量。
34.注意:错误检测码zi也是冗余数据,但是它们不是为了错误恢复的目的而包括的,并且在实施例中不允许错误恢复,或者至多只允许对经历更简单或更有限的错误的信息进行错误恢复(如果用于此的话)。为了区分错误检测码,冗余码rj也可以被称为错误恢复码。
35.在本文使用的符号表示中,j表示针对给定的信息扇区si组的冗余码(恢复码)rj中的相应一个冗余码的索引,并且存在用于该组的k多个冗余码。出于符号表示的目的,将索引j表示为从1到k,以表示它可以取指示任何k个冗余码的值。这并不必然意味着由读取或写入计算机用来索引冗余码rj的实际数字参数在数字上从1到k(例如,在实践中这可以以二进制从0到k-1)。将理解,这只是方便的数学表示或符号表示。
36.在实施例中,冗余码rj集存储在与信息扇区si相同的存储介质上,在至少一个单独的冗余扇区r中。这可以是存储介质的单独的物理扇区。在一些这样的实施例中,每个码存储在不同的相应冗余扇区ri中。在一些实施例中,每个冗余码rj可以与每个信息向量vi或信息扇区的大小相同。在实施例中,每个冗余扇区ri可以与每个信息扇区si大小相同。备选地,每个冗余码rj的大小可以不同于(例如,小于)信息向量vi或信息扇区si的大小,和/或每个冗余扇区r可以存储多于一个码。在其他备选方案中,不排除冗余码不存储在单独的扇区中,并且可以在信息扇区si之间分布。
37.注意,对于给定的信息扇区si组,不一定具有与该组中的信息扇区相同的数量或冗余码rj(k不一定等于n),并且在给定组的冗余码rj与信息扇区si之间不存在一对一的映
射。相反,如稍后将更详细讨论的,每个冗余码rj是该组中n个信息扇区si的至少信息有效载荷vi的不同线性组合。一般而言,冗余码的总数目k可以小于或相同于数据项n的数目,或者在实施例中,冗余码的数量k也可以大于数据项n的数目。
38.此外,用于计算冗余码rj(参见后文)的系数c
j,i
可以与码本身一起存储在介质上,例如存储在(多个)冗余扇区r中。在这种情况下,读取计算机将从介质中读取系数并且使用它们来计算冗余码rj。备选地,可以根据诸如伪随机过程的预定确定性过程来确定系数,并且可以仅将所使用的过程的指示存储在介质中,例如同样存储在(多个)冗余扇区r中。在这种情况下,读取计算机将从介质读取指示、使用该指示来确定用于确定系数的过程、使用该过程来确定系数本身、并且使用这些系数来计算冗余码rj。该指示可以例如包括伪随机过程的种子。可选地,它还可以包括多种可用形式的算法中的哪种算法被用作预定过程的指示。备选地,该算法形式可以由读取计算机来假定。
39.在另外的变型中,不需要将冗余码rj或系数c
j,i
或用于确定系数的过程的任何指示写入存储介质本身。取而代之的是,任何这些都可以经由单独的介质(例如,通信信道)被传送到读取计算机。例如,它们可以被发布,或者可以例如通过网络或在诸如加密狗的单独的存储介质上被专门发送到读取计算机。在存储和读取计算机是同一计算机的情况下,通信可以简单地包括在计算机上本地存储所讨论的代码、系数和/或指示,例如在本地硬盘驱动器上。
40.图2示出了可以应用于存储计算机的编码方法,用于以参考图1描述的形式存储数据并且确定冗余码rj。该方法由存储在存储器中并且在存储计算机的至少一个处理器上运行的软件来执行。存储器可以包括一个或多个存储单元,该存储单元例如可以包括上文相对于其上存储信息扇区si的存储介质所讨论的任何类型的介质,和/或不同类型,例如ram(随机存取存储器)等;并且其可以是与所述存储介质相同或分开的单元,或其组合。
41.在步骤210处,该方法确定要被写入存储介质(例如,石英玻璃)的n个信息扇区si组,i=1

n。该步骤包括至少确定n个相应的信息有效载荷vi,每个扇区si一个。这是该方法用于利用冗余码进行存储和保护的用户信息(即,内容)。步骤210还可以包括针对每个扇区si生成相应的错误检测码zi(例如,一个或多个校验和字节)。备选地,这些可以存储在介质上的其他地方,或者原则上甚至存储在不同的介质上,尽管这会使错误检测更慢。
42.步骤220至230然后生成冗余码,例如以存储在(多个)冗余扇区r中。该方法将信息字节组合成k个冗余码或码字rj,j=1

k(例如,码字可以由2个字节组成)。这些可以被描述为随机线性码或线性无关码,稍后将解释原因。
43.在步骤220处,该方法选择用于执行线性组合的系数。为了适应每个组的多个信息有效载荷vi中的错误的可能性,该方法将生成多个冗余码r1,r2,...,rk。因此,在步骤220处,该方法为要生成的j=1..k个冗余码rj中的每个冗余码选择不同的系数集c
j,i
。每个集(每个用于相应的码rj)包括n个非零系数c
j,i
,一个非零系数用于i=1...n个信息扇区si中的每个信息扇区。例如,可以随机选择这些系数。这些集一起可以被描述为系数c
j,i
的k
×
n矩阵c,其中j=1...k并且i=1...n。
44.45.每行对应于k个冗余码rj,j=1...k中的不同一个冗余码的不同系数集。k个集应该彼此线性无关,或者当随机选择它们时,它们的概率应该在某个可容忍的阈值内。稍后将更详细地讨论选择这些系数的过程。
46.矩阵c中的每个列对应于用于对来自n个信息扇区si,i=1...n中的不同相应一个扇区的数据进行加权的系数。
47.在步骤230处,该方法计算给定j的冗余码中的每个冗余码rj作为线性和:
48.r=c1·
v1 c2·
v2

cn·
vnꢀꢀꢀ
(2)
49.换言之:
50.r1=c
1,1
·
v1 c
1,2
·
v2

c
1,n
·
vn51.r2=c
2,1
·
v1 c2·
v2

c
2,n
·
vn52.…
53.rk=c
k,1
·
v1 c
k,2
·
v2

c
k,n
·
vnꢀꢀ
(3)
54.或者:
55.rj=c
j,1
·
v1 c
j,2
·
v2

c
j,n
·vn,j
=1...k
ꢀꢀꢀ
(3a)
56.每个冗余码rj是n个项的总和,一个项用于正被编码的组中的n个信息扇区si中的每个信息扇区。通过从相应的信息扇区si中取被乘数并且乘以该信息扇区的相应系数c
j,i
来计算每个项。如上所示,在实施例中,每个项的被乘数仅是信息有效载荷vi。在冗余码的构造和恢复中可以忽略错误检测码zi(例如,校验和字节);这些用于检查扇区中是否存在错误,但不用于本文描述的跨扇区冗余码rj码。然而,在备选实施例中,不排除来自扇区si的附加数据,诸如相应的错误检测码zi,可以被包括在每个项的相应被乘数中。
57.在实施例中,该组中的每个信息有效载荷vi可以包括信息值(元素)的向量,并且作为信息值(元素)的向量来处理,例如,单个比特或字节的向量。类似地,每个冗余码rj可以包括冗余元素的向量并且作为冗余元素的向量来处理。因此,信息有效载荷和冗余码可以分别被称为信息向量和冗余向量。然而,应当理解,这不是限制性的,并且在下文的其他变型中,信息有效载荷vi和/或冗余码rj中的每个可以被视为单个标量值。
58.在优选实施例中,信息有效载荷vi和冗余码rj中的每个都是向量,系数c
j,i
中的每个系数都是标量。
59.观察到上面的加法和乘法运算是在有限域中进行的。例如,如果系数和码字分别由2字节(16位)组成,则用于运算的适当字段是例如伽罗瓦(galois)域gf(2
16
)。否则,符号表示遵循标准代数规则:常量c1,c2,

,cn与对应向量v1,v2,

,vn的每个元素相乘;而且,向量相加是逐元素进行的。
60.还要注意的是,一般而言,取决于实现方式,k可以小于、等于或大于n。
61.由于通常会在组中的多个信息向量vi中预期错误,该方法生成针对给定组的多个冗余向量r1,r2,

,rk。如上所述,对应的系数表示为针对冗余向量rj的c
i,1
,c
i,2


,c
i,n
,其中j从1到k。所有c
j,i
的值为非零。此外,不同系数集的值cj=[c
j,1
,c
j,2
,

,c
j,n
]彼此线性无关,其中每个集是用于冗余码rj中的一个冗余码的系数集,即公式(1)中的矩阵的一行,对应于公式(3)中的一行。因此用于冗余码r
j=1
的系数集c1=[c
1,1
,c
1,2
,

,c
1,n
]与其他系数集中的每个系数集c2=[c
2,1
,c
2,2
,

,c
2,n
]
…ck
=[c
k,1
,c
k,2
,

,c
k,n
]等线性无关(注意,本文的向量是编码用户或冗余数据的不同类型的向量
‑‑
本文中向量cj表示系数集,每个信息向量vi=1
…n一个)。
[0062]“线性无关”是指一个集不能从其他集的线性组合中创建。即,对于用于给定的信息扇区组(即,在公式3中使用的系数集中)的任何给定集c
j=a
=[c
a,1
,c
a,2
,

,c
a,n
],不存在标量因数集β,使得c
j=a
=(β1·
c1)


a-1
·ca-1
) (β
a 1
·ca 1
)

(βk·ck
),其中cj表示[c
j,1
,c
j,2
,

,c
j,n
]。该条件相当于说,每个系数集合都向冗余码添加一条新的冗余信息。如果系数集中的一个系数集不满足该条件,则从该系数集合生成的对应的冗余码不向代码添加新的冗余信息,因此可以校正的信息有效载荷vi比冗余码少一个。
[0063]
假设满足线性无关条件,则可以使用k个冗余向量来从任何k个丢失的用户扇区si恢复用户信息vi。类似地,如果存在k’《k个丢失用户扇区,则可以使用任何k’个冗余向量来重建丢失的用户扇区(借助于已经被无错误读取的n-k’个用户扇区)。系数集cj线性无关的条件等同于方程(1)的行阶为k的矩阵。
[0064]
为了实现线性无关,可以根据伪随机过程来选择集的系数。这本身并不能严格确保线性无关。然而,这意味着集在某个阈值概率范围内是线性无关的。在一些实施例中,该方法可以简单地包括伪随机地选择系数集并且不检查线性相关条件,假设这些集可能在可容忍的阈值概率内是线性无关的,并且如果它们被证明不是线性无关的,则结果是可容忍的(即,可以被校正的n个扇区的组中的错误信息扇区si少一个)。换言之,只需随机生成系数,然后抱最好的期望。然而,备选地,可以使用确保系数集是线性无关的选择过程来选择系数集。例如,这可以包括伪随机地选择它们,然后检查所选集合是线性无关的,并且如果不是,则使用伪随机数生成器重新选择一个、一些或所有系数,直到满足线性无关条件。另一可能性是使用预先设计的系数集。
[0065]
在步骤240处,将信息扇区si写入存储介质。还可以将(多个)冗余扇区r写入介质,并且在实施例中,这还可以包括系数或用于生成系数的过程的种子(参见下文)。备选地,可以将该冗余数据中的一些或全部数据分开传送到读取计算机。此外,将理解,图2仅作为示例给出,并且在该方法的其他变型中,可以在步骤220或230之前将信息扇区si写入存储介质。步骤的顺序并不重要,除非所生成的信息中存在依赖关系。
[0066]
再次参考图1和公式(3),注意,用于编码冗余码rj的编码方案是系统编码方案。即,它使有效载荷信息vi本身不被变换,并且冗余信息rj与有效载荷信息vi分开。相反,在诸如先前已经在网络编码中使用的非系统编码方案中,如在us 7,756,051中所公开的,编码对有效载荷本身进行数学变换。换言之,冗余分布跨整个信息扇区或分组而分布。在先前用于网络编解码的非系统情况下,在接收侧接收的所有内容都被编码,并且需要解码来读取每个分组。而在本文公开的用于存储的系统情况下,仅需要对错误的扇区进行解码,并且计算开销随丢失的扇区的数目而增减。
[0067]
在系统情况下,信息有效载荷vi可以是明文的用户数据,或者可以通过一些较低的编码层(诸如,用于媒体压缩和/或加密)进行变换,但无论哪种方式,它都不会在添加冗余编解码(即,生成所述冗余码/向量)的层处通过编码方法或方案进行变换。并且冗余码不存储在与有效载荷相同或重叠的介质的物理存储元素中(例如,它们是单独的体素)。
[0068]
然而,请注意,本公开的范围不限于系统情况。在备选实施例中,不排除非系统情况也可以用于存储。在非系统情况下,这意味着只有冗余码将被存储在存储介质上,而不会在介质上存储“原始”信息扇区。在这种情况下,只要正确读取至少n个代码,信息扇区就将
完全从代码中恢复。
[0069]
在系统或非系统的情况下,增加冗余向量r
j=1
…k的数量k会增加用户数据(信息扇区)成功恢复的概率。然而,这也增加了计算成本(用于创建冗余向量)。k的选择是可以在设计时指定的系统参数。
[0070]
给定每组信息扇区的数目(n)和冗余向量的数目(k)的选择,期望挑选保证(或在可容忍的概率内)系数集cj是线性无关的c
i,j
的适当值。
[0071]
还需要一种机制来将代码rj和系数c
j,i
传送到将要执行解码的读取计算机。一种方式是固定系数值,并且使其对于生成冗余向量的过程以及恢复丢失向量的过程是已知的。这种方法需要固定n
·
k个系数,实际上需要很大的空间来存储这些值。
[0072]
备选方案是将系数与冗余向量一起存储在存储介质上,例如在(多个)冗余扇区r中。在该方法中,在对应于冗余向量cj的冗余扇区中保留一些空间以存储值c
j,1
,c
i,2


,c
k,n
。这将需要每个向量额外的开销。
[0073]
第三种备选方案是设计一种确定性过程,该过程生成系数并且具有简短的描述。一种实现是使用一种众所周知的算法来生成伪随机数。在这种方法中,设计者将确定生成伪随机数序列(从而生成系数)的算法和初始种子。设计者将优选地检查所生成的随机数满足线性无关假设,例如通过检查前n
·
k个码字定义具有形式(1)的矩阵并且该矩阵具有行阶k。该检查对于每个种子只需要进行一次。在这种方法中,不需要在每个扇区中存储额外的信息。然而,它将被要求能够将物理位置映射到特定扇区。即能够标识玻璃上每个信息或冗余扇区的位置。对于每个扇区读取,读取计算机上的解码方法将需要能够导出该扇区所属的组,以及该扇区是第i个信息扇区还是第i个冗余扇区。这可以通过将介质中的位置固定到组和扇区来实现。
[0074]
在任何上述内容的其他变型中,冗余码、系数和/或种子(或确定性过程的其他这种指示符)可以经由单独的介质,例如在附带的加密狗上或在网络通信信道上,被传送到读取计算机。
[0075]
另一备注涉及添加到每个扇区的错误检测码(例如,校验和)zi。在实施例中,扇区包含信息和冗余码字,以及可以用于检测扇区中的错误的附加信息zi。在这样的实施例中,这些校验和优选地不用于创建冗余码。相反,在一些这样的实施例中,首先计算冗余扇区r的字节,然后可以使用这些字节来计算对应的(多个)冗余扇区的(多个)校验和。
[0076]
图3示出了可以应用于存储计算机的解码方法,用于从参考图1描述的介质读取数据,包括使用冗余码rj来恢复错误扇区。该方法由存储在存储器中并且在读取计算机的至少一个处理器上运行的软件来执行。存储器可以包括一个或多个存储单元,该存储单元例如可以包括上文参考其上存储信息扇区si的存储介质所讨论的任何类型的介质、和/或不同类型,例如ram(随机存取存储器)等;并且其可以是与所述存储介质相同或分开的单元,或其组合。
[0077]
在步骤310处,该方法以从存储介质(例如,玻璃)读取扇区的过程开始。在读取扇区si(或者实际上是r)之后,该方法使用相应的错误检测码zi(例如,校验和)来确定该扇区是否无错误。该过程还知道扇区所属的组,以及扇区在组中的位置(无论它是第i个信息扇区还是冗余扇区)。备选地或附加地,可以在扇区的完全读取失败时检测到错误。在使用代码zi进行错误检测的情况下,从扇区的每个比特或符号成功地读取清零假设值,但是基于
相应的错误检测码zi中的冗余信息检测到这些值中的至少一个值是不正确的;而在读取失败的情况下,不能从扇区中的至少一个比特或符号读取清零值。
[0078]
无论哪种方式,假设在读取之后,该方法未能正确地读取(组i=1

n的)k’《k个信息扇区si,并且它至少已经成功地读取了k’个冗余码(因此,已经正确地读取了n-k’个信息扇区si)。然后,恢复过程如下进行。
[0079]
在步骤320处,该方法从冗余码中的每个冗余码中减去正确的信息扇区。假设已经针对i的n-k’个值正确地读取了信息向量vj。这意味着该方法如下更新每个冗余向量rj:
[0080]rj
←rj-c
j,i
·
viꢀꢀꢀ
(4)
[0081]
其中j现在在恢复中使用的k’个冗余码rj中索引。为便于符号表示,可以将其表示为j=1

k’。将理解,这同样只是一种方便的数学符号表示,并且不限制用于参考读取计算机上的代码的实际数字参数所采用的形式。此外,严格地讲,这不必然是用于在编码期间通过k个冗余码进行计数的相同的j值序列。作为符号表示的问题,新的索引可以备选地被标记为j’,但在下文中采用更简单的j符号表示。无论以哪种方式,该符号表示都不旨在表示用于解码的k’个冗余码是在编码期间被索引的k个冗余码序列中的前(最低的)k’个索引码(它可以是它们中的任何k’个,而不必然是在编码期间索引的序列中的前k’个)。
[0082]
从本说明书中的这一点开始,rj指的是在步骤320之后的更新的冗余码,并且j指的是索引在恢复中使用的k’个更新的冗余码rj的索引。
[0083]
在步骤330处,该方法通过移除对应于正确的信息扇区si(在步骤310处确定为正确读取的那些)的列来更新公式(1)的矩阵。在这样做时,矩阵(1)变换成k
’×
k’矩阵。该缩减的矩阵在本文可以被标记为e。在缩减的过程中,原始块的索引的映射也被存储到更新的索引。
[0084]
在步骤340处,该方法对该缩减的矩阵求逆,以产生d=e-1
。逆矩阵e-1
是使得e
·
e-1
=1的矩阵。
[0085]
在步骤350,该方法通过执行以下运算来恢复丢失的信息扇区:
[0086][0087]
其中对于第i个错误扇区si,这是在恢复中使用的k’个冗余码中的所有j的总和。对于在步骤310处被确定为错误的不正确或未成功读取的信息扇区si中的每个信息扇区的i单独执行求和。
[0088]
最后,使用来自上述步骤330的映射将vi重新映射到适当的丢失扇区。
[0089]
在上述解码方法中使用的冗余码rj和系数c
j,i
的值可以通过先前讨论的任何手段被传送到读取计算机上的过程;或者通过与信息扇区si一起被包括在存储介质本身上(例如,在一个或多个冗余扇区r上),或者经由单独的介质而被传送,或者这些方法的组合。
[0090]
注意,上文已经针对系统情况进行了描述,其中n个信息扇区本身被存储在存储介质上,并且仅针对恢复丢失或错误的信息扇区所需的最小数量执行恢复(即,在恢复中使用的恢复码的数目k’等于要恢复的信息扇区的数目)。简单地从介质直接读取既存在又无错误的代码。然而,原则上该方法可以用于任何k
’×
k’矩阵,其中k’是解码中使用的冗余码的数目,也等于解码方法期望读取的信息扇区的数目。在极端情况下,该方法甚至可以应用于
非系统情况,其中只在介质上存储冗余码(没有信息扇区),并且从代码中恢复所有期望的信息扇区。在这种情况下,不存在基于正确读取的信息扇区来更新代码的步骤320(公式4),并且完全从k’个冗余码中恢复信息向量vi,其中,在这种情况下,k’简单地是要恢复的信息向量的数目,而不是丢失或错误的数目,并且在解码中使用的rj简单地是在解码中使用的j=1...k’个码。
[0091]
在编码方案中有几个参数需要考虑,它们将影响解码。
[0092]
一个是k(所提供的冗余码的数目)与n(针对其编码的信息扇区的数目)的比率。在系数是伪随机选择而没有主动确保它们是线性无关的情况下,这将对构造有效编码的机会产生影响。
[0093]
在任何计算机中,给定值必须在某个大小为l的有限域(也称为伽罗瓦域)中表示,并且在实施例中,在该域内以回绕(模数,modulo)的方式执行加法。例如,如果域大小l是8比特,则在255之后,加1绕回到0。
[0094]
设n为信息块的数目。当构造新码时,选择随机数ci与vi组合(也参见公式2)。数字ci可以是该域中除零之外的任何数字。因此,有l=2
16-1种挑选ci的方式。有ln种方式来挑选ci的n值。
[0095]
如果已经选择了k(《n)个编码,则下文给出随机生成的编码(如上所述)依赖于现有编码的概率(即,新编码不好,因为它不具有线性无关属性)。
[0096]
现有编码可以生成(即,跨越)(l 1)k个编码。这是因为现有编码r1,r2,

,rk可以针对来自该域的随机系数d1,

,dk被线性组合为d1·
r1 ... dr·rk
。由于di的值可以取零值,因此线性编码的组合是(l 1)k。
[0097]
因此,随机生成的系数向量(即,代码)是由现有编码跨越的系数向量中的一个的概率为:(l 1)k/ln≈l
k-n
=1/(2
16-1)
n-k
。当k接近n时,错误选择的概率会增加。然而,在实施例中,k可以小于n的10%-20%,并且n可以是数千。因此,错误选择的概率很小。
[0098]
注意:与用于存储的其他冗余编码和解码方案不同,在本方案中,n不受域大小l的限制。在其他现有的冗余方案中,n k被限制为小于l。然而,在本方案中,n k可以大于l。可以生成的编码数量被限制为n。码的随机构造对于较大的域(参见上面公式中的分母)工作得更好,但是n的影响仍然更显著。
[0099]
另一要考虑的参数是组大小。特别是,使用更大的组大小(更大的n)的优势在于它提高了恢复的机会。
[0100]
在具有n个信息扇区和k个相关联冗余码的组中,将存在可以容忍的最大错误数目(将需要成功读取n个信息扇区和k个代码中的至少n个)。例如,如果存在8个信息扇区和2个相关联的冗余码,则系统可以在包括8个信息扇区和2个冗余扇区的10个扇区内容忍多达2个错误,并且仍然恢复整个组。即,成功读取的信息扇区和码的总数目至少是最初写入该组中的介质的信息扇区的数目n。
[0101]
然而,存储在存储介质上的信息扇区中的错误是随机的。对于有限的组大小,总是存在不幸的机会,使得比设计的冗余码的数目更多的错误扇区。在组大小小的情况下,这种机会可能相当大。例如,在上文的示例中,错误的数目和分布的统计波动可能很容易,使得给定组碰巧具有3个或更多个错误信息扇区,因此不能被恢复。组大小越大,比计划更不幸的机会就越小。即,当n趋于无穷大时,对于给定数量的相关联冗余码,该组不可恢复的概率
越趋于理论统计值。
[0102]
再次假设n是每个组的信息块的数目,并且每个组生成k个冗余块。另外,假设p是正确读取(信息或编码)块的概率。平均而言,预期(1-p)
·
(n k)将失败。只要失败块的数目小于k,那么(根据编码块的构造中的线性无关假设),应该可以重建丢失块。如果观察到多于k个失败,则解码器将无法恢复该组的至少一个块。
[0103]
失败概率为p
fail
≤exp[-(n k)
·
d(n/(n k)||p)],其中d[a||p]=a
·
log(a/p) (1-a)
·
log((1-a)/(1-p))。(这可以从二项分布的尾界导出,并且假设k/n》1-p;d(a||p)函数是相对熵。)观察到失败概率随组大小n呈指数下降。因此,n越大越好。
[0104]
然而,也有d(
·
||
·
)项。这要求与预期失败概率(1-p)相比,对于合理的开销量,n应该在数千的数量级,以保证非常低的失败概率。在存储中,期望具有非常低的失败概率(p
fail
应该是10-x
,对于尽可能大的x),因为取回数据的失败实际上是不可接受的。因此,在实施例中可能期望非常大的组大小。
[0105]
在一些实施例中,组大小总体上甚至可以是所有信息扇区。在一些实施例中,该组可以跨越多片可写材料(例如,多片玻璃)。
[0106]
现在参考图4讨论其他可选优化。这提供了用于更快恢复的相对小组的方案和/或方案的增量使用。
[0107]
上述恢复过程适用于整个扇区组si(i=1

n)。这意味着,为了恢复扇区,如果从总共n个数据扇区和k个冗余扇区中成功地读出了任何n个扇区(或者更一般地,从n个信息向量和k个冗余码中成功地读取了任何n个信息向量和/或冗余码),则该方法能够恢复数据。当读取过程的目标是恢复存储在存储介质(例如,玻璃)中的全部内容时,该方法工作得最好。这对于诸如档案存储的应用来说可能是可接受的,其中只需要偶尔读取,并且慢的恢复时间是可接受的。然而,在一些情况下,可能期望仅正确地读取数据的子集,并且更快地这样做。
[0108]
为了减少恢复扇区子集的工作量,可以将信息扇区组织成如图4中示例所示的矩阵形式(信息扇区由方框指示)。每行(冗余扇区r
x,i,j
)和每列(冗余扇区r
y,i,j
)计算冗余扇区。例如,r
x,1,1
到r
x,1,k’可以使用作为输入v
1,1
到v
1,n
以及与前面相同的方法来构造;并且类似地,对于r
y,1,1
到r
y,k’,1
,使用输入v
1,1
,v
2,1


,v
n,1
。在所示的示例中,有m行和m列(方块矩阵),但请注意,更一般地,行的数目可以不同于列的数目。
[0109]
使用较小的组可实现更快的恢复。它还允许该方案在编码中的增量使用。例如,可以一次写入具有其冗余的列,并且在写入许多列之后很久之后,还可以写入行冗余以提供附加的冗余保护。甚至可以基于在较早列上实际观察到的错误率来选择行冗余。
[0110]
为了恢复信息向量v
i,j
,我们可以使用来自行i或列j的冗余向量。观察到上面的信息向量的数目是m
·
m=m2,并且冗余向量的数目是2
·m·
k’。
[0111]
在详细说明用于这种实施例的恢复扇区的过程之前,进行几点观察。
[0112]
·
为了将此方法与上一节(图1至图3)的基本方案进行比较,考虑n=m2或的情况。基本方案将需要在n与n k个扇区之间进行读取以恢复丢失的扇区;本节的方案可以使用行冗余或列冗余扇区以量级的工作量进行恢复。
[0113]
·
参考图4描述的示例使用方块m
×
m矩阵:行数等于列数(m)。假设行和列的冗余
扇区的数量相同(k’)。备选实现可以根据行或列的大小以及系统的其他参数,在行和列中使用不同的维度,并且还可以适当地调整每行或每列的冗余扇区的数量。
[0114]
·
在上文中,使用线性编码来构造行冗余向量和列冗余向量两者。可以使用其他方法来构建行冗余扇区或列(或者实际上两者)。即,为了从行或从列恢复丢失块,可以在这两者上使用线性码,或者可以使用线性码来恢复每行的丢失块,并且使用不同的冗余编码方案来恢复每列的块,反之亦然。
[0115]
在图4的布置中,读取扇区的过程如下。首先,尝试直接读取它。如果成功,则停止。读取的成本是读取一个扇区的成本。如果失败,则尝试从行(或列)恢复。读取扇区的项中的成本介于m 1与m k之间(取决于有多少扇区出错)。如果也失败,则尝试使用列冗余(或行冗余)进行恢复。这将增加另一成本,其在m 1到m k个扇区读取之间。
[0116]
在使用行冗余和列冗余的恢复失败的情况下,恢复在迭代过程中继续。观察到使用行冗余和列冗余两者的恢复都失败,因此有多个扇区出错。做出丢失扇区的列表,并且挑选这些扇区中的一个扇区,比方说v
i,j’,并且尝试使用列j’中的信息来恢复它(观察到v
i,j’与目标扇区v
i,j
在同一行中)。j’指的是包含扇区v
i,j’的列(其中v
i,j’丢失)。如果成功,则尝试恢复原始扇区v
i,j
,或重复另一丢失扇区。如果不可能恢复v
i,j’,则将来自列j’的所有丢失扇区添加到列表,并且对另一扇区重复。
[0117]
一旦该过程已经恢复了允许恢复v
i,j
的足够扇区,或者该过程已经读取了所有信息扇区v和所有冗余扇区r和d,并且仍然不可能在恢复v
i,j
方面取得任何进展,则该过程终止。在后一种情况下,恢复失败。
[0118]
注意,在最坏的情况下,表格布置的性能与上一节的基线方案相当,即该过程将需要读取所有n=m2个扇区和所有冗余扇区。然而,在常见情况下,错误扇区应该在读取个扇区之后被解码。
[0119]
作为另一可选的优化,附加于或独立于参考图4所描述的优化,来自不同恢复编码组的信息存储可以在存储介质上物理地彼此交错(即,它们的实际物理位置在空间上交错)。
[0120]
写入和读取过程中的缺陷可能导致正确读取扇区中的错误。这些错误可以彼此独立地发生,这意味着扇区的失败概率对于所有扇区都是相同的,并且一个扇区中的失败不会改变任何其他(相邻)扇区中的失败概率。错误也可以在空间上相关,例如,当读取或写入中的缺陷影响许多“相邻”扇区时,即,在物理空间中彼此接近的扇区。参考图1至图4讨论的方法可以处理任一错误模式。然而,解码的性能取决于组中的错误数量:解码的成本随着错误扇区的数量而增加。因此,可能期望避免错误影响来自同一组的许多扇区的情况,相反,可能优选的是在各个组中均匀地分布这些错误。
[0121]
预期相关错误可能会影响在材料的物理空间中物理接近的扇区。为了打破这些相关性,可以交错来自不同组的扇区,从而优选地最大化来自同一组的扇区的空间距离。准确的布局取决于介质的物理属性。
[0122]
图4的示例利用布置成行和列的组来描述,但是更一般地,相同的原理可以应用于布置成重叠存储子集(重叠的信息扇区组)的信息扇区的任何布置。冗余码是按子集(组)生成的,即冗余码可以用于恢复相同子集的信息扇区,但不能直接用于恢复不是相同子集的部分的信息扇区。子集可以具有重叠的信息扇区;例如,子集a可以包含信息扇区s2、s3、s7和
s8,而子集b可以包含s1、s2、s3和s6。解码过程通过标识可以恢复的子集,然后使用来自这些子集的(恢复的)信息扇区来恢复更多的子集来迭代地工作。
[0123]
作为示例,假设针对子集a生成冗余码ra,并且针对子集b生成类似的冗余码rb,并且信息扇区s2和s6丢失(所有其他si、ra和rb都被正确接收)。由于子集b中有两个丢失扇区,而b只有一个冗余扇区,因此不可能恢复子集b。然而,有足够的冗余来使用子集a以恢复s2。然后,可以使用重构的s2来使用子集b以恢复s6。可以观察到,即使在s2和s3丢失时也可以恢复:即使两个子集都不能单独用来恢复,但是ra和rb可以被简化为仅依赖于s2和s3(使用与公式4中相同的过程)来重写ra和rb以仅依赖于s2和s3,然后使用这些关系恢复s2和s3。
[0124]
创建子集背后的动机是能够使用更少的扇区(即本地)来恢复丢失的信息扇区。这加速了解码阶段,例如通过解码较小的组并且通过利用来自存储介质中附近位置的相同子集的扇区的放置。(运行时优势是以丢失一些编解码效率为代价的)。
[0125]
乘积码的情况(即,当我们将信息扇区划分为列和行时)是上述方案的特例,其中由列(行)定义的子集不共享任何信息扇区,并且由列定义的每个子集恰好具有与由行定义的每个子集共享的一个信息扇区。
[0126]
为了提高可靠性,一些存储系统将内容的副本放置在地理上不同的站点(数据中心);例如,不同大洲的站点。现有存储系统通常将信息和冗余扇区两者的相同副本存储到这些站点。作为其他扩展,上述方法可以用于在每个站点处存储不同的冗余码集。换言之,生成每站点唯一冗余码,例如通过使用每站点唯一随机种子以创建系数矩阵来生成系数。在多个站点出现严重错误的情况下,其中每个站点正确读取的扇区不足以恢复原始内容,可以合并来自多个站点的冗余码,从而增加成功恢复的概率。
[0127]
该方案等价于:假设s个站点,则生成s
·
k个冗余码,并且为每个站点分配k个冗余码。每个站点的存储开销与先前描述的过程中相同。然而,如果允许跨站点组合冗余码,则成功恢复的概率相当于使用s
·
k个冗余码的情况。
[0128]
将理解,仅通过示例描述了上述实施例。
[0129]
更一般地,根据本文公开的一个方面,提供了一种从存储介质读取以便恢复信息扇区组的计算机实现的方法,每个信息扇区包括相应的信息有效载荷;其中该存储介质存储冗余数据,该冗余数据包括用于所述组的多个单独的冗余码,每个冗余码是项的线性和,该和中的每个项是来自所述组中的信息扇区的不同的相应的信息扇区的信息有效载荷,不同的相应的信息扇区由针对冗余码的系数集的相应系数加权;并且其中该方法包括:在冗余数据被存储在存储介质上之后,执行解码过程,该解码过程包括:
[0130]-标识来自所述组的k’个信息扇区集,相应的信息有效载荷将基于冗余数据而从k’个信息扇区集中被恢复;
[0131]-选择冗余码中的k’个冗余码;
[0132]-确定方块矩阵e,其中的每个矩阵列包括k’个信息扇区中的不同信息扇区的相应系数,并且每个矩阵行包括k’个冗余码中的不同冗余码的系数集,或者反之亦然;
[0133]-确定矩阵d是e的矩阵逆;以及
[0134]-通过计算vi=∑j(d
i,j
·rj
)来恢复k’个信息有效载荷,其中vi是信息有效载荷,i是表示相应信息扇区的索引,并且j是表示每个冗余码rj的索引,其中d
i,j
是d的矩阵元素,并且∑j是k’个冗余码的和,该计算针对k’个信息扇区中的每个信息扇区的i而被执行。
[0135]
在实施例中,信息扇区中的一些或所有信息扇区也存储在存储介质上。这是系统情况。备选地,该方法可以用于非系统情况,在这种情况下,只有冗余码被存储在介质上而不是信息扇区上,并且信息有效载荷完全从冗余码中恢复。
[0136]
在实施例中,所述标识可以包括:标识该信息扇区组中哪些信息扇区丢失或错误、不存在于存储介质上或具有包含错误的信息有效载荷vi,以及标识哪些信息扇区存在并且无错误、被发现存在于存储介质上和具有不包含错误的信息有效载荷vi,其中k’个信息扇区包括该组的丢失的信息扇区和/或错误的信息扇区。
[0137]
在实施例中,k’个信息扇区可以仅是该组的丢失和/或错误的扇区。备选地,不排除k’可以大于严格必要的,例如,多达存储在存储介质上的针对所述组的相同数量的代码k,即使有少于k个丢失和错误的扇区。然而,这将比恢复所需的计算密集度更高。
[0138]
在实施例中,该方法可以包括:在所述恢复之前,通过对组中、发现存储在存储介质上的所有非错误信息扇区的i执行rj←rj-(c
j,i
·
vi),来更新k’个冗余码中的每个冗余码,其中c
j,i
是对应于第i个信息扇区和第j个冗余码的系数;其中,在所述恢复中所使用的冗余码rj是更新后的冗余码。
[0139]
在实施例中,系数集合可以不存储在存储介质上,并且相反该方法可以包括:
[0140]-从存储介质读取用于确定系数集合的预定确定性过程的指示,并且基于该指示使用所述过程来确定系数集,或者
[0141]-经由单独的介质来接收系数集,或者
[0142]-经由单独的介质接收来用于确定系数集合的预定确定性过程的指示,并且基于该指示来使用所述过程来确定系数集。
[0143]
该单独介质可以是另一数字或计算机可读存储介质(例如,加密狗)或网络(例如,互联网)。作为另一备选方案,该单独介质甚至可以包括另一形式的介质,诸如纸张或印刷介质,或可听的。无论采用哪种方式,接收都可以包括接收专门寻址或发送给读取计算机的通信中的系数,或者备选地经由公布。例如,这些系数可以线上公布。
[0144]
在实施例中,不同冗余码的系数集可以彼此线性无关。
[0145]
在实施例中,该方法可以包括在所述解码过程之前将冗余码存储在存储介质上的初始阶段。
[0146]
在实施例中,初始存储阶段可以包括根据确保不同冗余码的系数集彼此线性无关的过程来选择系数。
[0147]
在实施例中,初始存储阶段可以包括伪随机地选择系数。
[0148]
在实施例中,所述信息扇区组可以是存储介质上的所有信息扇区。
[0149]
在备选实施例中,所述信息扇区组可以是存储介质上的多组信息扇区中的一个组,并且该方法可以单独应用于所述组中的每个组。
[0150]
在一些这样的实施例中,来自不同组的信息扇区可以在存储介质上物理交错。
[0151]
在实施例中,所述信息扇区组可以是存储在存储介质上的信息扇区的第一组和与第一组重叠、存储在存储介质上的信息扇区的第二组中的一个组,包括一些但不是全部相同的信息扇区,第一组和第二组中的每个组与相应的冗余码集相关联。在这样的实施例中,该方法可以包括:当最初不能基于与第一组相关联的相应的冗余码集来恢复第一组中的所有信息扇区的信息有效载荷时,基于与第二组相关联的相应的冗余码集来恢复第二组中的
信息扇区的信息有效载荷,从而恢复与第一组重叠的信息扇区的至少一个有效载荷;以及随后基于与第一组相关联的冗余扇区和第一组中的至少一个恢复的信息扇区来恢复第一组。
[0152]
可以根据相同的冗余方案或不同的冗余方案对第一组和第二组信息扇区中的另一组进行编码。
[0153]
在本文公开的各种技术的示例应用中,所述存储介质可以包括石英玻璃存储介质。
[0154]
在实施例中,存储介质可以包括多片单独的可写材料,其中所述信息扇区和/或冗余码跨越多片可写材料。
[0155]
例如,存储介质可以包括多个单独的盘片,或者甚至包括容纳在单独的外壳中的多个存储单元。在实施例中,单独的材料片具有相同的介质类型,但是备选地,不排除它们可以包括不同的介质类型,诸如玻璃和磁性等。
[0156]
一些或所有信息扇区可以跨每片材料而被复制(每片材料上相同信息的副本),或者一些信息码可以仅存储在一片材料上,而其他信息扇区仅存储在另一片材料上。在冗余码被存储在介质上的情况下,可以跨每片材料来复制一些或全部冗余码(每片材料上相同代码的副本),或者可以将一些信息码存储在一片材料上,而将其他信息扇区存储在另一片材料上。
[0157]
在一些实施例中,这些材料片甚至可以分布在多个不同地理位置的多个不同数据中心上。
[0158]
每个信息扇区还可以包括相应的错误检测码。在实施例中,所述被乘数可以仅是相应的信息有效载荷,而不是相应的错误检测码。备选地,不排除所述被乘数包括相应的信息有效载荷和相应的错误检测码两者。
[0159]
该错误可以是在写入时在存储介质上存储一个或多个信息有效载荷时发生的错误,或者是在写入之后但在读取之前由于劣化而发生的错误。可以基于错误检测码在读取时检测错误。一旦检测到错误,就可以基于冗余码来恢复错误。
[0160]
在实施例中,所述信息有效载荷中的每个信息有效载荷是信息元素的向量,所述系数中的每个系数是标量的,并且所述乘法包括针对相应信息有效载荷的相应标量系数与相应信息有效载荷的每个信息元素的逐元素乘法。
[0161]
在实施例中,可以根据确保集彼此线性无关的过程来选择系数集。备选地,可以根据伪随机过程来选择系数(从而固有地具有集合彼此线性无关的某种可能性)。
[0162]
在实施例中,存储介质可以是基于玻璃的存储介质,诸如石英玻璃存储介质。备选地,存储介质可以是另一种形式的诸如光盘、或磁存储介质、诸如磁盘或磁带的光学存储介质,或者诸如eeprom或闪存的电子存储介质。
[0163]
在实施例中,存储介质可以是一次写入、多次读取(worm)存储介质。
[0164]
在实施例中,该方法可以用于档案存储。
[0165]
在实施例中,信息有效载荷可以包括明文用户数据。备选地,可以通过较低层编码方案对信息有效载荷进行编码。
[0166]
在实施例中,冗余码可以存储在存储介质上,例如存储在与信息扇区分开的一个或多个冗余扇区中。备选地,不需要将冗余码存储在介质上。
[0167]
例如,这可以包括公布预定过程的码或指示,或者经由与所述存储介质分开的通信信道将它们/它传送给指定的一方或多方。预定过程可以例如包括确定性伪随机过程,并且所述指示可以至少包括伪随机过程的种子。
[0168]
该组的信息扇区可以与一个或多个其他组的信息扇区交错。备选地,所述组的信息扇区在存储介质上可以是物理上连续的。
[0169]
错误的检测可以基于相应的错误检测码。
[0170]
该方法还可以包括在不需要恢复的情况下直接读取非错误的有效载荷值。
[0171]
在实施例中,逆矩阵d的元素中的每个元素是标量,并且冗余码中的每个冗余码是向量。vi=∑j(d
i,j
·rj

)中的乘积“·”可以是逐元素乘法。
[0172]
根据本文公开的另一方面,提供了一种实施在计算机可读存储上的计算机程序,该计算机程序包括代码,该代码被配置为当在一个或多个处理单元上运行时执行本文公开的任何实施例的方法。
[0173]
根据另一方面,提供了一种计算机系统,其包括存储器和处理装置,存储器包括一个或多个存储单元,处理装置包括一个或多个处理单元,存储器存储被布置为在处理装置上运行的代码,其中代码被配置为执行根据本文公开的任何实施例的方法。
[0174]
一旦给出本文的公开内容,所公开技术的其他变型或用例对于本领域技术人员来说可能变得清楚。本公开的范围不受所描述实施例的限制,而仅受所附权利要求的限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献