文件系统中的在线故障验证背景技术
文件系统利用数据结构、也称为文件系统盘上格式来维持和管理非易失性的、即持久的存储器(例如卷(volume)、盘、硬盘驱动器等)上的数据。文件系统例如在执行软件指令或计算机代码时访问和解释这些数据结构以存储和取回用户和应用的数据或者进程或计算机程序。
当文件系统遇到错误即损坏时,在试图访问和/或解释数据结构的同时,文件系统注意到存在错误并将具体的存储卷、在此也称为卷标记为损坏。即使文件系统尝试在线隔离并校正所报告的错误、即自修复系统,但是遇到的一些数量的损坏可能不能解决,除非使卷离线。但是,在卷正被离线处理以校正错误的同时,在其上的数据结构中存储的数据和信息对于任何用户或其他应用不可用。这些离线时段可能相当长,进一步降低了系统可用性以及用户满意度。
此外,当文件系统相信其已经遇到损坏同时试图访问卷的数据结构时,可能没有真实存在的数据结构损坏。在这些情况下,错误可能通常归因于其他事件,例如系统的易失性存储器中的暂时错误、系统的非易失性存储器中的暂时错误、文件系统中的缺陷等。但是,利用现有技术,文件系统不能在需要离线处理来补救的真实损坏实例和当数据结构错误被察觉但是事实上不存在的假阳性(false positive)实例之间进行辨别。
因此,期望在将卷离线之前验证察觉的损坏以便显著降低任意文件系统卷离线并因此对用户和其他应用访问不可用的时间量。还将期望将被报告给文件系统管理员和用户的错误实例限制为包含被验证过的、即真的或真实的损坏的那些错误实例。
发明内容
提供此发明内容以按简化形式介绍以下在具体实施方式部分中将进一步描述的概念的选择。此发明内容不意图表示要求保护的主题的关键或必要特征,也不意图用作确定要求保护的主题的范围的辅助。
在此讨论的实施例包括用于验证文件系统中的卷上的先前标识的卷损坏以最小化在试图补救标识的损坏时花费的处理工作以及缩小卷不可用性的系统和方法。
在各实施例中,产生具有在其上的先前标识的损坏的卷的只读快照。在各实施例中,然后处理该快照用于损坏验证,同时相应的卷仍然在线并可访问。在各实施例中,并且利用卷快照,先前标识的损坏被验证为文件系统其后可以尝试补救的真的、存在的损坏,或者被确定为是假阳性。在这些实施例的一个方面,假阳性是实际上不是文件系统将花费时间和功夫尝试补救的卷损坏的先前标识的损坏。
在各实施例中,损坏被分类为预定的有限组的损坏类别之一。在这些实施例的各方面中,可以利用损坏分类用于例如文件系统处理分析、损坏验证、作为随后的损坏校正中的辅助等。
附图说明
现在将参考某些实施例和例子的附图来描述这些和其他特征,这些附图意图例示而非限制,并且附图中:
图1绘出具有点损坏验证器组件的实施例文件系统。
图2A-2B例示文件系统数据结构中标识的损坏的在线点验证的实施例逻辑流程。
图3例示结合在线点验证的文件系统管理器处理的实施例逻辑流程。
图4绘出示例错误日志项。
图5是具有处理软件、即程序代码或指令的能力的示例基本计算设备的框图。
具体实施方式
在以下描述中,为了说明的目的,阐述数个具体细节以便提供在此所述的实施例的全面理解。但是对本领域技术人员将显然的是,可以没有这些具体细节而实践这些实施例。在其他实例中,简单参考或以框图形式示出公知的结构和设备,以便避免不必要的模糊。通篇使用的任意和所有名称仅仅是为了容易说明而不是用于任何限制性使用。
图1绘出具有文件系统管理器110的实施例文件系统100。在一个实施例中,文件系统管理器110是用于管理文件系统100以帮助确保合适的处理和操作的软件应用任务。
在一个实施例中,文件系统100还具有一个或多个卷130,其在数据结构中存储数据以便被在此统称为处理应用160的处理应用、任务、程序、例程等、以及用户180使用。在一个实施例中,一个卷130是系统卷130。
在实施例中,处理应用160可以是文件系统100的一部分和/或与文件系统100分离。
在一个实施例中,当文件系统100在访问卷130上的数据结构时遇到意外情况时,变为标记的数据结构错误的该意外情况被分类,涉及到的数据结构被标识,并且在用于卷130的错误验证日志140中产生标识所标记的数据结构错误的项,如以下进一步讨论的。
实施例文件系统100包括点损坏验证器组件120。在一个实施例中,点损坏验证器120是当已经在文件系统的一个或多个卷130上标记或另外标识了一个或多个错误或损坏时由文件系统100执行的软件应用任务。在一个实施例中,点损坏验证器120由文件系统管理器110启动来处理。
在一个实施例中,点损坏验证器120执行或另外处理,同时所有文件系统卷130仍然在线。
在一个实施例中,点损坏验证器120试图验证先前标记的、即先前标识的数据结构损坏。在此实施例的一个方面,点损坏验证器120不寻找或另外尝试发现或验证当点损坏验证器120处理、即运行时还未被标识的其他可能的损坏。
在一个实施例中,点损坏验证器120具有进行被设计为验证、即分析在文件系统100的卷140上的先前标识的损坏以确定先前标识的损坏事实上是否存在的动作的能力。
在一个实施例中,点损坏验证器120在其认为或另外确定标记的损坏是假阳性时、即在点损坏验证器120得出结论先前标识的数据结构错误事实上不存在时通知文件系统100。在此实施例的一个方面,点损坏验证器120在其认为标记的损坏是假阳性时通知文件系统管理器110。
在一个实施例中,点损坏验证器120还在其认为或另外确定标记的损坏是真的损坏时、即当点损坏验证器120得出结论先前标识的数据结构错误是真的、存在的错误时通知文件系统100。在此实施例的一个方面,点损坏验证器120在其认为标记的损坏是真的损坏时通知文件系统管理器110。
在一个实施例中,当点损坏验证器120验证标记的数据结构错误时,在用于卷130的错误校正日志190中为现在验证的、即真的损坏产生损坏项195,如以下进一步讨论的。
在一个实施例中,文件系统100在其得出结论先前标记的数据结构错误是真的存在的错误时通知文件系统管理员180和/或文件系统用户180,在此它们也被统称为用户180。在此实施例的一个方面,文件系统管理器110在先前标记的数据结构错误被确定为是真的损坏时通知用户180。在此实施例的替换方面,点损坏验证器120在先前标识的数据结构错误被确定为是真的损坏时通知用户180。
在一个实施例中,文件系统100的每个卷130具有相关的错误验证日志140、例如$验证文件、也称为卷验证日志140,其中经由其中的例如验证项145记录了或者另外指示了各个卷130的标记的、即报告的数据结构错误。在其他实施例中,通过使用其他机制来报告标记的数据结构错误、在此也称为卷错误,例如,利用验证项145的单个验证日志140来报告文件系统100的所有卷130的所有卷错误,写错误表以标识卷错误等。
在一个实施例中,在各个卷130上维持卷的验证日志140。在替换实施例中,卷验证日志140被维持为与其相应的卷130分离。
在一个实施例中,文件系统100的每个卷130具有相关的错误校正日志、例如$毁损(corrupt)文件190、也称为卷损坏日志190、卷毁损日志190或者毁损日志190,其中经由例如损坏项195记录或另外指示了各个卷130的验证的数据结构错误。在其他实施例中,通过使用其他机制报告验证的数据结构错误,例如利用损坏项195的单个错误校正日志190来报告文件系统100的所有卷130的所有验证的卷错误,写错误表以标识验证的卷错误等。
在一个实施例中,在各个卷130上维持卷的错误校正日志190。在替换实施例中,卷错误校正日志190被维持为与其相应的卷130分离。
在一个实施例中,每个卷130具有相关的页面重写标志位(dirty bit)或标志150,其在被设置时指示卷130具有在其上的至少一个验证过的、即真的存在的损坏。
在一个实施例中,文件系统100具有事件日志170,其中经由例如事件日志项175报告事件、例如验证过的错误损坏等。在一个实施例中,利用事件日志项175在点损坏验证器120和文件系统管理器110之间通信。在一个实施例中,文件系统100利用事件日志项175来向用户180通知验证过的损坏。在一个实施例中,文件系统100利用事件日志项175进行文件系统100分析、维护、错误检测和校正等。在各实施例中,事件日志项175用于任务的另外的、其他的、附加的和/或其他的组合。
图2A和2B例示在相应卷130仍然在线或另外可用的同时有效和高效地验证卷错误的实施例逻辑流程。尽管关于在此绘出的系统做出以下讨论,但是可以在其他系统中实现所述的操作。在此所述的操作不限于所示的顺序。另外,在其他替换实施例中,可以进行更多或更少的操作。此外,所示的操作可以由实施例点损坏验证器120或者由实施例点损坏验证器120结合一个或多个其他系统实体、组件和/或应用(比如但不限于文件系统管理器110)来进行。
参考图2A,在一个实施例中,点损坏验证器120为了系统上的、具有在其相关联的错误验证日志中的验证项的卷的标识而询问文件系统管理器202。在替换实施例中,点损坏验证器120经由其他机制来标识具有标记的数据结构错误的当前存在的系统卷,例如通过使用标识具有当前标记的数据结构错误的卷的卷标记的表、位流等,等等。
在一个实施例中,点损坏验证器利用在其相关的错误验证日志中的验证项来标识卷204。在一个实施例中,点损坏验证器取得或另外产生标识的卷的快照(snapshot)206。在一个实施例中,标识的卷的快照包括卷的错误验证日志的快照、例如$验证文件206。在一个替换实施例中,点损坏验证器取得或另外产生错误验证日志的快照,例如对于标识的卷的$验证208。在此替换实施例中,错误验证日志140的快照的产生与相应标识的卷130的快照的产生同步,以便卷130的快照及其错误验证日志140一致。
在一个实施例中,标识的卷130的快照和标识的卷的错误验证日志140是只读的。
在一个实施例中,点损坏验证器标识错误验证日志的快照版本中的验证项210;即,标识要处理或验证的标记的、即先前标识的数据结构损坏的验证项。在一个实施例中,使用标识的验证项,点损坏验证器分析受在被处理的当前验证项中标识的标记的数据结构损坏影响的数据结构,以确定是否可以验证标记的数据结构损坏212。
在一个实施例中,用卷的错误验证日志140中的验证项145标识的损坏已经被分类,如以下进一步讨论的。在一个实施例中,在点损坏验证器120试图验证当前标识的验证项145的损坏时,由点损坏验证器120利用该损坏分类。
在决策块214,确定在被处理的当前验证项中标识的数据结构损坏是否被验证为真的数据结构损坏。如果不是,则被处理的验证项标识假阳性损坏216;即,其标识不能被验证并因此被认为是不表示文件系统将尝试补救的真的数据结构损坏的数据结构损坏。在一个实施例中,点损坏验证器通知文件系统管理器没有对于当前处理的验证项的损坏218。在各实施例中,利用各种机制来向文件系统管理器通知验证项、例如标志、表项、消息、中断等的假阳性。
在一个实施例中,在决策块222,确定在被处理的当前错误验证日志的快照中是否还存在验证项要处理。如果是,则在一个实施例中,点损坏验证器标识对于要验证的标记的数据结构损坏的、在当前正处理的快照错误验证日志中的另一验证项210。
但是,如果在决策块222,确定在当前被处理的错误验证日志的快照中没有更多的验证项要处理,则在一个实施例中,点损坏验证器删除其当前已经处理了标记的数据损坏的卷的快照224。在一个实施例中,卷的快照的删除还导致在该卷上维持的卷的错误验证日志的快照的删除。在其中卷的错误验证日志被维持为与其相应的卷分离的一个替换实施例中,点损坏验证器删除当前已经被处理的错误验证日志的快照226。
在一个实施例中,在决策块228,确定是否还存在被文件系统管理器报告或另外标识为当前在其相关联的错误验证日志中具有验证项的卷。如果是,则在一个实施例中,点损坏验证器标识现在要处理的在其相关联的错误验证日志中具有验证项的文件系统的另一个卷204。
但是,如果在决策块228,不再有当前由文件系统管理器报告或另外标识为在其相关联的错误验证日志中具有验证项的卷,则在一个实施例中,点损坏验证器处理结束230。
再次参考决策块214,如果点损坏验证器利用在当前被处理的错误验证日志的快照中的相关联的验证项验证了标记的数据结构损坏,则在一个实施例中,并参考图2B,报告的卷损坏被验证为真的、存在的损坏232。
在一个实施例中,点损坏验证器通知文件系统管理器存在对于当前处理的错误验证日志项的验证过的卷损坏234。在各实施例中,利用各种机制来向文件系统管理器通知对于当前被处理的错误验证日志项、例如标志、表项、消息、中断等的验证过的卷损坏。
在一个实施例中,在被点损坏验证器120通知了验证过的卷损坏时,文件系统管理器110产生事件日志项175,其标识验证过的存在的卷损坏,如以下参考图3进一步讨论的。在一个替换实施例中,点损坏验证器产生标识了验证过的存在的卷损坏的事件日志项。
在一个实施例中,事件日志170及其项175可以由用户180访问以确定在文件系统100内发生了什么,例如来确定验证过的卷损坏存在。在一个替换实施例中,标识验证过的卷损坏的事件日志项175由文件系统管理器110使用来例如经由计算设备屏幕上的弹出文本框向用户180报告通知验证过的卷损坏的消息。
在一个实施例中,标识验证过的卷损坏的事件日志项提供了文件系统对验证过的卷损坏的严重性的确定的指示。在一个实施例中,通知验证过的卷损坏的报告的消息提供了文件系统对验证过的卷损坏的严重性的确定的指示。如所述,所指示的验证过的卷损坏的严重性可以由用户180使用来帮助确定可以或者应该在何时开始尝试补救该损坏的动作。
在一个实施例中,点损坏验证器设置卷页面重写标志位或者卷标志,以指示其快照当前正被处理的卷具有至少一个损坏236。在一个替换实施例中,文件系统100的文件系统管理器110在被点损坏验证器120通知了卷130具有至少一个损坏时设置适当的卷页面重写标志位或者卷标志150。
在一个实施例中,并再次参考图2A,在决策块222,确定在被处理的当前错误验证日志的快照中是否还存在要处理的项。
图3例示文件系统管理器110结合点损坏验证的处理的实施例逻辑流程。尽管关于在此绘出的系统做出了以下讨论,但是可以在其他系统中实现所述的操作。在此所述的操作不限于所示的顺序。另外,在其他替换实施例中,可以进行更多或更少的操作。此外,所示的操作可以由实施例文件系统管理器110或者由实施例文件系统管理器110结合一个或多个其他系统实体、组件和/或应用来进行。
在一个实施例中,文件系统管理器110正在处理,并且在某点处,在文件系统的卷上遇到损坏305。在一个实施例中,遇到的损坏被分类310,如以下参考图4进一步讨论的,并且损坏被记录310,即在受影响的卷的错误验证日志140中产生该损坏的验证项145。在一个实施例中,文件系统管理器110发起、即调用或激活实施例点损坏验证器120来处理。
在一个实施例中,在决策块315,文件系统管理器确定点损坏验证器是否已将先前标识的损坏验证为真的、存在的损坏,或者点损坏验证器是否已确定先前标识的损坏是假阳性。如果点损坏验证器已经确定先前标识的损坏是假阳性,则在一个实施例中,文件系统管理器从该卷的错误验证日志中删除标识了该假阳性损坏的适当的验证项320。
如果点损坏验证器已经确定先前标识的损坏是真的、存在的损坏,即验证过的损坏,则在一个实施例中,文件系统管理器从卷的错误验证日志中删除标识该验证过的损坏的适当的验证项325,并在该卷的错误校正日志中产生对于该验证过的损坏的相应项330。
在一个实施例中,在被点损坏验证器通知了验证过的卷损坏后,文件系统管理器产生标识该验证过的存在的卷损坏的事件日志项335。在一个替换实施例中,点损坏验证器120产生标识该验证过的存在的卷损坏的事件日志项175。
在一个实施例中,事件日志170及其项175可以由用户180访问以确定在文件系统100内发生了什么,例如确定验证过的卷损坏存在。在一个替换实施例中,标识验证过的卷损坏的事件日志项175由文件系统管理器110用来例如经由计算设备屏幕上的弹出文本框向用户 180报告通知该验证过的卷损坏的消息。
在一个实施例中,标识该验证过的卷损坏的事件日志项175提供文件系统对验证过的卷损坏的严重性的确定的指示。在一个实施例中,通知验证过的卷损坏的报告的消息提供了文件系统对验证过的卷损坏的严重性的确定的指示。如所述,所指示的验证过的卷损坏的严重性可以由用户180使用来帮助确定可以或者应该在何时开始尝试补救该损坏。
在一个实施例中,在决策块340,确定当前的点损坏验证处理是否已经结束。如果没有,则在一个实施例中,处理返回到决策块315,其中确定点损坏验证器是否已将先前标识的损坏验证为真的、存在的损坏,或者点损坏验证器是否已经确定先前标识的损坏是假阳性。
如果在决策块340,当前的点损坏验证处理已经结束,则在一个实施例中,文件系统管理器110继续处理。
如前所述,在一个实施例中,文件系统100的每个卷130具有相关联的错误验证日志140,其中经由例如其中的验证项145记录或者另外指示了对于各个卷130的标记的、即报告的数据结构错误。在一个实施例中,文件系统100的每个卷130还具有相关联的错误校正日志190,其中经由例如损坏项195记录或者另外指示了对于各个卷130的验证过的数据结构错误。在图4中绘出了实施例验证项和实施例损坏项400,在此也统称为错误日志项400。
在一个实施例中,每个标记的数据结构错误在其初始被发现时被分类,并且此分类被包括在错误日志项400的损坏类型字段420中。因此,在一个实施例中,当文件系统100在访问卷130上的数据结构时遇到意外情况时,变为标记的数据结构错误的该意外情况被分类,涉及的数据结构被标识,并且在恰当的卷的错误验证日志140中产生验证项145。其后,在一个实施例中,当点损坏验证器120验证了标记的数据结构错误时,在恰当的卷的错误校正日志190中产生现在验证过的数据结构错误的损坏项195。在此实施例的一个方面,产生的损坏项195是现在被存储在恰当的卷的错误校正日志190中的损坏的相应验证项145。
在一个实施例中,当点损坏验证器120处理卷的错误验证日志140的快照版本中的卷损坏记录400时,损坏类型字段420的项在需要时可以被点损坏验证器120修改。
在一个实施例中,类别集460被标识为被利用来分类或者另外标记任何特定卷损坏。在一个实施例中,在类别集460中存在有限数量的类别用于帮助促进其有效和有意义的处理。例如,在一个实施例中,标记的数据结构损坏的类别对于概括和简化相应数据结构损坏的验证处理是有用的。作为另一例子,在一个实施例中,验证过的数据结构损坏的类别对于随后任何尝试补救该损坏的处理是有用的。
在一个实施例中,类别集460包括通常的损坏类别402。在一个实施例中,通常的损坏类别402指示某类型的损坏被注意到,并且表明针对错误对整个卷130的检查得到保证。
在一个实施例中,孤子(orphan child)类别404被包括在类别集460中。在一个实施例文件系统100中,一个或多个文件的集合被存储在每个卷130上。在一个实施例中,存储在卷130上的每个文件具有一个或多个记录,并且每个记录由一个或多个段构成。在一个实施例中,每个段由一个或多个字段构成,每个字段包含数据。在一个实施例中,文件记录段是可以从卷130取得的最小元素。在一个实施例中,每个文件记录由根或基础、母体等段构成。在一个实施例中,每个文件记录还可以包含一个或多个依存的段、即子段。在一个实施例中,孤子类别404指示使用中的子文件记录段被定位,即存在正使用的并且包含可行数据的存在的依存的文件记录段,但是该其基础或根、文件记录段既未在使用也未将该子文件记录列为子。
在一个实施例中,坏簇类别406被包括在类别集460中。在实施例文件系统100中,簇是对于卷文件的盘空间分配的单位。为了降低在管理文件系统卷130时的开销,实施例文件系统100不分配各个盘扇区,而是分配连续的扇区组,称为簇。在一个实施例中,簇是可以被分配给卷130上文件的盘空间的最小逻辑量。在一个实施例中,坏簇类别406指示在访问非驻留流数据的簇时故障扇区被标识出。
在一个实施例中,流数据是用户数据。在一个实施例中,流数据直接被存储在文件记录中。在一个实施例中,非驻留流数据是存储在其自己的簇中而不是直接存储在文件记录中的用户数据。在一个实施例中,坏簇类别406指示具有损坏的是其中存储了非驻留流数据的用户数据簇。
在一个实施例中,坏的空闲簇类别408被包括在类别集460中。在一个实施例中,坏的空闲簇类别408指示在对卷130上的空闲的即仍未使用的簇的访问期间注意到故障簇。
在一个实施例中,交联(crosslink)损坏类别412被包括在类别集460中。在一个实施例中,交联损坏类别412指示发现两个不同的范围、例如两个不同的卷文件正使用逻辑重叠簇,即正使用相同的卷的盘空间或者卷的盘空间的相同部分。
在一个实施例中,安全描述符损坏类别414被包括在类别集460中。在一个实施例中,安全描述符损坏类别414指示在安全描述符流中注意到某类型的损坏。在一个实施例中,卷130上的文件的安全描述符流是与该文件相关联的一个或多个安全属性、例如授权访问规则集。
在一个实施例中,无效安全标识或id类别416被包括在类别集460中。在一个实施例中,无效安全id类别416指示发现一个或多个文件记录具有未适当地登记在安全ID索引中的非零安全ID。
在一个实施例中,索引属性损坏类别418被包括在类别集460中。在一个实施例文件系统100中,索引是被利用来改进从文件系统卷130的数据即对象取回的速度的一个或多个数据结构。在一个实施例中,索引属性定义或另外描述了索引支持的文件的方面。在一个实施例中,索引属性损坏类别418指示在索引属性中发现了可能需要删除与相应索引有关的所有属性的损坏。
在一个实施例中,索引项损坏类别422被包括在类别集460中。在一个实施例中,索引包含文件名称并指向文件系统卷130上命名的文件。在一个实施例中,索引项损坏类别422指示在所指示的索引项本身中存在某类型的损坏。
在一个实施例中,索引子树损坏类别424被包括在类别集460中。在一个实施例中,索引子树损坏类别424指示子树索引项指代不存在的对象。
在一个实施例中,索引偏移损坏类别426被包括在类别集460中。在一个实施例中,索引偏移损坏类别426指示索引项是有损坏的。在此实施例的一个方面,索引偏移损坏类别426可以进一步指示相同索引块中的每个随后的索引项有可能有损坏。
在一个实施例中,索引顺序损坏类别428被包括在类别集460中。在一个实施例中,索引顺序损坏类别428指示索引包含不按次序的项。
在一个实施例中,索引连接损坏类别432被包括在类别集460中。在一个实施例中,索引连接损坏类别432指示索引项指代不存在的对象,即看起来存在有效索引项,但是其未能指代任何对象。在一个实施例中,索引连接损坏类别432指示可能由于例如有损坏的索引的恢复、一个或多个对象应该被插入到索引中。
在一个实施例中,目录循环损坏类别434被包括在类别集460中,在一个实施例文件系统100中,目录用于将文件与其各自的文件名称相关联。在一个实施例中,目录循环损坏类别434指示在文件系统名称空间(namespace)中发现了目录循环,即在卷130的目录中存在标识目录的先辈、即父辈的项。
在一个实施例中,簇分配损坏类别436被包括在类别集460中。在一个实施例中,簇分配损坏类别436指示发现簇正在卷130上使用但是对于相应的卷被标记为空闲、即未被使用。
在一个实施例中,卷损坏记录400的格式相对紧凑,以便保存空间,但是也被设计为易于解析,使得利用其内容工作的应用、例如实施例点损坏验证器120可以解释记录的内容而无需不必要的复杂的去串行化(deserialization)操作。在一个实施例中,卷损坏记录400的格式也是灵活的以提供例如具有最少数据的将来的扩展和/或应用重新设计。
实施例卷损坏记录400是可变长度的二进制格式的。在一个实施例中,卷损坏记录400的字段被编码。在此实施例的一个方面,利用小字节排序(little endian byte ordering)来编码卷损坏记录400的字段。
实施例卷损坏记录400具有头部字段410,其包括唯一地标识特定卷损坏记录400的实例标签。在一个实施例中,卷损坏记录400的头部字段410还包括卷损坏记录400的例如以字节为单位的长度。
实施例卷损坏记录400包括调用堆栈标识字段430。在一个实施例中,该调用堆栈标识字段430包含在检测到相应卷损坏的时间点时描述核心调用堆栈的数据结构项。在一个实施例中,调用堆栈标识字段430包含唯一地标识在检测到相应卷损坏时正执行的源文件的文件id。在一个实施例中,调用堆栈标识字段430包含在检测到相应卷损坏时正执行的源行号的标识。在一个实施例中,调用堆栈标识字段430包含用于标识在检测到相应卷损坏时正执行的代码基底中的位置的唯一整数。
实施例卷损坏记录400包括二进制采样损坏字段440。在一个实施例中,二进制采样损坏字段440包含具有说明相应卷损坏的二进制数据的任意采样的数据结构项。
计算设备系统配置
图5是例示在其上可以实现实施例的示例计算设备系统500的框图。计算设备系统或者计算设备500的例子包括但不限于服务器、服务器系统、计算机、例如桌上型计算机、在此也称为膝上型、笔记本等的膝上型计算机、等等。
实施例计算设备系统500包括用于传输信息的总线505或其他机制以及与总线505耦合用于处理信息的处理单元510,在此也称为处理器510。计算设备系统500还包括系统存储器515,其可以是易失性的或动态的,比如随机存取存储器(RAM)可以是非易失性的或静态的,比如只读存储器(ROM)或者闪存,或者这两种的某种组合。系统存储器515耦合到总线505,用于存储要由处理单元510执行的信息和指令,并且还可以用于在处理器510执行指令期间存储临时变量或者其他中间信息。系统存储器515经常包含操作系统和一个或多个程序或者应用和/或软件代码,并且也可以包括程序数据。
在一个实施例中,诸如磁或光盘固态驱动器、闪存驱动器等的存储器件520也耦合到总线505用于存储信息,包括指令的程序代码和/或数据。在该实施例计算设备系统500中,存储器件520是计算机可读存储器或者机器可读存储器520。
实施例计算设备系统500通常包括一个或多个显示设备535,比如但不限于显示屏幕、例如阴极射线管(CRT)或者液晶显示器(LCD)、打印机以及一个或多个扬声器,用于向计算设备用户180提供信息。实施例计算设备系统500通常还包括用户180可以利用来向处理器510传输信息和命令选择的一个或多个输入设备530,比如但不限于键盘、鼠标、轨迹球、笔、语音输入设备和触摸输入设备。所有这些设备是本领域中已知的并且不需在此深入讨论。
处理器510执行一个或多个程序或者应用的一个或多个序列和/或在系统存储器515中包含的软件代码指令。这些指令可以从包括但不限于存储器件520的另一计算设备可读介质被读到系统存储器515中。在替换实施例中,可以使用硬连线的电路替换软件指令或者与之组合。实施例计算设备系统500环境不限于硬件电路和/或软件的任意具体组合。
如在此使用的术语“计算设备可读介质”指可以参与向处理器510提供程序或应用和/或软件指令用于执行的任意介质。这样的介质可以采取许多形式,包括但不限于存储介质和传输介质。存储介质的例子包括但不限于RAM、ROM、EEPROM、闪存、固态驱动器、CD-ROM、USB棒驱动器、数字通用盘(DVD)、盒式磁带、磁带、磁盘存储器或任何其他磁介质、软盘、软磁盘、穿孔卡、纸带或者具有孔、存储器芯片或者磁带盒的样式的任意其他物理介质。实施例计算设备系统500的系统存储器515和存储器件520是存储介质的进一步的例子。传输介质的例子包括但不限于诸如同轴电缆、铜线和光纤的有线介质和诸如光信号、声学信号、RF信号和红外信号的无线介质。
实施例计算设备系统500还包括耦合到总线505的一个或多个通信连接550。实施例通信连接550提供从计算设备系统500耦合到局域网(LAN)565和/或包括万维网或因特网的广域网(WAN)570和各种其他通信网络575(例如基于SMS的网络、电话系统网络等)上的其他计算设备的双向数据通信。通信连接550的例子包括但不限于综合服务数字网络(ISDN)卡、调制解调器、LAN卡和能够发送和接收电、电磁、光、声、RF或红外信号的任何设备。
实施例计算设备系统500接收的通信可以包括程序或应用和/或软件指令和数据。实施例计算设备系统500接收的指令可以在其被接收时由处理器510执行和/或存储在存储器件520或其他非易失性存储器中用于稍后执行。
结论
尽管在此描述了各种实施例,但是仅通过例子给出这些实施例,并且不意图限制要求保护的主题的范围。仍然在以下权利要求的范围内的许多变更是可能的。在检查了在此的说明书、附图和权利要求书后,这些变更是清楚的。因而,除了以以下权利要求及其等效物来定义之外,要求保护的主题的幅度和范围将不受限制。