(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023056222
(43)【公開日】2023-04-19
(54)【発明の名称】ストレージシステム及びストレージシステムにおけるデータ複製方法
(51)【国際特許分類】
G06F 3/06 20060101AFI20230412BHJP
G06F 11/14 20060101ALI20230412BHJP
G06F 16/11 20190101ALI20230412BHJP
【FI】
G06F3/06 304F
G06F3/06 301Z
G06F3/06 302Z
G06F3/06 301W
G06F11/14 648
G06F16/11
【審査請求】有
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2021165438
(22)【出願日】2021-10-07
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110002365
【氏名又は名称】弁理士法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】松下 貴記
(72)【発明者】
【氏名】山賀 祐典
(57)【要約】
【課題】ストレージシステムにおいてデータの複製に関係する処理を高速化する。
【解決手段】論理ボリューム及びスナップショットに対応付けられる第1の制御情報とプールボリューム上のデータに対して対応付けられる第2の制御情報とを保持し、第1の制御情報と第2の制御情報とを対応付けることで、論理ボリューム及びスナップショットのデータを管理し、論理ボリュームと1又は複数のスナップショットの時系列を第1の制御情報に関連付けた世代情報により管理し、プールボリューム上の各データについて、当該データが作成された世代を示す世代情報を第2の制御情報に関連付けて管理し、論理ボリュームやスナップショットに係るデータの処理とは非同期に第1の制御情報や第2の制御情報の無効化を実行し、無効化にあたり、第1の制御情報に関連付けた世代情報と第2の制御情報に関連付けた世代情報とを参照して、無効化の可否を判定する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
ホスト装置に対して論理ボリュームを提供するコントローラと、データを格納する物理記憶デバイスとを有し、前記論理ボリュームの複製であるスナップショットを作成可能なストレージシステムであって、
前記コントローラは、
前記物理記憶デバイスを用いて前記論理ボリュームに対応させるプールボリュームを形成し、
前記論理ボリューム及び前記スナップショットに対応付けられる第1の制御情報と前記プールボリューム上のデータに対して対応付けられる第2の制御情報とを保持し、
前記第1の制御情報と前記第2の制御情報とを対応付けることで、前記論理ボリューム及び前記スナップショットのデータを管理し、
前記論理ボリュームと1又は複数のスナップショットの時系列を前記第1の制御情報に関連付けた世代情報により管理し、
前記プールボリューム上の各データについて、当該データが作成された世代を示す世代情報を前記第2の制御情報に関連付けて管理し、
前記論理ボリューム及び/又は前記スナップショットに係るデータの処理とは非同期に前記第1の制御情報及び/又は前記第2の制御情報の無効化を実行し、
前記無効化にあたり、前記第1の制御情報に関連付けた世代情報と前記第2の制御情報に関連付けた世代情報とを参照して、無効化の可否を判定する
ことを特徴とするストレージシステム。
【請求項2】
前記コントローラは、前記無効化の対象となる前記第1の制御情報の世代が対象世代として特定された場合に、前記対象世代の直系における1世代古い世代における参照状態と、前記対象世代の直系における1世代新しい世代における参照状態に基づいて、前記無効化の可否を判定する
ことを特徴とする請求項1に記載のストレージシステム。
【請求項3】
前記コントローラは、
最新世代情報を管理し、
前記論理ボリュームについて前記スナップショットを作成した場合に、作成前の前記最新世代情報を作成したスナップショットの世代情報に格納して前記最新世代情報をインクリメントし、
前記スナップショットから前記論理ボリュームのリストアを行った場合にも前記最新世代情報をインクリメントする
ことを特徴とする請求項1に記載のストレージシステム。
【請求項4】
前記コントローラは、
前記論理ボリュームにおいて書き込みを行う場合に、前記プールボリュームの新たな領域に書き込み対象のデータを格納し、前記第1の制御情報と前記第2の制御情報の対応関係を切り替えることで、前記論理ボリュームにおける書き込み先のアドレスと書き込み対象のデータを対応付けるとともに、前記論理ボリュームの世代を前記第2の制御情報に関連付け、
前記対応関係の切り替えにより前記第1の制御情報との対応関係が解消された第2の制御情報を無効化の対象とし、
無効化の対象となった第2の制御情報の世代が、前記論理ボリュームの前記第1の制御情報に関連づいた世代と比較して一致していれば、無効化が可能であると判定する
ことを特徴とする請求項1に記載のストレージシステム。
【請求項5】
前記コントローラは、
最新世代情報を管理し、
前記スナップショットから前記論理ボリュームのリストアを行った場合に、リストア元のスナップショットの第1の制御情報を複製して前記論理ボリュームに対応付け、前記最新世代情報をインクリメントし、
前記リストアの前に前記論理ボリュームに対応付けられていた第1の制御情報の世代情報を無効化の対象世代とて特定し、
前記対象世代の第1の制御情報に対応付けられた第2の制御情報について、第2の制御情報に関連付けられた世代が、前記対象世代の直系における1世代古い世代と比較して新しく、かつ、前記対象世代の直系における1世代新しい世代からも参照を受けていない場合に、無効化が可能であると判定する
ことを特徴とする請求項1に記載のストレージシステム。
【請求項6】
前記コントローラは、
前記スナップショットを削除した場合に、削除したスナップショットの第1の制御情報に関連付けられた世代情報を無効化の対象世代として特定し、
前記対象世代の第1の制御情報に対応付けられた第2の制御情報について、第2の制御情報に関連付けられた世代が、前記対象世代の直系における1世代古い世代と比較して新しく、かつ、前記対象世代の直系における1世代新しい世代からも参照を受けていない場合に、無効化が可能であると判定する
ことを特徴とする請求項1に記載のストレージシステム。
【請求項7】
前記コントローラは、
前記第2の制御情報を無効化した場合に、対応するデータを無効化する
ことを特徴とする請求項1に記載のストレージシステム。
【請求項8】
前記コントローラは、
最新世代情報を管理し、
前記論理ボリュームについて書き込み可能なスナップショットを作成する場合に、
書き込み禁止の第1の制御情報と、書き込み許可の第1の制御情報とを作成し、
スナップショット作成前の前記最新世代情報を前記書き込み禁止の第1の制御情報の世代とし、
前記書き込み禁止の第1の制御情報の世代をインクリメントした世代を前記書き込み許可の第1の制御情報の世代とする
ことを特徴とする請求項1に記載のストレージシステム。
【請求項9】
ホスト装置に対して論理ボリュームを提供するコントローラと、データを格納する物理記憶デバイスとを有し、前記論理ボリュームの複製であるスナップショットを作成可能なストレージシステムにおけるデータ複製方法であって、
前記コントローラが、
前記物理記憶デバイスを用いて前記論理ボリュームに対応させるプールボリュームを形成し、
前記論理ボリューム及び前記スナップショットに対応付けられる第1の制御情報と前記プールボリューム上のデータに対して対応付けられる第2の制御情報とを保持し、
前記第1の制御情報と前記第2の制御情報とを対応付けることで、前記論理ボリューム及び前記スナップショットのデータを管理し、
前記論理ボリュームと1又は複数のスナップショットの時系列を前記第1の制御情報に関連付けた世代情報により管理し、
前記プールボリューム上の各データについて、当該データが作成された世代を示す世代情報を前記第2の制御情報に関連付けて管理し、
前記論理ボリューム及び/又は前記スナップショットに係るデータの処理とは非同期に前記第1の制御情報及び/又は前記第2の制御情報の無効化を実行し、
前記無効化にあたり、前記第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を参照する。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、従来の技術では、Snapshotを用いてリストアを行うときに、参照されなくなるデータやメタ情報を無効化する必要がり、リストアに長時間を要する。また、逆参照系のメタ情報(例えばPoolの格納データからプライマリボリュームまたはスナップショットへの参照情報)を持たずに、特定のデータやメタ情報の無効化可否を判定しようとすると、全てのSnapshotについて参照の有無を確認する必要が生じ、無効化可否判定の処理効率が低くなる。
このため、リストアの高速化や無効化処理可否判定の高速化を行い、データの複製に関係する処理時間を短縮することが課題となっている。
【0006】
本発明は上記の課題に鑑みてなされたもので、ストレージシステムにおいてデータの複製に関係する処理の高速化を実現することを目的とする。
【課題を解決するための手段】
【0007】
上記目的を達成するために、代表的な本発明のストレージシステムの一つは、ホスト装置に対して論理ボリュームを提供するコントローラと、データを格納する物理記憶デバイスとを有し、前記論理ボリュームの複製であるスナップショットを作成可能なストレージシステムであって、前記コントローラは、前記物理記憶デバイスを用いて前記論理ボリュームに対応させるプールボリュームを形成し、前記論理ボリューム及び前記スナップショットに対応付けられる第1の制御情報と前記プールボリューム上のデータに対して対応付けられる第2の制御情報とを保持し、前記第1の制御情報と前記第2の制御情報とを対応付けることで、前記論理ボリューム及び前記スナップショットのデータを管理し、前記論理ボリュームと1又は複数のスナップショットの時系列を前記第1の制御情報に関連付けた世代情報により管理し、前記プールボリューム上の各データについて、当該データが作成された世代を示す世代情報を前記第2の制御情報に関連付けて管理し、前記論理ボリューム及び/又は前記スナップショットに係るデータの処理とは非同期に前記第1の制御情報及び/又は前記第2の制御情報の無効化を実行し、前記無効化にあたり、前記第1の制御情報に関連付けた世代情報と前記第2の制御情報に関連付けた世代情報とを参照して、無効化の可否を判定することを特徴とする。
また、代表的な本発明のストレージシステムにおけるデータ複製方法の一つは、ホスト装置に対して論理ボリュームを提供するコントローラと、データを格納する物理記憶デバイスとを有し、前記論理ボリュームの複製であるスナップショットを作成可能なストレージシステムにおけるデータ複製方法であって、前記コントローラが、前記物理記憶デバイスを用いて前記論理ボリュームに対応させるプールボリュームを形成し、前記論理ボリューム及び前記スナップショットに対応付けられる第1の制御情報と前記プールボリューム上のデータに対して対応付けられる第2の制御情報とを保持し、前記第1の制御情報と前記第2の制御情報とを対応付けることで、前記論理ボリューム及び前記スナップショットのデータを管理し、前記論理ボリュームと1又は複数のスナップショットの時系列を前記第1の制御情報に関連付けた世代情報により管理し、前記プールボリューム上の各データについて、当該データが作成された世代を示す世代情報を前記第2の制御情報に関連付けて管理し、前記論理ボリューム及び/又は前記スナップショットに係るデータの処理とは非同期に前記第1の制御情報及び/又は前記第2の制御情報の無効化を実行し、前記無効化にあたり、前記第1の制御情報に関連付けた世代情報と前記第2の制御情報に関連付けた世代情報とを参照して、無効化の可否を判定することを特徴とする。
【発明の効果】
【0008】
本発明によれば、ストレージシステムにおいてデータの複製に関係する処理を高速化できる。
【図面の簡単な説明】
【0009】
【
図1】ストレージシステムのスナップショット取得についての説明図。
【
図2】スナップショット取得後の最初の書き込みについての説明図。
【
図3】スナップショット取得後の2回目以降の書き込みについての説明図。
【
図5】リストア後の最初の書き込みについての説明図。
【
図6】リストア後の非同期ディレクトリ情報の回収処理についての説明図。
【
図8】スナップショット削除後の非同期ディレクトリ情報の回収処理についての説明図。
【
図9】計算機システム100のハードウェア構成の説明図。
【
図11】ストレージシステムが使用するプログラム及び情報の説明図。
【
図12】スナップショット管理テーブルの構成の説明図。
【
図13】VOL/スナップショット-Dir情報管理テーブルの構成の説明図。
【
図15】回収要求Dir情報#管理ビットマップの構成の説明図。
【
図16】Dir情報世代管理ツリーの構成の説明図。
【
図19】マッピング情報管理テーブルの構成の説明図。
【
図20】スナップショット取得処理の処理手順を示すフローチャート。
【
図21】スナップショットリストア処理の処理手順を示すフローチャート。
【
図22】スナップショット削除処理の処理手順を示すフローチャート。
【
図23】非同期ディレクトリ情報回収処理の処理手順を示すフローチャート。
【
図24】フロントエンドライト処理の処理手順を示すフローチャート。
【
図25】バックエンドライト処理の処理手順を示すフローチャート。
【
図26】追記処理の処理手順を示すフローチャート。
【
図27】ライタブルスナップショットの取得についての説明図。
【
図28】ライタブルスナップショットへの書き込みについての説明図。
【
図29】ライタブルスナップショットからのリストアの説明図。
【発明を実施するための形態】
【0010】
以下、本発明の実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。また、発明の構成に必須だが周知である構成については、図示及び説明を省略する場合がある。
【0011】
以下の説明において、「xxxテーブル」といった表現により、入力に対して出力が得られる情報を説明することがあるが、この情報は、どのような構造のデータでもよい。従って、「xxxテーブル」を「xxx情報」と言うことができる。
【0012】
また、以下の説明において、各テーブルの構成は一例であり、1つのテーブルは、2以上のテーブルに分割されてもよいし、2以上のテーブルの全部又は一部が1つのテーブルであってもよい。
【0013】
また、以下の説明において、「プログラム」を主語として処理を説明する場合がある。プログラムは、プロセッサ部によって実行されることで、定められた処理を、適宜に記憶部及び/又はインターフェース部などを用いながら行うため、処理の主語が、プロセッサ部(或いは、そのプロセッサ部を有するコントローラのようなデバイス)とされてもよい。
【0014】
プログラムは、計算機のような装置にインストールされてもよいし、例えば、プログラム配布サーバ又は計算機が読み取り可能な(例えば非一時的な)記録媒体にあってもよい。また、以下の説明において、2以上のプログラムが1つのプログラムとして実現されてもよいし、1つのプログラムが2以上のプログラムとして実現されてもよい。
【0015】
また、「プロセッサ部」は、1又は複数のプロセッサである。プロセッサは、典型的には、CPU(Central Processing Unit)のようなマイクロプロセッサであるが、GPU(Graphics Processing Unit)のような他種のプロセッサでもよい。また、プロセッサは、シングルコアでもよいしマルチコアでもよい。また、プロセッサは、処理の一部又は全部を行うハードウェア回路(例えばFPGA(Field-Programmable Gate Array)又はASIC(Application Specific Integrated Circuit))といった広義のプロセッサでもよい。
【0016】
また、以下の説明において、種々の対象の識別情報として、識別番号が使用されるが、識別番号以外の種類の識別情報(例えば、英字や符号を含んだ識別子)が採用されてもよい。以下の説明において、“#”は番号を表し、例えば“xxx#”は、番号で識別されるxxxを表す。
【0017】
また、以下の説明において、同種の要素を区別しないで説明する場合には、参照符号(又は、参照符号のうちの共通符号)を使用し、同種の要素を区別して説明する場合は、要素の識別番号(又は参照符号)を使用することがある。また各図に示す各要素の数は一例であって、図示に限られるものではない。
【実施例0018】
図1は、実施例1に係るストレージシステムのスナップショット取得についての説明図である。
ストレージシステムは、ホスト装置に対して論理ボリュームを提供することができる。この論理ボリュームを以降、プライマリボリューム(PVOL)という。
また、ストレージシステムは、プライマリボリュームの複製であるスナップショットをRoW(Redirect on Write)方式で作成することができる。
【0019】
ストレージシステムは、データを格納する物理記憶デバイスを用いてプールボリュームを形成し、メタ情報を用いてプライマリボリュームやスナップショットとプールボリュームとの関係を管理している。
ストレージシステムは、メタ情報として、ディレクトリ(Dir)情報と、マッピング情報とを用いる。
ディレクトリ情報は、プライマリボリュームやスナップショットに対応付けられる第1の制御情報である。
マッピング情報は、プールボリューム上のデータに対して1対1に対応付けられる第2の制御情報である。
【0020】
ストレージシステムは、ディレクトリ情報とマッピング情報とを対応付けることで、プライマリボリュームやスナップショットのデータを管理する。
さらに、ストレージシステムは、論理ボリュームとスナップショットの時系列をディレクトリ情報に関連付けた世代情報により管理し、プールボリューム上の各データについて、当該データが作成された世代を示す世代情報をマッピング情報に関連付けて管理している。加えて、ストレージシステムは、その時点の最新の世代情報を最新世代として管理している。
【0021】
図1では、ストレージシステムが最初のスナップショットを作成する場合の動作を示している。
まず、スナップショット取得前の段階では、プライマリボリュームは「A0」「B0」「C0」のデータが仮想的に格納された状態であり、最新世代は「0」である。
プライマリボリュームに対応付けられたディレクトリ情報は、世代情報として「0」を関連付けられており、プライマリボリュームの全データ(「A0」「B0」「C0」)の参照先を示す参照情報を含む。以降、ディレクトリ情報に関連付けられた世代情報が「X」である場合に、ディレクトリ情報が世代Xである、と表記する。
プールボリュームには、「A0」「B0」「C0」のデータが実体的に格納されており、それぞれのデータ(「A0」「B0」「C0」)に対してマッピング情報が対応付けられている。また、それぞれのマッピング情報は、世代情報として「0」を関連づけられている。以降、マッピング情報に関連付けられた世代情報が「X」である場合に、マッピング情報が世代Xである、と表記する。
【0022】
スナップショット取得前の状態では、ディレクトリ情報の「A0」「B0」「C0」は、それぞれマッピング情報の「A0」「B0」「C0」を参照する参照情報となっている。このようにディレクトリ情報とマッピング情報を対応付けることで、プライマリボリュームとプールボリュームを対応させ、プライマリボリュームに対する仮想的なデータ処理を実現できる。
【0023】
図1において、スナップショット取得する場合には、ディレクトリ情報をコピーし、リードオンリースナップショット#0のディレクトリ情報とする。そして、プライマリボリュームのディレクトリ情報の世代をインクリメントし、最新世代もインクリメントする。
この結果、マッピング情報の「A0」「B0」「C0」は、世代0のディレクトリ情報と世代1のディレクトリ情報の双方から参照される。
このように、ディレクトリ情報の複製によりスナップショットを作成すれば、プールボリューム上のデータやマッピング情報を増やすことなく、スナップショットを作成することができる。
【0024】
ここで、スナップショットを取得すると、取得時点で書き込みが禁止されてデータが固定したスナップショットが世代0、取得以降もデータを書き込み可能なプールボリュームが世代1となる。世代0は、世代1に対して「直系における1世代古い世代」であり、便宜上「親」という。同様に、世代1は世代0に対して「直系における1世代新しい世代」であり、便宜上「子」という。ストレージシステムは、世代の親子関係をDir情報世代管理ツリーとして管理している。
【0025】
図2は、スナップショット取得後の最初の書き込みについての説明図である。
ホスト装置から「A0」を「A1」に書き換えるライト要求を受けたならば、ストレージシステムは、プールボリュームの新たな領域を確保し、書き込み対象のデータ「A1」を格納する。プールボリュームの新たなデータ「A1」に対しては、新たなマッピング情報「A1」が生成され、マッピング情報「A1」にはディレクトリ情報の世代が世代情報として与えられる。このため、マッピング情報「A1」は世代1となる。
【0026】
ストレージシステムは、世代1のディレクトリ情報とマッピング情報の参照関係(対応関係)を切り替えることで、プライマリボリュームにおける書き込み先のアドレスと書き込み対象のデータ「A1」を対応付ける。
この参照先の切り替えによりマッピング情報「A0」は、世代1のディレクトリ情報からの参照が解消される。しかし、マッピング情報「A0」は、スナップショット#0のディレクトリ情報(世代0)から参照されたままであるため、無効化を許可すべきでない。
【0027】
この無効化の可否の判定は、無効化可否の判定対象のマッピング情報の世代と、Write対象VOL(ここではプライマリボリューム)のディレクトリ情報の世代を比較して、一致していれば無効化可能、マッピング情報世代の方が古ければ、無効化不可と判定すればよい。なお、マッピング情報世代の方が新しい状態は発生しない。
【0028】
図3は、スナップショット取得後の2回目以降の書き込みについての説明図である。
ホスト装置から「A1」を「A2」に書き換えるライト要求を受けたならば、ストレージシステムは、プールボリュームの新たな領域を確保し、書き込み対象のデータ「A2」を格納する。プールボリュームの新たなデータ「A2」に対しては、新たなマッピング情報「A2」が生成され、マッピング情報「A2」にはディレクトリ情報の世代が世代情報として与えられる。このため、マッピング情報「A2」は世代1となる。
【0029】
ストレージシステムは、世代1のディレクトリ情報とマッピング情報の参照関係(対応関係)を切り替えることで、プライマリボリュームにおける書き込み先のアドレスと書き込み対象のデータ「A2」を対応付ける。
この参照先の切り替えによりマッピング情報「A1」は、世代1のディレクトリ情報からの参照が解消され、どのディレクトリ情報からも参照されない状態となるので、無効化が可能である。
【0030】
具体的には、マッピング情報「A1」は世代1であり、Write対象VOLのディレクトリ情報「世代1」と一致するので、無効化が可能と判定される。また、プールボリューム上のデータ「A1」も無効化可能である。
【0031】
図4は、スナップショットからのリストアの説明図である。前提として、世代0から世代2までの3つのスナップショット#0~#2が順次作成され、最新世代は3である。
スナップショットSS#1からリストアする場合には、世代1のディレクトリ情報を複製してプライマリボリュームに対応付け、最新世代をインクリメントする。この結果、最新世代は4となり、プライマリボリュームのディレクトリ情報も世代4である。
また、世代4のプライマリボリュームは、世代1のスナップショットを親とする。このため、世代1のスナップショットは、世代2のスナップショットと世代4のプライマリボリュームを子として持つことになる。
【0032】
リストアにより、世代3のディレクトリ情報は、プライマリボリュームとの対応関係を解除され、プライマリボリュームやスナップショットからの参照がなくなった非同期回収対象となる。すなわち、世代3が無効化の対象世代として特定される。
【0033】
図5は、リストア後の最初の書き込みについての説明図である。
リストアの終了時点において、プライマリボリュームのデータは「A2」「B0」「C0」である。
ホスト装置から「A2」「B0」「C0」のそれぞれについて初回のライト要求を受けつけて、「A4」「B2」「C2」を書き込む場合には、ストレージシステムは、プールボリュームに「A4」「B2」「C2」をそれぞれ格納し、新たなマッピング情報「A4」「B2」「C2」を生成する。そして、「A4」「B2」「C2」のマッピング情報を世代4とする。
【0034】
ストレージシステムは、世代4のディレクトリ情報とマッピング情報の参照関係(対応関係)を切り替えることで、書き込みを完了する。この切り替えにより、「A2」「B0」「C0」のディレクトリ情報は、プライマリボリュームからの参照を受けなくなるが、親世代である世代1のスナップショットから参照を受けている(Write対象VOLの世代>マッピング情報の世代)。このため、「A2」「B0」「C0」のディレクトリ情報は無効化することができず、プールボリュームにおける「A2」「B0」「C0」のデータも無効化することができない。
【0035】
図6は、リストア後の非同期ディレクトリ情報の回収処理についての説明図である。既に説明したように、リストアによって世代3のディレクトリ情報が無効化対象として特定されたならば、ストレージシステムは、リストアと非同期に世代3のディレクトリ情報を無効化する。
【0036】
図6では、世代3のディレクトリ情報は「A3」「B1」「C1」を参照している。そこで、ストレージシステムは、「A3」「B1」「C1」のマッピング情報の世代を親世代と比較して、参照の有無をチェックする。なお、この例では無効化対象である世代3が世代管理ツリー上末端である(=子を持たない)ために、子世代を確認する必要が無い。
ここで、マッピング情報の世代と比較する親世代とは、無効化対象である世代3のディレクトリ情報の親であり、その世代は2である。したがって、マッピング情報の世代が親世代より大きければ、無効化可能となる。
【0037】
具体的には、マッピング情報「C1」は世代3であり、親世代の世代2より大きい。すなわち、マッピング情報「C1」は世代2のスナップショットから参照を受けていないため、無効化可能である。一方、マッピング情報「A3」「B1」は世代2であり、親世代の世代2と等しい。すなわち、マッピング情報「A3」「B1」は世代2のスナップショットから参照を受けているため、無効化不可である。
【0038】
無効化対象のディレクトリ情報と、無効化可能のマッピング情報を無効化した結果、
図6に示すように、世代3のディレクトリ情報が削除され、マッピング情報「C3」とプールボリューム上のデータ「C3」が削除される。
【0039】
図7は、スナップショットの削除についての説明図である。
図7では、スナップショット#0の子がスナップショット#1であり、スナップショット#1の子がスナップショット#2と世代4のプライマリボリュームである。この状態で、スナップショット#0の削除を実行すると、ストレージシステムは、スナップショット#0を直ちに削除し、スナップショット#0からの参照がなくなった世代0のディレクトリ情報を非同期回収対象とする。世代0が無効化の対象世代として特定される。
【0040】
図8は、スナップショット削除後の非同期ディレクトリ情報の回収処理についての説明図である。スナップショット#0の削除によって世代0のディレクトリ情報が無効化対象として特定されたならば、ストレージシステムは、スナップショットの削除と非同期に世代0のディレクトリ情報を無効化する。
この無効化では、ストレージシステムは、対象世代のディレクトリ情報に参照される(対応付けられた)マッピング情報について、マッピング情報の世代が、対象世代の親世代と比較して新しく、かつ、対象世代の子世代からも参照を受けていない場合に、無効化が可能であると判定する。このように、子を持つディレクトリ情報の無効化の場合、子からの参照有無も確認する必要がある。
【0041】
図8では、世代0のディレクトリ情報はマッピング情報「A0」「B0」「C0」を参照している。また、対象世代0には親世代が存在しない。そこで、ストレージシステムは、マッピング情報「A0」「B0」「C0」が、対象世代の子世代である世代1のディレクトリ情報から参照されているか否かを判定する。
世代1のディレクトリ情報は、「A2」「B0」「C0」を参照しているため、マッピング情報「A0」は無効化可能、マッピング情報「B0」「C0」は無効化不可と判定される。
なお、
図6では子世代が1つであったが、子世代が2つある場合には、回収後のDir情報世代ツリーが分離するため、無効化処理をスキップする。
【0042】
無効化対象のディレクトリ情報と、無効化可能のマッピング情報を無効化した結果、
図8に示すように、世代0のディレクトリ情報が削除され、マッピング情報「A0」とプールボリューム上のデータ「A0」が削除される。
【0043】
図9は、実施例1に係る計算機システム100のハードウェア構成の説明図である。計算機システム100は、ストレージシステム201、サーバシステム202、及び管理システム203を備える。ストレージシステム201とサーバシステム202とは、FC(Fiber Channel)などを用いたストレージネットワーク204を介して接続される。ストレージシステム201と管理システム203とは、IP(Internet Protocol)などを用いた管理ネットワーク205を介して接続される。なお、ストレージネットワーク204及び管理ネットワーク205は、同一の通信ネットワークであってもよい。
【0044】
ストレージシステム201は、複数のストレージコントローラ210と、複数のSSD220とを備える。ストレージコントローラ210には、物理記憶デバイスであるSSD220が接続されている。
【0045】
ストレージコントローラ210は、1つ以上のプロセッサ211と、1つ以上のメモリ212と、バックエンドインターフェース213と、フロントエンドインターフェース214と、マネジメントインターフェース215とを備える。
【0046】
プロセッサ211は、プロセッサ部の一例である。プロセッサ211は、圧縮及び伸張を行うハードウェア回路を含んでいてもよい。本実施例では、プロセッサ211は、リードライト、スナップショット作成、リストア、スナップショット削除、メタ情報の回収削除に係る制御等を行う。
【0047】
メモリ212は、記憶部の一例である。メモリ212は、プロセッサ211が実行するプログラム、プロセッサ211が使用するデータ等を記憶する。プロセッサ211は、メモリ212に格納されているプログラムを実行する。なお、本実施例では、例えば、メモリ212及びプロセッサ211の組でメモリが二重化されている。
【0048】
バックエンドインターフェース213、フロントエンドインターフェース214、マネジメントインターフェース215は、インターフェース部の一例である。
【0049】
バックエンドインターフェース213は、SSD220とストレージコントローラ210との間のデータのやり取りを仲介する通信インターフェースデバイスである。バックエンドインターフェース213には、複数のSSD220が接続される。
【0050】
フロントエンドインターフェース214は、サーバシステム202とストレージコントローラ210との間のデータのやり取りを仲介する通信インターフェースデバイスである。フロントエンドインターフェース214に、ストレージネットワーク204を介して、サーバシステム202が接続される。
【0051】
マネジメントインターフェース215は、管理システム203とストレージコントローラ210の間のデータのやり取りを仲介する通信インターフェースデバイスである。マネジメントインターフェース215に、管理ネットワーク205を介して、管理システム203が接続される。
【0052】
サーバシステム202は、1つ以上のホスト装置を含んで構成される。サーバシステム202は、ストレージコントローラ210に対して、I/O先を指定したI/O要求(ライト要求又はリード要求)を送信する。I/O先は、例えば、LUN(Logical Unit Number)のような論理ボリューム番号、LBA(Logical Block Address)のような論理アドレス等である。
【0053】
管理システム203は、1つ以上の管理装置を含んで構成される。管理システム203は、ストレージシステム201を管理する。
【0054】
図10は、ストレージシステム201の論理構成の説明図である。サーバシステム202が指定するI/O先は、プライマリボリュームの論理ボリューム番号、論理アドレス等である。プライマリボリュームは、すでに説明したように、メタ情報(図示省略)を介してプールボリューム上のデータを参照する。この参照関係により、プライマリボリュームに対するデータのリードライトを、プールボリュームへのリードライトとして処理できる。
【0055】
さらに、ストレージシステム201は、プライマリボリュームのスナップショットの作成を、メタ情報の複製により実現する。このため、プライマリボリュームやスナップショットで重複して保持されるデータであっても、プールボリュームの同一のデータを参照するので、プールボリュームでデータを重複して保持する必要はない。
【0056】
図11は、ストレージシステム201が使用するプログラム及び情報の説明図である。メモリ212のメモリ領域は、制御情報部301、プログラム部302、キャッシュ部303として用いられる。
なお、メモリ領域のうちの少なくとも一部は、独立したメモリであってもよい。
【0057】
制御情報部301は、スナップショット管理テーブル401、VOL/スナップショット-Dir情報管理テーブル402、最新世代#403、回収要求Dir情報#管理ビットマップ404、Dir情報世代管理ツリー405、プール管理テーブル406、Dir情報管理テーブル407、マッピング情報管理テーブル408を格納する。これらのテーブルについては、図を参照して後述する。
【0058】
プログラム部302には、スナップショット取得プログラム411、スナップショットリストアプログラム412、スナップショット削除プログラム413、非同期回収プログラム414、リード/ライトプログラム415、追記プログラム416などが格納される。これらのプログラムは、複数のストレージコントローラ210毎に設けられ、互いに協働して目的の処理を行う。
【0059】
キャッシュ部303には、SSD220に対してライト又はリードされるデータセットが一時的に格納される。
【0060】
図12は、スナップショット管理テーブル401の構成の説明図である。スナップショット管理テーブル401は、プライマリボリュームのIDに、そのプライマリボリュームから取得したスナップショットのIDと、スナップショットの取得時刻を対応づけたテーブルである。プライマリボリュームが複数ある場合には、プライマリボリュームごとにスナップショット管理テーブル401を設ける。
【0061】
図13は、VOL/スナップショット-Dir情報管理テーブル402の構成の説明図である。VOL/スナップショット-Dir情報管理テーブル402は、VOL#/SS#と、RootVOL#と、Dir情報#とを有する。
VOL#/SS#は、プライマリボリューム又はスナップショットを特定する情報である。RootVOL#は、どのプライマリボリュームに対応するかを示す。VOL#/SS#がプライマリボリュームであれば、VOL#/SS#とRootVOL#は一致する。Dir情報#は、VOL#/SS#に対応するディレクトリ情報を特定する。
【0062】
図14は、最新世代#403の構成の説明図である。最新世代#403は、ホスト装置に提供されているプライマリボリュームの世代であり、プライマリボリュームが複数ある場合には、プライマリボリュームごとに存在する。
【0063】
図15は、回収要求Dir情報#管理ビットマップ404の構成の説明図である。回収要求Dir情報#管理ビットマップ404は、Dir情報#ごとに、回収要求のフラグを管理している。例えば、回収を要求するDir情報#には「1」、回収を要求しないDir情報#には「0」をフラグとして与える。
【0064】
図16は、Dir情報世代管理ツリー405の構成の説明図である。Dir情報世代管理ツリー405は、Dir情報#と、Dir情報世代#と、Prevと、Next1と、Next2とを有する。
Dir情報#はディレクトリ情報を特定する情報であり、Dir情報世代#はディレクトリ情報の世代を示す。Prevは、ディレクトリ情報の親を示し、Next1とNext2はディレクトリ情報の子を示す。
【0065】
図17は、プール管理テーブル406の構成の説明図である。プール管理テーブル406は、プールボリューム上の記憶領域を区分するページナンバー、プールボリュームのID、スタートアドレス、ステータス、割当先VOL#/SS#、割当先アドレスを有する。
ステータスは、その記憶領域を割り当て済みであるか否かを示す。
ステータスが[1:割当済み]であれば、割当先VOL#/SS#と割当先アドレスにより、どのボリュームまたはスナップショットのどのアドレスに割り当てられているかが示される。
ステータスが[2:未割当]であれば、割当先VOL#/SS#と割当先アドレスは「n/a」である。
【0066】
図18は、Dir情報管理テーブル407の構成の説明図である。
Dir情報管理テーブル407は、VOL/SS内アドレスと、参照先マッピング情報#とを対応付けるテーブルである。Dir情報管理テーブル407は、プライマリボリューム、スナップショットごとに設ける。
【0067】
図19は、マッピング情報管理テーブル408の構成の説明図である。マッピング情報管理テーブル408は、マッピング情報#、参照先プールアドレス、マッピング情報世代#を対応付けるテーブルであり、マッピング情報がプールボリュームのどの記憶領域を参照するかと、マッピング情報の世代を示す。
【0068】
図20は、スナップショット取得処理の処理手順を示すフローチャートである。スナップショット取得処理は、管理システム203からの指示に応じて、スナップショット取得プログラム411によって実行される。
【0069】
まず、スナップショット取得プログラム411は、コピー先となるDir情報管理テーブル407を割当て、VOL/スナップショット-Dir情報管理テーブル402を更新する(ステップS101)。
【0070】
スナップショット取得プログラム411は、最新世代をインクリメントし(ステップS102)、Dir情報世代管理ツリー405を更新する(ステップS103)。このとき、複製元には最新世代を設定し、複製先にはインクリメント前の世代を設定する。
【0071】
スナップショット取得プログラム411は、指定のボリュームにキャッシュダーティデータがあるか否かを判定する(ステップS104)。
指定のボリュームにキャッシュダーティデータがあるならば(ステップS104;Yes)、スナップショット取得プログラム411は、ページを割り当ててプール管理テーブル406を更新し(ステップS105)、追記処理を実行する(ステップS106)。
【0072】
追記処理の後、若しくは指定のボリュームにキャッシュダーティデータがない場合(ステップS104;No)、スナップショット取得プログラム411は、対象ボリュームのDir情報管理テーブル407をコピー先のDir情報管理テーブル407へコピーする(ステップS107)。
その後、スナップショット管理テーブル401を更新して(ステップS108)、処理を終了する。
【0073】
図21は、スナップショットリストア処理の処理手順を示すフローチャートである。スナップショットリストア処理は、管理システム203からの指示に応じて、スナップショットリストアプログラム412によって実行される。
【0074】
まず、スナップショットリストアプログラム412は、リストア先となるDir情報管理テーブル407を割当て、VOL/スナップショット-Dir情報管理テーブル402を更新する(ステップS201)。
【0075】
スナップショットリストアプログラム412は、最新世代をインクリメントし(ステップS202)、Dir情報世代管理ツリー405を更新する(ステップS203)。このとき、複製元にはインクリメント前の世代を設定し、複製先には最新世代を設定する。
【0076】
スナップショットリストアプログラム412は、リストア先のボリュームのキャッシュ領域をパージする(ステップS204)。
【0077】
スナップショットリストアプログラム412は、リストア元のボリュームDir情報管理テーブル407をリストア先のDir情報管理テーブル407へコピーする(ステップS205)。
その後、リストア先の旧Dir情報#を回収要求Dir情報#管理ビットマップ404に登録して(ステップS206)、処理を終了する。
【0078】
図22は、スナップショット削除処理の処理手順を示すフローチャートである。スナップショット削除処理は、管理システム203からの指示に応じて、スナップショット削除プログラム413によって実行される。
【0079】
まず、スナップショット削除プログラム413は、VOL/スナップショット-Dir情報管理テーブル402における削除対象のスナップショットのディレクトリ情報を無効化する(ステップS301)。
そして、スナップショット管理テーブル401を更新し(ステップS302)、削除対象のスナップショットの旧Dir情報#を回収要求Dir情報#管理ビットマップ404に登録して(ステップS303)、処理を終了する。
【0080】
図23は、非同期ディレクトリ情報回収処理の処理手順を示すフローチャートである。非同期ディレクトリ情報回収処理は、非同期回収プログラム414によって、例えば定期的に実行される。
【0081】
まず、非同期回収プログラム414は、回収要求Dir情報#管理ビットマップ404から回収対象Dir情報#を特定する(ステップS401)。このとき、非同期回収プログラム414は、Dir情報世代管理ツリー405を参照し、回収要求ビットが立っているディレクトリ情報のエントリを確認し、子を2つ持つディレクトリ情報は選択しない。
その後、非同期回収プログラム414は、未処理のエントリが存在するか否かを判定する(ステップS402)。
【0082】
未処理のエントリが存在するならば(ステップS402;Yes)、非同期回収プログラム414は、ディレクトリ情報の処理対象エントリを決定し(ステップS403)、ディレクトリ情報の処理対象エントリをリードして、参照先のマッピング情報#を特定する(ステップS404)。
【0083】
非同期回収プログラム414は、Dir情報世代管理ツリー405から子世代のディレクトリ情報が存在するか否かを判定する(ステップS405)。
子世代のディレクトリ情報が存在するならば(ステップS405;Yes)、非同期回収プログラム414は、子世代のディレクトリ情報の同一エントリをリードし、参照先マッピング情報#が一致するか否かを判定する(ステップS406)。
子世代のディレクトリ情報の同一エントリと参照先マッピング情報#が一致するならば(ステップS406;Yes)、ステップS402に戻る。
【0084】
子世代のディレクトリ情報の同一エントリと参照先マッピング情報#が一致しない場合(ステップS406;No)、若しくは子世代のディレクトリ情報が存在しない場合(ステップS405;No)、非同期回収プログラム414は、親世代のディレクトリ情報世代#が処理対象エントリの参照先マッピング情報の世代#よりも古いか否かを判定する(ステップS407)。
親世代のディレクトリ情報世代#が処理対象エントリの参照先マッピング情報の世代#よりも古くなければ(ステップS407;No)、S402に戻る。
【0085】
親世代のディレクトリ情報世代#が処理対象エントリの参照先マッピング情報の世代#よりも古いならば(ステップS407;Yes)、非同期回収プログラム414は、マッピング情報管理テーブルの対象エントリを初期化し、プール管理テーブル406の対象ページの割り当てを解放する(ステップS408)。その後、ステップS402に戻る。
【0086】
ステップS402で未処理のエントリが存在しないと判定すれば(ステップS402;No)、非同期回収プログラム414は、回収要求Dir情報#管理ビットマップ404を更新する(ステップS409)とともに、Dir情報世代管理ツリー405を更新し(ステップS410)、処理を終了する。
【0087】
図24は、フロントエンドライト処理の処理手順を示すフローチャートである。フロントエンドライト処理は、ホスト装置からのライト要求を受け付けた場合に、リード/ライトプログラム415によって実行される。
【0088】
まず、リード/ライトプログラム415は、キャッシュ部303を参照し、ホスト装置からのライト要求の対象データがキャッシュヒットするかを判定する。リード/ライトプログラム415は、ライト要求の対象データがキャッシュヒットする場合(ステップS501;Yes)にS502へ処理を移し、キャッシュヒットしない場合(ステップS501;No)にS503へ処理を移す。S502では、リード/ライトプログラム415は、キャッシュ部303においてキャッシュ領域を確保する。
【0089】
S503では、リード/ライトプログラム415は、S501でキャッシュヒットした対象データがダーティデータであるかを判定する。リード/ライトプログラム415は、S501でキャッシュヒットした対象データがダーティデータである場合(ステップS503;Yes)にS504へ処理を移し、ダーティデータでない場合(ステップS504;No)にS506へ処理を移す。
【0090】
S504では、リード/ライトプログラム415は、S503で判定されたダーティデータのWR(WRight)世代#と、当該ライト要求の対象データの世代#が一致するかを判定する。WR世代#はキャッシュデータの管理情報(不図示)に保持される。又、当該ライト要求の対象データの世代#は最新世代#403から取得される。S504は、直前に取得されたスナップショットの対象データ(ダーティデータ)の追記処理がされていないうちに、当該ライト要求の対象データでダーティデータを更新してしまい、スナップショットのデータを書きつぶしてしまうことを防ぐ。リード/ライトプログラム415は、WR世代#と最新世代#が一致する場合(ステップS504;Yes)にS506へ処理を移し、WR世代#と最新世代#が一致しない場合(ステップS504;No)にS505へ処理を移す。
【0091】
S505では、リード/ライトプログラム415は、追記処理を実行する。S505により、最新世代#と一致しないWR世代#のダーティデータをプールへ書き込み、キャッシュ部303からデステージする。
【0092】
S506では、リード/ライトプログラム415は、S502で確保したキャッシュ領域、又は、追記処理が必要なダーティデータを追記処理して再度ダーティデータを生成可能になったキャッシュ領域へ、ライト要求の対象データを書き込む。
【0093】
S507では、リード/ライトプログラム415は、S506でキャッシュ部303へ書き込んだキャッシュデータのWR世代#を、S504で比較した最新世代#に設定する。S508では、リード/ライトプログラム415は、ホスト装置へ正常応答(Good応答)を返却する。
【0094】
図25は、バックエンドライト処理の処理手順を示すフローチャートである。バックエンドライト処理は、未反映のデータ(ダーティデータ)がキャッシュ部303上にある場合、未反映のデータをプール書き込む処理である。バックエンドライト処理は、フロントエンド処理と同期又は非同期で行われる。バックエンドライト処理は、リード/ライトプログラム415により実行される。
【0095】
先ずS601では、リード/ライトプログラム415は、キャッシュ部303上にダーティデータが有るかを判定する。リード/ライトプログラム415は、キャッシュ部303上にダーティデータが有る場合(ステップS601;Yes)にS602へ処理を移し、ダーティデータが無い場合(ステップS602;No)に本バックエンドライト処理を終了する。S602では、リード/ライトプログラム415は、追記処理を実行する。
【0096】
図26は、追記処理の処理手順を示すフローチャートである。追記処理は、スナップショット取得プログラム411やリード/ライトプログラム415に呼び出された追記プログラム416によって実行される。
【0097】
まず、追記プログラム416は、追記後のマッピング情報管理テーブル408を更新し、マッピング情報の世代として最新世代を設定する(ステップS701)。
その後、追記プログラム416は、Dir情報管理テーブル407を更新し(ステップS702)、プール管理テーブル406を更新して(ステップS703)、キャッシュ部303からデステージする(ステップS704)。
その後、追記プログラム416は、Dir情報世代管理ツリー405を参照し(ステップS705)、Write対象VOLのDir情報世代#が追記前のマッピング情報世代#と一致するか否かを判定する(ステップS706)。
【0098】
Write対象VOLのDir情報世代#が追記前のマッピング情報世代#より古ければ(ステップS706;No)、そのまま処理を終了する。
Write対象VOLのDir情報世代#が追記前のマッピング情報世代#と一致するならば(ステップS706;Yes)、追記プログラム416は、追記前のマッピング情報管理テーブル408の対象エントリを初期化し、プール管理テーブル406の対象ページを割り当て解放して(ステップS707)、処理を終了する。
実施例1では、書き込みを禁止したスナップショットを例示して説明を行ったが、書き込みを許可したスナップショットを取得することも可能である。本実施例2では、書き込みを許可したスナップショットの作成、スナップショットへの書き込み、リストアについて説明する。なお、本実施例2では、書き込みを許可したスナップショットをライタブルスナップショット(Writable Snapshot)という。
そして、スナップショット作成前の前記最新世代情報を書き込み禁止のディレクトリ情報の世代とし、書き込み禁止のディレクトリ情報の世代をインクリメントした世代を書き込み許可のディレクトリ情報の世代とし、書き込み許可のディレクトリ情報の世代をインクリメントした世代を最新世代情報、及びプライマリボリュームのディレクトリ情報の世代とする。
ストレージシステムは、世代1のディレクトリ情報とマッピング情報の参照関係(対応関係)を切り替えることで、プライマリボリュームにおける書き込み先のアドレスと書き込み対象のデータ「A1」を対応付ける。
この参照先の切り替えによりマッピング情報「A0」は、世代1からの参照が解消される。しかし、マッピング情報「A0」は、スナップショット#0の書き込み禁止のディレクトリ情報(世代0)から参照されたままであるため、無効化を許可すべきでない。
この無効化の可否の判定は、無効化可否の判定対象のマッピング情報の世代と、Write対象VOL(ここではWritable Snapshot #0)のディレクトリ情報の世代を比較して、一致していれば無効化可能、マッピング情報世代の方が古ければ無効化不可と判定すればよい。なお、マッピング情報世代の方が新しい状態は発生しない。
新たな書き込み禁止のディレクトリ情報は、リストア時点のプライマリボリュームの状態を示し、リストア元の世代を引き継ぐ。新たな書き込み許可のディレクトリ情報は、プライマリボリュームの状態の最新状態を示し、リストア元の世代に2を加算した最新世代と同じ世代が付与される。そして、リストア元の書き込み許可のディレクトリ情報は、世代をインクリメントする。
リストアにより、世代2のディレクトリ情報は、プライマリボリュームとの対応関係を解除され、プライマリボリュームやスナップショットからの参照がなくなった非同期回収対象となる。すなわち、世代2が無効化の対象世代として特定される。
上述してきたように、実施例に開示したストレージシステムは、ホスト装置に対して論理ボリューム(プライマリボリューム)へのアクセスを提供するコントローラ(ストレージコントローラ210)と、データを格納する物理記憶デバイスとしてのSSD220とを有し、前記論理ボリュームの複製であるスナップショットを作成可能なストレージシステムであって、前記コントローラは、前記物理記憶デバイスを用いて前記論理ボリュームに対応させるプールボリュームを形成し、前記論理ボリューム及び前記スナップショットに対応付けられる第1の制御情報(ディレクトリ情報)と前記プールボリューム上のデータに対して対応付けられる第2の制御情報(マッピング情報)とを保持し、前記第1の制御情報と前記第2の制御情報とを対応付けることで、前記論理ボリューム及び前記スナップショットのデータを管理し、前記論理ボリュームと1又は複数のスナップショットの時系列を前記第1の制御情報に関連付けた世代情報により管理し、前記プールボリューム上の各データについて、当該データが作成された世代を示す世代情報を前記第2の制御情報に関連付けて管理し、前記論理ボリューム及び/又は前記スナップショットに係るデータの処理とは非同期に前記第1の制御情報及び/又は前記第2の制御情報の無効化を実行し、前記無効化にあたり、前記第1の制御情報に関連付けた世代情報と前記第2の制御情報に関連付けた世代情報とを参照して、無効化の可否を判定する。
かかる構成及び動作によれば、リストアの時点でメタ情報の無効化が不要となるためにリストアを高速化し、逆参照系のメタ情報(例えばPoolの格納データからプライマリボリュームまたはスナップショットへの参照情報)を持つことなく効率的に無効化可否判定を行うことができるので、データの複製に関係する処理を高速化できる。
また、開示のストレージシステムによれば、前記コントローラは、前記無効化の対象となる前記第1の制御情報の世代が対象世代として特定された場合に、前記対象世代の直系における1世代古い世代における参照状態と、前記対象世代の直系における1世代新しい世代における参照状態に基づいて、前記無効化の可否を判定する。
すなわち、開示のストレージシステムは、全世代を見る必要が無く、前後1世代で良いため、効率的に無効化可否の判定が可能である。
また、開示のストレージシステムによれば、前記コントローラは、最新世代情報を管理し、前記論理ボリュームについて前記スナップショットを作成した場合に、作成前の前記最新世代情報を作成したスナップショットの世代情報に格納して前記最新世代情報をインクリメントし、前記スナップショットから前記論理ボリュームのリストアを行った場合にも前記最新世代情報をインクリメントする。
このため、最新世代との比較により、無効化可否を効率的に管理することができる。
また、開示のストレージシステムによれば、前記コントローラは、前記論理ボリュームにおいて書き込みを行う場合に、前記プールボリュームの新たな領域に書き込み対象のデータを格納し、前記第1の制御情報と前記第2の制御情報の対応関係を切り替えることで、前記論理ボリュームにおける書き込み先のアドレスと書き込み対象のデータを対応付けるとともに、前記論理ボリュームの世代を前記第2の制御情報に関連付け、前記対応関係の切り替えにより前記第1の制御情報との対応関係が解消された第2の制御情報を無効化の対象とし、無効化の対象となった第2の制御情報の世代が、前記論理ボリュームの前記第1の制御情報に関連づいた世代と比較して一致していれば、無効化が可能であると判定する。
かかる構成によれば、ライト処理契機で既格納データの無効化を判定でき、効率的に無効化可否の判定が可能である。
また、開示のストレージシステムによれば、前記コントローラは、最新世代情報を管理し、前記スナップショットから前記論理ボリュームのリストアを行った場合に、リストア元のスナップショットの第1の制御情報を複製して前記論理ボリュームに対応付け、前記最新世代情報をインクリメントし、前記リストアの前に前記論理ボリュームに対応付けられていた第1の制御情報の世代情報を無効化の対象世代とて特定し、前記対象世代の第1の制御情報に対応付けられた第2の制御情報について、第2の制御情報に関連付けられた世代が、前記対象世代の直系における1世代古い世代と比較して新しく、かつ、前記対象世代の直系における1世代新しい世代からも参照を受けていない場合に、無効化が可能であると判定する。
かかる構成によれば、リストアに伴い発生する不要なデータやメタ情報の無効化処理を効率化できる。
また、開示のストレージシステムによれば、前記コントローラは、前記スナップショットを削除した場合に、削除したスナップショットの第1の制御情報に関連付けられた世代情報を無効化の対象世代として特定し、前記対象世代の第1の制御情報に対応付けられた第2の制御情報について、第2の制御情報に関連付けられた世代が、前記対象世代の直系における1世代古い世代と比較して新しく、かつ、前記対象世代の直系における1世代新しい世代からも参照を受けていない場合に、無効化が可能であると判定する。
かかる構成によれば、スナップショットの削除に伴い発生する不要なデータやメタ情報の無効化処理を効率化できる。
また、開示のストレージシステムによれば、前記コントローラは、最新世代情報を管理し、前記論理ボリュームについて書き込み可能なスナップショットを作成する場合に、書き込み禁止の第1の制御情報と、書き込み許可の第1の制御情報とを作成し、スナップショット作成前の前記最新世代情報を前記書き込み禁止の第1の制御情報の世代とし、前記書き込み禁止の第1の制御情報の世代をインクリメントした世代を前記書き込み許可の第1の制御情報の世代とする。
かかる構成によれば、書き込み可能なスナップショットを採用する場合にも、データの複製に関係する処理の高速化を実現することができる。
なお、本発明は上述の実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、かかる構成の削除に限らず、構成の置き換えや追加も可能である。
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記録媒体をコンピュータに提供し、そのコンピュータが備えるプロセッサが記録媒体に格納されたプログラムコードを読み出す。この場合、記録媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記録媒体は本発明を構成することになる。このようなプログラムコードを供給するための記録媒体としては、例えば、フレキシブルディスク、CD-ROM、DVD-ROM、ハードディスク、SSD(Solid State Drive)、光ディスク、光磁気ディスク、CD-R、磁気テープ、不揮発性のメモリカード、ROMなどが用いられる。
また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、C/C++、perl、Shell、PHP、Java(登録商標)等の広範囲のプログラム又はスクリプト言語で実装できる。
上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。