以下、本発明の実施の形態について、図面を参照して詳細に説明する。
(第1の実施の形態)
本発明の第1の実施の形態としてのストレージ管理装置10の機能ブロック構成を図1に示す。図1において、ストレージ管理装置10は、管理情報記憶部11と、制御部12とを備える。
ストレージ管理装置10は、ボリュームおよびその複製を表す情報から、ストレージ装置に格納するための圧縮データ列を生成する装置である。ここで、ボリュームおよびその複製は、仮想的な記憶媒体であり、固定長の論理チャンク単位でデータを記憶する。これに対して、圧縮データ列の格納先となるストレージ装置としては、磁気記憶装置、半導体記憶装置等といった、物理的な記憶媒体が想定される。また、ボリュームの複製手法としては、複製元および複製先のボリューム間の差分を管理する複製手法が想定される。
ここで、ストレージ管理装置10は、図2に示すようなハードウェア要素によって構成可能である。図2において、ストレージ管理装置10は、CPU(Central Processing Unit)1001、メモリ1002、および、ストレージ接続インタフェース1003を含む。メモリ1002は、RAM(Random Access Memory)やROM(Read Only Memory)等によって構成される。ストレージ接続インタフェース1003は、ストレージ装置に接続するためのインタフェースである。この場合、ストレージ管理装置10の各機能ブロックは、メモリ1002に格納されるコンピュータ・プログラムを読み込んで実行するとともに各部を制御するCPU1001によって構成される。なお、ストレージ管理装置10およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
次に、各機能ブロックの詳細について説明する。
管理情報記憶部11は、複製関係の階層構造を構成する複数のボリュームについての管理情報を記憶する。複製関係とは、上述したような複製手法による複製元を親とし、複製先を子とする関係である。管理情報は、複製関係の階層構造を表す情報を含む。また、管理情報は、複製元および複製先のボリューム間における論理チャンク単位での差分の有無に関する情報を含む。
制御部12は、複数のボリューム間で同一アドレスの1つ以上の論理チャンクについて、各論理チャンク間で同一のオフセットをとるサブチャンクが連続するよう、管理情報に基づき再配置した再配置データ列を取得する。そして、制御部12は、取得した再配置データ列を圧縮して圧縮データ列を生成する。そして、制御部12は、生成した圧縮データ列をストレージ装置に対して格納するよう制御する。なお、サブチャンクは、圧縮データ列が生成される際の圧縮ウィンドウのサイズより充分に小さいサイズであることが望ましい。
例えば、再配置データ列は、再配置規則にしたがって管理情報に基づき配置されたデータ列であってもよい。ここで、再配置規則とは、各論理チャンク間で同一のオフセットをとるサブチャンクを連続させる順序を規定する規則である。例えば、再配置規則は、同一のオフセットをとるサブチャンクを、各サブチャンクを含む論理チャンクを含むボリュームの親子関係に基づく順またはボリューム生成時点に基づく順に連続させたサブチャンク列を、オフセットが若い順に配置する規則であってもよい。ただし、再配置規則は、このような内容に限定されない。再配置規則は、同一アドレスの各論理チャンク間で同一のオフセットをとるサブチャンクを連続させる順序を規定する規則であれば、その他の内容であってもよい。
ここで、再配置データ列および圧縮データ列について、図3の模式図を用いて説明する。図3では、複製関係を有する複数のボリュームとして、4つのボリュームA〜Dが示されている。このうち、ボリュームAが、複製関係の階層構造のルートであるとする。また、その他のボリュームB〜Dは、複製関係の階層構造においてボリュームAの子または子孫となるボリュームであるとする。
ボリュームAは、アドレス#0000〜#0003の4つの論理チャンクのデータを保存している。ここでは、論理チャンクは4バイトであり、4つの1バイトのサブチャンクからなるものとする。ボリュームBは、アドレス#0000および#0002において、複製元との差分となるデータを管理している。ボリュームCは、アドレス#0002において、複製元との差分となるデータを管理している。ボリュームDは、アドレス#0000および#0001において、複製元との差分となるデータを管理している。
以下では、アドレスが#XXXXの論理チャンクを、論理チャンク#XXXXとも記載する。また、1つ以上の論理チャンク#XXXXに基づく再配置データ列を、再配置データ列#XXXXとも記載する。また、再配置データ列#XXXXが圧縮された圧縮データ列を、圧縮データ列#XXXXとも記載する。
このとき、例えば、論理チャンク#0000に着目する。4つのボリュームA〜Dのうち、論理チャンク#0000は、3つのボリュームA、B、Dで管理されている。ボリュームAの論理チャンク#0000のデータは「01X3」である。また、ボリュームBの論理チャンク#0000のデータは「0123」である。また、ボリュームDの論理チャンク#0000のデータは「0S23」である。これらの3つの論理チャンク#0000間で、オフセット0の3つのサブチャンク、オフセット1の3つのサブチャンク、オフセット2の3つのサブチャンクおよびオフセット3の3つのサブチャンクが、順に連続するよう再配置される。すると、再配置された再配置データ列#0000は、「00011SX22333」となる。図3において、再配置データ列#0001〜#0003も、再配置データ列#0000と同様に説明される。
ここで、再配置にあたり、同一アドレスの論理チャンクの数を表す情報(アドレス#0000の場合、3つであるという情報)が少なくとも必要である。同一アドレスの論理チャンクの数は、複製元および複製先の差分の有無を表す情報から算出可能である。また、再配置データ列において、同一のオフセットをとるサブチャンクは、親子関係の親から子の順(あるいはその逆順)に連続するよう配置されてもよい。その場合、再配置にあたり、複製関係の階層構造を表す情報が必要である。このように、再配置にあたり必要となる情報は、管理情報記憶部11に記憶されている。
そして、図3に示すように、このような再配置データ列#0000〜#0003は、圧縮されて圧縮データ列#0000〜#0003となる。
このように、制御部12は、複数のボリュームA〜Dにおいて、同一アドレスの論理チャンク毎に、再配置データ列#0000〜#0003を取得する。そして、制御部12は、取得した再配置データ列#0000〜#0003を圧縮して圧縮データ列#0000〜#0003を生成する。そして、制御部12は、圧縮データ列#0000〜#0003を、ストレージ装置に対して格納する。
以上のように構成されたストレージ管理装置10の動作について、図4を参照して説明する。
まず、制御部12は、管理情報に基づいて、複製関係の階層構造を構成する複数のボリュームにおいて、同一アドレスの1つ以上の論理チャンクについて、再配置データ列を取得する(ステップS1)。
前述のように、再配置データ列は、1つ以上の論理チャンクが、各論理チャンク間で同一オフセットをとるサブチャンクが連続するよう配置されたデータ列である。
次に、制御部12は、再配置データ列を圧縮して圧縮データ列を生成する(ステップS2)。
次に、制御部12は、圧縮データ列を、ストレージ装置に格納する(ステップS3)。
以上で、ストレージ管理装置10は、動作を終了する。
このようにして、ストレージ管理装置10は、複製関係を有する複数のボリュームにおいて論理チャンクのアドレス毎に適切なタイミングで上述の動作を行うことにより、ボリュームおよびその複製を表す情報を、ストレージ装置に格納する。
次に、本発明の第1の実施の形態の効果について述べる。
本発明の第1の実施の形態としてのストレージ管理装置は、ボリュームおよびその複製をブロック型ストレージ装置に書き込む際の書き込み量を削減することができる。
その理由について説明する。本実施の形態では、管理情報記憶部が、複製関係の階層構造を構成する複数のボリュームについて管理情報を記憶している。管理情報は、複製関係の階層構造を表す情報を含んでいる。また、管理情報は、複製元および複製先のボリューム間における論理チャンク単位での差分の有無に関する情報を含んでいる。そして、制御部が、複数のボリューム間で同一アドレスの1つ以上の論理チャンクについて、各論理チャンク間で同一のオフセットをとるサブチャンクが連続するよう、管理情報に基づき再配置した再配置データ列を取得する。そして、制御部が、取得した再配置データ列を圧縮して圧縮データ列を生成する。そして、制御部が、生成した圧縮データ列をストレージ装置に対して格納するよう制御するからである。
このように、本実施の形態は、ボリュームおよびその複製の間で同一アドレスの1つ以上の論理チャンクについて取得した再配置データ列を圧縮してストレージ装置に記憶する。再配置データ列は、同一アドレスの各論理チャンク間で同一のオフセットをとるサブチャンクが連続するよう管理情報に基づき再配置されたデータ列である。
ここで、複製元および複製先のボリューム間の差分を管理する複製手法で、論理チャンク単位で差分を管理する場合、複製元との差分を有する論理チャンク内にも、差分の無い箇所がある可能性が高いと考えられる。その場合、複製先のボリュームで管理される論理チャンクで差分の無い箇所は、複製元と同一のデータを有することになる。そのため、複製関係を有する複数のボリューム間で、複製元および複製先の複数のボリュームを互いに比較した場合、同一アドレスの論理チャンクは、互いに重複する箇所を有する可能性が高い。
本実施の形態は、上述したように、論理チャンクを、圧縮ウィンドウよりも十分に短いデータ長のサブチャンクに分割した上で、同一アドレスの論理チャンク間で、同一のオフセットをとる複数のサブチャンクを連続させた再配置データ列を圧縮する。このような再配置データ列を圧縮対象とすることにより、本実施の形態は、圧縮アルゴリズムにおける圧縮ウィンドウ内で重複するデータ列が検出される可能性を高くする。その結果、本実施の形態は、ボリューム単位で圧縮する場合に比べて、ボリューム内のデータに類似性が有るか無いかに関わらず、圧縮率をより改善し、記憶領域やディスク書き込み回数を削減する。
(第2の実施の形態)
次に、本発明の第2の実施の形態としてのストレージシステム2の機能ブロック構成を図5に示す。図5において、ストレージシステム2は、本発明の第1の実施の形態としてのストレージ管理装置10と、ストレージ装置90とを含む。
ストレージ管理装置10およびストレージ装置90は、例えば1つの物理的なコンピュータ装置によって構成されてもよい。その場合、ストレージ装置90は、内蔵される補助記憶装置によって構成される。
あるいは、ストレージ装置90は、ストレージ管理装置10を構成するコンピュータ装置の外部に接続される記憶装置によって構成されてもよい。
本発明の第2の実施の形態において、ストレージ管理装置10は、本発明の第1の実施の形態で説明したように構成され、動作することにより、ストレージ装置90に対して圧縮データ列を格納する。これにより、ストレージシステム2は、本発明の第1の実施の形態と同様の効果を奏する。
(第3の実施の形態)
次に、本発明の第3の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第1〜第2の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
まず、本発明の第3の実施の形態としてのストレージシステム3の機能ブロック構成を図6に示す。図6において、ストレージシステム3は、本発明の第2の実施の形態としてのストレージシステム2に対して、ストレージ管理装置10に替えてストレージ管理装置30を備える点が異なる。また、ストレージ管理装置30は、ストレージ管理装置10に対して、制御部12に替えて制御部32を備える点が異なる。制御部32は、読み込み部321と、論理チャンク復元部322と、再配置データ列更新部323と、管理情報更新部324と、書き込み部325とを有する。
ここで、ストレージ管理装置30およびその各機能ブロックは、図2を参照して説明した本発明の第1の実施の形態と同様のハードウェア要素によって構成可能である。なお、ストレージ管理装置30およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
次に、各機能ブロックの詳細について説明する。
読み込み部321は、読み込み対象のボリュームにおける読み込み対象の論理チャンクを含む圧縮データ列を、ストレージ装置90から読み込む。そして、読み込み部321は、読み込んだ圧縮データ列を伸長することにより、再配置データ列を取得する。
論理チャンク復元部322は、読み込み対象の論理チャンクのデータが管理されているボリュームの論理チャンクを、参照先の論理チャンクとして特定する。ここで、読み込み対象のボリュームにおける読み込み対象の論理チャンクのデータは、必ずしも読み込み対象のボリュームにおいて管理されているとは限らない。読み込み対象の論理チャンクのデータが管理されているボリュームは、読み込み対象のボリュームが複製元であるか複製先であるかや、複製手法等も考慮して定まる。そして、論理チャンク復元部322は、読み込み対象の論理チャンクについて読み込み部321により取得された再配置データ列から、管理情報に基づいて、参照先の論理チャンクを復元する。復元は、再配置規則にしたがって行われる。再配置規則については、本発明の第1の実施の形態において説明した通りである。
例えば、論理チャンク復元部322は、管理情報から、読み込み対象の論理チャンクと同一アドレスの論理チャンクの数や、それらの論理チャンクをそれぞれ含むボリュームの親子関係の順序または新旧の順序を表す情報を取得する。そして、論理チャンク復元部322は、取得した情報に基づいて、再配置データ列から、再配置規則にしたがって参照先の論理チャンクを復元すればよい。
再配置データ列更新部323は、書き込み対象のボリュームにおける書き込み対象の論理チャンクに関する再配置データ列を取得し、取得した再配置データ列を、管理情報に基づいて更新する。
具体的には、再配置データ列更新部323は、書き込み対象のボリュームにおける書き込み対象の論理チャンクに関する再配置データ列を取得する。再配置データ列の取得は、読み込み部321を用いて行えばよい。そして、再配置データ列更新部323は、取得した再配置データ列が表す1つ以上の論理チャンクにおいて、ボリューム間での複製が必要な複製元の論理チャンクおよび複製先の論理チャンクを特定する。なお、書き込み対象のボリュームにおける書き込み対象の論理チャンクに対するデータの書き込みの際には、書き込み前に、ボリューム間で論理チャンクの複製が必要となる場合がある。このようなボリューム間で論理チャンクの複製が必要となる複製元の論理チャンクおよび複製先の論理チャンクは、書き込み対象のボリュームが複製元であるか複製先であるかや、その複製手法も考慮して定まる。
また、再配置データ列更新部323は、取得した再配置データ列が表す1つ以上の論理チャンクにおいて、複製元の論理チャンクのデータが複製先の論理チャンクに複製されたことを表すよう、管理情報に基づいて、当該再配置データ列を更新する。また、再配置データ列更新部323は、取得した再配置データ列が表す1つ以上の論理チャンクにおいて、書き込み対象の論理チャンクに対して書き込みデータ列が書き込まれたことを表すよう、管理情報に基づいて、当該再配置データ列を更新する。これらの更新は、再配置規則にしたがって行われる。
例えば、再配置データ列更新部323は、管理情報から、読み込み対象の論理チャンクと同一アドレスの論理チャンクの数や、それらの論理チャンクをそれぞれ含むボリュームの親子関係の順序または新旧の順序を表す情報を取得する。そして、再配置データ列更新部323は、管理情報から取得した情報に基づいて、再配置データ列を再配置規則にしたがって更新すればよい。
管理情報更新部324は、再配置データ列の更新、または、ボリュームの複製に応じて、管理情報を更新する。例えば、再配置データ列の更新が行われた場合、管理情報更新部324は、ボリューム間の差分の有無を表す情報を更新する。また、例えば、ボリュームが新たに複製された場合、管理情報更新部324は、複製関係の階層構造を表す情報を追加する。また、この場合、管理情報更新部324は、ボリューム間の差分の有無を表す情報として、複製元および新たに生成された複製先のボリューム間に差分がないことを表す情報を追加する。
書き込み部325は、再配置データ列更新部323により更新された再配置データ列を圧縮して圧縮データ列を生成する。そして、書き込み部325は、圧縮データ列をストレージ装置90に書き込む。
以上のように構成されたストレージ管理装置30の動作について、図面を参照して説明する。
まず、ストレージ管理装置30が、ボリュームを複製する動作を図7に示す。
図7では、まず、制御部32は、ボリュームの複製を要求する情報を取得する(ステップA1)。取得される情報は、複製元のボリュームを表す情報と、複製手法を表す情報とを含む。
次に、管理情報更新部324は、複製元のボリュームと新たな複製先のボリュームとの複製関係を表す情報を、管理情報記憶部11に追加する(ステップA2)。
次に、管理情報更新部324は、複製元のボリュームと新たな複製先のボリュームとの間に差分が無いことを表す情報を、管理情報記憶部11に追加する(ステップA3)。
以上で、ストレージ管理装置30は、ボリュームを複製する動作を終了する。
次に、ストレージ管理装置30が、ストレージ装置90からデータを読み込む動作を図8に示す。
図8では、まず、制御部32は、データの読み込みを要求する情報を取得する(ステップB1)。取得される情報は、読み込み対象のボリュームおよび読み込み対象の論理チャンクを表す情報を含む。
次に、読み込み部321は、読み込み対象のボリュームにおける読み込み対象の論理チャンクと同一アドレスの論理チャンクを含む圧縮データ列を、ストレージ装置90から読み込む(ステップB2)。
次に、読み込み部321は、読み込んだ圧縮データ列を伸長し、再配置データ列を取得する(ステップB3)。
次に、論理チャンク復元部322は、読み込み対象の論理チャンクのデータが管理されているボリュームの論理チャンクを、参照先の論理チャンクとして特定する(ステップB4)。
次に、論理チャンク復元部322は、管理情報に基づいて、再配置データ列が表す1つ以上の論理チャンクの中から、参照先の論理チャンクを復元する(ステップB5)。
以上で、ストレージ管理装置30は、読み込みを行う動作を終了する。
次に、ストレージ管理装置30が、ストレージ装置90に対して書き込みを行う動作を図9に示す。
図9では、まず、制御部32は、データの書き込みを要求する情報を取得する(ステップC1)。取得される情報は、書き込み対象のボリューム、書き込み対象の論理チャンク、および、書き込みデータ列を表す情報を含む。
次に、読み込み部321は、書き込み対象のボリュームにおける書き込み対象の論理チャンクを読み込み対象として、当該論理チャンクと同一アドレスの論理チャンクを含む圧縮データ列を、ストレージ装置90から読み込む(ステップC2)。
次に、読み込み部321は、読み込んだ圧縮データ列を伸長し、再配置データ列を取得する(ステップC3)。
次に、再配置データ列更新部323は、データの書き込みの際にボリューム間での論理チャンクの複製が必要となる複製元の論理チャンクおよび複製先の論理チャンクを特定する(ステップC4)。
次に、再配置データ列更新部323は、再配置データ列が表す1つ以上の論理チャンクにおいて、複製元の論理チャンクのデータが複製先の論理チャンクに複製されたことを表すよう、再配置データ列を更新する(ステップC5)。
なお、複製先の論理チャンクが管理されるボリュームにおいて当該論理チャンクのデータが既に管理されている場合、ステップC5の動作は省略可能である。
次に、再配置データ列更新部323は、再配置データ列が表す1つ以上の論理チャンクにおいて、書き込み対象の論理チャンクに書き込みデータ列が書き込まれたことを表すよう、再配置データ列を更新する(ステップC6)。
次に、書き込み部325は、更新後の再配置データ列を圧縮して圧縮データ列を生成する(ステップC7)。
次に、書き込み部325は、圧縮データ列をストレージ装置90に書き込む(ステップC8)。
次に、管理情報更新部324は、書き込みに伴い管理情報を更新する(ステップC9)。具体的には、管理情報更新部324は、書き込みに伴い複製元のボリュームとの間に差分が発生したボリュームについて、書き込み対象の論理チャンクと同一アドレスの論理チャンクに差分が有ることを表すよう、管理情報を更新する。
以上で、ストレージ管理装置30は、書き込みを行う動作を終了する。
次に、本発明の第3の実施の形態の効果について述べる。
本発明の第3の実施の形態としてのストレージ管理装置は、ボリュームおよびその複製をブロック型ストレージ装置に書き込む際の書き込み量を削減するとともに、そのようなブロック型ストレージ装置から所望のデータを読み込むことができる。
その理由について説明する。本実施の形態では、管理情報記憶部が、本発明の第1の実施の形態と同様の管理情報を記憶している。そして、データの読み込みが要求された際には、読み込み部が、読み込み対象のボリュームにおける読み込み対象の論理チャンクを含む圧縮データ列をストレージ装置から読み込んで伸長することにより、再配置データ列を取得する。そして、論理チャンク復元部が、読み込み対象の論理チャンクのデータが管理されているボリュームの論理チャンクを参照先の論理チャンクとして特定する。そして、論理チャンク復元部が、読み込み部により取得された再配置データ列から、管理情報に基づいて参照先の論理チャンクを復元するからである。
また、データの書き込みが要求された際には、再配置データ列更新部が、書き込み対象のボリュームにおける書き込み対象の論理チャンクと同一アドレスの1つ以上の論理チャンクについて読み込み部を用いて再配置データ列を取得する。そして、再配置データ列更新部が、ボリューム間で複製が必要な複製元の論理チャンクおよび複製先の論理チャンクを特定する。そして、再配置データ列更新部が、当該再配置データ列が表す1つ以上の論理チャンクにおいて、複製元の論理チャンクのデータが複製先の論理チャンクに複製されたことを表すよう、管理情報に基づき当該再配置データ列を更新する。さらに、再配置データ列更新部が、当該再配置データ列が表す1つ以上の論理チャンクにおいて、書き込み対象の論理チャンクに対して書き込みデータ列が書き込まれたことを表すよう、管理情報に基づいて当該再配置データ列を更新する。そして、管理情報更新部が、再配置データ列の更新、または、ボリュームの複製に応じて、管理情報を更新する。そして、書き込み部が、更新後の再配置データ列を圧縮して圧縮データ列を生成し、圧縮データ列をストレージ装置に書き込むからである。
このようにして、本実施の形態は、データの書き込みの際には、圧縮率の向上に寄与するよう再配置された再配置データ列において、論理チャンクの複製およびデータの書き込みを適切に反映させることができる。また、本実施の形態は、データの読み込みの際には、圧縮率の向上に寄与するよう再配置された再配置データ列から、所望のデータを読み込むことができる。
(第4の実施の形態)
次に、本発明の第4の実施の形態について図面を参照して詳細に説明する。本実施の形態では、ボリュームの複製手法として、スナップショット技術および差分クローン技術を採用することを想定する。スナップショット技術および差分クローン技術については、背景技術で述べたとおりである。ここでは、スナップショット技術としては、コピーオンライト方式が採用されるものとする。
なお、本実施の形態の説明において参照する各図面において、本発明の第1〜第3の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
まず、本発明の第4の実施の形態としてのストレージシステム4の機能ブロック構成を、図10に示す。図10において、ストレージシステム4は、本発明の第3の実施の形態としてのストレージシステム3に対して、ストレージ管理装置30に替えてストレージ管理装置40と、ストレージ装置90に替えてストレージ装置91とを備える点が異なる。ストレージ管理装置40は、管理情報記憶部41と、制御部42と、論物変換情報記憶部43とを備える。制御部42は、読み込み部421と、論理チャンク復元部422と、再配置データ列更新部423と、管理情報更新部424と、書き込み部425とを有する。また、ストレージ装置91は、固定長の物理チャンク単位でデータ列を記憶する。なお、論理チャンクと物理チャンクとは、チャンク長が異なっていてもよい。
ここで、ストレージ管理装置40およびその各機能ブロックは、図2を参照して説明した本発明の第1の実施の形態と同様のハードウェア要素によって構成可能である。なお、ストレージ管理装置40およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
次に、各機能ブロックの詳細について説明する。
まず、管理情報記憶部41について説明する。
管理情報記憶部41は、本発明の第1〜第3の実施の形態における管理情報記憶部11と同様の情報に加えて、論理チャンクのアドレス毎の複製数を表す情報をさらに含む管理情報を記憶する。複製数とは、複製関係を有する複数のボリュームにおいて、同一アドレスの論理チャンクが管理されている数をいうものとする。
例えば、管理情報記憶部41は、ツリー管理テーブルと、差分管理テーブルと、複製数管理テーブルとを記憶していてもよい。ツリー管理テーブルは、複製関係の階層構造を表す情報を格納する。また、差分管理テーブルは、複製元および複製先のボリューム間の差分の有無を表す情報を格納する。また、複製数管理テーブルは、論理チャンクのアドレス毎の複製数を表す情報を格納する。
図11は、ツリー管理テーブルのデータ構造の一例を示す。ツリー管理テーブルは、親(すなわち、複製元)ボリュームと、子(すなわち、複製先)ボリュームと、複製手法とをそれぞれ表す情報からなるエントリを格納する。本実施の形態では、複製手法を表す情報としては、スナップショットおよび差分クローンのいずれかを表す情報が想定される。
図12は、差分管理テーブルのデータ構造の一例である。差分管理テーブルは、いずれかのボリュームの複製先となっている子ボリューム毎に生成される。差分管理テーブルは、論理チャンクのアドレスと、そのアドレスの論理チャンクにおける親ボリュームとの差分の有無を表す情報とからなるエントリを格納する。例えば、差分の有無を表す情報は、差分がある場合を「1」で表し、差分がない場合を「0」で表してもよい。
図13は、複製数管理テーブルのデータ構造の一例である。複製数管理テーブルは、論理チャンクのアドレスと、そのアドレスの論理チャンクの複製数とからなるエントリを格納する。なお、本実施の形態では、複製数は、複製関係の階層構造のルートとなるボリュームに保存されている論理チャンクの数も含んでカウントされるものとする。つまり、ある論理チャンクのデータ列が1回も複製されていない場合は、そのアドレスの論理チャンクの複製数は1となる。そして、当該論理チャンクが複製されるたびに、そのアドレスの論理チャンクの複製数に1が加算される。
次に、論物変換情報記憶部43について説明する。
論物変換情報記憶部43は、ストレージ装置91における物理チャンクと、同一アドレスの1つ以上の論理チャンクとの関連付けを表す論物変換テーブルを記憶する。
図14は、論物変換テーブルのデータ構造の一例を示す。論物変換テーブルは、物理チャンクのアドレスと、その物理チャンクに格納される圧縮データ列が表す1つ以上の論理チャンクのアドレスとを含むエントリを格納する。なお、論物変換テーブルは、異なる物理チャンクのアドレスに対して、同一の論理チャンクのアドレスが関連付けられた複数のエントリを含む可能性がある。つまり、ある同一アドレスの1つ以上の論理チャンクから生成された圧縮データ列は、1つまたは複数の物理チャンクに格納され得る。複数の物理チャンクに格納される場合、圧縮データ列は、物理チャンクのサイズ以下に分割される。
次に、制御部42の再配置データ列更新部423について説明する。
再配置データ列更新部423は、本発明の第3の実施の形態における再配置データ列更新部323と略同様に構成されるが、以下の点が異なる。
すなわち、再配置データ列更新部423は、書き込み対象のボリュームがスナップショットの複製元(マスタボリューム)であるとき、ボリューム間での論理チャンクの複製が必要となる複製元の論理チャンクおよび複製先の論理チャンクを次のように特定する。この場合、再配置データ列更新部423は、複製元の論理チャンクとして、書き込み対象のマスタボリュームにおける書き込み対象の論理チャンクを適用する。また、再配置データ列更新部423は、複製先の論理チャンクとして、書き込み対象のマスタボリュームから取得された最新のスナップショットにおいて書き込み対象の論理チャンクと同一アドレスの論理チャンクを適用する。なお、同一のマスタボリュームから取得されたスナップショットの新旧は、例えば、ツリー管理テーブルにおける登録順序によって表されていてもよい。
また、再配置データ列更新部423は、書き込み対象のボリュームが差分クローンであるとき、ボリューム間で論理チャンクの複製が必要となる複製元の論理チャンクおよび複製先の論理チャンクを次のように特定する。この場合、再配置データ列更新部423は、複製元の論理チャンクとして、書き込み対象の差分クローンの複製元(エンティティボリューム)において書き込み対象の論理チャンクと同一アドレスの論理チャンクを適用する。また、再配置データ列更新部423は、複製先の論理チャンクとして、書き込み対象の差分クローンにおける書き込み対象の論理チャンクを適用する。
次に、制御部42の論理チャンク復元部422について説明する。
論理チャンク復元部422は、本発明の第3の実施の形態における論理チャンク復元部322と略同様に構成されるが、以下の点が異なる。
すなわち、論理チャンク復元部422は、読み込み対象のボリュームがスナップショットであるとき、参照先の論理チャンクを、次のようにして特定する。この場合、論理チャンク復元部422は、読み込み対象のスナップショットと同一のマスタボリュームから取得されたスナップショットのうち、当該スナップショットまたは当該スナップショットより新しいスナップショットを、検索対象のスナップショットとする。そして、論理チャンク復元部422は、検索対象のスナップショットの中で、読み込み対象の論理チャンクと同一アドレスの論理チャンクにおいてデータが管理されるスナップショットがあれば、そのうち最も古いスナップショットを特定する。そして、論理チャンク復元部422は、特定したスナップショットにおいて読み込み対象の論理チャンクと同一アドレスの論理チャンクを、参照先の論理チャンクとして適用する。
ただし、検索対象のスナップショットの中で、読み込み対象の論理チャンクと同一アドレスの論理チャンクにおいてデータが管理されるスナップショットが1つもない場合もある。その場合、論理チャンク復元部422は、読み込み対象のスナップショットのマスタボリュームにおいて読み込み対象の論理チャンクと同一アドレスの論理チャンクを、参照先の論理チャンクとして適用する。ただし、このとき、読み込み対象のスナップショットのマスタボリュームが、スナップショットまたは差分クローンである場合も想定される。その場合、論理チャンク復元部422は、マスタボリュームを新たな読み込み対象として、読み込み対象のボリュームがスナップショットまたは差分クローンであるときと同様に動作するよう構成される。そして、論理チャンク復元部422は、新たな読み込み対象から得られたデータを、当初の読み込み対象のデータとして取得すればよい。
また、論理チャンク復元部422は、読み込み対象のボリュームが差分クローンであるとき、参照先の論理チャンクを、次のようにして特定する。この場合、論理チャンク復元部422は、読み込み対象の差分クローンにおいて読み込み対象の論理チャンクのデータが管理されていれば、その論理チャンクを参照先の論理チャンクとして適用する。
ただし、読み込み対象の差分クローンにおいて、読み込み対象の論理チャンクのデータが管理されていない場合もある。この場合、論理チャンク復元部422は、読み込み対象の差分クローンのエンティティボリュームにおいて読み込み対象の論理チャンクと同一アドレスの論理チャンクを、参照先の論理チャンクとして適用する。ただし、このとき、読み込み対象の差分クローンのエンティティボリュームが、スナップショットまたは差分クローンである場合も想定される。その場合、論理チャンク復元部422は、エンティティボリュームを新たな読み込み対象として、読み込み対象のボリュームがスナップショットまたは差分クローンであるときと同様に動作するよう構成される。そして、論理チャンク復元部422は、新たな読み込み対象から得られたデータを、当初の読み込み対象のデータとして取得すればよい。
次に、制御部42の管理情報更新部424について説明する。
管理情報更新部424は、複数のボリュームのいずれかをマスタボリュームとしてスナップショットが取得されると、管理情報記憶部41のツリー管理テーブルに次のエントリを追加する。ツリー管理テーブルに追加されるエントリは、親ボリュームとして、複製元であるマスタボリュームを表す情報と、子ボリュームとして、新しく取得されたスナップショットを表す情報と、複製手法として、スナップショットを表す情報とからなる。また、管理情報更新部424は、管理情報記憶部41に、新しく取得されたスナップショットについての差分管理テーブルを追加する。追加される差分管理テーブルは、各論理チャンクについて差分が無いことを表すエントリからなる。
また、管理情報更新部424は、複数のボリュームのいずれかをエンティティボリュームとして差分クローンが取得されると、管理情報記憶部41のツリー管理テーブルに次のエントリを追加する。追加されるエントリは、親ボリュームとして、複製元であるエンティティボリュームを表す情報と、子ボリュームとして、新しく取得された差分クローンを表す情報と、複製手法として、差分クローンを表す情報とからなる。また、管理情報更新部424は、管理情報記憶部41に、新しく取得された差分クローンについての差分管理テーブルを追加する。追加される差分管理テーブルは、各論理チャンクについて差分が無いことを表すエントリからなる。
また、管理情報更新部424は、複数のボリュームのうちスナップショットのマスタボリュームにデータが書き込まれると、管理情報記憶部41におけるそのマスタボリュームの最新のスナップショットの差分管理テーブルを、次のように更新する。すなわち、管理情報更新部424は、当該差分管理テーブルにおける書き込み対象の論理チャンクと同一アドレスの論理チャンクのエントリを、差分が有ることを表すよう更新する。
また、管理情報更新部424は、複数のボリュームのうち差分クローンにデータが書き込まれると、管理情報記憶部41において、その差分クローンの差分管理テーブルを、次のように更新する。すなわち、管理情報更新部424は、当該差分管理テーブルにおける書き込み対象の論理チャンクのエントリを、差分が有ることを表すよう更新する。
次に、制御部42の書き込み部425について説明する。
書き込み部425は、本発明の第3の実施の形態における書き込み部325と略同様に構成されるが、以下の点が異なる。
書き込み部425は、更新後の再配置データ列に基づく圧縮データ列をストレージ装置91に書き込む際に、書き込み対象の論理チャンクに関連付けられた1つ以上の物理チャンクを、論物変換情報記憶部43を参照することにより特定する。そして、書き込み部425は、特定した物理チャンクに、圧縮データ列を書き込む。ここで、圧縮データ列のサイズが、物理チャンク長より大きい場合がある。この場合、書き込み部425は、圧縮データ列を物理チャンク以下のサイズに分割して、関連付けられた各物理チャンクに書き込んでもよい。分割した圧縮データ列の書き込みは、例えば、関連付けられた1つ以上の物理チャンクのアドレスの若番から老番の順に行われてもよい。
このとき、圧縮データ列の書き込みに必要となる物理チャンクの数が、書き込み対象の論理チャンクと同一アドレスの1つ以上の論理チャンクに関連付けられていた物理チャンクの数と同一でない場合がある。なお、書き込みに必要となる物理チャンクの数は、圧縮データ列のサイズおよび物理チャンクのサイズから算出可能である。もし、必要となる物理チャンクの数が、関連付けられている物理チャンクの数より多い場合、書き込み部425は、当該論理チャンクと同一アドレスの1つ以上の論理チャンクに、不足する数の物理チャンクを追加して関連付けた上で、書き込みを行う。もし、必要となる物理チャンクの数が、関連付けられている物理チャンクの数より少ない場合、書き込み部425は、当該論理チャンクと同一アドレスの1つ以上の論理チャンクに関連付けられている余分な数の物理チャンクを解放した上で、書き込みを行う。また、物理チャンクの追加または解放に伴い、書き込み部425は、論物変換テーブルを更新する。
次に、制御部42の読み込み部421について説明する。
読み込み部421は、本発明の第3の実施の形態における読み込み部321と略同様に構成されるが、以下の点が異なる。
すなわち、読み込み部421は、読み込み対象の論理チャンクに関連付けられた1つ以上の物理チャンクを、論物変換情報記憶部43を参照することにより特定する。そして、読み込み部421は、特定した物理チャンクから、読み込み対象の論理チャンクを含む圧縮データ列を読み込む。もし、複数の物理チャンクが特定された場合、読み込み部421は、それらの物理チャンクから読み込んだデータ列を連結することにより、読み込み対象の論理チャンクを含む圧縮データ列を取得してもよい。連結は、例えば、物理チャンクのアドレスの若番から老番の順に行われてもよい。
以上のように構成されたストレージ管理装置40の動作について、図面を参照して説明する。
<ボリュームを複製する動作の説明>
まず、ストレージ管理装置40が、ボリュームを複製する動作を図15に示す。
図15では、まず、制御部42は、本発明の第3の実施の形態と同様にステップA1を実行し、ボリュームの複製を要求する情報を取得する。
次に、管理情報更新部424は、親ボリュームとして、複製元のボリュームを表す情報と、子ボリュームとして、複製先のボリュームを表す情報と、複製手法を表す情報とを含むエントリを、管理情報記憶部41のツリー管理テーブルに追加する(ステップA12)。
次に、管理情報更新部424は、管理情報記憶部41に、複製先のボリュームについての差分管理テーブルを生成し、各論理チャンクについてのエントリを、複製元との差分が無いことを表すよう設定する。(ステップA13)。
なお、複製先のボリュームが生成された時点では、複製数管理テーブルは、更新されない。
以上で、ストレージ管理装置40は、ボリュームを複製する動作を終了する。
<データを読み込む動作の説明>
次に、ストレージ管理装置40が、ボリュームからデータを読み込む動作を、図16〜図20を参照して説明する。
まず、ストレージ管理装置40がボリュームからデータを読み込む動作の概略を図16に示す。
図16では、まず、制御部42は、本発明の第3の実施の形態と同様にステップB1を実行し、データの読み込みを要求する情報を取得する。
次に、読み込み対象のボリュームがスナップショットである場合(ステップB11でYes)、制御部42は、スナップショットからデータを読み込む動作を実行して読み込みデータ列を取得する(ステップB12)。このステップの詳細については後述する。
一方、読み込み対象のボリュームがスナップショットでなく(ステップB11でNo)、差分クローンである場合(ステップB13でYes)、制御部42は、差分クローンからデータを読み込む動作を実行して読み込みデータ列を取得する(ステップB14)。このステップの詳細については後述する。
一方、読み込み対象のボリュームがスナップショットでも差分クローンでもない場合(ステップB13でNo)について説明する。この場合、制御部42は、読み込み対象の論理チャンクを参照先の論理チャンクとする。そして、制御部42は、参照先の論理チャンクからデータを読み込む動作を実行して読み込みデータ列を取得する(ステップB15)。このステップの詳細については後述する。
そして、制御部42は、読み込みデータ列を出力する(ステップB16)。
以上で、ストレージ管理装置40によってボリュームからデータを読み込む動作の概略の説明を終了する。
次に、ステップB12における、スナップショットからデータを読み込む動作の詳細を、図17に示す。
図17では、まず、論理チャンク復元部422は、読み込み対象のスナップショットの世代を、検索世代に設定する(ステップB1201)。世代とは、そのスナップショットと同一のマスタボリュームから取得されたスナップショットの取得順序を表す情報であるものとする。
次に、論理チャンク復元部422は、検索世代のスナップショットにおいて、読み込み対象の論理チャンクと同一アドレスの論理チャンクに差分が有るか否かを、管理情報記憶部41を参照することにより判断する(ステップB1202)。
ここで、検索世代のスナップショットに差分がある場合について説明する(ステップB1202でYes)。この場合、論理チャンク復元部422は、検索世代のスナップショットにおいて読み込み対象の論理チャンクと同一のアドレスの論理チャンクを、参照先の論理チャンクとする。そして、論理チャンク復元部422は、参照先の論理チャンクを読み込む動作を実行する(ステップB1207)。これにより、読み込みデータ列が得られる。このステップの詳細については後述する。
一方、検索世代のスナップショットに差分がない場合について説明する(ステップB1202でNo)。この場合、論理チャンク復元部422は、検索世代が、読み込み対象のスナップショットと同一のマスタボリュームから取得された最新の世代であるか否かを判断する(ステップB1203)。
ここで、検索世代が最新の世代でない場合(ステップB1203でNo)、論理チャンク復元部422は、現在の検索世代より1つ新しい世代を新たな検索世代に設定する(ステップB1208)。そして、論理チャンク復元部422は、ステップB1202からの動作を繰り返す。
このように、論理チャンク復元部422は、読み込み対象のスナップショットの世代から最新世代のスナップショットまで、古い世代から新しい世代の順に、読み込み対象の論理チャンクに関する差分の有無を検索し、差分が存在した時点で検索を終了する。そして、論理チャンク復元部422は、最初に差分が存在したスナップショットにおける、読み込み対象の論理チャンクと同一アドレスの論理チャンクを、参照先の論理チャンクとして読み込みを行う。
一方、検索世代が最新の世代である場合について説明する(ステップB1203でYes)。つまり、読み込み対象のスナップショットまたはそれより新しい世代のスナップショットのいずれにも、読み込み対象の論理チャンクと同一アドレスの論理チャンクのデータが管理されていない場合である。
このとき、読み込み対象のスナップショットのマスタボリュームが、スナップショットであるとする(ステップB1204でYes)。この場合、論理チャンク復元部422は、スナップショットのマスタボリュームであるスナップショットを新たな読み込み対象として、スナップショットからデータを読み込む動作(すなわち、ステップB1201からの動作)を実行する(ステップB1205)。これにより、読み込みデータ列が得られる。
また、読み込み対象のスナップショットのマスタボリュームが差分クローンであるとする(ステップB1204でNo、ステップB1209でYes)。この場合、論理チャンク復元部422は、スナップショットのマスタボリュームである差分クローンを新たな読み込み対象として、差分クローンからデータを読み込む動作を実行する(ステップB1210)。これにより、読み込みデータ列が得られる。このステップの詳細については後述する。
また、読み込み対象のスナップショットのマスタボリュームがスナップショットでも差分クローンでもないとする(ステップB1204でNo、ステップB1209でNo)。この場合、論理チャンク復元部422は、スナップショットのマスタボリュームにおける読み込み対象の論理チャンクと同一アドレスの論理チャンクを、参照先の論理チャンクとする。そして、論理チャンク復元部422は、参照先の論理チャンクからデータを読み込む動作を実行する(ステップB1211)。これにより、読み込みデータ列が得られる。このステップの詳細については後述する。
そして、論理チャンク復元部422は、ステップB1205、B1210、B1211またはB1207で得られた読み込みデータ列を返却する(ステップB1206)。
以上で、スナップショットからデータを読み込む動作の説明を終了する。
次に、ステップB14における差分クローンからデータを読み込む動作の詳細を、図18に示す。
図18では、まず、論理チャンク復元部422は、読み込み対象の差分クローンにおいて、読み込み対象の論理チャンクに関する差分が有るか否かを、管理情報記憶部41を参照して判断する(ステップB1401)。
ここで、読み込み対象の論理チャンクに関する差分が有る場合について説明する(ステップB1401でYes)。この場合、論理チャンク復元部422は、読み込み対象の論理チャンクを参照先の論理チャンクとする。そして、論理チャンク復元部422は、参照先の論理チャンクからデータを読み込む動作を実行する(ステップB1405)。これにより、読み込みデータ列が得られる。このステップの詳細については後述する。
一方、読み込み対象の論理チャンクに関する差分が無い場合について説明する(ステップB1401でNo)。
このとき、読み込み対象の差分クローンのエンティティボリュームがスナップショットであるとする(ステップB1402でYes)。この場合、論理チャンク復元部422は、差分クローンのエンティティボリュームであるスナップショットを新たな読み込み対象として、図17に示したスナップショットからデータを読み込む動作を実行する(ステップB1403)。これにより、読み込みデータ列が得られる。
また、読み込み対象の差分クローンのエンティティボリュームが差分クローンであるとする(ステップB1402でNo、ステップB1406でYes)。この場合、論理チャンク復元部422は、差分クローンのエンティティボリュームである差分クローンを新たな読み込み対象として、差分クローンからデータを読み込む動作(すなわち、ステップB1401からの動作)を実行する(ステップB1407)。これにより、読み込みデータ列が得られる。
また、読み込み対象の差分クローンのエンティティボリュームがスナップショットでも差分クローンでもないとする(ステップB1402でNo、ステップB1406でNo)。この場合、論理チャンク復元部422は、差分クローンのエンティティボリュームにおける読み込み対象の論理チャンクと同一アドレスの論理チャンクを、参照先の論理チャンクとする。そして、論理チャンク復元部422は、参照先の論理チャンクからデータを読み込む動作を実行する(ステップB1408)。これにより、読み込みデータ列が得られる。このステップの詳細については後述する。
そして、論理チャンク復元部422は、ステップB1403、B1407、B1408またはB1405で得られた読み込みデータ列を返却する(ステップB1404)。
以上で、差分クローンからデータを読み込む動作の説明を終了する。
次に、ステップB15、B1207、B1211、B1405、B1408における参照先の論理チャンクからデータを読み込む動作の詳細を、図19に示す。
図19では、まず、読み込み部421は、参照先の論理チャンクと同一アドレスの論理チャンクの圧縮データ列を記憶している1つ以上の物理チャンクを、論物変換情報記憶部43を参照することにより特定する(ステップB2001)。
次に、読み込み部421は、特定した1つ以上の物理チャンクから、圧縮データ列を読み込む(ステップB2002)。
ここで、ステップB2001において、複数の物理チャンクが特定されていたとする。この場合、ステップB2002において、読み込み部421は、各物理チャンクについてストレージ装置91から読み込んだデータ列を連結して、圧縮データ列とする。
次に、読み込み部421は、圧縮データ列を伸長し、再配置データ列を取得する(ステップB2003)。
次に、論理チャンク復元部422は、参照先の論理チャンクの複製数を、管理情報記憶部41から取得する。また、論理チャンク復元部422は、参照先の論理チャンクの複製番号を取得する(ステップB2004)。
なお、複製番号とは、複数のボリュームにおいて同一アドレスの論理チャンクの中での順序を表すものとする。複製番号は、例えば、親子関係や新旧関係に基づいて定まる。例えば、複製関係のルートとなるルートボリュームにおける各論理チャンクの複製番号は、0であってもよい。また、他のボリュームにおいて管理されるその論理チャンクの複製番号は、階層構造においてルートボリュームから近いボリュームに含まれるものから順に割り当てられた値であってもよい。また、同一の複製元から複製された複数のボリューム間での論理チャンクの複製番号は、取得時点が古いボリュームに含まれるものから順に割り当てられた値であってもよい。
次に、論理チャンク復元部422は、複製数および複製番号を用いて、ステップB2003で取得した再配置データ列から、参照先の論理チャンクを復元する(ステップB2005)。このステップの詳細については後述する。
そして、論理チャンク復元部422は、ステップB2005で得られた読み込みデータ列を返却する(ステップB2006)。
以上で、参照先の論理チャンクからデータを読み込む動作の説明を終了する。
次に、ステップB2005における、論理チャンクを復元する動作の詳細を、図20に示す。ここでは、対象となる再配置データ列におけるオフセットをiと表し、復元する論理チャンクである読み込みデータ列におけるオフセットをjと表すことにする。
また、この動作は、対象となる再配置データ列と、参照先の論理チャンクの複製数および複製番号とが指定されて実行される。
図20では、まず、論理チャンク復元部422は、iとして複製番号を設定する(ステップB2101)。
次に、論理チャンク復元部422は、jとして0を設定する(ステップB2102)。
次に、論理チャンク復元部422は、再配置データ列におけるオフセットiのサブチャンクを読み込む(ステップB2103)。
次に、論理チャンク復元部422は、読み込みデータ列におけるオフセットjのサブチャンクに、ステップB2103で読み込んだサブチャンクを書き込む(ステップB2104)。
次に、論理チャンク復元部422は、読み込みデータ列におけるオフセットであるjが、論理チャンクを構成するサブチャンクの数に達したか否かを判断する(ステップB2105)。
ここで、達していないと判断した場合(ステップB2105でNo)、論理チャンク復元部422は、iに複製数を加算する(ステップB2106)。
次に、論理チャンク復元部422は、jに1を加算する(ステップB2107)。
そして、論理チャンク復元部422は、ステップB2103からの動作を繰り返す。
一方、jが論理チャンクを構成するサブチャンクの数に達したと判断した場合(ステップB2105でYes)、論理チャンク復元部422は、読み込みデータ列を返却する(ステップB2108)。
以上で、論理チャンクを復元する動作の説明を終了する。
<データを書き込む動作の説明>
次に、ストレージ管理装置40が、ボリュームにデータを書き込む動作を、図21〜図27を参照して説明する。
まず、ストレージ管理装置40がボリュームにデータを書き込む動作の概略を図21に示す。
図21では、まず、制御部42は、本発明の第3の実施の形態と同様にステップC1を実行し、データの書き込みを要求する情報を取得する。
次に、書き込み対象のボリュームがスナップショットのマスタボリュームである場合(ステップC11で「スナップショットのマスタボリューム」)、制御部42は、スナップショットのマスタボリュームへデータを書き込む動作を実行する(ステップC12)。このステップの詳細については後述する。
一方、書き込み対象のボリュームが差分クローンである場合(ステップC12で「差分クローン」)、制御部42は、差分クローンへデータを書き込む動作を実行する(ステップC13)。このステップの詳細については後述する。
なお、スナップショットの性質上、書き込み対象のボリュームがスナップショットであるケースについては考慮しないものとする。
以上で、ストレージ管理装置40によってボリュームにデータを書き込む動作の概略の説明を終了する。
次に、ステップC12における、スナップショットのマスタボリュームへデータを書き込む動作の詳細を、図22に示す。
図22において、まず、再配置データ列更新部423は、複製元の論理チャンクとして、書き込み対象のマスタボリュームにおける書き込み対象の論理チャンクを設定する(ステップC1201)。
次に、再配置データ列更新部423は、複製先の論理チャンクとして、書き込み対象のマスタボリュームから取得された最新のスナップショットにおいて書き込み対象の論理チャンクと同一アドレスの論理チャンクを設定する(ステップC1202)。
次に、再配置データ列更新部423は、複製元の論理チャンク、複製先の論理チャンク、書き込み対象の論理チャンク、および、書き込みデータ列を指定して、再配置データ列を更新する動作を実行する(ステップC1203)。このステップの詳細については後述する。
次に、書き込み部425は、更新された再配置データ列を圧縮してストレージ装置91に記憶する(ステップC1204)。このステップの詳細については後述する。
以上で、スナップショットのマスタボリュームへデータを書き込む動作の説明を終了する。
次に、ステップC13における差分クローンへデータを書き込む動作の詳細を、図23に示す。
図23では、まず、再配置データ列更新部423は、複製元の論理チャンクとして、書き込み対象の差分クローンのエンティティボリュームにおける書き込み対象の論理チャンクと同一アドレスの論理チャンクを設定する(ステップC1301)。
次に、再配置データ列更新部423は、複製先の論理チャンクとして、書き込み対象の差分クローンにおける書き込み対象の論理チャンクを設定する(ステップC1302)。
次に、再配置データ列更新部423は、複製元の論理チャンク、複製先の論理チャンク、書き込み対象の論理チャンク、および、書き込みデータ列を指定して、再配置データ列を更新する動作を実行する(ステップC1303)。このステップの詳細については後述する。
次に、書き込み部425は、更新された再配置データ列を圧縮してストレージ装置91に記憶する(ステップC1304)。このステップの詳細については後述する。
以上で、差分クローンへデータを書き込む動作の説明を終了する。
次に、ステップC1203、C1303における、再配置データ列を更新する動作の詳細を、図24に示す。
図24では、まず、読み込み部421は、書き込み対象の論理チャンクと同一アドレスの論理チャンクについて圧縮データ列を記憶している1つ以上の物理チャンクを、論物変換情報記憶部43を参照することにより特定する(ステップC2001)。
次に、読み込み部421は、特定した物理チャンクから、圧縮データ列を読み込む(ステップC2002)。
ここで、ステップC2001において、複数の物理チャンクが特定されていた場合、図19に示したステップB2001〜B2002において説明したように、読み込み部421は、各物理チャンクについて読み込んだデータ列を連結して圧縮データ列とする。
次に、読み込み部421は、圧縮データ列を伸長し、再配置データ列を取得する(C2003)。
次に、再配置データ列更新部423は、複製先の論理チャンクに、複製元との間の差分が有るか否かを、管理情報記憶部41の差分管理テーブルを参照することにより判断する(ステップC2004)。
ここで、差分が無い場合について説明する(ステップC2004でNo)。この場合、管理情報更新部424は、複製先の論理チャンクを含むボリュームの差分管理テーブルにおいて、複製先の論理チャンクのエントリを、複製元との差分が有ることを表すよう更新する(ステップC2005)。
次に、管理情報更新部424は、複製数管理テーブルにおいて、複製先の論理チャンクのアドレスのエントリを、複製数に1を加算して更新する(ステップC2006)。
次に、再配置データ列更新部423は、再配置データ列から、複製元の論理チャンクを復元する(ステップC2007)。具体的には、再配置データ列更新部423は、複製元の論理チャンクの複製番号および複製数を指定して、図20を参照して説明した参照先の論理チャンクを復元する動作と同様の動作を実行すればよい。
次に、再配置データ列更新部423は、複製元の論理チャンクのデータが複製先の論理チャンクに複製されたことを表すよう、再配置データ列を再配置して更新する(ステップC2008)。このステップの詳細については後述する。
次に、再配置データ列更新部423は、再配置データ列において、書き込み対象の論理チャンクを書き込みデータ列で更新する(ステップC2009)。このステップの詳細については後述する。
そして、再配置データ列更新部423は、更新した再配置データ列を返却する(ステップC2010)。
一方、複製先の論理チャンクに複製元との間の差分が有った場合(ステップC2004でYes)について説明する。この場合、ストレージ管理装置40は、ステップC2005〜C2008)を実行せずにステップC2009〜C2010を実行することにより、更新した再配置データ列を返却する。
以上で、再配置データ列を更新する動作の説明を終了する。
次に、ステップC2008において論理チャンクを複製して再配置データ列を更新する動作の詳細を、図25に示す。ここでは、再配置データ列におけるオフセットをiで表す。また、複製元の論理チャンクにおけるオフセットをjで表す。
図25では、まず、再配置データ列更新部423は、複製先の論理チャンクの複製番号を、iに設定する(ステップC2101)。
次に、再配置データ列更新部423は、jに0を設定する(ステップC2102)。
次に、再配置データ列更新部423は、再配置データ列におけるオフセットi以降末尾までのサブチャンクを読み込む(ステップC2103)。
次に、再配置データ列更新部423は、ステップC2103で読み込んだサブチャンクを、再配置データ列におけるオフセット(i+1)以降に書き込む(ステップC2104)。再配置データ列のサイズは、このステップの実行前よりサブチャンク1つ分長くなる。
次に、再配置データ列更新部423は、ステップC2007で復元された複製元の論理チャンクにおいて、オフセットjのサブチャンクを読み込む(ステップC2105)。
次に、再配置データ列更新部423は、ステップC2104で読み込んだサブチャンクを、再配置データ列におけるオフセットiのサブチャンクに書き込む(ステップC2106)。
次に、再配置データ列更新部423は、jが、論理チャンクを構成するサブチャンクの数に達したか否かを判断する(ステップC2107)。
ここで、達していないと判断した場合(ステップC2107でNo)、再配置データ列更新部423は、iに複製数を加算する(ステップC2108)。
次に、再配置データ列更新部423は、jに1を加算する(ステップC2109)。
そして、再配置データ列更新部423は、ステップC2103からの動作を繰り返す。
一方、jが論理チャンクを構成するサブチャンクの数に達した場合(ステップC2107でYes)、再配置データ列更新部423は、再配置データ列を返却する(ステップC2110)。
以上で、論理チャンクを複製して再配置データ列を更新する動作の説明を終了する。
次に、ステップC2009において、書き込みデータ列を書き込んで再配置データ列を更新する動作の詳細を、図26に示す。ここでは、書き込みデータ列におけるオフセットをjで表す。また、再配置データ列におけるオフセットをiで表す。
図26では、まず、再配置データ列更新部423は、iに書き込み対象の論理チャンクの複製番号を設定する(ステップC2201)。
次に、再配置データ列更新部423は、jに0を設定する(ステップC2202)。
次に、再配置データ列更新部423は、書き込みデータ列におけるオフセットjのサブチャンクを読み込む(ステップC2203)。
次に、再配置データ列更新部423は、ステップC2203で読み込んだサブチャンクを、再配置データ列におけるオフセットiのサブチャンクに書き込む(ステップC2204)。
次に、再配置データ列更新部423は、jが、論理チャンクを構成するサブチャンクの数に達したか否かを判断する(ステップC2205)。
ここで、達していない場合(ステップC2205でNo)、再配置データ列更新部423は、iに複製数を加算する(ステップC2206)。
次に、再配置データ列更新部423は、jに1を加算する(ステップC2207)。
そして、再配置データ列更新部423は、ステップC2203からの動作を繰り返す。
一方、jが書き込みデータ列を構成するサブチャンクの数に達した場合(ステップC2205でYes)、再配置データ列更新部423は、再配置データ列を返却する(ステップC2208)。
以上で、書き込みデータ列を書き込んで再配置データ列を更新する動作の説明を終了する。
次に、ステップC1404において、更新された再配置データ列を圧縮してストレージ装置91に書き込む動作の詳細を図27に示す。
図27では、まず、書き込み部425は、対象の再配置データ列を圧縮して、圧縮データ列を生成する(ステップC2301)。
次に、書き込み部425は、生成された圧縮データ列を物理チャンク長で分割する(ステップC2302)。分割されたデータ列を、分割圧縮データ列とも記載する。
次に、書き込み部425は、書き込み対象の論理チャンクのアドレスに関連付けられた1つ以上の物理チャンクのアドレスを取得する(ステップC2303)。
次に、書き込み部425は、ステップC2302で分割された分割圧縮データ列の数が、ステップC2303で取得された物理チャンクの数と等しいか否かを判断する(ステップC2304)。
ここで、分割圧縮データ列の数が物理チャンクの数と等しくなく、物理チャンクの数より多い場合(ステップC2304でNo、C2305でYes)について説明する。この場合、書き込み部425は、不足する数の物理チャンクを取得する(ステップC2306)。
そして、書き込み部425は、新たに取得した物理チャンクのアドレスと、書き込み対象の論理チャンクのアドレスとを関連付けたエントリを、論物変換情報記憶部43の論物変換テーブルに追加する(ステップC2307)。そして、動作は、後述のステップC2310に進む。
また、分割圧縮データ列の数が物理チャンクの数以下である場合(ステップC2304でNo、C2305でNo)について説明する。この場合、書き込み部425は、不要となる数の物理チャンクを解放する(ステップC2308)。
そして、書き込み部425は、解放した物理チャンクのアドレスと、書き込み対象の論理チャンクのアドレスとを関連付けたエントリを、論物変換情報記憶部43の論物変換テーブルから削除する(ステップC2309)。そして、動作は、後述のステップC2310に進む。
また、分割圧縮データ列の数が物理チャンクの数に等しい場合(ステップC2304でYes)について説明する。この場合、動作は、次のステップC2310に進む。
次に、再配置データ列更新部423は、各分割圧縮データ列を、書き込み対象の論理チャンクのアドレスに関連付けられた1つ以上の物理チャンクに、それぞれ書き込む(ステップC2310)。
例えば、再配置データ列更新部423は、取得された物理チャンクのうちアドレスが若番の物理チャンクから老番の物理チャンクの順に、先頭の分割圧縮データ列から順次書き込めばよい。
以上で、更新された再配置データ列を圧縮してストレージ装置91に書き込む動作の説明を終了する。
<具体例>
次に、ストレージ管理装置40の動作を具体例で示す。
ここでは、前述したように、アドレスが#XXXXの論理チャンクを、論理チャンク#XXXXとも記載する。また、1つ以上の論理チャンク#XXXXに基づく再配置データ列を、再配置データ列#XXXXとも記載する。また、再配置データ列#XXXXが圧縮された圧縮データ列を、圧縮データ列#XXXXとも記載する。さらに、アドレスが#YYYYの物理チャンクを、物理チャンク#YYYYとも記載する。
図28は、この具体例におけるボリューム間の複製関係の階層構造を模式的に示した図である。ボリュームAは、階層構造のルートとなるマスタボリュームであり、4つの論理チャンク#0000〜#0003にデータを保存している。
また、図28において、スナップショットB1は、ボリュームAのある時点におけるスナップショットを表すボリュームである。また、スナップショットB1は、論理チャンク#0000および#0002において、当該スナップショットの取得時点のデータを管理している。これは、スナップショットB1の取得時以降に、マスタボリュームであるボリュームAにおいて論理チャンク#0000および#0002のデータが更新されたことを表している。
なお、図28には、ボリュームAをマスタボリュームとする1つのスナップショットB1を示しているが、同一のボリュームAをマスタボリュームとして異なる時点に複数のスナップショットB1〜Bn(nは1以上の整数)が取得されてもよい。
また、図28において、差分クローンC1およびC2は、それぞれ、スナップショットB1をエンティティボリュームとする差分クローンを表すボリュームである。差分クローンC1は、生成された後、論理チャンク#0002のデータが更新されたため、当該論理チャンクにおいて、更新後のデータを管理している。また、差分クローンC2は、生成された後、論理チャンク#0000および#0001のデータが更新されたため、これらの論理チャンクにおいて、更新後のデータを管理している。
なお、図28には、スナップショットB1をエンティティボリュームとする2つの差分クローンC1およびC2を示しているが、同一のスナップショットB1をエンティティボリュームとする複数の差分クローンC1〜Cm(mは1以上の整数)が取得されてもよい。
図29は、この具体例において管理情報記憶部41に記憶されるツリー管理テーブルの一例である。例えば、1行目は、スナップショットB1が、ボリュームAをマスタボリュームとするスナップショットであることを表している。
なお、ツリー管理テーブルにおいて、同一のマスタボリュームから取得されたスナップショット間、または、同一のエンティティボリュームから取得された差分クローン間では、ツリー管理テーブルへの登録順により新旧関係が識別されるものとする。
図30は、この具体例において管理情報記憶部41に記憶される差分管理テーブルの一例である。差分管理テーブルは、いずれかのボリュームの複製先となっているボリュームB1、C1、C2について生成されている。例えば、スナップショットB1の差分管理テーブルの1行目は、スナップショットB1の論理チャンク#0000において、複製元であるボリュームAとの間に差分が有ることを表している。
図31は、この具体例において管理情報記憶部41に記憶される複製数管理テーブルの一例である。例えば、複製数管理テーブルの1行目は、アドレス#0000の論理チャンクの複製数が3であることを表している。
図32は、この具体例において論物変換情報記憶部43に記憶される論物変換テーブルの一例である。例えば、論物変換テーブルの1行目は、物理チャンク#0000には、圧縮データ列#0000が格納されることを表している。同様に、論物変換テーブルの5行目は、物理チャンク#0004にも、圧縮データ列#0000が格納されることを表している。つまり、この例の場合、圧縮データ列#0000は、物理チャンク#0000および#0004に分割されて格納され得ることを表している。
<<データの読み込みの具体例>>
次に、この具体例において、ストレージ装置91に記憶されるデータを読み込む動作を、模式的に図33に示す。図33において、P0〜P5は、圧縮データ列#0000を表す。また、Q0〜Q2は、圧縮データ列#0001を表す。また、R0〜R3は、圧縮データ列#0002を表す。また、S0〜S2は、圧縮データ列#0003を表す。また、例えば、1つ以上の論理チャンク#0000には、物理チャンク#0000および#0004が関連付けられている。そして、物理チャンク#0000には、圧縮データ列#0000であるP0〜P5が物理チャンクのサイズ以下に分割されたP0〜P3が格納されている。また、物理チャンク#0004には、圧縮データ列#0000であるP0〜P5が物理チャンクのサイズ以下に分割されたP4〜P5が格納されている。
例えば、制御部42が、読み込み対象として、差分クローンC1の論理チャンク#0000の読み込みを要求する情報を取得したとする(図16:ステップB1、B11でNo、B13でYes、B14)。
この場合、差分クローンC1は、論理チャンク#0000のデータを管理していない(図18:ステップB1401でNo)。そこで、制御部42は、エンティティボリュームであるスナップショットB1における論理チャンク#0000を新たな読み込み対象として、スナップショットからデータを読み込む動作を実行する(B1402でYes、B1403)。
ここで、スナップショットB1は、論理チャンク#0000のデータを管理している(図17:ステップB1201、B1202でYes)。そこで、制御部42は、スナップショットB1の論理チャンク#0000を参照先の論理チャンクとして、参照先の論理チャンクからデータを読み込む動作を実行する(ステップB1207)。
ここでは、読み込み部421は、まず、論物変換テーブルから、論理チャンク#0000に関連付けられた物理チャンク#0000および#0004を特定する(図19:ステップB2001)。
そして、読み込み部421は、物理チャンク#0000および#0004からデータ列を読み込んで連結し、圧縮データ列#0000であるP0〜P5を取得する(ステップB2002)。その後、読み込み部421は、圧縮データ列#0000を伸長し、再配置データ列#0000「00011SX22333」を取得する(ステップB2003)。
そして、論理チャンク復元部422は、複製数管理テーブルから、アドレス#0000の複製数として3を取得する。また、論理チャンク復元部422は、ツリー管理テーブルから、スナップショットB1の論理チャンク#0000は、複製番号が1であることを算出する(ステップB2004)。
なお、この具体例では、ボリュームAの論理チャンク#0000の複製番号が0であり、ボリュームB1の論理チャンク#0000の複製番号が1であり、ボリュームC2の論理チャンク#0000の複製番号が2であるものとする。
次に、論理チャンク復元部422は、ボリュームB1の論理チャンク#0000の複製番号である1と、論理チャンク#0000の複製数である3とを用いて、論理チャンクを復元する動作を実行する(ステップB2005)。すなわち、論理チャンク復元部422は、再配置データ列#0000「00011SX22333」から、オフセット1、4、7、11のサブチャンクを読み込んで連結し、スナップショットB1の論理チャンク#0000として「0123」を得る。
そして、論理チャンク復元部422は、取得した「0123」を、差分クローンC1の論理チャンク#0000の読み込みデータ列として返却する(図18:ステップB1404)。
以上で、データを読み込む動作の具体例の説明を終了する。
<<データの書き込みの具体例>>
次に、データを書き込む動作の具体例について、図34〜35を用いて説明する。ここでは、図34に示すように、4つの書き込み要求を想定して説明する。図34において、白抜きの矢印は、書き込み対象となる論理チャンクのオフセットの位置を示す。また、矩形で囲まれたアルファベットは、書き込みデータを示す。また、実線の矢印は、書き込みに応じてボリューム間で必要となる論理チャンクの複製を示す。
図34において、1つ目の書き込み要求は、マスタボリュームであるボリュームAの論理チャンク#0001のオフセット2の位置に、データ「Z」を書き込む要求である。2つ目の書き込み要求は、差分クローンC1の論理チャンク#0000のオフセット0の位置に、データ「M」を書き込む要求である。3つ目の書き込み要求は、差分クローンC1の論理チャンク#0002のオフセット2の位置に、データ「N」を書き込む要求である。4つ目の書き込み要求は、差分クローンC2の論理チャンク#0003のオフセット2の位置に、データ「V」を書き込む要求である。
これらの4つの書き込み要求の具体例について、説明する。
<<書き込みの具体例1:書き込み対象のボリュームがマスタボリュームの場合>>
まず、制御部42が、ボリュームAの論理チャンク#0001に対して、オフセット2の位置にデータ「Z」の書き込みを要求する情報を取得した場合について説明する(図21:ステップC1、C11で「スナップショットのマスタボリューム」、C12)。
この場合、まず、論理チャンク復元部422は、この書き込み要求に応じてボリューム間で論理チャンクの複製が必要となる複製元の論理チャンクとして、書き込み対象であるボリュームAの論理チャンク#0001を特定する。また、論理チャンク復元部422は、複製先の論理チャンクとして、書き込み対象のボリュームAの最新のスナップショットであるスナップショットB1の論理チャンク#0001を特定する(図22:ステップC1201、C1202)。
次に、読み込み部421は、上述した読み込みの具体例と略同様に、ストレージ装置91から読み込んだ圧縮データ列#0001を伸長し、再配置データ列#0001「44556T7U」を取得する(図24:ステップC2001〜C2003)。なお、この時点で取得される再配置データ列#0001は、書き込み前であるため、図33に示した通りである。
ここで、スナップショットB1は、複製先の論理チャンク#0001のデータを管理していない(ステップC2004でNo)。そこで、管理情報更新部424は、スナップショットB1の差分管理テーブルにおいて、アドレス#0001のエントリを、差分有りを表すよう更新する。また、管理情報更新部424は、複製数管理テーブルにおいて、アドレス#0001の複製数に1を加算して更新する(ステップC2005、C2006)。
次に、論理チャンク復元部422は、再配置データ列#0001「44556T7U」から、複製元の論理チャンクであるボリュームAの論理チャンク#0001「4567」を復元する(ステップC2007)。
そして、再配置データ列更新部423は、スナップショットB1の複製先の論理チャンク#0001に、ボリュームAの複製元の論理チャンク#0001のデータが複製されたことを表すよう、再配置データ列を更新する動作を実行する(ステップC2008)。これにより、再配置データ列#0001は、「44455566T77U」となる。
さらに、再配置データ列更新部423は、書き込み対象の論理チャンクであるボリュームAの論理チャンク#0001のオフセット2の位置に、データ「Z」が書き込まれたことを表すよう、再配置データ列を更新する動作を実行する(ステップC2009)。これにより、再配置データ列#0001は、図35に示す通り、「444555Z6T77U」となる。なお、図35において、再配置データ列#0001中の太枠で囲まれたサブチャンクは、論理チャンクの複製により追加されたサブチャンクを表す。また、白抜きの矢印が示す先の灰色で塗りつぶされたサブチャンクは、データが更新されたサブチャンクを表す。
そして、書き込み部425は、図35に示す通り、更新された再配置データ列#0001を圧縮して圧縮データ列#0001「Q0’〜Q3’」を生成し、物理チャンク長に分割する(ステップC2301、C2302)。ここでは、圧縮データ列#0001「Q0’〜Q3’」のサイズは、物理チャンク長より短く、分割は行われなかったとする。すなわち、分割数は、1である。
そして、書き込み部425は、論物変換テーブルに基づいて、論理チャンク#0001に関連付けられた物理チャンク#0002を取得する(ステップC2303)。
ここでは、更新後の圧縮データ列#0001は、更新前の圧縮データ列#0001よりサイズが大きくなっているが、書き込みに必要となる物理チャンクの数は1つで、更新前と変わらない(ステップC2304でYes)。したがって、書き込み部425は、図35に示す通り、物理チャンク#0002に、圧縮データ列「Q0’〜Q3’」を書き込む(ステップC2310)。
以上で、データを書き込む動作の1つ目の具体例の説明を終了する。
<<書き込みの具体例2:書き込み対象のボリュームが差分クローンの場合>>
また、制御部42が、差分クローンC1の論理チャンク#0000に対して、オフセット0の位置にデータ「M」の書き込みを要求する情報を取得した場合について説明する(図21:ステップC1、C11で「差分クローン」、C13)。
この場合、まず、論理チャンク復元部422は、書き込み要求に応じてボリューム間で論理チャンクの複製が必要となる複製元の論理チャンクとして、差分クローンC1のエンティティボリュームであるスナップショットB1の論理チャンク#0000を特定する。また、論理チャンク復元部422は、複製先の論理チャンクとして、書き込み対象の差分クローンC1の論理チャンク#0000を特定する(図23:ステップC1301、1302)。
次に、読み込み部421は、上述した読み込みの具体例と略同様に、ストレージ装置91から読み込んだ圧縮データ列#0000を伸長し、再配置データ列#0000「00011SX22333」を取得する(図24:ステップC2001〜C2003)。なお、この時点で取得される再配置データ列#0000は、書き込み前であるため、図33に示した通りである。
ここで、差分クローンC1は、複製先の論理チャンク#0000のデータを管理していない(ステップC2004でNo)。そこで、管理情報更新部424は、差分クローンC1の差分管理テーブルにおいて、アドレス#0000のエントリを、差分有りを表すよう更新する。また、管理情報更新部424は、複製数管理テーブルにおいて、アドレス#0000の複製数に1を加算して更新する(ステップC2005、C2006)。
次に、論理チャンク復元部422は、再配置データ列#0000「00011SX22333」から、複製元の論理チャンクであるスナップショットB1の論理チャンク#0000「0123」を復元する(ステップC2007)。
そして、再配置データ列更新部423は、差分クローンC1の複製先の論理チャンク#0000に、スナップショットB1の複製元の論理チャンク#0000のデータが複製されたことを表すよう、再配置データ列を更新する動作を実行する(ステップC2008)。これにより、再配置データ列#0000は、「0000111SX2223333」となる。
さらに、再配置データ列更新部423は、書き込み対象の論理チャンクである差分クローンC1の論理チャンク#0000のオフセット0の位置に、データ「M」が書き込まれたことを表すよう、再配置データ列を更新する動作を実行する(ステップC2009)。これにより、再配置データ列#0000は、図35に示す通り、「00M0111SX2223333」となる。
そして、書き込み部425は、図35に示す通り、更新された再配置データ列#0000を圧縮して圧縮データ列#0000「P0’〜P6’」を生成し、物理チャンク長に分割する(ステップC2301、C2302)。ここでは、分割数は、2となる。
そして、書き込み部425は、論物変換テーブルに基づいて、論理チャンク#0000に関連付けられた物理チャンク#0000および#0004を取得する(ステップC2303)。
ここでは、更新後の圧縮データ列#0000は、更新前の圧縮データ列#0000よりサイズが大きくなっているが、書き込みに必要となる物理チャンクの数は2つで、更新前と変わらない(ステップC2304でYes)。したがって、書き込み部425は、図35に示す通り、物理チャンク#0000に、圧縮データ列#0000を分割した「P0’〜P3’」を書き込む。また、書き込み部425は、物理チャンク#0004に、圧縮データ列#0000を分割した「P4’〜P6’」を書き込む(ステップC2310)。
以上で、データを書き込む動作の2つ目の具体例の説明を終了する。
<<書き込みの具体例3:書き込み対象のボリュームが差分クローンの場合>>
また、制御部42が、差分クローンC1の論理チャンク#0002に対して、オフセット2の位置にデータ「N」の書き込みを要求する情報を取得した場合について説明する(図21:ステップC1、C11で「差分クローン」、C13)。
この場合、まず、論理チャンク復元部422は、書き込み要求に応じてボリューム間で論理チャンクの複製が必要となる複製元の論理チャンクとして、差分クローンC1のエンティティボリュームであるスナップショットB1の論理チャンク#0002を特定する。また、論理チャンク復元部422は、複製先の論理チャンクとして、書き込み対象の差分クローンC1の論理チャンク#0002を特定する(図23:ステップC1301、1302)。
次に、読み込み部421は、上述した読み込みの具体例と略同様に、ストレージ装置91から読み込んだ圧縮データ列#0002を伸長し、再配置データ列#0002「888Y9LAAABBB」を取得する(図24:ステップC2001〜C2003)。なお、この時点で取得される再配置データ列#0002は、書き込み前であるため、図33に示した通りである。
ここで、差分クローンC1は、複製先の論理チャンク#0002のデータを既に管理している(ステップC2004でYes)。したがって、再配置データ列更新部423は、複製先の論理チャンクを復元する動作と、論理チャンクを複製して再配置データ列を更新する動作と、管理情報を更新する動作とを実行しない。
そして、再配置データ列更新部423は、書き込み対象の論理チャンクである差分クローンC1の論理チャンク#0002のオフセット2の位置に、データ「N」が書き込まれたことを表すよう、再配置データ列を更新する動作を実行する(ステップC2009)。これにより、再配置データ列#0002は、図35に示す通り、「888Y9LAANBBB」となる。
そして、書き込み部425は、図35に示す通り、更新された再配置データ列#0002を圧縮して圧縮データ列#0002「R0’〜R3’」を生成し、物理チャンク長に分割する(ステップC2301、C2302)。ここでは、分割数は、1である。
そして、書き込み部425は、論物変換テーブルに基づいて、論理チャンク#0002に関連付けられた物理チャンク#0001を取得する(ステップC2303)。
ここでは、更新後の圧縮データ列#0002は、更新前の圧縮データ列#0002と同サイズである。そのため、書き込みに必要となる物理チャンクの数は1つで、更新前と変わらない(ステップC2304でYes)。したがって、書き込み部425は、図35に示す通り、物理チャンク#0001に、圧縮データ列#0002「R0’〜R3’」を書き込む。
以上で、データを書き込む動作の3つ目の具体例の説明を終了する。
<<書き込みの具体例4:書き込み対象のボリュームが差分クローンの場合>>
また、制御部42が、差分クローンC2の論理チャンク#0003に対して、オフセット2の位置にデータ「V」の書き込みを要求する情報を取得した場合について説明する(図21:ステップC1、C11で「差分クローン」、C13)。
この場合、まず、論理チャンク復元部422は、書き込み要求に応じてボリューム間で論理チャンクの複製が必要となる複製元の論理チャンクとして、差分クローンC2のエンティティボリュームであるスナップショットB1の論理チャンク#0003を特定する。また、論理チャンク復元部422は、複製先の論理チャンクとして、書き込み対象の差分クローンC2の論理チャンク#0003を特定する(図23:ステップC1301、1302)。
次に、読み込み部421は、上述した読み込みの具体例と略同様に、ストレージ装置91から読み込んだ圧縮データ列#0003を伸長し、再配置データ列#0003「CDEF」を取得する(図24:ステップC2001〜C2003)。なお、この時点で取得される再配置データ列#0003は、書き込み前であるため、図33に示した通りである。
ここで、差分クローンC2は、複製先の論理チャンク#0003のデータを管理していない(ステップC2004でNo)。そこで、管理情報更新部424は、差分クローンC2の差分管理テーブルにおいて、アドレス#0003のエントリを、差分有りを表すよう更新する。また、管理情報更新部424は、複製数管理テーブルにおいて、アドレス#0003の複製数に1を加算して更新する(ステップC2005、C2006)。
次に、論理チャンク復元部422は、複製元の論理チャンクであるスナップショットB1の論理チャンク#0003を復元する。
ここで、スナップショットB1は、複製元の論理チャンク#0003のデータを管理していない(図17:ステップB1202でNo、B1203でYes)。
そこで、論理チャンク復元部422は、スナップショットB1のマスタボリュームであるボリュームAの論理チャンク#0003を、参照先の論理チャンクとする(ステップB1204でNo、B1209でNo、B1211)。
そして、論理チャンク復元部422は、再配置データ列#0003「CDEF」から、ボリュームAの論理チャンク#0003の「CDEF」を復元する。再配置データ列更新部423は、この「CDEF」を、スナップショットB1における複製元の論理チャンク#0003のデータとして取得することになる(図24:ステップC2007)。
そして、再配置データ列更新部423は、差分クローンC2の複製先の論理チャンク#0003に、スナップショットB1の複製元の論理チャンク#0003のデータが複製されたことを表すよう、再配置データ列を更新する動作を実行する(ステップC2008)。これにより、再配置データ列#0003は、「CCDDEEFF」となる。
さらに、再配置データ列更新部423は、書き込み対象の論理チャンクである差分クローンC2の論理チャンク#0003のオフセット2の位置に、データ「V」が書き込まれたことを表すよう、再配置データ列を更新する動作を実行する(ステップC2009)。これにより、再配置データ列#0003は、図35に示す通り、「CCDDEVFF」となる。
そして、書き込み部425は、図35に示す通り、更新された再配置データ列#0003を圧縮して圧縮データ列#0003「S0’〜S4’」を生成し、物理チャンク長に分割する。ここでは、分割数は、2となる。
そして、書き込み部425は、論物変換テーブルに基づいて、論理チャンク#0003に関連付けられた物理チャンク#0003を取得する(ステップC2303)。
ここで、更新後の圧縮データ列#0003は、更新前の圧縮データ列#0003よりサイズが大きくなっており、書き込みに必要となる物理チャンクの数は、更新前から1つ増えて2つとなっている(ステップC2304でNo、C2305でYes)。
そこで、書き込み部425は、論理チャンク#0003に、物理チャンク#0005を追加して関連付ける(ステップC2306)。また、管理情報更新部424は、物理チャンク#0005に論理チャンク#0003を関連付けたエントリを、論物変換テーブルに追加する(ステップC2307)。
そして、書き込み部425は、図35に示す通り、物理チャンク#0003に、圧縮データ列#0003を分割した「S0’〜S3’」を書き込む。また、書き込み部425は、物理チャンク#0005に、圧縮データ列#0003を分割した「S4’」を書き込む(ステップC2310)。
以上で、データを書き込む動作の4つ目の具体例の説明を終了する。
次に、本発明の第4の実施の形態の効果について述べる。
本発明の第4の実施の形態としてのストレージシステムは、ブロック型ストレージ装置に対する書き込み量を削減しながら、ボリュームまたはそのスナップショットや差分クローンに対するデータの読み書きを行うことができる。
その理由について説明する。本実施の形態は、本発明の第3の実施の形態と同様に構成されることに加えて、次のように構成されるからである。
まず、再配置データ列更新部が、書き込み対象のボリュームがスナップショットの複製元としてのマスタボリュームであるとき、次のように動作するよう構成される。この場合、再配置データ列更新部が、ボリューム間で論理チャンクの複製が必要となる複製元の論理チャンクおよび複製先の論理チャンクを次のように特定する。すなわち、再配置データ列更新部が、複製元の論理チャンクとして、マスタボリュームにおける書き込み対象の論理チャンクを適用する。また、再配置データ列更新部が、複製先の論理チャンクとして、マスタボリュームから取得された最新のスナップショットにおける書き込み対象の論理チャンクと同一アドレスの論理チャンクを適用するからである。
さらに、再配置データ列更新部が、書き込み対象のボリュームが差分クローンであるとき、次のように動作するよう構成される。この場合、再配置データ列更新部が、ボリューム間で論理チャンクの複製が必要となる複製元の論理チャンクおよび複製先の論理チャンクを次のように特定する。すなわち、再配置データ列更新部が、複製元の論理チャンクとして、書き込み対象のボリュームの複製元としてのエンティティボリュームにおける書き込み対象の論理チャンクと同一アドレスの論理チャンクを適用する。また、再配置データ列更新部が、複製先の論理チャンクとして、書き込み対象の差分クローンにおける書き込み対象の論理チャンクを適用するからである。
さらに、論理チャンク復元部が、読み込み対象のボリュームがスナップショットであるとき、次のように動作するよう構成される。すなわち、論理チャンク復元部が、当該スナップショットと同一のマスタボリュームから取得されたスナップショットのうち、当該スナップショットまたは当該スナップショットより新しいスナップショットを検索対象として特定する。そして、論理チャンク復元部が、検索対象のスナップショットの中から、読み込み対象の論理チャンクと同一アドレスの論理チャンクにデータが管理されるスナップショットがあるかを判断する。そして、そのようなスナップショットがあれば、論理チャンク復元部が、そのようなスナップショットのうち最も古いスナップショットにおける当該同一アドレスの論理チャンクを、参照先の論理チャンクとして適用するからである。
さらに、論理チャンク復元部が、読み込み対象のボリュームが差分クローンであるとき、次のように動作するよう構成される。すなわち、論理チャンク復元部が、読み込み対象の差分クローンにおける読み込み対象の論理チャンクでデータが管理されていれば、読み込み対象の差分クローンにおける読み込み対象の論理チャンクを、参照先の論理チャンクとして適用するからである。
このように、本実施の形態は、複製手法がスナップショット技術および差分クローンのいずれであるかに応じて、データの書き込みの際にボリューム間で論理チャンクの複製が必要となる複製元の論理チャンクと複製先の論理チャンクとを、適切に設定する。また、本実施の形態は、複製手法に応じて、データの読み込みの際に参照すべき論理チャンクを、適切に設定する。これにより、本実施の形態は、複製手法がスナップショット技術および差分クローンのいずれであっても、本発明の第1〜第3の実施の形態と同様に、ブロック型ストレージ装置に対する書き込み量を削減しながら、読み書きを行うことができる。
また、さらなる理由について説明する。
本実施の形態では、論物変換情報記憶部が、ストレージ装置の物理チャンクと、同一アドレスの1つ以上の論理チャンクとの関連付けを表す情報を記憶している。そして、更新後の再配置データ列に基づく圧縮データ列について書き込みに必要となる物理チャンクの数が、書き込み対象の論理チャンクと同一アドレスの1つ以上の論理チャンクに関連付けられた物理チャンクの数と同一でない場合がある。この場合、書き込み部が、当該同一アドレスの1つ以上の論理チャンクに対して物理チャンクの不足分を追加して関連付けまたは余剰分を解放してから書き込みを行うとともに、論物変換情報記憶部に記憶される情報を更新するからである。
このように、本実施の形態は、複製関係の階層構造を構成する複数のボリュームのいずれかへの書き込みに応じて、圧縮データ列のサイズが増減する場合にも、物理チャンクを過不足なく割り当てる。これにより、本実施の形態は、物理チャンクの使用状況を効率化することができる。
なお、本実施の形態において、ボリュームの複製手法として、コピーオンライト方式のスナップショット技術と差分クローン技術とを採用する例について説明した。これに限らず、ボリュームの複製手法は、複製元および複製先のボリューム間の差分を管理する複製手法であれば、他の手法であってもよい。例えば、リダイレクトオンライト方式のスナップショット技術であってもよい。そのような他の複製手法であっても、本実施の形態は、書き込みに応じてボリューム間で論理チャンクの複製が必要となる複製元の論理チャンクおよび複製先の論理チャンクを、複製手法の性質に応じて適切に設定することにより、同様の効果を奏する。また、本実施の形態は、読み込みに応じて参照すべき論理チャンクを、複製手法の性質に応じて適切に設定することにより、同様の効果を奏する。
また、本実施の形態において、論理チャンクを復元する動作、論理チャンクを複製する動作、および、書き込みデータ列を書き込む動作を、図20、図25および図26をそれぞれ用いて説明した。ただし、これらの動作で採用するアルゴリズムは、これらの図面のフローチャートで示したものに限定されない。これらの動作で採用されるアルゴリズムは、再配置規則にしたがって、再配置データ列に対して論理チャンクの復元、複製および書き込みを行うものであれば、他のアルゴリズムであってもよい。
また、上述した各実施の形態において、論理チャンクが4バイトであり、4つの1バイトのサブチャンクから構成される例を中心に説明したが、論理チャンクおよびサブチャンクのチャンク長は、これに限定されない。また、論理チャンクを構成するサブチャンクの数は、4つに限定されない。
また、上述した本発明の各実施の形態において、ストレージ装置が、物理的な記憶媒体であるものとして説明したが、ストレージ装置は、単一の物理的な記憶媒体に限定されない。例えば、ストレージ装置は、RAID(Redundant Array of Independent Disks)技術等による仮想的な記憶媒体でも構わない。
また、上述した本発明の各実施の形態において、再配置規則として、同一のオフセットをとるサブチャンクを複製番号が若い順に配置したサブチャンク列を、オフセットが若い順に配置する規則の例について説明した。ただし、再配置規則は、同一アドレスの論理チャンク間で同一のオフセットをとるサブチャンクを連続させるよう配置する規則であれば、その他の内容の規則であってもよい。
また、上述した本発明の各実施の形態において、ストレージ管理装置の各機能ブロックが、メモリに記憶されたコンピュータ・プログラムを実行するCPUによって実現される例を中心に説明した。これに限らず、各機能ブロックの一部、全部、または、それらの組み合わせが専用のハードウェアにより実現されていてもよい。
また、上述した本発明の各実施の形態において、ストレージ管理装置の機能ブロックは、複数の装置に分散されて実現されてもよい。
また、上述した本発明の各実施の形態において、各フローチャートを参照して説明したストレージ管理装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータ装置の記憶装置(記憶媒体)に格納しておく。そして、係るコンピュータ・プログラムを当該CPUが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。