(57)【特許請求の範囲】
【請求項１】
ストレージを提供する方法であって：
ファイル・システムとストレージ環境との間の間接参照層としてストレージ抽象化層を利用して：
前記ストレージ環境の不均質な型のストレージへのアクセスを提供する複数のストレージ・プロバイダーの特性を取得し；
第一のストレージ・プロバイダーの第一のストレージを管理するための第一のストレージ・ビンを、前記第一のストレージ・プロバイダーの第一の特性に基づいて生成し；
第二のストレージ・プロバイダーの第二のストレージを管理するための第二のストレージ・ビンを、前記第二のストレージ・プロバイダーの第二の特性に基づいて生成し；
第一のストレージ型を有する前記第一のストレージおよび前記第一のストレージ型とは異なる第二のストレージ型を有する前記第二のストレージからストレージ集合体を生成し；
前記ストレージ集合体を単一のストレージ・コンテナとして前記ファイル・システムに呈することを含み、
当該方法がさらに、前記ストレージ抽象化層を利用して：
前記第一のストレージ内の第一のデータへのアクセスの第一の頻度が前記第一のストレージについて前記第一のストレージ・ビンによって設定された閾値より低いことを判別し；
前記第一のデータをログに累積し；
前記第一のストレージ内の第二のデータへのアクセスの第二の頻度が前記第一のストレージについて前記第一のストレージ・ビンによって設定された前記閾値より低いことを判別し；
前記第二のデータを前記ログに累積し；
閾値量のデータが前記ログ内に累積されたことを判別し；
前記ログからの累積されたデータを含み、前記第二のストレージのデータ・フォーマットに対応するストレージ・オブジェクトを生成し；
前記ストレージ・オブジェクトを、前記第二のストレージ・ビンを通じて前記第二のストレージ・プロバイダーに、前記第二のストレージ内での記憶のために送ることを含む、
方法。
【請求項２】
前記ストレージ抽象化層を利用して：
前記ファイル・システムから、前記第一のデータについての物理ボリューム・ブロック番号を含む、前記第一のデータを求めるアクセス要求を受領し；
前記物理ボリューム・ブロック番号を使ってオブジェクト・メタファイルに問い合わせして、前記ストレージ・オブジェクトのオブジェクト識別子および前記ストレージ・オブジェクト内での前記第一のデータのオフセットを識別し；
前記オブジェクト識別子および前記オフセットを使って、前記第二のストレージ・プロバイダーによって前記第二のストレージ内に記憶されている前記ストレージ・オブジェクト内の前記第一のデータへのアクセスを提供することを含む、
請求項１記載の方法。
【請求項３】
前記ストレージ抽象化層を利用して：
前記第一のストレージ・ビンを使って、前記第一のストレージ内のデータへの参照の参照回数を追跡し、参照回数が0のデータを前記第一のストレージから解放し；
前記第二のストレージ・ビンを使って、前記第二のストレージ内のデータへの参照の参照回数を追跡し、参照回数が0のデータを前記第二のストレージから解放することを含む、
請求項１記載の方法。
【請求項４】
前記ストレージ抽象化層を利用して：
前記ストレージ集合体内に第一のデータを記憶するための、前記ファイル・システムからの要求を受領し；
前記第一のデータのデータ特性が前記第一のストレージ・プロバイダーの特性に対応することに基づいて、前記第一のデータを、前記第一のストレージ・ビンを通じて、前記第二のストレージにではなく、前記第一のストレージの第一の記憶位置に選択的に記憶し；
前記第一のデータを、前記第一のストレージから前記第二のストレージ・プロバイダーの前記第二のストレージの第二の記憶位置に移すことを含む、
請求項１記載の方法。
【請求項５】
前記ストレージ抽象化層を利用して：
前記ファイル・システムから、前記第一のデータについての上書き要求を受領し；
前記上書き要求のデータを新しいデータとして第三の記憶位置に記憶し；
前記第二のストレージ・ビンを使って前記第二の記憶位置にある前記第一のデータを、ガーベージ収集のためにマークすることを含む、
請求項４記載の方法。
【請求項６】
前記第三の記憶位置は前記第一のストレージ内である、請求項５記載の方法。
【請求項７】
前記第三の記憶位置は前記第二のストレージ内である、請求項５記載の方法。
【請求項８】
前記ストレージ抽象化層を利用して、複数のデータを、該データおよびストレージ・プロバイダーの特性に基づいて、諸ストレージ・ビンを通じて、前記複数のストレージ・プロバイダーの対応するストレージに選択的に記憶することを含み、特性は、逐次アクセス特性、ランダム・アクセス特性、ユーザー・データ特性、メタデータ特性、頻繁にアクセスされる特性および頻繁にアクセスされない特性のうちの一つを含む、請求項１ないし７のうちいずれか一項記載の方法。
【請求項９】
機械によって実行されたときに該機械に請求項１ないし８のうちいずれか一項記載の方法を実行させる方法を実行するための命令を有している非一時的な機械可読媒体。
【請求項１０】
方法を実行するための命令を有している非一時的な機械可読媒体であって、前記命令は、機械によって実行されたときに該機械に：
ファイル・システムとストレージ環境との間の間接参照層としてストレージ抽象化層を利用して：
前記ストレージ環境の不均質な型のストレージへのアクセスを提供する複数のストレージ・プロバイダーの特性を取得し；
第一のストレージ・プロバイダーの第一のストレージを管理するための第一のストレージ・ビンを、前記第一のストレージ・プロバイダーの第一の特性に基づいて生成し；
第二のストレージ・プロバイダーの第二のストレージを管理するための第二のストレージ・ビンを、前記第二のストレージ・プロバイダーの第二の特性に基づいて生成し；
第一のストレージ型を有する前記第一のストレージおよび前記第一のストレージ型とは異なる第二のストレージ型を有する前記第二のストレージからストレージ集合体を生成し；
前記ストレージ集合体を単一のストレージ・コンテナとして前記ファイル・システムに呈し；
前記ストレージ集合体内にデータを記憶するための、前記ファイル・システムからの要求を受領し；
前記データの特性が前記第一のストレージ・プロバイダーの特性に対応することに基づいて、前記データが、前記第二のストレージではなく、前記第一のストレージ内に記憶されるべきであると決定することを実行させるものであり、
前記命令は、機械によって実行されたときに該機械にさらに、前記ストレージ抽象化層を利用して：
前記第一のストレージ内の第一のデータへのアクセスの第一の頻度が前記第一のストレージについて前記第一のストレージ・ビンによって設定された閾値より低いことを判別し；
前記第一のデータをログに累積し；
前記第一のストレージ内の第二のデータへのアクセスの第二の頻度が前記第一のストレージについて前記第一のストレージ・ビンによって設定された前記閾値より低いことを判別し；
前記第二のデータを前記ログに累積し；
閾値量のデータが前記ログ内に累積されたことを判別し；
前記ログからの累積されたデータを含み、前記第二のストレージのデータ・フォーマットに対応するストレージ・オブジェクトを生成し；
前記ストレージ・オブジェクトを、前記第二のストレージ・ビンを通じて前記第二のストレージ・プロバイダーに、前記第二のストレージ内での記憶のために送ることを実行させるものである、
非一時的な機械可読媒体。
【請求項１１】
前記命令が前記機械に：
前記ストレージ抽象化層を利用して、前記第一の特性の第一の部分集合および前記第二の特性の第二の部分集合を前記ファイル・システムに呈することを実行させる、
請求項１０記載の非一時的な機械可読媒体。
【請求項１２】
前記第一のストレージ・プロバイダーが第一のノードであり、前記第二のストレージ・プロバイダーが第二のノードであり、前記ストレージ集合体が前記第一のノードおよび前記第二のノードにまたがってホストされる、請求項９記載の非一時的な機械可読媒体。
【請求項１３】
前記ファイル・システムが複数のノードにまたがってホストされる、請求項９ないし１２のうちいずれか一項記載の非一時的な機械可読媒体。
【請求項１４】
方法を実行するための命令が記憶されている、機械実行可能コードを有する機械可読媒体を含むメモリと；
前記メモリに結合されたプロセッサであって、前記プロセッサは、前記プロセッサに請求項１ないし８のうちいずれか一項記載の方法を実行させる前記機械実行可能コードを実行するよう構成されている、プロセッサとを有する、
ストレージを提供するためのコンピューティング装置。
【請求項１５】
方法を実行するための命令が記憶されている、機械実行可能コードを有する機械可読媒体を含むメモリと；
前記メモリに結合されたプロセッサとを有する、
ストレージを提供するためのコンピューティング装置であって、
前記プロセッサは：
ファイル・システムとストレージ環境との間の間接参照層としてストレージ抽象化層を利用して：
前記ストレージ環境の不均質な型のストレージへのアクセスを提供する複数のストレージ・プロバイダーの特性を取得し；
第一のストレージ・プロバイダーの第一のストレージを管理するための第一のストレージ・ビンを、前記第一のストレージ・プロバイダーの第一の特性に基づいて生成し；
第二のストレージ・プロバイダーの第二のストレージを管理するための第二のストレージ・ビンを、前記第二のストレージ・プロバイダーの第二の特性に基づいて生成し；
第一のストレージ型を有する前記第一のストレージおよび前記第一のストレージ型とは異なる第二のストレージ型を有する前記第二のストレージからストレージ集合体を生成し；
前記ストレージ集合体を単一のストレージ・コンテナとして前記ファイル・システムに呈し；
前記特性に基づいてストレージ・プロバイダーをまたいでデータを選択的に記憶することを前記プロセッサに実行させる前記機械実行可能コードを実行するよう構成されており、
前記プロセッサはさらに、前記ストレージ抽象化層を利用して：
前記第一のストレージ内の第一のデータへのアクセスの第一の頻度が前記第一のストレージについて前記第一のストレージ・ビンによって設定された閾値より低いことを判別し；
前記第一のデータをログに累積し；
前記第一のストレージ内の第二のデータへのアクセスの第二の頻度が前記第一のストレージについて前記第一のストレージ・ビンによって設定された前記閾値より低いことを判別し；
前記第二のデータを前記ログに累積し；
閾値量のデータが前記ログ内に累積されたことを判別し；
前記ログからの累積されたデータを含み、前記第二のストレージのデータ・フォーマットに対応するストレージ・オブジェクトを生成し；
前記ストレージ・オブジェクトを、前記第二のストレージ・ビンを通じて前記第二のストレージ・プロバイダーに、前記第二のストレージ内での記憶のために送るよう構成されている、
コンピューティング装置。
【請求項１６】
前記第一のストレージ・プロバイダーは第一のI/Oサイズをサポートし、前記第二のストレージ・プロバイダーは前記第一のI/Oサイズとは異なる第二のI/Oサイズをサポートする、請求項１５記載のコンピューティング装置。
【請求項１７】
前記ファイル・システムは前記第一のI/Oサイズをサポートし、前記第二のI/Oサイズをサポートしない、請求項１６記載のコンピューティング装置。
【請求項１８】
前記機械実行可能コードが前記プロセッサに：
前記ストレージ抽象化層を利用して：
前記ファイル・システムから圧縮されたデータを受領し；
前記圧縮されたデータを、圧縮された状態で、前記第一のストレージ内に記憶することを実行させる、
請求項１４記載のコンピューティング装置。
【請求項１９】
前記機械実行可能コードが前記プロセッサに：
前記ストレージ抽象化層を利用して：
前記ファイル・システムから暗号化されたデータを受領し；
前記暗号化されたデータを、暗号化された状態で、前記第一のストレージ内に記憶することを実行させる、
請求項１４記載のコンピューティング装置。
【請求項２０】
前記機械実行可能コードが前記プロセッサに：
前記複数のストレージ・プロバイダーに関し、前記ファイル・システムによって提供される重複除去を保持させる、
請求項１４ないし１９のうちいずれか一項記載のコンピューティング装置。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願
本願は2017年3月23日に出願された「複合集合体アーキテクチャー」と題する米国非仮特許出願第15/467,293号の優先権を主張するものである。同出願の内容はここに参照によって組み込まれる。
【背景技術】
【０００２】
多くのストレージ・システムは、クライアントに、複数のストレージ装置内に記憶されているデータへのアクセスを提供する。たとえば、ストレージ・コントローラは、クライアント・データを、ローカルにアクセス可能な（たとえばストレージ・コントローラにローカルに取り付けられている）またはリモートにアクセス可能な（たとえばネットワークを通じてアクセス可能な）一組のストレージ装置内に記憶しうる（たとえばストレージ集合体が、複数のストレージ装置にまたがって記憶されうる）。ストレージ集合体は、ストレージ・ファイル・システムからクライアントにエクスポートされてもよい。ストレージ集合体は、クライアントには、ボリュームまたは論理ユニット番号（logical  unit  number、lun）のような単一のストレージ・コンテナとして見えてもよい。このようにして、集合体は、該集合体が物理的にどのように一組のストレージ装置の間で記憶されているかの詳細を抽象化してクライアントに見えなくする。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
いくつかのストレージ・システムは、複数層のストレージ配置内にデータを記憶しうる。たとえば、ストレージ・コントローラは、ハードディスクドライブ層および固体ストレージ層内にデータを記憶してもよい。ハードディスクドライブ層は、クライアント・データを記憶するための容量層として、入出力動作を処理するために使われてもよい。固体ストレージ層は、ストレージ動作の処理を加速するためのキャッシュとして使われてもよい。残念ながら、ストレージ装置およびメディアの異なるクラスは異なる特性および挙動をもつ（たとえばレイテンシー、サイズ、ガーベージ収集、ランダム記憶動作の効率、逐次記憶動作の効率、I/Oアクセス・サイズ、たとえば4キロバイトのI/Oアクセス・サイズなど）。このように、ストレージ・ファイル・システムは、複数の不均質なストレージ装置およびメディアから集合体を本来的に生成することはできない。
【図面の簡単な説明】
【０００４】
【図１】本稿に記載される施策の一つまたは複数に基づく、例示的なクラスター化されたネットワークを示すコンポーネント・ブロック図である。
【０００５】
【図２】本稿に記載される施策の一つまたは複数に基づく、例示的なデータ・ストレージ・システムを示すコンポーネント・ブロック図である。
【０００６】
【図３】複合集合体アーキテクチャーのためのストレージ抽象化層を提供する例示的な方法を示すフローチャートである。
【０００７】
【図４】複合集合体アーキテクチャーのためのストレージ抽象化層を提供する例示的なコンピューティング装置を示すコンポーネント・ブロック図である。
【０００８】
【図５Ａ】複合集合体アーキテクチャーのためのストレージ抽象化層を提供する例示的なコンピューティング装置において、データが複数のストレージ・プロバイダーのストレージ内に選択的に記憶されることを示すコンポーネント・ブロック図である。
【０００９】
【図５Ｂ】複合集合体アーキテクチャーのためのストレージ抽象化層を提供する例示的なコンピューティング装置において、データがログ中に累積されることを示すコンポーネント・ブロック図である。
【００１０】
【図５Ｃ】複合集合体アーキテクチャーのためのストレージ抽象化層を提供する例示的なコンピューティング装置において、ログ内の累積されたデータが、記憶のためにストレージ・プロバイダーに送られるストレージ・オブジェクトを生成するために使われることを示すコンポーネント・ブロック図である。
【００１１】
【図５Ｄ】複合集合体アーキテクチャーのためのストレージ抽象化層を提供する例示的なコンピューティング装置において、データがストレージ・オブジェクト内でアクセスされることを示すコンポーネント・ブロック図である。
【００１２】
【図５Ｅ】複合集合体アーキテクチャーのためのストレージ抽象化層を提供する例示的なコンピューティング装置において、ガーベージ収集が実行されることを示すコンポーネント・ブロック図である。
【００１３】
【図６】本稿に記載される施策の一つまたは複数に基づくコンピュータ可読媒体の例である。
【発明を実施するための形態】
【００１４】
特許請求される主題のいくつかの例がこれから図面を参照して記述される。図面において同様の参照符号は一般に全体を通じて同様の要素を指すために使われる。以下の記述では、説明の目的で、特許請求される主題の理解を与えるために数多くの個別的詳細が記載されるが、特許請求される主題がこれらの個別的詳細なしで実施されうることは明白でありうる。この詳細な記述のどの部分も従来技術として認められるものではない。
【００１５】
複合集合体アーキテクチャー（a  composite  aggregate  architecture）のためのストレージ抽象化層を提供する一つまたは複数の技法および／またはコンピューティング装置が本願で提供される。ストレージ抽象化層は、ファイル・システムと複数の不均質な型のストレージおよびストレージ・プロバイダーを有するストレージ環境との間の間接参照（indirection）層として提供される（たとえばストレージ抽象化層はファイル・システム層の下に存在する）。たとえば、ストレージ抽象化層は、ストレージ環境のストレージ・プロバイダーの特性を取得するよう構成される。ストレージ・プロバイダーは、ハードディスクドライブ層ストレージ・プロバイダー、固体ドライブ層ストレージ・プロバイダー、オブジェクト・ストレージ・プロバイダー（たとえばサードパーティーのクラウド・ストレージ・プロバイダー）、高可用性（high  availability、HA）ストレージ・プロバイダー（たとえばノードのHA対）、シングル磁気記録（shingled  magnetic  recording、SMR）ストレージ・プロバイダーなどである。ストレージ抽象化層はファイル・システム層の下なので、ストレージ抽象化層はファイル・システム層にはできない動作を実行することができる。たとえば、ストレージ抽象化層は、異なるストレージ・プロバイダーによって提供される不均質な型のストレージからストレージ集合体（storage  aggregate）（たとえば、異なる特性および挙動をもつ異なるクラスのストレージおよびメディアのストレージからの集合体）を生成することができる。ストレージ集合体は、あたかも均質なストレージからの単一のデータ・コンテナであるかのようにファイル・システムに呈される。ストレージ抽象化層は、どこにデータを格納するか（たとえばあるデータを格納するために特定のストレージ・プロバイダーを選択する）、いつ、どのようにして異なるストレージ・プロバイダーの間でデータを動かすか、どのようにして個々のストレージ・プロバイダーごとにガーベージ収集を実行するか（たとえば、ストレージ・ブロックの解放は、ファイル・システムによってではなく、別個に、ストレージ・プロバイダー／装置ごとに行なうことができる）を決定し、重複除去、暗号化および圧縮といったファイル・システムの記憶効率を保存することができる。
【００１６】
ストレージ抽象化層は、任意の数のノードにまたがることができ、ファイル・システムはそれらのノードのいくつかの上に存在することができる。新しいストレージ・プロバイダーおよび／またはストレージ装置が、たとえばファイル・システムが知らないうちにまたは理解することなく、動的にストレージ抽象化層と統合されることができる。このように、本来的にはファイル・システムと互換でない新しいストレージ・プロバイダーおよび／またはストレージ装置（たとえば、ファイル・システムは4キロバイトのチャンクでI/Oアクセスを実行する一方、クラウド・プロバイダーのような分散式のストレージ・プロバイダーには、メガバイトもしくはギガバイトのチャンクなど、より大きなチャンクでデータを送るほうが、ネットワーク効率および処理効率のために効率的である）でも、ストレージ集合体のために使用されることができる。ストレージ抽象化層がどこに、どのようにデータを格納するかを扱ってくれるからである。
【００１７】
複合集合体アーキテクチャーのためのストレージ抽象化層を提供するために、図１は、クラスター化されたネットワーク環境１００またはネットワーク・ストレージ環境の実施形態を示している。しかしながら、本稿に記載される技法等が、クラスター化されたネットワーク環境１００、非クラスター・ネットワーク環境および／または多様な他のコンピューティング環境、たとえばデスクトップ・コンピューティング環境内で実装されうることは理解されうる。すなわち、付属の請求項を含む本開示は、本稿で与えられる例に限定されることは意図されていない。後の図面において同じまたは同様のコンポーネント、要素、特徴、項目、モジュールなどが示されるが先の図面に関して先に論じられている場合には、その後の図面を記述するときには（たとえば簡単および理解の容易のために）同様の（たとえば冗長な）議論は割愛されることがあることが理解されるであろう。
【００１８】
図１は、本稿に記載される技法および／またはシステムの少なくともいくつかの実施形態を実装しうるクラスター化されたネットワーク環境１００を示すブロック図である。クラスター化されたネットワーク環境１００は、クラスター・ファブリック１０６を通じて結合されているデータ・ストレージ・システム１０２および１０４を有する。クラスター・ファブリック１０６は、プライベートなインフィニバンド（Infiniband）、ファイバーチャネル（Fibre  Channel、FC）またはイーサネット〔登録商標〕ネットワークとして具現されるコンピューティング・ネットワークなどであり、データ・ストレージ・システム１０２と１０４（およびその中の一つまたは複数のモジュール、コンポーネントなど、たとえばノード１１６および１１８）の間の通信を容易にする。二つのデータ・ストレージ・システム１０２および１０４および二つのノード１１６および１１８が図１に示されているが、任意の好適な数のそのようなコンポーネントが考えられていることが理解されるであろう。一例では、ノード１１６、１１８はストレージ・コントローラを有し（たとえば、ノード１１６は一次またはローカル・ストレージ・コントローラを有していてもよく、ノード１１８は二次またはリモート・ストレージ・コントローラを有していてもよい）、それらのストレージ・コントローラがホスト装置１０８、１１０のようなクライアント装置に、データ・ストレージ装置１２８、１３０内に記憶されたデータへのアクセスを提供する。同様に、本稿で特に断わりのない限り、本稿で言及されるおよび／または付属の図面に示される他のモジュール、要素、特徴、項目についても同じことがいえる。すなわち、コンポーネント、モジュール、要素、特徴、項目などの特定の数は、限定するものと解釈されることは意図されていない。
【００１９】
さらに、クラスター化されたネットワークは、いかなる特定の地理的領域にも限定されず、ローカルおよび／またはリモートにクラスター化されることができることが理解されるであろう。このように、ある実施形態では、クラスター化されたネットワークは、複数の地理的位置に位置される複数のストレージ・システムおよび／またはノードにわたって分散されることができる。一方、別の実施形態では、クラスター化されたネットワークは同じ地理的位置に（たとえばデータ・ストレージ装置の単一のオンサイト・ラックに）存在するデータ・ストレージ・システム（たとえば１０２、１０４）を含むことができる。
【００２０】
図示した例では、たとえばクライアント装置、パーソナルコンピュータ（PC）、記憶のために使われるコンピューティング装置（たとえばストレージ・サーバー）および他のコンピュータもしくは周辺装置（たとえばプリンター）を含みうる一つまたは複数のホスト装置１０８、１１０が、ストレージ・ネットワーク接続１１２、１１４によってそれぞれのデータ・ストレージ・システム１０２、１０４に結合される。ネットワーク接続は、たとえばデータ・パケットを交換するためにネットワークアタッチトストレージ（Network  Attached  Storage、NAS）プロトコル、たとえば共通インターネットファイルシステム（Common  Internet  File  System、CIFS）プロトコルまたはネットワークファイルシステム（Network  File  System、NFS）プロトコルを使うローカルエリアネットワーク（local  area  network、LAN）または広域ネットワーク（wide  area  network、WAN）、ストレージエリアネットワーク（Storage  Area  Network、SAN）プロトコル、たとえばスモールコンピュータシステムインターフェース（Small  Computer  System  Interface、SCSI）またはファイバーチャネルプロトコル（Fiber  Channel  Protocol、FCP）、S3のようなオブジェクト・プロトコルなどを含みうる。例示的に、ホスト装置１０８、１１０は、アプリケーションを実行している汎用コンピュータであってもよく、情報交換のためのクライアント／サーバー・モデルを使ってデータ・ストレージ・システム１０２、１０４と対話してもよい。すなわち、ホスト装置がデータ・ストレージ・システム１にデータ（たとえば、ホスト装置によって発される、ストレージ装置のためのI/Oコマンドを処理するよう構成されたネットワーク・ストレージ・コントロールによって管理されるストレージ装置上のデータ）を要求し、データ・ストレージ・システムが、一つまたは複数のストレージ・ネットワーク接続１１２、１１４を介して要求の結果をホスト装置に返す。
【００２１】
クラスター化されたデータ・ストレージ・システム１０２、１０４上のノード１１６、１１８は、クラスターとして相互接続されたネットワークまたはホスト・ノードを含むことができ、該クラスターは、たとえばリモート位置をもつ企業などへのデータ記憶および管理サービス、クラウド・ストレージ（たとえば、ストレージ・エンドポイントがデータ・クラウド内に記憶されてもよい）を提供する。クラスター化されたネットワーク環境１００内のそのようなノードは、たとえば接続ポイント、再分配ポイントまたは通信エンドポイントとしてネットワークに取り付けられた装置であることができる。ノードは、ネットワーク通信チャネルを通じて情報を送信、受信および／または転送することができてもよく、これらの基準の任意のものまたは全部を満たす任意の装置を含むことができる。ノードの一例は、ネットワークに取り付けられたデータ記憶および管理サーバーであってもよい。ここで、該サーバーは、データ記憶および管理システム内のサーバーとして動作するよう特に構成された汎用コンピュータまたはコンピューティング装置を含むことができる。
【００２２】
一例では、ノード１１６、１１８のようなノードの第一のクラスター（たとえば、一つまたは複数のストレージ装置の第一の論理的なグループ化を含む第一のストレージ集合体へのアクセスを提供するよう構成された第一の組のストレージ・コントローラ）が、第一のストレージ・サイトに位置していてもよい。図示されていないノードの第二のクラスター（一つまたは複数のストレージ装置の第二の論理的なグループ化を含む第二のストレージ集合体へのアクセスを提供するよう構成された第二の組のストレージ・コントローラ）が、第二のストレージ・サイトに位置していてもよい。第一のノード・クラスターおよび第二のノード・クラスターは、災害復旧構成に従って構成されてもよく、災害が被災ノード・クラスターを含む被災ストレージ・サイトで発生した場合に、被災ノード・クラスターのストレージ装置へのスイッチオーバー・アクセスを、生き残っているノード・クラスターが提供する（たとえば、第二のストレージ・サイトで災害が発生した場合に、第一のノード・クラスターが、クライアント装置に、第二のストレージ集合体のストレージ装置へのスイッチオーバー・データ・アクセスを提供する）。
【００２３】
クラスター化されたネットワーク環境１００において示されるように、ノード１１６、１１８は、クラスターのための分散式ストレージ・アーキテクチャーを提供するよう協調するさまざまな機能コンポーネントを有することができる。たとえば、ノードは、ネットワーク・モジュール１２０、１２２およびディスク・モジュール１２４、１２６を有することができる。ネットワーク・モジュール１２０、１２２は、ノード１１６、１１８（たとえばネットワーク・ストレージ・コントローラ）がストレージ・ネットワーク接続１１２、１１４を通じてホスト装置１０８、１１０に接続することを許容するよう構成されることができる。それによりたとえば、ホスト装置１０８、１１０は分散式ストレージ・システムに記憶されたデータにアクセスできる。さらに、ネットワーク・モジュール１２０、１２２は、クラスター・ファブリック１０６を通じて一つまたは複数の他のコンポーネントとの接続を提供することができる。たとえば、図１において、ノード１１６のネットワーク・モジュール１２０は、ノード１１８のディスク・モジュール１２６を通じて要求を送ることによって、第二のデータ・ストレージ装置にアクセスできる。
【００２４】
ディスク・モジュール１２４、１２６は、一つまたは複数のデータ・ストレージ装置１２８、１３０、たとえばディスクまたはディスクのアレイ、フラッシュメモリまたは他の何らかの形のデータ・ストレージをノード１１６、１１８に接続するよう構成されることができる。ノード１１６、１１８はクラスター・ファブリック１０６によって相互接続されることができ、たとえばクラスターにおけるそれぞれのノードが、クラスター内の異なるノードに接続されたデータ・ストレージ装置１２８、１３０上のデータにアクセスできる。しばしば、ディスク・モジュール１２４、１２６は、たとえばSCSIまたはFCPのようなSANプロトコルに従ってデータ・ストレージ装置１２８、１３０と通信する。こうして、ノード１１６、１１８上のオペレーティング・システムから見ると、データ・ストレージ装置１２８、１３０は、オペレーティング・システムにローカルに取り付けられているように見えることができる。このようにして、種々のノード１１６、１１８などが、抽象ファイルを明示的に要求するのではなく、オペレーティング・システムを通じて、データ・ブロックにアクセスしうる。
【００２５】
クラスター化されたネットワーク環境１００は同数のネットワーク・モジュールおよびディスク・モジュールを示しているが、他の実施形態は異なる数のこれらのモジュールを含んでいてもよいことを理解しておくべきである。たとえば、クラスター内で相互接続された複数のネットワーク・モジュールおよびディスク・モジュールがあって、ネットワーク・モジュールとディスク・モジュールとの間に一対一対応がないことがありうる。すなわち、異なるノードは異なる数のネットワーク・モジュールおよびディスク・モジュールを有することができ、同じノードがディスク・モジュールとは異なる数のネットワーク・モジュールをもつことができる。
【００２６】
さらに、ホスト装置１０８、１１０はクラスター内のノード１１６、１１８と、ストレージ・ネットワーク接続１１２、１１４を通じてネットワーク接続されることができる。例として、クラスターにネットワーク接続されるそれぞれのホスト装置１０８、１１０はクラスター内のノード１１６、１１８にサービス（たとえばデータ・パケットの形の情報の交換）を要求してもよく、ノード１１６、１１８は要求されたサービスの結果をホスト装置１０８、１１０に返すことができる。ある実施形態では、ホスト装置１０８、１１０は、データ・ストレージ・システム１０２、１０４内のノード１１６、１１８内に存在するネットワーク・モジュール１２０、１２２（たとえばネットワーク・ホスト）と情報を交換することができる。
【００２７】
ある実施形態では、データ記憶装置１２８、１３０は、ボリューム１３２を有する。ボリュームは、情報をディスク・ドライブまたはディスク・アレイまたは他のストレージ（たとえばフラッシュ）に記憶したものの、データのためのファイル・システムとしての具現である。一例では、ディスク・アレイはすべての伝統的なハードドライブ、すべてのフラッシュドライブまたは伝統的なハードドライブとフラッシュドライブの組み合わせを含むことができる。ボリュームは、たとえばディスクの一部、複数のディスクの集合または諸ディスクの諸部分にまたがることができ、典型的にはストレージ・システムにおけるディスク・スペース上のファイル記憶の全体的な論理的配置を定義する。ある実施形態では、ボリュームは、記憶されたデータを、ボリューム内の階層的なディレクトリー構造において存在する一つまたは複数のファイルとして含むことができる。
【００２８】
ボリュームは典型的には、特定のストレージ・システムに関連付けられてもよいフォーマットで構成され、それぞれのボリューム・フォーマットは典型的にはボリュームに機能を提供する、たとえばボリュームがクラスターを形成する能力を提供する特徴を有する。たとえば、第一のストレージ・システムはそのボリュームのために第一のフォーマットを利用してもよく、第二のストレージ・システムはそのボリュームのために第二のフォーマットを利用してもよい。
【００２９】
クラスター化されたネットワーク環境１００において、ホスト装置１０８、１１０はデータ・ストレージ・システム１０２、１０４を、ボリューム１３２からのデータを記憶し、取り出すために利用することができる。この実施形態において、たとえば、ホスト装置１０８はデータ・パケットをデータ・ストレージ・システム１０２内のノード１１６内のネットワーク・モジュール１２０に送ることができる。ノード１１６は該データをディスク・モジュール１２４を使ってデータ・ストレージ装置１２８に転送することができる。ここで、データ記憶装置１２８はボリューム１３２Ａを有する。このようにして、この例では、ホスト装置は、ストレージ・ネットワーク接続１１２によって接続されているデータ・ストレージ・システム１０２を使ってデータを記憶するおよび／または取り出すために、ボリューム１３２Ａにアクセスすることができる。さらに、この実施形態において、ホスト装置１１０はデータ・ストレージ・システム１０４（これはデータ・ストレージ・システム１０２からリモートであってもよい）内のノード１１８内のネットワーク・モジュール１２２とデータを交換することができる。ノード１１８は該データをディスク・モジュール１２６を使ってデータ・ストレージ装置１３０に転送することができ、それにより、データ・ストレージ装置１３０に関連付けられたボリューム１３２Ｂにアクセスすることができる。
【００３０】
複合集合体アーキテクチャーのためにストレージ抽象化層を提供することが、クラスター化されたネットワーク環境１００内で実装されうることが理解されうる。一例では、ストレージ抽象化層は、ノード１１６のデータ・ストレージ装置１２８（たとえば第一のストレージ・プロバイダー）を管理するための第一のストレージ・ビンと、ノード１１８のデータ・ストレージ装置１３０（たとえば第二のストレージ・プロバイダー）を管理するための第二のストレージ・ビンとを生成し、維持してもよい。ストレージ抽象化層は、ストレージ・ファイル・システム層の下にある間接参照層であってもよい。ストレージ抽象化層は、データ・ストレージ装置１２８、１３０が不均質な型のストレージであるにもかかわらず、データ・ストレージ装置１２８およびデータ・ストレージ装置１３０から導出される単一のストレージ集合体を、ファイル・システムに呈する。複合集合体アーキテクチャーのためのストレージ抽象化層を提供することが、任意の型のコンピューティング環境のためにおよび／または任意の型のコンピューティング環境の間で実装されてもよく、物理的な装置（たとえばノード１１６、ノード１１８、デスクトップコンピュータ、タブレット、ラップトップ、ウェアラブル装置、モバイル装置、ストレージ装置、サーバーなど）および／または（たとえばクラスター化されたネットワーク環境１００にとってリモートな）クラウド・コンピューティング環境の間で移転可能でありうることが理解されうる。
【００３１】
図２は、データ・ストレージ・システム２００（たとえば図１の１０２、１０４）の例解用の例であり、本稿に記載される技法および／またはシステムの一つまたは複数を実装しうるコンポーネントの実施形態のさらなる詳細を与えている。データ・ストレージ・システム２００はノード２０２（たとえば図１のノード１１６、１１８）およびデータ・ストレージ装置２３４（たとえば図１のデータ・ストレージ装置１２８、１３０）を有する。ノード２０２はたとえば、ストレージ・サーバーとして動作するよう特に構成された汎用コンピュータまたは他の何らかのコンピューティング装置であってもよい。ホスト装置２０５（たとえば図１の１０８、１１０）はネットワーク２１６を通じてノード２０２に接続されて、たとえば、データ・ストレージ装置２３４上に記憶されたファイルおよび／または他のデータへのアクセスを提供することができる。一例では、ノード２０２は、ホスト装置２０５のようなクライアント装置に、データ・ストレージ装置２３４内に記憶されているデータへのアクセスを提供するストレージ・コントローラを有する。
【００３２】
データ・ストレージ装置２３４は、ディスク・アレイ２１８、２２０、２２２のディスク２２４、２２６、２２８のような大容量記憶装置を含むことができる。本稿に記載される技法およびシステムがこの例示的実施形態によって限定されないことは理解されるであろう。たとえば、ディスク２２４、２２６、２２８は、磁気ディスク・ドライブ、フラッシュメモリおよびたとえばデータ（D）および／またはパリティ（P）情報を含む情報を記憶するよう適応された他の任意の同様のメディアを含むがそれに限られない、任意の型の大容量記憶装置を含んでいてもよい。
【００３３】
ノード２０２は、一つまたは複数のプロセッサ２０４と、メモリ２０６と、ネットワーク・アダプター２１０と、クラスター・アクセス・アダプター２１２と、ストレージ・アダプター２１４とがシステム・バス２４２によって相互接続されたものを有する。データ・ストレージ・システム２００は、ノード２０２のメモリ２０６にインストールされたオペレーティング・システム２０８をも含み、それがたとえば、アレイ内の故障したディスクのデータの再構成プロセスを最適化するために独立（または安価）なディスクの冗長アレイ（Redundant  Array  of  Independent  (またはInexpensive)  Disks、RAID）最適化技法を実装することができる。
【００３４】
オペレーティング・システム２０８は、データ・ストレージ・システムのための通信と、クラスター化されたネットワーク内にありうる、たとえばクラスター・ファブリック２１５（たとえば図１の１０６）に取り付けられた、他のデータ・ストレージ・システムの間の通信とを管理することもできる。このように、ネットワーク・ストレージ・コントローラのようなノード２０２は、ホスト装置要求に応答して、これらのホスト装置要求に従ってデータ・ストレージ装置２３４（たとえば、または追加的なクラスター化された装置）上のデータを管理することができる。オペレーティング・システム２０８は、しばしば、データ・ストレージ・システム２００上に一つまたは複数のファイル・システムを確立することができる。ここで、ファイル・システムは、たとえばファイルおよびディレクトリーの持続的な階層的な名前空間を実装するデータ構造およびソフトウェア・コードを含むことができる。一例として、クラスター化されたネットワーク・システムに新しいデータ・ストレージ装置（図示せず）が追加されるとき、オペレーティング・システム２０８は、その新しいデータ・ストレージ装置に関連付けられた新しいファイルが既存のディレクトリー・ツリー内でどこに格納されるべきかを通知される。これはしばしば、ファイル・システムの「マウンティング」と称される。
【００３５】
例示的なデータ・ストレージ・システム２００において、メモリ２０６は、関係したソフトウェア・アプリケーション・コードおよびデータ構造を記憶するための、プロセッサ２０４およびアダプター２１０、２１２、２１４によってアドレス指定可能な記憶位置を含むことができる。プロセッサ２０４およびアダプター２１０、２１２、２１４はたとえば、該ソフトウェア・コードを実行し、該データ構造を操作するよう構成された処理要素および／または論理回路を含んでいてもよい。オペレーティング・システム２０８は典型的にはその一部がメモリ２０６に常駐し、処理要素によって実行されるが、該オペレーティング・システム２０８は、ストレージ・システムによって実装されるファイル・サービスをサポートしてストレージ動作を呼び出すことなどによって、ストレージ・システムを機能的に組織する。当業者には、他の処理およびメモリ機構（さまざまなコンピュータ可読媒体を含む）が、本稿に記載される技法に関するアプリケーション命令を記憶および／または実行するために使用されうることは明白であろう。たとえば、オペレーティング・システムは、仮想マシンのプロビジョニングを支援するために、一つまたは複数の制御ファイル（図示せず）をも利用することができる。
【００３６】
ネットワーク・アダプター２１０は、データ・ストレージ・システム２００をネットワーク２１６を通じてホスト装置２０５に接続するために必要とされる機械的、電気的および信号伝達の回路を含む。ネットワーク２１６は、ポイントツーポイント接続または共有される媒体、たとえばローカルエリアネットワークを含んでいてもよい。ホスト装置２０５（たとえば図１の１０８、１１０）はアプリケーションを実行するよう構成された汎用コンピュータであってもよい。上記のように、ホスト装置２０５は、情報送達のクライアント／ホスト・モデルに従って、データ・ストレージ・システム２００と対話してもよい。
【００３７】
ストレージ・アダプター２１４は、ホスト装置２０５によって要求された情報にアクセスする（たとえばネットワーク・ストレージ・コントローラによって管理されるストレージ装置上のデータにアクセスする）ために、ノード２０２上で実行されているオペレーティング・システム２０８と協働する。該情報は、磁気ディスク・ドライブ、フラッシュメモリおよび／または情報を記憶するよう適応された他の同様のメディアといった書き込み可能なメディアの、任意の型の取り付けられたアレイに記憶されてもよい。例示的なデータ・ストレージ・システム２００では、該情報は、ディスク２２４、２２６、２２８上のデータ・ブロックにおいて記憶されることができる。ストレージ・アダプター２１４は、ストレージエリアネットワーク（SAN）プロトコルのようなI/O相互接続配置（たとえばスモールコンピュータシステムインターフェース（SCSI）、iSCSI、ハイパーSCSI、ファイバーチャネルプロトコル（FCP））を通じて諸ディスクに結合する入出力（I/O）インターフェース回路を含むことができる。該情報はストレージ・アダプター２１４によって取り出され、必要なら、前記一つまたは複数のプロセッサ２０４（またはストレージ・アダプター２１４自身）によって処理されてから、システム・バス２４２を通じてネットワーク・アダプター２１０に（および／または、クラスター内の別のノードに送信する場合にはクラスター・アクセス・アダプター２１２に）転送され、そこで、該情報はデータ・パケットにフォーマットされ、ネットワーク２１６を通じてホスト装置２０５に返される（および／またはクラスター・ファブリック２１５を通じて、クラスターに取り付けられている別のノードに返される）。
【００３８】
ある実施形態では、ディスク・アレイ２１８、２２０、２２２上の情報の記憶は、ディスク・スペースの全体的な論理的配置を定義するディスク２２４、２２６、２２８のクラスターで構成される一つまたは複数のストレージ・ボリューム２３０、２３２として実装されることができる。一つまたは複数のボリュームをなすディスク２２４、２２６、２２８は典型的には、RAIDの一つまたは複数のグループとして編成される。一例として、ボリューム２３０は、ディスク２２４および２２６のクラスターを含むディスク・アレイ２１８および２２０の集合体を含む。
【００３９】
ある実施形態では、ディスク２２４、２２６、２２８へのアクセスを容易にするために、オペレーティング・システム２０８は、情報を、ディスク上のディレクトリーおよびファイルの階層構造として論理的に組織化するファイル・システム（たとえばライトエニウェアファイルシステム（write  anywhere  file  system））を実装してもよい。この実施形態では、それぞれのファイルは、情報を記憶するよう構成された一組のディスク・ブロックとして実装されてもよい。一方、ディレクトリーは、他のファイルおよびディレクトリーについての情報が格納される、特別にフォーマットされたファイルとして実装されてもよい。
【００４０】
このデータ・ストレージ・システム２００内の根底にある物理的構成がどうであれ、データは、物理的および／または仮想的なボリューム内のファイルとして記憶されることができる。ボリュームはそれぞれのボリューム識別子、たとえば一例では32ビットの長さでありうるファイル・システム識別子（file  system  identifier、FSID）と関連付けられることができる。
【００４１】
物理的なボリュームは、アドレス、アドレス指定可能なスペース、位置などが変化しない物理的なストレージ装置の少なくとも一部、たとえば一つまたは複数のデータ・ストレージ装置２３４（たとえば独立な（または安価な）ディスクの冗長アレイ（RAIDシステム））の少なくともいくつかに対応する。典型的には、物理的なボリュームの位置は、それにアクセスするために使われるアドレス（の範囲）が一般には一定のままであるという意味で、変化しない。
【００４２】
対照的に、仮想ボリュームは、異なる物理的なストレージ装置の別個の部分の集合体に記憶される。仮想ボリュームは、異なる物理的なストレージ装置位置の異なる利用可能な部分の集まり、たとえばディスク２２４、２２６および／または２２８のそれぞれからのいくらかの利用可能なスペースであってもよい。仮想ボリュームは、どの一つの特定のストレージ装置にも「結びつけられて」いないので、仮想ボリュームは、抽象化または仮想化の層を含むと言うことができる。そのため、仮想ボリュームは、サイズ変更されるおよび／またはいくつかの点で柔軟であることができる。
【００４３】
さらに、仮想ボリュームは、一つまたは複数の論理ユニット番号（logical  unit  number、LUN）２３８、ディレクトリー２３６、Qツリー２３５およびファイル２４０を含むことができる。中でも、これらの特徴、特にLUNSのため、その中にデータが記憶される別個のメモリ位置が、データ記憶ユニットとしてたとえば識別され、グループ化されることができる。よって、LUN  ２３８は、前記集合体内で仮想ボリューム内のデータが記憶されている仮想ディスクまたはドライブを構成するものとして特徴付けられてもよい。たとえば、LUNはしばしば仮想ドライブと称され、実際にはボリュームのさまざまな部分に記憶されたデータ・ブロックを含むのに、汎用コンピュータのハードドライブをエミュレートする。
【００４４】
ある実施形態では、一つまたは複数のデータ記憶装置２３４は一つまたは複数の物理ポートを有することができる。各物理ポートは目標アドレス〔ターゲット・アドレス〕（たとえばSCSI目標アドレス）を割り当てられることができる。データ・ストレージ装置上に記憶されたそれぞれのボリュームを表わすために、データ・ストレージ装置上の目標アドレスが、一つまたは複数のLUN  ２３８を同定するために使用されることができる。こうして、たとえば、ノード２０２がストレージ・アダプター２１４を通じてボリューム２３０、２３２に接続するとき、ノード２０２と、ボリュームの根底にある前記一つまたは複数のLUN  ２３８との間の接続が生成される。
【００４５】
ある実施形態では、それぞれの目標アドレスは複数のLUNを同定することができ、目標アドレスは複数のボリュームを表わすことができる。I/Oインターフェースは、たとえばストレージ・アダプター２１４内の回路および／またはソフトウェアとして、あるいはメモリ２０６に存在しプロセッサ２０４によって実行される実行可能コードとして、実装でき、一つまたは複数のLUN  ２３８を同定する一つまたは複数のアドレスを使ってボリューム２３０に接続できる。
【００４６】
複合集合体アーキテクチャーのためのストレージ抽象化層を提供することが、データ・ストレージ・システム２００について実装されうることが理解されうる。一例では、ストレージ抽象化層は、ノード２０２（たとえば第一のストレージ・プロバイダー）のストレージを管理するために第一のストレージ・ビンを生成し、維持してもよい。ストレージ抽象化層は、他のノードのストレージ（たとえばノード２０２のストレージとは異なる特性をもつストレージ装置）を管理するために他のストレージ・ビンを維持してもよい。このようにして、ストレージ抽象化層は、ノード２０２のストレージおよび／または他のストレージ・プロバイダーのストレージから導出された単一のストレージ集合体を生成し、ファイル・システムに呈する。複合集合体アーキテクチャーのためのストレージ抽象化層を提供することが、任意の型のコンピューティング環境のためにおよび／または任意の型のコンピューティング環境の間で実装されてもよく、物理的な装置（たとえばノード２０２、ホスト装置２０５、デスクトップコンピュータ、タブレット、ラップトップ、ウェアラブル装置、モバイル装置、ストレージ装置、サーバーなど）および／または（たとえばノード２０２および／またはホスト装置２０５にとってリモートな）クラウド・コンピューティング環境の間で移転可能でありうることが理解されうる。
【００４７】
複合集合体アーキテクチャーのためのストレージ抽象化層を提供することの一つの実施形態が図３の例示的方法３００によって示される。ストレージ抽象化層（storage  abstraction  layer）（たとえば、透明なインターフェースをさまざまなストレージ・プロバイダーに提供することのできる、一組のクラス、機能、プロトコル機能、ポリシー、ネットワーク通信機能、ストレージ管理機能など）は、ファイル・システム（たとえばストレージ・ファイル・システム）とストレージ環境（たとえば、一つまたは複数のネットワークを通じてアクセス可能なストレージ・プロバイダー）との間の間接参照層として利用されることができる。ストレージ抽象化層は、複数の型のストレージ・プロバイダーおよびストレージ装置の間でデータがどこにどのように記憶されるかに関する詳細を抽象化して見えなくする。たとえば、ストレージ抽象化層は、ファイル・システムにとって単一のストレージ・コンテナであるように見えるストレージ集合体／プールを呈してもよい。こうして、ファイル・システムは単にその単一のストレージ・コントローラに対して読み書きを行なうだけである。それでも、ストレージ抽象化層が読み書き要求を受け止めて、どこで、どのようにデータを記憶し、取り出すかを決定する。
【００４８】
３０２では、ストレージ抽象化層が、ストレージ環境の不均質な型のストレージへのアクセスを提供する複数のストレージ・プロバイダーの特性を取得する。該特性は、レイテンシー、記憶容量、ストレージ装置／メディアの型（たとえば磁気ストレージ、固体／フラッシュ・ストレージ、クラウド・ストレージ、高可用性ストレージ、メモリまたはNVRAM、ローカルに取り付けられているストレージ、リモート・ストレージ、シングル磁気記録ストレージなど）、I/Oアクセス・サイズ、ガーベージ収集ポリシー、サポートされるストレージ・アクセス・プロトコル、使用される暗号化、どのようにデータが格納されるか（たとえば特定のサイズをもつデータのブロックとして格納される）、どのようにデータが参照／インデックス付けされるか（たとえばオブジェクトIDと、特定のデータについての該オブジェクトID内でのオフセットとによって参照される、物理的なブロック番号によって参照される、論理的なブロック番号によって参照される、ファイル名によって参照される、オフセットによって参照される、など）などに関係していてもよい。
【００４９】
一例では、ストレージ抽象化層は、ノードおよびそのストレージの特性を得るために、ローカルに取り付けられたデータ・ストレージへの高い可用性のアクセスを提供する第一のノードおよび第二のノード（たとえば高可用性ノード対）と通信してもよい。別の例では、ストレージ抽象化層は、分散されたストレージ・プロバイダーおよびオブジェクト・ストレージの特性を得るために、ネットワークを通じて、オブジェクト・ストレージを提供する分散されたオブジェクト・ストレージ・プロバイダー（たとえば、サードパーティー・プロバイダーによって提供されるクラウド・ストレージ）に通信してもよい。このように、前記特性を得るために、多様なストレージ・プロバイダーがアクセスされうる。ストレージ抽象化層は複数の異なる型のストレージ・プロバイダーとインターフェースをもつことができるので、ファイル・システムは任意の数のノードにまたがってホストされることができ、ストレージ抽象化層は、複数の異なる型のノードおよびストレージ・プロバイダーによってホストされるストレージから、集合体を生成することができる。
【００５０】
３０４では、第一のストレージ・プロバイダーの第一のストレージを管理するために、ストレージ抽象化層によって、第一のストレージ・ビンが生成されてもよい。第一のストレージ・ビンは、第一のストレージ・プロバイダーの第一の特性に基づいて構成されてもよい。たとえば、第一のストレージ・ビンは、第一のストレージ・プロバイダーによって使用される特定のプロトコルおよびI/Oアクセス・サイズを使って、第一のストレージ・プロバイダー（たとえば固体ストレージ・プロバイダー）にアクセスするよう構成されてもよい。第一のストレージ・ビンは、第一のストレージ・プロバイダーに関連付けられたある種の型の圧縮、暗号化、ガーベージ収集ポリシー、データ・フォーマットおよび／またはデータ参照フォーマット（たとえば、物理的なブロック番号、論理的なブロック番号、ファイル名、オブジェクト識別子、オフセットなどによってデータを参照する）を使うよう構成されてもよい。
【００５１】
３０６では、第二のストレージ・プロバイダーの第二のストレージを管理するために、ストレージ抽象化層によって、第二のストレージ・ビンが生成されてもよい。第二のストレージ・ビンは、第二のストレージ・プロバイダーの第二の特性に基づいて構成されてもよい。たとえば、第二のストレージ・ビンは、第二のストレージ・プロバイダーによって使用されるプロトコルおよびI/Oアクセス・サイズを使って、第二のストレージ・プロバイダー（たとえばクラウド・ストレージ・プロバイダー）にアクセスするよう構成されてもよい。第二のストレージ・ビンは、第二のストレージ・プロバイダーに関連付けられたある種の型の圧縮、暗号化、ガーベージ収集ポリシー、データ・フォーマットおよび／またはデータ参照フォーマット（たとえば、物理的なブロック番号、論理的なブロック番号、ファイル名、オブジェクト識別子、オフセットなどによってデータを参照する）を使うよう構成されてもよい。
【００５２】
ストレージ抽象化層が、任意の数のストレージ・プロバイダーについて、任意の数のストレージ・ビンを生成して、それらのストレージ・プロバイダーについて物理的なデータ記憶の詳細をストレージ抽象化層が抽象化して、ファイル・システムに見えなくすることが理解されうる。ストレージ・プロバイダーは、種々の仕方でデータを記憶し、種々の仕方でデータへのアクセスを提供しうる。たとえば、第一のストレージ・プロバイダーは、データを読み書きするために、4キロバイトI/Oサイズのような第一のI/Oサイズをサポートしてもよい。対照的に、第二のストレージ・プロバイダーは、1ギガバイトまでの制約されない範囲など、第二のI/Oサイズをサポートしてもよい。たとえば、クラウド・ストレージ・プロバイダーには、ネットワーク帯域幅および処理資源をより効率的に利用しうるメガバイトまたはギガバイトの範囲のチャンクなど、より大きなチャンクでデータを送ったほうが効率的であることがある。たとえファイル・システムが第一のI/Oサイズしかサポートしていなくても、ストレージ抽象化層は、第二のストレージ・ビンを仲介インターフェースとして使って、第二のI/Oサイズを使ってデータがどのようにしてクラウド・ストレージ・プロバイダーに送られ、クラウド・ストレージ・プロバイダー内に記憶され、クラウド・ストレージ・プロバイダーからアクセスされるかの詳細を扱うことができる。
【００５３】
３０８では、第一のストレージ型を有する第一のストレージ（たとえば第一のストレージ・プロバイダーによって提供される固体ドライブ・ストレージ）、第一のストレージ型とは異なる第二のストレージ型を有する第二のストレージ（たとえばクラウド・ストレージ・プロバイダーによって提供されるオブジェクト・ストレージ）および／または他のストレージ・プロバイダーからの他のストレージから、ストレージ抽象化層によってストレージ集合体が生成される。ストレージ抽象化層は、各ストレージ・プロバイダーの各ストレージ内でどこで、どのようにしてデータを記憶し、データにアクセスするかを管理するために、個々のストレージ・ビンを使う。３１０では、ストレージ集合体がファイル・システムに単一のストレージ・コンテナとして呈される。たとえば、ストレージ抽象化層は、ストレージ集合体が実際には複数のストレージ・プロバイダーからのストレージの諸部分で構成されているという概念を抽象化によって見えなくしつつ、ストレージ集合体を単一のボリューム、単一のLUNまたは他のデータ・コンテナとして呈してもよい。一例では、ストレージ抽象化層はストレージ・プロバイダーの特性の部分集合をファイル・システムに呈するだけであってもよい（たとえば、ストレージの型は呈されるが、どのくらい古い／ステールなデータ・ブロックが解放、上書きされるかなど他の特性は呈されない）。
【００５４】
ストレージ抽象化層は、ファイル・システムからの複数のデータを、ストレージ・ビンを通じて、複数のストレージ・プロバイダーの対応するストレージに、データの特性およびストレージ・プロバイダーの特性に基づいて選択的に記憶するために利用される。特性は、逐次アクセス特性、ランダム・アクセス特性、ユーザー・データ特性、メタデータ特性（たとえば複製ポリシー、バックアップ・ポリシー、LUN構成、パートナー・ノードの識別情報および／またはファイル・システムまたはノードによって動作のために使用される他のメタデータ）、頻繁にアクセスされる特性（たとえば、閾値より高いアクセス頻度／パターンをもつホットなデータ）、低頻度でアクセスされる特性（たとえば、前記閾値を下回るアクセス頻度／パターンをもつコールドなデータ）などに対応してもよい。ストレージ抽象化層は、どの型のストレージおよびストレージ・プロバイダーが、ある種の型のデータを記憶するためにより好適であるかを決定するよう構成される（たとえば、低頻度でアクセスされるユーザー・データを記憶するにはクラウド・ストレージ・プロバイダーがよりコスト効率がよいことがあり、一方、頻繁にアクセスされるメタデータのためにはシングル磁気記録ストレージ・プロバイダーがよりよいことがあり、ミッションクリティカルなデータのためには追加的な冗長性をもつ高可用性ストレージ・プロバイダーのほうがよいことがある）。
【００５５】
一例では、ファイル・システムから、ストレージ集合体内に第一のデータを記憶するという要求が受領されてもよい。ストレージ集合体は単一のストレージ・コンテナとして呈されるので、要求はどのストレージ・プロバイダーおよび／またはどの型のストレージに第一のデータが記憶されるかを指定しない。よって、ストレージ抽象化層は、第一のストレージ・ビンを通じて、第二のストレージではなく第一のストレージの第一の記憶位置に第一のデータを選択的に記憶してもよい。これは、第一のデータのデータ特性が第一のストレージ・プロバイダーの特性（たとえば、第一のストレージは、第二のストレージよりも、逐次アクセスされるデータを記憶するために、より効率的でありうる）に対応することに基づく。何らかの時点において、ストレージ抽象化層は、第一のデータが第一のストレージ内の第一の記憶位置から第二のストレージ・プロバイダーの第二のストレージ内の第二の記憶位置に移されるべきであると決定してもよい。よって、ストレージ抽象化層は、第一のデータを第一のストレージから第二のストレージの第二の記憶位置に移す。ストレージ抽象化層がストレージ集合体のデータの物理的な記憶の詳細を抽象化してファイル・システムから見えなくするので、これは、ファイル・システムには透明に実行されうる。
【００５６】
第一のデータを新しいデータで上書きするという上書き要求が、ファイル・システムから、ストレージ抽象化層によって受領されてもよい。ファイル・システムがライトエニウェアファイルシステムである例では、新しいデータは第一のデータの現在位置（たとえば第二のストレージの前記第二の記憶位置）に書き込まれなくてもよく、空いている／利用可能な異なる位置に書き込まれる。よって、何らかの時点において、その現在位置にある第一のデータはガーベージ収集されて、該現在位置が解放されて他のデータを記憶するために利用可能になるようにする必要がある。ひとたび前記異なる位置に新しいデータが書き込まれたら、前記第二の記憶位置にある前記第一のデータは古くなるからである。ストレージ抽象化層は、前記書き込み要求の前記新しいデータを、第三の記憶位置に新しい第一のデータとして記憶してもよい。第三の記憶位置は、第一のストレージ内の、第一のデータが以前、移動／移行される前に位置していたところであってもよく、あるいは第二のストレージ内の、第一のデータが第二の記憶位置に現在位置しているところであってもよく、あるいは他の任意のストレージ・プロバイダーの他の任意のストレージ内であってもよい。前記第三の記憶位置にある前記新しい第一のデータが最新のバージョンなので前記第二の記憶位置は解放されてデータ記憶のために利用可能になることができるよう、前記第二の記憶位置における前記第一のデータを、ガーベージ収集のためにマークするよう、第二のストレージ・ビンが使われてもよい。ガーベージ収集は、ファイル・システムには透明な仕方で、ストレージ・プロバイダー上で、ストレージ・プロバイダーごとに容易にされうる（たとえば、異なるストレージ・プロバイダーについては異なるガーベージ収集ポリシーが実装されてもよい）。
【００５７】
一例では、ストレージ抽象化層は、データに関するさまざまなメトリックを追跡してもよい。メトリックは、第一のストレージ内のデータ（A）へのアクセスの第一の頻度、第二のストレージ内のデータ（B）へのアクセスの第二の頻度などである。ストレージ抽象化層が第一のアクセス頻度が第一のストレージについて第一のストレージ・ビンによって設定された閾値より低いと判定することに応答して、データ（A）は、第一のストレージから第一のストレージ・ビンのログに累積されてもよい。ストレージ抽象化層が第二のアクセス頻度が第二のストレージについて第二のストレージ・ビンによって設定された閾値より低いと判定することに応答して、データ（B）は、第二のストレージから第二のストレージ・ビンの第二のログに累積されてもよい。
【００５８】
ストレージ抽象化層は、第一のストレージについての第一のストレージ・ビンのログに、閾値量のデータが累積したことを判別してもよい（たとえば、閾値量のコールド・データが固定ドライブ・ストレージ・プロバイダーの固定ドライブ・ストレージから第一のストレージ・ビンに収集されてもよい）。よって、ストレージ抽象化層は、第二のストレージのデータ・フォーマットに対応する、データ（A）のような前記ログからの累積されたデータを含むストレージ・オブジェクトを生成してもよい（たとえば、クラウド・ストレージ・プロバイダーがデータを諸オブジェクト内に格納してもよい）。このようにして、ストレージ・オブジェクトはさまざまなファイル、ディレクトリー、アプリケーションなどのデータを含みうる。ストレージ抽象化層はストレージ・オブジェクトを、第二のストレージ・ビンを通じて、第二のストレージ内での記憶のために、第二のストレージ・プロバイダーに送る。任意の型のストレージ・プロバイダーからの累積されたデータが、累積されたデータの宛先と整合する任意の型のデータ・オブジェクト／コンテナ（たとえば、ブロック・ベースのデータ・フォーマット、ファイル、LUN、ストレージ・オブジェクト、データベース・ファイルなど）を生成するために使用されうることが理解されうる。ストレージ抽象化層は、オブジェクト・メタファイルに、一つまたは複数のエントリー指示を入れてもよい。ストレージ・オブジェクト内にどのデータが記憶されるか（たとえば、データを参照するためにファイル・システムによって使用されるデータ参照情報、たとえば仮想ブロック番号）およびストレージ・オブジェクトのオブジェクト識別子およびそのようなデータのオフセットである。
【００５９】
ストレージ抽象化層は、ファイル・システムからデータ（A）に対するアクセス要求を受領してもよい（たとえば、ファイル・システムは、データ（A）の位置が今は第二のストレージ・プロバイダーの第二のストレージに記憶されているストレージ・オブジェクト内であることを知らなくてもよい）。一例では、アクセス要求は、ストレージ集合体内のデータ（A）を参照するためにファイル・システムによって使用される物理的なボリューム・ブロック番号または他の任意の識別子を含む。ストレージ抽象化層は、物理的なボリューム・ブロック番号を使ってオブジェクト・メタファイルに問い合わせして、ストレージ・オブジェクトのオブジェクト識別子およびストレージ・オブジェクト内のデータ（A）のオフセットを識別してもよい。オブジェクト識別子およびオフセットは、第二のストレージ・プロバイダーによって第二のストレージ内に記憶されているストレージ・オブジェクト内のデータ（A）へのアクセスを第二のストレージ・ビンを通じて提供するために使われてもよい。このようにして、ファイル・システムは、データ（A）が、今第二のストレージ内に記憶されている、無関係であるかもしれない他のデータとともに前記ストレージ・オブジェクト内に含まれているにもかかわらず、データ（A）にアクセスしうる。
【００６０】
ストレージ抽象化層は、ストレージ・プロバイダーのストレージ内に記憶されたデータへの参照の参照回数を追跡してもよい（たとえば、ストレージ抽象化層は、ストレージ集合体についてファイル・システムによって追跡されるものに従うのではなく、それぞれのストレージ・プロバイダーの個々のストレージについて自分自身のガーベージ収集を提供してもよい）。たとえば、第一のストレージ・ビンは、第一のストレージ内のデータへの参照の参照回数を追跡するために使われてもよい。参照回数は、第一のストレージから、参照回数が0のデータを解放するために使用されてもよい。そのようなデータは、データの現在位置に新しいデータを上書きせずオープンな／空いている記憶位置に新しいデータを書き込むライトエニウェアファイルシステムによって他所に書き込まれている新しいデータのために古くなっている／不使用であることがありうるからである。
【００６１】
ストレージ抽象化層は、ファイル・システムのストレージ効率を保存するよう構成されてもよい。一例では、ストレージ抽象化層は、ファイル・システムから圧縮されたデータを受領してもよい。ストレージ抽象化層は該圧縮されたデータを、圧縮された状態で第一のストレージ内に記憶してもよい。あるいはまた、圧縮されるべき未圧縮のデータがファイル・システムから受領されたり、あるいはストレージ・プロバイダーから取得されたりしてもよい。よって、ストレージ抽象化層は（たとえばストレージ・ビンまたはログ内の）未圧縮のデータに対して圧縮を実行し、次いで、圧縮されたデータを特定のストレージ・プロバイダーに送ってもよい。
【００６２】
別の例では、ストレージ抽象化層は、ファイル・システムから暗号化されたデータを受領してもよい。ストレージ抽象化層は暗号化されたデータを、暗号化された状態で第一のストレージ内に記憶してもよい。あるいはまた、暗号化されるべき非暗号化データがファイル・システムから受領されたり、あるいはストレージ・プロバイダーから取得されたりしてもよい。よって、ストレージ抽象化層は（たとえばストレージ・ビンまたはログ内の）非暗号化データを暗号化し、次いで、暗号化されたデータを特定のストレージ・プロバイダーに送ってもよい。
【００６３】
別の例では、ストレージ抽象化層は、ファイル・システムによって提供される重複除去を保存してもよい。たとえば、ストレージ抽象化層はデータに対する参照の、独自の参照回数計数を維持してもよい。
【００６４】
一例では、データがストレージ・プロバイダー間で移動される場合、データはログに入れられてもよく、次いで、ログ内の該データに対して圧縮、暗号化および／または他のストレージ効率機能が、そのような機能を保存するために、実行されてもよい。
【００６５】
図４は、複合ストレージ・アーキテクチャーを有するシステム４００の例を示している。ファイル・システムは、ストレージ・ファイル・システム層４０４で動作してもよい。クライアントは、ストレージ・ファイル・システム・アクセス層４０２を通じてファイル・システムにアクセスしてもよい。たとえば、クライアントは、ストレージ・ファイル・システム・アクセス層４０２を通じてファイル・システムに読み出しコマンド、書き込みコマンド、生成コマンドおよび／または他のコマンドを送ってもよい。ストレージ抽象化層４０６は、ストレージ・ファイル・システム層４０４のようなファイル・システムとストレージ環境４２８との間の間接参照／中間層として提供されてもよい。ストレージ抽象化層４０６はストレージ・ファイル・システム層４０４の下にあってもよい。
【００６６】
ストレージ抽象化層（storage  abstraction  layer）４０６は、ストレージ環境４２８内のストレージ・プロバイダーの特性を取得してもよい。それらの特性に基づいて、ストレージ抽象化層４０６は、それらのストレージ・プロバイダーのストレージを管理するためのストレージ・ビンを生成する。各ストレージ・ビン（storage  bin）は、特定のストレージ・プロバイダーに合わせて仕立てられている。各ストレージ・プロバイダーによって提供されるストレージの型が異なる特性をもつことがありうるからである（たとえば、ある種のストレージはランダム・アクセスまたは逐次アクセスについて、よりよい性能を発揮しうる；ある種のストレージはよりよい冗長性を提供しうる；ある種のストレージ・プロバイダーはより高い安全性を提供しうる；ある種のストレージ・プロバイダーは、データへの、より高い可用性を提供しうる；など）。たとえば、固体ドライブ・ストレージ・プロバイダー４１８について、固定ドライブ・ストレージ・ビン４０８が生成されてもよい。固定ドライブ・ストレージ・ビン４０８は、固体ドライブ・ストレージ・プロバイダー４１８の固体ドライブ・ストレージ内でどこでどのようにしてデータを記憶するかを決定し、どんなプロトコルを使用するかを設定し、どんなガーベージ収集技法を使用するかを設定し、固体ドライブ・ストレージ・プロバイダー４１８のためのコールド／ホット・データを判別するための閾値を設定し、どんな圧縮を使用するかを設定し、冗長性ポリシーを設定し、セキュリティ・ポリシーを設定し、どんなI/Oアクセス・サイズを使用するかを設定し、どんなデータ・フォーマットを使用するかを設定し、どのようにして特定のデータを参照／同定するかを決定するなどしてもよい。
【００６７】
ハードディスクドライブ・ストレージ・プロバイダー４２０について、ハードディスクドライブ・ストレージ・ビン４１０が生成されてもよい。ハードディスクドライブ・ストレージ・ビン４１０は、ハードディスクドライブ・ストレージ・プロバイダー４２０のハードディスクドライブ・ストレージ内でどこでどのようにしてデータを記憶するかを決定し、どんなプロトコルを使用するかを設定し、どんなガーベージ収集技法を使用するかを設定し、ハードディスクドライブ・ストレージ・プロバイダー４２０のためのコールド／ホット・データを判別するための閾値を設定し、どんな圧縮を使用するかを設定し、冗長性ポリシーを設定し、セキュリティ・ポリシーを設定し、どんなI/Oアクセス・サイズを使用するかを設定し、どんなデータ・フォーマットを使用するかを設定し、どのようにして特定のデータを参照／同定するかを決定するなどしてもよい。
【００６８】
オブジェクト・ストレージ・プロバイダー４２２（たとえば、オブジェクト内にデータを記憶するクラウド・ストレージ・プロバイダー）について、オブジェクト・ストレージ・ビン４１２が生成されてもよい。オブジェクト・ストレージ・ビン４１２は、オブジェクト・ストレージ・プロバイダー４２２のオブジェクト・ストレージ内でどこでどのようにしてデータを記憶するかを決定し、どんなプロトコルを使用するかを設定し、どんなガーベージ収集技法を使用するかを設定し、オブジェクト・ストレージ・プロバイダー４２２のためのコールド／ホット・データを判別するための閾値を設定し、どんな圧縮を使用するかを設定し、冗長性ポリシーを設定し、セキュリティ・ポリシーを設定し、どんなI/Oアクセス・サイズを使用するかを設定し、どんなデータ・フォーマットを使用するかを設定し、どのようにして特定のデータを参照／同定するかを決定するなどしてもよい。
【００６９】
シングル磁気記録ストレージ・プロバイダー４２４について、シングル磁気記録ストレージ・ビン４１４が生成されてもよい。シングル磁気記録ストレージ・ビン４１４は、シングル磁気記録ストレージ・プロバイダー４２４のストレージ内でどこでどのようにしてデータを記憶するかを決定し、どんなプロトコルを使用するかを設定し、どんなガーベージ収集技法を使用するかを設定し、シングル磁気記録ストレージ・プロバイダー４２４のためのコールド／ホット・データを判別するための閾値を設定し、どんな圧縮を使用するかを設定し、冗長性ポリシーを設定し、セキュリティ・ポリシーを設定し、どんなI/Oアクセス・サイズを使用するかを設定し、どんなデータ・フォーマットを使用するかを設定し、どのようにして特定のデータを参照／同定するかを決定するなどしてもよい。
【００７０】
高可用性ストレージ・プロバイダー４２６（たとえば、高い可用性の構成に従って構成された二つのノード）について、高可用性ストレージ・ビン４１６が生成されてもよい。高可用性ストレージ・ビン４１６は、高可用性ストレージ・プロバイダー４２６のストレージ内でどこでどのようにしてデータを記憶するかを決定し、どんなプロトコルを使用するかを設定し、どんなガーベージ収集技法を使用するかを設定し、高可用性ストレージ・プロバイダー４２６のためのコールド／ホット・データを判別するための閾値を設定し、どんな圧縮を使用するかを設定し、冗長性ポリシーを設定し、セキュリティ・ポリシーを設定し、どんなI/Oアクセス・サイズを使用するかを設定し、どんなデータ・フォーマットを使用するかを設定し、どのようにして特定のデータを参照／同定するかを決定するなどしてもよい。
【００７１】
このようにして、ストレージ抽象化層４０６は、さまざまなストレージ・プロバイダーによって提供される異なる型のストレージを個々に管理するためにストレージ・ビンを使うことができる。ストレージ抽象化層４０６は、さまざまなストレージ・プロバイダーが異なる型のストレージをホストし、異なるデータ・フォーマットを使用し、異なる仕方（たとえば物理ブロック番号、ファイル名、オフセット、仮想ブロック番号など）でデータを参照し異なるストレージ・プロトコルを使用し、異なるI/Oアクセス・サイズを使用するなどしているにもかかわらず、該さまざまなストレージ・プロバイダーからのストレージの諸部分からなるストレージ集合体を生成することができる。ストレージ集合体は、ストレージ・ファイル・システム層４０４のファイル・システムに、単一のストレージ・コンテナとして呈されることができる。このようにして、ストレージ抽象化層４０６は、それらのストレージ・プロバイダーを横断してデータを物理的に送ること、記憶すること、取り出すことおよび管理することの詳細を抽象化して見えなくする（たとえば、ファイル・システムは単にストレージ集合体に対して書き込みコマンドを発すればよく、ストレージ抽象化層４０６が、特定のストレージ・プロバイダーにその書き込みコマンドのデータを選択的に記憶するために使用すべき特定のストレージ・ビンを選択してもよい）。
【００７２】
図５Ａ〜図５Ｅは、複合集合体アーキテクチャーのためのストレージ抽象化層５１２を提供するためのシステム５００の例を示している。ストレージ抽象化層５１２は、図５Ａに示されるように、ファイル・システム５０６とストレージ環境との間の間接参照層として設けられてもよい。ストレージ環境は、ストレージ抽象化層５１２にとってアクセス可能なストレージ・プロバイダー、たとえば固体ドライブ・ストレージ・プロバイダー５２６、ハードディスクドライブ・ストレージ・プロバイダー５２８、オブジェクト・ストレージ・プロバイダー５３０（たとえばサードパーティーによってホストされるクラウド・ストレージ・プロバイダー）および／または他のローカルもしくはリモートなストレージ・プロバイダーとして定義されてもよい。
【００７３】
ストレージ抽象化層５１２は、それらのストレージ・プロバイダーの特性を取得してもよい。特性は、I/Oアクセス・サイズ、レイテンシー、通信プロトコル、ストレージがある種の型のアクセス（たとえばランダム・アクセス、逐次アクセス、頻繁なアクセス、低頻度のアクセスなど）により好適であるかどうかについての指示、どのようにデータがアドレス指定／参照されるか、可用性（たとえばフェイルオーバー動作が提供されるかどうか）、冗長性、バックアップ、ガーベージ収集などである。
【００７４】
ストレージ抽象化層５１２は、これらの特性を使って、ストレージ・プロバイダーのストレージを管理するためのストレージ・ビン（たとえば機能、方法、ポリシー、クラスなどを構成される）を生成してもよい。固体ドライブ・ストレージ・ビン５１８、ハードディスクドライブ・ストレージ・ビン５２０、オブジェクト・ストレージ・ビン５２２などである。ストレージ・ビン（storage  bin）は、データの特性が対応するストレージ・プロバイダーの特性にマッチし、よって対応するストレージ・プロバイダーのストレージ内に格納されるのにふさわしいかどうか、さもなくば異なるストレージ・プロバイダーのストレージ内に格納されるべきかどうかを判定するよう構成されてもよい。ストレージ・ビンは、対応するストレージ・プロバイダーのストレージ内でどこにどのようにデータを記憶するかを決定するよう構成されてもよい。ストレージ・ビンは、冗長性ポリシー情報、バックアップ・ポリシー情報、複製ポリシー情報、圧縮情報、暗号化情報、重複除去情報、ガーベージ収集情報、ホットなデータおよびコールドなデータを識別するために使われるアクセス・メトリック、どんな型のデータが対応するストレージ・プロバイダーのストレージ内に記憶されるか（たとえばユーザー・データ、メタデータ、頻繁にアクセスされるデータ、頻度にアクセスされないデータ、逐次データ、ランダム・データ、暗号化されたデータ、圧縮されたデータ、冗長データまたはバックアップ・データなど）および／または対応するストレージ・プロバイダーのストレージのために実装すべき他の機能およびポリシーを決定するよう構成されてもよい。このようにして、ストレージ抽象化層５１２は、ファイル・システム５０６の暗号化、圧縮、重複除去などを保存するなどといった、ストレージ効率保存機能５１４を有する。
【００７５】
ストレージ抽象化層５１２は、固体ドライブ・ストレージ・プロバイダー５２６の固体ドライブ・ストレージ、ハードディスクドライブ・ストレージ・プロバイダー５２８のハードディスクドライブ・ストレージ、オブジェクト・ストレージ・プロバイダー５３０のオブジェクト・ストレージおよび／または他のストレージ・プロバイダーの他の型のストレージ（たとえばシングル磁気記録ストレージ、NVRAM、高い可用性のノード対によって提供される高可用性ストレージ、ローカルに取り付けられたストレージ、リモートに取り付けられたストレージ、NASプロトコルを通じてアクセスするストレージ、SANプロトコルを通じてアクセスするストレージなど）からストレージ集合体５１０を構築してもよい。このようにして、ストレージ集合体５１０は、不均質な型のストレージから構成され、ファイル・システム５０６に対しては単一のデータ・コンテナとして呈される。データがどのようにしてどこに記憶され、管理されるかの詳細はストレージ抽象化層５１２が、抽象化により見えなくする。
【００７６】
ファイル・システム５０６は、クライアント５０２にストレージ集合体５１０へのアクセスを提供してもよい。ファイル・システム５０６はストレージ集合体を単一のデータ・コンテナとして見るので、ファイル・システム５０６はストレージ集合体５１０またはその一部を、クライアント５０２に対して、単一のデータ・コンテナ（たとえば単一のボリューム、単一のLUNなど）として呈してもよい。一例では、ストレージ集合体５１０の第一の部分がクライアント５０２に呈されてもよく、ストレージ集合体５１０の第二の部分は異なるクライアントに呈されてもよく、こうして、ファイル・システム５０６はそれらのクライアントに、第二のレベルの間接参照を提供する。
【００７７】
一例では、ファイル・システム５０６は、クライアント５０２から、ストレージ集合体５１０にデータ（A）５２４を書き込むという書き込み要求５０４を受領する（たとえば、書き込み要求５０４は、クライアント５０２によって、ストレージ集合体５１０からの、ファイル・システム５０６によってクライアント５０２にエクスポートされたボリュームまたはLUNに向けられる）。ファイル・システム５０６は、データ（A）５２４をストレージ集合体５１０に書き込む書き込み動作５０８を生成してもよい。ストレージ抽象化層５１２は、その書き込み動作５０８を受け止めて、データ（A）５２４のデータ特性（たとえば、データ（A）５２４は頻繁にアクセスされるデータか、ユーザー・データか、メタデータか、ランダム・データか、逐次データか、など）を決定してもよい。ストレージ抽象化層５１２は、データ（A）５２４のデータ特性が、固体ドライブ・ストレージ・プロバイダー５２６の特性に、よりよくマッチすることを判別してもよい。よって、固体ドライブ・ストレージ・プロバイダー５２６の固体ドライブ・ストレージ内でどこでどのようにしてデータ（A）５２４を記憶するかを決定するために、固体ドライブ・ストレージ・ビン５１８が使われる。
【００７８】
個々のストレージ・ビンのようなストレージ抽象化層５１２は、特定の型のデータが累積されていくログ５１６（たとえば、またはストレージ・ビン毎のログ）を維持してもよく、累積されたデータが、諸ストレージ・プロバイダーのストレージ間で移動させられることができる（たとえば、コールド・データがコールド・データを記憶するのにより好適なストレージ・プロバイダーに移されることができるよう、コールド・データが第一のログに累積されてもよい；ホット・データがホット・データを記憶するのにより好適なストレージ・プロバイダーに移されることができるよう、ホット・データが第二のログに累積されてもよい；逐次アクセスされるデータが逐次アクセスされるデータを記憶するのにより好適なストレージ・プロバイダーに移されることができるよう、逐次アクセスされるデータが第三のログに累積されてもよい；ランダム・アクセスされるデータがランダム・アクセスされるデータを記憶するのにより好適なストレージ・プロバイダーに移されることができるよう、ランダム・アクセスされるデータが第四のログに累積されてもよい；ユーザー・データがユーザー・データを記憶するのにより好適なストレージ・プロバイダーに移されることができるよう、ユーザー・データが第五のログに累積されてもよい；メタデータがメタデータを記憶するのにより好適なストレージ・プロバイダーに移されることができるよう、メタデータが第六のログに累積されてもよい；など）。
【００７９】
一例では、データ（X）に対するアクセスの頻度が、特定のストレージ・プロバイダーについての特定のストレージ・ビンによって設定された閾値を下回ることに基づいて、データ（X）はログ５１６に累積されてもよい。たとえば、ストレージ・ビンがデータ（X）がアクセスされるのが前記閾値より少ないと判定すると、データ（X）はストレージ・プロバイダーのストレージから、そのストレージ・ビンのログ５１６に累積されてもよい。ひとたび閾値量のコールド・データがログ５１６内に累積したら、累積したコールド・データは、コールド・データにとってより好適な目標ストレージ・プロダイバーに送られてもよい。目標ストレージ・プロバイダーに送られる前に、累積されたコールド・データに対して、圧縮、重複除去、暗号化、データ・フォーマット（たとえばデータ・ブロックをストレージ・オブジェクトに格納する）および／または他のストレージ動作が実行されてもよい。
【００８０】
図５Ｂは、ストレージ抽象化層５１２が、固体ドライブ・ストレージ・プロバイダー５２６の固体ドライブ・ストレージ内のデータ（A）５２４へのアクセスの頻度が、固体ドライブ・ストレージ・プロバイダー５２６のための固体ドライブ・ストレージ・ビン５１８によって設定された閾値を下回ったことを判別することを示している。よって、固体ドライブ・ストレージ内でデータ（A）５２４が記憶されている記憶位置が、（たとえば固体ドライブ・ストレージ・ビン５１８によって）ガーベージ収集のために指定５４０されてもよい。その記憶位置が、その記憶位置内に新しいデータが記憶されることができるよう、のちに解放されるためである。データ（A）５２４は、固体ドライブ・ストレージ・ビン５１８によって固体ドライブ・ストレージから抽出されて、固体ドライブ・ストレージ・ビン５１８によって維持されているログ５１６に累積されてもよい。このようにして、固体ドライブ・ストレージ・ビン５１８によって管理されるコールド・データがログ５１６に累積される。特定のストレージ・プロバイダーから異なるストレージ・プロバイダーへのデータの移行のために、任意の型のデータがログに累積されうることが理解されうる（たとえば、コールド・データ、ホット・データ、ユーザー・データ、メタデータ、ランダム・アクセスされるデータ、冗長なデータなど）。
【００８１】
図５Ｃは、固体ドライブ・ストレージ・ビン５１８のようなストレージ抽象化層５１２が、閾値量のデータ（たとえばコールド・データ）がログ５１６に累積されたことを判別することを示している。よって、データ（X）、データ（A）５２４および／またはログ５１６に累積された他のデータを含むストレージ・オブジェクト５５０（たとえばファイル、ブロブ、一連のブロック、データ構造、データ・コンテナ、オブジェクトなど）が生成されてもよい。ストレージ・オブジェクト５５０を生成する前に、ストレージ抽象化層５１２はデータをフォーマットする（たとえばデータは、データを記憶するためにオブジェクト・ストレージ・プロバイダー５３０によって使用される型のストレージ・オブジェクトにフォーマットされてもよい）、データを重複除去する、データを暗号化する、データを圧縮するなどしてもよい。このようにして、ストレージ・オブジェクト５５０は、複数の関係したまたは関係しないデータが格納されうる単一のデータ・コンテナである（たとえば、データ（X）はメタデータであってもよく、データ（A）５２４はクライアント・ファイルの一部であってもよい）。
【００８２】
オブジェクト・ストレージ・ビン５２２は、ストレージ・オブジェクト５５０を、オブジェクト・ストレージ・プロバイダー５３０に送ってもよい。オブジェクト・ストレージ・プロバイダー５３０は、オブジェクト・ストレージ・プロバイダー５３０によって提供され、オブジェクト・ストレージ・ビンによって管理されるオブジェクト・ストレージ内にストレージ・オブジェクト５５０を格納する。オブジェクト・ストレージ・ビン５５２は、オブジェクト・メタファイルに、ストレージ・オブジェクト５５０のオブジェクト識別子およびストレージ・オブジェクト５５０中に格納されたデータのオフセットを入れてもよい。
【００８３】
図５Ｄは、クライアント５０２が、データ（A）にアクセス５６０するためにアクセス要求５６０をファイル・システム５０６に提出することを示している。一例では、クライアント５０２および／またはファイル・システム５０６は、データ（A）５２４の位置を認識しない（たとえば、ファイル・システム５０６はストレージ集合体５１０の、単一のデータ・コンテナとしての概念しか認識しない）。よって、ファイル・システム５０６はアクセス動作５６２をストレージ集合体５１０に提出し、該アクセス動作５６２はストレージ抽象化層５１２によって受け止められる〔インターセプトされる〕。一例では、クライアント５０２および／またはファイル・システム５０６は、データ（A）５２４を、物理的なボリューム・ブロック番号または他の任意の識別子（たとえばファイル識別子、仮想ブロック番号など）によって指定しうる。
【００８４】
ストレージ抽象化層５１２はデータ（A）５２４が現在、オブジェクト・ストレージ・ビン５２２によって管理されており、オブジェクト・ストレージ・プロバイダー５３０のオブジェクト・ストレージ内に記憶されていることを判別する。よって、オブジェクト・ストレージ・ビン５２２は、ストレージ・オブジェクト５５０のオブジェクト識別子およびストレージ・オブジェクト５５０内のデータ（A）５２４のオフセットを識別するために、物理的なボリューム・ブロック番号を使ってオブジェクト・メタファイルに問い合わせしてもよい。オブジェクト識別子およびオフセットは、オブジェクト・ストレージ・プロバイダー５３０によってオブジェクト・ストレージ内に記憶されたストレージ・オブジェクト５５０内のデータ（A）５２４へのアクセス５６４を提供するために、オブジェクト・ストレージ・ビン５２２によって使用されてもよい。
【００８５】
図５Ｅは、固体ドライブ・ストレージ・プロバイダー５２６の固体ドライブ・ストレージ上でガーベージ収集５７０を実行する固体ドライブ・ストレージ・ビン５１８を示している（ファイル・システム５０６および／または固体ドライブ・ストレージ・プロバイダー５２６によって提供されるいかなるガーベージ収集および／または参照回数追跡とも独立）。よって、固体ドライブ・ストレージ・ビン５１８は、ガーベージ収集のために指定５４０された記憶位置（たとえば、データ（A）５２４の古い／ステールな位置）を解放５７２してもよい。
【００８６】
さらに別の実施形態は、本明細書で提示される技法の一つまたは複数を実装するよう構成されたプロセッサ実行可能命令を含むコンピュータ可読媒体に関わる。これらの仕方で工夫されたコンピュータ可読媒体またはコンピュータ可読デバイスの例示的な実施形態が図６に示されており、実装６００は、記録可能コンパクトディスクレコーダブル（CD-R）、記録可能デジタル多用途ディスク（DVD-R）、フラッシュドライブ、ハードディスクドライブの円盤など、その上にコンピュータ読み取り可能なデータ６０６がエンコードされているコンピュータ可読媒体６０８を含む。このコンピュータ読み取り可能なデータ６０６、たとえば0または1の少なくとも一方を含むバイナリー・データは、本明細書に記載の原理の一つまたは複数に従って動作するよう構成されたプロセッサ実行可能コンピュータ命令６０４を含む。いくつかの実施形態では、プロセッサ実行可能コンピュータ命令６０４は、たとえば図３の例示的な方法３００の少なくともいくつかなどの方法６０２を実行するよう構成される。いくつかの実施形態では、プロセッサ実行可能コンピュータ命令６０４は、たとえば図４の例示的なシステム４００の少なくともいくつかおよび／または図５Ａ〜５Ｅの例示的なシステム５００の少なくともいくつかなどのシステムを実装するよう構成される。多くのそのようなコンピュータ可読媒体は、本明細書に提示される技法に従って動作することが考えられている。
【００８７】
本明細書で説明されるプロセス、アーキテクチャーおよび／または手順は、ハードウェア、ファームウェア、および／またはソフトウェアで実装できることが理解されるであろう。また、本明細書に記載されている施策は、任意の型の専用コンピュータ（たとえば、ファイルホスト、ストレージ・サーバーおよび／またはストレージ提供アプライアンス）および／またはストレージ・システムとして具現されたまたはストレージ・システムを含むスタンドアローン・コンピューターまたはその一部を含む汎用コンピュータに適用できることも理解されるであろう。さらに、本明細書の教示は、クライアントまたはホストコンピュータに直接取り付けられたネットワーク接続ストレージ環境および／またはストレージエリアネットワークおよびディスク／アレンブリーを含むがこれらに限定されない多様なストレージ・システム・アーキテクチャーに構成することができる。したがって、ストレージ・システムは、ストレージ機能を実行するよう構成され、他の設備またはシステムに関連付けられたサブシステムに加えて、そのような配置を含むように広く解釈されるべきである。
【００８８】
いくつかの実施形態では、本開示で説明および／または図示される方法は、全体または一部がコンピュータ可読媒体上で実現されてもよい。コンピュータ可読媒体は、本明細書に提示される方法の一つまたは複数を実装するよう構成されたプロセッサ実行可能命令を含むことができ、その後コンピュータ・システムによって読み取ることができるこのデータを格納するための任意のメカニズムを含むことができる。コンピュータ可読媒体の例には、（ハード）ドライブ（たとえば、ネットワークアタッチトストレージ（NAS）を介してアクセス可能）、ストレージエリアネットワーク（SAN）、揮発性および不揮発性メモリ、たとえば読み出し専用メモリ（ROM）、ランダムアクセスメモリ（RAM）、電気的に消去可能なプログラマブル読み出し専用メモリ（EEPROM）および／またはフラッシュメモリ、コンパクトディスク読み出し専用メモリ（CD-ROM）、CD-R、書き換え可能型コンパクトディスク（CD-RW）、DVD、カセット、磁気テープ、磁気ディスク・ストレージ、光学式または非光学式データ・ストレージ・デバイスおよび／またはデータを格納するために使用できる他の任意の媒体を含む。
【００８９】
主題は構造的特徴または方法論的工程に特有の言辞で記述されてきたが、添付の請求項において定義される主題は必ずしも上記の特定の特徴または工程に限定されないことを理解されたい。むしろ、上記の特定の特徴および工程は、請求項の少なくともいくつかを実装する例示的な形態として開示されている。
【００９０】
本明細書では、実施形態のさまざまな動作が提供される。動作の一部またはすべてが記述される順序は、これらの動作が必ず順序依存であることを含意すると解釈されるべきではない。本稿の恩恵を与えられれば、代替的な順序が理解されるであろう。さらに、本明細書で提供される各実施形態に必ずしもすべての動作が存在するとは限らないことを理解されたい。また、一部の実施形態ではすべての動作が必要なわけではないことも理解されよう。
【００９１】
さらに、特許請求される主題は、開示される主題を実装するようコンピュータを制御するよう、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組み合わせを生成する、標準的なアプリケーションまたはエンジニアリング技術を使用する方法、装置、または製造物として実装される。本明細書で使用される「製造物」という用語は、任意のコンピュータ可読デバイス、担体、または媒体からアクセス可能なコンピュータ・アプリケーションを包含することが意図されている。もちろん、特許請求される主題の範囲または精神から逸脱することなく、この構成に多くの修正を加えることができる。
【００９２】
本出願で使用されるところでは、用語「コンポーネント」、「モジュール」、「システム」、「インターフェース」などは、一般に、ハードウェア、ハードウェアとソフトウェアの組み合わせ、ソフトウェアまたは実行中のソフトウェアのいずれかであれ、コンピュータ関連エンティティを指すことが意図されている。たとえば、コンポーネントは、プロセッサ上で実行中のプロセス、プロセッサ、オブジェクト、実行可能ファイル、実行スレッド、アプリケーション、またはコンピュータを含む。例として、コントローラで実行されているアプリケーションとコントローラの両方がコンポーネントであることができる。プロセスまたは実行のスレッド内にある一つまたは複数のコンポーネントとコンポーネントは、一つのコンピュータに局在化されても、二つ以上のコンピュータの間で分散されてもよい。
【００９３】
さらに、本明細書では「例示的」は、例、事例、例解などのはたらきをすることを意味するために使用され、必ずしも有利ではない。本願で使用される「または」は、排他的な「または」ではなく、包含的な「または」を意味することが意図されている。さらに、本願で使用される「a」および「an」は、そうでないことが特に明記されない限り、または単数形を対象とすることが文脈から明確でない限り、「一つまたは複数」を意味すると解釈される。また、AおよびBの少なくとも一つなどは一般にAまたはBおよび／またはAとBの両方を意味する。さらに、「含む」、「有する」、「もつ」、「伴う」、またはそれらの変形が使用されるとき、そのような用語は、用語「含む」と同様に包含的であることが意図されている。
【００９４】
特許請求される主題の範囲または精神から逸脱することなく、本開示に対して多くの修正を行なうことができる。特にそうでないことを明記しない限り、「第一」、「第二」などは、時間的側面、空間的側面、順序などを含意することは意図されていない。むしろ、そのような用語は、機能、要素、項目などについての識別子、名称などとして使われているだけである。たとえば、第一の組の情報および第二の組の情報は、一般に、情報セットAおよび情報セットBまたは２つの異なるまたは２つの同一の情報セットまたは同じ情報セットに対応する。
【００９５】
また、本開示は、一つまたは複数の実装に関して示され、説明されてきたが、本明細書および添付図面を読み、理解することに基づいて、当業者には等価な変更および修正が思い浮かぶであろう。本開示は、そのようなすべての修正および変更を含み、添付の特許請求の範囲によってのみ制限される。特に、上記のコンポーネント（たとえば、要素、資源など）によって実行されるさまざまな機能に関して、そのようなコンポーネントを説明するために使用される用語は、特に指定がない限り、たとえ開示されている構造と構造的に等価でなくても、記載されるコンポーネントの指定された機能を実行する（たとえば、機能的に等価な）任意のコンポーネントに対応することが意図されている。さらに、本開示の特定の特徴がいくつかの実装の一つのみに関して開示されていることがあるが、そのような特徴は、任意の所与または特定の用途にとって望ましいおよび有利でありうるよう他の実装の一つまたは複数の他の特徴と組み合わされてもよい。
いくつかの態様を記載しておく。
〔態様１〕
ストレージを提供する方法であって：
ファイル・システムとストレージ環境との間の間接参照層としてストレージ抽象化層を利用して：
前記ストレージ環境の不均質な型のストレージへのアクセスを提供する複数のストレージ・プロバイダーの特性を取得し；
第一のストレージ・プロバイダーの第一のストレージを管理するための第一のストレージ・ビンを、前記第一のストレージ・プロバイダーの第一の特性に基づいて生成し；
第二のストレージ・プロバイダーの第二のストレージを管理するための第二のストレージ・ビンを、前記第二のストレージ・プロバイダーの第二の特性に基づいて生成し；
第一のストレージ型を有する前記第一のストレージおよび前記第一のストレージ型とは異なる第二のストレージ型を有する前記第二のストレージからストレージ集合体を生成し；
前記ストレージ集合体を単一のストレージ・コンテナとして前記ファイル・システムに呈することを含む、
方法。
〔態様２〕
前記ストレージ抽象化層を利用して：
前記第一のストレージ内の第一のデータへのアクセスの第一の頻度が前記第一のストレージについて前記第一のストレージ・ビンによって設定された閾値より低いことを判別し；
前記第一のデータをログに累積し；
前記第一のストレージ内の第二のデータへのアクセスの第二の頻度が前記第一のストレージについて前記第一のストレージ・ビンによって設定された前記閾値より低いことを判別し；
前記第二のデータを前記ログに累積することを含む、
態様１記載の方法。
〔態様３〕
前記ストレージ抽象化層を利用して：
閾値量のデータが前記ログ内に累積されたことを判別し；
前記ログからの累積されたデータを含み、前記第二のストレージのデータ・フォーマットに対応するストレージ・オブジェクトを生成し；
前記ストレージ・オブジェクトを、前記第二のストレージ・ビンを通じて前記第二のストレージ・プロバイダーに、前記第二のストレージ内での記憶のために送ることを含む、
態様２記載の方法。
〔態様４〕
前記ストレージ抽象化層を利用して：
前記ファイル・システムから、前記第一のデータについての物理ボリューム・ブロック番号を含む、前記第一のデータを求めるアクセス要求を受領し；
前記物理ボリューム・ブロック番号を使ってオブジェクト・メタファイルに問い合わせして、前記ストレージ・オブジェクトのオブジェクト識別子および前記ストレージ・オブジェクト内での前記第一のデータのオフセットを識別し；
前記オブジェクト識別子および前記オフセットを使って、前記第二のストレージ・プロバイダーによって前記第二のストレージ内に記憶されている前記ストレージ・オブジェクト内の前記第一のデータへのアクセスを提供することを含む、
態様３記載の方法。
〔態様５〕
前記ストレージ抽象化層を利用して：
前記第一のストレージ・ビンを使って、前記第一のストレージ内のデータへの参照の参照回数を追跡し、参照回数が0のデータを前記第一のストレージから解放し；
前記第二のストレージ・ビンを使って、前記第二のストレージ内のデータへの参照の参照回数を追跡し、参照回数が0のデータを前記第二のストレージから解放することを含む、
態様１記載の方法。
〔態様６〕
前記ストレージ抽象化層を利用して：
前記ストレージ集合体内に第一のデータを記憶するための、前記ファイル・システムからの要求を受領し；
前記第一のデータのデータ特性が前記第一のストレージ・プロバイダーの特性に対応することに基づいて、前記第一のデータを、前記第一のストレージ・ビンを通じて、前記第二のストレージにではなく、前記第一のストレージの第一の記憶位置に選択的に記憶し；
前記第一のデータを、前記第一のストレージから前記第二のストレージ・プロバイダーの前記第二のストレージの第二の記憶位置に移すことを含む、
態様１記載の方法。
〔態様７〕
前記ストレージ抽象化層を利用して：
前記ファイル・システムから、前記第一のデータについての上書き要求を受領し；
前記上書き要求のデータを新しいデータとして第三の記憶位置に記憶し；
前記第二のストレージ・ビンを使って前記第二の記憶位置にある前記第一のデータを、ガーベージ収集のためにマークすることを含む、
態様６記載の方法。
〔態様８〕
前記第三の記憶位置は前記第一のストレージ内である、態様７記載の方法。
〔態様９〕
前記第三の記憶位置は前記第二のストレージ内である、態様７記載の方法。
〔態様１０〕
前記ストレージ抽象化層を利用して、複数のデータを、該データおよびストレージ・プロバイダーの特性に基づいて、諸ストレージ・ビンを通じて、前記複数のストレージ・プロバイダーの対応するストレージに選択的に記憶することを含み、特性は、逐次アクセス特性、ランダム・アクセス特性、ユーザー・データ特性、メタデータ特性、頻繁にアクセスされる特性および頻繁にアクセスされない特性のうちの一つを含む、態様１ないし９のうちいずれか一項記載の方法。
〔態様１１〕
機械によって実行されたときに該機械に態様１ないし１０のうちいずれか一項記載の方法を実行させる方法を実行するための命令を有している非一時的な機械可読媒体。
〔態様１２〕
方法を実行するための命令を有している非一時的な機械可読媒体であって、前記命令は、機械によって実行されたときに該機械に：
ファイル・システムとストレージ環境との間の間接参照層としてストレージ抽象化層を利用して：
前記ストレージ環境の不均質な型のストレージへのアクセスを提供する複数のストレージ・プロバイダーの特性を取得し；
第一のストレージ・プロバイダーの第一のストレージを管理するための第一のストレージ・ビンを、前記第一のストレージ・プロバイダーの第一の特性に基づいて生成し；
第二のストレージ・プロバイダーの第二のストレージを管理するための第二のストレージ・ビンを、前記第二のストレージ・プロバイダーの第二の特性に基づいて生成し；
第一のストレージ型を有する前記第一のストレージおよび前記第一のストレージ型とは異なる第二のストレージ型を有する前記第二のストレージからストレージ集合体を生成し；
前記ストレージ集合体を単一のストレージ・コンテナとして前記ファイル・システムに呈し；
前記ストレージ集合体内にデータを記憶するための、前記ファイル・システムからの要求を受領し；
前記データの特性が前記第一のストレージ・プロバイダーの特性に対応することに基づいて、前記データが、前記第二のストレージではなく、前記第一のストレージ内に記憶されるべきであると決定することを実行させる、
非一時的な機械可読媒体。
〔態様１３〕
前記命令が前記機械に：
前記ストレージ抽象化層を利用して、前記第一の特性の第一の部分集合および前記第二の特性の第二の部分集合を前記ファイル・システムに呈することを実行させる、
態様１１記載の非一時的な機械可読媒体。
〔態様１４〕
前記第一のストレージ・プロバイダーが第一のノードであり、前記第二のストレージ・プロバイダーが第二のノードであり、前記ストレージ集合体が前記第一のノードおよび前記第二のノードにまたがってホストされる、態様１１記載の非一時的な機械可読媒体。
〔態様１５〕
前記ファイル・システムが複数のノードにまたがってホストされる、態様１１ないし１４のうちいずれか一項記載の非一時的な機械可読媒体。
〔態様１６〕
方法を実行するための命令が記憶されている、機械実行可能コードを有する機械可読媒体を含むメモリと；
前記メモリに結合されたプロセッサであって、前記プロセッサは、前記プロセッサに態様１ないし１０のうちいずれか一項記載の方法を実行させる前記機械実行可能コードを実行するよう構成されている、プロセッサとを有する、
ストレージを提供するためのコンピューティング装置。
〔態様１７〕
方法を実行するための命令が記憶されている、機械実行可能コードを有する機械可読媒体を含むメモリと；
前記メモリに結合されたプロセッサとを有する、
ストレージを提供するためのコンピューティング装置であって、
前記プロセッサは：
ファイル・システムとストレージ環境との間の間接参照層としてストレージ抽象化層を利用して：
前記ストレージ環境の不均質な型のストレージへのアクセスを提供する複数のストレージ・プロバイダーの特性を取得し；
第一のストレージ・プロバイダーの第一のストレージを管理するための第一のストレージ・ビンを、前記第一のストレージ・プロバイダーの第一の特性に基づいて生成し；
第二のストレージ・プロバイダーの第二のストレージを管理するための第二のストレージ・ビンを、前記第二のストレージ・プロバイダーの第二の特性に基づいて生成し；
第一のストレージ型を有する前記第一のストレージおよび前記第一のストレージ型とは異なる第二のストレージ型を有する前記第二のストレージからストレージ集合体を生成し；
前記ストレージ集合体を単一のストレージ・コンテナとして前記ファイル・システムに呈し；
前記特性に基づいてストレージ・プロバイダーをまたいでデータを選択的に記憶することを前記プロセッサに実行させる前記機械実行可能コードを実行するよう構成されている、
コンピューティング装置。
〔態様１８〕
前記第一のストレージ・プロバイダーは第一のI/Oサイズをサポートし、前記第二のストレージ・プロバイダーは前記第一のI/Oサイズとは異なる第二のI/Oサイズをサポートする、態様１７記載のコンピューティング装置。
〔態様１９〕
前記ファイル・システムは前記第一のI/Oサイズをサポートし、前記第二のI/Oサイズをサポートしない、態様１８記載のコンピューティング装置。
〔態様２０〕
前記機械実行可能コードが前記プロセッサに：
前記ストレージ抽象化層を利用して：
前記ファイル・システムから圧縮されたデータを受領し；
前記圧縮されたデータを、圧縮された状態で、前記第一のストレージ内に記憶することを実行させる、
態様１６記載のコンピューティング装置。
〔態様２１〕
前記機械実行可能コードが前記プロセッサに：
前記ストレージ抽象化層を利用して：
前記ファイル・システムから暗号化されたデータを受領し；
前記暗号化されたデータを、暗号化された状態で、前記第一のストレージ内に記憶することを実行させる、
態様１６記載のコンピューティング装置。
〔態様２２〕
前記機械実行可能コードが前記プロセッサに：
前記複数のストレージ・プロバイダーに関し、前記ファイル・システムによって提供される重複除去を保持させる、
態様１６ないし２１のうちいずれか一項記載のコンピューティング装置。
【図１】
0006890675.tif 000002
【図２】
0006890675.tif 000003
【図３】
0006890675.tif 000004
【図４】
0006890675.tif 000005
【図５Ａ】
0006890675.tif 000006
【図５Ｂ】
0006890675.tif 000007
【図５Ｃ】
0006890675.tif 000008
【図５Ｄ】
0006890675.tif 000009
【図５Ｅ】
0006890675.tif 000010
【図６】
0006890675.tif 000011