(57)【特許請求の範囲】
【請求項１】
ストレージ・システムにおいてイレージャーコードを動的に選択する方法であって、
データ・アクセス状態をトラッキングするステップと、
前記トラッキングされたデータ・アクセス状態に基づいて、頻繁にアクセスされるデータに対する高速リカバリコードおよびアクセス頻度の低いデータに対するコンパクトコードを含む、少なくとも２つのイレージャーコードの間で適応的に選択を行うステップと、
前記選択されたイレージャーコードを使って前記データをエンコードするステップと、
を含む、方法。
【請求項２】
前記イレージャーコードを使って前記データをエンコードすることにより、当該データが複数のデータ・ブロックに分割され、かつ、１以上のパリティブロックが生成される、請求項１に記載の方法。
【請求項３】
前記コンパクトコードで前記データをエンコードした際に生成されるパリティブロックの数は、前記高速リカバリコードで前記データをエンコードした際に生成されるパリティブロックの数より少ない、請求項２に記載の方法。
【請求項４】
前記トラッキングされたデータ・アクセス状態に基づいて、前記少なくとも２つのイレージャーコードの間で動的に変換を行うステップをさらに含む、請求項１に記載の方法。
【請求項５】
グローバル状態に基づいて、前記少なくとも２つのイレージャーコードの間で動的に変換を行うステップをさらに含む、請求項１に記載の方法。
【請求項６】
前記グローバル状態がシステム・ストレージの容量を含む、請求項５に記載の方法。
【請求項７】
前記グローバル状態が示すシステム・ストレージの容量が閾値を超える、または前記トラッキングされるデータ・アクセス状態がデータ・アクセスの減少を示すのに応じて、高速リカバリコードでエンコードされた１つ以上のデータのセットをコンパクトコードでエンコードされるように動的に変換するステップをさらに含む、請求項５に記載の方法。
【請求項８】
前記トラッキングされるデータ・アクセス状態がデータ・アクセスの増加を示し、且つ前記グローバル状態が示すシステム・ストレージの容量が閾値を下回っているのに応じて、コンパクトコードでエンコードされた１つ以上のデータのセットを、高速リカバリコードでエンコードされるように動的に変換するステップをさらに含む、請求項５に記載の方法。
【請求項９】
前記データ・アクセス状態が、直近の修正時間、サイズ、読み取りカウント、符号化状態、およびこれらの組み合わせからなる群から選択されたデータを含む、請求項１に記載の方法。
【請求項１０】
前記２つのイレージャーコードは、プロダクションコード又はローカル再構築コードの何れかのファミリを用いることができる、請求項１に記載の方法。
【請求項１１】
ストレージ・システムにおいてイレージャーコードを動的に選択するためのコンピュータ・プログラムであって、前記コンピュータ・プログラムがプログラム・コードを含み、前記プログラム・コードはプロセッサに、
データ・アクセス状態をトラッキングするステップ、
前記トラッキングされたデータ・アクセス状態に基づいて、頻繁にアクセスされるデータに対する高速リカバリコードおよびアクセス頻度の低いデータに対するコンパクトコードを含む、少なくとも２つのイレージャーコードの間で適応的に選択を行うステップ、および
前記選択されたイレージャーコードを使って前記データをエンコードするステップ、
を実行させるためのコンピュータ・プログラム。
【請求項１２】
前記トラッキングされたデータ・アクセス状態に基づいて、前記少なくとも２つのイレージャーコードの間で動的に変換を行うためのプログラム・コードをさらに含む、請求項１１に記載のコンピュータ・プログラム。
【請求項１３】
グローバル状態に基づいて、前記少なくとも２つのイレージャーコードの間で動的に変換を行うためのプログラム・コードをさらに含む、請求項１１に記載のコンピュータ・プログラム。
【請求項１４】
前記グローバル状態がシステム・ストレージの容量を含む、請求項１３に記載のコンピュータ・プログラム。
【請求項１５】
前記グローバル状態が示すシステム・ストレージの容量が閾値を超える、または前記トラッキングされるデータ・アクセス状態がデータ・アクセスの減少を示すのに応じて、高速リカバリコードでエンコードされた１つ以上のデータのセットをコンパクトコードでエンコードされるように動的に変換するためのプログラム・コードをさらに含む、請求項１３に記載のコンピュータ・プログラム。
【請求項１６】
前記トラッキングされるデータ・アクセス状態がデータ・アクセスの増加を示し、且つ前記グローバル状態が示すシステム・ストレージの容量が閾値を下回っているのに応じて、コンパクトコードでエンコードされた１つ以上のデータのセットを、高速リカバリコードでエンコードされるように動的に変換するためのプログラム・コードをさらに含む、請求項１３に記載のコンピュータ・プログラム。
【請求項１７】
データ・アクセス状態に基づいて、データに対するイニシャルイレージャーコードを選択し、前記イニシャルイレージャーコードを使って前記データをエンコードし、前記エンコードされたデータを前記イニシャルイレージャーコードとは異なる第二イレージャーコードで変換するためのプログラム・コードをさらに含み、前記変換は、前記データ・アクセス状態およびグローバル状態の両方に基づく、請求項１１に記載のコンピュータ・プログラム。
【請求項１８】
前記データ・アクセス状態が、直近の修正時間、サイズ、読み取りカウント、符号化状態、およびこれらの組み合わせからなる群から選択されたデータを含む、請求項１１に記載のコンピュータ・プログラム。
【請求項１９】
前記２つのイレージャーコードは、プロダクションコード又はローカル再構築コードの何れかのファミリを用いることができる、請求項１１に記載のコンピュータ・プログラム。
【請求項２０】
データ・ストレージと通信しているプロセッサと、
イレージャーコードを動的に選択するため、前記プロセッサと通信しているツールであって、
データ・アクセスの状態をトラッキングするためのシステム状態モジュール、
前記システム状態モジュールによってトラッキングされた前記データ・アクセス状態に基づいて、頻繁にアクセスされるデータに対する高速リカバリコードおよびアクセス頻度の低いデータに対するコンパクトコードを含む、少なくとも２つのイレージャーコードの間で適応的に選択を行うためのアダプティブコーディングモジュール、および
前記アダプティブコーディングモジュールによって選択された前記イレージャーコードを使って前記データをエンコードするためのコーディングモジュール、
を含む前記ツールと、
を含むコンピュータ・システム。
【請求項２１】
前記トラッキングされたデータ・アクセス状態に基づいて、少なくとも２つのイレージャーコードの間で動的に変換を行うための前記アダプティブコーディングモジュールをさらに含む、請求項２０に記載のシステム。
【請求項２２】
グローバル状態に基づいて、前記少なくとも２つのイレージャーコードの間で動的に変換を行うための前記アダプティブコーディングモジュールをさらに含む、請求項２０に記載のシステム。
【請求項２３】
前記グローバル状態がシステム・ストレージの容量を含む、請求項２２に記載のシステム。
【請求項２４】
前記グローバル状態が示すシステム・ストレージの容量が閾値を超える、または前記トラッキングされるデータ・アクセス状態がデータ・アクセスの減少を示すのに応じて、高速リカバリコードでエンコードされた１つ以上のデータのセットをコンパクトコードでエンコードされるように動的に変換するための前記アダプティブコーディングモジュールをさらに含む、請求項２２に記載のシステム。
【請求項２５】
前記トラッキングされるデータ・アクセス状態がデータ・アクセスの増加を示し、且つ前記グローバル状態が示すシステム・ストレージの容量が閾値を下回っているのに応じて、コンパクトコードでエンコードされた１つ以上のデータのセットを、高速リカバリコードでエンコードされるように動的に変換するための前記アダプティブコーディングモジュールをさらに含む、請求項２２に記載のシステム。
【請求項２６】
ストレージ・システムにおいてイレージャーコードを選択する方法であって、
２つのイレージャーコードの１つを使って書き込みファイルをエンコードするステップを含む、前記書き込みファイルを保護するステップと、
前記エンコードされた書き込みファイルのアクセスをトラッキングするステップと、
前記トラッキングされたファイル・アクセスに基づいて、前記少なくとも２つのイレージャーコードの間で動的に選択を行うステップであって、前記イレージャーコードは、頻繁にアクセスされるデータに対する高速リカバリコードおよびアクセス頻度の低いデータに対するコンパクトコードを含む、前記選択を行うステップと、
前記選択されたイレージャーコードを使って前記書き込みファイルをエンコードするステップと、
を含む、方法。
【請求項２７】
ストレージ・システムにおいてイレージャーコードを動的に選択するためのコンピュータ・プログラムであって、前記コンピュータ・プログラムがプログラム・コードを含み、前記プログラム・コードはプロセッサに、
２つのイレージャーコードの１つを使って書き込みファイルをエンコードするステップを含む、前記書き込みファイルを保護するステップ、
前記エンコードされた書き込みファイルのアクセスをトラッキングするステップ、
前記トラッキングされたファイル・アクセスに基づいて、前記少なくとも２つのイレージャーコードの間で動的に選択を行うステップであって、前記イレージャーコードは、頻繁にアクセスされるデータに対する高速リカバリコードおよびアクセス頻度の低いデータに対するコンパクトコードを含む、前記選択を行うステップ、
前記選択されたイレージャーコードを使って前記書き込みファイルをエンコードするステップ、を実行させるためのコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、劣化した読み取りおよび破損したディスクまたはノードの再構築の回復コストを最適化するための高速コード(fast code)と、低い限定されたストレージ・オーバーヘッドを提供するためのコンパクトコードとを含む、２つの異なるイレージャーコードを用いることによって、作業負荷の変化に適応する新規のイレージャーコード化ストレージ・システムに関する。さらに具体的には、本発明は、これら２つのコードの間で、データ・ブロックを効率的にアップコード(upcode)およびダウンコード(downcode)するための変換メカニズムに関する。
【背景技術】
【０００２】
複数ペタバイトのデータを格納する分散ストレージ・システムが当たり前になってきている。これらのシステムは、信頼性の低いコンポーネント、ソフトウェア誤作動、マシン再起動、および保守作業から生ずるいろいろな不具合に耐性がなければならない。こういった不具合にかかわらず高い信頼性および可用性を保証するために、データは複数のマシンに亘って複製される。例えば、一部のシステムでは各データ・ブロックの３つのコピーを維持することが知られている。ディスクのストレージは比較的に費用が掛からないが、大規模なオペレーションでの全データ・フットプリントの複写は実行不可能である。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
多くの大規模分散ストレージ・システムは、イレージャーコードの使用に移行しつつあり、これらのコードの使用は、低廉なストレージ・コストで高い信頼性を提供することが知られている。これらのシステムは、回復コストもしくはストレージ・オーバーヘッドのいずれかを最適化する単一のイレージャーコードを使用する。しかしながら、イレージャーコード化システムに対しては、利用できないブロックの再構築は、符号ストライプ内に多くのデータおよびパリティ・ブロックをフェッチすることが必要で、これはディスクおよびネットワークのトラフィックの増加をもたらす。イレージャーコード化システムに対する回復の過程で読み取り伝送されることになるデータの量の増加は、高い劣化読み取り遅延およびより長い再構築時間をもたらす。
【課題を解決するための手段】
【０００４】
本発明は、ストレージ・システムにおいてイレージャーコードを動的に選択するための方法、コンピュータ・プログラム製品、およびシステムを含む。
【０００５】
イレージャーコードを選択し、選択されたコードを使ってファイルをエンコードし、基準に応じてそのファイルを異なるイレージャーコードに動的に変換するための、方法、コンピュータ・プログラム製品、およびシステムが提供される。これらのイレージャーコードは、頻繁にアクセスされるデータに対する高速リカバリコードと、アクセス頻度の低いデータに対する高効率ストレージコードとを含む。イレージャーコードは、当初は最近に生成されたファイルに対して選択され、関連するデータは、その選択されたイレージャーコードを使ってエンコードされる。同時に、エンコードされたデータへの読み取りアクセスがトラッキングされ、１つの実施形態において、これはデータ・アクセスの状態トラッキングと言われる。設けられるイレージャーコードは、トラッキングされたデータ・アクセス状態に基づいて適応的に選択される。
【０００６】
１つの態様において、本方法、コンピュータ・プログラム製品、およびシステムは、イレージャーコードの間での動的な変換をサポートすることができる。すなわち、１回以上の変化に応じて、高速リカバリコードでエンコードされたファイルを、高効率ストレージコードに変換することができる。同じように、高効率ストレージコードでエンコードされたファイルを、高速リカバリコードに変換することも可能である。この変換を引き起こし得る変化には、トラッキングされるデータ状態の変化を含めることができる。同様に、この変換を引き起こし得る変化には、グローバル状態の変化を含めることも可能である。
【０００７】
他の特徴および利点は、添付の図面と併せ、本発明の好適な実施形態（群）の以降の詳細な説明によって明らかとなろう。
【０００８】
本明細書で参照される図面は本明細書の一部を形成する。図面中に示された特徴は、別途に明示されているのでなければ、全ての実施形態でなく一部の実施形態だけの例示を意図されている。
【図面の簡単な説明】
【０００９】
【図１】分散ファイル・システムの拡張型として実装されたアダプティブコーディング分散ファイル・システム・アーキテクチャのコンポーネントを示すブロック図を表す。
【図２】アダプティブコーディング分散ファイル・システムの第一拡張を示すフロー・チャートを表す。
【図３】書き込み不活性ファイルに対する２つのイレージャーコードを示す状態図を表す。
【図４】作業負荷に適応し、高速コードとコンパクトコードとの間でファイルを動的に変換するためのプロセスを示すフロー・チャートを表す。
【図５】三重複製されたファイルに対するアダプティブコーディングモジュールを示す状態図を表す。
【図６】本明細書では、ＰＣコンパクトコードからＰＣ高速コードへとも称する、プロダクションコードのコンパクトから高速へのダウンコードを示すブロック図を表す。
【図７】ＰＣ高速コードからＰＣコンパクトコードへのアップコードを示すブロック図を表す。
【図８】ローカル再構築コード（ＬＲＣ：ｌｏｃａｌ  ｒｅｃｏｎｓｔｒｕｃｔｉｏｎ  ｃｏｄｅｓ）を用いるイレージャーコーディングモジュールの構造およびエンコードインターフェースを示すブロック図を表す。
【図９】ＬＲＣコンパクトコードからＬＲＣ高速コードへのダウンコードを示すブロック図を表す。
【図１０】クラウド・コンピューティング・ノードの一例を表す。
【図１１】クラウド・コンピューティング環境を表す。
【図１２】クラウド・コンピューティング環境によって設けられた機能抽象化レイヤのセットを表す。
【発明を実施するための形態】
【００１０】
当然のことながら、本明細書の図面中で一般的に説明され例示される本実施形態（群）のコンポーネントは、相異なる多種多様の構成に配置し設計することが可能である。しかして、これらの図面に提示されている、本装置、システム、および方法の実施形態の以下の詳細な説明は、請求される範囲を限定することは意図されておらず、単に、選択された実施形態を表している。
【００１１】
本明細書を通して、「選択された実施形態」、「１つの実施形態」、または「或る実施形態」についての言及は、当該実施形態に関連して説明された特定の特徴、構造、または特性が少なくとも１つの実施形態に含まれていることを意味する。しかして、本明細書を通し様々な場所における「選択された実施形態」、「１つの実施形態」、または「或る実施形態」は必ずしも同じ実施形態に言及してはない。
【００１２】
例示されている実施形態は、図面を参照することによって最善に理解されよう。図中の同等部分は、全体を通して同じ番号で指定されている。以下の説明は、単なる例示を意図されたものであり、本明細書で請求された諸実施形態に合致するデバイス、システム、およびプロセスのいくつかの選択された実施形態を単に例証するものである。
【００１３】
イレージャーコード化は、データが断片に分割され、拡張され、冗長片とともにエンコードされ、通常、ディスク、ストレージ・ノードまたは地理的な位置など相異なる一連の場所に亘って格納される、データ保護の方法である。本明細書で開示される諸実施形態は、同一コードファミリからの２つの異なるイレージャーコードを用いるイレージャーコード化ストレージ・システムに関連する。本明細書で説明するイレージャーコードは、高速コードおよびコンパクトコードと称される。高速コードは、ほんのわずかの頻繁にアクセスされるデータに対する低廉な回復コストを有し、コンパクトコードは、大多数のアクセス頻度の低いデータに対する低いストレージ・オーバーヘッドを有する。
【００１４】
同時に、本明細書で開示される諸実施形態は、これら２つのイレージャーコードの間でデータを変換するためのオペレーションにも関連する。当初のエンコードの後、データを動的に変換する態様は、高速コードとコンパクトコードの間でデータ・ブロックを変換する２つのオペレーションを用いることによって、作業負荷（workload）の変化に適応する。これら２つのオペレーションは、アップコードおよびダウンコードと言われる。アップコードは、当初に高速コードでエンコードされていたデータ・ブロックをコンパクトコードに変換することを言い、システムがストレージ・オーバーヘッドを低減することを可能にする。ダウンコードは、関連回復コストを低減するため、当初コンパクトコードでエンコードされていたデータ・ブロックを高速コード表現に変換することを言う。１つの実施形態において、アップコードおよびダウンコードに関連するオペレーションは、これら２つのコードの間でデータ・ブロックを変換する過程で関連するパリティ・ブロックだけを更新する。データ・ブロックのこのエンコードは、変換メカニズムがシステムの状態に適応的に応答する、さらに具体的には変化する点で、動的である。本エンコードは、この変化に応じて、関連するデータ・ブロックをアップコードまたはダウンコードする。
【００１５】
図１を参照すると、分散ファイル・システムの拡張型として実装されたアダプティブコーディング分散ファイル・システム・アーキテクチャのコンポーネントを示すブロック図（１００）が提示されている。この適応システムは、分散ファイル・システム（１３０）内のＲＡＩＤノード（１２０）の拡張型として示されている。ノード（１２０）には、バス（１２４）を介してメモリ（１２６）と通信している、本明細書では処理ユニットとも称する、プロセッサ（１２２）が設けられている。ノード（１２０）には、それぞれが永続ストレージ（１２８）と通信している他のノード（１３５）との通信がさらに設けられる。ノード（１２０）は、永続ストレージ（１２８）中のデータの保管および維持の役割を有する。さらに具体的には、ノード（１２０）には、ストレージ・システム中のデータに対するイレージャーコードの動的選択をサポートするための１つ以上のツールが設けられる。本明細書に示され以下で詳細を説明されるように、これらのツールは、システム状態モジュール（１５０）、アダプティブコーディングモジュール（１６０）およびイレージャーコーディングモジュール（１７０）を含む３つのコンポーネントから成る適応システムとして具体化されている。アダプティブコーディングモジュール（１６０）は、イレージャーコード化データのシステム状態モジュール（１５０）を維持し、取り込まれ格納されているデータに対する状態移行を管理する。また、アダプティブコーディングモジュール（１６０）は、異なるエンコードスキームを実装するために機能するイレージャーコーディングモジュール（１７０）と連動する（１６２）。
【００１６】
システム状態モジュール（１５０）は、各イレージャーコード化データ・ファイルに関連するファイル状態、すなわち、ファイル・サイズ、直近の修正時間、読み取りカウント、エンコード状態をトラッキングする。ファイル・サイズおよび直近の修正時間は、分散ファイル・システムによって維持される属性であり、アダプティブコーディング分散ファイル・システムによって、全体のデータ・ストレージおよびファイルの書き込み経過時間を計算するために使われる。また、アダプティブコーディングモジュール（１６０）は、ファイルの読み取りカウントをトラッキングし、これは、分散ファイル・システムのクライアントによるファイルへの読み取りアクセスの合計回数である。ファイル状態は、分散ファイル・システムのクライアントからファイルに発行された読み取りまたは書き込みオペレーションによって更新することが可能である。
【００１７】
また、アダプティブコーディングモジュール（１６０）は、グローバル状態も維持し、これはデータおよびパリティのために使用されている総計ストレージである。イレージャーコード化データ・ファイル中のあらゆるブロックは、正確に１つのコピーを有する。各イレージャーコード化ファイルは、相異なるイレージャーコードストライプに分割され、各ストライプ中のブロックは、分散ファイル・システム・クラスタ中の相異なるノードに亘って分散される。各イレージャーコード化データ・ファイルは、関連付けられたパリティ・ファイルを有し、該ファイルのサイズはエンコードスキームによって決まる。システムのグローバル状態は、アダプティブコーディングモジュール（１６０）がイレージャーコード化ファイルに対する状態移行を開始したときに周期的に更新される。状態移行は、ファイルのエンコード状態の変更に対応し、イレージャーコーディングモジュールへのインターフェースを使って起動される。
【００１８】
イレージャーコーディングモジュール（１７０）は、エンコード、デコード、アップコード、およびダウンコードを含む、エンコードデータに対する４つのインターフェースをエクスポートする。エンコードオペレーションは、入力としてデータ・ファイルおよびエンコードスキームを必要とし、データ・ファイル中の全ブロックに対するパリティ・ファイルを生成する。デコードオペレーションは、ブロック不具合に対する劣化読み取りによって、またはディスクまたはノードの不具合に対する再構築ジョブの一部として起動される。また、これは、ファイル中の喪失または破損ブロックのインデックスも必要とし、入力エンコードスキームを用いて、ストライプ中の残りのデータおよびパリティ・ブロックから関連する失われたブロックを再構築する。下記の表はイレージャーコード化インターフェースを示す。
【００１９】
【表１】
0006670311.tif 000002
【００２０】
アダプティブコーディングモジュール（１６０）は、作業負荷の変化に適応し、２つのエンコードスキームの間でデータ・ファイルの表現を変換するため、アップコードおよびダウンコードオペレーションを起動する。１つの実施形態において、これら変換オペレーションの両方は、データ・ファイルのエンコードスキームを変更する際に、関連するパリティ・ファイルだけを更新する。アップコードオペレーションはデータを高速コードからコンパクトコード表現に転換し、しかして、より低いストレージ・オーバーヘッドを達成するため、パリティ・ファイルのサイズを低減する。アップコードオペレーションは、データ・ファイルの読み取りを必要とせず、パリティだけの転換である。ダウンコードオペレーションは、コンパクトコードから高速コード表現に転換し、しかして、回復コストを低減する。ダウンコードオペレーションは、データおよびパリティ・ファイル両方の読み取りを必要とするが、パリティ・ファイルだけを変更する。
【００２１】
図２を参照すると、適応的にエンコードされた分散ファイル・システムの第一拡張を示すフロー・チャート（２００）が提示されている。最近に生成されたファイルは、その直近の修正書き込み時間に基づいて書き込み活性ファイルとして分類される（２０２）。書き込み活性ファイルは、三重複製される（２０４）。書き込みアクセスが、アクセスの設定数を下回って減少したときは、書き込み活性ファイルは書き込み不活性ファイルに再分類される（２０６）。１つの実施形態において、ファイル・システムは、イレージャーコード化のために書き込み不活性ファイルを選択すべく周期的にスキャンされる。また、各書き込み不活性ファイルは、ファイル中のデータ・ブロックの読み取りアクセスの数に基づいても分類される。さらに具体的には、ファイルの読み取りカウントが確認され（２０８）、本図に示されているように、書き込み不活性ファイルに対する読み取りカウントが閾値を超えているかどうかが判定される（２１０）。１つの実施形態において、このアセスメントは、読み取りカウントが閾値より低いかどうかを判定するように、反転することもできる。ステップ（２１０）での判定に対する肯定応答に続いて、当該書き込み不活性ファイルは読み取り活性ファイルに分類され（２１２）、該ファイルは高速コードを使ってエンコードされる（２１４）。１つの実施形態において、高速コードは低廉な回復コストを有する。ステップ（２１０）での判定に対する否定応答に続いて、当該書き込み不活性ファイルは読み取り不活性ファイルに分類され（２１６）、該ファイルは低い読み取りカウントを有することが表示される。その後、そのファイルは、コンパクトコードを使ってエンコードされ（２１８）、これは１つの実施形態において低いストレージ・オーバーヘッドを有する。このように、各書き込み不活性ファイルは、関連する読み取りカウントに基づいてエンコードされ、このエンコードは、該ファイルへの読み取りアクセスの頻度を反映する。
【００２２】
図３を参照すると、書き込み不活性ファイルに対する２つのイレージャーコードを示す状態図（３００）が提示されている。図示のように、最近に生成されたファイル（３０５）は書き込み活性として分類され、三重複製される（３１０）。ファイルに対する修正が減少したとき、そのファイルは書き込み不活性ファイル（３１２）に分類される。各書き込み不活性ファイルは、本明細書では読み取りカウントとも言う、読み取りアクセスに基づいて、イレージャーコードを使ってエンコードされる。すなわち、読み取り不活性ファイル（３２０）は、コンパクトコード（３２２）によってエンコードされ、読み取り活性ファイル（３３０）は高速コード（３３２）によってエンコードされる。
【００２３】
図２および図３中に示されるように、２つの異なるイレージャーコードは、ほんのわずかの頻繁にアクセスされるデータに対しては低廉な回復コストの高速コードを、大多数のアクセス頻度の低いデータに対しては低いストレージ・オーバーヘッドのコンパクトコードを使い、書き込み不活性ファイルを当初にエンコードするのに用いられる。しかしながら、読み取り不活性ファイルは、後のアクセスを通して読み取り活性ファイルに移行し、これにより低廉な回復コストを必要とする可能性があり、読み取り活性ファイルが、アクセスの減少を通して読み取り不活性ファイルに移行し、これにより、より高い回復コストを可能にする必要があることもある。
【００２４】
図４を参照すると、作業負荷に適応し、高速コードとコンパクトコードとの間でファイルを動的に変換するためのプロセスを示すフロー・チャート（４００）が提示されている。ファイルに対するこの変換は、例えば読み取りカウントなど、それ自体のファイル状態、および例えば総ストレージなど、グローバルなシステム状態によって導かれる。最初に、データおよびパリティ・ブロックによって消費されたストレージが限度を超えているかどうかが判定される（４０２）。ステップ（４０２）での判定に対する肯定応答は、ストレージ・スペースを低減するために１つ以上の高速コード化ファイルのアップコードを開始させる。コンパクトコードを有するファイルが、それらの読み取りカウントに基づいてソートされる（４０４）。より低い読み取りカウントを有する１つ以上のファイルが、高速イレージャーコードからコンパクトイレージャーコードにアップコードされる（４０６）。ステップ（４０６）に続いて、本プロセスは、ステップ（４０２）でのアセスメント、すなわち、限度に対するストレージ消費を査定することを繰り返す（４０８）。さらに具体的には、ステップ（４０８）での反復アセスメントは、ステップ（４０６）でのアップコードを考慮する上で、さらなるストレージ・スペースが必要かどうかを確認する。さらなるストレージ・スペースが必要な場合、１つ以上の複製ファイルが選択され、直接、コンパクトイレージャーコードにエンコードされ、必要な場合、１つ以上の複製または高速コード化ファイルが、コンパクトイレージャーコードにアップコードされる（４１０）。１つの実施形態において、ステップ（４１０）で選択されたファイル（群）はそれらの読み取りカウント（群）に基づいており、総計ストレージ・オーバーヘッドを再度限度内にするべく、最低の読み取りカウントを有するファイルが、コンパクトイレージャーコードにアップコードするため選択される。ステップ（４０２）で消費ストレージがストレージ・オーバーヘッドの限度を超えていないと判定された場合、または、ステップ（４０８）で消費ストレージが限度を超えていないと判定された場合、１つ以上のファイルを選択し、コンパクトコード化から高速イレージャーコードに移行させることも可能である（４１２）。１つの実施形態において、ステップ（４１２）で選択されたファイル（群）は、関連付けられた読み取りカウントに、具体的には、直近の読み取りアクセスが行われた時点に基づくことができる。高速イレージャーコードへのファイルの変換は、前にコンパクトコード化されていたファイルの、だが１つの実施形態では最近にアクセスされたファイルへの、将来の不具合劣化読み取りの回復コストを低減する。
【００２５】
図５を参照すると、三重複製された（５１０）最近に生成されたファイル（５０５）に対するアダプティブコーディングモジュールを示す状態図（５００）が提示されている。図３と同様に、ファイルへの修正が減少したときには、そのファイルは書き込み不活性ファイルに再分類される（５１２）。各書き込み不活性ファイルは、本明細書では読み取りカウントとも称する読み取りアクセスに基づいて、イレージャーコードを使ってエンコードされる。また同時に、このエンコードはストレージ容量限度にも対処する。すなわち、読み取り不活性ファイル（５２０）は、ストレージ・システムの容量の状態を考慮し、コンパクトコード（５２２）によってエンコードされ、読み取り活性ファイル（５３０）は、これもストレージ・システムの容量の状態を考慮しながら、高速コード（５３２）によってエンコードされる。本図に示された状態図は、適応的でありストレージ・システムの容量に反応する。ストレージ容量が、閾値、例えば限度に達したまたは超えたときは、図４に示され説明されているように、１つ以上のファイルに修正が行われる。さらに具体的には、高速コード化されていた１つ以上の読み取り不活性ファイルがコンパクトコード化される（５４０）。同様に、ストレージ容量がその限度内にあるときには、コンパクトコード化されていたファイルであった１つ以上の読み取り不活性ファイルを選択し、高速コード化することが可能である（５５０）。この状態図は、ストレージ容量に対する温度測定として機能し、回復コストとストレージ・オーバーヘッドとをバランスさせるために、２つのイレージャーコードの間で選択ファイルを動的に変換する。アダプティブコーディングモジュールは、システム状態をトラッキングし、異なるエンコードインターフェースを起動する。上記に応じ、この状態図は、高速コードとコンパクトコードとの間で変換を行うことによって作業負荷の変化およびシステム・ストレージに適応するために、イレージャーコード用いることを示す。
【００２６】
適応ファイル・システムイレージャーコーディングモジュールの一部として、プロダクションコードおよびローカル再構築コードを含む２つの新規コードのファミリが用いられる。プロダクションコードは、低廉な回復コストを提供する二次元コードである。図６を参照すると、本明細書では、ＰＣコンパクトコードからＰＣ高速コードへとも称する、プロダクションコードのコンパクトから高速へのダウンコードを示すブロック図（６００）が提示されている。このダウンコードオペレーションは、単一のＰＣコンパクトコード符号（６１０）を３つのＰＣ高速コード（６３０）、（６４０）、および（６５０）に変換する。ＰＣコンパクトコードと３つのＰＣ高速コード（６３０）、（６４０）、および（６５０）との間では、水平およびグローバル・パリティ・ブロックだけが変化する。図示のように、最初の２つのＰＣ高速コード（６３０）および（６４０）中の水平およびグローバル・パリティ・ブロックの計算は、ネットワーク伝送、ならびにＰＣコンパクトコード符号の２つの水平行中のデータ・ブロックに亘る排他的ＯＲ（以降、ＸＯＲ）オペレーション（６６０）および（６７０）、すなわち、行（６１２）および（６１４）に対するＸＯＲ（６６０）と、行（６１６）および（６１８）に対するＸＯＲ（６７０）とを必要とする。第三ＰＣ高速コード（６５０）中の水平およびグローバル・パリティ・ブロックは、水平およびグローバル・パリティ・ブロック（６２０）からの、ならびに、最初の２つのＰＣ高速コード（６３０）および（６４０）の、（６６０）および（６７０）で新規に計算されたＸＯＲオペレーションからのＸＯＲオペレーション（６８０）を通して計算される。この最適化は、データ・ブロックの２つの水平行のネットワーク伝送を節減する。得られた３つのＰＣ高速コード（６３０）、（６４０）、および（６５０）中のデータと垂直パリティとのブロックは、ＰＣコンパクトコード符号（６１０）から変更なしのままで、いかなるネットワーク伝送も必要としない。したがって、本図で示されるように、コンパクトコードから高速コードへダウンコードは、垂直パリティの再計算だけを必要とする。
【００２７】
図７を参照すると、ＰＣ高速コードからＰＣコンパクトコードへのアップコードを示すブロック図（７００）が提示されている。本図では、アップコードは、プロダクションコードに対する効率的なパリティだけの変換オペレーションとして示されている。このアップコードプロセスは、新規の水平パリティ・ブロック（７８０）、（７８２）、（７８４）、（７８６）、および（７８８）、ならびにグローバル・パリティ・ブロック（７９０）を計算するために、３つのＰＣ高速コード（７１０）、（７２０）、（７３０）の旧水平およびグローバル・パリティ・ブロックに亘ってＸＯＲ（７５０）を実施する。旧垂直パリティ（７１２）および（７１４）、（７２２）および（７２４）、ならびに（７３２）および（７３４）から、新規の垂直パリティ・ブロック（７６０）、（７６２）、（７６４）、（７６６）、（７６８）、および（７７０）が計算され、例えば、これらの垂直パリティは同値に留まる。したがって、このアップコードオペレーションは、ＰＣコンパクトコード符号中の新規パリティを計算するのに、３つのＰＣ高速コードから、データ・ブロックのいかなるネットワーク伝送も必要としない。
【００２８】
図８を参照すると、ローカル再構築コード（ＬＲＣ）を用いるイレージャーコーディングモジュールの構造およびエンコードインターフェースを示すブロック図（８８０）が提示されている。さらに具体的に、ＬＣＲ高速コードのこの例示の構造は、１２のデータ・ブロック（８０２）〜（８３２）、６つのローカル・パリティ・ブロック（８４２）〜（８５２）、および２つのグローバル・パリティ・ブロック（８６０）および（８６２）とともに示されている。ＬＲＣ符号のエンコードオペレーションは、それぞれがパリティ・ブロックの一群への２つのＸＯＲオペレーションを実施することによって、ローカル・パリティを計算する。第一ＸＯＲ（８７０）は、パリティ・ブロック（８４２）、（８４４）、および（８４６）に対して行われ、第二ＸＯＲ（８７２）は、パリティ・ブロック（８４６）、（８４８）、および（８５０）に対して行われる。すなわち、ＬＲＣコンパクトコード符号中の２つのローカル・パリティ（８８２）および（８８４）は、ＬＲＣ高速コード中の３つのローカル・パリティ、（８４２）、（８４４）、（８４６）と、（８４８）、（８５０）および（８５２）と、に対するＸＯＲとして計算される。結果として、この適応システムは、アップコードオペレーションにおいて、ＬＲＣコンパクトコード符号中の２つの新規ローカル・パリティを計算するため、６つのネットワーク伝送だけを必要とする。
【００２９】
２つのグローバル・パリティ・ブロック（８６０）および（８６２）は、１２のデータ・ブロック（８０２）〜（８３２）の全てに対し、リードソロモンエンコードを行うことによって計算される。（８８０）に、ＬＲＣコンパクトコード表現が、同じ１２のデータ・ブロック（８０２）〜（８３２）、２つのローカル・パリティ・ブロック（８８２）および（８８４）、ならびに２つのグローバル・パリティ・ブロック（８８６）および（８８８）とともに示されている。図示のように、単一のローカル・パリティ・ブロック（８８２）は、データ・ブロック（８０２）、（８０４）、（８０６）、（８２２）、（８２４）、および（８２６）のＸＯＲであり、単一のローカル・パリティ・ブロック（８８４）は、データ・ブロック（８０８）、（８１０）、（８１２）、（８２８）、（８３０）、および（８３２）のＸＯＲである。ＬＲＣコンパクトコードに対するデータまたはローカル・パリティ・ブロック中のいかなる単一の不具合も、再構築のため同じ列からの２つのブロックの伝送を必要とする。また一方、グローバル・パリティ・ブロック中の不具合は、再構築のため全１２のデータ・ブロックを必要とする。
【００３０】
図９を参照すると、ＬＲＣコンパクトコードからＬＲＣ高速コードへのダウンコードを示すブロック図（９００）が提示されている。２つのローカル・パリティ・ブロック（９８２）および（９８４）は、６データ・ブロックのグループに関連付けられている。すなわち、ローカル・パリティ・ブロック（９８２）は、データ・ブロック（９０２）、（９０４）、（９０６）、（９２２）、（９２４）、および（９２６）に関連付けられ、ローカル・パリティ・ブロック（９８４）は、データ・ブロック（９０８）、（９１０）、（９１２）、（９２８）、（９３０）、および（９３２）に関連付けられている。失われたデータ・ブロックまたはローカル・パリティの回復には、ＬＲＣコンパクトコード符号中の当該グループからの６つのブロックの伝送が必要となる。結果として、このＬＲＣコンパクトコード符号もまた、劣化した読み取りに対する、より低廉な回復コストを有する。ＬＲＣ高速コード中の３つの新規ローカル・パリティの２つは、ＬＲＣコンパクトコード符号の個別の列中のデータ・ブロックから、（９７０）および（９７２）で計算される。三番目のローカル・パリティは、該２つの新規ローカル・パリティおよびＬＲＣコンパクトコード符号中の旧ローカル・パリティ（９８２）に対し、ＸＯＲを行うことによって計算される（９７４）。このダウンコードオペレーションは、新規ローカル・パリティを計算するために１０のブロック伝送を必要とする。グローバル・パリティ（９８６）および（９８８）は、変更なしのままでありいかなるネットワーク伝送も必要としない。
【００３１】
ＬＲＣ符号に対するアップコードおよびダウンコードオペレーションは、プロダクションコードのものと同様である。また一方、ＬＲＣ符号についてのアップコードおよびダウンコードは、新規のローカルおよびグローバル・パリティを計算するためにいくつかのデータ・ブロック伝送を必要とする。プロダクションコードおよびローカル再構築コードの説明の中で示したように、アップコードオペレーションは、プロダクションコードに対する３つの高速コードを融合するか、もしくは、ＬＲＣ符号に対する１つ高速コードをより小さいサイズの新規コンパクトコードに落とし込む。ダウンコードは、ステップの逆のシーケンスを行う。両方のオペレーションとも、データ・ファイルのエンコード状態を変更し、その複製レベルを１つに低減する。
【００３２】
本明細書に示され説明されるツールは、ストレージ・システム中のイレージャーコードを動的に選択し、システム測定に基づいてイレージャーコードの間でデータを適応的に変換することをサポートする。１つの実施形態において、イレージャーコードおよび関連するこれらコードの間での変換の機能性およびサポートは、共用のリソースのプールを備えたクラウド・コンピューティング環境にも当てはめることが可能である。
【００３３】
クラウド・コンピューティング環境とは、白紙の処理状態、疎結合、モジュール方式、およびセマンチックな相互運用性に重点を置くことを指向するサービスである。クラウド・コンピューティングの中心には、相互接続されたノードのネットワークを含むインフラストラクチャがある。次いで図１０を参照すると、クラウド・コンピューティング・ノードの一例の概略図が示されている。クラウド・コンピューティング・ノード（１０１０）は、適切なクラウド・コンピューティング・ノードの単なる一例であり、本明細書に記載の実施形態の使用または機能性の範囲に関するいかなる限定を示唆することも意図されていない。上記に関係なく、クラウド・コンピューティング・ノード（１０１０）は、上記で述べた機能性のいずれをも実装しもしくは実施しまたはその両方を行うことができる。クラウド・コンピューティング・ノード（１０１０）中には、コンピュータ・システム／サーバ（１０１２）があり、これは、数多くの他の汎用または特殊用途コンピューティング・システム環境または構成とともに動作可能である。コンピュータ・システム／サーバ（１０１２）とともに用いるのに適し得る、よく知られたコンピューティング・システム、環境、もしくは構成またはこれらの組み合わせの例は、以下に限らないが、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドまたはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサベースのシステム、セット・トップ・ボックス、プログラマブル・コンシューマ電子機器、ネットワークＰＣ、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、および上記のシステムまたはデバイスのいずれかを含む分散クラウド・コンピューティング環境などを含む。
【００３４】
コンピュータ・システム／サーバ（１０１２）は、プログラム・モジュールなど、コンピュータ・システムに実行される、コンピュータ・システム実行可能な命令の一般的文脈で説明することができる。一般に、プログラム・モジュールは、特定のタスクを遂行する、または特定の抽象データ型を実装する、ルーティン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造体などを含むことが可能である。コンピュータ・システム／サーバ（１０１２）は、タスクが、通信ネットワークを介してリンクされた遠隔の処理デバイスによって実行される、分散クラウド・コンピューティング環境中で実践されてもよい。分散クラウド・コンピューティング環境では、プログラム・モジュールは、メモリ・ストレージ・デバイスを含む、ローカルおよび遠隔両方のコンピュータ・システム・ストレージ媒体に配置することが可能である。
【００３５】
図１０に示されるように、クラウド・コンピューティング・ノード（１０１０）中のコンピュータ・システム／サーバ（１０１２）は、汎用コンピューティング・デバイスの形で示されている。コンピュータ・システム／サーバ（１０１２）のコンポーネントは、以下に限らないが、１つ以上のプロセッサまたは処理ユニット（１０１６）、システム・メモリ（１０２８）、および、システム・メモリ（１０２８）のプロセッサ（１０１６）への連結を含め、様々なシステム・コンポーネントを連結するバス（１０１８）を含むことができる。バス（１０１８）は、メモリ・バスまたはメモリ・コントローラ、周辺バス、アクセラレイティッド・グラフィックス・ポート、および様々なバス・アーキテクチャのいずれかを用いるプロセッサまたはローカル・バスを含め、何種類かのバス構造体の１つ以上任意のものを表す。限定でなく例として、かかるアーキテクチャは、業界標準アーキテクチャ（ＩＳＡ：Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、マイクロ・チャネル・アーキテクチャ（ＭＣＡ：Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、強化ＩＳＡ（ＥＩＳＡ：Ｅｎｈａｎｃｅｄ  ＩＳＡ）バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション（ＶＥＳＡ：Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）ローカル・バス、および周辺コンポーネント相互接続（ＰＣＩ：Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスを含む。コンピュータ・システム／サーバ（１０１２）は、通常、様々なコンピュータ・システム可読媒体を含む。かかる媒体は、コンピュータ・システム／サーバ（１０１２）によってアクセス可能な任意の利用可能な媒体であってよく、これには、揮発性および不揮発性媒体、ならびにリムーバブルおよび固定型媒体の両方が含まれる。
【００３６】
システム・メモリ（１０２８）は、ランダム・アクセス・メモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）（１０３０）もしくはキャッシュ・メモリ（１０３２）またはその両方など、揮発性メモリの形でのコンピュータ・システム可読媒体を含むとよい。コンピュータ・システム／サーバ（１０１２）は、他のリムーバブル／固定型、揮発性／不揮発性コンピュータ・システム・ストレージ媒体をさらに含むことが可能である。単なる例として、ストレージ・システム（１０３４）は、固定型、不揮発性磁気媒体（図示せず、通常、「ハード・ドライブ」と呼ばれる）からの読み取りおよびそれに書き込むように設けることができる。図示はされていないが、リムーバブル、不揮発性磁気ディスク（例えば、「フレキシブル・ディスク」）から読み取り、これに書き込むための磁気ディスク・ドライブ、およびＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、または他の光媒体など、リムーバブル、不揮発性の光ディスクから読み取りこれに書き込むための光ディスク・ドライブを設けることも可能である。かかる場合、それぞれを、１つ以上のデータ媒体インターフェースによってバス（１０１８）に接続すればよい。以下に、さらに示して説明するように、メモリ（１０２８）は、本実施形態（群）の諸機能を遂行するよう構成されたプログラム・モジュールの（例えば、少なくとも１つの）セットを有する、少なくとも１つのプログラム製品を含むことができる。
【００３７】
限定でなく例として、プログラム・モジュール（１０４２）の（少なくとも１つの）セットを有するプログラム／ユーティリティ（１０４０）は、オペレーティング・システム、１つ以上アプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データを、メモリ（１０２８）中に格納することが可能である。オペレーティング・システム、１つ以上アプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データ、またはこれらのいくつかの組み合わせの各々は、ネットワーキング環境の実装を含むことができる。プログラム・モジュール（１０４２）は、一般に、本明細書で説明した諸実施形態の機能もしくは方法またはその両方を遂行する。
【００３８】
また、コンピュータ・システム／サーバ（１０１２）は、キーボード、ポインティング・デバイス、ディスプレイ（１０２４）など、１つ以上の外部デバイス（１０１４）；すなわち、ユーザがコンピュータ・システム／サーバ（１０１２）とやり取りできるようにする１つ以上のデバイス；もしくはコンピュータ・システム／サーバ（１０１２）が１つ以上の他のコンピューティング・デバイスと通信することを可能にする任意のデバイス（例えば、ネットワーク・カード、モデムなど）；またはその両方と通信することができる。かかる通信は、入力／出力（Ｉ／Ｏ：Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）インターフェース（１０２２）を介して行うことが可能である。さらにまた、コンピュータ・システム／サーバ（１０１２）は、ローカル・エリア・ネットワーク（ＬＡＮ：ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）、一般広域ネットワーク（ＷＡＮ：ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ）もしくは公衆ネットワーク（例えばインターネット）またはこれらの組み合わせなど、１つ以上のネットワークとネットワーク・アダプタ（１０２０）を介して通信することができる。図示のように、ネットワーク・アダプタ（１０２０）は、バス（１０１８）を介してコンピュータ・システム／サーバ（１０１２）の他のコンポーネントと通信する。当然のことながら、図示はされていないが、コンピュータ・システム／サーバ（１０１２）につないで他のハードウェアもしくはソフトウェア・コンポーネントまたはその両方を用いることもできよう。諸例には、以下に限らないが、マイクロコード、デバイス・ドライブ、冗長処理ユニット、外部ディスク・ドライブ・アレイ、ＲＡＩＤシステム、テープ・ドライブ、およびデータ・アーカイバル・ストレージ・システムなどが含まれる。
【００３９】
ここで図１１を参照すると、例示的なクラウド・コンピューティング環境（１１５０）が描かれている。図示のように、クラウド・コンピューティング環境（１１５０）は、例えば、携帯情報端末（ＰＤＡ：ｐｅｒｓｏｎａｌ  ｄｉｇｉｔａｌ  ａｓｓｉｓｔａｎｔ）または携帯電話（１１５４Ａ）、デスクトップ・コンピュータ（１１５４Ｂ）、ラップトップ・コンピュータ（１１５４Ｃ）、もしくは自動車コンピュータ・システム（１１５４Ｎ）、またはこれらの組み合わせなど、クラウドの消費者によって使われるローカル・コンピューティング・デバイスが通信可能な１つ以上のクラウド・コンピューティング・ノード（１１１０）を含む。ノード群（１１１０）は、相互に通信が可能である。これらは、前述のように、プライベート、コミュニティ、公衆、またはハイブリッド・クラウド、またはこれらの組み合わせなど、１つ以上のネットワーク中に、物理的にまたは仮想的にグループ化することができる（図示せず）。これは、クラウド・コンピューティング環境（１１５０）が、インフラストラクチャ、プラットフォーム、もしくはサービスとしてのソフトウェアまたはこれらの組み合わせを提供することを可能にし、これらに対して、クラウド消費者は、ローカル・コンピューティング・デバイスにリソースを維持する必要はない。当然のことながら、図１１に示されたコンピューティング・デバイス（１１５４Ａ）〜（１１５４Ｎ）の種類は例示だけを意図されており、また、コンピューティング・ノード（１１１０）およびクラウド・コンピューティング環境（１１５０）は、任意の種類のネットワークもしくは（例えば、ウェブ・ブラウザを使って）ネットワーク・アドレス可能な接続、またはその両方を介して、任意の種類のコンピュータ化デバイスと通信することが可能である。
【００４０】
次いで、図１２を参照すると、クラウド・コンピューティング環境（１２００）によって設けられた一群の機能抽象化層が示されている。前もってことわっておくが、図１２中に示されたコンポーネント、層、および機能は、例示だけを意図されており、諸実施形態はこれに限定されない。図には、下記の層と対応する機能とが提示されている。すなわち、ハードウェアおよびソフトウェア層（１２６０）、仮想化層（１２６２）、マネジメント層（１２６４）、および作業負荷層（１２６６）である。ハードウェアおよびソフトウェア層（１２６０）は、ハードウェアおよびソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例は、マインフレーム、一例としてＩＢＭ（ＩＢＭ社の登録商標）ｚＳｅｒｉｅｓ（ＩＢＭ社の登録商標）システム；ＲＩＳＣ（Ｒｅｄｕｃｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｅｒ（縮小命令セット・コンピュータ））アーキテクチャ・ベースのサーバ、一例としてＩＢＭ（ＩＢＭ社の登録商標）ｐＳｅｒｉｅｓ（ＩＢＭ社の登録商標）システム；ＩＢＭ（ＩＢＭ社の登録商標）ｘＳｅｒｉｅｓ（ＩＢＭ社の登録商標）システム；ＩＢＭ（ＩＢＭ社の登録商標）ＢｌａｄｅＣｅｎｔｅｒ（ＩＢＭ社の登録商標）システム；ストレージ・デバイス；ネットワークおよびネットワーク形成コンポーネントを含む。ソフトウェア・コンポーネントの例は、ネットワーク・アプリケーション・サーバ・ソフトウェア、一例としてＩＢＭ（ＩＢＭ社の登録商標）ＷｅｂＳｐｈｅｒｅ（ＩＢＭ社の登録商標）アプリケーション・サーバ・ソフトウェア；およびデータベース・ソフトウェア、一例としてＩＢＭ（ＩＢＭ社の登録商標）ＤＢ２（ＩＢＭ社の登録商標）データベース・ソフトウェアを含む。（ＩＢＭ、ｚＳｅｒｉｅｓ、ｐＳｅｒｉｅｓ、ｘＳｅｒｉｅｓ、ＢｌａｄｅＣｅｎｔｅｒ、ＷｅｂＳｐｈｅｒｅおよびＤＢ２は、世界中の多くの司法管轄区域で登録されているＩｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎの商標である）。
【００４１】
仮想化層（１２６２）は、仮想エンティティの以下の例を提供することが可能な抽象化層を提供する。すなわち、仮想サーバ、仮想ストレージ、仮想プライベート・ネットワークを含む仮想ネットワーク、仮想アプリケーションおよびオペレーティング・システム、ならびに仮想クライアントなどである。
【００４２】
一例において、マネジメント層（１２６４）は、下記の機能を提供する。すなわち、リソース・プロビジョニング、計量および料金徴取、ユーザ・ポータル、サービス品質管理、およびキー管理である。以下にこれらの機能を説明する。リソース・プロビジョニングは、クラウド・コンピューティング環境内でタスクを実施するのに用いられる、コンピューティング・リソースおよび他のリソースの動的調達を提供する。計量および料金徴取は、リソースがクラウド・コンピューティング環境内で用いられる際のコストのトラッキング、およびそれらリソースの消費に対する請求書またはインボイス作成を提供する。一例において、これらのリソースは、アプリケーション・ソフトウェアのライセンスを含み得る。セキュリティは、クラウド消費者およびタスクに対する本人確認、ならびにデータおよび他のリソースに対する保護を提供する。ユーザ・ポータルは、消費者およびシステム管理者に対し、クラウド・コンピューティング環境へのアクセスを提供する。キー管理は、２つ以上のエンティティの間で必要な暗号および関連する暗号化データの管理が合致するように、データの計算および共有を提供する。
【００４３】
作業負荷層（１２６６）は、クラウド・コンピューティング環境を使用することが可能な機能性の例を提供する。本明細書で説明する、以降クラウド・コンピューティング環境と称する構成可能なコンピュータ・リソースの共用プールにおいて、本明細書ではデータ・サイトとも称する複数のデータ・センタ内で、諸ファイルをユーザの間で共有することが可能である。このため、クラウド・コンピューティング環境内で、データ・ストレージの編成および管理をサポートするため、共有プールには一連のメカニズムが設けられる。
【００４４】
当業者には当然のことながら、本実施形態（群）の態様は、システム、方法、またはコンピュータ・プログラム製品として具現化することができる。したがって、本実施形態（群）の態様は、全体がハードウェアの実施形態、全体がソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、あるいは、ソフトウェア態様およびハードウェア態様を組み合わせた実施形態の形を取ることができ、これらは一般に本明細書では全て「回路」、「モジュール」、または「システム」と称することがある。さらに、本実施形態（群）の態様は、コンピュータ可読プログラム・コードが具現化されている１つ以上のコンピュータ可読媒体（群）中に具現化されたコンピュータ・プログラム製品の形を取ることも可能である。
【００４５】
１つ以上のコンピュータ可読媒体（群）の任意の組み合わせを用いることが可能である。コンピュータ可読媒体は、コンピュータ可読信号媒体であっても、コンピュータ可読ストレージ媒体であってもよい。コンピュータ可読ストレージ媒体は、例えば、以下に限らないが、電子的、磁気的、光学的、電磁気的、赤外的、または半導体の、システム、装置、またはデバイス、あるいは前述の任意の適切な組み合わせであってよい。コンピュータ可読ストレージ媒体のさらに具体的な例（非包括的リスト）には、１つ以上の配線を有する電気接続、携帯型コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、読み取り専用メモリ（ＲＯＭ：ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、消去およびプログラムの可能読み取り専用メモリ（ＥＰＲＯＭ（ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）またはフラッシュ・メモリ）、光ファイバ、携帯型コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：ｃｏｍｐａｃｔ  ｄｉｓｃ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、光ストレージ・デバイス、磁気ストレージ・デバイス、または前述の任意の適切な組み合わせが含まれよう。本明細書の文脈において、コンピュータ可読ストレージ媒体は、命令実行システム、装置、もしくはデバイスによって、またはこれらに関連させて使用するためのプログラムを、包含または格納できる任意の有形媒体であってよい。
【００４６】
コンピュータ可読信号媒体には、例えばベースバンド中にまたは搬送波の一部として具現化されたコンピュータ可読プログラム・コードを有する、伝播データ信号を含めることができる。かかる伝播信号は、以下に限らないが、電磁気的、光学的、またはこれらの任意の適切な組み合わせを含め、様々な形態の任意の形を取ることが可能である。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではないが、命令実行システム、装置、もしくはデバイスによって、またはこれらに関連させて使用するためのプログラムの通信、伝播、または伝送が可能な任意のコンピュータ可読媒体であってよい。
【００４７】
コンピュータ可読媒体上に具現化されたプログラム・コードは、以下に限らないが、無線、有線、光ファイバ・ケーブル、ＲＦなど、または前述の任意の適した組み合わせを含め、任意の適切な媒体を用いて送信することができる。
【００４８】
本実施形態（群）の態様のオペレーションを実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および、“Ｃ”プログラミング言語または類似のプログラミング言語などの従来式手続き型プログラミング言語を含め、１つ以上のプログラミング言語の任意の組み合わせで記述することができる。このプログラム・コードは、スタンドアロン・ソフトウェア・パッケージとしてユーザのコンピュータで専ら実行することも、ユーザのコンピュータで部分的に実行することもでき、一部をユーザのコンピュータで一部を遠隔コンピュータで実行することもでき、あるいは遠隔のコンピュータまたはサーバで専ら実行することもできる。後者の場合は、ローカル・エリア・ネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ）を含む任意の種類のネットワークを介して、遠隔コンピュータをユーザのコンピュータに接続することもでき、あるいは（例えばインターネット・サービス・プロバイダを使いインターネットを介し）外部のコンピュータへの接続を行うことも可能である。
【００４９】
諸実施形態による方法、装置（システム）およびコンピュータ・プログラム製品のフロー・チャート図もしくはブロック図またはその両方を参照しながら、本実施形態（群）の態様が上記で説明されている。当然のことながら、フロー・チャート図もしくはブロック図またはその両方の各ブロック、および、フロー・チャート図もしくはブロック図またはその両方中のブロックの組み合わせは、コンピュータ・プログラム命令によって実装することが可能である。
【００５０】
これらのコンピュータ・プログラム命令を、汎用コンピュータ、特殊用途コンピュータ、またはマシンを形成する他のプログラム可能データ処理装置のプロセッサに提供し、そのコンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行されるこれらの命令が、フロー・チャートもしくはブロック図またはその両方のブロックもしくはブロック群中に特定されている機能群／動作群を実装するための手段を生成するようにすることができる。
【００５１】
また、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスに対し特定の仕方で機能するよう命令することが可能なこれらのコンピュータ・プログラム命令を、コンピュータ可読媒体に格納し、そのコンピュータ可読媒体に格納された命令が、フロー・チャートもしくはブロック図またはその両方のブロックまたはブロック群中に特定されている機能（群）／動作（群）を実装する命令群を包含する製造品を作り出せるようにすることができる。
【００５２】
さらに、コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードし、そのコンピュータ上、他のプログラム可能装置上、または他のデバイス上で一連のオペレーション・ステップを実行させて、コンピュータ実装のプロセスを作り出し、当該コンピュータ上もしくは他のプログラム可能装置上で実行される命令が、フロー・チャートもしくはブロック図またはその両方のブロックもしくはブロック群中に特定されている機能群／動作群を実装するためのプロセスを提供するようにすることも可能である。
【００５３】
図面のフロー・チャートおよびブロック図は、様々な実施形態による、システム、方法、およびコンピュータ・プログラム製品から可能となる実装のアーキテクチャ、機能性、およびオペレーションを示している。この点に関し、フロー・チャートまたはブロック図中の各ブロックは、特定の論理機能（群）を実装するための１つ以上の実行可能命令を含む、モジュール、セグメント、またはコードの部分を表し得る。また、一部の別の実装においては、ブロック中に記載された機能が、図面に記載された順序から外れて行われ得ることに留意すべきである。例えば、連続して示された２つのブロックが、関与する機能性に応じ、実際にはほぼ同時に実行されることがあり、時にはこれらのブロックが逆の順序で実行されることもあり得る。さらに、ブロック図もしくはフロー・チャート図（群）またはその両方の各ブロック、およびブロック図もしくはフロー・チャート図（群）またはその両方中のブロック群の組み合わせは、特定の機能または動作を実施する特殊用途ハードウェア・ベースのシステム、または特殊用途ハードウェアとコンピュータ命令との組み合わせによって実装可能なことにも留意する。
【００５４】
本明細書で使用する用語は、単に特定の実施形態を説明する目的のためのものであり、限定することは意図されていない。本明細書で用いられる、単数形「或る（ａ、ａｎ）」、および「該（ｔｈｅ）」は、文脈上明瞭に別途に示されていなければ、複数形も同じように含むことが意図されている。さらに、当然のことながら本明細書で用いられる「含む（ｃｏｍｐｒｉｓｅ）」もしくは「含んでいる（ｃｏｍｐｒｉｓｉｎｇ）」またはその両方は、述べられた特徴、完全体、ステップ、オペレーション、エレメント、もしくはコンポーネント、またはこれらの組み合わせの存在を特定するが、１つ以上の他の特徴、完全体、ステップ、オペレーション、エレメント、コンポーネント、もしくはこれらの群、または上記の組み合わせの存在または追加を排除するものではない。
【００５５】
本実施形態（群）は、システム、方法、もしくはコンピュータ・プログラム製品またはこれらの組み合わせとすることができる。このコンピュータ・プログラム製品は、プロセッサに諸態様を遂行させるためのコンピュータ可読プログラム命令を有するコンピュータ可読ストレージ媒体（媒体群）を含めるとよい。
【００５６】
本明細書で説明したコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング／処理デバイスに、あるいは、例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、もしくはワイヤレス・ネットワーク、またはこれらの組み合わせなどのネットワークを介して外部コンピュータまたは外部ストレージ・デバイスに、ダウンロードすることが可能である。このネットワークは、銅送信ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、もしくはエッジ・サーバ、またはこれらの組み合わせを含んでよい。各コンピューティング／処理デバイス中のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、そのコンピュータ可読プログラム命令を、それぞれのコンピューティング／処理デバイス内のコンピュータ可読ストレージ媒体中に保存のため転送する。
【００５７】
諸実施形態による方法、装置（システム）およびコンピュータ・プログラム製品のフロー・チャート図もしくはブロック図またはその両方を参照しながら、本実施形態群の態様が本明細書で説明されている。当然のことながら、フロー・チャート図もしくはブロック図またはその両方の各ブロック、および、フロー・チャート図もしくはブロック図またはその両方中のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装することが可能である。
【００５８】
添付の請求項中のミーンズ・プラス・ファンクションまたはステップ・プラス・ファンクションの要素全ての、対応する構造、材料、動作および均等物は、具体的に請求された他の請求要素と組み合わせてその機能を実施するための、一切の構造、材料または動作を包含することが意図されている。本実施形態（群）の記述は、例示および説明の目的で提示されたもので、網羅的であることも、または開示した形態に限定することも意図されていない。当業者には、本範囲および趣旨から逸脱することのない多くの修改および変形が明白であろう。本実施形態は、本原理および実際的な応用を最善に説明し、他の当業者が、意図する特定の用途に適した様々な修改を加えた様々な実施形態を理解できるように選択され説明されたものである。上記に基づいて、２つ以上のイレージャーコードの実装、および特に、データがエンコードされて適応的に異なるコードに変換される動的な方式は、改善された回復コストおよびストレージ効率を達成するための新しい効率的なインターフェースを提供する。
【００５９】
当然のことながら、例示のため本明細書で特定の実施形態を説明してきたが、本発明の範囲から逸脱することなく様々な修改を加えることが可能である。したがって、保護の範囲は、添付の特許請求の範囲およびそれらの等価物によってのみ限定される。
【図１】
0006670311.tif 000003
【図２】
0006670311.tif 000004
【図３】
0006670311.tif 000005
【図４】
0006670311.tif 000006
【図５】
0006670311.tif 000007
【図６】
0006670311.tif 000008
【図７】
0006670311.tif 000009
【図８】
0006670311.tif 000010
【図９】
0006670311.tif 000011
【図１０】
0006670311.tif 000012
【図１１】
0006670311.tif 000013
【図１２】
0006670311.tif 000014