(58)【調査した分野】(Int.Cl.,DB名)
【背景技術】
【0002】
近年、コスト削減や運用管理の容易化の観点から、仮想マシンを作成する仮想化技術が普及している。仮想化技術では、例えばVMWare(登録商標)社のLinked Clone技術を用いた製品がリリースされている。Linked Clone技術は、例えば、特許文献1に開示されるように、共有するマシンのディスクイメージ(マシンイメージ)のスナップショットをとり、共有するマシンイメージとの差分データのみを管理することにより、ディスク容量を削減する技術である。
【0003】
また、例えば特許文献2に開示されるように、マスタとなる仮想マシンのボリューム(マスタボリューム)の複製を世代管理する技術としても、スナップショット技術が知られている。この場合も、スナップショット作成時点からのマスタボリュームに更新があったアドレスのみスナップショットボリュームに更新前データを保持するので、ディスク容量を削減することができる。
【0004】
ここで、スナップショットとは、指定された時点における所定のボリュームの状態を保持するための技術またはその状態をキャプチャした結果である。以降、元データを記憶するボリュームを「マスタボリューム」と称し、元データを記憶するボリュームの更新前データを保持するために定義された複製データ記憶領域となるボリュームを「スナップショットボリューム」と称する。
【0005】
図17を参照して、スナップショット技術の一例について説明する。
図17(a)に示すようなデータを記憶したマスタボリュームのスナップショットをとる場合、まず、このマスタボリュームと同等の記憶容量を有するスナップショットボリュームが
図17(a)に示すように記憶装置内に生成される。
【0006】
そして、マスタボリュームにおけるデータ”BB”の記憶領域(アドレス)にデータ”EE”の書き込みを行おうした段階で、更新前のデータ”BB”が
図17(b)に示すようにスナップショットボリュームの同一アドレスに格納される。このスナップショットボリュームは、第1世代のスナップショットとして機能する。
【0007】
続いて、改めてマスタボリュームのスナップショットをとる場合、このマスタボリュームと同等の記憶容量を有するスナップショットボリュームが
図17(b)に示すよう新たに記憶装置内に生成される。このスナップショットボリュームは、第2世代のスナップショットとなる。
【0008】
続いて、更にマスタボリュームにおけるデータ”CC”の記憶領域にデータ”FF”の書き込みを行おうとすると、更新前のデータ”CC”が
図17(c)に示すように第2世代のスナップショットとして機能するスナップショットボリュームの同一アドレスに格納される。このとき、第1世代のスナップショットとして機能するスナップショットボリュームの内容は、
図17(b)および
図17(c)に示すように保持されたままである。
【0009】
なお、「(AA)」、「(BB)」等は、そのボリュームにはデータが存在しないが、上位世代またはマスタの該当するページからデータA1、B1が読み出せることを意味する。
【0010】
上記のようなスナップショット技術を用いてデータの複製を管理するディスクアレイサブシステムでは、マスタボリュームへの更新があったアドレスのデータのみスナップショットボリュームに保持される。スナップショットボリュームは、自ボリュームがデータを保持するか否かを、アドレス毎に管理する保持データ管理テーブルを有している。したがって、ディスクアレイサブシステムのデータアクセス手段は、スナップショットボリュームへのリード命令を受けた場合、対象となるデータのアドレスに対応する保持データ管理テーブルの情報を調べる。その結果、データがあると判断された場合は、データアクセス手段は、スナップショットボリュームからそのデータを読み出す。一方、データがないと判断された場合は、データアクセス手段は、マスタボリュームからそのデータを読み出す。
【0011】
仮想マシンを複数ユーザに提供する際、マシンイメージのバージョン管理を、上記のようなスナップショット技術を用いて実施することが可能である。また、1つのバージョンについて更にスナップショット技術によりサブバージョン管理をすることも可能である。更に、Linke Clone技術によってサブバージョンのスナップショットを複数作成し、ユーザに提供することも可能である。
【0012】
このように、Linked Clone技術を含むスナップショット技術を階層的に用いることにより、少ないディスク容量で複数のユーザそれぞれに適したマシンイメージを提供することができると共に、運用管理も容易となる。
【0013】
上述のようなスナップショット技術を用いたOS(Operating System)イメージのバージョン管理、およびOSイメージをユーザに提供する方法の例について説明する。
【0014】
OSが更新される際、更新前のOSイメージのボリュームのスナップショットを作成する。ここで、バージョンアップやパッチなどで更新される前のOSイメージのボリュームを、「共通OSイメージボリューム」と称する。
【0015】
共通OSイメージボリュームをマスタとしたスナップショットボリューム(以降、「各バージョンOSボリューム」と称する)は、
図17(b)に示したように、上位世代の各バージョンOSボリュームまたは共通OSイメージボリュームとの差分のみを保持している。なお、共通OSイメージボリュームは、上述の「マスタボリューム」に相当し、共通OSイメージボリュームをマスタとして作成された各バージョンOSボリュームは、上述の「スナップショットボリューム」に相当する。
【0016】
ユーザには、各バージョンOSボリュームをマスタとしたスナップショット(以降、「ユーザボリューム」と称する)が提供される。ユーザボリュームは、作成された時点ではマスタである各バージョンOSボリュームと同じイメージを有し、その後各バージョンOSボリュームが更新されたアドレスのデータのみを保持する。
【0017】
ここで、特許文献1は、例えば、ディスクアレイサブシステムにおけるスナップショット動作において、更新データのみを保持するデータ格納システムを開示する。
【0018】
また、特許文献2は、シンプルな処理により既存の仮想マシンのディスクイメージの重複排除を実現できるストレージ管理システムを開示する。
【発明を実施するための形態】
【0030】
以下、本発明の実施形態について図面を参照して詳細に説明する。
【0031】
第1の実施形態
図1は、本発明の第1の実施形態に係るディスクアレイサブシステム100の構成を示すブロック図である。
図1に示すように、ディスクアレイサブシステム100は、1または複数のホスト200−1乃至200−nと接続される。
【0032】
ホスト200は、データ管理を行うボリューム群を備えたディスクアレイサブシステム100に対して、ボリュームへの書き込み、ボリュームからの読み出し、スナップショットの作成、OSの更新、OSの更新抑止、OSの更新許可等の命令(コマンド)を送る。以降、1または複数のホスト200−1乃至200−nを総称して「ホスト200」と称する。
【0033】
図1に示すように、ディスクアレイサブシステム100は、ボリューム管理部110、I/O(Input/Output)処理部130、ボリューム群150およびテーブル記憶部170を備える。
【0034】
ボリューム管理部110は、ホスト200からのボリューム管理コマンドに応じて、ボリューム群150に含まれるボリュームを管理する処理を実行すると共に、処理が完了すると、ホスト200にレスポンスを返却する。ボリューム管理部110は、ボリューム管理コマンド取得部111、スナップショット実行部112、OS更新抑止部113およびOS更新許可部114を備える。
【0035】
I/O処理部130は、ホスト200からのI/Oコマンドに応じて、ボリューム群150に含まれるボリュームにリード処理またはライト処理を実行し、処理が完了すると、ホスト200にレスポンスを返却する。I/O処理部130は、I/Oコマンド取得部131、ライト命令実行部132およびリード命令実行部133を備える。
【0036】
ボリューム群150は、複数のボリュームを含む。具体的には、ボリューム群150は、共通OSイメージボリューム151、各バージョンOSボリューム152、ユーザボリューム153およびプールボリューム154を備える。
【0037】
テーブル記憶部170は、ボリューム群150に含まれるボリュームを管理するテーブルを含む。具体的には、テーブル記憶部170は、ボリューム対応テーブル171、ボリューム更新許否テーブル172、保持データ管理テーブル173および上位世代差分管理テーブル(差分管理テーブル)174を備える。
【0038】
ディスクアレイサブシステム100の各構成要素の概要を説明する。
【0039】
ボリューム管理部110のボリューム管理コマンド取得部111は、ホスト200からボリューム管理コマンドを受けとり、そのコマンドに応じてスナップショット実行部112、OS更新抑止部113またはOS更新許可部114にコマンドを渡す。
【0040】
スナップショット実行部112は、ボリューム管理コマンド取得部111からのスナップショット作成コマンドを受けとると、該コマンドにて指定されるマスタボリュームからスナップショットを作成する。そして、スナップショット実行部112は、作成したスナップショットに関してテーブル記憶部170に含まれるテーブルに情報を追加する。
【0041】
OS更新抑止部113は、ボリューム管理コマンド取得部111からのOS更新抑止コマンドに応じて、ボリューム更新許否テーブル172にフラグをセットする。また、OS更新抑止部113は、OS更新抑止コマンドに応じて、上位世代差分管理テーブル174に情報を追加する。
【0042】
OS更新許可部114は、ボリューム管理コマンド取得部111からのOS更新許可コマンドに応じて、ボリューム更新許否テーブル172のフラグをクリアする。また、OS更新許可部114は、OS更新許可コマンドに応じて、上位世代差分管理テーブル174のフラグをクリアする。
【0043】
図2は、スナップショット実行部112により情報を追加されるボリューム対応テーブル171の例を示す図である。ボリューム対応テーブル171は、スナップショットが作成されたマスタボリュームとスナップショットボリュームの対応関係を含むテーブルである。
図2に示すボリューム対応テーブル171は、詳細を後述する
図6に示すボリューム構成に対応する。
図2に示すように、ボリューム対応テーブル171は、マスタボリューム番号と、スナップショットのボリューム番号を含む。
図2では、例えば、「MV_OS1」はマスタボリュームの番号であり、このマスタボリュームのスナップショットボリュームとして「SV_OSVer3」、「SV_OSVer2」「SV_OSVer1」がそれぞれ第3世代、第2世代、第1世代として作成されたことを示す。このように、スナップショットは、マスタボリューム(元データ)の更新に伴って連続した世代として保持される。
【0044】
スナップショット実行部112は、また、スナップショットが作成されると、保持データ管理テーブル173に情報を追加する。
図3は、保持データ管理テーブル173の例を示す図である。
図3に示すように、保持データ管理テーブル173は、スナップショットボリュームに、マスタボリュームに記憶しているデータと対応するデータが存在するか否かを管理するテーブルである。
【0045】
保持データ管理テーブル173は、当該対応するデータが存在するか否かを、データの複製処理を行う単位であるスナップショットI/O処理単位(以下、ページ単位と称する。)毎にフラグで管理する。例えば、フラグが「1」のときは対応するデータが存在することを示し、フラグが「0」のときは対応するデータが存在しないことを示す。
図3では、例えば、スナップショットボリューム「SV_OSVer1」の「page0」にはフラグが「1」に設定されるので、スナップショットボリューム「SV_OSVer1」の「page0」にはデータが存在すること示す。
【0046】
ここで、スナップショット実行部112は、マスタボリュームへの書き込みがあると、そのページ単位でマスタボリュームの書き込み前のデータをスナップショットボリュームに複製する(以下、この動作を追い出しコピーと称する)。
【0047】
スナップショット実行部112は、また、作成したスナップショットボリュームのマスタボリュームが、各バージョンOSボリュームである場合、上位世代差分管理テーブル174に情報を追加する。
【0048】
図4は、上位世代差分管理テーブル174の一例を示す図である。
図4に示すように、上位世代差分管理テーブル174は、各バージョンOSボリュームに関連付けられたテーブルであり、自ボリューム(自世代)またはスナップショット上位世代の各バージョンOSボリュームのいずれかにデータが存在するか否か(データ有無状況)を、ページ単位毎にフラグで管理する。
図4では、例えば、ボリューム「SV_OSVer1」の「page0」はフラグが「1」に設定されているので、「SV_OSVer1」または上位世代の「SV_OSVer2」、「SV_OSVer3」いずれかにデータが存在することを示す。ここで、上位世代とは、自ボリュームの後に作成されたスナップショットボリュームを指し、例えば、マスタボリュームから第1世代、第2世代および第3世代のスナップショットボリュームが作成されている場合、第1世代の上位世代は、第2世代および第3世代のスナップショットボリュームを指す。
【0049】
図5は、OS更新抑止部113により管理されるボリューム更新許否テーブル172の例を示す図である。
図5に示すように、ボリューム更新許否テーブル172は、ボリュームへのライト処理を禁止するか否かを示すフラグを含む。
図5では、ボリューム「MV_OS2」のフラグが「1」に設定されているので、ボリューム「MV_OS2」へのライト処理は禁止されることを示す。なお、本実施形態における運用形態では、ボリューム更新許否テーブル172には、共通OSイメージボリュームに関するフラグのみ設定されるが、別の運用形態では、各バージョンOSボリューム等に関するフラグが設定されてもよい。
【0050】
次に、ボリューム群150について説明する。ボリューム群150における共通OSイメージボリューム151は、共通のOSイメージを保持するボリュームであり、各バージョンOSボリューム152のスナップショットマスタボリュームである。
【0051】
各バージョンOSボリューム152は、共通OSイメージボリューム151をマスタとするスナップショットボリュームであり、共通OSイメージボリューム151の所定時点のイメージについて、マスタボリュームとの差分データのみを保持する。各バージョンOSボリューム152の実データはプールボリューム154に保存され、アドレス毎のデータ有無を、保持データ管理テーブル173により管理される。
【0052】
ユーザボリューム153は、ユーザが使用するボリュームであり、各バージョンOSボリューム152をマスタとするスナップショットボリュームである。ユーザボリューム153は、作成直後はマスタである各バージョンOSボリュームと同じイメージを持ち、ユーザが更新したデータのみを保持する。ユーザボリュームの実データはプールボリューム154に保存され、アドレス毎のデータ有無を保持データ管理テーブル173により管理される。
【0053】
プールボリューム154は、スナップショットボリュームである各バージョンOSボリュームとユーザボリュームの実データを保持する。
【0054】
図6は、共通OSイメージボリューム「MV_OS1」をマスタとして各バージョンOSボリューム「SV_OSVer1」、「SV_OSVer2」、「SV_OSVer3」が順に作成された構成を示す。また、各バージョンOSボリューム「SV_OSVer1」をマスタとしてユーザボリューム「SV_USR1」、「SV_USR2」が、各バージョンOSボリューム「SV_OSVer2」をマスタとしてユーザボリューム「SV_USR3」が、各バージョンOSボリューム「SV_OSVer3」をマスタとしてユーザボリューム「SV_USR4」が、それぞれ作成された構成を示す。ここで、各バージョンOSボリューム「SV_OSVer1」、「SV_OSVer2」、「SV_OSVer3」を、それぞれ第1世代各バージョンOSボリューム、第2世代各バージョンOSボリューム、第3世代各バージョンOSボリュームと称する。
【0055】
図6において、「A1」、「B1」等はデータを示し、「173」、「174」は、それぞれ保持データ管理テーブル173、上位世代差分管理テーブル174における、各データを格納するページ(アドレス)に対応するフラグを示す。また、「(A1)」、「(B1)」等は、そのボリュームにはデータが存在しないが、上位世代またはマスタの該当するページからデータA1、B1が読み出せることを意味する。
【0056】
例えば、データB0について説明する。スナップショット実行部112がスナップショット「SV_OSVer2」を作成した時点では、「SV_OSVer2」のB0に対応するアドレスには(B0)が示される。その後、共通OSイメージボリュームへの更新がありB0に対応するアドレスにB1が書き込まれると、スナップショット実行部112は追い出しコピーを行い、「SV_OSVer2」のB0に対応するアドレスのデータを(B0)からB0に変更する。このとき、スナップショット実行部112は、保持データ管理テーブル173の該当ページのフラグに「1」をセットする。続いて、スナップショット実行部112は新たにスナップショット「SV_OSVer3」を作成すると、「SV_OSVer3」のB0に対応するアドレスは、共通OSイメージボリュームの値(B1)となる。
【0057】
このように、各バージョンOSボリュームは、上位世代の更新前のデータを保持すると共に、自ボリュームにデータが存在することを示すフラグを有する保持データ管理テーブル173が関連付けられる。また、各バージョンOSボリュームは、自ボリュームまたは上位世代のボリュームのいずれかにデータが存在することを示すフラグを有する上位世代差分管理テーブル174が関連付けられる。
【0058】
ユーザボリュームは、ユーザに更新されたデータを保持すると共に、自ボリュームにデータが存在することを示すフラグを有する保持データ管理テーブル173が関連付けられる。
【0059】
ここで、
図7を参照して、ユーザボリュームに対する通常のリード処理について説明する。通常のリード処理を実行する部を、通常リード処理部(不図示)と称する。通常のリード処理において、各バージョンOSボリュームは、上位世代差分管理テーブル174を持たず、保持データ管理テーブル173のみを持つと仮定する。
【0060】
図7に示す構成では、共通OSイメージボリュームをマスタとして各バージョンOSボリュームのスナップショットが作成され、さらに各バージョンOSボリュームは第1世代から第3世代まで作成されている。また、第1世代の各バージョンOSボリュームをマスタとしてユーザボリューム2が、第2世代の各バージョンOSボリュームをマスタとしてユーザボリューム1が、それぞれ作成されている。
【0061】
ユーザボリューム2のD0に対してリード命令(リードa)がなされたと仮定する。この場合、通常リード処理部は、ユーザボリューム2の保持データ管理テーブル173を調べる。
図7では、D0に該当するページの保持データ管理テーブル173のフラグが「0」であるので、ユーザボリューム2にはデータは存在しない。
【0062】
そこで、通常リード処理部は、スナップショットペアのマスタボリュームである第1世代各バージョンOSボリュームの保持データ管理テーブル173を調べる(
図7において「b」で示す)。ここでも、D0に該当するページのフラグは「0」であるので、データは存在しない。同様に、通常リード処理部は、上位世代である第2世代、第3世代のスナップショットの保持データ管理テーブル173を順に調べる(
図7において「c」、「d」で示す)が、いずれもフラグが「0」であるのでデータは存在しない。
【0063】
その結果、通常リード処理部は、共通OSイメージボリュームからデータD0を読み出す(
図7において「e」で示す)。
【0064】
ここで、OSのバージョンアップやパッチでは、ボリュームの限られたエリアのみへの更新が多いので、ユーザボリュームにデータがなく、上述のように上位世代を辿って最終的に共通OSボリュームを参照するケースが多い。つまり、多くのユーザボリュームへのアクセスにおいて、複数の保持データ管理テーブル173を検索する必要が生じるので、ユーザボリュームのアクセス時間が遅延する。OSのバージョンが増加すると検索する保持データ管理テーブル173も増加するので、更にユーザボリュームへのアクセス性能が低下してしまう。
【0065】
そこで、例えば、
図8のように、共通OSイメージボリュームを増加することにより各バージョンOSボリュームを管理することも考えられる。
図8では、共通OSイメージボリューム1をマスタとして第1a世代、第2a世代の各バージョンOSボリュームが作成され、共通OSイメージボリューム2をマスタとして第1b世代の各バージョンOSボリュームが作成された構成を示す。さらに、第1a世代各バージョンOSボリュームをマスタとしてユーザボリューム1が作成され、第1b世代各バージョンOSボリュームをマスタとしてユーザボリューム2が作成されている。
【0066】
図7の構成と同様に、ユーザボリューム2のD0に対してリード命令(リードf)がなされた場合、通常リード処理部は、ユーザボリューム2の保持データ管理テーブル173を調べる。
図8では、D0に該当するアドレスのデータは存在しないので、通常リード処理部は、マスタボリュームである第1b世代各バージョンOSボリュームの保持データ管理テーブル173を調べる(
図8において「g」で示す)。D0に該当するページのフラグは「0」であるので、通常リード処理部は、共通OSイメージボリューム2からデータD0を読み出す(
図8において「h」で示す)。
【0067】
図8に示す構成では、ユーザボリューム2に関連する各バージョンOSボリュームの数が1つであり、検索する保持データ管理テーブル173も1つであるので、ユーザボリュームへのアクセス時間は遅延しない。このように共通OSイメージボリュームを増加することにより、ユーザボリュームへのアクセス時間の遅延を防ぐことが考えられるが、共通OSイメージボリュームは、実データを保持するボリュームであるので、ディスクの容量を消費してしまうという問題がある。
【0068】
そこで、本実施形態に係るディスクアレイサブシステム100は、以下のように、ディスク容量の消費を増加させることなく、ユーザボリュームへのアクセス時間を短縮する。
【0069】
まず、ディスクアレイサブシステム100の運用方法について説明する。ディスクアレイサブシステム100は、OSがバージョンアップやパッチなどにより更新される際、更新前の共通OSボリュームイメージのスナップショットを作成することにより、更新前のOSバージョンを、各バージョンOSボリューム152として保持する。OSの更新は、スナップショットが作成された後の共通OSボリュームイメージへのライト処理により実施される。
【0070】
各バージョンをユーザに提供する際、各バージョンOSボリュームをマスタとして、スナップショット実行部112により、更にスナップショットをユーザ毎に作成する。各バージョンのOSイメージであるユーザボリュームが、ユーザ毎に提供される。各ユーザは、ユーザボリュームにアクセスする。
【0071】
共通OSイメージボリュームへの更新がない通常運用中は、ホスト200から送信されるOS更新抑止コマンドに応じて、ディスクアレイサブシステム100は、共通OSイメージボリュームへの更新を抑止する。これにより、上位世代差分管理テーブルが有効になるので、上位世代差分管理テーブルを有効利用したユーザボリュームへのリード処理が実施される(詳細は後述する)。
【0072】
共通OSイメージボリュームに対して、バージョンアップやパッチ適用による更新がある場合、ディスクアレイサブシステム100は、事前にホスト200から送信されるOS更新許可コマンドに応じて、共通OSイメージボリュームの更新を許可する。この際、上位世代差分管理テーブル174はクリアされフラグはすべて「0」になるので、各バージョンOSボリュームの保持データ管理テーブル173を1つずつ検索することになる(詳細は後述する)。共通OSイメージボリュームの更新が完了すると、ホスト200からOS更新抑止コマンドが送られ、ディスクアレイサブシステム100は、共通OSイメージボリュームへの更新を抑止すると共に、上位世代差分管理テーブル174を更新する(詳細は後述する)。
【0073】
次に、ディスクアレイサブシステム100の各構成要素の詳細について説明する。
【0074】
図9は、ホスト200からディスクアレイサブシステム100にボリューム管理コマンドが送られた際のボリューム管理部110の動作を示すフローチャートである。
図9を参照して、ボリューム管理部110の動作について説明する。
【0075】
ホスト200からボリューム管理コマンドが送られると、ボリューム管理コマンド取得部111は、そのコマンドを受信する(S101)。ボリューム管理コマンド取得部111は、受け取ったコマンドの種別を判定し、コマンドがスナップショット作成コマンドである場合(S102においてYes)、コマンドをスナップショット実行部112に渡す。スナップショット実行部112は、受け取ったコマンドにて指定されたマスタボリュームからスナップショットボリュームを作成する(S103)。そして、スナップショット実行部112は、作成したスナップショットボリュームと、マスタボリュームとの対応関係を、ボリューム対応テーブル171に追加する(S104)。
【0076】
続いて、スナップショット実行部112は、作成したスナップショットボリュームに関する情報を、保持データ管理テーブル173に追加する(このとき、すべてのページに対応するフラグは「0」である)(S105)。
【0077】
続いて、作成したスナップショットボリュームのマスタが、共通OSイメージボリュームである場合(S106においてYes)、スナップショット実行部112は、上位世代差分管理テーブル174に、作成したスナップショットボリュームに関する情報を追加する。例えば、スナップショット実行部112は、
図6に示す共通OSイメージボリューム「MV_OS1」をマスタとする各バージョンOSボリューム「SV_OSVer3」を作成した場合、
図4に示すように上位世代差分管理テーブル174に「SV_OSVer3」の情報を追加する(このとき、すべてのページに対応するフラグは「0」である)(S107)。
【0078】
一方、S102におけるコマンドの種別の判定の結果、コマンドがスナップショット作成コマンドでない場合(S102においてNo)、コマンドは、OS更新抑止コマンドまたはOS更新許可コマンドである。OS更新抑止コマンドは、後述する
図10のS205に示す共通OSイメージボリュームの更新が完了した際のレスポンスに応じて、ホスト200からディスクアレイサブシステム100に送られる。OS更新抑止コマンドは、OSが更新済みであり次に更新されるまで上位世代差分管理テーブル174は有効であることを示す。OS更新許可コマンドは、共通OSイメージボリュームを更新(ライト処理)する前にホスト200からディスクアレイサブシステム100に送られる。OS更新許可コマンドに応じて共通OSイメージボリュームが更新されるので、上位世代差分管理テーブル174は無効、つまりフラグはクリアされる。
【0079】
ホスト200から受信したコマンドがOS更新抑止コマンドである場合(S108においてYes)、ボリューム管理コマンド取得部111は、そのコマンドをOS更新抑止部113に渡す。OS更新抑止部113は、コマンドを受け取ると、ボリュームに対する更新を抑止するために、コマンドにて指定されたボリュームのボリューム更新許否テーブル172のフラグに「1」をセットする(S109)。
【0080】
続いて、OS更新抑止部113は、OS更新抑止コマンドにより更新抑止を指定されたボリュームが共通OSイメージボリュームである場合、そのボリュームをマスタとするスナップショットであるすべての各バージョンOSボリュームの上位世代差分管理テーブル174のフラグを更新する(S110)。このとき、OS更新抑止部113は、対象となる各バージョンOSボリュームとその上位世代すべての各バージョンOSボリュームが持つ保持データ管理テーブル173の論理和(OR)をとる。論理和が「1」である場合、OS更新抑止部113は、上位世代差分管理テーブル174の該当するページのフラグを「1」に更新する。
【0081】
図10を参照して、共通OSイメージボリュームのデータが更新された場合に上位世代差分管理テーブル174を更新する例について説明する。
図10(a)に示すように、「MV_OS1」をマスタとしたスナップショットボリューム「SV_OSVer2」が作成され、その後、
図10(b)に示すように、「MV_OS1」のデータB0がB1に更新されたと仮定する。このとき、通常のスナップショット技術により、「SV_OSVer2」の保持データ管理テーブル173の、データB1に該当するページのフラグに「1」が設定される(後述する
図11のS205において実施される)。
【0082】
このとき、OS更新抑止部113は、更新された共通OSイメージボリュームをマスタとするスナップショットであるすべての各バージョンOSボリューム(この場合、「SV_OSVer2」、「SV_OSVer1」)について、該当するページの上位世代差分管理テーブル174を更新する。すなわち、OS更新抑止部113は、各ボリュームとその上位世代のボリュームの、該当するページの保持データ管理テーブル173の論理和(OR)をとる。
【0083】
図10(b)に示すように、「SV_OSVer2」について、上述のように保持データ管理テーブル173の該当するページのフラグに「1」が設定されたので、OS更新抑止部113は、このページに対応する上位世代差分管理テーブル174のフラグに「1」をセットする(
図10(b)において「n」で示す)。「SV_OSVer1」について、自ボリューム「SV_OSVer1」と上位世代「SV_OSVer2」の保持データ管理テーブル173の該当するページの論理和をとると「1」となるので、OS更新抑止部113は、「SV_OSVer1」の上位世代差分管理テーブル174の該当するページのフラグに「1」をセットする(
図10(b)において「o」で示す)。以上の手順で、OS更新抑止部113は、上位世代差分管理テーブル174を更新する。
【0084】
一方、S102におけるコマンドの種別の判定の結果、コマンドがOS更新許可コマンドである場合(S108においてNo)、ボリューム管理コマンド取得部111は、そのコマンドをOS更新許可部114に渡す。OS更新許可コマンドは、ボリュームに対する更新を許可するコマンドであり、OS更新許可部114は、このコマンドを受け取ると、該コマンドにて指定されるボリュームのボリューム更新許否テーブル172のフラグをリセットする(S111)。
【0085】
続いて、OS更新許可部114は、OS更新許可コマンドにより更新許可を指定された共通OSイメージボリュームをマスタとするスナップショットであるすべての各バージョンOSボリュームの上位世代差分管理テーブル174をクリアする(S112)。
【0086】
以上の処理が終了すると、ボリューム管理部110は、ホスト200にレスポンスを返却する(S113)。
【0087】
次に、I/O処理部130の動作の概略を説明する。
【0088】
I/O処理部130は、ホスト200から、共通OSイメージボリュームまたは各バージョンOSボリュームまたはユーザボリュームへのI/O命令を受信し、I/O処理が完了するとレスポンスを返却する。
【0089】
I/Oコマンド取得部131は、ホスト200からリード/ライト命令を受け取ると共に、ライト命令はライト命令実行部132に渡し、リード命令はリード命令実行部133に渡す。
【0090】
ライト命令実行部132は、ライト命令を受け取ると、ライト対象となるボリュームのボリューム更新許否テーブル172のフラグを調べ、フラグが「1」の場合はライト命令をリジェクトする。フラグが「0」の場合は、ライト対象となるボリュームの種別にしたがってライト処理を実施する。具体的には、ライト命令が共通OSイメージボリュームへのライト命令の場合、ライト命令実行部132は、通常のスナップショット技術のマスタボリュームへのライト処理を共通OSイメージボリュームに実施する。
【0091】
ライト命令が各バージョンOSボリュームへのライト命令の場合、ライト命令実行部132は、ライト命令をリジェクトする。これは、各バージョンOSボリュームへのライト処理を実施すると、上位世代差分管理テーブル174が無効となるので各バージョンOSボリュームにライトは実施しないという運用に従った処理である。その他の運用形態においては、各バージョンOSボリュームへのライト処理を実施してもよい。上述したように、OSの更新は、共通OSイメージボリュームに実施される。
【0092】
ライト命令がユーザボリュームへのライト命令である場合、ライト命令実行部132は、通常のスナップショット技術のスナップショットボリュームへのライト処理をユーザボリュームに実施する。
【0093】
一方、リード命令実行部133は、I/Oコマンド取得部131から、共通OSイメージボリューム、各バージョンOSボリューム、またはユーザボリュームへのリード命令を受け取ると、リード対象となるボリュームの種別にしたがってリード処理を実施する。
【0094】
具体的には、リード命令が共通OSイメージボリュームへのリード命令である場合、リード命令実行部133は、通常のスナップショット技術のマスタボリュームへのリード処理を、共通OSイメージボリュームに実施する。リード命令が各バージョンOSボリュームへのリード命令である場合、リード命令実行部133は、通常のスナップショット技術のスナップショットボリュームへのリード処理を、各バージョンOSボリュームに実施する。
【0095】
リード命令がユーザボリュームへのリード命令である場合、リード命令実行部133は、ユーザボリュームに関連付けられた保持データ管理テーブル173を調べ、フラグが「1」のとき、ユーザボリュームからデータを読み出す。フラグが「0」のとき、リード命令実行部133は、マスタボリュームである各バージョンOSボリュームの上位世代差分管理テーブル174を調べる。
【0096】
上位世代差分管理テーブル174のフラグが「0」のとき、リード命令実行部133は、各バージョンOSボリュームのマスタである共通OSイメージボリュームの該当アドレスをリードする。上位世代差分管理テーブル174のフラグが「1」のとき、リード命令実行部133は、ユーザボリュームのマスタとなる各バージョンOSボリューム、上位世代の各バージョンOSボリューム、・・・、最上位世代の各バージョンOSボリュームの順に、保持データ管理テーブル173を調べる。そして、リード命令実行部133は、最初にフラグ「1」が見つかったボリュームからデータをリードする。フラグが「1」のボリュームが見つからなかった場合、リード命令実行部133は、共通OSボリュームの該当アドレスからデータをリードする。
【0097】
上記I/O処理を、
図11および
図12を参照して詳細に説明する。
【0098】
図11は、I/O処理部130によるI/O処理のうちライト処理の流れを示すフローチャートである。
図12は、I/O処理部130によるI/O処理のうちリード処理の流れを示すフローチャートである。
【0099】
ホスト200からリード/ライト命令が送られると、I/Oコマンド取得部131は、それを受信し(S201)、リード/ライト命令がライト命令の場合(S202においてYes)、そのライト命令をライト命令実行部132に渡す。
【0100】
ライト命令実行部132は、ライト命令の種別を判断し、ライト命令が共通OSイメージボリュームへのライト命令である場合(S203においてYes)、ボリューム更新許否テーブル172における、ライト対象となる共通OSイメージボリュームのフラグを調べる。フラグが「1」である場合(S204においてYes)、ライト命令実行部132は、ライト命令をリジェクトし、ホスト200にリジェクトを返却する(S207)。
【0101】
ボリューム更新許否テーブル172のフラグが「0」である場合(S204においてNo)、ライト命令実行部132は、通常のスナップショット技術におけるマスタボリュームへのライト処理を、共通OSイメージボリュームに実施する(S205)。このとき、ライト命令実行部132は、上述したように、共通OSイメージボリュームをマスタとする各バージョンOSボリュームが有する保持データ管理テーブル173の、該当するページのフラグに「1」を設定する。そして、ライト命令実行部132は、ホスト200にレスポンスを返却する(S206)。
【0102】
一方、S203において、ライト命令は共通OSイメージボリュームではなく(S203においてNo)、各バージョンOSボリュームに対するものである場合(S208においてYes)、ライト命令実行部132は、ライト命令をリジェクトし、ホスト200にリジェクトを返却する(S207)。
【0103】
S208においてライト命令は各バージョンOSボリュームではなくユーザボリュームに対するものである場合、ライト命令実行部132は、通常のスナップショット技術におけるスナップショットボリュームへのライト処理を、ユーザボリュームに実施する(S209)。このとき、ライト命令実行部132は、ライト処理を実施したユーザボリュームが有する保持データ管理テーブル173の、該当するページのフラグに「1」を設定する。そして、ライト命令実行部132は、ホスト200にレスポンスを返却する(S210)。
【0104】
次に、S202において、I/Oコマンド取得部131がリード命令を受信した場合の動作について、
図12を参照して説明する。
【0105】
I/Oコマンド取得部131は、リード命令を受信した場合、そのリード命令をリード命令実行部133に渡す。リード命令実行部133は、リード命令の種別を判断し、リード命令が共通OSイメージボリュームへのリード命令である場合(S301においてYes)、通常のスナップショット技術におけるマスタボリュームへのリード処理を、共通OSイメージボリュームに実施する(S302)。
【0106】
リード命令が各バージョンOSボリュームへのリード命令である場合(S303においてYes)、リード命令実行部133は、通常のスナップショット技術におけるスナップショットボリュームへのリード処理を、各バージョンOSボリュームに実施する(S304)。
【0107】
リード命令がユーザボリュームへのリード命令である場合(S303においてNo)、リード命令実行部133は、ユーザボリュームにデータがあるか否かを調べる。ここで、
図13を参照して、ユーザボリュームへのリード命令に対する動作について説明する。
【0108】
ユーザボリューム2の(D0)データにリード命令(リードi)がなされたと仮定する。このとき、リード命令実行部133は、ユーザボリューム2の(D0)の保持データ管理テーブル173における該当アドレスのフラグを読む。フラグが「1」である場合はユーザボリューム2にデータがあるので(S305においてYes)、リード命令実行部133は、ユーザボリューム2の該当するアドレスをリードする(S306)。
【0109】
一方、上記フラグが「0」の場合、リード命令実行部133は、ユーザボリューム2のマスタである第1世代各バージョンOSボリュームに保持される上位世代差分管理テーブル174の該当アドレスを調べる(
図13において「j」で示す)。この該当アドレスのフラグが「0」のとき(S307においてYes)、第1世代および上位世代の各バージョンOSボリュームにはデータがないことが判る。したがって、リード命令実行部133は、マスタである共通OSイメージボリュームからデータをリードする(
図13の「k」に示す)(S308)。
【0110】
上記該当アドレスのフラグが「1」のとき(S307においてNo)、リード命令実行部133は、ユーザボリューム2のマスタである各バージョンOSボリュームに保持される保持データ管理テーブル173の該当アドレスを調べる(S309乃至S311)。フラグが「1」のとき(S311においてYes)、リード命令実行部133は、当該各バージョンOSボリュームからデータをリードする(S312)。
【0111】
フラグが「0」のとき(S311においてNo)、リード命令実行部133は、1つ上位世代の各バージョンOSボリュームの保持データ管理テーブル173の該当アドレスを調べ、フラグが「1」のときは当該各バージョンOSボリュームからデータをリードする。フラグが「0」のときは、リード命令実行部133は、更に上位世代の各バージョンOSボリュームの保持データ管理テーブル173の該当アドレスを調べる。このように、リード命令実行部133は、データを保有するボリュームが見つかるまで上位世代の保持データ管理テーブル173の調査を繰り返し、データが存在する各バージョンOSボリュームからデータをリードする。
【0112】
上位世代すべての各バージョンOSボリュームにデータが存在しないとき、リード命令実行部133は、共通OSイメージボリュームからデータをリードする(S308)。以上の手順でリード処理が完了すると、I/O処理部130は、ホスト200にリードしたデータを返却する(S313)。
【0113】
以上のように、本実施形態によれば、ディスクアレイサブシステム100のライト命令実行部132は、共通OSイメージボリュームへのライト処理を実行する。ライト命令実行部132は、ライト処理が完了すると、更新したボリュームをマスタとするすべての各バージョンOSボリュームについて、自ボリュームまたは上位世代のボリュームのデータ有無を示す上位世代差分管理テーブル174を生成する。
【0114】
リード命令実行部133は、ユーザボリュームへのリード命令に対して、ユーザボリュームにデータがない場合、上位階層の各バージョンOSボリュームの上位世代差分管理テーブル174を調べる。上位世代差分管理テーブル174に基づいてこの階層の各バージョンOSボリュームにデータがないことが判ると、リード命令実行部133は、共通OSイメージボリュームからデータをリードする。
【0115】
上記構成を採用することにより、本第1の実施形態によれば、ユーザボリュームにデータがない場合、リード命令実行部133は、マスタとなる階層のボリュームのデータの有無を、上位世代差分管理テーブル174を1回検索するのみで判別できる。したがって、共通OSイメージボリューム増加に伴うディスク消費量の増加を招くことなく、ユーザボリュームへのアクセス時間を短縮できるという効果が得られる。
【0116】
第2の実施形態
次に、上述した第1の実施形態を基礎とする第2の実施形態について説明する。上記第1の実施形態では、
図6に示したように、共通OSイメージボリューム、各バージョンOSボリュームおよびユーザボリュームの3階層ボリュームを配置するディスクアレイサブシステムを示したが、これに限定されず、本第2の実施形態では、ボリューム構成の異なる例について説明する。
【0117】
図14は、第2の実施形態に係るディスクアレイサブシステム100が備えるボリュームの構成を示す図である。
図14では、マスタボリュームから、階層1(第1の階層)の第1世代、第2世代、第3世代のスナップショットボリュームが作成されたことを示す。さらに、階層1の第
1世代のスナップショットボリュームをマスタとする階層2(第2の階層)の第1世代、第2世代のスナップショットボリュームが作成されている。さらに、階層2の第
1世代のスナップショットボリュームをマスタとする階層3のスナップショットボリュームが作成されている。
【0118】
このような、複数階層を成すボリューム構成において、ディスクアレイサブシステム100は、下位階層のスナップショットを持つスナップショットボリュームに、上記第1の実施形態において説明した上位世代差分管理テーブル174を配置する。下位階層のスナップショットを持つスナップショットボリュームは、
図14の構成では、階層1と階層2のスナップショットボリュームである。
【0119】
図14に示すようなボリューム構成における最下位階層のボリュームに、リード命令がなされた場合の動作について説明する。このリード命令に応じたリード処理は、第1の実施形態において説明したリード命令実行部133により実行される。
【0120】
図14に示す階層3のスナップショットボリュームのデータC0にリード命令(リードm)がなされたと仮定する。この場合、第1の実施形態において説明したように、リード命令実行部133は、階層3のスナップショットボリュームのマスタボリュームの上位世代差分管理テーブル174を参照する。上位世代差分管理テーブル174の該当するアドレスのフラグが「0」であるので、リード命令実行部133は、データC0は階層1のマスタボリュームに存在すると判る。
【0121】
ここで、階層1、階層2のボリュームが上位世代差分管理テーブル174を持たないと仮定した場合、リード命令実行部133は、以下のように動作する。すなわち、リード命令実行部133は、階層3のスナップショットボリュームにデータが存在しないことが判ると、階層2の第1世代のスナップショットボリュームの保持データ管理テーブル173を調べる。続いて、リード命令実行部133は、データが存在するまで、階層2の第2世代→階層1の第1世代→階層1の第2世代→階層1の第3世代の、各スナップショットボリュームの保持データ管理テーブル173をすべて調べる。
【0122】
このように、スナップショットボリュームが上位世代差分管理テーブル174を持たない場合、下位階層のスナップショットボリュームへのアクセスに際し、複数の保持データ管理テーブル173を検索する必要が生じるので、アクセス時間が遅延する。
【0123】
これに対して、本実施形態では、リード命令実行部133は、階層2第1世代スナップショットボリュームの上位世代差分管理テーブル174を調べ、該当するページのフラグが「0」である場合、階層2のボリュームにはデータが存在しないことが判る。したがって、リード命令実行部133は、上位階層、すなわち、階層1の第1世代スナップショットボリュームの上位世代差分管理テーブル174を調べる。ここでも上位世代差分管理テーブル174の該当するページのフラグが「0」であるので、リード命令実行部133は、上位階層、すなわちマスタボリュームにデータが存在すると判る。
【0124】
以上のように、本第2の実施形態によれば、ボリューム構成が第1の実施形態において示したような3階層の構成に限らず、複数階層に亘って生成されるスナップショットボリュームを有する構成においても、第1の実施形態と同様に、最下位層へのアクセス時間を短縮できるという効果が得られる。
【0125】
第3の実施形態
図15は、本発明の第3の実施形態に係るデータ管理装置400の構成を示すブロック図である。
図15に示すように、データ管理装置400は、更新部410と、アクセス部420とを備える。
【0126】
データ管理装置400は、元データの更新に伴って、当該元データを複製データ記憶領域に格納する。更新部410は、元データの更新に伴って連続した世代として保持される第1の階層の複製データ記憶領域に、元データを差分データとして格納すると共に、自世代および上位世代の複製データ記憶領域におけるデータ有無状況を示す差分管理テーブルを複製データ記憶領域に関連付けて生成する。
【0127】
アクセス部420は、複製データ記憶領域へのアクセスに応じて、差分管理テーブルに示されるデータ有無状況に基づいてアクセスを行う。
【0128】
なお、データ管理装置400は、上記第1の実施形態におけるディスクアレイサブシステムに相当し、更新部410は、同じくライト命令実行部132に相当し、アクセス部420は、同じくリード命令実行部133に相当する。
【0129】
上記構成を採用することにより、本第3の実施形態によれば、所定の階層の複製データ記憶領域のデータ有無状況を、差分管理テーブルに基づいて検索できるので、下位階層の複製データ記憶領域へのアクセス時間を短縮することができるという効果が得られる。
【0130】
なお、
図1に示したディスクアレイサブシステム100の各部は、
図16に例示するハードウエア資源において実現される。すなわち、
図16に示す構成は、プロセッサ10、RAM(Random Access Memory)11、ROM(Read Only Memory)12、I/O(Input/Output)デバイス13、ストレージ14および各構成要素を接続するバス15を備える。
【0131】
上述した各実施形態では、
図16に示すプロセッサ10が実行する一例として、ディスクアレイサブシステム100に対して、上述した機能を実現可能なコンピュータ・プログラムを供給した後、そのコンピュータ・プログラムを、プロセッサ10がRAM11に読み出して実行することによって実現する場合について説明した。しかしながら、
図1に示した各ブロックに示す機能は、一部または全部を、ハードウエアとして実現してもよい。
【0132】
係る供給されたコンピュータ・プログラムは、読み書き可能なメモリ(一時記憶媒体)またはハードディスク装置等のコンピュータ読み取り可能な記憶デバイスに格納すればよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムを表すコード或いは係るコンピュータ・プログラムを格納した記憶媒体によって構成されると捉えることができる。