(57)【要約】      （修正有）【課題】クローンボリュームから作成されたスナップショットに基づく、クローンボリュームへのリストアにおいて、クローンボリュームの容量効率の悪化を軽減する。【解決手段】ボリューム管理装置は、受信したリストア命令に応じて、仮想ボリュームに含まれ、プール領域が割り当てられていない初期状態でデータが書き込まれると、当該データが格納されるプール領域が割り当てられる仮想領域であって、少なくとも所定時刻以後にデータが書き込まれた仮想領域において、当該仮想領域が所定時刻に初期状態であったか否かを特定する基準状態が、仮想領域が初期状態でなかったことを表す場合、仮想領域が所定時刻に記憶していたデータである保存データを読み出し仮想領域に書き込み、基準状態が仮想領域が初期状態であったことを表す場合、仮想領域に対するプール領域の割り当てを解除する、リストア実行手段を含む。【選択図】図３３
2015045993.tif 000002
【特許請求の範囲】
【請求項１】
受信したリストア命令に応じて、仮想ボリュームに含まれ、プール領域が割り当てられていない初期状態でデータが書き込まれると、当該データが格納される前記プール領域が割り当てられる仮想領域であって、少なくとも所定時刻以後にデータが書き込まれた前記仮想領域において、当該仮想領域が前記所定時刻に前記初期状態であったか否かを特定する基準状態が、前記仮想領域が前記初期状態でなかったことを表す場合、前記仮想領域が前記所定時刻に記憶していたデータである保存データを記憶する保存ボリュームから前記保存データを読み出し、読み出された前記保存データを前記仮想領域に書き込み、前記基準状態が、前記仮想領域が前記初期状態であったことを表す場合、前記仮想領域に対する前記プール領域の割り当てを解除するリストア実行手段
を含むボリューム管理装置。
【請求項２】
仮想ボリュームに含まれ、プール領域が割り当てられていない初期状態でデータが書き込まれると、当該データが格納される前記プール領域が割り当てられる仮想領域であって、少なくとも所定時刻以後にデータが書き込まれた前記仮想領域において、当該仮想領域が前記所定時刻に前記初期状態であったか否かを特定する基準状態を記憶する基準状態記憶手段
をさらに含む請求項１に記載のボリューム管理装置。
【請求項３】
複数の前記保存ボリュームの各々が、当該保存ボリュームである対象保存ボリュームに付与された基準時刻である対象基準時刻から、当該対象基準時刻以後で最も古い、他の前記保存ボリュームに付与された基準時刻である次基準時刻までの間である保存期間に、データが書き込まれた前記仮想領域に、前記対象基準時刻に格納されていた前記保存データを記憶し、
前記基準状態記憶手段は、前記保存ボリュームの各々において、当該保存ボリュームの前記保存期間にデータが書き込まれた前記仮想領域が、前記対象基準時刻に前記初期状態であったか否かを特定する前記基準状態を、前記保存ボリュームの識別子であるボリューム識別子に関連付けて記憶し、
前記ボリューム管理装置は、前記ボリューム識別子を含む前記リストア命令を受信する命令受信手段をさらに含み、
前記リストア実行手段は、前記ボリューム識別子に関連付けられた、前記仮想領域が前記初期状態でなかったことを表す前記基準状態が、前記基準状態記憶手段に格納されている場合、前記ボリューム識別子が前記リストア命令に含まれる前記保存ボリュームに付与された前記基準時刻に前記仮想領域に格納されていた前記保存データを、前記保存ボリュームから読み出し、読み出された前記保存データを前記仮想領域に書き込み、前記ボリューム識別子に関連付けられている前記基準状態が、前記仮想領域が前記初期状態であったことを表す場合、前記仮想領域に対する前記プール領域の割り当てを解除する
請求項２に記載のボリューム管理装置。
【請求項４】
前記ボリューム管理装置は、
前記仮想領域に前記プール領域が割り当てられているか否かを表す割当状態を記憶する割当状態記憶手段
を含み、
前記命令受信手段は、さらに、スナップショット作成命令を受信し、
前記ボリューム管理装置は、さらに、
前記スナップショット作成命令が受信された場合、使用されていないボリュームを備えるストレージ装置からいずれかの前記ボリュームを選択し、選択された前記ボリュームを前記保存ボリュームとして追加するボリューム管理手段と、
前記割当状態を読み出し、読み出された前記割当状態を、作成された前記保存ボリュームのボリューム識別子に関連付けて、前記基準状態として前記基準状態記憶手段に格納し、前記基準状態を格納した時刻を、作成された前記保存ボリュームに、前記基準時刻として付与するスナップショット設定手段と、
を含む
請求項３に記載のボリューム管理装置。
【請求項５】
前記命令受信手段は、さらに、前記仮想領域に対する更新データを含むライト命令を受信し、
前記ボリューム管理装置は、さらに、
前記ライト命令が受信された場合、最も新しい前記基準時刻である最新基準時刻が付与された前記保存ボリュームに前記保存データが格納されていなければ、前記仮想領域に格納されているデータを、前記保存データとして、前記保存ボリュームに書き込み、前記保存ボリュームに前記保存データが格納されていれば、前記保存ボリュームに前記保存データを書き込まないスナップショット実行手段と、
前記割当状態に基づき、前記ライト命令に前記更新データが含まれる前記仮想領域に、前記プール領域が割り当てられているか否かを検出し、前記仮想領域に前記プール領域が割り当てられている場合、前記割当状態を変更せず、前記仮想領域に前記プール領域が割り当てられていない場合、使用されていない前記プール領域を備えるプールボリュームからいずれかの前記プール領域を前記仮想領域に割り当て、前記割当状態が、前記仮想領域に前記プール領域が割り当てられていることを表すよう、前記割当状態を変更し、前記更新データを前記仮想領域に書き込むライト実行手段と
を含む
請求項４に記載のボリューム管理装置。
【請求項６】
前記プールボリュームと、前記複数の保存ボリュームとを備える前記ストレージ装置と、
請求項５に記載のボリューム管理装置と
を含むストレージシステム。
【請求項７】
受信したリストア命令に応じて、仮想ボリュームに含まれ、プール領域が割り当てられていない初期状態でデータが書き込まれると、当該データが格納される前記プール領域が割り当てられる仮想領域であって、少なくとも所定時刻以後にデータが書き込まれた前記仮想領域において、当該仮想領域が前記所定時刻に前記初期状態であったか否かを特定する基準状態が、前記仮想領域が前記初期状態でなかったことを表す場合、前記仮想領域が前記所定時刻に記憶していたデータである保存データを記憶する保存ボリュームから前記保存データを読み出し、読み出された前記保存データを前記仮想領域に書き込み、前記基準状態が、前記仮想領域が前記初期状態であったことを表す場合、前記仮想領域に対する前記プール領域の割り当てを解除する
ボリューム管理方法。
【請求項８】
コンピュータを、
受信したリストア命令に応じて、仮想ボリュームに含まれ、プール領域が割り当てられていない初期状態でデータが書き込まれると、当該データが格納される前記プール領域が割り当てられる仮想領域であって、少なくとも所定時刻以後にデータが書き込まれた前記仮想領域において、当該仮想領域が前記所定時刻に前記初期状態であったか否かを特定する基準状態が、前記仮想領域が前記初期状態でなかったことを表す場合、前記仮想領域が前記所定時刻に記憶していたデータである保存データを記憶する保存ボリュームから前記保存データを読み出し、読み出された前記保存データを前記仮想領域に書き込み、前記基準状態が、前記仮想領域が前記初期状態であったことを表す場合、前記仮想領域に対する前記プール領域の割り当てを解除するリストア実行手段と
して動作させるボリューム管理プログラム。
【請求項９】
コンピュータを、
仮想ボリュームに含まれ、プール領域が割り当てられていない初期状態でデータが書き込まれると、当該データが格納される前記プール領域が割り当てられる仮想領域であって、少なくとも所定時刻以後にデータが書き込まれた前記仮想領域において、当該仮想領域が前記所定時刻に前記初期状態であったか否かを特定する基準状態を記憶する基準状態記憶手段と
して動作させる請求項８に記載のボリューム管理プログラム。
【請求項１０】
コンピュータを、
それぞれ、当該保存ボリュームである対象保存ボリュームに付与された基準時刻である対象基準時刻から、当該対象基準時刻以後で最も古い、他の前記保存ボリュームに付与された基準時刻である次基準時刻までの間である保存期間に、データが書き込まれた前記仮想領域に、前記対象基準時刻に格納されていた前記保存データを記憶する複数の前記保存ボリュームの各々において、当該保存ボリュームの前記保存期間にデータが書き込まれた前記仮想領域が、前記対象基準時刻に前記初期状態であったか否かを特定する前記基準状態を、前記保存ボリュームの識別子であるボリューム識別子に関連付けて記憶する前記基準状態記憶手段と、
前記ボリューム識別子を含む前記リストア命令を受信する命令受信手段と、
前記ボリューム識別子に関連付けられた、前記仮想領域が前記初期状態でなかったことを表す前記基準状態が、前記基準状態記憶手段に格納されている場合、前記ボリューム識別子が前記リストア命令に含まれる前記保存ボリュームに付与された前記基準時刻に前記仮想領域に格納されていた前記保存データを、前記保存ボリュームから読み出し、読み出された前記保存データを前記仮想領域に書き込み、前記ボリューム識別子に関連付けられている前記基準状態が、前記仮想領域が前記初期状態であったことを表す場合、前記仮想領域に対する前記プール領域の割り当てを解除する前記リストア実行手段と
して動作させる請求項９に記載のボリューム管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置のボリュームを管理する技術に関する。
【背景技術】
【０００２】
近年、コストが削減され、運用や管理が容易になるために、仮想マシンを作成する仮想化技術が普及している。仮想化技術の例として、Ｌｉｎｋｅｄ  Ｃｌｏｎｅと呼ばれる技術がある。Ｌｉｎｋｅｄ  Ｃｌｏｎｅ技術では、仮想マシンが使用する、クローンボリュームと呼ばれるボリュームに含まれるそれぞれの部分領域は、共有される実ボリュームの部分領域に関連付けられる。共有される実ボリュームは、エンティティボリュームと呼ばれる。以下では、クローンボリュームに含まれる部分領域を、仮想領域と表記する。また、エンティティボリュームに含まれる部分領域を、実領域と表記する。
【０００３】
クローンボリュームが作成された時点において、互いに関連付けられている仮想領域と実領域に、異なるデータが格納される場合、その仮想領域には、例えば、プールボリュームからプール領域が割り当てられる。この場合、仮想領域に格納されるデータは、その仮想領域に割り当てられたプール領域に格納される。プール領域が割り当てられていない仮想領域には、その仮想領域に関連付けられた実領域が割り当てられる。
【０００４】
実領域が割り当てられている仮想領域に対して、データの書き込みが行われる場合、その仮想領域にプール領域が割り当てられる。そして、その仮想領域に対して、データの書き込みが行われる。データは、その仮想領域に割り当てられているプール領域に書き込まれる。この場合、例えば、１つの仮想領域のサイズが所定のサイズに決められているのであれば、その仮想領域に関連付けられている実領域に格納されているデータが、その仮想領域に新たに割り当てられるプール領域にコピーされた後、データの書き込みが行われる。すでにプール領域が割り当てられている仮想領域に対して書き込みが行われる場合、その仮想領域に割り当てられているプール領域に対して、書き込みが行われる。仮想領域からデータが読み出される場合、その仮想領域に割り当てられている領域から、データが読み出される。
【０００５】
この場合、必ずしも、クローンボリュームに含まれる複数の領域の全てに、プールボリュームの領域が割り当てられるわけではない。一般的には、クローンボリュームに含まれる複数の領域の一部に、プールボリュームの領域が割り当てられる。従って、クローンボリュームに含まれる複数の領域の全てにプールボリュームから領域を割り当てる場合と比べて、使用するディスク容量を削減することができる。
【０００６】
このような技術を使用して仮想マシンを稼働させる技術の一例が、特許文献１及び特許文献２に記載されている。
【０００７】
特許文献１及び特許文献２に記載されているシステムは、マスタのディスクイメージに対する差分データのみを格納したデルタディスクを使って、仮想マシンを稼働させる。このシステムでは、マスタのディスクイメージに対する差分がない領域では、マスタのディスクイメージが参照される。
【０００８】
また、記憶装置のデータをバックアップする方法では、バックアップの対象であるボリュームを、バックアップ先であるボリュームに完全に複製する方法が、最も単純な方法である。しかし、この方法には、ディスクの使用量が多くなるという問題がある。ディスクの使用量を削減するバックアップ方法として、更新されたデータの、更新前のデータのみが保持されるスナップショット作成方法が知られている。一般に、スナップショットの作成は、ある時点におけるバックアップ対象ボリュームの状態を保存するための技術である。更新されたデータの、更新前のデータのみが保持されるスナップショットには、コピーオンライト方式のスナップショットがある。
【０００９】
コピーオンライト方式のスナップショットでは、スナップショット作成時には、スナップショットボリュームが確保されるが、データのコピーは行われない。スナップショットが作成された後、バックアップ対象ボリュームに含まれるいずれかの領域に格納されているデータが更新された場合、その領域に格納されているデータに対する最初の更新時に、更新前のデータがスナップショットボリュームにコピーされる。コピーされる更新前のデータは、格納されているデータが更新された領域に、スナップショット作成時に格納されていたデータである。コピーオンライト方式のスナップショットでは、スナップショット作成時にデータがコピーされないので、スナップショットを瞬時に作成することができる。また、格納されているデータが更新された領域に、スナップショット作成時に格納されていたデータだけが保存されるので、ディスクの使用量が少なくてすむ。以上で説明した方法によってスナップショットを作成する装置の例が、特許文献３及び特許文献４に記載されている。
【００１０】
特許文献５には、複数の世代のスナップショットを作成するストレージシステムが記載されている。特許文献５のストレージシステムは、第１の世代のスナップショット作成要求を受信すると、スナップショット作成対象ボリュームに格納されているデータを、第１の世代におけるスナップショットのデータとしてプール領域に書き込む。特許文献５のストレージシステムは、第２の世代のスナップショット作成要求を受信すると、スナップショット作成対象ボリュームから差分データを読み出し、読み出した差分データをプール領域に書き込む。差分データは、第１の世代のスナップショット作成要求を受信してから、第２の世代のスナップショット作成要求を受信するまでの間に更新されたデータである。
【００１１】
特許文献６には、ストレージシステムに含まれる第１の論理ボリュームに対して、複数の世代のスナップショットを作成するバックアップシステムが記載されている。特許文献６のバックアップシステムは、ストレージシステムに含まれる第２の論理ボリュームには、確定した最も新しい世代の第１の論理ボリュームのコピーが、ファイル単位で記憶される。また、ストレージシステムに含まれるジャーナルエリアに、第１の論理ボリュームと第２の論理ボリュームの更新差分データと、確定した連続する世代間の更新差分データが、それぞれファイル単位で格納される。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２０１１−２４８７４２号公報
【特許文献２】特開２０１２−１２８６８４号公報
【特許文献３】特開２００５−２０８９５０号公報
【特許文献４】特開２００４−１９２１３３号公報
【特許文献５】特開２０１０−１２３０６６号公報
【特許文献６】特開２００９−１４６３８９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
前述のように、Ｌｉｎｋｅｄ  Ｃｌｏｎｅ技術に基づくクローンボリュームにおいて、プール領域が割り当てられている仮想領域には、そのクローンボリュームが作成されたときにプール領域が割り当てられた仮想領域がある。また、そのクローンボリュームが作成されたときにプール領域が割り当てられていない仮想領域に対して、データの更新が行われた場合、その仮想領域にプール領域が割り当てられる。以下では、クローンボリュームが作成されたときにプールボリュームの領域が割り当てられた仮想領域を、初期割り当て領域と表記する。さらに、クローンボリュームが作成されたときにプールボリュームの領域が割り当てられておらず、格納されているデータに対する更新が行われることによって、プールボリュームの領域が割り当てられた仮想領域を追加割り当て領域と表記する。
【００１４】
前述のように、コピーオンライト方式によるスナップショットは、そのスナップショットの対象であるボリュームにおいて、そのスナップショットが作成された時以降、更新が行われた領域に、そのスナップショットが作成された時に格納されていたデータである。
【００１５】
上述したクローンボリュームに対して、コピーオンライト方式によって作成されたスナップショットには、スナップショットの作成以降にデータの更新が行われた仮想領域に、スナップショット作成時に格納されていたデータが含まれる。データの更新が行われた仮想領域に、スナップショットが作成されたときプール領域が割り当てられていた場合、そのデータは、スナップショットが作成されたときそのプール領域に格納されていたデータである。スナップショットが作成されたときプール領域が割り当てられている仮想領域は、初期割り当て領域と、スナップショットが作成される前にプール領域が割り当てられた追加割り当て領域である。一方、データの更新が行われた仮想領域に、スナップショットが作成されたときプール領域が割り当てられていなかった場合、そのデータは、スナップショットが作成されたときその仮想領域に関連付けられた実領域に格納されていたデータである。その場合、データが更新される際、その仮想領域に、プール領域が新たに割り当てられる。そして、更新後のデータは、割り当てられたプール領域に格納される。
【００１６】
例えばスナップショットが作成されたボリュームに不具合が生じた場合、そのボリュームの状態を、作成されたスナップショットを使用して、そのスナップショットが作成されたときの状態に戻すリストアを行うことができる。このような、作成されたスナップショットに基づくリストアにおいて、一般に、スナップショットに含まれるデータは、リストア先のボリュームにおいてそのデータが格納されていた領域にコピーされる。このようなリストアにおいて、リストア先が上述のクローンボリュームである場合、スナップショット作成後に更新が行われた仮想領域に、そのスナップショットが作成されたときその仮想領域に格納されていたデータがコピーされる。スナップショット作成後に更新が行われた仮想領域には、プール領域が割り当てられている。従って、このようなリストアによってコピーされるデータは、コピー先の仮想領域に割り当てられているプール領域に格納される。
【００１７】
このようなリストアによってデータがコピーされる仮想領域には、スナップショットが作成されたときその仮想領域にプール領域が割り当てられていなくても、プール領域が割り当てられている。リストアによってコピーされるデータは、そのプール領域に格納される。スナップショットが作成された後、プール領域が割り当てられた仮想領域が存在する場合、そのスナップショットに基づくリストアが行われた後、クローンボリュームに割り当てられているプール領域の容量は、スナップショットが作成された時より増加する。すなわち、リストアによって、クローンボリュームの容量効率が悪化する。
【００１８】
特許文献１乃至３には、取得されたスナップショットから、スナップショット取得時点のボリュームのイメージをリストアする技術は記載されていない。
【００１９】
特許文献４のディスクアレイ装置は、リストア命令を受信すると、複製用論理ボリュームに格納されているデータを、メイン論理ボリュームにコピーする。
【００２０】
特許文献５のストレージシステムは、指定された世代におけるスナップショットのデータをプール領域から読み出し、読み出したデータをリストア先のボリュームにコピーする。
【００２１】
特許文献６のバックアップシステムは、ディスクリカバリ処理において、指定されたディスクリカバリ対象のボリュームと同じサイズのディスクリストアボリュームを定義する。そして、そのバックアップシステムは、最初の世代のスナップショットのファイルから、指定された世代のスナップショットのファイルまで、世代の順に全てのファイルをディスクリストアボリュームにコピーする。そして、そのバックアップシステムは、ファイルリストにより指定されたファイルを、ディスクリストアボリュームから、指定されたディスクリカバリ対象のボリュームにコピーする。
【００２２】
従って、特許文献１乃至６に記載されている技術では、上述の、リストアによるクローンボリュームの容量効率の悪化を防ぐことはできない。
【００２３】
本発明の目的の一つは、クローンボリュームから作成されたスナップショットに基づく、クローンボリュームへのリストアにおいて、クローンボリュームの容量効率の悪化を軽減することができるボリューム管理装置を提供することにある。
【課題を解決するための手段】
【００２４】
本発明のボリューム管理装置は、受信したリストア命令に応じて、仮想ボリュームに含まれ、プール領域が割り当てられていない初期状態でデータが書き込まれると、当該データが格納される前記プール領域が割り当てられる仮想領域であって、少なくとも所定時刻以後にデータが書き込まれた前記仮想領域において、当該仮想領域が前記所定時刻に前記初期状態であったか否かを特定する基準状態が、前記仮想領域が前記初期状態でなかったことを表す場合、前記仮想領域が前記所定時刻に記憶していたデータである保存データを記憶する保存ボリュームから前記保存データを読み出し、読み出された前記保存データを前記仮想領域に書き込み、前記基準状態が、前記仮想領域が前記初期状態であったことを表す場合、前記仮想領域に対する前記プール領域の割り当てを解除するリストア実行手段を含む。
【００２５】
本発明のボリューム管理方法は、受信したリストア命令に応じて、仮想ボリュームに含まれ、プール領域が割り当てられていない初期状態でデータが書き込まれると、当該データが格納される前記プール領域が割り当てられる仮想領域であって、少なくとも所定時刻以後にデータが書き込まれた前記仮想領域において、当該仮想領域が前記所定時刻に前記初期状態であったか否かを特定する基準状態が、前記仮想領域が前記初期状態でなかったことを表す場合、前記仮想領域が前記所定時刻に記憶していたデータである保存データを記憶する保存ボリュームから前記保存データを読み出し、読み出された前記保存データを前記仮想領域に書き込み、前記基準状態が、前記仮想領域が前記初期状態であったことを表す場合、前記仮想領域に対する前記プール領域の割り当てを解除する。
【００２６】
本発明のボリューム管理プログラムは、コンピュータを、受信したリストア命令に応じて、仮想ボリュームに含まれ、プール領域が割り当てられていない初期状態でデータが書き込まれると、当該データが格納される前記プール領域が割り当てられる仮想領域であって、少なくとも所定時刻以後にデータが書き込まれた前記仮想領域において、当該仮想領域が前記所定時刻に前記初期状態であったか否かを特定する基準状態が、前記仮想領域が前記初期状態でなかったことを表す場合、前記仮想領域が前記所定時刻に記憶していたデータである保存データを記憶する保存ボリュームから前記保存データを読み出し、読み出された前記保存データを前記仮想領域に書き込み、前記基準状態が、前記仮想領域が前記初期状態であったことを表す場合、前記仮想領域に対する前記プール領域の割り当てを解除するリストア実行手段として動作させる。
【発明の効果】
【００２７】
本発明には、クローンボリュームから作成されたスナップショットに基づく、クローンボリュームへのリストアにおいて、クローンボリュームの容量効率の悪化を軽減することができるという効果がある。
【図面の簡単な説明】
【００２８】
【図１】図１は、第１の実施形態のストレージシステム１００の構成を表すブロック図である。
【図２】図２は、第１の実施形態のストレージシステム１００の構成の他の例を表すブロック図である。
【図３】図３は、実領域と、仮想領域と、プール領域と、保存領域との関係を表すブロック図である。
【図４】図４は、ストレージ装置２の構成の例を表すブロック図である。
【図５】図５は、第１の実施形態に基づく構成例のボリューム管理装置１の構成を表すブロック図である。
【図６】図６は、テーブル記憶部１１３の構成を表すブロック図である。
【図７】図７は、ボリューム対応テーブル１０８例を表す図である。
【図８】図８は、クローンボリューム差分管理テーブル１０９の例を表す図である。
【図９】図９は、スナップショット差分管理テーブル１１０の例を表す図である。
【図１０】図１０は、リストア差分管理テーブル１１１の例を表す図である。
【図１１】図１１は、更新履歴テーブル１１２の例を表す図である。
【図１２】図１２は、第１の実施形態のボリューム管理装置１のコマンド処理部１０６が行う動作全体を表すフローチャートである。
【図１３】図１３は、第１の実施形態のボリューム管理装置１の、ライト処理の動作を表すフローチャートである。
【図１４】図１４は、第１の実施形態のボリューム管理装置１の、スナップショット処理の動作を表すフローチャートである。
【図１５】図１５は、第１の実施形態のボリューム管理装置１の、リストア開始処理の動作を表すフローチャートである。
【図１６】図１６は、ボリューム管理装置１のリストア処理部１０７が行う、リストア処理の動作を表すフローチャートである。
【図１７】図１７は、仮想領域に対するプール領域の割り当てを解除しない場合における、クローンボリュームとスナップショットボリュームの状態遷移を表す第１の図である。
【図１８】図１８は、仮想領域に対するプール領域の割り当てを解除しない場合における、クローンボリュームとスナップショットボリュームの状態遷移を表す第２の図である。
【図１９】図１９は、仮想領域に対するプール領域の割り当てを解除しない場合における、クローンボリュームとスナップショットボリュームの状態遷移を表す第３の図である。
【図２０】図２０は、仮想領域に対するプール領域の割り当てを解除しない場合における、クローンボリュームとスナップショットボリュームの状態遷移を表す第４の図である。
【図２１】図２１は、仮想領域に対するプール領域の割り当てを解除しない場合における、クローンボリュームとスナップショットボリュームの状態遷移を表す第５の図である。
【図２２】図２２は、第１の実施形態における、クローンボリュームとスナップショットボリュームの状態の遷移を表す第１の図である。
【図２３】図２３は、第１の実施形態に場合における、クローンボリュームとスナップショットボリュームの状態の遷移を表す第２の図である。
【図２４】図２４は、第１の実施形態における、クローンボリュームとスナップショットボリュームの状態の遷移を表す第３の図である。
【図２５】図２５は、第１の実施形態における、クローンボリュームとスナップショットボリュームの状態の遷移を表す第４の図である。
【図２６】図２６は、仮想領域に対するプール領域の割り当てを解除する場合における、クローンボリュームとスナップショットボリュームの状態の遷移を表す第５の図である。
【図２７】図２７は、仮想領域に対するプール領域の割り当てを解除しない場合における、クローンボリュームの状態の遷移を表す第１の図である。
【図２８】図２８は、仮想領域に対するプール領域の割り当てを解除しない場合における、クローンボリュームの状態の遷移を表す第２の図である。
【図２９】図２９は、仮想領域に対するプール領域の割り当てを解除しない場合における、クローンボリュームの状態の遷移を表す第３の図である。
【図３０】図３０は、第１の実施形態場合における、クローンボリュームの状態の遷移を表す第１の図である。
【図３１】図３１は、第１の実施形態場合における、クローンボリュームの状態の遷移を表す第２の図である。
【図３２】図３２は、第１の実施形態場合における、クローンボリュームの状態の遷移を表す第３の図である。
【図３３】図３３は、第２の実施形態のボリューム管理装置１Ａの構成を表すブロック図である。
【図３４】図３４は、第１の実施形態のボリューム管理装置１及び第２の実施形態のボリューム管理装置１Ａを実現するために使用される、コンピュータ１０００の構成の一例を表す図である。
【発明を実施するための形態】
【００２９】
次に、本発明の第１の実施の形態について図面を参照して詳細に説明する。
【００３０】
図１は、本実施形態のストレージシステム１００の構成を表すブロック図である。図１は、ストレージシステム１００の機能構成を表す図であり、ストレージシステム１００のハードウェア構成とは一致するとは限らない。
【００３１】
ストレージシステム１００は、ボリューム管理装置１と、ストレージ装置２を含む。ストレージシステム１００は、ホスト装置３と接続されている。ボリューム管理装置１とストレージ装置２は、同じ装置であってもよい。例えば、ボリューム管理装置１がストレージ装置２に含まれていてもよい。以下の説明において、ストレージシステム１００は、ディスクアレイサブシステムとも表記される。
【００３２】
ホスト装置３は、例えばコンピュータ装置である。ホスト装置３は、コンピュータ装置上に実現された仮想計算機であってもよい。複数のホスト装置３がストレージシステム１００に接続されていてもよい。
【００３３】
図２は、本実施形態のストレージシステム１００の構成の他の例を表すブロック図である。図２の例では、ボリューム管理装置１と、ストレージ装置２は、一つの装置であるディスクアレイサブシステム１００に含まれる。また、図２の例では、３台のホスト装置３がディスクアレイサブシステム１００に接続されている。
【００３４】
ボリューム管理装置１は、管理情報記憶部１０と、命令受信部１１と、基準状態記憶部１２と、リストア実行部１３と、スナップショット実行部１４と、ライト実行部１５と、スナップショット設定部１６と、ボリューム管理部１７と、割当状態記憶部１８と、保存状態記憶部１９と、対象情報記憶部２０とを含む。
【００３５】
ストレージ装置２は、コントローラ２５と、エンティティボリューム２１と、仮想ボリューム２２と、プールボリューム２３と、保存ボリューム２４Ａと、保存ボリューム２４Ｂとを含む。仮想ボリューム２２は、エンティティボリューム２１に関連付けられている。保存ボリューム２４Ａと保存ボリューム２４Ｂは、仮想ボリューム２２に関連付けられている。図１の例では、エンティティボリューム２１の数は１である。また、エンティティボリューム２１に関連付けられている仮想ボリューム２２の数は１個である。そして、仮想ボリューム２２に関連付けられている保存ボリュームの数は２個である。しかし、エンティティボリューム２１の数は２個以上であってもよい。また、一つのエンティティボリューム２１に関連付けられている仮想ボリューム２２の数は、２個以上であってもよい。さらに、一つの仮想ボリューム２２に関連付けられている保存ボリュームの数は、１個や３個以上であってもよい。
【００３６】
コントローラ２５は、１個又は複数のディスク装置に含まれる記憶領域を使用して、ホスト装置３等が、それぞれひとまとまりの記憶領域として扱える、各ボリュームを提供する。例えば、コントローラ２５は、ストレージ装置２に含まれるクローンボリューム２２や他のボリュームにデータを書き込む操作が行われた場合、そのデータを、そのボリュームの書き込み操作が行われた領域に使用されているディスク装置にデータを書き込む処理を行う。また、コントローラ２５は、ストレージ装置２に含まれるクローンボリューム２２や他のボリュームからデータを読み出す操作が行われた場合、そのボリュームの読み出し操作が行われた領域に使用されているディスク装置から、データを読み出す処理を行う。
【００３７】
エンティティボリューム２１は、１台以上のディスク装置によって実現される実ボリュームである。
【００３８】
プールボリューム２３は、１台以上のディスク装置によって実現される実ボリュームである。
【００３９】
本発明の各実施形態では、仮想ボリューム２２は、背景技術として記載されている上述のＬｉｎｋｅｄ  Ｃｌｏｎｅ技術によるクローンボリュームである。本発明の各実施形態の説明において、仮想ボリューム２２は、クローンボリューム２２とも表記される。
【００４０】
クローンボリューム２２や他のボリュームに対する、データの書き込みやデータの読み出しは、所定のサイズの領域単位で行われる。以下の説明において、クローンボリューム２２における、そのようなＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）処理単位の領域を、仮想領域と表記する。本発明の各実施形態の説明において、Ｉ／Ｏ処理の単位は、ページとも表記される。各仮想領域は、その仮想領域が含まれるクローンボリューム２２が関連付けられているエンティティボリューム２１が含む、いずれかの記憶領域に関連付けられている。以下の説明において、個々の仮想領域に関連付けられている、エンティティボリューム２１に含まれる記憶領域を、実領域と表記する。また、以下で説明するように、仮想領域にプールボリューム２３に含まれる記憶領域が割り当てられることがある。以下の説明において、仮想領域に割り当てられる、プールボリューム２３に含まれる記憶領域を、プール領域と表記する。
【００４１】
クローンボリューム２２に含まれる仮想領域に、その仮想領域に関連付けられている実領域に格納されているデータと異なるデータが格納される場合、その仮想領域に、プール領域が割り当てられる。そして、その仮想領域に関連付けられている実領域に格納されているデータと異なるデータは、その仮想領域に割り当てられたプール領域に格納される。
【００４２】
例えば、クローンボリューム２２にデータが書き込まれる場合、書き込み先の仮想領域にプール領域が割り当てられていれば、そのデータはそのプール領域に格納される。書き込み先の仮想領域にプール領域が割り当てられていない場合、その仮想領域に、プールボリューム２３が含む、いずれの仮想領域にも割り当てられていないプール領域が割り当てられる。そして、クローンボリューム２２に書き込まれるデータは、書き込み先の仮想領域に割り当てられたプール領域に格納される。この場合、例えば後述のライト実行部１５が、仮想領域へのプール領域の割り当てと、プール領域へのデータの格納の指示を、コントローラ２５に対してを行えばよい。そして、コントローラ２５が、仮想領域へのプール領域の割り当てと、プール領域へのデータの格納の指示を行えばよい。なお、ボリューム管理装置１とストレージ装置２が同一の装置であるなら、コントローラ２５がライト実行部１５として動作すればよい。そして、ライト実行部１５が、仮想領域へのプール領域の割り当てと、プール領域へのデータの格納を行ってもよい。本発明の各実施形態の説明では、ライト実行部１５が、コントローラ２５に仮想領域へのプール領域の割り当ての指示を行うことを、ライト実行部１５が仮想領域にプール領域の割り当てると表記する。また、ライト実行部１５が、コントローラ２５にプール領域へのデータの格納の指示を行うことを、ライト実行部１５がプール領域にデータを格納すると表記する。
【００４３】
仮想領域からデータが読み出される場合、その仮想領域にプール領域が割り当てられていれば、そのプール領域に格納されているデータが読み出される。仮想領域からデータが読み出される場合、その仮想領域にプール領域が割り当てられていなければ、その仮想領域と関連付けられている実領域から、データが読み出される。この場合、例えば図示されないリード実行部が、仮想領域からデータを読み出す指示を、コントローラ２５に対して行えばよい。そして、コントローラ２５が、データの読み出しと読み出されたデータのリード実行部への送信を行えばよい。なお、ボリューム管理装置１とストレージ装置２が同一の装置であるなら、コントローラ２５がリード実行部として動作すればよい。そして、リード実行部がデータの読み出しを行えばよい。
【００４４】
いずれかの仮想領域格納されるデータが、その仮想領域に関連付けられている実領域に格納されているデータと異なるクローンボリューム２２が作成されるのであれば、クローンボリューム２２が作成される際にその仮想領域にプール領域が割り当てられる。その場合、例えば後述のボリューム管理部１７が、コントローラ２５に対して、一部の仮想領域にプール領域が割り当てられたクローンボリューム２２を作成する指示と、プール領域にデータを格納する指示を送信すればよい。そして、コントローラ２５が、一部の仮想領域にプール領域が割り当てられたクローンボリューム２２の作成と、プール領域へのデータの格納を行えばよい。なお、ボリューム管理装置１とストレージ装置２が同一の装置であるなら、コントローラ２５がボリューム管理部１７として動作すればよい。そして、ボリューム管理部１７が、一部の仮想領域にプール領域が割り当てられたクローンボリューム２２の作成と、プール領域へのデータの格納を行えばよい。
【００４５】
保存ボリューム２４Ａおよび保存ボリューム２５Ｂは、例えばコピーオンライト方式によって作成される、クローンボリューム２２のスナップショットのイメージが格納されるスナップショットボリュームである。保存ボリューム２４Ａおよび保存ボリューム２５Ｂに格納されるスナップショットのイメージは、スナップショットを作成する他の方式によって作成されるスナップショットのイメージであってもよい。本発明の各実施形態の説明において、保存ボリューム２４Ａ及び保存ボリューム２４Ｂは、それぞれ、スナップショットボリューム２４Ａ及びスナップショットボリューム２４Ｂとも表記される。
【００４６】
それぞれのスナップショットボリュームには、それぞれ異なる時刻におけるスナップショットのイメージが格納される。スナップショットのイメージは、例えば、そのスナップショットのイメージが格納されているスナップショットボリュームに関連付けられているクローンボリューム２２に、ある時刻において格納されていたデータを復元可能なデータである。本発明の各実施形態の説明において、その時刻は、スナップショットの基準時刻とも表記される。本実施形態では、各スナップショットボリュームに、一つのスナップショットのイメージが格納される。従って、スナップショットボリュームにイメージが格納されているスナップショットの基準時刻は、そのスナップショットボリュームに付与されていると見なすこともできる。スナップショットのイメージを使用して、あるスナップショットの基準時刻におけるクローンボリューム２２に格納されていたデータを復元する場合、そのスナップショットのイメージが使用される。複数のスナップショットのイメージが作成されている場合、あるスナップショットの基準時刻におけるクローンボリューム２２に格納されていたデータを復元するために、複数のスナップショットのイメージが使用されてもよい。
【００４７】
本実施形態のスナップショットのイメージは、例えば、そのスナップショットの基準時刻から、次に新しい他のスナップショットの基準時刻までの間に、データが書き込まれた各仮想領域に、そのスナップショットの基準時刻に格納されていたデータである。各仮想領域には、各スナップショットボリュームに含まれる記憶領域が関連付けられている。以下の説明において、各スナップショットボリュームに含まれる記憶領域は、保存領域とも表記される。各仮想領域に格納されていたデータは、その仮想領域に関連付けられている保存領域に格納される。なお、本発明の各実施形態の説明において、仮想領域にプール領域が割り当てられている場合、その仮想領域に格納されているデータは、その仮想領域に割り当てられているプール領域に格納されているデータを指す。さらに、仮想領域にプール領域が割り当てられていない場合、その仮想領域に格納されているデータは、その仮想領域に関連付けられている実領域に格納されているデータを指す。また、スナップショットボリュームにイメージが格納されているスナップショットが作成されてから、次のスナップショットが作成されるまでの期間は、そのスナップショットボリュームの保存期間とも表記される。
【００４８】
スナップショットボリューム２４Ａ及びスナップショットボリューム２４Ｂは、それぞれ、実ボリュームであっても、仮想ボリュームであってもよい。スナップショットボリューム２４Ａ及びスナップショットボリューム２４Ｂが仮想ボリュームである場合、プールボリューム２３に含まれる記憶領域が、スナップショットボリューム２４Ａ及びスナップショットボリューム２４Ｂに割り当てられればよい。例えば、スナップショット設定部１６あるいはコントローラ２５が、スナップショットボリューム２４Ａ及びスナップショットボリューム２４Ｂに、プールボリューム２３に含まれる記憶領域を割り当てればよい。
【００４９】
図４は、ストレージ装置２の構成の例を表すブロック図である。図４の例では、１個のエンティティボリュームに３個のクローンボリューム２２が関連付けられている。また、それぞれのクローンボリューム２２に、２個のスナップショットボリュームが関連付けられている。
【００５０】
管理情報記憶部１０は、クローンボリューム２２とスナップショットボリュームの関係を表すデータを含む、後述されるボリューム対応テーブルを記憶する。
【００５１】
命令受信部１１は、ホスト装置３から、ライト命令、スナップショット作成命令、及びリストア命令を受信する。
【００５２】
ライト命令は、クローンボリューム２２に含まれるいずれかの仮想領域にデータを書き込む指示を表す命令である。ライト命令は、書き込まれるデータである更新データと、データが書き込まれる仮想領域のアドレスなどの識別子とを含んでいればよい。命令受信部１１は、受信したライト命令を、スナップショット実行部１４に送信する。
【００５３】
スナップショット作成命令は、新しくスナップショットボリュームを追加し、追加されたスナップショットボリュームにスナップショットのイメージを作成するための設定を行う指示を表す命令である。以下の説明において、スナップショットボリュームにスナップショットのイメージを作成するための設定は、スナップショットの設定とも表記される。命令受信部１１は、受信したスナップショット作成命令を、ボリューム管理装置１７に送信する。
【００５４】
リストア命令は、スナップショットボリュームに含まれるスナップショットを使用して、クローンボリューム２２の状態を、そのスナップショットの基準時刻におけるクローンボリューム２２の状態に戻す操作である、リストアを指示する命令である。本発明の各実施形態の説明において、リストアにおいて使用されるスナップショットが格納されるスナップショットボリュームは、リストア対象スナップショットボリュームとも表記される。すなわち、リストアによって、クローンボリューム２２の状態は、リストア対象スナップショットボリュームに格納されているスナップショットの基準時刻におけるクローンボリューム２２の状態に戻される。複数のスナップショットボリュームが存在する場合、リストア命令は、リストア対象スナップショットボリュームのボリューム識別子を含んでいてもよい。ボリューム識別子は、スナップショットボリュームの識別子である。命令受信部１１は、受信したリストア命令を、リストア実行部１３に送信する。
【００５５】
命令受信部１１は、例えば、クローンボリューム２２からデータを読み出す指示を表すリード命令等、他の命令を受信してもよい。
【００５６】
基準状態記憶部１２は、それぞれのスナップショットボリュームに対して、例えばスナップショットボリュームのボリューム識別子に関連付けて、基準状態を記憶する。基準状態は、スナップショットボリュームに格納されるスナップショットが作成されたとき、仮想領域が、プール領域が割り当てられていない状態である初期状態であったか否かを特定するデータである。基準状態は、それぞれのスナップショットボリュームに対して、そのスナップショットボリュームに格納されるスナップショットの保存期間にデータが書き込まれたそれぞれの仮想領域が初期状態であったか否かを特定するデータであればよい。基準状態は、例えば、各仮想領域に対して、仮想領域の識別子に関連付けられた、仮想領域が初期状態でなかったことを表す値又は仮想領域が初期状態であったことを表す値である。仮想領域の識別子は、例えば、仮想領域のアドレスである。仮想領域が初期状態であったか否かを表す値は、仮想領域にプール領域が割り当てられているか否かを特定する値と言い換えることができる。保存期間は、上述のように、そのスナップショットボリュームに格納されるスナップショットが作成されてから、次のスナップショットが作成されるまでの期間である。最新のスナップショットが格納されているスナップショットボリュームの保存期間は、そのスナップショットが作成された時点以後の期間である。
【００５７】
基準状態記憶部１２は、基準状態を、後述される更新履歴テーブルとして、テーブルの形で記憶していてもよい。
【００５８】
割当状態記憶部１８は、仮想領域にプール領域が割り当てられているか否かを表す割当状態を、仮想領域毎に記憶する。割当状態記憶部１８は、仮想領域の割当状態を、その仮想領域の識別子に関連付けて記憶していればよい。割当状態は、例えば、仮想領域にプール領域が割り当てられているか否かを特定する値である。
【００５９】
割当状態記憶部１８は、割当状態を、後述されるクローンボリューム差分管理テーブルとして、テーブルの形で記憶していてもよい。
【００６０】
スナップショット設定部１６は、命令受信部１１がスナップショット作成命令を受信すると、新しくスナップショットボリュームを追加する。その際、スナップショット設定部１６は、まず、使用されていないボリュームを、新しく追加されるスナップショットボリュームとして選択する。選択されるボリュームは、既存のボリュームであってもよい。選択されるボリュームは、新しく作成されたボリュームであってもよい。スナップショット設定部１６が、新しく作成されたボリュームを選択する場合、例えばボリューム管理部１７がそのボリュームを作成すればよい。そして、スナップショット設定部１６は、例えば、後述されるボリューム対応テーブルに、クローンボリューム２２の識別子と、追加されるスナップショットボリュームの識別子を追加してもよい。
【００６１】
そして、スナップショット設定部１６は、追加されたスナップショットボリュームの基準状態を、そのスナップショットボリュームのボリューム識別子に関連付けて、基準状態記憶部１２に格納する。その際、スナップショット設定部１６は、まず、各仮想領域の割当状態を割当状態記憶部１８から読み出せばよい。そして、スナップショット設定部１６は、読み出された割当状態を、追加されたスナップショットボリュームの基準状態として、基準状態記憶部１２に格納すればよい。スナップショット設定部１６は、例えば、後述されるクローンボリューム差分管理テーブルの形で記憶される割当状態を、追加されたスナップショットボリュームに関連付けられた更新履歴テーブルの形で記憶される基準状態として基準状態記憶部１２にコピーしてもよい。
【００６２】
スナップショット設定部１６が、追加されたスナップショットボリュームの基準状態を、そのスナップショットボリュームのボリューム識別子に関連付けて、基準状態記憶部１２に格納することにより、基準状態を格納した時刻が定まる。このことは、スナップショット設定部１６が、基準状態を格納した時刻を、追加されたスナップショットボリュームに付与すると見なすこともできる。本発明の各実施形態では、基準状態を格納した時刻が基準時刻であってもよい。
【００６３】
スナップショットの設定は、例えば、上述された、スナップショットボリュームの追加と、追加されたスナップショットボリュームに関連付けられた基準状態の格納を表していてもよい。上述のように追加されたスナップショットボリュームに関連付けられた基準状態の格納は、クローンボリューム差分管理テーブルをコピーすることによって更新履歴テーブルを作成することであってもよい。スナップショットの設定は、さらに、追加されたスナップショットボリュームのため、後述されるスナップショット差分管理テーブルを作成することを含んでいてもよい。スナップショットの設定は、スナップショットボリュームに含まれる各保存領域を初期化することを含んでいてもよい。
【００６４】
保存状態記憶部１９は、スナップショットボリュームの各保存領域に、保存データが格納されているか否かを特定する保存状態を、スナップショットボリューム毎に記憶する。保存状態は、例えば、スナップショットボリュームに含まれる保存領域の各々に対する、保存領域に関連付けられた、保存データが格納されているか否かを特定する値である。保存データが格納されているか否かを特定する値は、保存領域の識別子に関連付けられていればよい。保存領域の識別子は、例えば、保存領域のアドレスである。保存データが格納されているか否かを特定する値は、保存領域に関連付けられた仮想領域の識別子に関連付けられていればよい。スナップショットボリューム毎の保存状態は、スナップショットボリュームに関連付けられていればよい。すなわち、スナップショットボリューム毎の保存状態は、スナップショットボリュームのボリューム識別子に関連付けられていてもよい。
【００６５】
保存状態記憶部１９は、保存状態を、後述されるスナップショット差分管理テーブルとして、テーブルの形で記憶していてもよい。
【００６６】
スナップショット実行部１４は、命令受信部１１がライト命令を受信すると、ライト命令によってデータが書き込まれる仮想領域を特定する。スナップショット実行部１４は、最も新しいスナップショットが格納されているスナップショットボリュームの、特定された仮想領域に関連付けられている保存領域に、データが格納されているか否かを判定する。仮想領域に関連付けられている保存領域に格納されているデータは、そのスナップショットボリュームに格納されるスナップショットが作成された時点において、そのスナップショットが作成された後更新された仮想領域に格納されていたデータである。本発明の各実施形態の説明において、スナップショットボリュームに格納されているデータは、保存データとも表記される。保存データが格納されていなければ、スナップショット実行部１４は、特定された仮想領域に格納されているデータを、その仮想領域に関連付けられている保存領域に、保存データとして格納する。保存データが格納されていれば、スナップショット実行部１４は、特定された仮想領域に関連付けられている保存領域に、データを格納しない。
【００６７】
スナップショット実行部１４は、特定された仮想領域に関連付けられている保存領域に保存データが格納されているか否かを、後述されるスナップショット差分管理テーブルに基づいて判定してもよい。
【００６８】
ライト実行部１５は、命令受信部１１がライト命令を受信すると、ライト命令による更新の対象である仮想領域にプール領域が割り当てられているか否かを、その仮想領域に関連付けられた、前述の割当状態に基づき検出する。ライト命令による更新の対象である仮想領域にプール領域が割り当てられている場合、ライト実行部１５は、その仮想領域に関連付けられた割当状態を変更しない。そして、ライト実行部１５は、ライト命令による更新の対象である仮想領域に、ライト命令に含まれる更新データを書き込む。前述のように、仮想領域に書き込まれたデータは、その仮想領域に割り当てられたプール領域に格納される。ライト命令による更新の対象である仮想領域にプール領域が割り当てられていない場合、ライト実行部１５は、プールボリューム２３に含まれる、使用されていないプール領域を、仮想領域に割り当てる。仮想領域に割り当てられるプール領域の選択は、コントローラ２５によって行われてもよい。ライト実行部１５が、仮想領域に割り当てるプール領域を選択してもよい。そして、ライト実行部１５は、プール領域を割り当てた仮想領域に関連付けられている割当状態を、その割当状態が仮想領域にプール領域が割り当てられていることを表すよう、変更する。さらに、ライト実行部１５は、ライト命令による更新の対象である仮想領域に、ライト命令に含まれる更新データを書き込む。
【００６９】
前述のように、割当状態は、後述されるクローンボリューム差分管理テーブルとして、テーブルの形で割当状態記憶部１８に格納されていてもよい。
【００７０】
図３は、以上で説明した、実領域と、仮想領域と、プール領域と、保存領域との関係を表すブロック図である。図３には、スナップショット実行部１４及びライト実行部１５によって行われる動作の一部も含まれる。図３によると、実領域１は、仮想領域１に関連付けられている。実領域２は、仮想領域２に関連付けられている。実領域Ｎは、仮想領域Ｎに関連付けられている。仮想領域２は、保存領域２Ａに関連付けられている。最初の状態では、スナップショットボリューム２４Ｂは存在せず、仮想領域２は、保存領域２Ｂに関連付けられていないものとする。
【００７１】
いずれの仮想領域にも一度もデータの書き込みが発生していない場合、仮想領域から読み出されるデータは、その仮想領域に関連付けられている実領域に格納されているデータである。この場合、スナップショットボリューム２４Ａに関連付けられている基準時刻において、仮想領域２に格納されているデータは、仮想領域２に関連付けられている実領域２に格納されているデータであると見なすことができる。例えば仮想領域２に対する、最初のデータの書き込みが発生した場合、実領域２に格納されているデータが、保存データとして、保存領域２Ａにコピーされる。そして、仮想領域２に、例えばプール領域１が割り当てられる。仮想領域２に書き込まれたデータは、プール領域１に格納される。
【００７２】
この状態では、スナップショットボリューム２４Ａに関連付けられている基準時刻において、仮想領域２に格納されているデータは、保存領域２に格納されている。したがって、仮想領域２にさらに別の書き込みが発生した場合、仮想領域２から保存領域２Ａへのコピーは行われない。
【００７３】
次のスナップショットボリューム２が追加された場合、仮想領域２に、例えば保存領域２が新たに関連付けられる。この状態において、スナップショットボリューム２４Ｂに関連付けられている基準時刻において、仮想領域２に格納されているデータは、仮想領域２に割り当てられているプール領域１に格納されているデータである。そして、仮想領域２にさらにデータの書き込みが発生した場合、プール領域１格納されているデータが、保存データとして、保存領域２Ｂにコピーされる。
【００７４】
リストア実行部１３は、命令受信部１１がリストア命令を受信すると、そのリストア命令にボリューム識別子が含まれるスナップショットボリュームに付与された基準時刻以後に、更新が行われた仮想領域を特定する。以下の説明では、受信されたリストア命令にボリューム識別子が含まれるスナップショットボリュームは、リストア対象スナップショットボリュームとも表記される。リストア実行部１３は、例えば、まず、リストア対象スナップショットボリュームと、そのスナップショットボリュームより上位のスナップショットボリュームの、スナップショット差分管理テーブルに基づき、リストア差分管理テーブルを作成すればよい。リストア実行部１３は、作成されたリストア差分管理テーブルを、対象情報記憶部２０に格納する。リストア実行部１３は、作成されたリストア差分管理テーブルに基づき、リストア対象スナップショットボリュームに付与された基準時刻以後に、更新が行われた仮想領域を特定すればよい。あるスナップショットボリュームより上位のスナップショットボリュームは、あるスナップショットボリュームの基準時刻より後の基準時刻が付与されているスナップショットボリュームを意味する。リストア差分管理テーブルは、リストア対象スナップショットボリュームに付与された基準時刻以後に更新された仮想領域を表すデータを含む。リストア差分管理テーブル及びリストア差分管理テーブルの作成方法は、後述される。以下の説明において、リストア対象スナップショットボリュームに付与された基準時刻以後に更新が行われた仮想領域を、更新仮想領域と表記する。
【００７５】
次に、リストア実行部１３は、リストア対象スナップショットボリュームに付与された基準時刻において、各更新仮想領域にプール領域が割り当てられていたか否かを判定する。すなわち、リストア実行部１３は、リストア対象スナップショットボリュームに付与された基準時刻において、各更新仮想領域が初期状態であったか否かを判定する。リストア実行部１３は、リストア対象スナップショットボリュームのボリューム識別子に関連付けられている基準状態に基づき、各更新仮想領域が初期状態であったか否かを判定すればよい。更新履歴テーブルの形で基準状態が格納されているのであれば、リストア実行部１３は、リストア対象スナップショットボリュームのボリューム識別子に関連付けられている更新履歴テーブルに基づき、各更新仮想領域が初期状態であったか否かを判定すればよい。
【００７６】
更新仮想領域にリストア対象スナップショットボリュームに付与された基準時刻においてプール領域が割り当てられていた場合、リストア実行部１３は、リストア対象スナップショットボリューム格納されている保存データを、更新仮想領域に書き込む。この保存データは、リストア対象スナップショットボリュームに付与された基準時刻において、更新仮想領域に格納されていたデータである。すなわち、この保存データは、リストア対象スナップショットボリュームに付与された基準時刻において、更新仮想領域に割り当てられているプール領域に格納されていたデータである。更新仮想領域にリストア対象スナップショットボリュームに付与された基準時刻においてプール領域が割り当てられていなかった場合、リストア実行部１３は、更新仮想領域へのプール領域の割り当てを解除する。
【００７７】
対象情報記憶部２０は、上述のリストア差分管理テーブルを記憶する。リストア差分管理テーブルについては、後で詳細に説明する。
【００７８】
次に、第１の実施形態に基づくストレージシステム１００の構成例について、詳細に説明する。本構成例におけるストレージシステム１００の構成は、図２に示すストレージシステム１００の構成と同じである。
【００７９】
図５は、本構成例のボリューム管理装置１の構成を表すブロック図である。
【００８０】
図５を参照すると、本構成例のボリューム管理装置１は、コマンド処理部１０６と、リストア処理部１０７と、管理情報記憶部１０と、割当状態記憶部１８と、保存状態記憶部１９と、対象情報記憶部２０と、基準状態記憶部１２とを含む。また、管理情報記憶部１０と、割当状態記憶部１８と、保存状態記憶部１９と、対象情報記憶部２０と、基準状態記憶部１２は、まとめてテーブル記憶部１１３と表記される。
【００８１】
コマンド処理部１０６は、命令受信部１１と、スナップショット作成命令実行部１０６２と、リストア命令実行部１０６３と、ライト命令実行部１０６４とを含む。命令受信部１１は、コマンド判別部１０６１を含む。スナップショット作成命令実行部１０６２は、スナップショット作成部１０６２１と、更新履歴テーブル作成部１０６２２とを含む。スナップショット作成部１０６２１は、上述のボリューム管理部１７として機能する。更新履歴テーブル作成部１０６２２は、上述のスナップショット設定部１６として機能する。ライト命令実行部１０６４は、上述の、スナップショット実行部１４及びライト実行部１５の機能を含む。
【００８２】
リストア処理部１０７は、リストアボリューム検索部１０７１と、リストアアドレス検索部１０７２と、データコピー有無判定部１０７３と、リストアデータコピー部１０７４と、ＣＶ（Ｃｌｏｎｅ  Ｖｏｌｕｍｅ）参照元変更部１０７５とを含む。
【００８３】
リストア命令実行部１０６３と、リストア処理部１０７が、上述のリストア実行部１３として機能する。
【００８４】
図６は、テーブル記憶部１１３の構成を表すブロック図である。上述のテーブル記憶部１１３は、管理情報記憶部１０と、割当状態記憶部１８と、保存状態記憶部１９と、対象情報記憶部２０と、基準状態記憶部１２を含む。管理情報記憶部１０は、ボリューム対応テーブル１０８を記憶する。割当状態記憶部１８は、クローンボリューム差分管理テーブル１０９を記憶する。保存状態記憶部１９は、スナップショット差分管理テーブル１１０を記憶する。対象情報記憶部２０は、リストア差分管理テーブル１１１を記憶する。基準状態記憶部１２は、更新履歴テーブル１１２を記憶する。
【００８５】
管理情報記憶部１０と、割当状態記憶部１８と、保存状態記憶部１９と、対象情報記憶部２０と、基準状態記憶部１２の一部又は全部が、ストレージ装置２に含まれていてもよい。
【００８６】
ボリューム対応テーブル１０８は、スナップショット複製中のクローンボリューム２２と、そのクローンボリューム２２に関連付けられたスナップショットボリュームの関係と、リストア処理中のボリュームを特定する情報を含むテーブルである。スナップショット複製中は、クローンボリューム２２にデータの書き込みが発生した場合、関連付けられたスナップショットボリュームに格納されているスナップショットのイメージが、上述のように更新される状態を表す。
【００８７】
図７は、ボリューム対応テーブル１０８の例を表す図である。クローンボリューム番号は、クローンボリュームのボリューム番号である。本実施形態において、ボリューム番号がボリュームの識別子である。第１世代のスナップショットボリュームは、最も新しいスナップショットボリュームである。第２世代のスナップショットボリュームは、次に新しいスナップショットボリュームである。本実施形態では、リストアはバックグラウンド処理として行われる。リストア状態は、リストア処理中であるか否かを表す値である。「なし」はリストア処理中でないことを表す値である。「リストア中」はリストア処理中であることを表す値である。これらの値は、数値や他の値で表現されていてもよい。スナップショットボリュームのボリューム番号及びリストア状態が「−」であるクローンボリュームは、スナップショット複製中でないことを表す。例えば、クローンボリュームのボリューム番号がＣＶ０である列において、第１世代のスナップショットボリュームのボリューム番号ＳＶ００に対するリストア状態は「なし」である。同じ列の、第２世代のスナップショットボリュームのボリューム番号ＳＶ０１に対するリストア状態は「リストア中」である。この行は、ボリューム番号がＣＶ０であるクローンボリュームに対して、ボリューム番号がＳＶ０１であるスナップショットボリュームに対応付けられている基準時刻における状態に戻す、リストア処理中であることを表している。
【００８８】
クローンボリューム差分管理テーブル１０９は、クローンボリューム２２にデータが存在するかどうかを、クローンボリューム２２のＩ／Ｏ処理単位で表す値を含むテーブルである。その値は、０か１の値を取るフラグによって表されていてもよい。前述のように、本実施形態の説明では、Ｉ／Ｏ処理単位は、ページ単位と表記される。一つのページが、上述の仮想領域である。「クローンボリューム２２のページにデータが存在する」は、そのページすなわち仮想領域にプール領域が割り当てられ、そのプール領域にデータが格納されていることを表す。
【００８９】
図８は、クローンボリューム差分管理テーブル１０９の例を表す図である。図８から図１１までの図において、領域のアドレスはページ番号によって表されている。図８におけるページ番号は、クローンボリューム２２におけるページ番号である。すなわち、図８におけるページ番号は、仮想領域の識別子に相当する。なお、本実施形態では、互いに関連付けられている実領域と仮想領域のページ番号は同じである。同様に、互いに関連付けられている仮想領域及び保存領域のページ番号は同じである。図８のクローンボリューム差分管理テーブル１０９における各列は、その列のボリューム番号で表されるクローンボリュームの、各行のページ番号によって特定されるページに、実データが存在するか否かを表す。クローンボリューム差分管理テーブル１０９における第ｎ行第ｍ列の値が、第ｍ列におけるボリューム番号によって特定されるクローンボリュームにおける、第ｎ行におけるページ番号によって特定される仮想領域の、上述の割当状態である。
【００９０】
図８における「１」は、ページに実データが存在することを表す。すなわち、「１」は、仮想領域にプール領域が割り当てられ、そのプール領域にデータが格納されていることを表す。また、「０」は、ページに実データが存在しないことを表す。すなわち、「０」は、仮想領域にプール領域が割り当てられておらず、その仮想領域からデータが読み出される場合、その仮想領域に関連付けられた実領域からデータが読み出されることを表す。図８において、「−」は、クローンボリュームがエンティティボリュームに関連付けられていないことを表す。
【００９１】
図８において、例えば、ボリューム番号がＣＶ０であるクローンボリュームの、ページ番号がｐａｇｅ２であるページのフラグは１である。従って、このページには、実データが存在する。同じクローンボリュームのページ番号がｐａｇｅ３であるページのフラグは０である。従って、このページには、実データが存在しない。このページからデータが読み出される場合、エンティティボリュームのページ番号がｐａｇｅ３であるページが参照される。すなわち、このページからデータが読み出される場合、エンティティボリュームのページ番号がｐａｇｅ３であるページからデータが読み出される。
【００９２】
スナップショット差分管理テーブル１１０は、スナップショットボリュームにデータが存在するかどうかを、ページ単位で表す値を含むテーブルである。その値は、０か１の値を取るフラグによって表されていてもよい。
【００９３】
図９は、スナップショット差分管理テーブル１１０の例を表す図である。図９のページ番号は、スナップショットボリュームに含まれるページのページ番号である。スナップショットボリュームに含まれるページは、上述の保存領域である。保存領域に格納されるデータは、上述の保存データである。保存領域のページ番号は、その保存領域に関連付けられている仮想領域のページ番号と同じである。図９に示すスナップショット差分管理テーブル１１０の各行は、その行のボリューム番号で表されるスナップショットボリュームの、各行のページ番号で表されるページにデータが存在するかどうかを表す。図９に示す例において、「１」はデータが存在することを表す。「０」はデータが存在しないことを表す。図９に示す例では、ボリューム番号がＳＶ０１であるスナップショットボリュームに含まれる、ページ番号がｐａｇｅ０であるページには、データが存在しない。また、ボリューム番号がＳＶ０１であるスナップショットボリュームに含まれる、ページ番号がｐａｇｅ１であるページには、データが存在する。スナップショット差分管理テーブル１１０の第ｎ行第ｍ列における値が、第ｍ列におけるボリューム番号によって特定されるスナップショットボリュームにおける、第ｎ行におけるページ番号で特定される保存領域の、上述の保存状態である。
【００９４】
リストア差分管理テーブル１１１は、リストア処理中のスナップショットボリュームに対して、リストアが必要であるか否かを、ページ単位で表す値を含むテーブルである。その値は、０か１の値を取るフラグによって表されていてもよい。例えばリストア実行部１３が、リストア開始時に、リストア対象スナップショットボリュームとそのリストア対象スナップショットボリュームの上位のスナップショットボリュームのスナップショット差分管理テーブル１１０に基づき、リストア差分管理テーブル１１１を生成する。スナップショット差分管理テーブル１１０に含まれる値が、上述される０か１であるなら、リストア実行部１３は、リストア対象スナップショットボリュームと上位のスナップショットボリュームのスナップショット差分管理テーブル１１０の論理和をとることによって、リストア差分管理テーブル１１１を作成すればよい。なお、リストア対象スナップショットボリュームの上位のスナップショットボリュームは、そのリストア対象スナップショットボリュームより新しいスナップショットボリュームである。すなわち、リストア対象スナップショットボリュームの上位のスナップショットボリュームは、そのリストア対象スナップショットボリュームに付与された基準時刻より新しい基準時刻が付与されたスナップショットボリュームである。
【００９５】
図１０は、リストア差分管理テーブル１１１の例を表す図である。図１０は、ボリューム番号がＳＶ０１であるスナップショットボリュームに基づくリストアにおいて、各行におけるページ番号で表されるページが、リストアが必要であるかどうかを表す。値が「０」である行におけるページ番号で表されるページは、リストアが必要でないことを表す。値が「１」である行におけるページ番号で表されるページは、リストアが必要であることを表す。図１０に示す例は、ページ番号がｐａｇｅ１であるページは、リストアが必要である。
【００９６】
更新履歴テーブル１１２は、スナップショットボリュームに付与された基準時刻における、そのスナップショットボリュームのペアであるクローンボリュームの差分配置を表すテーブルである。基準時刻は、例えば、スナップショットボリューム作成時である。スナップショットボリュームのペアのクローンボリュームは、そのスナップショットボリュームに関連付けられているクローンボリューム２２である。差分配置は、クローンボリュームにおける、プール領域が割り当てられているページと、プール領域が割り当てられていないページとを特定する情報である。差分配置は、例えば、スナップショットボリューム毎の、それぞれのページにおける、ページ番号に関連付けられた、プール領域が割り当てられていることを表す値又はプール領域が割り当てられていないことを表す値である。その値は、０又は１の値を取るフラグによって表されていてもよい。例えばスナップショット設定部１６が、スナップショットボリューム作成時に、そのスナップショットボリュームのペアであるクローンボリュームの差分管理テーブルをコピーすることによって、更新履歴テーブル１１２を作成する。リストア実行部１３が、リストアを行う際に、クローンボリュームへのデータコピーが必要か、もしくはデータコピーせずにエンティティボリューム参照状態に戻すかを判定するために、更新履歴テーブル１１２を使用する。
【００９７】
図１１は、更新履歴テーブル１１２の例を表す図である。図１１に示す更新履歴テーブル１１２の各列は、その列におけるボリューム番号で表されるスナップショットボリュームからリストアを行う際に、各行におけるページ番号で表されるページにおいてデータのコピーを行うか否かを表す。図１１に示す例では、ある列において値が「０」である行は、その列におけるボリューム番号で表されるスナップショットボリュームからリストアを行う際に、その行におけるページ番号で表されるページでは、データのコピーを行わないことを表す。また、ある列において値が「１」である行は、その列におけるボリューム番号で表されるスナップショットボリュームからリストアを行う際に、その行におけるページ番号で表されるページでは、データのコピーを行うことを表す。データのコピーは、値が「１」である行におけるページ番号を持つスナップショットボリュームのページから、同じページ番号を持つクローンボリューム２２のページに対して行われる。更新履歴テーブル１１２における第ｎ行第ｍ列の値が、第ｍ列において示されるボリューム番号によって特定されるスナップショットボリュームにおける、第ｎ行において示されるページ番号によって特定される仮想領域の、上述の基準状態である。
【００９８】
例えば、ボリューム番号がＳＶ０１である列において、ページ番号がｐａｇｅ３である行は、フラグが１である。従って、ボリューム番号がＳＶ０１であるスナップショットボリュームからクローンボリューム２２にリストアを行う際、ページ番号がｐａｇｅ３であるページにおいて、データのコピーが行われる。一方、ボリューム番号がＳＶ０１である列において、ページ番号がｐａｇｅ０である行は、フラグが１である。従って、ボリューム番号がＳＶ０１であるスナップショットボリュームからクローンボリューム２２にリストアを行う際、ページ番号がｐａｇｅ０であるページにおいて、データのコピーは行われない。リストアの際、クローンボリューム２２のページ番号がｐａｇｅ０であるページに対するプール領域の割り当ては解除される。すなわち、クローンボリューム２２のページ番号がｐａｇｅ０であるページは、エンティティボリュームを参照する状態に変更される。言い換えると、クローンボリューム２２のページ番号がｐａｇｅ０であるページからデータを読み出すと、そのページに関連付けられているエンティティボリュームのページからデータが読み出される。
【００９９】
コマンド処理部１０６は、ホスト装置３から命令を受信し、上述されるコマンド処理が完了するとレスポンスを返却する。例えば命令受信部１１が、命令の受信とレスポンスの返却を行う。命令受信部１１が受信したコマンドは、コマンド判別部１０６１に渡される。
【０１００】
コマンド判別部１０６１は、ホスト装置３から受信した命令の種類を判別する。
【０１０１】
スナップショット作成命令実行部１０６２は、コマンド判別部１０６１がスナップショット作成命令を受信すると、スナップショット作成命令処理を実行する。スナップショット作成部１０６２１は、スナップショット作成対象のクローンボリューム２２と、スナップショットボリュームとを関連付ける値を、ボリューム対応テーブル１０８に追加する。スナップショット作成対象のクローンボリューム２２は、スナップショットのイメージが作成されるクローンボリューム２２である。そして、スナップショット作成部１０６２１は、スナップショット差分管理テーブル１１０を作成する。続いて、更新履歴テーブル作成部１０６２２は、クローンボリューム差分管理テーブル１０９をコピーすることによって、更新履歴テーブル１１２を作成する。
【０１０２】
リストア命令実行部１０６３は、コマンド判別部１０６１がリストア命令を受信すると、リストア差分管理テーブル１１１を作成する。リストア命令実行部１０６３は、リストア対象スナップショットボリュームと、そのリストア対象スナップショットボリュームの上位世代のスナップショットボリュームの、スナップショット差分管理テーブル１１０に含まれる各値の論理和をとることによって、リストア差分管理テーブル１１１を作成する。そして、リストア命令実行部１０６３は、ボリューム対応テーブル１０８のリストア対象スナップショットボリュームの状態を、リストア処理中に設定する。なお、リストア命令は、リストアが行われるクローンボリューム２２のボリューム番号と、リストア対象スナップショットボリュームのボリューム番号を含む。
【０１０３】
ライト命令実行部１０６４は、コマンド判別部１０６１がスナップショット複製中のクローンボリューム２２へのライト命令を受信すると、スナップショットボリュームへの追い出しコピーの処理とクローンボリューム２２へのライト処理とを実施する。追い出しコピーの処理は、ライト命令によってデータが書き込まれるクローンボリューム２２のページの上述の保存データが、スナップショットボリュームに格納されていない場合、そのページに格納されているデータを、スナップショットボリュームにコピーする処理である。ライト処理は、ライト命令に従って、クローンボリューム２２にデータを書き込む処理である。
【０１０４】
リストア処理部１０７は、上述のように、リストアボリューム検索部１０７１と、リストアアドレス検索部１０７２と、データコピー有無判定部１０７３と、リストアデータコピー部１０７４と、ＣＶ参照元変更部１０７５とを備える。リストア処理部１０７は、リストア処理を実行する。リストア処理は、クローンボリューム２２の状態を、リストア対象スナップショットボリュームに付与されている基準時刻におけるクローンボリューム２２の状態に戻す処理である。
【０１０５】
リストアボリューム検索部１０７１は、ボリューム対応テーブル１０８を検索することによって、ボリューム対応テーブル１０８からリストア処理中のボリュームを抽出する。
【０１０６】
リストアアドレス検索部１０７２は、リストアボリューム検索部１０７１が抽出したボリュームについて、リストア差分管理テーブル１１１のフラグが１であるアドレスを検索することにより、リストアを行うページのアドレスを抽出する。前述のように、アドレスは、例えばページ番号によって表される。以下の説明においても同様に、アドレスは、例えばページ番号によって表される。
【０１０７】
データコピー有無判定部１０７３は、リストアアドレス検索部１０７２が抽出したアドレスに対する、更新履歴テーブル１１２に含まれるフラグに基づき、そのアドレスが「データコピーあり」であるか「データコピーなし」であるかを判定する。データコピー有無判定部１０７３は、図１１に示す例において、更新履歴テーブル１１２に含まれるフラグが１である場合、データコピーありと判定する。データコピー有無判定部１０７３は、更新履歴テーブル１１２に含まれるフラグが０である場合、データコピーなしと判定する。
【０１０８】
リストアデータコピー部１０７４は、リストアアドレス検索部１０７２が抽出したアドレスに対して、データコピー有無判定部１０７３が「データコピーあり」と判定した場合、次の処理を行う。まず、リストアデータコピー部１０７４は、スナップショットボリュームのそのアドレスのページに格納されているデータを、クローンボリューム２２の、同じアドレスのページにコピーする。そして、リストアデータコピー部１０７４は、リストア差分管理テーブル１１１におけるそのアドレスに対するフラグを、リストアを行わないことを表す値に変更する。その値は、図１０に示す例では「０」である。
【０１０９】
ＣＶ参照元変更部１０７５は、リストアアドレス検索部１０７２が抽出したアドレスに対して、データコピー有無判定部１０７３が「データコピーなし」と判定した場合、次の処理を行う。ＣＶ参照元変更部１０７５は、まず、リストアが行われるクローンボリューム２２において、抽出されたアドレスのページに対するプール領域を割り当てを解除する。すなわち、ＣＶ参照元変更部１０７５は、リストアが行われるクローンボリューム２２において、抽出されたアドレスのページからデータが読み出される場合、エンティティボリュームにおける同じアドレスのページからデータが読み出される状態にする。そして、ＣＶ参照元変更部１０７５は、クローンボリューム差分管理テーブル１０９において、リストアが行われるクローンボリューム２２のボリューム番号の行における値を、実データが存在しないことを表す値に変更する。その値は、図８に示す例では例では「０」である。さらに、ＣＶ参照元変更部１０７５は、リストア差分管理テーブル１１１において、抽出されたアドレスに対する値を、リストアを行わないことを表す値に変更する。その値は、図１０に示す例では例では「０」である。
【０１１０】
次に、本構成例に基づく本実施形態のボリューム管理装置１の動作について、図面を参照して詳細に説明する。
【０１１１】
図１２は、本実施形態のボリューム管理装置１のコマンド処理部１０６が行う動作全体を表すフローチャートである。
【０１１２】
図１２を参照すると、まず、命令受信部１１が、ホスト装置３から命令を受信する（ステップＳ１０１）。
【０１１３】
次に、コマンド判別部１０６１が、命令の種類を判定する（ステップＳ１０２）。
【０１１４】
判定の結果、命令がスナップショット作成命令である場合（ステップＳ１０３においてＹｅｓ）、スナップショット作成命令実行部１０６２が、スナップショット作成処理を実行する（ステップＳ１０４）。スナップショット作成処理は、後で詳細に説明される。
【０１１５】
命令がスナップショット作成命令でなく（ステップＳ１０３においてＮｏ）、命令がリストア命令である場合（ステップＳ１０５においてＹｅｓ）、リストア命令実行部１０６３が、リストア開始処理を実行する（ステップＳ１０６）。リストア開始処理、後で詳細に説明される。
【０１１６】
命令がリストア命令でなく（ステップＳ１０５においてＮｏ）、命令がライト命令である場合（ステップＳ１０７においてＹｅｓ）、ライト命令実行部１０６４がライト処理を実行する（ステップＳ１０８）。ライト処理は、後で詳細に説明される。
【０１１７】
命令がライト命令でない場合（ステップＳ１０７においてＮｏ）、ボリューム管理装置１は、受信した命令に応じた処理を実行する（ステップＳ１０９）。例えば、命令がリード命令である場合、図示されないリード実行部が、クローンボリューム２２におけるリード命令によって指定されるアドレスを持つページから、データを読み出せばよい。ステップＳ１０９の処理についての詳細な説明は省略する。
【０１１８】
ステップＳ１０４、ステップＳ１０６、ステップＳ１０８、あるいはステップＳ１０９の処理が終了すると、命令受信部１１は、ホスト装置３にレスポンスを返却する。
【０１１９】
次に、本実施形態のボリューム管理装置１のライト命令実行部１０６４が実行する、図１２に示されるステップＳ１０８のライト処理について、図面を参照して詳細に説明する。
【０１２０】
図１３は、本実施形態のボリューム管理装置１の、図１２に示されるステップＳ１０８におけるライト処理の動作を表すフローチャートである。
【０１２１】
まず、ライト命令実行部１０６４に含まれるスナップショット実行部１４が、ライト命令による書き込み先の保存データが、最新のスナップショットボリュームに存在するか否かを検出する（ステップＳ２０１）。ライト命令による書き込み先の保存データは、ライト命令によってデータが書き込まれる保存領域に対する上述の保存データである。前述のように、保存領域は、スナップショットボリュームに含まれるページである。
【０１２２】
例えば、スナップショット実行部１４は、ライト命令からデータの書き込み先であるページのページ番号を抽出する。そして、スナップショット実行部１４は、スナップショット差分管理テーブル１１０から、最新世代のスナップショットボリュームにおいて、抽出されたページ番号を持つページに、データが存在するか否かを表す値を読み出す。読み出された値が、データが存在することを表す値である場合、スナップショット実行部１４は、保存データが存在することを検出する。読み出された値が、データが存在しないことを表す値である場合、スナップショット実行部１４は、保存データが存在しないことを検出する。
【０１２３】
ライト命令による書き込み先の保存データが存在する場合（ステップＳ２０２においてＹｅｓ）、ボリューム管理装置１の動作はステップＳ１０５に進む。
【０１２４】
ライト命令による書き込み先の保存データが存在しない場合（ステップＳ２０２においてＮｏ）、スナップショット実行部１４は、ライト命令の書き込み先からデータを読み出す。そして、スナップショット実行部１４は、読み出されたデータを、最新のスナップショットボリュームの、ライト命令による書き込み先である仮想領域に関連付けられた保存領域に格納する（ステップＳ２０３）。
【０１２５】
第１の実施形態の構成例において、仮想領域のクローンボリューム２２におけるアドレスと、その仮想領域に関連付けられた保存領域のスナップショットボリュームにおけるアドレスは同一である。その場合、スナップショット実行部１４は、ライト命令による書き込み先のアドレスと同一のアドレスを持つ、スナップショットボリュームのページに、読み出されたデータを格納すればよい。なお、ステップＳ２０３の動作が、追い出しコピーの処理である。
【０１２６】
次に、スナップショット実行部１４は、ステップＳ２０３においてデータが格納された保存領域の状態を、保存データありに変更する（ステップＳ２０４）。
【０１２７】
スナップショット実行部１４は、スナップショット差分管理テーブル１１０に記録されている、最新世代のスナップショットボリュームにおける、抽出されたページ番号を持つページに対する、値を、データが存在することを表す値に変更すればよい。
【０１２８】
次に、ライト命令実行部１０６４に含まれるライト実行部１５が、ライト命令による書き込み先である仮想領域に、プール領域が割り当てられているか否かを検出する（ステップＳ２０５）。
【０１２９】
ライト実行部１５は、例えば、クローンボリューム差分管理テーブル１０９から、データが書き込まれるクローンボリューム２２における、書き込み先のアドレスに対して記録されている、クローンボリューム２２に実データが存在するか否かを表す値を読み出す。読み出された値が、実データが存在することを表す値である場合、ライト実行部１５は、ライト命令による書き込み先である仮想領域に、プール領域が割り当てられていることを検出する。読み出された値が、実データが存在しないことを表す値である場合、ライト実行部１５は、ライト命令による書き込み先である仮想領域に、プール領域が割り当てられていないことを検出する。
【０１３０】
ライト命令の書き込み先である仮想領域に、プール領域が割り当てられている場合（ステップＳ２０６においてＹｅｓ）、ボリューム管理装置１の動作は、ステップＳ２０９に進む。
【０１３１】
ライト命令の書き込み先である仮想領域に、プール領域が割り当てられていない場合（ステップＳ２０６においてＮｏ）、ライト実行部１５は、その仮想領域に、プール領域を割り当てる（ステップＳ２０７）。
【０１３２】
次に、ライト実行部１５は、ライト命令の書き込み先である仮想領域の状態を、更新ありに変更する（ステップＳ２０８）。
【０１３３】
ライト実行部１５は、クローンボリューム差分管理テーブル１０９に、データが書き込まれるクローンボリューム２２における、書き込み先のアドレスに対して記録されている値を、実データが存在することを表す値に変更する。
【０１３４】
次に、ライト実行部１５は、ライト命令に従って、データの書き込み先である仮想領域にデータを書き込む（ステップＳ２０９）。
【０１３５】
そして、ボリューム管理装置１は、ライト処理の動作を終了する。
【０１３６】
次に、本実施形態のボリューム管理装置１のスナップショット作成命令実行部１０６２が実行する、図１２に示されるステップＳ１０４のスナップショット作成処理について、図面を参照して詳細に説明する。
【０１３７】
図１４は、本実施形態のボリューム管理装置１の、図１２に示されるステップＳ１０４におけるスナップショット処理の動作を表すフローチャートである。
【０１３８】
まず、スナップショット作成部１０６２１が、スナップショットボリュームを追加する（ステップＳ３０１）。前述のように、スナップショット作成部１０６２１は、図１におけるボリューム管理部１７に相当する。
【０１３９】
そして、スナップショット作成部１０６２１は、追加されたスナップショットボリュームを、クローンボリューム２２に関連付ける（ステップＳ３０２）。
【０１４０】
ステップＳ３０２において、スナップショット作成部１０６２１は、例えば、ボリューム対応テーブル１０８における、クローンボリューム２２のボリューム番号の行に、追加されたスナップショットボリュームのボリューム番号を書き込めばよい。
【０１４１】
次に、スナップショット作成部１０６２１は、追加されたスナップショットボリュームに含まれる各保存領域の状態を初期化する（ステップＳ３０３）。
【０１４２】
ステップＳ３０３において、スナップショット作成部１０６２１は、例えば、スナップショット差分管理テーブル１１０に、新しく追加されたスナップショットボリュームの各ページに対する、データが存在するか否かを表す値を格納する領域を追加する。そして、スナップショット作成部１０６２１は、追加された領域に、データが存在しないことを表す値を書き込めばよい。スナップショット差分管理テーブル１１０が図９に示すスナップショット差分管理テーブル１１０である場合、スナップショット作成部１０６２１は、スナップショット差分管理テーブル１１０に、新しく追加されたスナップショットボリュームのための列を追加する。そして、スナップショット作成部１０６２１は、その列に新しく追加されたスナップショットボリュームのボリューム番号を書き込む。さらに、追加した列において、各ページのページ番号に対して、データが存在しないことを表す値である「０」を書き込む。ステップＳ３０３の動作は、スナップショット設定部１６に相当する更新履歴テーブル作成部１０６２２が行ってもよい。
【０１４３】
次に、更新履歴テーブル作成部１０６２２は、追加されたスナップショットボリュームの基準時刻にプール領域が割り当てられている仮想領域に対して、基準状態を、追加されたスナップショットボリュームに関連付けて、基準状態記憶部１２に格納する（ステップＳ３０４）。
【０１４４】
具体的には、更新履歴テーブル作成部１０６２２は、例えば、まず、更新履歴テーブル１１２に、追加されたクローンボリュームのための領域を追加する。図１１の例では、更新履歴テーブル作成部１０６２２は、追加されたクローンボリュームのための列を更新履歴テーブル１１２に追加する。そして、その列に追加されたクローンボリュームのボリューム番号を書き込む。さらに、更新履歴テーブル作成部１０６２２は、クローンボリューム差分管理テーブル１０９から、スナップショット作成対象のクローンボリュームの各ページに対する値を読み出す。更新履歴テーブル作成部１０６２２は、読み出されたそれぞれのページに対する値を、更新履歴テーブル１１２の追加されたクローンボリュームの列の、同じアドレスのページに対する値として書き込む。すなわち、更新履歴テーブル作成部１０６２２は、クローンボリューム差分管理テーブル１０９におけるスナップショット作成対象のクローンボリュームの値の部分を、更新履歴テーブル１１２の追加されたクローンボリュームの値の部分にコピーする。
【０１４５】
そして、ボリューム管理装置１は、スナップショット作成処理の動作を終了する。
【０１４６】
次に、本実施形態のボリューム管理装置１のリストア命令実行部１０６３が実行する、図１２に示されるステップＳ１０６のリストア開始処理について、図面を参照して詳細に説明する。
【０１４７】
図１５は、本実施形態のボリューム管理装置１の、図１２に示されるステップＳ１０６におけるリストア開始処理の動作を表すフローチャートである。
【０１４８】
図１５を参照すると、リストア命令実行部１０６３は、まず、リストア差分管理テーブル１１１を作成する（ステップＳ４０１）。
【０１４９】
ステップＳ４０１において、リストア命令実行部１０６３は、例えば、リストア命令に識別子が含まれるスナップショットボリュームであるリストア対象スナップショットボリュームを特定する。リストア命令実行部１０６３は、スナップショット差分管理テーブル１１０の、リストア対象スナップショットボリューム及びそのスナップショットボリュームの上位世代のスナップショットボリュームに対する値が記録されている部分を読み出す。図９に示す例では、それらの値は、０か１の値を取りうるフラグで表される。リストア命令実行部１０６３は、ページ毎に、リストア対象スナップショットボリューム及びそのスナップショットボリュームの上位世代のスナップショットボリュームに対する値の論理和を計算する。リストア命令実行部１０６３は、それぞれのページに対して算出された論理和を表す値を、リストア差分管理テーブル１１１における、論理和を算出したページのアドレスに対する値として、リストア差分管理テーブル１１１に記録する。
【０１５０】
次に、リストア命令実行部１０６３は、ボリューム対応テーブル１０８において、クローンボリューム２２に対する、リストア対象スナップショットボリュームの状態を表す値、「リストア中」に変更する（ステップＳ４０２）。
【０１５１】
次に、リストア命令実行部１０６３は、バックグラウンド処理として、リストア処理を開始する（ステップＳ４０３）。
【０１５２】
ステップＳ４０３において、リストア命令実行部１０６３は、例えば、まず、リストア処理部１０７がバックグラウンド処理として動作しているか否かを検出すればよい。バックグラウンド処理は、コマンド処理部１０６の動作と平行して行われる処理である。検出方法は、既存の任意の検出方法でよい。リストア処理部１０７が動作していなければ、リストア命令実行部１０６３は、リストア処理部１０７の動作を開始させる。リストア処理部１０７が動作していれば、リストア命令実行部１０６３は、リストア開始処理の動作を終了する。
【０１５３】
次に、ボリューム管理装置１のリストア処理部１０７が、バックグラウンド処理として行うリストア処理の動作について、図面を参照して詳細に説明する。
【０１５４】
図１６は、ボリューム管理装置１のリストア処理部１０７が行う、リストア処理の動作を表すフローチャートである。
【０１５５】
例えば、リストア命令実行部１０６３がリストア処理部１０７に動作を開始させることによって、リストア処理部１０７は図１６に示す動作を開始する。ボリューム管理装置１が動作を開始すると、リストア処理部１０７が図１６に示す動作を開始してもよい。
【０１５６】
まず、リストアボリューム検索部１０７１が、例えば、ボリューム対応テーブル１０８から、リストア状態が「リストア中」であるボリュームを検索することにより、リストア状態が「リストア中」であるスナップショットボリュームを検出する（ステップＳ５０１）。
【０１５７】
リストア状態が「リストア中」であるスナップショットボリュームが検出されない場合（ステップＳ５０２においてＮｏ）、ボリューム管理装置１の動作は、ステップＳ５２２に進む。
【０１５８】
リストア状態が「リストア中」であるスナップショットボリュームが検出された場合（ステップＳ５０２においてＹｅｓ）、ボリューム管理装置１の動作は、ステップＳ５０３に進む。
【０１５９】
ステップＳ５０３において、リストアアドレス検索部１０７２が、検出されたスナップショットボリュームに関連付けられているクローンボリューム２２において、保存データが存在する仮想領域の有無を検出する（ステップＳ５０３）。ステップＳ５０３において検出される、保存データが存在する仮想領域は、検出されたスナップショットボリュームに付与されている基準時刻以降に書き込みが行われた仮想領域である。リストアアドレス検索部１０７２は、例えば、リストア状態がリストア中であることが検出されたスナップショットボリュームの、リストア差分管理テーブル１１１から、値が差分ありを表すアドレスを検出することにより、ステップＳ５０３の動作を行えばよい。図１０に示されるリストア差分管理テーブル１１１の例では、差分ありを値は１である。
【０１６０】
保存データが存在する仮想領域が検出された場合（ステップＳ５０４においてＹｅｓ）、データコピー有無判定部１０７３は、検出された仮想領域から一つの仮想領域を選択する（ステップＳ５０５）。なお、ステップＳ５０３の動作において保存データが存在する仮想領域が検出された場合、ステップＳ５０３の動作の直後、検出された仮想領域は、保存データが存在する、未選択の仮想領域である。
【０１６１】
次に、データコピー有無判定部１０７３は、検出されたスナップショットボリュームに付与された基準時刻において、選択された仮想領域にプール領域が割り当てられていたか判定する（ステップＳ５０６）。ステップＳ５０６において、データコピー有無判定部１０７３は、更新履歴テーブル１１２から、検出された、状態が「リストア中」であるスナップショットボリュームのボリューム番号の列における、選択された仮想領域のアドレスの列の値を読み出せばよい。そして、データコピー有無判定部１０７３は、読み出された値が０である場合、「データコピーなし」と判定する。また、データコピー有無判定部１０７３は、読み出された値が１である場合、「データコピーあり」と判定する。ここで、「データコピー無し」は、選択された仮想領域にプール領域が割り当てられていたことに相当する。「データコピー無し」は、選択された仮想領域にプール領域が割り当てられていなかったことに相当する。
【０１６２】
検出されたスナップショットボリュームに付与された基準時刻において、選択された仮想領域にプール領域が割り当てられていた場合（ステップＳ５０７においてＹｅｓ）、ボリューム管理装置１の動作は、ステップＳ５０８に進む。
【０１６３】
ステップＳ５０８において、リストアデータコピー部１０７４は、検出されたスナップショットボリュームに付与されている基準時刻に、選択された仮想領域に格納されているデータを、その選択された仮想領域に書き込む（ステップＳ５０８）。
検出されたスナップショットボリュームに付与されている基準時刻以降に、選択された仮想領域に対する書き込みがあった場合、選択された仮想領域に格納されていたデータは、書き込みがあった時点における最新のスナップショットボリュームに格納される。
そのため、例えばまず、リストアデータコピー部１０７４は、検出されたスナップショットボリューム以降のスナップショットボリュームから、選択された仮想領域に格納されていたデータが格納されている最も古いスナップショットボリュームを選択する。そして、リストアデータコピー部１０７４は、選択されたスナップショットボリュームの、選択された仮想領域に関連付けられている保存領域から、データを読み出す。さらに、リストアデータコピー部１０７４は、読み出したデータを、選択された仮想領域に格納する。
【０１６４】
本実施形態では、仮想領域と保存領域が互いに関連付けられている場合、その仮想領域のクローン領域におけるアドレスと、その保存領域のスナップショットボリュームにおけるアドレスは同一である。
【０１６５】
そこで、リストアデータコピー部１０７４は、スナップショットボリュームの、選択された仮想領域と同じアドレスの保存領域にデータが格納されているか否かを、検出されたスナップショットボリュームから古い順に判定する。リストアデータコピー部１０７４は、その判定を、例えば、スナップショット差分管理テーブル１１０を使用して行う。リストアデータコピー部１０７４は、まず、検出されたスナップショットボリュームを選択する。そして、リストアデータコピー部１０７４は、スナップショット差分管理テーブル１１０における、選択された仮想領域のアドレスの行において、選択されたスナップショットボリュームの列の値を読み出す。読み出された値が０であれば、リストアデータコピー部１０７４は、クローンボリューム２２に関連付けられている、選択されたスナップショットボリュームの次に古い基準時刻が付与されているスナップショットボリュームを選択する。そして、リストアデータコピー部１０７４は、選択されたスナップショットボリュームに対して、同じ動作を繰り返す。すなわち、リストアデータコピー部１０７４は、スナップショット差分管理テーブル１１０における、選択された仮想領域のアドレスの行において、選択されたスナップショットボリュームの列の値を読み出す。リストアデータコピー部１０７４は、読み出された値が１になるまで、以上の処理を繰り返す。
【０１６６】
読み出された値が１であれば、検出されたスナップショットボリュームの、選択された仮想領域と同じアドレスを持つ保存領域からデータを読み出し、読み出されたデータを、選択された仮想領域に書き込む。
【０１６７】
次に、リストアデータコピー部１０７４は、検出されたスナップショットボリュームのリストア差分管理テーブル１１１における、選択された仮想領域の状態を、「差分なし」に設定する（ステップＳ５０９）。リストア差分管理テーブル１１１が図１０に示すリストア差分管理テーブル１１１である場合、リストアデータコピー部１０７４は、選択された仮想領域のアドレスの行の値を、「差分なし」を表す０に設定する。
【０１６８】
ステップＳ５０６において検出されたスナップショットボリュームに付与された基準時刻に、選択された仮想領域にプール領域が割り当てられていなかった場合（ステップＳ５０７においてＮｏ）、ボリューム管理装置１の動作は、ステップＳ５１１に進む。
【０１６９】
ステップＳ５１１において、ＣＶ参照元変更部１０７５は、選択された仮想領域に対するプール領域の割り当てを解除する（ステップＳ５１１）。ステップＳ５１１の動作の後、ボリューム管理装置１の動作は、ステップＳ５０９に進む。
【０１７０】
ステップＳ５０９の動作の後、ボリューム管理装置１の動作は、ステップＳ５０４に戻る。
【０１７１】
なお、ステップＳ５０３において、リストアアドレス検索部１０７２は、例えば、リストア差分管理テーブル１１１から、値が１である最も値が小さいアドレスを検索してもよい。そして、ステップＳ５０４において、検索の結果、値が１であるアドレスが存在しなければ（ステップＳ５０４においてＮｏ）、ボリューム管理装置１は、ステップＳ５１０の動作を行ってもよい。検索の結果、値が１であるアドレスが存在すれば（ステップＳ５０４においてＹｅｓ）、リストアアドレス検索部１０７２は、そのアドレスを持つ仮想領域を選択すればよい。そして、ステップＳ５０９の動作の後、ボリューム管理装置１の動作は、ステップＳ５０３に戻ってもよい。
【０１７２】
ステップＳ５０４において、保存データが存在する未選択の仮想領域が存在しない場合（ステップＳ５０４においてＮｏ）、ボリューム管理装置１の動作は、ステップＳ５１０に進む。
【０１７３】
ステップＳ５１０において、例えばリストアボリューム検索部１０７１が、検出されたスナップショットボリュームの状態を、「リストア中」ではなくなるよう変更する（ステップＳ５１０）。リストアボリューム検索部１０７１は、例えば、図７に示されるボリューム対応テーブルにおいて、検出されたスナップショットボリュームのリストア状態を「なし」に変更すればよい。そして、ボリューム管理装置１の動作は、ステップＳ５０１に戻る。
【０１７４】
ステップＳ５０２において、状態が「リストア中」であるスナップショットボリュームが検出されなかった場合（ステップＳ５０２においてＮｏ）、リストア処理部１０７は、一定時間待機する（ステップＳ５１２）。そして、ボリューム管理装置１の動作は、ステップＳ５０１に戻る。
【０１７５】
以上で説明した本実施形態には、クローンボリューム２２から作成されたスナップショットに基づく、クローンボリューム２２へのリストアにおいて、クローンボリューム２２の容量効率の悪化を軽減することができるという第１の効果がある。
【０１７６】
また、本実施形態には、クローンボリューム２２から作成されたスナップショットに基づく、クローンボリューム２２へのリストアにおいて、リストアの処理に必要な時間を短縮することができるという第２の効果がある。
【０１７７】
第１及び第２効果の理由は、ＣＶ参照元変更部１０７５が、リストアが行われるスナップショットボリュームに関連付けられた基準時刻において、プール領域が割り当てられていなかった仮想領域に対する、プール領域の割り当てを解除するからである。そのため、リストアが行われたスナップショットボリュームに関連付けられた基準時刻において仮想領域に割り当てられていなかったプール領域が、リストア後において使用されなくなる。したがって、クローンボリューム２２の容量効率の悪化が軽減される。また、リストアにおいて、プール領域の割り当てが解除される仮想領域に対して、データをコピーする必要がない。そのため、プール領域の割り当てが解除される仮想領域に対してデータをコピーする時間が必要なくなるので、リストアの処理に必要な時間を短縮することができる。なお、ＣＶ参照元変更部１０７５は、リストア処理部１０７に含まれる。さらに、リストア処理部１０７は、リストア実行部１３に含まれる。
【０１７８】
以上で説明した効果について、さらに詳細に説明する。
【０１７９】
図１７から図２１までの各図は、仮想領域に対するプール領域の割り当てを解除しない場合における、クローンボリュームとスナップショットボリュームの状態の遷移を表す図である。図１７から図２１までの各図に示す状態の遷移は、クローンボリュームに対する書き込みやスナップショットボリュームの追加に応じた状態の遷移である。
【０１８０】
図１７では、２番目の仮想領域に対して、データＢ１が書き込まれる。その結果、２番目の仮想領域にプール領域が割り当てられ、そのプール領域に、データＢ１が格納される。そして、クローンボリューム差分管理テーブルにおける、２番目の仮想領域の値は、「差分あり」を表す１に変更される。なお、図１７におけるクローンボリューム差分変更テーブルは、図８に記載されているクローンボリューム更新差分テーブルのうち、図１７のクローンボリュームのボリューム番号によって特定される列を表す。図１８から図３３までの各図においても同様である。
【０１８１】
図１８では、スナップショットボリュームが追加される。図１８に示す状態では、スナップショットボリュームにコピーされたデータはないため、スナップショット差分管理テーブルの全ての値が０である。なお、図１８のスナップショット管理テーブルは、図８に記載されているスナップショット管理テーブルのうち、図１８に記載されているスナップショットボリュームのボリューム番号によって特定される列を表す。図１８から図３２までの図のうち、スナップショット管理テーブルを含む図においても同様である。
【０１８２】
図１９において、追加されたスナップショットボリューム対してスナップショットのイメージが作成されている。そのため、例えば２番目の仮想領域にデータＢ２が書き込まれると、２番目の仮想領域に格納されていたデータが、スナップショットボリュームに追い出しコピーされる。すなわち、２番目の仮想領域に格納されていたデータであるデータＢ２が、スナップショットボリュームの２番目の保存領域にコピーされる。また、スナップショット差分管理テーブルにおける、２番目の値が、「差分あり」を表す１に設定される。そして、仮想領域に割り当てられているプール領域にデータＢ２が格納される。
さらに、３番目の仮想領域にデータＣ１が書き込まれると、同様に、３番目の仮想領域に格納されていたデータが、スナップショットボリュームに追い出しコピーされる。３番目の仮想領域にデータが書き込まれる前の状態において、３番目の仮想領域には、プール領域が割り当てられていない。３番目の仮想領域からデータが読み出されると、３番目の仮想領域に関連付けられている実領域に格納されているデータが読み出される。この場合、３番目の仮想領域に関連付けられている実領域に格納されているデータであるデータＣ０が、スナップショットボリュームの３番目の保存領域に追い出しコピーされる。また、スナップショット差分管理テーブルにおける、３番目の値が、「差分あり」を表す１に設定される。そして、３番目の仮想領域にプール領域が割り当てられ、そのプール領域にデータＣ１が格納される。そして、クローンボリューム差分管理テーブルにおける、３番目の仮想領域の値は、「差分あり」を表す１に変更される。
【０１８３】
図２０において、新しくスナップショットボリュームが追加される。新しくスナップショットボリュームが、第一世代のスナップショットボリュームである。第一世代のスナップショットボリュームにおけるスナップショットが、第一世代のスナップショットである。追加前に存在していたスナップショットボリュームが、第二世代のスナップショットボリュームである。追加前に存在していたスナップショットが、第二世代のスナップショットである。追加されたスナップショットボリュームにコピーされたデータはないため、追加されたスナップショットボリュームのスナップショット差分管理テーブルの全ての値は０である。
【０１８４】
図２１において、１番目の仮想領域に、データＡ１が書き込まれる。１番目の仮想領域にデータＡ１が書き込まれると、１番目の仮想領域に格納されていたデータが、最新のスナップショットボリュームである、図２０において追加されたスナップショットボリュームに追い出しコピーされる。データＡ１が書き込まれる前、１番目の仮想領域にプール領域は割り当てられていない。この場合、１番目の仮想領域に関連付けられている実領域に格納されているデータであるデータＡ０が、スナップショットボリュームの１番目の保存領域に追い出しコピーされる。また、追加されたスナップショットボリュームのスナップショット差分管理テーブルにおける、１番目の値が、「差分あり」を表す１に設定される。そして、１番目の仮想領域にプール領域が割り当てられ、そのプール領域にデータＡ１が格納される。そして、クローンボリューム差分管理テーブルにおける、１番目の仮想領域の値は、「差分あり」を表す１に変更される。一方、第二世代のスナップショットのイメージを記憶する、図１８において追加されたスナップショットボリュームに格納されているデータと、そのスナップショットボリュームのスナップショット差分管理テーブルは、更新されない。
【０１８５】
図１７から図２１までの状態遷移において、更新履歴テーブルは記載されていない。
【０１８６】
図２２から図２６までの各図は、本実施形態における、クローンボリュームとスナップショットボリュームの状態の遷移を表す図である。図２２から図２６までの各図に示す状態の遷移は、クローンボリュームに対する書き込みやスナップショットボリュームの追加に応じた状態の遷移である。図２２から図２６までの各図におけるクローンボリュームに対する書き込みやスナップショットボリュームの追加は、図１７から図２１までの各図におけるクローンボリュームに対する書き込みやスナップショットボリュームの追加と同じである。
【０１８７】
図２２と図１７は同じである。
【０１８８】
図２３は、スナップショットボリュームが追加されると、更新履歴テーブルが作成される点が、図１８と異なる。スナップショットボリュームが追加される際のクローンボリューム差分管理テーブルが、更新履歴テーブルにコピーされることにより、更新履歴テーブルが作成される。その他の点において、図２３は図１８と同じである。
【０１８９】
図２４において、更新履歴テーブルは変更されない。その他の点において、図２４は図１９と同じである。
【０１９０】
図２５において、新しくスナップショットボリュームが追加された際の、クローンボリューム差分管理テーブルが、新しく追加されたスナップショットボリュームの更新履歴テーブルとしてコピーされる。その他の点において、図２５は図２０と同じである。
【０１９１】
図２６において、２つのスナップショットボリュームに関連付けられている更新履歴テーブルは、更新されない。その他の点において、図２６は図２１と同じである。
【０１９２】
次に、リストアの処理における、クローンボリューム及びスナップショットボリュームの状態について説明する。
【０１９３】
図２７から図２９までの各図は、仮想領域に対するプール領域の割り当てを解除しない場合における、クローンボリュームの状態の遷移を表す図である。
【０１９４】
図２７は、第二世代のスナップショットボリュームに格納されているスナップショットのイメージに基づき、クローンボリュームに対してリストア処理を行うことを表す。図２７において、クローンボリュームと各スナップショットボリュームの状態は、それぞれ、図２１におけるクローンボリュームと各スナップショットボリュームの状態と同じである。図２７のリストア差分管理テーブルは、第二世代のスナップショットボリュームが追加されてから、書き込みが行われた仮想領域を表す。リストア差分管理テーブルにおいて、１が、書き込みが行われたことを表す値である。
【０１９５】
図２８において、第二世代スナップショットボリュームが追加された時に、クローンボリュームから読み出されていた値と同じ値が、リストア処理後のクローンボリュームから読み出される状態になるように、クローンボリュームにデータがコピーされる。第二世代スナップショットボリュームが追加されたとき、クローンボリュームの第１の仮想領域から読み出されていたデータＡ０は、第一世代スナップショットボリュームに格納されている。従って、第一世代の１番目の保存領域からデータＡ０が読み出され、読み出されたデータＡ０が１番目の仮想領域に書き込まれる。書き込まれたデータＡ０は、１番目の仮想領域に割り当てられているプール領域に格納される。また、第二世代スナップショットボリュームが追加されたとき、２番目及び３番目の仮想領域から読み出されていたデータＢ１及びデータＣ０は、第二世代スナップショットボリュームに格納されている。従って、第二世代の２番目の保存領域からデータＢ１が読み出され、読み出されたデータＢ１が２番目の仮想領域に書き込まれる。また、第二世代の３番目の保存領域からデータＣ０が読み出され、読み出されたデータＣ０が３番目の仮想領域に書き込まれる。
【０１９６】
図２９は、リストアの処理が行われた後のクローンボリューム及びスナップショットボリュームの状態と、第二世代スナップショットボリュームが追加された時における、クローンボリューム及びスナップショットボリュームの状態を表す。第二世代スナップショットボリュームが追加された時、１番目及び３番目の仮想領域に、プール領域は割り当てられていない。一方、リストア処理が行われた後、１番目及び３番目の仮想領域に、プール領域が割り当てられている。
【０１９７】
図３０から図３２までの各図は、本実施形態における、クローンボリュームの状態の遷移を表す図である。
【０１９８】
図３０は、図２７と同様に、第二世代のスナップショットボリュームに格納されているスナップショットのイメージに基づき、クローンボリュームに対してリストア処理を行うことを表す。図３０において、クローンボリュームと各スナップショットボリュームの状態は、それぞれ、図２６におけるクローンボリュームと各スナップショットボリュームの状態と同じである。図３０のリストア差分管理テーブルは、図２７のリストア差分管理テーブルと同様に、第二世代のスナップショットボリュームが追加されてから、書き込みが行われた仮想領域を表す。リストア差分管理テーブルにおいて、１が、書き込みが行われたことを表す値である。また、図３０では、各スナップショットボリュームに応じた、更新履歴テーブルが存在する。
【０１９９】
図３１は、本実施形態におけるリストア処理による、クローンボリュームの状態の変化を表す。図３１では、リストア差分テーブルにおける値が１であるアドレスの仮想領域のうち、リストア元のスナップショットボリュームの更新履歴テーブルにおける値が１である仮想領域だけに対して、データのコピーが行われる。図３１において、リストア元のスナップショットボリュームである第二世代のスナップショットボリュームの更新履歴において、値が１である仮想領域は、２番目の仮想領域だけである。また、リストア差分管理テーブルにおいて、１番目から３番目までの値が１である。従って、第二世代のスナップショットボリュームの２番目の保存領域から、データＢ１が読み出され、読み出されたデータＢ１が、２番目の仮想領域に書き込まれる。このことにより、２番目の仮想領域に割り当てられているプール領域に格納されているデータは、データＢ３からデータＢ２に書き換えられる。
【０２００】
一方、リストア差分管理テーブルにおいて、１番目と３番目の値は１であるのに対し、第二世代スナップショットボリュームの更新履歴テーブルにおいて、１番目と３番目の値は０である。従って、１番目と３番目の仮想領域に対するプール領域の割り当ては、解除される。本実施形態では、このことにより、クローンボリュームの状態が、第二世代のスナップショットボリュームが追加されたときに仮想領域から読み出されていた値が、リストア後の仮想領域から読み出される状態になる。さらに、クローンボリュームのクローンボリューム差分管理テーブルにおける、第１及び第３の仮想領域の値が、０に戻される。
【０２０１】
図２９は、本実施形態におけるリストアの処理が行われた後のクローンボリューム及びスナップショットボリュームの状態と、第二世代スナップショットボリュームが追加された時における、クローンボリューム及びスナップショットボリュームの状態を表す。両方の状態において、２番目の仮想領域にプール領域が割り当てられている。また、両方の状態において、１番目及び３番目の仮想領域にプール領域が割り当てられていない。
【０２０２】
以上で説明した例において、本実施形態では、１番目及び３番目の仮想領域に対するプール領域の割り当てが解除される。すなわち、本実施形態では、１番目及び３番目の仮想領域に割り当てられるプール領域の容量の分だけ、クローンボリュームの容量効率の悪化を軽減することができる。また、本実施形態では、１番目及び３番目の仮想領域に対するデータのコピーを行わない。そのため、本実施形態では、１番目及び３番目の仮想領域にデータをコピーするのに必要な時間だけ、リストアの処理にかかる時間を短縮できる。
【０２０３】
次に、本発明の第２の実施形態について、図面を参照して詳細に説明する。
【０２０４】
図３３は、本実施形態のボリューム管理装置１Ａの構成を表すブロック図である。
【０２０５】
図３３を参照すると、本実施形態のボリューム管理装置１Ａは、受信したリストア命令に応じて、仮想ボリュームに含まれ、プール領域が割り当てられていない初期状態でデータが書き込まれると、当該データが格納される前記プール領域が割り当てられる仮想領域であって、少なくとも所定時刻以後にデータが書き込まれた前記仮想領域において、当該仮想領域が前記所定時刻に前記初期状態であったか否かを特定する基準状態が、前記仮想領域が前記初期状態でなかったことを表す場合、前記仮想領域が前記所定時刻に記憶していたデータである保存データを記憶する保存ボリュームから前記保存データを読み出し、読み出された前記保存データを前記仮想領域に書き込み、前記基準状態が、前記仮想領域が前記初期状態であったことを表す場合、前記仮想領域に対する前記プール領域の割り当てを解除するリストア実行部１１を含む。
【０２０６】
以上で説明した本実施形態には、第１の実施形態における第１の効果及び第２の効果と同じ効果がある。
【０２０７】
その理由は、リストア実行部１３が、リストアが行われるスナップショットボリュームに関連付けられた基準時刻において、プール領域が割り当てられていなかった仮想領域に対する、プール領域の割り当てを解除するからである。そのため、リストアが行われたスナップショットボリュームに関連付けられた基準時刻において仮想領域に割り当てられていなかったプール領域が、リストア後において使用されなくなる。したがって、クローンボリュームの容量効率の悪化が軽減される。また、リストアにおいて、プール領域の割り当てが解除される仮想領域に対して、データをコピーする必要がない。そのため、プール領域の割り当てが解除される仮想領域に対してデータをコピーする時間が必要なくなるので、リストアの処理に必要な時間を短縮することができる。
【０２０８】
ボリューム管理装置１、ボリューム管理装置１Ａ、及びストレージ装置２は、それぞれ、コンピュータ及びコンピュータを制御するプログラム、専用のハードウェア、又は、コンピュータ及びコンピュータを制御するプログラムと専用のハードウェアの組合せにより実現することができる。
【０２０９】
図３４は、ボリューム管理装置１、ボリューム管理装置１Ａ、及びストレージ装置２を実現するために使用される、コンピュータ１０００の構成の一例を表す図である。図３４を参照すると、コンピュータ１０００は、プロセッサ１００１と、メモリ１００２と、記憶装置１００３と、Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）インタフェース１００４とを含む。また、コンピュータ１０００は、記録媒体１００５にアクセスすることができる。メモリ１００２と記憶装置１００３は、例えば、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ハードディスクなどの記憶装置である。記録媒体１００５は、例えば、ＲＡＭ、ハードディスクなどの記憶装置、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、可搬記録媒体である。記憶装置１００３が記録媒体１００５であってもよい。プロセッサ１００１は、メモリ１００２と、記憶装置１００３に対して、データやプログラムの読み出しと書き込みを行うことができる。プロセッサ１００１は、Ｉ／Ｏインタフェース１００４を介して、例えば、ストレージ装置２又はボリューム管理装置１もしくはボリューム管理装置１Ａと、ホスト装置３にアクセスすることができる。プロセッサ１００１は、記録媒体１００５にアクセスすることができる。記録媒体１００５には、コンピュータ１０００を、ボリューム管理装置１、ボリューム管理装置１Ａ、又はストレージ装置２として動作させるプログラムが格納されている。
【０２１０】
プロセッサ１００１は、記録媒体１００５に格納されている、コンピュータ１０００を、ボリューム管理装置１、ボリューム管理装置１Ａ、又はストレージ装置２として動作させるプログラムを、メモリ１００２にロードする。そして、プロセッサ１００１が、メモリ１００２にロードされたプログラムを実行することにより、コンピュータ１０００は、ボリューム管理装置１、ボリューム管理装置１Ａ、又はストレージ装置２として動作する。
【０２１１】
命令受信部１１と、リストア実行部１３と、スナップショット実行部１４と、ライト実行部１５と、スナップショット設定部１６と、ボリューム管理部１７と、クローンボリューム２２は、例えば、プログラムを記憶する記録媒体１００５からメモリ１００２に読み込まれた、各部の機能を実現するための専用のプログラムと、そのプログラムを実行するプロセッサ１００１により実現することができる。また、管理情報記憶部１０と、基準情報記憶部１２と、割当状態記憶部１８と、保存状態記憶部１９と、対象情報記憶部２０と、エンティティボリューム２１と、プールボリューム２３と、スナップショットボリューム２４Ａと、スナップショットボリューム２４Ｂは、コンピュータが含むメモリ１００２やハードディスク装置等の記憶装置１００３により実現することができる。あるいは、命令受信部１１と、リストア実行部１３と、スナップショット実行部１４と、ライト実行部１５と、スナップショット設定部１６と、ボリューム管理部１７と、クローンボリューム２２と、管理情報記憶部１０と、基準情報記憶部１２と、割当状態記憶部１８と、保存状態記憶部１９と、対象情報記憶部２０と、エンティティボリューム２１と、プールボリューム２３と、スナップショットボリューム２４Ａと、スナップショットボリューム２４Ｂの一部又は全部を、各部の機能を実現する専用の回路によって実現することもできる。
【０２１２】
以上、実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【０２１３】
１、１Ａ    ボリューム管理装置
２    ストレージ装置
３    ホスト装置
１０    管理情報記憶部
１１    命令受信部
１２    基準状態記憶部
１３    リストア実行部
１４    スナップショット実行部
１５    ライト実行部
１６    スナップショット設定部
１７    ボリューム管理部
１８    割当状態記憶部
１９    保存状態記憶部
２０    対象情報記憶部
２１    エンティティボリューム
２２    クローンボリューム
２３    プールボリューム
２４Ａ、２４Ｂ    スナップショットボリューム
２５    コントローラ
１００    ストレージシステム
１０６    コマンド処理部
１０７    リストア処理部
１０８    ボリューム対応テーブル
１０９    クローンボリューム差分管理テーブル
１１０    スナップショット差分管理テーブル
１１１    リストア差分管理テーブル
１１２    更新履歴テーブル
１１３    テーブル記憶部
１０６１    コマンド判別部
１０６２    スナップショット作成命令実行部
１０６３    リストア命令実行部
１０６４    ライト命令実行部
１０７１    リストアボリューム検索部
１０７２    リストアアドレス検索部
１０７３    データコピー有無判定部
１０７４    リストアデータコピー部
１０７５    ＣＶ参照元変更部
１０００    コンピュータ
１００１    プロセッサ
１００２    メモリ
１００３    記憶装置
１００４    Ｉ／Ｏインタフェース
１００５    記録媒体
１０６２１    スナップショット作成部
１０６２２    更新履歴テーブル作成部
【図１】
2015045993.tif 000003
【図２】
2015045993.tif 000004
【図３】
2015045993.tif 000005
【図４】
2015045993.tif 000006
【図５】
2015045993.tif 000007
【図６】
2015045993.tif 000008
【図７】
2015045993.tif 000009
【図８】
2015045993.tif 000010
【図９】
2015045993.tif 000011
【図１０】
2015045993.tif 000012
【図１１】
2015045993.tif 000013
【図１２】
2015045993.tif 000014
【図１３】
2015045993.tif 000015
【図１４】
2015045993.tif 000016
【図１５】
2015045993.tif 000017
【図１６】
2015045993.tif 000018
【図１７】
2015045993.tif 000019
【図１８】
2015045993.tif 000020
【図１９】
2015045993.tif 000021
【図２０】
2015045993.tif 000022
【図２１】
2015045993.tif 000023
【図２２】
2015045993.tif 000024
【図２３】
2015045993.tif 000025
【図２４】
2015045993.tif 000026
【図２５】
2015045993.tif 000027
【図２６】
2015045993.tif 000028
【図２７】
2015045993.tif 000029
【図２８】
2015045993.tif 000030
【図２９】
2015045993.tif 000031
【図３０】
2015045993.tif 000032
【図３１】
2015045993.tif 000033
【図３２】
2015045993.tif 000034
【図３３】
2015045993.tif 000035
【図３４】
2015045993.tif 000036