(57)【特許請求の範囲】
【請求項１】
複数の仮想ストレージクラスタの制御をコンピュータに実行させる仮想ストレージシステム制御プログラムであって、
仮想ストレージクラスタから、該仮想ストレージクラスタ内の仮想ボリューム情報を収集する仮想ボリューム情報収集ステップと、
前記仮想ボリューム情報収集ステップにより収集された仮想ボリューム情報に基づいて、第１の仮想ストレージクラスタにおける移動元の仮想ボリュームを制御する第１のストレージデバイス制御装置と第２の仮想ストレージクラスタにおける移動先の仮想ボリュームを制御する第２のストレージデバイス制御装置との間にネットワークを介したリンクを設定させるリンク設定ステップと、
前記仮想ボリューム情報収集ステップにより得られた前記仮想ボリューム情報に基づいて、前記移動元の仮想ボリュームと前記移動先の仮想ボリュームへのアクセスを行うアクセス制御ステップと、
前記第１のストレージデバイス制御装置と前記第２のストレージデバイス制御装置に、前記リンクを用いた、前記移動元の仮想ボリュームに格納されたデータの前記移動先の仮想ボリュームへの移動を指示し、前記第１のストレージデバイス制御装置に対して、移動元の仮想ボリュームから移動先の仮想ボリュームへのデータのコピーを行わせ、該コピーの終了後に移動元の仮想ボリュームの識別子を前記移動元の仮想ボリューム及び前記移動先の仮想ボリュームとは異なる識別子に変更させた後、前記第２のストレージデバイス制御装置に対して、移動先の仮想ストレージクラスタに、移動先の仮想ボリュームを割り当てさせ、前記移動先の仮想ボリュームの識別子を前記変更前の移動元の仮想ボリュームの識別子に変更させる仮想ボリューム移動指示ステップと、
前記移動中に、前記移動元の仮想ボリュームに対して前記アクセス制御ステップによるデータの更新があった場合、該データの更新を前記移動先の仮想ボリュームに反映させるデータ反映ステップと、
をコンピュータに実行させる仮想ストレージシステム制御プログラム。
【請求項２】
請求項１に記載の仮想ストレージシステム制御プログラムにおいて、
移動先の仮想ストレージクラスタは、使用するチャンクのサイズの組み合わせが同じ仮想ボリュームが割り当てられ、前記リンク設定ステップは、移動元の仮想ボリュームを制御するストレージデバイス制御装置と移動先の仮想ボリュームを制御するストレージデバイス制御装置の間にリンクを設定させることを特徴とする仮想ストレージシステム制御プログラム。
【請求項３】
複数の仮想ストレージクラスタから成るストレージクラスタ群のボリュームの制御を行う仮想ストレージシステム制御装置であって、
仮想ストレージクラスタに属し、該仮想ストレージクラスタ中のストレージデバイスとネットワークに接続され、該仮想ストレージクラスタ中のストレージデバイスに仮想ボリュームの割り当てを行い、前記仮想ストレージクラスタ内に仮想ボリューム情報を生成し、自仮想ストレージクラスタ中の仮想ボリュームと他仮想ストレージクラスタ中の仮想ボリュームとの間に前記ネットワークを介したリンクを設定し、該リンクに基づいてデータのコピーを行う複数のストレージデバイス制御部と、
前記仮想ストレージクラスタ内に生成された前記仮想ボリューム情報に基づいて、前記移動元の仮想ボリュームと前記移動先の仮想ボリュームへのアクセスを行うアクセス制御部と、
前記ネットワークに接続され、仮想ストレージクラスタにより得られる前記仮想ボリューム情報に基づいて、複数の仮想ストレージクラスタ中の前記ストレージデバイス制御部に仮想ボリューム間の前記リンクを設定させ、前記移動元の仮想ボリュームに格納されたデータの前記移動先の仮想ボリュームへの移動を指示し、前記第１のストレージデバイス制御装置に対して、移動元の仮想ボリュームから移動先の仮想ボリュームへのデータのコピーを行わせ、該コピーの終了後に移動元の仮想ボリュームの識別子を前記移動元の仮想ボリューム及び前記移動先の仮想ボリュームとは異なる識別子に変更させた後、前記第２のストレージデバイス制御装置に対して、移動先の仮想ストレージクラスタに、移動先の仮想ボリュームを割り当てさせ、前記移動先の仮想ボリュームの識別子を前記変更前の移動元の仮想ボリュームの識別子に変更させるマネージメント部と、
前記移動中に、前記移動元の仮想ボリュームに対して前記アクセス制御部によるデータの更新があった場合、該データの更新を前記移動先の仮想ボリュームに反映させるデータ反映部と
を備える仮想ストレージシステム制御装置。
【請求項４】
複数の仮想ストレージクラスタの制御を行う仮想ストレージシステム制御方法であって、
移動先の仮想ストレージクラスタに仮想ボリュームの割り当てを行い、前記仮想ストレージクラスタ内に仮想ボリューム情報を生成するストレージデバイス制御ステップと、
前記ストレージデバイス制御ステップにより得られる前記仮想ボリュームの情報に基づいて、第１の仮想ストレージクラスタにおける移動元の仮想ボリュームを制御するストレージデバイス制御装置と第２の仮想ストレージクラスタにおける移動先の仮想ボリュームを制御するストレージデバイス制御装置との間にネットワークを介したリンクを設定させるリンク設定ステップと、
前記仮想ストレージクラスタ内に生成された前記仮想ボリューム情報に基づいて、前記移動元の仮想ボリュームと前記移動先の仮想ボリュームへのアクセスを行うアクセス制御ステップと、
前記第１のストレージデバイス制御装置と前記第２のストレージデバイス制御装置に、前記リンクを用い、前記移動元の仮想ボリュームに格納されたデータの前記移動先の仮想ボリュームへの移動を指示し、前記第１のストレージデバイス制御装置に対して、移動元の仮想ボリュームから移動先の仮想ボリュームへのデータのコピーを行わせ、該コピーの終了後に移動元の仮想ボリュームの識別子を前記移動元の仮想ボリューム及び前記移動先の仮想ボリュームとは異なる識別子に変更させた後、前記第２のストレージデバイス制御装置に対して、移動先の仮想ストレージクラスタに、移動先の仮想ボリュームを割り当てさせ、前記移動先の仮想ボリュームの識別子を前記変更前の移動元の仮想ボリュームの識別子に変更させる仮想ボリューム移動指示ステップと、
前記移動中に、前記移動元の仮想ボリュームに対して前記アクセス制御ステップによるデータの更新があった場合、該データの更新を前記移動先の仮想ボリュームに反映させるデータ反映ステップと
を実行する仮想ストレージシステム制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の仮想ストレージシステムをまとめて制御を行う仮想ストレージシステム、仮想ストレージシステム制御プログラム、仮想ストレージシステム制御方法に関するものである。
【背景技術】
【０００２】
マルチノードのストレージシステムにおいて、ノードが持つストレージデバイスもしくはストレージデバイスの領域を分割したものを１つ以上合わせ、外部からは仮想的な１つのストレージデバイスとして見えるようにする技術がある。このような仮想的なストレージデバイスを仮想ボリュームあるいは論理ボリュームと呼ぶ。また、仮想ボリュームをサポートしているストレージシステムを仮想ストレージシステムと呼ぶ。仮想ストレージシステムは、ストレージデバイスの物理的な制約を超えた大きさの仮想ボリュームを作ることができるなどの利点がある。
【０００３】
近年、ストレージシステムに格納するデータ量が増加していく傾向にある。データ量が増えると、予め用意しておいたストレージシステムが容量不足に陥ることがある。このような容量不足に対していくつかの対処法がある。
【０００４】
まず、第１の方法として、データ格納容量の大きい新たなストレージシステムを用意し、データを全て移動させた後で、完全に置き換えるという方法がある。
【０００５】
次に、第２の方法として、ストレージデバイスを持つノードをストレージシステムに追加していくことにより、データ格納容量を増加させていく方法がある。
【０００６】
更に、第３の方法として、ストレージシステム自体を追加し、元のボリュームへのアクセスを止めることなく、新たに追加したストレージシステムに新たなボリュームを割り当てる方法がある。
【０００７】
なお、本発明の関連ある従来技術として、例えば、下記に示す特許文献１が知られている。このデータ移行方法は、特殊な中継装置が仮想ボリュームの移行の契機と移行先を設定し、移行を実施し、完了後、論理ユニット名を変更する。移行中のｉ／ｏ処理はテーブルにより管理、適用される。これにより、特殊な中継装置の配下にあるストレージ領域の実体を極力少ないノードに集めようとするものである。
【特許文献１】特開２００４−２４６７７０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述した第１の方法では、置き換えのための準備や置き換えている間のサービスをどうするのかといった問題が生じる。また、上述した第２の方法では、ストレージデバイス数やノード数が増えてくると仮想ストレージシステム内の管理に様々な問題を生じる。また、上述した第２の方法及び第３の方法では、元のボリュームへのアクセスをとめることなく、ストレージシステムの容量を増加させることができるが、元のボリュームから新しいボリュームへ移動させるためには、サービスの停止が必要になる。
【０００９】
また、古いノードで構成された仮想ストレージシステムから新しいノードで構成された仮想ストレージシステムへ仮想ボリュームを移動したいという要求がある。
【００１０】
例えば、元の仮想ストレージシステムを構成するストレージノードやストレージデバイスが年月を経るにつれて時代遅れとなった場合、新しいストレージノードやストレージデバイスを用いた仮想ストレージシステムへ仮想ボリュームを移動することにより、アクセスのレスポンスを上げたり、ストレージシステム全体の信頼性を上げたりすることができる。
【００１１】
また、サービスを継続しながら、新たに追加した仮想ストレージシステムの特徴を利用するために、仮想ボリュームを移動したいという要求がある。例えば、新たな仮想ストレージシステムが暗号化をサポートしているのに対して運用中の仮想ストレージシステムがサポートしておらず、運用中の仮想ボリュームと同じデータ内容を持つ新たな仮想ボリュームに対してデータの暗号化を行いたい場合である。また、新たな仮想ストレージシステムがブロック単位でのチェックコードを導入し、データの保全性の向上をサポートしているのに対して運用中の仮想ストレージシステムがチェックコードを導入しておらず、運用中の仮想ボリュームに対してデータの保全性を向上させたい場合等である。
【００１２】
これとは反対に、運用のポリシーの変化などにより、暗号化やデータ保全性の向上を行う必要がなくなり、データアクセスのレスポンスを向上させたい場合等には、前述とは逆方向の仮想ボリュームの移動を行う要求も生じる。
【００１３】
また、特許文献１では、サービスを止めることなく、データを移動することができるが、データの移動先は、上述した特殊な中継装置を越えることができない。そのため、ある中継装置配下のストレージ領域がいっぱいになり、異なる中継装置配下にあるストレージにデータを移動させる場合、サービスを止めてストレージ領域を増設するといった作業が必要になる。
【００１４】
本発明は上述した問題点を解決するためになされたものであり、サービスを止めずに仮想ボリュームの移動を行う仮想ストレージシステム制御装置、仮想ストレージシステム制御プログラム、仮想ストレージシステム制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１５】
上述した課題を解決するため、本発明は、複数の仮想ストレージクラスタの制御をコンピュータに実行させる仮想ストレージシステム制御プログラムであって、仮想ボリュームを持つ仮想ストレージクラスタから仮想ボリュームの情報を収集する仮想ボリューム情報収集ステップと、前記仮想ボリューム情報収集ステップにより収集された仮想ボリュームの情報に基づいて、第１の仮想ストレージクラスタにおける移動元の仮想ボリュームを制御する第１のストレージデバイス制御装置と第２の仮想ストレージクラスタにおける移動先の仮想ボリュームを制御する第２のストレージデバイス制御装置との間にネットワークを介したリンクを設定させるリンク設定ステップと、前記第１のストレージデバイス制御装置と前記第２のストレージデバイス制御装置に、前記リンクを用いた仮想ボリュームの移動を指示する仮想ボリューム移動指示ステップとをコンピュータに実行させるものである。
【００１６】
また、本発明に係る仮想ストレージシステム制御プログラムにおいて、更に、前記リンク設定ステップの後、前記仮想ボリューム情報収集ステップにより得られた前記仮想ボリュームの情報に基づいて、前記仮想ボリュームへのアクセスを行うアクセス制御ステップをコンピュータに実行させることを特徴とするものである。
【００１７】
また、本発明に係る仮想ストレージシステム制御プログラムにおいて、前記リンクは、リンク元の仮想ボリュームに対して前記アクセス制御ステップによるデータの更新があった場合、該データの更新をリンク先に反映させるものであることを特徴とするものである。
【００１８】
また、本発明に係る仮想ストレージシステム制御プログラムにおいて、前記仮想ボリューム移動指示ステップは、移動元の仮想ボリュームを持つストレージデバイス制御装置に対して、移動元の仮想ボリュームから移動先の仮想ボリュームへのデータのコピーを行わせ、該コピーの終了後に移動元の仮想ボリュームの識別子を変更させることを特徴とするものである。
【００１９】
また、本発明に係る仮想ストレージシステム制御プログラムにおいて、前記仮想ボリューム移動指示ステップは、移動先の仮想ストレージクラスタに、移動先の仮想ボリュームを割り当てさせ、前記移動元の仮想ボリュームから前記移動先の仮想ボリュームへのデータのコピーの終了後に前記移動先の仮想ボリュームの識別子を前記移動元の仮想ボリュームの識別子に変更させることを特徴とするものである。
【００２０】
また、本発明に係る仮想ストレージシステム制御プログラムにおいて、移動先の仮想ストレージクラスタは、使用するチャンクのサイズの組み合わせが同じ仮想ボリュームが割り当てられ、前記リンク設定ステップは、移動元の仮想ボリュームを構成する前記ストレージデバイス制御装置と移動先の仮想ボリュームを構成する前記ストレージデバイス制御装置の間にリンクを設定させることを特徴とするものである。
【００２１】
また、本発明に係る仮想ストレージシステム制御プログラムにおいて、移動先の仮想ストレージクラスタは、全て同じサイズのチャンクを用いた仮想ボリュームが割り当てられ、前記リンク設定ステップは、移動元の仮想ボリュームを制御するストレージデバイス制御装置と移動先の仮想ボリュームを制御するストレージデバイス制御装置の間にリンクを設定させることを特徴とするものである。
【００２２】
また、本発明は、複数の仮想ストレージクラスタから成るストレージクラスタ群のボリュームの制御を行う仮想ストレージシステム制御装置であって、仮想ストレージクラスタに属し、該仮想ストレージクラスタ中のストレージデバイスとネットワークに接続され、該仮想ストレージクラスタ中のストレージデバイスに仮想ボリュームの割り当てを行い、該仮想ボリュームの情報を生成し、自仮想ストレージクラスタ中の仮想ボリュームと他仮想ストレージクラスタ中の仮想ボリュームとの間に前記ネットワークを介したリンクを設定し、該リンクに基づいてデータのコピーを行う複数のストレージデバイス制御部と、前記ネットワークに接続され、仮想ストレージクラスタにより得られる前記仮想ボリュームの情報に基づいて、複数の仮想ストレージクラスタ中の前記ストレージデバイス制御部に仮想ボリューム間の前記リンクを設定させることにより仮想ボリュームの移動を指示するマネージメント部と備えるものである。
【００２３】
また、本発明に係る仮想ストレージシステム制御装置において、更に、前記ネットワークに接続され、前記マネージメント部から得られる前記仮想ボリュームの情報に基づいて、前記仮想ボリュームへのアクセスを行うアクセス制御部を備えることを特徴とするものである。
【００２４】
また、本発明に係る仮想ストレージシステム制御装置において、前記ストレージデバイス制御部は、前記リンクに基づいてリンク元の仮想ボリュームに対して前記アクセス制御部によるデータの更新があった場合、該データの更新をリンク先に反映させることを特徴とするものである。
【００２５】
また、本発明に係る仮想ストレージシステム制御装置において、前記ストレージデバイス制御部は、前記マネージメント部から仮想ボリュームの移動における移動元の指示があった場合、前記マネージメント部により設定されるリンクに基づいて移動元の仮想ボリュームから移動先の仮想ボリュームへのデータのコピーを行い、該コピーの終了後に移動元の仮想ボリュームの識別子を変更することを特徴とするものである。
【００２６】
また、本発明に係る仮想ストレージシステム制御装置において、前記ストレージデバイス制御部は、前記マネージメント部から仮想ボリュームの移動における移動先の指示があった場合、他の仮想ストレージクラスタに移動先の仮想ボリュームを割り当て、前記マネージメント部により設定されるリンクに基づいて移動元の仮想ボリュームから移動先の仮想ボリュームへのデータのコピーの終了後に前記移動先の仮想ボリュームの識別子を前記移動元の仮想ボリュームの識別子に変更することを特徴とするものである。
【００２７】
また、本発明に係る仮想ストレージシステム制御装置において、前記マネージメント部は、移動元の仮想ボリュームが構成されているチャンクのサイズの組み合わせと同じ仮想ボリュームを移動先の仮想ストレージクラスタに割り当てさせ、該仮想ボリュームを構成するストレージデバイス制御装置の間にリンクを設定させることを特徴とするものである。
【００２８】
また、本発明に係る仮想ストレージシステム制御装置において、前記マネージメント部は、移動先の仮想ストレージクラスタに、全て同じサイズのチャンクを用いた仮想ボリュームを割り当てさせ、複数の該仮想ボリュームの間にリンクを設定させることを特徴とするものである。
【００２９】
また、本発明は、複数の仮想ストレージクラスタの制御を行う仮想ストレージシステム制御方法であって、移動先の仮想ストレージクラスタに仮想ボリュームの割り当てを行い、該仮想ボリュームの情報を生成するストレージデバイス制御ステップと、前記ストレージデバイス制御ステップにより得られる前記仮想ボリュームの情報に基づいて、第１の仮想ストレージクラスタにおける移動元の仮想ボリュームを制御するストレージデバイス制御装置と第２の仮想ストレージクラスタにおける移動先の仮想ボリュームを制御するストレージデバイス制御装置との間にネットワークを介したリンクを設定させるリンク設定ステップと、前記第１のストレージデバイス制御装置と前記第２のストレージデバイス制御装置に、前記リンクを用いた仮想ボリュームの移動を指示する仮想ボリューム移動指示ステップとを実行するものである。
【００３０】
また、本発明に係る仮想ストレージシステム制御方法において、更に、前記リンク設定ステップの後、前記仮想ボリュームの情報に基づいて、前記仮想ボリュームへのアクセスを行うアクセス制御ステップを実行することを特徴とするものである。
【００３１】
また、本発明に係る仮想ストレージシステム制御方法において、更に、リンク元の仮想ボリュームに対して前記アクセス制御ステップによるデータの更新があった場合、該仮想ボリュームを持つノードが該データの更新をリンク先に反映させるリンク反映ステップを実行することを特徴とするものである。
【発明の効果】
【００３２】
本発明によれば、サービスを停止することなく、仮想ストレージシステム間の仮想ボリュームを移動することができる。
【発明を実施するための最良の形態】
【００３３】
以下、本発明の実施の形態について図面を参照しつつ説明する。
【００３４】
まず、本発明に係る仮想ストレージシステムの構成について説明する。
【００３５】
図１は、本発明に係る仮想ストレージシステムの構成の一例を示すブロック図である。この仮想ストレージシステムは、仮想ストレージクラスタ１０ａ，１０ｂ、アクセスノード（ＡＮ）２１、マネージメントノード（ＭＮ）２２、コンソールノード（ＣＮ）２３が、ネットワーク２０に接続されたものである。ネットワーク２０は、ＴＣＰ／ＩＰ等、通常のネットワークで良い。各ノードや仮想ストレージクラスタ１０ａ，１０ｂはネットワークを介してデータのやり取りや仮想ボリュームに関する情報のやり取りを行う。また、異なる仮想ストレージクラスタ１０同士がデータのやり取りを行うこともできる。なお、コンソールノード２３はマネージメントノード２２に直結する形をとっても構わない。
【００３６】
次に、仮想ストレージクラスタ１０ａについて説明する。
【００３７】
図２は、本発明に係る仮想ストレージクラスタの構成の一例を示すブロック図である。仮想ストレージクラスタ１０ａにおいて、ストレージノード（ＳＮ）１１ａ，１１ｂ，１１ｃとＭＤＳ（Meta Data Server）１３ａがネットワーク２０に接続されている。この仮想ストレージクラスタ１０ａは、従来の仮想ストレージシステムと同様の構成であるが、ストレージノード１１ａ，１１ｂ，１１ｃは従来のストレージノードの機能に加えて、後述するリンクの作成や解除等の機能を持つ。また、仮想ストレージクラスタ１０ｂも同様の構成を持つ。
【００３８】
ストレージデバイス（ｓｄ）１２ａ，１２ｂ，１２ｃは、それぞれストレージノード１１ａ，１１ｂ，１１ｃに接続され、制御される。また、ストレージデバイス１２ａ，１２ｂ，１２ｃは、ハードディスクドライブ等のディスク装置そのものでも良いし、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）等の仮想的なストレージデバイスでも良い。
【００３９】
ＭＤＳ１３ａは、ストレージノード１１ａ，１１ｂ，１１ｃの管理を行い、仮想ストレージクラスタ１０ａ内の仮想ボリューム情報を集めて管理し、マネージメントノード２２からの要求に応じて仮想ボリューム情報を提供する。また、ＭＤＳ１３ａを経由して様々な操作が行われる。なお、ＭＤＳ１３ａを省き、ＭＤＳ１３ａの代わりにストレージノード１１ａ，１１ｂ，１１ｃがそれぞれ仮想ボリューム情報を管理する構成としてもよい。
【００４０】
次に、ストレージノード１１ａについて説明する。なお、ストレージノード１１ｂ，１１ｃも同様である。
【００４１】
ストレージノード１１ａは、ネットワークインターフェースとストレージデバイスインターフェース、ＣＰＵ、メモリを備える。また、仮想ストレージクラスタ１０ａ内のストレージノード１１ａは、同一である必要はない。また、ストレージノード１１ａに接続されるストレージデバイス１２ａの種類や容量は、同一でなくても良い。
【００４２】
また、ストレージノード１１ａは、接続されたストレージデバイス１２ａの仮想ボリューム情報を管理する。仮想ボリューム情報とは、ストレージデバイス１２ａ内のある部分（チャンク）がどの仮想ボリューム（ＶＶ）に属し、その仮想ボリュームのどの位置を担当するか等を表すものである。また、仮想ボリューム情報は、チャンク毎に作成され、ストレージデバイス１２ａなどの不揮発性記憶媒体に書き込まれる。
【００４３】
また、ストレージノード１１ａがネットワークを通じて上位から受け取るデータアクセス要求には、アクセスに関する基本的な情報である、アクセス形態（ＲＥＡＤ／ＷＲＩＴＥ）、ストレージデバイス名、アクセス開始位置、ブロック数のほかに、仮想ボリューム名が含まれる。データアクセス要求中の仮想ボリューム名と仮想ボリューム情報中の仮想ボリューム名が一致すれば、ストレージノード１１ａは該当する部分のデータにアクセスし、一致しなければ上位にエラーを返す。
【００４４】
また、ストレージノード１１ａは、上位から前述の仮想ボリューム情報に関する参照命令が来れば参照元に渡し、仮想ボリューム情報に関する更新命令が来れば命令どおりに更新する。この更新命令は、仮想ボリュームの作成に関するもの、仮想ボリュームの解放に関するもの、仮想ボリューム識別子の変更に関するものがある。
【００４５】
加えて、ストレージノード１１ａは、上位からの指示により、自ノードのストレージデバイス１２ａ内の所定の連続した部分（以下、チャンクと呼ぶ）と他ノードのストレージデバイス内の所定の連続した部分との間の仮想的なリンクの作成や、リンクの解除を行う。このリンクは、セッションの開始などにより通信路を確保することを意味する。このリンクが張られている間、リンク元にデータ更新があれば、ストレージノード１１ａはリンク先にもデータ更新を反映する。
【００４６】
そのために、ストレージノード１１ａは、接続されているストレージデバイス１２ａのチャンクを読み込んで、リンク先のストレージノードにそのデータを送る。一方、ストレージノード１１ａはリンク元のストレージノードからネットワークを通じて送り込まれたデータを受け取り、チャンクに対する書き込みを行う。チャンクが大きい場合、ストレージノード１１ａはさらに細かい単位に分けて順次データの送受信を行い、チャンクのコピーを行えばよい。
【００４７】
次に、ストレージノード１１ａにおけるデータアクセスの動作について説明する。
【００４８】
図３は、本発明に係るストレージノードにおけるデータアクセスの動作を示すフローチャートである。アクセスノード２１からストレージノード１１ａへのアクセス要求があると、このフローを開始する。まず、ストレージノード１１ａは、アクセス要求を受け取るとその要求内容を検討し、ストレージノード１１ａが持つストレージデバイス１２ａにデータアクセスが可能か否かの判断を行う（Ｓ１１０）。その結果、データアクセスが不可能と判断されれば（Ｓ１１０，Ｎ）、ストレージノード１１ａはエラーをアクセスノード２１に返し（Ｓ１２０）、このフローを終了する。一方、データアクセスが可能と判断されれば（Ｓ１１０，Ｙ）、ストレージノード１１ａはアクセス形態がＲＥＡＤであるか否かの判断を行う（Ｓ１３０）。
【００４９】
アクセス形態がＲＥＡＤであれば（Ｓ１３０，Ｙ）、ストレージノード１１ａはデータを読み込みその結果をアクセスノード２１に返し（Ｓ１４０）、このフローを終了する。ＲＥＡＤにおいては、常にストレージデバイス１２ａにアクセスしても良いし、ストレージノード１１ａがキャッシュ機構を持っている場合にはキャッシュに置かれているデータを利用しても良い。なお、ＲＥＡＤの結果には、要求されたデータそのものの他に、ストレージデバイス１２ａの異常が原因のＲＥＡＤエラーも含まれる。
【００５０】
一方、アクセス形態がＷＲＩＴＥならば（Ｓ１３０，Ｎ）、他のストレージノードが持つストレージデバイスのチャンクへのリンクがあるかどうかを判定する（Ｓ１５０）。
【００５１】
リンクがなければ（Ｓ１５０，Ｎ）、ストレージノード１１ａはデータを書き出し、その結果をアクセスノードに返し（Ｓ１６０）、このフローを終了する。ここで、ＲＥＡＤと同様、ストレージノード１１ａはＷＲＩＴＥのデータを直接ストレージデバイスに書き込んでも良いし、ストレージノード１１ａがキャッシュ機構を持っていればそのキャッシュ機構を利用しても良い。ただし、キャッシュを使用する場合には、メモリ上のデータがストレージデバイス１２ａに書き込まれることを何らかの方法で保証する必要がある。なお、ＷＲＩＴＥの結果には、書き込みができたというＯＫレスポンスの他に、ストレージデバイス１２ａの異常が原因のＷＲＩＴＥエラーも含まれる。
【００５２】
一方、リンクがあれば（Ｓ１５０，Ｙ）、ストレージノード１１ａはリンク先にＷＲＩＴＥすべきデータを転送し（Ｓ１７０）、リンク先からの結果を待ち、データ書き込み成功が返ってきたか否かの判断を行う（Ｓ１８０）。リンク先からデータ書き込み成功が返って来れば（Ｓ１８０，Ｙ）、Ｓ１６０と同様の処理を行い（Ｓ１９０）、このフローを終了する。一方、リンク先からデータ書き込み失敗が返ってきたり、返事そのものが返ってこなかったりした場合（Ｓ１８０，Ｎ）、ストレージノード１１ａはエラーをアクセスノードに返し（Ｓ２００）、このフローを終了する。フローが終了すると、ストレージノード１１ａは再びアクセス要求を待つ。
【００５３】
次に、マネージメントノード２２、コンソールノード２３、アクセスノード２１について説明する。
【００５４】
マネージメントノード２２は、仮想ストレージクラスタ１０ａ，１０ｂの状態を監視し、仮想ボリューム情報の参照や更新を行い、かつ、ある仮想ストレージクラスタから他のストレージシステムへのデータコピーおよびデータコピーを行うための指示を出す。マネージメントノード２２自身は、最低限の仮想ボリューム情報（仮想ボリューム識別子と、その仮想ボリュームが属する仮想ストレージクラスタ）を保持する。
【００５５】
また、マネージメントノード２２は、仮想ボリュームの割当や解放や識別子変更があった場合には、そのことを自ノードの保持する仮想ボリューム情報に反映させる手段を持つ。また、マネージメントノード２２は、仮想ストレージクラスタの追加や削除も自ノードの保持する仮想ボリューム情報に反映させる手段を持つ。さらに、仮想ボリューム情報の詳細な情報は持たず、コンソールノード２３やアクセスノード２１からの参照要求があった場合には、マネージメントノード２２内にある仮想ボリューム識別子とその仮想ボリュームが存在する仮想ストレージクラスタの対応表に基づいて、仮想ストレージクラスタの保持する仮想ボリューム情報を参照し、その結果をそのまま参照要求元に返す。
【００５６】
コンソールノード２３は、マネージメントノード２２に指示を与えるものである。本実施の形態では、マネージメントノード２２とコンソールノード２３を別々のノードとして取り扱っているが、マネージメントノード２２の役割とコンソールノード２３の役割を同一ノードに持たせても良い。また、アクセスノード２１の役割とコンソールノード２３の役割を同一ノードに持たせても良い。
【００５７】
アクセスノード２１は、ユーザアプリケーション等からのデータ要求に応じて、ストレージノード１１ａ，１１ｂ，１１ｃにアクセスするものである。なお、別のノードにユーザアプリケーションがあり、ネットワーク２０を介してデータ要求を受け付ける形でも良い。また、アクセスノード２１は仮想ボリューム１つだけに対応するものでも良いし、複数の仮想ボリュームに対応できるものでも良い。また、アクセスノード２１は、ＳＣＳＩデバイスドライバのように仮想ボリューム１つだけに対応したモジュールを複数組み込む形態でも良い。また、必要であれば複数のアクセスノード２１があってもかまわない。ただし、１つの仮想ボリュームは複数のアクセスノード２１からアクセスされない。
【００５８】
次に、仮想ストレージクラスタ１０ａにおける仮想ボリュームの割り当てについて説明する。
【００５９】
図４は、本発明に係る仮想ボリューム情報の一例を示す表である。アクセスノード２１は、仮想ボリュームごとに仮想ボリューム情報（仮想ボリューム上の開始位置、仮想ボリューム上のブロック数、ストレージノード名、ストレージデバイス名、ストレージデバイス上の開始位置、ストレージデバイス上のブロック数）を管理している。この例では、複数のストレージノード１１ａ，１１ｂ，１１ｃ（ＳＮ−Ａ，ＳＮ−Ｂ，ＳＮ−Ｃ）から、ストレージデバイス１２ａ，１２ｂ，１２ｃ（ｓｄ−ａ）における４つの異なるサイズのチャンクがＶＶ−Ａに割り当てられている。
【００６０】
ここでは、更に、仮想ボリューム情報の項目としてチャンク番号を含んでいるが、後の説明のために使用しているものであり、本来は無くても良い情報である。また、ストレージノード１１ａとマネージメントノード２２との間、マネージメントノード２２とアクセスノード２１との間で、仮想ボリューム情報のやり取りが行われる。なお、本実施の形態における仮想ボリューム情報は、テーブルの形を取っているが、仮想ボリューム情報は他のデータ構造（例：Ｂ木）で管理しても良い。
【００６１】
アクセスノード２１は、仮想ボリューム識別子をキーとしてマネージメントノード２２に仮想ボリューム情報の参照を要求し、マネージメントノード２２が仮想ストレージクラスタ１０ａ，１０ｂから受け取った仮想ボリューム情報を受け取る。
【００６２】
図５は、本発明に係るアクセスノードによるデータアクセスの動作の一例を示すフローチャートである。なお、ここではアクセスノード２１を用いた説明を行うが、ＯＳに組み込むドライバとしてアクセスノード２１の機能を実装する方法も考えられる。また、アクセスノード２１は、データアクセスを行うたびにマネージメントノード２２を介して指定した仮想ボリューム情報を得るという手段もある。
【００６３】
まず、アクセスノード２１は、準備のため組み込み時にマネージメントノード２２を介して指定した仮想ボリュームの仮想ボリューム情報を受け取る（Ｓ４００）。次に、アクセスノード２１は、上位から（ユーザアプリケーションから要求が直接来るかもしれないし、他のドライバからかもしれない）からデータアクセスの要求を待ち、データアクセス要求を受け取ると（Ｓ４１０）、仮想ボリューム情報に基づき該当するストレージノードにアクセスできる形式に要求を変換して（Ｓ４２０）、該当ストレージノードにアクセスする（Ｓ４３０）。
【００６４】
その後、アクセスノード２１は、アクセスしたストレージノードからレスポンスが返ってきたかどうかを判定する（Ｓ４４０）。レスポンスがあれば（Ｓ４４０，Ｙ）、アクセスノード２１は、ＯＫかどうかを判定する（Ｓ４５０）。レスポンスがＯＫであれば（Ｓ４５０，Ｙ）、アクセスノード２１は、上位にＯＫを返し、必要ならばデータを返し（Ｓ４６０）、このフローを終了する。もし、Ｓ４４０でレスポンスが返って来ない場合（Ｓ４４０，Ｎ）や、Ｓ４５０でレスポンスがＯＫでない場合（Ｓ４５０，Ｎ）、改めてアクセスノード２１はマネージメントノード２２を介して仮想ボリューム情報を受け取り（Ｓ４７０）、再度同じデータアクセスを試み、Ｓ４２０へ戻る。
【００６５】
次に、Ｓ４２０における要求変換処理の例について説明する。ここでは、図４で示した仮想ボリューム情報を用いた要求変換処理の例について説明する。図６は、本発明に係るアクセスノードにおける要求変換処理の一例を示す図である。これは、ユーザアプリケーションが仮想ボリュームＶＶ−Ａの２０４８ブロックから８ブロック分の領域に対してアクセスを行う場合、アクセスノード２１において、実際にアクセスすべきストレージノード１１ｂ（ＳＮ−Ｂ）とそのストレージノード１１ｂ上のストレージデバイス１２ｂのアクセス位置に変換し、仮想ボリューム識別子もつけて、該当するストレージノード１１ｂ（ＳＮ−Ｂ）に要求を送ることを表している。
【００６６】
次に、仮想ストレージシステムにおける仮想ストレージクラスタ間の仮想ボリューム移動処理の動作について説明する。
【００６７】
図７は、本発明に係る仮想ストレージシステムにおける仮想ボリューム移動処理前の状態の一例を示すブロック図である。この図において、細線は接続を表し、太線の矢印はアクセスを表す。ここでは、移動元の仮想ストレージクラスタ１０ａをＶＳＳ−１と表し、移動先の仮想ストレージクラスタ１０ｂをＶＳＳ−２と表す。ＶＳＳ−１は３つのストレージノード１１ａ，１１ｂ，１１ｃ（ＳＮ−Ａ、ＳＮ−Ｂ、ＳＮ−Ｃ）で構成され、ＶＳＳ−２は４つのストレージノード１１ｗ，１１ｘ，１１ｙ，１１ｚ（ＳＮ−Ｗ、ＳＮ−Ｘ、ＳＮ−Ｙ、ＳＮ−Ｚ）で構成されるものとする。また、ストレージノード１１ａ，１１ｂ，１１ｃ，１１ｗ，１１ｘ，１１ｙ，１１ｚには、それぞれストレージデバイス１２ａ，１２ｂ，１２ｃ，１２ｗ，１２ｘ，１２ｙ，１２ｚが接続されている。
【００６８】
ここでは、ＶＳＳ−１中にあるＶＶ−Ａを別のＶＳＳ−２に移動させ、移動中および移動後にもユーザのＶＶ−Ａに対するデータアクセスはユーザのアプリケーションを止めることなく継続できる。仮想ボリュームの移動中でも、ストレージノード１１は図３に示したデータアクセスの処理を行い、アクセスノード２１は図５に示したデータアクセスの処理を継続して行う。
【００６９】
図８は、本発明に係る仮想ボリューム移動処理の動作の一例を示すフローチャートである。初めに、コンソールノード２３は、マネージメントノード２２を介してＶＳＳ−１中のＶＶ−Ａの仮想ボリューム情報を取得する（Ｓ６００）。仮想ボリューム情報の取得は、ＶＶ−Ａへのデータアクセスに影響を与えない。
【００７０】
次に、コンソールノード２３は、マネージメントノード２２を介してＶＶ−Ａを構成するチャンクとそれぞれ同じ大きさのチャンクで構成される仮想ボリュームをＶＳＳ−２から獲得しようとする（Ｓ６１０）。ここでは、ＶＶ−Ｂという仮想ボリュームがＶＳＳ−２に確保できたものとする、それぞれの対応は、ＶＶ−Ａのチャンク番号１（以下ＶＶ−Ａ−１と略記、他も同様）に対応したＶＶ−Ｂ−１、ＶＶ−Ａ−２に対応したＶＶ−Ｂ−２、ＶＶ−Ａ−３に対応したＶＶ−Ｂ−３、ＶＶ−Ａ−４に対応したＶＶ−Ｂ−４が獲得できたとする。図９は、本発明に係る仮想ボリューム情報の別の一例を示す表である。ＶＶ−Ａは、図４の仮想ボリューム情報が示すように割り当てられ、ＶＶ−Ｂは、図８の仮想ボリューム情報が示すように割り当てられる。
【００７１】
ここで、ＶＳＳ−２での仮想ボリューム獲得処理は、ＶＶ−Ａにアクセスするユーザアプリケーションに一切影響を与えない。
【００７２】
３番目に、コンソールノード２３は、マネージメントノード２２を介して、ＶＶ−ＡとＶＶ−Ｂのチャンクの間にリンクを張る（Ｓ６２０）。リンクが張られている間にＶＶ−Ａにデータの書き込みがあれば、その更新データはＶＶ−Ｂにも伝播させる。例えば、ＶＶ−Ａ−１の先頭１０ブロック目から２０ブロック分のデータの書き込みがあったら、ＶＶ−Ｂ−１の先頭１０ブロック目から２０ブロック分の書き込みも実際に行う。
【００７３】
この場合、ＶＶ−Ａからのデータ読み込みは問題ないが、ＶＶ−Ａにデータの書き込みを行うとＶＶ−Ｂにもデータが書き込まれることになるので、ユーザアプリケーションからみるとデータ書き込みのレスポンスが劣化することにはなる。しかしながら、データアクセスを継続することはできる。
【００７４】
４番目に、コンソールノード２３は、マネージメントノード２２を介して、前述したリンクを張ったままＶＶ−ＡからＶＶ−Ｂへのデータコピーを行わせる（Ｓ６３０）。このデータコピーは、ストレージノード１１により、ＳＮ−ＡからＳＮ−ＷとＳＮ−Ｚへ、ＳＮ−ＢからＳＮ−Ｘへ、ＳＮ−ＣからＳＮ−Ｙへと、対応するチャンク間で行われる。これらのチャンク毎のデータコピーは同時に行う必要は無く、負荷等の要因を考慮して、分けて行っても良い。
【００７５】
このデータコピーをしている最中であっても、アクセスノード２１は、ユーザの要求に応じてＶＶ−Ａへのアクセスを行っても良いし、また、アクセスがＶＶ−Ａへのデータの書き込みがあれば、それはＶＶ−Ｂの対応する部分にも書き込まれるのは、前述したとおりである。
【００７６】
このフェーズでは、ＶＳＳ−１側にもデータコピーのための負荷が加わるため、ユーザアプリケーションからみるとデータアクセスのレスポンスが劣化することにはなるが、リンクを張っている場合と同様にデータアクセスを継続することはできる。また、特許文献１では、データコピー中にデータの更新があった場合にはビットマップで管理していたが、本発明ではビットマップを使用しない。コピー前の箇所でもコピー後の箇所でも、データ更新があればそのままデータの更新を行う。そうすることで、ビットマップを持つ必要が無くなる。
【００７７】
すべてのチャンクにおけるデータコピーが完了したら、コンソールノード２３は、マネージメントノード２２を介して仮想ボリューム識別子の付け替えを行う。
【００７８】
まず、コンソールノード２３は、マネージメントノード２２を介してＶＶ−Ａの仮想ボリューム識別子をどこにも存在しない仮想ボリューム識別子に付け替えさせる（Ｓ６４０）。ここでは、ＶＶ−Ｃに付け替えるものとする。コンソールノード２３は、仮想ボリューム識別子を付け替えたら、マネージメントノード２２にはＶＶ−Ａがなくなったことを認識させる（Ｓ６５０）。次に、コンソールノード２３は、マネージメントノード２２を介してＶＶ−Ｂの識別子をＶＶ−Ａに付け替える（Ｓ６６０）。仮想ボリューム識別子を付け替えたら、コンソールノード２３は、ＶＶ−ＢがなくなりＶＶ−Ａができたことをマネージメントノード２２に認識させる（Ｓ６７０）。
【００７９】
このＶＶ−ＡからＶＶ−Ｃへの仮想ボリューム識別子の付け替えとＶＶ−ＢからＶＶ−Ａへの仮想ボリューム識別子の付け替えは連続して間をあけずに行う必要があり、仮想ボリューム識別子を付け替えた結果はすぐにマネージメントノード２２に反映されるようにする。
【００８０】
最後に、ＶＳＳ−１中のＶＶ−ＣのチャンクとＶＳＳ−２中のＶＶ−Ａのチャンクとの間のリンクを解除する（Ｓ６８０）。ここまでが、必須の処理である。さらに、その後、コンソールノード２３は、マネージメントノード２２を介してＶＶ−Ｃを解放させても良い。
【００８１】
図１０は、本発明に係るストレージノード毎の仮想ボリューム情報の一例を示す表である。仮想ボリューム識別子は、ＶＶ−ＡからＶＶ−Ｃに変更され、ＶＶ−ＢからＶＶ−Ａに変更されている。
【００８２】
なお、ＶＶ−ＡからＶＶ−Ｃへの仮想ボリューム識別子の付け替えを行う理由、つまりコピー完了後にＶＶ−Ａをすぐに解放しない理由は、ＶＶ−ＢからＶＶ−Ａへの仮想ボリューム識別子変更（Ｓ６６０）を行う直前からマネージメントノード２２に反映させる前（Ｓ６７０）までにＶＳＳ−２で異常が発生した場合、ＶＶ−ＣをＶＶ−Ａに戻すことにより、ＶＶ−Ａに対するアクセス自体を継続させられるというメリットがあるためである。また、Ｓ６７０が行われた後でＶＳＳ−２に異常が発生すると、完全ではなく、部分的には不整合のあるボリュームとなってしまう。それでも無くなるよりはましという状況下であれば、ＶＶ−ＣからＶＶ−Ａへ仮想ボリューム識別子を戻すことにより、ある程度のデータの復元を行えることが期待できるためである。
【００８３】
仮想ボリューム識別子を付け替えている最中にデータアクセスがなかった場合には、アクセスノード２１はＶＳＳ−１にＶＶ−Ａがあると思い込んでいるので、ＶＳＳ−１にアクセスしようとする。ＶＳＳ−１中のストレージノードは仮想ボリューム識別子が一致しないので、アクセスノード２１にエラーを返す。エラーを返されたアクセスノード２１はマネージメントノードにＶＶ−Ａの在処を改めて参照し、ＶＳＳ−２にＶＳＳ−Ａが存在するという仮想ボリューム情報を得る。次に、アクセスノード２１は新たな仮想ボリューム情報に基づいてＶＳＳ−２にあるＶＶ−Ａにデータアクセスを行う。そのため、データアクセスは、ほとんど通常状態で行われる。
【００８４】
一方、仮想ボリューム識別子を付け替えている最中にデータアクセスがあった場合について、ケース分けして記述する。まず、ＶＶ−ＡからＶＶ−Ｃへの仮想ボリューム識別子の付け替えの前は、問題なくデータアクセスできる。次に、ＶＶ−ＡからＶＶ−Ｃへの仮想ボリューム識別子の付け替え中は、ＶＳＳ−１の実装によっていくつかの動作が考えられる。以下、実装例を２つ提示する。
【００８５】
第１の実装例として、仮想ボリューム識別子の付け替えを始めたら、ＶＶ−Ａに対するデータアクセスに対し、ＶＳＳ−１はアクセスノード２１にエラーで返すようにする。第２の実装例として、ＶＶ−Ｃへの付け替えの終わっていない部分に関してＶＳＳ−１はデータアクセスを許し、ＶＶ−Ｃへの付け替えが終わった部分に関してＶＳＳ−１はアクセスノード２１にエラーを返す。いずれにせよ、アクセスノード２１にエラーが返ったら、アクセスノード２１はマネージメントノード２２に仮想ボリューム情報を参照しなおすことになる。
【００８６】
ＶＶ−ＡからＶＶ−Ｃへの仮想ボリューム識別子の付け替えが終わったら、アクセスノード２１がＶＳＳ−１へデータアクセスしてもエラーが返り、アクセスノード２１がマネージメントノード２２に仮想ボリューム情報を参照しにいってもＶＶ−Ａが存在しない瞬間が一瞬生じる。このような場合、アクセスノード２１は少し間をおいてからマネージメントノード２２に再参照すれば良い。
【００８７】
次に、Ｓ６６０において、ＶＶ−ＢからＶＶ−Ａへの仮想ボリューム識別子の付け替えを行い、その付け替えた結果がマネージメントノード２２に反映され、さらにその結果がアクセスノード２１に反映されると、アクセスノード２１はＶＳＳ−２に移動したＶＶ−Ａにデータアクセスできるようになる。
【００８８】
例えば、ＶＶ−Ａに対するデータアクセスが一時的に止んで、ＶＶ−ＡからＶＶ−Ｃへの仮想ボリューム識別子変更が終わりＶＶ−ＢからＶＶ−Ａへの仮想ボリューム識別子変更も終わった後に、再びＶＶ−Ａに対するデータアクセスが入ったと仮定した場合のアクセスノード２１やストレージノードの動作を説明する。ここで、アクセスノード２１は、図４に示したＶＶ−Ａの仮想ボリューム情報を持っており、それに基づいて、実際にアクセスするストレージノードを決定する。ここでは、図６で示したようなアクセスノード２１へのアクセス要求が来たとする。アクセスノード２１は、要求変換処理を行い、ＳＮ−Ｂへアクセスしようとする。
【００８９】
ＳＮ−Ｂは、アクセスノード２１から要求が来たとき、仮想ボリューム識別子がＶＶ−Ｃに変わっていているのでＳＮ−Ｂはエラーをアクセスノード２１に返す。アクセスノード２１は、マネージメントノード２２にＶＶ−Ａを照会し、改めて仮想ボリューム情報を得る。アクセスノード２１は、その情報に基づいてＳＮ−Ｘにアクセスすることを決定し、ＳＮ−Ｘは、アクセス該当部分がＶＶ−Ａに属していて、アクセス範囲にも問題が無いので、そのままアクセスを受け入れる。
【００９０】
このように仮想ボリュームの移動を行うことにより、データアクセスを止めることなく、移動先のボリュームにアクセスできるようになる。
【００９１】
次に、データの安全性のために、仮想ストレージクラスタ内でデータの二重化を行う場合の仮想ボリューム移動処理について説明する。
【００９２】
仮想ボリューム移動処理前の状態を、図７と同様である。また、この図の状態は、移動先の仮想ボリュームが割当済みの状態を示す。
【００９３】
アクセスノード２１では、ＯＳのＳＣＳＩ用共通ドライバの配下としてＶＶ−Ａ専用のデバイスドライバが組み込まれている。そのため、専用デバイスドライバは、共通ドライバから要求が渡されると共に、結果を共通ドライバに返す。また、３０秒や６０秒といった一定時間の間に結果を共通ドライバに返さないと、再度、同じ要求が共通ドライバから専用ドライバに渡されることになる。
【００９４】
ここで、ＶＳＳ−１においてＶＶ−Ａが割り当てられており、ＶＶ−Ａにデータアクセスが行われる場合について説明する。ＶＳＳ−１内では、仮想ボリュームに割り当てられているそれぞれのスライスが、二重化されている。今まではチャンクという用語を使用していたが、ここでは全チャンクを同じ大きさとし、スライスという用語を使用する。この場合、全てのスライスは、予め定められた大きさとなるため、仮想ボリューム情報における仮想ボリューム上のブロック数、ストレージデバイス上のブロック数等の情報が不要となり、仮想ボリューム情報のデータ量を削減することができる。
【００９５】
二重化のペアをプライマリ、セカンダリで表現すると、ＶＶ−ＡはＶＳＳ−１に３スライス分の仮想ボリュームが割り当てられたものであり、実際のスライスのペアを（プライマリ，セカンダリ）で表すと、（ＳＮ−Ａ−１，ＳＮ−Ｂ−２）、（ＳＮ−Ｃ−４，ＳＮ−Ｂ−１）、（ＳＮ−Ｃ−２，ＳＮ−Ａ−５）となる。これらの組み合わせは、図７において同じ模様のスライスのペアとして表す。
【００９６】
また、ＭＤＳ１３ａは、仮想ボリューム情報を要求されると、（ＳＮ−Ａ−１，ＳＮ−Ｂ−２）、（ＳＮ−Ｃ−４，ＳＮ−Ｂ−１）、（ＳＮ−Ｃ−２，ＳＮ−Ａ−５）を返す。ここで、データ二重化は各ストレージノードにおける図３の処理により実現され、外部からのデータ更新はプライマリを経由してセカンダリに渡り、セカンダリがプライマリにＯＫを返したら、プライマリが自ノードにデータを書き込み、データ更新要求元にＯＫを返すものとする。
【００９７】
また、ＶＶ−Ｂも同様にして、ＶＳＳ−２に３スライス分の仮想ボリュームが割り当てられたものであり、割り当てられたペアは、（ＳＮ−Ｙ−２，ＳＮ−Ｚ−２）、（ＳＮ−Ｘ−２，ＳＮ−Ｚ−１）、（ＳＮ−Ｗ−２，ＳＮ−Ｘ−５）となっている。
【００９８】
次に、図７において、移動元のスライスと移動先のスライスとの間にリンクが張られる。マネージメントノード２２は、ＭＤＳ１３ａとＭＤＳ１３ｂからＶＶ−ＡとＶＶ−Ｂの仮想ボリューム情報を取得し、ＶＶ−ＡのセカンダリからＶＶ−Ｂのプライマリへのリンクを張るように対応するストレージノード１１ａ，１１ｂ，１１ｃに情報を渡す。その結果、リンクは、ＳＮ−Ｂ−２→ＳＮ−Ｙ−２、ＳＮ−Ｂ−１→ＳＮ−Ｘ−２、ＳＮ−Ａ−５→ＳＮ−Ｗ−２に張られる。
【００９９】
図１１は、本発明に係る仮想ストレージシステムにおけるデータコピー中にデータ更新があった状態の一例を示すブロック図である。この図において、細線は接続を表し、太実線の矢印はアクセスを表し、太点線の矢印はデータコピーを表す。この図は、ＳＮ−Ｂ−１からＳＮ−Ｘ−２へのデータコピーを行っている最中に、ＳＮ−Ｂ−１のプライマリであるＳＮ−Ｃ−４へのデータ更新があった状態を示す。この図において、直接関係ないストレージデバイスやノード等は省略している。
【０１００】
ここで、スライス間のデータコピーは、ＶＶ−ＡのセカンダリからＶＶ−ＢのプライマリＶＶ−Ｂのセカンダリへと波及し、データ三重化のような状態となる。一方、アクセスノード２１から送られてくるデータ更新は、ＶＶ−ＡのプライマリからセカンダリへそしてＶＶ−Ｂのプライマリからセカンダリへと波及し、データ四重化のような状態となる。
【０１０１】
従来のように、ビットマップでデータ更新箇所を管理すれば、アクセスノード２１のデータ更新をＶＶ−Ｂに伝達するかどうかを判断し、不要なデータ伝達を行う必要がなくなるが、ビットマップを使用するためのメモリ領域が必要となる。本発明によれば、ビットマップを置かないことでデータ更新があれば何でも伝達してしまうが、メモリ量が貧弱なノードでも仮想ストレージクラスタの構成要素とできる。
【０１０２】
このようにして、スライスコピーが完了し、仮想ボリューム識別子の付け替えを行うことにより、仮想ボリューム移動は完了し、ＶＶ−ＡはＶＳＳ−２中に存在し、ＶＶ−ＡはＶＳＳ−１中には存在しなくなる。
【０１０３】
本発明による仮想ストレージクラスタ間での仮想ボリュームの移動は、ユーザアプリケーションを止める必要が無いため、サービスを止められない状況下においては非常に有効である。
【０１０４】
また、本発明の仮想ボリューム移動処理を行う際、仮想ボリュームの移動先の仮想ストレージクラスタがデータ暗号化をサポートしていれば、データ暗号化されていなかった仮想ボリューム中のデータが仮想ボリュームの移動が完了し仮想ボリューム識別子を付け替え終わった時点で、データ暗号化されている仮想ボリュームになったサービスを継続することができる。
【０１０５】
また、本発明の仮想ボリューム移動処理を行う際、仮想ボリュームの移動先の仮想ストレージクラスタがデータチェックコードをサポートしていれば、データチェックコードをサポートしていなかった仮想ボリューム中のデータが仮想ボリュームの移動が完了し仮想ボリューム識別子を付け替え終わった時点で、データチェックコードをサポートした仮想ボリュームでサービスを継続することができる。
【０１０６】
さらに、データ暗号化とデータチェックコードの両方の特徴を組み合わせた仮想ストレージクラスタを移動先とすることで、サービスを継続しながらより頑健な仮想ボリュームにすることができる。
【０１０７】
反対に、今までは暗号化などを行っていたが、どうしてもデータレスポンスを優先したいということであれば、暗号化を行う機能を持つ仮想ストレージクラスタから特殊な機能を持たない仮想ストレージクラスタに仮想ボリュームを移動させることにより、データレスポンスを向上させることができる。
【０１０８】
更に、仮想ストレージシステムを構成するコンピュータにおいて上述した各ステップを実行させるプログラムを、仮想ストレージシステム制御プログラムとして提供することができる。上述したプログラムは、コンピュータにより読取り可能な記録媒体に記憶させることによって、仮想ストレージシステムを構成するコンピュータに実行させることが可能となる。ここで、上記コンピュータにより読取り可能な記録媒体としては、ＲＯＭやＲＡＭ等のコンピュータに内部実装される内部記憶装置、ＣＤ−ＲＯＭやフレキシブルディスク、ＤＶＤディスク、光磁気ディスク、ＩＣカード等の可搬型記憶媒体や、コンピュータプログラムを保持するデータベース、或いは、他のコンピュータ並びにそのデータベースや、更に回線上の伝送媒体をも含むものである。
【０１０９】
なお、ストレージデバイス制御部は、実施の形態におけるストレージノードに対応する。また、マネージメント部は、実施の形態におけるマネージメントノードとコンソールノードに対応する。また、アクセス制御部は、実施の形態におけるアクセスノードに対応する。また、仮想ボリューム情報収集ステップとリンク設定ステップと仮想ボリューム移動指示ステップは、実施の形態におけるコンソールノードの処理に対応する。また、リンク反映ステップは、実施の形態におけるストレージノードの処理に対応する。
【０１１０】
（付記１）  複数の仮想ストレージクラスタの制御をコンピュータに実行させる仮想ストレージシステム制御プログラムであって、
仮想ボリュームを持つ仮想ストレージクラスタから仮想ボリュームの情報を収集する仮想ボリューム情報収集ステップと、
前記仮想ボリューム情報収集ステップにより収集された仮想ボリュームの情報に基づいて、第１の仮想ストレージクラスタにおける移動元の仮想ボリュームを制御する第１のストレージデバイス制御装置と第２の仮想ストレージクラスタにおける移動先の仮想ボリュームを制御する第２のストレージデバイス制御装置との間にネットワークを介したリンクを設定させるリンク設定ステップと、
前記第１のストレージデバイス制御装置と前記第２のストレージデバイス制御装置に、前記リンクを用いた仮想ボリュームの移動を指示する仮想ボリューム移動指示ステップと
をコンピュータに実行させる仮想ストレージシステム制御プログラム。
（付記２）  付記１に記載の仮想ストレージシステム制御プログラムにおいて、
更に、前記リンク設定ステップの後、前記仮想ボリューム情報収集ステップにより得られた前記仮想ボリュームの情報に基づいて、前記仮想ボリュームへのアクセスを行うアクセス制御ステップをコンピュータに実行させることを特徴とする仮想ストレージシステム制御プログラム。
（付記３）  付記２に記載の仮想ストレージシステム制御プログラムにおいて、
前記リンクは、リンク元の仮想ボリュームに対して前記アクセス制御ステップによるデータの更新があった場合、該データの更新をリンク先に反映させるものであることを特徴とする仮想ストレージシステム制御プログラム。
（付記４）  付記１乃至付記３のいずれかに記載の仮想ストレージシステム制御プログラムにおいて、
前記仮想ボリューム移動指示ステップは、移動元の仮想ボリュームを持つストレージデバイス制御装置に対して、移動元の仮想ボリュームから移動先の仮想ボリュームへのデータのコピーを行わせ、該コピーの終了後に移動元の仮想ボリュームの識別子を変更させることを特徴とする仮想ストレージシステム制御プログラム。
（付記５）  付記１乃至付記４のいずれかに記載の仮想ストレージシステム制御プログラムにおいて、
前記仮想ボリューム移動指示ステップは、移動先の仮想ストレージクラスタに、移動先の仮想ボリュームを割り当てさせ、前記移動元の仮想ボリュームから前記移動先の仮想ボリュームへのデータのコピーの終了後に前記移動先の仮想ボリュームの識別子を前記移動元の仮想ボリュームの識別子に変更させることを特徴とする仮想ストレージシステム制御プログラム。
（付記６）  付記１乃至付記５のいずれかに記載の仮想ストレージシステム制御プログラムにおいて、
移動先の仮想ストレージクラスタは、使用するチャンクのサイズの組み合わせが同じ仮想ボリュームが割り当てられ、前記リンク設定ステップは、移動元の仮想ボリュームを構成する前記ストレージデバイス制御装置と移動先の仮想ボリュームを構成する前記ストレージデバイス制御装置の間にリンクを設定させることを特徴とする仮想ストレージシステム制御プログラム。
（付記７）  付記１乃至付記５のいずれかに記載の仮想ストレージシステム制御プログラムにおいて、
移動先の仮想ストレージクラスタは、全て同じサイズのチャンクを用いた仮想ボリュームが割り当てられ、前記リンク設定ステップは、移動元の仮想ボリュームを制御するストレージデバイス制御装置と移動先の仮想ボリュームを制御するストレージデバイス制御装置の間にリンクを設定させることを特徴とする仮想ストレージシステム制御プログラム。
（付記８）  複数の仮想ストレージクラスタから成るストレージクラスタ群のボリュームの制御を行う仮想ストレージシステム制御装置であって、
仮想ストレージクラスタに属し、該仮想ストレージクラスタ中のストレージデバイスとネットワークに接続され、該仮想ストレージクラスタ中のストレージデバイスに仮想ボリュームの割り当てを行い、該仮想ボリュームの情報を生成し、自仮想ストレージクラスタ中の仮想ボリュームと他仮想ストレージクラスタ中の仮想ボリュームとの間に前記ネットワークを介したリンクを設定し、該リンクに基づいてデータのコピーを行う複数のストレージデバイス制御部と、
前記ネットワークに接続され、仮想ストレージクラスタにより得られる前記仮想ボリュームの情報に基づいて、複数の仮想ストレージクラスタ中の前記ストレージデバイス制御部に仮想ボリューム間の前記リンクを設定させることにより仮想ボリュームの移動を指示するマネージメント部と
を備える仮想ストレージシステム制御装置。
（付記９）  付記８に記載の仮想ストレージシステム制御装置において、
更に、前記ネットワークに接続され、前記マネージメント部から得られる前記仮想ボリュームの情報に基づいて、前記仮想ボリュームへのアクセスを行うアクセス制御部を備えることを特徴とする仮想ストレージシステム制御装置。
（付記１０）  付記９に記載の仮想ストレージシステム制御装置において、
前記ストレージデバイス制御部は、前記リンクに基づいてリンク元の仮想ボリュームに対して前記アクセス制御部によるデータの更新があった場合、該データの更新をリンク先に反映させることを特徴とする仮想ストレージシステム制御装置。
（付記１１）  付記８乃至付記１０のいずれかに記載の仮想ストレージシステム制御装置において、
前記ストレージデバイス制御部は、前記マネージメント部から仮想ボリュームの移動における移動元の指示があった場合、前記マネージメント部により設定されるリンクに基づいて移動元の仮想ボリュームから移動先の仮想ボリュームへのデータのコピーを行い、該コピーの終了後に移動元の仮想ボリュームの識別子を変更することを特徴とする仮想ストレージシステム制御装置。
（付記１２）  付記８乃至付記１１のいずれかに記載の仮想ストレージシステム制御装置において、
前記ストレージデバイス制御部は、前記マネージメント部から仮想ボリュームの移動における移動先の指示があった場合、他の仮想ストレージクラスタに移動先の仮想ボリュームを割り当て、前記マネージメント部により設定されるリンクに基づいて移動元の仮想ボリュームから移動先の仮想ボリュームへのデータのコピーの終了後に前記移動先の仮想ボリュームの識別子を前記移動元の仮想ボリュームの識別子に変更することを特徴とする仮想ストレージシステム制御装置。
（付記１３）  付記８乃至付記１２のいずれかに記載の仮想ストレージシステム制御装置において、
前記マネージメント部は、移動元の仮想ボリュームが構成されているチャンクのサイズの組み合わせと同じ仮想ボリュームを移動先の仮想ストレージクラスタに割り当てさせ、該仮想ボリュームを構成するストレージデバイス制御装置の間にリンクを設定させることを特徴とする仮想ストレージシステム制御装置。
（付記１４）  付記８乃至付記１２のいずれかに記載の仮想ストレージシステム制御装置において、
前記マネージメント部は、移動先の仮想ストレージクラスタに、全て同じサイズのチャンクを用いた仮想ボリュームを割り当てさせ、複数の該仮想ボリュームの間にリンクを設定させることを特徴とする仮想ストレージシステム制御装置。
（付記１５）  複数の仮想ストレージクラスタの制御を行う仮想ストレージシステム制御方法であって、
移動先の仮想ストレージクラスタに仮想ボリュームの割り当てを行い、該仮想ボリュームの情報を生成するストレージデバイス制御ステップと、
前記ストレージデバイス制御ステップにより得られる前記仮想ボリュームの情報に基づいて、第１の仮想ストレージクラスタにおける移動元の仮想ボリュームを制御するストレージデバイス制御装置と第２の仮想ストレージクラスタにおける移動先の仮想ボリュームを制御するストレージデバイス制御装置との間にネットワークを介したリンクを設定させるリンク設定ステップと、
前記第１のストレージデバイス制御装置と前記第２のストレージデバイス制御装置に、前記リンクを用いた仮想ボリュームの移動を指示する仮想ボリューム移動指示ステップと
を実行する仮想ストレージシステム制御方法。
（付記１６）  付記１５に記載の仮想ストレージシステム制御方法において、
更に、前記リンク設定ステップの後、前記仮想ボリュームの情報に基づいて、前記仮想ボリュームへのアクセスを行うアクセス制御ステップを実行することを特徴とする仮想ストレージシステム制御方法。
（付記１７）  付記１６に記載の仮想ストレージシステム制御方法において、
更に、リンク元の仮想ボリュームに対して前記アクセス制御ステップによるデータの更新があった場合、該仮想ボリュームを持つノードが該データの更新をリンク先に反映させるリンク反映ステップを実行することを特徴とする仮想ストレージシステム制御方法。
（付記１８）  付記１５乃至付記１７のいずれかに記載の仮想ストレージシステム制御方法において、
前記仮想ボリューム移動指示ステップは、移動元の仮想ボリュームを制御するストレージデバイス制御装置に対して、移動元の仮想ボリュームから移動先の仮想ボリュームへのデータのコピーを行わせ、該コピーの終了後に移動元の仮想ボリュームの識別子を変更させることを特徴とする仮想ストレージシステム制御方法。
（付記１９）  付記１５乃至付記１８のいずれかに記載の仮想ストレージシステム制御方法において、
前記仮想ボリューム移動指示ステップは、移動先の仮想ストレージクラスタに移動先の仮想ボリュームを割り当てさせ、前記移動元の仮想ボリュームから前記移動先の仮想ボリュームへのデータのコピーの終了後に前記移動先の仮想ボリュームの識別子を前記移動元の仮想ボリュームの識別子に変更させることを特徴とする仮想ストレージシステム制御方法。
（付記２０）  付記１５乃至付記１９のいずれかに記載の仮想ストレージシステム制御方法において、
移動先の仮想ストレージクラスタには、使用するチャンクのサイズの組み合わせが同じ仮想ボリュームが割り当てられ、前記リンク設定ステップは、移動元の仮想ボリュームを制御するストレージデバイス制御装置と移動先の仮想ボリュームを制御するストレージデバイス制御装置の間にリンクを設定させることを特徴とする仮想ストレージシステム制御方法。
【図面の簡単な説明】
【０１１１】
【図１】本発明に係る仮想ストレージシステムの構成の一例を示すブロック図である。
【図２】本発明に係る仮想ストレージクラスタの構成の一例を示すブロック図である。
【図３】本発明に係るストレージノードにおけるデータアクセスの動作を示すフローチャートである。
【図４】本発明に係る仮想ボリューム情報の一例を示す表である。
【図５】本発明に係るアクセスノードによるデータアクセスの動作の一例を示すフローチャートである。
【図６】本発明に係るアクセスノードにおける要求変換の一例を示す図である。
【図７】本発明に係る仮想ボリューム移動処理の動作の一例を示すフローチャートである。
【図８】本発明に係る仮想ボリューム情報の別の一例を示す表である。
【図９】本発明に係るストレージノード毎の仮想ボリューム情報の別の一例を示す表である。
【図１０】本発明に係る仮想ストレージシステムにおける仮想ボリューム移動処理前の状態の一例を示すブロック図である。
【図１１】本発明に係る仮想ストレージシステムにおけるデータコピー中にデータ更新があった状態の一例を示すブロック図である。
【符号の説明】
【０１１２】
１０ａ，１０ｂ  仮想ストレージクラスタ、１１ａ，１１ｂ，１１ｃ，１１ｗ，１１ｘ，１１ｙ，１１ｚ  ストレージノード、１２ａ，１２ｂ，１２ｃ，１２ｗ，１２ｘ，１２ｙ，１２ｚ  ストレージデバイス、２０  ネットワーク、２１  アクセスノード、２２  マネージメントノード、２３  コンソールノード。
【図１】
0004550717.tif 000002
【図２】
0004550717.tif 000003
【図３】
0004550717.tif 000004
【図４】
0004550717.tif 000005
【図５】
0004550717.tif 000006
【図６】
0004550717.tif 000007
【図７】
0004550717.tif 000008
【図８】
0004550717.tif 000009
【図９】
0004550717.tif 000010
【図１０】
0004550717.tif 000011
【図１１】
0004550717.tif 000012