(57)【要約】【課題】任意の世代のボリュームイメージを取得できる。【解決手段】ホスト計算機からデータが読み書きされる運用ボリュームと、所定のタイミングにおける運用ボリュームの複製が保存されるコピーボリュームと、運用ボリュームのスナップショットの差分データが保存される差分ボリュームとが設けられるディスク装置と、ストレージ管理装置を制御する制御装置と、ホスト計算機と接続されるチャネルＩ／Ｆと、ディスク装置と接続されるストレージＩ／Ｆとを有するストレージ管理装置と、を備えるストレージシステムにおいて、制御装置は、運用ボリュームのデータを所定のタイミングで前記コピーボリュームに複製し、運用ボリュームへの書き込み要求に対応してスナップショットの差分データを差分ボリュームに保存し、生成されたスナップショットの世代及びコピーボリュームの世代を管理し、運用ボリュームと異なる世代のボリュームに対する読み出し要求をホスト計算機から受け取ったときに、差分ボリューム及び／又はコピーボリュームからデータを読み出す。【選択図】  図１
2006107162.tif 000002
【特許請求の範囲】
【請求項１】
ホスト計算機からデータが読み書きされる運用ボリュームと、所定のタイミングにおける前記運用ボリュームの複製が保存されるコピーボリュームと、前記運用ボリュームのスナップショットの差分データが保存される差分ボリュームとが設けられるディスク装置と、
ストレージ管理装置を制御する制御装置と、前記ホスト計算機と接続されるチャネルＩ／Ｆと、前記ディスク装置と接続されるストレージＩ／Ｆとを有するストレージ管理装置と、を備えるストレージシステムにおいて、
前記制御装置は、
前記運用ボリュームのデータを所定のタイミングで前記コピーボリュームに複製し、
前記運用ボリュームへの書き込み要求に対応してスナップショットの差分データを前記差分ボリュームに保存し、
生成された前記スナップショットの世代及び前記コピーボリュームの世代を管理し、
前記運用ボリュームと異なる世代のボリュームに対する読み出し要求を前記ホスト計算機から受け取ったときに、前記差分ボリューム及び／又は前記コピーボリュームからデータを読み出すことを特徴とするストレージシステム。
【請求項２】
前記制御装置は、
前記運用ボリュームと異なる世代のボリュームに対するアクセス要求を受け取ったときに、
当該指定世代が前記コピーボリュームの世代と同じ場合は、前記コピーボリュームへのアクセスを指示し、
当該指定世代が前記コピーボリュームの世代と異なる場合は、前記差分ボリューム及び前記コピーボリュームにおける当該指定世代のデータが保存されているブロックアドレスを指定することによって、当該指定世代のボリュームへアクセスすることを特徴とする請求項１に記載のストレージシステム。
【請求項３】
前記制御装置は、
当該指定世代が前記運用ボリュームの世代と同じであって、かつ、スナップショットの要求があった後に前記運用ボリュームに書き込み要求があった場合は、
前記運用ボリュームの内容と前記コピーボリュームの内容とを同期させ、
当該同期完了後に同期を分離し、
その後、前記差分ボリューム及び前記コピーボリュームにおける当該指定世代のデータが保存されているブロックアドレスを指定することによって、当該指定世代のボリュームへアクセスすることを特徴とする請求項２に記載のストレージシステム。
【請求項４】
前記制御装置は、前記スナップショットの要求があった以前の前記運用ボリュームの複製を、前記コピーボリュームに保存することを特徴とする請求項１に記載のストレージシステム。
【請求項５】
前記制御装置は、前記運用ボリュームに対する書き込み要求があったときに、当該書き込みデータを前記コピーボリュームに保存することを特徴とする請求項１に記載のストレージシステム。
【請求項６】
ホスト計算機からデータが読み書きされる運用ボリュームと、所定のタイミングにおける前記運用ボリュームの複製を保存するコピーボリュームと、前記運用ボリュームのスナップショットの差分データを保存する差分ボリュームとが設けられるディスク装置と、
ストレージ管理装置を制御する制御装置と、前記ホスト計算機と接続されるチャネルＩ／Ｆと、前記ディスク装置と接続されるストレージＩ／Ｆとを有するストレージ管理装置と、を備えるストレージシステムにおいてボリュームを管理する方法であって、
前記制御装置は、
前記運用ボリュームの内容を所定のタイミングで前記コピーボリュームに複製し、
前記運用ボリュームへの書き込み要求に対応してスナップショットの差分データを前記差分ボリュームに保存し、
前記コピーボリューム及び前記差分ボリュームによって、生成された前記スナップショットの仮想ボリュームを管理することを特徴とするボリューム管理方法。
【請求項７】
前記制御装置は、前記運用ボリュームと異なる世代のボリュームに対する読み出し要求を前記ホスト計算機から受け取ったときに、前記差分ボリューム及び／又は前記コピーボリュームからデータを読み出して、前記指定世代のボリュームを生成することによって、前記スナップショットの仮想ボリュームを管理することを特徴とする請求項６に記載のボリューム管理方法。
【請求項８】
前記制御装置は、
前記運用ボリュームと異なる世代のボリュームに対するアクセス要求を受け取ったときに、
当該指定世代が前記コピーボリュームの世代と同じ場合は、前記コピーボリュームへのアクセスを指示し、
当該指定世代が前記コピーボリュームの世代と異なる場合は、前記差分ボリューム及び前記コピーボリュームにおける当該指定世代のデータが保存されているブロックアドレスを指定して、当該指定世代のボリュームへアクセスすることによって、前記スナップショットの仮想ボリュームを管理することを特徴とする請求項７に記載のボリューム管理方法。
【請求項９】
前記制御装置は、
当該指定世代が前記運用ボリュームの世代と同じであって、かつ、前記運用ボリュームに、スナップショットの要求があった後に書き込み要求があった場合は、
前記運用ボリュームの内容と前記コピーボリュームの内容とを同期させ、
当該同期完了後に同期を分離し、
その後、前記差分ボリューム及び前記コピーボリュームにおける当該指定世代のデータが保存されているブロックアドレスを指定して、当該指定世代のボリュームへアクセスすることによって、前記スナップショットの仮想ボリュームを管理することを特徴とする請求項８に記載のボリューム管理方法。
【請求項１０】
前記制御装置は、
指定された世代の運用ボリュームの復旧を前記ホスト計算機から受け付け、
当該指定世代の内容が保存されている前記差分ボリュームのブロックを、前記コピーボリュームに複写し、
当該複写されたコピーボリュームを、前記運用ボリュームに変更することを特徴とする請求項６に記載のボリューム管理方法。
【請求項１１】
前記制御装置は、
前記差分ボリュームに対する書き込みがあったときに、前記差分ボリュームの総使用容量を取得し、
前記取得した総使用容量が予め定めた閾値を超えた場合に、前記差分ボリュームに保存されているデータのうち、最も優先度の低い世代を検索し、
前記検索した世代のデータを外部バックアップ装置に複製し、
当該複製し世代の情報を削除することを特徴とする請求項６に記載のボリューム管理方法。
【請求項１２】
ホスト計算機からデータが読み書きされる運用ボリュームと、所定のタイミングにおける前記運用ボリュームの複製を保存するコピーボリュームと、前記運用ボリュームのスナップショットの差分データを保存する差分ボリュームとが設けらるディスク装置と、
ストレージ管理装置を制御する制御装置と、前記ホスト計算機と接続されるチャネルＩ／Ｆと、前記ディスク装置と接続されるストレージＩ／Ｆとを有するストレージ管理装置と、を備えるストレージシステムに、以下の手順を実行させボリュームを管理させるプログラムであって、
前記運用ボリュームの内容を所定のタイミングで前記コピーボリュームに複製し、
前記運用ボリュームへの書き込み要求に対応してスナップショットの差分データを前記差分ボリュームに保存し、
前記コピーボリューム及び前記差分ボリュームによって、スナップショットを管理する手順を含むプログラム。
【請求項１３】
さらに、前記運用ボリュームと異なる世代のボリュームに対する読み出し要求を前記ホスト計算機から受け取ったときに、前記差分ボリューム及び／又は前記コピーボリュームからデータを読み出す手順を、前記ストレージ管理装置に実行させる請求項１２に記載のプログラム。
【請求項１４】
さらに、前記運用ボリュームと異なる世代のボリュームに対するアクセス要求を受け取ったときに、
当該指定世代が前記コピーボリュームの世代と同じ場合は、前記コピーボリュームへのアクセスを指示し、
当該指定世代が前記コピーボリュームの世代と異なる場合は、前記差分ボリューム及び前記コピーボリュームにおける当該指定世代のデータが保存されているブロックアドレスを指定する手順を、前記ストレージ管理装置に実行させる請求項１３に記載のプログラム。
【請求項１５】
さらに、当該指定世代が前記運用ボリュームの世代と同じであって、かつ、前記運用ボリュームに、スナップショットの要求があった後に書き込み要求があった場合は、
前記運用ボリュームの内容と前記コピーボリュームの内容とを同期させ、
当該同期完了後に同期を分離し、
その後、前記差分ボリューム及び前記コピーボリュームにおける当該指定世代のデータが保存されているブロックアドレスを指定する手順を、前記ストレージ管理装置に実行させる請求項１４に記載のプログラム
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージを利用するコンピュータシステムにおけるボリュームイメージのスナップショットを取得するストレージシステムに関し、特に、任意の世代のボリュームイメージの取得技術に関する。
【背景技術】
【０００２】
情報化社会において、情報を蓄積するストレージシステムの重要な役割の一つに、データ保護がある。データ保護のもっとも一般的な方法は、テープをはじめとするバックアップ・メディアにストレージ上のデータを保存するバックアップである。バックアップは、故障や障害、或いは、操作ミスなどによって、万が一、運用中のストレージ上のデータを失ったとしても、バックアップを復元することで、保存した時点のデータに回復することを可能にし、被害を最小限に抑えることができる。
【０００３】
しかし、ストレージの大容量化に伴い、バックアップに要する時間が問題となってきている。さらに、データの更新頻度が高い用途では、一度バックアップを生成しても、すぐにバックアップとの差が拡大し、万が一の際、被害が増大してしまうため、頻繁にバックアップを生成する必要がある。また、操作ミスなどによるファイル紛失や、ファイルの内容を過去の状態と比較したい場合などに備えて、定期的なバックアップを容易に参照したいという要求がある。
【０００４】
このような用途に応える機能として、スナップショットが注目されている。スナップショットは、取得時点の運用中のストレージ上のデータイメージを維持する。取得したスナップショットイメージは、運用中のストレージとは別のボリュームとしてアクセス可能となる。
【０００５】
このスナップショット機能として、データ保持部１が、通常の読み書きを行い、データ保持部２が、ある時点でのデータ保持部１のスナップショットイメージを保存し、データ保持部３が、データ保持部２にスナップショットイメージを保存した時点以降のデータ保持部１へのデータ書替えに伴う更新データと、その世代を示す情報と、その更新領域を示す情報とを含む履歴情報を保存し、データ読出し元選択部が、読出されるべきスナップショットイメージの世代及び領域の指定に応じて、データ保持部３に保存される各履歴情報を参照し、読出されるべきスナップショットイメージの保存場所を知得し、その保存場所に応じてデータの読出し元をデータ保持部２及びデータ保持部３のいずれかに切替えるスナップショットイメージの世代管理方法が提案されている（例えば、特許文献１参照。）。
【特許文献１】特開２００２−２７８８１９公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
スナップショット機能は、運用ボリュームの差分情報のみを保存するものであるため、多くの世代を保存するためには多くのスナップショットの保存が必要となり、ストレージの容量が増大する。
【０００７】
一方、テープ装置に多世代のバックアップを保存することも可能である。しかし、テープ装置は一般的にアクセス速度が極めて遅いため、時間的に古いため、アクセス頻度が低いデータの保存に適している。そのため多く世代のデータのアクセスやリストアの要求を高速に行うためには、ストレージ装置にバックアップデータを保存することが望ましい。
【０００８】
本発明はこのような問題点に鑑みてなされたものであり、ストレージ装置のストレージ内に多世代のバックアップを保存でき、データのアクセスやリストア（復旧）ができるストレージシステムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明は、ホスト計算機からデータが読み書きされる運用ボリュームと、所定のタイミングにおける運用ボリュームの複製が保存されるコピーボリュームと、運用ボリュームのスナップショットの差分データが保存される差分ボリュームとが設けられるディスク装置と、ストレージ管理装置を制御する制御装置と、ホスト計算機と接続されるチャネルＩ／Ｆと、ディスク装置と接続されるストレージＩ／Ｆとを有するストレージ管理装置と、を備えるストレージシステムにおいて、制御装置は、運用ボリュームのデータを所定のタイミングで前記コピーボリュームに複製し、運用ボリュームへの書き込み要求に対応してスナップショットの差分データを差分ボリュームに保存し、生成されたスナップショットの世代及びコピーボリュームの世代を管理し、運用ボリュームと異なる世代のボリュームに対する読み出し要求をホスト計算機から受け取ったときに、差分ボリューム及び／又はコピーボリュームからデータを読み出す。
【発明の効果】
【００１０】
本発明によると、差分ボリュームとコピーボリュームとを保存することで、任意の複数の世代のボリュームを取得することが可能となる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明の実施の形態を図面を参照して説明する。
【００１２】
図１は、本発明の第１の実施の形態のストレージシステムの構成を示すブロック図である。
【００１３】
ストレージ管理装置２００は、チャネルインターフェース（チャネルＩ／Ｆ）２１０を介して接続されたホスト計算機１００に対してファイル共有サービスを提供する。
【００１４】
ストレージ管理装置２００は、チャネルＩ／Ｆ２１０、ＣＰＵ２２０、ストレージインターフェース（ストレージＩ／Ｆ）２３０、及びメモリ２４０を備える。
【００１５】
チャネルＩ／Ｆ２１０は、ホスト計算機１００とネットワークで接続され、所定の信号（コマンド、データ）を送受信する。
【００１６】
ストレージＩ／Ｆ２３０は、ストレージ３００との間でＳＣＳＩ（Small Computer System Interface）に基づく信号（コマンド、データ）を送受信する。
【００１７】
ストレージ３００は、複数のディスク装置が備えられており、これらは、運用ボリューム３１０、コピーボリューム３２０及び差分ボリューム３３０の３つの論理的な領域（ボリューム）に分割されている。
【００１８】
運用ボリューム３１０は、ホスト計算機１００の要求に従ってデータの読み書きを行う論理ボリュームである。コピーボリューム３２０は、ある時点での運用ボリューム３１０のフルコピーを保存するためのバックアップとして機能する。差分ボリューム３３０は、運用ボリューム３１０への書き込みデータのスナップショットを保存する。
【００１９】
メモリ２４０には、スナップショット管理プログラム２４１、世代ボリューム生成プログラム２４２、運用ボリューム復旧プログラム２４３及び差分ボリューム容量管理プログラム２４４が保存されており、ＣＰＵ２２０がこれらのプログラムを呼び出して実行することによって、各種の処理が行われる。
【００２０】
メモリ２４０にはキャッシュメモリ２５０と共有メモリ２６０が備えられている。キャッシュメモリ２５０は、ストレージ３００へのデータの読み出し、書き込みの際に用いるキャッシュとして機能する。共有メモリ２６０は、ストレージ管理装置２００が各種処理を行うために用いる制御情報等が保存される。この共有メモリ２６０には、差分ビットマップ２６１、コピーボリューム世代管理情報２６２、スナップ情報２６３及び容量管理情報２６４等が保存されている。
【００２１】
差分ビットマップ２６１は、後に説明するスナップショット管理テーブル２６１０及び差分ブロック管理テーブル２６２０が含まれる。コピーボリューム世代数管理情報２６２は、コピーボリューム３２０にコピーされた内容がどの世代であるかを示す情報が登録される。スナップ情報２６３は、差分ボリューム３３０にスナップショットを保存した時刻及び当該スナップショットがどの世代であるかを示す情報が登録される。容量管理情報２６４は、世代毎の差分ボリュームの使用容量、最終アクセス日時及びアクセス頻度を示す情報が登録される。
【００２２】
スナップショット管理プログラム２４１は、ホスト計算機１００からスナップショットの生成要求を受信すると、ストレージ管理装置２００の運用ボリューム３１０に対するスナップショットを生成する。このスナップショットの生成処理は、スナップショット管理プログラム２４１が、後述するスナップショット管理テーブル２６１０を用いて、運用ボリューム３１０及び差分ボリューム３３０に保存されたデータを、スナップショットの生成要求の受信時に運用ボリューム３１０に保存されていたデータにアクセス可能となるように管理し、生成した運用ボリューム３１０のスナップショットを提供するための仮想ボリュームをアクセス可能にする。
【００２３】
ここで、仮想ボリュームとは、一又は複数のディスク装置内の保存領域からなる仮想的なボリュームであって、実際には運用ボリューム３１０内の一部ブロックと差分ボリューム３３０内の一部ブロックから構成されている。
【００２４】
スナップショット管理プログラム２４１は、ファイルシステムなどが保存されるボリューム（運用ボリューム３１０）に加え、差分データ、すなわちスナップショットの維持に必要な差分データを保存するボリューム（差分ボリューム３３０）を管理し、ホスト計算機１００の要求に応じたデータ入出力処理、スナップショットを維持する処理、及び、スナップショットを利用可能にする処理を行う。
【００２５】
具体的には、スナップショット管理プログラム２４１は、スナップショットの生成要求を受信すると、まず後述するスナップショット管理テーブル２６１０に新しい仮想ボリュームの識別情報を登録する。この仮想ボリュームのブロックは、最初はスナップショット管理テーブル２６１０によって、運用ボリューム３１０のブロックと一対一で対応付けられている。しかし、その後運用ボリューム３１０内のデータが更新される際には、スナップショット管理プログラム２４１は、後述するように運用ボリューム３１０内の更新前のデータを差分ボリュームに複写し、この複写後に運用ボリューム３１０の保存内容を更新する。そして、スナップショット管理プログラム２４１は、更に、データが更新された運用ボリューム３１０内のブロックに対応する仮想ボリューム内のブロックを、スナップショット生成要求を受信した時点で運用ボリューム３１０に保存されていたデータ（すなわち更新前のデータ）が保存されている差分ボリューム上のブロックと対応付けるようスナップショット管理テーブル２６１０を更新する。
【００２６】
ホスト計算機１００からの仮想ボリュームに対するアクセス要求をスナップショット管理プログラム２４１が受信すると、スナップショット管理プログラム２４１はスナップショット管理テーブル２６１０を参照して、仮想ボリュームのブロックと対応付けられている運用ボリューム３１０のブロック又は差分ボリューム３３０のブロックへのアクセスをホスト計算機１００に指示する。従って、ホスト計算機１００は、仮想ボリュームにアクセスすることによって、スナップショットの生成要求が発行された時点での運用ボリューム３１０内の情報が利用できる。よって、ストレージ管理装置２００はファイルシステムのスナップショットイメージを提供することが可能になる。
【００２７】
なお、これらの処理に関しては後に詳述する。
【００２８】
ストレージ３００は、独立した複数の物理ディスクドライブを用いてもよいし、物理的に一つのディスクドライブを論理区画によって分割してもよい。また、複数のディスク装置から構成され一つのディスクとして論理的に設定された論理ボリュームとしてもよい。さらに、論理ボリュームを構成する複数の物理ディスクドライブによってＲＡＩＤ装置を構成してもよい。
【００２９】
テープ装置４００は、ストレージ管理装置２００に接続されたストレージ３００に保存されているデータの複製を保存する装置である。テープ装置４００はチャネルＩ／Ｆ２１０を介してストレージ管理装置２００に接続される。
【００３０】
ホスト計算機１００は、プログラム１１０を備えている。また、ストレージ管理装置２００は、Ｉ／Ｆ２７０を備えている。Ｉ／Ｆ２７０は、ＬＡＮ５０１を介して端末５００に接続される。Ｉ／Ｆ２７０は、例えばＳＣＳＩインターフェースで構成される。
【００３１】
ユーザは、ホスト計算機１００のプログラム１１０によって、ストレージ管理装置２００に指示を送ることができる。
【００３２】
また、ユーザは、端末５００からストレージ管理装置２００に指示を送ることができる。
【００３３】
図２Ａ、図２Ｂは、本発明の第１の実施の形態の差分ビットマップ２６１の説明図である。
【００３４】
差分ビットマップ２６１には、スナップショット管理テーブル２６１０（図２Ａ）と、差分ブロック管理テーブル２６２０（図２Ｂ）とで構成される。
【００３５】
図２Ａに示すスナップショット管理テーブル２６１０は、運用ボリュームブロックアドレス２６１１、世代管理ビットマップ２６１２及び仮想ボリューム世代アクセステーブルから構成される。
【００３６】
列２６１１は、運用ボリューム３１０のブロックアドレスが登録されており、最初の行（第１行）には運用ボリューム３１０の１番目のブロックアドレス０番が割り当てられ、第２行には運用ボリューム３１０のブロックアドレス１番が割り当てられ、以下順に運用ボリューム３１０のブロックアドレスが割り当てられ、最後の行である第ｍ行には運用ボリューム３１０のブロックアドレス（ｍ−１）番が割り当てられる。
【００３７】
列２６１２は、世代管理ビットマップであり、この運用ボリュームブロックアドレスに対応する差分データがあるか否かを示す。なお、この詳細は後述する。
【００３８】
列２６１３〜列２６１５は、世代ごとの仮想ボリュームの各ブロックアドレスに対応するデータの保存位置が登録される。例えば、列２６１３にはスナップショット番号１（世代１）のデータの保存位置が登録される。この場合、スナップショット番号と仮想ボリュームの番号は同一であり、その数字が世代を示す。例えば、スナップショット番号１には仮想ボリューム１が対応しており、仮想ボリューム１の世代は「１」である。
【００３９】
列２６１３の第１行には世代１の仮想ボリューム１のブロックアドレス０番に対応するデータが保存されている保存領域を識別する情報が登録され、以降順番に、第２行目には仮想ボリューム１のブロックアドレス１番、第３行目にはブロックアドレス２番・・・に対応するデータの保存位置が登録される。
【００４０】
より具体的には、第１行に仮想ボリューム１のブロックアドレス０番のデータの保存位置として登録されている０番は、差分ボリューム３３０のブロックアドレス０番に対応している。
【００４１】
スナップショット管理プログラム２４１がスナップショット生成要求を受信した後に、運用ボリューム３１０のブロックアドレス０番のデータが更新されるとき、スナップショット管理プログラム２４１は、運用ボリューム３１０のブロックアドレス０番に保存されている更新前のデータを、差分ボリューム３３０のブロックアドレス０番に書き込み、その後に運用ボリューム３１０のブロックアドレス０番のデータを更新する。スナップショットへのアクセスを提供するためには、スナップショット生成要求を受信した際に運用ボリューム３１０に保存されていたデータをディスク装置内のいずれかの保存領域に保存しておくことが必要だからである。
【００４２】
このように、スナップショット管理テーブル２６１０において仮想ボリューム１のブロックアドレス０番と差分ボリューム３３０のブロックアドレス０番を対応づけておく。スナップショット管理プログラム２４１は、仮想ボリューム１の第１行のブロックアドレス０番（すなわち、差分ボリューム３３０のブロックアドレス０番に）アクセスすることによって、運用ボリューム３１０のブロックアドレス０番の更新前のデータ（世代１の仮想ボリューム）が得られる。
【００４３】
このように、スナップショット管理プログラム２４１は、世代１の仮想ボリューム１のブロックアドレス０番に対するアクセス要求があった場合には、スナップショット管理テーブル２６１０を参照することによって、差分ボリューム３３０のブロックアドレス０番をアクセスすることができる。この結果、スナップショット管理プログラム２４１は、ホスト計算機１００に対して、運用ボリューム３１０のブロックアドレス０番の更新前のデータ（即ちスナップショット生成要求を受信した時点で運用ボリューム３１０のブロックアドレス０番に保存されていた世代１のデータ）が仮想ボリューム１のブロックアドレス０番に書き込まれているのと同様の状態で、世代１の仮想ボリューム１に対するアクセス環境を提供することができる。
【００４４】
同様に、第２行に、世代１の仮想ボリューム１のブロックアドレスのデータの保存位置として登録されている１番は、差分ボリューム３３０のブロックアドレス１番に対応している。スナップショット生成要求受信後に運用ボリューム３１０のブロックアドレス１番のデータが更新されるとき、スナップショット管理プログラム２４１は、運用ボリューム３１０のブロックアドレス１番に保存されている更新前のデータを、差分ボリューム３３０のブロックアドレス１番に書き込み、その後に運用ボリューム３１０のブロックアドレス１番のデータを更新する。このように、スナップショット管理テーブル２６１０において世代１の仮想ボリューム１のブロックアドレス１番と差分ボリューム３３０のブロックアドレス１番を対応づけておく。スナップショット管理プログラム２４１は、ホスト計算機１００に対して、運用ボリューム３１０のブロックアドレス１番の更新前のデータ（世代１のデータ）が仮想ボリューム１のブロックアドレス１番に仮想的に書き込まれているのと同様の状態で、世代１の仮想ボリューム１に対するアクセスを提供することができる。
【００４５】
第３行〜第ｍ行には、仮想ボリューム１のブロックアドレス２番から（ｍ−１）番のデータに対応する保存位置情報として「なし」が登録されている。この「なし」とは運用ボリューム３１０の対応するブロックアドレスを示している。従って、仮想ボリューム１のブロックアドレス２番〜（ｍ−１）番については、それぞれ運用ボリューム３１０のブロックアドレス２番〜（ｍ−１）番が対応する。すなわち、「なし」は、最後にスナップショット生成要求を受信した後、運用ボリューム３１０の当該ブロックは更新（書き替え）がされていないことを示す。
【００４６】
従って、スナップショット管理プログラム２４１は、仮想ボリューム１のブロックアドレス０番のデータと、仮想ボリューム１のブロックアドレス１番のデータと、運用ボリューム３１０のブロックアドレス２〜（ｍ−１）番のデータとによって、運用ボリューム３１０のブロックアドレス０番及び１番のデータが更新される前の時点における運用ボリューム３１０のスナップショットイメージ（世代１の仮想ボリューム１）を提供することが可能になる。
【００４７】
列２６１４には世代２の仮想ボリューム２のデータの保存位置が登録される。
【００４８】
スナップショット管理プログラム２４１は、スナップショット生成要求を受信する毎に、生成要求受信時におけるスナップショットを取得すべく新たな世代の仮想ボリュームをスナップショット管理テーブルに登録する。仮想ボリューム２はスナップショット番号１のスナップショット（世代１の仮想ボリューム１に対応）が生成された後に再びスナップショット生成要求（世代２のスナップショット要求）を受信した際、スナップショット管理プログラム２４１によって生成されるスナップショット番号２（世代２）のスナップショットに対応する世代の仮想ボリュームである。
【００４９】
列２６１４の第１行に仮想ボリューム２のブロックアドレス０番のデータ保存位置として登録されている０番は、差分ボリューム３３０のブロックアドレス０番に対応している。
【００５０】
２番目のスナップショット生成要求の受信後に運用ボリューム３１０のブロックアドレス０番のデータが更新されるとき、スナップショット管理プログラム２４１は、前述したように運用ボリューム３１０のブロックアドレス０番に保存されている更新前のデータを、差分ボリューム３３０のブロックアドレス０番に複写し、その後に運用ボリューム３１０のブロックアドレス０番のデータを更新する。すると、仮想ボリューム１及び仮想ボリューム２のブロックアドレス０番に対応するデータは、差分ボリューム３３０のブロックアドレス０番に保存されたこととなるから、仮想ボリューム１及び仮想ボリューム２のブロックアドレス０番は共に、差分ボリューム３３０のブロックアドレス０番と対応付けられるよう、スナップショット管理プログラム２４１がスナップショット管理テーブルを書き換える。
【００５１】
列２６１４の第２行に仮想ボリューム２のブロックアドレス１番のデータの保存位置として登録されている２番は、差分ボリューム３３０のブロックアドレス２番に対応している。これは、２番目のスナップショット生成要求受信後、運用ボリューム３１０のブロックアドレス１番のデータが更新されたことを示している。すなわち、２番目（世代２）のスナップショット生成要求を受信した後に生じた運用ボリューム３１０のブロックアドレス１番のデータ更新に際しては、更新前のデータは差分ボリューム３３０のブロックアドレス２番に複写されている。これは、差分ボリューム３３０の１番に複写すると、仮想ボリューム１のブロックアドレス１番と対応付けられているデータが変更され、１番目のスナップショットデータが壊れてしまうからである。
【００５２】
列２６１４の第３行から第ｍ行に、仮想ボリューム２のブロックアドレス２番から第（ｍ−１）番のデータの保存位置として「なし」が登録されている。この「なし」は、前述したように、仮想ボリュームの当該ブロックアドレスが、運用ボリューム３１０の対応するブロックアドレスに対応付けられていることを示す。
【００５３】
仮想ボリュームｎについての説明は、上記仮想ボリューム１、２についての説明と同様なので、省略する。
【００５４】
列２６１２は、世代管理ビットマップであり、そのビット数は仮想ボリュームの数と同じである。図２Ａに示す場合では、仮想ボリュームの数はｎであるので、世代管理ビットマップはｎビットを有する。世代管理ビットマップの第１ビットは世代１の仮想ボリューム１に対応し、第２ビットは世代２の仮想ボリューム２に対応し、以後同様にして、第ｎビットは世代ｎの仮想ボリュームｎに対応する。仮想ボリュームの第ｋ行のブロックアドレスに更新の登録がある場合（すなわち、差分ボリューム３３０のブロックアドレスが登録されている場合）には、第ｋ行の世代管理ビットマップ中の、この仮想ボリュームに対応するビットを「０」とする。また、この仮想ボリュームの第ｋ行のブロックアドレスに更新の登録がない場合（すなわち、「なし」が登録されている場合）には、第ｋ行の世代管理ビットマップ中の、この仮想ボリュームに対応するビットを「１」とする。
【００５５】
図２Ａに示すスナップショット管理テーブル２６１０では、各仮想ボリュームの第１行のブロックアドレス０番には「０」が割り当てられているので、第１行の世代管理ビットマップの各ビットは全て「０」になる。また、各仮想ボリュームの第ｍ行のブロックアドレス（ｍ−１）番には「なし」が割り当てられているので、第ｍ行の世代管理ビットマップの各ビットは全て１になる。
【００５６】
なお、図２Ａに示すスナップショット管理テーブル２６１０では、運用ボリューム３１０のサイズをｍブロック、スナップショットの最大数をｎとしている。例えば、ブロックサイズを５１２バイト、運用ボリューム３１０のサイズを１２８ギガバイト、スナップショットの最大数を６４とすると、ｍ＝２５０００００００、ｎ＝６４となる。なお、ブロックサイズや運用ボリューム３１０のサイズ、スナップショットの最大数は、本発明の効果に影響しないため、任意に設定してよい。
【００５７】
図２Ａに示すスナップショット管理テーブル２６１０では、第１行（行２６１６）は、列２６１１が運用ボリューム３１０のブロックアドレス０番を示す。列２６１２は、世代管理ビットマップが００…０であることを示す。列２６１３、列２６１４、・・・列２６１５の「０」は、スナップショット１、２、・・・ｎ番に対応する仮想ボリューム１、２、・・・ｎのブロックアドレス０番の内容（すなわち、各仮想ボリュームに対応するスナップショットの生成要求発行時に、運用ボリューム３１０のブロックアドレス０番に保存されていたデータ）が、差分ボリューム３３０のブロックアドレス０番に保存されていることを示す。
【００５８】
第２行（行２６１７）は、列２６１１が運用ボリューム３１０のブロックアドレス１番を示す。列２６１２は、世代管理ビットマップが００…１であることを示す。列２６１３の「１」は、スナップショット１番に対応する仮想ボリューム１のブロックアドレス１番の内容が差分ボリューム３３０のブロックアドレス１番に保存されていることを示す。列２６１４の「２」は、スナップショット２番に対応する仮想ボリューム２のブロックアドレス１番の内容が差分ボリューム３３０のブロックアドレス２番に保存されていることを示す。列２６１４の「なし」は、スナップショットｎ番に対応する仮想ボリュームｎのブロックアドレス１番の内容が運用ボリューム３１０のブロックアドレス１番に保存されていることを示す。
【００５９】
仮想ボリュームｎのブロックアドレス１番に「なし」が割り当てられていることは、世代ｎの仮想ボリュームｎのブロックアドレス１番の内容が、運用ボリューム３１０のブロックアドレス１番に保存されいること、及び、仮想ボリュームｎに対応するｎ番目のスナップショットの生成要求を受信した後、運用ボリューム３１０のブロックアドレス１番のデータが更新されていないことを示している。
【００６０】
第３行（行２６１８）は、列２６１１が運用ボリューム３１０のブロックアドレス２番を示す。列２６１２は、世代管理ビットマップが１１…１であることを示す。列２６１３、列２６１４、・・・列２６１５は、スナップショット１、２、・・・ｎ番に対応する仮想ボリューム１、２、・・・ｎのブロックアドレス２番の内容が、運用ボリューム３１０のブロックアドレス２番に保存されていること（すなわち、運用ボリューム３１０の更新されていないこと）を示す。
【００６１】
第ｍ行（列２６１９）は、列２６１１が運用ボリューム３１０のブロックアドレス（ｍ−１）番を示す。列２６１２は、世代管理ビットマップは、１１…１であることを示す。列２６１３、列２６１４、・・・列２６１５は、スナップショット１、２、・・・ｎ番に対応する仮想ボリューム１、２、ｎのブロックアドレス（ｍ−１）番の内容が、運用ボリューム３１０のブロックアドレス（ｍ−１）番に保存されていること（すなわち、運用ボリューム３１０の更新（書き替え）が行われていないこと）を示す。
【００６２】
換言すると、列２６１２の各エントリに示されている世代管理ビットマップは、少なくともスナップショットの最大数を示すｎビットを備える保存領域であり、各ビットがスナップショットの番号と対応し、スナップショットを維持し始めてからの更新の有無を示す。図２に示す場合、「０」は更新あり、「１」は更新なしを示す。
【００６３】
この世代管理ビットマップは、スナップショット管理プログラム２４１が運用ボリューム３１０にブロックデータを書き込む際に参照され、データを書き込むアドレスの更新前のデータを差分ボリューム３３０に複写するか否かを決定するために利用される。この世代管理ビットマップによって、データ書き込み毎に、どのスナップショットの仮想ボリュームのブロックアドレスを書き換えるかを知るために、スナップショット管理テーブルをたどる必要がなくなり、データの書き込み速度を向上させることができる。
【００６４】
図２Ｂは、差分ブロック管理テーブル２６２０を示す。
【００６５】
差分ブロック管理テーブル２６２０は、差分ボリューム３３０のブロックの使用状況を管理するため、差分ボリューム３３０に設けられたブロック各々に対して、差分ボリュームブロックアドレス２６２１と世代所有ビットマップ２６２２との対応を示す。
【００６６】
各列の世代所有ビットマップ２６２２は、少なくともスナップショットの世代の最大数を示すｎビットを備える保存領域であり、各ビットがスナップショットの番号（世代数）と対応している。各ビットは、対応するスナップショットデータにアクセスするための仮想ボリュームを構成するブロックとして、対応する差分ボリューム３３０上のブロックが参照されるか否か（「１」は参照あり、「０」は参照なし）を示す。
【００６７】
ホスト計算機１００からの要求による運用ボリューム３１０への書き込みに伴い、差分ボリューム３３０に運用ボリューム３１０のブロックデータを複写する際に、そのブロックを参照するスナップショット番号に対応する世代所有ビットマップ２６２２内のビットを１に更新する。また、差分ボリューム３３０から空きブロックを得る際には、世代所有ビットマップ２６２２の全てのビットが０のブロックを選択する。
【００６８】
また、スナップショットを削除する際は、削除されるスナップショットに対応する仮想ボリュームを構成している全てのブロックについて、削除されるスナップショットに対応する所有ビットマップ内のビットを「０」に更新する。
【００６９】
より具体的に図２Ｂに示す差分ブロック管理テーブル２６２０の内容を説明すると、第１行（２６２３）には、差分ボリューム３３０のブロックアドレス０番の所有ビットマップとして「１１…１」が登録されており、これは、差分ボリューム３３０のブロックアドレス０番のブロックが、全てのスナップショットにおいて使用されていることを示している。これは、スナップショット管理テーブル２６１０（図２Ａ）の第１行（２６１６）に規定されるように、スナップショット１、２、・・・ｎ番に対応する仮想ボリューム１、２、・・・ｎのブロックアドレス０番の内容が、差分ボリューム３３０のブロックアドレス０番に保存されていることに対応している。
【００７０】
第２行（２６２４）には、差分ボリューム３３０のブロックアドレス１番の所有ビットマップとして「１０…０」が登録されており、これは、差分ボリューム３３０のブロックアドレス１番のブロックが、所有ビットマップの第１ビットに対応するスナップショット１番において使用されている（すなわち、仮想ボリューム１を構成している）が、他のスナップショットにおいては使用されていないことを示している。これは、スナップショット管理テーブル２６１０（図２Ａ）の第２行（２６１７）に規定されるように、スナップショット１番に対応する仮想ボリューム１のブロックアドレス１番の内容が、差分ボリューム３３０のブロックアドレス１番に保存されていることに対応している。
【００７１】
第３行（２６２５）には、差分ボリューム３３０のブロックアドレス２番の所有ビットマップとして「０１…０」が登録されている。これは、差分ボリューム３３０のブロックアドレス２番のブロックが、所有ビットマップの第２ビットに対応するスナップショット２番において使用されている（すなわち、仮想ボリューム２を構成している）ことを示している。これは、スナップショット管理テーブル２６１０（図２Ａ）の第２行（２６１８）に規定されるように、スナップショット２番に対応する仮想ボリューム２のブロックアドレス１番の内容が、差分ボリューム３３０のブロックアドレス２番に保存されていることに対応している。
【００７２】
以後、第（ｐ−１）行（２６２６）まで同様に設定される。
【００７３】
すなわち、所有ビットマップ２６２２の少なくとも一つのビットが「１」であれば、差分ボリューム３３０の当該ブロックはスナップショットに利用されている。また、所有ビットマップ２６２２の全てのビットが「０」であれば、差分ボリューム３３０のそのブロックはスナップショットに利用されていない空きブロックである。
【００７４】
次に、スナップショット管理プログラム２４１の処理を説明する。
【００７５】
図３は、本発明の第１の実施の形態のスナップショット管理プログラム２４１による書き込み処理のフローチャートである。
【００７６】
書き込み処理では、まず、スナップショット管理テーブル２６１０を参照して、書き込み処理の対象となっているブロックアドレスに対応する世代管理ビットマップ２６１２の全てのビットが「０」であるか否かを判定する（ステップ１００１）。
【００７７】
全ビットが「０」であれば、該ブロックのデータは、最後のスナップショット生成要求が発行された後、更新されており、既にこのブロックについては全ての仮想ボリュームが差分ボリューム３３０と対応づけられていることとなる。従って、世代管理ビットマップ２６１２の全てのビットが「０」であれば、更新前のデータを差分ボリューム３３０に複写する必要はないので、ステップ１００６に進み、指定された運用ボリューム３１０のブロックにデータを書き込む。
【００７８】
一方、少なくとも一つのビットが「１」であれば、書き込み処理によって更新される運用ボリューム３１０上のデータを参照しているスナップショット（仮想ボリューム）が存在するので、ステップ１００２に進む。
【００７９】
ステップ１００２では、差分ブロック管理テーブル２６２０（図２Ｂ）を参照して、書き込みを行う運用ボリューム３１０のブロックに保存されている更新前のデータを差分ボリューム３３０の空きブロックに複写する。
【００８０】
そして、ステップ１００２にてデータの複写先となった差分ボリューム３３０内のブロックのアドレスに対応する差分ブロック管理テーブル２６２０の世代所有ビットマップ２６２２に、ステップ１００１にて参照した世代管理ビットマップの値を保存する（ステップ１００３）。
【００８１】
そして、スナップショット管理テーブル２６１０に登録されている仮想ボリュームのうち、ステップ１００１において参照した世代管理ビットマップ中の「１」の値を有するビットに対応する仮想ボリュームを特定する。そして特定された仮想ボリューム内の書き込み対象ブロックに対応するブロックが、ステップ１００２においてデータの複写先となった差分ボリューム３３０と対応するように、スナップショット管理テーブル２６１０を更新する（１００４）。すなわち、スナップショット管理テーブル２６１０内の特定された仮想ボリュームに対応する列の、書き込み対象ブロックアドレスに対応する行に、ステップ１００２においてデータの複写先となった差分ボリューム３３０のブロックのアドレスを登録する。
【００８２】
次に、ステップ１００１において参照した世代管理ビットマップの全ビットの値を「０」に更新する（１００５）。
【００８３】
その後、指定されたブロックアドレスが示す運用ボリューム３１０のブロックに、指定されたデータを書き込み（ステップ１００６）、処理を終了する。
【００８４】
図４は、本発明の第１の実施の形態のスナップショット管理プログラム２４１による読み出し処理のフローチャートである。
【００８５】
読み出し処理では、まず、ホスト計算機１００から指定された読み出し対象のボリュームが、運用ボリューム３１０であるか、仮想ボリュームであるかによって、スナップショットからの読み出しであるか否かを判定する（１１０１）。
【００８６】
その結果、ホスト計算機１００から受信した読み出し要求が運用ボリューム３１０に対するものであれば、スナップショットに対する読み出し要求ではないと判定し、運用ボリューム３１０の、指定されたブロックアドレスからデータを読み出す（１１０３）。
【００８７】
一方、ホスト計算機１００から受信した読み出し要求が仮想ボリュームに対するものであれば、スナップショットに対する読み出し要求であると判定して、ステップ１１０３に進む。そして、さらに、スナップショット管理テーブル２６１０（図２Ａ）を用いて、読み出し対象の仮想ボリュームの、ホスト計算機１００によって指定されたブロックアドレスに対応する値を参照し、その値が「なし」であるか否かを判定する（１１０２）。
【００８８】
その結果、当該仮想ボリュームのブロックアドレスに対応する値が「なし」であれば、読み出し対象のスナップショットに対応する仮想ボリュームの、読み出し対象のブロックのデータは、差分ボリューム３３０には保存されていないので、運用ボリューム３１０の指定されたブロックアドレスからデータを読み出す（１１０３）。
【００８９】
一方、ステップ１１０２で参照したブロックアドレスの値が「なし」でなければ、読み出し対象の仮想ボリュームのブロックアドレスは、差分ボリューム３３０内のブロックアドレスと対応付けられている。すなわち、読み出し対象の仮想ボリュームのブロックアドレスのデータは、差分ボリューム３３０に保存されている。そこで、ステップ１１０２にて参照した差分ボリューム３３０のブロックアドレスからデータを読み出す（１１０４）。
【００９０】
その後、読み出したブロックデータをホスト計算機１００に返送して、読み出し処理を終了する。
【００９１】
図５は、本発明の第１の実施の形態のスナップショット管理プログラム２４１のスナップショット生成処理のフローチャートである。
【００９２】
スナップショットの生成は、ホスト計算機１００又はＣＰＵ２２０からスナップショットの生成要求を受信すると、スナップショット管理テーブル２６１０（図２Ａ）に新たな世代の仮想ボリュームを登録する。そして、スナップショット管理テーブル２６１０に登録されている全ての世代管理ビットマップ２６１２の、新たに生成されるスナップショットに対応して新たに登録された仮想ボリュームに対応するビットを「１」に設定し、新たに生成されるスナップショットに対応する仮想ボリュームのブロックアドレスを全て「なし」に設定する（１２０１）。
【００９３】
その後、スナップショット生成の対象として指定された運用ボリューム３１０の領域から読み出したデータを差分ボリューム３３０に書き込んで、指定された領域に保存されたデータを運用ボリューム３１０から差分ボリューム３３０に複写する。（１２０２）。
【００９４】
その後、スナップショットの生成処理を終了する。
【００９５】
なお、前述したステップ１２０１では、スナップショット管理テーブル２６１０に登録されている全ての世代管理ビットマップ２６１２の、新たに生成された仮想ボリュームに対応するビットの値を「１」と設定している。しかし、運用ボリューム３１０上に未使用ブロックが存在する場合、この未使用ブロックに対応する仮想ボリューム内のブロックも未使用ブロックとなる。このとき、新たに生成された仮想ボリューム内に存在する未使用ブロックには、世代管理ビットマップの未使用ブロック以外のブロックにのみ、新たに生成された仮想ボリュームに対応するビットを「１」と設定するように構成してもよい。ここで、未使用ブロックとは、データ（ファイルやディレクトリ等）の保存のために割り当てられていないブロックで、今後ファイルやディレクトリを新規生成したり、サイズを拡張したりする際に、データを保存するために用意しているブロックである。
【００９６】
未使用ブロックに対する書き込み要求が発行され、未使用ブロックに保存されているデータが更新されても、ファイルシステムのスナップショットは未使用ブロックのデータを参照することがないため、当該データの更新はファイルシステムのスナップショットには影響を与えない。従って、スナップショット生成後に未使用部分が更新された場合、スナップショット生成の際に未使用ブロックに対する世代管理ビットマップが「０」になっていると差分ボリューム３３０に更新前のデータが複写されず、未使用ブロック内のデータ更新がスナップショットに反映され、スナップショット生成時と内容が変化してしまう。しかし、当該スナップショットを用いたファイルシステムでは、ファイルシステム内のファイルやディレクトリの内容には影響がない。従って、スナップショットを生成する際、未使用ブロックに対する世代管理ビットマップを「０」にしておけば、差分の発生量を削減することが可能となる。
【００９７】
次に、コピーボリューム３２０の生成処理を示す。
【００９８】
図６は、本発明の第１の実施の形態のスナップショット管理プログラム２４１によるコピーボリューム生成処理のフローチャートである。
【００９９】
本実施の形態では、ある時点での運用ボリューム３１０のフルコピーをコピーボリューム３２０としてストレージに保存する。
【０１００】
まず、ホスト計算機１００から、コピーボリューム３２０に設定する世代を指定して、運用ボリュームのコピー要求を送る（ステップ２００１）。この世代の指定は、例えば任意の世代（第１世代、第２世代・・・など）やスナップショット要求の世代の一つ前の世代を指定することができる。
【０１０１】
これを受けて、スナップショット管理プログラム２４１は、現時点での運用ボリューム３１０の全データをコピーボリューム３２０にコピー（複写）する（ステップ２００２）。具体的には、まず運用ボリューム３１０とコピーボリューム３２０とを同期する。そして運用ボリューム３１０の各ブロックを全てコピーボリューム３２０にコピーすることで、運用ボリューム３１０のレプリケーションを生成する。
【０１０２】
運用ボリューム３１０のコピーボリューム３２０へのコピーが完了した後、ホスト計算機１００がスナップショット要求を送ると（ステップ２００３）、スナップショット管理プログラム２４１は、まず、運用ボリューム３１０とコピーボリューム３２０を分離する（ステップ２００４）。これによって、運用ボリューム３１０とコピーボリューム３２０とのそれぞれがアクセスを受け付け可能となる。なお、ホスト計算機１００側から運用ボリューム３１０とコピーボリューム３２０との分離を指示してもよい。
【０１０３】
次に、差分ビットマップ２６１を参照して、一世代分の差分ボリュームの情報を初期化する（ステップ２００５）。次に、コピーボリューム３２０に設定した世代の情報をコピーボリューム世代数管理情報２６２に設定する（ステップ２００６）。
【０１０４】
次に、ホスト計算機１００から、書き込み要求又は次回のスナップショット要求があったか否かを判定する（ステップ２００７）。
【０１０５】
ホストからの書き込み要求があった場合は、ステップ２００８に移行し、書き込み処理（図３参照）を行う。すなわち、差分ビットマップ２６１の世代管理ビットマップ２６１２を参照し、全ビットが「０」であれば、該ブロックのデータは既に更新されているので、運用ボリューム３１０の指定されたブロックにデータを書き込む。
【０１０６】
一方、少なくとも一つのビットが「１」であれば、そのブロックの書き込み前のデータを差分ボリュームに複写し、運用ボリューム３１０の指定されたブロックにデータを書き込む。
【０１０７】
ステップ２００７において、ホスト計算機１００から次回のスナップショット要求、すなわち、ステップ２００３において要求されたスナップショット要求とは異なる世代を指示するスナップショット要求があった場合には、ステップ２００９に移行する。何れの要求もない場合には、この処理を待機する。
【０１０８】
ステップ２００９では、本処理を終了する指示があったか否かを判定する。処理を終了しない場合は、ステップ２０１０に移行し、ホスト計算機１００のスナップショット要求によって指示された世代が、コピーボリューム３２０に設定された世代と異なるか否かを判定する。
【０１０９】
現在のコピーボリューム３２０の世代が指定された世代と同じである場合は、ステップ２０１４に移行する。
【０１１０】
一方、現在のコピーボリューム３２０の世代が指定された世代と異なる場合は、ステップ２０１１に移行し、前回のスナップショット要求以降に書き込み要求があったか否かを判定する。
【０１１１】
書き込み要求がなかった場合はステップ２０１４に移行する。書き込み要求があった場合は、ステップ２０１２に移行し、運用ボリューム３１０とコピーボリューム３２０とを再同期して、運用ボリューム３１０の全データをコピーボリューム３２０にコピーする。コピーが完了すると、運用ボリューム３１０とコピーボリューム３２０とを分離する（ステップ２０１３）。
【０１１２】
このステップ２０１０乃至ステップ２０１３の処理は、例えばステップ２００１において、スナップショット要求の世代の一つ前の世代となるようにコピーボリューム３２０が指示された場合は、新たなスナップショット要求後の書き込み要求が発生したことによってコピーボリューム３２０が二世代前となってしまう。そこで、コピーボリューム３２０の再同期を行って、指示された一世代前のコピーを持つ。
【０１１３】
ステップ２０１４では、差分ビットマップ２６１から、一世代分の差分ボリュームの情報を初期化する。そして、コピーボリューム３２０の情報をコピーボリューム世代数管理情報２６２に登録する。
【０１１４】
以上の処理によって、指定した世代のコピーボリューム３２０が生成される。
【０１１５】
図７は、本発明の第１の実施の形態の世代ボリューム生成プログラム２４２よる、指定世代のボリューム（仮想ボリューム）の生成処理のフローチャートである。
【０１１６】
ホスト計算機１００から、世代Ｎを指定した仮想ボリュームのアクセス要求を受信すると、世代ボリューム生成プログラム２４２は、指定された世代Ｎが、現在のコピーボリューム３２０の世代と同じであるか否かを判定する（ステップ２２０１）。コピーボリューム３２０の世代の情報はコピーボリューム世代数管理情報２６２に保存されているので、これを参照することで、現在のコピーボリュームの世代を取得できる。
【０１１７】
指定された世代Ｎがコピーボリューム３２０の世代と同じであると判定した場合は、アクセス要求のあった内容がコピーボリューム３２０の内容と同じであるため、ホスト計算機１００に対して、コピーボリューム３２０のアクセスを指示し（ステップ２２０９）、処理を終了する。この処理によって、ホスト計算機１００は、指定した世代Ｎの仮想ボリュームへのアクセスが可能となる。
【０１１８】
指定された世代Ｎがコピーボリューム３２０の世代とは異なると判定した場合は、指定された世代Ｎが、最新の世代であるか否かを判定する（ステップ２２０２）。コピーボリューム３２０の世代の情報はコピーボリューム世代数管理情報２６２を参照する。
【０１１９】
指令された世代Ｎが最新の世代でないと判定した場合は、ステップ２２０８において、コピーボリューム３２０と差分ボリューム３３０とから指定世代の仮想ボリュームを指示し、処理を終了する。具体的には、差分ビットマップ２６１を参照して、指定世代の仮想ボリュームを取得する。この場合、運用ボリューム３１０とコピーボリューム３２０とはブロックアドレスは同一であるため、指定世代のブロックのうち、運用ボリューム３１０を参照するブロックは、運用ボリュームブロックアドレス２６１１で示される当該ブロックのブロックアドレスを用いて、コピーボリューム３２０のブロックを参照する。この処理によって、ホスト計算機１００は、指定した世代Ｎの仮想ボリュームへのアクセスが可能となる。
【０１２０】
ステップ２２０２において、指定された世代Ｎが最新の世代であると判定した場合は、最新の世代のスナップショット要求があった後に、運用ボリューム３１０に書き込みがされたか否かを判定する（ステップ２２０３）。
【０１２１】
運用ボリューム３１０に書き込みがされたと判定した場合は、運用ボリューム３１０とコピーボリューム３２０とで再同期処理を行い、コピーボリューム３２０を運用ボリュームの内容と同一にする（ステップ２２０４）。そして、運用ボリューム３１０とコピーボリューム３２０とを分離する（ステップ２２０５）。この時点で、コピーボリューム３２０の内容は、運用ボリューム３１０と同じ、すなわち最新の状態である。次に、コピーボリューム３２０の情報をコピーボリューム世代数管理情報２６２に登録する（ステップ２２０６）。次に、コピーボリューム３２０のアクセスを指示し（ステップ２２０７）、処理を終了する。この処理によって、ホスト計算機１００は、指定した世代Ｎの仮想ボリュームへのアクセスが可能となる。
【０１２２】
ステップ２２０３において、書き込みがされていないと判定した場合は、アクセス要求のあった内容がコピーボリューム３２０の内容と同じであるため、ホスト計算機１００に対して、コピーボリューム３２０のアクセスを指示し（ステップ２２０７）、処理を終了する。この処理によって、ホスト計算機１００は、指定した世代Ｎの仮想ボリュームへのアクセスが可能となる。
【０１２３】
図８は、本発明の第１の実施の形態の世代ボリューム生成プログラム２４２よる、指定世代のボリューム（仮想ボリューム）の生成処理のフローチャートである。この処理は、コピーボリューム３２０に障害が発生した場合などに、当該コピーボリューム３２０の内容を新たなドライブ（論理ボリューム）に生成し、コピーボリューム３２０を復旧するための処理である。
【０１２４】
コピーボリューム３２０の障害等の発生等を検知し、当該コピーボリューム３２０の世代Ｎを新たなボリュームとして生成するための要求を受信すると、まず、指定された世代Ｎが最新の世代であるか否かを判定する（ステップ２４０１）。指定された世代Ｎが最新の世代であると判定した場合は、運用ボリューム３１０の内容がコピーボリューム３２０の内容と同じであるため、運用ボリューム３１０の内容を復旧先の論理ボリュームにコピーする。このとき、当該論理ボリュームの情報をコピーボリューム３２０の情報として、差分ビットマップ２６１、コピーボリューム世代数管理情報２６２等のマッピング情報を変更し、処理を終了する（ステップ２４０２）。
【０１２５】
一方、指定された世代Ｎが最新の世代でないと判定した場合は、運用ボリューム３１０と差分ボリューム３３０とから、最後にスナップ要求があった時点より前の世代のボリュームを新たな論理ボリュームに生成する（ステップ２４０３）。具体的には、まず、現在の運用ボリューム３１０と差分ボリューム３３０とから最後のスナップショット時の世代の仮想ボリュームを新たな論理ボリュームにコピーする。
【０１２６】
次に、当該論理ボリュームの内容、すなわち、最後のスナップショット時の世代の運用ボリューム３１０の内容と、差分ボリューム３３０との内容から、指定世代の仮想ボリュームを生成し、コピーボリューム３２０復旧先の論理ボリュームにコピーする（ステップ２４０４）。
【０１２７】
具体的には、差分ビットマップ２６１を参照して、指定世代の仮想ボリュームを取得する。この場合、最後のスナップショット時の世代の論理ボリュームの内容と運用ボリューム３１０とはブロックアドレスは同一であるため、指定世代のブロックのうち、運用ボリューム３１０を参照するブロックは、運用ボリュームブロックアドレス２６１１で示される当該ブロックのブロックアドレスを用いて、論理ボリュームのブロックを参照する。
【０１２８】
この処理によって、指定世代の仮想ボリュームが取得可能となるので、当該仮想ボリュームをコピーボリューム３２０復旧先の論理ボリュームにコピーする。
【０１２９】
以上の仮想ボリューム生成処理によって、コピーボリュームに障害が発生した場合に、運用ボリューム３１０と差分ボリューム３３０とから、コピーボリュームを新たな論理ボリュームに復旧することができる。
【０１３０】
図９は、運用ボリューム復旧プログラム２４３よる、運用ボリューム３１０の復旧処理のフローチャートである。この処理は、運用ボリューム３１０に障害が発生した場合などに、当該運用ボリューム３１０の内容を復旧するための処理である。
【０１３１】
運用ボリューム３１０の障害等が発生等によって、運用ボリューム復旧プログラム２４３が、当該運用ボリューム３１０を指定された世代Ｎの新たなボリュームとして生成するための要求を受信すると、まず、指定された世代Ｎがコピーボリューム３２０の世代であるか否かを判定する（ステップ２６０１）。指定された世代Ｎがコピーボリューム３２０の世代と同じであると判定した場合は、コピーボリューム３２０の内容を、そのまま運用ボリューム３１０として利用できる。そこで、コピーボリューム３２０を運用ボリューム３１０の情報に変更して、差分ビットマップ２６１、コピーボリューム世代数管理情報２６２等のマッピング情報を変更し、処理を終了する（ステップ２６０６）。
【０１３２】
一方、コピーボリューム３２０の世代が、指定された世代Ｎとは異なる場合は、まず、差分ビットマップ２６１を参照して、指定世代Ｎのうち、差分ボリューム３３０が示されているブロックアドレスは、当該ブロックアドレスの内容をコピーボリューム３２０に上書きする（ステップ２６０２）。
【０１３３】
次に、現状の運用ボリューム３１０の世代番号を保存する（ステップ２６０３）。
【０１３４】
次に、コピーボリューム３２０及び差分ボリューム３３０の、指定された世代Ｎよりも新しい世代（Ｎ＋１世代以降）のデータを破棄する。さらに、差分ビットマップ２６１の内容を破棄する（ステップ２６０４）。
【０１３５】
次に、差分ビットマップ２６１の情報を、現状のコピーボリューム３２０のブロックアドレスに更新する。運用ボリューム３１０とコピーボリューム３２０とはブロックアドレスは同一であるため、結果として復旧した新たな運用ボリュームのブロックアドレスとなる（ステップ２６０５）。
【０１３６】
次に、コピーボリューム３２０のマッピング情報を運用ボリューム３１０の情報に変更する。具体的には、差分ビットマップ２６１、コピーボリューム世代数管理情報２６２等のマッピング情報を変更することで、コピーボリューム３２０を運用ボリューム３１０に変更する。その後、処理を終了する（ステップ２６０６）。
【０１３７】
以上の処理によって、運用ボリューム３１０に障害が発生した場合に、コピーボリューム３２０と差分ボリューム３３０とから、運用ボリューム３１０を新たな論理ボリュームに復旧することができる。
【０１３８】
図１０は、本発明の第１の実施の形態の世代ボリューム生成プログラム２４２による、指定世代のボリューム（仮想ボリューム）の生成処理のフローチャートである。この処理は、差分ボリューム３３０に障害が発生した場合などに、差分ボリュームを用いずに、指定世代の仮想ボリュームへのアクセスを行う処理である。
【０１３９】
ホスト計算機１００から、世代Ｎを指定した仮想ボリュームのアクセス要求を受信すると、世代ボリューム生成プログラム２４２は、指定された世代Ｎが、最新の世代であるか否かを判定する（ステップ２７０１）。なお、コピーボリューム３２０の世代の情報はコピーボリューム世代数管理情報２６２を参照する。
【０１４０】
ステップ２７０１において、指定された世代Ｎが最新の世代であると判定した場合は、当該最新の世代のスナップショット要求があった後に、運用ボリューム３１０に書き込みがされたか否かを判定する（ステップ２７０２）。
【０１４１】
運用ボリューム３１０に書き込みがされたと判定した場合は、運用ボリューム３１０とコピーボリューム３２０とで再同期処理を行い、コピーボリューム３２０を運用ボリュームの内容と同一にする（ステップ２７０３）。そして、運用ボリューム３１０とコピーボリューム３２０とを分離する（ステップ２７０４）。この時点で、コピーボリューム３２０の内容は、運用ボリューム３１０と同じ、すなわち最新の状態である。
【０１４２】
次に、コピーボリューム３２０の情報をコピーボリューム世代数管理情報２６２に登録する（ステップ２７０５）。次に、コピーボリューム３２０のアクセスを指示し（ステップ２７０６）、処理を終了する。この処理によって、ホスト計算機１００は、指定した世代Ｎの仮想ボリュームへのアクセスが可能となる。
【０１４３】
ステップ２７０２において、書き込みがされていないと判定した場合は、アクセス要求のあった内容がコピーボリューム３２０の内容と同じであるため、ホスト計算機１００に対して、コピーボリューム３２０のアクセスを指示し（ステップ２７０３）、処理を終了する。この処理によって、ホスト計算機１００は、指定した世代Ｎの仮想ボリュームへのアクセスが可能となる。
【０１４４】
ステップ２７０１において、指令された世代Ｎが最新の世代でないと判定した場合は、ステップ２７０７に移行し、指定された世代Ｎが、現在のコピーボリューム３２０の世代と同じであるか否かを判定する。
【０１４５】
指定世代Ｎが、現在のコピーボリューム３２０の世代と同じであると判定した場合は、コピーボリューム３２０の情報をコピーボリューム世代数管理情報２６２に登録する（ステップ２７０５）。
【０１４６】
次に、コピーボリューム３２０のアクセスを指示し（ステップ２７０６）、処理を終了する。この処理によって、ホスト計算機１００は、指定した世代Ｎの仮想ボリュームへのアクセスが可能となる。
【０１４７】
一方、ステップ２７０７において、指定された世代Ｎが現在のコピーボリューム３２０の世代ではないと判定した場合は、当該世代Ｎは、差分ボリューム３３０に保存されたブロックアドレスに存在するが、当該差分ボリューム３３０は障害のため読み込みができない。そこで、世代ボリューム生成プログラム２４２は、アクセス元のホスト計算機１００に、当該世代Ｎの仮想ボリュームは生成不可能である旨のメッセージを送信し（ステップ２７０８）、処理を終了する。
【０１４８】
図１１は、本発明の第１の実施の形態の差分ボリューム容量管理プログラム２４４による、差分ボリューム３３０の容量管理処理のフローチャートである。
【０１４９】
差分ボリューム容量管理プログラム２４４は、差分ボリューム３３０への書き込み（更新）要求があったときに起動する。そして、差分ボリューム３３０全体の使用量が、予め定めた閾値を超えないように監視する。超えた場合は、テープ装置４００にバックアップを行うなどの処理をする。
【０１５０】
まず、差分ボリューム３３０への書き込みがあったか否かを判定する（ステップ２９０１）。書き込みがない場合は、書き込みがあるまで待機する。
【０１５１】
書き込みがあったと判定した場合は、差分ボリューム３３０の全体の使用量が、予め定めた閾値以上となったか否かを判定する（ステップ２９０２）。差分ボリューム３３０の使用量は、差分ボリューム３３０へのアクセスがあった時点で登録される容量管理情報２６４に保存されている。差分ボリュームの全体の使用量が予め定めた閾値に満たない場合は、ステップ２９０１に戻る。差分ボリュームの全体の使用量が予め定めた閾値以上となった場合は、差分ボリューム３３０のデータうち、優先度の低い世代（世代Ｍ）を検索する。
【０１５２】
優先度の判定には、最後のアクセスから時間がたっているデータを含む世代、アクセス頻度が低いデータを含む世代、当該データ容量の多い世代、を優先度の低いものと判断する。
【０１５３】
次に、検索した優先度の低い世代Ｍのボリュームを生成する（ステップ２９０４）。この場合、仮想ボリュームとしてアクセスを受け付けてもよいし、新たな論理ボリュームにコピーしてもよい。そして、当該世代Ｍのボリュームをテープ装置４００にバックアップを行う（ステップ２９０５）。
【０１５４】
次に、世代Ｍの情報を削除する（ステップ２９０６）。具体的には、差分ブロック管理テーブル２６２０を参照して、世代Ｍのみが参照するデータを特定する。そして、世代Ｍのみが参照すると特定されたデータを差分ボリューム３３０から削除する。その後、差分ビットマップ２６１から、当該世代Ｍの情報を削除する。
【０１５５】
以上の処理によって、差分ボリューム３３０の使用量を、予め定めた閾値を超えない容量に設定することができる。
【０１５６】
ユーザの指示によって、動的に差分ボリューム３３０の容量を管理することもできる。例えば、ユーザによって世代数が指示された場合は、指示された世代数より少ない世代で容量が上限に達した場合は、古い世代のデータをテープ装置４００にバックアップする。また、ユーザによって容量を指示された場合は、指示された容量を確保できるまで、古い世代のデータをテープ装置４００にバックアップする。なお、テープ装置４００へのバックアップではなく、その世代のデータを削除してもよい。また、ユーザの指示によって、テープ装置４００へのバックアップをしてもよい。また、ユーザの指示によって、その世代のデータを削除してもよい。
【０１５７】
次に、本発明の第１の実施の形態のストレージシステムを応用した運用例を説明する。
【０１５８】
図１２は、本発明の第１の実施の形態のストレージ管理装置２００において、過去に不正な書き込みがあったことを発見した場合に、その不正な書き込みのあった時点よりも前の状態に運用ボリューム３１０の内容を復旧する処理の例を示す。
【０１５９】
不正な書き込みがあったことをユーザが発見した場合、次のような処理を行う。
【０１６０】
まず、ユーザは、ホスト計算機１００つの管理用端末から、ストレージ管理装置２００の共有メモリにあるスナップ情報２６３を参照する。スナップ情報２６３には、スナップショットがあった時刻とその世代番号が保存されているので、ユーザは不正な書き込みがあった時刻から、その時点よりも前の世代番号（世代Ｌ）を取得する（３００１）。
【０１６１】
次に、ユーザは、ストレージ管理装置２００に対して、運用ボリューム３１０を、世代Ｌに戻す要求を送る（ステップ３００２）。
【０１６２】
要求を受けたストレージ管理装置２００では、運用ボリューム復旧プログラム２４３が、指示された世代Ｌの運用ボリュームを復旧する。具体的には、まず、差分ビットマップ２６１を参照して、世代Ｌの仮想ボリュームを取得する。そして、当該世代Ｌの仮想ボリュームのうち、差分ボリューム３３０のブロックアドレスが示されているものは、そのブロックアドレスを運用ボリューム３１０にコピーする。このようにすることで指定世代Ｌの運用ボリューム３１０が生成される（ステップ３００３）。
【０１６３】
運用ボリューム３１０が世代Ｌとなった後に、世代Ｌよりも新しい世代の情報を削除する（ステップ３００４）。
【０１６４】
そして、運用ボリューム３１０とコピーボリューム３２０とで再同期処理を行い、コピーボリューム３２０を運用ボリュームの内容と同一にする（ステップ３００５）。そして、運用ボリューム３１０とコピーボリューム３２０とを分離する（ステップ３００６）。このようにすることで、コピーボリューム３２０の内容は、運用ボリューム３１０と同じとなる。
【０１６５】
以上の処理によって、ユーザの指示により、運用ボリューム３１０を過去の任意の世代に復旧することができる。なお、運用ボリューム３１０を指定世代に復旧するのではなく、まずコピーボリューム３２０を指定世代Ｌに設定した後、マッピング情報を変更して、世代Ｌのコピーボリュームを運用ボリューム３１０に変更してもよい。
【０１６６】
図１３は、本発明の第１の実施の形態のストレージシステムを応用した別の運用例である。
【０１６７】
ユーザは、ホスト計算機１００を介して、ユーザから不正な書き込みのあった時刻と運用ボリュームを復旧する要求とを送る。この要求を受けて、ストレージ管理装置２００は、自動的に、その不正な書き込みのあった時点よりも前の状態に運用ボリューム３１０の内容を復旧する。
【０１６８】
不正な書き込みがあったことをユーザが発見した場合、次のような処理を行う。
【０１６９】
まず、ユーザは、ホスト計算機１００つの管理用端末から、不正な書き込みがあった時刻と共に運用ボリュームを当該時刻の直前の世代に復旧する要求を送信する（ステップ３１０１）。
【０１７０】
要求を受けたストレージ管理装置２００では、運用ボリューム復旧プログラム２４３が、指示された時刻を取得し、当該時刻以前で直近の世代を検索する（ステップ３１０２）。具体的には、指示された時刻を「Ｔ３」とし、世代Ｋがスナップショットされた時刻をＴKとすると、以下の式を満足する世代Ｋを検索する。
ＴK＜Ｔ３＜ＴK+1
この式によって、世代Ｋがスナップショットされた時刻が、指示された時刻Ｔ３以前である、かつ、世代Ｋの次の世代である世代Ｋ＋１がスナップショットされた時刻が、指示された時刻Ｔ３以降である世代Ｋが導かれる。
又は、
ＴK＝Ｔ３
この式によって、世代Ｋがスナップショットされた時刻は、指示された時刻Ｔ３と同じ時刻である世代Ｋが導かれる。
【０１７１】
従って、指示された時刻Ｔ３以前で直近の世代である世代Ｋが取得される。
【０１７２】
次に、運用ボリューム３１０を、取得した世代Ｋに復旧する。
【０１７３】
具体的には、まず、差分ビットマップ２６１を参照して、世代Ｋの仮想ボリュームを取得する。そして、当該世代Ｋの仮想ボリュームのうち、差分ボリューム３３０のブロックアドレスが示されているものは、そのブロックアドレスを運用ボリューム３１０にコピーする。このようにすることで指定世代Ｋの運用ボリューム３１０が生成される（ステップ３１０３）。
【０１７４】
運用ボリューム３１０が世代Ｋとなった後に、世代Ｋよりも新しい世代の情報を削除する（ステップ３１０４）。
【０１７５】
そして、運用ボリューム３１０とコピーボリューム３２０とで再同期処理を行い、コピーボリューム３２０を運用ボリュームの内容と同一にする（ステップ３１０５）。そして、運用ボリューム３１０とコピーボリューム３２０とを分離する（ステップ３１０６）。このようにすることで、コピーボリューム３２０の内容は、運用ボリューム３１０と同じとなる。
【０１７６】
以上の処理によって、ユーザが時刻を指示することにより、運用ボリューム３１０を過去の任意の世代に自動的に復旧することができる。なお、運用ボリューム３１０を指定世代に復旧するのではなく、まずコピーボリューム３２０を指定世代Ｋに設定した後、マッピング情報を変更して、世代Ｋのコピーボリュームを運用ボリューム３１０に変更してもよい。
【０１７７】
以上のように、本発明の第１の実施の形態のストレージシステムでは、ストレージ３００に、運用ボリューム３１０、ある時点での運用ボリューム３１０のフルコピーを保存するコピーボリューム３２０、及び、運用ボリューム３１０への書き込みデータのスナップショットを保存する差分ボリューム３３０を備えたので、指定された世代のボリュームを取得することが可能となる。従って、ストレージシステム内に指定世代のバックアップを保存することが可能となり、ストレージの容量を低く抑えつつも、テープ装置等の通信速度の遅いテープ装置を用いることなく、指定世代へのデータのアクセス、バックアップができる。
【０１７８】
次に、本発明の第２の実施の形態について説明する。
【０１７９】
本発明の第２の実施の形態では、コピーボリューム３２０は、指定された世代のデータのコピーを持つのではなく、運用ボリュームにアクセスがあった時点で、リアルタイムにデータをバックアップする。なお、第１の実施の形態と同一の構成には同一の符号を付し、その説明は省略する。
【０１８０】
図１４は、本発明の第２の実施の形態のスナップショット管理プログラム２４１によるコピーボリューム生成処理のフローチャートである。図１４は図６に類似しているが、ホスト計算機１００からの書き込み要求があった際に、常にコピーボリューム３２０のデータも更新されるように処理する。
【０１８１】
処理を開始すると、スナップショット管理プログラム２４１は、現時点での運用ボリューム３１０の全データをコピーボリューム３２０にコピー（複写）する（ステップ２１０１）。具体的には、運用ボリューム３１０とコピーボリューム３２０とを同期する。そして運用ボリューム３１０の各ブロックを全てコピーボリューム３２０にコピーすることで、運用ボリューム３１０のレプリケーションを生成する。
【０１８２】
運用ボリューム３１０のコピーボリューム３２０へのコピーが完了した後、ホスト計算機１００がスナップショット要求を送ると（ステップ２１０２）、スナップショット管理プログラム２４１は、まず、運用ボリュームとコピーボリュームを分離する。そして、差分ビットマップ２６１を参照して、一世代分の差分ボリュームの情報を初期化する（ステップ２１０３）。
【０１８３】
次に、ホスト計算機１００から、書き込み要求又は次回のスナップショット要求があったか否かを判定する（ステップ２１０４）。
【０１８４】
ホストからの書き込み要求があった場合は、ステップ２１０５に移行し、書き込み処理（図３参照）を行う。すなわち、差分ビットマップ２６１の世代管理ビットマップ２６１２を参照し、全ビットが「０」であれば、該ブロックのデータは既に更新されているので、運用ボリューム３１０の指定されたブロックにデータを書き込む。
【０１８５】
一方、少なくとも一つのビットが「１」であれば、そのブロックの書き込み前のデータを差分ボリュームに複写し、運用ボリューム３１０の指定されたブロックにデータを書き込む。
【０１８６】
書き込み処理が終了すると、運用ボリューム３１０に書き込まれたデータ（更新されたブロック）を、コピーボリューム３２０に対しても書き込む（ステップ２１０６）。
【０１８７】
ステップ２１０４において、ホスト計算機１００から次回のスナップショット要求、すなわち、ステップ２１０２において要求されたスナップショット要求とは異なる世代を指示するスナップショット要求があった場合には、ステップ２１０７に移行する。何れの要求もない場合には、この処理を繰り返し、待機する。
【０１８８】
ステップ２１０７では、本処理を終了するか否かを判定する。処理を終了しない場合は、ステップ２１０４に戻り、ホスト計算機１００からのホストからの書き込み要求に備える。
【０１８９】
以上の処理によって、ホスト計算機１００から運用ボリューム３１０のブロックに書き込み要求があった際にコピーボリューム３２０にも同じブロックに対して書き込みがされ、常に運用ボリューム３１０と同じ状態のコピーが保存されることになる。
【０１９０】
図１５は、本発明の第２の実施の形態の世代ボリューム生成プログラム２４２よる、指定世代のボリューム（仮想ボリューム）の生成処理のフローチャートである。図１５は図７に類似しているが、運用ボリューム３１０のデータのコピーを常にコピーボリューム３２０が保持している場合の処理である。
【０１９１】
ホスト計算機１００から、世代Ｎを指定した仮想ボリュームのアクセス要求を受信すると、運用ボリューム３１０とコピーボリューム３２０とを分離する（ステップ２３０１）。
【０１９２】
次に、現在のコピーボリューム３２０の世代情報を、コピーボリューム世代数管理情報２６２に登録する（ステップ２３０２）。そして、差分ビットマップ２６１の内容を更新する。
【０１９３】
次に、ホスト計算機１００から指定された世代Ｎが最新の世代であるか否かを判定する（ステップ２３０３）。指定された世代Ｎが最新の世代であると判定した場合は、アクセス要求のあった内容がコピーボリューム３２０の内容と同じであるため、ホスト計算機１００に対して、コピーボリューム３２０のアクセスを指示し（ステップ２３０４）、処理を終了する。この処理によって、ホスト計算機１００は、指定した世代Ｎの仮想ボリュームへのアクセスが可能となる。
【０１９４】
一方、指定された世代Ｎが最新の世代でないと判定した場合は、コピーボリューム３２０と差分ボリューム３３０とから、指定世代の仮想ボリュームを指示し、処理を終了する（ステップ２３０５）。具体的には、差分ビットマップ２６１を参照して、指定世代の仮想ボリュームを取得する。この場合、運用ボリューム３１０とコピーボリューム３２０とはブロックアドレスは同一であるため、指定世代のブロックのうち、運用ボリューム３１０を参照するブロックは、運用ボリュームブロックアドレス２６１１で示される当該ブロックのブロックアドレスを用いて、コピーボリューム３２０のブロックを参照する。この処理によって、ホスト計算機１００は、指定した世代Ｎの仮想ボリュームへのアクセスが可能となる。
【０１９５】
以上の処理によって、常に運用ボリューム３１０とコピーボリューム３２０とのデータを同期すように構成されている場合でも、ホスト計算機から指定された世代のボリュームへのアクセスが可能となる。
【０１９６】
図１６は、本発明の第２の実施の形態の世代ボリューム生成プログラム２４２よる、指定世代のボリューム（仮想ボリューム）の生成処理を示すフローチャートである。この処理は、コピーボリューム３２０に障害が発生した場合などに、当該コピーボリューム３２０の内容を新たなドライブ（論理ボリューム）に生成し、コピーボリューム３２０を復旧するための処理である。図１６は図８に類似しているが、運用ボリューム３１０のデータのコピーを常にコピーボリューム３２０がもっている場合の処理である。
【０１９７】
コピーボリューム３２０の障害等が発生等を検知し、当該コピーボリューム３２０の世代Ｎを新たなボリュームとして生成するための要求を受信すると、まず、指定された世代Ｎが最新の世代であるか否かを判定する（ステップ２５０１）。指定された世代Ｎが最新の世代であると判定した場合は、運用ボリューム３１０の内容がコピーボリューム３２０の内容と同じであるため、運用ボリューム３１０の内容を復旧先の論理ボリュームにコピーする。
【０１９８】
このとき、当該論理ボリュームの情報をコピーボリューム３２０の情報として、差分ビットマップ２６１、コピーボリューム世代数管理情報２６２等のマッピング情報を変更し、処理を終了する（ステップ２５０２）。
【０１９９】
一方、指定された世代Ｎが最新の世代でないと判定した場合は、運用ボリューム３１０と差分ボリューム３３０とから、指定世代Ｎのボリュームを新たな論理ボリュームに生成する（ステップ２５０３）。
【０２００】
すなわち、運用ボリューム３１０の内容と差分ボリューム３３０の内容とから、指定世代の仮想ボリュームを生成し、コピーボリューム３２０復旧先の論理ボリュームにコピーする。具体的には、差分ビットマップ２６１を参照して、指定世代の仮想ボリュームを取得する。
【０２０１】
この処理によって、指定世代の仮想ボリュームが取得可能となるので、当該仮想ボリュームをコピーボリューム３２０復旧先の論理ボリュームにコピーする。
【０２０２】
以上のボリューム生成処理によって、コピーボリュームに障害が発生した場合に、運用ボリューム３１０と差分ボリューム３３０とから、コピーボリュームを新たな論理ボリュームに復旧することができる。
【０２０３】
図１７は、本発明の第２の実施の形態の世代ボリューム生成プログラム２４２による、指定世代のボリューム（仮想ボリューム）の生成処理を示すフローチャートである。この処理は、差分ボリューム３３０に障害が発生した場合などに、差分ボリュームを用いずに、指定世代の仮想ボリュームへのアクセスを行う処理である。図１７は図１０に類似しているが、運用ボリューム３１０のデータのコピーを常にコピーボリューム３２０が保持している場合の処理である。
【０２０４】
ホスト計算機１００から、世代Ｎを指定した仮想ボリュームのアクセス要求を受信すると、世代ボリューム生成プログラム２４２は、指定された世代Ｎが、最新の世代であるか否かを判定する（ステップ２８０１）。なお、コピーボリューム３２０の世代の情報はコピーボリューム世代数管理情報２６２を参照する。
【０２０５】
ステップ２８０１において、指定された世代Ｎが最新の世代であると判定した場合は、コピーボリューム３２０の情報をコピーボリューム世代数管理情報２６２に登録する（ステップ２８０２）。次に、コピーボリューム３２０のアクセスを指示し（ステップ２８０３）、処理を終了する。この処理によって、ホスト計算機１００は、指定した世代Ｎの仮想ボリュームへのアクセスが可能となる。
【０２０６】
ステップ２８０１において、指令された世代Ｎが最新の世代でないと判定した場合は、当該世代Ｎは、差分ボリューム３３０に保存されたブロックアドレスに存在するが、差分ボリューム３３０は障害のため読み込みができない。そこで、世代ボリューム生成プログラム２４２は、アクセス元のホスト計算機１００に、当該世代Ｎにはアクセス不可能である旨のメッセージを送信し（ステップ２８０４）、処理を終了する。
【０２０７】
以上のように、本発明の第２の実施の形態のストレージシステムでは、ストレージ３００に、運用ボリューム３１０、運用ボリューム３１０のフルコピーを常に保存するコピーボリューム３２０、及び、運用ボリューム３１０への書き込みデータのスナップショットを保存する差分ボリューム３３０を備えたので、第１の実施の形態と同様に、指定された世代のボリュームを取得することが可能となる。従って、ストレージシステム内に指定世代のバックアップを保存することが可能となり、ストレージの容量を低く押させつつも、テープ装置等の通信速度の遅いテープ装置を用いることなく、指定世代へのデータのアクセス、バックアップができる。特に、リアルタイムで運用ボリュームのデータのバックアップを持つので、ストレージの障害発生時にもデータを復旧が迅速となる。
【図面の簡単な説明】
【０２０８】
【図１】本発明の第１の実施の形態のストレージシステムの構成のブロック図である。
【図２Ａ】本発明の第１の実施の形態の差分ビットマップのスナップショット管理テーブルの説明図である。
【図２Ｂ】本発明の第１の実施の形態の差分ビットマップの差分ブロック管理テーブルの説明図である。
【図３】本発明の第１の実施の形態の書き込み処理のフローチャートである。
【図４】本発明の第１の実施の形態の読み出し処理のフローチャートである。
【図５】本発明の第１の実施の形態のスナップショット生成処理のフローチャートである。
【図６】本発明の第１の実施の形態のコピーボリューム生成処理のフローチャートである。
【図７】本発明の第１の実施の形態の指定世代のボリュームの生成処理のフローチャートである。
【図８】本発明の第１の実施の形態の指定世代の仮想ボリュームへのアクセス処理のフローチャートである。
【図９】本発明の第１の実施の形態の運用ボリュームの復旧処理のフローチャートである。
【図１０】本発明の第１の実施の形態の指定世代のボリュームの生成処理のフローチャートである。
【図１１】本発明の第１の実施の形態の差分ボリュームの容量管理処理のフローチャートである。
【図１２】本発明の第１の実施の形態の運用ボリュームの内容を復旧する処理のフローチャートである。
【図１３】本発明の第１の実施の形態の運用ボリュームの内容を復旧する処理のフローチャートである。
【図１４】本発明の第２の実施の形態のコピーボリューム生成処理のフローチャートである。
【図１５】本発明の第２の実施の形態の指定世代のボリュームの生成処理のフローチャートである。
【図１６】本発明の第２の実施の形態の指定世代のボリュームの生成処理のフローチャートである。
【図１７】本発明の第２の実施の形態の指定世代のボリュームの生成処理のフローチャートである。
【符号の説明】
【０２０９】
１００  ホスト計算機
２００  ストレージ装置
２１０  チャネルＩ／Ｆ
２２０  ＣＰＵ
２３０  ストレージＩ／Ｆ
２４０  メモリ
２５０  キャッシュメモリ
２６０  共有メモリ
３００  ストレージ
３１０  運用ボリューム
３２０  コピーボリューム
３３０  差分ボリューム
４００  テープ装置
【図１】
2006107162.tif 000003
【図２Ａ】
2006107162.tif 000004
【図２Ｂ】
2006107162.tif 000005
【図３】
2006107162.tif 000006
【図４】
2006107162.tif 000007
【図５】
2006107162.tif 000008
【図６】
2006107162.tif 000009
【図７】
2006107162.tif 000010
【図８】
2006107162.tif 000011
【図９】
2006107162.tif 000012
【図１０】
2006107162.tif 000013
【図１１】
2006107162.tif 000014
【図１２】
2006107162.tif 000015
【図１３】
2006107162.tif 000016
【図１４】
2006107162.tif 000017
【図１５】
2006107162.tif 000018
【図１６】
2006107162.tif 000019
【図１７】
2006107162.tif 000020