(57)【特許請求の範囲】
【請求項１】
ストレージ・システム中のストレージ素子のアレイの故障耐性を増強するための、コンピュータ実装の方法であって、前記方法は、
複数のストレージ素子から成るストレージ素子のセットをｎ個（ｎ＞１）含むアレイであって、列の各々が１つの前記ストレージ素子のセットにそれぞれ対応するように複数の列と複数の行とで構成された論理的配列を有するアレイを構成するステップと、
前記アレイの前記ストレージ素子の少なくとも１つの故障、および前記アレイの前記ストレージ素子のセットの１つの故障に対し保護する、消失訂正符号を構成するステップであって、前記消失訂正符号は、少なくとも１つの前記列が行パリティ情報を格納し、少なくとも１つの前記行が列パリティ情報を格納するように構成されている、消失訂正符号を構成するステップと、
データを格納している前記ストレージ素子の故障に応答して、前記アレイから受け手ストレージ素子を選択するステップと、
故障のある前記ストレージ素子を包含する前記ストレージ素子のセットの故障耐性を保つパリティ交換オペレーションを実行することによって、前記受け手ストレージ素子上に前記データの少なくとも一部を再構築するステップと、
を含む、コンピュータ実装の方法。
【請求項２】
ストレージ素子の故障の数がｎに達したのに応じ、前記故障のあるストレージ素子の代替を開始するステップを含む、請求項１に記載のコンピュータ実装の方法。
【請求項３】
前記消失訂正符号は、前記ストレージ素子の少なくとも１つがグローバル・パリティ情報を格納するように構成され、前記消失訂正符号が前記ストレージ素子の故障に対し６のハミング距離を有する、請求項１に記載のコンピュータ実装の方法。
【請求項４】
前記消失訂正符号は、前記ストレージ素子の少なくとも２つがグローバル・パリティ情報を格納するように構成され、前記消失訂正符号が前記ストレージ素子の故障に対し８のハミング距離を有する、請求項１に記載のコンピュータ実装の方法。
【請求項５】
前記受け手ストレージ素子が、列パリティ情報を格納している前記少なくとも１つの行を構成する前記ストレージ素子から選択され、前記受け手ストレージ素子は、前記受け手ストレージ素子の上に前記データの前記少なくとも一部が再構築される以前は、列パリティ情報を前に格納していた、請求項１に記載のコンピュータ実装の方法。
【請求項６】
前記受け手ストレージ素子は、前記アレイの前記故障のあるストレージ素子と同じセット中にあり、前記受け手ストレージ素子と前記故障のあるストレージ素子とは故障境界を共有する、請求項５に記載のコンピュータ実装の方法。
【請求項７】
前記受け手ストレージ素子と前記故障のあるストレージ素子とが同じ単純ディスク束（ＪＢＯＤ）中に含まれている、請求項６に記載のコンピュータ実装の方法。
【請求項８】
ストレージ・システム中のストレージ素子のアレイの故障耐性を増大するためのコンピュータプログラムであって、プロセッサに、
複数のストレージ素子から成るストレージ素子のセットをｎ個（ｎ＞１）含むアレイであって、列の各々が１つの前記ストレージ素子のセットにそれぞれ対応するように複数の列と複数の行とで構成された論理的配列を有するアレイを構成するステップと、
前記アレイの前記ストレージ素子の少なくとも１つの故障、および前記アレイのストレージ素子の前記セットの１つの故障に対し保護する、消失訂正符号を構成するステップであって、前記消失訂正符号は、少なくとも１つの前記列が行パリティ情報を格納し、少なくとも１つの前記行が列パリティ情報を格納するように構成されている、消失訂正符号を構成するステップと、
データを格納している前記ストレージ素子の故障に応答して、前記アレイから受け手ストレージ素子を選択するステップと、
故障のある前記ストレージ素子を包含する前記ストレージ素子のセットの故障耐性を保つパリティ交換オペレーションを実行することによって、前記受け手ストレージ素子上に前記データの少なくとも一部を再構築するステップと、
を実行させるためのコンピュータプログラム。
【請求項９】
前記プロセッサに、ストレージ素子の故障の数がｎに達したのに応じ、前記故障のあるストレージ素子の代替を開始するステップをさらに実行させるための、請求項８に記載のコンピュータプログラム。
【請求項１０】
前記消失訂正符号は、前記ストレージ素子の少なくとも１つがグローバル・パリティ情報を格納するように構成され、前記消失訂正符号が前記ストレージ素子の故障に対し６のハミング距離を有する、請求項８に記載のコンピュータプログラム。
【請求項１１】
前記消失訂正符号は、前記ストレージ素子の少なくとも２つがグローバル・パリティ情報を格納するように構成され、前記消失訂正符号が前記ストレージ素子の故障に対し８のハミング距離を有する、請求項８に記載のコンピュータプログラム。
【請求項１２】
前記受け手ストレージ素子が、列パリティ情報を格納している前記少なくとも１つの行を構成する前記ストレージ素子から選択され、前記受け手ストレージ素子は、前記受け手ストレージ素子の上に前記データの前記少なくとも一部が再構築される以前は、列パリティ情報を前に格納していた、請求項８に記載のコンピュータプログラム。
【請求項１３】
前記受け手ストレージ素子は、前記アレイの前記故障のあるストレージ素子と同じセット中にあり、前記受け手ストレージ素子と前記故障のあるストレージ素子とは故障境界を共有する、請求項１２に記載のコンピュータプログラム。
【請求項１４】
前記受け手ストレージ素子と前記故障のあるストレージ素子とが、同じ単純ディスク束（ＪＢＯＤ）中に含まれている、請求項１３に記載のコンピュータプログラム。
【請求項１５】
請求項８〜１４の何れか１項に記載の前記コンピュータプログラムを記録した、コンピュータ可読ストレージ媒体。
【請求項１６】
請求項１〜７の何れか１項に記載の方法の各ステップをコンピュータハードウェアによる手段として構成した、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ・ストレージ・システムに関し、さらに具体的には、本発明は、データ・ストレージ・システムがストレージ素子故障の増加に耐えるように該システムを構成することに関する。
【背景技術】
【０００２】
クラウド・システムにおいて、取得コストおよび所有コストを最小にしながらデータ・アクセスを維持することは重要な要件である。データ・アクセスを確実にするために、クラウド・システムは、あらゆる列が共通の故障メカニズムを有するセットまたはＪＢＯＤ（Ｊｕｓｔ  ａ  Ｂｕｎｃｈ  ｏｆ  Ｄｉｓｋｓ（単純ディスク束））である、二次元アレイを用いたストレージを実装することが可能である。さらに、これらのセットは、ＲＡＩＤ−５またはＲＡＩＤ−６などの独立ディスクの冗長アレイ（ＲＡＩＤ：Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）アーキテクチャを使って保護することができる。このアレイでは個別のディスクが故障すると、その故障したディスクをスペアで置き換えることが可能である。しかしながら、利用可能なスペアの数が少なくなると保守サービスの呼び出しが必要となり得る。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
なお、自律的パリティ交換は、パリティ・ディスクをデータ・ディスクに転換することによって、ストレージ・システムにおける故障耐性を増強するという概念である。また一方、クラウド・クラスのシステムでは、ＪＢＯＤ全体など、ストレージ素子のセット全体の喪失（セット喪失）にいたる故障に対する保護も重要である。従来技術による一部のシステムは、個別のディスクまたはＪＢＯＤ全体の故障、さらにこれらの組み合わせであっても修復できるが、セット喪失と素子喪失との組み合せに対するこれらのシステムの修復能力は低い。具体的には、アレイの各セットが故障の境界を形成し得て、単一のイベントによって、素子のセットが利用不可になったりまたは失われたりする可能性がある。例えば、ネットワーク接続もしくはセットの電源が故障する、またはセットが不注意に外されたり、誤設定されたりすることなどがある。かかるイベントが生じた場合、特定の物理構成においては、相当な数の素子が不作動、または失われることになる。また一方、パリティ交換が用いられれば、時間経過の中でアレイの論理的構成は、そのアレイの初期の物理的構成からはずれてくることになる。したがって、アレイの物理的故障境界は、そのアレイの論理的故障境界とは異なることになろう。
【課題を解決するための手段】
【０００４】
１つの一般的実施形態において、ストレージ・システム中のストレージ素子のアレイの故障耐性を増強するためのコンピュータ実装の方法が提供される。本コンピュータ実装の方法は、ストレージ素子のｎ＞１の数のセット中に複数のストレージ素子を含むアレイを構成するステップを含む。また、本コンピュータ実装の方法は、アレイのストレージ素子の少なくとも１つの喪失およびアレイのストレージ素子のセットの１つの喪失に対し保護する消失訂正符号を構成するステップを含む。本消失訂正符号は、アレイのストレージ素子の少なくとも１つの列が行パリティ情報を格納し、アレイのストレージ素子の少なくとも１つの行が列パリティ情報を格納するように構成される。さらにまだ、本コンピュータ実装の方法は、ストレージ素子の１つがデータの格納に失敗するのに続いて、アレイから受け手ストレージ素子を選択するステップを含む。さらに、本コンピュータ実装の方法は、故障のあるストレージ素子を包含するストレージ素子のセットの故障耐性を保つパリティ交換オペレーションを実行することによって、受け手ストレージ素子上にデータの少なくとも一部を再構築するステップを含む。
【０００５】
別の一般的実施形態において、ストレージ・システム中のストレージ素子のアレイの故障耐性を増強するためのコンピュータプログラム製品が提供される。本コンピュータプログラム製品は、具現化されたプログラム命令を有するコンピュータ可読ストレージ媒体を含む。該プログラム命令は、プロセッサに、ストレージ素子のｎ＞１の数のセット中に複数のストレージ素子を含むアレイを構成させるように、プロセッサによって実行可能である。さらに、該プログラム命令は、プロセッサに、アレイのストレージ素子の少なくとも１つの喪失およびアレイのストレージ素子のセットの１つの喪失に対し保護する消失訂正符号を構成させるように、プロセッサによって実行可能である。本消失訂正符号は、アレイのストレージ素子の少なくとも１つの列が行パリティ情報を格納し、アレイのストレージ素子の少なくとも１つの行が列パリティ情報を格納するように構成される。また、該プログラム命令は、プロセッサに、ストレージ素子の１つがデータの格納に失敗するのに続いて、アレイから受け手ストレージ素子を選択するように、プロセッサによって実行可能である。さらに、該プログラム命令は、プロセッサに、故障のあるストレージ素子を包含するストレージ素子のセットの故障耐性を保つパリティ交換オペレーションを実行することによって受け手ストレージ素子上にデータの少なくとも一部を再構築するように、プロセッサによって実行可能である。
【０００６】
別の一般的実施形態において、プロセッサと、該プロセッサに組み込まれもしくは該プロセッサによって実行可能な、またはその両方のロジックとを含む、システムが提供される。このロジックは、ストレージ素子のｎ＞１の数のセット中に複数のストレージ素子を含むアレイを構成するように構成される。また、該ロジックは、アレイのストレージ素子の少なくとも１つの喪失およびアレイのストレージ素子のセットの１つの喪失に対し保護する消失訂正符号を構成するように構成される。本消失訂正符号は、アレイのストレージ素子の少なくとも１つの列が行パリティ情報を格納し、アレイのストレージ素子の少なくとも１つの行が列パリティ情報を格納するように構成される。さらに、該ロジックは、ストレージ素子の１つがデータの格納に失敗するのに続いて、アレイから受け手ストレージ素子を選択し、故障のあるストレージ素子を包含するストレージ素子のセットの故障耐性を保つパリティ交換オペレーションを実行することによって、受け手ストレージ素子上にデータの少なくとも一部を再構築するよう構成される。
【０００７】
本発明の他の諸態様および諸実施形態は、本発明の原理を例示するために示された図面と併せ、以下の詳細な説明を読み取ることによって明らかとなろう。
【０００８】
以降に、単なる例示として、添付の図面を参照しながら、本発明の諸実施形態を説明することとする。
【図面の簡単な説明】
【０００９】
【図１】一実施形態による、ストレージ・アレイの一般的物理レイアウトを示す。
【図２】一実施形態による、ストレージ・アレイの故障耐性を増強するための方法を示す。
【図３】一実施形態による、アレイの論理的配列を示す。
【図４】一実施形態による、図３のアレイのストレージ素子の故障および再構築を示す。
【図５】一実施形態による、図３のアレイのストレージ素子の故障および再構築を示す。
【図６】一実施形態による、図３のアレイのストレージ素子の故障および再構築を示す。
【図７】一実施形態による、図３のアレイのストレージ素子の故障および再構築を示す。
【図８】一実施形態による、図３のアレイのストレージ素子の故障および再構築を示す。
【図９】一実施形態による、図３のアレイのストレージ素子の故障および再構築を示す。
【図１０】一実施形態による、図３のアレイのストレージ素子の故障および再構築を示す。
【図１１】一実施形態による、図３のアレイのストレージ素子の故障および再構築を示す。
【図１２】一実施形態による、使用するクラウド・システムに対するメンテナンスの予測時間のグラフである。
【発明を実施するための形態】
【００１０】
以下の説明は、本発明の一般的原理を例示する目的で行われており、本明細書で請求される発明的概念を限定することを意味するものではない。さらに、本明細書で説明される特定の特徴は、様々な可能な組み合せおよび順列のそれぞれにおいて他の記述の特徴と組み合わせて用いることが可能である。
【００１１】
本明細書中で別段に特に定義されている場合を除き、全ての用語には、本明細書により示唆される意味、および当業者に理解されている意味もしくは諸辞書、約定書などに定義されている意味またはその両方の意味を含めて、それらの可能最広義の解釈が与えられる。
【００１２】
また、本明細書および添付の特許請求の範囲での使用において、単数形「或る（ａ、ａｎ）」および「該（ｔｈｅ）」は、別途に定められている場合を除き、複数に対象体をも含むことに留意しなければならない。さらに、当然のことながら、本明細書での使用において、用語「含む（ｃｏｍｐｒｉｓｅ）」もしくは「含んでいる（ｃｏｍｐｒｉｓｉｎｇ）」またはその両方は、記述された特徴、整数、ステップ、動作、要素、もしくはコンポーネント、またはこれらの組み合せの存在を特定するが、他の特徴、整数、ステップ、動作、要素、コンポーネント、もしくは前述のグループ、またはこれらの組み合せの存在または追加を除外するものではない。
【００１３】
以降の説明では、クラウド・システムにおける自律パリティ交換のためのシステム、方法、およびコンピュータプログラム製品のいくつかの好適な実施形態を開示する。
【００１４】
以下に説明する諸実施形態は、ストレージ素子の多くの異なる物理構成を備える諸システムに適用が可能な、アレイ構成および故障耐性の方法を提供する。これら諸実施形態のいずれにおいても、クラウド・システムなどのストレージ・システムは、高データ効率による高可用性、ならびに低廉な取得コストおよび長期間隔のメンテナンス能力を備えるように構成することが可能である。
【００１５】
１つの一般的実施形態において、ストレージ・システム中のストレージ素子のアレイの故障耐性を増強するためのコンピュータ実装の方法が提供される。本コンピュータ実装の方法は、ストレージ素子のｎ＞１の数のセット中に複数のストレージ素子を含むアレイを構成するステップを含む。また、本コンピュータ実装の方法は、アレイのストレージ素子の少なくとも１つの喪失およびアレイのストレージ素子のセットの１つの喪失に対し保護する消失訂正符号を構成するステップも含む。本消失訂正符号は、アレイのストレージ素子の少なくとも１つの列が行パリティ情報を格納し、アレイのストレージ素子の少なくとも１つの行が列パリティ情報を格納するように構成される。さらにまだ、本コンピュータ実装の方法は、ストレージ素子の１つがデータの格納に失敗するのに続いて、アレイから受け手ストレージ素子を選択するステップを含む。さらに、本コンピュータ実装の方法は、故障のあるストレージ素子を包含するストレージ素子のセットの故障耐性を保つパリティ交換オペレーションを実行することによって、受け手ストレージ素子上にデータの少なくとも一部を再構築するステップを含む。
【００１６】
別の一般的実施形態において、ストレージ・システム中のストレージ素子のアレイの故障耐性を増強するためのコンピュータプログラム製品が提供される。本コンピュータプログラム製品は、具現化されたプログラム命令を有するコンピュータ可読ストレージ媒体を含む。該プログラム命令は、プロセッサに、ストレージ素子のｎ＞１の数のセット中に複数のストレージ素子を含むアレイを構成させるように、プロセッサによって実行可能である。さらに、該プログラム命令は、プロセッサに、アレイのストレージ素子の少なくとも１つの喪失およびアレイのストレージ素子のセットの１つの喪失に対し保護する消失訂正符号を構成させるように、プロセッサによって実行可能である。本消失訂正符号は、アレイのストレージ素子の少なくとも１つの列が行パリティ情報を格納し、アレイのストレージ素子の少なくとも１つの行が列パリティ情報を格納するように構成される。また、該プログラム命令は、プロセッサに、ストレージ素子の１つがデータの格納に失敗するのに続いて、アレイから受け手ストレージ素子を選択するように、プロセッサによって実行可能である。さらに、該プログラム命令は、プロセッサに、故障のあるストレージ素子を包含するストレージ素子のセットの故障耐性を保つパリティ交換オペレーションを実行することによって受け手ストレージ素子上にデータの少なくとも一部を再構築するように、プロセッサによって実行可能である。
【００１７】
別の一般的実施形態において、プロセッサと、該プロセッサに組み込まれもしくは該プロセッサによって実行可能な、またはその両方のロジックを含む、システムが提供される。このロジックは、ストレージ素子のｎ＞１の数のセット中に複数のストレージ素子を含むアレイを構成するように構成される。また、該ロジックは、アレイのストレージ素子の少なくとも１つの喪失およびアレイのストレージ素子のセットの１つの喪失に対し保護する消失訂正符号を構成するように構成される。本消失訂正符号は、アレイのストレージ素子の少なくとも１つの列が行パリティ情報を格納し、アレイのストレージ素子の少なくとも１つの行が列パリティ情報を格納するように構成される。さらに、該ロジックは、ストレージ素子の１つがデータの格納に失敗するのに続いて、アレイから受け手ストレージ素子を選択し、故障のあるストレージ素子を包含するストレージ素子のセットの故障耐性を保つパリティ交換オペレーションを実行することによって、受け手ストレージ素子上にデータの少なくとも一部を再構築するよう構成される。
【００１８】
図１は、ストレージ・アレイ１００の一般的物理レイアウトを示す。様々な実施形態において、ストレージ・アレイ１００は、インターネットなどのネットワーク上でクラウド・クラスのストレージを提供することができる。図１に示されるように、ストレージ・アレイ１００は、複数のＪＢＯＤ（単純ディスク束）１０４を含み、それらの各々がストレージのセットである。具体的に、図１は、４つのセット１０４（１０４ａ、１０４ｂ、１０４ｃ、および１０４ｄ）を含むストレージ・アレイ１００を示す。さらに、各セット１０４は、２つ以上のストレージ素子１０６（例えば、シリアルＡＴ接続（ＳＡＴＡ：ｓｅｒｉａｌ  ＡＴ  ａｔｔａｃｈｍｅｎｔ）ドライブなど）を１つ以上のイーサネット（Ｒ）ポートに接続することが可能である。さらに、各イーサネット（Ｒ）ポートをイーサネット（Ｒ）スイッチに接続することができ、各イーサネット（Ｒ）スイッチを１つ以上のコントローラ１０２に接続することができる。コントローラ１０２は、ソフトウェアもしくはハードウェアまたはその両方として具現化してよい。オプションとして、セット１０４は同一場所に配置されてよい。但し、一部の実施形態では、セット１０４は同一場所には配置されない。例えば、セット１０４ａ、１０４ｂ、１０４ｃ、および１０４ｄの各々は、別々のデータ・センタに配置されてもよい。
【００１９】
簡明化のため、図１のストレージ・アレイ１００は、４つのセット１０４を含んで示されている。さらに、これら４つのセット１０４は、２つのスイッチに接続されて示され、次いでそのそれぞれはコントローラ１０２ａおよびコントローラ１０２ｂに接続されている。但し、本明細書で開示される諸実施形態は、任意の適切な数のセット１０４を含むストレージ・アレイに実装可能なように考案されている。かかるストレージ・アレイは、任意の数のスイッチおよびコントローラに接続されてよい。
【００２０】
さらに、各セット１０４は、複数のストレージ素子１０６（Ｄ０、Ｄ１・・・Ｄｎ）を含んで示されている。具体的には、セット１０４ａはストレージ素子１０６ａを含んで示され、セット１０４ｂはストレージ素子１０６ｂを含んで示され、セット１０４ｃはストレージ素子１０６ｃを含んで示され、セット１０４ｄはストレージ素子１０６ｄを含んで示されている。各ストレージ素子は、ハード・ディスク・ドライブ（ＨＤＤ：ｈａｒｄ  ｄｉｓｋ  ｄｒｉｖｅ）、ソリッド・ステート・ドライブ（ＳＳＤ：ｓｏｌｉｄ  ｓｔａｔｅ  ｄｒｉｖｅ）、揮発性ランダム・アクセス・メモリ（ＲＡＭ：Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）デバイス、不揮発性ＲＡＭデバイス、光ストレージ・デバイス（例えば、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭなど）、またはテープ・ストレージ・デバイスの少なくとも一部を含んでよい。セット１０４の各々中には、数十、数百、または数千のストレージ素子があってもよい。
【００２１】
データは、ディスクもしくはディスクの部分など、ストレージ素子１０６を喪失することによって、またはセット１０４に１つの全体を喪失することによって、失われ得る。セット１０４の各々は、単一のイベントによって、所与のセット１０４のストレージ素子１０６が利用できなくなるかまたは失われ得るように、故障境界を形成することができる。ほとんどの環境では、アクセスの喪失に起因してセット１０４全体が失われる。例えば、ネットワーク接続または電源の障害発生時、またはセット１０４が不注意に外されたり誤構成されたりした場合など、電源またはネットワーク接続性の中断に起因して、セット１０４が失われ得る。アクセスの喪失によりセット１０４が失われたときは、セット１０４のストレージ素子１０６上のデータは、通常、影響を受けない。修理が完了したならば、ストレージ素子１０６上のデータは再びアクセス可能になり得るが、おそらくわずかに時期遅れとなろう。
【００２２】
しかしながら、セット１０４の故障が、そのセット１０４内のストレージ素子１０６の１つ以上の喪失をもたらすことがあり得る。例えば、電力サージの結果として、セット１０４への損傷、またはＪＢＯＤ１０４の不適切な除去などである。本明細書で開示される諸実施形態は、前述の状態の下で保護を提供することができる。
【００２３】
各コントローラ１０２（例えば、コントローラ１０２ａもしくはコントローラ１０２ｂまたはその両方）は、マイクロプロセッサなど中央処理ユニットの何らかの組み合わせ、およびいくつかの相互接続された他のユニットを含むことができる。例えば、図１に示された各コントローラ１０２は、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ：Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、周辺デバイスを接続するためのＩ／Ｏアダプタ、ユーザ・インターフェース・アダプタ、通信アダプタなどを含んでよい。さらにまだ、このコントローラの或る実施形態は、オブジェクト指向プログラミング技術と共に、ＸＭＬ、Ｃ、もしくはＣ＋＋言語またはこれらの組み合せ、あるいは他のプログラミング言語を用いて記述することが可能である。
【００２４】
さらに、以下でさらに詳しく説明するように、物理的に第一セットに配置されているストレージ素子の１つ以上を、他のストレージ素子を物理的に収容している第二の異なるセットに論理的に割り当てることが可能である。したがって、呈出側セットから受取り側セットへのストレージ素子の呈出には、コントローラ１０２が、第一セット中のストレージ素子を第二セットに、またはその逆向きに、論理的に割り当てができることが必要となり得る。呈出側セットと受取り側セットとが別々のコントローラ１０２に管理されている場合、それらコントローラ１０２は、ストレージ素子の論理的割り当てに関する情報を交換することが可能である。
【００２５】
ここで図２を参照すると、一実施形態による、方法２００のフローチャートが示されている。方法２００は、様々な実施形態において、とりわけ図１に示された環境の何れかにおいて、本発明に依って実行することができる。当然ながら、当業者なら本説明を読んで理解するであろうように、方法２００には、図２に具体的に記載されたものより多いまたは少ないオペレーションを含めることが可能である。
【００２６】
方法２００のステップの各々は、動作環境の任意の適切なコンポーネントによって実行されてよい。例えば、様々な実施形態において、方法２００は、コントローラ、または内部に１つ以上のプロセッサを有する何らかの他のデバイスによって、部分的にまたは全体を実行することができる。任意のデバイス中の、例えば、ハードウェアもしくはソフトウェアまたはその両方に実装され、望ましくは少なくとも１つのハードウェア・コンポーネントを有する、処理回路（群）、チップ（群）もしくはモジュール（群）またはこれらの組み合せなどのプロセッサを用いて方法２００の１つ以上のステップを実行することが可能である。例示的なプロセッサには、以下に限らないが、中央処理ユニット（ＣＰＵ：ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）、特定用途集積回路（ＡＳＩＣ：ａｐｐｌｉｃａｔｉｏｎ  ｓｐｅｃｉｆｉｃ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ）、フィールド・プログラム可能ゲート・アレイ（ＦＰＧＡ：ｆｉｅｌｄ  ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙ）など、これらの組み合せ、または当該技術で知られる任意の他の適切なコンピューティング・デバイスが含まれる。
【００２７】
図２に示されるように、方法２００は、オペレーション２０２で開始され、アレイは、ストレージ素子のｎ＞１の数のセットの複数のストレージ素子を含むように構成される。例えば、このアレイは、ストレージ素子の、３、５、８、１２個などのセットを含むように構成されてよい。さらに、ストレージ素子の各セットは、故障境界を共有することが可能である。一実施形態において、ストレージ素子の各セットは、ＪＢＯＤを含んでよい。したがって、このアレイは、複数のＪＢＯＤを含むように構成することができ、アレイの各ＪＢＯＤは２つ以上のストレージ素子を含む。
【００２８】
さらに、オペレーション２０４で、アレイに対する消失訂正符号が構成される。後記でさらに詳しく述べるように、本消失訂正符号は、アレイのストレージ素子のセットの１つの喪失に加え、アレイのストレージ素子の少なくとも１つの喪失に対して保護する。消失訂正符号は、アレイのストレージ素子の少なくとも１つの列が行パリティ情報を格納するように構成される。さらに、該消失訂正符号は、アレイのストレージ素子の少なくとも１つの行が列パリティ情報を格納するように構成される。いくつかの実施形態において、本消失訂正符号は、ストレージ素子の少なくとも１つがグローバルなパリティ情報を格納するように構成することができる。
【００２９】
例えば、図３は、アレイ３００の論理的配列を示しており、アレイ３００は、複数のストレージ素子を含んで表されている。具体的には、このアレイは、ストレージ素子の８つの列３２２〜３３６（すなわち、列３２２、３２４、３２６、３２８、３３０、３３２、３３４、および３３６）およびストレージ素子の１０の行３０２〜３２０（すなわち、行３０２、３０４、３０６、３０８、３１０、３１２、３１４、３１６、３１８、および３２０）を含んで表されている。前に記載したオプションのように、ストレージ素子の各々は、ディスクの少なくとも一部分を含むことが可能であるが、データの保管および収容能力のある任意のユニットであってよい。図３に示されるように、ストレージ素子の各々中に表示されている値は、（セット・インデックス；セット中のディスク番号）として、ストレージ素子の論理的場所を表すことができる。さらに、図３の影のないセル（ストレージ素子）の各々は、ユーザ・データなどのデータを格納しているストレージ素子を表し、影があるセル（ストレージ素子）の各々は、後記でさらに詳しく説明するように、パリティ情報を格納しているストレージ素子を表している。
【００３０】
なお、図３によって示されているアレイ３００の配列の初期状態においては、アレイ３００の論理的マッピングは、アレイ３００の物理的レイアウトと合致する。言い換えれば、全てのストレージ素子０；ｘ（セット０）が列３２２中に所在する。加えて、図３に示されるように、アレイ３００は、アレイ３００がスペアのストレージ素子を含まないような仕方で構成されている。
【００３１】
さらに、消去訂正符号は、アレイ３００に対し、ストレージ素子の少なくとも１つの列が行パリティ情報を格納するように構成される。例えば、列３３６のストレージ素子は、各ストレージ素子がそのそれぞれの行に対する行パリティを備えるように構成されている。具体的には、行０、列７のストレージ素子は、行３０２に対する行パリティを備え、行１、列７のストレージ素子は、行３０４に対する行パリティを備え、行２、列７のストレージ素子は、行３０６に対する行パリティを備えている、等々。
【００３２】
さらに、本消去訂正符号は、アレイ３００に対し、ストレージ素子の少なくとも１つの行が列パリティ情報を格納するように構成される。例えば、行３２０のストレージ素子は、各ストレージ素子がそのそれぞれの列に対する列パリティを備えるように構成されている。具体的には、行９、列０のストレージ素子は、列３２２に対する列パリティを備え、行９、列１のストレージ素子は、列３２４に対する列パリティを備え、行９、列２のストレージ素子は、列３２６に対する列パリティを備えている、等々。加えて、行９、列７のストレージ素子は、列７（列３３６）中の行パリティ・ストレージ素子の列に対する列パリティ情報を格納している。
【００３３】
さらに、本消去訂正符号は、アレイ３００に対し、少なくとも１つのストレージ素子がグローバル・パリティ情報を格納するように構成される。例えば、アレイ３００は、それぞれがアレイ３００に対するグローバル・パリティ情報を格納する、行８、列５のストレージ素子３４０、および行８、列６のストレージ素子３４２を含んで示されている。図３に示されるように、ストレージ素子３４０および３４２の両方におけるグローバル・パリティ情報の保存によって、アレイ３００に対して構成された消失訂正符号は８のハミング距離を有し、しかして任意の７つの消失を是正することができる。さらに、これは、列に対し２のハミング距離を有し、しかして１つの列の喪失を是正することが可能である。単一のストレージ素子だけがグローバル・パリティ情報を格納するように構成された別の実施形態では、６のハミング距離を成就することが可能で、しかして任意の５つの消失を是正することができる。
【００３４】
一実施形態において、ストレージ素子の各セットは、単一のＪＢＯＤまたは他の物理ストレージ・ユニット（例えばキャビネットなど）に収容されてよい。言い換えれば、セット・インデックス０の素子群は、ストレージ素子の第一セットまたは第一ＪＢＯＤを含むことができ、セット・インデックス１の素子群は、ストレージ素子の第二セットまたは第二ＪＢＯＤを含むことができ、セット・インデックス２の素子群は、ストレージ素子の第三セットまたは第三ＪＢＯＤを含むことができる、等々。このようにして、例えば、アレイ３００は、各々が１０のストレージ素子を含む（行３０２〜３２０の各々に１つのストレージ素子、）８つのＪＢＯＤを含むクラウド・システムを構成することができる。上記に応じ、任意の所与のセットのストレージ素子は、共通の故障境界を共有することが可能である。かかるクラウド・システムにおいて、通常、ストレージ素子は、これらストレージ素子を収容しているセットの高い故障率から支障を受けることが予期され得る。
【００３５】
アレイ３００に対する消失訂正符号を、ストレージ素子の少なくとも１つの列が行パリティ情報を格納し、ストレージ素子の少なくとも１つの行が列パリティ情報を格納し、少なくとも１つのストレージ素子がグローバル・パリティ情報を格納するように構成することによって、アレイ３００は、相当な数のストレージ素子の故障に耐えることが可能で、これにより、アレイ３００のディスク・メンテナンスの時間間隔が延長される。例えば、ストレージ素子の適度な故障を許容することによって、ディスク・メンテナンスの時間間隔を延長することが可能になる。オプションとして、使用中の所定数のストレージ素子が故障した後でだけ、メンテナンス・イベントをトリガするようにできる。
【００３６】
図２を再度参照すると、オペレーション２０６で、ストレージ素子の１つがデータの格納に失敗するのに続いて、アレイから受け手ストレージ素子が選択される。さらに、オペレーション２０８で、故障のあるストレージ素子を包含するストレージ素子のセットの故障耐性を保つパリティ交換オペレーションを実行することによって、データの少なくとも一部が受け手ストレージ素子の上に再構築される。データは、例えば、アレイのストレージ素子の１つ以上の中に格納されている行パリティ情報、列パリティ情報、またはグローバル・パリティ情報の利用など、任意の実行可能な方法で、受け手ストレージ素子上に再構築することが可能である。
【００３７】
一実施形態において、受け手ストレージ素子は、故障のあるストレージ素子と同じセットから選択される。さらにまだ、受け手ストレージ素子は、それが選択されたとき、列パリティ情報を格納している可能性がある。言い換えれば、受け手ストレージ素子の上にデータの少なくとも一部を再構築する前は、その受け手ストレージ素子は、列パリティ情報を格納しているストレージ素子の少なくとも１つの行のストレージ素子の１つである。
【００３８】
例えば、図４を参照すると、アレイ４００は、物理ストレージ素子２；１が故障した後の、図３のアレイ３００の配列を表している。同様に、図５のアレイ４５０は、列３２６内で、故障のあるストレージ素子上に前に格納されていたデータを受け手ストレージ素子に再構築することによって、ストレージ素子２；１の故障が軽減された後の、アレイ４００の配列を表している。言い換えれば、単一の物理ストレージ・セットが、受け手ストレージ素子と故障のあるストレージ素子を収容することが可能である。一実施形態において、故障のあるストレージ素子のデータは、故障のあるストレージ素子のセット中の他のストレージ素子から専ら読み取ることによって、受け手ストレージ素子の上に再構築することができる。しかして、故障のあるストレージ素子のデータは、水平方向パリティ情報またはグローバル・パリティ情報を利用せずに再構築することが可能である。
【００３９】
具体的には、アレイ４５０によって示されるように、ストレージ素子２；１上に前に格納されていたデータは、前には列３２６に対する列パリティ情報を格納していたストレージ素子２；９に再構築されている。したがって、図５に示されるように、物理ストレージ素子２；１と２；９とは、故障のあるストレージ素子２；１上に以前に格納されていたデータを物理ストレージ素子２；９に再構築することによって、パリティ交換の遂行ができる。図６〜１１に示されるように、このパリティ交換オペレーションは、ストレージ素子の第三セット（すなわち、セット・インデックス２のストレージ素子のセット、ストレージ素子２；ｘ）の故障耐性を保つ。言い換えれば、図４および５の状況で示されたパリティ交換オペレーションを実施することによって、故障のあるストレージ素子を含むセットは、セット内のさらなるストレージ素子の故障にどのデータを失うこともなく堪えることができる。
【００４０】
故障のあるストレージ素子と同じセットから受け手ストレージ素子２；９を選択して、ネットワークへの影響を最小にすることが可能である。ストレージ素子２；１と２；９が同じセットまたはＪＢＯＤ内に所在するので、物理ストレージ素子２；９上に論理ストレージ素子２；１を再構築することにより、ＪＢＯＤの外部のネットワークまたはデータ・チャネルでのデータの送信を不必要にできる。行１、列２の論理ストレージ素子は、列パリティを用いて再構築すればよい。また一方、オプションとして、行１、列２の論理ストレージ素子の物理ストレージ素子２；９上への再構築は、消失訂正符号中のいくつかのパスを介して実行が可能である。
【００４１】
なお、アレイ３００に対して構成された消失訂正符号がいかなる７つのストレージ素子故障にも耐えられる一方、アレイ３００が故障のあるストレージ素子を伴って機能し続ければ、読み取りパフォーマンスが支障を被り得る。したがって、パリティ交換を用いて、前にストレージ素子２；１に格納されていたデータを、列パリティ情報を格納しているストレージ素子の１つ（例えば、前述した物理ストレージ素子２；９など）の上に再構築することにより、システム・パフォーマンスを回復すればよい。これが行われれば、読み取りパフォーマンスを回復することができる。さらにまだ、パリティ情報を維持するために必要なシステム・リソースの低減に起因して書き込みパフォーマンスがやや向上する可能性もある。
【００４２】
オプションとして、図３の行３２０のストレージ素子（行９列０、行９列１、行９列２、・・・行９列７）など、列パリティ情報を格納しているストレージ素子が故障した場合には、再構築オペレーションは不必要にしてもよい。さらにまだ、図３の列３３６のストレージ素子（行０列７、行１列７、行２列７、・・・行８列７）など、行パリティ情報を格納しているストレージ素子が故障した場合は、故障のあるストレージ素子に前に格納されていた行パリティ情報は再構築が可能である。言い換えれば、行パリティ情報を格納しているストレージ素子は、データを格納しているストレージ素子と同様に、パリティ交換の対象にできる。具体的には、故障した行パリティのストレージ素子のデータ（行パリティ情報）は、前に列パリティ情報を格納するために使われていたストレージ素子上に再構築すればよい。
【００４３】
さらに、故障のあるストレージ素子がグローバル・パリティ情報を格納していた場合は、再構築オペレーションを実行するかどうかに関し選択をすることが可能である。オプションとして、前にグローバル・パリティ情報を格納していたストレージ素子の故障の後で、列パリティが無事に残った場合、その故障はそのままにしておいてもよい。このように、故障のあるストレージ素子は、あたかもそれがパリティ交換の呈出側であったかのように動作することができる。セット喪失と素子喪失との組み合わせに対する耐性の維持では、列中の呈出側パリティの数はその列の中の列パリティの数に限定される。
【００４４】
別のオプションとして、グローバル・パリティ情報を格納している各ストレージ素子を、ユーザ・データを格納しているストレージ素子として取り扱い、グローバル・パリティ情報を格納しているストレージ素子が故障した場合、列パリティ・ストレージ素子を使って交換することが可能である。パフォーマンスの観点からは、当該列中の故障が１つだけ場合、ローカルの列パリティを使ってグローバル・パリティ情報を構築できるので、これは、故障をそのままにしておくのが好ましいことがあり、これにより処理情報量が節減される。さらに、前にグローバル・パリティ情報を格納していたストレージ素子の故障の後で、そのグローバル・パリティ情報が再構築されず、アレイ内でさらなるストレージ素子の故障が生じた場合、その後のグローバル・パリティ情報の一切の再構築は、より計算量の大きい修復となり得る。
【００４５】
１つ以上のさらなるストレージ素子が故障に陥ることがある。例えば、図６を参照すると、アレイ５００は、さらなるストレージ素子の故障後の、アレイ４５０の論理的配列を表している。前述したように、物理ストレージ素子２；９は、故障した物理ストレージ素子２；１に前に格納されていたデータを使い、物理ストレージ素子２：９が、行１、列２のストレージ素子に論理的にマップされることによって、前に再構築されている。図６に示されるように、ストレージ素子２；０が故障してしまった。
【００４６】
行０、列２のこのストレージ素子は、アレイから受け手ストレージ素子を選択し、ストレージ素子２；０上に前に格納されていたデータの少なくとも一部を受け手ストレージ素子上に再構築することによって、再建が可能である。一実施形態において、再構築オペレーションに先立って、受け手ストレージ素子は、列パリティ情報を格納しているストレージ素子の別の１つとすることができる。オプションとして、受け手ストレージ素子は、当該アレイの、故障したストレージ素子とは異なるセットまたはＪＢＯＤから選択することも可能である。
【００４７】
アレイがストレージ素子のｎ＞１の数のセットを含むよう構成されている一実施形態では、上限ｎの故障のあるストレージ素子まで前述の仕方で再構築が可能である。例えば、アレイ３００がストレージ素子の８つのセット（すなわち８のＪＢＯＤ）を含むように構成されている、図３〜７の状況では、上限８つまでの故障のあるストレージ素子を前述の仕方で再構築できる。具体的には、上限８つまでの故障のあるストレージ素子の各ストレージ素子を、アレイ３００の行３２０中の、元来は列パリティ情報を格納している８つのストレージ素子の１つの上に再構築すればよい。様々な実施形態において、≦ｎの数のストレージ素子の故障時にまたは故障に応答してメンテナンス・イベントをトリガすることができる。例えば、図３〜７の状況において、ストレージ素子の８つの故障時に、ストレージ素子の６つの故障時に、ストレージ素子の４つの故障時、等々に、メンテナンス・イベントをトリガすればよい。
【００４８】
故障のあるストレージ素子２；０および２；１が同じセット中に所在するという事実は、単一のセット内で複数のストレージ素子が故障するという、ワースト・ケースのストレージ素子喪失シナリオを表し得る。セット２内には、列パリティ情報を格納しているストレージ素子がもうないので、パリティ情報を格納するストレージ素子は、アレイ５００のセットの他の１つから選択すればよい。言い換えれば、セット２中では、セットローカルのパリティはもはや利用可能ではなく、したがって、ストレージ素子２；０のデータを再構築するための受け手ストレージ素子は、アレイ５００の他のセットの１つの中の、パリティ情報を格納しているストレージ素子の１つから選択すればよい。
【００４９】
例えば、図７を参照すると、アレイ５５０は、ストレージ素子２；０上に前に格納されていたデータを別のセットの受け手ストレージ素子に再構築することによりストレージ素子２；０の故障が軽減された後の、アレイ５００の配列を表している。しかして、セット２の物理ストレージ素子２；０上に前に格納されていたデータは、異なるセット（セット０）の物理ストレージ素子０；９に再構築されている。行０、列２の論理ストレージ素子のデータは、列２に対する列パリティ情報は前に上書きされてしまったので、行０に対する行パリティ情報を用いて再構築すればよい。
【００５０】
このように、物理ストレージ素子０；９は、行０、列２のストレージ素子に論理的にマップすることが可能である。これにより、パリティ交換が完了した後は、第一セットからのデータは今や物理的に異なるセットに所在する。具体的には、論理列３２６からのデータは、今やセット０中のストレージ素子上に所在する。列３２２と３２６とのストレージ素子の間でパリティ交換オペレーションを行った結果として、アレイ５５０の論理マップは、もはやセットまたはＪＢＯＤの故障境界に合致しない。
【００５１】
セットまたはＪＢＯＤの故障境界を超えての受け手ストレージ素子の選択を可能にすることによって、アレイ５５０内のさらなるストレージ素子の故障に応じ、さらなるパリティ交換オペレーションを行うことが可能になる。例えば、ここで図８を参照すると、アレイ６００は、６つのさらなるストレージ素子の故障とそれに続くパリティ交換の後の、アレイ５５０の論理的配列を表している。
【００５２】
具体的には、図８に示されるように、ストレージ素子２；７を除き、セット２内の全てのストレージ素子が故障している。さらに、セット２のストレージ素子の各々に対するパリティ交換が実行されており、セット２の各ストレージ素子が行３２０の受け手ストレージ素子上に再構築されている。言い換えれば、以前に消失訂正符号によって列パリティ情報を格納するように構成された、行３２０のストレージ素子の各々が今やデータを格納している。具体的には、図８内において、物理ストレージ素子０：９は行０列２の論理ストレージ素子にマップされ、物理ストレージ素子１；９は行２列２の論理ストレージ素子にマップされ、行９列３の物理ストレージ素子は行５列２の論理ストレージ素子にマップされ、物理ストレージ素子４；９は行４列２の論理ストレージ素子にマップされている、等々。
【００５３】
結果として、元のアレイ３００の全データは、直接アクセス可能のまま残るが、今や全ての列パリティ情報は失われている。さらに、当初セット２に格納されていたデータは、今は元のアレイ３００のセット０；ｘ、・・・７；ｘ（すなわち、８つの異なるセット）の全てに所在している。結果として、アレイ６００は、さらなる一セットの喪失に加え、さらなる１つだけのストレージ素子の故障に耐えることが可能であり得る。オプションとして、クラウド・システムのアレイがさらなるただ１つのストレージ素子およびセットの故障に耐えられるだけになったときに、システムはメンテナンスを要求することができる。メンテナンス・イベントは、例えば、故障したストレージ素子を代替するための、スペア用または代替用ストレージ素子の取り付けを含んでよい。
【００５４】
メンテナンス過程での故障のリスクを最小にするために、クラウド・システムは、メンテナンス期間中での１つのさらなるストレージ素子の故障に耐えるように構成するとよい。したがって、ストレージ素子に対し、２のハミング距離で一切のメンテナンスを行うようにするとよい。
【００５５】
上記のように、図８のアレイ６００は、１つのさらなるストレージ素子およびセットの故障に耐えることができる。このシナリオは、図９のアレイ６５０によって示されている。具体的には、図９に示されるように、セット全体（すなわちセット０）がアレイ６５０から外されている。結果的に、列３２２を構成するストレージ素子の全てが故障しているかまたは失われている。その結果、物理ストレージ素子０；９のデータが失われている。この物理ストレージ素子は、行０、列２の論理ストレージ素子からのデータを包含する。なお、パリティ交換の後では、論理ストレージ素子のマップは、もはやセットの物理的故障境界に合致しない。しかして、セットの喪失は、論理的マップ中の複数の列に影響を与え得る。
【００５６】
また、物理ストレージ素子１；１も故障するかまたは失われている。アレイ６５０のこれらストレージ素子の故障およびセットの喪失によって、故障境界の配列の喪失の結果が明らかになっている。具体的には、列３２６は、２つのストレージ素子を失い、その１つは列３２２に論理的にマップされた。
【００５７】
結果的に、アレイ６５０の１９個のストレージ素子が現在失われるかまたは利用不可能である。但し、前のパリティ交換オペレーションがこれら故障を特定のパターンに位置付けているので、アレイ６５０に対し前に構成された消失訂正符号がこれらの喪失を修復できる可能性がある。
【００５８】
一実施形態において、行パリティ情報を利用して、アレイ６５０のストレージ素子の故障を是正することが可能である。具体的には、列３３６のストレージ素子の行パリティ情報を利用してアレイ６５０のストレージ素子の故障を是正すればよい。
【００５９】
例えば、ここで図１０を参照すると、アレイ７００は、それぞれ行２、３、４、５、６、７、および８からの物理ストレージ素子中の対応する行パリティ情報および行パリティ算式を利用して、列３２２の物理ストレージ素子０；２、０；３、０；４、０；５、０；６、０；７、および０；８を再構築した後の、アレイ６５０の論理的配列を表している。この行パリティ算式は、単一の消失を有する任意の所与の行を修復するために用いることができる。結果として、１２の故障が残っている。
【００６０】
アレイ７００のストレージ素子の故障を是正するために、列パリティ情報を利用することができる。例えば、例７５０は、行３２０の、行９列３、行９列４、行９列５、行９列６、および行９列７の論理ストレージ素子を、列パリティ情報および列パリティ算式を用いて再構築した後の、アレイ７００の論理的配列を表している。この列パリティ算式は、単一の消失がある任意の所与の列を修復するために用いることが可能である。結果として、７つの故障が残っている。
【００６１】
いくつかのシナリオにおいて、行パリティ情報および列パリティ情報は、アレイの失われたまたは故障したストレージ素子を再構築するために再帰的に使用してもよい。例えば、いくつかのシナリオにおいて、行パリティ算式および列パリティ算式を適用した後に、該行パリティ算式および列パリティ算式の引き続きの適用によって、１つ以上のストレージ素子の消失または故障を修復することが可能である。
【００６２】
さらにまだ、ストレージ素子３４０（５；８）および３４２（６；８）中に格納されているグローバル・パリティ情報を利用することにより、全データが完全に利用可能であり、残りの７つの故障を修復することができる。この７つの残った消失の再構築の間に、パフォーマンスへの影響があり得ると予想される。
【００６３】
一実施形態において、メンテナンス完了の後、交換されたストレージ素子に対しセットの故障境界を回復することが可能である。これは、異なるＪＢＯＤとのデータ・パリティの交換を含み、これらのほとんどは単純なオペレーションである。例えば、図１１を参照すると、ストレージ素子２；０は、ストレージ素子０；９からコピーされたデータを有するはずである。これはこれらの他のストレージ素子についても言える。パリティ交換が或るセットの内部だけで（すなわち、１つだけのセットのストレージ素子の間で）行われた場合は、故障境界は影響を受けない。したがって、かかるパリティ交換オペレーションは、その後の故障境界の復旧を必要としなくてよい。
【００６４】
セットの故障境界の復旧の後、各それぞれのセット中のストレージ素子だけを用いるローカルのパリティ算式を使って、各セット中のストレージ素子上に列パリティ情報を再構築すればよい。
【００６５】
図３〜１１の状況において、本消失訂正符号は、積符号よりも大きな距離を備えることができる。前述の仕方でパリティ交換オペレーションを行うことによって、さらなるセットの喪失およびストレージ素子の喪失に対し、距離２が利用可能となり得る。２つのグローバル・パリティ（例えば、ストレージ素子３４０および３４２）を備える消失訂正符号を用いる場合、その繰り延べ限度はセット単位としてよく、パリティ交換の各々は、望ましくはセット（列）パリティを使って行えばよい。
【００６６】
このように、ｍ個のストレージ素子のｎ個のセットを含むクラウド・システムにおいて、クラウド・システムは、メンテナンスの前にｎのパリティ交換を行うことができ、セットの１つおよびストレージ素子の１つのさらなる故障の後でもデータ喪失を被らなくてもよい。
【００６７】
上記の説明では、システムが、単一のストレージ素子および一セットのさらなる故障にだけ耐えられる時点で、メンテナンスを要求することができるように記載したが、当然のことながら、この時点より早くにもまた遅くにもメンテナンスを要求することができる。オプションとして、システムは、メンテナンスをどの時点で要求するように構成してもよい。例えば、本消失訂正符号は何れか７つの故障を取り扱うことが可能であるが、システムは、７より少ないエラーのクラスタが発生した時点でメンテナンスを求めるように構成されてもよい。例えば、６故障のクラスタをメンテナンス要求の閾値として選択するのがよいかもしれない。かかる設定は、システムの完全性およびロバストネスを確保にするように選択すればよい。
【００６８】
さらにまだ、前述の諸実施形態は、ストレージ素子喪失およびセット喪失両方に対するクラウド・システムの喪失耐性を増強するための方法およびシステムを提供する。具体的には、前述した消失訂正符号は、８つの同一箇所故障によるストレージ素子の喪失に耐え、加えて、メンテナンスの間の一セット全体およびストレージ素子のさらなる喪失に対しロバストである。
【００６９】
前述の消失訂正符号は、１９のパリティを備えるＭＤＳ符号と同じパフォーマンスを提供することができる。だが、かかるＭＤＳ符号は１９のグローバル・パリティを必要とする。さらに、ＭＤＳ符号は、単一のストレージ素子故障に対しては、緊急対応アプローチを持たない。
【００７０】
加えて、図３〜１１の状況において、前述の消失訂正符号は高い効率を有する。具体的には、図３〜１１の状況において説明したように、本消失訂正符号は、ストレージ素子の７６．２５％が初期にデータを格納しながら、スペアを必要としないように、アレイを構成することを可能にする。さらに、本消失訂正符号は、パリティ交換後にアレイの容量の２３．７５％の喪失に耐え、容量の１０％が失われるまで、メンテナンスの繰り延べを可能にする。これらにより、上記で開示した諸実施形態は、クラウド・システムのストレージ・アレイの保守の期間を相当に延長することができる。
【００７１】
ここで図１２を参照すると、図２〜１１で説明した消失訂正符号を用いたクラウド・システムに対するメンテナンスの予測期間がプロットされている。図１２に示されるように、失われたストレージ素子に対するクラウド・システムの耐性を増強することにより、該クラウド・システムのメンテナンス間隔を大きく増大することが可能である。
【００７２】
例えば、１５のストレージ素子を保持する８つのセットを備えるシステムは、各々、合計１２０のストレージ素子を含む。前述の消失訂正符号を使って、このシステムは、上限８ストレージ素子まで延期することができる。図１２は、ストレージ素子の年間故障率が６％であっても、６．５ヵ月より短期に８つのストレージ素子が失われる確率はたったの５％であることを示している。しかして、本消去訂正符号の使用は、従来技術のシステムに比べ、メンテナンス時間間隔を大幅に増大する能力を提供する。
【００７３】
前述の方法は、本消去訂正符号に対する１つだけの論理マップを使って示されてきた。本方法は、再構築の負荷を低減するため、パリティ・ローテーションまたはデクラスタリングに対応すべく容易に拡張することが可能である。かかる場合、ストレージ装置上のストレージ・スペースの相異なる部分に対し相異なるパリティ位置を使ったマップのセットができることになる。例えば、第一アレイでは行０、第二アレイでは行１、等々のパリティの行を備える、アレイ３００の１０の異なったバージョンが生じ得る。これは、列パリティのローテーションに影響する。各装置上のストレージ・スペースの一部分に対し、それぞれのマップが使われることになろう。例えば、最初の１０％は第一ローテーションに、二番目の１０％は第二ローテーションに、等々、使用することができよう。しかして、第一ストレージ装置が故障したとき、それは９０％のデータと１０％のパリティを包含していることになる。しかして、パリティ交換において、セット中の全ストレージ装置に亘って書き込み作業負荷が分散され、パリティ交換過程の時間が短縮される。
【００７４】
本明細書で開示した様々な実施形態は、ｍのストレージ素子のｎのセット（例えばＪＢＯＤなど）を含んで説明されてきたが、当然のことながら、各セットはｍのストレージ素子を包含する必要はない。例えば、ｍは、セット中の素子の最大数に設定することが可能で、＜ｍの数のストレージ素子を有するどのセットにも、仮想ストレージ素子を割り当てることができる。さらに、当然のことながら、本明細書で開示の方法は、行あたり１つのパリティ・ストレージ素子または列あたり１つのパリティ・ストレージ素子以外（例えば、一つ列中に２つの列パリティ・ストレージ素子など）を備えるストレージ・システムにも拡張することが可能である。
【００７５】
まださらに、前述のアレイ構成および故障耐性の方法は、ストレージ素子の多くの異なる物理構成を備えるシステムにも適用されてよい。例えば、前述のように、ストレージ素子はディスク上の場所であってよく、ストレージ素子の各セットがＪＢＯＤを含んでもよい。別の例として、ＳＳＤを用いる諸実施形態において、各ストレージ素子はページを含んでよく、ストレージ素子の各セットは消去ブロックを含んでもよい。まだ別の例として、ＳＳＤを用いる諸実施形態において、各ストレージ素子はページを含んでよく、ストレージ素子の各セットはフラッシュ・ダイを含んでもよい。さらにまだ、ストレージ素子の各々が、ディスク・アレイまたはＪＢＯＤを含んでよく、セットの各々が、ラックなどのアレイのより大きなグループを含んでもよい。さらに、ラックは、別個の物理的場所もしくはデータ・センタまたはその両方中へのラックの設置などによって停電に対して隔離することができる。
【００７６】
前述の実施形態のいずれにおいても、クラウド・システムなどのストレージ・システムは、高いデータ効率での高可用性、ならびに低取得コストおよび長期間隔メンテナンス能力を備えるように構成することが可能である。クラウド・システムの長期間隔メンテナンスは、その繰り延べによりシステム・パフォーマンスが劣化しなければ実際的なアプローチと見なしてよい。
【００７７】
本発明は、システム、方法、もしくはコンピュータプログラム製品またはこれらの組み合わせであり得る。本コンピュータプログラム製品は、プロセッサに本発明の諸態様を遂行させるための、コンピュータ可読プログラム命令を有するコンピュータ可読ストレージ媒体（または媒体群）を含み得る。
【００７８】
このコンピュータ可読ストレージ媒体は、命令実行デバイスによる使用のための命令を保持および格納できる有形のデバイスであってよい。本コンピュータ可読ストレージ媒体は、例えば、以下に限らないが、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁気ストレージ・デバイス、半導体ストレージ・デバイス、または前述の任意の適切な組み合せであってよい。コンピュータ可読ストレージ媒体のさらに具体的例の非包括的リストは、携帯型コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去およびプログラム可能読み取り専用メモリ（ＥＰＲＯＭ：ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ：ｓｔａｔｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、携帯型コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：ｃｏｍｐａｃｔ  ｄｉｓｃ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、デジタル多用途ディスク（ＤＶＤ：ｄｉｇｉｔａｌ  ｖｅｒｓａｔｉｌｅ  ｄｉｓｋ）、メモリ・スティック、フレキシブル・ディスク、パンチカードまたは記録された命令を有する溝中の嵩上げ構造体などの機械的符号化デバイス、および前述の任意の適切な組み合わせを含み得る。本明細書中で用いられるコンピュータ可読ストレージ媒体は、無線波または他の自由伝播電磁波、ウェーブガイドもしくは他の送信媒体を通して伝播する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、またはワイヤを通して送信される電気信号などの本来的に一時的な信号、として解釈されるべきものではない。
【００７９】
本明細書で説明したコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体から、それぞれのコンピューティング／処理デバイスに、または、例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、もしくはワイヤレス・ネットワーク、またはこれらの組み合せなどのネットワークを介して、外部のコンピュータまたは外部のストレージ・デバイスにダウンロードすることができる。このネットワークは、銅の送信ケーブル、光送信ファイバ、ワイヤレス送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、もしくはエッジ・サーバ、またはこれらの組み合わせを含んでよい。各コンピューティング／処理デバイス中のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、それぞれのコンピューティング／処理デバイス内のコンピュータ可読ストレージ媒体中に保管するため、そのコンピュータ可読プログラム命令を転送する。
【００８０】
本発明のオペレーションを遂行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ（ＩＳＡ：ｉｎｓｔｒｕｃｔｉｏｎ−ｓｅｔ−ａｒｃｈｉｔｅｃｔｕｒｅ）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、または、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および、“Ｃ”プログラミング言語または類似のプログラミング言語などの従来式手続き型プログラミング言語を含め、一つ以上のプログラミング言語の任意の組み合わせで記述されたソース・コードもしくはオブジェクト・コードであってよい。これらコンピュータ可読プログラム命令は、スタンドアロン・ソフトウェア・パッケージとしてユーザのコンピュータで専ら実行しても、ユーザのコンピュータで部分的に実行してもよく、一部をユーザのコンピュータで一部を遠隔コンピュータで実行してもよく、あるいは遠隔のコンピュータまたはサーバで専ら実行してもよい。後者の場合は、ローカル・エリア・ネットワーク（ＬＡＮ：ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）または広域ネットワーク（ＷＡＮ：ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ）を含む任意の種類のネットワークを介して、遠隔コンピュータをユーザのコンピュータに接続することができ、あるいは（例えばインターネット・サービス・プロバイダを使いインターネットを介し）外部のコンピュータへの接続を行うことも可能である。いくつかの実施形態において、例えば、プログラム可能論理回路、フィールド・プログラム可能ゲート・アレイ（ＦＰＧＡ）、またはプログラム可能論理アレイ（ＰＬＡ：ｐｒｏｇｒａｍｍａｂｌｅ  ｌｏｇｉｃ  ａｒｒａｙ）などを含む電子回路は、本発明の諸態様を遂行すべく該電子回路を個別化するため、これらコンピュータ可読プログラム命令の状態情報を用いて、該コンピュータ可読プログラム命令を実行することが可能である。
【００８１】
本明細書では、本発明の実施形態による方法、装置（システム）、およびコンピュータプログラム製品のフローチャート図もしくはブロック図をまたはその両方を参照しながら、本発明の諸態様が説明されている。当然のことながら、フローチャート図もしくはブロック図またはその両方の各ブロック、およびフローチャート図もしくはブロック図またはその両方中のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装することが可能である。
【００８２】
これらのコンピュータ可読プログラム命令を、汎用コンピュータ、特殊用途向けコンピュータ、またはマシンを形成する他のプログラム可能データ処理装置のプロセッサに提供し、そのコンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行されるこれらの命令が、フローチャートもしくはブロック図またはその両方のブロックもしくはブロック群中に特定されている機能群／動作群を実装するための手段を生成するようにすることができる。また、コンピュータ、プログラム可能データ処理装置、もしくは他のデバイスまたはこれらの組み合せに対し特定の仕方で機能するよう命令することが可能なコンピュータ可読ストレージ媒体中に、これらのコンピュータ可読プログラム命令を格納し、格納された命令を有する該コンピュータ可読ストレージ媒体が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に特定されている機能／動作の態様を実装する命令群を包含する製造品、を構成するようにすることが可能である。
【００８３】
さらに、これらコンピュータ可読プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードし、該コンピュータ上、他のプログラム可能装置上、または他のデバイス上で一連のオペレーション・ステップを実施させて、コンピュータ実装のプロセスを作り出し、コンピュータ上、他のプログラム可能装置上、または他のデバイス上で実行される命令が、フローチャートもしくはブロック図またはその両方のブロックもしくはブロック群中に特定されている機能群／動作群を実施するようにすることができる。
【００８４】
図面中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能性、およびオペレーションを表している。この点に関し、フローチャートまたはブロック図中の各ブロックは、特定された論理機能（群）を実装するための一つ以上の実行可能命令を含む、モジュール、セグメント、または命令の部分を表し得る。いくつかの別の実装では、ブロック中に記載された機能が、図面に記載された順序から外れて行われることがある。例えば、連続して示された２つのブロックが、関与する機能性の如何によっては、実際にはほぼ同時に実行されることがあり、時にはこれらのブロックが逆の順序で実行されることもあり得る。また、ブロック図もしくはフローチャート図またはその両方の各ブロック、およびブロック図もしくはフローチャート図またはその両方中のブロック群の組み合わせは、特定の機能もしくは動作を実施する、または特殊用途向けハードウェアとコンピュータ命令との組み合わせを遂行する、特殊用途向けハードウェア・ベースのシステムによって実装可能なことにも留意すべきである。
【００８５】
さらに、様々な実施形態によるシステムは、プロセッサと、プロセッサに組み込まれたもしくはプロセッサによって実行可能なまたはその両方のロジックとを含んでよく、このロジックは本明細書に記載のプロセス・ステップの１つ以上を実行するように構成される。組み込まれた、とは、プロセッサが、ロジックを、特定用途向け集積回路（ＡＳＩＣ）、ＦＰＧＡなど、ハードウェア・ロジックとして内蔵していることを意味する。プロセッサによって実行可能、とは、当該ロジックが、プロセッサがアクセス可能であってプロセッサが実行するとプロセッサに何らかの機能を実施させるように構成された、ハードウェア・ロジック、ファームウェアなどのソフトウェア・ロジック、オペレーティング・システムの一部、アプリケーション・プログラムの一部など、または、ハードウェアとソフトウェア・ロジックとの何らかの組み合わせであることを意味する。ソフトウェア・ロジックは、当該技術で周知の任意のメモリ種類のローカルもしくは遠隔またはその両方のメモリに格納すればよい。ソフトウェア・プロセッサ・モジュール、もしくは、ＡＳＩＣ、ＦＰＧＡ、中央処理装置（ＣＰＵ）、集積回路（ＩＣ）、グラフィックス処理ユニット（ＧＰＵ：ｇｒａｐｈｉｃｓ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）などのハードウェア・プロセッサ、またはその両方など、当該技術で周知の任意のプロセッサを用いることが可能である。
【００８６】
当然のことながら、前述のシステムもしくは方法またはその両方の様々な特徴は、上記で提示した説明から、任意の仕方で組み合わせて多くの組み合わせを生成することができる。
【００８７】
さらに当然のことながら、本発明の諸実施形態は、オンデマンドで顧客にサービスを販売するために展開されるサービスの形で提供されてもよい。
【００８８】
上記で様々な実施形態を説明してきたが、当然ながら、これらは例示目的のためだけに提示されたものであり限定ではない。しかして、好適な実施形態の幅および範囲は、前述の例示的な実施形態のいずれにも限定されるものでなく、添付の特許請求の範囲およびこれらの等価物によってのみ定義されるべきである。
【図１】
0006655175.tif 000002
【図２】
0006655175.tif 000003
【図３】
0006655175.tif 000004
【図４】
0006655175.tif 000005
【図５】
0006655175.tif 000006
【図６】
0006655175.tif 000007
【図７】
0006655175.tif 000008
【図８】
0006655175.tif 000009
【図９】
0006655175.tif 000010
【図１０】
0006655175.tif 000011
【図１１】
0006655175.tif 000012
【図１２】
0006655175.tif 000013