(57)【要約】【課題】世代数の増加に伴うアクセス性能の低下を抑制するためのスナップショットの取得技術を提供する。【解決手段】ストレージ制御装置は、生成部、第１関係付け部、及び、第２関係付け部を含む。生成部は、記憶領域の管理単位を示すボリュームの静止点間の差分を示す差分情報であって複数世代に関連付けられた差分情報に基づいて、複数世代の差分情報を集約した集約情報を生成する。第１関係付け部は、集約情報を最古の静止点でのボリュームの状態に関係付ける。第２関係付け部は、直近の静止点のボリュームの状態から更新されたボリュームの更新情報を、集約情報に関係付ける。【選択図】図１
2016162245.tif 000002
【特許請求の範囲】
【請求項１】
記憶領域の管理単位を示すボリュームの静止点間の差分を示す差分情報であって複数世代に関連付けられた該差分情報に基づいて、該複数世代の差分情報を集約した集約情報を生成する生成部と、
前記集約情報を最古の静止点での前記ボリュームの状態に関係付ける第１関係付け部と、
直近の静止点のボリュームの状態から更新されたボリュームの更新情報を、前記集約情報に関係付ける第２関係付け部と
を備えることを特徴とするストレージ制御装置。
【請求項２】
前記ストレージ制御装置は、さらに、
新規の静止点におけるスナップショットの取得指示を受信した場合、前記集約情報に前記更新情報をマージする統合部と、
マージ済みの前記更新情報を最新世代の前記差分情報に関係付ける第３関係付け部と、
を備え、
前記生成部は、前記新規の静止点のボリュームの状態から更新されたボリュームの更新情報を生成し、
前記第２関係付け部は、生成された前記更新情報を前記集約情報に関係付ける
ことを特徴とする請求項１に記載のストレージ制御装置。
【請求項３】
前記生成部は、新規の静止点におけるスナップショットの取得指示を受信した場合、前記新規の静止点のボリュームの状態から更新されたボリュームの更新情報である第１の更新情報を生成して、前記取得指示の受信前に存在した前記更新情報である第２の更新情報に関係付けるとともに、前記第２の更新情報を読み取り専用に設定し、
前記統合部は、読み取り専用に設定された前記第２の更新情報を、前記集約情報にマージし、
前記第２関係付け部は、前記マージが完了すると、前記第１の更新情報と前記第２の更新情報の関係付けを解除して、前記第１の更新情報を前記集約情報に関係付け、
前記第３関係付け部は、前記マージが完了すると、前記第２の更新情報と前記集約情報の関係付けを解除して、前記最新世代の差分情報に関係付ける
ことを特徴とする請求項２に記載のストレージ制御装置。
【請求項４】
前記ストレージ制御装置は、さらに、
所定の世代へのリストア指示を受信した場合、前記所定の世代のボリュームの状態から前記リストア指示の受信以降に更新されたボリュームの更新情報である第３の更新情報を作成して、前記所定の世代の差分情報に関係付けるとともに、前記リストア指示の受信前に存在した前記更新情報と前記集約情報とを削除し、前記所定の世代以前の全ての差分情報に基づいて、前記所定の世代以前の全ての世代の差分情報を集約した集約情報を生成して、前記最古の静止点での前記ボリュームの状態に関係付け、前記第３の更新情報を、生成した前記集約情報に関係付けるリストア部
を備えることを特徴とする請求項１〜３のうちいずれか１項に記載のストレージ制御装置。
【請求項５】
前記差分情報は、前記ボリュームの変更前のデータが記憶されている記憶領域を示す領域情報と、該記憶領域の変更後のデータとを含み、
前記リストア部は、前記所定の世代以前の差分情報から、世代の新しい順に差分情報を抽出し、前記抽出した差分情報に含まれる前記変更後のデータのうち、該抽出した差分情報よりも新しい世代の差分情報に含まれる前記変更後のデータが前記集約情報に存在しない前記記憶領域の変更後のデータを、前記集約情報に格納する
ことを特徴とする請求項４に記載のストレージ制御装置。
【請求項６】
記憶領域の管理単位を示すボリュームの静止点間の差分を示す差分情報であって複数世代に関連付けられた該差分情報に基づいて、該複数世代の差分情報を集約した集約情報を生成し、
前記集約情報を最古の静止点での前記ボリュームの状態に関係付け、
直近の静止点のボリュームの状態から更新されたボリュームの更新情報を、前記集約情報に関係付ける
処理をコンピュータが実行することを特徴とするストレージ制御方法。
【請求項７】
コンピュータに、
記憶領域の管理単位を示すボリュームの静止点間の差分を示す差分情報であって複数世代に関連付けられた該差分情報に基づいて、該複数世代の差分情報を集約した集約情報を生成し、
前記集約情報を最古の静止点での前記ボリュームの状態に関係付け、
直近の静止点のボリュームの状態から更新されたボリュームの更新情報を、前記集約情報に関係付ける
処理を実行させることを特徴とするストレージ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置、ストレージ制御方法、及びストレージ制御プログラムに関する。
【背景技術】
【０００２】
データの記録方式の一つにスナップショットがある。スナップショットでは、所定の静止点におけるデータが保持されながら、新規のInput / Output（Ｉ／Ｏ）が受け付けられる。これによりスナップショットは、最新のデータの参照及び更新と、静止点におけるデータの参照とを可能にする。
【０００３】
スナップショットの一例として、静止点のデータと最新のデータとの差分（以下の説明では、ＣＯＷ（Copy-On-Write）と記す）を保持することで、記憶容量や処理オーバヘッドを削減する方式がある。このようなスナップショットのデータの管理方法は以下の２種類に大別される。すなわち、１つのデータ管理方法は、最新のデータについては、所定の記憶領域（以下、ベースLogical Unit Number（ＬＵＮ）と記す）に全てのボリュームのデータが保持され、静止点毎に差分としてＣＯＷが保持される方法である。この管理方法では、ＣＯＷにはベースＬＵＮの更新に伴い変更されたデータの変更前のデータが保持される。他の１つのデータ管理方法は、ボリュームの最古のデータについてはベースＬＵＮに全て保持され、静止点毎に差分としてＣＯＷが保持される方法である。この管理方法では、ＣＯＷにはベースＬＵＮの更新に伴い変更されたデータの変更後のデータが保持される。
【０００４】
上記のいずれの方式も、１つのボリュームに対して複数回のスナップショットの採取が可能である。以下の説明では、同一ボリューム（以下、対象ボリュームと記す）から採取された一連のスナップショットの中から１つのスナップショットを指定するときの単位を、「世代」として記す。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１４−６８４５号公報
【特許文献２】特開２００２−２７８８１９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、スナップショットの取得が繰り返されることにより、世代数が多くなると、アクセス性能が低下する。
【０００７】
そこで、１つの側面では、本発明は、世代数の増加に伴うアクセス性能の低下を抑制するためのスナップショットの取得技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
一態様によるストレージ制御装置は、生成部、第１関係付け部、及び、第２関係付け部を含む。生成部は、記憶領域の管理単位を示すボリュームの静止点間の差分を示す差分情報であって複数世代に関連付けられた差分情報に基づいて、複数世代の差分情報を集約した集約情報を生成する。第１関係付け部は、集約情報を最古の静止点でのボリュームの状態に関係付ける。第２関係付け部は、直近の静止点のボリュームの状態から更新されたボリュームの更新情報を、集約情報に関係付ける。
【発明の効果】
【０００９】
一側面によれば、世代数の増加に伴うアクセス性能の低下を抑制するためのスナップショットの取得技術を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】実施形態に係るストレージ制御装置の構成の一例を示す。
【図２】第１の比較例におけるＣＯＷの作成に関する説明図である。
【図３】第１の比較例におけるデータの書き込みに関する説明図である。
【図４】第１の比較例におけるデータの読み出しに関する説明図である。
【図５】第２の比較例におけるＣＯＷの作成に関する説明図である。
【図６】第２の比較例におけるデータの書き込みに関する説明図である。
【図７】第２の比較例におけるデータの読み出しに関する説明図である。
【図８】実施形態に係るストレージ装置の構成の一例を示す。
【図９】実施形態に係るスナップショットの管理構造の一例を示す。
【図１０】ＣＯＷのデータ構造の一例を示す。
【図１１】差分情報の構成の一例を示す。
【図１２】実施形態におけるデータの書き込みに関する説明図である。
【図１３】実施形態におけるデータの読み出しに関する説明図である。
【図１４】比較例と実施形態の読み出し及び書き込みの性能の比較図である。
【図１５】実施形態に係るＣＯＷの作成に関する説明図である。
【図１６】ＣＯＷ作成処理の詳細を図解したフローチャートの一例である。
【図１７】実施形態に係るリストアに関する説明図である。
【図１８】実施形態に係るリストアにおけるマージ処理の説明図である。
【図１９】リストア処理の詳細を図解したフローチャートの一例である。
【図２０】リストア処理におけるマージ処理の詳細を図解したフローチャートの一例である。
【図２１】実施形態に係る、管理形態２から管理形態１への切り替え処理の説明図である。
【図２２】管理形態２から管理形態１への切り替え処理の詳細を図解したフローチャートの一例である。
【図２３】実施形態に係る、管理形態１から管理形態２への切り替え処理の説明図である。
【図２４】管理形態１から管理形態２への切り替え処理の詳細を図解したフローチャートの一例である。
【図２５】実施形態に係る読み出し処理の詳細を図解したフローチャートの一例である。
【図２６】実施形態に係るストレージ装置のハードウェア構成の一例を示す。
【発明を実施するための形態】
【００１１】
図１は、実施形態に係るストレージ制御装置の構成の一例を示す。図１において、ストレージ制御装置１は、生成部２、第１関係付け部３、第２関係付け部４、統合部５、第３関係付け部６、リストア部７、削除部８、及び、読み出し部９を含む。
【００１２】
生成部２は、記憶領域の管理単位を示すボリュームの静止点間の差分を示す差分情報であって複数世代に関連付けられた差分情報に基づいて、複数世代の差分情報を集約した集約情報を生成する。第１関係付け部３は、集約情報を最古の静止点でのボリュームの状態に関係付ける（紐付ける）。第２関係付け部４は、直近の静止点のボリュームの状態から更新されたボリュームの更新情報を、集約情報に関係付ける。
【００１３】
これにより、実施形態に係るストレージ制御装置１は、スナップショットの世代数が多い場合でも、運用世代のデータに対するアクセス性能の低下を抑制することができる。
【００１４】
統合部５は、新規の静止点におけるスナップショットの取得指示を受信した場合、集約情報に更新情報をマージする。第３関係付け部６は、マージ済みの更新情報を最新世代の差分情報に関係付ける。生成部２は、さらに、新規の静止点のボリュームの状態から更新されたボリュームの更新情報を生成する。第２関係付け部４は、生成した更新情報を集約情報に関係付ける。
【００１５】
これにより、実施形態に係るストレージ制御装置１は、スナップショットの世代数が増加した場合でも、アクセス性能の低下を抑制できるデータ構造を保ったまま、スナップショットの取得が可能となる。
【００１６】
生成部２は、新規の静止点におけるスナップショットの取得指示を受信した場合、新規の静止点のボリュームの状態から更新されたボリュームの更新情報である第１の更新情報を生成する。そして生成部２は、第１の更新情報を、スナップショットの取得指示の受信前に存在した更新情報である第２の更新情報に関係付けるとともに、第２の更新情報を読み取り専用に設定する。統合部５は、読み取り専用に設定された第２の更新情報を、集約情報にマージする。第２関係付け部４は、マージが完了すると、第１の更新情報と第２の更新情報の関係付けを解除して、第１の更新情報を集約情報に関係付ける。第３関係付け部６は、マージが完了すると、第２の更新情報と集約情報の関係付けを解除して、最新世代の差分情報に関係付ける。
【００１７】
これにより、実施形態に係るストレージ制御装置１は、世代数の増加に伴うアクセス性能の低下を防ぎつつ、運用を停止せずに、スナップショットの取得が可能となる。
【００１８】
リストア部７は、所定の世代へのリストア指示を受信した場合、先ず、リストアの対象世代のボリュームの状態からリストア指示の受信以降に更新されたボリュームの更新情報である第３の更新情報を作成する。次に、リストア部７は、第３の更新情報をリストア対象世代の差分情報に関係付けるとともに、リストア指示の受信前における更新情報と集約情報とを削除する。次に、リストア部７は、リストア対象世代以前の全ての差分情報に基づいて、リストア対象世代以前の全ての世代の差分情報を集約した集約情報を生成する。そして、リストア部７は、生成した集約情報を最古の静止点でのボリュームの状態に関係付け、第３の更新情報を、生成した集約情報に関係付ける。
【００１９】
これにより、実施形態に係るストレージ制御装置１は、世代数の増加に伴うアクセス性能の低下を防ぎつつ、運用を停止せずに、リストアが可能となる。
【００２０】
差分情報は、ボリュームの変更前のデータが記憶されている記憶領域を示す領域情報と、記憶領域の変更後のデータとを含む。リストア部７は、リストア対象世代以前の差分情報から、世代の新しい順に差分情報を抽出する。そして、リストア部７は、抽出した差分情報に含まれる変更後のデータのうち、抽出した差分情報よりも新しい世代の差分情報に含まれる変更後のデータが集約情報に存在しない記憶領域の変更後のデータを、集約情報に格納する。
【００２１】
これにより、実施形態に係るストレージ制御装置１は、集約情報の生成にかかる処理負荷を軽減することができる。
【００２２】
削除部８は、差分情報の数が２つであって、最古の静止点でのボリュームの状態に関係付けられている差分情報の削除指示を受信した場合、２つの差分情報を削除する。生成部２は、差分情報の数が１つであり更新情報が差分情報に関係付けられている場合に、新規の静止点におけるスナップショットの取得指示を受信すると、以下の処理を行う。すなわち、生成部２は、先ず、新規の静止点のボリュームの状態から更新されたボリュームの更新情報である第１の更新情報を生成する。次に、生成部２は、第１の更新情報を、スナップショットの取得指示の受信前に存在した更新情報である第２の更新情報に関係付けるとともに、第２の更新情報を読み取り専用に設定する。そして、生成部２は、第２の更新情報を含む全ての差分情報に基づいて、第２の更新情報を含む全ての世代の差分情報を集約した集約情報を生成する。その後、第２関係付け部４は、第１の更新情報と第２の更新情報の関係付けを解除し、第１の更新情報を集約情報に関係付ける。
【００２３】
これにより、実施形態に係るストレージ制御装置１は、スナップショットの管理において使用する記憶容量を抑制することができる。そして、ストレージ制御装置１は、記憶容量を抑制しつつ、スナップショットの作成および削除を可能にする。
【００２４】
読み出し部９は、現在のボリュームに対する読み出し要求を受信した場合、更新情報、集約情報、及び最古の静止点でのボリュームの状態を用いて、データを読み出す。また、読み出し部９は、直近の静止点のボリュームに対する読み出し要求を受信した場合、集約情報及び最古の静止点でのボリュームの状態を用いて、データを読み出す。
【００２５】
これにより、実施形態に係るストレージ制御装置１は、現在のボリューム及び、最新世代のボリュームに対する読み出しの性能を向上させることができる。
【００２６】
以下、実施形態に係るスナップショットのデータ管理について詳細に説明する。先ず実施形態の効果を説明するために２つの比較例に係るスナップショットのデータ管理方法について説明する。その後、実施形態に係るスナップショットのデータ管理方法について説明し、比較例と比較した場合の実施形態の効果を記載する。
【００２７】
（第１の比較例の管理方法）
第１の比較例に係る管理方法は、ベースＬＵＮに運用ボリュームの全ての最新のデータが格納され、ＣＯＷに静止点における差分情報が格納される管理方法である。
【００２８】
先ず第１の比較例におけるＣＯＷの作成について説明する。ＣＯＷの作成は、所定の静止点におけるスナップショットの取得の際に行われる。図２は、第１の比較例におけるＣＯＷの作成に関する説明図である。図２は、ＣＯＷ＃３が作成される例を示している。図２（Ａ）は、ＣＯＷ作成前のスナップショットの管理構造の状態を示す図である。図２（Ｂ）は、ＣＯＷ作成後のスナップショットの状態を示す図である。
【００２９】
図２（Ａ）では、既に２つの静止点１、２におけるＣＯＷが取得されている。静止点１、２にそれぞれ対応するＣＯＷは、ＣＯＷ＃１、ＣＯＷ＃２である。尚、以下の説明においては、静止点ｘ（ｘは正の整数）のｘの値が大きいほど、その静止点の時刻は後であるとする。また、静止点ｘに対応するＣＯＷをＣＯＷ＃ｘと記す。
【００３０】
図２（Ａ）において、ベースＬＵＮ、ＣＯＷ＃２、ＣＯＷ＃１が順に紐づいている。ベースＬＵＮには運用ボリュームの最新のデータが全て格納されている。ベースＬＵＮに紐付けられている（関係付けられている）ＣＯＷ＃２には、静止点２におけるデータと、最新のデータとの差分情報が格納されている。すなわち、ＣＯＷ２には、静止点２における対象ボリュームのデータであって、ベースＬＵＮに格納されているデータとは異なるデータが格納されている。ＣＯＷ＃２に紐付けられるＣＯＷ＃１には、静止点１におけるデータと、ＣＯＷ２のデータとの差分情報が格納されている。すなわち、ＣＯＷ１には、静止点１における対象ボリュームのデータであって、静止点２におけるデータとは異なるデータが格納されている。
【００３１】
図２（Ａ）において、静止点３に対応するＣＯＷ＃３が作成される場合を考える。その場合、図２（Ｂ）に示すように、最も世代の新しいＣＯＷ（図２（Ａ）の場合、ＣＯＷ＃２）とベースＬＵＮとの間に、新規作成されたＣＯＷ＃３が挿入される。すなわち新規のＣＯＷ＃３は、ベースＬＵＮに紐付けられる。また、ＣＯＷ＃２は、ベースＬＵＮへの紐付けが解除され、ＣＯＷ＃３に紐付けられる。新規作成されたＣＯＷ＃３には、作成直後にはデータは格納されていない。ＣＯＷ＃３には、後ほど説明する書き込み処理時にデータが格納されることになる。またＣＯＷ２は、読み取り専用（Read Only）領域に変更される。尚、ＣＯＷ＃１とＣＯＷ＃２の紐付けは変更されない。
【００３２】
次に、第１の比較例におけるデータの書き込み（WRITE）について説明する。図３は、第１の比較例におけるデータの書き込みに関する説明図である。図３において、データが更新される場合、先ず、ベースＬＵＮの領域のうち、変更対象の領域（チャンク）に格納されている変更前のデータが、ベースＬＵＮに直接紐づいている最新世代のＣＯＷ（図３の場合、ＣＯＷ＃４）に退避（格納）される。そして、ベースＬＵＮの変更対象領域に、変更後のデータが格納される。このようにすることで、各静止点における運用ボリュームのデータの保存が可能となる。
【００３３】
次に、第１の比較例におけるデータの読み出し（READ）について説明する。図４は、第１の比較例におけるデータの読み出しに関する説明図である。図４において最新のデータが読み出される場合は、ベースＬＵＮから直接データの読み出しが行われる。一方、所定の世代の静止点におけるデータが読み出される場合は、参照世代の静止点に対応するＣＯＷから新しい世代方向に順に走査が行われ、読み出し対象データの特定が行われる。このような走査は、読み出し対象のデータが、走査したＣＯＷもしくはベースＬＵＮに格納されていることが確認されるまで行われることとなる。そして特定された読み出し対象データの読み出しが行われる。
【００３４】
第１の比較例においては、現在の運用ボリュームからのデータの読み出し速度は不変であるが、古い世代のスナップショットに対する読み出し速度が低下する傾向にある。これは以下の理由による。すなわち、データの読み出しにおいては、参照世代に対応するＣＯＷから新しい世代方向へ該当領域の更新差分がないかの走査が行われる。このため、参照世代から現在までに更新がなければ、参照世代から現在までの全世代のＣＯＷが走査されることになる。よって、古い世代に対する読み出しの速度が低下することとなる。
【００３５】
（第２の比較例の管理方法）
第２の比較例の管理方法は、ベースＬＵＮに最古のデータが格納され、ＣＯＷに静止点における差分情報が格納される管理方法である。この管理方法では、COWにはベースLUNの更新に伴い変更されたデータの変更後のデータが保持される。第１の比較例では、ベースＬＵＮに最新のデータが格納されていたが、第２の比較例では最古のデータが格納される。また、第１の比較例では、ＣＯＷには、対象ボリュームに対する変更前のデータが格納されていたが、第２の比較例では変更後のデータが格納される。
【００３６】
先ず第２の比較例におけるＣＯＷの作成について説明する。図５は、第２の比較例におけるＣＯＷの作成に関する説明図である。図５は、ＣＯＷ＃２が作成される例を示している。図５（Ａ）は、ＣＯＷ作成前のスナップショットの管理構造の状態を示す図である。図５（Ｂ）は、ＣＯＷ作成後のスナップショットの管理構造の状態を示す図である。図５（Ａ）では、既に、２世代のスナップショットが取得済みである。すなわち、静止点１に対応するＣＯＷ＃１、及び運用ＣＯＷが作成されている。
【００３７】
図５（Ａ）において、ベースＬＵＮ、ＣＯＷ＃１、運用ＣＯＷが順に紐づいている。ベースＬＵＮには最古のデータが格納されている。ベースＬＵＮに紐付けられているＣＯＷ＃１には、静止点１における対象ボリュームのデータと、最古のデータとの差分情報が格納されている。すなわち、ＣＯＷ１には、静止点１におけるデータであって、ベースＬＵＮに格納されたデータとは異なるデータが格納されている。ＣＯＷ＃１に紐付けられる運用ＣＯＷには、静止点１における対象ボリュームのデータと、最新のデータとの差分情報が格納されている。すなわち、運用ＣＯＷには、最新のデータであって、静止点１におけるデータと異なるデータが格納されている。
【００３８】
図５（Ａ）において、静止点２に対応するＣＯＷ＃２が作成される場合を考える。その場合、図５（Ｂ）に示すように、図５（Ａ）における運用ＣＯＷがＣＯＷ＃２として設定され、設定されたＣＯＷ＃２に新規作成された運用ＣＯＷが紐付けられる。図５（Ａ）における運用ＣＯＷと図５（Ｂ）におけるＣＯＷ＃２は、実体は同一であるが、ＣＯＷ＃２は読み取り専用領域に設定される。尚、新規作成された運用ＣＯＷには、最新のデータであって、静止点２におけるデータと異なるデータが格納されることとなる。すなわち、運用ＣＯＷには、静止点２以降に対象ボリュームに対して加えられた変更の変更後のデータが格納される。
【００３９】
次に、第２の比較例におけるデータの書き込みについて説明する。図６は、第２の比較例におけるデータの書き込みに関する説明図である。図６において、データが更新される場合、変更対象のデータの変更後のデータが運用ＣＯＷに書き込まれる。直近の静止点（図６においては、静止点３）以降のデータは、運用ＣＯＷに書き込まれ、各静止点に対応するＣＯＷにはデータの書き込みは行われないため、各静止点における対象ボリュームの情報が保持される。
【００４０】
次に、第２の比較例におけるデータの読み出しについて説明する。図７は、第２の比較例におけるデータの読み出しに関する説明図である。図７において、最新のデータが読み出される場合は、運用ＣＯＷからベースＬＵＮまで順に走査され、読み出し対象データの特定が行われる。そして特定した読み出し対象データの読み出しが行われる。また、所定の世代の静止点におけるデータが読み出される場合は、参照世代の静止点に対応するＣＯＷからベースＬＵＮまで順に走査され、読み出し対象データの特定が行われる。そして特定した読み出し対象データの読み出しが行われる。第２の比較例において各ＣＯＷには、変更後の差分情報が記憶され、変更がないデータについては保存されない。従って、変更がないデータに対するアクセスの場合には、ベースＬＵＮからの読み出しとなる場合もある。
【００４１】
第２の比較例においては、最も古い世代への読み出し速度は不変であるが、新しい世代に対する読み出し速度が低下する傾向にある。これは以下の理由による。すなわち、データの読み出しにおいては、参照世代に対応するＣＯＷから古い世代方向へ該当領域の更新差分がないかの走査が行われる。このため、参照世代のデータが最古のデータから更新されていなければ、参照世代からベースＬＵＮまでのすべてのＣＯＷが走査されることになる。よって、新しい世代に対する読み出しの速度が低下する。
【００４２】
第２の比較例は、運用世代に対する書き込み性能が第１の比較例よりも優れている。これは、第１の比較例では図３を参照して説明したように、運用世代への書き込みが発生した場合、更新元のデータをＣＯＷへ退避する処理が発生するためである。一方、第２の比較例では、更新元データの退避処理は発生せず、運用ＣＯＷへの書き込みで処理が完了する。例えば、第２の比較例では、チャンク（ＣＯＷのデータ管理単位）への全面書き込みが発生した場合でも、更新元データの退避処理をスキップすることができる。
【００４３】
また、第２の比較例に比べて第１の比較例の方が、旧データの扱いや、スナップショット作成時のＣＯＷの再配置といった点で、複雑な処理となっている。
【００４４】
しかしながら、第２の比較例では、最古の世代から参照世代間の世代数が多くなるにつれて、走査されるＣＯＷの数が増加するため、より新しい世代に対する読み出しの速度は低下する傾向にある。最悪時は、参照世代のＣＯＷからベースＬＵＮまでの全世代のＣＯＷに対して読み出し対象領域の差分があるかが走査されることとなる。これは運用世代においての性能劣化リスクが大きい。つまり、読み出し対象領域に因って、読み出しの性能が大きく変化し、安定しない。さらに、スナップショットがバックアップ用途に使われることを考えると、世代数が大きな値になることは十分想定される。世代数の増加により運用ボリュームの性能が劣化することは望ましくない。
【００４５】
（実施形態）
次に、実施形態に係るスナップショットのデータ管理について詳細に説明する。先ず、実施形態に係るストレージ装置の構成について説明する。図８は、実施形態に係るストレージ装置の構成の一例を示す。図８において、ストレージ装置２１は、業務サーバ２２に通信ネットワーク等を介して接続する。業務サーバ２２は、対象ボリュームに対してデータの読み書き、及び、スナップショットの取得を指示するサーバである。
【００４６】
ストレージ装置２１は、割当部３１、記憶部３２、スナップショット管理部３３、書き込み部３４、及び、読み出し部３５を含む。
【００４７】
ストレージ装置２１は、ストレージ制御装置１の一例である。スナップショット管理部３３は、生成部２、第１関係付け部３、第２関係付け部４、統合部５、第３関係付け部６、リストア部７、削除部８の一例である。読み出し部３５は、読み出し部９の一例である。
【００４８】
割当部３１は、データの書き込みに応じて、対象ボリューム（ベースＬＵＮ）、及びＣＯＷ等に、ストレージ装置２１に接続された物理記憶領域の集合体であるストレージプールから実際の物理領域を割り当てるシンプロビジョニングの機能を提供する。記憶部３２は、割当部３１により割り当てられた物理記憶領域を含み、スナップショットの各データを記憶する。ここでスナップショットのデータとは、後ほど説明する図９に示すデータである。尚、記憶部３２は、ストレージ装置２１の外部の記憶領域に確保されてもよい。スナップショット管理部３３は、スナップショットの管理構造の管理を行う。スナップショット管理部３３は、作成部４１、リストア部４２、及び切替部４３を含む。スナップショット管理部３３に含まれる各部の詳細については後ほど説明する。書き込み部３４は、運用ボリュームに対してデータの書き込みを行う。読み出し部３５は、運用ボリューム、または、所定の静止点における対象ボリュームのデータの読み出しを行う。
【００４９】
図９は、実施形態に係るスナップショットの管理構造の一例を示す。図９に示すように、実施形態においては、ベースＬＵＮ、１以上のＣＯＷ＃ｘ、集約ＣＯＷ、及び、運用ＣＯＷが、以下のように紐付けて管理される。すなわち、ベースＬＵＮとＣＯＷ＃１が紐付けられ、ＣＯＷ＃ｘ（ｘは正の整数、ｘ≠１）とＣＯＷ＃（ｘ−１）が紐付けられる。また、ベースＬＵＮと集約ＣＯＷが紐付けられ、集約ＣＯＷと運用ＣＯＷが紐付けられる。ベースＬＵＮ、１以上のＣＯＷ＃ｘ、集約ＣＯＷ、及び、運用ＣＯＷは、それぞれ、割当部３１により割り当てられた記憶部３２に格納される。
【００５０】
ベースＬＵＮは、最古の静止点でのボリュームの状態の一例である。ＣＯＷ＃ｘは、差分情報の一例である。集約ＣＯＷは、集約情報の一例である。運用ＣＯＷは、更新情報の一例である。
【００５１】
以下の説明では、説明の便宜上、実施形態に係るスナップショットの管理構造をｔｒｅｅ構造として説明する。すなわち、スナップショットの管理構造は、ベースＬＵＮ、１以上の各ＣＯＷ＃ｘ、集約ＣＯＷ、及び運用ＣＯＷをノードとし、紐付けられているノード間がリンクにより結ばれる。ベースＬＵＮは根ノードである。ＣＯＷ＃１の親ノードは、ベースＬＵＮである。ＣＯＷ＃ｘ（ｘ≠１）の親ノードは、ＣＯＷ＃（ｘ−１）である。集約ＣＯＷの親ノードは、ベースＬＵＮである。運用ＣＯＷの親ノードは、集約ＣＯＷである。また、ＣＯＷ＃ｘのうち、特に最新世代のＣＯＷ（直近の静止点に対応するＣＯＷ）を指す場合、ＣＯＷ＃Ｘと記し、ＣＯＷ＃Ｘに対応する静止点を静止点Ｘと記す。尚、運用ＣＯＷに差分情報が取得中の世代は、運用世代と記す場合がある。
【００５２】
ベースＬＵＮは最古のデータを記憶する。ベースＬＵＮに紐付けられるＣＯＷ＃１は、静止点１における対象ボリュームのデータと、最古のデータとの差分情報を記憶する。すなわち、ＣＯＷ１は、静止点１における対象ボリュームのデータであって、ベースＬＵＮに格納されたデータとは異なるデータを記憶する。ＣＯＷ＃ｘ（ｘ≠１）は、静止点ｘにおける対象ボリュームのデータと、静止点ｘ−１におけるデータとの差分情報を記憶する。集約ＣＯＷは、過去に作成されたＣＯＷ＃Ｘ〜ＣＯＷ＃１を集約したデータを記憶する。すなわち、集約ＣＯＷは、静止点Ｘにおける対象ボリュームのデータと、最古のデータとの差分情報を記憶する。言い換えると、集約ＣＯＷは、静止点Ｘにおけるデータであって、ベースＬＵＮのデータとは異なるデータを記憶する。運用ＣＯＷは、静止点Ｘにおける対象ボリュームのデータと、最新のデータとの差分情報を記憶する。以下の説明では、ＣＯＷ＃１〜ＣＯＷ＃Ｘをまとめて旧世代ツリーと記す。また、ＣＯＷ＃ｘ、集約ＣＯＷ、及び運用ＣＯＷを特に区別しない場合には、単にＣＯＷと記す。
【００５３】
なお、各ＣＯＷは、記憶部に格納されるが、各ＣＯＷが記憶される記憶領域は、連続領域でなくてもよく、ＣＯＷ毎に、異なる記憶装置の異なる記憶領域に格納されてもよい。
【００５４】
ここで、実施形態のスナップショットの管理構造を第２の比較例と比較する。実施形態では、第２の比較例と比べると、旧世代ツリーの全てのＣＯＷを一つに集約した集約ＣＯＷが追加されている。また、第２の比較例では、旧世代ツリーに運用ＣＯＷが紐付けられている。これに対して実施形態では、運用ＣＯＷは集約ＣＯＷに紐付けられている。つまり実施形態の管理構造は、第２の比較例の旧世代ツリーと、新たに追加した集約ＣＯＷとを併用した構成となる。
【００５５】
図１０は、ＣＯＷ（ＣＯＷ＃ｘ、集約ＣＯＷ、及び運用ＣＯＷ）のデータ構造の一例を示す。各ＣＯＷは、ストレージ装置２１のOperating System（ＯＳ）からは、１つのデバイス（記憶デバイス）として認識されてもよい。また、各ＣＯＷは、割当部３１のシンプロビジョニング機能により、ＯＳが認識するＣＯＷの容量と、実際に割り当てられている物理記憶容量とが制御されてもよい。ＣＯＷは、親ノード識別情報４５、及び差分情報４６を含む。
【００５６】
親ノード識別情報４５は、親ノードの識別情報である。具体的には例えば、ＣＯＷ＃１の場合、親ノード識別情報４５には、ベースＬＵＮの識別情報が格納される。ＣＯＷ＃ｘ（ｘ≠１）の場合、親ノード識別情報４５には、ＣＯＷ＃（ｘ−１）の識別情報が格納される。集約ＣＯＷの場合、親ノード識別情報４５には、ベースＬＵＮの識別情報が格納される。運用ＣＯＷの場合、親ノード識別情報４５には、集約ＣＯＷの識別情報が格納される。尚、親ノード識別情報４５は、ノードを１つのデバイスとして扱うシステムの場合、親ノードのメジャー番号とマイナー番号の組としてもよい。また、親ノード識別情報４５は、親ノードのＣＯＷのデータが記憶される記憶領域へのポインタ等としてもよい。
【００５７】
差分情報４６は、親ノードの静止点における対象ボリュームに対する、自ノードの静止点における対象ボリュームの差分情報である。具体的には例えば、ＣＯＷ＃１の場合、差分情報４６は、ベースＬＵＮに対する静止点１における対象ボリュームの差分情報である。ＣＯＷ＃ｘ（ｘ≠１）の場合、差分情報４６は、ＣＯＷ＃（ｘ−１）に対する、静止点ｘにおける対象ボリュームの差分情報である。集約ＣＯＷの場合、差分情報４６は、ベースＬＵＮに対する静止点Ｘにおける対象ボリュームの差分情報である。運用ＣＯＷの場合、差分情報４６は、集約ＣＯＷに対する現在の対象ボリュームの差分情報である。
【００５８】
図１１は、差分情報４６の構成の一例を示す。差分情報４６は、「割当済みチャンク情報」、及び、「変更後データ」のデータ項目を含み、各データ項目はレコード毎に対応付けて記憶される。「割当済みチャンク情報」は、親ノードの静止点から変更されたデータのチャンク（ブロック）を示す識別情報である。「割当済みチャンク情報」は、例えば、チャンク（ブロック）のボリュームの開始アドレスからのオフセット位置や、チャンク（ブロック）のアドレスなどで表現される。「変更後データ」は、対応する「割当済みチャンク情報」で示されるチャンクの変更後のデータである。差分情報４６に格納されたチャンクは、以下の説明では、割当済みチャンクと記す場合がある。
【００５９】
尚、「変更後データ」には、変更後のデータが直接格納されなくてもよく、例えば、変更後のデータは他の記憶領域に格納され、「変更後データ」には、変更後のデータが格納された他の記憶領域のアドレスを示す情報が格納されてもよい。
【００６０】
ボリュームのデータに対して変更が加えられるに従って、差分情報４６のサイズは増加する。差分情報４６の増加に従って、割当部３１は、シンプロビジョニング機能により、ＣＯＷに割り当てる物理領域のサイズを増加させる。
【００６１】
次に、実施形態におけるデータの書き込みについて説明する。図１２は、実施形態におけるデータの書き込みに関する説明図である。図１２において、対象ボリュームのデータが更新される場合、書き込み部３４は、変更対象のデータの変更後のデータを運用ＣＯＷに書き込む。データの書き込みは運用ＣＯＷに対して実行されるものであり、他のＣＯＷへのアクセスは発生しない。
【００６２】
次に、実施形態におけるデータの読み出しについて説明する。図１３は、実施形態におけるデータの読み出しに関する説明図である。実施形態におけるデータの読み出しは３通りに分けられる。３通りの読み出しとは、すなわち、運用世代のデータの読み出し、運用世代の直前の世代のデータの読み出し、及び、運用世代の２世代前以前の世代のデータの読み出しである。
【００６３】
運用世代のデータの読み出しでは、読み出し部３５は、運用ＣＯＷからベースＬＵＮまで順に走査し（図１３（ａ））、読み出し対象データを特定する。そして読み出し部３５は、特定した読み出し対象データの読み出しを行う。ここで、運用ＣＯＷとベースＬＵＮの間には、集約ＣＯＷだけが存在するため、最悪時でも高々２回のＣＯＷ操作で読み出し処理が完了する。これにより読み出し処理性能の高速化と安定化を図ることができる。
【００６４】
運用世代の直前の世代のデータの読み出しでは、読み出し部３５は、集約ＣＯＷからベースＬＵＮまで順に走査し（図１３（ｂ））、読み出し対象データを特定する。そして読み出し部３５は、特定した読み出し対象データの読み出しを行う。ここで、運用世代の直前の世代のデータの読み出しでは、最悪時でも高々１回のＣＯＷ操作で読み出し処理が完了する。これにより読み出し処理性能の高速化と安定化を図ることができる。
【００６５】
運用世代の２世代前以前の世代のデータの読み出しでは、読み出し部３５は、参照世代の静止点に対応するＣＯＷからベースＬＵＮまで順に走査し（図１３（ｃ））、読み出し対象データを特定する。そして読み出し部３５は、特定した読み出し対象データの読み出しを行う。
【００６６】
ここで、読み出し及び書き込みの性能に関して、比較例と実施形態を比較する。図１４は、比較例と実施形態の読み出し及び書き込みの性能の比較図である。図１４では、読み出しまたは書き込み処理において、走査されるＣＯＷ及びベースＬＵＮの最悪値を比較している。読み出しまたは書き込み処理において、走査されるＣＯＷ及びベースＬＵＮの数が少ないほど、処理性能はよくなる。
【００６７】
まず、運用世代の読み出し性能について比較する。図１４に示すように、第１の比較例において走査対象となるのはベースＬＵＮである。また、第２の比較例において走査対象となるのは、全てのＣＯＷ及びベースＬＵＮである。実施形態において走査対象となるのは、運用ＣＯＷ、集約ＣＯＷ、及びベースＬＵＮである。以上より、実施形態は、運用世代の読み出し性能については、第１の比較例よりも劣っている。一方、実施形態の運用世代の読み出し性能は、スナップショットの取得世代数が３以上の場合、第２の比較例よりも優れている。
【００６８】
次に、運用世代の直前の世代のデータの読み出しについて比較する。図１４に示すように、第１の比較例において走査対象となるのは、最新世代のＣＯＷ、及びベースＬＵＮである。また、第２の比較例において走査対象となるのは、運用世代の直前の世代以前の世代のすべてのＣＯＷ、及びベースＬＵＮである。実施形態において走査対象となるのは、集約ＣＯＷ、及びベースＬＵＮである。以上より、実施形態は、運用世代の直前の世代のデータの読み出し性能については、第１の比較例と同じである。一方、実施形態の読み出し性能は、スナップショットの取得世代数が３以上の場合、第２の比較例よりも優れている。
【００６９】
次に、データの書き込みについて比較する。図１４に示すように、第１の比較例においてアクセス対象となるのは、ベースＬＵＮ、及び、最新世代のＣＯＷである。また、第２の比較例においてアクセス対象となるのは、運用ＣＯＷである。実施形態においてアクセス対象となるのは、運用ＣＯＷである。以上より、実施形態は、運用世代の読み出し性能については、第１の比較例よりも優れている。一方、実施形態の書き込み性能は、第２の比較例と同じとなる。
【００７０】
実施形態においては、運用世代、及び、運用世代の直前の世代の読み出しでは、旧世代ツリーのＣＯＷを参照することはない。そのため、例えば、旧世代ツリーに含まれる世代への読み出し頻度が少ない場合には、旧世代ツリーに含まれるＣＯＷの一部または全部を、例えばテープ等の低速な記憶媒体又は記憶装置の領域に確保することも可能である。これにより、柔軟なディスク管理が可能となる。一方、第２の比較例においては、運用世代、及び、運用世代の直前の世代の読み出しにおいて、全てのＣＯＷが走査される可能性がある。そのため、第２の比較例においては、旧世代ツリーに含まれるＣＯＷの一部または全部を、例えばテープ等の低速な記憶媒体又は記憶装置の領域に確保するような構成とすると、運用世代、及び、運用世代の直前の世代の読み出しも遅くなってしまう。
【００７１】
次に、実施形態におけるスナップショットの管理構造の管理について説明する。スナップショットの管理構造の管理はスナップショット管理部３３が行う。図８に示したように、スナップショット管理部３３は、作成部４１、リストア部４２、及び切替部４３を含む。
【００７２】
作成部４１は、所定の静止点に対応する新たなＣＯＷを作成する。リストア部４２は、スナップショットのリストアを実行する。切替部４３は、取得されたＣＯＷの世代数に応じて、スナップショットの管理構造の管理形態を切り替える。以下、スナップショット管理部３３の各部の動作について順に説明する。
【００７３】
作成部４１によるＣＯＷの作成の詳細を説明する。実施形態のＣＯＷの作成処理は、業務サーバ２２からみて対象ボリュームの運用を停止することなく実行することができる。図１５は、実施形態に係るＣＯＷの作成に関する説明図である。
【００７４】
図１５（Ａ）は、ＣＯＷ作成前のスナップショットの管理構造の状態を示す。図１５（Ａ）においては、すでに２つのＣＯＷ＃１、ＣＯＷ＃２が作成されている。業務サーバ２２からスナップショットの取得指示を受信すると、作成部４１は、ＣＯＷの作成処理を開始する。ＣＯＷの作成処理が開始されると、先ず図１５（Ｂ）の状態に遷移する。
【００７５】
図１５（Ｂ）において、作成部４１は、新運用ＣＯＷを作成し、作成した新運用ＣＯＷを旧運用ＣＯＷ（図１５（Ａ）の運用ＣＯＷ）に紐付ける。新運用ＣＯＷは、作成時にはデータが格納されていないため、作成部４１は、瞬時に新運用ＣＯＷの作成が可能である。これ以降、業務サーバ２２からのデータの書き込みは新運用ＣＯＷに対して行われる。紐付けが完了すると、図１５（Ｃ）の状態に遷移する。
【００７６】
図１５（Ｃ）において、先ず作成部４１は、旧運用ＣＯＷの業務サーバ２２からのアクセスを読み取り専用に設定する。そして作成部４１は、旧運用ＣＯＷの内容を集約ＣＯＷにマージする。旧運用ＣＯＷは読み取り専用に設定されているため、業務サーバ２２からのアクセスと、マージ処理によるアクセスとが競合することはない。従って、マージ処理のバックグラウンドでの実行が可能となる。尚、読み取り専用設定は、例えば、作成部４１が、ＣＯＷ自体に属性として設定してもよいし、書き込み部３４が書き込み処理時に、旧運用ＣＯＷへのアクセスをしないように制御することで実現してもよい。マージが完了すると、図１５（Ｄ）の状態に遷移する。
【００７７】
図１５（Ｄ）においては、旧運用ＣＯＷについての紐付けの変更処理を行う。具体的には作成部４１は先ず、旧運用ＣＯＷと集約ＣＯＷとの紐付け、及び、旧運用ＣＯＷと新運用ＣＯＷとの紐付けを解除する。そして作成部４１は、旧運用ＣＯＷを、ＣＯＷ＃３としてＣＯＷ＃２に紐付けする。尚、ＣＯＷ＃３と旧運用ＣＯＷの差分情報４６は同じである。これにより、旧運用ＣＯＷの内容は、静止点の対象ボリュームの差分情報として保存される。また、作成部４１は、新運用ＣＯＷを集約ＣＯＷに紐付けする。このように制御することで、集約ＣＯＷの内容は、旧世代ツリーに含まれるＣＯＷ＃１〜ＣＯＷ＃３をマージした内容となる。
【００７８】
尚、図１５（Ｄ）においては、厳密には作成部４１は、紐付けの変更処理の間は、業務サーバ２２からの対象ボリュームに対するＩ／Ｏを停止させる。ただし紐付けの変更処理は非常に短い時間で完了できる。このため、業務サーバ２２からは対象ボリュームが運用停止したようには認識されない。
【００７９】
新運用ＣＯＷを作成して旧運用ＣＯＷに紐付けることにより、旧運用ＣＯＷ及び集約ＣＯＷの業務サーバ２２からのアクセスを読み取り専用に設定することができ、バックグラウンドでマージを行うことができる。また、新運用ＣＯＷは瞬時に作成でき、業務サーバ２２からのデータの書き込み先は新運用ＣＯＷとなる。そのため、運用無停止でスナップショットを採取でき、業務サーバ２２からのデータの書き込み処理と集約ＣＯＷへのマージ処理の競合を防ぐことができる。
【００８０】
データの読み出し処理に関しては、以下の理由でマージ処理と競合することはない。すなわち、マージ先のチャンクと同一の論理アドレスからデータの読み出しをする場合、集約ＣＯＷからのデータの読み出しとはならず、旧運用ＣＯＷからの読み出しとなる。よって、集約ＣＯＷへのマージ処理中であっても、マージ先のチャンクからの読み出しが発生することはない。
【００８１】
図１６は、ＣＯＷ作成処理の詳細を図解したフローチャートの一例である。図１６のフローは、例えばスナップショットの指示を業務サーバ２２から受信した場合に開始される。
【００８２】
図１６において、作成部４１は、先ず、新運用ＣＯＷを作成する（Ｓ１０１）。作成直後の新運用ＣＯＷには情報は格納されていないため、作成部４１は、瞬時に新運用ＣＯＷを作成することができる。
【００８３】
次に、作成部４１は、新運用ＣＯＷを旧運用ＣＯＷに紐付けする（Ｓ１０２）。すなわち作成部４１は、新運用ＣＯＷの親ノード識別情報４５に、旧運用ＣＯＷの識別情報を格納する。この紐付けとともに、作成部４１は、旧運用ＣＯＷの業務サーバ２２からのアクセスを読み取り専用に設定する。これ以降、対象ボリュームに対する書き込み処理は、新運用ＣＯＷに対して行われる。
【００８４】
次に、作成部４１は、旧運用ＣＯＷの内容を集約ＣＯＷにマージする（Ｓ１０３）。すなわち作成部４１は、集約ＣＯＷの差分情報４６に、旧運用ＣＯＷの差分情報４６の内容を追加する。
【００８５】
次に、作成部４１は、Ｓ１０４とＳ１０５の内容を並列して実行する。Ｓ１０４において、作成部４１は、旧運用ＣＯＷと集約ＣＯＷとの紐付け、及び、旧運用ＣＯＷと新運用ＣＯＷとの紐付けを解除する。具体的には作成部４１は、旧運用ＣＯＷの親ノード識別情報４５に格納された集約ＣＯＷの識別情報を削除する。また作成部４１は、新運用ＣＯＷの親ノード識別情報４５に格納された旧運用ＣＯＷの識別情報を削除する。そして、作成部４１は、旧運用ＣＯＷを世代が最も新しいＣＯＷ＃Ｘに紐付けする。具体的には作成部４１は、旧運用ＣＯＷの親ノード識別情報４５にＣＯＷ＃Ｘの識別情報を格納する。図１５の例では、世代が最も新しいＣＯＷ＃ＸはＣＯＷ＃２である。
【００８６】
Ｓ１０４と並行して、Ｓ１０５において、作成部４１は、新運用ＣＯＷを集約ＣＯＷに紐付ける。具体的には、作成部４１は、新運用ＣＯＷの親ノード識別情報４５に集約ＣＯＷの識別情報を格納する。
【００８７】
Ｓ１０４及びＳ１０５の処理が完了すると、ＣＯＷ作成処理は終了する。
次に、リストア部４２によるリストア処理の詳細を説明する。リストアは、運用世代の内容を、過去に取得したスナップショットの内容で置き換える処理である。実施形態のスナップショットのリストアは、業務サーバ２２からみて対象ボリュームの運用を停止することなく実行することができる。図１７は、実施形態に係るリストアに関する説明図である。図１７では、リストア対象世代のＣＯＷをＣＯＷ＃２として説明する。
【００８８】
図１７（Ａ）は、リストア前のスナップショットの管理構造の状態を示す。図１７（Ａ）においては、すでに３つのＣＯＷ＃１、ＣＯＷ＃２、ＣＯＷ＃３が作成されている。業務サーバ２２からＣＯＷ＃２へのリストア指示を受信すると、リストア部４２は、リストア処理を開始する。リストア処理が開始されると、先ず図１７（Ｂ）の状態に遷移する。
【００８９】
図１７（Ｂ）において、リストア部４２は、新運用ＣＯＷを作成し、作成した新運用ＣＯＷをリストア対象世代のＣＯＷ＃２に紐付ける。これ以降、業務サーバ２２からのデータの書き込みは新運用ＣＯＷに対して行われる。次に、リストア部４２は、旧運用ＣＯＷと、旧集約ＣＯＷを削除する。削除が完了すると、図１７（Ｃ）の状態に遷移する。
【００９０】
図１７（Ｃ）において、先ずリストア部４２は、新集約ＣＯＷを作成し、作成した新集約ＣＯＷをベースＬＵＮに紐付ける。そして、リストア部４２は、リストア対象世代のＣＯＷ＃２、及び、リストア対象世代よりも古い世代のＣＯＷの内容を１つずつ順に新集約ＣＯＷへマージする。このマージの詳細については、後ほど図１８を参照して説明する。マージが完了すると、図１７（Ｄ）の状態に遷移する。
【００９１】
図１７（Ｄ）においては、リストア部４２は、新運用ＣＯＷの紐付けの変更処理を行う。すなわち、リストア部４２は、新運用ＣＯＷとリストア対象世代のＣＯＷとの紐付けを解除し、新運用ＣＯＷを新集約ＣＯＷに紐付ける。このようにしてリストア処理が完了する。
【００９２】
尚、図１７（Ｄ）においては、厳密にはリストア部４２は、新運用ＣＯＷの紐付けの変更処理の間は、業務サーバ２２からの対象ボリュームに対するＩ／Ｏを停止させる。ただし紐付けの変更処理は非常に短い時間で完了できる。このため、業務サーバ２２からは対象ボリュームが運用停止したようには認識されない。よって、リストア処理において、新運用ＣＯＷを作成して、リストア対象世代のＣＯＷに紐付けることにより、運用無停止でリストアが可能となる。
【００９３】
図１７（Ｃ）におけるリストア時のマージ処理について、詳しく説明する。リストア時のマージは、マージ処理のデータ量を削減するために、世代の新しいＣＯＷから実行される。そして、既に、世代の新しいＣＯＷのマージによりマージ済のチャンクは、世代の古いＣＯＷのマージにおいては、マージ対象外とする。図１８は、実施形態に係るリストアにおけるマージ処理の説明図である。図１８では、リストア対象世代のＣＯＷをＣＯＷ＃２として説明する。
【００９４】
図１８（Ａ）は、図１７（Ｃ）におけるマージ処理の直前のスナップショットの管理構造の状態を示す。図１８（Ａ）においては、ＣＯＷ＃２の割当済みチャンクとして｛3, 12｝が格納されている。またＣＯＷ＃１の割当済みチャンクとして｛5, 12, 100｝が格納されている。新規作成された直後の新集約ＣＯＷには、割当済みチャンク情報は格納されていない。マージ処理が開始されると、先ず図１８（Ｂ）の状態に遷移する。
【００９５】
図１８（Ｂ）において、リストア部４２は、リストア対象世代のＣＯＷから、新集約ＣＯＷへのマージ処理を開始する。図１８（Ｂ）の例では、リストア対象世代のＣＯＷは、ＣＯＷ＃２である。すなわち、リストア部４２は、ＣＯＷ＃２の割当済みチャンクである｛3, 12｝を、新集約ＣＯＷへマージする。具体的には、リストア部４２は、リストア対象世代のＣＯＷの差分情報４６の「割当済みチャンク情報」が｛3, 12｝のレコードを、新集約ＣＯＷの差分情報４６に追加する。この結果、新集約ＣＯＷには、割当済みチャンクとして｛3, 12｝が格納される。ＣＯＷ＃２のマージが完了すると、図１８（Ｃ）の状態に遷移する。
【００９６】
図１８（Ｃ）において、リストア部４２は、リストア対象世代のＣＯＷよりも世代の古いＣＯＷのうちで、最も世代が新しく、且つ、マージ未実行のＣＯＷを選択する。ここで選択されるＣＯＷは、図１８（Ｃ）の例では、ＣＯＷ＃１である。そして、リストア部４２は、選択したＣＯＷの内容を新集約ＣＯＷへマージする。ここで、選択したＣＯＷの割当済みチャンクのうち、既にマージ済みのチャンクについては、マージの対象外とする。すなわち、リストア部４２は、ＣＯＷ＃１の割当済みチャンクである｛5, 12, 100｝のうち、既に、ＣＯＷ＃２においてマージ済みのチャンク｛12｝については、マージの対象外とする。よってリストア部４２は、マージ対象外のチャンクを除いたＣＯＷ＃１の割当済みチャンク｛5, 100｝を、新集約ＣＯＷへマージする。具体的には、リストア部４２は、ＣＯＷ＃１の差分情報４６のうち、「割当済みチャンク情報」が｛5, 100｝のレコードを、新集約ＣＯＷの差分情報４６に追加する。この結果、新集約ＣＯＷには、割当済みチャンクとして｛3, 5, 12, 100｝が格納される。
【００９７】
このように、リストア部４２は、新しい世代のＣＯＷから順にマージを行い、既にマージ済みのチャンクについてはマージの対象外とすることで、マージされるデータの量を削減することができる。
【００９８】
図１９は、リストア処理の詳細を図解したフローチャートの一例である。図１９のフローは、例えば所定の世代へのリストアの指示を業務サーバ２２から受信した場合に開始される。
【００９９】
図１９において、リストア部４２は、先ず、新運用ＣＯＷを作成する（Ｓ２０１）。作成直後の新運用ＣＯＷには情報は格納されていないため、リストア部４２は、瞬時に新運用ＣＯＷを作成することができる。
【０１００】
次に、リストア部４２は、新運用ＣＯＷをリストア対象世代のＣＯＷに紐付けする（Ｓ２０２）。すなわち作成部４１は、新運用ＣＯＷの親ノード識別情報４５に、リストア対象世代のＣＯＷの識別情報を格納する。
【０１０１】
次に、リストア部４２は、旧運用ＣＯＷ、及び、旧集約ＣＯＷを削除する（Ｓ２０３）。
【０１０２】
次に、リストア部４２は、新集約ＣＯＷを作成する（Ｓ２０４）。
次に、リストア部４２は、新集約ＣＯＷをベースＬＵＮに紐付けする（Ｓ２０５）。具体的にはリストア部４２は、新集約ＣＯＷの親ノード識別情報４５に、ベースＬＵＮの識別情報を格納する。
【０１０３】
次に、リストア部４２は、変数ｎに、リストア対象世代のＣＯＷの世代数を示す値を代入する（Ｓ２０６）。図１７の例では、リストア対象世代の世代数は「2」であるので、ｎには「2」が代入される。
【０１０４】
次に、リストア部４２は、変数ｎが「0」であるか否かを判定する（Ｓ２０７）。変数ｎが「0」でないと判定した場合（Ｓ２０７でＮｏ）、リストア部４２は、世代が変数ｎに対応するＣＯＷ、すなわち、ＣＯＷ＃ｎの内容を新集約ＣＯＷへマージする（Ｓ２０８）。新集約ＣＯＷへのマージ処理の詳細については、後ほど図２０を用いて説明する。
【０１０５】
次に、リストア部４２は、変数ｎの値をデクリメントする（Ｓ２０９）。そして、処理は再度Ｓ２０７に遷移する。
【０１０６】
Ｓ２０７において、変数ｎが「0」であると判定した場合（Ｓ２０７でＹｅｓ）、リストア部４２は、新運用ＣＯＷの現在の紐付けを解除し、新運用ＣＯＷを新集約ＣＯＷに紐付ける（Ｓ２１０）。具体的には、先ず、リストア部４２は、新運用ＣＯＷの親ノード識別情報４５に格納されているリストア対象世代のＣＯＷの識別情報を削除する。そして、リストア部４２は、新運用ＣＯＷの親ノード識別情報４５に、新集約ＣＯＷの識別情報を格納する。
【０１０７】
そして、新運用ＣＯＷと新集約ＣＯＷの紐付けが完了すると、リストア処理は終了する。
【０１０８】
図２０は、リストア処理におけるマージ処理の詳細を図解したフローチャートの一例である。このマージ処理は、図１９のＳ２０８で実行される処理の詳細を示すものである。図２０では、ＣＯＷ＃ｎの内容を新集約ＣＯＷへマージする処理を示している。
【０１０９】
図２０において、リストア部４２は、先ず、ＣＯＷ＃ｎの割当済みチャンクのうち、１つの割当済みチャンクを選択する（Ｓ３０１）。具体的には例えば、リストア部４２は、ＣＯＷ＃ｎの差分情報４６のレコードを１つ選択する。
【０１１０】
次に、リストア部４２は、Ｓ３０１で選択した割当済みチャンクと同一のチャンクが、新集約ＣＯＷに既に存在するか否かを判定する（Ｓ３０２）。具体的には例えば、リストア部４２は、新集約ＣＯＷの差分情報４６に含まれるレコードのうち、「割当済みチャンク情報」が、Ｓ３０１で選択したレコードの「割当済みチャンク情報」と一致するレコードが存在するか否かを判定する。選択した割当済みチャンクと同一のチャンクが新集約ＣＯＷに既に存在すると判定された場合（Ｓ３０２でＹｅｓ）、処理はＳ３０４に遷移する。
【０１１１】
一方、選択した割当済みチャンクと同一のチャンクが新集約ＣＯＷに存在しないと判定した場合（Ｓ３０２でＮｏ）、リストア部４２は、選択したチャンクの情報を、集約ＣＯＷへコピーする（Ｓ３０３）。具体的には例えば、リストア部４２は、Ｓ３０１で選択したレコードを、新集約ＣＯＷの差分情報４６に追加する。
【０１１２】
次に、リストア部４２は、ＣＯＷ＃ｎの全ての割当済みチャンクをＳ３０１で選択済みか否かを判定する（Ｓ３０４）。ＣＯＷ＃ｎの割当済みチャンクのうち、未選択のチャンクが存在する場合（Ｓ３０４でＮｏ）、処理は再度Ｓ３０１に遷移する。そしてリストア部４２は、Ｓ３０１において、ＣＯＷ＃ｎの割当済みチャンクのうち、選択済みでない割当済みチャンクを１つ選択し、Ｓ３０２以降の処理を繰り返す。
【０１１３】
一方、ＣＯＷ＃ｎの全ての割当済みチャンクが選択済みであると判定された場合（Ｓ３０４でＹｅｓ）、マージ処理は終了する。
【０１１４】
次に、スナップショットの管理構造の切り替えについて説明する。
切替部４３は、取得されたスナップショットの世代数に応じて、スナップショットの管理構造の管理形態を切り替える。具体的には、切替部４３は、図９で示した管理形態（以下、管理形態１と記す）と、第２の比較例に係る管理形態（以下、管理形態２と記す）とを切り替える。図１４を用いて説明したように、実施形態の管理形態１が第２の比較例の管理形態２と比べて性能が向上するのは、３世代以上のスナップショットが取得されたときである。取得されたスナップショットが２世代以下の場合は性能の向上が見込めず、集約ＣＯＷにより余分な記憶容量を消費してしまう。従って、切替部４３は、取得されたスナップショットが２世代以下である場合には、管理形態２とし、取得されたスナップショットが３世代以上である場合には、管理形態１となるように管理形態の切り替えを行う。これにより、最適なスナップショットの管理構造を維持し、使用される記憶容量を抑制することができる。
【０１１５】
以下、管理形態２から管理形態１への切り替え処理と、管理形態１から管理形態２への切り替え処理について順に説明する。
【０１１６】
先ず、管理形態２から管理形態１への切り替えについて説明する。この切り替えは、２世代のスナップショットを取得済みの状態から３世代目のスナップショットを取得するときに実行される。
【０１１７】
図２１は、実施形態に係る、管理形態２から管理形態１への切り替え処理の説明図である。管理形態２から管理形態１への切り替えは、一部の処理は、図１７を参照して説明したリストアと同様の処理により実現する。
【０１１８】
図２１（Ａ）は、切り替え前のスナップショットの管理構造の状態を示す。図２１（Ａ）においては、２世代のスナップショットが取得済みとなっている。すなわち、既に２つのＣＯＷ＃１、運用ＣＯＷが作成されている。このとき、業務サーバ２２からスナップショットの取得指示を受信すると、切替部４３は、切り替え処理を開始する。切り替え処理が開始されると、先ず図２１（Ｂ）の状態に遷移する。
【０１１９】
図２１（Ｂ）において、切替部４３は、新運用ＣＯＷを作成し、作成した新運用ＣＯＷを旧運用ＣＯＷに紐付ける。紐付けとともに、切替部４３は、旧運用ＣＯＷをＣＯＷ＃２として、業務サーバ２２からのアクセスを読み取り専用に設定する。これ以降、業務サーバ２２からのデータの書き込みは新運用ＣＯＷに対して行われる。ＣＯＷ＃２は、読み取り専用に設定されているため、以下の処理はバックグラウンドでの処理が可能である。次に図２１（Ｃ）の状態に遷移する。
【０１２０】
図２１（Ｃ）において、先ず切替部４３は、集約ＣＯＷを作成し、作成した集約ＣＯＷをベースＬＵＮに紐付ける。そして、切替部４３は、ＣＯＷ＃２、及び、ＣＯＷ＃１の内容を１つずつ順に集約ＣＯＷへマージする。このマージの詳細は、図１８、及び図２０を参照して説明したものと同様である。マージが完了すると、図２１（Ｄ）の状態に遷移する。
【０１２１】
図２１（Ｄ）においては、切替部４３は、新運用ＣＯＷの紐付けの変更処理を行う。すなわち、切替部４３は、新運用ＣＯＷのＣＯＷ＃２への紐付けを解除し、新運用ＣＯＷを集約ＣＯＷに紐付ける。このようにして管理形態２から管理形態１への切り替え処理が完了する。
【０１２２】
尚、図２１（Ｄ）においては、厳密には切替部４３は、新運用ＣＯＷの紐付けの変更処理の間は、業務サーバ２２からの対象ボリュームに対するＩ／Ｏを停止させる。ただし紐付けの変更処理は非常に短い時間で完了できる。このため、業務サーバ２２からは対象ボリュームが運用停止したようには認識されない。よって、管理形態２から管理形態１への切り替え処理において、新運用ＣＯＷを作成して、ＣＯＷ＃２に紐付けることにより、運用無停止で切り替えが可能となる。
【０１２３】
図２２は、管理形態２から管理形態１への切り替え処理の詳細を図解したフローチャートの一例である。図２２のフローは、図２１（Ａ）に示したように、既に２つのＣＯＷ＃１、運用ＣＯＷが作成されている状態において、例えばスナップショットの取得指示を業務サーバ２２から受信した場合に開始される。
【０１２４】
図２２において、切替部４３は、先ず、新運用ＣＯＷを作成する（Ｓ４０１）。作成直後の新運用ＣＯＷには情報は格納されていないため、切替部４３は、瞬時に新運用ＣＯＷを作成することができる。
【０１２５】
次に、切替部４３は、新運用ＣＯＷを旧運用ＣＯＷに紐付けする（Ｓ４０２）。すなわち作成部４１は、新運用ＣＯＷの親ノード識別情報４５に、旧運用ＣＯＷの識別情報を格納する。この紐付けとともに、切替部４３は、旧運用ＣＯＷの業務サーバ２２からのアクセスを読み取り専用に設定し、旧運用ＣＯＷをＣＯＷ＃２として設定する。
【０１２６】
次に、切替部４３は、新集約ＣＯＷを作成する（Ｓ４０３）。
次に、切替部４３は、新集約ＣＯＷをベースＬＵＮに紐付けする（Ｓ４０４）。具体的には切替部４３は、新集約ＣＯＷの親ノード識別情報４５に、ベースＬＵＮの識別情報を格納する。
【０１２７】
次に、切替部４３は、変数ｎに、「2」を代入する（Ｓ４０５）。
次に、切替部４３は、変数ｎが「0」であるか否かを判定する（Ｓ４０６）。変数ｎが「0」でないと判定した場合（Ｓ４０６でＮｏ）、切替部４３は、世代が変数ｎに対応するＣＯＷ、すなわち、ＣＯＷ＃ｎの内容を新集約ＣＯＷへマージする（Ｓ４０７）。新集約ＣＯＷへのマージ処理の詳細については、図２０を用いて説明したものと同様である。
【０１２８】
次に、切替部４３は、変数ｎの値をデクリメントする（Ｓ４０８）。そして、処理は再度Ｓ４０６に遷移する。
【０１２９】
Ｓ４０６において、変数ｎが「0」であると判定した場合（Ｓ４０６でＹｅｓ）、切替部４３は、新運用ＣＯＷの現在の紐付けを解除し、新運用ＣＯＷを新集約ＣＯＷに紐付ける（Ｓ４０９）。具体的には、先ず、切替部４３は、新運用ＣＯＷの親ノード識別情報４５に格納されている旧運用ＣＯＷ（ＣＯＷ＃２）の識別情報を削除する。そして、切替部４３は、新運用ＣＯＷの親ノード識別情報４５に、新集約ＣＯＷの識別情報を格納する。
【０１３０】
そして、新運用ＣＯＷと新集約ＣＯＷの紐付けが完了すると、管理形態２から管理形態１への切り替え処理は終了する。
【０１３１】
次に、管理形態１から管理形態２への切り替えについて説明する。この切り替えは、３世代のスナップショットを取得済みの状態から、中間世代を削除した結果、スナップショットの世代数が２世代に減少する場合に実行される。図２３は、実施形態に係る、管理形態１から管理形態２への切り替え処理の説明図である。図２３においては、ＣＯＷ＃１を削除することにより、スナップショットの世代数が２世代に減少する場合の例を示している。
【０１３２】
図２３（Ａ）は、切り替え前のスナップショットの管理構造の状態を示す。図２３（Ａ）においては、３世代のスナップショットが取得済みとなっている。すなわち、既にＣＯＷ＃１、ＣＯＷ＃２、及び、集約ＣＯＷと運用ＣＯＷが作成されている。業務サーバ２２からＣＯＷ＃１の削除指示を受信すると、切替部４３は、切り替え処理を開始する。切り替え処理が開始されると、先ず図２３（Ｂ）の状態に遷移する。
【０１３３】
図２３（Ｂ）において、切替部４３は、ＣＯＷ＃１及びＣＯＷ＃２を削除する。削除が完了すると、図２３（Ｃ）の状態に遷移する。
【０１３４】
図２３（Ｃ）において、切替部４３は、集約ＣＯＷを新ＣＯＷ＃１として扱う。このようにして管理形態２から管理形態１への切り替え処理が完了する。
【０１３５】
管理形態１から管理形態２への切り替え処理において、運用ＣＯＷの状態は変化しないため、運用無停止で切り替えが可能となる。
【０１３６】
尚、運用ＣＯＷの直前世代、すなわち、ＣＯＷ＃２を削除する場合は、管理形態１から管理形態２への切り替えはできない。これは、以下の理由による。すなわち、中間世代のＣＯＷを削除する場合は、削除されたＣＯＷが有する差分情報４６を子ノードにマージしなければ、削除されたＣＯＷが有する差分情報４６が消失してしまう。管理形態２においては、ＣＯＷ＃２の子ノードは運用ＣＯＷとなる。よって、ＣＯＷ＃２を削除する場合は、運用ＣＯＷへのマージによるＩ／Ｏが発生することとなる。これは、マージによるＩ／Ｏと、業務サーバ２２からのＩ／Ｏとの競合を引き起こす。したがって、このような競合の発生を防ぐために、実施形態においては、切替部４３は、ＣＯＷ＃２を削除する場合には管理形態１から管理形態２への切り替えの実行は行わずに、管理形態１のまま運用を継続する。
【０１３７】
図２４は、管理形態１から管理形態２への切り替え処理の詳細を図解したフローチャートの一例である。図２４のフローは、図２３（Ａ）に示したように、既にＣＯＷ＃１、ＣＯＷ＃２、及び、集約ＣＯＷと運用ＣＯＷが作成されている状態において、例えばＣＯＷ＃１の削除指示を業務サーバ２２から受信した場合に開始される。
【０１３８】
図２４において、切替部４３は、先ず、ＣＯＷ＃１及びＣＯＷ＃２を削除する（Ｓ５０１）。次に、切替部４３は、集約ＣＯＷをＣＯＷ＃１として管理する（Ｓ５０２）。そして、管理形態１から管理形態２への切り替え処理は終了する。
【０１３９】
次に、実施形態に係る読み出し処理のフローについて説明する。図２５は、実施形態に係る読み出し処理の詳細を図解したフローチャートの一例である。図２５のフローは、例えば、所定の世代の対象ボリュームからのデータの読み出し指示を業務サーバ２２から受信した場合に開始される。
【０１４０】
図２５において、業務サーバ２２から読み出し要求を受信すると、読み出し部３５は、先ず、読み出し対象の世代が運用世代か否かを判定する（Ｓ６０１）。読み出し対象の世代が運用世代であると判定すると（Ｓ６０１でＹｅｓ）、読み出し部３５は、運用ＣＯＷ、集約ＣＯＷ、及びベースＬＵＮを用いて、データの読み出しを行う（Ｓ６０２）。すなわち、読み出し部３５は、運用ＣＯＷから集約ＣＯＷ、ベースＬＵＮの順に走査し、読み出し対象データを特定する。尚、読み出し部３５は、各ＣＯＷの親ノード識別情報４５に基づいて親ノードを特定することで、順に走査を行う。そして読み出し部３５は、特定した読み出し対象データの読み出しを行う。そして、読み出し処理は終了する。
【０１４１】
Ｓ６０１において、読み出し対象の世代が運用世代でないと判定すると（Ｓ６０１でＮｏ）、読み出し部３５は、読み出し対象の世代が運用世代の直前の世代（取得済みの静止点のうちで最新の世代）か否かを判定する（Ｓ６０３）。読み出し対象の世代が運用世代の直前の世代であると判定すると（Ｓ６０３でＹｅｓ）、読み出し部３５は、集約ＣＯＷ、及びベースＬＵＮを用いて、データの読み出しを行う（Ｓ６０４）。すなわち、読み出し部３５は、集約ＣＯＷ、ベースＬＵＮの順に走査し、読み出し対象データを特定する。尚、読み出し部は、集約ＣＯＷの親ノード識別情報４５に基づいて、ベースＬＵＮを特定する。そして読み出し部３５は、特定した読み出し対象データの読み出しを行う。そして、読み出し処理は終了する。
【０１４２】
Ｓ６０３において、読み出し対象の世代が運用世代の直前の世代でないと判定すると（Ｓ６０３でＮｏ）、読み出し部３５は、読み出し対象世代以前のＣＯＷ、及びベースＬＵＮを用いて、データの読み出しを行う（Ｓ６０５）。すなわち、読み出し部３５は、読み出し対象世代の静止点を静止点ｎとすると、ＣＯＷ＃ｎ、読み出し対象世代以前のＣＯＷ＃（ｎ−１）〜ＣＯＷ＃１、及びベースＬＵＮを用いて、データの読み出しを行う（Ｓ６０５）。具体的には、読み出し部３５は、読み出し対象世代のＣＯＷ＃ｎからベースＬＵＮまで、親ノード識別情報４５に基づいて子ノードから親ノードへ順に走査し、読み出し対象データを特定する。そして読み出し部３５は、特定した読み出し対象データの読み出しを行う。そして、読み出し処理は終了する。
【０１４３】
次に、実施形態に係るストレージ装置２１のハードウェア構成の一例を説明する。図２５は、実施形態に係るストレージ装置２１のハードウェア構成の一例を示す。
【０１４４】
ストレージ装置２１は、１以上のコントローラモジュール（以下、ＣＭと記す）５１（５１ａ、５１ｂ）、及び１以上の記憶装置５２（５２ａ〜５２ｄ）を含む。また、ストレージ装置２１は、例えば通信ネットワークを介して業務サーバ２２に接続される。
【０１４５】
ＣＭ５１は、ストレージシステムにおける種々の制御を行なうものであり、業務サーバ２２から受信したコマンドに基づいて、記憶装置５２に対するアクセス制御を行なう。尚、図２５の例ではＣＭの数は２つであるが、ＣＭの数は２に限定されない。
【０１４６】
ＣＭ５１は、Central Processing Unit（ＣＰＵ）６１（６１ａ、６１ｂ）、メモリ６２（６２ａ、６２ｂ）、読取装置６３（６３ａ、６３ｂ）、及び通信インターフェース６４（６４ａ、６４ｂ）を含む。ＣＰＵ６１、メモリ６２、読取装置６３、及び通信インターフェース６４はバス等を介して接続される。
【０１４７】
ＣＰＵ６１は、メモリ６２を利用して上述のフローチャートの手順を記述したプログラムを実行することにより、割当部３１、スナップショット管理部３３、書き込み部３４、及び読み出し部３５の一部または全部の機能を提供する。
【０１４８】
メモリ６２は、例えば半導体メモリであり、Random Access Memory（ＲＡＭ）領域およびRead Only Memory（ＲＯＭ）領域を含んで構成される。メモリ６２は、フラッシュメモリ等の半導体メモリであってもよい。
【０１４９】
読取装置６３は、ＣＰＵ６１の指示に従って着脱可能記憶媒体８０（８０ａ、８０ｂ）にアクセスする。着脱可能記憶媒体８０は、たとえば、半導体デバイス（ＵＳＢメモリ等）、磁気的作用により情報が入出力される媒体（磁気ディスク等）、光学的作用により情報が入出力される媒体（ＣＤ−ＲＯＭ、ＤＶＤ等）などにより実現される。尚、読取装置６３はストレージ装置２１に含まれなくてもよい。
【０１５０】
通信インターフェース６４は、ＣＰＵ６１の指示に従ってバス、インターコネクト、またはネットワーク等を介して、記憶装置５２、または、業務サーバ２２と通信する。記憶装置５２と通信をおこなう通信インターフェースは具体的には、例えばSerial Attached SCSI（ＳＡＳ）インターフェースである。
【０１５１】
実施形態のプログラムは、例えば、下記の形態でストレージ装置２１に提供される。
（１）記憶装置５２に予めインストールされている。
（２）着脱可能記憶媒体８０により提供される。
（３）プログラムサーバ（図示せず）から通信インターフェース６４を介して提供される。
【０１５２】
記憶装置５２は、例えばハードディスクである。なお、記憶装置５２は、フラッシュメモリ等の半導体メモリであってもよい。また、記憶装置５２は、外部記録装置であってもよい。記憶装置５２は、記憶部３２の一部または全部の機能を提供する。
【０１５３】
ストレージ装置２１は、複数のストレージ装置２１がインターコネクトを介して接続された構成としてもよい。その場合、各ストレージ装置２１の1以上の記憶装置５２を組み合わせて１つのストレージプールを構成してもよい。
【０１５４】
また、ストレージ装置２１は、ＣＰＵ６１、メモリ６２、読取装置６３（省略可）、通信インターフェース６４、記憶装置５２を１つの筐体に含む情報処理装置としてもよい。
【０１５５】
さらに、実施形態のストレージ装置２１の一部は、ハードウェアで実現してもよい。或いは、実施形態のストレージ装置２１は、ソフトウェアおよびハードウェアの組み合わせで実現してもよい。
【０１５６】
尚、本実施形態は、以上に述べた実施の形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で種々の構成または実施形態を取ることができる。
【０１５７】
上記実施形態に関し、更に以下の付記を開示する。
（付記１）
記憶領域の管理単位を示すボリュームの静止点間の差分を示す差分情報であって複数世代に関連付けられた該差分情報に基づいて、該複数世代の差分情報を集約した集約情報を生成する生成部と、
前記集約情報を最古の静止点での前記ボリュームの状態に関係付ける第１関係付け部と、
直近の静止点のボリュームの状態から更新されたボリュームの更新情報を、前記集約情報に関係付ける第２関係付け部と
を備えることを特徴とするストレージ制御装置。
（付記２）
前記ストレージ制御装置は、さらに、
新規の静止点におけるスナップショットの取得指示を受信した場合、前記集約情報に前記更新情報をマージする統合部と、
マージ済みの前記更新情報を最新世代の前記差分情報に関係付ける第３関係付け部と、
を備え、
前記生成部は、前記新規の静止点のボリュームの状態から更新されたボリュームの更新情報を生成し、
前記第２関係付け部は、生成された前記更新情報を前記集約情報に関係付ける
ことを特徴とする付記１に記載のストレージ制御装置。
（付記３）
前記生成部は、新規の静止点におけるスナップショットの取得指示を受信した場合、前記新規の静止点のボリュームの状態から更新されたボリュームの更新情報である第１の更新情報を生成して、前記取得指示の受信前における前記更新情報である第２の更新情報に関係付けるとともに、前記第２の更新情報を読み取り専用に設定し、
前記統合部は、読み取り専用に設定された前記第２の更新情報を、前記集約情報にマージし、
前記第２関係付け部は、前記マージが完了すると、前記第１の更新情報と前記第２の更新情報の関係付けを解除して、前記第１の更新情報を前記集約情報に関係付け、
前記第３関係付け部は、前記マージが完了すると、前記第２の更新情報と前記集約情報の関係付けを解除して、前記最新世代の差分情報に関係付ける
ことを特徴とする付記２に記載のストレージ制御装置。
（付記４）
前記ストレージ制御装置は、さらに、
所定の世代へのリストア指示を受信した場合、前記所定の世代のボリュームの状態から前記リストア指示の受信以降に更新されたボリュームの更新情報である第３の更新情報を作成して、前記所定の世代の差分情報に関係付けるとともに、前記リストア指示の受信前における更新情報と前記集約情報とを削除し、前記所定の世代以前の全ての差分情報に基づいて、前記所定の世代以前の全ての世代の差分情報を集約した集約情報を生成して、前記最古の静止点での前記ボリュームの状態に関係付け、前記第３の更新情報を、生成した前記集約情報に関係付けるリストア部
を備えることを特徴とする付記１〜３のうちいずれか１項に記載のストレージ制御装置。
（付記５）
前記差分情報は、前記ボリュームの変更前のデータが記憶されている記憶領域を示す領域情報と、該記憶領域の変更後のデータとを含み、
前記リストア部は、前記所定の世代以前の差分情報から、世代の新しい順に差分情報を抽出し、前記抽出した差分情報に含まれる前記変更後のデータのうち、該抽出した差分情報よりも新しい世代の差分情報に含まれる前記変更後のデータが前記集約情報に存在しない前記記憶領域の変更後のデータを、前記集約情報に格納する
ことを特徴とする付記４に記載のストレージ制御装置。
（付記６）
前記ストレージ制御装置は、
前記差分情報の数が２つであって、前記最古の静止点での前記ボリュームの状態に関係付けられている差分情報の削除指示を受信した場合、２つの前記差分情報を削除する削除部
を備え、
前記生成部は、前記差分情報の数が１つであり前記更新情報が前記差分情報に関係付けられている場合に、新規の静止点におけるスナップショットの取得指示を受信すると、前記新規の静止点のボリュームの状態から更新されたボリュームの更新情報である第１の更新情報を生成して、前記取得指示の受信前に存在した前記更新情報である第２の更新情報に関係付けるとともに、前記第２の更新情報を読み取り専用に設定し、前記第２の更新情報を含む全ての差分情報に基づいて、前記第２の更新情報を含む全ての世代の差分情報を集約した集約情報を生成し、
前記第２関係付け部は、前記第１の更新情報と前記第２の更新情報の関係付けを解除し、前記第１の更新情報を前記集約情報に関係付ける
ことを特徴とするストレージ制御装置。
（付記７）
前記ストレージ制御装置は、さらに、
現在のボリュームに対する読み出し要求を受信した場合、前記更新情報、前記集約情報、及び前記最古の静止点での前記ボリュームの状態を用いて、データを読み出し、直近の静止点のボリュームに対する読み出し要求を受信した場合、前記集約情報及び前記最古の静止点での前記ボリュームの状態を用いて、データを読み出す、読み出し部
を備えることを特徴とする付記１〜６に記載のストレージ制御装置。
（付記８）
記憶領域の管理単位を示すボリュームの静止点間の差分を示す差分情報であって複数世代に関連付けられた該差分情報に基づいて、該複数世代の差分情報を集約した集約情報を生成し、
前記集約情報を最古の静止点での前記ボリュームの状態に関係付け、
直近の静止点のボリュームの状態から更新されたボリュームの更新情報を、前記集約情報に関係付ける
処理をコンピュータが実行することを特徴とするストレージ制御方法。
（付記９）
コンピュータに、
記憶領域の管理単位を示すボリュームの静止点間の差分を示す差分情報であって複数世代に関連付けられた該差分情報に基づいて、該複数世代の差分情報を集約した集約情報を生成し、
前記集約情報を最古の静止点での前記ボリュームの状態に関係付け、
直近の静止点のボリュームの状態から更新されたボリュームの更新情報を、前記集約情報に関係付ける
処理を実行させることを特徴とするストレージ制御プログラム。
【符号の説明】
【０１５８】
１        ストレージ制御装置
２        生成部
３        第１関連付け部
４        第２関連付け部
５        統合部
６        第３関連付け部
７        リストア部
８        削除部
９        読み出し部
２１      ストレージ装置
２２      業務サーバ
３１      割当部
３２      記憶部
３３      スナップショット管理部
３４      書き込み部
３５      読み出し部
４１      作成部
４２      リストア部
４３      切替部
４５      親ノード識別情報
４６      差分情報
５１      ＣＭ
５２      記憶装置
６１      ＣＰＵ
６２      メモリ
６３      読取装置
６４      通信インターフェース
８０      着脱可能記憶媒体
【図１】
2016162245.tif 000003
【図２】
2016162245.tif 000004
【図３】
2016162245.tif 000005
【図４】
2016162245.tif 000006
【図５】
2016162245.tif 000007
【図６】
2016162245.tif 000008
【図７】
2016162245.tif 000009
【図８】
2016162245.tif 000010
【図９】
2016162245.tif 000011
【図１０】
2016162245.tif 000012
【図１１】
2016162245.tif 000013
【図１２】
2016162245.tif 000014
【図１３】
2016162245.tif 000015
【図１４】
2016162245.tif 000016
【図１５】
2016162245.tif 000017
【図１６】
2016162245.tif 000018
【図１７】
2016162245.tif 000019
【図１８】
2016162245.tif 000020
【図１９】
2016162245.tif 000021
【図２０】
2016162245.tif 000022
【図２１】
2016162245.tif 000023
【図２２】
2016162245.tif 000024
【図２３】
2016162245.tif 000025
【図２４】
2016162245.tif 000026
【図２５】
2016162245.tif 000027
【図２６】
2016162245.tif 000028