(57)【要約】【課題】分散型ＲＡＩＤシステムを提供すること【解決手段】開示されるシステムおよび方法の実施形態は、一組のデータバンクを備える、分散型ＲＡＩＤシステムを提供する。より具体的には、分散型ＲＡＩＤシステムの特定の実施形態では、各データバンクは、一組の関連ストレージ媒体を有し、同様の分散型ＲＡＩＤアプリケーションを実行する。データバンクの各々の上の分散型ＲＡＩＤアプリケーションは、それら自体の間で、データバンクの関連ストレージ媒体上に格納されるデータと併せた、ＲＡＩＤのレベルの実装に関連するデータフローを分散し、制御するように協働する。【選択図】図１
2011165212.tif 000002
【特許請求の範囲】
【請求項１】
複数の故障からＲＡＩＤシステムを保護する方法であって、該方法は、
複数のデータバンクコンピュータを含むシステムを提供することであって、各データバンクコンピュータは、他の複数のデータバンクコンピュータの各々および１つ以上のホストにネットワークを介して連結され、各データバンクは、分散型ＲＡＩＤアプリケーションを実行する、ことと、
複数のデータバンク上に容量を確立することであって、該容量は、一組のセグメントを備え、該一組のセグメントは、該複数のデータバンク上に格納される、ことと、
該容量と併せて第１のＲＡＩＤレベルを実装することであって、該第１のＲＡＩＤレベルを実装することは、一組の冗長セグメントを格納することを含み、各冗長セグメントは、該一組のセグメントのうちの１つ以上に対応し、その結果、各冗長セグメントは、該一組のセグメントのうちの対応する１つ以上と同一のデータバンク上に存在しない、ことと、
該複数のデータバンク内に第２のＲＡＩＤレベルを実装することと
を包含し、第１のデータバンクに対して該第２のＲＡＩＤレベルを実装することは、該第１のデータバンク上に格納された該一組のセグメントに対して、
該第１のデータバンク上に該一組のセグメントのうちの１つ以上に関連するデータを格納することであって、その結果、該データは、該第１のデータバンク上の該一組のセグメントのうちの関連する１つ以上と同一のディスク上に存在しない、ことと、
該第１のデータバンク上に該一組の冗長セグメントのうちの１つ以上に関連するデータを格納することであって、その結果、該データセグメントは、該データバンク上の該一組の冗長セグメントのうちの関連する１つ以上と同一のディスク上に存在しない、ことと
を含む、方法。
【請求項２】
前記容量の前記一組のセグメントの各々は、前記複数のデータバンクのうちの１つに対応し、各セグメントは、該複数のデータバンクの順列に従ってデータバンクに割り当てられ、前記一組の冗長セグメントの各々は、該冗長セグメントに対応する前記１つ以上のセグメントのうちのいずれかに対応する、該複数のデータバンクの各々とは異なるデータバンクに割り当てられる、請求項１に記載の方法。
【請求項３】
前記第１のコマンドが第１のセグメントに関連する書き込みコマンドであるかどうか、および該第１のコマンドが前記複数のデータバンクのうちの第２のデータバンクを決定する書き込みコマンドであるかどうかを決定することをさらに含み、該第２のデータバンクは、前記第１のセグメントに関連付けられる第１の冗長セグメントに対応し、該第１の冗長セグメントに対して該第１のコマンドを実行し、該第１のコマンドは、該第２のデータバンク上で実行される、請求項２に記載の方法。
【請求項４】
前記第２のデータバンクを決定することは、該データバンクの前記順列および前記ＲＡＩＤレベルを備えるグローバルテーブルにアクセスすることを含む、請求項３に記載の方法。
【請求項５】
分散型ＲＡＩＤを実装するためのシステムであって、
１つ以上のホストと、
複数のデータバンクコンピュータであって、各データバンクは、各ホストおよび他の複数のデータバンクの各々に連結され、各データバンクは、
プロセッサと、
一組のディスクを備えるデータストアと、
コンピュータ読み取り可能媒体と
を備え、該コンピュータ読み取り可能媒体は、
該１つ以上のホストのうちの第１のホストから、容量の第１のセグメントに対応するコマンドを受信することであって、該容量および該容量と併せて実装される第１のＲＡＩＤレベルに対応する冗長データは、該複数のデータバンクの各々に格納され、該容量は、一組のセグメントを備え、該一組のセグメントは、該複数のデータバンク上に格納され、第１のＲＡＩＤレベルは、該容量と併せて実装され、
該第１のＲＡＩＤレベルを実装することは、一組の冗長セグメントを格納することを含み、各冗長セグメントは、該一組のセグメントのうちの１つ以上に対応し、その結果、各冗長セグメントは、該一組のセグメントのうちの対応する１つ以上と同一のデータバンク上に存在しない、ことと、
該複数のデータバンク内に第２のＲＡＩＤレベルを実装することと
を包含し、第１のデータバンクに対して該第２のＲＡＩＤレベルを実装することは、該第１のデータバンク上に格納された該一組のセグメントに対して、
該第１のデータバンク上に該一組のセグメントのうちの１つ以上に関連するデータを格納することであって、その結果、該データは、該第１のデータバンク上の該一組のセグメントのうちの関連する１つ以上と同一のディスク上に存在しない、ことと、
該第１のデータバンク上に該一組の冗長セグメントのうちの１つ以上に関連するデータを格納することであって、その結果、該データセグメントは、該データバンク上の該一組の冗長セグメントのうちの関連する１つ以上と同一のディスク上に存在しない、ことと
を行うように実行可能な命令を含む、システム。
【請求項６】
前記容量の前記一組のセグメントの各々は、前記複数のデータバンクのうちの１つに対応し、各セグメントは、該複数のデータバンクの順列に従ってデータバンクに割り当てられ、前記一組の冗長セグメントの各々は、該冗長セグメントに対応する前記１つ以上のセグメントのうちのいずれかに対応する、該複数のデータバンクの各々とは異なるデータバンクに割り当てられる、請求項５に記載のシステム。
【請求項７】
前記第１のコマンドが第１のセグメントに関連する書き込みコマンドであるかどうか、および該第１のコマンドが前記複数のデータバンクのうちの第２のデータバンクを決定する書き込みコマンドであるかどうかを決定することをさらに含み、該第２のデータバンクは、前記第１のセグメントに関連付けられる第１の冗長セグメントに対応し、該第１の冗長セグメントに対して該第１のコマンドを実行し、該第１のコマンドは、該第２のデータバンク上で実行される、請求項６に記載のシステム。
【請求項８】
前記第２のデータバンクを決定することは、該データバンクの前記順列および前記ＲＡＩＤレベルを備えるグローバルテーブルにアクセスすることを含む、請求項７に記載のシステム。
【請求項９】
分散型ＲＡＩＤを実装するためのコンピュータ実行可能命令を備える、コンピュータ読み取り可能媒体であって、該コンピュータ命令は、
複数のデータバンク上に容量を確立するために実行可能であって、該容量は、一組のセグメントを備え、該一組のセグメントは、該複数のデータバンク上に格納され、
該容量と併せて第１のＲＡＩＤレベルを実装するために実行可能であって、該第１のＲＡＩＤレベルを実装することは、一組の冗長セグメントを格納することを含み、各冗長セグメントは、該一組のセグメントのうちの１つ以上に対応し、その結果、各冗長セグメントは、該一組のセグメントのうちの対応する１つ以上と同一のデータバンク上に存在せず、
該複数のデータバンク内に第２のＲＡＩＤレベルを実装することと
を包含し、第１のデータバンクに対して該第２のＲＡＩＤレベルを実装することは、該第１のデータバンク上に格納された該一組のセグメントに対して、
該第１のデータバンク上に該一組のセグメントのうちの１つ以上に関連するデータを格納することであって、その結果、該データは、該第１のデータバンク上の該一組のセグメントのうちの関連する１つ以上と同一のディスク上に存在しない、ことと、
該第１のデータバンク上に該一組の冗長セグメントのうちの１つ以上に関連するデータを格納することであって、その結果、該データセグメントは、該データバンク上の該一組の冗長セグメントのうちの関連する１つ以上と同一のディスク上に存在しない、ことと
を行うように実行可能である、コンピュータ読み取り可能媒体。
【請求項１０】
前記容量の前記一組のセグメントの各々は、前記複数のデータバンクのうちの１つに対応し、各セグメントは、該複数のデータバンクの順列に従ってデータバンクに割り当てられ、前記一組の冗長セグメントの各々は、該冗長セグメントに対応する前記１つ以上のセグメントのうちのいずれかに対応する、該複数のデータバンクの各々とは異なるデータバンクに割り当てられる、請求項９に記載のコンピュータ読み取り可能媒体。
【請求項１１】
前記第１のコマンドが第１のセグメントに関連する書き込みコマンドであるかどうか、および該第１のコマンドが前記複数のデータバンクのうちの第２のデータバンクを決定する書き込みコマンドであるかどうかを決定することをさらに含み、該第２のデータバンクは、前記第１のセグメントに関連付けられる第１の冗長セグメントに対応し、該第１の冗長セグメントに対して該第１のコマンドを実行し、該第１のコマンドは、該第２のデータバンク上で実行される、請求項１０に記載のコンピュータ読み取り可能媒体。
【請求項１２】
前記第２のデータバンクを決定することは、該データバンクの前記順列および前記ＲＡＩＤレベルを備えるグローバルテーブルにアクセスすることを含む、請求項１１に記載のコンピュータ読み取り可能媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
（技術分野）
本発明は、概して、ストレージデバイスの使用に関する。より具体的には、本発明の実施形態は、ストレージデバイス上にＲＡＩＤを実装するステップに関する。さらにより具体的には、本発明の特定の実施形態は、ＲＡＩＤの分散型実装に関する。
【背景技術】
【０００２】
（背景）
データは、多くの事業体にとっての有用な資産を表す。その結果、不慮であるか悪意のある行為によって引き起こされるものかに関わらず、データ損失は、労働力の浪費、顧客からの信頼の喪失、時間の損失、および潜在的な法的責任の観点から、費用のかかるものとなり得る。商業上、法律上、または他の目的のためのデータの適切な保護を確実なものにするために、多くの事業体は、データストレージ、冗長性、セキュリティ等を含む、種々の技術を使用して、そのデータを保護することを望み得る。しかしながら、これらの技術は、他の競合する制約、あるいはこのデータを処理もしくは格納するために使用されるコンピューティングデバイスの状態または設定によって課される要件と矛盾し得る。
【０００３】
これらの対立に対処するための一方法は、レイド（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋ（ＲＡＩＤ））を実装することである。一般に、ＲＡＩＤシステムは、信頼性を高めるため、および場合によっては、ストレージにこれらのＲＡＩＤシステムを使用するコンピューティングデバイス（ホストとして既知）の処理量を改善するために、集合的にアレイと称される、複数のハードディスクドライブ（または他の種類のストレージ媒体）にわたって、データを分割および複製する。その結果、ＲＡＩＤアレイは、ホストに対して１つ以上のモノリシックストレージ領域のように見え得る。ホストがＲＡＩＤシステムと通信すること（読み込み、書き込み等）を要求する時、ホストは、ＲＡＩＤアレイが単一ディスクであるかのように通信する。言い換えると、ＲＡＩＤシステムは、そのような通信と併せて特定のＲＡＩＤレベルを実装するように、これらの通信を処理する。これらのＲＡＩＤレベルは、信頼性、能力、速度等の種々のトレードオフ間のある所望のバランスを達成するように設計されてもよい。例えば、ＲＡＩＤ（レベル）０は、速度の改善をもたらすように、いくつかのディスクにわたってデータを分散し、ディスクの実質的に全容量を利用するが、ディスクが故障した場合、ディスク上のすべてのデータが損失され、ＲＡＩＤ（レベル）１は、各々が同一のデータを格納する、２つ（またはそれ以上）のディスクを使用するため、１つのディスクが生存している限り、データは損失されない。アレイの総容量は、実質的に、単一ディスクの容量であり、ＲＡＩＤ（レベル）５は、いずれか１つのディスクの損失からデータを保護するように３つ以上のディスクを組み合わせ、アレイのストレージ容量は、１つのディスク分だけ減少される。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ＲＡＩＤの現行の実装は、種々の問題を有する場合がある。これらの問題は、多くの場合において、ＲＡＩＤシステムとのすべての通信は、ＲＡＩＤシステムを制御し、管理する、単一サーバにアドレス指定されなければならない等、これらのＲＡＩＤシステムのアーキテクチャによって課される制限に起因する場合がある。他の問題は、ＲＡＩＤシステムを備えるディスク上のデータの構成または配置から生じる場合がある。例えば、特定の場合では、ＲＡＩＤシステムを利用することができる前に、ＲＡＩＤレベルが選択され、ＲＡＩＤシステム内のストレージが割り当てられなければならない。したがって、初期に選択されるＲＡＩＤレベルは、ＲＡＩＤのそのレベルが望まれるか、または必要とされるかに関わらず、ＲＡＩＤシステム上に格納されるデータと併せて実装されなければならない。多くの場合では、これらの既存の問題は、これらの解決策を実装するためにカスタムハードウェアまたはソフトウェアを使用する必要性によって悪化し得、そのような解決策の実装に関連する費用を引き上げる。
【０００５】
結果として、これらの問題を改善することが望ましい。
【課題を解決するための手段】
【０００６】
（概要）
開示されるシステムおよび方法の実施形態は、一組のデータバンクを備える、分散型ＲＡＩＤシステムを提供する。より具体的には、分散型ＲＡＩＤシステムの特定の実施形態では、各データバンクは、一組の関連ストレージ媒体を有し、同様の分散型ＲＡＩＤアプリケーションを実行する。データバンクの各々の上の分散型ＲＡＩＤアプリケーションは、それら自体の間で、データバンクの関連ストレージ媒体上に格納されるデータと併せた、ＲＡＩＤのレベルの実装に関連するデータフローを分散し、制御するように協働する。
【０００７】
具体的に、一実施形態では、関連ＲＡＩＤレベルを伴う容量は、分散型ＲＡＩＤシステムを使用して作成されてもよい。次いで、分散型ＲＡＩＤアプリケーションの各々は、その容量またはその容量と併せた所望のＲＡＩＤレベルの実装に関連付けられるデータが、分散型ＲＡＩＤシステムの複数のデータバンク上に格納され得るように、その容量のデータに関連付けられる動作を協働することができる。
【０００８】
これらのデータバンクの各々の上で実行される同様の分散型ＲＡＩＤアプリケーションを使用して、容量のデータおよびＲＡＩＤの実装に関連付けられるデータの両方を複数のデータバンク上に格納することによって、容量と併せたＲＡＩＤのレベルの実装を協働することによって、多数の利点が達成され得る。すなわち、異なるストレージ容量が割り振られてもよく、容量のうちの１つ以上は、異なるＲＡＩＤレベルに関連して実装される。さらに、データバンクにわたるストレージの協働およびＲＡＩＤの実装が、実質的に同一の分散型ＲＡＩＤアプリケーションを使用して達成される際、多くの場合において、標準ｘ８６ベースのサーバおよびストレージ媒体等の標準または既製のハードウェアが使用されてもよい。
【０００９】
さらに、ＲＡＩＤシステムのデータバンクの各々にわたって制御を分散することによって、各データバンク上の分散型ＲＡＩＤアプリケーションの各々は、実質的に自立的に実行することができる。さらに、１つのデータバンクを損失することができ、ＲＡＩＤシステムは、ＲＡＩＤシステムを利用するホストの各々に対して、依然としてシームレスに動作することができ得るというように、ある程度の耐障害性が、そのアーキテクチャに内在し得る。
【００１０】
さらに、本明細書に提示されるシステムおよび方法の実施形態の副次的作用として、存在する性能ボトルネックがより少ないため、改善された性能が達成され得、各ホストがスイッチに連結され、各データバンクがそのスイッチに連結され得るため、増加したバンド幅が使用可能となり得、そのような分散型ＲＡＩＤシステムの拡大または縮小は、比較的シームレスに達成され得る。
【００１１】
本発明のこれらおよび他の態様は、以下の説明および添付の図面と併せて熟考される時、より認識され、理解されるであろう。以下の説明は、本発明の種々の実施形態およびそれらの多数の具体的な詳細を示すが、限定としてではなく、例として与えられている。本発明の範囲内で、多くの置換、修正、追加、または再配列が行われてもよく、本発明は、すべてのそのような置換、修正、追加、または再配列を含む。
例えば、本発明は以下の項目を提供する。
（項目１）
分散型ＲＡＩＤを実装するためのシステムであって、
１つ以上のホストと、
複数のデータバンクコンピュータであって、各データバンクは、各ホストおよび他の複数のデータバンクの各々に連結され、各データバンクは、
プロセッサと、
データストアと、
コンピュータ可読媒体であって、
該１つ以上のホストのうちの第１のホストから、容量の第１のセグメントに対応するコマンドを受信するために実行可能な命令であって、該容量および該容量と併せて実装されるＲＡＩＤレベルに対応する冗長データは、該複数のデータバンクの各々に格納され、その結果、該容量の各セグメントについて、そのセグメントに関連付けられる該冗長データを備える、対応する冗長セグメントは、該セグメントと同一のデータバンク上に存在しない、命令と、
該複数のデータバンクのうちの第１のデータバンクを決定するために実行可能な命令であって、該第１のデータバンクは、該第１のセグメントに対応する、命令と、
該第１のデータバンクが該コマンドを受信した該データバンクである場合、該第１のセグメントに対して該第１のコマンドを実行し、そうでない場合、該第１のコマンドを該第１のデータバンクに転送するために実行可能な命令と
を備える、コンピュータ可読媒体と
を含む、データバンクコンピュータと
を備える、システム。
（項目２）
上記容量の各セグメントは、上記複数のデータバンクのうちの１つに対応し、各セグメントは、該複数のデータバンクの順列に従って、該複数のデータバンクのうちの１つに割り当てられ、上記冗長セグメントの各々は、その冗長セグメントに関連付けられる上記容量のいずれかのセグメントに対応する、該複数のデータバンクの各々とは異なる、該複数のデータバンクのうちの１つに割り当てられる、項目１に記載のシステム。
（項目３）
上記コンピュータ命令はさらに、上記第１のコマンドが書き込みコマンドであるかどうか、および該第１のコマンドが上記複数のデータバンクのうちの第２のデータバンクを決定する書き込みコマンドであるかどうかを決定するために実行可能であり、該第２のデータバンクは、上記第１のセグメントに関連付けられる第１の冗長セグメントに対応し、該第２のデータバンクが、上記コマンドを受信した上記データバンクである場合、該第１の冗長セグメントに対して該第１のコマンドを実行し、そうでない場合、該第１のコマンドを上記第２のデータバンクに転送する、項目２に記載のシステム。
（項目４）
上記第１のデータバンクを決定し、上記第２のデータバンクを決定することは、上記データストア内のグローバルテーブルにアクセスすることを含み、該グローバルテーブルは、該複数データバンクの上記順列および上記ＲＡＩＤレベルを備える、項目３に記載のシステム。
（項目５）
プロセッサを有するコンピューティングデバイス上に実装される分散型ＲＡＩＤのための方法であって、
複数のデータバンク上に容量を確立することであって、該容量は、一組のセグメントを備え、該一組のセグメントは、該複数のデータバンク上に格納される、ことと、
該容量と併せてＲＡＩＤレベルを実装することであって、該ＲＡＩＤレベルを実装することは、一組の冗長セグメントを格納することを含み、各冗長セグメントは、該一組のセグメントのうちの１つ以上に対応し、その結果、各冗長セグメントは、該一組のセグメントのうちの対応する１つ以上と同一のデータバンク上に存在しない、ことと、
該容量の該一組のセグメントのうちの第１のセグメントに対応するコマンドを受信することと、
該複数のデータバンクのうちの第１のデータバンクを決定することであって、該第１のデータバンクは、該第１のセグメントに対応する、ことと、
該第１のセグメントに対して該第１のコマンドを実行することであって、該第１のコマンドは、該第１のデータバンク上で実行される、ことと
を含む、方法。
（項目６）
上記容量の上記一組のセグメントの各々は、上記複数のデータバンクのうちの１つに対応し、各セグメントは、該複数のデータバンクの順列に従ってデータバンクに割り当てられ、上記一組の冗長セグメントの各々は、該冗長セグメントに対応する上記１つ以上のセグメントのうちのいずれかに対応する、該複数のデータバンクの各々とは異なるデータバンクに割り当てられる、項目５に記載の方法。
（項目７）
上記第１のコマンドが書き込みコマンドであるかどうか、および該第１のコマンドが上記複数のデータバンクのうちの第２のデータバンクを決定する書き込みコマンドであるかどうかを決定することをさらに含み、該第２のデータバンクは、上記第１のセグメントに関連付けられる第１の冗長セグメントに対応し、該第１の冗長セグメントに対して該第１のコマンドを実行し、該第１のコマンドは、該第２のデータバンク上で実行される、項目６に記載の方法。
（項目８）
上記第１のデータバンクを決定し、上記第２のデータバンクを決定することは、該複数データバンクの上記順列および上記ＲＡＩＤレベルを備えるグローバルテーブルにアクセスすることを含む、項目７に記載の方法。
（項目９）
１つ以上のデータバンクコンピュータ上に実装される分散型ＲＡＩＤのための方法であって、各データバンクコンピュータは、１つ以上のホストおよび他の複数のデータバンクの各々に連結され、
容量の第１のセグメントに対応するコマンドをホストから受信することであって、該容量および該容量と併せて実装されるＲＡＩＤレベルに対応する冗長データは、複数のデータバンクの各々に格納され、その結果、該容量の各セグメントについて、そのセグメントに関連付けられる該冗長データを備える、対応する冗長セグメントは、該セグメントと同一のデータバンク上に存在しない、ことと、
該複数のデータバンクのうちの第１のデータバンクを決定することであって、該第１のデータバンクは、該第１のセグメントに対応する、ことと、
該第１のセグメントに対して該第１のコマンドを実行することであって、該第１のコマンドは、該第１のデータバンク上で実行される、ことと
を含む、方法。
（項目１０）
上記容量の各セグメントは、上記複数のデータバンクのうちの１つに対応し、各セグメントは、該複数のデータバンクの順列に従ってデータバンクに割り当てられ、上記冗長セグメントの各々は、その冗長セグメントに関連付けられる該容量のいずれかのセグメントに対応する、該複数のデータバンクの各々とは異なるデータバンクに割り当てられる、項目９に記載の方法。
（項目１１）
上記第１のコマンドが書き込みコマンドであるかどうか、および該第１のコマンドが上記複数のデータバンクのうちの第２のデータバンクを決定する書き込みコマンドであるかどうかを決定することをさらに含み、該第２のデータバンクは、上記第１のセグメントに関連付けられる第１の冗長セグメントに対応し、該冗長セグメントに対して該第１のコマンドを実行し、該第１のコマンドは、該第２のデータバンク上で実行される、項目１０に記載の方法。
（項目１２）
上記第１のデータバンクを決定し、上記第２のデータバンクを決定することは、該複数データバンクの上記順列および上記ＲＡＩＤレベルを備えるグローバルテーブルにアクセスすることを含む、項目１１に記載の方法。
（項目１３）
分散型ＲＡＩＤを実装するためのコンピュータ実行可能命令を備える、コンピュータ可読媒体であって、該コンピュータ命令は、
複数のデータバンク上に容量を確立するために実行可能であって、該容量は、一組のセグメントを備え、該一組のセグメントは、該複数のデータバンク上に格納され、
該容量と併せてＲＡＩＤレベルを実装するために実行可能であって、該ＲＡＩＤレベルを実装することは、一組の冗長セグメントを格納することを含み、各冗長セグメントは、該一組のセグメントのうちの１つ以上に対応し、その結果、各冗長セグメントは、該一組のセグメントのうちの対応する１つ以上と同一のデータバンク上に存在せず、
該容量の該一組のセグメントのうちの第１のセグメントに対応するコマンドを受信するために実行可能であり、
該複数のデータバンクのうちの第１のデータバンクを決定するために実行可能であって、該第１のデータバンクは、該第１のセグメントに対応し、
該第１のセグメントに対して該第１のコマンドを実行するために実行可能であって、該第１のコマンドは、該第１のデータバンク上で実行される、
コンピュータ可読媒体。
（項目１４）
上記容量の上記一組のセグメントの各々は、上記複数のデータバンクのうちの１つに対応し、各セグメントは、該複数のデータバンクの順列に従ってデータバンクに割り当てられ、上記一組の冗長セグメントの各々は、該冗長セグメントに対応する上記１つ以上のセグメントのうちのいずれかに対応する、該複数のデータバンクの各々とは異なるデータバンクに割り当てられる、項目１３に記載のコンピュータ可読媒体。
（項目１５）
上記命令はさらに、上記第１のコマンドが書き込みコマンドであるかどうか、および該第１のコマンドが上記複数のデータバンクのうちの第２のデータバンクを決定する書き込みコマンドであるかどうかを決定するために実行可能であり、該第２のデータバンクは、上記第１のセグメントに関連付けられる第１の冗長セグメントに対応し、該第１の冗長セグメントに対して該第１のコマンドを実行し、該第１のコマンドは、該第２のデータバンク上で実行される、項目１４に記載のコンピュータ可読媒体。
（項目１６）
上記第１のデータバンクを決定し、上記第２のデータバンクを決定することは、該複数データバンクの上記順列および上記ＲＡＩＤレベルを備えるグローバルテーブルにアクセスすることを含む、項目１５に記載のコンピュータ可読媒体。
（項目１７）
複数のデータバンクコンピュータ上に分散型ＲＡＩＤを実装するためのコンピュータ実行可能命令を備える、コンピュータ可読媒体であって、該コンピュータ命令は、
容量の第１のセグメントに対応するコマンドをホストから受信するために実行可能であって、該容量および該容量と併せて実装されるＲＡＩＤレベルに対応する冗長データは、複数のデータバンクの各々の上に格納され、その結果、該容量の各セグメントについて、そのセグメントに関連付けられる該冗長データを備える、対応する冗長セグメントは、該セグメントと同一のデータバンク上に存在せず、
該複数のデータバンクのうちの第１のデータバンクを決定するために実行可能であって、該第１のデータバンクは、該第１のセグメントに対応し、
該第１のセグメントに対して該第１のコマンドを実行するために実行可能であって、該第１のコマンドは、該第１のデータバンク上で実行される、コンピュータ可読媒体。
（項目１８）
上記容量の各セグメントは、上記複数のデータバンクのうちの１つに対応し、各セグメントは、該複数のデータバンクの順列に従ってデータバンクに割り当てられ、上記冗長セグメントの各々は、その冗長セグメントに関連付けられる該容量のいずれかのセグメントに対応する、該複数のデータバンクの各々とは異なるデータバンクに割り当てられる、項目１７に記載のコンピュータ可読媒体。
（項目１９）
上記命令はさらに、上記第１のコマンドが書き込みコマンドであるかどうか、および該第１のコマンドが上記複数のデータバンクのうちの第２のデータバンクを決定する書き込みコマンドであるかどうかを決定するために実行可能であり、該第２のデータバンクは、上記第１のセグメントに関連付けられる第１の冗長セグメントに対応し、該冗長セグメントに対して該第１のコマンドを実行し、該第１のコマンドは、該第２のデータバンク上で実行される、項目１８に記載のコンピュータ可読媒体。
（項目２０）
上記第１のデータバンクを決定し、上記第２のデータバンクを決定することは、該複数データバンクの上記順列および上記ＲＡＩＤレベルを備えるグローバルテーブルにアクセスすることを含む、項目１９に記載のコンピュータ可読媒体。
【図面の簡単な説明】
【００１２】
添付され、かつ本明細書の一部を構成する図面は、本発明の特定の態様を描写するために含まれている。本発明のより明確な効果、ならびに本発明に提供されるシステムの構成要素および動作は、同一の参照番号が同一の構成要素を指定する図面に示される、例示であり、したがって、非限定的な実施形態を参照することによって、より容易に明らかとなるであろう。図面に示される特徴は、必ずしも一定の縮尺で描写されているわけではないことに留意されたい。
【図１】図１は、分散型ＲＡＩＤシステムを採用する、アーキテクチャの一実施形態のブロック図である。
【図２Ａ】図２Ａは、データバンクの一実施形態のブロック図である。
【図２Ｂ】図２Ｂは、データバンクのアーキテクチャの一実施形態のブロック図である。
【図３】図３は、分散型ＲＡＩＤシステムによって実装された方法の一実施形態のフローチャートである。
【図４】図４は、分散型ＲＡＩＤシステムを採用する、アーキテクチャの一実施形態の実施例のブロック図である。
【図５】図５は、テーブルの一実施形態のブロック図である。
【図６】図６は、テーブルの一実施形態のブロック図である。
【図７】図７は、テーブルの一実施形態のブロック図である。
【図８】図８は、分散型ＲＡＩＤシステムによって実装される方法の一実施形態のフローチャートである。
【図９Ａ】図９Ａは、分散型ＲＡＩＤシステムによって実装される方法の一実施形態のフローチャートである。
【図９Ｂ】図９Ｂは、分散型ＲＡＩＤシステムによって実装される方法の一実施形態のフローチャートである。
【図１０】図１０は、書き込みキャッシュの一実施形態のブロック図である。
【図１１】図１１は、分散型ＲＡＩＤシステムによって実装される方法の一実施形態のフローチャートである。
【図１２】図１２は、分散型ＲＡＩＤシステムによって実装される方法の一実施形態のフローチャートである。
【発明を実施するための形態】
【００１３】
（詳細な説明）
本発明および種々の特徴ならびにそれらの有利な詳細は、添付の図面に示される非限定的な実施形態を参照してより完全に説明され、以下の説明に詳細に記述される。本発明の詳細を不必要に不明瞭にしないように、周知の開始材料、処理技術、構成要素、および機器の説明は、省略されている。しかしながら、発明を実施するための形態および具体的な実施例は、本発明の好ましい実施形態を示すが、限定としてではなく、例としてのみ与えられていることを理解されたい。本開示から、根本的な発明の概念の趣旨および／または範囲内の種々の置換、修正、追加、および／または再配列が当業者に明らかとなるであろう。本明細書に記載される実施形態は、コンピュータ可読媒体（例えば、ＨＤ）、ハードウェア回路等、または任意の組み合わせ上に存在してもよい、好適なコンピュータ実行可能命令に実装することができる。
【００１４】
具体的な実施形態を記載する前に、特定の実施形態を実装するためのハードウェアアーキテクチャの実施形態を本明細書に説明する。一実施形態は、ネットワークに通信可能に連結される、１つ以上のコンピュータを含むことができる。当業者に既知であるように、コンピュータは、中央演算処理装置（「ＣＰＵ」）と、少なくとも１つの読み込み専用メモリ（「ＲＯＭ」）と、少なくとも１つのランダムアクセスメモリ（「ＲＡＭ」）と、少なくとも１つのハードドライブ（「ＨＤ」）と、１つ以上のエントリ／出力（「Ｉ／Ｏ」）デバイスとを含むことができる。Ｉ／Ｏデバイスには、キーボード、モニタ、プリンタ、電子ポインティングデバイス（マウス、トラックボール、スタイリスト等）等を含むことができる。種々の実施形態では、コンピュータは、ネットワーク上の少なくとも１つのデータベースへのアクセスを有する。
【００１５】
ＲＯＭ、ＲＡＭ、およびＨＤは、ＣＰＵが実行可能なコンピュータ実行可能命令を格納するためのコンピュータメモリである。本開示内では、「コンピュータ可読媒体」という用語は、ＲＯＭ、ＲＡＭ、およびＨＤのみに制限されず、プロセッサが読み込むことができる任意の種類のデータストレージ媒体を含むことができる。いくつかの実施形態では、コンピュータ可読媒体は、データカートリッジ、データバックアップ磁気テープ、フロッピー（登録商標）ディスク、フラッシュメモリドライブ、光学データストレージドライブ、ＣＤ−ＲＯＭ、ＲＯＭ、ＲＡＭ、ＨＤ等を指してもよい。
【００１６】
本明細書に記載される機能性またはプロセスの少なくとも部分は、好適なコンピュータ実行可能命令に実装することができる。コンピュータ実行可能命令は、ソフトウェアコード構成要素またはモジュールとして、１つ以上のコンピュータ可読媒体（非揮発性メモリ、揮発性メモリ、ＤＡＳＤアレイ、磁気テープ、フロッピー（登録商標）ディスク、ハードドライブ、光学ストレージデバイス等、または任意の他の好適なコンピュータ可読媒体もしくはストレージデバイス等）上に格納されてもよい。一実施形態では、コンピュータ実行可能命令は、コンパイルされたＣ＋＋、Ｊａｖａ（登録商標）、ＨＴＭＬ、または任意の他のプログラミングもしくはスクリプトコードのラインに含まれてもよい。
【００１７】
さらに、開示される実施形態の機能は、１つのコンピュータ上に実装されてもよく、またはネットワーク内の、もしくはネットワークにわたる２つ以上のコンピュータ間で共有／分散されてもよい。実施形態を実装するコンピュータ間での通信は、任意の電子、光学、高周波信号、または既知のネットワークプロトコルに従う、通信の他の好適な方法およびツールを使用して達成することができる。
【００１８】
本明細書で使用される場合、「備える（ｃｏｍｐｒｉｓｅｓ）」、「備える（ｃｏｍｐｒｉｓｉｎｇ）」、「含む（ｉｎｃｌｕｄｅｓ）、「含む（ｉｎｃｌｕｄｉｎｇ）」、「有する（ｈａｓ）」、「有する（ｈａｖｉｎｇ）」という用語、またはこれらの任意の他の変形は、非排他的な含有を網羅することが意図される。例えば、プロセス（ａ  ｐｒｏｃｅｓｓ）、プロセス（ｐｒｏｃｅｓｓ）、物品、または要素のリストを備える装置は、必ずしもこれらの要素に限定されず、明確にリストされていない、またはそのようなプロセス、物品、もしくは装置に内在する、他の要素を含んでもよい。さらに、そうではないと明確に述べられていない限り、「または」は、排他的な「または」ではなく、包括的な「または」を指す。例えば、条件ＡまたはＢは、以下の、Ａが真（または存在する）かつＢが偽（または存在しない）、Ａが偽（または存在しない）かつＢが真（または存在する）、ならびにＡおよびＢの両方が真（または存在する）のいずれか１つによって満足される。
【００１９】
さらに、本明細書に与えられる任意の実施例または図解は、決して、それらと共に利用される、いかなる用語に対する制約としても、限定としても、またはいかなる用語の定義を表現するとも見なされない。代わりに、これらの実施例または図解は、１つの特定の実施形態に関して説明しており、一例にすぎないと見なされる。当業者は、これらの実施例または図解と共に利用される、いかなる用語も、それと共に、または明細書の他の場所に与えられている場合も与えられていない場合もある、他の実施形態を包含し、すべてのそのような実施形態は、その用語の範囲内に含まれることが意図されることを認識するであろう。そのような非限定的な実施例および図解を指定する言語には、「例えば（ｆｏｒ  ｅｘａｍｐｌｅ）、「例として（ｆｏｒ  ｉｎｓｔａｎｃｅ）」、「例えば（ｅ．ｇ．）」、「一実施形態では」を含むが、これらに限定されない。
【００２０】
本願は、２００９年６月５日に出願された、Ｇａｌｌｏｗａｙらによる、名称が「Ｍｅｔｈｏｄ  ａｎｄ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｄａｔａ  Ｍｉｇｒａｔｉｏｎ  ｉｎ  ａ  Ｄｉｓｔｒｉｂｕｔｅｄ  ＲＡＩＤ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ」の米国特許出願第＿＿＿＿＿＿＿＿（ＰＩＶＯＴ１１１０−１）号、２００９年６月５日に出願された、Ｇａｌｌｏｗａｙらによる、名称が「Ｍｅｔｈｏｄ  ａｎｄ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｄｉｓｔｒｉｂｕｔｉｎｇ  Ｃｏｍｍａｎｄｓ  ｔｏ  Ｔａｒｇｅｔｓ」の同第＿＿＿＿＿＿＿＿（ＰＩＶＯＴ１１２０−１）号、２００９年６月５日に出願された、Ｇａｌｌｏｗａｙらによる、名称が「Ｍｅｔｈｏｄ  ａｎｄ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｉｎｉｔｉａｌｉｚｉｎｇ  Ｓｔｏｒａｇｅ  ｉｎ  ａ  Ｓｔｏｒａｇｅ  Ｓｙｓｔｅｍ」の同第＿＿＿＿＿＿＿＿（ＰＩＶＯＴ１１３０−１）号、２００９年６月５日に出願された、Ｇａｌｌｏｗａｙらによる、名称が「Ｍｅｔｈｏｄ  ａｎｄ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｒｅｂｕｉｌｄｉｎｇ  Ｄａｔａ  ｉｎ  ａ  Ｄｉｓｔｒｉｂｕｔｅｄ  ＲＡＩＤ  Ｓｙｓｔｅｍ」の同第＿＿＿＿＿＿＿＿（ＰＩＶＯＴ１１４０−１）号、および２００９年６月５日に出願された、Ｇａｌｌｏｗａｙらによる、名称が「Ｍｅｔｈｏｄ  ａｎｄ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｐｌａｃｅｍｅｎｔ  ｏｆ  Ｄａｔａ  ｏｎ  ａ  Ｓｔｏｒａｇｅ  Ｄｅｖｉｃｅ」の同第＿＿＿＿＿＿＿＿（ＰＩＶＯＴ１１５０−１）号に関し、これらのすべては、本明細書に参考として援用される。
【００２１】
ここで、特に、データストレージに関する文脈の要約記述が有用であり得る。上述されるように、ＲＡＩＤシステムは、信頼性を向上し、場合によっては、コンピューティングデバイス（ホストとして既知）の処理量を改善するために、ストレージにこれらのＲＡＩＤシステムを使用して、集合的にアレイと称される、複数のハードディスクドライブ（または他の種類のストレージ媒体）にわたって、データを分割および複製する。しかしながら、ＲＡＩＤの現行の実装は、種々の問題を有する場合がある。これらの問題は、これらのＲＡＩＤシステムのアーキテクチャによって課される制限、ＲＡＩＤシステムを備えるディスク上のデータの構成もしくは配置、またはこれらの解決策を実装するためにカスタムハードウェアもしくはソフトウェアを使用する必要性に起因し、そのような解決策の実装に関連する費用を引き上げる場合がある。中でも特に、これらの問題を実質的に改善することが望ましい。
【００２２】
そのために、今、本発明のシステムおよび方法が注目される。これらのシステムおよび方法の実施形態は、一組のデータバンクを備える、分散型ＲＡＩＤシステムを提供する。より具体的には、分散型ＲＡＩＤシステムの特定の実施形態では、各データバンクは、一組の関連ストレージ媒体を有し、同様の分散型ＲＡＩＤアプリケーションを実行する。データバンクの各々の上の分散型ＲＡＩＤアプリケーションは、それら自体の間で、データバンクの関連ストレージ媒体上に記録されるデータと併せた、ＲＡＩＤのレベルの実装に関連するデータフローを分散し、制御するように協働する。
【００２３】
具体的に、特定の実施形態では、関連ＲＡＩＤレベルを伴う容量は、分散型ＲＡＩＤシステムを使用して作成されてもよい。次いで、分散型ＲＡＩＤアプリケーションの各々は、その容量またはその容量と併せた所望のＲＡＩＤレベルの実装に関連付けられるデータが、分散型ＲＡＩＤシステムの複数のデータバンク上に格納され得るように、その容量のデータに関連付けられる動作を協働することができる。
【００２４】
これらのデータバンクの各々の上で実行される同様の分散型ＲＡＩＤアプリケーションを使用して、容量のデータおよびＲＡＩＤの実装に関連付けられるデータの両方を複数のデータバンク上に格納することによって、容量と併せたＲＡＩＤのレベルの実装を協働することによって、多数の利点が達成され得る。すなわち、異なるＲＡＩＤレベルと併せて実装される容量のうちの１つ以上に、異なるストレージ容量が割り振られてもよい。さらに、データバンクにわたるストレージの協働およびＲＡＩＤの実装が、実質的に同一の分散型ＲＡＩＤアプリケーションを使用して達成される際、多くの場合において、標準ｘ８６ベースのサーバおよびストレージ媒体等の標準または既製のハードウェアが利用されてもよい。また、本明細書に提示される実施形態または他の実施形態を利用する、多くの他の利点も認識され得、具体的に詳細に指摘されている場合もない場合もある、そのような利点は、本開示を読んだ後に認識されるであろう。
【００２５】
ここで、図１を参照すると、分散型ＲＡＩＤシステムの一実施形態を利用するシステムのアーキテクチャのブロック図が描写されている。分散型ＲＡＩＤシステム１００は、一組のデータバンク１１０を含み、各データバンク１１０は、スイッチ１２０の両方に通信可能に連結される。また、スイッチ１２０の各々も、ホスト１０２が特定のデータバンク１１０に対応する一組のパスを通して各データバンク１１０と通信し得るように、各ホスト１０２に通信可能に連結され、各パスは、スイッチ１２０のうちの１つを備える。
【００２６】
データバンク１１０と、スイッチ１２０と、ホスト１０２との間の通信可能な連結は、イーサネット（登録商標）、ＳＣＳＩ、ｉＳＣＳＩ、ファイバーチャネル、シリアルアタッチドＳＣＳＩ（「ＳＡＳ」）、アドバンスドテクノロジーアタッチメント（「ＡＴＡ」）、シリアルＡＴＡ（「ＳＡＴＡ」）、または当該技術分野において既知の他のプロトコルを含む、所望のほぼいかなる伝送媒体（有線または無線のいずれか）を使用しても達成され得る。さらに、通信可能な連結は、インターネット、ＬＡＮ、ＷＡＮ、無線ネットワーク、または当該技術分野において既知の任意の他の通信ネットワーク等の通信ネットワークと併せて実装されてもよい。
【００２７】
次いで、ｉＳＣＳＩ、ＳＣＳＩ等のコマンドプロトコルを使用する一実施形態では、ホスト１０２は、データを操作するために、データバンク１１０と通信してもよい。より具体的には、データバンク１１０の各々は、ストレージ媒体（本明細書上で、後により詳細に説明される）を備える。集合的に、データバンク１１０内のストレージ媒体は、ストレージ、ストレージデバイス等の１つ以上の連続ブロックとして、ホスト１０２に対して仮想化され、提示されてもよい。例えば、ｉＳＣＳＩプロトコルが利用される時、データバンク１１０内のストレージ媒体は、一実施形態では、複数のポートを伴う、ＳＣＳＩターゲットとして、ホスト１０２に提示されてもよい。
【００２８】
したがって、動作中、一実施形態では、ホスト１０２（またはホスト１０２側のユーザもしくはデータバンク１１０とインターフェースをとっているユーザ）は、容量の作成を要求し、その容量と併せて実装されるＲＡＩＤのレベルを指定してもよい。その容量およびその容量と関連した所望のレベルのＲＡＩＤの実装に関連付けられるデータは、データバンク１１０にわたって格納される。次いで、ホスト１０２は、容量またはその一部に対応する論理アドレスを使用して、この容量にアクセスしてもよい。このように、ホスト１０２は、作成されたストレージの容量を利用することができ、ホスト１０２に対して実質的に見えないように、これらの容量と併せて耐障害性を達成することができる。
【００２９】
ストレージの仮想化およびデータバンク１１０を利用したＲＡＩＤの実装は、分散型ＲＡＩＤを実装するように動作可能なデータバンク１１０コンピュータの一実施形態のブロック図を描写する、図２Ａを参照して、より理解され得る。ここで、データバンク１１０は、データストア２５０と、コンピュータ可読媒体上に格納された命令を実行するように動作可能なプロセッサ２０２とを備え、命令は、分散型ＲＡＩＤアプリケーション２１０を実装するように動作可能である。分散型ＲＡＩＤアプリケーション２１０は、そのデータバンク１１０に関する障害が存在しているかどうかを決定するために、他のデータバンク１１０上の分散型ＲＡＩＤアプリケーション２１０にハートビート通信を周期的に発行してもよい。分散型ＲＡＩＤアプリケーション２１０は、別のデータバンク１１０が障害を抱えていると決定する場合、そのデータバンク１１０に対応する、１つ以上の障害フラグを設定してもよい。各データバンク１１０上の各分散型ＲＡＩＤアプリケーション２１０のこれらの障害フラグを使用して、特定の分散型ＲＡＩＤアプリケーション２１０は、特定のデータバンク１１０に障害があるかどうかを決定してもよい。
【００３０】
また、分散型ＲＡＩＤアプリケーション２１０は、例えば、ＳＡＴＡ、ＰＡＴＡ、ＦＣ等の既知のほぼいかなるプロトコルにも従って動作するディスク２５２であってもよい、１つ以上のストレージ媒体を備えるデータストア２５０へのアクセスを有してもよく（例えば、読み込む、書き込む、コマンドを発行する等のために）、ディスク２５２の各々は、同等のサイズであってもなくてもよい。データバンク１１０の各々の上で実行されている分散型ＲＡＩＤアプリケーション２１０は、データバンク１１０にわたるデータストア２５０を使用した容量の割り当ておよび使用、ならびにすべてがメモリ２３０（データストア２５０または別のメモリ全体であってもよい）内に格納されていてもよい、データバンク１１０間で共有される一組のグローバルテーブル２４０、一組のローカルテーブル２４５、および書き込みキャッシュ２６０を利用した、これらの容量と併せたＲＡＩＤの実装を可能にすることができる。
【００３１】
図２Ｂは、分散型ＲＡＩＤを実装するように動作可能なデータバンク１１０コンピュータを実装するために使用されてもよい、ハードウェアアーキテクチャの一実施形態のブロック図を描写する。この構造的実施例では、データバンク１１０は、Ｉｎｔｅｌ  ｘ８６アーキテクチャまたはいくつかの他のアーキテクチャ全体に従い得る、１つ以上のプロセッサ２０２と、一実施形態では、サウスブリッジチップ等であってもよい、Ｉ／Ｏコントローラハブ２１２にバスを通して連結される、メモリ２３０とを備える。Ｉ／Ｏコントローラハブ２１２は、同様に、ＰＣＩ−Ｘバス、ＰＣＩ高速バス等のバス２７２に連結され、それを制御してもよい。例えば、ＬＳＩ１０６８  ＳＡＴＡ／ＳＡＳコントローラ等の１つ以上のディスクコントローラ２６２が、このバス２７２に連結される。これらのディスクコントローラ２６２の各々は、１つ以上のディスク２５２に連結され、集合的に、これらのディスク２５２は、データストア２５０を構成してもよい。さらに、また、１つ以上のネットワークインターフェース２８２は、バス２７２に連結されてもよい。これらのネットワークインターフェース２８２は、マザーボード上に含まれるネットワークインターフェース（イーサネット（登録商標）等）であってもよく、イーサネット（登録商標）、ファイバーチャネル等の１つ以上のプロトコルを介してインターフェースをとるように構成された、１つ以上のネットワークインターフェースカードを備えてもよく、またはデータバンク１１０が、これらのネットワークインターフェース２８２を通してスイッチ１２０と通信し得るような、いくつかの他の種類のネットワークインターフェースであってもよい。
【００３２】
次に、図３に移ると、容量を割り当て、これらの容量に関連付けられるデータを、データバンク１１０にわたってデータストア２５０内に配置するための方法の一実施形態が示されている。初期に、データストア２５０のディスク２５２上に容量が割り当てられる前に、ディスク２５２は、ステップ３０５でフォーマットされてもよい。上述されるように、いかなる障害からも容易かつ簡単に回復する能力を有するために、冗長データは、任意の対応する格納されたデータに対して、正確である必要があり得る。多くの場合、これは、容量を格納するために利用されるディスク２５２が、ディスク２５２上の領域内の現行データから冗長データを計算することによってフォーマットされることを求め得、容量の部分は、これらの領域に格納されるデータが現在ゴミ値であり得る場合にさえ格納される。これらの計算は、望ましくない大量の時間を消費する場合がある。
【００３３】
さらに、図１に関して詳述されるもの等の分散型ＲＡＩＤ環境では、それら自体に他の問題を提示する場合がある。より具体的には、容量の異なる部分が異なるデータバンク１１０上に格納され得、また、容量に対応する冗長データも種々のデータバンク１１０上に格納され得る際、この種類のフォーマッティングの達成はさらに、データバンク１１０上の分散型ＲＡＩＤアプリケーション２１０間の相当量の通信を要求し、プロセッササイクルおよび通信バンド幅を消費する場合がある。
【００３４】
したがって、一実施形態では、容量のデータが格納されるディスクの領域に対応する冗長データが、容量のそのデータが格納されるディスク２５２の領域に対して正確であることを確実にするために、容量に対応するデータが格納されるディスク２５２上の領域、および冗長データが格納されるディスク２５２上の領域に、ゼロ値が書き込まれてもよい。容量のデータが格納されるディスク２５２の領域、および冗長データが格納されるディスク２５２の領域の両方をゼロ化することによって、容量の任意のデータがその対応する冗長データから再作成できることを保証することができる。
【００３５】
ディスク２５２のゼロ化は、他の利点を有し得る。すなわち、冗長データを決定するために、複雑な計算を実施することが必要とされない場合があり、容量が格納される領域と、これらの領域に対応する冗長データが格納される領域との間の相対精度を達成するために、分散型ＲＡＩＤアプリケーション２１０間の通信が必要とされない場合があるということである。
【００３６】
重要なことに、容量およびその対応する冗長データと共に使用するためのディスク２５２の領域をゼロ化することによって、ＲＡＩＤシステム１００の使用可能性における大幅な遅延が回避され得る。これらの利点は、例えば、分散型ＲＡＩＤシステム１００の初期使用、新しいディスク２５２のインストール、容量の削除等から生じる、ディスク２５２の割り当てられていない領域を、動作中に実質的に継続的にゼロ化するプロセスを使用することによって達成されてもよい。これらの場合では、データバンク１１０の各々の上のディスク２５２の現在割り当てられていない（ｃｕｒｒｅｎｔｌｙ  ｕｎａｌｌｏｃａｔｅｄ）（すなわち、現在割り当てられていない（ｎｏｔ  ｃｕｒｒｅｎｔｌｙ  ａｌｌｏｃａｔｅｄ））領域に、ゼロが書き込まれてもよい（領域の「ゼロ化」と称される）。
【００３７】
ゼロ化されている、ディスク２５２の割り当てられていない領域は、容量の一部に対応するコマンド、または容量の一部に関連付けられる冗長データが、その部分が割り付けられるデータバンク１１０で受信される時、分散型ＲＡＩＤアプリケーション２１０が、その部分が割り付けられているデータバンク１１０上のディスク２５２の対応する領域に、その部分が割り付けられているかどうかを決定するために確認し得るように、追跡されてもよい。データバンク１１０上のディスク２５２の対応する領域が割り付けられていない場合、分散型ＲＡＩＤアプリケーション２１０は、ゼロ化されているディスク２５２の領域を選択し、ディスク２５２のこの領域を、容量または対応する冗長データの部分に割り付けてもよい。
【００３８】
以前にゼロ化されていない、任意の割り付けられていない領域を同時にゼロ化し、容量または冗長データの一部に対応するコマンドが受信されるまで、ディスク２５２のゼロ化された領域をその部分に割り付けるのを待つことによって、分散型ＲＡＩＤシステム１００は、長時間を伴うフォーマッティングプロセスなく、実質的に即座に動作し得、分散型ＲＡＩＤシステム１００の動作に対して比較的邪魔にならないように、新しいディスク２５２が追加され、容量が削除または解放され得る。
【００３９】
したがって、上述を読んだ後、ディスク２５２がフォーマットされるステップ３０５は、分散型ＲＡＩＤシステム１００に関する容量の作成前、中、または後に達成されてもよく、ステップ３０５（および本明細書のフローチャート全体内のすべての他のステップ）の位置付けは、ステップの順序を示唆しないことが留意される。また、図３中の他のステップおよび本開示の残りを徹底的に概観した後に留意されるように、これらのデータバンク１１０上のディスク２５２上の物理領域が、容量または冗長データの一部を格納するように割り付けられる前に、容量が作成され、容量および容量に対応する冗長データの部分がデータバンク１１０に割り付けられてもよく、さらに、そのような部分に対応するデータを格納するために使用されるディスク２５２上の物理領域のゼロ化は、容量の作成前、または容量の作成後であるが、これらの物理領域が容量もしくは冗長データの対応する部分に割り付けられる前に実施されてもよい（後でより詳細に記載される）。
【００４０】
これらの位置は、分散型ＲＡＩＤアプリケーション２１０の実施形態によって利用され得るセグメントの概念を参照して、よりよく説明され得、セグメントは、２０４８論理ブロックアドレス（ＬＢＡ）のサイズ（またはいくつかの他のサイズ）であってもよく、論理ブロックアドレスのサイズは、ディスク２５２のセクタサイズに対応する。したがって、データバンク１１０の各々の上のデータストア２５０内のディスク２５２は、ステップ３１０で、同等サイズのセグメント（例えば、１ＭＢ）に分割されてもよい。これらのセグメントは、ディスクドライブ２５２の１つ以上の連続データブロックに対応してもよい。したがって、ユーザまたはホスト１０２が、ステップ３２０で、分散型ＲＡＩＤアプリケーション２１０から容量の作成を要求し、ステップ３３０で、その容量と併せて使用されるＲＡＩＤのレベルを指定する時、ステップ３４０で、容量の要求されたサイズに対応する多数のこれらのセグメント、加えて、容量と併せたＲＡＩＤの所望のレベルを実装するのに所望されるセグメントの数が、容量に割り付けられてもよい。
【００４１】
したがって、容量は、多数のセグメント（また、論理セグメントとも称される）を備え、これらのセグメントの各々は、データバンク１１０が容量のそのセグメントを管理するように割り付けられ得るように、特定のデータバンク１１０に関連付けられてもよい。このセグメントは、例えば、２０４８論理ブロックアドレス（ＬＢＡｓ）のサイズであってもよく、論理ブロックアドレスのサイズは、ディスク２５２のセクタサイズに対応する（また、他の配列およびサイズも可能である）。ほとんどの場合、容量のそのセグメントを備える物理ストレージは、そのセグメントを管理する、データバンク１１０のデータストア２５０内に格納されるが、しかしながら、他の場合では、そのセグメントに対応するデータは、異なるデータバンク１１０のデータストア２０５内に格納されてもよい（言い換えると、特定の場合では、そのセグメントを管理する分散型ＲＡＩＤアプリケーションを備えるデータバンク１１０は、そのセグメントに対応するデータを格納するデータストア２５０を備えるデータバンク１１０とは異なってもよい）。
【００４２】
一実施形態では、特定の容量に対応するデータバンク１１０へのセグメントの割り当ては、分散型ＲＡＩＤシステム１００に対応する一組のデータバンク１１０のランダム順列を決定することによって達成されてもよい。したがって、６つのデータバンクが存在する場合、ランダム順列がデータバンクの各々を備える、サイズ６のランダム順列は、セグメントがランダム順列の順序で連続してデータバンクの各々に割り付けられ得るように決定されてもよい。
【００４３】
例えば、分散型ＲＡＩＤシステム内に４つのデータバンク１１０が存在すると仮定する（それらを、データバンク１、データバンク２等と呼ぶ）。データバンク２、データバンク４、データバンク１、およびデータバンク３のランダム順列が決定され得る。この場合、容量に対応する第１のセグメントは、データバンク２上にあり、第２のセグメントは、データバンク４上にあってもよく、第３のセグメントは、データバンク１上にあってもよく、第４のセグメントは、データバンク３上にあってもよく、第５のセグメントは、元に戻って、先と同様にデータバンク４上にあってもよい。この方法では、容量に対応する特定のセグメントの位置は、容量に対応するランダム順列が既知である場合、数学的に決定されてもよい。
【００４４】
言及されるように、ユーザは、ステップ３３０で、ＲＡＩＤのレベルが容量と併せて実装されることを指定してもよい。この場合、分散型ＲＡＩＤアプリケーション２１０は、確実にＲＡＩＤの所望のレベルが達成されるように、ＲＡＩＤ情報がデータバンク１１０にわたって適切に分散型されるように、ステップ３５０で、容量と併せたＲＡＩＤの実装に対応する任意のデータが、適切な位置に格納されることを確実にしてもよい。
【００４５】
例えば、容量と併せてＲＡＩＤ５を実装することが望まれる場合、分散型ＲＡＩＤアプリケーション２１０は、所望のＲＡＩＤパリティグループサイズを決定してもよい（例えば、ユーザが設定したＲＡＩＤセットに基づいて、ないしは別の方法で決定される）。この決定は、分散型ＲＡＩＤシステム内のデータバンク１１０の数に基づいてもよく、一実施形態では、データバンク１１０の数より１つ少なくてもよい（加えて、パリティデータに相当する追加の１つ）。
【００４６】
説明のため、５つのデータバンク１１０が存在する場合、容量に関連付けられるデータを格納する、４つのセグメント（データセグメントと称される）毎に、１つのセグメントは、パリティ専用とされ、４つのセグメントのパリティは、計算され、このパリティセグメントに格納され、パリティセグメントは、データストア２５０が、パリティセグメントのパリティデータが計算されるデータセグメントを備えない、データバンク１１０専用とされる。
【００４７】
この時点で、論理容量に対応する各セグメントは、特定のデータバンク１１０に割り付けられており、また、容量に対応するＲＡＩＤデータを格納するために利用される任意のセグメント１００（容量と併せたＲＡＩＤの任意のレベルの実装に関連付けられる、任意の種類の冗長データを格納するためのセグメントの使用に対する一般的適用性の損失なく、冗長セグメントまたはパリティセグメントとして交換可能に本明細書に参照される）も、データバンク１１０に割り付けられているが、しかしながら、データバンクのデータストア２５０のディスク２５２の物理セクタは、依然として、これらのセグメントに対応するデータを格納するように割り付けられていなくてもよい。したがって、ステップ３６０で、容量の論理セグメントが割り付けられている、データバンク１１０上のディスク２５２の物理セグメントが決定され、論理セグメントに割り付けられてもよい。このセグメントマッピングは、各データバンク１１０のローカルテーブル２４５内に格納されてもよい。この配列は、前述されるように、ある後の時点、例えば、コマンドが論理セグメントに書き込むことを最初に試みる時に行われてもよい。
【００４８】
この割り付けを行う時、一実施形態では、ディスク２５２の領域の異なる性能特性が、アクセスされる論理セグメントに対して考慮されてもよい。言い換えると、ディスク２５２は、同一のディスクの他のセグメントより効率的にアクセスされるセグメントを有してもよい。したがって、一実施形態では、ディスク２５２の物理セグメントを、論理セグメントに関連付けられる基準に基づいて割り付けることが望まれ得る。特性には、例えば、論理セグメントに対応する容量に関連付けられるサービスの品質指定、論理セグメントを備える容量への多数のアクセス等の事柄が含まれ得る。
【００４９】
次いで、ステップ３７０で、容量に対応する情報は、容量に対応するセグメントまたは容量と併せたＲＡＩＤの実装に対応するセグメントの位置が、この格納された情報から決定され得るように格納されてもよい。したがって、この格納された情報（集合的に、マッピングデータと称される）は、容量、容量に対応するランダム順列（例えば、セグメントが位置するデータバンク１１０の順序を示す）、および任意のＲＡＩＤ実装のパリティグループサイズ（例えば、容量が４＋１ＲＡＩＤセット、７＋１ＲＡＩＤセットに対応するかどうか、ＲＡＩＤ１が実装されているかどうか等）の識別子を含んでもよい。このデータは、確実に、各分散型ＲＡＩＤアプリケーション２１０に関連付けられる一組のテーブル２４０の少なくとも一部が、実質的に矛盾なく、その位置に残存するように、他のデータバンク１１０上の他の分散型ＲＡＩＤアプリケーション２１０に通信することができるように、例えば、グローバルテーブル２４０内に格納されてもよい。
【００５０】
上記の説明は、５つのデータバンク１１０を伴う分散型ＲＡＩＤシステムの一実施形態の一実施例を描写する、図４を参照して、よりよく理解され得る。ここで、各データバンク１１０の各データストア２５０は、一組の同等サイズのセグメント４０２として配置されており、これは、本実施例の目的のために、１ＭＢのサイズであると仮定される。今、ホスト１０２が、データバンク１１０ｂ上の分散型ＲＡＩＤアプリケーション２１０ｂから、ＲＡＩＤレベル５で８ＭＢの容量を要求すると仮定する。この場合、分散型ＲＡＩＤアプリケーション２１０ｂは、容量のデータ部分に８つのセグメント４０２が要求され、一方、容量の所望のＲＡＩＤレベルの実装と併せて容量の冗長データを格納するために、２つのセグメント４０２が要求され得ると決定してもよい。次いで、分散型ＲＡＩＤアプリケーション２１０ｂは、容量のランダム順列を決定してもよい。本実施例の目的のため、ランダム順列は、データバンク１１０ｂ、データバンク１１０ｄ、データバンク１１０ａ、データバンク１１０ｃ、およびデータバンク１１０ｅであると仮定する。したがって、データバンク１１０ｂに、セグメント４０２ａ、要求された容量のうちの第１のセグメントが割り付けられてもよく、データバンク１１０ｄに、セグメント４０２ｂ、要求された容量のうちの第２のセグメントが割り付けられてもよく、データバンク１１０ａに、セグメント４０２ｃ、要求された容量のうちの第３のセグメントが割り付けられてもよく、データバンク１１０ｃに、セグメント４０２ｄ、要求された容量のうちの第４のセグメントが割り付けられてもよく、データバンク１１０ｅに、セグメント４０２ｅ、要求された容量のうちの第５のセグメントが割り付けられてもよい。次いで、割り付けは、データバンク１１０ｂに、セグメント４０２ｆ、要求された容量のうちの第６のセグメントが割り付けられ得、データバンク１１０ｄに、セグメント４０２ｇ、要求された容量のうちの第６のセグメントが割り付けられ得、データバンク１１０ａに、セグメント４０２ｈ、要求された容量のうちの第８のセグメントが割り付けられ得るように、ランダム順序の第１のデータバンク１１０で再び開始する。
【００５１】
一旦、容量に関連付けられるデータを格納するためのデータセグメント４０２ａ〜４０２ｈが割り付けられると、分散型ＲＡＩＤアプリケーション２１０ｂは、そのＲＡＩＤレベルの実装に関連付けられる任意のデータのセグメント４０２を割り付けてもよい。本実施例では、容量に対してＲＡＩＤ５が望まれる際、分散型ＲＡＩＤアプリケーション２１０ｂは、５つのデータバンク１１０が利用されている際、（４＋１）パリティセットが望まれ得ると決定してもよい。次いで、分散型ＲＡＩＤアプリケーション２１０ｂは、パリティを格納して、８つのセグメント４０２と併せてＲＡＩＤ５を実装するために、追加の２つのセグメント４０２が必要とされ得ることを決定してもよい。
【００５２】
さらに、特定の一組のデータセグメント４０２を利用して作成されたパリティが、そのデータストア内にこれらの一組のデータセグメント４０２のいずれかを有するデータバンク１１０上に格納されないことが望まれ得る。したがって、また、分散型ＲＡＩＤアプリケーション２１０ｂは、パリティセグメントの各々が、決定されたＲＡＩＤパリティグループサイズに基づいて割り当てられる位置、第１のデータセグメント４０２ａの位置等を決定してもよい。ここで、データセグメント４０２ａ、４０２ｂ、４０２ｃ、および４０２ｄ内に格納されているデータに対応するパリティデータを格納する、パリティセグメント４０２ｉは、データバンク１１０ｃのデータストア２５０ｃ内に割り当てられ、一方、データセグメント４０２ｅ、４０２ｆ、４０２ｇ、および４０２ｈ内に格納されているデータに対応するパリティデータを格納する、パリティセグメント４０２ｊは、データバンク１１０ｅのデータストア２５０ｅ内に割り当てられる。ここで、データセグメント４０２ａ〜４０２ｈを備える容量と併せたＲＡＩＤの実装に関連付けられるパリティ情報を格納する、パリティセグメント４０２ｉ、４０２ｊは、容量に関連付けられるデータを格納する、これらのセグメント４０２ａ〜４０２ｈと実質的に同一に配置され、サイズ化されることに留意されたい。
【００５３】
したがって、ホスト１０２が容量にアクセスする時、容量の第１のデータセグメントに対応する論理アドレスを伴う要求は、データバンク１１０ｂ上のデータセグメント４０２ａに対応してもよく、容量の第２のデータセグメントに対応する論理アドレスを伴う要求は、データバンク１１０ｄ上のデータセグメント４０２ｂに対応してもよい等である。ここで、割り当てられたデータセグメント４０２ａ〜４０２ｈは、異なるデータバンク１１０上に存在し得ること、および任意の割り当てられたデータセグメント４０２ａ〜４０２ｈの位置は、その容量に関連付けられるランダム順列を使用して決定され得る（例えば、データバンク１１０のグローバルテーブル２４０内に格納される際）ことに留意されたい。上述されるように、しかしながら、データバンク１１０上のデータストア２５０は、仮想化されており、したがって、要求ホストは、データストア２５０内のデータセグメント４０２の位置、複数のデータストア２５０が存在すること、データストア２５０が複数のデータバンク１１０にわたって拡散されていること等を認識していなくてもよい。ホスト１０２は、単一組続容量をアドレス指定していると信じている。
【００５４】
本実施例におけるデータバンク１１０上のデータセグメント４０２の位置（およびデータバンク１１０の対応するランダム順列）は、説明のためのものであり、容量のデータセグメント４０２は、ほぼいかなるランダム順列または他の順列にも従って、いかなるデータバンク１１０上のいかなるデータストア２５０上にも位置し得ることが明らかとなるであろう。さらに、本実施例におけるセグメント４０２の各々は、１ＭＢであるが、これらは、一般性を喪失することなく、任意のサイズであってもよいこと、および１ＭＢサイズは、説明を容易にするためだけに選択されたことが留意されるであろう。
【００５５】
上記の説明から分かるように、その結果、特定のデータセグメント４０２またはパリティセグメント４０２の位置は、容量に関連付けられるランダム順列およびＲＡＩＤパリティグループサイズを使用して、アルゴリズムによって（例えば、容量にセグメントを割り付けるため、容量のパリティセグメントを見つけるため等に使用されるものと同一のランダム順列を使用して）決定することができる。したがって、情報は、例えば、一組のグローバルテーブル２４０内に、容量に対応する識別子と併せて格納されてもよい。さらに、これらのグローバルテーブル２４０は、データバンク１１０の各々内の一組のグローバルテーブル２４０の少なくとも部分が、実質的に矛盾のない状態に保たれるように、データバンク１１０間で通信されてもよく、ないしは別の方法で更新されてもよい。
【００５６】
ここで、分散型ＲＡＩＤアプリケーション２１０に関連付けられるグローバルテーブル２４０に関して、より詳細に簡潔に掘り下げて考えることが有用であり得る。記載されるように、一実施形態では、グローバルテーブル２４０は、分散型ＲＡＩＤアプリケーション２１０によって作成された容量に関連付けられる情報を格納してもよく、これらのテーブル２４０は、その容量内のデータセグメントに関連付けられるデータバンク１１０を決定するため、またはその容量に対応するデータセグメントに関連付けられるパリティセグメントがどこにあるかを決定するために使用することができる。したがって、グローバルテーブル２４０は、一組のテーブルを備え、各テーブルは、データバンク１１０に対して実装された容量に対応してもよい。特に、これらのテーブル２４０のうちの１つは、データストア２５０が容量の特定のセグメントを備えるデータバンク１１０を識別するために使用され得るデータを含有してもよい。具体的に、このテーブルは、容量に関連付けられる論理アドレスを、その論理アドレスに対応するセグメント（データ、冗長性等）が格納されるデータバンク１１０と相互に関連付けるために使用されてもよい。
【００５７】
図５は、この種類のテーブルの一実施形態の図式表示を描写し、各容量は、関連付けられるそのようなテーブルの関連インスタンスを有してもよい。テーブル５５０は、ＬＶ番号５０４、セグメントサイズ５０８、セグメント数５１２、サービスの品質（ＱＯＳ）５１４、範囲数５１８のエントリ、描写される実施形態では、第１の範囲５２４ａと、第２の範囲５２４ｂと、任意の追加範囲エントリ５２４ｎとを含む、範囲エントリの情報を含む。
【００５８】
ＬＶ番号５０４は、特定の容量を識別するために使用される一意の番号であり、セグメントサイズ５０８は、容量を実装するために使用されるセグメントのサイズに対応し、セグメント数５１２は、論理容量に対応するセグメントの数（例えば、データセグメントおよび冗長セグメントの両方の数、単にデータセグメントの数等）に対応し、ＱＯＳ５１４は、容量に対して実装することが望まれるサービスの品質を示し（このＱＯＳインジケータは、データバンク１１０上に格納される他の容量に対する、その容量に与えられる優先度を示してもよいことに留意されたい）、範囲数５１８は、容量に関連付けられる多数の範囲を示し、一方、範囲エントリ５２４は、各々、これらの範囲のうちの１つに対応する。
【００５９】
範囲は、特定のデータバンク１１０の順序およびＲＡＩＤ実装に対応してもよい。種々の理由から、容量を実装するために、複数の範囲が利用されてもよい。具体的に、異なるデータバンク１１０の異なるデータストア２５０が、データストア２５０内に、異なる量の使用することができるストレージを有し得るため、例えば、容量と併せて、複数の範囲が利用されてもよい。これは、例えば、容量の第１の範囲では、第１のＲＡＩＤ実装と併せて、すべてのデータバンク１１０が利用されてもよく、一方、容量の第２の範囲内では、第２のＲＡＩＤ実装と併せて、使用可能なすべてより少ないデータバンク１１０が利用されてもよい（第１および第２のＲＡＩＤ実装は、事実、互いとは異なるレベルであってもよい）という状況をもたらし得る。したがって、これらの範囲の各々は、異なるデータバンク１１０の順序（例えば、ランダム順列等）に従って配置されるセグメントに対応し、異なる数の使用可能なデータバンク１１０、異なる種類のＲＡＩＤ等を有してもよい。
【００６０】
具体的な実施例を使用して説明するために、再び簡単に図４を参照する。ＲＡＩＤレベル５を伴う８ＭＢの容量は、示されるように配置され、データセグメントは、データバンク１１０ｂ、データバンク１１０ｄ、データバンク１１０ａ、データバンク１１０ｃ、およびデータバンク１１０ｅの順序に従って配置され、ＲＡＩＤ５は、パリティセグメントが、データバンク１１０ｃのデータストア２５０ｃおよびデータバンク１１０ｅのデータストア２５０ｅ内に割り付けられることが望まれ得る、（４＋１）パリティセットを利用して、容量と併せて実装されると仮定する。
【００６１】
ここで、この容量に、追加の３ＭＢを追加することが要求されたと仮定する。しかしながら、この場合では、データバンク１１０ｅ、１１０ｃ、および１１０ｄのデータストア２５０は、余地を有さないと仮定する。したがって、この場合、唯一の解決策は、データストア２５０内に残余ストレージを有する、データバンク１１０ａとデータバンク１１０ｂとの間に追加の所望の３ＭＢを割り当てることであり得る。さらに、２つのデータバンク１１０のみが使用可能なため、容量の最初の８ＭＢと共に利用される際、ＲＡＩＤ５の代わりに１のＲＡＩＤレベルを利用することのみが可能であり得る。したがって、この場合、容量の最初の８ＭＢは、第１の範囲に対応し、容量に対応するテーブル内に、第１の一組の値と共に、第１の範囲エントリを有してもよく、一方、容量の次の３ＭＢは、第２の範囲に対応し、容量に対応するテーブル内に、第２の一組の値と共に、第２の範囲エントリを有してもよい。本開示を読んだ後に明らかとなり得るように、この種類の発生は、ある頻度で生じ得る。
【００６２】
図５に戻ると、これらの種類の状況に対処するために、特に、容量の各範囲は、テーブル５５０内に、その特定の範囲内のセグメントの位置がその範囲に対応する範囲エントリから決定され得るようなエントリを有してもよい。テーブル５５０に対応する容量の範囲の各々のエントリ５２４は、範囲数５１８に関連付けられる。一実施形態では、範囲数５１８は、範囲エントリ５２４の数が範囲数５１８に対応するように、容量の範囲の数に対応してもよい。範囲エントリ５２４ａおよび５２４ｂのみが示されているが、テーブル内の範囲エントリ５２４の数は、テーブルが対応する容量に対応する範囲の数に依存することが留意されるであろう。したがって、容量が３つの範囲に分割される場合、テーブル５５０に対応する容量の各範囲の情報を備える範囲エントリ５２４が存在するように、テーブル５５０内に３つの範囲エントリ５２４が存在する。
【００６３】
範囲エントリ５２４の情報は、種類５２６と、開始５３０と、終了５３４と、ネットワークＲＡＩＤ５３８と、ネットワークＲＡＩＤサイズ５４２と、ディスクＲＡＩＤ５４６と、ディスクＲＡＩＤサイズ５５０と、データバンク数５５４と、データバンク順序５５８と、範囲５２４に関連付けられるセグメントを格納するために使用される各データバンク１１０に対応するディスク数５６２およびディスク順序５６６（言い換えると、その範囲エントリ５２４のデータバンク数５５４と等しいディスク数５６２およびディスク順序５６６が存在する）とを含む。種類５２６は、範囲エントリ５２４の情報に対応する範囲の種類、例えば、正常、源（ＳＲＣ）、目的地（ＤＳＴ）、または他の種類の範囲を説明する。開始２３０は、範囲エントリ５２４に対応する容量の範囲の最初の論理セグメントアドレスである。終了２３４は、範囲エントリ５２４に対応する容量の範囲の情報に対応する範囲の最後の論理セグメントアドレスである。また、例えば、終了５２４は、範囲内のセグメントまたはブロックの最大数の数であってもよい等、他の配列も可能である。
【００６４】
データバンク数５５４は、範囲エントリに対応する範囲が存在するデータバンク１１０の数に対応してもよく、データバンク順序５５８は、その範囲内のセグメントがデータバンク１１０に割り付けられる順序であってもよく、一方、ネットワークＲＡＩＤ５３８、ネットワークＲＡＩＤサイズ５４２、ディスクＲＡＩＤ５４６、およびディスクＲＡＩＤサイズ５５２は、範囲エントリ５２４に対応する容量の範囲と併せて実装されるＲＡＩＤの種類に対応してもよい。
【００６５】
ネットワークＲＡＩＤ５３８は、テーブル５５０に対応する容量と関連して実装されるＲＡＩＤの種類、例えば、ＲＡＩＤ０、ＲＡＩＤ１、もしくはＲＡＩＤ５、または他のＲＡＩＤ種類である。ネットワークＲＡＩＤサイズ５４２は、範囲内で使用されるＲＡＩＤ種類のパリティグループサイズである。ネットワークＲＡＩＤサイズ５４２は、範囲内のデータバンク１１０の数によって、範囲５２４の情報に対応する範囲内のデータバンクの数以下になるように制限されてもよい。ディスクＲＡＩＤ５４６は、範囲内のデータバンク内のディスクにわたって実装されるＲＡＩＤの種類である。ディスクＲＡＩＤサイズ５５２は、各データバンク１１０のデータストア２５０内のディスク２５２にわたって使用されるＲＡＩＤ種類のパリティグループサイズであってもよく、データバンク内のディスクの数以下になるように制限されてもよい。実施形態では、範囲内のデータバンク１１０内のディスクにわたるＲＡＩＤは、任意であり、使用されてもされなくてもよい。そのような実施形態では、ディスクＲＡＩＤ５４６、ディスクＲＡＩＤサイズ５５２のいずれか、または両方は、使用されなくてもよく、または省略されてもよい。
【００６６】
データバンク数５５４は、範囲内のデータバンクの数であり、データバンク順序５５８は、範囲内のデータバンク１１０にわたってＲＡＩＤが実装される順序（例えば、縞状）である。例えば、データバンク１１０は、特定の順序で保存された容量の論理アドレスに対応するデータを有してもよく、データバンク順序５５８は、この順序に対応する。ディスク数５６２は、範囲のデータバンク１１０内のディスクの数であり、ディスク順序５６６は、特定のデータバンク１１０のディスクにわたってＲＡＩＤが実装される順序である。例えば、ディスク２５２は、特定の順序でそれらに保存されたセグメントを有してもよく、ディスク順序５６６は、データバンク１１０内のディスク２５２にわたってセグメントが格納される順序である。したがって、範囲エントリ５２４に関連付けられる範囲のセグメントを格納するために使用される各データバンク１１０では、対応するディスク数５６２およびディスク順序５６６が存在する（言い換えると、一実施形態では、ディスク数５６２の数およびディスク順序５６６は、その範囲エントリ５２４のデータバンク数５５４と等しい）。実施形態では、データバンク１１０内のディスク２５２にわたるＲＡＩＤは、任意であり、使用されなくてもよい。テーブル５５０が具体的に記載されているが、この記載は、限定ではなく、一例であり、テーブル５５０の他の形態が利用されてもよいことが留意されるであろう。例えば、テーブル５５０の代わりに、仮想テーブルが使用されてもよく、各論理アドレスに対応するセグメント４０２およびデータバンク１１０を明確にリストアップしてもよい。
【００６７】
したがって、前述されるように、テーブル５５０内の情報は、論理アドレス（コマンドまたは任意の他の文脈において、ホスト１０２によって参照される）に対応するデータセグメント４０２を備えるデータバンク１１０を識別するために使用されてもよい。例えば、セグメント４０２のサイズが既知であり、開始５３０、終了５３４、アドレスに対応する範囲エントリ５２４等を使用すると、容量の論理アドレスに対応する特定のデータバンク１１０を決定することができる。
【００６８】
前述されるように、テーブル２４０の１つ以上の部分は、すべてのデータバンク１１０にわたって実質的に同一であってもよく、１つ以上のデータバンク１１０に及ぶ１つ以上の論理容量を説明してもよいが、データバンク１１０上の他のテーブル２４５は、それが対応するデータバンク１１０とは異なってもよい（例えば、テーブル２４５は、対応する分散型ＲＡＩＤアプリケーション２１０が実行されるデータバンク１１０に特有であってもよい）。このテーブル２４５は、対応するデータバンク１１０のデータストア２５０内に含有され、情報を備え得る、各ディスク２５２に関連するデータを備えてもよく、情報は、データストア上またはデータストアのディスク２５２間、例えば、ディスク２５２のセクタに格納されてもよく、データバンク１１０に割り付けられるセグメント４０２は、データストア２５０内に位置する。
【００６９】
図６には、この種類のテーブルの一実施形態の図式表示が描写されている。テーブル６６０は、特定のデータバンク１１０に格納されてもよく、複数のディスクテーブル６７０を備えてもよく、ディスクテーブル６７０の各々は、そのデータバンク１１０内のデータストア２５０のディスク２５２に対応し、そのディスク２５２内に格納されるセグメントの位置をリストする。より具体的には、大抵の場合、ディスク２５２は、物理セクタに分割され、各物理セクタは、対応するアドレスまたはアドレスの範囲を有する。
【００７０】
ディスクテーブル６７０は、容量のセグメントが格納される、データバンク１１０のディスク２５２のセクタの位置を決定するために利用することができる、マッピングテーブルであってもよい。したがって、テーブル６７０を使用して、容量のセグメントに対応するディスク２５２上のセクタのアドレスを決定することができる。さらに、テーブルは、ディスクのセグメントまたはセクタに対応する１つのエントリ当たり、１つ以上のフラグまたは記述ビットを含有し、セクタまたはそのセクタに格納されたセグメントを説明してもよい。
【００７１】
ここで、図７を参照すると、ディスクテーブル６７０の一実施形態の図式表示が描写されている。ディスクテーブル６７０は、複数のエントリを有し、各エントリは、ディスクテーブル６７０のエントリがディスク２５２の物理セグメントを説明するように、対応するディスクの物理セグメントに対応する。また、ディスクテーブル６７０内の各エントリは、物理セグメントまたは対応するセクタに格納される容量のセグメントを説明する、１つ以上のフラグまたはビットフィールドを含んでもよい。より具体的には、図７に示されるように、一実施形態では、ディスクテーブル６７０内のエントリは、論理容量（ＬＶ）番号、論理セグメント番号、アドレス空間、およびセクタ状態のためのフィールドを含む。ＬＶ番号は、その物理セグメントに格納されるデータに対応する、論理容量を識別する。論理セグメント番号は、そのデータに対応する論理容量のセグメントを識別する。アドレス空間は、「データ」または「冗長性」として格納されるセグメントを識別する。「データ」の値は、データがエントリによって表されるセクタに格納されていることを示してもよく、一方、「冗長性」の値は、セクタに格納される情報が、ＲＡＩＤデータ保護に使用され得ることを示し、ＲＡＩＤレベルによって、冗長データ、ミラードデータ、またはパリティ情報であってもよい。セクタ状態は、セグメントの状態を、「割り当てられている」、「ゼロ化されている」、または「ダーティである（ｄｉｒｔｙ）」として示す。「割り当てられている」は、セグメントが割り当てられており、有効なデータを備え得ることを示す。「ゼロ化されている」は、セグメントが、そのセグメントにゼロを書き込むことによってゼロ化されていることを示し、「ダーティである」は、セグメントが、ゴミか、そうでなければ使用不可能もしくは望ましくない値を備え得ること、例えば、セグメントがゼロ化されていない、または割り当てられていないため、ランダムビットまたはデータを格納している場合があることを示す。一実施形態では、例えば、新しいディスクでは、ディスクのすべてのセグメントが、新しい、または新しく追加されたディスクに対応するディスクテーブル内に「ダーティである」とマークされてもよい。
【００７２】
テーブルの上記の説明を読んだ後、分散型ＲＡＩＤアプリケーション２１０は、どのセグメントが容量の論理アドレスに対応するか、容量に対応するセグメント（データまたは冗長セグメントのいずれか）がどのデータバンク１１０上に位置するか、容量のどのセグメントが容量の論理アドレスに対応するか、容量のセグメントに関連付けられるＲＡＩＤデータ（パリティデータ、ミラーデータ、他の種類の冗長データ等）がどこに位置するか、特定のデータバンク１１０上のどのディスク２５２が、その特定のデータバンク１１０に対応するセグメント、または容量、セグメント、もしくはディスク２５２に関する他の情報を備えるか、あるいは容量、セグメント４０２、データバンク１１０、ＲＡＩＤデータ等に関する他の情報を決定するために、グローバルテーブル２４０を利用してもよいことが明らかとなるであろう。
【００７３】
同様に、各個々のデータバンク１１０上の分散型ＲＡＩＤアプリケーション２１０は、そのデータバンク１１０上のどこ（ディスク２５２のどのセクタ等）に特定のセグメントが位置しているか、またはその特定のデータバンク１１０に対応する容量、セグメント、もしくはディスク２５２に関する他の情報を決定するために、そのデータバンク１１０上のローカルテーブル２４５を使用してもよい。
【００７４】
データバンク１１０と各個々のデータバンク１１０に対応するローカルテーブル２４５との間で共有されるグローバルテーブル２４０の組み合わせを使用することで、互いに協働しているデータバンク１１０上の分散型ＲＡＩＤアプリケーション２１０によって、特定の動作が実施されてもよい。ここで、これらの種類の動作をより詳細に説明する。特に、ここで、容量と併せてＲＡＩＤレベル５が実装されている、容量上への読み込みコマンドおよび書き込みコマンドの実装の一実施形態がより詳細に記載され、例示的な分散型ＲＡＩＤシステムに対する、これらのコマンドの実装の具体的な実施例が続く。本開示を徹底的に概観した後、どのように他の種類の実施形態、コマンド、ＲＡＩＤレベル等が実装され得るかが留意されるであろう。
【００７５】
最初に、図８を見ると、分散型ＲＡＩＤシステムに読み込みコマンドを実装するための方法の一実施形態のフローチャートが描写されている。この読み込みコマンドは、ホスト１０２によって、スイッチ１２０を通してデータバンク１１０に送信されてもよく、または１つのデータバンク１１０から別のデータバンク１１０に送信されてもよい。特定の実施形態では、ホスト１０２は、読み込みコマンドが、発行ホスト１０２と適切なデータバンク１１０との間のパスに沿って、コマンドを発行するホスト１０２から適切なデータバンク１１０に送られ得るように、１つ以上のアプリケーションおよび関連経路情報を備えてもよい。しかしながら、他の場合では、そのようなアプリケーションまたは経路情報がホスト１０２上に存在しない場合があり、したがって、ホスト１０２から発行される読み込みコマンドは、データバンク１１０のいずれかに送られてもよい。本実施形態では、後者の場合が説明される。しかしながら、本実施形態の説明を概観した後、どのステップが前者の場合に適用可能であるかも、当業者によって留意されるであろう。
【００７６】
ステップ８１０で、データバンク１１０で読み込みコマンドが受信されてもよい。データバンク１１０上の分散型ＲＡＩＤアプリケーション２１０は、ステップ８２０で、受信された読み込みコマンドで参照される論理アドレスに対応する容量のセグメントを決定し、ステップ８３０で、どのデータバンク１１０上に容量のセグメントが格納されているかを決定してもよい。上述されるように、この情報は、分散型ＲＡＩＤアプリケーション２１０に関連付けられるグローバルテーブル２４０を使用して決定されてもよい。セグメントを格納しているデータバンク１１０が、読み込みコマンドを受信したデータバンク１１０と同一である（ステップ８３２で決定される）場合、ステップ８４０で、受信データバンク１１０上のデータストア２５０の適切なディスク２５２から要求されたデータを入手し、ステップ８５０で、読み込みコマンドに応答することができる。上述されるように、セグメントが格納されているデータバンク１１０のデータストア２５０の特定のディスク２５２は、グローバルテーブル２４０を使用して決定することができ、一方、セグメントに対応するデータが格納されている、そのディスク２５２上の位置は、容量のセグメントをディスク２５２上の物理位置にマップするために使用され得る、ローカルテーブル２４５を使用して決定されてもよい。受信データバンク１１０がホスト１０２から読み込みコマンドを受信した場合、ホスト１０２が応答されてもよく、一方、受信データバンク１１０が別のデータバンク１１０から読み込みコマンドを受信した場合、応答は、読み込みコマンドを発行したデータバンク１１０上の分散型ＲＡＩＤアプリケーション２１０に送信されてもよい。
【００７７】
しかしながら、セグメントが遠隔データバンク１１０（コマンドを受信したもの以外のデータバンク１１０）に格納されている場合、ステップ８６０で、読み込みコマンドは、遠隔データバンク１１０の分散型ＲＡＩＤアプリケーション２１０に送信されてもよい。一実施形態では、この読み込みコマンドは、分散型ＲＡＩＤアプリケーション２１０によって利用されるコマンドフォーマットを使用して、遠隔データバンク１１０の分散型ＲＡＩＤアプリケーション２１０に通信されてもよい。このコマンドは、また、元の読み込みコマンドの関連情報を提供する一方で、分散型ＲＡＩＤアプリケーションに、その読み込みコマンドを初めに受信したデータバンク１１０に読み込みコマンドの結果を返すように、または他の機能性を実施するように指示してもよい。したがって、読み込みコマンドが遠隔データバンク１１０に送信された後、ステップ８７０で、遠隔データバンク１１０から要求されたデータを備える応答が受信されてもよく、ステップ８８０で、受信された読み込みコマンドが、その応答で受信されたデータを使用して応答されてもよい。
【００７８】
ここで、図９Ａおよび図９Ｂに移動すると、分散型ＲＡＩＤシステムに書き込みコマンドを実装するための方法の一実施形態のフローチャートが描写されている。この書き込みコマンドは、ホスト１０２によって、スイッチ１２０を通してデータバンク１１０に送信されてもよく、または１つのデータバンク１１０から別のデータバンク１１０に送信されてもよい。特定の実施形態では、ホスト１０２は、書き込みコマンドが、発行ホスト１０２と適切なデータバンク１１０との間のパスに沿って、コマンドを発行するホスト１０２から適切なデータバンク１１０に送られ得るように、１つ以上のアプリケーションおよび関連経路情報を備えてもよい。しかしながら、他の場合では、そのようなアプリケーションまたは経路情報がホスト１０２上に存在しない場合があり、したがって、ホスト１０２から発行される書き込みコマンドは、データバンク１１０のいずれかに送られてもよい。本実施形態では、後者の場合が説明される。しかしながら、本実施形態の説明を概観した後、どのステップが前者の場合に適用可能であるかも、当業者によって留意されるであろう。
【００７９】
ステップ９１０で、受信データバンク１１０で書き込みコマンドが受信されてもよい。受信データバンク１１０上の分散型ＲＡＩＤアプリケーション２１０は、次いで、ステップ９２０、９３０、および９４０で、書き込みコマンドによって参照される論理アドレスに対応する容量のセグメント、そのセグメントの位置（例えば、どのデータバンク１１０がそのセグメントに対応するデータを格納しているか）、およびそのセグメントに対応するパリティの位置（例えば、どのデータバンク１１０が、そのセグメントに対応するデータから作成されるパリティデータが格納されるセグメントを格納しているか）を決定してもよい。上述されるように、データセグメントおよびパリティセグメントの両方の位置は、受信データバンク１１０上に格納されるグローバルテーブル２４０を使用して決定されてもよい。
【００８０】
データセグメント（データを格納するセグメント）または冗長セグメント（言い換えると、データセグメントから作成されるパリティまたは他の種類の冗長データの場所）のいずれも受信データバンク１１０上に格納されていない（ステップ９５０および９６０で決定される）場合、書き込みコマンドは、ステップ９６４で、データセグメントが格納されている遠隔データバンク１１０上の分散型ＲＡＩＤアプリケーション２１０に通信されてもよく、ステップ９６６で、パリティセグメントが格納されている遠隔パリティデータバンク１１０上の分散型ＲＡＩＤアプリケーション２１０に通信されてもよい。一実施形態では、この書き込みコマンドは、遠隔データバンク１１０の分散型ＲＡＩＤアプリケーション２１０に通信されてもよく、遠隔パリティデータバンク１１０は、分散型ＲＡＩＤアプリケーション２１０によって利用されるコマンドフォーマットを使用する。このコマンドは、また、元の書き込みコマンドの関連情報を提供する一方で、分散型ＲＡＩＤアプリケーション２１０に、他の所望の機能性を実施するように指示してもよい。
【００８１】
したがって、書き込みコマンドが遠隔データバンク１１０に送信された後、ステップ９６８および９７０で、遠隔データバンク１１０および遠隔パリティデータバンク１１０上の分散型ＲＡＩＤアプリケーション２１０から遠隔パリティデータバンク完了通知が受信されてもよい。一旦、これらの確認応答が受信されると、書き込みコマンドは、受信データバンク１１０上の分散型ＲＡＩＤアプリケーション２１０によって応答されてもよい。
【００８２】
しかしながら、ステップ９５０に戻って、データセグメントが受信データバンク１１０に格納されている場合、ステップ９５２で、書き込みコマンドがホスト１０２から受信されたか、または別のデータバンク１１０から受信されたかが決定されてもよい。書き込みコマンドがホスト１０２から受信された場合、書き込みコマンドは、ステップ９７６で、遠隔パリティデータバンク１１０上の分散型ＲＡＩＤアプリケーション２１０に通信され、ステップ９７４で、受信データバンク１１０の書き込みキャッシュ内に置かれてもよい。ステップ９７８で、遠隔パリティデータバンク１１０上の分散型ＲＡＩＤアプリケーション２１０から完了通知が受信された後、書き込みコマンドは、ステップ９８０で、受信データバンク１１０上の分散型ＲＡＩＤアプリケーション２１０によって応答されてもよい（例えば、ホスト１０２に送信される応答）。さらに、書き込みコマンド自体は、ステップ９８２で処理されてもよい。このプロセスは、受信データバンク１１０上に格納されるデータセグメントへの書き込みコマンドに関連付けられるデータの格納、または他の機能性を求め得る。
【００８３】
一方、ステップ９５２で、書き込みコマンドがホストから受信されなかった場合、これは、書き込みコマンドが別のデータバンク１１０（多くの場合、ホスト１０２から書き込みコマンドを初めに受信したデータバンク１１０であり得る）から受信されたことを示してもよい。この場合、データバンク１１０は、ステップ９８４で、その書き込みキャッシュ内に受信された書き込みコマンドを置いてもよく、ステップ９８６で、発行データバンク１１０に完了通知を送信する。ある後の時点で、ステップ９８８で、書き込みコマンド自体が処理されてもよい。
【００８４】
再びステップ９５０に戻り、ステップ９６０で、データセグメントは受信データバンク１１０に格納されていないが、パリティセグメントは受信データバンク１１０に格納されていると決定される場合、ステップ９６２で、書き込みコマンドがホスト１０２から受信されたか、または別のデータバンク１１０から受信されたかが決定されてもよい。書き込みコマンドがホスト１０２から受信された場合、書き込みコマンドは、ステップ１００２で、書き込みに対応するデータセグメントが格納されている遠隔データバンク１１０上の分散型ＲＡＩＤアプリケーション２１０に通信され、ステップ１０００で、受信データバンク１１０の書き込みキャッシュ内に置かれてもよい。ステップ１００４で、遠隔データバンク１１０上の分散型ＲＡＩＤアプリケーション２１０から完了通知を受信した後、書き込みコマンドは、ステップ１００６で、受信データバンク１１０上の分散型ＲＡＩＤアプリケーション２１０によって応答され、書き込みコマンドは、ステップ１００８で、受信データバンク１１０によって処理されてもよい。
【００８５】
ここで、書き込みコマンドの処理は、受信データバンク１１０に格納されるパリティセグメントが書き込みコマンドに基づいて更新され得ることを求めてもよい。このパリティセグメントの更新は、当業者に既知の種々の方法で達成されてもよいが、すべてが本明細書に詳細に述べられるわけではない。例えば、パリティデータバンク１１０上の分散型ＲＡＩＤアプリケーション２１０は、パリティセグメントを更新するために、バックアウト書き込みを実施してもよい。このバックアウト書き込みの実施は、パリティセグメントからデータセグメントを入手し、入手されたデータセグメントおよび書き込みコマンドに関連付けられて書き込まれるデータを使用して、論理演算（排他的ＯＲ（ＸＯＲ）演算等）を実施することを求めてもよい。あるいは、受信データバンク１１０上の分散型ＲＡＩＤアプリケーション２１０が、パリティセグメントが作成されたデータセグメントの各々に対応する、複数の書き込みコマンドを有する場合、新しいパリティセグメントが計算されてもよく、元のパリティセグメントは、新しく計算されたパリティセグメントで置換することによって更新されてもよい。本明細書の開示を概観することによって、パリティセグメントを更新するための他の方法が認識されてもよく、分散型ＲＡＩＤアプリケーションによってパリティセグメントを更新するために利用される特定の方法は、設定パラメータ、特定のデータの有用性（例えば、パリティを作成するために使用される、すべてのデータセグメントに対応する書き込みコマンド等）、または多数の他の要因のいずれかを含む、種々の要因に依存してもよい。
【００８６】
ここで、ステップ９６２に戻り、書き込みコマンドがホストから受信されなかった場合、これは、書き込みコマンドが別のデータバンク１１０（多くの場合、ホスト１０２から書き込みコマンドを初めに受信したデータバンク１１０であり得る）から受信されたことを示してもよい。この場合、書き込みコマンドは、ステップ９９０で、受信データバンク１１０の書き込みキャッシュ内に置かれ、ステップ９９２で、発行データバンクに完了通知が送信されてもよい。次いで、書き込みコマンドは、ステップ９９４で処理されてもよい（例えば、上述されるように、パリティセグメントが更新されてもよい）。
【００８７】
上述を概観した後、多くの場合、特定のデータバンク１１０の分散型ＲＡＩＤアプリケーション２１０は、パリティデータバンク１１０から通知が受信されるまで、受信された書き込みコマンドを処理することができなくてもよく、１つ以上の書き込みコマンドを格納すること、または一組のこれらの格納される書き込みコマンドを評価することが望まれ得る時、パリティデータバンクは、パリティもしくは多数の他のインスタンスのいずれかを更新するための方法を決定または実装するために、複数の受信された書き込みコマンドを評価する必要があってもよいことが留意されるであろう。書き込み（または他の）コマンドの格納および評価を容易にするために、各分散型ＲＡＩＤアプリケーション２１０は、関連書き込みキャッシュ２６０を有してもよい。
【００８８】
書き込みキャッシュの一実施形態の表示を図１０に描写する。分散型ＲＡＩＤアプリケーション２１０によって書き込みコマンドが受信される際、それらは、書き込みキャッシュ１１００内に置かれる。これらの書き込みコマンド１１６０の各々は、いつ書き込みコマンド１１６０が受信されたかを示す、関連タイムスタンプを有してもよい。したがって、一実施形態では、書き込みキャッシュ１１００は、タイムスタンプの付けられた書き込みコマンド１１６０の待ち行列を備えてもよい。ある時点で、分散型ＲＡＩＤアプリケーション２１０によって、タイムスタンプマーカが発行されてもよい。このタイムスタンプマーカは、時間を備え、分散型ＲＡＩＤアプリケーション２１０の各々に通信されてもよい。書き込みキャッシュ１１００が特定の割合いっぱいである時、特定の数の書き込みコマンド１１６０が受信された時、特定の時間間隔で、または種々の他の方法論等の種々の方法で、タイムスタンプマーカを発行するタイミングが決定されてもよい。
【００８９】
任意の事象において、このタイムスタンプマーカ１１１０は、分散型ＲＡＩＤアプリケーション２１０の各々に関連付けられる書き込みキャッシュ１１１０の各々を、少なくとも２つのセグメント、タイムスタンプマーカ１１１０の前に受信された書き込みコマンド１１６０（本実施例では、書き込みコマンド１１６０ａ、１１６０ｂ、１１６０ｃ、および１１６０ｄ）を備えるクローズドマーカ１１５０と、タイムスタンプマーカ１１１０の後に受信された書き込みコマンド１１６０（本実施例では、書き込みコマンド１１６０ｅ、１１６０ｆ、および１１６０ｇ）を備えるオープンマーカ１１４０とにセグメント化する。次いで、分散型ＲＡＩＤアプリケーション２１０は、どのようにこれらの書き込みコマンド１１６０が処理されるかを決定するために、クローズドマーカ１１５０内の一組の書き込みコマンド１１６０（本実施例では、書き込みコマンド１１６０ａ、１１６０ｂ、１１６０ｃ、および１１６０ｄ）を評価してもよく、一方、受信された書き込みコマンドは、オープンマーカ１１４０に依然として追加されてもよい。
【００９０】
逆に、クローズドマーカ１１５０が、もはや変化しない一組の書き込みコマンドを備える際、分散型ＲＡＩＤアプリケーションは、実行の順序を決定するため、パリティセグメントを更新するための方法論を決定するため（例えば、パリティを作成するために使用される各データセグメントに対応するクローズドマーカ１１５０内に書き込みコマンドが存在する場合）、または書き込みコマンド１１６０の処理に関連付けられる他の決定を行うために、この一組の書き込みコマンド１１６０を互い（または他の基準）に対して評価してもよい（およびしたがって、クローズドマーカ１１６０内の書き込みコマンド１１６０を並べ替えてもよい）。複数の理由のために、タイムスタンプマーカ１１１０がデータバンク１１０の各々の上の分散型ＲＡＩＤアプリケーション２１０のいずれかによって発行される際、複数のクローズドマーカは、任意の時点、例えば、複数のタイムスタンプマーカ１１１０が、書き込みキャッシュが分散型ＲＡＩＤアプリケーション２１０のうちのいずれか１つによって評価されている時間の間に分散型ＲＡＩＤアプリケーション２１０によって発行される時に存在してもよい。
【００９１】
上記を概観した後、ここで読者は、仮想化ストレージおよびＲＡＩＤ実装を達成するために、どのようにデータバンク１１０上の分散型ＲＡＩＤアプリケーション２１０が協力して動作するかを理解するであろう。しかしながら、障害が発生した後の分散型ＲＡＩＤアプリケーション２１０の特定の実施形態の機能を記載することが、特定の実施形態の理解にさらに有用であり得る。上述されるように、分散型ＲＡＩＤアプリケーション２１０は、障害のあるデータバンクを知っていてもよい（例えば、格納していてもよい）（言い換えると、これは、データバンク１１０が動作する、もしくはデータにアクセスする能力を阻害または妨害する、ハードウェア、ソフトウェア、通信、または他の障害を有し得る）。分散型ＲＡＩＤアプリケーション２１０は、ホスト１０２からのコマンドを満たす一方で、そのような障害を明らかにすることができてもよい。
【００９２】
説明するために、図１１は、分散型ＲＡＩＤシステムに読み込みコマンドを実装するための方法の一実施形態のフローチャートを描写する。この方法は、容量の範囲と併せてＲＡＩＤ５が実装されている実施形態に適用し、その他の実施形態は、他のレベルのＲＡＩＤが実装されている（またはいかなるレベルのＲＡＩＤも実装されていない）場合、同様に適切に適用されてもよいことが理解されるであろう。読み込みコマンドは、ホスト１０２によって、スイッチ１２０を通してデータバンク１１０に送信されてもよく、または別のデータバンク１１０から受信データバンク１１０に送信されてもよい。ステップ１１１０で、次いで、データバンク１１０で読み込みコマンドが受信されてもよい。データバンク１１０上の分散型ＲＡＩＤアプリケーション２１０は、ステップ１２２０で、受信された読み込みコマンドで参照される論理アドレスに対応するデータセグメントを決定し、ステップ１２３０で、どのデータバンク１１０上にデータセグメントが格納されているかを決定してもよい。データセグメントを格納しているデータバンク１１０が、読み込みコマンドを受信したデータバンク１１０と同一である（ステップ１２４０で決定される）場合、ステップ１２５０で、受信データバンク１１０上のデータストア２５０の適切なディスク２５２から要求されたデータを入手し、ステップ１２５２で、入手されたデータを使用して、受信された読み込みコマンドに応答することができる。受信データバンク１１０が、ホスト１０２から読み込みコマンドを受信した場合、ホスト１０２が応答されてもよく、一方、受信データバンク１１０が別のデータバンク１１０から読み込みコマンドを受信した場合、応答は、読み込みコマンドを発行したデータバンク１１０上の分散型ＲＡＩＤアプリケーション２１０に送信されてもよい。
【００９３】
しかしながら、データセグメントが遠隔データバンク１１０（コマンドを受信したもの以外のデータバンク１１０）に格納されている場合、ステップ１２５４で、読み込まれるデータセグメントが格納されている遠隔データバンク１１０が障害を抱えているかどうかが決定されてもよい。そうでなければ、遠隔データバンク１１０の分散型ＲＡＩＤアプリケーションに読み込みコマンドが送信されてもよい。ステップ１２５８で、遠隔データバンク１１０から要求されたデータを備える応答が受信された後、ステップ１２６０で、受信された読み込みコマンドは、そのデータを使用して応答されてもよい。
【００９４】
しかしながら、遠隔データバンク１１０が障害を抱えている場合、ステップ１２５４で、受信データバンク１１０が、読み込みコマンドに関連付けられるデータセグメントに対応するパリティセグメントを保持するかどうかが決定されてもよい。パリティセグメントが受信データバンク１１０に格納されている場合、読み込みコマンドに対応するデータセグメントは、受信データバンク１１０に格納されているパリティセグメントを使用して入手されてもよい。パリティデータからのデータセグメントの入手は、他のデータバンク１１０からの他のデータセグメント（読み込みコマンドに対応するもの以外のデータセグメント）の入手、および他のデータセグメントとパリティセグメントとの間で論理演算を実施することによる、所望のデータセグメントの入手を含む、より詳細には述べられない種々の方法で達成されてもよい。ステップ１２６８で、パリティデータを使用して、一旦、要求されたデータセグメントが入手されると、ステップ１２７０で、受信された読み込みコマンドが応答されてもよい。受信データバンク１１０が、ホスト１０２から読み込みコマンドを受信した場合、ホスト１０２が応答されてもよく、一方、受信データバンク１１０が、別のデータバンク１１０から読み込みコマンドを受信した場合、応答は、読み込みコマンドを発行したデータバンク１１０上の分散型ＲＡＩＤアプリケーション２１０に送信されてもよい。
【００９５】
受信データバンク１１０がパリティブロックを格納しているデータバンク１１０ではない場合、読み込みコマンドは、ステップ１２６２で、読み込みコマンドで参照されるデータセグメントに対応するパリティセグメントが格納されている遠隔データバンク１１０に送信されてもよい。ステップ１２６４で、遠隔パリティデータバンク１１０から要求されたデータを備える応答が受信された後、読み込みコマンドは、ステップ１２６６で、そのデータを使用して応答されてもよい。
【００９６】
図１２に移動すると、分散型ＲＡＩＤシステムに書き込みコマンドを実装するための方法の一実施形態のフローチャートが描写されている。この書き込みコマンドは、ホスト１０２によって、スイッチ１２０を通してデータバンク１１０に送信されてもよく、１つのデータバンク１１０から別のデータバンク１１０に送信されてもよい。ステップ１３１０で、次いで、受信データバンク１１０で書き込みコマンドが受信されてもよい。受信データバンク１１０上の分散型ＲＡＩＤアプリケーション２１０は、次いで、ステップ１３１２、１３１４、および１３２０で、書き込みコマンドによって参照される論理アドレスに対応するデータセグメント、そのデータセグメントの位置（例えば、どのデータバンク１１０がそのセグメントに対応するデータを格納しているか）、およびそのデータセグメントに対応するパリティセグメントの位置（例えば、どのデータバンク１１０が、そのセグメントに対応するデータから作成されたパリティデータが格納されているセグメントを格納しているか）を決定してもよい。上述されるように、データセグメントおよびパリティセグメントの両方の位置は、受信データバンク１１０上に格納される一組のテーブル２４０を使用して決定されてもよい。
【００９７】
次いで、データセグメントが格納されているデータバンク１１０またはパリティセグメントが格納されているデータバンク１１０のいずれかが、障害を抱えているかどうかを決定することができる。これらのデータバンク１１０のいずれも障害を抱えていない場合、ステップ１３２４で、分散型ＲＡＩＤアプリケーションによって、通常の書き込み動作が行われてもよい。通常の書き込み動作は、図９Ａおよび図９Ｂに関して前述されており、さらに記載はされない。
【００９８】
しかしながら、これらのデータバンク１１０のいずれかが障害を抱えている場合、ステップ１３２６で、障害のあるデータバンク１１０を考慮する書き込み動作が実施されてもよい。この書き込み動作は、書き込みコマンドがデータバンク１１０に送信される前に、書き込みが送信されるデータバンク１１０に障害があるかどうかが決定され、その場合、その書き込みコマンドは、障害のあるデータバンク１１０に送信されないことを除き、図９Ａおよび図９Ｂに関して記載される書き込み動作と実質的に同一に同等であってもよい。すべての他の点において、書き込み動作は、実質的に同一である。
【００９９】
前述のフローチャートを概観した後、特定の実施形態の動作は、動作中の分散型ＲＡＩＤシステムの一実施形態の特定の実施例を参照して、よりよく理解され得る。そのために、５つのデータバンク１１０を伴う分散型ＲＡＩＤシステムの一実施形態を示す、図４が再び注目される。第１の実施例で開始するために、ホスト１０２ｂは、データバンク１１０ｃに読み込みコマンドを発行し、読み込みコマンドは、データバンク１１０ａ上のデータセグメント「２」４０２ｃに対応する論理アドレスを参照すると仮定する。ここで、データバンク１１０ｃ上の分散型ＲＡＩＤアプリケーション２１０ｃは、受信された読み込みコマンドの論理アドレスがデータセグメント「２」４０２ｃを参照すること、およびデータセグメント「２」４０２ｃがデータバンク１１０ａ上に格納されていることを決定してもよい。次いで、分散型ＲＡＩＤアプリケーション２１０ｃは、データバンク１１０ａに対応する読み込みコマンドを送信してもよい。
【０１００】
データバンク１１０ａ上の分散型ＲＡＩＤアプリケーション２１０ａは、この読み込みコマンドを受信し、読み込みコマンドがデータセグメント「２」４０２ｃに対応する論理アドレスを参照すること、およびデータセグメント「２」４０２ｃが、それが実行されているデータバンク１１０ａ上に位置することを決定してもよい。次いで、分散型ＲＡＩＤアプリケーション２１０ａは、データセグメント「２」４０２ｃから要求されたデータを入手するためにデータストア２５０ａにアクセスし、この入手したデータを発行データバンク１１０ｃの分散型ＲＡＩＤアプリケーション２１０ｃに返してもよい。データバンク１１０ｃ上の分散型ＲＡＩＤアプリケーション２１０ｃは、データバンク１１０ａ上の分散型ＲＡＩＤアプリケーション２１０ａからこの応答を受信し、ホスト１０２ｂから発行された元の読み込みコマンドに応答するために、この応答からのデータを使用してもよい。
【０１０１】
ここで、ホスト１０２ｂは、データバンク１１０ｃに読み込みコマンドを発行し、読み込みコマンドは、データバンク１１０ａ上のデータセグメント「２」４０２ｃに対応する論理アドレスを参照するが、そのデータバンク１１０ａは、障害を抱えており、もはや動作していないと仮定する。この場合、データバンク１１０ｃ上の分散型ＲＡＩＤアプリケーション２１０ｃは、受信された読み込みコマンドの論理アドレスがデータセグメント「２」４０２ｃを参照すること、およびデータセグメント「２」４０２ｃがデータバンク１１０ａ上に格納されていることを決定してもよい。さらに、また、データバンク１１０ｃ上の分散型ＲＡＩＤアプリケーション２１０ｃは、データバンク１１０ａが障害を抱えていることを決定してもよい。
【０１０２】
したがって、分散型ＲＡＩＤアプリケーション２１０ｃは、データセグメント「２」４０２ｃに対応するパリティセグメント４０２ｊの位置は、データバンク１１０ｅであることを決定してもよい。次いで、分散型ＲＡＩＤアプリケーション２１０ｃは、データバンク１１０ｅに読み込みコマンドを送信してもよい。データバンク１１０ｅ上の分散型ＲＡＩＤアプリケーション２１０ｅは、この読み込みコマンドを受信し、読み込みコマンドがデータセグメント「２」４０２ｃに対応する論理アドレスを参照すること、およびデータセグメント「２」４０２ｃに対応するパリティセグメント４０２ｊが、それが実行されているデータバンク１１０ｅ上に位置することを決定してもよい。次いで、分散型ＲＡＩＤアプリケーション２１０ｅは、パリティセグメント４０２ｊにアクセスし、パリティセグメント４０２ｊを使用して、データセグメント「２」４０２ｃから要求されたデータを入手するために、データストア２５０ｅにアクセスしてもよい。この入手されたデータは、発行データバンク１１０ｃの分散型ＲＡＩＤアプリケーション２１０ｃに返されてもよい。分散型ＲＡＩＤアプリケーション２１０ｅは、データセグメント「２」４０２ｃに要求されたデータを決定するために、他のデータを必要とし得ることが留意されるであろう。したがって、分散型ＲＡＩＤアプリケーション２１０ｅは、パリティセグメント４０２ｊを作成するために、データセグメント「２」４０２ｃと併せて使用された、データセグメント「０」４０２ａ、データセグメント「１」４０２ｂ、およびデータセグメント「３」４０２ｄの位置は、各々、データバンク１１０ｂ、１１０ｄ、および１１０ｃ上に位置することを決定してもよい。したがって、分散型ＲＡＩＤアプリケーション２１０ｅは、これらのデータバンク１１０ｂ、１１０ｄ、および１１０ｃに読み込み要求を送信することによって、データセグメント「０」４０２ａ、データセグメント「１」４０２ｂ、およびデータセグメント「３」４０２ｄを入手し、データセグメント「２」４０２ｃから要求されたデータを入手するために、パリティセグメント４０２ｊと併せて、データセグメント「０」４０２ａ、データセグメント「１」４０２ｂ、およびデータセグメント「３」４０２ｄを使用してもよい。
【０１０３】
データバンク１１０ｃ上の分散型ＲＡＩＤアプリケーション２１０ｃは、データバンク１１０ｅ上の分散型ＲＡＩＤアプリケーション２１０ｅから応答を受信し、ホスト１０２ｂから発行された元の読み込みコマンドに応答するために、この応答からのデータを使用してもよい。このように、分散型ＲＡＩＤシステム内での障害の発生にも関わらず、ホストによって、データセグメントに対応するデータを依然として読み込むことができる。
【０１０４】
書き込みコマンドを続け、ホスト１０２ｂは、データバンク１１０ｃに書き込みコマンドを発行し、書き込みコマンドは、データバンク１１０ａ上のデータセグメント「２」４０２ｃに対応する論理アドレスを参照すると仮定する。ここで、データバンク１１０ｃ上の分散型ＲＡＩＤアプリケーション２１０ｃは、受信された書き込みコマンドの論理アドレスがデータセグメント「２」４０２ｃを参照すること、およびデータセグメント「２」４０２ｃがデータバンク１１０ａ上に格納されていることを決定してもよい。さらに、分散型ＲＡＩＤアプリケーション２１０ｃは、データセグメント「２」４０２ｃに対応するパリティセグメント４０２ｊが、データバンク１１０ｅ上に位置することを決定してもよい。次いで、分散型ＲＡＩＤアプリケーション２１０ｃは、データバンク１１０ａおよび１１０ｅに対応する書き込みコマンドを送信してもよい。分散型ＲＡＩＤアプリケーション２１０ａおよび２１０ｅから完了通知を受信すると、分散型ＲＡＩＤアプリケーション２１０ｃは、初めに受信された書き込みコマンドに応答してもよい。
【０１０５】
データバンク１１０ｅ上の分散型ＲＡＩＤアプリケーション２１０ｅは、その対応する書き込みコマンドを受信し、書き込みコマンドがデータセグメント「２」４０２ｃに対応する論理アドレスを参照すること、およびデータセグメント「２」４０２ｃに対応するパリティセグメント４０２ｊが、それが実行されているデータバンク１１０ｅ上に位置することを決定してもよい。分散型ＲＡＩＤアプリケーション２１０ｅは、その書き込みキャッシュ内に書き込みコマンドを置き、データバンク１１０ｃに完了通知を送信してもよい。次いで、分散型ＲＡＩＤアプリケーション２１０ｅは、パリティセグメント４０２ｊにアクセスし、受信された書き込みコマンドで参照されるデータを使用して、パリティセグメント４０２ｊを更新するために、データストア２５０ｅにアクセスしてもよい。
【０１０６】
データバンク１１０ａ上の分散型ＲＡＩＤアプリケーション２１０ａは、その対応する書き込みコマンドを受信し、書き込みコマンドがデータセグメント「２」４０２ｃに対応する論理アドレスを参照すること、およびデータセグメント「２」４０２ｃが、それが実行されているデータバンク１１０ａ上に位置することを決定してもよい。分散型ＲＡＩＤアプリケーション２１０ａは、その書き込みキャッシュ内に書き込みコマンドを置き、データバンク１１０ｃに完了通知を送信してもよい。次いで、分散型ＲＡＩＤアプリケーション２１０ａは、受信された書き込みコマンドで参照されるデータを使用して、データセグメント「２」４０２ｃを更新するために、データストア２５０ａにアクセスしてもよい。
【０１０７】
この場合も同様に、今、ホスト１０２ｂは、データバンク１１０ｃに書き込みコマンドを発行し、書き込みコマンドは、データバンク１１０ａ上のデータセグメント「２」４０２ｃに対応する論理アドレスを参照するが、データバンク１１０ａは、障害を抱えており、もはや動作していないと仮定する。この場合、データバンク１１０ｃ上の分散型ＲＡＩＤアプリケーション２１０ｃは、受信された書き込みコマンドの論理アドレスがデータセグメント「２」４０２ｃを参照すること、およびデータセグメント「２」４０２ｃは、データバンク１１０ａ上に格納されていることを決定してもよい。さらに、また、データバンク１１０ｃ上の分散型ＲＡＩＤアプリケーション２１０ｃは、データバンク１１０ａが障害を抱えていることを決定してもよい。さらに、分散型ＲＡＩＤアプリケーション２１０ｃは、データセグメント「２」４０２ｃに対応するパリティセグメント４０２ｊがデータバンク１１０ｅ上に位置することを決定してもよい。次いで、分散型ＲＡＩＤアプリケーション２１０ｃは、対応する書き込みコマンドをデータバンク１１０ｅに送信してもよい。分散型ＲＡＩＤアプリケーション２１０ｅから完了通知を受信すると、分散型ＲＡＩＤアプリケーション２１０ｃは、初めに受信された書き込みコマンドに応答してもよい。
【０１０８】
データバンク１１０ｅ上の分散型ＲＡＩＤアプリケーション２１０ｅは、対応する書き込みコマンドを受信し、書き込みコマンドがデータセグメント「２」４０２ｃに対応する論理アドレスを参照すること、およびデータセグメント「２」４０２ｃに対応するパリティセグメント４０２ｊが、それが実行されているデータバンク１１０ｅ上に位置することを決定してもよい。分散型ＲＡＩＤアプリケーション２１０ｅは、その書き込みキャッシュ内に書き込みコマンドを置き、データバンク１１０ｃに完了通知を送信してもよい。次いで、分散型ＲＡＩＤアプリケーション２１０ｅは、パリティセグメント４０２ｊにアクセスし、受信された書き込みコマンドで参照されるデータを使用して、パリティセグメント４０２ｊを更新するために、データストア２５０ｅにアクセスしてもよい。このように、分散型ＲＡＩＤシステム内での障害の発生にも関わらず、ホストによって、データセグメントに対応するデータを依然として書き込むことができる。
【０１０９】
前述の明細書では、本発明は、特定の実施形態を参照して記載されてきた。しかしながら、当業者は、以下の特許請求の範囲に説明される、本発明の範囲から逸脱することなく、種々の修正および変更を行うことができることを理解する。したがって、本明細書および図面は、限定的な意味というよりは、実例と見なされ、すべてのそのような修正は、本発明の範囲内に含まれることが意図される。
【０１１０】
利益、他の利点、および問題の解決策は、特定の実施形態に関して説明されてきた。しかしながら、利益、利点、問題の解決策、および任意の利益、利点、または解決策をもたらし得る、もしくはより顕著にし得る任意の構成要素は、任意の、もしくはすべての請求項の決定的に重要である、要求される、または必須の特徴あるいは構成要素であるとは解釈されない。
【図１】
2011165212.tif 000003
【図２Ａ】
2011165212.tif 000004
【図２Ｂ】
2011165212.tif 000005
【図３】
2011165212.tif 000006
【図５】
2011165212.tif 000007
【図６】
2011165212.tif 000008
【図７】
2011165212.tif 000009
【図８】
2011165212.tif 000010
【図９Ａ】
2011165212.tif 000011
【図９Ｂ】
2011165212.tif 000012
【図１０】
2011165212.tif 000013
【図１１】
2011165212.tif 000014
【図１２】
2011165212.tif 000015
【図４】
2011165212.tif 000016
【外国語明細書】
2011165212000001.pdf