查询和修复数据的制作方法

文档序号:6376782阅读:200来源:国知局
专利名称:查询和修复数据的制作方法
查询和修复数据
背景技术
各种电子存储介质上的数据可能随时间推移变成已破坏。就一些类型的介质(t匕如⑶、DVD、磁带、软盘和其它介质)而言,介质实际上开始老化并因此丢失数据。就其它类型的介质(比如EPROM和闪存)而言电荷可能耗散从而导致丢失数据。虽然一般已知硬驱动并且甚至固态器件(SSD)可能在它们崩溃或者以别的方式变成不起作用时丢失数据,但是至少一些业外人士未公知的是即使尚未崩溃的良好运转的存储设备也可能具有悄悄地或者以别的方式变成已破坏的数据。这里要求保护的主题内容不限于解决任何弊端或者或者仅在比如上文描述的环境这样的环境中操作的实施例。实际上仅提供这一 “背景技术”以举例说明其中可以实现 这里描述的一些实施例的一个示例性的技术领域。

发明内容
简言之,这里描述的主题内容的方面涉及查询和修复数据。在各方面中,部件可以检测储存器上的已经变成已破坏。作为响应,部件可以请求来自数据的一个或者多个冗余副本的数据并且如果有冗余副本则可以确定哪些冗余副本未破坏。如果发现未破坏的副本,则部件可以发送修复已破坏的数据的请求并且可以标识用来修复已破坏的数据的未破坏的副本。


