(57)【要約】【解決課題】スナップショットを、バックアップ手段として長期にわたって運用しても、差分ボリュームにおける更新前データの保持量が増大しないようにするストレージ装置、及びそのスナップショット制御方法を提供する。【解決手段】本発明は、更新前データを利用したスナップショットを、更新後データを利用するスナップショットに置き換えることによって、その分、差分ボリュームの更新前データを格納している領域を空き領域として解放し、それにより差分ボリュームに更新前データが累積するのを避けようとするものである。【選択図】図１
2013011919.tif 000002
【特許請求の範囲】
【請求項１】
ユーザ計算機にデータストレージサービスを適用するストレージ装置であって、
前記ユーザ計算機から継続的にアクセスされる運用ボリュームを設定し、さらに、当該運用ボリュームに対して、第１のスナップショットと第２のスナップショットとを設定するコントローラを備え、
前記コントローラは、
前記第１のスナップショットを、前記運用ボリュームと、当該運用ボリュームの更新前データを差分データとして格納する第１の差分ボリュームと、に基づいて生成し、
前記第２のスナップショットを、前記運用ボリュームの基準時のデータイメージと、前記運用ボリュームに対する更新データを差分データとして格納する第２の差分ボリュームと、に基づいて生成する、ストレージ装置。
【請求項２】
前記コントローラは、
前記ユーザ計算機から前記運用ボリュームにライトアクセスがあると前記運用ボリュームの前記更新前データを前記第１の差分ボリュームに格納し、
その後前記ライトアクセスに伴う更新データを前記運用ボリュームに格納し、
前記ユーザ計算機の前記第１のスナップショットへのアクセス位置を求め、
前記運用ボリュームに前記更新データが格納された位置を管理する管理情報を参照して、前記アクセス位置を前記運用ボリュームが前記更新データを格納した位置に対応するものであると判定すると、前記第１の差分ボリュームから前記更新前データを読んで、前記ユーザ計算機に供給し、前記アクセス位置を前記更新デーが格納されていない領域であると判定する、前記運用ボリュームからデータを読んで前記ユーザ計算機に供給し、
前記運用ボリュームの基準時のデータイメージを作成し、
前記基準時から前記第２のスナップショットの設定時までに前記運用ボリューム加わった更新データを前記第２の差分ボリュームに格納し、
前記ユーザ計算機の前記第２のスナップショットへのアクセス位置を求め、
前記運用ボリュームに前記更新データが格納された位置を管理する管理処理情報を参照して、前記アクセス位置を前記運用ボリュームが前記更新データを格納した位置に対応するものであると判定すると、前記第２の差分ボリュームから前記更新前データを読んで、前記ユーザ計算機に供給し、前記アクセス位置を前記更新デーが格納されていない領域であると判定する、前記データイメージからデータを読んでユーザ計算機に供給し、
前記第１のスナップショットとして、複数の世代のスナップショットを設定し、
前記複数の世代のうちの第１の世代のスナップショットに前記管理情報として第１の管理情報を設定し、
前記第１の世代以降の次世代のスナップショットに前記管理情報として第２の管理情報を設定し、
前記第１の管理情報と前記第２の管理情報とに基づいて、前記第１の世代のスナップショットの設定から前記次世代のスナップショット設定迄の前記運用ボリュームの更新位置を示す前記管理処理情報を生成し、
前記第１の世代のスナップショットから前記運用ボリュームの基準時のデータイメージとしての前記運用ボリュームのレプリケーションボリュームを生成し、
前記第２のスナップショットを前記次世代のスナップショットが設定時に設定されたスナップショットとして定義し、
前記次世代のスナップショットを削除し、
前記第１の差分ボリュームの記憶領域のうち、前記次世代のスナップショットに利用される前記更新前データを記憶する領域を空き領域として解放し、
前記第１の差分ボリュームが複数の高性能ディスク装置のＲＡＩＤグループに設定され、前記第２の差分ボリュームが複数の汎用低ビットコストのディスク装置のＲＡＩＤグループに設定されている請求項１記載のストレージ装置。
【請求項３】
前記第１のスナップショットを設定した前記コントローラは、
前記ユーザ計算機から前記運用ボリュームにライトアクセスがあると前記運用ボリュームの前記更新前データを前記第１の差分ボリュームに格納し、
その後前記ライトアクセスに伴う更新データを前記運用ボリュームに格納し、
前記ユーザ計算機の前記第１のスナップショットへのアクセス位置を求め、
前記運用ボリュームに前記更新データが格納された位置を管理する管理情報を参照して、前記アクセス位置を前記運用ボリュームが前記更新データを格納した位置に対応するものであると判定すると、前記第１の差分ボリュームから前記更新前データを読んで、前記ユーザ計算機に供給し、前記アクセス位置を前記更新デーが格納されていない領域であると判定する、前記運用ボリュームからデータを読んで前記ユーザ計算機に供給する、請求項１記載のストレージ装置。
【請求項４】
前記第２のスナップショットを設定した前記コントローラは、
前記運用ボリュームの基準時のデータイメージを作成し、
前記基準時から前記第２のスナップショットの設定時までに前記運用ボリューム加わった更新データを前記第２の差分ボリュームに格納し、
前記ユーザ計算機の前記第２のスナップショットへのアクセス位置を求め、
前記運用ボリュームに前記更新データが格納された位置を管理する管理処理情報を参照して、前記アクセス位置を前記運用ボリュームが前記更新データを格納した位置に対応するものであると判定すると、前記第２の差分ボリュームから前記更新前データを読んで、前記ユーザ計算機に供給し、前記アクセス位置を前記更新デーが格納されていない領域であると判定する、前記データイメージからデータを読んでユーザ計算機に供給する、請求項１記載のストレージ装置。
【請求項５】
前記コントローラは、前記第１のスナップショットとして、複数の世代のスナップショットを設定し、各世代のスナップショット毎に前記管理情報を設定する、請求項３記載のストレージ装置。
【請求項６】
前記運用ボリュームの基準時のデータイメージが前記運用ボリュームのレプリケーションボリュームからなる、請求項４記載のストレージ装置。
【請求項７】
前記コントローラは、前記複数の世代のスナップショットの一つから前記レプリケーションボリュームを生成する、請求項５記載のストレージ装置。
【請求項８】
前記第２のスナップショットを設定した前記コントローラは、
前記運用ボリュームの基準時のデータイメージを作成し、
前記基準時から前記第２のスナップショットの設定時までに前記運用ボリューム加わった更新データを前記第２の差分ボリュームに格納し、
前記ユーザ計算機の前記第２のスナップショットへのアクセス位置を求め、
前記運用ボリュームに前記更新データが格納された位置を管理する管理処理情報を参照して、前記アクセス位置を前記運用ボリュームが前記更新データを格納した位置に対応するものであると判定すると、前記第２の差分ボリュームから前記更新前データを読んで、前記ユーザ計算機に供給し、前記アクセス位置を前記更新デーが格納されていない領域であると判定する、前記データイメージからデータを読んでユーザ計算機に供給する、請求項３記載のストレージ装置。
【請求項９】
前記コントローラは、
前記第１のスナップショットとして、複数の世代のスナップショットを設定し、
前記第２のスナップショットを前記複数の世代のスナップショットの一部を置き換えるものとして定義し、
前記第２のスナップショットによって置き換えられた前記複数世代のスナップショットの一部を削除し、
前記第１の差分ボリュームの記憶領域のうち、前記削除されるスナップショットに利用される前記更新前データを記憶する領域を空き領域として解放する、請求項８記載のストレージ装置。
【請求項１０】
前記コントローラは、
前記第１のスナップショットとして、複数の世代のスナップショットを設定し、
前記複数の世代のうちの第１の世代のスナップショットに前記管理情報として第１の管理情報を設定し、
前記第１の世代以降の次世代のスナップショットに前記管理情報として第２の管理情報を設定し、
前記第１の管理情報と前記第２の管理情報とに基づいて、前記第１の世代のスナップショットの設定から前記次世代のスナップショット設定迄の前記運用ボリュームの更新位置を示す前記管理処理情報を生成し、
前記第１の世代のスナップショットから前記運用ボリュームの基準時のデータイメージとしての前記運用ボリュームのレプリケーションボリュームを生成し、
前記第２のスナップショットを前記次世代のスナップショットが設定時に設定されたスナップショットとして定義し、
前記次世代のスナップショットを削除し、
前記第１の差分ボリュームの記憶領域のうち、前記次世代のスナップショットに利用される前記更新前データを記憶する領域を空き領域として解放する、請求項８記載のストレージ装置。
【請求項１１】
前記第１の差分ボリュームが複数の高性能ディスク装置のＲＡＩＤグループに設定され、前記第２の差分ボリュームが複数の汎用低ビットコストのディスク装置のＲＡＩＤグループに設定されている、請求項９記載のストレージ装置。
【請求項１２】
前記コントローラは、複数の世代のスナップショットを設定し、過去世代のスナップショットを前記第２のスナップショットから構成し、それ以降の世代のスナップショットを前記第１のスナップショットから構成した、請求項１記載のストレージ装置。
【請求項１３】
ユーザ計算機にデータストレージサービスを適用するストレージ装置のスナップショット制御方法であって、
ストレージ装置は、
前記ユーザ計算機から継続的にアクセスされる運用ボリュームと、
前記運用ボリュームに対して、第１のスナップショットと第２のスナップショットとを設定するコントローラと、
を備え、
前記コントローラは、更新前データを利用したスナップショットを、更新後データを利用するスナップショットに置き換え、
差分ボリュームの更新前データを格納している領域を空き領域として解放する、ストレージ装置のスナップショット制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置に係わり、特に、運用中のボリュームをある特定日時において静止化し、静止化したデータイメージをユーザ計算機にスナップショットとして提供する機能を備えたストレージ装置に関するものである。さらに本発明は、ストレージ装置のスナップショット制御方法に関するものである。
【背景技術】
【０００２】
情報化社会における情報を蓄積するストレージシステムの重要な役割の一つに、ユーザデータを保護するということがある。ユーザデータ保護のための機能の一つとしてスナップショット機能が知られている。
【０００３】
スナップショット機能とは、運用中のボリュームをある特定日時において静止化し、静止化したデータイメージをホスト計算機などのユーザ計算機に提供する機能をいう。ボリュームの静止化されたデータイメージをスナップショットという。ストレージ装置は、スナップショットの複数の世代をユーザに提供することができる。
【０００４】
スナップショット機能は、ユーザが意図することなくファイルを削除してしまった場合など、オペレーティングミスからデータをサルベージするためのものである。
【０００５】
ユーザは、直前の世代など所望の世代のスナップショットに戻ることによって、スナップショットを作成した時点でのデータを回復することができる。すなわち、スナップショット機能は、ボリュームの特定日時でのデータイメージをユーザに保障するためのものである。
【０００６】
このスナップショット機能を開示する従来技術として、例えば、特開２００４−３４２０５０号公報に記載されたものがある。この公報によれば、ストレージ装置としてのファイルサーバは、スナップショットを仮想ボリュームとしてクライアント計算機に提供する。
【０００７】
ファイルサーバは、クライアント計算機が継続的にアクセスしている運用ボリュームとしてのプライマリボリュームと、プライマリボリュームが更新される前のデータ（更新前データ）を格納する差分ボリュームとに基づいて、スナップショットをユーザに提供する。
【０００８】
ファイルサーバがスナップショットを取得後、プライマリボリュームにクライアント計算機からライトアクセスがあると、ファイルサーバは、更新前データをプライマリボリュームからリードして、これを差分ボリュームにライトした後、プライマリボリュームに更新データを記録する。プライマリボリュームのどのブロックに更新があったか否かは、ビットマップによって管理される。
【０００９】
クライアント計算機がスナップショット用の仮想ボリュームにアクセスすると、ファイルサーバは、ビットマップを参照して、フラグが立っているブロックアドレスへのアクセスの場合には、プライマリボリュームの対応領域は更新されているので、差分ボリュームから更新前データをリードし、フラグがセットされていないブロックアドレスへのアクセスの場合には、プライマリボリュームの対応領域は更新されていないので、プライマリボリュームからデータをリードし、リードデータをクライアント計算機に提供することとした。
【００１０】
なお、本発明に関連する他の従来技術として、特開２００５−２８４６０９号公報と特開２００７−２２６５９６号公報が存在する。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００４−３４２０５０号公報
【特許文献２】特開２００５−２８４６０９号公報
【特許文献３】特開２００７−２２６５９６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
管理者の手間をかけずに、ユーザが自身で過去ファイルをサルベージできるスナップショット技術は、プライマリボリュームへのＩ／Ｏを止めることなく、仮想ボリュームをユーザに提供するだけで実現でき、そして、スナップショットを運用するための設定項目も従来のバックアップに比べて簡易的であり、しかも、肥大化する非構造化ファイルの過去データをオンラインで利用できるという利点を有することから、ユーザはスナップショット技術をバックアップの目的で頻繁に運用するようになってきている。
【００１３】
しかしながら、ユーザが、スナップショットの複数の世代を年単位のような長期に渡って作成し、これを運用し続けると、差分ボリュームにおける更新前データの保持量が爆発的に増大するという課題があった。
【００１４】
そこで、差分ボリュームに、ビットコストが小さく低速なストレージデバイスを大量に割り当ててこの課題を乗り越えることが考えられるが、これでは、プライマリボリュームに対するＩ／Ｏ性能に対する負の影響が大きいという課題がある。
【００１５】
すなわち、プライマリボリュームにライトアクセスがあると、ファイルサーバはプライマリボリュームから更新前データをリードし、これを差分ボリュームにライトした後、プライマリボリュームに更新データをライトする。
【００１６】
差分ボリュームに低速なストレージデバイスが使用されると、差分ボリュームに対する更新前データのライト処理速度が大幅に低下し、その結果、プライマリボリュームに対するＩ／Ｏ処理性能が大きく損なわれることになる。
【００１７】
したがって、ファイルストレージシステムのベンダーは、ビットコストが高いストレージによって差分ボリュームを構築せざるを得ず、しかも、結果的に、差分ボリュームの容量に限界が出ることになる。そのため、そもそも、スナップショット機能をバックアップとして利用しようとする運用は、早晩、行き詰まることが避けられないという課題がある。
【００１８】
そこで、本発明は、スナップショットを、バックアップ手段として長期にわたって運用しても、差分ボリュームにおける更新前データの保持量が増大しないようにするストレージ装置及びそのスナップショット制御方法を提供することを目的とするものである。
【００１９】
さらに、本発明の他の目的は、低ビットコスト・低速なストレージデバイスを、スナップショット用の差分ボリュームとして利用しても、運用ボリュームに対するＩ／Ｏ性能を維持できるストレージ装置及びそのスナップショット制御方法を提供することにある。
【課題を解決するための手段】
【００２０】
本発明は、この目的を達成するために、更新前データを利用したスナップショットを、更新後データを利用するスナップショットに置き換えることによって、その分、差分ボリュームの更新前データを格納している領域を空き領域として解放し、それにより差分ボリュームに更新前データが累積するのを避けようとするものである。
【００２１】
本発明は、さらに、クライアント計算機が運用ボリュームへＩ／Ｏを行っても、差分ボリュームへの更新後データの書き込みは発生しないため、更新後データ格納型差分ボリュームを高性能なストレージデバイスから構成しなくても、ストレージ装置のＩ／Ｏ処理性能に悪影響を与えることなく、ユーザにスナップショット機能を提供することができる。
【発明の効果】
【００２２】
本発明によれば、スナップショットを、バックアップ手段として長期にわたって運用するようにしたとしても、差分ボリュームにおける更新前データの保持量が増大しないようにするストレージ装置を提供できる。
【００２３】
また、低ビットコスト・低速なストレージデバイスを、スナップショット用のボリュームとして利用しても、運用ボリュームに対するＩ／Ｏ性能を維持できるストレージ装置を提供することができる。
【図面の簡単な説明】
【００２４】
【図１】本発明に係わるストレージシステムの第１の実施形態に関するハードウエアブロック図である。
【図２】メモリ１１４の機能ブロック図である。
【図３】スナップショット管理プログラムの詳細なブロック図である。
【図４】ストレージ装置のスナップショット機能の動作を説明するブロック図である。
【図５】更新前データ利用型スナップショットを管理するための管理テーブルである。
【図６Ａ】更新前データ利用型スナップショットの管理テーブルに仮想ボリュームを登録する過程における当初の状態を示す。
【図６Ｂ】図６Ａに続く状態を示す上記管理テーブルを示す。
【図６Ｃ】図６Ｂに続く状態を示す上記管理テーブルを示す。
【図６Ｄ】図６Ｃに続く状態を示す上記管理テーブルを示す。
【図６Ｅ】図６Ｄに続く状態を示す上記管理テーブルを示す。
【図６Ｆ】複数の仮想ボリュームの登録が達成された上記管理テーブルである。
【図７】スナップショットの運営システムの一例を示すブロック図である。
【図８】仮想ボリュームの種類を示す管理フラグを説明するブロック図である。
【図９】更新前データ保存型差分ボリュームを用いたスナップショットの運用を、更新データ保存型差分ボリュームを用いたものに移行する処理の開  始を決定するためのフローチャートである。
【図１０】図９の説明で言及した移行処理の詳細を示すフローチャ―トである。
【図１１】図７の運営システムに属する複数の仮想ボリュームが登録された管理テーブルであって、この管理テーブルは、更新前データ保存型差分ボリュームを用いたスナップショットを管理する。
【図１２】図７の運営システムに属する複数の仮想ボリュームが登録された管理テーブルであって、この管理テーブルは、更新後データ保存型差分ボリュームを用いたスナップショットを管理する。
【図１３】スナップショットの運用を、更新前データを利用するものから更新データを利用するものに移行した後における、更新前データ利用スナップショット管理テーブルである。
【図１４Ａ】更新済みデータを利用するスナップショット管理テーブルにレプリケーションボリュームを登録した状態を示す。
【図１４Ｂ】更新前データを利用するスナップショット管理テーブルを更新済みデータに移行するための移行対象ビットマップを示すものである。
【図１４Ｃ】移行対象ビットマップによって、更新前データを利用するスナップショット管理テーブルから、仮想ボリュームを、更新済みデータを利用するスナップショット管理テーブルに移行した状態を示したものである。
【図１４Ｄ】図１４Ｃの仮想テーブルにさらに他の仮想ボリュームを移行した状態を示す。
【図１５】スナップショットの管理を、更新済みデータを利用する運用に移行した後での、ストレージ装置がクライアント計算機からのライトコマンドを処理するためのフローチャートである。
【図１６】スナップショットの管理を、更新済みデータを利用する運用に移行した後での、スナップショットボリュームに対するリード処理をストレージ装置が処理することを説明するフローチャ―トである。
【発明を実施するための形態】
【００２５】
図１は、本発明に係るストレージ装置を用いたストレージシステムの第１の実施形態を示すハードウエアブロック図である。このストレージシステムは、ネットワーク１５１によって相互に通信可能に接続されたクライアント計算機１３１、管理クライアント１３２、メディアサーバ１３３が、ネットワークアタッチドストレージ装置（ＮＡＳ）１００に接続されるという構成を備えている。ネットワーク１５１は、例えば、ＴＣＰ／ＩＰ等のプロトコルで通信を行い、ネットワーク１５１に接続された装置間で制御信号やデータを転送する。
【００２６】
クライアント計算機１３１は、ユーザが操作するコンピュータ装置であり、ＮＡＳ１００にアクセスし、データの読み出し及び書き込みを行う。このクライアント計算機１３１は、ネットワーク１５１に複数接続されていてもよい。このクライアント計算機の一例としてホスト計算機、業務サーバ、ＰＣクライアントがある。
【００２７】
管理クライアント１３２は、管理者（管理ユーザ）が操作するコンピュータ装置であり、ＮＡＳ１００の管理に使用される。この管理クライアント１３２は、少なくとも、ＣＰＵ、メモリ、及びインターフェースを備える。
【００２８】
メディアサーバ１３３は、ＮＡＳ１００に記録されたデータをテープ等の記録媒体にバックアップするための装置であり、例えば、磁気テープ装置であっても、大容量の磁気ディスク装置であってもよい。
【００２９】
ＮＡＳ１００は、クライアント計算機１３１にファイル共有サービスを提供する。このＮＡＳ１００は、コントローラ１０１及びディスク装置１１５によって構成されている。
【００３０】
ディスク装置１１５は、複数のディスクドライブ２００、２０２を備えている。ディスク装置１１５には、クライアント１３１から書き込みを要求されたファイルがブロック単位に分割されて記録されている。
【００３１】
ディスクドライブ２００は、データの高速リード/ライトを実現できる高性能なものであって、例えば、ファイバチャネル対応のものである。これに対して、ディスクドライブ２０２は、ＳＡＴＡなど低性能で低ビットコストのディスクドライブである。
【００３２】
複数の高性能ディスクドライブ２００によって、第１のＲＡＩＤグループが構成され、これにクライアント計算機１３１がアクセスする運用ボリュームとしてのプライマリボリューム（以後、ほぼ、これを、Ｐボリューム、又は、Ｐ−ＶＯＬ、と略称する。）１４１と、Ｐボリュームに対する更新があった際、更新前データを格納する、更新前データ格納差分ボリューム（以後、これを、Ｄボリューム、又は、Ｄ−ＶＯＬと略称することがある。）１４２と、レプリケーションボリューム（以後、これを、Ｒボリューム、又は、Ｒ−ＶＯＬ、と略称することがある。）が設定されている。
【００３３】
そして、複数の低性能ディスクドライブ２０２によって、第２のＲＡＩＤグループが構成され、これに、Ｐボリュームへの更新データを格納する、更新後データ格納差分ボリューム（以後、これをＦボリューム、又は、Ｆ−ＶＯＬ、と略称することがある。）１４３が設定されている。
【００３４】
Ｐボリューム１４１は、クライアント計算機１３１からのＩ／Ｏを受け入れる運用中のボリュームであり、クライアント計算機１３１からの書き込み要求を受けて、ブロック単位でデータが書き込まれる。また、クライアント計算機１３１からの通常の読み出し要求を受けて、ブロック単位にデータが読み出される。
【００３５】
コントローラ１０１は、ＣＰＵ１１１、ネットワークインターフェース（Ｉ／Ｆ）１１２、ストレージインターフェース（Ｉ／Ｆ）１１３、及び、メモリ１１４によって構成される。ＣＰＵ１１１は、メモリ１１４に格納された各種のプログラムを実行し、ファイル供給サービス、及びスナップショット機能をユーザに提供する。
【００３６】
図２は、メモリ１１４の機能ブロック図である。メモリ１１４には、ＮＡＳＯＳの管理下で稼動するファイルサーバプログラム１２１と、ファイルシステム処理プログラム１２３と、スナップショット管理プログラム１２４と、バックアップ処理プログラム１２５と、スナップショット管理テーブル１４４とを備えている。
【００３７】
さらに、メモリ１１４は、ボリュームマネージャプログラムによって、仮想ボリューム（Ｖ‐ＶＯＬ）１４３Ａを生成し、これをユーザに対してスナップショ
ットボリュームとして見せている。
【００３８】
仮想ボリューム１４３Ａは、クライアント計算機１３１、又は、管理クライアント１３２から、コントローラ１０１がスナップショットの作成要求を受けたときに、その時点のプライマリボリューム１４１のデータイメージを静止化して、これをユーザに提供するために、ユーザのアクセス用として生成されるものである。
【００３９】
ＮＡＳ１００がユーザに提供するスナップショットには２種類あり、第１が、Ｐボリューム１４１の運用データとＤボリューム１４２の更新前データとを利用して生成されるスナップショット、第２が、特定時点のＰボリュームのＲボリューム１４２ＡのデータとＦボリューム１４３の更新後データとによって生成されるスナップショトである。
【００４０】
以後、便宜上、前者を、更新前データ利用型スナップショットと、後者を、更新データ利用型スナップショットという。レプリケーションボリュームが、請求項に記載してある、運用ボリュームの基準時のデータイメージに相当する。
【００４１】
Ｄボリューム１４２には、スナップショットのコピーオンライト（copy on write）時にプライマリボリューム１４１に記録されていたブロックが複写される。
【００４２】
クライアント計算機１３１又は管理クライアント１３２から、コントローラ１０１がスナップショットの作成要求を受けると、その時点以後、プライマリボリューム１４１のブロックが上書きされるとき、上書きされる前のデータ（更新前データ）がＤボリューム１４２に複写される。
【００４３】
コントローラ１０１は、プライマリボリューム１４１に記録されたブロックとＤボリューム１４２に記録されたブロックとを組み合わせることによって、スナップショットの作成要求を受けた時点のプライマリボリューム１４１のデータイメージをスナップショットとして復元することができる。
【００４４】
スナップショット管理テーブル１４４には、更新前データ利用型スナップショット用のもの（Ｄ−ＶＯＬ用の管理・制御テーブルであって、後述の図５がこれに相当する。）と、更新データ利用型スナップショット用のもの（Ｆ−ＶＯＬ用の管理・制御テーブルであって、後述の図１２がこれに相当する。）と、がある。
【００４５】
両者を区別する場合には、前者を「Ｄボリューム管理用テーブル」と称し、後者を「Ｆボリューム管理テーブル」と称する。また、「スナップショット管理テーブル」と称する場合には、両者を包含する。
【００４６】
スナップショット管理テーブル１４４は、ユーザにスナップショットを利用させるようにするために、一つ又は複数のスナップショットを管理するものであり、作成されたスナップショットごとに、Ｐボリューム１４１のブロックアドレス又はＲボリューム１４２Ａのブロックアドレスと、差分ボリューム（Ｄボリューム１４２、又は、Ｆボリューム１４３）のブロックアドレスとの対応関係が記録されたものである。以後、「スナップショット管理テーブル１４４」を、単に「管理テーブル１４４」ということもある。
【００４７】
ファイルサーバプログラム１２１は、クライアント計算機１３１からのデータアクセス要求に応じて、ファイルシステム処理プログラム１２３に対して、ファイルやディレクトリの読み出し処理、又は書き込み処理の実行を要求し、その実行結果を要求元のクライアント計算機１３１に返送する。
【００４８】
また、ファイルサーバプログラム１２１は、ユーザ認証を行い、ユーザに対してアクセス権限を付与することによって、複数のユーザが存在する場合のファイル共有を管理する。
【００４９】
ファイルシステム処理プログラム１２３は、少なくとも、ファイル読み出し要求処理サブプログラム２０１、及び、ファイル書き込み要求処理サブプログラム２０２Ａを含む。
【００５０】
ファイルシステム処理プログラム１２３は、ファイルサーバプログラム１２１やスナップショット管理プログラム１２４が発行するファイルやディレクトリの読み出し要求、及び、書き込み要求に応じて、ファイルやディレクトリを格納しているボリューム、アクセスするブロックの位置及びサイズを指定し、データの読み出し処理や書き込み処理をスナップショット管理プログラム１２４に発行する。
【００５１】
ファイルシステム処理プログラム１２３は、仮想ボリューム１４３Ａにアクセスすることにより、スナップショットが生成された時点の情報を利用できるため、ファイルシステムのスナップショットイメージをクライアント計算機１３１や管理クライアント１３２などのユーザ計算機に提供することが可能になる。
【００５２】
スナップショット管理プログラム１２４は、図３に示す様に、少なくとも、スナップショット作成処理サブプログラム３０１、コピーオンライト処理サブプログラム３０２、スナップショット合成処理サブプログラム３０３、そして、スナップショト再構成処理サブプログラム３０４を備えている。
【００５３】
スナップショット作成処理サブプログラム３０１は、Ｐボリューム１４１に対するスナップショットを生成する。さらに、ユーザがスナップショットにアクセスできるように、仮想ボリューム１４３Ａを生成する。
【００５４】
スナップショット作成処理サブプログラム３０１は、クライアント計算機１３１からのスナップショット取得要求に対して、スナップショット管理テーブル１４４に、すなわち、Ｄ−ＶＯＬ用の管理テーブ（図５）、及び、Ｆ−ＶＯＬ用の管理テーブル（図１２）のそれぞれに、スナップショットの仮想ボリュームの領域を設定する。
【００５５】
クライアント計算機１３１は、仮想ボリューム１４３Ａを介して、特定日時でのＰボリュームの静止化されたデータイメージであるスナップショットにアクセスすることができる。
【００５６】
仮想ボリューム１４３Ａそれ自体は、記憶領域の割り当てがない仮想的なものであり、Ｐボリューム１４１、Ｄボリューム１４２、Ｆボリューム１４３、そして、Ｒボリューム１４２Ａに、スナップショットに関するデータを記憶する実体がある。
【００５７】
レプリケーションボリューム（Ｒ−ＶＯＬ）１４２Ａは、Ｐボリューム１４１をある日時において静止化したものの複製ボリュームである。
【００５８】
コピーオンライト処理サブプログラム３０２は、スナップショット管理テーブル１４４を用いて、スナップショットの維持に必要な更新前差分データを格納するＤボリューム１４２と、更新後差分データを格納するＦボリューム１４３とを管理し、ファイルシステム処理プログラム１２３の要求に応じたデータ書き込み処理がＰボリュームに対してあっても、スナップショットを維持する処理を行う。
【００５９】
具体的には、Ｐボリューム１４１にデータを書き込む際に、Ｐボリューム１４１に記憶されていた更新前データをＤボリューム１４２にコピーした後、Ｐボリューム１４１の記憶内容を更新する。
【００６０】
また、コピーオンライト処理サブプログラム３０２は、スナップショットの生成時以降に、Ｐボリューム１４１に格納されていたデータにユーザがアクセス可能となるよう、Ｐボリューム１４１又はＲ−ボリューム１４２Ａ、及び、差分ボリューム（Ｄボリューム１４２、Ｆボリューム１４３）に記憶されたデータを管理し、生成されたＰボリューム１４１のスナップショットを提供するための仮想ボリューム１４３Ａにユーザ装置（１３１、１３２）をアクセス可能にする。
【００６１】
さらに、コピーオンライト処理サブプログラム３０２は、特開２００４−３４２５０号公報で示されているように、ホスト計算機からのリードが仮想ボリュームに対してあった時、リード対象のデータがＰボリューム１４１にあるか、Ｄボリューム１４２にあるかを判別するビットマップを形成して、これをＤボリューム用管理テーブル１４４（図５）に記憶する。
【００６２】
一方、ＮＡＳ１００が、スナップショットを、更新後データを利用してクライアント計算機に対して生成する場合、スナップショット合成処理サブプログラム３０３は、ホスト計算機からのリードが仮想ボリュームに対してあった時、リード対象のデータがＲボリューム１４２Ａにあるか、Ｆボリューム１４３にあるかを判別するビットマップを形成して、これをＦボリューム用管理テーブル１４４（図１２）に記憶する。
【００６３】
スナップショット合成処理サブプログラム３０３は、ファイルシステム処理プログラム１２３やバックアップ処理プログラム１２５の要求に応じて、仮想ボリューム１４３Ａの読み出し処理（すなわち、スナップショットを利用ための処理）を行う。
【００６４】
具体的には、スナップショット合成処理サブプログラム３０３は、Ｄボリューム用管理テーブル１４４（図５）のビットマップ領域を参照して、Ｐボリューム１４１、又は、Ｄボリューム１４２のどちらからデータを読み出すかを決定し、決定されたボリュームのアドレスから、スナップショットの作成要求時にＰボリューム１４１に存在するデータをファイルシステム処理プログラム１２３に供給する。
【００６５】
また、同様に、スナップショット合成処理サブプログラム３０３は、Ｆボリューム用管理テーブル１４４（図１２）のビットマップ領域を参照して、Ｒボリューム１４２Ａ、又は、Ｆボリューム１４３のどちらからデータを読み出すかを決定し、決定されたボリュームのアドレスから、スナップショットの作成要求時にＰボリューム１４１に存在するデータをファイルシステム処理プログラム１２３に供給する。
【００６６】
仮想ボリューム１４３Ａは、ユーザ計算機（１３１、１３２，１３３）のそれぞれに、特定日時のスナップショットとして見えているものである。
【００６７】
スナップショット再構成処理サブプログラム３０４は、更新前データ利用型スナップショットを更新データ利用型スナップショットに置き換える処理を行う。この過程で、更新前データ利用型スナップショットのエントリをＤボリューム用管理テーブル(図５)から削除する処理も行う。そして、Ｄボリューム１４２の更新前データを格納している領域を空き領域として解放することによって、Ｄボリューム１４２の容量の圧迫を防ぐものである。
【００６８】
スナップショット再構成処理サブプログラム３０４は、このようなスナップショットのタイプの置き換えをユーザ計算機に意識させないように実行することができる。
【００６９】
スナップショット合成処理サブプログラム３０３は、Ｄボリューム１４２用の管理テーブル（図５）とＦボリューム１４３用の管理テーブル（図１２）を参照して、スナップショットを作成する。
【００７０】
バックアップ処理プログラム１２５は、管理クライアント１３２から、特定のスナップショットを指定したバックアップ要求を受けると、ディスク装置１１５に記録されているデータのうち、当該スナップショットに対応するデータをメディアサーバ１３３に転送して、特定日時のスナップショットに対するバックアップ処理を実行する。
【００７１】
次に、図１のストレージ装置１００の更新前データ利用型スナップショット機能の動作を図４に基づいて説明する。図４は、３月３１日２３：００にスナップショットＶ３（仮想ボリュームＶ３）が作成され、４月２日及び４月２０日にそれぞれＰボリュームに更新が入り、４月３０日２３：００にスナップショットＶ４（仮想ボリュームＶ４）が作成され、５月５日と５月１０日にＰボリューム１４１に更新が入った一連の流れを説明している。
【００７２】
図４を詳しく説明する前に、図５について説明する。図５は、特開２００４-３４２０５０号において説明されているように、更新前データ利用型スナップショットを管理するためのスナップショット管理テーブル（Ｄボリューム用管理テーブル）である。
【００７３】
スナップショット管理テーブルの列５１１は、Ｐボリューム１４１のブロックアドレスに対応しており、最初の行である１番目の行（第１行）５０１にはＰボリュームのブロックアドレス０番が割り当てられ、第２行５０２にはＰボリュームのブロックアドレス１番が割り当てられ、第３行５０３にはＰボリュームのブロックアドレス２番が割り当てられ、以下順番に，Ｐボリュームのブロックアドレスが割り当てられ、最後の行５０４にはＰボリュームのブロックアドレス（ｍ−１）番が割り当てられている。
【００７４】
スナップショット管理テーブルには、複数の仮想ボリューム１４３Ａ（５１３，５１４，５１５）が登録されている。各仮想ボリュームのそれぞれが、異なる日時で作られたスナップショットに対応している。Ｐボリューム１４１の各ブロック５１１は仮想ボリュームの各ブロックに対応している。仮想ボリュームの各行（５０１〜５０４）に記載された数値はＤボリューム１４２のセグメントアドレスである。
【００７５】
第１のスナップショットに対応する仮想ボリューム１（５１３）の第１行には、Ｄボリュームのセグメントアドレス「０」番が割り当てられ、第２行にはＤボリュームのセグメントアドレスの「１」番が登録され、第３行と第ｍ−１行にはＤボリュームのセグメントアドレスの割り当てがないので「なし」が設定されている。
【００７６】
Ｐボリューム１４１のブロックアドレスの０番のデータが更新されると、コピーオンライト処理プログラム３０２は、Ｐボリュームのブロックアドレス０番の更新前のデータをＤボリューム１４１の未使用のセグメントアドレスに書き込み、このセグメントアドレスを仮想ボリューム１のブロックアドレス０番に書き込む。図５は、Ｄボリューム１４２のセグメントアドレスとして「０」が登録されたことを例示している。
【００７７】
続けて、仮想ボリューム１の第２行に割り当てられたセグメントアドレス「１」番は、Ｄボリューム１４２のものであり、Ｐボリュームのブロックアドレス１番のデータが更新されるとき、更新前のデータはＤボリュームのセグメントアドレス「１」番に書き込まれる。
【００７８】
さらに、続けて、仮想ボリューム１の第３行のＰボリュームのブロックアドレス２番と、第ｍ行のＰボリュームのブロックアドレス（ｍ−１）番には、「なし」が登録されている。「なし」は、Ｐボリュームのブロックアドレス２番、（ｍ−１）番に、クライアント計算機からライト（更新）が行われていないことを示している。
【００７９】
仮想ボリューム２（５１４），・・・・ｎ（５１５）は、それぞれ特定の時点でのスナップショットに対応することは説明したとおりである。図４に即して説明すると、仮想ボリューム２（５１４）は３月３１日のスナップショットに対応する仮想ボリュームＶ３であり、仮想ボリューム１は４月３０日のスナップショットに対応する仮想ボリュームＶ４である。仮想ボリュームｎ（５１５）は２月末以前のスナップショットに相当する。
【００８０】
列５１２は、ＣｏＷビットマップを示すものであり、これは複数のビット列から構成されている。図５Ａのｂ−１，ｂ−２，・・・，ｂ−ｎがそれぞれビット列である。各ビット列は、各仮想ボリュームに対応している。
【００８１】
ビット列ｂ−１は仮想ボリューム１に対応し、ビット列ｂ−２は仮想ボリューム２に対応し、ビット列ｂ−ｎは仮想ボリュームｎに対応している。そして、各ビット列の各ビットは、各ブロックアドレスに対応している。
【００８２】
ビット列の「０」は、Ｐボリューム１４１の対応するブロックに更新があったことを示し、「１」はＰボリューム１４１の対応するブロックに更新がなかったことを示す。
【００８３】
次に、スナップショット作成処理サブプログラム３０１が、スナップショットを作成した際、図５の管理テーブルへ情報を登録する動作について説明する。
【００８４】
クライアント計算機からある日時でのスナップショットを作成するリクエストをＮＡＳ１００が受け取ると、スナップショット作成処理サブプログラム３０１は、新たに、仮想ボリュームのエントリと、この仮想ボリュームに対応するビット列のエントリと、を管理テーブル（図５）に登録する。この時点で、新たな仮想ボリュームのエントリの各ブロックには「なし」が設定され、かつ、ビット列の各ブロックには、「１」が設定される。
【００８５】
次に、この仮想ボリュームの登録後、Ｐボリューム１４１に対して、ホスト計算機からライトがあった場合の、ＮＡＳ１００の動作について説明する。なお、この仮想ボリューム、すなわち、今回作成されたスナップショットを、以前に作成されたスナップショットに対応する仮想ボリュームと区別するために、前者の仮想ボリュームを「仮想ボリューム（新）」と呼び、後者の仮想ボリュームを「仮想ボリューム（旧）」と呼ぶ。
【００８６】
コピーオンライト処理サブプログラム３０２は、ホスト計算機からＰボリューム１４１に対するライトを受信すると、ブロックアドレスを検出し、このブロックアドレスの更新前データを読み出して、これをＤボリューム１４２の空きセグメントに格納する。
【００８７】
次いで、コピーオンライト処理サブプログラム３０２は、更新前データが格納された、Ｄボリュームのセグメントの番号を仮想ボリューム（新）の対応するブロックに登録する。
【００８８】
さらに、コピーオンライト処理サブプログラム３０２は、仮想ボリューム（旧）の対応するブロックをチェックし、ここに「なし」が登録されていることを判定した場合には、仮想ボリューム（新）の対応ブロックに登録した番号を登録する。一方、「なし」ではなく、ブロックの番号が登録されている判定した場合には、これを維持する。
【００８９】
さらに、コピーオンライト処理サブプログラム３０２はＤボリューム１４２のセグメント番号を仮想ボリューム（新）のブロックに登録すると、仮想ボリューム（新）に対応するビット列の対応するブロックのビット「１」を「０」にセットする。
【００９０】
次に、クライアント計算機がスナップショットにリードアクセスする際の動作を説明する。スナップショット合成処理サブプログラム３０３は、リードアクセスからリード対象となった仮想ボリュームのＩＤを判定し、この仮想ボリュームに対応するビット列（図５Ａのｂ−１等）を参照する。
【００９１】
次いで、スナップショット合成処理サブプログラム３０３は、仮想ボリュームのリード対象となっているブロックに対応するビットを参照し、ビット「０」を判定すると、仮想ボリュームの対応ブロックに登録されているセグメント番号を取得する。
【００９２】
次いで、このセグメント番号に基づいてＤボリューム１４２にアクセスして、スナップショット作成時における、Ｐボリューム１４１の更新前データを取得して、クライアント計算機に送信する。
【００９３】
一方、スナップショット合成処理サブプログラム３０３は、仮想ボリュームのリード対象となっているブロックに対応するビットを参照し、ビット「１」を判定すると、運用ボリューム１４１の対応ブロックにアクセスして、スナップショット作成時における、Ｐボリューム１４１のデータを取得して、クライアント計算機に送信する。
【００９４】
ブロックアドレスの代わりにブロックＩＤを利用してもよい。スナップショット管理テーブル１４４（図５）は、Ｐボリューム毎に作成・管理される。なお、代表的な実施形態では、ブロックサイズは５１２バイト、運用ボリュームのサイズは１２８ギガバイトとすると、運用ボリュームのブロック数は５０００００００となる。スナップショットの最大数は６４を想定している。
【００９５】
次に、図４にしたがって、更新前データ差分ボリューム（Ｄボリューム１４２）を利用した、スナップショットの管理のための動作を具体的に説明する。
【００９６】
図４において、Ｖ３は、３月３１日２３：００のスナップショットをユーザに提供するための仮想ボリュームであり、Ｖ４は、４月３０日２３：００のスナップショットをユーザに提供するための仮想ボリュームである。
【００９７】
３月３１日２３：００時点でのスナップショットの管理テーブルの例を、図６Ａに示す。図４のＢ３はビット列ｂ−１をマップイメージにしたものである。ｂ１〜ｂ１６は、ビット列ｂ−１の「ブロックアドレス」の０〜１５のそれぞれに対応する。
【００９８】
３月３１日２３：００のスナップショットの作成後、Ｐボリューム１４１のブロック「３」にライトアクセス（ａ→Ａ）が４月２日１４：００に入ると、コピーオンライト処理サブプログラム３０２は、更新前データ（ａ）をＰボリュームの対応ブロック「３」からリードし、リードデータ（ａ）をＤボリューム１４２の空きセグメント「２０」に格納する。Ｄボリュームの空きセグメントは、これを管理するフリーキューから取得する。また、Ｄボリュームの使用されたブロックはフリーキューから解放される。
【００９９】
この時点での管理テーブルは、図６Ｂに示すものになる。すなわち、コピーオンライト処理サブプログラム３０２は、仮想ボリュームＶ３のブロック「２」にＤボリューム１４２のセグメントアドレス「２０」を登録し、そして、ビット列ｂ−１のブロック「２」に「０」をセットする。
【０１００】
さらに、Ｐボリューム１４１のブロック「１２」にライトアクセス（ｂ→Ｂ）が４月２０日１４：００に入ると、コピーオンライト処理サブプログラム３０２は、更新前データ（ｂ）をＰボリュームの対応ブロック「１２」からリードし、リードデータ（ｂ）をＤボリューム１４２の空きセグメント「２１」に格納する。
【０１０１】
この時点での管理テーブルは、図６Ｃに示すものになる。すなわち、コピーオンライト処理サブプログラム３０２は、仮想ボリュームＶ３のブロック「１２」にＤボリューム１４２のセグメントアドレス「２１」を登録し、そして、ビット列ｂ−１のブロック「１２」に「０」をセットする。
【０１０２】
図４は、さらに、４．３０（２３：００）にスナップショットを作成することを示している。Ｖ４は、このスナップショットに対応する仮想ボリュームである。この時点での管理テーブルは図６Ｄに示すものとなる。図６Ｄにおいて、ｂ−２は仮想ボリュームＶ４に対応するビット列である。図４のＢ４は、ビット列ｂ−２のマップイメージである。
【０１０３】
次いで、４月３０日２３：００のスナップショット（仮想ボリュームＶ４）の作成後、Ｐボリューム１４１のブロック「１」にライトアクセス（ｃ→Ｃ）が５月５日１４：００に入ると、コピーオンライト処理サブプログラム３０２は、更新前データ（ｃ）をＰボリュームの対応ブロック「１」からリードし、リードデータ（ｃ）をＤボリューム１４２のフリーセグメント「２２」に格納する。
【０１０４】
この時点での管理テーブルは、図６Ｅに示すものになる。すなわち、コピーオンライト処理サブプログラム３０２は、仮想ボリュームＶ４のブロック「１」にＤボリューム１４２のセグメントアドレス「２２」を登録し、そして、ビット列ｂ−２のブロック「１」に「０」をセットする。
【０１０５】
コピーオンライト処理サブプログラム３０２は、３．３１（２３：００）のスナップショットをユーザに保障するために、仮想ボリュームＶ３のブロック「１」にもＤボリューム１４２のセグメントアドレス「２２」を登録し、そして、ビット列ｂ−１のブロック「１」にも「０」をセットする。
【０１０６】
次いで、Ｐボリューム１４１のブロック「３」にライトアクセス（Ａ→Ｄ）が５月１０日１４：００に入ると、コピーオンライト処理サブプログラム３０２は、更新前データ（Ａ）をＰボリューム１４１の対応ブロック「３」からリードし、リードデータ（Ａ）をＤボリューム１４２の空きセグメント「２３」に格納する。
【０１０７】
この時点での管理テーブルは、図６Ｆに示すものになる。すなわち、コピーオンライト処理サブプログラム３０２は、仮想ボリュームＶ４のブロック「３」にＤボリューム１４２のブロックアドレス「２３」を登録し、そして、ビット列ｂ−２のブロック「３」に「０」をセットする。
【０１０８】
この後、ユーザが３．３１（２３：００）時点のスナップショット（仮想ボリュームＶ３）にリードアクセスすると、スナップショット合成処理サブプログラム３０３は、管理テーブル図６Ｆのビット列ｂ−１を参照し、ブロックアドレス「３」へのリードアクセスを検出すると、対応するビットが「０」であることを確認する。
【０１０９】
そして、スナップショット合成処理サブプログラム３０３は仮想ボリュームＶ３のブロックアドレス「３」を参照して、Ｄボリューム１４２のセグメントアドレス「２０」を確認し、Ｄボリュームのセグメント「２０」から、更新前データ「ａ」をリードして、ファイルシステム処理プログラム１２３に提供する。
【０１１０】
また、クライアント計算機１３１が４．３０（２３：００）時点のスナップショット（仮想ボリュームＶ４）にリードアクセスすると、スナップショット合成処理サブプログラム３０３は、管理テーブル図６Ｆのビット列ｂ−２を参照し、ブロックアドレス「３」へのリードアクセスを検出すると、対応するビットが「０」であることを確認する。
【０１１１】
そして、スナップショット合成処理サブプログラム３０３は仮想ボリュームＶ４のブロックアドレス「３」を参照して、Ｄボリューム１４２のセグメントアドレス「２３」を確認し、Ｄボリュームのセグメント「２３」から、更新前データ「Ａ」をリードして、ファイルシステム処理プログラム１２３に提供する。
【０１１２】
スナップショット合成処理サブプログラム３０３が、管理テーブル図６Ｆのビットを参照して「１」を判定した場合は、Ｐボリューム１４１からデータをリードして、クライアント計算機１３１に提供する。
【０１１３】
既述したとおり、そもそも、更新前データをＤボリュームに格納して、クライアント計算機が運用ボリューム（Ｐボリューム１４１）のスナップショットを生成することは、運用ボリュームのフルコピーを必要とするバックアップに比較して、クライアント１３１からのＩＯを止めることなく、かつ、バックアップ計画に基づかなくてもよいなど、簡単便利であるために、スナップショット機能をバックアップ代わりに利用することが頻繁に行われてきた。
【０１１４】
スナップショット機能を実現するために、ストレージ装置１００は、クライアント計算機１３１からＰボリューム１４１にライトアクセスがある都度、更新前データを高性能ディスクドライブからなるＤボリュームに書き込んで、クライアント計算機１３１からのライトアクセスに対する応答性能を向上させていた。
【０１１５】
ところで、ＮＡＳ１００がスナップショット機能を継続するために、Ｄボリュームを長期に渡って運用すると、膨大な更新前データがＤボリュームに累積され、Ｄボリュームの容量を相当に圧迫することになる。
【０１１６】
そこで、Ｄボリュームの容量を拡張することが考えられるが、Ｄボリュームは高価で高性能なデバイスであることから、ＮＡＳサーバにおける記憶資源のビットコストを上昇させてしまう。
【０１１７】
一方、Ｄボリュームを低ビットコストであるディスクドライブ（このようなディスクドライブは、低価格である分、低性能であって、データのライト速度が顕著に遅い。）に置き換えることは、Ｐボリューム１４１に対するＩ／Ｏ性能が目立って低下するためこれを採用できない。
【０１１８】
すなわち、Ｐボリューム１４１に対するライトは、更新前データがＰボリューム１４１からリードされてＤボリューム１４２にライトされるまで完了せず、Ｄボリュームに低性能のストレージデバイスを使用すると、Ｄボリュームへのライトが律速段階となる。
【０１１９】
そこで、ＮＡＳ１００は、更新データを格納する更新データ格納型差分ボリューム（Ｆボリューム１４３）を新たに設定して、更新データを基にしてスナップショットを生成することとし、その分、Ｄボリュームに中長期間滞留しているデータをＤボリューム１４１から解放することによって、Ｄボリュームの容量の圧迫を防ぐこととした。
【０１２０】
一方、予め準備すべきＤボリュームの容量を少なくしたとしても、Ｄボリュームが更新前データの累積による容量圧迫に晒されることもなくなる。Ｆボリューム１４３は更新後のデータを格納するためのものであり、クライアント計算機１３１がライト時にアクセスするものでもないために、Ｄボリューム１４２用の記憶デバイスのように高性能・高価なものでなくてもよい。
【０１２１】
次に、スナップショットのユーザへの提供について、差分ボリュームに対する管理を、Ｄボリュームを用いる運用からを、Ｆボリュームを用いる運用に移行するための実施形態について説明する。
【０１２２】
この運用は、移行のためのポリシーによって実現されるものであり、例えば、Ｄボリューム１４２の使用済み容量が所定の閾値を越えた場合に移行処理を実施する、スナップショットボリューム数が所定の閾値を越えた場合に移行処理を実施する、毎年度末にその年のスナップショットボに対して移行処理を実施する等の種類がある。
【０１２３】
なお、ストレージ管理ユーザが、Ｄボリューム１４２に基づくスナップショット機能の運用を、Ｆボリューム１４２を用いた運用に移行する場合、移行処理の管理上の観点から、最新のスナップショットはＤボリュームによって運用されることを維持されることが好ましい。
【０１２４】
図７はＤボリュームを用いたスナップショット機能の運用を、Ｆボリュームを用いた運用に移行する一つの実施形態を示したブロック図である。Ｖ３〜Ｖ６は、それぞれ特定時点(図７に記載)のスナップショットボリューム(仮想ボリューム)である。
【０１２５】
スナップショット再構成処理サブプログラム３０４は、Ｆボリューム１４３に格納する更新後データを確定する上で基となる静止化ボリュームを生成するために、仮想ボリュームＶ３からレプリケーションボリューム（Ｒ−ＶＯＬ）１４２Ａを静止化ボリュームとして生成する（図７のＳ２）。
【０１２６】
なお、Ｒ−ＶＯＬをＰ−ＶＯＬのバックアップから構成してもよい。スナップショット再構成処理サブプログラム３０４は、2009.3.30時点のスナップショットボリュームを仮想ボリュームＶ３からＲ−ＶＯＬに変更する。
【０１２７】
スナップショット再構成処理サブプログラム３０４は、Ｆ−ＶＯＬとＲ−ＶＯＬに基づいてスナップショットボリュームを生成できるようにするために、Ｆボリューム管理テーブル(図１２)の作成後、仮想ボリュームＶ４と仮想ボリュームＶ５とへのＰ−ＶＯＬとＤ−ＶＯＬの割り当てを解放して（Ｓ８，Ｓ９，Ｓ１２，Ｓ１３）、これら仮想ボリュームにＦ−ＶＯＬとＲ−ＶＯＬとを割り当てる（Ｓ６，Ｓ７，Ｓ１０Ａ，Ｓ１１）。
【０１２８】
ＮＡＳ１００は、スナップショット機能を維持しながら、ホスト計算機１３１からのライトアクセスに対する応答性の低下がないようにするために、最新の仮想ボリュームＶ６に対する運用を、Ｐ−ＶＯＬとＤ−ＶＯＬとを利用したものに維持している（Ｒ１，Ｒ２）。
【０１２９】
次に、Ｄボリュームを用いた運用を、Ｆボリュームを用いた運用に移行する動作を詳しく説明する。この動作は、スナップショット再構成処理サブプログラム３０４によって主に達成される。
【０１３０】
スナップショット再構成処理サブプログラム３０４は、先ず、図９のフローチャートを実行する。このフローチャートは、移行処理を開始するか否かを決定するものである。スナップショット再構成処理サブプログラム３０４は、スナップショットの環境が移行処理開始条件に合致しているか否かをチェックする（９００）。この条件とは、既述のとおり、例えば、Ｄボリューム１４２の未使用領域の減少などである。
【０１３１】
スナップショット再構成処理サブプログラム３０４が、これに合致すると判定すると、ストレージ管理用端末にこれを通知する（９０２）。管理端末は、ストレージ管理者に移行処理のための入力を求める。なお、運用の変更の要請は管理クライアント１３２に対して行われ、運用の変更の入力は管理クライアントに対して行われてもよい。この入力は、移行処理が適用される仮想ボリュームを特定するための入力である。図７に照らすと、仮想ボリュームＶ３、仮想ボリュームＶ４と、仮想ボリュームＶ５と、そして、仮想ボリュームＶ６がストレージ管理端末に入力される（９０４）。
【０１３２】
既述のとおり、スナップショット再構成処理サブプログラム３０４は、最新の仮想ボリュームの入力があっても、これを移行対象としない。したがって、仮想ボリュームＶ６の入力を省略してもよい。
【０１３３】
次いで、スナップショット再構成処理サブプログラム３０４は、入力された仮想ボリュームのＩＤと、移行処理開始フラグをメモリ１１の所定領域に記憶する（９０８）。
【０１３４】
スナップショット再構成処理サブプログラム３０４は、移行対象の仮想ボリュームが無いと、ステップ９０４を否定判定して図９のフローチャートを終了する。スナップショット再構成処理サブプログラム３０４は、このフローチャートを所定時間毎に繰り返し実行する。
【０１３５】
なお、ストレージ管理者は、図９に示すフローチャートに基づくことなく、移行処理対象となる仮想ボリュームの選択と、移行処理開始フラグのセットを行うことができる。
【０１３６】
図１０は、移行処理の詳細を示すフローチャートである。スナップショット再構成処理サブプログラム３０４は、移行開始フラグを所定時間毎に参照し、移行開始フラグがセットされていることを判定すると、図１０のフローチャートを開始する。なお、スナップショット再構成処理サブプログラム３０４は図１０のフローチャートを終了すると、このフラグをリセットする。
【０１３７】
スナップショット再構成処理サブプログラム３０４は、メモリ１１４に移行対象として登録された仮想ボリューム（Ｖ−ＶＯＬ）の識別番号をリードする（１０００）。
【０１３８】
次いで、ＲＡＩＤグループにＲボリューム１４２Ａが登録されているかを判定し、これがない場合には、最先の仮想ボリュームからＲボリュームを作成し（図６のＳ１）、ＲボリュームをＦ−ＶＯＬ管理テーブルに登録する（１００４）。
【０１３９】
最先の仮想ボリュームは、図６に照らすと、Ｖ３である。Ｒボリュームが存在する場合、スナップショット再構成処理サブプログラム３０４は、ステップ１００４をスキップする。
【０１４０】
スナップショット再構成処理サブプログラム３０４は、仮想ボリュームＶ３の全ブロックからデータをリードして、Ｒボリュームの対応するそれぞれのブロックにデータをコピーする（Ｓ２）。
【０１４１】
スナップショット再構成処理サブプログラム３０４は、図６Ｆに示すＤボリューム管理テーブルの仮想ボリュームＶ３に対応するビット列ｂ−１を参照して、データをＰ-ＶＯＬ又はＤ−ＶＯＬからリードする（Ｓ３，Ｓ４）。
【０１４２】
次いで、スナップショット再構成処理サブプログラム３０４は、最先の仮想ボリュームの次の世代仮想ボリュームＶ４を選択して（１００６）、この仮想ボリュームに対して移行処理を実行する。この処理を具体的に説明する。
【０１４３】
図１１は、図７の仮想ボリュームＶ３〜Ｖ６に対するＤボリューム管理用のテーブルの一例である。このテーブルの見方は、既述した図６Ｆのものと同じである。すなわち、各仮想ボリュームの各ブロック内の数値は、Ｄボリュームのセグメントアドレスである。
【０１４４】
一方、図１２は、移行処理終了の際でのＦボリューム管理用テーブルであり、図１３は移行処理終了の際でのＤボリューム管理用のテーブルである。仮想ボリュームＶ３はＦボリューム管理用テーブル(図１１２)に、Ｆボリューム１４３の参照を要しない実ボリューム（Ｒ−ＶＯＬ）として登録されている。
【０１４５】
図１２において、仮想ボリュームＶ４（Ｆ−ＶＯＬ利用）、仮想ボリュームＶ５（Ｆ−ＶＯＬ利用）の各ブロック内のアドレスは、Ｐボリューム１４１に対する更新データを格納している、Ｆボリュームのセグメントアドレスを示している。
【０１４６】
「なし」は、スナップショット合成処理サブプログラム３０３がスナップショットを生成する際に、Ｆ−ＶＯＬを参照することなく、Ｒ−ＶＯＬを参照することを示している。
【０１４７】
移行処理が完了した時点で、移行処理開始前の時点のＤボリューム管理テーブル(図１１)は図１３のように変更される。すなわち、スナップショット再構成処理サブプログラム３０４は、仮想ボリュームＶ３〜Ｖ５のエントリを管理テーブルから削除する。
【０１４８】
図１０のフローチャートに戻って説明を続ける。ステップの１００４  段階では、スナップショット再構成処理サブプログラム３０４は、Ｒ−ＶＯＬを仮想ボリュームＶ３に代えてＦボリューム用管理テーブルに登録する。この状態の管理テーブルの形態は図１４Ａに示すとおりである。
【０１４９】
次いで、スナップショット再構成処理サブプログラム３０４は、仮想ボリュームＶ３に続く仮想ボリュームＶ４を選択し（１００６）、移行対象ビットマップを作成する（１００８）。
【０１５０】
移行対象ビットマップとは、Ｆボリュームに、Ｐボリュームに対する更新データを登録するか否かを、スナップショット再構成処理サブプログラム３０４が判定するために必要なものである。
【０１５１】
図１４Ｂにおいて、ＢＡ１は、Ｄボリュームを利用する仮想ボリュームＶ４を、Ｆボリュームを利用するタイプに移行させるための移行対象ビットマップであり、ＢＡ２は、Ｄボリュームを利用する仮想ボリュームＶ５を、Ｆボリュームを利用するタイプに移行させるための移行対象ビットマップである。なお、符号５００を付して、図１１に示されたＤボリューム管理用テーブルを、参考のために図１４Ａに記す。
【０１５２】
このビットマップにおいて、「１」はＦボリュームに更新データが登録されず、「０」はＦボリュームに更新データが登録されることを示している。
【０１５３】
スナップショット再構成処理サブプログラム３０４は、移行対象ビットマップを作成する際、Ｐボリュームに更新があったか否かを判定するために、移行対象仮想ボリュームとこの一つ前の仮想ボリュームとを参照し、同じブロックアドレス同士の値を比較する。
【０１５４】
図１４Ｂに基づいて説明すると、スナップショット再構成処理サブプログラム３０４は、仮想ボリュームＶ４に対する移行対象ビットマップＢＡ１を作成する際、仮想ボリュームＶ３の設定後、Ｐ−ＶＯＬに更新があったか否かを判定するために、移行対象仮想ボリュームＶ４とこの一つ前の仮想ボリュームＶ３とを対比して、同じブロックアドレス同士の値を比較する。更新があると、同じブロックアドレス同士の値が変化するからである。
【０１５５】
ブロックアドレス０において、両方の仮想ボリュームにＤボリュームのセグメントアドレスが設定されていないために、移行対象ビットマップＢＡ１のブロックアドレス０には「１」が設定される。ブロックアドレス１について、両仮想ボリュームとも値が同じであるため、同様にＢＡ１のブロックアドレス１には「１」が設定される。
【０１５６】
スナップショット再構成処理サブプログラム３０４は、ブロックアドレス３において、両仮想ボリュームの値が異なるので、Ｐボリュームに対する更新があり、その結果として更新前データを格納するＤボリュームのセグメントアドレスが異なるものになったと判断して、移行対象ビットマップＢＡ１のブロックアドレス３に「０」を設定する。
【０１５７】
スナップショット再構成処理サブプログラム３０４は、ブロックアドレス１２において、仮想ボリュームＶ３にはＤボリュームのセグメントアドレスが設定されており、仮想ボリュームＶ４にはこれが設定されていないので、移行対象ビットマップＢＡ１のブロックアドレス１２に「０」を設定する。
【０１５８】
また、スナップショット再構成処理サブプログラム３０４は、仮想ボリュームＶ４と仮想ボリュームＶ５とを比較して、図１４Ｂに示すように、仮想ボリュームＶ５用の移行対象ビットマップＢＡ２を作成する。スナップショット再構成処理サブプログラム３０４は、移行対象ビットマップをメモリ１１４の所定領域に記憶する。
【０１５９】
ステップ１００８において、スナップショット再構成処理サブプログラム３０４は、仮想ボリュームＶ４用の移行対象ビットマップＢＡ１を既述のようにして作成すると、これを参照して、当該ビットマップの各ブロックアドレスの値を上から順番にチェックする（１０１０）。
【０１６０】
ビットの値が「０」が場合には、スナップショット再構成処理サブプログラム３０４は、ステップ１０１２〜１０１８を実行し、「１」の場合には、ステップ１０２０を実行し、これを全てのビットについて適用する。この一連の処理によって、得られたＦボリューム管理テーブルは既述の図１２に示すとおりである。
【０１６１】
例えば、移行対象ビットマップＢＡ１（図１４Ｂ）のブロックアドレス「３」のビットは「０」であることから、スナップショット再構成処理サブプログラム３０４は、ステップ１０１２において、仮想ボリュームＶ４のブロックアドレス「３」にある、Ｄボリュームのセグメントアドレス「２３」の内容をリードする。
【０１６２】
そして、スナップショット再構成処理サブプログラム３０４は、Ｆボリュームのフリーセグメント（例えば、「６３」）をフリーキューから取得し、このセグメントアドレスにステップ１０１２でリードしたデータをライトし（１０１６、図６のＳ５Ａ）、そして、当該セグメントアドレス「６３」を仮想ボリュームＶ４（Ｆ−ＶＯＬ利用）のブロックアドレス「３」に登録する。
【０１６３】
Ｆボリュームのセグメントアドレス「６３」に登録されたデータは、仮想ボリュームＶ３と仮想ボリュームＶ４との間で、Ｐボリューム１４１に対して更新されたデータである。
【０１６４】
さらに、例えば、移行対象ビットマップのブロックアドレス「１２」のビットは「０」であることから、スナップショット再構成処理サブプログラム３０４は、仮想ボリュームＶ４のブロックアドレス「１２」を参照する（図１４Ｂ）。
【０１６５】
ここには、「なし」が登録されていることから、スナップショット再構成処理サブプログラム３０４は、Ｐボリュームの同じブロックアドレスからデータをリードし、これをＦボリュームのフリーセグメント「６４」にライトし（図６のＳ５）、そして、当該セグメントアドレス「６４」を仮想ボリュームＶ４（Ｆ−ＶＯＬ利用）のブロックアドレス「１２」に登録する（図１４Ｃ）。
【０１６６】
一方、移行ビットマップＢＡ１のブロックアドレスが「３」と「１２」以外には、「１」が登録されていることから、これらブロックアドレスについて、スナップショット再構成処理サブプログラム３０４は、仮想ボリュームＶ４（Ｆ−ＶＯＬ利用）の前のスナップショットボリュームであるＲボリュームの同一ブロックにおいて登録されている値と同じものを登録する。
【０１６７】
図１４Ｃに示すように、Ｒボリュームの全ブロックアドレスにはＦボリュームのセグメントアドレスの登録が無いことから、ブロックアドレスが「３」と「１２」以外の、仮想ボリュームＶ４（Ｆ−ＶＯＬ用）には、「なし」が登録される。
【０１６８】
そして、スナップショット再構成処理サブプログラム３０４は、移行対象ビットマップＶ４の全てのビットに対する既述の処理を終了すると、仮想ボリュームＶ４（Ｆ−ＶＯＬ利用）の各ブロックの値を参照し、Ｆボリュームのセグメントアドレスが登録されているブロックアドレスについて、Ｃｏｗビットマップのビット列ｂ−２の同一ブロックアドレスに「０」を登録し、Ｆボリュームのセグメントアドレスの登録が無いブロックアドレスについて、ビット列ｂ−２の同一ブロックアドレスに「１」を登録する。ここまでのＦボリューム管理用テーブルの形態は図１４Ｃに示すとおりである。
【０１６９】
既述のとおり、図１２のビットマップは、Ｆボリューム参照用ビットマップであり、図１１のビットマップは、Ｄボリューム参照用ビットマップである。
【０１７０】
なお、Ｆボリューム用ビット列の各ビットに対する、「０」又は「１」の登録処理を、移行対象ビットマップＶ４の各ブロックに対する、Ｆボリュームのセグメントアドレスを登録するか否かの処理の都度行うようにしてもよい。このようにして、スナップショット再構成処理サブプログラム３０４は、仮想ボリュームＶ４に対する移行処理を終了する。
【０１７１】
次いで、スナップショット再構成処理サブプログラム３０４は、ステップ１０２２を肯定判定し、仮想ボリュームＶ５に対する移行処理が終了していないために、ステップ１０２４において、他の仮想ボリュームＶ５があるため、ステップ１０２４を肯定判定して、ステップ１００６にリターンし、移行ビットマップＶ５用に基づき、仮想ボリュームＶ４（Ｆ−ＶＯＬ利用）と対比しながら、仮想ボリュームＶ４に対する移行処理と同様にして、ステップ１０１２〜１０２２を実行する。この結果得られた、Ｆボリューム管理テーブルが図１４Ｄに示すとおりのものである。
【０１７２】
次いで、スナップショット再構成処理サブプログラム３０４は、ステップ１０２２を肯定判定し、次いで、全ての仮想ボリュームについて移行処理が終了したことを判定し、すなわち、ステップＳ１０２４を否定判定して、ステップ１０２６に移行する。
【０１７３】
スナップショット再構成処理サブプログラム３０４は、Ｄボリューム用管理テーブル（図１１）から仮想ボリュームＶ３〜Ｖ５のエントリを削除する。その結果、同テーブルは、図１３に示す通りになる。さらに、削除されたエントリに含まれるＤボリュームの使用済みセグメントアドレスが、Ｄボリューム用管理テーブルに登録がある他の仮想ボリュームのブロックアドレスに登録されていない限り、これを解放する。
【０１７４】
この解放は、使用済みセグメントアドレスをフリーキューに接続することによって達成される。したがって、Ｄボリュームの容量を限られたものにしても、スナップショットボリュームＶ６に利用される更新前データを漏れなく保護・保管することができる。
【０１７５】
以上により、スナップショット再構成処理サブプログラム３０４は、図１０に係るフローチャートを終了する。
【０１７６】
次に、図１５は、ホスト計算機１３１からライトがＰボリューム１４１に適用（図７のＷＲ１）された場合における、フローチャートを示すものである。
【０１７７】
コピーオンライト処理サブプログラム３０２は、Ｄ−ＶＯＬのフリーセグメントを取得し（１５００）、ライトがあった、Ｐ−ＶＯＬの特定ブロックアドレスに存在する更新前データをリードしてこれをＤ−ＶＯＬのフリーセグメントに記憶する（１５０２、図７のＷＲ２）。
【０１７８】
そして、コピーオンライト処理サブプログラ３０２ムは、Ｄ−ＶＯＬボリュームのフリーセグメントアドレスをＤボリューム用管理テーブル（図１３）の仮想ボリュームＶ６特定ブロックアドレスに登録し、仮想ボリュームＶ６に対するＤボリューム用ビット列の対応するビットに「０」をセットする（１５０４）。以上により、図１５のフローチャートは終了する。
【０１７９】
なお、既述のとおり、仮想ボリュームＶ３からＶ５に対するスナップショット機能の運用を、Ｄボリュームを利用する運用から、Ｆボリュームを利用する運用に移行したので、これらの仮想ボリュームのエントリーは、図１３に示すように、Ｄボリューム管理用テーブルから削除されている。
【０１８０】
図１６は、スナップショットボリュームに、ホスト計算機１３１からリード要求があった場合のフローチャートを示すものである。
【０１８１】
図８はスナップショットボリュームの管理テーブルであって、複数ある複数のスナップショットボリュームの属性が記録されている。「RRR」はＲボリューム（実ボリューム）であることを示す属性フラグであり、「FFF」は、Ｆボリュームによって、更新後データとしての差分が管理されることを示す属性であり、「DDD」は、Ｄボリュームによって、更新前データとしての差分が管理されることを示す属性である。
【０１８２】
スナップショット作成処理サブプログラム３０１が、スナップショットボリュームを作成した時点で、これを属性とともに管理テーブルに登録し、さらに、スナップショット再構成処理サブプログラム３０４がスナップショットボリュームを、Ｄボリュームを利用した運用形態からＦボリュームを利用した運用形態に変更する都度、当該ボリュームの属性を更新する。
【０１８３】
スナップショット合成処理サブプログラム３０１は、この管理テーブルを参照して、ホスト計算機からのリード対象となったスナップショットボリュームの属性をチェックし、属性が「RRR」又は「FFF」の場合は、Ｆボリュームを利用してスナップショットを生成してこれをホスト計算機に対して提供し（１６０４）、「DDD」の場合は、Ｄボリュームを利用してスナップショットを生成する（１６０２）。
【０１８４】
スナップショット合成処理サブプログラム３０１がＦボリュームを利用してスナップショットを生成する場合、Ｆボリューム管理テーブル（図１２）にある、リード対象となった仮想ボリュームに対応するＦボリューム用ビット列を参照する。
【０１８５】
リード対象となったブロックアドレス対応するビットの値が「１」の場合は、Ｒボリュームの対応ブロックからデータをリードしこれをホスト計算機１３１に提供する（１６０６）。
【０１８６】
一方、「０」の場合には、管理テーブル（図１２）から、リード対象となった仮想ボリュームを判定し、この仮想ボリュームのリード対象となったブロックについて、Ｆボリュームのセグメントアドレスを取得する。そして、スナップショット合成処理サブプログラム３０１は、Ｆボリュームにアクセスし、このセグメントアドレスに登録されている更新後データをホスト計算機に提供する（１６０６）。
【０１８７】
また、ホスト計算機１３１からのリード対象となったスナップショットボリューム（Ｒ−ＶＯＬ）の属性が「RRR」であると、スナップショット合成処理プログラム３０１は、Ｆボリューム管理用テーブル（図１２）を参照するが（１６０４）、Ｒ−ＶＯＬに割り当てられているビット列の全ビットの値はＮＵＬＬであるため、Ｒボリュームの対応するブロックアドレスからデータを直接リードして、ホスト計算機に提供する（Ｓ１６０６）。
【０１８８】
なお、既述の実施形態では、ストレージ装置を、ＮＡＳとして説明したが、ファイルサーバとは別体になっている構成でもよい。
【０１８９】
産業上の利用性
本発明は、スナップショットを、バックアップ手段として長期にわたって運用するようにしたとしても、差分ボリュームにおける更新前データの保持量の増大を抑制する。
【０１９０】
符号の説明
１００  ストレージ装置（ＮＡＳ）
１０１  コントローラ
１１４  メモリ
１１５  ディスク装置
１３１  クライアント計算機
１４１  プライマリボリューム（運用ボリューム）
１４２  更新前データ格納型差分ボリューム
１４３  更新後データ格納型差分ボリューム
【図１】
2013011919.tif 000003
【図２】
2013011919.tif 000004
【図３】
2013011919.tif 000005
【図４】
2013011919.tif 000006
【図５】
2013011919.tif 000007
【図６Ａ】
2013011919.tif 000008
【図６Ｂ】
2013011919.tif 000009
【図６Ｃ】
2013011919.tif 000010
【図６Ｄ】
2013011919.tif 000011
【図６Ｅ】
2013011919.tif 000012
【図６Ｆ】
2013011919.tif 000013
【図７】
2013011919.tif 000014
【図８】
2013011919.tif 000015
【図９】
2013011919.tif 000016
【図１０】
2013011919.tif 000017
【図１１】
2013011919.tif 000018
【図１２】
2013011919.tif 000019
【図１３】
2013011919.tif 000020
【図１４Ａ】
2013011919.tif 000021
【図１４Ｂ】
2013011919.tif 000022
【図１４Ｃ】
2013011919.tif 000023
【図１４Ｄ】
2013011919.tif 000024
【図１５】
2013011919.tif 000025
【図１６】
2013011919.tif 000026