(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-12-05
(45)【発行日】2024-12-13
(54)【発明の名称】ストレージシステム及びストレージシステムにおけるデータ複製方法
(51)【国際特許分類】
G06F 3/06 20060101AFI20241206BHJP
G06F 11/14 20060101ALI20241206BHJP
【FI】
G06F3/06 304F
G06F3/06 301Z
G06F11/14 648
(21)【出願番号】P 2023110267
(22)【出願日】2023-07-04
(62)【分割の表示】P 2022124525の分割
【原出願日】2020-07-31
【審査請求日】2023-07-04
(73)【特許権者】
【識別番号】524132520
【氏名又は名称】日立ヴァンタラ株式会社
(74)【代理人】
【識別番号】110002365
【氏名又は名称】弁理士法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】松下 貴記
(72)【発明者】
【氏名】山賀 祐典
(72)【発明者】
【氏名】出口 彰
【審査官】松平 英
(56)【参考文献】
【文献】特開2020-080130(JP,A)
【文献】特開2004-362570(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06-3/08
11/14
13/00-13/14
16/00-16/958
(57)【特許請求の範囲】
【請求項1】
記憶装置に格納するデータを処理するコントローラを備えたストレージシステムにおいて、
前記記憶装置に格納するデータを格納する追記領域を有し、
前記コントローラは、ホストがIOを行うボリュームを提供し、
前記ボリュームから前記追記領域のデータを参照するためのメタ情報を有し、
前記コントローラは、
前記ボリュームにデータを更新するライトを行う場合に、前記追記領域内の更新前のデータを残して、新規領域に更新後のデータを格納し、前記更新後のデータを参照するように前記メタ情報を書き換え、
スナップショットを作成する場合に、前記ボリュームのためのメタ情報をコピーすることで、スナップショットボリュームを作成し、
前記ボリューム及び前記スナップショットボリュームがマッピングテーブルを参照し、前記マッピングテーブルが前記追記領域を参照することにより、前記メタ情報により前記追記領域のデータを参照し、
前記メタ情報は、前記ボリューム及びスナップショットがそれぞれ有して前記マッピングテーブルを参照するための第1のメタ情報と、前記マッピングテーブルが有して前記追記領域を参照するための第2のメタ情報と、を有する
ことを特徴とするストレージシステム。
【請求項2】
前記第1のメタ情報は、ディレクトリテーブルにある
ことを特徴とする請求項
1に記載のストレージシステム。
【請求項3】
スナップショットを作成する場合に、前記コントローラは、前記ボリュームのための第1のメタ情報をコピーして、スナップショットボリュームのための第1のメタ情報にする
ことを特徴とする請求項
1に記載のストレージシステム。
【請求項4】
データを圧縮して前記記憶装置へ格納する圧縮機能を有し、
前記マッピングテーブルは、前記データの圧縮にかかる情報を格納する
ことを特徴とする請求項
1に記載のストレージシステム。
【請求項5】
前記スナップショットボリュームを作成後に、前記ボリュームにホストからデータを更新するライトがあった場合に、
前記追記領域内の更新前のデータを上書きせずに、新規領域に更新後のデータを格納し、前記更新後のデータのための第2のメタ情報を作成し、前記更新後のデータにかかる第2のメタ情報を参照するように前記ボリュームのための第1のメタ情報を書き換え、
前記スナップショットボリュームにかかる前記更新前のデータへアクセスするための第1のメタ情報は書き換えない
ことを特徴とする請求項
1に記載のストレージシステム。
【請求項6】
前記記憶装置に格納されたデータを読み出す場合、
前記ボリュームに格納されたデータを読み出す場合には、前記ボリュームのための前記第1のメタ情報と、前記第2のメタ情報と、を用い、
前記スナップショットボリュームに格納されたデータを読み出す場合には、前記スナップショットのための前記第1のメタ情報と、前記第2のメタ情報と、を用いる
ことを特徴とする請求項
1に記載のストレージシステム。
【請求項7】
前記ボリュームと同期していないスナップショットをリシンクさせる場合に、前記コントローラは、前記ボリュームのための第1のメタ情報をコピーして、スナップショットボリュームのための第1のメタ情報にする
ことを特徴とする請求項
1に記載のストレージシステム。
【請求項8】
前記ボリュームまたはスナップショットボリュームを削除する場合に、削除する前記ボリュームまたはスナップショットボリュームのための第1のメタ情報を削除し、前記削除する前記ボリュームまたはスナップショットボリュームが参照する第2のメタ情報を削除可能か判断し、削除可能な第2のメタ情報を削除する
ことを特徴とする請求項
1に記載のストレージシステム。
【請求項9】
記憶装置に格納するデータを処理するコントローラを備えたストレージシステムが行うストレージシステムにおけるデータ複製方法において、
前記ストレージシステムは、前記記憶装置に格納するデータを格納する追記領域を有し、
前記コントローラは、ホストがIOを行うボリュームを提供し、
前記ストレージシステムは、前記ボリュームから前記追記領域のデータを参照するためのメタ情報を有し、
前記コントローラが、
前記ボリュームにデータを更新するライトを行う場合に、前記追記領域内の更新前のデータを残して、新規領域に更新後のデータを格納し、前記更新後のデータを参照するように前記メタ情報を書き換え、
スナップショットを作成する場合に、前記ボリュームのためのメタ情報をコピーすることで、スナップショットボリュームを作成し、
前記ボリューム及び前記スナップショットボリュームがマッピングテーブルを参照し、前記マッピングテーブルが前記追記領域を参照することにより、前記メタ情報により前記追記領域のデータを参照する
各処理を有し、
前記メタ情報は、前記ボリューム及びスナップショットがそれぞれ有して前記マッピングテーブルを参照するための第1のメタ情報と、前記マッピングテーブルが有して前記追記領域を参照するための第2のメタ情報と、を有する
ことを特徴とするデータ複製方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージシステム及びストレージシステムにおけるデータ複製方法に関する。
【背景技術】
【0002】
近年、データ利活用ニーズが高まり、データ複製の機会が増えている。これに伴い、ストレージシステムにおいて、Snapshot機能がますます重要になっている。従来から、Snapshotの代表的な実現手段にRedirect on Write(RoW)方式がある(例えば特許文献1参照)。RoW方式には、データやメタ情報のコピーがないため、Snapshot作成時のI/O性能に対する影響が小さいという利点がある。RoW方式は、AFA(All Flash Array)装置で多く採用されている。
【0003】
RoW方式は、データを追い書きする方式である。追い書きとは、ストレージシステムにデータをライトする際、ライト前に格納されていたデータを上書きせず、新規領域にライトデータを格納し、新規領域に格納したデータを参照するようにメタ情報を書き換えるデータ格納方式のことである。メタ情報はツリー構造で管理される。ある複製元ボリュームのSnapshotを取得すると、その時点の複製元ボリュームのメタ情報ツリーのRootをSnapshotのメタ情報ツリーのRootから参照する。この時点で、複製元ボリュームのRootはSnapshotから参照されているため、書き換え不可能になりリードのみ許可される。又、複製元ボリュームへのライトに伴い複製元に新たなRootが用意され、更新データの格納場所を参照する新たなメタ情報を作成し新Root配下に接続する。さらに、ライトされていない領域のデータ格納位置を特定できるように新Rootから旧Rootを参照する。すなわち、Snapshot取得に伴いメタ情報を直接書き換えることはできず、メタ情報も追い書きされる。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら従来技術のRoW方式では、リード時にメタ情報のツリーから所望のデータ及びメタ情報を探索する必要があり、リード性能(特にレスポンス)が悪いという問題がある。また、ライトが増えるとツリー階層が深くなり、ツリー段数を減らす非同期処理が動作し、I/O性能に影響が出てくるという問題がある。
【0006】
また、ツリーのRoot以外のメタ情報は、複数のボリューム及びSnapshotで共有される。しかし、Rootのメタ情報はボリューム及びSnapshot毎の情報である。このため、特定ボリュームやSnapshotに負荷が偏った場合、各ボリューム及び各Snapshotをそれぞれ制御する複数のコントローラのうち特定のコントローラに負荷が集中し、マルチコントローラの資源を使い切れないという問題がある。
【0007】
本発明は上記の課題に鑑みてなされたもので、ストレージシステムにおいてSnapshotの操作性能とI/O性能を両立することを目的とする。
【課題を解決するための手段】
【0008】
上記目的を達成するために、記憶装置に格納するデータを処理するコントローラを備えたストレージシステムにおいて、前記記憶装置に格納するデータを格納する追記領域を有し、前記コントローラは、ホストがIOを行うボリュームを提供し、前記ボリュームから前記追記領域のデータを参照するためのメタ情報を有し、前記コントローラは、前記ボリュームにデータを更新するライトを行う場合に、前記追記領域内の更新前のデータを残して、新規領域に更新後のデータを格納し、前記更新後のデータを参照するように前記メタ情報を書き換え、スナップショットを作成する場合に、前記ボリュームのためのメタ情報をコピーすることで、スナップショットボリュームを作成することを特徴とする。
【発明の効果】
【0009】
本発明によれば、ストレージシステムにおいてSnapshotの操作性能とI/O性能を両立できる。
【図面の簡単な説明】
【0010】
【
図1】実施例に係るストレージシステムの論理構成の概要の説明図。
【
図2】実施例1に係る計算機システムのハードウェア構成の説明図。
【
図3】ストレージシステムが使用するプログラム及び情報の説明図。
【
図7】ディレクトリ領域管理テーブルの構成の説明図。
【
図8】マッピング領域管理テーブルの構成の説明図。
【
図9】ディレクトリ領域割り当てテーブルの構成の説明図。
【
図10】マッピング領域割り当てテーブルの構成の説明図。
【
図11】Snapshot世代管理テーブルの構成の説明図。
【
図12】VOL作成処理の処理手順を示すフローチャート。
【
図13】Snapshot作成処理の処理手順を示すフローチャート。
【
図14】追記処理の処理手順を示すフローチャート。
【
図15】リード処理の処理手順を示すフローチャート。
【
図16】フロントエンドライト処理(PVOL/Snapshot共通)の処理手順を示すフローチャート。
【
図17】バックエンドライト処理の処理手順を示すフローチャート。
【
図18】実施例1のリストア処理の処理手順を示すフローチャート。
【
図19】実施例1のリシンク処理の処理手順を示すフローチャート。
【
図20】PVOL/Snapshot削除処理の処理手順を示すフローチャート。
【
図21】実施例1の効果を説明するための図(その1)。
【
図22】実施例1の効果を説明するための図(その2)。
【
図23】実施例2のリストア処理の処理手順を示すフローチャート。
【
図24】実施例2のリシンク処理の処理手順を示すフローチャート。
【発明を実施するための形態】
【0011】
以下、本発明の実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。また、発明の構成に必須だが周知である構成については、図示及び説明を省略する場合がある。
【0012】
以下の説明において、「xxxテーブル」といった表現により、入力に対して出力が得られる情報を説明することがあるが、この情報は、どのような構造のデータでもよい。従って、「xxxテーブル」を「xxx情報」と言うことができる。
【0013】
また、以下の説明において、各テーブルの構成は一例であり、1つのテーブルは、2以上のテーブルに分割されてもよいし、2以上のテーブルの全部又は一部が1つのテーブルであってもよい。
【0014】
また、以下の説明において、「プログラム」を主語として処理を説明する場合がある。プログラムは、プロセッサ部によって実行されることで、定められた処理を、適宜に記憶部及び/又はインターフェース部などを用いながら行うため、処理の主語が、プロセッサ部(或いは、そのプロセッサ部を有するコントローラのようなデバイス)とされてもよい。
【0015】
プログラムは、計算機のような装置にインストールされてもよいし、例えば、プログラム配布サーバ又は計算機が読み取り可能な(例えば非一時的な)記録媒体にあってもよい。また、以下の説明において、2以上のプログラムが1つのプログラムとして実現されてもよいし、1つのプログラムが2以上のプログラムとして実現されてもよい。
【0016】
また、「プロセッサ部」は、1又は複数のプロセッサである。プロセッサは、典型的には、CPU(Central Processing Unit)のようなマイクロプロセッサであるが、GPU(Graphics Processing Unit)のような他種のプロセッサでもよい。また、プロセッサは、シングルコアでもよいしマルチコアでもよい。また、プロセッサは、処理の一部又は全部を行うハードウェア回路(例えばFPGA(Field-Programmable Gate Array)又はASIC(Application Specific Integrated Circuit))といった広義のプロセッサでもよい。
【0017】
また、以下の説明において、種々の対象の識別情報として、識別番号が使用されるが、識別番号以外の種類の識別情報(例えば、英字や符号を含んだ識別子)が採用されてもよい。以下の説明において、“#”は番号を表し、例えば“xxx#”は、番号で識別されるxxxを表す。
【0018】
また、以下の説明において、同種の要素を区別しないで説明する場合には、参照符号(又は、参照符号のうちの共通符号)を使用し、同種の要素を区別して説明する場合は、要素の識別番号(又は参照符号)を使用することがある。また各図に示す各要素の数は一例であって、図示に限られるものではない。
【実施例1】
【0019】
図1は、実施例に係るストレージシステム201の論理構成の概要の説明図である。ストレージシステム201は、Snapshotを作成する際、RoW(Redirect on Write)方式を用いるストレージシステムである。
図1に示すように、ストレージシステム201は、論理構成として、PVOL(Primary Volume)100、Snapshot101、DSVOL(Data Store Volume)102、及びPool107を有する。
【0020】
PVOL100は、ホスト装置に提供される論理ボリュームである。Snapshot101は、RoW方式により作成されたPVOL100の複製ボリュームであり、ホスト装置に提供される。
【0021】
Pool107は、物理ドライブ(不図示)から物理記憶領域が割り当てられている。DSVOL102は、Pool107から切り出される論理記憶領域で、複数のDSVOL102-i(i=0,1,・・・,n-1(nはPool107毎に固定のDSVOL数))を含む論理記憶領域である。DSVOL102-iは、全て同一容量である。
【0022】
DSVOL102には、PVOL100の管理情報(メタ情報)を保存するPVOL用のディレクトリテーブル103が、DSVOL102-iのそれぞれに、ディレクトリテーブル103-i(i=0,1,・・・,n-1)として分散配置される。PVOL100の管理情報は、2段階層のツリー構成のマッピング情報であり、PVOL用のディレクトリテーブル103は第1階層のマッピング情報に該当する。
【0023】
PVOL用のディレクトリテーブル103は、ディレクトリテーブル103-i(i=0,1,・・・,n-1)のグループであり、PVOL100毎に設けられる。ディレクトリテーブル103にはディレクトリ#が付与される。PVOLの容量によって複数のディレクトリテーブル103が1つのPVOLに割り当てられることがある。その場合、ディレクトリ#も複数割り当てられる。
【0024】
PVOL用のディレクトリテーブル103は、PVOL100上のデータ111-j(j=0,1,2)のPVOL内アドレスを、マッピングテーブル105が格納されるDSVOL102内のアドレスへ変換するテーブルである。
【0025】
またDSVOL102には、Snapshot101の管理情報(メタ情報)を保存するSS(SnapShot)用のディレクトリテーブル104が、DSVOL102-iのそれぞれに、ディレクトリテーブル104-i(i=0,1,・・・,n-1)として分散配置される。SS用のディレクトリテーブル104のうちのディレクトリテーブル104-iは、PVOL用のディレクトリテーブル103のうちのディレクトリテーブル103-iのコピーである。
【0026】
SS用のディレクトリテーブル104は、ディレクトリテーブル104-i(i=0,1,・・・,n-1)のグループであり、Snapshot101毎に設けられる。ディレクトリテーブル104にはディレクトリ#が付与される。Snapshotの容量によって複数のディレクトリテーブル104が1つのSnapshotに割り当てられることがある。その場合、ディレクトリ#も複数割り当てられる。SS用のディレクトリテーブル104は、PVOL用のディレクトリテーブル103と同一のテーブル構成である。
【0027】
SS用のディレクトリテーブル104は、Snapshot101上のデータ111-j(j=1,2,3)のSnapshot内アドレスを、マッピングテーブル105が格納されるDSVOL102内のアドレスへ変換するテーブルである。
【0028】
またDSVOL102には、PVOL100及びSnapshot101の管理情報(メタ情報)を保存するマッピングテーブル105が、DSVOL102-iのそれぞれに、マッピングテーブル105-i(i=0,1,・・・,n-1)として分散配置される。マッピングテーブル105は、上述の2段階層のツリー構成のマッピング情報のうちの第2階層のマッピング情報に該当する。
【0029】
マッピングテーブル105は、マッピングテーブル105-i(i=0,1,・・・,n-1)のグループであり、PVOL100毎に設けられる。複数のマッピングテーブル105を、マッピング#のように番号で区別する。マッピング#は、Snapshotツリー(あるPVOLをRootとしたSnapshotのグループ)毎に割り当てられ、PVOL又はSnapshotへのライトによるデータ容量の増加に応じて増える。
【0030】
マッピングテーブル105は、データ111-j(j=0,1,2,3)のPVOL/Snapshot内アドレスを、追記領域106内アドレスへ変換するテーブルである。
【0031】
またDSVOL102には、PVOL100及びSnapshot101のデータを格納する追記領域106が、DSVOL102-iのそれぞれに、追記領域106-i(i=0,1,・・・,n-1)として分散配置される。
【0032】
以上のように、各DSVOL102-iには、1つ以上の(PVOL用の)ディレクトリテーブル103-i、1つ以上の(SS用の)ディレクトリテーブル104-i、1つ以上のマッピングテーブル105-i、及び追記領域106-iが配置される。
【0033】
図2は、実施例1に係る計算機システム100のハードウェア構成の説明図である。計算機システム100は、ストレージシステム201、サーバシステム202、及び管理システム203を備える。ストレージシステム201とサーバシステム202とは、FC(Fiber Channel)ネットワーク204を介して接続される。ストレージシステム201と管理システム203とは、IP(Internet Protocol)ネットワーク205を介して接続される。なお、FCネットワーク204及びIPネットワーク205は、同一の通信ネットワークであってもよい。
【0034】
ストレージシステム201は、複数のストレージコントローラ210と、複数のPDEV220とを備える。ストレージコントローラ210には、物理ドライブであるPDEV220が接続されている。1つのストレージコントローラ210に対して、1又は複数のDSVOL102-i(i=0,1,・・・,n-1)が割り当てられている。
【0035】
ストレージコントローラ210は、1つ以上のプロセッサ211と、1つ以上のメモリ212と、P-I/F213と、S-I/F214と、M-I/F215とを備える。
【0036】
プロセッサ211は、プロセッサ部の一例である。プロセッサ211は、圧縮及び伸張を行うハードウェア回路を含んでいてもよい。本実施例では、プロセッサ211は、Snapshot作成、リストア、リシンク、圧縮、及び伸張に係る制御等を行う。
【0037】
メモリ212は、記憶部の一例である。メモリ212は、プロセッサ211が実行するプログラム、プロセッサ211が使用するデータ等を記憶する。プロセッサ211は、メモリ212に格納されているプログラムを実行する。なお、本実施例では、例えば、メモリ212及びプロセッサ211の組でメモリが二重化されている。
【0038】
P-I/F213、S-I/F214及びM-I/F215は、インターフェース部の一例である。
【0039】
P-I/F213は、PDEV220とストレージコントローラ210との間のデータのやり取りを仲介する通信インターフェースデバイスである。P-I/F213には、複数のPDEV220が接続される。
【0040】
S-I/F214は、サーバシステム202とストレージコントローラ210との間のデータのやり取りを仲介する通信インターフェースデバイスである。S-I/F214に、FCネットワーク204を介して、サーバシステム202が接続される。
【0041】
M-I/F215は、管理システム203とストレージコントローラ210の間のデータのやり取りを仲介する通信インターフェースデバイスである。M-I/F215に、IPネットワーク205を介して、管理システム203が接続される。
【0042】
サーバシステム202は、1つ以上のホスト装置を含んで構成される。サーバシステム202は、ストレージコントローラ210に対して、I/O先を指定したI/O要求(ライト要求又はリード要求)を送信する。I/O先は、例えば、LUN(Logical Unit Number)のような論理ボリューム番号、LBA(Logical Block Address)のような論理アドレス等である。
【0043】
管理システム203は、1つ以上の管理装置を含んで構成される。管理システム203は、ストレージシステム201を管理する。
【0044】
図3は、ストレージシステム201が使用するプログラム及び情報の説明図である。メモリ212は、ローカルメモリ300、キャッシュメモリ301、共有メモリ302等のメモリ領域を含む。これらのメモリ領域のうちの少なくとも1つは、独立したメモリであってもよい。ローカルメモリ300は、このローカルメモリ300を含むメモリ212と同一組に属するプロセッサ211により使用される。
【0045】
ローカルメモリ300には、ボリューム作成プログラム303、Snapshot作成プログラム304、リードプログラム305、フロントエンドライトプログラム306、バックエンドライトプログラム307、リストアプログラム308、リシンクプログラム309、及びPVOL/Snapshot削除プログラム310が格納される。これらのプログラムは、複数のストレージコントローラ210毎に設けられ、互いに協働して目的の処理を行う。これらのプログラムについては後述する。
【0046】
キャッシュメモリ301には、PDEV220に対してライト又はリードされるデータセットが一時的に格納される。
【0047】
共有メモリ302は、この共有メモリ302を含むメモリ212と同一組に属するプロセッサ211、及び異なる組に属するプロセッサ211の両方により使用される。共有メモリ302には、管理情報が格納される。
【0048】
管理情報は、ボリューム管理テーブル311、ディレクトリ領域管理テーブル312、マッピング領域管理テーブル313、ディレクトリ領域割り当てテーブル314、マッピング領域割り当てテーブル315、及びSnapshot世代管理テーブル316を含む。これらのテーブルについては、図を参照して後述する。
【0049】
図4は、ディレクトリテーブル103-i,104-i(i=0,1,・・・,n-1)の構成の説明図である。PVOL用のディレクトリテーブル103-iとSS用のディレクトリテーブル104-iは同一構成かつ同一データサイズであり、それぞれDSVOL102-iに分散配置される。各ディレクトリテーブル103-i,104-iの1つのエントリは、PVOL100の論理データの粒度(例えば256KB)単位のデータに対応する。すなわちディレクトリテーブル103,104は、PVOL100の論理データの粒度を単位として、複数のDSVOL102-iに分散配置される。ディレクトリテーブル104-i(i=0,1,・・・,n-1)は、DSVOL102-iのストレージコントローラ210の制御により、ディレクトリテーブル103-i(i=0,1,・・・,n-1)がコピーされたテーブルである。
【0050】
ディレクトリテーブル103-i,104-iは、PVOL/Snapshot内アドレス400及び参照先アドレス(マッピング領域内アドレス)401を有する。PVOL/Snapshot内アドレス400は、ディレクトリテーブル103-iの場合はPVOL100内での対象データの格納論理アドレスであり、ディレクトリテーブル104-iの場合はSnapshot101内での対象データの格納論理アドレスである。参照先アドレス(マッピング領域内アドレス)401は、マッピングテーブル105-iへのポインタ情報である。PVOL/Snapshot内アドレス400には上限値(
図4の例では1000000)があり、上限値を超過すると新たなグループ(ディレクトリ#)のディレクトリテーブルが作成される。
【0051】
またアクセスしたPVOL/Snapshot内アドレス400と参照先アドレス(マッピング領域内アドレス)401の対応関係を格納しているテーブルが、該当のディレクトリ#の何れのディレクトリテーブル103-i,104-iであるかは、PVOL/Snapshot内アドレス400をDSVOLの数nで割った剰余で求められる。
【0052】
参照先アドレス(マッピング領域内アドレス)401は、当該ディレクトリテーブル103-i,104-iに対応付けられたマッピングテーブル105-iのマッピング領域内アドレス500に対応する。
【0053】
図5は、マッピングテーブル105-i(i=0,1,・・・,n-1)の構成の説明図である。マッピングテーブル105-iは、マッピング領域内アドレス500、参照先アドレス(追記領域内アドレス)501、及び圧縮後容量502を有する。
【0054】
マッピング領域内アドレス500は、当該マッピングテーブル105-iに対応付けられたディレクトリテーブル103-i,104-iの参照先アドレス(マッピング領域内アドレス)401である。参照先アドレス(追記領域内アドレス)501は、対象データが格納される追記領域106内のアドレスである。圧縮後容量502は、PVOL100又はSnapshot101の対象データが、追記領域106-iに格納される際の圧縮後のデータ量である。
【0055】
図6は、ボリューム管理テーブル311の構成の説明図である。ボリューム管理テーブル311は、PVOL100、Snapshot101、及びDSVOL102等のボリュームを管理するテーブルである。ボリューム管理テーブル311は、VOL#600、属性601、ディレクトリ#602、マッピング#603、容量604、及びPool#605を有する。
【0056】
VOL#600は、ボリュームを識別する番号である。属性601は、VOL#600で識別されるボリュームの種別であり、PVOL、Snapshot、DSVOL等がある。ディレクトリ#は、VOL#600で識別されるボリュームに割り当てられたディレクトリテーブルのグループの番号である。
【0057】
ディレクトリ#として、当該ボリュームの容量に応じて、DSVOL102上の領域が複数割り当てられる。例えば
図6では、VOL#が0のPVOLには、ディレクトリ#が0,10,200のPVOL用のディレクトリテーブルのグループが割り当てられる。またVOL#が1のSnapshotには、ディレクトリ#が1,5,20のSnapshot用のディレクトリテーブルのグループが割り当てられる。DSVOL102のディレクトリ#602は、NULLである。
【0058】
マッピング#603は、VOL#600で識別されるボリュームに割り当てられるマッピングテーブルのグループの番号である。PVOL100をコピーしたSnapshot101のマッピング#は、複写元のPVOLと共通である。例えば
図6では、VOL#が0,1の各ボリュームには、マッピング#が2,5,10のマッピングテーブルのグループが割り当てられる。DSVOL102のマッピング#603は、NULLである。
【0059】
容量604は、VOL#600で識別されるボリュームの容量である。Pool#605は、VOL#600で識別されるボリュームが切り出されるPoolの番号である。
【0060】
図7は、ディレクトリ領域管理テーブル312の構成の説明図である。ディレクトリ領域管理テーブル312は、DSVOL102上における各ディレクトリ#の先頭アドレスを管理するテーブルである。ディレクトリ領域管理テーブル312は、ディレクトリ#700及びディレクトリ領域先頭アドレス701を有する。例えばディレクトリ#が0のディレクトリには、同一のDSVOL102上のアドレス50を先頭アドレスとする領域が確保されている。
【0061】
対象データのPVOL/Snapshot内アドレスを、1つのディレクトリテーブルの管理可能容量で除算した商から、当該VOL/Snapshot内のディレクトリ#の通番が求まる。ディレクトリ#700は、
図6のディレクトリ#602を参照し、ディレクトリ#の通番から求められる。
【0062】
図8は、マッピング領域管理テーブル313の構成の説明図である。マッピング領域管理テーブル313は、DSVOL102上における各マッピング#の先頭アドレスを管理するテーブルである。マッピング領域管理テーブル313は、マッピング#800及びマッピング領域先頭アドレス801を有する。
【0063】
図9は、ディレクトリ領域割り当てテーブル314の構成の説明図である。ディレクトリ領域割り当てテーブル314は、DSVOL102上のディレクトリ領域先頭アドレス900に割り当てられている各ディレクトリ#を管理するテーブルであり、ディレクトリ領域管理テーブル312の逆引きテーブルである。ディレクトリ領域割り当てテーブル314は、ディレクトリ領域先頭アドレス900及び割り当てディレクトリ#901を有する。
【0064】
図10は、マッピング領域割り当てテーブル315の構成の説明図である。マッピング領域割り当てテーブル315は、DSVOL102上のマッピング領域先頭アドレス1000に割り当てられている各マッピング#を管理するテーブルであり、マッピング領域管理テーブル313の逆引きテーブルである。マッピング領域割り当てテーブル315は、マッピング領域先頭アドレス1000及び割り当てマッピング#1001を有する。
【0065】
図11は、Snapshot世代管理テーブル316の構成の説明図である。Snapshot世代管理テーブル316では、複製元であるPVOL100のPVOL#毎に、Snapshotの最新世代が管理される。Snapshot世代管理テーブル316は、PVOL#1100、最新世代#1101、世代#1102、Snapshot作成時刻1103、Snapshot#1104、及び状態1105を有する。Snapshot世代管理テーブル316は、PVOL#毎に例えば1024個の世代を管理する(世代#=0~1023)。
【0066】
Snapshot世代管理テーブル316では、各PVOL#のSnapshot作成毎に最新世代#がインクリメントされ、最新世代#1101に該当するSnapshot作成時刻1103、Snapshot#1104、及び状態1105が更新される。状態1105には、PVOLのSnapshot作成後に、Snapshotに対するI/Oを不可としつつPVOLとSnapshotのデータを同期させるPAIRがある。また状態1105には、PVOLとSnapshotのデータを同期させないSUSPEND(分割)がある。
【0067】
図12は、VOL作成処理の処理手順を示すフローチャートである。VOL作成処理は、管理システム203からの指示に応じて、ボリューム作成プログラム303によって実行される。
【0068】
先ずS1200では、ボリューム作成プログラム303は、指定条件(ボリュームの容量等)を充足するPVOLのディレクトリ領域及びマッピング領域の確保が各DSVOL102-iで可能かを、各DSVOL102-iを制御する全てのストレージコントローラ210により確認する。ボリューム作成プログラム303は、S1200で領域確保が可能と判定された場合(S1201Yes)にS1202へ処理を移し、S1200で領域確保が不可能と判定された場合(S1201No)にVOL作成処理を終了する。
【0069】
S1202では、ボリューム作成プログラム303は、S1201で割り当て可能とされた当該PVOLに割り当てるディレクトリ領域の先頭アドレス及び割り当てディレクトリ#を決定する。ボリューム作成プログラム303は、決定したディレクトリ領域の先頭アドレス及び割り当てディレクトリ#を追記してディレクトリ領域割り当てテーブル314を更新する。
【0070】
次にS1203では、ボリューム作成プログラム303は、S1201で割り当て可能とされた当該PVOLに割り当てるマッピング領域の先頭アドレス及び割り当てマッピング#を決定する。ボリューム作成プログラム303は、決定したマッピング領域の先頭アドレス及び割り当てマッピング#を追記してマッピング領域割り当てテーブル315を更新する。
【0071】
次にS1204では、ボリューム作成プログラム303は、S1202で更新したディレクトリ領域割り当てテーブル314のディレクトリ領域先頭アドレス900の値をディレクトリ領域先頭アドレス701の値とし、割り当てディレクトリ#901の値をディレクトリ#700の値として、ディレクトリ領域管理テーブル312を更新する。
【0072】
次にS1205では、ボリューム作成プログラム303は、S1203で更新したマッピング領域割り当てテーブル315のマッピング領域先頭アドレス1000の値をマッピング領域先頭アドレス801の値とし、割り当てマッピング#1001の値をマッピング#800の値として、マッピング領域管理テーブル313を更新する。
【0073】
次にS1205では、ボリューム作成プログラム303は、本VOL作成処理で作成された属性=PVOLのディレクトリ#、マッピング#、容量、及びPool#を含むボリューム情報をボリューム管理テーブル311に追記して更新する。
【0074】
図13は、Snapshot作成処理の処理手順を示すフローチャートである。Snapshot作成処理は、管理システム203からの指示に応じて、Snapshot作成プログラム304によって実行される。
【0075】
先ずS1300では、Snapshot作成プログラム304は、Snapshot作成対象のPVOLである複製元VOLのVOL#を受領する。次にS1301では、Snapshot作成プログラム304は、S1300で受領した複製元VOLへデステージされていないダーティデータがキャッシュメモリ301にあるかを判定する。Snapshot作成プログラム304は、複製元VOLへデステージされていないダーティデータがある場合(S1301Yes)にS1302へ処理を移し、ダーティデータがない場合(S1301No)にS1303へ処理を移す。S1302では、Snapshot作成プログラム304は、ダーティデータの追記処理を行うが、詳細は
図14を参照して後述する。
【0076】
S1303では、Snapshot作成プログラム304は、ボリューム管理テーブル311から、複製元VOLの容量及びディレクトリ#を取得する。次にS1304では、Snapshot作成プログラム304は、複製元VOLの複製であるSnapshot(複製先)のディレクトリ領域がDSVOL102で確保可能か確認する。Snapshot作成プログラム304は、Snapshot(複製先)のディレクトリ領域が確保可能の場合(S1305Yes)にS1306へ処理を移し、確保不可能の場合(S1305No)に本Snapshot作成処理を終了する。
【0077】
S1306では、Snapshot作成プログラム304は、本Snapshot作成処理で作成された属性=Snapshotのディレクトリ#、マッピング#、容量、及びPool#を含むボリューム情報をボリューム管理テーブル311に追記して更新する。Snapshotのマッピング#603の値は、複製元PVOLのマッピング#の値のコピーである。
【0078】
次にS1307では、Snapshot作成プログラム304は、作成したSnapshotの最新世代#1101を+1インクリメントし、Snapshot作成時刻1103、Snapshot#1104(ボリューム管理テーブル311のVOL#に該当)、状態1105=SUSPENDを設定してSnapshot世代管理テーブル316を更新する。
【0079】
次にS1308では、Snapshot作成プログラム304は、S1305で割り当て可能とされた当該Snapshotに割り当てるディレクトリ領域の先頭アドレス及び割り当てディレクトリ#を追記してディレクトリ領域割り当てテーブル314を更新する。
【0080】
次にS1309では、Snapshot作成プログラム304は、S1308で更新したディレクトリ領域割り当てテーブル314のディレクトリ領域先頭アドレス900の値をディレクトリ領域先頭アドレス701の値とし、割り当てディレクトリ#901の値をディレクトリ#700の値として、ディレクトリ領域管理テーブル312を更新する。
【0081】
次にS1310では、Snapshot作成プログラム304は、複数のDSVOL102-iの各ストレージコントローラ210に対してディレクトリコピーを指示する。次に1311では、Snapshot作成プログラム304は、S1310のディレクトリコピーの指示を受け、複数のDSVOL102-iの各ストレージコントローラ210を制御し、複製元VOLであるPVOLのディレクトリテーブル103-iを、S1308,S1309で確保した各DSVOL102-iのディレクトリ領域へ並列処理でコピーする。コピーにより作成されたディレクトリテーブル104-iには、新しいディレクトリ#が付与される。
【0082】
図14は、追記処理の処理手順を示すフローチャートである。
図14は、
図13のS1302、
図16のS1604、
図17のS1701、
図18のS1802、
図19のS1902、
図23のS2102、
図24のS2202で実行される各追記処理の詳細を示す。以下、
図13のS1302で実行される追記処理として、Snapshot作成プログラム304を処理主体として説明する。
【0083】
なお
図16のS1604ではフロントエンドライトプログラム306、
図17のS1701ではバックエンドライトプログラム307、
図18のS1802ではリストアプログラム308、
図19のS1902ではリシンクプログラム309、
図23のS2102ではリストアプログラム308、
図24のS2202ではリシンクプログラム309のそれぞれが処理主体になる。
【0084】
先ずS1400では、Snapshot作成プログラム304は、ダーティデータを特定する。次にS1401では、Snapshot作成プログラム304は、Snapshot世代管理テーブル316を参照し、PVOLがSUSPEND状態のSnapshotを有しているかを判定する。Snapshot作成プログラム304は、SUSPEND状態のSnapshotが存在しない場合(S1401No)、S1404に処理を移し、SUSPEND状態のSnapshotが存在する場合(S1401Yes)、S1402に処理を移す。
【0085】
S1402では、Snapshot作成プログラム304は、追記処理対象のダーティデータの論理アドレス(LBA)に対応するディレクトリコピーが完了しているかを判定する。Snapshot作成プログラム304は、ディレクトリコピーが完了している場合(S1402Yes)、S1404に処理を移し、ディレクトリコピーが完了していない場合(S1402No)、当該領域のディレクトリ情報を追出しコピーする。追出しコピーとは、
図13のS1311でのコピー処理で未コピーの領域を追記処理する場合に、追記処理対象の領域のディレクトリ情報のみをピンポイントでコピーする処理である。
【0086】
次にS1404では、Snapshot作成プログラム304は、S1400で特定したダーティデータを圧縮する。次にS1405では、Snapshot作成プログラム304は、S1404で圧縮した圧縮データセットを複製元VOLの追記領域にコピーする。
【0087】
次にS1406では、Snapshot作成プログラム304は、マッピングテーブル105の各エントリのうち、参照先アドレス(追記領域内アドレス)501が設定されていない未使用のエントリに、S1404で圧縮したデータの追記領域内の格納位置を保持する。すなわち圧縮データのコピー先アドレスを参照先アドレス(追記領域内アドレス)501に設定する。
【0088】
次にS1407では、Snapshot作成プログラム304は、ディレクトリテーブル103の各エントリのうち、当該データの論理アドレス(ホストからアクセス可能なLBA)に対応するエントリに、S1406で作成したマッピング情報のマッピング領域内アドレス500を参照先アドレス(マッピング領域内アドレス)401に設定する。
【0089】
次にS1408では、Snapshot作成プログラム304は、S1405で追記領域にコピーされたダーティデータをデステージする。
【0090】
図15は、リード処理の処理手順を示すフローチャートである。リード処理は、ホスト装置からのリード要求に応じて、リードプログラム305によって実行される。
【0091】
先ずS1500では、リードプログラム305は、サーバシステム202からのリード要求が対象とするデータのPVOL又はSnapshot内でのアドレスを取得する。次にS1501では、リードプログラム305は、リード要求の対象データがキャッシュヒットするかを判定する。リードプログラム305は、リード要求の対象データがキャッシュヒットする場合(S1501Yes)にS1505へ処理を移し、キャッシュヒットしない場合(S1501No)にS1502へ処理を移す。
【0092】
S1502では、リードプログラム305は、ディレクトリテーブル103,104を参照して、S1500で取得したPVOL/Snapshot内アドレスを基に、参照先アドレス(マッピング領域内アドレス)401を取得する。リードプログラム305は、リード要求の対象データが、PVOL100内のデータである場合にはPVOL用のディレクトリテーブル103を参照し、Snapshot101内のデータである場合にはSnapshot用のディレクトリテーブル104を参照する。
【0093】
次にS1503では、リードプログラム305は、マッピングテーブル105を参照し、S1502で取得した参照先アドレス(マッピング領域内アドレス)を基に参照先アドレス(追記領域内アドレス)501を取得する。次にS1504では、リードプログラム305は、S1503で特定した追記領域内アドレスに格納されているデータを伸長しつつキャッシュメモリにステージングする。
【0094】
次にS1505では、リードプログラム305は、S1501でキャッシュヒットしたデータ又はS1504でステージングしたデータをホスト装置に転送する。
【0095】
図16は、フロントエンドライト処理(PVOL/Snapshot共通)の処理手順を示すフローチャートである。フロントエンドライト処理は、ホスト装置から、PVOL100又はSnapshot101に対するライト要求を受け付けた場合に、フロントエンドライトプログラム306によって実行される。
【0096】
先ずS1600では、フロントエンドライトプログラム306は、ホスト装置からのライト要求の対象データがキャッシュヒットするかを判定する。フロントエンドライトプログラム306は、ライト要求の対象データがキャッシュヒットする場合(S1600Yes)にS1602へ処理を移し、キャッシュヒットしない場合(S1600No)にS1601へ処理を移す。S1601では、フロントエンドライトプログラム306は、キャッシュメモリ301においてキャッシュ領域を確保する。
【0097】
S1602では、フロントエンドライトプログラム306は、S1600でキャッシュヒットした対象データがダーティデータであるかを判定する。フロントエンドライトプログラム306は、S1600でキャッシュヒットした対象データがダーティデータである場合(S1602Yes)にS1603へ処理を移し、ダーティデータでない場合(S1602No)にS1605へ処理を移す。
【0098】
S1603では、フロントエンドライトプログラム306は、S1602で判定されたダーティデータのWR(WRight)世代#と、当該ライト要求の対象データの世代#が一致するかを判定する。WR世代#はキャッシュデータの管理情報(不図示)に保持される。又、当該ライト要求の対象データの世代#は
図11の最新世代#1101から取得される。S1603は、直前に取得されたスナップショットの対象データ(ダーティデータ)の追記処理がされていないうちに、当該ライト要求の対象データでダーティデータを更新してしまい、スナップショットのデータを書きつぶしてしまうことを防ぐ。フロントエンドライトプログラム306は、WR世代#と最新世代#が一致する場合(S1603Yes)にS1605へ処理を移し、WR世代#と最新世代#が一致しない場合(S1603No)にS1604へ処理を移す。
【0099】
S1604では、フロントエンドライトプログラム306は、
図14を参照して説明した追記処理を実行する。S1604により、最新世代#と一致しないWR世代#のダーティデータを追記領域へ書き込み、キャッシュメモリ301からデステージする。
【0100】
S1605では、フロントエンドライトプログラム306は、S1601で確保したキャッシュ領域、又は、追記処理が必要なダーティデータを追記処理して再度ダーティデータを生成可能になったキャッシュ領域へ、ライト要求の対象データを書き込む。
【0101】
S1606では、フロントエンドライトプログラム306は、S1605でキャッシュメモリ301へ書き込んだキャッシュデータのWR世代#を、S1603で比較した最新世代#に設定する。S1607では、フロントエンドライトプログラム306は、ホスト装置へ正常応答(Good応答)を返却する。
【0102】
図17は、バックエンドライト処理の処理手順を示すフローチャートである。バックエンドライト処理は、DSVOL102の追記領域106に未反映のデータ(ダーティデータ)がキャッシュメモリ301上にある場合、未反映のデータを追記領域106に書き込む処理である。バックエンドライト処理は、フロントエンド処理と同期又は非同期で行われる。バックエンドライト処理は、バックエンドライトプログラム307により実行される。
【0103】
先ずS1700では、バックエンドライトプログラム307は、キャッシュメモリ301上にダーティデータが有るかを判定する。バックエンドライトプログラム307は、キャッシュメモリ301上にダーティデータが有る場合(S1700Yes)にS1701へ処理を移し、ダーティデータが無い場合(S1700No)に本バックエンドライト処理を終了する。S1701では、バックエンドライトプログラム307は、
図14で説明した追記処理を実行する。
【0104】
図18は、実施例1のリストア処理の処理手順を示すフローチャートである。リストア処理は、管理システム203からのリストア(データ復元)の指示に応じて、リストアプログラム308によって実行される。
【0105】
先ずS1800では、リストアプログラム308は、管理システム203から、リストア先のPVOL#及びリストア元のSnapshot#を受領する。次にS1801では、リストアプログラム308は、S1800でSnapshot#を受領したリストア元Snapshotにダーティデータが有るかを判定する。リストアプログラム308は、リストア元Snapshotにダーティデータが有る場合(S1801Yes)にS1802へ処理を移し、ダーティデータが無い場合(S1801No)にS1803へ処理を移す。
【0106】
S1802では、リストアプログラム308は、
図14で説明した追記処理を実行する。
【0107】
S1803では、リストアプログラム308は、ボリューム管理テーブル311からリストア元Snapshotのディレクトリ#及びリストア先PVOLのディレクトリ#を取得する。次にS1804では、リストアプログラム308は、複数のDSVOL102-iの各ストレージコントローラ210に対して、S1803で取得されたリストア元/先のディレクトリコピーを指示する。
【0108】
次にS1805では、リストアプログラム308は、各ストレージコントローラ210の並列処理によって、S1803で取得したリストア元のSnapshotのディレクトリ#のディレクトリテーブル104-iを、リストア先のPVOLのディレクトリ#のディレクトリテーブル103-iへそれぞれコピーする。
【0109】
図19は、実施例1のリシンク処理の処理手順を示すフローチャートである。リシンク処理は、管理システム203からのリシンク(データ再同期)の指示に応じて、リシンクプログラム309によって実行される。
【0110】
先ずS1900では、リシンクプログラム309は、管理システム203から、リシンク先Snapshot#及びリシンク元PVOL#を受領する。次にS1901では、リシンクプログラム309は、リシンク元PVOLにダーティデータが有るかを判定する。リシンクプログラム309は、リシンク元PVOLにダーティデータが有る場合(S1901Yes)にS1902へ処理を移し、ダーティデータが無い場合(S1901No)にS1903へ処理を移す。
【0111】
S1902では、リシンクプログラム309は、
図14で説明した追記処理を実行する。
【0112】
S1903では、リシンクプログラム309は、ボリューム管理テーブル311からリシンク元PVOLのディレクトリ#及びリシンク先Snapshotのディレクトリ#を取得する。次にS1904では、リシンクプログラム309は、複数のDSVOL102-iの各ストレージコントローラ210に対して、S1903で取得されたディレクトリコピーを指示する。
【0113】
次にS1905では、リシンクプログラム309は、各ストレージコントローラ210の並列処理によって、S1903で取得したリシンク元のPVOLのディレクトリ#のディレクトリテーブル103-iを、リシンク先のSnapshotのディレクトリ#のディレクトリテーブル104-iへそれぞれコピーする。
【0114】
図20は、PVOL/Snapshot削除処理の処理手順を示すフローチャートである。PVOL/Snapshot削除処理は、管理システム203からのボリューム削除又はSnapshot削除の指示に応じて、PVOL/Snapshot削除プログラム310によって実行される。
【0115】
先ずS2000では、PVOL/Snapshot削除プログラム310は、削除対象のPVOL#又はSnapshot#を受領する。次にS2001では、PVOL/Snapshot削除プログラム310は、ボリューム管理テーブル311から、削除対象のPVOL又はSnapshotのディレクトリ#及びマッピング#を取得する。
【0116】
次にS2002では、PVOL/Snapshot削除プログラム310は、削除対象のPVOL又はSnapshotのディレクトリテーブルの削除を、各ディレクトリテーブルが分散配置されている各DSVOL102を制御する各ストレージコントローラ210に対して指示する。
【0117】
次にS2003では、PVOL/Snapshot削除プログラム310は、ディレクトリ領域管理テーブル312から、S2002で削除されたディレクトリテーブルに該当するレコードを削除する。次にS2004では、PVOL/Snapshot削除プログラム310は、S2003でディレクトリ領域管理テーブル312から削除したレコードに対応するディレクトリ領域先頭アドレス900のレコードを、ディレクトリ領域割り当てテーブル314から削除する。
【0118】
次にS2005では、PVOL/Snapshot削除プログラム310は、マッピング領域削除可能(つまり削除対象が、SnapshotがないPVOL、又は、SnapshotがあるPVOL単体)であるかを判定する。PVOL/Snapshot削除プログラム310は、マッピング領域削除可能の場合(S2005Yes)にS2006へ処理を移し、マッピング領域削除不可能の場合(S2005No)にS2009へ処理を移す。
【0119】
S2006では、PVOL/Snapshot削除プログラム310は、削除対象のPVOLのマッピングテーブルの削除を、各マッピングデーブルが分散配置されている各DSVOL102を制御する各ストレージコントローラ210に対して指示する。
【0120】
次にS2007では、PVOL/Snapshot削除プログラム310は、マッピング領域管理テーブル313から、削除されたマッピングテーブルに該当するレコードを削除する。次にS2008では、PVOL/Snapshot削除プログラム310は、S2007でマッピング領域管理テーブル313から削除したレコードに対応するマッピング領域先頭アドレス1000のレコードを、マッピング領域割り当てテーブル315から削除する。
【0121】
次にS2009では、PVOL/Snapshot削除プログラム310は、削除したPVOL又はSnapshotに該当するボリュームのレコードをボリューム管理テーブル311から削除する。
【0122】
次にS2010では、PVOL/Snapshot削除プログラム310は、削除したボリュームはSnapshotかを判定する。PVOL/Snapshot削除プログラム310は、削除したボリュームがSnapshotである場合(S2010Yes)にS2011へ処理を移し、削除したボリュームがPVOLである場合(S2010No)に本PVOL/Snapshot削除処理を終了する。
【0123】
S2011では、PVOL/Snapshot削除プログラム310は、削除したSnapshotのレコードをSnapshot世代管理テーブル316から削除する。この際、Snapshot世代管理テーブル316において、削除したSnapshotが最新世代である場合には、最新世代を削除したSnapshotの次に新しい世代のSnapshotを最新世代とする。
【0124】
【0125】
本実施例では、
図21に示すように、メタ情報のツリーを、第1階層のメタ情報であるPVOL用のディレクトリテーブル103と、第2階層のメタ情報であるPVOLとSnapshot共用のマッピングテーブル105の2段構成とする。PVOL用のディレクトリテーブル103は、データを参照するメタ情報へのポインタを管理するテーブルである。
【0126】
そしてSnapshot取得時には、1段目のPVOL用のディレクトリテーブル103のみをコピーし、Snapshot用のディレクトリテーブル104を作成する。PVOL100からのリード及びライトは、ディレクトリテーブル103及びマッピングテーブル105に基づいてデータにアクセスされる。またSnapshot101からのリード及びライトは、ディレクトリテーブル104及びマッピングテーブル105に基づいてデータにアクセスされる。これにより、データアクセス時の探索のオーバーヘッドを低減できる。
【0127】
また本実施例では、
図22に示すように、各ストレージコントローラ210により制御される複数のDSVOL102へ、PVOL用のディレクトリテーブル103を、細粒度で分散配置する。そして、Snapshot取得時は、複数のストレージコントローラ210がそれぞれのDSVOL102内に分散配置されているPVOL用のディレクトリテーブル103単位でテーブルコピーを行う。この並列処理によるコピーのため、Snapshot作成時間を短縮できる。さらに、特定のPVOL/SnapshotにI/O負荷が偏って高負荷になっても、複数のストレージコントローラ210に負荷分散するため、複数のストレージコントローラ資源を有効活用することができる。
【0128】
よって本実施例によれば、ストレージシステムに求められる機能の性能を損ねず、I/O性能と、ストレージシステム操作性能の両立を図ることができる。またI/O負荷の偏りがあっても、1つのストレージコントローラの性能に律速されることなく、マルチコントローラのメリットを十分に享受できる。またストレージシステムの性能低下や容量を気にすることなく、オンデマンドにボリュームの複製を作成することができる。
【実施例2】
【0129】
実施例2は実施例1と比較して、リストア処理及びリシンク処理が異なる。実施例2のリストア処理では、ディレクトリテーブルをコピーせず、リストア先のディレクトリ#をリストア元のディレクトリ#と共通となるようにボリューム管理テーブル(
図6)を更新し、リストア元/先で同じディレクトリ領域を参照する。
【0130】
また実施例2のリシンク処理では、ディレクトリテーブルをコピーせず、リシンク先のディレクトリ#をリシンク元のディレクトリ#と共通となるようにボリューム管理テーブル(
図6)を更新し、リストア元/先で同じディレクトリ領域を参照する。
【0131】
図23は、実施例2のリストア処理の処理手順を示すフローチャートである。
図23におけるS2100,S2101,S2102,S2103は、
図18におけるS1800,S1801,S1802,S1803のそれぞれと同じである。
【0132】
S2103に続きS2104では、リストアプログラム308は、ボリューム管理テーブル311において、リストア先PVOLのディレクトリ#をリストア元Snapshotのディレクトリ#で更新する。
図6の例では、リストア元のVOL#=1の属性=Snapshotのディレクトリ#(1,5,20)で、リストア先のVOL#=0の属性=PVOLのディレクトリ#602を更新する。次にS2105では、リストアプログラム308は、Snapshot世代管理テーブル316のリストア元Snapshotの状態1105をPAIRに変更する。
【0133】
図24は、実施例2のリシンク処理の処理手順を示すフローチャートである。
図24におけるS2200,S2201,S2202,S2203は、
図19におけるS1900,S1901,S1902,S1903のそれぞれと同じである。
【0134】
S2203に続きS2204では、リシンクプログラム309は、ボリューム管理テーブル311において、リシンク先Snapshotのディレクトリ#をリシンク元PVOLのディレクトリ#で更新する。
図6の例では、リシンク元のVOL#=0の属性=PVOLのディレクトリ#(0,10,200)で、リシンク先のVOL#=1の属性=Snapshotのディレクトリ#602を更新する。次にS2205では、リシンクプログラム309は、Snapshot世代管理テーブル316のリシンク先Snapshotの状態1105をPAIRに変更する。
【0135】
このように実施例2では、実施例1のリストア処理及びリシンク処理と比較して、ディレクトリテーブルのコピーを行わず、参照先の変更のみであるので、処理量が少ないという利点がある。
【0136】
なお、本発明は上述の実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、かかる構成の削除に限らず、構成の置き換えや追加も可能である。
【0137】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記録媒体をコンピュータに提供し、そのコンピュータが備えるプロセッサが記録媒体に格納されたプログラムコードを読み出す。この場合、記録媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記録媒体は本発明を構成することになる。このようなプログラムコードを供給するための記録媒体としては、例えば、フレキシブルディスク、CD-ROM、DVD-ROM、ハードディスク、SSD(Solid State Drive)、光ディスク、光磁気ディスク、CD-R、磁気テープ、不揮発性のメモリカード、ROMなどが用いられる。
【0138】
また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、C/C++、perl、Shell、PHP、Java(登録商標)等の広範囲のプログラム又はスクリプト言語で実装できる。
【0139】
上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。
【符号の説明】
【0140】
100:計算機システム、103,103-i,104,104-i:ディレクトリテーブル、105,105-i:マッピングテーブル、106,106-i:追記領域、201:ストレージシステム、202:サーバシステム、203:管理システム、210:ストレージコントローラ