(57)【要約】【課題】アクセス性能が低下するという問題を解決すること。【解決手段】マスタデータを記憶するマスタデータ記憶領域と、マスタデータを更新する更新データを一時的に格納する一時データ記憶領域と、マスタデータを複製した複製データを記憶する複製データ記憶領域と、複製データを複製データ記憶領域に記憶するマスタデータ複製制御手段と、を備え、マスタデータの更新命令により、一時データ記憶領域に更新データを格納するとともに、その後、一時データ記憶領域に格納された更新データをマスタデータとしてマスタデータ記憶領域に記憶する一時データ記憶制御手段、を備える。【選択図】図２９
2014203287.tif 000002
【特許請求の範囲】
【請求項１】
マスタデータを記憶するマスタデータ記憶領域と、
前記マスタデータを更新する更新データを一時的に格納する一時データ記憶領域と、
前記マスタデータを複製した複製データを記憶する複製データ記憶領域と、
前記複製データを前記複製データ記憶領域に記憶するマスタデータ複製制御手段と、
を備え、
前記マスタデータの更新命令により、前記一時データ記憶領域に前記更新データを格納するとともに、その後、前記一時データ記憶領域に格納された前記更新データをマスタデータとして前記マスタデータ記憶領域に記憶する一時データ記憶制御手段、
を備える記憶制御装置。
【請求項２】
請求項１に記載の記憶制御装置であって、
前記マスタデータ複製制御手段は、前記一時データ記憶制御手段が前記一時データ記憶領域に格納された前記更新データを前記マスタデータ記憶領域に記憶する前に、既に前記マスタデータ記憶領域に記憶されている前記マスタデータを複製して、前記複製データ記憶領域に記憶し、
その後、前記一時データ記憶制御手段は、前記一時データ記憶領域に格納された前記更新データをマスタデータとして前記マスタデータ記憶領域に記憶する、
記憶制御装置。
【請求項３】
請求項１または２に記載の記憶制御装置であって、
前記一時データ記憶領域は、前記更新データを記憶する前記マスタデータ記憶領域上の位置情報と、前記更新データを記憶したか否かを表す更新フラグ情報と、を記憶する一時保持管理テーブルを含み、
前記一時データ記憶制御手段は、前記一時保持管理テーブルに記憶された前記位置情報と前記更新フラグ情報とに基づいて、前記一時データ記憶領域に記憶された前記更新データを、前記マスタデータ記憶領域に記憶する、
記憶制御装置。
【請求項４】
請求項１乃至３のいずれかに記載の記憶制御装置であって、
前記一時データ記憶領域に記憶された全ての前記更新データを、前記マスタデータ記憶領域に記憶する前に、新たに生成された第２の複製データ記憶領域と、
前記第２の複製データ記憶領域の作成時に、前記マスタデータ記憶領域への記憶が完了していない前記更新データを、マスタデータとして前記マスタデータ記憶領域に記憶する遅延コピーデータ複製手段と、
を備え、
前記マスタデータ複製手段は、前記一時データ記憶制御手段にて前記マスタデータ記憶領域に記憶された前記マスタデータを前記第２の複製データ記憶領域に記憶するとともに、前記遅延コピーデータ複製手段にて前記マスタデータ記憶領域に記憶された前記マスタデータを前記複製データ記憶領域に記憶する、
記憶制御装置。
【請求項５】
マスタデータを記憶するマスタデータ記憶領域と、
前記マスタデータを更新する更新データを一時的に格納する一時データ記憶領域と、
前記マスタデータを複製した複製データを記憶する複製データ記憶領域と、
を備える記憶制御装置にて、
前記複製データを前記複製データ記憶領域に記憶し、
前記マスタデータの更新命令により、前記一時データ記憶領域に前記更新データを格納するとともに、その後、前記一時データ記憶領域に格納された前記更新データをマスタデータとして前記マスタデータ記憶領域に記憶する、
情報処理方法。
【請求項６】
請求項５に記載の情報処理方法であって、
前記一時データ記憶領域に格納された前記更新データを前記マスタデータ記憶領域に記憶する前に、既に前記マスタデータ記憶領域に記憶されている前記マスタデータを複製して、前記複製データ記憶領域に記憶し、
その後、前記一時データ記憶領域に格納された前記更新データをマスタデータとして前記マスタデータ記憶領域に記憶する、
情報処理方法。
【請求項７】
マスタデータを記憶するマスタデータ記憶領域と、
前記マスタデータを更新する更新データを一時的に格納する一時データ記憶領域と、
前記マスタデータを複製した複製データを記憶する複製データ記憶領域と、
を備える記憶制御装置に、
前記複製データを前記複製データ記憶領域に記憶するマスタデータ複製制御手段と、
前記マスタデータの更新命令により、前記一時データ記憶領域に前記更新データを格納するとともに、その後、前記一時データ記憶領域に格納された前記更新データを複製して、マスタデータとして前記マスタデータ記憶領域に記憶する一時データ記憶制御手段と、
を実現させるためのプログラム。
【請求項８】
請求項７に記載のプログラムであって、
前記マスタデータ複製制御手段は、前記一時データ記憶制御手段が前記一時データ記憶領域に格納された前記更新データを前記マスタデータ記憶領域に記憶する前に、既に前記マスタデータ記憶領域に記憶されている前記マスタデータを複製して、前記複製データ記憶領域に記憶し、
その後、前記一時データ記憶制御手段は、前記一時データ記憶領域に格納された前記更新データをマスタデータとして前記マスタデータ記憶領域に記憶する、
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶制御装置にかかり、特に、複製データを記憶保持する記憶制御装置に関する。
【背景技術】
【０００２】
近年、社会基盤がＩＴ化されるにつれ、企業或いは個人が保有するデータ量が急激に増加している。また、電子商取引の普及や査証用データ保管の法制化等により、データ自体の質や価値が高まってきている。このような状況で、データ損失という事態が及ぼす影響が広く一般に認識されるようになるとともに、データ損失を未然に防ぐためのバックアップ技術に大きな関心が寄せられてきている。
【０００３】
ここで、バックアップ技術の一つであるミラーリング方式のバックアップについて説明する。ミラーリング方式では、まず、バックアップの対象となるボリューム（マスタ・ボリューム）の静止点（バックアップとしてデータを記憶する状態）を確保するために、マスタ・ボリュームに対してアクセスしている、データベースなどのアプリケーションを停止する。次に、マスタ・ボリュームと同一容量のボリューム（バックアップ・ボリューム）を作成し、マスタ・ボリュームの全データをバックアップ・ボリュームへコピーする。そして、コピーが完了すると、停止していたデータベースなどのアプリケーションを再開する。また、バックアップ・ボリュームに対するコピーが完了すると、バックアップ・ボリュームからデータを読み出し、テープなどのバックアップ用装置にデータを保存する。
【０００４】
なお、上記したバックアップ処理では、アプリケーションを停止してから、バックアップ・ボリュームを作成し、マスタ・ボリュームからバックアップ・ボリュームへデータをコピーしたが、アプリケーションが動作している最中に、バックアップ・ボリュームを作成することもできる。この場合、マスタ・ボリュームからバックアップ・ボリュームへのデータのコピーを事前に準備し、静止点を確保してから、マスタ・ボリュームとバックアップ・ボリュームとの同期を取るまでの時間を短縮する方式も実現されている。
【０００５】
しかし、何れの方式においても、静止点を確保してから、マスタ・ボリュームのデータをバックアップ・ボリュームへ完全にコピーし終えるまでに、コピー量に応じた時間を要することになる。また、例えばデータ・マイニングなどバックアップ用途以外に、同一マスタ・ボリュームに対して複数のバックアップ・ボリュームを作成することがあるが、その場合、マスタ・ボリュームの数倍のデータ容量を消費することになる。
【０００６】
このようなミラーリング方式の問題を回避するために、最近は、スナップショット方式を採用したバックアップが頻繁に使われるようになってきている（例えば特許文献１）。ここで特許文献１に記載されている、共有プールを使用するスナップショット方式を採用したデータ複製システムの構成について、図１乃至図３を参照して、その一例を説明する。
【０００７】
図１に示すように、スナップショット方式を採用したディスクアレイ・サブシステム１００は、マスタ・ボリューム１０１と、スナップショット・ボリューム１０２と、共有プール・ボリューム１０３と、データ複製制御部１０４と、アドレス変換部１０５と、を備える。
【０００８】
スナップショット・ボリューム１０２は、マスタ・ボリューム１０１と同一容量で、実際には物理的な容量を持たない仮想的なボリュームである。共有プール・ボリューム１０３は、スナップショット・ボリューム１０２のデータを格納するボリュームである。ディスクアレイ・サブシステム１００のマイクロプロセッサ（以下、単にＣＰＵ（Central  Processing  Unit）と称する）は、スナップショット・ボリューム１０２と、共有プール・ボリューム１０３と、を作成し、制御する。
【０００９】
データ複製制御部１０４は、スナップショット・ボリューム１０２へのデータアクセスを管理する。データ複製制御部１０４は、図２に示すように、マスタ・ボリューム１０１やスナップショット・ボリューム１０２等の属性を管理する属性管理テーブル２０１と、ボリューム間のスナップショット関係を表すボリューム対応管理テーブル２０２と、マスタ・ボリューム１０１とスナップショット・ボリューム１０２との差分を管理する差分管理テーブル２０３とを有する。差分管理テーブル２０３は、スナップショット・ボリューム１０２がデータを保持していない場合には値「０」をとり、データを保持している場合には値「１」をとる。なお、差分管理テーブル２０３は、初期値として、全て「０」をとるものとする。
【００１０】
アドレス変換部１０５は、マスタ・ボリューム１０１の複製データの実際の格納先を管理する。アドレス変換部１０５は、図３に示すように、スナップショット・ボリューム１０２の実際の複製データの格納アドレスを保持するディレクトリ３０１と、共有プール・ボリューム１０３の使用状況を管理する割当管理テーブル３０２とを有する。なお、ここでは、初期値として、ディレクトリ３０１のスナップショット・ボリューム１０２を示す項目（ＬＶ１）の全てに「ｎｕｌｌ」が設定され、割当管理テーブル３０２の値に全て「０」が設定されているものとする。
【００１１】
次に、ディスクアレイ・サブシステム１００が、ライト・コマンドを受信したときの処理について説明する。ここでは、図１に示すように、マスタ・ボリューム１０１（ＬＶ０）のページ０から順番に（ＡＡ、ＢＢ、ＣＣ、ＤＤ、・・・、ＮＮ）というデータが格納されている場合に、マスタ・ボリューム１０１（ＬＶ０）のページ２に対して、（ＺＣ）のライト・コマンドが発行された場合について説明する。
【００１２】
先ず、ＣＰＵは、ライト・コマンドを受信すると、図２の属性管理テーブル２０１を参照し、受信したライト・コマンドがマスタ・ボリューム１０１に対するコマンドであるか否かを判定する。ここでは、ＣＰＵは、マスタ・ボリューム１０１に対するライト・コマンドであると判定する。そして、データ複製制御部１０４は、図２のボリューム対応管理テーブル２０２を参照し、このマスタ・ボリューム１０１（ＬＶ０）と対になるスナップショット・ボリューム１０２（ＬＶ１）を特定する。そして、データ複製制御部１０４は、差分管理テーブル２０３を参照して、特定したスナップショット・ボリューム１０２の書き込み要求アドレスにデータがあるか否かを判定する。
【００１３】
ここでは、データ複製制御部１０４は、スナップショット・ボリューム１０２にデータが無い（つまり値が全て「０」）と判定する。この場合、アドレス変換部１０５は、割当管理テーブル３０２を探索し、共有プール・ボリューム１０３の未使用領域を検索する。具体的には、アドレス変換部１０５は、共有プール・ボリューム１０３の未使用領域の中から今回使用する領域（例えばページ０」を検索する。
【００１４】
そして、ＣＰＵは、検索した共有プール・ボリューム１０３の未使用領域に、マスタ・ボリューム１０１の書き込み要求アドレスにある既存データをコピーする。例えば、ＣＰＵは、図１に示すように、検索した共有プール・ボリューム１０３の未使用領域「ページ０」に、マスタ・ボリューム１０１のページ２にある「ＣＣ」をコピーする。続いて、アドレス変換部１０５は、図３の割当管理テーブル３０２のページ番号「ページ０」のＬＶ２（共有プール・ボリューム１０３）に、使用済みであることを示す値「１」を設定する。
【００１５】
続いて、アドレス変換部１０５は、図３のディレクトリ３０１を参照して、スナップショット・ボリューム１０２（ＬＶ１）のページ２に、データの格納アドレスとして「ＬＶ２（共有プール・ボリューム１０３）、ページ０」を設定する。
【００１６】
そして、データ複製制御部１０４は、図２の差分管理テーブル２０３を参照して、スナップショット・ボリューム（ＬＶ１）のページ２に、データがあることを示す値「１」を設定する。最後に、ＣＰＵは、ライト・コマンドにより示されるデータ（ＺＣ）をマスタ・ボリューム１０１のページ２に書き込み（ライト処理）、処理を終了する。
【先行技術文献】
【特許文献】
【００１７】
【特許文献１】特開２００５−２０８９５０号公報
【発明の概要】
【発明が解決しようとする課題】
【００１８】
上述したように、スナップショット方式では、マスタ・ボリューム１０１に対してライト・コマンドが発行されると、マスタ・ボリューム１０１に対するライト処理に先立ち、対応するスナップショット・ボリューム１０２において、ライト・コマンドで指定されるページにデータが格納されているかどうか判定する。そして、データが格納されていない場合は、指定されたページのデータ（例えばＣＣ）をスナップショット・ボリューム１０２へコピーする必要がある。
【００１９】
このように、ライト・コマンドにより更新データを受け付けた時に、マスタ・ボリューム１０１のデータの複製データをスナップショット・ボリューム１０２へ記憶するので、複製データの記憶が完了するまでの間は、マスタ・ボリューム１０１に更新データを記憶することができず、マスタ・ボリューム１０１へのアクセス性能が低下することがあった。
【００２０】
さらに、近年、安価にバックアップを行うために、スナップショット・ボリューム１０２をＡＴＡ（Advanced  Technology  Attachment）規格の磁気ディスク装置を使って構築するシステムが見られるが、このようなシステムの場合、マスタ・ボリューム１０１へのアクセス性能が著しく低下することが予想される。このように、マスタ・ボリューム１０１へのアクセス性能が低下するという問題があった。
【００２１】
このため、本発明の目的は、アクセス性能が低下するという問題を解決することができる記憶制御装置を提供させることにある。
【課題を解決するための手段】
【００２２】
上記目的を達成すべく、本発明の一形態である記憶制御装置は、
マスタデータを記憶するマスタデータ記憶領域と、
前記マスタデータを更新する更新データを一時的に格納する一時データ記憶領域と、
前記マスタデータを複製した複製データを記憶する複製データ記憶領域と、
前記複製データを前記複製データ記憶領域に記憶するマスタデータ複製制御手段と、
を備え、
前記マスタデータの更新命令により、前記一時データ記憶領域に前記更新データを格納するとともに、その後、前記一時データ記憶領域に格納された前記更新データをマスタデータとして前記マスタデータ記憶領域に記憶する一時データ記憶制御手段、
を備える、
という構成を取る。
【００２３】
また、本発明の他の形態である、情報処理方法は、
マスタデータを記憶するマスタデータ記憶領域と、
前記マスタデータを更新する更新データを一時的に格納する一時データ記憶領域と、
前記マスタデータを複製した複製データを記憶する複製データ記憶領域と、
を備える記憶制御装置にて、
前記複製データを前記複製データ記憶領域に記憶し、
前記マスタデータの更新命令により、前記一時データ記憶領域に前記更新データを格納するとともに、その後、前記一時データ記憶領域に格納された前記更新データをマスタデータとして前記マスタデータ記憶領域に記憶する、
という構成を取る。
【００２４】
また、本発明の他の形態であるプログラムは、
マスタデータを記憶するマスタデータ記憶領域と、
前記マスタデータを更新する更新データを一時的に格納する一時データ記憶領域と、
前記マスタデータを複製した複製データを記憶する複製データ記憶領域と、
を備える記憶制御装置に、
前記複製データを前記複製データ記憶領域に記憶するマスタデータ複製制御手段と、
前記マスタデータの更新命令により、前記一時データ記憶領域に前記更新データを格納するとともに、その後、前記一時データ記憶領域に格納された前記更新データを複製して、マスタデータとして前記マスタデータ記憶領域に記憶する一時データ記憶制御手段と、
ことを実現させるためのプログラムである。
【発明の効果】
【００２５】
本発明は、以上のように構成されることによりアクセス性能の低下を抑制することができるという優れた効果を有する。
【図面の簡単な説明】
【００２６】
【図１】本発明に関連するスナップショット動作の例を示す機能ブロック図である。
【図２】データ複製制御部を示す機能ブロック図である。
【図３】アドレス変換部を示す機能ブロック図である。
【図４】複製準備動作を示すフローチャートである。
【図５】ライト・コマンド動作を示すフローチャートである。
【図６】リード・コマンド動作を示すフローチャートである。
【図７】ライト処理の例を説明するための図である。
【図８】本発明の第１実施形態におけるディスクアレイ・サブシステムの構成の概要を示すブロック図である。
【図９】スナップショット動作の例を示す機能ブロック図である。
【図１０】データ複製制御部を示す機能ブロック図である。
【図１１】アドレス変換部を示す機能ブロック図である。
【図１２】キャッシュデータ複製制御部を示す機能ブロック図である。
【図１３】ライト処理の例を説明するための図である。
【図１４】複製準備動作を示すフローチャートである。
【図１５】スナップショット開始処理を示すフローチャートである。
【図１６】ライト・コマンド動作を示すフローチャートである。
【図１７】キャッシュデータ複製処理動作を示すフローチャートである。
【図１８】リード・コマンド動作を示すフローチャートである。
【図１９】本発明の第２実施形態におけるディスクアレイ・サブシステムの構成の概要を示すブロック図である。
【図２０】スナップショット動作の具体例を示す機能ブロック図である。
【図２１】キャッシュデータ複製制御部を示す機能ブロック図である。
【図２２】スナップショット開始処理を示すフローチャートである。
【図２３】ライト・コマンド動作を示すフローチャートである。
【図２４】ライト・コマンド動作を示すフローチャートである。
【図２５】ライト・コマンド動作を示すフローチャートである。
【図２６】キャッシュデータ複製処理動作を示すフローチャートである。
【図２７】リード・コマンド動作を示すフローチャートである。
【図２８】リード・コマンド動作を示すフローチャートである。
【図２９】本発明の第３実施形態における記憶制御装置の構成の概要を示すブロック図である。
【発明を実施するための形態】
【００２７】
＜第１実施形態＞
まず、本発明に関連するスナップショット方式を採用した、上述したデータ複製システムの詳細について、図１乃至図７を参照して説明する。
【００２８】
図１に示すように、スナップショット方式を採用したディスクアレイ・サブシステム１００は、マスタ・ボリューム１０１と、スナップショット・ボリューム１０２と、共有プール・ボリューム１０３と、データ複製制御部１０４と、アドレス変換部１０５と、を備える。
【００２９】
スナップショット・ボリューム１０２は、マスタ・ボリューム１０１と同一容量で、実際には物理的な容量を持たない仮想的なボリュームである。共有プール・ボリューム１０３は、スナップショット・ボリューム１０２のデータを格納するボリュームである。ディスクアレイ・サブシステム１００のマイクロプロセッサ（以下、単にＣＰＵと称する）は、スナップショット・ボリューム１０２と、共有プール・ボリューム１０３と、を作成し、制御する。
【００３０】
データ複製制御部１０４は、スナップショット・ボリューム１０２へのデータアクセスを管理する。データ複製制御部１０４は、図２に示すように、マスタ・ボリューム１０１やスナップショット・ボリューム１０２等の属性を管理する属性管理テーブル２０１と、ボリューム間のスナップショット関係を表すボリューム対応管理テーブル２０２と、マスタ・ボリューム１０１とスナップショット・ボリューム１０２との差分を管理する差分管理テーブル２０３とを有する。差分管理テーブル２０３は、スナップショット・ボリューム１０２がデータを保持していない場合には値「０」をとり、データを保持している場合には値「１」をとる。なお、差分管理テーブル２０３は、初期値として、全て「０」をとるものとする。
【００３１】
アドレス変換部１０５は、マスタ・ボリューム１０１の複製データの実際の格納先を管理する。アドレス変換部１０５は、図３に示すように、スナップショット・ボリューム１０２の実際の複製データの格納アドレスを保持するディレクトリ３０１と、共有プール・ボリューム１０３の使用状況を管理する割当管理テーブル３０２とを有する。なお、アドレス変換部１０５は、初期値として、ディレクトリ３０１のスナップショット・ボリューム１０２を示す項目（ＬＶ１）の全てに「ｎｕｌｌ」を設定し、割当管理テーブル３０２の値に全て「０」を設定するものとする。
【００３２】
次に、ディスクアレイ・サブシステム１００の動作について図４乃至図６のフローチャートを参照して、具体的に説明する。ここでは、ＬＶ（ロジカル・ボリューム）０をマスタ・ボリューム１０１、ＬＶ１をスナップショット・ボリューム１０２、ＬＶ２を共有プール・ボリューム１０３として使用する場合について説明する。
【００３３】
最初に、図４を参照して、ボリュームを複製する複製準備処理について説明する。まず、ＣＰＵは、ディスクアレイ・サブシステム１００内に、共有プール・ボリューム１０３を作成する（図４のステップＳ１）。続いて、データ複製制御部１０４は、属性管理テーブル２０１を初期化する（ステップＳ２）。具体的には、データ複製制御部１０４は、属性管理テーブル２０１のＬＶ番号「ＬＶ２」に属性「共有プール」を初期値として設定する。続いて、アドレス変換部１０５は、割当管理テーブル３０２を初期化する（ステップＳ３）。具体的には、アドレス変換部１０５は、割当管理テーブル３０２において共有プール・ボリューム（ＬＶ２）が未使用状態であることを示す値「０」を設定する。
【００３４】
次に、ＣＰＵは、マスタ・ボリューム１０１と、このマスタ・ボリューム１０１と同じ記憶容量のスナップショット・ボリューム１０２とを作成する（ステップＳ４）。例えば、図１に示すように、ＣＰＵは、（ＡＡ、ＢＢ、ＣＣ、ＤＤ、・・・、ＮＮ）というデータ（マスタデータ）を格納するマスタ・ボリューム１０１を作成する。また、例えばＣＰＵは、マスタデータの複製を記憶するための領域を有するスナップショット・ボリューム１０２を作成する。
【００３５】
次に、ディスクアレイ・サブシステム１００のＣＰＵは、スナップショット・コマンドを受信する（ステップＳ５）。スナップショット・コマンドは、マスタ・ボリューム１０１に記憶されたマスタデータを複製し、スナップショット・ボリューム１０２に記憶させるためのコマンドである。ＣＰＵは、例えば、スナップショット・コマンドを周期的に受信する。そして、データ複製制御部１０４は、属性管理テーブル２０１と、ボリューム対応管理テーブル２０２と、差分管理テーブル２０３と、を初期化する（ステップＳ６）。具体的には、まず、データ複製制御部１０４は、属性管理テーブル２０１においてＬＶ番号「ＬＶ０」にマスタ・ボリューム１０１を示す属性「マスタ」を設定し、ＬＶ番号「ＬＶ１」にスナップショット・ボリューム１０２を示す属性「スナップショット」を初期値として設定する（図２）。
【００３６】
続いて、データ複製制御部１０４は、例えば、ボリューム対応管理テーブル２０２において「ＬＶ０（マスタ・ボリューム１０１）」と「ＬＶ１（スナップショット・ボリューム１０２）」とがスナップショット関係にあることを示すように、ＬＶ番号「ＬＶ０」のスナップショットに「ＬＶ１」を設定し、ＬＶ番号「ＬＶ１」のスナップショットに「ＬＶ０」を設定する（図２）。
【００３７】
さらに、データ複製制御部１０４は、例えば、差分管理テーブル２０３のスナップショット・ボリューム１０２を示す「ＬＶ１」の列に、スナップショット・ボリューム１０２がデータを保持していないことを示す値「０」を初期値として設定する（図２）。
【００３８】
続いて、アドレス変換部１０５は、ディレクトリ３０１を初期化する（ステップＳ７）。例えば、アドレス変換部１０５は、スナップショット・ボリューム１０２を示す「ＬＶ１」の列に、共有プール・ボリューム１０３の記憶領域が割り当てられていないことを示すｎｕｌｌ値を初期値として設定する（図３）。これにより、マスタ・ボリューム１０１のデータを複製可能になる。
【００３９】
次に、図５を参照して、マスタ・ボリューム１０１のデータを複製する準備が完了した状態でディスクアレイ・サブシステム１００が、ライト・コマンドを受信したときのライト・コマンド処理について説明する。ここでは、マスタ・ボリューム１０１（ＬＶ０）のページ２に対して、データ（ＺＣ）を書き込むライト・コマンドが発行された場合について説明する。
【００４０】
先ず、ディスクアレイ・サブシステム１００のＣＰＵは、ライト・コマンドを受信（ステップＳ１１）すると、図２の属性管理テーブル２０１を参照し、受信したライト・コマンドがマスタ・ボリューム１０１へのコマンドであるかを判定する（ステップＳ１２）。
【００４１】
マスタ・ボリューム１０１へのコマンドでないと判定した場合（ステップＳ１２：Ｎｏ）、例えば、スナップショット・ボリューム１０２に対するライト・コマンドである場合には、データを書き込まずにライト・コマンド処理を終了する。なお、この動作は、スナップショット・ボリューム１０２が、スナップショット・コマンドを受信した時点におけるマスタ・ボリューム１０１の複製データを維持（保持）するという運用に従った場合のバックアップ等の場合の処理である。従って、その他の運用形態においては、ライト・コマンドの要求通りにスナップショット・ボリューム１０２へデータを書き込んでもよい。
【００４２】
一方、マスタ・ボリューム１０１へのコマンドであると判定した場合（ステップＳ１２：Ｙｅｓ）には、データ複製制御部１０４は、ボリューム対応管理テーブル２０２を参照して、このマスタ・ボリューム１０１と対になるスナップショット・ボリューム１０２を特定する（ステップＳ１３）。そして、データ複製制御部１０４は、差分管理テーブル２０３を参照して、特定したスナップショット・ボリューム１０２の書き込み要求アドレスにデータがあるか否かを判定する（ステップＳ１４）。
【００４３】
スナップショット・ボリューム１０２にデータがあると判定した場合（ステップＳ１４：Ｙｅｓ）、すなわち、差分管理テーブル２０３に「１」が設定されている場合には、ＣＰＵは、マスタ・ボリューム１０１へデータを書き込み（ステップＳ２０）、ライト・コマンド処理を終了する。
【００４４】
一方、スナップショット・ボリューム１０２にデータが無いと判定した場合（ステップＳ１４：Ｎｏ）、ＣＰＵは、割当管理テーブル３０２を探索し、共有プール・ボリューム１０３の未使用領域を検索する（ステップＳ１５）。具体的には、ＣＰＵは、共有プール・ボリューム１０３の未使用領域の中から今回使用する領域を検索する。例えば、ＣＰＵは、未使用領域として「ページ０」を検索する。
【００４５】
そして、ＣＰＵは、検索した共有プール・ボリューム１０３の未使用領域に、マスタ・ボリューム１０１の書き込み要求アドレスにある既存データをコピーする（ステップＳ１６）。例えば、ＣＰＵは、図１に示すように、検索した共有プール・ボリューム１０３の未使用領域「ページ０」に、マスタ・ボリューム１０１のページ２にある「ＣＣ」をコピーする。続いて、アドレス変換部１０５は、割当管理テーブル３０２を更新する（ステップＳ１７）。例えば、アドレス変換部１０５は、割当管理テーブル３０２のページ番号「ページ０」のＬＶ２（共有プール・ボリューム１０３）に、使用済みであることを示す値「１」を設定する。
【００４６】
続いて、アドレス変換部１０５は、ディレクトリ３０１を更新する（ステップＳ１８）。例えば、アドレス変換部１０５は、スナップショット・ボリューム１０２（ＬＶ１）のページ２を示すデータの格納アドレスとして「ＬＶ２（共有プール・ボリューム１０３）、ページ０」を設定する。
【００４７】
そして、データ複製制御部１０４は、差分管理テーブル２０３を更新する（ステップＳ１９）。例えば、データ複製制御部１０４は、スナップショット・ボリューム１０２（ＬＶ１）のページ２にデータがあることを示す値「１」を設定する。最後に、ＣＰＵは、ライト・コマンドにより示されるデータ（ＺＣ）をマスタ・ボリューム１０１に書き込み（ステップＳ２０）、ライト・コマンド処理を終了する。
【００４８】
このように、ディスクアレイ・サブシステム１００は、マスタ・ボリューム１０１のデータを更新する場合に、まず、スナップショット・ボリューム１０２に更新前のデータを記憶する。例えば、図７Ａ，図７Ｂに示すように、ＣＰＵは、マスタ・ボリューム１０１のページ２に記憶（格納）された「ＣＣ」を、スナップショット・ボリューム１０２のページ２に記憶する。そして、その後、図７Ｃに示すように、ＣＰＵは、マスタ・ボリューム１０１のページ２に、ライト・コマンドにより示される「ＺＣ」を記憶する。
【００４９】
次に図６を参照して、リード・コマンドを受信したときの処理について説明する。リード・コマンドは、ボリュームからデータを読み出すためのコマンドである。まず、ＣＰＵは、リード・コマンドを受信する（ステップＳ４１）と、属性管理テーブル２０１を参照し、受信したコマンドがマスタ・ボリューム１０１へのコマンドであるか否かを判定する（ステップＳ４２）。具体的には、受信したコマンドがマスタ・ボリューム１０１に対するコマンドであるのか、それともスナップショット・ボリューム１０２に対するコマンドであるのかを判定する。
【００５０】
マスタ・ボリューム１０１へのコマンドであると判定した場合（ステップＳ４２：Ｙｅｓ）、マスタ・ボリューム１０１からデータを読み出し（ステップＳ４６）、データをホスト（例えばリード・コマンドを出力した端末装置）に転送して（ステップＳ４７）、リード・コマンド処理は終了する。
【００５１】
一方、スナップショット・ボリューム１０２に対するコマンドであると判定した場合（ステップＳ４２：Ｎｏ）、データ複製制御部１０４は、差分管理テーブル２０３を参照し、スナップショット・ボリューム１０２（の読み出し要求アドレス）にデータがあるか否かを判定する（ステップＳ４３）。
【００５２】
スナップショット・ボリューム１０２にデータがあると判定した場合（ステップＳ４３：Ｙｅｓ）、すなわち、差分管理テーブル２０３に「１」が設定されている場合には、アドレス変換部１０５は、ディレクトリ３０１を参照し、データが格納されている共有プール・ボリューム１０３上のアドレスを取得する（ステップＳ４４）。例えば、アドレス変換部１０５は、アドレスとして「ＬＶ２、ページ０」を取得する。そして、ＣＰＵは、共有プール・ボリューム１０３（ＬＶ２）のページ０からデータを読み出し（ステップＳ４６）、データをホストに転送して（ステップＳ４７）、リード・コマンド処理は終了する。
【００５３】
一方、スナップショット・ボリュームにデータが無いと判定した場合（ステップＳ４３：Ｎｏ）には、データ複製制御部１０４は、ボリューム対応管理テーブル２０２を参照し、スナップショット・ボリューム１０２と対となるマスタ・ボリューム１０１を特定する（ステップＳ４５）。そして、ＣＰＵは、特定したマスタ・ボリューム１０１からデータを読み出し（ステップＳ４６）、読み出したデータをホストに転送して（ステップＳ４７）、リード・コマンド処理を終了する。
【００５４】
なお、ここでは、共有プール・ボリューム１０３を使用したスナップショット方式を例に挙げて説明を行った。この他に、共有プール・ボリューム１０３を使用せず、スナップショット・ボリューム１０２を仮想ボリュームでなく通常のボリュームで作成し、データの退避をスナップショット・ボリューム１０２に行う方式もある。こちらの方式では仮想のスナップショット・ボリューム１０２から共有プール・ボリューム１０３へのアドレス変換が不要になるので、処理が簡易化される。しかしながら、複数のスナップショットを作成しようとすると、ミラーリングの時と同様に、マスタ・ボリューム１０１の複数倍のディスク容量を使用することになる。スナップショット方式でバックアップを行う際には、これらのメリット・デメリットを考慮したうえで方式を決定する必要がある。
【００５５】
次に、本発明の第１実施形態にかかるディスクアレイ・サブシステム（記憶制御装置）ついて図８乃至図１８を参照して説明する。図８乃至図１３は、ディスクアレイ・サブシステムの構成を説明するための図である。図１４乃至図１８は、ディスクアレイ・サブシステムの動作を説明するための図である。
【００５６】
（構成）
図８はディスクアレイ・サブシステム７００のハードウェア構成の概略について示した機能ブロック図である。ディスクアレイ・サブシステム７００は、マイクロプロセッサ７０１と、インタフェース制御部７０２と、制御用メモリ７０３と、ＲＡＩＤ制御部７０４（ボリューム制御部）と、複数の磁気ディスク装置７０５ａ乃至７０５ｆと、を備える。
【００５７】
ディスクアレイ・サブシステム７００は、上位装置としての管理端末７０７やホストコンピュータ等のホスト計算機７０６に対して、複数の磁気ディスク装置７０５ａ乃至７０５ｆを割り当ててデータのバックアップ等の処理を行う。
【００５８】
インタフェース制御部７０２は、上位装置と接続し、各種の情報を送受信する。ＲＡＩＤ制御部７０４は、各磁気ディスク装置７０５ａ乃至７０５ｆと接続し、制御する。インタフェース制御部７０２と、ＲＡＩＤ制御部７０４とは、制御用メモリ７０３に格納された制御プログラムに基づいて作動するマイクロプロセッサ７０１（以下、ＣＰＵ７０１と称する）によってデータの入出力が制御されるようになっている。
【００５９】
ＣＰＵ７０１は、制御用メモリ７０３に書き込む制御用プログラムを書き換えることで様々な機能を実現することが可能である。このＣＰＵ７０１は、データの複製や、複製したデータへのアクセスを制御するデータ複製制御部と、アドレス変換部と、キャッシュデータ複製制御部と、を有する。
【００６０】
制御用メモリ７０３は、属性管理テーブル、ボリューム対応管理テーブル、差分管理テーブル、ディレクトリ、割当管理テーブル、キャッシュ対応管理テーブル、キャッシュ保持管理テーブルを保持する。各テーブル等の詳細については、図１０乃至図１２を参照して後述する。
【００６１】
なお、図８の例では６台の磁気ディスク装置７０５ａ乃至７０５ｆが接続されている場合について示しているが、実際には其の各々が論理的に独立したボリューム、例えば、マスタ・ボリュームやスナップショット・ボリューム、或いは共有プール・ボリューム、キャッシュ・ボリューム等といったものを構成することに限られない。例えば、ＲＡＩＤ制御部７０４の制御のもとに、複数の磁気ディスク装置に跨って、見かけ上単一のボリュームを設けてもよいし、また、１つの磁気ディスク装置にパーティションを設定して、見かけ上複数のボリュームを１つの磁気ディスク装置内に設けてもよい。
【００６２】
次に、図９を参照して、ディスクアレイ・サブシステム７００の機能的な構成について説明する。図９はディスクアレイ・サブシステム７００の機能的な側面を簡略化して示した機能ブロック図である。
【００６３】
本発明のデータ複製システムを有するディスクアレイ・サブシステム７００は、複製元データを記憶したマスタ・ボリューム８０２（マスタデータ記憶領域）と、マスタ・ボリューム８０２の複製ボリュームとなるスナップショット・ボリューム８０３（複製データ記憶領域）と、マスタ・ボリューム８０２の一時データ格納先となるキャッシュ・ボリューム８０１（一時データ記憶領域）と、スナップショット・ボリューム８０３のデータ格納先となる共有プール・ボリューム８０４と、スナップショット・ボリューム８０３へのデータアクセスを管理するデータ複製制御部８１０と、複製データの実際の格納先を管理するアドレス変換部８１１と、キャッシュ・ボリューム８０１からマスタ・ボリューム８０２へのコピー（更新データの記憶）を行うキャッシュデータ複製制御部８１２と、を有する。なお、マスタ・ボリューム８０２及びスナップショット・ボリューム８０３の個数に関して特に制限は無い。また、キャッシュ・ボリューム８０１は、マスタ・ボリューム８０２に対し一つ作成される。
【００６４】
図９の例では、まずマスタ・ボリューム８０２（ＬＶ１）のデータがページ０から順に（ＡＡ、ＡＢ、ＡＣ、ＡＤ、・・・、ＡＮ）というデータを保持している状態から、データ複製制御部８１０がスナップショット・ボリューム８０３（ＬＶ３）を作成し、その後、マスタ・ボリューム８０２（ＬＶ１）のページ０からページ３に対してデータ（ＢＡ、ＢＢ、ＢＣ、ＢＤ）を記録（更新）した状態に遷移する。そして、さらにキャッシュ・ボリューム８０１のデータを更新し、キャッシュデータ複製制御部８１２が、ページ０とページ１のデータをキャッシュ・ボリューム８０１からマスタ・ボリューム８０２にコピーした段階で、ページ１に再度「ＢＢＢ」のデータを記憶（更新）した状態を示している。
【００６５】
データ複製制御部８１０は、図１０に示すように、マスタ属性やスナップショット属性等の、ボリュームの属性を管理する属性管理テーブル９０１と、マスタ・ボリューム８０２とスナップショット・ボリューム８０３のペアの関係を管理するボリューム対応管理テーブル９０２と、マスタ・ボリューム８０２の更新の際にスナップショット・ボリューム８０３へのデータ複製が行われた事を管理する差分管理テーブル９０３と、を有する。
【００６６】
アドレス変換部８１１は、図１１に示すように、スナップショット・ボリューム８０３の実データの格納アドレスを保持するディレクトリ１００１と、共有プール・ボリューム８０４の使用状況を管理する割当管理テーブル１００２と、を有する。
【００６７】
キャッシュデータ複製制御部８１２は、マスタ・ボリューム８０２とキャッシュ・ボリューム８０１のペア関係を管理するキャッシュ対応管理テーブル１１０１と、キャッシュ・ボリューム８０１がマスタ・ボリューム８０２のデータを保持していることを管理するキャッシュ保持管理テーブル１１０２（一時保持管理テーブル）と、を有する。
【００６８】
先ず、スナップショット動作の事前準備の処理について説明する。ここでは、ＬＶ０をキャッシュ・ボリューム８０１とし、ＬＶ１をマスタ・ボリューム８０２とし、ＬＶ２を共有プール・ボリューム８０４とし、ＬＶ３をスナップショット・ボリューム８０３として使用する場合について説明する。
【００６９】
まず、ＣＰＵ７０１は、ディスクアレイ・サブシステム７００内に、共有プール・ボリューム８０４を作成する。続いて、データ複製制御部８１０は、属性管理テーブル９０１を設定（初期化）する。具体的には、データ複製制御部１０４は、属性管理テーブル２０１のＬＶ番号「ＬＶ２」に属性「共有プール」を設定する。また、アドレス変換部１０５は、割当管理テーブル１００２を初期化する。具体的には、アドレス変換部１０５は、割当管理テーブル３０２において共有プール・ボリューム８０４（ＬＶ２）が未使用状態であることを示す値「０」を設定する。
【００７０】
共有プール・ボリューム８０４作成後は、スナップショット開始コマンドを受信することで、スナップショットを開始することができる。スナップショット開始コマンドは、マスタ・ボリューム８０２に記憶されたマスタデータを複製し、スナップショット・ボリューム８０３に記憶させるためのコマンドである。スナップショット開始コマンドを受信すると、ＣＰＵ７０１は、マスタ・ボリューム８０２とスナップショット・ボリューム８０３とキャッシュ・ボリューム８０１と、を作成する。例えば、ＣＰＵ７０１は、ページ０から順に（ＡＡ、ＡＢ、ＡＣ、ＡＤ、・・・、ＡＮ）というデータを格納するマスタ・ボリューム８０２を作成する。また、例えばＣＰＵ７０１は、マスタデータの複製を記憶するための領域を有するスナップショット・ボリューム８０３を作成する。
【００７１】
次に、データ複製制御部８１０は、属性管理テーブル９０１を参照し、マスタ・ボリューム８０２に指定されたボリュームがすでにマスタ・ボリュームとして使用されているかを判定する。例えば、データ複製制御部８１０は、属性管理テーブル９０１のＬＶ番号「ＬＶ１」に属性「マスタ」が記憶されているか否かを判定する。ここでは、マスタ属性が設定されていない（つまり新規に作成するスナップショットの開始コマンドである）と判定し、各種テーブルの設定処理を行う。
【００７２】
なお、属性管理テーブル９０１において、既にマスタ・ボリューム８０２に指定したロジカル・ボリューム「ＬＶ２」に属性「マスタ」がセットされている場合は、キャッシュデータ複製制御部８１２は、キャッシュ対応管理テーブル１１０１を参照し、指定したマスタ・ボリューム８０２に対応するキャッシュ・ボリューム８０１を特定する。そして、キャッシュデータ複製制御部８１２は、キャッシュ保持管理テーブル１１０２を参照し、キャッシュ・ボリューム８０１のデータをマスタ・ボリューム８０２へコピーし、コピーが完了するまで待機する。具体的には、キャッシュ保持管理テーブル１１０２は、データ（更新データ）を記憶するマスタ・ボリューム８０２上のページ（位置情報）と、更新データを記憶したか否かを表す更新フラグ情報と、を記憶する。そして、キャッシュデータ複製制御部８１２は、キャッシュ保持管理テーブル１１０２に記憶された位置情報と更新フラグ情報に基づいて、値「１」が設定されているページの更新データを、マスタ・ボリューム８０２上の、当該ページに記憶する。
【００７３】
以下、各種テーブルの設定（初期化）処理について説明する。まず、データ複製制御部８１０は、属性管理テーブル９０１に属性を設定する。具体的には、データ複製制御部８１０は、作成するロジカル・ボリュームの属性管理テーブル９０１にマスタ属性、スナップショット属性、キャッシュ属性を設定する。例えば、データ複製制御部８１０は、属性管理テーブル２０１においてＬＶ番号「ＬＶ０」に属性「キャッシュ」を設定し、ＬＶ番号「ＬＶ１」に属性「マスタ」を設定し、ＬＶ番号「ＬＶ３」に属性「スナップショット」を設定する。
【００７４】
次に、データ複製制御部８１０は、ボリューム対応管理テーブル９０２に対応付けを設定する。つまり、データ複製制御部８１０は、ボリューム対応管理テーブル９０２においてペアとなるマスタ・ボリューム８０２およびスナップショット・ボリューム８０３のロジカル・ボリューム番号を登録する。例えば、データ複製制御部８１０は、ＬＶ番号「ＬＶ１（マスタ・ボリューム８０２）」のスナップショットに「ＬＶ３（スナップショット・ボリューム８０３）」を設定し、ＬＶ番号「ＬＶ３」のスナップショットに「ＬＶ１」を設定する。
【００７５】
続いて、データ複製制御部８１０は、差分管理テーブル９０３を初期化する。具体的には、データ複製制御部８１０は、差分管理テーブル９０３においてスナップショット・ボリューム８０３を示す「ＬＶ３」の列に、スナップショット・ボリューム８０３へのデータの割当てがないことを示す値「０」を初期値として設定する。
【００７６】
また、アドレス変換部８１１は、ディレクトリ１００１を初期化する。具体的には、アドレス変換部８１１は、ディレクトリ１００１においてスナップショット・ボリューム８０３を示す「ＬＶ３」の列に、共有プール・ボリューム８０４の記憶領域が割当てられていないことを示すｎｕｌｌ値を初期値として設定する。
【００７７】
さらに、キャッシュデータ複製制御部８１２は、キャッシュ対応管理テーブル１１０１に対応付けを設定する。具体的には、キャッシュデータ複製制御部８１２は、キャッシュ対応管理テーブル１１０１においてマスタとキャッシュの組み合わせとなるロジカル・ボリューム番号を登録する。例えば、キャッシュデータ複製制御部８１２は、ＬＶ番号「ＬＶ０（キャッシュ・ボリューム８０１）」のキャッシュに「ＬＶ１（マスタ・ボリューム８０２）」を設定し、ＬＶ番号「ＬＶ１」のキャッシュに「ＬＶ０」を設定する。
【００７８】
さらにまた、キャッシュデータ複製制御部８１２は、キャッシュ保持管理テーブル１１０２を初期化する。具体的には、キャッシュデータ複製制御部８１２は、キャッシュ保持管理テーブル１１０２においてキャッシュ・ボリューム８０１に、マスタ・ボリューム８０２に対するデータが保持されていないことを示す値「０」で初期化する。
【００７９】
これ以降、スナップショット・ボリューム８０３（ＬＶ３）は、スナップショット開始コマンドを受信した時点におけるマスタ・ボリューム８０２（ＬＶ１）のボリューム・イメージを保持する。
【００８０】
次に、スナップショット開始コマンドを受信した後に発生したライト・コマンド処理について、説明する。ここでは、マスタ・ボリューム８０２（ＬＶ１）のページ０乃至３に対して（ＢＡ、ＢＢ、ＢＣ、ＢＤ）のライト・コマンド（更新命令）が発行された場合について説明する。
【００８１】
まず、ＣＰＵ７０１は、上記ライト・コマンドを受信する。続いて、ＣＰＵ７０１は、マスタ・ボリューム８０２へのライト処理か否かを判定する。つまり、ＣＰＵ７０１は、属性管理テーブル９０１を参照し、ライト・コマンドにて示される対象ボリュームにマスタ属性が設定されているか否かを判定する。
【００８２】
マスタ・ボリューム８０２以外へのライト・コマンド処理であると判定した場合にはライト・コマンド処理を終了する。一方、ここでは、マスタ・ボリューム８０２へのライト処理であるので、マスタ・ボリューム８０２へのライト・コマンドだと判定する。そして、データ複製制御部８１０は、ボリューム対応管理テーブル９０２を参照し、ライト・コマンド対象のロジカル・ボリュームをマスタ・ボリューム８０２（ＬＶ１）に持つスナップショット・ボリューム８０３（ＬＶ３）を特定する。
【００８３】
次に、データ複製制御部８１０は、差分管理テーブル９０３を参照し、ライト対象の範囲（例えばページ０乃至３）において、スナップショット・ボリューム８０３に既に差分があるか否かを判定する。既に差分があると判定した場合には、マスタ・ボリューム８０２のデータをスナップショット・ボリューム８０３に退避する必要は無いので、ライト・コマンドの対象のマスタ・ボリューム８０２にライトデータを書き込み、ライト・コマンド処理を終了する。
【００８４】
一方、ここでは、差分管理テーブル９０３の初期値として全て「０」が設定されているので、スナップショット・ボリューム８０３に差分がないと判定し、スナップショット開始コマンドを受信した瞬間（時点）のマスタ・ボリューム８０２のボリューム・イメージを、スナップショット・ボリューム８０３に保持させる。具体的には、まず、ＣＰＵ７０１は、マスタ・ボリューム８０２についてスナップショット開始コマンドの受信中かどうかを判定する。
【００８５】
スナップショット開始コマンドを受信中で無いと判定した場合には、ライト・コマンドによりマスタ・ボリューム８０２のボリューム・イメージを壊さないようにキャッシュ・ボリューム８０１へのデータ更新処理を行う。つまり、図１３Ａの状態においてキャッシュデータ複製制御部８１２は、ライト・コマンド（更新命令）に含まれる更新データを受け付けて、キャッシュ・ボリューム８０１に更新データ（例えばＢＡ、ＢＢ、ＢＣ、ＢＤ）を記憶する（図１３Ｂ）。
【００８６】
具体的には、まず、キャッシュデータ複製制御部８１２は、キャッシュ対応管理テーブル１１０１を参照し、ライト・コマンド対象のロジカル・ボリュームをマスタ・ボリューム８０２（ＬＶ１）に持つキャッシュ・ボリューム８０１（ＬＶ０）を特定する。そして、キャッシュデータ複製制御部８１２は、特定したキャッシュ・ボリューム８０１にマスタデータを更新する更新データ（ＢＡ、ＢＢ、ＢＣ、ＢＤ）を記憶する。
【００８７】
次に、キャッシュデータ複製制御部８１２は、キャッシュ・ボリューム８０１が、スナップショット・ボリューム８０３の代わりに、マスタ・ボリューム８０２の更新データ（ＢＡ、ＢＢ、ＢＣ、ＢＤ）を保持していることを示すために、キャッシュ保持管理テーブル１１０２の「ＬＶ０」のページ０乃至３の値を「１」に設定し、ライト・コマンド処理を終了する。
【００８８】
一方、マスタ・ボリューム８０２に対してスナップショット開始コマンドが処理中で、新規のスナップショット・ボリューム８０３を追加しようとしている場合には、キャッシュ・ボリューム８０１を使わずに、データ複製制御部８１０は、現在のマスタ・ボリューム８０２のデータをスナップショット・ボリューム８０３に退避（コピー）する。ここでは、キャッシュ・ボリューム８０１のページ０とページ１のデータ（ＢＡ、ＢＢ）をマスタ・ボリューム８０２にコピーした段階で、ページ１にデータ（ＢＢＢ）を記憶する場合について説明する。
【００８９】
最初に、スナップショット・ボリューム８０３へのデータ格納処理について説明する。まず、アドレス変換部８１１は、割当管理テーブル１００２を参照し、共有プール・ボリュームの未使用領域の検索を行い、今回のマスタ・ボリューム８０２のデータをコピーして割り当てる領域を検索する。例えば、ＣＰＵ７０１は、未使用領域として「ページ０，１」を検索する。
【００９０】
ここで検索した未使用領域に対して、ＣＰＵ７０１は、マスタ・ボリューム８０２のデータを共有プール・ボリューム８０４にコピーする。例えば、ＣＰＵ７０１は、図９に示すように、検索した未使用領域「ページ０，１」に、マスタ・ボリューム８０２のページ０，１にある「ＡＡ、ＡＢ」をコピーする。そして、アドレス変換部８１１は、割当管理テーブル１００２において、検出した未使用領域を示す箇所（ＬＶ２、ページ０，１）に使用済みである事を示す値「１」を設定する。また、アドレス変換部８１１は、ディレクトリ１００１のスナップショット・ボリューム８０３（ＬＶ３）のデータ格納箇所（ＬＶ３、ページ０，１）に今回割り当てた共有プール・ボリューム８０４のページ・アドレス（ＬＶ２、ページ０，１）を設定する。そして、データ複製制御部８１０は、差分管理テーブル９０３のスナップショット・ボリューム８０３（ＬＶ３）のデータ格納箇所（ＬＶ３、ページ０，１）にデータを保持していることを示す値「１」を設定する。これにより、スナップショット・ボリューム８０３に、マスタデータの複製が記憶される（例えば図１３Ｃ）。
【００９１】
次に、キャッシュデータ複製制御部８１２は、キャッシュ保持管理テーブル１１０２のキャッシュ・ボリューム（ＬＶ１）のデータ格納箇所（ＬＶ１、ページ０，１）を、キャッシュ・ボリューム８０１がマスタ・ボリューム８０２のキャッシュとしてデータを保持していないことを示す値「０」を設定する。そして、最後に、ＣＰＵ７０１は、ライト・コマンドの対象のマスタ・ボリューム８０２にライトデータ（ＢＡ、ＢＢＢ）を書き込み（例えば図１３Ｄ）、ライト・コマンド処理を終了する。
【００９２】
このように、キャッシュ・ボリューム８０１のデータ（更新データ）は、マスタ・ボリューム８０２にコピーされること無くキャッシュ保持管理テーブル１１０２を更新しているが、キャッシュ・ボリューム８０１にあるデータよりもさらに新しい更新データでマスタ・ボリューム８０２のデータを更新することになるので、コピー処理は不要になる。
【００９３】
次に、スナップショット実行中のキャッシュデータ複製制御部８１２の処理について、説明する。まず、キャッシュデータ複製制御部８１２は、キャッシュ保持管理テーブル１１０２を参照し、キャッシュ・ボリューム８０１からマスタ・ボリューム８０２にコピーが必要なデータが残っているかチェックする。つまり、キャッシュデータ複製制御部８１２は、キャッシュ保持管理テーブル１１０２のキャッシュ・ボリューム８０１（ＬＶ０）の列に「１」が設定されているか否かを判定する。
【００９４】
キャッシュ・ボリューム８０１からマスタ・ボリューム８０２にコピーが必要なデータが無いと判定した場合、つまり、キャッシュ・ボリューム８０１の列に全て「０」が設定されている場合には、キャッシュデータ複製処理は終了する。
【００９５】
一方、キャッシュ・ボリューム８０１からマスタ・ボリューム８０２にコピーが必要なデータがあると判定した場合、マスタ・ボリューム８０２のデータをスナップショット・ボリューム８０３に退避し、その後、キャッシュ・ボリューム８０１のデータをマスタ・ボリューム８０２にコピーする処理を行う。
【００９６】
具体的には、まず、キャッシュデータ複製制御部８１２は、キャッシュ対応管理テーブル１１０１を参照し、差分が存在するキャッシュ・ボリューム８０１（ＬＶ０）に対応するマスタ・ボリューム８０２（ＬＶ１）を特定する。
【００９７】
次に、データ複製制御部８１０は、ボリューム対応管理テーブル９０２を参照し、マスタ・ボリューム８０２（ＬＶ１）に対応付けられているスナップショット・ボリューム８０３（ＬＶ３）を特定する。そして、データ複製制御部８１０は、マスタ・ボリューム８０２（ＬＶ１）のデータをスナップショット・ボリューム８０３（ＬＶ３）に退避させる。
【００９８】
つまり、スナップショット・ボリューム８０３へのデータを格納する場合、まず、アドレス変換部８１１は、割当管理テーブル１００２を参照し、共有プール・ボリューム８０４の未使用領域の検索を行い、今回のマスタ・ボリュームのデータをコピーして割り当てる領域を検索する（例えばページ２，３）。
【００９９】
続いて、ＣＰＵ７０１は、検索した未使用領域に対して、マスタ・ボリューム８０２のデータを共有プール・ボリューム８０４（ＬＶ２）にコピーする。そして、アドレス変換部８１１は、割当管理テーブル１００２において検出した未使用領域を示す箇所（ＬＶ２、ページ２，３）が使用済みである事を示す値「１」を設定する。また、アドレス変換部８１１は、ディレクトリ１００１のスナップショット・ボリューム８０３（ＬＶ３）のデータ格納箇所（ＬＶ３、ページ２，３）に今回割り当てた共有プール・ボリューム８０４のページ・アドレスを設定する。
【０１００】
そして、データ複製制御部８１０は、差分管理テーブル９０３のスナップショット・ボリューム８０３（ＬＶ３）のデータ格納箇所（ＬＶ３、ページ２，３）にデータを保持していることを示す値「１」を設定する。
【０１０１】
次に、ＣＰＵ７０１は、キャッシュ・ボリューム８０１（ＬＶ１）からマスタ・ボリューム８０２（ＬＶ２）へコピーを行う。例えば、ＣＰＵ７０１は、ＬＶ１のページ２，３に記憶された（ＢＣ、ＢＤ）を、ＬＶ２のページ２，３にコピーする。つまり、キャッシュ・ボリューム８０１（ＬＶ１）に記憶された更新データを、マスタデータとしてマスタ・ボリューム８０２（ＬＶ２）へ記憶する。そして、キャッシュデータ複製制御部８１２は、キャッシュ保持管理テーブル１１０２のＬＶ１のページ２，３に、キャッシュ・ボリューム８０１がマスタ・ボリューム８０２のキャッシュとしてデータを保持していないことを示す値「０」を設定し、処理を終了する。
【０１０２】
このように、更新データを受け付けた場合に、更新データをキャッシュ・ボリューム８０１に記憶し、マスタデータの複製を記憶する場合に、複製データをスナップショット・ボリューム８０３に記憶する。この結果、複製データを記憶する処理と、マスタデータを更新する処理（更新データを記憶する処理）と、を別々に（処理が重ならないタイミングにて）実行することができるので、マスタ・ボリューム１０１に対するアクセス性能の低下を抑制することができる。
【０１０３】
次に、スナップショット開始コマンドを受信した後に発生したリード・コマンド処理について説明する。リード・コマンドは、ボリュームからデータを読み出すためのコマンドである。まず、データ複製制御部８１０は、属性管理テーブル９０１を参照し、リード・コマンドがスナップショット・ボリューム８０３に対するコマンドであるか否かを判定する。
【０１０４】
ここでスナップショット・ボリューム８０３に対するリード・コマンドであると判定した場合、データ複製制御部８１０は、差分管理テーブル９０３を参照し、差分があるか否かを判定する。つまり、データ複製制御部８１０は、スナップショット・ボリューム８０３上の今読み出そうとしているページに、データが保持されているかを判定する。
【０１０５】
スナップショット・ボリューム８０３の該当ページにデータが保持されていると判定した場合には、アドレス変換部８１１は、ディレクトリ１００１からデータの実際の格納先である共有プール・ボリューム８０４と、ページ・アドレスを取得して読み出し先ボリュームを共有プール・ボリューム８０４（ＬＶ２）に設定する。そして、ＣＰＵ７０１は、共有プール・ボリューム８０４（ＬＶ２）の指定されたページからデータを読み出す。
【０１０６】
一方、スナップショット・ボリューム８０３に差分が無く、データを保持していないと判定した場合は、データ複製制御部８１０は、読み出し先をマスタ・ボリューム８０２（ＬＶ１）に設定する。そして、ＣＰＵ７０１は、マスタ・ボリューム８０２（ＬＶ１）の指定されたページのデータを読み出す。
【０１０７】
また、ここで、リード・コマンドがスナップショット・ボリューム８０３に対するコマンドでないと判定した場合には、マスタ・ボリューム８０２に対するコマンドであるか否かを判定する。
【０１０８】
マスタ・ボリューム８０２に対するコマンドだと判定した場合には、キャッシュデータ複製制御部８１２は、キャッシュ対応管理テーブル１１０１を参照し、ライト・コマンド対象のロジカル・ボリュームをマスタ・ボリューム８０２（ＬＶ１）持つキャッシュ・ボリューム８０１（ＬＶ０）を特定する。
【０１０９】
続いて、キャッシュデータ複製制御部８１２は、特定したキャッシュ・ボリューム８０１（ＬＶ０）のキャッシュ保持管理テーブル１１０２を参照し、キャッシュ・ボリューム８０１（ＬＶ１）がマスタ・ボリューム８０２（ＬＶ２）のデータを保持しているかを判定する。キャッシュ・ボリューム８０１（ＬＶ１）がマスタ・ボリューム８０２（ＬＶ２）のデータを保持していると判定した場合には、キャッシュデータ複製制御部８１２は、読み出し先をキャッシュ・ボリューム８０１（ＬＶ０）に設定する。そして、ＣＰＵ７０１は、キャッシュ・ボリューム８０１（ＬＶ０）の指定されたページのデータを読み出す。
【０１１０】
一方、キャッシュ・ボリューム８０１（ＬＶ０）がマスタ・ボリューム８０２（ＬＶ１）のデータを保持していないと判定した場合には、読み出し先をマスタ・ボリューム８０２（ＬＶ１）に設定する。そして、ＣＰＵ７０１は、マスタ・ボリューム８０２（ＬＶ１）の指定されたページのデータを読み出す。
【０１１１】
さらに、ここで、受信したリード・コマンドがマスタ・ボリューム８０２に対するリード・コマンドでないと判定した場合、つまり、マスタ・ボリューム８０２とスナップショット・ボリューム８０３とのいずれのリード・コマンドではないと判定した場合は、ＣＰＵ７０１は、読み出し先をリード・コマンドにより指定されたロジカル・ボリュームに設定する。そして、ＣＰＵ７０１は、設定したロジカル・ボリュームの指定されたページのデータを読み出す。
【０１１２】
このように、スナップショット・ボリューム８０３と、キャッシュ・ボリューム８０１と、に記憶された情報（複製データや更新データ）に応じて、最適なロジカル・ボリュームを選択し、選択したロジカル・ボリュームからデータを読み出すので、確実に所望するデータを出力することができる。
【０１１３】
（動作）
次に、図１４乃至図１８を参照して、ディスクアレイ・サブシステム７００の動作について説明する。まず、図１４を参照して、複製準備処理について説明する。ここでは、ＬＶ０をキャッシュ・ボリューム８０１とし、ＬＶ１をマスタ・ボリューム８０２とし、ＬＶ２を共有プール・ボリューム８０４とし、ＬＶ３をスナップショット・ボリューム８０３として使用する場合について説明する。
【０１１４】
まず、ＣＰＵ７０１は、ディスクアレイ・サブシステム７００内に、共有プール・ボリューム８０４を作成する（ステップＳ６１）。続いて、データ複製制御部８１０は、属性管理テーブル９０１を設定する（ステップＳ６２）。具体的には、データ複製制御部１０４は、属性管理テーブル２０１のＬＶ番号「ＬＶ２」に属性「共有プール」を設定する。
【０１１５】
そして、アドレス変換部１０５は、割当管理テーブル１００２を初期化する（ステップＳ６３）。具体的には、アドレス変換部１０５は、割当管理テーブル３０２において共有プール・ボリューム８０４（ＬＶ２）が未使用状態であることを示す値「０」を設定する。
【０１１６】
共有プール・ボリューム８０４作成後は、図１５に示すように、スナップショット開始コマンドを受信することで、スナップショットを開始することができる。図１５の複製データ記憶処理では、まず、ＣＰＵ７０１は、スナップショット開始コマンドを受信する（ステップＳ７１）と、マスタ・ボリューム８０２とスナップショット・ボリューム８０３とキャッシュ・ボリューム８０１と、を作成する（ステップＳ７２）。
【０１１７】
次に、データ複製制御部８１０は、属性管理テーブル９０１を参照し、属性が設定されているか否かを判定する（ステップＳ７３）。例えば、データ複製制御部８１０は、属性管理テーブル９０１のＬＶ番号「ＬＶ１」に属性「マスタ」が記憶されているか否かを判定する。
【０１１８】
属性が設定されていると判定した場合は（ステップＳ７３：Ｙｅｓ）、キャッシュデータ複製制御部８１２は、キャッシュ対応管理テーブル１１０１を参照し、指定したマスタ・ボリューム８０２に対応するキャッシュ・ボリューム８０１を特定する（ステップＳ７４）。そして、キャッシュデータ複製制御部８１２は、キャッシュ保持管理テーブル１１０２を参照し、キャッシュ・ボリューム８０１のデータをマスタ・ボリューム８０２へ記憶する（ステップＳ７５）。
【０１１９】
一方、ステップＳ７３の処理にて属性が設定されていない（つまり新規に作成するスナップショットの開始コマンドである）と判定した場合（ステップＳ７３：Ｎｏ）、データ複製制御部８１０は、属性管理テーブル９０１に属性を設定する（ステップＳ７６）。例えば、データ複製制御部８１０は、属性管理テーブル２０１においてＬＶ番号「ＬＶ０」に属性「キャッシュ」を設定し、ＬＶ番号「ＬＶ１」に属性「マスタ」を設定し、ＬＶ番号「ＬＶ３」に属性「スナップショット」を設定する。
【０１２０】
ステップＳ７５，Ｓ７６の処理の後、データ複製制御部８１０は、ボリューム対応管理テーブル９０２に対応付けを設定する（ステップＳ７７）。例えば、データ複製制御部８１０は、ＬＶ番号「ＬＶ１（マスタ・ボリューム８０２）」のスナップショットに「ＬＶ３（スナップショット・ボリューム８０３）」を設定し、ＬＶ番号「ＬＶ３」のスナップショットに「ＬＶ１」を設定する。
【０１２１】
続いて、キャッシュデータ複製制御部８１２は、キャッシュ対応管理テーブル１１０１に対応付けを設定する（ステップＳ７８）。例えば、キャッシュデータ複製制御部８１２は、ＬＶ番号「ＬＶ０（キャッシュ・ボリューム８０１）」のキャッシュに「ＬＶ１（マスタ・ボリューム８０２）」を設定し、ＬＶ番号「ＬＶ１」のキャッシュに「ＬＶ０」を設定する。
【０１２２】
続いて、データ複製制御部８１０は、差分管理テーブル９０３を初期化する（ステップＳ７９）。具体的には、データ複製制御部８１０は、差分管理テーブル９０３においてスナップショット・ボリューム８０３を示す「ＬＶ３」の列に、スナップショット・ボリューム８０３へのデータの割当てがないことを示す値「０」を初期値として設定する。
【０１２３】
そして、アドレス変換部８１１は、ディレクトリ１００１を初期化する（ステップＳ８０）。具体的には、アドレス変換部８１１は、ディレクトリ１００１においてスナップショット・ボリューム８０３を示す「ＬＶ３」の列に、共有プール・ボリューム８０４の記憶領域が割当てられていないことを示すｎｕｌｌ値を初期値として設定する。
【０１２４】
さらに、キャッシュデータ複製制御部８１２は、キャッシュ保持管理テーブル１１０２を初期化する（ステップＳ８１）。具体的には、キャッシュデータ複製制御部８１２は、キャッシュ保持管理テーブル１１０２においてキャッシュ・ボリューム８０１に、マスタ・ボリューム８０２に対するデータが保持されていないことを示す値「０」で初期化する。
【０１２５】
これ以降、スナップショット・ボリューム８０３（ＬＶ３）は、スナップショット開始コマンドを受信した時点におけるマスタ・ボリューム８０２（ＬＶ１）のボリューム・イメージを保持する。
【０１２６】
次に、図１６を参照して、スナップショット開始コマンドを受信した後に発生したライト・コマンド処理について説明する。ここでは、マスタ・ボリューム８０２（ＬＶ１）のページ０乃至３に対して（ＢＡ、ＢＢ、ＢＣ、ＢＤ）のライト・コマンド（更新命令）が発行された場合について説明する。
【０１２７】
まず、ＣＰＵ７０１は、上記ライト・コマンドを受信する（ステップＳ１０１）。続いて、ＣＰＵ７０１は、マスタ・ボリューム８０２へのライト処理か否かを判定する（ステップＳ１０２）。マスタ・ボリューム８０２へのライト処理でないと判定した場合（ステップＳ１０２：Ｎｏ）には、ライト・コマンド処理を終了する。
【０１２８】
一方、マスタ・ボリューム８０２へのライト処理であると判定した場合（ステップＳ１０２：Ｙｅｓ）、データ複製制御部８１０は、ボリューム対応管理テーブル９０２を参照し、マスタ・ボリューム８０２（ＬＶ１）に対応するスナップショット・ボリューム８０３（ＬＶ３）を特定する（ステップＳ１０３）。
【０１２９】
次に、データ複製制御部８１０は、差分管理テーブル９０３を参照し、スナップショット・ボリューム８０３に差分があるか否かを判定する（ステップＳ１０４）。既に差分があると判定した場合（ステップＳ１０４：Ｙｅｓ）、つまり差分管理テーブル９０３のＬＶ３の列の少なくとも１つに「１」が設定されている場合、マスタ・ボリューム８０２のデータを更新する（ステップＳ１０５）。つまり、マスタ・ボリューム８０２のデータをスナップショット・ボリューム８０３に退避する必要は無いので、ライト・コマンドの対象のマスタ・ボリューム８０２にライトデータ（ＢＡ、ＢＢ）を書き込み、ライト・コマンド処理を終了する。
【０１３０】
一方、スナップショット・ボリューム８０３に差分がないと判定した場合（ステップＳ１０４：Ｎｏ）、つまり差分管理テーブル９０３の初期値として全て「０」が設定されている場合、ＣＰＵ７０１は、マスタ・ボリューム８０２についてスナップショット開始コマンドの受信中かどうかを判定する（ステップＳ１０６）。
【０１３１】
スナップショット開始コマンドを受信中でないと判定した場合（ステップＳ１０６：Ｎｏ）、キャッシュデータ複製制御部８１２は、キャッシュ対応管理テーブル１１０１を参照し、マスタ・ボリューム８０２（ＬＶ１）に対応するキャッシュ・ボリューム８０１（ＬＶ０）を特定する（ステップＳ１０７）。そして、キャッシュデータ複製制御部８１２は、特定したキャッシュ・ボリューム８０１のデータを更新する（ステップＳ１０８）。
【０１３２】
次に、キャッシュデータ複製制御部８１２は、キャッシュ保持管理テーブル１１０２を更新する（ステップＳ１０９）。例えば、キャッシュデータ複製制御部８１２は、キャッシュ保持管理テーブル１１０２の値を「１」に設定する。ステップＳ１０９の処理の後、ライト・コマンド処理は終了する。
【０１３３】
一方、スナップショット開始コマンドを受信中であると判定した場合（ステップＳ１０６：Ｙｅｓ）、アドレス変換部８１１は、割当管理テーブル１００２を参照し、共有プール・ボリューム８０４の未使用領域の検索する（ステップＳ１１０）。例えば、ＣＰＵ７０１は、未使用領域として「ページ０，１」を検索する。
【０１３４】
続いて、ＣＰＵ７０１は、ステップＳ１１０の処理にて検索した未使用領域に、マスタ・ボリューム８０２の既存データをコピーする（ステップＳ１１１）。例えば、ＣＰＵ７０１は、図９に示すように、検索した未使用領域「ページ０，１」に、マスタ・ボリューム８０２のページ０，１にある「ＡＡ、ＡＢ」をコピーする。そして、アドレス変換部８１１は、割当管理テーブル１００２を更新する（ステップＳ１１２）。例えば、アドレス変換部８１１は、検出した未使用領域を示す箇所（ＬＶ２、ページ０，１）に使用済みである事を示す値「１」を設定する。
【０１３５】
続いて、アドレス変換部８１１は、ディレクトリ１００１を更新する（ステップＳ１１３）。例えば、アドレス変換部８１１は、ディレクトリ１００１のスナップショット・ボリューム８０３（ＬＶ３）のデータ格納箇所（ＬＶ３、ページ０，１）に今回割り当てた共有プール・ボリューム８０４のページ・アドレス（ＬＶ２、ページ０，１）を設定する。そして、データ複製制御部８１０は、差分管理テーブル９０３を更新する（ステップＳ１１４）。例えば、データ複製制御部８１０は、差分管理テーブル９０３のスナップショット・ボリューム８０３（ＬＶ３）のデータ格納箇所（ＬＶ３、ページ０，１）にデータを保持していることを示す値「１」を設定する。
【０１３６】
次に、キャッシュデータ複製制御部８１２は、キャッシュ保持管理テーブルを更新する（ステップＳ１１５）。例えば、キャッシュデータ複製制御部８１２は、キャッシュ保持管理テーブル１１０２のキャッシュ・ボリューム（ＬＶ１）のデータ格納箇所（ＬＶ１、ページ０，１）を、キャッシュ・ボリューム８０１がマスタ・ボリューム８０２のキャッシュとしてデータを保持していないことを示す値「０」を設定する。そして、最後に、ＣＰＵ７０１は、マスタ・ボリューム８０２のデータを更新する（ステップＳ１０５）。例えば、ＣＰＵ７０１は、ライト・コマンドの対象のマスタ・ボリューム８０２にライトデータ（ＢＡ、ＢＢＢ）を書き込む。ステップＳ１０５の処理の後、ライト・コマンド処理を終了する。
【０１３７】
このように、キャッシュ・ボリューム８０１のデータ（更新データ）は、マスタ・ボリューム８０２にコピーされること無くキャッシュ保持管理テーブル１１０２を更新しているが、キャッシュ・ボリューム８０１にあるデータよりもさらに新しい更新データでマスタ・ボリューム８０２のデータを更新することになるので、コピー処理は不要になる。この結果、キャッシュデータ複製制御部８１２、例えばデータ複製制御部８１０による処理が終了するまで、マスタデータの更新を待機する必要がなく、マスタ・ボリューム８０２に対するアクセス性能の低下を抑制することができる。
【０１３８】
次に、図１７を参照して、スナップショット実行中のキャッシュデータ複製制御部８１２のキャッシュデータ複製処理について説明する。このキャッシュデータ複製処理は、所定のタイミングにて（例えば、定期的に）開始される。まず、キャッシュデータ複製制御部８１２は、差分が設定されているか否かを判定する（ステップＳ１３１）。例えば、キャッシュデータ複製制御部８１２は、キャッシュ保持管理テーブル１１０２のキャッシュ・ボリューム８０１（ＬＶ０）の列に「１」が設定されているか否かを判定する。
【０１３９】
差分が設定されていないと判定した場合（ステップＳ１３１：Ｎｏ）、つまり、キャッシュ・ボリューム８０１からマスタ・ボリューム８０２にコピーが必要なデータが無いと判定した場合（キャッシュ・ボリューム８０１の列に全て「０」が設定されている場合）には、キャッシュデータ複製処理は終了する。
【０１４０】
一方、差分が設定されていると判定した場合（ステップＳ１３１：Ｙｅｓ）、キャッシュデータ複製制御部８１２は、キャッシュ対応管理テーブル１１０１を参照し、差分が存在するキャッシュ・ボリューム８０１（ＬＶ０）に対応するマスタ・ボリューム８０２（ＬＶ１）を特定する（ステップＳ１３２）。次に、データ複製制御部８１０は、ボリューム対応管理テーブル９０２を参照し、マスタ・ボリューム８０２（ＬＶ１）に対応するスナップショット・ボリューム８０３（ＬＶ３）を特定する（ステップＳ１３３）。
【０１４１】
続いて、アドレス変換部８１１は、割当管理テーブル１００２を参照し、共有プール・ボリューム８０４の未使用領域を検索する（ステップＳ１３４）。そして、ＣＰＵ７０１は、ステップＳ１３４の処理にて検索した未使用領域へマスタ・ボリューム８０２のデータをコピーする（ステップＳ１３５）。次に、アドレス変換部８１１は、割当管理テーブル１００２を更新する（ステップＳ１３６）。例えば、アドレス変換部８１１は、割当管理テーブル１００２において検出した未使用領域を示す箇所（ＬＶ２、ページ２，３）が使用済みである事を示す値「１」を設定する。続いて、アドレス変換部８１１は、ディレクトリ１００１を更新する（ステップＳ１３７）。例えば、アドレス変換部８１１は、ディレクトリ１００１のスナップショット・ボリューム８０３（ＬＶ３）のデータ格納箇所（ＬＶ３、ページ２，３）に今回割り当てた共有プール・ボリューム８０４のページ・アドレスを設定する。
【０１４２】
次に、データ複製制御部８１０は、差分管理テーブル９０３を更新する（ステップＳ１３８）。例えば、データ複製制御部８１０は、差分管理テーブル９０３のスナップショット・ボリューム８０３（ＬＶ３）のデータ格納箇所（ＬＶ３、ページ２，３）にデータを保持していることを示す値「１」を設定する。
【０１４３】
次に、ＣＰＵ７０１は、キャッシュ・ボリューム８０１（ＬＶ１）のデータ（更新データ）をマスタ・ボリューム８０２（ＬＶ２）へコピーする（ステップＳ１３９）。例えば、ＣＰＵ７０１は、ＬＶ１のページ２，３に記憶された（ＢＣ、ＢＤ）を、ＬＶ２のページ２，３にコピーする。続いて、キャッシュデータ複製制御部８１２は、キャッシュ保持管理テーブル１１０２を更新する（ステップＳ１４０）。例えば、キャッシュデータ複製制御部８１２は、キャッシュ保持管理テーブル１１０２のＬＶ１のページ２，３に、キャッシュ・ボリューム８０１がマスタ・ボリューム８０２のキャッシュとしてデータを保持していないことを示す値「０」を設定し、キャッシュデータ複製処理を終了する。
【０１４４】
このように、更新データを受け付けた場合に、更新データをキャッシュ・ボリューム８０１に記憶し、マスタデータの複製を記憶する場合に、複製データをスナップショット・ボリューム８０３に記憶する。この結果、複製データを記憶する処理と、マスタデータを更新する処理（更新データを記憶する処理）と、を別々に（処理が重ならないタイミングにて）実行することができるので、マスタ・ボリューム１０１に対するアクセス性能の低下を抑制することができる。
【０１４５】
次に、図１８を参照して、スナップショット開始コマンドを受信した後に発生したリード・コマンド処理について説明する。まず、ＣＰＵ７０１は、リード・コマンドを受信し（ステップＳ１６１）、属性管理テーブル９０１を参照し、リード・コマンドがスナップショット・ボリューム８０３へのリード処理（コマンド）であるか否かを判定する（ステップＳ１６２）。
【０１４６】
ここでスナップショット・ボリューム８０３に対するリード処理（リード・コマンド）であると判定した場合（ステップＳ１６２：Ｙｅｓ）、データ複製制御部８１０は、差分管理テーブル９０３を参照し、スナップショット・ボリューム８０３に差分があるか否かを判定する（ステップＳ１６３）。つまり、データ複製制御部８１０は、スナップショット・ボリューム８０３上の今読み出そうとしているページに、データが保持されているかを判定する。
【０１４７】
スナップショット・ボリューム８０３に差分があると判定した場合（ステップＳ１６３：Ｙｅｓ）、ＣＰＵ７０１は、読み出し先を共有プール・ボリューム８０４に設定する（ステップＳ１６４）。例えば、アドレス変換部８１１は、ディレクトリ１００１からデータの実際の格納先である共有プール・ボリューム８０４と、ページ・アドレスを取得して読み出し先ボリュームを共有プール・ボリューム８０４（ＬＶ２）に設定する。そして、ＣＰＵ７０１は、共有プール・ボリューム８０４（ＬＶ２）の指定されたページからデータを読み出す（ステップＳ１６５）。
【０１４８】
一方、スナップショット・ボリューム８０３に差分がないと判定した場合（ステップＳ１６３：Ｎｏ）、ＣＰＵ７０１は、読み出し先をマスタ・ボリューム８０２（ＬＶ１）に設定する（ステップＳ１６６）。そして、ＣＰＵ７０１は、マスタ・ボリューム８０２（ＬＶ１）の指定されたページのデータを読み出す（ステップＳ１６５）。
【０１４９】
また、ステップＳ１６２において、スナップショット・ボリューム８０３に対するリード処理でないと判定した場合（ステップＳ１６２：Ｎｏ）、マスタ・ボリューム８０２へのリード処理であるか否かを判定する（ステップＳ１６７）。
【０１５０】
マスタ・ボリューム８０２へのリード処理だと判定した場合（ステップＳ１６７：Ｙｅｓ）、キャッシュデータ複製制御部８１２は、キャッシュ対応管理テーブル１１０１を参照し、マスタ・ボリューム８０２（ＬＶ１）に対応するキャッシュ・ボリューム８０１（ＬＶ０）を特定する（ステップＳ１６８）。
【０１５１】
続いて、キャッシュデータ複製制御部８１２は、ステップＳ１６８の処理にて特定したキャッシュ・ボリューム８０１（ＬＶ０）のキャッシュ保持管理テーブル１１０２を参照し、キャッシュ・ボリューム８０１（ＬＶ１）にデータがあるか否かを判定する（ステップＳ１６９）。キャッシュ・ボリューム８０１（ＬＶ１）にデータがあると判定した場合（ステップＳ１６９：Ｙｅｓ）、ＣＰＵ７０１は、読み出し先をキャッシュ・ボリューム８０１（ＬＶ０）に設定する（ステップＳ１７０）。そして、ＣＰＵ７０１は、キャッシュ・ボリューム８０１（ＬＶ０）の指定されたページのデータを読み出す（ステップＳ１６５）。
【０１５２】
一方、キャッシュ・ボリューム８０１（ＬＶ０）にデータがないと判定した場合（ステップＳ１６９：Ｎｏ）、ＣＰＵ７０１は、読み出し先をマスタ・ボリューム８０２（ＬＶ１）に設定する（ステップＳ１６６）。そして、ＣＰＵ７０１は、マスタ・ボリューム８０２（ＬＶ１）の指定されたページのデータを読み出す（ステップＳ１６５）。
【０１５３】
さらに、ステップＳ１６７の処理にてマスタ・ボリューム８０２へのリード処理でないと判定した場合（ステップＳ１６７：Ｎｏ）、つまり、マスタ・ボリューム８０２とスナップショット・ボリューム８０３とのいずれのリード処理（コマンド）ではないと判定した場合には、ＣＰＵ７０１は、読み出し先をリード・コマンドの発行対象の（リード・コマンドにより指定された）ロジカル・ボリュームに設定する（ステップＳ１７１）。そして、ＣＰＵ７０１は、設定したロジカル・ボリュームの指定されたページのデータを読み出す（ステップＳ１６５）。
【０１５４】
このように、スナップショット・ボリューム８０３と、キャッシュ・ボリューム８０１と、に記憶された情報（複製データや更新データ）に応じて、最適なロジカル・ボリュームを選択し、選択したロジカル・ボリュームからデータを読み出すので、確実に所望するデータを出力することができる。
【０１５５】
＜第２実施形態＞
次に、図１９乃至図２８を参照して第２実施形態について説明する。上述した第１実施形態では、スナップショット開始コマンドの受信時においてキャッシュ・ボリュームの使用を一時的に制限させ、マスタ・ボリュームからキャッシュ・ボリュームへのコピー待ち合わせが必要な形態になっていた。第２実施形態では、ディスクアレイ・サブシステムに新たに遅延コピー管理テーブルを持たせることで待ち合わせ処理を不要にすることができる。
【０１５６】
（構成）
図１９はディスクアレイ・サブシステム１７００のハードウェア構成について示したブロック図である。上位装置としての管理端末１７０７やホストコンピュータ１７０６等に対して、複数の磁気ディスク装置１７０５ａ〜１７０５ｆを割り当ててデータのバックアップ等を始めとする処理を行うためのもので、上位装置との間の接続に用いられるインタフェース制御部１７０２と各磁気ディスク装置１７０５ａ〜１７０５ｆとを接続するためのＲＡＩＤ制御部１７０４を備える。
【０１５７】
インタフェース制御部１７０２とＲＡＩＤ制御部１７０４は、制御用メモリ１７０３に格納された制御プログラムに基づいて作動するＣＰＵ１７０１によってデータの入出力を制御されるようになっている。制御用メモリ１７０３に書き込む制御用プログラムを書き換えることでＣＰＵ１７０１を様々な機能実現手段として利用することが可能である。このＣＰＵ１７０１は、データの複製や、複製したデータへのアクセスを制御するデータ複製制御部と、アドレス変換部と、キャッシュデータ複製制御部と、遅延コピーデータ複製制御部と、を有する。また、制御用メモリ１７０３は、属性管理テーブルと、ボリューム対応管理テーブルと、差分管理テーブルと、ディレクトリと、割当管理テーブルと、キャッシュ対応管理テーブルと、キャッシュ保持管理テーブルと、遅延コピー管理テーブルと、を有する。
【０１５８】
図２０はディスクアレイ・サブシステム１７００の機能的な側面を簡略化して示した機能ブロック図である。本発明の第２実施形態におけるディスクアレイ・サブシステム１７００は、マスタデータを記憶したマスタ・ボリューム１８０２と、マスタ・ボリュームの複製ボリュームとなるスナップショット・ボリューム１８０３，１８０５（第２の複製データ記憶領域）と、マスタ・ボリューム１８０２の一時データ格納先となるキャッシュ・ボリューム１８０１と、スナップショット・ボリューム１８０３，１８０５のデータ格納先となる共有プール・ボリューム１８０４と、スナップショット・ボリューム１８０３，１８０５へのデータアクセスを管理するデータ複製制御部１８１０と、複製データの実際の格納先を管理するアドレス変換部１８１１と、キャッシュ・ボリューム１８０１からマスタ・ボリューム１８０２へのコピーを行うキャッシュデータ複製制御部１８１２と、一連の処理でキャッシュ・ボリューム１８０１からマスタ・ボリューム１８０２へコピーできなかったデータを処理する遅延コピーデータ複製制御部１８１３と、を有する。なお、マスタ・ボリューム１８０２及びスナップショット・ボリューム１８０３，１８０５の個数に関して特に制限は無い。また、キャッシュ・ボリューム１８０１はマスタ・ボリューム１８０２に対し一つ作成される。
【０１５９】
図２０の状態は、マスタ・ボリューム１８０２（ＬＶ１）がページ０から順に（ＡＡ、ＡＢ、ＡＣ、ＡＤ、・・・、ＡＮ）というデータを保持している時に、データ複製制御部１８１０によりスナップショット・ボリューム１８０３（ＬＶ３）を作成し、その後マスタ・ボリューム１８０２（ＬＶ１）に対してページ０からページ３に対してデータＢＡ乃至ＢＤのデータ更新を行ったことでキャッシュ・ボリューム１８０１（ＬＶ０）のデータが更新された状態である。そして、さらに、キャッシュデータ複製制御部１８１２によりページ０とページ１のデータがキャッシュ・ボリューム１８０１（ＬＶ０）からマスタ・ボリューム１８０２（ＬＶ２）にコピーされた段階で、ページ１に再度ＢＢＢのデータ更新命令が行われ、データ複製制御部１８１０によりスナップショット・ボリューム１８０５（ＬＶ４）を作成した後の状態を示している。なお、データ複製制御部１８１０とアドレス変換部１８１１については第１実施形態におけるデータ複製制御部８１０（図１０）とアドレス変換部１８１１（図１１）と同じなので、ここでは詳細な説明は省略する。
【０１６０】
キャッシュデータ複製制御部１８１２は、図２１に示すように、マスタ・ボリューム１８０２とキャッシュ・ボリューム１８０１のペア関係を管理するキャッシュ対応管理テーブル１９０１と、キャッシュ・ボリューム１８０１がマスタ・ボリューム１８０２のデータを保持していることを管理するキャッシュ保持管理テーブル１９０２と、新規スナップショット（例えばスナップショット・ボリューム１８０５）の作成時にキャッシュ・ボリューム１８０１からマスタ・ボリューム１８０２へのコピーが完了していないことを示す遅延コピー管理テーブル１９０３と、を有する。
【０１６１】
（動作）
次に、ディスクアレイ・サブシステム１７００の動作について、図２２乃至図２８のフローチャートを参照しながら説明する。なお、複製準備開始については、第１実施形態における図１４に示す処理と同じなので、ここでは詳細な説明は省略する。
【０１６２】
まず、スナップショット開始コマンド受信後の処理について図２２を参照して説明する。ＣＰＵ１７０１は、スナップショット開始コマンドを受信する（ステップＳ２０１）と、マスタ・ボリューム１８０２とスナップショット・ボリューム１８０３とキャッシュ・ボリューム１８０１（として使用するロジカル・ボリューム）を作成する（ステップＳ２０２）。次に、データ複製制御部１８１０は、属性が設定されているか否かを判定する（ステップＳ２０３）。例えば、データ複製制御部１８１０は、属性管理テーブル９０１を参照し、マスタ・ボリューム１８０２に指定されたボリュームがすでにマスタ・ボリュームとして使用されているかを確認する。
【０１６３】
属性が設定されていないと判定した場合（ステップＳ２０３：Ｎｏ）、つまり、まだマスタ属性等が設定されておらず、新規に作成するスナップショットの開始コマンドであると判定した場合には、テーブル設定処理を行う（ステップＳ２０４）。テーブル設定処理は、例えば、図１５のステップＳ７６乃至Ｓ８１にて説明した処理と同様であるので、簡単に説明する。つまり、まず、データ複製制御部１８１０は、作成するロジカル・ボリュームの属性管理テーブル９０１にマスタ属性、スナップショット属性、キャッシュ属性を設定する。またデータ複製制御部１８１０は、ボリューム対応管理テーブル９０２においてペアとなるマスタ・ボリューム１８０２およびスナップショット・ボリューム１８０３のロジカル・ボリューム番号を登録する。さらに、データ複製制御部１８１０は、差分管理テーブル９０３においてスナップショット・ボリューム１８０３として作成したＬＶ３の管理情報をスナップショット・ボリューム１８０３への割当がないことを示す「０」で初期化する。
【０１６４】
さらにまた、アドレス変換部１８１１は、ディレクトリ１００１においてスナップショット・ボリューム１８０３として作成したＬＶ３の管理情報をｎｕｌｌで初期化する。続いて、キャッシュデータ複製制御部１８１２は、キャッシュ対応管理テーブル１９０１においてマスタ・ボリューム１８０２とキャッシュ・ボリューム１８０１の組み合わせとなるロジカル・ボリューム番号を登録する。そして、キャッシュデータ複製制御部１８１２は、キャッシュ保持管理テーブル１９０２においてキャッシュ・ボリューム１８０１に、マスタ・ボリューム１８０２に対するデータ保持がないことを示す「０」で初期化する。
【０１６５】
一方、ステップＳ２０３において属性が設定されていると判定した場合（ステップＳ２０３：Ｙｅｓ）、キャッシュデータ複製制御部１８１２は、キャッシュ対応管理テーブル１１０１を参照し、指定したマスタ・ボリューム１８０２に対応するキャッシュ・ボリューム１８０１を特定する（ステップＳ２０５）。
【０１６６】
次に、遅延コピーデータ複製制御部１８１３は、遅延コピー管理テーブル１９０３の設定を行う（ステップＳ２０６）。具体的には、キャッシュ・ボリューム１８０１のキャッシュ保持管理テーブル１１０２の値を、遅延コピー管理テーブル１９０３の、現在の最新世代のスナップショット・ボリューム１８０３のロジカル・ボリューム番号に対応する領域にコピーする。これにより、新規スナップショット開始コマンド受信時において、その時点でキャッシュ・ボリューム１８０１からマスタ・ボリューム１８０２へのコピーが完了していない領域についての情報が保持される。ステップＳ２０６の処理の後、テーブル設定処理を行い（ステップＳ２０４）（具体的には、図１５のステップＳ７７乃至Ｓ８１の処理）、スナップショット開始コマンドを受信したときの処理は終了となる。
【０１６７】
次に、スナップショット開始コマンドを受信した後に発生したライト・コマンド処理について、図２３に示すフローチャートを参照しながら説明する。ここでは、マスタ・ボリューム１８０２がＬＶ１、キャッシュ・ボリューム１８０１がＬＶ０、最初に開始した（最古世代の）スナップショット・ボリューム１８０３がＬＶ３で、その後に開始したスナップショット・ボリューム１８０５がＬＶ４である状態を想定している。この時、スナップショット・ボリューム１８０５（ＬＶ４）が最新世代、且つ、第２世代のスナップショット・ボリュームとして説明する。なお、新たにスナップショット・ボリュームが作成されると、当該スナップショット・ボリュームが最新世代のスナップショット・ボリュームになる。以下、図２３のライト・コマンド処理において、図１６のライト・コマンド処理と同様の処理については簡単に説明する。
【０１６８】
まず、ＣＰＵ１７０１は、ライト・コマンドを受信すると（ステップＳ２２１）、属性管理テーブル９０１を参照し、ライト・コマンドの対象ボリュームがマスタ属性を持っているか、すなわち、マスタ・ボリューム１８０２へのライト処理であるか否かを判定する（ステップＳ２２２）。ここでマスタ・ボリューム１８０２以外へのライト・コマンド処理だと判定した場合（ステップＳ２２２：Ｎｏ）はライト・コマンドを終了する。
【０１６９】
一方、マスタ・ボリューム１８０２へのライト処理であると判定した場合（ステップＳ２２２：Ｙｅｓ）は、遅延コピーデータ複製制御部１８１３は、遅延コピー管理テーブル１９０３を参照して、キャッシュ・ボリューム１８０１と、マスタ・ボリューム１８０２と、に遅延コピーデータが存在するか否かを判定する（ステップＳ２２３）。ここで遅延コピーデータが存在しないと判定した場合（ステップＳ２２３：Ｎｏ）、つまり、値「０」が設定されている場合、ボリューム対応管理テーブル９０２を参照して、マスタ・ボリューム１８０２に対応する（ライト・コマンド対象のロジカル・ボリュームをマスタ・ボリューム１８０２に持つ）スナップショット・ボリューム（例えばスナップショット・ボリューム１８０３またはスナップショット・ボリューム１８０５）を特定する（ステップＳ２２４）。
【０１７０】
続いて、データ複製制御部１８１０は、差分管理テーブル９０３を参照し、ライト対象の範囲において、特定したスナップショット・ボリュームに既に差分があるかを判定する（ステップＳ２２５）。差分があると判定した場合（ステップＳ２２５：Ｙｅｓ）は、マスタ・ボリュームのデータをスナップショット・ボリュームに退避する必要は無いので、ＣＰＵ１７０１は、マスタ・ボリュームのデータを更新する（ステップＳ２２６）。つまり、ＣＰＵ１７０１は、ライト・コマンドの対象のマスタ・ボリュームにライトデータを書き込む。
【０１７１】
一方、スナップショット・ボリュームに差分がないと判定した場合（ステップＳ２２５：Ｎｏ）、スナップショット開始コマンドを受信した瞬間のマスタ・ボリューム１８０２のマスタデータ（ボリューム・イメージ）を、スナップショット・ボリュームに保持する必要がある。このため、ＣＰＵ７０１は、マスタ・ボリューム１８０についてスナップショット開始コマンドの受信中かどうかを判定する（ステップＳ２２７）。スナップショット開始コマンド受信中で無いと判定した場合（ステップＳ２２７：Ｎｏ）は、ライト・コマンドによりマスタ・ボリューム１８０２のボリューム・イメージを壊さないように、キャッシュ・ボリューム１８０１に更新データを記憶する。
【０１７２】
つまり、キャッシュデータ複製制御部１８１２は、キャッシュ対応管理テーブル１９０１を参照し、マスタ・ボリューム１８０２に対応する（ライト・コマンド対象のロジカル・ボリュームをマスタ・ボリューム１８０２に持つ）キャッシュ・ボリューム１８０１を特定する（ステップＳ２２８）。ここで特定したキャッシュ・ボリューム１８０１に対して、キャッシュ・ボリューム１８０１のデータを更新する（ステップＳ２２９）。次に、キャッシュデータ複製制御部１８１２は、キャッシュ保持管理テーブル１９０２を更新する。例えば、キャッシュデータ複製制御部１８１２は、キャッシュ・ボリューム１８０１がマスタ・ボリューム１８０２の最新データを保持していることを示すためにキャッシュ保持管理テーブル１９０２の値を「１」に設定し、ライト・コマンドを終了する。
【０１７３】
一方、マスタ・ボリューム１８０２に対してスナップショット開始コマンドを受信中（処理中）であると判定した場合（ステップＳ２２７：Ｙｅｓ）、つまり新規のスナップショット・ボリュームを追加しようとしている場合には、キャッシュ・ボリューム１８０１を使わずに、現在のマスタ・ボリューム１８０２のデータをスナップショット・ボリュームに退避（記憶）させる。
【０１７４】
スナップショット・ボリュームへのデータ格納手順は、第１実施形態にて説明したスナップショット動作と同様であるので簡単に説明する。まず、割当管理テーブル１００２を参照し、共有プール・ボリューム１８０４の未使用領域の検索を行い、今回のマスタ・ボリューム１８０２のデータをコピーして割り当てる領域を検索する（図２４のステップＳ２４１）。
【０１７５】
続いて、ここで見つかった未使用領域に対して、マスタ・ボリューム１８０２のデータを共有プール・ボリューム１８０４にコピーし（ステップＳ２４２）、割当管理テーブル１００２の当該箇所が使用済みである事を示す値「１」を設定し、ディレクトリ１００１の当該箇所に今回割り当てた共有プール・ボリューム１８０４のページ・アドレスを設定する（ステップＳ２４３）。そして、差分管理テーブル９０３の当該箇所にデータを保持していることを示す値「１」を設定する（ステップＳ２４４）。
【０１７６】
次に、キャッシュ保持管理テーブル１９０２の当該箇所を、キャッシュ・ボリューム１８０１がマスタ・ボリューム１８０２のキャッシュとしてデータを保持していないことを示す値「０」を設定し（ステップＳ２４５）、最後に、ステップＳ２２６へ進み、ライト・コマンドの対象のマスタ・ボリュームにライトデータを書き込み、ライト・コマンドを終了する。
【０１７７】
また、ステップ２２３において、遅延コピーデータがあると判定した場合（ステップＳ２２３：Ｙｅｓ）は、ボリューム・イメージを保つために、マスタ・ボリューム１８０２のデータを第２世代のスナップショット・ボリューム１８０５に、キャッシュ・ボリューム１８０１のデータを最新世代のスナップショット・ボリュームに退避する必要がある。まず、マスタ・ボリュームのデータの退避処理を行う。
【０１７８】
まず、割当管理テーブル１００２を参照し、共有プール・ボリュームの未使用領域の検索を行い、今回のマスタ・ボリュームのデータをコピーして割り当てる領域を検索する（ステップＳ２６１）。ここで見つかった未使用領域に対して、マスタ・ボリュームのデータを共有プール・ボリューム１８０４にコピーし（ステップＳ２６２）、割当管理テーブル１００２の当該箇所が使用済みである事を示す値「１」を設定し、ディレクトリ１００１の当該箇所に今回割り当てた共有プール・ボリューム１８０４のページ・アドレスを設定する（ステップＳ２６３）。そして、第２世代のスナップショット・ボリューム１８０５の差分管理テーブル９０３の当該箇所にデータを保持していることを示す値「１」を設定する（ステップＳ２６４）。
【０１７９】
次に、キャッシュ・ボリューム１８０１のデータを最新世代のスナップショット・ボリュームに退避する。つまり、まず、割当管理テーブル１００２を参照し、共有プール・ボリューム１８０４の未使用領域の検索を行い、今回のマスタ・ボリューム１８０２のデータをコピーして割り当てる領域を検索する（ステップＳ２６５）。ここで見つかった未使用領域に対して、マスタ・ボリューム１８０２のデータを共有プール・ボリューム１８０４にコピーし（ステップＳ２６６）、割当管理テーブル１００２の当該箇所が使用済みである事を示す値「１」を設定し、ディレクトリ１００１の当該箇所に今回割り当てた共有プール・ボリューム１８０４のページ・アドレスを設定する（ステップＳ２６７）。
【０１８０】
そして、最新世代のスナップショット・ボリュームの差分管理テーブル９０３の当該箇所にデータを保持していることを示す値「１」を設定する（ステップＳ２６８）。次に、遅延コピー管理テーブル１９０３の当該箇所を、遅延なしを表す値「０」を設定し（ステップＳ２６９）、最後にステップＳ２２６に進み、ライト・コマンドの対象のマスタ・ボリュームにライトデータを書き込み、ライト・コマンドを終了する。
【０１８１】
次に、スナップショット実行中のキャッシュデータ複製制御部の動作について説明する。キャッシュデータ複製制御部１８１２の動作については第１実施形態におけるキャッシュデータ複製制御部８１２の動作と同じなので、ここでは詳細な説明は省略する。
【０１８２】
次に、スナップショット実行中の遅延コピーデータ複製制御部の動作を、図２６を用いて説明する。まず、遅延コピーデータ複製制御部１８１３は、遅延コピー管理テーブル１９０３を参照し、差分があるかを判定する（ステップＳ２８１）。つまり、遅延コピーデータ複製制御部１８１３は、マスタ・ボリューム１８０２から第二世代のスナップショット・ボリューム１８０５への遅延コピーが必要なデータ、及び、キャッシュ・ボリューム１８０１からマスタ・ボリューム１８０２への遅延コピーが必要なデータが残っているかを判定する。ここで、差分がない（つまりコピーが必要なデータが無い）と判定した場合（ステップＳ２８１：Ｎｏ）は、図２６の遅延コピーデータ複製処理は終了する。
【０１８３】
一方、差分がある（遅延コピーデータが残っている）と判定した場合（ステップＳ２８１：Ｙｅｓ）、マスタ・ボリューム１８０２のデータを第２世代のスナップショット・ボリューム１８０５に退避し、さらにキャッシュ・ボリューム１８０１のデータをマスタ・ボリューム１８０２にコピーする処理を行う。まず、キャッシュデータ複製制御部１８１２は、キャッシュ対応管理テーブル１９０１を参照し、差分が存在したキャッシュ・ボリューム１８０１に対応するマスタ・ボリューム１８０２を特定する（ステップＳ２８２）。
【０１８４】
次に、データ複製制御部１８１０は、ボリューム対応管理テーブル９０２を参照し、マスタ・ボリューム１８０２と対応付けられている第２世代のスナップショット・ボリューム１８０５を特定し（ステップＳ２８３）、マスタ・ボリューム１８０２のデータをスナップショット・ボリューム１８０５へ退避させる。このスナップショット・ボリュームへのデータ格納手順は、上述したスナップショット動作と同様であるので簡単に説明する。まず、割当管理テーブル１００２を参照し、共有プール・ボリューム１８０４の未使用領域の検索を行い、今回のマスタ・ボリューム１８０２のデータをコピーして割り当てる領域を検索する（ステップＳ２８４）。
【０１８５】
ここで見つかった未使用領域に対して、ステップＳ２８５において、マスタ・ボリューム１８０２のデータを共有プール・ボリューム１８０４にコピーし、ステップＳ２８６において、割当管理テーブル１００２の当該箇所が使用済みである事を示す値「１」を設定し、ディレクトリ１００１の当該箇所に今回割り当てた共有プール・ボリューム１８０４のページ・アドレスを設定する。そして、ステップＳ２８７において、差分管理テーブル９０３の当該箇所にデータを保持していることを示す値「１」を設定する。次に、ステップＳ２８８において、キャッシュ・ボリューム１８０１からマスタ・ボリューム１８０２へのコピーを行い、ステップ２８９において、遅延コピー管理テーブル１９０３の当該箇所に、遅延コピーが必要なデータがないことを示す値「０」を設定し、図２６の遅延コピーデータ複製処理を終了する。
【０１８６】
次に、スナップショット開始コマンドを受信した後に発生したリード・コマンド処理について、図２７と図２８に示すフローチャートを参照しながら説明する。なお、図１８のリード・コマンド処理と同様の処理については簡単に説明する。まず、ＣＰＵ１７０１は、リード・コマンドを受信すると（ステップＳ３０１）、属性管理テーブル９０１を参照し、ステップＳ３０２においてリード処理（リード・コマンド）がスナップショット・ボリューム１８０３へのコマンドであるか判定する。
【０１８７】
ここで、スナップショット・ボリューム１８０３へのリード処理であると判定した場合（ステップＳ３０２：Ｙｅｓ）、差分管理テーブル９０３を参照し、スナップショット・ボリューム１８０３に差分があるか（つまりスナップショット・ボリューム１８０３上の今読み出そうとしているページに、データを保持しているか）否かを判定する（ステップＳ３０３）。スナップショット・ボリューム１８０３がデータを保持していると判定した場合（ステップＳ３０３：Ｙｅｓ）、ディレクトリ１００１からデータの実際の格納先である共有プール・ボリューム１８０４と、ページ・アドレスを取得して読み出し先を共有プール・ボリューム１８０４に設定し（ステップＳ３０４）、ステップ３０５において該ページのデータを読み出し、処理を終了する。
【０１８８】
一方、ステップＳ３０２において、スナップショット・ボリュームへのリード処理でないと判定した場合（ステップＳ３０２：Ｎｏ）、ステップＳ３０６において、マスタ・ボリューム１８０２へのリード処理であるかを判定する。マスタ・ボリューム１８０２へのリード処理だと判定した場合（ステップＳ３０６：Ｙｅｓ）、ステップＳ３０７において、キャッシュ対応管理テーブル１９０１を参照し、ライト・コマンド対象のロジカル・ボリュームをマスタ・ボリューム１８０２に持つキャッシュ・ボリューム１８０１を特定する。
【０１８９】
そして、ステップＳ３０７の処理で特定したキャッシュ・ボリューム１８０１のキャッシュ保持管理テーブル１９０２を参照し、キャッシュ・ボリューム１８０１がマスタ・ボリューム１８０２のデータを保持しているかを判定する（ステップＳ３０８）。キャッシュ・ボリュームがマスタ・ボリュームのデータを保持していると判定した場合（ステップＳ３０８：Ｙｅｓ）、読み出し先をキャッシュ・ボリュームに設定し（ステップＳ３０９）、ステップＳ３０５で該ページのデータを読み出し、処理を終了する。
【０１９０】
また、ステップＳ３０８において、キャッシュ・ボリューム１８０１がマスタ・ボリューム１８０２のデータを保持していないと判定した場合（ステップＳ３０８：Ｎｏ）、ステップＳ３１０に進み、読み出し先をマスタ・ボリューム１８０２に設定し、ステップＳ３０５において、該ページのデータを読み出し、処理を終了する。
【０１９１】
また、ステップＳ３０６において、マスタ・ボリューム１８０２へのリード処理ではないと判定した場合（ステップＳ３０６：Ｎｏ）は、読出し先をリード・コマンドが発行されたロジカル・ボリュームに設定し（ステップＳ３１１）、ステップＳ３０５において該ページのデータを読み出し、処理を終了する。
【０１９２】
さらに、ステップＳ３０３でスナップショット・ボリュームに差分が無く、データを保持していないと判定した場合（ステップＳ３０３：Ｎｏ）は、遅延コピーのデータが残っているかを考慮して読み出し先のボリュームを決定する必要がある。そのために図２８のステップＳ３２１に進み、まず読み出し先をスナップショット・ボリュームが最古（一番古い）世代のスナップショット・ボリューム１８０３かそれともそれ以外の世代のスナップショット・ボリュームなのかを判定する（ステップＳ３２１）。
【０１９３】
ステップＳ３２１で最古世代のスナップショット・ボリューム１８０３であると判定した場合（ステップＳ３２１：Ｙｅｓ）は、遅延コピー管理テーブル１９０３を参照し、差分があるか（つまり遅延コピーが必要なデータがあるか）否かを判定する（ステップＳ３２２）。差分があると判定した場合（ステップＳ３２２：Ｙｅｓ）、期待するデータはマスタ・ボリューム１８０２にあるので、図２７のステップＳ３１０に進み、読み出し先をマスタ・ボリューム１８０２に設定し、ステップＳ３０５で該ページのデータを読み出し、処理を終了する。
【０１９４】
一方、図２８のステップＳ３３２において差分がない（遅延コピーが必要なデータが無い）と判定した場合（ステップＳ３３２：Ｎｏ）は、キャッシュ保持管理テーブル１９０２の状況により、読み出し先のボリュームが変わるので、処理はステップＳ３０７に進み、それ以降の処理を繰り返し、期待したデータがマスタ・ボリューム１８０２にあるか、キャッシュ・ボリューム１８０１にあるかを判定してデータを読み出す。
【０１９５】
また、ステップＳ３２１において、最古世代のスナップショット・ボリューム１８０３でないと判定した場合（ステップＳ３２１：Ｎｏ）、遅延コピー管理テーブル１９０３を参照し、差分があるか（遅延コピーが必要なデータがあるか）否かを判定する（ステップＳ３２３）。差分があると判定した場合（ステップＳ３２３：Ｙｅｓ）は、期待するデータはキャッシュ・ボリューム１８０１に格納されているので、処理はステップＳ３０９に進み、読み出し先をキャッシュ・ボリューム１８０１に設定し、ステップＳ３０５で該ページのデータを読み出し、処理を終了する。
【０１９６】
一方、ステップＳ３２３において、差分がない（遅延コピーが必要なデータがない）と判定した場合（ステップＳ３２３：Ｎｏ）は、処理はステップＳ３１０に進み、読み出し先をマスタ・ボリューム１８０２に設定し、ステップＳ３０５で該ページのデータを読み出し、処理を終了する。
【０１９７】
なお、ここに挙げた実施例では、スナップショットのデータイメージの保持を、共有プールを使用した例で説明しているが、データイメージの保持の方法はこの方式に限らない。また、これまでは作成されるスナップショットの世代が２世代の例で説明をしているが、世代数は２世代に限らず、さらに多くの世代を作成していてもよい。
【０１９８】
各種管理テーブル情報は制御用メモリ上にある前提で説明しているが、これらの管理情報は、マスタ・ボリュームやスナップショット・ボリューム、あるいは共有プール・ボリューム上の空き領域など、磁気ディスク装置に格納されていてもよい。また、ディスク装置は、磁気ディスク装置に限定しない。例えば、磁気ディスク装置の変わりにフラッシュメモリを使用したストレージ装置や、メモリ上に作成した仮想ディスク装置を使用してもよい。
【０１９９】
＜第３実施形態＞
次に、本発明の第３実施形態に係る記憶制御装置について図２９を参照して説明する。
第３実施形態に係る記憶制御装置２０００は、
マスタデータ２０２１を記憶するマスタデータ記憶領域２０１１と、
マスタデータ２０２１を更新する更新データ２０３１を一時的に格納する一時データ記憶領域２０１２と、
マスタデータ２０２１を複製した複製データ２０４１を記憶する複製データ記憶領域２０１３と、
複製データ２０４１を複製データ記憶領域２０１３に記憶するマスタデータ複製制御部２０１５（マスタデータ複製制御手段）と、
を備え、
マスタデータ２０２１の更新命令により、一時データ記憶領域２０１２に更新データ２０３１を格納するとともに、その後、一時データ記憶領域２０１２に格納された更新データ２０３１をマスタデータ２０２１としてマスタデータ記憶領域２０１１に記憶する一時データ記憶制御部２０１４（一時データ記憶制御手段）、
を備える。
【０２００】
上記構成によれば、一時データ記憶制御部２０１４は、更新データを受け付けて、一時データ記憶領域２０１２に記憶する。そして、その後、所定のタイミングで一時データ記憶領域２０１２に格納された更新データ２０３１をマスタデータ記憶領域２０１１に記憶し、マスタデータ２０２１を更新する。このため、マスタデータ複製制御部２０１５による複製データ２０４１の記憶処理と、一時データ記憶制御部２０１４によるマスタデータ２０２１の更新処理と、を別々のタイミングで実行することができる。この結果、一時データ記憶制御部２０１４は、例えばマスタデータ複製制御部２０１５による処理が終了するまで、マスタデータ２０２１の更新を待機する必要がなく、マスタデータ記憶領域２０１１に対するアクセス性能の低下を抑制することができる。
【０２０１】
＜付記＞
上記実施形態の一部又は全部は、以下の付記のようにも記載されうる。以下、本発明における記憶制御装置等の構成の概略を説明する。但し、本発明は、以下の構成に限定されない。
【０２０２】
（付記１）
マスタデータを記憶するマスタデータ記憶領域と、
前記マスタデータを更新する更新データを一時的に格納する一時データ記憶領域と、
前記マスタデータを複製した複製データを記憶する複製データ記憶領域と、
前記複製データを前記複製データ記憶領域に記憶するマスタデータ複製制御手段と、
を備え、
前記マスタデータの更新命令により、前記一時データ記憶領域に前記更新データを格納するとともに、その後、前記一時データ記憶領域に格納された前記更新データをマスタデータとして前記マスタデータ記憶領域に記憶する一時データ記憶制御手段、
を備える記憶制御装置。
【０２０３】
上記構成によれば、一時データ記憶制御手段は、更新データを受け付けて、一時データ記憶領域に記憶する。そして、その後、所定のタイミングで一時データ記憶領域に格納された更新データをマスタデータ記憶領域に記憶し、マスタデータを更新する。このため、マスタデータ複製制御手段による複製データの記憶処理と、一時データ記憶制御手段によるマスタデータの更新処理と、を別々のタイミングで実行することができる。この結果、一時データ記憶制御手段は、例えばマスタデータ複製制御手段による処理が終了するまで、マスタデータの更新を待機する必要がなく、マスタデータ記憶領域に対するアクセス性能の低下を抑制することができる。
【０２０４】
（付記２）
付記１に記載の記憶制御装置であって、
前記マスタデータ複製制御手段は、前記一時データ記憶制御手段が前記一時データ記憶領域に格納された前記更新データを前記マスタデータ記憶領域に記憶する前に、既に前記マスタデータ記憶領域に記憶されている前記マスタデータを複製して、前記複製データ記憶領域に記憶し、
その後、前記一時データ記憶制御手段は、前記一時データ記憶領域に格納された前記更新データをマスタデータとして前記マスタデータ記憶領域に記憶する、
記憶制御装置。
【０２０５】
上記構成によれば、マスタデータ複製制御手段は、マスタデータが更新される前に、既に記憶されている更新前のマスタデータを複製データとして複製データ記憶領域に記憶し、その後、一時データ記憶制御手段は、更新データに基づいてマスタデータを更新する。この結果、マスタデータ記憶領域に対するアクセス性能の低下を抑制することができる。
【０２０６】
（付記３）
付記１または２に記載の記憶制御装置であって、
前記一時データ記憶領域は、前記更新データを記憶する前記マスタデータ記憶領域上の位置情報と、前記更新データを記憶したか否かを表す更新フラグ情報と、を記憶する一時保持管理テーブルを含み、
前記一時データ記憶制御手段は、前記一時保持管理テーブルに記憶された前記位置情報と前記更新フラグ情報とに基づいて、前記一時データ記憶領域に記憶された前記更新データを、前記マスタデータ記憶領域に記憶する、
記憶制御装置。
【０２０７】
上記構成によれば、一時保持管理テーブルに記憶された位置情報と更新フラグ情報とに基づいて、まだマスタデータ記憶領域に記憶されていない更新データを、マスタデータ記憶領域上の所定の位置に記憶するので、迅速かつ確実に更新データをマスタデータ記憶領域に記憶することができ、マスタデータ記憶領域に対するアクセス性能の低下を抑制することができる。
【０２０８】
（付記４）
付記１乃至３のいずれかに記載の記憶制御装置であって、
前記一時データ記憶領域に記憶された全ての前記更新データを、前記マスタデータ記憶領域に記憶する前に、新たに生成された第２の複製データ記憶領域と、
前記第２の複製データ記憶領域の作成時に、前記マスタデータ記憶領域への記憶が完了していない前記更新データを、マスタデータとして前記マスタデータ記憶領域に記憶する遅延コピーデータ複製手段と、
を備え、
前記マスタデータ複製手段は、前記一時データ記憶制御手段にて前記マスタデータ記憶領域に記憶された前記マスタデータを前記第２の複製データ記憶領域に記憶するとともに、前記遅延コピーデータ複製手段にて前記マスタデータ記憶領域に記憶された前記マスタデータを前記複製データ記憶領域に記憶する、
記憶制御装置。
【０２０９】
上記構成によれば、マスタデータを更新中に、第２の複製データ記憶領域が生成されると、遅延コピーデータ複製手段は、第２の複製データ記憶領域を生成時にまだマスタデータ記憶領域に記憶されていない更新データをマスタデータ記憶領域に記憶し、マスタデータ複製手段は、一時データ記憶制御手段と、遅延コピーデータ複製手段とのそれぞれにより記憶されたマスタデータを複製する。この結果、更新データをマスタデータとして記憶しているときにも、更新データを受け付けることが可能になり、マスタデータ記憶領域に対するアクセス性能の低下を抑制することができる。
【０２１０】
（付記５）
マスタデータを記憶するマスタデータ記憶領域と、
前記マスタデータを更新する更新データを一時的に格納する一時データ記憶領域と、
前記マスタデータを複製した複製データを記憶する複製データ記憶領域と、
を備える記憶制御装置にて、
前記複製データを前記複製データ記憶領域に記憶し、
前記マスタデータの更新命令により、前記一時データ記憶領域に前記更新データを格納するとともに、その後、前記一時データ記憶領域に格納された前記更新データをマスタデータとして前記マスタデータ記憶領域に記憶する、
情報処理方法。
【０２１１】
（付記６）
付記５に記載の情報処理方法であって、
前記一時データ記憶領域に格納された前記更新データを前記マスタデータ記憶領域に記憶する前に、既に前記マスタデータ記憶領域に記憶されている前記マスタデータを複製して、前記複製データ記憶領域に記憶し、
その後、前記一時データ記憶領域に格納された前記更新データをマスタデータとして前記マスタデータ記憶領域に記憶する、
情報処理方法。
【０２１２】
（付記７）
マスタデータを記憶するマスタデータ記憶領域と、
前記マスタデータを更新する更新データを一時的に格納する一時データ記憶領域と、
前記マスタデータを複製した複製データを記憶する複製データ記憶領域と、
を備える記憶制御装置に、
前記複製データを前記複製データ記憶領域に記憶するマスタデータ複製制御手段と、
前記マスタデータの更新命令により、前記一時データ記憶領域に前記更新データを格納するとともに、その後、前記一時データ記憶領域に格納された前記更新データを複製して、マスタデータとして前記マスタデータ記憶領域に記憶する一時データ記憶制御手段と、
を実現させるためのプログラム。
【０２１３】
（付記８）
付記７に記載のプログラムであって、
前記マスタデータ複製制御手段は、前記一時データ記憶制御手段が前記一時データ記憶領域に格納された前記更新データを前記マスタデータ記憶領域に記憶する前に、既に前記マスタデータ記憶領域に記憶されている前記マスタデータを複製して、前記複製データ記憶領域に記憶し、
その後、前記一時データ記憶制御手段は、前記一時データ記憶領域に格納された前記更新データをマスタデータとして前記マスタデータ記憶領域に記憶する、
プログラム。
【符号の説明】
【０２１４】
７００  ディスクアレイ・サブシステム
７０１  マイクロプロセッサ
７０２  インタフェース制御部
７０３  制御用メモリ
７０４  ＲＡＩＤ制御部
７０５  磁気ディスク装置
７０６  ホストコンピュータ
７０７  管理端末
８０１  キャッシュ・ボリューム
８０２  マスタ・ボリューム
８０３  スナップショット・ボリューム
８０４  共有プール・ボリューム
８１０  データ複製制御部
８１１  アドレス変換部
８１２  キャッシュデータ複製制御部
９０１  属性管理テーブル
９０２  ボリューム対応管理テーブル
９０３  差分管理テーブル
１７００  ディスクアレイ・サブシステム
１８０１  キャッシュ・ボリューム
１８０２  マスタ・ボリューム
１８０３  スナップショット・ボリューム
１８０４  共有プール・ボリューム
１８０５  スナップショット・ボリューム
１８１０  データ複製制御部
１８１１  アドレス変換部
１８１２  キャッシュデータ複製制御部
１８１３  遅延コピーデータ複製制御部
１９０１  キャッシュ対応管理テーブル
１９０２  キャッシュ保持管理テーブル
１９０３  遅延コピー管理テーブル
２０００  記憶制御装置
２０１１  マスタデータ記憶領域
２０１２  一時データ記憶領域
２０１３  複製データ記憶領域
２０１４  一時データ記憶制御部
２０１５  マスタデータ複製制御部
２０２１  マスタデータ
２０３１  更新データ
２０４１  複製データ
【図１】
2014203287.tif 000003
【図２】
2014203287.tif 000004
【図３】
2014203287.tif 000005
【図４】
2014203287.tif 000006
【図５】
2014203287.tif 000007
【図６】
2014203287.tif 000008
【図７】
2014203287.tif 000009
【図８】
2014203287.tif 000010
【図９】
2014203287.tif 000011
【図１０】
2014203287.tif 000012
【図１１】
2014203287.tif 000013
【図１２】
2014203287.tif 000014
【図１３】
2014203287.tif 000015
【図１４】
2014203287.tif 000016
【図１５】
2014203287.tif 000017
【図１６】
2014203287.tif 000018
【図１７】
2014203287.tif 000019
【図１８】
2014203287.tif 000020
【図１９】
2014203287.tif 000021
【図２０】
2014203287.tif 000022
【図２１】
2014203287.tif 000023
【図２２】
2014203287.tif 000024
【図２３】
2014203287.tif 000025
【図２４】
2014203287.tif 000026
【図２５】
2014203287.tif 000027
【図２６】
2014203287.tif 000028
【図２７】
2014203287.tif 000029
【図２８】
2014203287.tif 000030
【図２９】
2014203287.tif 000031