IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社日立製作所の特許一覧

特開2023-128237ストレージシステム及びその制御方法
<>
  • 特開-ストレージシステム及びその制御方法 図1
  • 特開-ストレージシステム及びその制御方法 図2
  • 特開-ストレージシステム及びその制御方法 図3
  • 特開-ストレージシステム及びその制御方法 図4
  • 特開-ストレージシステム及びその制御方法 図5
  • 特開-ストレージシステム及びその制御方法 図6
  • 特開-ストレージシステム及びその制御方法 図7
  • 特開-ストレージシステム及びその制御方法 図8
  • 特開-ストレージシステム及びその制御方法 図9
  • 特開-ストレージシステム及びその制御方法 図10
  • 特開-ストレージシステム及びその制御方法 図11
  • 特開-ストレージシステム及びその制御方法 図12
  • 特開-ストレージシステム及びその制御方法 図13
  • 特開-ストレージシステム及びその制御方法 図14
  • 特開-ストレージシステム及びその制御方法 図15
  • 特開-ストレージシステム及びその制御方法 図16
  • 特開-ストレージシステム及びその制御方法 図17
  • 特開-ストレージシステム及びその制御方法 図18
  • 特開-ストレージシステム及びその制御方法 図19
  • 特開-ストレージシステム及びその制御方法 図20
  • 特開-ストレージシステム及びその制御方法 図21
  • 特開-ストレージシステム及びその制御方法 図22
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023128237
(43)【公開日】2023-09-14
(54)【発明の名称】ストレージシステム及びその制御方法
(51)【国際特許分類】
   G06F 3/06 20060101AFI20230907BHJP
   G06F 11/14 20060101ALI20230907BHJP
