以下、本発明の実施の形態を図面を参照して説明する。
図1は、本発明の第1の実施の形態のストレージシステムの構成を示すブロック図である。
サーバ装置101は、ネットワークインターフェース112を介して接続されたクライアント131、132に対してファイル共有サービスを提供する。
サーバ装置101は、一つ以上のCPU111、一つ以上のネットワークインターフェース112、一つ以上のストレージインターフェース113、及びメモリ114を備える。
ネットワークインターフェース112は、クライアント131、132との間でTCP/IPプロトコルによって信号(コマンド、データ)を送受信する。
ストレージインターフェース113は、ディスク装置115、116との間でSCSI(Small Computer System Interface)に基づく信号(コマンド、データ)を送受信する。このストレージインターフェース113にはディスク装置115、116及びバックアップ装置117が接続されている。
メモリ114には、ファイルサーバプログラム121、データ保護プログラム122、ファイルシステム処理プログラム123及びスナップショット管理プログラム124が記憶されており、CPU111がこれらのプログラムを呼び出して実行することによって、各種の処理が行われる。
ファイルサーバプログラム121は、クライアント131、132からのデータアクセス要求に応じて、ファイルシステム処理プログラム123に対してファイルやディレクトリの読み出し処理若しくは書き込み処理を実行するように要求し、その実行結果を要求元であるクライアント131、132に返送する。
データ保護プログラム122は、スナップショット管理プログラム124にスナップショットの生成や、削除を要求したり、指定したファイルに対してファイルシステム処理プログラム123にファイルの読み出し要求を発行して、読み出したデータをバックアップ装置117に書き込み、データの複製(バックアップ)を作成する。
ファイルシステム処理プログラム123は、ファイルサーバプログラム121や、データ保護プログラム122が発行するファイルやディレクトリの読み出し処理及び書き込み処理の要求に応じて、ファイルやディレクトリを格納しているボリューム(ディスク装置115、116上に特定の用途のために確保された領域)、並びに、アクセスするブロックの位置及びサイズを指定し、データの読み出し処理や、書き込み処理をスナップショット管理プログラム124に対して発行する。
スナップショット管理プログラム124は、データ保護プログラムからスナップショットの生成要求を受信すると、ディスク装置115の運用ボリュームに対するスナップショットを生成する。このスナップショットの生成処理は、スナップショット管理プログラム124が、後述するスナップショット管理テーブル211を用いて、運用ボリューム115及び差分ボリューム116に記憶されたデータを、スナップショットの生成要求の受信時に運用ボリューム115に格納されていたデータにアクセス可能となるように管理し、生成した運用ボリューム115のスナップショットを提供するための仮想ボリュームをアクセス可能にする。
ここで仮想ボリュームとは、一又は複数のディスク装置内の記憶領域からなる仮想的なボリュームであって、実際には運用ボリューム115内の一部ブロックと差分ボリューム内の一部ブロックから構成されている。
スナップショット管理プログラム124は、ファイルシステムなどが格納されるボリューム(運用ボリューム115)に加え、差分データ、すなわちスナップショットの維持に必要な差分データを格納するボリューム(差分ボリューム)を管理し、ファイルシステム123の要求に応じたデータ入出力処理、スナップショットを維持する処理、及び、スナップショットを利用可能にする処理を行う。
具体的には、スナップショット管理プログラム124は、スナップショットの生成要求を受信すると、まず後述するスナップショット管理テーブル211に新しい仮想ボリュームの識別情報を登録する。この仮想ボリュームのブロックは、最初はスナップショット管理テーブル211によって、運用ボリューム115のブロックと一対一で対応付けられている。しかし、その後運用ボリューム115内のデータが更新される際には、スナップショット管理プログラム124は、後述するように運用ボリューム115内の更新前のデータを差分ボリュームに複写し、この複写後に運用ボリューム115の記憶内容を更新する。そして、スナップショット管理プログラム124は、更に、データが更新された運用ボリューム115内のブロックに対応する仮想ボリューム内のブロックを、スナップショット生成要求を受信した時点で運用ボリューム115に格納されていたデータ(即ち更新前のデータ)が格納されている差分ボリューム上のブロックと対応付けるようスナップショット管理テーブル211を更新する。
ファイルシステム処理プログラム123が仮想ボリュームに対するアクセス要求をスナップショット管理プログラム124に発行すると、スナップショット管理プログラム124はスナップショット管理テーブル211を参照して、仮想ボリュームのブロックと対応付けられている運用ボリューム115のブロック又は差分ボリュームのブロックにアクセスする。従って、ファイルシステム処理プログラム123は、仮想ボリュームにアクセスすることによって、スナップショットが生成要求が発行された時点での運用ボリューム115内の情報が利用できるため、サーバ装置101はファイルシステムのスナップショットイメージを提供することが可能になる。
なお、これらの処理に関しては後に詳述する。
本実施例では、ディスク装置115にファイルシステムを格納している運用ボリュームを、ディスク装置116に差分データ(スナップショットの維持に必要な差分データ等)を格納する差分ボリュームを割り当てている。
ディスク装置115、116は、それぞれ独立した物理ディスクドライブを用いてもよいし、物理的に一つのディスクドライブを論理区画によって分割し、各論理区画をディスク装置115、116としてもよい。また、複数のディスク装置から構成され一つのディスクとして論理的に設定された論理ディスク装置をディスク装置115、116としてもよい。さらに、論理ディスクを構成する複数の物理ディスクドライブによってRAID装置を構成してもよい。
バックアップ装置117は、ディスク装置115、116に記憶されているデータの複製を記憶する装置である。本実施の形態では、バックアップ装置117はサーバ装置101のストレージインターフェース113に接続されているが、ネットワークインターフェース112を介してサーバ装置に接続されているクライアント131等に設けられたストレージインターフェースに接続してもよい。
図2は、第1の実施の形態のスナップショット管理プログラム124の構成を示すブロック図である。
スナップショット管理プログラム124には、ファイルシステム処理プログラム123が発行する処理要求に応じて呼び出される書き込み処理サブプログラム201及び読み出し処理サブプログラム202、並びに、データ保護プログラム122が発行する処理要求に応じて呼び出されるスナップショット生成サブプログラム203及びスナップショット削除サブプログラム204が含まれる。また、これらの各サブプログラムが実行される際に利用される情報として、スナップショット管理テーブル211と、差分ブロック管理テーブル212がメモリ114内に格納されている。
スナップショット管理テーブル211(詳細は図3参照)には、スナップショットを維持し、スナップショットを利用可能にするために保持されるデータが記憶される。差分ブロック管理テーブル212(詳細は図4参照)には、差分ボリューム116のブロック使用状況を管理するデータが記憶される。
図3は、第1の実施の形態のスナップショット管理テーブル211の詳細を示す説明図である。
スナップショット管理テーブル211の列311には、運用ボリューム115のブロックアドレスが登録されており、列311の最初の行(第1行)には運用ボリューム115の1番目のブロックアドレス0番が割り当てられ、第2行には運用ボリューム115のブロックアドレス1番が割り当てられ、以下順に運用ボリューム115のブロックアドレスが割り当てられ、最後の行である第m行には運用ボリューム115のブロックアドレス(m−1)番が割り当てられる。
列312は、Cowビットマップであり、これについては後述する。
列313以降の列には、仮想ボリュームの各ブロックアドレスに対応するデータの格納位置が登録される。例えば、列313にはスナップショット番号1のデータの格納位置が登録される(この場合、スナップショット番号と仮想ボリュームの番号は同一である。例えば、スナップショット番号1には仮想ボリューム1が対応している)。
列313の第1行には仮想ボリューム1のブロックアドレス0番に対応するデータが格納されている記憶領域を識別する情報が記録され、以降順番に、第2行目には仮想ボリューム1のブロックアドレス1番、第3行目にはブロックアドレス2番・・・に対応するデータの格納位置が記録される。
より具体的には、列313の第1行に仮想ボリューム1のブロックアドレス0番のデータの格納位置として記録されている0番は、差分ボリューム116のブロックアドレス0番に対応している。
スナップショット管理プログラム124がスナップショット生成要求を受信した後に、運用ボリューム115のブロックアドレス0番のデータが更新されるとき、スナップショット管理プログラム124は、運用ボリューム115のブロックアドレス0番に格納されている更新前のデータを、差分ボリューム116のブロックアドレス0番に書き込み、その後に運用ボリューム115のブロックアドレス0番のデータを更新する。スナップショットへのアクセスを提供するためには、スナップショット生成要求を受信した際に運用ボリューム115に格納されていたデータをディスク装置内のいずれかの記憶領域に保存しておくことが必要だからである。
このように、スナップショット管理テーブル211において仮想ボリューム1のブロックアドレス0番と差分ボリューム116のブロックアドレス0番を対応づけておく。スナップショット管理プログラム124は、仮想ボリューム1の第1行のブロックアドレス0番(すなわち、差分ボリューム116のブロックアドレス0番に)アクセスすることによって、運用ボリューム115のブロックアドレス0番の更新前のデータが得られる。
このように、スナップショット管理プログラム124は、仮想ボリューム1のブロックアドレス0番に対するアクセス要求があった場合には、スナップショット管理テーブル211を参照することによって、差分ボリューム116のブロックアドレス0番をアクセスすることができる。この結果、スナップショット管理プログラム124は、ファイルシステム処理プログラム123に対して、運用ボリューム115のブロックアドレス0番の更新前のデータ(即ちスナップショット生成要求を受信した時点で運用ボリューム115のブロックアドレス0番に格納されていたデータ)が仮想ボリューム1のブロックアドレス0番に書き込まれているのと同様の状態で、仮想ボリューム1に対するアクセス環境を提供することができる。
同様に、列313の第2行に、仮想ボリューム1のブロックアドレスのデータの格納位置として記録されている1番は、差分ボリューム116のブロックアドレス1番に対応している。スナップショット生成要求受信後に運用ボリューム115のブロックアドレス1番のデータが更新されるとき、スナップショット管理プログラム124は、運用ボリューム115のブロックアドレス1番に格納されている更新前のデータを、差分ボリューム116のブロックアドレス1番に書き込み、その後に運用ボリューム115のブロックアドレス1番のデータを更新する。このように、スナップショット管理テーブル211において仮想ボリューム1のブロックアドレス1番と差分ボリューム116のブロックアドレス1番を対応づけておく。スナップショット管理プログラム124は、ファイルシステム処理プログラム123に対して、運用ボリューム115のブロックアドレス1番の更新前のデータが仮想ボリューム1のブロックアドレス1番に仮想的に書き込まれているのと同様の状態で、仮想ボリューム1に対するアクセスを提供することができる。
列313の第3行〜第m行には、仮想ボリューム1のブロックアドレス2番から(m−1)番のデータに対応する格納位置情報として「なし」が記録されている。この「なし」とは運用ボリューム115の対応するブロックアドレスを示している。従って、仮想ボリューム1のブロックアドレス2番〜(m−1)番については、それぞれ運用ボリューム115のブロックアドレス2番〜(m−1)番が対応する。すなわち、「なし」は、最後にスナップショット生成要求を受信した後、運用ボリューム115の当該ブロックは更新(書き替え)がされていないことを示す。
従って、スナップショット管理プログラム124は、仮想ボリューム1のブロックアドレス0番のデータと、仮想ボリューム1のブロックアドレス1番のデータと、運用ボリューム115のブロックアドレス2〜(m−1)番のデータとによって、運用ボリューム115のブロックアドレス0番及び1番のデータが更新される前の時点における運用ボリューム115のスナップショットイメージ(仮想ボリューム1)を提供することが可能になる。
列314には仮想ボリューム2のデータの格納位置が登録される。
スナップショット管理プログラム124は、スナップショット生成要求を受信する毎に、生成要求受信時におけるスナップショットを取得すべく新たな仮想ボリュームをスナップショット管理テーブルに登録する。仮想ボリューム2はスナップショット番号1のスナップショット(仮想ボリューム1に対応)が生成された後に再びスナップショット生成要求を受信した際、スナップショット管理プログラム124によって作成されるスナップショット番号2のスナップショットに対応する仮想ボリュームである。
列314の第1行に仮想ボリューム2のブロックアドレス0番のデータ格納位置として記録されている0番は、差分ボリューム116のブロックアドレス0番に対応している。
2番目のスナップショット生成要求の受信後に運用ボリューム115のブロックアドレス0番のデータが更新されるとき、スナップショット管理プログラム124は、前述したように運用ボリューム115のブロックアドレス0番に格納されている更新前のデータを、差分ボリューム116のブロックアドレス0番に複写し、その後に運用ボリューム115のブロックアドレス0番のデータを更新する。すると、仮想ボリューム1及び仮想ボリューム2のブロックアドレス0番に対応するデータは、差分ボリューム116のブロックアドレス0番に格納されたこととなるから、仮想ボリューム1及び仮想ボリューム2のブロックアドレス0番は共に、差分ボリューム116のブロックアドレス0番と対応付けられるよう、スナップショット管理プログラム124がスナップショット管理テーブルを書き換える。
列314の第2行に仮想ボリューム2のブロックアドレス1番のデータの格納位置として記録されている2番は、差分ボリューム116のブロックアドレス2番に対応している。これは、2番目のスナップショット生成要求受信後、運用ボリューム115のブロックアドレス1番のデータが更新されたことを示している。すなわち、2番目のスナップショット生成要求を受信した後に生じた運用ボリューム115のブロックアドレス1番のデータ更新に際しては、更新前のデータは差分ボリューム116のブロックアドレス2番に複写されている。これは、差分ボリューム116の1番に複写すると、仮想ボリューム1のブロックアドレス1番と対応付けられているデータが変更され、1番目のスナップショットデータが壊れてしまうからである。
列314の第3行から第m行に、仮想ボリューム2のブロックアドレス2番から第(m−1)番のデータの格納位置として「なし」が記録されている。この「なし」は、前述したように、仮想ボリュームの当該ブロックアドレスが、運用ボリューム115の対応するブロックアドレスに対応付けられていることを示す。
仮想ボリュームnについての説明は、上記仮想ボリューム1、2についての説明と同様なので、省略する。
列312は、Cowビットマップであり、そのビット数は仮想ボリュームの数と同じである。図3に示す場合では、仮想ボリュームの数はnであるので、Cowビットマップはnビットを有する。Cowビットマップの第1ビットは仮想ボリューム1に対応し、第2ビットは仮想ボリューム2に対応し、以後同様にして、第nビットは仮想ボリュームnに対応する。仮想ボリュームの第k行のブロックアドレスに更新の登録がある場合(すなわち、差分ボリューム116のブロックアドレスが記録されている場合)には、第k行のCowビットマップ中の、この仮想ボリュームに対応するビットを「0」とする。また、この仮想ボリュームの第k行のブロックアドレスに更新の登録がない場合(すなわち、「なし」が記録されている場合)には、第k行のCowビットマップ中の、この仮想ボリュームに対応するビットを「1」とする。
図3に示すスナップショット管理テーブル211では、各仮想ボリュームの第1行のブロックアドレス0番には「0」が割り当てられているので、第1行のCowビットマップの各ビットは全て「0」になる。また、各仮想ボリュームの第m行のブロックアドレス(m−1)番には「なし」が割り当てられているので、第m行のCowビットマップの各ビットは全て1になる。
なお、図3に示すスナップショット管理テーブル211では、運用ボリューム115のサイズをmブロック、スナップショットの最大数をnとしている。例えば、ブロックサイズを512バイト、運用ボリューム115のサイズを128ギガバイト、スナップショットの最大数を64とすると、m=250000000、n=64となる。なお、ブロックサイズや運用ボリューム115のサイズ、スナップショットの最大数は、本発明の効果に影響しないため、任意に設定してよい。
図3に示すスナップショット管理テーブル211では、第1行(301)は、311列が運用ボリューム115のブロックアドレス0番を示す。312列がCoWビットマップが00…0であることを示す。313列、314列、・・・315列の「0」が、スナップショット1、2、・・・n番に対応する仮想ボリューム1、2、・・・nのブロックアドレス0番の内容(すなわち、各仮想ボリュームに対応するスナップショットの生成要求発行時に、運用ボリューム115のブロックアドレス0番に格納されていたデータ)が、差分ボリューム116のブロックアドレス0番に格納されていることを示す。
第2行(302)は、311列が運用ボリューム115のブロックアドレス1番を示す。312列がCoWビットマップが00…1であることを示す。313列の「1」が、スナップショット1番に対応する仮想ボリューム1のブロックアドレス1番の内容が差分ボリューム116のブロックアドレス1番に格納されていることを示す。314列の「2」が、スナップショット2番に対応する仮想ボリューム2のブロックアドレス1番の内容が差分ボリューム116のブロックアドレス2番に格納されていることを示す。315列の「なし」が、スナップショットn番に対応する仮想ボリュームnのブロックアドレス1番の内容が運用ボリューム115のブロックアドレス1番に格納されていることを示す。
仮想ボリュームnのブロックアドレス1番に「なし」が割り当てられていることは、仮想ボリュームnのブロックアドレス1番の内容が、運用ボリューム115のブロックアドレス1番に格納されいること、及び、仮想ボリュームnに対応するn番目のスナップショットの生成要求を受信した後、運用ボリューム115のブロックアドレス1番のデータが更新されていないことを示している。
第3行(303)は、311列が運用ボリューム115のブロックアドレス2番を示す。312列がCoWビットマップが11…1であることを示す。313列、314列、・・・315列が、スナップショット1、2、・・・n番に対応する仮想ボリューム1、2、・・・nのブロックアドレス2番の内容が、運用ボリューム115のブロックアドレス2番に格納されていること(すなわち、運用ボリューム115の更新されていないこと)を示す。
第m行(304)は、311列が運用ボリューム115のブロックアドレス(m−1)番を示す。312列がCoWビットマップが11…1であることを示す。313列、314列、・・・315列が、スナップショット1、2、・・・n番に対応する仮想ボリューム1、2、nのブロックアドレス(m−1)番の内容が、運用ボリューム115のブロックアドレス(m−1)番に格納されていること(すなわち、運用ボリューム115の更新(書き替え)が行われていないこと)を示す。
換言すると、312列の各エントリに示されているCoWビットマップは、少なくともスナップショットの最大数を示すnビットを備える記憶領域であり、各ビットがスナップショットの番号と対応し、スナップショットを維持し始めてからの更新の有無を示す。図3に示す場合、「0」は更新あり、「1」は更新なしを示す。
このCoWビットマップは、書き込み処理サブプログラム201が運用ボリューム115にブロックデータを書き込む際に参照され、データを書き込むアドレスの更新前のデータを差分ボリューム116に複写するか否かを決定するために利用される。このCoWビットマップによって、データ書き込み毎に、どのスナップショットの仮想ボリュームのブロックアドレスを書き換えるかを知るために、スナップショット管理テーブルをたどる必要がなくなり、データの書き込み速度を向上させることができる。
図4は、第1の実施の形態の差分ブロック管理テーブル212の詳細を示す説明図である。
差分ブロック管理テーブル212は、差分ボリューム116のブロックの使用状況を管理するため、差分ボリューム116に設けられたブロック各々に対して、ブロックアドレス411と所有ビットマップ412及び先行コピー領域アドレス413との対応を示す。
所有ビットマップ412列の各エントリに示されている所有ビットマップは、少なくともスナップショットの最大数を示すnビットを備える記憶領域であり、各ビットがスナップショットの番号と対応している。各ビットは、対応するスナップショットデータにアクセスするための仮想ボリュームを構成するブロックとして、対応する差分ボリューム116上のブロックが参照されるか否か(「1」は参照あり、「0」は参照なし)を示す。
書き込み処理サブプログラム201が、運用ボリューム115への書き込みに伴い、差分ボリューム116に運用ボリューム115のブロックデータを複写する際に、そのブロックを参照するスナップショット番号に対応する所有ビットマップ内のビットを1に更新する。また、差分ボリューム116から空きブロックを得る際には、所有ビットマップの全てのビットが0のブロックを選択する。
また、スナップショット削除サブプログラム204がスナップショットを削除する際、削除されるスナップショットに対応する仮想ボリュームを構成している全てのブロックについて、削除されるスナップショットに対応する所有ビットマップ内のビットを「0」に更新する。
先行コピー領域アドレス413列には、当該差分ボリューム116のブロックが先行コピー領域として使用されているか否かを示している。
より具体的に図4に示す差分ブロック管理テーブル212の内容を説明すると、第1行(401)には、差分ボリューム116のブロックアドレス0番の所有ビットマップとして「11…1」が登録されており、これは、差分ボリューム116のブロックアドレス0番のブロックが、全てのスナップショットにおいて使用されていることを示している。これは、スナップショット管理テーブル211(図3)の第1行(301)に規定されるように、スナップショット1、2、・・・n番に対応する仮想ボリューム1、2、・・・nのブロックアドレス0番の内容が、差分ボリューム116のブロックアドレス0番に格納されていることに対応している。
また、第1行(401)の先行コピー領域アドレス413が「なし」であることは、差分ボリューム116のブロックアドレス0番のブロックが、先行コピー領域として使用されていないことを示している。
第2行(402)には、差分ボリューム116のブロックアドレス1番の所有ビットマップとして「10…0」が登録されており、これは、差分ボリューム116のブロックアドレス1番のブロックが、所有ビットマップの第1ビットに対応するスナップショット1番において使用されている(すなわち、仮想ボリューム1を構成している)が、他のスナップショットにおいては使用されていないことを示している。これは、スナップショット管理テーブル211(図3)の第2行(302)に規定されるように、スナップショット1番に対応する仮想ボリューム1のブロックアドレス1番の内容が、差分ボリューム116のブロックアドレス1番に格納されていることに対応している。また、先行コピー領域アドレス413が「なし」であることは、差分ボリューム116のブロックアドレス1番のブロックが、先行コピー領域として使用されていないことを示している。
第3行(403)には、差分ボリューム116のブロックアドレス2番の所有ビットマップとして「01…0」が登録されている。これは、差分ボリューム116のブロックアドレス2番のブロックが、所有ビットマップの第2ビットに対応するスナップショット2番において使用されている(すなわち、仮想ボリューム2を構成している)ことを示している。これは、スナップショット管理テーブル211(図3)の第2行(302)に規定されるように、スナップショット2番に対応する仮想ボリューム2のブロックアドレス1番の内容が、差分ボリューム116のブロックアドレス2番に格納されていることに対応している。また、先行コピー領域アドレス413が「なし」であることから、差分ボリューム116のブロックアドレス2番のブロックが、先行コピー領域として使用されていないことを示している。
第4行(404)には、差分ボリューム116のブロックアドレス3番の所有ビットマップとして「00…0」が登録されている。これは、差分ボリューム116のブロックアドレス3番のブロックのいずれのスナップショットからも参照されず、使用されていないことを示している。また、先行コピー領域アドレス413が「2」であることから、差分ボリューム116のアドレス3番ブロックは、運用ボリューム115のブロックアドレス2の先行コピー領域として使用されていることを示している。
以後、第(p−1)行(406)まで同様に設定される。
すなわち、所有ビットマップ412の少なくとも一つのビットが「1」であれば、差分ボリューム116の当該ブロックはスナップショットに利用されている。また、所有ビットマップ412の全てのビットが「0」で、かつ先行コピー領域アドレス413が登録されていれば、差分ボリューム116のそのブロックは先行コピー領域として利用されている先行コピーデータ格納ブロックである。さらに、所有ビットマップ412の全てのビットが「0」で、かつ先行コピー領域アドレス413が登録されていなければ、差分ボリューム116のそのブロックはスナップショット、先行コピー領域のいずれにも利用されていない空きブロックである。
以下、スナップショット管理プログラム124の各サブプログラムの処理フローに関して説明する。
図5は、第1の実施の形態のスナップショット管理プログラム124の書き込み処理サブプログラム201による処理を示すフローチャートである。
書き込み処理では、まず、スナップショット管理テーブル211を参照して、書き込み処理の対象となっているブロックアドレス311列に対応するCoWビットマップ列312の全てのビットが「0」であるか否かを判定する(501)。
全ビットが「0」であれば、該ブロックのデータは、最後のスナップショット生成要求が発行された後、更新が行われており、既にこのブロックについては全ての仮想ボリュームが差分ボリューム116と対応づけられていることとなる。従って、CoWビットマップの全てのビットが「0」であれば、更新前のデータを差分ボリューム116に複写する必要はないので、ステップ507に進み、ファイルシステム処理プログラム123から指定された運用ボリューム(主ボリューム)115のブロックにデータを書き込む。
一方、少なくとも一つのビットが「1」であれば、書き込み処理によって更新されてしまう運用ボリューム115上のデータを参照しているスナップショット(仮想ボリューム)が存在するので、CoWを実行するためにステップ502に進む。
ステップ502では、差分ブロック管理テーブル212(図4)の先行コピー領域アドレス欄413を参照して、運用ボリューム115の書き込み処理の対象となっているブロックのブロックアドレスが、差分ブロック管理テーブル212の先行コピー領域アドレス欄413に登録されているか否かを判定する。これによって、運用ボリューム115の書き込み対象ブロックのデータが既に差分ボリューム116に先行コピー済みか否かを判定する(502)。
差分ブロック管理テーブル212に、書き込み対象のブロックのブロックアドレスが登録されていれば、書き込み対象ブロックに格納されているデータは既に差分ボリューム116に記憶されている。従って、書き込み対象ブロックに格納されている更新前のデータを差分ボリューム116に複写する必要はなく、当該データが格納されている(先行コピーされている)差分ボリューム116内のブロックと、仮想ボリュームとを対応付けるだけでよい。このために、書き込み処理サブプログラム201は、まず、差分ブロック管理テーブル212を参照して、書き込み対象ブロックのブロックアドレスと対応付けて登録されている差分ボリューム116のブロックアドレス411取得して、メモリ114に一時的に書き込む(511)。このアドレスは、後述するステップ505において、仮想ボリューム内の書き込み対象ブロックに対応するアドレスとして利用される。
その後、ステップ504に進む。この処理によって、既に差分ボリューム116に先行コピーされていたデータを仮想ボリュームのデータ、すなわちスナップショットデータとして利用することができる。
一方、書き込み対象ブロックのブロックアドレスが差分ブロック管理テーブル212の先行コピー領域アドレス欄に登録されていなければ、差分ブロック管理テーブル212(図4)を参照して、差分ボリューム116に空きブロックがあるか否かを判定する(503a)。その結果、差分ボリューム116に空きブロックがなければ、差分ボリューム116のブロックから先行コピーデータ格納ブロック(所有ビットマップ412の全てのビットが「0」で、かつ、先行コピー領域アドレス413が登録されているブロック)を探し、差分ブロック管理テーブル212内の当該先行コピー領域(先行コピーデータ格納ブロック)のアドレス413(図4)の記憶内容を破棄して(先行コピー領域アドレスを「なし」に変更して)、差分ボリューム116のうち先行コピー領域として使用されている先行コピー領域ブロックを空きブロックに変更して(503b)、ステップ503cに進む。一方、差分ボリューム116に空きブロックがあれば、ステップ503bの処理をすることなく、ステップ503cに進む。
次に、書き込みを行う運用ボリューム115のブロックに格納されている更新前のデータを差分ボリューム116の空きブロックに複写する(503c)。この503a〜503cの処理によって、差分ボリューム116に空きブロックを確保し、運用ボリューム115に格納されている更新前のデータを当該空きブロックに複写する(差分ボリューム116に空きがなかった場合,先行コピー領域として使用されている領域にデータを複写してスナップショット領域とする)。
そして、ステップ503cにてデータの複写先となった差分ボリューム116内のブロックのアドレスに対応する差分ブロック管理テーブル212の所有ビットマップ412列に、ステップ501にて参照したCoWビットマップの値を格納する。また、この差分ボリューム116内のブロックのアドレスに対応する先行コピー領域アドレス413を「なし」に設定する(504)。
そして、スナップショット管理テーブル211に登録されている仮想ボリュームのうち、ステップ502において参照したCoWビットマップ中の「1」の値を有するビットに対応する仮想ボリュームを特定する。そして特定された仮想ボリューム内の書き込み対象ブロックに対応するブロックが、ステップ503においてデータの複写先となった差分ボリューム116と対応するように、スナップショット管理テーブル211を更新する(505)。すなわち、スナップショット管理テーブル211内の特定された仮想ボリュームに対応する列の、書き込み対象ブロックアドレスに対応する行に、ステップ503においてデータの複写先となった差分ボリューム116のブロックのアドレスを登録する。また、ステップ511において取得した先行コピー領域のアドレスをスナップショットの差分データのアドレスとして登録する。
次に、ステップ501において参照したCoWビットマップの全ビットの値を「0」に更新する(506)。
すなわち、ステップS506までの処理によって、差分ボリューム116内の空き領域をスナップショットデータとしたり、差分ボリューム116内の先行コピー領域をスナップショットデータとする。
その後、指定されたブロックアドレスが示す運用ボリューム115のブロックに、指定されたデータを書き込む(507)。
そして、ステップ502の処理と同様に、差分ブロック管理テーブル212(図4)の先行コピー領域アドレス欄413を参照して、データを書き込んだブロックが先行コピー済みのブロックであるか否かを判定する(509)。
当該ブロックの先行コピーデータが差分ボリューム116内に存在すれば、ステップ507で運用ボリューム115に書き込んだものと同じデータを、当該のブロックの先行コピー領域として利用されている差分ボリューム116のブロックに書き込み(512)、書き込み処理サブプログラム201を終了する(510)。この処理によって、先行コピー領域の内容を最新に保つことができる。
一方、当該ブロックの先行コピーデータが差分ボリューム116内に存在しなければ、ステップ512の処理を行うことなく、書き込み処理サブプログラム201による処理を終了する(510)。
図6は、第1の実施の形態のスナップショット管理プログラム124の読み出し処理サブプログラム202による処理を示すフローチャートである。
読み出し処理では、まず、ファイルシステム処理プログラム123から指定された読み出し対象のボリュームが、運用ボリューム115であるか、仮想ボリュームであるかによって、スナップショットからの読み出しであるか否かを判定する(601)。
その結果、ファイルシステム処理プログラム123から受信した読み出し要求が運用ボリューム115に対するものであれば、スナップショットに対する読み出し要求ではないと判定し、運用ボリューム115の、ファイルシステム処理プログラム123によって指定されたブロックアドレスからデータを読み出す(603)。
一方、ファイルシステム処理プログラム123から受信した読み出し要求が仮想ボリュームに対するものであれば、スナップショットに対する読み出し要求であると判定して、ステップ602に進む。そして、さらに、スナップショット管理テーブル211(図3)を用いて、読み出し対象の仮想ボリュームの、ファイルシステム処理プログラム123によって指定されたブロックアドレスに対応する値を参照し、その値が「なし」であるか否かを判定する(602)。
その結果、当該仮想ボリュームのブロックアドレスに対応する値が「なし」であれば、読み出し対象のスナップショットに対応する仮想ボリュームの、読み出し対象のブロックのデータは、差分ボリューム116には記憶されていないので、運用ボリューム115の指定されたブロックアドレスからデータを読み出す(603)。
一方、ステップ602で参照したブロックアドレスの値が「なし」でなければ、読み出し対象の仮想ボリュームのブロックアドレスは、差分ボリューム116内のブロックアドレスと対応付けられている。すなわち、読み出し対象の仮想ボリュームのブロックアドレスのデータは、差分ボリューム116に記憶されている。そこで、ステップ602にて参照した差分ボリューム116のブロックアドレスからデータを読み出す(611)。
その後、読み出したブロックデータをファイルシステム処理プログラム123に返送して、読み出し処理サブプログラム202による処理を終了する(604)。
図7は、スナップショット管理プログラム124のスナップショット生成サブプログラム203による処理を示すフローチャートである。
第1の実施の形態のスナップショット管理プログラム124のスナップショット生成サブプログラム203では、データ保護プログラムからスナップショットの生成要求を受信すると、スナップショット管理テーブル211(図3)に新たに仮想ボリュームを登録する。そして、スナップショット管理テーブル211に記録されている全てのCoWビットマップ312の、新たに生成されるスナップショットに対応して新たに登録された仮想ボリュームに対応するビットを「1」に設定し、新たに生成されるスナップショットに対応する仮想ボリュームのブロックアドレスを全て「なし」に設定する(701)。
その後、スナップショット生成の対象として指定された運用ボリューム115の領域から読み出したデータを差分ボリューム116に書き込んで、指定された領域に記憶されたデータを運用ボリューム115から差分ボリューム116に複写する。そして、差分ブロック管理テーブル212(図4)の先行コピー領域として使用されることになったブロックのブロックアドレス欄に先行コピー領域アドレスを書き込む(702)。
その後、スナップショット生成サブプログラム203による処理を終了する(703)。
なお、前述したステップ701では、スナップショット管理テーブル211に登録されている全てのCoWビットマップ312の、新たに作成された仮想ボリュームに対応するビットの値を「1」と設定している。しかし、運用ボリューム115上に未使用ブロックが存在する場合、この未使用ブロックに対応する仮想ボリューム内のブロックも未使用ブロックとなる。このとき、新たに作成された仮想ボリューム内に存在する未使用ブロックには、CoWビットマップの未使用ブロック以外のブロックにのみ、新たに作成された仮想ボリュームに対応するビットを「1」と設定するように構成してもよい。ここで、未使用ブロックとは、データ(ファイルやディレクトリ等)の格納のために割り当てられていないブロックで、今後ファイルやディレクトリを新規作成したり、サイズを拡張したりする際に、データを格納するために用意しているブロックである。
未使用ブロックに対する書込み要求が発行され、未使用ブロックに格納されているデータが更新されても、ファイルシステムのスナップショットは未使用ブロックのデータを参照することがないため、当該データの更新はファイルシステムのスナップショットには影響を与えない。従って、スナップショット生成後に未使用部分が更新された場合、スナップショット生成の際に未使用ブロックに対するCoWビットが「0」になっていると差分ボリューム116に更新前のデータが複写されず、未使用ブロック内のデータ更新がスナップショットに反映され、スナップショット生成時と内容が変化してしまう。しかし、当該スナップショットを用いたファイルシステムでは、ファイルシステム内のファイルやディレクトリの内容には影響がない。従って、スナップショットを生成する際、未使用ブロックに対するCoWビットを「0」にしておけば、差分の発生量を削減することが可能となる。
図8は、第1の実施の形態のスナップショット管理プログラム124のスナップショット削除サブプログラム204による処理を示すフローチャートである。
データ保護プログラム122からスナップショットの削除要求を受信すると、スナップショット管理テーブル211(図3)に記憶されている全てのCoWビットマップ312について、削除要求で指定される削除対象のスナップショット(仮想ボリューム)に対応するビットを「0」に更新する(801)。
さらに、スナップショット管理テーブル211の、削除対象のスナップショットに対応する仮想ボリュームのブロックと対応付けられている差分ボリューム116上のブロック(例えば、削除対象のスナップショットに対応する仮想ボリュームが、仮想ボリューム2であれば、314列に登録されているブロックアドレスが示すブロック)について、差分ブロック管理テーブル212の所有ビットマップ412内の削除対象のスナップショットに対応する仮想ボリュームに対するビットを「0」に更新する(802)。
その後、削除対象スナップショットに対応する仮想ボリュームの登録をスナップショット管理テーブルから削除して、スナップショット削除サブプログラム204による処理を終了する(803)。
以上説明したように、本発明の第1の実施の形態では、運用ボリューム115のデータを予め差分ボリューム116に先行コピーデータとして格納し、差分ボリューム116の当該ブロックを先行コピー領域とし、当該データが書き込まれた時点でその先行コピーデータを複写済データとして利用するので、CoWが生じる頻度を低減することができ、ディスク装置に対するアクセス性能を向上させることができる。
また、第1の実施の形態のスナップショット生成処理(図7)によると、スナップショット生成の際に運用ボリューム115の指定された領域から読み出したデータを、差分ボリューム116の空き領域に格納し、その先行コピー領域のアドレスを記録するので、当該領域に対するアクセスに先行して先行コピーデータを作成することによって、CoWが生じる頻度を低減することができ、ディスク装置に対するアクセス性能を向上させることができる。
すなわち、従来技術のスナップショットでは、運用ボリューム115に書き込む際に、(1)管理テーブルの情報を読み出し、(2)運用ボリューム115上の旧データを読み出し、(3)差分ボリューム上の旧データを書き込み、(4)管理テーブルの情報を更新し、(5)運用ボリューム115上に正規の書き込み実行するという処理を逐次実行しなければならない。このため、コピー・オン・ライトの対象となっている領域に書き込みを行うと、その処理は、読み出し処理と、書き込み処理とがそれぞれ2回必要となる。
また、スナップショット取得時点で、その後更新される可能性が高い領域を差分ボリューム上に複写し、コピー・オン・ライト済とすることによって、コピー・オン・ライトの対象となる領域を減少させることができ、前述した2回ずつの読み出し処理、書き込み処理が必要となる領域を低減し、オーバヘッド発生を低減している。しかし、複写したデータの分、差分ボリューム116の容量を消費する。また、結果的に更新がされなかったブロックの複写は無駄になる。
本発明は、コピー・オン・ライト・スナップショットにおいて用いられる差分ボリューム116に格納された先行コピーデータのうち利用されていない領域に、スナップショットの差分データを格納するので、差分ボリューム116の容量を有効に利用することができ、結果的に更新がされなかったブロックへの複写の利用機会を高めることができる。
次に、本発明の第1の実施の形態の変形例について説明する。
図9は、第1の実施の形態の変形例としてのスナップショット生成サブプログラム203aによるスナップショット生成処理を示すフローチャートである。
図9に示すスナップショット生成処理203aでは、前述したスナップショット生成処理(図10)と、スナップショット生成時に運用ボリューム115から読み出されてキャッシュメモリに記憶されているデータを差分ボリューム116に書き込んで先行コピーデータとして利用する点で異なる。
このスナップショット生成サブプログラム203aでは、データ保護プログラムからスナップショットの生成要求を受信すると、スナップショット管理テーブル211(図3)に新たに仮想ボリュームを登録する。そして、スナップショット管理テーブル211に記録されている全てのCoWビットマップ312の、新たに生成されるスナップショットに対応して新たに登録された仮想ボリュームに対応するビットを「1」に設定し、新たに生成されるスナップショットに対応する仮想ボリュームのブロックアドレスを全て「なし」に設定する(701)。
その後、メモリ114に設けられたキャッシュメモリに記憶されている運用ボリューム115のキャッシュデータを差分ボリューム116の空き領域に書き込む。そして、差分ブロック管理テーブル212(図4)の先行コピー領域として使用されることになったブロックのブロックアドレス欄に先行コピー領域アドレスを書き込む(1201)。
その後、スナップショット生成サブプログラム203bによる処理を終了する(702)。
このように、第3の実施の形態のスナップショット生成サブプログラム203b(図9)によると、スナップショット生成の際に指定された運用ボリューム115から読み出したデータや、運用ボリューム115に書き込んだデータは、ホスト101のメモリ114に設けられたキャッシュメモリ(後述する第二の実施の形態では、ストレージ装置のメモリ914に設けられたキャッシュメモリ)に、キャッシュデータとして記憶されている。よって、このキャッシュメモリに記憶されたデータを、差分ボリューム116の空き領域に格納し、その先行コピー領域アドレスを記録するので、差分ボリューム116に先行コピーデータとして記憶するデータをディスク装置から再度読み出す必要がなくなる。また、キャッシュメモリに記憶されているデータは頻繁にアクセスがされるデータであることが多いことから、先行コピーを行う領域を予め設定することなく、適切に選択することができる。
図10は、第1の実施の形態のさらなる変形例としてのスナップショット生成サブプログラム203bによるスナップショット生成処理を示すフローチャートである。
図10に示すスナップショット生成処理203bでは、前述したスナップショット生成処理203(図7)と、スナップショット生成時に先行コピーをしない点で異なる。
このスナップショット生成サブプログラム203bでは、データ保護プログラムからスナップショットの生成要求を受信すると、スナップショット管理テーブル211(図3)に新たに仮想ボリュームを登録する。そして、スナップショット管理テーブル211に記録されている全てのCoWビットマップ312の、新たに生成されるスナップショットに対応して新たに登録された仮想ボリュームに対応するビットを「1」に設定し、新たに生成されるスナップショットに対応する仮想ボリュームのブロックアドレスを全て「なし」に設定する(701)。
その後、スナップショット生成サブプログラム203bによる処理を終了する(703)。
このスナップショット生成サブプログラム203bは、スナップショット生成時に先行コピーデータを作成しないものであるが、後述する読み出し処理サブプログラム202a(図11)、書き込み処理サブプログラム201a、201b(図12、図13)と共に用いられ、これらの読み出し処理サブプログラム202a又は書き込み処理サブプログラム201a、201bによって先行コピー領域にデータが記憶される。
図11は、第1の実施の形態の変形例としての読み出し処理サブプログラム202aによる処理を示すフローチャートである。
図11に示す読み出し処理202aでは、前述した第1の実施の形態の読み出し処理(図6)と、運用ボリューム115から読み出したデータを差分ボリューム116の空きブロックに書き込んで先行コピーをする点で異なる。
この読み出し処理202aでは、まず、ファイルシステム処理プログラム123から指定された読み出し対象のボリュームが、運用ボリューム115であるか、仮想ボリュームであるかによって、スナップショットからの読み出しであるか否かを判定する(601)。
その結果、ファイルシステム処理プログラム123から受信した読み出し要求が運用ボリューム115に対するものであれば、スナップショットに対する読み出し要求ではないと判定し、運用ボリューム115の、ファイルシステム処理プログラム123によって指定されたブロックアドレスからデータを読み出す(603)。
一方、ファイルシステム処理プログラム123から受信した読み出し要求が仮想ボリュームに対するものであれば、スナップショットに対する読み出し要求であると判定して、ステップ602に進む。そして、さらに、スナップショット管理テーブル211(図3)を用いて、読み出し対象の仮想ボリュームの、ファイルシステム処理プログラム123によって指定されたブロックアドレスに対応する値を参照し、その値が「なし」であるか否かを判定する(602)。
その結果、当該仮想ボリュームのブロックアドレスに対応する値が「なし」であれば、読み出し対象のスナップショットに対応する仮想ボリュームの、読み出し対象のブロックのデータは、差分ボリューム116には記憶されていないので、運用ボリューム115の指定されたブロックアドレスからデータを読み出す(603)。
一方、ステップ602で参照したブロックアドレスの値が「なし」でなければ、読み出し対象の仮想ボリュームのブロックアドレスは、差分ボリューム116内のブロックアドレスと対応付けられている。すなわち、読み出し対象の仮想ボリュームのブロックアドレスのデータは、差分ボリューム116に記憶されている。そこで、ステップ602にて参照した差分ボリューム116のブロックアドレスからデータを読み出す(611)。
その後、差分ブロック管理テーブル212(図4)を参照して、スナップショット及び先行コピー領域のいずれにも利用されていない差分ボリューム116の空きブロックがあるか否かを判定する(1001)。その結果、差分ボリューム116に空きブロックがあれば、運用ボリューム115の指定されたブロックアドレスからデータを当該空きブロックに書き込む。そして、新たに先行コピー領域として使用されることになったブロックの先行コピー領域アドレス欄(図4の413)に先行コピー領域のアドレスを書き込む(1002)。このステップ1001〜1002の処理によって、運用ボリューム115から読み出されるデータが先行コピーされていなければ、先行コピーデータとして記憶することができる。
そして、読み出したブロックデータをクライアント131、132に返送して、読み出し処理サブプログラム202aによる処理を終了する(604)。
このように、図11に示す読み出し処理によると、運用ボリューム115から読み出したデータを差分ボリューム116の空き領域に格納し、その空き領域のアドレスを先行コピー領域アドレスとして記録する。すなわち、運用ボリューム115のコピー・オン・ライト対象の領域はデータ参照後書き込む可能性があることから、このデータを先行コピーしておくことによって、CoWが生じる頻度を低減することができ、ディスク装置に対するアクセス性能を向上させることができる。
図12は、第1実施の形態の変形例としての書き込み処理サブプログラム201aによる処理を示すフローチャートである。
図12に示す書き込み処理201aでは、前述した第1の実施の形態の書き込み処理(図5)と、運用ボリューム115に書き込むデータを空きブロックに書き込んで先行コピーする点で異なる。
書き込み処理サブプログラム201aでは、前述した第1の実施の形態と同様に、ステップ501〜506及び511のコピー・オン・ライト時の処理、並びに、ステップ507、509、512のコピー・オン・ライトが行われない場合の処理が実行される。なお、前述した第1の実施の形態の書き込み処理(図5)と同じ処理には同じ符号を付し、その詳細な説明は省略する。
図12に示す書き込み処理では、前述した第1の実施の形態と同様に、ステップ501にて、書き込み処理の対象となっているブロックアドレス311列に対応するCoWビットマップ列312の全てのビットが「0」であるか否かを判定し、全ビットが「0」であれば、最後のスナップショット生成要求が発行された後、データが更新されており、更新前のデータを差分ボリューム116に複写する必要がないので、ステップ507に進む。
ステップ507では、指定されたブロックアドレスが示す運用ボリューム115のブロックに、指定されたデータを書き込む。
その後、ステップ502の処理と同様に、差分ブロック管理テーブル212(図4)の先行コピー領域アドレス欄413を参照して、データを書き込んだブロックが先行コピー済みのブロックであるか否かを判定する(509)。
当該ブロックの先行コピーデータが差分ボリューム116内に存在すれば、ステップ507で運用ボリューム115に書き込んだものと同じデータを、当該のブロックの先行コピーデータが格納されている差分ボリューム116のブロックに書き込み(512)、書き込み処理サブプログラム201を終了する(510)。
一方、当該のブロックの先行コピーデータが差分ボリューム116内に存在しなければ、差分ブロック管理テーブル212(図4)を参照して、スナップショット及び先行コピー領域のいずれにも利用されていない差分ボリューム116の空きブロックがあるか否かを判定する(1301)。その結果、差分ボリューム116に空きブロックがあれば、指定されたブロックアドレスが示す運用ボリューム115のブロックに書き込まれるデータを、当該空きブロックに書き込む。そして、新たに先行コピー領域として使用されることになったブロックの先行コピー領域アドレス欄(図4の413)に先行コピー領域アドレスを書き込む(1302)。
その後、書き込み処理サブプログラム201aによる処理を終了する(510)。
このように、書き込み処理201aによると、運用ボリューム115のコピー・オン・ライト済(コピー・オン・ライトの対象外)の領域に書き込まれるデータを、前記差分ボリューム116の空き領域に格納し、その先行コピー領域アドレスを記録するので、ディスク装置に対する局所的な書き込みが多い場合であっても、次に取得されるスナップショットにおいてCoWが生じる頻度を低減することができ、ディスク装置に対するアクセス性能を向上させることができる。また、運用ボリューム115からデータを読み出すことなく先行コピーを行うことができるので、先行コピーを高速に行うことができる。
図13は、第1の実施の形態の変形例としての書き込み処理サブプログラム201bによる処理を示すフローチャートである。
図13に示す書き込み処理201bでは、前述した第1の実施の形態の書き込み処理(図5)と、運用ボリューム115のコピー・オン・ライト処理を実行する領域と隣接する領域から読み出されたデータを空きブロックに書き込んで先行コピーする点で異なる。具体的には、第1の実施の形態の書き込み処理(図5)のステップ503cに代わり、隣接ブロックも複写する処理が行われる(1401)。
ステップ1401では、次に、指定されたブロックアドレスが示す運用ボリューム115のブロックから読み出したデータを差分ボリューム116の空きブロックに書き込む。そして、運用ボリューム115の指定されたブロックアドレスに隣接するブロックからもデータを読み出して、該読み出したデータを差分ボリューム116の空きブロックに書き込む。そして、運用ボリューム115の指定されたブロックアドレスに隣接するブロックから読み出したデータを差分ボリューム116の空きブロックに書き込む。そして、新たに先行コピー領域として使用されることになったブロックの先行コピー領域アドレス欄(図4の413)に先行コピー領域アドレスを書き込む。
その後、第1の実施の形態の書き込み処理(図5)と同様にステップ504以後の処理が行われる。
このように、書き込み処理201bによると、運用ボリューム115のコピー・オン・ライト処理を実行する領域に隣接する領域から読み出されたデータを、差分ボリューム116の空き領域に格納し、その先行コピー領域アドレスを記録する。すなわち、運用ボリューム115からデータを読み出したブロックに隣接するブロックからはデータが読み出される可能性が高いので、当該隣接ブロックからデータを読み出して先行コピーしておくことによって、CoWが生じる頻度を低減することができ、ディスク装置に対するアクセス性能を向上させることができる。
なお、図11〜図13に示す処理のいずれによっても、差分ボリューム116が先行コピー領域として使用され、先行コピーデータが記憶されるので、図11〜図13に示す処理の一つ又は任意の組み合わせによって、差分ボリューム116が先行コピー領域として使用され、先行コピーデータが記憶される。
次に、本発明の第2の実施の形態について説明する。第2の実施の形態は図14に示すハードウェアを備える他、第2の実施の形態で行われる処理は前述した第1の実施の形態と同じである。第2の実施の形態において、前述した第1の実施の形態と同じ機能をする構成には同じ符号を付し、その詳細な説明は省略する。
図14に、本発明の第2の実施の形態のストレージシステムの構成を示すブロック図である。
第2の実施の形態のストレージシステムは、複数のクライアントが接続されたサーバ装置101a、101bと、サーバ装置が必要とするデータを記憶するストレージ装置901と、ストレージ装置901に記憶されているデータの複製を記憶する装置バックアップ装置117とが、FCスイッチ等で構成されるSAN(Storage Area Network)931によって接続されて構成される。
サーバ装置101aは、ネットワークインターフェース112を介して接続されたクライアント131、132に対してファイル共有サービスを提供する。
サーバ装置101aは、一つ以上のCPU111、一つ以上のネットワークインターフェース112、一つ以上のFC(Fibre Channel)インターフェース921、及びメモリ114を備える。なお、サーバ装置101bはバックアップ用に設けられたもので、サーバ装置101aと同様の構成を有するので、その詳細な説明は省略する。
FCインターフェース921は、SAN(Storage Area Network)931に対してファイバチャネル(Fibre Channel)プロトコルによる信号(コマンド、データ)を送受信し、ストレージ装置901に対する操作を可能にする。
メモリ114には、ファイルサーバプログラム121、データ保護プログラム122及びファイルシステム処理プログラム123が記憶されており、CPU111がこれらのプログラムを呼び出して実行することによって、各種の処理が行われる。
ストレージ装置901は、一つ以上のCPU911、一つ以上のFCインターフェース912、一つ以上のディスクアレイコントローラ913、メモリ914、及び一つ以上のディスク装置915を備える。
ディスクアレイコントローラ913は、ディスク装置915との間で所定のインターフェース(例えば、SCSI)に基づく信号(コマンド、データ)を送受信する。
ディスク装置915には、複数の論理的なディスク装置から構成される論理ユニット916、917、918が設けられている。
メモリ914には、スナップショット管理プログラム124が記憶されており、CPU911がこれらのプログラムを呼び出して実行することによって、各種の処理が行われる。
スナップショット管理プログラム924は、例えば、論理ユニット916に運用ボリュームを、論理ユニット917に差分ボリュームを割り当てることにより、第1の実施の形態と同様に、スナップショットを利用する仮想ボリュームを提供することができる。この仮想ボリュームを仮想的な論理ユニットとして利用可能にすることで、SAN931上の各装置がスナップショットを利用することが可能になる。また、スナップショット管理プログラム924をストレージ装置901に備えるので、ストレージ装置内でスナップショットを実現することができる。その他、スナップショット管理プログラム924は、前述したスナップショット管理プログラム124と同様の機能を提供する。
なお、サーバ装置101aが、この仮想的な論理ユニットを利用することで、本発明の第1の実施の形態と同様に、データ保護プログラム122を実行することができる。
さらに、サーバ装置101bもSAN931を経由して、ストレージ装置901が提供する仮想的な論理ユニットを利用することができる。これによって、バックアップ用のサーバ装置101bは、ストレージ装置901が提供する仮想的な論理ユニットの内容、即ちスナップショットイメージをSAN931に接続したバックアップ装置117aに保存することができる。