(57)【特許請求の範囲】
【請求項１】
プライマリの論理ボリュームに書き込まれるデータであるユーザデータを含むジャーナルを、コピー元の記憶制御装置からコピー先の記憶制御装置に送信し、前記ジャーナルに含まれる前記ユーザデータをセカンダリの論理ボリュームに書き込むことで前記ジャーナルを前記セカンダリの論理ボリュームに反映する非同期型リモートコピーを行う、リモートコピーシステムにおける、前記コピー元及びコピー先の記憶制御装置のうちの一方の記憶制御装置である第１の記憶制御装置であって、
記憶装置に接続される第１のインターフェイスと、
前記コピー元及びコピー先の記憶制御装置のうちの他方の記憶制御装置である第２の記憶制御装置に接続される第２のインターフェイスと、
前記第１及び第２のインターフェイスに接続されるコントローラと、
を有し、
ジャーナルが書き込まれるジャーナルボリュームは、シンプロビジョニングに従う仮想的な論理ボリュームであり、複数の仮想領域で構成されており、前記ジャーナルのサイズは、前記仮想領域のサイズより小さく、
前記コントローラは、前記ジャーナルボリュームに割り当てられている実領域に新たなジャーナルを格納可能な空きが無い場合、
Ｘ個以上のコピー済み仮想領域（Ｘは１以上の整数）が無ければ、前記記憶装置に基づく複数の実領域で構成されたプールから前記ジャーナルボリュームの仮想領域に新たに実領域を割り当て、割り当てた実領域に、前記新たなジャーナルを書き込み、前記コピー済み仮想領域は、割り当てられた実領域に格納されている全てのジャーナルが前記セカンダリの論理ボリュームに反映された仮想領域であり、
Ｘ個以上のコピー済み仮想領域があれば、割り当て済みの実領域におけるコピー済みのジャーナルに前記新たなジャーナルを上書きするラップアラウンドを行う、
記憶制御装置。
【請求項２】
プライマリの論理ボリュームに書き込まれるデータであるユーザデータを含むジャーナルを、コピー元の記憶制御装置からコピー先の記憶制御装置に送信し、前記ジャーナルに含まれる前記ユーザデータをセカンダリの論理ボリュームに書き込むことで前記ジャーナルを前記セカンダリの論理ボリュームに反映する非同期型リモートコピーを行う、リモートコピーシステムにおける、前記コピー元及びコピー先の記憶制御装置のうちの一方の記憶制御装置である第１の記憶制御装置であって、
記憶装置に接続される第１のインターフェイスと、
前記コピー元及びコピー先の記憶制御装置のうちの他方の記憶制御装置である第２の記憶制御装置に接続される第２のインターフェイスと、
前記第１及び第２のインターフェイスに接続されるコントローラと、
を有し、
ジャーナルが書き込まれるジャーナルボリュームは、シンプロビジョニングに従う仮想的な論理ボリュームであり、複数の仮想領域で構成されており、前記ジャーナルのサイズは、前記仮想領域のサイズより小さく、
前記コントローラは、前記ジャーナルボリュームに割り当てられている実領域に新たなジャーナルを格納可能な空きが無い場合、
Ｊ個以上のコピー済みジャーナル（Ｊは１以上の整数）が無ければ、前記記憶装置に基づく複数の実領域で構成されたプールから前記ジャーナルボリュームの仮想領域に新たに実領域を割り当て、割り当てた実領域に、前記新たなジャーナルを書き込み、前記コピー済みジャーナルは、前記セカンダリの論理ボリュームに反映されたジャーナルであり、
Ｊ個以上のコピー済みジャーナルがあれば、割り当て済みの実領域におけるコピー済みのジャーナルに前記新たなジャーナルを上書きするラップアラウンドを行う、
記憶制御装置。
【請求項３】
請求項１又は２記載の記憶制御装置であって、
前記第２の記憶制御装置が、前記コピー先の記憶制御装置であり、
前記コントローラは、ジャーナルを仮想領域単位で転送し、前記第２の記憶制御装置との通信の負荷が所定負荷以上になった場合に、ジャーナルを仮想領域単位ではなくジャーナル単位で転送するようになっている、
記憶制御装置。
【請求項４】
請求項１乃至３のうちのいずれか１項に記載の記憶制御装置であって、
前記コントローラは、キャッシュメモリを有し、キャッシュメモリからキャッシュ領域を確保し、論理ボリュームに入出力されるデータをその確保したキャッシュ領域に一旦格納するように構成されており、
前記コントローラは、前記ジャーナルボリュームに割り当てられている少なくとも１個の実領域について確保されたキャッシュ領域を確保したままとしておく、
記憶制御装置。
【請求項５】
請求項４記載の記憶制御装置であって、
前記ジャーナルボリュームに割り当てられている全ての実領域について、前記キャッシュ領域が確保されたままである、
記憶制御装置。
【請求項６】
請求項１乃至５のうちのいずれか１項に記載の記憶制御装置であって、
前記コントローラは、書込み先の実領域が空き領域を有するものの、その空き領域のサイズが１つのジャーナルのサイズ未満の場合、その実領域とは別の実領域にジャーナルを書き込む、
記憶制御装置。
【請求項７】
請求項１乃至６のうちのいずれか１項に記載の記憶制御装置であって、
前記プライマリの論理ボリューム及び前記セカンダリの論理ボリュームのうちの少なくとも一方が、シンプロビジョニングに従う仮想的な論理ボリュームであり、
前記プールから、前記プライマリの論理ボリューム又は前記セカンダリの論理ボリュームに、実領域が割り当てられる、
記憶制御装置。
【請求項８】
プライマリの論理ボリュームに書き込まれるデータであるユーザデータを含むジャーナルを、コピー元の記憶制御装置からコピー先の記憶制御装置に送信し、前記ジャーナルに含まれる前記ユーザデータをセカンダリの論理ボリュームに書き込む非同期型リモートコピーを行う、リモートコピーシステムにおける、前記コピー元及びコピー先の記憶制御装置のうちの一方の記憶制御装置である第１の記憶制御装置の記憶制御方法であって、
ジャーナルが書き込まれるジャーナルボリュームは、シンプロビジョニングに従う仮想的な論理ボリュームであり、前記仮想ボリュームは複数の仮想領域で構成されており、前記ジャーナルのサイズは、前記仮想領域のサイズより小さく、
前記第１の記憶制御装置は、前記ジャーナルボリュームに割り当てられている実領域に新たなジャーナルを格納可能な空きが無い場合、
Ｘ個以上のコピー済み仮想領域（Ｘは１以上の整数）が無ければ、前記記憶装置に基づく複数の実領域で構成されたプールから前記ジャーナルボリュームの仮想領域に新たに実領域を割り当て、割り当てた実領域に、前記新たなジャーナルを書き込み、前記コピー済み仮想領域は、割り当てられた実領域に格納されている全てのジャーナルが前記セカンダリの論理ボリュームに反映された仮想領域であり、
Ｘ個以上のコピー済み仮想領域があれば、割り当て済みの実領域におけるコピー済みのジャーナルに前記新たなジャーナルを上書きするラップアラウンドを行う、
記憶制御方法。
【請求項９】
プライマリの論理ボリュームに書き込まれるデータであるユーザデータを含むジャーナルを、コピー元の記憶制御装置からコピー先の記憶制御装置に送信し、前記ジャーナルに含まれる前記ユーザデータをセカンダリの論理ボリュームに書き込む非同期型リモートコピーを行う、リモートコピーシステムにおける、前記コピー元及びコピー先の記憶制御装置のうちの一方の記憶制御装置である第１の記憶制御装置の記憶制御方法であって、
ジャーナルが書き込まれるジャーナルボリュームは、シンプロビジョニングに従う仮想的な論理ボリュームであり、前記仮想ボリュームは複数の仮想領域で構成されており、前記ジャーナルのサイズは、前記仮想領域のサイズより小さく、
前記第１の記憶制御装置は、前記ジャーナルボリュームに割り当てられている実領域に新たなジャーナルを格納可能な空きが無い場合、
Ｊ個以上のコピー済みジャーナル（Ｊは１以上の整数）が無ければ、前記記憶装置に基づく複数の実領域で構成されたプールから前記ジャーナルボリュームの仮想領域に新たに実領域を割り当て、割り当てた実領域に、前記新たなジャーナルを書き込み、前記コピー済みジャーナルは、前記セカンダリの論理ボリュームに反映されたジャーナルであり、
Ｊ個以上のコピー済みジャーナルがあれば、割り当て済みの実領域におけるコピー済みのジャーナルに前記新たなジャーナルを上書きするラップアラウンドを行う、
記憶制御方法。
【請求項１０】
プライマリの論理ボリュームに書き込まれるデータであるユーザデータを含むジャーナルを、コピー元の記憶制御装置からコピー先の記憶制御装置に送信し、前記ジャーナルに含まれる前記ユーザデータをセカンダリの論理ボリュームに書き込む非同期型リモートコピーを行う、リモートコピーシステムであって、
ジャーナルが書き込まれるジャーナルボリュームは、シンプロビジョニングに従う仮想的な論理ボリュームであり、前記仮想ボリュームは複数の仮想領域で構成されており、前記ジャーナルのサイズは、前記仮想領域のサイズより小さく、
前記コピー元及びコピー先の記憶制御装置のうちの一方の記憶制御装置である第１の記憶制御装置は、前記ジャーナルボリュームに割り当てられている実領域に新たなジャーナルを格納可能な空きが無い場合、
Ｘ個以上のコピー済み仮想領域（Ｘは１以上の整数）が無ければ、前記記憶装置に基づく複数の実領域で構成されたプールから前記ジャーナルボリュームの仮想領域に新たに実領域を割り当て、割り当てた実領域に、前記新たなジャーナルを書き込み、前記コピー済み仮想領域は、割り当てられた実領域に格納されている全てのジャーナルが前記セカンダリの論理ボリュームに反映された仮想領域であり、
Ｘ個以上のコピー済み仮想領域があれば、割り当て済みの実領域におけるコピー済みのジャーナルに前記新たなジャーナルを上書きするラップアラウンドを行う、
リモートコピーシステム。
【請求項１１】
プライマリの論理ボリュームに書き込まれるデータであるユーザデータを含むジャーナルを、コピー元の記憶制御装置からコピー先の記憶制御装置に送信し、前記ジャーナルに含まれる前記ユーザデータをセカンダリの論理ボリュームに書き込む非同期型リモートコピーを行う、リモートコピーシステムであって、
ジャーナルが書き込まれるジャーナルボリュームは、シンプロビジョニングに従う仮想的な論理ボリュームであり、前記仮想ボリュームは複数の仮想領域で構成されており、前記ジャーナルのサイズは、前記仮想領域のサイズより小さく、
前記コピー元及びコピー先の記憶制御装置のうちの一方の記憶制御装置である第１の記憶制御装置は、前記ジャーナルボリュームに割り当てられている実領域に新たなジャーナルを格納可能な空きが無い場合、
Ｊ個以上のコピー済みジャーナル（Ｊは１以上の整数）が無ければ、前記記憶装置に基づく複数の実領域で構成されたプールから前記ジャーナルボリュームの仮想領域に新たに実領域を割り当て、割り当てた実領域に、前記新たなジャーナルを書き込み、前記コピー済みジャーナルは、前記セカンダリの論理ボリュームに反映されたジャーナルであり、
Ｊ個以上のコピー済みジャーナルがあれば、割り当て済みの実領域におけるコピー済みのジャーナルに前記新たなジャーナルを上書きするラップアラウンドを行う、
リモートコピーシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ジャーナルを利用した非同期リモートコピーに関する。
【背景技術】
【０００２】
第１及び第２のストレージ装置間でのデータのコピーであるリモートコピーが知られている。リモートコピーとしては、例えば、同期リモートコピーと非同期リモートコピーがある。第１のストレージ装置がホストからライト要求を受信した場合、同期リモートコピーが採用されているならば、そのライト要求に従うデータが第１のストレージ装置から第２のストレージ装置に転送された後に、ライトの完了応答がホスト装置に送信される。一方、非同期リモートコピーが採用されているならば、そのライト要求に従うデータが第１のストレージ装置から第２のストレージ装置に転送されなくても、ライトの完了応答がホスト装置に送信される。
【０００３】
非同期リモートコピーが採用されたリモートコピーシステム（以下、非同期リモートコピーシステム）では、例えば、第１のストレージ装置が、第１のＤＶＯＬ（データが格納される論理ボリューム）の他に、第１のＪＶＯＬ（ジャーナル（以下、ＪＮＬ）が格納される論理ボリューム）を有する。同様に、第２のストレージ装置が、第２のＤＶＯＬの他に、第２のＪＶＯＬを有する。第１のストレージ装置は、ライト要求を受信した場合、ライト要求に従うデータを第１のＤＶＯＬに格納し、且つ、そのデータを含んだＪＮＬを第１のＪＶＯＬに格納する。
【０００４】
第１のストレージ装置が、第１のＪＶＯＬ内のＪＮＬを、第２のストレージ装置に転送し、第２のストレージ装置が、第１のストレージ装置からのＪＮＬを、第２のＪＶＯＬに書き込む。その後、第２のストレージ装置が、第２のＪＶＯＬ内のＪＮＬが有するデータを、第２のＤＶＯＬに書き込む。これにより、第１のＤＶＯＬに書き込まれたデータが、第２のＤＶＯＬにコピーされたことになる。非同期リモートコピーとして、例えば、特許文献１に開示の技術が知られている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−６５６２９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
Thin  Provisioning（Dynamic  Provisioningとも言う）に従う仮想的な論理ボリューム（以下、ＶＶＯＬという）が知られている。Thin  Provisioningでは、複数の仮想ページを有するＶＶＯＬと、複数の実ページを有するプールとが備えられる。ＶＶＯＬにデータが書かれる場合、データの書込み先の仮想ページにプールから実ページが割り当てられ、割り当てられた実ページにそのデータが書き込まれる。
【０００７】
ＶＶＯＬを、第１及び第２のＤＶＯＬに採用する技術は知られている。しかし、ＶＶＯＬを第１及び第２のＪＶＯＬに採用する技術は知られていない。ＶＶＯＬを第１及び／又は第２のＪＶＯＬとして採用した場合、下記問題がある。
【０００８】
一般的に非同期リモートコピーでは、複数のＪＮＬは、ＪＶＯＬの先頭の領域から追記される。そして、ＪＮＬがＪＶＯＬの末尾の領域にまで書き込まれた後（ＪＮＬがＪＶＯＬの全領域にまで書き込まれた後）、新たなＪＮＬが書き込まれる場合、ＪＶＯＬにおける最も古いＪＮＬが新たなＪＮＬで上書きされる（ラップアラウンド）。しかしながら、ＪＮＬがＪＶＯＬの末尾の領域にまで書き込まれると、ＪＶＯＬの全仮想ページに実ページが割り当てられたことになる。
【０００９】
ＪＶＯＬの容量は、一般的にＤＶＯＬより大きく、例えば、一又は複数の観点（具体例として、そのＪＶＯＬを指定したライト要求を受ける頻度であるライト頻度（例えば単位はＩＯＰＳ（Input  output  Per  Second））、及びリモート回線が切られても耐えられる時間）に基づいて決定される。従って、ＪＶＯＬの全域に実ページが割り当てられるとすると、使用される実ページの数は膨大となり易い。このため、多数の実ページが必要である。また、もし、プール内に実ページがＪＶＯＬだけでなくＤＶＯＬにも割り当てられるとすると、そのＤＶＯＬに割り当てられる実ページが不足する恐れがあり、これを解消するためには、一層大量の実ページが必要となってしまう。
【００１０】
従って、本発明の目的は、ＶＶＯＬがＪＶＯＬに採用されても、使用される実ページの量を抑えられるようにすることにある。
【課題を解決するための手段】
【００１１】
ＪＶＯＬとして、ＶＶＯＬ（シンプロビジョニングに従う仮想的な論理ボリューム）が採用されている。ＶＶＯＬは複数の仮想領域で構成され、且つ、ＪＮＬのサイズは、仮想領域のサイズより小さい。第１の記憶制御装置（コピー元及びコピー先の記憶制御装置のうちの一方の記憶制御装置）は、ＪＶＯＬにＪＮＬを追記するようになっている。第１の記憶制御装置は、ＪＶＯＬにＪＮＬを書き込む場合、複数の実領域で構成されたプールから仮想領域に割り当てられた実領域に、そのＪＮＬを書き込む。ＪＶＯＬに割り当てられる実領域の数は、Ｎである。Ｎは、１以上の整数であり、且つ、ＪＶＯＬの全域に割り当てられる実領域の数（典型的には、ＪＶＯＬを構成する仮想領域の数）よりも小さい。第１の記憶制御装置は、ＪＶＯＬに割り当てられたＮ個の実領域に新たにジャーナルを追記できない場合、ラップアラウンド（割り当て済みのＮ個の実領域における古いジャーナルに、書き込み対象のジャーナルを上書きすること）を行う。ＪＶＯＬは、後述の正ＪＶＯＬと副ＪＶＯＬのいずれでも良い。
【００１２】
ＪＶＯＬに割り当てられる実領域の数はＮであるが、Ｎの全てに対して実領域を予め割り当てても良いし、Ｎの全てに対して実領域を動的に割り当てても良い。また、Ｎの一部分に対して実領域を予め割り当て、その他の部分に対して実領域を動的に割り当てても良い。
【図面の簡単な説明】
【００１３】
【図１】図１は、本発明の一実施例に係る記憶制御装置を含んだ非同期型リモートコピーシステムの処理の概要を示す。
【図２】図２は、正ストレージ装置２０Ａの構成例を示す。
【図３】図３Ａは、正ストレージ装置２０Ａのメモリに記憶されている管理テーブル、及びプログラムの例を示す。図３Ｂは、副ストレージ装置２０Ｂのメモリに記憶されている管理テーブル、及びプログラムの例を示す。
【図４】図４は、ＣＭ３５Ａのスロットの容量と、正ＪＶＯＬ２２Ａに割り当てられる実ページとの関係を示す。
【図５】図５は、各ページの容量と、各ＪＮＬの容量との関係を示す。
【図６】図６は、コントローラ３０Ａの処理の概要を示す。
【図７】図７Ａは、正仮想ページビットマップ７０Ａの構成例を示す。図７Ｂは、ＪＮＬＧ使用状況管理テーブル７００Ａの構成例を示す。
【図８】図８Ａは、正ＶＯＬ管理テーブル３４１Ａの構成例を示す。図８Ｂは、副ＶＯＬ管理テーブル３４１Ｂの構成例を示す。
【図９】図９Ａは、正ＪＮＬＧ管理テーブル３４２Ａの構成例を示す。副ＪＮＬＧ管理テーブル３４２Ｂの構成例を示す。
【図１０】図１０は、ＪＮＬＧペア管理テーブル３４３Ａ、３４３Ｂの構成例を示す。
【図１１】図１１は、ＶＯＬペア管理テーブル３４４Ａ、３４４Ｂの構成例を示す。
【図１２】図１２Ａは、正ＶＶＯＬ管理テーブル３４５Ａの構成例を示す。図１２Ｂは、副ＶＯＬ管理テーブル３４５Ｂの構成例を示す。
【図１３】図１３Ａは、正仮想ページ割り当て管理テーブル３４６Ａの構成例を示す。図１３Ｂは、副仮想ページ割り当て管理テーブル３４６Ｂの構成例を示す。
【図１４】図１４は、正ＪＮＬステータス管理テーブル３４７Ａの構成例を示す。
【図１５】図１５は、副ＪＮＬステータス管理テーブル３４７Ｂの構成例を示す。
【図１６】図１６Ａは、正仮想ページステータス管理テーブル３４８Ａの構成例を示す。図１６Ｂは、副仮想ページステータス管理テーブル３４８Ｂの構成例を示す。
【図１７】図１７Ａは、正プール管理テーブル３４９Ａの構成例を示す。図１７Ｂは、副プール管理テーブル３４９Ｂの構成例を示す。
【図１８】図１８は、ＪＮＬＧ同士でペアを形成する処理の流れの一例を示す。
【図１９】図１９は、正ＪＶＯＬ２２Ａから副ＪＶＯＬ２２ＢにＪＮＬをコピーする処理の流れの一例を示す。
【図２０】図２０は、副ＤＶＯＬ２１Ｂにデータをリストアする処理の流れの一例を示す。
【図２１】図２１は、ＪＮＬＧの自動定義をする処理の流れの一例を示す。
【図２２】図２２は、図２１のＳ２４３の詳細の一例を示す。
【図２３】図２３は、図２１のＳ２４６の詳細の一例を示す。
【図２４】図２４は、ＪＶＯＬの使用率が閾値を超えた場合の処理の流れの一例を示す。
【図２５】図２５は、正ＪＶＯＬ２２ＡにＪＮＬを書き込む処理の流れの一例を示す。
【図２６】図２６は、ＪＮＬの転送単位の切り替えに関する処理の流れの一例を示す。
【発明を実施するための形態】
【００１４】
以下、本発明の一実施例を説明する。
【００１５】
なお、本発明に従う記憶制御装置は、複数の記憶デバイスを有するストレージ装置であっても良いし、そのストレージ装置が有するコントローラであっても良いし、ストレージ装置に接続されるインテリジェントなスイッチ装置であっても良い。本発明の一実施例に係る記憶制御装置は、ストレージ装置である。プールを構成する複数の実ページは、そのストレージ装置が有する複数の記憶デバイスに基づく記憶領域である。プールを構成する複数の実ページのうちの一部の実ページは、そのストレージ装置の外部のストレージ装置の記憶資源に基づく記憶領域であっても良い。
【００１６】
また、以下の説明では、「ｘｘｘテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていても良い。データ構造に依存しないことを示すために「ｘｘｘテーブル」を「ｘｘｘ情報」と呼ぶことができる。
【００１７】
また、以下の説明では、要素を特定するための識別情報として、ＩＤ（識別子）が使用されるが、識別情報として、名前、番号などが使用されて良い。
【００１８】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、管理サーバ、及びラックマネージャ等に含まれるプロセッサ（例えばＣＰＵ（Central  Processing  Unit））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信インターフェイス装置（例えば通信ポート）を用いながら行うため、処理の主語がプロセッサとされても良い。プログラムを主語として説明された処理は、ストレージ装置或いはコントローラが行う処理としても良い。また、プロセッサは、ＣＰＵのようなマイクロプロセッサに代えて又は加えて、処理の一部又は全部を行うハードウェア回路を含んでも良い。コンピュータプログラムは、プログラムソースからストレージ装置にインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ、又は、コンピュータ読取可能な記憶メディアであっても良い。
【００１９】
また、管理計算機は、一以上の計算機で構成されて良い。例えば、管理計算機が情報を表示する場合、或いは、管理計算機が表示用情報を遠隔の計算機に送信する場合、一つの計算機が管理計算機である。また、例えば、複数の計算機で管理計算機と同等の機能が実現されている場合は、当該複数の計算機（表示を表示用計算機が行う場合は表示用計算機を含んで良い）が、管理計算機である。本実施例では、ＳＶＰ（Service  Processor）が管理計算機である。
【００２０】
また、以下の説明では、リモートコピーにおけるコピー元のストレージ装置を「正ストレージ装置」と言い、そのリモートコピーにおけるコピー先のストレージ装置を「副ストレージ装置」と言うことがある。また、正ストレージ装置が有する要素については、その要素の名称に、適宜、「正」を追加して言うことがあり、副ストレージ装置が有する要素については、その要素の名称に、適宜、「副」を追加して言うことがある。
【００２１】
また、以下の説明では、Thin  Provisioning（Dynamic  Provisioningとも言う）に従う仮想的な論理ボリュームである仮想ボリュームを、「ＶＶＯＬ」と言うことがある。
【００２２】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号のうちの共通符号のみを用いることとし、同種の要素を区別して説明する場合には、参照符号（共通符号と個別符号の組合せ）を用いる。また、以下の説明では、参照符号に代えて、要素に付された識別情報を用いることもある。
【００２３】
また、以下の説明では、番号を「＃」という記号で表すことがある。
【００２４】
また、以下の説明では、ジャーナルボリュームを「ＪＶＯＬ」とし、データボリュームを「ＤＶＯＬ」とする。ＤＶＯＬには、例えば、ホストコンピュータ（以下、「ホスト」と言う）からのデータが書き込まれる。ＪＶＯＬには、ＤＶＯＬに書き込まれるデータ、及びこのデータに関する管理情報を含むジャーナル（以下、「ＪＮＬ」と言う）が書き込まれる。管理情報には、例えば、その管理情報を含むＪＮＬが含むデータの格納先を表す情報と、ＤＶＯＬにデータが書き込まれる度に更新される番号である更新番号（以下、「シーケンシャル番号」或いは「ＳＥＱ＃」と言うこともある）とが含まれる。更新番号が小さいということは、そのＪＮＬに含まれるデータがＤＶＯＬに早い段階で書き込まれた事を示す。また、更新番号が大きいということは、そのＪＮＬに含まれるデータがＤＶＯＬに遅い段階で書き込まれた事を示す。つまり、この更新番号を参照することにより、各ＪＮＬに含まれるデータのＤＶＯＬに書き込まれた順序を知ることができる。
【００２５】
また、以下の説明では、第１のストレージ装置のＪＶＯＬを「正ＪＶＯＬ」と言い、第２のストレージ装置のＪＶＯＬを「副ＪＶＯＬ」と言うことがある。但し、非同期リモートコピーにおいて、正ＪＶＯＬと副ＪＶＯＬの両方が必ずしも必要なわけではない。例えば、正ＪＶＯＬと副ＪＶＯＬのどちらか一方が無くても、本発明を実現することができる。
【００２６】
また、以下の説明では、第１のストレージ装置のプールを「正プール」と言い、第２のストレージ装置のプールを「副プール」と言う。
【００２７】
図１は、本発明の一実施例に係る記憶制御装置を含んだ非同期型リモートコピーシステムの処理の概要を示す。
【００２８】
この非同期型リモートコピーシステムは、正ストレージ装置２０Ａと、副ストレージ装置２０Ｂとを有する。正ストレージ装置２０Ａには、ホストコンピュータ（以下、「ホスト」と省略することがある）１０及び副ストレージ装置２０Ｂが接続されている。
【００２９】
正ストレージ装置２０Ａは、正ＤＶＯＬ２１Ａと、正ＪＶＯＬ２２Ａと、正プール２３Ａと、キャッシュメモリ（以下、「ＣＭ」と言うことがある）３５Ａとを有する。
【００３０】
正ＪＶＯＬ２２Ａは、Thin  Provisioning（Dynamic  Provisioningとも言う）に従う仮想的な論理ボリュームである仮想ボリューム（以下、正ＶＶＯＬとする）である。正ＪＶＯＬ２２Ａは、複数の仮想領域（以下、仮想ページ）２２１Ａで構成される。各ＪＮＬ２２２Ａのサイズは、各仮想ページ２２１Ａのサイズよりも小さい。
【００３１】
正ＤＶＯＬ２１Ａは、ホスト１０からのデータが書き込まれる論理ボリュームである。なお、図に示す例では、正ＤＶＯＬ２１Ａも、正ＪＶＯＬ２２Ａと同様に、Thin  Provisioningに従うＶＶＯＬである。正ＶＤＶＯＬ２１Ａと正ＪＶＯＬ２２Ａには、同一の正プール２３Ａが関連付けられており、故に、その同一の正プール２３Ａから実ページが割り当てられるようになっている。
【００３２】
正プール２３Ａは、図示省略の記憶装置（例えば、ＨＤＤ（Hard  Disk  Drive））に基づく複数の実領域（以下、実ページ）で構成される。正ＪＶＯＬ２２Ａ（仮想ページ２２１Ａ）、及び正ＤＶＯＬ２１Ａには、正プール２３Ａの実ページが動的に割り当てられる。
【００３３】
ＣＭ３５Ａは、複数のキャッシュ領域（以下、スロットと言うことがある）に分割して管理されている。ＣＭ３５Ａ内のスロットには、論理ボリューム（以下、ＶＯＬ）に読み書きされるデータ、例えば、正ＤＶＯＬ２１Ａに読み書きされるデータ、及び正ＪＶＯＬ２２Ａに読み書きされるＪＮＬが一旦書き込まれる。
【００３４】
副ストレージ装置２０Ｂは、副ＤＶＯＬ２１Ｂと、副ＪＶＯＬ２２Ｂと、副プール２３Ｂと、ＣＭ３５Ｂとを有する。副ストレージ装置２０Ｂの各構成の説明は、正ストレージ装置２０Ａと、実質的に同一であるため、説明を省略する。なお、以下の説明において、正ＪＶＯＬを構成する仮想ページを、正仮想ページと言い、副ＪＶＯＬを構成する仮想ページを、副仮想ページと言うことがあり、両者を特に区別しない場合、これらを単に仮想ページと言うことがある。また、副ストレージ装置のＶＶＯＬを副ＶＶＯＬと言うことがある。
【００３５】
次に、ホスト１０から送信されるライト対象のデータ（以下、「ライトデータ」と言うことがある）の流れについて説明する。本実施例では、正ＪＶＯＬ２２Ａに割り当てる実ページの数を、そのＪＶＯＬ２２Ａを構成する全ての仮想ページの数よりも少なくする。図に示す例では、正ＪＶＯＬ２２Ａに割り当てられる実ページの数は１だけであるが、正ＪＶＯＬ２２Ａに割り当てる実ページの数は、これに限定されない。
【００３６】
なお、図では、細い黒矢印が、データの詳細な流れを示し、太い白矢印が、データの大まかな流れを示す。
【００３７】
ホスト１０から送信されたライトデータは、ＣＭ３５Ａに一旦書き込まれてから、正ＤＶＯＬ２１Ａに書き込まれる（Ｓ１）。
【００３８】
正ＤＶＯＬ２１Ａに書き込まれたライトデータと、そのライトデータが書き込まれた順番に相当するＳＥＱ＃を有する管理情報とを含んだＪＮＬ２２２Ａが、ＣＭ３５Ａに書き込まれてから、正ＪＶＯＬ２２Ａに書き込まれる。このＪＮＬ２２２Ａは、仮想ページ２２１Ａの一部分に書き込まれる（Ｓ２）。前述したように、１つのＪＮＬ２２２Ａのサイズは、１つの仮想ページ２２１Ａのサイズよりも小さく、故に、１つの正仮想ページ２２１Ａには、複数のＪＮＬ２２２Ａを書き込むことができる。
【００３９】
正ＪＶＯＬ２２Ａに書き込まれたＪＮＬ２２２Ａは、正ストレージ装置２０Ａから副ストレージ装置２０Ｂに送信され、ＣＭ３５Ｂに書き込まれてから、副ＪＶＯＬ２２Ｂに書き込まれる（Ｓ３）。なお、図に示す例によれば、正ＪＶＯＬ２２Ａに割り当てられる実ページの数と同様に、副ＪＶＯＬ２２Ｂに割り当てられる実ページの数は、１つだけである。しかし、副ＪＶＯＬ２２Ａに割り当てられる実ページの数は、これに限定されない。
【００４０】
副ＪＶＯＬ２２Ｂにおける複数の未反映のＪＮＬのうち、更新順序が最も先である（ＳＥＱ＃が最も小さい）ＪＮＬから、順に、副ＤＶＯＬ２１Ｂに反映される。具体的には、副ＪＶＯＬ２２ＢからＣＭ３５ＢにＪＮＬが読み出され、そのＪＮＬ内のライトデータが、副ＤＶＯＬ２１Ｂに書き込まれる（Ｓ４）。これにより、正ＤＶＯＬ２１Ａに書き込まれたライトデータが、副ＤＶＯＬ２１Ｂにリモートコピーされたことになる。
【００４１】
正ＤＶＯＬ２１Ａを指定したライト要求に従うライトデータがホスト１０から新たに送信された場合、そのライトデータについても、上述のＳ１〜Ｓ４の処理が行われる。その際、ＪＮＬ２２２Ａのサイズ以上の大きな空き領域が、割り当て済みの実ページにある場合、正ストレージ装置２０Ａ内のコントローラは、その空き領域にＪＮＬ２２２Ａを書き込む。しかし、ＪＮＬ２２２Ａのサイズ以上の空き領域が、割り当て済みの実ページに無い場合、その実ページにおける最古のコピー済みＪＮＬ（副ストレージ装置２０Ｂに転送済み且つ副ストレージ装置２０Ｂで反映済みであり正ＪＶＯＬ２２ＡにおいてＳＥＱ＃が最も小さいＪＮＬ）が書き込まれている領域に新たなＪＮＬを上書きするラップアラウンドを行う。
【００４２】
図１を参照して、より具体的な説明をする。図に示す例では、正仮想ページ２２１Ａに割り当て済みの実ページ、ＳＥＱ＃１〜＃２４の２４個のＪＮＬ２２２Ａが書き込まれており、その実ページには、新たなＪＮＬ（ＳＥＱ＃２５以降のＪＮＬ）を追記できるほどの空き領域がない状態である。図に示す例では、ＳＥＱ＃１のＪＮＬにはデータ「Ａ」が含まれ、ＳＥＱ＃２のＪＮＬにはデータ「Ｃ」が含まれ、ＳＥＱ＃２４のＪＮＬにはデータ「Ｄ」が含まれている。実ページに書き込まれているＪＮＬでは、ＳＥＱ＃１のＪＮＬが最も古く、ＳＥＱ＃２４のＪＮＬが最も新しい。
【００４３】
ＳＥＱ＃２５のＪＮＬを正ＪＶＯＬ２２Ａに新たに書き込む場合、割当て済み実ページには新たなＪＮＬを記憶できるほどの空き領域が無いので、正ストレージ装置２０Ａは、ＳＥＱ＃が最も小さいＪＮＬ（ＳＥＱ＃１のＪＮＬ）が書き込まれている領域に、新たなＪＮＬ（ＳＥＱ＃２５のＪＮＬ）を上書きする。
【００４４】
この様に、本実施例では、正ＪＶＯＬ２２Ａを構成する仮想ページ２２１Ａの数よりも少ない数の割当て済み実ページ（図に示す例では１個の実ページ）に新たなＪＮＬを記憶可能な領域が無くなった場合に（ＪＮＬのサイズより大きな空き領域が無くなった場合に）、最古のコピー済みＪＮＬが格納されている領域に新たなＪＮＬが上書きされるラップアラウンドが行われる。つまり、本実施例では、正プール２３Ａから正ＪＶＯＬ２２Ａに割り当てる実ページの数を、正ＪＶＯＬ２２Ａを構成する仮想ページ２２２Ａの数より少なくすることができる。よって、正ＪＶＯＬ２２ＡとしてＶＶＯＬが採用されても、正プール２３Ａから使用される実ページの数を抑えることができる。
【００４５】
なお、図に示す例では、正ＪＶＯＬ２２Ａに正プール２３Ａから割り当てられる実ページは１個だけである。これは、正ストレージ装置２０ＡのＩ／Ｏ（Input/Output）の性能の低下を防ぐことに貢献し得る。
【００４６】
すなわち、正ＪＶＯＬ２２ＡにＪＮＬを書き込む際、一旦、そのＪＮＬはＣＭ３５Ａに書き込まれるが、具体的には、正ストレージ装置２０Ａが、ＪＮＬを書き込み先とするキャッシュ領域（例えば、空きのキャッシュ領域、又は、ＶＯＬに格納済みのデータのみを記憶した、クリーンのキャッシュ領域）をＣＭ３５Ａから確保し、確保したキャッシュ領域に、ＪＮＬを書き込む。従って、正ストレージ装置２０Ａは、ＪＮＬを正ＪＶＯＬ２２Ａに書き込むことになる都度に、キャッシュ領域を確保することを行う必要が有り得る。
【００４７】
しかし、図に示す例では、正ＪＶＯＬ２２Ａに割り当てられる実ページは１個だけなので、その実ページのためのキャッシュ領域が予めＣＭ３５Ａに確保されても、ＣＭ３５Ａには未だ十分な容量の記憶領域が残っているため、格別の問題は無い。そして、その１個の実ページについて予めキャッシュ領域が確保されていれば、ＪＮＬを正ＪＶＯＬ２２Ａに書き込む都度にキャッシュ領域を確保する必要は無い。故に、正ストレージ装置２０ＡのＩ／Ｏ（Input/Output）の性能の低下を防ぐことが期待できる。
【００４８】
なお、正ＪＶＯＬ２２ＡについてＣＭ３５Ａに予め確保しておくキャッシュ領域のサイズは、実ページ１個分に限られない。ＣＭ３５Ａの容量に応じて、Ｋ個（Ｋは１より大きく正ＪＶＯＬ２２Ａを構成する仮想ページの数より少ない）の実ページの総容量分のキャッシュ領域がＣＭ３５Ａに予め確保されていても良い。この場合、正ＪＶＯＬ２２Ａには割り当てられる実ページの最大数はＫで良い。
【００４９】
また、ＣＭ３５Ａに、正ＪＶＯＬ２２Ａについてキャッシュ領域は予め確保されていなくても良い。しかし、コントローラ３０Ａは、正ＪＶＯＬ２２Ａに割り当てた実ページについて一旦キャッシュ領域を確保したら、そのキャッシュ領域を解放せず確保したままとしておいても良い。これにより、以後、その実ページにＪＮＬを書く際にキャッシュ領域を確保することが不要となる。
【００５０】
また、正ストレージ装置２０ＡのＩ／Ｏ性能の低下を防ぐ観点から、予め、Ｎ個の実ページが正ＪＶＯＬ２２Ａに割り当てられていても良い。Ｎは、１以上の整数であり、正ＪＶＯＬ２２Ａの全域に割り当てられる実ページの数であるＭ（ＭはＮ＜Ｍとなる整数）よりも小さい。Ｍは、仮想ページの数と同じ値である。
【００５１】
正ストレージ装置２０Ａについて述べた上述のことは、副ストレージ装置２０Ｂについても同様とすることができる。すなわち、副ＪＶＯＬ２２Ｂに割り当てられる実ページの数は、副ＪＶＯＬ２２Ｂを構成する仮想ページの数よりも少なくすることができ（例えば、副ＪＶＯＬ２２Ｂに割り当てられる実ページを１個だけとすることができ）、割当て済みの実ページにおいて、ラップアラウンドが行われる。副ストレージ装置２０Ｂでも、通常、ＪＮＬを副ＪＶＯＬ２２Ｂに書き込む際には、そのＪＮＬを書き込むためのキャッシュ領域をＣＭ３５Ｂから確保することが行われるが、本実施例では、副ＪＶＯＬ２２Ｂに割り当てられる実ページの数分のキャッシュ領域が予め確保されていても良い。
【００５２】
また、ＪＶＯＬ２２Ａ（及び／又は２２Ｂ）に割り当てられる実ページの最大数のうちの一部についてのみ、予めキャッシュ領域がＣＭ３５Ａ（及び／又は３５Ｂ）から確保されていて、残りについては、ＪＮＬをＪＶＯＬ２２Ａ（及び／又は２２Ｂ）に書き込む際に確保されるようになっていても良い。
【００５３】
また、副ストレージ装置２０Ｂ（例えばその装置２０Ｂ内のコントローラ）は、ＪＮＬを正ストレージ装置２０Ａから受信しそのＪＮＬをＣＭ３５Ｂ（又は副ＪＶＯＬ２２Ｂ）に書き込む都度、そのＪＮＬが転送済みであることを意味する応答（例えば、受信したＪＮＬが有するＳＥＱ＃を含んだ応答）を、正ストレージ装置２０Ａに返して良い。正ストレージ装置２０Ａは、そのような応答を受信した場合、その応答に対応するＪＮＬ（正ＪＶＯＬ２２ＡにおけるＪＮＬ）のステータスを、転送済みとして管理することができる。但し、正ＪＶＯＬ２２ＡにおけるＪＮＬは、副ストレージ装置２０Ｂへの転送がされても、副ＤＶＯＬ２１Ｂに反映されるまで、正ＪＶＯＬ２２Ａに残っていることが望ましい。なぜなら、副ストレージ装置２０Ｂで障害が発生し、副ＤＶＯＬ２１Ｂに未反映のＪＮＬを副ストレージ装置２０Ｂに再送することを正ストレージ装置２０ＡがＳＶＰ５０又は副ストレージ装置２０Ｂ等から要求された場合、副ＤＶＯＬ２１Ｂに未反映のＪＮＬが正ＪＶＯＬ２２Ｂに残っていないと、そのＪＮＬを再送することができないからである。
【００５４】
また、副ストレージ装置２０Ｂは、ＪＮＬを副ＪＶＯＬ２２Ｂに反映する都度（ＪＮＬ内のライトデータを副ＤＶＯＬ２１Ｂに書き込む都度）、そのＪＮＬが反映済みであることを意味する応答（例えば、そのＪＮＬが有するＳＥＱ＃を含んだ応答）を、正ストレージ装置２０Ａに返して良い。正ストレージ装置２０Ａは、そのような応答を受信した場合、その応答に対応するＪＮＬ（正ＪＶＯＬ２２ＡにおけるＪＮＬ）のステータスを、コピー済みとして管理することができる。副ＤＶＯＬ２２Ｂに書き込まれたライトデータを含むＪＮＬは、副ＪＶＯＬ２２Ｂ及び正ＪＶＯＬ２２Ａの両方から削除されて良い。
【００５５】
また、ＪＶＯＬ（ＶＶＯＬ）に割り当てられる実ページの最大数を、ＪＶＯＬ（ＶＶＯＬ）を構成する仮想ページの数よりも少ない、ということを、正ストレージ装置２０Ａと副ストレージ装置２０Ｂの一方だけで行われても良い。
【００５６】
以下、本実施例を詳細に説明する。その際、正ストレージ装置２０Ａに関する事項を詳細に説明し、その事項のほとんどが、副ストレージ装置２０Ａについても同様なので、副ストレージ装置２０Ａについては適宜説明を省略する。
【００５７】
図２は、正ストレージ装置２０Ａの構成例を示す。
【００５８】
正ストレージ装置２０Ａは、コントローラ３０Ａと、複数の記憶デバイス４０Ａとを有する。記憶デバイス４０Ａは、例えばＨＤＤ（Hard  Disk  Drive）である。複数の記憶デバイス４０ＡでＲＡＩＤ（Redundant  Array  of  Independent  (or  Inexpensive)  Disks）グループが構成され、各ＲＡＩＤグループを基に、実体的なＶＯＬ（以下、「実ＶＯＬ」と言う）４１Ａが形成される。実ＶＯＬ４１は、ホスト１０に提供されずプールの構成要素であっても良いし、ホスト１０に提供されるＤＶＯＬとされても良い。前者の場合、実ＶＯＬ４１は複数の実ページに分割されて良い。なお、記憶デバイス４０Ａには、ＨＤＤに代えて、テープ、或いはフラッシュメモリ等の別の物理的な記憶デバイスが採用されても良い。
【００５９】
コントローラ３０Ａは、複数のフロントエンドインターフェイス装置（以下、ＦＥ−ＩＦ）３１Ａと、ＮＩＣ（Network  Interface  Card）３２Ａと、ＣＰＵ（Central  Processing  Unit）３３Ａと、メモリ３４Ａと、ＣＭ３５Ａと、バックエンドインターフェイス装置（以下、ＢＥ−ＩＦ）３６Ａとを有する。コントローラ３０Ａが行う処理は、ＣＰＵ３３Ａが１以上のコンピュータプログラムを実行することにより行われて良いが、その処理の少なくとも一部が、ハードウェア回路によって行われても良い。
【００６０】
複数のＦＥ−ＩＦ３１Ａに、ホスト１０、及び副ストレージ装置２０Ｂが接続される。コントローラ３０Ａ（ＣＰＵ３３Ａ）は、ＦＥ−ＩＦ３１Ａを介して、ホスト１０、及び副ストレージ装置２０Ｂと通信する。
【００６１】
ＮＩＣ３２Ａには、ＳＶＰ（SerVice  Processor）５０が接続される。ＳＶＰ５０は、管理計算機の一例である。
【００６２】
ＣＰＵ３３Ａは、コントローラ３０Ａの処理を制御する。メモリ３４Ａには、コントローラ３０Ａが、正ストレージ装置２０Ａを制御するために必要な各種情報、及びプログラムが記憶されている。ＣＰＵ３３Ａは、メモリ３４Ａに記憶されている各種情報に基づいて、各種プログラムを実行することにより、各種機能を実現する。
【００６３】
ＣＭ３５Ａは、記憶デバイス４０Ａに書き込まれるデータ、及び、記憶デバイス４０Ａから読み出されたデータを記憶する。ＣＭ３５Ａはメモリ３４Ａと一体であっても良い。
【００６４】
ＢＥ−ＩＦ３６Ａに、記憶デバイス４０Ａが接続される。コントローラ３０Ａ（ＣＰＵ３３Ａ）は、ＢＥ−ＩＦ３６Ａを介して、書込み先のＶＯＬ（例えば、正ＤＶＯＬ２１Ａ又は正ＪＶＯＬ２２Ａに割り当てられた実ページ）の基になっている記憶デバイス４０Ａにデータを書き込む。
【００６５】
以上が、正ストレージ装置２０Ａの構成の説明である。なお、コントローラ３０Ａは、図２に示す構成に限らず、他の構成を有していても良い。
【００６６】
なお、副ストレージ装置２０Ｂの構成は、正ストレージ装置２０Ａの構成と実質的に同じであるため、副ストレージ装置２０Ｂについての説明を省略する。
【００６７】
図３Ａは、正ストレージ装置２０Ａのメモリ３４Ａに記憶されている管理テーブル、及びプログラムの例を示す。
【００６８】
メモリ３４Ａには、正ＶＯＬ管理テーブル３４１Ａと、正ジャーナルグループ（以下、「正ＪＮＬＧ」と言う）管理テーブル３４２Ａと、ＪＮＬＧペア管理テーブル３４３Ａと、ＶＶＯＬペア管理テーブル３４４Ａと、正ＶＶＯＬ管理テーブル３４５Ａと、正仮想ページ割り当て管理テーブル３４６Ａと、正ＪＮＬステータス管理テーブル３４７Ａと、正仮想ページステータス管理テーブル３４８Ａと、正プール割り当て管理テーブル３４９Ａと、制御プログラム３５０Ａと、が記憶されている。
【００６９】
正ＶＯＬ管理テーブル３４１Ａは、正ストレージ装置２０Ａが有する全てのＶＯＬを管理するテーブルである。ＶＯＬは、ＶＶＯＬ又は実ＶＯＬである。
【００７０】
正ＪＮＬＧ管理テーブル３４２Ａは、正ストレージ装置２０Ａの正ＪＮＬＧを管理するテーブルである。ＪＮＬＧとは、データを格納する１個以上の論理ＶＯＬと、ＪＮＬを格納する論理ＶＯＬから構成されるボリュームの集合を示す。
【００７１】
ＪＮＬＧペア管理テーブル３４３Ａは、正ＪＮＬＧと、副ストレージ装置２０ＢのＪＮＬＧ（以下、副ＪＮＬＧとする）とのペアの状態を管理するテーブルである。
【００７２】
ＶＶＯＬペア管理テーブル３４４Ａは、正ＶＶＯＬと、副ＶＶＯＬとのペアの状態を管理するテーブルである。
【００７３】
正ＶＶＯＬ管理テーブル３４５Ａは、正ＶＶＯＬを管理するテーブルである。
【００７４】
正仮想ページ割り当て管理テーブル３４６Ａは、正仮想ページに正プールからどの実ページが割り当てられているかを管理するテーブルである。
【００７５】
正ＪＮＬステータス管理テーブル３４７Ａは、正ストレージ装置２０Ａで処理されるＪＮＬ（正ＪＮＬ）のステータスを管理するテーブルである。
【００７６】
正仮想ページステータス管理テーブル３４８Ａは、正仮想ページのステータスを管理するテーブルである。
【００７７】
正プール割り当て管理テーブル３４９Ａは、正プールが、どの正ＪＶＯＬに割り当てられているかを管理するテーブルである。
【００７８】
制御プログラム３５０Ａは、ＣＰＵ３３Ａが、正ストレージ装置２０Ａを制御するためのコンピュータプログラムである。
【００７９】
図３Ｂは、副ストレージ装置２０Ｂのメモリ３４Ｂに記憶されている管理テーブル、及びプログラムの例を示す。
【００８０】
メモリ３４Ｂには、副ＶＯＬ管理テーブル３４１Ｂと、副ＪＮＬＧ管理テーブル３４２Ｂと、ＪＮＬＧペア管理テーブル３４３Ｂと、ＶＶＯＬペア管理テーブル３４４Ｂと、副ＶＶＯＬ管理テーブル３４５Ｂと、副仮想ページ割り当て管理テーブル３４６Ｂと、副ＪＮＬステータス管理テーブル３４７Ｂと、副仮想ページステータス管理テーブル３４８Ｂと、副プール割り当て管理テーブル３４９Ｂと、制御プログラム３５０Ｂと、が記憶されている。
【００８１】
これらの管理テーブルは、第１のストレージ２０Ａのメモリ３４Ａに記憶されている管理テーブルと実質的に同一であるため、説明を省略する。
【００８２】
図４は、ＣＭ３５Ａのスロットの容量と、正ＪＶＯＬ２２Ａに割り当てられる実ページとの関係を示す。
【００８３】
ＣＭ３５は、複数のスロット（キャッシュ領域）３５１Ａで構成されている。１つの仮想ページ２２１Ａ（１つの実ページ）の容量は、所定数（例えば１６８個）のスロット３５１Ａの容量に等しい。図１にて説明したように、ＶＯＬ（例えば、正ＤＶＯＬ２１Ａ及び正ＪＶＯＬ２２Ａ）に読み書きされるデータは、一旦ＣＭ３５Ａに書き込まれる。プール２３Ａは、複数の実ＶＯＬで構成されており、各実ＶＯＬが、複数の実ページに分割されており、実ページが、仮想ページに割り当てられる。
【００８４】
本実施例では、ＣＭ３５Ａにおける所定数のスロット（図１の例で言えば、１個のページと同じ容量分（１６８個）のスロット）３５１Ａが、正ＪＶＯＬ２２Ａについて予め確保されている。例えば、Ｋ個（Ｋは１より大きく正ＪＶＯＬ２２Ａを構成する仮想ページの数より少ない）の仮想ページ２２１Ａの容量分のスロットをＣＭ３５Ａに予め確保する場合、（１６８×Ｋ）個のスロットが予め確保される。
【００８５】
このように、ＣＭ３５Ａのスロットを所定数の仮想ページ分だけ予め確保しておくと、ＪＮＬを正ＪＶＯＬ２２Ａに書き込む際に、ＣＭ３５Ａのスロットを確保する動作が省略される。故に、正ストレージ装置２０Ａの性能の低下を回避することが期待できる。また、図１に示したように、正ＪＶＯＬ２２Ａに割り当てる実ページの数を１個（抽象的には、正ＪＶＯＬ２２Ａの容量の所定割合以下のページ数分）とすると、予め確保しておくスロット数（キャッシュ容量）を節約することができる。
【００８６】
なお、副ストレージ装置２０Ｂにおける、ＣＭ３５Ｂのスロットの容量と副ＪＶＯＬ２２Ｂに割り当てられるページとの関係は、ＣＭ３５Ａのスロットの容量と正ＪＶＯＬ２２Ａに割り当てられるページとの関係と実質的に同一であるため、説明を省略する。
【００８７】
図５は、各ページの容量と、各ＪＮＬの容量との関係を示す。ここでも、正ストレージ装置２０Ａを例に採り説明する。
【００８８】
図４で説明したように、１個の仮想ページ２２１Ａの容量は、１６８個分のスロットの容量に等しい。１個の仮想ページ２２１Ａの容量は、例えば２ＭＢである。ＪＮＬ２２２Ａの容量は、例えば２ＫＢである。
【００８９】
コントローラ３０Ａが、正仮想ページ２２１Ａの先頭から、ＪＮＬ２２２Ａを書き込む。その際、仮想ページ２２１Ａに割り当てられた実ページに空き領域があるものの、その空き領域の容量が、ＪＮＬ２２２Ａのサイズ未満の場合がある。この場合、できるだけ空き領域を使うために、ＪＮＬ２２２Ａ（図に示す例ではＳＥＱ＃１００のＪＮＬ）の一部を、その実ページに書き、そのＪＮＬ２２２Ａの残りを、別の実ページに書き込む事が考えられる。
【００９０】
しかし、本実施例では、そのように、１つのＪＮＬ２２２Ａを２つの実ページに跨るように書くのではなく、コントローラ３０Ａは、空き領域が少ない実ページの割当先の仮想ページとは別の仮想ページにプール２３Ａから空きの実ページを割当て、その実ページの先頭から、ＪＮＬ２２２Ａを書き込む。その際、割当て済みの実ページの数が規定の数（正ＪＶＯＬを構成する仮想ページの数未満の数）に達していれば、コントローラ３０Ａは、正ＪＶＯＬ２２Ａに割り当て済みの１以上の実ページのうち、最も古いコピー済みを記憶している領域に、新たな書き込み対象のＪＮＬを上書きする（ラップアラウンド）。
【００９１】
以上の処理により、ＪＮＬ２２２Ａが、複数の実ページに跨って書き込まれるのを回避することができる。
【００９２】
図６は、コントローラ３０Ａの処理の概要を示す。なお、図６の説明では、正ＪＶＯＬ２２Ａに割り当てられる実ページの数が固定値ではなく可変値である。すなわち、図６は、正ＪＶＯＬ２２Ａに割り当てられる実ページの数が一定ではないことの一例を示す（但し、正ＪＶＯＬ２２Ａに割り当てられる実ページの数が、上記説明と同様、正ＪＶＯＬ２２Ａを構成する仮想ページの数より少ない）。
【００９３】
例えば、コントローラ３０Ａにより、仮想ページを単位として、ＪＮＬ２２２Ａのコピーが行われる。すなわち、１つの仮想ページ（正確には、その仮想ページに割り当てられている実ページ）に格納されているＪＮＬ群（仮想ページに格納されている全てのＪＮＬ）毎に、正ストレージ装置２０Ａから副ストレージ装置２０Ｂにコピーが行われる。ＪＮＬは、副ストレージ装置２０Ｂから正ストレージ装置２０Ａへ送られたリードコマンドに応答して正ストレージ装置２０Ａから副ストレージ装置２０Ｂに送られるが、それに代えて、正ストレージ装置２０Ａから副ストレージ装置２０Ｂへのライトコマンドと共に送られても良い。
【００９４】
コントローラ３０Ａは、正ＪＶＯＬ２２Ａにおける各仮想ページ２２１Ａのステータスを管理している。
【００９５】
実ページが割り当てられていない仮想ページ２２１Ａのステータスは、「未割当て」である。
【００９６】
コントローラ３０Ａは、「未割当て」の仮想ページ２２１Ａに初めてＪＮＬを書き込む場合、その仮想ページ２２１Ａに実ページを割当て、割り当てた実ページにＪＮＬを書き込み、その仮想ページ２２１Ａのステータスを、「未コピー」に変更する。
【００９７】
コントローラ３０Ａは、「未コピー」の仮想ページから少なくとも１つのＪＮＬを副ストレージ装置２０Ｂに転送した場合、その仮想ページのステータスを「未コピー」から「コピー中」に変更する。「コピー中」は、仮想ページから少なくとも１つのＪＮＬが副ストレージ装置２０Ｂへ転送され始めたものの、その仮想ページに書き込まれた所定数（例えば実ページに書き込み可能なＪＮＬの最大数）のＪＮＬの全てが未だ副ＤＶＯＬ２１Ｂに反映されていないこと、言い換えれば、その仮想ページに割り当てられている実ページに記憶されているＪＮＬを未だ消去することができないこと、を意味する。従って、「コピー中」の仮想ページ２２１Ａは、例えば、以下の（Ａ）乃至（Ｃ）のうちの状況、
（Ａ）仮想ページからいずれのＪＮＬも副ＪＶＯＬ２２Ｂに転送されていない状況、
（Ｂ）仮想ページから少なくとも１つのＪＮＬが副ＪＶＯＬ２２Ｂに転送されたがそのうちのいずれのＪＮＬも副ＤＶＯＬ２１Ｂに反映されていない状況、
（Ｃ）仮想ページから少なくとも１つのＪＮＬが副ＪＶＯＬ２２Ｂに転送され副ＤＶＯＬ２１Ｂに反映されたが、未だ、その仮想ページにおける全てのＪＮＬが副ＤＶＯＬ２１Ｂに反映されていない状況、
のいずれも該当する。なお、上記（Ａ）乃至（Ｃ）のうちのどの状況に該当するかが分かるよう、「コピー中」というステータスは、より複数の詳細なステータスに細分化されていても良い。
【００９８】
仮想ページ２２１Ａに割り当てられた実ページには、ＪＮＬ２２２Ａが追記されていく。その実ページの空き容量がＪＮＬ２２２Ａのサイズ未満になった場合、コントローラ３０Ａは、その実ページが割り当てられている仮想ページの次の仮想ページに、空きの実ページ２３１Ａを新たに割り当て、その新たに割り当てた実ページ２３１Ａに、ＪＮＬ２２２Ａを書き込む。新たに実ページが割り当てられた仮想ページのステータスは、その仮想ページから１つでもＪＮＬが転送された場合に、図示の通り、「コピー中」というステータスにされる。
【００９９】
このようにして、或る時間（図示の第１の時間）が経過すると、正ＪＶＯＬ２２Ａに書き込まれるＪＮＬが増えるので、正ＪＶＯＬ２２Ａに割り当てられる実ページが増え、且つ、ステータスが「コピー中」の仮想ページが増える。
【０１００】
そして、やがて（更に図示の第２の時間が経過すると）、最初にステータスが「コピー中」となった仮想ページのステータスが、「コピー済み」に変わる。「コピー済み」は、仮想ページ内の全てのＪＮＬが副ＤＶＯＬ２１Ｂに反映されたこと、言い換えれば、その仮想ページ内の全てのＪＮＬが消されても良いことを意味する。
【０１０１】
「コピー済み」の仮想ページがＨ個（例えばＨ＝１）生じた時点以降で、コントローラ３０Ａは、正ＪＶＯＬ２２Ａに新たに実ページを割り当てることを中止する。すなわち、その時点以降、新たなＪＮＬ２２２Ａを正ＪＶＯＬ２２Ａに書き込む場合、コントローラ３０Ａは、正ＪＶＯＬ２２に最近割り当てた実ページにある空き領域が、ＪＮＬ未満の容量であっても、別の仮想ページに新たな空きの実ページを割り当てない。コントローラ３０Ａは、「コピー済み」の仮想ページ２２１Ａに割り当てられている実ページにおける最古のＪＮＬが記憶されている領域に、書き込み対象のＪＮＬ２２２Ａを書き込む。図示の例では、正ＪＶＯＬ２２Ａに割り当てられる実ページ２３１Ａの数である５は、正ＪＶＯＬ２２Ａを構成する仮想ページ２２１Ａの数よりも少ない。
【０１０２】
なお、「コピー済み」の仮想ページの数である上記Ｈは、正ＪＶＯＬ２２Ａを構成する仮想ページ２２１Ａの数よりも少なければ、１より大きな整数でも良い。
【０１０３】
また、コントローラ２０Ａは、仮想ページ単位でＪＮＬを副ストレージ装置２０Ｂに転送することに代えて、ＪＮＬ単位で副ストレージ装置２０ＢにＪＮＬを転送しても良い。例えば、コントローラ２０Ａは、副ストレージ装置２０Ｂとの通信負荷が所低負荷未満の場合（例えば、正ストレージ装置２０Ａと副ストレージ装置２０Ｂ間の帯域が所定値以上空いている、ＣＰＵ３３Ａの使用率が所定値未満である、等）、仮想ページ単位でＪＮＬを副ストレージ装置２０Ｂに転送し、その通信負荷がその所定負荷以上になった場合に（例えばＪＮＬの転送遅延が生じた場合に）、仮想ページ単位でＪＮＬを副ストレージ装置２０Ｂに転送することをやめて、ＪＮＬ単位で副ストレージ装置２０ＢにＪＮＬを転送しても良い。通信負荷が所定負荷以上になった場合には、ＪＮＬ単位で転送した方が、同じ時間内により多くのＪＮＬを転送ることが期待でき、故に、コピー元の仮想ページのステータスとして、コピー済みのステータスをより早く得られることが期待でき、以って、正ＪＶＯＬ２２Ａに割り当てる実ページの数を減らすことが期待できる。
【０１０４】
なお、ＪＮＬ単位でのＪＮＬ転送を開始して仮想ページ単位のＪＮＬ転送に戻すまでの間（或いは、仮想ページ単位でのＪＮＬ転送を行っている間にも）、コントローラ２０Ａは、ＪＮＬ毎のステータスを管理して良い。例えば、ＪＮＬが副ストレージ装置２０に転送されたものの副ＤＶＯＬ２１Ｂに未反映であれば、コントローラ２０Ａは、そのＪＮＬのステータスを「コピー中」として管理し、そのＪＮＬが副ＤＶＯＬ２１Ｂに反映された場合には、そのＪＮＬのステータスを「コピー済み」として管理して良い。「コピー済み」のＪＮＬがＪ個生じた時点以降で、コントローラ３０Ａは、正ＪＶＯＬ２２Ａに新たに実ページを割り当てることを中止してよい。Ｊの値は、例えば、１以上であり、且つ、（Ｈ×Ｔ）以下である（Ｔは、１つの仮想ページに格納されるＪＮＬの数）。
【０１０５】
また、仮想ページ単位とＪＮＬ単位のどちらの単位でＪＮＬを転送するかは、副ストレージ装置２０Ｂのコントローラが、通信負荷を監視し、その結果を基に、切り替えても良い。例えば、副ストレージ装置２０Ｂは、仮想ページ単位でＪＮＬをリードするための第１種のリードコマンドを正ストレージ装置２０Ａに送信し、通信負荷が所定負荷以上になったことを検出した後は、ＪＮＬ単位でＪＮＬをリードするための第２種のリードコマンドを正ストレージ装置２０Ａに送信して良い。
【０１０６】
図７Ａは、正仮想ページビットマップ７０Ａの構成例を示す。
【０１０７】
正仮想ページビットマップ７０Ａは、メモリ３４Ａに記憶される。正仮想ページビットマップ７０Ａを参照することにより、ＣＰＵ３３Ａは、どのＪＮＬＧ（ジャーナルグループ）のどのＪＮＬが副ＤＶＯＬ２２Ｂにコピー済み（反映済み）であるかどうかを知ることができる。
【０１０８】
正仮想ページビットマップ７０Ａは、ＪＮＬＧ＃７１Ａごとに、複数のビット７２を有する。各ビットは、ＪＮＬのＳＥＱ＃に対応している。ＳＥＱ＃ｎ（ｎは０以上の整数のうちのいずれか）がコピー済みであれば、ｎ番目のビットがオン（例えば１）となる。ＣＰＵ３３Ａは、ＪＮＬＧ＃１のＪＮＬＧについて、ＳＥＱ＃ｎのＪＮＬを転送した後、副ストレージ装置２０Ｂから、そのＪＮＬを副ＤＶＯＬ２１Ｂに反映済みであることを意味する通知を受けたとき、ＪＮＬＧ＃１且つＳＥＱ＃ｎに対応するビットをオンにする。
【０１０９】
なお、ＪＮＬＧは、１以上のＤＶＯＬと１以上のＪＶＯＬとの集合である。ＪＮＬＧとしては、正ＪＮＬＧと副ＪＮＬＧがある。正ＪＮＬＧは、１以上の正ＤＶＯＬと１以上の正ＪＶＯＬとの集合である。副ＪＮＬＧは、１以上の副ＤＶＯＬと１以上の副ＪＶＯＬとの集合である。
【０１１０】
図７Ｂは、ＪＮＬＧ使用状況管理テーブル７００Ａの構成例を示す。
【０１１１】
ＪＮＬＧ使用状況管理テーブル７００Ａは、メモリ３４Ａに記憶される。ＪＮＬＧ使用状況管理テーブル７００Ａは、ＪＮＬＧ毎に、ＪＮＬＧ＃７０１Ａと、使用率７０２Ａと、全ページ数７０３Ａと、使用ページ数７０４Ａとを関連付けて記憶する。
【０１１２】
ＪＮＬＧ＃７０１Ａは、ＪＮＬＧを識別するための番号である。
【０１１３】
使用率７０２Ａは、ＪＮＬＧの全容量に対する全ＪＮＬの容量の割合を示す情報である。
【０１１４】
全ページ数７０３Ａは、ＪＮＬＧが有する全ページ数を示す情報である。
【０１１５】
使用ページ数７０４Ａは、ＪＮＬＧが有する全ページのうちＪＮＬが格納されているページの数を示す情報である。使用率７０２Ａは、全ページ数７０３Ａと使用ページ数７０４Ａに基づいて算出される。
【０１１６】
なお、副ストレージ装置２０Ｂのメモリ３４Ｂにも、副仮想ページビットマップ、及びＪＮＬＧ使用状況管理テーブルが記憶されて良いが、それらは、それぞれ、正ストレージ装置２１Ａの正仮想ページビットマップ７０Ａ、及びＪＮＬＧ使用状況管理テーブル７００Ａと、実質的に同一であるため、説明を省略する。
【０１１７】
図８Ａは、正ＶＯＬ管理テーブル３４１Ａの構成例を示す。
【０１１８】
正ＶＯＬ管理テーブル３４１Ａは、正ストレージ装置２０ＡのＶＯＬ毎に、ＶＯＬ＃８１Ａと、使用状況８２Ａと、ＪＮＬＧ＃８３Ａと、ＶＯＬ属性８４Ａと、エミュレーションタイプ８５Ａと、容量８６Ａとを関連付けて記憶する。
【０１１９】
ＶＯＬ＃８１Ａは、正ストレージ装置２０Ａが有するＶＯＬを識別するための番号である。
【０１２０】
使用状況８２Ａは、ＶＯＬが使用されているかどうかを示す情報である。図に示す例では、ＶＯＬが使用されている場合は「使用中」と示され、ＶＯＬが使用されていない場合は「未使用」と示されているが、表記の仕方はこれに限定されない。
【０１２１】
ＪＮＬＧ＃８３Ａは、ＶＯＬが属しているＪＮＬＧの識別番号である。
【０１２２】
ＶＯＬ属性８４Ａは、ＶＯＬの用途を示す情報である。例えば、ＶＯＬ属性８４Ａは、ＶＯＬがＤＶＯＬであれば「Ｄａｔａ」であり、ＶＯＬがＪＶＯＬであれば「ＪＮＬ」であり、ＶＯＬがプールＶＯＬ（プールの構成要素となるＶＯＬ）であれば「Ｐｏｏｌ  ＶＯＬ」と示される。なお、ＪＮＬＧには、プールＶＯＬは含まれない。
【０１２３】
エミュレーションタイプ８５Ａは、ＶＯＬのエミュレーションタイプ（ＶＯＬにおけるデータ配置のフォーマットのタイプ）を示す情報である。後に詳しく説明するが、エミュレーションタイプが同じＶＯＬ（ＪＶＯＬ、ＤＶＯＬ）同士でペアが組まれてよい。
【０１２４】
容量８６Ａは、ＶＯＬの容量を示す情報である。図に示す例では、容量の単位は「ＧＢ」（ギガバイト）であるが、単位はこれに限定されない。
【０１２５】
図８Ｂは、副ＶＯＬ管理テーブル３４１Ｂの構成例を示す。
【０１２６】
副ＶＯＬ管理テーブル３４１Ｂは、副ストレージ装置２０ＢのＶＯＬ毎に、ＶＯＬ＃８１Ｂと、使用状況８２Ｂと、ＪＮＬＧ＃８３Ｂと、ＶＯＬ属性８４Ｂと、エミュレーションタイプ８５Ｂと、容量８６Ｂとを関連付けて記憶する。なお、副ＶＯＬ管理テーブル３４１Ｂは、正ＶＯＬ管理テーブル３４１Ａと構成がほぼ同じであるため説明を省略する。
【０１２７】
図９Ａは、正ＪＮＬＧ管理テーブル３４２Ａの構成例を示す。
【０１２８】
正ＪＮＬＧ管理テーブル３４２Ａは、正ＪＮＬＧに属するＶＯＬ毎に、正ＪＮＬＧ＃９１Ａと、ＶＯＬ＃９２Ａと、ＶＯＬ属性９３Ａと、を関連付けて記憶する。
【０１２９】
正ＪＮＬＧ＃９１Ａは、ＶＯＬが属する正ＪＮＬＧの識別番号である。ＶＯＬ＃９２Ａは、ＶＯＬの識別番号である。ＶＯＬ属性９３Ａは、ＶＯＬの属性（ＤＶＯＬであるかＪＶＯＬであるか）を示す情報である。
【０１３０】
正ＪＮＬＧ管理テーブル３４２Ａを参照することにより、ＣＰＵ３３Ａが、どの正ＪＮＬＧに属するどのＶＯＬがどのようなＶＯＬ（ＪＶＯＬ、ＤＶＯＬ）であるかを判断することができる。
【０１３１】
図９Ｂは、副ＪＮＬＧ管理テーブル３４２Ｂの構成例を示す。
【０１３２】
副ＪＮＬＧ管理テーブル３４２Ｂは、副ＪＮＬＧに属するＶＯＬ毎に、副ＪＮＬＧ＃９１Ｂに、ＶＯＬ＃９２Ｂと、ＶＯＬ属性９３Ｂと、を関連付けて記憶する。副ＪＮＬＧ管理テーブル３４２Ｂは、正ＪＮＬＧ管理テーブル３４２Ａと構成が実質的に同じであるため説明を省略する。
【０１３３】
図１０は、ＪＮＬＧペア管理テーブル３４３Ａの構成例を示す。
【０１３４】
ＪＮＬＧペア管理テーブル３４３Ａは、ＪＮＬＧペア毎に、正ＪＮＬＧ＃１０１と、副ＪＮＬＧ＃１０２と、ステータス１０３とを有する。
【０１３５】
正ＪＮＬＧ＃１０１は、ＪＮＧＬペアにおける正ＪＮＬＧの識別番号であり、副ＪＮＬＧ＃１０２は、そのＪＮＬＧペアにおける副ＪＮＬＧの識別番号である。
【０１３６】
ステータス１０３は、ＪＮＬＧペアのステータスを示す情報である。「ＰＡＩＲ」は、正ＪＮＬＧと副ＪＮＬＧとでデータが一致している（正ＤＶＯＬと副ＤＶＯＬとが一致している）ことを示す。「ＳＩＭＰ」は、正ＪＮＬＧと副ＪＮＬＧとでまだペアが組まれていないことを示す。「ＣＯＰＹ」とは、正ＪＮＬＧと副ＪＮＬＧとで、ペアは組まれているものの、データが一致していないことを示す。
【０１３７】
ＪＮＬＧペア管理テーブル３４３Ａを参照することにより、ＣＰＵ３３Ａが、どの正ＪＮＬＧがどの副ＪＮＬＧとペアになっているか、及びそのＪＮＬＧペアの状態を判断することができる。
【０１３８】
図１１は、ＶＯＬペア管理テーブル３４４Ａの構成例を示す
【０１３９】
ＶＯＬペア管理テーブル３４４Ａ、３４４Ｂは、ＶＯＬペア毎に、正ＶＯＬ＃１１１と、副ＶＯＬ＃１１２とを関連付けて記憶する。正ＶＯＬ＃１１１は、ＶＯＬペアにおける正ＶＯＬの識別番号であり、副ＶＯＬ＃１１２は、そのＶＯＬペアにおける副ＶＯＬの識別番号である。
【０１４０】
ＶＶＯＬペア管理テーブル３４４Ａを参照することにより、ＣＰＵ３３Ａが、どの正ＶＯＬが、どの副ＶＯＬとペアになっているのかを判断することができる。
【０１４１】
ＶＶＯＬペア管理テーブル３４４Ｂ（図３Ｂ参照）は、ＶＶＯＬペア管理テーブル３４４Ａと構成が実質的に同じであるため説明を省略する。
【０１４２】
図１２Ａは、正ＶＶＯＬ管理テーブル３４５Ａの構成例を示す。
【０１４３】
正ＶＶＯＬ管理テーブル３４５Ａは、正ＶＶＯＬ毎に、正ＶＶＯＬ＃１２１Ａと、Ｐｏｏｌ＃１２２Ａと、容量１２３Ａとを関連付けて記憶する。
【０１４４】
正ＶＶＯＬ＃１２１Ａは、正ＶＶＯＬ（正ＤＶＯＬ又は正ＪＶＯＬ）の識別番号である。Ｐｏｏｌ＃１２２Ａは、正ＶＶＯＬが関連付けられているプール（その正ＶＶＯＬへの実ページの割当元となるプール）の識別番号である。容量１２３Ａは、正ＶＶＯＬの容量を示す。
【０１４５】
図１２Ｂは、副ＶＶＯＬ管理テーブル３４５Ｂの構成例を示す。
【０１４６】
副ＶＶＯＬ管理テーブル３４５Ｂは、副ＶＶＯＬ毎に、副ＶＶＯＬ＃１２１Ｂと、Ｐｏｏｌ＃１２２Ｂと、容量１２３Ｂとを関連付けて記憶する。副ＶＶＯＬ管理テーブル３４５Ｂは、正ＶＶＯＬ管理テーブル３４５Ａと構成が実質的に同じであるため説明を省略する。
【０１４７】
図１３Ａは、正仮想ページ割り当て管理テーブル３４６Ａの構成例を示す。
【０１４８】
正仮想ページ割り当て管理テーブル３４６Ａは、正ＶＶＯＬごとに存在する。正仮想ページ割り当て管理テーブル３４６Ａは、正仮想ページ毎に、仮想ページ＃１３１Ａと、実ページ＃１３２Ａとを関連付けて記憶する。仮想ページ＃１３１Ａは、仮想ページの識別番号であり、実ページ＃１３２Ａは、仮想ページに割り当てられている実ページの識別番号である。仮想ページに実ページが割り当てられていない場合、その仮想ページに対応する実ページ＃１３２Ａは、実ページが割り当てられていないことを示す値である。
【０１４９】
正仮想ページ割り当て管理テーブル３４６Ａ及び上述の正ＶＶＯＬ管理テーブル３４５Ａを参照することにより、ＣＰＵ３３Ａは、正仮想ページに実ページが割り当てられているか否か、及び、正仮想ページにどのプールからどの実ページが割り当てられているかを判断することができる。
【０１５０】
図１３Ｂは、副仮想ページ割り当て管理テーブル３４６Ｂの一例を示す。
【０１５１】
副仮想ページ割り当て管理テーブル３４７Ｂは、副ＶＶＯＬごとに存在する。副仮想ページ割り当て管理テーブル３４６Ｂは、副仮想ページ毎に、仮想ページ＃１３１Ｂと、実ページ＃１３２とを関連付けて記憶する。副仮想ページ割り当て管理テーブル３４６Ｂは、正ＶＯＬ管理テーブル３４５Ａと構成が実質的に同じであるため説明を省略する。
【０１５２】
図１４は、正ＪＮＬステータス管理テーブル３４７Ａの構成例を示す。
【０１５３】
正ＪＮＬステータス管理テーブル３４７Ａは、正ＪＶＯＬごとに存在する。正ＪＮＬステータス管理テーブル３４７Ａは、正ＪＶＯＬにおけるＪＮＬ毎に、正仮想ページ＃１４１Ａと、ステータス１４２Ａと、ページ開始アドレス１４３Ａと、ページ終了アドレス１４４Ａと、ＪＮＬ開始アドレス１４５Ａと、ＪＮＬ終了アドレス１４６Ａと、ＳＥＱ＃１４７Ａとを関連付けて記憶する。
【０１５４】
正仮想ページ＃１４１Ａは、ＪＮＬを格納している正仮想ページを識別する番号である。
【０１５５】
ステータス１４２Ａは、ＪＮＬのステータスを示す。例えば、ステータス１４２Ａは、下記の通りである。
（＊）「コピー済み」とは、副ＤＶＯＬ２１ＢにＪＮＬに含まれるデータがコピーされていること（つまり副ＤＶＯＬ２１ＢにＪＮＬが反映されたこと）を示す。
（＊）「コピー中」とは、副ストレージ装置２０ＢにＪＮＬが転送されたがそのＪＮＬが副ＤＶＯＬに未反映であることを示す。
（＊）「リード可」とは、正ＪＶＯＬ内のＪＮＬが、副ＪＶＯＬへ転送可能であることを示す。
（＊）「未コピー」とは、正ＪＶＯＬ内のＪＮＬが、副ＪＶＯＬへまだ転送されていないことを示す。
（＊）「未割当」とは、正仮想ページに実ページが割り当てられていないことを示す。
【０１５６】
ページ開始アドレス１４３Ａは、仮想ページの開始のアドレスを示す情報である。ページ終了アドレス１４４Ａは、各仮想ページの終わりのアドレスを示す情報である。
【０１５７】
ＪＮＬ開始アドレス１４５Ａは、ＪＮＬが仮想ページのどの領域から書き込まれているかを示す情報である。ＪＮＬ終了アドレス１４６Ａは、ＪＮＬが仮想ページのどの領域まで書き込まれているかを示す情報である。ＪＮＬ開始アドレス１４５ＡとＪＮＬ終了アドレス１４６Ａとを参照することにより、仮想ページにおけるＪＮＬの位置が分かる。
【０１５８】
ＳＥＱ＃１４７Ａは、ＪＮＬに含まれるＳＥＱ＃を表す。
【０１５９】
正ＪＮＬステータス管理テーブル３４７Ａを参照することにより、ＣＰＵ３３Ａが、各ＪＮＬのステータスを判断することができる。
【０１６０】
図１５は、副ＪＮＬステータス管理テーブル３４７Ｂの構成例を示す。
【０１６１】
副ＪＮＬステータス管理テーブル３４７Ｂは、副ＪＶＯＬごとに存在する。副ＪＮＬステータス管理テーブル３４７Ｂは、副ＪＶＯＬにおけるＪＮＬ毎に、副仮想ページ＃１４１Ｂと、ステータス１４２Ｂと、ページ開始アドレス１４３Ｂと、ページ終了アドレス１４４Ｂと、ＪＮＬ開始アドレス１４５Ｂと、ＪＮＬ終了アドレス１４６Ｂと、ＳＥＱ＃１４７Ｂと、を関連付けて記憶する。
【０１６２】
副ＪＮＬステータス管理テーブル３４７Ｂは、正ＪＮＬステータス管理テーブル３４７Ａと構成が実質的に同じであるため詳しい説明は省略する。
【０１６３】
図１６Ａは、正仮想ページステータス管理テーブル３４８Ａの構成例を示す。
【０１６４】
正仮想ページステータス管理テーブル３４８Ａは、正ＪＶＯＬ２２Ａごとに存在する。正仮想ページステータス管理テーブル３４８Ａは、正仮想ページ毎に、正仮想ページ＃１６１Ａと、ステータス１６２Ａとを関連付けて記憶する。
【０１６５】
正仮想ページ＃１６１Ａは、仮想ページを識別する番号である。ステータス１６２Ａは、仮想ページのステータスを示す情報である。ステータス１６２Ａは、例えば下記の通りである。
（＊）「コピー済み」とは、仮想ページ２２１Ａ内の全てのＪＮＬが副ＤＶＯＬ２１Ｂに反映されたことを示す。
（＊）「コピー中」とは、仮想ページ２２１Ａ内の少なくとも１つのＪＮＬが副ストレージ装置２０Ｂに転送され、且つ、仮想ページ２２１Ａ内の少なくとも１つのＪＮＬが副ＤＶＯＬ２１Ｂに未反映であることを示す。
（＊）「リード可」とは、仮想ページ２２１Ａ内の全てのＪＮＬを副ＪＶＯＬ２２Ｂへ転送可能であることを示す。
【０１６６】
正仮想ページステータス管理テーブル３４８Ａを参照することにより、ＣＰＵ３３Ａが、各正仮想ページ２２１Ａのステータスを判断することができる。
【０１６７】
なお、仮想ページのステータスは、その仮想ページ内のＪＮＬのステータスに依存して良い。例えば、１つの仮想ページにおける全てのＪＮＬのステータスが「コピー済み」であれば、その仮想ページのステータスも「コピー済み」で良い。また、例えば、１つの仮想ページにおける少なくとも１つのＪＮＬのステータスが「コピー中」であれば、その仮想ページのステータスも「コピー中」で良い。
【０１６８】
図１６Ｂは、副仮想ページステータス管理テーブル３４８Ｂの構成例を示す。
【０１６９】
副仮想ページステータス管理テーブル３４８Ｂは、副ＪＶＯＬ２２Ｂごとに存在する。副仮想ページステータス管理テーブル３４８Ｂは、副仮想ページ毎に、副仮想ページ＃１６１Ｂと、ステータス１６２Ｂとを関連付けて記憶する。副仮想ページステータス管理テーブル３４８Ｂは、正仮想ページステータス管理テーブル３４８Ａと構成が実質的に同じであるため説明を省略する。
【０１７０】
図１７Ａは、正プール管理テーブル３４９Ａの構成例を示す。
【０１７１】
正プール管理テーブル３４９Ａは、正プールごとに存在する。正プール管理テーブル３４９Ａは、正実ページ毎に、Ｐｏｏｌ＃１７１Ａと、実ページ＃１７２Ａと、仮想ページ＃１７３Ａと、正ＶＶＯＬ＃１７４Ａとを関連付けて記憶する。
【０１７２】
Ｐｏｏｌ＃１７１Ａは、実ページを有する正プールを識別する番号である。実ページ＃１７２Ａは、実ページを識別する番号である。仮想ページ＃１７３Ａは、実ページが割り当てられている仮想ページを識別する番号である。正ＶＶＯＬ＃１７４Ａは、実ページが割り当てられている仮想ページを含んだ正ＶＶＯＬを識別する番号である。なお、空きの実ページに対応する仮想ページ＃１７３Ａ及び正ＶＶＯＬ＃１７４Ａは、その実ページが空きの実ページ（割り当て可能な実ページ）であることを意味する値で良い。
【０１７３】
正プール管理テーブル３４９Ａを参照することにより、ＣＰＵ３３Ａは、どの実ページが空きの実ページ（割り当て可能な実ページ）であるか、及び、どの実ページがどのＶＶＯＬのどの仮想ページに割り当てられているかを判断することができる。
【０１７４】
図１７Ｂは、副プール管理テーブル３４９Ｂを示す。
【０１７５】
副プール管理テーブル３４９Ｂは、副プールごとに存在する。副プール管理テーブル３４９Ｂは、副実ページ毎に、副Ｐｏｏｌ＃１７１Ｂと、実ページ＃１７２Ｂと、副仮想ページ＃１７３Ｂと、副ＶＶＯＬ＃１７４Ｂと、を関連付けて記憶する。副プール管理テーブル３４９Ｂは、正プール管理テーブル３４９Ａと構成が実質的に同じであるため説明を省略する。
【０１７６】
以下、本実施例で行われる処理を説明する。
【０１７７】
図１８は、ＪＮＬＧ同士でペアを形成する処理の流れの一例を示す。
【０１７８】
正ストレージ装置２０Ａのコントローラ３０Ａは、図８Ａの正ＶＯＬ管理テーブル３４１Ａを参照し「未使用」のステータスである空きＶＯＬを、正プール２３Ａに割り当てる（Ｓ１８１）。コントローラ３０Ａは、空きプールに割り当てられたＶＯＬのステータスを「使用中」とする。
【０１７９】
コントローラ３０Ａは、正ＶＶＯＬを作成する（Ｓ１８２）。正ＶＶＯＬは、正ＤＶＯＬ２１Ａ又は正ＪＶＯＬ２２Ａである。
【０１８０】
コントローラ３０Ａは、正プール２３Ａと正ＶＶＯＬとを関連付ける（Ｓ１８３）。この処理は、コントローラ３０Ａが、図８Ａの正ＶＯＬ管理テーブル３４１Ａの各ＶＯＬ属性８４Ａを「Ｄａｔａ」或いは「ＪＮＬ」とすることにより行われる。
【０１８１】
コントローラ３０Ａは、正ＶＶＯＬを正ＪＮＬＧとして登録する（Ｓ１８４）。この処理は、コントローラ３０Ａが、正ＪＮＬＧ管理テーブル３４２ＡのＶＯＬ＃９２Ａのより特定されるＶＯＬを、正ＪＮＬＧ９１Ａにより特定されるいずれかのＪＮＬＧに関連付けることにより行われる。この処理により、図８Ａの管理テーブル３１１Ａにて、ＶＶＯＬとして登録された各ＶＯＬが、いずれかのＪＮＬＧに属することになる。
【０１８２】
コントローラ３０Ａは、ＪＮＬＧ同士でペアを形成する（Ｓ１８５）。この処理は、コントローラ３０Ａにより、ＪＮＬＧペア管理テーブル３４３Ａにおける正ＪＮＬＧ＃１０１により特定されるＪＮＬＧを、副ＪＮＬＧ＃１０２により特定されるいずれかのＪＮＬＧに関連付けることにより行われる。この処理により、正ＤＶＯＬ２１Ａと副ＤＶＯＬ２１Ｂとのペア、及び正ＪＶＯＬ２２Ａと副ＪＶＯＬ２２Ｂとのペアが形成される（図１１参照）。
【０１８３】
その後、コントローラ３０Ａは、ホスト１０からのＩ／Ｏコマンドを受け付け、そのＩ／Ｏコマンドに従い、正ＤＶＯＬに対するリード又はライトの処理を行う（Ｓ１８６）。ここでは、正ＤＶＯＬ２１Ａと正ＪＶＯＬ２２Ａに同じプールが割り当てられたが、両ＶＯＬに異なるプールが割り当てられても良い。
【０１８４】
なお、副ストレージ装置２０Ｂにおけるコントローラ３０Ｂも、コントローラ３０Ａと実質的に同じ処理（図１８に示した処理）を行うことができる。
【０１８５】
図１９は、正ＪＶＯＬ２２Ａから副ＪＶＯＬ２２ＢにＪＮＬをコピーする処理の流れの一例を示す。この処理では、ＪＮＬ単位でＪＮＬが転送される。
【０１８６】
コントローラ３０Ｂは、正ＪＮＬステータス管理テーブル３４７Ａが表す情報を参照して「リード可」となっている正仮想ページ２２１Ａがあるかどうかを、先頭のページから（正仮想ページ＃１４１Ａが小さい方から）チェックする（Ｓ２１１）。
【０１８７】
「リード可」となっている正仮想ページがない場合（Ｓ２１１：Ｎｏ）、コントローラ３０Ｂは、次の正仮想ページ２２１Ａをチェックする（Ｓ２１９）。
【０１８８】
「リード可」となっている正仮想ページ２２１Ａがある場合（Ｓ２１１：Ｙｅｓ）、コントローラ３０Ｂは、コピー先となる副仮想ページ２２１Ｂのステータスを「コピー中」とする（Ｓ２１２）。この処理により「コピー中」のステータスとなった副仮想ページ２２１Ｂに、正仮想ページ２２１ＡからのＪＮＬをコピーすることができるようになる。
【０１８９】
コントローラ３０Ｂは、正ストレージ装置２０Ａから、コピー対象の正仮想ページの、正仮想ページビットマップ（図７Ａ参照）を表す情報を取得する（Ｓ２１３）。
【０１９０】
次に、コントローラ３０Ｂは、コントローラ３０Ａに、Ｓ２１１にてチェックした「リード可」のステータスである正仮想ページ２２１Ａ内のＪＮＬであって、ビットが「１」（オン）のＪＮＬをリードするためのリードコマンドを送信する（Ｓ２１４）。
【０１９１】
コントローラ３０Ｂは、副仮想ページステータス管理テーブル３４７Ｂの、ＪＮＬ開始アドレス１４５Ｂ、ＪＮＬ終了アドレス１４６Ｂ、及びＳＥＱ＃１４７Ｂを、ＪＮＬごとに更新する（Ｓ２１５）。
【０１９２】
コントローラ３０Ｂは、更新したＪＮＬに対応する、正仮想ページビットマップ７０Ａ（図７Ａ参照）におけるビットを、「０」（オフ）に更新する（Ｓ２１６）。「０」となったＪＮＬは、副ＪＶＯＬ２２Ｂにコピーされたことを示す。コントローラ３０Ｂは、この処理を、コピー対象の正仮想ページ２２１Ａ内の全てのＪＮＬに対して行う。
【０１９３】
コントローラ３０Ｂは、正仮想ページビットマップ７０Ａを表す情報を参照して、コピー対象の正仮想ページ内の全てのＪＮＬに関して、全て「０」になっているかどうかをチェックする（Ｓ２１７）。この処理により、コントローラ３０Ｂが、副ＪＶＯＬに、正仮想ページが完全にコピーされたかどうかを判断することができる。
【０１９４】
正仮想ページビットマップ７０Ａが全て「０」となっている場合（Ｓ２１７：Ｙｅｓ）、コントローラ３０Ｂは、コピー先の副仮想ページ２２１Ｂに関するステータスを「リストア可」とする（Ｓ２１８）。この処理は、コントローラ３０Ｂが、副仮想ページステータス管理テーブル３４７Ｂのステータス１４２Ｂを「コピー中」から「リストア可」に更新することにより行われる。
【０１９５】
コントローラ３０Ｂは、次の正仮想ページ２２１Ａを参照する（Ｓ２１９）。そして、Ｓ２１１で、コントローラ３０Ａにより、その次の正仮想ページ２２１Ａのステータスが「リード可」であるかがチェックされる。
【０１９６】
一方、正仮想ページビットマップ７０Ａが全て「０」となっていない場合（Ｓ２１７：Ｎｏ）、コントローラ３０Ｂは、正仮想ページビットマップが全て「０」となるまで（全てのＪＮＬがコピーされるまで）Ｓ２１４以降の処理を行う。
【０１９７】
以上の処理により、正ＪＶＯＬ２２ＡからＪＮＬが副ＪＶＯＬ２２Ｂにコピーされる。
【０１９８】
図２０は、副ＤＶＯＬ２１Ｂにデータをリストアする処理の流れの一例を示す。
【０１９９】
コントローラ３０Ｂは、副仮想ページステータス管理テーブル３４７Ｂを参照して、参照したページが「リストア可」のステータスである副仮想ページ２２１Ｂであるかどうかをチェックする（Ｓ２３１）。
【０２００】
そのページが「リストア可」の副仮想ページでない場合（Ｓ２３１：Ｎｏ）、コントローラ３０Ｂは、次の副仮想ページ２２１Ｂが「リストア可」のページであるかをチェックする（Ｓ２３１）。
【０２０１】
「リストア可」の副仮想ページ２２１Ｂである場合（Ｓ２３１：Ｙｅｓ）、コントローラ３０Ｂは、この副仮想ページ２２１Ｂ内のＪＮＬ内のデータを、副ＤＶＯＬ２１Ｂに書き込む処理を行う（Ｓ２３２）。この処理は、仮想ページ単位で行われても良いし、ＪＮＬ単位で行われても良い。
【０２０２】
コントローラ３０Ｂは、この副仮想ページ内の全てのＪＮＬがリストア済みとなったら、この副仮想ページ内のステータスを「コピー済み」とする（Ｓ２３３）。この処理は、コントローラ３０Ｂにより、副仮想ページ管理テーブル３４７Ｂのステータス１４２Ｂを「コピー済み」とすることにより行われる。
【０２０３】
コントローラ３０Ｂは、正ストレージ装置のコントローラ３０Ａに対して、この副仮想ページ２２１Ｂのステータス１４２Ｂが「コピー済み」となったことを送信する（Ｓ２３４）。
【０２０４】
図２１は、ＪＮＬＧの自動定義をする処理の流れを示す。
【０２０５】
ＳＶＰ５０は、ＳＶＰ５０が表示したメンテナンス画面（例えばＧＵＩ（Graphical  User  Interface）画面）において、ＪＮＬＧを定義するモードがユーザにより「ＯＮ」にされたかどうかをチェックする（Ｓ２４１）。
【０２０６】
モードが「ＯＮ」にされていない場合（Ｓ２４１：Ｎｏ）、ＳＶＰ５０により、通常の処理に従って正ＪＮＬＧと副ＪＮＬＧとのペアの作成が行われる（Ｓ２４７）。
【０２０７】
モードが「ＯＮ」にされている場合（Ｓ２４１：Ｙｅｓ）、ＳＶＰ５０は、ＧＵＩ画面を介して、例えばＵＲＬ（Uniform  Resource  Locator）の入力をユーザから受けて、正ＪＮＬＧと副ＪＮＬＧとのペアを作成する（Ｓ２４２）。
【０２０８】
コントローラ３０Ａは、ＳＶＰ５０からの指示により、正ＶＯＬ管理テーブル３４１Ａを参照して「未使用」のステータスであるＶＯＬを正プールに含める（Ｓ２４３）。
【０２０９】
コントローラ３０Ａは、ＳＶＰ５０からの指示により、正ＶＶＯＬを作成する（Ｓ２４４）。
【０２１０】
コントローラ３０Ａは、正プールと、作成した正ＶＶＯＬとを関連付ける（Ｓ２４５）。これは、正ＶＶＯＬ管理テーブル３４５Ａ（正ＶＶＯＬ＃１２１Ａ、Ｐｏｏｌ＃１２２Ａ、容量１２３Ａ）を更新することにより行われる。
【０２１１】
コントローラ３０Ａは、正ＶＶＯＬを正ＪＮＬＧに含める（Ｓ２４６）。この処理は、コントローラ３０Ａにより、正ＪＮＬＧ管理テーブル３４２Ａ（正ＪＮＬＧ＃９１Ａ、ＶＯＬ＃９２Ａ、ＶＯＬ属性９３Ａ）を更新することにより行われる。
【０２１２】
以上の処理により、正ＪＮＬＧと副ＪＮＬＧとのペアが作成され、それにより、正ＪＮＬＧ内のＶＶＯＬと副ＪＮＬＧ内のＶＶＯＬにプールが割り当てられ、ＪＮＬＧが定義される。
【０２１３】
なお、コントローラ３０Ｂも、コントローラ３０Ａと実質的に同じ処理（図２１に示した処理）を行うことができる。
【０２１４】
図２２は、図２１のＳ２４３の詳細の一例を示す。
【０２１５】
コントローラ３０Ａ（３０Ｂ）は、ＶＯＬ管理テーブル３４１Ａ（３４１Ｂ）を参照して、そのＶＯＬが「未使用」のステータスかどうかをチェックする（Ｓ２５１）。
【０２１６】
そのＶＯＬが「未使用」のステータスでない場合（Ｓ２５１：Ｎｏ）、コントローラ３０Ａ（３０Ｂ）は、次のＶＯＬをチェックする（Ｓ２５４）。
【０２１７】
ＶＯＬが「未使用」のステータスである場合（Ｓ２５１：Ｙｅｓ）、コントローラ３０Ａ（３０Ｂ）は、そのＶＯＬのエミュレーションタイプをチェックする（Ｓ２５２）。
【０２１８】
このＶＯＬが、プールを構成している何れのＶＯＬともエミュレーションタイプが同じでない場合（Ｓ２５２：Ｎｏ）、コントローラ３０Ａ（３０Ｂ）は、次のＶＯＬをチェックする（Ｓ２５４）。
【０２１９】
このＶＯＬが、プールを構成しているＶＯＬとエミュレーションタイプが同じである場合（Ｓ２５２：Ｙｅｓ）、コントローラ３０Ａ（３０Ｂ）は、そのＶＯＬを、そのプールに追加する（Ｓ２５３）。
【０２２０】
図２３は、図２１のＳ２４６の処理の詳細の一例を示す。
【０２２１】
コントローラ３０Ａは、ＪＮＬＧ＃０から、この正ＪＮＬＧが、未割り当てであるかどうかをチェックする（Ｓ２６１）。この処理は、コントローラ３０Ａが、正ＪＮＬＧ管理テーブル３４２Ａの正ＪＮＬＧ＃９１Ａに、ＶＯＬ＃９２Ａが関連付けられているかをチェックすることにより行われる。
【０２２２】
正ＪＮＬＧが、未割り当てでない場合（Ｓ２６１：Ｎｏ）、コントローラ３０Ａは、次の正ＪＮＬＧ（現在のＪＮＬＧ＃に１を加算することにより得られるＪＮＧＬ＃）が、未割り当てであるかどうかをチェックする（Ｓ２６３）。
【０２２３】
この正ＪＮＬＧが、未割り当てである場合（Ｓ２６１：Ｙｅｓ）、コントローラ３０Ａは、この正ＪＮＬＧに正ＶＶＯＬを登録する（Ｓ２６２）。この処理は、コントローラ３０Ａにより、正ＪＮＬＧ管理テーブル３４２Ａを更新することにより行われる。
【０２２４】
次に、コントローラ３０Ｂは、ＪＮＬＧ＃０から、この副ＪＮＬＧが、未割り当てであるかどうかをチェックする（Ｓ２６４）。この副ＪＮＬＧが、未割り当てでない場合（Ｓ２６４：Ｎｏ）、コントローラ３０Ｂは、次の副ＪＮＬＧが、未割り当てであるかどうかをチェックする（Ｓ２６６）。この処理は、コントローラ３０Ｂが、正ＪＮＬＧ管理テーブル３４２Ｂ正ＪＮＬＧ＃９１Ｂに、ＶＯＬ＃９２ＡＢが関連付けられているかをチェックすることにより行われる。
【０２２５】
副ＪＮＬＧが、未割り当ててある場合（Ｓ２６４：Ｙｅｓ）、コントローラ３０Ｂは、この副ＪＮＬＧに副ＶＶＯＬを登録する（Ｓ２６５）。この処理は、コントローラ３０Ｂにより、副ＪＮＬＧ管理テーブル３２４Ｂを更新することにより行われる。
【０２２６】
以上の処理により、プールから実ページが割り当てられたＶＶＯＬ（ＤＶＯＬ、ＪＶＯＬ）が、いずれかのＪＮＬＧに属することになる。
【０２２７】
図２４は、ＪＶＯＬの使用率が閾値を超えた場合の処理の流れを示す。
【０２２８】
この処理は、正ストレージ装置２０Ａと副ストレージ装置２０Ｂとで実質的に同じであるため、正ストレージ装置２０Ａの処理のみを説明する。また、以下の説明では、ＪＮＧＬの使用率の閾値として、第１の閾値と、第１の閾値より大きい第２の閾値とがあり、第１の閾値は、９０％であり、第２の閾値は、８０％とするが、これらはこの例に限定されない。また、第１の閾値と第２の閾値のように別れておらず閾値は１つでも良い。
【０２２９】
コントローラ３０Ａは、ＪＮＬＧの使用率が８０パーセント以上であるかをチェックする（Ｓ２７１）。
【０２３０】
ＪＮＬＧの使用率が８０パーセント以上でない場合（Ｓ２７１：Ｎｏ）、コントローラ３０Ａは処理を終了する。
【０２３１】
一方、ＪＮＬＧの使用率が８０パーセント以上である場合（Ｓ２７１：Ｙｅｓ）、コントローラ３０Ａは、そのＪＮＬＧ内のＶＶＯＬに新たに割り当てられる実ページ（追加できる実ページ）があるかどうかをチェックする（Ｓ２７２）。この処理は、コントローラ３０Ａが、正ＪＮＬステータス管理テーブル３４７Ａを参照し、ステータス１４２Ａが「未割当」の実ページがあるかどうかをチェックすることにより行われる。
【０２３２】
追加できる実ページがある場合（Ｓ２７２：Ｙｅｓ）、コントローラ３０Ａは、その実ページをＪＮＬＧに割り当て、その実ページの割当先の仮想ページのステータス１４２Ａを「未コピー」に更新する（Ｓ２７２）。
【０２３３】
追加できる実ページがない場合（Ｓ２７２：Ｎｏ）、コントローラ３０Ａは、追加できるＶＯＬがあるかどうかをチェックする（Ｓ２７４）。追加できるＶＯＬがある場合（Ｓ２７４：Ｙｅｓ）、コントローラ３０Ａは、図２２の処理により、ＪＮＬＧにＶＯＬを追加する（Ｓ２７５）。
【０２３４】
追加できるＶＯＬがない場合（Ｓ２７４：Ｎｏ）、コントローラ３０Ａは、ＪＮＬＧの使用率が９０パーセント以上であるかをチェックする（Ｓ２７６）。
【０２３５】
ＪＮＬＧの使用率が９０パーセント以上でない場合（Ｓ２７６：Ｎｏ）、コントローラ３０Ａは、処理を終了する。
【０２３６】
ＪＮＬＧの使用率が９０パーセント以上である場合（Ｓ２７６：Ｙｅｓ）、コントローラ３０Ａは、Ｓ２７２を再度実行する。なお、コントローラ３０Ａは、Ｓ２７２を再度行うことに代えて、エラー処理（例えばエラーをＳＶＰ５０に通知する処理）を行って、終了しても良い。
【０２３７】
図２５は、正ＪＶＯＬ２２ＡにＪＮＬを書き込む処理の流れの一例を示す。
【０２３８】
副ＪＶＯＬ２２ＢにＪＮＬを書き込む処理の流れは、正ＪＶＯＬ２２ＡにＪＮＬを書き込む処理の流れと実質的に同じであるため、説明を省略する。
【０２３９】
コントローラ３０Ａは、ＪＮＬのライト先の仮想ページに実ページが割当て済みか否かをチェックする（Ｓ２８１）。
【０２４０】
コントローラ３０Ａは、実ページが既に割当て済みであれば（Ｓ２８１：Ｙｅｓ）、その実ページに、ＪＮＬのサイズ以上の空き領域があるか否かをチェックする（Ｓ２８２）。
【０２４１】
ＪＮＬのサイズ以上の空き領域が実ページにあれば（Ｓ２８２：Ｙｅｓ）、コントローラ３０Ａは、その実ページにＪＮＬを追記する（Ｓ２９１）。
【０２４２】
ＪＮＬのサイズ以上の空き領域が実ページになければ（Ｓ２８２：Ｎｏ）、コントローラ３０Ａは、ＪＶＯＬに新たに実ページを割り当てるか否かをチェックする（Ｓ２８３）。このチェックの結果は、例えば、次のいずれかとなる。
（Ａ）ＪＶＯＬに割り当てられる実ページの最大数が固定値の場合。
（ａ１）既に所定数の実ページがＪＶＯＬに割当て済みであれば、Ｓ２８３：Ｎｏが得られる。
（ａ２）未だ所定数の実ページがＪＶＯＬに割当てられていなければ、Ｓ２８３：Ｙｅｓが得られる。
（Ｂ）ＪＶＯＬに割り当てられる実ページの最大数が可変値の場合（但し、その最大数は、ＪＶＯＬを構成する仮想ページの数より小さい）。
（ｂ１）ステータスが「コピー済み」となった仮想ページ（又はＪＮＬ）の数が所定数（例えば１）に達していれば、Ｓ２８３：Ｎｏが得られる。
（ｂ２）ステータスが「コピー済み」となった仮想ページ（又はＪＮＬ）の数が所定数（例えば１）に達していなければ、Ｓ２８３：Ｙｅｓが得られる。
【０２４３】
上記（Ｂ）のケースでは、どの時点で、ステータスが「コピー済み」となった仮想ページ（又はＪＮＬ）の数が所定数（例えば１）に達したかによって、ＪＶＯＬに割当て済みの実ページの総数（最大数）は異なる。
【０２４４】
Ｓ２８３：Ｙｅｓの場合、コントローラ３０Ａは、ライト先の仮想ページに実ページを割当て、割り当てた実ページにＪＮＬを書き込む（Ｓ２９３）。
【０２４５】
Ｓ２８３：Ｎｏの場合、コントローラ３０Ａは、ラップアラウンド、すなわち、ＪＶＯＬに割当て済みの１以上の実ページのうちの最古のコピー済みのＪＮＬの領域に、新たなＪＮＬを上書きする（Ｓ２９２）。
【０２４６】
さて、実ページが割当て済みでなければ（Ｓ２８１：Ｎｏ）、コントローラ３０Ａは、Ｓ２８３と同様のチェックを行う（Ｓ２８７）。
【０２４７】
Ｓ２８７：Ｙｅｓの場合、コントローラ３０Ａは、Ｓ２９３を行う。
【０２４８】
Ｓ２８３：Ｎｏの場合、コントローラ３０Ａは、Ｓ２９２を行う。
【０２４９】
図２６は、ＪＮＬの転送単位の切り替えに関する処理の流れを示す。
【０２５０】
コントローラ３０Ｂ（３０Ａ）は、原則、仮想ページ単位でＪＮＬを転送する（Ｓ３０１）。コントローラ３０Ａ（３０Ｂ）は、正仮想ページ２２１Ａ内の全てのＪＮＬが副ＤＶＯＬ２１Ｂにコピーされた場合、その仮想ページのステータスを「コピー済み」に更新する。また、コントローラ３０Ａ（３０Ｂ）は、正仮想ページ２２１Ａ内のＪＮＬが副ＤＶＯＬ２１Ｂにコピーされる都度に、そのＪＮＬのステータスを「コピー済み」に更新して良い。また、コントローラ３０Ａ（３０Ｂ）は、仮想ページ単位でＪＮＬが転送されるモード（期間）では、ＪＮＬ毎のステータスを更新しないでも良い。
【０２５１】
コントローラ３０Ｂ（３０Ａ）は、定期的に或いは不定期的に、通信負荷が所定値以上になったか否か、例えば、仮想ページ２２１Ａ単位のＪＮＬの転送に遅延が発生しているかをチェックする（Ｓ３０２）。ここで、「転送に遅延が発生している」とは、例えば、ステータスが「コピー中」の仮想ページ（或いＪＮＬ）が、ストレージ装置２０Ａ（２０Ｂ）に、一定数以上、存在している状態である。
【０２５２】
通信負荷が所定値未満の場合（Ｓ３０２：Ｎｏ）、コントローラ３０Ｂ（３０Ａ）は、仮想ページ単位でＪＮＬを転送するモードを継続する（Ｓ３０１）。
【０２５３】
一方、通信負荷が所定値以上の場合（Ｓ３０２：Ｙｅｓ）、コントローラ３０Ｂ（３０Ａ）は、転送モードを、仮想ページ単位でＪＮＬを転送するモードから、ＪＮＬ単位でＪＮＬを転送するモードに切替える（Ｓ３０３）。例えば、コントローラ３０Ｂは、コントローラ３０Ｂでは、仮想ページ単位でＪＮＬをリードするリードコマンドを正ストレージ装置２０Ａに送信し、ＪＮＬ単位でＪＮＬを転送するモードでは、ＪＮＬ単位でＪＮＬをリードするリードコマンドを正ストレージ装置２０Ａに送信して良い。コントローラ３０Ａは、仮想ページ単位でＪＮＬを副ストレージ装置２０Ｂに送信し、ＪＮＬ単位でＪＮＬを転送するモードでは、ＪＮＬ単位でＪＮＬを副ストレージ装置２０Ａに送信して良い。
【０２５４】
なお、このような切り替えが行われた時点から、コントローラ３０Ｂ（３０Ａ）は、ＪＮＬ毎のステータスを更新するようにしても良い。また、転送モードが、ＪＮＬ単位でＪＮＬを転送するモードに切り替わった場合、コントローラ３０Ｂ（３０Ａ）は、仮想ページ毎のステータスを更新することを止めても良い。
【０２５５】
コントローラ３０Ｂ（３０Ａ）は、定期的に或いは不定期的に、通信負荷が所定値以上であることが解消されたか否か、例えば、転送の遅延が解消されているかをチェックする（Ｓ３０４）。具体的には、例えば、コントローラ３０Ｂ（３０Ａ）は、ステータスが「コピー中」の仮想ページ（又はＪＮＬ）がある一定数未満になったかどうかをチェックする。
【０２５６】
通信負荷が所定値以上であることが解消されていない場合（Ｓ３０４：Ｎｏ）、コントローラ３０Ｂ（３０Ａ）間では、ＪＮＬ単位でＪＮＬを転送することが継続される（Ｓ３０３）。
【０２５７】
通信負荷が所定値以上であることが解消されている場合（Ｓ３０４：Ｙｅｓ）、コントローラ３０Ｂ（３０Ａ）は、転送モードを、ＪＮＬ単位でＪＮＬを転送するモードから、仮想ページ単位でＪＮＬを転送するモードに切替える（Ｓ３０１）。
【０２５８】
通信負荷が所定値以上である場合に、転送モードを上記のように切替えれば、仮想ページ或いはＪＮＬについて、より早く「コピー済み」のステータスを得ることが期待できる。故に、より早く、ＪＶＯＬに新たに実ページを割り当てることを中止することが期待でき、以って、実ページの消費を抑えることが期待できる。
【０２５９】
以上、本発明の一実施例を説明したが、本発明はこれに限定されない。
【０２６０】
例えば、ＤＶＯＬ２１は、ＶＶＯＬではなく、ＲＡＩＤグループに基づくＶＯＬである実ＶＯＬでも良いし、外部のストレージ装置に基づく仮想的なＶＯＬ（ストレージ仮想化技術に従う仮想的なＶＯＬ）でも良い。
【０２６１】
例えば、仮想ページ及びＪＮＬのうちの少なくとも一方について、ステータス「コピー済み」として、第１のコピー済みと、第２のコピー済み、があっても良い。第１のコピー済みは、副ＪＶＯＬにＪＮＬが格納された場合のステータスであり、第２のコピー済みは、副ＤＶＯＬにＪＮＬが反映された場合のステータスで良い。「第１のコピー済み」の仮想ページ又はＪＮＬが所定数得られた時点で、ＪＶＯＬに実ページを新規に割り当てる事が中止されれば、実ページの消費をより抑えることが期待できる。一方、「第２のコピー済み」の仮想ページ又はＪＮＬが所定数得られた時点で、ＪＶＯＬに実ページを新規に割り当てる事が中止されれば、ＪＮＬを保険としてより長い期間保持しつつ、実ページの消費を抑えることが期待できる。
【符号の説明】
【０２６２】
１０…ホストコンピュータ、２０Ａ…正ストレージ装置、２０Ｂ…副ストレージ装置
【図１】
0005649733.tif 000002
【図２】
0005649733.tif 000003
【図３】
0005649733.tif 000004
【図４】
0005649733.tif 000005
【図５】
0005649733.tif 000006
【図６】
0005649733.tif 000007
【図７】
0005649733.tif 000008
【図８】
0005649733.tif 000009
【図９】
0005649733.tif 000010
【図１０】
0005649733.tif 000011
【図１１】
0005649733.tif 000012
【図１２】
0005649733.tif 000013
【図１３】
0005649733.tif 000014
【図１４】
0005649733.tif 000015
【図１５】
0005649733.tif 000016
【図１６】
0005649733.tif 000017
【図１７】
0005649733.tif 000018
【図１８】
0005649733.tif 000019
【図１９】
0005649733.tif 000020
【図２０】
0005649733.tif 000021
【図２１】
0005649733.tif 000022
【図２２】
0005649733.tif 000023
【図２３】
0005649733.tif 000024
【図２４】
0005649733.tif 000025
【図２５】
0005649733.tif 000026
【図２６】
0005649733.tif 000027