【FI】
G06F3/06 306K
G06F3/06 301K
G06F3/06 301W
G06F3/06 302A
G06F11/14 648
【審査請求】有
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2022032445
(22)【出願日】2022-03-03
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110001678
【氏名又は名称】藤央弁理士法人
(72)【発明者】
【氏名】達見 良介
(72)【発明者】
【氏名】長尾 尚
(72)【発明者】
【氏名】松上 一樹
(57)【要約】
【課題】マッピング情報における障害からの回復時間を短縮する。
【解決手段】ストレージシステムは、上側マッピング情報と下側マッピング情報とを保持する。上側マッピング情報は、ホストにアクセスされる論理デバイス上階層と、論理デバイス中階層と、の間のアドレス関係を管理する。下側マッピング情報は、論理デバイス中階層と論理デバイス下階層との間のアドレス関係を管理する。下側マッピング情報は複数の部分マッピング情報を含む。複数の部分マッピング情報のそれぞれは、論理デバイス中階層の部分領域のアドレス情報を管理する。ストレージシステムは、下側マッピング情報における第1部分マッピング情報の障害に対して、第1部分マッピング情報が管理する論理デバイス中階層の第1部分領域を埋める新規データを書き込み、第1部分マッピング情報を再生成する。
【選択図】図4
【特許請求の範囲】
【請求項1】
ストレージシステムであって、
コントローラを含み、
前記コントローラは、
ホストにアクセスされる論理デバイス上階層と、論理デバイス下階層と、前記論理デバイス上階層と前記論理デバイス下階層との間の論理デバイス中階層と、を管理し、
前記論理デバイス上階層と前記論理デバイス中階層との間のアドレス関係を管理する上側マッピング情報と、前記論理デバイス中階層と前記論理デバイス下階層との間のアドレス関係を管理する下側マッピング情報と、を保持し、
前記下側マッピング情報は複数の部分マッピング情報を含み、
前記複数の部分マッピング情報のそれぞれは、前記論理デバイス中階層の部分領域のアドレス情報を管理し、
前記コントローラは、前記下側マッピング情報における第1部分マッピング情報の障害に対して、前記第1部分マッピング情報が管理する前記論理デバイス中階層の第1部分領域を埋める新規データを書き込み、前記第1部分マッピング情報を再生成する、ストレージシステム。
【請求項2】
請求項1に記載のストレージシステムであって、
前記新規データは、前記コントローラによって生成されたフォーマットデータで構成されている、ストレージシステム。
【請求項3】
請求項1に記載のストレージシステムであって、
前記新規データは、前記論理デバイス上階層にアクセスするホストから受信したホストデータを含む、ストレージシステム。
【請求項4】
請求項3に記載のストレージシステムであって、
前記コントローラは、前記第1部分領域において前記ホストデータで埋められない領域に、フォーマットデータを生成して書き込む、ストレージシステム。
【請求項5】
請求項3に記載のストレージシステムであって、
前記コントローラは、前記第1部分領域に格納されているホストデータの前記論理デバイス上階層におけるアドレス情報を、管理システムに通知する、ストレージシステム。
【請求項6】
請求項1に記載のストレージシステムであって、
前記コントローラは、前記障害を管理システムに通知し、前記管理システムからの指示に従って前記新規データを前記第1部分領域に書き込む、ストレージシステム。
【請求項7】
請求項1に記載のストレージシステムであって、
前記コントローラは、キャッシュ領域に前記新規データの全てを格納した後に、前記新規データを記憶ドライブに書き込む、ストレージシステム。
【請求項8】
請求項1に記載のストレージシステムであって、
前記論理デバイス上階層は、プライマリボリュームと、前記プライマリボリュームのスナップショットとを含み、
前記コントローラは、前記論理デバイス中階層のデータを重複排除/圧縮処理して、前記論理デバイス下階層に書き込む、ストレージシステム。
【請求項9】
ストレージシステムの制御方法であって、
前記ストレージシステムは、ホストにアクセスされる論理デバイス上階層と論理デバイス中階層との間のアドレス関係を管理する上側マッピング情報と、前記論理デバイス中階層と論理デバイス下階層との間のアドレス関係を管理する下側マッピング情報と、を保持し、
前記下側マッピング情報は複数の部分マッピング情報を含み、
前記複数の部分マッピング情報のそれぞれは、前記論理デバイス中階層の部分領域のアドレス情報を管理し、
前記制御方法は、前記ストレージシステムが、
前記上側マッピング情報及び前記下側マッピング情報を使用して、前記論理デバイス上階層、前記論理デバイス中階層、及び前記論理デバイス下階層を管理し、
前記下側マッピング情報における第1部分マッピング情報の障害に対して、前記第1部分マッピング情報が管理する前記論理デバイス中階層の第1部分領域を埋める新規データを書き込み、前記第1部分マッピング情報を再生成する、制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はストレージシステム及びその制御方法に関する。
【背景技術】
【0002】
ストレージのビットコスト低減のため、重複排除や圧縮技術が使われている。また、マルウェア等がデータを論理的に破壊することを前提とし、高頻度にバックアップを取り、かつ速やかに復旧できるスナップショット機能が求められている。スナップショット機能の実現手段として、例えば、変換情報のみを複製/復元するRoW(Redirect on Write)方式が知られている。
【0003】
重複排除機能とRoW方式のスナップショット機能は、それぞれ論理的なデータ位置と物理的なデータ位置がN:1の関係にある。それぞれの機能の非同期処理が処理対象を絞り込むために、それぞれ異なるデバイス階層(アドレス空間階層)を持つ。
【0004】
例えば、米国特許第9646039号が開示するストレージコントローラは、第1のボリュームを削除するための要求を受信し、この要求に応答して、第1のボリュームとそのアンカー媒体との間のリンクを削除する。ストレージコントローラはまた、第1のボリュームのアンカー媒体の削除を遅延させる。後にユーザが第1のボリュームを復元したい場合、ストレージコントローラは第1のボリュームをその過去のアンカー媒体に再接続して、第1のボリュームをその以前の状態に効果的に復元して、削除動作を取り消す。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】米国特許第9646039号
【発明の概要】
【発明が解決しようとする課題】
【0006】
重複排除/圧縮機能と、RoW方式のスナップショット機能を組み合わせたデバイス階層において、スナップショットの管理デバイスから、重複排除/圧縮の管理デバイスへの変換情報は、ある一定範囲(スロット)の変換情報を纏めた単位で管理され得る。何らかの障害により、変換情報が読めなくなった場合、対応するスロット内の全論理アドレスの論物変換ができなくなる。1スロット上には、ある論理ボリュームに対する複数の世代のスナップショットの差分データが格納され得る。また、どの世代のスナップショットにも使用されていない領域も存在し得る。
【0007】
そのため、変換情報が破損した場合、1回のホストライトでは、1スロットのデータを用意することができず、変換情報を再生成して障害状態を回復することができない。また、論理ボリュームのフォーマットによって回復する場合、失われるデータ量が多くなり、システム回復に時間がかかる。
【課題を解決するための手段】
【0008】
本発明の一態様のストレージシステムは、コントローラを含み、前記コントローラは、ホストにアクセスされる論理デバイス上階層と、論理デバイス下階層と、前記論理デバイス上階層と前記論理デバイス下階層との間の論理デバイス中階層と、を管理する。前記論理デバイス上階層と前記論理デバイス中階層との間のアドレス関係を管理する上側マッピング情報と、前記論理デバイス中階層と前記論理デバイス下階層との間のアドレス関係を管理する下側マッピング情報と、を保持する。前記下側マッピング情報は複数の部分マッピング情報を含む。前記複数の部分マッピング情報のそれぞれは、前記論理デバイス中階層の部分領域のアドレス情報を管理する。前記コントローラは、前記下側マッピング情報における第1部分マッピング情報の障害に対して、前記第1部分マッピング情報が管理する前記論理デバイス中階層の第1部分領域を埋める新規データを書き込み、前記第1部分マッピング情報を再生成する。
【発明の効果】
【0009】
本発明の一態様によれば、マッピング情報における障害からの回復のためにフォーマットするデータ量を削減し、回復までの時間を短縮することができる。
上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【0010】
図1】本明細書の一実施例における計算機システムの構成例を示す図である。
図2】コントローラ(ストレージシステム)が管理する論理デバイスの階層構成を示す。
図3】メモリ内の領域構成を示す。
図4】論理デバイス階層と、論理デバイス階層間のアドレスを関連付けるマッピング情報を模式的に示す。
図5】スナップショット管理情報の構成例を示す。
図6】ディレクトリ情報の構成例を示す。
図7】スナップショットストアスペースマッピング情報の構成例を示す。
図8】プール管理情報の構成例を示す。
図9】プールマッピング情報の構成例を示す。
図10】保証コード管理情報の構成例を示す。
図11】キャッシュスロット管理情報の構成例を示す。
図12】障害アドレス管理情報の構成例を示す。
図13】スナップショットストアスペース内ブロック参照元管理情報の構成例を示す。
図14】第1の障害回復方法のための、障害範囲フォーマット指示画面の例を示す。
図15】障害対象範囲検索処理の例のフローチャートを示す。
図16】障害データ回復処理の例のフローチャートを示す。
図17】第2の障害回復方法のための、障害範囲フォーマット指示画面の例を示す。
図18】フロントエンドライト処理の例のフローチャートを示す。
図19】中間ライト処理の例のフローチャートを示す。
図20】書き込み先スナップショットストアスペースアドレス取得処理の例のフローチャートを示す。
図21】バックエンドライト処理の例のフローチャートを示す。
図22】追記処理の例のフローチャートを示す。
【発明を実施するための形態】
【0011】
以下、本開示の実施例を、添付図面を参照しながら説明する。なお、以下に説明する実施例は特許請求の範囲にかかる発明を限定するものではなく、また実施例の中で説明されている特長の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【0012】
以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサによって実行されることで、定められた処理を、適宜に記憶部及び/またはインタフェース部等を用いながら行うため、処理の主語が、プロセッサ(或いは、そのプロセッサを有するコントローラのようなデバイス)とされてもよい。
【0013】
プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な(例えば非一時的な)記録媒体であってもよい。また、以下の説明において、2以上のプログラムが1つのプログラムとして実現されてもよいし、1つのプログラムが2以上のプログラムとして実現されてもよい。
【0014】
以下の説明では、「xxxテーブル」といった表現にて、入力に対して出力が得られる情報を説明することがあるが、当該情報は、どのような構造のデータでもよい。また、以下の説明において、各テーブルの構成は一例であり、1つのテーブルは、2以上のテーブルに分割されてもよいし、2以上のテーブルの全部または一部が1つのテーブルであってもよい。
【0015】
図1は、本明細書の一実施例における計算機システムの構成例を示す図である。計算機システムは、ストレージシステム101、サーバシステム(ホスト)102及び管理システム103、ストレージシステム101とサーバシステム102を接続するストレージネットワーク104、及びストレージシステム101と管理システム103を接続する管理ネットワーク105含む。図1は、一つのストレージシステム101、一つのサーバシステム102及び一つの管理システム103を示すが、それらの数は任意である。
【0016】
ストレージシステム101は、複数のストレージコントローラ(以下、単にコントローラとも呼ぶ)110を含む。各コントローラ110は、一つ以上のマイクロプロセッサ(以下、プロセッサとも呼ぶ)111と、一つ以上のメモリ112と、一つ以上のフロントエンドインタフェース(I/F)114と、一つ以上のバックエンドI/F113と、一つ以上の管理I/F115とを含む。図1は、例として、二つのプロセッサ111、二つのメモリ112、一つのフロントエンドI/F114、一つのバックエンドI/F113、一つの管理I/F115を示す。
【0017】
複数のコントローラ110は、不図示のコントローラ間パスで接続されており、互いのメモリ112に、プロセッサ111または図示されていないDMA(Direct Memory Access)回路などによって、アクセス可能である。
【0018】
フロントエンドI/F114は、例えば、SAN(Storage Area Network)などのストレージネットワーク104を通してサーバシステム102に接続する。管理I/F115は、例えば、LAN(Local Area Network)などの管理ネットワーク105を通して管理システム103に接続する。ストレージネットワーク104及び管理ネットワーク105のプロトコルは、データ通信ができるプロトコルであれば任意である。
【0019】
ストレージシステム101は、複数の記憶ドライブ(以下、ドライブまたは記憶デバイスとも呼ぶ)120とコントローラ110とを接続するバックエンドI/F113を、含む。ドライブ120は、例えばHDD(Hard Disk Drive)、SSD(Solid State Drive)またはテープ型の記憶デバイス等であってもよい。複数のドライブ120は、一つ以上のドライブの物理記憶領域を基に論理ボリュームを構成し、コントローラ110に提供することができる。
【0020】
複数のドライブは、冗長化のためにRAID(Redundant Array of Independent Disks)グループを構成してもよく、論理ボリュームはRAIDグループから提供されてもよい。論理ボリュームは、サーバシステム102に対して、アクセス可能なボリューム(Logical Unit:LUとも呼ぶ)として提供可能である。サーバシステム102が指定するアドレスに対して、ストレージネットワーク104を介して書き込み要求及び読み出し要求を受け付けることが可能である。
【0021】
図2は、コントローラ110(ストレージシステム101)が管理する論理デバイスの階層構成例を示す。論理デバイス階層構成は、サーバシステム102がアクセスできる複数のボリュームからなる上階層、中階層のスナップショットストアスペース220、及び下階層のプール230で構成されている。スナップショット機能は、上階層のボリューム及びスナップショットストアスペース220を利用する。重複排除/圧縮機能は、スナップショットストアスペース220とプール230を利用する。なお、ストレージシステム1101は、複数のスナップショットストアスペース220及び複数のプール230を管理し得る。
【0022】
論理デバイスは、仮想的にデータを格納するための仮想アドレス空間を定義し、物理的にはデータを格納していない。実際のデータは物理デバイスである記憶ドライブ120の媒体に格納される。
【0023】
上階層のボリュームと中階層のスナップショットストアスペース220との間でアドレスが関連付けられ、中階層のスナップショットストアスペース220と下階層のプール230との間のアドレスが関連付けられる。プールのアドレスは、記憶ドライブ120のアドレスに関連付けられる。プール230に格納されるデータは、重複排除及び/又は圧縮処理の対象となり得る。以下において、プール230に格納されるデータは、圧縮処理に対象とする。なお、圧縮効果が小さいデータは非圧縮のままプールに格納され得る。
【0024】
図2に示す構成例において、上階層は、プライマリボリューム201と、プライマリボリューム201のスナップショット202-0~202-2を含む。スナップショットは、ホストアクセス可能なボリュームである。図2はプライマリボリューム201に対する三つのスナップショット202-0~202-2を例として示すが、その数は任意である。
【0025】
プライマリボリューム201は、最新のホストデータを格納する。スナップショット202-0~202-2は、それぞれの対応時点におけるプライマリボリューム201のデータを格納している。ホストデータは一定サイズのブロック単位で管理される。図2は、各ブロックは矩形で表し、例として、データA3のブロックが符号211で指示されている。図2において、矩形内の文字は、ホストデータの識別子を表し、圧縮の有無にかかわらず、同一ホストデータのブロックには同一識別子が与えられている。
【0026】
本明細書の一実施形態に係るストレージシステム101は、RoW(Redirect on Write)方式を採用する。RoW方式は、プライマリボリューム201へ書き込まれた新規データを、スナップショットストアスペース220に書き込み、更新前データをスナップショットストアスペース220に維持する。更新前データは、スナップショットに関連付けられ、新規データはプライマリボリューム201に関連付けられる。
【0027】
スナップショットストアスペース220は、一定サイズのスロット単位でデータを管理する。一つのスロットは複数のブロックを格納し、図2は、例として、スロット223を示す。スナップショットストアスペース220に格納される、同一ホストデータのブロックは一つであり、上階層のボリュームの1又は複数のブロックと関連付けられる。
【0028】
例えば、ホストデータC0のブロックは、三つのスナップショット(ボリューム)202-0~202-1に格納されている。スナップショットストアスペースのスロット223内のホストデータC0の一つのブロック225が、上記三つのスナップショット202-0~202-1のホストデータC0のブロックと関連付けられる。
【0029】
プール230は、圧縮されたホストデータを格納する。圧縮データは、プール230に追記されてよい、つまり、前詰めで、空き領域に書き込まれてよい。プール230は、一定サイズのページ単位で管理され、一つのページが複数ブロックを格納し得る。図2は、例として、一つのページを符号223で示し、ページ内の一つのブロックを符号235で示している。ブロック内の文字はホストデータの識別子である。ホストデータC0のブロック235は、圧縮されたホストデータC0のブロックを示す。
【0030】
スナップショットストアスペース内の各ブロックは、プール230内の一つのブロックと関連付けられる。図2は示していないが、プール230の各ブロックは、記憶ドライブ120に格納されているブロックに関連付けられる。なお、本開示の特徴は、図2に示す論理デバイス階層と異なる論理デバイス階層を含む論理デバイス階層構造に適用できる。
【0031】
図3は、メモリ112内の領域構成を示す。メモリ112は、制御情報格納領域301、プログラム格納領域302及びキャッシュ303を含む。制御情報格納領域301は、論理デバイス階層を管理するための情報を格納している。図3は、スナップショット管理情報311、ディレクトリ(DIR)情報312、スナップショットストアスペースマッピング情報313、プール管理情報314、プールマッピング情報315、保証コード管理情報316、キャッシュスロット管理情報317、障害アドレス管理情報318、及びスナップショットストアスペース内ブロック参照元管理情報319、を示す。これら情報の詳細は後述する。
【0032】
プログラム格納領域302は、プロセッサ111が実行するプログラムを格納している。図3は、リード/ライト処理プログラム321、障害範囲検索プログラム322、障害対象データ回復プログラム323、障害対象データ回復処理起動プログラム324、を示す。これらプログラムの処理の詳細は後述する。
【0033】
図4は、論理デバイス階層と、論理デバイス階層間のアドレスを関連付けるマッピング情報を模式的に示す。ディレクトリ情報312は、上階層のボリュームのブロックと、スナップショットストアスペースマッピング情報313のエントリとを関連づける。例えば、プライマリボリューム201のブロック212及びスナップショット202-0のブロック213は、ホストデータC0を格納している。
【0034】
プライマリボリューム201のブロック212は、ディレクトリ情報312のエントリ215を介して、スナップショットストアスペースマッピング情報313のエントリ218に関連付けられている。スナップショット202-0のブロック213は、ディレクトリ情報312のエントリ216を介して、スナップショットストアスペースマッピング情報313のエントリ218に関連付けられている。ブロック212、213は同一のホストデータC0を格納しているので、スナップショットストアスペースマッピング情報313の共通のエントリ218に関連付けられている。
【0035】
スナップショットストアスペースマッピング情報313のエントリは、スナップショットストアスペース220内のブロックを示す。このように、スナップショットストアスペースマッピング情報313は上側マッピング情報であり、上階層のボリュームのブロックとスナップショットストアスペース220内のブロックとを関連づける。
【0036】
上述のように、スナップショットストアスペース220は、スロット単位で管理されている。図4において、スロット223内の破線の矩形226は、上階層のホストデータ(ブロック)が割り当てられていない未割り当てブロックを示す。実線の矩形225は、上階層のホストデータ(ブロック)が割り当てられているブロックを示す。図4においては、一つの未割り当てブロックが例として符号226で指示され、一つの割り当て済みブロックが、例として符号225で指示されている。
【0037】
一つのスロットは、1又は複数の未割り当てブロックを含み得、また、異なるボリュームのブロックに割り当てられたブロックを含み得る。図4の例において、スロット223は、二つの未割り当てブロック226を含む。また、スロット223は、プライマリボリューム201のブロックに割り当てられているブロックとスナップショット202-0のブロックに割り当てられているブロックとを含む。
【0038】
プールマッピング情報315は、下側マッピング情報であり、複数テーブル400を含み、各テーブル400は、スロットマッピングテーブル又はスロットマッピング情報とも呼ぶ。各スロットマッピングテーブル400は、スナップショットストアスペース220の各スロットのマッピング情報を管理する。各スロットマッピングテーブル400に対して保証コード415が割り当てられる。スロットは、スナップショットストアスペース220の部分領域であり、スロットマッピングテーブル400部分マッピング情報である。
【0039】
スロットマッピングテーブル400のエントリは、スナップショットストアスペース220のブロックとプール230内のブロックを関連付ける。スロットマッピングテーブル400は、スナップショットストアスペース220内の未割り当てのブロックについて、未割り当てであることを示す。
【0040】
図4において、スロットマッピングテーブル400内の矩形がエントリを示し、矩形内の数字は、プール230内の参照先ページ(参照先アドレス)を示す。未割り当てのブロックのエントリは、「NAN」を示す。
【0041】
以下において、メモリ112に格納されている制御情報を説明する。図5は、スナップショット管理情報311の構成例を示す。スナップショット管理情報311は、上階層のボリューム(プライマリボリューム及びスナップショット)とスナップショットストアスペースとの関係を管理する。
【0042】
スナップショット管理情報311は、ボリュームID欄351及びスナップショットストアID欄352を含む。ボリュームID欄351は、ホストアクセス可能な上階層のボリュームのIDを示す。スナップショットストアID欄352は、ボリュームが関連付けられているスナップショットストアスペースのIDを示す。図2又は4は、一つのスナップショットストアスペースを示すが、ストレージシステム101は、複数のスナップショットストアスペースを定義し得る。
【0043】
図6は、ディレクトリ情報312の構成例を示す。ディレクトリ情報312は、上階層のボリューム内のブロックと、スナップショットストアスペースマッピング情報313内のエントリとの関係を管理する。ディレクトリ情報312は、各ボリュームの情報を管理するテーブル360で構成されている。
【0044】
各テーブル360は、ボリューム(VOL)内アドレス欄361と参照先マッピング情報番号(#)欄362を含む。ボリューム内アドレス欄361は、ボリューム内のブロックの開始アドレスを示す。参照先マッピング情報番号欄362は、ボリューム内のブロックに関連付けられる参照先マッピング情報番号を示す。マッピング情報番号は、スナップショットストアスペースマッピング情報313内のエントリ番号である。
【0045】
図7は、スナップショットストアスペースマッピング情報313の構成例を示す。スナップショットストアスペースマッピング情報313は、上階層ボリュームのブロックとスナップショットストアスペースのブロックとの間の割り当てを管理する。スナップショットストアスペースマッピング情報313は、マッピング情報番号欄371、ステータス欄372、参照先スナップショットストアスペース(SSS)番号欄373、及び参照先スナップショットストアスペース内アドレス欄374を含む。
【0046】
マッピング情報番号欄371は、スナップショットストアスペースマッピング情報313のエントリを同定する番号を示す。マッピング情報番号欄371の番号と、ディレクトリ情報312内の参照先マッピング情報番号欄362の番号とが、対応付けられる。
【0047】
ステータス欄372は、エントリが対応するボリューム内のブロックに対して、スナップショットストアスペース220内のブロックが割り当てられているかを示す。数値「1」は割り当て済みを示し、数値「0」は未割り当てを示す。割り当て済みのボリューム内のブロックはホストデータを格納し、未割り当てボリューム内のブロックはホストデータを格納していないことを意味する。
【0048】
参照先スナップショットストアスペース番号欄373は、ボリューム内ブロックの参照先のスナップショットストアスペースの番号を示す。つまり、ボリューム内ブロックに割り当てられているスナップショットストアスペース内ブロックが属するスナップショットストアスペースの番号を示す。当該番号は、スナップショットストアスペースを一意に同定する。参照先スナップショットストアスペース内アドレス欄374は、ボリューム内ブロックに割り当てられているスナップショットストアスペース内ブロックのアドレスを示す。ブロックのアドレスは、スロット番号及びスロット内オフセットと対応付けられる。
【0049】
図8は、プール管理情報314の構成例を示す。プール管理情報314は、プール230と記憶ドライブ120のアドレス空間(不図示)との間の関係を管理する。プール管理情報314は、ページ番号欄381、プールボリュームID欄382、開始アドレス欄383、ステータス欄384、割り当て先プール番号欄385、及び割当先アドレス欄386を含む。
【0050】
ページ番号欄381は、記憶ドライブ120のアドレス空間からプール230に割り当てられるページ(実記憶領域)を同定する番号を示す。プールボリュームID欄382は、ページを与えるプールボリュームのIDを示す。プールボリュームは、例えば、RAIDを構成する記憶ドライブ120の記憶領域と関連付けられる論理デバイスである。
【0051】
開始アドレス欄383は、ページが関連付けられている、プールボリューム内の領域の開始アドレスを示す。ステータス欄384は、ページがいずれかのプールに割り当て済みであるかを示す。数値「1」は割り当て済みを示し、数値「0」は未割り当てを示す。割り当て先プール番号欄385及び割当先アドレス欄386は、ページの割り当て先のプールの番号及びその内部のアドレスを示す。
【0052】
図9は、プールマッピング情報315の構成例を示す。プールマッピング情報315は、それぞれスナップショットストアスペース220内の一つのスロットに対応する複数のスロットマッピングテーブル400を含む。スロットマッピングテーブル400は、スロットとプール内アドレスとの間の関係を管理する。スロットマッピングテーブル400は、オフセット欄401、ステータス欄402、参照先プールアドレス欄403を含む。
【0053】
オフセット欄401は、スロット内のブロックを同定するオフセットを示す。ステータス欄402は、ブロックに対してプール230内の領域が割り当て済みであるかを示す。数値「1」は割り当て済みを示し、数値「0」は未割り当てを示す。割り当て済みブロックは、ホストデータを格納しており、未割り当てブロックはホストデータを格納していない。
【0054】
参照先プールアドレス欄403は、ブロックに対して割り当てられているプール230内領域のアドレスを示す。上述のように、プール230には、圧縮によって、スナップショットストアスペースのブロックサイズより小さいサイズのデータが格納され得る。
【0055】
図10は保証コード管理情報316の構成例を示す。保証コード管理情報316は、プールマッピング情報315のスロットマッピングテーブル400それぞれの保証コードを管理する。
【0056】
保証コード管理情報316は、マッピングテーブル番号欄411及び保証コード欄412を含む。マッピングテーブル番号欄411は、スロットマッピングテーブル400を同定する番号を示す。保証コード欄412は、スロットマッピングテーブル400それぞれの保証コードを示す。保証コードは、例えば、Check sumやCRC等である。
【0057】
図11は、キャッシュスロット管理情報317の構成例を示す。キャッシュスロット管理情報317は、上階層のボリューム及びスナップショットストアスペース220のスロットの状態を管理する。スロットは、一定サイズの領域であり、上階層ボリュームのスロットサイズとストアスペーススロットサイズは同一でよい。
【0058】
キャッシュスロット管理情報317は、ボリューム/スナップショットストアスペースID欄421、スロット番号欄422、ステータス欄423、コンディション欄424、ダーティビットマップ欄425、エラービットマップ欄426、及び、フォーマットビットマップ欄427を含む。
【0059】
ボリューム/スナップショットストアスペースID欄421は、上階層のボリューム及びスナップショットストアスペースを同定するIDを示す。スナップショットストアスペースのIDは、その番号と同一でよい。スロット番号欄422は、ボリューム又はスナップショットストアスペース内のスロットを同定する番号を示す。ステータス欄423は、キャッシュ303の領域が割り当て済みであるか否かを示す。
【0060】
コンディション欄424は、当該スロットのプールマッピング情報で障害が発生しているか(正常に読めるか)否かを示す。ダーティビットマップ欄425は、スロット内のダーティなブロックを示す。ビット「1」はダーティブロックを示す。エラービットマップ欄426は、スロット内のエラーブロックを示す。ビット「1」はエラーブロックを示す。フォーマットビットマップ欄427は、スロット内のフォーマット済みブロックを示す。フォーマットは、正常データが新たに書き込み済みであることを意味する。ビット「1」はフォーマット済みブロックを示す。
【0061】
図12は、障害アドレス管理情報318の構成例を示す。障害アドレス管理情報318は複数のテーブル430を含み、各テーブル430は、障害スロット管理テーブル又は障害キャッシュスロット管理情報とも呼ぶ。障害スロット管理テーブル430は、プールマッピング情報315において、障害が発生しているスロットマッピングテーブル400に関連付けられているボリュームとボリューム内のアドレスのリストを示す。スロットマッピングテーブル400に関連付けられているボリュームは、スロットマッピングテーブル400が管理するスロット内のブロックが割り当てられているボリュームである。ブロックは、割り当て先のボリュームのデータを格納する。
【0062】
障害スロット管理テーブル430は、障害対象スナップショットストアスペーススロット内オフセット欄431、ボリュームID欄432、及びボリューム内アドレス欄433を含む。障害対象スナップショットストアスペーススロット内オフセット欄431は、障害発生しているスロットマッピングテーブル400が管理するスロット内のブロックを示す。ボリュームID欄432は、ブロックの割り当て先のボリュームのIDを示す。ボリューム内アドレス欄433は、ブロックの割り当て先ボリュームにおける、ブロック割り当て先アドレスを示す。
【0063】
図13は、スナップショットストアスペース内ブロック参照元管理情報319の構成例を示す。スナップショットストアスペース内ブロック参照元管理情報319は、スナップショットストアスペース220内のブロックを参照する上階層ボリュームを管理する。
【0064】
スナップショットストアスペース内ブロック参照元管理情報319は複数のテーブル440を含み、ブロック参照元リストテーブル又はブロック参照元リスト情報と呼ぶ。各参照元リストテーブル440は、対応スロット内のブロックそれぞれの参照元ボリュームを示す。
【0065】
参照元リストテーブル440は、オフセット欄441、ボリューム内ブロックアドレス欄442、プライマリボリューム参照有無欄443、及び参照スナップショットリスト欄444を含む。
【0066】
オフセット欄441は、スロット内のブロックを同定するオフセットを示す。ボリューム内ブロックアドレス欄442は、スナップショットストアスペースのブロックを参照する上階層ボリューム内のアドレスを示す。スナップショットストアスペースのブロックは、異なるボリュームの共通のアドレス領域と関連付けられ得る。
【0067】
プライマリボリューム参照有無欄443は、プライマリボリュームが、スナップショットストアスペース220の当該ブロックを参照しているか否かを示す。参照スナップショットリスト欄444は、スナップショットストアスペースの当該ブロックを参照しているスナップショット(ボリューム)のIDを示す。
【0068】
以下において、ストレージシステム101の動作を説明する。ストレージシステム101は、サーバシステム102からのボリュームへの通常のアクセス(リード/ライト)を処理する他に、プールマッピング情報315の障害の回復処理を実行する。
【0069】
障害回復処理において、ストレージシステム101は、破損したスロットマッピングテーブル400に対応するスロット(障害スロットとも呼ぶ)をフォーマットするためのデータをスナップショットストアスペース220に書き込む。スロットの全てのブロックのデータが書き込まれた後、破損したスロットマッピングテーブル400が再生成される。これにより、スロットマッピングテーブル400の破損時に、1スロット分のデータ書き込みによって、当該スロットをフォーマットして、アクセス可能な状態に回復することができる。
【0070】
以下において、プールマッピング情報315の障害を回復するための、二つの方法を主に説明する。第1の方法は、ストレージシステム101が、障害スロットの全ブロックに予め設定されているフォーマットデータ(0データとも呼ぶ)を書き込むことで、当該スロットをフォーマットする。
【0071】
第2の方法は、サーバシステム102から上階層ボリュームに割り当てられているブロックのホストデータを受信し、当該ブロックにホストデータを書き込む。上階層ボリュームに未割り当てのブロックには、第1の方法と同様に、ストレージシステム101により生成されたフォーマットデータ(0データ)が書き込まれる。これにより、管理者(ユーザ)が望むデータを再書き込みすることができると共に、管理者に見えない未割り当てブロックにフォーマットデータを書き込むことで当該スロット全体をフォーマットすることができる。
【0072】
第1及び第2のいずれの方法においても、ストレージシステム101は、障害スロットへデータを書き込む時、スナップショットストアスペース220の領域にキャッシュ領域を割り当て、ライト処理をキャッシュセグメントへの書き込みで止めておいてもよい。その後、キャッシュ上で1スロット分のデータが揃ってから、圧縮及びプール230を介した記憶ドライブ120への書き込みを実施してよい。
【0073】
また、ストレージシステム101は、保証コードチェックによりスロットマッピングテーブル400の障害の有無を判定できる。スロットは、複数のボリュームのデータを格納し得る。そのため、障害状態と判定された場合、障害回復の対象範囲は、複数のボリュームの複数のアドレスに分散され得る。ストレージシステム101は、障害スロットに関連づけられているボリュームの情報を障害アドレス管理情報318に登録し、管理システム103に通知してもよい。これにより、管理者は、障害が発生したスロットに格納されているホストデータを知ることができる。
【0074】
図14は、上記第1の障害回復方法のための、障害範囲フォーマット指示画面の例を示す。上述のように、第1の障害回復方法は、ストレージシステム101によって、障害スロットの全ブロックにフォーマットデータを書き込む。
【0075】
障害範囲検索プログラム322は、プールマッピング情報315の障害が検出されると、当該画面を管理システム103において表示する。「欠損箇所リスト」のボタン501が選択されると、障害対象データ回復処理起動プログラム324は、破損したスロットマッピングテーブル400のスロットに関連づけられているホストデータの情報を管理システム103において表示する。
【0076】
具体的には、障害範囲検索プログラム322は、障害アドレス管理情報318を参照し、障害スロットのブロックが割り当てられているボリュームID及びボリューム内アドレス(LBA)のリストを生成して表示する。これにより、管理者は、プライマリボリューム及びスナップショット(ボリューム)における欠損箇所を知ることができる。障害アドレス管理情報318は、障害範囲検索プログラム322により生成される。
【0077】
「実行」ボタン503が選択されると、障害対象データ回復プログラム323は、1スロットのフォーマットデータ(0データ)を生成し、破損したスロットマッピングテーブル400が示す、スナップショットストアスペース220のスロットに書き込む。障害対象データ回復プログラム323は、当該スロットのスロットマッピングテーブル400を再生成し、障害状態が回復したことを管理システム103に通知する。なお、障害アドレスを省略して障害発生を管理システム103に通知し、管理システム103からの指示に応じて障害回復を実行してもよい。
【0078】
図15は、障害対象範囲検索処理の例のフローチャートを示す。障害範囲検索プログラム322は、障害スロットに対応するボリュームID及びアドレスを検索する(S101)。具体的には、障害範囲検索プログラム322は、キャッシュスロット管理情報317を参照し、スナップショットストアスペース220内の障害スロットを特定する。コンディション欄424が、エラー(「1」)を示すエントリは、障害スロットを示す。障害範囲検索プログラム322は、スナップショットストアスペース内ブロック参照元管理情報319を参照し、障害スロットのブロックが割り当てられているボリューム(プライマリボリューム及びスナップショット)並びにボリューム内アドレスを取得する。
【0079】
次に、障害範囲検索プログラム322は、障害スロットに対応するボリュームID及びボリューム内アドレスのリストを作成して障害スロット管理テーブル430を生成し、障害アドレス管理情報318に含める(S102)。障害対象データ回復処理起動プログラム324は、障害アドレス管理情報318を参照して、ボリュームID及びボリューム内アドレスのリストを管理システム103に通知する(S103)。なお、障害スロット管理テーブル430の生成は、システム内の障害スロットの検出に対して実行されてよい。
【0080】
図16は、障害データ回復処理の例のフローチャートを示す。障害データ回復処理は、障害スロットにフォーマットデータを書き込む。図16に示す障害データ回復処理は、上記第1の障害回復方法に加えて、第2の障害回復方法でも実行され得る。以下において、第1の障害回復方法における処理の流れを説明する。
【0081】
障害対象データ回復プログラム323は、破損したスロットマッピングテーブル400のスロットのための領域がキャッシュ303に確保されているか判定する(S111)。具体的には、障害対象データ回復プログラム323は、キャッシュスロット管理情報317のステータス欄423を参照し、そのスロットのスナップショットストアスペースアドレスのエントリが、キャッシュ領域割り当て済み又は未割り当てのいずれを示すか判定する。
【0082】
キャッシュ領域が確保されていない場合(S111:NO)、障害対象データ回復プログラム323は、当該スロットのためのキャッシュ領域を確保し、キャッシュスロット管理情報317を更新する(S112)。
【0083】
次に、障害対象データ回復プログラム323は、フォーマット範囲を決定する(S113)。ここでは、障害対象データ回復プログラム323は、管理者から、スロット全体の強制フォーマットを指示されている。そのため、フォーマット範囲は、スロット全体である。
【0084】
次に、障害対象データ回復プログラム323は、確保されているキャッシュ領域に、予め設定されているフォーマットデータ(0データ)を格納する(S114)。上述のように、全てのブロックのフォーマットデータが書き込まれる。さらに、障害対象データ回復プログラム323は、キャッシュスロット管理情報317において、当該スロットのダーティビットマップ欄425及びフォーマットビットマップ欄427を更新する(S115)。更新後の情報は、スロット内の全データがダーティかつフォーマット済みであることを示す。
【0085】
次に、障害対象データ回復プログラム323は、当該スロット内の全データがダーティかつフォーマット済みであるか判定する(S116)。上述のように、当該スロット内の全データがダーティであるため(S116:YES)、障害対象データ回復プログラム323は追記処理を実行して、スロットのデータをプール230及び記憶ドライブ120に格納する(S117)。追記処理の詳細は後述される。
【0086】
次に、第2の障害回復方法を説明する。第2の障害回復方法は、障害スロットのフォーマットにホストデータを使用し、ホストデータが書き込まれないブロックに対してストレージシステム内で生成したフォーマットデータを格納する。
【0087】
図17は、上記第2の障害回復方法のための、障害範囲フォーマット指示画面の例を示す。障害範囲検索プログラム322は、プールマッピング情報315の障害が検出されると、当該画面を管理システム103において表示する。「欠損箇所リスト」のボタン505が選択されると、障害範囲検索プログラム322は、破損したスロットマッピングテーブル400のスロットに関連づけられているホストデータの情報を管理システム103において表示する。
【0088】
具体的には、障害範囲検索プログラム322は、障害アドレス管理情報318を参照し、障害スロットのブロックが割り当てられているボリュームID及びボリューム内アドレス(LBA)のリストを生成して表示する。これにより、管理者は、プライマリボリューム及びスナップショット(ボリューム)における欠損箇所を知ることができる。障害アドレス管理情報318は、障害範囲検索プログラム322により生成される。
【0089】
「確認」ボタン507が選択されると、障害対象データ回復プログラム323は、ホストデータを使用した障害スロットのフォーマットを実行する。障害対象データ回復プログラム323は、サーバシステム102から、バックアップデータがそれぞれの上階層ボリューム(プライマリボリューム又はスナップショット)のアドレスに書き込まれるのを待つ。例えば、ストレージ管理者が障害アドレスを確認して、サーバ管理者やサーバ使用者に通知してもよい。サーバ管理者やサーバ使用者は、当該領域にフォーマットデータをライトするコマンドを実行管理システム103からサーバシステム102に通知できる。
【0090】
スナップショットストアスペース220のスロットへの書き込み(キャッシュ上)が完了するまで待ってから、障害対象データ回復プログラム323は、破損したスロットマッピングテーブル400を再生成する。上階層のボリュームに割り当てられていないブロックに対しては、システム内で生成されたフォーマットデータが書き込まれる。スロットマッピングテーブル400を再生成した後、障害対象データ回復プログラム323は、障害状態が回復したことを管理システム103に通知する。
【0091】
図18は、フロントエンドライト処理の例のフローチャートを示す。フロントエンドライト処理は、サーバシステム102からの新規ホストデータを受信し、キャッシュ303に格納し、サーバシステム102に完了応答を返す。フロントエンドライト処理により、上階層のボリュームに仮想的にホストデータが格納される。新規ホストデータは、通常のライト処理においてボリュームへ書き込まれるデータ、又は、プールマッピング情報315の障害回復のために書き込まれたデータであり得る。
【0092】
具体的には、リード/ライト処理プログラム321は、フロントエンドI/F114を介して、サーバシステム102からライト要求を受信する。リード/ライト処理プログラム321は、キャッシュスロット管理情報317を参照し、ライト要求が示すボリュームのスロットのための領域が、キャッシュ303に確保されているか判定する(S121)。
【0093】
キャッシュ領域が確保されていない場合(S121:NO)、リード/ライト処理プログラム321は、キャッシュ領域を確保し、キャッシュスロット管理情報317を更新する(S122)。キャッシュ領域が確保されている場合(S121:YES)又は新たなキャッシュ領域が確保された(S122)後、リード/ライト処理プログラム321は、新規ホストデータを割り当てられているキャッシュ領域に書き込む。リード/ライト処理プログラム321は、キャッシュスロット管理情報317を更新し、サーバシステム102に対して完了応答を返す(S124)。
【0094】
次に、中間ライト処理を説明する。図19は、中間ライト処理の例のフローチャートを示す。中間ライト処理は、上階層ボリュームに格納されているホストデータを、スナップショットストアスペース220及びプール230に仮想的に格納し、記憶ドライブ120に物理的に格納する。中間ライト処理と同様に、対象ホストデータは、通常のライト処理によるホストデータ又はプールマッピング情報315の障害回復のためのホストデータであり得る。
【0095】
リード/ライト処理プログラム321は、ホストデータの書き込み先スナップショットストアスペースアドレスを取得する(S131)。書き込み先スナップショットストアスペースアドレスは、新規ホストデータが書き込まれたボリュームのアドレスに関連付けられている、スナップショットストアスペース220内のアドレスである。当該アドレスにより、スロット及びブロックが特定され得る。
【0096】
既に関連付けらえているアドレスが存在する場合、そのアドレスが取得され、関連付けられているアドレスが存在しない場合、新規のアドレスが割り当てられる。詳細は後述される。当該アドレスは、スナップショットストアスペースマッピング情報313において管理されている。
【0097】
次に、リード/ライト処理プログラム321は、キャッシュスロット管理情報317のステータス欄423を参照し、取得した書き込み先スナップショットストアスペースアドレスに対応する領域が、キャッシュ303において確保されているか判定する(S132)。
【0098】
キャッシュ領域が確保されていない場合(S132:NO)、リード/ライト処理プログラム321は、プールマッピング情報315における、書き込み先スロットのスロットマッピングテーブル400を参照する(S133)。リード/ライト処理プログラム321は、保証コード管理情報316を参照して、当該スロットマッピングテーブル400に障害があるか判定する(S134)。
【0099】
スロットマッピングテーブル400に障害がない(破損していない)場合(S134:NO)、リード/ライト処理プログラム321は、追記処理を実行して、スロットのデータをプール230及び記憶ドライブ120に格納する(S141)。追記処理の詳細は後述する。障害状態でなく、スロット確保済みでないスロットへのホストデータライト処理はこの流れで実行される。
【0100】
スロットマッピングテーブル400に障害がある(破損している)場合(S134:YES)、リード/ライト処理プログラム321は、キャッシュスロット管理情報317のコンディション欄424に、当該スロットの障害の設定を行う(S315)。さらに、リード/ライト処理プログラム321は、キャッシュ303において、当該スロットのためのキャッシュ領域を確保して、キャッシュスロット管理情報317のステータス欄423を更新する(S316)。
【0101】
キャッシュ領域が確保されている場合(S132:YES)又は新たにキャッシュ領域が確保された(S136)後、リード/ライト処理プログラム321は、ホストデータをキャッシュ領域に書き込む(S137)。
【0102】
リード/ライト処理プログラム321は、キャッシュ領域へのホストデータ書き込みに応じて、キャッシュスロット管理情報317のダーティ情報及びフォーマット情報を更新する(S138)。リード/ライト処理プログラム321は、当該スロットのダーティビットマップ欄425及びフォーマットビットマップ欄427を更新する。更新後のキャッシュスロット管理情報317は、障害スロットにおいて、ホストデータが書き込まれたブロックがダーティかつフォーマット済みであることを示す。
【0103】
次に、リード/ライト処理プログラム321は、キャッシュスロット管理情報317のコンディション欄424を参照して、当該スロットのスロットマッピングテーブル400に障害があるか判定する(S139)。障害がある場合(S139:YES)、リード/ライト処理プログラム321は、キャッシュスロット管理情報317を参照して、当該スロットの全ブロックがダーティかつフォーマット済みであるか判定する(S140)。いずれかのブロックに新規データが書き込まれていない場合(S140:NO)、本処理は終了する。
【0104】
当該スロットのスロットマッピングテーブル400に障害がない場合(S139:NO)又は当該スロットの全ブロックがダーティかつフォーマット済みである場合、リード/ライト処理プログラム321は、追記処理を実行して、スロットのデータをプール230及び記憶ドライブ120に格納する(S141)。追記処理の詳細は後述する。
【0105】
上述のように、スロットマッピングテーブル400に障害が存在する場合、上階層のボリュームに関連付けられていたブロックに対して新規ホストデータが書き込まれる。そのため、未割り当てのブロックには、ストレージシステム101内でフォーマットデータが書き込まれる。
【0106】
例えば、障害対象データ回復処理起動プログラム324は、確認ボタン507が選択されると、障害スロットに対するフォーマットデータの書き込みを、障害対象データ回復プログラム323に指示する。
【0107】
障害対象データ回復プログラム323は、図16に示すように、指定されたスロットのための回復処理を実行する。キャッシュ領域は既に確保されている(S111:YES)ので、障害対象データ回復プログラム323は、フォーマット範囲を決定する(S113)。
【0108】
障害対象データ回復プログラム323は、障害アドレス管理情報318を参照して、障害スロットにおいて上階層ボリュームに割り当てられていないブロック(オフセット)を特定する。障害対象データ回復プログラム323は、キャッシュ領域に、未フォーマットのブロックのフォーマットデータを格納する(S114)。
【0109】
さらに、障害対象データ回復プログラム323は、キャッシュスロット管理情報317において、当該スロットのダーティビットマップ欄425及びフォーマットビットマップ欄427を更新する(S115)。更新後の情報は、スロット内の全データがダーティかつフォーマット済みであることを示す。
【0110】
次に、障害対象データ回復プログラム323は、当該スロット内の全データがダーティかつフォーマット済みであるか判定する(S116)。当該スロット内の全データがダーティである場合(S116:YES)、障害対象データ回復プログラム323は追記処理を実行して、スロットのデータをプール230及び記憶ドライブ120に格納する(S117)。いずれかのブロックに新規データが書き込まれていない場合(S116:NO)、フローは終了する。
【0111】
未割り当てブロックのフォーマットは、管理者に通知したリストの全てのホストデータが書き込まれた後、又は管理者からの指示に応じて実行されてもよい。サーバシステム102は、障害スロットに関連付けられているボリュームアドレスのうち、一部のアドレスのホストデータのみを書き込んでもよい。例えば、障害対象データ回復プログラム323は、障害アドレス管理情報318を参照し、障害対象のスロット内のブロックの中で、割り当て先VOLが存在しないブロックを、未割り当てブロックと決定できる。
【0112】
次に、図19のフローチャートにおける、ホストデータの書き込み先スナップショットストアスペースアドレスを取得する処理S131の詳細を説明する。図20は、書き込み先スナップショットストアスペースアドレス取得処理S131の例のフローチャートを示す。
【0113】
リード/ライト処理プログラム321は、スナップショットストアスペース220の書き込み先ブロックが割り当て済みであるか否か、さらに、当該ボリューム以外にも上階層ボリュームに参照されているか判定する(S151)。具体的には、リード/ライト処理プログラム321は、ディレクトリ情報312を介して、スナップショットストアスペースマッピング情報313から、上階層のボリュームの書き込み先アドレスに対応するエントリを取得する。
【0114】
ステータス欄372の値が、未割り当て(「0」)である場合(S151:YES)、リード/ライト処理プログラム321は、新たなスナップショットストアスペースアドレス(書き込み先領域)を確保する(S152)。
【0115】
ステータス欄372の値が、割り当て済み(「1」)である場合、既存の書き込み先スナップショットストアスペースアドレスが存在する。既存のスナップショットストアスペースアドレスが登録されている場合、リード/ライト処理プログラム321は、スナップショットストアスペース内ブロック参照元管理情報319を参照して、参照元ボリュームを決定する。当該ボリューム以外の参照元ボリュームが存在する場合(S151:YES)、リード/ライト処理プログラム321は、新たなスナップショットストアスペースアドレス(書き込み先領域)を確保する(S152)。
【0116】
ステータス欄372の値が割り当て済み(「1」)であり、かつ、参照元ボリュームが当該ボリュームのみである(参照元ボリューム数が1)場合(S151:NO)、ステップS152はスキップされる。
【0117】
リード/ライト処理プログラム321は、書き込み先スナップショットストアスペースアドレスを決定する(S153)。具体的には、当該既存スナップショットストアスペースアドレスが存在し、参照元ボリュームが当該ボリュームのみである場合、当該既存スナップショットストアスペースアドレスが書き込み先である。
【0118】
書き込み先スナップショットストアスペースアドレスが未割り当ての場合、新たに確保されたスナップショットストアスペースアドレスが、書き込み先である。割り当て済みスナップショットストアスペースアドレスが他のボリュームにも参照されている場合、割り当て済みブロックと新たに確保されたブロックが、書き込み先である。
【0119】
図21は、バックエンドライト処理の例のフローチャートを示す。バックエンドライト処理は、キャッシュされているスナップショットストアスペース220のデータをプール230及び記憶ドライブ120に書き込む。本処理は、中間ライト処理又は障害データ回復処理において処理が中断した場合に、キャッシュされているデータの追記処理を可能とする。
【0120】
リード/ライト処理プログラム321は、キャッシュスロット管理情報317のダーティビットマップ欄425を参照して、スナップショットストアスペースのダーティなキャッシュデータが存在しているか判定する(S161)。存在しない場合(S161:NO)、本処理は終了する。
【0121】
ダーティなキャッシュデータが存在する場合(S161:YES)、リード/ライト処理プログラム321は、キャッシュスロット管理情報317のコンディション欄424を参照して、当該スロットが障害スロットであるか判定する(S162)。
【0122】
当該スロットが障害スロットである場合(S162:YES)、リード/ライト処理プログラム321は、ダーティビットマップ欄425及びフォーマットビットマップ欄427を参照して、全ブロックがダーティかつフォーマット済みか判定する(S163)。全ブロックがダーティかつフォーマット済みの場合(S163:YES)、リード/ライト処理プログラム321は追記処理を実行する(S164)。追記処理S164の後又はいずれかのブロックがダーティ又はフォーマット済みではない場合(S163:NO)、フローはステップS161に戻る。
【0123】
図22は、追記処理の例のフローチャートを示す。追記処理は、スナップショットストアスペース220のデータをプール230及び記憶ドライブ120に追記する。新たなデータは、プール230内のページの空き領域に、前詰めで順次格納される。追記処理は、スナップショットストアスペースに仮想的に格納されているデータを圧縮処理し(S181)、その後、プールマッピング情報315を更新する(S191)。追記対象のスナップショットストアスペース内の各スロット内の各ブロックについて、ステータス欄402及び参照先プールアドレス欄403が更新される。
【0124】
追記処理は、メモリ112上の圧縮データを記憶ドライブ120にデステージする(S183)。追記処理は、プールマッピング情報315の該当スロットマッピングテーブル400を更新し(S184)、保証コードを付与する(S185)。
【0125】
追記処理は、キャッシュスロット管理情報317のコンディション欄424を参照して、スロットマッピングテーブル400に障害があるか判定する(S186)。障害がある場合(S186:YES)、キャッシュスロット管理情報317のコンディション欄424の障害情報及びフォーマットビットマップ欄427のフォーマット済み情報が削除される。最後に、キャッシュスロット管理情報317のダーティビットマップ欄425のダーティ情報が削除される(S188)。
【0126】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【0127】
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード等の記録媒体に置くことができる。
【0128】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
【符号の説明】
【0129】
101 ストレージシステム
102 サーバシステム
103 管理システム
110 ストレージコントローラ
201 プライマリボリューム
202-0~202-2 スナップショット
220 スナップショットストアスペース
230 プール
311 スナップショット管理情報
312 ディレクトリ情報
313 スナップショットストアスペースマッピング情報
314 プール管理情報
315 プールマッピング情報
316 保証コード管理情報
317 キャッシュスロット管理情報
318 障害アドレス管理情報
319 スナップショットストアスペース内ブロック参照元管理情報
321 リード/ライト処理プログラム
322 障害範囲検索プログラム
323 障害対象データ回復プログラム
324 障害対象データ回復処理起動プログラム
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22