视频媒体数据存储系统以及相关方法转让专利

申请号 : CN200980106724.1

文献号 : CN101960429A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : M·G·帕特雷斯库H·S·克雷维T·M·德兰T·S·罗斯T·H·科尔泰

申请人 : 哈里公司

摘要 :

视频媒体数据存储系统(30)可包括第一和第二多个数据存储设备(D1,D2),每个以独立冗余驱动器阵列(RAID)配置来组织,以便允许写入和读取视频媒体数据。该系统(30)还可以包括耦合到第一和第二多个数据存储设备(D1,D2)的至少一个存储器控制器(31),用于将视频媒体数据镜像写入到第一和第二多个的数据存储设备二者中。该至少一个存储器控制器(31)也可以用于为第一和第二多个数据存储设备(D1,D2)二者生成各自的第一和第二文件分配表(FAT),其中包括视频媒体数据时间戳和有效性信息,并基于第一和第二FAT,选择性地从第一和第二多个数据存储设备读取视频媒体数据。

权利要求 :

1.一种视频媒体数据存储系统,包括:

第一和第二多个数据存储设备,每个以独立冗余驱动器阵列(RAID)配置来组织,以便允许写入和读取视频媒体数据;以及耦合到所述第一和第二多个数据存储设备的至少一个存储器控制器,用于将视频媒体数据镜像写入到所述第一和第二多个数据存储设备二者,为所述第一和第二多个数据存储设备二者生成各自的第一和第二文件分配表(FAT),其中包括视频媒体数据时间戳和有效性信息,以及基于所述第一和第二FAT,选择性地从所述第一和第二多个数据存储设备读取视频媒体数据。

2.如权利要求1所述的视频媒体数据存储系统,其中,所述至少一个存储器控制器还用于基于所述第一和第二FAT,在所述第一和第二多个数据存储设备之间从所镜像的视频媒体数据执行数据恢复。

3.如权利要求2所述的视频媒体数据存储系统,其中,所述至少一个存储器控制器将所述视频媒体数据作为分为条带的视频媒体数据写入所述第一和第二多个数据存储设备中的每一个中;其中,所述至少一个存储器控制器还从所述分为条带的视频媒体生成奇偶校验数据;并且其中,所述至少一个存储器控制器还基于所述奇偶校验数据,在所述第一和第二多个数据存储设备中的给定一方内执行数据恢复。

4.如权利要求3所述的视频媒体数据存储系统,其中,所述至少一个存储器控制器基于在所述第一和第二多个数据存储设备中的所述给定一方内具有故障的数据存储设备的数量,在使用所述镜像视频媒体数据和所述奇偶校验数据之间进行选择,以便执行数据恢复。

5.如权利要求1所述的视频媒体数据存储系统,其中,所述有效性信息包括数据存储设备故障信息;并且其中,所述至少一个存储器控制器优先读取没有故障并且具有最新的视频媒体数据时间戳的数据存储设备。

6.一种视频媒体数据存储方法,包括:

提供第一和第二多个数据存储设备,每个以独立冗余驱动器阵列(RAID)配置来组织,以便允许写入和读取视频媒体数据;

将视频媒体数据镜像写入到所述第一和第二多个数据存储设备二者;

为所述第一和第二多个数据存储设备二者生成各自的第一和第二文件分配表(FAT),其中包括视频媒体数据时间戳和有效性信息;以及基于所述第一和第二FAT,选择性地从所述第一和第二多个数据存储设备读取视频媒体数据。

7.如权利要求6所述的方法,进一步包括基于所述第一和第二FAT,在所述第一和第二多个数据存储设备之间从所述镜像视频媒体数据执行数据恢复。

8.如权利要求7所述的方法,其中,执行镜像写入包括将所述视频媒体数据作为分为条带的视频媒体数据写入所述第一和第二多个数据存储设备的每个中;并且还包括:从所述分为条带的视频媒体生成奇偶校验数据;以及

基于所述奇偶校验数据,在所述第一和第二多个数据存储设备的给定一方内执行数据恢复。

9.如权利要求8所述的方法,进一步包括:基于在所述第一和第二多个数据存储设备的所述给定一方内具有故障的数据存储设备的数量,在使用所述镜像的视频媒体数据和所述奇偶校验数据之间进行选择以便执行数据恢复。

10.如权利要求6所述的方法,其中,所述有效性信息包括数据存储设备故障信息;并且其中,选择性地读取包括优先选择没有故障并且具有最新的视频媒体数据时间戳的数据存储设备。

说明书 :

视频媒体数据存储系统以及相关方法

