(57)【特許請求の範囲】
【請求項１】
クライアントと、
前記クライアントに結合された記憶サブシステムであって、アレイ内で行及び列としてアドレス指定可能な複数のデータのストレージ位置を含み、また前記アレイの各列が、複数のストレージデバイスの個別のストレージデバイスを含む記憶サブシステムと、
を含み、
前記複数のストレージデバイスの少なくとも２つが、前記アレイの異なる行に対して総合調整ストレージデバイスとしてあらかじめ定められ、また、前記アレイ内の対応する行では、ただ１つのストレージデバイスだけが、所与の時点にて総合調整ストレージデバイスとして働くように構成されており、
前記アレイ内の所与の行では、総合調整ストレージデバイスが、前記クライアントからデータを受け取って、前記所与の行に格納し、また、前記受け取ったデータの１つ又は複数の部分を、前記複数のストレージデバイスの他の１つ又は複数に転送し、冗長データの計算と前記所与の行への前記冗長データの格納を総合調整するように構成されており、さらに、当該総合調整をするときに、前記総合調整ストレージデバイスが、前記所与の行のパリティデータを計算して当該パリティデータを当該総合調整ストレージデバイスのディスクドライブに格納するように構成されている、コンピュータシステム。
【請求項２】
特定ストレージデバイスの所与のストレージ位置への格納を目標としたデータの一部の受取りに応答して、前記特定ストレージデバイスに関連する不揮発性の一時ストレージデバイスが、前記データの受け取った部分を前記所与のストレージ位置に格納する前に、前記データの受け取った部分をバッファするように構成されている請求項１に記載のコンピュータシステム。
【請求項３】
前記総合調整ストレージデバイスが、前記データの１つ又は複数の部分の１つ又は複数のコピーを、前記所与の行の１つ又は複数のストレージデバイスに関連する１つ又は複数の不揮発性の一時ストレージデバイスにバッファされていることの検出に応答して、書込み完了メッセージを前記クライアントに伝えるようにさらに構成されている請求項２に記載のコンピュータシステム。
【請求項４】
前記複数のストレージデバイスの少なくとも１つの故障を検出し、さらに、
書込み完了メッセージが伝えられた後で、しかも、前記バッファされたデータの少なくとも一部が前記不揮発性の一時ストレージデバイスから所与の行中の関連されたストレージ位置に転送される前に、前記故障が発生した場合には、前記少なくとも一部の冗長データを含む前記所与の行に格納されたデータを、前記不揮発性の一時ストレージデバイスに格納されたデータから再構築し、また、
前記バッファされたデータが前記不揮発性の一時ストレージデバイスから所与の行中の関連されたストレージ位置に転送された後で、故障が発生した場合には、前記少なくとも一部の冗長データを含む前記所与の行に格納されたデータを、前記所与の行に格納されたデータから再構築するように構成されている請求項３に記載のコンピュータシステム。
【請求項５】
前記所与の行のパリティデータを計算するときに、前記総合調整ストレージデバイスが、前記所与の行に格納されたデータの複数部分の第１のパリティ値を計算するようにさらに構成されている請求項１に記載のコンピュータシステム。
【請求項６】
前記所与の行に対して、パリティ値を計算するデータが前記総合調整ストレージデバイスで受け取られていることの検出に応答して、前記複数のストレージデバイスのそれぞれに関連する不揮発性の一時ストレージデバイスが、データのバッファされた部分を、前記関連されたストレージデバイスの前記所与の行中のストレージ位置に転送するようにさらに構成されている請求項５に記載のコンピュータシステム。
【請求項７】
前記アレイが、ＲＡＩＤ−１レイアウト、ＲＡＩＤ−５レイアウト、ＲＡＩＤ−６レイアウト、あるいは、他の消去符号化レイアウトの少なくとも１つを利用する請求項１に記載のコンピュータシステム。
【請求項８】
前記アレイ内の所与の行では、前記総合調整ストレージデバイスが、前記データの受け取った１つ又は複数の部分を、前記所与の行中の別々のストレージデバイスの第２のものに転送するようにさらに構成されており、また、
前記別々のストレージデバイスの第２のものが、前記データの転送された部分を使用して、前記所与の行に格納されたデータの複数部分の第２のパリティ値を計算するように構成されている請求項５に記載のコンピュータシステム。
【請求項９】
複数のストレージデバイスからなるアレイのストレージ位置にデータを格納する方法であって、前記ストレージ位置が行及び列としてアドレス指定可能であり、また前記アレイの各列が、個別のストレージデバイスを含むような方法において、
前記複数のストレージデバイスの少なくとも２つを、前記アレイの異なる行に対して総合調整ストレージデバイスに指定するステップであって、前記アレイ内の対応する行では、ただ１つのストレージデバイスだけが、所与の時点にて総合調整ストレージデバイスとして働くように構成されている、前記指定するステップと、
前記アレイの所与の行に対して総合調整ストレージデバイスに指定された前記複数のストレージデバイスの所定の１つにて、前記所与の行への格納を目標とするデータを受け取るステップと、
受け取った前記データの１つ又は複数の部分を、前記所定の総合調整ストレージデバイスから、前記複数のストレージデバイスの他の１つ又は複数のものに転送するステップと、
前記所与の行のパリティデータを前記所定の総合調整ストレージデバイスのディスクドライブに格納するステップと、を含む方法。
【請求項１０】
特定ストレージデバイスの所与のストレージ位置への格納を目標とするデータの一部の受取りに応答して、前記データの受け取った部分を前記所与のストレージ位置に格納する前に、前記特定ストレージデバイスに関連する不揮発性の一時ストレージデバイスが、前記データの受け取った部分をバッファするステップをさらに含む請求項９に記載の方法。
【請求項１１】
前記データの１つ又は複数の部分の１つ又は複数のコピーが、前記所与の行の１つ又は複数のストレージデバイスに関連する不揮発性の一時ストレージデバイスにバッファされていることの検出に応答して、書込み完了メッセージをクライアントに伝えるステップをさらに含む請求項１０に記載の方法。
【請求項１２】
前記複数のストレージデバイスの少なくとも１つの故障を検出するステップと、
書込み完了メッセージが伝えられた後で、しかも、前記バッファされたデータの少なくとも一部が前記不揮発性の一時ストレージデバイスから所与の行中の関連されたストレージ位置に転送される前に、前記故障が発生した場合には、前記少なくとも一部の冗長データを含む前記所与の行に格納されたデータを、前記不揮発性の一時ストレージデバイスに格納されたデータから再構築するステップと、
前記バッファされたデータが前記不揮発性の一時ストレージデバイスから所与の行中の関連されたストレージ位置に転送された後で、故障が発生した場合には、前記少なくとも一部の冗長データを含む前記所与の行に格納されたデータを、前記所与の行に格納されたデータから再構築するステップと、
をさらに含む請求項１１に記載の方法。
【請求項１３】
前記総合調整ストレージデバイスが、前記所与の行に格納されたデータの複数部分に基づき前記パリティデータを計算するステップをさらに含む請求項９に記載の方法。
【請求項１４】
前記所与の行に対して、パリティ値を計算するデータが前記総合調整ストレージデバイスで受け取られていることの検出に応答して、前記複数のストレージデバイスのそれぞれに関連する不揮発性の一時ストレージデバイスが、データのバッファされた部分を、前記関連されたストレージデバイスの前記所与の行中のストレージ位置に転送するステップをさらに含む請求項１３に記載の方法。
【請求項１５】
前記アレイが、ＲＡＩＤ−１レイアウト、ＲＡＩＤ−５レイアウト、ＲＡＩＤ−６レイアウト、あるいは、他の消去符号化レイアウトの少なくとも１つを利用する請求項９に記載の方法。
【請求項１６】
複数のストレージデバイスからなるストレージ・アレイのストレージ位置にアクセスすることであって、前記ストレージ位置が行及び列としてアドレス指定可能であり、また前記ストレージ・アレイの各列が個別のストレージデバイスを含む、前記アクセスすること、
前記複数のストレージデバイスの少なくとも２つを、前記ストレージ・アレイの異なる行に対して総合調整ストレージデバイスに指定することであって、前記ストレージ・アレイ内の対応する行では、ただ１つのストレージデバイスだけが、所与の時点にて総合調整ストレージデバイスとして働くように構成されている、前記指定すること、
前記ストレージ・アレイの所与の行に対して総合調整ストレージデバイスに指定された前記複数のストレージデバイスの所定の１つにて、前記所与の行への格納を目標とするデータを受け取ること、
受け取った前記データの１つ又は複数の部分を、前記所定の総合調整ストレージデバイスから、前記複数のストレージデバイスの他の１つ又は複数のものに転送すること、及び
前記所与の行のパリティデータを前記所定の総合調整ストレージデバイスのディスクドライブに格納することを
プロセッサで実行可能なコンピュータ命令を格納した複数のコンピュータ読取り可能な記憶媒体。
【請求項１７】
所与のストレージ位置への格納を目標とするデータの一部の受取りに応答して、前記所与のストレージ位置を含むストレージデバイスに関連する不揮発性の一時ストレージデバイスに、前記データの受け取った部分をバッファする命令がさらに実行可能である請求項１６に記載のコンピュータ読取り可能な記憶媒体。
【請求項１８】
前記データの１つ又は複数の部分の１つ又は複数のコピーが、所与の行の１つ又は複数のストレージデバイスに関連する不揮発性の一時ストレージデバイスにバッファされていることの検出に応答して、書込み完了メッセージをクライアントに伝える命令がさらに実行可能である請求項１７に記載のコンピュータ読取り可能な記憶媒体。
【請求項１９】
前記複数のストレージデバイスの少なくとも１つの故障を検出し、さらに、
書込み完了メッセージが伝えられた後で、しかも、前記バッファされたデータの少なくとも一部が前記不揮発性の一時ストレージデバイスから所与の行中の関連されたストレージ位置に転送される前に、前記故障が発生した場合には、前記少なくとも一部の冗長データを含む前記所与の行に格納されたデータを、前記不揮発性の一時ストレージデバイスに格納されたデータから再構築し、また、
前記バッファされたデータが前記不揮発性の一時ストレージデバイスから所与の行中の関連されたストレージ位置に転送された後で、故障が発生した場合には、前記少なくとも一部の冗長データを含む前記所与の行に格納されたデータを、前記所与の行に格納されたデータから再構築する命令がさらに実行可能である請求項１８に記載のコンピュータ読取り可能な記憶媒体。
【請求項２０】
前記総合調整ストレージデバイスに、前記所与の行に格納されたデータの複数部分のパリティ値を計算させ、
前記所与の行に対して、パリティ値を計算するデータが前記総合調整ストレージデバイスで受け取られていることの検出に応答して、それぞれの不揮発性の一時ストレージデバイスに、データのバッファされた部分を、関連する個別のストレージデバイスの前記所与の行中のストレージ位置に転送させる命令がさらに実行可能である請求項１６に記載のコンピュータ読取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータシステムに関し、さらに具体的に言えば、コンピュータシステム内のデータ記憶サブシステムに関する。
【０００２】
（関連出願）
本出願の原出願は、２００７年９月２８日に出願された「Ｓｙｓｔｅｍ Ａｎｄ Ｍｅｔｈｏｄ Ｏｆ Ｒｅｄｕｎｄａｎｔｌｙ Ｓｔｏｒｉｎｇ Ａｎｄ Ｒｅｔｒｉｅｖｉｎｇ Ｄａｔａ Ｗｉｔｈ Ｃｏｏｐｅｒａｔｉｎｇ Ｓｔｏｒａｇｅ Ｄｅｖｉｃｅｓ（協働するストレージデバイスを用いて、データを冗長的に格納し、検索するシステム及び方法）」と称する米国仮特許出願第６０／９７６，３０２号（参照によって、その全体が本明細書中に組み入れられている）に優先益を主張している。
【背景技術】
【０００３】
コンピュータシステムは、データを格納するデータ記憶サブシステムを含むことが多い。特に、ネットワークにより相互接続された複数のクライアントを含むコンピュータシステムは、ネットワークを介して、１つ又は複数のデータ記憶サブシステムを共用することがますます増えている。これらのデータ記憶サブシステムは、１つ又は複数のディスクストレージデバイス、テープ・ドライブ、又は他の記憶媒体からなるストレージを含むか、あるいは、そのようなストレージに結合される。コンピュータシステムはまた、組み込まれたストレージデバイスの内容を表すメタデータが維持されている１つ又は複数のサーバーも含む。
【０００４】
データ記憶サブシステムは、ストレージのエラーから回復させるため、何らかの冗長性を持たせてデータを格納する。ＲＡＩＤ−１、ＲＡＩＤ−５、又はＲＡＩＤ−６などの様々なレイアウトを用いるＲＡＩＤ(Redundant Array of Independent Disks)や、リード・ソロモン符号化などの消去符号化技法（erasure coding techniques）を含む、データを冗長的に格納する様々な技法がある。これらのＲＡＩＤレイアウトは、それぞれの独立したストレージデバイスをディスクと見なすオブジェクトベースのファイルシステム内で実現される。それぞれのクライアントデバイスは、ネットワークを介して、これらのストレージデバイスにデータを伝える。あいにく、冗長データに矛盾が持ち込まれないようにするために、複数のクライアントからの書込みアクセス要求を調停する何らかの方法を必要とする。１つの調停手法は、ストレージ位置にアクセスする前にロックを得るように、それぞれのクライアントに求めることである。しかしながら、このような手法では、それぞれのクライアントは、ロック機構を用いる書込みの順序づけに関わる役割のすべてに責任を負い、かつ、それらの役割をすべて果たすものと確信されることが必要である。例えば、ＲＡＩＤ−５又はＲＡＩＤ−６の場合には、これらの役割は、旧データと旧パリティを読み取ること、新パリティを計算すること、新データと新パリティのログを取ること、及び、ＲＡＩＤレイアウトにおいて、行の一部又は全部をいっしょに構成するそれぞれのストレージ位置に新データと新パリティを書き込むことを含む。さらに、クライアントは、ＲＡＩＤレイアウトにおいて個々のストレージ位置に書き込むたびに、「メタデータ・サーバー（ＭＤＳ）」から情報を取り出すように求められる。これらの役割を果たすことから、ライト・レイテンシ（書込み遅延時間）が増し、しかも、複雑さと、計算及び格納の著しいオーバーヘッドがそれぞれのクライアントに加えられる。
【０００５】
上記の考慮すべき点に加えて、データ記憶サブシステムは、１つ又は複数のデバイスが故障したときに発生するかもしれないデータ紛失を最小限に抑えるように設計されている。ＲＡＩＤレイアウトは、高い可用性とフォールト・トレランスを実現しようとしているが、クライアントがその冗長性の維持に対して責任がある場合には、複雑な書込み操作中に、デバイス故障に対して脆弱性を増す期間がある。上記にかんがみて、これらの問題を考慮に入れていて、かつデータ記憶サブシステムへの書込みを管理するさらに効果的なシステム及び方法が要望される。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
コンピュータシステム及び方法の様々な実施態様が開示されている。一実施態様では、コンピュータシステムは、記憶サブシステムに結合されたクライアントを含む。この記憶サブシステムは、アレイ内で行及び列としてアドレス指定可能な複数のデータのストレージ位置を含む。アレイの各列は、個別のストレージデバイスを含む。アレイの各行に格納されたデータは、少なくとも一部の冗長データを含む。アレイ内の所与の行では、これらの複数のストレージデバイスの所定の１つが、総合調整ストレージデバイス（coordinating storage device）に指定される。１つ又は複数の行からなる別々の組では、上記複数のストレージデバイスの少なくとも２つが、総合調整ストレージデバイスに指定される。アレイ内の所与の行では、総合調整ストレージデバイスは、上記クライアントからデータを受け取って、所与の行に格納し、また、受け取ったデータの１つ又は複数の部分を、上記複数のストレージデバイスの他の１つ又は複数に転送し、さらに、上記少なくとも一部の冗長データの計算と、所与の行への上記少なくとも一部の冗長データの格納を総合調整するように構成されている。所与のストレージ位置への格納を目標とするデータの一部の受取りに応答して、所与のストレージ位置を含む個別のストレージデバイスに関連する不揮発性の一時ストレージデバイスは、そのデータの受け取った部分をバッファするように構成されている。
【０００７】
さらに他の実施態様では、上記総合調整ストレージデバイスは、データの１つ又は複数の部分を不揮発性の一時ストレージデバイスにバッファされていることの検出に応答して、書込み完了メッセージをクライアントに伝えるように構成されている。システムはさらに、上記複数のストレージデバイスの少なくとも１つの故障を検出するように構成されている。書込み完了メッセージが伝えられた後で、しかも、バッファされたデータの少なくとも一部が上記不揮発性の一時ストレージデバイスから所与の行中の関連されたストレージ位置に転送される前に、故障が発生した場合には、システムはさらに、上記少なくとも一部の冗長データを含む所与の行に格納されたデータを、不揮発性の一時ストレージデバイスに格納されたデータから再構築するように構成されている。バッファされたデータが、上記不揮発性の一時ストレージデバイスから所与の行中の関連されたストレージ位置に転送された後で故障が発生した場合には、システムはさらに、上記少なくとも一部の冗長データを含む所与の行に格納されたデータを、所与の行に格納されたデータから再構築するように構成されている。上記総合調整ストレージデバイスはさらに、所与の行に格納されたデータの複数部分のパリティ値又は消去符号化値を計算するように構成されている。一実施態様では、所与の行に対してパリティ値又は消去符号化値が計算されていることを示す信号に応答して、それぞれの不揮発性の一時ストレージデバイスはさらに、データのバッファされた部分を、関連する個別のストレージデバイスの所与の行中のストレージ位置に転送するように構成されている。代替実施態様では、所与の行に対して、パリティ値又は消去符号化値を計算するデータが、総合調整ストレージデバイスで受け取られていることを示す信号に応答して、それぞれの不揮発性の一時ストレージデバイスはさらに、データのバッファされた部分を、関連する個別のストレージデバイスの所与の行中のストレージ位置に転送するように構成されている。さらに他の実施態様では、冗長アレイは、ＲＡＩＤ−５レイアウト、ＲＡＩＤ−６レイアウト、ＲＡＩＤ−１レイアウト、あるいは、他の冗長レイアウト又は消去符号化レイアウトを含む。
【０００８】
上記及び他の実施態様は、以下の説明及び添付図面を考慮に入れると、明らかであろう。
【０００９】
本発明は、様々な変更例及び代替形態の影響を受けやすいが、特定の実施形態が、例示として図面に示され、かつ、本明細書に詳述されている。しかしながら、本明細書に記載される図面及び詳細な説明は、本発明を、開示された特定の形態に限定するつもりはなく、それどころか、併記の特許請求の範囲により定義される本発明の精神及び範囲に属するすべての変更例、均等例、代替例をカバーするものとする。
【発明を実施するための最良の形態】
【００１０】
図１は、コンピュータシステム１００の一実施形態を示している。図示されるように、システム１００は、ネットワーク１８０を通じて相互接続されたクライアント（１１０、１２０，１３０）、記憶サブシステム１５０、メタデータ・サーバー（ＭＤＳ）１６０を含む。クライアント（１１０、１２０，１３０）は、デスクトップＰＣ、ワークステーション、ラップトップ、ハンドヘルド・コンピュータ、ブレード・サーバーなどのような定置式コンピュータ又はモバイル・コンピュータの任意の数を表している。システム１００は、クライアントとサーバーを含むものとして描かれているが、代替実施形態では、クライアントとサーバーで果たされる役割は、ピアツーピア構成におけるピアにより、あるいは、クライアント、サーバー、ピアを組み合わせたものにより、遂行される。
【００１１】
代替実施形態では、クライアント、サーバー、ストレージデバイスの数とタイプは、図１に示されるものには限定されない。サーバー、デスクトップ、モバイル・クライアントやそれらの組み合わせの任意の数が、モデム・バンク、直接ＬＡＮ接続、無線接続、ＷＡＮリンクなどの様々な組合せを介して、システム１００内で相互接続されている。また、様々な時間に、１つ又は複数のクライアントがオフラインで動作することもある。さらに、動作中に、モバイル・ユーザがあちこちに移動して、システム１００に対して接続、切り離し、再接続を行うときに、個々のクライアントの接続タイプが変わることもある。
【００１２】
システム１００内では、記憶サブシステム１５０内のあらゆるクライアント（１１０、１２０，１３０）に関連するデータを格納することが望ましい。記憶サブシステム１５０は、個々のストレージデバイス（１５１〜１５５）を含む。ストレージデバイス（１５１〜１５５）は、ハードディスク、サーバーブレード、又は専用デバイスなどの様々な任意のデバイスであり、また、ＲＡＭ、フラッシュＲＡＭ、ＭＥＭＳ(Micro Electro Mechanical Systems)ストレージ、バッテリ・バックアップＲＡＭ、及び／又は、不揮発性ＲＡＭ（ＮＶＲＡＭ）などのような様々なメモリ素子を含む。クライアント・データは、ストレージの信頼性が冗長性及び／又は誤り訂正機能により高められるＲＡＩＤ−１、ＲＡＩＤ−ＤＰ、ＲＡＩＤ−５、ＲＡＩＤ−６などの公知の様々なレイアウト、消去符号化データ表現方式などの１つで、記憶サブシステム１５０内に格納される。記憶サブシステム１５０に格納されたデータのレイアウトを表すメタデータは、ＭＤＳ１６０に格納される。クライアントは、メタデータをＭＤＳ１６０から取り出して、記憶サブシステム１５０内の所望のデータのストレージ位置を特定する。代替実施形態では、記憶サブシステム１５０内のストレージデバイスのタイプやレイアウトに応じて、ボリューム構成デーモン（volume configuration daemon）あるいは他の記憶管理プロセス又はサーバーなどの様々な任意の構成要素により、ＭＤＳ１６０の役割を果たさせることができる。
【００１３】
以下の説明では、データは、個々のストレージデバイス位置の容量によって決まる所与のサイズのストライプ・ユニットに格納される。これらのストライプ・ユニットは、個々のストレージデバイスに適したデータ・オブジェクト、データ部分、チャンク、又は他の任意のデータ・セグメントである。しかしながら、クライアントの視点から、データ・ストライプ・ユニットは、サイズが異なってもよい。例えば、クライアントは、アレイ内に配置されたいくつかのストレージデバイスを横切る行を満たすのに充分なサイズのストライプ・ユニットで、データを記憶サブシステムに伝える。クライアントはまた、ストライプ・ユニットよりも小さいサイズでデータを伝えてもよい。様々なストライプ・レイアウトが可能であって、検討されているが、それらのストライプ・レイアウトの一部が、以下でさらに詳しく説明される。記憶サブシステム１５０内の所与の行では、それらのストレージデバイスの１つが総合調整ストレージデバイスに指定されてもよい。いくつかの実施形態では、データは、パリティを持たずに格納され、また、各行中の総合調整ストレージデバイスは、この行中の他のストレージデバイスへの個々のストライプ・ユニットの格納を総合調整する。冗長レイアウトを含む他の実施形態では、総合調整ストレージデバイスは、パリティ計算を総合調整することだけでなく、データの格納も総合調整することがある。多数のこのような別法も可能であり、検討されている。
【００１４】
ここで、図２に行くと、記憶サブシステム１５０の一実施形態の一般化したブロック図が示されている。図２に示される実施形態では、記憶サブシステム１５０は、ＲＡＩＤ−５レイアウトで配置されたストレージデバイス（２１０、２２０、２３０、２４０、２５０）を含む。ストレージデバイス（２１０、２２０、２３０、２４０、２５０）のそれぞれは、ランダムアクセスメモリ（ＲＡＭ）などの一組の一時ストレージデバイス（２１５、２２５、２３５、２４５、２５５）の対応する１つを含む。一実施形態では、一時ストレージデバイス（２１５、２２５、２３５、２４５、２５５）は、不揮発性ＲＡＭ（ＮＶＲＡＭ）を含んでもよい。データは、これらの一時ストレージデバイスを横切る行にストライプ化されているストライプ・ユニットに格納される。様々なＲＡＩＤ−５の実施形態では、レイアウトでのストレージデバイスの数に応じて、各行中に、パリティ・ストレージデバイスと少なくとも２つのデータ・ストレージデバイスがある。例えば、図２に示される実施形態では、行は、ストレージデバイス（２１０、２２０、２３０、２４０、２５０）の１つ１つにそれぞれが格納されている５つのストライプ・ユニットとして定義される。データは、行の一部、全行、又は、２つ以上の行を横切ってストライプ化される。各行は、４つのデータ・ストライプ・ユニットと１つのパリティ・ストライプ・ユニットとを含む。さらに具体的に言えば、図２に示される実施形態における第１の行は、それぞれストレージデバイス（２１０、２２０、２３０、２４０、２５０）に格納されたデータ・ストライプ・ユニット（Ａ１、Ａ２、Ａ３、Ａ４）と、パリティ・ストライプ・ユニットＡｐとを含む。第２の行は、データ・ストライプ・ユニット（Ｂ１、Ｂ２、Ｂ３、Ｂ４）と、パリティ・ストライプ・ユニットＢｐとを含む。パリティ・ストライプ・ユニットＡｐがストレージデバイス２５０に格納された第１の行とは違って、パリティ・ストライプ・ユニットＢｐはストレージデバイス２４０に格納されるが、一方、データ・ストライプ・ユニット（Ｂ１、Ｂ２、Ｂ３、Ｂ４）は、それぞれストレージデバイス（２１０、２２０、２３０、２５０）に格納される。パリティ・ストライプ・ユニットの位置は、行Ｃや行Ｄなどのようなそれぞれの連続する行上のストレージデバイスの間で回される。
【００１５】
動作中、クライアントは、ＲＡＩＤ−０レイアウトに書き込もうとするかのように、データを所与の行に書き込む。さらに具体的に言えば、ＲＡＩＤ−５の行ごとに、その行全体を、その行に指定されているパリティ・ストライプ・ユニットを収めるストレージデバイスに格納し、かつ、ストライプ・サイズが、その行中の他のパリティ無しストライプ・ユニットの総合サイズに等しくなるように、データがストライプ化されることをクライアントに知らせる。次に、クライアントは、その行全体に関するデータを、パリティ・ストレージデバイスに送る。次に、パリティ・ストレージデバイスは、以下でさらに詳しく説明されるプロセスにより、データの１つ又は複数の部分を、所与の行中の構成データ・ストレージデバイスに転送する。それぞれのストレージデバイスは、新パリティを計算するまで、パリティ又はデータを、その関連ＲＡＭに格納し、また、新パリティの計算時に、その書込み操作がコミットされ、また、データとパリティがＲＡＭから、関連するストライプ・ユニットの位置に転送される。記憶サブシステムは、データ・ストライプ・ユニットとパリティ・ストライプ・ユニットをＲＡＭに格納した後で、ただし、データとパリティをＲＡＭから、関連するストライプ・ユニットの位置に転送する前に、書込み完了メッセージをクライアントに戻して、ライト・レイテンシを最小限に抑える。それぞれ幅が１行以下であり、かつそれぞれの行中の対応するパリティ・ストレージデバイスにそれぞれがアドレス指定される一連の書込み操作を通じて、単一行の容量よりも大きいデータセットを書き込む。
【００１６】
読取り操作は、同様なやり方で行われる。例えば、読取り要求は、クライアントから、所与の行中のパリティ・ストレージデバイスに送られる。要求されるデータが、パリティ・ストレージデバイスに関連するＲＡＭに格納されている場合には、要求に応じて、そのデータを検索して、直接にクライアントに送る。要求されたデータが、その行を構成する他の１つ又は複数のストレージデバイス上にある場合には、パリティ・ストレージデバイスは、対応する読取り要求を、このレイアウトでのそれぞれのストレージデバイスに伝え、代わりに、要求されたデータの一部を受け取る。次に、パリティ・ストレージデバイスは、データを集めて、それを、要求するクライアントに戻す。データの１つ又は複数の部分が、故障しているストレージデバイス上にある場合には、パリティ・ストレージデバイスは、この行を構成する充分な数の残りのストレージデバイスからデータを取り出し、次に、利用可能なデータとパリティを用いて、消失を再構築する。
【００１７】
図３は、記憶サブシステム１５０の代替実施形態の詳細なブロック図である。図３に示される実施形態では、データは、ストライプ・ユニットとして記憶サブシステム１５０に格納される。記憶サブシステム１５０は、ＲＡＩＤ−６レイアウトで配置されたストレージデバイス（３１０、３２０、３３０、３４０、３５０、３６０）を含む。ストレージデバイス（３１０、３２０、３３０、３４０、３５０、３６０）のそれぞれは、ランダムアクセスメモリ（ＲＡＭ）などの一組の一時ストレージデバイス（３１５、３２５、３３５、３４５、３５５、３６５）の対応する１つを含む。一実施形態では、一時ストレージデバイス（３１５、３２５、３３５、３４５、３５５、３６５）は、フラッシュＲＡＭ、ＭＥＭＳストレージ、バッテリ・バックアップＲＡＭ、不揮発性ＲＡＭ（ＮＶＲＡＭ）、又は他の永続性ストレージデバイスを含む。データは、これらのストレージデバイス上で、行中のストライプ・ユニットを横切ってストライプ化される。
【００１８】
様々なＲＡＩＤ−６の実施形態では、レイアウトでのストレージデバイスの数に応じて、各行中に、２つのパリティ・ストライプ・ユニットと、少なくとも２つのデータ・ストライプ・ユニットがある。例えば、図３に示される実施形態では、行は、ストレージデバイス（３１０、３２０、３３０、３４０、３５０、３６０）の１つ１つにそれぞれが格納されている６つのストライプ・ユニットと定義される。データは、行の一部、全行、又は、２つ以上の行を横切ってストライプ化される。各行は、４つのデータ・ストライプ・ユニットと２つのパリティ・ストライプ・ユニットとを含む。さらに具体的に言えば、図３に示される実施形態における第１の行は、それぞれストレージデバイス（３１０、３２０、３３０、３４０、３５０、３６０）に格納されたデータ・ストライプ・ユニット（Ａ１、Ａ２、Ａ３、Ａ４）と、パリティ・ストライプ・ユニット（ＡｐとＡｑ）とを含む。第２の行は、データ・ストライプ・ユニット（Ｂ１、Ｂ２、Ｂ３、Ｂ４）と、パリティ・ストライプ・ユニット（ＢｐとＢｑ）とを含む。パリティ・ストライプ・ユニットＡｐがストレージデバイス３５０に格納され、またパリティ・ストライプ・ユニットＡｑがストレージデバイス３６０に格納される第１の行とは違って、パリティ・ストライプ・ユニットＢｐはストレージデバイス３４０に格納され、またＢｑはストレージデバイス３５０に格納されるが、一方、データ・ストライプ・ユニット（Ｂ１、Ｂ２、Ｂ３、Ｂ４）は、それぞれストレージデバイス（３１０、３２０、３３０、３６０）に格納される。これらのパリティ・ストレージデバイスの位置は、行Ｃや行Ｄなどのようなそれぞれの連続する行上のストレージデバイスの間で回される。
【００１９】
書込み操作中、クライアントは、ＲＡＩＤ−０レイアウトに書き込もうとするかのように、データを所与の行に書き込む。さらに具体的に言えば、ＲＡＩＤ−６の行ごとに、その行全体を、その行に指定されている一次パリティ・ストレージデバイス（上記の通り、添え字「ｐ」で示される）に格納し、かつ、クライアント・ストライプ・ユニットが、その行中の他のパリティ無しストライプ・ユニットの総合サイズに等しくなるように、データがストライプ化されることをクライアントに知らせる。次に、クライアントは、その行全体に関するデータを、一次パリティ・ストレージデバイスに送る。次に、一次パリティ・ストレージデバイスは、以下でさらに詳しく説明されるプロセスにより、データを、所与の行中の構成データ・ストレージデバイス及び二次パリティ・ストレージデバイス（上記の通り、添え字「ｑ」で示される）に転送する。それぞれのストレージデバイスは、新パリティを計算するまで、パリティ及び／又はデータを、関連ＲＡＭに格納し、また、新パリティの計算時に、その書込み操作がコミットされ、また、データとパリティがＲＡＭから、関連するストレージデバイスに転送される。記憶サブシステムは、データ・ストライプ・ユニットとパリティ・ストライプ・ユニットをＲＡＭに格納した後で、ただし、データとパリティをＲＡＭから、関連するストレージデバイスに転送する前に、書込み完了メッセージをクライアントに戻して、ライト・レイテンシを最小限に抑える。それぞれ幅が１行以下であり、かつそれぞれの行中の対応するパリティ・ストレージデバイスにそれぞれがアドレス指定される一連の書込み操作を通じて、単一行の容量よりも大きいデータセットを書き込む。
【００２０】
読取り操作は、同様なやり方で行われる。例えば、読取り要求は、クライアントから、所与の行中の一次パリティ・ストレージデバイスに送られる。要求されるデータが、一次パリティ・ストレージデバイスに関連するＲＡＭに格納されている場合には、要求に応じて、そのデータを検索して、直接にクライアントに送る。要求されたデータが、その行を構成する他の１つ又は複数のストレージデバイス上にある場合には、パリティ・ストレージデバイスは、対応する読取り要求を、レイアウトでのそれぞれのストレージデバイスに伝え、代わりに、要求されたデータの一部を受け取る。次に、一次パリティ・ストレージデバイスは、そのデータを集めて、それを、要求するクライアントに戻す。そのデータの１つ又は複数の部分が、故障しているストレージデバイス上にある場合には、一次パリティ・ストレージデバイスは、この行を構成する充分な数の残りのストレージデバイスからデータを取り出し、次に、利用可能なデータとパリティを用いて、消失を再構築する。ＲＡＩＤ−６、及び多大な冗長量を持つ他のレイアウトの場合には、それらのデータ・ストレージデバイスとパリティ・ストレージデバイスのすべてからデータを取り出す必要はなく、それらのデータ部分のサブセット（一部）が、その消失を再構築するのに充分であることに留意されたい。
【００２１】
図４は、記憶サブシステム１５０のさらに他の代替実施形態の詳細なブロック図である。図４に示される実施形態では、データは、ストライプ・ユニットとして記憶サブシステム１５０に格納される。記憶サブシステム１５０は、ＲＡＩＤ−１レイアウトで配置されたストレージデバイス（４１０と４２０）を含む。図４に示される実施形態では、２つのストレージデバイスが示されているが、ただし、代替ＲＡＩＤ−１レイアウトでは、冗長度を高めるために、２つを超えるストレージデバイスを使用することがある。ストレージデバイス（４１０と４２０）のそれぞれは、ランダムアクセスメモリ（ＲＡＭ）などの一組の一時ストレージデバイス（４１５と４２５）の対応する１つを含む。一実施形態では、一時ストレージデバイス（４１５と４２５）は、フラッシュＲＡＭ、ＭＥＭＳストレージ、バッテリ・バックアップＲＡＭ、不揮発性ＲＡＭ（ＮＶＲＡＭ）、又は他の永続性ストレージデバイスを含む。データは、ストレージデバイス４１０とストレージデバイス４２０との間でミラー化される。データは、行の一部、全行、又は、２つ以上の行に格納される。各行は、一次データ・ストライプ・ユニットと二次ストライプ・ユニットとを含む。例えば、図４に示される実施形態における第１の行は、ストレージデバイス４１０に格納されたデータ・ストライプ・ユニットＡ１と、ストレージデバイス４２０に格納されたデータ・ストライプ・ユニットＡ２とを含む。第２の行は、ストレージデバイス４１０に格納されたデータ・ストライプ・ユニットＢ１と、ストレージデバイス４２０に格納されたデータ・ストライプ・ユニットＢ２とを含むといった具合である。一次データ・ストレージデバイスの位置は、上記一次データ・ストライプ・ユニットを格納する責任をストレージデバイス４１０とストレージデバイス４２０に分担させるそれぞれの連続する行又は他の任意のパターンに対して交互するといった具合に、これらのストレージデバイスの間で変えられる。
【００２２】
動作中、データの行ごとに、データを、その行用の一次データ・ストレージデバイスに格納するように、データがストライプ化されることをクライアントに知らせる。クライアントは、データを一次データ・ストレージデバイスに送る。次に、一次データ・ストレージデバイスは、データを、所与の行中の二次データ・ストレージデバイスに転送する。それぞれのストレージデバイスは、ストライプ・ユニットをいつでもコミットできる状態になるまで、データを、その関連ＲＡＭに格納して、これらのストレージデバイスの中で複数の書込み要求を順序づける機会を与える。記憶サブシステムは、データ・ストライプ・ユニットをＲＡＭに格納した後で、ただし、データをＲＡＭから、関連するストレージデバイスに転送する前に、書込み完了メッセージをクライアントに戻して、ライト・レイテンシを最小限に抑える。それぞれ幅が１行以下であり、かつそれぞれの行中の対応する一次データ・ストレージデバイスにそれぞれがアドレス指定される一連の書込み操作を通じて、単一行の容量よりも大きいデータセットを書き込む。通常の当業者であれば、読取り操作が、同様に一次データ・ストレージデバイスを通じて総合調整されることが明らかであろう。
【００２３】
記憶サブシステム１５０のさらに他の実施形態では、消去符号化法が使用される。例えば、リード・ソロモン方式では、総合調整ストレージデバイスは、受け取ったデータのＫ個のブロックに計算を行ってＭ個の消去符号化ブロックを生成し、元のデータの復元に、Ｍ個のブロックのうちＮ個だけを必要とするようにする。ここで、Ｎ＜Ｍであり、また通常、Ｋ＜Ｎである。通常の当業者には、他の多数の適切な冗長記憶方式又は消去符号化記憶方式が明らかであろう。
【００２４】
図５は、クライアントと、ＲＡＩＤ−５レイアウトにおける行との間でのライト・トランザクションの一実施形態を示すシーケンス図である。図５に示される実施形態では、データ・ストレージデバイス（５０１〜５０４）とパリティ・ストレージデバイス５０５からなる行にクライアント５１０がデータを書き込むのが示されている。そのデータ・サイズを、１行の容量に等しいと仮定する。時点ｔ０にて、クライアント５１０は、データ・ストレージデバイス（５０１〜５０４）のそれぞれに格納されるデータを含むメッセージ５２０で、データをパリティ・ストレージデバイス５０５に送る。クライアント５１０は、この行の個々の構成要素を知っている必要はない。もっと適切に言えば、クライアント５１０は、メタデータ・サーバーから、パリティ・ストレージデバイス５０５の位置とこの行のサイズを含め、データ・ストレージのレイアウトを得る。パリティ・ストレージデバイス５０５がデータを受け取った後で、時点ｔ１にて、パリティ・ストレージデバイス５０５は、新パリティ・ストライプ・ユニットを計算して、その結果及び／又はデータを、関連一時ストレージデバイスに格納する（ブロック５２５）。時点ｔ２にて、パリティ・ストレージデバイス５０５は、それぞれメッセージ（５３１〜５３４）で、データの一部をデータ・ストレージデバイス（５０１〜５０４）のそれぞれに転送するプロセスを開始する。データ・ストレージデバイス（５０１〜５０４）のそれぞれは、受け取ったデータを、関連一時ストレージデバイスに格納する。
【００２５】
時点ｔ３にて、パリティ・ストレージデバイス５０５は、それぞれメッセージ（５４１〜５４４）で、データ・ストレージデバイス（５０１〜５０４）のそれぞれから確認応答を受け取り始める。これらの確認応答がすべて受け取られると、時点ｔ４にて、パリティ・ストレージデバイス５０５は、書込み完了メッセージ５５０をクライアント５１０に送る。新データが、データ・ストレージデバイス（５０１〜５０４）により受け取られて、確認されるまで、書込み完了メッセージ５５０をクライアントに送らないことに留意する必要がある。これにより、データが冗長的に格納されることと、任意の単一デバイスの故障の場合でも、データが復元されることが保証される。次に、時点ｔ５にて、パリティ・ストレージデバイス５０５は、関連一時ストレージデバイスに入っている新データに基づいて、新パリティ値を計算して、それを、パリティ・ストライプ・ユニットの位置に書き込む（ブロック５６０）か、あるいは、新パリティ値がすでに、関連一時ストレージデバイスに格納されている場合には、新パリティ値を、関連一時ストレージデバイスから、パリティ・ストライプ・ユニットの位置に書き込む（ブロック５６０）。時点ｔ６にて、データ・ストレージデバイス（５０１〜５０４）のそれぞれは、データを、関連一時ストレージデバイスから、データ・ストライプ・ユニットの位置に書き込んで、ライト・トランザクションを完了する（ブロック５７０）。
【００２６】
次に、いくつかのエラー回復シナリオを述べる。時点ｔ１と時点ｔ２との間に、これらのストレージデバイスの電源障害又は他の一時中断が発生する場合には、その書込みを廃棄する。これらの一時ストレージデバイスへの新データ及び／又は新パリティの転送が不完全であったから、電源が復旧するか、又は中断が回復すると、部分データは廃棄される。時点ｔ２後の電源障害又は他の一時中断の場合には、処理は、電源が復旧した後で再開し、また、故障がまったく発生してないかのように、アルゴリズムの残りの工程が実行される。
【００２７】
上記パリティ・ストレージデバイス以外のストレージデバイスの故障に、電源障害が組み合わされた場合には、パリティ・ストレージデバイスは、その故障を検出して、メッセージをＭＤＳ（メタデータ・サーバー）に送って、デバイス故障を報告する。別法として、パリティ・ストレージデバイスは、書込み完了メッセージの代わりにエラー・メッセージをクライアントに送る。それに応答して、クライアントは、ＭＤＳとコンタクトを取って、エラーを報告する。クライアントから、又はパリティ・ストレージデバイスからエラー・メッセージを受け取ると、ＭＤＳは、新ストレージデバイスを選択して、故障したデバイスを取り替え、また、残りのストレージデバイスに格納されたデータに基づいて、ストライプ・ユニットの内容を再構築させる。この行中のストレージデバイスのすべてが、データのそれぞれの部分を受け取って、かつ格納する前に、上記のデバイス故障が発生する場合には、パリティ・ストレージデバイスから、書込みデータの全コピーを得て、書込み操作を完了する。
【００２８】
上記パリティ・ストレージデバイスの故障に電源障害が組み合わされる場合には、ＭＤＳは、ポーリングなどのような従来の技法を介して、パリティ・ストレージデバイスの故障を認め、さらに、新ストレージデバイスを選択して、パリティ・ストレージデバイスを取り替える。新パリティ・ストレージデバイスは、他のストレージデバイスからデータを読み取って、パリティ値を計算し直し、さらに、その結果得られたパリティ値を新ストレージ位置に格納する。いくつかの実施形態では、パリティの再計算は、ＭＤＳなどの他のデバイスによって行われてもよい。
【００２９】
図６は、クライアントと、ＲＡＩＤ−５レイアウトでの部分行との間のライト・トランザクションの一実施形態を示すシーケンス図である。図６に示される実施形態では、クライアント６１０は、データ・ストレージデバイス（６０１〜６０４）とパリティ・ストレージデバイス６０５からなる行にデータを書き込むのが示されている。データ・サイズは、１行の容量よりも小さいと仮定される。時点ｔ０にて、クライアント６１０は、データ・ストレージデバイス（６０１と６０２）のそれぞれに格納されるデータを含むメッセージ６２０で、データをパリティ・ストレージデバイス６０５に送る。クライアント６１０は、この行の個々の構成要素を知っている必要はない。もっと適切に言えば、クライアント６１０は、メタデータ・サーバーから、パリティ・ストレージデバイス６０５の位置と、データを格納するのに必要なデータ・ストライプ・ユニットのサイズを含め、データ・ストレージのレイアウトを得るか、あるいは、そのようなレイアウトが知らされる。パリティ・ストレージデバイス６０５がデータを受け取った後で、時点ｔ１にて、パリティ・ストレージデバイス６０５は、データを、関連一時ストレージデバイスに格納する（ブロック６２５）。
【００３０】
時点ｔ２にて、パリティ・ストレージデバイス６０５は、それぞれメッセージ（６３１と６３２）で、データの一部をデータ・ストレージデバイス（６０１と６０２）のそれぞれに転送するプロセスを開始する。データ・ストレージデバイス（６０１と６０２）のそれぞれは、受け取ったデータを、関連一時ストレージデバイスに格納する。時点ｔ３にて、パリティ・ストレージデバイス６０５は、それぞれメッセージ（６４１と６４２）で、データ・ストレージデバイス（６０１と６０２）のそれぞれから確認応答を受け取り始める。これらの確認応答がすべて受け取られると、時点ｔ４にて、パリティ・ストレージデバイス６０５は、書込み完了メッセージ６５０をクライアント６１０に送る。次に、時点ｔ５にて、データ・ストレージデバイス（６０１と６０２）のそれぞれは、それぞれメッセージ（６６１と６６２）で、関連データのストレージ位置に格納された旧データのコピーをパリティ・ストレージデバイス６０５に送る。メッセージ（６６１と６６２）を受け取った後で、時点ｔ６にて、パリティ・ストレージデバイス６０５は、それそれメッセージ（６７１と６７２）で、確認応答をデータ・ストレージデバイス（６０１と６０２）のそれぞれに送る。次に、時点ｔ７にて、パリティ・ストレージデバイス６０５は、データ・ストレージデバイス（６０１と６０２）から受け取った旧データと、クライアント６１０から受け取った新データを使用して、新パリティ値を計算して、その結果を、関連一時ストレージデバイスに格納する（ブロック６８２）。時点ｔ８にて、データ・ストレージデバイス（６０１と６０２）のそれぞれは、データを、関連一時ストレージデバイスから、データのストレージ位置に書き込む（ブロック６８４）。時点ｔ９にて、パリティ・ストレージデバイス６０５は、それらの新パリティ値を、関連一時ストレージデバイスから、パリティ・データのストレージ位置に書き込んで、ライト・トランザクションを完了する（ブロック６８６）。エラー回復は、クライアントと、ＲＡＩＤ−５レイアウトでの全行との間のライト・トランザクションに関する上述のプロセスと同様であり、それゆえ、これ以上説明しないが通常の当業者には明らかであろう。
【００３１】
図７は、クライアントと、ＲＡＩＤ−６レイアウトでの行との間のライト・トランザクションの一実施形態を示すシーケンス図である。図７に示される実施形態では、クライアント７１０は、データ・ストレージデバイス（７０２〜７０５）とパリティ・ストレージデバイス（７０１と７０６）からなる行にデータを書き込むのが示されている。データ・サイズは、１行の容量に等しいと仮定される。時点ｔ０にて、クライアント７１０は、データ・ストレージデバイス（７０２〜７０５）のそれぞれに格納されるデータを含むメッセージ７２０で、データをパリティ・ストレージデバイス７０６に送る。クライアント７１０は、この行の個々の構成要素を知っている必要はない。もっと適切に言えば、クライアント７１０は、メタデータ・サーバーから、一次パリティ・ストレージデバイス７０６の位置と、この行のサイズを含め、データ・ストレージのレイアウトを得るか、あるいは、そのようなレイアウトが知らされる。一次パリティ・ストレージデバイス７０６がデータを受け取った後で、時点ｔ１にて、一次パリティ・ストレージデバイス７０６は、新データを、関連一時ストレージデバイスに格納し、新一次パリティ値を計算して、新一次パリティ値を、関連一時ストレージデバイスに格納する（ブロック７２５）。
【００３２】
時点ｔ２にて、一次パリティ・ストレージデバイス７０６は、メッセージ７３１で、新データを二次パリティ・ストレージデバイス７０１に送る。二次パリティ・ストレージデバイス７０１は、この新データを、関連一時ストレージデバイスに格納する。時点ｔ３にて、二次パリティ・ストレージデバイス７０１は、メッセージ７３２で、確認応答を一次パリティ・ストレージデバイス７０６に送り戻す。確認応答が受け取られると、時点ｔ４にて、一次パリティ・ストレージデバイス７０６は、それぞれメッセージ（７４１〜７４４）で、データの一部をデータ・ストレージデバイス（７０５〜７０２）のそれぞれに転送するプロセスを開始する。データ・ストレージデバイス（７０５〜７０２）のそれぞれは、受け取ったデータを、関連一時ストレージデバイスに格納する。時点ｔ５にて、一次パリティ・ストレージデバイス７０６は、それぞれメッセージ（７５１〜７５４）で、データ・ストレージデバイス（７０２〜７０５）のそれぞれから確認応答を受け取り始める。これらの確認応答がすべて受け取られると、時点ｔ６にて、一次パリティ・ストレージデバイス７０６は、メッセージ７６１で、書込み完了メッセージを二次パリティ・ストレージデバイス７０１に送る。二次パリティ・ストレージデバイス７０１は、データに基づいて、新パリティ・ストライプ・ユニットの値を計算し、二次パリティ・ストライプ・ユニットの位置の状態を完全なものにし、時点ｔ７にて、メッセージ７６２で確認応答を一次パリティ・ストレージデバイス７０６に送り戻す。
【００３３】
時点ｔ８にて、一次パリティ・ストレージデバイス７０６は、書込み完了メッセージ７７０をクライアント７１０に送る。次に、時点ｔ９にて、一次パリティ・ストレージデバイス７０６と二次パリティ・ストレージデバイス７０１は、これらの新パリティ値を、それらの関連一時ストレージデバイスから、それらのパリティ・ストライプ・ユニットの位置に書き込む（ブロック７８０）。時点ｔ１０にて、データ・ストレージデバイス（７０２〜７０５）のそれぞれは、データを、関連一時ストレージデバイスから、データ・ストライプ・ユニットの位置に書き込んで、ライト・トランザクションを完了する（ブロック７９０）。上の説明では、一次パリティ・ストレージデバイス７０６が、時点ｔ１にて、新一次パリティ値を計算し、また、二次パリティ・ストレージデバイス７０１が、ｔ７にて、新一次パリティ値を計算するが、代替実施形態では、二次パリティ・ストレージデバイス７０１と一次パリティ・ストレージデバイス７０６は、新データを受け取った後で、かつ時点ｔ９よりも前の任意の時点に、新データから新パリティ値を計算する。
【００３４】
次に、いくつかのエラー回復シナリオを述べる。時点ｔ１と時点ｔ２との間に、これらのストレージデバイスの電源障害又は他の一時中断が発生する場合には、書込みを廃棄する。これらの一時ストレージデバイスへの新データ及び／又は新パリティの転送が不完全であったから、電源が復旧するか、あるいは中断が回復すると、部分データは廃棄される。時点ｔ２後の電源障害又は他の一時中断の場合には、処理は、電源が復旧した後で再開し、また、故障がまったく発生してないかのように、アルゴリズムの残りの工程が実行される。
【００３５】
上記パリティ・ストレージデバイスのいずれか以外のストレージデバイスの故障に、電源障害が組み合わされる場合には、これらのパリティ・ストレージデバイスのいずれかは、故障を検出して、メッセージをＭＤＳに送って、デバイス故障を報告する。別法として、一次パリティ・ストレージデバイスは、書込み完了メッセージの代わりにエラー・メッセージをクライアントに送る。それに応答して、クライアントは、ＭＤＳとコンタクトを取って、エラーを報告する。クライアントから、又はパリティ・ストレージデバイスからエラー・メッセージを受け取ると、ＭＤＳは、新ストレージデバイスを選択して、故障したデバイスを取り替え、また、残りのストレージデバイスに格納されたデータに基づいて、ストライプ・ユニットの内容を再構築させる。行中のストレージデバイスのすべてが、データのそれぞれの部分を受け取って、かつ格納する前に、上記のデバイス故障が発生する場合には、これらのパリティ・ストレージデバイスのいずれかから、書込みデータの全コピーを得て、その書込み操作を完了する。
【００３６】
パリティ・ストレージデバイスの故障に、電源障害が組み合わされる場合には、ＭＤＳは、ポーリングなどのような従来の技法を介して、パリティ・ストレージデバイスの故障を認め、さらに、新ストレージデバイスを選択して、パリティ・ストレージデバイスを取り替える。新パリティ・ストレージデバイスは、他のストレージデバイスからデータを読み取って、パリティ値を計算し直し、さらに、その結果得られたパリティ値を新ストレージ位置に格納する。いくつかの実施形態では、パリティの再計算は、ＭＤＳなどの他のデバイスによって行われることがある。
【００３７】
図８は、クライアントと、ＲＡＩＤ−６レイアウトでの部分行との間のライト・トランザクションの一実施形態を示すシーケンス図である。図８に示される実施形態では、クライアント８１０は、データ・ストレージデバイス（８０２〜８０５）とパリティ・ストレージデバイス（８０１と８０６）からなる行にデータを書き込むのが示されている。データ・サイズは、１行の容量よりも小さいと仮定される。時点ｔ０にて、クライアント８１０は、データ・ストレージデバイス８０５に格納されるデータを含むメッセージ８２０で、データをパリティ・ストレージデバイス８０６に送る。クライアント８１０は、行の個々の構成要素を知っている必要はない。もっと適切に言えば、クライアント８１０は、メタデータ・サーバーから、一次パリティ・ストレージデバイス８０６の位置と、データを格納するのに必要なデータ・ストライプ・ユニットのサイズを含め、データ・ストレージのレイアウトを得るか、あるいは、そのようなレイアウトが知らされる。一次パリティ・ストレージデバイス８０６がデータを受け取った後で、時点ｔ１にて、一次パリティ・ストレージデバイス８０６は、データを、関連一時ストレージデバイスに格納する（ブロック８２５）。
【００３８】
時点ｔ２にて、一次パリティ・ストレージデバイス８０６は、メッセージ８３１で、新データを二次パリティ・ストレージデバイス８０１に送る。二次パリティ・ストレージデバイス８０１は、新データを、関連一時ストレージデバイスに格納する。時点ｔ３にて、二次パリティ・ストレージデバイス８０１は、メッセージ８３２で、確認応答を一次パリティ・ストレージデバイス８０６に送り戻す。確認応答が受け取られると、時点ｔ４にて、一次パリティ・ストレージデバイス８０６は、メッセージ８４１で、データの一部をデータ・ストレージデバイス８０５に転送するプロセスを開始する。データ・ストレージデバイス８０５は、受け取ったデータを、関連一時ストレージデバイスに格納する。時点ｔ５にて、一次パリティ・ストレージデバイス８０６は、メッセージ８４２で、データ・ストレージデバイス８０５から確認応答を受け取る。確認応答が受け取られると、時点ｔ６にて、一次パリティ・ストレージデバイス８０６は、書込み完了メッセージをクライアント８１０に送る。次に、時点ｔ７にて、データ・ストレージデバイス８０５は、関連データ・ストライプ・ユニットの位置に格納された旧データのコピーを、メッセージ８６１で一次パリティ・ストレージデバイス８０６に送り、またメッセージ８６２で二次パリティ・ストレージデバイス８０１にも送る。メッセージ８６１を受け取った後で、時点ｔ８にて、一次パリティ・ストレージデバイス８０６は、メッセージ８７１で、確認応答をデータ・ストレージデバイス８０５に送る。
【００３９】
メッセージ８６２を受け取った後で、時点ｔ９にて、二次パリティ・ストレージデバイス８０１は、メッセージ８７２で、確認応答をデータ・ストレージデバイス８０５に送る。次に、時点ｔ１０にて、一次パリティ・ストレージデバイス８０６は、データ・ストレージデバイス８０５から受け取った旧データと、クライアント８１０から受け取った新データを使用して、新パリティ値を計算して、その結果を、関連一時ストレージデバイスに格納する（ブロック８８２）。時点ｔ１１にて、データ・ストレージデバイス８０５は、データを、関連一時ストレージデバイスから、関連データ・ストライプ・ユニットの位置に書き込む（ブロック８８４）。時点ｔ１２にて、一次パリティ・ストレージデバイス８０６は、それらの新パリティ値を、関連一時ストレージデバイスから、パリティ・ストライプ・ユニットの位置に書き込む（ブロック８８６）。時点ｔ１３にて、二次パリティ・ストレージデバイス８０１は、データ・ストレージデバイス８０５から受け取った旧データと、一次パリティ・ストレージデバイス８０６から受け取った新データを使用して、新パリティ値を計算して、その結果を、関連一時ストレージデバイスに格納する（ブロック８９２）。時点ｔ１４にて、二次パリティ・ストレージデバイス８０１は、これらの新パリティ値を、関連一時ストレージデバイスから、パリティ・ストライプ・ユニットの位置に書き込んで、ライト・トランザクションを完了する（ブロック８９４）。エラー回復は、クライアントと、ＲＡＩＤ−６レイアウトでの全行との間のライト・トランザクションに関する上述のプロセスと同様であり、それゆえ、これ以上説明しないことが通常の当業者には明らかであろう。
【００４０】
図９は、クライアントと、ＲＡＩＤ−５レイアウトでの行との間のライト・トランザクション中に、ＲＡＩＤ−５レイアウトでのパリティ・ストレージデバイスで利用されるプロセス９００の一実施形態を示している。プロセス９００は、パリティ・ストレージデバイスがクライアントから書込み要求を受け取るときに開始する（ブロック９１０）。一実施形態では、一次パリティ・ストレージデバイスは、新データを、関連一時ストレージデバイスに格納する（ブロック９１５）。その書込み要求が、ＲＡＩＤ−５の行の全幅のデータを含む場合には（判断ブロック９２０）、パリティ・ストレージデバイスは、新パリティ値を計算して、それらの結果を、新データとともに関連一時ストレージデバイスに格納する（ブロック９３２）。次に、このパリティ・ストレージデバイスは、データの一部を、ＲＡＩＤ−５の行中のデータ・ストレージデバイスのそれぞれに送って（ブロック９３４）、確認応答を待つ。ＲＡＩＤ−５の行中のデータ・ストレージデバイスのすべてから、確認応答が受け取られているときには（ブロック９３６）、このパリティ・ストレージデバイスは、書込み完了メッセージをクライアントに戻す（ブロック９３８）。この書込み完了メッセージを送った後で、このパリティ・ストレージデバイスは、これらの新パリティ値を、関連一時ストレージデバイスから、このパリティ・ストレージデバイス内のパリティ・ストライプ・ユニットの位置に書き込んで、この書込み操作を完了する（ブロック９４０）。
【００４１】
書込み要求が、ＲＡＩＤ−５の行の一部だけのデータを含む場合には（判断ブロック９２０）、このパリティ・ストレージデバイスは、この新データを、書込み要求から、ＲＡＩＤ−５の行中のデータ・ストレージデバイスである対応するストレージデバイスに送って（ブロック９５４）、確認応答を待つ。ＲＡＩＤ−５の行の中の対応するデータ・ストレージデバイスのすべてから、確認応答が受け取られているときには（ブロック９５６）、このパリティ・ストレージデバイスは、書込み完了メッセージをクライアントに戻す（ブロック９５８）。この書込み完了メッセージが送られた後で、このパリティ・ストレージデバイスは、ＲＡＩＤ−５の行中のデータ・ストレージデバイスであるストレージデバイスのそれぞれから、データの旧部分のコピーを受け取る（９６０）。このパリティ・ストレージデバイスは、ＲＡＩＤ−５の行中のデータ・ストレージデバイスである対応するストレージデバイスのそれぞれに確認応答を送り（ブロック９７０）、上記の旧パリティ値、データの旧部分、及びデータの新部分から新パリティ値を計算して、その結果得られた値を関連一時ストレージデバイスに書き込む（ブロック９８０）。次に、このパリティ・ストレージデバイスは、これらの新パリティ値を、関連一時ストレージデバイスから、このパリティ・ストレージデバイス内のパリティ・ストライプ・ユニットの位置に書き込んで、この書込み操作を完了する（ブロック９４０）。
【００４２】
図１０は、クライアントと、ＲＡＩＤ−６レイアウトでの行との間のライト・トランザクション中に、ＲＡＩＤ−６レイアウトでの一次パリティ・ストレージデバイスで利用されるプロセス１０００の一実施形態を示している。プロセス１０００は、この一次パリティ・ストレージデバイスがクライアントから書込み要求を受け取るときに開始する（ブロック１０１０）。一実施形態では、この一次パリティ・ストレージデバイスは、新データを、関連一時ストレージデバイスに格納する（ブロック１０１５）。書込み要求が、ＲＡＩＤ−６の行の全幅のデータを含む場合には（判断ブロック１０２０）、この一次パリティ・ストレージデバイスは、新一次パリティ値を計算して、それらの結果を、関連一時ストレージデバイスに格納する（ブロック１０３２）。次に、この一次パリティ・ストレージデバイスは、この新データを、この二次パリティ・ストレージデバイスに送って、確認応答を待つ（ブロック１０３４）。この二次パリティ・ストレージデバイスから、確認応答が受け取られているときには（ブロック１０３６）、この一次パリティ・ストレージデバイスは、データの一部を、ＲＡＩＤ−６の行中の上記データ・ストレージデバイスのそれぞれに送って（ブロック１０３８）、確認応答を待つ。ＲＡＩＤ−６の行中のデータ・ストレージデバイスのすべてから、確認応答が受け取られているときには（ブロック１０４０）、この一次パリティ・ストレージデバイスは、書込み完了メッセージをこの二次パリティ・ストレージデバイスに戻して、確認応答を待つ（ブロック１０４２）。
【００４３】
確認応答が受け取られた（ブロック１０４４）後で、一次パリティ・ストレージデバイスは、書込み完了メッセージをクライアントに戻す（ブロック１０４６）。この書込み完了メッセージが送られると、この一次パリティ・ストレージデバイスは、これらの新パリティ値を、関連一時ストレージデバイスから、この一次パリティ・ストレージデバイス内の一次パリティ・ストライプ・ユニットの位置に書き込んで、この書込み操作を完了する（ブロック１０５０）。
【００４４】
書込み要求が、ＲＡＩＤ−６の行の一部だけのデータを含む場合には（判断ブロック１０２０）、この一次パリティ・ストレージデバイスは、この新データのコピーを、ＲＡＩＤ−６の行中の二次パリティ・ストレージデバイスであるストレージデバイスに転送する（ブロック１０６２）。この一次パリティ・ストレージデバイスはまた、この新データを、書込み要求から、ＲＡＩＤ−６の行中の目標データ・ストレージデバイスであるストレージデバイスに送って（ブロック１０６４）、確認応答を待つ。確認応答が、データを送ったデータ・ストレージデバイスのすべてから受け取られ（ブロック１０６６）、また、ＲＡＩＤ−６の行中の二次パリティ・ストレージデバイスから受け取られている（ブロック１０６８）ときには、この一次パリティ・ストレージデバイスは、書込み完了メッセージをクライアントに戻す（ブロック１０７０）。この書込み完了メッセージが送られた後で、この一次パリティ・ストレージデバイスは、ＲＡＩＤ−６の行中の、新データを受け取ったストレージデバイスのそれぞれから、データの旧部分のコピーを受け取る（ブロック１０７２）。この一次パリティ・ストレージデバイスは、データの旧部分を一次パリティ・ストレージデバイスが受け取られた上記データ・ストレージデバイスのそれぞれに確認応答を送り（ブロック１０７４）、上記の旧パリティ値、データの旧部分、及びデータの新部分から新パリティ値を計算して、その結果得られた値を関連一時ストレージデバイスに書き込む（ブロック１０７６）。次に、この一次パリティ・ストレージデバイスは、これらの新パリティ値を、関連一時ストレージデバイスから、この一次パリティ・ストレージデバイス内のパリティ・ストライプ・ユニットの位置に書き込んで、この書込み操作を完了する（ブロック１０５０）。
【００４５】
図１１は、クライアントと、ＲＡＩＤ−６レイアウトでの行との間のライト・トランザクション中に、ＲＡＩＤ−６レイアウトでの二次パリティ・ストレージデバイスで利用されるかもしれないプロセス１１００の一実施形態を示している。プロセス１１００は、この二次パリティ・ストレージデバイスが、ＲＡＩＤ−６の行中の一次パリティ・ストレージデバイスから、新データを含むメッセージを受け取るときに開始する（ブロック１１１０）。このメッセージが、ＲＡＩＤ−６レイアウトでの全行を満たすのに充分な新データを含む場合には（判断ブロック１１２０）、この二次パリティ・ストレージデバイスは、新データを関連一時ストレージデバイスに格納し（ブロック１１３２）、かつ、確認応答を、一次パリティ・ストレージデバイスに送る（ブロック１１３４）。次に、この二次パリティ・ストレージデバイスは、ＲＡＩＤ−６の行中の一次パリティ・ストレージデバイスから、書込み完了メッセージを受け取る（ブロック１１３６）。この二次パリティ・ストレージデバイスは、一次パリティ・ストレージデバイスに確認応答を送り（ブロック１１３８）、新二次パリティ値を計算して、それらの新二次パリティ値を、関連一時ストレージデバイスから、この二次パリティ・ストレージデバイス内のパリティ・ストライプ・ユニットの位置に書き込む（ブロック１１４０）。次に、この二次パリティ・ストレージデバイスは、それらの新パリティ値を、関連一時ストレージデバイスから、この二次パリティ・ストレージデバイス内のパリティ・ストライプ・ユニットの位置に書き込んで（ブロック１１７０）、この書込み操作を完了する（ブロック１１８０）。
【００４６】
一次パリティ・ストレージデバイスからのメッセージが、ＲＡＩＤ−６レイアウトでの全行を満たすのに充分なデータを含まないが、ただし、データの新部分を含む場合には（判断ブロック１１２０）、この二次パリティ・ストレージデバイスは、これらの新データ部分を関連一時ストレージデバイスに格納し（ブロック１１６０）、かつ、一次パリティ・ストレージデバイスに確認応答を送る（ブロック１１６２）。次に、二次パリティ・ストレージデバイスは、新データを目標とするデータの旧部分のコピーを、それらのそれぞれのデータ・ストレージデバイスから受け取る（ブロック１１６４）。二次パリティ・ストレージデバイスは、データの旧部分を二次パリティ・ストレージデバイスが受け取られた上記データ・ストレージデバイスのそれぞれに確認応答を送る（ブロック１１６６）。次に、二次パリティ・ストレージデバイスは、上記の旧二次パリティ値、データの旧部分、及びデータの新部分から新二次パリティ値を計算して、その結果得られた値を関連一時ストレージデバイスに書き込む（ブロック１１６８）。次に、二次パリティ・ストレージデバイスは、これらの新パリティ値を、関連一時ストレージデバイスから、二次パリティ・ストレージデバイス内のパリティ・ストライプ・ユニットの位置に書き込んで（ブロック１１７０）、この書込み操作を完了する（ブロック１０８０）。上述の流れ図は、説明のためだけのものであることに留意する必要がある。代替実施形態では、これらの流れ図に示される要素は、異なる順序で現われるか、あるいは時には同時に現われることもある。例えば、図５では、データ・ストレージデバイス（５０１〜５０４）のそれぞれがデータを関連一時ストレージデバイスから、データ・ストライプ・ユニットの位置に書き込む（ブロック５７０）時点ｔ６は、パリティ・ストレージデバイス５０５が、関連一時ストレージデバイスに入っている新データに基づいて、これらの新パリティ値を計算して、それを、パリティ・ストライプ・ユニットの位置に書き込む（ブロック５６０）時点ｔ５よりも前に現われれることがある。同様に、図６では、時点ｔ８は時点ｔ７よりも前に現われ、また図８では、時点ｔ１１は時点ｔ１０よりも前に現われるといった具合である。また、図９では、このパリティ・ストレージデバイスは、これらの新パリティ値を、関連一時ストレージデバイスから、パリティ・ストレージデバイス内のパリティ・ストライプ・ユニットの位置に書き込んで、この書込み操作を完了した（ブロック９４０）後で、書込み完了メッセージをクライアントに送る（ブロック９３８）。同様に、図１０では、こ時パリティ・ストレージデバイスは、これらの新パリティ値を、関連一時ストレージデバイスから、一次パリティ・ストレージデバイス内の一次パリティ・ストライプ・ユニットの位置に書き込んだ（ブロック１０５０）後で、書込み完了メッセージをクライアントに送る（ブロック１０４６）といった具合である。そのような数多くの代替例が可能であり、検討される。さらに、これらの流れ図の要素の一部は、様々な実施形態に含まれていないか、あるいは、他の要素と組み合わされることがある。このような代替例はすべて、検討される。
【００４７】
上述の実施形態はソフトウェアを含む場合があることに留意する必要がある。このような実施形態では、この方法及び／又は機構を実現するプログラム命令が伝えられるか、あるいはコンピュータ読取り可能媒体に格納されることがある。プログラム命令を格納するように構成される多数のタイプの媒体が利用でき、また、それらの媒体には、ハードディスク、フロッピー（登録商標）ディスク、ＣＤ−ＲＯＭ、ＤＶＤ、フラッシュメモリ、プログラマブルＲＯＭ（ＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、及び、他の様々な形式の揮発性ストレージデバイス又は不揮発性ストレージデバイスがある。
【００４８】
上記の実施形態がかなり詳しく説明されてきたが、上記の開示内容が充分に理解されさえすれば、多数の変形例及び変更例でも、当業者には明らかであろう。併記の特許請求の範囲は、このような変形例や変更例をすべて含むものと解されるつもりである。
【図面の簡単な説明】
【００４９】
【図１】コンピュータシステムの一実施形態を示す。
【図２】ＲＡＩＤ−５のデータ記憶サブシステムの一実施形態のブロック図である。
【図３】ＲＡＩＤ−６のデータ記憶サブシステムの一実施形態のブロック図である。
【図４】ＲＡＩＤ−１のデータ記憶サブシステムの一実施形態のブロック図である。
【図５】クライアントと、ＲＡＩＤ−５レイアウトでの行との間のライト・トランザクションの一実施形態を示すシーケンス図である。
【図６】クライアントと、ＲＡＩＤ−５レイアウトでの部分行との間のライト・トランザクションの一実施形態を示すシーケンス図である。
【図７】クライアントと、ＲＡＩＤ−６レイアウトでの行との間のライト・トランザクションの一実施形態を示すシーケンス図である。
【図８】クライアントと、ＲＡＩＤ−６レイアウトでの部分行との間のライト・トランザクションの一実施形態を示すシーケンス図である。
【図９】クライアントと、ＲＡＩＤ−５レイアウトでの行との間のライト・トランザクション中に、ＲＡＩＤ−５レイアウトでのパリティ・ストレージデバイスで利用されるプロセスの一実施形態を示す。
【図１０】クライアントと、ＲＡＩＤ−６レイアウトでの行との間のライト・トランザクション中に、ＲＡＩＤ−６レイアウトでの一次パリティ・ストレージデバイスで利用されるプロセスの一実施形態を示す。
【図１１】クライアントと、ＲＡＩＤ−６レイアウトでの行との間のライト・トランザクション中に、ＲＡＩＤ−６レイアウトでの二次パリティ・ストレージデバイスで利用されるプロセスの一実施形態を示す。
【符号の説明】
【００５０】
１００  コンピュータシステム
１１０、１２０、１３０  クライアント
１５０  記憶サブシステム
１５１、１５２、１５３、１５４、１５５  ストレージデバイス
【図１】
0005254725.tif 000002
【図２】
0005254725.tif 000003
【図３】
0005254725.tif 000004
【図４】
0005254725.tif 000005
【図５】
0005254725.tif 000006
【図６】
0005254725.tif 000007
【図７】
0005254725.tif 000008
【図８】
0005254725.tif 000009
【図９】
0005254725.tif 000010
【図１０】
0005254725.tif 000011
【図１１】
0005254725.tif 000012