CN102929750B - 非易失性介质肮脏区段跟踪 - Google Patents
非易失性介质肮脏区段跟踪 Download PDFInfo
- Publication number
- CN102929750B CN102929750B CN201210335689.4A CN201210335689A CN102929750B CN 102929750 B CN102929750 B CN 102929750B CN 201210335689 A CN201210335689 A CN 201210335689A CN 102929750 B CN102929750 B CN 102929750B
- Authority
- CN
- China
- Prior art keywords
- storage
- region
- descriptor
- section
- dirty
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000003860 storage Methods 0.000 claims abstract description 533
- 238000000034 method Methods 0.000 claims abstract description 168
- 238000004140 cleaning Methods 0.000 claims abstract description 76
- 230000000977 initiatory effect Effects 0.000 claims description 6
- 238000010200 validation analysis Methods 0.000 claims 1
- 230000008569 process Effects 0.000 abstract description 37
- 238000011084 recovery Methods 0.000 abstract description 29
- 238000012360 testing method Methods 0.000 abstract description 2
- 230000000875 corresponding effect Effects 0.000 description 60
- 230000015654 memory Effects 0.000 description 53
- 230000008901 benefit Effects 0.000 description 16
- 238000005192 partition Methods 0.000 description 10
- 230000003287 optical effect Effects 0.000 description 8
- 230000008859 change Effects 0.000 description 6
- 238000004891 communication Methods 0.000 description 6
- 238000012937 correction Methods 0.000 description 6
- 238000012545 processing Methods 0.000 description 6
- 239000007787 solid Substances 0.000 description 5
- 238000003491 array Methods 0.000 description 4
- 238000001514 detection method Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 230000001010 compromised effect Effects 0.000 description 3
- 238000013480 data collection Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000008439 repair process Effects 0.000 description 3
- 230000000717 retained effect Effects 0.000 description 3
- 230000004075 alteration Effects 0.000 description 2
- JJWKPURADFRFRB-UHFFFAOYSA-N carbonyl sulfide Chemical compound O=C=S JJWKPURADFRFRB-UHFFFAOYSA-N 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000002195 synergetic effect Effects 0.000 description 2
- 230000001052 transient effect Effects 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000002035 prolonged effect Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000004224 protection Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1076—Parity data used in redundant arrays of independent storages, e.g. in RAID systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/2053—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
- G06F11/2056—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring
- G06F11/2064—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring while ensuring consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2211/00—Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
- G06F2211/10—Indexing scheme relating to G06F11/10
- G06F2211/1002—Indexing scheme relating to G06F11/1076
- G06F2211/1009—Cache, i.e. caches used in RAID system with parity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2211/00—Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
- G06F2211/10—Indexing scheme relating to G06F11/10
- G06F2211/1002—Indexing scheme relating to G06F11/1076
- G06F2211/1035—Keeping track, i.e. keeping track of data and parity changes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2211/00—Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
- G06F2211/10—Indexing scheme relating to G06F11/10
- G06F2211/1002—Indexing scheme relating to G06F11/1076
- G06F2211/104—Metadata, i.e. metadata associated with RAID systems with parity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2211/00—Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
- G06F2211/10—Indexing scheme relating to G06F11/10
- G06F2211/1002—Indexing scheme relating to G06F11/1076
- G06F2211/1061—Parity-single bit-RAID4, i.e. RAID 4 implementations
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Retry When Errors Occur (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
- Hardware Redundancy (AREA)
Abstract
在对存储集合(例如硬盘驱动器阵列)进行写入的同时,所述存储集合可能会发生故障,比如失去电力、软件崩溃或者存储设备断开。从故障恢复可以涉及扫描存储集合以便检测及校正不一致(例如对数据集合的各个镜像进行比较或者测试校验和)。但是由于缺乏关于故障期间对于存储集合的待定写入的位置的信息,该“清洁”处理可能涉及扫描整个存储集合,从而导致长时间的恢复处理。这里给出了用于跟踪对于存储集合的写入的技术,这是通过将存储集合分配成具有区段尺寸(例如一千兆字节)的各个区段,并且在非易失性存储介质上存储包括进行中的写入的“肮脏”区段的描述符。于是可以把故障后的恢复处理限制到被识别为肮脏的区段。
Description
背景技术
在计算领域内,许多情形涉及由存储设备集合(例如根据廉价盘冗余阵列(RAID)阵列互操作的硬盘驱动器阵列)提供的存储集合,并且其可以由各种设备和处理访问以便存储及获取各种类型的数据。在许多这样的情形中,存储在存储集合的不同部分中的数据可能具有一定关系。作为第一个例子,存储在存储集合中的第一数据集合和第二数据集合可能彼此参照,比如数据库系统中的相关记录。作为第二个例子,可以保留数据的两个或更多完全相同的版本,以便提供许多优点。举例来说,两个存储设备可以存储相同的数据集合并且对其提供访问,从而实际上将针对数据的访问速率加倍。还可以保留数据的完全相同的拷贝以便保护数据的完整性;例如如果数据的第一份拷贝由于数据破坏或硬件故障(例如硬盘驱动器崩溃)之类的故障而丢失,则可以访问所述数据集合的完全相同的第二份拷贝并且对其进行复制以便从故障恢复。
作为第三个这样的例子,可以把数据相关联以便检测和/或防护数据发生错误或非意定改变。举例来说,设备的读取或存储逻辑中的错误、缓冲区欠载或溢出、存储介质中的瑕疵或者外部干扰(比如宇宙射线)都可能不时导致在存储于存储介质上的数据或者在从存储介质读取数据的过程中发生非有意的改变。因此,在许多这样的情形中,对于存储在存储设备上的数据的对应部分可以计算并存储验证器(比如校验和),并且其可以被用来证实数据集合的内容已经被有效地存储到存储设备上和/或从存储设备中读取。作为一个这样的例子,在存储包括比特集合的数据集合的情境中,可以对各个比特应用异或(XOR)运算,从而得到可以被存储并且与该数据集合相关联的一比特校验和。当后来读取所述数据集合时,可以对其应用另一次异或运算,并且可以将结果与所述一比特校验和进行比较。任一个比特的改变都会导致这些异或计算的失配,从而表明数据已被错误地存储、更改或者从存储设备错误地读取。可以确定许多类型的验证器,其在某些特征方面可能有所不同(例如易于计算,识别出数据集合的哪一个比特发生了改变的能力,以及能够借以校正错误地读取的数据部分的纠错能力)。
常常通过使用廉价盘冗余阵列(RAID)阵列来实现各种形式的数据复制,比如共用在一起以便获得各种聚集属性(比如改进吞吐量和自动数据镜像)的硬盘驱动器集合。作为第一个这样的例子,在RAID 1阵列中,由具有相同尺寸的两个或更多硬盘驱动器构成的集合存储所述存储集合的完全相同的拷贝,并且对于存储集合的任何更新都被完全相同地传播到所有硬盘驱动器上。因此,在硬盘驱动器发生故障的情况下,甚至在发生多个此类故障的情况下,只要有一个硬盘驱动器保持可运转并且可访问,存储集合就保持可访问。作为第二个这样的例子,RAID 4阵列涉及由两个或更多盘构成的集合,其中在所述阵列中包括一个不用来存储用户数据的盘,而是用来存储在其他盘上所存储的数据的验证器。举例来说,对于涉及分别存储一兆兆字节数据的四个盘的RAID 4阵列,前三个盘的容量被共用从而形成用于用户数据的三兆兆字节存储空间,而第四个盘被包括在所述阵列中以便保存对应于在前三个盘上所存储的各个数据集合的验证器(例如对于分别存储在其他三个盘上的每三个64比特字,第四个盘包括64比特验证器以便验证所述三个64比特字的完整性)。RAID阵列控制器包括被配置成针对所提供的硬盘驱动器集合实施所选RAID级别的细节的电路(例如在接收到数据集合之后,将数据自动分配在三个用户数据盘上,计算所述数据集合的验证器,并且将验证器存储在第四个盘上)。所使用的RAID技术还可以实现附加的保护或特征;例如如果RAID 4阵列中的任何单个存储设备发生故障,则可以通过使用剩余的存储设备完全重建存储在故障设备上的数据。
发明内容
提供本概要是为了以简化形式介绍将在下面的详细描述部分中进一步描述的概念的选择。本概要不意图标识出所要求保护的主题内容的关键特征或本质特征,也不意图被使用来限制所要求保护的主题内容的范围。
在存储系统上写入相关联的数据集合时,在写入期间可能会发生导致相关联的各个数据集合之间的不一致的问题。作为第一个例子,在镜像的数据集合中,在对其中一个镜像进行写入时可能会发生错误,比如由于宇宙射线、物理介质中的瑕疵或者读取/写入处理中的逻辑错误而导致数据的非有意改变。其结果是,数据集合的各个镜像可能不匹配,并且可能难以选择数据的正确版本。作为第二个例子,由于存储数据集合及其验证器(或者反之亦然)之间的延迟可能会出现问题。举例来说,许多存储设备只支持每次对一个位置的写入(例如处于硬盘驱动器的写入头下方的位置,或者由固态存储设备中的地址寄存器指定的位置),并且对于数据的顺序存储涉及在验证器之前写入数据集合,或者反之亦然。作为另一个例子,如果数据集合和验证器被存储在不同的存储设备上,则可能难以把第一存储设备存储数据集合的时刻与第二存储设备存储数据集合的验证器的时刻同步。其结果是,存储数据集合和相应的验证器不是按照同步方式发生的,而是按照顺序方式发生的。许多故障来源可能会中断存储处理,比如掉电、硬件故障、软件崩溃或者从阵列当中意外地移除存储设备。如果在存储数据集合之后并且在存储验证器之前的时刻发生这样的故障,则后面在读取期间可能会出现危害对于数据准确性的置信度的验证器错误。除了正由(多个)存储设备主动写入的数据之外,故障还可能会干扰尚未完成的其他写入,比如存储在写入缓冲区中的数据和被调度为即将写入的数据。
在这些和其他情形中,可以通过验证处理来检测数据集合的一致性,例如通过对各个完全相同的数据集合进行比较或者对具有相应数据的各个验证器进行比较。相应地,在检测到灾难性故障之后,可以“清洁”一个或更多存储设备上的数据,这是通过验证所述数据并且可能校正不一致而实现的。但是虽然可能很容易地检测到故障的发生(例如错误的关闭或者对于故障存储设备的替换),但是可能无法确定在进行写入时存储设备的哪些部分正被写入并且可能已经由于故障而受损。如果没有这样的信息,可能必须通过验证存储集合中的每一个数据集合来清洁整个存储集合(例如把镜像的数据集合的每一份拷贝的全部内容进行比较以检测不一致,并且测试存储集合中的每一个数据集合的验证器)。清洁整个存储集合可能会花费很长时间,特别鉴于存储集合容量已经增长到千兆兆字节的范围,从而甚至在短暂的灾难性故障时间段之后也会导致长时间的恢复时间段;并且虽然这一广泛的清洁处理可以确保数据集合的完整性,但是对于整个卷的清洁处理(常常涉及很长时间内没有被写入的数据集合甚至存储设备)的程度可能与故障发生时可能正在进行中的写入的相对较小的数目不成比例。
这里给出了用于把针对存储集合的清洁集中到可能受损于故障的数据的技术。根据这些技术,在对存储集合中的位置进行写入之前,存储设备可以在相同的非易失性物理介质上存储表明所述写入将要发生的位置的描述符,并且可以在所述写入完成之后擦除所述描述符。按照这种方式,存储设备可以跟踪存储集合的“肮脏”区域,并且在从故障恢复之后,可以仅仅对存储集合的“肮脏”区域发起清洁。但是可以认识到,在非易失性物理介质上记录(以及刷新)每一项写入的地址并且在证实对于物理介质的写入完成之后擦除(以及刷新)所述地址,这样做可能会显著增加在写入每一个数据集合的过程中所涉及的查找和写入的次数(例如增加到三倍),从而降低存储集合的性能(例如等待时间和吞吐量)。在另一极端情况下,仅仅在高级别下(比如对于每个存储设备、分区或卷)跟踪“肮脏”信息可能使得清洁处理不够集中。举例来说,如果对于每个卷跟踪“肮脏”信息,则清洁处理可能集中于在写入时处于使用中的特定卷,但是该卷可能包括数以兆兆字节计的数据,从而导致大规模的清洁处理,即使当时仅仅在对几兆字节的数据进行写入也是如此。因此,根据这里给出的技术,可以把存储集合分配成具有区段尺寸的各个区段,并且可以对于每一个区段跟踪“肮脏”信息。举例来说,将存储集合分配到一千兆字节的各个区段可以允许对于各个区段的相对精确的跟踪,同时还降低了更新肮脏区段信息的频率(例如当在某一区段内发起写入时,该区段被标记为“肮脏”,并且可以在该区段内的大量顺序写入期间保持如此标记)。因此,对于区段尺寸的选择可以被视为肮脏区段信息的精度(其导致更加集中并且更短的清洁处理)与实施肮脏区段跟踪处理的性能成本降低之间的折中。
附加的技术可以进一步降低对于肮脏区段信息的更新频率。作为第一个例子,在写入对应于对其请求了写入的区段的肮脏区段描述符之前,一个实施例可以确定该区段是否已经在存储介质上被标记为肮脏,并且可以避免冗余地将该区段标记为肮脏。作为第二个例子,最近完成了对其的写入的区段可能给出即将对同一区段进行后续写入的高概率。因此,取代在写入完成之后迅速把所述区段标记为清洁,可以把所述“清洁”评论推迟一段短暂的持续时间;并且如果接收到对于同一区段的后续写入,则该区段可以保持被标记为肮脏,而无须在把所述区段标记为清洁之后不久即把该区段标记为肮脏。在一个这样的实施例中,可以生成肮脏区段描述符的易失性存储器表示并且将其用来确定何时把这样的区段标记为肮脏或清洁。举例来说,所述存储器内表示可以记录对于每一个区段的最近一次写入请求的时间,并且可以把在一段已定义的持续时间内没有被写入的任何区段标记为清洁。此外,所述存储器内表示可以允许对于各个“清洁”区段的批量记录,从而进一步减少在肮脏区段跟踪处理中所涉及的存储介质写入的数量。对于肮脏区段的“工作集合”的存储器内跟踪的这些和其他使用可以减少对于存储设备的访问次数,并从而降低非易失性肮脏区段跟踪的性能成本,而不会显著降低清洁处理的精度。这些和其他技术可以进一步降低实施肮脏区段跟踪的性能成本,而不会在从存储集合的故障恢复的过程中显著延长清洁处理。
为了实现前述和相关目的,下面的描述和附图阐述了特定的说明性方面和实现方式。这仅仅表明可以采用一个或更多方面的多种方式当中的几种。通过结合附图考虑下面的详细描述,本公开内容的其他方面、优点和新颖特征将变得显而易见。
附图说明
图1是一种示例性情形的图示,其特征在于存储集合的故障可能会损害存储在几个存储设备上的镜像数据集合。
图2是一种示例性情形的图示,其特征在于存储集合的故障可能损害数据集合和数据集合的验证器(例如校验和)的一致性。
图3是两种技术的图示,其可以减少由于故障导致数据集合中的数据受损的发生,但是可能具有高成本和/或低效率。
图4是一种示例性情形的图示,其特征在于使用这里给出的技术来跟踪存储集合的物理介质上的肮脏区段。
图5是根据这里给出的技术对存储集合的肮脏区段进行跟踪和非易失性介质记录的示例性方法的流程图示。
图6是根据这里给出的技术按照在存储集合的非易失性存储介质上表明的肮脏区段对存储集合进行清洁的示例性方法的流程图示。
图7是包括被配置成具体实现这里所阐述的一项或更多项规定的处理器可执行指令的示例性计算机可读介质的图示。
图8是一种示例性情形的图示,其特征在于可以根据这里给出的技术被用来跟踪存储集合的非易失性物理介质上的肮脏区段的一种类型的数据结构。
图9是用于根据这里给出的技术更新存储设备上的肮脏区段表以便跟踪存储集合的肮脏区段的示例性处理的图示。
图10是具体实现根据这里给出的技术跟踪存储集合的肮脏区段的处理的示例性状态机的图示。
图11是可以在其中实施这里阐述的一项或更多项规定的示例性计算环境。
具体实施方式
下面将参照附图描述所要求保护的主题内容,其中相同的附图标记始终被用来指代相同的元件。在下面的描述中,出于解释的目的阐述了许多具体细节以便提供对于所要求保护的主题内容的透彻理解。但是可以明显看出,可以在没有这些具体细节的情况下实践所要求保护的主题内容。在其他事例中,以方框图的形式示出了各个结构和设备以便于描述所要求保护的主题内容。
A、介绍
在计算领域内,许多情形涉及将包括存储集合的数据存储在一个或更多非易失性存储设备上(例如基于盘片的磁性和/或光学硬盘驱动器、固态存储设备以及非易失性存储器电路)。数据存储的许多细节可以有所变化,比如字尺寸、寻址方法、把存储设备的存储空间划分成一个或更多分区以及把存储设备内的已分派空间暴露为计算环境内的一个或更多卷。此外,各个存储设备可以独立操作或者进行松散协作以便提供存储集合。举例来说,在根据RAID 0方案构造的阵列中,可以从由每一个存储设备提供的容量简单地聚集存储集合,其中每一个存储设备可以独立于其他盘操作。可替换地,各个存储设备可以被配置成通过改变紧密协调的程度提供各种特征。举例来说,在根据RAID 1方案构造的阵列中,存储设备集合可以分别存储整个存储集合的一份完全相同的拷贝;例如一兆兆字节存储集合可以被存储为四个一兆兆字节存储设备上的四份完全相同的拷贝,所述存储设备可以互操作来确保针对更改存储集合的任何请求都被等效地应用于所有四个存储设备以便保持同步。这种性质的“镜像”档案可以给出改进的访问速率;例如不同的处理可以通过不同的存储设备访问存储集合,从而潜在地把可以通过任何单个设备实现的对于存储集合的访问速率增大到四倍。此外,此类阵列表现出鲁邦的耐久性;如果一个或更多硬盘驱动器发生故障(例如由于数据破坏、损坏或损失),仍然可以通过其他硬盘驱动器访问存储集合,并且只要至少一个硬盘驱动器保持有效且可访问的,所述存储集合就保持完好。但是这些特征的优点在RAID 1阵列中由于大量的容量损失而被抵消(例如使用四兆兆字节的硬盘驱动器空间来存储一兆兆字节的数据)。其他存储方案可以以较低的容量减少提供这些安全性和性能特征中的一些(例如在RAID 4方案中,一组(n)个驱动器的空间(s)暴露出除了一个被保留来存储奇偶校验信息的硬盘驱动器之外的所有硬盘驱动器的完全存储容量,并且可以从阵列中的任一个硬盘驱动器的故障恢复)。
在这些和其他情形中,可以通过各种设备和处理把数据集合存储到存储集合。但是在使用可能损害数据的存储的存储集合的过程中可能发生许多形式的故障。举例来说,当代表各个处理的对于存储集合的写入正在访问数据集合时,在写入处理中、在存储集合管理处理中、在对应于软件的设备驱动程序中或者在操作系统中可能会发生软件故障;计算机可能会丢失与存储设备的通信(例如存储设备可能被断开,或者连接计算机与存储设备的有线或无线网络可能故障);或者存储设备可能发生硬件故障(例如硬盘驱动器中的驱动器头崩溃或者断电)。这些和其他形式的故障可能在没有预警的情况下突然发生,并且可能会中断向存储集合写入数据的处理。
在一项或更多项写入期间发生存储集合故障的情况下,某些类型的故障可能是可恢复的,或者可能导致无足轻重的数据丢失。举例来说,故障可能在数据被写入到存储集合之后不久发生并且是可恢复的;可能导致丢失了可以被再生或者没有价值的数据;或者可能导致丢失相对较大的数据集合中的少量数据,比如丢失了非常大的电子邮件消息档案中的几个电子邮件消息。但是其他类型的故障可能造成严重的问题。具体来说,在被写入到存储集合的两个或更多数据集合之间可能存在某些关联,并且在写入第一数据集合时发生的故障可能导致相关联的数据集合中的不一致。这样的不一致可能不仅会损害故障发生时刻正被写入的数据集合的完整性,而且还会损害相关联的数据集合。实际上,在某些情形中,与对于存储集合的不完整写入相比,写入的完全失败以及将要写入的数据的丢失可能导致较少的问题。作为第一个例子,如果在对于镜像的数据集合的第一份拷贝的更新期间发生故障,则所检测到的该拷贝与另一拷贝之间的不一致可能会对全部两份拷贝的完整性招致疑问。此外,如果在故障发生时刻全部两份拷贝都正被更新并且随后检测到不一致,则可能难以确定哪一份拷贝在故障发生之前成功完成了写入而哪一份拷贝则没有完成。作为第二个例子,如果检测到数据集合与其校验和之间的不一致,则可能难以确定是数据集合还是校验和出了错。此外,如果校验和是从几个数据集合计算的,在针对一个数据集合的写入没能完成的情况下可能导致错误的校验和以及不仅降低对于所述数据集合和校验和的完整性的信任,而且还降低对于所述校验和代表的所有其他数据集合的信任。在这些和其他情形中,如果没能完成对于数据集合的写入则可能导致会损害存储集合中的广泛数据范围的可靠性的不一致,其中甚至包括只与不完整地写入的数据集合不太相关的其他数据集合。
图1和2所给出的两种不同情形示出了在对数据集合进行写入时发生故障的后果。在图1的示例性情形100中,包括各个数据集合104(例如比特、字节、字、扇区、文件或记录)的存储集合102被存储在存储设备106的集合上,其中在各个数据集合104之间存在镜像关系。具体来说,在该示例性情形100中,存储设备106被配置成存储数据集合104的完全相同的拷贝,比如在RAID 1方案中那样。(可以按照物理方式施行镜像,例如把相同的数据写入到尺寸完全相同的存储设备106的集合上的每一个物理位置,或者按照逻辑方式施行镜像,例如把数据写入到对应于存储集合102的逻辑地址的每一个存储设备106的物理位置。)相应地,在第一时间点112,当请求在存储集合102中的特定位置108处写入110特定数据集合104时,各个存储设备106可以分别对所请求的位置108施行写入110。但是正如该示例性情形100中进一步示出的那样,可能会由于各个存储设备106的不完全同步而出现问题;例如可能由不同的存储设备106在不同时间发起、施行以及完成对于每一个存储设备106的写入110。这样的定时差异可能是由于硬件差异导致的(例如第一存储设备106可能迅速把数据集合104提交到物理介质,而第二存储设备106则可能首先把数据集合104存储在写入缓冲区中),但是甚至对于装备完全相同的存储设备也可能发生(例如不同的存储设备106的输入/输出队列的差异,或者不同的硬盘驱动器的写入头在写入请求开始时的初始扇区位置的差异)。其结果是,在第二时间点114,对于其中两个存储设备106的写入110可能已经完成,而第三存储设备106则继续完成写入110(并且实际上可能尚未开始把数据集合104提交到存储集合102)。
例如如果在第一存储设备106完成写入110之后并且在第二存储设备106完成相同的写入110之前发生故障的话,则存储设备106的这样的同步偏离可能会导致严重的问题。举例来说,在第三时间点116,当正对存储设备106施行第三写入110时,发生中断对于所有存储设备106的写入110的故障118。即使故障118是暂时性的(例如瞬时失电),并且甚至是瞬息性的,由于存储设备106中的定时差异,故障118仍然可能导致不一致122(例如在故障118之前写入110可能已经在第一和第二存储设备106上完成,但是没有在第三存储设备106上完成)。在从故障118恢复的同时,在识别出预期是完全相同的各个数据集合104之间的不一致122之后,可能难以选择确定哪一个数据集合108是准确的。在该示例性情形100中,可能符合逻辑的做法是选择存储在多数存储设备106上的数据集合108的版本。但是该示例性情形100的次要变型可能使得这样的选择不那么符合逻辑;例如在涉及偶数个存储设备106的情形中可能会出现不一致122,从而可能无法进行多数选择。
在例如图1的示例性情形100之类的情形中,不一致122可能仅仅适用于最近被写入的数据集合110。但是在其他情形中,类似的故障118还可能危害在长时间内没有被写入或者甚至被访问的数据集合104的可靠性,甚至会危害存储在故障118发生时并未处于使用中的其他存储设备106上的那些数据集合104。在图2的示例性情形200中,按照RAID 4方案配置由四个存储设备106构成的集合,其中存储集合102被分派在三个存储设备106上,并且第四存储设备106被配置成存储对应于存储在前三个存储设备106上的各个数据集合104的验证器202的集合。验证器202可以包括校验和,比如通过把存储在每一个其他存储设备106上的相应位置处的各个比特异或在一起而计算出来的奇偶校验位。(例如对于存储在每一个存储设备106的存储集合102中的特定物理或逻辑位置处的一兆字节数据集合104,可以把每一个所述一兆字节数据集合104异或在一起,以便生成存储在第四存储设备106上的一兆字节的奇偶校验数据。)这一互操作可以允许存储设备106在某些形式的数据丢失下保持存储集合102的完整性。例如如果前三个存储设备106当中的任一个丢失,则可以通过把存储在另外两个存储设备106上的数据与存储在第四存储设备106上的相应的奇偶校验数据异或在一起来重建存储集合102的存储在所丢失的存储设备106上的部分;并且如果第四存储设备106丢失,则可以从存储在前三个存储设备上的相应的数据集合104简单地把奇偶校验数据重新生成到替换的存储设备106上。
按照这种方式,如图2的示例性情形200中所示的各个存储设备106的互操作即使在突然并且永久性地丢失任一个存储设备106的情况下也允许容错。但是该示例性情形200中的存储设备106也表现出在图1的示例性情形100中给出的不完全同步。举例来说,在第一时间点204,可以发起对于存储在第二存储设备106上的数据集合104的写入110,这涉及到更新对应于存储在第四存储设备106上的相应数据集合104的验证器202。但是各项写入110可能不会同时完成;例如在第二时间点206,对于第二存储设备106的写入110可能已经完成,但是在第四存储设备106上对于验证器202的写入可能还没有完成。此外,在后一项写入110完成之前可能会发生故障118,并且第四存储设备106可能会保留错误的验证器118。即使受到限制并且简短,该故障118仍然可能不仅危害已被不完整地写入到第四存储设备106上的验证器116和最近被完整地写入的存储在第二存储设备106上的数据集合104,而且还会危害同样由验证器122代表的存储在第一和第三存储设备106上的数据集合104。举例来说,在第三时间点208,第三存储设备106可能会发生故障118;并且在第四时间点210,可以发起恢复处理以便通过把第一和第二存储设备106上的相应数据集合104与第四存储设备106上的相应验证器202异或在一起而在替换的存储设备118上重建数据集合104。但是由于在第二时间点206对于第四存储设备106的写入110的故障118导致的不一致122,所述异或可能导致在第三存储设备106上重建错误的数据212。即使第三存储设备106上的该数据集合104没有被涉及在写入110的故障118中,即使该数据集合104在长时间内都没有被写入,并且即使在对于第四存储设备106的写入110的故障118期间第三存储设备106并未处于使用中或者甚至不可访问,仍然可能生成该错误数据212。因此,写入202的单次故障可能包括存储集合102的容错能力(也就是说尽管实施了RAID 4方案,但是存储集合102仍然会失去从单个存储设备106的故障118恢复的能力)。在其他情形中可能会出现甚至更加严重的问题;例如如果故障的写入110是对于包括主引导记录的数据集合104发生的,则存储集合106内的整个卷(可能包括整个存储集合106)都可能会受到损害并且不可访问。
由于写入110的故障118的潜在灾难性后果,可以利用各种技术来检测及校正所导致的不一致122。作为第一种这样的技术,可以利用各种类型的清洁处理来检测存储集合102中的不一致。举例来说,可以把数据集合104与验证器202进行比较以检测失配,或者可以对预期是完全相同的数据集合104的各份拷贝进行比较。甚至可以对于不与另一个数据集合104或验证器202相关联的数据集合104检查诸如数据破坏之类的不一致,并且可以偶尔自动修复。但是对于整个存储集合102的扫描在许多情形中可能是低效的和/或无法承受的。举例来说,所述扫描可能会由于存储集合102的尺寸、存储集合102的吞吐量(例如可以通过相对低吞吐量的网络连接访问地理上分布式的存储集合102)和/或扫描的复杂度(例如复杂奇偶校验检查的数学加强的计算)而延长。在扫描期间,如图2的示例性情形200中所描绘的那样,在存储设备106发生故障118的情况下存储集合102仍然可能是不一致并且脆弱的,并且由于可能会提供错误的数据,因此允许处理访问存储集合102的做法可能是不明智的。因此可能必须阻断这样的处理直到扫描完成为止(或者至少直到已经清洁了所述处理所利用的数据集合104为止),从而导致服务断供或停用时间。此外,对于整个存储集合102的该长时间并且高成本的扫描可能由甚至单个存储设备106的可能是短暂的故障118而触发,并且可能与故障118期间的待定写入110的数目不成比例。实际上,即使在故障118发生时没有在进行写入110,如果无法确定待定写入110的数目,则由于可能发生导致灾难性结果的不一致122,也可能必须调用对于整个存储集合102的扫描。
鉴于这些考虑,可能期望提供用以在存储集合102的正常操作期间存储关于待定写入110的信息的机制,以防突然发生硬件和/或软件故障118。该信息可以被记录为关于存储集合102的“肮脏”状态的信息,所述“肮脏”状态可能在故障发生时导致不一致122。此外,可能期望将该信息记录在非易失性存储器中,以便在发生电力故障时保留所述信息。这一跟踪可以允许在故障118之后调用清洁处理,从而可以把清洁处理限制到仅仅扫描存储集合102在故障118发生时刻涉及在待定写入110中的区域。
图3给出了用于把“肮脏”状态记录在对应于由存储设备106的集合提供的存储集合102的非易失性存储器中的两种技术。作为第一种示例性技术300,对于存储在存储集合102中的每一个数据比特,可以存储“肮脏”指示符302,其表明对于该比特的待定写入202。对应于某一比特的“肮脏”指示符302可以在发起对于该比特的写入202之前设定,并且可以在写入202完成之后被清除。为了清洁存储集合102,可以检查各个比特的“肮脏”指示符302,并且被设定的任何“肮脏”指示符302可以发起对于相关联的比特的清洁(例如通过把来自存储在不同存储设备106上的数据集合102的完全相同的拷贝的相应比特拷贝在不一致比特之上)。
该第一种示例性技术300可以给出一些优点:例如其可以实现把关于待定写入104的信息存储在非易失性存储介质中,可以带来涉及少量附加硬件或软件的相对简单的清洁处理,并且与其他检测方法(例如在获取自几个存储设备106的较大数据集合104上施行异或运算)相比可以降低所述清洁的计算复杂度。但是该第一种示例性技术300也存在许多缺点。作为第一个例子,“肮脏”指示符302消耗存储集合102的一半存储空间。作为第二个例子,扫描处理仍然涉及扫描整个存储集合102,并且即使扫描检测的相对简便性降低了所涉及的计算能力,但是对于整个存储集合102的访问仍然会导致长时间的清洁处理。此外,如果对于存储集合102的访问速率是清洁处理中的瓶颈,则清洁处理的持续时间可能不会改变。作为第三个例子,如果“肮脏”指示符302的存储与存储设备106的被跟踪比特在物理上邻近(例如在存储设备106的物理介质上跟在每一个比特或字节之后),则导致破坏比特的故障108也可能导致破坏“肮脏”指示符302。可替换地,如果“肮脏”指示符302被存储在同一存储设备106的不同区域内,则对于任何单个比特的写入202都涉及对于该存储设备106的三个不同部分的三次访问——例如对于存储“肮脏”指示符302的区域的第一次查找和访问以便将所述比特标记为肮脏;对于存储所述比特的区域的第二次查找和访问以便施行写入202;以及对于存储“肮脏”指示符302的区域的第三次查找和访问以便把所述比特标记为清洁。这样的多次访问可能会大大降低存储设备106的性能(例如等待时间和吞吐量)。此外,由于跟踪“肮脏”比特的这种变型在存储设备106的常规使用中导致更多的物理磨损,因此可能会不利地加速存储设备104的物理故障118。
图3还描绘出用于跟踪对应于由存储设备106的集合提供的存储集合102的“肮脏”信息的第二种示例性技术304。该第二种示例性技术304涉及包括单独的非易失性存储器306(例如包括单独的电池308的固态存储设备),可以在其中记录对应于存储集合102的各个字节的“肮脏”指示符。举例来说,可以监测对于对应的数据集合104的写入202的请求,将其记录在单独的非易失性存储器306中,并且在写入202完成时清除。
该第二种示例性技术304给出了几个优点,在一般方面以及关于图3中所示的第一种示例性技术304都是如此。作为第一个例子,由于对单独的非易失性存储器306的访问可能与施行对存储集合102的写入202同时发生,因此存储设备106的性能(例如等待时间和吞吐量)可以不由于包括该技术而降低。作为第二个例子,将“肮脏”指示符306存储在存储器的单独部分中可以避免减小存储集合102的容量。作为第三个例子,“肮脏”指示符302与存储设备106的物理介质的分开存储可以在存储集合102发生故障118时保留“肮脏”指示符302;例如存储设备106的一部分中的物理瑕疵可能不会影响对应于存储在所述瑕疵部分中的各个字节的“肮脏”指示符302的存储或获取,并且在发生电力故障时,单独的非易失性存储器306可以利用电池308继续操作。作为第四个例子,通过仅仅集中于在单独的非易失性存储器306中被表明为肮脏的字节,清洁处理可以显著延长。
但是该第二种示例性技术304也存在明显的缺点。作为第一个例子,包括单独的硬件会显著增加存储集合102的成本和复杂度。作为第二个例子,除了存储设备106可能发生故障之外,对于存储集合102的管理可能还必须应付单独的非易失性存储器306的故障。此外,由于单独的非易失性存储器306没有被存储在存储集合102中,因此其没有被包括在用于提升存储集合102的冗余度和容错性的机制中,并且单独的非易失性存储器306的单次故障就可能导致丢失对应于整个存储集合102的“肮脏”指示符302。作为第三个例子,对于存储集合102的对应字节跟踪“肮脏”指示符302可能涉及对于单独的非易失性存储器306的较高访问次数和速率,这可能必须提供较高的吞吐量和较大的容量以满足这一任务。实际上,单独的非易失性存储器306可能必须提供足够的吞吐量以便不仅记录对应于存储集合102中的最快的存储设备106的写入活动,而且还要对于由单独的非易失性存储器306所服务的所有存储设备106的组合活动速率进行记录。作为第四个例子,如果单独的非易失性存储器306没有与存储设备106集成在一起(例如如果其被实施在RAID控制器中),则“肮脏”指示符302的便携性可能不如存储设备106。举例来说,在RAID控制器发生不相关的故障时,存储设备106可能被迁移到不同的RAID控制器并且由其访问,但是“肮脏”指示符302则可能保留在发生故障的RAID控制器的完全可运作的单独的非易失性存储器306中。实际上,用户可能不清楚为何没有涉及在RAID控制器的故障中的存储设备106可能是不一致的,并从而在插入到单独的RAID控制器中时可能必须被清洁。类似于图3中的技术的用于通过跟踪对于存储集合102的写入202的状态来促进从故障118恢复存储集合102的许多技术都可能表现出这些和其他缺点。
B、所给出的技术
这里给出了用于跟踪对于由存储设备106的集合提供的存储集合102的写入202的状态的技术,其可以允许按照容错、高性能并且低成本的方式进行快速的清洁处理。根据这些技术,可以将存储集合102分配成具有特定区段尺寸的各个区段(例如一千兆字节的区段),并且可以生成区段描述符以便记录对于每一个区段内的一个或更多位置108的写入110的待定性。区段描述符可以被存储在与所述区段所处的相同的存储设备106上,或者被存储在存储集合102的不同存储设备106上。当接收到针对特定位置108的写入100请求时,这些技术的一个实施例可以首先识别出包括所述位置108的区段,并且可以随后确定包括位置108的区段的区段指示符是否已经被标记为肮脏。如果不是,则所述实施例可以首先更新区段指示符以便把所述区段标记为肮脏;但是如果是的话,则所述实施例可以继续写入110而无须更新区段指示符。在写入110完成之后,所述实施例可以把所述区段的区段指示符标记为清洁。应当提到的是,所述实施例可以被配置成并不迅速将区段更新为清洁,而是在这样做之前等待一个简短的时间段,以防在第一项写入110之后迅速跟随有针对相同区段的写入110的后续请求(其是对相同位置108的覆写,或者是对顺次跟随的数据集合104或者另外的附近数据集合104的写入110)。这一延迟可以避免在把区段指示符重写为“清洁”之后迅速又把区段指示符重写为“肮脏”,并因此可以节省对于存储设备106的访问从而改进存储设备106的性能和使用寿命。
图4给出了其特征在于根据这里给出的技术跟踪对于由两个存储设备106提供的存储集合102的待定写入110的一种示例性情形的图示,其中各个存储设备106进行协调以便对存储集合102的完全相同的拷贝进行存储(例如根据RAID 1方案对存储集合102进行镜像)。在该示例性情形400中,并且根据这里给出的技术,把由各个存储设备106提供的存储集合102分配成具有区段尺寸的各个区段402(例如一千兆字节区段)。每一个区段402包括存储在存储集合102内的位置108的一个集合(例如地址的范围)内的数据集合104。在每一个存储设备106上可以生成区段描述符404,其中可以根据对包括区段402的各个数据集合104所施行的写入110的待定或已完成状态而把区段402标记为“肮脏”或“清洁”。举例来说,在第一时间点408,请求对存储集合102中的第一位置108进行第一项写入110,并且存储设备106通过首先识别出包括第一位置108的区段402而开始施行第一项写入110,并且随后在区段描述符404中将所述区段402标记406为肮脏。在把区段402标记为肮脏之后,存储设备106随后发起对于存储集合102中的位置108的第一项写入110。在第二时间点410,第一存储设备106可能已经完成了第一项写入110,但是可能还没有在区段描述符404中把区段402标记为清洁。但是由于各个存储设备106的不完美同步,在第二时间点410,第二存储设备106可能还没有完成第一项写入110。
正如在图4的示例性情形400中进一步示出的那样,在第三时间点412,可以请求对存储集合102中的不同位置108的第二项写入110。存储设备106因此识别出与第二项写入110的位置106相关联的区段402,并且确定该位置106也处于第一区段402内。此外,由于第一区段402已经在区段描述符404中被标记为肮脏,因此存储设备106不再冗余地更新区段描述符404。存储设备106随后开始施行写入110,并且第二存储设备106最终完成写入110并且随后(可能在简短延迟之后,其间没有请求对于第一区段402的另外的写入110)更新区段描述符404以便把第一区段402标记为清洁。但是由第一存储设备106施行的写入110被故障118(例如暂时断开、软件崩溃或电力故障)中断。在第四时间点414,第一存储设备106再次变为可访问,并且发起清洁416第一存储设备106的任务以便确保校正被故障118中断的写入110,如果没有校正的话则可能在存储集合102中存在潜在地灾难性不一致122(例如存储在存储设备106上的存储集合102的完全相同的拷贝出现偏差)。但是取代把所有数据集合104与第二存储设备106的相应数据集合104进行比较,所述清洁416可以利用区段描述符404并且可以只清洁被标记为肮脏的区段402。因此,在第四时间点414,由于只有第一区段402在第一存储设备106的区段描述符404中被标记为肮脏,因此所述清洁416可以把第一区段402的数据集合102与第二存储设备106的相应数据集合416进行比较,并且在发现不一致之后,可以把所述数据集合104拷贝在第一存储设备106的错误数据集合104之上。
按照这种方式,这里给出的技术(在图4的示例性情形400中描绘了其中一个例子)可以允许在故障118之后清洁416存储设备106。此外,与其中包括图3中所示的那些的其他技术相比,这些技术按照有利的方式实现了所述清洁416。作为第一个示例性实例,对于第一存储设备106的清洁416被限制到存储在区段402的子集中的数据集合104,在所述区段的子集中,在崩溃118发生时最近发生了至少一项写入110;例如由于第二区段402已经在一段时间内没有经历过写入110,因此第二区段402没有被包括在所述清洁416中。作为第二个示例性优点,通过对于包括区段402的集合的各个区段406的肮脏和清洁信息的标记406,以及在写入110之后推迟把这样的区段402标记为清洁,可以显著减轻由于跟踪肮脏区段而导致的性能损失。举例来说,通过在第一项写入110之后的简短时间段内把第一区段402保持标记406为肮脏,存储设备106能够省略把区段402标记406为肮脏,而仅仅在接收到针对相同区段402内的另一个位置106的第二项写入110之后又将其标记为肮脏,从而把每一个存储设备106对区段描述符404的访问从三次减少到一次。如果是对于每个位置108跟踪肮脏区段信息或者如果存储设备106在每一项写入110之后迅速更新区段描述符404(如图3的第一种示例性技术300中所示),则可能无法实现上述效率提高。作为第三个示例性优点,通过对于各个区段406而不是对于单个位置108存储区段描述符404,不会显著减少存储设备106的可用容量(这与图3的第一种示例性技术300不同,在该技术中,存储设备106的50%总容量被用来跟踪可用容量的肮脏或清洁状态)。作为第四个示例性优点,对于肮脏区段的跟踪是在无需附加硬件的情况下实现的,并从而与图3的第二种示例性技术304相比降低了成本、复杂度、功率消耗,并且降低了跟踪技术的失败几率。通过根据这里给出的技术跟踪对应于提供存储集合102的各个存储设备106的肮脏区段信息,可以实现这些和其他示例性优点。
C、示例性实施例
图5给出了这些技术的第一示例性实施例的图示,其被描绘为把待定写入记录到存储集合104的一种示例性方法500。示例性方法500可以例如被实施为存储在设备(例如存储器电路、硬盘驱动器的盘片、固态存储器组件或者磁盘或光盘)的存储器组件中的指令集合,当由设备的处理器执行时,所述指令集合使得所述设备施行这里给出的技术。示例性方法500开始于502,并且涉及在处理器上执行504所述指令。具体来说,所述指令被配置成在至少一个存储设备106上生成506区段描述符404,其把存储在存储设备106上的存储集合102根据区段尺寸分配成至少两个区段402。所述指令还被配置成在接收508到将要存储在存储集合102中的位置108处的数据集合104之后,识别出510存储集合102内的包括所述数据集合102的位置108的区段402;在区段描述符404中把所述区段402标记为512肮脏;以及发起514把数据集合104存储在存储集合102中的位置108处。所述指令还被配置成在把数据集合104存储于存储集合102中的位置108处之后,在区段描述符404中把所述区段402标记为516清洁。按照这种方式,所述指令实现根据这里给出的技术记录在存储集合102内待定的写入110,并且示例性方法500结束于518。
图6给出了这些技术的第二示例性实施例的图示,其被描绘为清洁416由具有处理器的计算机可访问的至少一个存储设备106存储的存储集合102的一种示例性方法600。示例性方法600可以例如被实施为存储在设备(例如存储器电路、硬盘驱动器的盘片、固态存储器组件或者磁盘或光盘)的存储器组件中的指令集合,当由设备的处理器执行时,所述指令集合使得所述设备施行这里给出的技术。示例性方法600开始于602,并且涉及在处理器上执行604所述指令。具体来说,所述指令被配置成从至少一个存储设备106获取606区段描述符404,其把存储在存储设备106上的存储集合102根据区段尺寸分配成至少两个区段402。所述指令还被配置成对于在区段描述符404中标记为肮脏的对应的608区段402发起610清洁416区段402内的数据集合104;并且在完成对于区段402内的数据集合104的清洁之后,在区段描述符404中把区段402标记为612清洁。按照这种方式,所述指令通过根据这里给出的技术校正由于故障中断的写入110导致的不一致122而实现对于存储集合102的清洁,并且示例性方法600结束于518。
图7给出了这些技术的第三示例性实施例,其被图示为包括处理器可执行指令702的示例性计算机可读介质700,所述处理器可执行指令702被配置成应用这里给出的技术。这样的计算机可读介质例如可以包括涉及有形设备的计算机可读存储介质,比如存储器半导体(例如利用静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)和/或同步动态随机存取存储器(SDRAM)技术的半导体)、硬盘驱动器的盘片、闪存设备或者磁盘或光盘(比如CD-R、DVD-R或软盘),其编码计算机可读指令集合,当由设备710的处理器712执行时,所述计算机可读指令集合使得设备710实施这里给出的技术。这样的计算机可读介质还可以包括(作为与计算机可读存储介质不同的一类技术的)各种类型的通信介质,比如可以通过各种物理现象传播的信号(例如电磁信号、声波信号或光学信号)以及在各种有线情形(例如通过以太网或光纤线缆)和/或无线情形(例如WiFi之类的无线局域网(WLAN)、Bluetooth之类的个人区域网(PAN)或者蜂窝或无线电网络)中传播的信号,并且其编码计算机可读指令集合,当由设备的处理器执行时,所述计算机可读指令集合使得所述设备实施这里给出的技术。在一个这样的实施例中,处理器可执行指令702可以被配置成施行一种记录对于包括存储集合102的各个存储设备106的待定写入110的方法,比如图5的示例性方法500。在另一个这样的实施例中,处理器可执行指令702可以被配置成施行一种利用存储在至少其中一个存储设备106上的区段描述符404清洁包括存储集合102的各个存储设备106的方法,比如图6的示例性方法600。本领域技术人员将会设想到被配置成根据这里给出的技术操作的许多此类计算机可读介质。
D、变型
在许多方面可以设想到这里讨论的技术的变型,并且其中一些变型关于这些和其他技术的其他变型可以给出附加的优点和/或减少缺点。此外,一些变型可以被组合实施,并且通过协同的合作,一些组合可以给出附加的优点和/或减少缺点。所述变型可以被合并在各个实施例中(例如图5的示例性方法500和图6的示例性方法600),以便为这样的实施例赋予单独的和/或协作的优点。
D1、各种情形
在这些技术的各个实施例之间可能有所不同的第一方面涉及可以在其中利用这样的技术的各种情形。作为该第一方面的第一种变型,这些技术可以与包括各种类型的数据集合104的许多类型的存储集合102相结合地使用,其中包括:存储各种类型的二进制对象的二进制存储系统;存储文件的文件系统;存储媒体对象的媒体库;存储许多类型的对象的对象系统;存储记录的数据库;以及存储电子邮件消息的电子邮件系统。作为该第一方面的第二种变型,这些技术可以与许多类型的存储设备106相结合地使用,其中包括硬盘驱动器、固态存储设备、非易失性存储器电路、基于带的存储设备以及磁盘和光盘。这样的存储设备106还可以直接连接到实施这些技术的设备710(比如计算机);可以通过有线或无线局域网(例如802.11 WiFi网络或ad-hoc连接,或者红外连接)访问;以及/或者可以通过有线或无线广域网(例如蜂窝网络或因特网)访问。此外,这些技术可以与以下存储设备106中的两个或更多个一起使用:独立地操作的存储设备(例如可以通过软件处理独立访问的存储设备106);松散地互操作的存储设备(例如独立操作但是相互通知并且可以与共享存储集合102的其他存储设备106进行通信的存储设备106);或者紧密地互操作的存储设备(例如将几个存储设备106作为存储系统的各个组件进行管理的廉价盘冗余阵列(RAID)控制器)。作为该第一方面的第四种变型,这些技术的某些部分或全部可以被实施在计算环境内的一个或更多组件中,比如存储在可以访问存储设备106的计算机或设备的易失性或非易失性存储器中的软件指令集合(例如操作系统处理或硬件驱动程序);由被配置成与存储设备106接口的存储系统实施(例如RAID控制器);或者被实施在存储集合102的各个对应的存储设备106中。
作为该第一方面的第五种变型,可以使用许多类型的清洁技术来清洁区段102内的数据集合104。作为第一个例子并且如图1的示例性情形100中所示,存储集合102可以(在相同的存储设备106和/或不同的存储设备106上)存储数据集合104的完全相同的拷贝。在这种变型中,镜像清洁技术可以被用来清洁数据集合104的拷贝,这是通过将其与数据集合104的另一份拷贝进行比较以便检测及校正不一致122而实现的(例如对于与存储在存储集合102的第二区段402中的镜像数据集合相对应的区段402的各个对应的数据集合104,把该数据集合104与镜像数据集合同步)。作为第二个例子并且如图2的示例性情形200中所示,存储集合102可以(在相同的存储设备106和/或不同的存储设备106上)存储对应的数据集合104的验证器202(比如校验和或散列码),可以将其与数据集合104的内容(并且可能与存储集合102中的其他数据集合104)进行比较以便检测不一致122。许多类型的验证器都可以被包括在这样的情形中。举例来说,可以对于数据集合104高效地计算简单的验证器202(比如奇偶校验位),并且可以导致快速地检测数据集合104中的不一致122的存在或缺失。可替换地,可以利用复杂的验证器202从而给出附加的特征,比如更高的可靠性、更多细节(例如表明数据集合104的不一致部分)和/或纠错能力。在这些变型中,可以使用验证器清洁技术来清洁数据集合104,这是通过对数据集合104的验证器进行验证以便识别并且可能校正不一致122而实现的。作为第三个例子,可以简单地通过检查内容来清洁数据集合104,比如早前不存在的数据集合104的破坏。当检测到不一致122时,可以利用重建技术来修复遭到破坏的数据和/或挽救数据集合104中的剩余数据。本领域技术人员可以识别出可以在其中使用这里给出的技术的情形的许多类型和变型。
D2、区段描述符结构变型
在这些技术的各个实施例之间可能有所不同的第二方面涉及区段描述符404的性质。作为该第二方面的第一种变型,可以按照许多方式把存储集合102分配成在区段描述符404内标识出的各个区段402。作为该第一种变型的第一个例子,通过选择区段尺寸可以影响这些技术的许多方面。举例来说,(特别鉴于图3中所示的示例性技术)可以认识到,跟踪存储集合102中的每一个位置108的肮脏或清洁状态可能导致存储集合102的容量的大量损失(可能多达50%),并且实际上可能不会显著改进清洁处理的持续时间,这是因为扫描整个存储集合102以读取对应于每一个比特的肮脏和清洁比特的持续时间可能与扫描整个存储集合102以检测不一致122的持续时间一样长。还可以认识到,对于存储集合102的非常大的部分跟踪清洁或肮脏状态(比如对于每一个卷、每一个分区或者每一个存储设备106存储单个“清洁”或“肮脏”标记406)可能不会令人满意地减轻所述恢复的高度长时间的性质,这是因为对于较大的卷或存储设备106中的单个位置206的写入可能导致清洁416整个卷或存储设备106。鉴于这些考虑因素可以认识到,对于区段尺寸的选择可能会显著地影响这里给出的技术的性能。但是对于区段尺寸可能存在一个可接受选项范围,其中的每一种选项都可以给出一些折中。举例来说,选择较大的区段尺寸可以允许在更加粗糙的粒度水平下跟踪“肮脏”和“清洁”区段,从而减少了用于跟踪待定写入110的存储集合102的容量消耗,并且还降低了更新区段描述符404以便把区段402标记为清洁或肮脏的频率,但是也可能在故障118之后引起更长的清洁416,这是因为把区段402标记为406肮脏会导致清洁416更大的区段402。相反,选择较小的区段尺寸可以导致以更加精细的粒度跟踪待定写入110,从而由于对将要清洁的数据集合104的更加受限和精确的指定而允许在故障118之后进行相对快速的清洁416,但是可能导致存储集合102的更大容量消耗(这是因为区段描述符404包含对应于更多区段402的信息)以及/或者存储集合102的例行操作中的更严重的性能惩罚(这是因为针对各个位置108的写入110的集合很可能与分别涵盖存储集合的更小部分的更多区段402相关联)。
鉴于这些考虑因素,可以使用许多技术来选择或指定存储集合102的各个区段402的(多个)区段尺寸。举例来说,可以对于特定存储集合102或存储设备106固定地定义区段尺寸。还可以对于不同的存储设备106选择不同的区段尺寸(例如对于用在性能特性不会显著影响计算环境的情况(比如归档)中的存储设备106,可以使用更加显著地降低性能但是提供从故障118的更快清洁416和恢复的较小区段尺寸),并且/或者可以对于不同的存储集合102选择不同的区段尺寸(例如可以利用较小的区段尺寸来跟踪可访问性对其具有高价值的数据,从而允许从故障118的更快清洁416和恢复),并且甚至可以对于同一数据集合102中的不同区段402使用不同的区段尺寸。还可以基于存储设备106和/或存储集合102的性能特性以及/或者基于用户优选项来调节区段尺寸。可替换地或附加地,可以允许用户选择区段尺寸;例如一个实施例可以为用户给出针对区段尺寸的几个选项,并且可以鉴于每一个区段尺寸预测在从故障118恢复的过程中所涉及的恢复时间。作为另一种替换方案,用户可以指定最大可接受恢复时间段,并且这些技术的一个实施例可以选择可能允许在所述最大可接受恢复时间段内从故障118恢复的区段尺寸。
作为该第二方面的第二种变型,可以按照许多方式构造区段描述符404,比如构造成数组、链表、表、数据库或位图。各种数据结构可以给出特定的优点。作为一个这样的例子,对于包括利用具有单一维度(例如作为地址的单一数值序列)的寻址系统存储的地址的存储集合102,区段描述符404可以被实施为肮脏区段数组,其包括顺序地对应于存储集合102的各个区段402的数组条目的集合,并且可以简单地通过对所述肮脏区段数组的数组条目进行寻址来把区段402标记为肮脏或清洁,从而实现了用以标记406任何区段402的O(1)访问时间。可替换地,可以把区段描述符404实施为顺序日志,其中每一次标记406是在先前提交的标记406之后顺次写入的,而不管所标记的数据集合104在存储集合102中的位置108如何。这样的区段描述符404可能导致对于特定区段402的标记406的较慢读取访问(这是因为识别出对应于某一条目的当前标记406引起扫描日志的一大部分并且可能引起扫描整个日志以便找到条目),但是可以实现对于区段描述符404的顺序写入的另外的性能优点。此外,区段描述符404的内容的语义可以按照不同方式包含信息。举例来说,区段描述符404可以通过特别标记406代表某一区段402的记录或比特来把所述区段402标记为“清洁”,或者可以通过逐出对应于已被清洁的区段402的区段描述符404记录来实现这一目的。这些变型代表关于在区段描述符404中不具有记录的区段402已被标记为清洁(可能最近被标记)还是简单地既没有被标记为肮脏也没有被标记为清洁(例如在很长一段时间内都没有被写入104)的语义差异。
作为该第二方面的第三种变型,区段描述符404可以通过多种方式表明区段402在存储集合102内的位置108。图8给出了一种示例性情形800的图示,其特征在于用于指定存储集合102内的由对应的区段402代表的各个位置106的一些不同技术。在该示例性情形800中,存储设备106(比如硬盘驱动器)被配置成存储包括存储集合102的至少一部分的数据。存储设备106被配置成把数据存储在对应的物理地址802处,并且包含用以将所述地址翻译成存储介质(例如盘片、扇区和轨道)上的物理位置的硬件。存储在存储设备106上的数据还可以根据标准化格式来存储;例如存储在物理介质上的数据可以开始于分区表,其指定一个或更多分区804的位置和描述,其中每一个分区包括一个或更多逻辑卷806(例如在计算机的操作环境中给出的驱动器)。存储集合102可以被存储在一个或更多逻辑卷806内,并且可以把各个数据集合104分派在逻辑卷806中或者分派在几个逻辑卷806之上。相应地,区段描述符404可以按照多种方式标识出对应于存储集合102内的各个位置108的各个区段402。举例来说,区段描述符404可以利用物理区段参考方案,其标识出对应的区段402在存储集合102的各个存储设备106上的物理位置。作为第一个这样的例子,区段描述符404可以被实施为第一区段表808,其包括表明每一个区段402所代表的存储设备106的存储介质上的物理位置106的范围的各条记录。作为第二个这样的例子,区段描述符404可以被实施为第二区段表810,其包括对于对应的区段402表明每一个区段402在其中开始的分区804和分区804内的偏移量的各条记录。区段描述符404还可以存储及表示一个或更多区段402的(多个)区段尺寸(例如作为区段记录的一部分或者作为存储集合102的单独的描述符)。作为第三个例子,区段描述符404可以被实施为区段位图812,其中可以把分区804分配成具有特定区段尺寸的一系列区段402,并且所述位图可以存储区段402的“肮脏”或“清洁”状态的一比特指示符。可替换地,区段描述符404可以利用逻辑区段参考方案,其标识出对应的区段402在存储集合102中的逻辑数据设置内的逻辑位置。作为一个这样的例子,区段描述符404可以被实施为第三区段表814,其标识出每一个区段402在该处开始的每一个逻辑卷806内的逻辑位置。可以认识到,更加紧密地利用存储设备106的存储介质上的物理位置106标识的寻址技术对于存储设备106可能涉及很少的计算但是对于在逻辑上访问各个区段402的处理则可能涉及更多的计算,反之亦然。
作为该第二方面的第四种变型,这些技术的实施例可以被配置成把区段描述符404存储在存储设备106上的不同位置处。作为该第四种变型的第一个例子,区段描述符404可以被存储在存储设备404上的特定位置处(例如对存储集合102的各个数据集合104进行存储的分区804的顶部,或者存储数据集合104的分区804之外的已定义位置)。作为该第四种变型的第二个例子,区段描述符404可以被存储在第一存储设备106上,以便跟踪对于第二存储设备10的各个区段402的待定写入110。
作为该第二实例的第五种变型,这些技术的一个实施例可以被配置成对于存储集合102存储两个或更多区段描述符404。作为该第五种变型的第一个例子,可以在相同的和/或不同的存储设备106上存储代表存储集合102的区段402的相同集合的区段描述符404的两份或更多份完全相同的拷贝。通过存储完全相同的拷贝可以改进存储集合102的容错性(例如当存储设备106发生不可恢复的故障时,当存储设备106的存储区段描述符404的一部分发生故障时,或者当区段描述符404内的数据被破坏时,比如在对区段描述符404施行写入110时发生故障118),可以通过使用区段描述符404的另一份拷贝来施行从故障118恢复。可以认识到,虽然区段描述符404的故障不太可能是灾难性的(这是因为可以作为备份措施对存储集合102施行完全清洁416),但是存储区段描述符404的第二份拷贝以便在第一份拷贝受到破坏或者不可用的情况下加速恢复的做法仍然可能是有利的。此外,还可能有利的是把区段描述符404的完全相同的拷贝存储在多个存储设备106上,以及/或者存储在同一存储设备106的不同区域内(例如当存储设备106的存储区段描述符404的第一份拷贝的部分(比如文件系统的第一物理扇区或第一部分)受到损坏时,仍然可能获取并使用存储在存储设备106的不同部分中的区段描述符404的第二份完全相同的拷贝)。
作为该第五种变型的第二个例子,可以把对应于区段402的特定集合的区段描述符404的多份拷贝存储在一个或更多存储设备106上,但是所述拷贝并不总是完全相同的,而是可以对各个区段描述符404进行顺序地更新以便反映出存储集合102在不同时间的清洁和肮脏状态。例如如果在更新区段描述符404的拷贝时发生故障118从而将区段描述符404置于不一致或受破坏状态,则该顺序更新可能是有利的,这是因为另一份拷贝可用于清洁416和恢复。作为对应于该第二个例子的第一种情形,可以在存储设备104上保留全部两者代表区段402的相同集合的区段描述符404的两份拷贝;但是为了更新区段描述符404,第一更新可以通过覆写区段描述符404的一份拷贝而发生,并且随后的更新可以通过覆写区段描述符404的另一份拷贝而发生。此外,当这些技术的一个实施例覆写区段描述符404时,所述实施例还可以写入对应于所述区段描述符404的验证器202(例如校验和)和序列指示符(例如递增的整数或者覆写时间)。在故障118发生后,所述实施例可以检查所有可用的区段描述符404,并且可以选择具有最高序列指示符(例如最高递增整数或者最近写入时间)并且同时根据其验证器202是有效的区段描述符404以用于清洁。可以认识到,利用区段集合的略微陈旧的版本来施行清洁416可能不会导致对于具有不一致118的区段402的清洁失败(例如假阴性),这是因为只有在区段402的标记406以具有最高序列指示符和有效验证器202的完全写入的区段描述符404的形式被完全提交到存储集合102之后才会开始对于区段402的写入110,因此在写入区段描述符406时发生的故障118不会导致记录待定写入110的失败。相反,使用陈旧的区段描述符402则可能导致假阳性(例如在写入区段描述符404的过程中发生的故障118可能导致错失把先前是肮脏的区段404标记404为清洁,并且所述区段404可能会由于在陈旧的区段描述符404中找到的标记406而在恢复期间被错误地作为肮脏区段来对待),但是这一差错仅仅会导致涉及清洁416已知是清洁的区段404的微小地延长的恢复。
可替换地或附加地,可以在存储集合102的每一个存储设备106上冗余地存储对应于区段402的集合的区段描述符404的两份或更多份拷贝。为了更新对应于存储集合102的区段描述符404,一个实施例可以在所有存储设备106上并行地发起对于区段描述符404的覆写。此外,每一个存储设备106可以与区段描述符404一起包括验证器202和序列指示符,以防当一个或更多存储设备106正在更新区段描述符106时发生故障118。存储集合102的一个或更多存储设备106从故障118恢复可以涉及首先检查所有可用的区段描述符106,以便在通过对应的验证器202验证的所有拷贝当中识别出具有最高序列指示符的拷贝。实际上可能有利的是把存储集合102配置成在每一个存储设备106上存储区段描述符404的两份拷贝;例如如果在更新所有存储设备106上的区段描述符404时发生故障118,则可以使用任何存储设备106上的略微陈旧的拷贝。可替换地,可能类似地有利的是并不同时更新所有的区段描述符404,而是对存储在存储设备106的第一子集上的拷贝施行区段描述符404的第一更新,并且对存储在存储设备106的第二子集上的拷贝施行区段描述符404的后继更新。
作为该第五种变型的第三个例子,存储集合102可以包括两个或更多区段描述符404,其分别记录对于存储集合102的不同区段402的更新。作为第一个这样的例子,第一区段描述符404可以记录对应于存储集合102的存储在第一存储设备104上的各个区段402的肮脏和清洁区段信息,并且第二区段描述符404可以记录对应于存储集合102的存储在第二存储设备104上的各个区段402的肮脏和清洁区段信息。作为第二个这样的例子,在把存储集合102分配成各个区段402之后,这些技术的一个实施例可以生成两个或更多区段描述符404,其分别存储对应于区段集合(其包括区段402的子集)的“肮脏”和“清洁”信息(而不管这些区段402在存储集合102的各个存储设备106当中的物理位置如何),所述区段描述符404可以被生成并存储在一个或更多存储设备106上。可以例如根据对应的数据集合104的特性来选择各个区段402到区段集合中的分配(例如第一区段集合可以包括存储更加有价值或敏感的数据的区段402,而第二区段集合则可以包括存储价值较低的数据的区段402)。可替换地或附加地,可以明确地(例如通过生成分别代表区段402的指定集合的两个或更多独立的区段描述符404)或者隐含地(例如通过把用于区段描述符404的存储空间分布在两个或更多空间分配上,比如两个或更多存储设备106)实现各个区段在两个或更多区段描述符404上的这种分布。此外,在某些情形中,可能希望仅仅对于存储集合102的区段402的子集跟踪肮脏和清洁信息;例如区段402包括可丢弃的数据,比如高速缓存或索引,如果其受到破坏的话可以从存储集合102的其他数据重新生成,因此完全可以不进行跟踪。
作为该第二方面的第六种变型,可以按照与存储集合102的同步技术兼容的方式存储(多个)区段描述符404,这样可以对于区段描述符404提供许多特征和优点,比如通过访问不同存储设备106的区段描述符404的任何完全相同的拷贝的能力提高了性能,以及/或者与存储集合102类似的容错性(例如如果存储集合102实施了容错存储技术,比如在存储设备容错性内从存储设备106的故障恢复的能力,则可以利用相同的容错存储技术来存储区段描述符404)。可替换地,可以按照实现单独的一组技术的方式存储区段描述符404;例如可以把对应的区段描述符404与该区段描述符404的区段描述符验证器存储在一起,并且当区段402在区段描述符404中被标记为“清洁”或“肮脏”时对其进行更新,并因此可以允许验证区段描述符404的完整性。本领域技术人员能够设想到可以根据这里给出的技术生成并利用的许多类型和格式的区段描述符404。
D3、区段描述符使用变型
在这些技术的各个实施例之间可以有所不同的第三方面涉及使用区段描述符404把存储集合102的各个区段402标记为清洁或肮脏。作为该第三方面的第一种变型,对于区段描述符404的使用可以被设计成便于管理区段描述符404的容量。在某些类型的区段描述符404中,容量不可以随着区段402被标记而改变,比如图8的示例性情形800中的区段位图814;但是在其他情形中,对于区段402的标记406可能会影响区段描述符404的容量,比如图8的示例性情形800中所描绘的区段表。举例来说,如果区段描述符404存储对应的区段402的记录,则区段描述符404可以简单地通过逐出所述记录而把区段402标记为“清洁”。可替换地,区段描述符404可以继续存储对应于被标记为“清洁”的区段402的记录,并且可以在后来的某一时间逐出对应于“清洁”区段402的记录(例如在过去了指定时间段而没有针对区段402的另一次写入110之后,或者当区段描述符404的容量被用尽时)。作为该第三方面的第二个例子,可以静态地(例如固定尺寸的区段描述符404)或动态地(例如最初为其分派区段描述符空间的可重定尺寸的区段描述符404,但是当用对应于各个区段402的记录填充区段描述符404并且一起用尽区段描述符404的容量时可以对其进行扩充)分派区段描述符404的容量。
作为该第三方面的第二种变型,对于区段描述符404的使用可以被选择成减少对于区段描述符404的写入110的次数和频率。举例来说,由于区段描述符404被存储在一个或更多存储设备106的物理介质上,因此更新区段描述符404可能除了对于数据集合104的位置108的查找和写入110之外还增加对于区段描述符404的查找和写入110。因此,如果区段描述符404被迅速并且自动更新以反映对于各个区段402的“肮脏”和“清洁”标记406的改变,则将区段描述符404包括在内的话可能显著降低存储设备106和存储集合102的性能,并且可能把每一次访问的成本增加到三倍。如果这些技术的一个实施例访问区段描述符404以读取对应区段402的“清洁”和“肮脏”状态(这例如是为了在把区段402标记406为“肮脏”之前首先确定其是否被标记为“清洁”),则可能发生进一步的性能降低。因此,可能希望减少对于区段描述符404的访问。
作为该第二种变型的第一个例子,可以认识到将区段402标记406为“清洁”和“肮脏”的语义在某种程度上是不对称的。举例来说,推迟针对把区段描述符404标记为“肮脏”的访问可能是不可接受的,因为如果在所述推迟期间发生了故障则这样的延迟可能会把区段402错误地列为清洁(从而给出了假阴性情况,其中由于故障118期间的不完整写入110而可能是不一致的区段402被标记为清洁,并因此在从故障118的恢复期间被从清洁416当中排除)。但是在写入完成之后推迟把区段402标记406为“清洁”则可能是可以接受的。这种情形简单地导致假阳性结果,其中在故障118发生时已知是清洁(例如没有待定写入110)的区段402在恢复期间被包括在清洁416当中——但是这一扫描可能仅仅微小地增加清洁416的持续时间(特别在区段尺寸较小的情况下),并且不会损害存储集合102的完整性。此外,在写入110完成之后迅速将区段402标记为“清洁”的一个实施例可能不久之后就接收到针对同一区段402中的数据集合104进行写入110的另一项请求(例如顺次跟随在后的数据集合104或者对同一数据集合104的覆写),并且可能必须将该区段402重新标记为“肮脏”。通过在简短的时间段内推迟把区段402标记406为“清洁”可以避免每一次都涉及对区段描述符404的访问的全部两次标记406,而即将发生对于区段402的第二项写入110的可能性可能会升高。
鉴于这些考虑因素,这些技术的一个实施例可以被配置成在对于存储在区段402中的数据集合104的写入110完成之后,推迟把区段402标记406为“清洁”。可以按照多种方式实现把“清洁”标记406推迟提交到区段描述符404的实施方式。作为第一个这样的例子,可以通过为易失性存储器提供写入缓冲区来实施该推迟,其只存储“清洁”标记406并且(周期性地或者在收到请求时)将所有这样的写入作为一个批量提交。举例来说,所述实施例可以被配置成在完成把数据集合106存储在区段402内的位置108处之后,将该区段402标识为清洁;并且可以在接收到针对在区段描述符404中把已清洁区段402标记为清洁的请求之后,在存储设备106上的区段描述符404中把已清洁区段402标记为清洁。该请求可以例如包括处理(其中包括设备的操作系统)针对刷新标记406的具体请求,或者可以通过多种标准触发,比如已清洁持续时间标准(例如周期性地提交各个区段402的标记406)或者涉及区段描述符404的肮脏区段容量的区段描述符容量标准(例如当区段描述符404达到特定容量时提交各个区段402的标记406,比如指定数目的“清洁”标记406或者区段描述符404的可用总容量的阈值,其可以提示逐出“清洁”记录406)。作为第二个这样的例子,所述推迟可以涉及将“清洁”标记406保持简短的持续时间,并且只有在简短的持续时间内没有请求对于同一区段402的后续写入110之后才把所述“清洁”标记406提交到区段描述符404。因此,一个实施例可以在接收到针对区段402中的位置108进行写入110的请求之后首先确定该区段402是否已经在区段描述符404中被标记为清洁,并且随后只有在确定该区段492当前在区段描述符404中被标记为清洁的情况下才将该区段402标记为肮脏。
作为该第二种变型的第三个例子,这些技术的一个实施例可以通过实施区段描述符404的易失性存储器表示来减少对于区段描述符404的访问次数。举例来说,除了把对应的区段402的标记406存储在存储设备106的物理介质上之外,操作在设备上的这些技术的一个实施例还可以把所述标记406存储在所述设备的易失性存储器中。使用该表示可以促进推迟写入“清洁”标记406的各个批量,并且促进确定要被标记为“清洁”的区段406当前在介质上区段描述符404中被标记为“清洁”还是“肮脏”。因此,所述表示可以表明,除了在存储设备106上的区段描述符404中和在易失性存储器表示中被标记为清洁的区段402以及在存储设备106上的区段描述符404中和在易失性存储器表示中被标记为肮脏的区段402之外,一些区段402可能在区段描述符404中被标记为肮脏但是可能在易失性存储器表示中被(暂时)标记为清洁,并且这样的清洁标记406可以在后来被提交到介质上区段描述符404。
图9给出了一种示例性情形900的图示,其特征在于实施并使用区段描述符404的易失性存储器表示902。在该示例性情形900中,两个存储设备106被配置成通过对存储集合102的各个数据集合104的完全相同的拷贝进行存储来对存储集合102进行镜像(例如按照RAID 1方案的方式),并且为了克服由于各个存储设备106的不完美同步而导致的潜在问题,可以在存储设备902(例如对存储集合102进行存储的其中一个或全部两个存储设备106,以及/或者另一个存储设备106)上生成区段描述符404,并且根据这里给出的技术利用所述区段描述符404来跟踪对于存储集合102的各个区段402的待定写入110。但是此外还可以在易失性存储器904中生成区段描述符404的表示906,其可以与存储在存储设备902上的区段描述符404互操作。举例来说,在第一时间点908,可以令针对分配在存储集合102的第二和第四区段402内的数据集合104的写入110待定。在接收到针对写入110的请求之后,这些技术的一个实施例可以在存储在各个存储设备902上的区段描述符404中以及在易失性存储器904内的表示906中把所述区段402标记为肮脏,并且还可以提示将所述区段402标记为肮脏。但是在第二时间点910,当针对第四区段402的写入110在全部两个存储设备104上都完成时,第四区段402可能在易失性存储器904内的表示906中被标记为清洁,但是可能在存储设备902上的区段描述符404中还没有被标记为清洁。类似地,在第三时间点912,针对第二区段402的写入110已经在全部两个存储设备104上都完成,并且第二区段402可能在易失性存储器904内的表示906中被标记为清洁,但是直到第四时间点914才在存储设备902上的区段描述符404中被标记为清洁,此时全部两个区段402可以在存储设备902上的区段描述符404中一起被标记为清洁。对于易失性存储器904中的表示906的这种使用可以给出几个性能改进(例如与访问存储在存储设备902上的区段描述符404的确定相比,其允许更加快速地确定哪些区段402被标记为清洁或肮脏;允许把清洁标记406批量提交到存储在存储设备902上的区段描述符404;以及减少对于存储设备902的访问次数,比如如果在第三时间点912接收到针对第二区段420的附加写入110,则可以在易失性存储器904内的表示906中将该区段402简单地标记为肮脏,而不是在存储于存储设备902上的区段描述符404中将区段402标记406为清洁并且随后再次标记为肮脏)。
图10给出了可以由这些技术的一个实施例利用来按照确定性方式更新区段描述符404的示例性状态图1000的图示。最初,这些技术的一个实施例可以处于清洁状态1002,其中在区段描述符404中将清洁区段402标记为清洁,直到接收到针对在该区段402内的位置108处施行对于数据集合102的写入110的请求为止,并且这些技术的一个实施例可以在把该区段402标记406为肮脏的同时(例如在对存储于存储设备106上的区段描述符404进行写入的同时)过渡到标记状态1004。当标记406完成时,所述实施例可以过渡到肮脏状态1004,其中所述区段402已被标记为肮脏,并且针对该区段402内的附加位置进行写入110的另外的请求可以导致所述实施例保留在该肮脏状态1004。当接收到刷新肮脏区段402的请求时,关于存储设备106是否准备好进行刷新做出确定(例如如果存储设备106当前正在施行存储集合的同步或者如果存储设备106暂时不可访问,则针对刷新肮脏写入的请求被保持,直到存储设备106准备好为止)。如果存储设备106准备好进行刷新,则所述实施例可以在开始刷新操作的同时进入刷新状态1008。如果刷新操作在没有接收到针对区段104进行写入110的另一项请求的情况下完成,则所述实施例可以进入已标记为清洁状态1010,其中区段102已被刷新(例如针对区段402的写入110已经完成),但是该区段402在存储设备106上的区段描述符404中仍然被标记为肮脏(但是在设备的存储器904内的易失性存储器表示906中可能被标记为清洁)。最后,当接收到在区段描述符404中把已清洁区段402标记为清洁的请求时,所述实施例可以开始这一标记406,并且在完成该标记406之后可以返回清洁状态1002。但是如果在刷新状态1008或已标记为清洁状态1010期间接收到针对区段402进行写入110的任何请求,则所述实施例可以返回肮脏状态1006。按照这种方式,这些技术的一个实施例可以按照分状态(stateful)、确定性并且相对简单的方式更新区段描述符404。本领域技术人员在对于区段描述符402的更新方面可以设想到与这里给出的技术相容的许多变型。
D4、恢复变型
在这些技术的各个实施例之间可能有所不同的第四方面涉及在发生故障118时使用区段描述符404来施行存储集合102的恢复(包括清洁416)的方式。作为第一种变型,所述恢复可以涉及用于清洁416存储集合102的许多类型的技术以便检测并去除由于故障118导致的存储集合102中的不一致122。作为第一个例子,对于被存储为预期完全相同的两份或更多份拷贝的存储集合102的数据集合104,清洁416可以涉及把各份拷贝进行比较以便检测不一致122(例如对于实际内容的逐比特比较;内容的逻辑比较,比如即使在无实质结构差异的情况下也检测出各个数据集合104之间的等效,比如包括相同的文件集合但是利用不同的逐比特结构表示文件系统的两个文件系统;或者比较各个数据集合104的印记,比如比较针对每一份拷贝的内容计算的散列码)。作为第二个例子,清洁416可以涉及针对代表数据集合104的验证器202(比如校验和)验证一个或更多数据集合104,以便验证各个数据集合104的内容的一致性。作为第三个例子,清洁416可以简单地涉及检查数据集合104的错误,比如验证某种标准化类型的数据集合104的二进制内容代表根据正式定义的有效结构。此外,清洁416可以允许简单地检测不一致112的存在;可以允许识别不一致122在至少一个所比较的数据集合104之内和/或其间的位置(例如不仅检测到错误存在,而且检测到数据集合104的特定部分不一致或者与预期不同);并且/或者可以允许校正不一致122(例如Hamming码之类的纠错校验和,其允许确定正确的数据,或者被应用于二进制对象的修复技术,其允许校正格式化不一致并且可以复原或减少数据丢失)。可以对于存储集合102内的不同数据集合104应用不同类型的清洁416(例如可以按照与更加复杂但精密的纠错技术兼容的方式存储价值更高的数据集合102,而价值较低的数据集合102则可以按照简单且相对不复杂的方式来存储)。此外,所调用的清洁416的类型可以取决于对应的数据集合104的可用拷贝的数目,所检测到的故障118的类型,存储设备106的类型(例如实施在各个设备上的RAID方案),以及用户的兴趣(例如用户可以被允许在复杂度、可靠性和清洁416的持续时间方面有所不同的各种清洁选项当中进行选择)。在某些情形中,可以实行多种类型的清洁416(例如涉及快速识别出容易检测的不一致122并且迅速复原对于数据集合102的访问的快速清洁416,其后是验证存储集合102的完整性以便解决更加难以校正和修复的不一致122的复杂清洁416)。
作为该第三方面的第二种变型,可以按照特定顺序施行存储集合102的恢复。举例来说,存储集合102可能包括存储在许多存储设备上的许多类型的数据集合104。在某些情形中,自然恢复(naive recovery)可以按照任意顺序对存储集合102应用清洁416,而有序恢复则可以首先对存储集合102的包括高价值或利用率更高的数据集合104的一些部分应用清洁416(例如使用中的数据),随后才对存储集合102的包括价值较低或请求频率较低的数据集合104的其他部分应用清洁416(例如归档数据)。作为一个这样的例子,可以把存储集合102的对应区段402分配成一个或更多区段集合,其中每一个区段集合具有区段描述符404,并且所述恢复可以涉及首先清洁416由第一区段描述符404代表的第一区段集合当中的各个区段402,并且随后清洁由第二区段描述符404代表的第二区段集合当中的各个区段402。
作为该第三方面的第三种变型,所述恢复可以包括:在基于区段描述符404发起清洁416之前,验证区段描述符404的完整性(例如根据与区段描述符404一起存储的验证器202)。如果发现区段描述符404的一部分不可验证(例如由于在对区段描述符404的一部分进行写入时发生的故障118而导致的不一致或破坏),则所述恢复可以涉及使用区段描述符404的可验证部分,并且对于在区段描述符404的受破坏部分中所代表的各个区段402施行完全清洁416。可替换地,所述恢复可以涉及找到并使用区段描述符404的另一份拷贝(例如存储在同一存储设备106上的其他位置处或者存储在存储集合102的另一个存储设备106上的区段描述符404的完全相同或者略微陈旧但是可验证的拷贝)。实际上,如果发现两个或更多区段描述符404分别受到部分破坏,则所述恢复可以通过利用每一个区段描述符404的有效部分完全实现。可替换地,如果无法获得区段描述符404的可验证拷贝,则所述恢复可以发起对于存储集合102的完全清洁(例如对于整个存储集合102的完全扫描和重新同步)。按照上述方式,这些技术的一个实施例可以被配置成从存储集合102的不同类型的故障118恢复。根据这里给出的技术,本领域技术人员可以设想到从存储集合102的故障118恢复的许多方式。
E、计算环境
图11给出了可以在其中实施这里给出的技术的计算设备1102内的示例性计算环境的图示。示例性的计算设备包括(但不限于)个人计算机、服务器计算机、手持式或膝上型设备、移动设备(比如移动电话、个人数字助理(PDA)、媒体播放器等等)、多处理器系统、消费电子装置、小型计算机、大型计算机以及包括任何前述系统或设备的分布式计算环境。
图11示出了包括被配置成实施这里提供的一个或更多实施例的计算设备1102的系统1100的一个例子。在一种配置中,计算设备1102包括至少一个处理器1106和至少一个存储器组件1108。取决于计算设备的确切配置和类型,存储器组件1108可以是易失性的(比如RAM)、非易失性的(比如ROM、闪存等等)或者中间或混合类型的存储器组件。这种配置在图11中由虚线1104示出。
在一些实施例中,设备1102可以包括附加的特征和/或功能。举例来说,设备1102可以包括一个或更多附加的存储组件1110,其中包括(但不限于)硬盘驱动器、固态存储设备以及/或者其他可移除或不可移除磁性或光学介质。在一个实施例中,实施这里提供的一个或更多实施例的计算机可读和处理器可执行指令被存储在存储组件1110中。存储组件1110还可以存储其他数据对象,比如操作系统的组件、包括一个或更多应用的可执行二进制、编程库(例如应用编程接口(API))、媒体对象以及文档。计算机可读指令可以被加载到存储器组件1108中以便由处理器1106执行。
计算设备1102还可以包括一个或更多通信组件1116,其允许计算设备1102与其他设备进行通信。所述一个或更多通信组件1116可以包括(例如)调制解调器、网络接口卡(NIC)、射频发送器/接收器、红外端口以及通用串行总线(USB)USB连接。这样的通信组件1116可以包括有线连接(通过物理线绳、线缆或连线连接到网络)或无线连接(比如通过可见光、红外或者一个或更多射频与联网设备无线通信)。
计算设备1102可以包括一个或更多输入组件1114,比如键盘、鼠标、笔、语音输入设备、触摸输入设备、红外摄影机或视频输入设备,以及/或者一个或更多输出组件1112,比如一个或更多显示器、扬声器和打印机。输入组件1114和/或输出组件1112可以通过有线连接、无线连接或其任意组合连接到计算设备1102。在一个实施例中,来自另一个计算设备的输入组件1114或输出组件1112可以被用作计算设备1102的输入组件1114和/或输出组件1112。
计算设备1102的各个组件可以通过各种互连(比如总线)连接在一起。这样的互连可以包括外围组件互连(PCI)(比如PCI Express)、通用串行总线(USB)、火线(IEEE 1394)、光学总线结构等等。在另一个实施例中,计算设备1102的各个组件可以通过网络互连。举例来说,存储器组件1108可以包括位于通过网络互连的不同物理位置的多个物理存储器单元。
本领域技术人员将认识到,被利用来存储计算机可读指令的存储设备可以分布在网络上。举例来说,可通过网络1118访问的计算设备1120可以存储用以实施这里所提供的一个或更多实施例的计算机可读指令。计算设备1102可以访问计算设备1120,并且下载所述计算机可读指令的一部分或全部以便执行。可替换地,计算设备1102可以按照需要下载一部分计算机可读指令,或者一些指令可以在计算设备1102处执行,并且一些指令可以在计算设备1120处执行。
F、术语的使用
在本申请中使用的术语“组件”、“模块”、“系统”、“接口”等等通常意图指代与计算机有关的实体,或者是硬件、硬件与软件的组合、软件,或者是执行中的软件。举例来说,组件可以是(但不限于)运行在处理器上的处理、处理器、对象、可执行程序、执行线程、程序和/或计算机。作为说明,运行在控制器上的应用和控制器都可以是组件。一个或更多组件可以驻留在处理和/或执行线程内,并且组件可以位于一台计算机上和/或分布在两台或更多台计算机之间。
此外,所要求保护的主题内容可以被实施为一种利用标准编程和/或工程技术来产生软件、固件、硬件或其任意组合以便控制计算机实施所公开的主题内容的方法、设备、或者制造产品。这里使用的术语“制造产品”意图包含可以从任何计算机可读设备、载体或介质访问的计算机程序。当然,本领域技术人员将认识到,在不背离所要求保护的主题内容的范围或精神的情况下,本领域技术人员可以对这种配置做出许多修改。
这里提供了实施例的各种操作。在一个实施例中,所描述的其中一项或更多项操作可以构成存储在一个或更多计算机可读介质上的计算机可读指令,在由计算设备执行时,所述计算机可读指令将使得所述计算设备施行所描述的操作。描述其中一部分或全部操作的顺序不应被理解为意味着这些操作必须依赖于顺序。受益于本说明书,本领域技术人员将认识到替换的排序。此外还应当理解的是,不一定所有操作都必须存在于这里提供的每一个实施例中。
虽然用特定于结构特征和/或方法步骤的语言描述了本发明的主题内容,但是应当理解的是,在所附权利要求中限定的主题内容不必须受限于前面描述的具体特征或步骤。相反,前面描述的具体特征和步骤是作为实施权利要求的示例性形式而公开的。此外,这里使用的“示例性”一词意味着充当一个实例、事例或说明。在这里被描述为“示例性”的任何方面或设计不必须被理解为比其他方面或设计有利。相反,使用“示例性”一词是意图以具体的方式呈现概念。本申请中所使用的术语“或者”意味着包含性的“或者”而不是排他性的“或者”。也就是说,除非另行指明或者可以从上下文明显看出,否则“X采用A或B”应当意味着任何自然的包含性排列。也就是说,如果X采用A、X采用B或者X采用A和B两者,则“X采用A或B”在任何前述事例下都得以满足。此外,除非另行指明或者从上下文中可以明显看出是针对单数形式,否则用在本申请和所附权利要求书中的“一”和“一个”通常可以被理解为意味着“一个或更多个”。
此外,虽然关于一种或更多种实现方式示出并描述了本公开内容,但是基于阅读并理解本说明书和附图,本领域技术人员将会想到等效的更改和修改。本公开内容包括所有这样的修改和更改,并且仅由所附权利要求书的范围限制。特别关于由前面描述的组件(例如元件、资源等等)所施行的各项功能,被用来描述这样的组件的术语意图对应于(除非另行表明)施行所述组件的指定功能的任何组件(例如功能上等效),尽管其在结构上不等效于在本公开内容的这里说明的示例性实现方式中施行所述功能的所公开的结构。此外,虽然本公开内容的具体特征可能是关于几种实现方式当中的仅仅一种公开的,但是这样的特征可以与其他实现方式的一项或更多项其他特征组合,正如可能对于任何给定或特定应用所期望且有利的那样。此外,就在详细描述部分或权利要求书中使用的“包含”、“具有”、“带有”等术语或其各种变体而言,这样的术语与术语“包括”类似都意图是包含性的。
Claims (9)
1.一种在具有处理器(712)的计算机(710)上记录由至少一个存储设备(106)提供的存储集合(102)内的待定写入的方法(500),所述方法(500)包括:
在至少一个存储设备(106)上生成(506)区段描述符(404),其根据区段尺寸把存储在所述存储设备(106)上的存储集合(102)分配成至少两个区段(402);
在接收(508)到将要存储在存储集合(102)中的位置(802)处的数据集合(104)之后:
识别(510)出存储集合(102)内的包括所述数据集合(104)的位置(802)的区段(402);
在区段描述符(404)中把所述区段(402)标记(512)为肮脏;以及
发起(514)把数据集合(104)存储在存储集合(102)中的所述位置(802)处;
在把数据集合(104)存储在存储集合(102)中的所述位置(802)处之后,在区段描述符(404)中把所述区段(402)标记(516)为清洁,其中将区段标记为清洁包括:在完成把数据集合存储在所述区段内的位置处之后,将该区段标识为清洁;以及在接收到针对在区段描述符中将已清洁区段标记为清洁的请求之后,在区段描述符中将至少一个已清洁区段标记为清洁。
2.根据权利要求1所述的方法,其中,对应的肮脏区段根据从包括以下各项的区段参考方案集合当中选择的区段参考方案标识存储设备中的对应区段:
标识出存储集合的存储设备上的区段的物理位置的物理区段参考方案;以及
标识出存储集合的逻辑设备上的区段的逻辑位置的逻辑区段参考方案。
3.根据权利要求1所述的方法:其中,
所述存储集合包括由各个区段构成的至少两个区段集合;并且
对应的区段集合包括代表该区段集合的各个区段的至少一个区段描述符。
4.根据权利要求1所述的方法:其中,
所述存储集合包括分别包括更新序列指示符的至少两个区段描述符;并且
所述方法包括在把数据集合存储在存储集合中的位置处之后实施以下操作:
从各个区段描述符当中选择不具有最近的更新序列指示符的陈旧区段描述符;
在所述陈旧区段描述符中把包括所述数据集合的位置的区段标记为已更新;以及
把所述更新序列指示符更新到各个区段描述符当中的最近的更新序列指示符。
5.根据权利要求1所述的方法:其中,
在存储设备上生成区段描述符包括:在所述存储设备上为区段描述符分派区段描述符空间;并且
所述方法包括在用肮脏区段填充区段描述符空间之后扩充所述区段描述符空间。
6.根据权利要求1所述的方法,其中,在至少一个区段描述符中将区段标记为肮脏包括:
确定所述区段在区段描述符中是否被标记为清洁;以及
在确定所述区段在区段描述符中被标记为清洁之后,将该区段标记为肮脏。
7.一种清洁由至少一个存储设备(106)存储的且具有处理器(712)的计算机(710)可以访问的存储集合(102)的方法,所述方法包括:
从至少一个存储设备(106)获取(606)区段描述符(404),其根据区段尺寸把存储在所述存储设备(106)上的存储集合(102)分配成至少两个区段(402);以及
对于在区段描述符(404)中被标记为肮脏的对应区段(402):
发起(610)清洁(416)该区段(402)内的数据集合(104);以及
在完成对于所述区段(402)内的数据集合(104)的清洁(416)之后,在区段描述符(404)中将该区段(402)标记(612)为清洁,其中将区段标记为清洁包括:在完成把数据集合存储在所述区段内的位置处之后,将该区段标识为清洁;以及在接收到针对在区段描述符中将已清洁区段标记为清洁的请求之后,在区段描述符中将至少一个已清洁区段标记为清洁。
8.根据权利要求7所述的方法:其中,
所述存储集合包括分别包括更新序列指示符的至少两个区段描述符;并且
识别出存储集合中的至少一个肮脏区段包括:
从各个区段描述符当中选择具有最近的更新序列指示符的最近的区段描述符;以及
根据所述区段描述符识别出存储集合中的至少一个肮脏区段。
9.根据权利要求7所述的方法:其中,
对应的区段描述符包括所述区段描述符的区段描述符验证器;
识别出肮脏区段包括:验证区段描述符的区段描述符验证器;并且
所述方法包括在对于区段描述符的区段描述符验证器的验证失败之后发起对于存储集合的各个存储设备的完全清洁。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/229,871 US9003103B2 (en) | 2011-09-12 | 2011-09-12 | Nonvolatile media dirty region tracking |
US13/229871 | 2011-09-12 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102929750A CN102929750A (zh) | 2013-02-13 |
CN102929750B true CN102929750B (zh) | 2015-05-20 |
Family
ID=47644555
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210335689.4A Active CN102929750B (zh) | 2011-09-12 | 2012-09-12 | 非易失性介质肮脏区段跟踪 |
Country Status (11)
Country | Link |
---|---|
US (1) | US9003103B2 (zh) |
EP (1) | EP2756405B1 (zh) |
JP (1) | JP5932042B2 (zh) |
KR (1) | KR101921365B1 (zh) |
CN (1) | CN102929750B (zh) |
AU (2) | AU2011376904A1 (zh) |
BR (1) | BR112014005623B1 (zh) |
CA (1) | CA2847841C (zh) |
MX (1) | MX336226B (zh) |
RU (2) | RU2014109361A (zh) |
WO (1) | WO2013039522A1 (zh) |
Families Citing this family (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9003103B2 (en) | 2011-09-12 | 2015-04-07 | Microsoft Technology Licensing, Llc | Nonvolatile media dirty region tracking |
US8898408B2 (en) * | 2011-12-12 | 2014-11-25 | Dell Products L.P. | Memory controller-independent memory mirroring |
US9396110B2 (en) * | 2012-12-21 | 2016-07-19 | Advanced Micro Devices, Inc. | Non-volatile hybrid memory |
US9542306B2 (en) | 2013-03-13 | 2017-01-10 | Seagate Technology Llc | Dynamic storage device provisioning |
US9448896B2 (en) | 2013-08-07 | 2016-09-20 | Seagate Technology Llc | Torn write mitigation |
US9128972B2 (en) * | 2013-09-21 | 2015-09-08 | Oracle International Corporation | Multi-version concurrency control on in-memory snapshot store of oracle in-memory database |
US9141486B2 (en) | 2014-01-15 | 2015-09-22 | Avago Technologies General Ip (Singapore) Pte Ltd | Intelligent I/O cache rebuild in a storage controller |
US9838346B2 (en) | 2014-03-17 | 2017-12-05 | Splunk Inc. | Alerting on dual-queue systems |
US9753818B2 (en) * | 2014-09-19 | 2017-09-05 | Splunk Inc. | Data forwarding using multiple data pipelines |
US9660930B2 (en) | 2014-03-17 | 2017-05-23 | Splunk Inc. | Dynamic data server nodes |
US9838467B2 (en) | 2014-03-17 | 2017-12-05 | Splunk Inc. | Dynamically instantiating dual-queue systems |
US9836358B2 (en) | 2014-03-17 | 2017-12-05 | Splunk Inc. | Ephemeral remote data store for dual-queue systems |
CN104123900A (zh) * | 2014-07-25 | 2014-10-29 | 西安诺瓦电子科技有限公司 | Led灯板校验系统及校验方法 |
US9430272B2 (en) | 2014-12-17 | 2016-08-30 | Microsoft Technology Licensing, Llc | Efficiently providing virtual machine reference points |
CN104484427B (zh) * | 2014-12-19 | 2017-12-29 | 武汉长江通信智联技术有限公司 | 一种录像文件存储装置及方法 |
US9547555B2 (en) * | 2015-01-12 | 2017-01-17 | Microsoft Technology Licensing, Llc | Change tracking using redundancy in logical time |
US9946607B2 (en) * | 2015-03-04 | 2018-04-17 | Sandisk Technologies Llc | Systems and methods for storage error management |
US9946496B2 (en) * | 2015-07-27 | 2018-04-17 | Elastifile Ltd. | SSD with non-blocking flush command |
US10684994B2 (en) * | 2015-09-25 | 2020-06-16 | Netapp Inc. | Data synchronization |
US10373665B2 (en) * | 2016-03-10 | 2019-08-06 | Micron Technology, Inc. | Parallel access techniques within memory sections through section independence |
KR20180062062A (ko) | 2016-11-30 | 2018-06-08 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 이의 동작 방법 |
WO2018166072A1 (zh) * | 2017-03-13 | 2018-09-20 | 华为技术有限公司 | 一种数据处理方法及装置 |
US10459807B2 (en) * | 2017-05-23 | 2019-10-29 | International Business Machines Corporation | Determining modified portions of a RAID storage array |
US10331363B2 (en) | 2017-11-22 | 2019-06-25 | Seagate Technology Llc | Monitoring modifications to data blocks |
KR102410306B1 (ko) | 2018-01-29 | 2022-06-20 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그것의 동작 방법 |
JP2020086483A (ja) * | 2018-11-15 | 2020-06-04 | 株式会社日立製作所 | 計算機システム及び記憶デバイスの制御方法 |
CN113127386A (zh) * | 2019-12-30 | 2021-07-16 | 美光科技公司 | 存储器器件中的受损存储部分恢复 |
US11755226B2 (en) * | 2020-09-18 | 2023-09-12 | Hewlett Packard Enterprise Development Lp | Tracking changes of storage volumes during data transfers |
KR20220045343A (ko) * | 2020-10-05 | 2022-04-12 | 에스케이하이닉스 주식회사 | 데이터 처리 시스템 내 데이터 전송에서 발생한 에러를 정정하는 장치 및 방법 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7103796B1 (en) * | 2002-09-03 | 2006-09-05 | Veritas Operating Corporation | Parallel data change tracking for maintaining mirrored data consistency |
CN1991775A (zh) * | 2005-12-28 | 2007-07-04 | 英业达股份有限公司 | 存储系统的高速缓存数据的保护方法 |
US7415488B1 (en) * | 2004-12-31 | 2008-08-19 | Symantec Operating Corporation | System and method for redundant storage consistency recovery |
US7904678B1 (en) * | 2004-02-27 | 2011-03-08 | Symantec Operating Corporation | Technique for recovering mirror consistency in cooperative virtual storage |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3058743B2 (ja) * | 1992-01-21 | 2000-07-04 | 株式会社日立製作所 | ディスクアレイ制御装置 |
NZ500202A (en) * | 1997-03-21 | 2001-11-30 | Canal Plus Sa | Updating of flash memory pages in computer memory system |
US7055058B2 (en) | 2001-12-26 | 2006-05-30 | Boon Storage Technologies, Inc. | Self-healing log-structured RAID |
JP2003288250A (ja) * | 2002-03-28 | 2003-10-10 | Sanyo Electric Co Ltd | ファイル管理方法 |
JP3798773B2 (ja) * | 2003-07-24 | 2006-07-19 | 株式会社東芝 | ディスク制御装置及び冗長化論理ディスクドライブの一貫性回復方法 |
US7526684B2 (en) * | 2004-03-24 | 2009-04-28 | Seagate Technology Llc | Deterministic preventive recovery from a predicted failure in a distributed storage system |
US8275951B2 (en) * | 2004-06-10 | 2012-09-25 | Hewlett-Packard Development Company, L.P. | Local bitmaps for an array of redundant storage devices |
US7395378B1 (en) | 2005-01-04 | 2008-07-01 | Symantec Operating Corporation | System and method for updating a copy-on-write snapshot based on a dirty region log |
US8996826B2 (en) | 2009-04-28 | 2015-03-31 | Symantec Corporation | Techniques for system recovery using change tracking |
US9003103B2 (en) | 2011-09-12 | 2015-04-07 | Microsoft Technology Licensing, Llc | Nonvolatile media dirty region tracking |
-
2011
- 2011-09-12 US US13/229,871 patent/US9003103B2/en active Active
- 2011-10-10 RU RU2014109361/08A patent/RU2014109361A/ru unknown
- 2011-10-10 EP EP11872297.4A patent/EP2756405B1/en active Active
- 2011-10-10 AU AU2011376904A patent/AU2011376904A1/en not_active Abandoned
- 2011-10-10 JP JP2014529676A patent/JP5932042B2/ja active Active
- 2011-10-10 KR KR1020147006546A patent/KR101921365B1/ko active IP Right Grant
- 2011-10-10 BR BR112014005623-4A patent/BR112014005623B1/pt active IP Right Grant
- 2011-10-10 CA CA2847841A patent/CA2847841C/en active Active
- 2011-10-10 MX MX2014002960A patent/MX336226B/es unknown
- 2011-10-10 RU RU2016138143A patent/RU2728816C2/ru active
- 2011-10-10 WO PCT/US2011/055590 patent/WO2013039522A1/en active Application Filing
-
2012
- 2012-09-12 CN CN201210335689.4A patent/CN102929750B/zh active Active
-
2017
- 2017-09-12 AU AU2017228544A patent/AU2017228544B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7103796B1 (en) * | 2002-09-03 | 2006-09-05 | Veritas Operating Corporation | Parallel data change tracking for maintaining mirrored data consistency |
US7904678B1 (en) * | 2004-02-27 | 2011-03-08 | Symantec Operating Corporation | Technique for recovering mirror consistency in cooperative virtual storage |
US7415488B1 (en) * | 2004-12-31 | 2008-08-19 | Symantec Operating Corporation | System and method for redundant storage consistency recovery |
CN1991775A (zh) * | 2005-12-28 | 2007-07-04 | 英业达股份有限公司 | 存储系统的高速缓存数据的保护方法 |
Also Published As
Publication number | Publication date |
---|---|
KR101921365B1 (ko) | 2018-11-22 |
BR112014005623A2 (pt) | 2017-03-21 |
JP2014530393A (ja) | 2014-11-17 |
RU2016138143A (ru) | 2018-12-12 |
RU2728816C2 (ru) | 2020-07-31 |
CA2847841C (en) | 2018-03-06 |
BR112014005623B1 (pt) | 2021-10-05 |
KR20140062063A (ko) | 2014-05-22 |
RU2016138143A3 (zh) | 2020-03-04 |
CA2847841A1 (en) | 2013-03-21 |
US9003103B2 (en) | 2015-04-07 |
WO2013039522A1 (en) | 2013-03-21 |
RU2014109361A (ru) | 2015-09-20 |
AU2011376904A1 (en) | 2014-03-27 |
EP2756405A1 (en) | 2014-07-23 |
US20130067179A1 (en) | 2013-03-14 |
BR112014005623A8 (pt) | 2018-02-06 |
CN102929750A (zh) | 2013-02-13 |
EP2756405B1 (en) | 2021-07-14 |
MX2014002960A (es) | 2014-07-09 |
MX336226B (es) | 2016-01-07 |
AU2017228544B2 (en) | 2019-05-16 |
AU2017228544A1 (en) | 2017-10-05 |
EP2756405A4 (en) | 2015-09-02 |
JP5932042B2 (ja) | 2016-06-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102929750B (zh) | 非易失性介质肮脏区段跟踪 | |
US10169383B2 (en) | Method and system for scrubbing data within a data storage subsystem | |
US6629198B2 (en) | Data storage system and method employing a write-ahead hash log | |
US8117496B2 (en) | Detecting and recovering from silent data errors in application cloning systems | |
US9229809B2 (en) | Nonvolatile media journaling of verified data sets | |
US7908512B2 (en) | Method and system for cache-based dropped write protection in data storage systems | |
US20140379671A1 (en) | Data scrubbing in cluster-based storage systems | |
US7020805B2 (en) | Efficient mechanisms for detecting phantom write errors | |
WO2009156870A1 (en) | Method and apparatus for error correction | |
US11314594B2 (en) | Method, device and computer program product for recovering data | |
EP4327208A1 (en) | Snapshot-based data corruption detection | |
US7577804B2 (en) | Detecting data integrity | |
US11822829B2 (en) | Method, device, and program product for data rebuilding |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
ASS | Succession or assignment of patent right |
Owner name: MICROSOFT TECHNOLOGY LICENSING LLC Free format text: FORMER OWNER: MICROSOFT CORP. Effective date: 20150616 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TR01 | Transfer of patent right |
Effective date of registration: 20150616 Address after: Washington State Patentee after: Micro soft technique license Co., Ltd Address before: Washington State Patentee before: Microsoft Corp. |