次に、本発明の第1の実施の形態について図面を参照して詳細に説明する。
図1は、本実施形態のストレージシステム100の構成を表すブロック図である。図1は、ストレージシステム100の機能構成を表す図であり、ストレージシステム100のハードウェア構成とは一致するとは限らない。
ストレージシステム100は、ボリューム管理装置1と、ストレージ装置2を含む。ストレージシステム100は、ホスト装置3と接続されている。ボリューム管理装置1とストレージ装置2は、同じ装置であってもよい。例えば、ボリューム管理装置1がストレージ装置2に含まれていてもよい。以下の説明において、ストレージシステム100は、ディスクアレイサブシステムとも表記される。
ホスト装置3は、例えばコンピュータ装置である。ホスト装置3は、コンピュータ装置上に実現された仮想計算機であってもよい。複数のホスト装置3がストレージシステム100に接続されていてもよい。
図2は、本実施形態のストレージシステム100の構成の他の例を表すブロック図である。図2の例では、ボリューム管理装置1と、ストレージ装置2は、一つの装置であるディスクアレイサブシステム100に含まれる。また、図2の例では、3台のホスト装置3がディスクアレイサブシステム100に接続されている。
ボリューム管理装置1は、管理情報記憶部10と、命令受信部11と、基準状態記憶部12と、リストア実行部13と、スナップショット実行部14と、ライト実行部15と、スナップショット設定部16と、ボリューム管理部17と、割当状態記憶部18と、保存状態記憶部19と、対象情報記憶部20とを含む。
ストレージ装置2は、コントローラ25と、エンティティボリューム21と、仮想ボリューム22と、プールボリューム23と、保存ボリューム24Aと、保存ボリューム24Bとを含む。仮想ボリューム22は、エンティティボリューム21に関連付けられている。保存ボリューム24Aと保存ボリューム24Bは、仮想ボリューム22に関連付けられている。図1の例では、エンティティボリューム21の数は1である。また、エンティティボリューム21に関連付けられている仮想ボリューム22の数は1個である。そして、仮想ボリューム22に関連付けられている保存ボリュームの数は2個である。しかし、エンティティボリューム21の数は2個以上であってもよい。また、一つのエンティティボリューム21に関連付けられている仮想ボリューム22の数は、2個以上であってもよい。さらに、一つの仮想ボリューム22に関連付けられている保存ボリュームの数は、1個や3個以上であってもよい。
コントローラ25は、1個又は複数のディスク装置に含まれる記憶領域を使用して、ホスト装置3等が、それぞれひとまとまりの記憶領域として扱える、各ボリュームを提供する。例えば、コントローラ25は、ストレージ装置2に含まれるクローンボリューム22や他のボリュームにデータを書き込む操作が行われた場合、そのデータを、そのボリュームの書き込み操作が行われた領域に使用されているディスク装置にデータを書き込む処理を行う。また、コントローラ25は、ストレージ装置2に含まれるクローンボリューム22や他のボリュームからデータを読み出す操作が行われた場合、そのボリュームの読み出し操作が行われた領域に使用されているディスク装置から、データを読み出す処理を行う。
エンティティボリューム21は、1台以上のディスク装置によって実現される実ボリュームである。
プールボリューム23は、1台以上のディスク装置によって実現される実ボリュームである。
本発明の各実施形態では、仮想ボリューム22は、背景技術として記載されている上述のLinked Clone技術によるクローンボリュームである。本発明の各実施形態の説明において、仮想ボリューム22は、クローンボリューム22とも表記される。
クローンボリューム22や他のボリュームに対する、データの書き込みやデータの読み出しは、所定のサイズの領域単位で行われる。以下の説明において、クローンボリューム22における、そのようなI/O(Input/Output)処理単位の領域を、仮想領域と表記する。本発明の各実施形態の説明において、I/O処理の単位は、ページとも表記される。各仮想領域は、その仮想領域が含まれるクローンボリューム22が関連付けられているエンティティボリューム21が含む、いずれかの記憶領域に関連付けられている。以下の説明において、個々の仮想領域に関連付けられている、エンティティボリューム21に含まれる記憶領域を、実領域と表記する。また、以下で説明するように、仮想領域にプールボリューム23に含まれる記憶領域が割り当てられることがある。以下の説明において、仮想領域に割り当てられる、プールボリューム23に含まれる記憶領域を、プール領域と表記する。
クローンボリューム22に含まれる仮想領域に、その仮想領域に関連付けられている実領域に格納されているデータと異なるデータが格納される場合、その仮想領域に、プール領域が割り当てられる。そして、その仮想領域に関連付けられている実領域に格納されているデータと異なるデータは、その仮想領域に割り当てられたプール領域に格納される。
例えば、クローンボリューム22にデータが書き込まれる場合、書き込み先の仮想領域にプール領域が割り当てられていれば、そのデータはそのプール領域に格納される。書き込み先の仮想領域にプール領域が割り当てられていない場合、その仮想領域に、プールボリューム23が含む、いずれの仮想領域にも割り当てられていないプール領域が割り当てられる。そして、クローンボリューム22に書き込まれるデータは、書き込み先の仮想領域に割り当てられたプール領域に格納される。この場合、例えば後述のライト実行部15が、仮想領域へのプール領域の割り当てと、プール領域へのデータの格納の指示を、コントローラ25に対してを行えばよい。そして、コントローラ25が、仮想領域へのプール領域の割り当てと、プール領域へのデータの格納の指示を行えばよい。なお、ボリューム管理装置1とストレージ装置2が同一の装置であるなら、コントローラ25がライト実行部15として動作すればよい。そして、ライト実行部15が、仮想領域へのプール領域の割り当てと、プール領域へのデータの格納を行ってもよい。本発明の各実施形態の説明では、ライト実行部15が、コントローラ25に仮想領域へのプール領域の割り当ての指示を行うことを、ライト実行部15が仮想領域にプール領域の割り当てると表記する。また、ライト実行部15が、コントローラ25にプール領域へのデータの格納の指示を行うことを、ライト実行部15がプール領域にデータを格納すると表記する。
仮想領域からデータが読み出される場合、その仮想領域にプール領域が割り当てられていれば、そのプール領域に格納されているデータが読み出される。仮想領域からデータが読み出される場合、その仮想領域にプール領域が割り当てられていなければ、その仮想領域と関連付けられている実領域から、データが読み出される。この場合、例えば図示されないリード実行部が、仮想領域からデータを読み出す指示を、コントローラ25に対して行えばよい。そして、コントローラ25が、データの読み出しと読み出されたデータのリード実行部への送信を行えばよい。なお、ボリューム管理装置1とストレージ装置2が同一の装置であるなら、コントローラ25がリード実行部として動作すればよい。そして、リード実行部がデータの読み出しを行えばよい。
いずれかの仮想領域格納されるデータが、その仮想領域に関連付けられている実領域に格納されているデータと異なるクローンボリューム22が作成されるのであれば、クローンボリューム22が作成される際にその仮想領域にプール領域が割り当てられる。その場合、例えば後述のボリューム管理部17が、コントローラ25に対して、一部の仮想領域にプール領域が割り当てられたクローンボリューム22を作成する指示と、プール領域にデータを格納する指示を送信すればよい。そして、コントローラ25が、一部の仮想領域にプール領域が割り当てられたクローンボリューム22の作成と、プール領域へのデータの格納を行えばよい。なお、ボリューム管理装置1とストレージ装置2が同一の装置であるなら、コントローラ25がボリューム管理部17として動作すればよい。そして、ボリューム管理部17が、一部の仮想領域にプール領域が割り当てられたクローンボリューム22の作成と、プール領域へのデータの格納を行えばよい。
保存ボリューム24Aおよび保存ボリューム25Bは、例えばコピーオンライト方式によって作成される、クローンボリューム22のスナップショットのイメージが格納されるスナップショットボリュームである。保存ボリューム24Aおよび保存ボリューム25Bに格納されるスナップショットのイメージは、スナップショットを作成する他の方式によって作成されるスナップショットのイメージであってもよい。本発明の各実施形態の説明において、保存ボリューム24A及び保存ボリューム24Bは、それぞれ、スナップショットボリューム24A及びスナップショットボリューム24Bとも表記される。
それぞれのスナップショットボリュームには、それぞれ異なる時刻におけるスナップショットのイメージが格納される。スナップショットのイメージは、例えば、そのスナップショットのイメージが格納されているスナップショットボリュームに関連付けられているクローンボリューム22に、ある時刻において格納されていたデータを復元可能なデータである。本発明の各実施形態の説明において、その時刻は、スナップショットの基準時刻とも表記される。本実施形態では、各スナップショットボリュームに、一つのスナップショットのイメージが格納される。従って、スナップショットボリュームにイメージが格納されているスナップショットの基準時刻は、そのスナップショットボリュームに付与されていると見なすこともできる。スナップショットのイメージを使用して、あるスナップショットの基準時刻におけるクローンボリューム22に格納されていたデータを復元する場合、そのスナップショットのイメージが使用される。複数のスナップショットのイメージが作成されている場合、あるスナップショットの基準時刻におけるクローンボリューム22に格納されていたデータを復元するために、複数のスナップショットのイメージが使用されてもよい。
本実施形態のスナップショットのイメージは、例えば、そのスナップショットの基準時刻から、次に新しい他のスナップショットの基準時刻までの間に、データが書き込まれた各仮想領域に、そのスナップショットの基準時刻に格納されていたデータである。各仮想領域には、各スナップショットボリュームに含まれる記憶領域が関連付けられている。以下の説明において、各スナップショットボリュームに含まれる記憶領域は、保存領域とも表記される。各仮想領域に格納されていたデータは、その仮想領域に関連付けられている保存領域に格納される。なお、本発明の各実施形態の説明において、仮想領域にプール領域が割り当てられている場合、その仮想領域に格納されているデータは、その仮想領域に割り当てられているプール領域に格納されているデータを指す。さらに、仮想領域にプール領域が割り当てられていない場合、その仮想領域に格納されているデータは、その仮想領域に関連付けられている実領域に格納されているデータを指す。また、スナップショットボリュームにイメージが格納されているスナップショットが作成されてから、次のスナップショットが作成されるまでの期間は、そのスナップショットボリュームの保存期間とも表記される。
スナップショットボリューム24A及びスナップショットボリューム24Bは、それぞれ、実ボリュームであっても、仮想ボリュームであってもよい。スナップショットボリューム24A及びスナップショットボリューム24Bが仮想ボリュームである場合、プールボリューム23に含まれる記憶領域が、スナップショットボリューム24A及びスナップショットボリューム24Bに割り当てられればよい。例えば、スナップショット設定部16あるいはコントローラ25が、スナップショットボリューム24A及びスナップショットボリューム24Bに、プールボリューム23に含まれる記憶領域を割り当てればよい。
図4は、ストレージ装置2の構成の例を表すブロック図である。図4の例では、1個のエンティティボリュームに3個のクローンボリューム22が関連付けられている。また、それぞれのクローンボリューム22に、2個のスナップショットボリュームが関連付けられている。
管理情報記憶部10は、クローンボリューム22とスナップショットボリュームの関係を表すデータを含む、後述されるボリューム対応テーブルを記憶する。
命令受信部11は、ホスト装置3から、ライト命令、スナップショット作成命令、及びリストア命令を受信する。
ライト命令は、クローンボリューム22に含まれるいずれかの仮想領域にデータを書き込む指示を表す命令である。ライト命令は、書き込まれるデータである更新データと、データが書き込まれる仮想領域のアドレスなどの識別子とを含んでいればよい。命令受信部11は、受信したライト命令を、スナップショット実行部14に送信する。
スナップショット作成命令は、新しくスナップショットボリュームを追加し、追加されたスナップショットボリュームにスナップショットのイメージを作成するための設定を行う指示を表す命令である。以下の説明において、スナップショットボリュームにスナップショットのイメージを作成するための設定は、スナップショットの設定とも表記される。命令受信部11は、受信したスナップショット作成命令を、ボリューム管理装置17に送信する。
リストア命令は、スナップショットボリュームに含まれるスナップショットを使用して、クローンボリューム22の状態を、そのスナップショットの基準時刻におけるクローンボリューム22の状態に戻す操作である、リストアを指示する命令である。本発明の各実施形態の説明において、リストアにおいて使用されるスナップショットが格納されるスナップショットボリュームは、リストア対象スナップショットボリュームとも表記される。すなわち、リストアによって、クローンボリューム22の状態は、リストア対象スナップショットボリュームに格納されているスナップショットの基準時刻におけるクローンボリューム22の状態に戻される。複数のスナップショットボリュームが存在する場合、リストア命令は、リストア対象スナップショットボリュームのボリューム識別子を含んでいてもよい。ボリューム識別子は、スナップショットボリュームの識別子である。命令受信部11は、受信したリストア命令を、リストア実行部13に送信する。
命令受信部11は、例えば、クローンボリューム22からデータを読み出す指示を表すリード命令等、他の命令を受信してもよい。
基準状態記憶部12は、それぞれのスナップショットボリュームに対して、例えばスナップショットボリュームのボリューム識別子に関連付けて、基準状態を記憶する。基準状態は、スナップショットボリュームに格納されるスナップショットが作成されたとき、仮想領域が、プール領域が割り当てられていない状態である初期状態であったか否かを特定するデータである。基準状態は、それぞれのスナップショットボリュームに対して、そのスナップショットボリュームに格納されるスナップショットの保存期間にデータが書き込まれたそれぞれの仮想領域が初期状態であったか否かを特定するデータであればよい。基準状態は、例えば、各仮想領域に対して、仮想領域の識別子に関連付けられた、仮想領域が初期状態でなかったことを表す値又は仮想領域が初期状態であったことを表す値である。仮想領域の識別子は、例えば、仮想領域のアドレスである。仮想領域が初期状態であったか否かを表す値は、仮想領域にプール領域が割り当てられているか否かを特定する値と言い換えることができる。保存期間は、上述のように、そのスナップショットボリュームに格納されるスナップショットが作成されてから、次のスナップショットが作成されるまでの期間である。最新のスナップショットが格納されているスナップショットボリュームの保存期間は、そのスナップショットが作成された時点以後の期間である。
基準状態記憶部12は、基準状態を、後述される更新履歴テーブルとして、テーブルの形で記憶していてもよい。
割当状態記憶部18は、仮想領域にプール領域が割り当てられているか否かを表す割当状態を、仮想領域毎に記憶する。割当状態記憶部18は、仮想領域の割当状態を、その仮想領域の識別子に関連付けて記憶していればよい。割当状態は、例えば、仮想領域にプール領域が割り当てられているか否かを特定する値である。
割当状態記憶部18は、割当状態を、後述されるクローンボリューム差分管理テーブルとして、テーブルの形で記憶していてもよい。
スナップショット設定部16は、命令受信部11がスナップショット作成命令を受信すると、新しくスナップショットボリュームを追加する。その際、スナップショット設定部16は、まず、使用されていないボリュームを、新しく追加されるスナップショットボリュームとして選択する。選択されるボリュームは、既存のボリュームであってもよい。選択されるボリュームは、新しく作成されたボリュームであってもよい。スナップショット設定部16が、新しく作成されたボリュームを選択する場合、例えばボリューム管理部17がそのボリュームを作成すればよい。そして、スナップショット設定部16は、例えば、後述されるボリューム対応テーブルに、クローンボリューム22の識別子と、追加されるスナップショットボリュームの識別子を追加してもよい。
そして、スナップショット設定部16は、追加されたスナップショットボリュームの基準状態を、そのスナップショットボリュームのボリューム識別子に関連付けて、基準状態記憶部12に格納する。その際、スナップショット設定部16は、まず、各仮想領域の割当状態を割当状態記憶部18から読み出せばよい。そして、スナップショット設定部16は、読み出された割当状態を、追加されたスナップショットボリュームの基準状態として、基準状態記憶部12に格納すればよい。スナップショット設定部16は、例えば、後述されるクローンボリューム差分管理テーブルの形で記憶される割当状態を、追加されたスナップショットボリュームに関連付けられた更新履歴テーブルの形で記憶される基準状態として基準状態記憶部12にコピーしてもよい。
スナップショット設定部16が、追加されたスナップショットボリュームの基準状態を、そのスナップショットボリュームのボリューム識別子に関連付けて、基準状態記憶部12に格納することにより、基準状態を格納した時刻が定まる。このことは、スナップショット設定部16が、基準状態を格納した時刻を、追加されたスナップショットボリュームに付与すると見なすこともできる。本発明の各実施形態では、基準状態を格納した時刻が基準時刻であってもよい。
スナップショットの設定は、例えば、上述された、スナップショットボリュームの追加と、追加されたスナップショットボリュームに関連付けられた基準状態の格納を表していてもよい。上述のように追加されたスナップショットボリュームに関連付けられた基準状態の格納は、クローンボリューム差分管理テーブルをコピーすることによって更新履歴テーブルを作成することであってもよい。スナップショットの設定は、さらに、追加されたスナップショットボリュームのため、後述されるスナップショット差分管理テーブルを作成することを含んでいてもよい。スナップショットの設定は、スナップショットボリュームに含まれる各保存領域を初期化することを含んでいてもよい。
保存状態記憶部19は、スナップショットボリュームの各保存領域に、保存データが格納されているか否かを特定する保存状態を、スナップショットボリューム毎に記憶する。保存状態は、例えば、スナップショットボリュームに含まれる保存領域の各々に対する、保存領域に関連付けられた、保存データが格納されているか否かを特定する値である。保存データが格納されているか否かを特定する値は、保存領域の識別子に関連付けられていればよい。保存領域の識別子は、例えば、保存領域のアドレスである。保存データが格納されているか否かを特定する値は、保存領域に関連付けられた仮想領域の識別子に関連付けられていればよい。スナップショットボリューム毎の保存状態は、スナップショットボリュームに関連付けられていればよい。すなわち、スナップショットボリューム毎の保存状態は、スナップショットボリュームのボリューム識別子に関連付けられていてもよい。
保存状態記憶部19は、保存状態を、後述されるスナップショット差分管理テーブルとして、テーブルの形で記憶していてもよい。
スナップショット実行部14は、命令受信部11がライト命令を受信すると、ライト命令によってデータが書き込まれる仮想領域を特定する。スナップショット実行部14は、最も新しいスナップショットが格納されているスナップショットボリュームの、特定された仮想領域に関連付けられている保存領域に、データが格納されているか否かを判定する。仮想領域に関連付けられている保存領域に格納されているデータは、そのスナップショットボリュームに格納されるスナップショットが作成された時点において、そのスナップショットが作成された後更新された仮想領域に格納されていたデータである。本発明の各実施形態の説明において、スナップショットボリュームに格納されているデータは、保存データとも表記される。保存データが格納されていなければ、スナップショット実行部14は、特定された仮想領域に格納されているデータを、その仮想領域に関連付けられている保存領域に、保存データとして格納する。保存データが格納されていれば、スナップショット実行部14は、特定された仮想領域に関連付けられている保存領域に、データを格納しない。
スナップショット実行部14は、特定された仮想領域に関連付けられている保存領域に保存データが格納されているか否かを、後述されるスナップショット差分管理テーブルに基づいて判定してもよい。
ライト実行部15は、命令受信部11がライト命令を受信すると、ライト命令による更新の対象である仮想領域にプール領域が割り当てられているか否かを、その仮想領域に関連付けられた、前述の割当状態に基づき検出する。ライト命令による更新の対象である仮想領域にプール領域が割り当てられている場合、ライト実行部15は、その仮想領域に関連付けられた割当状態を変更しない。そして、ライト実行部15は、ライト命令による更新の対象である仮想領域に、ライト命令に含まれる更新データを書き込む。前述のように、仮想領域に書き込まれたデータは、その仮想領域に割り当てられたプール領域に格納される。ライト命令による更新の対象である仮想領域にプール領域が割り当てられていない場合、ライト実行部15は、プールボリューム23に含まれる、使用されていないプール領域を、仮想領域に割り当てる。仮想領域に割り当てられるプール領域の選択は、コントローラ25によって行われてもよい。ライト実行部15が、仮想領域に割り当てるプール領域を選択してもよい。そして、ライト実行部15は、プール領域を割り当てた仮想領域に関連付けられている割当状態を、その割当状態が仮想領域にプール領域が割り当てられていることを表すよう、変更する。さらに、ライト実行部15は、ライト命令による更新の対象である仮想領域に、ライト命令に含まれる更新データを書き込む。
前述のように、割当状態は、後述されるクローンボリューム差分管理テーブルとして、テーブルの形で割当状態記憶部18に格納されていてもよい。
図3は、以上で説明した、実領域と、仮想領域と、プール領域と、保存領域との関係を表すブロック図である。図3には、スナップショット実行部14及びライト実行部15によって行われる動作の一部も含まれる。図3によると、実領域1は、仮想領域1に関連付けられている。実領域2は、仮想領域2に関連付けられている。実領域Nは、仮想領域Nに関連付けられている。仮想領域2は、保存領域2Aに関連付けられている。最初の状態では、スナップショットボリューム24Bは存在せず、仮想領域2は、保存領域2Bに関連付けられていないものとする。
いずれの仮想領域にも一度もデータの書き込みが発生していない場合、仮想領域から読み出されるデータは、その仮想領域に関連付けられている実領域に格納されているデータである。この場合、スナップショットボリューム24Aに関連付けられている基準時刻において、仮想領域2に格納されているデータは、仮想領域2に関連付けられている実領域2に格納されているデータであると見なすことができる。例えば仮想領域2に対する、最初のデータの書き込みが発生した場合、実領域2に格納されているデータが、保存データとして、保存領域2Aにコピーされる。そして、仮想領域2に、例えばプール領域1が割り当てられる。仮想領域2に書き込まれたデータは、プール領域1に格納される。
この状態では、スナップショットボリューム24Aに関連付けられている基準時刻において、仮想領域2に格納されているデータは、保存領域2に格納されている。したがって、仮想領域2にさらに別の書き込みが発生した場合、仮想領域2から保存領域2Aへのコピーは行われない。
次のスナップショットボリューム2が追加された場合、仮想領域2に、例えば保存領域2が新たに関連付けられる。この状態において、スナップショットボリューム24Bに関連付けられている基準時刻において、仮想領域2に格納されているデータは、仮想領域2に割り当てられているプール領域1に格納されているデータである。そして、仮想領域2にさらにデータの書き込みが発生した場合、プール領域1格納されているデータが、保存データとして、保存領域2Bにコピーされる。
リストア実行部13は、命令受信部11がリストア命令を受信すると、そのリストア命令にボリューム識別子が含まれるスナップショットボリュームに付与された基準時刻以後に、更新が行われた仮想領域を特定する。以下の説明では、受信されたリストア命令にボリューム識別子が含まれるスナップショットボリュームは、リストア対象スナップショットボリュームとも表記される。リストア実行部13は、例えば、まず、リストア対象スナップショットボリュームと、そのスナップショットボリュームより上位のスナップショットボリュームの、スナップショット差分管理テーブルに基づき、リストア差分管理テーブルを作成すればよい。リストア実行部13は、作成されたリストア差分管理テーブルを、対象情報記憶部20に格納する。リストア実行部13は、作成されたリストア差分管理テーブルに基づき、リストア対象スナップショットボリュームに付与された基準時刻以後に、更新が行われた仮想領域を特定すればよい。あるスナップショットボリュームより上位のスナップショットボリュームは、あるスナップショットボリュームの基準時刻より後の基準時刻が付与されているスナップショットボリュームを意味する。リストア差分管理テーブルは、リストア対象スナップショットボリュームに付与された基準時刻以後に更新された仮想領域を表すデータを含む。リストア差分管理テーブル及びリストア差分管理テーブルの作成方法は、後述される。以下の説明において、リストア対象スナップショットボリュームに付与された基準時刻以後に更新が行われた仮想領域を、更新仮想領域と表記する。
次に、リストア実行部13は、リストア対象スナップショットボリュームに付与された基準時刻において、各更新仮想領域にプール領域が割り当てられていたか否かを判定する。すなわち、リストア実行部13は、リストア対象スナップショットボリュームに付与された基準時刻において、各更新仮想領域が初期状態であったか否かを判定する。リストア実行部13は、リストア対象スナップショットボリュームのボリューム識別子に関連付けられている基準状態に基づき、各更新仮想領域が初期状態であったか否かを判定すればよい。更新履歴テーブルの形で基準状態が格納されているのであれば、リストア実行部13は、リストア対象スナップショットボリュームのボリューム識別子に関連付けられている更新履歴テーブルに基づき、各更新仮想領域が初期状態であったか否かを判定すればよい。
更新仮想領域にリストア対象スナップショットボリュームに付与された基準時刻においてプール領域が割り当てられていた場合、リストア実行部13は、リストア対象スナップショットボリューム格納されている保存データを、更新仮想領域に書き込む。この保存データは、リストア対象スナップショットボリュームに付与された基準時刻において、更新仮想領域に格納されていたデータである。すなわち、この保存データは、リストア対象スナップショットボリュームに付与された基準時刻において、更新仮想領域に割り当てられているプール領域に格納されていたデータである。更新仮想領域にリストア対象スナップショットボリュームに付与された基準時刻においてプール領域が割り当てられていなかった場合、リストア実行部13は、更新仮想領域へのプール領域の割り当てを解除する。
対象情報記憶部20は、上述のリストア差分管理テーブルを記憶する。リストア差分管理テーブルについては、後で詳細に説明する。
次に、第1の実施形態に基づくストレージシステム100の構成例について、詳細に説明する。本構成例におけるストレージシステム100の構成は、図2に示すストレージシステム100の構成と同じである。
図5は、本構成例のボリューム管理装置1の構成を表すブロック図である。
図5を参照すると、本構成例のボリューム管理装置1は、コマンド処理部106と、リストア処理部107と、管理情報記憶部10と、割当状態記憶部18と、保存状態記憶部19と、対象情報記憶部20と、基準状態記憶部12とを含む。また、管理情報記憶部10と、割当状態記憶部18と、保存状態記憶部19と、対象情報記憶部20と、基準状態記憶部12は、まとめてテーブル記憶部113と表記される。
コマンド処理部106は、命令受信部11と、スナップショット作成命令実行部1062と、リストア命令実行部1063と、ライト命令実行部1064とを含む。命令受信部11は、コマンド判別部1061を含む。スナップショット作成命令実行部1062は、スナップショット作成部10621と、更新履歴テーブル作成部10622とを含む。スナップショット作成部10621は、上述のボリューム管理部17として機能する。更新履歴テーブル作成部10622は、上述のスナップショット設定部16として機能する。ライト命令実行部1064は、上述の、スナップショット実行部14及びライト実行部15の機能を含む。
リストア処理部107は、リストアボリューム検索部1071と、リストアアドレス検索部1072と、データコピー有無判定部1073と、リストアデータコピー部1074と、CV(Clone Volume)参照元変更部1075とを含む。
リストア命令実行部1063と、リストア処理部107が、上述のリストア実行部13として機能する。
図6は、テーブル記憶部113の構成を表すブロック図である。上述のテーブル記憶部113は、管理情報記憶部10と、割当状態記憶部18と、保存状態記憶部19と、対象情報記憶部20と、基準状態記憶部12を含む。管理情報記憶部10は、ボリューム対応テーブル108を記憶する。割当状態記憶部18は、クローンボリューム差分管理テーブル109を記憶する。保存状態記憶部19は、スナップショット差分管理テーブル110を記憶する。対象情報記憶部20は、リストア差分管理テーブル111を記憶する。基準状態記憶部12は、更新履歴テーブル112を記憶する。
管理情報記憶部10と、割当状態記憶部18と、保存状態記憶部19と、対象情報記憶部20と、基準状態記憶部12の一部又は全部が、ストレージ装置2に含まれていてもよい。
ボリューム対応テーブル108は、スナップショット複製中のクローンボリューム22と、そのクローンボリューム22に関連付けられたスナップショットボリュームの関係と、リストア処理中のボリュームを特定する情報を含むテーブルである。スナップショット複製中は、クローンボリューム22にデータの書き込みが発生した場合、関連付けられたスナップショットボリュームに格納されているスナップショットのイメージが、上述のように更新される状態を表す。
図7は、ボリューム対応テーブル108の例を表す図である。クローンボリューム番号は、クローンボリュームのボリューム番号である。本実施形態において、ボリューム番号がボリュームの識別子である。第1世代のスナップショットボリュームは、最も新しいスナップショットボリュームである。第2世代のスナップショットボリュームは、次に新しいスナップショットボリュームである。本実施形態では、リストアはバックグラウンド処理として行われる。リストア状態は、リストア処理中であるか否かを表す値である。「なし」はリストア処理中でないことを表す値である。「リストア中」はリストア処理中であることを表す値である。これらの値は、数値や他の値で表現されていてもよい。スナップショットボリュームのボリューム番号及びリストア状態が「−」であるクローンボリュームは、スナップショット複製中でないことを表す。例えば、クローンボリュームのボリューム番号がCV0である列において、第1世代のスナップショットボリュームのボリューム番号SV00に対するリストア状態は「なし」である。同じ列の、第2世代のスナップショットボリュームのボリューム番号SV01に対するリストア状態は「リストア中」である。この行は、ボリューム番号がCV0であるクローンボリュームに対して、ボリューム番号がSV01であるスナップショットボリュームに対応付けられている基準時刻における状態に戻す、リストア処理中であることを表している。
クローンボリューム差分管理テーブル109は、クローンボリューム22にデータが存在するかどうかを、クローンボリューム22のI/O処理単位で表す値を含むテーブルである。その値は、0か1の値を取るフラグによって表されていてもよい。前述のように、本実施形態の説明では、I/O処理単位は、ページ単位と表記される。一つのページが、上述の仮想領域である。「クローンボリューム22のページにデータが存在する」は、そのページすなわち仮想領域にプール領域が割り当てられ、そのプール領域にデータが格納されていることを表す。
図8は、クローンボリューム差分管理テーブル109の例を表す図である。図8から図11までの図において、領域のアドレスはページ番号によって表されている。図8におけるページ番号は、クローンボリューム22におけるページ番号である。すなわち、図8におけるページ番号は、仮想領域の識別子に相当する。なお、本実施形態では、互いに関連付けられている実領域と仮想領域のページ番号は同じである。同様に、互いに関連付けられている仮想領域及び保存領域のページ番号は同じである。図8のクローンボリューム差分管理テーブル109における各列は、その列のボリューム番号で表されるクローンボリュームの、各行のページ番号によって特定されるページに、実データが存在するか否かを表す。クローンボリューム差分管理テーブル109における第n行第m列の値が、第m列におけるボリューム番号によって特定されるクローンボリュームにおける、第n行におけるページ番号によって特定される仮想領域の、上述の割当状態である。
図8における「1」は、ページに実データが存在することを表す。すなわち、「1」は、仮想領域にプール領域が割り当てられ、そのプール領域にデータが格納されていることを表す。また、「0」は、ページに実データが存在しないことを表す。すなわち、「0」は、仮想領域にプール領域が割り当てられておらず、その仮想領域からデータが読み出される場合、その仮想領域に関連付けられた実領域からデータが読み出されることを表す。図8において、「−」は、クローンボリュームがエンティティボリュームに関連付けられていないことを表す。
図8において、例えば、ボリューム番号がCV0であるクローンボリュームの、ページ番号がpage2であるページのフラグは1である。従って、このページには、実データが存在する。同じクローンボリュームのページ番号がpage3であるページのフラグは0である。従って、このページには、実データが存在しない。このページからデータが読み出される場合、エンティティボリュームのページ番号がpage3であるページが参照される。すなわち、このページからデータが読み出される場合、エンティティボリュームのページ番号がpage3であるページからデータが読み出される。
スナップショット差分管理テーブル110は、スナップショットボリュームにデータが存在するかどうかを、ページ単位で表す値を含むテーブルである。その値は、0か1の値を取るフラグによって表されていてもよい。
図9は、スナップショット差分管理テーブル110の例を表す図である。図9のページ番号は、スナップショットボリュームに含まれるページのページ番号である。スナップショットボリュームに含まれるページは、上述の保存領域である。保存領域に格納されるデータは、上述の保存データである。保存領域のページ番号は、その保存領域に関連付けられている仮想領域のページ番号と同じである。図9に示すスナップショット差分管理テーブル110の各行は、その行のボリューム番号で表されるスナップショットボリュームの、各行のページ番号で表されるページにデータが存在するかどうかを表す。図9に示す例において、「1」はデータが存在することを表す。「0」はデータが存在しないことを表す。図9に示す例では、ボリューム番号がSV01であるスナップショットボリュームに含まれる、ページ番号がpage0であるページには、データが存在しない。また、ボリューム番号がSV01であるスナップショットボリュームに含まれる、ページ番号がpage1であるページには、データが存在する。スナップショット差分管理テーブル110の第n行第m列における値が、第m列におけるボリューム番号によって特定されるスナップショットボリュームにおける、第n行におけるページ番号で特定される保存領域の、上述の保存状態である。
リストア差分管理テーブル111は、リストア処理中のスナップショットボリュームに対して、リストアが必要であるか否かを、ページ単位で表す値を含むテーブルである。その値は、0か1の値を取るフラグによって表されていてもよい。例えばリストア実行部13が、リストア開始時に、リストア対象スナップショットボリュームとそのリストア対象スナップショットボリュームの上位のスナップショットボリュームのスナップショット差分管理テーブル110に基づき、リストア差分管理テーブル111を生成する。スナップショット差分管理テーブル110に含まれる値が、上述される0か1であるなら、リストア実行部13は、リストア対象スナップショットボリュームと上位のスナップショットボリュームのスナップショット差分管理テーブル110の論理和をとることによって、リストア差分管理テーブル111を作成すればよい。なお、リストア対象スナップショットボリュームの上位のスナップショットボリュームは、そのリストア対象スナップショットボリュームより新しいスナップショットボリュームである。すなわち、リストア対象スナップショットボリュームの上位のスナップショットボリュームは、そのリストア対象スナップショットボリュームに付与された基準時刻より新しい基準時刻が付与されたスナップショットボリュームである。
図10は、リストア差分管理テーブル111の例を表す図である。図10は、ボリューム番号がSV01であるスナップショットボリュームに基づくリストアにおいて、各行におけるページ番号で表されるページが、リストアが必要であるかどうかを表す。値が「0」である行におけるページ番号で表されるページは、リストアが必要でないことを表す。値が「1」である行におけるページ番号で表されるページは、リストアが必要であることを表す。図10に示す例は、ページ番号がpage1であるページは、リストアが必要である。
更新履歴テーブル112は、スナップショットボリュームに付与された基準時刻における、そのスナップショットボリュームのペアであるクローンボリュームの差分配置を表すテーブルである。基準時刻は、例えば、スナップショットボリューム作成時である。スナップショットボリュームのペアのクローンボリュームは、そのスナップショットボリュームに関連付けられているクローンボリューム22である。差分配置は、クローンボリュームにおける、プール領域が割り当てられているページと、プール領域が割り当てられていないページとを特定する情報である。差分配置は、例えば、スナップショットボリューム毎の、それぞれのページにおける、ページ番号に関連付けられた、プール領域が割り当てられていることを表す値又はプール領域が割り当てられていないことを表す値である。その値は、0又は1の値を取るフラグによって表されていてもよい。例えばスナップショット設定部16が、スナップショットボリューム作成時に、そのスナップショットボリュームのペアであるクローンボリュームの差分管理テーブルをコピーすることによって、更新履歴テーブル112を作成する。リストア実行部13が、リストアを行う際に、クローンボリュームへのデータコピーが必要か、もしくはデータコピーせずにエンティティボリューム参照状態に戻すかを判定するために、更新履歴テーブル112を使用する。
図11は、更新履歴テーブル112の例を表す図である。図11に示す更新履歴テーブル112の各列は、その列におけるボリューム番号で表されるスナップショットボリュームからリストアを行う際に、各行におけるページ番号で表されるページにおいてデータのコピーを行うか否かを表す。図11に示す例では、ある列において値が「0」である行は、その列におけるボリューム番号で表されるスナップショットボリュームからリストアを行う際に、その行におけるページ番号で表されるページでは、データのコピーを行わないことを表す。また、ある列において値が「1」である行は、その列におけるボリューム番号で表されるスナップショットボリュームからリストアを行う際に、その行におけるページ番号で表されるページでは、データのコピーを行うことを表す。データのコピーは、値が「1」である行におけるページ番号を持つスナップショットボリュームのページから、同じページ番号を持つクローンボリューム22のページに対して行われる。更新履歴テーブル112における第n行第m列の値が、第m列において示されるボリューム番号によって特定されるスナップショットボリュームにおける、第n行において示されるページ番号によって特定される仮想領域の、上述の基準状態である。
例えば、ボリューム番号がSV01である列において、ページ番号がpage3である行は、フラグが1である。従って、ボリューム番号がSV01であるスナップショットボリュームからクローンボリューム22にリストアを行う際、ページ番号がpage3であるページにおいて、データのコピーが行われる。一方、ボリューム番号がSV01である列において、ページ番号がpage0である行は、フラグが1である。従って、ボリューム番号がSV01であるスナップショットボリュームからクローンボリューム22にリストアを行う際、ページ番号がpage0であるページにおいて、データのコピーは行われない。リストアの際、クローンボリューム22のページ番号がpage0であるページに対するプール領域の割り当ては解除される。すなわち、クローンボリューム22のページ番号がpage0であるページは、エンティティボリュームを参照する状態に変更される。言い換えると、クローンボリューム22のページ番号がpage0であるページからデータを読み出すと、そのページに関連付けられているエンティティボリュームのページからデータが読み出される。
コマンド処理部106は、ホスト装置3から命令を受信し、上述されるコマンド処理が完了するとレスポンスを返却する。例えば命令受信部11が、命令の受信とレスポンスの返却を行う。命令受信部11が受信したコマンドは、コマンド判別部1061に渡される。
コマンド判別部1061は、ホスト装置3から受信した命令の種類を判別する。
スナップショット作成命令実行部1062は、コマンド判別部1061がスナップショット作成命令を受信すると、スナップショット作成命令処理を実行する。スナップショット作成部10621は、スナップショット作成対象のクローンボリューム22と、スナップショットボリュームとを関連付ける値を、ボリューム対応テーブル108に追加する。スナップショット作成対象のクローンボリューム22は、スナップショットのイメージが作成されるクローンボリューム22である。そして、スナップショット作成部10621は、スナップショット差分管理テーブル110を作成する。続いて、更新履歴テーブル作成部10622は、クローンボリューム差分管理テーブル109をコピーすることによって、更新履歴テーブル112を作成する。
リストア命令実行部1063は、コマンド判別部1061がリストア命令を受信すると、リストア差分管理テーブル111を作成する。リストア命令実行部1063は、リストア対象スナップショットボリュームと、そのリストア対象スナップショットボリュームの上位世代のスナップショットボリュームの、スナップショット差分管理テーブル110に含まれる各値の論理和をとることによって、リストア差分管理テーブル111を作成する。そして、リストア命令実行部1063は、ボリューム対応テーブル108のリストア対象スナップショットボリュームの状態を、リストア処理中に設定する。なお、リストア命令は、リストアが行われるクローンボリューム22のボリューム番号と、リストア対象スナップショットボリュームのボリューム番号を含む。
ライト命令実行部1064は、コマンド判別部1061がスナップショット複製中のクローンボリューム22へのライト命令を受信すると、スナップショットボリュームへの追い出しコピーの処理とクローンボリューム22へのライト処理とを実施する。追い出しコピーの処理は、ライト命令によってデータが書き込まれるクローンボリューム22のページの上述の保存データが、スナップショットボリュームに格納されていない場合、そのページに格納されているデータを、スナップショットボリュームにコピーする処理である。ライト処理は、ライト命令に従って、クローンボリューム22にデータを書き込む処理である。
リストア処理部107は、上述のように、リストアボリューム検索部1071と、リストアアドレス検索部1072と、データコピー有無判定部1073と、リストアデータコピー部1074と、CV参照元変更部1075とを備える。リストア処理部107は、リストア処理を実行する。リストア処理は、クローンボリューム22の状態を、リストア対象スナップショットボリュームに付与されている基準時刻におけるクローンボリューム22の状態に戻す処理である。
リストアボリューム検索部1071は、ボリューム対応テーブル108を検索することによって、ボリューム対応テーブル108からリストア処理中のボリュームを抽出する。
リストアアドレス検索部1072は、リストアボリューム検索部1071が抽出したボリュームについて、リストア差分管理テーブル111のフラグが1であるアドレスを検索することにより、リストアを行うページのアドレスを抽出する。前述のように、アドレスは、例えばページ番号によって表される。以下の説明においても同様に、アドレスは、例えばページ番号によって表される。
データコピー有無判定部1073は、リストアアドレス検索部1072が抽出したアドレスに対する、更新履歴テーブル112に含まれるフラグに基づき、そのアドレスが「データコピーあり」であるか「データコピーなし」であるかを判定する。データコピー有無判定部1073は、図11に示す例において、更新履歴テーブル112に含まれるフラグが1である場合、データコピーありと判定する。データコピー有無判定部1073は、更新履歴テーブル112に含まれるフラグが0である場合、データコピーなしと判定する。
リストアデータコピー部1074は、リストアアドレス検索部1072が抽出したアドレスに対して、データコピー有無判定部1073が「データコピーあり」と判定した場合、次の処理を行う。まず、リストアデータコピー部1074は、スナップショットボリュームのそのアドレスのページに格納されているデータを、クローンボリューム22の、同じアドレスのページにコピーする。そして、リストアデータコピー部1074は、リストア差分管理テーブル111におけるそのアドレスに対するフラグを、リストアを行わないことを表す値に変更する。その値は、図10に示す例では「0」である。
CV参照元変更部1075は、リストアアドレス検索部1072が抽出したアドレスに対して、データコピー有無判定部1073が「データコピーなし」と判定した場合、次の処理を行う。CV参照元変更部1075は、まず、リストアが行われるクローンボリューム22において、抽出されたアドレスのページに対するプール領域を割り当てを解除する。すなわち、CV参照元変更部1075は、リストアが行われるクローンボリューム22において、抽出されたアドレスのページからデータが読み出される場合、エンティティボリュームにおける同じアドレスのページからデータが読み出される状態にする。そして、CV参照元変更部1075は、クローンボリューム差分管理テーブル109において、リストアが行われるクローンボリューム22のボリューム番号の行における値を、実データが存在しないことを表す値に変更する。その値は、図8に示す例では例では「0」である。さらに、CV参照元変更部1075は、リストア差分管理テーブル111において、抽出されたアドレスに対する値を、リストアを行わないことを表す値に変更する。その値は、図10に示す例では例では「0」である。
次に、本構成例に基づく本実施形態のボリューム管理装置1の動作について、図面を参照して詳細に説明する。
図12は、本実施形態のボリューム管理装置1のコマンド処理部106が行う動作全体を表すフローチャートである。
図12を参照すると、まず、命令受信部11が、ホスト装置3から命令を受信する(ステップS101)。
次に、コマンド判別部1061が、命令の種類を判定する(ステップS102)。
判定の結果、命令がスナップショット作成命令である場合(ステップS103においてYes)、スナップショット作成命令実行部1062が、スナップショット作成処理を実行する(ステップS104)。スナップショット作成処理は、後で詳細に説明される。
命令がスナップショット作成命令でなく(ステップS103においてNo)、命令がリストア命令である場合(ステップS105においてYes)、リストア命令実行部1063が、リストア開始処理を実行する(ステップS106)。リストア開始処理、後で詳細に説明される。
命令がリストア命令でなく(ステップS105においてNo)、命令がライト命令である場合(ステップS107においてYes)、ライト命令実行部1064がライト処理を実行する(ステップS108)。ライト処理は、後で詳細に説明される。
命令がライト命令でない場合(ステップS107においてNo)、ボリューム管理装置1は、受信した命令に応じた処理を実行する(ステップS109)。例えば、命令がリード命令である場合、図示されないリード実行部が、クローンボリューム22におけるリード命令によって指定されるアドレスを持つページから、データを読み出せばよい。ステップS109の処理についての詳細な説明は省略する。
ステップS104、ステップS106、ステップS108、あるいはステップS109の処理が終了すると、命令受信部11は、ホスト装置3にレスポンスを返却する。
次に、本実施形態のボリューム管理装置1のライト命令実行部1064が実行する、図12に示されるステップS108のライト処理について、図面を参照して詳細に説明する。
図13は、本実施形態のボリューム管理装置1の、図12に示されるステップS108におけるライト処理の動作を表すフローチャートである。
まず、ライト命令実行部1064に含まれるスナップショット実行部14が、ライト命令による書き込み先の保存データが、最新のスナップショットボリュームに存在するか否かを検出する(ステップS201)。ライト命令による書き込み先の保存データは、ライト命令によってデータが書き込まれる保存領域に対する上述の保存データである。前述のように、保存領域は、スナップショットボリュームに含まれるページである。
例えば、スナップショット実行部14は、ライト命令からデータの書き込み先であるページのページ番号を抽出する。そして、スナップショット実行部14は、スナップショット差分管理テーブル110から、最新世代のスナップショットボリュームにおいて、抽出されたページ番号を持つページに、データが存在するか否かを表す値を読み出す。読み出された値が、データが存在することを表す値である場合、スナップショット実行部14は、保存データが存在することを検出する。読み出された値が、データが存在しないことを表す値である場合、スナップショット実行部14は、保存データが存在しないことを検出する。
ライト命令による書き込み先の保存データが存在する場合(ステップS202においてYes)、ボリューム管理装置1の動作はステップS105に進む。
ライト命令による書き込み先の保存データが存在しない場合(ステップS202においてNo)、スナップショット実行部14は、ライト命令の書き込み先からデータを読み出す。そして、スナップショット実行部14は、読み出されたデータを、最新のスナップショットボリュームの、ライト命令による書き込み先である仮想領域に関連付けられた保存領域に格納する(ステップS203)。
第1の実施形態の構成例において、仮想領域のクローンボリューム22におけるアドレスと、その仮想領域に関連付けられた保存領域のスナップショットボリュームにおけるアドレスは同一である。その場合、スナップショット実行部14は、ライト命令による書き込み先のアドレスと同一のアドレスを持つ、スナップショットボリュームのページに、読み出されたデータを格納すればよい。なお、ステップS203の動作が、追い出しコピーの処理である。
次に、スナップショット実行部14は、ステップS203においてデータが格納された保存領域の状態を、保存データありに変更する(ステップS204)。
スナップショット実行部14は、スナップショット差分管理テーブル110に記録されている、最新世代のスナップショットボリュームにおける、抽出されたページ番号を持つページに対する、値を、データが存在することを表す値に変更すればよい。
次に、ライト命令実行部1064に含まれるライト実行部15が、ライト命令による書き込み先である仮想領域に、プール領域が割り当てられているか否かを検出する(ステップS205)。
ライト実行部15は、例えば、クローンボリューム差分管理テーブル109から、データが書き込まれるクローンボリューム22における、書き込み先のアドレスに対して記録されている、クローンボリューム22に実データが存在するか否かを表す値を読み出す。読み出された値が、実データが存在することを表す値である場合、ライト実行部15は、ライト命令による書き込み先である仮想領域に、プール領域が割り当てられていることを検出する。読み出された値が、実データが存在しないことを表す値である場合、ライト実行部15は、ライト命令による書き込み先である仮想領域に、プール領域が割り当てられていないことを検出する。
ライト命令の書き込み先である仮想領域に、プール領域が割り当てられている場合(ステップS206においてYes)、ボリューム管理装置1の動作は、ステップS209に進む。
ライト命令の書き込み先である仮想領域に、プール領域が割り当てられていない場合(ステップS206においてNo)、ライト実行部15は、その仮想領域に、プール領域を割り当てる(ステップS207)。
次に、ライト実行部15は、ライト命令の書き込み先である仮想領域の状態を、更新ありに変更する(ステップS208)。
ライト実行部15は、クローンボリューム差分管理テーブル109に、データが書き込まれるクローンボリューム22における、書き込み先のアドレスに対して記録されている値を、実データが存在することを表す値に変更する。
次に、ライト実行部15は、ライト命令に従って、データの書き込み先である仮想領域にデータを書き込む(ステップS209)。
そして、ボリューム管理装置1は、ライト処理の動作を終了する。
次に、本実施形態のボリューム管理装置1のスナップショット作成命令実行部1062が実行する、図12に示されるステップS104のスナップショット作成処理について、図面を参照して詳細に説明する。
図14は、本実施形態のボリューム管理装置1の、図12に示されるステップS104におけるスナップショット処理の動作を表すフローチャートである。
まず、スナップショット作成部10621が、スナップショットボリュームを追加する(ステップS301)。前述のように、スナップショット作成部10621は、図1におけるボリューム管理部17に相当する。
そして、スナップショット作成部10621は、追加されたスナップショットボリュームを、クローンボリューム22に関連付ける(ステップS302)。
ステップS302において、スナップショット作成部10621は、例えば、ボリューム対応テーブル108における、クローンボリューム22のボリューム番号の行に、追加されたスナップショットボリュームのボリューム番号を書き込めばよい。
次に、スナップショット作成部10621は、追加されたスナップショットボリュームに含まれる各保存領域の状態を初期化する(ステップS303)。
ステップS303において、スナップショット作成部10621は、例えば、スナップショット差分管理テーブル110に、新しく追加されたスナップショットボリュームの各ページに対する、データが存在するか否かを表す値を格納する領域を追加する。そして、スナップショット作成部10621は、追加された領域に、データが存在しないことを表す値を書き込めばよい。スナップショット差分管理テーブル110が図9に示すスナップショット差分管理テーブル110である場合、スナップショット作成部10621は、スナップショット差分管理テーブル110に、新しく追加されたスナップショットボリュームのための列を追加する。そして、スナップショット作成部10621は、その列に新しく追加されたスナップショットボリュームのボリューム番号を書き込む。さらに、追加した列において、各ページのページ番号に対して、データが存在しないことを表す値である「0」を書き込む。ステップS303の動作は、スナップショット設定部16に相当する更新履歴テーブル作成部10622が行ってもよい。
次に、更新履歴テーブル作成部10622は、追加されたスナップショットボリュームの基準時刻にプール領域が割り当てられている仮想領域に対して、基準状態を、追加されたスナップショットボリュームに関連付けて、基準状態記憶部12に格納する(ステップS304)。
具体的には、更新履歴テーブル作成部10622は、例えば、まず、更新履歴テーブル112に、追加されたクローンボリュームのための領域を追加する。図11の例では、更新履歴テーブル作成部10622は、追加されたクローンボリュームのための列を更新履歴テーブル112に追加する。そして、その列に追加されたクローンボリュームのボリューム番号を書き込む。さらに、更新履歴テーブル作成部10622は、クローンボリューム差分管理テーブル109から、スナップショット作成対象のクローンボリュームの各ページに対する値を読み出す。更新履歴テーブル作成部10622は、読み出されたそれぞれのページに対する値を、更新履歴テーブル112の追加されたクローンボリュームの列の、同じアドレスのページに対する値として書き込む。すなわち、更新履歴テーブル作成部10622は、クローンボリューム差分管理テーブル109におけるスナップショット作成対象のクローンボリュームの値の部分を、更新履歴テーブル112の追加されたクローンボリュームの値の部分にコピーする。
そして、ボリューム管理装置1は、スナップショット作成処理の動作を終了する。
次に、本実施形態のボリューム管理装置1のリストア命令実行部1063が実行する、図12に示されるステップS106のリストア開始処理について、図面を参照して詳細に説明する。
図15は、本実施形態のボリューム管理装置1の、図12に示されるステップS106におけるリストア開始処理の動作を表すフローチャートである。
図15を参照すると、リストア命令実行部1063は、まず、リストア差分管理テーブル111を作成する(ステップS401)。
ステップS401において、リストア命令実行部1063は、例えば、リストア命令に識別子が含まれるスナップショットボリュームであるリストア対象スナップショットボリュームを特定する。リストア命令実行部1063は、スナップショット差分管理テーブル110の、リストア対象スナップショットボリューム及びそのスナップショットボリュームの上位世代のスナップショットボリュームに対する値が記録されている部分を読み出す。図9に示す例では、それらの値は、0か1の値を取りうるフラグで表される。リストア命令実行部1063は、ページ毎に、リストア対象スナップショットボリューム及びそのスナップショットボリュームの上位世代のスナップショットボリュームに対する値の論理和を計算する。リストア命令実行部1063は、それぞれのページに対して算出された論理和を表す値を、リストア差分管理テーブル111における、論理和を算出したページのアドレスに対する値として、リストア差分管理テーブル111に記録する。
次に、リストア命令実行部1063は、ボリューム対応テーブル108において、クローンボリューム22に対する、リストア対象スナップショットボリュームの状態を表す値、「リストア中」に変更する(ステップS402)。
次に、リストア命令実行部1063は、バックグラウンド処理として、リストア処理を開始する(ステップS403)。
ステップS403において、リストア命令実行部1063は、例えば、まず、リストア処理部107がバックグラウンド処理として動作しているか否かを検出すればよい。バックグラウンド処理は、コマンド処理部106の動作と平行して行われる処理である。検出方法は、既存の任意の検出方法でよい。リストア処理部107が動作していなければ、リストア命令実行部1063は、リストア処理部107の動作を開始させる。リストア処理部107が動作していれば、リストア命令実行部1063は、リストア開始処理の動作を終了する。
次に、ボリューム管理装置1のリストア処理部107が、バックグラウンド処理として行うリストア処理の動作について、図面を参照して詳細に説明する。
図16は、ボリューム管理装置1のリストア処理部107が行う、リストア処理の動作を表すフローチャートである。
例えば、リストア命令実行部1063がリストア処理部107に動作を開始させることによって、リストア処理部107は図16に示す動作を開始する。ボリューム管理装置1が動作を開始すると、リストア処理部107が図16に示す動作を開始してもよい。
まず、リストアボリューム検索部1071が、例えば、ボリューム対応テーブル108から、リストア状態が「リストア中」であるボリュームを検索することにより、リストア状態が「リストア中」であるスナップショットボリュームを検出する(ステップS501)。
リストア状態が「リストア中」であるスナップショットボリュームが検出されない場合(ステップS502においてNo)、ボリューム管理装置1の動作は、ステップS522に進む。
リストア状態が「リストア中」であるスナップショットボリュームが検出された場合(ステップS502においてYes)、ボリューム管理装置1の動作は、ステップS503に進む。
ステップS503において、リストアアドレス検索部1072が、検出されたスナップショットボリュームに関連付けられているクローンボリューム22において、保存データが存在する仮想領域の有無を検出する(ステップS503)。ステップS503において検出される、保存データが存在する仮想領域は、検出されたスナップショットボリュームに付与されている基準時刻以降に書き込みが行われた仮想領域である。リストアアドレス検索部1072は、例えば、リストア状態がリストア中であることが検出されたスナップショットボリュームの、リストア差分管理テーブル111から、値が差分ありを表すアドレスを検出することにより、ステップS503の動作を行えばよい。図10に示されるリストア差分管理テーブル111の例では、差分ありを値は1である。
保存データが存在する仮想領域が検出された場合(ステップS504においてYes)、データコピー有無判定部1073は、検出された仮想領域から一つの仮想領域を選択する(ステップS505)。なお、ステップS503の動作において保存データが存在する仮想領域が検出された場合、ステップS503の動作の直後、検出された仮想領域は、保存データが存在する、未選択の仮想領域である。
次に、データコピー有無判定部1073は、検出されたスナップショットボリュームに付与された基準時刻において、選択された仮想領域にプール領域が割り当てられていたか判定する(ステップS506)。ステップS506において、データコピー有無判定部1073は、更新履歴テーブル112から、検出された、状態が「リストア中」であるスナップショットボリュームのボリューム番号の列における、選択された仮想領域のアドレスの列の値を読み出せばよい。そして、データコピー有無判定部1073は、読み出された値が0である場合、「データコピーなし」と判定する。また、データコピー有無判定部1073は、読み出された値が1である場合、「データコピーあり」と判定する。ここで、「データコピー無し」は、選択された仮想領域にプール領域が割り当てられていたことに相当する。「データコピー無し」は、選択された仮想領域にプール領域が割り当てられていなかったことに相当する。
検出されたスナップショットボリュームに付与された基準時刻において、選択された仮想領域にプール領域が割り当てられていた場合(ステップS507においてYes)、ボリューム管理装置1の動作は、ステップS508に進む。
ステップS508において、リストアデータコピー部1074は、検出されたスナップショットボリュームに付与されている基準時刻に、選択された仮想領域に格納されているデータを、その選択された仮想領域に書き込む(ステップS508)。
検出されたスナップショットボリュームに付与されている基準時刻以降に、選択された仮想領域に対する書き込みがあった場合、選択された仮想領域に格納されていたデータは、書き込みがあった時点における最新のスナップショットボリュームに格納される。
そのため、例えばまず、リストアデータコピー部1074は、検出されたスナップショットボリューム以降のスナップショットボリュームから、選択された仮想領域に格納されていたデータが格納されている最も古いスナップショットボリュームを選択する。そして、リストアデータコピー部1074は、選択されたスナップショットボリュームの、選択された仮想領域に関連付けられている保存領域から、データを読み出す。さらに、リストアデータコピー部1074は、読み出したデータを、選択された仮想領域に格納する。
本実施形態では、仮想領域と保存領域が互いに関連付けられている場合、その仮想領域のクローン領域におけるアドレスと、その保存領域のスナップショットボリュームにおけるアドレスは同一である。
そこで、リストアデータコピー部1074は、スナップショットボリュームの、選択された仮想領域と同じアドレスの保存領域にデータが格納されているか否かを、検出されたスナップショットボリュームから古い順に判定する。リストアデータコピー部1074は、その判定を、例えば、スナップショット差分管理テーブル110を使用して行う。リストアデータコピー部1074は、まず、検出されたスナップショットボリュームを選択する。そして、リストアデータコピー部1074は、スナップショット差分管理テーブル110における、選択された仮想領域のアドレスの行において、選択されたスナップショットボリュームの列の値を読み出す。読み出された値が0であれば、リストアデータコピー部1074は、クローンボリューム22に関連付けられている、選択されたスナップショットボリュームの次に古い基準時刻が付与されているスナップショットボリュームを選択する。そして、リストアデータコピー部1074は、選択されたスナップショットボリュームに対して、同じ動作を繰り返す。すなわち、リストアデータコピー部1074は、スナップショット差分管理テーブル110における、選択された仮想領域のアドレスの行において、選択されたスナップショットボリュームの列の値を読み出す。リストアデータコピー部1074は、読み出された値が1になるまで、以上の処理を繰り返す。
読み出された値が1であれば、検出されたスナップショットボリュームの、選択された仮想領域と同じアドレスを持つ保存領域からデータを読み出し、読み出されたデータを、選択された仮想領域に書き込む。
次に、リストアデータコピー部1074は、検出されたスナップショットボリュームのリストア差分管理テーブル111における、選択された仮想領域の状態を、「差分なし」に設定する(ステップS509)。リストア差分管理テーブル111が図10に示すリストア差分管理テーブル111である場合、リストアデータコピー部1074は、選択された仮想領域のアドレスの行の値を、「差分なし」を表す0に設定する。
ステップS506において検出されたスナップショットボリュームに付与された基準時刻に、選択された仮想領域にプール領域が割り当てられていなかった場合(ステップS507においてNo)、ボリューム管理装置1の動作は、ステップS511に進む。
ステップS511において、CV参照元変更部1075は、選択された仮想領域に対するプール領域の割り当てを解除する(ステップS511)。ステップS511の動作の後、ボリューム管理装置1の動作は、ステップS509に進む。
ステップS509の動作の後、ボリューム管理装置1の動作は、ステップS504に戻る。
なお、ステップS503において、リストアアドレス検索部1072は、例えば、リストア差分管理テーブル111から、値が1である最も値が小さいアドレスを検索してもよい。そして、ステップS504において、検索の結果、値が1であるアドレスが存在しなければ(ステップS504においてNo)、ボリューム管理装置1は、ステップS510の動作を行ってもよい。検索の結果、値が1であるアドレスが存在すれば(ステップS504においてYes)、リストアアドレス検索部1072は、そのアドレスを持つ仮想領域を選択すればよい。そして、ステップS509の動作の後、ボリューム管理装置1の動作は、ステップS503に戻ってもよい。
ステップS504において、保存データが存在する未選択の仮想領域が存在しない場合(ステップS504においてNo)、ボリューム管理装置1の動作は、ステップS510に進む。
ステップS510において、例えばリストアボリューム検索部1071が、検出されたスナップショットボリュームの状態を、「リストア中」ではなくなるよう変更する(ステップS510)。リストアボリューム検索部1071は、例えば、図7に示されるボリューム対応テーブルにおいて、検出されたスナップショットボリュームのリストア状態を「なし」に変更すればよい。そして、ボリューム管理装置1の動作は、ステップS501に戻る。
ステップS502において、状態が「リストア中」であるスナップショットボリュームが検出されなかった場合(ステップS502においてNo)、リストア処理部107は、一定時間待機する(ステップS512)。そして、ボリューム管理装置1の動作は、ステップS501に戻る。
以上で説明した本実施形態には、クローンボリューム22から作成されたスナップショットに基づく、クローンボリューム22へのリストアにおいて、クローンボリューム22の容量効率の悪化を軽減することができるという第1の効果がある。
また、本実施形態には、クローンボリューム22から作成されたスナップショットに基づく、クローンボリューム22へのリストアにおいて、リストアの処理に必要な時間を短縮することができるという第2の効果がある。
第1及び第2効果の理由は、CV参照元変更部1075が、リストアが行われるスナップショットボリュームに関連付けられた基準時刻において、プール領域が割り当てられていなかった仮想領域に対する、プール領域の割り当てを解除するからである。そのため、リストアが行われたスナップショットボリュームに関連付けられた基準時刻において仮想領域に割り当てられていなかったプール領域が、リストア後において使用されなくなる。したがって、クローンボリューム22の容量効率の悪化が軽減される。また、リストアにおいて、プール領域の割り当てが解除される仮想領域に対して、データをコピーする必要がない。そのため、プール領域の割り当てが解除される仮想領域に対してデータをコピーする時間が必要なくなるので、リストアの処理に必要な時間を短縮することができる。なお、CV参照元変更部1075は、リストア処理部107に含まれる。さらに、リストア処理部107は、リストア実行部13に含まれる。
以上で説明した効果について、さらに詳細に説明する。
図17から図21までの各図は、仮想領域に対するプール領域の割り当てを解除しない場合における、クローンボリュームとスナップショットボリュームの状態の遷移を表す図である。図17から図21までの各図に示す状態の遷移は、クローンボリュームに対する書き込みやスナップショットボリュームの追加に応じた状態の遷移である。
図17では、2番目の仮想領域に対して、データB1が書き込まれる。その結果、2番目の仮想領域にプール領域が割り当てられ、そのプール領域に、データB1が格納される。そして、クローンボリューム差分管理テーブルにおける、2番目の仮想領域の値は、「差分あり」を表す1に変更される。なお、図17におけるクローンボリューム差分変更テーブルは、図8に記載されているクローンボリューム更新差分テーブルのうち、図17のクローンボリュームのボリューム番号によって特定される列を表す。図18から図33までの各図においても同様である。
図18では、スナップショットボリュームが追加される。図18に示す状態では、スナップショットボリュームにコピーされたデータはないため、スナップショット差分管理テーブルの全ての値が0である。なお、図18のスナップショット管理テーブルは、図8に記載されているスナップショット管理テーブルのうち、図18に記載されているスナップショットボリュームのボリューム番号によって特定される列を表す。図18から図32までの図のうち、スナップショット管理テーブルを含む図においても同様である。
図19において、追加されたスナップショットボリューム対してスナップショットのイメージが作成されている。そのため、例えば2番目の仮想領域にデータB2が書き込まれると、2番目の仮想領域に格納されていたデータが、スナップショットボリュームに追い出しコピーされる。すなわち、2番目の仮想領域に格納されていたデータであるデータB2が、スナップショットボリュームの2番目の保存領域にコピーされる。また、スナップショット差分管理テーブルにおける、2番目の値が、「差分あり」を表す1に設定される。そして、仮想領域に割り当てられているプール領域にデータB2が格納される。
さらに、3番目の仮想領域にデータC1が書き込まれると、同様に、3番目の仮想領域に格納されていたデータが、スナップショットボリュームに追い出しコピーされる。3番目の仮想領域にデータが書き込まれる前の状態において、3番目の仮想領域には、プール領域が割り当てられていない。3番目の仮想領域からデータが読み出されると、3番目の仮想領域に関連付けられている実領域に格納されているデータが読み出される。この場合、3番目の仮想領域に関連付けられている実領域に格納されているデータであるデータC0が、スナップショットボリュームの3番目の保存領域に追い出しコピーされる。また、スナップショット差分管理テーブルにおける、3番目の値が、「差分あり」を表す1に設定される。そして、3番目の仮想領域にプール領域が割り当てられ、そのプール領域にデータC1が格納される。そして、クローンボリューム差分管理テーブルにおける、3番目の仮想領域の値は、「差分あり」を表す1に変更される。
図20において、新しくスナップショットボリュームが追加される。新しくスナップショットボリュームが、第一世代のスナップショットボリュームである。第一世代のスナップショットボリュームにおけるスナップショットが、第一世代のスナップショットである。追加前に存在していたスナップショットボリュームが、第二世代のスナップショットボリュームである。追加前に存在していたスナップショットが、第二世代のスナップショットである。追加されたスナップショットボリュームにコピーされたデータはないため、追加されたスナップショットボリュームのスナップショット差分管理テーブルの全ての値は0である。
図21において、1番目の仮想領域に、データA1が書き込まれる。1番目の仮想領域にデータA1が書き込まれると、1番目の仮想領域に格納されていたデータが、最新のスナップショットボリュームである、図20において追加されたスナップショットボリュームに追い出しコピーされる。データA1が書き込まれる前、1番目の仮想領域にプール領域は割り当てられていない。この場合、1番目の仮想領域に関連付けられている実領域に格納されているデータであるデータA0が、スナップショットボリュームの1番目の保存領域に追い出しコピーされる。また、追加されたスナップショットボリュームのスナップショット差分管理テーブルにおける、1番目の値が、「差分あり」を表す1に設定される。そして、1番目の仮想領域にプール領域が割り当てられ、そのプール領域にデータA1が格納される。そして、クローンボリューム差分管理テーブルにおける、1番目の仮想領域の値は、「差分あり」を表す1に変更される。一方、第二世代のスナップショットのイメージを記憶する、図18において追加されたスナップショットボリュームに格納されているデータと、そのスナップショットボリュームのスナップショット差分管理テーブルは、更新されない。
図17から図21までの状態遷移において、更新履歴テーブルは記載されていない。
図22から図26までの各図は、本実施形態における、クローンボリュームとスナップショットボリュームの状態の遷移を表す図である。図22から図26までの各図に示す状態の遷移は、クローンボリュームに対する書き込みやスナップショットボリュームの追加に応じた状態の遷移である。図22から図26までの各図におけるクローンボリュームに対する書き込みやスナップショットボリュームの追加は、図17から図21までの各図におけるクローンボリュームに対する書き込みやスナップショットボリュームの追加と同じである。
図22と図17は同じである。
図23は、スナップショットボリュームが追加されると、更新履歴テーブルが作成される点が、図18と異なる。スナップショットボリュームが追加される際のクローンボリューム差分管理テーブルが、更新履歴テーブルにコピーされることにより、更新履歴テーブルが作成される。その他の点において、図23は図18と同じである。
図24において、更新履歴テーブルは変更されない。その他の点において、図24は図19と同じである。
図25において、新しくスナップショットボリュームが追加された際の、クローンボリューム差分管理テーブルが、新しく追加されたスナップショットボリュームの更新履歴テーブルとしてコピーされる。その他の点において、図25は図20と同じである。
図26において、2つのスナップショットボリュームに関連付けられている更新履歴テーブルは、更新されない。その他の点において、図26は図21と同じである。
次に、リストアの処理における、クローンボリューム及びスナップショットボリュームの状態について説明する。
図27から図29までの各図は、仮想領域に対するプール領域の割り当てを解除しない場合における、クローンボリュームの状態の遷移を表す図である。
図27は、第二世代のスナップショットボリュームに格納されているスナップショットのイメージに基づき、クローンボリュームに対してリストア処理を行うことを表す。図27において、クローンボリュームと各スナップショットボリュームの状態は、それぞれ、図21におけるクローンボリュームと各スナップショットボリュームの状態と同じである。図27のリストア差分管理テーブルは、第二世代のスナップショットボリュームが追加されてから、書き込みが行われた仮想領域を表す。リストア差分管理テーブルにおいて、1が、書き込みが行われたことを表す値である。
図28において、第二世代スナップショットボリュームが追加された時に、クローンボリュームから読み出されていた値と同じ値が、リストア処理後のクローンボリュームから読み出される状態になるように、クローンボリュームにデータがコピーされる。第二世代スナップショットボリュームが追加されたとき、クローンボリュームの第1の仮想領域から読み出されていたデータA0は、第一世代スナップショットボリュームに格納されている。従って、第一世代の1番目の保存領域からデータA0が読み出され、読み出されたデータA0が1番目の仮想領域に書き込まれる。書き込まれたデータA0は、1番目の仮想領域に割り当てられているプール領域に格納される。また、第二世代スナップショットボリュームが追加されたとき、2番目及び3番目の仮想領域から読み出されていたデータB1及びデータC0は、第二世代スナップショットボリュームに格納されている。従って、第二世代の2番目の保存領域からデータB1が読み出され、読み出されたデータB1が2番目の仮想領域に書き込まれる。また、第二世代の3番目の保存領域からデータC0が読み出され、読み出されたデータC0が3番目の仮想領域に書き込まれる。
図29は、リストアの処理が行われた後のクローンボリューム及びスナップショットボリュームの状態と、第二世代スナップショットボリュームが追加された時における、クローンボリューム及びスナップショットボリュームの状態を表す。第二世代スナップショットボリュームが追加された時、1番目及び3番目の仮想領域に、プール領域は割り当てられていない。一方、リストア処理が行われた後、1番目及び3番目の仮想領域に、プール領域が割り当てられている。
図30から図32までの各図は、本実施形態における、クローンボリュームの状態の遷移を表す図である。
図30は、図27と同様に、第二世代のスナップショットボリュームに格納されているスナップショットのイメージに基づき、クローンボリュームに対してリストア処理を行うことを表す。図30において、クローンボリュームと各スナップショットボリュームの状態は、それぞれ、図26におけるクローンボリュームと各スナップショットボリュームの状態と同じである。図30のリストア差分管理テーブルは、図27のリストア差分管理テーブルと同様に、第二世代のスナップショットボリュームが追加されてから、書き込みが行われた仮想領域を表す。リストア差分管理テーブルにおいて、1が、書き込みが行われたことを表す値である。また、図30では、各スナップショットボリュームに応じた、更新履歴テーブルが存在する。
図31は、本実施形態におけるリストア処理による、クローンボリュームの状態の変化を表す。図31では、リストア差分テーブルにおける値が1であるアドレスの仮想領域のうち、リストア元のスナップショットボリュームの更新履歴テーブルにおける値が1である仮想領域だけに対して、データのコピーが行われる。図31において、リストア元のスナップショットボリュームである第二世代のスナップショットボリュームの更新履歴において、値が1である仮想領域は、2番目の仮想領域だけである。また、リストア差分管理テーブルにおいて、1番目から3番目までの値が1である。従って、第二世代のスナップショットボリュームの2番目の保存領域から、データB1が読み出され、読み出されたデータB1が、2番目の仮想領域に書き込まれる。このことにより、2番目の仮想領域に割り当てられているプール領域に格納されているデータは、データB3からデータB2に書き換えられる。
一方、リストア差分管理テーブルにおいて、1番目と3番目の値は1であるのに対し、第二世代スナップショットボリュームの更新履歴テーブルにおいて、1番目と3番目の値は0である。従って、1番目と3番目の仮想領域に対するプール領域の割り当ては、解除される。本実施形態では、このことにより、クローンボリュームの状態が、第二世代のスナップショットボリュームが追加されたときに仮想領域から読み出されていた値が、リストア後の仮想領域から読み出される状態になる。さらに、クローンボリュームのクローンボリューム差分管理テーブルにおける、第1及び第3の仮想領域の値が、0に戻される。
図29は、本実施形態におけるリストアの処理が行われた後のクローンボリューム及びスナップショットボリュームの状態と、第二世代スナップショットボリュームが追加された時における、クローンボリューム及びスナップショットボリュームの状態を表す。両方の状態において、2番目の仮想領域にプール領域が割り当てられている。また、両方の状態において、1番目及び3番目の仮想領域にプール領域が割り当てられていない。
以上で説明した例において、本実施形態では、1番目及び3番目の仮想領域に対するプール領域の割り当てが解除される。すなわち、本実施形態では、1番目及び3番目の仮想領域に割り当てられるプール領域の容量の分だけ、クローンボリュームの容量効率の悪化を軽減することができる。また、本実施形態では、1番目及び3番目の仮想領域に対するデータのコピーを行わない。そのため、本実施形態では、1番目及び3番目の仮想領域にデータをコピーするのに必要な時間だけ、リストアの処理にかかる時間を短縮できる。
次に、本発明の第2の実施形態について、図面を参照して詳細に説明する。
図33は、本実施形態のボリューム管理装置1Aの構成を表すブロック図である。
図33を参照すると、本実施形態のボリューム管理装置1Aは、受信したリストア命令に応じて、仮想ボリュームに含まれ、プール領域が割り当てられていない初期状態でデータが書き込まれると、当該データが格納される前記プール領域が割り当てられる仮想領域であって、少なくとも所定時刻以後にデータが書き込まれた前記仮想領域において、当該仮想領域が前記所定時刻に前記初期状態であったか否かを特定する基準状態が、前記仮想領域が前記初期状態でなかったことを表す場合、前記仮想領域が前記所定時刻に記憶していたデータである保存データを記憶する保存ボリュームから前記保存データを読み出し、読み出された前記保存データを前記仮想領域に書き込み、前記基準状態が、前記仮想領域が前記初期状態であったことを表す場合、前記仮想領域に対する前記プール領域の割り当てを解除するリストア実行部11を含む。
以上で説明した本実施形態には、第1の実施形態における第1の効果及び第2の効果と同じ効果がある。
その理由は、リストア実行部13が、リストアが行われるスナップショットボリュームに関連付けられた基準時刻において、プール領域が割り当てられていなかった仮想領域に対する、プール領域の割り当てを解除するからである。そのため、リストアが行われたスナップショットボリュームに関連付けられた基準時刻において仮想領域に割り当てられていなかったプール領域が、リストア後において使用されなくなる。したがって、クローンボリュームの容量効率の悪化が軽減される。また、リストアにおいて、プール領域の割り当てが解除される仮想領域に対して、データをコピーする必要がない。そのため、プール領域の割り当てが解除される仮想領域に対してデータをコピーする時間が必要なくなるので、リストアの処理に必要な時間を短縮することができる。
ボリューム管理装置1、ボリューム管理装置1A、及びストレージ装置2は、それぞれ、コンピュータ及びコンピュータを制御するプログラム、専用のハードウェア、又は、コンピュータ及びコンピュータを制御するプログラムと専用のハードウェアの組合せにより実現することができる。
図34は、ボリューム管理装置1、ボリューム管理装置1A、及びストレージ装置2を実現するために使用される、コンピュータ1000の構成の一例を表す図である。図34を参照すると、コンピュータ1000は、プロセッサ1001と、メモリ1002と、記憶装置1003と、I/O(Input/Output)インタフェース1004とを含む。また、コンピュータ1000は、記録媒体1005にアクセスすることができる。メモリ1002と記憶装置1003は、例えば、RAM(Random Access Memory)、ハードディスクなどの記憶装置である。記録媒体1005は、例えば、RAM、ハードディスクなどの記憶装置、ROM(Read Only Memory)、可搬記録媒体である。記憶装置1003が記録媒体1005であってもよい。プロセッサ1001は、メモリ1002と、記憶装置1003に対して、データやプログラムの読み出しと書き込みを行うことができる。プロセッサ1001は、I/Oインタフェース1004を介して、例えば、ストレージ装置2又はボリューム管理装置1もしくはボリューム管理装置1Aと、ホスト装置3にアクセスすることができる。プロセッサ1001は、記録媒体1005にアクセスすることができる。記録媒体1005には、コンピュータ1000を、ボリューム管理装置1、ボリューム管理装置1A、又はストレージ装置2として動作させるプログラムが格納されている。
プロセッサ1001は、記録媒体1005に格納されている、コンピュータ1000を、ボリューム管理装置1、ボリューム管理装置1A、又はストレージ装置2として動作させるプログラムを、メモリ1002にロードする。そして、プロセッサ1001が、メモリ1002にロードされたプログラムを実行することにより、コンピュータ1000は、ボリューム管理装置1、ボリューム管理装置1A、又はストレージ装置2として動作する。
命令受信部11と、リストア実行部13と、スナップショット実行部14と、ライト実行部15と、スナップショット設定部16と、ボリューム管理部17と、クローンボリューム22は、例えば、プログラムを記憶する記録媒体1005からメモリ1002に読み込まれた、各部の機能を実現するための専用のプログラムと、そのプログラムを実行するプロセッサ1001により実現することができる。また、管理情報記憶部10と、基準情報記憶部12と、割当状態記憶部18と、保存状態記憶部19と、対象情報記憶部20と、エンティティボリューム21と、プールボリューム23と、スナップショットボリューム24Aと、スナップショットボリューム24Bは、コンピュータが含むメモリ1002やハードディスク装置等の記憶装置1003により実現することができる。あるいは、命令受信部11と、リストア実行部13と、スナップショット実行部14と、ライト実行部15と、スナップショット設定部16と、ボリューム管理部17と、クローンボリューム22と、管理情報記憶部10と、基準情報記憶部12と、割当状態記憶部18と、保存状態記憶部19と、対象情報記憶部20と、エンティティボリューム21と、プールボリューム23と、スナップショットボリューム24Aと、スナップショットボリューム24Bの一部又は全部を、各部の機能を実現する専用の回路によって実現することもできる。
以上、実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解し得る様々な変更をすることができる。