(57)【特許請求の範囲】
【請求項１】
仮想ストレージ移行方法であって、
前記仮想ストレージ移行方法は、
データ移行処理を開始して、移行されるべき仮想ディスク内のデータブロックを移行元ストレージデバイスから移行先ストレージデバイスにコピーするステップと、
前記データ移行処理の間、仮想マシンフロントエンド入力/出力(I/O)読出しリクエストが受信されると前記移行元ストレージデバイスから前記仮想マシンフロントエンド入力/出力(I/O)読出しリクエストに対応するデータを直接読み出して、仮想マシンフロントエンドI/O書込みリクエストが受信されると前記仮想マシンフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されているかどうかを決定して、前記仮想マシンフロントエンドI/O書込みリクエストに対応する前記移行データブロックが移行されている場合は前記移行データブロックの前記移行完了後に前記仮想マシンフロントエンドI/O書込みリクエストに対応する書込み操作を実行して、前記仮想マシンフロントエンドI/O書込みリクエストに対応する前記移行データブロックが移行されていない場合は前記仮想マシンフロントエンドI/O書込みリクエストに対応する前記書込み操作を実行するステップとを備え、
前記仮想マシンフロントエンドI/O書込みリクエストに対応する前記書込み操作を実行するステップは、
前記仮想マシンフロントエンドI/O書込みリクエストに対応する前記移行データブロックが移行されていないことをビットマップテーブルに従って問い合わせられ、また前記仮想マシンフロントエンドI/O書込みリクエスト内で搬送された新しい書込みリクエストデータブロックのサイズが前記移行データブロックのサイズよりも小さい場合、前記移行元ストレージデバイスから前記移行先ストレージデバイスに前記移行データブロックをコピーして、前記新しい書込みリクエストデータブロックを前記移行元ストレージデバイスおよび前記移行先ストレージデバイスに書き込み、チャンクに対応する前記移行データブロックが移行されたことを示すために前記ビットマップテーブル内の前記移行データブロックに対応する前記チャンクを設定するステップを含み、
前記仮想ストレージ移行方法はさらに、
移行されるべき前記仮想ディスク内の全てのデータブロックが前記移行先ストレージデバイスにコピーされた後に前記データ移行処理を停止して、仮想マシンマネージャによって管理された前記仮想ディスクを前記移行元ストレージデバイスから前記移行先ストレージデバイスに切り替えるステップとを備えることを特徴とする、仮想ストレージ移行方法。
【請求項２】
前記データ移行処理を開始して、移行されるべき前記仮想ディスク内の前記データブロックを前記移行元ストレージデバイスから前記移行先ストレージデバイスにコピーする前記ステップが、
移行されるべき前記仮想ディスク内の前記データブロックの前記ビットマップテーブルをチャンク単位で初期化するステップであって、前記チャンクのサイズが移行されるべき前記仮想ディスクのサイズよりも小さく、かつ、前記移行されるべき仮想ディスクのサイズに従って設定されるステップと、
移行のために前記ビットマップテーブルから設定されていないチャンクに対応する前記データブロックを連続的に選択するステップと、
前記設定されていないチャンクに対応する前記データブロックが前記移行元ストレージデバイスから前記移行先ストレージデバイスにコピーされると、前記チャンクに対応する前記データブロックが移行されたことを示すために前記ビットマップテーブル内の前記設定されていないチャンクを設定するステップとを備えることを特徴とする、請求項1に記載の方法。
【請求項３】
前記データ移行処理において、前記仮想マシンフロントエンドI/O書込みリクエストが受信されて、前記仮想マシンフロントエンドI/O書込みリクエストに対応する前記移行データブロックが移行されていないと決定されると、前記仮想マシンフロントエンドI/O書込みリクエストに対応する前記書込み操作を実行する前記ステップがさらに、
前記仮想マシンフロントエンドI/O書込みリクエストに対応する前記移行データブロックが移行されたことを前記ビットマップテーブルに従って問い合わせられると、前記仮想マシンフロントエンドI/O書込みリクエスト内で搬送された新しい書込みリクエストデータブロックを前記移行元ストレージデバイスおよび前記移行先ストレージデバイスに直接書き込むステップと、
前記仮想マシンフロントエンドI/O書込みリクエストに対応する前記移行データブロックが移行されていないことを前記ビットマップテーブルに従って問い合わせられ、また前記仮想マシンフロントエンドI/O書込みリクエスト内で搬送された前記新しい書込みリクエストデータブロックの前記サイズが前記移行データブロックの前記サイズと等しい場合、前記新しい書込みリクエストデータブロックを前記移行元ストレージデバイスおよび前記移行先ストレージデバイスに直接書き込んで、前記チャンクに対応する前記移行データブロックが移行されたことを示すために前記ビットマップテーブル内の前記移行データブロックに対応する前記チャンクを設定するステップとを備えることを特徴とする、請求項2に記載の方法。
【請求項４】
前記データ移行処理を開始する前に、
前記移行先ストレージデバイス内のストレージ領域を割り当てて、仮想マシン構成ファイルを前記移行先ストレージデバイスにコピーして、データ移行フラグを設定するステップであって、前記データ移行フラグが、移行されるべき前記仮想ディスク内のデータが現在移行されていることを識別するために使用されるステップをさらに備えることを特徴とする、請求項1から3のいずれか一項に記載の方法。
【請求項５】
前記データ移行処理を開始する前記ステップの後に、
前記データ移行フラグを消去して、前記移行元ストレージデバイス内の前記仮想ディスクに対応する仮想ディスクイメージを削除するステップをさらに備えることを特徴とする、請求項4に記載の方法。
【請求項６】
仮想マシンフロントエンドI/Oアクセスリクエストを優先的に処理するステップであって、前記フロントエンドI/Oアクセスリクエストが前記仮想マシンフロントエンドI/O読出しリクエストと前記仮想マシンフロントエンドI/O書込みリクエストとを備えるステップと、前記仮想マシンがアイドル状態の場合は優先順位の低いデータ移行スレッドを採用することによってデータ移行を実行するステップとをさらに備えることを特徴とする、請求項1から5のいずれか一項に記載の方法。
【請求項７】
データ移行を開始して、移行されるべき仮想ディスク内のデータブロックを移行元ストレージデバイスから移行先ストレージデバイスにコピーするように構成された移行モジュールと、
データ移行処理の間、仮想マシンフロントエンド入力/出力(I/O)読出しリクエストが受信されると前記移行元ストレージデバイスから前記仮想マシンフロントエンド入力/出力(I/O)読出しリクエストに対応するデータを直接読み出して、前記仮想マシンフロントエンドI/O書込みリクエストが受信されると仮想マシンフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されているかどうかを決定して、前記仮想マシンフロントエンドI/O書込みリクエストに対応する前記移行データブロックが移行されている場合は、前記移行データブロックの前記移行完了後に前記仮想マシンフロントエンドI/O書込みリクエストに対応する書込み操作を実行して、前記仮想マシンフロントエンドI/O書込みリクエストに対応する前記移行データブロックが移行されていない場合は、前記仮想マシンフロントエンドI/O書込みリクエストに対応する前記書込み操作を実行するように構成されたリクエスト処理モジュールと、
移行されるべき前記仮想ディスク内の全てのデータブロックが前記移行先ストレージデバイスにコピーされた後に前記データ移行を停止して、仮想マシンマネージャによって管理された前記仮想ディスクを前記移行元ストレージデバイスから前記移行先ストレージデバイスに切り替えるように構成されたスイッチモジュールとを含み、
前記リクエスト処理モジュールは、
前記データ移行処理の間、仮想マシンフロントエンドI/O書込みリクエストが受信されると前記仮想マシンフロントエンドI/O書込みリクエストに対応する前記移行データブロックが移行されているかどうかを決定するように構成された決定ユニットと、
前記決定ユニットの前記決定結果が前記仮想マシンフロントエンドI/O書込みリクエストに対応する前記移行データブロックが移行されていないことを示す場合、ビットマップテーブルに従って前記仮想マシンフロントエンドI/O書込みリクエストに対応する前記書込み操作を実行するように構成された実行ユニットとを備え、
前記実行ユニットは、
前記仮想マシンフロントエンドI/O書込みリクエストに対応する前記移行データブロックが移行されていないことを前記ビットマップテーブルに従って問い合わせられ、また前記仮想マシンフロントエンドI/O書込みリクエスト内で搬送された前記新しい書込みリクエストデータブロックのサイズが前記移行データブロックのサイズよりも小さい場合、前記移行元ストレージデバイスから前記移行先ストレージデバイスに前記移行データブロックをコピーして、前記新しい書込みリクエストデータブロックを前記移行元ストレージデバイスおよび前記移行先ストレージデバイスに書き込み、チャンクに対応する前記移行データブロックが移行されたことを示すために前記ビットマップテーブル内の前記移行データブロックに対応する前記チャンクを設定するように構成された第2実行サブユニットと、
を備えることを特徴とする、仮想マシンモニタ。
【請求項８】
前記移行モジュールが、
移行されるべき前記仮想ディスク内のデータブロックの前記ビットマップテーブルをチャンク単位で初期化し、前記チャンクのサイズが移行されるべき前記仮想ディスクのサイズよりも小さく、かつ、前記移行されるべき仮想ディスクのサイズに従って設定されるように構成されている初期化ユニットと、
移行のために前記ビットマップテーブルから設定されていないチャンクに対応するデータブロックを連続的に選択するように構成された移行ユニットと、
前記設定されていないチャンクに対応する前記データブロックが前記移行元ストレージデバイスから前記移行先ストレージデバイスにコピーされると、前記チャンクに対応する前記データブロックが移行されたことを示すために前記ビットマップテーブル内の前記設定されていないチャンクを設定するように構成された設定ユニットとを備えることを特徴とする、請求項7に記載の仮想マシンモニタ。
【請求項９】
前記リクエスト処理モジュールがさらに、
前記データ移行処理の間、仮想マシンフロントエンドI/O読出しリクエストが受信されると前記移行元ストレージデバイスから前記仮想マシンフロントエンドI/O読出しリクエストに対応するデータを直接読み出すように構成された読出しリクエスト処理ユニットと、
前記決定ユニットの決定結果が前記仮想マシンフロントエンドI/O書込みスリクエストに対応する前記移行データブロックが移行されていることを示す場合、前記データブロックの前記移行完了後に、前記仮想マシンフロントエンドI/O書込みリクエストに対応する書込み操作を実行するように構成されたウェイティングユニットとを備え、
前記実行ユニットがさらに、
前記仮想マシンフロントエンドI/O書込みリクエストに対応する前記移行データブロックが移行されたことを前記ビットマップテーブルに従って問い合わせられると、前記仮想マシンフロントエンドI/O書込みリクエスト内で搬送された新しい書込みリクエストデータブロックを前記移行元ストレージデバイスおよび前記移行先ストレージデバイスに直接書き込むように構成された第1実行サブユニットと、
前記仮想マシンフロントエンドI/O書込みリクエストに対応する前記移行データブロックが移行されていないことを前記ビットマップテーブルに従って問い合わせられ、また前記仮想マシンフロントエンドI/O書込みリクエスト内で搬送された前記新しい書込みリクエストデータブロックの前記サイズが前記移行データブロックの前記サイズと等しい場合、前記新しい書込みリクエストデータブロックを前記移行元ストレージデバイスおよび前記移行先ストレージデバイスに直接書き込んで、前記チャンクに対応する前記移行データブロックが移行されたことを示すために前記ビットマップテーブル内の前記移行データブロックに対応する前記チャンクを設定するように構成された第3実行サブユニットとを備えることを特徴とする、請求項8に記載の仮想マシンモニタ。
【請求項１０】
データ移行スレッドが開始される前に前記移行先ストレージデバイス内のストレージ領域を割り当てて、仮想マシン構成ファイルを前記移行先ストレージデバイスにコピーして、データ移行フラグを設定するように構成された割当てモジュールであって、前記データ移行フラグが、データが現在移行されていることを識別するために使用される割当てモジュールをさらに備えることを特徴とする、請求項7から9のいずれか一項に記載の仮想マシンモニタ。
【請求項１１】
前記データ移行が停止された後に前記データ移行フラグを消去して、前記移行元ストレージデバイス内の前記仮想ディスクに対応する仮想ディスクイメージを削除するように構成された削除モジュールをさらに備えることを特徴とする、請求項10に記載の仮想マシンモニタ。
【請求項１２】
仮想マシンフロントエンドI/Oアクセスリクエストを優先的に処理するように構成された優先処理モジュールであって、前記I/Oアクセスリクエストが前記仮想マシンフロントエンドI/O読出しリクエストと前記仮想マシンフロントエンドI/O書込みリクエストとを備え、前記仮想マシンがアイドル状態の場合は優先順位の低いデータ移行スレッドを採用することによってデータ移行を実行するように構成された優先処理モジュールをさらに備えることを特徴とする、請求項7から11のいずれか一項に記載の仮想マシンモニタ。
【請求項１３】
請求項7から12のいずれか一項に記載の少なくとも1つの仮想マシンと、移行元ストレージデバイスと、移行先ストレージデバイスと、仮想マシンモニタとを備えることを特徴とする、仮想ストレージ移行システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は通信技術に関し、具体的には仮想ストレージ移行方法、仮想ストレージ移行システム、および仮想マシンモニタに関する。
【０００２】
本出願は、2010年11月29日に中国専利局に出願された中国特許出願第201010578913.3号「VIRTUAL STORAGE MIGRATION METHOD, VIRTUAL STORAGE MIGRAGION SYSTEM AND VIRTUAL MACHINE MONITOR」の優先権を主張し、その内容全体を参照により本明細書に組み込む。
【背景技術】
【０００３】
仮想化技術は、下位層のハードウェアデバイスを上位層のオペレーティングシステム(OS)およびアプリケーションから分離するためのデカップリング方法である。仮想化技術は、現在人気のクラウドコンピューティングプラットフォームの下位層をサポートする重要な技術のうちの1つとして、物理的デバイスのリソース利用効率を著しく改良することができる。従来の物理的マシンと比較して、仮想マシン(VM)はより良い分離およびカプセル化を有し、VM全体の情報を仮想ディスクイメージ(VDI)ファイル内に保存して、VMのスナップショットおよびバックアップを容易にすることができる。仮想ディスク(VD)は、VMが使用するために仮想マシンモニタ(VMM)によって提供される仮想ストレージデバイスである。VDに対応する物理的ストレージ領域は、ホストのローカルストレージシステムでもよく、データセンター内のネットワークストレージシステムでもよい。ホストに接続された物理的ストレージ領域が不十分な場合、またはストレージシステムにストレージデバイスが追加されるか、ストレージシステムからストレージデバイスが削除される場合、データセンター内のストレージリソースの負荷バランシングを実行するためにVDは再構成および再割当てされる必要があり、すなわち仮想ストレージ移行が実行される。仮想ストレージ移行はオフライン移行方法およびオンライン移行方法を含むことができ、仮想ストレージオンライン移行方法はVMのフロントエンドアプリケーションを中断せずに使用できる。
【０００４】
従来技術では、仮想ストレージオンライン移行方法は、主にメモリオンライン移行プレコピー方法およびストレージオンライン移行ポストコピー方法を含む。第1の方法では、VDスナップショットを確立することによって、読出し専用の親ディスクおよび変更されたデータを記録するための子ディスクが生成される。親ディスクのデータがコピーされた後、VMを一時停止する必要があり、その後変更されたデータを記録するための子ディスク、および移行先ストレージデバイス内の親ディスクが結合される。第2の方法では、プレコピーおよび周期的反復コピーを結合することによって、全てのストレージデータがまず宛先ホストに送信され、前記送信処理でストレージアップデートブロックが記録されてラベル付けされ、ストレージアップデートブロックが宛先ホストに周期的に送信される。周期的に送信するステップは、プリセット条件が満たされ、次いでVMが一時停止し、残りのストレージアップデートブロックがコピーされて同期されるまで繰り返される。
【０００５】
しかし、従来技術の第1の方法では、変更されたデータを記録するための子ディスクと移行先ストレージデバイス内の親ディスクとを結合する間、VMを一時停止する必要がある。結合されたデータ量が大きいか、ネットワーク状態が良くない場合、VMの一時停止によってサービス中断またはエラーが生じる場合がある。従来技術の第2の方法はVMの一時停止時間をある程度減らすことができるが、移行処理においてVMの書込みリクエストが多すぎる場合、より多くのデータコピーおよび周期的反復がトリガされる。VMの読出しリクエストのアクセスがない場合は、対応するデータが移行元ストレージデバイスから移行先ストレージデバイスにコピーされるのを待つ必要があり、その結果、読出し応答の大幅な遅延が生じ、ストレージ移行時間が長引き、したがってVMの通常の入力/出力(I/O)アクセス性能に影響が出てしまう。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の実施形態は、VMの一時停止によってサービス中断またはエラーが生じ、またストレージ移行(migration)時間が過度に長いためにVMのアクセス性能が低下してしまう従来技術のデメリットを回避するために使用される、仮想ストレージ移行方法、仮想ストレージ移行システム、およびVMMを提供し、それによって、仮想ディスクの移行処理の間にVMのI/Oアクセスリクエストを同時に処理できるようになり、移行処理全体がVMの一時停止を必要としなくなり、したがってストレージ移行時間が大幅に減少する。
【課題を解決するための手段】
【０００７】
本発明の実施形態は、データ移行を開始して、移行されるべき仮想ディスク内のデータブロックを移行元ストレージデバイス(source storage device)から移行先ストレージデバイス(destination storage device)にコピーするステップと、データ移行処理の間、VMフロントエンドI/O読出しリクエストが受信されると移行元ストレージデバイスからVMフロントエンドI/O読出しリクエストに対応するデータを直接読み出して、VMフロントエンドI/O書込みリクエストが受信されるとVMフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されているかどうかを決定して、VMフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されている場合は移行データブロックの移行完了後にVMフロントエンドI/O書込みリクエストに対応する書込み操作を実行して、VMフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されていない場合はVMフロントエンドI/O書込みリクエストに対応する書込み操作を実行するステップと、移行されるべき仮想ディスク内の全てのデータブロックが移行先ストレージデバイスにコピーされた後にデータ移行を停止して、VMマネージャによって管理された仮想ディスクを移行元ストレージデバイスから移行先ストレージデバイスに切り替えるステップとを含む、仮想ストレージ移行方法を提供する。
【０００８】
本発明の実施形態は、データ移行を開始して、移行されるべき仮想ディスク内のデータブロックを移行元ストレージデバイスから移行先ストレージデバイスにコピーするように構成された移行モジュールと、データ移行処理の間、VMフロントエンドI/O読出しリクエストが受信されると移行元ストレージデバイスからVMフロントエンドI/O読出しリクエストに対応するデータを直接読み出して、VMフロントエンドI/O書込みリクエストが受信されるとVMフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されているかどうかを決定して、VMフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されている場合は移行データブロックの移行完了後にVMフロントエンドI/O書込みリクエストに対応する書込み操作を実行して、VMフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されていない場合はVMフロントエンドI/O書込みリクエストに対応する書込み操作を実行するように構成されたリクエスト処理モジュールと、移行されるべき仮想ディスク内の全てのデータブロックが移行先ストレージデバイスにコピーされた後にデータ移行を停止して、VMマネージャによって管理された仮想ディスクを移行元ストレージデバイスから移行先ストレージデバイスに切り替えるように構成されたスイッチモジュールとを含むVMMをさらに提供する。
【０００９】
本発明の実施形態は、少なくとも1つのVMと、移行元ストレージデバイスと、移行先ストレージデバイスと、VMMとを含む仮想ストレージ移行システムを提供する。
【００１０】
本発明の実施形態による仮想ストレージ移行方法、仮想ストレージ移行システム、およびVMMでは、VMMがデータ移行スレッドを開始し、移行されるべき仮想ディスク内のデータブロックが移行元ストレージデバイスから移行先ストレージデバイスにコピーされる。データ移行処理の間、現在のデータ移行状況に従って受信したVMフロントエンドI/Oアクセスリクエストに対応する処理が実行され、すなわち、VMフロントエンドI/O読出しリクエストが受信されるとVMフロントエンドI/O読出しリクエストに対応するデータが直接読み出され、VMフロントエンドI/O書込みリクエストが受信されると、VMフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されているかどうかがまず決定される。VMフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されている場合は移行完了後に書込み操作が実行される。VMフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されていない場合は、書込み操作が直接実行される。仮想ディスクが移行元ストレージデバイスから移行先ストレージデバイスに移行された後、VMによって使用されるストレージデバイスが移行元ストレージデバイスから移行先ストレージデバイスに切り替えられる。したがって、上位層のOSおよびVM内で実行しているアプリケーションにとって処理全体が透過的である。さらに、データ移行処理の間にVMフロントエンドI/Oアクセスリクエストが同時に処理されるので、それぞれのリクエストにおいて変更されたデータを記録するための追加の子ディスクは不要であり、変更されたデータにアップデート処理を別々に実行するためのVMの一時停止も不要である。したがって、この実施形態では、VMの一時停止によって生じるサービス中断またはエラーが回避される。さらに、従来技術のストレージオンライン移行ポストコピー方法と比較して、データブロックの変更された部分について周期的反復コピーが不要なので、移行データ量が大幅に減少し、移行時間が短縮され、それによってVMのアクセス性能が改良される。
【００１１】
本発明の実施形態による、または従来技術における技術的ソリューションをより明確に説明するために、実施形態または従来技術の説明に必要な添付の図面を以下で簡単に紹介する。以下の記述における添付の図面は本発明の実施形態のうちのいくつかを示しており、当業者は創造的努力なしに添付の図面による他の図面を得られることは明らかである。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施形態1による仮想ストレージ移行方法の流れ図である。
【図２】本発明の実施形態1による仮想ストレージ移行方法におけるネットワークアーキテクチャの概略図である。
【図３】本発明の実施形態2による仮想ストレージ移行方法におけるVMデータ移行処理の流れ図である。
【図４Ａ】本発明の実施形態2による仮想ストレージ移行方法におけるI/O処理プロセスの流れ図である。
【図４Ｂ】本発明の実施形態2による仮想ストレージ移行方法におけるI/O処理プロセスの流れ図である。
【図５】本発明の実施形態2による仮想ストレージ移行方法におけるデータ移行ウインドウの概略図である。
【図６】本発明の実施形態1によるVMMの概略的構造図である。
【図７】本発明の実施形態2によるVMMの概略的構造図である。
【発明を実施するための形態】
【００１３】
本発明の実施形態の目的、技術的ソリューション、および利点をより明確にするために、以下で添付の図面を参照して本発明の実施形態における技術的ソリューションを明確かつ完全に説明する。説明する実施形態は、本発明の実施形態の全てではなく一部にすぎないことは明らかである。本発明の実施形態に基づいて、当業者によって創造的努力なしに得られる他の全ての実施形態は、本発明の保護範囲内であるものとする。
【００１４】
図1は、本発明の実施形態1による仮想ストレージ移行方法の流れ図である。図1に示されるように、この実施形態は以下のステップを含む仮想ストレージ移行方法を提供する。
【００１５】
ステップ101:VMMがデータ移行を開始し、移行されるべき仮想ディスク内のデータブロックを移行元ストレージデバイスから移行先ストレージデバイスにコピーする。
【００１６】
図2は、本発明の実施形態1による仮想ストレージ移行方法におけるネットワークアーキテクチャの概略図である。図2に示されるように、VMMはOSとハードウェアとの間の管理層であり、中央処理装置(CPU)を含む下位層のハードウェアリソースを直接管理でき、メモリおよびディスクが下位層のハードウェアとは別のVMを確立し、上位層のOSおよびアプリケーションがVM内で実行してVMの全てのI/Oアクセスリクエストを監視する。図2から、ネットワークは複数のVMを含むことができ、1つのVM(すなわち、図2の最左端の第1のVM)は特権ドメイン/ドライバドメイン(privilege/driver domain)内のVMであって、VMMがI/O機能を完了するのを助けるように構成されており、他のVM内で実行しているOSおよびアプリケーションは特権ドメイン/ドライバドメイン内のVM内のネイティブデバイスドライバ(native device driver)を介して下位層のストレージシステムへのアクセスを完了することがわかるだろう。すなわち、他のVMは、他のVMのI/Oアクセスリクエストを特権ドメイン/ドライバドメイン内のVMに転送することができ、次いで特権ドメイン/ドライバドメイン内のVMが、I/Oアクセスリクエストに応答して物理的ディスクへのアクセスを実行するためにVMMとデータ交換を実行する。本発明の実施形態では、VMMが仮想ストレージ移行を実行するためにデータ移行処理を開始し、データ移行処理を実行する間、VMMは移行されるべき仮想ディスク内のデータブロックを移行元ストレージデバイスから移行先ストレージデバイスにコピーする。特に、このステップにおける仮想ストレージ移行処理はストレージ移行スレッドを開始することによって完了でき、後続の実施形態における処理はこの処理に類似しているのでこれ以上説明しない。
【００１７】
ステップ102:データ移行処理の間、VMフロントエンドI/O読出しリクエストが受信されるとVMMは移行元ストレージデバイスからVMフロントエンドI/O読出しリクエストに対応するデータを直接読み出して、VMフロントエンドI/O書込みリクエストが受信されるとVMMはVMフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されているかどうかを決定して、VMフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されている場合は、VMMは移行データブロックの移行完了後にVMフロントエンドI/O書込みリクエストに対応する書込み操作を実行して、VMフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されていない場合は、VMMはVMフロントエンドI/O書込みリクエストに対応する書込み操作を実行する。
【００１８】
VMMがデータ移行を実行するためにデータ移行処理を開始する処理において、VMMはさらにVMによって送信されたVMフロントエンドI/Oアクセスリクエストを同時に受信して、受信したVMフロントエンドI/Oアクセスリクエストを現在のデータ移行状況に従って処理し、すなわち実行のためにI/Oリクエスト宛先変更処理がデータ移行に統合される。VMフロントエンドI/Oアクセスリクエストが仮想ディスクにアクセスすると、I/Oアクセスリクエストおよびデータ移行の間の対応するリクエストがリクエストキュー内で配列され、VMMはデータ移行処理の間にリクエストキューから異なるリクエストを一定のポリシーに従ってリアルタイムに取得して、異なるリクエストの対応する処理を実行し、すなわち、実際の状況に従ってキュー内の異なるI/Oリクエストについて異なる処理優先順位を設定する。移行処理において変更されたデータを記録するために追加の子ディスク領域が必要であり、変更されたデータに対応する処理を実行するためにデータ移行後にVMが一時停止される従来技術における第1の方法と比較すると、この実施形態ではデータ移行が実行される際にVMフロントエンドI/Oアクセスリクエストが同時に処理されるので、すなわちデータ移行処理とVMフロントエンドI/Oアクセスリクエストの処理プロセスとが相互に独立しているので、相互に影響を及ぼさない。したがって、VMおよびVM内で実行しているアプリケーションにとってデータ移行処理全体が透過的である。
【００１９】
特に、このステップでは、データ移行処理の間、VMMはVMによって送信されたVMフロントエンドI/Oアクセスリクエストを受信する。VMフロントエンドI/Oアクセスリクエストが読出しリクエストの場合、VMMは読出しリクエストに対応するデータブロックが移行されたか、あるいは移行されているかどうかを決定する必要がなく、VMMは読出しリクエストに従って読出しリクエストに対応するデータを移行元ストレージデバイスから直接読み出し、手順が終了する。この段階では、読出しリクエストの実行およびデータ移行処理は同時であり、相互に影響を及ぼさない。VMフロントエンドI/Oアクセスリクエストが書込みリクエストの場合、VMMは書込みリクエストに対応する移行データブロックが移行されているかどうかを決定する、すなわち書込みリクエストによって要求され、仮想ディスクに書き込まれるべき、移行されるべき仮想ディスク内の移行データブロックが移行されているどうかを決定する必要がある。VMMによって受信された書込みリクエストに対応する移行データブロックが移行されている場合は、VMMは書込みリクエストに対応する書込み操作を実行しないが、移行データブロックの移行完了後に対応する書込み操作を実行する。VMMによって受信された書込みリクエストに対応する移行データブロックが移行されていない場合、VMMは移行データブロックの移行完了を待たずに書込みリクエストに対応する書込み操作を直接実行する。
【００２０】
ステップ103:移行されるべき仮想ディスク内の全てのデータブロックが移行先ストレージデバイスにコピーされた後、VMMはデータ移行を停止して、VMマネージャによって管理された仮想ディスクを移行元ストレージデバイスから移行先ストレージデバイスに切り替える。
【００２１】
移行されるべき仮想ディスク内の全てのデータブロックが移行元ストレージデバイスから移行先ストレージデバイスにコピーされた後、すなわち、データ移行処理全体が完了した後、VMMは以前開始したデータ移行処理を停止して、VMマネージャによって管理された仮想ディスクを以前に設定した移行元ストレージデバイスから移行先ストレージデバイスに切り替える。
【００２２】
この実施形態は、VMMがデータ移行処理を開始して、移行されるべき仮想ディスク内のデータブロックが移行元ストレージデバイスから移行先ストレージデバイスにコピーされて、データ移行処理の間、現在のデータ移行状況に従って受信したVMフロントエンドI/Oアクセスリクエストに対応する処理が実行される、仮想ストレージ移行方法を提供する。すなわち、VMフロントエンドI/O読出しリクエストが受信されるとVMフロントエンドI/O読出しリクエストに対応するデータが直接読み出され、VMフロントエンドI/O書込みリクエストが受信されると書込みリクエストに対応する移行データブロックが移行されているかどうかがまず決定される。VMフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されている場合は、VMMは移行完了後に書込み操作を実行する。VMフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されていない場合は、VMMは書込み操作を直接実行する。仮想ディスクが移行元ストレージデバイスから移行先ストレージデバイスにコピーされた後、VMによって使用されるストレージデバイスが移行元ストレージデバイスから移行先ストレージデバイスに切り替えられる。したがって、上位層のOSおよびVM内で実行しているアプリケーションにとって処理全体が透過的である。さらに、データ移行の間にVMフロントエンドI/Oアクセスリクエストが同時に処理されるので、それぞれのリクエストにおいて変更されたデータを記録するための追加の子ディスクは不要であり、変更されたデータにアップデート処理を別々に実行するためのVMの一時停止も不要である。したがって、この実施形態では、VMの一時停止によって生じるサービス中断またはエラーが回避される。さらに、従来技術のストレージオンライン移行ポストコピー方法と比較して、データブロックの変更された部分について周期的反復コピーが不要なので、移行データ量が大幅に減少し、移行時間が短縮され、それによってVMのアクセス性能が改良される。
【００２３】
図3は、本発明の実施形態2による仮想ストレージ移行方法の流れ図である。図3に示されるように、この実施形態は以下のステップを含む仮想ストレージ移行方法を提供する。
【００２４】
ステップ301:VMMは移行先ストレージデバイス内のストレージ領域を割り当てて、VM構成ファイルを移行先ストレージデバイスにコピーする。
【００２５】
この実施形態における移行元ストレージデバイスおよび移行先ストレージデバイスはデータ移行の方向に従って設定され、移行元ストレージデバイスはデータがもともと格納されている場所であり、移行先ストレージデバイスはデータ移行後にデータが格納される場所であり、データ移行処理は、データが移行元ストレージデバイスから移行先ストレージデバイスに移行される処理である。図2を例にとると、図2の最左下のストレージデバイスが移行元ストレージデバイスであり、図2の最右下のストレージデバイスが移行先ストレージデバイスである。データ移行が実行される前に、VMMは、移行されるべき仮想ディスク内のデータブロックおよび移行元ストレージデバイス内のVM構成ファイルを格納するために、まず移行先ストレージデバイス内のストレージ領域を割り当てる。このステップを実行する間、VMMはまず移行先ストレージデバイスに接続され、移行元ストレージデバイスと移行先ストレージデバイスとの間のデータチャネルを確立する。次に、VMMは移行元ストレージデバイス内のVM構成ファイルを移行先ストレージデバイスにコピーして、移行元ストレージデバイスと移行先ストレージデバイスがそれぞれVM構成ファイルのコピーを格納するようにする。
【００２６】
ステップ302:VMMはデータ移行フラグを設定して、データ移行処理を開始する。
【００２７】
データ移行処理の準備が完了した後、VMMはVMM自体の中にデータ移行フラグを設定し、同時に移行されるべきVD内のデータブロックを移行するためにデータ移行処理を開始して、データブロックを移行元ストレージデバイスから移行先ストレージデバイスにコピーできるようにする。データ移行フラグは、データブロックが現在データ移行処理中であり、データ移行処理が現在実行状態であることを識別するために使用できる。このステップでは、すなわちVMMによってデータ移行処理を開始するステップでは、VMがアイドル状態の場合、VMMはデータ移行処理を再開する。この実施形態では、VMフロントエンドアプリケーションのI/O実行への仮想ストレージ移行の影響を軽減するために、この実施形態は優先順位の低いデータ移行処理を採用し、すなわち、VMMは優先的にVMのフロントエンドアプリケーションのフロントエンドI/Oアクセスリクエストを供給し、フロントエンドI/OアクセスリクエストはI/O読出しリクエストおよびI/O書込みリクエストを含むことができる。VMがアイドル状態の場合VMMはデータ移行処理を開始し、すなわちVMMはアイドルI/O帯域幅を利用してVD内のデータをコピーする。
【００２８】
ステップ303:VMMは移行されるべき仮想ディスク内のデータブロックのビットマップテーブルをチャンク単位で(with a chunk as granularity)初期化する。
【００２９】
データ移行処理の実行において、この実施形態では、移行処理がデータコピーを実行するのを助けるために、移行されるべき仮想ディスク内のデータブロックのビットマップテーブルが設定される。特に、この実施形態におけるデータ移行の間、データブロックのビットマップテーブルがまず初期化され、VMMは移行されるべき仮想ディスク内のデータブロックのビットマップテーブルをチャンク単位で初期化でき、チャンクのサイズは移行されるべき仮想ディスクのサイズに従って設定される。この実施形態では、ビットマップテーブルがチャンク単位で初期化され、ビットマップテーブル内のそれぞれのビットは移行されるべき1つのチャンクに対応し、チャンクのサイズはデータ移行が始まる前に移行されるべき仮想ディスクのサイズに従って設定できる。さらに、より大きなチャンクを設定することによってディスクの読出しおよび書込み性能を改良できる。例えば、100ギガバイトのサイズを有する移行されるべき仮想ディスクを例にとると、移行処理で使用されるそれぞれのチャンクが1メガバイトに設定されると、対応するビットマップテーブルのサイズは12.5キロバイトにすぎない。したがって、ビットマップテーブルはこの実施形態におけるデータ移行処理を助けるために使用されること、およびビットマップテーブルが消費するメモリ領域は非常に小さいことがわかる。
【００３０】
ステップ304:VMMは、設定されていないチャンクをビットマップテーブルから連続的に選択し、設定されていないチャンクに対応するデータブロックに移行が実行される。
【００３１】
本発明の実施形態によるデータ移行では、設定されていないチャンクに対応するデータブロックが、移行のためにビットマップテーブルから連続的に選択され、設定されていないチャンクはまだ移行を終了していないチャンクを識別するために使用される。それぞれのデータブロックが移行された後、ビットマップテーブル内のデータブロックに対応するチャンクが設定され、チャンクに対応するデータブロックが移行されたことが識別できるようになる。したがって、ビットマップテーブルから、どのチャンクに対応するデータブロックが移行されたか、およびどのチャンクに対応するデータブロックが移行されていないかがわかるので、それぞれの移行において設定されていないチャンクをビットマップテーブルから連続的に選択できる。この実施形態によるデータ移行では、ビットマップテーブル内の全てのチャンクが設定され、移行されるべき仮想ディスク内のデータブロックが全て移行されたことを示すまで、上記のステップを繰り返し実行できる。
【００３２】
ステップ305:VMMはビットマップテーブルをアップデートする。
【００３３】
1つの移行データブロックの移行完了後、VMMはビットマップテーブルをアップデートし、具体的には、VMMはビットマップテーブル内の移行データブロックに対応するチャンクを設定して、チャンクに対応するデータブロックが移行されたことを示す。
【００３４】
ステップ306:VMMはデータ移行処理が完了したかどうかを決定して、データ移行処理が完了した場合、VMMはステップ307を実行し、データ移行処理が完了していない場合、処理はステップ304に戻る。
【００３５】
ビットマップテーブルをアップデートした後、VMMはデータ移行処理全体が完了したかどうかを決定し、具体的には、ビットマップテーブルに従って、ビットマップテーブル内のデータブロックに対応するチャンクが全て設定されたかどうかを決定する。チャンクが全て設定された場合、移行されるべき仮想ディスク内の全てのデータブロックが移行先ストレージデバイスにコピーされたことを示すので、ステップ307が実行される。ビットマップテーブル内のデータブロックに対応するチャンクがまだ設定されていない場合、処理はステップ304に戻り、移行されるべき仮想ディスク内の全てのデータブロックが移行先ストレージデバイスにコピーされるまで、設定されていないデータブロックが連続的に移行される。
【００３６】
ステップ307:VMMはデータ移行処理を停止して、データ移行フラグを消去する。
【００３７】
移行されるべき仮想ディスク内の全てのデータブロックが移行先ストレージデバイスにコピーされた後、VMMは以前に開始したデータ移行処理を停止して、データ移行フラグを消去し、VMは現在データ移行状態ではないことを示し、後に他のデバイスがVMにアクセスするか他の操作を実行する際に、データ移行フラグを通じてVMが現在データ移行状態ではないことがわかるようにする。
【００３８】
ステップ308:VMMは、VMマネージャによって管理された仮想ディスクを移行元ストレージデバイスから移行先ストレージデバイスに切り替えて、移行元ストレージデバイス内の仮想ディスクに対応するVDIを削除する。
【００３９】
データ移行処理全体が完了した後、VMMは仮想ディスクを移行元ストレージデバイスから移行先ストレージデバイスに直接切り替えて、移行元ストレージデバイス内の仮想ディスクに対応するVDIを削除し、次いでVMの全ての読出しおよび書込みリクエストを移行先ストレージデバイスに送信する。
【００４０】
図4は、本発明の実施形態2による仮想ストレージ移行方法におけるVM  I/O処理プロセスの流れ図である。図3はこの実施形態のVMデータ移行処理におけるステップだけを紹介したが、図4はこの実施形態におけるVM  I/O処理プロセスのステップをさらに具体的に説明する。特に、図3に示されるステップに基づいて、この実施形態による仮想ストレージ移行方法は、以下のステップをさらに含むことができる。
【００４１】
ステップ401:データ移行処理の間、VMMはVMによって送信されたVMフロントエンドI/Oアクセスリクエストを受信する。
【００４２】
この実施形態では、VMMがデータ移行処理を開始した後、データ移行が始まり、データ移行処理の間、VMMはVMによって送信されたVMフロントエンドI/Oアクセスリクエストを受信し、リクエストによってアクセスされるべきデータブロックの情報、すなわちデータブロック情報がVMフロントエンドI/Oアクセスリクエスト内で搬送される。フロントエンドI/Oアクセスリクエストが読出しリクエストの場合、データブロック情報は仮想ディスクから読み出されるべきデータブロックの位置またはフラグ情報を含み、フロントエンドI/Oアクセスリクエストが書込みリクエストの場合、データブロック情報は書込みリクエストによって要求され、仮想ディスクに書き込まれるべきデータブロックの位置またはフラグ情報を含む。VMフロントエンドI/Oアクセスリクエストは、書込みリクエストによって要求され、仮想ディスクに書き込まれるべき新しい書込みリクエストデータブロックも搬送できるので、新しい書込みリクエストデータブロックを対応するデータブロック内に書き込むことができる。
【００４３】
ステップ402:VMMは受信したVMフロントエンドI/Oアクセスリクエストが読出しリクエストかどうかを決定し、受信したVMフロントエンドI/Oアクセスリクエストが読出しリクエストの場合はステップ403が実行され、受信したVMフロントエンドI/Oアクセスリクエストが読出しリクエストではない場合はステップ404が実行される。
【００４４】
このステップは、VMMがVMフロントエンドI/Oアクセスリクエストが読出しリクエストかどうかをまず決定して、次いで異なるリクエストタイプによる後続の異なるステップを実行することを含む。VMMによって受信されたVMフロントエンドI/Oアクセスリクエストが読出しリクエストの場合、移行元ストレージデバイスからVMフロントエンドI/O読出しリクエストに対応するデータを直接読み出すためにステップ403が実行され、手順が終了する。VMMによって受信されたVMフロントエンドI/Oアクセスリクエストが読出しリクエストではなく書込みリクエストの場合、書込みリクエストに対応する情報を決定し続けるためにステップ404が実行される。
【００４５】
ステップ403:VMMが移行元ストレージデバイスからVMフロントエンドI/O読出しリクエストに対応するデータを直接読み出す。
【００４６】
VMMによって受信されたVMフロントエンドI/Oアクセスリクエストが読出しリクエストの場合、読出しリクエストは仮想ディスクからデータを読み出すためのものにすぎず、仮想ディスク内のデータを修正するためのものではないので、データ移行処理の間、移行元ストレージデバイスは移行されるべき仮想ディスク内の全てのデータを常に保存する。したがって、VMによって送信された読出しリクエストを受信した後、VMMは読出しリクエストに対応するデータブロックが移行されたか、あるいは移行されているかどうかを決定する必要がなく、読出しリクエストに対応するデータを移行元ストレージデバイスから直接読み出し、手順が終了する。この段階では、読出しリクエストの実行およびデータ移行処理は同時であり、相互に影響を及ぼさない。
【００４７】
ステップ404:VMMが、書込みリクエストに対応する移行データブロックが移行されているかどうかを決定する。書込みリクエストに対応する移行データブロックが移行されている場合はステップ405が実行される。書込みリクエストに対応する移行データブロックが移行されていない場合、ステップ406が実行される。
【００４８】
VMMによって受信されたVMフロントエンドI/Oアクセスリクエストが書込みリクエストの場合、書込みリクエストの実行は移行されるべき仮想ディスク内の対応するデータブロックを変更するので、VMMは書込みリクエストに対応する移行データブロックが移行されているかどうかを決定する、すなわち、書込みリクエストによって要求され、書き込まれるべき、移行されるべき仮想ディスク内の移行データブロックが移行されているかどうかを決定する必要がある。この実施形態では、書込みリクエストを受信した後、VMMは、書込みリクエストデータブロックをビットマップテーブル内のそれぞれの移行データブロックに整列させるために、まず書込みリクエスト内で搬送された新しい書込みリクエストデータブロックに整列処理を実行して、整列処理を通じて書込みリクエストに対応する移行データブロックを取得できるようにする。書込みリクエストに対応する1つまたは複数の移行データブロックが存在する場合がある。書込みリクエスト内で搬送された新しい書込みリクエストデータブロックの全体的なサイズがユニット移行データブロックのサイズよりも大きく、書込みリクエストが複数の移行データブロックに対応する場合、書込みリクエストはそれぞれの移行データブロックを処理する。書込みリクエスト内で搬送された新しい書込みリクエストの全体的なデータブロックのサイズがユニット移行データブロックのサイズよりも大きい場合、書込みリクエストは複数の移行データブロックに対応する場合があり、すなわち、書込みリクエストは、ある移行データブロックのある部分、およびある移行データブロックに隣接する他の移行データブロックの他の部分に対応する場合がある。後続の実施形態は整列処理後の書込みリクエストを示しており、すなわち書込みリクエストが複数の移行データブロックに対応する場合、複数の新しい書込みリクエストデータブロックを形成するために、書込みリクエスト内で搬送された新しい書込みリクエストの全体的なデータブロックがブロックに分割される。それぞれの新しい書込みリクエストデータブロックは、1つの移行データブロックに対応する。移行データブロックは、移行されるべき仮想ディスク内のデータブロックである。本明細書では、移行データブロックは書込みリクエストによって要求され、書き込まれるべきデータブロックである。具体的には、図5は、本発明の実施形態2による仮想ストレージ移行方法におけるデータ移行ウインドウの概略図である。仮想ストレージオンライン移行処理におけるデータの一貫性を維持する都合上、上記のビットマップテーブル内のチャンクはそれぞれの移行処理における最小データユニットであり、図5の移行ウインドウに具体的に示すことができる。図5を例にとると、データ移行が実行されると、VMMは、移行のためにビットマップテーブル内の設定されていないデータのブロックを連続的に選択し、この段階では移行ウインドウはデータブロックに対応するチャンクに位置する。本明細書では、1つのチャンクは3つの四角形で表されるデータを含み、すなわち、移行ウインドウは3つの四角形上に位置する。データブロックが移行された後、VMMは移行のためにビットマップテーブル内の次の設定されていないデータブロックを連���的に選択する。図5に示されるように、移行ウインドウは繰返し3つの四角形分だけ左に移動でき、ウインドウは連続的に移動して、ビットマップテーブル内の全てのデータブロックが設定されるまでビットマップテーブル内の全ての四角形を横切る。
【００４９】
書込みリクエストに対応する移行データブロックが移行されているかどうかが決定されると、書込みリクエストに対応する移行データブロックが現在の移行ウインドウ内に位置するかどうかを特に決定できる。書込みリクエストに対応する移行データブロックが現在の移行ウインドウ内に位置する場合、それは移行データブロックが移行されていることを示す。実行の都合上、データブロックにロック処理を実行できる。データ移行処理および書込みリクエスト処理が同じデータブロック内にある場合、データブロック上で相互排他的なアクセスを実行するために、まずデータブロックをロックする必要がある。データ移行処理においてまずデータブロックが移行される場合、データ移行処理においてまずデータブロックがロックされる。書込みリクエストもデータブロックを処理する場合、書込み操作を実行するために、書込みリクエストはデータ移行処理におけるデータブロックの移行が完了するまで待つ必要がある。決定後、書込みリクエストに対応する移行データブロックが現在移行されている場合、移行データブロックの移行処理が完了した後、VMMは後続のステップ405を実行して書込みリクエストに対応する書込み操作を実行する。書込みリクエストに対応する移行データブロックが現在移行状態ではない場合、VMMは後続のステップ406を実行して、ビットマップテーブルに従って書込みリクエストに対応する書込み操作を実行する。すなわち、VMMはビットマップテーブルに問い合わせることによって移行データブロックの状態をさらに決定し、次いで決定結果による書込みリクエストに対応する書込み操作を実行する。
【００５０】
ステップ405:移行データブロックの移行完了後、VMMは書込みリクエストに対応する書込み操作を実行する。
【００５１】
VMMによって受信された書込みリクエストに対応する移行データブロックが移行されている場合は、VMMは書込みリクエストに対応する書込み操作を実行せず、移行データブロックの移行を待って、移行データブロックの移行完了後に対応する書込み操作を実行し、すなわち後続のステップ406が実行される。
【００５２】
ステップ406:VMMは、ビットマップテーブルに従って書込みリクエストに対応する移行データブロックが移行されたかどうかを問い合わせる。書込みリクエストに対応する移行データブロックが移行された場合、ステップ407が実行される。書込みリクエストに対応する移行データブロックが移行されていない場合、ステップ408が実行される。
【００５３】
VMMによって受信された書込みリクエストに対応する移行データブロックが現在移行状態ではない場合、VMMは事前設定されたビットマップテーブルに従って書込みリクエストに対応する移行データブロックの状態を問い合わせ、すなわち書込みリクエストに対応する移行データブロックがビットマップテーブル内の移行データブロックに対応するチャンクの設定された状態に従って移行されたかどうかを決定する。ビットマップテーブル内の移行データブロックに対応するチャンクが設定された場合、それは書込みリクエストに対応する移行データブロックが移行されたことを示し、ステップ407が実行されて、VMMが書込みリクエスト内で搬送された新しい書込みリクエストデータブロックを移行元ストレージデバイスおよび移行先ストレージデバイスに直接書き込む。ビットマップテーブル内の移行データブロックに対応するチャンクが設定されていない場合、書込みリクエストに対応する移行データブロックが移行されていない(実際には、データブロックは「移行されている」状態でもないことがステップ404を通じてわかるので、データブロックの実際の状態は、データブロックは移行され始めていない)ことを示し、ステップ408が実行されてデータブロックの状態がさらに決定される。
【００５４】
ステップ407:VMMは、書込みリクエスト内で搬送された新しい書込みリクエストデータブロックを移行元ストレージデバイスおよび移行先ストレージデバイスに直接書き込み、データ移行処理を実行するために戻る。
【００５５】
書込みリクエストに対応する移行データブロックが移行され、移行データブロックが移行元ストレージデバイスおよび移行先ストレージデバイスに格納されると、VMMは、書込みリクエストに対応する書込み操作を実行する際に、書込みリクエスト内で搬送された新しい書込みリクエストデータブロックを移行元ストレージデバイスおよび移行先ストレージデバイスに直接書き込む。本明細書では、新しい書込みリクエストデータブロックは、書込みリクエストによって要求され、対応する移行データブロックに書き込まれるべきデータであり、すなわち、新しい書込みリクエストデータブロックは移行データブロックにアップデートされるべきデータである。このステップで書込み操作を実行した後、VMMはデータ移行処理を実行するために戻る。
【００５６】
ステップ408:VMMは、書込みリクエスト内で搬送された新しい書込みリクエストデータブロックのサイズが移行データブロックのサイズよりも小さいかどうかを決定する。書込みリクエスト内で搬送された新しい書込みリクエストデータブロックのサイズが移行データブロックのサイズよりも小さい場合、ステップ409が実行される。書込みリクエスト内で搬送された新しい書込みリクエストデータブロックのサイズが移行データブロックのサイズよりも小さくない場合、ステップ410が実行される。
【００５７】
書込みリクエストに対応する移行データブロックの移行が開始されない場合、VMMは書込みリクエスト内で搬送された新しい書込みリクエストデータブロックのサイズと対応する移行データブロックのサイズとをさらに比較し、すなわち、書込みリクエストに対応する書込み操作が移行データブロックの全部のブロック内で実行されるかどうかを決定する。新しい書込みリクエストデータブロックのサイズが移行データブロックのサイズよりも小さい場合、VMMは後続のステップ409を実行して、まず移行元ストレージデバイスから移行先ストレージデバイスに移行データブロックをコピーする。新しい書込みリクエストデータブロックのサイズが移行データブロックのサイズとちょうど等しい場合、VMMは後続のステップ410を実行して、書込みリクエスト内で搬送された新しい書込みリクエストデータブロックを移行元ストレージデバイスおよび移行先ストレージデバイスに直接書き込む。
【００５８】
ステップ409:VMMは移行元ストレージデバイスから移行先ストレージデバイスに移行データブロックをコピーして、ステップ410の実行に続く。
【００５９】
新しい書込みリクエストデータブロックのサイズが移行データブロックのサイズよりも小さい、すなわち、書込みリクエストに対応する書込み操作が移行データブロック内のデータの一部に対応するにすぎない場合、VMMはまず移行元ストレージデバイスから移行先ストレージデバイスに移行データブロックをコピーする必要があり、それによって移行元ストレージデバイスおよび移行先ストレージデバイスで移行データブロックのバックアップを実行し、移行データブロックの移行を完了できるようにする。次いで、後続のステップ410が実行される。
【００６０】
ステップ410:VMMは書込みリクエスト内で搬送された新しい書込みリクエストデータブロックを移行元ストレージデバイスおよび移行先ストレージデバイスに書き込み、後続のステップ411を実行する。
【００６１】
書込みリクエストに対応する書込み操作が対応する移行データブロック内のデータの一部に対応するにすぎない場合、VMMはまず移行データブロックをコピーして、次いでステップ410を実行して新しい書込みリクエストデータブロックを移行元ストレージデバイスおよび移行先ストレージデバイスに書き込み、それによって移行データブロックの移行および書込み操作の実行を行う。書込みリクエストに対応する書込み操作が移行データブロックの全部のブロックに対応する場合、VMMは新しい書込みリクエストデータブロックを移行元ストレージデバイスおよび移行先ストレージデバイスに直接書き込み、それによって移行データブロックの移行および書込み操作の実行を行う。この時点で、書込み操作の実行が完了し、移行元ストレージデバイスおよび移行先ストレージデバイスの両方が、データ移行処理全体が終了した後のデータはアップデートせずに、アップデートされた移行データブロックを保存する。
【００６２】
ステップ411:VMMはビットマップテーブル内の移行データブロックに対応するチャンクを設定する。
【００６３】
1つの移行データブロックの移行完了後、VMMはビットマップテーブル内の移行データブロックに対応するチャンクを設定して、チャンクに対応するデータブロックは移行されたことを示す。
【００６４】
この実施形態は仮想ストレージ移行方法を提供する。VMMはデータ移行処理を開始する。データ移行処理の間、VMMは、現在のデータ移行状況に従って受信したVMフロントエンドI/Oアクセスリクエストを宛先変更して、仮想ディスクが移行元ストレージデバイスから移行先ストレージデバイスに移行された後、VMMはVMによって使用されるストレージデバイスを移行元ストレージデバイスから移行先ストレージデバイスに切り替え、この処理において上位層のOSおよびVMのアプリケーションにとって処理全体が透過的である。さらに、データ移行の間にVMフロントエンドI/Oアクセスリクエストが同時に処理されるので、それぞれのリクエストにおいて変更されたデータを記録するための追加の子ディスクは不要であり、変更されたデータにアップデート処理を別々に実行するためのVMの一時停止も不要である。したがって、この実施形態では、VMの一時停止によって生じるサービス中断またはエラーが回避され、遠隔通信および銀行などの重要なアプリケーションのシナリオにおける「ゼロサスペンション(zero suspension)」の高可用性要件が満たされる。さらに、この実施形態では、データブロックの変更された部分について周期的反復コピーが不要なので、仮想ディスク移行処理ではそれぞれのデータブロックが1度だけ転送される。ストレージオンライン移行ポストコピー方法と比較すると、移行データ量が大幅に減少され、移行時間が短縮され、それによってVMのアクセス性能が改良されるため、集中的な書込みリクエストのシナリオに特に適している。さらに、この実施形態のデータ移行処理の間、変更されたデータを記録するための追加のストレージ領域は不要であり、移行元ストレージデバイスに格納されたデータのストレージを変更する必要がないので、VMの読出しおよび書込みは影響を受けず、VMはデータ移行処理の間も依然として良い読出しおよび書込み性能を有する。最後に、この実施形態では優先順位の低いデータ移行処理を採用し、VMMは優先的にVMの通常のI/Oアクセスを供給し、その間、アイドル状態のI/O帯域幅を使用することによってデータ移行を実行するので、VMの通常のサービスには影響が生じない。
【００６５】
従来のブロックレベルストレージシステムの遠隔データコピーまたは同期方法によれば、データ移行はユニットとして全体的なストレージデバイスで実行される。しかし、VM環境では、ストレージデバイスは通常複数の仮想ディスクイメージを含み、ストレージデバイスは仮想ディスクを検知および区別できないので、仮想ディスクを別々に移行することはできない。従来技術と比較すると、この実施形態では、移行されるべき仮想ディスク内のデータブロックのビットマップテーブルがチャンク単位で初期化され、ビットマップテーブルはデータ移行処理を助けるために使用されるので、メモリ領域の消費が大幅に減少する。
【００６６】
本発明の実施形態による方法のステップの全てまたは一部は、プログラム命令関連ハードウェアによって実装できることが、当業者なら理解できるであろう。プログラムはコンピュータ可読ストレージメディアに格納できる。プログラムが実行されると、本発明の実施形態による方法のステップが実行される。ストレージメディアは、読出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、磁気ディスク、または光ディスクなどの、プログラムコードを格納できるどのようなメディアでもよい。
【００６７】
図6は、本発明の実施形態1によるVMMの概略的構造図である。図6に示されるように、この実施形態は実施形態1における方法のステップを特に実行できるVMMを提供するが、ここでは繰り返し説明しない。この実施形態によるVMMは、移行モジュール601、リクエスト処理モジュール602、およびスイッチモジュール603を特に含むことができる。移行モジュール601はデータ移行処理を開始して、移行されるべき仮想ディスク内のデータブロックを移行元ストレージデバイスから移行先ストレージデバイスにコピーするように構成されている。リクエスト処理モジュール602は、データ移行処理の間、VM  I/O読出しリクエストが受信されると移行元ストレージデバイスからVM I/O読出しリクエストに対応するデータを直接読み出して、VMフロントエンドI/O書込みリクエストが受信されるとVMフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されているかどうかを決定して、VMフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されている場合は移行データブロックの移行完了後にVMフロントエンドI/O書込みリクエストに対応する書込み操作を実行して、VMフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されていない場合はVMフロントエンドI/O書込みリクエストに対応する書込み操作を実行するように構成されている。スイッチモジュール603は、移行されるべき仮想ディスク内の全てのデータブロックが移行先ストレージデバイスにコピーされた後にデータ移行を停止して、VMマネージャによって管理された仮想ディスクを移行元ストレージデバイスから移行先ストレージデバイスに切り替えるように構成されている。
【００６８】
図7は、本発明の実施形態2によるVMMの概略的構造図である。図7に示されるように、この実施形態は実施形態1における方法のステップを特に実行できるVMMを提供するが、ここでは繰り返し説明しない。図6に示されたVMMに基づいて、この実施形態によるVMMにおける移行モジュール601は、初期化ユニット611、移行ユニット621、および設定ユニット631を特に含むことができる。初期化ユニット611は移行されるべき仮想ディスク内のデータブロックのビットマップテーブルをチャンク単位で初期化し、チャンクのサイズが移行されるべき仮想ディスクのサイズに従って設定されるように構成されている。移行ユニット621は、移行のためにビットマップテーブルから設定されていないチャンクに対応するデータブロックを連続的に選択するように構成されている。設定ユニット631は、チャンクに対応するデータブロックが移行元ストレージデバイスから移行先ストレージデバイスにコピーされると、ビットマップテーブル内のチャンクを設定するように構成されている。
【００６９】
特に、リクエスト処理モジュール602は、読出しリクエスト処理ユニット612、決定ユニット622、ウェイティングユニット632、および実行ユニット642を特に含むことができる。読出しリクエスト処理ユニット612は、データ移行の間、受信したVMフロントエンドI/Oアクセスリクエストが読出しリクエストの場合、移行元ストレージデバイスから、受信したVMフロントエンドI/Oアクセスリクエストに対応するデータを直接読み出すように構成されている。決定ユニット622は、データ移行処理の間、VMフロントエンドI/O書込みリクエストが受信されるとVMフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されているかどうかを決定するように構成されている。ウェイティングユニット632は、決定ユニット622の決定結果がVMフロントエンドI/O書込みスリクエストに対応する移行データブロックが移行されているという結果である場合、データブロックの移行完了後に、VMフロントエンドI/O書込みリクエストに対応する書込み操作を実行するように構成されている。実行ユニット642は、決定ユニット622の決定結果がVMフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されていないという結果である場合、ビットマップテーブルに従ってVMフロントエンドI/O書込みリクエストに対応する書込み操作を実行するように構成されている。
【００７０】
さらに、実行ユニット642は、第1実行サブユニット6421、第2実行サブユニット6422、および第3実行サブユニット6423を特に含むことができる。第1実行サブユニット6421は、VMフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されたことをビットマップテーブルに従って問い合わせられると、VMフロントエンドI/O書込みリクエスト内で搬送された新しい書込みリクエストデータブロックを移行元ストレージデバイスおよび移行先ストレージデバイスに直接書き込むように構成されている。第2実行サブユニット6422は、VMフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されていないことをビットマップテーブルに従って問い合わせられ、またVMフロントエンドI/O書込みリクエスト内で搬送された新しい書込みリクエストデータブロックのサイズが移行データブロックのサイズよりも小さい場合、移行元ストレージデバイスから移行先ストレージデバイスに移行データブロックをコピーして、新しい書込みリクエストデータブロックを移行元ストレージデバイスおよび移行先ストレージデバイスに書き込み、ビットマップテーブル内の移行データブロックに対応するチャンクを設定するように構成されている。第3実行サブユニット6423は、VMフロントエンドI/O書込みリクエストに対応する移行データブロックが移行されていないことをビットマップテーブルに従って問い合わせられ、またVMフロントエンドI/O書込みリクエスト内で搬送された新しい書込みリクエストデータブロックのサイズが移行データブロックのサイズと等しい場合、新しい書込みリクエストデータブロックを移行元ストレージデバイスおよび移行先ストレージデバイスに直接書き込んで、ビットマップテーブル内の移行データブロックに対応するチャンクを設定するように構成されている。
【００７１】
さらに、この実施形態によるVMMは割当てモジュール604を含むことができる。割当てモジュール604は、データ移行処理が開始される前に移行先ストレージデバイス内のストレージ領域を割り当てて、VM構成ファイルを移行先ストレージデバイスにコピーして、データ移行フラグを設定するように構成されており、データ移行フラグはデータが現在移行されていることを識別するために使用される。
【００７２】
さらに、この実施形態によるVMMは削除モジュール605を含むことができる。削除モジュール605は、データ移行処理が停止された後にデータ移行フラグを消去して、移行元ストレージデバイス内の仮想ディスクに対応する仮想ディスクイメージを削除するように構成されている。
【００７３】
さらに、この実施形態によるVMMは、優先処理モジュール606を含むことができる。優先処理モジュール606は、I/Oアクセスリクエストを優先的に処理し、I/OアクセスリクエストはVMフロントエンドI/O読出しリクエストとVMフロントエンドI/O書込みリクエストとを含み、VMがアイドル状態の場合は優先順位の低いデータ移行スレッドを採用することによってデータ移行を実行するように構成されている。
【００７４】
この実施形態はVMMを提供する。VMMはデータ移行処理を開始して、移行されるべき仮想ディスク内のデータブロックを移行元ストレージデバイスから移行先ストレージデバイスにコピーし、データ移行処理の間、現在のデータ移行状況に従って受信したVMフロントエンドI/Oアクセスリクエストに対応する処理を実行し、すなわち、VMフロントエンドI/O読出しリクエストが受信されるとVMMはVMフロントエンドI/O読出しリクエストに対応するデータを直接読み出し、VMフロントエンドI/O書込みリクエストが受信されると書込みリクエストに対応する移行データブロックが移行されているかどうかをまず決定し、書込みリクエストに対応する移行データブロックが移行されている場合は移行完了後に書込み操作を実行し、書込みリクエストに対応する移行データブロックが移行されていない場合は、VMMは書込み操作を直接実行し、仮想ディスクが移行元ストレージデバイスから移行先ストレージデバイスにコピーされた後、VMによって使用されるストレージデバイスを移行元ストレージデバイスから移行先ストレージデバイスに切り替え、この処理において上位層のOSおよびVMのアプリケーションにとって処理全体が透過的である。さらに、データ移行処理の間にVMフロントエンドI/Oアクセスリクエストが同時に処理されるので、それぞれのリクエストにおいて変更されたデータを記録するための追加の子ディスクは不要であり、変更されたデータにアップデート処理を別々に実行するためのVMの一時停止も不要である。したがって、この実施形態では、VMの一時停止によって生じるサービス中断またはエラーが回避される。さらに、従来技術のストレージオンライン移行ポストコピー方法と比較して、データブロックの変更された部分について周期的反復コピーが不要なので、移行データ量が大幅に減少し、移行時間が短縮され、それによってVMのアクセス性能が改良される。
【００７５】
この実施形態は、少なくとも1つのVMと、移行元ストレージデバイスと、移行先ストレージデバイスと、VMMとを含む仮想ストレージ移行システムを提供する。VMMは、図6に示されるVMMでもよく図7に示されるVMMでもよい。
【００７６】
最後に、前述の実施形態は本発明の技術的ソリューションを説明するために提供されるものであり、本発明を制限することを意図するものではない点に留意されたい。本発明を上述の実施形態を参照して詳細に説明してきたが、対応する技術的ソリューションの本質が修正または置換によって本発明の保護範囲から逸脱しない限り、前述の実施形態に記載された技術的ソリューションに修正が行われてもよく、技術的解決手段におけるいくつかの技術的特徴に同等の置換が行われてもよいことが当業者には理解されよう。
【符号の説明】
【００７７】
601  移行モジュール
602  リクエスト処理モジュール
603  スイッチモジュール
604  割当てモジュール
605  削除モジュール
606  優先処理モジュール
611  初期化ユニット
612  読出しリクエスト処理ユニット
621  移行ユニット
622  決定ユニット
631  設定ユニット
632  ウェイティングユニット
642  実行ユニット
6421  第1実行サブユニット
6422  第2実行サブユニット
6423  第3実行サブユニット
【図１】
0005459811.tif 000002
【図２】
0005459811.tif 000003
【図３】
0005459811.tif 000004
【図４Ａ】
0005459811.tif 000005
【図４Ｂ】
0005459811.tif 000006
【図５】
0005459811.tif 000007
【図６】
0005459811.tif 000008
【図７】
0005459811.tif 000009