(57)【要約】【課題】ボリュームおよびその複製をブロック型ストレージ装置に書き込む際の書き込み量を削減する技術を提供すること。【解決手段】複製元および複製先のボリューム間の差分を管理する複製手法に基づく複製関係の階層構造を構成する複数のボリュームについて、複製関係の階層構造を表す情報と、複製元および複製先のボリューム間における論理チャンク単位での差分の有無に関する情報とを含む管理情報を記憶する管理情報記憶部１１と、複数のボリューム間で同一アドレスの１つ以上の論理チャンクについて、各論理チャンク間で同一のオフセットをとるサブチャンクが連続するよう管理情報に基づき再配置した再配置データ列を取得し、取得した再配置データ列を圧縮して圧縮データ列を生成し、生成した圧縮データ列をストレージ装置に格納する制御部１２とを備える。【選択図】      図１
2018109804.tif 000002
【特許請求の範囲】
【請求項１】
複製元および複製先のボリューム間の差分を管理する複製手法に基づく複製関係の階層構造を構成する複数のボリュームについて、前記複製関係の階層構造を表す情報と、前記複製元および前記複製先のボリューム間における論理チャンク単位での差分の有無に関する情報とを含む管理情報を記憶する管理情報記憶手段と、
前記複数のボリューム間で同一アドレスの１つ以上の論理チャンクについて、各論理チャンク間で同一のオフセットをとるサブチャンクが連続するよう、前記管理情報に基づき再配置した再配置データ列を取得し、取得した再配置データ列を圧縮して圧縮データ列を生成し、生成した圧縮データ列をストレージ装置に格納する制御手段と、
を備えたストレージ管理装置。
【請求項２】
前記制御手段は、
読み込み対象のボリュームにおける読み込み対象の論理チャンクを含む前記圧縮データ列を前記ストレージ装置から読み込んで伸長することにより、前記再配置データ列を取得する読み込み手段と、
前記読み込み対象の論理チャンクのデータが管理されているボリュームの論理チャンクを参照先の論理チャンクとして、前記読み込み手段により取得された再配置データ列から、前記管理情報に基づいて前記参照先の論理チャンクを復元する論理チャンク復元手段と、
書き込み対象のボリュームにおける書き込み対象の論理チャンクと同一アドレスの１つ以上の論理チャンクについて前記読み込み手段を用いて前記再配置データ列を取得し、当該再配置データ列が表す１つ以上の論理チャンクにおいて、ボリューム間で論理チャンクの複製が必要となる複製元の論理チャンクのデータが複製先の論理チャンクに複製され且つ前記書き込み対象の論理チャンクに対して書き込みデータ列が書き込まれたことを表すよう、前記管理情報に基づいて当該再配置データ列を更新する再配置データ列更新手段と、
前記再配置データ列の更新、または、前記ボリュームの複製に応じて、前記管理情報を更新する管理情報更新手段と、
前記再配置データ列を圧縮して前記圧縮データ列を生成し、前記圧縮データ列を前記ストレージ装置に書き込む書き込み手段と、
を有することを特徴とする請求項１に記載のストレージ管理装置。
【請求項３】
前記複製手法としてスナップショット技術が採用される場合、
前記再配置データ列更新手段は、前記書き込み対象のボリュームが前記スナップショットの複製元としてのマスタボリュームであるとき、ボリューム間で論理チャンクの複製が必要となる前記複製元の論理チャンクとして、前記マスタボリュームにおける前記書き込み対象の論理チャンクを適用し、前記複製先の論理チャンクとして、前記マスタボリュームから取得された最新のスナップショットにおいて前記書き込み対象の論理チャンクと同一アドレスの論理チャンクを適用し、
前記論理チャンク復元手段は、前記読み込み対象のボリュームが前記スナップショットであるとき、当該スナップショットと同一のマスタボリュームから取得されたスナップショットのうち、当該スナップショットまたは当該スナップショットより新しいスナップショットの中で、前記読み込み対象の論理チャンクと同一アドレスの論理チャンクにデータが管理されるスナップショットがあれば、そのうち最も古いスナップショットにおける当該同一アドレスの論理チャンクを、前記参照先の論理チャンクとして適用するとともに、当該スナップショットまたは当該スナップショットより新しいスナップショットの中で、前記読み込み対象の論理チャンクと同一アドレスの論理チャンクにデータが管理されるスナップショットがなければ、当該スナップショットのマスタボリュームにおいて当該同一アドレスの論理チャンクを、前記参照先の論理チャンクとして適用することを特徴とする請求項２に記載のストレージ管理装置。
【請求項４】
前記複製手法として差分クローン技術が採用される場合、
前記再配置データ列更新手段は、前記書き込み対象のボリュームが前記差分クローンであるとき、ボリューム間で論理チャンクの複製が必要となる前記複製元の論理チャンクとして、前記書き込み対象の差分クローンの複製元としてのエンティティボリュームにおいて前記書き込み対象の論理チャンクと同一アドレスの論理チャンクを適用し、前記複製先の論理チャンクとして、前記書き込み対象の差分クローンにおける前記書き込み対象の論理チャンクを適用し、
前記論理チャンク復元手段は、前記読み込み対象のボリュームが前記差分クローンであるとき、前記読み込み対象の差分クローンにおける前記読み込み対象の論理チャンクでデータが管理されていれば、前記読み込み対象の差分クローンにおける前記読み込み対象の論理チャンクを前記参照先の論理チャンクとして適用するとともに、前記読み込み対象の差分クローンにおける前記読み込み対象の論理チャンクでデータが管理されていなければ、前記エンティティボリュームにおいて前記書き込み対象の論理チャンクと同一アドレスの論理チャンクを前記参照先の論理チャンクとして適用することを特徴とする請求項２または請求項３に記載のストレージ管理装置。
【請求項５】
前記ストレージ装置の物理チャンクと、前記同一アドレスの１つ以上の論理チャンクとの関連付けを表す情報を記憶する論物変換情報記憶手段をさらに備え、
前記書き込み手段は、更新後の前記再配置データ列に基づく圧縮データ列について書き込みに必要となる物理チャンクの数が、前記書き込み対象の論理チャンクと同一アドレスの１つ以上の論理チャンクに関連付けられた物理チャンクの数と同一でない場合、当該論理チャンクに関連付ける物理チャンクの不足分を追加または余剰分を解放して書き込みを行うとともに、前記論物変換情報記憶手段に記憶される情報を更新することを特徴とする請求項２から請求項４のいずれか１項に記載のストレージ管理装置。
【請求項６】
請求項１から請求項５のいずれか１項に記載のストレージ管理装置と、
前記ストレージ装置と、
を備えたストレージシステム。
【請求項７】
コンピュータ装置が、
複製元および複製先のボリューム間の差分を管理する複製手法に基づく複製関係の階層構造を構成する複数のボリュームについて、前記複製関係の階層構造を表す情報と、前記複製元および前記複製先のボリューム間における論理チャンク単位での差分の有無に関する情報とを含む管理情報を用いて、
前記複数のボリューム間で同一アドレスの１つ以上の論理チャンクについて、各論理チャンク間で同一のオフセットをとるサブチャンクが連続するよう、前記管理情報に基づき再配置した再配置データ列を取得し、取得した再配置データ列を圧縮して圧縮データ列を生成し、生成した圧縮データ列をストレージ装置に格納する方法。
【請求項８】
複製元および複製先のボリューム間の差分を管理する複製手法に基づく複製関係の階層構造を構成する複数のボリュームについて、前記複製関係の階層構造を表す情報と、前記複製元および前記複製先のボリューム間における論理チャンク単位での差分の有無に関する情報とを含む管理情報を用いて、
前記複数のボリューム間で同一アドレスの１つ以上の論理チャンクについて、各論理チャンク間で同一のオフセットをとるサブチャンクが連続するよう、前記管理情報に基づき再配置した再配置データ列を取得し、取得した再配置データ列を圧縮して圧縮データ列を生成し、生成した圧縮データ列をストレージ装置に格納する制御ステップを、
コンピュータ装置に実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データおよびその複製を記憶する技術に関する。
【背景技術】
【０００２】
情報処理装置において、ストレージ装置のボリュームに記憶されるデータを複製する技術として、スナップショット技術や差分クローン技術が知られている。
【０００３】
スナップショット技術は、ボリュームに対する複数世代のバックアップを実現する手法である（例えば、特許文献１参照）。スナップショットの方式は複数存在し、その１つに、コピーオンライト方式がある（例えば、特許文献２参照）。この方式は、スナップショットの取得元のボリュームをマスタボリュームとし、スナップショットを取得した時点ではデータをコピーしない。そして、この方式は、マスタボリュームへの書き込みが発生した時点で、当該書き込み箇所の更新前のデータを差分データとして、最新のスナップショットに書き込む。一方、この方式は、スナップショットからの読み込みがあった場合には、当該スナップショット、当該スナップショットで必要とする差分データを記憶している新しい世代のスナップショットまたはマスタボリュームのデータを参照する。
【０００４】
差分クローン技術は、ボリュームに対する複数のクローン作成を実現する手法である。この手法は、差分クローンの取得元のボリュームをエンティティボリュームとし、差分クローンを取得した時点ではデータをコピーしない。そして、この手法は、差分クローンへの書き込みが発生した時点で、当該書き込みデータを差分データとして差分クローンに書き込む。一方、この手法は、差分クローンからの読み込みがあった場合には、当該差分クローンまたはエンティティボリュームのデータを参照する。なお、この手法では、差分クローンへの書き込みがなかった箇所のデータの記憶を維持する必要があるため、エンティティボリュームへの書き込みは禁止となる。
【０００５】
スナップショットおよび差分クローンは、いずれもボリュームの複製を取得する技術であり、複製の取得時間および複製用の記憶領域を削減できるという共通した特徴を持つ。さらに、このようなスナップショットまたは差分クローンの取得を複数回繰り返すことにより、複製関係の階層構造の構成を可能とする手法が存在する。このような手法では、例えば、スナップショットまたは差分クローンをマスタボリュームとしたスナップショットが取得される。また、スナップショットまたは差分クローンをエンティティボリュームとした差分クローンが取得される。
【０００６】
ここで、このようなボリュームの複製を書き込み得るストレージ装置として、固定長のチャンク単位でデータを管理するブロック型ストレージ装置がある（例えば、特許文献３参照）。このようなブロック型ストレージ装置に上述したようなボリュームの複製を書き込む場合、ボリュームの複製に対する書き込みデータ長がチャンク長未満であっても、データの複製は、チャンク単位で実施される。この際、更新がなかった箇所は、複製元であるマスタボリューム、エンティティボリューム、スナップショットまたは差分クローンのデータで埋められる必要がある。
【０００７】
また、このようなボリュームの複製を書き込み得るストレージ装置としては、近年、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）等の磁気記憶装置に代わって、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の半導体記憶装置の採用が進んでいる。ＳＳＤは、ＨＤＤに比べて、読み書きの高速化が進んでいるからである。しかしながら、半導体記憶装置は、磁気記憶装置と比較して容量あたりの単価が高い点、および、書き込み回数に上限がある点から、書き込み量の削減が求められている。書き込み量の削減方法としては、データの圧縮、および冗長データの重複排除等がある。例えば、データの圧縮を行う関連技術としては、内容が類似する固定長のレコードを列方向に圧縮する手法がある（例えば、特許文献４参照）。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平１１−１３４１１７号公報
【特許文献２】特開２０１５−１１４７８４号公報
【特許文献３】特許第５７３０４４６号公報
【特許文献４】特開２０１３−２４６５９８公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上述した特許文献１〜２に記載されたようなボリュームの複製を、特許文献３に記載されたようなブロック型ストレージ装置に記憶する際に、書き込み量の削減を図るために、特許文献４に記載された関連技術を適用することを考える。
【００１０】
ここで、特許文献４に記載された関連技術は、圧縮の対象として、内容が類似する固定長のレコード群を想定している。特許文献４では、そのような内容が類似する固定長のレコード群の例として、ノードの値および下位ノードのアドレスを格納するツリーデータや、車の現在地の座標を１秒毎に記録した走行履歴データ等が記載されている。
【００１１】
しかしながら、一般的に、ボリュームに記憶されるデータは、必ずしも内容が類似しているとは限らない。そのため、そのようなボリュームの複製をストレージ装置に書き込む際に、単位となるチャンク群の内容は、類似していないことの方が多いと考えられる。したがって、上述したボリュームの複製を上述したブロック型ストレージ装置に書き込む際に、特許文献４に記載された関連技術を適用することは難しい。
【００１２】
また、特許文献１〜３には、このような上述したボリュームの複製を上述したブロック型ストレージ装置に書き込む際に、書き込み量を削減することについては記載されていない。
【００１３】
本発明は、上述の課題を解決するためになされたものである。すなわち、本発明は、ボリュームおよびその複製をブロック型ストレージ装置に書き込む際の書き込み量を削減する技術を提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明のストレージ管理装置は、複製元および複製先のボリューム間の差分を管理する複製手法に基づく複製関係の階層構造を構成する複数のボリュームについて、前記複製関係の階層構造を表す情報と、前記複製元および前記複製先のボリューム間における論理チャンク単位での差分の有無に関する情報とを含む管理情報を記憶する管理情報記憶手段と前記複数のボリューム間で同一アドレスの１つ以上の論理チャンクについて、各論理チャンク間で同一のオフセットをとるサブチャンクが連続するよう、前記管理情報に基づき再配置した再配置データ列を取得し、取得した再配置データ列を圧縮して圧縮データ列を生成し、生成した圧縮データ列をストレージ装置に格納する制御手段と、を備える。
【００１５】
また、本発明のストレージシステムは、上述したストレージ管理装置と、前記ストレージ装置と、を備える。
【００１６】
また、本発明の方法は、コンピュータ装置が、複製元および複製先のボリューム間の差分を管理する複製手法に基づく複製関係の階層構造を構成する複数のボリュームについて、前記複製関係の階層構造を表す情報と、前記複製元および前記複製先のボリューム間における論理チャンク単位での差分の有無に関する情報とを含む管理情報を用いて、前記複数のボリューム間で同一アドレスの１つ以上の論理チャンクについて、各論理チャンク間で同一のオフセットをとるサブチャンクが連続するよう、前記管理情報に基づき再配置した再配置データ列を取得し、取得した再配置データ列を圧縮して圧縮データ列を生成し、生成した圧縮データ列をストレージ装置に格納する。
【００１７】
また、本発明のプログラムは、複製元および複製先のボリューム間の差分を管理する複製手法に基づく複製関係の階層構造を構成する複数のボリュームについて、前記複製関係の階層構造を表す情報と、前記複製元および前記複製先のボリューム間における論理チャンク単位での差分の有無に関する情報とを含む管理情報を用いて、前記複数のボリューム間で同一アドレスの１つ以上の論理チャンクについて、各論理チャンク間で同一のオフセットをとるサブチャンクが連続するよう、前記管理情報に基づき再配置した再配置データ列を取得し、取得した再配置データ列を圧縮して圧縮データ列を生成し、生成した圧縮データ列をストレージ装置に格納する制御ステップを、コンピュータ装置に実行させる。
【発明の効果】
【００１８】
本発明は、ボリュームおよびその複製をブロック型ストレージ装置に書き込む際の書き込み量を削減する技術を提供することができる。
【図面の簡単な説明】
【００１９】
【図１】本発明の第１の実施の形態としてのストレージ管理装置の構成を示すブロック図である。
【図２】本発明の第１の実施の形態としてのストレージ管理装置のハードウェア構成の一例を示す図である。
【図３】本発明の第１の実施の形態における再配置データ列および圧縮データ列について説明する模式図である。
【図４】本発明の第１の実施の形態としてのストレージ管理装置の動作を説明するフローチャートである。
【図５】本発明の第２の実施の形態としてのストレージシステムの構成を示すブロック図である。
【図６】本発明の第３の実施の形態としてのストレージシステムの構成を示すブロック図である。
【図７】本発明の第３の実施の形態としてのストレージシステムがボリュームを複製する動作を説明するフローチャートである。
【図８】本発明の第３の実施の形態としてのストレージシステムがデータを読み込む動作を説明するフローチャートである。
【図９】本発明の第３の実施の形態としてのストレージシステムがデータを書き込む動作を説明するフローチャートである。
【図１０】本発明の第４の実施の形態としてのストレージシステムの構成を示すブロック図である。
【図１１】本発明の第４の実施の形態におけるツリー管理テーブルのデータ構造の一例を説明する図である。
【図１２】本発明の第４の実施の形態における差分管理テーブルのデータ構造の一例を説明する図である。
【図１３】本発明の第４の実施の形態における複製数管理テーブルのデータ構造の一例を説明する図である。
【図１４】本発明の第４の実施の形態における論物変換テーブルのデータ構造の一例を説明する図である。
【図１５】本発明の第４の実施の形態としてのストレージシステムがボリュームを複製する動作を説明するフローチャートである。
【図１６】本発明の第４の実施の形態としてのストレージシステムがデータを読み込む動作を説明するフローチャートである。
【図１７】本発明の第４の実施の形態としてのストレージシステムがスナップショットからデータを読み込む動作を説明するフローチャートである。
【図１８】本発明の第４の実施の形態としてのストレージシステムが差分クローンからデータを読み込む動作を説明するフローチャートである。
【図１９】本発明の第４の実施の形態としてのストレージシステムが論理チャンクのデータを読み込む動作を説明するフローチャートである。
【図２０】本発明の第４の実施の形態としてのストレージシステムが論理チャンクを復元する動作を説明するフローチャートである。
【図２１】本発明の第４の実施の形態としてのストレージシステムがデータを書き込む動作を説明するフローチャートである。
【図２２】本発明の第４の実施の形態としてのストレージシステムがスナップショットのマスタボリュームへデータを書き込む動作を説明するフローチャートである。
【図２３】本発明の第４の実施の形態としてのストレージシステムが差分クローンへデータを書き込む動作を説明するフローチャートである。
【図２４】本発明の第４の実施の形態としてのストレージシステムが再配置データ列を更新する動作を説明するフローチャートである。
【図２５】本発明の第４の実施の形態としてのストレージシステムが再配置データ列を再配置する動作を説明するフローチャートである。
【図２６】本発明の第４の実施の形態としてのストレージシステムが書き込み対象の論理チャンクを更新する動作を説明するフローチャートである。
【図２７】本発明の第４の実施の形態としてのストレージシステムが再配置データ列を記憶する動作を説明するフローチャートである。
【図２８】本発明の第４の実施の形態の具体例において複数のボリューム間における複製関係の階層構造を模式的に示す図である。
【図２９】本発明の第４の実施の形態の具体例においてツリー管理テーブルに記憶される情報の一例を示す図である。
【図３０】本発明の第４の実施の形態の具体例において差分管理テーブルに記憶される情報の一例を示す図である。
【図３１】本発明の第４の実施の形態の具体例において複製数管理テーブルに記憶される情報の一例を示す図である。
【図３２】本発明の第４の実施の形態の具体例において論物変換テーブルに記憶される情報の一例を示す図である。
【図３３】本発明の第４の実施の形態の具体例におけるデータの読み込みを模式的に示す図である。
【図３４】本発明の第４の実施の形態の具体例におけるデータの書き込み要求を模式的に示す図である。
【図３５】本発明の第４の実施の形態の具体例におけるデータの書き込みを模式的に示す図である。
【発明を実施するための形態】
【００２０】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
【００２１】
（第１の実施の形態）
本発明の第１の実施の形態としてのストレージ管理装置１０の機能ブロック構成を図１に示す。図１において、ストレージ管理装置１０は、管理情報記憶部１１と、制御部１２とを備える。
【００２２】
ストレージ管理装置１０は、ボリュームおよびその複製を表す情報から、ストレージ装置に格納するための圧縮データ列を生成する装置である。ここで、ボリュームおよびその複製は、仮想的な記憶媒体であり、固定長の論理チャンク単位でデータを記憶する。これに対して、圧縮データ列の格納先となるストレージ装置としては、磁気記憶装置、半導体記憶装置等といった、物理的な記憶媒体が想定される。また、ボリュームの複製手法としては、複製元および複製先のボリューム間の差分を管理する複製手法が想定される。
【００２３】
ここで、ストレージ管理装置１０は、図２に示すようなハードウェア要素によって構成可能である。図２において、ストレージ管理装置１０は、ＣＰＵ（Central Processing Unit）１００１、メモリ１００２、および、ストレージ接続インタフェース１００３を含む。メモリ１００２は、ＲＡＭ（Random Access Memory）やＲＯＭ（Read Only Memory）等によって構成される。ストレージ接続インタフェース１００３は、ストレージ装置に接続するためのインタフェースである。この場合、ストレージ管理装置１０の各機能ブロックは、メモリ１００２に格納されるコンピュータ・プログラムを読み込んで実行するとともに各部を制御するＣＰＵ１００１によって構成される。なお、ストレージ管理装置１０およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００２４】
次に、各機能ブロックの詳細について説明する。
【００２５】
管理情報記憶部１１は、複製関係の階層構造を構成する複数のボリュームについての管理情報を記憶する。複製関係とは、上述したような複製手法による複製元を親とし、複製先を子とする関係である。管理情報は、複製関係の階層構造を表す情報を含む。また、管理情報は、複製元および複製先のボリューム間における論理チャンク単位での差分の有無に関する情報を含む。
【００２６】
制御部１２は、複数のボリューム間で同一アドレスの１つ以上の論理チャンクについて、各論理チャンク間で同一のオフセットをとるサブチャンクが連続するよう、管理情報に基づき再配置した再配置データ列を取得する。そして、制御部１２は、取得した再配置データ列を圧縮して圧縮データ列を生成する。そして、制御部１２は、生成した圧縮データ列をストレージ装置に対して格納するよう制御する。なお、サブチャンクは、圧縮データ列が生成される際の圧縮ウィンドウのサイズより充分に小さいサイズであることが望ましい。
【００２７】
例えば、再配置データ列は、再配置規則にしたがって管理情報に基づき配置されたデータ列であってもよい。ここで、再配置規則とは、各論理チャンク間で同一のオフセットをとるサブチャンクを連続させる順序を規定する規則である。例えば、再配置規則は、同一のオフセットをとるサブチャンクを、各サブチャンクを含む論理チャンクを含むボリュームの親子関係に基づく順またはボリューム生成時点に基づく順に連続させたサブチャンク列を、オフセットが若い順に配置する規則であってもよい。ただし、再配置規則は、このような内容に限定されない。再配置規則は、同一アドレスの各論理チャンク間で同一のオフセットをとるサブチャンクを連続させる順序を規定する規則であれば、その他の内容であってもよい。
【００２８】
ここで、再配置データ列および圧縮データ列について、図３の模式図を用いて説明する。図３では、複製関係を有する複数のボリュームとして、４つのボリュームＡ〜Ｄが示されている。このうち、ボリュームＡが、複製関係の階層構造のルートであるとする。また、その他のボリュームＢ〜Ｄは、複製関係の階層構造においてボリュームＡの子または子孫となるボリュームであるとする。
【００２９】
ボリュームＡは、アドレス＃００００〜＃０００３の４つの論理チャンクのデータを保存している。ここでは、論理チャンクは４バイトであり、４つの１バイトのサブチャンクからなるものとする。ボリュームＢは、アドレス＃００００および＃０００２において、複製元との差分となるデータを管理している。ボリュームＣは、アドレス＃０００２において、複製元との差分となるデータを管理している。ボリュームＤは、アドレス＃００００および＃０００１において、複製元との差分となるデータを管理している。
【００３０】
以下では、アドレスが＃ＸＸＸＸの論理チャンクを、論理チャンク＃ＸＸＸＸとも記載する。また、１つ以上の論理チャンク＃ＸＸＸＸに基づく再配置データ列を、再配置データ列＃ＸＸＸＸとも記載する。また、再配置データ列＃ＸＸＸＸが圧縮された圧縮データ列を、圧縮データ列＃ＸＸＸＸとも記載する。
【００３１】
このとき、例えば、論理チャンク＃００００に着目する。４つのボリュームＡ〜Ｄのうち、論理チャンク＃００００は、３つのボリュームＡ、Ｂ、Ｄで管理されている。ボリュームＡの論理チャンク＃００００のデータは「０１Ｘ３」である。また、ボリュームＢの論理チャンク＃００００のデータは「０１２３」である。また、ボリュームＤの論理チャンク＃００００のデータは「０Ｓ２３」である。これらの３つの論理チャンク＃００００間で、オフセット０の３つのサブチャンク、オフセット１の３つのサブチャンク、オフセット２の３つのサブチャンクおよびオフセット３の３つのサブチャンクが、順に連続するよう再配置される。すると、再配置された再配置データ列＃００００は、「０００１１ＳＸ２２３３３」となる。図３において、再配置データ列＃０００１〜＃０００３も、再配置データ列＃００００と同様に説明される。
【００３２】
ここで、再配置にあたり、同一アドレスの論理チャンクの数を表す情報（アドレス＃００００の場合、３つであるという情報）が少なくとも必要である。同一アドレスの論理チャンクの数は、複製元および複製先の差分の有無を表す情報から算出可能である。また、再配置データ列において、同一のオフセットをとるサブチャンクは、親子関係の親から子の順（あるいはその逆順）に連続するよう配置されてもよい。その場合、再配置にあたり、複製関係の階層構造を表す情報が必要である。このように、再配置にあたり必要となる情報は、管理情報記憶部１１に記憶されている。
【００３３】
そして、図３に示すように、このような再配置データ列＃００００〜＃０００３は、圧縮されて圧縮データ列＃００００〜＃０００３となる。
【００３４】
このように、制御部１２は、複数のボリュームＡ〜Ｄにおいて、同一アドレスの論理チャンク毎に、再配置データ列＃００００〜＃０００３を取得する。そして、制御部１２は、取得した再配置データ列＃００００〜＃０００３を圧縮して圧縮データ列＃００００〜＃０００３を生成する。そして、制御部１２は、圧縮データ列＃００００〜＃０００３を、ストレージ装置に対して格納する。
【００３５】
以上のように構成されたストレージ管理装置１０の動作について、図４を参照して説明する。
【００３６】
まず、制御部１２は、管理情報に基づいて、複製関係の階層構造を構成する複数のボリュームにおいて、同一アドレスの１つ以上の論理チャンクについて、再配置データ列を取得する（ステップＳ１）。
【００３７】
前述のように、再配置データ列は、１つ以上の論理チャンクが、各論理チャンク間で同一オフセットをとるサブチャンクが連続するよう配置されたデータ列である。
【００３８】
次に、制御部１２は、再配置データ列を圧縮して圧縮データ列を生成する（ステップＳ２）。
【００３９】
次に、制御部１２は、圧縮データ列を、ストレージ装置に格納する（ステップＳ３）。
【００４０】
以上で、ストレージ管理装置１０は、動作を終了する。
【００４１】
このようにして、ストレージ管理装置１０は、複製関係を有する複数のボリュームにおいて論理チャンクのアドレス毎に適切なタイミングで上述の動作を行うことにより、ボリュームおよびその複製を表す情報を、ストレージ装置に格納する。
【００４２】
次に、本発明の第１の実施の形態の効果について述べる。
【００４３】
本発明の第１の実施の形態としてのストレージ管理装置は、ボリュームおよびその複製をブロック型ストレージ装置に書き込む際の書き込み量を削減することができる。
【００４４】
その理由について説明する。本実施の形態では、管理情報記憶部が、複製関係の階層構造を構成する複数のボリュームについて管理情報を記憶している。管理情報は、複製関係の階層構造を表す情報を含んでいる。また、管理情報は、複製元および複製先のボリューム間における論理チャンク単位での差分の有無に関する情報を含んでいる。そして、制御部が、複数のボリューム間で同一アドレスの１つ以上の論理チャンクについて、各論理チャンク間で同一のオフセットをとるサブチャンクが連続するよう、管理情報に基づき再配置した再配置データ列を取得する。そして、制御部が、取得した再配置データ列を圧縮して圧縮データ列を生成する。そして、制御部が、生成した圧縮データ列をストレージ装置に対して格納するよう制御するからである。
【００４５】
このように、本実施の形態は、ボリュームおよびその複製の間で同一アドレスの１つ以上の論理チャンクについて取得した再配置データ列を圧縮してストレージ装置に記憶する。再配置データ列は、同一アドレスの各論理チャンク間で同一のオフセットをとるサブチャンクが連続するよう管理情報に基づき再配置されたデータ列である。
【００４６】
ここで、複製元および複製先のボリューム間の差分を管理する複製手法で、論理チャンク単位で差分を管理する場合、複製元との差分を有する論理チャンク内にも、差分の無い箇所がある可能性が高いと考えられる。その場合、複製先のボリュームで管理される論理チャンクで差分の無い箇所は、複製元と同一のデータを有することになる。そのため、複製関係を有する複数のボリューム間で、複製元および複製先の複数のボリュームを互いに比較した場合、同一アドレスの論理チャンクは、互いに重複する箇所を有する可能性が高い。
【００４７】
本実施の形態は、上述したように、論理チャンクを、圧縮ウィンドウよりも十分に短いデータ長のサブチャンクに分割した上で、同一アドレスの論理チャンク間で、同一のオフセットをとる複数のサブチャンクを連続させた再配置データ列を圧縮する。このような再配置データ列を圧縮対象とすることにより、本実施の形態は、圧縮アルゴリズムにおける圧縮ウィンドウ内で重複するデータ列が検出される可能性を高くする。その結果、本実施の形態は、ボリューム単位で圧縮する場合に比べて、ボリューム内のデータに類似性が有るか無いかに関わらず、圧縮率をより改善し、記憶領域やディスク書き込み回数を削減する。
【００４８】
（第２の実施の形態）
次に、本発明の第２の実施の形態としてのストレージシステム２の機能ブロック構成を図５に示す。図５において、ストレージシステム２は、本発明の第１の実施の形態としてのストレージ管理装置１０と、ストレージ装置９０とを含む。
【００４９】
ストレージ管理装置１０およびストレージ装置９０は、例えば１つの物理的なコンピュータ装置によって構成されてもよい。その場合、ストレージ装置９０は、内蔵される補助記憶装置によって構成される。
【００５０】
あるいは、ストレージ装置９０は、ストレージ管理装置１０を構成するコンピュータ装置の外部に接続される記憶装置によって構成されてもよい。
【００５１】
本発明の第２の実施の形態において、ストレージ管理装置１０は、本発明の第１の実施の形態で説明したように構成され、動作することにより、ストレージ装置９０に対して圧縮データ列を格納する。これにより、ストレージシステム２は、本発明の第１の実施の形態と同様の効果を奏する。
【００５２】
（第３の実施の形態）
次に、本発明の第３の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第１〜第２の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
【００５３】
まず、本発明の第３の実施の形態としてのストレージシステム３の機能ブロック構成を図６に示す。図６において、ストレージシステム３は、本発明の第２の実施の形態としてのストレージシステム２に対して、ストレージ管理装置１０に替えてストレージ管理装置３０を備える点が異なる。また、ストレージ管理装置３０は、ストレージ管理装置１０に対して、制御部１２に替えて制御部３２を備える点が異なる。制御部３２は、読み込み部３２１と、論理チャンク復元部３２２と、再配置データ列更新部３２３と、管理情報更新部３２４と、書き込み部３２５とを有する。
【００５４】
ここで、ストレージ管理装置３０およびその各機能ブロックは、図２を参照して説明した本発明の第１の実施の形態と同様のハードウェア要素によって構成可能である。なお、ストレージ管理装置３０およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００５５】
次に、各機能ブロックの詳細について説明する。
【００５６】
読み込み部３２１は、読み込み対象のボリュームにおける読み込み対象の論理チャンクを含む圧縮データ列を、ストレージ装置９０から読み込む。そして、読み込み部３２１は、読み込んだ圧縮データ列を伸長することにより、再配置データ列を取得する。
【００５７】
論理チャンク復元部３２２は、読み込み対象の論理チャンクのデータが管理されているボリュームの論理チャンクを、参照先の論理チャンクとして特定する。ここで、読み込み対象のボリュームにおける読み込み対象の論理チャンクのデータは、必ずしも読み込み対象のボリュームにおいて管理されているとは限らない。読み込み対象の論理チャンクのデータが管理されているボリュームは、読み込み対象のボリュームが複製元であるか複製先であるかや、複製手法等も考慮して定まる。そして、論理チャンク復元部３２２は、読み込み対象の論理チャンクについて読み込み部３２１により取得された再配置データ列から、管理情報に基づいて、参照先の論理チャンクを復元する。復元は、再配置規則にしたがって行われる。再配置規則については、本発明の第１の実施の形態において説明した通りである。
【００５８】
例えば、論理チャンク復元部３２２は、管理情報から、読み込み対象の論理チャンクと同一アドレスの論理チャンクの数や、それらの論理チャンクをそれぞれ含むボリュームの親子関係の順序または新旧の順序を表す情報を取得する。そして、論理チャンク復元部３２２は、取得した情報に基づいて、再配置データ列から、再配置規則にしたがって参照先の論理チャンクを復元すればよい。
【００５９】
再配置データ列更新部３２３は、書き込み対象のボリュームにおける書き込み対象の論理チャンクに関する再配置データ列を取得し、取得した再配置データ列を、管理情報に基づいて更新する。
【００６０】
具体的には、再配置データ列更新部３２３は、書き込み対象のボリュームにおける書き込み対象の論理チャンクに関する再配置データ列を取得する。再配置データ列の取得は、読み込み部３２１を用いて行えばよい。そして、再配置データ列更新部３２３は、取得した再配置データ列が表す１つ以上の論理チャンクにおいて、ボリューム間での複製が必要な複製元の論理チャンクおよび複製先の論理チャンクを特定する。なお、書き込み対象のボリュームにおける書き込み対象の論理チャンクに対するデータの書き込みの際には、書き込み前に、ボリューム間で論理チャンクの複製が必要となる場合がある。このようなボリューム間で論理チャンクの複製が必要となる複製元の論理チャンクおよび複製先の論理チャンクは、書き込み対象のボリュームが複製元であるか複製先であるかや、その複製手法も考慮して定まる。
【００６１】
また、再配置データ列更新部３２３は、取得した再配置データ列が表す１つ以上の論理チャンクにおいて、複製元の論理チャンクのデータが複製先の論理チャンクに複製されたことを表すよう、管理情報に基づいて、当該再配置データ列を更新する。また、再配置データ列更新部３２３は、取得した再配置データ列が表す１つ以上の論理チャンクにおいて、書き込み対象の論理チャンクに対して書き込みデータ列が書き込まれたことを表すよう、管理情報に基づいて、当該再配置データ列を更新する。これらの更新は、再配置規則にしたがって行われる。
【００６２】
例えば、再配置データ列更新部３２３は、管理情報から、読み込み対象の論理チャンクと同一アドレスの論理チャンクの数や、それらの論理チャンクをそれぞれ含むボリュームの親子関係の順序または新旧の順序を表す情報を取得する。そして、再配置データ列更新部３２３は、管理情報から取得した情報に基づいて、再配置データ列を再配置規則にしたがって更新すればよい。
【００６３】
管理情報更新部３２４は、再配置データ列の更新、または、ボリュームの複製に応じて、管理情報を更新する。例えば、再配置データ列の更新が行われた場合、管理情報更新部３２４は、ボリューム間の差分の有無を表す情報を更新する。また、例えば、ボリュームが新たに複製された場合、管理情報更新部３２４は、複製関係の階層構造を表す情報を追加する。また、この場合、管理情報更新部３２４は、ボリューム間の差分の有無を表す情報として、複製元および新たに生成された複製先のボリューム間に差分がないことを表す情報を追加する。
【００６４】
書き込み部３２５は、再配置データ列更新部３２３により更新された再配置データ列を圧縮して圧縮データ列を生成する。そして、書き込み部３２５は、圧縮データ列をストレージ装置９０に書き込む。
【００６５】
以上のように構成されたストレージ管理装置３０の動作について、図面を参照して説明する。
【００６６】
まず、ストレージ管理装置３０が、ボリュームを複製する動作を図７に示す。
【００６７】
図７では、まず、制御部３２は、ボリュームの複製を要求する情報を取得する（ステップＡ１）。取得される情報は、複製元のボリュームを表す情報と、複製手法を表す情報とを含む。
【００６８】
次に、管理情報更新部３２４は、複製元のボリュームと新たな複製先のボリュームとの複製関係を表す情報を、管理情報記憶部１１に追加する（ステップＡ２）。
【００６９】
次に、管理情報更新部３２４は、複製元のボリュームと新たな複製先のボリュームとの間に差分が無いことを表す情報を、管理情報記憶部１１に追加する（ステップＡ３）。
【００７０】
以上で、ストレージ管理装置３０は、ボリュームを複製する動作を終了する。
【００７１】
次に、ストレージ管理装置３０が、ストレージ装置９０からデータを読み込む動作を図８に示す。
【００７２】
図８では、まず、制御部３２は、データの読み込みを要求する情報を取得する（ステップＢ１）。取得される情報は、読み込み対象のボリュームおよび読み込み対象の論理チャンクを表す情報を含む。
【００７３】
次に、読み込み部３２１は、読み込み対象のボリュームにおける読み込み対象の論理チャンクと同一アドレスの論理チャンクを含む圧縮データ列を、ストレージ装置９０から読み込む（ステップＢ２）。
【００７４】
次に、読み込み部３２１は、読み込んだ圧縮データ列を伸長し、再配置データ列を取得する（ステップＢ３）。
【００７５】
次に、論理チャンク復元部３２２は、読み込み対象の論理チャンクのデータが管理されているボリュームの論理チャンクを、参照先の論理チャンクとして特定する（ステップＢ４）。
【００７６】
次に、論理チャンク復元部３２２は、管理情報に基づいて、再配置データ列が表す１つ以上の論理チャンクの中から、参照先の論理チャンクを復元する（ステップＢ５）。
【００７７】
以上で、ストレージ管理装置３０は、読み込みを行う動作を終了する。
【００７８】
次に、ストレージ管理装置３０が、ストレージ装置９０に対して書き込みを行う動作を図９に示す。
【００７９】
図９では、まず、制御部３２は、データの書き込みを要求する情報を取得する（ステップＣ１）。取得される情報は、書き込み対象のボリューム、書き込み対象の論理チャンク、および、書き込みデータ列を表す情報を含む。
【００８０】
次に、読み込み部３２１は、書き込み対象のボリュームにおける書き込み対象の論理チャンクを読み込み対象として、当該論理チャンクと同一アドレスの論理チャンクを含む圧縮データ列を、ストレージ装置９０から読み込む（ステップＣ２）。
【００８１】
次に、読み込み部３２１は、読み込んだ圧縮データ列を伸長し、再配置データ列を取得する（ステップＣ３）。
【００８２】
次に、再配置データ列更新部３２３は、データの書き込みの際にボリューム間での論理チャンクの複製が必要となる複製元の論理チャンクおよび複製先の論理チャンクを特定する（ステップＣ４）。
【００８３】
次に、再配置データ列更新部３２３は、再配置データ列が表す１つ以上の論理チャンクにおいて、複製元の論理チャンクのデータが複製先の論理チャンクに複製されたことを表すよう、再配置データ列を更新する（ステップＣ５）。
【００８４】
なお、複製先の論理チャンクが管理されるボリュームにおいて当該論理チャンクのデータが既に管理されている場合、ステップＣ５の動作は省略可能である。
【００８５】
次に、再配置データ列更新部３２３は、再配置データ列が表す１つ以上の論理チャンクにおいて、書き込み対象の論理チャンクに書き込みデータ列が書き込まれたことを表すよう、再配置データ列を更新する（ステップＣ６）。
【００８６】
次に、書き込み部３２５は、更新後の再配置データ列を圧縮して圧縮データ列を生成する（ステップＣ７）。
【００８７】
次に、書き込み部３２５は、圧縮データ列をストレージ装置９０に書き込む（ステップＣ８）。
【００８８】
次に、管理情報更新部３２４は、書き込みに伴い管理情報を更新する（ステップＣ９）。具体的には、管理情報更新部３２４は、書き込みに伴い複製元のボリュームとの間に差分が発生したボリュームについて、書き込み対象の論理チャンクと同一アドレスの論理チャンクに差分が有ることを表すよう、管理情報を更新する。
【００８９】
以上で、ストレージ管理装置３０は、書き込みを行う動作を終了する。
【００９０】
次に、本発明の第３の実施の形態の効果について述べる。
【００９１】
本発明の第３の実施の形態としてのストレージ管理装置は、ボリュームおよびその複製をブロック型ストレージ装置に書き込む際の書き込み量を削減するとともに、そのようなブロック型ストレージ装置から所望のデータを読み込むことができる。
【００９２】
その理由について説明する。本実施の形態では、管理情報記憶部が、本発明の第１の実施の形態と同様の管理情報を記憶している。そして、データの読み込みが要求された際には、読み込み部が、読み込み対象のボリュームにおける読み込み対象の論理チャンクを含む圧縮データ列をストレージ装置から読み込んで伸長することにより、再配置データ列を取得する。そして、論理チャンク復元部が、読み込み対象の論理チャンクのデータが管理されているボリュームの論理チャンクを参照先の論理チャンクとして特定する。そして、論理チャンク復元部が、読み込み部により取得された再配置データ列から、管理情報に基づいて参照先の論理チャンクを復元するからである。
【００９３】
また、データの書き込みが要求された際には、再配置データ列更新部が、書き込み対象のボリュームにおける書き込み対象の論理チャンクと同一アドレスの１つ以上の論理チャンクについて読み込み部を用いて再配置データ列を取得する。そして、再配置データ列更新部が、ボリューム間で複製が必要な複製元の論理チャンクおよび複製先の論理チャンクを特定する。そして、再配置データ列更新部が、当該再配置データ列が表す１つ以上の論理チャンクにおいて、複製元の論理チャンクのデータが複製先の論理チャンクに複製されたことを表すよう、管理情報に基づき当該再配置データ列を更新する。さらに、再配置データ列更新部が、当該再配置データ列が表す１つ以上の論理チャンクにおいて、書き込み対象の論理チャンクに対して書き込みデータ列が書き込まれたことを表すよう、管理情報に基づいて当該再配置データ列を更新する。そして、管理情報更新部が、再配置データ列の更新、または、ボリュームの複製に応じて、管理情報を更新する。そして、書き込み部が、更新後の再配置データ列を圧縮して圧縮データ列を生成し、圧縮データ列をストレージ装置に書き込むからである。
【００９４】
このようにして、本実施の形態は、データの書き込みの際には、圧縮率の向上に寄与するよう再配置された再配置データ列において、論理チャンクの複製およびデータの書き込みを適切に反映させることができる。また、本実施の形態は、データの読み込みの際には、圧縮率の向上に寄与するよう再配置された再配置データ列から、所望のデータを読み込むことができる。
【００９５】
（第４の実施の形態）
次に、本発明の第４の実施の形態について図面を参照して詳細に説明する。本実施の形態では、ボリュームの複製手法として、スナップショット技術および差分クローン技術を採用することを想定する。スナップショット技術および差分クローン技術については、背景技術で述べたとおりである。ここでは、スナップショット技術としては、コピーオンライト方式が採用されるものとする。
【００９６】
なお、本実施の形態の説明において参照する各図面において、本発明の第１〜第３の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
【００９７】
まず、本発明の第４の実施の形態としてのストレージシステム４の機能ブロック構成を、図１０に示す。図１０において、ストレージシステム４は、本発明の第３の実施の形態としてのストレージシステム３に対して、ストレージ管理装置３０に替えてストレージ管理装置４０と、ストレージ装置９０に替えてストレージ装置９１とを備える点が異なる。ストレージ管理装置４０は、管理情報記憶部４１と、制御部４２と、論物変換情報記憶部４３とを備える。制御部４２は、読み込み部４２１と、論理チャンク復元部４２２と、再配置データ列更新部４２３と、管理情報更新部４２４と、書き込み部４２５とを有する。また、ストレージ装置９１は、固定長の物理チャンク単位でデータ列を記憶する。なお、論理チャンクと物理チャンクとは、チャンク長が異なっていてもよい。
【００９８】
ここで、ストレージ管理装置４０およびその各機能ブロックは、図２を参照して説明した本発明の第１の実施の形態と同様のハードウェア要素によって構成可能である。なお、ストレージ管理装置４０およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００９９】
次に、各機能ブロックの詳細について説明する。
【０１００】
まず、管理情報記憶部４１について説明する。
【０１０１】
管理情報記憶部４１は、本発明の第１〜第３の実施の形態における管理情報記憶部１１と同様の情報に加えて、論理チャンクのアドレス毎の複製数を表す情報をさらに含む管理情報を記憶する。複製数とは、複製関係を有する複数のボリュームにおいて、同一アドレスの論理チャンクが管理されている数をいうものとする。
【０１０２】
例えば、管理情報記憶部４１は、ツリー管理テーブルと、差分管理テーブルと、複製数管理テーブルとを記憶していてもよい。ツリー管理テーブルは、複製関係の階層構造を表す情報を格納する。また、差分管理テーブルは、複製元および複製先のボリューム間の差分の有無を表す情報を格納する。また、複製数管理テーブルは、論理チャンクのアドレス毎の複製数を表す情報を格納する。
【０１０３】
図１１は、ツリー管理テーブルのデータ構造の一例を示す。ツリー管理テーブルは、親（すなわち、複製元）ボリュームと、子（すなわち、複製先）ボリュームと、複製手法とをそれぞれ表す情報からなるエントリを格納する。本実施の形態では、複製手法を表す情報としては、スナップショットおよび差分クローンのいずれかを表す情報が想定される。
【０１０４】
図１２は、差分管理テーブルのデータ構造の一例である。差分管理テーブルは、いずれかのボリュームの複製先となっている子ボリューム毎に生成される。差分管理テーブルは、論理チャンクのアドレスと、そのアドレスの論理チャンクにおける親ボリュームとの差分の有無を表す情報とからなるエントリを格納する。例えば、差分の有無を表す情報は、差分がある場合を「１」で表し、差分がない場合を「０」で表してもよい。
【０１０５】
図１３は、複製数管理テーブルのデータ構造の一例である。複製数管理テーブルは、論理チャンクのアドレスと、そのアドレスの論理チャンクの複製数とからなるエントリを格納する。なお、本実施の形態では、複製数は、複製関係の階層構造のルートとなるボリュームに保存されている論理チャンクの数も含んでカウントされるものとする。つまり、ある論理チャンクのデータ列が１回も複製されていない場合は、そのアドレスの論理チャンクの複製数は１となる。そして、当該論理チャンクが複製されるたびに、そのアドレスの論理チャンクの複製数に１が加算される。
【０１０６】
次に、論物変換情報記憶部４３について説明する。
【０１０７】
論物変換情報記憶部４３は、ストレージ装置９１における物理チャンクと、同一アドレスの１つ以上の論理チャンクとの関連付けを表す論物変換テーブルを記憶する。
【０１０８】
図１４は、論物変換テーブルのデータ構造の一例を示す。論物変換テーブルは、物理チャンクのアドレスと、その物理チャンクに格納される圧縮データ列が表す１つ以上の論理チャンクのアドレスとを含むエントリを格納する。なお、論物変換テーブルは、異なる物理チャンクのアドレスに対して、同一の論理チャンクのアドレスが関連付けられた複数のエントリを含む可能性がある。つまり、ある同一アドレスの１つ以上の論理チャンクから生成された圧縮データ列は、１つまたは複数の物理チャンクに格納され得る。複数の物理チャンクに格納される場合、圧縮データ列は、物理チャンクのサイズ以下に分割される。
【０１０９】
次に、制御部４２の再配置データ列更新部４２３について説明する。
【０１１０】
再配置データ列更新部４２３は、本発明の第３の実施の形態における再配置データ列更新部３２３と略同様に構成されるが、以下の点が異なる。
【０１１１】
すなわち、再配置データ列更新部４２３は、書き込み対象のボリュームがスナップショットの複製元（マスタボリューム）であるとき、ボリューム間での論理チャンクの複製が必要となる複製元の論理チャンクおよび複製先の論理チャンクを次のように特定する。この場合、再配置データ列更新部４２３は、複製元の論理チャンクとして、書き込み対象のマスタボリュームにおける書き込み対象の論理チャンクを適用する。また、再配置データ列更新部４２３は、複製先の論理チャンクとして、書き込み対象のマスタボリュームから取得された最新のスナップショットにおいて書き込み対象の論理チャンクと同一アドレスの論理チャンクを適用する。なお、同一のマスタボリュームから取得されたスナップショットの新旧は、例えば、ツリー管理テーブルにおける登録順序によって表されていてもよい。
【０１１２】
また、再配置データ列更新部４２３は、書き込み対象のボリュームが差分クローンであるとき、ボリューム間で論理チャンクの複製が必要となる複製元の論理チャンクおよび複製先の論理チャンクを次のように特定する。この場合、再配置データ列更新部４２３は、複製元の論理チャンクとして、書き込み対象の差分クローンの複製元（エンティティボリューム）において書き込み対象の論理チャンクと同一アドレスの論理チャンクを適用する。また、再配置データ列更新部４２３は、複製先の論理チャンクとして、書き込み対象の差分クローンにおける書き込み対象の論理チャンクを適用する。
【０１１３】
次に、制御部４２の論理チャンク復元部４２２について説明する。
【０１１４】
論理チャンク復元部４２２は、本発明の第３の実施の形態における論理チャンク復元部３２２と略同様に構成されるが、以下の点が異なる。
【０１１５】
すなわち、論理チャンク復元部４２２は、読み込み対象のボリュームがスナップショットであるとき、参照先の論理チャンクを、次のようにして特定する。この場合、論理チャンク復元部４２２は、読み込み対象のスナップショットと同一のマスタボリュームから取得されたスナップショットのうち、当該スナップショットまたは当該スナップショットより新しいスナップショットを、検索対象のスナップショットとする。そして、論理チャンク復元部４２２は、検索対象のスナップショットの中で、読み込み対象の論理チャンクと同一アドレスの論理チャンクにおいてデータが管理されるスナップショットがあれば、そのうち最も古いスナップショットを特定する。そして、論理チャンク復元部４２２は、特定したスナップショットにおいて読み込み対象の論理チャンクと同一アドレスの論理チャンクを、参照先の論理チャンクとして適用する。
【０１１６】
ただし、検索対象のスナップショットの中で、読み込み対象の論理チャンクと同一アドレスの論理チャンクにおいてデータが管理されるスナップショットが１つもない場合もある。その場合、論理チャンク復元部４２２は、読み込み対象のスナップショットのマスタボリュームにおいて読み込み対象の論理チャンクと同一アドレスの論理チャンクを、参照先の論理チャンクとして適用する。ただし、このとき、読み込み対象のスナップショットのマスタボリュームが、スナップショットまたは差分クローンである場合も想定される。その場合、論理チャンク復元部４２２は、マスタボリュームを新たな読み込み対象として、読み込み対象のボリュームがスナップショットまたは差分クローンであるときと同様に動作するよう構成される。そして、論理チャンク復元部４２２は、新たな読み込み対象から得られたデータを、当初の読み込み対象のデータとして取得すればよい。
【０１１７】
また、論理チャンク復元部４２２は、読み込み対象のボリュームが差分クローンであるとき、参照先の論理チャンクを、次のようにして特定する。この場合、論理チャンク復元部４２２は、読み込み対象の差分クローンにおいて読み込み対象の論理チャンクのデータが管理されていれば、その論理チャンクを参照先の論理チャンクとして適用する。
【０１１８】
ただし、読み込み対象の差分クローンにおいて、読み込み対象の論理チャンクのデータが管理されていない場合もある。この場合、論理チャンク復元部４２２は、読み込み対象の差分クローンのエンティティボリュームにおいて読み込み対象の論理チャンクと同一アドレスの論理チャンクを、参照先の論理チャンクとして適用する。ただし、このとき、読み込み対象の差分クローンのエンティティボリュームが、スナップショットまたは差分クローンである場合も想定される。その場合、論理チャンク復元部４２２は、エンティティボリュームを新たな読み込み対象として、読み込み対象のボリュームがスナップショットまたは差分クローンであるときと同様に動作するよう構成される。そして、論理チャンク復元部４２２は、新たな読み込み対象から得られたデータを、当初の読み込み対象のデータとして取得すればよい。
【０１１９】
次に、制御部４２の管理情報更新部４２４について説明する。
【０１２０】
管理情報更新部４２４は、複数のボリュームのいずれかをマスタボリュームとしてスナップショットが取得されると、管理情報記憶部４１のツリー管理テーブルに次のエントリを追加する。ツリー管理テーブルに追加されるエントリは、親ボリュームとして、複製元であるマスタボリュームを表す情報と、子ボリュームとして、新しく取得されたスナップショットを表す情報と、複製手法として、スナップショットを表す情報とからなる。また、管理情報更新部４２４は、管理情報記憶部４１に、新しく取得されたスナップショットについての差分管理テーブルを追加する。追加される差分管理テーブルは、各論理チャンクについて差分が無いことを表すエントリからなる。
【０１２１】
また、管理情報更新部４２４は、複数のボリュームのいずれかをエンティティボリュームとして差分クローンが取得されると、管理情報記憶部４１のツリー管理テーブルに次のエントリを追加する。追加されるエントリは、親ボリュームとして、複製元であるエンティティボリュームを表す情報と、子ボリュームとして、新しく取得された差分クローンを表す情報と、複製手法として、差分クローンを表す情報とからなる。また、管理情報更新部４２４は、管理情報記憶部４１に、新しく取得された差分クローンについての差分管理テーブルを追加する。追加される差分管理テーブルは、各論理チャンクについて差分が無いことを表すエントリからなる。
【０１２２】
また、管理情報更新部４２４は、複数のボリュームのうちスナップショットのマスタボリュームにデータが書き込まれると、管理情報記憶部４１におけるそのマスタボリュームの最新のスナップショットの差分管理テーブルを、次のように更新する。すなわち、管理情報更新部４２４は、当該差分管理テーブルにおける書き込み対象の論理チャンクと同一アドレスの論理チャンクのエントリを、差分が有ることを表すよう更新する。
【０１２３】
また、管理情報更新部４２４は、複数のボリュームのうち差分クローンにデータが書き込まれると、管理情報記憶部４１において、その差分クローンの差分管理テーブルを、次のように更新する。すなわち、管理情報更新部４２４は、当該差分管理テーブルにおける書き込み対象の論理チャンクのエントリを、差分が有ることを表すよう更新する。
【０１２４】
次に、制御部４２の書き込み部４２５について説明する。
【０１２５】
書き込み部４２５は、本発明の第３の実施の形態における書き込み部３２５と略同様に構成されるが、以下の点が異なる。
【０１２６】
書き込み部４２５は、更新後の再配置データ列に基づく圧縮データ列をストレージ装置９１に書き込む際に、書き込み対象の論理チャンクに関連付けられた１つ以上の物理チャンクを、論物変換情報記憶部４３を参照することにより特定する。そして、書き込み部４２５は、特定した物理チャンクに、圧縮データ列を書き込む。ここで、圧縮データ列のサイズが、物理チャンク長より大きい場合がある。この場合、書き込み部４２５は、圧縮データ列を物理チャンク以下のサイズに分割して、関連付けられた各物理チャンクに書き込んでもよい。分割した圧縮データ列の書き込みは、例えば、関連付けられた１つ以上の物理チャンクのアドレスの若番から老番の順に行われてもよい。
【０１２７】
このとき、圧縮データ列の書き込みに必要となる物理チャンクの数が、書き込み対象の論理チャンクと同一アドレスの１つ以上の論理チャンクに関連付けられていた物理チャンクの数と同一でない場合がある。なお、書き込みに必要となる物理チャンクの数は、圧縮データ列のサイズおよび物理チャンクのサイズから算出可能である。もし、必要となる物理チャンクの数が、関連付けられている物理チャンクの数より多い場合、書き込み部４２５は、当該論理チャンクと同一アドレスの１つ以上の論理チャンクに、不足する数の物理チャンクを追加して関連付けた上で、書き込みを行う。もし、必要となる物理チャンクの数が、関連付けられている物理チャンクの数より少ない場合、書き込み部４２５は、当該論理チャンクと同一アドレスの１つ以上の論理チャンクに関連付けられている余分な数の物理チャンクを解放した上で、書き込みを行う。また、物理チャンクの追加または解放に伴い、書き込み部４２５は、論物変換テーブルを更新する。
【０１２８】
次に、制御部４２の読み込み部４２１について説明する。
【０１２９】
読み込み部４２１は、本発明の第３の実施の形態における読み込み部３２１と略同様に構成されるが、以下の点が異なる。
【０１３０】
すなわち、読み込み部４２１は、読み込み対象の論理チャンクに関連付けられた１つ以上の物理チャンクを、論物変換情報記憶部４３を参照することにより特定する。そして、読み込み部４２１は、特定した物理チャンクから、読み込み対象の論理チャンクを含む圧縮データ列を読み込む。もし、複数の物理チャンクが特定された場合、読み込み部４２１は、それらの物理チャンクから読み込んだデータ列を連結することにより、読み込み対象の論理チャンクを含む圧縮データ列を取得してもよい。連結は、例えば、物理チャンクのアドレスの若番から老番の順に行われてもよい。
【０１３１】
以上のように構成されたストレージ管理装置４０の動作について、図面を参照して説明する。
【０１３２】
＜ボリュームを複製する動作の説明＞
まず、ストレージ管理装置４０が、ボリュームを複製する動作を図１５に示す。
【０１３３】
図１５では、まず、制御部４２は、本発明の第３の実施の形態と同様にステップＡ１を実行し、ボリュームの複製を要求する情報を取得する。
【０１３４】
次に、管理情報更新部４２４は、親ボリュームとして、複製元のボリュームを表す情報と、子ボリュームとして、複製先のボリュームを表す情報と、複製手法を表す情報とを含むエントリを、管理情報記憶部４１のツリー管理テーブルに追加する（ステップＡ１２）。
【０１３５】
次に、管理情報更新部４２４は、管理情報記憶部４１に、複製先のボリュームについての差分管理テーブルを生成し、各論理チャンクについてのエントリを、複製元との差分が無いことを表すよう設定する。（ステップＡ１３）。
【０１３６】
なお、複製先のボリュームが生成された時点では、複製数管理テーブルは、更新されない。
【０１３７】
以上で、ストレージ管理装置４０は、ボリュームを複製する動作を終了する。
【０１３８】
＜データを読み込む動作の説明＞
次に、ストレージ管理装置４０が、ボリュームからデータを読み込む動作を、図１６〜図２０を参照して説明する。
【０１３９】
まず、ストレージ管理装置４０がボリュームからデータを読み込む動作の概略を図１６に示す。
【０１４０】
図１６では、まず、制御部４２は、本発明の第３の実施の形態と同様にステップＢ１を実行し、データの読み込みを要求する情報を取得する。
【０１４１】
次に、読み込み対象のボリュームがスナップショットである場合（ステップＢ１１でＹｅｓ）、制御部４２は、スナップショットからデータを読み込む動作を実行して読み込みデータ列を取得する（ステップＢ１２）。このステップの詳細については後述する。
【０１４２】
一方、読み込み対象のボリュームがスナップショットでなく（ステップＢ１１でＮｏ）、差分クローンである場合（ステップＢ１３でＹｅｓ）、制御部４２は、差分クローンからデータを読み込む動作を実行して読み込みデータ列を取得する（ステップＢ１４）。このステップの詳細については後述する。
【０１４３】
一方、読み込み対象のボリュームがスナップショットでも差分クローンでもない場合（ステップＢ１３でＮｏ）について説明する。この場合、制御部４２は、読み込み対象の論理チャンクを参照先の論理チャンクとする。そして、制御部４２は、参照先の論理チャンクからデータを読み込む動作を実行して読み込みデータ列を取得する（ステップＢ１５）。このステップの詳細については後述する。
【０１４４】
そして、制御部４２は、読み込みデータ列を出力する（ステップＢ１６）。
【０１４５】
以上で、ストレージ管理装置４０によってボリュームからデータを読み込む動作の概略の説明を終了する。
【０１４６】
次に、ステップＢ１２における、スナップショットからデータを読み込む動作の詳細を、図１７に示す。
【０１４７】
図１７では、まず、論理チャンク復元部４２２は、読み込み対象のスナップショットの世代を、検索世代に設定する（ステップＢ１２０１）。世代とは、そのスナップショットと同一のマスタボリュームから取得されたスナップショットの取得順序を表す情報であるものとする。
【０１４８】
次に、論理チャンク復元部４２２は、検索世代のスナップショットにおいて、読み込み対象の論理チャンクと同一アドレスの論理チャンクに差分が有るか否かを、管理情報記憶部４１を参照することにより判断する（ステップＢ１２０２）。
【０１４９】
ここで、検索世代のスナップショットに差分がある場合について説明する（ステップＢ１２０２でＹｅｓ）。この場合、論理チャンク復元部４２２は、検索世代のスナップショットにおいて読み込み対象の論理チャンクと同一のアドレスの論理チャンクを、参照先の論理チャンクとする。そして、論理チャンク復元部４２２は、参照先の論理チャンクを読み込む動作を実行する（ステップＢ１２０７）。これにより、読み込みデータ列が得られる。このステップの詳細については後述する。
【０１５０】
一方、検索世代のスナップショットに差分がない場合について説明する（ステップＢ１２０２でＮｏ）。この場合、論理チャンク復元部４２２は、検索世代が、読み込み対象のスナップショットと同一のマスタボリュームから取得された最新の世代であるか否かを判断する（ステップＢ１２０３）。
【０１５１】
ここで、検索世代が最新の世代でない場合（ステップＢ１２０３でＮｏ）、論理チャンク復元部４２２は、現在の検索世代より１つ新しい世代を新たな検索世代に設定する（ステップＢ１２０８）。そして、論理チャンク復元部４２２は、ステップＢ１２０２からの動作を繰り返す。
【０１５２】
このように、論理チャンク復元部４２２は、読み込み対象のスナップショットの世代から最新世代のスナップショットまで、古い世代から新しい世代の順に、読み込み対象の論理チャンクに関する差分の有無を検索し、差分が存在した時点で検索を終了する。そして、論理チャンク復元部４２２は、最初に差分が存在したスナップショットにおける、読み込み対象の論理チャンクと同一アドレスの論理チャンクを、参照先の論理チャンクとして読み込みを行う。
【０１５３】
一方、検索世代が最新の世代である場合について説明する（ステップＢ１２０３でＹｅｓ）。つまり、読み込み対象のスナップショットまたはそれより新しい世代のスナップショットのいずれにも、読み込み対象の論理チャンクと同一アドレスの論理チャンクのデータが管理されていない場合である。
【０１５４】
このとき、読み込み対象のスナップショットのマスタボリュームが、スナップショットであるとする（ステップＢ１２０４でＹｅｓ）。この場合、論理チャンク復元部４２２は、スナップショットのマスタボリュームであるスナップショットを新たな読み込み対象として、スナップショットからデータを読み込む動作（すなわち、ステップＢ１２０１からの動作）を実行する（ステップＢ１２０５）。これにより、読み込みデータ列が得られる。
【０１５５】
また、読み込み対象のスナップショットのマスタボリュームが差分クローンであるとする（ステップＢ１２０４でＮｏ、ステップＢ１２０９でＹｅｓ）。この場合、論理チャンク復元部４２２は、スナップショットのマスタボリュームである差分クローンを新たな読み込み対象として、差分クローンからデータを読み込む動作を実行する（ステップＢ１２１０）。これにより、読み込みデータ列が得られる。このステップの詳細については後述する。
【０１５６】
また、読み込み対象のスナップショットのマスタボリュームがスナップショットでも差分クローンでもないとする（ステップＢ１２０４でＮｏ、ステップＢ１２０９でＮｏ）。この場合、論理チャンク復元部４２２は、スナップショットのマスタボリュームにおける読み込み対象の論理チャンクと同一アドレスの論理チャンクを、参照先の論理チャンクとする。そして、論理チャンク復元部４２２は、参照先の論理チャンクからデータを読み込む動作を実行する（ステップＢ１２１１）。これにより、読み込みデータ列が得られる。このステップの詳細については後述する。
【０１５７】
そして、論理チャンク復元部４２２は、ステップＢ１２０５、Ｂ１２１０、Ｂ１２１１またはＢ１２０７で得られた読み込みデータ列を返却する（ステップＢ１２０６）。
【０１５８】
以上で、スナップショットからデータを読み込む動作の説明を終了する。
【０１５９】
次に、ステップＢ１４における差分クローンからデータを読み込む動作の詳細を、図１８に示す。
【０１６０】
図１８では、まず、論理チャンク復元部４２２は、読み込み対象の差分クローンにおいて、読み込み対象の論理チャンクに関する差分が有るか否かを、管理情報記憶部４１を参照して判断する（ステップＢ１４０１）。
【０１６１】
ここで、読み込み対象の論理チャンクに関する差分が有る場合について説明する（ステップＢ１４０１でＹｅｓ）。この場合、論理チャンク復元部４２２は、読み込み対象の論理チャンクを参照先の論理チャンクとする。そして、論理チャンク復元部４２２は、参照先の論理チャンクからデータを読み込む動作を実行する（ステップＢ１４０５）。これにより、読み込みデータ列が得られる。このステップの詳細については後述する。
【０１６２】
一方、読み込み対象の論理チャンクに関する差分が無い場合について説明する（ステップＢ１４０１でＮｏ）。
【０１６３】
このとき、読み込み対象の差分クローンのエンティティボリュームがスナップショットであるとする（ステップＢ１４０２でＹｅｓ）。この場合、論理チャンク復元部４２２は、差分クローンのエンティティボリュームであるスナップショットを新たな読み込み対象として、図１７に示したスナップショットからデータを読み込む動作を実行する（ステップＢ１４０３）。これにより、読み込みデータ列が得られる。
【０１６４】
また、読み込み対象の差分クローンのエンティティボリュームが差分クローンであるとする（ステップＢ１４０２でＮｏ、ステップＢ１４０６でＹｅｓ）。この場合、論理チャンク復元部４２２は、差分クローンのエンティティボリュームである差分クローンを新たな読み込み対象として、差分クローンからデータを読み込む動作（すなわち、ステップＢ１４０１からの動作）を実行する（ステップＢ１４０７）。これにより、読み込みデータ列が得られる。
【０１６５】
また、読み込み対象の差分クローンのエンティティボリュームがスナップショットでも差分クローンでもないとする（ステップＢ１４０２でＮｏ、ステップＢ１４０６でＮｏ）。この場合、論理チャンク復元部４２２は、差分クローンのエンティティボリュームにおける読み込み対象の論理チャンクと同一アドレスの論理チャンクを、参照先の論理チャンクとする。そして、論理チャンク復元部４２２は、参照先の論理チャンクからデータを読み込む動作を実行する（ステップＢ１４０８）。これにより、読み込みデータ列が得られる。このステップの詳細については後述する。
【０１６６】
そして、論理チャンク復元部４２２は、ステップＢ１４０３、Ｂ１４０７、Ｂ１４０８またはＢ１４０５で得られた読み込みデータ列を返却する（ステップＢ１４０４）。
【０１６７】
以上で、差分クローンからデータを読み込む動作の説明を終了する。
【０１６８】
次に、ステップＢ１５、Ｂ１２０７、Ｂ１２１１、Ｂ１４０５、Ｂ１４０８における参照先の論理チャンクからデータを読み込む動作の詳細を、図１９に示す。
【０１６９】
図１９では、まず、読み込み部４２１は、参照先の論理チャンクと同一アドレスの論理チャンクの圧縮データ列を記憶している１つ以上の物理チャンクを、論物変換情報記憶部４３を参照することにより特定する（ステップＢ２００１）。
【０１７０】
次に、読み込み部４２１は、特定した１つ以上の物理チャンクから、圧縮データ列を読み込む（ステップＢ２００２）。
【０１７１】
ここで、ステップＢ２００１において、複数の物理チャンクが特定されていたとする。この場合、ステップＢ２００２において、読み込み部４２１は、各物理チャンクについてストレージ装置９１から読み込んだデータ列を連結して、圧縮データ列とする。
【０１７２】
次に、読み込み部４２１は、圧縮データ列を伸長し、再配置データ列を取得する（ステップＢ２００３）。
【０１７３】
次に、論理チャンク復元部４２２は、参照先の論理チャンクの複製数を、管理情報記憶部４１から取得する。また、論理チャンク復元部４２２は、参照先の論理チャンクの複製番号を取得する（ステップＢ２００４）。
【０１７４】
なお、複製番号とは、複数のボリュームにおいて同一アドレスの論理チャンクの中での順序を表すものとする。複製番号は、例えば、親子関係や新旧関係に基づいて定まる。例えば、複製関係のルートとなるルートボリュームにおける各論理チャンクの複製番号は、０であってもよい。また、他のボリュームにおいて管理されるその論理チャンクの複製番号は、階層構造においてルートボリュームから近いボリュームに含まれるものから順に割り当てられた値であってもよい。また、同一の複製元から複製された複数のボリューム間での論理チャンクの複製番号は、取得時点が古いボリュームに含まれるものから順に割り当てられた値であってもよい。
【０１７５】
次に、論理チャンク復元部４２２は、複製数および複製番号を用いて、ステップＢ２００３で取得した再配置データ列から、参照先の論理チャンクを復元する（ステップＢ２００５）。このステップの詳細については後述する。
【０１７６】
そして、論理チャンク復元部４２２は、ステップＢ２００５で得られた読み込みデータ列を返却する（ステップＢ２００６）。
【０１７７】
以上で、参照先の論理チャンクからデータを読み込む動作の説明を終了する。
【０１７８】
次に、ステップＢ２００５における、論理チャンクを復元する動作の詳細を、図２０に示す。ここでは、対象となる再配置データ列におけるオフセットをｉと表し、復元する論理チャンクである読み込みデータ列におけるオフセットをｊと表すことにする。
【０１７９】
また、この動作は、対象となる再配置データ列と、参照先の論理チャンクの複製数および複製番号とが指定されて実行される。
【０１８０】
図２０では、まず、論理チャンク復元部４２２は、ｉとして複製番号を設定する（ステップＢ２１０１）。
【０１８１】
次に、論理チャンク復元部４２２は、ｊとして０を設定する（ステップＢ２１０２）。
【０１８２】
次に、論理チャンク復元部４２２は、再配置データ列におけるオフセットｉのサブチャンクを読み込む（ステップＢ２１０３）。
【０１８３】
次に、論理チャンク復元部４２２は、読み込みデータ列におけるオフセットｊのサブチャンクに、ステップＢ２１０３で読み込んだサブチャンクを書き込む（ステップＢ２１０４）。
【０１８４】
次に、論理チャンク復元部４２２は、読み込みデータ列におけるオフセットであるｊが、論理チャンクを構成するサブチャンクの数に達したか否かを判断する（ステップＢ２１０５）。
【０１８５】
ここで、達していないと判断した場合（ステップＢ２１０５でＮｏ）、論理チャンク復元部４２２は、ｉに複製数を加算する（ステップＢ２１０６）。
【０１８６】
次に、論理チャンク復元部４２２は、ｊに１を加算する（ステップＢ２１０７）。
【０１８７】
そして、論理チャンク復元部４２２は、ステップＢ２１０３からの動作を繰り返す。
【０１８８】
一方、ｊが論理チャンクを構成するサブチャンクの数に達したと判断した場合（ステップＢ２１０５でＹｅｓ）、論理チャンク復元部４２２は、読み込みデータ列を返却する（ステップＢ２１０８）。
【０１８９】
以上で、論理チャンクを復元する動作の説明を終了する。
【０１９０】
＜データを書き込む動作の説明＞
次に、ストレージ管理装置４０が、ボリュームにデータを書き込む動作を、図２１〜図２７を参照して説明する。
【０１９１】
まず、ストレージ管理装置４０がボリュームにデータを書き込む動作の概略を図２１に示す。
【０１９２】
図２１では、まず、制御部４２は、本発明の第３の実施の形態と同様にステップＣ１を実行し、データの書き込みを要求する情報を取得する。
【０１９３】
次に、書き込み対象のボリュームがスナップショットのマスタボリュームである場合（ステップＣ１１で「スナップショットのマスタボリューム」）、制御部４２は、スナップショットのマスタボリュームへデータを書き込む動作を実行する（ステップＣ１２）。このステップの詳細については後述する。
【０１９４】
一方、書き込み対象のボリュームが差分クローンである場合（ステップＣ１２で「差分クローン」）、制御部４２は、差分クローンへデータを書き込む動作を実行する（ステップＣ１３）。このステップの詳細については後述する。
【０１９５】
なお、スナップショットの性質上、書き込み対象のボリュームがスナップショットであるケースについては考慮しないものとする。
【０１９６】
以上で、ストレージ管理装置４０によってボリュームにデータを書き込む動作の概略の説明を終了する。
【０１９７】
次に、ステップＣ１２における、スナップショットのマスタボリュームへデータを書き込む動作の詳細を、図２２に示す。
【０１９８】
図２２において、まず、再配置データ列更新部４２３は、複製元の論理チャンクとして、書き込み対象のマスタボリュームにおける書き込み対象の論理チャンクを設定する（ステップＣ１２０１）。
【０１９９】
次に、再配置データ列更新部４２３は、複製先の論理チャンクとして、書き込み対象のマスタボリュームから取得された最新のスナップショットにおいて書き込み対象の論理チャンクと同一アドレスの論理チャンクを設定する（ステップＣ１２０２）。
【０２００】
次に、再配置データ列更新部４２３は、複製元の論理チャンク、複製先の論理チャンク、書き込み対象の論理チャンク、および、書き込みデータ列を指定して、再配置データ列を更新する動作を実行する（ステップＣ１２０３）。このステップの詳細については後述する。
【０２０１】
次に、書き込み部４２５は、更新された再配置データ列を圧縮してストレージ装置９１に記憶する(ステップＣ１２０４）。このステップの詳細については後述する。
【０２０２】
以上で、スナップショットのマスタボリュームへデータを書き込む動作の説明を終了する。
【０２０３】
次に、ステップＣ１３における差分クローンへデータを書き込む動作の詳細を、図２３に示す。
【０２０４】
図２３では、まず、再配置データ列更新部４２３は、複製元の論理チャンクとして、書き込み対象の差分クローンのエンティティボリュームにおける書き込み対象の論理チャンクと同一アドレスの論理チャンクを設定する（ステップＣ１３０１）。
【０２０５】
次に、再配置データ列更新部４２３は、複製先の論理チャンクとして、書き込み対象の差分クローンにおける書き込み対象の論理チャンクを設定する（ステップＣ１３０２）。
【０２０６】
次に、再配置データ列更新部４２３は、複製元の論理チャンク、複製先の論理チャンク、書き込み対象の論理チャンク、および、書き込みデータ列を指定して、再配置データ列を更新する動作を実行する（ステップＣ１３０３）。このステップの詳細については後述する。
【０２０７】
次に、書き込み部４２５は、更新された再配置データ列を圧縮してストレージ装置９１に記憶する(ステップＣ１３０４）。このステップの詳細については後述する。
【０２０８】
以上で、差分クローンへデータを書き込む動作の説明を終了する。
【０２０９】
次に、ステップＣ１２０３、Ｃ１３０３における、再配置データ列を更新する動作の詳細を、図２４に示す。
【０２１０】
図２４では、まず、読み込み部４２１は、書き込み対象の論理チャンクと同一アドレスの論理チャンクについて圧縮データ列を記憶している１つ以上の物理チャンクを、論物変換情報記憶部４３を参照することにより特定する（ステップＣ２００１）。
【０２１１】
次に、読み込み部４２１は、特定した物理チャンクから、圧縮データ列を読み込む（ステップＣ２００２）。
【０２１２】
ここで、ステップＣ２００１において、複数の物理チャンクが特定されていた場合、図１９に示したステップＢ２００１〜Ｂ２００２において説明したように、読み込み部４２１は、各物理チャンクについて読み込んだデータ列を連結して圧縮データ列とする。
【０２１３】
次に、読み込み部４２１は、圧縮データ列を伸長し、再配置データ列を取得する（Ｃ２００３）。
【０２１４】
次に、再配置データ列更新部４２３は、複製先の論理チャンクに、複製元との間の差分が有るか否かを、管理情報記憶部４１の差分管理テーブルを参照することにより判断する（ステップＣ２００４）。
【０２１５】
ここで、差分が無い場合について説明する（ステップＣ２００４でＮｏ）。この場合、管理情報更新部４２４は、複製先の論理チャンクを含むボリュームの差分管理テーブルにおいて、複製先の論理チャンクのエントリを、複製元との差分が有ることを表すよう更新する（ステップＣ２００５）。
【０２１６】
次に、管理情報更新部４２４は、複製数管理テーブルにおいて、複製先の論理チャンクのアドレスのエントリを、複製数に１を加算して更新する（ステップＣ２００６）。
【０２１７】
次に、再配置データ列更新部４２３は、再配置データ列から、複製元の論理チャンクを復元する（ステップＣ２００７）。具体的には、再配置データ列更新部４２３は、複製元の論理チャンクの複製番号および複製数を指定して、図２０を参照して説明した参照先の論理チャンクを復元する動作と同様の動作を実行すればよい。
【０２１８】
次に、再配置データ列更新部４２３は、複製元の論理チャンクのデータが複製先の論理チャンクに複製されたことを表すよう、再配置データ列を再配置して更新する（ステップＣ２００８）。このステップの詳細については後述する。
【０２１９】
次に、再配置データ列更新部４２３は、再配置データ列において、書き込み対象の論理チャンクを書き込みデータ列で更新する（ステップＣ２００９）。このステップの詳細については後述する。
【０２２０】
そして、再配置データ列更新部４２３は、更新した再配置データ列を返却する（ステップＣ２０１０）。
【０２２１】
一方、複製先の論理チャンクに複製元との間の差分が有った場合（ステップＣ２００４でＹｅｓ）について説明する。この場合、ストレージ管理装置４０は、ステップＣ２００５〜Ｃ２００８）を実行せずにステップＣ２００９〜Ｃ２０１０を実行することにより、更新した再配置データ列を返却する。
【０２２２】
以上で、再配置データ列を更新する動作の説明を終了する。
【０２２３】
次に、ステップＣ２００８において論理チャンクを複製して再配置データ列を更新する動作の詳細を、図２５に示す。ここでは、再配置データ列におけるオフセットをｉで表す。また、複製元の論理チャンクにおけるオフセットをｊで表す。
【０２２４】
図２５では、まず、再配置データ列更新部４２３は、複製先の論理チャンクの複製番号を、ｉに設定する（ステップＣ２１０１）。
【０２２５】
次に、再配置データ列更新部４２３は、ｊに０を設定する（ステップＣ２１０２）。
【０２２６】
次に、再配置データ列更新部４２３は、再配置データ列におけるオフセットｉ以降末尾までのサブチャンクを読み込む（ステップＣ２１０３）。
【０２２７】
次に、再配置データ列更新部４２３は、ステップＣ２１０３で読み込んだサブチャンクを、再配置データ列におけるオフセット（ｉ＋１）以降に書き込む（ステップＣ２１０４）。再配置データ列のサイズは、このステップの実行前よりサブチャンク１つ分長くなる。
【０２２８】
次に、再配置データ列更新部４２３は、ステップＣ２００７で復元された複製元の論理チャンクにおいて、オフセットｊのサブチャンクを読み込む（ステップＣ２１０５）。
【０２２９】
次に、再配置データ列更新部４２３は、ステップＣ２１０４で読み込んだサブチャンクを、再配置データ列におけるオフセットｉのサブチャンクに書き込む（ステップＣ２１０６）。
【０２３０】
次に、再配置データ列更新部４２３は、ｊが、論理チャンクを構成するサブチャンクの数に達したか否かを判断する（ステップＣ２１０７）。
【０２３１】
ここで、達していないと判断した場合（ステップＣ２１０７でＮｏ）、再配置データ列更新部４２３は、ｉに複製数を加算する（ステップＣ２１０８）。
【０２３２】
次に、再配置データ列更新部４２３は、ｊに１を加算する（ステップＣ２１０９）。
【０２３３】
そして、再配置データ列更新部４２３は、ステップＣ２１０３からの動作を繰り返す。
【０２３４】
一方、ｊが論理チャンクを構成するサブチャンクの数に達した場合（ステップＣ２１０７でＹｅｓ）、再配置データ列更新部４２３は、再配置データ列を返却する（ステップＣ２１１０）。
【０２３５】
以上で、論理チャンクを複製して再配置データ列を更新する動作の説明を終了する。
【０２３６】
次に、ステップＣ２００９において、書き込みデータ列を書き込んで再配置データ列を更新する動作の詳細を、図２６に示す。ここでは、書き込みデータ列におけるオフセットをｊで表す。また、再配置データ列におけるオフセットをｉで表す。
【０２３７】
図２６では、まず、再配置データ列更新部４２３は、ｉに書き込み対象の論理チャンクの複製番号を設定する（ステップＣ２２０１）。
【０２３８】
次に、再配置データ列更新部４２３は、ｊに０を設定する（ステップＣ２２０２）。
【０２３９】
次に、再配置データ列更新部４２３は、書き込みデータ列におけるオフセットｊのサブチャンクを読み込む（ステップＣ２２０３）。
【０２４０】
次に、再配置データ列更新部４２３は、ステップＣ２２０３で読み込んだサブチャンクを、再配置データ列におけるオフセットｉのサブチャンクに書き込む（ステップＣ２２０４）。
【０２４１】
次に、再配置データ列更新部４２３は、ｊが、論理チャンクを構成するサブチャンクの数に達したか否かを判断する（ステップＣ２２０５）。
【０２４２】
ここで、達していない場合（ステップＣ２２０５でＮｏ）、再配置データ列更新部４２３は、ｉに複製数を加算する（ステップＣ２２０６）。
【０２４３】
次に、再配置データ列更新部４２３は、ｊに１を加算する（ステップＣ２２０７）。
【０２４４】
そして、再配置データ列更新部４２３は、ステップＣ２２０３からの動作を繰り返す。
【０２４５】
一方、ｊが書き込みデータ列を構成するサブチャンクの数に達した場合（ステップＣ２２０５でＹｅｓ）、再配置データ列更新部４２３は、再配置データ列を返却する（ステップＣ２２０８）。
【０２４６】
以上で、書き込みデータ列を書き込んで再配置データ列を更新する動作の説明を終了する。
【０２４７】
次に、ステップＣ１４０４において、更新された再配置データ列を圧縮してストレージ装置９１に書き込む動作の詳細を図２７に示す。
【０２４８】
図２７では、まず、書き込み部４２５は、対象の再配置データ列を圧縮して、圧縮データ列を生成する（ステップＣ２３０１）。
【０２４９】
次に、書き込み部４２５は、生成された圧縮データ列を物理チャンク長で分割する（ステップＣ２３０２）。分割されたデータ列を、分割圧縮データ列とも記載する。
【０２５０】
次に、書き込み部４２５は、書き込み対象の論理チャンクのアドレスに関連付けられた１つ以上の物理チャンクのアドレスを取得する（ステップＣ２３０３）。
【０２５１】
次に、書き込み部４２５は、ステップＣ２３０２で分割された分割圧縮データ列の数が、ステップＣ２３０３で取得された物理チャンクの数と等しいか否かを判断する（ステップＣ２３０４）。
【０２５２】
ここで、分割圧縮データ列の数が物理チャンクの数と等しくなく、物理チャンクの数より多い場合（ステップＣ２３０４でＮｏ、Ｃ２３０５でＹｅｓ）について説明する。この場合、書き込み部４２５は、不足する数の物理チャンクを取得する（ステップＣ２３０６）。
【０２５３】
そして、書き込み部４２５は、新たに取得した物理チャンクのアドレスと、書き込み対象の論理チャンクのアドレスとを関連付けたエントリを、論物変換情報記憶部４３の論物変換テーブルに追加する（ステップＣ２３０７）。そして、動作は、後述のステップＣ２３１０に進む。
【０２５４】
また、分割圧縮データ列の数が物理チャンクの数以下である場合（ステップＣ２３０４でＮｏ、Ｃ２３０５でＮｏ）について説明する。この場合、書き込み部４２５は、不要となる数の物理チャンクを解放する（ステップＣ２３０８）。
【０２５５】
そして、書き込み部４２５は、解放した物理チャンクのアドレスと、書き込み対象の論理チャンクのアドレスとを関連付けたエントリを、論物変換情報記憶部４３の論物変換テーブルから削除する（ステップＣ２３０９）。そして、動作は、後述のステップＣ２３１０に進む。
【０２５６】
また、分割圧縮データ列の数が物理チャンクの数に等しい場合（ステップＣ２３０４でＹｅｓ）について説明する。この場合、動作は、次のステップＣ２３１０に進む。
【０２５７】
次に、再配置データ列更新部４２３は、各分割圧縮データ列を、書き込み対象の論理チャンクのアドレスに関連付けられた１つ以上の物理チャンクに、それぞれ書き込む（ステップＣ２３１０）。
【０２５８】
例えば、再配置データ列更新部４２３は、取得された物理チャンクのうちアドレスが若番の物理チャンクから老番の物理チャンクの順に、先頭の分割圧縮データ列から順次書き込めばよい。
【０２５９】
以上で、更新された再配置データ列を圧縮してストレージ装置９１に書き込む動作の説明を終了する。
【０２６０】
＜具体例＞
次に、ストレージ管理装置４０の動作を具体例で示す。
【０２６１】
ここでは、前述したように、アドレスが＃ＸＸＸＸの論理チャンクを、論理チャンク＃ＸＸＸＸとも記載する。また、１つ以上の論理チャンク＃ＸＸＸＸに基づく再配置データ列を、再配置データ列＃ＸＸＸＸとも記載する。また、再配置データ列＃ＸＸＸＸが圧縮された圧縮データ列を、圧縮データ列＃ＸＸＸＸとも記載する。さらに、アドレスが＃ＹＹＹＹの物理チャンクを、物理チャンク＃ＹＹＹＹとも記載する。
【０２６２】
図２８は、この具体例におけるボリューム間の複製関係の階層構造を模式的に示した図である。ボリュームＡは、階層構造のルートとなるマスタボリュームであり、４つの論理チャンク＃００００〜＃０００３にデータを保存している。
【０２６３】
また、図２８において、スナップショットＢ１は、ボリュームＡのある時点におけるスナップショットを表すボリュームである。また、スナップショットＢ１は、論理チャンク＃００００および＃０００２において、当該スナップショットの取得時点のデータを管理している。これは、スナップショットＢ１の取得時以降に、マスタボリュームであるボリュームＡにおいて論理チャンク＃００００および＃０００２のデータが更新されたことを表している。
【０２６４】
なお、図２８には、ボリュームＡをマスタボリュームとする１つのスナップショットＢ１を示しているが、同一のボリュームＡをマスタボリュームとして異なる時点に複数のスナップショットＢ１〜Ｂｎ（ｎは１以上の整数）が取得されてもよい。
【０２６５】
また、図２８において、差分クローンＣ１およびＣ２は、それぞれ、スナップショットＢ１をエンティティボリュームとする差分クローンを表すボリュームである。差分クローンＣ１は、生成された後、論理チャンク＃０００２のデータが更新されたため、当該論理チャンクにおいて、更新後のデータを管理している。また、差分クローンＣ２は、生成された後、論理チャンク＃００００および＃０００１のデータが更新されたため、これらの論理チャンクにおいて、更新後のデータを管理している。
【０２６６】
なお、図２８には、スナップショットＢ１をエンティティボリュームとする２つの差分クローンＣ１およびＣ２を示しているが、同一のスナップショットＢ１をエンティティボリュームとする複数の差分クローンＣ１〜Ｃｍ（ｍは１以上の整数）が取得されてもよい。
【０２６７】
図２９は、この具体例において管理情報記憶部４１に記憶されるツリー管理テーブルの一例である。例えば、１行目は、スナップショットＢ１が、ボリュームＡをマスタボリュームとするスナップショットであることを表している。
【０２６８】
なお、ツリー管理テーブルにおいて、同一のマスタボリュームから取得されたスナップショット間、または、同一のエンティティボリュームから取得された差分クローン間では、ツリー管理テーブルへの登録順により新旧関係が識別されるものとする。
【０２６９】
図３０は、この具体例において管理情報記憶部４１に記憶される差分管理テーブルの一例である。差分管理テーブルは、いずれかのボリュームの複製先となっているボリュームＢ１、Ｃ１、Ｃ２について生成されている。例えば、スナップショットＢ１の差分管理テーブルの１行目は、スナップショットＢ１の論理チャンク＃００００において、複製元であるボリュームＡとの間に差分が有ることを表している。
【０２７０】
図３１は、この具体例において管理情報記憶部４１に記憶される複製数管理テーブルの一例である。例えば、複製数管理テーブルの１行目は、アドレス＃００００の論理チャンクの複製数が３であることを表している。
【０２７１】
図３２は、この具体例において論物変換情報記憶部４３に記憶される論物変換テーブルの一例である。例えば、論物変換テーブルの１行目は、物理チャンク＃００００には、圧縮データ列＃００００が格納されることを表している。同様に、論物変換テーブルの５行目は、物理チャンク＃０００４にも、圧縮データ列＃００００が格納されることを表している。つまり、この例の場合、圧縮データ列＃００００は、物理チャンク＃００００および＃０００４に分割されて格納され得ることを表している。
【０２７２】
＜＜データの読み込みの具体例＞＞
次に、この具体例において、ストレージ装置９１に記憶されるデータを読み込む動作を、模式的に図３３に示す。図３３において、Ｐ０〜Ｐ５は、圧縮データ列＃００００を表す。また、Ｑ０〜Ｑ２は、圧縮データ列＃０００１を表す。また、Ｒ０〜Ｒ３は、圧縮データ列＃０００２を表す。また、Ｓ０〜Ｓ２は、圧縮データ列＃０００３を表す。また、例えば、１つ以上の論理チャンク＃００００には、物理チャンク＃００００および＃０００４が関連付けられている。そして、物理チャンク＃００００には、圧縮データ列＃００００であるＰ０〜Ｐ５が物理チャンクのサイズ以下に分割されたＰ０〜Ｐ３が格納されている。また、物理チャンク＃０００４には、圧縮データ列＃００００であるＰ０〜Ｐ５が物理チャンクのサイズ以下に分割されたＰ４〜Ｐ５が格納されている。
【０２７３】
例えば、制御部４２が、読み込み対象として、差分クローンＣ１の論理チャンク＃００００の読み込みを要求する情報を取得したとする（図１６：ステップＢ１、Ｂ１１でＮｏ、Ｂ１３でＹｅｓ、Ｂ１４）。
【０２７４】
この場合、差分クローンＣ１は、論理チャンク＃００００のデータを管理していない（図１８：ステップＢ１４０１でＮｏ）。そこで、制御部４２は、エンティティボリュームであるスナップショットＢ１における論理チャンク＃００００を新たな読み込み対象として、スナップショットからデータを読み込む動作を実行する（Ｂ１４０２でＹｅｓ、Ｂ１４０３）。
【０２７５】
ここで、スナップショットＢ１は、論理チャンク＃００００のデータを管理している（図１７：ステップＢ１２０１、Ｂ１２０２でＹｅｓ）。そこで、制御部４２は、スナップショットＢ１の論理チャンク＃００００を参照先の論理チャンクとして、参照先の論理チャンクからデータを読み込む動作を実行する（ステップＢ１２０７）。
【０２７６】
ここでは、読み込み部４２１は、まず、論物変換テーブルから、論理チャンク＃００００に関連付けられた物理チャンク＃００００および＃０００４を特定する（図１９：ステップＢ２００１）。
【０２７７】
そして、読み込み部４２１は、物理チャンク＃００００および＃０００４からデータ列を読み込んで連結し、圧縮データ列＃００００であるＰ０〜Ｐ５を取得する（ステップＢ２００２）。その後、読み込み部４２１は、圧縮データ列＃００００を伸長し、再配置データ列＃００００「０００１１ＳＸ２２３３３」を取得する（ステップＢ２００３）。
【０２７８】
そして、論理チャンク復元部４２２は、複製数管理テーブルから、アドレス＃００００の複製数として３を取得する。また、論理チャンク復元部４２２は、ツリー管理テーブルから、スナップショットＢ１の論理チャンク＃００００は、複製番号が１であることを算出する（ステップＢ２００４）。
【０２７９】
なお、この具体例では、ボリュームＡの論理チャンク＃００００の複製番号が０であり、ボリュームＢ１の論理チャンク＃００００の複製番号が１であり、ボリュームＣ２の論理チャンク＃００００の複製番号が２であるものとする。
【０２８０】
次に、論理チャンク復元部４２２は、ボリュームＢ１の論理チャンク＃００００の複製番号である１と、論理チャンク＃００００の複製数である３とを用いて、論理チャンクを復元する動作を実行する（ステップＢ２００５）。すなわち、論理チャンク復元部４２２は、再配置データ列＃００００「０００１１ＳＸ２２３３３」から、オフセット１、４、７、１１のサブチャンクを読み込んで連結し、スナップショットＢ１の論理チャンク＃００００として「０１２３」を得る。
【０２８１】
そして、論理チャンク復元部４２２は、取得した「０１２３」を、差分クローンＣ１の論理チャンク＃００００の読み込みデータ列として返却する（図１８：ステップＢ１４０４）。
【０２８２】
以上で、データを読み込む動作の具体例の説明を終了する。
【０２８３】
＜＜データの書き込みの具体例＞＞
次に、データを書き込む動作の具体例について、図３４〜３５を用いて説明する。ここでは、図３４に示すように、４つの書き込み要求を想定して説明する。図３４において、白抜きの矢印は、書き込み対象となる論理チャンクのオフセットの位置を示す。また、矩形で囲まれたアルファベットは、書き込みデータを示す。また、実線の矢印は、書き込みに応じてボリューム間で必要となる論理チャンクの複製を示す。
【０２８４】
図３４において、１つ目の書き込み要求は、マスタボリュームであるボリュームＡの論理チャンク＃０００１のオフセット２の位置に、データ「Ｚ」を書き込む要求である。２つ目の書き込み要求は、差分クローンＣ１の論理チャンク＃００００のオフセット０の位置に、データ「Ｍ」を書き込む要求である。３つ目の書き込み要求は、差分クローンＣ１の論理チャンク＃０００２のオフセット２の位置に、データ「Ｎ」を書き込む要求である。４つ目の書き込み要求は、差分クローンＣ２の論理チャンク＃０００３のオフセット２の位置に、データ「Ｖ」を書き込む要求である。
【０２８５】
これらの４つの書き込み要求の具体例について、説明する。
【０２８６】
＜＜書き込みの具体例１：書き込み対象のボリュームがマスタボリュームの場合＞＞
まず、制御部４２が、ボリュームＡの論理チャンク＃０００１に対して、オフセット２の位置にデータ「Ｚ」の書き込みを要求する情報を取得した場合について説明する（図２１：ステップＣ１、Ｃ１１で「スナップショットのマスタボリューム」、Ｃ１２）。
【０２８７】
この場合、まず、論理チャンク復元部４２２は、この書き込み要求に応じてボリューム間で論理チャンクの複製が必要となる複製元の論理チャンクとして、書き込み対象であるボリュームＡの論理チャンク＃０００１を特定する。また、論理チャンク復元部４２２は、複製先の論理チャンクとして、書き込み対象のボリュームＡの最新のスナップショットであるスナップショットＢ１の論理チャンク＃０００１を特定する（図２２：ステップＣ１２０１、Ｃ１２０２）。
【０２８８】
次に、読み込み部４２１は、上述した読み込みの具体例と略同様に、ストレージ装置９１から読み込んだ圧縮データ列＃０００１を伸長し、再配置データ列＃０００１「４４５５６Ｔ７Ｕ」を取得する（図２４：ステップＣ２００１〜Ｃ２００３）。なお、この時点で取得される再配置データ列＃０００１は、書き込み前であるため、図３３に示した通りである。
【０２８９】
ここで、スナップショットＢ１は、複製先の論理チャンク＃０００１のデータを管理していない（ステップＣ２００４でＮｏ）。そこで、管理情報更新部４２４は、スナップショットＢ１の差分管理テーブルにおいて、アドレス＃０００１のエントリを、差分有りを表すよう更新する。また、管理情報更新部４２４は、複製数管理テーブルにおいて、アドレス＃０００１の複製数に１を加算して更新する（ステップＣ２００５、Ｃ２００６）。
【０２９０】
次に、論理チャンク復元部４２２は、再配置データ列＃０００１「４４５５６Ｔ７Ｕ」から、複製元の論理チャンクであるボリュームＡの論理チャンク＃０００１「４５６７」を復元する（ステップＣ２００７）。
【０２９１】
そして、再配置データ列更新部４２３は、スナップショットＢ１の複製先の論理チャンク＃０００１に、ボリュームＡの複製元の論理チャンク＃０００１のデータが複製されたことを表すよう、再配置データ列を更新する動作を実行する（ステップＣ２００８）。これにより、再配置データ列＃０００１は、「４４４５５５６６Ｔ７７Ｕ」となる。
【０２９２】
さらに、再配置データ列更新部４２３は、書き込み対象の論理チャンクであるボリュームＡの論理チャンク＃０００１のオフセット２の位置に、データ「Ｚ」が書き込まれたことを表すよう、再配置データ列を更新する動作を実行する（ステップＣ２００９）。これにより、再配置データ列＃０００１は、図３５に示す通り、「４４４５５５Ｚ６Ｔ７７Ｕ」となる。なお、図３５において、再配置データ列＃０００１中の太枠で囲まれたサブチャンクは、論理チャンクの複製により追加されたサブチャンクを表す。また、白抜きの矢印が示す先の灰色で塗りつぶされたサブチャンクは、データが更新されたサブチャンクを表す。
【０２９３】
そして、書き込み部４２５は、図３５に示す通り、更新された再配置データ列＃０００１を圧縮して圧縮データ列＃０００１「Ｑ０’〜Ｑ３’」を生成し、物理チャンク長に分割する（ステップＣ２３０１、Ｃ２３０２）。ここでは、圧縮データ列＃０００１「Ｑ０’〜Ｑ３’」のサイズは、物理チャンク長より短く、分割は行われなかったとする。すなわち、分割数は、１である。
【０２９４】
そして、書き込み部４２５は、論物変換テーブルに基づいて、論理チャンク＃０００１に関連付けられた物理チャンク＃０００２を取得する（ステップＣ２３０３）。
【０２９５】
ここでは、更新後の圧縮データ列＃０００１は、更新前の圧縮データ列＃０００１よりサイズが大きくなっているが、書き込みに必要となる物理チャンクの数は１つで、更新前と変わらない（ステップＣ２３０４でＹｅｓ）。したがって、書き込み部４２５は、図３５に示す通り、物理チャンク＃０００２に、圧縮データ列「Ｑ０’〜Ｑ３’」を書き込む（ステップＣ２３１０）。
【０２９６】
以上で、データを書き込む動作の１つ目の具体例の説明を終了する。
【０２９７】
＜＜書き込みの具体例２：書き込み対象のボリュームが差分クローンの場合＞＞
また、制御部４２が、差分クローンＣ１の論理チャンク＃００００に対して、オフセット０の位置にデータ「Ｍ」の書き込みを要求する情報を取得した場合について説明する（図２１：ステップＣ１、Ｃ１１で「差分クローン」、Ｃ１３）。
【０２９８】
この場合、まず、論理チャンク復元部４２２は、書き込み要求に応じてボリューム間で論理チャンクの複製が必要となる複製元の論理チャンクとして、差分クローンＣ１のエンティティボリュームであるスナップショットＢ１の論理チャンク＃００００を特定する。また、論理チャンク復元部４２２は、複製先の論理チャンクとして、書き込み対象の差分クローンＣ１の論理チャンク＃００００を特定する（図２３：ステップＣ１３０１、１３０２）。
【０２９９】
次に、読み込み部４２１は、上述した読み込みの具体例と略同様に、ストレージ装置９１から読み込んだ圧縮データ列＃００００を伸長し、再配置データ列＃００００「０００１１ＳＸ２２３３３」を取得する（図２４：ステップＣ２００１〜Ｃ２００３）。なお、この時点で取得される再配置データ列＃００００は、書き込み前であるため、図３３に示した通りである。
【０３００】
ここで、差分クローンＣ１は、複製先の論理チャンク＃００００のデータを管理していない（ステップＣ２００４でＮｏ）。そこで、管理情報更新部４２４は、差分クローンＣ１の差分管理テーブルにおいて、アドレス＃００００のエントリを、差分有りを表すよう更新する。また、管理情報更新部４２４は、複製数管理テーブルにおいて、アドレス＃００００の複製数に１を加算して更新する（ステップＣ２００５、Ｃ２００６）。
【０３０１】
次に、論理チャンク復元部４２２は、再配置データ列＃００００「０００１１ＳＸ２２３３３」から、複製元の論理チャンクであるスナップショットＢ１の論理チャンク＃００００「０１２３」を復元する（ステップＣ２００７）。
【０３０２】
そして、再配置データ列更新部４２３は、差分クローンＣ１の複製先の論理チャンク＃００００に、スナップショットＢ１の複製元の論理チャンク＃００００のデータが複製されたことを表すよう、再配置データ列を更新する動作を実行する（ステップＣ２００８）。これにより、再配置データ列＃００００は、「００００１１１ＳＸ２２２３３３３」となる。
【０３０３】
さらに、再配置データ列更新部４２３は、書き込み対象の論理チャンクである差分クローンＣ１の論理チャンク＃００００のオフセット０の位置に、データ「Ｍ」が書き込まれたことを表すよう、再配置データ列を更新する動作を実行する（ステップＣ２００９）。これにより、再配置データ列＃００００は、図３５に示す通り、「００Ｍ０１１１ＳＸ２２２３３３３」となる。
【０３０４】
そして、書き込み部４２５は、図３５に示す通り、更新された再配置データ列＃００００を圧縮して圧縮データ列＃００００「Ｐ０’〜Ｐ６’」を生成し、物理チャンク長に分割する（ステップＣ２３０１、Ｃ２３０２）。ここでは、分割数は、２となる。
【０３０５】
そして、書き込み部４２５は、論物変換テーブルに基づいて、論理チャンク＃００００に関連付けられた物理チャンク＃００００および＃０００４を取得する（ステップＣ２３０３）。
【０３０６】
ここでは、更新後の圧縮データ列＃００００は、更新前の圧縮データ列＃００００よりサイズが大きくなっているが、書き込みに必要となる物理チャンクの数は２つで、更新前と変わらない（ステップＣ２３０４でＹｅｓ）。したがって、書き込み部４２５は、図３５に示す通り、物理チャンク＃００００に、圧縮データ列＃００００を分割した「Ｐ０’〜Ｐ３’」を書き込む。また、書き込み部４２５は、物理チャンク＃０００４に、圧縮データ列＃００００を分割した「Ｐ４’〜Ｐ６’」を書き込む（ステップＣ２３１０）。
【０３０７】
以上で、データを書き込む動作の２つ目の具体例の説明を終了する。
【０３０８】
＜＜書き込みの具体例３：書き込み対象のボリュームが差分クローンの場合＞＞
また、制御部４２が、差分クローンＣ１の論理チャンク＃０００２に対して、オフセット２の位置にデータ「Ｎ」の書き込みを要求する情報を取得した場合について説明する（図２１：ステップＣ１、Ｃ１１で「差分クローン」、Ｃ１３）。
【０３０９】
この場合、まず、論理チャンク復元部４２２は、書き込み要求に応じてボリューム間で論理チャンクの複製が必要となる複製元の論理チャンクとして、差分クローンＣ１のエンティティボリュームであるスナップショットＢ１の論理チャンク＃０００２を特定する。また、論理チャンク復元部４２２は、複製先の論理チャンクとして、書き込み対象の差分クローンＣ１の論理チャンク＃０００２を特定する（図２３：ステップＣ１３０１、１３０２）。
【０３１０】
次に、読み込み部４２１は、上述した読み込みの具体例と略同様に、ストレージ装置９１から読み込んだ圧縮データ列＃０００２を伸長し、再配置データ列＃０００２「８８８Ｙ９ＬＡＡＡＢＢＢ」を取得する（図２４：ステップＣ２００１〜Ｃ２００３）。なお、この時点で取得される再配置データ列＃０００２は、書き込み前であるため、図３３に示した通りである。
【０３１１】
ここで、差分クローンＣ１は、複製先の論理チャンク＃０００２のデータを既に管理している（ステップＣ２００４でＹｅｓ）。したがって、再配置データ列更新部４２３は、複製先の論理チャンクを復元する動作と、論理チャンクを複製して再配置データ列を更新する動作と、管理情報を更新する動作とを実行しない。
【０３１２】
そして、再配置データ列更新部４２３は、書き込み対象の論理チャンクである差分クローンＣ１の論理チャンク＃０００２のオフセット２の位置に、データ「Ｎ」が書き込まれたことを表すよう、再配置データ列を更新する動作を実行する（ステップＣ２００９）。これにより、再配置データ列＃０００２は、図３５に示す通り、「８８８Ｙ９ＬＡＡＮＢＢＢ」となる。
【０３１３】
そして、書き込み部４２５は、図３５に示す通り、更新された再配置データ列＃０００２を圧縮して圧縮データ列＃０００２「Ｒ０’〜Ｒ３’」を生成し、物理チャンク長に分割する（ステップＣ２３０１、Ｃ２３０２）。ここでは、分割数は、１である。
【０３１４】
そして、書き込み部４２５は、論物変換テーブルに基づいて、論理チャンク＃０００２に関連付けられた物理チャンク＃０００１を取得する（ステップＣ２３０３）。
【０３１５】
ここでは、更新後の圧縮データ列＃０００２は、更新前の圧縮データ列＃０００２と同サイズである。そのため、書き込みに必要となる物理チャンクの数は１つで、更新前と変わらない（ステップＣ２３０４でＹｅｓ）。したがって、書き込み部４２５は、図３５に示す通り、物理チャンク＃０００１に、圧縮データ列＃０００２「Ｒ０’〜Ｒ３’」を書き込む。
【０３１６】
以上で、データを書き込む動作の３つ目の具体例の説明を終了する。
【０３１７】
＜＜書き込みの具体例４：書き込み対象のボリュームが差分クローンの場合＞＞
また、制御部４２が、差分クローンＣ２の論理チャンク＃０００３に対して、オフセット２の位置にデータ「Ｖ」の書き込みを要求する情報を取得した場合について説明する（図２１：ステップＣ１、Ｃ１１で「差分クローン」、Ｃ１３）。
【０３１８】
この場合、まず、論理チャンク復元部４２２は、書き込み要求に応じてボリューム間で論理チャンクの複製が必要となる複製元の論理チャンクとして、差分クローンＣ２のエンティティボリュームであるスナップショットＢ１の論理チャンク＃０００３を特定する。また、論理チャンク復元部４２２は、複製先の論理チャンクとして、書き込み対象の差分クローンＣ２の論理チャンク＃０００３を特定する（図２３：ステップＣ１３０１、１３０２）。
【０３１９】
次に、読み込み部４２１は、上述した読み込みの具体例と略同様に、ストレージ装置９１から読み込んだ圧縮データ列＃０００３を伸長し、再配置データ列＃０００３「ＣＤＥＦ」を取得する（図２４：ステップＣ２００１〜Ｃ２００３）。なお、この時点で取得される再配置データ列＃０００３は、書き込み前であるため、図３３に示した通りである。
【０３２０】
ここで、差分クローンＣ２は、複製先の論理チャンク＃０００３のデータを管理していない（ステップＣ２００４でＮｏ）。そこで、管理情報更新部４２４は、差分クローンＣ２の差分管理テーブルにおいて、アドレス＃０００３のエントリを、差分有りを表すよう更新する。また、管理情報更新部４２４は、複製数管理テーブルにおいて、アドレス＃０００３の複製数に１を加算して更新する（ステップＣ２００５、Ｃ２００６）。
【０３２１】
次に、論理チャンク復元部４２２は、複製元の論理チャンクであるスナップショットＢ１の論理チャンク＃０００３を復元する。
【０３２２】
ここで、スナップショットＢ１は、複製元の論理チャンク＃０００３のデータを管理していない（図１７：ステップＢ１２０２でＮｏ、Ｂ１２０３でＹｅｓ）。
【０３２３】
そこで、論理チャンク復元部４２２は、スナップショットＢ１のマスタボリュームであるボリュームＡの論理チャンク＃０００３を、参照先の論理チャンクとする（ステップＢ１２０４でＮｏ、Ｂ１２０９でＮｏ、Ｂ１２１１）。
【０３２４】
そして、論理チャンク復元部４２２は、再配置データ列＃０００３「ＣＤＥＦ」から、ボリュームＡの論理チャンク＃０００３の「ＣＤＥＦ」を復元する。再配置データ列更新部４２３は、この「ＣＤＥＦ」を、スナップショットＢ１における複製元の論理チャンク＃０００３のデータとして取得することになる（図２４：ステップＣ２００７）。
【０３２５】
そして、再配置データ列更新部４２３は、差分クローンＣ２の複製先の論理チャンク＃０００３に、スナップショットＢ１の複製元の論理チャンク＃０００３のデータが複製されたことを表すよう、再配置データ列を更新する動作を実行する（ステップＣ２００８）。これにより、再配置データ列＃０００３は、「ＣＣＤＤＥＥＦＦ」となる。
【０３２６】
さらに、再配置データ列更新部４２３は、書き込み対象の論理チャンクである差分クローンＣ２の論理チャンク＃０００３のオフセット２の位置に、データ「Ｖ」が書き込まれたことを表すよう、再配置データ列を更新する動作を実行する（ステップＣ２００９）。これにより、再配置データ列＃０００３は、図３５に示す通り、「ＣＣＤＤＥＶＦＦ」となる。
【０３２７】
そして、書き込み部４２５は、図３５に示す通り、更新された再配置データ列＃０００３を圧縮して圧縮データ列＃０００３「Ｓ０’〜Ｓ４’」を生成し、物理チャンク長に分割する。ここでは、分割数は、２となる。
【０３２８】
そして、書き込み部４２５は、論物変換テーブルに基づいて、論理チャンク＃０００３に関連付けられた物理チャンク＃０００３を取得する（ステップＣ２３０３）。
【０３２９】
ここで、更新後の圧縮データ列＃０００３は、更新前の圧縮データ列＃０００３よりサイズが大きくなっており、書き込みに必要となる物理チャンクの数は、更新前から１つ増えて２つとなっている（ステップＣ２３０４でＮｏ、Ｃ２３０５でＹｅｓ）。
【０３３０】
そこで、書き込み部４２５は、論理チャンク＃０００３に、物理チャンク＃０００５を追加して関連付ける（ステップＣ２３０６）。また、管理情報更新部４２４は、物理チャンク＃０００５に論理チャンク＃０００３を関連付けたエントリを、論物変換テーブルに追加する（ステップＣ２３０７）。
【０３３１】
そして、書き込み部４２５は、図３５に示す通り、物理チャンク＃０００３に、圧縮データ列＃０００３を分割した「Ｓ０’〜Ｓ３’」を書き込む。また、書き込み部４２５は、物理チャンク＃０００５に、圧縮データ列＃０００３を分割した「Ｓ４’」を書き込む（ステップＣ２３１０）。
【０３３２】
以上で、データを書き込む動作の４つ目の具体例の説明を終了する。
【０３３３】
次に、本発明の第４の実施の形態の効果について述べる。
【０３３４】
本発明の第４の実施の形態としてのストレージシステムは、ブロック型ストレージ装置に対する書き込み量を削減しながら、ボリュームまたはそのスナップショットや差分クローンに対するデータの読み書きを行うことができる。
【０３３５】
その理由について説明する。本実施の形態は、本発明の第３の実施の形態と同様に構成されることに加えて、次のように構成されるからである。
【０３３６】
まず、再配置データ列更新部が、書き込み対象のボリュームがスナップショットの複製元としてのマスタボリュームであるとき、次のように動作するよう構成される。この場合、再配置データ列更新部が、ボリューム間で論理チャンクの複製が必要となる複製元の論理チャンクおよび複製先の論理チャンクを次のように特定する。すなわち、再配置データ列更新部が、複製元の論理チャンクとして、マスタボリュームにおける書き込み対象の論理チャンクを適用する。また、再配置データ列更新部が、複製先の論理チャンクとして、マスタボリュームから取得された最新のスナップショットにおける書き込み対象の論理チャンクと同一アドレスの論理チャンクを適用するからである。
【０３３７】
さらに、再配置データ列更新部が、書き込み対象のボリュームが差分クローンであるとき、次のように動作するよう構成される。この場合、再配置データ列更新部が、ボリューム間で論理チャンクの複製が必要となる複製元の論理チャンクおよび複製先の論理チャンクを次のように特定する。すなわち、再配置データ列更新部が、複製元の論理チャンクとして、書き込み対象のボリュームの複製元としてのエンティティボリュームにおける書き込み対象の論理チャンクと同一アドレスの論理チャンクを適用する。また、再配置データ列更新部が、複製先の論理チャンクとして、書き込み対象の差分クローンにおける書き込み対象の論理チャンクを適用するからである。
【０３３８】
さらに、論理チャンク復元部が、読み込み対象のボリュームがスナップショットであるとき、次のように動作するよう構成される。すなわち、論理チャンク復元部が、当該スナップショットと同一のマスタボリュームから取得されたスナップショットのうち、当該スナップショットまたは当該スナップショットより新しいスナップショットを検索対象として特定する。そして、論理チャンク復元部が、検索対象のスナップショットの中から、読み込み対象の論理チャンクと同一アドレスの論理チャンクにデータが管理されるスナップショットがあるかを判断する。そして、そのようなスナップショットがあれば、論理チャンク復元部が、そのようなスナップショットのうち最も古いスナップショットにおける当該同一アドレスの論理チャンクを、参照先の論理チャンクとして適用するからである。
【０３３９】
さらに、論理チャンク復元部が、読み込み対象のボリュームが差分クローンであるとき、次のように動作するよう構成される。すなわち、論理チャンク復元部が、読み込み対象の差分クローンにおける読み込み対象の論理チャンクでデータが管理されていれば、読み込み対象の差分クローンにおける読み込み対象の論理チャンクを、参照先の論理チャンクとして適用するからである。
【０３４０】
このように、本実施の形態は、複製手法がスナップショット技術および差分クローンのいずれであるかに応じて、データの書き込みの際にボリューム間で論理チャンクの複製が必要となる複製元の論理チャンクと複製先の論理チャンクとを、適切に設定する。また、本実施の形態は、複製手法に応じて、データの読み込みの際に参照すべき論理チャンクを、適切に設定する。これにより、本実施の形態は、複製手法がスナップショット技術および差分クローンのいずれであっても、本発明の第１〜第３の実施の形態と同様に、ブロック型ストレージ装置に対する書き込み量を削減しながら、読み書きを行うことができる。
【０３４１】
また、さらなる理由について説明する。
【０３４２】
本実施の形態では、論物変換情報記憶部が、ストレージ装置の物理チャンクと、同一アドレスの１つ以上の論理チャンクとの関連付けを表す情報を記憶している。そして、更新後の再配置データ列に基づく圧縮データ列について書き込みに必要となる物理チャンクの数が、書き込み対象の論理チャンクと同一アドレスの１つ以上の論理チャンクに関連付けられた物理チャンクの数と同一でない場合がある。この場合、書き込み部が、当該同一アドレスの１つ以上の論理チャンクに対して物理チャンクの不足分を追加して関連付けまたは余剰分を解放してから書き込みを行うとともに、論物変換情報記憶部に記憶される情報を更新するからである。
【０３４３】
このように、本実施の形態は、複製関係の階層構造を構成する複数のボリュームのいずれかへの書き込みに応じて、圧縮データ列のサイズが増減する場合にも、物理チャンクを過不足なく割り当てる。これにより、本実施の形態は、物理チャンクの使用状況を効率化することができる。
【０３４４】
なお、本実施の形態において、ボリュームの複製手法として、コピーオンライト方式のスナップショット技術と差分クローン技術とを採用する例について説明した。これに限らず、ボリュームの複製手法は、複製元および複製先のボリューム間の差分を管理する複製手法であれば、他の手法であってもよい。例えば、リダイレクトオンライト方式のスナップショット技術であってもよい。そのような他の複製手法であっても、本実施の形態は、書き込みに応じてボリューム間で論理チャンクの複製が必要となる複製元の論理チャンクおよび複製先の論理チャンクを、複製手法の性質に応じて適切に設定することにより、同様の効果を奏する。また、本実施の形態は、読み込みに応じて参照すべき論理チャンクを、複製手法の性質に応じて適切に設定することにより、同様の効果を奏する。
【０３４５】
また、本実施の形態において、論理チャンクを復元する動作、論理チャンクを複製する動作、および、書き込みデータ列を書き込む動作を、図２０、図２５および図２６をそれぞれ用いて説明した。ただし、これらの動作で採用するアルゴリズムは、これらの図面のフローチャートで示したものに限定されない。これらの動作で採用されるアルゴリズムは、再配置規則にしたがって、再配置データ列に対して論理チャンクの復元、複製および書き込みを行うものであれば、他のアルゴリズムであってもよい。
【０３４６】
また、上述した各実施の形態において、論理チャンクが４バイトであり、４つの１バイトのサブチャンクから構成される例を中心に説明したが、論理チャンクおよびサブチャンクのチャンク長は、これに限定されない。また、論理チャンクを構成するサブチャンクの数は、４つに限定されない。
【０３４７】
また、上述した本発明の各実施の形態において、ストレージ装置が、物理的な記憶媒体であるものとして説明したが、ストレージ装置は、単一の物理的な記憶媒体に限定されない。例えば、ストレージ装置は、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）技術等による仮想的な記憶媒体でも構わない。
【０３４８】
また、上述した本発明の各実施の形態において、再配置規則として、同一のオフセットをとるサブチャンクを複製番号が若い順に配置したサブチャンク列を、オフセットが若い順に配置する規則の例について説明した。ただし、再配置規則は、同一アドレスの論理チャンク間で同一のオフセットをとるサブチャンクを連続させるよう配置する規則であれば、その他の内容の規則であってもよい。
【０３４９】
また、上述した本発明の各実施の形態において、ストレージ管理装置の各機能ブロックが、メモリに記憶されたコンピュータ・プログラムを実行するＣＰＵによって実現される例を中心に説明した。これに限らず、各機能ブロックの一部、全部、または、それらの組み合わせが専用のハードウェアにより実現されていてもよい。
【０３５０】
また、上述した本発明の各実施の形態において、ストレージ管理装置の機能ブロックは、複数の装置に分散されて実現されてもよい。
【０３５１】
また、上述した本発明の各実施の形態において、各フローチャートを参照して説明したストレージ管理装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータ装置の記憶装置（記憶媒体）に格納しておく。そして、係るコンピュータ・プログラムを当該ＣＰＵが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
【０３５２】
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
【０３５３】
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。
【符号の説明】
【０３５４】
２、３、４    ストレージシステム
１０、３０、４０    ストレージ管理装置
１１、４１    管理情報記憶部
１２、３２、４２    制御部
４３    論物変換情報記憶部
９０、９１    ストレージ装置
３２１、４２１    読み込み部
３２２、４２２    論理チャンク復元部
３２３、４２３    再配置データ列更新部
３２４、４２４    管理情報更新部
３２５、４２５    書き込み部
１００１  ＣＰＵ
１００２  メモリ
１００３  ストレージ接続インタフェース
【図１】
2018109804.tif 000003
【図２】
2018109804.tif 000004
【図３】
2018109804.tif 000005
【図４】
2018109804.tif 000006
【図５】
2018109804.tif 000007
【図６】
2018109804.tif 000008
【図７】
2018109804.tif 000009
【図８】
2018109804.tif 000010
【図９】
2018109804.tif 000011
【図１０】
2018109804.tif 000012
【図１１】
2018109804.tif 000013
【図１２】
2018109804.tif 000014
【図１３】
2018109804.tif 000015
【図１４】
2018109804.tif 000016
【図１５】
2018109804.tif 000017
【図１６】
2018109804.tif 000018
【図１７】
2018109804.tif 000019
【図１８】
2018109804.tif 000020
【図１９】
2018109804.tif 000021
【図２０】
2018109804.tif 000022
【図２１】
2018109804.tif 000023
【図２２】
2018109804.tif 000024
【図２３】
2018109804.tif 000025
【図２４】
2018109804.tif 000026
【図２５】
2018109804.tif 000027
【図２６】
2018109804.tif 000028
【図２７】
2018109804.tif 000029
【図２８】
2018109804.tif 000030
【図２９】
2018109804.tif 000031
【図３０】
2018109804.tif 000032
【図３１】
2018109804.tif 000033
【図３２】
2018109804.tif 000034
【図３３】
2018109804.tif 000035
【図３４】
2018109804.tif 000036
【図３５】
2018109804.tif 000037