(57)【要約】  分散ストレージシステムは、複数のエッジノードを含むエッジシステムと、エッジシステムとネットワークを介して接続され、エッジシステムのバックアップデータを保持するコアシステムと、を含む。複数のエッジノードのそれぞれは、ボリュームをホストに提供し、ボリュームの第１世代のスナップショットと、第１世代よりも古い旧世代のスナップショットと、の間のＸＯＲ更新差分データを生成し、生成したＸＯＲ更新差分データを前記コアシステムに送信する。コアシステムは、バックアップデータとして、複数のエッジノードからのＸＯＲ更新差分データに基づき生成されたイレージャコードを保持し、複数のエッジノードから受信したＸＯＲ更新差分データに基づいて、イレージャコードを更新する。
2017081747.tif 000002
【特許請求の範囲】
【請求項１】
分散ストレージシステムであって、
複数のエッジノードを含むエッジシステムと、
前記エッジシステムとネットワークを介して接続され、前記エッジシステムのバックアップデータを保持するコアシステムと、を含み、
前記複数のエッジノードのそれぞれは、
ボリュームをホストに提供し、
前記ボリュームの第１世代のスナップショットと、前記第１世代よりも古い旧世代のスナップショットと、の間のＸＯＲ更新差分データを生成し、
前記生成したＸＯＲ更新差分データを前記コアシステムに送信し、
前記コアシステムは、
前記バックアップデータとして、前記複数のエッジノードからのＸＯＲ更新差分データに基づき生成されたイレージャコードを保持し、
前記複数のエッジノードから受信したＸＯＲ更新差分データに基づいて、前記イレージャコードを更新する、分散ストレージシステム。
【請求項２】
請求項１に記載の分散ストレージシステムであって、
前記複数のエッジノードのそれぞれは、前記ボリュームへのライト更新と非同期に、前記ＸＯＲ更新差分データを生成して前記コアシステムに送信する、分散ストレージシステム。
【請求項３】
請求項１に記載の分散ストレージシステムであって、
前記コアシステムは、
前記イレージャコードを格納する１以上のボリュームを保持し、
前記１以上のボリュームにおいて、更新中のイレージャコードを格納する領域を排他ロックする、分散ストレージシステム。
【請求項４】
請求項１に記載の分散ストレージシステムであって、
前記コアシステムは、
前記複数のエッジノードにおける第１エッジノードから順次受信した、複数世代のＸＯＲ更新差分データを保存する、分散ストレージシステム。
【請求項５】
請求項１に記載の分散ストレージシステムであって、
前記複数のエッジノードのそれぞれは、前記第１世代のスナップショットと前記旧世代のスナップショットとの間の全てのＸＯＲ更新差分データを前記コアシステムに送信した後、全ライト済み通知を前記コアシステムに送信し、
前記コアシステムは、全ライト済み通知を受信したＸＯＲ更新差分データに基づいて、前記イレージャコードを更新する、分散ストレージシステム。
【請求項６】
請求項１に記載の分散ストレージシステムであって、
前記複数のエッジノードそれぞれは、
前記旧世代のスナップショットと前記第１世代のスナップショットとの間において更新されたアドレス領域を選択し、
前記選択したアドレス領域のＸＯＲ更新差分データを前記コアシステムに送信する、分散ストレージシステム。
【請求項７】
請求項１に記載の分散ストレージシステムであって、
前記コアシステムは、
一つのストライプのイレージャコードの更新において、当該ストライプのデータ要素の一部のみのＸＯＲ更新差分データを受信している場合、他のデータ要素をゼロデータとして、当該ストライプのイレージャコードを更新する、分散ストレージシステム。
【請求項８】
請求項１に記載の分散ストレージシステムであって、
前記複数のエッジノードにおける第１エッジノードの第１ボリュームの復元において、前記コアシステムは、前記第１ボリュームに対応するイレージャコードと、当該イレージャコードに対応する前記第１エッジノードと異なるエッジノードのスナップショットと、を使用する、分散ストレージシステム。
【請求項９】
請求項１に記載の分散ストレージシステムであって、
前記コアシステムは、共通のＸＯＲ更新差分データを含む第１ストライプ及び第２ストライプのイレージャコードを生成し、
前記第１ストライプと前記第２ストライプの間において、前記共通のＸＯＲ更新差分データ以外のデータ要素は、異なるエッジノードのデータ要素である、分散ストレージシステム。
【請求項１０】
請求項１に記載の分散ストレージシステムであって、
前記複数のエッジノードの数は、ストライプのデータ要素数より多く、
一つのエッジノードからのＸＯＲ更新差分データを含む少なくとも２つのイレージャコードのストライプの間において、ＸＯＲ更新差分データのデータ要素の送付元エッジノードの組み合わせが異なる、分散ストレージシステム。
【請求項１１】
複数のエッジノードを含むエッジシステムと、
前記エッジシステムとネットワークを介して接続され、前記エッジシステムのバックアップデータを保持するコアシステムと、を含む分散ストレージシステムにおけるデータのバックアップ方法であって、
前記方法は、前記コアシステムによって、
前記複数のエッジノードそれぞれから、ボリュームの第１世代のスナップショットと、前記第１世代よりも古い旧世代のスナップショットとのＸＯＲ更新差分データを受信し、
前記受信したＸＯＲ更新差分データを使用して、前記バックアップデータとして保持するイレージャコードを更新する、ことを含む方法。
【請求項１２】
請求項１１に記載のバックアップ方法であって、
前記コアシステムは、
前記複数のエッジノードにおける第１エッジノードから順次受信した、複数世代のＸＯＲ更新差分データを保存する、方法。
【請求項１３】
請求項１１に記載のバックアップ方法であって、
前記コアシステムによって、一つのストライプのイレージャコードの更新において、当該ストライプのデータ要素の一部のみのＸＯＲ更新差分データを受信している場合、他のデータ要素をゼロデータとして、当該ストライプのイレージャコードを更新する、ことを含む、方法。
【請求項１４】
請求項１１に記載のバックアップ方法であって、
前記コアシステムによって、前記複数のエッジノードにおける第１エッジノードの第１ボリュームの復元において、前記第１ボリュームに対応するイレージャコードと、当該イレージャコードに対応する前記第１エッジノードと異なるエッジノードのスナップショットと、を使用する、ことを含む、方法。
【請求項１５】
分散ストレージシステムにおいて、複数のエッジノードを含むエッジシステムとネットワークを介して接続され、前記エッジシステムのバックアップデータを保持するコアシステム、に、データバックアップのための処理を実行させる命令を格納する、計算機読み取り可能な非一時的記憶媒体であって、
前記処理は、
前記複数のエッジノードそれぞれから、ボリュームの第１世代のスナップショットと、前記第１世代よりも古い旧世代のスナップショットとのＸＯＲ更新差分データを受信し、
前記受信したＸＯＲ更新差分データを使用して、前記バックアップデータとして保持するイレージャコードを更新する、ことを含む記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散ストレージシステムに関する。
【背景技術】
【０００２】
ＩｏＴ時代の到来により、多数のエッジノードで生成データを保持し、分析を実施するシステムが普及すると考えられる。そのようなシステムにおいて、大量のエッジノードのデータを少ないリソースでバックアップを実現することが要求される。【０００３】
たとえば、米国特許第７１５２０７９号（特許文献１）は、非同期リモートコピー技術を開示する。例えば、以下の構成が開示されている。「第一のストレージシステムは、第一のストレージシステムに格納されたデータの更新に関する情報をジャーナルとして格納する。ジャーナルは、具体的には、更新に用いられたデータのコピーと更新時のライト命令等の更新情報とによって構成される。さらに、第二のストレージシステムは、第一のストレージシステムと第二の記憶システム間の通信線を介して、前記ジャーナルを取得する。第二のストレージシステムは、第一のストレージシステムが保持するデータの複製を保持しており、前記ジャーナルを用いて、第一のストレージシステムでのデータ更新順に、第一のストレージシステムのデータと対応するデータを更新する。」（要約）。【０００４】
上記非同期リモートコピー技術は、リモートのデータセンタにデータをバックアップする際に、ホストＩ／Ｏとは非同期にデータを転送することにより、ホストＩ／Ｏのレイテンシ増加を抑制できる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第７１５２０７９号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来の非同期リモートコピー技術は、バックアップのデータを２重化するため、バックアップ側のデータセンタに実データ分の容量の記憶ストレージ装置を導入する必要がある。この場合、多数のエッジノードが存在する場合に、バックアップ側のデータセンタ（コアデータセンタ）の膨大な容量が必要になる。
【課題を解決するための手段】
【０００７】
本発明の代表的な一例は、分散ストレージシステムであって、複数のエッジノードを含むエッジシステムと、前記エッジシステムとネットワークを介して接続され、前記エッジシステムのバックアップデータを保持するコアシステムと、を含む。前記複数のエッジノードのそれぞれは、ボリュームをホストに提供し、前記ボリュームの第１世代のスナップショットと、前記第１世代よりも古い旧世代のスナップショットと、の間のＸＯＲ更新差分データを生成し、前記生成したＸＯＲ更新差分データを前記コアシステムに送信する。前記コアシステムは、前記バックアップデータとして、前記複数のエッジノードからのＸＯＲ更新差分データに基づき生成されたイレージャコードを保持し、前記複数のエッジノードから受信したＸＯＲ更新差分データに基づいて、前記イレージャコードを更新する。
【発明の効果】
【０００８】
本発明の一態様によれば、バックアップによりデータを保護しつつ、バックアップに必要な記憶容量を削減できる。
【図面の簡単な説明】
【０００９】
【図１】拠点分散型ストレージシステムのシステム構成例を示す。
【図２】拠点分散型ストレージシステムの論理構成例を示す。
【図３Ａ】拠点分散型ストレージシステムのメモリに格納されている管理情報の例を示す。
【図３Ｂ】拠点分散型ストレージシステムのメモリに格納されている管理情報の例を示す。
【図４Ａ】ボリュームの構成を管理するボリューム構成テーブルの例を示す。
【図４Ｂ】ペアの状態を管理するペア管理テーブルの例を示す。
【図４Ｃ】プールのページマッピングの情報を管理するページマッピングテーブルの例を示す。
【図４Ｄ】拠点管理テーブルの例を示す。
【図５】エッジＩ／Ｏ処理（ライト）のフローチャート例を示す。
【図６】エッジＩ／Ｏ処理（リード）ののフローチャート例を示す。
【図７】エッジバックアップ処理（非同期転送）のフローチャート例を示す。
【図８】コアライト処理のフローチャート例を示す。
【図９】コアＥＣ更新処理のフローチャート例を示す。
【図１０】リストア処理のフローチャート例を示す。
【図１１】実施形態２に係る、計算機システムの論理構成例を示す。
【図１２】実施形態３に係る、計算機システムにおける論理構成例を示す。
【発明を実施するための形態】
【００１０】
以下、添付図面を参照して本発明の実施形態を説明する。本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。各図において共通の構成については同一の参照符号が付されている。
【００１１】
本開示は、拠点分散型ストレージシステムにおける、データ保護の効率化に関する。複数のエッジノードが、異なる時点のスナップショット（特定時点のボリュームのデータ）のＸＯＲ更新差分データを生成し、コアシステムに転送する。コアシステムは、ＸＯＲ更新差分データを元に、イレージャコード（冗長コード）を更新する。これにより、リモートバックアップのための記憶容量を低減する。
＜実施形態１＞
【００１２】
図１は、拠点分散型ストレージシステムのシステム構成例を示す。拠点分散型ストレージシステムは、ネットワークを介して接続された複数の計算機ノードを含む。図１において、三つの計算機ノード１０１Ａ〜１０１Ｃが例示されている。
【００１３】
計算機ノード１０１Ａ、１０１Ｂはエッジノード（単にエッジとも呼ぶ）であり、計算機ノード１０１Ｃはコアノード（単にコアとも呼ぶ）である。エッジノード１０１Ａ、１０１Ｂは、それぞれ、ホストに対してボリュームを提供し、コアノード１０１Ｃは、エッジノード１０１Ａ、１０１Ｂのボリュームのバックアップデータを保持する。例えば、各エッジノードは異なる拠点、例えば、異なる支店に配置されている。
【００１４】
計算機ノードは、例えば一般的なサーバ計算機の構成を有している。計算機ノードのハードウェア構成は特に限定されない。計算機ノードは、ネットワーク１０３を介して他の計算機ノードとポート１０６を通じて接続する。ネットワーク１０３は、例えばＩｎｆｉｎｉ  Ｂａｎｄや、イーサネットなどにより構成される。
【００１５】
計算機ノードの内部構成は、内部ネットワーク１１２を介してポート１０６、プロセッサパッケージ１１１、ディスクドライブ（以下においてドライブとも呼ぶ）１１３を接続する。プロセッサパッケージ１１１は、メモリ１１８及びプロセッサ１１９を含む。
【００１６】
メモリ１１８は、プロセッサ１１９がリードやライト命令を処理し、ストレージの機能を実行する上で、必要な制御用の情報を格納し、また、ストレージのキャッシュデータを格納する。さらに、メモリ１１８は、例えばプロセッサ１１９により実行するプログラムを格納する。メモリ１１８は、揮発性のＤＲＡＭであってもよいし、不揮発のＳＣＭ（Ｓｔｏｒａｇｅ  Ｃｌａｓｓ  Ｍｅｍｏｒｙ）などを用いてもよい。
【００１７】
ドライブ１１３は、例えば、ＦＣ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）、ＳＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）などのインタフェースを持つＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）や、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などにより構成する。
【００１８】
ＮＡＮＤ、ＰＲＡＭ、ＲｅＲＡＭなどのＳＣＭを用いてもよいし、揮発性のメモリを用いてもよい。揮発性メモリを使用する場合、バッテリによってストレージデバイスを不揮発化してもよい。前述したさまざまな種別のドライブは、性能が異なる。例えば、ＨＤＤと比較し、ＳＳＤのスループット性能が高い。計算機ノードは、複数の種別のドライブ１１３を含む。
【００１９】
図２は、拠点分散型ストレージシステムの論理構成例を示す。拠点分散型ストレージシステムは、計算機ノード１０１Ａ、１０１Ｂを含むエッジシステムと、計算機ノード１０１Ｃを含むコアシステムと、を含む。計算機ノード１０１Ｂにおいて、計算機ノード１０１Ａの構成要素と同種の構成要素に対する参照符号は省略されている。エッジシステムの計算機ノードは、複数の拠点に分散して配置される。一つの拠点には、１又は複数の計算機ノードが配置されている。
【００２０】
計算機ノード１０１Ａ、１０１Ｂは、それぞれ、プライマリボリュームＰＶＯＬ２０２をホストに提供する。ホストは、例えばエッジ計算機上で実行されるアプリケーション又は仮想マシン（Ａｐｐ／ＶＭ）２０３である。これらプログラムは、他の計算機上で実行されてもよく、ホストは他の実計算機であってもよい。
【００２１】
ＰＶＯＬ２０２は、仮想ボリュームでもよいし、論理ボリュームでもよい。仮想ボリュームは、物理的な記憶空間を持たないボリュームである。計算機ノードは、新たにライトアクセスがあった仮想ページに対して、プールから論理ページを割り当てる。プールは１以上のプールボリュームで構成される。プールボリュームは論理ボリュームであり、プールボリュームの論理記憶領域に対して、ドライブ１１３のパリティグループの物理記憶領域が割り当てられる。
【００２２】
二つのセカンダリボリュームＳＶＯＬ２０１Ａ（Ｓ１）、２０１Ｂ（Ｓ２）が、一つのＰＶＯＬ２０２に関連付けられている。ＰＶＯＬ２０２とＳＶＯＬ２０１Ａは、スナップショットペア２０４Ａを構成する。ＰＶＯＬ２０２とＳＶＯＬ２０１Ｂは、スナップショットペア２０４Ｂを構成する。
【００２３】
スナップショット又はスナップショットデータは、特定時点のＰＶＯＬのデータを指し、特定時点のＰＶＯＬの静止化したイメージを指す。二つのＳＶＯＬ２０１Ａ、２０１Ｂ（のデータ）は、それぞれ、ＰＶＯＬ２０２の異なる特定時点のコンシステントなイメージデータであり、スナップショット機能により取得される。
【００２４】
スナップショット機能は、ＰＶＯＬのデータのうち、特定時点から更新された部分のスナップショットデータ（更新前データ）だけを、更新前にＳＶＯＬにコピーする。つまり、ＰＶＯＬの特定時点のスナップショットデータのうち、特定時点の以降に更新された領域のスナップショットデータのみが、ＳＶＯＬにコピーされる。このように、特定時点におけるＰＶＯＬのスナップショットとその後のＰＶＯＬの更新との間の差分データが、ＳＶＯＬに書き込まれる。
【００２５】
図２の例において、ＳＶＯＬ２０１Ａ、２０１Ｂは仮想ボリュームであり、プール２０８から、所定サイズのページ単位で、物理記憶領域が割り当てられる。つまり、ＳＶＯＬ２０１Ａ、２０１Ｂのデータは、プール２０８に格納され、管理される。ＳＶＯＬ２０１Ａ、２０１Ｂは、他の種類のボリュームでもよい。
【００２６】
ＰＶＯＬが更新されるときに、更新される部分のデータのみが、更新前にスナップショットデータ（の一部）としてプールにコピーされる。この処理を、スナップショットデータの取得とも呼ぶ。
【００２７】
スナップショットペア２０４Ａにおけるスナップショットデータの取得の動作例を説明する。特定時点において、ＰＶＯＬ２０２がデータＡを格納している。特定時点の後、データＡをデータＢに更新するようホストからライト命令（書き込み要求）を受けると、計算機ノード１０１Ａは、ＰＶＯＬ２０２を更新する前に、データＡをＳＶＯＬ２０１Ａ、つまり、プール２０８にコピーする。
【００２８】
データＡのコピー完了後、計算機ノード１０１Ａは、ＰＶＯＬ２０２においてデータＡが格納されている領域に、データＢを書き込み、ＰＶＯＬ２０２を更新する。ホストは、ＳＶＯＬ２０１Ａを介して、ＰＶＯＬ２０２及びプール２０８にアクセスすることで、特定時点のＰＶＯＬ２０２のデータを取得できる。
【００２９】
このように、ＰＶＯＬ２０２はホストからのＩ／Ｏを継続し、更新ライトを受け付ける。一方、ＳＶＯＬ２０１Ａ、２０１Ｂそれぞれのデータは、対応する特定時点のデータのままである。
【００３０】
ＳＶＯＬ２０１Ａ、２０１Ｂは、それぞれ、「現」状態又は「旧」状態を持ち得る。ＳＶＯＬ２０１Ａ、２０１Ｂの一方が「現」状態であり、他方が「旧」状態である。図２において、ＳＶＯＬ２０１Ａは「旧」状態であり、ＳＶＯＬ２０１Ｂは「旧」状態である。「旧」状態のＳＶＯＬ２０１Ａは、「現」状態のＳＶＯＬ２０１Ｂより前の世代のデータと関連づけられている。
【００３１】
「旧」状態のＳＶＯＬの特定時点は、「現」状態のＳＶＯＬの特定時点よりも前である。例えば、「旧」状態のＳＶＯＬ２０１Ａの特定時点は、１４日９時０分であり、「現」状態のＳＶＯＬ２０１Ｂの特定時点は、１４日１０時０分である。
【００３２】
コアノード１０１Ｃは、「旧」の世代のデータに対応するイレージャコード（ＥＣ）を生成し、ドライブ１１３に格納済みである（反映済み）。イレージャコードは、ＰＶＯＬ２０２のバックアップデータである。一方、「現」の世代のデータのイレージャコードは、コアノード１０１Ｃのドライブ１１３への反映完了前であり、反映開始前又は反映中である。コアノード１０１Ｃは、例えば、リードソロモン符号を使用してイレージャコードを生成する。
【００３３】
各エッジノード、例えば、計算機ノード１０１Ａは、ＰＶＯＬ２０２においてライト更新が発生した領域について、ＳＶＯＬ２０１Ａ、２０１Ｂの排他的論理和ＸＯＲを算出し（２０５）、外部ボリュームがマッピングされている内部ボリュームＵＶＯＬ２０６に書き込む。このスナップショットデータの異なる世代間の排他的論理和ＸＯＲデータを、ＸＯＲ更新差分データと呼ぶ。
【００３４】
具体的には、計算機ノード１０１Ａは、「旧」状態のＳＶＯＬ２０１ＡにＰＶＯＬ２０２から退避された（コピーされた）データと、「現」状態のＳＶＯＬ２０１Ｂの同一アドレス領域のデータと、を取得する。計算機ノード１０１Ａは、取得した二つのＳＶＯＬ１０１Ａ、１０１Ｂのデータの排他的論理和を計算して、ＸＯＲ更新差分データを得る。このように、計算されるデータは、連続する世代間のＸＯＲ更新差分データである。計算機ノード１０１Ａは、算出したＸＯＲ更新差分データをＵＶＯＬ２０６に書き込む。
【００３５】
図２において、ＸＯＲ更新差分データ２０７は、特定の期間においてＵＶＯＬ２０６に書き込まれた、異なるアドレスの全ＸＯＲ更新差分データを示す。図２において、計算機ノード１０１ＡのＵＶＯＬ２０６には、ＸＯＲ更新差分データ（Ｄ２）２０７が書き込まれ、計算機ノード１０１ＢのＵＶＯＬ２０６には、ＸＯＲ更新差分データ（Ｄ４）２０７が書き込まれている。
【００３６】
ＵＶＯＬ２０６に対して、コアノード１０１ＣのバッファボリュームＢＶＯＬがマッピングされている。ＢＶＯＬはエッジノードの内部ボリュームとしてマッピングされており、エッジノードは、ＵＶＯＬ２０６を介して、対応するＢＶＯＬにアクセスできる。
【００３７】
図２において、計算機ノード１０１ＡのＵＶＯＬ２０６に対してＢＶＯＬ（Ｂ２）２０８Ｂがマッピングされ、計算機ノード１０１ＢのＵＶＯＬ２０６に対してＢＶＯＬ（Ｂ４）２０８Ｄがマッピングされている。ＢＶＯＬ（Ｂ１）２０８Ａ、ＢＶＯＬ（Ｂ３）２０８Ｃも、それぞれ、他のエッジノードの内部のＵＶＯＬ２０６にマッピングされている。エッジノードがＵＶＯＬ２０６のあるアドレスにデータを書き込むと、当該データがコアノード１０１Ｃに転送され、ＢＶＯＬの対応するアドレスに当該データが書き込まれる。
【００３８】
例えば、図２において、計算機ノード１０１ＡのＵＶＯＬ２０６のＸＯＲ更新差分データ（Ｄ２）２０７がコアノード１０１Ｃに転送され（２１０Ａ）、ＸＯＲ更新差分データ（Ｄ２）２０９ＡとしてＢＶＯＬ（Ｂ２）２０８Ｂに書き込まれる。同様に、計算機ノード１０１ＢのＵＶＯＬ２０６のＸＯＲ更新差分データ（Ｄ４）がコアノード１０１Ｃに転送され（２１０Ｂ）、ＸＯＲ更新差分データ（Ｄ４）２０９ＢとしてＢＶＯＬ（Ｂ２）２０８Ｄに書き込まれる。
【００３９】
ＢＶＯＬは、論理ボリュームでもよく、ＳＶＯＬのように、仮想ボリュームであってもよい。ＢＶＯＬが仮想ボリュームであることにより、コアシステムにおける物理記憶領域の効率的な利用を実現できる。図２の例において、ＢＶＯＬ２０８Ａ〜２０８Ｄは、プール２１１の仮想ボリュームであり、仮想ボリュームのデータ未書き込みのページ（所定サイズのアドレス領域）に新たなライトアクセスがあると、プール２１１から、当該ページに対して、物理記憶領域が割り当てられる。
【００４０】
コアノード１０１Ｃは、ＢＶＯＬ２０８Ａ〜２０８Ｄの一部又は全てにＸＯＲ更新差分データを書き込んだ後、対応するストライプ２１６のイレージャコードの更新処理（ＥＣ更新処理）を開始する。特定のＢＶＯＬの組のデータ及び当該データから生成されるイレージャコードが、ストライプを構成する。つまり、ストライプは、データ保護のためのイレージャコード（冗長コード）及びその生成の元となる複数データ要素からなる。
【００４１】
図２において、ＢＶＯＬ２０８Ａ〜２０８Ｄが、ストライプ２１６を構成するための組を構成する。ＢＶＯＬ２０８Ａ〜２０８Ｄそれぞれの同一アドレス領域のデータ要素が、同じストライプに含まれる。図２の例においては、四つのデータ要素から三つのイレージャコードが生成される。イレージャコードの数は１つ以上であればよい。
【００４２】
ＢＶＯＬ２０８Ａ〜２０８Ｄは、それぞれ、対応するＰＶＯＬ２０２のある期間の間のＸＯＲ更新差分データ、つまり、ある連続する世代間で、更新のあったデータ間でＸＯＲしたデータを格納する。図２の例においては、一つのＰＶＯＬに対して二つのＳＶＯＬのみが存在するが、３以上のＳＶＯＬのスナップショットペアが生成されてもよい。異なるＰＶＯＬの期間は、共通又は異なる。
【００４３】
後述するように、ＥＣ更新処理の後、ＢＶＯＬは初期化される。したがって、ＢＶＯＬの一部のアドレスにはＸＯＲ更新差分データが格納されているが、他のアドレスには未使用領域データ（ゼロデータ）が格納されている。ＸＯＲ更新差分データを格納するアドレスは、ＢＶＯＬによって異なる。
【００４４】
図２の例においては、ＢＶＯＬ（Ｂ２）２０８Ｂ及びＢＶＯＬ（Ｂ４）２０８Ｄは、それぞれ、ＸＯＲ更新差分データ（Ｄ２）２０９Ａ及びＸＯＲ更新差分データ（Ｄ４）２０９Ｂを格納しており、後述する全ライト通知が受信済みである。ＢＶＯＬ（Ｂ１）２０８Ａ及びＢＶＯＬ（Ｂ３）２０８Ｃは、ＸＯＲ更新差分データを格納していない。
【００４５】
図２のストライプ２１６において、ＢＶＯＬ（Ｂ１）２０８Ａ及びＢＶＯＬ（Ｂ３）２０８Ｃに対応するデータ要素は常にゼロデータである。ＢＶＯＬ（Ｂ２）２０８Ｂ及びＢＶＯＬ（Ｂ４）２０８Ｄからのデータ要素は、これらに格納されているデータであり、ゼロデータ又はＸＯＲ更新差分データである。
【００４６】
このように、全ライト通知を受信していないＢＶＯＬのデータ要素をゼロデータとすることで、ストライプの一部のＰＶＯＬのＸＯＲ更新差分データのみ受信済みである場合、他のＰＶＯＬのＸＯＲ更新差分データを待つ必要がない。各エッジノードが、他のエッジノードと独立したタイミングで、ＸＯＲ更新差分データをコアシステムに送信できる。
【００４７】
コアノード１０１Ｃは、生成されるイレージャコードそれぞれを格納するボリュームＣＶＯＬ２１５Ａ、２１５Ｂ、２１５Ｃを提供する。リードモディファイライトによって、ＣＶＯＬ２１５Ａ、２１５Ｂ、２１５Ｃに格納されているイレージャコードＣ１、Ｃ２、Ｃ３を更新する。イレージャコードＣ１、Ｃ２、Ｃ３の更新時、それらを格納しているＣＶＯＬ２１５Ａ、２１５Ｂ、２１５Ｃの領域は排他ロックされ、ライトとリードが禁止される。これにより、ストライプの全てのイレージャコードが同一データ要素で同時に更新される。
【００４８】
ＥＣ更新において、コアノード１０１Ｃは、ＣＶＯＬ２１５Ａ、２１５Ｂ、２１５Ｃから、ストライプ２１６の直前のイレージャコードを読み出す。コアノード１０１Ｃは、読み出したイレージャコードと、エッジシステムから受信したＸＯＲ更新差分データを含む新たなデータ要素とから、新たなイレージャコードを生成する。新たなイレージャコードにより、ＣＶＯＬ２１５Ａ〜２１５Ｃ内の対応するイレージャコードが更新される。
【００４９】
イレージャコードは、リードモディファイライトにより、エッジシステムから受信した世代間のＸＯＲ更新差分データ要素を使用して更新される。エッジノードにおいてＳＶＯＬ、本例において「旧」ＳＶＯＬに退避されたデータ、つまり、ＰＶＯＬ２０２において更新されたアドレス領域のＸＯＲ更新差分データのみが、エッジシステムからコアノード１０１Ｃに転送される。これにより、データ転送量を低減できる。
【００５０】
イレージャコードは、世代間のＸＯＲ更新差分データにより順次更新される。したがって、更新された最新のイレージャコードは、対応するＰＶＯＬのコアシステムに送信された世代において最新世代のスナップショットデータに対応するイレージャコードである。また、対応するＰＶＯＬのエッジノードにおける「旧」ＳＶＯＬの世代のスナップショットデータとゼロデータとの間のＸＯＲ更新差分データのイレージャコードである。
【００５１】
コアノード１０１Ｃは、イレージャコードに加え、順次受信した複数世代のスナップショットデータのバックアップを保持してもよい。図２において、コアノード１０１Ｃは、ＢＶＯＬ（Ｂ４）２０８Ｄ上のＸＯＲ更新差分データ２０９Ｂを、プール２１３に世代毎に保存する。
【００５２】
プール２１３は、スナップショットプール２０８と同様に、各世代間のＸＯＲ更新差分データ２１２のみ保存する。コアノード１０１Ｃは、世代間のＸＯＲ更新差分データ２１２をシーケンシャルに追記する。本データは、あまり参照されないバックアップデータのため、テープデバイス２１４に保存してもよい。
【００５３】
エッジノードの障害発生時、コアノード１０１Ｃは、ＣＶＯＬのイレージャコード及び同ストライプの正常エッジノードから取得したＳＶＯＬデータから、ＰＶＯＬ２０２のコンシステントバックアップデータのイメージＲＶＯＬ２１８を生成する。コアノード１０１Ｃは、保持するＡｐｐ／ＶＭ２２０を利用して、障害が発生したエッジノードがあたかもＡｌｉｖｅかのように、ＰＶＯＬデータの処理、例えば、ストリーミング分析処理を実行してもよい。障害時の動作については後述する。
【００５４】
エッジノードのＡｐｐ／ＶＭ２０３は、エッジノードのＰＶＯＬ２０２の実データをコアノード１０１Ｃに送信し、コアノード１０１Ｃは、実データ２１７から、ＸＯＲ更新差分を取得するためのスナップショット（ＳＶＯＬ２０１Ａ、２０１Ｂ）を、取得してもよい。エッジノードがスナップショットを取得することで負荷を分散することができる一方、コアノードがスナップショットを取得することでエッジノードの負荷を低減できる。
【００５５】
コアノード１０１Ｃは、Ａｐｐ／ＶＭ２１９を利用してストリーミング分析処理などを実行した後、イレージャコードを更新し、ＢＶＯＬのデータを廃棄する。これにより、ストレージシステムにおける分析とバックアップ容量削減の両立が可能となる。
【００５６】
ストライプは、異なるエッジノードからのデータ要素を含む。これにより、エッジノードの障害時にデータをイレージャコードと正常なエッジノードのデータから、データを復元できる。ストライプのデータ要素は、全て異なるエッジノードのデータであってもよく、ストライプは、同一エッジノードのデータ要を含んでもよい。同一エッジノードのデータ要素数は、当該エッジノードが故障した場合に、他のデータ要素及びイレージャコードからデータを復元できる範囲である。
【００５７】
図３Ａ及び図３Ｂは、拠点分散型ストレージシステムのメモリに格納されている管理情報の例を示す。それぞれのプログラム及びテーブルは、メモリ１１８に格納されている。これらのデータはドライブ１１３に格納されてもよいし、その他のプロセッサ１１９から参照可能な記憶領域に格納されていてもよい。メモリ１１８に格納されているプログラムは、エッジ側、コア側それぞれの計算機ノードのプロセッサ（１１９）に読み込まれることによって、プロセッサ１１９に図５以降に開示するフローを実行させることができる。
【００５８】
図３Ａに示すように、エッジノードのメモリ１１８は、ボリューム構成テーブル３０１、ペア管理テーブル３０２、及びページマッピングテーブル３０３を格納する。エッジノードのメモリ１１８は、さらに、エッジＩ／Ｏ処理プログラム３０４及びエッジバックアップ処理プログラム３０５を格納する。
【００５９】
図３Ｂに示すように、コアノードのメモリ１１８は、ボリューム構成テーブル３０１、ページマッピングテーブル３０３、及び拠点管理テーブル３０９を格納する。コアノードのメモリ１１８は、さらに、コアＩ／Ｏ処理プログラム３０６、コアＥＣ更新プログラム３０７、及びコアリストア処理プログラム３０８を格納する。
【００６０】
ボリューム構成テーブル３０１は、ボリュームそれぞれの構成の情報（ボリュームの種別、状態など）を表す。ペア管理テーブル３０２は、ペアの状態を表す。ページマッピングテーブル３０３は、仮想ボリューム上の記憶領域と対応する物理記憶領域との間の対応関係を管理する。拠点管理テーブル３０９は、コアノードにおいて、拠点（エッジノード）それぞれの構成を管理する。
【００６１】
エッジＩ／Ｏ処理プログラム３０４は、エッジノードのＰＶＯＬに対するＩ／Ｏ処理を実行する。エッジバックアップ処理プログラム３０５は、エッジノードが保持する二つのＳＶＯＬ及びコアシステムにＸＯＲ更新差分データを転送するためのＵＶＯＬを用いて、バックアップ処理を実行する。
【００６２】
コアＩ／Ｏ処理プログラム３０６は、エッジノードのＵＶＯＬにマッピングされているＢＶＯＬへのアクセスをハンドリングする。上述のように、ＢＶＯＬはＵＶＯＬの実体である。コアＥＣ更新プログラム３０７は、コアノードにおいてイレージャコードを更新する。コアリストア処理プログラム３０８は、エッジノードにおいて障害が発生した場合やネットワーク障害などにより、コアノードからエッジノードにアクセス不能になった場合、コアノードにおいてリストア処理を実行する。
【００６３】
以下において、具体的に、拠点分散型ストレージシステムが保持する情報を示すテーブルの構成例を説明する。各テーブルにおいて、一部のエントリのみが示されている。各テーブルにおいて、空白のセルは、データの記載が省略されたセルである。各計算機ノードは、必要なエントリの情報を保持し、一つの計算機ノードにおける更新は、関連する他の計算機ノードに通知される。
【００６４】
図４Ａは、ボリュームの構成を管理するボリューム構成テーブル３０１の例を示す。ボリューム構成テーブル３０１は、ＶＯＬ＃欄３１１、ＶＯＬ種別欄３１２、状態欄３１３、ペアＶＯＬ＃欄３１４、ペア＃欄３１５、及びポート欄３１６を有する。
【００６５】
ＶＯＬ＃欄３１１は、システム内のボリュームを一意に識別する識別子を示す。ＶＯＬ種別欄３１２は、ボリュームそれぞれの種別を示す。例えば、ＰＶＯＬ、ＳＶＯＬ、ＵＶＯＬ、ＢＶＯＬ、ＣＶＯＬ、ＲＶＯＬ等の種別が存在する。状態欄３１３は、ボリュームの状態を示す。たとえば、ＳＶＯＬが「現」状態か「旧」状態かを示し、また、ＢＶＯＬの状態が、全ライト済みか否かを示す。
【００６６】
ペアＶＯＬ＃欄３１４は、ＰＶＯＬとスナップショットペアを構成するＳＶＯＬの識別子（ＶＯＬ＃）を示す。ペア＃欄３１５は、ＰＶＯＬのスナップショットペアの識別子（ペア＃）を示す。ペア＃は、ペア管理テーブル３０２の参照として使用される。ポート欄３１６は、ボリュームのアクセスポートの識別子を示す。
【００６７】
図４Ｂは、ペアの状態を管理するペア管理テーブル３０２の例を示す。ペア管理テーブル３０２は、ペア＃欄３２１、ペア状態欄３２２、及び退避済みビットマップ欄３２３を示す。ペア＃欄３２１は、ペア＃欄３１５と同様に、スナップショットペアの識別子を示す。
【００６８】
ペア状態欄３２２は、スナップショットペアの状態を示す。本開示において、スナップショットペアの複数の状態が定義されて、それらは、「Ｐａｉｒ」状態及び「Ｓｐｌｉｔ」状態を含む。
【００６９】
「Ｐａｉｒ」状態は、スナップショットペアを作成した直後の状態であり、ＰＶＯＬとＳＶＯＬとの間でデータが同期している。つまり、ＰＶＯＬが更新されても、ＰＶＯＬからＳＶＯＬへスナップショットデータ（更新前データ）はコピーされない。ＰＶＯＬから読み出されるデータとＳＶＯＬから読みされるデータは同一である。ＳＶＯＬへリードアクセスは、ＳＶＯＬを介して、ＰＶＯＬからデータを読み出す。
【００７０】
「Ｓｐｌｉｔ」状態は、エッジノードのアプリケーションやユーザからの静止化指示（分割指示）により、「Ｐａｉｒ」状態から変化する状態である。ＰＶＯＬのデータは更新された最新データであるのに対して、ＳＶＯＬは、指示時点の静止化されたイメージ（スナップショットデータ）である。指示後にＰＶＯＬ内のあるアドレス領域が初めて更新される場合、更新前に、当該アドレス領域の更新前データがＳＶＯＬにコピーされる。
【００７１】
分割指示は、任意のタイミングで発行してよい。例えば、アプリケーションのデータ整合性が取れたタイミングで、アプリケーションが分割指示を発行してもよいし、エッジノードが適当なタイミング（１時間に１回など）で分割指示を発行してもよい。
【００７２】
退避済みビットマップ欄３２３は、スナップショットペアの退避済みビットマップを示す。退避済みビットマップは、ＰＶＯＬの所定サイズのアドレス領域それぞれのデータが、ＳＶＯＬに退避済みか否かを示す。退避済みビットマップの各ビットは、対応する所定サイズのアドレス領域（例えば数百ＫＢ）のスナップショットデータが、ＰＶＯＬからＳＶＯＬに退避済み（コピー済み）であるか否かを示す。
【００７３】
図４Ｃは、プール（ＳＶＯＬやＢＶＯＬのプール）のページマッピングの情報を管理するページマッピングテーブル３０３の例を示す。ＰＶＯＬやＳＶＯＬなどの外部に提供する仮想的な記憶空間と、それに対応する実の記憶空間の組（対応関係）を示す。仮想的な記憶空間は、仮想ＶＯＬ＃とＬＢＡ＃の組で特定される。実の記憶空間は、論理ＶＯＬ＃とＬＢＡ＃の組で特定される。仮想的な記憶空間に論理的な記憶空間が未割り当ての場合、テーブル内のセルは、論理側の値が無い状態「−」を示す。
【００７４】
図４Ｄは、拠点管理テーブル３０９の例を示す。拠点管理テーブル３０９は、拠点番号欄３９１、拠点状態欄３９２、及びボリューム構成情報への参照欄３９３を有する。拠点番号欄３９１は、システム内の拠点の識別子である、拠点番号を示す。
【００７５】
拠点状態欄３９２は、拠点の状態を示す。例えば、「Ｎｏｒｍａｌ」は拠点が正常な状態であることを示す。「Ｄｉｓｃｏｎｎｅｃｔ」は、ネットワークの障害などによりアクセス不可となっている状態であることを示す。「Ｆａｉｌｕｒｅ」は、拠点が災害などによりデータを失った状態であることを示す。拠点状態に基づいて、後に述べるデータの復元を実施するか否かが判定される。
【００７６】
ボリューム構成情報への参照欄３９３は、拠点についてのボリューム構成テーブルへの参照を示す。ボリューム構成情報への参照欄３９３は、さらに、対象ボリュームのサイズ、個数などを示す。
【００７７】
図５は、エッジＩ／Ｏ処理（ライト）のフローチャート例を示す。本処理は、エッジシステム（エッジノード）によるＰＶＯＬに対するライト処理である。本処理は、ＰＶＯＬの更新ライト時に、図２を参照して説明した２種類のＳＶＯＬのうち、「Ｓｐｌｉｔ」状態のスナップショットペアのＳＶＯＬに対して、旧データ（更新前データ）を退避する。
【００７８】
ＰＶＯＬへのライト要求を受信すると、エッジＩ／Ｏ処理プログラム３０４は、ボリューム構成テーブル３０１のペア＃欄３１５から、対象ＰＶＯＬの未選択のペア＃を選択する（Ｓ５０１）。図２の例においては、二つのスナップショットペアの一方である。次に、エッジＩ／Ｏ処理プログラム３０４は、ペア管理テーブル３０２のペア状態欄３２２を参照し、選択したペア＃のペア状態が「Ｓｐｌｉｔ」状態か否か判定する（ステップ５０２）。
【００７９】
ペア状態が「Ｓｐｌｉｔ」状態ではない場合（ペア状態が「Ｐａｉｒ」状態の場合）（Ｓ５０２：ＮＯ）、エッジＩ／Ｏ処理プログラム３０４は、当該ＰＶＯＬの全てのスナップショットペアについて、ステップ５０１〜５０５を実行したか判定する（ステップ５０６）。未実行のスナップショットペアが残っていない場合（ステップ５０６：ＮＯ）、エッジＩ／Ｏ処理プログラム３０４は、ＰＶＯＬに新データを書き込み（ステップ５０７）、本処理を終了する。
【００８０】
ペア状態が「Ｓｐｌｉｔ」状態の場合（Ｓ５０２：ＹＥＳ）、エッジＩ／Ｏ処理プログラム３０４は、ペア管理テーブル３０２を参照し、退避済みビットマップ欄３２３から、当該ペアの退避済みビットマップを取得する。エッジＩ／Ｏ処理プログラム３０４は、取得した退避済みビットマップにおいて、更新された領域のデータが退避済みかどうかチェックする（ステップ５０３）。
【００８１】
データが退避済みの場合（ステップ５０３：ＹＥＳ）、エッジＩ／Ｏ処理プログラム３０４は、ステップ５０６に進む。データが未退避の場合（ステップ５０３：ＮＯ）、エッジＩ／Ｏ処理プログラム３０４は、ＳＶＯＬに旧データを退避する（ステップ５０４）。具体的には、エッジＩ／Ｏ処理プログラム３０４は、ＳＶＯＬに対してプールの領域を割り当て（ページマッピングテーブル３０３を更新し）、割り当てたＳＶＯＬの領域にＰＶＯＬの更新前の旧データをコピーする。
【００８２】
その後、エッジＩ／Ｏ処理プログラム３０４は、ペア管理テーブル３０２において、当該スナップショットペアの退避済みビットマップに、当該データが退避済みとマークする（ステップ５０４）。具体的には、エッジＩ／Ｏ処理プログラム３０４は、ステップ５０３で読み出した退避済みビットマップにおいて、対応するビットの値を０から１に変更し、退避済みビットマップ欄３２３に書き込む。その後、エッジＩ／Ｏ処理プログラム３０４は、ステップ５０６に進む。
【００８３】
本処理により、スナップショットデータをＳＶＯＬに退避し、差分が発生したアドレス領域をペア管理テーブル３０２において管理することができる。
【００８４】
図６は、エッジＩ／Ｏ処理（リード）ののフローチャート例を示す。本処理は、エッジシステム（エッジノード）におけるＰＶＯＬ及びＳＶＯＬからのリード処理である。以下においては、図２のスナップショットペア構成を参照する。
【００８５】
エッジＩ／Ｏ処理プログラム３０４は、アクセス先のＶＯＬ＃及びアドレス（ＬＢＡ）を含むリード命令を受信する。エッジＩ／Ｏ処理プログラム３０４は、ボリューム構成テーブル３０１を参照し、リード命令のアクセス先が、ＰＶＯＬ２０２であるかＳＶＯＬ（ＳＶＯＬ２０１Ａ又はＳＶＯＬ２０１Ｂ）であるか判定する（ステップ６０１）。
【００８６】
アクセス先がＳＶＯＬの場合（ステップ６０１：ＹＥＳ）、エッジＩ／Ｏ処理プログラム３０４は、ＳＶＯＬにおけるアクセス先アドレスのデータが、ＳＶＯＬ（プール２０８）に退避済みであるか否か判定する（ステップ６０２）。
【００８７】
具体的には、エッジＩ／Ｏ処理プログラム３０４は、ボリューム構成テーブル３０１を参照し、当該ＳＶＯＬが含まれるスナップショットペアのペア＃を、ペア＃欄３１５から取得する。エッジＩ／Ｏ処理プログラム３０４は、ペア管理テーブル３０２を参照し、当該ペア＃の退避済みビットマップを、退避済みビットマップ欄３２３から取得する。
【００８８】
さらに、エッジＩ／Ｏ処理プログラム３０４は、取得した退避済みビットマップから、アクセス先アドレスのデータが、ＳＶＯＬ（プール２０８）退避済みであるか否か判定する。ＰＶＯＬ２０２においてデータが更新されている場合、更新前データはＳＶＯＬ（プール２０８）に退避されている。
【００８９】
アクセス先アドレスのデータが退避済みである場合（ステップ６０２：ＹＥＳ）、エッジＩ／Ｏ処理プログラム３０４は、ＳＶＯＬからアクセス先データを読み出す（ステップ６０３）。具体的には、エッジＩ／Ｏ処理プログラム３０４は、ＳＶＯＬが属するプール２０８からアクセス先データを取得する。
【００９０】
アクセス先アドレスのデータが退避済みではない場合（ステップ６０２：ＮＯ）、ＰＶＯＬ２０２においてアクセス先アドレスのデータが更新されていないため、エッジＩ／Ｏ処理プログラム３０４は、ＰＶＯＬ２０２からアクセス先データを読み出す（ステップ６０４）。アクセス先がＰＶＯＬ２０２の場合（ステップ６０１：ＮＯ）も、エッジＩ／Ｏ処理プログラム３０４は、ＰＶＯＬ２０２からアクセス先データを読み出す（ステップ６０４）。
【００９１】
以上の処理により、ホストは、ＳＶＯＬを参照することで、特定時点（分割時点）の古い静止化されたイメージ（スナップショット）を取得でき、ＰＶＯＬを参照することで、最新のデータを取得できる。
【００９２】
図７は、エッジバックアップ処理（非同期転送）のフローチャート例を示す。本処理は、エッジシステム（エッジノード）による、ＳＶＯＬ間のＸＯＲ更新差分データの取得と、そのＸＯＲ更新差分データのコアシステムへの転送を含む。本処理は、ＰＶＯＬのデータ更新とは非同期に実行される。これにより、ホストへの応答の遅れを避ける。本処理を開始するトリガは特に限定されない。例えば、本処理は、アプリケーション又はユーザからの指示により、所定期間の経過（定期的実行）毎、又は、ＰＶＯＬの更新データ量が規定値に達する毎に実行される。
【００９３】
以下においては、図２のスナップショットペア構成を参照する。本処理開始前において、旧ＳＶＯＬ２０１Ａのスナップショットペア２０４Ａは「Ｓｐｌｉｔ」状態であり、「現」ＳＶＯＬ２０１Ｂのスナップショットペア２０４Ｂは「Ｐａｉｒ」状態である。例えば、本処理開始前に、旧ＳＶＯＬ２０１Ａのデータは９時０分のスナップショットであり、本処理の開始時刻が、１０時０分である。
【００９４】
エッジバックアップ処理プログラム３０５は、「現」ＳＶＯＬ２０１Ｂのペア状態を「Ｐａｉｒ」状態から「Ｓｐｌｉｔ」状態に変更する（ステップ７０１）。これにより、「現」ＳＶＯＬ２０１Ｂは、現在時刻のスナップショットボリュームとなる。例えば、「現」ＳＶＯＬ２０１Ｂのデータは、１０時０分のスナップショットである。
【００９５】
エッジバックアップ処理プログラム３０５は、ペア管理テーブル３０２のペア状態欄３２２において、当該スナップショットペアの値を更新する。具体的には、エッジバックアップ処理プログラム３０５は、ボリューム構成テーブル３０１を参照して、ペア＃欄３１５から「現」ＳＶＯＬ２０１Ｂのペア＃を取得し、ペア状態欄３２２において当該ペア＃のフィールドを更新する。
【００９６】
次に、エッジバックアップ処理プログラム３０５は、「旧」ＳＶＯＬ２０１Ａから、退避済みビットマップの１ビットに対応する未選択の領域（アドレス領域）を選択する（ステップ７０２）。なお、１ビットに対応する領域の一部領域を単位として選択してもよい。
【００９７】
エッジバックアップ処理プログラム３０５は、選択した領域が、退避済みかどうかをチェックする（ステップ７０３）。具体的には、エッジバックアップ処理プログラム３０５は、ボリューム構成テーブル３０１を参照して、ペア＃欄３１５から「旧」ＳＶＯＬ２０１Ａのペア＃を取得する。
【００９８】
さらに、エッジバックアップ処理プログラム３０５は、ペア管理テーブル３０２を参照して、当該ペア＃の退避済みビットマップを、退避済みビットマップ欄３２３から取得する。エッジバックアップ処理プログラム３０５は、退避済みビットマップから未選択のビットを選択し、選択したビットが１であれば、対応する領域のデータが退避済みであると判定し、選択したビットが０であれば、対応する領域のデータが未退避であると判定する。
【００９９】
選択した領域のデータが退避済みの場合（ステップ７０３：ＹＥＳ）、当該領域は、「旧」ＳＶＯＬ２０１Ａにデータが退避された領域である。例えば、９時０分から１０時０分までにＰＶＯＬ２０２において更新された領域である。
【０１００】
エッジバックアップ処理プログラム３０５は、「現」ＳＶＯＬ２０１Ｂにおける選択したアドレス領域（ＬＢＡ領域）のデータと、「旧」ＳＶＯＬ２０１Ａにおける同一アドレス領域のデータとの、排他的論理和ＸＯＲを算出する。これにより、当該アドレス領域のＸＯＲ更新差分データが取得される（ステップ７０４）。例えば、１０時０分のスナップショットと９時００分のスナップショットとの間のＸＯＲ更新差分データが取得される。
【０１０１】
選択される「旧」ＳＶＯＬ２０１Ａのデータは退避済みデータであるため、プール２０８から取得される。「現」ＳＶＯＬ２０１ＢのデータにおいてＰＶＯＬ２０２と一致しているデータは、ＰＶＯＬ２０２から取得される。「現」ＳＶＯＬ２０１Ｂに退避済みのデータは、プール２０８から取得される。
【０１０２】
次に、エッジバックアップ処理プログラム３０５は、生成したＸＯＲ更新差分データを、ＵＶＯＬ２０６にライトする（ステップ７０５）。ＵＶＯＬ２０６にライトされたデータは、ＵＶＯＬ２０６を介して、コアシステム（コアノード１０１Ｃ）に転送される。退避済みデータのＸＯＲ更新差分データのみを生成、転送することで、データ転送量及びシステムの処理負荷を低減する。なお、データ転送は、上記の単純なライトによる方法だけでなく、たとえば（特許文献１）に記載の技術や、その他一般的なリモートコピーで用いられる方法を使ってもよい。
【０１０３】
エッジバックアップ処理プログラム３０５は、ＰＶＯＬ２０２に対応する「旧」ＳＶＯＬ２０１Ａの全ての領域についてステップ７０２〜ステップ７０５を実行したか判定する（ステップ７０６）。「旧」ＳＶＯＬ２０１Ａの全ての領域についてステップ７０２〜ステップ７０５を実行した場合（ステップ７０６：ＹＥＳ）、エッジバックアップ処理プログラム３０５は、コアシステム（コアノード１０１Ｃ）に、全ライト済みを通知する（ステップ７０７）。
【０１０４】
この通知は、全てのＸＯＲ更新差分データがコアシステムのＢＶＯＬに格納されたことを示し、以降のＥＣ更新処理を実行可能とする。これにより、途中で回線が切れる、又は、エッジデシステムにおいて障害が発生しても、コアシステムにおいて、コンシステントなＸＯＲ更新差分データによるイレージャコードを生成できる。
【０１０５】
次に、エッジバックアップ処理プログラム３０５は、「旧」ＳＶＯＬ２０１Ａのスナップショットペア２０４Ａを、「Ｓｐｌｉｔ」状態から「Ｐａｉｒ」状態に変更する（ステップ７０８）。エッジバックアップ処理プログラム３０５は、ペア管理テーブル３０２のペア状態欄３２２において、当該スナップショットペアの値を更新する。これにより、「旧」ＳＶＯＬ２０１Ａの差分データ（退避されているデータ）は、リセットされ、「旧」ＳＶＯＬ２０１Ａは、ＰＶＯＬ２０２と同期している。
【０１０６】
エッジバックアップ処理プログラム３０５は、さらに、二つのＳＶＯＬの状態を入れ替える（ステップ７０９）。つまり、エッジバックアップ処理プログラム３０５は、ＳＶＯＬ２０１Ａの状態を「旧」から「現」に変更し、ＳＶＯＬ２０１Ｂの状態を「現」から「旧」に変更する。エッジバックアップ処理プログラム３０５は、ボリューム構成テーブル３０１の状態欄３１３の該当フィールドの値を変更する。
【０１０７】
以降、「現」ＳＶＯＬ２０１Ａのペア状態は「Ｐａｉｒ」状態に維持され、「旧」ＳＶＯＬ２０１Ｂのペア状態は、「Ｓｐｌｉｔ」状態に維持される。例えば、「旧」ＳＶＯＬ２０１Ｂにおいて１０時０分のスナップショットが維持される。エッジバックアップ処理（非同期転送）は、任意時刻に再実行可能である。
【０１０８】
本例は、コアシステムへのデータ転送時にＵＶＯＬ２０６を利用しており、ＳＶＯＬとＵＶＯＬ、さらに、ＵＶＯＬとＢＶＯＬのＬＢＡ空間が１：１である。つまり、ＸＯＲ更新差分データのＳＶＯＬにおけるアドレス領域は、ＵＶＯＬを介して、ＢＶＯＬにおけるアドレス領域と一致する。
【０１０９】
エッジノードは、ＸＯＲ更新差分の実データと共に、そのアドレス情報を含むメタデータを、コアシステムに転送してもよい。３以上のＳＶＯＬが存在する場合、例えば、一つの「現」ＳＶＯＬと、複数世代の「Ｓｐｌｉｔ」状態の「旧」ＳＶＯＬが存在する。複数世代の「Ｓｐｌｉｔ」状態のＳＶＯＬのうちの最新世代のＳＶＯＬと、「現」ＳＶＯＬとの間のＸＯＲ更新差分データが転送される。その後、「現」ＳＶＯＬが「旧」状態に変更され、最も古い世代の「旧」ＳＶＯＬが、「Ｐａｉｒ」状態かつ「現」状態に変更される。
【０１１０】
図８は、コアライト処理のフローチャート例を示す。本処理は、エッジシステムに対してＵＶＯＬとして接続されているＢＶＯＬに対する、コアシステムによるデータのライト処理である。ＢＶＯＬを、仮想ボリュームで構成することで、コアシステムにおける記憶領域の消費を低減できる。以下の説明において、ＢＶＯＬが仮想ボリュームであるとする。以下においては、図２の構成を参照する。
【０１１１】
コアＩ／Ｏ処理プログラム３０６は、ページマッピングテーブル３０３を参照し、ＢＶＯＬのアクセス先アドレス領域（仮想ＶＯＬページ）に対して、物理記憶領域（物理ページ）が未割り当てか判定する（ステップ８０１）。
【０１１２】
物理ページが未割り当ての場合（ステップ８０１：ＹＥＳ）、コアＩ／Ｏ処理プログラム３０６は、プール２１１に新たなデータを格納するための空き領域、つまり、割り当て可能な物理ページが存在するか確認する（ステップ８０２）。割り当て可能な物理ページが存在する場合（ステップ８０２：ＹＥＳ）、ページマッピングテーブル３０３を更新することで物理ページを割り当てる（ステップ８０３）。その後、コアＩ／Ｏ処理プログラム３０６は、ＢＶＯＬのアクセス先領域に、エッジシステムから受信した新データをライトする（ステップ８０４）。
【０１１３】
プール２１１の空き領域が枯渇し、プール２１１に新たなデータを格納するための空き領域が存在しない場合（ステップ８０２：ＮＯ）、コアＥＣ更新プログラム３０７は、コアＩ／Ｏ処理プログラム３０６からの要求に応答して、未実行のＥＣ更新処理を実行し、プール２１１における空き領域を生成する（ステップ８０５）。コアＩ／Ｏ処理プログラム３０６は、新たな空き領域の生成まで、エッジシステムにＸＯＲ更新差分データの転送の一時停止を指示する。
【０１１４】
図９は、コアＥＣ更新処理のフローチャート例を示す。本処理は、コアシステムがイレージャコードを更新する処理である。本処理は、図７で説明したエッジバックアップ処理が完了した後に実行される。つまり、コアシステムは、全ライト済み通知を受信したＢＶＯＬのデータが含まれるストライプのイレージャコードを更新する。
【０１１５】
以下の説明において、一つのストライプにおける複数のＢＶＯＬに対するエッジバックアップ処理が完了し、全ライト済み通知が受信済みである場合、それら複数のＢＶＯＬのＸＯＲ更新差分データを使用して、イレージャコードを更新する。
【０１１６】
ストライプにおけるＢＶＯＬへのエッジノードからの書き込みは同期していてもよく（各世代のスナップショットの時刻が共通）、同期していなくてもよい。コアシステムは、ストライプにおける規定数のＢＶＯＬの全ライト済み通知を受信するまで、イレージャコードの更新を待ってもよい。コアシステムは、エッジバックアップ処理が完了したＢＶＯＬ毎に、本処理を実行してもよい。つまり、ストライプにおける一つのデータ要素のＸＯＲ更新差分データのみを使用し、他のデータ要素をゼロデータとして、イレージャコードを更新してもよい。
【０１１７】
図９を参照して、コアＥＣ更新プログラム３０７は、全ライト済み通知を受領した後（ステップ９０１：ＹＥＳ）、全ライト済み通知を受けたＢＶＯＬの各領域について、以降のステップを実行する。なお、コアノード１０１Ｃは、同一ストライプに含まれるＰＶＯＬ、ＳＶＯＬ、ＢＶＯＬ及びＣＶＯＬの間の関係を管理する、不図示の管理情報を保持する。
【０１１８】
以下に説明においては、一つのストライプに含まれる複数のＢＶＯＬに対する全ライト済み通知を受領しているものとする。例えば、図２の例において、ストライプに属するＢＶＯＬ２０８Ａ〜２０８Ｄのうち、ＢＶＯＬ（Ｂ２）２０８Ｂ及びＢＶＯＬ２０８（Ｂ４）Ｄに対して、全ライト済み通知が受信されている。
【０１１９】
コアＥＣ更新プログラム３０７は、ＢＶＯＬのアドレス空間における未選択のアドレス領域を選択する（ステップ９０２）。コアＥＣ更新プログラム３０７は、ページマッピングテーブル３０３を参照して、対象ＢＶＯＬそれぞれにおいて、当該アドレス領域に物理記憶領域が割り当て済みか否か、判定する（ステップ９０３）。
【０１２０】
後述するように、本処理後にＢＶＯＬへの割り当て領域は開放されるため（ステップ９１０参照）、物理記憶領域が割り当てられるアドレス領域のみが、エッジシステムから転送されたＸＯＲ更新差分データを格納している。また、ＢＶＯＬによって、ＸＯＲ更新差分データを格納しているアドレス領域は異なる。
【０１２１】
いずれかのＢＶＯＬにおいて、当該アドレス領域に物理記憶領域が割り当て済みの場合（ステップ９０３：ＹＥＳ）、コアＥＣ更新プログラム３０７は、当該ストライプのイレージャコードを格納しているＣＶＯＬそれぞれにおいて、当該ストライプのイレージャコードを格納しているアドレス領域を排他ロックする（ステップ９０４）。これにより、当該アドレス領域への書き込みが禁止され、イレージャコードのコンシステンシを維持する。排他制御はコアシステム内で実行され、エッジシステムから独立しているため、ネットワークに依存せず高速である。
【０１２２】
次に、コアＥＣ更新プログラム３０７は、イレージャコードを更新する（ステップ９０５）。具体的には、コアＥＣ更新プログラム３０７は、当該アドレス領域に物理記憶領域が割り当て済みのＢＶＯＬそれぞれから、ＸＯＲ更新差分データを読み出す。他のＢＶＯＬのデータ要素は、ゼロデータである。
【０１２３】
さらに、コアＥＣ更新プログラム３０７は、当該アドレス領域に対応するイレージャコードを、ＣＶＯＬそれぞれから読み出す。コアＥＣ更新プログラム３０７は、読み出したＸＯＲ更新差分データを使用して、読み出したイレージャコードを更新し、ＣＶＯＬそれぞれに書き戻す。
【０１２４】
ＸＯＲ更新差分データによってイレージャコードを更新することによって、イレージャコードにおける当該ボリュームのスナップショットデータを、前世代のスナップショットデータから、当該世代のスナップショットデータに変更する。
【０１２５】
次に、コアＥＣ更新プログラム３０７は、ＣＶＯＬにおいて取得した排他ロックを解除する（ステップ９０６）。コアＥＣ更新プログラム３０７は、ＢＶＯＬのアドレス空間の全アドレス領域について、ステップ９０２〜９０６を実行したか判定する（ステップ９０７）。全てのアドレス領域についてステップ９０２〜９０６を実行されている場合（ステップ９０７：ＹＥＳ）、コアＥＣ更新プログラム３０７は、対象のＢＶＯＬ（対応するエッジ側のＰＶＯＬ）それぞれが、多世代バックアップの対象であるかを判定する（ステップ９０８）。
【０１２６】
ＢＶＯＬが多世代バックアップの対象である場合（ステップ９０８：ＹＥＳ）、コアＥＣ更新プログラム３０７は、当該ＢＶＯＬのスナップショット（静止化したイメージ）を作成する（ステップ９０９）。このように、順次受信された多世代のＸＯＲ更新差分データが、保存される。ＢＶＯＬが多世代バックアップの対象であるか否かの情報は、例えば、ボリューム構成テーブル３０１に保持されていてもよい。
【０１２７】
多世代バックアップを構成するスナップショットは、それぞれ、異なるアドレス領域のＸＯＲ更新差分データ要素の集合であり、復元時点を指定されたリストア時に使用される。当該スナップショット（のＸＯＲ更新差分データ）は、通常動作において使用されないため、テープなどのアーカイブメディアに圧縮してバックアップしてもよい。ＢＶＯＬが多世代バックアップの対象ではない場合（ステップ９０８：ＮＯ）、ステップ９０９はスキップされる。
【０１２８】
次に、コアＥＣ更新プログラム３０７は、ＢＶＯＬの全ページ、つまり、ＢＶＯＬに割り当てられている全物理記憶領域を、開放する（ステップ９１０）。コアＥＣ更新プログラム３０７は、ページマッピングテーブル３０３において当該ＢＶＯＬのデータを初期化する（未割り当て状態に戻す）ことによって、ＢＶＯＬの全ページを解放する。
【０１２９】
図１０は、リストア処理のフローチャート例を示す。本処理は、例えば、エッジノードにおいて発生した障害、又は、ネットワークにおいて発生した障害により、コアシステムがエッジノード又はそのボリュームにアクセス不能になった場合、コアシステムにより実行される。障害発生は、拠点管理テーブル３０９により示される。
【０１３０】
以下の説明においては、アクセス不能となったエッジノードにおける一つのＰＶＯＬを復元する。具体的には、当該ＰＶＯＬとスナップショットペアを構成するＳＶＯＬのデータ、つまり、ＰＶＯＬの特定時点のスナップショットを復元する。
【０１３１】
コアリストア処理プログラム３０８は、アクセス不能となったエッジノードのＰＶＯＬが含まれるストライプから、他のエッジノードのＰＶＯＬを選択する（Ｓ１００１）。選択するＰＶＯＬ（エッジノード）の数は、ストライプに含まれるデータ要素の数から、イレージャコードの数を引いた数である。
【０１３２】
コアリストア処理プログラム３０８は、選択したＰＶＯＬそれぞれとスナップショットペアを構成する「旧」ＳＶＯＬをマウントする（Ｓ１００２）。例えば、コアリストア処理プログラム３０８は、ＵＶＯＬのように、マッピング技術を使用して「旧」ＳＶＯＬマウントすることで、エッジノードの「旧」ＳＶＯＬをコア側から参照可能にする。マウントされた「旧」ＳＶＯＬのデータは、データ復元のための、復元元データである。
【０１３３】
コアリストア処理プログラム３０８は、復元対象の「旧」ＳＶＯＬ（ＰＶＯＬ）のアドレス空間における未選択のアドレス領域を選択する（ステップ１００３）。コアリストア処理プログラム３０８は、マウントした復元元の「旧」ＳＶＯＬそれぞれから、選択したアドレス領域のデータ（データ要素）を読み出す（ステップ１００４）。
【０１３４】
コアリストア処理プログラム３０８は、当該ストライプのイレージャコードを格納しているＣＶＯＬの領域を、排他ロックする（ステップ１００５）。ＢＶＯＬのデータ要素が、イレージャコードにすでに反映されている場合、コアリストア処理プログラム３０８は、当該ＢＶＯＬのデータ要素と、対応する「旧」ＳＶＯＬのデータ要素と、の排他的論理和を算出する（ステップ１００６）。
【０１３５】
ＢＶＯＬのデータ要素が、イレージャコードにすでに反映されていることは、対応するＰＶＯＬのイレージャコードが更新中であり、当該アドレス領域の「現」ＳＶＯＬと「旧」ＳＶＯＬのＸＯＲ更新差分データにより、既にイレージャコードが更新されていることを意味する。
【０１３６】
したがって、コアリストア処理プログラム３０８は、ＢＶＯＬのデータ要素と「旧」ＳＶＯＬのデータ要素との排他的論理和を算出ことで、「現」ＳＶＯＬのデータ要素を生成する。算出された「現」ＳＶＯＬのデータ要素が、復元対象のＳＶＯＬを復元するための、復元元データ要素である。このように、復元元データ要素は、それぞれ、「旧」ＳＶＯＬのデータ要素又は「現」ＳＶＯＬのデータ要素である。
【０１３７】
コアリストア処理プログラム３０８は、イレージャコードと復元元データ要素から、データを復元する（ステップ１００７）。具体的には、コアリストア処理プログラム３０８は、ＣＶＯＬから対応するイレージャコードを読み出す。コアリストア処理プログラム３０８は、読み出したイレージャコードと、復元元データ要素とから、所定のアルゴリズム、例えば、リードソロモン符号を利用して、データを復元する。その後、コアリストア処理プログラム３０８は、ＣＶＯＬの排他ロックを解除する（ステップ１００６）。
【０１３８】
コアリストア処理プログラム３０８は、不図示の管理情報を参照し、復元対象のＳＶＯＬが多世代バックアップの対象か否かを判定する（ステップ１００７）。当該管理情報は、ボリューム構成テーブル３０１に含まれていてもよい。
【０１３９】
復元対象のＳＶＯＬが多世代バックアップの対象であれば（ステップ１００７：ＹＥＳ）、多世代バックアップのＸＯＲ更新差分データのスナップショットを読み出し、予め指定されている又はユーザに指定された世代までのＸＯＲ更新差分データを生成する（ステップ１０１０）。
【０１４０】
コアリストア処理プログラム３０８は、復元データと、生成した指定世代までのＸＯＲ更新差分データの排他的論理和を順次計算し、指定世代データを生成する（ステップ１０１１）。これにより、複数世代のデータ復元可能である。復元対象のＳＶＯＬが多世代バックアップの対象ではない場合（ステップ１００７：ＮＯ）、ステップ１０１０、１０１１はスキップされる。
【０１４１】
コアリストア処理プログラム３０８は、復元対象ボリュームの全アドレス領域について復元を実行したかを判定する（ステップ１０１２）。判定結果がＮＯの場合、コアリストア処理プログラム３０８は、ステップ１００３に戻る。判定結果がＹＥＳの場合、コアリストア処理プログラム３０８は、マウントしていたエッジノードの「旧」ＳＶＯＬをアンマウントし（ステップ１００９）、本処理を終了する。本処理により、コアシステムにおいてエッジノードのボリュームを適切に復元できる。
【０１４２】
本実施形態のデータ保護及び配置技術により、バックアップ側のデータセンタ（コアデータセンタ）が必要とする記憶容量を大幅に低減でき、システム構築にかかるストレージコストを低減できる。上記処理にプリフェッチを組み合わせることにより効率的なデータアクセスを実現してもよい。
＜実施形態２＞
【０１４３】
図１１は、実施形態２に係る、計算機システムの論理構成例を示す。本計算機システムは、エッジシステムにおいてドメインを有する。図１１において、エッジシステムにおける複数のドメインのうち、二つのドメイン１１０１Ａ、１１０１Ｂが示されている。例えば、一つのドメイン内の計算機ノードは、一つのローカルネットワーク内の計算機ノードである。
【０１４４】
本実施形態は、複数の保護レイヤを有する。具体的には、コアノード１０１Ｃは、それぞれ保護レイヤに対応する２種類のストライプを生成する。第１保護レイヤのストライプは、一つのドメイン内の計算機ノードのデータ要素と、それらのイレージャコードとからなる。第２保護レイヤのストライプは、異なるドメイン内の計算機ノードのデータ要素と、それらのイレージャコードとからなる。各データ要素は、これら二つの保護レイヤのストライプに含まれる。２以上のレイヤを設定することもできる。
【０１４５】
図１１において、ストライプ１１０２は、同一ドメインのデータ要素及びそれらのイレージャコードからなる第１保護レイヤのストライプである。ストライプ１１０３は、異なるドメインのデータ要素及びそれらのイレージャコードからなる第２保護レイヤのストライプである。データ要素Ｄ２は、ストライプ１１０２と１１０３の双方に含まれる。２種類のストライプのイレージャコードは、それぞれ異なるＣＶＯＬに格納される。
【０１４６】
上記のようにドメイン内のストライプ１１０２とドメイン間のストライプ１１０３を持つことにより、１のデータを２以上の手段で保護できシステムの可用性を向上することができる。また、エッジノードの故障時にドメイン内のイレージャコードから復元することができるため、ドメイン間のネットワーク転送量を削減することができ、効率的なデータ復元を実現できる。また、ローカルネットワーク上の処理装置で復元し、結果をコアシステムに送信することで、コアシステムの帯域効率を向上させてもよい。
＜実施形態３＞
【０１４７】
図１２は、実施形態３に係る、計算機システムにおける論理構成例を示す。図１０を参照して説明したリストア処理を、分散ＲＡＩＤ技術と組み合わせることで、より効率的なリストア処理を実現できる。分散ＲＡＩＤは、ストライプを構成する要素数（データ要素及びイレージャコードの総数）よりも多くの計算機ノードにストライプを分散させる。図１２において、同一種類の一部の要素に対してのみ、参照符号が示されている。
【０１４８】
図１２が示す例は、九つのエッジノード１２０１と、一つのコアノード１２１０を含む。各エッジノード１２０１は、ＵＶＯＬ１２０３を保持している。実施形態１で説明したように、各エッジノード１２０１は、ＵＶＯＬ１２０３に対応する不図示のＰＶＯＬ及び二つのＳＶＯＬを保持している。コアノード１２１０は、ＵＶＯＬ１２０３それぞれにマッピングされているＢＶＯＬ１２１３を保持している。
【０１４９】
実施形態１で説明したように、コアノード１２１０は、九つのエッジノード１２０１のバックアップデータとして、イレージャコードを保持する。図１２の例において、ストライプ１２１１は、四つのデータ要素と、三つのイレージャコードから構成されている。コアノード１２１０は、九つのエッジノード１２０１のうちの四つのエッジノード１２０１から受信したデータを使用して、一つのストライプのイレージャコードを生成する。
【０１５０】
本実施形態は、分散ＲＡＩＤ技術の利用により、ストライプを構成するエッジノードの複数の組み合わせを定義している。以下においてこの組み合わせを、ストライプタイプと呼ぶ。ストライプタイプは、サイクル＃とエッジノードのエッジ＃の組み合わせにより決定される。サイクル＃は、ＢＶＯＬのアドレス（ＬＢＡ）を規定のサイクル数で割った剰余である。したがって、アドレス領域は、繰り返される周期領域で構成され、各周期領域の連続する領域（アドレス）に連続するサイクル＃が与えられる。
【０１５１】
ストライプタイプマッピングテーブル１２１７は、サイクル＃とエッジ＃をインデックスとする、ストライプタイプを定義する。つまり、ストライプタイプマッピングテーブル１２１７は、サイクル＃及びエッジ＃の組と、ストライプタイプと、の間の対応関係を示す。
【０１５２】
図１２の例において、九つのストライプタイプＡ〜Ｉが定義されている。各ストライプタイプは、サイクル＃とエッジ＃の複数の組に関連付けられており、図１２の例において、四つの組に関連付けられている。関連付けられている全ての組のサイクル＃とエッジ＃は異なる。各サイクル＃と全エッジ＃それぞれの組み合わせは、異なるストライプタイプを示す。なお、ストライプタイプは、本例に限定されず、任意の予め定められた規則に従って決定することができる。
【０１５３】
例えば、コアノード１２１０は、周期領域毎に、全ライト済みのＢＶＯＬからデータを読み出し、ストライプタイプマッピングテーブル１２１７に従って、データ要素それぞれのアドレスタイプを決定する。コアノード１２１０は、同一アドレスタイプのデータ要素を同一ストライプに含め、イレージャコードを更新する。
【０１５４】
例えば、図１２の例において、ＢＶＯＬＢ２と、ＢＶＯＬＢ３が全ライト済みであるとする。コアノード１２１０は、ＢＶＯＬＢ２におけるストライプタイプＡのデータ要素と、ＢＶＯＬＢ３におけるストライプタイプＡのデータ要素を使用して、イレージャコードを更新する。
【０１５５】
以上のように、１つのエッジノードのデータが複数のストライプタイプに分類され、各ストライプタイプが異なるエッジノードの組のデータを含む。リストアのためのデータがより多くのストレージノードに分散しているため、リストアのための１エッジノードあたりのデータ参照量を削減することができる。これにより、エッジノードの負荷を低減、又は分散処理によるリストアの高速化を実現できる。図１２の例において、エッジノード当たりのデータ参照量は、通常のＲＡＩＤと比べて４分の１である。
【０１５６】
冗長度が２以上（イレージャコードが２以上）である場合に、優先度が高いデータを他のデータよりも先に復元することで、信頼性を向上させることができる。ストライプタイプマッピングテーブル１２１８は、エッジ＃０と１が故障したときの復元例を示す。
【０１５７】
ストライプタイプＩ及びＨのデータは、二つのエッジノードの双方で失われている。したがって、他のストライプタイプよりも先行して、ストライプタイプＩ及びＨのデータを高優先度で高速にリストアする。その後、ストライプタイプＡ、Ｂ、Ｅ、Ｇなどのデータを復元する。
【０１５８】
また、予測不能な障害ではないケース、例えば、計画的な停止や、障害の予兆を検出したケースにおいて、事前にリストア処理を実行しておくことで、信頼性を向上させることができる。
【０１５９】
上記複数の実施形態において説明したストレージ機能は、他のストレージ機能と組み合わせて効率化することができる。例えば、圧縮をエッジ側で実施することで、データの転送量を削減し、データ保管のためのストレージ容量を削減することができる。また、暗号化などをエッジ側で実施することで、セキュアにデータを転送し、かつセキュアにデータを保管することができる。
【０１６０】
なお、本発明は上記した実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施形態の構成の一部を他の実施形態の構成に置き換えることが可能であり、また、ある実施形態の構成に他の実施形態の構成を加えることも可能である。また、各実施形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０１６１】
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ＨＤＤ、ＳＳＤ等の記録装置、または、ＩＣカード、ＳＤカード等の記録媒体に置くことができる。
【０１６２】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
【図１】
2017081747.tif 000003
【図２】
2017081747.tif 000004
【図３Ａ】
2017081747.tif 000005
【図３Ｂ】
2017081747.tif 000006
【図４Ａ】
2017081747.tif 000007
【図４Ｂ】
2017081747.tif 000008
【図４Ｃ】
2017081747.tif 000009
【図４Ｄ】
2017081747.tif 000010
【図５】
2017081747.tif 000011
【図６】
2017081747.tif 000012
【図７】
2017081747.tif 000013
【図８】
2017081747.tif 000014
【図９】
2017081747.tif 000015
【図１０】
2017081747.tif 000016
【図１１】
2017081747.tif 000017
【図１２】
2017081747.tif 000018
【手続補正書】
【提出日】平成30年4月18日(2018.4.18)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００３０
【補正方法】変更
【補正の内容】
【００３０】
ＳＶＯＬ２０１Ａ、２０１Ｂは、それぞれ、「現」状態又は「旧」状態を持ち得る。ＳＶＯＬ２０１Ａ、２０１Ｂの一方が「現」状態であり、他方が「旧」状態である。図２において、ＳＶＯＬ２０１Ａは「旧」状態であり、ＳＶＯＬ２０１Ｂは「現」状態である。「旧」状態のＳＶＯＬ２０１Ａは、「現」状態のＳＶＯＬ２０１Ｂより前の世代のデータと関連づけられている。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００３８
【補正方法】変更
【補正の内容】
【００３８】
例えば、図２において、計算機ノード１０１ＡのＵＶＯＬ２０６のＸＯＲ更新差分データ（Ｄ２）２０７がコアノード１０１Ｃに転送され（２１０Ａ）、ＸＯＲ更新差分データ（Ｄ２）２０９ＡとしてＢＶＯＬ（Ｂ２）２０８Ｂに書き込まれる。同様に、計算機ノード１０１ＢのＵＶＯＬ２０６のＸＯＲ更新差分データ（Ｄ４）２０７がコアノード１０１Ｃに転送され（２１０Ｂ）、ＸＯＲ更新差分データ（Ｄ４）２０９ＢとしてＢＶＯＬ（Ｂ４）２０８Ｄに書き込まれる。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００５４
【補正方法】変更
【補正の内容】
【００５４】
エッジノードのＡｐｐ／ＶＭ２０３は、エッジノードのＰＶＯＬ２０２の実データをコアノード１０１Ｃに送信し、コアノード１０１Ｃは、実データから、ＸＯＲ更新差分を取得するためのスナップショット（ＳＶＯＬ２０１Ａ、２０１Ｂ）を、取得してもよい。エッジノードがスナップショットを取得することで負荷を分散することができる一方、コアノードがスナップショットを取得することでエッジノードの負荷を低減できる。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００８２
【補正方法】変更
【補正の内容】
【００８２】
その後、エッジＩ／Ｏ処理プログラム３０４は、ペア管理テーブル３０２において、当該スナップショットペアの退避済みビットマップに、当該データが退避済みとマークする（ステップ５０５）。具体的には、エッジＩ／Ｏ処理プログラム３０４は、ステップ５０３で読み出した退避済みビットマップにおいて、対応するビットの値を０から１に変更し、退避済みビットマップ欄３２３に書き込む。その後、エッジＩ／Ｏ処理プログラム３０４は、ステップ５０６に進む。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】０１１８
【補正方法】変更
【補正の内容】
【０１１８】
以下に説明においては、一つのストライプに含まれる複数のＢＶＯＬに対する全ライト済み通知を受領しているものとする。例えば、図２の例において、ストライプに属するＢＶＯＬ２０８Ａ〜２０８Ｄのうち、ＢＶＯＬ（Ｂ２）２０８Ｂ及びＢＶＯＬ（Ｂ４）２０８Ｄに対して、全ライト済み通知が受信されている。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】０１３７
【補正方法】変更
【補正の内容】
【０１３７】
コアリストア処理プログラム３０８は、イレージャコードと復元元データ要素から、データを復元する（ステップ１００７）。具体的には、コアリストア処理プログラム３０８は、ＣＶＯＬから対応するイレージャコードを読み出す。コアリストア処理プログラム３０８は、読み出したイレージャコードと、復元元データ要素とから、所定のアルゴリズム、例えば、リードソロモン符号を利用して、データを復元する。その後、コアリストア処理プログラム３０８は、ＣＶＯＬの排他ロックを解除する（ステップ１００８）。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】０１３８
【補正方法】変更
【補正の内容】
【０１３８】
コアリストア処理プログラム３０８は、不図示の管理情報を参照し、復元対象のＳＶＯＬが多世代バックアップの対象か否かを判定する（ステップ１００９）。当該管理情報は、ボリューム構成テーブル３０１に含まれていてもよい。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】０１３９
【補正方法】変更
【補正の内容】
【０１３９】
復元対象のＳＶＯＬが多世代バックアップの対象であれば（ステップ１００９：ＹＥＳ）、多世代バックアップのＸＯＲ更新差分データのスナップショットを読み出し、予め指定されている又はユーザに指定された世代までのＸＯＲ更新差分データを生成する（ステップ１０１０）。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】０１４０
【補正方法】変更
【補正の内容】
【０１４０】
コアリストア処理プログラム３０８は、復元データと、生成した指定世代までのＸＯＲ更新差分データの排他的論理和を順次計算し、指定世代データを生成する（ステップ１０１１）。これにより、複数世代のデータ復元可能である。復元対象のＳＶＯＬが多世代バックアップの対象ではない場合（ステップ１００９：ＮＯ）、ステップ１０１０、１０１１はスキップされる。
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】０１４１
【補正方法】変更
【補正の内容】
【０１４１】
コアリストア処理プログラム３０８は、復元対象ボリュームの全アドレス領域について復元を実行したかを判定する（ステップ１０１２）。判定結果がＮＯの場合、コアリストア処理プログラム３０８は、ステップ１００３に戻る。判定結果がＹＥＳの場合、コアリストア処理プログラム３０８は、マウントしていたエッジノードの「旧」ＳＶＯＬをアンマウントし（ステップ１０１３）、本処理を終了する。本処理により、コアシステムにおいてエッジノードのボリュームを適切に復元できる。
【国際調査報告】
2017081747.tif 000019
2017081747.tif 000020
2017081747.tif 000021