図2Aおよび図2Bは、本発明の実施形態による、「仮想ボリューム」を実装しているストレージ・システム・クラスタのブロック図である。このストレージ・システム・クラスタは、1つまたは複数のストレージ・システム、たとえば、ストレージ・システム1301および1302(これらは、ディスク・アレイであることが可能であり、それぞれが、複数のデータ・ストレージ・ユニット(DSU)を有しており、それらのDSUのうちの1つは、図において141とラベル付けされている)と、本明細書に記載されている本発明の実施形態を可能にするためのストレージ・システム130のさまざまなオペレーションをコントロールするストレージ・システム・マネージャ131および132とを含む。一実施形態においては、複数のストレージ・システム130が、分散型ストレージ・システム・マネージャ135を実装することができ、分散型ストレージ・システム・マネージャ135は、ストレージ・システム・クラスタのオペレーションを、あたかもそれらが単一の論理ストレージ・システムであるかのようにコントロールする。分散型ストレージ・システム・マネージャ135の運用ドメインは、同じデータ・センター内に、または複数のデータ・センターにわたってインストールされているストレージ・システムに及ぶことができる。たとえば、そのような一実施形態においては、分散型ストレージ・システム・マネージャ135は、ストレージ・システム・マネージャ131を含むことができ、ストレージ・システム・マネージャ131は、ストレージ・システム・マネージャ132と通信する場合に「マスター」マネージャとして機能し、ストレージ・システム・マネージャ132は、「スレーブ」マネージャとして機能するが、分散型ストレージ・システム・マネージャを実装するためのさまざまな代替方法が実施されることが可能であるということを認識されたい。DSUは、物理ストレージ・ユニット、たとえば、回転ディスクまたはソリッド・ステート・ディスクなどのディスクまたはフラッシュ・ベースのストレージ・ユニットに相当する。複数の実施形態によれば、ストレージ・システム・クラスタは、本明細書においてさらに詳述するように、「仮想ボリューム」(vvol:virtual volume)を作成して、コンピュータ・システム1001および1002などの接続されているコンピュータ・システムに公開する。コンピュータ・システム100内で稼働するアプリケーション(たとえば、自分の仮想ディスクにアクセスするVMなど)は、図2Aの実施形態におけるSCSI、および図2Bの実施形態におけるNFSなど、標準的なプロトコルを使用して、SCSIまたはNFSプロトコル・トラフィックに関する論理エンドポイント(「プロトコル・エンドポイント」(PE)として知られており、ストレージ・システム130内で構成されている)を通じて、オン・デマンドでvvolにアクセスする。アプリケーション関連のデータ・オペレーションに関する、コンピュータ・システム100からストレージ・システム130への通信パスは、本明細書においては「帯域内」パスと呼ばれる。コンピュータ・システム100のホスト・バス・アダプタ(HBA)と、ストレージ・システム130内で構成されているPEとの間における通信パス、およびコンピュータ・システム100のネットワーク・インターフェース・カード(NIC)と、ストレージ・システム130内で構成されているPEとの間における通信パスは、帯域内パスの例である。帯域内ではなく、かつ典型的には、管理オペレーションを実行するために使用される、コンピュータ・システム100からストレージ・システム130への通信パスは、本明細書においては「帯域外」パスと呼ばれる。コンピュータ・システム100と、ストレージ・システム130との間におけるイーサネット・ネットワーク接続など、帯域外パスの例は、図6において帯域内パスとは別に示されている。簡単にするために、コンピュータ・システム100は、ストレージ・システム130に直接接続されているように示されている。しかしながら、それらのコンピュータ・システム100は、複数のパス、およびスイッチのうちの1つまたは複数を通じてストレージ・システム130に接続されることが可能であるということを理解されたい。
分散型ストレージ・システム・マネージャ135、または単一のストレージ・システム・マネージャ131もしくは132は、(たとえば、コンピュータ・システム100などの要求に応じて、)物理的なDSUの論理的な集約に相当する論理的な「ストレージ・コンテナ」からvvolを作成することができる。一般には、1つのストレージ・コンテナは、複数のストレージ・システムにわたることができ、単一のストレージ・システム・マネージャ、または分散型ストレージ・システム・マネージャによって、多くのストレージ・コンテナが作成されることが可能である。同様に、単一のストレージ・システムは、多くのストレージ・コンテナを含むことができる。図2Aおよび図2Bにおいては、分散型ストレージ・システム・マネージャ135によって作成されたストレージ・コンテナ142Aは、ストレージ・システム1301およびストレージ・システム1302にわたるものとして示されており、その一方で、ストレージ・コンテナ142Bおよびストレージ・コンテナ142Cは、単一のストレージ・システム(すなわち、ストレージ・システム1301およびストレージ・システム1302それぞれ)の中に含まれているものとして示されている。1つのストレージ・コンテナは、複数のストレージ・システムにわたることができるため、ストレージ・システム管理者は、ストレージ・システムのいずれか1つのストレージ・キャパシティーを超えるストレージ・キャパシティーを自分の顧客にプロビジョンすることができるということを認識されたい。単一のストレージ・システム内に複数のストレージ・コンテナが作成されることが可能であるため、ストレージ・システム管理者は、単一のストレージ・システムを使用して複数の顧客にストレージをプロビジョンすることができるということをさらに認識されたい。
図2Aの実施形態においては、それぞれのvvolは、ブロック・ベースのストレージ・システムからプロビジョンされている。図2Bの実施形態においては、NASベースのストレージ・システムが、DSU141の上にファイル・システム145を実装しており、それぞれのvvolは、このファイル・システム内の1つのファイル・オブジェクトとしてコンピュータ・システム100に公開されている。加えて、以降でさらに詳細に説明するように、コンピュータ・システム100上で稼働するアプリケーションは、PEを通じたIOのためにvvolにアクセスする。たとえば、図2Aおよび図2Bにおいて破線で示されているように、vvol151およびvvol152は、PE161を介してアクセス可能であり、vvol153およびvvol155は、PE162を介してアクセス可能であり、vvol154は、PE163およびPE164を介してアクセス可能であり、vvol156は、PE165を介してアクセス可能である。ストレージ・コンテナ142A内のvvol153、およびストレージ・コンテナ142C内のvvol155など、複数のストレージ・コンテナからのvvolは、任意の所与の時点においてPE162などの単一のPEを介してアクセス可能とすることができるということを認識されたい。PE166などのPEは、それらのPEを介してアクセス可能であるvvolがまったくなくても、存在することができるということをさらに認識されたい。
図2Aの実施形態においては、ストレージ・システム130は、LUNをセットアップするための知られている方法を使用して、特別なタイプのLUNとしてPEを実装している。LUNと同様に、ストレージ・システム130は、WWN(World Wide Name)として知られている一意の識別子をそれぞれのPEに提供する。一実施形態においては、PEを作成する際に、ストレージ・システム130は、その特別なLUNに関するサイズを指定しない。なぜなら、本明細書に記載されているPEは、実際のデータ・コンテナではないためである。そのような一実施形態においては、ストレージ・システム130は、PE関連のLUNのサイズとしてゼロの値または非常に小さな値を割り振ることができ、それによって管理者は、以降でさらに論じるように、ストレージ・システムがLUN(たとえば、従来のデータLUNおよびPE関連のLUN)のリストを提供するように要求する場合に、PEを迅速に識別することができる。同様に、ストレージ・システム130は、PEに対するLUNに関する識別番号として、255よりも大きな数をLUNに割り振って、それらのLUNがデータLUNではないということを、人間にとってわかりやすい方法で示すことができる。PEとLUNとの間において区別を行うための別の方法として、PEビットがExtended Inquiry Data VPDページ(ページ86h)に加えられることが可能である。PEビットは、LUNがPEである場合には1に設定され、LUNが通常のデータLUNである場合には0に設定される。コンピュータ・システム100は、SCSIコマンドREPORT_LUNSを発行することによって帯域内パスを介してPEを発見することと、示されているPEビットを調べることによって、それらのPEが、本明細書に記載されている実施形態によるPEであるか、または従来のデータLUNであるかを判定することとが可能である。コンピュータ・システム100は、LUNがPEであるか、または従来のLUNであるかをさらに確認するために、LUNのサイズおよびLUNの番号のプロパティーを任意選択で検査することができる。PE関連のLUNを通常のデータLUNから区別するために上述の技術のうちの任意の技術が使用されることが可能であるということを認識されたい。一実施形態においては、PEビット技術が、PE関連のLUNを通常のデータLUNから区別するために使用される唯一の技術である。
図2Bの実施形態においては、PEは、FSボリュームに対してマウント・ポイントをセットアップするための知られている方法を使用してストレージ・システム130内に作成される。図2Bの実施形態において作成されるそれぞれのPEは、IPアドレスおよびファイル・システム・パスによって一意に識別され、それらのIPアドレスおよびファイル・システム・パスは、従来、合わせて「マウント・ポイント」とも呼ばれている。しかしながら、従来のマウント・ポイントとは異なり、それらのPEは、FSボリュームに関連付けられない。加えて、図2AのPEとは異なり、図2BのPEは、仮想ボリュームが所与のPEにバインドされていない限り、帯域内パスを介してコンピュータ・システム100によって発見可能ではない。したがって、図2BのPEは、帯域外パスを介してストレージ・システムによって報告される。
図3は、一実施形態による、仮想ボリュームを管理するための図2Aまたは図2Bのストレージ・システム・クラスタのコンポーネントのブロック図である。それらのコンポーネントは、一実施形態におけるストレージ・システム130において実行されるストレージ・システム・マネージャ131および132のソフトウェア・モジュール、または別の実施形態における分散型ストレージ・システム・マネージャ135のソフトウェア・モジュール、すなわち、入力/出力(I/O)マネージャ304、ボリューム・マネージャ306、コンテナ・マネージャ308、およびデータ・アクセス・レイヤ310を含む。本明細書における実施形態の説明においては、分散型ストレージ・システム・マネージャ135によって取られるあらゆるアクションは、実施形態に応じてストレージ・システム・マネージャ131またはストレージ・システム・マネージャ132によって取られることが可能であるということを理解されたい。
図3の例においては、分散型ストレージ・システム・マネージャ135は、3つのストレージ・コンテナSC1、SC2、およびSC3をDSU141から作成しており、DSU141のそれぞれは、P1からPnとラベル付けされているスピンドル・エクステントを有するように示されている。一般に、それぞれのストレージ・コンテナは、固定された物理サイズを有しており、DSUの特定のエクステントに関連付けられている。図3に示されている例においては、分散型ストレージ・システム・マネージャ135は、コンテナ・データベース316へのアクセスを有しており、コンテナ・データベース316は、それぞれのストレージ・コンテナに関して、そのコンテナIDと、物理的なレイアウトの情報と、何らかのメタデータとを格納している。コンテナ・データベース316は、コンテナ・マネージャ308によって管理および更新され、コンテナ・マネージャ308は、一実施形態においては、分散型ストレージ・システム・マネージャ135のコンポーネントである。コンテナIDとは、ストレージ・コンテナが作成されたときにそのストレージ・コンテナに与えられる汎用一意識別子である。物理的なレイアウトの情報は、所与のストレージ・コンテナに関連付けられているDSU141のスピンドル・エクステントから構成されており、<システムID,DSU ID,エクステント番号>の順序付けられたリストとして格納されている。メタデータ・セクションは、何らかの一般的なメタデータ、および何らかのストレージ・システム・ベンダー固有のメタデータを含むことができる。たとえば、メタデータ・セクションは、ストレージ・コンテナにアクセスすることを許可されているコンピュータ・システムまたはアプリケーションまたはユーザのIDを含むことができる。別の例として、メタデータ・セクションは、ストレージ・コンテナのどの<システムID,DSU ID,エクステント番号>のエクステントが既存のvvolに既に割り当てられているか、およびどの<システムID,DSU ID,エクステント番号>のエクステントが空いているかを示すためのアロケーション・ビットマップを含む。一実施形態においては、ストレージ・システム管理者は、別々のビジネス・ユニットに関して別々のストレージ・コンテナを作成することができ、それによって、別々のビジネス・ユニットのvvol同士は、同じストレージ・コンテナからはプロビジョンされない。vvol同士を分けるためのその他のポリシーが適用されることも可能である。たとえば、ストレージ・システム管理者は、クラウド・サービスの別々の顧客のvvol同士が別々のストレージ・コンテナからプロビジョンされるというポリシーを採用することができる。また、vvol同士が、自分たちの必要とされるサービス・レベルに従ってストレージ・コンテナからグループ化されてプロビジョンされることも可能である。加えて、ストレージ・システム管理者は、ストレージ・コンテナを作成すること、削除すること、およびその他の形で管理すること、たとえば、作成されることが可能であるストレージ・コンテナの数を定義すること、および、ストレージ・コンテナごとに設定されることが可能である最大の物理サイズを設定することなどが可能である。
また、図3の例においては、分散型ストレージ・システム・マネージャ135は、(要求を行っているコンピュータ・システム100のために)複数のvvolを、それぞれ別々のストレージ・コンテナからプロビジョンしている。一般に、vvolは、固定された物理サイズを有することができ、またはシン・プロビジョニングされることが可能であり、それぞれのvvolは、vvol IDを有しており、vvol IDとは、vvolが作成されたときにそのvvolに与えられる汎用一意識別子である。それぞれのvvolに関して、vvolデータベース314が、それぞれのvvolごとに、そのvvol IDと、そのvvolが作成されているストレージ・コンテナのコンテナIDと、そのvvolのアドレス空間を含むそのストレージ・コンテナ内の<オフセット,長さ>の値の順序付けられたリストとを格納している。vvolデータベース314は、ボリューム・マネージャ306によって管理および更新され、ボリューム・マネージャ306は、一実施形態においては、分散型ストレージ・システム・マネージャ135のコンポーネントである。一実施形態においては、vvolデータベース314は、vvolに関する少量のメタデータも格納する。このメタデータは、一組のキー/値のペアとしてvvolデータベース314内に格納され、そのvvolの存在中はいつでも帯域外パスを介してコンピュータ・システム100によって更新されることおよびクエリーされることが可能である。格納されるキー/値のペアは、3つのカテゴリーへと分かれる。第1のカテゴリーは、よく知られているキーであり、特定のキーの定義(ひいては、それらの値の解釈)は、公に利用可能である。1例は、仮想ボリューム・タイプ(たとえば、仮想マシンの実施形態においては、vvolがVMのメタデータを含むか、またはVMのデータを含むか)に対応するキーである。別の例は、App IDであり、これは、vvol内にデータを格納したアプリケーションのIDである。第2のカテゴリーは、コンピュータ・システム固有のキーであり、コンピュータ・システムまたはその管理モジュールは、特定のキーおよび値を仮想ボリュームのメタデータとして格納する。第3のカテゴリーは、ストレージ・システム・ベンダー固有のキーであり、これらによって、ストレージ・システム・ベンダーは、仮想ボリュームのメタデータに関連付けられている特定のキーを格納することができる。ストレージ・システム・ベンダーがそのメタデータに関してこのキー/値の格納を使用する1つの理由は、これらのキーのすべてが、vvolに関する帯域外チャネルを介してストレージ・システム・ベンダーのプラグインおよびその他の拡張にとって容易に利用可能であることである。キー/値のペアに関する格納オペレーションは、仮想ボリュームの作成およびその他の工程の一部であり、したがって格納オペレーションは、適度に高速になるはずである。ストレージ・システムはまた、特定のキー上で提供される値に対する厳密な一致に基づいて仮想ボリュームの検索を可能にするように構成される。
IOマネージャ304は、PEとvvolとの間における現在有効なIO接続パスを記憶する接続データベース312を保持するソフトウェア・モジュール(また、特定の実施形態においては、分散型ストレージ・システム・マネージャ135のコンポーネント)である。図3に示されている例においては、7つの現在有効なIOセッションが示されている。それぞれの有効なセッションは、関連付けられているPE IDと、セカンダリー・レベル識別子(SLLID)と、vvol IDと、このIOセッションを通じてIOを実行している別々のアプリケーションの数を示すリファレンス・カウント(RefCnt)とを有する。(たとえば、コンピュータ・システム100による要求に応じて)分散型ストレージ・システム・マネージャ135によってPEとvvolとの間における有効なIOセッションを確立する工程は、本明細書においては「バインド」工程と呼ばれる。それぞれのバインドごとに、分散型ストレージ・システム・マネージャ135は、(たとえば、IOマネージャ304を介して)接続データベース312にエントリーを加える。その後に分散型ストレージ・システム・マネージャ135によってIOセッションを取り壊す工程は、本明細書においては「アンバインド」工程と呼ばれる。それぞれのアンバインドごとに、分散型ストレージ・システム・マネージャ135は、(たとえば、IOマネージャ304を介して)IOセッションのリファレンス・カウントを1ずつデクリメントする。IOセッションのリファレンス・カウントがゼロである場合には、分散型ストレージ・システム・マネージャ135は、(たとえば、IOマネージャ304を介して)そのIO接続パスに関するエントリーを接続データベース312から削除することができる。前述したように、一実施形態においては、コンピュータ・システム100は、バインド要求およびアンバインド要求を生成して、帯域外パスを介して分散型ストレージ・システム・マネージャ135へ送信する。あるいは、コンピュータ・システム100は、アンバインド要求を生成して、オーバーローディングが存在しているエラー・パスによって帯域内パスを介して送信することができる。一実施形態においては、リファレンス・カウントが0から1に変わった場合、またはその逆の場合には、世代番号は、単調に増加する番号、またはランダムに生成された番号に変更される。別の実施形態においては、世代番号は、ランダムに生成された番号であり、接続データベース312からRefCnt列が取り除かれており、それぞれのバインドごとに、バインド要求が、既にバインドされているvvolに対してなされた場合でさえ、分散型ストレージ・システム・マネージャ135は、(たとえば、IOマネージャ304を介して)接続データベース312にエントリーを加える。
図2Aのストレージ・システム・クラスタにおいては、IOマネージャ304は、接続データベース312を使用してPEを通じて受信されたコンピュータ・システム100からのIO要求(IO)を処理する。IOがPEのうちの1つにおいて受信された場合には、IOマネージャ304は、そのIOの対象であったvvolを特定する目的で、そのIO内に含まれているPE IDおよびSLLIDを識別するために、そのIOを解析する。次いで、接続データベース314にアクセスすることによって、IOマネージャ304は、解析されたPE IDおよびSLLIDに関連付けられているvvol IDを取り出すことができる。図3および後続の図においては、簡単にするために、PE IDは、PE_A、PE_Bなどと示されている。一実施形態においては、実際のPE IDは、PEのWWNである。加えて、SLLIDは、S0001、S0002などと示されている。実際のSLLIDは、接続データベース312内の所与のPE IDに関連付けられている複数のSLLIDのうちの任意の一意の番号として、分散型ストレージ・システム・マネージャ135によって生成される。vvol IDを有する仮想ボリュームの論理アドレス空間と、DSU141の物理ロケーションとの間におけるマッピングは、vvolデータベース314を使用してボリューム・マネージャ306によって、およびコンテナ・データベース316を使用してコンテナ・マネージャ308によって実行される。DSU141の物理ロケーションが得られると、データ・アクセス・レイヤ310(一実施形態においては、やはり分散型ストレージ・システム・マネージャ135のコンポーネント)が、これらの物理ロケーション上でIOを実行する。
図2Bのストレージ・システム・クラスタにおいては、IOは、PEを通じて受信され、そのようなそれぞれのIOは、NFSハンドル(または類似のファイル・システム・ハンドル)を含み、そのNFSハンドルに対して、そのIOは発行されている。一実施形態においては、そのようなシステムのための接続データベース312は、PE IDとしてストレージ・システムのNFSインターフェースのIPアドレスを、およびSLLIDとしてファイル・システム・パスを含む。SLLIDは、ファイル・システム145内のvvolのロケーションに基づいて生成される。vvolの論理アドレス空間と、DSU141の物理ロケーションとの間におけるマッピングは、vvolデータベース314を使用してボリューム・マネージャ306によって、およびコンテナ・データベース316を使用してコンテナ・マネージャ308によって実行される。DSU141の物理ロケーションが得られると、データ・アクセス・レイヤが、これらの物理ロケーション上でIOを実行する。図2Bのストレージ・システムに関しては、コンテナ・データベース312は、所与のvvolに関してコンテナ・ロケーション・エントリー内にファイル:<オフセット,長さ>エントリーの順序付けられたリストを含むことができる(すなわち、vvolは、ファイル・システム145内に格納されている複数のファイル・セグメントから構成されることが可能である)ということを認識されたい。
一実施形態においては、接続データベース312は、揮発性メモリ内に保持され、その一方で、vvolデータベース314およびコンテナ・データベース316は、DSU141などの永続ストレージ内に保持される。その他の実施形態においては、データベース312、314、316のすべてが永続ストレージ内に保持されることが可能である。
図4は、ストレージ・コンテナを作成するための方法工程410の流れ図である。一実施形態においては、これらの工程は、ストレージ管理者のコントロールのもとで、ストレージ・システム・マネージャ131、ストレージ・システム・マネージャ132、または分散型ストレージ・システム・マネージャ135によって実行される。上述したように、ストレージ・コンテナは、物理的なDSUの論理的な集約に相当し、複数のストレージ・システムからの物理的なDSUにわたることができる。工程411において、ストレージ管理者は、(分散型ストレージ・システム・マネージャ135などを介して、)ストレージ・コンテナの物理的なキャパシティーを設定する。クラウドまたはデータ・センター内では、この物理的なキャパシティーは、たとえば、顧客によってリースされる物理ストレージの量に相当することができる。本明細書において開示されているストレージ・コンテナによって提供される柔軟性として、別々の顧客の複数のストレージ・コンテナが、1人のストレージ管理者によって同じストレージ・システムからプロビジョンされることが可能であり、また、たとえば、いずれか1つのストレージ・デバイスの物理的なキャパシティーが、顧客によって要求されているサイズを満たすのに十分ではないケースにおいて、または1つのvvolの物理ストレージ・フットプリントが、必然的に複数のストレージ・システムにわたることになる複製などのケースにおいて、単一の顧客のための1つのストレージ・コンテナが、複数のストレージ・システムからプロビジョンされることが可能である。工程412において、ストレージ管理者は、ストレージ・コンテナにアクセスするための許可レベルを設定する。マルチテナント・データ・センターにおいては、たとえば、顧客は、自分にリースされているストレージ・コンテナにアクセスすることしかできない。工程413において、分散型ストレージ・システム・マネージャ135は、ストレージ・コンテナに関する一意の識別子を生成する。次いで工程414において、分散型ストレージ・システム・マネージャ135は、(たとえば、一実施形態においては、コンテナ・マネージャ308を介して、)DSU141の空いているスピンドル・エクステントを、工程411において設定された物理的なキャパシティーを満たすのに十分な量でストレージ・コンテナに割り当てる。上述したように、いずれか1つのストレージ・システムの空きスペースが、物理的なキャパシティーを満たすのに十分ではないケースにおいては、分散型ストレージ・システム・マネージャ135は、複数のストレージ・システムからDSU141のスピンドル・エクステントを割り当てることができる。パーティションが割り当てられた後に、分散型ストレージ・システム・マネージャ135は、(たとえば、コンテナ・マネージャ308を介して、)一意のコンテナIDと、<システム番号,DSU ID,エクステント番号>の順序付けられたリストと、ストレージ・コンテナにアクセスすることを許可されているコンピュータ・システムのコンテキストIDとでコンテナ・データベース316を更新する。
本明細書に記載されている実施形態によれば、ストレージ能力プロファイル、たとえば、SLAまたはサービス品質(QoS:quality of service)は、vvolごとに(たとえば、要求を行っているコンピュータ・システム100のために)分散型ストレージ・システム・マネージャ135によって構成されることが可能である。したがって、別々のストレージ能力プロファイルを有する複数のvvolが、同じストレージ・コンテナの一部であることが可能である。一実施形態においては、システム管理者は、ストレージ・コンテナの作成時に、新たに作成されたvvolに関するデフォルトのストレージ能力プロファイル(または、複数の可能なストレージ能力プロファイル)を定義して、コンテナ・データベース316のメタデータ・セクション内に格納する。ストレージ・コンテナ内で作成されている新たなvvolに関してストレージ能力プロファイルが明示的に指定されない場合には、その新たなvvolは、そのストレージ・コンテナに関連付けられているデフォルトのストレージ能力プロファイルを引き継ぐことになる。
図5Aは、図2Aのストレージ・システム・クラスタ上にホストされる仮想ボリュームを実装するように構成されているコンピュータ・システムの一実施形態のブロック図である。コンピュータ・システム101は、従来の、典型的にはサーバクラスである、ハードウェア・プラットフォーム500上に構築されることが可能であり、ハードウェア・プラットフォーム500は、1つまたは複数の中央処理装置(CPU)501と、メモリ502と、1つまたは複数のネットワーク・インターフェース・カード(NIC)503と、1つまたは複数のホスト・バス・アダプタ(HBA)504とを含む。HBA504は、コンピュータ・システム101が、ストレージ・デバイス130内に構成されているPEを通じて仮想ボリュームにIOを発行することを可能にする。図5Aにおいてさらに示されているように、オペレーティング・システム508は、ハードウェア・プラットフォーム500の上にインストールされており、複数のアプリケーション5121〜512Nが、オペレーティング・システム508の上で実行される。オペレーティング・システム508の例としては、よく知られているコモディティー・オペレーティング・システム、たとえばMicrosoft Windows、Linuxなどのうちの任意のものが含まれる。
本明細書に記載されている実施形態によれば、それぞれのアプリケーション512は、自分に関連付けられている1つまたは複数のvvolを有しており、アプリケーション512によるオペレーティング・システム508への「CREATE DEVICE」コールに従ってオペレーティング・システム508によって作成されたvvolのブロック・デバイス・インスタンスにIOを発行する。ブロック・デバイス名と、vvol IDとの間における関連付けは、ブロック・デバイス・データベース533内に保持される。アプリケーション5122〜512NからのIOは、ファイル・システム・ドライバ510によって受信され、ファイル・システム・ドライバ510は、それらのIOをブロックIOに変換し、それらのブロックIOを仮想ボリューム・デバイス・ドライバ532に提供する。その一方で、アプリケーション5121からのIOは、ファイル・システム・ドライバ510を迂回するように示されており、仮想ボリューム・デバイス・ドライバ532に直接提供され、これが意味するのは、アプリケーション5121が、自分のブロック・デバイスに直接、ロー・ストレージ・デバイス(raw storage device)として、たとえば、データベース・ディスク、ログ・ディスク、バックアップ・アーカイブ、およびコンテンツ・リポジトリとして、「Providing Access to a Raw Data Storage Unit in a Computer System」と題されている米国特許第7,155,558号(その全内容を本願明細書に援用する)に記載されている様式でアクセスするということである。仮想ボリューム・デバイス・ドライバ532は、ブロックIOを受信した場合には、ブロック・デバイス・データベース533にアクセスして、そのIO内で指定されているブロック・デバイス名と、そのブロック・デバイス名に関連付けられているvvolへのIO接続パスを定義するPE ID(PE LUNのWWN)およびSLLIDとの間におけるマッピングを参照する。ここで示されている例においては、「archive」というブロック・デバイス名は、アプリケーション5121に関して作成されたvvol12のブロック・デバイス・インスタンスに対応しており、「foo」、「dbase」、および「log」というブロック・デバイス名は、アプリケーション5122〜512Nのうちの1つまたは複数に関してそれぞれ作成されたvvol1、vvol16、およびvvol17のブロック・デバイス・インスタンスに対応する。ブロック・デバイス・データベース533内に格納されているその他の情報としては、ブロック・デバイスがアクティブであるか否かを示すそれぞれのブロック・デバイスに関するアクティブ・ビット値と、CIF(commands−in−flight:処理中コマンド)値とが含まれる。「1」というアクティブ・ビットは、IOがブロック・デバイスに発行されることが可能であるということを意味する。「0」というアクティブ・ビットは、ブロック・デバイスが非アクティブであり、IOがブロック・デバイスに発行されることは不可能であるということを意味する。CIF値は、いくつのIOが処理中であるか、すなわち、発行されたが完了されていないかの表示を提供する。ここで示されている例においては、「foo」というブロック・デバイスは、アクティブであり、いくつかの処理中コマンドを有している。「archive」というブロック・デバイスは、非アクティブであり、さらに新しいコマンドを受け入れないであろう。しかしながら、このブロック・デバイスは、2つの処理中コマンドが完了するのを待っている。「dbase」というブロック・デバイスは、非アクティブであり、未処理のコマンドはない。最後に、「log」というブロック・デバイスは、アクティブであるが、アプリケーションは現在、このデバイスに対する未処理のIOを有していない。仮想ボリューム・デバイス・ドライバ532は、いつでも自分のデータベース533からこれらのようなデバイスを除去することを選択することができる。
上述のマッピングを実行することに加えて、仮想ボリューム・デバイス・ドライバ532は、データ・アクセス・レイヤ540にロー・ブロックレベルIO(raw block level IO)を発行する。データ・アクセス・レイヤ540は、コマンド・キューイングおよびスケジューリング・ポリシーをロー・ブロックレベルIOに適用するデバイス・アクセス・レイヤ534と、プロトコルに準拠したフォーマットでロー・ブロックレベルIOをフォーマットして、それらのロー・ブロックレベルIOを、帯域内パスを介してPEへ転送するためにHBA504に送信する、HBA504のためのデバイス・ドライバ536とを含む。SCSIプロトコルが使用される実施形態においては、vvol情報は、SAM−5(SCSI Architecture Model−5)において指定されているように、SCSI LUNデータ・フィールド(これは、8バイト構造である)内にエンコードされる。PE IDは、最初の2バイト(これは、従来はLUN ID用に使用されている)内にエンコードされ、vvol情報、とりわけSLLIDは、残っている6バイト(の一部)を利用して、SCSIセカンド・レベルLUN ID内にエンコードされる。
図5Aにおいてさらに示されているように、データ・アクセス・レイヤ540はまた、ストレージ・システムから帯域内パスを通じて受信されるIOエラーを取り扱うためのエラー・ハンドリング・ユニット542を含む。一実施形態においては、エラー・ハンドリング・ユニット542によって受信されたIOエラーは、I/Oマネージャ304によってPEを通じて伝搬される。IOエラー・クラスの例としては、コンピュータ・システム101とPEとの間におけるパス・エラーと、PEエラーと、vvolエラーとが含まれる。エラー・ハンドリング・ユニット542は、検知されたすべてのエラーを上述のクラスへと分類する。PEへのパス・エラーに出くわし、PEへの別のパスが存在する場合には、データ・アクセス・レイヤ540は、PEへの別のパスに沿ってIOを送信する。IOエラーがPEエラーである場合には、エラー・ハンドリング・ユニット542は、PEを通じてIOを発行しているそれぞれのブロック・デバイスに関するエラー状況を示すために、ブロック・デバイス・データベース533を更新する。IOエラーがvvolエラーである場合には、エラー・ハンドリング・ユニット542は、vvolに関連付けられているそれぞれのブロック・デバイスに関するエラー状況を示すために、ブロック・デバイス・データベース533を更新する。エラー・ハンドリング・ユニット542は、アラームまたはシステム・イベントを発行することもでき、それによって、エラー状況を有するブロック・デバイスへのさらなるIOは、拒否されることになる。
図5Bは、図2Aのストレージ・システム・クラスタの代わりに図2Bのストレージ・システム・クラスタとインターフェースを取るように構成されている図5Aのコンピュータ・システムのブロック図である。この実施形態においては、データ・アクセス・レイヤ540は、NFSクライアント545と、NIC503のためのデバイス・ドライバ546とを含む。NFSクライアント545は、ブロック・デバイス名を、PE ID(NASストレージ・システムのIPアドレス)と、ブロック・デバイスに対応するNFSファイル・ハンドルであるSLLIDとにマップする。このマッピングは、図5Bにおいて示されているように、ブロック・デバイス・データベース533内に格納される。「アクティブ」および「CIF」の列は、依然として存在するが、図5Bに示されているブロック・デバイス・データベース533においては示されていないということに留意されたい。以降で説明するように、NFSファイル・ハンドルは、NASストレージ・システム内のファイル・オブジェクトを一意に識別し、バインド工程中に生成されることが可能である。あるいは、vvolをバインドしたいという要求に応答して、NASストレージ・システムは、PE IDおよびSLLIDを返し、通常の帯域内メカニズム(たとえば、ルックアップまたはreaddirplus)を使用してvvolが開かれると、NFSファイル・ハンドルが与えられることになる。NFSクライアント545はまた、仮想ボリューム・デバイス・ドライバ532から受信されたロー・ブロックレベルIOをNFSファイルベースのIOに変換する。次いで、NIC503のためのデバイス・ドライバ546は、プロトコルに準拠したフォーマットでNFSファイルベースのIOをフォーマットして、それらのNFSファイルベースのIOを、帯域内パスを介してPEのうちの1つへ転送するために、NFSハンドルとともに、NIC503へ送信する。
図5Cは、仮想ボリュームを実装するように構成されているコンピュータ・システムの別の実施形態のブロック図である。この実施形態においては、コンピュータ・システム102は、仮想化ソフトウェア(ここでは、ハイパーバイザ560として示されている)を伴って構成されている。ハイパーバイザ560は、ハードウェア・プラットフォーム550の上にインストールされており、ハードウェア・プラットフォーム550は、CPU551、メモリ552、NIC553、およびHBA554を含み、仮想マシン実行スペース570をサポートし、仮想マシン実行スペース570内では、複数の仮想マシン(VM)5711〜571Nが、同時にインスタンス化されて実行されることが可能である。1つまたは複数の実施形態においては、ハイパーバイザ560および仮想マシン571は、ヴイエムウェア・インコーポレイティッド社(VMware, Inc.)[米国カリフォルニア州パロアルト(Palo Alto)所在]によって販売されているVMware vSphere(登録商標)製品を使用して実装される。それぞれの仮想マシン571は、仮想ハードウェア・プラットフォーム573を実装しており、仮想ハードウェア・プラットフォーム573は、アプリケーション579を実行することができるゲスト・オペレーティング・システム(OS)572のインストレーションをサポートする。ゲストOS572の例としては、よく知られているコモディティー・オペレーティング・システム、たとえばMicrosoft Windows、Linuxなどのうちの任意のものが含まれる。それぞれのインスタンスにおいて、ゲストOS572は、ネイティブ・ファイル・システム・レイヤ(図5Cにおいては示されていない)、たとえば、NTFSまたはext3FSタイプのファイル・システム・レイヤのいずれかを含む。これらのファイル・システム・レイヤは、仮想ハードウェア・プラットフォーム573とインターフェースを取って、ゲストOS572の視点からは、データ・ストレージHBAにアクセスするが、このデータ・ストレージHBAは、実際には、ゲストOS572の実行を可能にするためにディスク・ストレージ・サポートの外見(実際には、仮想ディスク、すなわち仮想ディスク575A〜575X)を提供する仮想ハードウェア・プラットフォーム573によって実装されている仮想HBA574である。特定の実施形態においては、仮想ディスク575A〜575Xは、ゲストOS572の視点からは、仮想マシンに接続するためのSCSI標準、または、IDE、ATA、およびATAPIを含む、当技術分野における標準的な技術者に知られているその他の任意の適切なハードウェア接続インターフェース標準をサポートするように見えることが可能である。ゲストOS572の視点からは、ファイル・システム関連のデータ転送およびコントロール・オペレーションを実施するためにそのようなゲストOS572によって開始されたファイル・システム・コールは、最終的な実行のために仮想ディスク575A〜575Xへ回送されるように見えるが、実際には、そのようなコールは、処理され、仮想HBA574を通じて補助的な仮想マシン・モニタ(VMM)5611〜561Nに渡され、VMM5611〜561Nは、ハイパーバイザ560とのオペレーションを調整するために必要とされる仮想システム・サポートを実施する。とりわけ、HBAエミュレータ562は、データ転送およびコントロール・オペレーションがハイパーバイザ560によって正しく取り扱われることを機能的に可能にし、ハイパーバイザ560は最終的に、そのようなオペレーションを、自分のさまざまなレイヤを通じて、ストレージ・システム130へ接続しているHBA554に渡す。
本明細書に記載されている実施形態によれば、それぞれのVM571は、自分に関連付けられている1つまたは複数のvvolを有しており、VM571によるハイパーバイザ560への「CREATE DEVICE」コールに従ってハイパーバイザ560によって作成されたvvolのブロック・デバイス・インスタンスにIOを発行する。ブロック・デバイス名と、vvol IDとの間における関連付けは、ブロック・デバイス・データベース580内に保持される。VM5712〜571NからのIOは、SCSI仮想化レイヤ563によって受信され、SCSI仮想化レイヤ563は、それらのIOを、仮想マシン・ファイル・システム(VMFS)ドライバ564によって理解されるファイルIOへと変換する。次いで、VMFSドライバ564は、それらのファイルIOをブロックIOに変換し、それらのブロックIOを仮想ボリューム・デバイス・ドライバ565に提供する。その一方で、VM5711からのIOは、VMFSドライバ564を迂回するように示されており、仮想ボリューム・デバイス・ドライバ565に直接提供され、これが意味するのは、VM5711が、自分のブロック・デバイスに直接、ロー・ストレージ・デバイスとして、たとえば、データベース・ディスク、ログ・ディスク、バックアップ・アーカイブ、およびコンテンツ・リポジトリとして、米国特許第7,155,558号に記載されている様式でアクセスするということである。
仮想ボリューム・デバイス・ドライバ565は、ブロックIOを受信した場合には、ブロック・デバイス・データベース580にアクセスして、そのIO内で指定されているブロック・デバイス名と、そのブロック・デバイス名に関連付けられているvvolへのIOセッションを定義するPE IDおよびSLLIDとの間におけるマッピングを参照する。ここで示されている例においては、「dbase」および「log」というブロック・デバイス名は、VM5711に関してそれぞれ作成されたvvol1およびvvol4のブロック・デバイス・インスタンスに対応しており、「vmdk2」、「vmdkn」および「snapn」というブロック・デバイス名は、VM5712〜571Nのうちの1つまたは複数に関してそれぞれ作成されたvvol12、vvol16、およびvvol17のブロック・デバイス・インスタンスに対応する。ブロック・デバイス・データベース580内に格納されているその他の情報としては、ブロック・デバイスがアクティブであるか否かを示すそれぞれのブロック・デバイスに関するアクティブ・ビット値と、CIF(commands−in−flight:処理中コマンド)値とが含まれる。「1」というアクティブ・ビットは、IOがブロック・デバイスに発行されることが可能であるということを意味する。「0」というアクティブ・ビットは、ブロック・デバイスが非アクティブであり、IOがブロック・デバイスに発行されることは不可能であるということを意味する。CIF値は、いくつのIOが処理中であるか、すなわち、発行されたが完了されていないかの表示を提供する。
上述のマッピングを実行することに加えて、仮想ボリューム・デバイス・ドライバ565は、データ・アクセス・レイヤ566にロー・ブロックレベルIOを発行する。データ・アクセス・レイヤ566は、コマンド・キューイングおよびスケジューリング・ポリシーをロー・ブロックレベルIOに適用するデバイス・アクセス・レイヤ567と、プロトコルに準拠したフォーマットでロー・ブロックレベルIOをフォーマットして、それらのロー・ブロックレベルIOを、帯域内パスを介してPEへ転送するためにHBA554に送信する、HBA554のためのデバイス・ドライバ568とを含む。SCSIプロトコルが使用される実施形態においては、vvol情報は、SAM−5(SCSI Architecture Model−5)において指定されているように、SCSI LUNデータ・フィールド(これは、8バイト構造である)内にエンコードされる。PE IDは、最初の2バイト(これは、従来はLUN ID用に使用されている)内にエンコードされ、vvol情報、とりわけSLLIDは、残っている6バイト(の一部)を利用して、SCSIセカンド・レベルLUN ID内にエンコードされる。図5Cにおいてさらに示されているように、データ・アクセス・レイヤ566はまた、エラー・ハンドリング・ユニット569を含み、エラー・ハンドリング・ユニット569は、エラー・ハンドリング・ユニット542と同じ様式で機能する。
図5Dは、図2Aのストレージ・システム・クラスタの代わりに図2Bのストレージ・システム・クラスタとインターフェースを取るように構成されている図5Cのコンピュータ・システムのブロック図である。この実施形態においては、データ・アクセス・レイヤ566は、NFSクライアント585と、NIC553のためのデバイス・ドライバ586とを含む。NFSクライアント585は、ブロック・デバイス名を、PE ID(IPアドレス)と、ブロック・デバイスに対応するSLLID(NFSファイル・ハンドル)とにマップする。このマッピングは、図5Dにおいて示されているように、ブロック・デバイス・データベース580内に格納される。「アクティブ」および「CIF」の列は、依然として存在するが、図5Dに示されているブロック・デバイス・データベース580においては示されていないということに留意されたい。以降で説明するように、NFSファイル・ハンドルは、NFS内のファイル・オブジェクトを一意に識別し、一実施形態においてはバインド工程中に生成される。NFSクライアント585はまた、仮想ボリューム・デバイス・ドライバ565から受信されたロー・ブロックレベルIOをNFSファイルベースのIOに変換する。次いで、NIC553のためのデバイス・ドライバ586は、プロトコルに準拠したフォーマットでNFSファイルベースのIOをフォーマットして、それらのNFSファイルベースのIOを、帯域内パスを介してPEのうちの1つへ転送するために、NFSハンドルとともに、NIC553へ送信する。
図5A〜図5Dにおけるコンポーネントを説明するために使用されているさまざまな用語、レイヤ、および分類は、それらの機能、または本発明の趣旨もしくは範囲から逸脱することなく、別の形で参照されることが可能であるということを認識されたい。たとえば、VMM561は、VM571とハイパーバイザ560との間における別個の仮想化コンポーネントとみなされることが可能である(ハイパーバイザ560は、そのような概念においては、それ自体が仮想化「カーネル」コンポーネントとみなされることが可能である)。なぜなら、それぞれのインスタンス化されたVMごとに別々のVMMが存在するためである。あるいは、それぞれのVMM561は、そのVMM561の対応する仮想マシンのコンポーネントであるとみなされることが可能である。なぜなら、そのようなVMMは、その仮想マシンに関するハードウェア・エミュレーション・コンポーネントを含むためである。そのような代替概念においては、たとえば、仮想ハードウェア・プラットフォーム573として記載されている概念レイヤは、VMM561と、およびVMM561内へ合併されることが可能であり、それによって、仮想ホスト・バス・アダプタ574は、図5Cおよび図5Dから除去される(すなわち、その仮想ホスト・バス・アダプタ574の機能は、ホスト・バス・アダプタ・エミュレータ562によって実施されるためである)。
図6は、本発明の一実施形態による、vvolを管理するために使用されるコンポーネントおよび通信パスを示すコンピュータ環境の簡略化されたブロック図である。前述したように、IOプロトコル・トラフィックのための通信パスは、帯域内パスと呼ばれ、図6においては破線601として示されており、破線601は、コンピュータ・システムのデータ・アクセス・レイヤ540を(コンピュータ・システムにおいて提供されているHBAまたはNICを通じて)、ストレージ・システム130において構成されている1つまたは複数のPEと接続している。vvolを管理するために使用される通信パスは、帯域外パス(前に定義したように、「帯域内」ではないパス)であり、図6においては実線602として示されている。本明細書に記載されている実施形態によれば、vvolは、管理サーバ610において提供されているプラグイン612、および/またはコンピュータ・システム103のそれぞれにおいて提供されているプラグイン622を通じて管理されることが可能であり、図6においては、コンピュータ・システム103のうちの1つのみが示されている。ストレージ・デバイス側では、管理インターフェース625が、ストレージ・システム・マネージャ131によって構成されており、管理インターフェース626が、ストレージ・システム・マネージャ132によって構成されている。加えて、管理インターフェース624が、分散型ストレージ・システム・マネージャ135によって構成されている。それぞれの管理インターフェースは、プラグイン612、622と通信する。管理コマンドの発行および取り扱いを容易にするために、特別なアプリケーション・プログラミング・インターフェース(API)が開発されている。一実施形態においては、プラグイン612、622の両方が、特定のストレージ・システム・ベンダーからのストレージ・ハードウェアと通信するようにカスタマイズされているということを認識されたい。したがって、管理サーバ610およびコンピュータ・システム103は、別々のストレージ・システム・ベンダーに関するストレージ・ハードウェアと通信する場合には、別々のプラグインを採用することになる。別の実施形態においては、任意のベンダーの管理インターフェースと対話する単一のプラグインが存在することができる。これは、ストレージ・システム・マネージャが、(たとえば、コンピュータ・システムおよび/または管理サーバによって発行されているという理由で、)よく知られているインターフェースに合わせてプログラムされることを必要とすることになる。
管理サーバ610はさらに、コンピュータ・システムを管理するためのシステム・マネージャ611を伴って構成されている。一実施形態においては、コンピュータ・システムは、仮想マシンを実行しており、システム・マネージャ611は、コンピュータ・システムにおいて稼働している仮想マシンを管理する。仮想マシンを管理するシステム・マネージャ611の1例は、ヴイエムウェア・インコーポレイティッド社(VMware, Inc.)によって販売されているvSphere(登録商標)製品である。示されているように、システム・マネージャ611は、コンピュータ・システム103からリソース使用レポートを受信するために、およびコンピュータ・システム103において稼働しているアプリケーション上でさまざまな管理オペレーションを開始するために、(管理サーバ610およびコンピュータ・システム103の両方において適切なハードウェア・インターフェースを通じて、)コンピュータ・システム103において稼働しているホスト・デーモン(hostd)621と通信する。
図7は、認証関連のAPIを使用して図2Aまたは図2Bのストレージ・システム・クラスタに対してコンピュータ・システムを認証するための方法工程の流れ図である。これらの方法工程は、コンピュータ・システムが自分のセキュア・ソケット・レイヤ(SSL)証明書をストレージ・システムに送信することによって認証を要求したときに、開始される。工程710において、ストレージ・システムは、認証クレデンシャル(たとえば、ユーザ名およびパスワード)を求めるプロンプトを、認証を要求しているコンピュータ・システムに発行する。工程712において認証クレデンシャルを受信すると、ストレージ・システムは、工程714において、それらの認証クレデンシャルを、格納されているクレデンシャルと比較する。正しいクレデンシャルが提供された場合には、ストレージ・システムは、認証されたコンピュータ・システムのSSL証明書をキー・ストア内に格納する(工程716)。正しくないクレデンシャルが提供された場合には、ストレージ・システムは、SSL証明書を無視して、適切なエラー・メッセージを返す(工程718)。認証された後に、コンピュータ・システムは、SSLリンクを介してストレージ・システムに管理コマンドを発行するためにAPIを呼び出すことができ、また、SSL証明書内に含まれている一意のコンテキストIDが、どのコンピュータ・システムがどのストレージ・コンテナにアクセスすることができるかを定義することなどの特定のポリシーを実施するために、ストレージ・システムによって使用される。いくつかの実施形態においては、コンピュータ・システムのコンテキストIDが、それらのコンピュータ・システムに与えられた許可を管理する際に使用されることが可能である。たとえば、ホスト・コンピュータは、vvolを作成することを許可されることが可能であるが、そのvvolを削除すること、もしくはそのvvolをスナップショットすることを許可されないことが可能であり、またはホスト・コンピュータは、vvolのスナップショットを作成することを許可されることが可能であるが、そのvvolをクローンすることを許可されないことが可能である。加えて、許可は、認証されたコンピュータ・システムにログインされるユーザのユーザレベル特権に従って変わることが可能である。
図8は、仮想ボリューム作成APIコマンドを使用して仮想ボリュームを作成するための方法工程の流れ図である。一実施形態においては、コンピュータ・システム103は、最小IOPSおよび平均待ち時間など、特定のサイズおよびストレージ能力プロファイルを有するvvolを作成したいという要求を自分のアプリケーションのうちの1つから工程802において受信した場合には、帯域外パス602を介してストレージ・システムに仮想ボリューム作成APIコマンドを発行する。それに応じて、コンピュータ・システム103は、工程804において、1つのストレージ・コンテナを(コンピュータ・システム103および要求を行っているアプリケーションがアクセスすることを許可されていて、かつ要求に対応するのに十分な空きキャパシティーを有するストレージ・コンテナの中から)選択し、プラグイン622を介してストレージ・システムに仮想ボリューム作成APIコマンドを発行する。このAPIコマンドは、ストレージ・コンテナIDと、vvolサイズと、vvolのストレージ能力プロファイルとを含む。別の実施形態においては、このAPIコマンドは、一組のキー/値のペアを含み、アプリケーションは、ストレージ・システムが、その一組のキー/値のペアを、新たに作成されたvvolとともに格納することを必要とする。別の実施形態においては、管理サーバ610は、帯域外パス602を介してストレージ・システムに仮想ボリューム作成APIコマンドを(プラグイン612を介して)発行する。
工程806において、ストレージ・システム・マネージャは、管理インターフェース(たとえば、管理インターフェース624、625、または626)を介して、vvolを生成したいという要求を受信し、コンテナ・データベース316内の選択されたストレージ・コンテナのメタデータ・セクションにアクセスして、コンピュータ・システム103とアプリケーションとを含む要求コンテキストが、その選択されたストレージ・コンテナ内にvvolを作成するのに十分な許可を有していることを確かめる。一実施形態においては、許可レベルが十分でない場合には、エラー・メッセージがコンピュータ・システム103に返される。許可レベルが十分である場合には、工程810において、一意のvvol IDが生成される。次いで工程812において、ストレージ・システム・マネージャは、コンテナ・データベース316のメタデータ・セクション内のアロケーション・ビットマップをスキャンして、選択されたストレージ・コンテナの空いているパーティションを特定する。ストレージ・システム・マネージャは、選択されたストレージ・コンテナの空いているパーティションを、要求されているvvolサイズに対応するのに十分なだけ割り当て、コンテナ・データベース316のストレージ・コンテナのメタデータ・セクション内のアロケーション・ビットマップを更新する。ストレージ・システム・マネージャはまた、新たなvvolエントリーでvvolデータベース314を更新する。新たなvvolエントリーは、工程810において生成されたvvol IDと、新たに割り当てられたストレージ・コンテナ・エクステントの順序付けられたリストと、キー/値のペアとして表されている新たなvvolのメタデータとを含む。次いで工程814において、ストレージ・システム・マネージャは、vvol IDをコンピュータ・システム103へ送信する。工程816において、コンピュータ・システム103は、vvol IDを、vvolの作成を要求したアプリケーションに関連付ける。一実施形態においては、それぞれのアプリケーションに関して、1つまたは複数のvvol記述子ファイルが保持され、vvolの作成を要求したアプリケーションに関して保持されているvvol記述子ファイル内にvvol IDが書き込まれる。
図2Aおよび図2Bにおいて示されているように、すべてのvvolがPEに接続されているわけではない。PEに接続されていないvvolは、対応するアプリケーションによって発行されたIOに気づかない。なぜなら、そのvvolにはIOセッションが確立されていないためである。IOがvvolに発行されることが可能になる前に、そのvvolはバインド工程を経て、その結果として、そのvvolは特定のPEにバインドされることになる。vvolがPEにバインドされると、そのvvolがそのPEからアンバインドされるまで、IOがそのvvolに発行されることが可能である。
一実施形態においては、バインド要求は、コンピュータ・システム103によって、バインド仮想ボリュームAPIを使用して、帯域外パス602を介してストレージ・システムに発行される。バインド要求は、(vvol IDを使用して、)バインドされることになるvvolを識別し、それに応じてストレージ・システムは、そのvvolを、コンピュータ・システム103が帯域内パスを介して接続されるPEにバインドする。図9Aは、コンピュータ・システムが帯域内パスを介して接続されるPEをそのコンピュータ・システムが発見するための方法工程の流れ図である。SCSIプロトコルベースのストレージ・デバイスにおいて構成されているPEは、標準的なSCSIコマンド、REPORT_LUNSを使用して、帯域内パスを介して発見される。NFSプロトコルベースのストレージ・デバイスにおいて構成されているPEは、APIを使用して、帯域外パスを介して発見される。図9Aの方法工程は、コンピュータ・システムによって、それぞれの接続されているストレージ・システムごとに実行される。
工程910において、コンピュータ・システムは、接続されているストレージ・システムがSCSIプロトコルベースであるか、またはNFSプロトコルベースであるかを判定する。ストレージ・システムがSCSIプロトコルベースである場合には、SCSIコマンド、REPORT_LUNSが、帯域内のコンピュータ・システムによってストレージ・システムに発行される(工程912)。次いで工程913において、コンピュータ・システムは、ストレージ・システムからの応答、とりわけ、返されるPE IDのそれぞれに関連付けられているPEビットを調べて、PE関連のLUNと、従来のデータLUNとの間における区別を行う。ストレージ・システムがNFSプロトコルベースである場合には、利用可能なPEのIDを得るために、APIコールが、帯域外のコンピュータ・システムによって、プラグイン622から管理インターフェース(たとえば、管理インターフェース624、625、または626)に発行される(工程914)。工程913および914の後に続く工程916において、コンピュータ・システムは、ストレージ・システムによって返されたPE関連のLUNのPE ID、または管理インターフェースによって返されたPE IDを、バインド工程中に使用するために格納する。SCSIプロトコルベースのストレージ・デバイスによって返されたPE IDはそれぞれ、WWNを含み、NFSプロトコルベースのストレージ・デバイスによって返されたPE IDはそれぞれ、IPアドレスおよびマウント・ポイントを含むということを認識されたい。
図9Bは、所与のコンピュータ・システム103が帯域内パスを介して接続されるPEを、ストレージ・システム・マネージャ131、またはストレージ・システム・マネージャ132、または分散型ストレージ・システム・マネージャ135(以降では、「ストレージ・システム・マネージャ」と呼ばれる)が発見するための方法工程の流れ図である。そのようなPEをストレージ・システム・マネージャによって発見することにより、ストレージ・システムは、コンピュータ・システムからのバインド要求に応答して、要求を行っているコンピュータ・システムに、有効なPE IDを返すことができ、コンピュータ・システムは、そのPE ID上に実際に接続されることが可能である。工程950において、ストレージ・システム・マネージャは、管理インターフェースおよびプラグイン622を介してコンピュータ・システム103に帯域外の「Discover_Topology」APIコールを発行する。コンピュータ・システム103は、自分のシステムIDと、図9Aの流れ図を介して自分が発見したすべてのPE IDのリストとを返す。一実施形態においては、ストレージ・システム・マネージャは、管理インターフェースおよびプラグイン612を介して管理サーバ610に「Discover_Topology」APIコールを発行することによって、工程950を実行する。そのような一実施形態においては、ストレージ・システムは、複数のコンピュータ・システムIDと、関連付けられているPE IDとを含む応答を、管理サーバ610が管理するそれぞれのコンピュータ・システム103ごとに1つ受信することになる。次いで工程952において、ストレージ・システム・マネージャは、工程950からの結果を処理する。たとえば、ストレージ・システム・マネージャは、自分の現在のコントロール下にないすべてのPE IDのリストを消去する。たとえば、Discover_Topologyコールを発行しているときにストレージ・システム・マネージャ135によって受信される特定のPE IDは、同じコンピュータ・システムに接続されている別のストレージ・システムに対応している可能性がある。同様に、受信される特定のPE IDは、その後にストレージ・システム管理者によって削除されたさらに古いPEに対応している可能性がある、といった具合である。工程954において、ストレージ・システム・マネージャは、処理された結果を、その後のバインド要求中に使用するためにキャッシュする。一実施形態においては、ストレージ・システム・マネージャは、図9Bの工程を定期的に実行して、コンピュータ・システムおよびネットワーク・トポロジーの進行中の変化で自分のキャッシュされた結果を更新する。別の実施形態においては、ストレージ・システム・マネージャは、新たなvvol作成要求を受信するたびに、図9Bの工程を実行する。さらに別の実施形態においては、ストレージ・システム・マネージャは、図7の認証工程を実行した後に、図9Bの工程を実行する。
図10は、バインド仮想ボリュームAPIを使用して仮想ボリューム・バインド要求を発行および実行するための方法工程の流れ図である。一実施形態においては、コンピュータ・システム103は、自分のアプリケーションのうちの1つが、まだPEにバインドされていないvvolに関連付けられているブロック・デバイスへのIOアクセスを要求した場合には、帯域外パス602を介してストレージ・システムにバインド要求を発行する。別の実施形態においては、管理サーバ610は、VMのパワー・オン、および1つのストレージ・コンテナから別のストレージ・コンテナへのvvolの移行を含む特定のVM管理オペレーションに関連したバインド要求を発行する。
まだPEにバインドされていないvvolに関連付けられているブロック・デバイスへのIOアクセスをアプリケーションが要求している上述の例について続けると、コンピュータ・システム103は、工程1002において、ブロック・デバイス・データベース533(または580)から、そのvvolのvvol IDを特定する。次いで工程1004において、コンピュータ・システム103は、そのvvolをバインドしたいという要求を、帯域外パス602を通じてストレージ・システムに発行する。
ストレージ・システム・マネージャは、工程1006において、管理インターフェース(たとえば、管理インターフェース624、625、または626)を介して、vvolをバインドしたいという要求を受信し、次いで、vvolがバインドされることになるPEを選択すること、選択されたPEに関するSLLIDおよび世代番号を生成すること、ならびに(たとえば、IOマネージャ304を介して)接続データベース312を更新することを含む工程1008を実行する。vvolがバインドされることになるPEの選択は、接続(すなわち、コンピュータ・システム103への既存の帯域内接続を有するPEのみが、選択に利用可能である)と、利用可能なPEを通る現在のIOトラフィックなどのその他の要因とに従って行われる。一実施形態においては、ストレージ・システムは、図9Bの方法に従ってコンピュータ・システム103がそのストレージ・システムに送信したPEの処理されてキャッシュされたリストから選択を行う。SLLIDの生成は、図2Aのストレージ・システム・クラスタを採用している実施形態と、図2Bのストレージ・システム・クラスタを採用している実施形態との間において異なる。前者のケースにおいては、選択されたPEに関して一意であるSLLIDが生成される。後者のケースにおいては、vvolに対応するファイル・オブジェクトへのファイル・パスが、SLLIDとして生成される。選択されたPEに関してSLLIDおよび世代番号が生成された後に、接続データベース312は、vvolに対する新たに生成されたIOセッションを含むように更新される。次いで工程1010において、選択されたPEのID、生成されたSLLID、および世代番号が、コンピュータ・システム103に返される。任意選択で、図2Bのストレージ・システム・クラスタを採用している実施形態においては、一意のNFSファイル・ハンドルが、vvolに対応するファイル・オブジェクトに関して生成され、選択されたPEのID、生成されたSLLID、および世代番号とともにコンピュータ・システム103に返されることが可能である。工程1012において、コンピュータ・システム103は、ストレージ・システムから返されたPE ID、SLLID(および任意選択で、NFSハンドル)、および世代番号を含めるようにブロック・デバイス・データベース533(または580)を更新する。とりわけ、ストレージ・システムから返されたPE ID、SLLID(および任意選択で、NFSハンドル)、および各組の世代番号は、新たなエントリーとしてブロック・デバイス・データベース533(または580)に加えられることになる。世代番号は、リプレイ攻撃を防ぐために使用されるということを認識されたい。したがって、リプレイ攻撃が懸念されない実施形態においては、世代番号は使用されない。
同じvvolにIOを発行したいと望む別のアプリケーションによって開始された同じvvolへのその後のバインド要求に対して、ストレージ・システム・マネージャは、そのvvolを同じまたは別のPEにバインドすることができる。そのvvolが同じPEにバインドされる場合には、ストレージ・システム・マネージャは、その同じPEのIDと、以前に生成されたSLLIDとを返し、接続データベース312内に格納されているこのIO接続パスのリファレンス・カウントをインクリメントする。その一方で、そのvvolが別のPEにバインドされる場合には、ストレージ・システム・マネージャは、新たなSLLIDを生成し、その別のPEのIDと、新たに生成されたSLLIDとを返し、そのvvolへのこの新たなIO接続パスを新たなエントリーとして接続データベース312に加える。
アンバインド仮想ボリュームAPIを使用して、仮想ボリューム・アンバインド要求が発行されることが可能である。アンバインド要求は、vvolがそれまでにバインドされた際に経由したIO接続パスのPE IDおよびSLLIDを含む。しかしながら、アンバインド要求の処理は、助言的なものである。ストレージ・システム・マネージャが、すぐに、または遅れてvvolをPEからアンバインドするのは自由である。アンバインド要求は、PE IDおよびSLLIDを含むエントリーのリファレンス・カウントをデクリメントするように接続データベース312を更新することによって、処理される。リファレンス・カウントがゼロまでデクリメントされた場合には、そのエントリーは、削除されることが可能である。このケースにおいては、そのvvolは、引き続き存在するが、その所与のPE IDおよびSLLIDを使用したIOにそれ以上利用することはできないということに留意されたい。
VMの仮想ディスクを実装しているvvolのケースにおいては、このvvolに関するリファレンス・カウントは、少なくとも1となる。VMがパワー・オフされ、それに関連してアンバインド要求が発行された場合には、リファレンス・カウントは、1だけデクリメントされることになる。リファレンス・カウントがゼロである場合には、vvolエントリーは、接続データベース312から除去されることが可能である。一般に、エントリーを接続データベース312から除去することは有益である。なぜなら、I/Oマネージャ304は、より少ないデータを管理し、SLLIDを再利用することもできるためである。そのような利点は、ストレージ・システムによって格納されているvvolの総数が多い(たとえば、数百万個程度のvvol)が、アプリケーションによってアクティブにアクセスされているvvolの総数が少ない(たとえば、数万個のVM)場合に、顕著になる。加えて、vvolがいずれのPEにもバインドされていない場合には、ストレージ・システムは、そのvvolをDSU141内のどこに格納するかを選択する際に、より大きな柔軟性を有する。たとえば、ストレージ・システムは、いくつかのDSU141が、より高速なデータ・アクセスを提供し、その他のDSU141が、(たとえば、ストレージ・コストを節約するために)より低速なデータ・アクセスを提供する、非対称的な、階層的なDSU141を伴って実装されることが可能である。1実施態様においては、vvolがいずれのPEにもバインドされていない場合には(これは、接続データベース312内のそのvvolのエントリーのリファレンス・カウントをチェックすることによって判定されることが可能である)、ストレージ・システムは、そのvvolを、より低速なおよび/またはより安価なタイプの物理ストレージに移行させることができる。次いで、そのvvolがPEにバインドされると、ストレージ・システムは、そのvvolを、より高速なタイプの物理ストレージに移行させることができる。そのような移行は、vvolデータベース314内の所与のvvolを構成するコンテナ・ロケーションの順序付けられたリストの1つまたは複数の要素を変更すること、およびコンテナ・データベース316のメタデータ・セクション内の対応するエクステント・アロケーション・ビットマップを更新することによって達成されることが可能であるということを認識されたい。
vvolをPEにバインドすることおよびアンバインドすることによって、ストレージ・システム・マネージャは、vvolの活性を決定することができる。ストレージ・システム・マネージャは、この情報を利用して、IOサービスを提供しない(パッシブな)vvolおよびIOサービスを提供する(アクティブな)vvolに関してストレージ・システム・ベンダー固有の最適化を実行することができる。たとえば、ストレージ・システム・マネージャは、vvolが、特定のしきい値の時間を超えてパッシブな状態にとどまっている場合には、そのvvolを、待ち時間が少ない(高いコストの)SSDから、待ち時間が中程度の(低いコストの)ハード・ドライブへ移動させるように構成されることが可能である。
図11Aおよび図11Bは、一実施形態による、仮想ボリュームにIOを発行するための方法工程の流れ図である。図11Aは、アプリケーションからのIOを直接ロー・ブロック・デバイスに発行するための方法工程1100の流れ図であり、図11Bは、アプリケーションからのIOを、ファイル・システム・ドライバを通じて発行するための方法工程1120の流れ図である。
方法1100は、工程1102において開始し、工程1102では、図5A〜図5Bにおいて示されているアプリケーション512、または図5C〜図5Dにおいて示されているVM571などのアプリケーションが、ロー・ブロック・デバイスにIOを発行する。工程1104において、仮想ボリューム・デバイス・ドライバ532または565が、アプリケーションによって発行されたIOからロー・ブロックレベルIOを生成する。工程1106において、ロー・ブロック・デバイスの名前が、仮想ボリューム・デバイス・ドライバ532または565によってPE IDおよびSLLIDに(そしてまた、図2Bのストレージ・デバイスを採用している実施形態においては、NFSクライアント545または585によってNFSハンドルに)変換される。工程1108において、データ・アクセス・レイヤ540または566が、PE IDおよびSLLIDを(そしてまた、図2Bのストレージ・デバイスを採用している実施形態においては、NFSハンドルを)ロー・ブロックレベルIOへとエンコードすることを実行する。次いで工程1110において、HBA/NICが、ロー・ブロックレベルIOを発行する。
図5A〜図5Bにおいて示されているアプリケーション512など、VM以外のアプリケーションに関しては、方法1120は、工程1121において開始する。工程1121においては、アプリケーションが、vvolベースのブロック・デバイス上に格納されているファイルにIOを発行する。次いで工程1122において、ファイル・システム・ドライバ、たとえばファイル・システム・ドライバ510が、ファイルIOからブロックレベルIOを生成する。工程1122の後には、工程1126、1128、および1130(これらは、工程1106、1108、および1110と同じである)が実行される。
図5C〜図5Dにおいて示されているVM571など、VMアプリケーションに関しては、方法1120は、工程1123において開始する。工程1123においては、VMが、自分の仮想ディスクにIOを発行する。次いで工程1124において、このIOは、たとえばSCSI仮想化レイヤ563によって、ファイルIOに変換される。次いで、ファイル・システム・ドライバ、たとえばVMFSドライバ564が、工程1125において、ファイルIOからブロックレベルIOを生成する。工程1125の後には、工程1126、1128、および1130(これらは、工程1106、1108、および1110と同じである)が実行される。
図12は、一実施形態による、ストレージ・システムにおいてIOを実行するための方法工程の流れ図である。工程1210において、コンピュータ・システムによって発行されたIOが、ストレージ・システムにおいて構成されているPEのうちの1つを通じて受信される。そのIOは、工程1212においてIOマネージャ304によって解析される。工程1212の後には、ストレージ・システム・クラスタが、図2Aにおいて示されているタイプのものである場合には、IOマネージャ304によって工程1214aが実行され、ストレージ・システム・クラスタが、図2Bにおいて示されているタイプのものである場合には、IOマネージャ304によって工程1214bが実行される。工程1214aにおいては、IOマネージャ304は、解析されたIOからSLLIDを抽出し、接続データベース312にアクセスして、PE IDと、抽出されたSLLIDとに対応するvvol IDを特定する。工程1214bにおいては、IOマネージャ304は、解析されたIOからNFSハンドルを抽出し、PE IDと、SLLIDとしてのNFSハンドルとを使用して、vvolを識別する。工程1214aおよび1214bの後には、工程1216が実行される。工程1216においては、IOが実行されることになる物理ストレージ・ロケーションを得るために、vvolデータベース314およびコンテナ・データベース316が、それぞれボリューム・マネージャ306およびコンテナ・マネージャ308によってアクセスされる。次いで工程1218において、データ・アクセス・レイヤ310が、工程1216において得られた物理ストレージ・ロケーション上でIOを実行する。
いくつかの状況においては、アプリケーション(アプリケーション512またはVM571)、管理サーバ610、および/またはストレージ・システム・マネージャは、特定のPEに対するあるvvolのバインディングが、問題(そのPEが、あまりにも多くのバインディングでオーバーロード状態になっている場合など)を経験していると判定する場合がある。そのような問題を解決するための方法として、バインドされているvvolは、IOコマンドがそのvvolへ導かれている間でさえ、ストレージ・システム・マネージャによって別のPEに再バインドされることが可能である。図13は、再バインドAPIを使用した、一実施形態による、vvol再バインド要求を発行および実行するための方法工程1300の流れ図である。
示されているように、方法1300は、工程1302において開始し、工程1302では、ストレージ・システム・マネージャは、vvolが、そのvvolが現在バインドされている第1のPEとは異なる第2のPEにバインドされるべきであると判定する。工程1304において、ストレージ・システム・マネージャは、vvolを再バインドしたいという要求を、vvolにIOを発行するアプリケーションを実行しているコンピュータ・システム(たとえば、コンピュータ・システム103)に、帯域外パスを介して発行する。工程1306において、コンピュータ・システム103は、ストレージ・システム・マネージャから再バインド要求を受信し、それに応じて、vvolを新たなPEにバインドしたいという要求を発行する。工程1308において、ストレージ・システム・マネージャは、再バインド要求を受信し、それに応じて、vvolを新たなPEにバインドする。工程1310において、ストレージ・システム・マネージャは、図10に関連して上述したように、vvolが現在やはりバインドされている新たなPEのIDと、vvolにアクセスするためのSLLIDとをコンピュータ・システムに送信する。
工程1312において、コンピュータ・システムは、ストレージ・システム・マネージャから新たなPE IDおよびSLLIDを受信する。ブロック・デバイス・データベース533または580において、新たなPE接続のアクティブ・ビットが、はじめは1に設定され、これが意味するのは、新たなPEを介したvvolのための新たなIOセッションが確立されたということである。コンピュータ・システムはまた、第1のPE接続のアクティブ・ビットを0に設定し、これが意味するのは、このPE接続を通じてそのvvolにそれ以上IOが発行されることは不可能であるということである。認識されたいこととして、このPE接続は、非アクティブ化された際にすぐにアンバインドされるべきではない。なぜなら、処理中である、すなわち、発行されたが完了されていない可能性がある、このPE接続を通じたそのvvolへのIOが存在する可能性があるためである。したがって、工程1314において、コンピュータ・システムは、ブロック・デバイス・データベース533または580にアクセスして、第1のPE接続を通じてそのvvolに発行されたすべての「処理中コマンド」(CIF)が完了されているか、すなわち、CIF=0であるかを確かめる。コンピュータ・システムは、工程1318を実行する前に、CIFがゼロになるのを待つ。その間に、そのvvolへのさらなるIOが、新たなPEを通じて発行される。なぜなら、新たなPE接続のアクティブ・ビットが既に1に設定されているためである。CIFがゼロに達しない場合には、工程1318が実行され、工程1318では、第1のPE接続をアンバインドしたいという要求が、ストレージ・システム・マネージャに発行される。次いで工程1320において、ストレージ・システム・マネージャは、そのvvolを第1のPEからアンバインドする。また、コンピュータ・システムは、工程1324において、新たなPEを通じてそのvvolにさらなるIOをすべて発行する。
図14は、一実施形態による、仮想ボリュームのライフ・サイクルの概念図である。図14において示されているすべてのコマンド、すなわち、作成、スナップショット、クローン、バインド、アンバインド、拡張、および削除は、vvol管理コマンド・セットを形成しており、図6に関連して上述したプラグイン612、622を通じてアクセス可能である。示されているように、「vvolを作成する」、「vvolをスナップショットする」、または「vvolをクローンする」というコマンドのうちのいずれかの結果としてvvolが生成された場合には、その生成されたvvolは、「パッシブな」状態にとどまり、パッシブな状態では、そのvvolは、特定のPEにバインドされておらず、したがってIOを受信することはできない。加えて、vvolがパッシブな状態にあるときに、「vvolをスナップショットする」、「vvolをクローンする」、または「vvolを拡張する」というコマンドのうちのいずれかが実行された場合には、オリジナルのvvolおよび(もしあれば)新たに作成されたvvolは、パッシブな状態にとどまる。やはり示されているように、パッシブな状態にあるvvolがPEにバインドされた場合には、そのvvolは、「アクティブな」状態に入る。逆に、アクティブなvvolがPEからアンバインドされた場合には、そのvvolがいずれのさらなるPEにもバインドされていないと仮定すると、そのvvolは、パッシブな状態に入る。vvolがアクティブな状態にあるときに、「vvolをスナップショットする」、「vvolをクローンする」、「vvolを拡張する」、または「vvolを再バインドする」というコマンドのうちのいずれかが実行された場合には、オリジナルのvvolは、アクティブな状態にとどまり、(もしあれば)新たに作成されたvvolは、パッシブな状態にとどまる。
上述したように、1つのVMは、複数の仮想ディスクを有することができ、それぞれの仮想ディスクごとに別々のvvolが作成される。VMはまた、そのVMの構成について記述するメタデータ・ファイルを有する。それらのメタデータ・ファイルとしては、VM構成ファイル、VMログ・ファイル、ディスク記述子ファイル、すなわち、VMのための仮想ディスクのそれぞれに関するファイル、VMスワップ・ファイルなどが含まれる。仮想ディスクに関するディスク記述子ファイルは、仮想ディスクに関連する情報、たとえば、その仮想ディスクのvvol ID、その仮想ディスクのサイズ、その仮想ディスクがシン・プロビジョニングされているかどうか、および、その仮想ディスクに関して作成された1つまたは複数のスナップショットのIDなどを含む。VMスワップ・ファイルは、ストレージ・システム上におけるVMのスワップ・スペースを提供する。一実施形態においては、これらのVM構成ファイルは、vvol内に格納され、このvvolは、本明細書においてはメタデータvvolと呼ばれる。
図15は、一実施形態による、VMをプロビジョンするための方法工程の流れ図である。この実施形態においては、管理サーバ610と、VMをホストしているコンピュータ・システム、たとえば、図5Cにおいて示されているコンピュータ・システム102(以降では、「ホスト・コンピュータ」と呼ばれる)と、図2Aのストレージ・システム・クラスタ、とりわけストレージ・システム・マネージャ131、132、または135とが使用される。示されているように、ストレージ・システム・マネージャは、工程1502において、VMをプロビジョンしたいという要求を受信する。これは、VM管理者が、管理サーバ610への適切なユーザ・インターフェースを使用して、特定のサイズおよびストレージ能力プロファイルを有するVMをプロビジョンするためのコマンドを管理サーバ610に発行するときに生成される要求であることが可能である。それに応じて、工程1504において、管理サーバ610は、図8に関連して上述した様式で、VMのメタデータを含めるためのvvol(以降では、「メタデータvvol」と呼ばれる)を作成するための方法を開始し、それに従ってストレージ・システム・マネージャは、工程1508において、メタデータvvolを作成し、そのメタデータvvolのvvol IDを管理サーバ610に返す。工程1514において、管理サーバ610は、VMをホストしているコンピュータ・システムへ戻るメタデータvvolのvvol IDを登録する。工程1516において、ホスト・コンピュータは、図10に関連して上述した様式で、メタデータvvolをPEにバインドするための方法を開始し、それに従ってストレージ・システム・マネージャは、工程1518において、メタデータvvolをPEにバインドし、PE IDおよびSLLIDをホスト・コンピュータに返す。
工程1522において、ホスト・コンピュータは、ホスト・コンピュータのオペレーティング・システムへの「CREATE DEVICE」コールを使用して、メタデータvvolのブロック・デバイス・インスタンスを作成する。次いで工程1524において、ホスト・コンピュータは、ブロック・デバイスの上にファイル・システム(たとえば、VMFS)を作成し、それに応答して、ファイル・システムID(FSID)が返される。ホスト・コンピュータは、工程1526において、返されたFSIDを有するファイル・システムをマウントし、VMのメタデータを、そのファイル・システムに関連付けられているネームスペース内に格納する。メタデータの例としては、VMログ・ファイル、ディスク記述子ファイル、すなわち、VMのための仮想ディスクのそれぞれに関するファイル、およびVMスワップ・ファイルが含まれる。
工程1528において、ホスト・コンピュータは、図8に関連して上述した様式で、VMの仮想ディスクのそれぞれに関するvvol(そのようなそれぞれのvvolは、本明細書においては「データvvol」と呼ばれる)を作成するための方法を開始し、それに従ってストレージ・システム・マネージャは、工程1530において、データvvolを作成し、そのデータvvolのvvol IDをホスト・コンピュータに返す。工程1532において、ホスト・コンピュータは、データvvolのIDを、仮想ディスクに関するディスク記述子ファイル内に格納する。この方法は、VMの仮想ディスクのうちのすべてに関してデータvvolが作成された後にメタデータvvolがアンバインドされること(図示せず)に伴って、終了する。
図16Aは、図15に関連して説明した様式でVMがプロビジョンされた後にVMをパワー・オンするための方法工程の流れ図である。図16Bは、VMがパワー・オンされた後にVMをパワー・オフするための方法工程の流れ図である。これらの2つの方法は、VMのためのホスト・コンピュータによって実行される。
工程1608においてVMパワー・オン・コマンドを受信すると、そのVMに対応するメタデータvvolのIDが、工程1610において取り出される。次いで工程1612において、メタデータvvolは、図10に関連して上述したようなバインド工程を経る。工程1614において、ファイル・システムがメタデータvvol上にマウントされ、それによって、工程1616において、データvvolに関するメタデータ・ファイル、とりわけディスク記述子ファイルを読み取ることができ、データvvol IDを得ることができる。次いで工程1618において、データvvolは、図10に関連して上述したように、1つずつバインド工程を経る。
工程1620においてVMパワー・オフ・コマンドを受信すると、そのVMのデータvvolが、ブロック・デバイス・データベース(たとえば、図5Cのブロック・デバイス・データベース580)において非アクティブとしてマークされ、ホスト・コンピュータは、それらのデータvvolのそれぞれに関連付けられているCIFがゼロに達するのを待つ(工程1622)。それぞれのデータvvolに関連付けられているCIFがゼロに達した際に、ホスト・コンピュータは、工程1624において、そのデータvvolをアンバインドするようストレージ・システムに要求する。すべてのデータvvolに関連付けられているCIFがゼロに達した後に、工程1626において、メタデータvvolが、ブロック・デバイス・データベースにおいて非アクティブとしてマークされる。次いで工程1628において、メタデータvvolに関連付けられているCIFがゼロに達したときに、ホスト・コンピュータは、工程1630において、メタデータvvolがアンバインドされるよう要求する。
図17および図18は、VMを再プロビジョンするための方法工程の流れ図である。ここで示されている例においては、図17は、VMのvvol、とりわけVMの仮想ディスクに関するデータvvolのサイズを拡張するための、ホスト・コンピュータ上で実行される方法工程の流れ図であり、図18は、ストレージ・コンテナ同士の間においてVMのvvolを移動させるための、ストレージ・システムにおいて実行される方法工程の流れ図である。
VMの仮想ディスクに関するデータvvolのサイズを拡張するための方法が、工程1708において開始し、工程1708では、ホスト・コンピュータが、VMがパワー・オンされているかどうかを判定する。ホスト・コンピュータは、工程1708において、VMがパワー・オンされていないと判定した場合には、工程1710において、そのVMに対応するメタデータvvolのIDを取り出す。次いで工程1712において、メタデータvvolに関するバインド工程が、ホスト・コンピュータによって開始される。バインドの後に、工程1714において、ホスト・コンピュータが、ファイル・システムをメタデータvvol上にマウントし、仮想ディスクに対応するデータvvolのIDを、仮想ディスクに関するディスク記述子ファイル(これは、メタデータvvol上にマウントされたファイル・システム内のファイルである)から取り出す。次いで工程1716において、ホスト・コンピュータは、拡張vvol APIコールを工程1716においてストレージ・システムへ送信し、その拡張vvol APIコールは、データvvolのIDと、データvvolの新たなサイズとを含む。
VMがパワー・オンされている場合には、ホスト・コンピュータは、工程1715において、拡張されることになるVMの仮想ディスクのデータvvolのIDを取り出す。図16Aの方法から認識されたいこととして、このIDは、VMの仮想ディスクに関連付けられているディスク記述子ファイルから入手されることが可能である。次いで工程1716において、ホスト・コンピュータは、拡張vvol APIコールを工程1716においてストレージ・システムへ送信し、その拡張vvol APIコールは、データvvolのIDと、データvvolの新たなサイズとを含む。
拡張vvol APIコールの結果、vvolデータベースおよびコンテナ・データベース(たとえば、図3のvvolデータベース314およびコンテナ・データベース316)は、vvolの増大されたアドレス空間を反映するようにストレージ・システムにおいて更新される。拡張vvol APIコールが完了したという肯定応答を受信すると、ホスト・コンピュータは、工程1718において、VMの仮想ディスクに関するディスク記述子ファイルを新たなサイズで更新する。次いで工程1720において、ホスト・コンピュータは、VMがパワー・オンされているかどうかを判定する。VMがパワー・オンされていない場合には、ホスト・コンピュータは、工程1722において、ファイル・システムをアンマウントし、メタデータvvolをアンバインドしたいという要求をストレージ・システムへ送信する。その一方で、VMがパワー・オンされている場合には、この方法は終了する。
現在PEにバインドされているVMのvvolをソース・ストレージ・コンテナから宛先ストレージ・コンテナへ移動させるための方法(この場合、ソース・ストレージ・コンテナおよび宛先ストレージ・コンテナの両方が、同じストレージ・システム・マネージャの範囲内にある)が、工程1810において開始し、工程1810では、ソース・ストレージ・コンテナおよび宛先ストレージ・コンテナ(それぞれ、SC1およびSC2)のコンテナIDと、移動されることになるvvolのvvol IDとが受信される。次いで工程1812において、vvolデータベース(たとえば、図3のvvolデータベース314)、およびコンテナ・データベース(たとえば、図3のコンテナ・データベース316)のエクステント・アロケーション・ビットマップが、下記のように更新される。はじめに、ストレージ・システム・マネージャが、SC1内のvvolエクステントをコンテナ・データベース316内のSC1のエントリーから除去し、次いで、コンテナ・データベース316内のSC2のエントリーを修正することによって、これらのエクステントをSC2に割り振る。一実施形態においては、ストレージ・システムは、SC1における(vvolストレージ・エクステントの除去に起因する)ストレージ・キャパシティーの喪失を、新たなスピンドル・エクステントをSC1に割り振ることによって補うこと、およびSC2における(vvolストレージ・エクステントの追加に起因する)ストレージ・キャパシティーの増大を、いくつかの使用されていないスピンドル・エクステントをSC2から除去することによって調整することが可能である。工程1814において、ストレージ・システム・マネージャは、現在バインドされているPEがvvolの新たなロケーションにIOを最適にサービス提供することができるかどうかを判定する。現在のPEがvvolの新たなロケーションにIOをサービス提供することができない場合の1例は、ストレージ管理者が、ストレージ・システム・マネージャを、別々のPEを別々の顧客ひいては別々のストレージ・コンテナからのvvolに割り振るように静的に構成している場合である。現在のPEがvvolにIOをサービス提供することができない場合には、vvolは、工程1815において、図13に関連して上述した再バインド工程(および接続データベース、たとえば、図3の接続データベース312に対する関連する変更)を経る。工程1815の後には、工程1816が実行され、工程1816では、移動が首尾よく完了した旨の肯定応答が、ホスト・コンピュータに返される。工程1814において、現在のPEがvvolの新たなロケーションにIOをサービス提供することができるとストレージ・システム・マネージャが判定した場合には、工程1815は迂回され、次いで工程1816が実行される。
互換性がないストレージ・コンテナ同士の間において、たとえば、別々の製造業者のストレージ・デバイス内に作成されたストレージ・コンテナ同士の間においてvvolが移動される場合には、コンテナ・データベース316、vvolデータベース314、および接続データベース312に対する変更に加えて、ストレージ・コンテナ同士の間においてデータの移動が実行される。一実施形態においては、2008年5月29日に出願された「Offloading Storage Operations to Storage Hardware」と題されている米国特許出願第12/129,323号(その全内容を本願明細書に援用する)に記載されているデータ移動技術が採用される。
図19は、テンプレートVMからVMをクローンするための、ホスト・コンピュータおよびストレージ・システムにおいて実行される方法工程の流れ図である。この方法は、工程1908において開始し、工程1908では、ホスト・コンピュータが、新たなVMに関するメタデータvvolを作成したいという要求をストレージ・システムへ送信する。1910において、ストレージ・システムは、図8に関連して上述した方法に従って新たなVMに関するメタデータvvolを作成し、新たなメタデータvvol IDをホスト・コンピュータに返す。次いで工程1914において、クローンvvol APIコールが、テンプレートVMに属するすべてのデータvvol IDに関して、ホスト・コンピュータから帯域外パス601を介してストレージ・システムに発行される。工程1918において、ストレージ・システム・マネージャが、テンプレートVMのデータvvolと、新たなVMのデータvvolとに互換性があるか否かをチェックする。別々の製造業者のストレージ・システム内に作成されたストレージ・コンテナ同士の間においてクローニングが行われる場合には、データvvol同士に互換性がない可能性があるということを認識されたい。互換性がある場合には、工程1919が実行される。工程1919において、ストレージ・システム・マネージャは、新たなデータvvol IDを生成すること、コンテナ・データベース316内のアロケーション・ビットマップを更新すること、および新たなvvolエントリーをvvolデータベース314に加えることによって、新たなデータvvolを作成し、テンプレートVMのデータvvol内に格納されているコンテンツを新たなVMのデータvvolにコピーする。工程1920において、ストレージ・システム・マネージャは、新たなデータvvol IDをホスト・コンピュータに返す。新たなデータvvol IDを受信することは、データvvolのクローニングがエラーなく完了した旨の確認をホスト・コンピュータに提供する。次いで工程1925において、ホスト・コンピュータは、メタデータ・ファイル、とりわけディスク記述子ファイルを、新たに生成されたデータvvol IDで更新するために、新たなVMのメタデータvvolにIOを発行する。ホスト・コンピュータによってストレージ・システムに発行されたIOは、工程1926においてストレージ・システムによって実行され、その結果として、新たなVMのディスク記述子ファイルが、新たに生成されたデータvvol IDで更新される。
工程1918において、テンプレートVMのデータvvolと、新たなVMのデータvvolとに互換性がないとストレージ・システム・マネージャが判定した場合には、エラー・メッセージが、ホスト・コンピュータに返される。このエラー・メッセージを受信すると、ホスト・コンピュータは、工程1921において、新たなデータvvolを作成するために、作成vvol APIコールをストレージ・システムに発行する。工程1922において、ストレージ・システム・マネージャは、新たなデータvvol IDを生成すること、コンテナ・データベース316内のアロケーション・ビットマップを更新すること、および新たなvvolエントリーをvvolデータベース314に加えることによって、新たなデータvvolを作成し、新たなデータvvol IDをホスト・コンピュータに返す。工程1923において、ホスト・コンピュータは、2009年1月21日に出願された「Data Mover for Computer System」と題されている米国特許出願第12/356,694号(その全内容を本願明細書に援用する)に記載されている技術に従って、データの移動を実行する(工程1923)。工程1923の後には、工程1925および1926が、上述のように実行される。
図20は、別の実施形態による、VMをプロビジョンするための方法工程の流れ図である。この実施形態においては、管理サーバ610と、VMをホストしているコンピュータ・システム、たとえば、図5Dにおいて示されているコンピュータ・システム102(以降では、「ホスト・コンピュータ」と呼ばれる)と、図2Bのストレージ・システム・クラスタ、とりわけストレージ・システム・マネージャ131、またはストレージ・システム・マネージャ132、またはストレージ・システム・マネージャ135とが使用される。示されているように、VMをプロビジョンしたいという要求が、工程2002において受信される。これは、VM管理者が、管理サーバ610への適切なユーザ・インターフェースを使用して、特定のサイズおよびストレージ能力プロファイルを有するVMをプロビジョンするためのコマンドを管理サーバ610に発行するときに生成される要求であることが可能である。それに応じて、工程2004において、管理サーバ610は、図8に関連して上述した様式で、VMのメタデータを含めるためのvvol、とりわけメタデータvvolを作成するための方法を開始し、それに従ってストレージ・システム・マネージャは、工程2008において、メタデータvvol(これは、NASデバイス内のファイルである)を作成し、メタデータvvol IDを管理サーバ610に返す。工程2020において、管理サーバ610は、ホスト・コンピュータへ戻るメタデータvvolのvvol IDを登録する。工程2022において、ホスト・コンピュータは、メタデータvvol IDに関するバインド要求をストレージ・システムに発行し、それに応答して、ストレージ・システムは、工程2023において、IPアドレスおよびディレクトリ・パスをそれぞれPE IDおよびSLLIDとして返す。工程2024において、ホスト・コンピュータは、指定されたIPアドレスおよびディレクトリ・パスにおいてディレクトリをマウントし、そのマウントされたディレクトリ内にメタデータ・ファイルを格納する。NFSを使用する実施形態においては、NFSクライアント545または585が、そのようなディレクトリにNFS要求を発行するために、所与のIPアドレスおよびディレクトリ・パスをNFSハンドルへと変換することができる。
工程2026において、ホスト・コンピュータは、図8に関連して上述した様式で、VMの仮想ディスクのそれぞれに関するデータvvolを作成するための方法を開始し、それに従ってストレージ・システム・マネージャは、工程2030において、データvvolを作成し、そのデータvvolのvvol IDをホスト・コンピュータに返す。工程2032において、ホスト・コンピュータは、データvvolのIDを、仮想ディスクに関するディスク記述子ファイル内に格納する。この方法は、VMの仮想ディスクのうちのすべてに関してデータvvolが作成された後にメタデータvvolがアンバインドされること(図示せず)に伴って、終了する。
図8に関連して上述したように、新たなvvolがストレージ・コンテナから作成され、その新たなvvolに関してストレージ能力プロファイルが明示的に指定されない場合には、その新たなvvolは、ストレージ・コンテナに関連付けられているストレージ能力プロファイルを引き継ぐことになる。ストレージ・コンテナに関連付けられているストレージ能力プロファイルは、いくつかの別々のプロファイルのうちの1つから選択されることが可能である。たとえば、図21において示されているように、それらの別々のプロファイルとしては、プロダクション(prod)プロファイル2101、デベロップメント(dev)プロファイル2102、およびテスト・プロファイル2103(ここでは「プロファイル2100」と総称される)が含まれる。その他の多くのプロファイルが定義されることも可能であるということを認識されたい。示されているように、特定のプロファイルのそれぞれのプロファイル・エントリーは、固定タイプまたは可変タイプのものであり、1つの名前と、それに関連付けられている1つまたは複数の値とを有している。固定タイプのプロファイル・エントリーは、固定された数の選択可能なアイテムを有している。たとえば、プロファイル・エントリー「複製」は、真または偽であるように設定されることが可能である。対照的に、可変タイプのプロファイル・エントリーは、事前に定義された選択肢を有していない。その代わりに、可変タイプのプロファイル・エントリーに関しては、デフォルトの値およびある範囲の値が設定され、ユーザは、その範囲内にある任意の値を選択することができる。値がまったく指定されない場合には、デフォルトの値が使用される。図21に示されている例示的なプロファイル2100においては、可変タイプのプロファイル・エントリーは、コンマによって区切られている3つの数字を有している。第1の数字は、指定された範囲の下限であり、第2の数字は、指定された範囲の上限である。第3の数字は、デフォルトの値である。したがって、プロダクション・プロファイル2101において定義されているストレージ能力プロファイルを引き継ぐvvolは、複製されることになり(複製。値=真)、複製に関する目標復旧時間(RTO:recovery time objective)は、0.1時間から24時間の範囲内で定義されることが可能であり、デフォルトは1時間である。加えて、このvvolに関しては、スナップショットが可能である(スナップショット。値=真)。保持されるスナップショットの数は、1から100の範囲内であり、デフォルトは1であり、スナップショットの頻度は、1時間に1回から24時間に1回の範囲内であり、デフォルトは1時間に1回である。「スナップ引き継ぎ」の列は、派生vvolである新たなvvolを作成するために所与のvvolがスナップショットされる場合に所与のプロファイル属性(およびその値)が派生vvolに伝搬されるべきかどうかを示す。プロダクション・プロファイル2101の例においては、最初の2つのプロファイル・エントリー(複製およびRTO)のみが、プロダクション・プロファイル2101を有する所与のvvolのスナップショットvvolに伝搬されることが可能である。スナップショットvvolのその他のすべての属性の値は、そのプロファイルにおいて指定されているデフォルトの値に設定されることになる。言い換えれば、所与のvvolに関するこれらのその他の属性のあらゆるカスタマイゼーション(たとえば、スナップショット頻度のデフォルトではない値)は、それらの対応する「スナップ引き継ぎ」の列が偽であるため、スナップショットvvolに伝搬されない。このプロファイルは、どの属性値が所与のvvolのそれぞれクローンおよびレプリカに伝搬されるかをコントロールする「クローン引き継ぎ」(図示せず)および「レプリカ引き継ぎ」(図示せず)などのその他の列も含む。
図4の方法に従ってストレージ・コンテナが作成される場合には、そのストレージ・コンテナから作成されるvvolに関して定義することができるストレージ能力プロファイルのタイプが設定されることが可能である。図21における流れ図は、図4において示されているストレージ・コンテナを作成するための方法を、工程412と工程413との間に工程2110が挿入された状態で示している。工程2110において、ストレージ管理者は、作成されているストレージ・コンテナに関するプロファイル2100のうちの1つまたは複数を選択する。たとえば、1人の顧客のために作成された1つのストレージ・コンテナが、プロダクション・プロファイル2101およびデベロップメント・プロファイル2102に関連付けられることが可能であり、それによって、プロダクション・タイプのものであるvvolは、場合によってデフォルトの値または顧客によって指定された値を伴うプロダクション・プロファイル2101において定義されているストレージ能力プロファイルを引き継ぐことになり、デベロップメント・タイプのものであるvvolは、場合によってデフォルトの値または顧客によって指定された値を伴うデベロップメント・プロファイル2102において定義されているストレージ能力プロファイルを引き継ぐことになる。
図22は、vvolを作成して、そのvvolに関するストレージ能力プロファイルを定義するための、ストレージ・システム・マネージャ131、132、または135によって実行される方法工程を示す流れ図である。図22の方法工程、とりわけ工程2210、2212、2218、および2220はそれぞれ、図8において示されている工程806、810、812、および814に対応する。加えて、図22の方法工程は、工程2214、2215、および2216を含み、これらの工程は、作成されているvvolに関するストレージ能力プロファイルを定義する。
工程2214において、ストレージ・システム・マネージャは、ストレージ能力プロファイルにおいて使用されることになる値が、vvolを作成したいという要求内で指定されているかどうかを判定する。ストレージ能力プロファイルにおいて使用されることになる値が指定されていない場合には、ストレージ・システム・マネージャは、工程2215において、vvolのストレージ・コンテナに関連付けられているストレージ能力プロファイルを、デフォルトの値を伴うvvolのストレージ能力プロファイルとして採用する。ストレージ能力プロファイルにおいて使用されることになる値が指定されている場合には、ストレージ・システム・マネージャは、工程2216において、vvolのストレージ・コンテナに関連付けられているストレージ能力プロファイルを、デフォルトの値の代わりに指定されている値を伴うvvolのストレージ能力プロファイルとして採用する。
一実施形態においては、vvolのストレージ能力プロファイルは、キー/値のペアとしてvvolデータベース314内に格納される。いったんvvolのストレージ能力プロファイルが定義されて、キー/値のペアとしてvvolデータベース314内に格納されると、図21の例示的なプロファイルにおいて示されているように複製およびスナップショット関連の属性および値がこのプロファイルの一部である限り、ストレージ・システムは、ホスト・コンピュータによって発行されるさらなる命令を伴わずに、そのvvolに関する複製およびスナップショットを実行することができる。
図23は、親vvolからスナップショットを作成するための、ストレージ・システム・マネージャ131、132、または135によって実行される方法工程を示す流れ図である。一実施形態においては、所与のvvolのストレージ能力プロファイル内のスナップショット定義に従ってスナップショットをスケジュールするためのスナップショット・トラッキング・データ構造が採用される。スナップショットのためのスケジュールされた時刻に達すると、ストレージ・システム・マネージャは、工程2310において、スナップショット・トラッキング・データ構造からvvol IDを取り出す。次いで工程2312において、ストレージ・システム・マネージャは、スナップショットに関する一意のvvol IDを生成する。ストレージ・システム・マネージャは、工程2315において、親vvol(すなわち、スナップショット・トラッキング・データ構造から取り出されたvvol IDを有するvvol)のストレージ能力プロファイルを、スナップショットvvolのストレージ能力プロファイルとして採用する。これは、ストレージ・システムによって駆動される自動化されたプロファイル駆動型のスナップショット工程であるため、ユーザには、スナップショットvvolのストレージ能力プロファイルにおいて使用されることになるカスタムの値を指定するための機会はないということに留意されたい。工程2318において、ストレージ・システム・マネージャは、コンテナ・データベース316内のアロケーション・ビットマップを更新すること、およびスナップショットvvolに関する新たなvvolエントリーをvvolデータベース314に加えることによって、親vvolのストレージ・コンテナ内にスナップショットvvolを作成する。次いで工程2320において、ストレージ・システム・マネージャは、親vvolに関する次なるスナップショットを生成するための時刻をスケジュールすることによって、スナップショット・トラッキング・データ構造を更新する。ストレージ・システム・マネージャは、スナップショット・トラッキング・データ構造を保持することと、スケジュールされたスナップショットを命じるストレージ能力プロファイルを有するすべてのvvolに関して図23の方法工程を実行することとを同時に行わなければならないということを認識されたい。
上述の様式でスナップショットが作成された後に、vvolデータベース314内に格納されているキー/値のペアは、スナップショットvvolがタイプ=スナップショットのものであるということを示すように更新される。また、スナップショットに関して世代番号が保持され、その世代番号が、スナップショットがとられるたびにインクリメントされるか、または日にち+時刻に等しくなるように設定される実施形態においては、世代番号は、キー/値のペアとして格納される。スナップショットvvolの親vvol IDも、キー/値のペアとしてスナップショットvvolエントリー内に格納される。結果として、ホスト・コンピュータは、特定のvvol IDに対応するスナップショットを求めてvvolデータベース314にクエリーを行うことができる。ホスト・コンピュータは、特定のvvol IDおよび特定の世代番号に対応するスナップショットを求めてvvolデータベースにクエリーを発行することも可能である。
本明細書に記載されているさまざまな実施形態は、コンピュータ・システム内に格納されているデータを含むさまざまなコンピュータ実施オペレーションを採用することができる。たとえば、これらのオペレーションは、通常、必須ではないが、物理量の物理的な操作を必要とする場合があり、これらの量は、電気信号または磁気信号の形態を取ることができ、そうした形態では、それらの量、またはそれらの量の表示は、格納されること、転送されること、結合されること、比較されること、またはその他の形で操作されることが可能である。さらに、そのような操作はしばしば、作り出すこと、識別すること、判定すること、または比較することなどの用語で呼ばれる。1つまたは複数の実施形態の一部を形成する、本明細書に記載されているあらゆるオペレーションは、有用なマシン・オペレーションであることが可能である。加えて、1つまたは複数の実施形態はまた、これらのオペレーションを実行するためのデバイスまたは装置に関する。その装置は、特定の必要とされる目的のために特別に構築されることが可能であり、または、コンピュータ内に格納されているコンピュータ・プログラムによって選択的にアクティブ化または構成される汎用コンピュータであることが可能である。とりわけ、さまざまな汎用マシンが、本明細書における教示に従って書かれたコンピュータ・プログラムとともに使用されることが可能であり、または、必要とされるオペレーションを実行するためのさらに専門化された装置を構築することが、より好都合である可能性がある。
本明細書に記載されているさまざまな実施形態は、ハンドヘルド・デバイス、マイクロプロセッサ・システム、マイクロプロセッサベースのまたはプログラム可能な家庭用電化製品、ミニコンピュータ、メインフレーム・コンピュータなどを含むその他のコンピュータ・システム構成とともに実施されることが可能である。
1つまたは複数の実施形態は、1つもしくは複数のコンピュータ・プログラムとして、または1つもしくは複数のコンピュータ可読メディアにおいて具体化される1つもしくは複数のコンピュータ・プログラム・モジュールとして実装されることが可能である。コンピュータ可読メディアという用語は、その後にコンピュータ・システムに入力されることが可能であるデータを格納することができる任意のデータ・ストレージ・デバイスを指し、コンピュータ可読メディアは、コンピュータ・プログラムがコンピュータによって読み取られることを可能にする様式でそれらのコンピュータ・プログラムを具体化するための任意の既存のまたはその後に開発されるテクノロジーに基づくことができる。コンピュータ可読メディアの例としては、ハード・ドライブ、ネットワーク・アタッチト・ストレージ(NAS)、読み取り専用メモリ、ランダムアクセス・メモリ(たとえば、フラッシュ・メモリ・デバイス)、CD(Compact Disc)、CD−ROM、CD−R、またはCD−RW、DVD(Digital Versatile Disc)、磁気テープ、ならびにその他の光学式および非光学式のデータ・ストレージ・デバイスが含まれる。コンピュータ可読メディアは、ネットワークに結合されたコンピュータ・システムを介して分散されることも可能であり、それによってコンピュータ可読コードは、分散された様式で格納および実行される。
1つまたは複数の実施形態について、理解を明確にするためにいくらか詳細に説明したが、特許請求の範囲の範疇内で特定の変更および修正が行われることが可能であるということは明らかであろう。たとえば、SCSIが、SANデバイスのためのプロトコルとして採用され、NFSが、NASデバイスのためのプロトコルとして使用される。ファイバ・チャネルなど、SCSIプロトコルに対する任意の代替手段が使用されることが可能であり、CIFS(Common Internet File System)プロトコルなど、NFSプロトコルに対する任意の代替手段が使用されることが可能である。したがって、記載されている実施形態は、限定的なものではなく例示的なものとみなされるべきであり、特許請求の範囲の範疇は、本明細書において与えられている詳細に限定されるものではなく、特許請求の範囲の範疇および均等物の中で修正されることが可能である。特許請求の範囲において、要素および/または工程は、特許請求の範囲において明示的に記載されていない限り、オペレーションのいかなる特定の順序も意味するものではない。
加えて、記載されている仮想化方法は一般に、仮想マシンが、特定のハードウェア・システムと整合するインターフェースを提示すると想定しているが、記載されているそれらの方法は、いかなる特定のハードウェア・システムにも直接対応しない仮想化に関連して使用されることが可能である。ホストされる実施形態、ホストされない実施形態として、またはそれらの両者の間における区別をあいまいにする傾向がある実施形態として実施される、さまざまな実施形態による仮想化システムが、すべて想定されている。さらに、さまざまな仮想化オペレーションは、全体的にまたは部分的にハードウェアで実施されることが可能である。たとえば、ハードウェアの実施態様は、非ディスク・データをセキュアにするためのストレージ・アクセス要求の修正のためのルックアップ・テーブルを採用することができる。
仮想化の度合いにかかわらず、多くの変形、修正、追加、および改良が可能である。したがって仮想化ソフトウェアは、仮想化機能を実行するホスト、コンソール、またはゲスト・オペレーティング・システムのコンポーネントを含むことができる。単一のインスタンスとして本明細書に記載されているコンポーネント、オペレーション、または構造のために、複数のインスタンスが提供されることが可能である。最後に、さまざまなコンポーネント、オペレーション、およびデータストア同士の間における境界は、いくらか任意のものであり、特定のオペレーションは、特定の例示的な構成のコンテキストにおいて示されている。機能のその他の割り当ても想定されており、本明細書に記載されている実施形態の範囲内に収まることができる。一般に、例示的な構成において別々のコンポーネントとして提示されている構造および機能は、結合された構造またはコンポーネントとして実装されることが可能である。同様に、単一のコンポーネントとして提示されている構造および機能は、別々のコンポーネントとして実装されることが可能である。これらおよびその他の変形、修正、追加、および改良は、添付の(1つまたは複数の)特許請求の範囲の範疇内に収まることができる。