(57)【要約】  ユーザは、データセンタ内のネットワークアクセス可能な記憶装置上に記憶されたデータボリュームの動作パラメータを設定または変更することができる。たとえば、ユーザにデータボリュームに対するアクセスを提供してもよいし、ユーザはデータボリュームの動作パラメータに対する変更をリクエストしてもよい。既存のデータボリュームを変更する代わりに、データセンタは新しいデータボリュームを提供して、既存のデータボリューム上に記憶されたデータを新しいデータボリュームに移行させることができる。データ移行が起こる間、既存のデータボリュームは入出力（Ｉ／Ｏ）リクエストをブロックしてもよく、その代わりに新しいデータボリュームがこのようなリクエストを取り扱ってもよい。データ移行が終了したら、データセンタは既存のデータボリュームのデータブロックの割り当てを解除して、他のデータボリュームがデータブロックを再使用できるようにしてもよい。まだ新しいデータボリュームに移送されていないデータに対するリクエストを受信した場合、新しいデータボリュームは、リクエストされたデータの移行を優先させる。
2019525311.tif 000002
【特許請求の範囲】
【請求項１】
システムであって、
第１のデータボリュームの少なくとも一部をホストする複数のサーバと、
プロセッサとメモリとを含む管理システムと、
を含み、
前記メモリは、命令を含み、前記命令は、前記プロセッサによって実行されると、前記管理システムに、
前記第１のデータボリュームを変更するリクエストを受信することと、
少なくとも部分的に前記リクエスト内の情報に基づいて、前記複数のサーバに、第２のデータボリュームを提供するように前記複数のサーバの少なくとも一部を割り当てさせることと、
入出力（Ｉ／Ｏ）キューが空であるという表示に応じて、第１のデータボリュームマニフェストを前記第２のデータボリュームに転送させるように、前記第１のデータボリュームに命令を出すことと、
前記第２のデータボリュームの提供に応じて、前記第１のデータボリュームからのすべてのデータが前記第２のデータボリュームに転送される前に、前記第１のデータボリュームの代わりに前記第２のデータボリュームにＩ／Ｏリクエストを実行させることと、
前記第２のデータボリュームに、前記第１のデータボリュームに記憶されたデータを取り出させて記憶させることと、
を行わせるシステム。
【請求項２】
前記命令は、前記プロセッサによって実行されるとさらに、前記管理システムに、
前記第１のデータボリュームに記憶された前記データの取り出しのステータスが終了したと判定することと、
前記取り出しの前記ステータスが終了したという前記判定に応じて、前記複数のサーバに、前記第１のデータボリュームを提供するように割り当てられた前記複数のサーバの少なくとも一部の割り当てを解除させることと、
を行わせる、
請求項１に記載のシステム。
【請求項３】
前記命令は、前記プロセッサによって実行されるとさらに、前記管理システムに、前記複数のサーバに前記第１のデータボリュームのボリュームジオメトリを削除させることによって、前記複数のサーバに、前記第１のデータボリュームを提供するように割り当てられた前記複数のサーバの少なくとも一部の割り当てを解除させる、
請求項２に記載のシステム。
【請求項４】
前記命令は、前記プロセッサによって実行されるとさらに、前記管理システムに、前記第２のデータボリュームに、前記第１のデータボリュームのボリュームマニフェストを用いて、前記第１のデータボリュームに記憶された前記データを取り出させて記憶させる、
請求項１に記載のシステム。
【請求項５】
ボリュームマニフェストは、前記第１のデータボリュームに記憶された前記データに対応するオフセットの組を含む、
請求項１に記載のシステム。
【請求項６】
前記複数のサーバは、さらに、
前記第１のデータボリュームに記憶された複数のデータチャンクにおける第１のデータチャンクに対するリクエストをホストシステムから受信することと、
前記第１のデータチャンクが前記第２のデータボリュームに記憶されていないと判定することと、
前記第１のデータチャンクが前記第２のデータボリュームに記憶されていないという前記判定に応じて、前記複数のデータチャンクにおいて前記第１のデータチャンクの転送を第２のデータチャンクよりも優先させることと、
前記第１のデータチャンクが前記第１のデータボリュームから取り出されたら、前記第２のデータボリュームに前記第１のデータチャンクを前記ホストシステムに送信させることと、
を行うように構成されている、
請求項１に記載のシステム。
【請求項７】
前記命令は、前記プロセッサによって実行されるとさらに、前記管理システムに、前記第１のデータボリュームに、前記Ｉ／Ｏキュー内に残存する１つ以上のＩ／Ｏリクエストを実行させる、
請求項１に記載のシステム。
【請求項８】
前記リクエストは、第１の動作パラメータを含み、前記第２のデータボリュームの特性は、前記第１の動作パラメータと前記第１のデータボリュームの特性とに基づく、
請求項１に記載のシステム。
【請求項９】
前記第１のデータボリュームの前記特性は、第１のサイズの記憶容量を含み、前記第１の動作パラメータは、前記第１のデータボリュームの前記記憶容量を前記第１のサイズよりも大きい第２のサイズに変更する指示を含む、
請求項８に記載のシステム。
【請求項１０】
前記第１のデータボリュームマニフェストは、前記第１のデータボリュームに記憶されたデータチャンクに対応するオフセットの組を含む、
請求項１に記載のシステム。
【請求項１１】
方法であって、
第１のデータボリュームを変更するリクエストを受信することと、
前記リクエストに応じて、サーバに、第２のデータボリュームを提供するように前記サーバの少なくとも一部を割り当てさせることと、
前記第１のデータボリュームからのデータがすべて前記第２のデータボリュームに記憶される前に、前記第１のデータボリュームの代わりに前記第２のデータボリュームに入出力（Ｉ／Ｏ）リクエストを実行させることと、
前記第２のデータボリュームに、前記第１のデータボリュームに記憶されたデータを取り出させて記憶させることと、
前記第１のデータボリュームに記憶された前記データの取り出しのステータスが終了したと判定することと、
前記取り出しの前記ステータスが終了したという前記判定に応じて、前記サーバに、前記第１のデータボリュームを提供するように割り当てられた前記サーバの少なくとも一部の割り当てを解除させることと、
を含む方法。
【請求項１２】
前記方法は、前記第１のデータボリュームのボリュームマニフェストを用いて、前記第２のデータボリュームに、前記第１のデータボリュームに記憶された前記データを取り出させて記憶させることをさらに含む、
請求項１１に記載の方法。
【請求項１３】
前記方法は、
前記ボリュームマニフェストから第１のデータチャンクの記憶パラメータを取り出すことと、
前記記憶パラメータと前記第１のデータボリュームのジオメトリとに基づいて、前記第１のデータボリューム内の第１のパーティションの第１の部分が前記第１のデータチャンクを記憶することを確認することと、
前記記憶パラメータと前記第２のデータボリュームのジオメトリとに基づいて、前記第２のデータボリュームの第２のパーティションの第２の部分が前記第１のデータチャンクを記憶することを確認することであって、前記第１のデータボリュームの前記ジオメトリは前記第２のデータボリュームの前記ジオメトリとは異なる、前記確認することと、
前記第１のデータチャンクを、前記第１のデータボリューム内の前記第１のパーティションの前記第１の部分から前記第２のデータボリューム内の前記第２のパーティションの前記第２の部分へ転送することと、
をさらに含む、
請求項１２に記載の方法。
【請求項１４】
前記記憶パラメータは、オフセットを含み、前記第１のデータボリュームの前記ジオメトリは、前記第１のデータボリューム内にあるパーティションの数を含み、前記第２のデータボリュームの前記ジオメトリは、前記第２のデータボリューム内にあるパーティションの数を含む、
請求項１３に記載の方法。
【請求項１５】
前記方法は、さらに、前記第１のデータボリュームに、Ｉ／Ｏキュー内に残存する１つ以上のＩ／Ｏリクエストを実行させることを含む、
請求項１１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
背景技術
概略的に述べると、組織では、多くのコンピューティングシステムを相互接続するコンピュータネットワークを動作させて、組織の動作をサポートしている。データセンタは、著しい数の相互接続されたコンピューティングシステムを収容している場合がある。たとえば顧客にコンピューティング資源を提供するための、単一の組織によって運営されるプライベートデータセンタおよびサードパーティによって運営される公共データセンタである。公共およびプライベートデータセンタは、ネットワークアクセス、電力、ハードウェア資源（たとえば、計算および記憶）、および組織またはその顧客が所有する安全な設置設備を提供する場合がある。
【０００２】
データセンタ資源の利用増加を促進するために、仮想化技術によって、単一の物理計算機が、接続されたコンピュータユーザに対する独立したコンピュータマシンのように見えてそのように動作する仮想マシンの１つ以上のインスタンスをホストすることができる。仮想化によって、単一の物理コンピューティングデバイスは、動的な方法で仮想マシンを形成し、維持し、または削除することができる。その結果、ユーザは、データセンタからコンピュータ資源をリクエストすることができ、また「必要に応じて」または「リクエストに応じて」ベースで種々の数の仮想マシン資源の提供を受けることができる。仮想マシンに加えて、データセンタは、ハードウェア計算能力、データ記憶スペース、ネットワーク帯域幅などを含む他のコンピューティング資源を提供する場合がある。
【０００３】
環境によっては、複数のユーザが資源へのアクセスを共有することができる。たとえば、第１および第２のユーザが、ネットワークサービスプロバイダが提供するネットワークベースのデータリポジトリにアクセスすることができる。このような用途では、ネットワークサービスプロバイダは、同時実行コマンドが共有資源上で実行されることを受ける可能性がある。
【０００４】
図面の全体にわたって、参照した要素間の対応関係を示すために参照番号を再使用する場合がある。図面を示しているのは、本明細書で説明する実施形態例を例示するためであり、本開示の範囲を限定することは意図していない。
【図面の簡単な説明】
【０００５】
【図１】一実施形態によるデータセンタおよびユーザ装置を含むデータボリューム変更環境のブロック図である。
【図２】図１のデータボリューム変更環境のブロック図であり、一実施形態によりデータボリュームを変更するためにデータボリューム変更環境のコンポーネントが行う動作を例示する図である。
【図３】図１のデータボリューム変更環境のブロック図であり、一実施形態によりデータボリュームを変更するためにデータボリューム変更環境のコンポーネントが行う動作を例示する図である。
【図４】図４Ａは、一実施形態による図１のデータボリューム変更環境における種々のブロックデータ記憶装置（ＢＤＳ）サーバシステムを示すブロック図であり、図４Ｂは、一実施形態による古いボリュームパーティションの種々のパーティションと新しいボリュームパーティションとの間の通信を示すブロック図であり、図４Ｃは、一実施形態により古いボリュームパーティションと新しいボリュームパーティションとに記憶されたデータチャンクの相関関係を示すブロック図である。
【図５】一実施形態によりＢＤＳサーバシステムによって例示的に実装されるデータ転送ルーチンを示すフロー図である。
【図６】一実施形態により管理システムによって例示的に実装されるボリューム変更ルーチンを示すフロー図である。
【図７】一実施形態により管理システムによって例示的に実装されるボリューム変更ルーチンを示すフロー図である。
【発明を実施するための形態】
【０００６】
前述したように、環境によっては、複数のユーザは、ネットワークサービスプロバイダが提供する共有ネットワークホスト型資源にアクセスすることができる。しかし、共有ネットワークホスト型資源のユーザの割り当てに付随する動作パラメータ（たとえば、能力、スループット、サイズ、記憶タイプ、帯域幅など）の変更をユーザが希望するときに、問題が生じる可能性がある。説明例として、特定のユーザ記憶装置のニーズが、共有ネットワークホスト型記憶装置上のユーザの割り当て記憶容量を超えている。さらなるネットワークホスト型記憶に対する必要性に対処するために、ネットワークサービスプロバイダは、ユーザに、さらなる記憶装置（たとえば、ユーザの必要性を満たす新しいボリューム）をリクエストするかまたは既存のデータボリュームから異なるデータボリュームへのデータの移行を自己管理する能力を与えることができる。
【０００７】
シナリオによっては、さらなるネットワークホスト型記憶を割り当てる結果、ユーザアプリケーションロジックがさらに複雑になる可能性がある。たとえば、ユーザアプリケーションが、ユーザの割り当て記憶容量を超える大きなデータファイルを形成する可能性がある。データファイルを記憶することができないため、ユーザは追加データボリュームを加えて、ユーザの割り当て記憶容量を増加させる。データファイルをより小さいデータセグメントにパーティション分割することができ、より小さいデータセグメントが次に、現在および追加データボリュームにわたって分配される。しかし、分配されたデータセグメントを把握するために追加のデータオーバーヘッドが必要だとすると、これによってアプリケーションロジックの複雑さが増す。他のシナリオでは、さらなるネットワークホスト型記憶を割り当てる結果、待ち時間が長くなる可能性がある。たとえば、追加データボリュームを追加することによって、ユーザデータは複数のデータボリュームにわたって記憶される。読み込みまたは書き込みリクエストを受信すると、ネットワークサービスプロバイダは、データボリュームの１つ以上にアクセスしてリクエストを処理する。しかし、複数のデータボリュームにアクセスすると、リクエスト処理時間が長くなる可能性がある。
【０００８】
概略的に述べると、本明細書で開示する種々の実施形態によって、ネットワークホスト型記憶装置上に記憶されてユーザに提供される１つ以上のデータボリュームの動作パラメータを、ユーザが設定または変更することが可能になる。たとえば、動作パラメータには、記憶容量、データ記憶装置タイプ（たとえば、ハードディスクドライブ（ＨＤＤ）、ソリッドステートデバイス（ＳＳＤ）、フラッシュメモリ、ハイブリッド記憶装置など）、予想される性能レベル（たとえば、入出力動作／秒（ＩＯＰＳ）のレート、スループット、帯域幅など）、地理的位置などを含めることができる。ユーザは、ユーザ装置を介して、１つ以上の動作パラメータを変更するリクエストを生成することができる。リクエストをユーザ装置によって、ネットワークを介してデータセンタに送信することができる。データセンタには、データリポジトリと、データリポジトリを管理するシステムとが含まれる。
【０００９】
データセンタはリクエストを処理して、リクエストされた動作パラメータ変更を特定することができる。１つのアプローチでは、データセンタは追加データボリュームを別のデータリポジトリ内に提供して、ユーザに提供された既存のデータボリュームを補足する。追加データボリュームを提供して、２つのデータボリュームの組み合わせの特性が、リクエストされた動作パラメータ変更を満たすようにする。しかし、前述したように、補足のデータボリュームを提供すると、読み込みまたは書き込みリクエストの待ち時間が長くなる可能性がある。
【００１０】
したがって、本明細書で説明するように、データセンタはその代わりに、新しいデータボリュームを当初のデータボリュームと同じデータリポジトリ上または異なるデータリポジトリ上に提供する。新しいデータボリュームの特性だけで、リクエストされた動作パラメータ変更を満たす。新しいデータボリュームが提供されたら、古いデータボリュームに対する任意の読み込みまたは書き込みリクエストがブロックされて、新しいデータボリュームにこのようなリクエストを取り扱うように命令を出す。新しいデータボリュームが読み込みまたは書き込みリクエストの取り扱いを開始すると、古いデータボリュームは古いデータボリュームに記憶されたデータを新しいデータボリュームに移行させる。古いデータボリュームから新しいデータボリュームにまだ転送されていないデータに対する読み込みリクエストを新しいデータボリュームが受信した場合、新しいデータボリュームは、古いデータボリュームからのこのようなデータの転送を優先させて、読み込みリクエストを処理できるようにする。データ移行が終了したら、古いデータボリュームに付随するデータブロックは割り当てが解除されて、他のデータボリュームによる将来の使用に備える。ユーザのデータボリュームの動作パラメータを変更するリクエストを処理するためにデータセンタの異なるコンポーネントが行う動作についてのさらなる詳細について、図１〜６に関して以下に説明する。
データボリューム変更環境例
【００１１】
図１は、一実施形態によるデータセンタ１４０およびユーザ装置１０２を含むデータボリューム変更環境のブロック図である。図１に例示したように、データセンタ１４０は、ホストシステム１０４、ブロックデータ記憶装置（ＢＤＳ）サーバシステム１０６のプール、および管理システム１０８を含む。一実施形態では、データセンタ１４０はホストシステム１０４の１つ以上を含む。
【００１２】
ホストシステム１０４は仮想マシン１３５の実行を管理するように構成されている。たとえば、各仮想マシン１３５は、ユーザ装置１０２を介してユーザが命令した１つ以上のプログラム１３６（たとえば、ドキュメントアプリケーション、アカウント管理アプリケーションなど）を実行するための独立した計算ノードとして働くことができる。ホストシステム１０４は、ホストシステム１０４のメモリ内で実行される１つ以上のノードマネージャ１３２を含んで、ノードマネージャ１３２が仮想マシン１３５を管理するようにすることができる。ノードマネージャ１３２および仮想マシン１３５を実行することを、ホストシステム１０４上で実行されるオペレーティングシステム上で、別個のプロセスとして実行することができる。
【００１３】
例示的に、ノードマネージャ１３２は、ホストシステム１０４に取り付けられているかまたはボリュームデータストア１３４内のホストシステム１０４上で実行される仮想マシン１３５（たとえば、プログラム１３６）によって用いられる現在のボリューム１１６についての情報を記憶してもよい。たとえば、情報には、ボリューム１１６の記憶容量、ボリューム１１６内で利用可能な記憶容量、ボリューム１１６のデータ記憶装置タイプ（たとえば、ＨＤＤ、ＳＳＤ、フラッシュメモリ、ハイブリッド記憶装置など）、ボリューム１１６の性能レベル（たとえば、ＩＯＰＳのレート、スループット、帯域幅など）、ボリューム１１６の地理的位置などを含めることができる。ホストシステム１０４上にボリュームデータストア１３４を有することは例示的である。ボリュームデータストア１３４は、データセンタ１４０内の種々のシステムまたはコンポーネント（たとえば、ＢＤＳサーバシステム１０６または管理システム１０８など）上に存在することができる。
【００１４】
ＢＤＳサーバシステム１０６のプールはそれぞれ、ローカルブロック記憶を提供する１つ以上の記憶装置（たとえば、ＨＤＤ、ＳＳＤ、ハイブリッド記憶装置など）を含むことができる。ＢＤＳサーバシステム１０６のプールは、プログラム１３６を実行する信頼性の高い非ローカルブロックデータ記憶装置を制御および提供するように構成されている。たとえば、ＢＤＳサーバシステム１０６は、１つ以上のボリューム１１６を記憶するときに用いるローカルブロック記憶を含むことができる。仮想マシン１３５が実行するプログラム１３６は内部ネットワーク１１５を介してボリューム１１６にアクセスしてもよい。内部ネットワーク１１５はデータセンタ１４０の内部のネットワークである。内部ネットワーク１１５は、図示しない種々のネットワーキング装置（たとえば、ルータ、スイッチ、ゲートウェイなど）を含んでいてもよい。内部ネットワーク１１５をさらに、外部ネットワーク（たとえばネットワーク１１０）に結合してもよい。またデータセンタ１４０外部の複数のリモートアーカイバル記憶システム（図示せず）を用いて、内部ネットワーク１１５またはネットワーク１１０を介して仮想マシン１３５によって実行されるプログラム１３６によってアクセス可能なさらなるボリュームを記憶してもよい。
【００１５】
一実施形態では、ユーザは、仮想マシン１３５を通して（たとえば、ユーザ装置１０２を介して）ＢＤＳサーバシステム１０６のローカルブロック記憶上に記憶されたボリューム１１６にアクセスすることが、これらのボリューム１１６が仮想マシン１３５にローカルなブロック記憶装置上に記憶されているかのように可能である。ボリューム１１６は、各ボリューム１１６が仮想マシン１３５にローカルなハードドライブまたは同様のブロックデバイスであるかのように機能するため、ボリューム１１６を、オフセット、長さ、および他のこのような従来のブロックデバイス様相を用いてアドレス指定することができる。これによって、ユーザ装置１０２は、ボリューム１１６がローカルなハードドライブまたはブロックデバイスであるかのように、仮想マシン１３５とやり取りすることができる。さらに、ＢＤＳサーバシステム１０６は「書き込み後の読み込み」整合性を提供することができる。ここでは、データをボリューム１１６に書き込んだらすぐにデータをボリューム１１６から読み込めることが保証される。したがって、ＢＤＳサーバシステム１０６は、比較的低遅延（たとえば、待ち時間が約１０ミリ秒未満）をもたらすことができる。
【００１６】
管理システム１０８は、データセンタ１４０内のコンポーネントおよびシステムを管理するように構成された１つ以上のサーバコンピュータであってもよい。たとえば、管理システム１０８は、非ローカルのブロックデータ記憶装置機能を提供することに関する種々のサービスを提供してもよい。たとえば、ユーザアカウントの管理（たとえば、形成、削除、請求書発行など）；ボリューム１１６またはこれらのボリューム１１６のスナップショットコピーの形成、使用、および削除；ボリューム１１６またはこれらのボリューム１１６のスナップショットコピーの使用に関する性能の収集もしくは処理またはデータの検査；ボリューム１１６またはこれらのボリューム１１６のスナップショットコピーの使用に対する支払いをユーザから得ることなどである。管理システム１０８はノードマネージャ１３２と連係して働いて、仮想マシン１３５が実行するプログラム１３６によるボリューム１１６の使用を管理することができる。代替的に、管理システム１０８またはノードマネージャ１３２は、仮想マシン１３５が実行するプログラム１３６によるボリューム１１６の使用を独立に管理することができる。管理システム１０８は、ボリューム１１６についての情報を含むデータベースを維持することができる。図１では管理システム１０８をデータセンタ１４０内の別個の集中型システムであると例示しているが、これは限定するように意図しているわけではない。管理システム１０８の機能は、部分的または全体的に、ホストシステム１０４またはＢＤＳサーバシステム１０６のうちの１つ以上によって行うことができる。
【００１７】
一実施形態では、管理システム１０８は、ボリューム１１６の形成、使用、および削除を制御するように構成されたボリューム変更マネージャ１１８を含む。たとえば、ユーザはユーザ装置１０２を介して、リクエスト（たとえば、アプリケーションプログラミングインターフェース（ＡＰＩ）呼び出し、ウェブサービス呼び出しなど）を生成して、ボリューム変更マネージャ１１８に送り、新しいデータボリュームを提供する（これを次に、ユーザに付随するプログラム１３６にアタッチすることができる）か、既存のデータボリュームを削除するか、または既存のデータボリュームを変更することができる。
【００１８】
管理システム１０８は制御平面（または制御環境）内に存在し、ＢＤＳサーバシステム１０６のデータボリューム１１６とブロック記憶装置とは別個のデータ平面（またはデータ環境）内に存在すると考えることができる。一例では、初期ボリューム１１６をユーザに提供してもよい。ユーザは、ユーザ装置１０２を介して、「ＭｏｄｉｆｙＶｏｌｕｍｅ」ＡＰＩ呼び出しをボリューム変更マネージャ１１８へ送ることができる。「ＭｏｄｉｆｙＶｏｌｕｍｅ」ＡＰＩ呼び出しには、変更すべきボリューム１１６（たとえば、初期ボリューム１１６）の特定、変更すべきボリューム１１６の１つ以上の動作パラメータの特定、および１つ以上の動作パラメータをどのように変更すべきかを特定する情報（たとえば、割り当てるべき新しい記憶容量、新しい性能レベルなど）を含めることができる。代替的に、動作パラメータを変更すべき量を特定する代わりに、ＡＰＩ呼び出しには１つ以上の動作パラメータに対する所望値を特定する情報を含むことができる。初期ボリューム１１６がまだ使用されている（たとえば、初期ボリューム１１６を用いるプログラム１３６が実行されている）ときに、ＡＰＩ呼び出しを送ることができる。
【００１９】
ＡＰＩ呼び出しを受信することに応じて、ボリューム変更マネージャ１１８はＢＤＳサーバシステム１０６に命令を出して、初期ボリューム１１６の動作パラメータまたはＡＰＩ呼び出しにおいて特定された動作パラメータ変更に基づいて、新しいボリューム１１６を提供させることができる。したがって、ＢＤＳサーバシステム１０６に初期ボリューム１１６を変更する命令を出さなくてもよい。たとえば、初期ボリューム１１６の記憶容量は１ＴＢであってもよく、性能レベルは１００ＩＯＰＳまたは１ＭＢ／ｓであってもよい。ＡＰＩ呼び出しにおいて特定された動作パラメータ変更は、（記憶容量が２ＴＢになり、性能レベルが２，０００ＩＯＰＳまたは１００ＭＢ／ｓになるように）記憶容量を１ＴＢだけ変更し、性能レベルを１，９００ＩＯＰＳまたは９９ＭＢ／ｓだけ変更するものであってもよい。代替的に、ボリューム変更マネージャ１１８は、ＢＤＳサーバシステム１０６に命令を出して、ＡＰＩ呼び出しにおいて特定された動作パラメータ（たとえば、ＡＰＩ呼び出しが、新しい記憶容量は２ＴＢでなければならず、新しい性能レベルは２，０００ＩＯＰＳまたは１００ＭＢ／ｓでなければならないと示す）に基づいて、新しいボリューム１１６を提供させることができる。新しいボリューム１１６を、ＢＤＳサーバシステム１０６内の単一の記憶装置上に、またはＢＤＳサーバシステム１０６内の複数の記憶装置上に提供することができる。
【００２０】
ＡＰＩ呼び出しを受信することに応じて、または新しいボリューム１１６が入出力（Ｉ／Ｏ）リクエスト（たとえば、読み込みリクエスト、書き込みリクエスト、バックアップリクエストなど）の受信を開始する準備ができているという表示をＢＤＳサーバシステム１０６から受信することに応じて、ボリューム変更マネージャ１１８は、任意の将来のＩ／Ｏリクエストが初期ボリューム１１６に転送されることを阻止することができるか、または初期ボリューム１１６に命令を出して任意の将来のＩ／Ｏリクエストをブロックさせることもできる。代替的な実施形態では、ホストシステム１０４（たとえば、ノードマネージャ１３２または仮想マシン１３５）が、新しいボリューム１１６は準備ができているという表示を受信することができて、どんな将来のＩ／Ｏリクエストもブロックするように初期ボリューム１１６に命令を出すことができるか、または新しいボリューム１１６が、どんな将来のＩ／Ｏリクエストもブロックするように初期ボリューム１１６に直接命令を出すことができる。たとえば、ＥＢＳクライアント（たとえば、仮想マシン１３５）が、ブロックデバイスドライバを介してＢＤＳサーバシステム１０６から読み込むかまたはそこに書き込む。仮想マシン１３５が、新しいボリューム１１６が初期ボリューム１１６に取って代わっていること、および新しいボリューム１１６が提供されているかまたは準備ができていることを学習したときに、この情報がブロックデバイスドライバに送られる。ブロックデバイスドライバは、初期ボリューム１１６に命令を出して、どんな将来のＩ／Ｏリクエストの取り扱いも停止させる。
【００２１】
またボリューム変更マネージャ１１８は（直接またはＥＢＳクライアントを介して）初期ボリューム１１６に命令を出して、Ｉ／Ｏキュー内に残存する任意の残りのＩ／Ｏリクエストを実行させることができる。たとえば、プログラム１３６から受信した読み込みまたは書き込みリクエストを、ボリューム１１６に付随するＩ／Ｏキュー内に記憶して、適切なボリューム１１６上でのＢＤＳサーバシステム１０６による実行に備えてもよい。ユーザ装置１０２からＡＰＩ呼び出しを受信する前に、プログラム１３６は、Ｉ／Ｏキュー内に記憶されてまだ実行されていない書き込みリクエストを送信してもよい。したがって、ボリューム変更マネージャ１１８は（直接にまたはＥＢＳクライアントを介して）ＢＤＳサーバシステム１０６に命令を出してＩ／Ｏキュー内の任意のリクエストを実行して、ＡＰＩ呼び出しを送信する前に出されたすべてのリクエストを終了させることができる。これは、初期ボリューム１１６から新しいボリューム１１６へ移行する間にデータが失われないことを確実にするのに役立ち得る。
【００２２】
一実施形態では、ボリューム１１６はそれぞれ、ボリュームマニフェストファイルに付随している。ボリュームマニフェストファイルは、データチャンクが記憶された、付随するボリューム１１６内の場所（たとえば、付随するボリューム１１６内のオフセット）を特定してもよい。ボリュームマニフェストファイルは、データが書き込まれていない、付随するボリューム１１６内の場所（たとえば、場所に論理０が含まれている）に対するエントリは含んでいなくてもよい。初期ボリューム１１６のＩ／Ｏキューが空であるという表示を受信した後で、ボリューム変更マネージャ１１８は初期ボリューム１１６に命令を出して、そのボリュームマニフェストファイルを新しいボリューム１１６に転送させることができる。したがって、ボリュームマニフェストファイルが転送される前にすべての書き込みリクエストを行ってもよく、その結果、転送されたボリュームマニフェストファイルがデータチャンク場所の完全なリストを有することが確実になる（また後で詳述するように、新しいボリューム１１６に書き込まれるデータが、初期ボリューム１１６に書き込まれたデータを上書きしないことが確実になる）。
【００２３】
新しいボリューム１１６は初期ボリューム１１６のボリュームマニフェストファイルを用いて、データチャンクが記憶される初期ボリューム１１６内のオフセットを特定し、すべてのこのようなデータチャンクを新しいボリューム１１６に転送することをリクエストすることができる。データチャンクの取り出しをキューイングして、一度に１つ以上のデータチャンクがリクエストされるようにしてもよい。新しいボリューム１１６が動作中で、読み込みまたは書き込みリクエストを受信している間に、データチャンク移行をバックグラウンドで（たとえば、バックグラウンドプロセスで）行ってもよい。ボリューム変更マネージャ１１８は、新しいボリューム１１６を周期的にポーリングしてデータチャンク移行のステータスを判定することができる。代替的な実施形態では、初期ボリューム１１６がビジーである場合に、新しいボリューム１１６は、初期ボリューム１１６のスレーブまたはミラーであるボリューム（たとえば、バックアップボリューム）からデータチャンクを引き出すことができる。場合によっては、初期ボリューム１１６内のパーティション数は新しいボリューム１１６内のパーティション数とは異なっている（たとえば、２つのボリューム１１６は記憶容量が異なるからであり、ＡＰＩ呼び出しにおいて異なるパーティション数がリクエストされるからである等）。新しいボリューム１１６は、データ転送技術を実装して、初期ボリューム１１６内のどのパーティションがデータチャンクを記憶しているか、また新しいボリューム１１６内のどのパーティションがデータチャンクを記憶すべきかを特定してもよい。これについては後で詳述する。
【００２４】
初期ボリューム１１６にそのボリュームマニフェストファイルを新しいボリューム１１６に転送するように命令を出す前か後に、しかし初期ボリューム１１６のＩ／Ｏキューが空であるという表示を受信した後に、ボリューム変更マネージャ１１８（またはホストシステム１０４、たとえばＥＢＳクライアント）は、新しいボリューム１１６に、プログラム１３６から受信したどんな将来のＩ／Ｏリクエストも受信および処理するように命令を出すことができる。代替的に、ボリューム変更マネージャ１１８はホストシステム１０４（たとえばＥＢＳクライアント）に命令を出して、将来のＩ／Ｏリクエストを新しいボリューム１１６に送らせることができる。新しいボリューム１１６は初期ボリューム１１６のボリュームマニフェストファイルを用いて、書き込みリクエストを受信した場合に書き込まれたデータチャンクがオフセットにすでに含まれいるか否かを判定するか、または新しいデータチャンクを記憶するための適切なオフセットを決定することができる。読み込みリクエストを受信したら、新しいボリューム１１６は、読み込みリクエスト内で特定されたオフセットに対応するデータチャンクが新しいボリューム１１６内に存在するか否かを判定することができる。たとえば、新しいボリューム１１６はデータチャンク移行のステータスをチェックして、受信したオフセットに対応するデータチャンクが転送されたか否かを判定することができる。データチャンクが新しいボリューム１１６に記憶されている場合には、新しいボリューム１１６は、新しいボリューム１１６からデータチャンクを取り出すことによって読み込みリクエストを処理することができる。データチャンクが新しいボリューム１１６に記憶されていない場合、新しいボリューム１１６は初期ボリューム１１６に命令を出して、受信したオフセットに対応するデータチャンクの転送を優先させることができる（たとえば、データチャンクをデータチャンク取り出しキューの最上部に置く）。したがって、初期ボリューム１１６が第１のデータチャンクを転送していて、受信したオフセットが第２のデータチャンクに対応する場合、初期ボリューム１１６は第１のデータチャンクの転送を一時停止して、その代わりに第２のデータチャンクの転送を開始することができる。第２のデータチャンクの転送を第１のデータチャンクの転送よりも速いレートで行うことができる（たとえば、第１のデータチャンクを、限定された量の資源が転送に当てられるバックグラウンド動作を介して転送してもよく、第２のデータチャンクを優先して転送して、転送プロセスの速度を上げるためにより大量の資源が転送に当てられるようにしてもよい）。第２のデータチャンクが転送されたら、初期ボリューム１１６は第１のデータチャンクの転送を再開することができる。代替的に、第１のデータチャンクが新しいボリューム１１６に転送されている間、初期ボリューム１１６は新しいボリューム１１６との別の接続を設定して、第１のデータチャンクの転送と同時に、新たに設定された接続を介して第２のデータチャンクを転送することができる。帯域幅が限定されている場合、初期ボリューム１１６または新しいボリューム１１６は、すでに存在している接続よりも新たに設定された接続に、より多くの資源を割り当てて、第２のデータチャンクの転送の速度を上げることができる。状況によっては、新しいボリューム１１６が書き込みリクエストを受信したときに、初期ボリューム１１６は第２のデータチャンクを転送してもよい。新しいボリューム１１６は、いつ転送が終了するかを決定できなくてもよいため、新しいボリューム１１６は依然として、第２のデータチャンクを、新たに設定された接続を介してかまたはバックグラウンド転送を休止することによって、優先して転送することをリクエストしてもよい。
【００２５】
前述したように、ボリューム変更マネージャ１１８は新しいボリューム１１６を周期的にポーリングして、データチャンク移行のステータスを判定することができる。具体的には、ボリューム変更マネージャ１１８は新しいボリューム１１６内の各パーティションを別個にポーリングしてステータスを判定する。新しいボリューム１１６が、データチャンク移行が終了したことを示したら（たとえば、新しいボリューム１１６内のそれぞれの個別のパーティションが、データチャンク移行のその部分が終了したことを示したら）、ボリューム変更マネージャ１１８は、初期ボリューム１１６に提供されたＢＤＳサーバシステム１０６の一部の割り当てを解除するようにＢＤＳサーバシステム１０６に命令を出すことができ、その結果、初期ボリューム１１６からのデータが削除される。たとえば、ＢＤＳサーバシステム１０６は、初期ボリューム１１６ジオメトリ（たとえば、パーティション数、パーティションの特性、パーティションの固有ＩＤ、性能特性、パーティションにわたってデータがどのように分割されているかなど）を削除することができ、また初期ボリューム１１６内のデータブロックからのデータを削除して、他のボリューム１１６が使用できるようにデータブロックを解放することができる。
【００２６】
従来のシステムの中には、初期ボリュームと同一のデータを含む提供されたスレーブまたはミラーボリュームを用いたボリューム変更手順を実装しているものがある。たとえば、従来のシステムは、新しいボリュームを提供した後に、データをスレーブまたはミラーボリュームから新しいボリュームに移行させることができる。データ移行が進行している間、初期ボリュームはアクティブボリュームとして残って、Ｉ／Ｏリクエストを取り扱う。書き込みリクエストを受信したら、書き込みリクエストを初期ボリュームおよびスレーブまたはミラーボリューム上で行って、データが失われないようにすることができる。データ移行が終了したら、新しいボリュームはアクティブボリュームになる。しかし、マスタボリュームが破損した場合にスレーブまたはミラーボリュームがマスタボリュームに代わることができるように、スレーブまたはミラーボリュームはマスタボリュームと整合状態になければならない。しかし、本明細書で説明する新しいボリューム１１６は初期ボリューム１１６と整合状態にない（たとえば、提供された後で、データチャンク移行が終了する前に、新しいボリューム１１６は、初期ボリューム１１６が受信していないＩ／Ｏリクエストを受信する）。したがって、本明細書で説明する新しいボリューム１１６は、従来のシステムで用いられるスレーブまたはミラーボリュームと同じではない。
【００２７】
ホストシステム１０４および管理システム１０８はそれぞれ、１つ以上のプロセッサ、１つ以上のプロセッサが実行する命令を記憶するメモリ、ネットワークインターフェース、特定用途向けハードウェア、または他のハードウェアコンポーネントであって、本明細書で説明する機能をシステムが実行できるようにするものを含んでいてもよい。ＢＤＳサーバシステム１０６は以下のものを含んでいてもよい。１つ以上のプロセッサ、１つ以上のプロセッサが実行する命令を記憶するメモリ、ネットワークインターフェース、データ記憶装置（たとえば、ボリューム１１６を記憶することができるＨＤＤ、ＳＳＤ、フラッシュメモリ、ハイブリッド記憶装置など）、特定用途向けハードウェア、または他のハードウェアコンポーネントであって、本明細書で説明する機能をＢＤＳサーバシステム１０６が実行できるようにするもの。
【００２８】
図１に単一のデータセンタ１４０を例示しているが、これは限定するように意図しているわけではない。データボリューム変更環境は任意の数のデータセンタを含んでいてもよく、複数のデータセンタを、ネットワーク１１０を介して結合することができる。ネットワーク１１０は、リンクされたネットワークの公にアクセス可能なネットワーク（可能性として、種々の別個のパーティによって運営される）、たとえばインターネットであってもよい。他の実施形態では、ネットワーク１１０は、プライベートネットワーク、パーソナルエリアネットワーク、ローカルエリアネットワーク、ワイドエリアネットワーク、ケーブルネットワーク、人工衛星ネットワーク、セルラー電話ネットワークなど、またはそれらの組み合わせであって、それぞれインターネットとの間でアクセスするものを含んでいてもよい。
【００２９】
当然のことながら、図１の例は説明を目的として単純化され、データセンタ１４０内のコンポーネントの数および組織は、図１に示したものよりもはるかに大きい。たとえば、１つの例示的な実施形態として、データセンタ１４０当たり約４，０００のコンピューティングシステムがあってもよく、それらのコンピューティングシステムのうちのいくつかは、それぞれが１５の仮想マシンをホストするホストシステム１０４であってもよいし、またはそれらのコンピューティングシステムのうちのいくつかは、それぞれがいくつかのボリューム１１６を記憶するＢＤＳサーバシステム１０６であってもよい。各ホスト型仮想マシンが１つのプログラム１３６のコピーを実行した場合、このようなデータセンタ１４０は、一度に６万もの数のプログラム１３６のコピーを実行してもよい。さらに、ＢＤＳサーバシステム１０６の数および記憶容量またはボリューム１１６のサイズに応じて、数百または数千（またはそれ以上）のボリューム１１６をＢＤＳサーバシステム１０６上で記憶してもよい。当然のことながら、他の実施形態では、他の数のコンピューティングシステム、仮想マシン１３５、プログラム１３６、またはボリューム１１６を用いてもよい。データセンタ１４０のさらなる詳細は米国特許第８，９８４，２４３号に記載されている。この文献は、本明細書において参照により全体として取り入れられている。
【００３０】
ユーザ装置１０２は、パーソナルコンピューティングデバイス、端末コンピューティングデバイス、ラップトップコンピューティングデバイス、タブレットコンピューティング装置、電子リーダデバイス、モバイルデバイス（たとえば、携帯電話、メディアプレーヤ、携帯ゲーム機など）、ネットワークアクセスおよびプログラム実行能力を伴う着用可能デバイス（たとえば、「スマートウォッチ」または「スマートアイウェア」）、無線デバイス、セットトップボックス、ゲーミングコンソール、エンタテインメントシステム、ネットワークアクセスおよびプログラム実行能力を伴うテレビジョン（たとえば、「スマートＴＶ」）、および他の種々の電子デバイスおよび機器を含む広範囲のコンピューティングデバイスを含むことができる。個々のユーザ装置１０２は、ブラウザアプリケーション１２０を実行して他のコンピューティングシステム（たとえば、データセンタ１４０）とネットワーク１１０を介して通信し、リクエスト（たとえば、ＡＰＩ呼び出し、たとえば「ＭｏｄｉｆｙＶｏｌｕｍｅ」）を送信してもよい。
データボリュームを変更するためのブロック図例
【００３１】
図２は、図１のデータボリューム変更環境のブロック図であり、一実施形態によりデータボリュームを変更するためにデータボリューム変更環境のコンポーネントが行う動作を例示している。図２に例示したように、ユーザ装置１０２は、ユーザ装置１０２のユーザに提供されたボリューム２０２の変更をリクエストしてもよい（１）。たとえば、リクエストは、変更すべきボリューム２０２の特定、変更すべきボリューム２０２の１つ以上の動作パラメータの特定、または１つ以上の動作パラメータをどのように変更すべきかを特定する情報（たとえば、割り当てるべき新しい記憶容量、新しい性能レベルなど）を含むことができる。代替的に、動作パラメータを変更すべき量を特定する代わりに、リクエストには１つ以上の動作パラメータに対する所望値を特定する情報を含むことができる。
【００３２】
リクエストをボリューム変更マネージャ１１８に送信することができる。ボリューム変更マネージャ１１８は、ＢＤＳサーバシステム１０６に命令を出してデータブロックを１つ以上の記憶装置において割り当てさせることによって、新しいボリューム２１２を形成することができる（２）。新しいボリューム２１２は次に、今では古いボリューム２０２に新しいボリューム２１２が形成されたことを通知することができる（３）。新しいボリューム２１２が形成されたという通知によって、古いボリューム２０２にそのＩ／Ｏキューを、そこに記憶された任意のリクエストを実行することによって、排出させてもよい（４）。Ｉ／Ｏキューが排出されたら、古いボリューム２０２は、古いボリューム２０２のボリュームマニフェストファイルを新しいボリューム２１２に転送してもよい（５）。
【００３３】
ボリューム変更マネージャ１１８はまた、ＥＢＳクライアント２３５に通知して、新しいボリューム２１２にＩ／Ｏリクエストを送信させることができる（６）。ＥＢＳクライアント２３５は、ブロックデバイスドライバを介してＢＤＳサーバシステム１０６から読み込むかまたはそれに書き込む仮想マシン１３５である。仮想マシン１３５が新しいボリューム２１２の存在について知り、新しいボリューム２１２が古いボリューム２０２に取って代わることを知ったときに、この情報がブロックデバイスドライバに送られる。ブロックデバイスドライバによって、仮想マシン１３５は、ＢＤＳサーバシステム１０６および新しいボリューム２１２に接続することができる。
【００３４】
ボリュームマニフェストファイルを用いて、新しいボリューム２１２は古いボリューム２０２からデータチャンクを得ることをリクエストすることができる（７）。たとえば、ボリュームマニフェストファイルは、データチャンクが配置されている古いボリューム２０２におけるオフセットを含むことができる。本明細書で説明するように、古いボリューム２０２は複数のパーティションを含んでいてもよい。ディスクにデータを書き込むとき、それぞれの連続的なデータチャンクを次のパーティションにインラインで書き込むことを、データチャンクが最後のパーティションに書き込まれたらすぐに第１のパーティションに巻き戻る前に行ってもよい。一例として、古いボリューム２０２が３つのパーティションを含む場合、第１のデータチャンクを第１のパーティションに書き込んでもよく、第２のデータチャンクを第２のパーティションに書き込んでもよく、第３のデータチャンクを第３のパーティションに書き込んでもよく、第４のデータチャンクを第１のパーティションに書き込んでもよい等。しかし、ボリュームマニフェストファイル内のオフセットは、パーティションとは関係なく順次的であってもよい。したがって、データチャンクが８ビット長である場合、オフセット０は、第１のパーティション（たとえば、第１のデータチャンクが記憶される）内の第１のデータチャンクスロットに対応してもよく、オフセット８は、第２のパーティション（たとえば、第２のデータチャンクが記憶される）内の第１のデータチャンクスロットに対応してもよく、オフセット１６は、第３のパーティション（たとえば、第３のデータチャンクが記憶される）内の第１のデータチャンクスロットに対応してもよく、オフセット２４は、第１のパーティション（たとえば、第４のデータチャンクが記憶される）内の第２のデータチャンクスロットに対応してもよいなど。
【００３５】
したがって、新しいボリューム２１２はボリュームマニフェストファイル内のオフセットを選択して、そのオフセット、古いボリューム２０２内のデータチャンクのサイズ（たとえば、選択したオフセットに対応するデータチャンクのサイズ）の表示、古いボリューム２０２内のパーティション数の表示を用いて、選択したオフセットに一致する、取り出すべきデータチャンクの場所を特定することができる。たとえば、新しいボリューム２１２は、選択したオフセットを古いボリューム２０２内のデータチャンクのサイズで割って、規格化オフセットを決定することができる。新しいボリューム２１２は次に、規格化オフセットを古いボリューム２０２内のパーティション数で割った余りを求めて、どのパーティションが、選択したオフセットに付随するデータチャンクを記憶するかを特定することができる。また新しいボリューム２１２は、規格化オフセットを古いボリューム２０２内のパーティション数で割って、特定したパーティション内のどのデータチャンクスロットが、選択したオフセットに付随するデータチャンクを記憶するかを特定することができる。したがって、新しいボリューム２１２は、選択したオフセットに付随するデータチャンクの場所を決定して、適切なデータをリクエストすることができる。
【００３６】
さらに、前述したように、新しいボリューム２１２のパーティション数は、古いボリューム２０２とは異なっていてもよい。したがって、リクエストされたデータチャンクを古いボリューム２０２内の第１のパーティションに記憶してもよいが、連続的なデータチャンクが連続的なパーティションに記憶されるという事実を考えると、これは必ずしも、リクエストされたデータチャンクを新しいボリューム２１２の第１のパーティションにも記憶しなくてはならないということを意味するものではない。したがって、新しいボリューム２１２は、規格化オフセットを、新しいボリューム２１２内のパーティション数で割った余りを求めて、新しいボリューム２１２内のどのパーティションが、選択したオフセットに付随するデータチャンクを記憶すべきかを特定することができる。また新しいボリューム２１２は、規格化オフセットを新しいボリューム２１２内のパーティション数で割って、パーティション内のどのデータチャンクスロットに、選択したオフセットに付随するデータチャンクを記憶すべきかを特定することができる。したがって、新しいボリューム２１２は、リクエストされたデータチャンクを記憶すべき新しいボリューム２１２内の場所を決定することができる。
【００３７】
１つ以上のデータチャンクに対するリクエストを受信したら、古いボリューム２０２はデータチャンクを新しいボリューム２１２に転送することを開始することができる（８）。新しいボリューム２１２が新しいＩ／Ｏリクエストを同時に処理できるように、転送はバックグラウンドプロセスを介して行ってもよい。転送は単一の接続または複数の接続を介して行うことができる（たとえば、データチャンクの取り出しを、データチャンク転送が進行中に新しいボリューム２１２にまだ記憶されていないデータチャンクに対する読み込みリクエストを受信することに基づいて優先させる場合）。
【００３８】
ボリューム変更マネージャ１１８はデータチャンク転送のステータスを周期的にチェックしてもよい（９）。たとえば、新しいボリューム２１２のパーティションはそれぞれ、そこに記憶すべきデータチャンクの進行を追跡してもよく、ボリューム変更マネージャ１１８は各パーティションを別個にポーリングすることができる。各パーティションが、データチャンク転送のその部分が終了したことを示したら、ボリューム変更マネージャ１１８はデータチャンク転送全体が終了したと判定してもよい。この判定に基づいて、ボリューム変更マネージャ１１８はＢＤＳサーバシステム１０６に命令を送信して、古いボリュームをクリアにすることができる（１０）。たとえば、ＢＤＳサーバシステム１０６は古いボリューム２０２に当初に提供されたデータブロックの割り当てを解除して、他のボリュームが用いることに備える（またはそこに記憶された任意のデータを削除する）ことができる。
データチャンクを優先させるための状態図例
【００３９】
図３は、図１のデータボリューム変更環境のブロック図であり、一実施形態によりデータチャンクの転送を優先させるためにデータボリューム変更環境のコンポーネントが行う動作を例示する図である。図３に例示したように、古いボリューム２０２は、新しいボリューム２１２にデータチャンクを移送する最中であってもよい。たとえば、古いボリューム２０２は現時点でデータチャンク１を転送している（１）。しかし、古いボリューム２０２はまだ、新しいボリューム２１２にデータチャンク２、データチャンク３などを転送していない。
【００４０】
プログラム３３６が読み込みリクエストを送信して、データチャンク３をリクエストしてもよい（２）。読み込みリクエストを、プログラム３３６を実行する仮想マシン３３５、ノードマネージャ１３２（図示せず）、または新しいボリューム２１２に送ってもよい。仮想マシン３３５によって受信されたら、データチャンク３に対するリクエストは新しいボリューム２１２に転送される（３）。
【００４１】
新しいボリューム２１２は、古いボリュームからデータチャンク３が受信されたか否かを判定する（４）。たとえば、読み込みリクエストは、オフセットと、オフセットにおいて開始する読み込むべきデータチャンク（たとえば、データチャンク３）のサイズ（たとえば、バイトで）を含んでいてもよい。新しいボリューム２１２はオフセットおよびデータチャンク３サイズを用いて、どのパーティションがデータチャンクを記憶すべきかを、前述したプロセスを用いて決定することができる。新しいボリューム２１２は次に、決定したパーティションをポーリングして、データチャンク３の転送のステータス（たとえば、転送が開始されたか、進行中であるか、終了したかなど）を判定することができる。パーティションが、転送が終了したことを示した場合、新しいボリューム２１２はデータチャンク３を取り出して、プログラム３３６に送信することができる。しかし、図３に例示するように、データチャンク３の転送は終了していない。そのため、新しいボリューム２１２は古いボリューム２０２に命令を出して、データチャンク３の転送を優先させる（５）。
【００４２】
前述したように、データチャンクの転送を優先させることには、既存の転送を休止して、リクエストされたデータチャンクの転送を即座に開始することを含むことができる。また優先させることには、既存のデータチャンク移行が続く間にリクエストデータチャンクを同時に転送することを含むことができる。場合によっては、優先させることは、リクエストされたデータチャンクを同時に転送することを、同じデータチャンクが既存のデータチャンク移行において転送されている間に行うことを含むことができる。データチャンクの優先転送は、バックグラウンドプロセスにおいてデータチャンクを移行させるために用いるレートよりも速いレートで転送が行われるように、さらなる資源を転送に割り当てることを含むことができる。
【００４３】
新しいボリューム２１２から命令を受信することに応じて、古いボリューム２０２はデータチャンク３を優先して転送する（６）。優先転送が終了して、データチャンク３が新しいボリューム２１２の適切なパーティションに記憶されたら、新しいボリューム２１２はデータチャンク３を仮想マシン３３５に送信する（７）。仮想マシン３３５がデータチャンク３をプログラム３３６に転送して（８）、読み込み動作が終了する。
パーティション間データチャンク移行例。
【００４４】
図４Ａは、一実施形態による図１のデータボリューム変更環境における種々のＢＤＳサーバシステム４０６Ａ〜Ｃを示すブロック図である。図４Ａに例示したように、ＢＤＳサーバシステム４０６Ａは、古いボリュームの第１のパーティション、古いボリュームパーティション４１６Ａ、および新しいボリュームの第１のパーティション、新しいボリュームパーティション４２６Ａを記憶する記憶装置を含み、ＢＤＳサーバシステム４０６Ｂは、古いボリュームの第２のパーティション、古いボリュームパーティション４１６Ｂ、および新しいボリュームの第２のパーティション、新しいボリュームパーティション４２６Ｂを記憶する記憶装置を含み、ＢＤＳサーバシステム４０６Ｃは、新しいボリュームの第３のパーティション、新しいボリュームパーティション４２６Ｃを記憶する記憶装置を含む。したがって、古いボリュームには２つのパーティションがあり、新しいボリュームは３つのパーティションがある。
【００４５】
図４Ｂは、一実施形態により古いボリュームパーティションおよび新しいボリュームパーティションの種々のパーティション４１６Ａ〜Ｂおよび４２６Ａ〜Ｃ間の通信を示すブロック図である。図４Ｂに例示したように、それぞれの新しいボリュームパーティション４２６Ａ〜Ｃはそれぞれの古いボリュームパーティション４１６Ａ〜Ｂと通信することができる。これは成り立ってもよい。なぜならば、古いボリュームと新しいボリュームとはパーティション数が異なるため、古いボリュームパーティション４１６Ａまたは４１６Ｂ内の任意の所定のデータチャンクを、新しいボリュームパーティション４２６Ａ〜Ｃの１つに記憶することができるからである。たとえば、この考え方を図４Ｃに関して以下に例示する。
【００４６】
図４Ｃは、一実施形態により古いボリュームパーティション４１６Ａ〜Ｂおよび新しいボリュームパーティション４２６Ａ〜Ｃに記憶されたデータチャンクの相関関係を示すブロック図である。図４Ｃに例示したように、データチャンク４５０は、古いボリュームパーティション４１６Ａの第１のデータチャンクスロット内に記憶され、データチャンク４５１は、古いボリュームパーティション４１６Ｂの第１のデータチャンクスロット内に記憶され、データチャンク４５２は、古いボリュームパーティション４１６Ａの第２のデータチャンクスロット内に記憶され、データチャンク４５３は、古いボリュームパーティション４１６Ｂの第２のデータチャンクスロット内に記憶され、データチャンク４５４は、古いボリュームパーティション４１６Ａの第３のデータチャンクスロット内に記憶され、データチャンク４５５は、古いボリュームパーティション４１６Ｂの第３のデータチャンクスロット内に記憶され、データチャンク４５６は、古いボリュームパーティション４１６Ａの第４のデータチャンクスロット内に記憶され、データチャンク４５７は、古いボリュームパーティション４１６Ｂの第４のデータチャンクスロット内に記憶される。
【００４７】
前述したように、古いボリュームと新しいボリュームとはパーティション数が異なるため、データチャンク４５０〜４５７を新しいボリュームに移送したときに、データチャンク４５０〜４５７を、同じデータチャンクスロットにも、同じ番号付けされたパーティションにも記憶しなくてよい。たとえば、古いボリューム内のデータチャンクの場所と新しいボリューム内のデータチャンクの新しい場所とを決定する前述した技術を用いて、新しいボリュームは、データチャンク４５０を新しいボリュームパーティション４２６Ａの第１のデータチャンクスロット内に、データチャンク４５１を新しいボリュームパーティション４２６Ｂの第１のデータチャンクスロット内に、データチャンク４５２を新しいボリュームパーティション４２６Ｃの第１のデータチャンクスロット内に、データチャンク４５３を新しいボリュームパーティション４２６Ａの第２のデータチャンクスロット内に、データチャンク４５４を新しいボリュームパーティション４２６Ｂの第２のデータチャンクスロット内に、データチャンク４５５を新しいボリュームパーティション４２６Ｃの第２のデータチャンクスロット内に、データチャンク４５６を新しいボリュームパーティション４２６Ａの第３のデータチャンクスロット内に、およびデータチャンク４５７を新しいボリュームパーティション４２６Ｂの第３のデータチャンクスロット内に記憶してもよい。
データ転送ルーチン例
【００４８】
図５は、一実施形態によりＢＤＳサーバシステムによって例示的に実装されるデータ転送ルーチン５００を示すフロー図である。一例としては、図１のＢＤＳサーバシステム１０６は、データチャンク転送ルーチン５００を実行するように構成することができる。データチャンク転送ルーチン５００はブロック５０２で開始する。
【００４９】
ブロック５０４において、ボリュームマニフェストファイルからオフセットまたは第１のデータのサイズを取り出す。たとえば、ボリュームマニフェストファイルは、古いボリューム内にデータチャンクが記憶されているオフセットを示すことができる。ボリュームマニフェストファイルはさらに古いボリューム内のデータチャンクのサイズを示してもよい。代替的に、ボリュームマニフェストファイルはこのような情報を記憶しなくてもよいが、このような情報をホストシステム１０４、ＢＤＳサーバシステム１０６、または管理システム１０８によってローカルに記憶してもよい。第１のデータは第１のデータチャンクであってもよい。
【００５０】
いくつかの実施形態では、規格化オフセットを計算する。たとえば、オフセットを第１のデータのサイズで割って規格化オフセットを決定することができる。規格化オフセットを用いて、データチャンクが配置されているパーティションおよびデータチャンクスロットと、データチャンクを記憶すべきパーティションおよびデータチャンクスロットとを決定することができる。ブロック５０４が終了した後で、データチャンク転送ルーチン５００はブロック５０６（およびブロック５０８、５１０、５１２）と５１４（およびブロック５１６、５１８、５２０）とに進む。これらは、並列または順次に終了することができる。
【００５１】
ブロック５０６において、規格化オフセットを古いボリューム内のパーティション数で割った余りを求める。剰余動作の結果を用いて、古いボリューム内の第１のパーティションが第１のデータを記憶することを確認してもよい。これをブロック５０８に例示する。
【００５２】
ブロック５１０において、規格化オフセットを古いボリューム内のパーティション数で割ったものを求める。除算演算から得られる任意の剰余を無視してもよい。除算演算の結果を用いて、第１のパーティションの第１の部分が第１のデータを記憶することを確認してもよい。これをブロック５１２に例示する。たとえば、第１の部分は、古いボリュームの第１のパーティション内の第１のデータチャンクスロットであってもよい。
【００５３】
ブロック５１４において、規格化オフセットを新しいボリューム内のパーティション数で割った余りを求める。剰余動作の結果を用いて、新しいボリューム内の第２のパーティションが第１のデータを記憶すべきことを確認してもよい。これをブロック５１６に例示する。
【００５４】
ブロック５１８において、規格化オフセットを新しいボリューム内のパーティション数で割ったものを求める。除算演算から得られる任意の剰余を無視してもよい。除算演算の結果を用いて、第２のパーティションの第２の部分に第１のデータを記憶すべきことを確認してもよい。これをブロック５２０に例示する。たとえば、第２の部分は新しいボリュームの第２のパーティション内の第２のデータチャンクスロットであってもよい。
【００５５】
ブロック５２２において、第１のデータを古いボリューム内の第１のパーティションの第１の部分から新しいボリューム内の第２のパーティションの第２の部分に転送する。第１のデータが転送された後で、データチャンク転送ルーチン５００は終了してもよい。これをブロック５２４に示す。データチャンク転送ルーチン５００を、ボリュームマニフェストファイル内のオフセットによって参照される各データチャンクに対して繰り返してもよい。
【００５６】
一例として、古いボリュームが３つのパーティションを有し、新しいボリュームは４つのパーティションを有し、マニフェストファイルにおいて、データチャンクは８ビット長であり、第１のデータチャンクの場所がオフセット５６であると特定された場合、古いボリューム内の第１のデータチャンクの場所と新しいボリューム内の第１のデータチャンクに対する場所とを、以下の仕方で決定することができる。オフセットが５６でデータチャンクは８ビット長であるため、規格化オフセットは５６を８で割ることによって決定され、結果は７になる。規格化オフセットを古いボリューム内のパーティション数で割った余りを求めると、結果は１になる（たとえば、７を３で割った余りは１）。古いボリューム内のパーティション数が３ならば、剰余演算から得られる可能な値は０（たとえば、パーティション１に一致する）、１（たとえば、パーティション２に一致する）、および２（たとえば、パーティション３に一致する）である。したがって、古いボリューム内のパーティション２には第１のデータチャンクが含まれる。規格化オフセットを古いボリューム内のパーティション数で割ることを求めると結果は２になる（たとえば、７を３で割ると２であり、任意の余り値を無視する）。古いボリューム内のパーティション数が３ならば、除算演算から得られる可能な値は０から開始する（たとえば、オフセットが０、８、または１６の場合）。したがって、除算演算から得られる０はパーティション内の第１のデータチャンクスロットに対応し、除算演算から得られる１はパーティション内の第２のデータチャンクスロットに対応する等。したがって、古いボリューム内のパーティション２内のデータチャンクスロット３には第１のデータチャンクが含まれる。
【００５７】
同様に、規格化オフセットを新しいボリューム内のパーティション数で割った余りを求めると、結果は３になる（たとえば、７を４で割った余りは３）。新しいボリューム内のパーティション数が４ならば、剰余演算から得られる可能な値は０（たとえば、パーティション１に一致する）、１（たとえば、パーティション２に一致する）、２（たとえば、パーティション３に一致する）、および３（たとえば、パーティション４に一致する）である。したがって、新しいボリューム内のパーティション４は第１のデータチャンクを記憶するべきである。規格化オフセットを新しいボリューム内のパーティション数で割ることを求めると結果は１になる（たとえば、７を４で割ると１であり、任意の余り値を無視する）。新しいボリューム内のパーティション数が４ならば、除算演算から得られる可能な値は０から開始する（たとえば、オフセットが０、８、１６、または２４の場合）。したがって、除算演算から得られる０はパーティション内の第１のデータチャンクスロットに対応する、除算演算から得られる１はパーティション内の第２のデータチャンクスロットに対応する等。したがって、新しいボリューム内のパーティション４内のデータチャンクスロット２は第１のデータチャンクを記憶するべきである。
ボリューム変更ルーチン例
【００５８】
図６は、一実施形態により管理システムによって例示的に実装されるボリューム変更ルーチン６００を示すフロー図である。一例として、図１の管理システム１０８（たとえば、ボリューム変更マネージャ１１８）は、ボリューム変更ルーチン６００を実行するように構成することができる。ボリューム変更ルーチン６００はブロック６０２で開始する。
【００５９】
ブロック６０４において、変更されたボリューム動作パラメータを受信する。たとえば、変更されたボリューム動作パラメータを「ＭｏｄｉｆｙＶｏｌｕｍｅ」ＡＰＩ呼び出しを介して受信してもよい。変更されたボリューム動作パラメータは、第１のサイズから第１のサイズよりも大きい第２のサイズへのボリューム記憶容量の増加を示してもよい。
【００６０】
ブロック６０６において、サーバに命令を出して、変更されたボリューム動作パラメータに基づいて新しいボリュームを提供するように資源を割り当てさせる。たとえば、ＢＤＳサーバシステム１０６に資源を割り当てるように命令を出すことができる。したがって、既存のボリュームの記憶容量を増加させるリクエストを受信することに応じて、既存のボリュームに対する調整を行う代わりに新しいボリュームを提供してもよい。
【００６１】
ブロック６０８において、新しいボリュームが提供されたという表示に応じて、古いボリュームに命令を出してＩ／Ｏリクエストの取り扱いを停止させる。たとえば、将来のＩ／Ｏリクエストを古いボリュームに送らなくてもよいし、または古いボリュームが任意の将来のＩ／Ｏリクエストをブロックしてもよい。一実施形態では、ボリューム変更マネージャ１１８はＥＢＳクライアント（たとえば、ＢＤＳサーバシステム１０６に接続された仮想マシン１３５）に命令を出して、Ｉ／Ｏリクエストを古いボリュームに送ることを停止させる。ＥＢＳクライアントは次に、古いボリュームに命令を出して、Ｉ／Ｏリクエストの取り扱いを停止させてＩ／Ｏキューを排出させる。
【００６２】
ブロック６１０において、新しいボリュームが提供されたという表示に応じて、新しいボリュームに命令を出してＩ／Ｏリクエストを取り扱わせる。一実施形態では、ボリューム変更マネージャ１１８はＥＢＳクライアントに命令を出して、新しいボリュームにＩ／Ｏリクエストを送らせる。ＥＢＳクライアントは次に、新しいボリュームに命令を出してＩ／Ｏリクエストの取り扱いを開始させる。したがって、そこから後、古いボリュームの代わりに、新しいボリュームがＩ／Ｏリクエストを取り扱うことができる。
【００６３】
ブロック６１２において、新しいボリュームに命令を出して古いボリュームからデータを取り出させる。たとえば、古いボリュームの代わりに新しいボリュームがＩ／Ｏリクエストの取り扱いを開始した後に、新しいボリュームにそのような命令を出してもよい。新しいボリュームがＩ／Ｏリクエストを取り扱う間に、データ取り出しを行ってもよい。新しいボリュームは、古いボリュームのボリュームマニフェストファイルを用いて取り出しを完了してもよい。代替的な実施形態では、ブロック６１０の前でブロック６０８の後に、ブロック６１２を行うことができる。データ取り出しが開始した後で、ボリューム変更ルーチン６００は終了してもよい。これをブロック６１４に示す。
【００６４】
図７は、一実施形態により管理システムによって例示的に実装されるボリューム変更ルーチン７００を示すフロー図である。一例として、図１の管理システム１０８（たとえば、ボリューム変更マネージャ１１８）を、ボリューム変更ルーチン７００を実行するように構成することができる。ボリューム変更ルーチン７００はブロック７０２で開始する。
【００６５】
ブロック７０４において、変更されたボリューム動作パラメータを受信する。たとえば、変更されたボリューム動作パラメータを「ＭｏｄｉｆｙＶｏｌｕｍｅ」ＡＰＩ呼び出しを介して受信してもよい。変更されたボリューム動作パラメータは、第１のサイズから第１のサイズよりも大きい第２のサイズへのボリューム記憶容量の増加を示してもよい。
【００６６】
ブロック７０６において、サーバに命令を出して、変更されたボリューム動作パラメータに基づいて新しいボリュームを提供するように資源を割り当てさせる。たとえば、ＢＤＳサーバシステム１０６に資源を割り当てるように命令を出すことができる。したがって、既存のボリュームの記憶容量を増加させるリクエストを受信することに応じて、既存のボリュームに対する調整を行う代わりに新しいボリュームを提供してもよい。
【００６７】
ブロック７０８において、新しいボリュームが提供されたという表示に応じて、ＥＢＳクライアントに命令を出して古いボリュームの代わりに新しいボリュームを用いることを開始させる。一実施形態では、ＥＢＳクライアントは次に、古いボリュームに命令を出してＩ／Ｏリクエストの取り扱いを停止させ、またＩ／Ｏキューを排出して、新しいボリュームに命令を出してＩ／Ｏリクエストの取り扱いを開始させる。
【００６８】
ブロック７１０において、新しいボリュームに命令を出して古いボリュームからデータを取り出させる。たとえば、古いボリュームの代わりに新しいボリュームがＩ／Ｏリクエストの取り扱いを開始した後に、新しいボリュームに命令を出してもよい。新しいボリュームがＩ／Ｏリクエストを取り扱う間に、データ取り出しを行ってもよい。新しいボリュームは、古いボリュームのボリュームマニフェストファイルを用いて取り出しを完了してもよい。データ取り出しが開始した後で、ボリューム変更ルーチン７００を終了してもよい。これをブロック７１２に示す。階層的なデータボリューム
【００６９】
いくつかの実施形態では、データボリュームの階層的なセットを用いてＩ／Ｏリクエストを取り扱うことができる。たとえば、データセンタ１４０は、初期ボリューム１１６を変更する第２のリクエストを、以前に同じ初期ボリューム１１６を変更する第１のリクエストを受信した後で、第１のリクエストが完了する前に、受信することができる。一例として、第１のリクエストに応じて、第１の新しいボリューム１１６を提供する。しかし、データチャンクを初期ボリューム１１６から第１の新しいボリューム１１６へ移行させることが、第２のリクエストを受信したときに完了していないことがある。第２のリクエストを受信することに応じて、データチャンクを初期ボリューム１１６から第１の新しいボリューム１１６へ移行させることを終了してもよい。加えて、第２のリクエストにより第２の新しいボリューム１１６を提供してもよい。こうして、データチャンクを第１の新しいボリューム１１６から第２の新しいボリューム１１６へ移行させることが開始してもよい。
【００７０】
第２の新しいボリューム１１６が提供されてＩ／Ｏリクエストの取り扱いを開始した後にプログラム１３６から読み込みリクエストが届いた場合、読み込みリクエストに対応するデータチャンクは、初期ボリューム１１６のみ、第１の新しいボリューム１１６のみ、初期ボリューム１１６および第２の新しいボリューム１１６の両方、または初期ボリューム１１６、および第１の新しいボリューム１１６、および第２の新しいボリューム１１６に記憶されていることがありうる。第２の新しいボリューム１１６がそこにデータチャンクが配置されていないと判定した場合、第２の新しいボリューム１１６は、第１の新しいボリューム１１６からのデータチャンクの優先取り出しをリクエストしてもよい（たとえば、第１の新しいボリューム１１６のボリュームマニフェストファイルを用いて行う。ボリュームマニフェストファイルは、初期ボリューム１１６内および第１の新しいボリューム１１６内のすべてのオフセットを含んでいてもよい）。第１の新しいボリューム１１６は次に、データチャンクがそこに配置されているか否かを判定してもよい。データチャンクがそこに配置されていない場合、第１の新しいボリューム１１６（または第２の新しいボリューム１１６）は、初期ボリューム１１６からのデータチャンクをリクエストしてもよい（たとえば、初期ボリューム１１６のマニフェストファイルを用いて）。初期ボリューム１１６内にデータチャンクが記憶されている場合、第２の新しいボリューム１１６は初期ボリューム１１６からのデータチャンクの優先取り出しを開始してもよい。
【００７１】
代替的な実施形態では、各ボリューム１１６のボリュームマニフェストファイルは情報の差分の組を含んでいてもよい。たとえば、初期ボリューム１１６のボリュームマニフェストファイルは、そこに記憶されたデータチャンクのオフセットを示してもよい。第１の新しいボリューム１１６のボリュームマニフェストファイルは単に、第１の新しいボリューム１１６内に記憶されているが初期ボリューム１１６内に記憶されていないデータチャンクのオフセットを示してもよい。第２の新しいボリューム１１６はボリュームマニフェストファイルを組み合わせて、どのボリューム１１６が所望のデータチャンクを含んでいるかを直接特定して、それに応じてそのデータチャンクを優先してリクエストすることができる。
データ損失
【００７２】
本明細書で説明したように、ボリューム１１６は、異なるＢＤＳサーバシステム１０６上に記憶されたパーティションを有することができる。したがって、新しいボリューム１１６は、初期ボリューム１１６の種々のパーティションからデータチャンクを取り出すことができる、初期ボリューム１１６では、種々のパーティションが、異なるＢＤＳサーバシステム１０６上に記憶されている。したがって、パーティションの１つを記憶するＢＤＳサーバシステム１０６がデータチャンク移行プロセスの間に破損しても、破損したパーティションからのデータチャンクのすべてがすでに取り出されているならば、初期ボリューム１１６全体は失われない。ボリューム変更マネージャ１１８が行ったポーリングを用いて、初期ボリューム１１６パーティションからのデータチャンクのすべてが取り出されているか否かを、したがって初期ボリューム１１６が失われているか否かを判定することができる。初期ボリューム１１６が失われた場合、ユーザに、ユーザ装置１０２に送信されたメッセージ、またはユーザ装置１０２を介してユーザがアクセス可能なアカウントに送信されたメッセージを介して通知することができる。
【００７３】
本開示の実施形態は以下の条項を考慮して記載することができる。
１．コンピュータ実装の方法であって、
具体的な実行可能命令で構成される１つ以上のコンピューティングデバイスによって実装されたときに、
前記第１のデータボリュームを変更するリクエストを受信することであって、前記リクエストは第１の動作パラメータを含む、前記受信することと、
第２のデータボリュームを提供するように前記サーバの少なくとも一部を割り当てるようにサーバに命令を出すことであって、前記第２のデータボリュームの特性は前記第１の動作パラメータと前記第１のデータボリュームの特性とに基づく、前記命令を出すことと、
Ｉ／Ｏキュー内に残存する１つ以上の入出力（Ｉ／Ｏ）リクエストを実行するように前記第１のデータボリュームに命令を出すことと、
前記Ｉ／Ｏキューは空であるという表示に応じて、第１のデータボリュームマニフェストを前記第２のデータボリュームに転送するように、前記第１のデータボリュームに命令を出すことと、
前記前記Ｉ／Ｏキューは空であるという表示に応じて、前記第１のデータボリュームの代わりに将来のＩ／Ｏリクエストを実行するように、前記第２のデータボリュームに命令を出すことと、
前記第１のデータボリュームマニフェストを用いて、前記第１のデータボリュームに記憶されたデータを取り出して記憶するように、前記第２のデータボリュームに命令を出すことと、
前記第１のデータボリュームに記憶された前記データの取り出しのステータスが完了したと判定することと、
前記取り出しの前記ステータスが完了したという前記判定に応じて、前記第１のデータボリュームを提供するべく割り当てられた前記サーバの少なくとも一部の割り当てを解除するように前記サーバに命令を出すことと、
を含む前記コンピュータ実装の方法。
【００７４】
２．前記第１のデータボリュームを提供するべく割り当てられた前記サーバの少なくとも一部の割り当てを解除するように前記サーバに命令を出すことはさらに、前記サーバに前記第１のデータボリュームのボリュームジオメトリを削除させることを含む条項１に記載のコンピュータ実装の方法。
【００７５】
３．前記第１のデータボリュームに記憶された複数のデータチャンクにおける第１のデータチャンクに対するリクエストをホストシステムから受信することと、
前記第１のデータチャンクが前記第２のデータボリュームに記憶されていないと判定することと、
前記複数のデータチャンクにおいて前記第１のデータチャンクの転送を第２のデータチャンクよりも優先させることを、前記第１のデータチャンクが前記第２のデータボリュームに記憶されていないという前記判定に応じて行うことと、
前記第１のデータチャンクが前記第１のデータボリュームから取り出されたら、前記第２のデータボリュームに前記第１のデータチャンクを前記ホストシステムに送信させることと、
をさらに含む条項１に記載のコンピュータ実装の方法。
【００７６】
４．前記第１のデータボリュームマニフェストから第１のデータチャンクの記憶パラメータを取り出すことと、
前記記憶パラメータと前記第１のデータボリュームのジオメトリとに基づいて、前記第１のデータボリューム内の第１のパーティションの第１の部分が前記第１のデータチャンクを記憶することを確認することと、
前記記憶パラメータと前記第２のデータボリュームのジオメトリとに基づいて、前記第１のデータチャンクを記憶するべく前記第２のデータボリュームの第２のパーティションの第２の部分を特定することであって、前記第１のデータボリュームの前記ジオメトリは前記第２のデータボリュームの前記ジオメトリとは異なる、前記特定することと、
前記第１のデータチャンクを前記第１のデータボリューム内の前記第１のパーティションの前記第１の部分から前記第２のデータボリューム内の前記第２のパーティションの前記第２の部分へ転送することと、
をさらに含む条項１に記載のコンピュータ実装の方法。
【００７７】
５．前記第１のデータチャンクのサイズを取り出すことをさらに含む条項４に記載のコンピュータ実装の方法。
【００７８】
６．前記記憶パラメータはオフセットを含み、前記第１のデータボリュームの前記ジオメトリは前記第１のデータボリューム内にあるパーティションの数を含み、前記第２のデータボリュームの前記ジオメトリは前記第２のデータボリューム内にあるパーティションの数を含む条項４に記載のコンピュータ実装の方法。
【００７９】
７．システムであって、
第１のデータボリュームの少なくとも一部をホストする複数のサーバと、プロセッサとメモリとを含む管理システムと、を含み、
前記メモリは命令を含み、前記命令は、前記プロセッサによって実行されると、前記管理システムに、
前記第１のデータボリュームを変更するリクエストを受信することと、
少なくとも部分的に前記リクエスト内の情報に基づいて、前記複数のサーバに、第２のデータボリュームを提供するように前記複数のサーバの少なくとも一部を割り当てさせることと、
入出力（Ｉ／Ｏ）キューが空であるという表示に応じて、第１のデータボリュームマニフェストを前記第２のデータボリュームに転送するように前記第１のデータボリュームに命令を出すことと、
前記第２のデータボリュームの提供に応じて、前記第１のデータボリュームの代わりに前記第２のデータボリュームにＩ／Ｏリクエストを実行させることを、前記第１のデータボリュームからのすべてのデータが前記第２のデータボリュームに転送される前に行うことと、
前記第２のデータボリュームに、前記第１のデータボリュームに記憶されたデータを取り出させて記憶させることと、
を行わせる前記システム。
【００８０】
８．前記命令は、前記プロセッサによって実行されるとさらに、前記管理システムに、
前記第１のデータボリュームに記憶された前記データの取り出しのステータスが終了したと判定することと、
前記取り出しの前記ステータスが終了したという前記判定に応じて、前記複数のサーバに、前記第１のデータボリュームを提供するように割り当てられた前記複数のサーバの少なくとも一部の割り当てを解除させることと、
を行わせる条項７に記載のシステム。
【００８１】
９．前記命令は、前記プロセッサによって実行されるとさらに、前記管理システムに、前記複数のサーバに前記第１のデータボリュームのボリュームジオメトリを削除させることによって、前記複数のサーバに、前記第１のデータボリュームを提供するように割り当てられた前記複数のサーバの少なくとも一部の割り当てを解除させる条項８に記載のシステム。
【００８２】
１０．前記命令は、前記プロセッサによって実行されるとさらに、前記管理システムに、前記第２のデータボリュームに、前記第１のデータボリュームのボリュームマニフェストを用いて、前記第１のデータボリュームに記憶された前記データを取り出させて記憶させる条項７に記載のシステム。
【００８３】
１１．ボリュームマニフェストは、前記第１のデータボリュームに記憶された前記データに対応するオフセットのセットを含む条項７に記載のシステム。
【００８４】
１２．前記複数のサーバはさらに、
前記第１のデータボリュームに記憶された複数のデータチャンクにおける第１のデータチャンクに対するリクエストをホストシステムから受信することと、
前記第１のデータチャンクが前記第２のデータボリュームに記憶されていないと判定することと、
前記複数のデータチャンクにおいて前記第１のデータチャンクの転送を第２のデータチャンクよりも優先させることを、前記第１のデータチャンクが前記第２のデータボリュームに記憶されていないという前記判定に応じて行うことと、
前記第１のデータチャンクが前記第１のデータボリュームから取り出されたら、前記第２のデータボリュームに前記第１のデータチャンクを前記ホストシステムに送信させることと、
を行うように構成されている条項７に記載のシステム。
【００８５】
１３．前記命令は、前記プロセッサによって実行されるとさらに、前記管理システムに、前記第１のデータボリュームに前記Ｉ／Ｏキュー内に残存する１つ以上のＩ／Ｏリクエストを実行させる条項７に記載のシステム。
【００８６】
１４．前記リクエストは第１の動作パラメータを含み、前記第２のデータボリュームの特性は前記第１の動作パラメータと前記第１のデータボリュームの特性とに基づく条項７に記載のシステム。
【００８７】
１５．前記第１のデータボリュームの前記特性は第１のサイズの記憶容量を含み、前記第１の動作パラメータは、前記第１のデータボリュームの前記記憶容量を前記第１のサイズよりも大きい第２のサイズに変更する指示を含む条項１４に記載のシステム。
【００８８】
１６．前記第１のデータボリュームマニフェストは、前記第１のデータボリュームに記憶されたデータチャンクに対応するオフセットの組を含む条項７に記載のシステム。
【００８９】
１７．実行可能プログラムコードが記憶された非一時的なコンピュータ可読媒体であって、前記実行可能プログラムコードは１つ以上のコンピューティングデバイスに動作を行うように命令することを、前記１つ以上のコンピューティングデバイス上で動作するデータセンタによって実行されたときに行い、前記動作は、
第１のデータボリュームを変更するリクエストを受信することと、
前記リクエストに応じて、サーバに、第２のデータボリュームを提供するように前記サーバの少なくとも一部を割り当てさせることと、
前記第１のデータボリュームからの前記データがすべて前記第２のデータボリュームに記憶される前に、前記第１のデータボリュームの代わりに前記第２のデータボリュームに入出力（Ｉ／Ｏ）リクエストを実行させることと、
前記第２のデータボリュームに、前記第１のデータボリュームに記憶されたデータを取り出させて記憶させることと、
前記第１のデータボリュームに記憶された前記データの取り出しのステータスが終了したと判定することと、
前記取り出しの前記ステータスが終了したという前記判定に応じて、前記サーバに、前記第１のデータボリュームを提供するように割り当てられた前記サーバの少なくとも一部の割り当てを解除させることと、
を含む前記非一時的なコンピュータ可読媒体。
【００９０】
１８．前記動作はさらに、前記第２のデータボリュームに、前記第１のデータボリュームのボリュームマニフェストを用いて、前記第１のデータボリュームに記憶された前記データを取り出させて記憶させることを含む条項１７に記載の非一時的なコンピュータ可読媒体。
【００９１】
１９．前記動作はさらに、
前記ボリュームマニフェストから第１のデータチャンクの記憶パラメータを取り出すことと、
前記記憶パラメータと前記第１のデータボリュームのジオメトリとに基づいて、前記第１のデータボリューム内の第１のパーティションの第１の部分が前記第１のデータチャンクを記憶することを確認することと、
前記記憶パラメータと前記第２のデータボリュームのジオメトリとに基づいて、前記第１のデータチャンクを記憶するべく前記第２のデータボリュームの第２のパーティションの第２の部分を特定することであって、前記第１のデータボリュームの前記ジオメトリは前記第２のデータボリュームの前記ジオメトリとは異なる、前記特定することと、
前記第１のデータチャンクを前記第１のデータボリューム内の前記第１のパーティションの前記第１の部分から前記第２のデータボリューム内の前記第２のパーティションの前記第２の部分へ転送することと、
を含む条項１８に記載の非一時的なコンピュータ可読媒体。
【００９２】
２０．前記記憶パラメータはオフセットを含み、前記第１のデータボリュームの前記ジオメトリは前記第１のデータボリューム内にあるパーティションの数を含み、前記第２のデータボリュームの前記ジオメトリは前記第２のデータボリューム内にあるパーティションの数を含む条項１９に記載の非一時的なコンピュータ可読媒体。
【００９３】
２１．前記第１のパーティションの前記第１の部分はデータチャンクスロットを含む条項１８に記載の非一時的なコンピュータ可読媒体。
【００９４】
２２．前記動作はさらに、前記第１のデータボリュームにＩ／Ｏキュー内に残存する１つ以上のＩ／Ｏリクエストを実行させることを含む条項１７に記載の非一時的なコンピュータ可読媒体。
【００９５】
２３．前記第１のデータボリュームマニフェストは、前記第１のデータボリュームに記憶されたデータチャンクに対応するオフセットの組を含む条項１７に記載の非一時的なコンピュータ可読媒体。
【００９６】
２４．コンピュータ実装の方法であって、
具体的な実行可能命令で構成される１つ以上のコンピューティングデバイスによって実装されたときに、
第１のデータボリュームを変更するリクエストを受信することと、
コンピューティングデバイスに前記リクエストに応じて第２のデータボリュームを提供させることと、
前記第１のデータボリュームからのすべてのデータチャンクが前記第２のデータボリューム上に記憶される前に、前記第１のデータボリュームの代わりに前記第２のデータボリュームに入出力（Ｉ／Ｏ）リクエストを実行させることと、
前記第２のデータボリュームに前記第１のデータボリュームに記憶された複数の前記データチャンクを取り出させて記憶させることと、
第１のデータチャンクに対するリクエストをホストシステムから受信することと、
前記第１のデータチャンクが前記第２のデータボリュームに記憶されていないと判定することと、
前記複数のデータチャンクにおいて前記第１のデータチャンクの転送を第２のデータチャンクよりも優先させることを、前記第１のデータチャンクが前記第２のデータボリュームに記憶されていないという前記判定に応じて行うことと、
前記第１のデータチャンクが前記第１のデータボリュームから取り出されたら、前記第２のデータボリュームに前記第１のデータチャンクを前記ホストシステムに送信させることと、
を含む前記コンピュータ実装の方法。
【００９７】
２５．前記第２のデータボリュームに前記第１のデータボリュームに記憶された前記複数のデータチャンクを取り出させて記憶させる前に、前記第１のデータボリュームに、Ｉ／Ｏキュー内に残存する１つ以上のＩ／Ｏリクエストを実行させることをさらに含む条項２４に記載のコンピュータ実装の方法。
【００９８】
２６．前記第２のデータボリュームに、前記第１のデータボリュームに記憶された複数のデータチャンクを取り出させて記憶させることはさらに、前記第１のデータボリュームのボリュームマニフェストを用いることを含み、前記ボリュームマニフェストは、前記第１のデータボリュームに記憶された前記複数のデータチャンクに対応するオフセットの組を含む条項２４に記載のコンピュータ実装の方法。
【００９９】
２７．前記第１のデータボリュームは第１のパーティションと第２のパーティションとを含み、前記第１のパーティションは第１のデータチャンクスロットと第３のデータチャンクスロットとを含み、前記第２のパーティションは第２のデータチャンクスロットと第４のデータチャンクスロットとを含み、前記第１のデータチャンクは前記第１のパーティションの前記第１のデータチャンクスロット内に記憶され、前記第２のデータチャンクは前記第１のパーティションの前記第２のデータチャンクスロット内に記憶される条項２４に記載のコンピュータ実装の方法。
【０１００】
２８．前記第２のデータボリュームは、第３のパーティション、第４のパーティション、および第５のパーティションを含み、前記第５のパーティションは第５のデータチャンクスロットを含み、前記第２のデータボリュームは、前記第１のデータボリューム内の前記第２のデータチャンクのオフセットと前記第２のデータチャンクのサイズとに基づいて、前記第２のデータチャンクを前記第２のデータボリュームの前記第５のパーティションの前記第５のデータチャンクスロット内に記憶する条項２７に記載のコンピュータ実装の方法。
【０１０１】
２９．システムであって、
第１のデータボリュームの少なくとも一部をホストする複数のサーバと、
プロセッサとメモリとを含むシステムと、を含み、前記メモリは命令を含み、前記命令は、前記システムに、
前記第１のデータボリュームを変更するリクエストを受信することと、
前記リクエストに応じて、前記複数のサーバに、第２のデータボリュームを提供するように前記複数のサーバの少なくとも一部を割り当てさせることと、
前記第１のデータボリュームからのすべてのデータチャンクが前記第２のデータボリューム上に記憶される前に、前記第１のデータボリュームの代わりに前記第２のデータボリュームに入出力（Ｉ／Ｏ）リクエストを実行させることと、
前記第２のデータボリュームに、前記第１のデータボリュームに記憶された複数の前記データチャンクを取り出させて記憶させることと、
第１のデータチャンクに対するリクエストをホストシステムから受信することと、
前記第１のデータチャンクが前記第２のデータボリュームに記憶されていないと判定することと、
前記複数のデータチャンクにおいて前記第１のデータチャンクの転送を第２のデータチャンクよりも優先させることと、
を行わせる前記システム。
【０１０２】
３０．前記命令は、前記プロセッサによって実行されるとさらに、前記システムに、前記第２のデータボリュームに前記第１のデータボリュームに記憶された前記複数のデータチャンクを取り出させて記憶させる前に、前記第１のデータボリュームにＩ／Ｏキュー内に残存する１つ以上のＩ／Ｏリクエストを実行させる条項２９に記載のシステム。
【０１０３】
３１．前記命令は、前記プロセッサによって実行されるとさらに、前記システムに前記第１のデータボリュームのボリュームマニフェストを使用させる条項２９に記載のシステム。
【０１０４】
３２．前記第１のデータボリュームは第１のパーティションと第２のパーティションとを含み、前記第１のパーティションは第１のデータチャンクスロットと第３のデータチャンクスロットとを含み、前記第２のパーティションは第２のデータチャンクスロットと第４のデータチャンクスロットとを含み、前記第１のデータチャンクは前記第１のパーティションの前記第１のデータチャンクスロット内に記憶され、前記第２のデータチャンクは前記第１のパーティションの前記第２のデータチャンクスロット内に記憶される条項２９に記載のシステム。
【０１０５】
３３．前記第２のデータボリュームは、第３のパーティション、第４のパーティション、および第５のパーティションを含み、前記第５のパーティションは第５のデータチャンクスロットを含み、前記第２のデータボリュームは、前記第１のデータボリューム内の前記第２のデータチャンクのオフセットと前記第２のデータチャンクのサイズとに基づいて、前記第２のデータチャンクを前記第２のデータボリュームの前記第５のパーティションの前記第５のデータチャンクスロット内に記憶する条項３２に記載のシステム。
【０１０６】
３４．前記第２のデータボリュームが、前記第１のデータボリュームとの第１の接続を介して前記第１のデータチャンクを取り出し、前記第１のデータボリュームとの第２の接続を介して前記第２のデータチャンクを取り出す条項２９に記載のシステム。
【０１０７】
３５．前記第２のデータボリュームは前記第２のデータチャンクの取り出しを休止して、前記第１のデータチャンクの前記取り出しを優先させる条項２９に記載のシステム。
【０１０８】
３６．前記第１のデータチャンクの前記転送は、前記第１のデータチャンクを前記第１のボリュームから前記第２のボリュームに、また前記第２のボリュームから前記ホストシステムに転送することを含む条項２９に記載のシステム。
【０１０９】
３７．実行可能プログラムコードが記憶された非一時的なコンピュータ可読媒体であって、前記実行可能プログラムコードは１つ以上のコンピューティングデバイスに動作を行うように命令することを、前記１つ以上のコンピューティングデバイス上で実行されたときに行い、前記動作は、
前記第１のデータボリュームを変更するリクエストを受信することと、
前記リクエストに応じて、第２のデータボリュームを提供するようにサーバの少なくとも一部を割り当てることと、
前記第２のデータボリュームの前記提供の後に、前記第１のデータボリュームの代わりに前記第２のデータボリュームに入出力（Ｉ／Ｏ）リクエストを実行させることと、
前記第２のデータボリュームに、前記第１のデータボリュームに記憶された複数のデータチャンクを取り出させて記憶させることと、
前記複数のデータチャンクにおける第１のデータチャンクに対するリクエストを受信することと、
前記第１のデータチャンクが前記第２のデータボリュームに記憶されていないという判定に応じて、前記複数のデータチャンクにおいて前記第１のデータチャンクの転送を第２のデータチャンクよりも優先させることと、
を含む前記非一時的なコンピュータ可読媒体。
【０１１０】
３８．前記動作はさらに、
前記第１のデータボリュームのボリュームマニフェストから前記第１のデータチャンクの記憶パラメータを取り出すことと、
前記記憶パラメータと前記第１のデータボリュームのジオメトリとに基づいて、前記第１のデータボリューム内の第１のパーティションの第１の部分が前記第１のデータチャンクを記憶することを確認することと、
前記記憶パラメータと前記第２のデータボリュームのジオメトリとに基づいて、前記第１のデータチャンクを記憶するべく前記第２のデータボリュームの第２のパーティションの第２の部分を特定することであって、前記第１のデータボリュームの前記ジオメトリは前記第２のデータボリュームの前記ジオメトリとは異なる、前記特定することと、
前記第１のデータチャンクを前記第１のデータボリューム内の前記第１のパーティションの前記第１の部分から前記第２のデータボリューム内の前記第２のパーティションの前記第２の部分へ転送することと、
を含む条項３７に記載の非一時的なコンピュータ可読媒体。
【０１１１】
３９．前記記憶パラメータはオフセットを含み、前記第１のデータボリュームの前記ジオメトリは前記第１のデータボリューム内にあるパーティションの数を含み、前記第２のデータボリュームの前記ジオメトリは前記第２のデータボリューム内にあるパーティションの数を含む条項３８に記載の非一時的なコンピュータ可読媒体。
【０１１２】
４０．前記ボリュームマニフェストは、前記第１のデータボリュームに記憶された前記複数のデータチャンクに対応するオフセットの組を含む条項３８に記載の非一時的なコンピュータ可読媒体。
【０１１３】
４１．前記動作はさらに、前記第２のデータボリュームに前記第１のデータボリュームに記憶された前記複数のデータチャンクを取り出させて記憶させる前に、前記第１のデータボリュームに、前記第１のデータボリュームのＩ／Ｏキュー内に残存する１つ以上のＩ／Ｏリクエストを実行させることを含む条項３７に記載の非一時的なコンピュータ可読媒体。
【０１１４】
４２．前記第２のデータボリュームは、前記第１のデータボリュームとの第１の接続を介して前記第１のデータチャンクを取り出し、前記第１のデータボリュームとの第２の接続を介して前記第２のデータチャンクを取り出す条項３７に記載の非一時的なコンピュータ可読媒体。
【０１１５】
４３．前記第２のデータボリュームは前記第２のデータチャンクの取り出しを休止して、前記第１のデータチャンクの前記取り出しを優先させる条項３７に記載の非一時的なコンピュータ可読媒体。
【０１１６】
本明細書で説明した方法およびタスクはすべて、コンピュータシステムによって行って完全に自動化してもよい。コンピュータシステムは、場合によっては、複数の別個のコンピュータまたはコンピューティングデバイス（たとえば、物理的なサーバ、ワークステーション、記憶アレイ、クラウドコンピューティング資源など）であって、ネットワークを介して通信して相互運用して、記載した機能を行うものを含んでいてもよい。このようなコンピューティングデバイスはそれぞれ典型的に、メモリまたは他の非一時的コンピュータ可読記憶媒体またはデバイス（たとえば、ソリッドステート記憶装置、ディスクドライブなど）に記憶されたプログラム命令またはモジュールを実行するプロセッサ（または複数のプロセッサ）を含む。本明細書で開示した種々の機能を、このようなプログラム命令において具体化してもよいし、またはコンピュータシステムの特定用途向け回路（たとえば、ＡＳＩＣまたはＦＰＧＡ）において実装してもよい。コンピュータシステムには複数のコンピューティングデバイスが含まれるが、これらのデバイスは同じ場所に配置してもよい（しかし、しなくてもよい）。開示した方法およびタスクの結果を、物理的な記憶装置（たとえば、ソリッドステートメモリチップまたは磁気ディスク）を異なる状態に変換することによって永続的に記憶してもよい。いくつかの実施形態では、コンピュータシステムは、処理資源が複数の別個の事業体または他のユーザによって共有されるクラウドベースのコンピューティングシステムであってもよい。
【０１１７】
実施形態に応じて、本明細書で説明したプロセスまたはアルゴリズムのうちの何れかの特定の行為、事象、または機能を異なる順序で行うこともできるし、加えることもできるし、併合することもできるし、または全く省くこともできる（たとえば、アルゴリズムを実施するのに、記載した動作または事象がすべて必要なわけではない）。また、特定の実施形態では、動作または事象を同時に行うことが、たとえば、マルチスレッド処理、割り込み処理、もしくは複数のプロセッサまたはプロセッサコアを通して、または他の（順次ではなく）並列アーキテクチャ上で可能である。
【０１１８】
本明細書で開示した実施形態と関連して記載した種々の例示的な論理ブロック、モジュール、ルーチン、およびアルゴリズムステップを、電子ハードウェア（たとえば、ＡＳＩＣまたはＦＰＧＡデバイス）、コンピュータハードウェア上で実行されるコンピュータソフトウェア、または両方の組み合わせとして実装することができる。また、本明細書で開示した実施形態と関連して記載した種々の例示的な論理ブロックおよびモジュールを、マシン、たとえば、プロセッサデバイス、デジタルシグナルプロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）もしくは他のプログラマブルロジックデバイス、ディスクリートゲートもしくはトランジスタロジック、ディスクリートハードウェアコンポーネント、またはそれらの任意の組み合わせであって、本明細書で説明した機能を行うようにデザインされたものによって実装または実行することができる。プロセッサデバイスはマイクロプロセッサとすることができるが、代替的に、プロセッサデバイスはコントローラ、マイクロコントローラ、またはステートマシーン、これらの組み合わせ等とすることができる。プロセッサデバイスは、コンピュータ実行可能命令を処理するように構成された電気回路を含むことができる。別の実施形態では、プロセッサデバイスには、コンピュータ実行可能命令を処理することなく論理演算を行うＦＰＧＡまたは他のプログラマブルデバイスが含まれる。またプロセッサデバイスをコンピューティングデバイスの組み合わせとして実装することができる。たとえば、ＤＳＰおよびマイクロプロセッサ、複数のマイクロプロセッサ、ＤＳＰコアとともに１つ以上のマイクロプロセッサの組み合わせ、または任意の他のこのような構成である。本明細書では主にデジタル技術に関して説明しているが、プロセッサデバイスは主にアナログ部品を含んでいてもよい。たとえば、本明細書で説明したレンダリング技術の一部または全部を、アナログ回路または混在アナログおよびデジタル回路において実装してもよい。コンピューティング環境には、任意のタイプのコンピュータシステムを含めることができる。たとえば、少しだけ例を挙げると、限定することなく、マイクロプロセッサ、メインフレームコンピュータ、デジタルシグナルプロセッサ、携帯型コンピューティングデバイス、デバイスコントローラ、または機器内の計算エンジンに基づくコンピュータシステムである。
【０１１９】
本明細書で開示した実施形態と関連して記載した方法、プロセス、ルーチン、またはアルゴリズムの要素を、ハードウェアにおいて、プロセッサデバイスが実行するソフトウェアモジュールにおいて、または２つの組み合わせにおいて直接具体化することができる。ソフトウェアモジュールは、ＲＡＭメモリ、フラッシュメモリ、ＲＯＭメモリ、ＥＰＲＯＭメモリ、ＥＥＰＲＯＭメモリ、レジスタ、ハードディスク、リムーバブルディスク、ＣＤ−ＲＯＭ、または非一時的コンピュータ可読記憶媒体の任意の他の形態で存在することができる。典型的な記憶媒体をプロセッサデバイスに結合して、プロセッサデバイスが記憶媒体から情報を読み込み、記憶媒体に情報を書き込めるようにしてもよい。代替的に、記憶媒体をプロセッサデバイスに一体化させることができる。プロセッサデバイスおよび記憶媒体はＡＳＩＣ内に存在することができる。ＡＳＩＣはユーザ端末内に存在することができる。代替的に、プロセッサデバイスおよび記憶媒体はユーザ端末内のディスクリート部品として存在することができる。
【０１２０】
本明細書で用いる条件付き言語、たとえば、とりわけ、「ｃａｎ」、「ｃｏｕｌｄ」、「ｍｉｇｈｔ」、「ｍａｙ」、「ｅ．ｇ．」などは、特に記載のない限り、または使用した文脈において他の点で理解される場合を除いて、全般的に、特定の特徴、要素、またはステップが（他の実施形態には含まれないが）特定の実施形態に含まれることを伝えることが意図されている。したがって、このような条件付き言語は全般的に、特徴、要素、またはステップが多少なりとも１つ以上の実施形態に対して必要とされること、または１つ以上の実施形態が必然的に、これらの特徴、要素、もしくはステップが任意の特定の実施形態に含まれるかもしくはそこで行われるべきかを、他の入力もしくはプロンプティングを用いてもしくは用いずに、判定するためのロジックを含むことを意味することは意図されていない。用語「含む（ｃｏｍｐｒｉｓｉｎｇ）」、「含む（ｉｎｃｌｕｄｉｎｇ）」、「有する」などは同義であり、オープンエンド様式で包含的に用いられ、追加の要素、特徴、行為、動作などを排除しない。また、用語「または」は、その包含的な趣旨で（排除的な趣旨ではなく）用いられ、たとえば要素のリストをつなぐのに用いられた際に、用語「または」はリストの要素の１つ、いくつかまたはすべてを意味する。
【０１２１】
離接的な言葉たとえば語句「Ｘ、Ｙ、またはＺのうちの少なくとも１つ」は、特に記載のない限り、他の場合には文脈によって、項目、用語などはＸ、Ｙ、もしくはＺ、またはそれらの任意の組み合わせ（たとえば、Ｘ、Ｙ、もしくはＺ）であってもよいことを示すために一般的に用いられると理解される。したがって、このような離接的な言葉は全般的に、特定の実施形態がＸの少なくとも１つ、Ｙの少なくとも１つ、およびＺの少なくとも１つがそれぞれ存在することを必要とすると意味することは意図しておらず、また意味してはならない。
【０１２２】
前述の発明を実施するための形態は、種々の実施形態に適用された新規特徴を示し、記載し、および指摘したが、例示したデバイスまたはアルゴリズムの形態および詳細の種々の省略、代用、および変化を本開示の趣旨から逸脱することなく施すことが可能であると理解することができる。理解できるように、本明細書で説明した特定の実施形態は、本明細書で述べた特徴および利益をすべて提供するわけではない形態で具体化することができる。なぜならば、いくつかの特徴は他とは別個に用いるかまたは実施することができるからである。本明細書で開示した特定の実施形態の範囲は、前述の記載ではなくて添付の請求項によって示される。請求項の均等物の意味および範囲に入るすべての変形は、請求項の範囲に包含されるべきである。
【図１】
2019525311.tif 000003
【図２】
2019525311.tif 000004
【図３】
2019525311.tif 000005
【図４−１】
2019525311.tif 000006
【図４−２】
2019525311.tif 000007
【図５】
2019525311.tif 000008
【図６】
2019525311.tif 000009
【図７】
2019525311.tif 000010
【国際調査報告】
2019525311.tif 000011
2019525311.tif 000012
2019525311.tif 000013