(57)【要約】  スナップショットを格納するボリュームのスナップショットを作成すると共に、応答時間を抑える。  プロセッサは、複数のボリュームの中の対象ボリューム内の対象スロットへのライトデータをホスト計算機から受信する場合、対象ボリューム内の対象スロットのデータが確定していないことを管理情報へ記録し、メモリ内の対象キャッシュ領域へライトデータを書き込み、ホスト計算機へ応答を送信する。プロセッサは、対象ボリューム内の対象スロット内の対象データを参照する前に、管理情報に基づいて、対象データが確定しているか否かを判定する。対象データが確定していないと判定された場合、プロセッサは、対象データを確定させるための確定処理を行い、対象データを参照する。
2017119065.tif 000002
【特許請求の範囲】
【請求項１】
記憶デバイスと、
メモリと、
前記記憶デバイス、前記メモリ、及びホスト計算機に接続されるプロセッサと、
を備え、
前記プロセッサは、前記記憶デバイスを用いるプールを作成し、
前記プロセッサは、複数のボリュームを作成し、各ボリュームは、複数のスロットを含み、前記複数のボリュームは、ルートボリュームと、複数の仮想ボリュームとを含み、各仮想ボリュームは、指示された時点における、前記複数のボリュームのうち他の一つの親ボリュームのスナップショットを格納し、
前記プロセッサは、各仮想ボリューム内の複数のスロットを、対応する親ボリューム内の複数のスロットに夫々関連付け、
前記プロセッサは、各仮想ボリューム内のデータを格納するスロットを、前記プール内のプール領域に関連付け、
前記プロセッサは、前記親ボリュームと対応する仮想ボリュームとの間の差分データを、前記プールへ書き込み、
前記プロセッサは、前記複数のボリュームと前記プールの関係を示す管理情報を、前記メモリへ記録し、
前記プロセッサは、前記複数のボリュームの中の対象ボリューム内の対象スロットへのライトデータを前記ホスト計算機から受信する場合、前記対象ボリューム内の対象スロットのデータが確定していないことを前記管理情報へ記録し、前記メモリ内の対象キャッシュ領域へ前記ライトデータを書き込み、前記ホスト計算機へ応答を送信し、
前記プロセッサは、前記対象ボリューム内の対象スロット内の対象データを参照する前に、前記管理情報に基づいて、前記対象データが確定しているか否かを判定し、
前記対象データが確定していないと判定された場合、前記プロセッサは、前記対象データを確定させるための確定処理を行い、前記対象データを参照し、
前記確定処理は、前記管理情報に基づいて、前記対象ボリューム内の対象スロットのデータを格納するコピー元ボリュームを選択し、前記管理情報に基づいて、前記コピー元ボリューム内の対象スロット内のコピー元データが確定しているか否かを判定し、
前記コピー元データが確定していると判定された場合、前記確定処理は、前記対象データを退避させるための退避処理を行い、前記対象データを更新するためのマージ処理を行い、前記対象データが確定していることを前記管理情報へ記録し、
前記退避処理は、前記管理情報に基づいて、前記対象データの退避が必要であるか否かを判定し、
前記対象データの退避が必要であると判定された場合、前記退避処理は、前記対象データを前記プールへ書き込み、
前記マージ処理は、前記コピー元データと前記ライトデータとをマージすることでマージデータを生成し、前記マージデータを前記プールへ書き込む、
ストレージ装置。
【請求項２】
前記コピー元データが確定していないと判定された場合、前記確定処理は、前記コピー元データを確定させるための確定処理を行う、
請求項１に記載のストレージ装置。
【請求項３】
前記コピー元データが確定していると判定された場合、前記確定処理は、前記管理情報に基づいて、前記対象ボリュームのスナップショットを格納する退避先ボリュームを選択し、前記管理情報に基づいて、前記対象データの退避が必要であるか否かを判定し、
前記対象データの退避が必要であると判定された場合、前記確定処理は、前記プール内の退避先プール領域を、前記退避先ボリューム内の対象スロットに関連付け、前記コピー元データを前記退避先プール領域へ書き込み、前記マージデータを前記プール内の更新先プール領域を、前記対象ボリューム内の対象スロットに関連付け、前記マージデータを前記更新先プール領域へ書き込む、
請求項２に記載のストレージ装置。
【請求項４】
前記確定処理は、前記対象キャッシュ領域のうち、前記ライトデータにより更新されるアドレス範囲以外である維持アドレス範囲を特定し、前記コピー元データのうち前記維持アドレス範囲内のデータを、前記対象キャッシュ領域のうち前記維持アドレス範囲へ書き込むことで、前記マージデータを生成する、
請求項３に記載のストレージ装置。
【請求項５】
前記プロセッサは、前記対象データを参照する場合、前記対象データに対する確定処理を行う第一ジョブを起動し、
前記コピー元データが確定していないと判定された場合、前記第一ジョブは、前記コピー元データに対する確定処理の第二ジョブを起動し、待機し、
前記第二が終了した場合、前記第一ジョブは、再起動する、
請求項４に記載のストレージ装置。
【請求項６】
前記確定処理は、前記管理情報に基づいて、前記対象ボリューム以後の世代のボリュームであって、対象スロット内のデータが確定していないボリュームのうち、最新の世代のボリュームを、未確定ボリュームとして選択する処理と、前記未確定ボリュームに対する退避処理と、前記未確定ボリュームに対するマージ処理とを、前記未確定ボリュームが無くなるまで繰り返す、
請求項４に記載のストレージ装置。
【請求項７】
前記確定処理は、前記管理情報に基づいて、前記対象ボリューム以後の世代のボリュームであって、対象スロット内のデータが確定していないボリュームを、最新の世代のボリュームから順に、未確定ボリュームとして選択し、前記未確定ボリュームに対するコピー元ボリュームと、前記未確定ボリュームに対する少なくとも一つの退避先ボリュームと、前記未確定ボリュームに対する少なくとも一つの更新先ボリュームとを選択し、前記コピー元ボリューム内の対象スロット内のデータを、前記メモリ内のテンポラリ領域へ読み出し、
前記退避処理は、前記テンポラリ領域内のデータを、前記少なくとも一つの退避先ボリューム内の対象スロットに関連付けられた退避先プール領域へ書き込み、
前記マージ処理は、前記テンポラリ領域内のデータと前記ライトデータとをマージすることで前記マージデータを生成し、前記マージデータを、前記少なくとも一つの更新先ボリューム内の対象スロットに関連付けられた更新先データ領域へ書き込み、
請求項４に記載のストレージ装置。
【請求項８】
前記確定処理は、前記少なくとも一つの退避先ボリュームの夫々に対する退避処理のジョブを起動し、
前記確定処理は、前記少なくとも一つの更新先ボリュームの夫々に対するマージ処理のジョブを起動する、
請求項７に記載のストレージ装置。
【請求項９】
前記確定処理は、前記管理情報に基づいて、前記対象ボリューム以後の世代のボリュームであって、対象スロット内のデータが確定していないボリュームを、最新の世代のボリュームから順に、未確定ボリュームとして選択し、前記未確定ボリュームに対するコピー元ボリュームと、前記未確定ボリュームに対する少なくとも一つの退避先ボリュームと、前記未確定ボリュームに対する少なくとも一つの更新先ボリュームとを選択し、前記コピー元ボリューム内の対象スロット内のデータを、前記メモリ内のテンポラリ領域へ読み出し、
前記退避処理は、前記プールから前記退避先プール領域を確保し、前記テンポラリ領域内のデータを、退避先プール領域へ書き込み、前記退避先プール領域を、前記少なくとも一つの退避先ボリュームの夫々の中の対象スロットに関連付け、
前記マージ処理は、前記テンポラリ領域内のデータと前記ライトデータとをマージすることで前記マージデータを生成し、前記マージデータを、前記少なくとも一つの更新先ボリューム内の対象スロットに関連付けられた更新先データ領域へ書き込む、
請求項４に記載のストレージ装置。
【請求項１０】
前記プロセッサは、前記ライトデータの書き込みの時点と、スナップショットの世代との順序を示す識別番号を、前記管理情報へ記録し、
前記確定処理は、前記ライトデータの書き込みの識別番号と、前記対象ボリュームのスナップショットを格納するスナップショットの識別番号とを比較することで、前記ライトデータの時点の直前のスナップショットのボリュームを、前記退避先ボリュームとして選択する、
請求項３に記載のストレージ装置。
【請求項１１】
前記対象ボリュームのスナップショットの作成の後に、前記コピー元データ及び前記対象データが更新されていない状態で、前記ライトデータが受信された場合、前記退避処理は、前記対象データの退避が必要であると判定する、
請求項１に記載のストレージ装置。
【請求項１２】
前記プロセッサは、前記管理情報に基づいて、スナップショットを作成する指示を受信した場合、前記スナップショットの親ボリュームが、他のボリュームのスナップショットを格納するか否かを示す情報を、表示デバイスに表示させる、
請求項１に記載のストレージ装置。
【請求項１３】
前記プロセッサは、前記管理情報に基づいて、前記複数のボリュームの間のスナップショットの関係を示す情報を、表示デバイスに表示させる、
請求項１に記載のストレージ装置。
【請求項１４】
記憶デバイス、メモリ、及びホスト計算機に接続されるプロセッサに、プロセスを実行させるプログラムを格納するコンピュータ読み取り可能な記録媒体であって、前記プロセスは、
前記記憶デバイスを用いるプールを作成し、
複数のボリュームを作成し、各ボリュームは、複数のスロットを含み、前記複数のボリュームは、ルートボリュームと、複数の仮想ボリュームとを含み、各仮想ボリュームは、指示された時点における、前記複数のボリュームのうち他の一つの親ボリュームのスナップショットを格納し、
各仮想ボリューム内の複数のスロットを、対応する親ボリューム内の複数のスロットに夫々関連付け、
各仮想ボリューム内のデータを格納するスロットを、前記プール内のプール領域に関連付け、
前記親ボリュームと対応する仮想ボリュームとの間の差分データを、前記プールへ書き込み、
前記複数のボリュームと前記プールの関係を示す管理情報を、前記メモリへ記録し、
前記複数のボリュームの中の対象ボリューム内の対象スロットへのライトデータを前記ホスト計算機から受信する場合、前記対象ボリューム内の対象スロットのデータが確定していないことを前記管理情報へ記録し、前記メモリ内の対象キャッシュ領域へ前記ライトデータを書き込み、前記ホスト計算機へ応答を送信し、
前記対象ボリューム内の対象スロット内の対象データを参照する前に、前記管理情報に基づいて、前記対象データが確定しているか否かを判定し、
前記対象データが確定していないと判定された場合、前記対象データを確定させるための確定処理を行い、前記対象データを参照する、
ことを備え、
前記確定処理は、前記管理情報に基づいて、前記対象ボリューム内の対象スロットのデータを格納するコピー元ボリュームを選択し、前記管理情報に基づいて、前記コピー元ボリューム内の対象スロット内のコピー元データが確定しているか否かを判定し、
前記コピー元データが確定していると判定された場合、前記確定処理は、前記対象データを退避させるための退避処理を行い、前記対象データを更新するためのマージ処理を行い、前記対象データが確定していることを前記管理情報へ記録し、
前記退避処理は、前記管理情報に基づいて、前記対象データの退避が必要であるか否かを判定し、
前記対象データの退避が必要であると判定された場合、前記退避処理は、前記対象データを前記プールへ書き込み、
前記マージ処理は、前記コピー元データと前記ライトデータとをマージすることでマージデータを生成し、前記マージデータを前記プールへ書き込む、
記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置に関する。
【背景技術】
【０００２】
特許文献１には、ストレージ装置において、正ボリュームのスナップショットイメージを副ボリュームに作成し、正ボリュームの更新時にＣＡＷ（Copy after write）を用いる技術が記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特表２０１４―５０７６９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
前述のようなスナップショットの技術は、スナップショットを作成した後に正ボリュームが更新されると、更新の後に、更新による差分データを副ボリュームへ書き込む。そのため、更に副ボリュームのスナップショットを作成することは困難である。
【課題を解決するための手段】
【０００５】
上記課題を解決するために、本発明の一態様であるストレージ装置は、記憶デバイスと、メモリと、前記記憶デバイス、前記メモリ、及びホスト計算機に接続されるプロセッサと、を備える。前記プロセッサは、前記記憶デバイスを用いるプールを作成し、前記プロセッサは、複数のボリュームを作成し、各ボリュームは、複数のスロットを含み、前記複数のボリュームは、ルートボリュームと、複数の仮想ボリュームとを含み、各仮想ボリュームは、指示された時点における、前記複数のボリュームのうち他の一つの親ボリュームのスナップショットを格納し、前記プロセッサは、各仮想ボリューム内の複数のスロットを、対応する親ボリューム内の複数のスロットに夫々関連付け、前記プロセッサは、各仮想ボリューム内のデータを格納するスロットを、前記プール内のプール領域に関連付け、前記プロセッサは、前記親ボリュームと対応する仮想ボリュームとの間の差分データを、前記プールへ書き込み、前記プロセッサは、前記複数のボリュームと前記プールの関係を示す管理情報を、前記メモリへ記録し、前記プロセッサは、前記複数のボリュームの中の対象ボリューム内の対象スロットへのライトデータを前記ホスト計算機から受信する場合、前記対象ボリューム内の対象スロットのデータが確定していないことを前記管理情報へ記録し、前記メモリ内の対象キャッシュ領域へ前記ライトデータを書き込み、前記ホスト計算機へ応答を送信し、前記プロセッサは、前記対象ボリューム内の対象スロット内の対象データを参照する前に、前記管理情報に基づいて、前記対象データが確定しているか否かを判定し、前記対象データが確定していないと判定された場合、前記プロセッサは、前記対象データを確定させるための確定処理を行い、前記対象データを参照する。前記確定処理は、前記管理情報に基づいて、前記対象ボリューム内の対象スロットのデータを格納するコピー元ボリュームを選択し、前記管理情報に基づいて、前記コピー元ボリューム内の対象スロット内のコピー元データが確定しているか否かを判定し、前記コピー元データが確定していると判定された場合、前記確定処理は、前記対象データを退避させるための退避処理を行い、前記対象データを更新するためのマージ処理を行い、前記対象データが確定していることを前記管理情報へ記録し、前記退避処理は、前記管理情報に基づいて、前記対象データの退避が必要であるか否かを判定し、前記対象データの退避が必要であると判定された場合、前記退避処理は、前記対象データを前記プールへ書き込み、前記マージ処理は、前記コピー元データと前記ライトデータとをマージすることでマージデータを生成し、前記マージデータを前記プールへ書き込む。
【発明の効果】
【０００６】
スナップショットを格納するボリュームのスナップショットを作成できると共に、応答時間を抑えることができる。
【図面の簡単な説明】
【０００７】
【図１】計算機システムの構成を示す。
【図２】スナップショットの概要を示す。
【図３】ＳＳ制御情報と実体位置検索処理の概要を示す。
【図４】カスケード型スナップショットの概要を示す。
【図５】スナップショット構造の概要を示す。
【図６】ＣＡＷの概要を示す。
【図７】カスケード型スナップショットにおけるＣＡＷ解消処理の概要を示す。
【図８】管理情報１１１の第一部分を示す。
【図９】管理情報１１１の第二部分を示す。
【図１０】管理情報１１１の第三部分を示す。
【図１１】実施例１のＣＡＷ解消処理の概要を示す。
【図１２】実施例１のＣＡＷ解消ジョブを示す。
【図１３】実体位置検索処理を示す。
【図１４】旧データ退避処理を示す。
【図１５】マージコピー処理を示す。
【図１６】実施例２のＣＡＷ解消処理の概要を示す。
【図１７】実施例２のＣＡＷ解消ジョブを示す。
【図１８】実施例２のＣＡＷ解消対象判定処理を示す。
【図１９】実施例２の第二実体位置検索処理を示す。
【図２０】実施例３のＣＡＷ解消処理の概要を示す。
【図２１】コピーリスト４１０を示す。
【図２２】実施例３のＣＡＷ解消ジョブを示す。
【図２３】実施例３のコピーリスト作成処理の第一部分を示す。
【図２４】実施例３のコピーリスト作成処理の第二部分を示す。
【図２５】実施例３のコピー対象ボリューム設定処理を示す。
【図２６】実施例３のコピー元Ｒｅａｄ処理を示す。
【図２７】実施例３の旧データ退避先Ｗｒｉｔｅ処理を示す。
【図２８】実施例３のマージコピー先Ｗｒｉｔｅ処理を示す。
【図２９】実施例３の終了判定処理を示す。
【図３０】実施例３の変形例の概要を示す。
【図３１】実施例３の変形例のＣＡＷ解消ジョブを示す。
【図３２】実施例４のＣＡＷ解消処理の概要を示す。
【図３３】実施例４のＣＡＷ解消ジョブを示す。
【図３４】実施例４の旧データＷｒｉｔｅ処理を示す。
【図３５】実施例４の退避先設定処理を示す。
【発明を実施するための形態】
【０００８】
以下、図面を参照して本発明の実施形態を説明する。
【０００９】
以下の説明では、「×××テーブル」の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「×××テーブル」を「×××情報」と呼ぶことができる。また、以下の説明において、各テーブルの構成は一例であり、１つのテーブルは、２以上のテーブルに分割されてもよいし、２以上のテーブルの全部又は一部が１つのテーブルであってもよい。
【００１０】
また、以下の説明では、要素の識別情報として、ＩＤが使用されるが、それに代えて又は加えて他種の識別情報が使用されてもよい。
【００１１】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号又は参照符号における共通番号を使用し、同種の要素を区別して説明する場合は、その要素の参照符号を使用又は参照符号に代えてその要素に割り振られたＩＤを使用することがある。
【００１２】
また、以下の説明では、Ｉ／Ｏ（Input/Output）要求は、ライト要求又はリード要求であり、アクセス要求と呼ばれてもよい。
【００１３】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Central Processing Unit））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又はインターフェースデバイス（例えば通信ポート）等を用いながら行うため、処理の主語がプロセッサとされてもよい。プログラムを主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置が行う処理又はシステムとしてもよい。また、プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な記憶メディアであってもよい。プログラムソースがプログラム配布サーバの場合、プログラム配布サーバはプロセッサ（例えばＣＰＵ）と記憶資源を含み、記憶資源はさらに配布プログラムと配布対象であるプログラムとを記憶してよい。そして、プログラム配布サーバのプロセッサが配布プログラムを実行することで、プログラム配布サーバのプロセッサは配布対象のプログラムを他の計算機に配布してよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【００１４】
また、以下の説明では、管理システムは、一以上の計算機を含んでいてもよい。具体的には、例えば、管理計算機が情報を表示する場合（具体的には、例えば、管理計算機が自分の表示デバイスに情報を表示する、或いは、管理計算機が表示用情報を遠隔の表示用計算機に送信する場合）、管理計算機が管理システムである。また、例えば、複数の計算機で管理計算機と同等の機能が実現されている場合は、当該複数の計算機（表示を表示用計算機が行う場合は表示用計算機を含んでよい）が、管理システムである。管理計算機（例えば管理システム）は、表示システムを含むＩ／Ｏシステムに接続されたインタフェースデバイスと、記憶資源（例えばメモリ）と、インタフェースデバイス及び記憶資源に接続されたプロセッサとを有してよい。表示システムは、管理計算機が有する表示デバイスでもよいし、管理計算機に接続された表示用計算機でもよい。Ｉ／Ｏシステムは、管理計算機が有するＩ／Ｏデバイス（例えばキーボード及びポインティングデバイス、タッチパネル）でもよいし、管理計算機に接続された表示用計算機又は別の計算機でもよい。管理計算機が「表示用情報を表示する」ことは、表示システムに表示用情報を表示することであり、これは、管理計算機が有する表示デバイスに表示用情報を表示することであってもよいし、管理計算機が表示用計算機に表示用情報を送信することであってもよい（後者の場合は表示用計算機によって表示用情報が表示される）。また、管理計算機が情報を入出力するとは、管理計算機が有するＩ／Ｏデバイスとの間で情報の入出力を行うことであってもよいし、管理計算機に接続された遠隔の計算機（例えば表示用計算機）との間で情報の入出力を行うことであってもよい。情報の出力は、情報の表示であってもよい。
【実施例１】
【００１５】
図１は、計算機システムの構成を示す。【００１６】
計算機システムは、ストレージ装置１０と、ホスト計算機２０と、管理端末３０とを含む。管理端末３０は、通信ネットワークを介してホスト計算機２０に接続されていてもよい。【００１７】
ホスト計算機２０は、ストレージ装置１０へＷＲ（Write）要求を送信することで、ストレージ装置１０へデータを書き込む。また、ストレージ装置１０へＲＤ（Read）要求を送信することで、ストレージ装置１０からデータを読み出す。【００１８】
管理端末３０は、メモリとＣＰＵと通信Ｉ／Ｆと入力デバイスと表示デバイスとを含む。管理端末３０において、ＣＰＵは、メモリに格納される管理プログラム３１を実行することで処理を行う。例えば、管理端末３０は、管理者から入力デバイスへ入力されるストレージ装置１０の設定情報を受け付け、その設定情報をストレージ装置１０へ送信する。また、管理端末３０は、ストレージ装置１０の状態情報をストレージ装置１０から受信し、その状態情報を表示デバイスに表示させる。【００１９】
ストレージ装置１０は、コントローラ１００と、記憶デバイス２００とを含む。記憶デバイス２００は、複数のディスク２１０を含む。【００２０】
コントローラ１００は、メモリ１１０と、ＣＰＵ１２０と、ブリッジ１３０と、上位Ｉ／Ｆ１４０と、下位Ｉ／Ｆ１５０と、通信Ｉ／Ｆ１６０とを含む。【００２１】
ＣＰＵ１２０は、メモリ１１０内のプログラムに従って処理を行う。例えば、ＣＰＵ１２０は、ディスク２１０を用いてプール２２０を作成する。ブリッジ１３０は、コントローラ１００の各部を接続する。上位Ｉ／Ｆ１４０は、通信ネットワークを介してホスト計算機２０に接続されている。下位Ｉ／Ｆ１５０は、ディスク２１０に接続されている。通信Ｉ／Ｆ１６０は、通信ネットワークを介して管理端末３０に接続されている。【００２２】
メモリ１１０は、管理情報１１１と、コピー処理プログラム１１２と、Ｉ／Ｏ処理プログラム１１３と、キャッシュ領域１１４とを格納する。【００２３】
管理情報１１１は、ディスク２１０に格納されるデータを管理するための情報である。コピー処理プログラム１１２は、複数のディスク２１０の間でデータをコピーする。Ｉ／Ｏ処理プログラム１１３は、ホスト計算機２０からの要求に応じてＩ／Ｏ処理を行う。キャッシュ領域１１４は、Ｉ／Ｏ処理によりホスト計算機２０と送受信されるデータを一時的に格納する。【００２４】
図２は、スナップショットの概要を示す。【００２５】
Ｉ／Ｏ処理プログラム１１３は、ディスク２１０を用いて論理ボリューム又は仮想ボリュームを作成する。Ｉ／Ｏ処理プログラム１１３は、プールとなる論理ボリュームを作成し、Thin Provisioningにより、プール内の記憶領域を仮想ボリュームに割り当てる。コピー処理プログラム１１２は、正ボリュームと副ボリュームをペアとして設定する。これにより、ストレージ装置１０は、瞬時に正ボリュームの複製を副ボリュームに作成することができる。以後、正ボリュームをＰ−ＶＯＬ（Primary Volume）と呼ぶことがあり、副ボリュームをＳ−ＶＯＬ（Secondary Volume）と呼ぶことがある。【００２６】
正ボリューム内の或る領域へのＷｒｉｔｅが行われる場合、コピー処理プログラム１１２は、Ｗｒｉｔｅによる正ボリュームと副ボリュームの間の差分データをプールへ書き込み、プール内の差分データの実体位置を示す実体位置情報を記録する。その後、副ボリューム内の当該領域が参照される前に、Ｉ／Ｏ処理プログラム１１３は、実体位置を検索し、実体位置情報に基づいてプール内の実体位置の差分データを参照する。コピー処理プログラム１１２は、実体位置情報を含むＳＳ（Snapshot）制御情報を、プールに格納する。データの実体位置は、仮想ボリュームであれば、そのボリュームに割り当てられたプールアドレスを示し、論理ボリュームであれば、そのボリューム内の論理アドレスを示す。【００２７】
本実施例では、ボリューム、プール、及びキャッシュ領域の夫々における単位記憶領域をスロットと呼ぶ。スロットは、スロット番号等の識別子により管理される。副ボリューム内のスロットは、その副ボリュームに対する正ボリュームのうち同一のスロット番号を持つスロットに関連付けられる。スロットのサイズは例えば２５６ｋＢである。特にプール内のスロットをプールスロット、キャッシュ領域内のスロットをキャッシュスロットと呼ぶ。スロットの代わりに、アドレス範囲を示す他の記憶領域が用いられてもよい。【００２８】
本実施例では、正ボリュームが更新される場合、コピー処理プログラム１１２は、更新前のデータ（旧データ）を差分データとしてプールへ書き込む。プールのうち当該差分データを格納するプールスロットは、副ボリューム内のスロットに割り当てられる。一つのプールスロットが、複数の副ボリュームにおける同一のスロット番号のスロットに割り当てられてもよい。なお、差分データが更新後の最新データ（現データ）であってもよい。この場合、プールのうち当該差分データを格納するプールスロットは、正ボリューム内のスロットに割り当てられてもよい。【００２９】
図３は、ＳＳ制御情報と実体位置検索処理の概要を示す。【００３０】
ボリュームのＳＳ制御情報は、スロット毎に、世代間共有情報（ＧＣＭＴ）と世代固有情報（ＧＵＤＴ）を含む。ＧＣＭＴは、他のボリュームから退避される差分データ等、差分データを世代間で共有している場合に有効になる。有効なＧＣＭＴは、差分データの実体位置のプールスロットを示すポインタ（実体位置情報）を含む。ＧＵＤＴは、当該ボリュームが更新され、退避の必要がない場合等、当該ボリュームに固有の差分データを格納する場合に有効になる。有効なＧＵＤＴは、差分データの実体位置のプールスロットを示すポインタを含む。ＧＣＭＴ及びＧＵＤＴにおけるポインタは、プール番号とプールスロット番号を含む。なお、プールスロット番号の代わりに、プール内のアドレスが用いられてもよい。【００３１】
例えば、正ボリューム内のスロットへＷｒｉｔｅが行われたことで、正ボリュームの当該スロットの差分データを副ボリュームへ退避する場合、コピー処理プログラム１１２は、差分データをプールへ退避し、退避先の実体位置情報を、副ボリュームの当該スロットのＧＣＭＴに格納する。また、例えば、副ボリュームにＷｒｉｔｅが行われ、副ボリュームの当該スロットに差分データが発生した場合、コピー処理プログラム１１２は、差分データをプールへ書き込み、書き込み先を示す実体位置情報を、副ボリュームの当該スロットのＧＵＤＴに格納する。【００３２】
ここでは、正ボリュームのスナップショットとして副ボリューム２が作成され、その後、正ボリュームの次の世代のスナップショットとして副ボリューム１が作成される。これにより、正ボリュームには、最新のデータが格納され、副ボリューム１には、副ボリューム２より新しい世代のデータが格納される。正ボリューム、副ボリューム１、副ボリューム２において、ホストアクセスされるスロットのスロット番号で示されるスロットを対象スロットと呼ぶ。【００３３】
コピー処理プログラム１１２は、副ボリュームの参照時に、実体位置を検索する実体位置検索処理を行う。実体位置検索処理において、コピー処理プログラム１１２は、アクセスされる副ボリューム２を検索ボリュームとして設定し、検索ボリュームの対象スロットのＧＵＤＴが有効であるか否かを判定する。ＧＵＤＴが有効である場合、コピー処理プログラム１１２は、そのＧＵＤＴに含まれる実体位置情報を返す。ＧＵＤＴが無効である場合、コピー処理プログラム１１２は、対象スロットのＧＣＭＴが有効であるか否かを判定する。ＧＣＭＴが有効である場合、コピー処理プログラム１１２は、そのＧＣＭＴに含まれる実体位置情報を返す。ＧＣＭＴが無効である場合、コピー処理プログラム１１２は、検索ボリュームより新しい世代の検索ボリュームの対象スロットのＧＣＭＴが有効であるか否かを判定する。ここで、まずコピー処理プログラム１１２は、同一の正ボリュームに属する副ボリュームのうち、直後の世代の副ボリュームを検索ボリュームとして選択する。そのような副ボリュームがない場合、コピー処理プログラム１１２は、正ボリュームを検索ボリュームとして選択する。新たな検索ボリュームにおいて対応するＧＣＭＴが有効である場合、コピー処理プログラム１１２は、そのＧＣＭＴに含まれる実体位置情報を返す。ＧＣＭＴが無効である場合、コピー処理プログラム１１２は、次の検索ボリュームを選択し、実体位置が得られるまで検索する。【００３４】
図４は、カスケード型スナップショットの概要を示す。【００３５】
コピー処理プログラム１１２は、或るペアの副ボリュームを正ボリュームとする別のペアを作成することができる。これにより、コピー処理プログラム１１２は、スナップショットのペアをカスケードに接続することで、カスケード型のスナップショット構造を作成することができる。このスナップショット構造において、コピー処理プログラム１１２は、ＳＳＩＤ（Snapshot ID）がＡであるペアのＳ−ＶＯＬ（副ボリューム）属性を持つボリュームに、Ｐ−ＶＯＬ（正ボリューム）属性を付与し、別の副ボリュームとのペアを作成し、そのペアにＳＳＩＤとしてＢを付与する。スナップショット構造の最も先頭の正ボリュームをＲｏｏｔと呼ぶ。Ｐ−ＶＯＬ属性とＳ−ＶＯＬ属性を持つボリュームを、Ｂｒａｎｃｈと呼ぶ。Ｓ−ＶＯＬ属性のみを持つボリュームをＬｅａｆと呼ぶ。ここでは、Ｒｏｏｔのみが、実体を持つ論理ボリューム（Logical Device：ＬＤＥＶ）である。ＢｒａｎｃｈおよびＬｅａｆは、仮想ボリュームである。仮想ボリュームのデータは、プールに格納される。ＲｏｏｔのＬＤＥＶ番号とＳＳＩＤの組み合わせで、Ｂｒａｎｃｈ及びＬｅａｆのボリュームを特定することができる。なお、Ｒｏｏｔが仮想ボリュームであってもよい。【００３６】
図５は、スナップショット構造の概要を示す。【００３７】
コピー処理プログラム１１２は、一つの正ボリュームに対して複数のペアを作成し、副ボリュームを正ボリュームとする下位のペアを作成することにより、ツリー状のスナップショット構造を作成することができる。【００３８】
以後、スナップショット構造内の一つのボリュームを対象ボリュームとし、対象ボリュームが副ボリュームである場合、対象ボリュームとペアを成す正ボリュームを親世代と呼ぶ。対象ボリュームが正ボリュームである場合、対象ボリュームとペアを成す副ボリュームを子世代と呼ぶ。対象ボリュームが、同一の正ボリュームを持つ複数の副ボリュームの一つである場合、複数の副ボリュームのうち、対象ボリュームより古い世代の副ボリュームを、兄世代と呼び、対象ボリュームより新しい世代の副ボリュームを弟世代と呼ぶ。また、対象ボリュームより新しい世代（弟世代及び親世代）のボリュームを、上位ボリュームと呼ぶ。【００３９】
或る副ボリューム内の或るスロットに格納されている現データは、当該ボリューム、または当該ボリュームの上位ボリュームに存在する。現データの実体位置は、当該ボリュームのＧＵＤＴに示されている、当該ボリュームのＧＣＭＴに示されている、または上位ボリュームに示されている、または上位ボリューム（Ｒｏｏｔ）である。【００４０】
このようなスナップショット構造によれば、例えば、ＶＤＩ（Virtual Desktop Infrastructure）の管理者は、仮想マシンのゴールデンイメージの複数の複製を瞬時に作成することができ、複製を配布することができる。更に、管理者は、部署やユーザ毎に複製を更新し、更新された複製を配布することができる。【００４１】
スナップショットの更新方法として、ＣＯＷ（Copy on Write）が知られている。ＣＯＷは、旧データを副ボリュームへ退避した後にホスト計算機へ応答するため、応答時間が長い。例えば、ＶＤＩにおいて、仮想マシンの性能を保証する場合、イメージの複製にＣＯＷを用いると、応答時間が長くなる。そこで、本実施例のコピー処理プログラム１１２は、更新方法としてＣＡＷを用いる。【００４２】
図６は、ＣＡＷの概要を示す。【００４３】
本実施例において、キャッシュ領域は、キャッシュスロット毎に管理される。一つのキャッシュスロットは、ホスト計算機２０から受信したデータを書き込むＷ面（Ｗｒｉｔｅ面）と、記憶デバイス２００からステージングされるデータを格納するＲ面（Ｒｅａｄ面）とを含む。Ｗ面とＲ面の夫々のサイズは、スロットサイズである。【００４４】
ストレージ装置１０がホスト計算機２０からＷＲ要求を受領した場合、コントローラ１００は、次のようなＷＲ処理を行う。【００４５】
（１）Ｉ／Ｏ処理プログラム１１３は、ホスト計算機２０から正ボリューム内のアドレス範囲を指定するＷＲ要求を受領すると、当該アドレス範囲に対応する対象スロットを特定する。
（２）コピー処理プログラム１１２は、正ボリュームの対象スロットのＣＡＷフラグをＯＮに設定する。
（３）コピー処理プログラム１１２は、ホスト計算機２０からＷＲデータを受領し、キャッシュ領域のうち、正ボリュームの対象スロットに対応する対象キャッシュスロットのＷ面のうち、ＷＲ要求で指定されたアドレス範囲に対応する領域へ、ＷＲデータを書き込む。
（４）Ｉ／Ｏ処理プログラム１１３は、ＷＲ要求に対する応答を、ホスト計算機２０へ送信する。【００４６】
正ボリュームの対象スロットのＣＡＷフラグがＯＮである状態は、正ボリュームの対象スロットの全体の現データが確定していない状態である。この状態をＣＡＷ状態と呼ぶ。その後、正ボリュームの対象スロットを参照する契機で、コピー処理プログラム１１２は、次のようなＣＡＷ解消処理を行うことで、正ボリュームの対象スロットのＣＡＷ状態を解消する。【００４７】
（３）に応じて、Ｉ／Ｏ処理プログラム１１３は、その後のデステージングのために、対象キャッシュスロットの状態をｄｉｒｔｙに変更する。【００４８】
（Ａ）コピー処理プログラム１１２は、副ボリュームの対象スロットのＧＣＭＴに、プールのうち退避先のプールスロットのポインタを格納する。
（Ｂ）コピー処理プログラム１１２は、対象キャッシュスロットのＲ面に格納されている旧データを、副ボリュームの対象スロットに対応するキャッシュスロットのＷ面へコピーする旧データ退避（退避コピー）処理を行う。その後、Ｉ／Ｏ処理プログラム１１３は、デステージングにより、旧データを、Ｗ面から当該プールスロットへ書き込む。旧データ退避処理において、キャッシュスロットが正ボリュームの対象スロットに割り当てられていない場合、コピー処理プログラム１１２は、正ボリュームの対象スロットに対象キャッシュスロットを割り当て、対象キャッシュスロットのＲ面へ旧データをステージングする。
（Ｃ）コピー処理プログラム１１２は、正ボリュームの対象スロットのＣＡＷフラグをＯＦＦに設定する。【００４９】
（Ｂ）に応じて、Ｉ／Ｏ処理プログラム１１３は、対象キャッシュスロットのデステージングの後、対象キャッシュスロットの状態をｃｌｅａｎに変更する。【００５０】
このように、ＣＡＷは、旧データ退避処理前にホスト計算機２０へ応答するため、ＣＯＷに比べて、ＷＲ要求に対する応答時間を短縮することができる。【００５１】
図７は、カスケード型スナップショットにおけるＣＡＷ解消処理の概要を示す。【００５２】
カスケード型スナップショットのＢｒａｎｃｈである更新対象ボリュームの対象スロットに対するＷｒｉｔｅ要求に応じて、Ｉ／Ｏ処理プログラム１１３は、対象スロットに対応するＷ面の一部にＷＲデータを書き込み、対象スロットに対してＣＡＷ状態を設定する。その後、ホスト計算機２０による対象スロットへのアクセス（Ｒｅａｄ又はＷｒｉｔｅ）や、コントローラ１００による対象スロットのデステージング等、対象スロットの参照を契機として、コピー処理プログラム１１２は、ＣＡＷ状態を解消するためのＣＡＷ解消処理を行う。【００５３】
ここでは、更新対象ボリュームを副ボリュームとするペアの正ボリューム（親世代のボリューム）を、親ボリュームと呼ぶ。更新対象ボリュームを正ボリュームとするペアの副ボリューム（子世代のボリューム）を、子ボリュームと呼ぶ。親ボリュームの対象スロット及び子ボリュームの対象スロットは、更新対象ボリュームの対象スロットと同じスロット番号を持つ。【００５４】
更新対象ボリュームの対象スロットへのＷｒｉｔｅ前において、対象スロットのＧＣＭＴ及びＧＵＤＴ、子ボリュームの対象スロットのＧＣＭＴ及びＧＵＤＴは、何れも無効である。更新対象ボリュームの対象スロットへのＷｒｉｔｅにより、更新対象ボリュームの対象スロットに対応するキャッシュスロットのＷ面にＷＲデータが書き込まれ、更新対象ボリュームの対象スロットのＣＡＷフラグがＯＮになる。【００５５】
ＣＡＷ解消処理において、まず、コピー処理プログラム１１２は、更新対象ボリュームの対象スロットの旧データを子ボリュームの対象スロットへ退避する旧データ退避処理を行う。旧データ退避処理は、親ボリュームの対象スロットに対応するＲ面に格納されている、更新対象ボリュームの対象スロットの旧データを、子ボリュームの対象スロットに対応するＷ面へコピーし、プール内の新たなプールスロットを子ボリュームの対象スロットへ割り当てる。【００５６】
その後、コピー処理プログラム１１２は、旧データとＷＲデータをマージするマージコピー処理を行う。マージコピー処理は、更新対象ボリュームの対象スロットに対応するＷ面のうち、ＷＲデータが書き込まれた領域以外のＬＢＡ（Logical Block Address）範囲を、補充ＬＢＡ範囲とし、親ボリュームの対象スロットに対応するＲ面の補充ＬＢＡ範囲に格納されているデータを、更新対象ボリュームの対象スロットに対応するＷ面の補充ＬＢＡ範囲へコピーする。【００５７】
これにより、更新対象ボリュームの旧データが親ボリュームから子ボリュームへ退避され、親ボリュームの旧データとＷＲデータをマージすることで現データが得られ、現データが更新対象ボリュームに書き込まれる。これにより、更新対象ボリュームの対象スロットのデータが確定し、更新対象ボリュームの対象スロットのＣＡＷ状態が解消される。【００５８】
ＣＡＷ解消処理後、更新対象ボリュームの対象スロットのＣＡＷフラグがＯＦＦになり、更新対象ボリュームの対象スロットのＧＵＤＴの実体位置情報が有効になる。更に、子ボリュームの対象スロットのＧＣＭＴの実体位置情報が有効になる。【００５９】
ＣＡＷ解消処理において、もし親ボリュームの対象スロットがＣＡＷ状態である場合、親ボリュームに対するＣＡＷ解消処理が必要になる。【００６０】
ここでは、管理情報１１１の第一部分から第三部分に分けて説明する。【００６１】
図８は、管理情報１１１の第一部分を示す。【００６２】
管理情報１１１は、ボリューム毎に作成されるボリューム情報テーブル３１０と、ボリューム毎に作成されるスロット情報３２０と、ペア毎に作成されるペア情報テーブル３３０とを含む。【００６３】
一つのボリュームに対応するボリューム情報テーブル３１０は、ＬＤＥＶ番号３１１と、属性３１２と、容量３１３と、ペア情報テーブルポインタ３１４とを含む。ＬＤＥＶ番号３１１は、当該ボリュームを示す識別子である。属性３１２は、当該ボリュームが正ボリューム（Ｐ−ＶＯＬ）、副ボリューム（Ｓ−ＶＯＬ）、正ボリューム及び副ボリュームの両方（Ｐ／Ｓ−ＶＯＬ）、それ以外のボリュームの何れかを示す。容量３１３は、当該ボリュームの容量を示す。ペア情報テーブルポインタは、当該ボリュームが属するペアのペア情報テーブル３３０を示す。【００６４】
一つのボリュームに対応するスロット情報３２０は、当該ボリューム内のスロット毎のエントリを含む。一つのスロットに対応するエントリは、当該スロットを示すスロット番号３２１と、当該スロットの情報３２２とを含む。情報３２２は、ＣＡＷフラグやＷＲ世代番号等を含む。ＷＲ世代番号は、ペアの順序に対して当該スロットがＷｒｉｔｅされた順序を示す。【００６５】
一つのペアに対応するペア情報テーブル３３０は、ペア状態３３１と、ＳＳＩＤ３３２と、世代番号３３３と、正ボリュームテーブルポインタ３３４と、副ボリュームテーブルポインタ３３５とを含む。ペア状態３３１は、差分データを書き込むペア状態（ＰＡＩＲ）、差分データを書き込まないサスペンド状態（ＰＳＵＳ）等を示す。ＳＳＩＤ３３２は、当該ペアを示す識別子である。世代番号３３３は、当該ペアの世代の順序を示す。正ボリュームテーブルポインタ３３４は、当該ペアにおける正ボリュームのボリューム情報テーブル３１０を示すポインタである。副ボリュームテーブルポインタ３３５は、当該ペアにおける副ボリュームのボリューム情報テーブル３１０を示すポインタである。【００６６】
コピー処理プログラム１１２は、世代番号及びＷＲ世代番号が通し番号になるように、ペアに世代番号を与え、ＷｒｉｔｅされたスロットにＷＲ世代番号を与える。例えば、コピー処理プログラム１１２は、或るペアを作成すると、当該ペアに世代番号ｎを与える。その後、当該ペアの正ボリュームの或るスロットがＷｒｉｔｅされると、コピー処理プログラム１１２は、世代番号の最大値ｎに１を加えて得られるＷＲ世代番号ｎ＋１を、当該スロットに与える。その後、コピー処理プログラム１１２は、新たなペアを作成すると、世代番号とＷＲ世代番号の最大値に１を加えて得られる世代番号ｎ＋２を、その新たなペアに与える。【００６７】
図９は、管理情報１１１の第二部分を示す。【００６８】
管理情報１１１は更に、ＳＳ制御情報３４０を含む。ＳＳ制御情報３４０は、プール毎に作成されるプールスロット情報（ＧＰＭＴ）３６０と、ペア毎に作成される世代間共有情報（ＧＣＭＴ）３７０と、ペア毎に作成される世代固有情報（ＧＵＤＴ）３８０とを含む。【００６９】
一つのプールに対応するプールスロット情報３６０は、当該プールを示す識別子であるプール番号３６１と、プールスロット毎のエントリとを含む。一つのプールスロットに対応するエントリは、プールエントリ番号３６２と、プールスロット（データ格納先スロット）番号３６３と、状態３６４と、当該プールスロットの割当先のスロットであって当該プールスロットの参照元のスロットを示す参照元情報とを含む。プールエントリ番号３６２は、当該エントリの識別子である。プールスロット番号３６３は、当該プールスロットの識別子である。状態３６４は、当該プールスロットの状態を示し、参照元のスロットに割り当てられていない「未割当」、参照元のスロットに割り当てられデータが格納されていない「割当中」、参照元のスロットに割り当てられデータが格納されている「割当済み」の何れかの状態を示す。参照元情報は、ＲｏｏｔＬＤＥＶ番号３６５と、ＳＳＩＤ３６６と、スロット番号３６７とを含む。ＲｏｏｔＬＤＥＶ番号３６５及びＳＳＩＤ３６６の組み合わせは、当該参照元のペアを示す。スロット番号３６７は、当該参照元のスロットを示す。【００７０】
一つのペアに対応するＧＣＭＴ３７０は、ＲｏｏｔＬＤＥＶ番号３７１と、ＳＳＩＤ３７２と、当該ペアの副ボリュームのスロット毎のエントリとを含む。ＲｏｏｔＬＤＥＶ番号３７１及びＳＳＩＤ３７２の組み合わせは、当該ペアを示す。一つのスロットに対応するエントリは、スロットエントリ番号３７３と、スロット番号３７４と、状態３７５と、当該スロットに割り当てられるプールスロットであって当該スロットの参照先のプールスロットを示すプール情報とを含む。スロットエントリ番号３７３は、当該エントリの識別子である。スロット番号３７４は、当該スロットの識別子である。状態３７５は、当該スロットの状態を示し、参照先が割り当てられていない「未割当」、参照先が割り当てられ参照先にデータが格納されていない「割当中」、参照先が割り当てられ参照先にデータが格納されている「割当済み」の何れかの状態を示す。プール情報は、プール番号３７６と、プールエントリ番号３７７とを含む。プール番号３７６は、参照先のプールを示す。プールエントリ番号３７７は、参照先のプールスロットを示す。【００７１】
一つのペアに対応するＧＵＤＴ３８０は、ＲｏｏｔＬＤＥＶ番号３８１と、ＳＳＩＤ３８２と、当該ペアの副ボリュームのスロット毎のエントリとを含む。一つのスロットに対応するエントリは、スロットエントリ番号３８３と、スロット番号３８４と、状態３８５と、当該スロットから参照されるデータ実体の参照先のプール情報とを含む。プール情報は、プール番号３８６と、プールエントリ番号３８７とを含む。項目３８１〜３８４、３８６、３８７は、項目３７１〜３７４、３７６、３７７とそれぞれ同様である。状態３８５は、当該スロットの状態を示し、参照先が割り当てられていない「未割当」、参照先が割り当てられ参照先にデータが格納されていない「コピー未」、参照先が割り当てられ参照先にデータが格納されている「割当済み」の何れかの状態を示す。【００７２】
図１０は、管理情報１１１の第三部分を示す。【００７３】
管理情報１１１は更に、ジョブ毎に作成されるジョブ管理テーブル３５０を含む。【００７４】
一つのジョブに対応するジョブ管理テーブル３５０は、要求コピー種別３５１と、要求元処理種別３５２と、Ｒｏｏｔ  ＬＤＥＶ番号３５３と、ＳＳＩＤ３５４と、スロット番号３５５とを含む。要求コピー種別３５１は、当該ジョブの処理の種別を示す。ここでの処理の種別は例えば、ＣＡＷ解消処理である。要求元処理種別３５２は、当該ジョブを起動した処理（要求元の処理）の種別を示す。ここでの処理の種別は、ＲＤ、ＷＲ、デステージ等である。Ｒｏｏｔ  ＬＤＥＶ番号３５３は、当該ジョブの対象ボリュームが属するスナップショット構造におけるＲｏｏｔのボリュームを示す。ＳＳＩＤ３５４は、当該ジョブの対象ペアを示す。スロット番号３５５は、当該ジョブの対象スロットを示す。【００７５】
コピー処理プログラム１１２及びＩ／Ｏ処理プログラム１１３は、ＣＡＷ解消ジョブやＲｅａｄジョブ等のジョブを投入するために、当該ジョブに対応するジョブ管理テーブル３５０を作成する。【００７６】
なお、ＧＣＭＴ３７０及びＧＵＤＴ３８０は、プール２２０に格納されてもよい。【００７７】
管理情報１１１は他に、スロットとキャッシュスロットの関連付けを示すキャッシュテーブルを含んでいてもよい。【００７８】
管理プログラム３１は、スナップショットのペアを作成するためのペア設定画面を表示デバイスに表示させ、管理者からの入力を受け付ける。ここで、管理プログラム３１は、前述の管理情報１１１の第一部分の図に示したように、ボリューム情報テーブル３１０から、作成するペアの正ボリュームとなるボリュームの属性３１２（Ｐ−ＶＯＬ属性、Ｓ−ＶＯＬ属性、Ｐ／Ｓ−ＶＯＬ属性等）をペア設定画面に表示させてもよいし、また、そのボリュームの属性３１２がＳ−ＶＯＬ属性を含む（他のボリュームのスナップショットを格納する）か否かをペア設定画面に表示させてもよい。また、管理プログラム３１は、当該ボリュームの属性３１２が別のペアのＳ−ＶＯＬ属性を含む場合、当該ボリュームとペアを成す正ボリュームや、そのスナップショット構造のＲｏｏｔボリューム等を、ペア設定画面に表示させてもよい。また、管理プログラム３１は、ペア情報テーブル３３０に基づいて、前述のスナップショット構造の図に示したように、複数のボリュームのペアの関係を示すスナップショット構造画面を表示デバイスに表示させてもよい。これにより、管理者は、適切な正ボリュームを選択してペア作成の指示を入力することができる。【００７９】
図１１は、実施例１のＣＡＷ解消処理の概要を示す。【００８０】
例えば、Ｉ／Ｏ処理プログラム１１３は、ホスト計算機２０からのボリュームＡの対象スロットに対するＲＤ要求に応じて、Ｒｅａｄジョブを起動する。ここで、ボリュームＡの親世代のボリュームＢと、ボリュームＢの親世代のボリュームＣにおいて、対象スロットのスロット番号を持つスロットを、対象スロットと呼ぶ。Ｒｅａｄジョブは、ボリュームＡの対象スロットがＣＡＷ状態であることを検出すると、ボリュームＡの対象スロットに対するＣＡＷ解消ジョブＡを起動し、そのＣＡＷ状態が解消されるまで待機する。ＣＡＷ解消ジョブＡは、ボリュームＢの対象スロットがＣＡＷ状態であることを検出すると、ボリュームＢの対象スロットに対するＣＡＷ解消ジョブＢを起動し、そのＣＡＷ状態が解消されるまで待機する。ＣＡＷ解消ジョブＢは、ボリュームＣの対象スロットがＣＡＷ状態であることを検出すると、ボリュームＣの対象スロットに対するＣＡＷ解消ジョブＣを起動し、そのＣＡＷ状態が解消されるまで待機する。【００８１】
これにより、ＣＡＷ解消ジョブＣは、ＣＡＷ状態が検出されたボリュームのうち最上位のボリュームであるボリュームＣの対象スロットのＣＡＷ状態を解消する（１）。次に、ＣＡＷ解消ジョブＢは再起動し、ボリュームＢの対象スロットのＣＡＷ状態を解消する（２）。次に、ＣＡＷ解消ジョブＡは再起動し、ボリュームＡの対象スロットのＣＡＷ状態を解消する（３）。次に、Ｒｅａｄジョブは再起動し、ボリュームＡの対象スロットの実体位置からデータを読み出し、ホスト計算機２０へ応答する。【００８２】
ＣＡＷ解消ジョブの契機がＲｅａｄである場合、Ｉ／Ｏ処理プログラム１１３は、ホスト計算機２０からＲｅａｄ要求を受領すると、Ｒｅａｄ要求に含まれるＲｅａｄパラメタを解析し、Ｒｅａｄ対象の、対象ボリューム番号、ＬＢＡ、サイズ、対象スロット番号等を特定する。その後、Ｉ／Ｏ処理プログラム１１３は、対象ボリュームのスロット情報３２０の対象スロットのエントリを参照し、ＣＡＷフラグがＯＮであることを検出すると、ＣＡＷ解消ジョブを起動する。【００８３】
なお、ＣＡＷ解消ジョブの契機がデステージングである場合、Ｉ／Ｏ処理プログラム１１３は、デステージング時に、ダーティであるキャッシュスロットを検出し、スロット情報３２０において、当該キャッシュスロットに対応するスロット番号のエントリを参照し、ＣＡＷフラグがＯＮであることを検出すると、ＣＡＷ解消ジョブを起動する。【００８４】
図１２は、実施例１のＣＡＷ解消ジョブを示す。【００８５】
ＣＡＷ状態である解消対象ボリュームの対象スロットを示すジョブ管理テーブルが作成され、ＣＡＷ解消ジョブが起動される。まず、コピー処理プログラム１１２は、Ｓ１５１０において、ジョブ管理テーブルに基づいて、ＣＡＷ解消ジョブの初期設定を行う。その後、コピー処理プログラム１１２は、Ｓ１５２０において、解消対象ボリュームの対象スロットに対して実体位置検索処理を行うことで、解消対象ボリュームの対象スロットの実体位置を特定し、実体位置に対応するボリュームの対象スロットがＣＡＷ状態であるか否かを判定する。ここで、実体位置情報を持つボリューム又は実体位置に示されたボリューム（Ｒｏｏｔ）を、実体位置ボリュームと呼ぶ。【００８６】
実体位置ボリュームの対象スロットがＣＡＷ状態であると判定された場合（Ｓ１５２０：ＣＡＷ  ＯＮを検出）、コピー処理プログラム１１２は、Ｓ１５３０において、実体位置ボリュームを解消対象ボリュームとする新たなＣＡＷ解消ジョブの起動指示を発行する。ここでコピー処理プログラム１１２は、新たなＣＡＷ解消ジョブのジョブ管理テーブルを作成し、そのジョブ管理テーブルにおいて、実体位置ボリュームのＳＳＩＤを設定する。その後、コピー処理プログラム１１２は、Ｓ１５４０において、起動されたＣＡＷ解消ジョブの終了まで待機する。起動されたＣＡＷ解消ジョブが終了すると、コピー処理プログラム１１２は、再起動し、再びＳ１５１０から処理を実行する。その後、Ｓ１５２０において、実体位置ボリュームの対象スロットがＣＡＷ状態でないと判定される。【００８７】
実体位置ボリュームの対象スロットがＣＡＷ状態でないと判定された場合（Ｓ１５２０：Ｒｏｏｔ、ＧＣＭＴ、ＧＵＤＴ（ＣＡＷ  ＯＦＦ）の何れかを検出）、コピー処理プログラム１１２は、Ｓ１５５０において、実体位置ボリュームをコピー元ボリュームとし、解消対象ボリュームの副ボリュームを退避先ボリュームとし、コピー元ボリュームの対象スロットから退避先ボリュームの対象スロットへの旧データ退避処理を行う。ここで実体位置ボリュームの対象スロットがＣＡＷ状態でない場合は、実体位置ボリュームがＲｏｏｔであること、実体位置が実体位置ボリュームのＧＣＭＴに示されていること、実体位置が実体位置ボリュームのＧＵＤＴに示されており且つ実体位置ボリュームの対象スロットがＣＡＷ状態でないこと、の何れかを検出した場合であり、他のＣＡＷ解消ジョブにより、実体位置ボリュームの対象スロットのＣＡＷ状態が解消された場合を含む。【００８８】
その後、コピー処理プログラム１１２は、Ｓ１５６０において、コピー元ボリュームの対象スロットから解消対象ボリュームの対象スロットへのマージコピー処理を行う。その後、コピー処理プログラム１１２は、Ｓ１５７０において、解消対象ボリュームの対象スロットのＣＡＷ状態を解除する終了処理を行い、このフローを終了する。ここでコピー処理プログラム１１２は、解消対象ボリュームのスロット情報３２０の対象スロットの情報３２３のＣＡＷフラグをＯＦＦにする。【００８９】
以上のＣＡＷ解消ジョブによれば、実体位置ボリュームの対象スロットのＣＡＷ状態を検出した場合でも、実体位置ボリュームの対象スロットのＣＡＷ状態を解消するための新たなＣＡＷ解消ジョブを起動することができ、最終的に解消対象ボリュームの対象スロットのＣＡＷ状態を解消することができる。【００９０】
前述のＳ１５２０における実体位置検索処理の詳細を説明する。【００９１】
図１３は、実体位置検索処理を示す。【００９２】
ここで、検索対象として選択されるボリュームを検索ボリュームと呼ぶ。【００９３】
まず、コピー処理プログラム１１２は、Ｓ１１１０において、解消対象ボリュームを検索ボリュームとして選択する。【００９４】
その後、コピー処理プログラム１１２は、Ｓ１１２０において、検索ボリュームのボリューム情報テーブル３１０の属性３１２を参照し、検索ボリュームがＲｏｏｔであるか否かを判定する。【００９５】
検索ボリュームがＲｏｏｔであると判定された場合（Ｓ１１２０：Ｙｅｓ）、コピー処理プログラム１１２は、Ｓ１１３０において、Ｒｏｏｔのスロット情報３２０の対象スロットの情報３２３を参照し、Ｒｏｏｔの対象スロットがＣＡＷ状態であるか否かを判定する。【００９６】
対象スロットがＣＡＷ状態でないと判定された場合（Ｓ１１３０：Ｎｏ）、コピー処理プログラム１１２は、Ｓ１１４０において、実体位置ボリュームがＲｏｏｔであることを返し、このフローを終了する。【００９７】
対象スロットがＣＡＷ状態であると判定された場合（Ｓ１１３０：Ｙｅｓ）、コピー処理プログラム１１２は、Ｓ１１５０において、実体位置ボリュームがＲｏｏｔであり且つ実体位置ボリュームがＣＡＷ状態であることを返し、このフローを終了する。【００９８】
検索ボリュームがＲｏｏｔでないと判定された場合（Ｓ１１２０：Ｎｏ）、コピー処理プログラム１１２は、Ｓ１２１０において、検索ボリュームのＧＵＤＴ３８０内の対象スロットの状態３８５と、検索ボリュームのスロット情報３２０の対象スロットの情報３２３とを参照し、ＧＵＤＴの状態を判定する。【００９９】
対象スロットのＧＵＤＴの状態が「割当済み」であり且つ対象スロットがＣＡＷ状態でないと判定された場合（Ｓ１２１０：割当済み）、コピー処理プログラム１１２は、Ｓ１２２０において、実体位置ボリュームが検索ボリュームであり且つ実体位置が検索ボリュームのＧＵＤＴに示されており且つ実体位置ボリュームがＣＡＷ状態でないことを返し、このフローを終了する。【０１００】
対象スロットのＧＵＤＴの状態が「割当済み」であり且つ対象スロットがＣＡＷ状態であると判定された場合（Ｓ１２１０：ＣＡＷ  ＯＮ検出）、コピー処理プログラム１１２は、Ｓ１２３０において、実体位置ボリュームが検索ボリュームであり且つ実体位置が検索ボリュームのＧＵＤＴに示されており且つ実体位置ボリュームがＣＡＷ状態であることを返し、このフローを終了する。【０１０１】
対象スロットのＧＵＤＴの状態が「未割当」であると判定された場合（Ｓ１２１０：未割当）、コピー処理プログラム１１２は、Ｓ１２４０において、検索ボリュームのＧＣＭＴ３７０内の対象スロットの状態３７５が「割当済み」であるか「未割当」であるかを判定する。【０１０２】
対象スロットのＧＣＭＴの状態が「割当済み」であると判定された場合（Ｓ１２４０：割当済み）、コピー処理プログラム１１２は、Ｓ１２５０において、実体位置ボリュームが検索ボリュームであり且つ実体位置が検索ボリュームのＧＣＭＴに示されており且つ実体位置ボリュームがＣＡＷ状態でないことを返し、このフローを終了する。【０１０３】
対象スロットのＧＣＭＴの状態が「未割当」であると判定された場合（Ｓ１２４０：未割当）、コピー処理プログラム１１２は、Ｓ１２６０において、検索ボリュームの弟世代があるか否かを判定する。【０１０４】
弟世代があると判定された場合（Ｓ１２６０：有）、コピー処理プログラム１１２は、Ｓ１２７０において、検索ボリュームの世代の直後の弟世代のボリュームを、新たな検索ボリュームとして選択し、処理をＳ１２５０へ移行させる。【０１０５】
弟世代がないと判定された場合（Ｓ１２６０：無）、コピー処理プログラム１１２は、Ｓ１２８０において、検索ボリュームの親世代があるか否かを判定する。【０１０６】
親世代がないと判定された場合（Ｓ１２８０：無）、コピー処理プログラム１１２は、Ｓ１３１０において、異常であることを返し、このフローを終了する。【０１０７】
親世代があると判定された場合（Ｓ１２８０：無）、コピー処理プログラム１１２は、Ｓ１３２０において、検索ボリュームの親世代のボリュームを、新たな検索ボリュームとして選択し、処理をＳ１１２０へ移行させる。【０１０８】
以上の実体位置検索処理によれば、ＳＳ制御情報３４０を辿ることで、解消対象ボリュームの対象スロットのデータの実体位置を特定することができる。【０１０９】
前述のＳ１５４０における旧データ退避処理の詳細を説明する。【０１１０】
図１４は、旧データ退避処理を示す。【０１１１】
まず、コピー処理プログラム１１２は、Ｓ１６１０において、解消対象ボリュームのボリューム情報テーブル３１０の属性３１２に基づいて、解消対象ボリュームがＬｅａｆであるか否かを判定する。ここでコピー処理プログラム１１２は、属性３１２がＳ−ＶＯＬ属性のみを示す場合、解消対象ボリュームがＬｅａｆであると判定する。【０１１２】
解消対象ボリュームがＬｅａｆであると判定された場合（Ｓ１６１０：Ｙｅｓ）、コピー処理プログラム１１２は、解消対象ボリュームを正ボリュームとするペアがなく、旧データを退避させる必要がないため、このフローを終了する。【０１１３】
解消対象ボリュームがＬｅａｆでないと判定された場合（Ｓ１６１０：Ｎｏ）、コピー処理プログラム１１２は、Ｓ１６２０において、解消対象ボリュームを正ボリュームとするペア（子世代のペア）のうち、世代番号が解消対象ボリュームのＷＲ世代番号−１に等しいペアを、ペアＡとして選択する。ここでコピー処理プログラム１１２は、解消対象ボリュームのスロット情報３２０の対象スロットの情報３２３と、ボリューム情報テーブル３１０のペア情報テーブルポインタ３１４に示されたペア情報テーブル３３０のうち、解消対象ボリュームを正ボリュームとするペアのペア情報テーブル３３０の世代番号３３３とを、参照する。ここでは、ペアＡの副ボリュームを退避先ボリュームと呼ぶ。【０１１４】
その後、コピー処理プログラム１１２は、Ｓ１６３０において、退避先ボリュームのペアＡのＧＣＭＴ３７０内の対象スロットの状態３７５が「割当済み」であるか否かを判定する。【０１１５】
退避先ボリュームの対象スロットの状態が「割当済み」であると判定された場合（Ｓ１６３０：割当済み）、コピー処理プログラム１１２は、旧データを退避済みであるため、このフローを終了する。【０１１６】
退避先ボリュームの対象スロットの状態が「未割当」であると判定された場合（Ｓ１６３０：未割当）、コピー処理プログラム１１２は、Ｓ１６４０において、退避先プールスロットを確保し、ペアＡのＧＣＭＴ３７０内の対象スロットのプール情報へ、退避先プールスロット（プール番号３７６とプールエントリ番号３７７）を登録し、状態３７５を「割当中」に変更し、退避先ボリュームの対象スロットに対応するキャッシュスロットを退避先キャッシュスロットとして記憶する。【０１１７】
その後、コピー処理プログラム１１２は、Ｓ１６５０において、実体位置検索処理により得られた実体位置から、実体位置ボリューム（コピー元ボリューム）の対象スロットに対応するキャッシュスロットへ、データをＲｅａｄする。その後、コピー処理プログラム１１２は、Ｓ１６６０において、退避先キャッシュスロットのＷ面へ、ＲｅａｄされたデータをＷｒｉｔｅする。その後、コピー処理プログラム１１２は、Ｓ１６７０において、ペアＡのＧＣＭＴ３７０において対象スロットの状態２７５を「割当済み」に変更し、このフローを終了する。【０１１８】
その後、Ｉ／Ｏ処理プログラム１１３は、デステージングにより、退避先キャッシュスロットのＷ面に格納されたデータを、退避先プールスロットへ書き込む。【０１１９】
以上の旧データ退避処理によれば、コピー処理プログラム１１２は、ＷＲデータによる更新前のデータを、退避先の世代のボリュームの対象スロットへ退避させることができる。また、コピー処理プログラム１１２は、対象ボリューム内の対象スロットのＷＲ世代番号と、対象ボリュームの子世代のボリュームとのペアの世代番号とを比較することで、退避先ボリュームを選択することができる。また、コピー処理プログラム１１２は、対象ボリューム内の対象スロット内のデータを退避済みであるか否かを判定することができる。【０１２０】
図１５は、マージコピー処理を示す。【０１２１】
まず、コピー処理プログラム１１２は、Ｓ１７１０において、解消対象ボリュームのボリューム情報テーブル３１０の属性３１２に基づいて、解消対象ボリュームがＲｏｏｔであるか否かを判定する。ここでコピー処理プログラム１１２は、属性３１２がＰ−ＶＯＬ属性のみを示す場合、解消対象ボリュームがＲｏｏｔであると判定する。【０１２２】
解消対象ボリュームがＲｏｏｔであると判定された場合（Ｓ１７１０：Ｙｅｓ）、コピー処理プログラム１１２は、解消対象ボリュームを副ボリュームとするペアがなく、マージすべきデータがないため、このフローを終了する。【０１２３】
解消対象ボリュームがＲｏｏｔでないと判定された場合（Ｓ１７１０：Ｎｏ）、コピー処理プログラム１１２は、Ｓ１７２０において、解消対象ボリュームの対象スロットに対応するキャッシュスロットを、コピー先キャッシュスロットとして記憶する。【０１２４】
その後、コピー処理プログラム１１２は、Ｓ１７３０において、実体位置検索処理により得られた実体位置から、実体位置ボリューム（コピー元ボリューム）の対象スロットに対応するキャッシュスロットへ、データをＲｅａｄする。その後、コピー処理プログラム１１２は、Ｓ１７４０において、コピー先キャッシュスロットのＷ面のうち、ＷＲデータのアドレス範囲以外の領域へ、ＲｅａｄされたデータをＷｒｉｔｅする。その後、コピー処理プログラム１１２は、Ｓ１７５０において、解消対象ボリュームのＧＵＤＴ３８０の対象スロットの状態３８５を「割当済み」に変更し、このフローを終了する。【０１２５】
その後、Ｉ／Ｏ処理プログラム１１３は、デステージングにより、コピー先キャッシュスロットのＷ面に格納されたデータを、解消対象ボリュームのＧＵＤＴ３８０の対象スロットに示されたプールスロットへ書き込む。【０１２６】
以上のマージコピー処理によれば、コピー処理プログラム１１２は、ＷＲデータによる更新後のデータを、解消対象ボリュームの対象スロットへ書き込むことができる。
【実施例２】
【０１２７】
図１６は、実施例２のＣＡＷ解消処理の概要を示す。【０１２８】
ＣＡＷ解消ジョブは、ストレージ装置１０におけるメモリ等のリソースを消費するため、実施例１では、ＣＡＷ解消ジョブが新たなＣＡＷ解消ジョブを起動することにより、多くのリソースが消費される場合がある。本実施例において、一つのＣＡＷ解消ジョブは、複数のボリュームにおけるＣＡＷ状態を順に解消する（１、２、３）ことで、リソースを節約する。【０１２９】
図１７は、実施例２のＣＡＷ解消ジョブを示す。【０１３０】
以後、Ｒｅａｄジョブ等によりアクセスされるボリュームをアクセスボリュームと呼び、アクセスされるスロットを対象スロットと呼ぶ。【０１３１】
まず、コピー処理プログラム１１２は、Ｓ２１１０において、ジョブ管理テーブルに基づいて、ＣＡＷ解消ジョブの初期設定を行う。【０１３２】
その後、コピー処理プログラム１１２は、Ｓ２１２０において、ＣＡＷ解消対象判定処理を行い、アクセスボリュームを起点として対象スロットがＣＡＷ状態である最上位ボリュームを解消対象ボリュームとして特定し、旧データ退避処理及びマージコピー処理のコピー元ボリュームを特定する。【０１３３】
その後、コピー処理プログラム１１２は、Ｓ２１３０において、コピー元ボリュームから解消対象ボリュームの退避先ボリュームへ、前述の旧データ退避処理を行う。その後、コピー処理プログラム１１２は、Ｓ２１４０において、コピー元ボリュームから解消対象ボリュームへ、前述のマージコピー処理を行う。その後、コピー処理プログラム１１２は、Ｓ２１５０において、ＣＡＷ解消ジョブを終了するか否かを判定する。ここでコピー処理プログラム１１２は、解消対象ボリュームがアクセスボリュームである場合、ＣＡＷ解消ジョブを終了すると判定する。【０１３４】
ＣＡＷ解消ジョブを終了しないと判定された場合（Ｓ２１５０：Ｎｏ）、コピー処理プログラム１１２は、処理をＳ２１２０へ移行させ、次の解消対象ボリュームを選択する。【０１３５】
ＣＡＷ解消ジョブを終了すると判定された場合（Ｓ２１５０：Ｙｅｓ）、コピー処理プログラム１１２は、Ｓ２１６０において、ＣＡＷ解消ジョブの終了処理を行い、このフローを終了する。【０１３６】
以上のＣＡＷ解消ジョブによれば、一つのＣＡＷ解消ジョブが、アクセスボリュームの対象スロットのＣＡＷ状態を解消するための、複数のボリュームのＣＡＷ状態を解消することができる。【０１３７】
前述のＳ２１２０におけるＣＡＷ解消対象判定処理の詳細を説明する。【０１３８】
図１８は、実施例２のＣＡＷ解消対象判定処理を示す。【０１３９】
まず、コピー処理プログラム１１２は、Ｓ２２１０において、アクセスボリュームを検索ボリュームとして選択する。その後、コピー処理プログラム１１２は、Ｓ２２２０において、前述の実体位置検索処理を行い、その結果に基づいて、実体位置ボリュームの対象スロットがＣＡＷ状態であるか否かを判定する。【０１４０】
実体位置ボリュームの対象スロットがＣＡＷ状態でないと判定された場合（Ｓ２２２０：Ｒｏｏｔ、ＧＣＭＴ、ＧＵＤＴ（ＣＡＷ  ＯＦＦ）のいずれかを検出）、コピー処理プログラム１１２は、Ｓ２２３０において、ＣＡＷ解消ジョブの起動元のジョブによるリトライを行い、このフローを終了する。【０１４１】
実体位置ボリュームの対象スロットがＣＡＷ状態であると判定された場合（Ｓ２２２０：ＣＡＷ  ＯＮ検出）、コピー処理プログラム１１２は、Ｓ２２４０において、実体位置ボリュームをＣＡＷボリュームとして記憶し、Ｓ２２５０において、ＣＡＷボリュームを検索ボリュームとして選択する。その後、コピー処理プログラム１１２は、Ｓ２２６０において、検索ボリュームに対して第二実体位置検索処理を行い、得られた実体位置について判定する。【０１４２】
実体位置ボリュームがＲｏｏｔであり且つ実体位置ボリュームの対象スロットがＣＡＷ状態でないと判定された場合（Ｓ２２６０：Ｒｏｏｔ）、コピー処理プログラム１１２は、Ｓ２２７０において、Ｒｏｏｔを解消対象ボリュームとして選択し、Ｒｏｏｔをコピー元ボリュームとして選択し、このフローを終了する。【０１４３】
実体位置が実体位置ボリュームのＧＣＭＴに示されていると判定された場合（Ｓ２２６０：ＧＣＭＴ）、又は実体位置が実体位置ボリュームのＧＵＤＴに示されており且つ実体位置ボリュームの対象スロットがＣＡＷ状態でないと判定された場合（Ｓ２２６０：ＧＵＤＴ）、コピー処理プログラム１１２は、Ｓ２２８０において、ＣＡＷボリュームを解消対象ボリュームとして選択し、実体位置ボリュームをコピー元ボリュームとして選択し、このフローを終了する。【０１４４】
実体位置がＲｏｏｔであり且つ実体位置ボリュームの対象スロットがＣＡＷ状態であると判定された場合（Ｓ２２６０：Ｒｏｏｔ（ＣＡＷ  ＯＮ検出））、又は実体位置が実体位置ボリュームのＧＵＤＴに示されており且つ実体位置ボリュームの対象スロットがＣＡＷ状態であると判定された場合（Ｓ２２６０：ＧＵＤＴ（ＣＡＷ  ＯＮ検出））、コピー処理プログラム１１２は、処理をＳ２２４０へ移行させる。【０１４５】
以上のＣＡＷ解消対象判定処理によれば、コピー処理プログラム１１２は、解消対象ボリュームとコピー元ボリュームを検出することができる。【０１４６】
前述のＳ２２６０における第二実体位置検索処理の詳細を説明する。【０１４７】
図１９は、実施例２の第二実体位置検索処理を示す。【０１４８】
まず、コピー処理プログラム１１２は、Ｓ２３２０において、検索ボリュームのＧＵＤＴ３８０内の対象スロットの状態３８５と、検索ボリュームのスロット情報３２０の対象スロットの情報３２３とを判定する。【０１４９】
検索ボリュームの対象スロットがＣＡＷ状態でないと判定された場合（Ｓ２３２０：割当済み、未割当）、コピー処理プログラム１１２は、Ｓ２３３０において、ＣＡＷ状態を検出できないため、異常終了と判定し、このフローを終了する。【０１５０】
検索ボリュームの対象スロットがＣＡＷ状態であると判定された場合（Ｓ２３２０：ＣＡＷ  ＯＮ検出）、コピー処理プログラム１１２は、Ｓ２３４０において、検索ボリュームのＧＣＭＴ３７０内の対象スロットの状態３７５が「未割当」であるか否かを判定する。【０１５１】
検索ボリュームのＧＣＭＴ３７０内の対象スロットの状態３７５が「未割当」でないと判定された場合（Ｓ２３４０：割当済み）、コピー処理プログラム１１２は、Ｓ２３５０において、実体位置ボリュームが検索ボリュームであり且つ実体位置が実体位置ボリュームのＧＣＭＴに示されており且つ実体位置ボリュームの対象スロットがＣＡＷ状態でないことを返し、このフローを終了する。【０１５２】
検索ボリュームのＧＣＭＴ３７０内の対象スロットの状態３７５が「未割当」であると判定された場合（Ｓ２３４０：未割当）、コピー処理プログラム１１２は、Ｓ２３６０において、検索ボリュームの弟世代があるか否かを判定する。【０１５３】
弟世代があると判定された場合（Ｓ２３６０：有）、コピー処理プログラム１１２は、Ｓ２３７０において、検索ボリュームの直後の弟世代のボリュームを、新たな検索ボリュームとして選択し、処理をＳ２３４０へ移行させる。【０１５４】
弟世代がないと判定された場合（Ｓ２３６０：無）、コピー処理プログラム１１２は、Ｓ２３８０において、検索ボリュームの親世代があるか否かを判定する。【０１５５】
親世代がないと判定された場合（Ｓ２３８０：無）、コピー処理プログラム１１２は、Ｓ２３９０において、異常終了と判定し、このフローを終了する。【０１５６】
親世代があると判定された場合（Ｓ２３８０：有）、コピー処理プログラム１１２は、Ｓ２４１０において、検索ボリュームの親世代のボリュームを、新たな検索ボリュームとして選択する。その後、コピー処理プログラム１１２は、Ｓ２４２０において、検索ボリュームがＲｏｏｔであるか否かを判定する。【０１５７】
検索ボリュームがＲｏｏｔであると判定された場合（Ｓ２４２０：Ｙｅｓ）、コピー処理プログラム１１２は、Ｓ２４３０において、検索ボリュームのスロット情報３２０の対象スロットの情報３２３を参照し、検索ボリュームの対象スロットがＣＡＷ状態であるか否かを判定する。【０１５８】
対象スロットがＣＡＷ状態でないと判定された場合（Ｓ２４３０：Ｎｏ）、コピー処理プログラム１１２は、Ｓ２４４０において、実体位置ボリュームがＲｏｏｔであり且つＲｏｏｔの対象スロットがＣＡＷ状態でないことを返し、このフローを終了する。【０１５９】
対象スロットがＣＡＷ状態であると判定された場合（Ｓ２４３０：Ｙｅｓ）、コピー処理プログラム１１２は、Ｓ２４５０において、実体位置ボリュームがＲｏｏｔであり且つＲｏｏｔの対象スロットがＣＡＷ状態であることを返し、このフローを終了する。【０１６０】
検索ボリュームがＲｏｏｔでないと判定された場合（Ｓ２４２０：Ｎｏ）、コピー処理プログラム１１２は、Ｓ２４６０において、検索ボリュームのＧＵＤＴ３８０内の対象スロットの状態３８５と、検索ボリュームのスロット情報３２０の対象スロットの情報３２３とを判定する。【０１６１】
ＧＵＤＴの状態が「未割当」であると判定された場合（Ｓ２４６０：未割当）、コピー処理プログラム１１２は、処理をＳ２３４０へ移行させる。【０１６２】
ＧＵＤＴの状態が「割当済み」であり且つ対象スロットがＣＡＷ状態でないと判定された場合（Ｓ２４６０：割当済み）、コピー処理プログラム１１２は、Ｓ２４７０において、実体位置ボリュームが検索ボリュームであり且つ実体位置が検索ボリュームのＧＵＤＴに示されており且つ実体位置ボリュームの対象スロットがＣＡＷ状態でないことを返し、このフローを終了する。【０１６３】
ＧＵＤＴの状態が「割当済み」であり且つ検索ボリュームの対象スロットがＣＡＷ状態であると判定された場合（Ｓ２４６０：ＣＡＷ  ＯＮ検出）、コピー処理プログラム１１２は、Ｓ２４８０において、実体位置ボリュームが検索ボリュームであり且つ実体位置が実体位置ボリュームのＧＵＤＴに示されており且つ実体位置ボリュームの対象スロットがＣＡＷ状態であることを返し、このフローを終了する。【０１６４】
以上の第二実体位置検索によれば、コピー処理プログラム１１２は、対象スロットのＣＡＷ状態を解消すべき最上位のボリュームを、実体位置ボリュームとして検出することができる。
【実施例３】
【０１６５】
図２０は、実施例３のＣＡＷ解消処理の概要を示す。【０１６６】
スナップショット構造やＣＡＷ状態のボリュームの位置によって、ＣＡＷ状態の解消のためのコピー元のデータが共通である可能性がある。本実施例のコピー処理プログラム１１２は、複数のＣＡＷ状態の解消のためのコピー元及びコピー先を示すコピーリストを作成し、コピーリストに基づいてコピーを行う。コピー処理プログラム１１２が一つのコピー元のデータを複数のコピー先へコピーすることで、ストレージ装置１０のリソースを節約できる。【０１６７】
図２１は、コピーリスト４１０を示す。【０１６８】
コピーリスト４１０は、先頭属性４１１と、先頭ＳＳＩＤ４１２と、リストの長さ４１３とを有する。コピーリスト４１０は、ボリュームを要素として、要素毎に、添え字４２１と、ＣＡＷ解消対象ＳＳＩＤ４２２と、コピー元データ情報４２３と、旧データ退避要否４２４と、旧データ退避先ＳＳＩＤ４２５と、マージコピー要否４２６と、コピー状態４２７とを含む。【０１６９】
先頭属性４１１は、検索された最上位のコピー元ボリュームの属性であり、Ｒｏｏｔ、ＧＣＭＴ、ＧＵＤＴの何れかを示す。先頭ＳＳＩＤ４１２は、最上位のコピー元ボリュームのＳＳＩＤである。先頭属性４１１がＲｏｏｔである場合、先頭ＳＳＩＤ４１２は無効である。リストの長さ４１３は、添え字４２１と、ＣＡＷ解消対象ＳＳＩＤ４２２と、コピー元データ情報４２３と、旧データ退避要否４２４と、旧データ退避先ＳＳＩＤ４２５と、マージコピー要否４２６と、コピー状態４２７の夫々の要素数を示す。【０１７０】
添え字４２１は、要素を示す番号である。ＣＡＷ解消対象ＳＳＩＤ４２２は、対象スロットがＣＡＷ状態であるボリュームのＳＳＩＤを示す。コピー元データ情報４２３は、コピー元ボリュームの対象スロットのデータが旧データ「旧」か現データ「現」かを示す。旧データ退避要否４２４は、旧データ退避処理が「要」か「否」かを示す。旧データ退避先ＳＳＩＤ４２５は、旧データ退避処理が必要である場合、退避先ボリュームのＳＳＩＤを示す。マージコピー要否４２６は、マージコピーが「要」か「否」かを示す。コピー状態４２７は、処理状態を示す。「未」は初期であることを示す。「中」はコピー対象として選択されていることを示す。「完」はＣＡＷ状態の解消が完了したことを示す。【０１７１】
図２２は、実施例３のＣＡＷ解消ジョブを示す。【０１７２】
まず、コピー処理プログラム１１２は、Ｓ３１１０において、ジョブ管理テーブルに基づいて、ＣＡＷ解消ジョブの初期設定を行う。その後、コピー処理プログラム１１２は、Ｓ３１２０において、コピーリスト作成処理を行うことで、コピーリスト４１０を作成する。【０１７３】
その後、コピー処理プログラム１１２は、Ｓ３１３０において、コピー対象ボリューム設定処理を行う。このコピー対象ボリューム設定処理は、コピーリストから、一つのコピー元ボリュームとそれに対応する少なくとも一つのコピー先ボリュームとを、コピー対象ボリュームとして選択し、コピーリスト４１０のうち、選択されたボリュームのコピー状態４２７へ、選択された状態を記録する。その後、コピー処理プログラム１１２は、Ｓ３１４０において、コピー元Ｒｅａｄ処理を行う。このコピー元Ｒｅａｄ処理は、コピーリスト４１０からコピー元ボリュームを選択し、コピー元ボリュームの対象スロットのデータを、キャッシュ領域内のテンポラリ領域へＲｅａｄする。【０１７４】
その後、コピー処理プログラム１１２は、Ｓ３１５０において、旧データ退避先Ｗｒｉｔｅ処理を行う。旧データ退避先Ｗｒｉｔｅ処理は、コピーリスト４１０に基づいて、選択されたコピー先ボリュームのうち、旧データ退避処理が必要なボリュームの対象スロットへ、テンポラリ領域のデータをＷｒｉｔｅする。その後、コピー処理プログラム１１２は、Ｓ３１６０において、マージコピー先Ｗｒｉｔｅ処理を行う。マージコピー先Ｗｒｉｔｅ処理は、コピーリスト４１０に基づいて、選択されたコピー先ボリュームのうち、マージコピーが必要なボリュームの対象スロットへ、テンポラリ領域のデータをＷｒｉｔｅする。【０１７５】
その後、コピー処理プログラム１１２は、Ｓ３１８０において、終了判定処理を行うことで、ＣＡＷ解消処理が完了したか否かを判定する。【０１７６】
ＣＡＷ解消処理が完了していないと判定された場合（Ｓ３１８０：Ｎｏ）、コピー処理プログラム１１２は、処理をＳ３１３０へ移行させ、次のコピー元ボリュームを選択する。【０１７７】
ＣＡＷ解消処理が完了したと判定された場合（Ｓ３１８０：Ｙｅｓ）、コピー処理プログラム１１２は、Ｓ３１９０において、ＣＡＷ解消ジョブの終了処理を行い、このフローを終了する。【０１７８】
以上のＣＡＷ解消ジョブによれば、コピー処理プログラム１１２は、実施例１及び２に比べてコピー元ボリュームからのＲｅａｄの回数を削減することができる。【０１７９】
ここでは、前述のＳ３１２０のコピーリスト作成処理の詳細を説明する。【０１８０】
図２３は、実施例３のコピーリスト作成処理の第一部分を示す。図２４は、実施例３のコピーリスト作成処理の第二部分を示す。【０１８１】
まず、コピー処理プログラム１１２は、Ｓ３２１０において、コピーリストを初期化する。その後、コピー処理プログラム１１２は、Ｓ３２２０において、コピーリストに一つの要素を作成し、コピー状態４２７へ「未」を記録し、リストの長さ４１３へ１を記録する。その後、コピー処理プログラム１１２は、Ｓ３２３０において、アクセスボリュームを処理対象ボリュームとして選択する。【０１８２】
その後、コピー処理プログラム１１２は、Ｓ３２４０において、処理対象ボリュームを副ボリュームとするペアのＳＳＩＤを、ＣＡＷ解消対象ＳＳＩＤ４２２へ記録する。【０１８３】
その後のＳ３２５０〜Ｓ３２９０は、旧データ退避先Ｗｒｉｔｅ処理のための情報を設定する。【０１８４】
コピー処理プログラム１１２は、Ｓ３２５０において、ボリューム情報テーブル３１０に基づいて、処理対象ボリュームがＬｅａｆであるか否かを判定する。【０１８５】
処理対象ボリュームがＬｅａｆであると判定された場合（Ｓ３２５０：Ｙｅｓ）、コピー処理プログラム１１２は、Ｓ３２９０において、旧データ退避要否４２４へ「否」を記録し、処理をＳ３３１０へ移行させる。【０１８６】
処理対象ボリュームがＬｅａｆでないと判定された場合（Ｓ３２５０：Ｎｏ）、コピー処理プログラム１１２は、Ｓ３２６０において、ペア情報テーブル３３０に基づいて、処理対象ボリュームを正ボリュームとし、対象スロットのＷＲ世代番号−１に等しい世代番号を持つペアを、ペアＡとして選択する。即ち、ペアＡは、処理対象ボリュームのＷｒｉｔｅの直前に作成されたペアであり、処理対象ボリュームの旧データの退避先となるペアである。その後、コピー処理プログラム１１２は、Ｓ３２７０において、ペアＡの対象スロットのＧＣＭＴの状態が「割当済み」であるか否かを判定する。【０１８７】
ＧＣＭＴの状態が「割当済み」であると判定された場合（Ｓ３２７０：割当済み）、コピー処理プログラム１１２は、処理を前述のＳ３２９０へ移行させる。【０１８８】
ＧＣＭＴの状態が「未割当」であると判定された場合（Ｓ３２７０：未割当）、コピー処理プログラム１１２は、Ｓ３２８０において、旧データ退避要否４２４へ「要」を記録し、旧データ退避先ＳＳＩＤ４２５へペアＡのＳＳＩＤを記録し、処理をＳ３３１０（図中のＡ）へ移行させる。【０１８９】
その後のＳ３３１０〜Ｓ３３３０は、マージコピーＷｒｉｔｅ処理のための情報を設定する。【０１９０】
コピー処理プログラム１１２は、Ｓ３３１０において、処理対象ボリュームがＲｏｏｔであるか否かを判定する。処理対象ボリュームがＲｏｏｔでないと判定された場合（Ｓ３３１０：Ｎｏ）、コピー処理プログラム１１２は、Ｓ３３２０において、マージコピー要否４２６へ「要」を記録し、処理をＳ３３４０へ移行させる。処理対象ボリュームがＲｏｏｔであると判定された場合（Ｓ３３１０：Ｙｅｓ）、コピー処理プログラム１１２は、Ｓ３３３０において、マージコピー要否４２６へ「否」を記録し、処理をＳ３３４０へ移行させる。【０１９１】
その後、コピー処理プログラム１１２は、Ｓ３３４０において、処理対象ボリュームを検索ボリュームとして前述の第二実体位置検索処理を行い、得られた実体位置ボリュームの対象スロットがＣＡＷ状態であるか否かを判定する。【０１９２】
実体位置ボリュームの対象スロットがＣＡＷ状態であると判定された場合（Ｓ３３４０：ＣＡＷ  ＯＮ）、その後のＳ３４１０〜Ｓ３４３０は、コピー元の情報を設定する。【０１９３】
コピー処理プログラム１１２は、Ｓ３４１０において、処理対象ボリュームのコピー元ボリューム（正ボリューム）の対象スロットのＷＲ世代番号−１が処理対象ボリュームの世代番号より大きいか否かを判定する。【０１９４】
コピー元ボリュームの対象スロットのＷＲ世代番号−１が処理対象ボリュームの世代番号より大きいと判定された場合（Ｓ３４１０：Ｙｅｓ）、コピー元ボリュームと処理対象ボリュームのペアが作成された後に、コピー元ボリュームの対象スロットが更新され、処理対象ボリュームのデータがコピー元ボリュームの旧データであることを示すため、コピー処理プログラム１１２は、Ｓ３４２０において、コピー元データ情報４２３へ「旧」を記録する。【０１９５】
コピー元ボリュームの対象スロットのＷＲ世代番号−１が処理対象ボリュームの世代番号以下であると判定された場合（Ｓ３４１０：Ｎｏ）、コピー元ボリュームの対象スロットが更新された後に、コピー元ボリュームと処理対象ボリュームのペアが作成され、処理対象ボリュームのデータがコピー元ボリュームの現データであることを示すため、コピー処理プログラム１１２は、Ｓ３４３０において、コピー元データ情報４２３へ「現」を記録する。【０１９６】
その後、コピー処理プログラム１１２は、Ｓ３４４０において、リストの長さ４１３に１を加え、Ｓ３４５０において、コピー状態４２７へ「未」を記録し、Ｓ３４６０において、処理対象ボリュームとして、実体位置ボリュームを選択し、処理を前述のＳ３２４０（図中のＢ）へ移行させる。【０１９７】
実体位置ボリュームの対象スロットがＣＡＷ状態でないと判定された場合（Ｓ３３４０：ＣＡＷ  ＯＦＦ）、コピー処理プログラム１１２は、Ｓ３５１０において、実体位置を判定する。【０１９８】
実体位置ボリュームがＲｏｏｔであると判定された場合（Ｓ３５１０：Ｒｏｏｔ）、コピー処理プログラム１１２は、Ｓ３５２０において、先頭属性４１１へＲｏｏｔを記録し、Ｓ３５３０において、先頭ＳＳＩＤ４１２へ無効を記録し、このフローを終了する。【０１９９】
実体位置が実体位置ボリュームのＧＣＭＴに示されていると判定された場合（Ｓ３５１０：ＧＣＭＴ）、コピー処理プログラム１１２は、Ｓ３５４０において、先頭属性４１１へＧＣＭＴを記録し、Ｓ３５６０において、先頭ＳＳＩＤ４１２へ実体位置ボリュームのＳＳＩＤを記録し、このフローを終了する。【０２００】
実体位置が実体位置ボリュームのＧＵＤＴに示されていると判定された場合（Ｓ３５１０：ＧＵＤＴ）、コピー処理プログラム１１２は、Ｓ３５５０において、先頭属性４１１へＧＣＭＴを記録し、Ｓ３５６０において、先頭ＳＳＩＤ４１２へ実体位置ボリュームのＳＳＩＤを記録し、このフローを終了する。【０２０１】
以上のコピーリスト作成処理によれば、コピー処理プログラム１１２は、コピー対象ボリューム設定処理、コピー元Ｒｅａｄ処理、旧データ退避先Ｗｒｉｔｅ処理、マージコピー先Ｗｒｉｔｅ処理の設定を示すコピーリスト４１０を作成することができる。コピーリスト４１０において、要素であるボリュームは、添え字４２１の昇順に、アクセスボリュームから上位ボリュームへ並んでいる。前述のコピーリスト４１０の図の例は、コピーリスト作成処理後の状態を示す。【０２０２】
ここでは、前述のＳ３１３０のコピー対象ボリューム設定処理の詳細を説明する。【０２０３】
図２５は、実施例３のコピー対象ボリューム設定処理を示す。【０２０４】
まず、コピー処理プログラム１１２は、Ｓ３６１０において、コピーリスト４１０の要素の添え字４２１を指定するためのポインタへ、リストの長さ４１３を代入する。その後、コピー処理プログラム１１２は、Ｓ３６２０において、ポインタに示された要素のコピー状態４２７が「未」であるか否かを判定する。【０２０５】
コピー状態４２７が「未」でないと判定された場合（Ｓ３６２０：それ以外）、コピー処理プログラム１１２は、Ｓ３６３０において、ポインタから１を減じ、Ｓ３６４０において、ポインタが０であるか否かを判定する。【０２０６】
ポインタが０でないと判定された場合（Ｓ３６４０：Ｎｏ）、コピー処理プログラム１１２は、処理をＳ３６２０へ移行させ、次の要素について判定する。【０２０７】
ポインタが０であると判定された場合（Ｓ３６４０：Ｙｅｓ）、コピー処理プログラム１１２は、Ｓ３６６０において、異常終了と判定し、このフローを終了する。【０２０８】
コピー状態４２７が「未」であると判定された場合（Ｓ３６２０：未）、コピー処理プログラム１１２は、Ｓ３６５０において、ポインタに示された要素のコピー元データ情報４２３が「現」であるか否かを判定する。【０２０９】
コピー元データ情報４２３が「旧」であると判定された場合（Ｓ３６５０：旧）、コピー処理プログラム１１２は、処理を前述のＳ３６６０へ移行させる。【０２１０】
コピー元データ情報４２３が「現」であると判定された場合（Ｓ３６５０：現）、コピー処理プログラム１１２は、Ｓ３７１０において、ポインタに示された要素のコピー状態４２７へ中を記録し、Ｓ３７２０において、ポインタから１を減じ、Ｓ３７３０において、ポインタが０であるか否かを判定する。【０２１１】
ポインタが０であると判定された場合（Ｓ３７３０：Ｙｅｓ）、コピー処理プログラム１１２は、このフローを終了する。【０２１２】
ポインタが０でないと判定された場合（Ｓ３７３０：Ｎｏ）、コピー処理プログラム１１２は、Ｓ３７４０において、ポインタに示された要素のコピー元データ情報４２３が現であるか否かを判定する。【０２１３】
コピー元データ情報４２３が現であると判定された場合（Ｓ３７４０：現）、コピー処理プログラム１１２は、このフローを終了する。【０２１４】
コピー元データ情報４２３が「旧」であると判定された場合（Ｓ３７４０：旧）、コピー処理プログラム１１２は、処理をＳ３７１０へ移行させる。【０２１５】
以上のコピー対象ボリューム設定処理によれば、コピー処理プログラム１１２は、コピーリスト４１０に示されたボリュームのうち、上位ボリュームから順に（添え字４２１の降順に）、コピー元データ情報４２３が「現」であるボリューム（親世代のＷＲの後に作成されたペアの副ボリューム）をコピー元ボリュームとし、その後に連続する「旧」であるボリューム（親世代のＷＲの前に作成されたペアの副ボリューム）をコピー先ボリュームとし、それらのグループをコピー対象ボリュームとして選択し、それらのコピー状態４２７を「中」に変更することができる。【０２１６】
前述のコピーリスト４１０の例において、最初のコピー対象ボリューム設定処理は、添え字が５から３までのボリュームをコピー対象ボリュームと選択し、次のコピー対象ボリューム設定処理は、添え字が２から１までのボリュームをコピー対象ボリュームとして選択する。【０２１７】
ここでは、前述のＳ３１４０のコピー元Ｒｅａｄ処理の詳細を説明する。【０２１８】
図２６は、実施例３のコピー元Ｒｅａｄ処理を示す。【０２１９】
まず、コピー処理プログラム１１２は、Ｓ３８１０において、添え字４２１を指定するポインタへ、リストの長さ４１３を代入する。その後、コピー処理プログラム１１２は、Ｓ３８２０において、ポインタに示された要素のコピー状態４２７が「中」であるか否かを判定する。【０２２０】
コピー状態４２７が「中」でないと判定された場合（Ｓ３８２０：それ以外）、コピー処理プログラム１１２は、Ｓ３８３０において、ポインタから１を減じ、Ｓ３８４０において、ポインタが０であるか否かを判定する。【０２２１】
ポインタが０でないと判定された場合（Ｓ３８４０：Ｎｏ）、コピー処理プログラム１１２は、処理をＳ３８２０へ移行させ、次の要素について判定する。【０２２２】
ポインタが０であると判定された場合（Ｓ３８４０：Ｙｅｓ）、コピー処理プログラム１１２は、Ｓ３８５０において、異常終了と判定し、このフローを終了する。【０２２３】
コピー状態４２７が「中」であると判定された場合（Ｓ３８２０：中）、コピー処理プログラム１１２は、Ｓ３８６０において、ポインタがリストの長さ４１３と一致するか否かを判定する。【０２２４】
ポインタがリストの長さ４１３と一致すると判定された場合（Ｓ３８６０：一致）、コピー処理プログラム１１２は、Ｓ３８７０において、先頭ＳＳＩＤ４１２及び先頭属性４１１で示されたボリュームをコピー元ボリュームとして選択し、処理をＳ３８９０へ移行させる。【０２２５】
ポインタがリストの長さ４１３と不一致であると判定された場合（Ｓ３８６０：一致）、コピー処理プログラム１１２は、Ｓ３８８０において、ポインタ＋１の要素のＣＡＷ解消対象ＳＳＩＤ４２２で示されたボリュームをコピー元ボリュームとして選択し、そのボリュームの対象スロットのＧＵＤＴに示された実体位置を取得し、処理をＳ３８９０へ移行させる。【０２２６】
その後、コピー処理プログラム１１２は、Ｓ３８９０において、コピー元ボリュームの対象スロットの実体位置に格納されているデータをテンポラリ領域へＲｅａｄし、このフローを終了する。【０２２７】
以上のコピー元Ｒｅａｄ処理によれば、コピー対象ボリュームの中の最上位ボリュームのデータをテンポラリ領域へＲｅａｄすることができる。例えば、コピー対象ボリュームの中の最上位ボリュームの添え字（コピー対象ボリュームの中の最大の添え字）がリストの長さ４１３に等しい場合、コピー処理プログラム１１２は、最初のコピーのために、先頭属性４１１と先頭ＳＳＩＤ４１２に示されたボリュームをコピー元ボリュームとして選択する。そうでない場合、コピー処理プログラム１１２は、前回のコピー対象ボリュームの最下位ボリューム（今回のコピー対象ボリュームの最大の添え字＋１のボリューム）を、コピー元ボリュームとして選択する。【０２２８】
前述のコピーリスト４１０の例において、最初のコピー元Ｒｅａｄ処理は、Ｒｏｏｔをコピー元ボリュームとして選択し、次のコピー元Ｒｅａｄ処理は、添え字が２であるボリュームをコピー元ボリュームとして選択する。【０２２９】
ここでは、前述のＳ３１５０の旧データ退避先Ｗｒｉｔｅ処理の詳細を説明する。【０２３０】
図２７は、実施例３の旧データ退避先Ｗｒｉｔｅ処理を示す。【０２３１】
まず、コピー処理プログラム１１２は、Ｓ４１１０において、要素の添え字４２１を指定するためのポインタへ、リストの長さ４１３を代入する。その後、コピー処理プログラム１１２は、Ｓ４１２０において、ポインタに示された要素のコピー状態４２７が「中」であるか否かを判定する。【０２３２】
コピー状態４２７が「中」でないと判定された場合（Ｓ４１２０：それ以外）、コピー処理プログラム１１２は、Ｓ４１３０において、ポインタから１を減じ、Ｓ４１４０において、ポインタが０であるか否かを判定する。【０２３３】
ポインタが０でないと判定された場合（Ｓ４１４０：Ｎｏ）、コピー処理プログラム１１２は、処理をＳ４１２０へ移行させ、次の要素について判定する。【０２３４】
ポインタが０であると判定された場合（Ｓ４１４０：Ｙｅｓ）、コピー処理プログラム１１２は、Ｓ４１５０において、異常終了と判定し、このフローを終了する。【０２３５】
コピー状態４２７が「中」であると判定された場合（Ｓ４１２０：中）、コピー処理プログラム１１２は、Ｓ４１６０において、ポインタに示された要素の旧データ退避要否４２４が「要」であるか否かを判定する。【０２３６】
旧データ退避要否４２４が「否」であると判定された場合（Ｓ４１６０：Ｎｏ）、コピー処理プログラム１１２は、処理をＳ４２１０へ移行させる。【０２３７】
旧データ退避要否４２４が「要」であると判定された場合（Ｓ４１６０：Ｙｅｓ）、コピー処理プログラム１１２は、Ｓ４１７０において、ポインタに示された要素の旧データ退避先ＳＳＩＤ４２５で示されるボリュームを退避先ボリュームとして選択し、Ｓ４１８０において、退避先ボリュームの対象スロットに対応するキャッシュスロットを退避先キャッシュスロットとして選択し、テンポラリ領域内のデータを退避先キャッシュスロットへＷｒｉｔｅする。【０２３８】
その後、コピー処理プログラム１１２は、Ｓ４２１０において、ポインタから１を減じ、Ｓ４２２０において、ポインタが０であるか否かを判定する。【０２３９】
ポインタが０であると判定された場合（Ｓ４２２０：Ｙｅｓ）、コピー処理プログラム１１２は、このフローを終了する。【０２４０】
ポインタが０でないと判定された場合（Ｓ４２２０：Ｎｏ）、コピー処理プログラム１１２は、Ｓ４２３０において、ポインタに示された要素のコピー状態４２７が「中」であるか否かを判定する。【０２４１】
コピー状態４２７が「中」であると判定された場合（Ｓ４２３０：中）、コピー処理プログラム１１２は、処理をＳ４１６０へ移行させ、次の要素を判定する。【０２４２】
コピー状態４２７が「中」でないと判定された場合（Ｓ４２３０：それ以外）、コピー処理プログラム１１２は、このフローを終了する。【０２４３】
以上の旧データ退避先Ｗｒｉｔｅ処理によれば、コピー処理プログラム１１２は、テンポラリ領域内のデータを、退避先ボリュームへＷｒｉｔｅすることができる。また、コピー処理プログラム１１２は、コピー対象ボリュームのうち、旧データ退避要否４２４が「要」であるボリュームの旧データ退避先ＳＳＩＤ４２５に示されたボリュームを、退避先ボリュームとして選択することができる。【０２４４】
ここでは、前述のＳ３１６０のマージコピー先Ｗｒｉｔｅ処理の詳細を説明する。【０２４５】
図２８は、実施例３のマージコピー先Ｗｒｉｔｅ処理を示す。【０２４６】
マージコピー先Ｗｒｉｔｅ処理における最初のＳ４１１０〜Ｓ４１５０は、前述の旧データ退避先Ｗｒｉｔｅ処理と同様である。【０２４７】
コピー状態４２７が「中」であると判定された場合（Ｓ４１２０：中）、コピー処理プログラム１１２は、Ｓ４１６０ｂにおいて、ポインタに示された要素のマージコピー要否４２６が「要」であるか否かを判定する。【０２４８】
マージコピー要否４２６が「否」であると判定された場合（Ｓ４１６０ｂ：Ｎｏ）、コピー処理プログラム１１２は、処理をＳ４２１０へ移行させる。【０２４９】
マージコピー要否４２６が「要」であると判定された場合（Ｓ４１６０ｂ：Ｙｅｓ）、コピー処理プログラム１１２は、Ｓ４１７０ｂにおいて、ポインタに示された要素のＣＡＷ解消対象ＳＳＩＤ４２２で示されるボリュームをコピー先ボリュームとして選択し、Ｓ４１８０ｂにおいて、コピー先ボリュームの対象スロットに対応するキャッシュスロットをコピー先キャッシュスロットとして選択し、テンポラリ領域内のデータを、コピー先キャッシュスロットへＷｒｉｔｅする。【０２５０】
その後、コピー処理プログラム１１２は、Ｓ４１９０ｂにおいて、ポインタで示された要素のコピー状態４２７を「完」に変更する。【０２５１】
その後のＳ４２１０〜Ｓ４２３０は、前述の旧データ退避先Ｗｒｉｔｅ処理と同様である。【０２５２】
以上のマージコピー先Ｗｒｉｔｅ処理によれば、コピー処理プログラム１１２は、テンポラリ領域内のデータを、各コピー先ボリュームのマージコピー先のプールスロットへＷｒｉｔｅすることができる。また、コピー処理プログラム１１２は、コピー対象ボリュームのうち、マージコピー要否４２６が「要」であるボリュームについて、ＣＡＷ解消対象ＳＳＩＤ４２２に示されたボリュームをコピー先ボリュームとして選択することができる。【０２５３】
ここでは、前述のＳ３１７０の終了判定処理の詳細を説明する。【０２５４】
図２９は、実施例３の終了判定処理を示す。【０２５５】
まず、コピー処理プログラム１１２は、Ｓ４５１０において、テンポラリ領域を解放する。その後、コピー処理プログラム１１２は、Ｓ４５２０において、ポインタへ１を代入する。【０２５６】
その後、コピー処理プログラム１１２は、Ｓ４５３０において、ポインタに示された要素のコピー状態４２７が「完」であるか否かを判定する。【０２５７】
コピー状態４２７が「完」でないと判定された場合（Ｓ４５３０：それ以外）、コピー処理プログラム１１２は、ＣＡＷ解消処理が未完であると判定し、このフローを終了する。【０２５８】
コピー状態４２７が「完」であると判定された場合（Ｓ４５３０：完）、コピー処理プログラム１１２は、Ｓ４５４０において、ポインタに１を加え、Ｓ４５５０において、ポインタがリストの長さ４１３の値より大きいか否かを判定する。【０２５９】
ポインタがリストの長さ４１３の値以下であると判定された場合（Ｓ４５５０：Ｎｏ）、コピー処理プログラム１１２は、処理をＳ４５３０へ移行させ、次の要素を判定する。【０２６０】
ポインタがリストの長さ４１３の値より大きいと判定された場合（Ｓ４５５０：Ｙｅｓ）、コピー処理プログラム１１２は、このフローを終了する。【０２６１】
以上の終了判定処理によれば、コピー処理プログラム１１２は、コピーリスト４１０を用いて、ＣＡＷ解消処理が完了したか否かを判定することができる。【０２６２】
ここでは、実施例３の変形例について説明する。【０２６３】
図３０は、実施例３の変形例の概要を示す。【０２６４】
実施例３の変形例において、ＣＡＷ解消ジョブは、実施例３と同様、コピー元とコピー先を特定する。その後、コピー元からコピー先へのコピー処理を別ジョブに依頼する。これにより、複数のコピージョブが多重で動作できるため、実施例３に比べて処理時間を削減することができる。一方、複数のコピージョブのリソースが必要となる。【０２６５】
図３１は、実施例３の変形例のＣＡＷ解消ジョブを示す。【０２６６】
変形例のＣＡＷ解消ジョブにおける最初のＳ３１１０〜３１４０は、実施例３のＣＡＷ解消ジョブと同様である。【０２６７】
その後、コピー処理プログラム１１２は、Ｓ３１５０ｂにおいて、Ｓ３１５０の旧データ退避先Ｗｒｉｔｅ処理と同様の処理のジョブを起動する。その後、コピー処理プログラム１１２は、Ｓ３１６０ｂにおいて、Ｓ３１６０のマージコピー先Ｗｒｉｔｅ処理と同様の処理のジョブを起動し、起動されたジョブが終了するまで、待機する。【０２６８】
その後、コピー処理プログラム１１２は、Ｓ３１７０ｂにおいて、Ｓ３１５０ｂ、Ｓ３１６０ｂのジョブの結果を取得する。その後のＳ３１８０〜３１９０は、実施例３のＣＡＷ解消ジョブと同様である。【０２６９】
以上の変形例のＣＡＷ解消ジョブによれば、コピー処理プログラム１１２は、実施例３のＣＡＷ解消ジョブに比べて、処理時間を削減することができる。
【実施例４】
【０２７０】
図３２は、実施例４のＣＡＷ解消処理の概要を示す。【０２７１】
旧データ退避先は、世代間で共有されているＧＣＭＴである。そのため、旧データ退避先に対してＷｒｉｔｅによる更新は発生しない。したがって、各世代に対して旧データ退避処理を行うと、同じデータがコピーされることになる。本実施例のコピー処理プログラム１１２は、同一のコピー元の退避データのコピーを１回だけ行い、各ＧＣＭＴの参照先として旧データ退避先を記録することで、プールのデータ使用効率を向上させる。【０２７２】
図３３は、実施例４のＣＡＷ解消ジョブを示す。【０２７３】
実施例４のＣＡＷ解消ジョブにおける最初のＳ３１１０〜Ｓ３１４０は、実施例３のＣＡＷ解消ジョブと同様である。【０２７４】
その後、コピー処理プログラム１１２は、Ｓ３１５０ｄにおいて、共通の退避データをプールに一度だけＷｒｉｔｅする旧データＷｒｉｔｅ処理を行う。その後、コピー処理プログラム１１２は、Ｓ３１５５ｄにおいて、退避データの退避先のプールスロットを示すポインタをＧＣＭＴへ記録する退避先設定処理を行う。【０２７５】
その後のＳ３１６０〜Ｓ３１９０は、実施例３のＣＡＷ解消ジョブと同様である。【０２７６】
以上のＣＡＷ解消ジョブによれば、プールにおける退避データの重複を排除し、プールの使用量を削減することができる。【０２７７】
前述のＳ３１５０ｄにおける旧データＷｒｉｔｅ処理の詳細を説明する。【０２７８】
図３４は、実施例４の旧データＷｒｉｔｅ処理を示す。【０２７９】
まず、コピー処理プログラム１１２は、Ｓ５１１０において、空きプールスロットを検索し、得られた空きプールスロットを退避先プールスロットとして確保する。その後、コピー処理プログラム１１２は、Ｓ５１２０において、テンポラリ領域から退避先プールスロットへコピーする。その後、コピー処理プログラム１１２は、Ｓ５１３０において、プールスロット情報３６０内の退避先プールスロットの状態３６４を、「未割当」から「割当済み」へ変更し、このフローを終了する。【０２８０】
以上の旧データＷｒｉｔｅ処理によれば、コピー処理プログラム１１２は、コピー元のデータをプールへコピーすることができる。【０２８１】
前述のＳ３１５５ｄにおける退避先設定処理の詳細を説明する。【０２８２】
図３５は、実施例４の退避先設定処理を示す。【０２８３】
実施例４の退避先設定処理における最初のＳ４１１０〜Ｓ４１７０は、実施例３の旧データ退避先Ｗｒｉｔｅ処理と同様である。【０２８４】
その後、コピー処理プログラム１１２は、Ｓ４１８０ｄにおいて、ポインタに示された要素のＧＣＭＴにおいて、対象スロットのプール情報へ退避先プールスロットを記録し、対象スロットの状態を「割当済み」に変更する。その後、コピー処理プログラム１１２は、Ｓ４１９０ｄにおいて、プールスロット情報３６０内の退避先プールスロットの参照元情報へ、ポインタに示された要素のＧＣＭＴの対象スロットを示す情報を記録する。【０２８５】
その後のＳ４２１０〜Ｓ４２３０は、実施例３の旧データ退避先Ｗｒｉｔｅ処理と同様である。【０２８６】
以上の退避先設定処理によれば、コピー処理プログラム１１２は、プールへ書き込まれた退避データを、複数のボリュームへ割り当てることができる。【０２８７】
本発明の表現のための用語について説明する。確定処理は、ＣＡＷ解消処理等に対応する。退避処理は、旧データ退避処理、旧データ退避先Ｗｒｉｔｅ処理、旧データＷｒｉｔｅ処理、退避先設定処理等に対応する。マージ処理は、マージコピー処理、マージコピー先Ｗｒｉｔｅ処理等に対応する。データが確定していることは、ＣＡＷ状態でないこと、ＣＡＷフラグがＯＦＦであること等に対応する。データが確定していないことは、ＣＡＷ状態であること、ＣＡＷフラグがＯＮであること等に対応する。未確定ボリュームは、対象スロットがＣＡＷ状態であるボリューム等に対応する。【０２８８】
以上、本発明の実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲を上記構成に限定する趣旨ではない。本発明は、他の種々の形態でも実施する事が可能である。
【符号の説明】
【０２８９】
１０…ストレージ装置、  ２０…ホスト計算機、  ３０…管理端末、  １００…コントローラ、  １１０…メモリ、  １２０…ＣＰＵ、  １３０…ブリッジ、  １４０…上位インタフェース、  １５０…下位インタフェース、  １６０…通信インタフェース、  ２００…記憶デバイス、  ２１０…ディスク
【図１】
2017119065.tif 000003
【図２】
2017119065.tif 000004
【図３】
2017119065.tif 000005
【図４】
2017119065.tif 000006
【図５】
2017119065.tif 000007
【図６】
2017119065.tif 000008
【図７】
2017119065.tif 000009
【図８】
2017119065.tif 000010
【図９】
2017119065.tif 000011
【図１０】
2017119065.tif 000012
【図１１】
2017119065.tif 000013
【図１２】
2017119065.tif 000014
【図１３】
2017119065.tif 000015
【図１４】
2017119065.tif 000016
【図１５】
2017119065.tif 000017
【図１６】
2017119065.tif 000018
【図１７】
2017119065.tif 000019
【図１８】
2017119065.tif 000020
【図１９】
2017119065.tif 000021
【図２０】
2017119065.tif 000022
【図２１】
2017119065.tif 000023
【図２２】
2017119065.tif 000024
【図２３】
2017119065.tif 000025
【図２４】
2017119065.tif 000026
【図２５】
2017119065.tif 000027
【図２６】
2017119065.tif 000028
【図２７】
2017119065.tif 000029
【図２８】
2017119065.tif 000030
【図２９】
2017119065.tif 000031
【図３０】
2017119065.tif 000032
【図３１】
2017119065.tif 000033
【図３２】
2017119065.tif 000034
【図３３】
2017119065.tif 000035
【図３４】
2017119065.tif 000036
【図３５】
2017119065.tif 000037
【国際調査報告】
2017119065.tif 000038
2017119065.tif 000039