本発明は、記憶制御装置及び記憶制御装置の制御方法に関する。
日々増大する多量のデータを効率的に管理するために、例えば、企業や医療機関、政府機関、教育機関等の各種組織では、記憶制御装置を使用する。記憶制御装置には、例えば、売上げデータ、顧客データ、研究データ等のような重要なデータも記憶されるため、人為的ミス等によるデータの消失に備える必要がある。データ消失に対する防衛策として、ボリュームのバックアップを定期的に作成する方法が挙げられる。
しかし、バックアップ作成及びリストアにはそれぞれ長い時間がかかる。また、バックアップが作成された時点にしかデータを戻すことができないため、使い勝手が悪い。そこで、他の防衛策として、ボリュームのスナップショットを作成し、かつ、ボリュームへの更新が発生するたびにジャーナルデータを取得し、このジャーナルデータを管理するようにした第1従来技術も知られている(特許文献1)。しかし、この従来技術でも、スナップショットを作成する必要があり、使い勝手の点で改善の余地がある。
そこで、ジャーナルデータを用いて任意時点にリストアさせることができるようにした第2従来技術も知られている(特許文献2)。
特開2005−18738号公報
米国特許出願公開第2005/0028022号明細書
前記第2従来技術では、保護対象のデータボリュームと、保護対象のデータボリュームのある時点での記憶内容がコピーされたセカンダリボリュームと、ジャーナルデータを記憶するジャーナルボリュームとを用意している。リストア時には、第2従来技術は、セカンダリボリュームからデータボリュームにデータをコピーさせ、データボリュームの記憶内容をセカンダリボリュームの記憶内容に一致させる。次に、第2従来技術では、指定された時点までのジャーナルデータをジャーナルボリュームから読み出して、データボリュームに書き込む。従って、第2従来技術によれば、更新された単位で(ジャーナルデータ単位で)、任意の時点にリストアでき、ユーザの使い勝手は改善される。
しかし、ジャーナルボリュームの容量が一定の場合、いずれジャーナルボリュームはジャーナルデータで満杯になるため、リストア可能な期間を長くするのは難しい。ジャーナルボリュームの容量を拡張可能な構成とした場合、記憶制御装置の有する記憶容量の多くがジャーナルデータの管理に消費されてしまう可能性がある。
また、第2従来技術では、セカンダリボリュームからデータボリュームにコピーするデータの量が大きくなりやすく、リストア完了までの時間が長い。
本発明は、上記の問題点に鑑みてなされたもので、その目的は、保護対象ボリュームのデータを効率良く保護することができる記憶制御装置及び記憶制御装置の制御方法を提供することにある。本発明の他の目的は、より高速なリストアを可能とする記憶制御装置及び記憶制御装置の制御方法を提供することにある。本発明の更なる目的は、後述する実施形態の記載から明らかになるであろう。
上記課題を解決すべく、本発明に従う、外部装置により利用されるデータを記憶するための記憶制御装置は、最新点における記憶内容を保持する第1記憶領域と、最新点よりも前の基底点における記憶内容を保持する第2記憶領域と、外部装置からの更新要求によって発生する第1記憶領域の更新履歴を管理する更新履歴管理部と、基底点から最新点までの期間内に含まれる復元点における、第1記憶領域の記憶内容を復元させる制御部とを備え、制御部は、(1)復元点から最新点までの第1期間内に更新された第1更新領域と、基底点から復元点までの第2期間内に更新された第2更新領域と、第1更新領域及び第2更新領域の両方に共通する第3更新領域とをそれぞれ検出し、(2)第1更新領域については第2記憶領域の記憶内容を用い、第2更新領域については第1記憶領域の記憶内容を用い、第3記憶領域については第2記憶領域の記憶内容及び第2期間内の更新履歴を用い、第1期間及び第2期間の両方で更新されなかった未更新領域については第1記憶領域または第2記憶領域のいずれか一方の記憶内容を用いることにより、(4)復元点における第1記憶領域の記憶内容を復元させる。
制御部は、復元点における第1記憶領域の記憶内容を、第1記憶領域上に復元させる構成でもよい。
制御部は、復元点における第1記憶領域の記憶内容を、第1記憶領域及び第2記憶領域とは別の第3記憶領域上に復元させる構成でもよい。
制御部は、復元点における第1記憶領域の記憶内容を、仮想的に生成される仮想記憶領域上に復元させる構成でもよい。
本発明の実施形態では、制御部は、(4−1)第1記憶領域に対応する仮想記憶領域を生成し、(4−2)この仮想記憶領域内の第1更新領域に対応する領域を第2記憶領域内で第1更新領域に対応する領域に対応付け、(4−3)仮想的記憶領域内の第2更新領域に対応する領域を第1記憶領域内で第2更新領域に対応する領域に対応付け、(4−4)仮想記憶領域内の未更新領域に対応する領域を第1記憶領域内または第2記憶領域内のいずれか一方で未更新領域に対応する領域に対応付け、(4−5)仮想記憶領域内の第3更新領域に対応する領域を、第1記憶領域または第3記憶領域のいずれか一方で第3更新領域に対応する所定領域に対応付け、かつ、第2記憶領域内で第3更新領域に対応する領域に記憶されている記憶内容を所定領域にコピーした後、第3更新領域に関する更新履歴を所定の順序で前記所定領域に上書きすることにより、復元点における第1記憶領域の記憶内容を復元させる。
制御部は、第3更新領域に関する更新履歴を、復元点に最も近い時点から順番に過去に遡るようにして、所定領域に適用する構成でもよい。この場合、制御部は、復元点に近い時点の更新履歴が適用された場所には、その更新履歴よりも古い時点の更新履歴が存在する場合でも上書きしない。既に更新履歴が適用された領域に、それよりも古い更新履歴を上書きしてしまうと、復元点より古いデータになってしまうためである。
制御部は、復元点を指定されるよりも前に、更新履歴管理部により管理されている更新履歴を用いて、第1〜第3更新領域を検出するための情報を予め生成する構成であってもよい。
制御部は、基底点から最新点までの期間内に外部装置から発行される更新要求に基づいて、第1記憶領域の記憶内容と第2記憶領域の記憶内容との差分の位置を、所定の区間毎にそれぞれ予め管理しており、これら各区間毎の差分の位置に基づいて、第1〜第3更新領域を検出する構成でもよい。
制御部は、第1記憶領域と第2記憶領域との間の記憶内容の差分が生じた位置を、複数の第1差分ビットマップを用いて所定の区間毎にそれぞれ管理しており、復元点以降の複数の第1差分ビットマップの論理和から第1更新領域を検出し、復元点以前の複数の第1差分ビットマップの論理和から第2更新領域を検出し、第1更新領域と第2更新領域との重複部分から第3更新領域を検出する、構成でもよい。
本発明の実施形態では、第1記憶領域及び第2記憶領域は、それぞれ論理ボリュームとして構成されており、更新履歴管理部は、外部装置から発行される更新要求に基づいてジャーナルデータを生成し、このジャーナルデータを更新履歴として保存する。
本発明の実施形態では、制御部は、第1記憶領域と仮想的に生成される仮想記憶領域とを対応付けるためのテーブルを生成し、テーブルは、仮想記憶領域内の第1更新領域に対応する領域を第2記憶領域内で第1更新領域に対応する領域に、仮想的記憶領域内の第2更新領域に対応する領域を第1記憶領域内で第1更新領域に対応する領域に、仮想記憶領域内の未更新領域に対応する領域を第1記憶領域内または第2記憶領域内のいずれか一方で未更新領域に対応する領域に、それぞれ対応付けて構成されており、かつ、仮想記憶領域内の第3更新領域に対応する領域は、所定の処理を行う領域として設定されており、所定の処理は、第2記憶領域内で第3更新領域に対応する領域に記憶されている記憶内容を所定領域にコピーした後、第3更新領域に関する更新履歴を所定の順序で上書きする処理である。
本発明の他の観点に従う、外部装置により利用されるデータを記憶するための記憶制御装置は、最新点における記憶内容を保持する第1ボリュームと、第1ボリュームの基底点における記憶内容を保持する第2ボリュームと、第1ボリュームを対象とする更新要求に基づいて生成されるジャーナルデータを記憶する第3ボリュームと、第1ボリュームと第2ボリュームとの間の記憶内容の差分が生じた位置を、予め定められる複数の所定区間毎にそれぞれ管理する複数の第1差分ビットマップと、第1ボリューム、第2ボリューム、第3ボリューム及び各第1差分ビットマップを制御するための制御部であって、(1)第1ボリュームの所定時点における記憶内容を第2ボリュームに記憶させるためのコピー機能と、(2)外部装置からの更新要求に基づいてジャーナルデータを生成し、生成したジャーナルデータを第3ボリュームに記憶させるジャーナル生成機能と、(3)所定時点以降に外部装置から発行される更新要求によって第1ボリュームと第2ボリュームとの間に生じる差分の位置を、所定区間毎に選択される一つの第1差分ビットマップに記憶させる差分管理機能と、(4)第3ボリュームに記憶される各ジャーナルデータのうち、予め指定される目標保護期間を経過した所定のジャーナルデータを第2ボリュームに反映させる反映機能と、(5)第2ボリュームに反映された所定のジャーナルデータを破棄するジャーナル破棄機能と、(6)各第1差分ビットマップのうち、対応する全てのジャーナルデータが破棄された所定の第1差分ビットマップの記憶内容を消去して、新たな第1差分ビットマップとして再利用する再利用機能と、(7)復元点を明示してリストアの実行が指示された場合は、(7−1)復元点以降の複数の第1差分ビットマップの論理和から、復元点から最新点までの第1期間内に更新された第1更新領域を検出し、(7−2)復元点以前の複数の第1差分ビットマップの論理和から、基底点から復元点までの第2期間内に更新された第2更新領域を検出し、(7−3)第1更新領域及び第2更新領域の両方に共通する第3更新領域を検出し、(7−4)第1更新領域については第2ボリュームの記憶内容を用い、第2更新領域については第1ボリュームの記憶内容を用い、第3更新領域については、第2ボリューム内で第3更新領域に対応する領域に記憶されている記憶内容を所定領域にコピーした後、第3更新領域に関するジャーナルデータを所定の順序で所定呂域に上書きし、第1期間及び第2期間の両方で更新されなかった未更新領域については第1記憶領域または第2記憶領域のいずれか一方の記憶内容を用いることにより、復元点における前記第1ボリュームの記憶内容を得るための、リストア機能と、をそれぞれ実行する制御部と、を備える。
本発明のさらに別の観点に従う、外部装置により利用されるデータを記憶するための記憶制御装置を制御するための方法は、最新点における記憶内容を第1記憶領域に保持させ、最新点よりも前の基底点における記憶内容を第2記憶領域に保持させ、外部装置からの更新要求によって発生する第1記憶領域の更新履歴を更新履歴管理部により管理させ、復元点を明示してリストアが指示された場合には、復元点から最新点までの第1期間内に更新された第1更新領域と、基底点から復元点までの第2期間内に更新された第2更新領域と、第1更新領域及び第2更新領域の両方に共通する第3更新領域とをそれぞれ検出し、第1更新領域については第2記憶領域の記憶内容を用い、第2更新領域については第1記憶領域の記憶内容を用い、第3更新領域については第2記憶領域の記憶内容及び第2期間内の更新履歴を用い、第1期間及び第2期間の両方で更新されなかった未更新領域については第1記憶領域または第2記憶領域のいずれか一方の記憶内容を用いることにより、復元点における第1記憶領域の記憶内容を復元させる。
本発明の各部、各機能、各ステップの少なくとも一部は、コンピュータプログラムにより実現可能な場合がある。このようなコンピュータプログラムは、例えば、記憶デバイスに記憶されて、あるいは、通信ネットワークを介して、流通される。
図1は、本発明の実施形態の概要を示す説明図である。図1には、本実施形態に係る記憶制御装置1を含む情報処理システムの概要が示されている。図1(a)は、通常運用時の概略動作を示し、図1(b)は、リストア時の概略動作を示す。
まず図1(a)を参照する。この情報処理システムは、例えば、記憶制御装置1と、「外部装置」または「上位装置」としてのホスト2とを備える。後述の実施例から明らかなように、情報処理システムは、管理サーバ30や別の記憶制御装置40をさらに備えることもできる。
記憶制御装置1は、例えば、ハードディスクドライブやフラッシュメモリデバイス等のような物理的記憶デバイスを複数備えている。この物理的記憶デバイスの有する物理的記憶領域を仮想化することにより、論理的記憶デバイスが作成される。この論理的記憶デバイスを、以下の説明では、論理ボリューム、またはボリュームと呼ぶ。
記憶制御装置1は、例えば、保護対象ボリューム(図中「PVOL」)3と、基底ボリューム(図中「BVOL」)4と、ジャーナルボリューム5と、区間差分ビットマップ6とを備えることができる。
保護対象ボリューム3は、その記憶内容がジャーナルデータによって連続的に保護されるボリュームである。保護対象ボリューム3に記憶されるデータを、連続的に指定可能な任意の復元点によって復元させる技術を、本明細書では、CDP(Continuous Data Protection)と呼ぶ。以下、説明の便宜上、保護対象ボリューム3を、正ボリューム3と呼ぶ場合がある。
正ボリューム3は、ホスト2に接続されており、ホスト2から書き込まれるデータを記憶する。ホスト2は、正ボリューム3にデータを書き込んだり、正ボリューム3からデータを読み出すことができる。基底ボリューム4は、ある所定時点(基底時点)において正ボリュームに記憶されていたデータを記憶する。後述のように、基底ボリューム4には、目標保護期間を経過したジャーナルデータが順番に書き込まれていく。従って、基底ボリューム4は、正ボリューム3の最新の記憶内容から所定時間(目標保護期間)だけ前の記憶内容を記憶する。基底ボリューム4が示している正ボリューム3の過去の時点を基底点と呼ぶ。基底点は、実時間の経過に応じて変化していく。基底点の変化を、基底点シフトと呼ぶ場合がある。
なお、基底ボリューム4と正ボリューム3の記憶内容の時間差は常に一定というわけではない。基底ボリューム4と正ボリューム3の記憶内容の時間差に変化を生じる場合もある。
ジャーナルボリューム5は、ジャーナルデータ5Aを保存するボリュームである。ジャーナルデータ5Aは、ホスト2によって正ボリューム3が更新された履歴を管理するためのデータである。従って、ジャーナルデータ5Aは、更新履歴管理データと呼ぶことができ、ジャーナルボリューム5は、更新履歴管理用ボリュームと呼ぶことができる。
区間差分ビットマップ6は、予め設定される所定の区間毎にそれぞれ用意される差分ビットマップである。区間差分ビットマップ6は、例えば、正ボリューム3の各スロット単位のような所定単位で、更新の有無を管理する。スロットとは、例えば、論理トラックを意味する。区間は、時間やジャーナルボリューム5の使用率等に応じて定めることができる。更新された位置にはビット1が設定され、更新されていない位置にはビット0が設定される。差分の発生位置を示すビットを差分ビットと呼ぶ。
一つの例では、所定時間(図1中では「1時間」)毎に、それぞれ別々の差分ビットマップ6Aを使用することができる。即ち、9時−10時では、差分ビットマップ6A(9:00-10:00)を使用して差分を管理し、これに続く10時−11時では、別の差分ビットマップ6A(10:00-11:00)を使用して差分を管理することができる。
別の一つの例では、差分ビットマップ6Aの切替後に蓄積されたジャーナルデータ量を別途管理しておき、その管理されるジャーナルデータ量がジャーナルボリューム5の全容量の所定割合に達した場合に、別の差分ビットマップ6Aに切り替える。
目標保護期間とは、正ボリューム3の記憶内容を過去に戻すことが可能な期間を意味し、例えば、「3時間」のように予め設定される。正ボリューム3の記憶内容が実際に保護される時間と目標保護期間とは基本的に一致するが、後述の実施例のように、目標保護期間と実際の保護期間とか不一致の場合もある。
目標保護期間を経過したジャーナルデータ5Aは、順番に基底ボリューム4に書き込まれていく。これにより、基底ボリューム4の記憶内容は、正ボリューム3の記憶内容から目標保護期間だけ遅れて追従することになる。
通常運用時の動作を説明する。まず最初に、ユーザは、保護対象となる正ボリューム3及び目標保護期間を指定する。記憶制御装置1は、正ボリューム3に記憶されている全データを基底ボリューム4にコピーする。図1(a)に示す例では、9時の時点におけるデータが基底ボリューム4にコピーされたものとする。即ち、図1(a)では、CDP開始時刻が9時の場合を示す。
ホスト2は、正ボリューム3にアクセスし、データを読み書きする。ホスト2から送信されたライトデータが正ボリューム3に書き込まれた場合(S1)、つまり、正ボリューム3を対象とするライト要求がホスト2から発行された場合、記憶制御装置1は、そのライト要求に基づいてジャーナルデータ5Aを生成する。生成されたジャーナルデータ5Aは、ジャーナルボリューム5に保存される(S2)。
なお、正ボリューム3のある時点の記憶内容を基底ボリューム4にコピーさせている最中に、ホスト2が正ボリューム3にデータを書き込む場合もある。正ボリューム3から基底ボリューム4へのコピーが完了していない未コピー領域について、ホスト2が新たなデータの書込みを要求した場合を説明する。
この場合、一つの例として、記憶制御装置1は、未コピー領域に記憶されているデータ(旧データ)を正ボリューム3から基底ボリューム4にコピーさせた後で、ホスト2からの新たなデータを正ボリューム3に書き込む。
別の一つの例として、正ボリューム3から基底ボリューム4へのコピー中に発行された新たなライト要求のライトデータを、「新データ」のような属性をつけてキャッシュメモリ上で管理し、未コピー領域に記憶されている旧データと別に管理する方法もある。この例では、正ボリューム3から基底ボリューム4への旧データのコピーと、ホスト2からのライト要求の処理(新データの上書き)とを非同期で行うことができる。なお、さらに別の方法もある。
ホスト2によって正ボリューム3が更新された位置は、ライト要求の発行時刻が含まれる期間(区間)を担当する差分ビットマップ6Aに記憶される(S3)。更新位置は、例えば、スロット単位やブロック単位等のように予め設定される所定サイズ単位で管理することができる。
時間が経過して、最初の差分ビットマップ6Aの担当期間を過ぎた場合、記憶制御装置1は、別の新たな差分ビットマップ6Aに切り替えて、ホスト2によって正ボリューム3が更新された位置を管理する。
CDP開始時刻から目標保護期間を経過すると、目標保護期間を経過したジャーナルデータ5Aは、基底ボリューム4に順番に書き込まれる(S4)。つまり、現在時刻が12時を過ぎた場合、現在時刻(12時)よりも目標保護期間(3時間)だけ前に生成されたジャーナルデータは、生成された順番で基底ボリューム4に書き込まれる。基底ボリューム4に書き込まれたジャーナルデータ5Aは、破棄される。
本明細書では、ジャーナルデータ5Aを基底ボリューム4または正ボリューム3に書き込んで、基底ボリューム4または正ボリューム3の記憶内容を更新させる動作を、「格上げ」または「反映」と呼ぶ場合がある。
図1ではさらに時間が経過した様子が示されている。現在時刻が「13:05」になった場合、「9:55」から「10:05」までに作成されたジャーナルデータ5Aは、目標保護期間を経過したことになるので、基底ボリューム4に書き込まれる。これにより、基底ボリューム4の記憶内容は、現在時刻から3時間前の「10:05」における正ボリューム3の記憶内容と一致する。このように、通常運用時には、基底ボリューム4の記憶内容は、目標保護期間だけ遅れて、正ボリューム3の記憶内容に追従する。
各区間の差分ビットマップ6Aのうち、自身の管理下にあるジャーナルデータ5Aが全て基底ボリューム4に書き込まれた区間差分ビットマップ6Aは、その記憶内容が消去されて再利用される。例えば、現在時刻が「13:05」の場合、基底点は3時間前の「10:05」となっている。「9:00−10:00」の区間を担当する差分ビットマップ6A(9:00-10:00)に関連する各ジャーナルデータ5Aは、既に基底ボリューム4に書き込まれている。
従って、この差分ビットマップ6A(9:00-10:00)は、既に用済みであり、保存しておく必要がない。そこで、差分ビットマップ6A(9:00-10:00)の記憶内容は消去され、別の新たな区間の差分を管理するために再利用される。
図1(b)を参照して、リストア時の動作を説明する。例えば、ホスト2上のアプリケーションプログラムで発生した障害やユーザの誤操作等により、正ボリューム3の記憶内容に誤りを生じる可能性がある。
正ボリューム3の記憶内容に誤りを生じた場合、ユーザは、正ボリューム3の記憶内容を所望の時点まで復元させるための指示を発行する。ユーザは、保護期間内の任意の時刻を復元点(リストア点)として選択することができる。
リストア処理の様子を説明する前に、正ボリューム3の記憶内容の変化を説明する。基底点(図中、BP)における正ボリューム3の記憶内容を、図1(b)中に3(1)として示す。この基底点BPにおける正ボリューム3(1)の記憶内容は、基底ボリューム4にコピーされている。ここでは、説明の便宜上、正ボリューム3の全記憶領域が4つの領域に分割されている場合を例に挙げる。図1(b)に示す例では、4つの領域のそれぞれが更新単位となっている。各領域を特定できるように、図1(b)では、X軸座標及びY軸座標をそれぞれ示してある。正ボリューム3には、時間の経過に応じて(1)〜(5)の符号を添える。
基底点BPから時間が経過したある時刻の正ボリューム3(2)に着目する。上位装置2は、正ボリューム3(2)の左上の領域(1,1)に新データ「A」を書き込む。これにより、正ボリューム3(2)の左上の領域(1,1)には、旧データ「a」に代えて新データ「A」が記憶される。
さらに時間が経過した別のある時刻の正ボリューム3(3)に着目する。上位装置2は、正ボリューム3(3)の右下の領域(2,2)に新データ「D」を書き込む。これにより、正ボリューム3(3)の右下の領域(2,2)には、旧データ「d」に代えて新データ「D」が記憶される。
以下同様に、上位装置2は、正ボリューム3(4)の右上の領域(2,1)に新データ「B」を書き込む。これにより、正ボリューム3(4)の右上の領域(2,1)には、旧データ「b」に代えて新データ「B」が記憶される。
最新点(LP)において、上位装置2は、正ボリューム3(5)の右下の領域(2,2)に新データ「E」を書き込む。これにより、右下の領域(2,2)には、旧データ「D」に代えて新データ「E」が記憶される。
ユーザまたはアプリケーションプログラムは、基底点BPと最新点LPとの間の任意の時刻を指定してリストアを要求することができる。ここでは、説明の便宜上、データ「D」が正ボリューム3(3)に書き込まれた時刻とデータ「B」が正ボリューム3(4)に書き込まれた時刻との間で、復元点(図中、RP)が指定されたものとする。
記憶制御装置1は、復元点RPから最新点LPまでの第1期間において、正ボリューム3が更新された位置をそれぞれ管理する各区間差分ビットマップ6Aの論理和を求めることにより、差分ビットマップ6Bを得る。同様に、記憶制御装置1は、基底点BPから復元点RPまでの第2期間において、正ボリューム3が更新された位置をそれぞれ管理する各区間差分ビットマップ6Aの論理和を求めることにより、別の差分ビットマップ6Cを得る。
差分ビットマップ6Bは、復元点RPから最新点LPまでの第1期間で生じた全ての更新位置を示している。従って、差分ビットマップ6Bを、例えば、復元点以降の差分ビットマップと呼ぶことができる。別の差分ビットマップ6Cは、基底点BPから復元点RPまでの第2期間で生じた全ての更新位置を示している。従って、差分ビットマップ6Cは、例えば、復元点以前の差分ビットマップと呼ぶことができる。
図中、各差分ビットマップ6B,6Cにおいて、更新された領域には斜線を付し、更新されていない領域を空白で示す。復元点以降の差分ビットマップ6Bで更新されている領域(斜線部分の領域)は、第1更新領域に該当する。復元点以前の差分ビットマップ6Cで更新されている領域は、第2更新領域に該当する。各差分ビットマップ6B,6Cの両方でそれぞれ更新されている領域(2,2)は、第3更新領域に該当する。また、各差分ビットマップ6B,6Cのいずれにおいても更新されていない領域(1,2)は、未更新領域に該当する。
二つの差分ビットマップ6B,6Cに基づいて、正ボリューム3の全記憶領域を以下の4種類のグループに分けて考えることができる。各グループの性質に応じて正ボリューム3、基底ボリューム4及びジャーナルボリューム5を使用することにより、効率的なリストア処理を実行することができる。以下の説明では、各グループ7B,7P,7C等を複数の集合記号で表現する場合がある。また、理解のために、各グループに属する領域を、図1中に示す領域の座標を用いて示すことがある。
第1グループ7Bは、復元点以降の差分ビットマップ6Bによって更新の発生が検出された領域である。第1グループ7Bは、第1更新領域から構成される。第1グループ7Bに属する領域では、基本的に、基底ボリューム4のデータを利用可能である。特に、第1グループ7Bにのみ属する領域(7B−7P,(¬7P)∧7B)では、基底ボリューム4に記憶されているデータをそのまま使用できる。即ち、図1中で第1グループ7Bにのみ属する領域(2,1)は、復元点以降でのみ更新されており、復元点以前で更新されていない。従って、第1グループ7Bにのみ属する領域(2,1)では、基底ボリューム4のデータ「b」と復元点におけるデータ「b」とは一致する。
第2グループ7Pは、復元点以前の差分ビットマップ6Cによって更新の発生が検出された領域である。第2グループ7Pは、第2更新領域から構成される。第2グループ7Pに属する領域では、基本的に、正ボリューム3のデータを利用可能である。特に、第2グループ7Pにのみ属する領域(7P−7B,7P∧(¬7B))では、正ボリューム3に記憶されているデータをそのまま使用できる。即ち、図1中で第2グループ7Pにのみ属する領域(1,1)は、復元点以前でのみ更新されており、復元点以降では更新されていない。従って、第2グループ7Pにのみ属する領域(1,1)では、正ボリューム3のデータ「A」と復元点におけるデータ「A」とは一致する。
第3グループ7Jは、第1グループ7B及び第2グループ7Pの両方にまたがって属する領域である。第3グループ7Jは、第3更新領域から構成される。第3更新領域7Jに属する領域(7P∧7B)では、正ボリューム3及び基底ボリューム4のいずれのデータも、そのままでは使用することはできない。図1中で第3グループ7Jに属する領域(2,2)は、復元点の前後でそれぞれ更新されているためである。従って、第3グループ7Jに属する領域(2,2)では、まず、基底ボリューム4のデータ「d」を正ボリューム3にコピーし(「E」→「d」)、次に、その領域(2,2)に関する復元点までのジャーナルデータ5Aを、領域(2,2)に順番に上書きする(「d」→「D」)。これにより、第3グループ7Jに属する領域のデータは、復元点におけるデータに一致する。
第4グループは、正ボリューム3の全記憶領域のうち、前記各グループ7B,7P,7Jのいずれにも属さない領域((7P∨7B)c,¬(7P∨7B))である。第4グループに属する領域では、復元点の前後いずれにもおいても更新されていないため、正ボリューム3または基底ボリューム4のいずれかに記憶されているデータを使用できる。図1中で第4グループに属する領域(1,2)では、正ボリューム3に記憶されているデータと基底ボリューム4に記憶されているデータと復元点におけるデータとは、いずれも「c」となり、一致している。
そこで、リストア時に記憶制御装置1は、復元点以降の差分ビットマップ6Bを用いることにより、第1グループ7Bに属する領域(2,1),(2,2)について、基底ボリューム4から正ボリューム3にデータをコピーさせる。上述の通り、第2グループ7Pに属する領域では、基本的に正ボリューム3のデータを利用できるため、基底ボリューム4から正ボリューム3にデータをコピーする必要はない。そして、記憶制御装置1は、第3グループ7Jに属する領域(2,2)について、復元点までのジャーナルデータ5Aを順番に読み出して上書きする。
なお、第4グループに属する領域(1,2)は、復元点の前後いずれにもおいても更新されていないため、正ボリューム3または基底ボリューム4のいずれのデータも、復元点のデータとして使用できる。そこで、記憶制御装置1は、復元点におけるデータとして、第4グループに属する領域について正ボリューム3のデータを使用する。これにより、記憶制御装置1は、(1)第1グループ7Bに属する領域については、基底ボリューム4から正ボリューム3にデータをコピーし、(2)第3グループ7Jに属する領域については、基底ボリューム4から正ボリューム3にデータをコピーした後で、ジャーナルデータを上書きするだけで、(3)リストアを完了させることができる。
以上の説明では、正ボリューム3の記憶内容を最新点の記憶内容から復元点の記憶内容に戻す場合を説明した。しかし、後述の実施例から明らかとなるように、種々の方法で復元点における記憶内容を復元させることができる。
例えば、図1(b)の下側に示すように、仮想的なボリューム9に復元点における記憶内容を再現することもできる。仮想ボリューム9は、参照用テーブル8を介して、正ボリューム3及び基底ボリューム4等に対応付けられている。
即ち、仮想ボリューム9内の全領域のうち、第1グループ7Bにのみ属する領域は基底ボリューム4に、第2グループ7Pにのみ属する領域は正ボリューム3に、第4グループに属する領域は正ボリューム3または基底ボリューム4のいずれかに、それぞれ対応付けられている。
ホスト2が第3グループ7Jに属する領域にアクセスした場合、記憶制御装置1は、その領域に対応する基底ボリューム4のデータを正ボリューム3にコピーした後で、その領域に関する復元点までのジャーナルデータを順番に上書きすることもできる。
ホスト2が第1グループ7Bに属する領域にアクセスした場合、記憶制御装置1は、その領域に対応する基底ボリューム4のデータを正ボリューム3にコピーする。なお、ライトアクセスの場合、記憶制御装置1は、基底ボリューム4に記憶されているデータを正ボリューム3にコピーした後で、そのライトアクセスを受け付け、新たなライトデータを格納する。
このように仮想ボリューム9を用いることにより、データコピーを行う前に、リストアの完了をホスト2に通知することができる。そして、ホスト2からアクセスされた際にデータのコピー等を行うだけでよく、リストアに要する時間を短縮できる。
本実施形態は、上述のように構成されるため、以下の効果を奏する。本実施形態では、通常運用時には、目標保護期間を経過したジャーナルデータ5Aを基底ボリューム4に書き込むことにより、基底ボリューム4の記憶内容を正ボリューム3から目標保護期間だけ遅れた記憶内容として、遷移させることができる。従って、リストア可能な期間の始点である基底点を、現在時刻から一定時間だけ遅らせて追従させることができる。基底ボリューム4に書き込まれたジャーナルデータ5Aは破棄されるため、ジャーナルボリューム5がジャーナルデータ5Aで満杯になる可能性を低減することができる。
本実施形態では、予め設定される複数の区間毎にそれぞれ別々の差分ビットマップ6Aを割り当てて、正ボリューム3と基底ボリューム4との間の差分を各区間毎に管理する構成である。従って、差分ビットマップ6Aに対応付けられる全てのジャーナルデータ5Aが基底ボリューム4に書き込まれた後で、その差分ビットマップ6Aの記憶内容を消去して(ゼロクリアして)、再利用することができる。これにより、不要な差分ビットマップ6Aが記憶制御装置1のメモリ領域に記憶されたままになるのを防止し、かつ、記憶制御装置1のメモリ領域を効率的に使用することができる。
これに対し、もしも、全区間を通じて一つの差分ビットマップを用いる場合、つまり、単一の差分ビットマップによって正ボリューム3と基底ボリューム4との間の差分を管理する場合を考える。この場合、いったんビット1に設定されると、ビット0に戻すことはできず、余計な差分ビット(ビット1に設定されているビット)が時間の経過につれて蓄積されていく。
基底ボリューム4に書き込まれたジャーナルデータ5Aに対応する差分ビットは「0」に戻しても構わないが、その後に同一の場所に別のデータが上書きされる可能性があるため、ビット1からビット0に戻すことはできない。
従って、単一の差分ビットマップを用いる場合、時間の経過につれて余分な差分ビットが蓄積されていくため、リストア時に基底ボリューム4から正ボリューム3にコピーされるデータ量が増大する。この結果、正ボリューム3の記憶内容を基底点まで戻すための時間が長くなり、リカバリに長時間を必要とする。本実施形態では、区間毎にそれぞれ別々の差分ビットマップ6Aを用いるため、不要な差分ビットが蓄積されるのを防止し、リストア時のコピー量を低減し、リカバリ時間を短縮することができる。さらに、本実施形態では、不要な差分ビットマップ6Aの記憶内容を消去して再利用できるため、記憶制御装置1のメモリ領域を効率的に使用できる。
本実施形態では、正ボリューム3と基底ボリューム4との間に生じる差分を、復元点の前後でそれぞれ把握し、正ボリューム3の各領域の性質に応じてデータのコピー等を制御する。従って、リストア時に基底ボリューム4から正ボリューム3にコピーされるデータ量及びジャーナルデータの書込み量をそれぞれ低減することができ、リストア時間を短縮することができる。
本実施形態の記憶制御装置1は、図1に示す構成に限られず、後述の実施例で明らかにされる構成を含むこともできる。また、ジャーナルデータ5Aの管理や差分ビットマップ6Aの管理は、記憶制御装置1の外部で行うこともできる。例えば、ホスト2やホスト2に接続された別のコンピュータ装置によって、ジャーナル管理及び/または差分管理を行う構成とすることもできる。以下、本発明の実施例を詳細に説明する。
図2は、本実施例による記憶制御装置10を含む情報処理システムのハードウェア構成を模式的に示す説明図である。説明の前に、図1に示す実施形態と以下に述べる実施例との対応関係を明らかにする。
「記憶制御装置」としての記憶制御装置10は図1中の記憶制御装置1に、「上位装置」としてのホスト20は図1中のホスト2に、それぞれ対応する。「管理装置」と表現可能な管理サーバ30は、図1では省略されている。
「第1記憶領域」または「第1ボリューム」としての正ボリューム230P(図4参照)は、図1中の正ボリューム3に対応する。「第2記憶領域」または「第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に対応する。
なお、後述のテンポラリリストアは「第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とジャーナルデータJDとを一緒に管理する場合でも、CPMに設定されているジャーナルシーケンス番号をメモリに記憶しておくことにより、速やかにCPMを検索することができる。なお、設定されたCPMを削除することもできる。例えば、CPMを設定可能な数に上限がある場合、指定されたCPMを削除する。
本実施例では、一つまたは複数のボリューム230PをCDP対象として保護することができる。つまり、一つのボリューム230Pだけを単独で保護することもできるし、あるいは、複数のボリューム230Pをグループ化し、グループ全体として保護することもできる。例えば、互いに関連するデータを記憶する複数のボリューム230Pをグループ化し、CDPによる保護動作を同期させることができる。
基底ボリューム230Bは、正ボリューム230Pに一対一で対応付けられる。これに対し、一つのジャーナルボリューム230Jは、複数の正ボリューム230Pにそれぞれ対応付けることができる。
記憶制御装置10は、複数種類の差分ビットマップBM10〜BM30を備える。差分コピー用の差分ビットマップBM10は、リストア時に、基底ボリューム230Bから正ボリューム230Pにデータを差分コピーする場合に使用される。このBM10は、リストアコピー用差分ビットマップと呼ぶこともできる。なお、差分コピー用のBM10は、正ボリューム230Pから基底ボリューム230Bに差分データをコピーする場合にも使用することができる。さらに、正ボリューム230Pから基底ボリューム230Bにデータをコピーする際に使用する形成コピー用差分ビットマップと、基底ボリューム230Bから正ボリューム230Pにデータをコピーする際に使用するリストアコピー用差分ビットマップとを別々に用意することもできる。
区間差分ビットマップBM20は、予め設定される各区間毎に、正ボリューム230Pと基底ボリューム230Bとの間に生じる差分の位置をそれぞれ管理する。区間差分ビットマップBM20が使用されていた時間帯(例えば、ジャーナルシーケンス番号の範囲)を、その区間差分ビットマップBM20の属性として管理する。リカバリ中に使用される差分ビットマップBM30は、リカバリ中に発生する差分を管理するために使用される。リカバリ中であっても、ホスト20はライト要求を発行する場合があり、このライト要求によって生じる正ボリューム230Pと基底ボリューム230Bとの間の差分は、差分ビットマップBM30により記憶される。この差分ビットマップBM30は、リカバリ中差分ビットマップと呼ぶこともできる。なお、CDP停止中に使用するための差分ビットマップ等を備えることもできる。
図5は、ジャーナルボリューム230Jの記憶構成を模式的に示す説明図である。ジャーナルボリューム230Jの記憶領域は、管理領域とデータ領域とに大別される。管理領域には、ジャーナルデータJDを管理するためのデータやCPMが記憶される。データ領域には、ジャーナルデータJDのデータ本体が記憶される。
CPMには、ラベルを設定することができる。ラベルとは、CPM設定時に、ユーザが指定するデータである。例えば、ユーザは、アプリケーション名やホスト時刻等を含む文字列を、ラベルとしてCPMに設けることができる。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がジャーナルボリューム230Pに蓄積されるまで、格上げ処理は停止される。格上げ処理が停止される期間中、空きビットマップ(自分の管理下にある全てのジャーナルデータが格上げ処理された差分ビットマップ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,図8に基づいて、CDPによって保護される期間の変化を説明する。図7は、CDPによる保護の開始から通常運用状態に移行するまでの保護期間の変化を示す説明図である。図7,図8において、ジャーナルデータJDの蓄積状態を斜線部で示し、削除されたジャーナルデータJDの範囲を黒く塗りつぶして示す。つまり、図中の斜線部は、ジャーナルデータJDによって回復可能な保護期間PTを示す。
図7を参照する。初期状態では、正ボリューム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に移行する。ここで、図7中では、通常運用状態の時間変化を分かり易く示すために、「通常運用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だけ前の時刻の範囲内で、任意の時刻を復元点として指定することができる。
図8は、コンプリートリストア後に保護期間が分断される様子を示す。図8の最上段に示すように、通常運用状態において何らかの障害が発生し、その障害発生がユーザまたはアプリケーションプログラムに認識されたと仮定する。
ジャーナルボリューム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について、ボリューム単位のリストア制御を行うこともできる。
正ボリューム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については、それぞれの保護期間内で最も指定された復元点に近い時点に復元させる。
図9に基づいて、リストア処理の概要を説明する。図9には、時間の経過につれて、正ボリューム230Pの記憶内容が基底点から最新点まで変化する様子が示されている。図9では、基底点BPから最新点LPまでの全期間を区間1〜区間4の4つに分割して管理している。
第1区間1は区間差分ビットマップBM20(1)によって、第2区間2は区間差分ビットマップBM20(2)によって、第3区間3は区間差分ビットマップBM20(3)によって、第4区間4は区間差分ビットマップBM20(4)によって、それぞれ正ボリューム230Pに生じた差分(更新位置)が管理される。
区間1を管理する区間差分ビットマップBM20(1)には、データ「1」の書込みに関する更新位置が記録される。区間2を管理する区間差分ビットマップBM20(2)には、データ「2」の書込みに関する更新位置が記録される。区間3を管理する区間差分ビットマップBM20(3)には、データ「3」,「4」,「5」の書込みに関する更新位置が記録される。区間4を管理する区間差分ビットマップBM20(4)には、データ「6」に関する更新位置が記録される。
復元点として、データ「3」を正ボリューム230Pに書き込んだ直後が指定された場合、記憶制御装置10は、各区間差分ビットマップBM20(3)及びBM20(4)の論理和を求めて、復元点以降の差分を示す差分ビットマップBM10を生成する。ビットマップ中の斜線部は更新のあった位置を示し、空白部は更新の無かった位置を示す。
記憶制御装置10は、差分ビットマップBM10に基づいて、復元点から最新点までの期間内に更新された領域についてのみ、基底ボリューム230Bから正ボリューム230Pにデータを差分コピーする。記憶制御装置10は、復元点の前後でそれぞれ重複された領域(1,3)を検出し、この復元点の前後で更新された領域についてのみ、基底点から復元点までのジャーナルデータを所定の順序で上書きする。差分ビットマップBM10中の空白部分、即ち、復元点から最新点までの間に更新されなかった領域については、正ボリューム230Pのデータがそのまま使用される。
即ち、復元点の前後いずれにおいても更新されなかった領域については、正ボリューム230Pのデータを使用し、復元点の前後でそれぞれ更新された領域については、基底ボリューム230Bから正ボリューム230Pにデータをコピーした後で、基底点から復元点までのジャーナルデータを正ボリューム230Pに適用する。また、復元点以降で更新されていない領域については、正ボリューム230Pのデータを使用する。復元点以前において更新されていない領域については、基底ボリューム230Bから正ボリューム230Pにデータをコピーする。
なお、以上のリストア処理は一つの例であって、後述のように種々の方法で本発明を実現することができる。
図10〜図12のフローチャートに基づいて、記憶制御装置10の動作を説明する。以下の各フローチャートは、処理の概要を示しており、実際のコンピュータプログラムとは相違する場合がある。また、いわゆる当業者であれば、フローチャート中のステップを別のステップに変更したり、削除等することができるであろう。
図10は、通常運用状態の処理を示すフローチャートである。記憶制御装置10は、ホスト20からライトデータを受領すると(S10:YES)、ライトデータを正ボリューム230Pに書込む(S11)。
記憶制御装置10は、受信したライトデータに関するジャーナルデータJDを生成し(S12)、このジャーナルデータJDをジャーナルボリューム230Jに記憶させる(S13)。一方、ホスト20からCPMが発行された場合(S10:NO,S14:YES)、記憶制御装置10は、CPMをジャーナルボリューム230Jに記憶させる(S15)。
記憶制御装置10は、ジャーナルボリューム230Jに記憶されている各ジャーナルデータJDに設定されている時刻情報と現在時刻とを比較することにより、目標保護期間TPTを過ぎたジャーナルデータJDが存在するか否か、つまり、目標保護期間TPTから外れたジャーナルデータJDが存在するか否かを判定する(S16)。
目標保護期間TPTから外れたジャーナルデータJDが存在する場合(S16:YES)、記憶制御装置10は、目標保護期間TPTから外れたジャーナルデータJDを基底ボリューム230Bに書込み、書き込んだ後で破棄する(S17)。
図11は、区間差分ビットマップBM20を切替ながら使用する処理を示すフローチャートである。記憶制御装置10は、ホスト20からライトデータを受領したか否かを判定する(S20)。つまり、記憶制御装置10は、ホスト20からライト要求が発行されたか否かを監視している(S20)。
ライトデータを受領した場合(S20:YES)、記憶制御装置10は、現在使用中の差分ビットマップBM20に、そのライトデータの書込み位置を記憶させる(S21)。即ち、記憶制御装置10は、そのライトデータによって更新されるスロットに対応する差分ビットに「1」を設定する。
記憶制御装置10は、差分ビットマップBM20を切り替える時期が到来したか否かを判定する(S22)。例えば、区間を所定時間として定義している場合、記憶制御装置10は、所定時間が経過したか否かを判定する。これに代えて、例えば、ジャーナルボリューム230Jの使用率UJで区間を定義している場合、記憶制御装置10は、所定の使用率に達したか否かを判定する。
切替時期が到来したと判定された場合(S22:YES)、記憶制御装置10は、次の差分ビットマップBM20に切り替えて、ホスト20による正ボリューム230Pの更新を管理する(S23)。
記憶制御装置10は、使用済の各差分ビットマップBM20について、その管理下にあるジャーナルデータJDが全て基底ボリューム230Bに書き込まれた差分ビットマップBM20が存在するか否かを判定する(S24)。つまり、記憶制御装置10は、使用済差分ビットマップBM20に対応付けられている全てのジャーナルデータJDについて格上げ処理が完了している使用済差分ビットマップBM20が存在するか否かを判定する(S24)。
対応する全てのジャーナルデータJDが基底ボリューム230Bに書き込まれて破棄されている、使用済の差分ビットマップBM20が検出された場合(S24:YES)、記憶制御装置10は、その使用済の差分ビットマップBM20の記憶内容を消去し(S25)、その差分ビットマップBM20を次の区間での差分管理に使用する。
図12は、リカバリ処理を示すフローチャートである。テンポラリリストアの実行に先立って、ホスト20から正ボリューム230Pへのアクセスが禁止される(S30)。このホストアクセスの禁止は、ユーザまたはアプリケーションプログラムによって実行させることができる。あるいは、記憶制御装置10は、ホスト20からのアクセス要求の受付を禁止することができる。
記憶制御装置10は、目標保護期間TPTを外れたジャーナルデータJDを基底ボリューム230Bに書き込んでから破棄する処理(格上げ処理)を停止する(S31)。これにより、基底ボリューム230Bの示す基底点は固定され、進行を停止する。
記憶制御装置10は、選択可能な保護期間PT及び設定済のCPMについて、ホスト20に通知する(S32)。ホスト20は、この通知された情報に基づいて、テンポラリリストアさせる復元点を選択する。
なお、ホスト20に代えて、管理サーバ30を用いることもできる。即ち、記憶制御装置10は、管理サーバ30に保護期間PTや設定済CPMを通知し、管理サーバ30から記憶制御装置10にリストア実行の指示を与えることもできる。
記憶制御装置10は、復元点以降の各区間差分ビットマップBM20をマージすることにより、差分コピー用の差分ビットマップBM10を生成する(S33)。即ち、記憶制御装置10は、復元点以降の各区間差分ビットマップBM20(復元点を含む区間差分ビットマップBM20も含む)の論理和を求めることにより、差分コピー用の差分ビットマップBM10を生成する。なお、復元点を含む区間については、ジャーナルデータJDの管理データを用いて、正確な差分ビットマップを得る構成としてもよい。ジャーナル管理情報に基づいて正確な差分ビットマップを生成する一例については、図24と共に後述する。
記憶制御装置10は、差分ビットマップBM10を用いて、基底ボリューム230Bから正ボリューム230Pにコピーさせる(S34)。記憶制御装置10は、復元点の前後でそれぞれ更新された領域について、ジャーナルボリューム230Jに記憶されている各ジャーナルデータJDのうち、最古のジャーナルデータから指定された復元点のジャーナルデータまでを順番に読み出して、正ボリューム230Pに書き込む(S35)。
記憶制御装置10は、差分コピー用の差分ビットマップBM10からリカバリ中差分ビットマップBM30に切り替える(S36)。ホスト20による正ボリューム230Pへのアクセス禁止が解除されると、ホスト20による正ボリューム230Pの更新位置を差分ビットマップBM30で管理する。また、記憶制御装置10は、ホスト20から発行されたライト要求に関するジャーナルデータJDを生成し、ジャーナルボリューム230Jに記憶させる(S37)。
再度のテンポラリリストアの実行が指示された場合(S38:YES)、記憶制御装置10は、最初のリカバリ後に蓄積されたジャーナルデータJDを破棄する(S39)。そして、記憶制御装置10は、復元点以降の各区間差分ビットマップBM20及びリカバリ中差分ビットマップBM30をマージして、差分コピー用の差分ビットマップBM10を改めて生成する(S40)。ユーザまたはアプリケーションプログラムは、テンポラリリストアによって復元された記憶内容に満足するまで、S34〜S40のステップを繰り返し実行させることができる。
再度テンポラリリストアを実行する場合、マージ対象となる区間差分ビットマップBM20の数を減らすことができる。ここで、前回の復元点をRP1、再度のテンポラリリストアの復元点をRP2とする。
(1)RP2がRP1よりも新しい場合(RP2>RP1)、リカバリ中差分ビットマップにおいて差分ビットがオンの領域については、基底ボリューム230Bから正ボリューム230Pにデータをコピーし、さらに、RP2までのジャーナルデータを正ボリューム230Pに適用する。その他の領域については、RP1からRP2までのジャーナルデータを正ボリューム230Pに適用する。
(2)RP2がRP1よりも古い場合(RP2<RP1)、まず、RP2とRP1との間の差分を管理する差分ビットマップ(復元点間差分ビットマップ)を生成する。次に、復元点間差分ビットマップとリカバリ中差分ビットマップとをマージする。そして、マージされたビットマップにおいて差分ビットがオンの領域については、基底ボリューム230Bから正ボリューム230Pにデータをコピーし、RP2までのジャーナルデータを正ボリューム230Pに適用する。その他の領域については、正ボリューム230Pのデータをそのまま使用する。
テンポラリリストアによってリカバリされた記憶内容をユーザまたはアプリケーションプログラムが承認し、コンプリートリストアの実行が指示された場合(S38:NO,S41:YES)、記憶制御装置10は、確定された復元点から「I/O停止点」までのジャーナルデータJDを無効化または破棄する(S42)。「I/O停止点」までのジャーナルデータJDとは、S30で停止されるホスト20からのライト要求について生成されたジャーナルデータJDである。
記憶制御装置10は、S36で使用を開始したリカバリ中差分ビットマップBM30を区間差分ビットマップBM20として使用する(S43)。そして、記憶制御装置10は、S42で無効化または破棄されたジャーナルデータJDに対応付けられている区間差分ビットマップBM20を破棄する(S44)。なお、便宜上、「破棄する」ものとして述べるが、区間差分ビットマップBM20の記憶内容を消去する行為も含む。つまり、S44では、不要となった各区間差分ビットマップBM20を破棄し、再利用に備える。記憶制御装置10は、無効化または破棄されたジャーナルデータJDの範囲内に含まれるCPMを破棄する(S45)。
記憶制御装置10は、ジャーナルデータJDの格上げ処理を再開し(S46)、通常運用状態へ移行する(S47)。
本実施例は、上述のように構成されるため、以下の効果を奏する。本実施例では、通常運用時には、目標保護期間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にコピーするデータ量を少なくすることができ、リカバリ時間を短縮することができる。
特に本実施例では、復元点以降に更新された位置を示す差分ビットマップBM10を用いて、復元点以降に更新された位置についてのみ、基底ボリューム230Bから正ボリューム230Pにデータをコピーする。従って、基底ボリューム230Bから正ボリューム230Pにコピーされるデータ量を低減することができ、これによりリストアに要する時間を短縮することができる。
また、本実施例では、復元点の前後でそれぞれ更新された領域についてのみ、基底点から復元点までのジャーナルデータJDを順番に書き込んで、復元点の記憶内容に戻す構成とした。従って、格上げ処理に要する時間も短縮することができ、これによりリストア時間をさらに短縮することができる。
図10〜図15を参照して第2実施例を説明する。本実施例を含む以下の各実施例は、前記第1実施例の変形例に該当する。前記実施例では、復元点以降の差分を示す差分ビットマップを生成し、正ボリューム230Pの記憶内容をできるだけ利用してリストアを実行する場合を説明した。本実施例では、復元点以降及び復元点以前の差分をそれぞれ示す複数の差分ビットマップを用意し、正ボリューム230P及び基底ボリューム230Bの記憶内容をできるだけ利用してリストアを行うようになっている。
図13は、基底点BPから最新点LPまでの期間内において、正ボリューム230Pの記憶内容が変化する様子等を示している。復元点RPを明示してリストアの実行が要求された場合、記憶制御装置10は、復元点以降に更新された位置を示す差分ビットマップBM50(A)と、復元点以前に更新された位置を示す差分ビットマップBM50(B)をとをそれぞれ生成する。
各差分ビットマップBM50(A),BM50(B)は、第1実施例で述べたように、各区間毎の差分ビットマップBM20を復元点の前後でそれぞれマージすることにより生成できる。あるいは、ジャーナルデータJDの管理データを用いることによって、より正確な差分ビットマップBM50(A),BM50(B)を生成することもできる。
既に図1でも説明した通り、復元点以降の差分ビットマップBM50(A)で更新されている領域(斜線部分の領域)は、第1更新領域に該当する。復元点以前の差分ビットマップBM50(B)で更新されている領域は、第2更新領域に該当する。各差分ビットマップBM50(A),BM50(B)の両方でそれぞれ更新されている領域は、第3更新領域に該当する。また、各差分ビットマップBM50(A),BM50(B)のいずれにおいても更新されていない領域は、未更新領域に該当する。
第1グループSAは、復元点以降の差分ビットマップBM50(A)によって更新の発生が検出された領域である。第1グループSAに属する領域では、基本的に、基底ボリューム230Bのデータを利用可能である。特に、第1グループSAにのみ属する領域(SA−SB,(¬SB)∧SA)では、基底ボリューム230Bに記憶されているデータをそのまま使用できる。第1グループSAにのみ属する領域(2,2)及び(2,3)は、復元点以降でのみ更新されており、復元点以前で更新されていない。従って、第1グループSAにのみ属する領域(2,2)及び(2,3)では、基底ボリューム230Bのデータ「0」と復元点におけるデータ「0」とは一致する。
第2グループSBは、復元点以前の差分ビットマップBM50(B)によって更新の発生が検出された領域である。第2グループSBに属する領域では、基本的に、正ボリューム230Pのデータを利用可能である。特に、第2グループSBにのみ属する領域(SB−SA,SB∧(¬SA))では、正ボリューム230Pに記憶されているデータをそのまま使用できる。第2グループSBにのみ属する領域(1,1)及び(3,2)は、復元点以前でのみ更新されており、復元点以降では更新されていない。従って、第2グループSBにのみ属する領域(1,1)及び(3,2)では、正ボリューム230Pのデータ「1」(1,1),「2」(3,2)と復元点におけるデータ「1」(1,1),「2」(3,2)とは一致する。
第3グループSCは、第1グループSA及び第2グループSBの両方にまたがって属する領域である。第3更新領域SCに属する領域(SB∧SA)では、正ボリューム230P及び基底ボリューム230Bのいずれのデータも、そのままでは使用できない。第3グループSCに属する領域(1,3)は、復元点の前後でそれぞれ更新されているため、まず、基底ボリューム230Bのデータ「0」を正ボリューム230Pにコピーし(「5」→「0」)、次に、その領域(1,3)に関する復元点までのジャーナルデータJDを、領域(1,3)に順番に上書きする(「0」→「3」)。これにより、第3グループSCに属する領域のデータは、復元点におけるデータに一致する。
第4グループは、正ボリューム230Pの全記憶領域のうち、前記各グループSA,SB,SCのいずれにも属さない領域((SB∨SA)c,¬(SB∨SA))である。第4グループに属する領域では、復元点の前後いずれにもおいても更新されていないため、正ボリューム230Pまたは基底ボリューム230Bのいずれかに記憶されているデータを使用できる。第4グループに属する領域(2,1)、(2,2)、(1,2)、(3,3)では、正ボリューム230Pに記憶されているデータと基底ボリューム230Bに記憶されているデータと復元点におけるデータとは、いずれも一致している。
本実施例では、以上の考察に基づいて、仮想ボリューム230Vと正ボリューム230P及び基底ボリューム230B等と対応付けるためのボリューム参照用テーブルBM60を生成する。このテーブルBM60には、正ボリューム230Pの各記憶領域毎に、正ボリューム230Pを参照すべきか(「P」)、基底ボリューム230Bを参照すべきか(「B」)、ジャーナルデータJDを使用すべきか(「J」)が設定されている。なお、「P」、「B」及び「J」という値は、説明の便宜上の値である。
図14は、仮想ボリューム230VとテーブルBM60及び各ボリューム230P,230B等の関係を模式的に示す説明図である。仮想ボリューム230Vは、キャッシュメモリ130上に仮想的に設けられるボリュームである。仮想ボリューム230Vには、復元点における記憶内容が再現される。
参照用テーブルBM60が生成され、仮想ボリューム230Vに対応付けられた時点で、見かけ上、リストアを完了させることができる。ホスト20が仮想ボリューム230Vにアクセスすると、そのアクセスした位置に対応するボリュームが参照される。基底ボリューム230Bに対応付けられた領域(SA)にホスト20がアクセスした場合、基底ボリューム230Bのデータが正ボリューム230Pにコピーされる。即ち、ホスト20からアクセスされるまでは、データを基底ボリューム230Bから正ボリューム230Pにコピーする必要がない。なお、ライトアクセスの場合、基底ボリューム230Bから正ボリューム230Pへデータをコピーした後で、ライトデータを上書きすればよい。
リードアクセスの場合、基底ボリューム230Bからデータを読み出せばよく、基底ボリューム230Bから正ボリューム230Pにデータをコピーする必要はない。
また、ライトアクセス後に基底ボリューム230Bから正ボリューム230Pにデータをコピーするのではなく、リストア完了後に、バックグラウンドでコピーを継続する構成でもよい。
図15は、参照用テーブルBM60を生成する処理を示す。記憶制御装置10は、復元点以降の更新位置を示す差分ビットマップBM50(A)を生成する(S50)。さらに、記憶制御装置10は、復元点以前の更新位置を示す差分ビットマップBM50(B)を生成する(S51)。
記憶制御装置10は、仮想ボリューム230Vの全記憶領域について、下記のS53〜S60を適宜実行することにより、参照用テーブルBM60の各領域にそれぞれ値を設定する(S52)。
記憶制御装置10は、仮想ボリューム230Vのある対象領域が復元点以前で更新されているか否かを判定する(S53)。その対象領域が復元点以前で更新されている場合(S53:YES)、記憶制御装置10は、その対象領域が復元点以降においても更新されているか否かを判定する(S54)。なお、S53よりも前にS54の判定を行う構成とすることもできる。
対象領域が復元点の前後でそれぞれ更新されている場合(S53:YES,S54:YES)、その対象領域は、図13中の第3グループSCに属する。そこで、記憶制御装置10は、対象領域のデータのみを基底ボリューム230Bから正ボリューム230Pにコピーし(S55)、対象領域に関する復元点までのジャーナルデータJDを正ボリューム230Pに順番に書き込む(S56)。記憶制御装置10は、その対象領域については正ボリューム230Pを参照させるべく、参照用テーブルBM60に値を設定する(S57)。
対象領域が復元点以前でのみ更新されている場合(S53:YES,S54:NO)、その対象領域は、図13中の第2グループSBに属する。そこで、記憶制御装置10は、その対象領域については正ボリューム230Pを参照させるべく、参照用テーブルBM60に値を設定する(S57)。
対象領域が復元点以前で更新されていない場合(S53:NO)、記憶制御装置10は、その対象領域が復元点以降で更新されているか否かを判定する(S58)。対象領域が復元点以降でのみ更新されている場合(S53:NO,S58:YES)、その対象領域は図13中の第1グループSAに属する。そこで、記憶制御装置10は、その対象領域については基底ボリューム230Bを参照させるべく、参照用テーブルBM60に値を設定する(S59)。
対象領域が復元点以前も復元点以降も更新されていない場合(S53:NO,S58:NO)、その対象領域は、図13で述べた第4グループに属する。そこで、記憶制御装置10は、その対象領域については正ボリューム230Pを参照させるべく、参照用テーブルBM60に値を設定する(S60)。
このように構成される本実施例でも前記第1実施例と同様の効果を奏する。これに加えて、本実施例では、復元点以降の差分を示す差分ビットマップBM50(A)及び復元点以前の差分を示す差分ビットマップBM50(B)を用意し、正ボリューム230P及び基底ボリューム230Bの記憶内容を可能な限り利用して、仮想ボリューム230Vを生成することができる。従って、リストアに要する時間を短縮することができ、使い勝手が向上する。
図16,図17に基づいて第3実施例を説明する。本実施例では、リストア時に、ジャーナルデータJDの管理データを用いて参照用テーブルT10を生成する。図16は、本実施例の概要を示す説明図である。復元点の記憶内容をホスト20に提供する仮想ボリューム230Vには、各領域のデータの実体がいずれのボリュームに存在するかを示すための参照用テーブルT10が対応付けられている。
参照用テーブルT10には、例えば、ブロック単位等のような所定の単位で、データの実体がどこに存在するかが設定されている。参照用テーブルT10は、ジャーナルデータJDの管理データを用いることにより、リストア時に生成できる。図5で述べた通り、ジャーナルデータJDを管理するためのデータには、正ボリューム230Pのどの領域が、いつ更新されたか等の管理情報が含まれている。従って、記憶制御装置10は、この管理データを用いることにより、参照用テーブルT10を得ることができる。
図17は、参照用テーブルT10を生成するための処理の例を示す。例えば、記憶制御装置10は、復元点以降におけるジャーナルデータJDの管理データを用いて、参照用テーブルT10の一部を生成し(S70)、さらに復元点以前におけるジャーナルデータJDの管理データを用いて参照用テーブルT10の残りの部分を生成する(S71)。
このように構成される本実施例も前記第1実施例及び前記第2実施例と同様の効果を奏する。本実施例では、リストアの実行を要求された時点で、参照用テーブルT10を生成することができるため、記憶制御装置10のメモリ資源を有効に利用できる。
図18は、第4実施例に係る記憶制御装置10で実行される、参照用テーブルT10の生成方法を示すフローチャートである。本実施例では、各区間毎に予めテーブルを生成しておき、リストアを要求されたときに各区間毎のテーブルを用いて参照用テーブルT10を生成する。
記憶制御装置10は、各区間毎にテーブルを生成する(S80)。このテーブルは、参照用テーブルT10と同様のテーブル構成を有している。この区間毎のテーブルは、各区間のそれぞれにおいて、各領域のデータが更新されたか否かを管理する。以下、このテーブルを区間テーブルと呼ぶ場合がある。
リストアの開始が要求されると、記憶制御装置10は、復元点以前の各区間テーブルの論理和を求めて、参照用テーブルT10を生成する(S81)。そして、記憶制御装置10は、復元点以降のジャーナルデータJDに関する管理データを用いることにより、S81で生成された参照用テーブルT10を更新する(S82)。
なお、復元点を含む区間を担当する区間テーブルはマージしてはならず、区間の最初から復元点までのジャーナル管理情報を用いてテーブルを更新する。
単純にマージ対象の各区間管理テーブルをマージするだけでは、復元点以降で更新されていないため正ボリューム230Pを参照できる領域についても、基底ボリューム230B及びジャーナルデータJDを使用してしまう可能性がある。そこで、実施例2で述べた3パターンのテーブルを作成した後で、基底ボリューム及びジャーナルデータを使用する領域についてのみ区間テーブルをマージすれば、より効率的となる。
このように構成される本実施例も前記第1実施例及び前記第2実施例と同様の効果を奏する。これに加えて、本実施例では、リストア開始を要求される前に、各区間毎にテーブルを予め生成しておくため、参照用テーブルT10の生成時間を短縮できる。これにより、リストアが完了するまでの時間をさらに短縮でき、使い勝手が向上する。
図19,図20に基づいて第5実施例を説明する。前記各実施例では、指定された復元点の記憶内容を、正ボリューム230P上に再現する場合を説明した。これに代えて、本実施例では、正ボリューム230Pとは別の記憶領域を用いて、復元点の記憶内容を再現させる。本実施例は、前記各実施例のいずれにも適用可能である。ここでは、便宜上、第2実施例に適用した場合を説明する。
図19に示すように、第3グループSCに属する領域のデータは、プール230PLに格納される。プール230PLは、例えば、各ボリューム230P,230Bと異なる別の、一つまたは複数のボリューム230の記憶領域から構成することができる。ジャーナルボリューム230Jに十分な空き容量がある場合、ジャーナルボリューム230Jの空き領域をプール230PLとして利用することもできる。
図20は、参照用テーブルBM60を生成するための処理を示す。図20は、図15と共通または類似のステップを備えている。図20中のステップと図15中のステップとの対応関係を述べると、S90はS50に、S91はS51に、S92はS52に、S93はS53に、S94はS54に、S95はS57に、S99はS58に、S100はS59に、S101S60に、それぞれ対応する。これら各ステップの説明は割愛する。
本実施例では、復元点の前後でそれぞれ更新されている領域に関する処理(S96,S97,S98)に特徴がある。即ち、復元点以前及び復元点以降のそれぞれにおいて更新されている領域(第3グループSCに属する領域)については、基底ボリューム230Bからプール230PLにデータをコピーした後(S96)、その領域に関する復元点までのジャーナルデータJDをプール230PLに順番に上書きする(S97)。そして、参照用テーブルBM60には、その領域を参照すべき場所を示す情報として、プール230PLの所定箇所を特定するための値が設定される。
このように構成される本実施例も前記第1実施例及び前記第2実施例と同様の効果を奏する。これに加えて本実施例では、復元点の記憶内容をプール230PL上に再現することができる。従って、最新点の記憶内容を保持する正ボリューム230Pを一切変更することなく、復元点の記憶内容を速やかに得ることができる。
また、プール230PLを用いてリストアを行うことにより、正ボリューム230Pへのアクセスを処理しながら、同時にリストアを進めることができる。正ボリューム230Pを参照する領域へのライトアクセスについては、正ボリューム230Pからプール230PLへデータをコピーし、プール230PLを参照するようにテーブルを更新してから、そのライトアクセスを受け付ける。
なお、正ボリューム230Pに復元点の記憶内容を再現する場合であっても、プール230PLを使用することができる。例えば、実施例2を例に挙げて説明すると、
(1)基底ボリュームから正ボリュームへデータをコピーする構成を、基底ボリュームからプールにデータをコピーする構成に代え、
(2)基底ボリュームから正ボリュームにデータをコピーした後で正ボリュームにジャーナルデータを格上げする構成を、基底ボリュームからプールにデータをコピーした後でプールにジャーナルデータを格上げする構成に代え、
(3)リストア後にライトアクセスされる領域については、正ボリューム230Pからプールにデータをコピーし、プールにライトデータを書き込む構成にし、
(4)あるいは、リストア後にライトアクセスされる領域については、基底ボリューム230Bからプールにデータをコピーした後で、プールにライトデータを書き込む構成とする、ことができる。
このようにプール230PLを利用することで、再度のテンポラリリストアの実行時に、前回のテンポラリリストアのデータをコピーしたり、リストア後のライトアクセスを取り消す処理を不要にすることができる。従って、リストアに要する時間をより短縮することができる。なお、実施例3及び実施例4では、上記(3)または(4)の構成が有効である。
図21,図22に基づいて第6実施例を説明する。本実施例では、復元点に時間的に近いジャーナルデータJDから順番に、基底ボリューム230Bのデータに上書きすることにより、短時間で格上げ処理を完了させる。
図21は、本実施例による格上げ処理の概要を示すフローチャートである。記憶制御装置10は、復元点に時間的に最も近いジャーナルデータJDを検出し、このジャーナルデータを正ボリューム230Pの更新対象領域に書き込む(S110)。本実施例では、復元点の記憶内容を正ボリューム230P上に再現する場合を例に挙げるが、前記第5実施例で述べたように、別のボリュームまたはプール230PL上に、復元点の記憶内容を再現させる構成にも適用できる。
また前記第3実施例や第4実施例の場合も、ジャーナル管理情報を順次読み出してテーブルを作成するため、本実施例による方式を利用することができる。この場合、図21中の「正ボリュームに書込み」とある部分は、ジャーナルデータを指す「テーブル更新」に変わる。
記憶制御装置10は、復元点に最も近いジャーナルデータJDが書き込まれた更新対象領域の位置を、処理済みビットマップBM70に記録する(S111)。後述の図22に示される処理済みビットマップBM70は、ジャーナルデータが書き込まれた領域の位置を管理するためのデータである。
記憶制御装置10は、復元点に時間的に最も近いジャーナルデータJDの次に復元点に近いジャーナルデータJDを検出する(S112)。記憶制御装置10は、処理済みビットマップBM70を用いることにより、復元点に次に近いジャーナルデータJD(対象ジャーナルデータJD)に対応する領域が既に格上げ処理済みであるか否かを判定する(S113)。即ち、記憶制御装置10は、その対象ジャーナルデータJDに対応する領域が、処理済みビットマップBM70に全て登録されているか否かを判定する(S113)。なお、ジャーナルデータ同士の領域が完全に重なるのではなく、一部のみ重なる場合もある。この場合、重ならない部分のみを格上げする。
対象ジャーナルデータJDが処理済みビットマップBM70に登録されていない場合(S113:NO)、記憶制御装置10は、ジャーナルデータJDのうち処理済みビットマップBM70に登録されていないジャーナルデータJDを正ボリュームに書込み(S114)、書き込んだ位置を処理済みビットマップに記録する(S115)。対象ジャーナルデータJDに関する領域が処理済みビットマップBM70に登録済の場合(S113:YES)、記憶制御装置10は、S114及びS115をスキップする。つまり、既に格上げされた領域については、古いジャーナルデータJDによる更新を禁止する。
最後に、記憶制御装置10は、格上げ処理が基底点まで戻ったか否かを判定する(S116)。即ち、記憶制御装置10は、最古のジャーナルデータJDまで処理したか否かを判定する(S116)。未処理のジャーナルデータJDが存在する場合(S116:YES)、記憶制御装置10は、復元点に近い別のジャーナルデータJDを検出し(S112)、成就のステップを繰り返す(S113〜S116)。全てのジャーナルデータJDについて判断を終えると(S116:YES)、本処理は終了する。
図22は、復元点に近い順番でジャーナルデータJDを正ボリューム230Pに書き込む様子を示す模式図である。まず最初に、記憶制御装置10は、ジャーナルボリューム230Jに記憶されている各ジャーナルデータJDのうち、復元点RPに最も近い過去のジャーナルデータJD5を読み出して、正ボリューム230Pに書き込む。記憶制御装置10は、ジャーナルデータJD5の書き込まれた位置(2,3)を、処理済みビットマップBM70に記録する。
続いて、記憶制御装置10は、次に復元点に近いジャーナルデータJD4を読み出して正ボリューム230Pに書込み、その書込み位置(1,2)を処理済みビットマップBM70に登録する。
ジャーナルデータJD4の次に復元点に近いジャーナルデータJD3は、領域(2,3)に関するデータである。この領域(2,3)については、ジャーナルデータJD3よりも新しい時刻(復元点により近い時刻)に生成されたジャーナルデータJD5が既に書き込まれている。従って、記憶制御装置10は、ジャーナルデータJD3を正ボリューム230Pに書き込まず、次のジャーナルデータJD2を処理対象とする。
ジャーナルデータJD2は、領域(1,2)に関するデータである。この領域(1,2)については、ジャーナルデータJD2よりも新しい時刻に生成されたジャーナルデータJD4が既に書き込まれている。従って、記憶制御装置10は、ジャーナルデータJD2を正ボリュームに書き込まず、次のジャーナルデータJD1を処理対象とする。
ジャーナルデータJD1は、領域(1,3)に関するデータであり、領域(1,3)には未だジャーナルデータが書き込まれていない。そこで、記憶制御装置10は、ジャーナルデータJD1を正ボリューム230Pに書き込む。
このように、本実施例では、復元点から基底点に遡るようにして、より新しいジャーナルデータから順番に正ボリューム230Pに書き込み、記憶内容を更新させる。更新済であるか否かは、処理済みビットマップBM70によって管理される。復元点に近いジャーナルデータが書き込まれた領域に、古いジャーナルデータは上書きされない。正ボリューム230Pの記憶内容を復元点に戻すために更新すべき各領域には、それぞれ最も新しい時刻のジャーナルデータが1つだけ書き込まれる。
このように構成される本実施例も前記第1実施例及び前記第2実施例と同様の効果を奏する。これに加えて、本実施例では、更新対象の各領域について、復元点に最も近いジャーナルデータのみを反映させるため、より速やかに復元点の記憶内容を得ることができ、使い勝手が向上する。
図23に示すように、第1のジャーナルデータJNL1と第3のジャーナルデータJNL3とが一部重複している場合、図中に太線で示すデータのみが格上げされる。
図24は、ジャーナル管理情報から差分ビットマップを正確に作成する一例を示す説明図である。図に示す例では、10時から11時まで、11時から12時まで、12時から13時まで、13時以降(13時から現在時刻である13時15分まで)の、各区間をそれぞれの区間差分ビットマップが担当している。基底点は10時15分、指定された復元点が12時30分であるとする。
10時から11時までの区間を担当する差分ビットマップには、基底点以前の差分も含まれている。そこで、10時15分から11時までのジャーナル管理情報を用いて、10時15分から11時までの区間の差分ビットマップを作成する。このジャーナル管理情報を用いて作成される差分ビットマップを、区間差分ビットマップと区別するために、ここでは、一時ビットマップと呼ぶことにする。
12時から13時までの区間を担当する差分ビットマップには、復元点(12時30分)の前後に発生した差分がそれぞれ含まれている。そこで、12時から12時30分までのジャーナル管理情報を用いて、12時から12時30分までの区間の一時ビットマップを生成する。また、12時30分から13時までのジャーナル管理情報を用いて、12時30分から13時までの区間の一時ビットマップを作成する。
そして、10時15分から11時までの区間の一時ビットマップと、11時から12時までの区間の差分ビットマップ及び12時から12時30分までの区間の一時ビットマップをマージすることにより、10時15分から12時30分までの区間の差分ビットマップを得ることができる。この差分ビットマップ(10:15-12:30)は、復元点以前の差分を示すビットマップである。
また、12時30分から13時までの区間の一時ビットマップと現在の区間を担当する差分ビットマップ(13:00-13:15)とをマージすることにより、12時30分から13時15分までの区間の差分ビットマップを得ることができる。この差分ビットマップ(12:30-13:15)は、復元点以降の差分を示すビットマップである。
このように、各区間をそれぞれ担当する区間差分ビットマップとジャーナル管理情報とを用いることにより、基底点や復元点を含む区間差分ビットマップから、復元点の前後の更新を示す差分ビットマップを正確に得ることができる。
なお、本発明は、上述した各実施例に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。例えば、前記各実施例を適宜組み合わせて使用することができる。
本発明の実施形態の概略を示す説明図である。
本発明の実施例に係る記憶制御装置を含む情報処理システムの全体構成を示す説明図である。
記憶制御装置等のプログラム構成の概要を示す説明図である。
記憶制御装置の論理構成の概要を示す説明図である。
ジャーナルデータの構成の概要を示す説明図である。
区間毎に差分ビットマップを切り替えて差分を管理する様子を示す説明図である。
通常運用状態における保護期間の変化を示す説明図である。
リカバリ時における保護期間の変化を示す説明図である。
リストア処理の概要を示す説明図である。
通常運用処理を示すフローチャートである。
各区間毎にビットマップを切り替えて使用する処理を示すフローチャートである。
リカバリ処理を示すフローチャートである。
第2実施例に係る記憶制御装置のリカバリ処理を模式的に示す説明図である。
仮想ボリュームと正ボリューム及び基底ボリュームを参照用テーブルによって対応付ける様子を示す説明図である。
参照用テーブルを生成する処理を示すフローチャートである。
第3実施例に係る記憶制御装置のリカバリ処理を模式的に示す説明図である。
参照用テーブルを生成する処理を示すフローチャートである。
第4実施例に係る記憶制御装置において、参照用テーブルを生成する処理を示すフローチャートである。
第5実施例に係る記憶制御装置のリカバリ処理を模式的に示す説明図である。
参照用テーブルを生成する処理を示すフローチャートである。
第6実施例に係る記憶制御装置により実行される、ジャーナルデータの格上げ処理を示すフローチャートである。
ジャーナルデータをボリュームに書き込む様子を示す説明図である。
ジャーナルデータが部分的に重複している場合における格上げ方法を模式的に示す説明図である。
ジャーナル管理情報から差分ビットマップを正確に作成する方法を模式的に示す説明図である。
符号の説明
1…記憶制御装置、2…ホスト、3…正ボリューム(保護対象ボリューム)、4…基底ボリューム、5…ジャーナルボリューム、5A…ジャーナルデータ、6,6A…区間差分ビットマップ、BM50(A)…差分コピー用の差分ビットマップ、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〜BM70…ビットマップ、T10…参照用テーブル、JD…ジャーナルデータ、PT…保護期間、TPT…目標保護期間