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