(57)【特許請求の範囲】
【請求項１】
ホスト計算機と通信可能に接続されるストレージシステムであって、
プール及び正ボリュームの基になる複数の記憶デバイスと、
前記複数の記憶デバイス及び前記ホスト計算機に接続されキャッシュ領域を有するコントローラと
を有し、
前記プールは、複数のページで構成されており、
前記コントローラは、正ボリュームのスナップショットである副ボリュームを生成し、
前記正ボリュームは、前記ホスト計算機による処理に利用されるデータが格納される複数の論理領域で構成された論理ボリュームであり、
前記副ボリュームは、前記正ボリュームのスナップショットイメージを保持するための、複数の仮想領域で構成された仮想的な論理ボリュームであり、
（Ａ）前記コントローラは、前記副ボリュームを指定したライト要求を前記ホスト計算機から受け付けた場合、
（ａ１）前記ライト要求に従うデータであるライトデータを前記キャッシュ領域の第１のキャッシュサブ領域に書込み、前記ライトデータのライト先の仮想領域に前記プール内のページが未割り当ての場合、その仮想領域にページを割り当て、
（ａ２）前記（ａ１）の後、そのライト要求に対する応答を前記ホスト計算機に送信し、
（Ｂ）前記コントローラは、
（ｂ１）前記第１のキャッシュサブ領域のうち、前記ライトデータで満たされた領域以外の領域である非対象領域に、前記ライト先仮想領域に対応した論理領域のうちの前記非対象領域に対応する領域に格納されたデータ部分を書込み、
（ｂ２）割り当てたページに、前記第１のキャッシュサブ領域内のデータを書込む、
ストレージシステム。
【請求項２】
前記コントローラは、メモリ領域を有し、
前記メモリ領域は、仮想領域に対応した論理領域からデータの退避が必要か否かの表す属性値を仮想領域毎に記憶し、
前記コントローラは、前記（ａ１）において、
（ａ１１）前記ライトデータのライト先仮想領域に対応した論理領域からデータを未退避であれば、前記ライト先仮想領域に対応した前記属性値を、退避の必要があることを示す第１の値とし、
前記コントローラは、前記（ｂ１）において、
（ｂ１１）前記属性値が前記第１の値であるライト先仮想領域に対応した論理領域内のデータ又は前記データ部分を読み出し、そのデータ又は前記データ部分を前記キャッシュ領域の第２のサブキャッシュ領域に格納し、
（ｂ１２）前記第２のサブキャッシュ領域から前記第１のサブキャッシュ領域に前記データ部分を書込む、
請求項１に記載のストレージシステム。
【請求項３】
前記メモリ領域は、仮想領域毎に、仮想領域のどの位置のデータが更新されたかを表す更新管理情報を記憶し、
前記コントローラは、前記（ａ１）で、前記ライト先仮想領域に対応した前記更新管理情報を、前記ライト先仮想領域における、前記ライト要求に従う位置のデータが更新されたことを表す情報に、更新し、
前記データ部分は、前記仮想領域に対応する更新管理情報が未更新を表す位置に対応したデータ要素の集合である、
請求項２に記載のストレージシステム。
【請求項４】
前記コントローラは、前記（ｂ１１）において、
（ｂ１１１）前記ライト先仮想領域を含む連続する複数の仮想領域の各々について、前記属性値が前記第１の値である仮想領域群がある場合には、前記仮想領域群の各々の論理領域からデータ又は前記データ部分を読み出し、読み出した前記データ又は前記データ部分をまとめて前記キャッシュ領域の第２のサブキャッシュ領域に格納する、
請求項２に記載のストレージシステム。
【請求項５】
（Ｃ）前記コントローラは、前記副ボリュームを指定したリード要求を前記ホスト計算機から受け付けた場合、
（ｃ１）前記リード要求に従うリード先の仮想領域の属性値を判定し、
（ｃ２）前記属性値が前記第１の値であると判定した場合、前記リード先仮想領域に対応した論理領域内のデータであるリードデータを読み出し、そのリードデータを前記キャッシュ領域の第２のサブキャッシュ領域に格納し、
（ｃ３）前記更新管理情報に基づき、前記第１のサブキャッシュ領域格納されたデータの残りの位置に、前記リードデータのうちデータ部分を書込み、
（ｃ４）前記リード先仮想領域に割り当てられたページに、前記第１のキャッシュサブ領域内のデータを書込む、
請求項３に記載のストレージシステム。
【請求項６】
ホスト計算機と通信可能に接続され
プール及び正ボリュームの基になる複数の記憶デバイスと、前記複数の記憶デバイス及び前記ホスト計算機に接続されるキャッシュ領域
を有するストレージシステムが行う記憶制御方法であって、
前記プールは、複数のページで構成されており、
前記正ボリュームのスナップショットである副ボリュームが生成され、
前記正ボリュームは、前記ホスト計算機による処理に利用されるデータが格納される複数の論理領域で構成された論理ボリュームであり、
前記副ボリュームは、前記正ボリュームのスナップショットイメージを保持するための、複数の仮想領域で構成された仮想的な論理ボリュームであり、
（Ａ）前記副ボリュームが指定されたライト要求を前記ホスト計算機から受け付けた場合、
（ａ１）前記ライト要求に従うデータであるライトデータを前記キャッシュ領域の第１のキャッシュサブ領域に書込み、前記ライトデータのライト先の仮想領域に前記プール内のページが未割り当ての場合、その仮想領域にページを割り当て、
（ａ２）前記（ａ１）の後、そのライト要求に対する応答を前記ホスト計算機に送信し、
（Ｂ）前記（ａ２）の後に、
（ｂ１）前記第１のキャッシュサブ領域のうち、前記ライトデータで満たされた領域以外の領域である非対象領域に、前記ライト先仮想領域に対応した論理領域のうちの前記非対象領域に対応する領域に格納されたデータ部分を書込み、
（ｂ２）割り当てたページに、前記第１のキャッシュサブ領域内のデータを書込む、
制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、論理ボリュームのスナップショットを管理するストレージシステムの記憶制御に関する。
【背景技術】
【０００２】
従来、ストレージシステムが有する論理ボリューム（以下、単に「ボリューム」と言うことがある）のデータをバックアップすることが行われている。バックアップとしては、例えば、スナップショットがある。
【０００３】
スナップショット管理の第１の方法によれば、ストレージシステムは、退避元のボリューム（正ボリューム）にライトアクセスが発生した際には、正ボリュームのライト先の領域内のデータを退避先のボリューム（副ボリューム）に退避し、その後、正ボリュームにライト対象のデータを書込み、ライトアクセス元にライト完了の応答を返す。この方法によれば、ライトレスポンスが悪い、すなわち、ライトアクセスが発生してからライトアクセス元に応答が返るまでに長時間を要するという問題がある。
【０００４】
これに対して、スナップショット管理の第２の方法、具体的には、コピーアフターライト（ＣＡＷ）技術が知られている（例えば、特許文献１参照）。この技術によれば、ストレージシステムは、ライトアクセス発生した際に、ライト対象のデータをストレージシステムのキャッシュメモリに書き込んでライトアクセス元にライト完了の応答を返す。その後で（つまり、ライトアクセスと非同期で）、ストレージシステムは、正ボリュームのライト先領域内のデータを副ボリュームに退避し、キャッシュメモリ内のライト対象データを正ボリュームに書き込む。ＣＡＷ技術によれば、上記第１の方法よりもライトレスポンスが速い。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許出願公開第２００６／０１４３４１２号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
副ボリュームが、正ボリュームのスナップショットであり、具体的には、仮想的な論理ボリュームである。副ボリュームに退避されたデータ（正ボリュームとの差分に相当するデータである差分データ）は、実際には、１以上の記憶デバイスに基づく記憶領域であって正ボリュームとは異なる領域（以下、プール）に格納される。副ボリュームから読み出されるデータは、実際には、正ボリューム或いはプールに格納されている。
【０００７】
ところで、スナップショット（副ボリューム）が取得される目的は、正ボリュームのバックアップに限られない。例えば、その目的としては、例えば、アクセス性能のテスト、或いは、ＯＳ（Operating  System）のイメージの配布がある。スナップショット取得の目的によっては、スナップショットに対するアクセスレスポンスが高速であることが望ましい。
【０００８】
しかし、特許文献１には、スナップショットに対するアクセスレスポンスを高速化するための技術は開示されていない。
【０００９】
本発明は、上記課題に鑑みなされたものであり、その目的は、スナップショットのアクセスレスポンスを向上することにある。
【課題を解決するための手段】
【００１０】
ストレージシステムは、ホスト計算機と通信可能に接続され、プール及び正ボリュームの基になる複数の記憶デバイスと、複数の記憶デバイス及びホスト計算機に接続されキャッシュ領域を有するコントローラとを有する。前記プールは、複数のページで構成されており、前記コントローラは、前記正ボリュームのスナップショットである副ボリュームを生成する。前記正ボリュームは、前記ホスト計算機による処理に利用されるデータが格納される複数の論理領域で構成された論理ボリュームであり、前記副ボリュームは、前記正ボリュームのスナップショットイメージを保持するための、複数の仮想領域で構成された仮想的な論理ボリュームである。（Ａ）前記コントローラは、前記副ボリュームを指定したライト要求を前記ホスト計算機から受け付けた場合、（ａ１）前記ライト要求に従うデータであるライトデータを前記キャッシュ領域の第１のキャッシュサブ領域に格納し、（ａ２）前記（ａ１）の後、そのライト要求に対する応答を前記ホスト計算機に送信する。（Ｂ）前記コントローラは、（ｂ１）前記ライトデータのライト先の仮想領域に前記プール内のページが未割り当ての場合、その仮想領域にページを割り当て、（ｂ２）前記(a2)および(b1)の後に、割り当てたページに、前記第１のキャッシュサブ領域内のライトデータを格納する。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施形態に係る計算機システムの全体構成図である。
【図２】図２は、実施形態に係る正ボリュームと副ボリュームとの関係の一例を説明する図である。
【図３】図３は、実施形態に係るコントローラの構成図である。
【図４】図４は、実施形態に係るペア情報管理テーブルを説明する図である。
【図５】図５は、実施形態に係るＰＶＯＬ管理テーブルを説明する図である。
【図６】図６は、実施形態に係るＳＶＯＬ管理テーブルを説明する図である。
【図７】図７は、実施形態に係るストレージ装置におけるＰＶＯＬライト処理の概要を説明する図である。
【図８】図８は、実施形態に係るＰＶＯＬライト処理の第１のフローチャートである。
【図９】図９は、実施形態に係るＰＶＯＬライト処理の第２のフローチャートである。
【図１０】図１０は、実施形態に係るＰＶＯＬライト処理の第３のフローチャートである。
【図１１】図１１は、実施形態に係るＰＶＯＬライト処理の第４のフローチャートである。
【図１２】図１２は、実施形態に係るＰＶＯＬライト処理の第５のフローチャートである。
【図１３】図１３は、実施形態に係るＰＶＯＬライト処理の第６のフローチャートである。
【図１４】図１４は、実施形態に係るＰＶＯＬライト処理の第７のフローチャートである。
【図１５】図１５は、実施形態に係るＰＶＯＬライト処理の第８のフローチャートである。
【図１６】図１６は、実施形態に係るＰＶＯＬライト処理の第９のフローチャートである。
【図１７】図１７は、実施形態に係るＰＶＯＬライト処理の第１０のフローチャートである。
【図１８】図１８は、実施形態に係るＰＶＯＬリード処理の第１のフローチャートである。
【図１９】図１９は、実施形態に係るＰＶＯＬリード処理の第２のフローチャートである。
【図２０】図２０は、実施形態に係るＰＶＯＬリード処理の第３のフローチャートである。
【図２１】図２１は、実施形態に係るＰＶＯＬリード処理の第４のフローチャートである。
【図２２】図２２は、実施形態に係るＰＶＯＬリード処理の第５のフローチャートである。
【図２３】図２３は、実施形態に係るストレージ装置におけるＳＶＯＬライト処理の概要を説明する図である。
【図２４】図２４は、実施形態に係るＳＶＯＬライト処理の第１のフローチャートである。
【図２５】図２５は、実施形態に係るＳＶＯＬライト処理の第２のフローチャートである。
【図２６】図２６は、実施形態に係るＳＶＯＬリード処理のフローチャートである。
【図２７】図２７は、実施形態に係るバックエンド処理のフローチャートである。
【図２８】図２８は、実施形態に係るＳＶＯＬ退避コピー処理のフローチャートである。
【図２９】図２９は、実施形態に係るＳｎａｐｓｈｏｔ取得処理のフローチャートである。
【図３０】図３０は、実施形態に係るＳｎａｐｓｈｏｔ削除処理のフローチャートである。
【発明を実施するための形態】
【００１２】
実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせのすべてが発明の解決手段に必須であるとは限らない。
【００１３】
なお、以下の説明では、「ｘｘｘテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「ｘｘｘテーブル」を「ｘｘｘ情報」と呼ぶことができる。
【００１４】
また、以下の説明では、種々の対象（例えば、ボリューム、チャンク、ページ等）の識別情報の種類として、番号が採用されるが、他種の識別情報が採用されても良い。
【００１５】
また、以下の説明において、後述するコントローラが行う処理の少なくとも一部は、プロセッサ（例えばＣＰＵ（Central  Processing  Unit））がコンピュータプログラムを実行することによって行われる。プロセッサは、ＣＰＵそれ自体であっても良いし、ＣＰＵが行う処理の一部又は全部を行うハードウェア回路を含んでも良い。プログラムは、プログラムソースから各コントローラにインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ又は記憶メディアであっても良い。
【００１６】
以下、実施形態を詳細に説明する。
【００１７】
図１は、実施形態に係る計算機システムの全体構成図である。
【００１８】
計算機システムは、ストレージシステムの一例としてのストレージ装置１と、ホスト計算機（以下、単に「ホスト」ということもある）２と、管理端末３とを有する。ストレージ装置１、ホスト２、管理端末３の数は、１以上とすることができる。ストレージ装置１と、ホスト２とは、通信ネットワーク（例えば、ＳＡＮ（Storage Area Network））５を介して相互に接続されている。また、ストレージ装置１と、管理端末３は、通信ネットワーク（例えば、ＬＡＮ（Local Area Network））６を介して相互に接続されている。ストレージ装置１は、ホスト２で利用されるデータを記憶する。ホスト２は、各種処理を実行し、ストレージ装置１からデータを読み出したり、ストレージ装置１へデータを書き込んだりする。管理端末３は、図示しないＣＰＵが管理プログラム３１を実行することにより各種処理を行う。管理端末３は、表示装置を有し、その表示装置にストレージ装置１の管理用の画面を表示することができる。管理端末３は、管理操作リクエストをユーザー（例えば、管理端末３のオペレーター）から受け付け、管理操作リクエストをストレージ装置１に対して送信する。
【００１９】
ストレージ装置１は、コントローラ１１と、複数のディスク装置１２とを有する。各コントローラ１１は、図示しない内部バスを介して各ディスク装置１２に接続されている。また、本実施形態では、複数のディスク装置１２に基づく記憶領域（以下、プール）１４が形成されている。
【００２０】
ディスク装置１２は、ディスク型の記憶メディアのドライブであり、ホスト２からのライト要求に従うデータを記憶する。ストレージ装置１においては、ディスク装置１２に加えて、又は、ディスク装置１２に代えて、他種の記憶メディアを有する記憶デバイス（例えばフラッシュメモリドライブ）を備えても良い。
【００２１】
図２は、実施形態に係る正ボリュームと副ボリュームとの関係の一例を説明する図である。
【００２２】
正ボリューム（ＰＶＯＬ）３０１は、ホスト２が処理に利用するデータが書き込まれるボリュームである。ＰＶＯＬ３０１は、複数のディスク装置１２で構成されたＲＡＩＤグループ（所定のＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）レベルでデータを記憶するディスク装置群）に基づく実体的な論理ボリュームであっても良いし、ＲＡＩＤグループに基づかない仮想的な論理ボリューム（例えば、シンプロビジョニングに従うボリューム、或いは、外部のストレージ装置の記憶資源（例えば論理ボリューム）がマッピングされたボリューム）であっても良い。一方、各副ボリューム（ＳＶＯＬ）１５は、ＰＶＯＬ３０１のスナップショット、すなわち、ＰＶＯＬ３０１に対するスナップショット取得時点におけるスナップショットイメージ（ＰＶＯＬ３０１のイメージ）を記憶するボリュームである。ＳＶＯＬ１５は、仮想的な論理ボリュームであり、ＳＶＯＬ１５が記憶するデータは、実際には、ＰＶＯＬ３０１又はプール１４に記憶される。本実施形態においては、ＳＶＯＬ１５に、世代番号（世代＃）が関連付けられる。世代＃は、スナップショットの取得時点に相当する。つまり、ＳＶＯＬ１５に関連付けられている世代＃は、そのＳＶＯＬ１５（スナップショット）の世代を意味する。世代＃は、古い世代から順に、世代＃１、世代＃２、世代＃３・・・となっている（つまり、旧い世代ほど世代番号が若い）。
【００２３】
世代＃２と世代＃３の間において、ＰＶＯＬ３０１内の領域Ｒ９に更新(データの書き込み)が発生した場合には、ＰＶＯＬ３０１内の領域Ｒ９のデータはプール１４内の領域Ｒ６に退避される。このため、世代＃３のＳＶＯＬ１５内の領域Ｒ１０は、ＰＶＯＬ３０１内の領域Ｒ９を参照するように設定され、世代＃３のＳＶＯＬ１５内の領域Ｒ１０に対応する、世代＃１のＳＶＯＬ１５内の領域Ｒ７、及び、世代＃２のＳＶＯＬ１５内の領域Ｒ８は、プール１４内の領域Ｒ６を参照するように設定される。
【００２４】
また、世代＃１のＳＶＯＬ１５内の領域Ｒ２、及び、世代＃２のＳＶＯＬ１５内の領域Ｒ３は、ＰＶＯＬ３０１内の領域Ｒ１を参照するように設定されている。このとき、世代＃１のＳＶＯＬ１５内の領域Ｒ２、及び、世代＃２のＳＶＯＬ１５内の領域Ｒ３に対応する、世代＃３のＳＶＯＬ内の領域Ｒ４に対して、更新（データの書き込み）が発生した場合には、世代＃３のＳＶＯＬ１５内の領域Ｒ４は、プール１４内の領域Ｒ５を参照するように設定される。またこの場合、世代＃３と世代＃４の間にＰＶＯＬ３０１内の領域Ｒ１に対して更新が行われず、かつ、世代＃３内のＳＶＯＬ１５内の領域Ｒ４に対応する世代＃４の領域（図示なし）に対して更新が行われない場合は、その世代＃４の領域は、ＰＶＯＬ３０１内の領域Ｒ１を参照するように設定される。
【００２５】
図３は、実施形態に係るコントローラの構成図である。
【００２６】
コントローラ１１は、通信インタフェースデバイスと、記憶デバイスと、それらに接続された制御デバイスとを有する。通信インタフェースデバイスは、例えば、上位インターフェース（上位Ｉ／Ｆ）１１３と、下位インターフェース（下位Ｉ／Ｆ）１１４と、インターフェース（Ｉ／Ｆ）１１５とである。記憶デバイスは、例えば、メモリ１１１である。制御デバイスは、例えば、ＣＰＵ１１２である。コントローラ１１は、更に、ブリッジ１１６を有する。ブリッジ１１６は、メモリ１１１と、ＣＰＵ１１２と、上位Ｉ／Ｆ１１３と、下位Ｉ／Ｆ１１４と、Ｉ／Ｆ１１５とを相互に通信可能に接続する。
【００２７】
メモリ１１１は、１以上の同種或いは異種のメモリで構成される。メモリ１１１は、制御に必要なデータ及びプログラムを記憶する。具体的には、例えば、メモリ１１１は、管理プログラム１１７と、コピー処理プログラム１１９と、Ｉ／Ｏ処理プログラム１２０とを記憶する。管理プログラム１１７は、ペア情報管理テーブル１１７１と、ＰＶＯＬ管理テーブル１１７２と、ＳＶＯＬ管理テーブル１１７３とを管理し、スナップショット及び/又はプール１４の管理処理を実行する。コピー処理プログラム１１９は、データのコピー処理を実行する。Ｉ／Ｏ処理プログラム１２０は、他のプログラムを適宜呼び出して、データの入出力処理を実行する。
【００２８】
また、メモリ１１１は、キャッシュ領域１２１を有する。キャッシュ領域１２１は、例えば、ＳＲＡＭやＥＥＰＲＯＭ（Electrically Erasable Programmable Read Only Memory）等の不揮発性メモリ、あるいは、バッテリーバックアップされたＤＲＡＭ等で構成され、ストレージ装置１がシャットダウン状態であっても揮発させないようにするデータを格納する。
【００２９】
ＣＰＵ１１２は、メモリ１１１に格納されたプログラムを実行することにより、各部を制御して各種処理を実行する。上位Ｉ／Ｆ１１３は、ホスト２との通信を仲介する。上位Ｉ／Ｆ１１３は、例えば、Fibre Channel(FC)，iSCSI等であってもよい。下位Ｉ／Ｆ１１４は、ディスク装置１２との通信を仲介する。下位Ｉ／Ｆ１１４は、例えば、ＦＣ、ＳＡＳ、ＳＡＴＡ等のディスクＩ／Ｆである。Ｉ／Ｆ１１５は、管理端末３との通信を仲介する。
【００３０】
図４は、実施形態に係るペア情報管理テーブルを説明する図である。なお、以下の説明では、適宜、論理ボリュームを「ＶＯＬ」と記載する。
【００３１】
ペア情報管理テーブル１１７１は、ＰＶＯＬ番号（ＰＶＯＬ＃）と、最新世代番号（最新世代＃）と、ペアＩＤと、ＳＶＯＬ番号（ＳＶＯＬ＃）と、世代番号（世代＃）と、ステータスとを対応付けたレコードを管理する。
【００３２】
ＰＶＯＬ＃は、コピー元となるボリューム（ＰＶＯＬ）をストレージ装置１内で一意に特定する番号である。最新世代＃は、対応するＰＶＯＬにおける最新のスナップショットの世代番号である。ペアＩＤは、ＰＶＯＬとＳＶＯＬとのペア（コピーペア）を一意に特定する番号である。ＳＶＯＬ＃は、コピー先となるボリューム（ＳＶＯＬ）をストレージ装置１内で一意に特定する番号である。世代＃は、対応するＳＶＯＬが格納するスナップショットの世代番号である。ステータスは、対応するコピーペアの状態である。ステータスとしては、スナップショットを保持している状態を示すＳｎａｐｓｈｏｔ保持と、Ｓｎａｐｓｈｏｔを取得していない状態を示すＳｎａｐｓｈｏｔ未取得と、対応する世代のＰＶＯＬのリストアを実行している状態を示すリストア中がある。ＰＶＯＬのリストアでは、そのＰＶＯＬの世代に対応するＳＶＯＬ内のデータが、そのＳＶＯＬ以外のＶＯＬであるリストア先ＶＯＬ（例えばＰＶＯＬ）にコピーされる。これにより、リストア先ＶＯＬは、ＳＶＯＬの複製、言い換えれば、或る時点のＰＶＯＬとなる。
【００３３】
例えば、同図における一番上のレコードは、ＶＯＬ＃０のＶＯＬがＰＶＯＬであり、その最新世代番号は、３であり、ＶＯＬ＃６のＳＶＯＬと、コピーペアが構成され、そのペアＩＤが０であり、このＳＶＯＬは、世代番号が１であり、スナップショットを保持していることを示している。
【００３４】
図５は、実施形態に係るＰＶＯＬ管理テーブルを説明する図である。
【００３５】
ＰＶＯＬ管理テーブル１１７２は、ＰＶＯＬ番号（ＰＶＯＬ＃）と、領域ＩＤと、退避状態と、リストア状態と、ＣＡＷ属性と、世代番号（世代＃）とを対応付けたレコードを管理する。
【００３６】
ＰＶＯＬ＃は、コピー元となるＶＯＬ（ＰＶＯＬ）をストレージ装置１内で一意に特定する番号である。領域ＩＤは、領域特定情報の一例であり、ＶＯＬにおいて区分されている領域（スロット）を特定する番号である。退避状態は、ＰＶＯＬにおける領域に書き込まれるデータがプール１４に退避されているか否かを示す情報である。退避状態としては、例えば、データを退避していることを示す「退避済み」と、データを退避していないことを示す「未退避」とがある。例えば、ＰＶＯＬにおける領域について、少なくとも１のＳＶＯＬが参照している場合には、「未退避」が設定されるようにしてもよい。リストア状態は、ＰＶＯＬに対するリストアが実行された際のリストアの状態を示す情報である。リストア状態としては、ＰＶＯＬのリストアが実行されていない場合には、「−」が設定され、ＰＶＯＬのリストアが実行されている場合であって、対応する領域のリストアが済んでいる場合には「済み」が設定され、対応する領域のリストアが済んでいない場合には「未」が設定される。ＣＡＷ属性は、当該領域についてライトされた際に、対応するＰＶＯＬの領域からデータを退避させるコピーを実行する必要がある場合には、「ＯＮ」が設定され、対応するＰＶＯＬの領域からデータを退避させる必要がない場合には、「ＯＦＦ」が設定される。世代＃は、該当する領域に書き込むべきデータ（キャッシュ領域１２１内のデータ（データ要素））に対応するスナップショットの世代番号を識別するための情報である。本実施形態では、最新のスナップショット取得時点以降に書き込まれたデータ要素の世代＃としては、書き込まれた時点のスナップショットの最新世代＃＋１が設定される。ここで、この世代番号が、ＰＶＯＬに対するスナップショット取得時点との時間的関係を示す時間関係情報の一例である。なお、世代＃に代えて、スナップショット取得時間が管理されてもよく、要は、データ要素について、各スナップショットの取得時点との一致又は前後等の時間関係を把握できる情報であればよい。
【００３７】
例えば、同図における２番目のレコードは、ＶＯＬ＃が０のＶＯＬ内の領域＃が１の領域においては、データ要素が未退避であり、リストアは実行されておらず、当該領域のキャッシュに書き込まれたデータがディスクに書き込まれる前に、データの退避が必要であることを示し、当該領域のデータは、世代＃は、２であることを示している。
【００３８】
図６は、実施形態に係るＳＶＯＬ管理テーブルを説明する図である。
【００３９】
ＳＶＯＬ管理テーブル１１７３は、ＶＯＬ番号（ＶＯＬ＃）と、領域ＩＤと、退避状態と、ＳＶＯＬ更新属性と、更新位置ビットマップ（ＢＭ）と、ページＩＤとを対応付けたレコードを管理する。
【００４０】
ＶＯＬ＃は、ＳＶＯＬをストレージ装置１内で一意に特定する番号である。領域ＩＤは、ＶＯＬにおいて区分されている領域を特定する番号である。退避状態は、ＳＶＯＬにおける領域に書き込まれるデータがプール１４に退避されているか否かを示す情報である。退避状態としては、例えば、データを退避している（すなわち、対象となる領域がプール内の領域を参照している）ことを示す「退避済み」と、データを退避していない（すなわち、対象となる領域がPVOL内の領域を参照している）ことを示す「未退避」とがある。加えて、退避済みとなったデータが格納されたプール１４内の領域を２つ以上のＳＶＯＬが参照している場合には、共有状態を示す「共有」が設定される。ＳＶＯＬ更新属性は、対象のＳＶＯＬ領域（ＳＶＯＬ内の領域）が参照するＰＶＯＬ領域（ＰＶＯＬ内の領域）からデータを退避させる必要があるか否かを意味する。ＳＶＯＬ更新属性としては、ＰＶＯＬ領域からデータを退避させる必要がある場合には、「ＯＮ」が設定され、その必要がない場合には、「ＯＦＦ」が設定される。更新位置ＢＭは、対象のＳＶＯＬ領域（スロット）におけるデータ更新位置を表す。例えば、スロット（例えば２５６ＫＢ）は、複数のサブブロック（例えば５１２ｂｙｔｅ）に分割されていて、更新位置ＢＭは、複数のサブブロックにそれぞれ対応した複数のビットで構成されている。サブブロック内のデータが更新された場合、ビットは例えば「１」とされ、サブブロック内のデータが未更新の場合、ビットは例えば「０」である。具体的には、例えば、図７の上から２番目のレコードは、ＶＯＬ＃０のＳＶＯＬの領域＃１のスロットについて、更新位置ＢＭは「００１１１０００・・・」である。これは、スロットの３〜５番目のサブブロックのデータが更新されており、スロットの１〜２及び６〜８番目のサブブロックのデータは更新されていないことを意味する。ページＩＤは、対象の領域のデータが格納されるプール１４内の領域（ページ）を特定する番号である。ページは、対象の領域（ＳＶＯＬ内の領域）に参照されるページである。例えば、同図の一番上のレコードは、ＶＯＬ＃０のＶＯＬの領域＃０の領域について、割り当てられたプール内のページＩＤが１０であることを示している。
【００４１】
次に、ストレージ装置１で行われる動作を説明する。
【００４２】
図７は、実施形態に係るストレージ装置におけるＰＶＯＬライト処理の概要を説明する図である。
【００４３】
コントローラ１１は、ＰＶＯＬ３０１を指定したライト（ＷＲ）要求（ライト要求）をホスト２から受領した時に、ＣＡＷ（Copy after write）実行の可否を判断する（図中（１））。コントローラ１１は、ＰＶＯＬ３０１内の書き込み先の領域（スロット）からデータを未退避であって、キャッシュ領域１２１に確保されたキャッシュサブ領域（以下、「確保領域」と言うことがある）内がホストダーティでない場合には、ＰＶＯＬ３０１内のライト先領域について、ＣＡＷ属性をＯＮにし、世代＃として、最新世代番号（最新世代＃）＋１（つまり最新世代番号に１を加算した値）を登録する（図中（２））。ここで、「確保領域がホストダーティでない」とは、確保領域内に保持されたデータが、ＰＶＯＬ３０１に格納されていないデータ（ダーティデータ）でないことをいう。また、ＣＡＷ属性のＯＮは、ディスクへ書き込む前にデータの退避が必要であることを意味し、ＣＡＷ属性のＯＦＦは、ディスクへ書き込む前にデータの退避が必要ではないことを意味する。スロットとは、キャッシュ領域１２１またはディスク領域における管理単位である所定の容量単位の領域である。スロットサイズは、例えば、ホスト２からのライト要求時のライトデータのサイズよりも大きくてもよい。なお、本実施形態では、ＰＶＯＬがスロットと同じサイズの領域に分割して管理されており、ＰＶＯＬにおける分割された領域もスロットと言うこととする。
【００４４】
次いで、コントローラ１１は、ライト要求に従うライト対象のデータ（ＷＲデータ：ライトデータ）をホスト２から受けとって、確保領域におけるライト面（Ｗ面）（ボリュームに書き込むデータを記憶する領域）にライトデータを書き込む。次いで、コントローラ１１は、ホスト２にライト要求に対するレスポンスを送信する（図中（４））。
【００４５】
これとは、非同期で（バックエンドで）、コントローラ１１は、ＰＶＯＬ３０１内のライト先領域についてのＣＡＷ属性を検出する（図中（５））。コントローラ１１は、ＣＡＷ属性がＯＮの場合には、確保領域におけるリード面（Ｒ面）（ボリュームから読み出されたデータを記憶する領域）に、その確保領域におけるＷ面が記憶するデータのライト先領域（ＰＶＯＬ内の領域（スロット））の更新前のデータがキャッシュされているかを判定する。コントローラ１１は、キャッシュミスの場合には、ステージング、すなわち、ＰＶＯＬ３０１内のライト先領域からデータを確保領域内のＲ面に読み出す（図中（６））。次いで、コントローラ１１は、ライト先領域（ＰＶＯＬ３０１内の領域）に対応する、ＳＶＯＬ１５内の領域に、プール１４から領域（ページ）を割り当て（図中（７））、当該ページに、Ｒ面に読み出したデータを退避する（以下、このデータを退避データという）（図中（８））。ここで、ページとは、プール１４において割り当てを行う単位領域をいう。ページのサイズは、例えば、スロットと同じサイズでよい。なお、この処理の後、コントローラ１１は、ライトデータをライト要求に従うＰＶＯＬ３０１内の領域に格納する。このとき、例えば、ＰＶＯＬ３０１の基となるＲＡＩＤグループ（例えば、ＲＡＩＤレベルが５の場合）において、退避データを含むデータ（例えば、ＰＶＯＬ３０１内におけるパリティデータを生成するために必要な連続する複数のスロット（以下、パリティ列という）に格納されたデータ）によって生成されたパリティデータ（以下、旧パリティという）を格納している場合には、旧パリティ、退避データ及びライトデータによりリードモディファイライトを行うことによって（これらについてＸＯＲ演算を行うことによって）新たなパリティデータを生成しＰＶＯＬ３０１内に反映しても良い。
【００４６】
図８は、実施形態に係るＰＶＯＬライト処理の第１のフローチャートである。
【００４７】
図８に示すように、ＰＶＯＬライト処理においては、ストレージ装置１のコントローラ１１は、ホスト２からライト要求を受領すると（ステップＳ１）、ペア情報管理テーブル１１７１におけるライト要求のライト対象のＰＶＯＬ＃のステータスを参照することにより、ライト要求に対応するＰＶＯＬがリストア中であるか否かを判定する（ステップＳ２）。ここで、ライト要求には、例えば、ライトデータを書き込むＰＶＯＬを示すＬＵＮ（論理ユニット番号）と、ＰＶＯＬにおけるライト先領域に属するＬＢＡ（論理ブロックアドレス）とが含まれており、ＬＵＮ及びＬＢＡにより、ＰＶＯＬのＶＯＬ＃及びライト先領域の領域ＩＤとを特定することができる。
【００４８】
ステップ２の判定の結果、リストア中である場合（ステップＳ２でＹｅｓ）には、コントローラ１１は、ポイントＰ（図１３参照）に処理を進める。一方、リストア中でない場合（ステップＳ２でＮｏ）、又は、ポイントＲから進んできた場合には、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２に基づいて、ライト要求のライト対象の領域を含むスロットについてステータスが「Ｓｎａｐｓｈｏｔ保持あり」であるか否かを判定する（ステップＳ３）。
【００４９】
この結果、「スナップショット保持あり」でない場合（ステップＳ３でＮｏ）には、コントローラ１１は、ポイントＮ（図１０参照）に処理を進める。一方、「スナップショット保持あり」である場合（ステップＳ３でＹｅｓ）には、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２を参照し、当該スロットが未退避であるか否か、すなわち、当該スロットに書き込むべきキャッシュ領域１２１のデータ要素が未退避であるか否かを判定する（ステップＳ４）。この結果、当該スロットが未退避でない場合（ステップＳ４でＮｏ）には、コントローラ１１は、ポイントＮ（図１０参照）に処理を進める。一方、当該スロットが未退避である場合（ステップＳ４でＹｅｓ）には、ＰＶＯＬ管理テーブル１１７２を参照し、当該スロットのＣＡＷ属性がＯＮであるか否かを判定する（ステップＳ５）。
【００５０】
この結果、ＣＡＷ属性がＯＮではない場合（ステップＳ５でＮｏ）には、コントローラ１１は、キャッシュ領域１２１のキャッシュ状態がホストダーティであるか、すなわち、当該スロットに対応するキャッシュ領域１２１のＷ面に、データがあるか否かを判定し（ステップＳ６）、ホストダーティでない場合（ステップＳ６でＮｏ）には、ポイントＡ（図９参照）に処理を進める一方、ホストダーティである場合（ステップＳ６でＹｅｓ）には、ポイントＢ（図１１参照）に処理を進める。
【００５１】
一方、ステップＳ５の結果、ＣＡＷ属性がＯＮの場合（ステップＳ５でＹｅｓ）には、コントローラ１１は、当該領域の世代＃が最新世代＃より大きいか否かを判定する（ステップＳ７）。この結果、当該領域の世代＃が最新世代＃より大きい場合（ステップＳ７でＹｅｓ）には、当該領域に書き込むべきキャッシュ領域１２１のデータは、最新のスナップショットを取得した時点よりも後に更新されたデータであって、スナップショットを構成するデータ（スナップショット構成要素）ではないことを意味しているので、コントローラ１１は、ポイントＮ（図１０参照）に処理を進める。一方、当該領域の世代＃が最新世代＃以下の場合（ステップＳ７でＮｏ）には、当該領域に書き込むべきキャッシュ領域１２１のデータが書き込まれた時点よりも後で、次のスナップショットの取得がされていることを示し、当該キャッシュ領域１２１のデータは、スナップショット構成要素であることを意味しているので、ポイントＣ（図１２参照）に処理を進める。
【００５２】
図９は、実施形態に係るＰＶＯＬライト処理の第２のフローチャートである。
【００５３】
ポイントＡに処理を進めると、図９に示すように、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２のライト要求に対応する領域のＣＡＷ属性をＯＮに設定し（ステップＳ１１）、当該領域の世代＃に、ペア情報管理テーブル１１７１の対応するＰＶＯＬの最新世代＃に１を加算した値を設定する（ステップＳ１２）。これにより、当該領域に格納すべきキャッシュ領域１２１のデータが、最新のスナップショット取得時よりも後に更新されたデータであることが把握できるようになる。次いで、コントローラ１１は、当該領域に書き込むべきライトデータをメモリ１１１のキャッシュ領域１２１に格納し（ステップＳ１３）、ライト要求に対する応答をホスト２に対して送信する（ステップＳ１４）。
【００５４】
図１０は、実施形態に係るＰＶＯＬライト処理の第３のフローチャートである。
【００５５】
ポイントＮに処理を進めると、図１０に示すように、コントローラ１１は、ライトデータをメモリ１１１のキャッシュ領域１２１に格納し（ステップＳ２１）、ライト要求に対する応答をホスト２に対して送信する（ステップＳ２２）。これにより、キャッシュ領域１２１のデータは、新たなライトデータに更新される。
【００５６】
図１１は、実施形態に係るＰＶＯＬライト処理の第４のフローチャートである。
【００５７】
ポイントＢに処理を進めると、図１１に示すように、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２に基づいて、ライト対象のＰＶＯＬの領域に対応付けられている世代＃を特定し、ペア情報管理テーブル１１７１に基づいて、当該世代＃のＳＶＯＬを特定し、ライト対象の領域に対応する当該ＳＶＯＬの領域に対してプール１４から領域を割り当て、ＳＶＯＬ管理テーブル１１７３を、割り当てに従って更新する（ステップＳ３１）。すなわち、ＳＶＯＬの該当する領域に割り当てたページのページＩＤを設定する。次いで、コントローラ１１は、キャッシュ領域１２１に格納されているＰＶＯＬのデータを割り当てられた領域（ページ）にコピーする（ステップＳ３２）。なお、キャッシュ領域１２１に格納されているデータが、スロットの一部のデータのみである場合には、ＰＶＯＬの対応するスロットのデータをキャッシュ領域１２１のＲ面に読み出し、スロットの足りない部分のデータをＲ面に読み出したデータで補充した後に、割り当てられたページにコピーする。
【００５８】
次いで、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２の当該領域に対応する退避状態に退避済みを設定し（ステップＳ３３）、ライトデータをメモリ１１１のキャッシュ領域１２１に格納し（ステップＳ３４）、ライト要求に対する応答をホスト２に対して送信する（ステップＳ３５）。
【００５９】
図１２は、実施形態に係るＰＶＯＬライト処理の第５のフローチャートである。
【００６０】
ポイントＣに処理を進めると、図１２に示すように、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２に基づいて、ライト対象のＰＶＯＬの領域に対応付けられている世代＃を特定し、ペア情報管理テーブル１１７１に基づいて、ひとつ前の世代のＳＶＯＬ、すなわち、当該世代＃−１のＳＶＯＬを特定し、ライト対象の領域に対応する当該ＳＶＯＬの領域に対してプール１４からページを割り当て、ＳＶＯＬ管理テーブル１１７３を割り当てに従って更新する（ステップＳ４１）。次いで、コントローラ１１は、ＰＶＯＬに格納されている対応する領域のデータ（旧データ：現在よりひとつ前の世代のスナップショットを構成するデータ）を割り当てられたページにコピーし（ステップＳ４２）、ＰＶＯＬ管理テーブル１１７２の対応する領域のＣＡＷ属性をＯＦＦに設定する（ステップＳ４３）。これにより、ひとつ前の世代のスナップショット構成要素を適切にひとつ前の世代のスナップショットイメージを管理するＳＶＯＬに退避することができる。
【００６１】
次いで、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２に基づいて、ライト対象のＰＶＯＬの領域に対応付けられている世代＃を特定し、ペア情報管理テーブル１１７１に基づいて、当該世代＃のＳＶＯＬを特定し、ライト対象の領域に対応する当該ＳＶＯＬの領域に対してプール１４からページを割り当て、ＳＶＯＬ管理テーブル１１７３を割り当てに従って更新する（ステップＳ４４）。次いで、コントローラ１１は、キャッシュ領域１２１に格納されているＰＶＯＬに書き込むべきデータ（現在の世代のスナップショット構成要素）を割り当てられたページにコピーし（ステップＳ４５）、ＰＶＯＬ管理テーブル１１７２の対応する領域の退避状態を退避済みに設定し、世代＃を削除する（ステップＳ４６）。これにより、現在の世代のスナップショット構成要素を適切に現在の世代のスナップショットイメージを管理するＳＶＯＬに退避することができる。また、ＰＶＯＬの一つの領域に対応するキャッシュ領域１２１のデータ要素についての退避処理であるので、比較的短時間で処理を終了することができる。
【００６２】
コントローラ１１は、ライトデータをメモリ１１１のキャッシュ領域１２１に格納し（ステップＳ４７）、ライト要求に対する応答をホスト２に対して送信する（ステップＳ４８）。この処理によると、ＰＶＯＬの一つの領域に対応するデータ要素についての退避処理を2回行なうことになるが、2回目はキャッシュ領域のデータを使用できるのでレスポンス時間の悪化を最小限に抑えることができる。
【００６３】
図１３は、実施形態に係るＰＶＯＬライト処理の第６のフローチャートである。
【００６４】
ポイントＰに処理を進めると、図１３に示すように、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２を参照し、ライト要求に対応するＰＶＯＬの領域におけるリストアが未実行であるか否かを判定し（ステップＳ５１）、リストアが実行されて完了している場合（ステップＳ５１でＮｏ）には、ポイントＲ（図８参照）に処理を進める。一方、リストアが未実行の場合（ステップＳ５１でＹｅｓ）には、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２を参照し、対応する領域に格納すべきキャッシュ領域１２１のデータ要素が未退避であるか否かを判定する（ステップＳ５２）。この結果、未退避でない場合（ステップＳ５２でＮｏ）には、ポイントＳ（図１４参照）に進む。一方、対応する領域が未退避である場合（ステップＳ５２でＹｅｓ）には、ＰＶＯＬ管理テーブル１１７２を参照し、当該スロットのＣＡＷ属性がＯＮであるか否かを判定する（ステップＳ５３）。
【００６５】
この結果、ＣＡＷ属性がＯＮではない場合（ステップＳ５３でＮｏ）には、コントローラ１１は、キャッシュ状態がホストダーティであるか、すなわち、キャッシュ領域１２１のＷ面にデータがあるか否かを判定し（ステップＳ５４）、ホストダーティでない場合には、ポイントＴ（図１５参照）に処理を進める（ステップＳ５４でＮｏ）一方、ホストダーティである場合（ステップＳ５４でＹｅｓ）には、ポイントＵ（図１６参照）に処理を進める。
【００６６】
一方、ステップＳ５３の結果、ＣＡＷ属性がＯＮの場合（ステップＳ５３でＹｅｓ）には、コントローラ１１は、当該領域の世代＃が最新世代＃より大きいか否かを判定し（ステップＳ５５）、当該領域の世代＃が最新世代＃より大きい場合（ステップＳ５５でＹｅｓ）には、処理をポイントＳ（図１４参照）に進める一方、当該領域の世代＃が最新世代＃以下の場合（ステップＳ５５でＮｏ）には、ポイントＷ（図１７参照）に処理を進める。
【００６７】
図１４は、実施形態に係るＰＶＯＬライト処理の第７のフローチャートである。
【００６８】
ポイントＳに処理を進めると、図１４に示すように、コントローラ１１は、対応する領域について、ＳＶＯＬからＰＶＯＬへのリストアコピーを実行し（ステップＳ６１）、ＰＶＯＬ管理テーブル１１７２の対応する領域のリストア状態をリストア済みに設定する（ステップＳ６２）。次いで、コントローラ１１は、ライトデータをメモリ１１１のキャッシュ領域１２１に格納し（ステップＳ６３）、ライト要求に対する応答をホスト２に対して送信する（ステップＳ６４）。
【００６９】
図１５は、実施形態に係るＰＶＯＬライト処理の第８のフローチャートである。
【００７０】
ポイントＴに処理を進めると、図１５に示すように、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２のライト要求に対応する領域のＣＡＷ属性をＯＮに設定し（ステップＳ７１）、当該領域の世代＃に、ペア情報管理テーブル１１７１の対応するＰＶＯＬの最新世代＃に１を加算した値を設定する（ステップＳ７２）。これにより、当該領域に格納すべきキャッシュ領域１２１のデータが、最新のスナップショット取得時よりも後に更新されたデータであることが把握できるようになる。次いで、コントローラ１１は、対応する領域について、ＳＶＯＬからＰＶＯＬへのリストアコピーを実行し（ステップＳ７３）、ＰＶＯＬ管理テーブル１１７２の対応する領域のリストア状態をリストア済みに設定する（ステップＳ７４）。次いで、コントローラ１１は、ライトデータをメモリ１１１のキャッシュ領域１２１に格納し（ステップＳ７５）、ライト要求に対する応答をホスト２に対して送信する（ステップＳ７６）。
【００７１】
図１６は、実施形態に係るＰＶＯＬライト処理の第９のフローチャートである。
【００７２】
ポイントＵに処理を進めると、図１６に示すように、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２に基づいて、ライト対象のＰＶＯＬの領域に対応付けられている世代＃を特定し、ペア情報管理テーブル１１７１に基づいて、当該世代＃のＳＶＯＬを特定し、ライト対象の領域に対応する当該ＳＶＯＬの領域に対してプール１４からページを割り当て、ＳＶＯＬ管理テーブル１１７３を割り当てに従って更新する（ステップＳ８１）。次いで、コントローラ１１は、キャッシュ領域１２１に格納されているＰＶＯＬのデータを割り当てられた領域にコピーする（ステップＳ８２）。なお、キャッシュ領域１２１に格納されているデータが、スロットの一部のデータのみである場合には、ＰＶＯＬの対応するスロットのデータをキャッシュ領域のＲ面に読み出し、スロットの足りない部分のデータをＲ面に読み出したデータで補充した後に、割り当てられたページにコピーする。次いで、ＰＶＯＬ管理テーブル１１７２の当該領域に対応する退避状態に退避済みを設定し（ステップＳ８３）、処理をポイントＳ（図１４参照）に進める。
【００７３】
図１７は、実施形態に係るＰＶＯＬライト処理の第１０のフローチャートである。
【００７４】
ポイントＷに処理を進めると、図１７に示すように、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２に基づいて、ライト対象のＰＶＯＬの領域に対応付けられている世代＃を特定し、ペア情報管理テーブル１１７１に基づいて、ひとつ前の世代のＳＶＯＬ、すなわち、当該世代＃−１のＳＶＯＬを特定し、ライト対象の領域に対応する当該ＳＶＯＬの領域に対してプール１４から領域を割り当て、ＳＶＯＬ管理テーブル１１７３を割り当てに従って更新する（ステップＳ９１）。次いで、コントローラ１１は、ＰＶＯＬに格納されている対応する領域のデータ（旧データ：現在よりひとつ前の世代のスナップショットのデータ）を割り当てられた領域にコピーし（ステップＳ９２）、ＰＶＯＬ管理テーブル１１７２の対応する領域のＣＡＷ属性をＯＦＦに設定し、世代＃を削除する（ステップＳ９３）。これにより、ひとつ前の世代のスナップショット構成要素を適切にひとつ前の世代のスナップショットイメージを管理するＳＶＯＬに退避することができる。
【００７５】
次いで、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２に基づいて、ライト対象のＰＶＯＬの領域に対応付けられている世代＃を特定し、ペア情報管理テーブル１１７１に基づいて、当該世代＃のＳＶＯＬを特定し、ライト対象の領域に対応する当該ＳＶＯＬの領域に対してプール１４から領域を割り当て、ＳＶＯＬ管理テーブル１１７３を割り当てに従って更新する（ステップＳ９４）。次いで、コントローラ１１は、キャッシュ領域１２１に格納されているＰＶＯＬに対応する領域のデータ（現在の世代のスナップショットのデータ）を割り当てられた領域にコピーし（ステップＳ９５）、ＰＶＯＬ管理テーブル１１７２の対応する領域の退避状態を退避済みに設定し（ステップＳ９６）、処理をポイントＳ（図１４参照）に進める。これにより、現在の世代のスナップショット構成要素を適切に現在の世代のスナップショットイメージを管理するＳＶＯＬに退避することができる。また、ＰＶＯＬの一つの領域に対応するキャッシュ領域１２１のデータ要素についての退避処理であるので、比較的短時間で処理を終了することができる。
【００７６】
図１８は、実施形態に係るＰＶＯＬリード処理の第１のフローチャートである。
【００７７】
ＰＶＯＬリード処理においては、コントローラ１１は、ホスト２からリード要求を受領すると（ステップＳ１１１）、ペア情報管理テーブル１１７１におけるリード要求のリード対象のＰＶＯＬのステータスを参照することにより、リード要求に対応するＰＶＯＬがリストア中であるか否かを判定する（ステップＳ１１２）。この結果、リストア中でない場合（ステップＳ１１２でＮｏ）には、コントローラ１１は、対応するＰＶＯＬの領域（又は、当該領域のデータを格納するキャッシュ領域１２１）からデータを読み出す通常リード処理を実行する（ステップＳ１１３）。一方、リストア中である場合（ステップＳ１１２でＹｅｓ）には、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２を参照し、リード要求に対応するＰＶＯＬのスロットにおけるリストアが未実行であるか否かを判定し（ステップＳ１１４）、リストアが完了している場合（ステップＳ１１４でＹｅｓ）には、通常リード処理を実行する（ステップＳ１１５）。
【００７８】
一方、リストアが未実行である場合（ステップＳ１１４でＮｏ）には、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２を参照し、対応するスロットが未退避であるか否か、すなわち、当該スロットに書き込むべきキャッシュ領域１２１のデータ要素が未退避であるか否かを判定する（ステップＳ１１６）。この結果、未退避でない場合（ステップＳ１１６でＮｏ）には、処理をポイントＤ（図１９参照）に進める。一方、未退避である場合（ステップＳ１１６でＹｅｓ）には、ＰＶＯＬ管理テーブル１１７２を参照し、当該スロットのＣＡＷ属性がＯＮであるか否かを判定する（ステップＳ１１７）。
【００７９】
この結果、ＣＡＷ属性がＯＮではない場合（ステップＳ１１７でＮｏ）には、コントローラ１１は、キャッシュ状態がホストダーティであるか、すなわち、キャッシュ領域１２１のＷ面にデータがあるか否かを判定し（ステップＳ１１８）、ホストダーティでない場合には、ポイントＥ（図２０参照）に処理を進める（ステップＳ１１８でＮｏ）一方、ホストダーティである場合（ステップＳ１１８でＹｅｓ）には、ポイントＦ（図２１参照）に処理を進める。
【００８０】
一方、ステップＳ１１７の結果、ＣＡＷ属性がＯＮの場合（ステップＳ１１７でＹｅｓ）には、当該スロットの世代＃が最新世代＃より大きいか否かを判定し（ステップＳ１１９）、当該スロットの世代＃が最新世代＃より大きい場合（ステップＳ１１９でＹｅｓ）には、処理をポイントＤ（図１９参照）に進める一方、当該領域の世代＃が最新世代＃以下の場合（ステップＳ１１９でＮｏ）には、ポイントＧ（図２２参照）に処理を進める。
【００８１】
図１９は、実施形態に係るＰＶＯＬリード処理の第２のフローチャートである。
【００８２】
ポイントＤに処理を進めると、図１９に示すように、コントローラ１１は、対応するスロットについて、ＳＶＯＬからＰＶＯＬへのリストアコピーを実行し（ステップＳ１２１）、ＰＶＯＬ管理テーブル１１７２の対応するスロットのリストア状態をリストア済みに設定する（ステップＳ１２２）。次いで、コントローラ１１は、ＰＶＯＬの対応する領域を読み出してホスト２へ送信する（ステップＳ１２３）。
【００８３】
図２０は、実施形態に係るＰＶＯＬリード処理の第３のフローチャートである。
【００８４】
ポイントＥに処理を進めると、図２０に示すように、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２のリード要求に対応する領域を含むスロットのＣＡＷ属性をＯＮに設定し（ステップＳ１３１）、当該領域の世代＃に、ペア情報管理テーブル１１７１の対応するＰＶＯＬの最新世代＃に１を加算した値を設定する（ステップＳ１３２）。次いで、コントローラ１１は、対応する領域について、ＳＶＯＬからＰＶＯＬへのリストアコピーを実行し（ステップＳ１３３）、ＰＶＯＬ管理テーブル１１７２の対応する領域のリストア状態をリストア済みに設定する（ステップＳ１３４）。次いで、コントローラ１１は、ＰＶＯＬの対応する領域を読み出してホスト２へ送信する（ステップＳ１３５）。
【００８５】
図２１は、実施形態に係るＰＶＯＬリード処理の第４のフローチャートである。
【００８６】
ポイントＦに処理を進めると、図２１に示すように、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２に基づいて、リード対象のＰＶＯＬの領域を含むスロットに対応付けられている世代＃を特定し、ペア情報管理テーブル１１７１に基づいて、当該世代＃のＳＶＯＬを特定し、リード対象の領域に対応する当該ＳＶＯＬの領域に対してプール１４からページを割り当て、ＳＶＯＬ管理テーブル１１７３を割り当てに従って更新する（ステップＳ１４１）。次いで、コントローラ１１は、キャッシュ領域１２１に格納されているＰＶＯＬに書き込むべきデータを割り当てられたページにコピーする（ステップＳ１４２）。なお、キャッシュ領域１２１に格納されているデータが、スロットの一部のデータのみである場合には、ＰＶＯＬの対応するスロットのデータをキャッシュ領域のＲ面に読み出し、スロットの足りない部分のデータをＲ面に読み出したデータで補充した後に、割り当てられたページにコピーする。次いで、ＰＶＯＬ管理テーブル１１７２の当該スロットに対応する退避状態に退避済みを設定し（ステップＳ１４３）、処理をポイントＤ（図１９参照）に進める。
【００８７】
図２２は、実施形態に係るＰＶＯＬリード処理の第５のフローチャートである。
【００８８】
ポイントＧに処理を進めると、図２２に示すように、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２に基づいて、リード対象のＰＶＯＬの領域を含むスロットに対応付けられている世代＃を特定し、ペア情報管理テーブル１１７１に基づいて、ひとつ前の世代のＳＶＯＬ、すなわち、当該世代＃−１のＳＶＯＬを特定し、リード対象の領域に対応する当該ＳＶＯＬの領域に対してプール１４からページを割り当て、ページ管理テーブル１１８２を割り当てに従って更新する（ステップＳ１５１）。次いで、コントローラ１１は、ＰＶＯＬに格納されている対応する領域のデータ（旧データ：現在よりひとつ前の世代のスナップショットを構成するデータ）を割り当てられた領域にコピーし（ステップＳ１５２）、ＰＶＯＬ管理テーブル１１７２の対応する領域のＣＡＷ属性をＯＦＦに設定削除する（ステップＳ１５２）。これにより、ひとつ前の世代のスナップショット構成要素を適切にひとつ前の世代のスナップショットイメージを管理するＳＶＯＬに退避することができる。また、ＰＶＯＬの一つの領域のデータ要素についての退避処理であるので、比較的短時間で処理を終了することができる。
【００８９】
次いで、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２に基づいて、リード対象のＰＶＯＬの領域に対応付けられている世代＃を特定し、ペア情報管理テーブル１１７１に基づいて、当該世代＃のＳＶＯＬを特定し、リード対象の領域に対応する当該ＳＶＯＬの領域に対してプール１４からページを割り当て、ＳＶＯＬ管理テーブル１１７３を割り当てに従って更新する（ステップＳ１５４）。次いで、コントローラ１１は、キャッシュ領域１２１に格納されているＰＶＯＬに対応する領域のデータ（現在の世代のスナップショット構成要素）を割り当てられたページにコピーし（ステップＳ１５５）、ＰＶＯＬ管理テーブル１１７２の対応する領域の退避状態を退避済みに設定し（ステップＳ１５６）、処理をポイントＤ（図１９参照）に進める。これにより、現在の世代のスナップショット構成要素を適切に現在の世代のスナップショットイメージを管理するＳＶＯＬに退避することができる。
なお、キャッシュ領域１２１に格納されているデータが、スロットの一部のデータのみである場合には、ＰＶＯＬの対応するスロットのデータをキャッシュ領域１２１のＲ面に読み出し、スロットの足りない部分のデータをＲ面に読み出したデータで補充した後に、割り当てられたページにコピーする。
【００９０】
図２３は、実施形態に係るストレージ装置におけるＳＶＯＬライト処理の概要を説明する図である。なお、以下の説明では、ＰＶＯＬ内のスロット（領域）を「ＰＶＯＬスロット」と言い、ＳＶＯＬ内のスロット（領域）を「ＳＶＯＬスロット」と言う。
【００９１】
コントローラ１１は、ＳＶＯＬスロットのアドレスを指定したライト（ＷＲ）要求（ライト要求）をホスト２から受領し（図中（１））、そのライト先ＳＶＯＬスロットに対応したＰＶＯＬスロットからデータが未退避であれば、ライト先ＳＶＯＬにプール１４からページを割り当て、そのライト先スロットに対応したＳＶＯＬ更新属性をＯＮに設定する（図中（２））。ここでは、ＳＶＯＬスロットを指定したライト要求を受領した（後に、ＳＶＯＬの更新を行う）場合に、ＳＶＯＬ更新属性にＯＮが設定されるようにしている。
【００９２】
なお、ＳＶＯＬ更新属性は、例えば、図に示すように、ライト要求に従うデータ（ライトデータ）の容量がスロットの容量よりも小さい場合にＯＮが設定されてもよい。ライトデータは、キャッシュサブ領域（キャッシュ領域１２１における確保された領域）に格納されるが、ライトデータの容量がスロットの容量よりも小さい場合には、ＳＶＯＬ更新属性「ＯＮ」は、ライト先ＳＶＯＬスロットに対応したキャッシュサブ領域（Ｗ面）に、ライトデータで満たされた領域（以下、ライト領域）の他に、ライトデータで満たされない領域（以下、非対象領域）が生じることを意味する。この場合、ライト先ＳＶＯＬスロットに対応するＰＶＯＬスロット全域のデータ（旧データ）の一部分（以下、旧データ部分）が、ライトデータが格納されているキャッシュサブ領域（ライト先ＳＶＯＬに対応したキャッシュサブ領域（Ｗ面））の非対象領域に格納される。この結果、ライト先ＳＶＯＬに対応したキャッシュサブ領域（Ｗ面）は、旧データ部分とライトデータによって満たされることになる。ただし、そのライト先ＳＶＯＬスロットからデータをページに退避する前に、複数のライト要求によって、そのライト先ＳＶＯＬスロットの全サブブロックが更新された場合には（すなわち、ライト先ＳＶＯＬスロットに対応した更新位置ＢＭを構成する全てのビットが「１」であれば）、キャッシュサブ領域（Ｗ面）に非対象領域は無い。ページとは、プール１４において割り当てを行う単位領域をいう。ページのサイズは、例えば、スロットと同じサイズでよい。
【００９３】
コントローラ１１は、ＳＶＯＬ１５を指定した上記ライト要求に従いライトデータをホスト２から受け、キャッシュ領域１２１に、ライト先ＳＶＯＬに（割り当てられたページに）対応したキャッシュサブ領域（以下、「ＳＶＯＬ確保領域」と言うことがある）を確保し、ＳＶＯＬ確保領域（Ｗ面）（ライト先ＳＶＯＬスロットにライトされるデータが格納される、キャッシュ領域における領域）にライトデータを書き込む。次いで、コントローラ１１は、ライト先ＳＶＯＬスロット内におけるライト先位置（ライト要求で指定されたアドレスに従うサブブロックの位置）を特定し、そのライト先位置を記憶する（図中（３））。具体的には、コントローラ１１は、ライト先ＳＶＯＬに対応する更新位置ＢＭ（図６参照）における、ライト先位置のサブブロックに対応したビットが未更新（例えば０）であれば、そのビットを更新済み（例えば１）に更新する。次いで、コントローラ１１は、ホスト２にライト要求に対するレスポンスを送信する（図中（４））。
【００９４】
これとは非同期で（バックエンドで）、コントローラ１１は、ライト先ＳＶＯＬスロットについてのＳＶＯＬ更新属性を検出する（図中（５））。コントローラ１１は、ＳＶＯＬ更新属性がＯＮの場合には、ＰＶＯＬ確保領域（Ｒ面）（ライト先ＳＶＯＬスロットに対応したＰＶＯＬスロット（以下、対応ＰＶＯＬスロット）から読み出されたデータを記憶するための、キャッシュ領域内の領域）についてキャッシュヒット（対応ＰＶＯＬスロット内のデータ（旧データ）がＰＶＯＬ確保領域（Ｒ面）に記憶されている）か否かを判定する。コントローラ１１は、キャッシュミスの場合には、ステージング、すなわち、対応ＰＶＯＬスロット領域から旧データをＰＶＯＬ確保領域（Ｒ面）に読み出す（図中（６））。そして、コントローラ１１は、ＳＶＯＬ確保領域（Ｗ面）に、ＰＶＯＬ確保領域（Ｒ面）に記憶されている旧データのうち、非対象領域に対応する部分（旧データ部分）をコピーする（図中（７））。ここで、ＳＶＯＬ確保領域（Ｗ面）における「非対象領域」は、そのＳＶＯＬ確保領域（Ｗ面）に対応した更新位置ＢＭ（図６参照）において未更新のサブブロック（例えばビット０）に対応した領域である。つまり、ＳＶＯＬスロットにおける未更新領域にデータが書き込まれる都度に、ＳＶＯＬ更新領域（Ｗ面）にダーティデータが増え、ＳＶＯＬ更新領域（Ｗ面）から非対象領域が減る。次いで、コントローラ１１は、ライト先ＳＶＯＬスロットに対応する退避状態（ＳＶＯＬ管理テーブル１１７３における退避状態）として「退避済み」を設定し、ＳＶＯＬ更新属性を「ＯＦＦ」にする（図中（８））。
【００９５】
その後、コントローラ１１は、ＳＶＯＬ確保領域（Ｗ面）の全データ（ライトデータと旧データ部分とのセット）を、ライト先ＳＶＯＬスロットに割り当てられたページに書き込む。
【００９６】
図２３に示した流れによれば、ライトデータと旧データ部分がキャッシュ領域でマージされ、ライトデータと旧データ部分のセットが、ページに書き込まれる。これにより、対応ＰＶＯＬスロット内のデータをライト先ＳＶＯＬスロットに割り当てられたページに退避しその後にライトデータをそのページに書き込むよりも、ページに対する書き込みの回数を減らすことができる。
【００９７】
また、図２３の（６）及び（７）に示した流れによれば、ＳＶＯＬ確保領域（Ｗ面）に、まず、ライトデータが書き込まれ、ライト要求のレスポンスが返され、その後で、ＳＶＯＬ確保領域（Ｗ面）における非対象領域に、ＰＶＯＬ確保領域（Ｒ面）から旧データ部分がコピーされる。ライト先ＳＶＯＬスロットに割り当てられたページに書き込まれるデータは、ホストから受けたデータであってもＰＶＯＬから読み出されたデータであってもＳＶＯＬ確保領域（Ｗ面）に書き込まれるが、図２３の（６）及び（７）に示した処理により、ライトデータが旧データで更新されてしまうことを回避することができる。
【００９８】
なお、図２３の（６）及び（７）の処理は、ライトデータの容量がスロットの容量より小さい場合の処理であるが、ライトデータの容量とスロットの容量が同じであれば、それらの処理は、不要である。
【００９９】
図２４は、実施形態に係るＳＶＯＬライト処理の第１のフローチャートである。
【０１００】
ＳＶＯＬライト処理においては、コントローラ１１は、ホスト２からＳＶＯＬスロットを指定したライト要求を受領すると（ステップＳ２１１）、ペア情報管理テーブル１１７１におけるライト要求に従うライト先ＳＶＯＬに対応付けられたステータスを参照することにより、そのライト先ＳＶＯＬがリストア中であるか否かを判定する（ステップＳ２１２）。この結果、リストア中である場合（ステップＳ２１２でＹｅｓ）には、コントローラ１１は、ライトを実行しない（ステップＳ２１３）。
【０１０１】
一方、リストア中でない場合（ステップＳ２１２でＮｏ）には、コントローラ１１は、ＳＶＯＬ管理テーブル１１７３を参照し、ライト先ＳＶＯＬスロット（領域）がＰＶＯＬ３０１を参照している（すなわち、参照元のＰＶＯＬ内のデータが未退避）か否かを判定する（ステップＳ２１４）。この結果、ＰＶＯＬ３０１を参照していない（退避済み）場合（ステップＳ２１４でＮｏ）には、コントローラ１１はポイントＨ（図２５参照）に処理を進める。
【０１０２】
一方、ＰＶＯＬ３０１を参照している場合（ステップＳ２１４でＹｅｓ）には、コントローラ１１は、ライト先ＳＶＯＬスロットに対してプール１４からページを割り当て、ＳＶＯＬ管理テーブル１１７３を割り当てに従って更新する（ステップＳ２１５）。次いで、コントローラ１１は、ＳＶＯＬ管理テーブル１１７３のライト先ＳＶＯＬスロットについて、ＳＶＯＬ更新属性をＯＮに設定する（ステップＳ２１６）。次いで、コントローラ１１は、ライトデータをＳＶＯＬ確保領域（Ｗ面）に格納し、ライト先ＳＶＯＬ内におけるライト先位置に従いＳＶＯＬ管理テーブル１１７３を更新し（ステップＳ２１７）、ホスト２に応答を送信する（ステップＳ２１８）。上記処理により、ライトデータをキャッシュ領域のＳＶＯＬ確保領域（Ｗ面)に受領した後ホストに応答を返すので、ＳＶＯＬの応答性能を向上することができる。
【０１０３】
図２５は、実施形態に係るＳＶＯＬライト処理の第２のフローチャートである。
【０１０４】
ポイントＨに処理を進めると、図２５に示すように、コントローラ１１は、ＳＶＯＬ管理テーブル１１７３を参照し、ライト先ＳＶＯＬスロットに対応づけられたプール１４内のページが、他のＳＶＯＬスロットにも対応づけられていない（共有でない）か否か、すなわち、ライト先ＳＶＯＬスロットに対応づけられたページが自ページであるか否かを判定する（ステップＳ２２１）。自ページの場合（ステップＳ２２１でＹｅｓ）には、ライト先ＳＶＯＬスロットが参照する自ページのデータについて退避を行わずに更新できるので、コントローラ１１は、ライトデータをその自ページに書き込み（ステップＳ２２２）、ホスト２に応答を送信する（ステップＳ２２６）。ここで、ライトデータがライト先ＳＶＯＬスロットの一部である場合は、そのデータが格納される領域について（ライト領域）のみデータの更新が行われる。
【０１０５】
一方、該当ライト先ＳＶＯＬスロットに対応づけられたページが自ページでない場合（ステップＳ２２１でＮｏ）には、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２に基づいて、ライト先ＳＶＯＬスロットに対してプール１４からページを割り当て、ＳＶＯＬ管理テーブル１１７３を割り当てに従って更新し（ステップＳ２２３）、対応するライト先ＳＶＯＬスロットの更新属性にＯＮを設定する（ステップＳ２２４）。次いで、コントローラ１１は、ライトデータをＳＶＯＬ確保領域（Ｗ面）に格納し、ＳＶＯＬ確保領域（Ｗ面）内のライト先位置に従いＳＶＯＬ管理テーブル１１７３を更新し（ステップＳ２２５）、ホスト２に応答を送信する（ステップＳ２２６）。上記処理により、ライトデータをキャッシュ領域のＳＶＯＬ確保領域(Ｗ面)に受領した後、ホストに応答を返すＳＶＯＬの応答性能を向上することができる。
【０１０６】
図２６は、実施形態に係るＳＶＯＬリード処理のフローチャートである。
【０１０７】
ＳＶＯＬリード処理においては、コントローラ１１は、ホスト２からＳＶＯＬの領域とそのＳＶＯＬの世代＃を指定したリード要求を受領すると（ステップＳ２３１）、ＳＶＯＬ管理テーブル１１７３を参照することにより、リード要求に対応するＳＶＯＬ１５の領域（リード先ＳＶＯＬスロット）のＳＶＯＬ更新属性がＯＮであるか否かを判定する（ステップＳ２３２）。この結果、ＳＶＯＬ更新属性がＯＮである場合（ステップＳ２３２でＹｅｓ）には、図２８のＳＶＯＬ退避コピー処理へ進む（ステップＳ２３３）。
【０１０８】
一方、ＳＶＯＬ更新属性がＯＮでない場合(ステップＳ２３２でＮＯ)には、コントローラ１１は、ＳＶＯＬ管理テーブル１１７３を参照し、リード先ＳＶＯＬスロットがＰＶＯＬ３０１を参照している（未退避）か否かを判定する（ステップＳ２３４）。この結果、ＰＶＯＬ３０１を参照していない（退避済み）場合（ステップＳ２３４でＮｏ）には、リード先ＳＶＯＬスロットに対応付けられているプール１４内のページからデータを読み出し、ホスト２にデータを送信する（ステップＳ２３５）。
【０１０９】
一方、ＰＶＯＬ３０１を参照している（未退避）場合(ステップＳ２３４でＹｅｓ)には、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２を参照し、リード先ＳＶＯＬスロットに対応するＰＶＯＬスロットのＣＡＷ属性がＯＮであるか否かを判定する（ステップＳ２３６）。この結果、ＣＡＷ属性がＯＮではない場合（ステップＳ２３６でＮｏ）には、コントローラ１１は、リード先ＳＶＯＬスロットに対応するＰＶＯＬスロットからデータをリードし、ホスト２にデータを送信する（ステップＳ２３７）。
【０１１０】
一方、ＣＡＷ属性がＯＮである場合（ステップＳ２３６でＹｅｓ）には、コントローラ１１は、ペア管理テーブル１１７１を参照し、リード先ＳＶＯＬスロットの世代＃が最新世代＃より大きいか否かを判定し（ステップＳ２３８）、リード先ＳＶＯＬスロットの世代＃が最新世代＃以下の場合（ステップＳ２３８でＮｏ）には、リード先ＳＶＯＬスロットに対応するＰＶＯＬスロットのＰＶＯＬ確保領域（Ｒ面）に格納されているデータがＳＶＯＬ１５のスナップショットの取得後のデータ要素であるので、ＰＶＯＬ確保領域（Ｒ面）に格納されているデータをリードし、ホスト２にデータを送信する（ステップＳ２３９）。
【０１１１】
一方、リード先ＳＶＯＬスロットの世代＃が最新世代＃より大きい場合（ステップＳ２３８でＹｅｓ）には、リード先ＳＶＯＬスロットに対応するＰＶＯＬスロットのＰＶＯＬ確保領域（Ｒ面）格納されているデータがＳＶＯＬのスナップショットの取得以前のデータ要素であるので、コントローラ１１は、リード先ＳＶＯＬスロットに対してプール１４からページを割り当て、ＳＶＯＬ管理テーブル１１７３を割り当てに従って更新する（ステップＳ２４０）。次いで、コントローラ１１は、ＰＶＯＬ３０１に格納されている対応するスロットのデータ（現在よりひとつ前の世代のスナップショットを構成するデータ）をリード先ＳＶＯＬスロットに対応づけられたページにコピーし（ステップＳ２４１）、ＰＶＯＬ管理テーブル１１７２の対応する領域のＣＡＷ属性をＯＦＦに設定し（ステップＳ２４２）、リード先ＳＶＯＬスロットに対応付けられているページからデータをリードし、ホスト２にデータを送信する（ステップＳ２４３）。
【０１１２】
図２７は、実施形態に係るバックエンド処理のフローチャートである。
【０１１３】
このバックエンド処理は、例えば、任意のタイミング、例えば、所定の時間毎や、アクセス頻度が低い時間において実行される。バックエンド処理は、1つの処理に対して、コントローラ１１が、ＰＶＯＬ管理テーブル１１７２又はＳＶＯＬ管理テーブル１１７３に基づき、対象となるＰＶＯＬスロット又はＳＶＯＬスロット（以下、対象スロットという）を選出して行うものとする。１つの処理が終了した後、コントローラ１１は、次の対象スロットを選出し処理を進める。対象スロットの選出は、ＰＶＯＬ管理テーブル１１７２又はＳＶＯＬ管理テーブル１１７３における番号順に行ってもよい。
【０１１４】
コントローラ１１は、ＰＶＯＬ管理テーブル１１７２（又はＳＶＯＬ管理テーブル１１７３）を参照し、対象スロットのＣＡＷ属性又はＳＶＯＬ更新属性のいずれかの属性がＯＮであるか否かの判定を行う（ステップＳ２５１）。判定の結果、対象領域のＣＡＷ属性及びＳＶＯＬ更新属性のいずれの属性もＯＮでない場合（ステップＳ２５１でＮｏ）には、処理を終了する。
【０１１５】
一方、対象領域のＣＡＷ属性又はＳＶＯＬ更新属性のずれかの属性がＯＮの場合（ステップＳ２５１でＹｅｓ）には、コントローラ１１は、対象スロットへのライトがシーケンシャルか否かを判定する（ステップＳ２５２）。シーケンシャルか否かの判定は、ＰＶＯＬ管理テーブル１１７２（又はＳＶＯＬ管理テーブル１１７３）に基づいて、対象スロットを含む、領域ＩＤが続き番の所定個数（例えば１０個）のスロットのＣＡＷ属性（又はＳＶＯＬ更新属性）がすべてＯＮか否かで行われてもよいし、対象スロットへのライトがシーケンシャルであるか否かの情報（例えば、ライト要求に含まれメモリに確保された情報）を確認することで行われてもよい。判定の結果、シーケンシャルライトであった場合（Ｓ２５２でＹｅｓ)には、コントローラ１１は、対象スロットがパリティ列の最終スロットか否かを判定し（ステップＳ２６０）、対象スロットがパリティ列の最終スロットでない場合（ステップＳ２６０でＮｏ）には、処理を終了する。
【０１１６】
一方、対象スロットがパリティ列の最終スロットである場合（ステップＳ２６０でＹｅｓ）、又は、ステップＳ２５２においてシーケンシャルライトでないと判定された場合（ステップＳ２５２でＮｏ）には、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２（又はＳＶＯＬ管理テーブル１１７３）を参照し、対象スロットには隣接するスロットがあるか否かを判定する（ステップＳ２５２）。ここで、対象スロットに隣接スロットがあるとは、対象スロットを含む、当該対象スロットと領域ＩＤが続き番でありかつ当該対象スロットと同じくＣＡＷ属性ＯＮ（又はＳＶＯＬ更新属性ＯＮ）である複数のスロット（スロット群）が存在することをいう。判定の結果、隣接するスロットがある場合には、そのスロット群のデータをまとめて処理対象とする（ステップＳ２６１）。これらの処理により、スロット群のデータをまとめて処理対象することができるので、処理の回数を少なくディスクに対する負荷を軽減できる。加えて、パリティ列のデータをまとめて処理対象とした場合には、リードモディファイライトを行う必要なく（すなわち、旧パリティデータが必要なく、パリティ列のデータのみで）新たなパリティデータを生成することができるため、処理時間を比較的短くすることができる。
【０１１７】
一方、隣接するスロットがない場合（ステップＳ２５２でＮｏ）には、コントローラ１１は、ＳＶＯＬ管理テーブル１１７３を参照し、対象スロットの更新属性がＯＮか否かを判定する（ステップＳ２５５）。判定の結果、対象スロットの更新属性がＯＮの場合（ステップＳ２５４でＹｅｓ）は、対象スロットがＳＶＯＬスロットであり、かつそのＳＶＯＬ更新属性がＯＮであるので、ＳＶＯＬ退避コピー処理を行う（図２８）。
【０１１８】
一方、ＳＶＯＬ更新属性がＯＮではない場合（ステップＳ２５４でＮｏ）は、対象スロットがＰＶＯＬスロットであり、かつそのＣＡＷ属性がＯＮであるので、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２に基づいて、対象ＰＶＯＬスロットに対応付けられている世代＃を特定し、ペア情報管理テーブル１１７１に基づいて、当該世代＃−１のＳＶＯＬを特定し、特定されたＳＶＯＬ内の対象スロットに対してプール１４からページを割り当て、ページ管理テーブル１１８２を割り当てに従って更新する（ステップＳ２５５）。次いで、コントローラ１１は、対象ＰＶＯＬスロット内のデータをステップＳ２５５で割り当てたページにコピーする（ステップＳ２５６）。
【０１１９】
次いで、コントローラ１１は、対象ＰＶＯＬスロットの世代＃が最新世代＃＋１であるか否かを判定し（ステップＳ２５７）、対象ＰＶＯＬスロットの世代＃が最新世代＃＋１である場合（ステップＳ２５７でＹｅｓ）には、ＰＶＯＬ管理テーブル１１７２の対象ＰＶＯＬスロットに対応する退避状態に、退避済みを設定する（ステップＳ２５８）一方対象ＰＶＯＬスロットの世代＃が最新世代＃＋１でない場合（ステップＳ２５８でＮｏ）には、何もしない。次いで、コントローラ１１は、ＰＶＯＬ管理テーブル１１７２の対象ＰＶＯＬスロットに対応するＣＡＷ属性をＯＦＦに設定する（ステップＳ２５９）。上記処理により、ＰＶＯＬ３０１のＣＡＷ属性がＯＮとなっているＰＶＯＬスロットのデータ、又はＳＶＯＬ１５のＳＶＯＬ更新属性がＯＮになっているＳＶＯＬスロットのデータについて、ホスト２に対するライト要求（又はリード要求）と非同期で、ＳＶＯＬ１５へと退避することができる。また、ＰＶＯＬスロットのデータをＳＶＯＬ１５へと退避することができるので、ＰＶＯＬライト処理及びＳＶＯＬライト処理において、ライトデータをキャッシュ領域１２１に格納する前に、ＰＶＯＬ３０１に格納されたデータをＳＶＯＬ１５へと退避しなければならない状況、例えば、ステップＳ７のＮｏに該当するような状況を低減することができ、ライトレスポンスを向上することができる。
【０１２０】
図２８は、実施形態に係るＳＶＯＬ退避コピー処理のフローチャートである。
【０１２１】
ＳＶＯＬ退避コピー処理においては、コントローラ１１は、対象ＳＶＯＬスロットが参照するＰＶＯＬスロットのデータ（参照元データ）をＰＶＯＬ確保領域（Ｒ面）にステージングさせる（ステップＳ２６１）。次いで、コントローラ１１は、ＳＶＯＬ管理テーブル１１７３の更新位置ＢＭに基づき、ＳＶＯＬ確保領域(Ｗ面)における更新位置を特定し、特定結果に基づいて、ＳＶＯＬ確保領域（Ｗ面）の参照元データよりＳＶＯＬ確保領域(Ｗ面)における非対象領域に対応するデータ（旧データ）取得する。次いで、コントローラ１１は、キャッシュ領域１２１内（具体的にはＳＶＯＬ確保領域(Ｗ面)）において、取得した旧データとライトデータをマージして、マージされたデータセットをプール１４内のページにコピーする（ステップＳ２６２）。次いで、コントローラ１１は、対象領域の退避状態を「退避済み」にするようＳＶＯＬ管理テーブル１１７３を更新する。次いで、コントローラ１１は、対象ＰＶＯＬスロットのスロットのＣＡＷ属性をＯＦＦにするようＰＶＯＬ管理テーブル１１７２を更新する。上記処理により、対応ＰＶＯＬスロット内のデータをライト先ＳＶＯＬスロットに割り当てられたページに退避しその後にライトデータをそのページに書き込むよりも、ページに対する書き込みの回数を減らすことができる。
【０１２２】
図２９は、実施形態に係るスナップショット取得処理のフローチャートである。
【０１２３】
スナップショット取得処理は、例えば、予め設定された時刻や、ホスト２等からスナップショット取得要求があった場合に実行される。
【０１２４】
コントローラ１１は、ペア情報管理テーブル１１７１において、スナップショット取得対象のＰＶＯＬの次のスナップショットの管理用のＳＶＯＬに対応するステータスをＳｎａｐｓｈｏｔ保持に設定し（ステップＳ２７１）、対応する最新世代＃をカウントアップし（ステップＳ２７２）、当該ＳＶＯＬの世代＃に最新世代＃を設定する（ステップＳ２７３）。このように、本実施形態においては、次のスナップショットを取得処理においては、ＰＶＯＬの領域のデータを退避等する処理を行う必要がなく、短時間でＰＶＯＬに対するアクセスを行うことができる。
【０１２５】
図３０は、実施形態に係るスナップショット削除処理のフローチャートである。
【０１２６】
スナップショット削除処理は、例えば、ホスト２等からスナップショット削除要求があった場合に実行される。
【０１２７】
コントローラ１１は、ＰＶＯＬ管理テーブル１１７２から、スナップショット削除対象となるＳＶＯＬに対応するＰＶＯＬについてのＣＡＷ属性がＯＮの領域を検出し（ステップＳ２８１）、当該ＣＡＷ属性がＯＮの領域に対して、必要に応じて退避コピーを実行する（ステップＳ２８２）。具体的には、削除するＳＶＯＬが記憶している領域であって、他のスナップショットにより参照されている領域のデータについては、参照しているＳＶＯＬの領域に退避コピーをする。
【０１２８】
次いで、コントローラ１１はＰＶＯＬの退避した領域について、ＰＶＯＬ管理テーブル１１７２のＣＡＷ属性をＯＦＦに設定し（ステップＳ２８３）、ペア情報管理テーブル１１７１の対応するＳＶＯＬのステータスをＳｎａｐｓｈｏｔ未取得に設定する（ステップＳ２８４）。
【０１２９】
以上、実施形態に基づいて説明したが、本発明は上述した実施の形態に限られず、他の様々な態様に適用可能である。
【０１３０】
例えば、スロットへのデータのライト及びリードのいずれのときでも、キャッシュサブ領域（Ｗ面）及び（Ｒ面）の両方が確保されても良いし、スロットへのデータのライトのときは、キャッシュサブ領域（Ｗ面）のみが確保され、スロットへのデータのリードのときは、キャッシュサブ領域（Ｒ面）のみが確保されても良い。また、キャッシュサブ領域は、予め、Ｗ面とＲ面に区別されていて、キャッシュサブ領域（Ｗ面）は、キャッシュ領域におけるＷ面から確保され、キャッシュサブ領域（Ｒ面）は、キャッシュ領域におけるＲ面から確保されても良い。
【０１３１】
また、例えば、実施形態では、対応ＰＶＯＬスロットの全域から旧データがＰＶＯＬ確保領域（Ｒ面）に読み出されるが、対応ＰＶＯＬスロットにおける、非対象領域に対応したスロット部分のみから、データ（旧データ部分）がＰＶＯＬ確保領域（Ｒ面）に読み出されても良い。
【符号の説明】
【０１３２】
１…ストレージ装置、１１…コントローラ、１１１…メモリ、１１２…ＣＰＵ、１２１…キャッシュ領域、１２…ディスク装置、１４…プール
【図１】
0005829753.tif 000002
【図２】
0005829753.tif 000003
【図３】
0005829753.tif 000004
【図４】
0005829753.tif 000005
【図５】
0005829753.tif 000006
【図６】
0005829753.tif 000007
【図７】
0005829753.tif 000008
【図８】
0005829753.tif 000009
【図９】
0005829753.tif 000010
【図１０】
0005829753.tif 000011
【図１１】
0005829753.tif 000012
【図１２】
0005829753.tif 000013
【図１３】
0005829753.tif 000014
【図１４】
0005829753.tif 000015
【図１５】
0005829753.tif 000016
【図１６】
0005829753.tif 000017
【図１７】
0005829753.tif 000018
【図１８】
0005829753.tif 000019
【図１９】
0005829753.tif 000020
【図２０】
0005829753.tif 000021
【図２１】
0005829753.tif 000022
【図２２】
0005829753.tif 000023
【図２３】
0005829753.tif 000024
【図２４】
0005829753.tif 000025
【図２５】
0005829753.tif 000026
【図２６】
0005829753.tif 000027
【図２７】
0005829753.tif 000028
【図２８】
0005829753.tif 000029
【図２９】
0005829753.tif 000030
【図３０】
0005829753.tif 000031