图I是代表这里描述的主题内容的各方面可以并入于其中的示例性通用计算环境的框 图2是代表主题内容的方面可以并入于其中的示例性环境的框 图3-4是一般而言代表根据这里描述的主题内容的各方面从应用的角度来看可以出现的示例性动作的框 图5是一般而言代表根据这里描述的主题内容的各方面从洗刷器(scrubber)的角度来看可以出现的示例性动作的框 图6是一般而言代表根据这里描述的主题内容的各方面从存储系统的角度来看可以出现的示例性动作的框 图7是一般而言代表根据这里描述的主题内容的各方面的在基于RAID的存储系统中跨盘的数据的条化(stripping of data)的框图;并且
图8是代表根据这里描述的主题内容的各方面的已经在其中结合图2的储存器的另一示例性环境的框图。
具体实施例方式如这里所用,措词“包括”及其变体将理解为意味着“包括但不限于”的开放术语。除非上下文另有明示,措词“或者”将理解为“和/或”。措辞“基于”将理解为“至少部分地基于”,措词“一个实施例”和“一实施例”将理解为“至少一个实施例”。措词“另一实施例”将理解为“至少一个其它实施例”。如这里所用,比如“一”、“一个”和“该”这样的措词包括指示的项或者动作中的一个或者多个项或者动作。具体而言,在权利要求中,对项的引用一般意味着至少存在一个这样的项,而对动作的弓I用意味着动作的至少一个实例被执行。这里有时可以使用“第一”、“第二”、“第三”等措词。在无附加上下文时,在权利要求中使用这样的措词并不旨在暗示排序而实际上用于标识目的。例如短语“第一版本”和“第二版本”未必意味着第一版本恰为第一版本或者是在第二版本之前创建的或者甚至在第二版本之前请求或者操作第一版本。实际上,这些短语用来标识不同版本。标题仅为了方便;关于给定主题的信息可以在标题指示该主题的章节以外找到。下文可以包括其它显式和隐式定义。
示例操作环塏
图I图示了这里描述的主题内容的各方面可以实施于其上的适当的计算系统环境100的例子。计算系统环境100仅为适当的计算环境的一个例子并且未旨在于暗示关于这里描述的主题内容的各方面的使用或者功能范围的任何限制。计算环境100也不应解释为具有涉及示例操作环境100中所示部件中的任何部件或者组合的任何依赖或者要求。这里描述的主题内容的各方面可与诸多其它通用或者专用计算系统环境或者配置一起操作。可以适合用于与这里描述的主题内容的各方面一起使用的公知计算系统、环境或者配置的例子包括个人计算机、服务器计算机、手持或者膝上型设备、微处理器系统、基于微控制器的系统、机顶盒、可编程消费者电子设备、网络PC、小型计算机、主机计算机、个人数字助理(PDA)、游戏设备、打印机、包括机顶盒、媒体中心或者其它装置的装置、汽车嵌入或者附着式计算设备、其它移动设备、包括上述系统或者设备中的任何系统或者设备的分布式计算环境等。可以在计算机执行的计算机可执行指令(比如程序模块)的一般背景中描述这里描述的主题内容的各方面。一般而言,程序模块包括执行特定任务或者实施特定抽象数据类型的例程、程序、对象、部件、数据结构等。也可以在分布式计算环境中实现这里描述的主题内容的各方面,其中任务由通过通信网络链接的远程处理设备执行。在分布式计算环境中,程序模块可以位于包括存储器存储设备的本地和远程计算机存储介质中。参照图1,用于实施这里描述的主题内容的各方面的示例系统包括形式为计算机110的通用计算设备。计算机可以包括能够执行指令的任何电子设备。计算机110的部件可以包括处理单元120、系统存储器130和将包括系统存储器的各种系统部件耦接到处理单元120的系统总线121。系统总线121可以是若干类型的总线结构中的任何类型的总线(包括存储器总线或者存储器控制器、外设总线和使用多种总线架构中的任何总线架构的本地总线)。举例而言而非限制,这样的架构包括工业标准架构(ISA)总线、微通道架构(MCA)总线、增强型ISA (EISA)总线、视频电子标准协会(VESA)本地总线、外围部件互连(PCI)总线(但也称为夹层(mezzanine)总线)、外围部件互连扩展(PCI-X)总线、高级图形端口(AGP)和 PCI 快速(PCIe)。计算机110通常包括多种计算机可读介质。计算机可读介质可以是计算机110可以访问的任何可用介质并且包括易失性和非易失性介质以及可移动和不可移动介质。举例而言而非限制,计算机可读介质可以包括计算机存储介质和通信介质。
计算机存储介质包括以用于存储信息(比如计算机可读指令、数据结构、程序模块或者其它数据)的任何方法或者技术中实施的易失性和非易失性、可移动和不可移动的介质。计算机存储介质包括RAM、ROM、EEPR0M、固态储存器、闪存或者其它存储器技术、CD-ROM、 数字多功能光盘(DVD)或者其它光盘储存器、磁盒、磁带、磁盘储存器或者其它磁存储设备或者可以用来存储所需信息并且可以由计算机110访问的任何其它介质。
通信介质通常体现为计算机可读指令、数据结构、程序模块或者在调制的数据信号(比如载波)或者其它传送机制中的其它数据并且包括任何信息递送介质。术语“调制的数据信号”意味着如下信号,该信号的特性中的一个或者多个特性以对信号中的信息编码这样的方式来设置或者改变。举例而言而非限制,通信介质包括有线介质(比如有线网络或者直接有线连接)和无线介质(比如声学、RF、红外线和其它无线介质)。也可以在计算机可读介质的范围内包括上述通信介质中的任何通信介质的组合。
系统存储器130可以包括形式为易失性和/或非易失性存储器的计算机存储介质 (比如只读存储器(R0M)131和随机存取存储器(RAM)132)。基本输入/输出系统133(BI0S) 通常存储于ROM 131中,该BIOS包含有助于比如在启动期间在计算机110内的单元之间传送信息的基本例程。RAM 132通常包含处理单元120立即可访问和/或当前操作的数据和 /或程序模块。举例而言而非限制,图I图示了操作系统134、应用程序135、其它程序模块 136和程序数据137。
计算机110也可以包括其它可移动/不可移动、易失性/非易失性计算机存储介质。仅举例而言,图I图示了从或者向不可移动、非易失性磁介质读取或者写入的硬盘驱动 141、从或者向可移动、非易失性磁盘152读取或者写入的磁盘驱动151和从或者向可移动、 非易失性光盘156 (比如⑶ROM或者其它光学介质)读取或者写入的光盘驱动155。可以在示例操作环境中使用的其它可移动/不可移动、易失性/非易失性计算机存储介质包括磁带盒、闪存卡、数字多功能光盘、其它光盘、数字视频带、固态RAM、固态ROM等。硬盘驱动 141可以通过接口 140连接到系统总线121,并且磁盘驱动151和光盘驱动155可以由用于可移动、非易失性存储器的接口(比如接口 150)连接到系统总线121。
上文讨论和图I中图示的驱动及其关联计算机存储介质提供用于计算机110的计算机可读指令、数据结构、程序模块和其它数据的存储。例如在图I中图示了硬盘驱动141 为存储操作系统144、应用程序145、其它程序模块146和程序数据147。注意这些部件可以与操作系统134、应用程序135、其它程序模块136和程序数据137相同或者不同。这里向操作系统144、应用程序145、其它程序模块146和程序数据147给予不同编号以说明至少它们是不同副本。
用户可以通过输入设备(比如键盘162和指示设备161 (常称为鼠标、跟踪球或者触板))向计算机110中录入命令和信息。其它输入设备(未示出)可以包括麦克风、操纵杆、 游戏板、卫星盘、扫描仪、触敏屏幕、写字板等。这些和其它输入设备经常通过用户输入接口 160 (该接口耦接到系统总线)连接到处理单元120、但是可以由其它接口和总线结构(比如并行端口、游戏端口或者通用串行总线(USB ))连接。
监视器191或者其它类型的显示设备也经由接口(比如视频接口 190)连接到系统总线121。除了监视器之外,计算机也可以包括其它外围输出设备(比如可以通过输出外设接口 195连接的扬声器197和打印机196)。
计算机110可以使用与一个或者多个远程计算机(比如远程计算机180)的逻辑连接在联网环境中操作。远程计算机180可以是个人计算机、服务器、路由器、网络PC、对等设备或者其它常见网络节点并且通常包括上文相对于计算机110描述的单元中的许多或者所有单元,但是在图中仅已经图示存储器存储设备181。图I中描绘的逻辑连接包括局域网 (LAN) 171和广域网(WAN) 173、但是也可以包括其它网络。这样的联网环境在办公室、企业范围的计算机网络、内部网和因特网中司空见惯。
当在LAN联网环境中使用时,计算机110通过网络接口或者适配器170连接到LAN 171。当在WAN联网环境中使用时,计算机110可以包括调制解调器172或者用于通过WAN 173 (比如因特网)建立通信的其它装置。可以在内部或者外部的调制解调器172可以经由用户输入接口 160或者其它适当机制连接到系统总线121。在联网环境中,相对于计算机 110描绘的程序模块或者其部分可以存储于远程存储器存储设备中。举例而言而非限制,图 I图示了远程应用程序185为驻留于存储器设备181上。将理解所示网络连接是示例性的并且可以使用在计算机之间建立通信链路的其它手段。
修复数据如先前提到的那样,存储介质上的数据可能变成已破坏。图2是代表主题内容的各方面可以并入于其中的示例性环境的框图。环境200包括实体205-208和210-214。这些实体中的单个实体有时称为部件,而这些实体中的两个或者更多实体有时可以称为部件。
图2中所示部件为举例而并非为了囊括可能需要或者包括的部件。另外,存储部件数目可以在其它实施例中不同而未脱离这里描述的主题内容的方面的精神实质或者范围。在一些实施例中,可以在其它部件(已示出或者未示出)中包括或者在子部件中放置结合图2描述的部件而未脱离这里描述的主题内容的方面的精神实质或者范围。在一些实施例中,可以跨多个设备分布结合图2描述的部件和/或功能。
如这里所用,术语部件将理解为包括硬件(比如设备的全部或者部分)、一个或者多个软件模块或者其部分的汇集、一个或者多个软件模块或者其部分与一个或者多个设备或者其部分的一些组合等。
例如可以使用一个或者多个计算设备来实施图2中所示部件。这样的设备可以例如包括个人计算机、服务器计算机、手持或者膝上型设备、微处理器系统、基于微控制器的系统、机顶盒、可编程消费者电子设备、网络PC、小型计算机、主机计算机、蜂窝电话、个人数字助理(PDA)、游戏设备、打印机、包括机顶盒、媒体中心或者其它装置的装置、汽车嵌入或者附着式计算设备、其它移动设备、包括上述系统或者设备中的任何系统或者设备的分布式计算环境等。
可以配置成实施图2的部件中的一个或者多个部件的示例设备包括图I的计算机 110。
部件也可以包括代码或者由代码代表。代码包括指示计算机将采取的动作的指令。代码也可以包括除了计算机将采取的动作之外的信息(比如数据、资源、变量、定义、关系、关联等)°
代码可以由计算机执行。当代码由计算机执行时,这可以称为进程。如这里所用术语“进程”及其变体可以包括一个或者多个传统进程、线程、部件、库、执行任务的对象等。可以在硬件、软件或者硬件与软件的组合中实施进程。在一个实施例中,进程是无论如何称谓都能够执行动作或者在执行动作时使用的任何机制。进程可以分布于多个设备或者单个设备之上。应用(例如应用205和洗刷器206)可以在用户模式、内核模式、某个其它模式、 上述模式的组合等中执行。应用可以作为存储系统的部分或者在存储系统以外(即未作为存储系统的部分)执行。
储存器210-214可以包括能够存储数据的任何存储介质。存储器可以包括易失性存储器(例如RAM或者先前描述的其它易失性存储器)和/或非易失性存储器(例如硬驱动或者先前描述的其它非易失性存储器)。储存器可以完全位于一个设备上或者可以跨多个设备来分布。储存器可以在外部、内部或者包括在托管储存器的存储系统内部和外部的部件。
措辞“数据”将广义理解为包括可以由一个或者多个计算机存储单元代表的任何内容。逻辑上,可以在易失性或者非易失性存储器中将数据表示为I和O的系列。在具有非二进制存储介质的计算机中,可以根据存储介质的能力表示数据。可以将数据组织成不同类型的数据结构(包括简单数据类型(比如数、字母等)、分级、链接或者其它有关的数据类型、包括多个其它数据结构或者简单数据类型的数据结构等)。数据的一些例子包括信息、 程序代码、程序状态、程序数据、其它数据等。
虽然图示了储存器210和211为分别连接到应用205和洗刷器206,但是在其它实施例中,这些储存器可以经由文件系统207由应用205和洗刷器206访问。在一些实施方式中,可以组合储存器210和储存器211,从而应用205和洗刷器206在获得校验和时使用同一储存器。在图8中图示了这一点的例子,其中已经将图2的储存器210和211组合成储存器209。
回顾图2,在一些实施方式中,可以在托管储存器212-214的存储系统上托管储存器210和211。在其它实施方式中,可以有可能在与托管储存器212-214的存储系统分离的存储系统上托管储存器210和211。图2中所示储存器数目仅为举例。在其它实施例中,可以有更多或者更少的储存器。
应用205可以与文件系统207通信以访问储存器212-214上的数据。如这里所用访问可以包括读取数据、写入数据、删除数据、更新数据、包括上述操作中的两个或者更多操作的组合等。
文件系统207可以负责经由冗余管理器208向非易失性储存器(例如储存器 212-214)持久存储数据并且从非易失性储存器取回数据。当文件系统207接收读取请求时,文件系统207可以与冗余管理器208通信以从储存器212-214中的一个或者多个储存器获得请求的数据。在冗余管理器208已经向文件系统207提供数据之后,文件系统207 可以向请求实体(例如应用205或者洗刷器206)提供数据。
冗余管理器208可以负责存储储存器212-214上的数据的一个或者多个副本。例如冗余管理器208可以将一个储存器的数据镜像到一个或者多个其它储存器上。作为另一例子,冗余管理器208可以通过使用本领域已知的标准或者专用的独立磁盘冗余阵列 (RAID)技术来存储数据的多个逻辑副本。措辞“逻辑”用来指示比完整物理副本更少的数据(例如奇偶校验或者其它数据)可以用如下方式存储于其它储存器上,该方式为如果物理副本变成已破坏则可以根据这一数据创建完整副本。
文件系统207和/或冗余管理器208可以在向应用205或者洗刷器206提供数据之前检测和纠正来自储存器212-214的数据中的一些错误。例如文件系统207或者冗余管理器208也可以存储其它校验和数据,该数据可以用来检测和纠正储存器212-214上的一些类型的数据错误。下文更具体描述校验和。如果文件系统207和/或冗余管理器208检测到可以由存储的校验和数据纠正的错误,则可以纠正错误而不通知应用205或者洗刷器 206。
在一些实施方式中,冗余管理器208可以实施为文件系统207的部件。在其它实施方式中,冗余管理器208可以实施为与文件系统207分离的一个或者多个部件。文件系统207、冗余管理器208以及文件系统207和冗余管理器208使用的任何存储设备这里有时称为存储系统。存储系统可以包括为了持久存储数据并且提供对数据的访问而需要的任何部件。
与从文件系统207获得数据结合,应用205可以包括从储存器210获得对应校验和以确定数据是否已破坏。在一个实施方式中,应用205可以被配置成尝试验证响应于应用205向存储系统发出的每个读取请求而返回的数据。在另一实施方式中,应用205可以被配置成尝试验证响应于应用205向存储系统发出的一些读取请求而返回的数据。例如应用可以被配置成验证一些读取数据(例如用于某些文件)而不验证其它数据(例如用于其它文件)生效。
如这里所用,术语校验和包括可以用来验证其它数据的任何类型的数据。验证其它数据意味着校验和可以用来查证数据尚未变成已破坏。校验和可以是简单或者复杂的并且可以包括用于检测不同类型的错误的信息。
例如校验和(比如奇偶校验位)可以用来检测奇偶校验错误,而更复杂的校验和 (比如循环冗余校验(CRC))可以用来检测若干位的错误群。一些其它校验和(比如消息认证代码(MAC)、密码散列函数或者一些其它函数)可以用来检测数据可能出现的其它数据破坏。
可以在错误检测中或者在错误检测和纠正中使用校验和。例如校验和可以包括用于检测错误、但是不纠正错误的数据。作为另一例子,校验和可以包括用于检测和纠正某些类型的错误的数据。包括用于检测某些类型的错误的数据的校验和可以称为错误纠正代码 (ECC)0
上述例子未旨在于囊括或者穷举可以由这里描述的主题内容的各方面使用的校验和的类型。实际上,基于这里的教导,本领域技术人员可以认识到在未脱离这里描述的主题内容的各方面的精神实质或者范围的前提下可以使用的其它校验和。
如果应用205经由校验和确定来自文件系统207的数据已破坏,则应用205可以尝试从该数据的冗余副本获得未破坏的数据。作为第一步骤,应用205可以要求文件系统 207提供存储于储存器212-214上的该数据的每个副本。如果该数据仅在储存器212-214 上存储了一次,则应用205可以尝试用校验和纠正数据(如果可能的话)或者可以(例如经由日志、用户接口等)指示不可恢复的数据破坏错误。
如果该数据的一个或者多个副本存储于储存器212-214上,则应用205可以请求每个副本的数据并且可以使用校验和以确定任何该副本是否包含未破坏的数据。作为响应,冗余管理器208可以向文件系统207提供如请求的每个副本,该文件系统可以向应用205提供每个副本。
如果副本包含未破坏的数据,则应用205可以指示副本将用来纠正已破坏的原数据。如果副本包含未破坏的数据而一个或者多个其它副本包含已破坏的数据,则应用205 也可以指示包含未破坏的数据的副本被用来纠正具有已破坏的数据的一个或者多个副本。 在一个实施例中,当原数据已破坏时,应用205可以请求该数据的副本,只直至它找到具有未破坏的数据的副本。在另一实施例中,应用205可以请求该数据的所有副本以标识也已破坏的数据的所有副本。
与校验和对应的数据组(chunk)在不同实施方式中不同。例如在一个实施例中, 与校验和对应的数据组的大小可以是4千字节。在另一实施例中,与校验和对应的数据组的大小可以是64千字节。在又一实施例中,与校验和对应的数据组的大小可以是文件的大小。上述数据大小仅是示例性的。在其它实施例中,与校验和对应的数据组的大小可以小于或者大于上文指示的大小。
洗刷器206可以在可配置的时间(例如定期的、调度的时间等)执行以检测和纠正存储于储存器212-214上的数据的数据破坏。洗刷器206可以扫描一个或者多个卷、文件或者其部分、数据块等以检测和纠正数据破坏而不是检测和纠正它可能当前使用的数据的数据破坏(例如如同应用205)。在一个实施例中,洗刷器206可以作为低优先级进程来执行以尝试保存性能。在另一实施例中,洗刷器206可以以低优先级之外的优先级执行。
环境200除了洗刷器206之外还可以包括一个或者多个其它洗刷器(未示出)。在这样的实施方式中,洗刷器206可以(例如使用文件属性、性质或者与文件关联的其它元数据来)标注洗刷器206想要其它一个或多个洗刷器在其洗刷活动期间略过的文件。洗刷器 206可以这样做以部分地保证仅洗刷器206尝试纠正这样的文件的已破坏的数据。
此外,还可以有在应用205、洗刷器206和一个或多个其它洗刷器(如果有的话)之间的一些协调,从而它们不尝试在相同时间洗刷相同数据。
在一个实施例中,应用205 (并且还有洗刷器206)也可以将错误检测和纠正活动与其它进程同步。例如其它进程可以向应用205正在访问的数据写入。在应用205向文件系统207发送用于纠正数据块的指令之前,应用205可以查证块自从由应用205读取起尚未改变。如果块已经改变,则应用205可以再次读取块并且验证块以查看内容是否仍然已破坏。
在另一实施例中,文件系统207和/或冗余管理器208可以同步对存储于储存器 212-214中的一个或者多个储存器上的数据块有影响的活动。例如如果应用205确定数据块已破坏并且需要替换为该数据的副本,则文件系统207可以在应用205发送用于纠正数据的改变之前接收影响相同数据块的写入。写入可以重写已破坏的数据、因此“纠正”数据。 如果这个发生,则文件系统207可以忽略数据块已破坏并且需要更换的稍后指示。
作为另一例子,如果文件系统207在文件系统207接收需要纠正块的指示之后接收指示改变(该改变影响已破坏块)的I/o,则指示该改变的I/O可以由文件系统207保持直至已经执行数据纠正活动。
上文指示的同步活动仅为举例并且未旨在于囊括或者穷举。基于这里的教导,本领域技术人员可以认识到在未脱离这里描述的主题内容的各方面的精神实质或者范围的前提下可以由文件系统207和/或冗余管理器208执行的其它同步活动。
图3-6是一般而言代表根据这里描述的主题内容的各方面可以出现的示例性动作的流程图。为了说明简化起见,结合图3-6描述的方法被描绘和描述为动作系列。也将明白和理解这里描述的主题内容的各方面不受所示动作和/或动作顺序的限制。在一个实施例中,动作以如下文描述的顺序出现。然而在其它实施例中,动作可以并行、以另一顺序和/或与这里未呈现和描述的其它动作一起出现。另外,可以不需要所有所示动作以实施根据这里描述的主题内容的各方面的方法。此外,本领域技术人员将明白和理解方法可替代地可以经由状态图表示为一系列内部相关的状态,或可以表示为事件。
图3-4是一般而言代表根据这里描述的主题内容的各方面从应用的角度来看可以出现的示例动作的框图。转向图3,在块305,动作开始。
在块310,请求来自储存器的数据。例如参照图2,应用205可以通过向文件系统 207发送I/O请求来请求存储的数据。
在块315,获得与请求的数据对应的校验和数据。例如参照图2,应用205可以从储存器210获得与在块310请求的数据对应的校验和。如果希望,与块205和210关联的动作则可以并行进行。
在块320,从储存器接收数据。例如参照图2,应用205从文件系统207接收数据 (该文件系统从冗余管理器208获得该数据,该冗余管理器从储存器212-214中的一个或者多个储存器获得数据)。
在块25,数据被验证。例如参照图2,应用使用校验和来验证请求的来自文件系统 207的数据。这一验证可以例如涉及到计算请求的来自文件系统207的数据的校验和并且比较这一校验和与从储存器210获得的校验和。
在块330,如果数据破坏(例如校验和未匹配),则动作在块335继续;否则,动作在块340继续。
在块335,尝试纠正已破坏的数据,如结合图4更具体描述的。
在块340,如果有其它动作则可以执行其它动作。
转到图4,在块410,如果有数据的副本,则请求来自储存器的数据的副本。例如参照图2,应用205请求来自文件系统207的数据的一个或者多个副本。
有时这里使用措辞“文件句柄”或者“句柄”。这些术语中的每个术语将理解为意味着可以用于访问文件的任何指示符。例如文件句柄可以包括整数、指针、引用数据结构(该数据结构提供关于文件的上下文)的数据或者可以用来访问文件的其它数据等。例如文件句柄可以在文件系统打开用于进程的文件时由文件系统返回给进程并且可以在进程请求对文件执行操作时由进程提供给文件系统。
在一个实施例中,应用205可以通过向文件系统207指示用于文件句柄的后续操作将由指示的副本满足来请求具体副本。作为响应,文件系统207可以设置句柄的属性以指示用于后续操作的具体副本。随后,在应用205以别的方式命令之前,无论文件系统何时接收与句柄关联的请求,文件系统207都可以在与冗余管理器208通信时指定将满足请求的具体副本。在应用205完成请求数据的具体副本之后,应用可以指示任何副本可以用来满足与句柄关联的请求。作为响应,文件系统207例如可以设置句柄的属性以针对后续操作指示这一点。
使用上述机制,洗刷器206可以打开用于存储于储存器212-214中的文件的每个副本的句柄。洗刷器可以指示每个句柄与特定副本关联、然后可以使用每个句柄以访问数据的不同副本。
在另一实施例中,指示指定的副本的标识符可以与每个I/O请求一起传递给文件系统207。
在另一实施例中,应用205可以在访问数据的具体副本时调用文件系统207的不同读取方法。不同读取方法可以允许应用205指示将被读取数据的具体副本。
在接收针对数据的具体副本的请求之后,文件系统207向冗余管理器208转发请求或者根据请求导出的请求,该冗余管理器获得一个或者多个副本的数据并且将它返回给文件系统207。文件系统又进而将数据返回给应用。文件系统207和冗余管理器208可以暴露应 用编程接口(API ),该API允许程序查询数据的副本数目并且指示什么副本将用来向程序提供数据。应用205可以使用这一结构以按照标识符(例如编号或者其它标识符)请求副本。应用205可以如希望的那样并行或者依次请求数据的副本。
在一个实施例中,请求副本在找到第一有效副本之后停止。在另一实施例中,请求并验证数据的所有副本以纠正可能已破坏任何其它副本。
在块415,针对在块410请求的副本执行验证。例如参照图2,如果有存储于储存器212-214上的两个副本,则应用205可以请求两个副本中的每个副本并且可以使用先前从储存器210获得的校验和来验证它们。应用205可以填充列表、数组或者其它数据结构以跟踪哪些副本包含已破坏的数据而哪些包含未破坏的数据。如果副本中的至少一个副本包含未破坏的数据,则这一副本可以用来修复原有数据和包括已破坏的数据的任何其它副本。
在块420,如果发现至少一个完好的副本,则动作在块425继续;否则,动作可以在块435继续。
在块425,生成修复数据。例如参照图2,应用205可以生成修复数据以经由API 发送给文件系统207。修复数据可以标识数据的未破坏的副本、需要根据冗余副本纠正原有数据的指示和如果有什么其它副本则需要根据完好的副本纠正什么其它副本的指示。如果原有数据和其它副本都仅视为数据的副本,则修复数据可以标识数据的未破坏的副本和需要根据未破坏的副本纠正的一个或者多个其它副本的指示。
在块430,调用修复操作。例如应用205可以向文件系统207发送修复数据,该文件系统可以向冗余管理器208发送修复数据或者根据修复数据导出的修复数据。调用存储系统的修复操作命令存储系统修复该修复数据指示的已破坏的数据。
在一个实施方式中,修复操作可能在修复过程中失败。例如如果修复数据指示将根据完好的64千字节的副本修复64千字节的块,则错误可能在修复过程中(例如在64千字节块的扇区m的扇区η)出现。在这一情况下,冗余管理器208可以一旦错误出现就停止修复并且可以提供指示修复在它失败之前进行了多少的数据。应用205然后可以判决在该时间点做什么。例如应用205可以尝试重试整个修复、重试失败的修复的部分、分配文件系统上的其它空间并且向分配的空间复制文件、终止修复过程、采取其它动作等。
在块435,如果有其它动作则执行其它动作。
图5是一般而言代表根据这里描述的主题内容的各方面从洗刷器的角度来看可以出现的示例性动作的框图。图5中所示动作可以在可配置或者固定的时间出现。例如洗刷器可以定期验证一个或者多个卷、文件或者其部分、数据块的集合并且尝试纠正其中发现的任何已破坏的数据。
转向图5,在块505,动作开始。
在块510,选择待洗刷的文件(例如寻找文件的数据的副本中的数据破坏)。例如参照图2,洗刷器206可以访问数据结构(例如列表、汇集、文件系统元数据等),该数据结构指示将由洗刷器206洗刷的文件。洗刷器206可以从数据结构指示的文件之一开始并且工作于数据结构指示的文件直至已经洗刷所有文件。
在块515,请求并且视需要修复来自文件的数据块。例如在选择文件之后,类似于结合图3和4所描述的应用如何从储存器请求数据并视需要修复该数据,洗刷器206可以开始请求和修复(视需要)来自文件的数据块。
在块520,如果洗刷器具有待洗刷的另一文件,则动作在块510继续;否则,动作在块525继续。
在块525,如果有其它动作则可以执行其它动作。
图6是一般而言代表根据这里描述的主题内容的各方面从存储系统的角度来看可以出现的示例动作的框图 。在块605,动作开始。
在块610,从请求者接收请求。请求是对根据数据的冗余的未破坏的副本纠正已破坏的数据的请求。该请求指示(例如标识)数据的未破坏的副本。已破坏的数据可以包括数据的一个或者多个副本。数据的一个或者多个副本也由该请求指示。请求者使用请求者维护的校验和来确定已破坏的数据已破坏。如果有由托管存储数据及其冗余副本的存储设备的存储系统维护的任何校验和,则该校验和是其的附加校验和。
例如参照图2,冗余管理器208可以接收对根据位于储存器215上的未破坏的数据纠正储存器212和213上的已破坏的数据的请求。可以从应用205或者洗刷器206发送这一请求。
在块615,尝试使用数据的冗余未破坏的副本来纠正已破坏的数据。例如参照图 6,来自储存器215的数据可以用来尝试例如通过在数据的已破坏副本中的每个副本之上复制来自未破坏的副本的数据来纠正储存器212和213上的已破坏的数据。在另一例子中, 其它纠正可以出现(比如仅重写已破坏的数据的已破坏那些部分)。在又一例子中,为了尝试纠正已破坏的数据,可以发出一个或者多个写入操作以改写数据的所有副本。在这一例子中,甚至可以改写可能具有未破坏的数据的副本。
在块620,如果纠正成功,则动作在块635继续,其中向请求者发送指示纠正成功的数据。然而如果纠正失败,则动作在块625继续。
在块625,如果纠正已破坏的数据文件的尝试的任何部分失败,则停止任何后续纠正动作。例如参照图2,如果冗余管理器208不能纠正储存器212的数据,则冗余管理器208 可以停止与请求对应的任何附加纠正动作。换言之,在一个实施例中,如果尝试在尝试纠正数据时的某一点失败,则冗余管理器208可以不试着纠正任何更多已破坏的数据。在另一实施例中,冗余管理器208可以在向应用发送返回代码之前经过该点继续并且尝试纠正已破坏的数据的其它部分。
在块630,生成返回数据,该数据指示纠正已破坏的数据的尝试失败并且指示失败点。例如参照图2,如果冗余管理器208能够在它达到失败之前纠正已破坏文件的前4K,则冗余管理器208可以生成指示此的数据。
在块635,向请求者发送返回数据。例如参照图2,冗余管理器208可以向文件系统207发送返回数据,该文件系统可以将它发送到请求者(例如应用205或者洗刷器206)。
在块640,如果有其它动作则可以执行其它动作。
在一些基于RAID的存储系统的情况下,附加和/或其它动作可以出现以纠正数据。例如在RAID 5和一些其它RAID系统中,可以跨多个盘来条化块。如果盘之一上的单个块失效,则可以将其它盘上的块与奇偶校验一起用来重建它。然而如果条中的块的一个或者多个副本破坏,则修复一个副本并且重新计算奇偶校验可能通过使错误不可逆来“困难化”它。
图7是一般而言代表根据这里描述的主题内容的各方面的在基于RAID的存储系统中跨盘的数据的条化的框图。如图所示,存储系统包括6个数据块705-710和奇偶校验块711,但是在其它实施方式中可以有更多或者更少数据块和/或更多奇偶校验块。块705 和706包括用于应用A的数据;块707和708包括用于应用B的数据,并且应用709和710 包括用于应用F的数据。
如果应用或者洗刷器在块的读取中检测到已破坏的数据,则用于修复这一数据的示例性序列如下1.使有效性检查对所有原有数据块(这些数据块是相同条的部分(例如块705-710)) 执行。“原有”数据块是可以不运用奇偶校验块获得的物理上存在于盘上的数据块;2.如果可能则使用奇偶校验位和条的其它未破坏块来修复每个已破坏的原数据块;3.如果需要则根据修复的块重新生成用于条的奇偶校验块。
作为例子,如果在块708上检测到错误,则将检查块705-707和709-710寻找错误。如果这些块未破坏,则它们将与奇偶校验块711 —起用来纠正块708。如果这些块中的任何块已破坏,则将需要在可以纠正块708之前纠正它们。如果不能纠正块,则指示坏条的错误可以由应用/洗刷器生成。
此外,如果应用/洗刷器保留关于奇偶校验块的校验和和/或有两个奇偶校验块, 则在需要奇偶校验块以重建已破坏原有块的情况下可以执行检查以确定奇偶校验块的有效性并且可以如同其它块那样纠正奇偶校验块。
上述原理和教导也可以应用于驻留于文件系统中的部件。例如在一个实施例中, 参照图8,文件系统207可以具有应用205或者洗刷器206的功能。在这一实施例中,使用读取请求,文件系统207可以使用校验和数据209来验证从储存器212-214返回的数据并且可以视需要使用先前已经描述的相同技术来纠正返回的该数据。这可以在读取请求的始发请求者已知或者未知数据在被返回之前被纠正的情况下完成。
类似地,在一个实施例中,文件系统207的部件可以具有洗刷器206的功能。在两个上述实施例中,文件系统207也可以将校验和数据209作为用于存储的仅有的文件系统校验和数据来维护或者作为文件系统207维护的任何其它校验和数据的附加校验和数据。 另外,在这些实施例中,文件系统207可以始发对纠正已破坏的数据的请求(即这些请求的来源)。
如从前文具体描述可见,已经描述与修复存储系统的数据有关的各方面。尽管这里描述的主题内容的各方面易有各种修改和替代构造,但是在附图中示出了并且上文已经具体描述了其某些所示实施例。然而应当理解,未旨在于使要求保护的主题内容的各方面限于公开的具体形式,但是恰好相反,旨在于覆盖落入这里描述的主题内容的各种方面的精神实质和范围内的所有修改、替代构造和等效物。
权利要求
1.一种至少部分由计算机实施的方法,所述方法包括 从储存器接收(320)已破坏的数据,所述已破坏的数据具有可从托管所述储存器的存储系统获得的一个或者多个冗余副本; 获得(315)与所述已破坏的数据对应的校验和,如果有所述存储系统维护的存储校验和,则所述校验和是所述存储校验和的附加校验和; 经由所述校验和确定(325)所述已破坏的数据是否已破坏;并且 尝试(335)使用所述一个或者多个冗余副本来纠正所述已破坏的数据。
2.根据权利要求I所述的方法,还包括在所述存储系统以外执行的进程请求所述存储系统的数据,并且其中从所述储存器接收所述已破坏的数据包括响应于所述请求所述存储系统的数据来接收所述已破坏的数据。
3.根据权利要求2所述的方法,其中获得与已破坏的数据对应的校验和包括所述进程从有可能除了所述存储系统托管的储存器之外的储存器获得所述校验和。
4.根据权利要求I所述的方法,其中尝试根据所述一个或者多个冗余副本纠正所述冗余数据包括使动作集生效,所述动作集包括 请求所述一个或者多个冗余副本之中的冗余副本的冗余数据; 用所述校验和使所述冗余数据生效; 如果所述冗余数据已破坏,则指示所述冗余数据已破坏。
5.根据权利要求4所述的方法,还包括如果有其它一个或者多个冗余副本,则针对所述其它一个或者多个冗余副本中的每个冗余副本重复所述动作集。
6.根据权利要求5所述的方法,还包括生成修复数据,所述修复数据指示将修复所述已破坏的数据并且指示将被根据来纠正所述已破坏的数据的未破坏冗余副本。
7.根据权利要求6所述的方法,其中生成修复数据也包括生成指示也将根据所述未破坏冗余副本纠正的零个或者更多个已破坏冗余副本的数据。
8.—种在计算环境中的系统,包括 存储设备集(212-214),可操作用于存储数据; 文件系统(207)可操作用于提供对所述存储设备集上的数据的访问;以及冗余管理器(208 ),可操作用于存储所述存储设备上的所述数据的冗余副本,所述冗余管理器还可操作用于暴露接口,可以通过所述接口指示所述数据或者其冗余副本用于从一个或者多个存储设备读取,所述冗余管理器还可操作用于接收对纠正所述数据和/或其冗余副本的请求并且响应于所述请求来使用所述请求指示的所述数据的未破坏的副本以修复所述数据和/或其冗余副本。
9.根据权利要求8所述的系统,还包括可操作用于提供所述请求的实体,所述实体可操作用于通过执行动作来确定已破坏的数据,所述动作包括 获得与所述已破坏的数据对应的第一校验和,如果有托管所述存储设备集的存储系统维护的存储校验和,则所述第一校验和是所述存储校验和的附加校验和; 使用所述已破坏的数据来计算第二校验和;并且 比较所述第一校验和与所述第二校验和。
10.一种具有计算机可执行指令的计算机存储介质,所述计算机可执行指令在被执行时执行动作,所述动作包括从请求者接收(610)对根据数据的冗余未破坏的副本纠正已破坏的数据的请求,所述请求指示所述数据的所述未破坏的副本,所述已破坏的数据包括所述数据的一个或者多个副本,所述数据的所述一个或者多个副本也由所述请求指示,所述请求者使用所述请求者维护的第一校验和来确定所述已破坏的数据已破坏,如果有存储系统维护的第二校验和,则所述第一校验和是所述第二校验和的附加校验和,所述存储系统托管存储所述已破坏的数据和所述数据的所述未破坏的副本的存储设备; 尝试(615)使用所述数据的所述冗余未破坏的副本来纠正所述已破坏的数据;并且 发送(635)返回数据,所述返回数据指示尝试纠正所述已破坏的数据是成功或者失败。·
全文摘要
这里描述的主题内容的方面涉及查询和修复数据。在方面中,部件可以检测储存器上的已经变成已破坏。作为响应,部件可以请求来自数据的一个或者多个冗余副本的数据并且如果有则可以确定冗余副本中的哪些冗余副本未破坏。如果发现未破坏的副本,则部件可以发送修复已破坏的数据的请求并且可以标识用来修复已破坏的数据的未破坏的副本。
文档编号G06F11/14GK102937922SQ20121033585
公开日2013年2月20日 申请日期2012年9月12日 优先权日2011年9月12日
发明者李齐晟, T.J.米勒, N.R.克里斯蒂安森, M.S.加森 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1