(57)【特許請求の範囲】
【請求項１】
複数の記憶装置と、前記複数の記憶装置の記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御するストレージ制御装置とを備えたストレージシステムにおいて、
前記ストレージ制御装置は、
ホスト装置からの要求に応じて第１のボリュームにデータを書き込むとともに、前記第１のボリュームが分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部に登録する書き込み制御部と、
前記第１のボリュームのうち複製対象領域についての、前記第１のボリュームとは異なる物理記憶領域によって構成される第２のボリュームへの複製要求を受けると、前記複製対象領域に含まれる部分領域を順に選択し、前記コード記憶部に登録されたコードのうち、選択した部分領域のコードと当該部分領域の前に選択済みの他の部分領域のコードとを参照して比較することで、前記複製対象領域の部分領域のうち同一のデータが格納されている部分領域を判定し、前記複製対象領域のうち同一のデータが格納されている部分領域に対応する前記第２のボリュームの部分領域に対しては同一の物理記憶領域を割り当て、前記複製対象領域のうち同一のデータが格納されていない部分領域に対応する前記第２のボリュームの部分領域に対しては新たな物理記憶領域を割り当てて当該物理記憶領域に前記複製対象領域内の対応する部分領域のデータをコピーする複製制御部と、
を有することを特徴とするストレージシステム。
【請求項２】
前記書き込み制御部は、前記ホスト装置からの要求に応じて前記第１のボリュームにデータを書き込む処理と、書き込んだデータに応じたコードを部分領域ごとに生成し、生成したコードを部分領域に対応付けて前記コード記憶部に登録する処理とを、非同期に実行することを特徴とする請求項１記載のストレージシステム。
【請求項３】
前記複製制御部は、前記複製対象領域の部分領域のうちデータが格納されている部分領域のそれぞれに対して、前記複数の記憶装置における未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記複製対象領域内の対応する部分領域に格納されたデータをコピーすることで、前記第２のボリュームを仮想ボリュームとして生成することを特徴とする請求項１または２記載のストレージシステム。
【請求項４】
前記複製制御部は、前記複製対象領域についての複製要求を受けたとき、前記複製対象領域の部分領域のうちデータが格納されている部分領域に割り当てられた物理記憶領域を、前記第２のボリューム内の対応する部分領域に割り当てた後、前記第２のボリュームの各部分領域に割り当てた物理記憶領域を前記未使用領域から割り当てた物理記憶領域に変更し、変更後の物理記憶領域に対して変更前の物理記憶領域に格納されたデータをコピーすることを特徴とする請求項３記載のストレージシステム。
【請求項５】
前記書き込み制御部は、
前記ホスト装置からデータの書き込みを要求された部分領域に対して、前記未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して書き込みを要求されたデータを格納することで、前記第１のボリュームを仮想ボリュームとして生成するとともに、
前記ホスト装置からの要求に応じて前記第１のボリュームにデータを書き込む際に、書き込み先の部分領域を含む前記複製対象領域についての前記第２のボリュームへの複製処理が実行中であり、かつ、前記書き込み先の部分領域にすでにデータが格納されており、かつ、当該データの前記第２のボリュームへのコピーが完了していない場合に、前記書き込み先の部分領域に対して前記未使用領域から新たな物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記ホスト装置から書き込みを要求されたデータを書き込む、
ことを特徴とする請求項４記載のストレージシステム。
【請求項６】
前記複製制御部は、前記複製対象領域の部分領域のうちデータが格納されている部分領域のそれぞれに対して、前記複数の記憶装置における未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記複製対象領域内の対応する部分領域に格納されたデータをコピーすることで、前記第２のボリュームを仮想ボリュームとして生成するとともに、
前記複製対象領域についての複製要求を受けたとき、前記複製対象領域の部分領域のうちデータが格納されている部分領域に割り当てられた物理記憶領域を、前記第２のボリューム内の対応する部分領域に割り当てた後、前記第２のボリュームの各部分領域に割り当てた物理記憶領域を前記未使用領域から割り当てた物理記憶領域に変更し、変更後の物理記憶領域に対して変更前の物理記憶領域に格納されたデータをコピーし、
前記書き込み制御部は、
前記ホスト装置からデータの書き込みを要求された部分領域に対して、前記未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して書き込みを要求されたデータを格納することで、前記第１のボリュームを仮想ボリュームとして生成するとともに、
前記ホスト装置からの要求に応じて前記第１のボリュームにデータを書き込む際に、書き込み先の部分領域を含む前記複製対象領域についての前記第２のボリュームへの複製処理が実行中であり、かつ、前記書き込み先の部分領域にすでにデータが格納されており、かつ、当該データに基づくコードを前記コード記憶部に登録済みでない場合には、前記書き込み先の部分領域に対して前記未使用領域から新たな物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記ホスト装置から書き込みを要求されたデータを書き込む、
ことを特徴とする請求項２記載のストレージシステム。
【請求項７】
前記複製制御部は、前記第２のボリューム内の部分領域に割り当てた物理記憶領域を、前記未使用領域から割り当てた物理記憶領域に変更したとき、当該部分領域に対応する前記複製対象領域の部分領域に対して前記新たな物理記憶領域が割り当てられていた場合には、物理記憶領域を変更した前記第２のボリューム内の部分領域に対して変更前に割り当てられていた物理記憶領域を、前記未使用領域の一部として設定することを特徴とする請求項６記載のストレージシステム。
【請求項８】
前記複製制御部は、前記複製対象領域内の部分領域に格納されたデータを圧縮し、データを圧縮した部分領域に対応する前記第２のボリュームの部分領域に対して、前記未使用領域から圧縮後のデータ容量分の物理記憶領域を割り当て、割り当てた物理記憶領域に前記圧縮後のデータを格納することを特徴とする請求項３〜７のいずれか１項に記載のストレージシステム。
【請求項９】
前記書き込み制御部は、前記第１のボリューム内のデータが格納された部分領域のうち、一定期間以上アクセスされていない部分領域を抽出し、抽出した部分領域のうち同一のデータが格納されている部分領域に対して、同一の物理記憶領域を割り当てることを特徴とする請求項１〜８のいずれか１項に記載のストレージシステム。
【請求項１０】
複数の記憶装置の記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御するストレージ制御装置において、
ホスト装置からの要求に応じて第１のボリュームにデータを書き込むとともに、前記第１のボリュームが分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部に登録する書き込み制御部と、
前記第１のボリュームのうち複製対象領域についての、前記第１のボリュームとは異なる物理記憶領域によって構成される第２のボリュームへの複製要求を受けると、前記複製対象領域に含まれる部分領域を順に選択し、前記コード記憶部に登録されたコードのうち、選択した部分領域のコードと当該部分領域の前に選択済みの他の部分領域のコードとを参照して比較することで、前記複製対象領域の部分領域のうち同一のデータが格納されている部分領域を判定し、前記複製対象領域のうち同一のデータが格納されている部分領域に対応する前記第２のボリュームの部分領域に対しては同一の物理記憶領域を割り当て、前記複製対象領域のうち同一のデータが格納されていない部分領域に対応する前記第２のボリュームの部分領域に対しては新たな物理記憶領域を割り当てて当該物理記憶領域に前記複製対象領域内の対応する部分領域のデータをコピーする複製制御部と、
を有することを特徴とするストレージ制御装置。
【請求項１１】
複数の記憶装置の記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御するストレージ制御装置によるストレージ制御方法であって、
ホスト装置からの要求に応じて第１のボリュームにデータを書き込むとともに、前記第１のボリュームが分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部に登録し、
前記第１のボリュームのうち複製対象領域についての、前記第１のボリュームとは異なる物理記憶領域によって構成される第２のボリュームへの複製要求を受けると、前記複製対象領域に含まれる部分領域を順に選択し、前記コード記憶部に登録されたコードのうち、選択した部分領域のコードと当該部分領域の前に選択済みの他の部分領域のコードとを参照して比較することで、前記複製対象領域の部分領域のうち同一のデータが格納されている部分領域を判定し、前記複製対象領域のうち同一のデータが格納されている部分領域に対応する前記第２のボリュームの部分領域に対しては同一の物理記憶領域を割り当て、前記複製対象領域のうち同一のデータが格納されていない部分領域に対応する前記第２のボリュームの部分領域に対しては新たな物理記憶領域を割り当てて当該物理記憶領域に前記複製対象領域内の対応する部分領域のデータをコピーする、
ことを特徴とするストレージ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム、ストレージ制御装置およびストレージ制御方法に関する。
【背景技術】
【０００２】
近年、ＨＤＤ（Hard Disk Drive）などの記憶装置を複数用いたストレージシステムが広く使用されている。ストレージシステムに対して格納されるデータ量は年々増加していることから、ストレージシステム内の記憶領域を効率よく使用し、実際に使用する物理記憶領域の容量を削減するための技術が注目されている。
【０００３】
物理記憶領域の容量を削減する技術として、シン・プロビジョニング（Thin Provisioning）がある。シン・プロビジョニングは、要求された記憶容量のすべてに相当する物理記憶領域を当初は用意せず、実際の記憶データ容量に相当する物理記憶領域のみを用意して、要求された記憶容量を仮想ボリュームとして提供するものである。
【０００４】
また、物理記憶領域の容量を削減する他の技術として、デデュプリケーション（De-duplication）もある。デデュプリケーションは、記憶するデータの中で重複するデータについては、その中の１つのみを物理記憶領域に記憶し、他のデータについては記憶しないようにするものである。例えば、バックアップシステムにおいて、バックアップ元のボリュームにおいて重複したデータを排除しておき、重複データが排除されたボリュームにおいて物理記憶領域に格納されたデータのみ、バックアップボリュームにコピーするものがある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−２７１８０８号公報
【特許文献２】特開２００９−４８４９７号公報
【特許文献３】特開２００８−２８２３８２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ストレージシステムに記憶されたデータをバックアップする需要が高まるのに連れて、バックアップ先として必要とされる記憶容量が増大していることから、バックアップ先の記憶容量を削減することが課題となっている。
【０００７】
１つの側面では、本発明は、ボリュームの複製先として必要な物理記憶容量を削減することが可能なストレージシステム、ストレージ制御装置およびストレージ制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、複数の記憶装置と、複数の記憶装置の記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御するストレージ制御装置とを備えたストレージシステムが提供される。このストレージシステムにおいて、ストレージ制御装置は、書き込み制御部と、複製制御部とを備える。書き込み制御部は、ホスト装置からの要求に応じて第１のボリュームにデータを書き込むとともに、第１のボリュームが分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部に登録する。複製制御部は、第１のボリュームのうち複製対象領域についての複製要求を受けると、複製対象領域のデータを、第１のボリュームとは異なる物理記憶領域によって構成される第２のボリュームに複製するとともに、コード記憶部に登録されたコードに基づいて複製対象領域の部分領域のうち同一のデータが格納されている部分領域を判定し、同一のデータが格納されている部分領域に対応する第２のボリュームの部分領域に対しては同一の物理記憶領域を割り当てる。
【０００９】
また、上記目的を達成するために、上記のストレージ制御装置と同様の処理を実行するストレージ制御装置およびストレージ制御方法が提供される。
【発明の効果】
【００１０】
１態様によれば、ボリュームの複製先として必要な物理記憶容量を削減することができる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態に係るストレージシステムの構成例を示す図である。
【図２】第２の実施の形態に係るストレージシステムの全体構成例を示す図である。
【図３】ＣＭのハードウェア構成例を示す図である。
【図４】ＣＭの処理機能の構成例を示すブロック図である。
【図５】業務ボリュームおよび複製ボリュームに対する物理記憶領域の割り当てについて示す図である。
【図６】プール領域管理テーブルに登録される情報の例を示す図である。
【図７】業務ボリューム管理テーブルに登録される情報の例を示す図である。
【図８】複製ボリューム管理テーブルに登録される情報の例を示す図である。
【図９】複製範囲設定テーブルに登録される情報の例である。
【図１０】業務ボリュームへのデータ書き込み時の処理例を示す図である。
【図１１】複製ボリュームの生成処理の例を示す図である。
【図１２】コード算出が未完了の状態で新たに書き込みが要求された場合の処理例を示す図である。
【図１３】ホスト装置からの要求に応じた業務ボリュームに対するデータ書き込み処理手順の例を示すフローチャート（その１）である。
【図１４】ホスト装置からの要求に応じた業務ボリュームに対するデータ書き込み処理手順の例を示すフローチャート（その２）である。
【図１５】コード算出処理手順の例を示すフローチャートである。
【図１６】複製ボリュームの生成処理手順の例を示すフローチャート（その１）である。
【図１７】複製ボリュームの生成処理手順の例を示すフローチャート（その２）である。
【図１８】複製ボリュームを用いたリストア処理の例を示す図である。
【図１９】第３の実施の形態における業務ボリューム管理テーブルに登録される情報の例を示す図である。
【図２０】業務ボリュームの容量削減処理手順の例を示すフローチャートである。
【図２１】第３の実施の形態における、複製ボリュームの生成処理手順の例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、実施の形態について図面を参照して詳細に説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係るストレージシステムの構成例を示す図である。
【００１３】
ストレージシステム１は、ストレージ制御装置１０と、複数の記憶装置とを備える。ストレージシステム１が備える記憶装置は、ＨＤＤ、ＳＳＤ（Solid State Drive）などの不揮発性記憶装置である。図１では、ストレージシステム１が備える記憶装置として、記憶装置２１〜２４を例示している。また、ストレージ制御装置１０には、ホスト装置３０が接続されている。
【００１４】
ストレージ制御装置１０は、記憶装置２１〜２４に対するデータアクセス処理を制御する装置である。ストレージ制御装置１０は、記憶装置２１〜２４の物理記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御する。図１中に示すボリューム４１，４２は、このようなボリュームである。
【００１５】
ストレージ制御装置１０は、書き込み制御部１１、複製制御部１２およびコード記憶部１３を備える。書き込み制御部１１および複製制御部１２の処理は、例えば、ストレージ制御装置１０が備えるＣＰＵ（Central Processing Unit）が所定のプログラムを実行することで実現される。また、コード記憶部１３は、例えば、ストレージ制御装置１０の内部に設けられた不揮発性記憶装置の記憶領域として実現される。
【００１６】
書き込み制御部１１は、ホスト装置３０からの要求に応じて、ボリューム４１（第１のボリューム）に対してデータを書き込む。また、書き込み制御部１１は、ボリューム４１が分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部１３に登録する。コード記憶部１３に登録されるコードは、元のデータごとにユニークな値をとるものであり、例えば、元のデータに基づいて計算されたハッシュ値である。
【００１７】
書き込み制御部１１は、ホスト装置３０からの要求に応じた、ボリューム４１に対するデータ書き込み処理と、書き込んだデータに基づくコードの生成処理とを、例えば、非同期に実行する。この場合、書き込み制御部１１は、ボリューム４１内の所定の部分領域にデータを書き込んだ後、その後の任意のタイミングで、部分領域に書き込んだデータに基づいてコードを生成し、生成したコードをコード記憶部１３に登録する。
【００１８】
複製制御部１２は、ボリューム４１のうち複製対象領域についての複製要求を、例えばホスト装置３０から受けると、複製対象領域のデータを別のボリューム４２（第２のボリューム）に複製して、複製ボリュームを生成する。このボリューム４２は、記憶装置２１〜２４によって実現される物理記憶領域のうち、ボリューム４１とは異なる物理記憶領域によって構成される。
【００１９】
また、複製制御部１２は、上記のように複製ボリュームを生成するとともに、コード記憶部１３に登録されたコードに基づいて、複製対象領域内の部分領域のうち同一のデータが格納されている部分領域を判定する。そして、複製制御部１２は、同一のデータが格納されている部分領域に対応する、ボリューム４２の部分領域に対しては、同一の物理記憶領域を割り当てる。すなわち、複製制御部１２は、ボリューム４２内の部分領域のうち、同一のデータを保持する部分領域群においては、それらのうち１つの部分領域にのみ実データを格納し、それ以外の部分領域には実データを格納しないようにする。このような処理により、ボリューム４２に割り当てる物理記憶領域の容量を削減する。
【００２０】
例えば、ボリューム４１内の部分領域４１ａ〜４１ｄが、記憶装置２１内の物理記憶領域２１ａによって実現されるものとする。そして、ボリューム４１内の部分領域４１ａ〜４１ｄを複製対象領域として指定した複製処理が要求されたものとする。
【００２１】
複製制御部１２は、例えば、記憶装置２４内の物理記憶領域２４ａ内に、部分領域４１ａ〜４１ｄのデータを格納することで、部分領域４１ａ〜４１ｄを複製したボリューム４２を生成する。すなわち、生成されたボリューム４２内の部分領域４２ａ〜４２ｄは、複製元のボリューム４１の部分領域４１ａ〜４１ｄにそれぞれ対応する。
【００２２】
ここで、部分領域４１ｂのデータと部分領域４１ｃのデータとが、同一であるものとする。複製制御部１２は、コード記憶部１３において部分領域４１ｂ，４１ｃにそれぞれ対応付けられているコードが一致することから、部分領域４１ｂ，４１ｃの各データが同一であると判定する。複製制御部１２は、部分領域４１ｂ，４１ｃにそれぞれ対応する、ボリューム４２内の部分領域４２ｂ，４２ｃに対して、同一の物理記憶領域を割り当てる。
【００２３】
例えば、複製制御部１２は、記憶装置２４の物理記憶領域２４ａのうち、物理記憶領域２４ｂに対して、部分領域４２ｂのデータとして、ボリューム４１における部分領域４１ｂのデータを格納する。さらに、複製制御部１２は、部分領域４２ｃの実データを物理記憶領域２４ｂとは異なる物理記憶領域に格納せずに、部分領域４２ｃに対して部分領域４２ｂと共通の物理記憶領域２４ｂを割り当てる。
【００２４】
異なる部分領域に対して同一の物理記憶領域を割り当てる方法としては、例えば次のような方法がある。複製制御部１２は、ボリューム４２の部分領域ごとに、実データと、実データを格納した物理記憶領域の位置を示す位置情報とを記録する。この方法を用いた場合、複製制御部１２は、部分領域４２ｂについては実データと位置情報とを記録するが、部分領域４２ｃについては実データを記録せずに位置情報のみを記録する。これにより、部分領域４２ｂ，４２ｃに対して同一の物理記憶領域が割り当てられる。
【００２５】
また、他の方法として、複製制御部１２は、テーブル情報に対して、ボリューム４２の部分領域ごとに、実データを格納した物理記憶領域の位置情報を対応付けて登録する。この方法を用いた場合、複製制御部１２は、テーブル内の部分領域４２ｂ，４２ｃの各エントリに対して同じ位置情報を登録することで、部分領域４２ｂ，４２ｃに同一の物理記憶領域を割り当てる。
【００２６】
以上のように、ボリューム４２において、同一のデータが記録される部分領域に対して同一の物理記憶領域が割り当てられることで、ボリューム４２に対して用意すべき物理記憶領域の容量が削減される。従って、ストレージシステム１が備える物理記憶領域の使用量が小さくなり、これらの物理記憶領域を効率的に利用できるようになる。
【００２７】
また、複製制御部１２は、あらかじめ生成されたコードが登録されたコード記憶部１３を参照して、同一のデータが記録された部分領域の有無を判定するので、複製ボリュームの生成時にコードを算出する必要がない。このため、複製ボリュームの生成処理に要する時間を短縮できる。
【００２８】
一方、書き込み制御部１１は、ボリューム４１に書き込んだデータに基づくコードの算出を行うものの、部分領域間のデータの同一性判定は行わない。しかも、書き込み制御部１１は、ボリューム４１へのデータの書き込みと、書き込んだデータに基づくコードの算出処理とを、非同期に実行することもできる。この場合、コード算出処理が、ホスト装置３０からの要求に応じたボリューム４１のアクセス処理に与える影響を小さくすることができる。従って、ホスト装置３０からの要求に応じた記憶装置への書き込み処理速度をできるだけ低下させずに、ストレージシステム１で使用される物理記憶領域の容量を削減して、物理記憶領域を効率よく利用できるようになる。
【００２９】
なお、複製制御部１２は、さらに、ボリューム４２を仮想ボリュームとして生成してもよい。この場合、ボリューム４２の部分領域のうち実際にデータが記録されている部分領域にのみ物理記憶領域が割り当てられ、データが記録されていない部分領域には物理記憶領域が割り当てられない。これにより、ボリューム４２に割り当てる物理記憶領域の容量をさらに削減することができる。
【００３０】
〔第２の実施の形態〕
図２は、第２の実施の形態に係るストレージシステムの全体構成例を示す図である。図２に示すストレージシステム１００は、ＣＥ（Controller Enclosure）２００と、ＤＥ（Drive Enclosure）３００とを含む。また、ＣＥ２００には、ホスト装置４００が接続されている。
【００３１】
ＣＥ２００は、ＣＭ（Controller Module）２０１，２０２を備える。ＣＭ２０１，２０２のそれぞれは、ホスト装置４００からのＩ／Ｏ（In/Out）要求に応じて、ＤＥ３００内の記憶装置に対するデータの読み書きを行う。ＣＭ２０１，２０２は、ＤＥ３００内の記憶装置によって実現される物理記憶領域をＲＡＩＤ（Redundant Arrays of Inexpensive Disks）によって管理し、これらの物理記憶領域に対するアクセスを制御する。
【００３２】
なお、ＣＭ２０１，２０２は、例えばルータなどを介して互いに接続されていてもよい。また、ＣＭは、ＣＥ２００内に１つのみ設けられてもよいし、３つ以上設けられてもよい。ただし、ＣＭが複数設けられることで、ＤＥ３００に対するアクセス制御系統が冗長化され、アクセス制御処理の信頼性が向上する。
【００３３】
ＤＥ３００は、ＣＭ２０１，２０２からのアクセス制御対象となる複数の記憶装置を備える。本実施の形態のＤＥ３００は、記憶装置としてＨＤＤを備えるディスクアレイ装置である。なお、ＤＥ３００が備える記憶装置としては、ＳＳＤなどの他の種類の不揮発性記憶装置を使用することもできる。また、ＣＥ２００には、複数のＤＥ３００が接続されていてもよい。
【００３４】
ホスト装置４００は、ユーザの操作に応じて、ＣＭ２０１，２０２に対して、ＤＥ３００内のＨＤＤへのアクセスを要求する。ホスト装置４００は、例えば、ユーザの操作に応じて、ＣＭ２０１，２０２のいずれかを通じて、ＤＥ３００内のＨＤＤからのデータの読み出しや、ＤＥ３００内のＨＤＤに対するデータの書き込みを行うことができる。
【００３５】
なお、ＣＥ２００内のＣＭ２０１，２０２は、ともに同様の構成を有し、同様の処理を実行可能である。そこで、以下、ＣＭ２０１についてのみ説明し、ＣＭ２０２についての説明を省略する。
【００３６】
図３は、ＣＭのハードウェア構成例を示す図である。
ＣＭ２０１は、ＣＰＵ２１１によって装置全体が制御されている。ＣＰＵ２１１には、ＲＡＭ（Random Access Memory）２１２および複数の周辺機器が、バス２１７を介して接続されている。ＲＡＭ２１２は、ＣＭ２０１の主記憶装置として使用され、ＣＰＵ２１１に実行させるプログラムの少なくとも一部や、このプログラムによる処理に必要な各種データを一時的に記憶する。
【００３７】
ＣＰＵ２１１には、周辺機器の例として、ＳＳＤ２１３、入力Ｉ／Ｆ（インタフェース）２１４、ＣＡ（Channel Adapter）２１５およびＤＩ（Drive Interface）２１６が接続されている。
【００３８】
ＳＳＤ２１３は、ＣＭ２０１の二次記憶装置として使用され、ＣＰＵ２１１によって実行されるプログラムやその実行に必要な各種のデータなどを記憶する。なお、二次記憶装置としては、例えば、ＨＤＤなどの他の種類の不揮発性記憶装置が使用されてもよい。
【００３９】
入力Ｉ／Ｆ２１４には、操作キーなどを備える入力装置２１４ａが接続されている。入力Ｉ／Ｆ２１４は、入力装置２１４ａに対する操作入力に応じた信号をＣＰＵ２１１に出力する。
【００４０】
ＣＡ２１５は、ホスト装置４００とＣＭ２０１との間でデータを送受信するインタフェース処理を実行する。ＣＡ２１５とホスト装置４００とは、例えば、ＦＣ（Fibre Channel）規格に従って通信する。
【００４１】
ＤＩ２１６は、ＤＥ３００とＣＭ２０１との間でデータを送受信するインタフェース処理を実行する。ＤＩ２１６とＤＥ３００とは、例えば、ＳＡＳ（Serial Attached SCSI，SCSI：Small Computer System Interface）規格に従って通信する。
【００４２】
図４は、ＣＭの処理機能の構成例を示すブロック図である。
ＣＭ２０１は、ＲＡＩＤ制御部２２１、ホストＩ／Ｏ制御部２２２および複製制御部２２３を備える。ＲＡＩＤ制御部２２１、ホストＩ／Ｏ制御部２２２および複製制御部２２３の処理は、例えば、ＣＭ２０１のＣＰＵ２１１が所定のプログラムを実行することで実現される。
【００４３】
また、ＣＭ２０１の記憶装置には、プール領域管理テーブル２３１、業務ボリューム管理テーブル２３２、複製ボリューム管理テーブル２３３および複製範囲設定テーブル２３４が記憶される。これらの各テーブルは、例えばＳＳＤ２１３に記憶される。
【００４４】
ＲＡＩＤ制御部２２１は、ホストＩ／Ｏ制御部２２２または複製制御部２２３からの要求に応じて、ＤＥ３００内のＨＤＤにアクセスする。ＲＡＩＤ制御部２２１は、ＤＥ３００内のＨＤＤにアクセスする際に、アクセス先の領域に対して設定されたＲＡＩＤに関する設定情報（ＲＡＩＤレベル、ＲＡＩＤを構成するディスク数など）に基づいてアクセス制御を行う。
【００４５】
例えば、ＲＡＩＤ制御部２２１は、ホストＩ／Ｏ制御部２２２からデータの書き込み要求を受けると、ＲＡＩＤに関する設定情報に基づいて、データが冗長化されるように書き込み処理を行う。以下、例としてディスク数「６」のＲＡＩＤ−５で制御するものとすると、ＲＡＩＤ制御部２２１は、ホストＩ／Ｏ制御部２２２から受信したデータを分割し、連続する５個の分割データとそれらに基づくパリティとを、６台のＨＤＤにおける同一ストライプ番号の領域に分散させて記録する。
【００４６】
ホストＩ／Ｏ制御部２２２は、ホスト装置４００から、業務ボリュームに対するＩ／Ｏ要求を受け付ける。業務ボリュームとは、ユーザが使用可能な論理ボリュームであり、その物理記憶領域はＤＥ３００内のＨＤＤによって提供される。ユーザは、ホスト装置４００からＣＭ２０１に対してＩ／Ｏ要求を送信することで、業務ボリュームに対するデータの読み書きを行うことができる。
【００４７】
業務ボリュームは、プール領域から割り当てられた物理記憶領域によって構成される仮想ボリュームとして実現される。プール領域は、ＤＥ３００内のＨＤＤ内の未使用の物理記憶領域のうち、業務ボリューム（および後述する複製ボリューム）に対して割り当て可能な領域である。プール領域の位置を示すアドレスは、プール領域管理テーブル２３１に登録されている。
【００４８】
ホストＩ／Ｏ制御部２２２は、ホスト装置４００から業務ボリュームに対する書き込み要求を受けると、データの書き込み先の物理記憶領域をプール領域管理テーブル２３１から獲得する。ホストＩ／Ｏ制御部２２２は、獲得した物理記憶領域を示すアドレス（ＬＢＡ：Logical Block Address）と書き込み対象のデータとをＲＡＩＤ制御部２２１に通知し、データの書き込みを依頼する。これとともに、ホストＩ／Ｏ制御部２２２は、獲得した物理記憶領域を示すアドレスを、業務ボリューム内のデータの書き込み位置に対応付けて、業務ボリューム管理テーブル２３２に登録する。このような処理により、業務ボリュームの物理記憶領域は、データが実際に書き込まれた領域についてのみプール領域から動的に割り当てられる。
【００４９】
また、ホストＩ／Ｏ制御部２２２は、ホスト装置４００から、業務ボリュームからの読み出し要求を受けると、業務ボリューム管理テーブル２３２を参照して、読み出し領域を示すアドレスを判別する。ホストＩ／Ｏ制御部２２２は、読み出し領域を示すアドレスをＲＡＩＤ制御部２２１に通知して、データの読み出しを依頼する。依頼に応じてＲＡＩＤ制御部２２１がデータを読み出すと、ホストＩ／Ｏ制御部２２２は、読み出されたデータをホスト装置４００に送信する。
【００５０】
さらに、ホストＩ／Ｏ制御部２２２は、ホスト装置４００から、業務ボリューム内の複製対象領域の指定を受けるとともに、指定された複製対象領域についての複製要求を受けると、複製対象領域を示す情報を複製制御部２２３に通知して、複製ボリュームの生成処理を依頼する。
【００５１】
複製制御部２２３は、ホストＩ／Ｏ制御部２２２からの依頼に応じて、複製ボリュームの生成処理を行う。複製ボリュームは、例えば、対応する業務ボリュームのうち複製対象として指定された領域（以下、複製対象領域と呼ぶ）についてのバックアップとして利用されるものである。この複製ボリュームは、業務ボリュームと共用されるプール領域から割り当てられた物理記憶領域によって構成される仮想ボリュームとして実現される。複製制御部２２３は、複製ボリューム内の部分領域と、各部分領域に割り当てられた物理記憶領域を示すアドレスとを対応付けて、複製ボリューム管理テーブル２３３に登録する。
【００５２】
複製制御部２２３は、複製対象領域に割り当てられた物理記憶領域のアドレスを業務ボリューム管理テーブル２３２から判別し、判別したアドレスをＲＡＩＤ制御部２２１に通知して、データの読み出しを依頼する。また、複製制御部２２３は、複製対象領域のうちデータが格納されている（すなわち、物理記憶領域が割り当てられている）領域に対応する物理記憶領域を、プール領域管理テーブル２３１から獲得する。複製制御部２２３は、ＲＡＩＤ制御部２２１によって読み出されたデータを、獲得した物理記憶領域にコピーするように、ＲＡＩＤ制御部２２１に依頼する。このような処理により、複製ボリュームの物理記憶領域は、データが実際に書き込まれている領域についてのみプール領域から動的に割り当てられる。
【００５３】
また、後述するように、複製制御部２２３は、複製ボリュームを生成する際、複製ボリューム内のデータの重複排除（De-duplication）と、部分領域ごとのデータ圧縮とを行う。データの重複排除は、複製ボリューム内の部分領域のうち同一データが格納されている部分領域に対しては、同一の物理記憶領域を割り当てるものである。このようなデータの重複排除とデータ圧縮とによって、複製ボリュームに割り当てる物理記憶領域を削減する。
【００５４】
なお、複製制御部２２３は、複製ボリュームを生成する際、業務ボリュームのうち複製対象領域に割り当てられた物理記憶領域を示すアドレスを、複製範囲設定テーブル２３４に登録する。この複製範囲設定テーブル２３４は、複製ボリュームの生成処理中に、ホスト装置４００から業務ボリュームへの書き込みが要求された際に、ホストＩ／Ｏ制御部２２２によって参照される。
【００５５】
図５は、業務ボリュームおよび複製ボリュームに対する物理記憶領域の割り当てについて示す図である。
図５では例として、業務ボリュームＶ１の少なくとも一部の領域を複製した複製ボリュームＶ２を生成する場合を示す。業務ボリュームＶ１に付与された「オフセット（Offset）」は、業務ボリュームＶ１を一定容量ごとに分割した部分領域の位置を示す。以下、部分領域自体を「オフセット」と呼び、番号Ｘのオフセットを「オフセット＃Ｘ」と記載する。図５では例として、業務ボリュームＶ１におけるオフセット＃００００〜＃０００５を、複製ボリュームＶ２に複製する場合を示す。
【００５６】
前述のように、業務ボリュームＶ１および複製ボリュームＶ２は、ともに仮想ボリュームとして実現される。業務ボリュームＶ１については、データが格納されているオフセットに対してのみ、物理記憶領域が割り当てられる。業務ボリュームＶ１に割り当てられた物理記憶領域は、業務ボリューム管理テーブル２３２に登録される。図５の例では、業務ボリュームＶ１のオフセット＃００００〜＃０００２，＃０００４にデータが格納されている。この場合、業務ボリューム管理テーブル２３２におけるオフセット＃００００〜＃０００２，＃０００４に対応するエントリに、各オフセットに割り当てられた物理記憶領域を示す位置情報が登録される。
【００５７】
複製ボリュームＶ２についても同様に、データが格納されているオフセットに対してのみ、物理記憶領域が割り当てられる。複製ボリュームＶ２に割り当てられた物理記憶領域は、複製ボリューム管理テーブル２３３に登録される。図５の例では、業務ボリュームＶ１のオフセット＃００００〜＃０００２，＃０００４にデータが格納されていることから、複製ボリュームＶ２のオフセット＃００００〜＃０００２，＃０００４にデータが格納されている。この場合、複製ボリューム管理テーブル２３３におけるオフセット＃００００〜＃０００２，＃０００４に対応するエントリに、各オフセットに割り当てられた物理記憶領域を示す位置情報が登録される。
【００５８】
一方、図５に示すプール領域Ａ０は、ＤＥ３００内のＨＤＤによって実現される物理記憶領域である。プール領域Ａ０は、未使用領域であるフリー領域Ａ１と、それぞれ使用中の領域であるＴＰＰ（Thin Provisioning Pool）領域Ａ２およびＳＤＰ（Snap Data Pool）領域Ａ３とを含む。
【００５９】
業務ボリュームＶ１および複製ボリュームＶ２の物理記憶領域は、フリー領域Ａ１から割り当てられる。フリー領域Ａ１には、例えば、業務ボリュームＶ１や複製ボリュームＶ２に対して割り当て可能な物理記憶領域が、複数のプールボリュームとして用意される。図５の例では、フリー領域Ａ１には６つのプールボリュームＰＶ＃００〜＃０５が用意されている。業務ボリュームＶ１や複製ボリュームＶ２に割り当てられる物理記憶領域は、フリー領域Ａ１に用意されたプールボリュームを識別するボリューム番号と、そのプールボリュームにおける先頭位置を示すＬＢＡ（Logical Block Address）と、先頭位置から終端位置までの長さ（容量）を示すブロック数（ＬＢＡの数）とによって指定される。
【００６０】
各プールボリュームは、ＲＡＩＤの構成設定に応じた１つ以上のＨＤＤによって構成される。本実施の形態では前述した“ディスク数「６」のＲＡＩＤ−５”によって制御が行われるものとすると、１つのプールボリュームはＤＥ３００内の６台のＨＤＤによって構成される。そして、あるボリューム番号のプールボリュームにおけるあるＬＢＡは、ボリューム番号に対応するプールボリュームに属する６台のＨＤＤにおける同一の位置を示す。従って、業務ボリュームＶ１や複製ボリュームＶ２に対して、ボリューム番号およびＬＢＡによって示される物理記憶領域が割り当てられる際には、実際には６台分のＨＤＤにおける同一ＬＢＡが示す物理記憶領域が割り当てられる。
【００６１】
業務ボリュームＶ１内のあるオフセットに対してデータの書き込みが要求されると、フリー領域Ａ１から物理記憶領域が抽出され、抽出された物理記憶領域がオフセットに割り当てられて、割り当てられた物理記憶領域にデータが格納される。ＴＰＰ領域Ａ２は、基本的に、業務ボリュームＶ１に割り当てられた物理記憶領域が属する論理領域である。以下、ＴＰＰ領域Ａ２に属する、オフセットごとの物理記憶領域を、「ＴＰＰブロック」と呼ぶ。図５の例では、業務ボリュームＶ１内のオフセットのうち、データが格納されたオフセット＃００００〜＃０００２，＃０００４に対してのみ、それぞれＴＰＰブロックが割り当てられている。なお、ＴＰＰブロックは、すべて同じ容量を備える。
【００６２】
一方、複製ボリュームＶ２における、データを格納すべきオフセットに対しても、フリー領域Ａ１から抽出された物理記憶領域が割り当てられる。ＳＤＰ領域Ａ３は、複製ボリュームＶ２に対して最終的に割り当てられた物理記憶領域が属する論理領域である。以下、ＳＤＰ領域Ａ３に属する、オフセットごとの物理記憶領域を、「ＳＤＰブロック」と呼ぶ。図５の例では、複製ボリュームＶ２内のオフセットのうち、データが格納されたオフセット＃００００〜＃０００２，＃０００４に対してのみ、それぞれＳＤＰブロックが割り当てられている。
【００６３】
ところで、複製ボリュームＶ２におけるデータが格納されたオフセットには、対応する業務ボリュームＶ１内のオフセットに格納されたデータが、圧縮されて書き込まれる。このため、複製ボリュームＶ２のオフセットに割り当てられるＳＤＰブロックの容量は、ほとんどの場合ＴＰＰブロックの容量より小さくなる。
【００６４】
さらに、後述するように、複製ボリュームＶ２においては、同一のデータが格納されたオフセットに対して同一のＳＤＰブロックを割り当てる「重複排除」が行われる。この重複排除により、業務ボリュームＶ１における複製対象領域に割り当てられるＴＰＰブロックの数より、複製ボリュームＶ２に割り当てられるＳＤＰブロックの数が少なくなることもある。これにより、複製ボリュームＶ２に割り当てられる物理記憶領域の容量をさらに削減することが可能になる。
【００６５】
なお、図５においては、複製ボリュームＶ２と、これに対応する複製ボリューム管理テーブル２３３およびＳＤＰブロックについて、複製ボリュームＶ２の生成処理が完了した状態を示した。しかしながら、後述するように、複製ボリュームＶ２の生成処理の過程では、複製ボリュームＶ２のオフセットに対して、一時的にＴＰＰブロックが割り当てられ、その後、ＴＰＰブロックからＳＤＰブロックに対して割り当てが変更される。
【００６６】
図６は、プール領域管理テーブルに登録される情報の例を示す図である。
プール領域管理テーブル２３１には、プール領域のうち、業務ボリュームや複製ボリュームとして割り当て可能なフリー領域と、割り当て済みの領域（使用中領域）とを示す情報が登録される。使用中領域については、ＴＰＰ領域とＳＤＰ領域とが個別に管理される。なお、図６は、プール領域に用意された１つのプールボリュームに対応するテーブルを示しているが、実際には、プール領域管理テーブル２３１には、図６のようなテーブルがプールボリュームごとに登録される。
【００６７】
フリー領域は、「次ポインタ」と「前ポインタ」との組み合わせからなるエントリを用いた連結リスト２３１ａによって管理される。１つのエントリは、プールボリュームにおける連続する記憶領域（連続するＬＢＡによって表される領域）を示す。「次ポインタ」には、次のエントリが示す記憶領域の先頭ＬＢＡが登録され、「前ポインタ」には、前のエントリが示す記憶領域の末尾のＬＢＡが登録される。連結リスト２３１ａにおける先頭エントリの「前ポインタ」には、連結リスト２３１ａにおける最後尾のエントリが示す記憶領域の末尾のＬＢＡが登録される。一方、連結リスト２３１ａにおける最後尾のエントリの「次ポインタ」には、連結リスト２３１ａにおける先頭エントリが示す記憶領域の先頭ＬＢＡが登録される。
【００６８】
ＴＰＰ領域についても同様に、「次ポインタ」と「前ポインタ」との組み合わせからなるエントリを用いた連結リスト２３１ｂによって管理される。ＳＤＰ領域についても同様に、「次ポインタ」と「前ポインタ」との組み合わせからなるエントリを用いた連結リスト２３１ｃによって管理される。
【００６９】
フリー領域からＴＰＰブロックが割り当てられる際には、ＴＰＰブロックに対応する記憶領域がフリー領域から除外されるように、連結リスト２３１ａが書き換えられる。これとともに、ＴＰＰブロックがＴＰＰ領域に追加されるように、連結リスト２３１ｂが書き換えられる。一方、ＴＰＰブロックとして使用されていた記憶領域が解放されると、その記憶領域がＴＰＰ領域から除外されるように、連結リスト２３１ｂが書き換えられる。これとともに、ＴＰＰ領域から除外された記憶領域がフリー領域に追加されるように、連結リスト２３１ａが書き換えられる。
【００７０】
同様に、フリー領域からＳＤＰブロックが割り当てられる際には、ＳＤＰブロックに対応する記憶領域がフリー領域から除外されるように、連結リスト２３１ａが書き換えられる。これとともに、ＳＤＰブロックがＳＤＰ領域に追加されるように、連結リスト２３１ｃが書き換えられる。一方、ＳＤＰブロックとして使用されていた記憶領域が解放されると、その記憶領域がＳＤＰ領域から除外されるように、連結リスト２３１ｃが書き換えられる。これとともに、ＳＤＰ領域から除外された記憶領域がフリー領域に追加されるように、連結リスト２３１ａが書き換えられる。
【００７１】
図７は、業務ボリューム管理テーブルに登録される情報の例を示す図である。
業務ボリューム管理テーブル２３２には、業務ボリューム内のオフセットごとにエントリが設けられる。各エントリには、対応するオフセットに対して割り当てられた物理記憶領域の位置情報と、対応するオフセットに格納されたデータに基づくコードと、対応するオフセットのステータスとが登録される。
【００７２】
割り当てられた物理記憶領域の位置情報としては、その物理記憶領域が属するプールボリュームを識別するボリューム番号と、物理記憶領域の先頭位置を示すＬＢＡと、物理記憶領域の容量を示すブロック数とが登録される。なお、この「ブロック数」としてカウントされるブロックは、プールボリュームにおいて１つのＬＢＡで識別される論理ブロックであって、ＴＰＰブロックやＳＤＰブロックとは異なるものである。また、オフセットにＴＰＰブロックが割り当てられている場合、ブロック数は一定値となる。
【００７３】
コードは、オフセットに格納されたデータを基に算出され、算出元のデータごとにユニークな値をとる。このようなコードの例としては、ハッシュ値を用いることができる。
ステータスは、オフセットについての状態を示すものであり、「算出中」、「ＴＰＰ」および「ＳＤＰ」のいずれかが設定される。「算出中」は、オフセットに対してＴＰＰブロックが割り当てられたものの、割り当てられたＴＰＰブロックに格納するデータに基づくコードの算出が完了していないことを示す。「ＴＰＰ」は、オフセットに対してＴＰＰブロックが割り当てられ、かつ、コードの算出が完了していることを示す。例えば、エントリ内のコードの欄に値が登録されると、同じエントリ内のステータスが「算出中」から「ＴＰＰ」に更新される。「ＳＤＰ」は、オフセットに対してＳＤＰブロックが割り当てられていることを示す。なお、業務ボリュームのオフセットに対してＳＤＰブロックが割り当てられる場合とは、例えば、業務ボリューム内の一部のデータの破壊などが発生したときに、複製ボリュームの物理記憶領域（すなわちＳＤＰブロック）を使用して業務ボリュームが論理的にリストアされる場合などである。
【００７４】
なお、業務ボリュームは、複数設定されてもよい。この場合、業務ボリューム管理テーブル２３２は、業務ボリュームごとに個別に生成される。
図８は、複製ボリューム管理テーブルに登録される情報の例を示す図である。
【００７５】
複製ボリューム管理テーブル２３３には、複製ボリューム内のオフセットごとにエントリが設けられる。複製ボリューム管理テーブル２３３内の各エントリには、業務ボリューム管理テーブル２３２と同様に、対応するオフセットに対して割り当てられた物理記憶領域の位置情報と、対応するオフセットに格納されたデータに基づくコードと、対応するオフセットのステータスとが登録される。
【００７６】
さらに、複製ボリューム管理テーブル２３３内の各エントリには、フリーフラグが登録される。フリーフラグは、初期値が「０」とされ、ステータスが「ＴＰＰ」のときに、業務ボリューム内の同じオフセットに対して別のＴＰＰブロックが割り当てられている場合に「１」とされる。後述するように、フリーフラグが「１」となるケースとは、オフセットに格納されたデータに基づくコードの算出が完了していない状態で、そのオフセットに対してホスト装置４００から新たなデータの書き込みが要求される場合である。
【００７７】
なお、複製ボリュームは、１つの業務ボリュームを基に異なるタイミングで複数生成されてもよい。この場合、複製ボリューム管理テーブル２３３は、複製ボリュームの生成処理が開始されるごとに、複製ボリュームごとに個別に生成される。
【００７８】
図９は、複製範囲設定テーブルに登録される情報の例である。
複製範囲設定テーブル２３４は、複製対象範囲が指定されて複製ボリュームの生成が要求されたときに、業務ボリュームにおける複製対象範囲に割り当てられた物理記憶領域の位置情報を保持するものである。複製範囲設定テーブル２３４には、同じプールボリュームに属する連続した物理記憶領域ごとにエントリが設けられる。各エントリには、識別番号が付与されるとともに、物理記憶領域を示す位置情報として、物理記憶領域が属するプールボリュームを識別するボリューム番号と、物理記憶領域の先頭位置を示すＬＢＡと、物理記憶領域の長さ（容量）を示すブロック数とが登録される。
【００７９】
この複製範囲設定テーブル２３４は、対応する複製ボリュームの生成処理が完了すると、消去される。なお、複製範囲設定テーブル２３４は、例えば、ＲＡＭ２１２など、ＣＭ２０１内の揮発性記憶装置に記憶されてもよい。
【００８０】
次に、複製ボリュームの生成処理について説明する。まず、図１０は、業務ボリュームへのデータ書き込み時の処理例を示す図である。
ホストＩ／Ｏ制御部２２２は、ホスト装置４００から、業務ボリューム内の未記憶領域に対するデータの書き込み要求を受けると、フリー領域からＴＰＰブロックを獲得して、業務ボリュームにおけるデータの書き込み対象のオフセットに割り当てる。図１０の例では、ホスト装置４００が、業務ボリュームＶ１内のオフセット＃００００〜＃０００２，＃０００４に対するデータの書き込みを要求したものとする（ステップＳ１１）。
【００８１】
書き込み要求を受けたホストＩ／Ｏ制御部２２２は、オフセット＃００００〜＃０００２，＃０００４にそれぞれ対応する物理記憶領域（ＴＰＰブロック）をフリー領域から獲得し、獲得した物理記憶領域の位置情報を業務ボリューム管理テーブル２３２に登録する（ステップＳ１２）。このとき、ホストＩ／Ｏ制御部２２２は、プール領域管理テーブル２３１を更新することで、獲得した物理記憶領域をフリー領域から除外するとともに、ＴＰＰ領域Ａ２に追加する。これにより、獲得された物理記憶領域は、ＴＰＰブロックとして取り扱われる。
【００８２】
ホストＩ／Ｏ制御部２２２は、上記のような業務ボリューム管理テーブル２３２への登録処理を行うとともに、獲得したＴＰＰブロックの位置情報と、各ＴＰＰブロックに書き込むべきデータとをＲＡＩＤ制御部２２１に引き渡して、書き込みを依頼する。これにより、オフセット＃００００〜＃０００２，＃０００４にそれぞれ割り当てられたＴＰＰブロックに対してデータが書き込まれる。
【００８３】
さらに、ホストＩ／Ｏ制御部２２２は、オフセット＃００００〜＃０００２，＃０００４にそれぞれ書き込まれたデータを基にコードを算出し、算出したコードを業務ボリューム管理テーブル２３２に登録する（ステップＳ１３）。このように、業務ボリュームＶ１内の領域についての複製要求が発生する前に、複製処理の際に必要となるコードを算出して業務ボリューム管理テーブル２３２に記録しておくことで、複製処理の際に重複排除処理を効率よく実行できる。
【００８４】
ただし、ホストＩ／Ｏ制御部２２２は、ホスト装置４００からの要求に応じたＴＰＰブロックへのデータの書き込み処理と、書き込んだデータに基づくコードの算出処理とを、非同期に実行する。すなわち、ホストＩ／Ｏ制御部２２２は、ＴＰＰブロックへのデータの書き込みが完了した後の任意のタイミングで、書き込んだデータに基づくコードの算出処理を実行する。これにより、ホスト装置４００からの書き込み要求を受けてから、要求された書き込み処理を完了してホスト装置４００に応答するまでに要する時間が短縮され、コードの算出処理がホストＩ／Ｏ処理に与える影響を低減することができる。
【００８５】
図１１は、複製ボリュームの生成処理の例を示す図である。図１１では、業務ボリュームＶ１内のオフセット＃００００〜＃０００２，＃０００４にデータが格納されている状態で、業務ボリュームＶ１内のオフセット＃００００〜＃０００５についての複製処理が、ホスト装置４００から要求されたものとする。
【００８６】
複製要求を受けた複製制御部２２３は、まず、業務ボリューム管理テーブル２３２における複製対象領域（オフセット＃００００〜＃０００５）に対応するエントリを、複製ボリューム管理テーブル２３３にコピーする（ステップＳ２１）。これにより、複製ボリュームＶ２が論理的に生成される。すなわち、複製ボリュームＶ２におけるデータが格納されたオフセット＃００００〜＃０００２，＃０００４に対して、複製元の業務ボリュームＶ１のオフセット＃００００〜＃０００２，＃０００４に割り当てられているＴＰＰブロックが、一時的に割り当てられる。この状態では、例えば、ホスト装置４００からの要求に応じて、複製ボリュームＶ２からのデータ読み出しを実行できる。このように、業務ボリューム管理テーブル２３２における複製対象領域のエントリを、複製ボリューム管理テーブル２３３にコピーすることで、複製ボリュームＶ２を即座に利用可能な状態にすることができる。
【００８７】
次に、複製制御部２２３は、複製ボリューム管理テーブル２３３に登録されたコードに基づき、複製ボリュームＶ２において同じデータが格納されたオフセットを判定する（ステップＳ２２）。図１１の例では、オフセット＃０００１，＃０００２に同じデータが格納されていると判定されたものとする。複製制御部２２３は、同じデータが格納されているオフセット＃０００１，＃０００２に対して同じＳＤＰブロックを割り当てることで、重複排除を行う。
【００８８】
複製制御部２２３は、それぞれ異なるデータが格納されたオフセット＃００００，＃０００１，＃０００４に割り当てられたＴＰＰブロックから、ＲＡＩＤ制御部２２１を通じてデータを読み出し、読み出したデータを可逆圧縮方式で圧縮する（ステップＳ２３）。複製制御部２２３は、オフセット＃００００，＃０００１，＃０００４のそれぞれについて、圧縮後のデータの容量分の物理記憶領域（ＳＤＰブロック）を、フリー領域から獲得する。そして、複製制御部２２３は、獲得した物理記憶領域の位置情報を、複製ボリューム管理テーブル２３３におけるオフセット＃００００，＃０００１，＃０００４のエントリに登録して、物理記憶領域の割り当てを変更する（ステップＳ２４）。このとき、複製制御部２２３は、オフセット＃０００２のエントリには、オフセット＃０００１と同じ位置情報を登録する。
【００８９】
複製制御部２２３は、さらに、プール領域管理テーブル２３１を更新することで、獲得した物理記憶領域をフリー領域から除外するとともに、ＳＤＰ領域Ａ３に追加する。これにより、獲得された物理記憶領域は、ＳＤＰブロックとして取り扱われる。
【００９０】
複製制御部２２３は、上記の複製ボリューム管理テーブル２３３への登録処理を行うとともに、獲得したＳＤＰブロックの位置情報と、各ＳＤＰブロックに書き込むべき圧縮後のデータとをＲＡＩＤ制御部２２１に引き渡して、書き込みを要求する。これにより、複製ボリュームＶ２のオフセット＃００００〜＃０００２，＃０００４にそれぞれ割り当てられたＳＤＰブロックに対して、圧縮後のデータが書き込まれる（ステップＳ２５）。
【００９１】
以上の処理により、複製ボリュームＶ２の生成処理が完了する。複製ボリュームＶ２は仮想ボリュームとして生成され、複製ボリュームＶ２には、専用の領域ではなく、業務ボリュームと共通のプール領域から物理記憶領域が割り当てられるので、ＤＥ３００内のＨＤＤが提供する記憶領域を効率的に使用することができる。
【００９２】
また、最終的に、複製ボリュームＶ２に対しては、異なるデータが格納されたオフセット数分のＳＤＰブロックが割り当てられ、しかも、ＳＤＰブロックは、圧縮後のデータの容量分だけ確保される。このため、複製元に割り当てられていた物理記憶領域と比較して、複製ボリュームＶ２に実際に割り当てられる物理記憶領域の容量を小さくすることができる。
【００９３】
さらに、複製ボリュームＶ２に割り当てられる物理記憶領域の容量を削減できるということは、割り当てられた物理記憶領域に対するデータの格納処理の負荷を低減できることを意味する。このため、複製ボリュームＶ２の生成処理が、ホスト装置４００からの要求に応じた業務ボリュームＶ１に対するＩ／Ｏ処理に与える影響を少なくすることができ、Ｉ／Ｏ処理の性能劣化を抑制できる。
【００９４】
また、ホスト装置４００から複製要求を受け付けた初期段階では、テーブルのコピーによって複製ボリュームＶ２が論理的に生成され、その後に、複製ボリュームＶ２専用の物理記憶領域（すなわちＳＤＰブロック）に対する実体的なデータ転送が行われる。このような手順により、ＳＤＰブロックに対するデータの格納処理を、業務ボリュームＶ１へのＩ／Ｏ要求の頻度が低い時間帯など、複製要求受け付け後の任意のタイミングで実行することもできる。この場合、業務ボリュームＶ１に対するＩ／Ｏ処理の性能劣化をさらに抑制できる。
【００９５】
ところで、図１０に説明したように、ホストＩ／Ｏ制御部２２２は、ホスト装置４００からの要求に応じてＴＰＰブロックへのデータの書き込み処理と、書き込んだデータに基づくコードの算出処理とを、非同期に実行する。このため、例えば、業務ボリュームにおけるあるオフセットに格納されたデータに基づくコードの算出処理が完了していない状態で、同じオフセットに対して新たなデータの書き込みが要求されるケースがあり得る。例えば、業務ボリューム内の同じ領域に対してデータの書き込みが連続して要求された場合などに、上記のケースが発生し得る。このような場合に、コードの算出処理が完了するまで新たなデータの書き込みを待つように制御すると、書き込み処理に要する時間が長くなってしまう。そこで、次の図１２に示すような処理を実行することで、書き込み処理時間が長くならないようにする。
【００９６】
図１２は、コード算出が未完了の状態で新たに書き込みが要求された場合の処理例を示す図である。
図１２では、業務ボリュームＶ１内のオフセット＃０００１に格納されたデータに基づくコードの算出処理中に、ホスト装置４００からオフセット＃０００１に対して新たなデータの書き込みが要求された場合を想定する（ステップＳ３１）。ホストＩ／Ｏ制御部２２２は、業務ボリューム管理テーブル２３２におけるオフセット＃０００１のエントリにおいて、ステータスが「算出中」であることから、オフセット＃０００１についてコードの算出処理が完了していないことを認識する。
【００９７】
この場合、ホストＩ／Ｏ制御部２２２は、業務ボリュームＶ１のオフセット＃０００１に割り当てられていたＴＰＰブロックＢ１を切り離し（ステップＳ３２）、フリー領域から新たなＴＰＰブロックＢ２を獲得して、オフセット＃０００１に割り当てる（ステップＳ３３）。具体的には、ホストＩ／Ｏ制御部２２２は、新たなＴＰＰブロックＢ１の位置情報を、業務ボリューム管理テーブル２３２におけるオフセット＃０００１のエントリに上書き登録する。このとき、ホストＩ／Ｏ制御部２２２は、複製ボリューム管理テーブル２３３におけるオフセット＃０００１のエントリにおいて、フリーフラグを「１」に更新することで、ＴＰＰブロックＢ１が退避中であることを記録する。ホストＩ／Ｏ制御部２２２は、新たに割り当てたＴＰＰブロックＢ２に対して、ホスト装置４００から受信したデータを書き込む。これにより、コード算出処理が完了するのを待つことなく、書き込み処理を高速に実行できる。
【００９８】
一方、複製制御部２２３は、複製ボリュームＶ２のオフセット＃０００１に関して、コードの算出が完了した後、算出されたコードに基づく重複排除を行って、ＳＤＰブロックの割り当てを行う。上記のステップＳ３２の時点で、ＴＰＰブロックＢ１は業務ボリュームＶ１からは切り離されるものの、複製ボリューム管理テーブル２３３には、オフセット＃０００１のエントリにＴＰＰブロックＢ１の位置情報が登録されている。このため、複製制御部２２３は、図１１のステップＳ２２〜Ｓ２５に示した手順により、複製ボリュームＶ２のオフセット＃０００１にＳＤＰブロックを割り当て、ＴＰＰブロックＢ１に格納されたデータを圧縮して、圧縮後のデータをＳＤＰブロックに格納することができる（ステップＳ３４）。
【００９９】
また、複製制御部２２３は、複製ボリューム管理テーブル２３３におけるオフセット＃０００１に対応するフリーフラグが「１」であることから、ＴＰＰブロックＢ１が退避中であることを認識する。この場合、業務ボリュームＶ１のオフセット＃０００１には新たなＴＰＰブロックＢ２が割り当てられており、ＴＰＰブロックＢ１のデータは不要になる。このため、複製制御部２２３は、プール領域管理テーブル２３１を更新することで、ＴＰＰブロックＢ１をＴＰＰ領域Ａ２から解放してフリー領域に戻す（ステップＳ３５）。
【０１００】
以上の処理により、業務ボリュームＶ１のオフセット＃０００１については、旧データと新規データの両方が一時的にＴＰＰ領域Ａ２に保持されるが、複製制御部２２３によるＴＰＰ領域Ａ２からのデータ読み出しが終了すると、ＴＰＰ領域Ａ２はフリー領域Ａ１に戻され、再利用可能な状態とされる。従って、ホスト装置４００からの要求に応じた書き込み処理速度の低下を抑制しつつ、必要とされる物理記憶領域の容量も削減することができる。
【０１０１】
次に、図１０〜図１２に示した処理を、フローチャートを用いて説明する。まず、図１３，図１４は、ホスト装置からの要求に応じた業務ボリュームに対するデータ書き込み処理手順の例を示すフローチャートである。
【０１０２】
［ステップＳ１０１］ホストＩ／Ｏ制御部２２２は、ホスト装置４００から、業務ボリュームへの書き込み要求を受け付ける。
［ステップＳ１０２］ホストＩ／Ｏ制御部２２２は、業務ボリューム管理テーブル２３２のエントリのうち、書き込みを要求された業務ボリュームの領域に含まれるエントリを１つ選択する。
【０１０３】
［ステップＳ１０３］ホストＩ／Ｏ制御部２２２は、選択したエントリが複製対象領域として指定されているかを判定する。ホストＩ／Ｏ制御部２２２は、選択したエントリに登録されたＴＰＰブロックの位置情報（ボリューム番号およびＬＢＡ）が、複製範囲設定テーブル２３４に登録されている場合に、複製対象領域として指定されていると判定する。
【０１０４】
なお、選択したエントリに登録されたＴＰＰブロックの位置情報が複製範囲設定テーブル２３４に登録されている場合、そのエントリを含む領域についての複製ボリュームへの複製処理が実行中であり、なおかつ、そのエントリに対応するオフセットにはすでにデータが格納されていることになる。
【０１０５】
ホストＩ／Ｏ制御部２２２は、複製対象領域として指定されていると判定した場合（Ｓ１０３：Ｙｅｓ）、図１４のステップＳ１０７の処理を実行する。一方、ホストＩ／Ｏ制御部２２２は、複製対象領域として指定されていないと判定した場合（Ｓ１０３：Ｎｏ）、ステップＳ１０４の処理を実行する。
【０１０６】
［ステップＳ１０４］ホストＩ／Ｏ制御部２２２は、選択したエントリにすでにデータが格納されているか（すなわち、業務ボリューム内の未使用領域に対する新規の書き込みであるか）を判定する。ホストＩ／Ｏ制御部２２２は、すでにデータが格納されている場合（Ｓ１０４：Ｙｅｓ）、ステップＳ１１２の処理を実行する。一方、ホストＩ／Ｏ制御部２２２は、データが格納されていない場合（Ｓ１０４：Ｎｏ）、ステップＳ１０５の処理を実行する。
【０１０７】
［ステップＳ１０５］ホストＩ／Ｏ制御部２２２は、フリー領域から一定容量の物理記憶領域をＴＰＰブロックとして獲得する。このとき、ホストＩ／Ｏ制御部２２２は、獲得した物理記憶領域をフリー領域から除外してＴＰＰ領域に追加するように、プール領域管理テーブル２３１を更新する。
【０１０８】
［ステップＳ１０６］ホストＩ／Ｏ制御部２２２は、獲得したＴＰＰ領域の位置情報（ボリューム番号、ＬＢＡおよびブロック数）を、業務ボリューム管理テーブル２３２における選択したエントリに登録する。これにより、選択したエントリに対応するオフセットに対して、獲得したＴＰＰブロックが割り当てられる。
【０１０９】
［ステップＳ１０７］選択したエントリが複製対象領域として指定されている場合（Ｓ１０３：Ｙｅｓ）、ホストＩ／Ｏ制御部２２２は、業務ボリューム管理テーブル２３２における選択したエントリのステータスを確認する。
【０１１０】
［ステップＳ１０８］ホストＩ／Ｏ制御部２２２は、ステータスが「算出中」であった場合（Ｓ１０８：Ｙｅｓ）、ステップＳ１１１の処理を実行する一方、ステータスが「ＴＰＰ」であった場合（Ｓ１０８：Ｎｏ）、ステップＳ１０９の処理を実行する。
【０１１１】
［ステップＳ１０９］ホストＩ／Ｏ制御部２２２は、複製ボリューム管理テーブル２３３のエントリのうち、ステップＳ１０２で選択したエントリと同じオフセット番号が登録されたエントリを参照し、参照先のエントリのステータスを確認する。
【０１１２】
［ステップＳ１１０］ホストＩ／Ｏ制御部２２２は、ステータスが「ＴＰＰ」である場合（Ｓ１１０：Ｙｅｓ）、ステップＳ１１１の処理を実行する。一方、ホストＩ／Ｏ制御部２２２は、ステータスが「ＴＰＰ」でない場合（Ｓ１１０：Ｎｏ。具体的には、ステータスが「ＳＤＰ」である場合。）、図１３のステップＳ１１２の処理を実行する。
【０１１３】
［ステップＳ１１１］ホストＩ／Ｏ制御部２２２は、複製ボリューム管理テーブル２３３のエントリのうち、ステップＳ１０２で選択したエントリと同じオフセット番号が登録されたエントリを参照し、参照先のエントリにおけるフリーフラグを「１」に更新する。この後、図１３のステップＳ１０５の処理が実行される。
【０１１４】
［ステップＳ１１２］ホストＩ／Ｏ制御部２２２は、ステップＳ１０２で選択したエントリに登録されたＴＰＰブロックの位置情報と、このＴＰＰブロックに書き込むべきデータとをＲＡＩＤ制御部２２１に引き渡して、書き込みを依頼する。これにより、選択したエントリに割り当てられているＴＰＰブロックに、書き込みを要求されたデータが格納される。
【０１１５】
例えば、ステップＳ１０４で「Ｙｅｓ」と判定された場合、またはステップＳ１１０で「Ｎｏ」と判定された場合、ステップＳ１１２では、ＴＰＰブロックにすでに格納されていたデータに対して、新たなデータが上書きされる。また、ステップＳ１０６の次にステップＳ１１２が実行された場合、ステップＳ１１２では、新たに割り当てられたＴＰＰブロックに対してデータが格納される。
【０１１６】
また、ホストＩ／Ｏ制御部２２２は、選択したエントリにおけるステータスを「算出中」に更新する。
［ステップＳ１１３］ホストＩ／Ｏ制御部２２２は、書き込みを要求された全データの書き込み処理が完了したかを判定する。ホストＩ／Ｏ制御部２２２は、業務ボリューム管理テーブル２３２のエントリのうち、書き込みを要求された業務ボリュームの領域に含まれるすべてのエントリを選択済みである場合に、書き込み処理が完了したと判定する。
【０１１７】
ホストＩ／Ｏ制御部２２２は、書き込み処理が完了していない場合（Ｓ１１３：Ｎｏ）、ステップＳ１０２に戻り、業務ボリューム管理テーブル２３２から他のエントリを選択して処理を続行する。一方、ホストＩ／Ｏ制御部２２２は、書き込み処理が完了した場合（Ｓ１１３：Ｙｅｓ）、ステップＳ１１４の処理を実行する。
【０１１８】
［ステップＳ１１４］ホストＩ／Ｏ制御部２２２は、ホスト装置４００に対して応答し、要求された書き込み処理が完了したことを通知する。
以上の図１３，図１４の処理において、ステップＳ１０８で「Ｙｅｓ」と判定される場合とは、ステップＳ１０２で選択したエントリに対応するＴＰＰブロックに格納された旧データについて、コードの算出処理が完了していない場合である。この場合、選択したエントリに対して新たなＴＰＰブロックが割り当てられる（ステップＳ１０５，Ｓ１０６）。その一方、複製ボリューム管理テーブル２３３における対応エントリのフリーフラグが「１」に更新されることで（ステップＳ１１１）、元のＴＰＰブロックが退避中であることが記録される。
【０１１９】
また、ステップＳ１１０で「Ｙｅｓ」と判定される場合とは、ステップＳ１０２で選択したエントリに対応するＴＰＰブロックに格納された旧データが、複製ボリュームに割り当てられるＳＤＰブロックに格納されていない場合である。この場合も、上記と同様に、選択したエントリに対して新たなＴＰＰブロックが割り当てられる（ステップＳ１０５，Ｓ１０６）。その一方、複製ボリューム管理テーブル２３３における対応エントリのフリーフラグが「１」に更新されることで（ステップＳ１１１）、元のＴＰＰブロックが退避中であることが記録される。
【０１２０】
ここで、選択したエントリに対応するＴＰＰブロックに格納された旧データに基づくコード算出処理が完了していない場合にも、複製ボリューム管理テーブル２３３における対応するエントリ内のステータスは「ＴＰＰ」となっている。しかしながら、旧データに基づくコード算出処理が完了していない場合には、ステップＳ１０９で複製ボリューム管理テーブル２３３を参照する前に、ステップＳ１０７で業務ボリューム管理テーブル２３２の登録情報を読み出すだけで、ステップＳ１１１の処理が実行される。このため、複製ボリューム管理テーブル２３３の参照回数が減少し、処理負荷が軽減される。
【０１２１】
また、ステップＳ１０８またはステップＳ１１０で「Ｙｅｓ」と判定された場合には、元のＴＰＰブロックが退避されるとともに、新たなＴＰＰブロックが割り当てられる。ここで、図１１のステップＳ２１で説明したテーブルコピー処理により、ＴＰＰブロックを退避させようとする時点では、退避させるＴＰＰブロックの位置情報が複製ボリューム管理テーブル２３３の対応エントリにすでに登録されている。このため、ＴＰＰブロックを退避させる処理としては、フリーフラグを「１」に更新して新たなＴＰＰブロックを割り当てるだけで済み、退避させるＴＰＰブロックの位置情報をいずれかのテーブルに記録しておくといった、位置情報の読み書き処理が必要にならない。従って、同じ位置に対してホスト装置４００から連続して書き込みが要求されるような場合でも、単純な処理手順で、書き込み処理速度が低下しないようにすることができる。
【０１２２】
図１５は、コード算出処理手順の例を示すフローチャートである。ホストＩ／Ｏ制御部２２２は、図１３，図１４に示した処理と、図１５に示す処理とを、非同期に実行する。
［ステップＳ１３１］ホストＩ／Ｏ制御部２２２は、業務ボリューム管理テーブル２３２の各エントリを監視し、コードが算出されていないオフセットを検出した場合（Ｓ１３１：Ｙｅｓ）に、ステップＳ１３２の処理を実行する。
【０１２３】
［ステップＳ１３２］ホストＩ／Ｏ制御部２２２は、コードが算出されていないオフセットに対応付けられた位置情報を基に、その位置情報が示すＴＰＰブロックからデータを読み出し、コードを算出する。ホストＩ／Ｏ制御部２２２は、算出したコードを、オフセットに対応するエントリに登録する。
【０１２４】
［ステップＳ１３３］ホストＩ／Ｏ制御部２２２は、コードを登録したエントリにおけるステータスを、「算出中」から「ＴＰＰ」に変更する。この後、ステップＳ１３１の処理に戻る。
【０１２５】
図１６，図１７は、複製ボリュームの生成処理手順の例を示すフローチャートである。
［ステップＳ１５１］ホストＩ／Ｏ制御部２２２は、ホスト装置４００から複製要求を受け付ける。このとき、ホストＩ／Ｏ制御部２２２は、ホスト装置４００から、業務ボリュームにおける複製対象範囲の指定を受ける。ホストＩ／Ｏ制御部２２２は、複製制御部２２３に対して指定された複製対象範囲を通知して、複製ボリュームの生成処理を開始させる。
【０１２６】
［ステップＳ１５２］複製制御部２２３は、業務ボリューム管理テーブル２３２を参照し、指定された複製対象範囲に割り当てられた物理記憶領域を示す位置情報を、複製範囲設定テーブル２３４に登録する。
【０１２７】
［ステップＳ１５３］複製制御部２２３は、業務ボリューム管理テーブル２３２のエントリのうち、複製対象範囲に含まれるエントリの情報を、複製ボリューム管理テーブル２３３にコピーする。これにより、複製ボリュームのオフセットのうちデータが格納されたオフセットに対してＴＰＰブロックが一時的に割り当てられ、複製ボリュームが論理的に生成される。
【０１２８】
なお、複製制御部２２３は、業務ボリューム管理テーブル２３２にコピーしたエントリ内のフリーフラグには「０」を設定する。
［ステップＳ１５４］複製制御部２２３は、変数Ｉｎｄｅｘを初期値「０」に設定する。このＩｎｄｅｘは、複製ボリューム管理テーブル２３３のエントリを、初期値「０」で先頭から順に付与した番号として指定するものである。
【０１２９】
［ステップＳ１５５］複製制御部２２３は、Ｉｎｄｅｘが指示するエントリのステータスを参照する。複製制御部２２３は、ステータスが「算出中」の場合は、ステップＳ１５６の処理を実行する。また、複製制御部２２３は、ステータスが「ＴＰＰ」の場合は、ステップＳ１５７の処理を実行する。また、複製制御部２２３は、ステータスに登録されていない場合（すなわち、該当オフセットにデータが登録されていない場合）は、図１７のステップＳ１６８の処理を実行する。
【０１３０】
［ステップＳ１５６］ステータスが「算出中」である場合とは、業務ボリュームにおける対応するオフセットに格納されたデータに基づくコード算出処理が、完了していない場合である。この場合、複製制御部２２３は、コード算出処理が完了するのを待つ。複製制御部２２３は、Ｉｎｄｅｘが指示するエントリのステータスが「算出中」から「ＴＰＰ」に変化すると、ステップＳ１５７の処理を実行する。
【０１３１】
［ステップＳ１５７］複製制御部２２３は、Ｉｎｄｅｘが指示するエントリに登録されたコードと、このエントリより先頭側の各エントリに登録されたコードとを比較する。
［ステップＳ１５８］複製制御部２２３は、データが重複している他のオフセットがあるかを判定する。複製制御部２２３は、ステップＳ１５７において、同一のコードが登録されたエントリを検出した場合に、データが重複する他のオフセットがあると判定する。複製制御部２２３は、データが重複する他のオフセットがない場合（Ｓ１５８：Ｎｏ）、ステップＳ１５９の処理を実行する一方、データが重複する他のオフセットがある場合（Ｓ１５８：Ｙｅｓ）、ステップＳ１６２の処理を実行する。
【０１３２】
［ステップＳ１５９］データが重複する他のオフセットがないと判定した場合（Ｓ１５８：Ｎｏ）、新たなＳＤＰオフセットの獲得と、獲得したＳＤＰオフセットへの書き込みとが必要になる。この場合、複製制御部２２３は、まず、Ｉｎｄｅｘが指示するエントリに登録された位置情報をＲＡＩＤ制御部２２１に通知して、位置情報が示すＴＰＰブロックからのデータの読み出しを依頼する。複製制御部２２３は、ＲＡＩＤ制御部２２１によってＴＰＰブロックから読み出されたデータを、可逆圧縮方式で圧縮する。
【０１３３】
なお、複製制御部２２３は、データ読み出し元のＴＰＰブロックを示す位置情報を、ＲＡＭ２１２に一時的に記録しておく。
［ステップＳ１６０］複製制御部２２３は、フリー領域から、圧縮後のデータの容量分の物理記憶領域をＳＤＰブロックとして獲得する。このとき、複製制御部２２３は、獲得した物理記憶領域をフリー領域から除外してＳＤＰ領域に追加するように、プール領域管理テーブル２３１を更新する。
【０１３４】
［ステップＳ１６１］複製制御部２２３は、獲得したＳＤＰブロックの位置情報（ボリューム番号、ＬＢＡおよびブロック数）と、圧縮後のデータとをＲＡＩＤ制御部２２１に引き渡して、書き込みを依頼する。これにより、獲得したＳＤＰブロックに対して、圧縮後のデータが格納される。この後、図１７のステップＳ１６３が実行される。
【０１３５】
［ステップＳ１６２］複製制御部２２３は、ステップＳ１５７でコードが一致した他のエントリに登録された位置情報（ボリューム番号、ＬＢＡおよびブロック数）を取得する。
【０１３６】
［ステップＳ１６３］複製制御部２２３は、ステップＳ１６０で獲得したＳＤＰブロックの位置情報、または、ステップＳ１６２で取得した位置情報を、Ｉｎｄｅｘが指示するエントリに登録する。
【０１３７】
［ステップＳ１６４］複製制御部２２３は、Ｉｎｄｅｘが指示するエントリのフリーフラグを参照する。複製制御部２２３は、フリーフラグが「１」の場合（Ｓ１６４：Ｙｅｓ）、ステップＳ１６５の処理を実行する一方、フリーフラグが「０」の場合（Ｓ１６４：Ｎｏ）、ステップＳ１６７の処理を実行する。
【０１３８】
［ステップＳ１６５］複製制御部２２３は、ステップＳ１５９においてＲＡＭ２１２に一時記録しておいた位置情報が示すＴＰＰブロックを解放する。複製制御部２２３は、ＴＰＰブロックをＴＰＰ領域から除外してフリー領域に追加するように、プール領域管理テーブル２３１を更新する。これにより、退避中のＴＰＰブロックは、他のＴＰＰブロックまたはＳＤＰブロックとして再利用可能な状態になる。
【０１３９】
［ステップＳ１６６］複製制御部２２３は、Ｉｎｄｅｘが指示するエントリのフリーフラグを、「１」から「０」に更新する。
［ステップＳ１６７］複製制御部２２３は、Ｉｎｄｅｘが指示するエントリのステータスを、「ＴＰＰ」から「ＳＤＰ」に更新する。ステップＳ１６３，Ｓ１６７の処理により、エントリに対応するオフセットに対して割り当てられる物理記憶領域が、ＴＰＰブロックからＳＤＰブロックに変更される。
【０１４０】
［ステップＳ１６８］複製制御部２２３は、Ｉｎｄｅｘの値を「１」だけインクリメントする。
［ステップＳ１６９］複製制御部２２３は、複製ボリューム管理テーブル２３３に、インクリメントされたＩｎｄｅｘによって指示されるエントリがあるかを判定する。複製制御部２２３は、エントリが存在する場合（Ｓ１６９：Ｙｅｓ）、ステップＳ１５５に戻って、次のエントリを処理対象として処理を続行する。一方、エントリが存在しない場合（Ｓ１６９：Ｎｏ）、複製ボリュームの生成処理が完了する。
【０１４１】
以上の処理により、複製ボリュームの物理記憶領域として、必要最小限の容量分のＳＤＰブロックが割り当てられる。また、生成された複製ボリュームにおいては、複製元の業務ボリュームとは異なる物理記憶領域にデータが格納され、しかも、それらの物理記憶領域には、複製元の領域に格納された全データを完全に復元可能な状態で、データが格納される。このため、例えば、複製元の業務ボリュームに割り当てられた物理記憶領域の一部が破損するなどして、複製元のデータにアクセスできなくなった場合には、複製要求時点での複製元の業務ボリュームのデータを複製ボリュームから完全にリストアすることができる。
【０１４２】
ここで、図１８は、複製ボリュームを用いたリストア処理の例を示す図である。
図１８では、業務ボリュームＶ１に割り当てられたＴＰＰブロックの一部にトラブルが発生して、業務ボリュームＶ１におけるオフセット＃００００〜＃０００５の領域へのアクセスが不可能になった場合を想定する（ステップＳ４１）。なお、上記の図１６，図１７の処理により、業務ボリュームＶ１のオフセット＃００００〜＃０００５を複製対象範囲として、複製ボリュームが生成されているものとする。
【０１４３】
業務ボリュームＶ１におけるオフセット＃００００〜＃０００５のリストア処理は、次のように行われる。複製制御部２２３は、複製ボリューム管理テーブル２３３のエントリを、業務ボリューム管理テーブル２３２における同一オフセットのエントリに対して、上書きコピーする（ステップＳ４２）。
【０１４４】
これにより、業務ボリュームＶ１におけるデータが格納されていたオフセット（図１８ではオフセット＃００００〜＃０００２，＃０００４）に対して、ＳＤＰブロックが割り当てられ、業務ボリュームＶ１におけるオフセット＃００００〜＃０００５が論理的にリストアされる。このとき、ホストＩ／Ｏ制御部２２２は、ホスト装置４００から、業務ボリュームＶ１におけるオフセット＃００００〜＃０００５からの読み出しが要求されると、これらのオフセット＃００００〜＃０００５に割り当てられたＳＤＰブロックからデータを読み出して伸張することで、ホスト装置４００に対して応答することができる（ステップＳ４３）。
【０１４５】
このように、テーブルに登録されたデータをコピーするだけで、業務ボリュームをごく短時間でリストアすることができ、ホスト装置４００からの要求に応じたＩ／Ｏ処理を安定的に継続できるようになる。
【０１４６】
なお、当然ながら、アクセス不能になった業務ボリュームＶ１に対して新たにＴＰＰブロックを割り当て、割り当てたＴＰＰブロックに対して、複製ボリュームのＳＤＰブロックから読み出して伸張したデータを格納することによって、実体的なデータ移動を伴うリストアをすることも可能である。
【０１４７】
〔第３の実施の形態〕
上記の第２の実施の形態では、複製ボリュームに割り当てる物理記憶領域の容量を、重複排除およびデータ圧縮によって削減した。しかしながら、複製元の業務ボリュームについても容量を削減することができれば、プール領域におけるフリー領域をより多く確保でき、ストレージシステム全体でのデータ記憶容量を増加させることができる。
【０１４８】
業務ボリュームに保存されたデータの中には、アクセス頻度が極端に低いデータも存在する。そこで、以下の第３の実施の形態では、業務ボリュームに保存されたデータのうち、一定期間以上アクセスされていないデータについては、複製ボリュームと同様に重複排除およびデータ圧縮を行う。これにより、ホスト装置４００からの要求に応じたＩ／Ｏ処理速度にほとんど影響を与えることなく、重複排除およびデータ圧縮の各処理を行うことができ、その結果、業務ボリュームに割り当てる物理記憶領域の容量を削減できる。
【０１４９】
なお、第３の実施の形態に係るストレージシステムのハードウェア構成や、処理機能の構成については、第２の実施の形態と同様である。そこで、以下、第３の実施の形態におけるＣＭの処理を、図４の符号を用いて説明するとともに、主に、第２の実施の形態と異なる処理や構成要素についてのみ説明する。
【０１５０】
図１９は、第３の実施の形態における業務ボリューム管理テーブルに登録される情報の例を示す図である。
業務ボリューム管理テーブル２３２には、業務ボリュームにおけるオフセットごとのエントリに対して、図７に示した項目に加えて、重複フラグおよびアクセス日時が登録される。重複フラグは、他のオフセットのデータと重複しているか否かを示すフラグである。業務ボリュームに対する重複排除処理が施されることで、他のオフセットのデータと重複していると判定された場合に、重複フラグは「１」とされ、その他の場合には重複フラグは「０」とされる。また、重複フラグの初期値も「０」である。アクセス日時は、該当オフセットに対してＲＡＩＤ制御部２２１が書き込みを行ったか、あるいは該当オフセットのデータの読み出しを行った、最終の日時を示す。
【０１５１】
ＲＡＩＤ制御部２２１は、業務ボリュームに対するデータの書き込み、または業務ボリュームからのデータの読み出しを行うごとに、現在の日時をオフセットごとに業務ボリューム管理テーブル２３２の該当エントリに上書き登録する。また、ＲＡＩＤ制御部２２１は、オフセットに対してデータを書き込んだとき、そのオフセットに対応付けられた重複フラグが「１」である場合には、その重複フラグを「０」に更新する。
【０１５２】
図１９には、重複排除およびデータ圧縮による容量削減処理の実行前と実行後のそれぞれにおける業務ボリューム管理テーブル２３２の状態を示している。例えば、業務ボリュームのオフセット＃００００〜＃０００３の状態が、図１９の上段のようになったときに、オフセット＃０００１についての最終アクセス日時から所定期間が経過したものとする。ホストＩ／Ｏ制御部２２２は、オフセット＃０００１に対応付けられたコードと同一のコードに対応付けられたオフセットを検出する。図１９の例では、同一のコードが対応付けられたオフセットとして、オフセット＃０００２が検出される。
【０１５３】
ホストＩ／Ｏ制御部２２２は、オフセット＃０００１に割り当てられたＴＰＰブロックからデータを読み出して圧縮し、圧縮後のデータの容量分のＴＰＰブロックをフリー領域から新たに獲得する。ホストＩ／Ｏ制御部２２２は、獲得したＴＰＰブロックに圧縮後のデータを格納するとともに、そのＴＰＰブロックの位置情報（ボリューム番号、ＬＢＡおよびブロック数）を、オフセット＃０００１，＃０００２に対応する各エントリに上書き登録する。さらに、ホストＩ／Ｏ制御部２２２は、オフセット＃０００１，＃０００２の各エントリにおける重複フラグを、「０」から「１」に更新する。図１９の下段には、以上の更新処理が施された後の業務ボリューム管理テーブル２３２を示す。
【０１５４】
図２０は、業務ボリュームの容量削減処理手順の例を示すフローチャートである。この図２０の処理は、例えば、一定間隔で実行される。例えば、図２０の処理は、ホスト装置４００からのＩ／Ｏ要求の頻度が少ない期間に実行されることが望ましい。
【０１５５】
［ステップＳ１８１］ホストＩ／Ｏ制御部２２２は、業務ボリューム管理テーブル２３２の各エントリにおけるアクセス日時を参照し、登録されたアクセス日時から、あらかじめ設定された期間（例えば３年）だけ経過したオフセットを検出する。
【０１５６】
［ステップＳ１８２］ホストＩ／Ｏ制御部２２２は、ステップＳ１８１で上限に合致するオフセットを検出した場合（Ｓ１８１：Ｙｅｓ）、検出したすべてのオフセットの番号をＲＡＭ２１２に記録して、ステップＳ１８３の処理を実行する。一方、ホストＩ／Ｏ制御部２２２は、ステップＳ１８１で条件に合致するオフセットを検出できなかった場合には、容量削減処理を終了する。
【０１５７】
［ステップＳ１８３］ホストＩ／Ｏ制御部２２２は、ステップＳ１８２でＲＡＭ２１２に記録したオフセットに対応するエントリのうち、同じ値のコードが登録されたエントリをエントリ群として抽出する。なお、この処理では、互いに異なる値のコードが登録された複数のエントリ群が抽出される場合もある。ホストＩ／Ｏ制御部２２２は、複数のエントリ群が抽出された場合には、それらのうちの１つのエントリ群を選択して、以下の処理を実行する。
【０１５８】
［ステップＳ１８４］ホストＩ／Ｏ制御部２２２は、ステップＳ１８３でエントリ群が抽出された場合（Ｓ１８４：Ｙｅｓ）、ステップＳ１８５の処理を実行する。一方、ホストＩ／Ｏ制御部２２２は、ステップＳ１８３でエントリ群が抽出されなかった場合（Ｓ１８４：Ｎｏ）、容量削減処理を終了する。
【０１５９】
［ステップＳ１８５］ホストＩ／Ｏ制御部２２２は、ステップＳ１８３で選択したエントリ群に、重複フラグが「１」であるエントリがあるかを判定する。ホストＩ／Ｏ制御部２２２は、重複フラグが「１」であるエントリがある場合（Ｓ１８５：Ｙｅｓ）、ステップＳ１９０の処理を実行する一方、重複フラグが「１」であるエントリがない場合（Ｓ１８５：Ｎｏ）、ステップＳ１８６の処理を実行する。
【０１６０】
［ステップＳ１８６］ホストＩ／Ｏ制御部２２２は、ステップＳ１８３で選択したエントリ群からエントリ（例えば、オフセット番号が最も小さいエントリ）を１つ選択する。ホストＩ／Ｏ制御部２２２は、選択したエントリに登録された位置情報をＲＡＩＤ制御部２２１に通知して、位置情報が示すＴＰＰブロックからのデータ読み出しを依頼する。ホストＩ／Ｏ制御部２２２は、ＲＡＩＤ制御部２２１によってＴＰＰブロックから読み出されたデータを、可逆圧縮方式で圧縮する。
【０１６１】
［ステップＳ１８７］ホストＩ／Ｏ制御部２２２は、フリー領域から、圧縮後のデータの容量分の物理記憶領域をＴＰＰブロックとして獲得する。このとき、ホストＩ／Ｏ制御部２２２は、獲得した物理記憶領域をフリー領域から除外してＴＰＰ領域に追加するように、プール領域管理テーブル２３１を更新する。
【０１６２】
［ステップＳ１８８］ホストＩ／Ｏ制御部２２２は、獲得したＴＰＰブロックの位置情報（ボリューム番号、ＬＢＡおよびブロック数）と、圧縮後のデータとをＲＡＩＤ制御部２２１に引き渡して、書き込みを依頼する。これにより、新たに獲得したＴＰＰブロックに対して、圧縮後のデータが格納される。
【０１６３】
［ステップＳ１８９］ホストＩ／Ｏ制御部２２２は、ステップＳ１８３で選択したエントリ群内の全エントリに登録された、ＴＰＰブロックの位置情報を、ＲＡＭ２１２に一時的に記録する。そして、ホストＩ／Ｏ制御部２２２は、ステップＳ１８７で獲得したＴＰＰブロックの位置情報を、ステップＳ１８３で選択したエントリ群に含まれる全エントリに対して上書き登録する。さらに、ホストＩ／Ｏ制御部２２２は、これらのエントリの重複フラグを「０」から「１」に更新する。
【０１６４】
［ステップＳ１９０］重複フラグが「１」とされたエントリには、他のエントリと共通のＴＰＰブロックがすでに割り当てられおり、そのＴＰＰブロックには圧縮データが格納されている。このため、エントリ群の中に重複フラグが「１」のエントリが存在する場合（Ｓ１８５：Ｙｅｓ）には、新たにＴＰＰブロックを獲得する必要はなく、重複フラグが「１」のエントリに登録されたＴＰＰブロックを利用することができる。
【０１６５】
ホストＩ／Ｏ制御部２２２は、ステップＳ１８３で選択したエントリ群内のエントリのうち、重複フラグが「０」である全エントリに登録された、ＴＰＰブロックの位置情報を、ＲＡＭ２１２に一時的に記録する。ホストＩ／Ｏ制御部２２２は、エントリ群内の重複フラグが「１」であるエントリに登録された、ＴＰＰブロックの位置情報を、エントリ群内の重複フラグが「０」であるエントリに対して上書きコピーする。また、ホストＩ／Ｏ制御部２２２は、位置情報をコピーしたエントリの重複フラグを、「０」から「１」に更新する。
【０１６６】
［ステップＳ１９１］ホストＩ／Ｏ制御部２２２は、ステップＳ１８９またはステップＳ１９０でＲＡＭ２１２に一時記録しておいた位置情報が示すＴＰＰブロックを解放する。ホストＩ／Ｏ制御部２２２は、これらのＴＰＰブロックをＴＰＰ領域から除外してフリー領域に追加するように、プール領域管理テーブル２３１を更新する。これにより、同一のデータが非圧縮で格納されていたＴＰＰブロックは、他のＴＰＰブロックまたはＳＤＰブロックとして再利用可能な状態になる。
【０１６７】
この後、ステップＳ１８３に戻り、他のエントリ群が抽出され、エントリ群が抽出された場合には（Ｓ１８４：Ｙｅｓ）、抽出されたエントリ群に対してステップＳ１８５以降の処理が実行される。
【０１６８】
以上の図２０の処理により、業務ボリュームのオフセットのうち、一定期間以上アクセスされていないオフセットに対して、圧縮後のデータの容量分の共通のＴＰＰブロックが割り当てられる。これにより、業務ボリュームに割り当てられる物理記憶領域の容量が小さくなる。
【０１６９】
ここで、共通のＴＰＰブロックが割り当てられたオフセットからのデータ読み出しが要求された場合には、ＴＰＰブロックから読み出したデータを伸張する分だけ、読み出し要求に対する応答時間が長くなってしまう。しかしながら、共通のＴＰＰブロックが割り当てられたオフセットは、長期間アクセスされておらず、今後アクセスされる可能性が低い。従って、図２０の処理を実行した場合でも、ホスト装置４００からの要求に応じたＩ／Ｏ処理速度が低下する可能性は低い。すなわち、Ｉ／Ｏ処理速度をできるだけ低下させないようにしつつ、ストレージシステムにおける物理記憶領域の使用量を削減することができる。
【０１７０】
なお、業務ボリューム管理テーブル２３２に登録した重複フラグは、次の図２１に示すように、複製ボリュームの生成の際に利用することもできる。
図２１は、第３の実施の形態における、複製ボリュームの生成処理手順の例を示すフローチャートである。なお、この図２１では、図１６と同じ処理が実行される処理ステップには、同じステップ番号を付して示し、その処理内容の説明を省略する。
【０１７１】
図２１の処理では、図１６のステップＳ１５８において「Ｎｏ」と判定された場合、ステップＳ２０１の処理が実行される。
［ステップＳ２０１］複製制御部２２３は、Ｉｎｄｅｘが指示するエントリの重複フラグが「１」である場合（Ｓ２０１：Ｙｅｓ）、ステップＳ２０２の処理を実行する一方、重複フラグが「０」である場合（Ｓ２０１：Ｎｏ）、ステップＳ１５９の処理を実行する。
【０１７２】
［ステップＳ２０２］重複フラグが「１」である場合（Ｓ２０１：Ｙｅｓ）、そのエントリに割り当てられているＴＰＰブロックには、データがすでに圧縮された状態で格納されている。この場合、複製制御部２２３は、Ｉｎｄｅｘが指示するエントリに割り当てられたＴＰＰブロックと同じ容量分の物理記憶領域（すなわち、このエントリに登録されたブロック数分の物理記憶領域）を、フリー領域からＳＤＰブロックとして獲得する。このとき、複製制御部２２３は、獲得した物理記憶領域をフリー領域から除外してＳＤＰ領域に追加するように、プール領域管理テーブル２３１を更新する。
【０１７３】
［ステップＳ２０３］複製制御部２２３は、Ｉｎｄｅｘが指示するエントリに割り当てられたＴＰＰブロックに格納されたデータを、ステップＳ２０２で獲得したＳＤＰブロックにコピーするように、ＲＡＩＤ制御部２２１に要求する。これにより、ＴＰＰブロックからＳＤＰブロックに対して、圧縮されたデータが転送される。
【０１７４】
この後、図１７のステップＳ１６３が実行される。ただし、ステップＳ１６３では、複製制御部２２３は、ステップＳ１６０で獲得したＳＤＰブロックの位置情報、または、ステップＳ１６２で取得した位置情報、または、ステップＳ２０２で獲得したＳＤＰブロックの位置情報のいずれかを、Ｉｎｄｅｘが指示するエントリに登録する。
【０１７５】
以上の図２１の処理によれば、処理対象のエントリに登録された重複フラグが「１」である場合には、データの圧縮処理がスキップされるので、複製ボリュームの生成処理に要する時間を短縮することができる。
【０１７６】
以上の各実施の形態に関し、さらに以下の付記を開示する。
（付記１）  複数の記憶装置と、前記複数の記憶装置の記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御するストレージ制御装置とを備えたストレージシステムにおいて、
前記ストレージ制御装置は、
ホスト装置からの要求に応じて第１のボリュームにデータを書き込むとともに、前記第１のボリュームが分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部に登録する書き込み制御部と、
前記第１のボリュームのうち複製対象領域についての複製要求を受けると、前記複製対象領域のデータを、前記第１のボリュームとは異なる物理記憶領域によって構成される第２のボリュームに複製するとともに、前記コード記憶部に登録されたコードに基づいて前記複製対象領域の部分領域のうち同一のデータが格納されている部分領域を判定し、同一のデータが格納されている部分領域に対応する前記第２のボリュームの部分領域に対しては同一の物理記憶領域を割り当てる複製制御部と、
を有することを特徴とするストレージシステム。
【０１７７】
（付記２）  前記書き込み制御部は、前記ホスト装置からの要求に応じて前記第１のボリュームにデータを書き込む処理と、書き込んだデータに応じたコードを部分領域ごとに生成し、生成したコードを部分領域に対応付けて前記コード記憶部に登録する処理とを、非同期に実行することを特徴とする付記１記載のストレージシステム。
【０１７８】
（付記３）  前記複製制御部は、前記複製対象領域の部分領域のうちデータが格納されている部分領域のそれぞれに対して、前記複数の記憶装置における未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記複製対象領域内の対応する部分領域に格納されたデータをコピーすることで、前記第２のボリュームを仮想ボリュームとして生成することを特徴とする付記１または２記載のストレージシステム。
【０１７９】
（付記４）  前記複製制御部は、前記複製対象領域についての複製要求を受けたとき、前記複製対象領域の部分領域のうちデータが格納されている部分領域に割り当てられた物理記憶領域を、前記第２のボリューム内の対応する部分領域に割り当てた後、前記第２のボリュームの各部分領域に割り当てた物理記憶領域を前記未使用領域から割り当てた物理記憶領域に変更し、変更後の物理記憶領域に対して変更前の物理記憶領域に格納されたデータをコピーすることを特徴とする付記３記載のストレージシステム。
【０１８０】
（付記５）  前記書き込み制御部は、
前記ホスト装置からデータの書き込みを要求された部分領域に対して、前記未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して書き込みを要求されたデータを格納することで、前記第１のボリュームを仮想ボリュームとして生成するとともに、
前記ホスト装置からの要求に応じて前記第１のボリュームにデータを書き込む際に、書き込み先の部分領域を含む前記複製対象領域についての前記第２のボリュームへの複製処理が実行中であり、かつ、前記書き込み先の部分領域にすでにデータが格納されており、かつ、当該データの前記第２のボリュームへのコピーが完了していない場合に、前記書き込み先の部分領域に対して前記未使用領域から新たな物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記ホスト装置から書き込みを要求されたデータを書き込む、
ことを特徴とする付記４記載のストレージシステム。
【０１８１】
（付記６）  前記複製制御部は、前記複製対象領域の部分領域のうちデータが格納されている部分領域のそれぞれに対して、前記複数の記憶装置における未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記複製対象領域内の対応する部分領域に格納されたデータをコピーすることで、前記第２のボリュームを仮想ボリュームとして生成するとともに、
前記複製対象領域についての複製要求を受けたとき、前記複製対象領域の部分領域のうちデータが格納されている部分領域に割り当てられた物理記憶領域を、前記第２のボリューム内の対応する部分領域に割り当てた後、前記第２のボリュームの各部分領域に割り当てた物理記憶領域を前記未使用領域から割り当てた物理記憶領域に変更し、変更後の物理記憶領域に対して変更前の物理記憶領域に格納されたデータをコピーし、
前記書き込み制御部は、
前記ホスト装置からデータの書き込みを要求された部分領域に対して、前記未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して書き込みを要求されたデータを格納することで、前記第１のボリュームを仮想ボリュームとして生成するとともに、
前記ホスト装置からの要求に応じて前記第１のボリュームにデータを書き込む際に、書き込み先の部分領域を含む前記複製対象領域についての前記第２のボリュームへの複製処理が実行中であり、かつ、前記書き込み先の部分領域にすでにデータが格納されており、かつ、当該データに基づくコードを前記コード記憶部に登録済みでない場合には、前記書き込み先の部分領域に対して前記未使用領域から新たな物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記ホスト装置から書き込みを要求されたデータを書き込む、
ことを特徴とする付記２記載のストレージシステム。
【０１８２】
（付記７）  前記複製制御部は、前記第２のボリューム内の部分領域に割り当てた物理記憶領域を、前記未使用領域から割り当てた物理記憶領域に変更したとき、当該部分領域に対応する前記複製対象領域の部分領域に対して前記新たな物理記憶領域が割り当てられていた場合には、物理記憶領域を変更した前記第２のボリューム内の部分領域に対して変更前に割り当てられていた物理記憶領域を、前記未使用領域の一部として設定することを特徴とする付記６記載のストレージシステム。
【０１８３】
（付記８）  前記複製制御部は、前記複製対象領域内の部分領域に格納されたデータを圧縮し、データを圧縮した部分領域に対応する前記第２のボリュームの部分領域に対して、前記未使用領域から圧縮後のデータ容量分の物理記憶領域を割り当て、割り当てた物理記憶領域に前記圧縮後のデータを格納することを特徴とする付記３〜７のいずれか１つに記載のストレージシステム。
【０１８４】
（付記９）  前記書き込み制御部は、前記第１のボリューム内のデータが格納された部分領域のうち、一定期間以上アクセスされていない部分領域を抽出し、抽出した部分領域のうち同一のデータが格納されている部分領域に対して、同一の物理記憶領域を割り当てることを特徴とする付記１〜８のいずれか１つに記載のストレージシステム。
【０１８５】
（付記１０）  複数の記憶装置の記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御するストレージ制御装置において、
ホスト装置からの要求に応じて第１のボリュームにデータを書き込むとともに、前記第１のボリュームが分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部に登録する書き込み制御部と、
前記第１のボリュームのうち複製対象領域についての複製要求を受けると、前記複製対象領域のデータを、前記第１のボリュームとは異なる物理記憶領域によって構成される第２のボリュームに複製するとともに、前記コード記憶部に登録されたコードに基づいて前記複製対象領域の部分領域のうち同一のデータが格納されている部分領域を判定し、同一のデータが格納されている部分領域に対応する前記第２のボリュームの部分領域に対しては同一の物理記憶領域を割り当てる複製制御部と、
を有することを特徴とするストレージ制御装置。
【０１８６】
（付記１１）  前記書き込み制御部は、前記ホスト装置からの要求に応じて前記第１のボリュームにデータを書き込む処理と、書き込んだデータに応じたコードを部分領域ごとに生成し、生成したコードを部分領域に対応付けて前記コード記憶部に登録する処理とを、非同期に実行することを特徴とする付記１０記載のストレージ制御装置。
【０１８７】
（付記１２）  複数の記憶装置の記憶領域の一部によって構成されるボリュームに対するデータの読み書きを制御するストレージ制御装置によるストレージ制御方法であって、
ホスト装置からの要求に応じて第１のボリュームにデータを書き込むとともに、前記第１のボリュームが分割された部分領域ごとに、書き込んだデータに応じたコードを生成し、生成したコードを部分領域に対応付けてコード記憶部に登録し、
前記第１のボリュームのうち複製対象領域についての複製要求を受けると、前記複製対象領域のデータを、前記第１のボリュームとは異なる物理記憶領域によって構成される第２のボリュームに複製するとともに、前記コード記憶部に登録されたコードに基づいて前記複製対象領域の部分領域のうち同一のデータが格納されている部分領域を判定し、同一のデータが格納されている部分領域に対応する前記第２のボリュームの部分領域に対しては同一の物理記憶領域を割り当てる、
ことを特徴とするストレージ制御方法。
【０１８８】
（付記１３）  前記ホスト装置からの要求に応じて前記第１のボリュームにデータを書き込む処理と、書き込んだデータに応じたコードを部分領域ごとに生成し、生成したコードを部分領域に対応付けて前記コード記憶部に登録する処理とを、非同期に実行することを特徴とする付記１２記載のストレージ制御方法。
【０１８９】
（付記１４）  前記複製対象領域を前記第２のボリュームに複製する処理では、前記複製対象領域の部分領域のうちデータが格納されている部分領域のそれぞれに対して、前記複数の記憶装置における未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記複製対象領域内の対応する部分領域に格納されたデータをコピーすることで、前記第２のボリュームを仮想ボリュームとして生成することを特徴とする付記１２または１３記載のストレージ制御方法。
【０１９０】
（付記１５）  前記複製対象領域を前記第２のボリュームに複製する処理では、前記複製対象領域についての複製要求を受けたとき、前記複製対象領域の部分領域のうちデータが格納されている部分領域に割り当てられた物理記憶領域を、前記第２のボリューム内の対応する部分領域に割り当てた後、前記第２のボリュームの各部分領域に割り当てた物理記憶領域を前記未使用領域から割り当てた物理記憶領域に変更し、変更後の物理記憶領域に対して変更前の物理記憶領域に格納されたデータをコピーすることを特徴とする付記１４記載のストレージ制御方法。
【０１９１】
（付記１６）  前記第１のボリュームにデータを書き込む処理では、前記ホスト装置からデータの書き込みを要求された部分領域に対して、前記未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して書き込みを要求されたデータを格納することで、前記第１のボリュームを仮想ボリュームとして生成するとともに、前記ホスト装置からの要求に応じて前記第１のボリュームにデータを書き込む際に、書き込み先の部分領域を含む前記複製対象領域についての前記第２のボリュームへの複製処理が実行中であり、かつ、前記書き込み先の部分領域にすでにデータが格納されており、かつ、当該データの前記第２のボリュームへのコピーが完了していない場合に、前記書き込み先の部分領域に対して前記未使用領域から新たな物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記ホスト装置から書き込みを要求されたデータを書き込むことを特徴とする付記１５記載のストレージ制御方法。
【０１９２】
（付記１７）  前記複製対象領域を前記第２のボリュームに複製する処理では、
前記複製対象領域の部分領域のうちデータが格納されている部分領域のそれぞれに対して、前記複数の記憶装置における未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記複製対象領域内の対応する部分領域に格納されたデータをコピーすることで、前記第２のボリュームを仮想ボリュームとして生成するとともに、前記複製対象領域についての複製要求を受けたとき、前記複製対象領域の部分領域のうちデータが格納されている部分領域に割り当てられた物理記憶領域を、前記第２のボリューム内の対応する部分領域に割り当てた後、前記第２のボリュームの各部分領域に割り当てた物理記憶領域を前記未使用領域から割り当てた物理記憶領域に変更し、変更後の物理記憶領域に対して変更前の物理記憶領域に格納されたデータをコピーし、
前記第１のボリュームにデータを書き込む処理では、
前記ホスト装置からデータの書き込みを要求された部分領域に対して、前記未使用領域から物理記憶領域を割り当て、割り当てた物理記憶領域に対して書き込みを要求されたデータを格納することで、前記第１のボリュームを仮想ボリュームとして生成するとともに、前記ホスト装置からの要求に応じて前記第１のボリュームにデータを書き込む際に、書き込み先の部分領域を含む前記複製対象領域についての前記第２のボリュームへの複製処理が実行中であり、かつ、前記書き込み先の部分領域にすでにデータが格納されており、かつ、当該データに基づくコードを前記コード記憶部に登録済みでない場合には、前記書き込み先の部分領域に対して前記未使用領域から新たな物理記憶領域を割り当て、割り当てた物理記憶領域に対して前記ホスト装置から書き込みを要求されたデータを書き込むことを特徴とする付記１３記載のストレージ制御方法。
【０１９３】
（付記１８）  前記複製対象領域を前記第２のボリュームに複製する処理では、前記第２のボリューム内の部分領域に割り当てた物理記憶領域を、前記未使用領域から割り当てた物理記憶領域に変更したとき、当該部分領域に対応する前記複製対象領域の部分領域に対して前記新たな物理記憶領域が割り当てられていた場合には、物理記憶領域を変更した前記第２のボリューム内の部分領域に対して変更前に割り当てられていた物理記憶領域を、前記未使用領域の一部として設定することを特徴とする付記１７記載のストレージ制御方法。
【０１９４】
（付記１９）  前記複製対象領域を前記第２のボリュームに複製する処理では、前記複製対象領域内の部分領域に格納されたデータを圧縮し、データを圧縮した部分領域に対応する前記第２のボリュームの部分領域に対して、前記未使用領域から圧縮後のデータ容量分の物理記憶領域を割り当て、割り当てた物理記憶領域に前記圧縮後のデータを格納することを特徴とする付記１４〜１８のいずれか１つに記載のストレージ制御方法。
【０１９５】
（付記２０）  前記第１のボリューム内のデータが格納された部分領域のうち、一定期間以上アクセスされていない部分領域を抽出し、抽出した部分領域のうち同一のデータが格納されている部分領域に対して、同一の物理記憶領域を割り当てることを特徴とする付記１２〜１９のいずれか１つに記載のストレージ制御方法。
【符号の説明】
【０１９６】
１  ストレージシステム
１０  ストレージ制御装置
１１  書き込み制御部
１２  複製制御部
１３  コード記憶部
２１〜２４  記憶装置
２１ａ，２４ａ，２４ｂ  物理記憶領域
３０  ホスト装置
４１，４２  ボリューム
４１ａ〜４１ｄ，４２ａ〜４２ｄ  部分領域
【図１】
0005780067.tif 000002
【図２】
0005780067.tif 000003
【図３】
0005780067.tif 000004
【図４】
0005780067.tif 000005
【図５】
0005780067.tif 000006
【図６】
0005780067.tif 000007
【図７】
0005780067.tif 000008
【図８】
0005780067.tif 000009
【図９】
0005780067.tif 000010
【図１０】
0005780067.tif 000011
【図１１】
0005780067.tif 000012
【図１２】
0005780067.tif 000013
【図１３】
0005780067.tif 000014
【図１４】
0005780067.tif 000015
【図１５】
0005780067.tif 000016
【図１６】
0005780067.tif 000017
【図１７】
0005780067.tif 000018
【図１８】
0005780067.tif 000019
【図１９】
0005780067.tif 000020
【図２０】
0005780067.tif 000021
【図２１】
0005780067.tif 000022