(57)【要約】【課題】  スナップショットを信頼性高く維持し得るスナップショット維持装置及び方法を提案する。【解決手段】  上位装置からのデータを読み書きする運用ボリュームのスナップショットの生成時点におけるイメージを維持するスナップショット維持装置及び方法において、接続された物理デバイス上に差分ボリューム及び障害時用ボリュームを設定し、運用ボリュームに対する上位装置からのデータの書き込みに応じて、スナップショットの生成時点の運用ボリュームと現在の運用ボリュームとの差分でなる差分データを差分ボリュームに順次退避させると共に、差分ボリュームに障害が発生したときには、差分データを障害時用ボリュームに退避させるようにした。【選択図】        図２７
2007087036.tif 000002
【特許請求の範囲】
【請求項１】
上位装置からのデータを読み書きする運用ボリュームのスナップショットの生成時点におけるイメージを維持するスナップショット維持装置において、
接続された物理デバイス上に差分ボリューム及び障害時用ボリュームを設定するボリューム設定部と、
前記運用ボリュームに対する前記上位装置からの前記データの書き込みに応じて、前記スナップショットの生成時点の前記運用ボリュームと現在の前記運用ボリュームとの差分でなる差分データを前記差分ボリュームに順次退避させると共に、前記差分ボリュームに障害が発生したときには、前記差分データを前記障害時用ボリュームに退避させるスナップショット管理部と
を備えることを特徴とするスナップショット維持装置。
【請求項２】
前記スナップショット管理部は、
前記差分ボリュームにおける前記差分データの管理情報でなる第１の差分データ管理情報及び前記障害時用ボリュームにおける前記差分データの管理情報でなる第２の差分データ管理情報を生成し、
前記第１及び第２の差分データ管理情報の整合性を保ちながら、前記障害時用ボリュームに退避された前記差分データを前記差分ボリュームに移行させる
ことを特徴とする請求項１に記載のスナップショット維持装置。
【請求項３】
前記スナップショット管理部は、
前記差分ボリュームの障害に関する平均的な修復時間に基づいて、当該差分ボリュームの障害の回復可能又は不可能を判断し、差分ボリュームの障害が回復不可能であると判断したときには新たな前記差分ボリュームを設定し、前記障害時用ボリュームに退避させた前記差分データを当該新たな差分ボリュームに移行させる
ことを特徴とする請求項２に記載のスナップショット維持装置。
【請求項４】
前記スナップショット管理部は、
前記第１及び第２の差分データ管理情報に基づいて、複数世代の前記スナップショットを管理する
ことを特徴とする請求項２に記載のスナップショット管理装置。
【請求項５】
前記第１及び第２の差分データ管理情報は、
前記運用ボリュームを構成する所定のブロック毎の前記差分データの退避の有無を管理するためのビット情報を含み、
前記スナップショット管理部は、
前記障害時用ボリュームに退避された前記差分データを前記元の差分ボリューム又は前記新たな差分ボリュームに移行させる前に、前記第２の差分データ管理情報の対応部分を前記第１の差分データ管理情報の対応位置にコピーする
ことを特徴とする請求項２に記載のスナップショット維持装置。
【請求項６】
前記スナップショット管理部は、
前記差分ボリュームに障害が発生した時点の前記スナップショットの前記ビット情報を記憶し、
前記障害時用ボリュームに退避された前記差分データを前記元の差分ボリューム又は前記新たな差分ボリュームに移行させる際には、当該ビット情報と、前記元の差分ボリューム又は前記新たな差分ボリュームの前記第１の差分データ管理情報とに基づいて、前記元の差分ボリュームの障害が回復したのか又は前記新たな差分ボリュームが生成されたのかを判断する
ことを特徴とする請求項２に記載のスナップショット維持装置。
【請求項７】
前記スナップショット管理部は、
障害の有無に関する前記差分ボリュームの状態を記憶し、
当該記憶した前記差分ボリュームの状態に基づいて、前記差分データを前記差分ボリューム及び前記障害時用ボリュームの対応する一方の退避させる
ことを特徴とする請求項１に記載のスナップショット維持装置。
【請求項８】
前記障害時用ボリュームは、
前記差分ボリュームよりも信頼性の高い物理デバイスが提供する記憶領域上に設定された
ことを特徴とする請求項１に記載のスナップショット維持装置。
【請求項９】
上位装置からのデータを読み書きする運用ボリュームのスナップショットの生成時点におけるイメージを維持するスナップショット維持方法において、
接続された物理デバイス上に差分ボリューム及び障害時用ボリュームを設定する第１のステップと、
前記運用ボリュームに対する前記上位装置からの前記データの書き込みに応じて、前記スナップショットの生成時点の前記運用ボリュームと現在の前記運用ボリュームとの差分でなる差分データを前記差分ボリュームに順次退避させると共に、前記差分ボリュームに障害が発生したときには、前記差分データを前記障害時用ボリュームに退避させる第２のステップと
を備えることを特徴とするスナップショット維持方法。
【請求項１０】
前記第２のステップでは、
前記差分ボリュームにおける前記差分データの管理情報でなる第１の差分データ管理情報及び前記障害時用ボリュームにおける前記差分データの管理情報でなる第２の差分データ管理情報を生成し、
元の前記差分ボリュームの障害が回復し又は新たな前記差分ボリュームが設定された後に、前記第１及び第２の差分データ管理情報の整合性を保ちながら、前記障害時用ボリュームに退避された前記差分データを前記元の差分ボリューム又は前記新たな差分ボリュームに移行する
ことを特徴とする請求項９に記載のスナップショット維持方法。
【請求項１１】
前記第２のステップでは、
前記差分ボリュームの障害に関する平均的な修復時間に基づいて、当該差分ボリュームの障害の回復可能又は不可能を判断し、
差分ボリュームの障害が回復不可能であると判断したときには、新たな前記差分ボリュームを設定し、
前記障害時用ボリュームに退避させた前記差分データを当該新たな差分ボリュームに移行させる
ことを特徴とする請求項１０に記載のスナップショット維持方法。
【請求項１２】
前記第２のステップでは、
前記第１及び第２の差分データ管理情報に基づいて、複数世代の前記スナップショットを管理する
ことを特徴とする請求項１０に記載のスナップショット管理方法。
【請求項１３】
前記第１及び第２の差分データ管理情報は、
前記運用ボリュームを構成する所定のブロック毎の前記差分データの退避の有無を管理するためのビット情報を含み、
前記第２のステップでは、
前記障害時用ボリュームに退避された前記差分データを前記元の差分ボリューム又は前記新たな差分ボリュームに移行する前に、前記第２の差分データ管理情報の対応部分を前記第１の差分データ管理情報の対応位置にコピーする
ことを特徴とする請求項１０に記載のスナップショット維持方法。
【請求項１４】
前記第２のステップでは、
前記差分ボリュームに障害が発生した時点の前記スナップショットの前記ビット情報を記憶し、
前記障害時用ボリュームに退避された前記差分データを前記元の差分ボリューム又は前記新たな差分ボリュームに移行する際には、当該ビット情報と、前記元の差分ボリューム又は前記新たな差分ボリュームの前記第１の差分データ管理情報とに基づいて、前記元の差分ボリュームの障害が回復したのか又は前記新たな差分ボリュームが生成されたのかを判断する
ことを特徴とする請求項１０に記載のスナップショット維持方法。
【請求項１５】
前記第２のステップでは、
障害の有無に関する前記差分ボリュームの状態を記憶し、
当該記憶した前記差分ボリュームの状態に基づいて、前記差分データを前記差分ボリューム及び前記障害時用ボリュームの対応する一方の退避させる
ことを特徴とする請求項９に記載のスナップショット維持方法。
【請求項１６】
前記障害時用ボリュームは、
前記差分ボリュームよりも信頼性の高い物理デバイスが提供する記憶領域上に設定された
ことを特徴とする請求項９に記載のスナップショット維持方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スナップショット維持装置及び方法に関し、例えばディスクアレイ装置に適用して好適なものである。
【背景技術】
【０００２】
従来、ＮＡＳ（Network Attached Storage）サーバやディスクアレイ装置の機能の１つとして、スナップショット生成指示を受けた時点における指定された運用ボリューム（ユーザがデータを読み書きする論理ボリューム）のイメージを保持する、いわゆるスナップショット機能がある。スナップショット機能は、人為的なミスによりデータが消失してしまったときや、所望時点におけるファイルシステムの状態を復元したいときなどに、かかるスナップショットの生成時点における運用ボリュームを復元するために用いられる。
【０００３】
かかるスナップショット機能により保持される運用ボリュームのイメージ（仮想ボリュームとも呼ばれる）は、スナップショット生成指示を受けた時点における運用ボリューム全体のデータではなく、現在の運用ボリュームのデータと、スナップショットの生成指示を受けた時点における運用ボリューム及び現在の運用ボリューム間の差分である差分データとから構成される。そしてこれらの差分ボリュームと現在の運用ボリュームとに基づいて、かかるスナップショット生成指示が与えられた時点における運用ボリュームの状態が復元される。従って、スナップショット機能によれば、運用ボリューム全体をそのまま記憶する場合に比べて、より小さい記憶容量でスナップショット生成指示された時点の運用ボリュームのイメージを維持できるという利点がある。
【０００４】
また、近年では、複数世代のスナップショットを維持する方法も提案されている（特許文献１参照）。例えば、下記特許文献１では、運用ボリュームの各ブロックと、各世代のスナップショットの差分データが格納された差分ボリュームのブロックとを対応付けたスナップショット管理テーブルを用いて、複数世代のスナップショットを管理することが提案されている。
【特許文献１】特開２００４−３４２０５０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところが、かかる特許文献１に開示された複数世代のスナップショット維持方法によると、差分ボリュームに障害が発生した場合に、それまでに取得した各世代のスナップショットを廃棄しなければシステムの継続運用を行い得ない問題があった。
【０００６】
しかしながら、差分ボリュームの障害には間欠的な障害や、容易に回復可能な障害がある。短時間の障害の場合でも、継続運用のために全ての世代のスナップショットを廃棄することは損失が大きい。従って、差分ボリュームに障害が発生した場合においても、スナップショットを維持できるような仕組みを構築できれば、ディスクアレイ装置の信頼性を向上させ得るものと考えられる。
【０００７】
本発明は以上の点を考慮してなされたもので、スナップショットを信頼性高く維持し得るスナップショット維持装置及び方法を提案しようとするものである。
【課題を解決するための手段】
【０００８】
かかる課題を解決するため本発明においては、上位装置からのデータを読み書きする運用ボリュームのスナップショットの生成時点におけるイメージを維持するスナップショット維持装置において、接続された物理デバイス上に差分ボリューム及び障害時用ボリュームを設定するボリューム設定部と、前記運用ボリュームに対する前記上位装置からの前記データの書き込みに応じて、前記スナップショットの生成時点の前記運用ボリュームと現在の前記運用ボリュームとの差分でなる差分データを前記差分ボリュームに順次退避させると共に、前記差分ボリュームに障害が発生したときには、前記差分データを前記障害時用ボリュームに退避させるスナップショット管理部とを設けるようにした。
【０００９】
この結果このスナップショット維持装置では、差分ボリュームに障害が発生した場合においても、当該障害の発生時から回復までの期間の差分データを障害時用ボリュームに保持することができ、従って、スナップショットを維持しながら、システムを継続運用することができる。
【００１０】
また本発明においては、上位装置からのデータを読み書きする運用ボリュームのスナップショットの生成時点におけるイメージを維持するスナップショット維持方法において、接続された物理デバイス上に差分ボリューム及び障害時用ボリュームを設定する第１のステップと、前記運用ボリュームに対する前記上位装置からの前記データの書き込みに応じて、前記スナップショットの生成時点の前記運用ボリュームと現在の前記運用ボリュームとの差分でなる差分データを前記差分ボリュームに順次退避させると共に、前記差分ボリュームに障害が発生したときには、前記差分データを前記障害時用ボリュームに退避させる第２のステップとを備えることを特徴とする。
【００１１】
この結果このスナップショット維持方法によれば、差分ボリュームに障害が発生した場合においても、当該障害の発生時から回復までの期間の差分データを障害時用ボリュームに保持することができ、従って、スナップショットを維持しながら、システムを継続運用することができる。
【発明の効果】
【００１２】
本発明によれば、スナップショットを信頼性高く維持し得るスナップショット維持装置及び方法を実現できる。
【発明を実施するための最良の形態】
【００１３】
以下図面について、本発明の一実施の形態を詳述する。
【００１４】
（１）ＮＡＳサーバにおける基本的なスナップショット機能
図１は、基本的なＮＡＳサーバ１の概略構成例を示すものである。かかるＮＡＳサーバ１は、ＮＡＳサーバ１全体の動作制御を司るＣＰＵ（Central Processing Unit）２と、メモリ３と、ストレージインタフェース４とを備えて構成される。
【００１５】
ストレージインタフェース４にはハードディスクドライブ等の図示しない記憶デバイスが接続され、その記憶デバイスが提供する記憶領域上に論理ボリュームＶＯＬが定義される。そして図示しない上位装置としてのホスト装置から送信される書込み対象のユーザデータは、上述のように定義された論理ボリュームＶＯＬのうちの運用ボリュームＰ−ＶＯＬとして定義された論理ボリュームＶＯＬに格納される。
【００１６】
メモリ３には、ブロック入出力プログラム５及びスナップショットプログラム６等の各種プログラムが格納される。そしてＣＰＵ２は、かかるブロック入出力プログラム５に従って、ホスト装置及び運用ボリュームＰ−ＶＯＬ間のデータの入出力を制御する。またＣＰＵ２は、スナップショットプログラム６に従って、運用ボリュームＰ−ＶＯＬに対する差分ボリュームＤ−ＶＯＬを定義し、スナップショットの生成時に得られる差分データを差分ボリュームＤ−ＶＯＬに退避させる一方、かかる差分ボリュームＤ−ＶＯＬに格納された差分データと、運用ボリュームに格納されているユーザデータとを用いて複数世代のスナップショット（仮想ボリュームＶ−ＶＯＬ１，Ｖ−ＶＯＬ２，……）を生成する。
【００１７】
次に、かかるＮＡＳサーバ１における基本的なスナップショット機能について具体的に説明する。図２は、ＣＰＵ２がスナップショットプログラム６に従ってメモリ３上に生成する、複数世代のスナップショットを管理するためのスナップショット管理テーブル１０を示している。この図２の例では、説明を分かり易くするため、運用ボリュームＰ−ＶＯＬの記憶領域が８個のブロック１１から構成され、差分ボリュームＤ−ＶＯＬの記憶領域が無限個のブロック１２から構成されるものとしている。また生成可能なスナップショットの世代を４世代としている。
【００１８】
この図２に示すように、スナップショット管理テーブル１０には、運用ボリュームＰ−ＶＯＬの各ブロック１１にそれぞれ対応させて、ブロックアドレス欄１３、コピーオンライトビットマップ欄（以下、ＣｏＷビットマップ欄と呼ぶ）１４及び複数の退避先ブロックアドレス欄１５が設けられている。
【００１９】
各ブロックアドレス欄１３には、それぞれ運用ボリュームＰ−ＶＯＬの対応するブロック１１のブロックアドレス（「０」〜「７」）が格納される。また各ＣｏＷビットマップ欄１４には、それぞれ生成可能なスナップショットの世代数と同じビット数のビット列（以下、これをＣｏＷビットマップと呼ぶ）が格納される。このＣｏＷビットマップの各ビットは、左側から順に第１〜第４世代の各スナップショットとそれぞれ対応し、スナップショットが生成されていない初期時にはすべて「０」に設定される。
【００２０】
一方、退避先ブロックアドレス欄１５は、運用ボリュームＰ−ＶＯＬの１つのブロック１１につき４つずつ設けられている。これら４つの退避先ブロックアドレス欄６２は、それぞれ第１〜第４世代のスナップショットと対応付けられている。図２において「V-VOL １」〜「V-VOL ４」は、それぞれ第１〜第４世代のスナップショットと対応付けられている。
【００２１】
各退避先ブロックアドレス欄６２には、それぞれ運用ボリュームＰ−ＶＯＬ上の対応するブロック１１（対応するブロックアドレス欄１３に格納されたブロックアドレスのブロック１１）のそのナップショット世代の差分データを退避させた差分ボリュームＤ−ＶＯＬ上のブロックのブロックアドレスが格納される。ただし、運用ボリュームＰ−ＶＯＬ上の対応するブロック１１のそのスナップショット世代の差分データが未だ退避されていない、つまりそのスナップショット世代においてそのブロック１１にユーザデータの書き込みが未だ行われていない状態のときには、対応する退避先のブロックアドレスがないことを表す「なし」のコードが格納される。
【００２２】
そしてＣＰＵ２は、スナップショット管理テーブル１０が図２に示す初期状態時、ホスト装置から第１世代のスナップショットの生成指示が与えられると、図３に示すように、まずスナップショット管理テーブル１０の各ＣｏＷビットマップ欄１４にそれぞれ格納されたすべてのＣｏＷビットマップについて、第１世代のスナップショットと対応付けられている左端のビットを「１」に更新する。このようにＣｏＷビットマップのビットが「１」の場合、これは運用ボリュームＰ−ＶＯＬにおける対応するブロック１１に対してユーザデータの書き込みが行われた場合に、その書き込みが行われる直前のそのブロック１１内のデータを差分データとして差分ボリュームＤ−ＶＯＬに退避すべきことを意味している。そしてＣＰＵ２は、この後、運用ボリュームＰ−ＶＯＬに対するユーザデータの書込み要求がホスト装置から与えられるのを待つ。
【００２３】
なお、このときの運用ボリュームＰ−ＶＯＬ及び差分ボリュームＤ−ＶＯＬの状態を図４に示す。ここでは、運用ボリュームＰ−ＶＯＬのブロックアドレスが「１」，「３」〜「５」及び「７」の各ブロック１１にユーザデータが書き込まれているものとする。またホスト装置からＮＡＳサーバ１にスナップショットの生成指示が与えられた直後では、運用ボリュームＰ−ＶＯＬのいずれのブロック１１に対してもユーザデータの書き込みが行われていないため、差分ボリュームＤ−ＶＯＬには差分データが未だ書き込まれていないものとする。
【００２４】
この後、例えば図５に示すように、運用ボリュームＰ−ＶＯＬ上のブロックアドレスが「４」及び「５」の各ブロック１１に対するユーザデータの書込み要求がホスト装置から与えられると、ＣＰＵ２は、スナップショットプログラム６（図１）に従って、まずスナップショット管理テーブル１０上の対応するＣｏＷビットマップの対応するビットの値を確認する。具体的には、ＣＰＵ２は、スナップショット管理テーブル１０におけるブロックアドレスが「４」又は「５」の各ブロック１１とそれぞれ対応付けられた各ＣｏＷビットマップのうち、第１世代のスナップショットと対応付けられた左端のビットの値を確認することとなる。
【００２５】
そしてＣＰＵ２は、これらのビットの値が「１」であることを確認すると、図６に示すように、まず、運用ボリュームＰ−ＶＯＬ上のブロックアドレスが「４」又は「５」の各ブロック１１にそれぞれ格納されていたユーザデータを、それぞれ差分データとして、差分ボリュームＤ−ＶＯＬの空いているブロック１２（図６の例ではブロックアドレスが「０」又は「１」のブロック１２）に退避させる。
【００２６】
またＣＰＵ２は、この後図７に示すように、スナップショット管理テーブル１０における対応する各ＣｏＷビットマップ欄（図７において着色された各ＣｏＷビットマップ欄）１４にそれぞれ格納された各ＣｏＷビットマップの左端のビットを「０」に戻す一方、当該スナップショット管理テーブル１０の「V-VOL １」の行の対応する各退避先ブロックアドレス欄６２（図７において着色された各退避先ブロックアドレス欄６２）内に、それぞれ対応する差分データを退避させた差分ボリュームＤ−ＶＯＬ上のブロック１２のブロックアドレス（この例では「０」又は「１」）を格納する。そして、ＣＰＵ２は、このようなスナップショット管理テーブ１０の更新が終了すると、かかるユーザデータを運用ボリュームＰ−ＶＯＬに書き込ませる。ユーザデータの書込み処理完了後の運用ボリュームＰ−ＶＯＬ及び差分ボリュームＤ−ＶＯＬの状態を図８に示す。
【００２７】
またＣＰＵ２は、この後図９に示すように、運用ボリュームＰ−ＶＯＬのブロックアドレスが「３」〜「５」の各ブロック１１に対するユーザデータの書き込み要求がホスト装置から与えられると、スナップショット管理テーブル１０を参照して、これらブロック１１とそれぞれ対応付けられた各ＣｏＷビットマップにおける現在のスナップショット世代と対応する左端のビットの値を確認する。このときブロックアドレスが「４」又は「５」の各ブロック１１と対応付けられたＣｏＷビットマップの左端のビットは既に「０」にクリアされている（「０」に戻されていこと）ため、差分データを退避すべき運用ボリュームＰ−ＶＯＬ上のブロック１１は、ブロックアドレスが「３」のブロック１１だけであることが分かる。
【００２８】
そこで、このときＣＰＵ２は、図１０に示すように、かかる運用ボリュームＰ−ＶＯＬ上のブロックアドレスが「３」のブロック１１に格納されていたユーザデータを差分データとして、差分ボリュームＤ−ＶＯＬ上の空きブロック１２（この図１０の例ではブロックアドレスが「２」のブロック１２）に退避させる。またＣＰＵ２は、この後図１１に示すように、スナップショット管理テーブル１０における「V-VOL １」の行の対応する各退避先ブロックアドレス欄１５（図１１において着色された退避先ブロックアドレス欄１５）内に、かかる差分データを退避させた差分ボリュームＤ−ＶＯＬ上のブロック１２のブロックアドレス（この例では「２」）を格納する。そして、ＣＰＵ２は、このようなスナップショット管理テーブル１０の更新が終了すると、かかるユーザデータを運用ボリュームＰ−ＶＯＬに書き込ませる。この場合におけるユーザデータの書込み完了後の運用ボリュームＰ−ＶＯＬ及び差分ボリュームＤ−ＶＯＬの状態を図１２に示す。
【００２９】
一方、ＣＰＵ２は、この後次の世代（第２世代）のスナップショットの生成指示がホスト装置から与えられると、図１３に示すように、まずスナップショット管理テーブル１０の各ＣｏＷビットマップ欄１４にそれぞれ格納された各ＣｏＷビットマップにおける、第２世代のスナップショットと対応付けられた左端から２番目のビットをそれぞれ「１」に変更する。
【００３０】
この後ＣＰＵ２は、図１４に示すように、運用ボリュームＰ−ＶＯＬのブロックアドレスが「２」又は「３」の各ブロック１１に対するユーザデータの書込み要求がホスト装置から与えられると、まず、これらブロック１１とそれぞれ対応するスナップショット管理テーブル１０上の各ＣｏＷビットマップにおける、第２世代のスナップショットと対応付けられた左端から２番目のビットの値を確認する。この場合、かかるビット値はいずれも「１」であるため、ＣＰＵ２は、図１５に示すように、これら運用ボリュームＰ−ＶＯＬのブロックアドレスが「２」又は「３」の各ブロック１１にそれぞれ格納されていたデータをそれぞれ差分データとして、差分ボリュームＤ−ＶＯＬの空いているブロック１２（図１５の例ではブロックアドレスが「３」又は「４」のブロック１２）に退避させる。
【００３１】
またＣＰＵ２は、この後図１６に示すように、スナップショット管理テーブル１０における対応する各ＣｏＷビットマップの左端から２番目のビットをクリアする一方、当該スナップショット管理テーブル１０における「V-VOL ２」の行の対応する各退避先ブロックアドレス欄１５（図１６において着色された各退避先ブロックアドレス欄１５）内に、それぞれ対応する差分データを退避させた差分ボリュームＤ−ＶＯＬ上のブロックのブロックアドレスを格納する。
【００３２】
この場合において、運用ボリュームＰ−ＶＯＬ上のブロックアドレスが「２」のブロック１１については、対応するＣｏＷビットマップの第１世代のスナップショットと対応付けられた左端のビットも「１」であり、第２世代のスナップショットの生成開始時点までデータの変更がなかった、つまり第１世代のスナップショット生成開始時点と第２世代のスナップショット生成開始時点とのデータ内容が同じであることが分かる。
【００３３】
そこで、このときＣＰＵ２は、運用ボリュームＰ−ＶＯＬのブロックアドレスが「２」のブロック１１と対応付けられたスナップショット管理テーブル１０上のＣｏＷビットマップにおけるスナップショットの第１世代のビットをクリアし、当該スナップショット管理テーブル１０における第１世代のスナップショットと対応付けられた退避先ブロックアドレス欄６２内に、スナップショットの第２世代と対応付けられた退避先ブロックアドレス欄６２に格納したブロックアドレスと同じブロックアドレスを格納する。
【００３４】
そして、ＣＰＵ２は、このようなスナップショット管理テーブル１０の更新が終了すると、かかるユーザデータを運用ボリュームＰ−ＶＯＬに書き込ませる。この場合におけるユーザデータの書込み完了後の運用ボリュームＰ−ＶＯＬ及び差分ボリュームＤ−ＶＯＬの状態を図１７に示す。
【００３５】
（１−２）スナップショットデータ読出し処理
次に、上述のようにして生成したスナップショットのデータに対する読出し要求がホスト装置から与えられた場合のＣＰＵ２の処理内容について説明する。このときの運用ボリュームＰ−ＶＯＬ及び差分ボリュームＤ−ＶＯＬは図１７の状態であり、スナップショット管理テーブル１０は図１６の状態であるものとする。
【００３６】
第１世代のスナップショットのデータの読出し処理時に使用するのは、スナップショット管理テーブル１０上のデータのうち、図１８において点線で囲った部分、つまり各ブロックアドレス欄１３内及び第１世代のスナップショットと対応する「V-VOL １」の行の各退避先ブロックアドレス欄１５内のデータである。
【００３７】
実際上、ＣＰＵ２は、図１９に示すように、第１世代のスナップショットの各ブロック１６について、スナップショット管理テーブル１０上のそのブロック１６のブロックアドレスと対応付けられた退避先ブロックアドレス欄１５に「なし」が格納されていた場合には、運用ボリュームＰ−ＶＯＬの同じブロックアドレスのブロック１１に格納されているデータを当該第１世代のスナップショットの対応するブロック１６にマップし、かかる退避先ブロックアドレス欄６２にブロックアドレスが格納されている場合には、差分ボリュームＤ−ＶＯＬ上のそのブロックアドレスのブロック１２に格納されているデータを当該第１世代のスナップショットの対応するブロック１６にマップする。
【００３８】
このようなマッピング処理により、図２０に示すような第１世代のスナップショットの生成指示がホスト装置からＮＡＳサーバ１に与えられた瞬間の運用ボリュームＰ−ＶＯＬのイメージを保持してなる第１世代のスナップショットを生成することができる。
【００３９】
一方、第２世代のスナップショットのデータの読出し処理時に使用するのは、スナップショット管理テーブル１０上の各種データのうち、図２１において点線で囲った部分、つまり各ブロックアドレス欄１３及び第２世代のスナップショットと対応する「V-VOL ２」の行の各退避先ブロックアドレス欄６２のデータである。
【００４０】
実際上、ＣＰＵ２は、図２２に示すように、第２世代のスナップショットの各ブロック１７について、第１世代のスナップショットのデータの読出し処理と同様に、運用ボリュームＰ−ＶＯＬ上の対応するブロック１１に格納されたデータ又は差分ボリュームＤ−ＶＯＬ上の対応するブロック１２に格納されたデータをマップする。これにより、図２３に示すような第２世代のスナップショットを生成した瞬間の運用ボリュームＰ−ＶＯＬのイメージを保持した第２世代のスナップショットを生成することができる。
【００４１】
（１−３）基本的なスナップショット機能による問題点及び本実施の形態によるスナップショット機能の概要
ところで、これまで説明したスナップショット機能が搭載されたＮＡＳサーバ１（図１）において、スナップショット機能の実行中に差分ボリュームＤ−ＶＯＬに障害が発生した場合、スナップショット機能の運用を停止して差分ボリュームＤ−ＶＯＬの回復を待つか、又は差分ボリュームＤ−ＶＯＬとの関係を削除して運用を継続するしかなかった。
【００４２】
この場合において、ＮＡＳサーバ１の無停止運転を行う場合には、ＮＡＳサーバ１の運用形態として後者の方法しか選択肢がないが、この方法によると、それまでに生成した全ての世代のスナップショットを破棄することとなる。これは、図２４に示すように、差分ボリュームＤ−ＶＯＬに障害が発生してから回復するまでの間、差分データを退避する処理を行えない時間が存在する場合、運用ボリュームＰ−ＶＯＬへの書き込みが行えないためである。仮に、この間にユーザデータの書き込みを行うと、すべてのステップショットについてデータの不整合が発生する可能性があるからである。
【００４３】
例えば図１５の場合において、差分データの退避を行わずにユーザデータを運用ボリュームＰ−ＶＯＬに書き込んだ場合、図２５に示すように、差分ボリュームＤ−ＶＯＬの障害回復時に第２世代のスナップショット（V-Vol ２）だけでなく、第１世代のスナップショット（V-Vol １）のデータもスナップショットの生成開始時点における運用ボリュームＰ−ＶＯＬの内容と異なる不整合な状態となる。従って、かかるＮＡＳサーバ１において、差分ボリュームＤ−ＶＯＬに障害が発生した場合、運用を継続するためには、全てのスナップショットを破棄せざるを得ないという問題があった。
【００４４】
本願発明はかかる問題を解決するための手段として、例えば図１との対応部分に同一符号を付した図２６に示すように、運用ボリュームＰ−ＶＯＬ及び差分ボリュームＤ−ＶＯＬとは別に障害時用のボリューム（障害時用ボリューム）として再生用ボリュームＲ−ＶＯＬを設ける点を特徴の１つとしている。そして、図２７に示すように、差分ボリュームＤ−ＶＯＬに障害が発生してから回復するまでの間に運用ボリュームＰ−ＶＯＬに対するユーザデータの書き込みがあったときには、必要な差分データＤ−ＶＯＬを再生用ボリュームＲ−ＶＯＬに退避させ、差分ボリュームＤ−ＶＯＬが障害から回復した後に、スナップショット管理テーブル１０の整合性を確保しながら、かかる再生用ボリュームＲ−ＶＯＬに退避させた差分データを差分ボリュームＤ−ＶＯＬに移行するようにする。また、差分ボリュームＤ−ＶＯＬの障害が回復不可能な場合には、図２８に示すように、新たな差分ボリュームＤ−ＶＯＬを生成した後に、再生用ボリュームＲ−ＶＯＬに退避させた差分データを当該新たな差分ボリュームＤ−ＶＯＬに移行するようにする。
【００４５】
このようなスナップショット維持方法によれば、差分ボリュームＤ−ＶＯＬに障害が発生した場合においても、差分ボリュームＤ−ＶＯＬが回復可能なときには、スナップショット機能を停止させることも、またそれまでに生成したいずれの世代のスナップショットを破棄することもなく、それまでのスナップショットをすべて維持することができる。
【００４６】
以下、このような本実施の形態によるスナップショット機能について説明する。
【００４７】
（２）本実施の形態によるネットワークシステムの構成
（２−１）ネットワークシステムの構成
図２９は、上述の本実施の形態によるスナップショット維持方法を適用したディスクアレイ装置２３を構成要素とするネットワークシステム２０を示す。このネットワークシステム２０は、複数のホスト装置２１がネットワーク２２を介してディスクアレイ装置２３と接続されることにより構成されている。
【００４８】
ホスト装置２１は、ＣＰＵ（Central Processing Unit）やメモリ等の情報処理資源を備えたコンピュータ装置であり、例えばパーソナルコンピュータや、ワークステーション、メインフレームなどから構成される。ホスト装置２１は、キーボード、スイッチやポインティングデバイス、マイクロフォン等の情報入力装置（図示せず）と、モニタディスプレイやスピーカ等の情報出力装置（図示せず）とを備える。
【００４９】
ネットワーク２２は、例えばＳＡＮ（Storage Area Network）、ＬＡＮ（Local Area Network）、インターネット、公衆回線又は専用回線などから構成される。このネットワーク２２を介したホスト装置２１及びディスクアレイ装置２３間の通信は、例えばネットワーク２２がＳＡＮである場合にはファイバーチャネルプロトコルに従って行われ、ネットワーク２２がＬＡＮである場合にはＴＣＰ／ＩＰ（Transmission Control Protocol/Internet Protocol）プロトコルに従って行われる。
【００５０】
ディスクアレイ装置２３は、それぞれデータを記憶する複数のディスクユニット３０からなる記憶デバイス部３１と、記憶デバイス部３１に対するホスト装置２１からのユーザデータの入出力を制御するＲＡＩＤコントローラ３２と、ホスト装置２１との間のデータのやり取りを行う複数のＮＡＳ部３３とから構成される。
【００５１】
記憶デバイス部３１を構成する各ディスクユニット３０は、例えばＳＣＳＩ（Small Computer System Interface）ディスク等の高価なディスク、又はＳＡＴＡ（Serial AT Attachment）ディスクや光ディスク等の安価なディスクを内蔵して構成される。
【００５２】
これら各ディスクユニット３０は、ＲＡＩＤコントローラ３２によりＲＡＩＤ方式で運用される。１又は複数のディスクユニット３０により提供される物理的な記憶領域上に、１又は複数の論理ボリュームＶＯＬ（図２６）が設定される。そして、これら設定された論理ボリュームＶＯＬのうちの一部が運用ボリュームＰ−ＶＯＬ（図２６）として定義され、この運用ボリュームＰ−ＶＯＬ内にホスト装置２１から送信される書込み対象のユーザデータが所定大きさのブロック（以下、これを論理ブロックと呼ぶ）を単位として記憶される。
【００５３】
また論理ボリュームＶＯＬの他の一部は差分ボリュームＤ−ＶＯＬ（図２６）や再生用ボリュームＲ−ＶＯＬ（図２６）として定義され、これら差分ボリュームＤ−ＶＯＬや再生用ボリュームＲ−ＶＯＬ内に差分データが格納される。なお、再生用ボリュームＲ−ＶＯＬについては、信頼性の高いディスクユニット３０が提供する物理的な記憶領域上に設定された論理ボリュームＶＯＬを割り当てるようにする。ただし、信頼性の高いＳＣＳＩディスクやファイバーチャネルディスク等の外付けのディスク装置をディスクアレイ装置２３に接続し、この外付けのディスク装置が提供する物理的な記憶領域上に再生用ボリュームＲ−ＶＯＬを設定するようにしても良い。
【００５４】
各論理ボリュームＶＯＬには、それぞれ固有の識別子（ＬＵ：Logical Unit number）が付与される。本実施の形態の場合、ユーザデータの入出力は、この識別子と、各論理ブロックにそれぞれ付与されるその論理ブロックに固有の番号（ＬＢＡ：Logical Block Address）との組み合わせたものをアドレスとして、当該アドレスを指定して行われる。
【００５５】
ＲＡＩＤコントローラ３２は、ＣＰＵ、ＲＯＭ及びＲＡＭを備えたマイクロコンピュータ構成でなり、ＮＡＳ部３３及び記憶デバイス３１間のユーザデータの入出力を制御する。ＮＡＳ部３３は、ブレード構造を成し、着脱自在にディスクアレイ装置２３に装着される。このＮＡＳ部３３には、ホスト装置２１に対してファイルシステムを提供するファイルシステム機能や、後述の本実施の形態によるスナップショット機能などの各種機能が搭載されている。
【００５６】
上述した図２６は、このＮＡＳ部３３の概略構成を示したものである。図２６からも明らかなように、本実施の形態によるＮＡＳ部４３は、メモリ３に格納されたスナップショットプログラム４０の構成が異なる点を除いて、図１について上述したＮＡＳサーバ１と同様に構成されている。
【００５７】
スナップショットプログラ４０は、図３０に示すように、運用ボリューム読出し処理プログラム４１、運用ボリューム書込み処理プログラム４２、スナップショットデータ読出し処理プログラム４３、スナップショット生成処理プログラム４４、スナップショット削除処理プログラム４５、切替え処理プログラム４６及び差分データ回復処理プログラム４７と、スナップショット管理テーブル４８、障害時用スナップショット管理テーブル４９、ＣｏＷビットマップキャッシュ５０、状態フラグ５１及び最新スナップショット世代情報５２とから構成される。
【００５８】
このうち運用ボリューム読出し処理プログラム４１及び運用ボリューム書込みプログラム４２は、それぞれ運用ボリュームＰ−ＶＯＬからのユーザデータの読出し処理又は運用ボリュームＰ−ＶＯＬへのユーザデータの書込み処理を実行するためのプログラムである。これら運用ボリューム読出し処理プログラム４１及び運用ボリューム書込みプログラム４２によって、図２６におけるブロック入出力プログラム５が構成される。またスナップショットデータ読出し処理プログラム４３は、生成したスナップショットのデータの読出し処理を実行するためのプログラムである。
【００５９】
スナップショット生成処理プログラム４４及びスナップショット削除処理プログラム４５は、それぞれ新たな世代のスナップショットの生成処理又は既に生成されたスナップショットの削除処理を実行するためのプログラムである。さらに切替え処理プログラム４６は、差分データの退避先を差分ボリュームＤ−ＶＯＬから再生用ボリュームＲ−ＶＯＬに切り替える切替え処理を実行するためのプログラムである。差分データ回復処理プログラム４７は、差分ボリュームＤ−ＶＯＬが回復したときに、それまで再生用ボリュームＲ−ＶＯＬに退避させていた差分データを差分ボリュームＤ−ＶＯＬに移行する差分データ回復処理を実行するためのプログラムである。
【００６０】
一方、スナップショット管理テーブル４８は、図３１に示すように、図２について上述したスナップショット管理テーブル１０と同様の構成を有し、運用ボリュームＰ−ＶＯＬの各ブロック１１とそれぞれ対応させて、ブロックアドレス欄６０と、ＣｏＷビットマップ欄６１と、第１〜第４世代のスナップショットとそれぞれ対応付けられた複数の退避先ブロックアドレス欄６２とが設けられている。上述のように差分データが差分ボリュームＤ−ＶＯＬに退避されている場合における各世代のスナップショットのデータ管理は、このスナップショット管理テーブル４８を用いて行われる。
【００６１】
また障害時用スナップショット管理テーブル４９は、差分データが再生用ボリュームＲ−ＶＯＬに退避されている場合における各世代のスナップショットのデータ管理に用いられる。この障害時用スナップショット管理テーブル４９は、運用ボリュームＰ−ＶＯＬの各ブロック１１にそれぞれ対応させてブロックアドレス欄６４と、ＣｏＷビットマップ欄６５と、第１〜第３世代のスナップショットにそれぞれ対応させた複数のアドレス欄６７とが設けられていることに加えて、「障害中」のアドレス欄６６が設けられている点を除いてスナップショット管理テーブル４８と同様の構成を有する。
【００６２】
ただし、障害時用スナップショット管理テーブル４９では、差分ボリュームＤ−ＶＯＬに障害が発生した時点で最新のスナップショットの世代が「障害中」に該当し、これ以降に生成されたスナップショットは順番に第１世代（「V-VOL １」）、第２世代（「V-VOL ２」）、第３世代（「V-VOL ３」）に該当する。従って、例えば第２世代のスナップショット生成時に差分ボリュームＤ−ＶＯＬに障害が発生した場合において、その後第３世代のスナップショットを生成した場合においても、障害時用スナップショット管理テーブル４９上では、そのスナップショットは第１世代に該当することとなる。
【００６３】
ＣｏＷビットマップキャッシュ５０は、スナップショット管理テーブル４８上の各ＣｏＷビットマップ欄６１にそれぞれ格納された各ＣｏＷビットマップのうち、最新のスナップショットに対応するビットを、ブロックアドレス順に抜き出して並べたビット列を格納するためのキャッシュである。例えば図３２に示す状態の場合、最新のスナップショットは第２世代であるため、スナップショット管理テーブル４８上の各ＣｏＷビットマップの左端から２番目のビットが対応するブロックアドレスの順番に並べられてＣｏＷビットマップキャッシュ５０に格納される。
【００６４】
状態フラグ５１は、障害の有無に関する差分ボリュームＤ−ＶＯＬの状態を示すフラグであり、「正常」、「障害」又は「回復」のいずれかの値を保持する。また最新スナップショット世代情報５２は、差分ボリュームＤ−ＶＯＬに障害が発生した時点を基準とした最新のスナップショットの世代が保持される。例えば第２世代のスナップショットの生成時に差分ボリュームＤ−ＶＯＬに障害が発生した場合、「２」という値が最新スナップショット世代情報５２として保持される。
【００６５】
（２−２）ディスクアレイ装置における各種処理
次に、このディスクアレイ装置２３（図２９）において、運用ボリュームＰ−ＶＯＬへのユーザデータの書込み処理、運用ボリューＰ−ＶＯＬからのユーザデータの読出し処理、スナップショットデータの読出し処理、新たな世代のスナップショットの生成処理、生成したスナップショットの削除処理及び再生用ボリュームＲ−ＶＯＬに退避した差分データを、障害から回復した差分ボリュームＤ−ＶＯＬに書き込む差分データ回復処理を行う場合のＮＡＳ部３３（図２６）のＣＰＵ２（図２６）の処理内容について説明する。
【００６６】
（２−２−１）運用ボリュームへのユーザデータの書込み処理
まず運用ボリュームＰ−ＶＯＬへのユーザデータの書込み処理に関するＣＰＵ２の処理内容について説明する。
【００６７】
図３３は、上述のような構成を有するディスクアレイ装置２３に対して、ホスト装置２１（図２９）から運用ボリュームＰ−ＶＯＬへのユーザデータの書込み要求が与えられた場合におけるＮＡＳ部３３のＣＰＵ２の処理内容を示すフローチャートである。ＣＰＵ２は、この書込み処理をスナップショットプログラム４０の運用ボリューム書込み処理プログラム４０（図３１）に基づいて実行する。
【００６８】
すなわちＣＰＵ２は、かかる書込み要求を受信すると書込み処理を開始し（ＳＰ０）、まず、メモリ３（図２６）に格納されたスナップショットプログラム４０（図３０）のスナップショット管理テーブル４８（図３０）にアクセスし、書込み要求のあった運用ボリュームＰ−ＶＯＬ上のブロック１１と対応するＣｏＷビットマップの現在のスナップショットの世代と対応付けられたビットが「１」であるか否かを判定する（ＳＰ１）。
【００６９】
このステップＳＰ１において否定結果を得ることは（ＳＰ１：ＮＯ）、現在のスナップショットの世代についての差分データＤ−ＶＯＬの退避が既に行われていることを意味する。かくして、このときＣＰＵ２は、ステップＳＰ８に進む。
【００７０】
これに対して、ステップＳＰ１の判定において肯定結果を得ることは（ＳＰ１：ＹＥＳ）、現在のスナップショットの世代についての差分データの退避が未だ行われていないことを意味する。かくして、このときＣＰＵ２は、スナップショットプログラム４０内の状態フラグ５１を読み出し、これが「障害」であるか否かを判断する（ＳＰ２）。
【００７１】
そしてＣＰＵ２は、この判断において否定結果を得ると（ＳＰ２：ＮＯ）、差分データを差分ボリュームＤ−ＶＯＬに退避させ（ＳＰ３）、その後かかる差分ボリュームＤ−ＶＯＬへの差分データの書き込みが成功したか否かを判断する（ＳＰ４）。そしてＣＰＵ２は、この判断において肯定結果を得ると（ＳＰ４：ＹＥＳ）、これに応じてスナップショット管理テーブル４８を更新し（ＳＰ５）、さらにこの後このスナップショット管理テーブル４８の更新が成功したか否かを判断する（ＳＰ６）。
【００７２】
ＣＰＵ２は、この判断において肯定結果を得ると（ＳＰ６：ＹＥＳ）、更新後のスナップショット管理テーブル４８に従ってＣｏＷビットマップキャッシュ５０の内容を更新し（ＳＰ７）、この後かかる書込み要求と共にホスト装置２１から与えられた書込み対象のユーザデータを運用ボリュームＰ−ＶＯＬに書き込んだ後（ＳＰ８）、この書込み処理を終了する（ＳＰ１２）。
【００７３】
これに対してＣＰＵ２は、ステップＳＰ２における判断において肯定結果を得ると（ＳＰ２：ＹＥＳ）、差分データを再生用ボリュームＲ−ＶＯＬに退避させると共に（ＳＰ９）、これに応じて障害時用スナップショット管理テーブル４９を更新し（ＳＰ１０）、その後ステップＳＰ７に進む。そしてＣＰＵ２は、この後上述と同様にステップＳＰ７及びステップＳＰ８を処理し、この後この書込み処理を終了する（ＳＰ１２）。
【００７４】
一方、ＣＰＵ２は、ステップＳＰ４又はステップＳＰ６の判断において否定結果を得ると（ＳＰ４：ＮＯ，ＳＰ６：ＮＯ）、ステップＳＰ１１に進み、この後スナップショットプログラム４０の切替え処理プログラム４６（図３０）に基づき、図３４に示すフローチャートの手順に従って、ユーザデータの退避先を差分ボリュームＤ−ＶＯＬから再生用ボリュームＲ−ＶＯＬに切り替える。
【００７５】
すなわちＣＰＵ２は、図３３について上述した書込み処理のステップＳＰ１１に進むと、この切替え処理を開始し（ＳＰ２０）、まずスナップショットプログラム４０内の状態フラグ５１に「障害」を設定する（ＳＰ２１）。
【００７６】
次いで、ＣＰＵ２は、スナップショットプログラム４０のＣｏＷビットマップキャッシュ５０及び最新スナップショット世代情報５２をそれぞれ保存し（ＳＰ２２，ＳＰ２３）、その後ＣｏＷビットマップキャッシュ５０の内容を障害時用スナップショット管理テーブル４９に反映させる。具体的に、ＣＰＵ２は、図３５に示すように、障害時用スナップショット管理テーブル４９上の各ＣｏＷビットマップにおける現在のスナップショットの世代と対応するビットに、それぞれＣｏＷビットマップキャッシュ５０に格納されたビット列の対応するビットの値をコピーする（ＳＰ２４）。
【００７７】
続いてＣＰＵ２は、最新スナップショット世代情報５２として記憶している障害が発生したスナップショットの世代を、障害時用スナップショット管理テーブル４９における「障害中」のスナップショットの世代に変更し（ＳＰ２５）、この後この切替え処理を終了する（ＳＰ２６）。そしてＣＰＵ２は、この後図３３について上述した書込み処理のステップＳＰ１１からステップＳＰ１に戻る。
【００７８】
従って、差分ボリュームＤ−ＶＯＬに対する差分データの書き込みや、スナップショット管理テーブル４８の更新に失敗したときには（ＳＰ４：ＮＯ，ＳＰ６：ＮＯ）、差分データの退避先のボリュームが差分ボリュームＤ−ＶＯＬから再生用ボリュームＲ−ＶＯＬに切き替えられた後に、ステップＳＰ１−ＳＰ２−ＳＰ９−ＳＰ１０−ＳＰ７−ＳＰ８の手順で差分データを再生用ボリュームＲ−ＶＯＬに格納することとなる。
【００７９】
（２−２−２）運用ボリュームからのユーザデータの読出し処理
運用ボリュームＰ−ＶＯＬからのユーザデータの読み出し処理は、スナップショットプログラム４０の運用ボリューム読出し処理プログラム４２（図３０）に基づき、ＣＰＵ２の制御のもとに行われるが、この処理内容は従来と同様であるため説明を省略する。
【００８０】
（２−２−３）スナップショットデータの読出し処理
次に、生成したスナップショットのデータ読出し処理時におけるＣＰＵ２の処理内容について説明する。図３６は、スナップショットの世代及びブロックアドレス等が指定されて、その世代のスナップショットのそのブロックアドレスのデータを読み出すべき読出し要求（以下、これをスナップショットデータ読出し要求と呼ぶ）がホスト装置２１から与えられた場合のＣＰＵ２の処理内容を示すフローチャートである。ＣＰＵ２は、この処理をスナップショットプログラム４０のスナップショットデータ読出し処理プログラム４３（図３０）に基づいて実行する。
【００８１】
すなわちＣＰＵ２は、ナップショットの世代及びブロックアドレス等を指定したスナップショットデータ読出し要求が与えられると、このスナップショットデータ読出し処理を開始し（ＳＰ３０）、まず、スナップショットプログラム４０内の状態フラグ５１（図３０）を読み出し、これが「障害」又は「回復」のいずれかの状態を表しているか否かを判定する（ＳＰ３１）。
【００８２】
このステップＳＰ３１における判断において否定結果を得ることは（ＳＰ３１：ＮＯ）、現在、差分ボリュームＤ−ＶＯＬが運用されており、差分データが差分ボリュームＤ−ＶＯＬに退避されていることを意味する。かくして、このときＣＰＵ２は、スナップショット管理テーブル４８における指定されたスナップショットの世代及びブロックアドレスと対応付けられた退避先ブロックアドレス欄６２に格納されたブロックアドレスを読み出し（ＳＰ３２）、その後、かかるブロックアドレスの読み出しに成功したか否かを判断する（ＳＰ３３）。
【００８３】
ＣＰＵ２は、この判断において肯定結果を得ると（ＳＰ３３：ＹＥＳ）、その読み出したブロックアドレスが「なし」であるか否かを判断し（ＳＰ３４）。肯定結果を得ると（ＳＰ３４：ＹＥＳ）ステップ４３に進み、これに対して否定結果を得ると（ＳＰ３４：ＮＯ）、差分ボリュームＤ−ＶＯＬ上のステップＳＰ３２において読み出したブロックアドレスのブロック１２に格納されているユーザデータを読み出す（ＳＰ３５）。
【００８４】
またＣＰＵ２は、この後、かかる差分ボリュームＤ−ＶＯＬからのユーザデータの読み出しが成功したか否かを判断し（ＳＰ３６）、肯定結果を得ると（ＳＰ３６：ＹＥＳ）、このスナップショットデータ読出し処理を終了する（ＳＰ４４）。
【００８５】
これに対して、ＣＰＵ２は、ステップＳＰ３３における判断やステップＳＰ３６における判断において否定結果を得ると（ＳＰ３３：ＮＯ，ＳＰ３６：ＹＥＳ）、図３４について上述した切替え処理を実行することにより、差分データの退避先を差分ボリュームＤ−ＶＯＬから再生用ボリュームＲ−ＶＯＬに切り替える（ＳＰ３７）。またＣＰＵ２は、この後、かかるスナップショットデータ読出し要求を送信してきたホスト装置２１に対してエラーを通知する等の所定のエラー処理を実行し、その後このスナップショットデータ読出し処理を終了する（ＳＰ４５）。なお、以下においては、このステップＳＰ３８における処理をエラー終了処理と呼ぶ。
【００８６】
一方、ステップＳＰ３１における判断において否定結果を得ることは（ＳＰ３１：ＹＥＳ）、現在、差分ボリュームＤ−ＶＯＬが運用されておらず、差分データが再生用ボリュームＲ−ＶＯＬに退避されていることを意味する。かくして、このときＣＰＵ２は、ユーザにより指定されたデータ読出し対象のブロックが、障害が発生した世代のスナップショット又は差分ボリュームＤ−ＶＯＬのいずれかに属するブロックであるか否かを判断する（ＳＰ３８）。
【００８７】
そしてＣＰＵ２は、この判断において肯定結果を得ると（ＳＰ３８：ＹＥＳ）、このスナップショットデータ読出し処理をエラー終了し（ＳＰ４５）、これに対して否定結果を得ると（ＳＰ３８：ＮＯ）、障害時用スナップショット管理テーブル４９におけるユーザにより指定されたスナップショットの世代及びブロックアドレスと対応するアドレス欄６７（図３１）に格納されたブロックアドレスを読み出し（ＳＰ３９）、その後、この読み出したブロックアドレスが「なし」であるか否かを判断する（ＳＰ４０）。
【００８８】
ＣＰＵ２は、この判断において否定結果を得ると（ＳＰ４０：ＮＯ）、再生用ボリュームＲ−ＶＯＬ上のステップＳＰ３９において取得したブロックアドレスのブロックに格納されているユーザデータを読み出し（ＳＰ４１）、この後このスナップショットデータ読出し処理を終了する（ＳＰ４４）。
【００８９】
他方、ＣＰＵ２は、ステップＳＰ４０の判断において肯定結果を得ると（ＳＰ４０：ＹＥＳ）、スナップショットプログラム４０内の状態フラグ５１（図３０）を読み出し、この状態フラグに「回復」が設定されているか否かを判断する（ＳＰ４２）。
【００９０】
この判断において肯定結果を得ることは（ＳＰ４２：ＹＥＳ）、再生用ボリュームＲ−ＶＯＬに退避されていたユーザデータを、障害から回復した差分ボリュームＤ−ＶＯＬに書き込み中であることを意味する。かくして、このときＣＰＵ２は、ステップＳＰ３２に戻り、この後このステップＳＰ３２以降の処理を上述と同様に実行する。
【００９１】
これに対して、かかるステップＳＰ４２の判断において否定結果を得ることは（ＳＰ４２：ＮＯ）、差分ボリュームＤ−ＶＯＬに障害が発生し、この差分ボリュームＤ−ＶＯＬが未だ回復していないことを意味する。かくして、このときＣＰＵ２は、運用ボリュームＰ−ＶＯＬからデータを読み出し（ＳＰ４３）、この後このスナップショットデータ読出し処理を終了する（ＳＰ４４）。
【００９２】
（２−２−４）スナップショット生成処理
図３７は、スナップショットの生成処理に関するＣＰＵ２の処理内容を示すフローチャートである。ＣＰＵ２は、ホスト装置２１（図２９）からスナップショットの生成指示が与えられると、スナップショットプログラム４０のスナップショット生成処理プログラム４４（図３０）に基づき、このフローチャートに示す処理手順に従って、新たなスナップショットの生成処理を実行する。
【００９３】
すなわちＣＰＵ２は、スナップショットの生成指示が与えられると、このスナップショット生成処理を開始し（ＳＰ５０）、まず、スナップショットプログラム４０内の状態フラグ５１を読み出し、この状態フラグ５１に「障害」が設定されているか否かを判断する（ＳＰ５１）。
【００９４】
ＣＰＵ２は、この判断において否定結果を得ると（ＳＰ５１：ＮＯ）、スナップショット管理テーブル４８上の各ＣｏＷビットマップにおける、これから生成しようとするスナップショットの世代と対応するビットの値をそれぞれ１に設定し（ＳＰ５２）、この後かかるスナップショット管理テーブル４８の更新が成功したか否かを判断する（ＳＰ５４）。
【００９５】
ＣＰＵ２は、この判断において否定結果を得ると（ＳＰ５４：ＮＯ）、図３４について上述した切替え処理を実行することにより、差分データの退避先を差分ボリュームＤ−ＶＯＬから再生用ボリュームＲ−ＶＯＬに切り替え（ＳＰ５５）、この後このスナップショット生成処理をエラー終了する（ＳＰ５６）。
【００９６】
これに対してＣＰＵ２は、ステップＳＰ５４における判断において肯定結果を得ると（ＳＰ５４：ＹＥＳ）、スナップショットプログラム４０のＣｏＷビットマップキャッシュ５０に格納されたビット列の各ビットの値をすべて１に設定する（ＳＰ５７）。またＣＰＵ２は、この後最新スナップショット世代情報５２をそのときのスナップショットの世代の値に更新し（ＳＰ５８）、この後このスナップショット生成処理を終了する（ＳＰ５９）。
【００９７】
一方、ＣＰＵ２は、ステップＳＰ５１における判断において否定結果を得ると（ＳＰ５１：ＹＥＳ）、障害時用スナップショット管理テーブル４９上の各ＣｏＷビットマップにおける、これから生成しようとするスナップショットの世代と対応するビットの値をそれぞれ１に設定する（ＳＰ５３）。そしてＣＰＵ２は、この後スナップショットプログラム４０のＣｏＷビットマップキャッシュ５０に格納されたビット列の各ビットの値をすべて１に設定し（ＳＰ５７）、最新スナップショット世代情報５２をそのときのスナップショットの世代の値に更新し（ＳＰ５８）、この後このスナップショット生成処理を終了する（ＳＰ５９）。
【００９８】
（２−２−５）スナップショット削除処理
一方、図３８は、スナップショットの削除処理に関するＣＰＵ２の処理内容を示すフローチャートである。ＣＰＵ２は、ホスト装置２１（図２９）からスナップショットの削除指示が与えられると、スナップショットプログラム４０のスナップショット削除処理プログラム４５（図）に基づき、このフローチャートに示す処理手順に従って、指定されたスナップショットの削除処理を実行する。
【００９９】
すなわちＣＰＵ２は、スナップショットの生成指示が与えられると、このスナップショット削除処理を開始し（ＳＰ６０）、まず、スナップショットプログラム４０内の状態フラグ５１を読み出し、この状態フラグ５１に「障害」が設定されているか否かを判断する（ＳＰ６１）。
【０１００】
ＣＰＵ２は、この判断において否定結果を得ると（ＳＰ６１：ＮＯ）、スナップショット管理テーブル４８上の各ＣｏＷビットマップにおける、これから削除しようとするスナップショットの世代と対応するビットの値をそれぞれ「０」に設定し（ＳＰ６２）、この後かかるスナップショット管理テーブル４８の更新が成功したか否かを判断する（ＳＰ６３）。
【０１０１】
ＣＰＵ２は、この判断において肯定結果を得ると（ＳＰ６３：ＹＥＳ）、削除対象のスナップショットが最新のスナップショットである場合には、スナップショットプログラム４０内のＣｏＷビットマップキャッシュ５０の内容を、削除対象のスナップショットよりも１つ前の世代のスナップショットに対応した内容に更新する（ＳＰ６４）。具体的には、ＣＰＵ２は、スナップショット管理テーブル４８上の各ＣｏＷビットマップにおける削除対象のスナップショットよりも１つ前の世代と対応付けられたビットの値をそれぞれ読み出し、これを対応するブロックアドレスの順番に並べてＣｏＷビットマップキャッシュ５０に書き込む（ＳＰ６４）。
【０１０２】
そしてＣＰＵ２は、この後かかるＣｏＷビットマップキャッシュ５０の更新が成功したか否かを判断し（ＳＰ６５）、肯定結果を得ると（ＳＰ６５：ＹＥＳ）、スナップショットプログラム４０内の最新スナップショット世代情報５２の値を新たなスナップショット世代の値に更新した後（ＳＰ６９）、このスナップショット削除処理を終了する（ＳＰ７０）。
【０１０３】
これに対してＣＰＵ２は、ステップＳＰ６３又はステップＳＰ６５の判断において否定結果を得ると（ＳＰ６３：ＮＯ，ＳＰ６５：ＮＯ）、図３４について上述した切替え処理を実行することにより、差分データの退避先を差分ボリュームＤ−ＶＯＬから再生用ボリュームＲ−ＶＯＬに切り替え（ＳＰ７１）、この後このスナップショット削除処理をエラー終了する（ＳＰ７２）。
【０１０４】
一方、ＣＰＵ２は、ステップＳＰ６１の判断において肯定結果を得ると（ＳＰ６１：ＹＥＳ）、障害が発生しているスナップショットが削除対象のスナップショットであるか否かを判断する（ＳＰ６６）。そしてＣＰＵ２は、この判断において肯定結果を得ると（ＳＰ６６：ＹＥＳ）、このスナップショット削除処理をエラー終了する（ＳＰ７２）。
【０１０５】
これに対してＣＰＵ２は、ステップＳＰ６６の判断において否定結果を得ると（ＳＰ６６：ＮＯ）、障害時用スナップショット管理テーブル４９上の各ＣｏＷビットマップにおける、これから削除しようとするスナップショットの世代と対応するビットの値をそれぞれ「０」に設定する（ＳＰ６７）。
【０１０６】
またＣＰＵ２は、この後削除対象のスナップショットが最新のスナップショットである場合には、スナップショットプログラム４０内のＣｏＷビットマップキャッシュ５０の内容を、削除対象のスナップショットよりも１つ前の世代のスナップショットに対応した内容に更新する（ＳＰ６８）。具体的には、ＣＰＵ２は、障害時用スナップショット管理テーブル４９上の各ＣｏＷビットマップにおける削除対象のスナップショットよりも１つ前の世代と対応するビットの値をそれぞれ読み出し、これを対応するブロックアドレスの順番に並べてＣｏＷビットマップキャッシュ５０に書き込む（ＳＰ６８）。
【０１０７】
そしてＣＰＵ２は、この後、スナップショットプログラム４０内の最新スナップショット世代情報５２の値を新たなスナップショットの世代に更新した後（ＳＰ６９）、このスナップショット削除処理を終了する（ＳＰ７０）。
【０１０８】
（２−２−６）差分データ回復処理
次に、差分データ回復処理について説明する。この差分データ回復処理は、障害が発生していた差分ボリュームＤ−ＶＯＬが回復した場合、又は差分ボリュームＤ−ＶＯＬが回復不可能なために新規に差分ボリュームＤ−ＶＯＬを生成した場合において、システム管理者により差分データの回復処理の指示が与えられたときに実行される。
【０１０９】
例えば差分ボリュームＤ−ＶＯＬが障害から回復した場合には、再生用ボリュームＲ−ＶＯＬに退避した差分データを差分ボリュームＤ−ＶＯＬに移行し、これと併せて障害時用スナップショット管理テーブル４９の内容をスナップショット管理テーブル４８に反映させる。この場合におけるデータの移行は、スナップショットプログラム４０内の最新スナップショット世代情報５２に基づいて行う。また、この間における運用ボリュームＰ−ＶＯＬからの差分データの退避は、スナップショットプログラム４０内のＣｏＷビットマップキャッシュ５０の内容に基づいて行う。さらに、再生用ボリュームＲ−ＶＯＬからの差分データのデータ移行は、スナップショット管理用テーブル４８及び障害時用スナップショット管理テーブル４９の整合性を保ちながら行う。
【０１１０】
再生用ボリュームＲ−ＶＯＬからのデータ移行は、障害時用スナップショット管理テーブル４９上のＣｏＷビットマップにおけるビットの値が「０」のブロックに格納された差分データを対象とするため、運用ボリュームＰ−ＶＯＬからの差分データの退避とは競合せずに並行して行うことができる。
【０１１１】
このとき差分ボリュームＤ−ＶＯＬに移行された差分データの障害時用スナップショット管理テーブル４９上のアドレス欄６７には「なし」を格納する。ただし、差分データ回復処理中は、障害発生前に取得したスナップショットへのアクセスはできない。これは再生用ボリュームＲ−ＶＯＬ中の未回復の差分データを参照する可能性があるためであり、スナップショット管理テーブル４８からの再生用ボリュームＲ−ＶＯＬ上の領域へのマッピングができないためである。
【０１１２】
差分ボリュームＤ−ＶＯＬが障害から回復できない場合には、障害発生以降に取得したスナップショットに対応する差分データのみ、つまり障害時用スナップショット管理テーブル４９における第１世代のスナップショット以降の世代のスナップショットについての差分データを、新規に設定した差分ボリュームＤ−ＶＯＬに移行させる。
【０１１３】
この場合において、かかる差分ボリュームＤ−ＶＯＬの障害回復の可能／不可能の判断は、システム管理者によって行われる。そしてシステム管理者は、かかる判断において、差分ボリュームＤ−ＶＯＬが回復可能と判断した場合には当該差分ボリュームＤ−ＶＯＬを回復させるための処理を行い、これに対して差分ボリュームＤ−ＶＯＬが回復不可能と判断したときには、差分ボリュームＤ−ＶＯＬを新規に設定するようにする。
【０１１４】
ただし、ＮＡＳ部３３のＣＰＵ２がこのような差分ボリュームＤ−ＶＯＬの回復可能／不可能の判断を自動的に行い、元の差分ボリュームＤ−ＶＯＬが回復不可能であると判断したときに新たな差分ボリュームＤ−ＶＯＬを自動的に作成するようにしても良い。具体的には、例えばＣＰＵ２が、過去のログ情報等からディスク障害に関する平均修復時間（ＭＴＴＲ：Mean Time To Repair）を計算し、障害発生から現在までの経過時間がかかる平均修復時間を超えるのを待ち受け、かかる経過時間が平均修復時間を越えた段階で差分ボリュームＤ−ＶＯＬの障害が回復可能であると判断するようにする。このようにすることによって、人手を介して行う場合に比べて差分ボリュームＤ−ＶＯＬの障害に対する対応を迅速化できることが期待できる。
【０１１５】
以下、差分データ回復処理の内容を詳細に説明する。差分データ回復処理は、スナップショット管理テーブル４９へのＣｏＷビットマップキャッシュの反映、差分ボリュームＤ−ＶＯＬへの差分データの移行の順で行う。
【０１１６】
図３９は、差分データの回復処理に関するＣＰＵ２の処理内容を示すフローチャートである。ＣＰＵ２は、ホスト装置２１から差分データの回復指示が与えられると、スナップショットプログラム４０の差分データ回復処理プログラム４７（図３０）に基づき、このフローチャートに従って、上述のような差分データ回復処理を実行する。
【０１１７】
すなわちＣＰＵ２は、差分データの回復指示が与えられると、この差分データ回復処理を開始し（ＳＰ８０）、まず、スナップショットプログラムの状態フラグを読み出し、これに「障害」が設定されているか否かを判断する（ＳＰ８１）。そしてＣＰＵ２は、この判断において否定結果を得ると（ＳＰ８１：ＮＯ）、この差分データ回復処理をエラー終了する（ＳＰ９４）。
【０１１８】
これに対してＣＰＵ２は、かかる判断において肯定結果を得ると（ＳＰ８１：ＹＥＳ）、障害時用スナップショット管理テーブル４９を保存し、この後、現在のスナップショット管理テーブル４８上の各ＣｏＷビットマップにおける最新のスナップショットに対応するビットの値と、図３４に示す切替え処理のステップＳＰ２２において保存した障害発生時のＣｏＷビットマップキャッシュ５０に格納されていたビット列中の対応するビットの値とが全て一致するか否かを判断する（ＳＰ８３）。
【０１１９】
この判断において肯定結果を得ることは（ＳＰ８３：ＹＥＳ）、現在の差分ボリュームＤ−ＶＯＬが障害のあった差分ボリュームＤ−ＶＯＬを回復させたものであることを意味する。かくして、このときＣＰＵ２は、障害時用スナップショット管理テーブル４９上の各ＣｏＷビットマップにおける左端のビットから現在のスナップショットの世代と対応するビットまでを、スナップショット管理テーブル４８上の対応するＣｏＷビットマップにおける対応する世代のビット位置に順次コピーする（ＳＰ８４）。このときＣＰＵ２は、障害時用スナップショット管理テーブル４９上でのスナップショットの世代と、スナップショット管理テーブル４８上でのスナップショットの世代との対応付けは、最新スナップショット世代情報５２に基づいて行う。
【０１２０】
例えば、図４０に示す例の場合、図３４に示す切替え処理のステップＳＰ２２において保存した最新スナップショット世代情報５２に基づいて、障害が発生したスナップショットの世代は第２世代であり、従って、障害時用スナップショット管理テーブル４９における「障害中」の世代と、スナップショット管理テーブル４８における第２世代（「V-VOL ２」）と対応していることが分かる。
【０１２１】
そこでＣＰＵ２は、障害時用スナップショット管理テーブル４９の各ＣｏＷビットマップにおける左端のビットから、当該障害時用スナップショット管理テーブル４９上での現在のスナップショットの世代（「V-VOL １」）と対応するビット（左端から２番目のビット）までを、スナップショット管理テーブル４８上の対応するＣｏＷビットマップにおける第２世代のスナップショットと対応するビット（左端から２番目）以降の部分にそれぞれコピーする。このような処理により、この後、運用ボリュームＰ−ＶＯＬから差分ボリュームＤ−ＶＯＬへの差分データの退避を再生用ボリュームＲ−ＶＯＬから差分ボリュームＤ−ＶＯＬへの差分データの移行と並行して行うことが可能となる。
【０１２２】
なお図４１に、かかるステップＳＰ８３の処理を終えた後のスナップショット管理テーブル４８の様子を示す。この図４１において、障害時用スナップショット管理テーブル４９中の着色されたアドレス欄６７と対応する部分の差分データが、差分ボリュームＤ−ＶＯＬの回復処理中に再生用ボリュームＲ−ＶＯＬに退避されている。
【０１２３】
これに対して、ステップＳＰ８３の判断において否定結果を得ることは（ＳＰ８３：ＮＯ）、障害のあった差分ボリュームＤ−ＶＯＬが回復不能であったため、現在の差分ボリュームＤ−ＶＯＬが新規に生成されたものであることを意味する。かくして、このときＣＰＵ２は、障害時用スナップショット管理テーブル４９上の各ＣｏＷビットマップにおける左端のビットから現在のスナップショットの世代と対応付けられたビットまでを、スナップショット管理テーブル４８上の各ＣｏＷビットマップにおける左端のビット以降の部分にそれぞれコピーする（ＳＰ８５）。従って、この場合には、差分ボリュームＤ−ＶＯＬに障害が発生する以前の差分データは失われることとなる。
【０１２４】
またＣＰＵ２は、ステップＳＰ８４又はステップＳＰ８５の処理が終了すると、スナップショットプログラム４０内の状態フラグ５１に「回復」を設定する（ＳＰ８６）。
【０１２５】
そしてＣＰＵ２は、この後障害発生時のスナップショットの世代を起点として、これ以降の古い世代のものから順番に、再生用ボリュームＲ−ＶＯＬに退避された差分データを差分ボリュームＤ−ＶＯＬに移行させる（ＳＰ８７〜ＳＰ９１）。
【０１２６】
具体的に、ＣＰＵ２は、スナップショットプログラム４０内の最新スナップショット世代情報５２に基づいて障害発生時のスナップショットの世代を確認し、これ以降のスナップショットの世代であって、障害時用スナップショット管理テーブル４９上のより古い世代の対応するアドレス欄６６，６７に再生用ボリュームＲ−ＶＯＬ上のブロックアドレスが格納された運用ボリュームＰ−ＶＯＬ上のブロック１１（図３１）を１つ選択する（ＳＰ８７）。なお、以下においては、適宜、この選択されたブロック１１を対象ブロック１１と呼び、そのとき対象としているスナップショットの世代を対象スナップショット世代と呼ぶものとする。
【０１２７】
そしてＣＰＵ２は、この後この対象ブロック１１の対象スナップショット世代の差分データを再生用ボリュームＲ−ＶＯＬから差分ボリュームＤ−ＶＯＬに移行させ（ＳＰ８８）、その後図４２に示すように、スナップショット管理テーブル４８における対象ブロック１１の対象スナップショット世代と対応する退避先ブロックアドレス欄６２に、かかる差分データを移行させた差分ボリュームＤ−ＶＯＬ上のブロック１２（図３１）のブロックアドレスを格納する（ＳＰ８９）。なお、この図４２では、説明の便宜上、スナップショット管理テーブル４８及び障害時用スナップショット管理テーブル４９によって管理できるスナップショットの世代が４世代以上に拡張され、障害時用スナップショット管理テーブル４９上の第２世代がスナップショット管理テーブル４８上の第８世代と対応している場合を示している。
【０１２８】
またＣＰＵ２は、図４３に示すように、スナップショット管理テーブル４８上の対象ブロック１１と対応する退避先ブロックアドレス欄６２であって、対象スナップショット世代と差分データを共有する世代の退避先ブロックアドレス欄６２内のブロックアドレスを更新すると共に、これに応じてスナップショット管理テーブル４８上の対応するＣｏＷビットマップを更新する（ＳＰ８９）。ここで対象となるスナップショットの世代は、かかる対象スナップショット世代よりも前世代であって、ＣｏＷビットマップの対応するビットの値が「１」のすべての世代である。具体的な処理内容としては、スナップショット管理テーブル４８上の対応する退避先ブロックアドレス欄６２に、対象スナップショット世代の退避先ブロックアドレス欄６２に格納したブロックアドレスと同じブロックアドレスを格納すると共に、ＣｏＷビットマップのそのビットの値を「０」に設定する。
【０１２９】
さらにＣＰＵ２は、図４４に示すように、対象スナップショット世代よりも後の世代であって、対象ブロック１１について同じ差分データを共有する世代の当該対象ブロック１１のスナップショット管理テーブル４８上の退避先ブロックアドレス欄６２の内容を更新する。対象となる世代は、障害時用スナップショット管理テーブル４９上において、対象ブロック１１について、対象スナップショット世代の対象ブロック１１のアドレス欄６６，６７に格納されたブロックアドレスと同じブロックアドレスが格納された世代である。具体的な処理内容は、スナップショット管理テーブル４８上のその世代の対象ブロック１１の退避先ブロックアドレス欄６２に、対象スナップショット世代の対象ブロックの退避先ブロックアドレス欄６２に格納されたブロックアドレスと同じブロックアドレスを格納する（ＳＰ８９）。
【０１３０】
そしてＣＰＵ２は、この後、ステップＳＰ８８において更新したスナップショット管理テーブル４８上の各退避先ブロックアドレス欄６２と対応する障害時用スナップショット管理テーブル４９上の各アドレス欄６６，６７にそれぞれブロックアドレスとして「なし」を設定する（ＳＰ９０）。
【０１３１】
続いてＣＰＵ２は、再生用ボリュームＲ−ＶＯＬに差分データを退避させた運用ボリュームＰ−ＶＯＬ上のすべてのブロックについて、同様の処理（ステップＳＰ８７〜ステップＳＰ９０）を終えたか否かを判断し（ＳＰ９１）、否定結果を得ると（ＳＰ９１：ＮＯ）、ステップＳＰ８７に戻る。そしてＣＰＵ２は、対象とするブロック１１を順次代えながら、再生用ボリュームＲ−ＶＯＬに差分データを退避させたすべてのブロック１１に対する同様の処理（ステップＳＰ８７〜ステップＳＰ９１）を繰り返す。
【０１３２】
そしてＣＰＵ２は、やがてすべてのブロック１１に対する処理を終えると（ＳＰ９１：ＹＥＳ）、スナップショットプログラム４０内の状態フラグ５１を「正常」を設定し（ＳＰ９２）、この後この差分データ回復処理を終了する（ＳＰ９３）。
【０１３３】
ここで、かかる差分データ回復処理のステップＳＰ８７〜ステップＳＰ８９において行われる再生用ボリュームＲ−ＶＯＬから差分ボリュームＤ−ＶＯＬへの差分データの移行処理と、スナップショット管理テーブル４８及び障害時用スナップショット管理テーブル４９の更新処理との処理内容を図４５〜図５１を用いてより具体的に説明する。以下においては、第２世代のスナップショットにおいて差分ボリュームＤ−ＶＯＬに障害が発生し、再生用ボリュームＲ−ＶＯＬの運用に切り替えた後に１世代分のスナップショットを生成した場合を想定して説明する。
【０１３４】
図４５に示す例の場合、スナップショットの第２世代において、ブロックアドレスが「０」である運用ボリュームＰ−ＶＯＬ上のブロック１１については、障害時用スナップショット管理テーブル４９における「障害中」の行の対応するアドレス欄６６に「３」というブロックアドレスが格納されている。これは、スナップショットの第２世代で障害が発生し、その障害発生後であって第３世代のスナップショットが生成される前に、そのブロック１１の差分データが再生用ボリュームＲ−ＶＯＬ上のブロックアドレスが「３」のブロック６３（図３１）に退避されたことを意味する。そこでＣＰＵ２は、ブロックアドレスが「０」であるブロック１１について、再生用ボリュームＲ−ＶＯＬのブロックアドレスが「３」のブロック６３に退避されている対応する差分データを、差分ボリュームＤ−ＶＯＬの空いているブロック（この例ではブロックアドレスが「11」のブロック）１２（図３１）に移行させる。
【０１３５】
また、かかるブロックアドレスが「０」のブロック１１については、スナップショット管理テーブル４９上の対応するＣｏＷビットマップの各ビットのうち、スナップショットの第１及び第２世代と対応する各ビットの値が共に「１」であることから、これら第１及び第２世代のスナップショットが同じ差分データを共有していることが分かる。その一方で、障害時用スナップショット管理テーブル４９において、「障害中」の行の対応するアドレス欄６６と、「V-Vol １」の行のアドレス欄６７とに同じブロックアドレスが格納されていないため、第２及び第３世代のスナップショットが同じ差分データを共有していないことが分かる。
【０１３６】
そこでＣＰＵ２は、その差分データの移行先の差分ボリュームＤ−ＶＯＬ上のブロックアドレス（「11」）をスナップショット管理テーブル４８における「V-VOL １」及び「V-VOL ２」の各行の対応する各退避先ブロックアドレス欄６２にそれぞれ格納する。またＣＰＵ２は、スナップショット管理テーブル４８の対応するＣｏＷビットマップを「0010」に更新し、さらに障害時用スナップショット管理テーブル４９における「障害中」の行の対応するアドレス欄６６に「なし」を設定する。
【０１３７】
またスナップショットの第２世代において、ブロックアドレスが「１」の運用ボリュームＰ−ＶＯＬ上のブロック１１については、図４６に示すように、障害時用スナップショット管理テーブル４９における「障害中」の行の対応するアドレス欄６６に「10」というブロックアドレスが格納されている。そこでＣＰＵ２は、このブロック１１について、再生用ボリュームＲ−ＶＯＬ上のブロックアドレスが「10」のブロック６３に退避されている対応する差分データを、差分ボリュームＤ−ＶＯＬの空いているブロック（ブロックアドレスが「５」のブロック）１２に移行させる。
【０１３８】
また、かかるブロックアドレスが「１」のブロック１１については、スナップショット管理テーブル４８上の対応するＣｏＷビットマップの各ビットのうち、第１及び第２世代のスナップショットと対応する各ビットの値が共に「１」であることから、これら第１及び第２世代のスナップショットが同じ差分データを共有していることが分かる。また、このブロック１１については、障害時用スナップショット管理テーブル４９の「障害中」の行の対応するアドレス欄６６及び「V-VOL １」の行の対応するアドレス欄６７にそれぞれ同じ「10」というブロックアドレスが格納されていることから、第２及び第３世代のスナップショットも同じ差分データを共有していることが分かる。
【０１３９】
そこでＣＰＵ２は、その差分データの移行先の差分ボリュームＤ−ＶＯＬ上のブロックアドレス（「５」）を、スナップショット管理テーブル４８の「V-VOL １」〜「V-VOL ３」の各行の対応する各退避先ブロックアドレス欄６２にそれぞれ格納する。またＣＰＵ２は、スナップショット管理テーブル４８上の対応するＣｏＷビットマップを「0000」に更新し、さらに障害時用スナップショット管理テーブル４９における「障害中」及び「V-VOL １」の各行の対応する各アドレス欄６６，６７にそれぞれ「なし」を格納する。
【０１４０】
一方、スナップショットの第２世代において、ブロックアドレスが「２」及び「３」の運用ボリュームＰ−ＶＯＬ上の各ブロック１１については、図４５からも明らかなように、障害時用スナップショット管理テーブル４９における「障害中」の行の対応するアドレス欄６６に「なし」がそれぞれ設定され、スナップショット管理テーブル４８の「V-VOL ２」の行の対応する退避先ブロックアドレス欄６２に「３」又は「４」がそれぞれ設定されていることから、障害発生前に差分データが差分ボリュームＤ−ＶＯＬに退避されていたことが分かる。よって、このときＣＰＵ２は、ブロックアドレスが「２」及び「３」の各ブロック１１に関して何らの処理も行わない。
【０１４１】
これに対して、スナップショットの第２世代において、ブロックアドレスが「４」の運用ボリュームＰ−ＶＯＬ上のブロック１１については、図４７に示すように、用スナップショット管理テーブル４９における「障害中」の行の対応するアドレス欄６６に「11」というブロックアドレスが格納されている。そこでＣＰＵ２は、このブロック１１について、再生用ボリュームＲ−ＶＯＬのブロックアドレスが「11」のブロック６３に退避されている対応する差分データを、差分ボリュームＤ−ＶＯＬの空いているブロック（ブロックアドレスが「８」のブロック）１２に移行させる。
【０１４２】
また、かかるブロック１１については、スナップショット管理テーブル４８上の対応するＣｏＷビットマップの各ビットのうち、第１及び第２世代のスナップショットと対応する各ビットの値が共に「０」であることから、これら第１及び第２世代のスナップショットが同じ差分データを共有していないことが分かる。また、このブロック１１については、障害時用スナップショット管理テーブル４９の「障害中」及び「V-VOL １」の各行の対応する各アドレス欄６６，６７に異なるブロックアドレスが格納されているため、第２及び第３世代のスナップショットが同じ差分データを共有していないことが分かる。
【０１４３】
そこでＣＰＵ２は、その差分データの移行先の差分ボリュームＤ−ＶＯＬ上のブロックアドレス（「８」）を、スナップショット管理テーブル４８の「V-VOL ２」の行の対応する退避先ブロックアドレス欄６２に格納する。またＣＰＵ２は、障害時用スナップショット管理テーブル４９における「障害中」の行の対応するアドレス欄６６に「なし」を格納する。
【０１４４】
さらにスナップショットの第２世代において、ブロックアドレスが「５」の運用ボリュームＰ−ＶＯＬ上のブロック１１については、図４８に示すように、障害時用スナップショット管理テーブル４９における「障害中」の行の対応するアドレス欄６６に「２」というブロックアドレスが格納されている。そこでＣＰＵ２は、このブロック６３について、再生用ボリュームＲ−ＶＯＬのブロックアドレスが「２」のブロック１２に退避されている対応する差分データを、差分ボリュームＤ−ＶＯＬの空いているブロック（ブロックアドレスが「６」のブロック）１２に移行させる。
【０１４５】
また、かかるブロック１１については、スナップショット管理テーブル４８上の対応するＣｏＷビットマップの各ビットのうち、第１及び第２世代のスナップショットと対応する各ビットの値が共に「０」であることから、これら第１及び第２世代のスナップショットが同じ差分データを共有していないことが分かる。また、このブロック１１については、障害時用スナップショット管理テーブル４９の「障害中」の行の対応するアドレス欄６６及び「V-VOL １」の行の対応するアドレス欄６７に同じ「２」というブロックアドレスが格納されていることから、第２及び第３世代のスナップショットが同じ差分データを共有していることが分かる。
【０１４６】
そこでＣＰＵ２は、その差分データの移行先の差分ボリュームＤ−ＶＯＬ上のブロックアドレス（「８」）を、スナップショット管理テーブル４８の「V-VOL ２」及び「V-VOL ３」の行の対応する退避先ブロックアドレス欄６２に格納する。またＣＰＵ２は、障害時用スナップショット管理テーブル４９における「障害中」及び「V-VOL １」の各行の対応する各アドレス欄６６，６７にそれぞれ「なし」を格納する。
【０１４７】
さらにスナップショットの第２世代において、ブロックアドレスが「６」の運用ボリュームＰ−ＶＯＬ上のブロック１１については、図４９に示すように、障害時用スナップショット管理テーブル４９における「障害中」のアドレス欄６６に「５」というブロックアドレスが格納されている。そこでＣＰＵ２は、このブロック１１について、再生用ボリュームＲ−ＶＯＬのブロックアドレスが「５」のブロック６３に退避されている対応する差分データを、差分ボリュームＤ−ＶＯＬの空いているブロック（ブロックアドレスが「９」のブロック）１２に移行させる。
【０１４８】
また、かかるブロック１１については、スナップショット管理テーブル４８上の対応するＣｏＷビットマップの各ビットのうち、第１世代のスナップショットと対応するビットの値が「１」であることから、第１及び第２世代のスナップショットが同じ差分データを共有していることが分かる。また、このブロック１１については、障害時用スナップショット管理テーブル４９の「障害中」の行の対応するアドレス欄６６及び「V-VOL １」の行の対応するアドレス欄６７に異なるブロックアドレスが格納されているため、第２及び第３世代のスナップショットが同じ差分データを共有していないことが分かる。
【０１４９】
そこでＣＰＵ２は、その差分データの移行先の差分ボリューＤ−ＶＯＬ上のブロックアドレス（「９」）を、スナップショット管理テーブル４８の「V-VOL １」及び「V-VOL ２」の各行の対応する各退避先ブロックアドレス欄６２にそれぞれ格納する。またＣＰＵ２は、スナップショット管理テーブル４８の対応するＣｏＷビットマップを「0000」に更新し、さらに障害時用スナップショット管理テーブル４９における「障害中」の行の対応するアドレス欄６６に「なし」を格納する。
【０１５０】
さらにスナップショットの第２世代において、ブロックアドレスが「７」の運用ボリュームＰ−ＶＯＬ上のブロック１１については、図４５からも明らかなように、障害時用スナップショット管理テーブル４９における「障害中」の行の対応するアドレス欄６６に「なし」が格納され、スナップショット管理テーブル４８における「V-VOL ２」の行の対応する退避先ブロックアドレス欄６２に「なし」が格納されていることから、未だそのブロック１１に対するユーザデータの書き込みが発生していないことが分かる。よって、このときＣＰＵ２は、ブロックアドレスが「７」のブロック１１に関して何らの処理も行わない。
【０１５１】
他方、スナップショットの第３世代において、ブロックアドレスが「０」〜「２」の運用ボリュームＰ−ＶＯＬ上のブロック１１については、図４５からも明らかなように、障害時用スナップショット管理テーブル４９における「V-VOL １」の行のそれぞれ対応するアドレス欄６７に「なし」が格納されている。従って、スナップショットの第３世代において、かかるブロック１１からの差分データの退避が行われていないことが分かる。よって、このときＣＰＵ２は、第３世代のスナップショットのブロックアドレスが「０」〜「２」のブロック１１に関して何らの処理も行わない。
【０１５２】
これに対して、スナップショットの第３世代において、ブロックアドレスが「３」の運用ボリュームＰ−ＶＯＬ上のブロック１１については、図５０に示すように、障害時用スナップショット管理テーブル４９における「V-VOL １」の行の対応するアドレス欄６７に「８」が設定されている。そこでＣＰＵ２は、このブロック１１について、再生用ボリュームＲ−ＶＯＬのブロックアドレスが「８」のブロック６３に退避されている対応する差分データを、差分ボリュームＤ−ＶＯＬの空いているブロック（ブロックアドレスが「10」のブロック）１２に移行させる。
【０１５３】
またかかるブロック１１については、上述のように障害発生前の世代のスナップショットと差分データを共有していないことが分かり、さらに障害時用スナップショット管理テーブル４９の「V-VOL １」及び「V-VOL ２」の各行の対応する各アドレス欄６７から次世代以降のスナップショットとも差分データを共有していないことが分かる。
【０１５４】
そこでＣＰＵ２は、その差分データの移行先の差分ボリュームＤ−ＶＯＬ上のブロックアドレス（「10」）を、スナップショット管理テーブル４８における「V-VOL ３」の行の対応する退避先ブロックアドレス欄６２に格納する。またＣＰＵ２は、障害時用スナップショット管理テーブル４９における「V-VOL １」の行の対応するアドレス欄６７に「なし」を設定する。
【０１５５】
一方、ナップショットの第３世代において、ブロックアドレスが「４」及び「５」の運用ボリュームＰ−ＶＯＬ上のブロック１１については、図４５からも明らかなように、障害時用スナップショット管理テーブル４９における「V-VOL １」の各行の対応するアドレス欄６７に「なし」がそれぞれ設定されている。従って、スナップショットの第３世代において、かかるブロック１１からの差分データの退避が行われていないことが分かる。よって、このときＣＰＵ２は、第３世代のスナップショットのブロックアドレスが「４」及び「５」のブロック１１に関して何らの処理も行わない。
【０１５６】
他方、ナップショットの第３世代において、ブロックアドレスが「６」の運用ボリュームＰ−ＶＯＬ上のブロック１１については、図５１に示すように、障害時用スナップショット管理テーブル４９における「V-VOL １」の行の対応するアドレス欄６７に「６」が設定されている。そこでＣＰＵ２は、このブロック１１について、再生用ボリュームＲ−ＶＯＬのブロックアドレスが「６」のブロック６３に退避されている対応する差分データを、差分ボリュームＤ−ＶＯＬの空いているブロック（ブロックアドレスが「13」のブロック）１２に移行させる。
【０１５７】
またかかるブロック１１については、上述のように障害発生前の世代のスナップショットと差分データを共有していないことが分かり、さらに障害時用スナップショット管理テーブル４９の「V-VOL １」及び「V-VOL ２」の各行の対応する各アドレス欄６７から次世代以降のスナップショットとも差分データを共有していないことが分かる。
【０１５８】
そこでＣＰＵ２は、その差分データの移行先の差分ボリュームＤ−ＶＯＬ上のブロックアドレス（「13」）を、スナップショット管理テーブル４８における「V-VOL ３」の行の対応する退避先ブロックアドレス欄６２に格納する。またＣＰＵ２は、障害時用スナップショット管理テーブル４９における「V-VOL １」の行の対応するアドレス欄６７に「なし」を設定する。
【０１５９】
さらに、ナップショットの第３世代において、ブロックアドレスが「７」の運用ボリュームＰ−ＶＯＬ上のブロック１１については、図４５からも明らかなように、障害時用スナップショット管理テーブル４９における「V-VOL １」の各行の対応するアドレス欄６７に「なし」がそれぞれ設定されている。従って、スナップショットの第３世代において、かかるブロック１１からの差分データの退避が行われていないことが分かる。よって、このときＣＰＵ２は、第３世代のスナップショットのブロックアドレスが「７」のブロック１１に関して何らの処理も行わない。
【０１６０】
以上のような一連の処理により、スナップショット管理テーブル４８及び障害時用スナップショット管理テーブル４９の整合性を保ちながら、再生用ボリュームＲ−ＶＯＬに退避した差分データを差分ボリュームＤ−ＶＯＬに移行させることができる。
【０１６１】
そして、このようなスナップショット維持方法によれば、スナップショットの作成時に差分ボリュームＤ−ＶＯＬに障害が発生した場合においても、差分ボリュームＤ−ＶＯＬが回復するまでの間に運用ボリュームＰ−ＶＯＬへのユーザデータの書込み処理により発生した新たな差分データを再生用ボリュームＲ−ＶＯＬにおいて保持し、その後差分ボリュームＤ−ＶＯＬの障害が回復した段階でかかる差分データを差分ボリュームＤ−ＶＯＬに移行させることができる。また、このときスナップショット管理テーブル４８についても、差分ボリュームＤ−ＶＯＬの障害が回復するまでの間の不整合を障害時用スナップショット管理テーブル４９を用いて修正することができる。
【０１６２】
従って、このスナップショット維持方法によれば、差分ボリュームＤ−ＶＯＬに障害が発生した場合においても、継続運用を行いながら、それまでに作成したスナップショットの一部又は全部を維持することができるため、ディスクアレイ装置全体としての信頼性を格段的に向上することができる。
【０１６３】
（３）他の実施の形態
なお上述の実施の形態においては、本発明をディスクアレイ装置２３（図２９）のＮＡＳ部３３（図２９）に適用するようにした場合について述べたが、本発明はこれに限らず、例えばディスクアレイ装置２３とは別体に形成されたＮＡＳ装置や、この他スナップショット機能を提供する種々の装置に広く適用することができる。
【０１６４】
また上述の実施の形態においては、第１の差分データ管理情報としてのスナップショット管理テーブル４８及び第２の差分データ管理情報としての障害時用スナップショット管理テーブル４９をそれぞれ図３１のように構成するようにした場合について述べたが、本発明はこれに限らず、第１及び第２の差分データ管理情報の形態としては、この他種々の形態を広く適用することができる。
【産業上の利用可能性】
【０１６５】
本発明はディスクアレイ装置の他、ＮＡＳ装置などにも広く適用することができる。
【図面の簡単な説明】
【０１６６】
【図１】基本的なＮＡＳサーバにおけるスナップショット機能の説明に供するブロック図である。
【図２】スナップショット管理テーブルの説明に供する概念図である。
【図３】基本的なスナップショット生成処理の説明に供する概念図である。
【図４】基本的なスナップショット生成処理の説明に供する概念図である。
【図５】基本的なスナップショット生成処理の説明に供する概念図である。
【図６】基本的なスナップショット生成処理の説明に供する概念図である。
【図７】基本的なスナップショット生成処理の説明に供する概念図である。
【図８】基本的なスナップショット生成処理の説明に供する概念図である。
【図９】基本的なスナップショット生成処理の説明に供する概念図である。
【図１０】基本的なスナップショット生成処理の説明に供する概念図である。
【図１１】基本的なスナップショット生成処理の説明に供する概念図である。
【図１２】基本的なスナップショット生成処理の説明に供する概念図である。
【図１３】基本的なスナップショット生成処理の説明に供する概念図である。
【図１４】基本的なスナップショット生成処理の説明に供する概念図である。
【図１５】基本的なスナップショット生成処理の説明に供する概念図である。
【図１６】基本的なスナップショット生成処理の説明に供する概念図である。
【図１７】基本的なスナップショット生成処理の説明に供する概念図である。
【図１８】基本的なスナップショットデータ読出し処理の説明に供する概念図である。
【図１９】基本的なスナップショットデータ読出し処理の説明に供する概念図である。
【図２０】基本的なスナップショットデータ読出し処理の説明に供する概念図である。
【図２１】基本的なスナップショットデータ読出し処理の説明に供する概念図である。
【図２２】基本的なスナップショットデータ読出し処理の説明に供する概念図である。
【図２３】基本的なスナップショットデータ読出し処理の説明に供する概念図である。
【図２４】基本的なスナップショット機能の問題点の説明に供する概念図である。
【図２５】基本的なスナップショット機能の問題点の説明に供する概念図である。
【図２６】本実施の形態によるスナップショット機能の説明に供するブロック図である。
【図２７】本実施の形態によるスナップショット機能の説明に供する概念図である。
【図２８】本実施の形態によるスナップショット機能の説明に供する概念図である。
【図２９】本実施の形態によるネットワークシステムの構成を示すブロック図である。
【図３０】スナップショットプログラムの概略構成を示す概念図である。
【図３１】本実施の形態によるスナップショット機能の説明に供する概念図である。
【図３２】本実施の形態によるスナップショット機能の説明に供する概念図である。
【図３３】ユーザデータの書込み処理の説明に供するフローチャートである。
【図３４】切替え処理の説明に供するフローチャートである。
【図３５】切替え処理の説明に供する概念図である。
【図３６】スナップショットデータ読出し処理の説明に供するフローチャートである。
【図３７】スナップショット生成処理の説明に供するフローチャートである。
【図３８】スナップショット削除処理の説明に供するフローチャートである。
【図３９】差分データ回復処理の説明に供するフローチャートである。
【図４０】差分データ回復処理の説明に供する概念図である。
【図４１】差分データ回復処理の説明に供する概念図である。
【図４２】差分データ回復処理の説明に供する概念図である。
【図４３】差分データ回復処理の説明に供する概念図である。
【図４４】差分データ回復処理の説明に供する概念図である。
【図４５】差分データ回復処理の説明に供する概念図である。
【図４６】差分データ回復処理の説明に供する概念図である。
【図４７】差分データ回復処理の説明に供する概念図である。
【図４８】差分データ回復処理の説明に供する概念図である。
【図４９】差分データ回復処理の説明に供する概念図である。
【図５０】差分データ回復処理の説明に供する概念図である。
【図５１】差分データ回復処理の説明に供する概念図である。
【符号の説明】
【０１６７】
２……ＣＰＵ、３……メモリ、１１，１２，６３……ブロック、２０……ネットワークシステム、２３……ディスクアレイ装置、３０……ディスクユニット、３３……ＮＡＳ部、４０……スナップショットプログラム、４１……運用ボリューム読出し処理プログラム、４２……運用ボリューム書込み処理プログラム、４３……スナップショットデータ読出し処理プログラム、４４……スナップショット生成処理プログラム、４６……切替え処理プログラム、４７……差分データ回復処理プログラム、４８……スナップショット管理テーブル、４９……障害時スナップショット管理テーブル、５０……ＣｏＷビットマップキャッシュ、５１……状態フラグ、５２……最新スナップショット世代情報、６０，６４……ブロックアドレス欄、６１，６５……ＣｏＷビットマップ欄、６２，６６，６７……アドレス欄。
【図１】
2007087036.tif 000003
【図２】
2007087036.tif 000004
【図３】
2007087036.tif 000005
【図４】
2007087036.tif 000006
【図５】
2007087036.tif 000007
【図６】
2007087036.tif 000008
【図７】
2007087036.tif 000009
【図８】
2007087036.tif 000010
【図９】
2007087036.tif 000011
【図１０】
2007087036.tif 000012
【図１１】
2007087036.tif 000013
【図１２】
2007087036.tif 000014
【図１３】
2007087036.tif 000015
【図１４】
2007087036.tif 000016
【図１５】
2007087036.tif 000017
【図１６】
2007087036.tif 000018
【図１７】
2007087036.tif 000019
【図１８】
2007087036.tif 000020
【図１９】
2007087036.tif 000021
【図２０】
2007087036.tif 000022
【図２１】
2007087036.tif 000023
【図２２】
2007087036.tif 000024
【図２３】
2007087036.tif 000025
【図２４】
2007087036.tif 000026
【図２５】
2007087036.tif 000027
【図２６】
2007087036.tif 000028
【図２７】
2007087036.tif 000029
【図２８】
2007087036.tif 000030
【図２９】
2007087036.tif 000031
【図３０】
2007087036.tif 000032
【図３１】
2007087036.tif 000033
【図３２】
2007087036.tif 000034
【図３３】
2007087036.tif 000035
【図３４】
2007087036.tif 000036
【図３５】
2007087036.tif 000037
【図３６】
2007087036.tif 000038
【図３７】
2007087036.tif 000039
【図３８】
2007087036.tif 000040
【図３９】
2007087036.tif 000041
【図４０】
2007087036.tif 000042
【図４１】
2007087036.tif 000043
【図４２】
2007087036.tif 000044
【図４３】
2007087036.tif 000045
【図４４】
2007087036.tif 000046
【図４５】
2007087036.tif 000047
【図４６】
2007087036.tif 000048
【図４７】
2007087036.tif 000049
【図４８】
2007087036.tif 000050
【図４９】
2007087036.tif 000051
【図５０】
2007087036.tif 000052
【図５１】
2007087036.tif 000053