(57)【特許請求の範囲】
【請求項１】
プロセッサによって実行される、少なくとも一つの記憶装置を含む記憶装置セット内でペンディングの書き込みを記録する方法であって：
前記記憶装置セットの少なくとも一つの記憶装置上で、前記記憶装置上のある領域サイズの少なくとも二つの領域のペンディング状態を記述する領域記述子を生成する段階と；
前記記憶装置セット中のある位置にデータセットを記憶する要求を受領したら：
前記少なくとも二つの領域のうちのどの領域が前記データセットを記憶すべき前記位置を含んでいるかを同定し；
前記領域記述子において前記位置を含んでいる領域をダーティーとしてマークし；
前記記憶装置セット中の前記位置に前記データセットの記憶を開始する段階と；
前記記憶装置セット中の前記位置に前記データセットを記憶したのちに、前記領域記述子において前記位置を含んでいる領域をクリーンとしてマークする段階とを含み、
前記領域記述子において領域がダーティーとしてマークされていることは、その領域に対するペンディングの書き込みがある可能性があることを示し、
前記領域記述子において領域がクリーンとしてマークされていることは、その領域に対するペンディングの書き込みがないことを示す、
方法。
【請求項２】
それぞれのダーティー領域が、
前記記憶装置セットの記憶装置上の領域の物理的な位置または前記記憶装置セットの論理装置上の領域の論理的な位置を同定する、
請求項１記載の方法。
【請求項３】
前記記憶装置セットが、領域からなる少なくとも二つの領域セットを有しており、
それぞれの領域セットが前記領域セットの領域を表わす少なくとも一つの領域記述子を有する、
請求項１記載の方法。
【請求項４】
前記記憶装置セットが、それぞれ更新シーケンス・インジケーターを有する少なくとも二つの領域記述子を有しており、前記更新シーケンス・インジケーターは各領域記述子の更新のシーケンス順を反映し、
当該方法が、前記記憶装置セット中のある位置にデータセットを記憶したときに：
前記領域記述子のうちで最も新しい更新シーケンス・インジケーターを有していない古くなった領域記述子を選択する段階と；
前記古くなった領域記述子において、前記データセットの前記位置を有する前記領域を、更新されたとマークする段階と；
前記更新シーケンス・インジケーターを、前記領域記述子のうちで最も新しい更新シーケンス・インジケーターに更新する段階とを含む、
請求項１記載の方法。
【請求項５】
記憶装置上で前記領域記述子を生成する段階が：前記領域記述子を記憶するための領域記述子スペースを前記記憶装置上に割り当てる段階を含み；
当該方法が、前記領域記述子スペースをダーティー領域で満たしたら、前記領域記述子スペースを拡張する段階を含む、
請求項１記載の方法。
【請求項６】
少なくとも一つの領域記述子において領域をダーティーとしてマークすることが：
前記領域記述子において前記領域がクリーンとマークされているかどうかを判定し；
前記領域記述子において前記領域がクリーンとマークされていると判定したら、前記領域をダーティーとマークすることを含む、
請求項１記載の方法。
【請求項７】
少なくとも一つの領域記述子において領域をクリーンとしてマークすることが：
前記領域内のある位置にデータセットを記憶することを完了したのちに、前記領域をクリーンと同定し；
前記領域記述子においてクリーニングされた領域をクリーンとマークする要求を受領したら、前記領域記述子において少なくとも一つのクリーニングされた領域をクリーンとマークすることを含む、
請求項１記載の方法。
【請求項８】
少なくとも二つのデータセットを記憶している、少なくとも一つの記憶装置を含む記憶装置セットをクリーニングする方法であって、それぞれの記憶装置は、その記憶装置上のある領域サイズの少なくとも二つの領域のペンディング状態を記述する領域記述子を有しており、当該方法は、前記記憶装置セットの前記それぞれの記憶装置について：
前記記憶装置上に記憶されている前記領域記述子を取得する段階と；
前記記憶装置の、前記領域記述子においてダーティーとマークされたそれぞれの領域について：
前記領域内のデータセットをクリーニングすることを開始する段階と；
前記領域内のデータセットをクリーニングすることを完了したら、その領域を前記領域記述子においてクリーンとマークする段階とを含み、
前記領域記述子において領域がダーティーとしてマークされていることは、その領域に対するペンディングの書き込みがある可能性があることを示し、
前記領域記述子において領域がクリーンとしてマークされていることは、その領域に対するペンディングの書き込みがないことを示す、
方法。
【請求項９】
前記記憶装置セットが、それぞれ更新シーケンス・インジケーターを有する少なくとも二つの領域記述子を有しており、前記更新シーケンス・インジケーターは各領域記述子の更新のシーケンス順を反映し、
前記記憶装置セットにおける前記少なくとも一つのダーティーな領域を同定することが：
前記領域記述子のうちで最も新しい更新シーケンス・インジケーターを有する最も新しい領域記述子を選択し；
選択された前記領域記述子に従って前記記憶装置セットにおける前記少なくとも一つのダーティーな領域を同定することを含む、
請求項８記載の方法。
【請求項１０】
それぞれの領域記述子がその領域記述子の領域記述子検証子を有しており；
前記ダーティーな領域を同定することが：前記領域記述子の前記領域記述子検証子を検証することを含み；
当該方法は、前記領域記述子の前記領域記述子検証子の検証に失敗したとき、前記記憶装置セットの記憶装置のフル・クリーニングを開始することを含む、
請求項８記載の方法。
【請求項１１】
コンピュータのプロセッサに、請求項１記載の方法を実行させるためのコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は不揮発性媒体のダーティー領域追跡に関する。
【背景技術】
【０００２】
コンピューティングの分野において、多くのシナリオは一組の記憶装置（たとえば、安価なディスクの冗長アレイ（RAID:  Redundant  Array  of  Inexpensive  Disks）に基づいて相互運用されるハードディスクドライブのアレイ）によって提供され、さまざまな型のデータを記憶および取得するためにさまざまな装置およびプロセスによってアクセスされうる記憶セット（storage  set）に関わる。多くのそのようなシナリオにおいて、記憶セットの異なる部分に記憶されたデータが関係をもつことがある。第一の例として、データベース・システムにおける関係したレコードのように、記憶セットに記憶されている第一のデータセットと第二のデータセットが互いを参照することがありうる。第二の例として、さまざまな利点を提供するためにデータの二つ以上の同一のバージョンが保持されることがある。たとえば、二つの記憶装置が同じデータセットを記憶し、これへのアクセスを提供してもよく、それによりそのデータへのアクセス・レートを事実上二倍にする。データの同一のコピーは、データの完全性を保護するために保持されてもよい。たとえば、データの第一のコピーが、データ破損またはハードウェア故障（たとえばハードドライブのクラッシュ）のような障害のために失われる場合、障害から回復するために、そのデータの同一の第二のコピーがアクセスされ、複製されてもよい。
【０００３】
第三のそのような例では、データに対する誤りまたは意図されない変化を検出するおよび／またはそれに対して防護するためにデータが関連付けられてもよい。たとえば、装置の読み出しまたは記憶論理におけるエラー、バッファー・アンダーランまたはオーバーラン、記憶媒体における欠陥または（宇宙線のような）外的な妨害が、時に記憶媒体上に記憶されているデータまたは記憶媒体からのデータの読み出しに意図しない変化を引き起こすことがある。したがって、そのような多くのシナリオにおいて、記憶装置上に記憶されるデータのそれぞれの部分について、チェックサムのような検証子が計算され、記憶されてもよく、データセットの内容が有効に記憶装置に記憶されたおよび／または記憶装置から読み出されたことを確証するために使用されてもよい。そのような一つの例として、ビットのセットを含むデータセットを記憶するコンテキストでは、ビットに対して排他的OR（XOR）演算が適用され、結果として一ビットのチェックサムを生じてもよく、そのチェックサムが記憶されて、このデータセットと関連付けられてもよい。のちにデータセットが読まれるとき、もう一度それにXOR演算が適用されてもよく、その結果が上記一ビットのチェックサムと比較されてもよい。任意の一ビットの変化はこれらのXOR計算の不一致につながり、それがデータが誤って記憶、変更されたまたは誤って記憶装置から読み出されたことを示す。多くの型の検証子が同定されてもよい。そうした検証子はいくつかの特徴において変わりうる（たとえば、計算の簡単さ、データセットのどのビットが変わったかの同定能力およびデータの誤って読まれた部分が訂正されうる誤り訂正能力）。
【０００４】
さまざまな形のデータ複製がしばしば安価なディスクの冗長アレイ（RAID:  Redundant  Array  of  Inexpensive  Disks）のアレイ、たとえば改善されたスループットおよび自動データ・ミラーリングのようなさまざまな集合属性を達成するために一緒にプールされている一組のハードディスクドライブの使用を通じて達成される。第一のそのような例として、RAID  1アレイでは、同じサイズの二つ以上のハードディスクドライブのセットが記憶セットの同一のコピーを記憶し、記憶セットへのいかなる更新も、すべてのハードディスクドライブを横断して同一に伝搬させられる。したがって、ハードディスクドライブ障害、さらには複数のそのような障害の場合でも、一つでもハードディスクドライブが機能してアクセス可能なよう残っている限り、記憶セットはアクセス可能のままに留まる。第二のそのような例として、RAID  4アレイは二つ以上のディスクのセットに関わる。ここで、一つのディスクはユーザー・データを記憶するためではなく、他のディスクに記憶されているデータの検証子を記憶するためにアレイに含められる。たとえば、それぞれが一テラバイトのデータを記憶する四つのディスクに関わるRAID  4アレイについて、最初の三つのディスクの容量はプールされてユーザー・データのための三テラバイトの記憶スペースをなし、四番目のディスクは最初の三つのディスクに記憶されているデータセットについての検証子を保持するためにアレイに含められる（たとえば、他の三つのディスクにそれぞれ記憶されている三つの64ビット語毎に、四番目のディスクは、それらの三つの64ビット語の完全性を検証する64ビットの検証子を含む）。RAIDアレイ・コントローラは、設けられる一組のハードディスクドライブについて、選択されたRAIDレベルの詳細を実装する（たとえば、データセットを受領すると、自動的に、三つのユーザー・ディスクを横断してデータを割り振り、データセットの検証子を計算し、四番目のディスク上に検証子を記憶する）よう構成されている回路を有する。使用されるRAID技法は、追加的な保護または特徴をも可能にしてもよい。たとえば、RAID  4アレイにおけるどれか一つの記憶装置が障害を起こしたら、障害を起こした装置に記憶されているデータが、残りの記憶装置の使用を通じてそっくり再構成されてもよい。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
この概要は、詳細な説明においてさらに後述される概念のセレクションを簡略化された形で紹介するために設けられている。この概要は、特許請求される主題の鍵となる因子または本質的な特徴を特定することは意図されていないし、特許請求される主題の範囲を限定するために使われることも意図されていない。
【０００６】
記憶装置上にデータの関連付けられた諸セットを書き込む際、該書き込み中に、関連付けられたデータセットの間の非一貫性を引き起こす問題が生じることがある。第一の例として、ミラーリングされたデータセットにおいて、ミラーの一つへの書き込み中にエラーが起こりうることがある。たとえば、宇宙線、物理的媒体中の欠陥または読み書きプロセスにおける論理的なエラーに起因する、データの意図しない変化である。結果として、データセットのそれらのミラーは一致しなくなり、データの正しいバージョンを選ぶことが難しいことがある。第二の例として、データセットと検証子の記憶の間の遅延（またはその逆）のために問題が生じることがある。たとえば、多くの記憶装置は一時に一つの位置（たとえば、ハードディスクドライブの書き込みヘッドの下の位置または半導体記憶デバイスにおけるアドレス・レジスタによって指定される位置）への書き込みをサポートするだけであり、データのシーケンシャルな記憶は、検証子より前にデータセットを書き込むこと、あるいは逆にデータセットより前に検証子を書き込むことに関わる。もう一つの例として、データセットと検証子が異なる記憶装置上に記憶される場合、第一の記憶装置がデータセットを記憶する瞬間を第二の記憶装置がデータセットの検証子を記憶する瞬間と同期させることは難しいことがある。結果として、データセットおよび対応する検証子の記憶は、同期的な仕方ではなく、逐次的な仕方で行なわれる。電力喪失、ハードウェア障害、ソフトウェア・クラッシュまたは予期されなかったアレイからの記憶装置の除去など、多くの障害源が記憶プロセスを中断させうる。そのような障害が、データセットの記憶後、検証子の記憶より前の瞬間に生じると、のちに読み込みの際に検証子エラーが生じ、データの正確さに対する信頼を危うくすることがありうる。データが能動的に記憶装置（単数または複数）によって書き込まれることに加えて、障害は、書き込みバッファ内に記憶されておりすぐにも書き込みするためにスケジューリングされているデータなどの、完了していない他の書き込みを攪乱することもある。
【０００７】
これらおよび他のシナリオにおいて、データセットの一貫性は、検証プロセスを通じて検出されうる。それはたとえば、同一のデータセットを比較するまたは検証子を対応するデータと比較することによる。よって、破局的な障害を検出したら、一つまたは複数の記憶装置上のデータは、データを検証し、可能性としては非一貫性を訂正することによって、「クリーニング」されうる。しかしながら、障害の発生は簡単に検出できるかもしれないが（たとえば不正なシャットダウンまたは故障した記憶装置の交換）、書き込みの時点で記憶セットのどの部分が書き込まれており、障害によって損なわれている可能性があるかを決定することが可能でないことがある。そのような情報なしでは、記憶セット中の全データセットを検証する（たとえばミラーリングされたデータセットの各コピーの全体を比較して非一貫性を検出するおよび記憶セット中の全データセットの検証子を試験する）ことによって、記憶セット全体がクリーニングされる必要があることがある。記憶セット全体のクリーニングは、特に記憶セットの容量のペタバイト領域への成長に鑑み、長い時間がかかることがあり、結果として、たとえ短期間の破局的な障害後であっても長引く回復期間につながることがある。それに、この高価なクリーニング・プロセスは記憶セットの完全性を保証するかもしれないが、ボリューム全体のクリーニング・プロセスの広がり（しばしば長期間書き込まれていないデータセットおよびさらには記憶装置さえ巻き込む）は、障害の時点で進行中であったことがありうる比較的少数の書き込みに対して不相応であることがある。
【課題を解決するための手段】
【０００８】
本稿では、記憶セットのクリーニングを、障害によって損なわれた可能性があるデータに集中させる技法が提示される。本技法によれば、記憶セット中のある位置に書き込む前に、記憶装置は、同じ不揮発性物理媒体上に、書き込みが行なわれようとしている位置を示す記述子を記憶してもよく、書き込みが完了したのちに該記述子を消去してもよい。このようにして、記憶装置は記憶セットの「ダーティー」な領域を追跡でき、障害から回復したら、記憶セットの「ダーティー」な領域のみのクリーニングを開始しうる。しかしながら、すべての書き込みの不揮発性物理媒体上でのアドレスを記憶（およびフラッシュ）することおよび物理媒体への書き込み完了を確認したのちに該アドレスを消去（およびフラッシュ）することは、各データセットを書き込むのに関わるシークおよび書き込みの数を著しく（たとえば三倍に）増大させ、それにより記憶セットのパフォーマンス（たとえばレイテンシーおよびスループット）が低下しうることは理解されうる。逆に、記憶装置、パーティションまたはボリュームごとなど、高いレベルでのみ「ダーティー」情報を追跡するのでは、クリーニング・プロセスを集中させる効率が悪くなりうる。たとえば、「ダーティー」情報がボリュームごとに追跡される場合、クリーニング・プロセスは書き込みの時点で使用中であった特定のボリュームに集中しうるが、ボリュームは何テラバイトものデータを含むこともあり、その結果、たった数メガバイトのデータが書き込み中だった場合でも、長期間のクリーニング・プロセスとなってしまう。結果として、本稿に提示される技法によれば、記憶セットは、ある領域サイズの諸領域に分配され、「ダーティー」情報は、各領域について追跡されうる。たとえば、記憶セットを一ギガバイトの諸領域に配分すれば、ダーティー領域情報の更新の頻度を低下もさせながら、領域の比較的精密な追跡を可能にしうる（たとえば、ある領域において書き込みが開始されるとき、その領域は「ダーティー」としてマークされ、その領域内での長大な逐次的な諸書き込みを通じてそのようにマークされたままでありうる）。したがって、領域サイズの選択は、より集中した、より短いクリーニング・プロセスにつながるダーティー領域情報における精密さと、ダーティー領域追跡プロセスを実装するパフォーマンス・コストの削減との間のトレードオフと見なすことができる。
【０００９】
さらなる技法は、ダーティー領域情報に対する更新の頻度をさらに低下させうる。第一の例として、書き込みが要求された領域についてダーティー領域記述子を書き込む前に、ある実施形態は、その領域が記憶媒体上ですでにダーティーとマークされているかどうかを判定してもよく、その領域を冗長にダーティーとしてマークすることを回避してもよい。第二の例として、書き込みが最近完了した領域は、同じ領域に対してすぐにもその後の書き込みがある可能性が高いことがある。したがって、書き込みの完了後にその領域をすぐにクリーンとしてマークするのではなく、「クリーン」のマーク付けは短期間遅らされてもよい。同じ領域に対するその後の書き込みが受領されたら、その領域をクリーンとマークしたすぐあとにその領域をダーティーとマークしなければならないのではなく、その領域はダーティーとマークされたままに留まりうる。一つのそのような実施形態では、そのような領域をダーティーまたはクリーンとしてマークするときを決定するために、ダーティー領域記述子の揮発性メモリ表現が生成され、使用されてもよい。たとえば、このメモリ内表現は、各領域への最後の書き込み要求の時刻を記録してもよく、ある定義された期間にわたって書き込まれなかった領域があればそれをクリーンとマークしてもよい。さらに、このメモリ内表現は、「クリーン」領域のバッチ記録を可能にしてもよく、ダーティー領域追跡プロセスに関わる記憶媒体書き込みの量をさらに減らす。ダーティー領域の「作業セット」のメモリ内追跡のこれらおよびその他の使用は、クリーニング・プロセスの精密さを著しく低下させることなく、記憶装置へのアクセスの数を、よって不揮発性ダーティー領域追跡の実行コストを減らしうる。これらおよびその他の技法は、記憶セットの障害からの回復の際に、クリーニング・プロセスを著しく長引かせることなく、ダーティー領域追跡を実装する実行コストをさらに低下させうる。
【００１０】
上記および関係する目的の達成に向け、以下の記述および付属の図面はある種の例示的な側面および実装を記述する。これらは、一つまたは複数の側面が用いられうるさまざまな仕方のほんのいくつかを示す。本開示の他の側面、利点および新規な特徴は、付属の図面との関連で考慮されるとき、以下の詳細な記述から明白となるであろう。
【図面の簡単な説明】
【００１１】
【図１】いくつかの記憶装置上に記憶されるミラーリングされたデータを有しうる記憶セットの障害を表わす例示的なシナリオの図解である。
【図２】データセットと該データセットの検証子（たとえばチェックサム）の一貫性を損ないうる記憶セットの障害を表わす例示的なシナリオの図解である。
【図３】障害によって引き起こされる、データセット中の損なわれたデータの発生を減らしうるが、かなりのコストおよび／または非効率をもってそうしうる二つの技法の図解である。
【図４】記憶セットの物理媒体上のダーティー領域を追跡するための、本稿に提示される技法の使用を表わす例示的なシナリオの図解である。
【図５】本稿に提示される技法に基づく、記憶セットのダーティー領域の追跡および不揮発性媒体記録の例示的な方法のフローチャート図解である。
【図６】本稿に提示される技法に基づく、記憶セットの不揮発性記憶媒体記録上で示されるダーティー領域に従って記憶セットをクリーニングする例示的な方法のフローチャート図解である。
【図７】本稿に記載される一つまたは複数の仕組みを具現するよう構成されたプロセッサ実行可能命令を有する例示的なコンピュータ可読媒体の図解である。
【図８】本稿に提示される技法に基づく、記憶セットの不揮発性物理媒体上のダーティー領域を追跡するために使用されうるデータ構造の一つの型を表わす例示的なシナリオの図解である。
【図９】本稿に提示される技法に基づく、記憶セットのダーティー領域を追跡するための記憶装置上のダーティー領域テーブルを更新するための例示的なプロセスの図解である。
【図１０】本稿に提示される技法に基づく、記憶セットのダーティー領域を追跡するプロセスを具現する例示的な状態機械の図解である。
【図１１】本稿に記載される仕組みの一つまたは複数が実装されうる例示的なコンピューティング環境を示す図である。
【発明を実施するための形態】
【００１２】
特許請求される主題についてここで図面を参照して述べる。図面を通じて、同様の要素を指すために同様の参照符号が使われる。以下の記述では、説明の目的で、特許請求される主題の十全な理解を与えるために、数多くの個別的詳細が記述される。しかしながら、特許請求される主題がそうした個別的詳細なしでも実施されうることは明白であろう。他方、特許請求される主題の記述を容易にするために、構造および装置がブロック図の形で示される。
【００１３】
〈Ａ．序〉
コンピューティングの分野において、多くのシナリオは、一つまたは複数の不揮発性記憶装置（たとえば円盤ベースの磁気および／または光ハードディスクドライブ、半導体記憶デバイスおよび不揮発性メモリ回路）上に記憶セットをなすデータを保存することに関わる。語サイズ、アドレッシング方法、記憶装置の記憶スペースの一つまたは複数のパーティションへの分割および記憶装置内の割り当てられたスペースをコンピューティング環境内の一つまたは複数のボリュームとして露出させることなど、データ記憶の多くの詳細は変わりうる。さらに、記憶装置は、記憶セットを提供するために、独立して、またはゆるやかな協働をもって動作しうる。たとえば、RAID  0方式に従って構成されたアレイでは、記憶セットは単に、それぞれが他のディスクとは独立して動作しうる各記憶装置によって提供される容量から総合されてもよい。あるいはまた、記憶装置はさまざまな度合いの緊密な協調を通じてさまざまな機能を提供するよう構成されてもよい。たとえば、RAID  1方式に従って構成されたアレイでは、一組の記憶装置はそれぞれ記憶セット全体の同一のコピーを記憶してもよい。たとえば、一テラバイトの記憶セットが四つの一テラバイト記憶装置上で四つの同一のコピーとして記憶されてもよい。それら四つの記憶装置は、同期を維持するため、記憶セットを変更するいかなる要求も四つすべての記憶装置に等しく適用されることを保証するよう協働してもよい。この種の「ミラーされた」アーカイブは改善されたアクセス・レートを呈しうる。たとえば、異なるプロセスが異なる記憶装置を通じてその記憶セットにアクセスしうるので、潜在的には、その記憶セットへのアクセス・レートを、どの単独の装置によって達成可能でありうるよりも四倍にしうる。さらに、この型のアレイは堅牢な耐久性を実証する。一つまたは複数のハードディスクドライブが（たとえばデータ破損、損傷または喪失のため）障害を起こす場合、記憶セットはそれでも他のハードディスクドライブを通じてアクセス可能であり、少なくとも一つの他のハードディスクドライブが有効かつアクセス可能に留まっている限り、無傷のままである。しかしながら、これらの特徴の利点は、RAID  1アレイでは、かなりの容量の損失によって相殺される（たとえば、四テラバイトのハードディスクドライブ・スペースを一テラバイトのデータを記憶するために使う）。他の記憶方式は、それよりは低い容量低減でこうしたセキュリティおよびパフォーマンス特徴のいくつかを提供しうる（たとえば、RAID  4方式では、スペースsのn個のドライブのセットが一つを除いた全ハードディスクドライブの記憶容量をフルに現わし、その一つはパリティ情報を記憶するためにリザーブされ、アレイ内のどの一つのハードディスクドライブの障害からも回復できる）。
【００１４】
これらおよび他のシナリオにおいて、データセットはさまざまな装置およびプロセスによって記憶セットに記憶されうる。しかしながら、記憶セットの使用中に、データの記憶を損ないうる多くの形の障害が起こりうる。たとえば、さまざまなプロセスのための記憶セットへの書き込みがデータセットにアクセスしている間に、当該書き込みプロセスにおいて、記憶セット管理プロセスにおいて、ソフトウェアのためのデバイス・ドライバにおいてまたはオペレーティング・システムにおいて、ソフトウェア障害が起こることがある；コンピュータは記憶装置との連絡を失うことがある（たとえば、記憶装置は接続を外されることがあり、あるいはコンピュータと記憶装置を接続する有線または無線のネットワークが障害を起こすことがある）；あるいは記憶装置はハードウェア障害を経験することがある（たとえばハードディスクドライブにおけるヘッド・クラッシュまたは電力中断）。これらおよび他の形の障害は突然、警告なしに起こることがあり、記憶セットにデータを書き込むプロセスを中断することがある。
【００１５】
一つまたは複数の書き込みの間の記憶セットの障害の場合、いくつかの型の障害は回復可能でありうるか、結果として生ずるデータの損失が取るに足りないものであることがある。たとえば、障害はデータが記憶セットに書き込まれたあとまもなく起こることがあり、それは回復可能である；再生成できるまたは貴重ではないデータの喪失を引き起こすことがある；または比較的大規模なデータセットにおける少量のデータの喪失、たとえば非常に大きな電子メール・メッセージ・アーカイブにおける少数の電子メール・メッセージの喪失を引き起こすことがある。しかしながら、他の型の障害は著しい問題を呈することがある。特に、記憶セットに書き込まれるデータの二つ以上のセットの間に何らかの関連づけが存在することがあり、第一のデータセットを書き込んでいる間に生じる障害は、関連付けられたデータセットにおける非一貫性につながることがある。そのような非一貫性は、障害の時点で書き込まれつつあったデータセットばかりでなく、関連付けられたデータセットの完全性をも損なうことがある。実際、いくつかのシナリオでは、書き込みの完全な失敗および書き込まれるべきデータの喪失は、記憶セットの不完全な書き込みよりも生じる問題が少ないことがある。第一の例として、ミラーされたデータセットの第一のコピーの更新の際に障害が起こる場合、このコピーと別のコピーとの間の検出される非一貫性は、両方のコピーの完全性に疑義を生じさせることがある。さらに、両方のコピーが障害の時点に更新されつつあってその後非一貫性が検出される場合には、どちらのコピーが障害前に書き込みを成功裏に完了させ、どちらのコピーがそうでなかったかを判別するのが難しいことがある。第二の例として、データセットとそのチェックサムとの間で非一貫性が検出される場合、データセットまたはチェックサムのどちらが誤っているかを判別するのが難しいことがある。さらに、チェックサムがいくつかのデータセットから計算されている場合、一つのデータセットへの書き込みを完了しないことは、正しくないチェックサムにつながることがあり、そのデータセットおよびチェックサムの完全性のみならず、そのチェックサムによって代表される他のデータセットすべての信頼性をも低下させることがある。これらおよびその他のシナリオにおいて、データセットへの書き込みを完了しないことは、不完全に書き込まれたデータセットにかする程度に関係しているだけの他のデータセットさえも含む、記憶セット中の広い範囲のデータの信頼性を損なう非一貫性を生じうる。
【００１６】
図１および図２は、記憶セットへの書き込み中の障害の帰結を示す二つの異なるシナリオを示している。図１の例示的なシナリオ１００では、さまざまなデータセット１０４（たとえば、ビット、バイト、語、セクタ、ファイルまたはレコード）を含む記憶セット１０２が記憶装置１０６のセットに記憶される。ここで、データセット１０４の間にはミラーリング関係が存在する。具体的には、この例示的なシナリオ１００における記憶装置１０６は、RAID  1方式のように、データセット１０４の同一コピーを記憶するよう構成される。（ミラーリングは物理的な仕方で、たとえば、記憶装置１０６の同一サイズのセット上の各物理的位置に同じデータを書き込んで、実行されてもよいし、あるいは論理的な仕方で、たとえば、記憶セット１０２のある論理アドレスに対応する各記憶装置１０６の物理的位置にデータを書き込んで、実行されてもよい。）よって、記憶セット１０２におけるある特定の位置１０８における特定のデータセット１０４に書き込み１１０が要求される第一の時点１１２において、記憶装置１０６はそれぞれ要求された位置１０８への書き込み１１０を実行してもよい。しかしながら、この例示的なシナリオ１００においてさらに示されるように、記憶装置１０６の不完全な同期のために問題が生じることがある。たとえば、各記憶装置１０６への書き込み１１０が、異なる記憶装置１０６によって、異なる時刻に開始され、実行され、完了されることがある。そのようなタイミング差は、ハードウェアの相違のために生じることがある（たとえば、第一の記憶装置１０６はデータセット１０４をただちに物理媒体にコミットしうるが、第二の記憶装置１０６はデータセット１０４をまず書き込みバッファに記憶することがある）が、同一設備の記憶装置でさえ生じることがある（たとえば、異なる記憶装置１０６の入出力待ち行列における相違または書き込み要求の最初における異なるハードディスクドライブの書き込みヘッドの初期セクタ位置の相違）。結果として、第二の時点１１４において、記憶装置１０６のうちの二つへの書き込み１１０は完了しているが、第三の記憶装置１０６は書き込み１１０を完了させようと継続していることがありうる（実は記憶セット１０２にデータセット１０４をコミットすることを開始していないこともありうる）。
【００１７】
記憶装置１０６の同期のそのような喪失は、たとえば第一の記憶装置１０６による書き込み１１０の完了後かつ第二の記憶装置１０６による同じ書き込み１１０の完了前に障害が発生する場合、著しい問題を生ずることがある。たとえば、第三の書き込み１１０が記憶装置１０６に対して実行されつつある第三の時点１１６において、すべての記憶装置１０６への書き込み１１０を中断する障害１１８が生じる。障害１１８が一時的（たとえば瞬間的な電源喪失）、さらには短命であったとしても、障害１１８は、記憶装置１０６におけるタイミング差のため、非一貫性１２２を生じることがある（たとえば、書き込み１１０は第一および第二の記憶装置１０６上では障害１１８前に完了していたが、第三の記憶装置１０６上では完了していなかったことがありうる）。障害１１８から回復する際に、同一であることが期待されるデータセット１０４の間で非一貫性１２２を同定するとき、どのデータセット１０８が正確であるかを判定するのが難しいことがありうる。この例示的なシナリオ１００において、記憶装置１０６の過半数（majority）に記憶されているデータセット１０８のバージョンを選ぶことが論理的であることがある。しかしながら、この例示的なシナリオ１００の軽微な変形では、そのような選択がそれほど論理的ではなくなることがある。たとえば、非一貫性１２２は、偶数個の記憶装置１０６に関わるシナリオにおいて生じることがあり、多数決選択が利用可能でないことがある。
【００１８】
図１の例示的なシナリオ１００のようなシナリオでは、非一貫性１２２は、最近書き込まれたデータセット１１０のみにあてはまることがある。しかしながら、他のシナリオでは、同様の障害１１８は、長い間書き込まれていない、あるいはアクセスさえされていないデータセット１０４、さらには障害１１８の時点で使用されていなかった他の記憶装置１０６に記憶されているものの信頼性をも危うくすることがある。図２の例示的なシナリオ２００では、四つの記憶装置１０６のセットがRAID  4方式の仕方で構成されており、記憶セット１０２は三つの記憶装置１０６を横断して割り当てられ、第四の記憶装置１０６は、最初の三つの記憶装置１０６に記憶されているさまざまなデータセット１０４に対応する検証子２０２のセットを記憶するよう構成されている。検証子２０２は、他の記憶装置１０６のそれぞれの対応する位置に記憶されているビットを一緒にXORすることによって計算されるパリティ・ビットのようなチェックサムであってもよい。（たとえば、各記憶装置１０６の記憶セット１０２内のある特定の物理的または論理的な位置に記憶されている一メガバイトのデータセット１０４について、該一メガバイトのデータセット１０４のそれぞれが合わせてXORされて、一メガバイトのパリティ・データを生成し、それが第四の記憶装置１０６に記憶されてもよい。）この相互運用により、記憶装置１０６は、データ損失のいくつかの形を通じて、記憶セット１０２の完全性を維持できるようになりうる。たとえば、最初の三つの記憶装置１０６のうちのいずれか一つが失われる場合、失われた記憶装置１０６に記憶されていた記憶セット１２０の部分は、他の二つの記憶装置１０６に記憶されているデータと、第四の記憶装置１０６に記憶されている対応するパリティ・データをXORすることによって再構成されてもよい。第四の記憶装置１０６が失われた場合には、パリティ・データは単に、最初の三つの記憶装置に記憶されている対応するデータセット１０４から代わりの記憶装置１０６上に再生成されてもよい。
【００１９】
このようにして、図２の例示的なシナリオ２００に示したような記憶装置１０６の相互運用は、いずれか一つの記憶装置１０６が突然、恒久的に失われる場合においても故障耐性を可能にする。しかしながら、この例示的なシナリオ２００における記憶装置１０６も、図１の例示的なシナリオ１００において提示された不完全な同期を示す。たとえば、第一の時点２０４において、第二の記憶装置１０６に記憶されているデータセット１０４に対して書き込み１１０が開始されることがあり、この書き込みは第四の記憶装置１０６に記憶されている対応するデータセット１０４について検証子２０２を更新することに関わる。しかしながら、書き込み１１０は同時に完了しないことがある。たとえば、第二の時点２０６においては、第二の記憶装置１０６への書き込み１１０は完了していることがあるが、第四の記憶装置１０６上の検証子２０２の書き込み１１０は完了してないことがある。さらに、後者の書き込み１１０が完了する前に障害１１８が生じることがあり、第四の記憶装置１０６が正しくない検証子１１８を保持することがある。たとえ限定的で短期間だったとしても、この障害１１８は、第四の記憶装置１０６に不完全に書き込まれた検証子１１６および最近だが完全に書き込まれた第二の記憶装置１０６に記憶されたデータセット１０４のみならず、やはり検証子１２２によって代表されていている第一および第三の記憶装置１０６に記憶されているデータセット１０４をも危うくすることがある。たとえば、第三の時点２０８において、第三の記憶装置１０６が障害１１８を経験することがある。第四の時点２１０において、第一および第二の記憶装置１０６上の対応するデータセット１０４および第四の記憶装置１０６上の対応する検証子２０２を合わせてXORすることによって代替記憶装置１１８上にデータセット１０４を再構成するよう回復プロセスが開始されうる。しかしながら、第二の時点２０６における第四の記憶装置１０６への書き込み１１０の失敗１１８によって引き起こされた非一貫性１２２のため、XOR演算は、第三の記憶装置１０６上の正しくないデータ２１２の再構成につながりうる。この正しくないデータ２１２は、第三の記憶装置１０６上のこのデータセット１０４が書き込み１１０の障害１１８に関わっていなかったとしても、このデータセットが長期間書き込まれていなかったとしても、また第三の記憶装置１０６が第四の記憶装置１０６への書き込み１１０の障害１１８の際に使用中でなかったまたさらにはアクセス可能でさえなかったとしても、生成されうる。このように、書き込み２０２の単一の障害が、記憶セット１０２の故障耐性能力を損なうことがありうる。（すなわち、RAID  4方式の実装にもかかわらず、記憶セット１０２は単一の記憶装置１０６の障害１１８から回復する能力を失う。）他のシナリオではさらに深刻な帰結が生じることがありうる。たとえば、失敗した書き込み１１０がマスター・ブート・レコードを含むデータセット１０４に対して行なわれていた場合、可能性としては記憶セット１０６全体を含む、記憶セット１０６内のボリューム全体が損なわれ、アクセス不能となることがありうる。
【００２０】
書き込み１１０の失敗１１８の潜在的に破局的な帰結のため、結果として生じる非一貫性１２２を検出し、訂正するための諸技法が利用されてもよい。第一のそのような技法として、記憶セット１０２中の非一貫性を検出するために、さまざまな型のクリーニング・プロセスが利用されてもよい。たとえば、不一致を検出するためにデータセット１０４が検証子２０２と比較されてもよいし、あるいは同一であることが期待されるデータセット１０４のコピーどうしが比較されてもよい。他のデータセット１０４または検証子２０２と関連付けられていないデータセット１０４さえ、データ破損のような非一貫性について検査されることがあり、時として自動的に修復されることがある。しかしながら、記憶セット１０２全体のスキャンは、多くのシナリオにおいて、非効率的および／または禁止的でありうる。たとえば、スキャンは、記憶セット１０２のサイズのため、記憶セット１０２のスループットのため（たとえば地理的に分散された記憶セット１０２は比較的低スループットのネットワーク接続を通じてアクセス可能であることがある）、および／またはスキャンの複雑さのため（たとえば、洗練されたパリティ・チェックの数学を集中的に使う（math-intensive）計算）、長引くことがありうる。スキャン中、記憶セット１０２は可能性としては非一貫性があり、図２の例示的なシナリオ２００に描かれているような記憶装置１０６の障害１１８の場合に脆弱であるままとなる。正しくないデータを与える可能性のため、記憶セット１０２にアクセスすることをプロセスに許容するのは賢明でないことがありうる。したがって、そのようなプロセスは、スキャンが完了するまで（あるいは少なくとも、当該プロセスによって利用されるデータセット１０４がクリーニング済みとなるまで）ブロックされる必要があることがある。その結果、サービスの中断またはダウンタイムが生じる。さらに、記憶セット１０２全体のこの長引く、コスト高なスキャンは、ほんの一つの記憶装置１０６の潜在的には短期間の障害１１８によってトリガーされることがあり、障害１１８の際のペンディングの書き込み１１０の数に対して不相応であることがありうる。実際、たとえ障害１１８の時点で進行中の書き込み１１０がなかったとしても、破局的な結果をもちうる非一貫性１２２の可能性のため、ペンディングの書き込み１１０の数が判別できなければ、記憶セット１０２全体のスキャンを呼び出す必要があることがある。
【００２１】
これらの考察に鑑み、ハードウェアおよび／またはソフトウェアの突然の障害１１８に備えて、記憶セット１０２の通常の動作中に、ペンディングの書き込み１１０についての情報を記憶する機構を提供することが望ましいことがありうる。この情報は、障害が起こった場合に非一貫性１２２を呈しうる記憶セット１０２の「ダーティー」な状態についての情報として記録されてもよい。さらに、電力障害の場合にその情報を保持するために、その情報を不揮発性メモリに記録することが望ましいことがありうる。この追跡は、障害１１８後に呼び出されるクリーニング・プロセスであって、該クリーニング・プロセスが、障害１１８の時点においてペンディングの書き込み１１０に関わっていた記憶セット１０２の領域のみをスキャンすることに限定されるようなものを可能にしうる。
【００２２】
図３は、一組の記憶装置１０６によって提供される記憶セット１０２のための、不揮発性メモリにおいて「ダーティー」状態を記録する二つの技法を提示している。第一の例示的な技法３００として、記憶セット１０２に記憶されるデータの各ビットについて、そのビットへのペンディングの書き込み２０２を示す「ダーティー」指示子３０２が記憶されてもよい。ビットについての「ダーティー」指示子３０２は、ビットへの書き込み２０２を開始する前にセットされてもよく、書き込み２０２が完了した後にクリアされてもよい。記憶セット１０２をクリーニングするために、ビットの「ダーティー」指示子３０２が検査されてもよく、セットされている「ダーティー」指示子３０２があればそれが関連付けられたビットのクリーニングを開始しうる（たとえば、非一貫性のあるビットの上に、異なる記憶装置１０６に記憶されているデータセット１０２の同一のコピーから対応するビットをコピーすることによる）。
【００２３】
この第一の例示的な技法３００は、いくつかの利点を呈しうる。たとえば、不揮発性記憶媒体におけるペンディングの書き込み１０４についての情報の記憶を達成しうるし、少量の追加的なハードウェアまたはソフトウェアに関わる比較的単純なクリーニング・プロセスを伴いうるし、他の検出方法（たとえばいくつかの記憶装置１０６から取得された大きなデータセット１０４に対してXOR演算を実行すること）に比べてクリーニングの計算量を低減しうる。しかしながら、この第一の例示的な技法３００も多くの不都合な点を呈する。第一の例として、「ダーティー」指示子３０２は記憶セット１０２の記憶スペースの半分を費消してしまう。第二の例として、スキャン・プロセスは相変わらず記憶セット１０２全体のスキャンに関わり、たとえスキャン検出の相対的な単純さのため、必要とされる計算パワーが低減されるとしても、記憶セット１０２全体へのアクセスはそれでも長引くクリーニング・プロセスにつながりうる。さらに、記憶セット１０２へのアクセス・レートがクリーニング・プロセスにおけるボトルネックである場合には、クリーニング・プロセスの継続時間は変わらないことがありうる。第三の例として、「ダーティー」指示子３０２が記憶装置１０６の追跡されるビットとの物理的な近傍に（たとえば記憶装置１０６の物理媒体上の各ビットまたはバイトに後続して）記憶されている場合、ビットの破損につながる障害１０８は「ダーティー」指示子３０２の破損にもつながることがある。あるいはまた、「ダーティー」指示子３０２が同じ記憶装置１０６の異なる領域に記憶される場合、いかなる単一のビットの書き込み２０２も、記憶装置１０６の三つの異なる部分への三つのアクセスに関わる――たとえば、ビットをダーティーとしてマークするための、「ダーティー」指示子３０２を記憶する領域への第一のシークおよびアクセス；書き込み２０２を実行するための、ビットを記憶する領域への第二のシークおよびアクセス；およびビットをクリーンとしてマークするための「ダーティー」指示子３０２を記憶している領域への第三のシークおよびアクセスである。これら複数のアクセスは、記憶装置１０６のパフォーマンス（たとえばレイテンシーおよびスループット）を大幅に低下させることがありうる。さらに、「ダーティー」ビット追跡のこの変形によって引き起こされる記憶装置１０６の組織的な使用に関わる増大した物理的な摩滅は、意図せずして、記憶装置１０４の物理的障害１１８を早めることになりかねない。
【００２４】
図３は、一組の記憶装置１０６によって提供される記憶セット（storage  set）１０２についての「ダーティー」情報を追跡するための第二の例示的な技法３０４をも描いている。この第二の例示的な技法３０４は、記憶セット１０２のそれぞれのバイトについての「ダーティー」指示子が記録されうる別個の不揮発性メモリ３０６、たとえば別個のバッテリー３０８を有する半導体記憶デバイスを含めることに関わる。たとえば、それぞれのデータセット１０４の書き込み２０２の要求はモニタリングされ、この別個の不揮発性メモリ３０６に記録され、書き込み２０２が完了したときにクリアされてもよい。
【００２５】
この第二の例示的な技法３０４は、一般的に、また図３に示した第一の例示的な技法３０４に対して、いくつかの利点を呈する。第一の例として、別個の不揮発性メモリ３０６のアクセスは記憶セット１０２への書き込み２０２の実行と同時並行して起こりうるので、記憶装置１０６のパフォーマンス（たとえばレイテンシーおよびスループット）は、この技法を含めることによって減退しないことがありうる。第二の例として、「ダーティー」指示子３０６をメモリの別個の部分に記憶することは、記憶セット１０２の容量を減らすことを回避しうる。第三の例として、「ダーティー」指示子３０２の記憶を記憶装置１０６の物理的な媒体から分離することは、記憶セット１０２の障害１１８の場合に「ダーティー」指示子３０２を保存しうる。たとえば、記憶装置１０６の一部における物理的な欠陥が、欠陥のある部分に記憶されたバイトについての「ダーティー」指示子３０２の記憶や取り出しに影響しないことがあり、電力障害の場合、別個の不揮発性メモリ３０６はバッテリー３０８を使って動作し続けることができる。第四の例として、別個の不揮発性メモリ３０６においてダーティーと示されているバイトのみに集中することによって、クリーニング・プロセスが、かなり長引かされることができる。
【００２６】
しかしながら、この第二の例示的な技法３０４も独特の不都合な点を呈する。第一の例として、別個のハードウェアを含めることは、記憶セット１０２のコストおよび複雑さを有意に高める。第二の例として、記憶装置１０６の障害の可能性に加えて、記憶セット１０２の管理は、別個の不揮発性メモリ３０６の障害にも対処しなければならないことがある。さらに、別個の不揮発性メモリ３０６は記憶セット１０２に記憶されていないので、記憶セット１０２の冗長性および故障耐性を増進するための機構には含まれず、別個の不揮発性メモリ３０６の単一の障害が記憶セット１０２全体についての「ダーティー」指示子３０２の喪失につながりうる。第三の例として、記憶セット１０２のそれぞれのバイトについての「ダーティー」指示子３０２の追跡は、このタスクを満たすために高いスループットおよび大きな容量を提供しなければならないことがありうる別個の不揮発性メモリ３０６のアクセスの数の多さおよびレートの高さにつながりうる。実際、別個の不揮発性メモリ３０６は、記憶セット１０２中の最高の記憶装置１０６についてのみならず、別個の不揮発性メモリ３０６によってサービスされる全記憶装置１０６の活動の組み合わされたレートについて書き込み活動を記録するための十分なスループットを提供しなければならないことがありうる。第四の例として、別個の不揮発性メモリ３０６が記憶装置１０６と統合されない場合（たとえば、RAIDコントローラにおいて実装される場合）、「ダーティー」指示子３０２は、記憶装置１０６ほどポータブル（portable）ではないことがありうる。たとえば、RAIDコントローラの無関係な障害の場合、記憶装置１０６は異なるRAIDコントローラに再配置され、該異なるRAIDコントローラによってアクセスされてもよいが、「ダーティー」指示子３０２は、フルに動作している障害を起こしたRAIDコントローラの別個の不揮発性メモリ３０６内に留まることがありうる。実際、別個のRAIDコントローラ中に挿入されているときは、ユーザーにとって、RAIDコントローラの障害に関わっていなかった記憶装置１０６がなぜ非一貫でありえ、よってクリーニングされなければならないことがありうるのか、はっきりしないことがありうる。これらおよびその他の不都合な点は、記憶セット１０２への書き込み２０２の状態を追跡することによって障害１１８からの記憶セット１０２の回復を容易にする、図３のものに似た多くの技法によって示されることがある。
【００２７】
〈Ｂ．提示される技法〉
本稿に提示されるのは、故障耐性があり、高性能で、コスト効率のよい仕方で高速なクリーニング・プロセスを可能にしうる、一組の記憶装置１０６によって提供される記憶セット１０２への書き込み２０２の状態を追跡するための技法である。これらの技法によれば、記憶セット１０２は、特定の領域サイズの諸領域（たとえば一ギガバイトの領域）に配分されてもよく、各領域内の一つまたは複数の位置１０８への書き込み１１０のペンディング状態を記録するために、領域記述子が生成されてもよい。領域記述子は、領域が位置しているのと同じ記憶装置１０６上に、または記憶セット１０２の異なる記憶装置１０６上に記憶されていてもよい。特定の位置１０８への書き込み１１０の要求が受領されると、本技法のある実施形態は、まず、位置１０８を含んでいる領域を同定してもよく、次いで、位置１０８を含んでいる領域の領域指示子がすでにダーティーとマークされているかどうかを判別してもよい。すでにダーティーとマークされていなければ、本実施形態は、まず、その領域をダーティーとマークするようその領域指示子を更新してもよい。だが、すでにダーティーとマークされていたら、本実施形態は、領域指示子を更新する必要なく書き込み１１０を進めてもよい。書き込み１１０が完了したのち、本実施形態は、その領域の領域指示子をクリーンとしてマークしてもよい。特に、本実施形態は、すぐにその領域をクリーンとして更新しないよう構成されていてもよく、そうする前に短期間待ってもよい。同じ領域に対する書き込み１１０（同じ位置１０８の上書きまたはシーケンシャルに後続するデータセット１０４もしくは他の仕方で近くのデータセット１０４への書き込み１１０のいずれであれ）のその後の要求が最初の書き込み１１０のすぐあとに続く場合に備えてである。この遅延は、領域指示子の「クリーン」への書き換えのすぐあとに領域指示子を「ダーティー」に書き換えることを避けることができ、よって記憶装置１０６へのアクセスを節約し、記憶装置１０６のパフォーマンスおよび寿命を向上させることができる。
【００２８】
図４は、本稿で提示される技法に基づく二つの記憶装置１０６によって提供される記憶装置１０２へのペンディングしている書き込み１１０の追跡を現わす例示的なシナリオの図解を示している。ここで、記憶装置１０６は協調して、記憶セット１０２の同一のコピーを記憶する（たとえば、RAID  1方式に基づく記憶セット１０２のミラーリング）。この例示的なシナリオ４００において、本技法によれば、記憶装置１０６によって提供される記憶セット１０２はある領域サイズの領域４０２（たとえば、一ギガバイトの領域）に配分される。各領域４０２は、記憶セット１０２内の位置１０８のあるセット（たとえばある範囲のアドレス）内に記憶されるデータセット１０４を含んでいる。各記憶装置１０６上で、領域記述部４０４が生成されてもよい。ここで、領域４０２は、その領域４０２をなすデータセット１０４に対して実行される書き込み１１０のペンディングまたは完了状態に従って「ダーティー」または「クリーン」とマークされてもよい。たとえば、第一の時点４０８では、記憶セット１０２内の第一の位置１０８に対して第一の書き込み１１０が要求され、記憶装置１０６は、まず、第一の位置１０８を含んでいる領域４０２を同定し、次いで領域記述子４０４においてその領域４０２をダーティーとマークすることによって、第一の書き込み１１０の実行を開始する。領域４０２をダーティーとマークしたら、記憶装置１０６は次いで記憶セット１０２内の位置１０８への第一の書き込み１１０を開始する。第二の時点４１０において、第一の記憶装置１０６は第一の書き込みを完了していることがありうるが、まだ領域記述子４０４において領域４０２をクリーンとマークしていなくてもよい。しかしながら、記憶装置１０６の不完全な同期のため、第二の時点４１０において、第二の記憶装置１０６がまだ第一の書き込み１１０を完了していないことがありうる。
【００２９】
図４の例示的なシナリオにおいてさらに示されるように、第三の時点４１２において、記憶セット１０２内の異なる位置１０８に対して第二の書き込み１１０が要求されてもよい。したがって、記憶装置１０６は第二の書き込み１１０の位置１０６に関連付けられた領域４０２を同定し、この位置１０６も第一の領域４０２内であることを判別する。さらに、第一の領域４０２はすでに領域記述子４０４においてダーティーとマークされているので、記憶装置１０６は領域記述子４０４を冗長に更新することを控える。次いで、記憶装置１０６は書き込み１１０の実行を開始し、第二の記憶装置１０６は最終的には書き込み１１０を完了し、次いで（可能性としては、第一の領域４０２へのさらなる書き込み１１０が要求されない短い遅延ののちに）領域記述子４０４を更新して第一の領域４０２をクリーンとマークする。しかしながら、第一の記憶装置１０６によって実行された書き込み１１０は障害１１８（たとえば、一時的な切断、ソフトウェア・クラッシュまたは電力障害）によって中断される。第四の時点４１４では、第一の記憶装置１０６は再びアクセス可能になり、障害１１８によって中断され、訂正されなければ記憶セット１０２中の潜在的には破局的な非一貫性１２２（たとえば、記憶装置１０６上に記憶された記憶セット１０２の同一の諸コピーの乖離）を呈しうる書き込み１１０の訂正を保証するよう、第一の記憶装置１０６をクリーニング４１６するタスクが開始される。しかしながら、データセット１０４のすべてを第二の記憶装置１０６の対応するデータセット１０４と比較するのではなく、クリーニング４１６は、領域記述子４０４を利用してもよく、ダーティーとマークされた領域４０２のみをクリーニングしてもよい。このように、第四の時点４１４においては、第一の記憶装置１０６の領域記述子４０４において第一の領域４０２のみがダーティーとマークされているので、クリーニング４１６は第一の領域４０２のデータセット１０２を第二の記憶装置１０６の対応するデータセット４１６と比較してもよく、非一貫性を見出したら、第一の記憶装置１０６上の正しくないデータセット１０４上にデータセット１０４をコピーしてもよい。
【００３０】
このようにして、図４の例示的なシナリオ４００に一例が描かれている本稿に提示される技法は、障害１１８後の記憶装置１０６のクリーニング４１６を可能にしうる。さらに、これらの技法は、図３に示したものを含め他の技法と比べて有利な仕方でこのクリーニング４１６を達成する。第一の例示的な例として、第一の記憶装置１０６のクリーニング４１６は、クラッシュ１１８の時点で少なくとも一回の書き込み１１０が最近発生していた領域４０２の部分集合に記憶されているデータセット１０４に限定される。たとえば、第二の領域４０２はしばらくの間書き込み１１０を経験していないので、第二の領域４０２はクリーニング４１６に含められない。第二の例示的な利点として、一組の領域４０２を含む領域４０６についてのダーティーおよびクリーン情報のマーク４０６ならびに書き込み１１０後にそのような領域４０２を遅れてクリーンとマークすることは、ダーティー領域の追跡によって引き起こされるパフォーマンス損失を著しく軽減しうる。たとえば、第一の書き込み１１０後に短期間にわたって第一の領域４０２のダーティーとのマーク付け４０６をそのままにしておくことにより、記憶装置１０６は、同じ領域４０２内の別の位置１０６への第二の書き込み１１０を受け取った際に再びダーティーとマークするだけのために領域４０２をダーティーとマークすること４０６を省略できる。それにより、領域記述子４０４への各記憶装置１０６によるアクセスが三回から一回に低減される。この効率性の利得は、ダーティー領域情報が位置１０８ごとに追跡されたり、あるいは記憶装置１０６が各書き込み１１０に続いて領域記述子４０４をすぐに更新したりしたとしたら（たとえば図３の第一の例示的な技法３００に示されるように）、達成し得なかったものである。第三の例示的な利点として、単独位置１０８ではなく領域４０６についての領域記述子４０４の記憶は、記憶装置１０６の利用可能な容量を著しく縮小することはない（これは、記憶装置１０６の全容量の50%が利用可能な容量のダーティーまたはクリーンを追跡するために使われる図３の第一の例示的な技法３００とは対照的である）。第四の例示的な利点として、ダーティー領域の追跡は、追加的なハードウェアなしで達成され、よって、図３の第二の例示的な技法３０４と比べ、コスト、複雑さ、電力消費および追跡技法の障害の機会を低減する。これらおよびその他の例示的な利点は、本稿に提示される技法に基づく、記憶セット１０２を提供する記憶装置１０６のためのダーティー領域情報の追跡を通じて達成可能でありうる。
【００３１】
〈Ｃ．例示的実施形態〉
図５は、記憶セット１０４へのペンディングの書き込みを記録する例示的な方法５００として描かれている、これらの技法の第一の例示的な実施形態の図解を示している。例示的な方法５００は、たとえば装置のメモリ・コンポーネント（たとえば、メモリ回路、ハードディスクドライブの円盤、半導体メモリ・コンポーネントまたは磁気もしくは光ディスク）に記憶された命令のセットであって、装置のプロセッサによって実行されたときに該装置に本稿に提示される技法を実行させるものとして実装されてもよい。例示的な方法５００は、５０２において開始され、プロセッサ上で命令を実行する（５０４）ことに関わる。具体的には、前記命令は、少なくとも一つの記憶装置１０６上で、該記憶装置１０６上に記憶される記憶セット１０２を、ある領域サイズに従って少なくとも二つの領域４０２に配分して領域記述子４０４を生成する（５０６）よう構成されている。前記命令はまた、記憶セット１０２中の位置１０８に記憶されるべきデータセット１０４を受領（５０８）したら、データセット１０２の位置１０８を含んでいる記憶セット１０２内の領域４０２を同定し（５１０）；領域記述子４０４においてその領域４０２をダーティーとしてマークし（５１２）；記憶セット１０２中の位置１０８におけるデータセット１０４の記憶を開始する（５１４）ようにも構成される。前記命令はまた、記憶セット１０２中の位置１０８にデータセット１０４を記憶した後、領域記述子４０４において領域４０２をクリーンとしてマークする（５１６）ようにも構成される。このようにして、前記命令は、本稿に提示される技法に基づく、記憶セット１０２内でペンディングの書き込み１１０の記録を達成し、よって例示的な方法５００は５１８において終了する。
【００３２】
図６は、プロセッサを有するコンピュータにアクセス可能な少なくとも一つの記憶装置１０６によって記憶される記憶セット１０２をクリーニングする（４１６）例示的な方法６００として描かれている、これらの技法の第二の例示的な実施形態の図解を示している。例示的な方法６００は、たとえば装置のメモリ・コンポーネント（たとえば、メモリ回路、ハードディスクドライブの円盤、半導体メモリ・コンポーネントまたは磁気もしくは光ディスク）に記憶された命令のセットであって、装置のプロセッサによって実行されたときに該装置に本稿に提示される技法を実行させるものとして実装されてもよい。例示的な方法６００は、６０２において開始され、プロセッサ上で命令を実行する（６０４）ことに関わる。具体的には、前記命令は、少なくとも一つの記憶装置１０６から、該記憶装置１０６上に記憶される記憶セット１０２をある領域サイズに従って少なくとも二つの領域４０２に配分する領域記述子４０４を取得する（６０６）よう構成されている。前記命令はまた、領域記述子４０４においてダーティーとマークされているそれぞれの領域４０２について（６０８）、それらの領域４０２内のデータセット１０４のクリーニング４１６を開始し、領域４０２内のデータセット１０４のクリーニングを完了したら、領域記述子４０４においてその領域４０２をクリーンとマークするようにも構成されている。このようにして、前記命令は、本稿に提示される技法に基づく、障害によって中断された書き込み１１０によって引き起こされた非一貫性１２２を訂正することによって記憶セット１０２のクリーニングを達成し、よって例示的な方法６００は５１８において終了する。
【００３３】
図７は、本稿に提示される技法を適用するよう構成されたプロセッサ実行可能命令７０２を有する例示的なコンピュータ可読媒体７００として示される、これらの技法の第三の例示的な実施形態を提示している。そのようなコンピュータ可読媒体はたとえば、メモリ半導体（たとえば、静的ランダム・アクセス・メモリ（SRAM）、動的ランダム・アクセス・メモリ（DRAM）および／または同期動的ランダム・アクセス・メモリ（SDRAM）技術を利用した半導体）、ハードディスクドライブの円盤、フラッシュメモリ・デバイスまたは磁気もしくは光ディスク（たとえばCD-R、DVD-Rまたはフロッピー(登録商標)ディスク）のような有体なデバイスに関わるコンピュータ可読記憶媒体を含んでいてもよく、装置７１０のプロセッサ７１２によって実行されたときに該装置７１０に本稿に提示される技法を実装させるコンピュータ可読命令のセットをエンコードしていてもよい。そのようなコンピュータ可読媒体は、さまざまな物理現象を通じて伝搬させられうる信号（たとえば電磁信号、音波信号または光信号）のようなさまざまな型の通信媒体をも（コンピュータ可読記憶媒体とは異なる技術のクラスとして）含みうる。そのような伝搬は、さまざまな有線シナリオ（たとえばイーサネット〔登録商標〕または光ファイバーケーブルを介する）および／または無線シナリオ（たとえばWiFiのような無線ローカル・エリア・ネットワーク（WLAN）、ブルートゥースのようなパーソナル・エリア・ネットワーク（PAN）またはセルラーもしくは電波ネットワーク）においてでありうる。そのような媒体は、装置のプロセッサによって実行されたときに該装置に本稿に提示される技法を実装させるコンピュータ可読命令のセットをエンコードしていてもよい。あるそのような実施形態では、プロセッサ実行可能命令７０２は、図５の例示的な方法５００のような記憶セット（storage  set）１０２をなす記憶装置１０６にペンディングの書き込み１１０を記録する方法を実行するよう構成されていてもよい。もう一つのそのような実施形態では、プロセッサ実行可能命令７０２は、図６の例示的な方法６００のような記憶装置１０６のうちの少なくとも一つに記憶された領域記述子４０４を使って記憶セット１０２をなす記憶装置１０６をクリーニングする方法を実行するよう構成されていてもよい。本稿に提示される技法に基づいて動作するよう構成される、多くのそのようなコンピュータ可読媒体が当業者によって考案されうる。
【００３４】
〈Ｄ．変形〉
本稿で論じられる技法は、多くの側面における変形をもって考案されてもよい。いくつかの変形は、追加的な利点を提示し、および／またはこれらおよび他の技法の他の変形に関する不都合な点を軽減しうる。さらに、いくつかの変形は、組み合わせて実装されてもよく、いくつかの組み合わせは、相乗作用を通じて追加的な利点および／または軽減された不都合な点を特徴としうる。そうした変形は、さまざまな実施形態（たとえば図５の例示的な方法５００および図６の例示的な方法６００）に組み込まれてそのような実施形態に対して個別的および／または相乗的な利点を付与しうる。
【００３５】
〈Ｄ１．シナリオ〉
これらの技法の実施形態の間で変わりうる第一の側面は、そうした技法が利用されうるシナリオに関する。この第一の側面の第一の変形として、これらの技法は、さまざまな型のデータセット１０４を有する多くの型の記憶セット１０２との関連で使用されうる。それには、さまざまな型のバイナリー・オブジェクトを記憶するバイナリー記憶システム；ファイルを記憶するファイル・システム；メディア・オブジェクトを記憶するメディア・ライブラリ；多くの型のオブジェクトを記憶するオブジェクト・システム；レコードを記憶するデータベース；電子メール・メッセージを記憶する電子メール・システムが含まれる。この第一の側面の第二の変形として、これらの技法は、ハードディスクドライブ、半導体記憶デバイス、不揮発性メモリ回路、テープ・ベースの記憶デバイスおよび磁気および光ディスクを含む多くの型の記憶デバイス１０６とともに使用されうる。そのような記憶装置１０６は、本技法を実装する（コンピュータのような）装置７１０に直接接続されてもよいし；有線または無線のローカル・エリア・ネットワーク（たとえば802.11  WiFiネットワークまたはアドホック接続または赤外線接続）を通じてアクセス可能であってもよいし；および／または有線または無線の広域ネットワーク（たとえば、セルラー・ネットワークまたはインターネット）を通じてアクセス可能であってもよい。さらに、これらの技法は二つ以上の記憶装置１０６とともに使われてもよいく、それら二つ以上の記憶装置１０６は、独立して動作する（たとえば、ソフトウェア・プロセスを通じて独立してアクセスされる記憶装置１０６）；ゆるやかに協働しつつ動作する（たとえば、独立して動作するが、記憶セット１０２を共有する他の記憶装置１０６について知らされており、これと通信してもよい記憶装置１０６）；または緊密な協働をもって動作する（たとえば、安価なディスクの冗長アレイ（RAID）コントローラがいくつかの記憶装置１０６を記憶システムのコンポーネントとして管理する）。この側面の第四の変形として、これらの技法の一部または全部が、コンピューティング環境内の一つまたは複数のコンポーネント内で、記憶装置１０６へのアクセスをもつコンピュータまたは装置の揮発性または不揮発性に記憶されているソフトウェア命令のセット（たとえば、オペレーティング・システム・プロセスまたはハードウェア・ドライバ）のように；記憶装置１０６とインターフェースをもつよう構成された記憶システム（たとえばRAIDコントローラ）によって；あるいは記憶セット１０２のそれぞれの記憶装置１０６において、実装されてもよい。
【００３６】
この第一の側面の第五の変形として、領域１０２内のデータセット１０４をクリーニングするために多くの型のクリーニング技法が使用されうる。第一の例として、図１の例示的なシナリオ１００において例示されているように、記憶セット１０２は（同じ記憶装置１０６上におよび／または異なる記憶装置１０６上に）データセット１０４の同一のコピーを記憶してもよい。この変形では、データセット１０４のコピーを、非一貫性１２２を検出および訂正するために当該データセット１０４の別のコピーと比較することによってクリーニングするために、ミラーリング・クリーニング技法が使用されてもよい。（たとえば、記憶セット１０２の第二の領域４０２に記憶されているミラー・データセットに対応する領域４０２のそれぞれのデータセット１０４について、該データセット１０４をミラー・データセットと同期させる。）第二の例として、図２の例示的なシナリオ２００に示されるように、記憶セット１０２は（同じ記憶装置１０６上におよび／または異なる記憶装置１０６上に）チェックサムまたはハッシュコードのような、それぞれのデータセット１０４の検証子２０２を記憶してもよく、非一貫性１２２を検出するために、そうした検証子がデータセット１０４（および可能性としては記憶セット１０２内の他のデータセット１０４）の内容と比較されてもよい。そのようなシナリオでは、多くの型の検証子を含めることができる。たとえば、パリティ・ビットのような比較的簡単な検証子２０２はデータセット１０４について効率的に計算されることができ、データセット１０４における非一貫性１２２の存在または不在の迅速な検出につながりうる。あるいはまた、向上した信頼性、向上した詳細さ（たとえば、データセット１０４のうち非一貫的である部分を示す）および／または誤り訂正機能など、追加的な特徴を呈する複雑な検証子２０２が利用されてもよい。これらの変形では、非一貫性１２２を同定し、可能性としては訂正するために、データセット１０４の検証子を検証することによってデータセット１０４をクリーニングするために、検証子クリーニング技法が使用されてもよい。第三の例として、データセット１０４は、以前に存在していなかったデータセット１０４の破損など、単に内容を検査することによってクリーニングされてもよい。非一貫性１２２が検出されたとき、破損したデータを修復するおよび／またはデータセット１０４中の残りのデータをサルベージするために、再構成技法が利用されてもよい。当業者は、本稿に提示される技法が有用となりうるシナリオの多くの型および変形を識別しうる。
【００３７】
〈Ｄ２．領域記述子構造の変形〉
これらの技法の実施形態の間で変わりうる第二の側面は、領域記述子４０４の性質に関する。この第二の側面の第一の変形として、記憶セット１０２は、多くの仕方で、領域記述子４０４内で同定される諸領域４０２に配分されてもよい。この第一の変形の第一の例として、領域サイズの選択が、本技法のさまざまな側面に影響しうる。たとえば、記憶セット１０２中の全位置１０８のダーティーまたはクリーンな状態を追跡することは、記憶セット１０２の容量のかなりの――おそらくは50%もの――損失につながることがあり、実際、クリーニング・プロセスの継続時間を有意に改善しないことがありうることが理解されうる。各ビットについてダーティーおよびクリーン・ビットを読むために記憶セット１０２全体をスキャンすることは、非一貫性１２２を検出するために記憶セット１０２全体をスキャンするのと同じくらいかかることがありうるからである。各ボリューム、各パーティションまたは各記憶装置１０６について単一の「クリーン」または「ダーティー」のマーク付け４０６を記憶するなど、記憶セット１０２の非常に大きな部分についてクリーンまたはダーティー状態を追跡することは、復旧がきわめて引き延ばされるという性質を、受け容れられるくらいには軽減しえないことも理解されうる。大きなボリュームまたは記憶装置１０６における単一位置２０６への書き込みがボリュームまたは記憶装置１０６全体のクリーニング４１６につながることがあるからである。これらの考察に鑑み、領域サイズの選択が本稿で提示される技法のパフォーマンスにかなり影響しうることが理解されうる。しかしながら、領域サイズについて、それぞれ何らかのトレードオフを呈しうる、受け容れ可能な選択肢の範囲が存在しうる。たとえば、より大きな領域サイズを選択することは、より粗い粒度レベルで「ダーティー」および「クリーン」領域の追跡を可能にでき、これはペンディングの書き込み１１０の追跡の使用のための記憶セット１０２の容量の消費を軽減するとともに、領域記述子４０４が領域４０２をクリーンまたはダーティーとしてマークするために更新される頻度も低下させるが、障害１１８後のより長いクリーニング４１６を必要とすることがありうる。ある領域４０２がダーティーとしてマーク付け４０６されている場合により大きな領域４０２のクリーニング４１６につながるからである。逆に、より小さな領域サイズを選択することは、より細かい粒度でのペンディングの書き込み１１０の追跡となって、障害１１８後、クリーニングされるべきデータセット１０４の、より限定された、精密な指定のため、比較的迅速なクリーニング４１６を可能にしうるが、記憶セット１０２の容量のより大きな消費（領域記述子４０４がより多くの領域４０２についての情報を含むため）および／または記憶セット１０２のルーチン動作におけるより大きなパフォーマンス・ペナルティ（さまざまな位置１０８への書き込み１１０のセットが、それぞれ記憶セットのより小さな諸部分をカバーするより多くの領域４０２と関連付けられる可能性が高いため）につながりうる。
【００３８】
これらの考察に鑑み、記憶セット１０２の領域４０２の領域サイズ（単数または複数）を選択または指定するために、多くの技法が使用されうる。たとえば、領域サイズは、特定の記憶セット１０２または記憶装置１０６について固定的に定義されてもよい。異なる領域サイズが、異なる記憶装置１０６について（たとえば、アーカイブ化のような、パフォーマンス特性がコンピューティング環境に有意に影響しない状況で使われる記憶装置１０６は、パフォーマンスをより著しく低下させるが、より速いクリーニング４１６および障害１１８からの復旧を提供するより小さな領域サイズを使ってもよい）、および／または異なる記憶セット１０２について（たとえば、アクセシビリティが貴重であるデータは、より速いクリーニング４１６および障害１１８からの復旧を可能にする、より小さな領域サイズを使って追跡されてもよい）選択されてもよい。同じデータセット１０２中の異なる領域４０２について異なる領域サイズを利用してもよい。領域サイズはまた、記憶装置１０６および／または記憶セット１０２のパフォーマンス特性に基づいて、および／またはユーザー選好に基づいて調整されてもよい。代替的または追加的に、ユーザーが領域サイズを選ぶことが許されてもよい。たとえば、ある実施形態は、領域サイズについてユーザーにいくつかの選択肢を提示してもよく、各領域サイズに鑑みての障害１１８からの復旧に係る回復時間を予測してもよい。もう一つの代替として、ユーザーが、最大の受け容れ可能な回復期間を指定してもよく、本技法のある実施形態は、最大の受け容れ可能な回復期間内で障害１１８からの回復を可能にする可能性が高い領域サイズを選択してもよい。
【００３９】
この第二の側面の第二の変形として、領域記述子４０４はさまざまな仕方で、たとえばアレイ、連結リスト、テーブル、データベースまたはビットマップとして、構成されてもよい。さまざまなデータ構造は特定の利点を呈してもよい。一つのそのような例として、単一の次元をもつアドレッシング・システムをもって（たとえば、アドレスの単一の数値シーケンスとして）記憶されているアドレスを有する記憶セット１０２について、領域記述子４０４は、記憶セット１０２の諸領域４０２に逐次対応する諸アレイ・エントリーのセットを有するダーティー領域アレイとして実装されてもよく、単に該ダーティー領域アレイのアレイ・エントリーにアクセスすることによって領域４０２をダーティーまたはクリーンとしてマークしてもよい。これは、任意の領域４０２についてのマーク付け４０６へのO(1)のアクセス時間を達成する。あるいはまた、領域記述子４０４は、シーケンシャルなジャーナルとして実装されてもよい。ここで、各マーク付け４０６は、マークされたデータセット１０４の記憶セット１０２中の位置１０８に関わりなく、以前にコミットされたマーク付け４０６にシーケンスにおいて続いて書き込まれる。この領域記述子４０４は、特定の領域４０２についてのマーク付け４０６に対してより遅い読み出しアクセスにつながりうる（あるエントリーについての現在のマーク付け４０６を同定することは、エントリーを見出すためにジャーナルのかなりの部分、可能性としてはジャーナル全体をスキャンすることになるため）が、領域記述子４０２へのシーケンシャルな諸書き込みのさらなるパフォーマンス利点を可能にしうる。さらに、領域記述子４０４の意味内容は種々の仕方で情報を含んでいてもよい。たとえば、領域術子４０４は、領域４０２を表わすレコードまたはビットを特定的にマークする４０６ことによって領域４０２を「クリーン」としてマークしてもよいし、あるいは、クリーニングされた領域４０２についてのレコードを領域記述子４０４から放逐することによってそれを行なってもよい。これらの変形は、領域記述子４０４内にレコードをもたない領域４０２がクリーンとしてマークされたか（おそらくは最近）、あるいは単にダーティーともクリーンともマークされなかったのか（たとえばかなりの時間の長さにわたって書き込み１０４を受けなかった）について内容的な差を表わす。
【００４０】
この第二の側面の第三の変形として、領域記述子４０４はさまざまな仕方で記憶セット１０２内の領域４０２の位置１０８を示しうる。図８は、それぞれの領域４０２によって表わされる記憶セット１０２内の位置を指定するためのいくつかの異なる技法を備える例示的なシナリオ８００の図解を示している。この例示的なシナリオ８００では、ハードディスクドライブのような記憶装置１０６は、記憶セット１０２の少なくとも一部を含むデータを記憶するよう構成される。記憶装置１０６は、それぞれの物理アドレス８０２にデータを記憶するよう構成されており、該アドレスを記憶媒体（たとえば、円盤、セクタおよびトラック）上の物理位置に変換するハードウェアを含む。記憶装置１０６上に記憶されるデータは、標準化されたフォーマットに従って記憶されてもよい。たとえば、物理的な媒体上に記憶されるデータは、一つまたは複数のパーティション８０４の位置および記述を指定するパーティション・テーブルで始まっていてもよい。各パーティションは一つまたは複数の論理ボリューム８０６（たとえば、コンピュータの操作環境において提示されるドライブ）を含む。記憶セット１０２は、一つまたは複数の論理ボリューム８０６内に記憶されてもよく、ある論理ボリューム８０６において、あるいはいくつかの論理ボリューム８０６を横断して、データセット１０４を割り当ててもよい。よって、領域記述子４０４は、さまざまな仕方で記憶セット１０２内のさまざまな位置１０８について領域４０２を同定しうる。たとえば、領域記述子４０４は、記憶セット１０２の記憶装置１０６上のそれぞれの領域４０２の物理的な位置を同定する物理的領域参照方式を利用してもよい。第一のそのような例として、領域記述子４０４は、各領域４０２によって表わされる記憶装置１０６の記憶媒体上の物理的な諸位置１０６の範囲を示すレコードを含む第一の領域テーブル８０８として実装されてもよい。第二のそのような例として、領域記述子４０４は、それぞれの領域４０２について、パーティション８０４およびパーティション８０４内で各領域４０２が始まるところのオフセットを示すレコードを含む第二の領域テーブル８１０として実装されてもよい。領域記述子４０４はまた、一つまたは複数の領域の領域サイズ（単数または複数）を記憶し、表現してもよい（たとえば、記憶セット１０２の領域レコードまたは別個の記述子として）。第三の例として、領域記述子４０４は、領域ビットマップ８１２として実装されてもよい。領域ビットマップでは、諸パーティション８０４が特定の領域サイズの一連の領域４０２に配分されてもよく、該ビットマップは、領域４０２の「ダーティー」または「クリーン」状態の一ビット指標を記憶してもよい。あるいはまた、領域記述子４０４は、記憶セット１０２中のデータの論理的な配置内でそれぞれの領域４０２の論理的な位置を同定する論理的領域参照方式を利用してもよい。一つのそのような例として、領域記述子４０４は、各領域４０２が始まる各論理ボリューム８０６内の論理的な位置を同定する第三の領域テーブル８１４として実装されてもよい。記憶装置１０６の記憶媒体上の物理的な位置１０６とより密接に同定されるアドレッシング技法は、記憶装置１０６にとってはほとんど計算を必要とせず、論理的に領域４０２にアクセスするプロセスにとってはより多くの計算を含み、逆もまたしかりであることが理解されうる。
【００４１】
この第二の側面の第四の変形として、これらの技法の実施形態は、記憶装置１０６上のさまざまな位置において領域記述子４０４を記憶するよう構成されていてもよい。この第四の変形の第一の例として、領域記述子４０４は、記憶装置４０４上の特定の位置に記憶されてもよい（たとえば、記憶セット１０２の諸データセット１０４を記憶しているあるパーティション８０４の上に、あるいは該諸データセット１０４を記憶している諸パーティション８０４の外部のある定義された位置に）。この第四の変形の第二の例として、領域記述子４０４は、第二の記憶装置１０の諸領域４０２へのペンディングの書き込み１１０を追跡するために第一の記憶装置１０６に記憶されてもよい。
【００４２】
この第二の例の第五の変形として、これらの技法のある実施形態は、記憶セット１０２について二つ以上の領域記述子４０４を記憶するよう構成されていてもよい。この第五の変形の第一の例として、記憶セット１０２の領域４０２の同じセットを表わす領域記述子４０４の二つ以上の同一のコピーが、同じおよび／または異なる記憶装置１０６に記憶されてもよい。同一のコピーの記憶は、記憶セット１０２の故障耐性を改善しうる（たとえば、記憶装置１０６の回復不能な障害、領域記述子４０４を記憶している記憶装置１０６の部分の障害または領域記述子４０４内のデータの破損、たとえば領域記述子４０４への書き込み１１０を実行している間の障害１１８の発生の場合）。障害１１８からの回復は、領域記述子４０４の別のコピーの使用を通じて実行されてもよい。バックアップ施策として記憶セット１０２の完全クリーニング４１６が実行されうるので、領域記述子４０４の障害が破局的となる可能性は高くないものの、それでも、第一のコピーが破損または利用不能となっても回復をすみやかに行なうために、領域記述子４０４の第二のコピーを記憶しておくことが有利であることがあることは理解されうる。さらに、領域記述子４０４の同一のコピーを複数の記憶装置１０６上に、あるいは同じ記憶装置１０６の異なる領域に記憶することが有利でありうる。（たとえば、ファイル・システムの第一の物理セクタまたは第一の部分など領域記述子４０４の第一のコピーが記憶されている記憶装置１０６の部分への損傷の場合、記憶装置１０６の異なる部分に記憶されていた当該領域記述子４０４の第二の同一のコピーが取得可能かつ使用可能でありうる。）
この第五の変形の第二の例として、領域４０２の特定のセットについての領域記述子４０４の複数のコピーが一つまたは複数の記憶装置１０６に記憶されてもよいが、常に同一であるのではなく、それらの領域記述子４０４は、種々の時点における記憶セット１０２のクリーンおよびダーティー状態を反映させるよう逐次更新されてもよい。この逐次的な更新は、たとえば領域記述子４０４のコピーを更新している間に障害１１８が発生して領域記述子４０４が非一貫的なまたは破損した状態となる場合に、有利でありうる。クリーニング４１６および回復において他方のコピーが利用可能でありうるからである。この第二の例についての第一のシナリオとして、いずれも領域４０２の同じセットを表わす、領域記述子４０４の二つのコピーが記憶装置１０４上で保持されてもよい。だが、それらの領域記述子４０４を更新するために、第一の更新は、領域記述子４０４の一方のコピーを上書きすることによって行なわれてもよく、次の更新は領域記述子４０４の他方のコピーを上書きすることによって行なわれてもよい。さらに、本技法のある技法が領域記述子４０４に上書きするとき、該実施形態は、領域記述子４０４のための検証子２０２（たとえばチェックサム）およびシーケンス・インジケーター（たとえばインクリメントする整数または上書きの時刻）をも書き込んでもよい。障害１１８に続いて、本実施形態は、利用可能な領域記述子４０４のすべてを検査してもよく、その検証子２０２に基づいて有効であるもののうち最高のシーケンス・インジケーター（たとえば、最高のインクリメントする整数または最新の書き込み時刻）を有する領域記述子４０４を、クリーニングにおいて使うために選択してもよい。領域セットのわずかに古くなったバージョンを使ってクリーニング４１６を実行することが、非一貫性１１８をもつ領域４０２をクリーニングし損なうこと（たとえば、擬陰性）につながらないことがあることは理解されうる。領域４０２への書き込み１１０は、該領域４０２のマーク付け４０６が、最高のシーケンス・インジケーターおよび有効な検証子２０２をもつ完全に書き込まれた領域記述子４０４の形で記憶セット１０２にフルにコミットされたあとにのみ始まるからである。そのため、領域記述子４０６を書き込んでいる間の障害１１８はペンディングの書き込み１１０を記録し損なうことにつながらいのである。逆に、古くなった領域記述子４０２は擬陽性につながりうる。（たとえば、ある領域記述子４０４の書き込みの際の障害１１８は、以前にダーティーだった領域４０４をクリーンとするマーク付け４０４が失われることにつながることがあり、領域４０４は、古くなった領域記述子４０４に見出されるマーク付け４０６のために回復の際に誤ってダーティーとして扱われることがありうる。）だが、この不正確さは単に、クリーンであるとわかっていた領域４０４のクリーニング４１６に関わるわずかに引き延ばされた回復につながるのみである。
【００４３】
代替的または追加的に、領域４０２のあるセットについての領域記述子４０４の二つ以上のコピーが、記憶セット１０２の記憶装置１０６のそれぞれに冗長に記憶されてもよい。記憶セット１０２について領域記述子４０４を更新するために、ある実施形態は、記憶装置１０６のすべてで並列に領域記述子４０４の上書きを開始してもよい。さらに、各記憶装置１０６は、記憶装置１０６の一つまたは複数が領域記述子１０６を更新している間に障害１１８が発生するといけないから、領域記述子４０４とともに検証子２０２およびシーケンス・インジケーターを含んでいてもよい。記憶セット１０２の一つまたは複数の記憶装置１０６の障害１１８からの回復は、まず、それぞれの検証子２０２によって有効確認される全コピーのうちで最も大きなシーケンス・インジケーターをもつコピーを同定するために、利用可能な領域記述子１０６全部を検査することを含んでいてもよい。実際、各記憶装置１０６上に領域記述子４９４の二つのコピーを記憶するよう記憶セット１０２を構成することが有利でありうる。たとえば、記憶装置１０６全部の上の領域記述子４０４を更新している間に障害１１８が発生する場合、いずれかの記憶装置１０６上のわずかに古くなったコピーが使用可能であることがある。あるいはまた、同様に、領域記述子４０４のすべてを同時に更新せず、領域記述子４０４の第一の更新を記憶装置１０６の第一の部分集合に記憶されているコピーに対して実行し、領域記述子４０４の後続の更新を記憶装置１０６の第二の部分集合に記憶されているコピーに対して実行することが有利であることがある。
【００４４】
この第五の変形の第三の例として、記憶セット１０２は、該記憶セット１０２の異なる領域４０２に対する更新をそれぞれ記録する二つ以上の領域記述子４０４を含んでいてもよい。第一のそのような例として、第一の領域記述子４０４は、第一の記憶装置１０４に記憶されている記憶セット１０２の諸領域４０２についてダーティーおよびクリーン領域情報を記録してもよく、第二の領域記述子４０４は、第二の記憶装置１０４に記憶されている記憶セット１０２の諸領域４０２についてダーティーおよびクリーン領域情報を記録してもよい。第二のそのような例として、記憶セット１０２を諸領域４０２に配分したのち、本技法のある実施形態は、それぞれ（領域４０２の記憶セット１０２の記憶装置１０６の間での物理的な位置に関わりなく）領域４０２の部分集合を含む領域セットについて「ダーティー」および「クリーン」情報を記憶する二つ以上の領域記述子４０４を生成してもよい。それは、生成され、一つまたは複数の記憶装置１０６に記憶されてもよい。諸領域４０２の諸記憶セットへの配分は、たとえば、それぞれのデータセット１０４の特性に鑑みて選択されてもよい。（たとえば、第一の領域セットは、より貴重なまたはより機微なデータを記憶する領域４０２を含んでいてもよく、第二の領域セットはそれほど貴重でないデータを記憶する領域４０２を含んでいてもよい。）代替的または追加的に、二つ以上の領域記述子４０４に対するそれらの領域の分配は、明示的に達成されてもよいし（たとえば、それぞれ領域４０２の指定されたセットを表わす二つ以上の独立した領域記述子４０４を生成することによって）、あるいは暗黙的に達成されてもよい（たとえば、当該領域記述子４０４についての記憶スペースを、二つ以上の記憶装置１０６など二つ以上のスペース割り当てを横断して、分配することによって）。さらに、いくつかのシナリオでは、記憶セット１０２の領域４０２のある部分集合についてのみダーティーおよびクリーン情報を追跡することが望ましいことがある。たとえば、キャッシュまたはインデックスのような、破損したら記憶セット１０２の他のデータから再生成できる、処分可能なデータを含む領域４０２は全く追跡されなくてもよい。
【００４５】
この第二の側面の第六の変形として、領域記述子（単数または複数）４０４は、記憶セット１０２の同期技法に適合する仕方で記憶されてもよく、異なる記憶装置１０６上の領域記述子４０４のいずれかの同一のコピーにアクセスする機能および／または記憶セット１０２と同様の故障耐性を通じて、領域記述子４０４に対して、向上したパフォーマンスなど、さまざまな特徴および利点を提供してもよい。（たとえば、記憶セット１０２が、記憶装置障害許容度の範囲内の記憶装置１０６の障害からの回復機能など、故障耐性のある記憶技法を実装する場合、領域記述子４０４は、同じ障害耐性のある記憶技法を使って記憶されてもよい。）あるいはまた、領域記述子４０４は、別個の技法のセットを可能にする仕方で記憶されてもよい。たとえば、それぞれの領域記述子４０４は、該領域記述子４０４の領域記述子検証子とともに記憶されてもよく、領域４０２が該領域記述子４０４において「クリーン」または「ダーティー」としてマークされるときに更新されてもよく、よって、領域記述子４０４の完全性の検証を可能にしてもよい。当業者は、本稿に提示される技法に基づいて生成および利用されうる領域記述子４０４の多くの型およびフォーマットを考案しうる。
【００４６】
〈Ｄ３．領域記述子の使用の変形〉
これらの技法の実施形態の間で変わりうる第三の側面は、記憶セット１０２の領域４０２をクリーンまたはダーティーとしてマークするための領域記述子４０４の使用に関する。この第三の側面の第一の変形として、領域記述子４０４の使用は、該領域記述子４０４の容量の管理を容易にするよう設計されてもよい。いくつかの型の領域記述子４０４では、図８の例示的なシナリオ８００における領域ビットマップ８１４のように、領域４０２がマークされるときに容量は変わらなくてもよい。しかしながら、他のシナリオでは、図８の例示的なシナリオ８００において描かれた領域テーブルにおけるように、領域４０２のマーク付け４０６が領域記述子４０４の容量に影響してもよい。たとえば、領域記述子４０４がそれぞれの領域４０２についてのレコードを記憶しており、領域記述子４０４がある領域４０２を「クリーン」としてマークするのを、単に当該レコードを放逐することによって行なってもよい。あるいはまた、領域記述子４０４は「クリーン」とマーク付けされた領域４０２についてのレコードを記憶し続けてもよく、後刻（たとえば、その領域４０２への別の書き込み１１０が行なわれることなく指定された時間期間が過ぎたのちに、あるいは領域記述子４０４の容量が尽きたときに）、「クリーン」領域４０２についてのレコードを放逐してもよい。この第三の側面の第二の例として、領域記述子４０４の容量は静的に（たとえば、固定サイズの領域記述子４０４）または動的に（たとえば初期にはある領域記述子スペースを割り当てられているが、領域記述子４０４が、合わせると領域記述子４０４の容量を使い果たす諸領域４０２についてのレコードで満たされる際に拡張されうるサイズ変更可能な領域記述子４０４）割り当てられてもよい。
【００４７】
この第三の側面の第二の変形として、領域記述子４０４の使用は、領域記述子４０４への書き込み１１０の数および頻度を減らすために選択されてもよい。たとえば、領域記述子４０４が一つまたは複数の記憶装置１０６の物理的な媒体上に記憶されるので、領域記述子４０４の更新は、データセット１０４の位置１０８へのシークおよび書き込み１１０に加えて、領域記述子４０４へのシークおよび書き込み１１０を追加しうる。このように、領域記述子４０４が、さまざまな領域４０２の「ダーティー」および「クリーン」マーク付け４０６への変化を反映させるようすぐに自動的に更新されるとしたら、領域記述子４０４を含めることは、記憶装置１０６および記憶セット１０２のパフォーマンスをかなり低減させることがあり、可能性としては、各アクセスのコストを三倍まで増すことがありうる。本技法のある実施形態がそれぞれの領域４０２の「クリーン」および「ダーティー」状態を読むために領域記述子４０４にアクセスするとしたら（たとえば、領域４０２を「ダーティー」としてマークする４０６前にまず領域４０２が「クリーン」としてマークされているかどうかを判定するために）、さらなるパフォーマンス劣化が起こりうる。よって、領域記述子４０４へのアクセスを減らすことが望ましいことがありうる。
【００４８】
この第二の変形の第一の例として、領域４０２を「クリーン」および「ダーティー」としてマーク付け４０６することの意味がいくらか非対称的であることが理解されうる。たとえば、領域記述子４０４を「ダーティー」とマーク付けするために領域記述子４０４へのアクセスを遅らせることは受け容れ可能ではないことがある。その遅れの間に障害が起こる場合、そのような遅延は領域４０２を誤ってクリーンとしてリストしうるからである（それにより、障害１１８の際の不完全な書き込み１１０のため非一貫的であるかもしれない領域４０２がクリーンとしてマークされ、よって障害１１８からの回復の際のクリーニング４１６から除外される擬陰性状況を呈する）。しかしながら、書き込み完了後に領域４０２を「クリーン」としてマークする４０６のを遅らせるのは受け容れ可能であることがある。このシナリオは単に、擬陽性結果につながる。その場合、障害１１８の時点でクリーンである（たとえばペンディングの書き込み１１０なし）とわかっていた領域４０２が、回復の際にクリーニング４１６に含められる。だがこのスキャンは、クリーニング４１６の継続時間をわずかに増すだけでありえ（特に領域サイズが小さい場合）、記憶セット１０２の完全性を損なうものではない。さらに、書き込み１１０の完了後すぐに領域４０２を「クリーン」とマークする実施形態は、その後まもなく、同じ領域４０２内のデータセット１０４への書き込み１１０のもう一つの要求（たとえばシーケンシャルに後続するデータセット１０４または同じデータセット１０４の上書き）を受け取ることがあり、領域４０２を「ダーティー」とマークし直す必要があることがある。領域４０２の「クリーン」としてのマーク付け４０６を、領域４０２への切迫した二番目の書き込み１１０の可能性が高いことがありうる短い期間だけ遅らせることによって、それぞれ領域記述子４０４へのアクセスに関わる両方のマーク付け４０６が回避されうる。
【００４９】
これらの考察に鑑み、本技法のある実施形態は、領域４０２に記憶されているデータセット１０４への書き込み１１０の完了後、領域４０２の「クリーン」としてのマーク付け４０６を遅らせるよう構成されていてもよい。領域記述子４０４への「クリーン」マーク付け４０６の遅らされたコミットの実装は、さまざまな仕方で達成されうる。第一のそのような例として、この遅れは、「クリーン」マーク付け４０６のみを記憶する不揮発性メモリ、書き込みバッファを提供し、（定期的にまたは要求があったときに）すべてのそのような書き込みを一つのバッチとしてコミットすることによって実装されてもよい。たとえば、本実施形態は、領域４０２内のある位置１０８におけるデータセット１０６の記憶を完了したときには領域４０２をクリーンとして同定するよう構成されていてもよく、領域記述子４０４においてクリーニングされた諸領域４０２をクリーンとしてマーク付けする要求を受領したときに、記憶装置１０６上の領域記述子４０４において、クリーニングされた領域４０２をクリーンとしてマーク付けしてもよい。この要求は、たとえば、マーク付け４０６をフラッシュするという、プロセス（装置のオペレーティング・システムを含む）による特定的な要求を含んでいてもよく、あるいはさまざまな基準によってトリガーされてもよい。基準としては、クリーニングされた継続時間基準（たとえば、定期的に領域４０２のマーク付け４０６をコミットする）または領域記述子４０４のダーティー領域容量に関わる領域記述子容量基準（たとえば、領域記述子４０４が、指定された数の「クリーン」マーク付け４０６または領域記述子４０４の全利用可能容量の閾値などの特定の容量に達したときに領域のマーク付け４０６をコミットし、これは、「クリーン」なレコード４０６の放逐を促しうる）といったものがある。第二のそのような例として、上記遅れは、「クリーン」マーク付け４０６を短時間にわたってホールドして、短時間後、同じ領域４０２に対してその後の書き込み１１０が要求されなかったときにはじめて領域記述子４０４に「クリーン」マーク付け４０６をコミットすることに関わってもよい。このように、ある実施形態は、領域４０２内のある位置１０８へ書き込む１１０要求を受け取ると、まず、その領域４０２が領域記述子４０４においてすでにクリーンとしてマークされているかどうかを判別し、その領域４９２が領域記述子４０４において現在クリーンとマークされていると判別したときにのみ、その領域４０２をダーティーとマークしてもよい。
【００５０】
この第二の変形の第三の例として、本技法のある実施形態は、領域記述子４０４の揮発性メモリ表現を実装することによって領域記述子４０４へのアクセスの数を減らしてもよい。たとえば、記憶装置１０６の物理的な媒体上にそれぞれの領域４０２のマーク付け４０６を記憶することに加えて、ある装置上で動作する本技法のある実施形態は、該装置の揮発性メモリにマーク付け４０６を記憶してもよい。この表現の使用は、「クリーン」マーク付け４０６のバッチの遅らされた書き込みならびに、「クリーン」とマークされるべき領域４０６が現在、媒体上の領域記述子４０４において「クリーン」または「ダーティー」のどちらにマーク付けされているかの判定を容易にすることがある。このように、前記表現は、記憶装置１０６上の領域記述子４０４においておよび前記揮発性メモリ表現においてクリーンとマークされている領域４０２ならびに記憶装置１０６上の領域記述子４０４においておよび前記揮発性メモリ表現においてダーティーとマークされている領域４０２に加えて、いくつかの領域４０２が領域記述子４０４ではダーティーとマークされているが前記揮発性メモリ表現では（一時的に）クリーンとマークされていることがありうることを示しうる。そのようなクリーン・マーク付け４０６はのちに媒体上の領域記述子４０４にコミットされうる。
【００５１】
図９は、領域記述子４０４の揮発性メモリ表現９０２の実装および使用を表わす例示的なシナリオ９００の図解を示している。この例示的なシナリオ９００では、二つの記憶装置１０６が、（たとえばRAID  1方式の仕方で）記憶セット１０２のデータセット１０４の同一のコピーを記憶することによって、記憶セット１０２をミラーリングするよう構成されており、記憶装置１０６の不完全な同期によって引き起こされる潜在的な問題を克服するために、本稿に提示される技法に従って、記憶装置９０２（たとえば、記憶セット１０２を記憶する記憶装置１０６の一方または両方および／または別の記憶装置１０６）上で領域記述子４０４が生成され、記憶セット１０２のさまざまな領域４０２に対してペンディングの書き込み１１０を追跡するために利用されてもよい。しかしながら、これに加えて、揮発性メモリ９０４において、領域記述子４０４の表現９０６が生成されてもよく、記憶装置９０２に記憶されている領域記述子４０４と相互運用されてもよい。たとえば、第一の時点９０８において、記憶セット１０２の第二および第四の領域４０２内に配分されているデータセット１０４に対して書き込み１１０がペンディングであることがありうる。それらの書き込み１１０の要求を受け取ると、本技法のある実施形態は、記憶装置９０２に記憶されている領域記述子４０４において、また揮発性メモリ９０４内の表現９０６においては領域４０２をダーティーとマークしてもよく、領域４０２をすぐにダーティーとマークしてもよい。しかしながら、第四の領域４０２への書き込みが両方の記憶装置１０４上で完了した第二の時点９１０では、第四の領域４０２は、揮発性メモリ９０４内の表現９０６ではクリーンとマークされてもよいが、記憶装置９０２上の領域記述子４０４ではまだクリーンとマークされなくてもよい。同様に、第三の時点９１２では、第二の領域４０２への書き込み１１０が両方の記憶装置１０４において完了しており、第二の領域４０２は、揮発性メモリ９０４内の表現９０６ではクリーンとマークされてもよいが、記憶装置９０２上の領域記述子４０４ではまだで、第四の時点９１４まで遅らされてもよい。第四の時点では、記憶装置９０２上の領域記述子４０４において、両方の領域４０２がともにクリーンとしてマークされてもよい。揮発性メモリ９０４内の表現９０６のこの使用は、いくつかのパフォーマンス改善を呈しうる。（たとえば、記憶装置９０２上に記憶されている領域記述子４０４にアクセスする判別よりも、どの領域４０２がクリーンまたはダーティーとしてマークされているかをより迅速に判別することを可能にする；記憶装置９０２に記憶されている領域記述子４０４に対する、クリーン・マーク付け４０６のバッチ化したコミットを可能にする；そして、記憶装置９０２へのアクセスの数を減らす、たとえば、第三の時点９１２において第二の領域４２０への追加的な書き込み１１０が受領される場合、記憶装置９０２に記憶されている領域記述子４０４において領域４０２をクリーンとマークしてその後再びダーティーとマーク４０６するのではなく、領域４０２は単に揮発性メモリ９０４における表現９０６においてダーティーとマークされてもよい。）
図１０は、決定論的な仕方で領域記述子４０４を更新する本技法のある実施形態によって利用されうる、例示的な状態図１０００の図解を示している。最初、本技法のある実施形態は、クリーン状態１００２にあってもよい。ここで、クリーンな領域４０２が領域記述子４０４においてクリーンとしてマークされている。そこであるとき、その領域４０２内のある位置１０８におけるデータセット１０２への書き込み１１０を実行するよう要求が受領され、本技法のある実施形態は、領域４０２をダーティーとマーク４０６しつつ（たとえば、記憶装置１０６上に記憶されている領域記述子４０４への書き込みを行ないながら）、マーク付け状態１００４に遷移してもよい。マーク付け４０６が完了すると、本実施形態は、領域４０２がダーティーとマークされたダーティー状態１００４に遷移してもよく、領域４０２内の追加的な諸位置に書き込む１１０さらなる要求のため、本実施形態は、このダーティー状態１００４に留まってもよい。ダーティー領域４０２をフラッシュするよう要求が受領されたら、記憶装置１０６がフラッシュの準備ができているかどうかについて判定がなされる。（たとえば、記憶装置１０６が現在、記憶セットの同期を実行中である場合、あるいは記憶装置１０６が一時的にアクセス不能である場合には、ダーティー書き込みをフラッシュする要求は、記憶装置１０６の準備ができるまでホールドされる。）記憶装置１０６がフラッシュの準備ができている場合には、本実施形態は、フラッシュ動作を開始しつつ、フラッシュ状態１００８にはいってもよい。その領域１０４への書き込み１１０の別の要求を受け取ることなくフラッシュ動作が完了する場合には、本実施形態は、クリーンとマークされた状態１０１０にはいってもよい。ここで、領域１０２はすでにフラッシュされている（たとえば、領域４０２への書き込み１１０が完了している）が、領域４０２は記憶装置１０６上の領域記述子４０４ではいまだダーティーとマークされている（だが、装置のメモリ９０４内の揮発性メモリ表現９０６ではクリーンとマークされていてもよい）。最後に、領域記述子４０４において、クリーニングされた領域４０２をクリーンとマークするよう要求が受領されると、本実施形態はそのマーク付け４０６を開始してもよく、このマーク付け４０６が完了すると、クリーン状態１００２に戻ってもよい。しかしながら、フラッシュ中状態１００８またはクリーンとマークされている状態１０１０の間に領域４０２に書き込む１１０何らかの要求が受領される場合には、本実施形態はダーティー状態１００６に戻ることがある。このようにして、本技法のある実施形態は、ステートフルで、決定論的で、かつ比較的単純な仕方で、領域記述子４０４を更新しうる。本稿に提示される技法に適合しうる、領域記述子４０２の更新における多くの変形が、当業者によって考案されうる。
【００５２】
〈Ｄ４．回復の変形〉
これらの技法の実施形態の間で変わりうる第四の側面は、障害１１８の場合に記憶セット１０２の回復（クリーニング４１６を含む）を実行するために領域記述子４０４を使う仕方に関する。第一の変形では、前記回復は、障害１１８から生じる記憶セット１０２における非一貫性１２２を検出し、除去するために記憶セット１０２をクリーニング４１６する多くの型の技法に関わりうる。第一の例として、同一であることが期待される二つ以上のコピーとして記憶されている記憶セット１０２のあるデータセット１０４について、クリーニング４１６は、それらのコピーを比較して非一貫性１２２を検出することに関わってもよい。（たとえば、実際の内容のビットごとの比較；内容の論理的な比較、たとえば同じファイルのセットを有するが該ファイル・システムを異なるビット毎構造で表わす二つのファイル・システムのような、非実質的な構造上の相違の場合でもデータセット１０４の間の等価性を検出するなど；あるいはデータセット１０４のホールマーク（hallmark）の比較、たとえば各コピーの内容に対して計算されたハッシュコードの比較。）第二の例として、クリーニング４１６は、データセット１０４の内容の一貫性を検証するために、データセット１０４を表わす検証子２０２、たとえばチェックサムに対して一つまたは複数のデータセット１０４を検証することに関わっていてもよい。第三の例として、クリーニング４１６は、単にエラーがあるかどうかデータセット１０４を検査することに関わってもよい。たとえば、標準化された型のデータセット１０４のバイナリー内容が形式定義に従った有効な構造を呈することを検証するなど。さらに、クリーニング４１６は、非一貫性１１２の存在の単純な検出を可能にしてもよい；前記少なくとも一つの比較されるデータセット１０４内および／または該データセット１０４間での非一貫性の位置の同定を可能にしてもよい（たとえば、エラーが存在することを検出するだけでなく、データセット１０４の特定の部分が非一貫的であるまたは期待されたとおりでないことを検出する）；および／または、非一貫性１２２の訂正を可能にしてもよい（たとえば、正しいデータの決定を可能にする、ハミング符号のような誤り訂正チェックサム、あるいはフォーマット上の非一貫性の訂正を可能にし、データ損失を回復または低減しうる、バイナリー・オブジェクトに適用される修復技法）。異なる型のクリーニング４１６が記憶セット１０２内の異なるデータセット１０４に適用されてもよい。（たとえば、より貴重なデータセット１０２はより複雑だが洗練された誤り訂正技法に適合する仕方で記憶されてもよく、それほど貴重でないデータセット１０２は単純で比較的込み入っていない仕方で記憶されてもよい。）さらに、呼び出されるクリーニング４１６の型は、それぞれのデータセット１０４の利用可能なコピーの数、検出された障害１１８の型、記憶装置１０６の型（たとえば、装置上に実装されるRAID方式）およびユーザーの関心（たとえば、ユーザーは、クリーニング４１６の複雑さ、信頼性および継続時間の面で異なるさまざまなクリーニング・オプションのうちから選択することが許されていてもよい）に依存してもよい。いくつかのシナリオでは、複数の型のクリーニング４１６が実行されてもよい。（たとえば、簡単に検出される非一貫性１２２の迅速な同定およびデータセット１０２へのアクセスの即座の回復に関わるクイック・クリーニング４１６と、それに続く、訂正および修復するのがより難しい非一貫性１２２に対処するために記憶セット１０２の完全性を検証する複雑なクリーニング４１６。）
この第三の側面の第二の変形として、記憶セット１０２の回復は特定の順序で実行されてもよい。たとえば、記憶セット１０２は多くの記憶装置上に記憶されている多くの型のデータセット１０４を含んでいてもよい。いくつかのシナリオでは、素朴な回復は、クリーニング４１６を、任意の順序で記憶セット１０２に適用してもよい。一方、順序付けられた回復は、記憶セット１０２の、それほど貴重でないまたは頻繁に要求されないデータセット１０４（たとえばアーカイブ・データ）を含む他の部分にクリーニング４１６（たとえば使用中のデータ）を適用する前にまず、記憶セット１０２の、貴重なまたはより多く使われるデータセット１０４を含むいくつかの部分にクリーニング４１６を適用してもよい。一つのそのような例として、記憶セット１０２のそれぞれの領域４０２は、それぞれ領域記述子４０４をもつ一つまたは複数の領域セットに配分されてもよく、回復は、第二の領域記述子４０４によって表わされる第二の領域セットの領域４０２をクリーニングする前に、第一の領域記述子４０４によって表わされる第一の領域セットの領域４０２をクリーニング４１６することに関わってもよい。
【００５３】
この第三の側面の第三の変形として、回復は、領域記述子４０４に基づいてクリーニング４１６を開始する前に、（たとえば領域記述子４０４とともに記憶されている検証子２０２に従って）領域記述子４０４の完全性を検証することを含んでいてもよい。領域記述子４０４の一部が検証不能である（たとえば、領域記述子４０４の一部に書き込んでいる際の障害１１８のために非一貫的となっているまたは破損している）ことが見出される場合には、回復は、領域記述子４０４の検証可能な部分を使って、領域記述子４０４の破損した部分において表わされている領域４０２のフル・クリーニング４１６を実行することに関わってもよい。あるいはまた、回復は、領域記述子４０４の別のコピー（たとえば、記憶セット１０２の同じ記憶装置１０６の別のどこかまたは別の記憶装置１０６上に記憶されている領域記述子４０４の、同一のまたはやや古くなっているが検証可能なコピー）を位置特定して使うことに関わっていてもよい。実際、二つ以上の領域記述子４０４がそれぞれ部分的に破損していることが見出される場合、回復は、それぞれの領域記述子４０４の有効な部分を使うことによってフルに達成できることがある。あるいはまた、領域記述子４０４の検証可能なコピーが利用可能でない場合には、回復は、記憶セット１０２のフル・クリーニング（たとえば、記憶セット１０２全体のフル・スキャンおよび再同期）を開始してもよい。これらの方法では、本技法のある実施形態は、記憶セット１０２の種々の型の障害１１８から回復するよう構成されうる。当業者は、本稿で提示される技法に基づく、記憶セット１０２の障害１１８から回復する多くの方法を考案しうる。
【００５４】
〈Ｅ．コンピューティング環境〉
図１１は、本稿に提示される技法が実装されうるコンピューティング装置１１０２内の例示的なコンピューティング環境の図解を示している。例示的なコンピューティング装置は、これに限られないが、パーソナル・コンピュータ、サーバー・コンピュータ、ハンドヘルドもしくはラップトップ装置、モバイル装置（携帯電話、携帯情報端末（PDA）、メディア・プレーヤーなど）、マルチプロセッサ・システム、消費者電子装置、ミニコンピュータ、メインフレーム・コンピュータおよび上記のシステムもしくは装置のいずれかを含む分散式のコンピューティング環境を含む。
【００５５】
図１１は、本稿に提示される一つまたは複数の実施形態を実装するよう構成されているコンピューティング装置１１０２を有するシステム１１００の例を示している。ある構成では、コンピューティング装置１１０２は少なくとも一つのプロセッサ１１０６および少なくとも一つのメモリ・コンポーネント１１０８を含む。コンピューティング装置の厳密な構成および型に依存して、メモリ・コンポーネント１１０８は揮発性（たとえばRAM）、不揮発性（たとえばROM、フラッシュメモリなど）または中間的もしくはハイブリッド型のメモリ・コンポーネントでありうる。この構成は、図１１では破線１１０４によって示されている。
【００５６】
いくつかの実施形態では、装置１１０２は追加的な特徴／機能を含んでいてもよい。たとえば、装置１１０２は、これに限られないがハードディスクドライブ、半導体記憶デバイスおよび／または他のリムーバブルもしくは非リムーバブルな磁気もしくは光学式媒体を含む一つまたは複数の追加的な記憶コンポーネント１１１０を含んでいてもよい。ある実施形態では、本稿で与えられる一つまたは複数の実施形態を実装するコンピュータ可読かつプロセッサ実行可能な命令が記憶コンポーネント１１１０に記憶される。記憶コンポーネント１１１０は、オペレーティング・システムのコンポーネント、一つまたは複数のアプリケーションをなす実行可能なバイナリー、プログラミング・ライブラリ（たとえば、アプリケーション・プログラミング・インターフェース（API））、メディア・オブジェクトおよび文書類のような他のデータ・オブジェクトをも記憶していてもよい。コンピュータ可読命令は、プロセッサ１１０６による実行のためにメモリ・コンポーネント１１０８にロードされてもよい。
【００５７】
コンピューティング装置１１０２はまた、コンピューティング装置１１０２に他の装置と通信することを許容する一つまたは複数の通信コンポーネント１１１６をも含んでいてもよい。一つまたは複数の通信コンポーネント１１１６は（たとえば）モデム、ネットワーク・インターフェース・カード（NIC）、電波周波数送信機／受信機、赤外線ポートおよびユニバーサル・シリアル・バス（USB）USB接続を有していてもよい。そのような通信コンポーネント１１１６は有線接続（物理的なコード、ケーブルまたはワイヤを通じてネットワークに接続する）または無線接続（可視光、赤外線または一つもしくは複数の電波周波数などを通じてネットワーキング装置と無線で通信する）を有していてもよい。
【００５８】
コンピューティング装置１１０２は、キーボード、マウス、ペン、音声入力装置、タッチ入力装置、赤外線カメラまたはビデオ入力装置のような一つまたは複数の入力コンポーネント１１１４および／または一つまたは複数のディスプレイ、スピーカーおよびプリンターのような一つまたは複数の出力コンポーネント１１１２を含んでいてもよい。入力コンポーネント１１１４および／または出力コンポーネント１１１２は有線接続、無線接続またはそれらの任意の組み合わせを介してコンピューティング装置１１０２に接続されてもよい。ある実施形態では、別のコンピューティング装置からの入力コンポーネント１１１４または出力コンポーネント１１１２がコンピューティング装置１１０２のための入力コンポーネント１１１４および／または出力コンポーネント１１１２として使用されてもよい。
【００５９】
コンピューティング装置１１０２のコンポーネントは、バスのようなさまざまな相互接続によって接続されてもよい。そのような相互接続は、PCIエクスプレスのような周辺コンポーネント相互接続（PCI）、ユニバーサル・シリアル・バス（USB）、ファイアワイヤ（IEEE1394）、光学式バス構造などを含みうる。別の実施形態では、コンピューティング装置１１０２のコンポーネントはネットワークによって相互接続されてもよい。たとえば、メモリ・コンポーネント１１０８は、ネットワークによって相互接続された種々の物理的位置に位置されている複数の物理的メモリ・ユニットから構成されてもよい。
【００６０】
当業者は、コンピュータ可読命令を記憶するために利用される記憶装置がネットワークを横断して分散されてもよいことを認識するであろう。たとえば、ネットワーク１１１８を介してアクセス可能なコンピューティング装置１１２０が本稿で与えられる一つまたは複数の実施形態を実装するためのコンピュータ可読命令を記憶してもよい。コンピューティング装置１１０２はコンピューティング装置１１２０にアクセスし、コンピュータ可読命令の一部または全部を実行のためにダウンロードしてもよい。あるいはまた、コンピューティング装置１１０２は必要に応じてコンピュータ可読命令の諸片をダウンロードしてもよく、あるいはいくつかの命令はコンピューティング装置１１０２において実行され、いくつかはコンピューティング装置１１２０において実行されてもよい。
【００６１】
〈Ｆ．用語の用法〉
本願での用法では、用語「コンポーネント」、「モジュール」、「システム」、「インターフェース」などは、ハードウェア、ハードウェアとソフトウェアの組み合わせ、ソフトウェアまたは実行中のソフトウェアのいずれであれコンピュータ関係のエンティティを指すことが一般に意図されている。たとえば、コンポーネントは、これに限られないが、プロセッサ上で走っているプロセス、プロセッサ、オブジェクト、実行可能物、実行のスレッド、プログラムおよび／またはコンピュータであってもよい。例として、コントローラ上で走るアプリケーションおよび前記コントローラの両方がコンポーネントであることができる。一つまたは複数のコンポーネントがプロセスおよび／または実行のスレッド内に存在することができ、コンポーネントは一つのコンピュータ上に局在することもできるし、および／または二つ以上のコンピュータの間で分散させられることもできる。
【００６２】
さらに、特許請求される主題は、開示される主題を実装するようコンピュータを制御するためのソフトウェア、ファームウェア、ハードウェアまたはそれらの任意の組み合わせを製造するための標準的なプログラミングおよび／またはエンジニアリング技法を使って、方法、装置または製造物として実装されてもよい。本稿で用いるところの用語「製造物」は、任意のコンピュータ可読デバイス、担体または媒体からアクセス可能なコンピュータ・プログラムを包含することが意図されている。むろん、当業者は、特許請求される主題の範囲および精神から外れることなく、この構成に多くの修正がなしうることを認識するであろう。
【００６３】
本稿では諸実施形態のさまざまな動作が与えられている。ある実施形態では、記載される動作の一つまたは複数は、一つまたは複数のコンピュータ可読媒体上に記憶されているコンピュータ可読命令であって、コンピューティング装置によって実行されたら、記載される動作を該コンピューティング装置に実行させるものをなしてもよい。動作の一部または全部が記載される順序は、それらの動作が必ず順序依存であることを含意するものと解釈すべきではない。代替的な順序付けが、本稿の恩恵を受ける当業者によって理解されるであろう。さらに、すべての動作が本稿で与えられる各実施形態において必ず存在するわけではないことは理解されるであろう。
【００６４】
主題は構造的な特徴および／または方法論的な工程に固有の言辞で記述されているが、付属の請求項において定義される主題は必ずしも上記で述べた個別的な特徴や工程に限定されるものではないことは理解しておくものとする。むしろ、上記の個別的な特徴および工程は請求項を実装する例示的な形として開示されているのである。
さらに、「例示的」という語は、本稿では、例、事例または例解のはたらきをすることを意味するために使われる。本稿に「例示的」として記載される任意の側面または設計は、必ずしも、他の側面または設計に対して有利であると解釈されるものではない。むしろ、例示的という語の使用は、概念を具体的な仕方で提示することを意図したものである。本願での用法では、用語「または」は排他的な「または」ではなく包含的な「または」を意味することが意図されている。すなわち、特に断わりのない限りまたは文脈から明らかではない限り、「XはAまたはBを用いる」は自然な包含的な置換の任意のものを意味することが意図されている。すなわち、XがAを用いる；XがBを用いる；またはXがAおよびBの両方を用いるのであれば、「XはAまたはBを用いる」は上記の事例のいずれかのもとで満たされる。さらに、本願および付属の請求項で使われるところの冠詞「a」および「an」は、そうでないことが記載されているまたは単数形に向けられていることが文脈から明らかなのでない限り、「一つまたは複数」を意味する。
【００６５】
また、本開示は、一つまたは複数の実装に関して図示され記述されたが、本明細書および付属の図面を読み、理解することに基づいて、他の当業者にも等価な変更および修正が思いつくであろう。本開示はそのようなすべての修正および変更を含み、付属の請求項の範囲によってのみ限定される。特に上記のコンポーネント（たとえば要素、資源など）によって実行されるさまざまな機能に関し、そのようなコンポーネントを記述するために使われる用語は、特にそうでないことが示されていない限り、本開示の本稿で例解された例示的な実装における当該機能を実行する開示された構造と構造的に等価でないとしても、記述されるコンポーネントの指定される機能（たとえば、機能的に等価な）を実行する任意のコンポーネントに対応することが意図されている。さらに、本開示の特定の特徴はいくつかの実装の一つのみに関して開示されたことがありうるが、そのような特徴は、任意の所与のまたは特定の応用のために所望されるまたは有利でありうるように、他の実装の一つまたは複数の他の特徴と組み合わされてもよい。さらに、用語「含む」「有する」「もつ」またはそれらの変形が詳細な説明または請求項において使用される限りにおいて、そのような用語は用語「comprising」と同様の仕方で包含的であることが意図されている。
【図１】
0005932042.tif 000002
【図２】
0005932042.tif 000003
【図３】
0005932042.tif 000004
【図４】
0005932042.tif 000005
【図５】
0005932042.tif 000006
【図６】
0005932042.tif 000007
【図７】
0005932042.tif 000008
【図８】
0005932042.tif 000009
【図９】
0005932042.tif 000010
【図１０】
0005932042.tif 000011
【図１１】
0005932042.tif 000012