(57)【要約】【課題】本発明の記憶制御装置は、正ボリューム及び基底ボリュームの記憶内容をできるだけ利用することにより、効率よくリカバリを実行する。【解決手段】正ボリューム２３０Ｐと基底ボリューム２３０Ｂとの間の差分は、各区間毎に別々の差分ビットマップ６Ａを用いて管理される（Ｓ３）。リカバリ時には、復元点ＲＰ以降及び復元点以前でそれぞれ生じた差分を、それぞれのビットマップ６Ｂ，６Ｃで管理する。復元点以降でのみ更新された領域（７Ｂ−７Ｐ）では基底ボリューム４を、復元点以前でのみ更新された領域（７Ｐ−７Ｂ）では正ボリューム３を、それぞれ使用することができる。復元点の前後で更新された領域（７Ｐ∧７Ｂ）では、基底ボリューム４のデータを正ボリューム３にコピーした後、復元点までのジャーナルデータを正ボリューム３に書き込む。【選択図】図１
2008282239.tif 000002
【特許請求の範囲】
【請求項１】
外部装置により利用されるデータを記憶するための記憶制御装置であって、
最新点における記憶内容を保持する第１記憶領域と、
前記最新点よりも前の基底点における記憶内容を保持する第２記憶領域と、
前記外部装置からの更新要求によって発生する前記第１記憶領域の更新履歴を管理する更新履歴管理部と、
前記基底点から前記最新点までの期間内に含まれる復元点における、前記第１記憶領域の記憶内容を復元させる制御部とを備え、
前記制御部は、（１）前記復元点から前記最新点までの第１期間内に更新された第１更新領域と、前記基底点から前記復元点までの第２期間内に更新された第２更新領域と、前記第１更新領域及び前記第２更新領域の両方に共通する第３更新領域とをそれぞれ検出し、（２）前記第１更新領域については前記第２記憶領域の記憶内容を用い、前記第２更新領域については前記第１記憶領域の記憶内容を用い、前記第３記憶領域については前記第２記憶領域の記憶内容及び前記第２期間内の更新履歴を用い、前記第１期間及び前記第２期間の両方で更新されなかった未更新領域については前記第１記憶領域または前記第２記憶領域のいずれか一方の記憶内容を用いることにより、（４）前記復元点における前記第１記憶領域の記憶内容を復元させる記憶制御装置。
【請求項２】
前記制御部は、前記復元点における前記第１記憶領域の記憶内容を、前記第１記憶領域上に復元させる請求項１に記載の記憶制御装置。
【請求項３】
前記制御部は、前記復元点における前記第１記憶領域の記憶内容を、前記第１記憶領域及び前記第２記憶領域とは別の第３記憶領域上に復元させる請求項２に記載の記憶制御装置。
【請求項４】
前記制御部は、前記復元点における前記第１記憶領域の記憶内容を、仮想的に生成される仮想記憶領域上に復元させる請求項１に記載の記憶制御装置。
【請求項５】
前記制御部は、（４−１）前記第１記憶領域に対応する仮想記憶領域を生成し、（４−２）この仮想記憶領域内の前記第１更新領域に対応する領域を前記第２記憶領域内で前記第１更新領域に対応する領域に対応付け、（４−３）前記仮想的記憶領域内の前記第２更新領域に対応する領域を前記第１記憶領域内で前記第２更新領域に対応する領域に対応付け、（４−４）前記仮想記憶領域内の前記未更新領域に対応する領域を前記第１記憶領域内または前記第２記憶領域内のいずれか一方で前記未更新領域に対応する領域に対応付け、（４−５）前記仮想記憶領域内の前記第３更新領域に対応する領域を、前記第１記憶領域または第３記憶領域のいずれか一方で前記第３更新領域に対応する所定領域に対応付け、かつ、前記第２記憶領域内で前記第３更新領域に対応する領域に記憶されている記憶内容を前記所定領域にコピーした後、前記第３更新領域に関する更新履歴を所定の順序で前記所定領域に上書きすることにより、前記復元点における前記第１記憶領域の記憶内容を復元させる、請求項１に記載の記憶制御装置。
【請求項６】
前記制御部は、前記第３更新領域に関する更新履歴を、前記復元点に最も近い時点から順番に過去に遡るようにして、前記所定領域に適用するようになっている請求項５に記載の記憶制御装置。
【請求項７】
前記制御部は、復元点に近い時点の更新履歴が適用された場所には、その更新履歴よりも古い時点の更新履歴が存在する場合でも上書きしないようになっている請求項６に記載の記憶制御装置。
【請求項８】
前記制御部は、前記復元点を指定されるよりも前に、前記更新履歴管理部により管理されている更新履歴を用いて、前記第１〜第３更新領域を検出するための情報を予め生成する請求項１に記載の記憶制御装置。
【請求項９】
前記制御部は、前記基底点から前記最新点までの期間内に前記外部装置から発行される更新要求に基づいて、前記第１記憶領域の記憶内容と前記第２記憶領域の記憶内容との差分の位置を、所定の区間毎にそれぞれ予め管理しており、これら各区間毎の差分の位置に基づいて、前記第１〜第３更新領域を検出する請求項１に記載の記憶制御装置。
【請求項１０】
前記制御部は、前記第１記憶領域と前記第２記憶領域との間の記憶内容の差分が生じた位置を、複数の第１差分ビットマップを用いて所定の区間毎にそれぞれ管理しており、前記復元点以降の複数の前記第１差分ビットマップの論理和から前記第１更新領域を検出し、前記復元点以前の複数の前記第１差分ビットマップの論理和から前記第２更新領域を検出し、前記第１更新領域と前記第２更新領域との重複部分から前記第３更新領域を検出する請求項１に記載の記憶制御装置。
【請求項１１】
前記第１記憶領域及び前記第２記憶領域は、それぞれ論理ボリュームとして構成されており、前記更新履歴管理部は、前記外部装置から発行される更新要求に基づいてジャーナルデータを生成し、このジャーナルデータを前記更新履歴として保存する請求項１に記載の記憶制御装置。
【請求項１２】
前記制御部は、前記第１記憶領域と仮想的に生成される仮想記憶領域とを対応付けるためのテーブルを生成し、
前記テーブルは、前記仮想記憶領域内の前記第１更新領域に対応する領域を前記第２記憶領域内で前記第１更新領域に対応する領域に、前記仮想的記憶領域内の前記第２更新領域に対応する領域を前記第１記憶領域内で前記第１更新領域に対応する領域に、前記仮想記憶領域内の前記未更新領域に対応する領域を前記第１記憶領域内または前記第２記憶領域内のいずれか一方で前記未更新領域に対応する領域に、それぞれ対応付けて構成されており、かつ、前記仮想記憶領域内の前記第３更新領域に対応する領域は、所定の処理を行う領域として設定されており、
前記所定の処理は、前記第２記憶領域内で前記第３更新領域に対応する領域に記憶されている記憶内容を前記所定領域にコピーした後、前記第３更新領域に関する更新履歴を所定の順序で上書きする処理である、請求項１に記載の記憶制御装置。
【請求項１３】
外部装置により利用されるデータを記憶するための記憶制御装置であって、
最新点における記憶内容を保持する第１ボリュームと、
前記第１ボリュームの基底点における記憶内容を保持する第２ボリュームと、
前記第１ボリュームを対象とする更新要求に基づいて生成されるジャーナルデータを記憶する第３ボリュームと、
前記第１ボリュームと前記第２ボリュームとの間の記憶内容の差分が生じた位置を、予め定められる複数の所定区間毎にそれぞれ管理する複数の第１差分ビットマップと、
前記第１ボリューム、前記第２ボリューム、前記第３ボリューム及び前記各第１差分ビットマップを制御するための制御部であって、
（１）前記第１ボリュームの前記所定時点における記憶内容を前記第２ボリュームに記憶させるためのコピー機能と、
（２）前記外部装置からの前記更新要求に基づいて前記ジャーナルデータを生成し、生成した前記ジャーナルデータを前記第３ボリュームに記憶させるジャーナル生成機能と、
（３）前記所定時点以降に前記外部装置から発行される前記更新要求によって前記第１ボリュームと前記第２ボリュームとの間に生じる差分の位置を、前記所定区間毎に選択される一つの前記第１差分ビットマップに記憶させる差分管理機能と、
（４）前記第３ボリュームに記憶される各ジャーナルデータのうち、予め指定される目標保護期間を経過した所定のジャーナルデータを前記第２ボリュームに反映させる反映機能と、
（５）前記第２ボリュームに反映された前記所定のジャーナルデータを破棄するジャーナル破棄機能と、
（６）前記各第１差分ビットマップのうち、対応する全ての前記ジャーナルデータが破棄された所定の第１差分ビットマップの記憶内容を消去して、新たな第１差分ビットマップとして再利用する再利用機能と、
（７）復元点を明示してリストアの実行が指示された場合は、（７−１）前記復元点以降の複数の前記第１差分ビットマップの論理和から、前記復元点から前記最新点までの第１期間内に更新された第１更新領域を検出し、（７−２）前記復元点以前の複数の前記第１差分ビットマップの論理和から、前記基底点から前記復元点までの第２期間内に更新された第２更新領域を検出し、（７−３）前記第１更新領域及び前記第２更新領域の両方に共通する第３更新領域を検出し、（７−４）前記第１更新領域については前記第２ボリュームの記憶内容を用い、前記第２更新領域については前記第１ボリュームの記憶内容を用い、前記第３更新領域については、前記第２ボリューム内で前記第３更新領域に対応する領域に記憶されている記憶内容を所定領域にコピーした後、前記第３更新領域に関する前記ジャーナルデータを所定の順序で前記所定領域に上書きし、前記第１期間及び前記第２期間の両方で更新されなかった未更新領域については前記第１記憶領域または前記第２記憶領域のいずれか一方の記憶内容を用いることにより、前記復元点における前記第１ボリュームの記憶内容を得るための、リストア機能と、をそれぞれ実行する制御部と、
を備える記憶制御装置。
【請求項１４】
外部装置により利用されるデータを記憶するための記憶制御装置を制御するための方法であって、
最新点における記憶内容を第１記憶領域に保持させ、
前記最新点よりも前の基底点における記憶内容を第２記憶領域に保持させ、
前記外部装置からの更新要求によって発生する前記第１記憶領域の更新履歴を更新履歴管理部により管理させ、
復元点を明示してリストアが指示された場合には、前記復元点から前記最新点までの第１期間内に更新された第１更新領域と、前記基底点から前記復元点までの第２期間内に更新された第２更新領域と、前記第１更新領域及び前記第２更新領域の両方に共通する第３更新領域とをそれぞれ検出し、
前記第１更新領域については前記第２記憶領域の記憶内容を用い、前記第２更新領域については前記第１記憶領域の記憶内容を用い、前記第３更新領域については前記第２記憶領域の記憶内容及び前記第２期間内の更新履歴を用い、前記第１期間及び前記第２期間の両方で更新されなかった未更新領域については前記第１記憶領域または前記第２記憶領域のいずれか一方の記憶内容を用いることにより、前記復元点における前記第１記憶領域の記憶内容を復元させる、
記憶制御装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶制御装置及び記憶制御装置の制御方法に関する。
【背景技術】
【０００２】
日々増大する多量のデータを効率的に管理するために、例えば、企業や医療機関、政府機関、教育機関等の各種組織では、記憶制御装置を使用する。記憶制御装置には、例えば、売上げデータ、顧客データ、研究データ等のような重要なデータも記憶されるため、人為的ミス等によるデータの消失に備える必要がある。データ消失に対する防衛策として、ボリュームのバックアップを定期的に作成する方法が挙げられる。
【０００３】
しかし、バックアップ作成及びリストアにはそれぞれ長い時間がかかる。また、バックアップが作成された時点にしかデータを戻すことができないため、使い勝手が悪い。そこで、他の防衛策として、ボリュームのスナップショットを作成し、かつ、ボリュームへの更新が発生するたびにジャーナルデータを取得し、このジャーナルデータを管理するようにした第１従来技術も知られている（特許文献１）。しかし、この従来技術でも、スナップショットを作成する必要があり、使い勝手の点で改善の余地がある。
【０００４】
そこで、ジャーナルデータを用いて任意時点にリストアさせることができるようにした第２従来技術も知られている（特許文献２）。
【特許文献１】特開２００５−１８７３８号公報
【特許文献２】米国特許出願公開第２００５／００２８０２２号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００５】
前記第２従来技術では、保護対象のデータボリュームと、保護対象のデータボリュームのある時点での記憶内容がコピーされたセカンダリボリュームと、ジャーナルデータを記憶するジャーナルボリュームとを用意している。リストア時には、第２従来技術は、セカンダリボリュームからデータボリュームにデータをコピーさせ、データボリュームの記憶内容をセカンダリボリュームの記憶内容に一致させる。次に、第２従来技術では、指定された時点までのジャーナルデータをジャーナルボリュームから読み出して、データボリュームに書き込む。従って、第２従来技術によれば、更新された単位で（ジャーナルデータ単位で）、任意の時点にリストアでき、ユーザの使い勝手は改善される。
【０００６】
しかし、ジャーナルボリュームの容量が一定の場合、いずれジャーナルボリュームはジャーナルデータで満杯になるため、リストア可能な期間を長くするのは難しい。ジャーナルボリュームの容量を拡張可能な構成とした場合、記憶制御装置の有する記憶容量の多くがジャーナルデータの管理に消費されてしまう可能性がある。
【０００７】
また、第２従来技術では、セカンダリボリュームからデータボリュームにコピーするデータの量が大きくなりやすく、リストア完了までの時間が長い。
【０００８】
本発明は、上記の問題点に鑑みてなされたもので、その目的は、保護対象ボリュームのデータを効率良く保護することができる記憶制御装置及び記憶制御装置の制御方法を提供することにある。本発明の他の目的は、より高速なリストアを可能とする記憶制御装置及び記憶制御装置の制御方法を提供することにある。本発明の更なる目的は、後述する実施形態の記載から明らかになるであろう。
【課題を解決するための手段】
【０００９】
上記課題を解決すべく、本発明に従う、外部装置により利用されるデータを記憶するための記憶制御装置は、最新点における記憶内容を保持する第１記憶領域と、最新点よりも前の基底点における記憶内容を保持する第２記憶領域と、外部装置からの更新要求によって発生する第１記憶領域の更新履歴を管理する更新履歴管理部と、基底点から最新点までの期間内に含まれる復元点における、第１記憶領域の記憶内容を復元させる制御部とを備え、制御部は、（１）復元点から最新点までの第１期間内に更新された第１更新領域と、基底点から復元点までの第２期間内に更新された第２更新領域と、第１更新領域及び第２更新領域の両方に共通する第３更新領域とをそれぞれ検出し、（２）第１更新領域については第２記憶領域の記憶内容を用い、第２更新領域については第１記憶領域の記憶内容を用い、第３記憶領域については第２記憶領域の記憶内容及び第２期間内の更新履歴を用い、第１期間及び第２期間の両方で更新されなかった未更新領域については第１記憶領域または第２記憶領域のいずれか一方の記憶内容を用いることにより、（４）復元点における第１記憶領域の記憶内容を復元させる。
【００１０】
制御部は、復元点における第１記憶領域の記憶内容を、第１記憶領域上に復元させる構成でもよい。
【００１１】
制御部は、復元点における第１記憶領域の記憶内容を、第１記憶領域及び第２記憶領域とは別の第３記憶領域上に復元させる構成でもよい。
【００１２】
制御部は、復元点における第１記憶領域の記憶内容を、仮想的に生成される仮想記憶領域上に復元させる構成でもよい。
【００１３】
本発明の実施形態では、制御部は、（４−１）第１記憶領域に対応する仮想記憶領域を生成し、（４−２）この仮想記憶領域内の第１更新領域に対応する領域を第２記憶領域内で第１更新領域に対応する領域に対応付け、（４−３）仮想的記憶領域内の第２更新領域に対応する領域を第１記憶領域内で第２更新領域に対応する領域に対応付け、（４−４）仮想記憶領域内の未更新領域に対応する領域を第１記憶領域内または第２記憶領域内のいずれか一方で未更新領域に対応する領域に対応付け、（４−５）仮想記憶領域内の第３更新領域に対応する領域を、第１記憶領域または第３記憶領域のいずれか一方で第３更新領域に対応する所定領域に対応付け、かつ、第２記憶領域内で第３更新領域に対応する領域に記憶されている記憶内容を所定領域にコピーした後、第３更新領域に関する更新履歴を所定の順序で前記所定領域に上書きすることにより、復元点における第１記憶領域の記憶内容を復元させる。
【００１４】
制御部は、第３更新領域に関する更新履歴を、復元点に最も近い時点から順番に過去に遡るようにして、所定領域に適用する構成でもよい。この場合、制御部は、復元点に近い時点の更新履歴が適用された場所には、その更新履歴よりも古い時点の更新履歴が存在する場合でも上書きしない。既に更新履歴が適用された領域に、それよりも古い更新履歴を上書きしてしまうと、復元点より古いデータになってしまうためである。
【００１５】
制御部は、復元点を指定されるよりも前に、更新履歴管理部により管理されている更新履歴を用いて、第１〜第３更新領域を検出するための情報を予め生成する構成であってもよい。
【００１６】
制御部は、基底点から最新点までの期間内に外部装置から発行される更新要求に基づいて、第１記憶領域の記憶内容と第２記憶領域の記憶内容との差分の位置を、所定の区間毎にそれぞれ予め管理しており、これら各区間毎の差分の位置に基づいて、第１〜第３更新領域を検出する構成でもよい。
【００１７】
制御部は、第１記憶領域と第２記憶領域との間の記憶内容の差分が生じた位置を、複数の第１差分ビットマップを用いて所定の区間毎にそれぞれ管理しており、復元点以降の複数の第１差分ビットマップの論理和から第１更新領域を検出し、復元点以前の複数の第１差分ビットマップの論理和から第２更新領域を検出し、第１更新領域と第２更新領域との重複部分から第３更新領域を検出する、構成でもよい。
【００１８】
本発明の実施形態では、第１記憶領域及び第２記憶領域は、それぞれ論理ボリュームとして構成されており、更新履歴管理部は、外部装置から発行される更新要求に基づいてジャーナルデータを生成し、このジャーナルデータを更新履歴として保存する。
【００１９】
本発明の実施形態では、制御部は、第１記憶領域と仮想的に生成される仮想記憶領域とを対応付けるためのテーブルを生成し、テーブルは、仮想記憶領域内の第１更新領域に対応する領域を第２記憶領域内で第１更新領域に対応する領域に、仮想的記憶領域内の第２更新領域に対応する領域を第１記憶領域内で第１更新領域に対応する領域に、仮想記憶領域内の未更新領域に対応する領域を第１記憶領域内または第２記憶領域内のいずれか一方で未更新領域に対応する領域に、それぞれ対応付けて構成されており、かつ、仮想記憶領域内の第３更新領域に対応する領域は、所定の処理を行う領域として設定されており、所定の処理は、第２記憶領域内で第３更新領域に対応する領域に記憶されている記憶内容を所定領域にコピーした後、第３更新領域に関する更新履歴を所定の順序で上書きする処理である。
【００２０】
本発明の他の観点に従う、外部装置により利用されるデータを記憶するための記憶制御装置は、最新点における記憶内容を保持する第１ボリュームと、第１ボリュームの基底点における記憶内容を保持する第２ボリュームと、第１ボリュームを対象とする更新要求に基づいて生成されるジャーナルデータを記憶する第３ボリュームと、第１ボリュームと第２ボリュームとの間の記憶内容の差分が生じた位置を、予め定められる複数の所定区間毎にそれぞれ管理する複数の第１差分ビットマップと、第１ボリューム、第２ボリューム、第３ボリューム及び各第１差分ビットマップを制御するための制御部であって、（１）第１ボリュームの所定時点における記憶内容を第２ボリュームに記憶させるためのコピー機能と、（２）外部装置からの更新要求に基づいてジャーナルデータを生成し、生成したジャーナルデータを第３ボリュームに記憶させるジャーナル生成機能と、（３）所定時点以降に外部装置から発行される更新要求によって第１ボリュームと第２ボリュームとの間に生じる差分の位置を、所定区間毎に選択される一つの第１差分ビットマップに記憶させる差分管理機能と、（４）第３ボリュームに記憶される各ジャーナルデータのうち、予め指定される目標保護期間を経過した所定のジャーナルデータを第２ボリュームに反映させる反映機能と、（５）第２ボリュームに反映された所定のジャーナルデータを破棄するジャーナル破棄機能と、（６）各第１差分ビットマップのうち、対応する全てのジャーナルデータが破棄された所定の第１差分ビットマップの記憶内容を消去して、新たな第１差分ビットマップとして再利用する再利用機能と、（７）復元点を明示してリストアの実行が指示された場合は、（７−１）復元点以降の複数の第１差分ビットマップの論理和から、復元点から最新点までの第１期間内に更新された第１更新領域を検出し、（７−２）復元点以前の複数の第１差分ビットマップの論理和から、基底点から復元点までの第２期間内に更新された第２更新領域を検出し、（７−３）第１更新領域及び第２更新領域の両方に共通する第３更新領域を検出し、（７−４）第１更新領域については第２ボリュームの記憶内容を用い、第２更新領域については第１ボリュームの記憶内容を用い、第３更新領域については、第２ボリューム内で第３更新領域に対応する領域に記憶されている記憶内容を所定領域にコピーした後、第３更新領域に関するジャーナルデータを所定の順序で所定呂域に上書きし、第１期間及び第２期間の両方で更新されなかった未更新領域については第１記憶領域または第２記憶領域のいずれか一方の記憶内容を用いることにより、復元点における前記第１ボリュームの記憶内容を得るための、リストア機能と、をそれぞれ実行する制御部と、を備える。
【００２１】
本発明のさらに別の観点に従う、外部装置により利用されるデータを記憶するための記憶制御装置を制御するための方法は、最新点における記憶内容を第１記憶領域に保持させ、最新点よりも前の基底点における記憶内容を第２記憶領域に保持させ、外部装置からの更新要求によって発生する第１記憶領域の更新履歴を更新履歴管理部により管理させ、復元点を明示してリストアが指示された場合には、復元点から最新点までの第１期間内に更新された第１更新領域と、基底点から復元点までの第２期間内に更新された第２更新領域と、第１更新領域及び第２更新領域の両方に共通する第３更新領域とをそれぞれ検出し、第１更新領域については第２記憶領域の記憶内容を用い、第２更新領域については第１記憶領域の記憶内容を用い、第３更新領域については第２記憶領域の記憶内容及び第２期間内の更新履歴を用い、第１期間及び第２期間の両方で更新されなかった未更新領域については第１記憶領域または第２記憶領域のいずれか一方の記憶内容を用いることにより、復元点における第１記憶領域の記憶内容を復元させる。
【００２２】
本発明の各部、各機能、各ステップの少なくとも一部は、コンピュータプログラムにより実現可能な場合がある。このようなコンピュータプログラムは、例えば、記憶デバイスに記憶されて、あるいは、通信ネットワークを介して、流通される。
【発明を実施するための最良の形態】
【００２３】
図１は、本発明の実施形態の概要を示す説明図である。図１には、本実施形態に係る記憶制御装置１を含む情報処理システムの概要が示されている。図１（ａ）は、通常運用時の概略動作を示し、図１（ｂ）は、リストア時の概略動作を示す。
【００２４】
まず図１（ａ）を参照する。この情報処理システムは、例えば、記憶制御装置１と、「外部装置」または「上位装置」としてのホスト２とを備える。後述の実施例から明らかなように、情報処理システムは、管理サーバ３０や別の記憶制御装置４０をさらに備えることもできる。
【００２５】
記憶制御装置１は、例えば、ハードディスクドライブやフラッシュメモリデバイス等のような物理的記憶デバイスを複数備えている。この物理的記憶デバイスの有する物理的記憶領域を仮想化することにより、論理的記憶デバイスが作成される。この論理的記憶デバイスを、以下の説明では、論理ボリューム、またはボリュームと呼ぶ。
【００２６】
記憶制御装置１は、例えば、保護対象ボリューム（図中「PVOL」）３と、基底ボリューム（図中「BVOL」）４と、ジャーナルボリューム５と、区間差分ビットマップ６とを備えることができる。
【００２７】
保護対象ボリューム３は、その記憶内容がジャーナルデータによって連続的に保護されるボリュームである。保護対象ボリューム３に記憶されるデータを、連続的に指定可能な任意の復元点によって復元させる技術を、本明細書では、ＣＤＰ（Continuous Data Protection）と呼ぶ。以下、説明の便宜上、保護対象ボリューム３を、正ボリューム３と呼ぶ場合がある。
【００２８】
正ボリューム３は、ホスト２に接続されており、ホスト２から書き込まれるデータを記憶する。ホスト２は、正ボリューム３にデータを書き込んだり、正ボリューム３からデータを読み出すことができる。基底ボリューム４は、ある所定時点（基底時点）において正ボリュームに記憶されていたデータを記憶する。後述のように、基底ボリューム４には、目標保護期間を経過したジャーナルデータが順番に書き込まれていく。従って、基底ボリューム４は、正ボリューム３の最新の記憶内容から所定時間（目標保護期間）だけ前の記憶内容を記憶する。基底ボリューム４が示している正ボリューム３の過去の時点を基底点と呼ぶ。基底点は、実時間の経過に応じて変化していく。基底点の変化を、基底点シフトと呼ぶ場合がある。
【００２９】
なお、基底ボリューム４と正ボリューム３の記憶内容の時間差は常に一定というわけではない。基底ボリューム４と正ボリューム３の記憶内容の時間差に変化を生じる場合もある。
【００３０】
ジャーナルボリューム５は、ジャーナルデータ５Ａを保存するボリュームである。ジャーナルデータ５Ａは、ホスト２によって正ボリューム３が更新された履歴を管理するためのデータである。従って、ジャーナルデータ５Ａは、更新履歴管理データと呼ぶことができ、ジャーナルボリューム５は、更新履歴管理用ボリュームと呼ぶことができる。
【００３１】
区間差分ビットマップ６は、予め設定される所定の区間毎にそれぞれ用意される差分ビットマップである。区間差分ビットマップ６は、例えば、正ボリューム３の各スロット単位のような所定単位で、更新の有無を管理する。スロットとは、例えば、論理トラックを意味する。区間は、時間やジャーナルボリューム５の使用率等に応じて定めることができる。更新された位置にはビット１が設定され、更新されていない位置にはビット０が設定される。差分の発生位置を示すビットを差分ビットと呼ぶ。
【００３２】
一つの例では、所定時間（図１中では「１時間」）毎に、それぞれ別々の差分ビットマップ６Ａを使用することができる。即ち、９時−１０時では、差分ビットマップ６Ａ（9:00-10:00）を使用して差分を管理し、これに続く１０時−１１時では、別の差分ビットマップ６Ａ（10:00-11:00）を使用して差分を管理することができる。
【００３３】
別の一つの例では、差分ビットマップ６Ａの切替後に蓄積されたジャーナルデータ量を別途管理しておき、その管理されるジャーナルデータ量がジャーナルボリューム５の全容量の所定割合に達した場合に、別の差分ビットマップ６Ａに切り替える。
【００３４】
目標保護期間とは、正ボリューム３の記憶内容を過去に戻すことが可能な期間を意味し、例えば、「３時間」のように予め設定される。正ボリューム３の記憶内容が実際に保護される時間と目標保護期間とは基本的に一致するが、後述の実施例のように、目標保護期間と実際の保護期間とか不一致の場合もある。
【００３５】
目標保護期間を経過したジャーナルデータ５Ａは、順番に基底ボリューム４に書き込まれていく。これにより、基底ボリューム４の記憶内容は、正ボリューム３の記憶内容から目標保護期間だけ遅れて追従することになる。
【００３６】
通常運用時の動作を説明する。まず最初に、ユーザは、保護対象となる正ボリューム３及び目標保護期間を指定する。記憶制御装置１は、正ボリューム３に記憶されている全データを基底ボリューム４にコピーする。図１（ａ）に示す例では、９時の時点におけるデータが基底ボリューム４にコピーされたものとする。即ち、図１（ａ）では、ＣＤＰ開始時刻が９時の場合を示す。
【００３７】
ホスト２は、正ボリューム３にアクセスし、データを読み書きする。ホスト２から送信されたライトデータが正ボリューム３に書き込まれた場合（Ｓ１）、つまり、正ボリューム３を対象とするライト要求がホスト２から発行された場合、記憶制御装置１は、そのライト要求に基づいてジャーナルデータ５Ａを生成する。生成されたジャーナルデータ５Ａは、ジャーナルボリューム５に保存される（Ｓ２）。
【００３８】
なお、正ボリューム３のある時点の記憶内容を基底ボリューム４にコピーさせている最中に、ホスト２が正ボリューム３にデータを書き込む場合もある。正ボリューム３から基底ボリューム４へのコピーが完了していない未コピー領域について、ホスト２が新たなデータの書込みを要求した場合を説明する。
【００３９】
この場合、一つの例として、記憶制御装置１は、未コピー領域に記憶されているデータ（旧データ）を正ボリューム３から基底ボリューム４にコピーさせた後で、ホスト２からの新たなデータを正ボリューム３に書き込む。
【００４０】
別の一つの例として、正ボリューム３から基底ボリューム４へのコピー中に発行された新たなライト要求のライトデータを、「新データ」のような属性をつけてキャッシュメモリ上で管理し、未コピー領域に記憶されている旧データと別に管理する方法もある。この例では、正ボリューム３から基底ボリューム４への旧データのコピーと、ホスト２からのライト要求の処理（新データの上書き）とを非同期で行うことができる。なお、さらに別の方法もある。
【００４１】
ホスト２によって正ボリューム３が更新された位置は、ライト要求の発行時刻が含まれる期間（区間）を担当する差分ビットマップ６Ａに記憶される（Ｓ３）。更新位置は、例えば、スロット単位やブロック単位等のように予め設定される所定サイズ単位で管理することができる。
【００４２】
時間が経過して、最初の差分ビットマップ６Ａの担当期間を過ぎた場合、記憶制御装置１は、別の新たな差分ビットマップ６Ａに切り替えて、ホスト２によって正ボリューム３が更新された位置を管理する。
【００４３】
ＣＤＰ開始時刻から目標保護期間を経過すると、目標保護期間を経過したジャーナルデータ５Ａは、基底ボリューム４に順番に書き込まれる（Ｓ４）。つまり、現在時刻が１２時を過ぎた場合、現在時刻（１２時）よりも目標保護期間（３時間）だけ前に生成されたジャーナルデータは、生成された順番で基底ボリューム４に書き込まれる。基底ボリューム４に書き込まれたジャーナルデータ５Ａは、破棄される。
【００４４】
本明細書では、ジャーナルデータ５Ａを基底ボリューム４または正ボリューム３に書き込んで、基底ボリューム４または正ボリューム３の記憶内容を更新させる動作を、「格上げ」または「反映」と呼ぶ場合がある。
【００４５】
図１ではさらに時間が経過した様子が示されている。現在時刻が「13:05」になった場合、「9:55」から「10:05」までに作成されたジャーナルデータ５Ａは、目標保護期間を経過したことになるので、基底ボリューム４に書き込まれる。これにより、基底ボリューム４の記憶内容は、現在時刻から３時間前の「10:05」における正ボリューム３の記憶内容と一致する。このように、通常運用時には、基底ボリューム４の記憶内容は、目標保護期間だけ遅れて、正ボリューム３の記憶内容に追従する。
【００４６】
各区間の差分ビットマップ６Ａのうち、自身の管理下にあるジャーナルデータ５Ａが全て基底ボリューム４に書き込まれた区間差分ビットマップ６Ａは、その記憶内容が消去されて再利用される。例えば、現在時刻が「13:05」の場合、基底点は３時間前の「10:05」となっている。「9:00−10:00」の区間を担当する差分ビットマップ６Ａ（9:00-10:00）に関連する各ジャーナルデータ５Ａは、既に基底ボリューム４に書き込まれている。
【００４７】
従って、この差分ビットマップ６Ａ（9:00-10:00）は、既に用済みであり、保存しておく必要がない。そこで、差分ビットマップ６Ａ（9:00-10:00）の記憶内容は消去され、別の新たな区間の差分を管理するために再利用される。
【００４８】
図１（ｂ）を参照して、リストア時の動作を説明する。例えば、ホスト２上のアプリケーションプログラムで発生した障害やユーザの誤操作等により、正ボリューム３の記憶内容に誤りを生じる可能性がある。
【００４９】
正ボリューム３の記憶内容に誤りを生じた場合、ユーザは、正ボリューム３の記憶内容を所望の時点まで復元させるための指示を発行する。ユーザは、保護期間内の任意の時刻を復元点（リストア点）として選択することができる。
【００５０】
リストア処理の様子を説明する前に、正ボリューム３の記憶内容の変化を説明する。基底点（図中、ＢＰ）における正ボリューム３の記憶内容を、図１（ｂ）中に３（１）として示す。この基底点ＢＰにおける正ボリューム３（１）の記憶内容は、基底ボリューム４にコピーされている。ここでは、説明の便宜上、正ボリューム３の全記憶領域が４つの領域に分割されている場合を例に挙げる。図１（ｂ）に示す例では、４つの領域のそれぞれが更新単位となっている。各領域を特定できるように、図１（ｂ）では、Ｘ軸座標及びＹ軸座標をそれぞれ示してある。正ボリューム３には、時間の経過に応じて（１）〜（５）の符号を添える。
【００５１】
基底点ＢＰから時間が経過したある時刻の正ボリューム３（２）に着目する。上位装置２は、正ボリューム３（２）の左上の領域（１，１）に新データ「Ａ」を書き込む。これにより、正ボリューム３（２）の左上の領域（１，１）には、旧データ「ａ」に代えて新データ「Ａ」が記憶される。
【００５２】
さらに時間が経過した別のある時刻の正ボリューム３（３）に着目する。上位装置２は、正ボリューム３（３）の右下の領域（２，２）に新データ「Ｄ」を書き込む。これにより、正ボリューム３（３）の右下の領域（２，２）には、旧データ「ｄ」に代えて新データ「Ｄ」が記憶される。
【００５３】
以下同様に、上位装置２は、正ボリューム３（４）の右上の領域（２，１）に新データ「Ｂ」を書き込む。これにより、正ボリューム３（４）の右上の領域（２，１）には、旧データ「ｂ」に代えて新データ「Ｂ」が記憶される。
【００５４】
最新点（ＬＰ）において、上位装置２は、正ボリューム３（５）の右下の領域（２，２）に新データ「Ｅ」を書き込む。これにより、右下の領域（２，２）には、旧データ「Ｄ」に代えて新データ「Ｅ」が記憶される。
【００５５】
ユーザまたはアプリケーションプログラムは、基底点ＢＰと最新点ＬＰとの間の任意の時刻を指定してリストアを要求することができる。ここでは、説明の便宜上、データ「Ｄ」が正ボリューム３（３）に書き込まれた時刻とデータ「Ｂ」が正ボリューム３（４）に書き込まれた時刻との間で、復元点（図中、ＲＰ）が指定されたものとする。
【００５６】
記憶制御装置１は、復元点ＲＰから最新点ＬＰまでの第１期間において、正ボリューム３が更新された位置をそれぞれ管理する各区間差分ビットマップ６Ａの論理和を求めることにより、差分ビットマップ６Ｂを得る。同様に、記憶制御装置１は、基底点ＢＰから復元点ＲＰまでの第２期間において、正ボリューム３が更新された位置をそれぞれ管理する各区間差分ビットマップ６Ａの論理和を求めることにより、別の差分ビットマップ６Ｃを得る。
【００５７】
差分ビットマップ６Ｂは、復元点ＲＰから最新点ＬＰまでの第１期間で生じた全ての更新位置を示している。従って、差分ビットマップ６Ｂを、例えば、復元点以降の差分ビットマップと呼ぶことができる。別の差分ビットマップ６Ｃは、基底点ＢＰから復元点ＲＰまでの第２期間で生じた全ての更新位置を示している。従って、差分ビットマップ６Ｃは、例えば、復元点以前の差分ビットマップと呼ぶことができる。
【００５８】
図中、各差分ビットマップ６Ｂ，６Ｃにおいて、更新された領域には斜線を付し、更新されていない領域を空白で示す。復元点以降の差分ビットマップ６Ｂで更新されている領域（斜線部分の領域）は、第１更新領域に該当する。復元点以前の差分ビットマップ６Ｃで更新されている領域は、第２更新領域に該当する。各差分ビットマップ６Ｂ，６Ｃの両方でそれぞれ更新されている領域（２，２）は、第３更新領域に該当する。また、各差分ビットマップ６Ｂ，６Ｃのいずれにおいても更新されていない領域（１，２）は、未更新領域に該当する。
【００５９】
二つの差分ビットマップ６Ｂ，６Ｃに基づいて、正ボリューム３の全記憶領域を以下の４種類のグループに分けて考えることができる。各グループの性質に応じて正ボリューム３、基底ボリューム４及びジャーナルボリューム５を使用することにより、効率的なリストア処理を実行することができる。以下の説明では、各グループ７Ｂ，７Ｐ，７Ｃ等を複数の集合記号で表現する場合がある。また、理解のために、各グループに属する領域を、図１中に示す領域の座標を用いて示すことがある。
【００６０】
第１グループ７Ｂは、復元点以降の差分ビットマップ６Ｂによって更新の発生が検出された領域である。第１グループ７Ｂは、第１更新領域から構成される。第１グループ７Ｂに属する領域では、基本的に、基底ボリューム４のデータを利用可能である。特に、第１グループ７Ｂにのみ属する領域（７Ｂ−７Ｐ，（¬７Ｐ）∧７Ｂ）では、基底ボリューム４に記憶されているデータをそのまま使用できる。即ち、図１中で第１グループ７Ｂにのみ属する領域（２，１）は、復元点以降でのみ更新されており、復元点以前で更新されていない。従って、第１グループ７Ｂにのみ属する領域（２，１）では、基底ボリューム４のデータ「ｂ」と復元点におけるデータ「ｂ」とは一致する。
【００６１】
第２グループ７Ｐは、復元点以前の差分ビットマップ６Ｃによって更新の発生が検出された領域である。第２グループ７Ｐは、第２更新領域から構成される。第２グループ７Ｐに属する領域では、基本的に、正ボリューム３のデータを利用可能である。特に、第２グループ７Ｐにのみ属する領域（７Ｐ−７Ｂ，７Ｐ∧（¬７Ｂ））では、正ボリューム３に記憶されているデータをそのまま使用できる。即ち、図１中で第２グループ７Ｐにのみ属する領域（１，１）は、復元点以前でのみ更新されており、復元点以降では更新されていない。従って、第２グループ７Ｐにのみ属する領域（１，１）では、正ボリューム３のデータ「Ａ」と復元点におけるデータ「Ａ」とは一致する。
【００６２】
第３グループ７Ｊは、第１グループ７Ｂ及び第２グループ７Ｐの両方にまたがって属する領域である。第３グループ７Ｊは、第３更新領域から構成される。第３更新領域７Ｊに属する領域（７Ｐ∧７Ｂ）では、正ボリューム３及び基底ボリューム４のいずれのデータも、そのままでは使用することはできない。図１中で第３グループ７Ｊに属する領域（２，２）は、復元点の前後でそれぞれ更新されているためである。従って、第３グループ７Ｊに属する領域（２，２）では、まず、基底ボリューム４のデータ「ｄ」を正ボリューム３にコピーし（「Ｅ」→「ｄ」）、次に、その領域（２，２）に関する復元点までのジャーナルデータ５Ａを、領域（２，２）に順番に上書きする（「ｄ」→「Ｄ」）。これにより、第３グループ７Ｊに属する領域のデータは、復元点におけるデータに一致する。
【００６３】
第４グループは、正ボリューム３の全記憶領域のうち、前記各グループ７Ｂ，７Ｐ，７Ｊのいずれにも属さない領域（（７Ｐ∨７Ｂ）ｃ，¬（７Ｐ∨７Ｂ））である。第４グループに属する領域では、復元点の前後いずれにもおいても更新されていないため、正ボリューム３または基底ボリューム４のいずれかに記憶されているデータを使用できる。図１中で第４グループに属する領域（１，２）では、正ボリューム３に記憶されているデータと基底ボリューム４に記憶されているデータと復元点におけるデータとは、いずれも「ｃ」となり、一致している。
【００６４】
そこで、リストア時に記憶制御装置１は、復元点以降の差分ビットマップ６Ｂを用いることにより、第１グループ７Ｂに属する領域（２，１），（２，２）について、基底ボリューム４から正ボリューム３にデータをコピーさせる。上述の通り、第２グループ７Ｐに属する領域では、基本的に正ボリューム３のデータを利用できるため、基底ボリューム４から正ボリューム３にデータをコピーする必要はない。そして、記憶制御装置１は、第３グループ７Ｊに属する領域（２，２）について、復元点までのジャーナルデータ５Ａを順番に読み出して上書きする。
【００６５】
なお、第４グループに属する領域（１，２）は、復元点の前後いずれにもおいても更新されていないため、正ボリューム３または基底ボリューム４のいずれのデータも、復元点のデータとして使用できる。そこで、記憶制御装置１は、復元点におけるデータとして、第４グループに属する領域について正ボリューム３のデータを使用する。これにより、記憶制御装置１は、（１）第１グループ７Ｂに属する領域については、基底ボリューム４から正ボリューム３にデータをコピーし、（２）第３グループ７Ｊに属する領域については、基底ボリューム４から正ボリューム３にデータをコピーした後で、ジャーナルデータを上書きするだけで、（３）リストアを完了させることができる。
【００６６】
以上の説明では、正ボリューム３の記憶内容を最新点の記憶内容から復元点の記憶内容に戻す場合を説明した。しかし、後述の実施例から明らかとなるように、種々の方法で復元点における記憶内容を復元させることができる。
【００６７】
例えば、図１（ｂ）の下側に示すように、仮想的なボリューム９に復元点における記憶内容を再現することもできる。仮想ボリューム９は、参照用テーブル８を介して、正ボリューム３及び基底ボリューム４等に対応付けられている。
【００６８】
即ち、仮想ボリューム９内の全領域のうち、第１グループ７Ｂにのみ属する領域は基底ボリューム４に、第２グループ７Ｐにのみ属する領域は正ボリューム３に、第４グループに属する領域は正ボリューム３または基底ボリューム４のいずれかに、それぞれ対応付けられている。
【００６９】
ホスト２が第３グループ７Ｊに属する領域にアクセスした場合、記憶制御装置１は、その領域に対応する基底ボリューム４のデータを正ボリューム３にコピーした後で、その領域に関する復元点までのジャーナルデータを順番に上書きすることもできる。
【００７０】
ホスト２が第１グループ７Ｂに属する領域にアクセスした場合、記憶制御装置１は、その領域に対応する基底ボリューム４のデータを正ボリューム３にコピーする。なお、ライトアクセスの場合、記憶制御装置１は、基底ボリューム４に記憶されているデータを正ボリューム３にコピーした後で、そのライトアクセスを受け付け、新たなライトデータを格納する。
【００７１】
このように仮想ボリューム９を用いることにより、データコピーを行う前に、リストアの完了をホスト２に通知することができる。そして、ホスト２からアクセスされた際にデータのコピー等を行うだけでよく、リストアに要する時間を短縮できる。
【００７２】
本実施形態は、上述のように構成されるため、以下の効果を奏する。本実施形態では、通常運用時には、目標保護期間を経過したジャーナルデータ５Ａを基底ボリューム４に書き込むことにより、基底ボリューム４の記憶内容を正ボリューム３から目標保護期間だけ遅れた記憶内容として、遷移させることができる。従って、リストア可能な期間の始点である基底点を、現在時刻から一定時間だけ遅らせて追従させることができる。基底ボリューム４に書き込まれたジャーナルデータ５Ａは破棄されるため、ジャーナルボリューム５がジャーナルデータ５Ａで満杯になる可能性を低減することができる。
【００７３】
本実施形態では、予め設定される複数の区間毎にそれぞれ別々の差分ビットマップ６Ａを割り当てて、正ボリューム３と基底ボリューム４との間の差分を各区間毎に管理する構成である。従って、差分ビットマップ６Ａに対応付けられる全てのジャーナルデータ５Ａが基底ボリューム４に書き込まれた後で、その差分ビットマップ６Ａの記憶内容を消去して（ゼロクリアして）、再利用することができる。これにより、不要な差分ビットマップ６Ａが記憶制御装置１のメモリ領域に記憶されたままになるのを防止し、かつ、記憶制御装置１のメモリ領域を効率的に使用することができる。
【００７４】
これに対し、もしも、全区間を通じて一つの差分ビットマップを用いる場合、つまり、単一の差分ビットマップによって正ボリューム３と基底ボリューム４との間の差分を管理する場合を考える。この場合、いったんビット１に設定されると、ビット０に戻すことはできず、余計な差分ビット（ビット１に設定されているビット）が時間の経過につれて蓄積されていく。
【００７５】
基底ボリューム４に書き込まれたジャーナルデータ５Ａに対応する差分ビットは「０」に戻しても構わないが、その後に同一の場所に別のデータが上書きされる可能性があるため、ビット１からビット０に戻すことはできない。
【００７６】
従って、単一の差分ビットマップを用いる場合、時間の経過につれて余分な差分ビットが蓄積されていくため、リストア時に基底ボリューム４から正ボリューム３にコピーされるデータ量が増大する。この結果、正ボリューム３の記憶内容を基底点まで戻すための時間が長くなり、リカバリに長時間を必要とする。本実施形態では、区間毎にそれぞれ別々の差分ビットマップ６Ａを用いるため、不要な差分ビットが蓄積されるのを防止し、リストア時のコピー量を低減し、リカバリ時間を短縮することができる。さらに、本実施形態では、不要な差分ビットマップ６Ａの記憶内容を消去して再利用できるため、記憶制御装置１のメモリ領域を効率的に使用できる。
【００７７】
本実施形態では、正ボリューム３と基底ボリューム４との間に生じる差分を、復元点の前後でそれぞれ把握し、正ボリューム３の各領域の性質に応じてデータのコピー等を制御する。従って、リストア時に基底ボリューム４から正ボリューム３にコピーされるデータ量及びジャーナルデータの書込み量をそれぞれ低減することができ、リストア時間を短縮することができる。
【００７８】
本実施形態の記憶制御装置１は、図１に示す構成に限られず、後述の実施例で明らかにされる構成を含むこともできる。また、ジャーナルデータ５Ａの管理や差分ビットマップ６Ａの管理は、記憶制御装置１の外部で行うこともできる。例えば、ホスト２やホスト２に接続された別のコンピュータ装置によって、ジャーナル管理及び／または差分管理を行う構成とすることもできる。以下、本発明の実施例を詳細に説明する。
【実施例１】
【００７９】
図２は、本実施例による記憶制御装置１０を含む情報処理システムのハードウェア構成を模式的に示す説明図である。説明の前に、図１に示す実施形態と以下に述べる実施例との対応関係を明らかにする。
【００８０】
「記憶制御装置」としての記憶制御装置１０は図１中の記憶制御装置１に、「上位装置」としてのホスト２０は図１中のホスト２に、それぞれ対応する。「管理装置」と表現可能な管理サーバ３０は、図１では省略されている。
【００８１】
「第１記憶領域」または「第１ボリューム」としての正ボリューム２３０Ｐ（図４参照）は、図１中の正ボリューム３に対応する。「第２記憶領域」または「第２ボリューム」としての基底ボリューム２３０Ｂ（図４参照）は、図１中の基底ボリューム４に対応する。「更新履歴管理部」または「第３ボリューム」としてのジャーナルボリューム２３０Ｊ（図４参照）は、図１中のジャーナルボリューム５に対応する。
【００８２】
「ジャーナルデータ」としてのジャーナルデータＪＤ（図４参照）は、図１中のジャーナルデータ５Ａに対応する。「第１差分ビットマップ」としての区間差分ビットマップＢＭ２０（図４参照）は、図１中の区間差分ビットマップ６Ａに対応する。「制御部」としてのコントローラ１００は、図１中では図示を省略されている。
【００８３】
図４に示される「第２差分ビットマップ」としての差分コピー用差分ビットマップ（あるいは形成コピー用差分ビットマップ）ＢＭ１０は、図１中の差分ビットマップ６Ｂに対応する。
【００８４】
なお、後述のテンポラリリストアは「第１リストア」と、後述の「コンプリートリストア」は「第２リストア」と、それぞれ呼び変えることもできる。テンポラリリストアとは、復元点における記憶内容を一時的にリカバリするためのリストアであり、コンプリートリストアとは、リカバリされた記憶内容を確定させるための処理である。テンポラリリストアを一回または複数回実行させた後で、ユーザまたはアプリケーションプログラムは、コンプリートリストアを指示することができる。あるいは、テンポラリリストアを経ずに直接コンプリートリストアの実行を指示することもできる。
【００８５】
図１に戻る。ホスト２０と記憶制御装置１０とは、例えば、ＳＡＮ（Storage Area Network）のような通信経路ＣＮ１を介して、双方向通信可能に接続されている。ホスト２０は、例えば、サーバコンピュータ、メインフレームコンピュータ、ワークステーション等のようなコンピュータ装置として構成される。
【００８６】
ホスト２０がメインフレームコンピュータである場合、例えば、FICON（Fibre Connection：登録商標）、ESCON（Enterprise System Connection：登録商標）、ACONARC（Advanced Connection Architecture：登録商標）、FIBARC（Fibre Connection Architecture：登録商標）等の通信プロトコルに従って、データ転送が行われる。
【００８７】
上述の専用プロトコル以外に、ホスト２０と記憶制御装置１０とは、例えば、iSCSI（internet Small Computer System Interface）、TCP/IP（Transmission Control Protocol/Internet Protocol）、FCP（Fibre Channel Protocol）のような各種通信プロトコルを用いてデータ転送を行うこともできる。
【００８８】
記憶制御装置１０は、システム内の記憶資源を一元的に管理する役割を果たすこともできる。例えば、記憶制御装置１０は、システム内に散在する物理的な記憶資源を仮想化して、ホスト２０に提供する機能を備えることができる。即ち、記憶制御装置１０は、外部記憶制御装置４０内の記憶資源を、それがあたかも記憶制御装置１０内の記憶資源であるかのように、ホスト２０に見せかけることができる。このように、記憶制御装置１０は、システム内に散在する記憶資源を仮想化するための仮想化装置としての側面を備えることができる。この側面に注目するならば、記憶制御装置１０は、必ずしもディスクアレイ装置等のように構成される必要はなく、例えば、ファイバチャネルスイッチ等のような別の装置として構成することもできる。
【００８９】
記憶制御装置１０の構成を説明する。記憶制御装置１０は、コントローラ１００と記憶装置ユニット（以下、ＨＤＵ）とに大別することができる。コントローラ１００は、記憶制御装置１０の動作を制御するものである。コントローラ１００は、例えば、チャネルアダプタ（以下、ＣＨＡ）１１０，ディスクアダプタ（以下、ＤＫＡ）１２０，キャッシュメモリ（図中、ＣＭ）１３０，共有メモリ（図中、ＳＭ）１４０，接続制御部１５０及びサービスプロセッサ（以下、ＳＶＰ）１６０を備えて構成される。
【００９０】
ＣＨＡ１１０は、ホスト２０との間のデータ通信を制御するためのもので、例えば、マイクロプロセッサやローカルメモリ等を備えたコンピュータ装置として構成される。各ＣＨＡ１１０は、少なくとも一つ以上の通信ポート１１１を備えている。通信ポート１１１には、例えば、WWN（World Wide Name）のような識別情報が設定される。ホスト２０と記憶制御装置１０とが、iSCSI（internet Small Computer System Interface）等を用いてデータ通信を行う場合、通信ポート１１１には、ＩＰ（Internet Protocol）アドレス等の識別情報が設定される。
【００９１】
図２中には、２種類のＣＨＡ１１０が示されている。図２中左側に位置する一方のＣＨＡ１１０は、ホスト２０からのコマンドを受信して処理するためのものであり、その通信ポート１１１は、ターゲットポートとなっている。図２中右側に位置する他方のＣＨＡ１１０は、外部記憶制御装置４０にコマンドを発行するためのものであり、その通信ポート１１１は、イニシエータポートとなっている。
【００９２】
ＤＫＡ１２０は、ＨＤＵ２００内の各ディスクドライブ２１０との間のデータ通信を制御するためのもので、ＣＨＡ１１０と同様に、マイクロプロセッサやローカルメモリ等を備えたコンピュータ装置として構成される。
【００９３】
各ＤＫＡ１２０と各ディスクドライブ２１０とは、例えば、ファイバチャネルプロトコルに従って、ブロック単位のデータ転送を行う。コントローラ１００が各ディスクドライブ２１０にアクセスするための経路は、冗長化されている。いずれか一方のＤＫＡ１２０や通信経路に障害が発生した場合でも、コントローラ１００は、他方のＤＫＡ１２０や通信経路を用いて、ディスクドライブ２１０にアクセス可能である。同様に、ホスト２０とコントローラ１００との間の経路、外部記憶制御装置４０とコントローラ１００との間の経路も冗長化することができる。
【００９４】
ＣＨＡ１１０及びＤＫＡ１２０の動作を簡単に説明する。ＣＨＡ１１０は、ホスト２０から発行されたリードコマンドを受信すると、リードコマンドを共有メモリ１４０に記憶させる。ＤＫＡ１２０は、共有メモリ１４０を随時参照しており、未処理のリードコマンドを発見すると、ディスクドライブ２１０からデータを読み出して、キャッシュメモリ１３０に記憶させる。ＣＨＡ１１０は、キャッシュメモリ１３０に移されたデータを読み出し、ホスト２０に送信する。
【００９５】
ＣＨＡ１１０は、ホスト２０から発行されたライトコマンドを受信すると、ライトコマンドを共有メモリ１４０に記憶させる。ＣＨＡ１１０は、受信したライトデータをキャッシュメモリ１３０に記憶させる。ＣＨＡ１１０は、キャッシュメモリ１３０にライトデータを記憶させた後、ホスト２０に書込み完了を報告する。ＤＫＡ１２０は、共有メモリ１４０に記憶されたライトコマンドに従って、キャッシュメモリ１３０に記憶されたライトデータを読出し、書込み対象のボリューム２３０Ｐに対応するディスクドライブ２１０に記憶させる。
【００９６】
キャッシュメモリ１３０は、例えば、ホスト２０から受信したライトデータ等を記憶するものである。キャッシュメモリ１３０は、例えば不揮発メモリから構成される。共有メモリ１４０は、例えば不揮発メモリから構成される。共有メモリ１４０には、制御情報や管理情報等が記憶される。
【００９７】
共有メモリ１４０及びキャッシュメモリ１３０は、同一のメモリ基板上に混在して設けることができる。あるいは、メモリの一部をキャッシュ領域として使用し、他の一部を制御領域として使用することもできる。
【００９８】
接続制御部１５０は、各ＣＨＡ１１０と、各ＤＫＡ１２０と、キャッシュメモリ１３０及び共有メモリ１４０をそれぞれ接続させるものである。これにより、全てのＣＨＡ１１０，ＤＫＡ１２０は、キャッシュメモリ１３０及び共有メモリ１４０にそれぞれアクセス可能である。なお、接続制御部１５０は、例えばクロスバスイッチ等として構成することができる。
【００９９】
ＳＶＰ１６０は、ＬＡＮ等の内部ネットワークＣＮ４を介して、各ＣＨＡ１１０にそれぞれ接続されている。また、ＳＶＰ１６０は、ＬＡＮ等の通信ネットワークＣＮ２を介して、管理サーバ３０に接続可能である。ＳＶＰ１６０は、記憶制御装置１０内部の各種状態を収集し、管理サーバ３０に提供する。なお、ＳＶＰ１６０は、ＣＨＡ１１０及びＤＫＡ１２０の両方に接続されてもよい。ＳＶＰ１６０は、共有メモリ１４０を介して、各種のステータス情報を収集可能であるため、ＳＶＰ１６０とＣＨＡ１１０とを接続するだけでも良い。
【０１００】
コントローラ１００の構成は、上述した構成に限定されない。例えば、一つまたは複数の制御基板上に、ホスト２０との間のデータ通信を行う機能と、外部記憶制御装置４０との間のデータ通信を行う機能と、ディスクドライブ２１０との間のデータ通信を行う機能と、データを一時的に保存する機能と、構成情報等を書換可能に保存する機能とを、それぞれ設ける構成でもよい。
【０１０１】
ＨＤＵ２００の構成について説明する。ＨＤＵ２００は、複数のディスクドライブ２１０を備えている。各ディスクドライブ２１０は、例えば、ハードディスクドライブ、フラッシュメモリデバイス、光ディスクドライブ、光磁気ディスクドライブ、ホログラフィックメモリデバイス等として実現される。要するに、ＨＤＵ２００は、書換可能な不揮発性の記憶装置を備えている。
【０１０２】
ＲＡＩＤ構成等によっても相違するが、例えば、３個１組や４個１組等の所定数のディスクドライブ２１０によって、パリティグループ２２０が構成される。パリティグループ２２０は、パリティグループ２２０内の各ディスクドライブ２１０がそれぞれ有する物理的記憶領域を仮想化したものである。パリティグループ２２０の有する物理的記憶領域には、所定サイズまたは可変サイズの論理デバイス（LDEV：Logigal DEVice）２３０を設定できる。論理デバイス２３０は、LUN（Logical Unit Number ）に対応付けられて、ホスト２０に論理ボリュームとして提供される。以下の説明では、論理デバイス２３０を論理ボリューム２３０またはボリューム２３０と呼ぶ。
【０１０３】
外部記憶制御装置４０は、記憶制御装置１０と同様に、例えば、コントローラ４１とＨＤＵ４２とを備えている。ＨＤＵ４２の有する一つまたは複数のディスクドライブを用いて、論理ボリュームが設けられる。外部記憶制御装置４０は、記憶制御装置１０から見た場合に記憶制御装置１０の外部に存在するため、外部記憶制御装置と呼ばれる。
【０１０４】
外部記憶制御装置４０の有する論理ボリュームを、記憶制御装置１０内に仮想的に設けられる中間記憶デバイスにマッピングし、この中間記憶デバイス上に論理ボリューム２３０を設定することにより、記憶制御装置１０は、外部記憶制御装置４０の有する論理ボリュームを自分自身の内部に取り込んで利用することができる。
【０１０５】
管理サーバ３０は、記憶制御装置１０の設定や構成等を管理する装置である。ユーザは、管理サーバ３０を介して、例えば、ＣＤＰ対象のボリュームの設定、目標保護期間の設定等を記憶制御装置１０に指示する。なお、管理サーバ３０の機能を、ホスト２０内に設ける構成でもよい。
【０１０６】
図３は、ソフトウェア構成を模式的に示す説明図である。ホスト２０内には、不図示のアプリケーションプログラムの他に、例えば、管理部２１を設けることができる。管理部２１は、ＣＤＰに関する種々の設定を行うためのプログラムである。管理サーバ３０内にも、ＣＤＰに関する種々の設定を行うための管理部３１が設けられている。図３に示すように、ホスト２０及び管理サーバ３０の両方が記憶制御装置１０の設定変更等を行うことができるように構成してもよいし、いずれか一方のみが記憶制御装置１０の設定変更等を行うことができるように構成してもよい。
【０１０７】
図４は、記憶制御装置１０の論理的構成を模式的に示す説明図である。記憶制御装置１０内には、複数種類のボリューム２３０Ｐ，２３０Ｂ，２３０Ｊがそれぞれ少なくとも一つ以上設けられる。これらの各ボリューム２３０Ｐ，２３０Ｂ，２３０Ｊは、それぞれディスクドライブ２１０の有する物理的記憶領域を仮想化することにより生成される。
【０１０８】
正ボリューム２３０Ｐは、ＣＤＰ機能によって保護されるボリュームである。正ボリューム２３０Ｐは、ホスト２０によって使用される。基底ボリューム２３０Ｂは、正ボリューム２３０Ｐの過去の所定時点の記憶内容を維持するボリュームである。ジャーナルボリューム２３０Ｊは、正ボリューム２３０Ｐの更新時に生成されるジャーナルデータＪＤを記憶するためのボリュームである。
【０１０９】
なお、ジャーナルボリューム２３０Ｊには、チェックポイントマーカ（以下、ＣＰＭ）を記憶させることもできる。ＣＰＭとは、ユーザやアプリケーションプログラムが、復元可能点を予め明示的に指示するために使用するデータである。従って、ユーザやアプリケーションプログラムは、時刻またはＣＰＭのいずれかを用いて復元点を指定することができる。なお、ＣＰＭとジャーナルデータＪＤとを一緒に管理する場合でも、ＣＰＭに設定されているジャーナルシーケンス番号をメモリに記憶しておくことにより、速やかにＣＰＭを検索することができる。なお、設定されたＣＰＭを削除することもできる。例えば、ＣＰＭを設定可能な数に上限がある場合、指定されたＣＰＭを削除する。
【０１１０】
本実施例では、一つまたは複数のボリューム２３０ＰをＣＤＰ対象として保護することができる。つまり、一つのボリューム２３０Ｐだけを単独で保護することもできるし、あるいは、複数のボリューム２３０Ｐをグループ化し、グループ全体として保護することもできる。例えば、互いに関連するデータを記憶する複数のボリューム２３０Ｐをグループ化し、ＣＤＰによる保護動作を同期させることができる。
【０１１１】
基底ボリューム２３０Ｂは、正ボリューム２３０Ｐに一対一で対応付けられる。これに対し、一つのジャーナルボリューム２３０Ｊは、複数の正ボリューム２３０Ｐにそれぞれ対応付けることができる。
【０１１２】
記憶制御装置１０は、複数種類の差分ビットマップＢＭ１０〜ＢＭ３０を備える。差分コピー用の差分ビットマップＢＭ１０は、リストア時に、基底ボリューム２３０Ｂから正ボリューム２３０Ｐにデータを差分コピーする場合に使用される。このＢＭ１０は、リストアコピー用差分ビットマップと呼ぶこともできる。なお、差分コピー用のＢＭ１０は、正ボリューム２３０Ｐから基底ボリューム２３０Ｂに差分データをコピーする場合にも使用することができる。さらに、正ボリューム２３０Ｐから基底ボリューム２３０Ｂにデータをコピーする際に使用する形成コピー用差分ビットマップと、基底ボリューム２３０Ｂから正ボリューム２３０Ｐにデータをコピーする際に使用するリストアコピー用差分ビットマップとを別々に用意することもできる。
【０１１３】
区間差分ビットマップＢＭ２０は、予め設定される各区間毎に、正ボリューム２３０Ｐと基底ボリューム２３０Ｂとの間に生じる差分の位置をそれぞれ管理する。区間差分ビットマップＢＭ２０が使用されていた時間帯（例えば、ジャーナルシーケンス番号の範囲）を、その区間差分ビットマップＢＭ２０の属性として管理する。リカバリ中に使用される差分ビットマップＢＭ３０は、リカバリ中に発生する差分を管理するために使用される。リカバリ中であっても、ホスト２０はライト要求を発行する場合があり、このライト要求によって生じる正ボリューム２３０Ｐと基底ボリューム２３０Ｂとの間の差分は、差分ビットマップＢＭ３０により記憶される。この差分ビットマップＢＭ３０は、リカバリ中差分ビットマップと呼ぶこともできる。なお、ＣＤＰ停止中に使用するための差分ビットマップ等を備えることもできる。
【０１１４】
図５は、ジャーナルボリューム２３０Ｊの記憶構成を模式的に示す説明図である。ジャーナルボリューム２３０Ｊの記憶領域は、管理領域とデータ領域とに大別される。管理領域には、ジャーナルデータＪＤを管理するためのデータやＣＰＭが記憶される。データ領域には、ジャーナルデータＪＤのデータ本体が記憶される。
【０１１５】
ＣＰＭには、ラベルを設定することができる。ラベルとは、ＣＰＭ設定時に、ユーザが指定するデータである。例えば、ユーザは、アプリケーション名やホスト時刻等を含む文字列を、ラベルとしてＣＰＭに設けることができる。ＣＰＭに設けられるラベルは、ジャーナルデータＪＤ内に格納することができる。
【０１１６】
管理データ（メタデータ）としては、例えば、ボリューム番号（図中「ＶＯＬ＃」）、スタートＬＢＡ、ブロック数、シーケンス番号（図中「ＳＥＱ＃」）、時刻、データ、フラグ等を挙げることができる。
【０１１７】
「ボリューム番号」とは、正ボリューム２３０Ｐを特定するための情報である。「スタートＬＢＡ」とは、正ボリューム２３０Ｐに書き込まれるライトデータの先頭を示す論理ブロックアドレスである。「ブロック数」とは、ライトデータのデータサイズを示す情報である。「シーケンス番号」とは、ジャーナルデータＪＤに連番で設定される識別番号である。「時刻」とは、ライト要求が発行された時刻である。「データ」とは、データ本体の位置を示すポインタである。「フラグ」とは、そのジャーナルデータＪＤを有効なものとして扱うか無効として扱うかを示すための制御情報である。なお、ジャーナルデータの有効または無効を示すためのフラグに代えて、例えば、無効とするジャーナルデータのシーケンス番号を別に管理する方法でもよい。この場合、管理領域内の管理データ（メタデータ）を書き換える必要がないので、処理負荷を軽減することができる。
【０１１８】
フラグの値が有効に設定されているジャーナルデータＪＤは、目標保護期間を経過した後で、基底ボリューム２３０Ｂに書き込まれる。フラグの値が無効に設定されているジャーナルデータＪＤは、目標保護期間を経過した後でも、基底ボリューム２３０Ｂに書き込まれない。即ち、無効なジャーナルデータＪＤは、格上げ処理の対象外となる。格上げ処理とは、ジャーナルデータをボリュームに書き込んで、そのボリュームの記憶内容をアップデートさせる処理である。
【０１１９】
なお、ＣＰＭは、ジャーナルデータＪＤを管理する管理データと一緒に管理することもできるし、別のテーブルで管理することもできる。
【０１２０】
図６は、区間差分ビットマップＢＭ２０の使用方法を示す説明図である。例えば、「１時間」等のような、予め設定される所定の区間毎に、それぞれ一つずつの差分ビットマップＢＭ２０が使用される。
【０１２１】
図６に示す例では、「9:00-10:00」の区間でＢＭ２０（09:00-10:00）が、「10:00-11:00」の区間でＢＭ２０（10:00-11:00）が、「11:00-12:00」の区間でＢＭ２０（11:00-12:00）が、「12:00-13:00」の区間でＢＭ２０（12:00-13:00）が、「13:00-」の区間でＢＭ２０（13:00-）が、それぞれ使用されている。
【０１２２】
目標保護期間が「３時間」に設定される場合、現在時刻から３時間を経過したジャーナルデータＪＤは、基底ボリューム２３０Ｂに書き込まれる。基底ボリューム２３０Ｂに書き込まれたジャーナルデータＪＤは、破棄される。なお、本実施例では、経過時間に応じて格上げ処理を行う場合を説明しているが、これに代えて、例えば、ジャーナルボリューム２３０Ｊの使用率に応じて格上げ処理を行うこともできる。
【０１２３】
差分ビットマップＢＭ２０（09:00-10:00）で管理されている全てのジャーナルデータＪＤ（09:01-09:55）が、基底ボリューム２３０Ｂに書き込まれて破棄された場合、その差分ビットマップＢＭ２０（09:00-10:00）は、不要となる。この不要となる差分ビットマップＢＭ２０を、空きビットマップと呼ぶことがある。従って、差分ビットマップＢＭ２０（09:00-10:00）の記憶内容は消去され、別の新たな区間（14:00-15:00）を管理するための差分ビットマップＢＭ２０として再利用される。
【０１２４】
なお、通常運用中に目標保護期間ＴＰＴを変更することも可能である。例えば、通常運用中に目標保護期間が延長された場合、延長された時間分のジャーナルデータＪＤがジャーナルボリューム２３０Ｐに蓄積されるまで、格上げ処理は停止される。格上げ処理が停止される期間中、空きビットマップ（自分の管理下にある全てのジャーナルデータが格上げ処理された差分ビットマップＢＭ２０である）は生じない。また、目標保護期間の延長により、区間差分ビットマップＢＭ２０を切り替えるタイミングも変化する。
【０１２５】
そこで、第１の方法として、空きビットマップが生じるまで、現在使用中の区間差分ビットマップＢＭ２０を使用し続ける方法がある。
【０１２６】
第２の方法として、最も古い区間差分ビットマップＢＭ２０を２つ選択し、この選択された各区間差分ビットマップＢＭ２０をマージして一つの区間差分ビットマップＢＭ２０にまとめることにより、空きビットマップを一つ生成する方法がある。
【０１２７】
第３の方法として、目標保護期間ＴＰＴの延長の度合に応じて、所定個数ずつの区間差分ビットマップＢＭ２０を１つの差分ビットマップＢＭ２０にまとめることにより、空きビットマップを得る方法がある。例えば、目標保護期間ＴＰＴが２倍になった場合（ＴＰＴ＝２×ＴＰＴ）、２面ずつの区間差分ビットマップＢＭ２０をマージして１つにまとめ、目標保護期間ＴＰＴが３倍になった場合（ＴＰＴ＝３×ＴＰＴ）、３面ずつの区間差分ビットマップＢＭ２０をマージして１つにまとめる。目標保護期間ＴＰＴが１．５倍になった場合（ＴＰＴ＝１．５×ＴＰＴ）、３面の区間差分ビットマップＢＭ２０のうち２面の区間差分ビットマップＢＭ２０をマージして１つにまとめ、残りの区間差分ビットマップＢＭ２０はそのままとする。
【０１２８】
ここで、区間差分ビットマップＢＭ２０は、区間の数よりも２つ多い数だけ用意するのが好ましい。つまり、ｎ個の区間に分けて差分を管理する場合、差分ビットマップＢＭ２０の総数は、ｎ＋２個に設定されるのが好ましい。最古の差分ビットマップＢＭ２０を消去して再利用するには、幾らかの処理時間を必要とするためである。差分ビットマップＢＭ２０の切替タイミングに発行されるライト要求を確実に管理するために、区間数よりも２つだけ多い数の差分ビットマップＢＭ２０を用意するのが好ましい。
【０１２９】
図６に点線で示すように、基底ボリューム２３０Ｂには、差分ビットマップＢＭ２０（09:00-10:00）で管理される区間内のジャーナルデータＪＤ（09:01-09:55）が全て書き込まれる。これにより、基底ボリューム２３０Ｂの記憶内容は、「09:55」の時点における正ボリューム２３０Ｐの記憶内容に一致する。その後、時間が進んで「13:05」になると、その３時間前である「10:05」までのジャーナルデータＪＤが、基底ボリューム２３０Ｂに書き込まれる。これにより、基底ボリューム２３０Ｂの記憶内容は、正ボリューム２３０Ｐの「10:05」における記憶内容に一致する。
【０１３０】
このように、基底ボリューム２３０Ｂの記憶内容は、対応する正ボリューム２３０Ｐの記憶内容に、目標保護時間分だけ遅れて追従する。即ち、基底ボリューム２３０Ｂが示す記憶内容の時刻（この時刻を基底点と呼ぶ）は、実時間の進行につれてシフトする。基底点は、正ボリューム２３０Ｐの記憶内容を復元可能な期間の始点を示している。ＣＤＰ機能だけでは、基底点より過去に遡って正ボリューム２３０Ｐの記憶内容を復元させることはできない。なお、基底ボリューム２３０ＢへのジャーナルデータＪＤの書込みを停止させると、基底点のシフトも停止する。
【０１３１】
図７，図８に基づいて、ＣＤＰによって保護される期間の変化を説明する。図７は、ＣＤＰによる保護の開始から通常運用状態に移行するまでの保護期間の変化を示す説明図である。図７，図８において、ジャーナルデータＪＤの蓄積状態を斜線部で示し、削除されたジャーナルデータＪＤの範囲を黒く塗りつぶして示す。つまり、図中の斜線部は、ジャーナルデータＪＤによって回復可能な保護期間ＰＴを示す。
【０１３２】
図７を参照する。初期状態では、正ボリューム２３０Ｐ及び基底ボリューム２３０Ｂはいずれも設定されておらず、ＣＤＰによる保護は行われていない。ＣＤＰ形成の指示が与えられると、正ボリューム２３０Ｐ及び基底ボリューム２３０Ｂがそれぞれ設定され、ＣＤＰ形成が指示された時刻ｔｄ１における正ボリューム２３０Ｐの記憶内容を基底ボリューム２３０Ｂにコピーするための形成コピーが開始される。
【０１３３】
形成コピー中に、ホスト２０は、正ボリューム２３０Ｐを対象とするライト要求を発行できる。上述の通り、形成コピー中に、正ボリューム２３０Ｐから基底ボリューム２３０Ｂへのコピーが完了していない未コピー領域についてライト要求が発行された場合、例えば、一つの方法として、未コピー領域に記憶されているデータを基底ボリューム２３０Ｂにコピーした後で、そのライト要求を受け付ける。記憶制御装置１０は、ライト要求に基づいてジャーナルデータＪＤを生成し、ジャーナルボリューム２３０Ｊに記憶させる。形成コピーの完了時刻ｔｄ２において、ジャーナルボリューム２３０Ｊには、ＣＤＰ形成時刻ｔｄ１から形成コピー完了時刻ｔｄ２までの間に発行されたライト要求に関するジャーナルデータＪＤが保存される。従って、この場合の保護期間ＰＴ１は、ｔｄ１からｔｄ２までの期間となる。保護期間ＰＴ１は、未だ目標保護期間ＴＰＴに達していない。
【０１３４】
形成コピー完了後、記憶制御装置１０は通常運用状態１に移行する。ここで、図７中では、通常運用状態の時間変化を分かり易く示すために、「通常運用１」、「通常運用２」、「通常運用３」のように、時間の経過に応じて番号を添えている。
【０１３５】
通常運用１では、ジャーナルボリューム２３０Ｊには、ｔｄ１からｔｄ３までに発行されたライト要求に関するジャーナルデータＪＤが保存される。この場合の保護期間ＰＴ２は、ｔｄ１からｔｄ３までの期間である。保護期間ＰＴ２は、未だ目標保護期間ＴＰＴに達していない。
【０１３６】
通常運用２では、ｔｄ１からｔｄ４までに発行されたライト要求に関するジャーナルデータＪＤがジャーナルボリューム２３０Ｊに保存されている。この場合の保護期間ＰＴ３は、ｔｄ１からｔｄ４までの期間である。保護期間ＰＴ３は、目標保護期間ＴＰＴに一致したものとする。
【０１３７】
さらに時刻の進んだ通常運用３では、目標保護期間ＴＰＴを経過したジャーナルデータＪＤは、基底ボリューム２３０Ｂに書き込まれ、そして破棄される。即ち、最新のデータ時刻ｔｄ５から目標保護期間ＴＰＴだけ前の時刻以前の範囲に蓄積されたジャーナルデータＪＤ（Δｔｄａ＝（ｔｄ５−ＴＰＴ）−ｔｄ１）は、基底ボリューム２３０Ｂに順番に書き込まれていく。基底ボリューム２３０Ｂに書き込まれたジャーナルデータＪＤは、破棄される。ジャーナルボリューム２３０Ｊには、目標保護期間ＴＰＴ分のジャーナルデータＪＤが蓄積されているため、ユーザまたはアプリケーションプログラムは、現在時刻ｔｄ５から目標保護期間ＴＰＴだけ前の時刻の範囲内で、任意の時刻を復元点として指定することができる。
【０１３８】
図８は、コンプリートリストア後に保護期間が分断される様子を示す。図８の最上段に示すように、通常運用状態において何らかの障害が発生し、その障害発生がユーザまたはアプリケーションプログラムに認識されたと仮定する。
【０１３９】
ジャーナルボリューム２３０Ｊには、最古時刻ｔｄ９から最新時刻ｔｄ１１までの期間内に発行されたライト要求に関するジャーナルデータＪＤが保存されている。障害発生が認識された場合、テンポラリリストアの実行に先立って、ホスト２０から正ボリューム２３０Ｐへのアクセス要求は、その受付が停止され、かつ、ジャーナルデータＪＤを基底ボリューム２３０Ｂに書き込む処理も停止される。
【０１４０】
なお、必要に応じて、テンポラリリストアの実行の有無とは別に、ジャーナルデータＪＤを基底ボリューム２３０Ｂに書き込む処理のみを停止させることもできる。例えば、図７中のＳ１８に示す障害調査を実行する前に、格上げ処理を停止させるのが好ましい。格上げ処理を停止しない場合、障害を調査している間に保護期間が短縮されてしまうためである。従って、障害調査を開始する前に、格上げ処理を停止して保護期間が短縮されるのを防止する方が望ましい。但し、例えば、目標保護期間が十分長く設定されているような場合は、障害調査の開始前に格上げ処理を停止させる必要はない。
【０１４１】
時刻ｔｄ１１を復元点としてテンポラリリストアの実行が指示される。各区間差分ビットマップＢＭ２０をマージして差分コピー用差分ビットマップＢＭ１０が生成され、この差分ビットマップＢＭ１０を用いて、基底ボリューム２３０Ｂから正ボリューム２３０Ｐにデータが差分コピーされる。その後、最古時刻ｔｄ９から復元点ｔｄ１１までの間のジャーナルデータＪＤが基底ボリューム２３０Ｂに順番に書き込まれ、テンポラリリストアが完了する。
【０１４２】
時刻ｔｄ１２においてテンポラリリストアが完了し、リカバリされた記憶内容を確認するためのコマンドやデータがホスト２０から発行される。記憶制御装置１０は、テンポラリリストア後にホスト２０から発行されたライトデータに関するジャーナルデータＪＤを生成し、ジャーナルボリューム２３０Ｊに記憶させる。
【０１４３】
復元点ｔｄ１１のテンポラリリストアによるリカバリ内容に不満のある、ユーザやアプリケーションプログラムは、別の時刻ｔｄ１３を復元点として２度目のテンポラリリストアの実行を指示する。時刻ｔｄ１４において、２度目のテンポラリリストアの実行が指示されると、１度目のテンポラリリストア後に蓄積されていたジャーナルデータＪＤ（ｔｄ１２−ｔｄ１４の範囲内のジャーナルデータＪＤ）は、破棄される。
【０１４４】
２度目のテンポラリリストアが完了すると、ユーザまたはアプリケーションプログラムは、リカバリされた記憶内容を確認する。リカバリ後の時刻ｔｄ１５以降に、ホスト２０から発行されたライトデータに関してジャーナルデータＪＤが生成され、ジャーナルボリューム２３０Ｊに記憶される。
【０１４５】
ユーザまたはアプリケーションプログラムが２度目のテンポラリリストアの結果に満足した場合、ｔｄ１７において、コンプリートリストアの実行が指示される。コンプリートリストアの実行が指示されることにより、正ボリューム２３０Ｐの記憶内容は、復元点ｔｄ１３における記憶内容に確定される。記憶制御装置１０は、確定された復元点ｔｄ１３以降に蓄積された連続するジャーナルデータＪＤを全て破棄する。即ち、図示の例では、ｔｄ１３からｔｄ１０までの期間内のジャーナルデータＪＤが全て破棄される。
【０１４６】
記憶制御装置１０は、現在時刻ｔｄ１７から目標保護期間ＴＰＴだけ前の時刻ｔｄ１６以前に蓄積されたジャーナルデータＪＤは、順番に基底ボリューム２３０Ｂに書き込まれて破棄される。即ち、目標保護期間ＴＰＴを外れた範囲（ｔｄ１６−ｔｄ１０の範囲）のジャーナルデータＪＤは、格上げ処理された後で破棄される。
【０１４７】
コンプリートリストアの完了後に通常運用が開始される。通常運用では、ｔｄ１５以降に発行されるライト要求に関するジャーナルデータＪＤがジャーナルボリューム２３０Ｊに蓄積されていく。その一方、目標保護期間ＴＰＴを過ぎたジャーナルデータＪＤ（ｔｄ１８−ｔｄ１６）は、順番に基底ボリューム２３０Ｂに書き込まれて破棄される。
【０１４８】
ここで注目すべき点は、コンプリートリストアの実行によって、ＣＤＰによる保護期間ＰＴが２つに分断されるという点である。保護期間ＰＴは、より古い期間である第１期間（ｔｄ１６−ｔｄ１３）と、より新しい期間である第２期間（ｔｄ１５−ｔｄ１７）とに分割される。
【０１４９】
コンプリートリストアの実行後に、復元点ｔｄ１３以前のジャーナルデータＪＤ（ｔｄ１６−ｔｄ１３の範囲のジャーナルデータＪＤ）を、直ちに基底ボリューム２３０Ｂに書き込んで破棄するという構成も可能である。つまり、第１期間（ｔｄ１６−ｔｄ１３）内のジャーナルデータＪＤについて直ちに格上げ処理を実施し、基底点をｔｄ１６からｔｄ１３に進めることも可能である。
【０１５０】
しかし、本実施例のように、コンプリートリストアの復元点ｔｄ１３以前のジャーナルデータＪＤを保持しておくことにより、ユーザは、コンプリートリストアの実行後においても、ｔｄ１３以前の時刻へのリカバリを指示することができ、ユーザの使い勝手が向上する。
【０１５１】
複数の正ボリューム２３０ＰがＣＤＰグループとしてグループ化されている場合、２つの方法のいずれかでリカバリさせることができる。第１方法は、グループ単位でリストア制御を実施する方法である。第１方法では、ＣＤＰグループ内の全ての正ボリューム２３０Ｐについて、各保護期間ＰＴがそれぞれ一致するように、同期して制御する。
【０１５２】
第１方法では、ＣＤＰグループ内の全ての正ボリューム２３０Ｐは、同一時刻の記憶内容に復元され、かつ、ジャーナルデータＪＤの格上げ処理の停止及び再開も同時に実施される。第１方法の場合、ＣＤＰグループ内の全ての正ボリューム２３０Ｐの保護期間ＰＴは、図１３で説明したように遷移する。
【０１５３】
第２方法は、ボリューム単位でリストア制御を実施する方法である。第２方法では、ＣＤＰグループ内の各正ボリューム２３０Ｐは、それぞれ個別にテンポラリリストア及びコンプリートリストアを行うことができる。なお、ＣＤＰグループ内の複数の正ボリューム２３０Ｐについて、ボリューム単位のリストア制御を行うこともできる。
【０１５４】
正ボリューム２３０Ｐに物理的な障害が発生した場合の処理を説明する。この場合、まず、故障したディスクドライブ２１０を正常なディスクドライブ２１０と交換する。そして、ディスクドライブ交換後の１回目のテンポラリリストアでは、基底ボリューム２３０Ｂから正ボリューム２３０Ｐに全データをコピーし、さらに、ジャーナルデータＪＤを正ボリューム２３０Ｐに書き込む。２回目のテンポラリリストアからは、上述の通り、複数の区間差分ビットマップＢＭ２０をマージして差分コピー用の差分ビットマップＢＭ１０を生成し、この差分ビットマップＢＭ１０を用いて差分コピーを行うことにより、テンポラリリストアを実行する。
【０１５５】
なお、正ボリューム２３０Ｐとは別のボリュームにリストアすることもできる。例えば、１回目のテンポラリリストアでは、基底ボリューム２３０Ｂの全データを別ボリュームにコピーした後、ジャーナルデータＪＤを別ボリュームに書き込む。２回目のテンポラリリストアでは、上述した通り、区間差分ビットマップＢＭ２０をマージして得られる差分コピー用の差分ビットマップＢＭ１０を用いて差分コピーを行うことにより、テンポラリリストアを実行する。
【０１５６】
それぞれ保護期間の異なる複数の正ボリューム２３０ＰからＣＤＰグループが構成されている場合、幾つかの方法でリストアを管理することができる。例えば、第１の方法では、ＣＤＰグループ内の各正ボリューム２３０Ｐの保護期間が重なっている時点のみ、復元可能とする。第２の方法では、指定された復元点が保護期間に含まれている正ボリューム２３０Ｐのみ、復元させる。第３の方法では、指定された復元点が保護期間に含まれている正ボリューム２３０Ｐのみ、その指定された復元点に復元し、指定された復元点が保護期間に含まれていない他の正ボリューム２３０Ｐについては、それぞれの保護期間内で最も指定された復元点に近い時点に復元させる。
【０１５７】
図９に基づいて、リストア処理の概要を説明する。図９には、時間の経過につれて、正ボリューム２３０Ｐの記憶内容が基底点から最新点まで変化する様子が示されている。図９では、基底点ＢＰから最新点ＬＰまでの全期間を区間１〜区間４の４つに分割して管理している。
【０１５８】
第１区間１は区間差分ビットマップＢＭ２０（１）によって、第２区間２は区間差分ビットマップＢＭ２０（２）によって、第３区間３は区間差分ビットマップＢＭ２０（３）によって、第４区間４は区間差分ビットマップＢＭ２０（４）によって、それぞれ正ボリューム２３０Ｐに生じた差分（更新位置）が管理される。
【０１５９】
区間１を管理する区間差分ビットマップＢＭ２０（１）には、データ「１」の書込みに関する更新位置が記録される。区間２を管理する区間差分ビットマップＢＭ２０（２）には、データ「２」の書込みに関する更新位置が記録される。区間３を管理する区間差分ビットマップＢＭ２０（３）には、データ「３」，「４」，「５」の書込みに関する更新位置が記録される。区間４を管理する区間差分ビットマップＢＭ２０（４）には、データ「６」に関する更新位置が記録される。
【０１６０】
復元点として、データ「３」を正ボリューム２３０Ｐに書き込んだ直後が指定された場合、記憶制御装置１０は、各区間差分ビットマップＢＭ２０（３）及びＢＭ２０（４）の論理和を求めて、復元点以降の差分を示す差分ビットマップＢＭ１０を生成する。ビットマップ中の斜線部は更新のあった位置を示し、空白部は更新の無かった位置を示す。
【０１６１】
記憶制御装置１０は、差分ビットマップＢＭ１０に基づいて、復元点から最新点までの期間内に更新された領域についてのみ、基底ボリューム２３０Ｂから正ボリューム２３０Ｐにデータを差分コピーする。記憶制御装置１０は、復元点の前後でそれぞれ重複された領域（１，３）を検出し、この復元点の前後で更新された領域についてのみ、基底点から復元点までのジャーナルデータを所定の順序で上書きする。差分ビットマップＢＭ１０中の空白部分、即ち、復元点から最新点までの間に更新されなかった領域については、正ボリューム２３０Ｐのデータがそのまま使用される。
【０１６２】
即ち、復元点の前後いずれにおいても更新されなかった領域については、正ボリューム２３０Ｐのデータを使用し、復元点の前後でそれぞれ更新された領域については、基底ボリューム２３０Ｂから正ボリューム２３０Ｐにデータをコピーした後で、基底点から復元点までのジャーナルデータを正ボリューム２３０Ｐに適用する。また、復元点以降で更新されていない領域については、正ボリューム２３０Ｐのデータを使用する。復元点以前において更新されていない領域については、基底ボリューム２３０Ｂから正ボリューム２３０Ｐにデータをコピーする。
【０１６３】
なお、以上のリストア処理は一つの例であって、後述のように種々の方法で本発明を実現することができる。
【０１６４】
図１０〜図１２のフローチャートに基づいて、記憶制御装置１０の動作を説明する。以下の各フローチャートは、処理の概要を示しており、実際のコンピュータプログラムとは相違する場合がある。また、いわゆる当業者であれば、フローチャート中のステップを別のステップに変更したり、削除等することができるであろう。
【０１６５】
図１０は、通常運用状態の処理を示すフローチャートである。記憶制御装置１０は、ホスト２０からライトデータを受領すると（S10:YES）、ライトデータを正ボリューム２３０Ｐに書込む（Ｓ１１）。
【０１６６】
記憶制御装置１０は、受信したライトデータに関するジャーナルデータＪＤを生成し（Ｓ１２）、このジャーナルデータＪＤをジャーナルボリューム２３０Ｊに記憶させる（Ｓ１３）。一方、ホスト２０からＣＰＭが発行された場合（S10:NO，S14:YES）、記憶制御装置１０は、ＣＰＭをジャーナルボリューム２３０Ｊに記憶させる（Ｓ１５）。
【０１６７】
記憶制御装置１０は、ジャーナルボリューム２３０Ｊに記憶されている各ジャーナルデータＪＤに設定されている時刻情報と現在時刻とを比較することにより、目標保護期間ＴＰＴを過ぎたジャーナルデータＪＤが存在するか否か、つまり、目標保護期間ＴＰＴから外れたジャーナルデータＪＤが存在するか否かを判定する（Ｓ１６）。
【０１６８】
目標保護期間ＴＰＴから外れたジャーナルデータＪＤが存在する場合（S16:YES）、記憶制御装置１０は、目標保護期間ＴＰＴから外れたジャーナルデータＪＤを基底ボリューム２３０Ｂに書込み、書き込んだ後で破棄する（Ｓ１７）。
【０１６９】
図１１は、区間差分ビットマップＢＭ２０を切替ながら使用する処理を示すフローチャートである。記憶制御装置１０は、ホスト２０からライトデータを受領したか否かを判定する（Ｓ２０）。つまり、記憶制御装置１０は、ホスト２０からライト要求が発行されたか否かを監視している（Ｓ２０）。
【０１７０】
ライトデータを受領した場合（S20:YES）、記憶制御装置１０は、現在使用中の差分ビットマップＢＭ２０に、そのライトデータの書込み位置を記憶させる（Ｓ２１）。即ち、記憶制御装置１０は、そのライトデータによって更新されるスロットに対応する差分ビットに「１」を設定する。
【０１７１】
記憶制御装置１０は、差分ビットマップＢＭ２０を切り替える時期が到来したか否かを判定する（Ｓ２２）。例えば、区間を所定時間として定義している場合、記憶制御装置１０は、所定時間が経過したか否かを判定する。これに代えて、例えば、ジャーナルボリューム２３０Ｊの使用率ＵＪで区間を定義している場合、記憶制御装置１０は、所定の使用率に達したか否かを判定する。
【０１７２】
切替時期が到来したと判定された場合（S22:YES）、記憶制御装置１０は、次の差分ビットマップＢＭ２０に切り替えて、ホスト２０による正ボリューム２３０Ｐの更新を管理する（Ｓ２３）。
【０１７３】
記憶制御装置１０は、使用済の各差分ビットマップＢＭ２０について、その管理下にあるジャーナルデータＪＤが全て基底ボリューム２３０Ｂに書き込まれた差分ビットマップＢＭ２０が存在するか否かを判定する（Ｓ２４）。つまり、記憶制御装置１０は、使用済差分ビットマップＢＭ２０に対応付けられている全てのジャーナルデータＪＤについて格上げ処理が完了している使用済差分ビットマップＢＭ２０が存在するか否かを判定する（Ｓ２４）。
【０１７４】
対応する全てのジャーナルデータＪＤが基底ボリューム２３０Ｂに書き込まれて破棄されている、使用済の差分ビットマップＢＭ２０が検出された場合（S24:YES）、記憶制御装置１０は、その使用済の差分ビットマップＢＭ２０の記憶内容を消去し（Ｓ２５）、その差分ビットマップＢＭ２０を次の区間での差分管理に使用する。
【０１７５】
図１２は、リカバリ処理を示すフローチャートである。テンポラリリストアの実行に先立って、ホスト２０から正ボリューム２３０Ｐへのアクセスが禁止される（Ｓ３０）。このホストアクセスの禁止は、ユーザまたはアプリケーションプログラムによって実行させることができる。あるいは、記憶制御装置１０は、ホスト２０からのアクセス要求の受付を禁止することができる。
【０１７６】
記憶制御装置１０は、目標保護期間ＴＰＴを外れたジャーナルデータＪＤを基底ボリューム２３０Ｂに書き込んでから破棄する処理（格上げ処理）を停止する（Ｓ３１）。これにより、基底ボリューム２３０Ｂの示す基底点は固定され、進行を停止する。
【０１７７】
記憶制御装置１０は、選択可能な保護期間ＰＴ及び設定済のＣＰＭについて、ホスト２０に通知する（Ｓ３２）。ホスト２０は、この通知された情報に基づいて、テンポラリリストアさせる復元点を選択する。
【０１７８】
なお、ホスト２０に代えて、管理サーバ３０を用いることもできる。即ち、記憶制御装置１０は、管理サーバ３０に保護期間ＰＴや設定済ＣＰＭを通知し、管理サーバ３０から記憶制御装置１０にリストア実行の指示を与えることもできる。
【０１７９】
記憶制御装置１０は、復元点以降の各区間差分ビットマップＢＭ２０をマージすることにより、差分コピー用の差分ビットマップＢＭ１０を生成する（Ｓ３３）。即ち、記憶制御装置１０は、復元点以降の各区間差分ビットマップＢＭ２０（復元点を含む区間差分ビットマップＢＭ２０も含む）の論理和を求めることにより、差分コピー用の差分ビットマップＢＭ１０を生成する。なお、復元点を含む区間については、ジャーナルデータＪＤの管理データを用いて、正確な差分ビットマップを得る構成としてもよい。ジャーナル管理情報に基づいて正確な差分ビットマップを生成する一例については、図２４と共に後述する。
【０１８０】
記憶制御装置１０は、差分ビットマップＢＭ１０を用いて、基底ボリューム２３０Ｂから正ボリューム２３０Ｐにコピーさせる（Ｓ３４）。記憶制御装置１０は、復元点の前後でそれぞれ更新された領域について、ジャーナルボリューム２３０Ｊに記憶されている各ジャーナルデータＪＤのうち、最古のジャーナルデータから指定された復元点のジャーナルデータまでを順番に読み出して、正ボリューム２３０Ｐに書き込む（Ｓ３５）。
【０１８１】
記憶制御装置１０は、差分コピー用の差分ビットマップＢＭ１０からリカバリ中差分ビットマップＢＭ３０に切り替える（Ｓ３６）。ホスト２０による正ボリューム２３０Ｐへのアクセス禁止が解除されると、ホスト２０による正ボリューム２３０Ｐの更新位置を差分ビットマップＢＭ３０で管理する。また、記憶制御装置１０は、ホスト２０から発行されたライト要求に関するジャーナルデータＪＤを生成し、ジャーナルボリューム２３０Ｊに記憶させる（Ｓ３７）。
【０１８２】
再度のテンポラリリストアの実行が指示された場合（S38:YES）、記憶制御装置１０は、最初のリカバリ後に蓄積されたジャーナルデータＪＤを破棄する（Ｓ３９）。そして、記憶制御装置１０は、復元点以降の各区間差分ビットマップＢＭ２０及びリカバリ中差分ビットマップＢＭ３０をマージして、差分コピー用の差分ビットマップＢＭ１０を改めて生成する（Ｓ４０）。ユーザまたはアプリケーションプログラムは、テンポラリリストアによって復元された記憶内容に満足するまで、Ｓ３４〜Ｓ４０のステップを繰り返し実行させることができる。
【０１８３】
再度テンポラリリストアを実行する場合、マージ対象となる区間差分ビットマップＢＭ２０の数を減らすことができる。ここで、前回の復元点をＲＰ１、再度のテンポラリリストアの復元点をＲＰ２とする。
【０１８４】
（１）ＲＰ２がＲＰ１よりも新しい場合（ＲＰ２＞ＲＰ１）、リカバリ中差分ビットマップにおいて差分ビットがオンの領域については、基底ボリューム２３０Ｂから正ボリューム２３０Ｐにデータをコピーし、さらに、ＲＰ２までのジャーナルデータを正ボリューム２３０Ｐに適用する。その他の領域については、ＲＰ１からＲＰ２までのジャーナルデータを正ボリューム２３０Ｐに適用する。
【０１８５】
（２）ＲＰ２がＲＰ１よりも古い場合（ＲＰ２＜ＲＰ１）、まず、ＲＰ２とＲＰ１との間の差分を管理する差分ビットマップ（復元点間差分ビットマップ）を生成する。次に、復元点間差分ビットマップとリカバリ中差分ビットマップとをマージする。そして、マージされたビットマップにおいて差分ビットがオンの領域については、基底ボリューム２３０Ｂから正ボリューム２３０Ｐにデータをコピーし、ＲＰ２までのジャーナルデータを正ボリューム２３０Ｐに適用する。その他の領域については、正ボリューム２３０Ｐのデータをそのまま使用する。
【０１８６】
テンポラリリストアによってリカバリされた記憶内容をユーザまたはアプリケーションプログラムが承認し、コンプリートリストアの実行が指示された場合（S38:NO，S41:YES）、記憶制御装置１０は、確定された復元点から「I/O停止点」までのジャーナルデータＪＤを無効化または破棄する（Ｓ４２）。「I/O停止点」までのジャーナルデータＪＤとは、Ｓ３０で停止されるホスト２０からのライト要求について生成されたジャーナルデータＪＤである。
【０１８７】
記憶制御装置１０は、Ｓ３６で使用を開始したリカバリ中差分ビットマップＢＭ３０を区間差分ビットマップＢＭ２０として使用する（Ｓ４３）。そして、記憶制御装置１０は、Ｓ４２で無効化または破棄されたジャーナルデータＪＤに対応付けられている区間差分ビットマップＢＭ２０を破棄する（Ｓ４４）。なお、便宜上、「破棄する」ものとして述べるが、区間差分ビットマップＢＭ２０の記憶内容を消去する行為も含む。つまり、Ｓ４４では、不要となった各区間差分ビットマップＢＭ２０を破棄し、再利用に備える。記憶制御装置１０は、無効化または破棄されたジャーナルデータＪＤの範囲内に含まれるＣＰＭを破棄する（Ｓ４５）。
【０１８８】
記憶制御装置１０は、ジャーナルデータＪＤの格上げ処理を再開し（Ｓ４６）、通常運用状態へ移行する（Ｓ４７）。
【０１８９】
本実施例は、上述のように構成されるため、以下の効果を奏する。本実施例では、通常運用時には、目標保護期間ＴＰＴを経過したジャーナルデータＪＤを基底ボリューム２３０Ｂに書き込むことにより、基底ボリューム２３０Ｂの記憶内容を正ボリューム２３０Ｐから目標保護期間だけ遅れた記憶内容として、遷移させることができる。
【０１９０】
従って、本実施例では、リストア可能な期間の始点である基底点を、現在時刻から一定時間だけ遅らせて追従させることができる。そして、基底ボリューム２３０Ｂに書き込まれたジャーナルデータＪＤは破棄されるため、ジャーナルボリューム２３０ＪがジャーナルデータＪＤで満杯になる可能性を低減することができる。
【０１９１】
本実施例では、予め設定される複数の区間毎にそれぞれ別々の差分ビットマップＢＭ２０を割り当てて、正ボリューム２３０Ｐと基底ボリューム２３０Ｂとの間の差分を各区間毎に管理する。従って、差分ビットマップＢＭ２０に対応付けられる全てのジャーナルデータＪＤが基底ボリューム２３０Ｂに書き込まれた後で、その差分ビットマップＢＭ２０の記憶内容を消去して、再利用できる。これにより、不要な差分ビットマップＢＭ２０が記憶制御装置１０のメモリ領域に記憶されたままになるのを防止し、記憶制御装置１０のメモリ領域を効率的に使用できる。
【０１９２】
さらに、本実施例では、各区間差分ビットマップＢＭ２０をマージして差分コピー用の差分ビットマップＢＭ１０を生成し、リストア時には、基底ボリューム２３０Ｂから正ボリューム２３０Ｐに差分コピーする構成である。これにより、基底ボリューム２３０Ｂから正ボリューム２３０Ｐにコピーするデータ量を少なくすることができ、リカバリ時間を短縮することができる。
【０１９３】
特に本実施例では、復元点以降に更新された位置を示す差分ビットマップＢＭ１０を用いて、復元点以降に更新された位置についてのみ、基底ボリューム２３０Ｂから正ボリューム２３０Ｐにデータをコピーする。従って、基底ボリューム２３０Ｂから正ボリューム２３０Ｐにコピーされるデータ量を低減することができ、これによりリストアに要する時間を短縮することができる。
【０１９４】
また、本実施例では、復元点の前後でそれぞれ更新された領域についてのみ、基底点から復元点までのジャーナルデータＪＤを順番に書き込んで、復元点の記憶内容に戻す構成とした。従って、格上げ処理に要する時間も短縮することができ、これによりリストア時間をさらに短縮することができる。
【実施例２】
【０１９５】
図１０〜図１５を参照して第２実施例を説明する。本実施例を含む以下の各実施例は、前記第１実施例の変形例に該当する。前記実施例では、復元点以降の差分を示す差分ビットマップを生成し、正ボリューム２３０Ｐの記憶内容をできるだけ利用してリストアを実行する場合を説明した。本実施例では、復元点以降及び復元点以前の差分をそれぞれ示す複数の差分ビットマップを用意し、正ボリューム２３０Ｐ及び基底ボリューム２３０Ｂの記憶内容をできるだけ利用してリストアを行うようになっている。
【０１９６】
図１３は、基底点ＢＰから最新点ＬＰまでの期間内において、正ボリューム２３０Ｐの記憶内容が変化する様子等を示している。復元点ＲＰを明示してリストアの実行が要求された場合、記憶制御装置１０は、復元点以降に更新された位置を示す差分ビットマップＢＭ５０（Ａ）と、復元点以前に更新された位置を示す差分ビットマップＢＭ５０（Ｂ）をとをそれぞれ生成する。
【０１９７】
各差分ビットマップＢＭ５０（Ａ），ＢＭ５０（Ｂ）は、第１実施例で述べたように、各区間毎の差分ビットマップＢＭ２０を復元点の前後でそれぞれマージすることにより生成できる。あるいは、ジャーナルデータＪＤの管理データを用いることによって、より正確な差分ビットマップＢＭ５０（Ａ），ＢＭ５０（Ｂ）を生成することもできる。
【０１９８】
既に図１でも説明した通り、復元点以降の差分ビットマップＢＭ５０（Ａ）で更新されている領域（斜線部分の領域）は、第１更新領域に該当する。復元点以前の差分ビットマップＢＭ５０（Ｂ）で更新されている領域は、第２更新領域に該当する。各差分ビットマップＢＭ５０（Ａ），ＢＭ５０（Ｂ）の両方でそれぞれ更新されている領域は、第３更新領域に該当する。また、各差分ビットマップＢＭ５０（Ａ），ＢＭ５０（Ｂ）のいずれにおいても更新されていない領域は、未更新領域に該当する。
【０１９９】
第１グループＳＡは、復元点以降の差分ビットマップＢＭ５０（Ａ）によって更新の発生が検出された領域である。第１グループＳＡに属する領域では、基本的に、基底ボリューム２３０Ｂのデータを利用可能である。特に、第１グループＳＡにのみ属する領域（ＳＡ−ＳＢ，（¬ＳＢ）∧ＳＡ）では、基底ボリューム２３０Ｂに記憶されているデータをそのまま使用できる。第１グループＳＡにのみ属する領域（２，２）及び（２，３）は、復元点以降でのみ更新されており、復元点以前で更新されていない。従って、第１グループＳＡにのみ属する領域（２，２）及び（２，３）では、基底ボリューム２３０Ｂのデータ「０」と復元点におけるデータ「０」とは一致する。
【０２００】
第２グループＳＢは、復元点以前の差分ビットマップＢＭ５０（Ｂ）によって更新の発生が検出された領域である。第２グループＳＢに属する領域では、基本的に、正ボリューム２３０Ｐのデータを利用可能である。特に、第２グループＳＢにのみ属する領域（ＳＢ−ＳＡ，ＳＢ∧（¬ＳＡ））では、正ボリューム２３０Ｐに記憶されているデータをそのまま使用できる。第２グループＳＢにのみ属する領域（１，１）及び（３，２）は、復元点以前でのみ更新されており、復元点以降では更新されていない。従って、第２グループＳＢにのみ属する領域（１，１）及び（３，２）では、正ボリューム２３０Ｐのデータ「１」（１，１），「２」（３，２）と復元点におけるデータ「１」（１，１），「２」（３，２）とは一致する。
【０２０１】
第３グループＳＣは、第１グループＳＡ及び第２グループＳＢの両方にまたがって属する領域である。第３更新領域ＳＣに属する領域（ＳＢ∧ＳＡ）では、正ボリューム２３０Ｐ及び基底ボリューム２３０Ｂのいずれのデータも、そのままでは使用できない。第３グループＳＣに属する領域（１，３）は、復元点の前後でそれぞれ更新されているため、まず、基底ボリューム２３０Ｂのデータ「０」を正ボリューム２３０Ｐにコピーし（「５」→「０」）、次に、その領域（１，３）に関する復元点までのジャーナルデータＪＤを、領域（１，３）に順番に上書きする（「０」→「３」）。これにより、第３グループＳＣに属する領域のデータは、復元点におけるデータに一致する。
【０２０２】
第４グループは、正ボリューム２３０Ｐの全記憶領域のうち、前記各グループＳＡ，ＳＢ，ＳＣのいずれにも属さない領域（（ＳＢ∨ＳＡ）ｃ，¬（ＳＢ∨ＳＡ））である。第４グループに属する領域では、復元点の前後いずれにもおいても更新されていないため、正ボリューム２３０Ｐまたは基底ボリューム２３０Ｂのいずれかに記憶されているデータを使用できる。第４グループに属する領域（２，１）、（２，２）、（１，２）、（３，３）では、正ボリューム２３０Ｐに記憶されているデータと基底ボリューム２３０Ｂに記憶されているデータと復元点におけるデータとは、いずれも一致している。
【０２０３】
本実施例では、以上の考察に基づいて、仮想ボリューム２３０Ｖと正ボリューム２３０Ｐ及び基底ボリューム２３０Ｂ等と対応付けるためのボリューム参照用テーブルＢＭ６０を生成する。このテーブルＢＭ６０には、正ボリューム２３０Ｐの各記憶領域毎に、正ボリューム２３０Ｐを参照すべきか（「Ｐ」）、基底ボリューム２３０Ｂを参照すべきか（「Ｂ」）、ジャーナルデータＪＤを使用すべきか（「Ｊ」）が設定されている。なお、「Ｐ」、「Ｂ」及び「Ｊ」という値は、説明の便宜上の値である。
【０２０４】
図１４は、仮想ボリューム２３０ＶとテーブルＢＭ６０及び各ボリューム２３０Ｐ，２３０Ｂ等の関係を模式的に示す説明図である。仮想ボリューム２３０Ｖは、キャッシュメモリ１３０上に仮想的に設けられるボリュームである。仮想ボリューム２３０Ｖには、復元点における記憶内容が再現される。
【０２０５】
参照用テーブルＢＭ６０が生成され、仮想ボリューム２３０Ｖに対応付けられた時点で、見かけ上、リストアを完了させることができる。ホスト２０が仮想ボリューム２３０Ｖにアクセスすると、そのアクセスした位置に対応するボリュームが参照される。基底ボリューム２３０Ｂに対応付けられた領域（ＳＡ）にホスト２０がアクセスした場合、基底ボリューム２３０Ｂのデータが正ボリューム２３０Ｐにコピーされる。即ち、ホスト２０からアクセスされるまでは、データを基底ボリューム２３０Ｂから正ボリューム２３０Ｐにコピーする必要がない。なお、ライトアクセスの場合、基底ボリューム２３０Ｂから正ボリューム２３０Ｐへデータをコピーした後で、ライトデータを上書きすればよい。
【０２０６】
リードアクセスの場合、基底ボリューム２３０Ｂからデータを読み出せばよく、基底ボリューム２３０Ｂから正ボリューム２３０Ｐにデータをコピーする必要はない。
【０２０７】
また、ライトアクセス後に基底ボリューム２３０Ｂから正ボリューム２３０Ｐにデータをコピーするのではなく、リストア完了後に、バックグラウンドでコピーを継続する構成でもよい。
【０２０８】
図１５は、参照用テーブルＢＭ６０を生成する処理を示す。記憶制御装置１０は、復元点以降の更新位置を示す差分ビットマップＢＭ５０（Ａ）を生成する（Ｓ５０）。さらに、記憶制御装置１０は、復元点以前の更新位置を示す差分ビットマップＢＭ５０（Ｂ）を生成する（Ｓ５１）。
【０２０９】
記憶制御装置１０は、仮想ボリューム２３０Ｖの全記憶領域について、下記のＳ５３〜Ｓ６０を適宜実行することにより、参照用テーブルＢＭ６０の各領域にそれぞれ値を設定する（Ｓ５２）。
【０２１０】
記憶制御装置１０は、仮想ボリューム２３０Ｖのある対象領域が復元点以前で更新されているか否かを判定する（Ｓ５３）。その対象領域が復元点以前で更新されている場合（S53:YES）、記憶制御装置１０は、その対象領域が復元点以降においても更新されているか否かを判定する（Ｓ５４）。なお、Ｓ５３よりも前にＳ５４の判定を行う構成とすることもできる。
【０２１１】
対象領域が復元点の前後でそれぞれ更新されている場合（S53:YES，S54:YES）、その対象領域は、図１３中の第３グループＳＣに属する。そこで、記憶制御装置１０は、対象領域のデータのみを基底ボリューム２３０Ｂから正ボリューム２３０Ｐにコピーし（Ｓ５５）、対象領域に関する復元点までのジャーナルデータＪＤを正ボリューム２３０Ｐに順番に書き込む（Ｓ５６）。記憶制御装置１０は、その対象領域については正ボリューム２３０Ｐを参照させるべく、参照用テーブルＢＭ６０に値を設定する（Ｓ５７）。
【０２１２】
対象領域が復元点以前でのみ更新されている場合（S53:YES，S54:NO）、その対象領域は、図１３中の第２グループＳＢに属する。そこで、記憶制御装置１０は、その対象領域については正ボリューム２３０Ｐを参照させるべく、参照用テーブルＢＭ６０に値を設定する（Ｓ５７）。
【０２１３】
対象領域が復元点以前で更新されていない場合（S53:NO）、記憶制御装置１０は、その対象領域が復元点以降で更新されているか否かを判定する（Ｓ５８）。対象領域が復元点以降でのみ更新されている場合（S53:NO，S58:YES）、その対象領域は図１３中の第１グループＳＡに属する。そこで、記憶制御装置１０は、その対象領域については基底ボリューム２３０Ｂを参照させるべく、参照用テーブルＢＭ６０に値を設定する（Ｓ５９）。
【０２１４】
対象領域が復元点以前も復元点以降も更新されていない場合（S53:NO，S58:NO）、その対象領域は、図１３で述べた第４グループに属する。そこで、記憶制御装置１０は、その対象領域については正ボリューム２３０Ｐを参照させるべく、参照用テーブルＢＭ６０に値を設定する（Ｓ６０）。
【０２１５】
このように構成される本実施例でも前記第１実施例と同様の効果を奏する。これに加えて、本実施例では、復元点以降の差分を示す差分ビットマップＢＭ５０（Ａ）及び復元点以前の差分を示す差分ビットマップＢＭ５０（Ｂ）を用意し、正ボリューム２３０Ｐ及び基底ボリューム２３０Ｂの記憶内容を可能な限り利用して、仮想ボリューム２３０Ｖを生成することができる。従って、リストアに要する時間を短縮することができ、使い勝手が向上する。
【実施例３】
【０２１６】
図１６，図１７に基づいて第３実施例を説明する。本実施例では、リストア時に、ジャーナルデータＪＤの管理データを用いて参照用テーブルＴ１０を生成する。図１６は、本実施例の概要を示す説明図である。復元点の記憶内容をホスト２０に提供する仮想ボリューム２３０Ｖには、各領域のデータの実体がいずれのボリュームに存在するかを示すための参照用テーブルＴ１０が対応付けられている。
【０２１７】
参照用テーブルＴ１０には、例えば、ブロック単位等のような所定の単位で、データの実体がどこに存在するかが設定されている。参照用テーブルＴ１０は、ジャーナルデータＪＤの管理データを用いることにより、リストア時に生成できる。図５で述べた通り、ジャーナルデータＪＤを管理するためのデータには、正ボリューム２３０Ｐのどの領域が、いつ更新されたか等の管理情報が含まれている。従って、記憶制御装置１０は、この管理データを用いることにより、参照用テーブルＴ１０を得ることができる。
【０２１８】
図１７は、参照用テーブルＴ１０を生成するための処理の例を示す。例えば、記憶制御装置１０は、復元点以降におけるジャーナルデータＪＤの管理データを用いて、参照用テーブルＴ１０の一部を生成し（Ｓ７０）、さらに復元点以前におけるジャーナルデータＪＤの管理データを用いて参照用テーブルＴ１０の残りの部分を生成する（Ｓ７１）。
【０２１９】
このように構成される本実施例も前記第１実施例及び前記第２実施例と同様の効果を奏する。本実施例では、リストアの実行を要求された時点で、参照用テーブルＴ１０を生成することができるため、記憶制御装置１０のメモリ資源を有効に利用できる。
【実施例４】
【０２２０】
図１８は、第４実施例に係る記憶制御装置１０で実行される、参照用テーブルＴ１０の生成方法を示すフローチャートである。本実施例では、各区間毎に予めテーブルを生成しておき、リストアを要求されたときに各区間毎のテーブルを用いて参照用テーブルＴ１０を生成する。
【０２２１】
記憶制御装置１０は、各区間毎にテーブルを生成する（Ｓ８０）。このテーブルは、参照用テーブルＴ１０と同様のテーブル構成を有している。この区間毎のテーブルは、各区間のそれぞれにおいて、各領域のデータが更新されたか否かを管理する。以下、このテーブルを区間テーブルと呼ぶ場合がある。
【０２２２】
リストアの開始が要求されると、記憶制御装置１０は、復元点以前の各区間テーブルの論理和を求めて、参照用テーブルＴ１０を生成する（Ｓ８１）。そして、記憶制御装置１０は、復元点以降のジャーナルデータＪＤに関する管理データを用いることにより、Ｓ８１で生成された参照用テーブルＴ１０を更新する（Ｓ８２）。
【０２２３】
なお、復元点を含む区間を担当する区間テーブルはマージしてはならず、区間の最初から復元点までのジャーナル管理情報を用いてテーブルを更新する。
【０２２４】
単純にマージ対象の各区間管理テーブルをマージするだけでは、復元点以降で更新されていないため正ボリューム２３０Ｐを参照できる領域についても、基底ボリューム２３０Ｂ及びジャーナルデータＪＤを使用してしまう可能性がある。そこで、実施例２で述べた３パターンのテーブルを作成した後で、基底ボリューム及びジャーナルデータを使用する領域についてのみ区間テーブルをマージすれば、より効率的となる。
【０２２５】
このように構成される本実施例も前記第１実施例及び前記第２実施例と同様の効果を奏する。これに加えて、本実施例では、リストア開始を要求される前に、各区間毎にテーブルを予め生成しておくため、参照用テーブルＴ１０の生成時間を短縮できる。これにより、リストアが完了するまでの時間をさらに短縮でき、使い勝手が向上する。
【実施例５】
【０２２６】
図１９，図２０に基づいて第５実施例を説明する。前記各実施例では、指定された復元点の記憶内容を、正ボリューム２３０Ｐ上に再現する場合を説明した。これに代えて、本実施例では、正ボリューム２３０Ｐとは別の記憶領域を用いて、復元点の記憶内容を再現させる。本実施例は、前記各実施例のいずれにも適用可能である。ここでは、便宜上、第２実施例に適用した場合を説明する。
【０２２７】
図１９に示すように、第３グループＳＣに属する領域のデータは、プール２３０ＰＬに格納される。プール２３０ＰＬは、例えば、各ボリューム２３０Ｐ，２３０Ｂと異なる別の、一つまたは複数のボリューム２３０の記憶領域から構成することができる。ジャーナルボリューム２３０Ｊに十分な空き容量がある場合、ジャーナルボリューム２３０Ｊの空き領域をプール２３０ＰＬとして利用することもできる。
【０２２８】
図２０は、参照用テーブルＢＭ６０を生成するための処理を示す。図２０は、図１５と共通または類似のステップを備えている。図２０中のステップと図１５中のステップとの対応関係を述べると、Ｓ９０はＳ５０に、Ｓ９１はＳ５１に、Ｓ９２はＳ５２に、Ｓ９３はＳ５３に、Ｓ９４はＳ５４に、Ｓ９５はＳ５７に、Ｓ９９はＳ５８に、Ｓ１００はＳ５９に、Ｓ１０１Ｓ６０に、それぞれ対応する。これら各ステップの説明は割愛する。
【０２２９】
本実施例では、復元点の前後でそれぞれ更新されている領域に関する処理（Ｓ９６，Ｓ９７，Ｓ９８）に特徴がある。即ち、復元点以前及び復元点以降のそれぞれにおいて更新されている領域（第３グループＳＣに属する領域）については、基底ボリューム２３０Ｂからプール２３０ＰＬにデータをコピーした後（Ｓ９６）、その領域に関する復元点までのジャーナルデータＪＤをプール２３０ＰＬに順番に上書きする（Ｓ９７）。そして、参照用テーブルＢＭ６０には、その領域を参照すべき場所を示す情報として、プール２３０ＰＬの所定箇所を特定するための値が設定される。
【０２３０】
このように構成される本実施例も前記第１実施例及び前記第２実施例と同様の効果を奏する。これに加えて本実施例では、復元点の記憶内容をプール２３０ＰＬ上に再現することができる。従って、最新点の記憶内容を保持する正ボリューム２３０Ｐを一切変更することなく、復元点の記憶内容を速やかに得ることができる。
【０２３１】
また、プール２３０ＰＬを用いてリストアを行うことにより、正ボリューム２３０Ｐへのアクセスを処理しながら、同時にリストアを進めることができる。正ボリューム２３０Ｐを参照する領域へのライトアクセスについては、正ボリューム２３０Ｐからプール２３０ＰＬへデータをコピーし、プール２３０ＰＬを参照するようにテーブルを更新してから、そのライトアクセスを受け付ける。
【０２３２】
なお、正ボリューム２３０Ｐに復元点の記憶内容を再現する場合であっても、プール２３０ＰＬを使用することができる。例えば、実施例２を例に挙げて説明すると、
（１）基底ボリュームから正ボリュームへデータをコピーする構成を、基底ボリュームからプールにデータをコピーする構成に代え、
（２）基底ボリュームから正ボリュームにデータをコピーした後で正ボリュームにジャーナルデータを格上げする構成を、基底ボリュームからプールにデータをコピーした後でプールにジャーナルデータを格上げする構成に代え、
（３）リストア後にライトアクセスされる領域については、正ボリューム２３０Ｐからプールにデータをコピーし、プールにライトデータを書き込む構成にし、
（４）あるいは、リストア後にライトアクセスされる領域については、基底ボリューム２３０Ｂからプールにデータをコピーした後で、プールにライトデータを書き込む構成とする、ことができる。
【０２３３】
このようにプール２３０ＰＬを利用することで、再度のテンポラリリストアの実行時に、前回のテンポラリリストアのデータをコピーしたり、リストア後のライトアクセスを取り消す処理を不要にすることができる。従って、リストアに要する時間をより短縮することができる。なお、実施例３及び実施例４では、上記（３）または（４）の構成が有効である。
【実施例６】
【０２３４】
図２１，図２２に基づいて第６実施例を説明する。本実施例では、復元点に時間的に近いジャーナルデータＪＤから順番に、基底ボリューム２３０Ｂのデータに上書きすることにより、短時間で格上げ処理を完了させる。
【０２３５】
図２１は、本実施例による格上げ処理の概要を示すフローチャートである。記憶制御装置１０は、復元点に時間的に最も近いジャーナルデータＪＤを検出し、このジャーナルデータを正ボリューム２３０Ｐの更新対象領域に書き込む（Ｓ１１０）。本実施例では、復元点の記憶内容を正ボリューム２３０Ｐ上に再現する場合を例に挙げるが、前記第５実施例で述べたように、別のボリュームまたはプール２３０ＰＬ上に、復元点の記憶内容を再現させる構成にも適用できる。
【０２３６】
また前記第３実施例や第４実施例の場合も、ジャーナル管理情報を順次読み出してテーブルを作成するため、本実施例による方式を利用することができる。この場合、図２１中の「正ボリュームに書込み」とある部分は、ジャーナルデータを指す「テーブル更新」に変わる。
【０２３７】
記憶制御装置１０は、復元点に最も近いジャーナルデータＪＤが書き込まれた更新対象領域の位置を、処理済みビットマップＢＭ７０に記録する（Ｓ１１１）。後述の図２２に示される処理済みビットマップＢＭ７０は、ジャーナルデータが書き込まれた領域の位置を管理するためのデータである。
【０２３８】
記憶制御装置１０は、復元点に時間的に最も近いジャーナルデータＪＤの次に復元点に近いジャーナルデータＪＤを検出する（Ｓ１１２）。記憶制御装置１０は、処理済みビットマップＢＭ７０を用いることにより、復元点に次に近いジャーナルデータＪＤ（対象ジャーナルデータＪＤ）に対応する領域が既に格上げ処理済みであるか否かを判定する（Ｓ１１３）。即ち、記憶制御装置１０は、その対象ジャーナルデータＪＤに対応する領域が、処理済みビットマップＢＭ７０に全て登録されているか否かを判定する（Ｓ１１３）。なお、ジャーナルデータ同士の領域が完全に重なるのではなく、一部のみ重なる場合もある。この場合、重ならない部分のみを格上げする。
【０２３９】
対象ジャーナルデータＪＤが処理済みビットマップＢＭ７０に登録されていない場合（S113:NO）、記憶制御装置１０は、ジャーナルデータＪＤのうち処理済みビットマップＢＭ７０に登録されていないジャーナルデータＪＤを正ボリュームに書込み（Ｓ１１４）、書き込んだ位置を処理済みビットマップに記録する（Ｓ１１５）。対象ジャーナルデータＪＤに関する領域が処理済みビットマップＢＭ７０に登録済の場合（S113:YES）、記憶制御装置１０は、Ｓ１１４及びＳ１１５をスキップする。つまり、既に格上げされた領域については、古いジャーナルデータＪＤによる更新を禁止する。
【０２４０】
最後に、記憶制御装置１０は、格上げ処理が基底点まで戻ったか否かを判定する（Ｓ１１６）。即ち、記憶制御装置１０は、最古のジャーナルデータＪＤまで処理したか否かを判定する（Ｓ１１６）。未処理のジャーナルデータＪＤが存在する場合（S116:YES）、記憶制御装置１０は、復元点に近い別のジャーナルデータＪＤを検出し（Ｓ１１２）、成就のステップを繰り返す（Ｓ１１３〜Ｓ１１６）。全てのジャーナルデータＪＤについて判断を終えると（S116:YES）、本処理は終了する。
【０２４１】
図２２は、復元点に近い順番でジャーナルデータＪＤを正ボリューム２３０Ｐに書き込む様子を示す模式図である。まず最初に、記憶制御装置１０は、ジャーナルボリューム２３０Ｊに記憶されている各ジャーナルデータＪＤのうち、復元点ＲＰに最も近い過去のジャーナルデータＪＤ５を読み出して、正ボリューム２３０Ｐに書き込む。記憶制御装置１０は、ジャーナルデータＪＤ５の書き込まれた位置（２，３）を、処理済みビットマップＢＭ７０に記録する。
【０２４２】
続いて、記憶制御装置１０は、次に復元点に近いジャーナルデータＪＤ４を読み出して正ボリューム２３０Ｐに書込み、その書込み位置（１，２）を処理済みビットマップＢＭ７０に登録する。
【０２４３】
ジャーナルデータＪＤ４の次に復元点に近いジャーナルデータＪＤ３は、領域（２，３）に関するデータである。この領域（２，３）については、ジャーナルデータＪＤ３よりも新しい時刻（復元点により近い時刻）に生成されたジャーナルデータＪＤ５が既に書き込まれている。従って、記憶制御装置１０は、ジャーナルデータＪＤ３を正ボリューム２３０Ｐに書き込まず、次のジャーナルデータＪＤ２を処理対象とする。
【０２４４】
ジャーナルデータＪＤ２は、領域（１，２）に関するデータである。この領域（１，２）については、ジャーナルデータＪＤ２よりも新しい時刻に生成されたジャーナルデータＪＤ４が既に書き込まれている。従って、記憶制御装置１０は、ジャーナルデータＪＤ２を正ボリュームに書き込まず、次のジャーナルデータＪＤ１を処理対象とする。
【０２４５】
ジャーナルデータＪＤ１は、領域（１，３）に関するデータであり、領域（１，３）には未だジャーナルデータが書き込まれていない。そこで、記憶制御装置１０は、ジャーナルデータＪＤ１を正ボリューム２３０Ｐに書き込む。
【０２４６】
このように、本実施例では、復元点から基底点に遡るようにして、より新しいジャーナルデータから順番に正ボリューム２３０Ｐに書き込み、記憶内容を更新させる。更新済であるか否かは、処理済みビットマップＢＭ７０によって管理される。復元点に近いジャーナルデータが書き込まれた領域に、古いジャーナルデータは上書きされない。正ボリューム２３０Ｐの記憶内容を復元点に戻すために更新すべき各領域には、それぞれ最も新しい時刻のジャーナルデータが１つだけ書き込まれる。
【０２４７】
このように構成される本実施例も前記第１実施例及び前記第２実施例と同様の効果を奏する。これに加えて、本実施例では、更新対象の各領域について、復元点に最も近いジャーナルデータのみを反映させるため、より速やかに復元点の記憶内容を得ることができ、使い勝手が向上する。
【０２４８】
図２３に示すように、第１のジャーナルデータＪＮＬ１と第３のジャーナルデータＪＮＬ３とが一部重複している場合、図中に太線で示すデータのみが格上げされる。
【実施例７】
【０２４９】
図２４は、ジャーナル管理情報から差分ビットマップを正確に作成する一例を示す説明図である。図に示す例では、１０時から１１時まで、１１時から１２時まで、１２時から１３時まで、１３時以降（１３時から現在時刻である１３時１５分まで）の、各区間をそれぞれの区間差分ビットマップが担当している。基底点は１０時１５分、指定された復元点が１２時３０分であるとする。
【０２５０】
１０時から１１時までの区間を担当する差分ビットマップには、基底点以前の差分も含まれている。そこで、１０時１５分から１１時までのジャーナル管理情報を用いて、１０時１５分から１１時までの区間の差分ビットマップを作成する。このジャーナル管理情報を用いて作成される差分ビットマップを、区間差分ビットマップと区別するために、ここでは、一時ビットマップと呼ぶことにする。
【０２５１】
１２時から１３時までの区間を担当する差分ビットマップには、復元点（１２時３０分）の前後に発生した差分がそれぞれ含まれている。そこで、１２時から１２時３０分までのジャーナル管理情報を用いて、１２時から１２時３０分までの区間の一時ビットマップを生成する。また、１２時３０分から１３時までのジャーナル管理情報を用いて、１２時３０分から１３時までの区間の一時ビットマップを作成する。
【０２５２】
そして、１０時１５分から１１時までの区間の一時ビットマップと、１１時から１２時までの区間の差分ビットマップ及び１２時から１２時３０分までの区間の一時ビットマップをマージすることにより、１０時１５分から１２時３０分までの区間の差分ビットマップを得ることができる。この差分ビットマップ（10:15-12:30）は、復元点以前の差分を示すビットマップである。
【０２５３】
また、１２時３０分から１３時までの区間の一時ビットマップと現在の区間を担当する差分ビットマップ（13:00-13:15）とをマージすることにより、１２時３０分から１３時１５分までの区間の差分ビットマップを得ることができる。この差分ビットマップ（12:30-13:15）は、復元点以降の差分を示すビットマップである。
【０２５４】
このように、各区間をそれぞれ担当する区間差分ビットマップとジャーナル管理情報とを用いることにより、基底点や復元点を含む区間差分ビットマップから、復元点の前後の更新を示す差分ビットマップを正確に得ることができる。
【０２５５】
なお、本発明は、上述した各実施例に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。例えば、前記各実施例を適宜組み合わせて使用することができる。
【図面の簡単な説明】
【０２５６】
【図１】本発明の実施形態の概略を示す説明図である。
【図２】本発明の実施例に係る記憶制御装置を含む情報処理システムの全体構成を示す説明図である。
【図３】記憶制御装置等のプログラム構成の概要を示す説明図である。
【図４】記憶制御装置の論理構成の概要を示す説明図である。
【図５】ジャーナルデータの構成の概要を示す説明図である。
【図６】区間毎に差分ビットマップを切り替えて差分を管理する様子を示す説明図である。
【図７】通常運用状態における保護期間の変化を示す説明図である。
【図８】リカバリ時における保護期間の変化を示す説明図である。
【図９】リストア処理の概要を示す説明図である。
【図１０】通常運用処理を示すフローチャートである。
【図１１】各区間毎にビットマップを切り替えて使用する処理を示すフローチャートである。
【図１２】リカバリ処理を示すフローチャートである。
【図１３】第２実施例に係る記憶制御装置のリカバリ処理を模式的に示す説明図である。
【図１４】仮想ボリュームと正ボリューム及び基底ボリュームを参照用テーブルによって対応付ける様子を示す説明図である。
【図１５】参照用テーブルを生成する処理を示すフローチャートである。
【図１６】第３実施例に係る記憶制御装置のリカバリ処理を模式的に示す説明図である。
【図１７】参照用テーブルを生成する処理を示すフローチャートである。
【図１８】第４実施例に係る記憶制御装置において、参照用テーブルを生成する処理を示すフローチャートである。
【図１９】第５実施例に係る記憶制御装置のリカバリ処理を模式的に示す説明図である。
【図２０】参照用テーブルを生成する処理を示すフローチャートである。
【図２１】第６実施例に係る記憶制御装置により実行される、ジャーナルデータの格上げ処理を示すフローチャートである。
【図２２】ジャーナルデータをボリュームに書き込む様子を示す説明図である。
【図２３】ジャーナルデータが部分的に重複している場合における格上げ方法を模式的に示す説明図である。
【図２４】ジャーナル管理情報から差分ビットマップを正確に作成する方法を模式的に示す説明図である。
【符号の説明】
【０２５７】
１…記憶制御装置、２…ホスト、３…正ボリューム（保護対象ボリューム）、４…基底ボリューム、５…ジャーナルボリューム、５Ａ…ジャーナルデータ、６，６Ａ…区間差分ビットマップ、ＢＭ５０（Ａ）…差分コピー用の差分ビットマップ、１０…記憶制御装置、２０…ホスト、２１…管理部、３０…管理サーバ、３１…管理部、４０…外部記憶制御装置、４１…コントローラ、４２…ＨＤＵ、１００…コントローラ、１１０…チャネルアダプタ（CHA）、１１１…通信ポート、１２０…ディスクアダプタ（DKA）、１３０…キャッシュメモリ、１４０…共有メモリ、１５０…接続制御部、１６０…サービスプロセッサ（SVP）、２００…ＨＤＵ、２１０…ディスクドライブ、２２０…パリティグループ、２３０…ボリューム、２３０Ｂ…基底ボリューム、２３０Ｊ…ジャーナルボリューム、２３０Ｐ…正ボリューム、ＢＭ１０…差分コピー用差分ビットマップ、ＢＭ２０〜ＢＭ７０…ビットマップ、Ｔ１０…参照用テーブル、ＪＤ…ジャーナルデータ、ＰＴ…保護期間、ＴＰＴ…目標保護期間
【図１】
2008282239.tif 000003
【図２】
2008282239.tif 000004
【図３】
2008282239.tif 000005
【図４】
2008282239.tif 000006
【図５】
2008282239.tif 000007
【図６】
2008282239.tif 000008
【図７】
2008282239.tif 000009
【図８】
2008282239.tif 000010
【図９】
2008282239.tif 000011
【図１０】
2008282239.tif 000012
【図１１】
2008282239.tif 000013
【図１２】
2008282239.tif 000014
【図１３】
2008282239.tif 000015
【図１４】
2008282239.tif 000016
【図１５】
2008282239.tif 000017
【図１６】
2008282239.tif 000018
【図１７】
2008282239.tif 000019
【図１８】
2008282239.tif 000020
【図１９】
2008282239.tif 000021
【図２０】
2008282239.tif 000022
【図２１】
2008282239.tif 000023
【図２２】
2008282239.tif 000024
【図２３】
2008282239.tif 000025
【図２４】
2008282239.tif 000026