図2は、本実施例による記憶制御装置10を含む情報処理システムのハードウェア構成を模式的に示す説明図である。説明の前に、図1に示す実施形態と以下に述べる実施例との対応関係を明らかにする。
「記憶制御装置」としての記憶制御装置10は図1中の記憶制御装置1に、「上位装置」としてのホスト20は図1中のホスト2に、それぞれ対応する。「管理装置」と表現可能な管理サーバ30は、図1では省略されている。
「第1ボリューム」としての正ボリューム230P(図4参照)は、図1中の正ボリューム3に対応する。「第2ボリューム」としての基底ボリューム230B(図4参照)は、図1中の基底ボリューム4に対応する。「第3ボリューム」としてのジャーナルボリューム230J(図4参照)は、図1中のジャーナルボリューム5に対応する。
「ジャーナルデータ」としてのジャーナルデータJD(図4参照)は、図1中のジャーナルデータ5Aに対応する。「第1差分ビットマップ」としての区間差分ビットマップBM20(図4参照)は、図1中の区間差分ビットマップ6Aに対応する。「制御部」としてのコントローラ100は、図1中では図示を省略されている。
図4に示される「第2差分ビットマップ」としての差分コピー用差分ビットマップ(あるいは形成コピー用差分ビットマップ)BM10は、図1中の差分ビットマップ6Bに対応する。
図4に示される「第3差分ビットマップ」としてのリカバリ中の差分ビットマップBM30は、図1では省略されている。同様に、図4に示す「第4差分ビットマップ」としてのCDP停止中の差分ビットマップBM40も、図1では省略されている。
なお、後述のテンポラリリストアは「第1リストア」に、後述の「コンプリートリストア」は「第2リストア」に、それぞれ対応する。
図1に戻る。ホスト20と記憶制御装置10とは、例えば、SAN(Storage Area Network)のような通信経路CN1を介して、双方向通信可能に接続されている。ホスト20は、例えば、サーバコンピュータ、メインフレームコンピュータ、ワークステーション等のようなコンピュータ装置として構成される。
ホスト20がメインフレームコンピュータである場合、例えば、FICON(Fibre Connection:登録商標)、ESCON(Enterprise System Connection:登録商標)、ACONARC(Advanced Connection Architecture:登録商標)、FIBARC(Fibre Connection Architecture:登録商標)等の通信プロトコルに従って、データ転送が行われる。
上述の専用プロトコル以外に、ホスト20と記憶制御装置10とは、例えば、iSCSI(internet Small Computer System Interface)、TCP/IP(Transmission Control Protocol/Internet Protocol)、FCP(Fibre Channel Protocol)のような各種通信プロトコルを用いてデータ転送を行うこともできる。
記憶制御装置10は、システム内の記憶資源を一元的に管理する役割を果たすこともできる。例えば、記憶制御装置10は、システム内に散在する物理的な記憶資源を仮想化して、ホスト20に提供する機能を備えることができる。即ち、記憶制御装置10は、外部記憶制御装置40内の記憶資源を、それがあたかも記憶制御装置10内の記憶資源であるかのように、ホスト20に見せかけることができる。このように、記憶制御装置10は、システム内に散在する記憶資源を仮想化するための仮想化装置としての側面を備えることができる。この側面に注目するならば、記憶制御装置10は、必ずしもディスクアレイ装置等のように構成される必要はなく、例えば、ファイバチャネルスイッチ等のような別の装置として構成することもできる。
記憶制御装置10の構成を説明する。記憶制御装置10は、コントローラ100と記憶装置ユニット(以下、HDU)とに大別することができる。コントローラ100は、記憶制御装置10の動作を制御するものである。コントローラ100は、例えば、チャネルアダプタ(以下、CHA)110,ディスクアダプタ(以下、DKA)120,キャッシュメモリ(図中、CM)130,共有メモリ(図中、SM)140,接続制御部150及びサービスプロセッサ(以下、SVP)160を備えて構成される。
CHA110は、ホスト20との間のデータ通信を制御するためのもので、例えば、マイクロプロセッサやローカルメモリ等を備えたコンピュータ装置として構成される。各CHA110は、少なくとも一つ以上の通信ポート111を備えている。通信ポート111には、例えば、WWN(World Wide Name)のような識別情報が設定される。ホスト20と記憶制御装置10とが、iSCSI(internet Small Computer System Interface)等を用いてデータ通信を行う場合、通信ポート111には、IP(Internet Protocol)アドレス等の識別情報が設定される。
図2中には、2種類のCHA110が示されている。図2中左側に位置する一方のCHA110は、ホスト20からのコマンドを受信して処理するためのものであり、その通信ポート111は、ターゲットポートとなっている。図2中右側に位置する他方のCHA110は、外部記憶制御装置40にコマンドを発行するためのものであり、その通信ポート111は、イニシエータポートとなっている。
DKA120は、HDU200内の各ディスクドライブ210との間のデータ通信を制御するためのもので、CHA110と同様に、マイクロプロセッサやローカルメモリ等を備えたコンピュータ装置として構成される。
各DKA120と各ディスクドライブ210とは、例えば、ファイバチャネルプロトコルに従って、ブロック単位のデータ転送を行う。コントローラ100が各ディスクドライブ210にアクセスするための経路は、冗長化されている。いずれか一方のDKA120や通信経路に障害が発生した場合でも、コントローラ100は、他方のDKA120や通信経路を用いて、ディスクドライブ210にアクセス可能である。同様に、ホスト20とコントローラ100との間の経路、外部記憶制御装置40とコントローラ100との間の経路も冗長化することができる。
CHA110及びDKA120の動作を簡単に説明する。CHA110は、ホスト20から発行されたリードコマンドを受信すると、リードコマンドを共有メモリ140に記憶させる。DKA120は、共有メモリ140を随時参照しており、未処理のリードコマンドを発見すると、ディスクドライブ210からデータを読み出して、キャッシュメモリ130に記憶させる。CHA110は、キャッシュメモリ130に移されたデータを読み出し、ホスト20に送信する。
CHA110は、ホスト20から発行されたライトコマンドを受信すると、ライトコマンドを共有メモリ140に記憶させる。CHA110は、受信したライトデータをキャッシュメモリ130に記憶させる。CHA110は、キャッシュメモリ130にライトデータを記憶させた後、ホスト20に書込み完了を報告する。DKA120は、共有メモリ140に記憶されたライトコマンドに従って、キャッシュメモリ130に記憶されたライトデータを読出し、書込み対象のボリューム230Pに対応するディスクドライブ210に記憶させる。
キャッシュメモリ130は、例えば、ホスト20から受信したライトデータ等を記憶するものである。キャッシュメモリ130は、例えば不揮発メモリから構成される。共有メモリ140は、例えば不揮発メモリから構成される。共有メモリ140には、制御情報や管理情報等が記憶される。
共有メモリ140及びキャッシュメモリ130は、同一のメモリ基板上に混在して設けることができる。あるいは、メモリの一部をキャッシュ領域として使用し、他の一部を制御領域として使用することもできる。
接続制御部150は、各CHA110と、各DKA120と、キャッシュメモリ130及び共有メモリ140をそれぞれ接続させるものである。これにより、全てのCHA110,DKA120は、キャッシュメモリ130及び共有メモリ140にそれぞれアクセス可能である。なお、接続制御部150は、例えばクロスバスイッチ等として構成することができる。
SVP160は、LAN等の内部ネットワークCN4を介して、各CHA110にそれぞれ接続されている。また、SVP160は、LAN等の通信ネットワークCN2を介して、管理サーバ30に接続可能である。SVP160は、記憶制御装置10内部の各種状態を収集し、管理サーバ30に提供する。なお、SVP160は、CHA110及びDKA120の両方に接続されてもよい。SVP160は、共有メモリ140を介して、各種のステータス情報を収集可能であるため、SVP160とCHA110とを接続するだけでも良い。
コントローラ100の構成は、上述した構成に限定されない。例えば、一つまたは複数の制御基板上に、ホスト20との間のデータ通信を行う機能と、外部記憶制御装置40との間のデータ通信を行う機能と、ディスクドライブ210との間のデータ通信を行う機能と、データを一時的に保存する機能と、構成情報等を書換可能に保存する機能とを、それぞれ設ける構成でもよい。
HDU200の構成について説明する。HDU200は、複数のディスクドライブ210を備えている。各ディスクドライブ210は、例えば、ハードディスクドライブ、フラッシュメモリデバイス、光ディスクドライブ、光磁気ディスクドライブ、ホログラフィックメモリデバイス等として実現される。要するに、HDU200は、書換可能な不揮発性の記憶装置を備えている。
RAID構成等によっても相違するが、例えば、3個1組や4個1組等の所定数のディスクドライブ210によって、パリティグループ220が構成される。パリティグループ220は、パリティグループ220内の各ディスクドライブ210がそれぞれ有する物理的記憶領域を仮想化したものである。パリティグループ220の有する物理的記憶領域には、所定サイズまたは可変サイズの論理デバイス(LDEV:Logigal DEVice)230を設定できる。論理デバイス230は、LUN(Logical Unit Number )に対応付けられて、ホスト20に論理ボリュームとして提供される。以下の説明では、論理デバイス230を論理ボリューム230またはボリューム230と呼ぶ。
外部記憶制御装置40は、記憶制御装置10と同様に、例えば、コントローラ41とHDU42とを備えている。HDU42の有する一つまたは複数のディスクドライブを用いて、論理ボリュームが設けられる。外部記憶制御装置40は、記憶制御装置10から見た場合に記憶制御装置10の外部に存在するため、外部記憶制御装置と呼ばれる。
外部記憶制御装置40の有する論理ボリュームを、記憶制御装置10内に仮想的に設けられる中間記憶デバイスにマッピングし、この中間記憶デバイス上に論理ボリューム230を設定することにより、記憶制御装置10は、外部記憶制御装置40の有する論理ボリュームを自分自身の内部に取り込んで利用することができる。
管理サーバ30は、記憶制御装置10の設定や構成等を管理する装置である。ユーザは、管理サーバ30を介して、例えば、CDP対象のボリュームの設定、目標保護期間の設定等を記憶制御装置10に指示する。なお、管理サーバ30の機能を、ホスト20内に設ける構成でもよい。
図3は、ソフトウェア構成を模式的に示す説明図である。ホスト20内には、不図示のアプリケーションプログラムの他に、例えば、管理部21を設けることができる。管理部21は、CDPに関する種々の設定を行うためのプログラムである。管理サーバ30内にも、CDPに関する種々の設定を行うための管理部31が設けられている。図3に示すように、ホスト20及び管理サーバ30の両方が記憶制御装置10の設定変更等を行うことができるように構成してもよいし、いずれか一方のみが記憶制御装置10の設定変更等を行うことができるように構成してもよい。
図4は、記憶制御装置10の論理的構成を模式的に示す説明図である。記憶制御装置10内には、複数種類のボリューム230P,230B,230Jがそれぞれ少なくとも一つ以上設けられる。これらの各ボリューム230P,230B,230Jは、それぞれディスクドライブ210の有する物理的記憶領域を仮想化することにより生成される。
正ボリューム230Pは、CDP機能によって保護されるボリュームである。正ボリューム230Pは、ホスト20によって使用される。基底ボリューム230Bは、正ボリューム230Pの過去の所定時点の記憶内容を維持するボリュームである。ジャーナルボリューム230Jは、正ボリューム230Pの更新時に生成されるジャーナルデータJDを記憶するためのボリュームである。
なお、ジャーナルボリューム230Jには、チェックポイントマーカ(以下、CPM)を記憶させることもできる。CPMとは、ユーザやアプリケーションプログラムが、復元可能点を予め明示的に指示するために使用するデータである。従って、ユーザやアプリケーションプログラムは、時刻またはCPMのいずれかを用いて復元点を指定することができる。ユーザは、CPMを設定する場合に、任意の情報(例えば、ラベル)をCPMに付けることができる。
なお、CPMとジャーナルデータJDとを一緒に管理する場合でも、CPMに設定されているジャーナルシーケンス番号をメモリに記憶しておくことにより、速やかにCPMを検索することができる。なお、設定されたCPMを削除することもできる。例えば、CPMを設定可能な数に上限がある場合、ユーザは、削除対象のCPMの番号を指定することにより、その指定されたCPMを削除させることができる。
CPMに付与されるCPM番号は、ユーザによって手動で指定される場合と、記憶制御装置10が自動的に指定する場合とがある。ユーザが手動でCPM番号を指定する場合、例えば、使用中のCPM番号の一覧を予め取得し、ユーザは、未使用のCPM番号を選択する。もしもユーザによって選択されたCPM番号が使用中の番号である場合、エラーが返される。記憶制御装置10が自動的にCPM番号を設定する場合、例えば、未使用の番号から順番に使用される。未使用の番号が存在しない場合、エラーが返される。
CPMの一覧を参照する操作の例を説明する。ユーザは、CDPグループを指定して、使用中のCPM番号の一覧を管理画面に表示させることができる。ユーザは、表示された一覧の中から所望のCPM番号を指定することにより、そのCPMの詳細な情報を管理画面に表示させることができる。詳細な情報としては、例えば、CPMの設定された時刻や、CPMに付与されたラベル等を挙げることができる。なお、ユーザは、CPMの一覧の中から所望のCPMを削除することもできる。
本実施例では、一つまたは複数のボリューム230PをCDP対象として保護することができる。つまり、一つのボリューム230Pだけを単独で保護することもできるし、あるいは、複数のボリューム230Pをグループ化し、グループ全体として保護することもできる。例えば、互いに関連するデータを記憶する複数のボリューム230Pをグループ化し、CDPによる保護動作を同期させることができる。
基底ボリューム230Bは、正ボリューム230Pに一対一で対応付けられる。これに対し、一つのジャーナルボリューム230Jは、複数の正ボリューム230Pにそれぞれ対応付けることができる。
記憶制御装置10は、複数種類の差分ビットマップBM10〜BM40を備える。差分コピー用の差分ビットマップBM10は、リストア時に、基底ボリューム230Bから正ボリューム230Pにデータを差分コピーする場合に使用される。このBM10は、リストアコピー用差分ビットマップと呼ぶこともできる。
なお、差分コピー用のBM10は、正ボリューム230Pから基底ボリューム230Bに差分データをコピーする場合にも使用することができる。さらに、正ボリューム230Pから基底ボリューム230Bにデータをコピーする際に使用する形成コピー用差分ビットマップと、基底ボリューム230Bから正ボリューム230Pにデータをコピーする際に使用するリストアコピー用差分ビットマップとを別々に用意することもできる。
さらに、基底ボリューム230Bから正ボリューム230Pにデータをコピーするリストアコピーに使用する差分ビットマップと、正ボリューム230Pから基底ボリューム230Bにデータをコピーする形成/再開コピー(形成コピーまたは再開コピー)に使用する差分ビットマップとを、別々に用意することもできる。両コピーで使用する差分ビットマップをそれぞれ別々にすることにより、形成/再開コピーが終了していなくても、リストアコピーを行うことができる。つまり、形成/再開コピーとリストアコピーとを同時に実行させることができる。
リストアコピーに使用する差分ビットマップは、形成コピーまたは再開コピーにより基底ボリューム230Bから正ボリューム230Pにデータコピーの完了した領域のうち、リストアのために基底ボリューム230Bから正ボリューム230Pにデータコピーが完了したか否かを判別するために使用することができる。
区間差分ビットマップBM20は、予め設定される各区間毎に、正ボリューム230Pと基底ボリューム230Bとの間に生じる差分の位置をそれぞれ管理する。区間差分ビットマップBM20が使用されていた時間帯(例えば、ジャーナルシーケンス番号の範囲)を、その区間差分ビットマップBM20の属性として管理する。リカバリ中に使用される差分ビットマップBM30は、リカバリ中に発生する差分を管理するために使用される。リカバリ中であっても、ホスト20はライト要求を発行する場合があり、このライト要求によって生じる正ボリューム230Pと基底ボリューム230Bとの間の差分は、差分ビットマップBM30により記憶される。この差分ビットマップBM30は、リカバリ中差分ビットマップと呼ぶこともできる。
CDP停止中に使用される差分ビットマップBM40は、CDP停止中に発行されるライト要求によって発生する差分を管理するために使用される。この差分ビットマップBM40は、CDP停止中差分ビットマップと呼ぶこともできる。
図5は、ジャーナルボリューム230Jの記憶構成を模式的に示す説明図である。ジャーナルボリューム230Jの記憶領域は、管理領域とデータ領域とに大別される。管理領域には、ジャーナルデータJDを管理するためのデータやCPMが記憶される。データ領域には、ジャーナルデータJDのデータ本体が記憶される。
管理データ(メタデータ)としては、例えば、ボリューム番号(図中「VOL#」)、スタートLBA、ブロック数、シーケンス番号(図中「SEQ#」)、時刻、データ、フラグ等を挙げることができる。
「ボリューム番号」とは、正ボリューム230Pを特定するための情報である。「スタートLBA」とは、正ボリューム230Pに書き込まれるライトデータの先頭を示す論理ブロックアドレスである。「ブロック数」とは、ライトデータのデータサイズを示す情報である。「シーケンス番号」とは、ジャーナルデータJDに連番で設定される識別番号である。「時刻」とは、ライト要求が発行された時刻である。「データ」とは、データ本体の位置を示すポインタである。「フラグ」とは、そのジャーナルデータJDを有効なものとして扱うか無効として扱うかを示すための制御情報である。なお、ジャーナルデータの有効または無効を示すためのフラグに代えて、例えば、無効とするジャーナルデータのシーケンス番号を別に管理する方法でもよい。この場合、管理領域内の管理データ(メタデータ)を書き換える必要がないので、処理負荷を軽減することができる。
フラグの値が有効に設定されているジャーナルデータJDは、目標保護期間を経過した後で、基底ボリューム230Bに書き込まれる。フラグの値が無効に設定されているジャーナルデータJDは、目標保護期間を経過した後でも、基底ボリューム230Bに書き込まれない。即ち、無効なジャーナルデータJDは、格上げ処理の対象外となる。格上げ処理とは、ジャーナルデータをボリュームに書き込んで、そのボリュームの記憶内容をアップデートさせる処理である。
なお、CPMは、ジャーナルデータJDを管理する管理データと一緒に管理することもできるし、別のテーブルで管理することもできる。
図6は、区間差分ビットマップBM20の使用方法を示す説明図である。例えば、「1時間」等のような、予め設定される所定の区間毎に、それぞれ一つずつの差分ビットマップBM20が使用される。
図6に示す例では、「9:00-10:00」の区間でBM20(09:00-10:00)が、「10:00-11:00」の区間でBM20(10:00-11:00)が、「11:00-12:00」の区間でBM20(11:00-12:00)が、「12:00-13:00」の区間でBM20(12:00-13:00)が、「13:00-」の区間でBM20(13:00-)が、それぞれ使用されている。
目標保護期間が「3時間」に設定される場合、現在時刻から3時間を経過したジャーナルデータJDは、基底ボリューム230Bに書き込まれる。基底ボリューム230Bに書き込まれたジャーナルデータJDは、破棄される。なお、本実施例では、経過時間に応じて格上げ処理を行う場合を説明しているが、これに代えて、上述のように、ジャーナルボリューム230Jの使用率に応じて格上げ処理を行うこともできる。
差分ビットマップBM20(09:00-10:00)で管理されている全てのジャーナルデータJD(09:01-09:55)が、基底ボリューム230Bに書き込まれて破棄された場合、その差分ビットマップBM20(09:00-10:00)は、不要となる。この不要となる差分ビットマップBM20を、空きビットマップと呼ぶことがある。従って、差分ビットマップBM20(09:00-10:00)の記憶内容は消去され、別の新たな区間(14:00-15:00)を管理するための差分ビットマップBM20として再利用される。
なお、通常運用中に目標保護期間TPTを変更することも可能である。例えば、通常運用中に目標保護期間が延長された場合、延長された時間分のジャーナルデータJDがジャーナルボリューム230Jに蓄積されるまで、格上げ処理は停止される。格上げ処理が停止される期間中、空きビットマップ(自分の管理下にある全てのジャーナルデータが格上げ処理された差分ビットマップBM20である)は生じない。また、目標保護期間の延長により、区間差分ビットマップBM20を切り替えるタイミングも変化する。
そこで、第1の方法として、空きビットマップが生じるまで、現在使用中の区間差分ビットマップBM20を使用し続ける方法がある。
第2の方法として、最も古い区間差分ビットマップBM20を2つ選択し、この選択された各区間差分ビットマップBM20をマージして一つの区間差分ビットマップBM20にまとめることにより、空きビットマップを一つ生成する方法がある。
第3の方法として、目標保護期間TPTの延長の度合に応じて、所定個数ずつの区間差分ビットマップBM20を1つの差分ビットマップBM20にまとめることにより、空きビットマップを得る方法がある。例えば、目標保護期間TPTが2倍になった場合(TPT=2×TPT)、2面ずつの区間差分ビットマップBM20をマージして1つにまとめ、目標保護期間TPTが3倍になった場合(TPT=3×TPT)、3面ずつの区間差分ビットマップBM20をマージして1つにまとめる。目標保護期間TPTが1.5倍になった場合(TPT=1.5×TPT)、3面の区間差分ビットマップBM20のうち2面の区間差分ビットマップBM20をマージして1つにまとめ、残りの区間差分ビットマップBM20はそのままとする。
ここで、区間差分ビットマップBM20は、区間の数よりも2つ多い数だけ用意するのが好ましい。つまり、n個の区間に分けて差分を管理する場合、差分ビットマップBM20の総数は、n+2個に設定されるのが好ましい。最古の差分ビットマップBM20を消去して再利用するには、幾らかの処理時間を必要とするためである。差分ビットマップBM20の切替タイミングに発行されるライト要求を確実に管理するために、区間数よりも2つだけ多い数の差分ビットマップBM20を用意するのが好ましい。
図6に点線で示すように、基底ボリューム230Bには、差分ビットマップBM20(09:00-10:00)で管理される区間内のジャーナルデータJD(09:01-09:55)が全て書き込まれる。これにより、基底ボリューム230Bの記憶内容は、「09:55」の時点における正ボリューム230Pの記憶内容に一致する。その後、時間が進んで「13:05」になると、その3時間前である「10:05」までのジャーナルデータJDが、基底ボリューム230Bに書き込まれる。これにより、基底ボリューム230Bの記憶内容は、正ボリューム230Pの「10:05」における記憶内容に一致する。
このように、基底ボリューム230Bの記憶内容は、対応する正ボリューム230Pの記憶内容に、目標保護時間分だけ遅れて追従する。即ち、基底ボリューム230Bが示す記憶内容の時刻(この時刻を基底点と呼ぶ)は、実時間の進行につれてシフトする。基底点は、正ボリューム230Pの記憶内容を復元可能な期間の始点を示している。CDP機能だけでは、基底点より過去に遡って正ボリューム230Pの記憶内容を復元させることはできない。なお、基底ボリューム230BへのジャーナルデータJDの書込みを停止させると、基底点のシフトも停止する。
図7は、記憶制御装置10により実行される制御モードを示す説明図である。記憶制御装置10は、後述のように、例えば、CDP形成及びCDP削除モード(S11)と、リカバリモード(S12)と、CDP停止及びCDP再開モード(S13)とを備える。ここで、後述のS16は「第1制御モード」に、S18,S19,S20,S21は「第2制御モード」に、S23は「第3制御モード」に、それぞれ対応する。
CDP形成及びCDP削除モード(S11)の概要を説明する。詳細は図8と共に後述する。CDP形成及びCDP削除モード(S11)は、初期状態(S14)から始まり、CDPを形成して(S15)、通常運用処理を行う(S16)。
CDPを形成するとは、CDPにより保護される正ボリューム230Pを指定し、この保護対象の正ボリューム230Pに記憶されているデータを基底ボリューム230Bにコピー等する処理を意味する。即ち、S15は、CDP機能を利用するための環境を整える処理である。
通常運用処理(S16)では、ホスト20からライト要求が発行される度にジャーナルデータJDを生成して、ジャーナルボリューム230Jに記憶させる。そして、通常運用処理(S16)では、目標保護期間を経過したジャーナルデータJDを基底ボリューム230Bに書き込むことにより、基底ボリューム230Bの記憶内容を更新させ、基底点をシフトさせる。
CDP機能を解除する場合、CDP削除処理(S17)が実行される。CDP削除処理(S17)では、正ボリューム230Pに設定されていた「CDPによる保護対象」という属性を解除し、通常のボリュームに戻す。その正ボリューム230Pとコピーペアを形成していた基底ボリューム230Bも、通常のボリュームに戻される。また、CDP削除処理(S17)では、CDPが解除された正ボリューム230Pに関するジャーナルデータJDを破棄する。
なお、一つのジャーナルボリューム230Jによって複数の正ボリューム230Pの更新履歴を管理することもできる。この場合、一つの正ボリューム230Pに関するCDPが削除されても、ジャーナルボリューム230J内のジャーナルデータJDを破棄することはできない。この場合、削除されたCDPに関連するジャーナルデータJDは、破棄せずに無効化する。即ち、削除されたCDPに関するジャーナルデータJDを無効なものとして取り扱う。ジャーナルデータJDが無効であるか否かは、管理データ中のフラグを用いて管理してもよいし、ジャーナルデータのシーケンス番号で管理してもよい。
例えば、複数のジャーナルボリューム230Jに跨って設けられるジャーナル領域を複数の正ボリューム230Pが共用しており、異なる正ボリューム230Pの更新履歴がランダムにジャーナルボリューム230Jに書き込まれているような場合、その中の一つの正ボリューム230Pに関するCDPを削除しても、その削除されたCDPに関するジャーナルデータJDは破棄することができない。ジャーナル領域内に各正ボリューム230Pに関するジャーナルデータJDが混在しているためである。従って、この場合、その削除されたCDPに関するジャーナルデータJDは、無効化する。
これに対し、ジャーナルボリューム230Pと正ボリューム230Pとが一対一で対応しているような場合、その正ボリューム230Pに関するCDPが削除されたときは、その正ボリューム230Pに対応付けられているジャーナルボリューム230Jは、未使用ボリュームに戻される。
リカバリモード(S12)を説明する。通常運用処理(S16)の実行中に、何らかの障害が発生すると、この障害は、ユーザまたはアプリケーションプログラムに認識され、障害調査が行われる(S18)。障害を回避すべく、ユーザは、テンポラリリストア(S19)及びリカバリ(S20)を少なくとも一回ずつ実行する。
テンポラリリストア(S19)とは、CDPによる保護対象である正ボリューム230Pの記憶内容を、ユーザの指定する復元点の記憶内容に一時的に戻す処理である。リカバリ(S20)とは、復元された正ボリューム230Pにfsck等のような処理を実施することにより、アプリケーションプログラムが利用可能な状態にするための処理である。
リカバリが正常に完了したことが確認された場合、ユーザは、コンプリートリストア(S21)の実行を指示する。コンプリートリストア(S21)とは、リカバリされた記憶内容を確定させるための処理である。そして、コンプリートリストア(S21)の終了後に、通常運用処理(S16)に移行する。
なお、テンポラリリストア及びリストアを介さずに、直接コンプリートリストアすることもできる。この場合、テンポラリリストアの完了時に復元点以降のジャーナルデータJDを無効化し、リストア後に生じる更新位置をリストア中差分ビットマップBM30ではなく、区間差分ビットマップBM20によって管理する。
テンポラリリストアを取り消すこともできる。テンポラリリストアを取り消すためのコマンドが発行された場合、例えば、テンポラリリストアを開始した時点(ライト要求の受付が禁止された時点である)まで再度テンポラリリストアして、次にコンプリートリストアを実行する。これにより、いったん指示したテンポラリリストアを取り消して、テンポラリリストアの実行を指示するための状態に戻すことができる。
テンポラリリストアをやり直す場合に用いる差分コピー用の差分ビットマップBM10は、基底点からテンポラリリストアをやり直す前の復元点までの各区間差分ビットマップBM20と、リカバリ中差分ビットマップBM30とをマージすることにより、得ることができる。
CDP停止及びCDP再開モード(S13)を説明する。CDP停止及びCDP再開モード(S13)は、CDP機能の実行に何らかの障害が発生した場合に実施される。例えば、ホスト20が正ボリューム230Pへライトアクセスする頻度が大きく、ジャーナルボリューム230Jが満杯になった場合に、CDP停止及びCDP再開モード(S13)が実行される。
CDP停止処理(S23)では、ホスト20が正ボリューム230Pにライトアクセスした場合でも、ジャーナルデータJDの新規生成を中止し、かつ、ジャーナルボリューム230Jに蓄積されているジャーナルデータJDの基底ボリューム230Bへの書込み処理(格上げ処理)を停止させる。その後、S18〜S21で述べたと同様に、障害調査(S24)、テンポラリリストア(S25)、リカバリ(S26)及びコンプリートリストア(S27)が実行される。障害が回復すると、ユーザは、CDPを再開させることができる(S22)。CDP再開処理(S22)では、再開が指示された時点における正ボリューム230Pの記憶内容を基底ボリューム230Bにコピーし、CDP停止前に蓄積された過去のジャーナルデータJDは破棄される。
なお、CDP停止処理(S23)と格上げ処理の停止とは、必ずしも連動して行われる必要はない。CDPの停止とは無関係に格上げ処理のみを停止させることもできる。また、CDPを停止する場合でも、格上げ処理を停止させる必要がない場合もある。
CDP停止後にリカバリすることなく、CDPを再開させることもできる。障害発生時にリカバリを行えばよい。
図8は、CDP形成及びCDP削除モード(S11)の処理の流れを模式的に示す説明図である。図8(1)に示す初期状態では、CDP機能は作動しておらず、ホスト20は通常のボリューム230にアクセスしている(S31)。
図8(2)に示すCDP形成状態では、通常のボリューム230の属性をCDPにより保護される正ボリューム230Pに、別の通常ボリューム230の属性を基底ボリューム230Bに、それぞれ変更する。
記憶制御装置10は、正ボリューム230Pの記憶内容を基底ボリューム230Bに全てコピーする(S32)。これにより、基底ボリューム230Bの記憶内容は、CDP開始時の時刻における正ボリューム230Pの記憶内容に一致する。基底点は、CDP開始時刻(図8の例では「09:00」)となる。記憶制御装置10は、ホスト20によって正ボリューム230Pが更新されると、ジャーナルデータJDを生成してジャーナルボリューム230Jに記憶させる(S33)。なお、正ボリューム230Pから基底ボリューム230Bへのコピー中において、ホスト20が、正ボリューム230Pから基底ボリューム230Bへのコピーが完了していない未コピー領域にデータを書き込もうとした場合、その未コピー領域に記憶されているデータを正ボリューム230Pから基底ボリューム230Bにコピーさせてから、ホスト20からのライト要求を受け付ける。
図8(3)に示す通常運用状態では、記憶制御装置10は、ジャーナルボリューム230Jに記憶されている各ジャーナルデータJDのうち、目標保護期間を経過したジャーナルデータJDを基底ボリューム230Bに書き込む。即ち、目標保護期間を経過したジャーナルデータJDは、基底ボリューム230Bに反映され、基底点が変更される。基底ボリューム230Bに書き込まれたジャーナルデータJDは、破棄される。
CDPでは、ホスト20からライト要求が発行される度に自動的にジャーナルデータJDが生成されて蓄積される。従って、ユーザは、ライト要求の発行単位で(ジャーナルデータ単位で)、正ボリューム230Pの記憶内容を復元可能である。さらに、ユーザまたはアプリケーションプログラムは、CPMの挿入を明示的に指示することにより、任意の復元可能点を予め用意させることもできる(S35)。有効なCPMが存在する場合、ユーザまたはアプリケーションプログラムは、その有効なCPMを指定することにより、正ボリューム230Pの記憶内容を所望の時点まで回復させることができる。
なお、通常運用状態では、所定の区間毎にそれぞれ一つの差分ビットマップBM20が、正ボリューム230Pと基底ボリューム230Bとの間の差分を管理する。
図8(4)に示すCDP削除状態では、記憶制御装置10は、CDPによる保護対象に設定されていた正ボリューム230Pを通常ボリューム230に(S36)、基底ボリューム230Bを通常ボリューム230に(S38)、それぞれ変更する。また、記憶制御装置10は、ジャーナルボリューム230Jに記憶されているジャーナルデータJDを、無効化する(S37)。これにより、初期状態に戻る。
ジャーナルデータJDを無効化するとは、通常ボリューム230に変更される正ボリューム230Pに関して取得されたジャーナルデータJDを、無効なジャーナルデータとして扱うことを意味する。無効化されたジャーナルデータJDは、格上げ処理の対象外として扱われる。ジャーナルデータが有効であるか否かは、ジャーナルデータJDを管理するためのデータ中に含まれるフラグによって示される。一つのジャーナルボリューム230Jが複数の正ボリューム230Pに対応付けられている場合、各正ボリューム230Pに関するジャーナルデータJDがジャーナルボリューム230Jに混在している。このように、ある時点以降のジャーナルデータJDを単純に破棄することができない場合、ジャーナルデータJDを破棄する代わりに無効化する。
図9は、リカバリモード(S12)の処理の流れを模式的に示す説明図である。図9(1)に示す通常運用中に何らかの障害が発生すると、この障害はユーザまたはアプリケーションプログラムによって検出される。
通常運用状態から図9(2)に示すテンポラリリストア状態に移行する。テンポラリリストア状態に移行するに際して、ホスト20による正ボリューム230Pへのアクセスが禁止される(S41)。記憶制御装置10は、目標保護期間を経過したジャーナルデータJDが存在する場合であっても、そのジャーナルデータJDを基底ボリューム230Bに書き込む処理を停止させる(S42)。即ち、記憶制御装置10は、ジャーナルデータJDの格上げを停止し、現在の基底点を維持する。図9では、現在の基底点は「10:00」となっている。
記憶制御装置10は、差分コピー用の差分ビットマップBM10を用いて、基底ボリューム230Bの記憶内容を正ボリューム230Pに差分コピーする(S43)。これにより、正ボリューム230Pの記憶内容は、基底ボリューム230Bで維持されていた基底点まで復帰する。
記憶制御装置10は、ジャーナルボリューム230Jに記憶されているジャーナルデータJDのうち、指定された復元点までの各ジャーナルデータJDを順番に読み出して、正ボリューム230Pに書き込む(S44)。これにより、正ボリューム230Pの記憶内容は、指定された復元点まで復帰する。図9では、復元点として「12:30」が指定された様子を示す。
図9(3)に示すリカバリ状態では、ホスト20による正ボリューム230Pへのライトアクセスの禁止が解除され(S45)、ホスト20からリカバリ内容を確認するためのデータが記憶制御装置10に入力される。記憶制御装置10は、リカバリ後に発行されるライトデータに基づいてジャーナルデータJDを生成し、このジャーナルデータJDをジャーナルボリューム230Jに記憶させる(S46)。
ホスト20からのライトアクセス禁止が解除されることにより、正ボリューム230Pの記憶内容及びジャーナルボリューム230Jの記憶内容は、それぞれ更新される。図9(3)において、リカバリ直後の正ボリューム230Pの記憶内容は、「12:30」の時点に復帰しているが、実時間は「13:30」である。
さらに、リカバリ後のライトアクセスによって、正ボリューム230Pの記憶内容は、「12:30」の時点の記憶内容から多少変化する。この変化を、図9(3)では「12':30’」として示している。かっこ内の値は実時間である。
ジャーナルボリューム230Jは、最初「10:00-13:00」の期間内に生成されたジャーナルデータJDが蓄積されている。リカバリ後のライトアクセスによって、ジャーナルボリューム230Jには、既存のジャーナルデータ(10:00-13:00)に加えて、リカバリ後に生成されるジャーナルデータ(12:30-12':30')も蓄積される。
図9(4)に示すように、リカバリ内容に不満のあるユーザは、別の復元点を指定して、再度テンポラリリストアを実行させることもできる。再度のテンポラリリストアでは、図9(2)で述べたテンポラリリストアと同様に、ホスト20による正ボリューム230Pへのアクセスを禁止させ(S47)、図9(3)で取得されたリカバリ後のジャーナルデータJD(12:30-12':30')を破棄する(S48)。そして、記憶制御装置10は、基底ボリューム230Bから正ボリューム230Pに、両ボリューム230P,230B間の差分をコピーする(S49)。記憶制御装置10は、正ボリューム230Pの記憶内容が再指定された復元点(12:10)の記憶内容に一致するまで、ジャーナルデータJDを正ボリューム230Pに書き込んでいく(S50)。
なお、1つのジャーナルボリューム230Jが複数の正ボリューム230Pに対応付けられており、かつ、その中の一つの正ボリューム230Pについてリストアされる場合は、テンポラリリストアをやり直すときにジャーナルデータJDを破棄できない。この場合は、ジャーナルデータJDを無効化する。ジャーナルボリューム230Jと正ボリューム230Pとが一対一で対応している場合や、グループ単位で一括してリストアを実行する場合には、ジャーナルデータJDを破棄することができる。
例えば、複数のジャーナルボリューム230Jに跨って設けられるジャーナル領域を複数の正ボリューム230Pが共用しており、異なる正ボリューム230Pの更新履歴がランダムにジャーナルボリューム230Jに書き込まれているような場合、その中の一つの正ボリューム230Pに関してリストアを行う場合、そのリストアされる正ボリューム230Pに関するジャーナルデータJDは破棄することができない。ジャーナル領域内に各正ボリューム230Pに関するジャーナルデータJDが混在しているためである。従って、この場合、そのリストアされる正ボリューム230Pに関するジャーナルデータJDは、無効化する。
ユーザは、図9(3)に示すリカバリと図9(4)に示す再度のテンポラリリストアとを複数回繰り返すことができる。これにより、ユーザは、所望の時点を検出する。そして、所望の時点を発見したユーザは、記憶制御装置10にコンプリートリストアの実行を指示する。図9では、「12:30」が所望の時点として選択されたものとする。
図9(5)に示すコンプリートリストアでは、リカバリされた記憶内容が確定され、ホスト20からのアクセス禁止が解除される(S51)。図9(5)では、正ボリューム230Pの記憶内容は、「13:45」の時点の内容に変化している。現在時刻よりも目標保護期間だけ前のジャーナルデータ(図9(5)の例では、「10:00-10:45」までのジャーナルデータ)JDは、基底ボリューム230Bに書き込まれ、その後破棄される(S52)。なお、格上げ処理の再開とコンプリートリストアとを別々に行うこともできる。つまり、例えば、コンプリートリストアの実行後に直ちに格上げ処理を再開すると、保護期間が短縮されるため、格上げ処理の再開を遅らせる場合もある
ジャーナルボリューム230Jに保存されるジャーナルデータJDの範囲は、「10:00-13:00,12:00-12':30'」から「10:45-12:30,13:30-13:45」に変化する(S53)。リカバリ確認によって生成されたジャーナルデータ(12:30-12':30')は、コンプリートリストアの実行に際して破棄される。リカバリ前に蓄積されていたジャーナルデータ(10:00-13:00)のうち、確定された復元点(12:30)以降のジャーナルデータ(12:30-13:00)も、コンプリートリストアの実行によって破棄される。
従って、ジャーナルボリューム230Jには、「10:45-12:30」の範囲のジャーナルデータJDと、「13:30-13:45」の範囲のジャーナルデータJDとがそれぞれ記憶される。つまり、コンプリートリストアの実行によって、CDPで復元可能な期間は、リカバリ前から存在する第1期間(10:45-12:30)と、リカバリ後に発生する第2期間(13:30-13:45)との2つの期間に分断される。
コンプリートリストアの完了後は、図9(6)に示す通常運用状態に移行する。通常運用状態では、上述のように、記憶制御装置10は、ホスト20から正ボリューム230Pへのライトアクセス(S55)に基づいてジャーナルデータJDを生成し、生成したジャーナルデータJDをジャーナルボリューム230Jに記憶させる(S56)。記憶制御装置10は、ジャーナルボリューム230J内に、目標保護期間分のジャーナルデータJDを記憶させ(S57)、目標保護期間を経過したジャーナルデータJDを基底ボリューム230Bに書き込む(S58)。基底ボリューム230Bに反映されたジャーナルデータJDは、破棄される。
図10は、図7中のCDP停止(S23)及びCDP再開(S22)の処理の流れを模式的に示す説明図である。図10(1)に示す通常運用中に、例えば、ジャーナルボリューム230JがジャーナルデータJDで満杯になったものと仮定する。なお、ジャーナルボリューム230Jが満杯になる場合のほかに、ユーザの指示によってCDPが停止される場合もある。例えば、正ボリューム230Pの性能低下を避ける場合や、正ボリューム230Pのフォーマット時に保護不要なライトデータが多量に発生するような場合、ユーザは、CDPを停止させることができる。
ジャーナルボリューム230Jが満杯になった場合、図10(2)に示すCDP停止状態に移行する。CDP停止状態においても、ホスト20は正ボリューム230Pにアクセスして書き込むことができる(S61)。しかし、記憶制御装置10は、ジャーナルデータJDを生成しない。記憶制御装置10は、基底ボリューム230Bへのジャーナルデータの書込み処理を停止し(S62)、ジャーナルボリューム230Jに記憶されているジャーナルデータJDをそのまま保持する(S63)。
CDPの再開が指示されると、図9(3)に示すCDP再開状態に移行する。記憶制御装置10は、正ボリューム230Pの記憶内容を基底ボリューム230Bに全てコピーし(S64)、基底点をCDP再開が指示された時刻に変更する。記憶制御装置10は、ホスト20から正ボリューム230Pへのライトアクセス(S65)に基づいて、ジャーナルデータJDを生成し、生成したジャーナルデータJDをジャーナルボリューム230Jに記憶させる(S66)。記憶制御装置10は、CDP再開前に記憶されていた古いジャーナルデータJDを全て破棄し、CDP再開後に取得されたジャーナルデータJDのみをジャーナルボリューム230Jに保存させる(S67)。
図11は、図7中のCDP停止後におけるリカバリ処理(S23〜S27)の流れを模式的に示す説明図である。図11(1)に示すCDP停止状態では、上述のように、ジャーナルデータJDの取得及び保存は停止されており(S81)、かつ、既に蓄積されているジャーナルデータJDを基底ボリューム230Bに書き込む処理も停止されている(S82)。
CDP停止状態において、何らかの障害が発生した場合、ユーザは、図11(2)に示すように、テンポラリリストアを実行させる。テンポラリリストアの実行に先立って、ホスト20による正ボリューム230Pへのアクセスは停止される(S83)。記憶制御装置10は、差分コピー用の差分ビットマップBM10を用いて、基底ボリューム230Bの記憶内容と正ボリューム230Pの記憶内容との差分を、基底ボリューム230Bから正ボリューム230Pにコピーさせる(S84)。続いて、記憶制御装置10は、正ボリューム230Pの記憶内容が指定された復元点の記憶内容になるまで、ジャーナルデータJDを正ボリューム230Pに書き込む(S85)。
図11(3)に示すリカバリ状態では、ホスト20による正ボリューム230Pへのアクセス禁止が解除される(S86)。記憶制御装置10は、リカバリ後に発行されるライトデータの書込み位置(更新位置)を、CDP停止中の差分ビットマップBM40を用いて管理する(S86)。
なお、CDP停止後のテンポラリリストアによって差分コピー用差分ビットマップBM10を作成した後は、いったんCDP停止中の差分ビットマップBM40の記憶内容を消去する。即ち、差分ビットマップBM40において更新位置を示すために「1」がセットされた箇所を、「0」に戻す。そして、テンポラリリストア後のリカバリにおいて、差分ビットマップBM40を再使用する。
図11(4)に示すコンプリートリストアでは、リカバリされた記憶内容が確定され、ホスト20からのアクセスはそのまま継続される(S87)。記憶制御装置10は、確定された復元点以降のジャーナルデータJDを無効化する(S88)。そして、図11(5)に示すCDP停止状態に移行し、ホスト20によって更新された位置を差分ビットマップBM40を用いて管理する。
図12〜図18に基づいて、CDPによって保護される期間の変化を説明する。図12は、CDPによる保護の開始から通常運用状態に移行するまでの保護期間の変化を示す説明図である。図12〜図18において、ジャーナルデータJDの蓄積状態を斜線部で示し、削除されたジャーナルデータJDの範囲を黒く塗りつぶして示す。つまり、図中の斜線部は、ジャーナルデータJDによって回復可能な保護期間PTを示す。
初期状態では、正ボリューム230P及び基底ボリューム230Bはいずれも設定されておらず、CDPによる保護は行われていない。CDP形成の指示が与えられると、正ボリューム230P及び基底ボリューム230Bがそれぞれ設定され、CDP形成が指示された時刻td1における正ボリューム230Pの記憶内容を基底ボリューム230Bにコピーするための形成コピーが開始される。
形成コピー中に、ホスト20は、正ボリューム230Pを対象とするライト要求を発行できる。上述の通り、形成コピー中に、正ボリューム230Pから基底ボリューム230Bへのコピーが完了していない未コピー領域についてライト要求が発行された場合、例えば、一つの方法として、未コピー領域に記憶されているデータを基底ボリューム230Bにコピーした後で、そのライト要求を受け付ける。記憶制御装置10は、ライト要求に基づいてジャーナルデータJDを生成し、ジャーナルボリューム230Jに記憶させる。形成コピーの完了時刻td2において、ジャーナルボリューム230Jには、CDP形成時刻td1から形成コピー完了時刻td2までの間に発行されたライト要求に関するジャーナルデータJDが保存される。従って、この場合の保護期間PT1は、td1からtd2までの期間となる。保護期間PT1は、未だ目標保護期間TPTに達していない。
形成コピー完了後、記憶制御装置10は通常運用状態1に移行する。ここで、通常運用状態の時間変化を分かり易く示すために、「通常運用1」、「通常運用2」、「通常運用3」のように、時間の経過に応じて番号を添えている。
通常運用1では、ジャーナルボリューム230Jには、td1からtd3までに発行されたライト要求に関するジャーナルデータJDが保存される。この場合の保護期間PT2は、td1からtd3までの期間である。保護期間PT2は、未だ目標保護期間TPTに達していない。
通常運用2では、td1からtd4までに発行されたライト要求に関するジャーナルデータJDがジャーナルボリューム230Jに保存されている。この場合の保護期間PT3は、td1からtd4までの期間である。保護期間PT3は、目標保護期間TPTに一致したものとする。
さらに時刻の進んだ通常運用3では、目標保護期間TPTを経過したジャーナルデータJDは、基底ボリューム230Bに書き込まれ、そして破棄される。即ち、最新のデータ時刻td5から目標保護期間TPTだけ前の時刻以前の範囲に蓄積されたジャーナルデータJD(Δtda=(td5−TPT)−td1)は、基底ボリューム230Bに順番に書き込まれていく。基底ボリューム230Bに書き込まれたジャーナルデータJDは、破棄される。ジャーナルボリューム230Jには、目標保護期間TPT分のジャーナルデータJDが蓄積されているため、ユーザまたはアプリケーションプログラムは、現在時刻td5から目標保護期間TPTだけ前の時刻の範囲内で、任意の時刻を復元点として指定することができる。
図13は、コンプリートリストア後に保護期間が分断される様子を示す。図13の最上段に示すように、通常運用状態において何らかの障害が発生し、その障害発生がユーザまたはアプリケーションプログラムに認識されたと仮定する。
ジャーナルボリューム230Jには、最古時刻td9から最新時刻td11までの期間内に発行されたライト要求に関するジャーナルデータJDが保存されている。障害発生が認識された場合、テンポラリリストアの実行に先立って、ホスト20から正ボリューム230Pへのアクセスは停止され、かつ、ジャーナルデータJDを基底ボリューム230Bに書き込む処理も停止される。
なお、必要に応じて、テンポラリリストアの実行の有無とは別に、ジャーナルデータJDを基底ボリューム230Bに書き込む処理のみを停止させることもできる。例えば、図7中のS18に示す障害調査を実行する前に、格上げ処理を停止させるのが好ましい。格上げ処理を停止しない場合、障害を調査している間に保護期間が短縮されてしまうためである。従って、障害調査を開始する前に、格上げ処理を停止して保護期間が短縮されるのを防止する方が望ましい。但し、例えば、目標保護期間が十分長く設定されているような場合は、障害調査の開始前に格上げ処理を停止させる必要はない。
時刻td11を復元点としてテンポラリリストアの実行が指示される。各区間差分ビットマップBM20をマージして差分コピー用差分ビットマップBM10が生成され、この差分ビットマップBM10を用いて、基底ボリューム230Bから正ボリューム230Pにデータが差分コピーされる。その後、最古時刻td9から復元点td11までの間のジャーナルデータJDが基底ボリューム230Bに順番に書き込まれ、テンポラリリストアが完了する。
時刻td12においてテンポラリリストアが完了し、リカバリされた記憶内容を確認するためのコマンドやデータがホスト20から発行される。記憶制御装置10は、テンポラリリストア後にホスト20から発行されたライトデータに関するジャーナルデータJDを生成し、ジャーナルボリューム230Jに記憶させる。
復元点td11のテンポラリリストアによるリカバリ内容に不満のある、ユーザやアプリケーションプログラムは、別の時刻td13を復元点として2度目のテンポラリリストアの実行を指示する。時刻td14において、2度目のテンポラリリストアの実行が指示されると、1度目のテンポラリリストア後に蓄積されていたジャーナルデータJD(td12−td14の範囲内のジャーナルデータJD)は、破棄される。
2度目のテンポラリリストアが完了すると、ユーザまたはアプリケーションプログラムは、リカバリされた記憶内容を確認する。リカバリ後の時刻td15以降に、ホスト20から発行されたライトデータに関してジャーナルデータJDが生成され、ジャーナルボリューム230Jに記憶される。
ユーザまたはアプリケーションプログラムが2度目のテンポラリリストアの結果に満足した場合、td17において、コンプリートリストアの実行が指示される。コンプリートリストアの実行が指示されることにより、正ボリューム230Pの記憶内容は、復元点td13における記憶内容に確定される。記憶制御装置10は、確定された復元点td13以降に蓄積された連続するジャーナルデータJDを全て破棄する。即ち、図示の例では、td13からtd10までの期間内のジャーナルデータJDが全て破棄される。
記憶制御装置10は、現在時刻td17から目標保護期間TPTだけ前の時刻td16以前に蓄積されたジャーナルデータJDは、順番に基底ボリューム230Bに書き込まれて破棄される。即ち、目標保護期間TPTを外れた範囲(td16−td10の範囲)のジャーナルデータJDは、格上げ処理された後で破棄される。
コンプリートリストアの完了後に通常運用が開始される。通常運用では、td15以降に発行されるライト要求に関するジャーナルデータJDがジャーナルボリューム230Jに蓄積されていく。その一方、目標保護期間TPTを過ぎたジャーナルデータJD(td18−td16)は、順番に基底ボリューム230Bに書き込まれて破棄される。
ここで注目すべき点は、コンプリートリストアの実行によって、CDPによる保護期間PTが2つに分断されるという点である。保護期間PTは、より古い期間である第1期間(td16−td13)と、より新しい期間である第2期間(td15−td17)とに分割される。
コンプリートリストアの実行後に、復元点td13以前のジャーナルデータJD(td16−td13の範囲のジャーナルデータJD)を、直ちに基底ボリューム230Bに書き込んで破棄するという構成も可能である。つまり、第1期間(td16−td13)内のジャーナルデータJDについて直ちに格上げ処理を実施し、基底点をtd16からtd13に進めることも可能である。
しかし、本実施例のように、コンプリートリストアの復元点td13以前のジャーナルデータJDを保持しておくことにより、ユーザは、コンプリートリストアの実行後においても、td13以前の時刻へのリカバリを指示することができ、ユーザの使い勝手が向上する。
複数の正ボリューム230PがCDPグループとしてグループ化されている場合、2つの方法のいずれかでリカバリさせることができる。第1方法は、グループ単位でリストア制御を実施する方法である。第1方法では、CDPグループ内の全ての正ボリューム230Pについて、各保護期間PTがそれぞれ一致するように、同期して制御する。
第1方法では、CDPグループ内の全ての正ボリューム230Pは、同一時刻の記憶内容に復元され、かつ、ジャーナルデータJDの格上げ処理の停止及び再開も同時に実施される。第1方法の場合、CDPグループ内の全ての正ボリューム230Pの保護期間PTは、図13で説明したように遷移する。
第2方法は、ボリューム単位でリストア制御を実施する方法である。第2方法では、CDPグループ内の各正ボリューム230Pは、それぞれ個別にテンポラリリストア及びコンプリートリストアを行うことができる。なお、CDPグループ内の複数の正ボリューム230Pについて、ボリューム単位のリストア制御を行うこともできる。
ところで、CDPグループ内のある正ボリューム230Pについて、テンポラリリストアを行う場合、コンプリートリストアについて説明したのと同様に、リカバリ処理中のジャーナルデータJDを破棄することはできない。従って、そのジャーナルデータJDは、無効化される。
第2方法の場合、CDPグループ内の一方の正ボリューム230Pについて図13に示すようなリストアが実施された場合、同一CDPグループ内の他方の正ボリューム230Pについては、図14に示す制御が実施される。ここでは、説明の便宜上、一方の正ボリューム230P及び基底ボリューム230Bには(1)を添え、他方の正ボリューム230P及び基底ボリューム230Bには(2)を添える。
図13で述べたように、一方の正ボリューム230P(1)についてテンポラリリストアの実行が指示されると、一方の基底ボリューム230B(1)へのジャーナルデータJDの書込みは停止され、一方の基底点は一時的に固定される。これと同時に、他方の基底ボリューム230B(2)へのジャーナルデータJDの書込みも停止され、他方の基底点も一時的に固定される。
その後、一方の正ボリューム230P(1)のコンプリートリストアが完了すると、一方の基底点の進行が再開される。これと同時に、他方の基底ボリューム230B(2)の基底点についても進行が再開される。
ここで、正ボリューム230Pに物理的な障害が発生した場合の処理を説明する。この場合、まず最初に、故障したディスクドライブ210を正常なディスクドライブ210と交換する。そして、ディスクドライブ交換後の1回目のテンポラリリストアでは、基底ボリューム230Bから正ボリューム230Pに全データをコピーし、さらに、ジャーナルデータJDを正ボリューム230Pに書き込む。2回目のテンポラリリストアからは、上述の通り、複数の区間差分ビットマップBM20をマージして差分コピー用の差分ビットマップBM10を生成し、この差分ビットマップBM10を用いて差分コピーを行うことにより、テンポラリリストアを実行する。
なお、正ボリューム230Pとは別のボリュームにリストアすることもできる。例えば、1回目のテンポラリリストアでは、基底ボリューム230Bの全データを別ボリュームにコピーした後、ジャーナルデータJDを別ボリュームに書き込む。2回目のテンポラリリストアでは、上述した通り、区間差分ビットマップBM20をマージして得られる差分コピー用の差分ビットマップBM10を用いて差分コピーを行うことにより、テンポラリリストアを実行する。
それぞれ保護期間の異なる複数の正ボリューム230PからCDPグループが構成されている場合、幾つかの方法でリストアを管理することができる。例えば、第1の方法では、CDPグループ内の各正ボリューム230Pの保護期間が重なっている時点のみ、復元可能とする。第2の方法では、指定された復元点が保護期間に含まれている正ボリューム230Pのみ、復元させる。第3の方法では、指定された復元点が保護期間に含まれている正ボリューム230Pのみ、その指定された復元点に復元し、指定された復元点が保護期間に含まれていない他の正ボリューム230Pについては、それぞれの保護期間内で最も指定された復元点に近い時点に復元させる。
ここで、CDPグループ内の一部の正ボリューム230Pについて、CDPを停止したり、CDPを再開したりする場合について説明する。CDPグループ内のボリューム単位でCDPを停止させる場合、停止対象の正ボリューム230Pに関するジャーナルデータJDの取得のみを停止させる。CDPグループ内のボリューム単位でCDPを再開させる場合、再開対象の正ボリューム230Pに関して過去に取得されたジャーナルデータJDのみを無効化し、さらに、差分コピー等を行う。CDPグループ内のボリューム単位でCDPを削除する場合、削除対象の正ボリューム230Pに関するジャーナルデータJDのみを無効化する。なお、ジャーナルデータJDを破棄可能な場合、そのジャーナルデータJDを無効化せずに破棄することもできる。
図15は、CDPを停止させた後でCDPを再開させる場合の、保護期間PTの変化を示す説明図である。時刻td21において、CDPの停止が指示されると、新規のジャーナルデータJDの生成は停止される。
CDP停止の指示が発行された時点で、目標保護期間TPTから外れた古いジャーナルデータJD(td22−td20の期間内のジャーナルデータ)は、基底ボリューム230Bに書き込む必要はない。つまり、ジャーナルデータの取得停止とジャーナルデータの格上げ停止とは、同時に実行する必要はない。
CDP停止中は、ジャーナルデータJDを基底ボリューム230Bに書き込む処理は、停止される。そして、時刻td25において、CDP再開が指示されると、ジャーナルボリューム230Jに蓄積されていたジャーナルデータは全て破棄される。同時に、時刻td25以降に生じる新たなジャーナルデータJDの蓄積が開始される。
時刻td26において、CDPを再開させるための、基底ボリューム230Bから正ボリューム230Pへの形成コピーが完了し、通常運用状態に移行する。以後、ジャーナルボリューム230Jには、目標保護期間TPT分のジャーナルデータJDが次第に蓄積されていく。
なお、CDPグループ内の一部の正ボリューム230Pについてのみ、CDPの停止、CDPの再開及びCDPの削除を行うことができる。
図16は、ジャーナルボリューム230Jが満杯状態となるのを抑制するための、連続格上げ処理の様子を示す説明図である。連続格上げ処理とは、目標保護期間TPTから外れたジャーナルデータJDに加えて、目標保護期間TPT内のジャーナルデータJDも基底ボリューム230Bに書込んで破棄させる処理である。連続格上げ処理は、ジャーナルボリューム230Jの使用率UJが連続格上げ処理の開始閾値Th1に達した場合(UJ=Th1)に開始される。
図16の最上段に示すように、通常運用状態において、ジャーナルボリューム230Jには、時刻td30から最新時刻td31までに発行されたライト要求に関するジャーナルデータJDが保存されている。即ち、目標保護期間TPTは、td30からtd31までの期間である。
次の段に示すように、ジャーナルボリューム230Jの使用率UJが開始閾値Th1に達したと仮定する。目標保護期間TPTを外れた範囲のジャーナルデータJD(td32−td30)は、通常通り、基底ボリューム230Bに書き込まれて破棄される。
さらに次の段に示すように、連続格上げ処理が開始されると、目標保護期間TPTから外れたジャーナルデータJD及び目標保護期間TPT内のジャーナルデータJDの一部が、それぞれ基底ボリューム230Bに書き込まれて破棄される。図16では、時刻td16までのジャーナルデータJDが基底ボリューム230Bに書き込まれて破棄される様子が示されている。
連続格上げ処理を開始することにより、ジャーナルボリューム230Jが満杯になる時期を遅らせることができる。しかし、例えば、ホスト20が正ボリューム230Pを短時間で多量に更新したような場合、ジャーナルボリューム230JはジャーナルデータJDで満杯となる。
ジャーナルボリューム230Jが満杯になった場合(UJ=100%)、次の段に示すように、連続格上げ処理は停止される。従って、目標保護期間TPTに含まれる時刻td34以降のジャーナルデータJDは、基底ボリューム230Bに書き込まれない。
ジャーナルボリューム230Jが満杯になると、CDPは停止される。その後、ユーザまたはアプリケーションプログラムからCDP再開が明示的に指示された場合、CDPが再開される。CDP停止及びCDP再開に関する保護期間PTの変化は、図15で述べたので省略する。
図17は、連続格上げ処理を実行した場合の、別の変化を示す説明図である。図16では、連続格上げ処理を実行することにより、目標保護期間TPT内のジャーナルデータJDを基底ボリューム230Bに書き込んで破棄することができた。
しかし、ホスト20による正ボリューム230Pの更新量(ライト要求の発行頻度)が多い場合、図17に示すように、連続格上げ処理を実施しても、目標保護期間TPT内のジャーナルデータJDを書き込むことができない可能性がある。この場合は、結果的に、目標保護期間TPTよりも実際の保護期間PTの方が長くなる。
図18は、流入制限処理を実行した場合の保護期間PTの変化を示す説明図である。流入制限処理とは、ホスト20による正ボリューム230Pへの書込みを制限させる処理である。流入制限処理は、ジャーナルボリューム230Jの使用率UJが流入制限処理の開始閾値Th2に達した場合(UJ=Th2)に開始される。
図18の上から2番目の段に示すように、使用率UJが閾値Th1に達すると(UJ=Th1)、まず最初に、上述の連続格上げ処理が開始される。これにより、次の段に示すように、目標保護期間TPT内の時刻td40までのジャーナルデータが基底ボリューム230Bに書き込まれて破棄される。しかし、ホスト20からの多量のライト要求発行が停止せず、使用率UJが閾値Th2に達すると(UJ=Th2)、流入制限処理が開始される。
次の段に示すように、流入制限処理が開始されると、ホスト20から発行されるライト要求の量(即ち、流入量)とジャーナルデータJDを基底ボリューム230Bに書き込んで破棄する処理(即ち、格上げ処理)の処理量とがバランスする点で、保護期間PTが定まる。
記憶制御装置10は、ホスト20から発行されるライト要求の量を抑制しつつ、ジャーナルボリューム230J内のジャーナルデータJDの格上げ処理を実行する。そして、使用率UJが連続格上げ処理を停止させるための閾値Th3まで低下すると(UJ=Th3)、連続格上げ処理は停止され、通常運用状態に移行する。通常運用状態に移行した直後は、目標保護期間TPTよりも実際の保護期間PTの方が短い(TPT>PT)。連続格上げ処理の実施によって、目標保護期間TPT内のジャーナルデータJDについても格上げ処理を行ったためである。以後、目標保護期間TPTと保護期間PTとが一致するまで、ジャーナルデータJDがジャーナルボリューム230Jに蓄積されていく。
なお、流入制限を行わず、連続格上げ処理のみを実行した場合でも、保護期間が図18に示すような変化を見せる場合がある。
図19〜図22のフローチャートに基づいて、記憶制御装置10の動作の一部を別の観点から説明する。以下の各フローチャートは、処理の概要を示しており、実際のコンピュータプログラムとは相違する場合がある。また、いわゆる当業者であれば、フローチャート中のステップを別のステップに変更したり、削除等することができるであろう。
図19は、通常運用状態の処理を示すフローチャートである。記憶制御装置10は、ホスト20からライトデータを受領すると(S100:YES)、ライトデータを正ボリューム230Pに書込む(S101)。
記憶制御装置10は、受信したライトデータに関するジャーナルデータJDを生成し(S102)、このジャーナルデータJDをジャーナルボリューム230Jに記憶させる(S103)。一方、ホスト20からCPMが発行された場合(S100:NO,S104:YES)、記憶制御装置10は、CPMをジャーナルボリューム230Jに記憶させる(S105)。
記憶制御装置10は、ジャーナルボリューム230Jに記憶されている各ジャーナルデータJDに設定されている時刻情報と現在時刻とを比較することにより、目標保護期間TPTを過ぎたジャーナルデータJDが存在するか否か、つまり、目標保護期間TPTから外れたジャーナルデータJDが存在するか否かを判定する(S106)。
目標保護期間TPTから外れたジャーナルデータJDが存在する場合(S106:YES)、記憶制御装置10は、目標保護期間TPTから外れたジャーナルデータJDを基底ボリューム230Bに書込み、書き込んだ後で破棄する(S107)。
図20は、区間差分ビットマップBM20を切替ながら使用する処理を示すフローチャートである。記憶制御装置10は、ホスト20からライトデータを受領したか否かを判定する(S110)。つまり、記憶制御装置10は、ホスト20からライト要求が発行されたか否かを監視している(S110)。
ライトデータを受領した場合(S110:YES)、記憶制御装置10は、現在使用中の差分ビットマップBM20に、そのライトデータの書込み位置を記憶させる(S111)。即ち、記憶制御装置10は、そのライトデータによって更新される論理トラックに対応する差分ビットに「1」を設定する。
記憶制御装置10は、差分ビットマップBM20を切り替える時期が到来したか否かを判定する(S112)。例えば、区間を所定時間として定義している場合、記憶制御装置10は、所定時間が経過したか否かを判定する。これに代えて、例えば、ジャーナルボリューム230Jの使用率UJで区間を定義している場合、記憶制御装置10は、所定の使用率に達したか否かを判定する。
切替時期が到来したと判定された場合(S112:YES)、記憶制御装置10は、次の差分ビットマップBM20に切り替えて、ホスト20による正ボリューム230Pの更新を管理する(S113)。
記憶制御装置10は、使用済の各差分ビットマップBM20について、その管理下にあるジャーナルデータJDが全て基底ボリューム230Bに書き込まれた差分ビットマップBM20が存在するか否かを判定する(S114)。つまり、記憶制御装置10は、使用済差分ビットマップBM20に対応付けられている全てのジャーナルデータJDについて格上げ処理が完了している使用済差分ビットマップBM20が存在するか否かを判定する(S114)。
対応する全てのジャーナルデータJDが基底ボリューム230Bに書き込まれて破棄されている、使用済の差分ビットマップBM20が検出された場合(S114:YES)、記憶制御装置10は、その使用済の差分ビットマップBM20の記憶内容を消去し(S115)、その差分ビットマップBM20を次の区間での差分管理に使用する。
図21は、リカバリ処理を示すフローチャートである。テンポラリリストアの実行に先立って、ホスト20から正ボリューム230Pへのアクセスが禁止される(S120)。このホストアクセスの禁止は、ユーザまたはアプリケーションプログラムによって実行させることができる。
記憶制御装置10は、目標保護期間TPTを外れたジャーナルデータJDを基底ボリューム230Bに書き込んでから破棄する処理(格上げ処理)を停止する(S121)。これにより、基底ボリューム230Bの示す基底点は固定され、進行を停止する。
記憶制御装置10は、選択可能な保護期間PT及び設定済のCPMについて、ホスト20に通知する(S122)。ホスト20は、この通知された情報に基づいて、テンポラリリストアさせる復元点を選択する。
記憶制御装置10は、各区間差分ビットマップBM20をマージして、差分コピー用の差分ビットマップBM10を生成する(S123)。即ち、記憶制御装置10は、各区間差分ビットマップBM20の論理和を求めることにより、差分コピー用の差分ビットマップBM10を生成する。記憶制御装置10は、この差分ビットマップBM10を用いて、基底ボリューム230Bと正ボリューム230Pとの間の差分データのみを、基底ボリューム230Bから正ボリューム230Pにコピーさせる(S124)。これにより、正ボリューム230Pの記憶内容は、基底ボリューム230Bの記憶内容に一致する。
記憶制御装置10は、ジャーナルボリューム230Jに記憶されている各ジャーナルデータJDのうち、最古のジャーナルデータから指定された復元点のジャーナルデータまでを順番に読み出して、正ボリューム230Pに書き込む(S125)。
記憶制御装置10は、差分コピー用の差分ビットマップBM10からリカバリ中差分ビットマップBM30に切り替える(S126)。ホスト20による正ボリューム230Pへのアクセス禁止が解除されると、ホスト20による正ボリューム230Pの更新位置を差分ビットマップBM30で管理する。また、記憶制御装置10は、ホスト20から発行されたライト要求に関するジャーナルデータJDを生成し、ジャーナルボリューム230Jに記憶させる(S127)。
再度のテンポラリリストアの実行が指示された場合(S128:YES)、記憶制御装置10は、最初のリカバリ後に蓄積されたジャーナルデータJDを破棄する(S129)。そして、記憶制御装置10は、各区間差分ビットマップBM20及びリカバリ中差分ビットマップBM30をマージして、差分コピー用の差分ビットマップBM10を改めて生成する(S130)。ユーザまたはアプリケーションプログラムは、テンポラリリストアによって復元された記憶内容に満足するまで、S124〜S130のステップを繰り返し実行させることができる。
テンポラリリストアによってリカバリされた記憶内容をユーザまたはアプリケーションプログラムが承認し、コンプリートリストアの実行が指示された場合(S128:NO,S131:YES)、記憶制御装置10は、確定された復元点から「I/O停止点」までのジャーナルデータJDを無効化または破棄する(S132)。「I/O停止点」までのジャーナルデータJDとは、S120で停止されるホスト20からのライト要求について生成されたジャーナルデータJDである。
記憶制御装置10は、S126で使用を開始したリカバリ中差分ビットマップBM30を区間差分ビットマップBM20として使用する(S133)。そして、記憶制御装置10は、S132で無効化または破棄されたジャーナルデータJDに対応付けられている区間差分ビットマップBM20を破棄する(S134)。なお、S134等では、便宜上、「破棄する」ものとして述べるが、区間差分ビットマップBM20の記憶内容を消去する行為も含む。つまり、S134では、不要となった各区間差分ビットマップBM20を破棄し、再利用に備える。記憶制御装置10は、無効化または破棄されたジャーナルデータJDの範囲内に含まれるCPMを破棄する(S135)。
記憶制御装置10は、ジャーナルデータJDの格上げ処理を再開し(S136)、通常運用状態へ移行する(S137)。
図22は、ジャーナルボリューム230Jの使用率を管理する処理を示すフローチャートである。記憶制御装置10は、ジャーナルボリューム230Jの使用率UJを取得し(S140)、使用率UJが連続格上げ処理の開始閾値Th1に達したか否かを判定する(S141)。使用率UJが開始閾値Th1に達した場合(S141:YES)、記憶制御装置10は、上述の連続格上げ処理を実行する(S142)。
記憶制御装置10は、使用率UJが流入制限処理の開始閾値Th2に達したか否かを判定する(S143)。使用率UJが流入制限処理の開始閾値Th2に達した場合(S143:YES)、流入制限処理の実行についてユーザまたはアプリケーションプログラムの許可を得られているか否かが判定される(S144)。流入制限処理を行うと、アプリケーションプログラムの処理時間が長くなる。従って、ユーザまたはアプリケーションプログラムによる事前の許可を得てから流入制限処理を開始するのが好ましい。
流入制限処理の開始について許可を得た場合(S144:YES)、記憶制御装置10は、ホスト20から正ボリューム230Pに書き込まれるライトデータの量を制限し、ジャーナルデータJDの生成量を抑制する(S145)。正ボリューム230Pに流入するライトデータの量を制限する方法としては、例えば、ホスト20から発行されたライト要求に対する応答を遅延させる方法が挙げられる。
記憶制御装置10は、使用率UJが連続格上げ処理を停止させるための閾値Th3に達したか否かを判定する(S146)。使用率UJが停止閾値Th3に達したと判定された場合(S146:YES)、記憶制御装置10は、連続格上げ処理を停止し(S147)、S140に戻る。
使用率UJが停止閾値Th3に達していないと判定された場合(S146:NO)、記憶制御装置10は、使用率UJが100%に達したか否かを判定する(S148)。使用率UJが100%に達していない場合(S148:NO)、S140に戻る。使用率UJが100%に達した場合(S148:YES)、記憶制御装置10は、CDPを停止させる(S149)。
図23は、CDP機能を設定するための画面例を示す説明図である。CDP設定画面は、例えば、ホスト20や管理サーバ30の端末画面に表示させることができる。CDP設定画面には、例えば、CDPグループ指定部G11と、正ボリューム指定部G12と、基底ボリュームG13と、ジャーナルボリューム指定部G14と、目標保護期間指定部G15と、流入制限指定部G16と、確定ボタンB11及び取消ボタンB12とを含めることができる。
なお、図23に示す要素以外に、例えば、ジャーナルボリューム230Jを登録するための指定部、ジャーナルボリューム230Jを削除するための指定部、CDPグループ単位で一括してテンポラリリストアまたはコンプリートリストアを実行させるための指定部、ボリューム単位でテンポラリリストアまたはコンプリートリストアを実行させるための指定部、テンポラリリストアを取り消すための指定部、テンポラリリストアを介さずに直接コンプリートリストアを実行させるための指定部、CPMを設定するための指定部等を設けることができる。なお、ここでは、GUI(Graphical User Interface)を用いる場合を説明するが、コマンドラインによって各種指示を与えることもできる。
ジャーナルボリューム登録操作の例を説明する。ユーザは、CDPグループを指定し、指定したボリュームをジャーナルボリュームとして追加登録することができる。
ジャーナルボリューム削除操作の例を説明する。ユーザがCDPグループを指定すると、そのCDPグループ内のジャーナルボリュームの一覧が表示される。ユーザによって指定されたジャーナルボリュームは、そのCDPグループから外される。
CDPグループ内の複数の正ボリュームによってジャーナルボリュームを共用している場合、ジャーナルデータの破棄は、CDPグループ単位でしか行うことができない。従って、「目標保護期間」は、CDPグループの属性となる。
CDPグループ指定部G11は、CDPグループを指定するためのものである。正ボリューム指定部G12は、CDPによる保護対象となる正ボリューム230Pを指定するためのものである。基底ボリューム指定部G13は、基底ボリューム230Bを指定するためのものである。ジャーナルボリューム指定部G14は、G12で指定された正ボリューム230Pに関するジャーナルデータJDを格納するための、ジャーナルボリューム230Jを指定するためのものである。目標保護期間指定部G15は、目標保護期間TPTの値を指定するためのものである。流入制限指定部G16は、流入制限処理の可否、流入制限を許可する場合の開始閾値Th2の値をそれぞれ指定するためのものである。
なお、既存のCDPグループを指定して、CDPによる保護対象となる正ボリューム230Pを新たに設定する場合は、ジャーナルボリューム230Jを改めて指定する必要はない。CDPグループを設定するときに、ジャーナルボリューム230Jを指定済だからである。
図24は、リカバリ設定を行うための画面例を示す説明図である。このリカバリ設定画面には、CDP設定画面と同様に、例えば、ホスト20や管理サーバ30の端末画面に表示される。
リカバリ設定画面には、例えば、CDPグループ指定部G21と、正ボリューム指定部G22と、復元可能点表示部G23と、復元点指定部G24と、ボタンB21〜B23とを含めることができる。なお、これら以外に、グループ単位でリカバリするか、ボリューム単位でリカバリするか等を指定するための指定部を備えることもできる。
CDPグループ指定部G21は、リカバリ対象の正ボリューム230Pが含まれているCDPグループを指定するものである。正ボリューム指定部G22は、リカバリ対象の正ボリューム230Pを指定するためのものである。復元可能点表示部G23は、復元可能な期間やCPMを表示させるものである。この表示部G23には、ジャーナルデータJDで保護されている一つまたは複数の期間やCPMが表示される。復元点指定部G24は、リカバリ可能な期間またはCPMから選択される復元点を指定するものである。なお、ボタンB21は、テンポラリリストアの実行を指示するものである。ボタンB22は、コンプリートリストアの実行を指示するものである。
本実施例は、上述のように構成されるため、以下の効果を奏する。本実施例では、通常運用時には、目標保護期間TPTを経過したジャーナルデータJDを基底ボリューム230Bに書き込むことにより、基底ボリューム230Bの記憶内容を正ボリューム230Pから目標保護期間だけ遅れた記憶内容として、遷移させることができる。
従って、本実施例では、リストア可能な期間の始点である基底点を、現在時刻から一定時間だけ遅らせて追従させることができる。そして、基底ボリューム230Bに書き込まれたジャーナルデータJDは破棄されるため、ジャーナルボリューム230JがジャーナルデータJDで満杯になる可能性を低減することができる。
本実施例では、予め設定される複数の区間毎にそれぞれ別々の差分ビットマップBM20を割り当てて、正ボリューム230Pと基底ボリューム230Bとの間の差分を各区間毎に管理する。従って、差分ビットマップBM20に対応付けられる全てのジャーナルデータJDが基底ボリューム230Bに書き込まれた後で、その差分ビットマップBM20の記憶内容を消去して、再利用できる。これにより、不要な差分ビットマップBM20が記憶制御装置10のメモリ領域に記憶されたままになるのを防止し、記憶制御装置10のメモリ領域を効率的に使用できる。
さらに、本実施例では、各区間差分ビットマップBM20をマージして差分コピー用の差分ビットマップBM10を生成し、リストア時には、基底ボリューム230Bから正ボリューム230Pに差分コピーする構成である。これにより、基底ボリューム230Bから正ボリューム230Pにコピーするデータ量を少なくすることができ、リカバリ時間を短縮することができる。
本実施例では、ユーザは、複数回のリカバリを実行させることができるため、使い勝手が向上する。さらに、本実施例では、リカバリが複数回実施された場合でも、後日利用可能なジャーナルデータJDを破棄せずに残しておくため、ユーザの選択可能な復元点の範囲を広げることができ、より一層使い勝手が向上する。
1…記憶制御装置、2…ホスト、3…正ボリューム(保護対象ボリューム)、4…基底ボリューム、5…ジャーナルボリューム、5A…ジャーナルデータ、6,6A…区間差分ビットマップ、6B…差分コピー用の差分ビットマップ、10…記憶制御装置、20…ホスト、21…管理部、30…管理サーバ、31…管理部、40…外部記憶制御装置、41…コントローラ、42…HDU、100…コントローラ、110…チャネルアダプタ(CHA)、111…通信ポート、120…ディスクアダプタ(DKA)、130…キャッシュメモリ、140…共有メモリ、150…接続制御部、160…サービスプロセッサ(SVP)、200…HDU、210…ディスクドライブ、220…パリティグループ、230…ボリューム、230B…基底ボリューム、230J…ジャーナルボリューム、230P…正ボリューム、BM10…差分コピー用差分ビットマップ、BM20…区間差分ビットマップ、BM30…リカバリ中差分ビットマップ、BM40…リカバリ中差分ビットマップ、JD…ジャーナルデータ、PT…保護期間、TPT…目標保護期間