(57)【要約】      （修正有）【課題】従来のスナップショットの制御においては、元のデータを記憶した記憶ボリュームと複製データを記憶した記憶ボリュームとの整合性を保つことができる期間は、元のデータの更新頻度と上記別の記憶ボリュームの記憶容量と依存していた。【解決手段】データを記憶するための複数の記憶ボリュームと、ある時点の後に、第１の前記記憶ボリュームに記憶される前記ある時点における前記データの更新要求を受信する手段と、前記更新要求の対象となった前記ある時点における前記データの複製を第２の前記記憶ボリュームに記憶する手段とを備え、前記第２の記憶ボリュームの状態に応じて、前記更新要求の対象となった前記ある時点における前記データの複製を、第３の前記記憶ボリュームの未使用の記憶領域に記憶する手段を備えるストレージ装置に関する。【選択図】    図８
2005018612.tif 000002
【特許請求の範囲】
【請求項１】
データを記憶するための複数の記憶ボリュームと、ある時点の後に、第１の前記記憶ボリュームに記憶される前記ある時点における前記データの更新要求を受信する手段と、前記更新要求の対象となった前記ある時点における前記データの複製を第２の前記記憶ボリュームに記憶する手段とを備え、
前記第２の記憶ボリュームの状態に応じて、前記更新要求の対象となった前記ある時点における前記データの複製を、第３の前記記憶ボリュームの未使用の記憶領域に記憶する手段
を備えることを特徴とするストレージ装置。
【請求項２】
請求項１に記載のストレージ装置において、
前記第２の記憶ボリュームの状態に応じて、前記更新要求の対象となった前記ある時点における前記データの複製を、前記第３の記憶ボリュームの未使用の記憶領域に記憶する前記手段は、
前記第２の記憶ボリュームの未使用の記憶領域の記憶容量が判定値よりも小さい場合に、前記更新要求の対象となった前記ある時点における前記データの複製を、前記第３の記憶ボリュームの未使用の記憶領域に記憶する手段であること
を特徴とするストレージ装置。
【請求項３】
請求項２に記載のストレージ装置において、
前記第２の記憶ボリュームの未使用の記憶領域の記憶容量をユーザインタフェースに表示する手段
を備えることを特徴とするストレージ装置。
【請求項４】
請求項２に記載のストレージ装置において、
前記第２の記憶ボリュームの未使用の記憶領域の記憶容量に応じて、ユーザインタフェースに警告を表示する手段
を備えることを特徴とするストレージ装置。
【請求項５】
請求項１に記載のストレージ装置において、
ユーザインタフェースから入力された前記第３の記憶ボリュームを指定するための情報に応じて、前記第３の記憶ボリュームを選定する手段
を備えることを特徴とするストレージ装置。
【請求項６】
請求項１に記載のストレージ装置において、
前記ストレージ装置が備える各前記記憶ボリュームの未使用の記憶領域の記憶容量に応じて、前記第３の記憶ボリュームを選定する手段
を備えることを特徴とするストレージ装置。
【請求項７】
請求項１に記載のストレージ装置において、
前記更新要求の対象となった前記ある時点における前記データの複製を前記第２の記憶ボリュームに記憶する前記手段は、
前記第２の記憶ボリュームの記憶領域のうち前記データの複製が記憶される記憶領域の部分を、前記データを記憶するための区画に区分する手段と、
前記区画に区分された前記記憶領域の部分に前記データの複製を書き込む手段と
であることを特徴とするストレージ装置。
【請求項８】
請求項１に記載のストレージ装置において、
前記第２の記憶ボリュームの状態に応じて、前記更新要求の対象となった前記ある時点における前記データの複製を、前記第３の記憶ボリュームの未使用の記憶領域に記憶する前記手段は、
前記第２の記憶ボリュームの状態に応じて、前記更新要求の対象となった前記ある時点における前記データの複製を、前記第３の記憶ボリュームの前記未使用の記憶領域うち前記データの複製が記憶される前記未使用の記憶領域の部分を、前記データを記憶するための区画に区分する手段と、
前記区画に区分された前記未使用の記憶領域の部分に前記データの複製を書き込む手段と
であることを特徴とするストレージ装置。
【請求項９】
データを記憶するための複数の記憶ボリュームを備えるストレージ装置の制御方法であって、
ある時点の後に、第１の前記記憶ボリュームに記憶される前記ある時点における前記データの更新要求を受信するステップと、
前記更新要求の対象となった前記ある時点における前記データの複製を第２の前記記憶ボリュームに記憶するステップと、
前記第２の記憶ボリュームの状態に応じて、前記更新要求の対象となった前記ある時点における前記データの複製を、第３の前記記憶ボリュームの未使用の記憶領域に記憶するステップと
を備えることを特徴とするストレージ装置の制御方法。
【請求項１０】
請求項９に記載のストレージ装置の制御方法において、
前記第２の記憶ボリュームの状態に応じて、前記更新要求の対象となった前記ある時点における前記データの複製を、前記第３の記憶ボリュームの未使用の記憶領域に記憶する前記ステップは、
前記第２の記憶ボリュームの未使用の記憶領域の記憶容量が判定値よりも小さい場合に、前記更新要求の対象となった前記ある時点における前記データの複製を、前記第３の記憶ボリュームの未使用の記憶領域に記憶するステップであること
を特徴とするストレージ装置の制御方法。
【請求項１１】
請求項１０に記載のストレージ装置の制御方法において、
前記第２の記憶ボリュームの未使用の記憶領域の記憶容量をユーザインタフェースに表示するステップ
を備えることを特徴とするストレージ装置の制御方法。
【請求項１２】
請求項１０に記載のストレージ装置の制御方法において、
前記第２の記憶ボリュームの未使用の記憶領域の記憶容量に応じて、ユーザインタフェースに警告を表示するステップ
を備えることを特徴とするストレージ装置の制御方法。
【請求項１３】
請求項９に記載のストレージ装置の制御方法において、
ユーザインタフェースから入力された前記第３の記憶ボリュームを指定するための情報に応じて、前記第３の記憶ボリュームを選定するステップ
を備えることを特徴とするストレージ装置の制御方法。
【請求項１４】
請求項９に記載のストレージ装置の制御方法において、
前記ストレージ装置が備える各前記記憶ボリュームの未使用の記憶領域の記憶容量に応じて、前記第３の記憶ボリュームを選定するステップ
を備えることを特徴とするストレージ装置の制御方法。
【請求項１５】
請求項９に記載のストレージ装置の制御方法において、
前記更新要求の対象となった前記ある時点における前記データの複製を前記第２の記憶ボリュームに記憶する前記ステップは、
前記第２の記憶ボリュームの記憶領域のうち前記データの複製が記憶される記憶領域の部分を、前記データを記憶するための区画に区分するステップと、
前記区画に区分された前記記憶領域の部分に前記データの複製を書き込むステップと
であることを特徴とするストレージ装置の制御方法。
【請求項１６】
請求項９に記載のストレージ装置の制御方法において、
前記第２の記憶ボリュームの状態に応じて、前記更新要求の対象となった前記ある時点における前記データの複製を、前記第３の記憶ボリュームの未使用の記憶領域に記憶する前記ステップは、
前記第２の記憶ボリュームの状態に応じて、前記更新要求の対象となった前記ある時点における前記データの複製を、前記第３の記憶ボリュームの前記未使用の記憶領域うち前記データの複製が記憶される前記未使用の記憶領域の部分を、前記データを記憶するための区画に区分するステップと、
前記区画に区分された前記未使用の記憶領域の部分に前記データの複製を書き込むステップと
であることを特徴とするストレージ装置の制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ストレージ装置、及びストレージ装置の制御方法に関する。
【０００２】
【従来の技術】
コンピュータシステムにおいては、ストレージ装置に記憶されるデータをバックアップする場合など、元のデータを記憶した記憶ボリュームの複製を生成する場合がある。この場合、元のデータを記憶した記憶ボリュームと複製データを記憶した記憶ボリュームとは内容が一致し整合性が保たれる必要がある。そのためには複製の生成が完了するまでの間、元のデータを記憶した記憶ボリュームの更新を停止させる必要がある。しかし高可用性が求められるコンピュータシステムなどでは、元のデータを記憶した記憶ボリュームに対するアクセスを停止することができない場合がある。
【０００３】
そこで、元のデータを記憶した記憶ボリュームと複製データを記憶した記憶ボリュームとの間である時点での整合性を保ち、ある時点の後に元のデータが更新されたとしてもある時点の元のデータを参照できるようにすることができるスナップショットと呼ばれる技術が開発されている。
【０００４】
スナップショットの技術によれば、整合性を保つべき時点の後に元のデータが更新される場合には、整合性を保つべき時点のデータを別の記憶ボリュームに記憶するようにする。つまり元のデータは、更新されなければそのままであり、更新される場合には整合性を保つべき時点のデータが別の記憶ボリュームに記憶される。
【０００５】
【特許文献１】
特開２００１−３０６４０７号公報
【０００６】
【発明が解決しようとする課題】
しかしながら、通常、上記別の記憶ボリュームとして用意される記憶容量は、コスト抑制等のため元のデータが記憶される記憶ボリュームの記憶容量よりも小さい。
そのため従来のスナップショットの制御においては、元のデータを記憶した記憶ボリュームと複製データを記憶した記憶ボリュームとの整合性を保つことができる期間は、元のデータの更新頻度と上記別の記憶ボリュームの記憶容量と依存していた。
【０００７】
本発明は上記課題を鑑みてなされたものであり、ストレージ装置、及びストレージ装置の制御方法を提供することを主たる目的とする。
【０００８】
【課題を解決するための手段】
上記課題を解決するために、本発明に係るストレージ装置は、データを記憶するための複数の記憶ボリュームと、ある時点の後に、第１の前記記憶ボリュームに記憶される前記ある時点における前記データの更新要求を受信する手段と、前記更新要求の対象となった前記ある時点における前記データの複製を第２の前記記憶ボリュームに記憶する手段とを備え、前記第２の記憶ボリュームの状態に応じて、前記更新要求の対象となった前記ある時点における前記データの複製を、第３の前記記憶ボリュームの未使用の記憶領域に記憶する手段を備える。
【０００９】
これにより、例えば第２の記憶ボリューム（別の記憶ボリューム）の未使用記憶領域の記憶容量が判定値よりも小さくなった場合でも、第３の記憶ボリュームに前記データの複製を記憶させることにより、元のデータを記憶した記憶ボリュームと複製データを記憶した記憶ボリュームとの整合性を保つことができるようになる。また第１の記憶ボリュームに記憶されるデータに対する更新頻度に依存せずに、元のデータを記憶した記憶ボリュームと複製データを記憶した記憶ボリュームとの整合性を維持することができるようになる。
【００１０】
ここで、記憶ボリュームとは、ハードディスク装置や半導体記憶装置等により構成されるディスクドライブにより提供される物理的な記憶領域である物理ボリュームと、物理ボリューム上に論理的に設定される記憶領域である論理ボリュームとを含む記憶リソースである。またスペアディスクを記憶ボリュームとして使用することも可能である。
【００１１】
その他、本願が開示する課題、及びその解決方法は、発明の実施の形態の欄、及び図面により明らかにされる。
【００１２】
【発明の実施の形態】
以下、本発明の実施の形態について図面を用いて詳細に説明する。
＝＝＝全体構成例＝＝＝
まず、本実施の形態に係るストレージ装置２００を含む情報処理システムの全体構成を示すブロック図を図１に示す。本実施の形態に係る情報処理システムは情報処理装置１（１００）、情報処理装置２（１００）、ストレージ装置２００、管理用装置２５０を備えている。
【００１３】
＝＝＝情報処理装置＝＝＝
情報処理装置１（１００）、情報処理装置２（１００）はＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）やメモリを備えたコンピュータである。情報処理装置１００が備えるＣＰＵにより各種プログラムが実行されることにより、様々な機能が実現される。情報処理装置１００は例えば銀行の自動預金預け払いシステムや航空機の座席予約システム等における中枢コンピュータとして利用される。情報処理装置１００はメインフレームコンピュータとすることもできるし、パーソナルコンピュータとすることもできる。
【００１４】
また情報処理装置１００はストレージ装置２００と通信可能に接続されており、ストレージ装置２００に対してデータ入出力要求を送信する。データ入出力要求としては例えばデータの読み出し要求や書き込み要求（更新要求）などである。これにより情報処理装置１００はストレージ装置２００に記憶されているデータの読み出しや書き込みを行う。
【００１５】
また情報処理装置１００はストレージ装置２００に対してストレージ装置２００を管理するための各種コマンドの送信も行うようにすることができる。ストレージ装置２００を管理するためのコマンドとしては、例えば後述するスナップショットコマンド等である。なお、情報処理装置１００は２台に限られず１台とすることもできるし、３台以上とすることもできる。
【００１６】
＝＝＝ストレージ装置＝＝＝
ストレージ装置２００は、制御装置２１０、プライマリボリューム（第１の記憶ボリューム）２２０、セカンダリボリューム２３０、差分ボリューム（第２の記憶ボリューム）２４０を備えている。またストレージ装置２００は管理用装置２５０に通信可能に接続されている。
【００１７】
＝＝＝記憶ボリューム＝＝＝
プライマリボリューム２２０、差分ボリューム２４０は、データを記憶するための記憶ボリュームである。記憶ボリュームとは、ストレージ装置２００が備えるハードディスク装置や半導体記憶装置等により構成されるディスクドライブにより提供される物理的な記憶領域である物理ボリュームと、物理ボリューム上に論理的に設定される記憶領域である論理ボリュームとを含む記憶リソースである。
【００１８】
一方セカンダリボリューム２３０は、ストレージ装置２００が仮想的に備える記憶ボリュームである。情報処理装置１００はセカンダリボリューム２３０があたかも存在しているかのように、セカンダリボリューム２３０に対して例えばデータの読み出し要求を送信する。例えば図３に示すように、情報処理装置２（１００）はセカンダリボリューム２３０から読み出したデータをテープ３００等に記録しておくようにすることができる。
【００１９】
＝＝＝スナップショット制御＝＝＝
この場合ストレージ装置２００は、セカンダリボリューム２３０から読み出されるデータを、情報処理装置１００から送信されるスナップショットコマンドに応じて制御することができる。すなわちストレージ装置２００は、スナップショットコマンドに応じて、プライマリボリューム２２０に記憶されているデータと同一内容のデータがセカンダリボリューム２３０から読み出されるように制御することもできるし、ある時点のプライマリボリューム２２０に記憶されているデータがセカンダリボリューム２３０から読み出されるように制御することもできる。この制御をスナップショット制御と呼ぶ。ある時点とは、例えばストレージ装置２００がスナップショットコマンドを受信した時点とすることもできるし、スナップショットコマンドにより指示された時刻とすることもできる。
【００２０】
前者の場合、すなわちセカンダリボリューム２３０から読み出されるデータを、プライマリボリューム２２０に記憶されているデータと同一内容のデータとする場合には、例えば情報処理装置１（１００）がプライマリボリューム２２０に記憶されるデータを更新すると、ストレージ装置２００は更新後のデータがセカンダリボリューム２３０にも反映されるように制御する。このときに情報処理装置２（１００）からセカンダリボリューム２３０に記憶されているデータの読み出し要求を受信すると、ストレージ装置２００はプライマリボリューム２２０に記憶されているデータを情報処理装置２（１００）に送信する。これにより、情報処理装置１００はセカンダリボリューム２３０からデータを読み出すことにより、プライマリボリューム２２０と同一のデータを取得することができる。
【００２１】
一方後者の場合、すなわちセカンダリボリューム２３０から読み出されるデータを、ある時点のプライマリボリューム２２０に記憶されているデータとする場合には、例えば情報処理装置１（１００）がプライマリボリューム２２０に記憶されるデータを更新すると、ストレージ装置２００はプライマリボリューム２２０に記憶されていた更新前のある時点のデータを差分ボリューム２４０に記憶するように制御する。このときに情報処理装置２（１００）からセカンダリボリューム２３０に記憶されている当該データに対する読み出し要求を受信すると、ストレージ装置２００は差分ボリューム２４０に記憶されているデータを情報処理装置２（１００）に送信する。これにより、情報処理装置１００はセカンダリボリューム２３０からデータを読み出すことにより、プライマリボリューム２２０の更新有無に拘わらず、プライマリボリューム２２０のある時点のデータを取得することができる。なおこの場合、プライマリボリューム２２０に記憶される同一のデータが複数回更新されても、差分ボリューム２４０に記憶されるのは、ある時点のデータだけである。これにより、プライマリボリューム２２０には最新のデータが記憶され、差分ボリューム２４０にはある時点のデータが保持されることになる。またストレージ装置２００が情報処理装置１（１００）からプライマリボリューム２２０に記憶されるデータの更新要求を受信した場合に、更新後のデータを差分ボリューム２４０に記憶するようにすることもできる。この場合プライマリボリューム２２０には更新前のある時点のデータが記憶されることになる。
以上の処理の様子を示した図を図４に示す。
【００２２】
なお上述の後者の場合には、プライマリボリューム２２０に記憶されるデータが更新されるにつれ、差分ボリューム２４０に記憶されるプライマリボリューム２２０のある時点のデータが増加する。そのため図７に示すように、差分ボリューム２４０の未使用記憶領域の記憶容量がなくなってしまった場合には、プライマリボリューム２２０に記憶されるある時点のデータの更新要求を受信しても、ストレージ装置２００は、更新前のある時点のデータを差分ボリューム２４０に記憶することができない。
【００２３】
本実施の形態においては、そのような場合には図８に示すように、差分ボリューム２４０とは別の他の記憶ボリューム（第３の記憶ボリューム）２４１を差分ボリューム２４０として使用し、その未使用記憶領域にプライマリボリューム２２０の更新前のある時点のデータを記憶するようにする。これにより、差分ボリューム２４０の未使用記憶領域の記憶容量が少なくなった場合であっても、ある時点のプライマリボリューム２２０のデータを保持し続けることができる。
【００２４】
例えば図３に示したように、情報処理装置２（１００）がセカンダリボリューム２４０に記憶されているデータを読み出してテープ３００に書き込むことによりプライマリボリューム２２０のある時点のデータに対するバックアップ処理を行う場合に、ストレージ装置２００は、差分ボリューム２４０の状態に応じて、プライマリボリューム２２０に記憶されているある時点のデータの複製を、差分ボリューム２４０には記憶せずに、他の記憶ボリューム２４１の未使用記憶領域に記憶する。これにより、プライマリボリューム２２０のある時点のデータに対するバックアップ処理を継続することができるようになる。なお、差分ボリューム２４０の状態に応じてとは、差分ボリューム２４０の未使用記憶領域の記憶容量が判定値よりも小さくなった場合の他、未使用記憶領域の記憶容量の総記憶容量に対する割合が判定値よりも小さくなった場合や、使用済み記憶容量が判定値よりも大きくなった場合、あるいは使用済み記憶容量の総記憶容量に対する割合が判定値よりも大きくなった場合等も含む。
【００２５】
＝＝＝制御装置＝＝＝
制御装置２１０は本実施の形態に係る各種制御を実行するための手段として機能する。制御装置の構成を示すブロック図を図２に示す。
本実施の形態においては、制御装置２１０は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２１１、メモリ２１２、ホストＩ／Ｆ（ＩｎｔｅｒＦａｃｅ）２１３、ディスクＩ／Ｆ２１４、内部Ｉ／Ｆ２１５を備えている。
【００２６】
ＣＰＵ２１１は制御装置２１０の全体の制御を司るものであり、メモリ２１２に記憶されたスナップショット制御プログラム８００を実行する。メモリ２１２に記憶されたスナップショット制御プログラム８００がＣＰＵ２１１により実行されることにより本実施の形態に係るスナップショット制御が行われる。
【００２７】
メモリ２１２にはスナップショット制御プログラム８００、スナップショット管理テーブル４００、Ｓ−ＶＯＬ（Ｓｅｃｏｎｄａｒｙ  ＶＯＬｕｍｅ）変換テーブル５００、ボリューム管理テーブル６００、差分ボリューム管理テーブル７００、フォーマット管理テーブル９００が記憶されている。これらについては後述する。
【００２８】
ホストＩ／Ｆ２１３は情報処理装置１００と通信を行うための通信インタフェースとして機能する。情報処理装置１００とストレージ装置２００との間で行われる通信は、様々な通信プロトコルに従って行うようにすることができる。例えば、ファイバチャネルやＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）、ＦＩＣＯＮ（Ｆｉｂｒｅ  Ｃｏｎｎｅｃｔｉｏｎ）（登録商標）、ＥＳＣＯＮ（Ｅｎｔｅｒｐｒｉｓｅ  Ｓｙｓｔｅｍ  Ｃｏｎｎｅｃｔｉｏｎ）  （登録商標）、ＡＣＯＮＡＲＣ（Ａｄｖａｎｃｅｄ  Ｃｏｎｎｅｃｔｉｏｎ  Ａｒｃｈｉｔｅｃｔｕｒｅ）（登録商標）、ＦＩＢＡＲＣ（Ｆｉｂｒｅ  Ｃｏｎｎｅｃｔｉｏｎ  Ａｒｃｈｉｔｅｃｔｕｒｅ）（登録商標）、ＴＣＰ／ＩＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）等である。これらの通信プロトコルを混在させるようにすることもできる。例えば情報処理装置１（１００）との間の通信はファイバチャネルで行い、情報処理装置２（１００）との間の通信はＴＣＰ／ＩＰで行うようにすることもできる。情報処理装置１００がメインフレームコンピュータである場合には、例えばＦＩＣＯＮやＥＳＣＯＮ、ＡＣＯＮＡＲＣ、ＦＩＢＡＲＣが用いられる。また情報処理装置１００がオープン系の計算機である場合には、例えばファイバチャネルやＳＣＳＩ、ＴＣＰ／ＩＰが用いられる。なお、情報処理装置１００からのデータ入出力要求は、記憶ボリュームにおけるデータの管理単位であるブロックを単位として行うようにすることもできるし、ファイル名を指定することによりファイル単位に行うようにすることもできる。後者の場合にはストレージ装置２００は、情報処理装置１００からのファイルレベルでのアクセスを実現するＮＡＳ（Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）として機能する。
【００２９】
ディスクＩ／Ｆ２１４は記憶ボリュームに対するデータ入出力制御を行うための通信インタフェースとして機能する。
内部Ｉ／Ｆ２１５は管理用装置２１５と通信を行うための通信インタフェースとして機能する。またストレージ装置２００には複数の制御装置２１０が備えられるようにすることができる。この場合には、内部Ｉ／Ｆ２１５は他の制御装置２１０との間で通信を行うための通信インタフェースとして機能するようにすることもできる。
【００３０】
＝＝＝管理用装置＝＝＝
図１に戻って、管理用装置２５０はストレージ装置２００を保守・管理するために用いられるコンピュータである。管理用装置２５０を操作することにより、例えばディスクドライブの設定や、記憶ボリュームの設定、制御装置２１０において実行されるスナップショット制御プログラム８００のインストール等を行うことができる。また管理用装置２５０は記録媒体読み取り装置を備えており、記録媒体読み取り装置を用いて、スナップショット制御プログラム８００が記録された記録媒体からスナップショット制御プログラム８００を読み取るようにすることもできる。
【００３１】
またスナップショットコマンドは管理用装置２５０からストレージ装置２００に送信されるようにすることもできる。管理用装置２５０はストレージ装置２００に外付けされている形態とすることもできるし、内蔵されている形態とすることもできる。また管理用装置２５０が備える機能を情報処理装置１００が備えるようにすることもできる。
【００３２】
＝＝＝スナップショット管理テーブル、Ｓ−ＶＯＬ変換テーブル＝＝＝
次にスナップショット管理テーブル４００について図５を用いて説明する。スナップショット管理テーブル４００は、上述したスナップショット制御を行うために用いられるテーブルである。情報処理装置１００からセカンダリボリューム２３０に対してデータ入出力要求があった場合に、ＣＰＵ２１１がスナップショット管理テーブル４００を参照することにより、そのデータ入出力要求に対して、プライマリボリューム２２０にアクセスすべきなのか、差分ボリューム２４０にアクセスすべきなのかを知ることができる。スナップショット管理テーブル４００は、図５に一例として示すビットマップに限らず、リスト構造や、物理アドレスを示すポインタ等とすることもできる。スナップショット管理テーブル４００は、管理情報または制御情報として、以下に説明するようなプライマリボリューム２２０とセカンダリボリューム２３０との対応付けの管理又は制御のために用いることができるものであれば、どのような態様とすることもできる。
【００３３】
スナップショット管理テーブル４００において、プライマリボリュームＢＭ（Ｐ）４１０はプライマリボリューム２２０のデータの保持状態を示し、セカンダリボリュームＢＭ（Ｓ）４２０はセカンダリボリューム２３０のデータの保持状態を示す。具体的には、プライマリボリュームＢＭ（Ｐ）４１０又はセカンダリボリュームＢＭ（Ｓ）４２０のそれぞれにおいて、ビットの値が”０”の場合は、当該データが有効であることを示す。またビットの値が”１”の場合は、当該データが無効であることを示す。
【００３４】
なお、ビットマップ上の各ビットの指定は、プライマリボリュームＢＭ（Ｐ）４１０においては（ｘｐｉ、ｙｐｊ）（ｉ、ｊ＝１、２、…）、セカンダリボリュームＢＭ（Ｓ）４２０においては（ｘｓｉ、ｙｓｊ）（ｉ、ｊ＝１、２、…）を指定することにより行われる。
【００３５】
プライマリボリュームＢＭ（Ｐ）４１０及びセカンダリボリュームＢＭ（Ｓ）４２０のそれぞれのビットマップ上の対応するビットは、プライマリボリューム２２０及びセカンダリボリューム２３０のそれぞれ対応する記憶領域に対応する。プライマリボリュームＢＭ（Ｐ）４１０、及びセカンダリボリュームＢＭ（ｓ）４２０のそれぞれのビットの値は、プライマリボリューム２２０及びセカンダリボリューム２３０上のデータの記憶単位であるブロック、ないしトラックなどのデータの状態に対応する。例えば各ビットが１トラックに対応する場合、（ｘｐｉ，ｙｐｊ）で特定されるビットの値は、例えばプライマリボリューム２２０のシリンダ番号ｘｐｉ、ヘッド番号ｙｐｊで一意に定められるトラックのデータの状態を示す。なお、セカンダリボリューム２３０は仮想的な記憶ボリュームであるので、実際のデータはプライマリボリューム２２０や差分ボリューム２４０、他の記憶ボリューム２４１に記憶されている。そのためセカンダリボリューム２３０に対するデータ入出力要求があった場合には、図６に示すＳ−ＶＯＬ変換テーブルにより、セカンダリボリューム２３０における仮想的な記憶領域を示す（ｘｓｉ、ｙｓｊ）（ｉ、ｊ＝１、２、…）をプライマリボリューム２２０、差分ボリューム２４０、又は他の記憶ボリューム２４１における実際の記憶領域を示す（ｘｓｉ’、ｙｓｊ’）（ｉ’、ｊ’＝１、２、…）に変換して、データ入出力処理が行われる。
【００３６】
上述したように、プライマリボリュームＢＭ（Ｐ）４１０、又はセカンダリボリュームＢＭ（Ｓ）４２０において、ビットの値が”０”の場合は当該データが有効であることを示し、ビットの値が”１”の場合は当該データが無効であることを示す。例えば図５に示すように、プライマリボリュームＢＭ（Ｐ）４１０上のビットの値が全て”０”であり、セカンダリボリュームＢＭ（Ｓ）４２０上のビットの値が全て”１”である場合には、情報処理装置１００からセカンダリボリューム２３０にデータの読み出し要求があると、ストレージ装置２００は、プライマリボリューム２２０からデータを読み出して情報処理装置１００に送信する。つまりストレージ装置２００は、プライマリボリュームＢＭ（Ｐ）４１０上のビットの値を全て”０”とし、セカンダリボリュームＢＭ（Ｓ）４２０上のビットの値を全て”１とすることにより、プライマリボリューム２２０の複製をセカンダリボリューム２３０に記憶しているかのように制御を行うことができる。
【００３７】
一方、ストレージ装置２００が情報処理装置１００からスナップショットコマンドを受信し、ある時点のプライマリボリューム２２０のデータの複製がセカンダリボリューム２３０に記憶されているかのように制御する場合には、ある時点の後に情報処理装置１００からプライマリボリューム２２０のデータに対する更新要求を受信すると、更新前のある時点のデータを差分ボリューム２４０に記憶し、更新後のデータをプライマリボリューム２２０に記憶すると共に、プライマリボリュームＢＭ（Ｐ）４１０、及びセカンダリボリュームＢＭ（Ｓ）４２０のビットの値をどちらも”０”に更新する。この場合にプライマリボリューム２２０に対するデータ読み出し要求があった場合には、プライマリボリューム２２０から更新後のデータが読み出され、セカンダリボリューム２３０に対するデータ読み出し要求があった場合には、プライマリボリューム２２０からではなく、差分ボリューム２４０または他の記憶ボリューム２４１から更新前のある時点のデータが読み出される。
【００３８】
もちろん、上記のようにある時点のプライマリボリューム２２０のデータの複製がセカンダリボリューム２３０に記憶されているかのように制御する場合であっても、プライマリボリューム２２０のデータに対する更新要求を受信していない場合には、ある時点のデータはプライマリボリューム２２０に記憶されたままであるので、プライマリボリュームＢＭ（Ｐ）４１０の当該データに対するビットの値は”０”であり、セカンダリボリュームＢＭ（Ｓ）４２０の当該データに対するビットの値は”１である。従って、この場合に情報処理装置１００からセカンダリボリューム２３０にデータの読み出し要求があった場合には、ストレージ装置２００は、プライマリボリューム２２０からデータを読み出して情報処理装置１００に送信する。
【００３９】
このように、ストレージ装置２００は、スナップショット管理テーブル４００を参照することにより、情報処理装置１００からセカンダリボリューム２３０にデータ入出力要求があった場合に、プライマリボリューム２２０からデータを読み出すべきなのか、差分ボリューム２４０からデータを読み出すべきなのかを知ることができる。
【００４０】
なおスナップショット管理テーブル４００は、制御装置２１０内のメモリ２１２上に設けられる制御情報として重要であり、メモリ２１２が揮発性メモリの場合は、不揮発性メモリにスナップショット管理テーブル４００のバックアップを取っておくようにすることもできる。またスナップショット管理テーブル４００をストレージ装置２００が備える記憶ボリュームに記憶するようにすることもできる。後述するその他の各テーブルについても同様である。
【００４１】
＝＝＝ボリューム管理テーブル、差分ボリューム管理テーブル＝＝＝
次に、本実施の形態に係るボリューム管理テーブル６００について図９を用いて説明する。ボリューム管理テーブル６００は、ストレージ装置２００が備える記憶ボリュームを管理するためのテーブルである。
【００４２】
ボリューム管理テーブル６００は、”ＬＵＮ”欄、”記憶容量”欄、”空き容量”欄、”スナップショット用ボリューム管理”欄、”用途”欄を備える。”スナップショット用ボリューム管理”欄は、さらに”ボリューム種別”欄、”ペアボリュームＮＯ”欄、”差分ボリュームＮＯ”欄、”差分ボリューム使用可否”欄を備える。
”ＬＵＮ”欄は、記憶ボリュームを識別するための番号である。例えば管理用装置２５０等を用いて記憶ボリュームを設定する際に付与される。
”記憶容量”欄は、記憶ボリュームの総記憶容量を示す。”記憶容量”欄に「−」と記載されている記憶ボリュームは、ストレージ装置２００が仮想的に備える記憶ボリュームであることを示す。
”空き容量”欄は、記憶ボリュームの未使用記憶領域の記憶容量を示す。”記憶容量”欄に「−」と記載されている記憶ボリュームは、”空き容量”欄も「−」と記載されている。
【００４３】
”ボリューム種別”欄は、当該記憶ボリュームが、スナップショット制御においてプライマリボリューム２２０して用いられるのか、セカンダリボリューム２３０として用いられるのか、差分ボリューム２４０として用いられるのかを示す。「Ｐ」と記載されている場合はプライマリボリューム２２０として用いられる記憶ボリュームであることを示す。「Ｓ」と記載されている場合はセカンダリボリューム２３０として用いられる記憶ボリュームであることを示す。「差分」と記載されている場合は差分ボリューム２４０として用いられる記憶ボリュームであることを示す。「−」と記載されている場合はスナップショット制御の対象ではない記憶ボリュームであることを示す。なお上述したように、セカンダリボリューム２３０はストレージ装置２００が仮想的に備える記憶ボリュームであるから、”ボリューム種別”欄が「Ｓ」である記憶ボリュームについては、”記憶容量”欄、”空き容量”欄には「−」と記されている。
【００４４】
”ペアボリュームＮＯ”欄には、プライマリボリューム２２０またはセカンダリボリューム２３０の、それぞれのセカンダリボリューム２３０またはプライマリボリューム２２０のＬＵＮが記載される。
【００４５】
”差分ボリュームＮＯ”欄にはプライマリボリューム２２０に対する差分ボリューム２４０のＬＵＮが記載される。図９に示す例では、ＬＵＮ＝１のプライマリボリューム２２０に対する差分ボリューム２４０はＬＵＮ＝６である。またＬＵＮ＝３のプライマリボリューム２２０に対する差分ボリューム２４０はＬＵＮ＝５及びＬＵＮ＝９である。ここでＬＵＮ＝５の”空き容量”欄に着目すると、０ＧＢ（Ｇｉｇａ  Ｂｙｔｅ）と記載されている。つまり差分ボリューム２４０の記憶領域を使いきってしまっている状態であることが分かる。そのため、ＬＵＮ＝９の未使用記憶領域を差分ボリューム２４０として使用することにより、プライマリボリューム２２０（ＬＵＮ＝３）のある時点のデータの記憶を継続して行うようにしている。
【００４６】
”差分ボリューム使用可否”欄は、当該記憶ボリュームについて差分ボリューム２４０としての使用を許可するかどうかを示す欄である。「○」と記載されている場合は、当該記憶ボリュームは差分ボリューム２４０として使用されることが許可されていることを表す。「−」と記載されている場合には、当該記憶ボリュームは差分ボリューム２４０として使用されることが許可されていないことを表す。例えばＬＵＮ＝６の空き容量は現在は１００ＧＢあるが、将来０ＧＢになった場合には他の記憶ボリューム２４１の未使用記憶領域を差分ボリューム２４０として使用することになる。その際”差分ボリューム使用可否”欄に「○」が記載されている記憶ボリュームの中から他の記憶ボリューム２４１が選定される。
【００４７】
なお差分ボリューム２４０として使用する他の記憶ボリューム２４１の選定は、図１０に示す差分ボリューム管理テーブル７００を参照して行うようにすることもできる。差分ボリューム管理テーブル７００は、プライマリボリューム２２０毎に差分ボリューム２４０の候補となる記憶ボリュームが記載されたものである。差分ボリューム管理テーブル７００は、例えば管理用装置２５０が備えるユーザインタフェースからオペレータ等により入力された差分ボリューム２４０の候補を指定するための情報に応じて作成されるようにすることができる。
【００４８】
差分ボリューム２４０として使用する他の記憶ボリューム２４１の選定は、差分ボリューム管理テーブル７００を参照して行う場合であっても参照せずに行う場合であっても、例えば候補となる記憶ボリュームの中から、空き容量に応じて記憶ボリュームを選定するようにすることもできるし、ＬＵＮに応じて記憶ボリュームを選定するようにすることもできる。また単位時間当たりのデータ入出力要求の回数に応じて記憶ボリュームを選定するようにすることもできるし、空き容量の総記憶容量に対する割合に応じて記憶ボリュームを選定するようにすることもできる。さらには、例えば管理用装置２５０が備えるユーザインタフェースから、オペレータ等が差分ボリューム２４０として使用する記憶ボリュームを指定するための情報を入力することにより、記憶ボリュームを選定するようにすることもできる。
【００４９】
”用途”欄は、各記憶ボリュームの使用用途を示す。「ＤＢ」と記載されている場合はデータベースアプリケーションにより使用される記憶ボリュームであることを示す。「ＷＥＢ」と記載されている場合はＷＥＢアプリケーションにより使用される記憶ボリュームであることを示す。「ＦＳ」と記載されている場合はオペレーティングシステムにより使用される記憶ボリュームであることを示す。「−」と記載されている場合は特に特定のアプリケーションに使用されている記憶ボリュームではないことを示す。例えばＬＵＮ＝５は差分ボリューム２４０としてのみ使用されている。なお、”用途”欄に例えば「ＤＢ」と記載されている場合であっても、データベースアプリケーション以外の他のアプリケーションと共用されているようにすることもできる。また各記憶ボリュームは上記以外の用途に使用されるようにすることもできる。
【００５０】
図９に示すボリューム管理テーブル６００に記載される内容や、図１０に示す差分ボリューム管理テーブル７００記載される内容は、管理用装置２５０や情報処理装置１００が備えるユーザインタフェースに表示するようにすることができる。例えば差分ボリューム２４０の空き容量が表示されることにより、オペレータ等は差分ボリューム２４０の未使用記憶領域の記憶容量を把握することができる。これにより、例えば差分ボリューム２４０が不足してきたと判断した場合には、差分ボリューム２４０の記憶領域を使いきってしまう前にディスクドライブを増設して、差分ボリューム２４０の記憶容量を増やすようにすることもできる。またストレージ装置２００が備える記憶ボリュームの設定を変更して差分ボリューム２４０の記憶容量を増やすようにすることもできる。
【００５１】
＝＝＝プライマリボリュームからのデータの読み出し処理＝＝＝
次に、本実施の形態に係るプライマリボリューム２２０からデータを読み出す場合の処理のフローチャートを図１１に示す。なお以下の処理は、本実施の形態に係る各種の動作を行うためのコードから構成されるスナップショット制御プログラム８００を、ＣＰＵ２１１が実行することにより実現される。以下に説明するその他の処理についても同様である。
【００５２】
まずストレージ装置２００は情報処理装置１００からプライマリボリューム２２０に対するデータの読み出し要求を受信する。そうすると、まずスナップショット管理テーブル４００をチェックし、目的のデータをプライマリボリューム２２０から読み出すべきなのか、セカンダリボリューム２３０から読み出すべきなのかを判定する（Ｓ１０００）。プライマリボリュームＢＭ（Ｐ）４１０上のビットの値が”０”であり、セカンダリボリュームＢＭ（Ｓ）４２０上のビットの値が”１”である場合には、プライマリボリューム２２０に記憶されているデータが有効なデータであるので、Ｓ１００１において”ＹＥＳ”に進む。そしてプライマリボリューム２２０から目的のデータを読み出して情報処理装置１００に送信する（Ｓ１００２）。
【００５３】
一方、プライマリボリュームＢＭ（Ｐ）４１０上のビットの値が”１”であり、セカンダリボリュームＢＭ（Ｓ）４２０上のビットの値が”０”である場合には、セカンダリボリューム２３０に記憶されているデータが有効なデータであるので、Ｓ１００１において”ＮＯ”に進む。そしてＳ−ＶＯＬ変換テーブル５００を参照して目的のデータの記憶位置を取得し（Ｓ１００３）、差分ボリューム２４０からデータを読み出して情報処理装置１００に送信する（Ｓ１００４）。
【００５４】
＝＝＝プライマリボリュームへのデータの書き込み処理＝＝＝
次に、本実施の形態に係るプライマリボリューム２２０へデータを書き込む場合の処理のフローチャートを図１２に示す。
まずストレージ装置２００は情報処理装置１００からプライマリボリューム２２０に対するデータの書き込み要求を受信する。そしてスナップショット管理テーブル４００をチェックし（Ｓ２０００）、プライマリボリューム２２０に記憶されている更新前のデータをセカンダリボリューム２３０に反映する必要があるのか、ないのかを判定する。例えば、ストレージ装置２００がプライマリボリューム２２０に記憶されているデータと同一内容のデータがセカンダリボリューム２３０から読み出されるように制御している場合には、更新前のプライマリボリューム２２０に記憶されているデータをセカンダリボリューム２３０に反映する必要はない。また、ストレージ装置２００がある時点のプライマリボリューム２２０に記憶されているデータがセカンダリボリューム２３０から読み出されるように制御している場合には、ある時点のデータがセカンダリボリューム２３０に未反映であれば反映する必要があるし、反映済みであれば反映する必要はない。
【００５５】
プライマリボリューム２２０のある時点のデータをセカンダリボリューム２３０に反映する必要がない場合には、Ｓ２００１において”ＹＥＳ”に進む。そしてプライマリボリューム２２０にデータを書き込む（Ｓ２００２）。
一方、プライマリボリューム２２０のある時点のデータをセカンダリボリューム２３０に反映する必要がある場合には、Ｓ２００１において”ＮＯ”に進む。そしてボリューム管理テーブル６００を参照し、差分ボリューム２４０の未使用記憶領域の記憶容量すなわち空き容量をチェックする（Ｓ２００３）。
【００５６】
空き容量が規定容量（判定値）以上ある場合には、”ＹＥＳ”に進む（Ｓ２００４）。そして当該データのセカンダリボリューム２３０における記憶位置と、差分ボリューム２４０における記憶位置とをＳ−ＶＯＬ変換テーブル５００に登録し（Ｓ２００５）、差分ボリューム２４０にある時点のプライマリボリューム２２０のデータの複製を書き込む（Ｓ２００６）。なお、Ｓ２００４における空き容量と規定容量との比較において、例えば空き容量が規定容量よりも大きい場合に”ＹＥＳ”に進むようにすることもできる。次に、スナップショット管理テーブル４００のプライマリボリュームＢＭ（Ｐ）４１０及びセカンダリボリュームＢＭ（Ｓ）４２０のビットの値を共に”０”に更新し（Ｓ２００７）、プライマリボリューム２２０にデータを書き込む（Ｓ２００２）。
【００５７】
Ｓ２００４において、差分ボリューム２４０の空き容量が規定容量以上ない場合には、”ＮＯ”に進む。この場合は、ある時点のプライマリボリューム２２０のデータを記憶する差分ボリューム２４０として使用するための他の記憶ボリューム２４１を選定することが必要になる。選定は、上述したように例えばボリューム管理テーブル６００や差分ボリューム管理テーブル７００を参照することにより行うことができる（Ｓ２００８）。差分ボリューム２４０として使用するための他の記憶ボリューム２４１が選定できた場合には、Ｓ２００９において”ＹＥＳ”に進む。そしてボリューム管理テーブル６００の各記憶ボリュームについての情報を更新して（Ｓ２０１０）、Ｓ２００３に戻る。その後はＳ２００４にて”ＹＥＳ”に進み、上述した各ステップの処理を行って（Ｓ２００５乃至Ｓ２００７）、プライマリボリューム２２０にデータを書き込む（Ｓ２００２）。
【００５８】
なおＳ２００６において、上記選定された他の記憶ボリューム２４１の未使用記憶領域にある時点のプライマリボリューム２２０のデータの複製を書き込む場合には、当該未使用記憶領域のうちデータアクセス性能の低い記憶領域に書き込むようにすることもできる。例えばディスクドライブなどでは、ディスクの外周側のトラックほど、１トラックあたりのセクタの数が多いものがある。この場合ディスクの外周側と内周側とではディスクが１回転する時間の間に読み書きすることができるデータ量が異なり、ディスクの内周側ほどデータアクセス性能が低いことになる。ディスクの外周側のようなデータアクセス性能の高い記憶領域は、例えば情報処理装置１００が情報処理サービスを提供するためのデータを記憶するために使用するようにし、ディスクの内周側のようなデータアクセス性能の低い記憶領域は、本実施の形態におけるプライマリボリューム２２０のある時点のデータを記憶するために使用するようにする。これにより、他の記憶ボリューム２４１の未使用記憶領域にある時点のプライマリボリューム２２０のデータの複製を書き込むようにしても、他の記憶ボリューム２４１を用いて提供される本来の情報処理サービスに与える影響を抑制することができる。なお、記憶ボリュームのうちデータアクセス性能の低い記憶領域は、例えば上述したトラック番号により識別することができる。またデータの記憶アドレスやセクタ番号等によっても識別することができる。
【００５９】
一方、Ｓ２００８において差分ボリューム２４０として使用するための他の記憶ボリューム２４１が選定できなかった場合には、Ｓ２００９において”ＮＯ”に進む。差分ボリューム２４０として使用するための他の記憶ボリューム２４１が選定できなかった場合とは、例えば差分ボリューム２４０として使用可能な記憶ボリュームがボリューム管理テーブル６００に登録されていない場合や、差分ボリューム管理テーブル７００に差分ボリューム候補が登録されていない場合、あるいは差分ボリューム２４０として使用可能な全ての記憶ボリュームを既に差分ボリューム２４０として使用してしまっている場合などである。続いてＳ２０１１にて、差分ボリューム２４０の未使用記憶領域に、ある時点のプライマリボリューム２２０のデータをまだ書き込めるだけの記憶容量が残っているかどうかを判定し、まだ残っている場合には”ＮＯ”に進む。そして例えば管理用装置２５０が備えるユーザインタフェースに警告を表示する（Ｓ２０１２）。警告が表示されることにより、ストレージ装置２００を管理するオペレータは、差分ボリューム２４０を使い切ってしまう前に対策を行うことが可能となる。例えばディスクドライブを増設して差分ボリューム２４０の記憶容量を増やすようにすることもできる。あるいはスナップショットコマンドをストレージ装置２００に送信して、ある時点のプライマリボリューム２２０のデータの維持を中止するようにすることもできる。
【００６０】
Ｓ２０１１にて、差分ボリューム２４０の未使用記憶領域に、ある時点のプライマリボリューム２２０のデータをまだ書き込めるだけの記憶容量が残っていない場合には”ＹＥＳ”に進む。そして例えば管理用装置２５０が備えるユーザインタフェースに警告を表示し（Ｓ２０１３）、ある時点のプライマリボリューム２２０のデータの維持を中止する（Ｓ２０１４）。これにより差分ボリューム２４０に記憶されているある時点のプライマリボリューム２２０のデータが無効とされる。スナップショット管理テーブル４００のプライマリボリュームＢＭ（Ｐ）４１０のビットが”０”に更新され、セカンダリボリュームＢＭ（Ｓ）４２０のビットの値が”１”に更新される。そしてプライマリボリューム２２０にデータを書き込む（Ｓ２００２）。
【００６１】
＝＝＝セカンダリボリュームからのデータの読み出し処理＝＝＝
次に、本実施の形態に係るセカンダリボリューム２３０からデータを読み出す場合の処理のフローチャートを図１３に示す。
まずストレージ装置２００は情報処理装置１００からセカンダリボリューム２３０に対するデータの読み出し要求を受信する。そうすると、まずスナップショット管理テーブル４００をチェックし、目的のデータをプライマリボリューム２２０から読み出すべきなのか、セカンダリボリューム２３０から読み出すべきなのかを判定する（Ｓ３０００）。プライマリボリュームＢＭ（Ｐ）４１０上のビットの値が”０”であり、セカンダリボリュームＢＭ（Ｓ）４２０上のビットの値が”１”である場合には、プライマリボリューム２２０に記憶されているデータが有効なデータであるので、Ｓ３００１において”ＮＯ”に進む。そしてスナップショット管理テーブル４００を参照して、セカンダリボリューム２３０の当該データに対応するプライマリボリューム２２０の記憶位置を特定し（Ｓ３００４）、プライマリボリューム２２０から目的のデータを読み出して情報処理装置１００に送信する（Ｓ３００５）。
【００６２】
一方、プライマリボリュームＢＭ（Ｐ）４１０上のビットの値が”１”であり、セカンダリボリュームＢＭ（Ｓ）４２０上のビットの値が”０”である場合、又はどちらの値も”０”であるには、セカンダリボリューム２３０に記憶されているデータが有効なデータであるので、Ｓ３００１において”ＹＥＳ”に進む。そしてＳ−ＶＯＬ変換テーブル５００を参照して目的のデータの記憶位置を取得し（Ｓ３００２）、差分ボリューム２４０からデータを読み出して情報処理装置１００に送信する（Ｓ３００３）。
【００６３】
＝＝＝セカンダリボリュームへのデータの書き込み処理＝＝＝
次に、本実施の形態に係るセカンダリボリューム２３０へデータを書き込む場合の処理のフローチャートを図１４に示す。
まずストレージ装置２００は情報処理装置１００からセカンダリボリューム２３０に対するデータの書き込み要求を受信する。そしてスナップショット管理テーブル４００をチェックし（Ｓ４０００）、プライマリボリューム２２０に記憶されている更新前のデータがセカンダリボリューム２３０に反映済みであるのか、未反映であるのかを判定する。例えば、ある時点のデータがセカンダリボリューム２３０に未反映であれば反映する必要があるし、反映済みであれば反映する必要はない。
【００６４】
プライマリボリューム２２０のある時点のデータをセカンダリボリューム２３０に反映済みの場合には、Ｓ４００１において”ＹＥＳ”に進む。そしてセカンダリボリューム２３０にデータを書き込む（Ｓ４００２）。実際には、Ｓ−ＶＯＬ変換テーブル５００に記憶されているセカンダリボリューム２３０に対応する差分ボリューム２４０における記憶位置にデータを書き込む（Ｓ４００２）。
一方、プライマリボリューム２２０のある時点のデータがセカンダリボリューム２３０に未反映である場合には、Ｓ４００１において”ＮＯ”に進む。そしてボリューム管理テーブル６００を参照し、差分ボリューム２４０の未使用記憶領域の記憶容量すなわち空き容量をチェックする（Ｓ４００３）。
【００６５】
空き容量が規定容量（判定値）以上ある場合には、”ＹＥＳ”に進む（Ｓ４００４）。そして当該データのセカンダリボリューム２３０における記憶位置と、差分ボリューム２４０における記憶位置とをＳ−ＶＯＬ変換テーブル５００に登録し（Ｓ４００５）、差分ボリューム２４０にある時点のプライマリボリューム２２０のデータの複製を書き込む（Ｓ４００６）。なお、Ｓ４００４における空き容量と規定容量との比較において、例えば空き容量が規定容量よりも大きい場合に”ＹＥＳ”に進むようにすることもできる。次にスナップショット管理テーブル４００のプライマリボリュームＢＭ（Ｐ）４１０及びセカンダリボリュームＢＭ（Ｓ）４２０のビットの値を共に”０”に更新し（Ｓ４００７）、セカンダリボリューム２３０、すなわち差分ボリューム２４０にデータを書き込む（Ｓ４００２）。
【００６６】
Ｓ４００４において、差分ボリューム２４０の空き容量が規定容量以上ない場合には、”ＮＯ”に進む。この場合は、ある時点のプライマリボリューム２２０のデータを記憶する差分ボリューム２４０として使用するための他の記憶ボリューム２４１を選定することが必要になる。選定は、上述したように例えばボリューム管理テーブル６００や差分ボリューム管理テーブル７００を参照することにより行うことができる（Ｓ４００８）。差分ボリューム２４０として使用するための他の記憶ボリューム２４１が選定できた場合には、Ｓ４００９において”ＹＥＳ”に進む。そしてボリューム管理テーブル６００の各記憶ボリュームについての情報を更新して（Ｓ４０１０）、Ｓ４００３に戻る。その後はＳ４００４にて”ＹＥＳ”に進み、上述した各ステップの処理を行って（Ｓ４００５乃至Ｓ４００７）、セカンダリボリューム２３０すなわち差分ボリューム２４０にデータを書き込む（Ｓ４００２）。
【００６７】
なおＳ４００６において、上記選定された他の記憶ボリューム２４１の未使用記憶領域にある時点のプライマリボリューム２２０のデータの複製を書き込む場合には、当該未使用記憶領域のうちデータアクセス性能の低い記憶領域に書き込むようにすることもできる。
【００６８】
一方、Ｓ４００８において差分ボリューム２４０として使用するための他の記憶ボリューム２４１が選定できなかった場合には、Ｓ４００９において”ＮＯ”に進む。続いてＳ４０１１にて、差分ボリューム２４０の未使用記憶領域に、ある時点のプライマリボリューム２２０のデータをまだ書き込めるだけの記憶容量が残っているかどうかを判定し、まだ残っている場合には”ＮＯ”に進む。そして例えば管理用装置２５０が備えるユーザインタフェースに警告を表示する（Ｓ４０１２）。警告が表示されることにより、ストレージ装置２００を管理するオペレータは、差分ボリューム２４０を使い切ってしまう前に対策を行うことが可能となる。例えばディスクドライブを増設して差分ボリューム２４０の記憶容量を増やすようにすることもできる。あるいはスナップショットコマンドをストレージ装置２００に送信して、ある時点のプライマリボリューム２２０のデータの維持を中止するようにすることもできる。
【００６９】
Ｓ４０１１において、差分ボリューム２４０の未使用記憶領域に、ある時点のプライマリボリューム２２０のデータをまだ書き込めるだけの記憶容量が残っていない場合には”ＹＥＳ”に進む。そして例えば管理用装置２５０が備えるユーザインタフェースに警告を表示し（Ｓ４０１３）、ある時点のプライマリボリューム２２０のデータの維持を中止する（Ｓ４０１４）。
【００７０】
＝＝＝記憶ボリュームへのデータの書き込みについて＝＝＝
一般に、ストレージ装置２００が備える記憶ボリュームへデータを書き込むためには、当該記憶ボリュームに対するフォーマット処理を行っておく必要がある。フォーマット処理とは、記憶ボリュームを構成するディスクドライブ等の記憶メディアにより提供される記憶領域を、データを記憶するための区画に区分することにより、データの書き込みや読み出しを可能とするための処理である。区画とは、例えばディスクドライブに設定されるトラック上に設定されるセクタとすることができる。
【００７１】
本実施の形態に係るストレージ装置２００においては、フォーマット処理として２種類の方式を実行可能である。すなわち図１７に示すように、第１のフォーマット方式と第２のフォーマット方式とである。なお第１のフォーマット方式でフォーマット処理を行うか、第２のフォーマット方式でフォーマット処理を行うかは、例えば管理用装置２５０が備えるユーザインタフェースからの指示により、切り替えるようにすることができる。もちろん、本実施の形態に係るストレージ装置２００は、例えば第２のフォーマット方式のみを実行可能とすることもできる。
【００７２】
第１のフォーマット方式では、ストレージ装置２００は、情報処理装置１００や管理用装置２５０からフォーマット処理実行の指示を受信すると、指定された記憶ボリュームに対するフォーマット処理を開始する。しかしフォーマット処理を行っている間はその記憶ボリュームに対するデータ入出力要求を受け付けない。フォーマット処理が完了した後にその記憶ボリュームに対するデータ入出力要求の受け付けを開始する。
【００７３】
一方第２のフォーマット方式では、ストレージ装置２００は、情報処理装置１００や管理用装置２５０からフォーマット処理実行の指示を受信すると、指定された記憶ボリュームに対するフォーマット処理を開始するが、フォーマット処理を行っている間であってもその記憶ボリュームに対するデータ入出力要求を受け付ける。この場合、ストレージ装置２００はフォーマット処理が完了していなくても、当該記憶ボリュームに対するデータ入出力要求を受信した場合には、あたかもフォーマット処理が完了しているかのようにデータ入出力制御を行う。
【００７４】
このため、第２のフォーマット方式でフォーマット処理を行っている間にデータ入出力要求を受け付けた場合には、まだフォーマット処理が済んでいない記憶領域に対してデータ入出力処理を行わなければならない場合がある。例えば本実施の形態において、差分ボリューム２４０のフォーマット処理が第２のフォーマット方式で実行される場合には、図１２及び図１４において説明した差分ボリューム２４０へのデータの書き込みの際に、当該データが書き込まれる予定の記憶領域のフォーマット処理が完了していない場合がある。この場合は図１８に示すように、当該データを書き込むために必要な記憶領域についてフォーマット処理を先に行ってからデータを書き込むようにする。これにより、フォーマット処理がまだ完了していない記憶ボリュームに対してデータ入出力要求があった場合であってもデータ入出力処理を行うことが可能となる。
【００７５】
以下、本実施の形態に係る第２のフォーマット方式について説明する。
第２のフォーマット方式により記憶ボリュームのフォーマット処理を行う場合には、上述した区画毎にフォーマット処理が済んでいるか、済んでいないかをフォーマット管理テーブル９００を用いて管理する。フォーマット管理テーブル９００を用いてフォーマット処理が行われる様子を図１５に示す。フォーマット管理テーブル９００は記憶ボリューム毎に設けられるようにすることができる。
【００７６】
フォーマット管理テーブル９００の一例を図１６に示す。図１６において（ｘｆｉ、ｙｆｊ）（ｉ、ｊ＝１、２、…）は記憶ボリューム上の記憶位置を区画毎に特定するための情報である。例えば各区画がディスクドライブ上の１セクタに対応する場合には、ｘｆｉ（ｉ＝１、２、…）は例えばディスクドライブ上に設定されるトラック番号に対応し、ｙｆｊ（ｊ＝１、２、…）はトラック上に設定されるセクタ番号に対応するようにすることができる。そしてフォーマット処理が済んでいる区画に対しては、フォーマット管理テーブル９００において”１”が記載される。フォーマット処理が済んでいない区画に対しては”０”が記載される。これによりストレージ装置２００は、記憶ボリュームの各区画についてフォーマット処理が済んでいるのか、済んでいないのかを管理することができる。そのためフォーマット処理中であっても情報処理装置１００からデータ入出力要求を受け付けることができ、フォーマット処理が済んでいない記憶領域に対するデータ入出力要求であってもデータ入出力処理を行うようにすることが可能となる。
【００７７】
次に第２のフォーマット形式でフォーマット処理が行われている記憶ボリュームに対してデータの書き込み要求があった場合の処理の流れについて、図１９に示すフローチャートを用いて説明する。なお図１９においては、上述した差分ボリューム２４０に対して第２のフォーマット方式でフォーマット処理が行われている場合について記載されているが、他の記憶ボリュームに対して第２のフォーマット方式でフォーマット処理が行われている場合も同様である。また以下の処理は、本実施の形態に係る各種の動作を行うためのコードから構成されるスナップショット制御プログラム８００を、ＣＰＵ２１１が実行することにより実現される。もちろん、ＣＰＵ２１１はスナップショット制御プログラム８００の他に、他のプログラムを実行することにより以下の処理を実現するようにすることもできる。
【００７８】
まずストレージ装置２００は、情報処理装置１００からデータの書き込み要求を受信する（Ｓ５０００）。次にデータ書き込み要求の対象となっている記憶ボリュームについてフォーマット処理が完了しているかどうかをチェックする（Ｓ５００１）。このチェックは、例えばフォーマット処理が完了しているかどうかを示すフラグを記憶ボリューム毎に設けて、このフラグをチェックすることにより行うようにすることができる。この場合、フラグは記憶ボリュームに対するフォーマット処理を完了したときに、ストレージ装置２００によりセットされる。次に、当該記憶ボリュームに対するフォーマット処理が完了している場合には”完了”に進み、差分ボリューム２４０にデータを書き込む（Ｓ５００２）。
【００７９】
フォーマット処理が完了していない場合には”未完”に進む。そしてフォーマット管理テーブル９００を参照して、当該データ入出力要求の対象となっている記憶領域についてのフォーマットが済んでいるかどうかをチェックする（Ｓ５００３）。フォーマット処理が完了している場合には”１”に進み、差分ボリューム２４０にデータを書き込む（Ｓ５００４）。
【００８０】
フォーマット処理が完了していない場合には、”０”に進む。そしてまず当該記憶領域に対するフォーマット処理を行うために、データ入出力要求の処理を一時的に停止する（Ｓ５００５）。その間に当該記憶領域に対するフォーマット処理を行う（Ｓ５００６）。そしてフォーマット管理テーブル９００の更新を行った後（Ｓ５００７）、データ入出力要求の処理を再開し、差分ボリューム２４０の当該記憶領域にデータを書き込む（Ｓ５００８）。
【００８１】
これにより、第２のフォーマット方式によってフォーマット処理を行っている間であってもデータ入出力要求を受信することができ、フォーマット処理が済んでいない記憶領域に対するデータ入出力要求であってもデータ入出力処理を行うようにすることができる。
【００８２】
以上説明したように、本実施の形態によれば、スナップショット制御に用いられる差分ボリューム２４０の記憶容量が不足した場合であっても、スナップショット制御を継続することが可能となる。
【００８３】
これにより、例えばあらかじめ差分ボリューム２４０として用意しておく記憶容量を抑制することが可能となる。あらかじめ用意しておく差分ボリューム２４０を無くすようにすることも可能である。差分ボリューム２４０はプライマリボリューム２２０の更新前のある時点のデータを記憶するための記憶ボリュームであり、情報処理装置１００により提供される情報処理サービスのために使用される記憶ボリュームではない。このため、本実施の形態により、差分ボリューム２４０として用意しておく記憶容量を抑制可能となったことにより、コンピュータシステム及びストレージ装置２００のコストパフォーマンスを向上させることが可能となる。
【００８４】
また、例えばバックアップ処理の実行中に差分ボリューム２４０の記憶領域を使い切ってしまった場合であっても、バックアップ処理を中止する必要がなくなる。これによりバックアップ処理を確実に行えるようにできるため、コンピュータシステムの信頼性を向上させることができる。
【００８５】
同様に、例えばセカンダリボリューム２３０に仮想的に記憶されている、ある時点のプライマリボリューム２２０のデータを用いて、テストプログラムの実行やシミュレーションプログラムの実行を行う場合にも、プログラムの実行中に差分ボリューム２４０の記憶領域を使い切ってしまったとしても、プログラムの実行を継続することが可能となる。
【００８６】
また本実施の形態においては、差分ボリューム２４０の空き容量が管理用装置２５０や情報処理装置１００が備えるユーザインタフェースに表示される。これによりコンピュータシステムを管理するオペレータは、スナップショット制御の実施状況を把握することができ、例えば差分ボリューム２４０の増設等の処置を的確に行うことが可能となる。
【００８７】
また差分ボリューム２４０の空き容量が少なくなった場合には、管理用装置２５０や情報処理装置１００が備えるユーザインタフェースに警告が表示される。これによりコンピュータシステムを管理するオペレータは、差分ボリューム２４０を使い切って突然スナップショット制御が中止されてしまう前に、例えばディスクドライブを増設して差分ボリューム２４０の記憶容量を増やす等の対策や、スナップショット制御の中止等の処置を行うことが可能となる。
【００８８】
また本実施の形態においては、記憶ボリュームに対するフォーマット処理を行っている間であっても、その記憶ボリュームに対するデータ入出力要求を受け付けることができる。これにより、フォーマット処理中であっても情報処理装置１００からデータ入出力要求を受け付け、フォーマット処理が済んでいない記憶領域に対するデータ入出力要求であってもデータ入出力処理を行うようにすることが可能となる。
【００８９】
以上本実施の形態について説明したが、上記実施例は本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明はその趣旨を逸脱することなく変更、改良され得ると共に、本発明にはその等価物も含まれる。
【００９０】
【発明の効果】
ストレージ装置、及びストレージ装置の制御方法を提供することができる。
【図面の簡単な説明】
【図１】本実施の形態に係るストレージ装置を含む情報処理システムの全体構成を示すブロック図である。
【図２】本実施の形態に係るストレージ装置における制御装置の構成を示すブロック図である。
【図３】本実施の形態に係るスナップショットにおけるプライマリボリューム及びセカンダリボリュームを示す図である。
【図４】本実施の形態に係るスナップショットにおける処理の概要を示す図である。
【図５】本実施の形態に係るスナップショット管理テーブルを示す図である。
【図６】本実施の形態に係るＳ−ＶＯＬ変換テーブルを示す図である。
【図７】本実施の形態に係るスナップショットにおける処理の概要を示す図である。
【図８】本実施の形態に係るスナップショットにおける処理の概要を示す図である。
【図９】本実施の形態に係るボリューム管理テーブルを示す図である。
【図１０】本実施の形態に係る差分ボリューム管理テーブルを示す図である。
【図１１】本実施の形態に係るプライマリボリュームへのデータの読み出し処理を示すフローチャートである。
【図１２】本実施の形態に係るプライマリボリュームへのデータの書き込み処理を示すフローチャートである。
【図１３】本実施の形態に係るセカンダリボリュームへのデータの読み出し処理を示すフローチャートである。
【図１４】本実施の形態に係るセカンダリボリュームへのデータの書き込み処理を示すフローチャートである。
【図１５】本実施の形態に係るフォーマットを説明するためのブロック図である。
【図１６】本実施の形態に係るフォーマット管理テーブルを示す図である。
【図１７】本実施の形態に係るフォーマットを説明するためのブロック図である。
【図１８】本実施の形態に係るフォーマットを説明するためのブロック図である。
【図１９】本実施の形態に係るフォーマット処理を示すフローチャートである。
【符号の説明】
１００    情報処理装置
２００    ストレージ装置
２１０    制御装置
２１１    ＣＰＵ
２１２    メモリ
２２０    プライマリボリューム
２３０    セカンダリボリューム
２４０    差分ボリューム
２４１    他の記憶ボリューム
２５０    管理用装置
４００    スナップショット管理テーブル
５００    Ｓ−ＶＯＬ変換テーブル
６００    ボリューム管理テーブル
７００    差分ボリューム管理テーブル
８００    スナップショット制御プログラム
９００    フォーマット管理テーブル
【図１】
2005018612.tif 000003
【図２】
2005018612.tif 000004
【図３】
2005018612.tif 000005
【図４】
2005018612.tif 000006
【図５】
2005018612.tif 000007
【図６】
2005018612.tif 000008
【図７】
2005018612.tif 000009
【図８】
2005018612.tif 000010
【図９】
2005018612.tif 000011
【図１０】
2005018612.tif 000012
【図１１】
2005018612.tif 000013
【図１２】
2005018612.tif 000014
【図１３】
2005018612.tif 000015
【図１４】
2005018612.tif 000016
【図１５】
2005018612.tif 000017
【図１６】
2005018612.tif 000018
【図１７】
2005018612.tif 000019
【図１８】
2005018612.tif 000020
【図１９】
2005018612.tif 000021