(57)【要約】【課題】論理ボリュームのスナップショットを管理している移行元ストレージ装置からコピーされるデータの量が多い。【解決手段】ホストシステムに対して一のストレージ装置として認識されるストレージクラスタとしてのストレージシステムは、１以上のスナップショットボリュームが関連付けられているプライマリボリュームを移行元プライマリボリュームとして特定し、移行元ストレージ装置（特定した移行元プライマリボリュームと１以上のスナップショットボリュームとを有するストレージ装置）から移行先ストレージ装置に、移行元プライマリボリュームと一部のスナップショットボリュームとのうち少なくとも移行元プライマリボリュームを移行する移行処理を行う。【選択図】図１
2019124983.tif 000002
【特許請求の範囲】
【請求項１】
ホストシステムに対して一のストレージ装置として認識されるストレージクラスタにおいて１以上のスナップショットボリュームが関連付けられているプライマリボリュームを移行元プライマリボリュームとして特定し、
前記移行元プライマリボリュームに関連付けられている前記１以上のスナップショットボリュームの各々は、当該スナップショットボリュームに対応した世代での移行元プライマリボリュームとの差分としての差分データを格納しており、
複数のストレージ装置のうちの、前記特定した移行元プライマリボリュームと前記１以上のスナップショットボリュームとを有するストレージ装置である移行元ストレージ装置から、前記複数のストレージ装置のうちの移行先ストレージ装置に、前記移行元プライマリボリュームと一部のスナップショットボリュームとのうち少なくとも前記移行元プライマリボリュームを移行する移行処理を行う、
記憶制御方法。
【請求項２】
前記移行処理によって前記移行先ストレージ装置に移行されたプライマリボリュームである移行先プライマリボリュームを、前記移行処理の後において前記１以上のスナップショットボリュームに関連付けられており前記ストレージクラスタにおけるプライマリボリュームとすることで、前記移行処理の後において前記ホストシステムに対して見せるボリューム構成を、前記移行処理の前において前記ホストシステムに対して見せるボリューム構成に維持する、
請求項１に記載の記憶制御方法。
【請求項３】
前記ボリューム構成を基に前記ストレージクラスタに対するボリュームの作成要求又は削除要求を前記ホストシステムから受け付ける、
請求項２に記載の記憶制御方法。
【請求項４】
前記移行処理の後に前記ストレージクラスタにおけるプライマリボリュームに対して新たにスナップショットボリュームを作成する場合、前記移行先ストレージ装置に、前記プライマリボリュームに関連付けられる新たなスナップショットボリュームを作成する、
請求項３に記載の記憶制御方法。
【請求項５】
前記移行処理の前に存在する前記１以上のスナップショットボリュームのうちのいずれかのスナップショットボリュームに対応した世代のプライマリボリュームがリストア対象の場合、当該世代に対応したスナップショットボリューム内の差分データと、当該世代に対応したスナップショットボリュームが参照する全データとを、前記移行元ストレージ装置から前記移行先ストレージ装置にコピーし、
前記移行処理の後に作成されたスナップショットボリュームに対応した世代のプライマリボリュームがリストア対象の場合、当該世代に対応したスナップショットボリューム内の差分データを、前記移行先ストレージ装置内においてコピーする、
請求項４に記載の記憶制御方法。
【請求項６】
前記ストレージクラスタにおける削除対象のスナップショットボリュームを削除し、
前記移行処理の後に前記プライマリボリュームについての少なくとも１つのスナップショットボリュームが削除されることによって前記移行元ストレージ装置において前記移行元プライマリボリュームに関連付けられているスナップショットボリュームの数がゼロになる場合、前記移行元プライマリボリュームも削除する、
請求項１に記載の記憶制御方法。
【請求項７】
下記の（ａ）及び（ｂ）のうちの少なくとも１つ、
（ａ）全てのスナップショットボリュームが削除されていないため少なくとも１つのスナップショットボリュームが関連付けられているプライマリボリュームが削除対象の場合、当該プライマリボリュームの削除を非実行とする、
（ｂ）相対的に新しいスナップショットボリュームが関連付いているスナップショットボリュームが削除対象の場合、当該スナップショットボリュームの削除を非実行とする、
を行う、
請求項６に記載の記憶制御方法。
【請求項８】
（ａ）及び（ｂ）を、保護モードがオンになっている場合に行い、
保護モードがオフになっている場合、下記を行う、
（ａ）に代えて、前記削除対象のプライマリボリュームと、当該削除対象のプライマリボリュームに関連付いている全てのスナップショットボリュームとを削除する、及び、
（ｂ）に代えて、前記削除対象のスナップショットボリュームと、当該スナップショットボリュームに関連付いている全てのスナップショットボリュームとを削除する、
請求項７に記載の記憶制御方法。
【請求項９】
前記複数のストレージ装置の各々についてＩ／Ｏ量を計測することでＩ／Ｏ量が相対的に集中しているストレージ装置を特定し、
前記特定されたストレージ装置にプライマリボリュームがあれば、当該プライマリボリュームを前記移行元プライマリボリュームとして特定する、
請求項１に記載の記憶制御方法。
【請求項１０】
前記移行処理の後に前記ホストシステムに見せる前記ボリューム構成において、前記移行処理の前に存在する前記１以上のスナップショットボリュームは、前記移行元ストレージ装置の前記１以上のスナップショットボリュームに前記移行先ストレージ装置においてそれぞれ関連付けられた１以上の仮想ボリュームである、
請求項２に記載の記憶制御方法。
【請求項１１】
ホストシステムに対して一のストレージ装置として認識されるストレージクラスタとしてのストレージシステムであって、
複数のストレージ装置を有し、
前記複数のストレージ装置のうちの少なくとも１つが、
前記ストレージクラスタにおいて１以上のスナップショットボリュームが関連付けられているプライマリボリュームを移行元プライマリボリュームとして特定し、
前記移行元プライマリボリュームに関連付けられている前記１以上のスナップショットボリュームの各々は、当該スナップショットボリュームに対応した世代での移行元プライマリボリュームとの差分としての差分データを格納しており、
前記複数のストレージ装置のうちの、前記特定した移行元プライマリボリュームと前記１以上のスナップショットボリュームとを有するストレージ装置である移行元ストレージ装置から、前記複数のストレージ装置のうちの移行先ストレージ装置に、前記移行元プライマリボリュームと前記１以上のスナップショットボリュームとのうち前記移行元プライマリボリュームのみを移行する移行処理を行う、
ストレージシステム。
【請求項１２】
ホストシステムに対して一のストレージ装置として認識されるストレージクラスタにおいて１以上のスナップショットボリュームが関連付けられているプライマリボリュームを移行元プライマリボリュームとして特定し、
前記移行元プライマリボリュームに関連付けられている前記１以上のスナップショットボリュームの各々は、当該スナップショットボリュームに対応した世代での移行元プライマリボリュームとの差分としての差分データを格納しており、
複数のストレージ装置のうちの、前記特定した移行元プライマリボリュームと前記１以上のスナップショットボリュームとを有するストレージ装置である移行元ストレージ装置から、前記複数のストレージ装置のうちの移行先ストレージ装置に、前記移行元プライマリボリュームと前記１以上のスナップショットボリュームとのうち前記移行元プライマリボリュームのみを移行する移行処理を行う、
ことをコンピュータに実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、ストレージ装置間でのデータ移行に関する。
【背景技術】
【０００２】
ストレージ装置間でデータを移行する技術が知られている。特許文献１は、次のことを開示している。移行元記憶制御装置が、移行元ボリュームと移行元スナップショットボリュームとを管理している。移行先記憶制御装置に、移行元ボリュームと移行元スナップショットボリュームに対応する移行先ボリュームと移行先スナップショットボリュームが用意される。移行対象世代の更新履歴が、移行先ボリュームへの差分データの書き込み処理として再現される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】US2009/0193206
【発明の概要】
【発明が解決しようとする課題】
【０００４】
移行元ストレージ装置において論理ボリュームのスナップショットが管理されているストレージシステムにおいて、論理ボリューム内の全データと共にスナップショットとして管理されている全差分データを移行先ストレージ装置にコピーする必要があると、コピーされるデータの量が多い。このため、ストレージ装置間の帯域が圧迫されるおそれがある。
【課題を解決するための手段】
【０００５】
ホストシステムに対して一のストレージ装置として認識されるストレージクラスタとしてのストレージシステムは、１以上のスナップショットボリュームが関連付けられているプライマリボリュームを移行元プライマリボリュームとして特定する。移行元プライマリボリュームに関連付けられている１以上のスナップショットボリュームの各々は、当該スナップショットボリュームに対応した世代での移行元プライマリボリュームとの差分としての差分データを格納している。ストレージシステムは、移行元ストレージ装置（特定した移行元プライマリボリュームと１以上のスナップショットボリュームとを有するストレージ装置）から移行先ストレージ装置に、移行元プライマリボリュームと一部のスナップショットボリュームとのうち少なくとも移行元プライマリボリュームを移行する移行処理を行う。
【発明の効果】
【０００６】
１以上のスナップショットボリュームと当該１以上のスナップショットボリュームが関連付けられているプライマリボリュームとのいずれが移行対象とされても、プライマリボリュームと１以上のスナップショットボリュームとのうちプライマリボリュームのみを移行すれば済むため、コピーするデータの量を削減することができる。
【図面の簡単な説明】
【０００７】
【図１】一実施形態に係るストレージシステムの構成を示す。
【図２】ストレージシステムを含むシステム全体の構成を示す。
【図３】ホストで実行されるコンピュータプログラムの一例を示す。
【図４】ノードで実行されるコンピュータプログラム、及び、ノードが保持するテーブルの一例を示す。
【図５】ローカル管理テーブルの構成を示す。
【図６】グローバル管理テーブルの構成を示す。
【図７】移行処理前後のローカルのＶＯＬ構成とグローバルのＶＯＬ構成とを示す。
【図８】移行処理前のローカル管理テーブルとグローバル管理テーブルとを示す。
【図９】移行処理後のローカル管理テーブルとグローバル管理テーブルとを示す。
【図１０】移行処理後にＥＶＯＬ作成処理が行われた後のローカルのＶＯＬ構成とグローバルのＶＯＬ構成とを示す。
【図１１】移行処理後にＥＶＯＬ作成処理が行われた後のローカル管理テーブルとグローバル管理テーブルとを示す。
【図１２】移行処理のフローを示す。
【図１３】ＳＳ−ＶＯＬ作成処理のフローを示す。
【図１４】ＥＶＯＬ作成処理のフローを示す。
【図１５】ＳＳ−ＶＯＬ削除処理のフローを示す。
【図１６】ＥＶＯＬ削除処理（図１５のＳ１５０３）のフローを示す。
【図１７】リストア処理のフローを示す。
【図１８】図７に例示の移行処理後にカスケード接続が行われた後のローカルのＶＯＬ構成とグローバルのＶＯＬ構成とを示す。
【図１９】移行処理後にＥＶＯＬ作成処理が行われた後のローカル管理テーブルとグローバル管理テーブルとを示す。
【発明を実施するための形態】
【０００８】
以下の説明では、「インターフェース部」は、１以上のインターフェースでよい。当該１以上のインターフェースは、１以上の同種の通信インターフェースデバイス（例えば１以上のＮＩＣ（Network Interface Card））であってもよいし２以上の異種の通信インターフェースデバイス（例えばＮＩＣとＨＢＡ（Host Bus Adapter））であってもよい。
【０００９】
また、以下の説明では、「メモリ部」は、１以上のメモリであり、典型的には主記憶デバイスでよい。メモリ部における少なくとも１つのメモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。
【００１０】
また、以下の説明では、「ＰＤＥＶ部」は、１以上のＰＤＥＶであり、典型的には補助記憶デバイスでよい。「ＰＤＥＶ」は、物理的な記憶デバイス（Physical storage DEVice）を意味し、典型的には、不揮発性の記憶デバイス、例えばＨＤＤ（Hard Disk Drive）又はＳＳＤ（Solid State Drive）である。
【００１１】
また、以下の説明では、「記憶部」は、メモリ部及びＰＤＥＶ部のうちの少なくとも１つ（典型的には少なくともメモリ部）である。
【００１２】
また、以下の説明では、「プロセッサ部」は、１以上のプロセッサである。少なくとも１つのプロセッサは、典型的には、ＣＰＵ（Central Processing Unit）のようなマイクロプロセッサであるが、ＧＵＰ（Graphics Processing Unit）のような他種のプロセッサでもよい。少なくとも１つのプロセッサは、シングルコアでもよいしマルチコアでもよい。少なくとも１つのプロセッサは、処理の一部又は全部を行うハードウェア回路（例えばＦＰＧＡ（Field-Programmable Gate Array）又はＡＳＩＣ（Application Specific Integrated Circuit））といった広義のプロセッサでもよい。
【００１３】
また、以下の説明では、「ｘｘｘテーブル」といった表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「ｘｘｘテーブル」を「ｘｘｘ情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、１つのテーブルは、２以上のテーブルに分割されてもよいし、２以上のテーブルの全部又は一部が１つのテーブルであってもよい。
【００１４】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ部によって実行されることで、定められた処理を、適宜にメモリ部及び／又はインターフェース部等を用いながら行うため、処理の主語が、プロセッサ部（或いは、そのプロセッサ部を有するコントローラのようなデバイス）とされてもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は計算機が読み取り可能な（例えば非一時的な）記録媒体であってもよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【００１５】
また、以下の説明では、「ＶＯＬ」は、論理ボリュームの略であり、論理的な記憶デバイスでよい。ＶＯＬは、実体的なＶＯＬ（ＲＶＯＬ）であってもよいし、仮想的なＶＯＬ（ＶＶＯＬ）であってもよい。「ＲＶＯＬ」は、そのＲＶＯＬを提供するストレージシステムが有する物理的な記憶資源（例えば、１以上のＲＡＩＤグループ）に基づくＶＯＬでよい。「ＶＶＯＬ」は、外部接続ＶＯＬ（ＥＶＯＬ）と、容量拡張ＶＯＬ（ＴＰＶＯＬ）と、スナップショットＶＯＬ（ＳＳ−ＶＯＬ）とのうちのいずれでもよい。ＥＶＯＬは、外部のストレージシステムの記憶空間（例えばＶＯＬ）に基づいておりストレージ仮想化技術に従うＶＯＬでよい。ＴＰＶＯＬは、複数の仮想領域（仮想的な記憶領域）で構成されており容量仮想化技術（典型的にはThin Provisioning）に従うＶＯＬでよい。ＳＳ−ＶＯＬは、オリジナルのＶＯＬのスナップショットとして提供されるＶＯＬでよい。ＳＳ−ＶＯＬは、ＲＶＯＬであってもよい。典型的には、ＳＳ−ＶＯＬは、オリジナルのＶＯＬをプライマリＶＯＬ（ＰＶＯＬ）としてセカンダリのＶＯＬに位置づけられる。「プール」は、論理的な記憶領域（例えば複数のプールＶＯＬの集合）であり、用途ごとに用意されてよい。例えば、プールとして、ＴＰプールと、スナップショットプールとのうちの少なくとも１種類があってよい。ＴＰプールは、複数の実領域（実体的な記憶領域）で構成された記憶領域でよい。ストレージシステムが、ホストシステムから受信したライト要求が指定するアドレスが属する仮想領域（ＴＰＶＯＬの仮想領域）に実領域が割り当てられていない場合、その仮想領域（ライト先仮想領域）にＴＰプールから実領域を割り当てる（ライト先仮想領域に他の実領域が割り当て済であっても実領域が新たにライト先仮想領域に割り当てられてもよい）。ストレージシステムは、割り当てられた実領域に、そのライト要求に付随するライト対象データを書き込んでよい。スナップショットプールは、ＰＶＯＬから退避されたデータが格納される記憶領域でよい。１つのプールが、ＴＰプールとしてもスナップショットプールとしても使用されてもよい。「プールＶＯＬ」は、プールの構成要素となるＶＯＬでよい。プールＶＯＬは、ＲＶＯＬであってもよいしＥＶＯＬであってもよい。
【００１６】
また、以下の説明では、「ホストシステム」は、物理的又は仮想的な１以上のホスト計算機である。
【００１７】
また、以下の説明では、「ストレージクラスタ」は、ホストシステムに認識される一のストレージ装置に相当し、実体は、ストレージシステムに相当する。「ストレージシステム」は、１以上の物理的なストレージ装置を含む。「ストレージ装置」は、記憶部を有する装置であればよく、汎用的な計算機であってもよい。少なくとも１つの物理的なストレージ装置が、仮想的な計算機（例えばＶＭ（Virtual Machine））を実行してもよいし、ＳＤｘ（Software-Defined anything）を実行してもよい。ＳＤｘとしては、例えば、ＳＤＳ（Software Defined Storage）（仮想的なストレージ装置の一例）又はＳＤＤＣ（Software-defined Datacenter）を採用することができる。例えば、同一のストレージ装置において、ホストシステムとしての仮想的な計算機と、ホストシステムからＩ／Ｏ要求を受信して処理するストレージ装置（ストレージコントローラ）としての仮想的な計算機とが実行されてもよい。また、ストレージシステムは、冗長構成グループを有してよい。冗長構成の例としては、Erasure Coding、ＲＡＩＮ（Redundant Array of Independent Nodes）及びノード間ミラーリングのように複数のノードでの構成であってもよいし、ＰＤＥＶ部で構成される１以上のＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）グループのように単一のノード内での構成でもよい。
【００１８】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号を使用し、同種の要素を区別して説明する場合は、要素のＩＤ（例えば識別番号）を使用することがある。例えば、ストレージノード（以下、ノード）を特に区別しないで説明する場合には、「ノード１０１」と記載し、個々のノードを区別して説明する場合には、「ノード＃１」、「ノード＃２」のように記載することがある。また、以下の説明では、ノード＃ｎ（ｎは自然数）内の要素の名称に＃ｎを付加することで、いずれのノードの要素であるかを区別することができる。
【００１９】
以下、本発明の一実施形態を図面に基づいて説明する。なお、本発明は、以下に説明する実施形態に限定されるものではない。
【００２０】
図１は、一実施形態に係るストレージシステムの構成を示す。
【００２１】
ストレージシステム１００は、１以上のノード１０１（１以上のストレージ装置の一例）を有する。典型的には、複数のノード１０１がある。ストレージシステム１００は、複数のノード１０１で構成されたスケールアウト型ストレージシステムのような分散ストレージシステムでよい。以下、ノード＃１が、移行元ノードであり、ノード＃２が、移行先ノードであるとする。ノード＃２がストレージシステム１００であってもよいし、ノード＃１とノード＃２を含んだ複数のノードがストレージシステム１００であってもよい。
【００２２】
本実施形態では、コンピュータプログラムがコンピュータに下記の（Ｘ）及び（Ｙ）を実行させる。なお、ここで言う「コンピュータ」は、いずれかノード１０１（例えばノード＃１又はノード＃２）であってもよいし、ストレージシステムに接続された計算機（例えば管理計算機又はホスト計算機）であってもよい。本実施形態では、コンピュータは、いずれかのノード１０１であり、コンピュータプログラムは、後述のクラスタ管理プログラム４０５でよい。また、下記において、移行元ＰＶＯＬに関連付けられている１以上のＳＳ−ＶＯＬの各々は、当該ＳＳ−ＶＯＬに対応した世代での移行元ＰＶＯＬとの差分としての差分データを格納している。差分データは、実際には、プール（スナップショットプール）に格納される。
（Ｘ）ホストシステム（以下、ホスト）に対して一のノードとして認識されるストレージクラスタとしてのストレージシステム１００において１以上のＳＳ−ＶＯＬ１０３Ｓが関連付けられているＰＶＯＬ１０３Ｐを移行元ＰＶＯＬ１０３Ｐとして特定する。
（Ｙ）特定した移行元ＰＶＯＬ１０３Ｐと１以上のＳＳ−ＶＯＬ１０３Ｓとを有するノード＃１から、ノード＃２に、移行元ＰＶＯＬ１０３Ｐと１以上のＳＳ−ＶＯＬ１０３Ｓとのうち移行元ＰＶＯＬ１０３Ｐのみを移行する移行処理（符号１０６を参照）を行う。
【００２３】
これにより、１以上のＳＳ−ＶＯＬ１０３Ｓと当該１以上のＳＳ−ＶＯＬ１０３Ｓが関連付けられているＰＶＯＬ１０３Ｐとのいずれが移行対象とされても、ＰＶＯＬ１０３Ｐのみを移行すれば移行処理が済むため、コピーするデータの量を削減することができる。一具体例として、ストレージシステム１００において、負荷を分散するためにノード＃２にＰＶＯＬ１０３Ｐを移行したい場合や、一定間隔で新しいＳＳ−ＶＯＬ１０３Ｓを作成する（更に、例えば、ＳＳ−ＶＯＬ１０３Ｓの新たな作成に伴い古い世代に対応したＳＳ−ＶＯＬ１０３Ｐを削除する）世代管理をする場合が考えられるが、このようなケースにおいて、コピーされるデータの量を低減できる。なお、上述の移行処理が行われた場合、ノード＃２の使用容量は、ＰＶＯＬ１０３Ｓの容量分増加したように見えることになる。
【００２４】
ストレージシステム１００のうちのマスタのノード１０１の一例であるノード＃２が、ホストに対してストレージクラスタにおけるＶＯＬ構成のビューであるクラスタビュー１０４を提供する。クラスタビュー１０４は、ストレージクラスタ（ストレージシステム１００）でのＶＯＬ構成を表示する。ノード＃２は、例えば、ＶＯＬ毎に、ＶＯＬ−ＩＤ（ＶＯＬのＩＤ）、種類及びノードＩＤ（ＶＯＬが存在するノードのＩＤ）を表す管理テーブル１８０を有する。ノード＃２は、移行処理によってノード＃２に移行されたＰＶＯＬ８である移行先ＰＶＯＬ８を、移行処理の後のストレージクラスタにおけるＰＶＯＬとする（例えば、管理テーブル１８０の１番目のレコードを参照）。言い換えれば、ノード＃２は、移行元ＰＶＯＬ１０３Ｐと各ＳＳ−ＶＯＬ１０３Ｓとをノード＃１に残しておき、ノード＃２において、移行先ＰＶＯＬ１０３Ｐとノード＃１におけるＳＳ−ＶＯＬ１０３Ｓとの関係を管理する。ノード＃２は、移行処理の後においてホストに対して見せるＶＯＬ構成を、移行処理の前においてホストに対して見せるＶＯＬ構成に維持する。これにより、上述したようなデータ量削減（コピーするデータの量の削減）を、ユーザ（ホスト側）のスナップショット管理の運用を変えること無しに、行うことができる。なお、クラスタビュー１０４は、例えばＧＵＩ（Graphical User Interface）である。また、クラスタビュー１０４において、ＶＯＬ構成は、ＰＶＯＬ１０３Ｓをルートとしたツリー構造でよく、各ＳＳ−ＶＯＬ１０３Ｓについては、世代の古さを表す情報、例えば、スナップショット番号（番号が小さい程世代が古い）、又は、スナップショット取得時刻が表示されてもよい。スナップショット番号は、ＳＳ−ＶＯＬ１０３ＳのグローバルなＶＯＬ−ＩＤに相当してよい。グローバルなＶＯＬ−ＩＤは、ストレージクラスタにおいて一意なＩＤでよい。異なるノード１０１において、同一のローカルなＶＯＬ−ＩＤは存在し得る。
【００２５】
ストレージシステム１００は、ＶＯＬ構成を基に（つまりクラスタビュー１０４経由で）、ストレージクラスタに対するＶＯＬの作成要求又は削除要求をホストから受け付ける。すなわち、ユーザは、いずれのＶＯＬがいずれのノード１０１に存在するかといったことを意識すること無しに、ＶＯＬの作成や削除を要求できる。
【００２６】
例えば、移行処理の後に、新たにＳＳ−ＶＯＬを作成することの要求（符号１０７を参照）を受けた場合、ノード＃２は、ノード＃２に、ＰＶＯＬ１０３Ｐに関連付けられる新たなＳＳ−ＶＯＬ１０３Ｓを作成する（符号１０８を参照）。これにより、移行処理の後にはＰＶＯＬ１０３Ｐについてノード＃１にＳＳ−ＶＯＬ１０３Ｓが増えることを避けることができる。このため、後の説明からわかるように、リストアの効率化と及び容量の効率化とのうちの少なくとも１つが期待できる。
【００２７】
移行処理の前に存在するＳＳ−ＶＯＬ２（スナップショット番号“２”のＳＳ−ＶＯＬ）に対応した世代のＰＶＯＬをリストア対象としたリストア要求（符号１１１を参照）を受けた場合（例えばクラスタビュー１０４経由で受けた場合）、ノード＃２は、ＳＳ−ＶＯＬ２内の差分データと、ＳＳ−ＶＯＬ２が参照する全データ（例えば、移行元ＰＶＯＬ１０３Ｐ内のデータ）とを、ノード＃１からノード＃２（典型的には、移行先ＰＶＯＬ１０３Ｐ又はそれの複製ＶＯＬ）にコピーする（符号１１２を参照）。このように、リストア対象の世代に対応したＳＳ−ＶＯＬがノード＃１にある場合、リストアにおいてコピーされるデータの量は多い。一方、移行処理の後に作成されたＳＳ−ＶＯＬ３に対応した世代のＰＶＯＬをリストア対象としたリストア要求（符号１１３を参照）を受けた場合、ノード＃２は、ＳＳ−ＶＯＬ２内の差分データと、ＳＳ−ＶＯＬ３内の差分データを、ノード＃２内においてコピー（典型的には、移行先ＰＶＯＬ１０３Ｐ又はそれの複製ＶＯＬにコピー）する（符号１１４を参照）。このように、リストア対象の世代に対応したＳＳ−ＶＯＬがノード＃２にある場合、リストアにおいてコピーされるデータは差分データのみのため、コピーされるデータの量は比較的少ない。古い世代に対応したＳＳ−ＶＯＬほどリストア対象とされる可能性が低い（例えば、削除される可能性が高い）と考えられる。このため、上述したように、移行処理の後にはノード＃２に新たなＳＳ−ＶＯＬが作成されるようになっていることで、リストアに時間を要する可能性を低減することが期待できる。
【００２８】
上述した移行処理は、１以上のＳＳ−ＶＯＬ１０３Ｓと当該１以上のＳＳ−ＶＯＬ１０３Ｓが関連付けられているＰＶＯＬ１０３Ｐとのいずれかを移行対象とする明示的な移行要求を受けた場合（例えば管理計算機から受けた場合）に行われてもよいが、そのような移行要求を受けること無しに自動で（例えばバックグラウンド処理で）行われてもよい。例えば、複数のノード１０１の各々が当該ノード１０１についてＩ／Ｏ量（例えば単位時間当たりのＩ／Ｏ量）を計測するようになっていて、ノード＃２が、Ｉ／Ｏ量が相対的に集中しているノード＃１を複数のノード１０１から特定してよい（符号１１６を参照）。ノード＃２が、特定したノード＃１にＰＶＯＬ１０３Ｐがあれば、当該ＰＶＯＬ１０３Ｐを移行元ＰＶＯＬ１０３Ｐして特定し、上述した移行処理を行ってよい。このように移行処理が行われた場合、Ｉ／Ｏ量がノード＃１とノード＃２間で分散することになるので、移行処理が負荷分散を兼ねることができる。なお、ノード１０１の「Ｉ／Ｏ量」は、そのノード１０１に対する１以上のＩ／Ｏ要求に従うＩ／Ｏの量でよい。「Ｉ／Ｏ量」として、「Ｉ／Ｏ数」及び「Ｉ／Ｏサイズ」の少なくとも１つを採用することができる。「Ｉ／Ｏ数」は、Ｉ／Ｏ要求の数でよい。「Ｉ／Ｏサイズ」は、計測対象の全Ｉ／Ｏ要求に従うＩ／Ｏ対象のデータのサイズ（例えば、合計サイズ、最大サイズ又は平均サイズ）でよい。
【００２９】
また、本実施形態では、下記のうちの少なくとも１つが行われてもよい。
・移行処理において、ＰＶＯＬ１０３Ｐに加えて、一部のＳＳ−ＶＯＬ１０３Ｓがノード＃１からノード＃２に移行されてもよい。当該ＰＶＯＬ１０３Ｐに加えて当該ＰＶＯＬ１０３Ｐに関連付けられている全てのＳＳ−ＶＯＬ１０３Ｓが移行されることに比べて、コピーされるデータの量の削減を維持できる。
・移行処理では、ＰＶＯＬ１０３Ｐ（及び一部のＳＳ−ＶＯＬ１０３Ｓ）が移行されるが、移行処理の後に、ノード＃１及び＃２のうちの両方（又は一方）の負荷が小さいにときに残りのＳＳ−ＶＯＬ１０３Ｓ内の差分データが徐々にノード＃２に移行されてもよい。
・移行処理の後において、ノード＃１に残っているＳＳ−ＶＯＬ１０３Ｓとホストと間のパスは維持される。これにより、ホストは、移行されたＰＶＯＬに関連付いた当該残っているＳＳ−ＶＯＬに対するＩ／Ｏのためにノード＃１にＩ／Ｏ要求を発行する。
・移行処理の後において、ノード＃１に残っているＳＳ−ＶＯＬ１０３Ｓに対応したＥＶＯＬがノード＃２に用意され、ＥＶＯＬとホスト間にパスが形成される。これにより、ホストは、移行されたＰＶＯＬに関連付いた当該残っているＳＳ−ＶＯＬに対するＩ／Ｏのためにノード＃２にＩ／Ｏ要求（ＥＶＯＬを指定したＩ／Ｏ要求）を発行する。
・移行処理の後において、ノード＃１に残っているＳＳ−ＶＯＬ１０３Ｓ内の差分データが、ノード＃２における移行先ＰＶＯＬとノード＃１に残っている移行元ＰＶＯＬとのうちの少なくとも１つに書き戻される。
【００３０】
以下、本実施形態を詳細に説明する。
【００３１】
図２は、ストレージシステム１００を含むシステム全体の構成を示す。
【００３２】
ストレージシステム１００は、ホスト２０１からのＩ／Ｏ要求に基づきＶＯＬに対するＩ／Ｏを行う。ストレージシステム１００は、ネットワーク２２０に接続された複数のノード１０１を含む。ネットワーク２２０として、例えば、ＳＡＮ（Storage Area Network）２２０Ｓ及びＬＡＮ（Local Area Network）２２０Ｌといったフロントエンドのネットワークと、ＬＡＮ２２０Ｂといったバックエンドのネットワークとがある。
【００３３】
各ノード１０１は、ＳＡＮポート２２３、ＬＡＮポート２２４及び２２６、ＰＤＥＶ２２５、メモリ２２２及びそれらに接続されたＣＰＵ２２１を有する。ＳＡＮポート２２３、ＬＡＮポート２２４及び２２６は、インターフェース部の一例である。ＰＤＥＶ２２５は、ＰＤＥＶ部の一例である。メモリ２２２は、メモリ部の一例である。ＣＰＵ２２１は、プロセッサ部の一例である。
【００３４】
１以上のホスト２０１の各々が、フロントエンドのネットワークの一例であるＬＡＮ２２０Ｌ及びＳＡＮ２２０Ｓに接続される。ホスト２０１は、ＶＯＬに属するアドレスを指定したＩ／Ｏ要求をストレージシステム１００に発行する。ホスト２０１は、ＳＡＮポート２１３、ＬＡＮポート２１４、ＰＤＥＶ２１５、メモリ２１２及びそれらに接続されたＣＰＵ２１１を有する。
【００３５】
図３は、ホスト２０１で実行されるコンピュータプログラムの一例を示す。
【００３６】
ホスト２０１において、メモリ２１２が、アプリケーションプログラム３０１、ＶＯＬ管理プログラム３０２及びパス管理プログラム３０３を格納する。ＣＰＵ２１１が、これらのプログラム３０１〜３０３を実行する。
【００３７】
アプリケーションプログラム３０１は、ＶＯＬに対するＩ／Ｏ要求を発行する。ＶＯＬ管理プログラム３０２は、ＶＯＬとＶＯＬ−ＩＤ（グローバルのＶＯＬ−ＩＤ）とを管理する。パス管理プログラム３０３は、ＶＯＬへのパス（Ｉ／Ｏパス）、例えば、使用されるパスやその交替パスを管理する。なお、ＶＯＬ管理プログラム３０２及びパス管理プログラム３０３は、ストレージシステム１００（又はそれの管理計算機）からの指示に応答してＶＯＬへのパスを切り替えてもよい。
【００３８】
図４は、ノード１０１で実行されるコンピュータプログラム、及び、ノード１０１が保持するテーブルの一例を示す。
【００３９】
ノード１０１において、メモリ２２２が、Ｉ／Ｏプログラム４０１、パス管理プログラム４０２、スナップショットプログラム４０３、コピープログラム４０４、クラスタ管理プログラム４０５及びＥＶＯＬ管理プログラム４０６を格納する。ＣＰＵ２２１が、これらのプログラム４０１〜４０６を実行する。また、メモリ２２２は、ローカル管理テーブル４０７及びグローバル管理テーブル４０８を格納する。グローバル管理テーブル４０８は、図１に示した管理テーブル１８０のより詳細なテーブルに相当する。なお、ノード１０１における一部のプログラム（ＥＶＯＬ管理プログラム４０６）が無くてもよい（オプションでもよい）。
【００４０】
Ｉ／Ｏプログラム４０１は、ホスト２０１からのＩ／Ｏ要求を処理する。パス管理プログラム４０２は、いずれのホスト２０１にいずれのＶＯＬをいずれのパスで提供するかを制御する。スナップショットプログラム４０３は、ＳＳ−ＶＯＬ（スナップショット）の作成と削除を行う。コピープログラム４０４は、ＰＶＯＬの移行（データコピー）を行う。クラスタ管理プログラム４０５は、ストレージクラスタにおけるＶＯＬ構成を管理する。クラスタ管理プログラム４０５は、例えば、各ノード１０１に存在するが、マスタのノード１０１で実行され（アクティブ）、マスタのノード１０１以外の各ノード１０１では、待機状態である（スタンバイ）。ＥＶＯＬ管理プログラム４０６は、指定されたＶＯＬに基づくＥＶＯＬの作成と削除を行う。
【００４１】
ローカル管理テーブル４０７は、ノード１０１内での各ＶＯＬに関する情報を保持する。グローバル管理テーブル４０８は、ストレージクラスタでの各ＶＯＬに関する情報を保持する。各ノード１０１のグローバル管理テーブル４０８の情報は同じに維持される。具体的には、例えば、いずれかのノード１０１においてグローバル管理テーブル４０８が更新された場合、その更新が各他のノード１０１のグローバル管理テーブル４０８に反映される。
【００４２】
図５は、ローカル管理テーブル４０７の構成を示す。
【００４３】
ローカル管理テーブル４０７は、当該テーブル４０７を有するノード１０１内のＶＯＬ毎にレコードを有する。各レコードは、ローカルＶＯＬ−ＩＤ５０１、種類５０２、親ローカルＶＯＬ−ＩＤ５０３、世代番号５０４、転送先ノードＩＤ５０５、転送先ローカルＶＯＬ−ＩＤ５０６及びアクセス制限５０７といった情報を格納する。以下、１つのノード１０１と１つのＶＯＬを例に取る（図５の説明において「対象ノード１０１」及び「対象ＶＯＬ」）。
【００４４】
ローカルＶＯＬ−ＩＤ５０１は、対象ＶＯＬの対象ノード１０１内でのＶＯＬ−ＩＤを示す。種類５０２は、対象ＶＯＬの種類（例えば、ＰＶＯＬ、ＳＳ−ＶＯＬ及びＥＶＯＬのいずれであるか）を示す。親ローカルＶＯＬ−ＩＤ５０３は、対象ＶＯＬの親ＶＯＬのローカルＶＯＬ−ＩＤを示す。世代番号５０４は、対象ＶＯＬにより管理される親ＶＯＬの世代の番号を示す。本実施形態では、番号が小さい程世代が古い。転送先ノードＩＤ５０５及び転送先ローカルＶＯＬ−ＩＤ５０６は、いずれも、対象ＶＯＬがＥＶＯＬである場合に有効な情報である。転送先ノードＩＤ５０５は、対象ＶＯＬに外部接続されたＶＯＬ（ＥＶＯＬの基になるＶＯＬ）を有するノード（転送先ノード）のＩＤを示す。転送先ローカルＶＯＬ−ＩＤ５０６は、対象ＶＯＬに外部接続されたＶＯＬのローカルＶＯＬ−ＩＤ（転送先ノード内でのＶＯＬ−ＩＤ）を示す。アクセス制限５０７は、対象ＶＯＬについていずれのホスト２０１又はいずれのノード１０１のアクセスが許可又は禁止されるかといった制限を示す。許可又は禁止は、ライトやリードといったアクセス種類別にされてもよい。
【００４５】
なお、「親ＶＯＬ」とは、対象ＶＯＬ（ＳＳ−ＶＯＬ）のオリジナルのＶＯＬである。オリジナルのＶＯＬは、典型的にはＰＶＯＬであるが、後述するように、ＳＳ−ＶＯＬであることもある（つまり、ＳＳ−ＶＯＬのスナップショットが作成されることもある）。親ＶＯＬに対して対象ＶＯＬは「子ＶＯＬ」である。また、対象ＶＯＬの親ＶＯＬやそこから先の親ＶＯＬの全てのいずれかを「先祖ＶＯＬ」と言い、対象ＶＯＬの子ＶＯＬやそこから先の子ＶＯＬの全てのいずれかを「子孫ＶＯＬ」と言うことができる。
【００４６】
図６は、グローバル管理テーブル４０８の構成を示す。
【００４７】
グローバル管理テーブル４０８は、ストレージクラスタ内のＶＯＬ毎にレコードを有する。各レコードは、グローバルＶＯＬ−ＩＤ６０１、ノードＩＤ６０２、ローカルＶＯＬ−ＩＤ６０３、種類６０４、親グローバルＶＯＬ−ＩＤ６０５、世代番号６０６、転送先ノードＩＤ６０７、転送先ローカルＶＯＬ−ＩＤ６０８及びアクセス制限６０９といった情報を格納する。以下、１つのＶＯＬを例に取る（図６の説明において「対象ＶＯＬ」）。
【００４８】
グローバルＶＯＬ−ＩＤ６０１は、対象ＶＯＬのストレージクラスタ内でのＶＯＬ−ＩＤを示す。ノードＩＤ６０２は、対象ＶＯＬを有するノードのＩＤを示す。ローカルＶＯＬ−ＩＤ６０３は、対象ＶＯＬのローカルＶＯＬ−ＩＤを示す。種類６０４は、対象ＶＯＬの種類を示す。親グローバルＶＯＬ−ＩＤ６０５は、対象ＶＯＬの親ＶＯＬのグローバルＶＯＬ−ＩＤを示す。世代番号６０６は、対象ＶＯＬにより管理される親ＶＯＬの世代の番号を示す。転送先ノードＩＤ６０７は、対象ＶＯＬに外部接続されたＶＯＬを有するノード（転送先ノード）のＩＤを示す。転送先ローカルＶＯＬ−ＩＤ６０８は、対象ＶＯＬに外部接続されたＶＯＬのローカルＶＯＬ−ＩＤ（転送先ノード内でのＶＯＬ−ＩＤ）を示す。アクセス制限６０９は、対象ＶＯＬについていずれのホスト２０１又はいずれのノード１０１のアクセスが許可又は禁止されるかといった制限を示す。許可又は禁止は、ライトやリードといったアクセス種類別にされてもよい。
【００４９】
以下、本実施形態で行われる処理の一例を説明する。
【００５０】
図７は、移行処理前後のローカルのＶＯＬ構成とグローバルのＶＯＬ構成とを示す。図８は、移行処理前のローカル管理テーブル＃１及び＃２とグローバル管理テーブル＃２とを示す。図９は、移行処理後のローカル管理テーブル＃１及び＃２とグローバル管理テーブル＃２とを示す。なお、図７（及び、図１０及び図１８）において、ノード＃１及び＃２におけるＶＯＬのカッコ内の数字は、ローカルＶＯＬ−ＩＤであり、クラスタビュー１０４内のＶＯＬの数字は、グローバルＶＯＬ−ＩＤである（図１では、説明を簡単にするためにグローバルＶＯＬ−ＩＤを使用しローカルＶＯＬ−ＩＤを使用していない）。以下、ローカルＶＯＬ−ＩＤを用いてＶＯＬを指す場合は、カッコを使用し、グローバルＶＯＬ−ＩＤを用いてＶＯＬを指す場合は、カッコを使用しないこととする。また、上述したように、ノード＃ｎ内の構成要素（例えばテーブルやプログラム）には、参照符号に代えて＃ｎを使用することがある。
【００５１】
移行処理前では、ノード＃１が、ＰＶＯＬ（１）と、ＰＶＯＬ（１）のスナップショットであるＳＳ−ＶＯＬ（２）及び（３）を有するとする。ノード＃２が、いずれのＶＯＬも有していないとする。このため、移行処理前は、図８に示すテーブルが保持されている。ノード＃２（マスタのノードの一例）が、クラスタ管理テーブル＃２を基にクラスタビュー１０４を提供する。クラスタビュー１０４は、例えばクラスタ管理プログラム＃２により提供される。クラスタビュー１０４では、ＰＶＯＬ８について２つのＳＳＶＯＬ１及び２が存在する。クラスタビュー１０４は、例えば、ＰＶＯＬ８にパスが接続されているホスト２０１（以下、対象ホスト２０１）、又は、ストレージシステム１００の管理計算機（図示せず）に表示される。
【００５２】
クラスタビュー１０４経由でＳＳ−ＶＯＬ１を指定したＶＯＬ移行指示が出されたとする。当該ＶＯＬ移行指示を、ノード＃２が受ける。当該ＶＯＬ移行指示に応答して移行処理が行われる。移行処理は、例えば次の通りである。すなわち、ノード＃２が、グローバル管理テーブル＃２を基に、当該ＶＯＬ移行指示で指定されているＳＳ−ＶＯＬ１がＳＳ−ＶＯＬ（２）としてノード＃１に存在することを特定し、ＳＳ−ＶＯＬ（２）の親ＶＯＬであるＰＶＯＬ（１）を移行元ＰＶＯＬと特定する。ノード＃２が、ＰＶＯＬ（１）に対応したＰＶＯＬ（２）をノード＃２内に用意する。ノード＃１におけるＰＶＯＬ（１）からノード＃２におけるＰＶＯＬ（２）へのデータコピーが、ノード＃１及び＃２の少なくとも１つにより行われる。ノード＃２は、ＰＶＯＬ（２）を、ノード＃１内のＰＶＯＬ（１）に代えて、ＰＶＯＬ８とする（図９参照）。
【００５３】
移行処理後に、クラスタビュー１０４経由でＰＶＯＬ８の新たなスナップショット作成指示が出されたとする。当該スナップショット作成指示を、ノード＃２が受ける。当該スナップショット作成指示に応答してスナップショット作成処理が行われる。スナップショット作成処理は、例えば次の通りである。すなわち、ノード＃２が、グローバル管理テーブル＃２を基に、ＰＶＯＬ８としてのＰＶＯＬがノード＃２に存在していることを特定する。ノード＃２は、特定したノード＃２におけるＰＶＯＬ（２）について新たなＳＳ−ＶＯＬ（３）を作成する。新たなＳＳ−ＶＯＬ（３）に関する情報は、ローカル管理テーブル＃２にもグローバル管理テーブル＃２にも反映される（図９参照）。結果として、ＳＳ−ＶＯＬ（３）は、クラスタビュー１０４において、ＰＶＯＬ８の新たなＳＳ−ＶＯＬ３として見える。
【００５４】
図１０は、移行処理後にＥＶＯＬ作成処理が行われた後のローカルのＶＯＬ構成とグローバルのＶＯＬ構成とを示す。図１１は、移行処理後にＥＶＯＬ作成処理が行われた後のローカル管理テーブル＃１及び＃２とグローバル管理テーブル＃２とを示す。
【００５５】
ＰＶＯＬ８の新たなＳＳ−ＶＯＬ３が作成された後のクラスタビュー１０４経由で、例えばノード＃１に代えてノード＃２の機能を利用するといった理由から、ＰＶＯＬ８についてＥＶＯＬ作成指示が出されたとする。当該ＥＶＯＬ作成指示を、ノード＃２が受ける。当該ＥＶＯＬ作成指示に応答してＥＶＯＬ作成処理が行われる。ＥＶＯＬ作成処理は、例えば次の通りである。すなわち、ノード＃２が、グローバル管理テーブル＃２を基に、ＰＶＯＬ８に関連付いた全ＳＳ−ＶＯＬのうちノード＃１に存在するＳＳ−ＶＯＬ（２）及び（３）を特定する。ノード＃２は、特定したＳＳ−ＶＯＬ（２）及び（３）にそれぞれ対応したＥＶＯＬ（４）及び（５）をノード＃２に作成する。ＥＶＯＬ（４）及び（５）に関する情報は、ローカル管理テーブル＃２にもグローバル管理テーブル＃２にも反映される（図１１参照）。しかし、クラスタビュー１０４は、ＥＶＯＬ作成処理の前後で変化しない。つまり、ストレージクラスタ全体としては、ＥＶＯＬの有無に関わらず、ＰＶＯＬ８を親ＶＯＬとする３つのＳＳ−ＶＯＬ１、２及び３が存在するといったＶＯＬ構成に変化は無い。
【００５６】
図１２は、ＶＯＬ移行指示に応答して行われる移行処理のフローを示す。
【００５７】
クラスタ管理プログラム＃２は、ＶＯＬ移行指示を受信した場合（Ｓ１２０１）、グローバル管理テーブルを参照し、ＶＯＬ移行指示で特定されているＶＯＬのグローバルＶＯＬ−ＩＤに対応したＶＯＬを有するノードを特定する（Ｓ１２０２）。特定されたノードがノード＃１であるとする。また、当該ＶＯＬがＰＶＯＬであれば、ＰＶＯＬのローカルＶＯＬ−ＩＤが特定される。また、当該ＶＯＬがＳＳ−ＶＯＬであれば、当該ＳＳ−ＶＯＬの親ＶＯＬであるＰＶＯＬのローカルＶＯＬ−ＩＤが特定される。当該ＰＶＯＬが移行元ＰＶＯＬである。ＶＯＬ移行指示で、移行先ノードのノードＩＤが指定されていてもよいし、マスタのノードであるノード＃２が移行先ノードであってもよい。
【００５８】
クラスタ管理プログラム＃２は、ノード＃１のコピープログラム＃１に、ＰＶＯＬのコピー指示を送信する（Ｓ１２０３）。当該コピー指示に応答して、コピープログラム＃１が、移行元ＰＶＯＬから、ノード＃２に用意された移行先ＰＶＯＬにデータをコピーする。移行先ＰＶＯＬは、コピープログラム＃１からの指示に応答して用意されたＶＯＬでよい。コピープログラム＃１は、コピーを終えた場合、完了応答を返す。クラスタ管理プログラム＃２は、コピープログラム＃１から完了応答を受信する（Ｓ１２０４）。
【００５９】
クラスタ管理プログラム＃２は、移行元ノード＃１のパス管理プログラム＃１にパス削除指示を送信し、移行先ノード＃２のパス管理プログラム＃２にパス追加指示を送信する（Ｓ１２０５）。これにより、ＰＶＯＬ（１）とホスト＃１（ＰＶＯＬ（１）へのアクセスが許可されているホスト）とを結ぶパスが削除される（例えば、ノード＃１のＰＶＯＬ（１）とホスト＃１との間のパスが削除される）。また、ノード＃２のＰＶＯＬ（２）とホスト＃１とを結ぶパスが作成される。なお、このようなパス削除及びパス追加は、例えば、パス削除指示を受けたパス管理プログラム＃１がホスト＃１にパスの削除を指示し、且つ、パス追加指示を受けたパス管理プログラム＃２がホスト＃１にパスの追加を指示することで、ホスト＃１との連携によって行われてよい。パス削除が終わると、パス管理プログラム＃１は、完了応答を返す。パス追加が終わると、パス管理プログラム＃２は、完了応答を返す。クラスタ管理プログラム＃２は、パス管理プログラム＃１及び＃２から完了応答を受信する（Ｓ１２０６）。
【００６０】
クラスタ管理プログラム＃２は、ストレージクラスタにおける移行対象のＰＶＯＬに関する情報をグローバル管理テーブル＃２（及びローカル管理テーブル＃２）に追加する（Ｓ１２０７）。例えば、図７〜図９が示す例によれば、ＰＶＯＬ８に対応したノードＩＤ及びローカルＶＯＬ−ＩＤが、“１”及び“１”から“２”及び“２”に更新される。また、ＰＶＯＬ８に対応したＰＶＯＬ（２）に関する情報がローカル管理テーブル＃２に記録される。
【００６１】
クラスタ管理プログラム＃２は、アクセス制限５０７及び６０９を更新する（Ｓ１２０８）。具体的には、クラスタ管理プログラム＃２は、ＰＶＯＬ（２）のアクセス制限５０７及び６０９を“ホスト＃１に許可”に更新する。なお、ノード＃１では、ＰＶＯＬ（１）のアクセス制限５０７は“アクセス禁止”に更新される（図９参照）。
【００６２】
クラスタ管理プログラム＃２は、ＥＶＯＬ作成か否かを判断する（Ｓ１２０９）。例えば下記のうちのいずれかに該当する場合、Ｓ１２０９の判断結果が真である。
・Ｓ１２０１のＶＯＬ作成指示に、ＥＶＯＬ作成の指示が含まれている。
・ＰＶＯＬの移行処理において移行元ノード＃１内のＳＳ−ＶＯＬのＥＶＯＬを作成するか否かのＥＶＯＬ作成モードがオンとなっている。
・移行元ノード＃１がノード＃２にやがてリプレースされることになっている。
【００６３】
Ｓ１２０９の判断結果が真の場合（Ｓ１２０９：ＹＥＳ）、クラスタ管理プログラム＃２は、図１４のＥＶＯＬ作成処理を行う（Ｓ１２１０）。
【００６４】
クラスタ管理プログラム＃２は、パス管理プログラム＃２に、パス切替え指示を送信する（Ｓ１２１１）。パス管理プログラム＃２は、パス切替え指示に応答して、追加されたパスをアクティブにする指示を出すホスト＃１（例えばパス管理プログラム３０３）に出すことでパス切り替えを行う。パス管理プログラム＃２は、パスの切り替えを終えたら、完了応答を返す。クラスタ管理プログラム＃２は、完了応答を受信する（Ｓ１２１２）。
【００６５】
クラスタ管理プログラム＃２は、Ｓ１２０１のＶＯＬ移行指示に対する完了応答を返す（Ｓ１２１３）。
【００６６】
ＥＶＯＬが作成されれば、ホストから移行元ノード＃１内のＳＳ−ＶＯＬへのアクセスは移行先ノード＃２を経由する。これにより、ノード＃２が、実質的に、ストレージクラスタにおける全ＶＯＬを管理することができ、単一のノード＃２をストレージシステム１００として構成することが期待できる。
【００６７】
図１３は、ＳＳ−ＶＯＬ作成処理のフローを示す。
【００６８】
クラスタ管理プログラム＃２は、スナップショット作成指示を、例えばクラスタビュー１０４経由で受信する（Ｓ１３０１）。スナップショット作成指示では、例えば、スナップショット作成対象のＰＶＯＬのグローバルＶＯＬ−ＩＤが指定されている。クラスタ管理プログラム＃２は、グローバル管理テーブル＃２を参照し、当該グローバルＶＯＬ−ＩＤを基に、スナップショット作成対象のＰＶＯＬを有するノードを特定する（Ｓ１３０２）。例えば、図７に例示の移行処理の後であれば、Ｓ１３０２で特定されるノードは、ノード＃２である。クラスタ管理プログラム＃２は、特定したノード＃２のスナップショットプログラム＃２にＳＳ−ＶＯＬ作成指示を送信する（Ｓ１３０３）。ＳＳ−ＶＯＬ作成指示では、例えば、スナップショット作成対象のＰＶＯＬのローカルＶＯＬ−ＩＤが指定される。
【００６９】
スナップショットプログラム＃２は、クラスタ管理プログラム＃２からＳＳ−ＶＯＬの作成指示を受信する（Ｓ１３０４）。スナップショットプログラム＃２は、ローカル管理テーブル＃２を参照し、スナップショット作成対象のＰＶＯＬのローカルＶＯＬ−ＩＤを基に、対象ＰＶＯＬを特定する（Ｓ１３０５）。スナップショットプログラム＃２は、ローカル管理テーブル＃２に、新たなＳＳ−ＶＯＬに関する情報を追加する（Ｓ１３０６）。スナップショットプログラム＃２は、完了応答を返す（Ｓ１３０７）。
【００７０】
クラスタ管理プログラム＃２は、スナップショットプログラム＃２から完了応答を受信する（Ｓ１３０８）。クラスタ管理プログラム＃２は、グローバル管理テーブル＃２に、新たなＳＳ−ＶＯＬに関する情報を追加する（Ｓ１３０９）。
【００７１】
図１４は、ＥＶＯＬ作成処理のフローを示す。
【００７２】
クラスタ管理プログラム＃２は、移行対象のＰＶＯＬについて移行元ノード＃１にある全ＳＳ−ＶＯＬを対象にしたＥＶＯＬ作成指示をＥＶＯＬ管理プラグラム＃２に送信する（Ｓ１４０１）。ＥＶＯＬ作成指示では、例えば、移行対象のＰＶＯＬについて移行元ノード＃１にある全ＳＳ−ＶＯＬの各々のローカルＶＯＬ−ＩＤが指定される。ＥＶＯＬ管理プラグラム＃２は、当該ＥＶＯＬ作成指示に応答して、移行対象のＰＶＯＬについて移行元ノード＃１にある全ＳＳ−ＶＯＬにそれぞれ対応したＥＶＯＬを作成し、完了応答を返す。クラスタ管理プログラム＃２は、ＥＶＯＬ管理プログラム＃２から完了応答を受信する（Ｓ１４０２）。
【００７３】
クラスタ管理プログラム＃２は、移行元ノード＃１のパス管理プログラム＃１にパス削除指示を送信し、移行先ノード＃２のパス管理プログラム＃２にパス追加指示を送信する（Ｓ１４０３）。これにより、ノード＃１のＳＳ−ＶＯＬ（１）とホスト＃１とを結ぶパスが削除される。また、ノード＃２のＥＶＯＬとホスト＃１とを結ぶパスが作成される。パス削除が終わると、パス管理プログラム＃１は、完了応答を返す。パス追加が終わると、パス管理プログラム＃２は、完了応答を返す。クラスタ管理プログラム＃２は、パス管理プログラム＃１及び＃２から完了応答を受信する（Ｓ１４０４）。
【００７４】
クラスタ管理プログラム＃２は、グローバル管理テーブル＃２（及び、ローカル管理テーブル＃２）に、作成されたＥＶＯＬに関する情報（例えば図１１参照）を追加する（Ｓ１４０５）。また、クラスタ管理プログラム＃２は、ＥＶＯＬのアクセス制限５０７及び６０９を“ホスト＃１に許可”とする（Ｓ１４０６）。
【００７５】
図１５は、ＳＳ−ＶＯＬのグローバルＶＯＬ−ＩＤを指定した削除指示に応答して行われるＳＳ−ＶＯＬ削除処理のフローを示す。
【００７６】
クラスタ管理プログラム＃２は、ＳＳ−ＶＯＬの削除指示を、例えばクラスタビュー１０４経由で、受信する（Ｓ１５０１）。クラスタ管理プログラム＃２は、グローバル管理テーブル＃２を参照し、グローバルＶＯＬ−ＩＤに対応したＳＳ−ＶＯＬを有するノード（図１５及び図１６の説明において対象ノード）を特定する（Ｓ１５０２）。その後、クラスタ管理プログラム＃２は、ＥＶＯＬ削除処理（Ｓ１５０３）に入る。
【００７７】
Ｓ１５０３の後、クラスタ管理プログラム＃２は、対象ノードのスナップショットプログラム４０３にＳＳ−ＶＯＬ削除指示を送信する（Ｓ１５０４）。当該ＳＳ−ＶＯＬ削除指示では、例えば、削除対象のＳＳ−ＶＯＬのローカルＶＯＬ−ＩＤが指定される。スナップショットプログラム４０３は、当該ＳＳ−ＶＯＬ削除指示に応答して、指定されたＳＳ−ＶＯＬを対象ノードから削除し、完了応答を返す。クラスタ管理プログラム＃２は、対象ノードのスナップショットプログラム４０３から完了応答を受信する（Ｓ１５０５）。クラスタ管理プログラム＃２は、グローバル管理テーブル＃２から、削除対象のＳＳ−ＶＯＬに関する情報を削除する（Ｓ１５０６）。
【００７８】
クラスタ管理プログラム＃２は、グローバル管理テーブル＃２を参照し、削除対象のＳＳ−ＶＯＬの親ＶＯＬは移行元ノードにあるか否かを判断する（Ｓ１５０７）。Ｓ１５０７の判断結果が偽の場合（Ｓ１５０７：ＮＯ）、クラスタ管理プログラム＃２は、Ｓ１５０１の削除指示に対する完了応答を返す（Ｓ１５１２）。
【００７９】
Ｓ１５０７の判断結果が真の場合（Ｓ１５０７：ＹＥＳ）、クラスタ管理プログラム＃２は、グローバル管理テーブル＃２を参照し、削除対象のＳＳ−ＶＯＬの親ＶＯＬに未だ他のＳＳ−ＶＯＬが関連付けられているか否かを判断する（Ｓ１５０８）。Ｓ１５０８の判断結果が真の場合（Ｓ１５０８：ＹＥＳ）、クラスタ管理プログラム＃２は、Ｓ１５０１の削除指示に対する完了応答を返す（Ｓ１５１２）。
【００８０】
Ｓ１５０８の判断結果が偽の場合（Ｓ１５０８：ＮＯ）、クラスタ管理プログラム＃２は、対象ノードのＩ／Ｏプログラム４０１に、削除対象ＳＳ−ＶＯＬの親ＶＯＬの削除指示を送信する（Ｓ１５０９）。当該削除指示に応答して、Ｉ／Ｏプログラム４０１が、削除対象ＳＳ−ＶＯＬの親ＶＯＬを削除し、完了応答を返す。クラスタ管理プログラム＃２は、Ｉ／Ｏプログラム４０１から完了応答を受信する（Ｓ１５１０）。クラスタ管理プログラム＃２は、削除された親ＶＯＬに関する情報をグローバル管理テーブル＃２から削除する（Ｓ１５１１）。
【００８１】
図１５によれば、移行元ノードにおいて、移行元ＰＶＯＬに関連付けられているＳＳ−ＶＯＬの数がゼロになる場合、ＳＳ−ＶＯＬに加えて移行元ＰＶＯＬも削除される。これにより、ストレージシステム１００全体の使用記憶容量を低減でき、且つ、移行先ノードにＰＶＯＬが残っているためリストアを可能な状態も維持できる。
【００８２】
図１６は、ＥＶＯＬ削除処理（図１５のＳ１５０３）のフローを示す。
【００８３】
クラスタ管理プログラム＃２は、グローバル管理テーブル＃２を参照し、削除対象のＳＳ−ＶＯＬにＥＶＯＬが対応しているか否かを判断する（Ｓ１６０１）。Ｓ１６０１の判断結果が偽の場合（Ｓ１６０１：ＮＯ）、処理を終了する。
【００８４】
Ｓ１６０１の判断結果が真の場合（Ｓ１６０１：ＹＥＳ）、クラスタ管理プログラム＃２は、削除対象のＳＳ−ＶＯＬに対応したＥＶＯＬを指定した削除指示を、当該ＥＶＯＬを有するノードのＥＶＯＬ管理プログラム４０６に送信する（Ｓ１６０２）。当該削除指示に応答して、ＥＶＯＬ管理プログラム４０６は、指定されたＥＶＯＬを削除し、完了応答を返す。クラスタ管理プログラム＃２は、ＥＶＯＬ管理プログラム４０６から完了応答を受信する（Ｓ１６０３）。
【００８５】
クラスタ管理プログラム＃２は、グローバル管理テーブル＃２を参照し、削除されたＥＶＯＬの転送先ノード（削除対象のＳＳ−ＶＯＬを有するノード）と削除対象のＳＳ−ＶＯＬとを特定する（Ｓ１６０４）。クラスタ管理プログラム＃２は、グローバル管理テーブル＃２から、削除されたＥＶＯＬに関する情報を削除する（１６０５）。
【００８６】
図１７は、リストア処理のフローを示す。
【００８７】
クラスタ管理プログラム＃２は、ＳＳ−ＶＯＬのグローバルＶＯＬ−ＩＤを指定したリストア指示を、例えばクラスタビュー１０４経由で、受信する（Ｓ１７０１）。
【００８８】
クラスタ管理プログラム＃２は、グローバル管理テーブル＃２を参照し、グローバルＶＯＬ−ＩＤを基に、リストア対象のＳＳ−ＶＯＬを有するノード（以下、図１７の説明において「対象ノード」）を特定する（Ｓ１７０２）。
【００８９】
クラスタ管理プログラム＃２は、リストア対象のＳＳ−ＶＯＬとそれの親ＶＯＬであるＰＶＯＬ（ストレージクラスタでのＰＶＯＬ）とが同一ノードにあるか否か、すなわち、リストア対象のＳＳ−ＶＯＬの親ＶＯＬとしてのＰＶＯＬが対象ノードにあるか否かを判断する（Ｓ１７０３）。
【００９０】
Ｓ１７０３の判断結果が真の場合（Ｓ１７０３：ＹＥＳ）、クラスタ管理プログラム＃２は、対象ノードのスナップショットプログラム４０３に、差分データ（リストア対象のＳＳ−ＶＯＬ内のデータ）の書き戻し指示を送信する（Ｓ１７０４）。当該書き戻し指示に応答して、スナップショットプログラム４０３が、ＰＶＯＬに差分データを書き戻し、完了応答を返す。クラスタ管理プログラム＃２は、対象ノードのスナップショットプログラム４０３から完了応答を受信する（Ｓ１７０５）。その後、クラスタ管理プログラム＃２は、Ｓ１７０１のリストア指示に対する完了応答を返す（Ｓ１７０８）。
【００９１】
Ｓ１７０３の判断結果が偽の場合（Ｓ１７０３：ＮＯ）、クラスタ管理プログラム＃２は、対象ノードのコピープログラム４０４に、リストア対象のＳＳ−ＶＯＬの移行先ノードへの全コピー指示を送信する（Ｓ１７０６）。当該全コピー指示に応答して、コピープログラム４０４が、リストア対象のＳＳ−ＶＯＬ内の差分データと、対象ノードのＰＶＯＬ内のデータのうちの差分データ以外の全データとを、移行先ノードにコピーし、完了応答を返す。クラスタ管理プログラム＃２は、対象ノードのコピープログラム４０４から完了応答を受信する（Ｓ１７０７）。その後、クラスタ管理プログラム＃２は、Ｓ１７０１のリストア指示に対する完了応答を返す（Ｓ１７０８）。
【００９２】
本実施形態では、ＶＯＬ構成として、ＰＶＯＬを先頭に２以上のＳＳ−ＶＯＬがカスケード状に並んだ構成も採用することが可能である。
【００９３】
図１８は、図７に例示の移行処理後にカスケード接続が行われた後のローカルのＶＯＬ構成とグローバルのＶＯＬ構成とを示す。図１９は、移行処理後にＥＶＯＬ作成処理が行われた後のローカル管理テーブル＃１及び＃２とグローバル管理テーブル＃２とを示す。
【００９４】
移行処理後に新たに２以上のＳＳ−ＶＯＬ（３）〜（５）をカスケード状にＰＶＯＬ（２）に対して関連付けることができる。具体的には、新たなＳＳ−ＶＯＬの親ＶＯＬを或る既存のＳＳ−ＶＯＬとすることができる。カスケード構成のＳＳ−ＶＯＬは、移行元ノード＃１に元から存在してもよい。既存のＳＳ−ＶＯＬが親ＶＯＬとなるＳＳ−ＶＯＬに対応した世代番号５０４及び６０６は、当該既存のＳＳ−ＶＯＬを世代番号０とした番号となる。このため、例えば、当該既存のＳＳ−ＶＯＬについてのＳＳ−ＶＯＬが初めて作成された場合、初めて作成されたＳＳ−ＶＯＬの世代番号５０４及び６０６はそれぞれ“１”である（図１９参照）。
【００９５】
なお、少なくともカスケード構成に関し、下記の（Ｘ）〜（Ｚ）のいずれかを採用することができる。
【００９６】
＜（Ｘ）保護優先＞
・ノード＃２は、カスケード構成中のＰＶＯＬに対してＳＳ−ＶＯＬを作成する場合、ＰＶＯＬが存在するノード＃２にＳＳ−ＶＯＬを作成する。当該作成されたＳＳ−ＶＯＬの世代番号は、既存のＳＳ−ＶＯＬの世代番号を考慮した番号とすることができる。
・ノード＃２は、カスケード構成中の或るＳＳ−ＶＯＬに対してＳＳ−ＶＯＬを作成する場合、当該或るＳＳ−ＶＯＬが存在するノードに、ＳＳ−ＶＯＬを作成する。当該作成されたＳＳ−ＶＯＬの世代番号は、親ＶＯＬとされたＳＳ−ＶＯＬの世代番号を考慮した番号とすることができる。
・ノード＃２は、カスケード構成中のＰＶＯＬが削除対象とされ、当該ＰＶＯＬに少なくとも１つの子孫ＳＳ−ＶＯＬが存在する場合、削除を実行しない（例えば、ユーザ（削除の指示元の一例）にエラーを返す）。ノード＃２は、全ての子孫ＳＳ−ＶＯＬが削除されるまでＰＶＯＬの削除を受け付けない。これにより、残っている子孫ＳＳ−ＶＯＬに対応した世代のＰＶＯＬをリストアできないといったことを避けることができる。
・ノード＃２は、カスケード構成中のＳＳ−ＶＯＬが削除対象とされたが削除対象のＳＳ−ＶＯＬに少なくとも１つの子孫ＳＳ−ＶＯＬが存在する場合、削除を実行しない（例えば、ユーザにエラーを返す）。ノード＃２は、全ての子孫ＳＳ−ＶＯＬが削除されるまで親ＳＳ−ＶＯＬの削除を受け付けない。これにより、残っている子孫ＳＳ−ＶＯＬに対応した世代のＰＶＯＬをリストアできないといったことを避けることができる。
・ノード＃２は、カスケード構成中のＳＳ−ＶＯＬから先祖ＰＶＯＬに対してリストアを実行する場合、次の処理を行う。すなわち、移行元ノード＃１に存在するＳＳ−ＶＯＬがリストア対象の場合、ノード＃２は、全データの書き戻しを行う。移行先ノード＃２に存在するＳＳ−ＶＯＬがリストア対象の場合、ノード＃２は、差分データの書き戻しを行う。
【００９７】
＜（Ｙ）指示優先＞
・ノード＃２は、カスケード構成中のＰＶＯＬに対してＳＳ−ＶＯＬを作成する場合、ＰＶＯＬが存在するノード＃２にＳＳ−ＶＯＬを作成する。当該作成されたＳＳ−ＶＯＬの世代番号は、既存のＳＳ−ＶＯＬの世代番号を考慮した番号とすることができる。
・ノード＃２は、カスケード構成中の或るＳＳ−ＶＯＬに対してＳＳ−ＶＯＬを作成する場合、当該或るＳＳ−ＶＯＬが存在するノードに、ＳＳ−ＶＯＬを作成する。当該作成されたＳＳ−ＶＯＬの世代番号は、親ＶＯＬとされたＳＳ−ＶＯＬの世代番号を考慮した番号とすることができる。
・ノード＃２は、カスケード構成中のＰＶＯＬが削除対象とされた場合、当該ＰＶＯＬに少なくとも１つの子孫ＳＳ−ＶＯＬが存在する場合、当該ＰＶＯＬと当該ＰＶＯＬの全ての子孫ＳＳ−ＶＯＬとを削除する。
・ノード＃２は、カスケード構成中のＳＳ−ＶＯＬが削除対象とされたが削除対象のＳＳ−ＶＯＬに少なくとも１つの子孫ＳＳ−ＶＯＬが存在する場合、当該ＳＳ−ＶＯＬと当該ＳＳ−ＶＯＬの全ての子孫ＳＳ−ＶＯＬとを削除する。
・ノード＃２は、カスケード構成中のＳＳ−ＶＯＬから先祖ＰＶＯＬに対してリストアを実行する場合、次の処理を行う。すなわち、移行元ノード＃１に存在するＳＳ−ＶＯＬがリストア対象の場合、ノード＃２は、全データの書き戻しを行う。移行先ノード＃２に存在するＳＳ−ＶＯＬがリストア対象の場合、ノード＃２は、差分データの書き戻しを行う。
【００９８】
＜（Ｚ）保護優先と指示優先の選択＞
・ノード＃２が、保護モードがオンかオフかを管理する。保護モードがオンの場合、上述の「（Ｘ）保護優先」が採用される。保護モードがオフの場合、上述の「（Ｙ）指示優先」が採用される。例えば、保護モードがオフになっている場合、ノード＃２は、削除対象のＰＶＯＬと当該ＰＶＯＬの全子孫ＳＳ−ＶＯＬとを削除したり、削除対象のＳＳ−ＶＯＬと当該ＳＳ−ＶＯＬの全子孫ＳＳ−ＶＯＬとを削除したりする。これにより、柔軟な記憶制御を提供することができる。
【００９９】
以上、本発明の一実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。例えば、ストレージクラスタでの各ＳＳ−ＶＯＬの世代番号が、クラスタビュー１０４において表示されてよい。
【符号の説明】
【０１００】
１０１…ノード
【図１】
2019124983.tif 000003
【図２】
2019124983.tif 000004
【図３】
2019124983.tif 000005
【図４】
2019124983.tif 000006
【図５】
2019124983.tif 000007
【図６】
2019124983.tif 000008
【図７】
2019124983.tif 000009
【図８】
2019124983.tif 000010
【図９】
2019124983.tif 000011
【図１０】
2019124983.tif 000012
【図１１】
2019124983.tif 000013
【図１２】
2019124983.tif 000014
【図１３】
2019124983.tif 000015
【図１４】
2019124983.tif 000016
【図１５】
2019124983.tif 000017
【図１６】
2019124983.tif 000018
【図１７】
2019124983.tif 000019
【図１８】
2019124983.tif 000020
【図１９】
2019124983.tif 000021