[0001] 本发明涉及数据存储领域,更具体而言,涉及视频数据存储网络以及相关方法。
[0002] 在计算机行业,术语“崩溃(崩溃)”被定义为软件应用或操作系统的突发故障,或诸如硬盘之类的硬件设备的突发故障。软件崩溃通常导致服务中断,而令人畏惧的硬盘崩溃还容易导致数据丢失。由于快速旋转的磁盘驱动器(例如,10,000RPM)的机械性质,崩溃通常是永久性的,因此,进行数据保护的必要性变得非常关键。
[0003] 与由于彻底的驱动器故障而造成的表示为平均故障间隔时间(MTBF)的数据错误一起,驱动器还遇到相对于数据读取的量的表示为比特错误率(BER)的比特错误。会导致寻道、读取和写入故障的其他错误通常被成功的重试屏蔽。由于许多驱动器现在带有10015
万小时以上的MTBF,大约1×10 中有1个的BER,以及5年的保修,因此,供应商能够区别发生了故障的驱动器与只“偶尔有麻烦”的驱动器是有经济意义的。为降低保修更换成本,驱动器通过使用许多内部数据恢复机制,包括错误校正、重试,以及扇区重新映射,来避免过多的“故障”。只有在驱动器超出其重试计数并且用完扇区无法重新映射的情况下才被视为“发生故障”。
[0004] 由于需要确定性的数据性能,因此,视频服务器设计通常无法允许驱动器尝试被设计为隐藏错误的所有内部数据校正机制的奢侈。需要在系统级别限制和管理重试次数,有问题的驱动器一般不被接受。
[0005] 驱动器规范还通常指定年度故障率(AFR),这等于运行负载循环乘以一年里的小时数并除以MTBF。驱动器通常分成3类,即,台式机、笔记本和企业机。虽然比较昂贵,只有企业机或服务器类别的驱动器被指定为大约100%负载循环。如此,具有1,000,000小时的MTBF的服务器驱动器将具有.876%的AFR,而具有1,500,000小时的MTBF的驱动器将具有.584%的AFR。
[0006] 随着系统性能、规模、以及复杂度增大,驱动器故障和错误处理对于视频服务器设15
计而言成为关键的问题。假设驱动器具有每1×10 中1个的BER(每比特读取的错误),随着数据率提高,错误频率趋近于每几个小时1个。由于甚至关键数据位置中的单一未校正的比特错误都可能产生无法接受的视频异常,因此,通常有必要实现某种形式的数据保护。
[0007] 用来帮助防止数据丢失的一个磁盘驱动器配置是独立冗余驱动器阵列(RAID)配置。一般而言,在RAID中,数据在多个硬盘驱动器之间分割和/或复制,这会使得数据可靠性提高以及输入/输出(I/O)性能提高。
[0008] 已开发出各种级别的RAID配置,并且不同的RAID级别利用不同的存储/数据保护技术。例如,某些RAID使用“分带区(striping)”,意思是说将数据流分成存储在RAID中的分开的驱动器上的段或块。可以将奇偶校验数据与数据条带(stripe)一起使用,这允许来自有故障的驱动器或扇区的数据从RAID中的其他数据驱动器上的数据和奇偶校验数据重构。另一RAID技术是在同一RAID集内的多个驱动器上镜像数据。即,在单独的驱动器上存储/维护数据集的拷贝,以便如果其中一个驱动器发生故障,复本数据集能够立即从镜像驱动器立即获得。
[0009] 各种现有技术RAID的实现方式被用来提供增强的读取性能和数据冗余。作为示例,美国专利No.7,225,315涉及一种文件系统,该文件系统包括具有多个卷的存储系统、适于为每一个目录设置该多个卷的卷分配表、存储文件的属性和分割的块信息的文件分配表、块读取表(其中分别设置了在一次读取操作为每一个卷读出的块的数量),以及控制从卷中读取的数据的读取控制模块。当接收到读取命令时,读取控制模块确定要从卷分配表中读取的卷。读取控制模块进一步通过参考块读取表来确定为每一卷读取的块的数量,基于卷、块数量和块信息确定为每一卷读取的块,并且并行地从每一卷中读取。
[0010] 尽管在某些应用中这样的配置提供优点,在诸如例如广播视频应用之类的高带宽、高可靠性数据存储应用中可能需要进一步的数据读取和恢复特征。
[0011] 因此,根据前述的背景,本发明的目标是提供用于增强的视频媒体数据存储和恢复的系统和相关方法。
[0012] 此目标及其他目标、特征,以及优点由视频媒体数据存储系统提供,该视频媒体数据存储系统可以包括第一和第二多个数据存储设备,每个都以独立冗余驱动器阵列(RAID)配置来组织,以便允许写入和读取视频媒体数据。该系统还可以包括耦合到第一和第二多个数据存储设备的至少一个存储器控制器,用于将视频媒体数据镜像地写入到所述第一和第二多个数据存储设备。该至少一个存储器控制器也可以用于为第一和第二多个数据存储设备生成相应的第一和第二文件分配表(FAT),其中包括视频媒体数据时间戳和有效性信息,并基于第一和第二FAT,有选择地从第一和第二多个数据存储设备读取视频媒体数据。如此,提供了视频媒体数据读取的更大的灵活性,以增强性能。
[0013] 此外,至少一个存储器控制器还可以用于基于第一和第二FAT,从镜像的视频媒体数据,在第一和第二多个数据存储设备之间执行数据恢复。此外,该至少一个存储器控制器还可以将视频媒体数据作为分为条带的视频媒体数据写入在第一和第二多个数据存储设备中的每一个中,并从分为条带的视频媒体生成奇偶校验数据。因此,至少一个存储器控制器还可以基于奇偶校验数据在第一和第二多个数据存储设备的给定一个内执行数据恢复。另外,该至少一个存储器控制器还可以有利地在使用镜像的视频媒体数据和奇偶校验数据之间进行选择,以便基于在第一和第二多个数据存储设备中的给定一个内具有故障的数据存储设备的数量来执行数据恢复。
[0014] 有效性信息可以包括例如数据存储设备故障信息。如此,至少一个存储器控制器可以优先读取没有故障并且具有最近的视频媒体数据时间戳的数据存储设备。至少一个存储器控制器还可以为从第一和第二多个数据存储设备读取视频媒体数据执行负载平衡。
[0015] 作为示例,第一和第二多个数据存储设备可以分别以RAID 3或更高的配置来组织。此外,至少一个存储器控制器还可以包括用于第一多个数据存储设备的第一存储器控制器,以及用于第二多个数据存储设备的第二存储器控制器。另外,该系统还可以包括分别将第一和第二存储器控制器耦合到第一和第二多个数据存储设备的第一和第二光纤通道(FC)交换机。同样,第一存储器控制器也可以耦合到第二FC交换机,而第二存储器控制器可以耦合到第一FC交换机。
[0016] 第一和第二多个数据存储设备和至少一个存储器控制器可以在例如存储区域网络(SAN)中连接在一起。此外,至少一个存储器控制器可以是至少一个广播视频服务器。
[0017] 视频媒体数据存储方法的方面可以包括提供第一和第二多个数据存储设备,每个数据存储设备以独立冗余驱动器阵列(RAID)配置来组织,以便允许写入和读取视频媒体数据,以及将视频媒体数据镜像地写入到第一和第二多个数据存储设备。该方法还可以包括为第一和第二多个数据存储设备生成相应的第一和第二文件分配表(FAT),其中包括视频媒体数据时间戳和有效性信息。该方法还可以包括基于第一和第二FAT,有选择地从第一和第二多个数据存储设备读取视频媒体数据。
[0018] 图1是根据本发明的视频媒体数据存储系统的示意框图。
[0019] 图2是图1的视频媒体数据存储系统的替代性实施例的示意框图。
[0020] 图3是示出向其镜像写入的图1的镜像RAID集的RAID映射。
[0021] 图4是示出图1的系统的视频媒体数据写入操作的流程图。
[0022] 图5是来自图1的系统的带有伴随的文件分配表(FAT)和数据条带的第一和第二多个数据存储设备的示意图。
[0023] 图6是示出图1的系统的视频媒体数据读取操作的流程图。
[0024] 图7是图1的系统的第一和第二多个数据存储设备以及其相关联的FAT表的RAID映射。
[0025] 图8A和8B是图1的系统的第一和第二多个数据存储设备的各自的FAT表,而图8C是示出由图1的系统的存储器控制器基于图8A和8B的FAT表中的信息执行的读取操作的对应的操作表。
[0026] 图9-13是示出图1的系统的各种视频媒体数据恢复场景的RAID驱动器映射。
[0027] 图14是一般性地示出了根据本发明的读取和写入操作的流程图。
[0028] 图15是示出了根据本发明的另一有利方面的数据恢复操作的流程图。
[0029] 图16是比较可以在图1的系统中实现的奇偶校验配置的RAID 3与ECC开销的图。
[0030] 下面将参考各个附图比较全面地描述本发明,在附图中,示出了本发明的优选实施例。然而,本发明可以许多不同的形式来实现,不应该被理解为仅限于此处所阐述的实施例。相反,提供这些实施例是为了使公开完整和彻底,并向那些本领域技术人员全面地表达本发明的范围。遍及说明书,相似的编号表示的相似的元素,并且使用符号注释来表示替换实施例中的类似的元件。
[0031] 首先参考图1,首先描述了视频媒体数据存储系统30和相关联的视频数据存储方法。系统30示例性地包括第一和第二多个或数据存储设备D1和D2或数据存储设备集D1和D2,每个以独立冗余驱动器阵列(RAID)配置来组织,以便允许写入和读取视频媒体数据。如此处所使用的,“视频媒体数据”包括例如视频、图形、自动化和/或动画,以及相关联的音频数据。此外,一个或多个存储器控制器31示例性地耦合到第一和第二RAID集D1、D2。在典型的实现中,数据存储设备可以是磁盘或光盘,虽然也可以使用其他合适的数据存储设备(例如,闪存驱动器等等)。
[0032] 系统30可以特别适用于诸如在广播或流式播放视频数据应用之类的需要很大带宽的应用中。在所示示例中,由视频摄像机32生成视频数据馈送,并可以通过诸如卫星链路(由图1中的卫星站33所示出的)之类的一种或多种通信介质、同轴/光纤连接、诸如因特网等等之类的广域网(WAN),将来自系统30的视频媒体数据传输到接收者,如本领域的技术人员所理解的。
[0033] 现在另外转向图3和14,从框140开始,首先一般性地描述系统30的写入和读取操作,并且在下面提供进一步的细节。存储器控制器31将视频媒体数据镜像地写入到第一和第二RAID集D1、D2(框141-142)。在一个示例性实现中,在给定RAID集D1、D2中的数据被写入在数据条带中(即,被划分为块或区段,每块或区段都被写入到不同的存储设备),分为条带的数据在RAID集D1、D2中被镜像,如下面将进一步讨论的。图3示出了此镜像数据写入。
[0034] 在框143,存储器控制器31还为第一和第二RAID集D1、D2生成相应的第一和第二文件分配表(FAT),其中包括视频媒体数据时间戳和有效性信息(例如,驱动器/扇区故障信息等等)。由于两个FAT都对存储器控制器31可用,因此,在框144,它可以基于第一和第二FAT,有利地有选择性地从第一和第二RAID集D1、D2读取视频媒体数据,从而结束图14中所示出的方法(框145)。即,存储器控制器31在执行读取操作时具有更大的灵活性,这在有多个驱动器故障的情况下可能特别重要。例如,存储器控制器31可以优先读取没有故障并且具有最近的视频媒体数据时间戳的数据存储设备。此外,这还有利地允许例如使用负载平衡来缩短读取时间并增大数据吞吐量。
[0035] 此外,此配置还允许存储器控制器31基于第一和第二FAT,在第一和第二RAID集D1、D2之间从镜像的视频媒体数据执行数据恢复。换言之,这允许RAID间的数据恢复(即,从RAID集D1到D2,或反之)。更具体而言,存储器控制器31可以将视频媒体数据作为分为条带的视频媒体数据写入在第一和第二RAID集D1、D2中的每一个中,并从分为条带的视频媒体数据生成奇偶校验数据,以基于所述奇偶校验数据,在给定RAID集内执行数据恢复(即,RAID内的数据恢复),如下面将进一步讨论的。一般而言,存储器控制器31将在使用镜像视频媒体数据(RAID间的恢复)和奇偶校验数据(RAID内的恢复)之间进行选择,以基于在第一和第二RAID集D1、D2内具有故障的数据存储设备的数量来执行数据恢复,如下面也将进一步地讨论的。
[0036] 现在另外转向图2,在替换实施例中,系统30′被实现为存储区域网络(SAN),并包括相应的广播视频服务器作为存储器控制器31a′、31b′。作为示例,可以使用的一个合适的广播视频服务器是来自Harris Corporation(当前受让人)的Nexio Advanced Media Platform(高级媒体平台,AMP)。然而,如本领域的技术人员所理解的,在不同的实施例中,也可以使用其他合适的存储器控制器/服务器。
[0037] 在SAN系统30′中,第一和第二RAID集D1′、D2′以RAID级别3(或更高)配置来组织,并实现数据条带化和奇偶校验(例如,纠错码(ECC)奇偶校验),如本领域的技术人员所理解的。奇偶校验数据存储在一个或多个专用奇偶校验数据存储设备40a′、40b′中。此外,第一和第二光纤通道(FC)交换机36a′、36b′还分别耦合到第一和第二存储器控制器31a′、31b′和第一和第二RAID集D1′、D2′。即,第一和第二RAID集D1′、D2′位于分开的FC域中,以有利地提供高冗余和可用性,如本领域的技术人员所理解的。
[0038] 此外,第一存储器控制器31a′示例性地耦合到第二FC交换机36b′,而第二存储器控制器31b′示例性地耦合到第一FC交换机36a′。这有利地使第一存储器控制器31a′访问第二RAID集D1′,并使第二存储器控制器31b′访问第二RAID集D2′。在某些实施例中,也可以使用额外的FC交换机来提供例如额外的对RAID集D1′、D2′的接入点。然而,应该注意,并不是在所有实施例中都需要SAN和/或FC网络配置。
[0039] 如上文所指出的,由于甚至关键数据位置中的单一未校正的比特错误都可能产生无法接受的视频异常,因此,一般希望实现某种形式的数据保护。在典型的RAID 3实现中,在发现问题之后,简单地使用奇偶校验信息来重构错误的数据。然而,在系统30中,可以连续地读取和解码奇偶校验信息,改善错误检测的能力以及纠错期间的数据性能。
[0040] 更具体而言,RAID集内的奇偶校验可以按如下方式在系统30或30′中实现。数据被组织成缓存或条带,并被存储在相应的驱动器1-P上,并且每个部分数据块的大小被定义为:
[0041] Data Buffer:D
[0042] Partial:d
[0043] Parity:P
[0044] Buffer size=Sd
[0045] Partial size:sd
[0046] Number of drives=n
[0047] Partial size(sd)=Sd/n,where Sd is divisible n,以及
[0048]
[0049] 将每一部分的XOR贡献表示为d,则奇偶校验公式被定义为:
[0050]
[0051] 可以经由逆运算重构一个故障数据块derr:
[0052]
[0053] 与许多RAID 3实现方式不同,在读取模式中,存储器控制器31a′、31b′有利地读取奇偶校验数据,并使用它来验证数据完整性,而不是简单地使用此信息来进行“事后”的数据恢复。由于奇偶校验数据通常基于来自每一部分的XOR贡献,因此,错误处理可以采取检测或者纠正的形式。在此应用中,取决于错误情况,奇偶校验公式有三种用途。第一错误情况是不返回部分数据块或报告出错。有缺陷的部分仍可以通过好的部分和奇偶校验的XOR结果来重构。此情况被称为纠单错(SEC)。
[0054] 第二种情况是返回所有部分数据和奇偶校验并且驱动器没有报告错误。如果所有数据和奇偶校验事实上都是好的,则该公式只是重建缓存。如果有任何部分有缺陷,则检测出错误,并丢弃损坏的缓存。对于视频(和音频)信息,数据可以被表示为黑,并可以替换为静音。此情况被称为检单错(SED)。再一种情况是部分数据集具有多个有缺陷的元素。在此情况下,数据不能被纠正,再次对于视频(和音频)信息,数据可以被表示为黑,并可以替换为静音。此情况被称为检多错(MED)。
[0055] 在RAID磁盘存储器子系统的情况下,发生故障的部分通常表示特定的发生故障的驱动器(解决知道哪一个部分有错误的问题),这会将模型降低到上文所提及的第一和第三种情况。通过依赖于驱动器知道何时它有问题而不是始终通过XOR验证来运行数据,大多数RAID系统通常都忽略第二种情况,使系统脆弱或有错误的未报告的数据。在视频服务器的应用中,由存储器控制器31a′、31b′实现的使用奇偶校验数据来进行检错的当前方法可能潜在地检测到此错误的数据,并将它替换为黑,以维护连续的不中断的视频流。此相同方法也可以用于音频,以减少“噼啪声(pop)”和“咔嗒声(click)”。
[0056] 在运行时始终保持运行的奇偶校验计数的另一个优点是在单个的纠正的错误的情况下的总体性能改善。如果驱动器发生故障,没有必要返回并重新读取以前的部分。相反地,存储器控制器31a′、31b′可以跳过发生故障的设备,并使用积累的奇偶校验信息来重构其数据贡献。这会有利地导致在“降级的”操作模式期间系统性能没有净降低。
[0057] 由于单个奇偶校验驱动器RAID只能保护数据条带使其避免发生单个数据元素故障,无法纠正的故障的可能性随着条带中所涉及的部分的量而增大。随着添加更多数据元素(此情况下,驱动器),产生无法纠正的双数据故障的可能性越大。使用单个奇偶校验RAID的基本折衷是,随着集变得越大,它们变得更加容易发生无法纠正的双重错误。因此,系统30′有利地利用多个镜像的RAID集D1′、D2′来提供进一步的错误恢复灵活性(除上文所提及的另外的数据读取灵活性之外),如下面将进一步讨论的。
[0058] 克服每个数据条带的单奇偶校验块的缺陷的一个改进的方法可以使用多奇偶校验块方法来实现。此方法的第一部分是定义一组公式来表示给定数据集的奇偶校验信息。使用汉明码来定义这些公式。通过使用汉明距为3的码来定义一组奇偶校验公式,可以取得下列特征的所希望的数据保护:
[0059] 奇偶校验公式数量(奇偶校验驱动器):r
[0060] 部分数据块的数量(数据驱动器):n=2r-l-r
[0061] 检查汉明公式的典型的(15,11,3)码SEC集的示例,按如下方式定义给定距离为3码的标准奇偶校验矩阵:
[0062] 位置p1 p2 d3 p4 d5 d6 d7 p8 d9 d10 d11 d12 d13 d14 d15[0063] 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1[0064] 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1[0065] H= 0 1 1 0 0 1 1 0 0 1 1 0 0 11
[0066] 1 0 1 0 1 0 1 0 1 0 1 0 1 01
[0067] 只有单一条目的列确定奇偶校验位置。此方法确保奇偶校验公式的独立性,产生下列集:
[0068] p1=d3+d5+d7+d9+d11+d13+d15
[0069] p2=d3+d6+d7+d10+d11+d14+d15
[0070] p4=d5+d6+d7+d12+d13+d14+d15
[0071] p8=d9+d10+d11+d12+d13+d14+d15
[0072] 对矢量形式r=(r1,r2,...r15)的接收到的数据条带的解码使用从上文的对应的数据公式导出的下列综合公式:
[0073] s1=r1+r3+r5+r7+r9+r11+r13+r15
[0074] s2=r2+r3+r6+r7+r10+r11+r14+r15
[0075] s4=r4+r5+r6+r7+r12+r13+r14+r15
[0076] s8=r8+r9+r10+r11+r12+r13+r14+r15
[0077] 从前面的方程组中获取的写作s=(s4+s3+s2+s1)的综合矢量标识单个错误的部分数据位置。一旦定位了错误,通过求解原始奇偶校验公式可以再现失效数据。这是距离为3的汉明SEC解码器的标准应用。
[0078] 在RAID应用中,由于之前提及的内部驱动器错误报告机制,发生故障的部分的位置可能是已知的。已知失效数据的位置取决于错误情形以不同的方式提高了距离为3的汉明码的性能。例如,如果不返回单一部分数据块或在报告出错,则可以如上文所描述地重构数据(不需要求解综合公式)。此情况是纠单错(SEC)。如果不返回两个部分数据块或报告出错,则也可以重构数据。基于上面的矩阵,对于任何两个已知的坏数据部分,存在至少一个公式只包含其中一个出错矢量。求解对应的数据公式将重构该部分,并且将综合症降低到前一情况。此情况是纠双错(DEC)。
[0079] 第三种情况涉及多个未知部分的组合。在这种情况下,不能纠正数据。对于视频(和音频)信息的情况,可以插入表示黑和/或静音的数据。此情况是多错误检测(MED)。尽管此最后一种情况,上文所描述的方法的优点是,可以纠正双数据错误,并且也可以纠正单一的位置未知的数据错误。
[0080] 比较单一奇偶校验和ECC就额外的开销而言的相对成本在确定哪一个策略最适合用于给定应用时是有用的。这可以通过将包含多个RAID 3集的驱动器群体的奇偶校验开销与以单一ECC集组织的同一个群体的奇偶校验开销进行比较来完成。图16中的图对于其中最大RAID 3条带长度被设置为9个驱动器(8数据+1奇偶校验)的示例来检查这两种方法。可以看出,ECC系统开始在大约25个驱动器(数据和奇偶校验)时有利,开销小于多个RAID 3集的开销的两倍。随着系统开始到达50个驱动器,ECC的开销实际变得小于RAID 3的ECC的开销,而仍可保持较高级别的保护。应该注意,可以在系统30′中的RAID集等级使用这些方法中的任何一个(或其他合适的方法)。
[0081] 尽管如此,局部化的RAID 3和ECC防止给定RAID内的驱动器相关的媒体和数据错误,不同的RAID之间的数据镜像不仅防止多个驱动器错误,而且还防止驱动器盒故障。虽然此额外的一层冗余提高了存储系统成本(即,因为它使用额外的RAID集),但是,它大大地提高数据的生存力和播放的可用性。相对于写入操作,可以在两个相同的RAID 3或ECC驱动器集之间进行镜像。写入是通过将数据部分和奇偶校验发送到两个相同的驱动器集D1′、D2′来完成的,这会导致创建完全冗余的数据集,如图3所示。应该注意,“相同的”意思是,RAID集D1′、D2′具有至少某些对应的驱动器是相同的,虽然在某些实施例中这些RAID集可能具有不是镜像配置的一部分的其他或额外的驱动器。
[0082] 现在转向图4和5,描述了由存储器控制器31执行的示例性写入流程。从框40开始,存储器控制器31,在框41中,开始尝试将视频媒体数据条带写入到其中一个RAID数据集(在本示例中是D1)。如果在框42中,到RAID集D1的写入不能成功地完成,诸如由于驱动器故障等等,那么,在框43中,存储器控制器31尝试将视频媒体数据条带写入到第二RAID集D2。如果这是成功的,那么,在框45,存储器控制器31更新FAT表,以指出RAID数据集D1存储设备是坏的,而RAID数据集D2是好的,并写入表示写入时间的时间戳TS。否则,RAID集D1和D2中的两者都具有一个或多个坏的存储设备/扇区,并在框46中相应地更新第一和第二FAT。
[0083] 如果到RAID数据集D1的写入最初成功(框42),那么,在框47,尝试到RAID数据集D2的镜像写入,并且在框45,存储器控制器31判断此写入操作是否成功。因此,如上文所描述的,对于向RAID集D2的写入操作成功的情况(框49),以及不成功的情况(框50),更新第一和第二FAT表。此时,在框50-51,存储器控制器31将第一和第二FAT表写入到它们各自的第一和第二RAID集D1,D2,如此结束所示出的写入操作(框52)。
[0084] 图5中示出了镜像RAID集配置的示例性FAT。由于可能的故障情形不仅涉及写入错误而且还涉及丢失整个RAID集的可能性,因此,需要防止这些故障模式。每个RAID集D1、D2的FAT都有利地包括扇区索引信息、时间戳,以及两个RAID集的数据OK标记,如图5所示。如果未能在镜像的任一侧(即,在任何一个RAID集)写入,则清除两个FAT中的对应的数据OK标记。这样,后续的读取将知道忽略这些数据元素,如下面进一步地讨论的。
[0085] 此处所描述的写入/读取/恢复操作的一个特别有利的特征是,它们可以使用在存储器控制器/服务器上运行的软件应用来实现。可以用来实现此处所描述的方法的一个合适的软件应用是来自Harris Corporation的RAIDSoft应用。由存储器控制器31执行奇偶校验操作/计算,并且然后以镜像方式将数据以及局部化奇偶校验写入到RAID集D1、D2两者中,如上文所讨论的。所有这些信息都在块级别被镜像,FAT表除外。FAT表在两个RAID集D1、D2之间不同,以跟踪坏扇区/驱动器和离线情况。在某些实施例中,两个RAID集D1、D2的FAT信息也可以存储在诸如随机存取存储器(RAM)的存储器中,以通过存储器控制器31提供更快的操作。
[0086] 现在另外转向图6和7,现在将描述读取过程。一般而言,数据读取执行一次,并在第一和第二RAID集D1、D2之间进行负载平衡,如果两个集都包含好的(即,无故障和/或最新的)数据的话。在FAT中指出了未记录的或有故障的扇区/驱动器,并在读取操作中不使用它们。如果负载平衡的读取返回错误,那么,数据的另一个副本立即没有或几乎没有干扰地被读取,以例如在广播场景中进行播放。在RAID集停机的情况下,停机的集将不会再被访问,直到消除了问题(例如,替换了驱动器等等)。可以周期性地发送探测命令以确定例如何时停机的集返回工作,如本领域的技术人员所理解的。
[0087] 更具体而言,从框60开始,当执行读取操作时,存储器控制器31首先检查第一和第二FAT表,以查看数据是否对于第一和第二RAID集D1、D2两者中的给定数据块是好的(框61,62),如图7所示。比如通过逻辑“OR”操作比较FAT表的结果(框63),以确定所怀疑的驱动器的四种可能的故障情况,即:(a)RAID集D1是好的,但是RAID集D2是坏的(框64);(b)两个RAID集都是好的(框65);(c)RAID集D1是坏的,但是RAID集D2是好的(框
66);以及(d)两个RAID集对于给定数据块都是坏的(框67)。
[0088] 在第一种情况(a)下,在框68,存储器控制器31试图读取第一RAID集D1,并且如果读取完全成功(框69),那么相应地在框70输出数据。如果由于任何原因读取操作不成功,那么可以在框71输出黑和/或静音。在第二种情况(b)下,由于两个RAID集都是好的(即,无故障),那么在框72,存储器控制器31检查哪个RAID集D1、D2具有最新的数据(即,比较时间戳)。如果RAID集D1的时间戳更新,则存储器控制器31读取第一RAID集,如上文在框68-71所描述的。
[0089] 如果时间戳相同,那么,存储器控制器31可以从RAID集D1、D2中的任一个读取,并且两者之间的选择可以基于负载平衡算法(即,检查当时哪一个最忙,并使用另一个),和/或可以使用优先(即,默认)模式。例如,在所示出的实施例中,亲和性被给予奇数或偶数RAID集,以便奇数编号的存储器控制器(例如,控制器#1)将首先访问奇数编号的RAID集(即,RAID集D1),反之亦然。在本示例中,亲和性被给予第一RAID集D1,在框73,存储器控制器31试图读取该第一RAID集D1。如果在框74读取是成功的,则输出数据(框75)。如果不,则存储器控制器31仍具有回复到第二RAID集D2的选项。如果在框76-77,尝试的从第二RAID集D2的读取是成功的,那么在框78输出数据。否则,在框79输出黑和/或静音数据。
[0090] 对于第三种情况(c),存储器控制器31试图以上文参考框76-79所描述的同样的方式从第二RAID集D2中进行读取。对于其中两个RAID集D1、D2具有故障等等的最后一种情况(d),那么在框79,输出黑和/或静音数据。在图7所示的示例性实施例中,所有驱动器都没有故障,并具有相等的时间戳(意思是说,两个集都具有全新的或最新的数据)。应该注意,在某些实施例中,如果镜像数据是坏的或“陈旧的”,则也可以使用上文所描述的奇偶校验数据来从有故障的驱动器执行读取,如本领域的技术人员所理解的,虽然为清楚起见,在图6中没有示出。通常,如果RAID集内的单一驱动器有故障,而其余驱动器没有故障,则此选项可用。即,随着有故障的驱动器的数量增大超过1,则如本领域的技术人员所理解的,可以使用RAID集内的奇偶校验来读取和/或恢复此数据的可能性较小。这是为什么在系统30需要有高吞吐量和可用性的情况下镜像写入/读取/恢复操作特别有利的原因。
[0091] 现在另外参考图8A-8C,将参考示例性读取场景,进一步理解上文所描述的读取操作。对于第一块数据(存储在RAID集D1、D2两者中的驱动器d1上),从图8的操作表可以看出,两个FAT都反映,驱动器d1在两个RAID集中都是好的,并且,它们的时间戳相等。如此,两个数据条带都具有“好的”数据,并且基于亲合性、负载平衡等等,可以成功地读取任何一个。在第二数据块的情况下,两个FAT都指出,驱动器d2在第一RAID集D1中是好的,但是,第二FAT指出,第二RAID集D2中的驱动器d2是坏的,RAID集D1中的驱动器d1的时间戳比第二RAID集D2的驱动器d2的时间戳新。如此,只有第一数据条带(即,RAID集D1)被视为对读取有效。
[0092] 对于第四数据块,驱动器d4在第二FAT表中被列为是坏的,并且第二FAT中的驱动器d4的时间戳也是较新的。如此,第一数据条带再次被视为坏的,而第二数据条带(即,RAID集D2)被读取。对于第七数据块,两个FAT表都指出,RAID集D1和D2都是好的,但是,第二RAID集的驱动器d7的时间戳较新,表示第一RAID集的驱动器d7上的数据陈旧。因此,存储器控制器31将第一数据条带视为旧的,并从第二RAID集的驱动器d7中读取。在对于第九数据块的最后一个所示出的情况下,两个FAT表都指出,RAID集D1和D2都是好的,但是,第一RAID集的驱动器d7的时间戳较新,表示第二RAID集的驱动器d7上的数据陈旧。因此,存储器控制器31将第二数据条带视为旧的,并从第一RAID集的驱动器d7中读取。
[0093] 现在参考图9-13和图15,现在进一步描述由存储器控制器31执行的数据恢复步骤。一般而言,在两个RAID集都可用的情况下,所有磁盘上的所有未使用的、坏的或不同步扇区都将被写入以恢复的数据。恢复的数据优选地始终是从RAID集D1、D2中最合适的那一个获取的“最新的”副本。如果最新的数据发生了从单个磁盘的读取错误,那么,使用RAID集间的镜像数据来恢复数据。
[0094] 更具体而言,从框150开始,如上文所讨论的,为第一和第二RAID集D1、D2生成奇偶校验数据(框150)。具体而言,可以为RAID集D1、D2中的一个生成奇偶校验数据,并且然后作为镜像数据集的一部分被拷贝,虽然在某些实施例中,如果需要,可以为每个RAID集独立地生成奇偶校验数据。在框152,存储器控制器31基于例如OK标记和时间戳,确定第一和第二RAID集中的哪一个存储设备需要恢复或数据刷新。
[0095] 存储器控制器执行数据恢复的方式将取决于受影响的存储设备/驱动器的数量。更具体而言,如果RAID集D1或D2中的一个中只有单个驱动器受影响,则在框154,在运行时,从RAID集内的奇偶校验数据恢复数据,从而结束所示出的示例(框155)。在图9中所示出的示例中,RAID集D1中的驱动器d4是坏的(或具有过时的日期),如虚线标记所示。
这里,可以使用存储在第一RAID集中的驱动器P中的奇偶校验数据来恢复数据,从而不需要利用第二RAID集D2中的镜像数据来进行恢复(虽然这可以进行,如果需要的话)。
[0096] 在坏的驱动器的情况下,用户将替换坏的驱动器,并且例如,一旦存储器控制器31检测到驱动器不再有故障,恢复操作可以有利地由存储器控制器31自动地执行。应该注意,即使来自RAID集D1、D2的对应的部位损坏,也可以使用来自任何一集的奇偶校验数据来重构数据缓冲区。
[0097] 然而,如果多于一个的驱动器受影响,则取决于特定场景,在框156-157,除了基于RAID内的奇偶校验的恢复,或代替基于RAID内的奇偶校验,还使用RAID间的恢复。在图10中所示出的示例中,第一RAID集D1中的两个驱动器是坏的,或具有过时数据,即,驱动器d4和d9。这里,存储器控制器31使用来自第二RAID集D2中的对应的驱动器d4和d9的镜像数据,以将该数据恢复到第一RAID集D1的驱动器d4和d9,该操作也可以有利地在运行时执行,而不会中断播放时间。
[0098] 图11中示出了一种更大范围的磁盘故障场景,其中,第一RAID集D1中的多个驱动器发生故障(即,驱动器d4、d9、d13和P),而第二RAID集中的对应的磁盘d9也发生故障。这里,使用RAID之间的奇偶校验数据从其驱动器P来恢复第二RAID集D2的驱动器d9中的数据,然后,可以使用来自第二RAID集中的对应的驱动器的数据,恢复第一RAID集D2中的有故障的驱动器(即,驱动器d4、d9、d13,以及P)。这仍可以有利地由存储器控制器31在运行时执行,而不会中断播放。
[0099] 图12示出了另一个故障场景,其中,整个RAID集D1在某个时间段内发生故障。作为示例,当从存储器控制器/服务器、驱动器底盘,或交换机拔出FC电缆时,可能会发生这种情况。在FC交换机被意外拔出或发生故障的情况下,或在驱动器底盘断电或发生故障的情况下,也可能会发生这种情况,如本领域的技术人员所理解的。在这样的情况下,存储器控制器31将无法访问第一RAID集D1,但是,仍将有利地能够从第二RAID集D2进行读取和写入,对输出视频流没有或几乎没有影响。在此情况下,被受影响的服务器(例如,图2中的服务器31a′)写入的扇区在相对的RAID集的FAT中被记为“坏的”,并且因此将不会被用于由任何服务器执行的后续读取操作中。一旦受影响的RAID集的电源/连接被恢复,则存储器控制器从RAID集D2中的镜像数据向RAID集D1中的对应的驱动器执行数据恢复。
[0100] 如此,将可以理解,对于如上文所讨论的镜像RAID 3(或更高)集,可以恢复其中一个RAID集中的所有的部分元件(即,单个驱动器)的丢失以及另一个RAID集中的额外的单一驱动器的丢失。在某些情况下,镜像的ECC RAID集可以有利地从整个RAID集的丢失以及另一个RAID集上的两个额外的元件的丢失中恢复。如果整个RAID集不可用,如在前面的示例中,当它重新被使用时,它很可能将包含过时数据元素。通过比较读取过程中的时间戳,过时数据元件可以被忽略。这可以例如对对应的数据值进行“OR(或)”操作并比较时间戳来完成。