(57)【要約】【課題】スナップショットに係るボリュームを容易且つ適切に管理できるようにする。【解決手段】複数のボリュームを記憶し、ボリュームに対するＩ／Ｏ処理を実行するストレージシステム２００において、プロセッサ２１１を備え、第１ボリュームと、第１ボリュームからスナップショットによりコピーされた第２ボリュームとを有し、プロセッサ２１１を、ライト要求を受領した場合に、ライト要求の対象のボリュームに関係するコピー元のボリュームが、記憶領域がデータ量削減処理を適用する有効領域であるボリュームであるか否かを判定し、コピー元のボリュームが、記憶領域が有効領域であるボリュームである場合と、記憶領域が有効領域でないボリュームである場合とで、スナップショットにかかる第２ボリュームの作成処理を切り替えて実行するようにする。【選択図】図２
2020080130.tif 000002
【特許請求の範囲】
【請求項１】
複数のボリュームを記憶し、前記ボリュームに対するＩ／Ｏ処理を実行するボリューム管理装置であって、
プロセッサ部を備え、
第１ボリュームと、前記第１ボリュームからスナップショットによりコピーされたボリュームである第２ボリュームとを有し、
前記第１ボリュームは、物理記憶領域を参照しており、
前記プロセッサ部は、
ライト要求を受領した場合に、前記ライト要求の対象のボリュームに関係するコピー元のボリュームが、記憶領域がデータ量削減処理を適用する有効領域であるボリュームであるか否かを判定し、
前記コピー元のボリュームが、記憶領域が前記有効領域であるボリュームである場合と、記憶領域が前記有効領域でないボリュームである場合とで、前記スナップショットにかかる第２ボリュームの作成処理を切り替えて実行する
ボリューム管理装置。
【請求項２】
前記第１ボリュームが、記憶領域がデータ量削減処理を適用しない無効領域である場合、前記第スナップショットにかかるページを、前記第２ボリュームから参照することでスナップショットを作成し、
前記第１ボリュームが、記憶領域がデータ量削減処理を適用する有効領域である場合、前記第２ボリュームから前記物理記憶領域を参照するとともに、当該参照した物理記憶領域に対してデータ量削減処理を行う
請求項１に記載のボリューム管理装置。
【請求項３】
前記第１ボリュームは、記憶領域がデータ量削減処理を適用しない無効領域であり、
前記プロセッサ部は、
前記ライト要求が前記第１ボリュームに対するライト要求であって、前記ライト要求の対象の領域に割り当てられているページが、前記第２ボリュームから参照されている場合には、前記第２ボリュームの参照元の領域に対して、新たなページを割り当て、前記新たなページに対して、前記第１ボリュームの前記ライト要求の対象の領域に格納されていた旧データセットに対して、データ量削減処理を実行して、前記新たなページに格納し、前記ライト要求の対象の領域に割り当てられているページに対して、前記ライト要求の対象のライトデータを格納し、
前記ライト要求が前記第１ボリュームに対するライト要求であって、前記ライト要求の対象の領域に割り当てられているページが、前記第２ボリュームから参照されていない場合には、前記ライト要求の対象の領域に割り当てられているページに対して、前記ライト要求の対象のライトデータを格納する
請求項２に記載のボリューム管理装置。
【請求項４】
前記第１ボリュームは、記憶領域がデータ量削減処理を適用しない無効領域であり、
前記プロセッサ部は、
前記ライト要求が前記第２ボリュームに対するライト要求である場合には、前記ライト要求の対象の前記第２ボリュームの前記ライト要求の対象の領域に対して、新たなページを割り当て、前記ライト要求の対象のライトデータセットに対してデータ量削減処理を実行し、前記新たなページに格納する
請求項３に記載のボリューム管理装置。
【請求項５】
前記第１ボリュームは、記憶領域が有効領域であり、
前記プロセッサ部は、
前記ライト要求が前記第１ボリューム又は前記第２ボリュームに対するライト要求であって、前記ライト要求の対象の領域に割り当てられているページが、前記第１ボリューム及び前記第２ボリュームの両方から参照されている場合には、前記ライト要求の対象の第１ボリューム又は前記２第ボリュームの前記ライト要求の対象の領域に対して、新たなページを割り当て、前記ライト要求の対象のライトデータセットに対してデータ量削減処理を実行し、前記新たなページに格納する
請求項２に記載のボリューム管理装置。
【請求項６】
前記第１ボリュームは、記憶領域がデータ量削減処理を適用しない無効領域であり、
前記プロセッサ部は、
前記第１ボリュームからスナップショットにより前記第２ボリュームを作成する場合に、前記第２ボリュームの各領域に対して、対応する前記第１ボリュームの各領域を参照可能な参照情報を生成する
請求項３に記載のボリューム管理装置。
【請求項７】
前記プロセッサ部は、
前記第２ボリュームに対するリード要求を受信した場合であって、前記リード要求の対象の領域に割り当てられているページが前記第１ボリューム及び前記第２ボリュームの両方から参照されている場合には、前記ページからリード要求の対象のリードデータを読み出して、リードデータを伸張することなく前記リード要求の要求元に送信する
請求項６に記載のボリューム管理装置。
【請求項８】
前記第１ボリュームは、有効領域を有するボリュームであり、
前記プロセッサ部は、
前記第１ボリュームからスナップショットにより前記第２ボリュームを作成する場合に、前記第１ボリュームと前記第２ボリュームの両方から参照可能な第３ボリュームに、前記第１ボリュームの各領域に格納されていた各データセットを格納する
請求項５に記載のボリューム管理装置。
【請求項９】
前記データ量削減処理は、データ圧縮処理、又は重複排除処理の少なくともいずれか一方である
請求項１に記載のボリューム管理装置。
【請求項１０】
複数のボリュームを記憶し、前記ボリュームに対するＩ／Ｏ処理を実行するボリューム管理装置によるボリューム管理方法であって、
第１ボリュームと、前記第１ボリュームからスナップショットによりコピーされたボリュームである第２ボリュームとを有し、
ライト要求を受領した場合に、前記ライト要求の対象のボリュームが、記憶領域がデータ量削減処理を適用する有効領域のボリュームであるか否かを判定し、
前記ライト要求の対象のボリュームが、記憶領域が前記有効領域であるボリュームである場合と、記憶領域が前記有効領域でないボリュームである場合とで、前記スナップショットに係る第２ボリュームの作成処理を切り替えて実行する
ボリューム管理方法。
【請求項１１】
複数のボリュームを記憶し、前記ボリュームに対するＩ／Ｏ処理を実行するボリューム管理装置を構成するコンピュータにより実行されるボリューム管理プログラムであって、
第１ボリュームと、前記第１ボリュームからスナップショットによりコピーされたボリュームである第２ボリュームとを有し、
前記コンピュータに、
ライト要求を受領した場合に、前記ライト要求の対象のボリュームが、記憶領域がデータ量削減処理を適用する有効領域であるボリュームであるか否かを判定させ、
前記ライト要求の対象のボリュームが、記憶領域が前記有効領域であるボリュームである場合と、記憶領域が前記有効領域でないボリュームである場合とで前記スナップショットに係る第２ボリュームの作成処理を切り替えて実行させる
ボリューム管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スナップショットペアとして作成されたボリュームを管理する技術に関する。
【背景技術】
【０００２】
オールフラッシュアレイ（ＡＦＡ:All Flash Array）などのフラッシュストレージの価格はフラッシュメモリの媒体コストによって決まるが、フラッシュメモリのビットコストは依然として高価である。そこで、オールフラッシュアレイでは、圧縮及び重複排除機能といったデータ削減量機能を用いて、フラッシュメモリに格納するデータのデータ量を削減することでビットコストの低減を図っている。
【０００３】
また、市場では、分析やテスト／開発などへのデータの二次活用への要求が高まっている。このため、コスト効率及びオペレーションまで含めたシミュレーションが可能なテスト環境を提供できる手段が必要となっている。その手段の１つにスナップショット機能がある。
【０００４】
スナップショットを維持する方式として、ＣＯＷ（Copy on Write）方式と、ＲＯＷ（Redirect on Write）方式とがある。ＣＯＷ方式では、スナップショットのボリュームペアを作成後、コピー先となるスナップショットボリュームをコピー元であるオリジナルボリュームへポイントすることでデータを参照可能とする。オリジナルボリュームのデータが上書きされると、上書き前の旧データをスナップショットショットボリュームのデータの格納領域へ退避コピーする。
【０００５】
ＲＯＷ方式では、スナップショットのボリュームペアを作成後、オリジナルボリュームとスナップショットボリュームとを共通領域のデータを同時にポイントするようにする。オリジナルボリュームに上書き要求がくると、オリジナルボリュームの固有領域に新データを格納し、オリジナルボリュームを、新ライトデータをポイントするようにする。ＲＯＷ方式では、ＣＯＷ方式で行われる上書き要求時の旧データの退避コピーが不要となるため、ＣＯＷ方式に比べ、上書き要求時におけるレスポンス性能が高い。
【０００６】
スナップショットに関する技術としては、例えば、特許文献１の技術が知られている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特表２０１４−５０７６９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ＡＦＡでは、高価なフラッシュメモリのビットコスト削減を目的にデータ量を削減する圧縮及び重複排除機能を利用するユーザが多い。重複排除機能は、一般に、複数の論理アドレスにそれぞれ対応した複数のデータセットの内容の重複を検出した場合、複数の論理アドレスの参照先を、複数のデータセットのうちのいずれかのデータセットが格納される領域とし、残りのデータセットを削除することによりデータ量を削減する機能である。圧縮及び重複排除機能を使うと、その処理を実行する分だけ処理性能が低下する。そこで、本番業務の性能向上を重視するユーザのために、圧縮及び重複排除機能を使わない場合にデータの二次活用の環境を提供することが要請される。
【０００９】
本発明は、上記事情に鑑みなされたものであり、その目的は、スナップショットに係るボリュームを容易且つ適切に管理することのできる技術を提供することにある。
【課題を解決するための手段】
【００１０】
上記目的を達成するため、一観点に係るボリューム管理装置は、複数のボリュームを記憶し、ボリュームに対するＩ／Ｏ処理を実行するストレージシステムであって、プロセッサ部を備え、第１ボリュームと、第１ボリュームからスナップショットによりコピーされたボリュームである第２ボリュームとを有し、プロセッサ部は、ライト要求を受領した場合に、ライト要求の対象のボリュームに関係するコピー元のボリュームが、記憶領域がデータ量削減処理を適用する有効領域であるボリュームであるか否かを判定し、コピー元のボリュームが、記憶領域が有効領域であるボリュームである場合と、記憶領域が有効領域でないボリュームである場合とで、スナップショットにかかる第２ボリュームの作成処理を切り替えて実行する。
【発明の効果】
【００１１】
本発明によれば、スナップショットに係るボリュームを容易且つ適切に管理することができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、一実施形態に係るボリューム管理処理の概要を示すフローチャートである。
【図２】図２は、一実施形態に係る計算機システムの構成図である。
【図３】図３は、一実施形態に係る重複排除を説明する図である。
【図４】図４は、一実施形態に係るメモリの構成図である。
【図５】図５は、一実施形態に係るＶＯＬ管理テーブルの構成図である。
【図６】図６は、一実施形態に係るアドレス変換テーブルの構成図である。
【図７】図７は、一実施形態に係るページ変換テーブルの構成図である。
【図８】図８は、一実施形態に係るページ割当管理テーブルの構成図である。
【図９】図９は、一実施形態に係るサブブロック管理テーブルの構成図である。
【図１０】図１０は、一実施形態に係る重複管理テーブルの構成図である。
【図１１】図１１は、一実施形態に係る共通領域割当管理テーブルの構成図である。
【図１２】図１２は、一実施形態に係るストレージシステムの記憶階層を説明する図である。
【図１３】図１３は、一実施形態に係るページへの追記を説明する図である。
【図１４】図１４は、一実施形態に係る重複排除処理を説明する図である。
【図１５】図１５は、一実施形態に係る重複排除処理のフローチャートである。
【図１６】図１６は、一実施形態に係るボリュームペアの複製を説明する図である。
【図１７】図１７は、一実施形態に係るボリュームペアがサスペンド状態であるときのコピー元ボリュームへのライト処理を説明する図である。
【図１８】図１８は、一実施形態に係る機能無効コピー元ボリュームライト処理のフローチャートである。
【図１９】図１９は、一実施形態に係るボリュームペアがサスペンド状態であるときのコピー先ボリュームへのライト処理を説明する図である。
【図２０】図２０は、一実施形態に係る機能無効コピー先ボリュームライト処理のフローチャートである。
【図２１】図２１は、一実施形態に係る両方が有効領域であるボリュームペアの複製を説明する図である。
【図２２】図２２は、一実施形態に係る有効領域であるボリュームペアがサスペンド状態であるときのコピー元及びコピー先ボリュームへのライト処理を説明する図である。
【図２３】図２３は、一実施形態に係る機能有効ライト処理のフローチャートである。
【図２４】図２４は、一実施形態に係るリード処理のフローチャートである。
【図２５】図２５は、一実施形態に係る重複排除処理のフローチャートである。
【発明を実施するための形態】
【００１３】
実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１４】
以下の説明において、「インターフェース部」は、１以上のインターフェースでよい。この１以上のインターフェースは、１以上の同種の通信インターフェースデバイス（例えば１以上のＮＩＣ（Network Interface Card））であってもよいし、２以上の異種の通信インターフェースデバイス（例えばＮＩＣとＨＢＡ（Host Bus Adapter））であってもよい。
【００１５】
また、以下の説明において、「メモリ部」は、１以上のメモリであり、典型的には主記憶デバイスでよい。メモリ部における少なくとも１つのメモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。
【００１６】
また、以下の説明において、「ＰＤＥＶ部」は、１以上のＰＤＥＶであり、典型的には補助記憶デバイスでよい。「ＰＤＥＶ」は、物理的な記憶デバイス（Physical storage DEVice）を意味し、典型的には、不揮発性の記憶デバイス、例えばＨＤＤ（Hard Disk Drive）又はＳＳＤ（Solid State Drive）である。
【００１７】
また、以下の説明において、「記憶部」は、メモリ部とＰＤＥＶ部の少なくとも一部とのうちの少なくとも１つ（典型的には少なくともメモリ部）である。
【００１８】
また、以下の説明において、「プロセッサ部」は、１以上のプロセッサである。少なくとも１つのプロセッサは、典型的には、ＣＰＵ（Central Processing Unit）のようなマイクロプロセッサであるが、ＧＰＵ（Graphics Processing Unit）のような他種のプロセッサでもよい。少なくとも１つのプロセッサは、シングルコアでもよいしマルチコアでもよい。
また、少なくとも１つのプロセッサは、処理の一部又は全部を行うハードウェア回路（例えばＦＰＧＡ（Field-Programmable Gate Array）又はＡＳＩＣ（Application Specific Integrated Circuit））といった広義のプロセッサでもよい。
【００１９】
また、以下の説明において、「ＡＡＡテーブル」といった表現により、入力に対して出力が得られる情報を説明することがあるが、この情報は、どのような構造のデータでもよいし、入力に対する出力を発生するニューラルネットワークのような学習モデルでもよい。従って、「ＡＡＡテーブル」を「ＡＡＡ情報」と言うことができる。
【００２０】
また、以下の説明において、各テーブルの構成は一例であり、１つのテーブルは、２以上のテーブルに分割されてもよいし、２以上のテーブルの全部又は一部が１つのテーブルであってもよい。
【００２１】
また、以下の説明において、「プログラム」を動作の主体として処理を説明する場合があるが、プログラムは、プロセッサ部によって実行されることで、定められた処理を、適宜に記憶部及び／又はインターフェース部などを用いながら行うため、処理の主語が、プロセッサ部（或いは、そのプロセッサ部を有するコントローラのようなデバイス）とされてもよい。
【００２２】
プログラムは、計算機のような装置にインストールされてもよいし、例えば、プログラム配布サーバ又は計算機が読み取り可能な（例えば非一時的な）記録媒体にあってもよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【００２３】
また、以下の説明において、「計算機システム」は、１以上の物理的な計算機を含んだシステムである。物理的な計算機は、汎用計算機でも専用計算機でもよい。物理的な計算機は、Ｉ／Ｏ（Input/Output）要求を発行する計算機（例えばサーバ計算機）として機能してもよいし、Ｉ／Ｏ要求に応答してデータのＩ／Ｏを行う計算機（例えばストレージ装置）として機能してもよい。すなわち、計算機システムは、Ｉ／Ｏ要求を発行する１以上のサーバ計算機であるサーバシステム、及び、Ｉ／Ｏ要求に応答してデータのＩ／Ｏを行う１以上のストレージシステムのうちの少なくとも１つでよい。少なくとも１つの物理的な計算機において、１以上の仮想的な計算機（例えばＶＭ（Virtual Machine））が実行されてもよい。仮想的な計算機は、Ｉ／Ｏ要求を発行する計算機でもよいし、Ｉ／Ｏ要求に応答してデータのＩ／Ｏを行う計算機でもよい。
【００２４】
また、計算機システムは、１以上（典型的には複数）の物理的なノード装置で構成された分散システムでよい。物理的なノード装置は、物理的な計算機である。
【００２５】
また、物理的な計算機（例えばノード装置）が所定のソフトウェアを実行することにより、その物理的な計算機、又は、その物理的な計算機を含んだ計算機システムに、ＳＤｘ（Software-Defined anything）が構築されてもよい。ＳＤｘとしては、例えば、ＳＤＳ（Software Defined Storage）又はＳＤＤＣ（Software-defined Datacenter）が採用されてもよい。例えば、ストレージ機能を有するソフトウェアが物理的な汎用の計算機で実行されることにより、ＳＤＳとしてのストレージシステムが構築されてもよい。
【００２６】
また、少なくとも１つの物理的な計算機（例えばストレージ装置）が、ホストシステムとしての１以上の仮想的な計算機と、ストレージシステムのストレージコントローラ（典型的には、Ｉ／Ｏ要求に応答してデータをＰＤＥＶ部に対して入出力する装置）としての仮想的な計算機とが実行されてもよい。言い換えれば、このような少なくとも１つの物理的な計算機は、ホストシステムの少なくとも一部としての機能と、ストレージシステムの少なくとも一部としての機能の両方を有してもよい。
【００２７】
また、計算機システム（典型的にはストレージシステム）は、冗長構成グループを有してよい。冗長構成は、Erasure Coding、ＲＡＩＮ（Redundant Array of Independent Nodes）及びノード間ミラーリングのように複数のノード装置での構成でもよいし、ＰＤＥＶ部の少なくとも一部としての１以上のＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）グループのように単一の計算機（例えばノード装置）での構成でもよい。
【００２８】
また、以下の説明において、「データセット」とは、アプリケーションプログラムのようなプログラムから見た１つの論理的な電子データの塊であり、例えば、レコード、ファイル、キーバリューペア及びタプルのうちのいずれでもよい。
【００２９】
また、以下の説明において、種々の対象の識別情報として、識別番号が使用されるが、識別番号以外の種類の識別情報（例えば、英字や符号を含んだ識別子）が採用されてもよい。
【００３０】
また、以下の説明において、同種の要素を区別しないで説明する場合には、参照符号（又は、参照符号のうちの共通符号）を使用し、同種の要素を区別して説明する場合は、要素の識別番号（又は参照符号）を使用することがある。例えば、記憶領域の単位である「ページ」を特に区別しないで説明する場合には、「ページ５１」と記載し、個々のページを区別して説明する場合には、ページの番号を用いて「ページ＃０」、「ページ＃１」のように記載したり、参照符号を用いて「単独ページ５１Ｐ」、「共通ページ５１Ｃ」のように記載したりすることがある。
【００３１】
まず、第１実施形態に係る計算機システムにおけるボリューム管理処理の概要を説明する。
【００３２】
図１は、一実施形態に係るボリューム管理処理の概要を示すフローチャートである。
【００３３】
ここで、ボリューム管理装置の一例としてのストレージシステム２００は、例えば、ユーザの操作に従って、オリジナルボリューム（コピー元ボリューム：第１ボリューム）のスナップショットをとり、オリジナルボリュームのスナップショットであるスナップショットボリューム（コピー先ボリューム：第２ボリューム）を作成する。これにより、オリジナルボリュームとスナップショットボリュームとはスナップショットペアとなる。そして、ストレージシステム２００において、オリジナルボリュームとスナップショットボリュームとは、例えば、サスペンド状態に設定されて、オリジナルボリュームとスナップショットボリュームとのそれぞれが上位計算機（例えば、サーバシステム２０１（図２参照））からＩ／Ｏ可能な状態とされているものとする。
【００３４】
ストレージシステム２００は、上位計算機から、ストレージシステム２００で記憶しているボリュームに対するライト要求を受信すると、ＶＯＬ管理テーブル（図５参照）の有効フラグを参照する（Ｓ１１）。次いで、ストレージシステム２００は、有効フラグにより、ライト要求先のボリューム（同図の説明において、対象ボリュームという）を含むスナップショットペアのオリジナルボリュームに圧縮及び重複排除機能が有効であるか否かを判定する（Ｓ１２）。ここで、圧縮及び重複排除機能が有効とは、ボリュームの記憶領域に圧縮及び重複排除機能が適用可能されること、すなわち、記憶領域が有効領域であることを示す。
【００３５】
この判定の結果、オリジナルボリュームで、圧縮及び重複排除機能が有効である場合（Ｓ１２：有効）には、ストレージシステム２００は、圧縮及び重複排除機能が有効なボリュームに対するライト処理（機能有効ライト処理：図２３参照）を実施し（Ｓ１６）、処理を終了する。
【００３６】
一方、圧縮及び重複排除機能が無効である場合（Ｓ１２：無効）には、ストレージシステム２００は、対象ボリュームの種別を判定する（Ｓ１３）。この結果、対象ボリュームの種別がスナップショットペアのコピー元ボリュームである場合（Ｓ１３：コピー元ボリューム）には、ストレージシステム２００は、圧縮及び重複排除機能が無効なコピー元ボリュームに対するライト処理（機能無効コピー元ボリュームライト処理：図１８参照）を実行し（Ｓ１４）、処理を終了する。一方、対象ボリュームの種別がコピー先ボリューム（スナップショットボリューム）である場合（Ｓ１３：コピー先ボリューム）には、コピー元ボリュームが圧縮及び重複排除機能が無効である場合のコピー先ボリュームに対するライト処理（機能無効コピー先ボリュームライト処理）を実行し（Ｓ１５）、処理を終了する。
【００３７】
ちなみに、ストレージシステム２００が上位計算機からリード要求を受信した場合には、ストレージシステム２００は、リード要求先のボリュームの属性、種別に関わらず、アドレス変換テーブル（図１０参照）を参照し、リード要求の対象箇所がポイントしているプール領域からデータを読み出す。
【００３８】
なお、上記例は、ボリューム単位に圧縮及び重複排除機能を有効に設定できる場合を示しているが、例えば、ボリュームの一部の領域単位に圧縮及び重複排除機能を有効に設定できるようにしてもよい。この場合には、ボリュームの一部の領域単位、例えばブロックごとに圧縮及び重複排除機能が有効であるか否かを示す有効フラグを管理するようにすればよい。
【００３９】
本実施例では、ボリューム単位に圧縮及び重複排除機能が有効であるか否かを設定するものとして説明する。
【００４０】
次に、計算機システム１００の構成について説明する。
【００４１】
図２は、一実施形態に係る計算機システムの構成図である。
【００４２】
計算機システム１００は、サーバシステム２０１と、管理システム２０５と、ボリューム管理装置の一例としてのストレージシステム２００とを備える。サーバシステム２０１と、ストレージシステム２００とは、ネットワーク２０３を介して接続されている。ネットワーク２０３は、例えば、ＦＣ（Fibre Channel）ネットワークであってもよい。また、管理システム２０５と、ストレージシステム２００とは、ネットワーク２０４を介して接続されている。ネットワーク２０４は、例えば、ＩＰ（Internet Protocol）ネットワークであってよい。なお、ネットワーク２０３及びネットワーク２０４は、同一の通信ネットワークでもよい。
【００４３】
サーバシステム２０１は、ストレージシステム２００に格納されたボリュームを利用するアプリケーションが実行され、ストレージシステム２００に対して、Ｉ／Ｏ先（例えばＬＵＮ（Logical Unit Number）のような論理ボリューム番号や、ＬＢＡ（Logical Block Address）のような論理アドレス）を指定したＩ／Ｏ要求（ライト要求又はリード要求）を送信する。管理システム２０５は、ストレージシステム２００を管理する。
【００４４】
ストレージシステム２００は、プロセッサ部を含むコントローラの一例である。ストレージシステム２００は、データ量削減処理を実行する機能として、圧縮機能及び重複排除機能を有する。また、ストレージシステム２００は、データ量を削減したまま仮想的に論理ボリュームをコピーする機能として、ボリューム複製機能を有する。
【００４５】
ストレージシステム２００は、１以上のＰＤＥＶ２２０と、ＰＤＥＶ２２０に接続されたストレージコントローラ１０１と、を有する。
【００４６】
ＰＤＥＶ２２０は、記憶デバイスの一例であり、例えばＨＤＤ又はＳＳＤ（Solid State Drive）である。
【００４７】
ストレージコントローラ１０１は、Ｉ／Ｆ２１４と、Ｉ／Ｆ２１５と、Ｉ／Ｆ２１３と、メモリ２１２と、プロセッサ２１１とを有する。本実施形態では、ストレージコントローラ１０１では、メモリ２１２及びプロセッサ２１１の組が二重化されている。ここで、Ｉ／Ｆ２１４、Ｉ／Ｆ２１５、及びＩ／Ｆ２１３が、インターフェース部の一例である。メモリ２１２が、記憶部の一例である。プロセッサ２１１が、プロセッサ部の一例である。
【００４８】
プロセッサ２１１は、プログラムを実行することにより各種処理を実行する。例えば、プロセッサ２１１は、データのライト処理、リード処理、データの圧縮及び伸張を行う。なお、プロセッサ２１１は、圧縮及び伸張を行うハードウェア回路を含んでいてもよい。
【００４９】
Ｉ／Ｆ２１４は、サーバシステム２０１とストレージコントローラ１０１との間のデータのやり取りを仲介する通信インターフェースデバイスである。Ｉ／Ｆ２１５は、管理システム２０５とストレージコントローラ１０１との間のデータのやり取りを仲介する通信インターフェースデバイスである。Ｉ／Ｆ２１３は、複数のＰＤＥＶ２２０とストレージコントローラ１０１との間のデータのやり取りを仲介する通信インターフェースデバイスである。
【００５０】
メモリ２１２は、プロセッサ２１１が実行するプログラム（例えば、ボリューム管理プログラム）と、プロセッサ２１１が使用するデータを記憶する。
【００５１】
図３は、一実施形態に係る重複排除を説明する図である。
【００５２】
ストレージシステム２００においては、論理記憶領域が複数のレイヤにより構成されている。具体的には、ストレージシステム２００においては、例えば、Thin Provisioningに従う仮想的な論理ボリューム（仮想ボリューム）５０１（５０１Ｐ等）で構成された上位レイヤと、仮想ボリュームに割り当てられ得る複数のページ（部分領域の一例）で構成されたプール５０３を含む下位レイヤとがある。ここで、レイヤについては、データを利用する上位装置（例えば、サーバシステム２０１）に近いほど上位といい、ＰＤＥＶ２２０に近いほど下位という。
【００５３】
論理ボリューム５０１は、容量仮想化技術（典型的にはThin Provisioning）に従う仮想的な論理ボリュームである。例えば、論理ボリューム５０１は、上位装置から認識され得る論理ボリュームである提供ボリューム５０１Ｐを含む。論理ボリューム５０１のライト先の論理アドレスに、プール５０３における未割当（空き）のページ５１（５１Ｐ，５１Ｃ等）が割り当てられる。
【００５４】
本実施形態では、ストレージシステム２００には、論理記憶領域として、複数のボリューム間で重複するデータセットが格納される空間である共通領域８０と、複数のボリューム間で重複しないデータセットが格納される空間である単独領域７０とが用意される。言い換えれば、ストレージシステム２００における論理アドレス空間が、共通領域８０と単独領域７０とに論理的に区別される。
【００５５】
重複排除を行うために、ストレージコントローラ１０１は、提供ボリューム＃０をライト先としたライト要求に従う対象のデータセット（同図の説明において、対象データセットという）が、いずれかの１以上のデータセットと重複するデータセット（重複データセット）であるか否かを判定する重複判定処理を行う。重複判定処理は、ライト要求の処理に同期して行われる処理（インプロセス）と、ライト要求に従う対象データセットの格納の後にライト要求の処理と非同期に行われる処理（ポストプロセス）とのいずれであってもよい。
【００５６】
重複判定処理の結果、対象データセットがいずれのデータセットとも重複しないデータセット（単独データセット：例えば、図３のデータセットＡ）であれば、ストレージコントローラ１０１は、データセットＡの格納先を、例えば、単独領域７０に属し、提供ボリューム＃０に対応したページ＃０とする。単独領域７０に属するページを、「単独ページ」ということがある。図３の例では、ページ＃０及び＃１の各々が、単独ページ５１Ｐである。
【００５７】
一方、重複判定処理の結果、対象データセットがいずれかの１以上のデータセットと重複するデータセット（重複データセット：例えば、図３のデータセットＢ）であれば、ストレージコントローラ１０１は、データセットＢの格納先を、共通領域８０に属するページ＃２とする。ページ＃２は、データセットＢの各々のライト先（提供ボリューム＃０及び＃１）から直接的又は間接的に参照される。共通領域８０に属するページを、以下、「共通ページ」ということがある。図３の例では、ページ＃２が、共通ページ５１Ｃである。
【００５８】
重複判定処理がポストプロセスの場合、ストレージコントローラ１０１は、ライト処理において、データセットＢを、提供ボリューム＃０及び＃１にそれぞれ割り当てられている単独ページ＃０及び＃１のそれぞれに格納した後に、単独ページ＃０又は＃１のデータセットＢを共通ページ＃２にコピーし、単独ページ＃０及び＃１の各々からデータセットＢを削除する。
【００５９】
次に、メモリ２１２の構成について詳細に説明する。
【００６０】
図４は、一実施形態に係るメモリの構成図である。
【００６１】
メモリ２１２は、ローカルメモリ４０１、キャッシュメモリ４０２、及び共有メモリ４０４とのメモリ領域を含む。これらのメモリ領域のうちの少なくとも１つは、独立したメモリで構成されてもよい。
【００６２】
ローカルメモリ４０１は、このローカルメモリ４０１を含むメモリ２１２と同一組に属するプロセッサ２１１により使用される。ローカルメモリ４０１には、リードプログラム４１１、データ量削減プログラム４１４、及び、ボリューム複製制御プログラム４１８が格納される。これらのプログラムがボリューム管理プログラムに相当する。これらプログラムについては後述する。
【００６３】
キャッシュメモリ４０２には、ＰＤＥＶ２２０に対してライト又はリードされるデータセットが一時的に格納される。
【００６４】
共有メモリ４０４は、この共有メモリ４０４を含むメモリ２１２と同一組に属するプロセッサ２１１、及び異なる組に属するプロセッサ２１１の両方により使用される。共有メモリ４０４には、各種管理情報として、ＶＯＬ管理テーブル４２１、アドレス変換テーブル４２２、プール管理テーブル４２３、ページ変換テーブル４２５、ページ割当管理テーブル４２６、サブブロック管理テーブル４２７、重複管理テーブル４３０、及び共通領域管理テーブル４３１が格納される。
【００６５】
プール管理テーブル４２３は、プール５０３に関する情報を保持するテーブルである。プール管理テーブル４２３は、例えば、プール５０３毎のプール＃（プール５０３の番号）、ＲＧ＃（プール５０３の基になっている１以上のＲＡＩＤグループの番号）、プール容量（プール５０３の容量）、及びプール使用容量（プール容量のうち使用されている容量（典型的には、プール５０３のうちの割当て済ページの総容量））の情報を保持する。プール管理テーブル４２３以外のテーブルの詳細については、後述する。
【００６６】
次に、ＶＯＬ管理テーブルについて詳細に説明する。
【００６７】
図５は、一実施形態に係るＶＯＬ管理テーブルの構成図である。
【００６８】
ＶＯＬ管理テーブル４２１は、ＶＯＬ（ボリューム）に関する情報を保持する。ここで、「ＶＯＬ」には、提供ボリューム５０１Ｐのようにサーバシステム２０１に提供される論理ボリュームも、共通ボリューム５０１Ｃ及び追記ボリューム５０２（図１２、図１４参照）のようにサーバシステム２０１に提供されない論理ボリュームも含まれる。また、ボリューム複製により、新たにサーバシステム２０１に提供される提供ボリューム５０１Ｓも、「ＶＯＬ」に含まれる。
【００６９】
ＶＯＬ管理テーブル４２１は、ＶＯＬ毎にエントリを有する。各エントリは、ＶＯＬ＃８０１、ＶＯＬ属性８０２、ＶＯＬ容量８０３、プール＃８０４、有効フラグ８０５、及びＶＯＬ種別８０６のフィールドを含む。以下、１つのＶＯＬ（「対象ＶＯＬ」と呼ぶ）に対応するエントリを例に取って説明する。
【００７０】
ＶＯＬ＃８０１には、対象ＶＯＬの番号（識別番号：ボリューム番号：ＶＯＬ＃）が格納される。ＶＯＬ属性８０２には、対象ＶＯＬの属性の情報が格納される。属性としては、例えば、ＶＯＬが提供ボリュームであることを示す“提供”、追記ボリュームであることを占める“追記”、共通ボリュームであることを示す“共通”、ボリューム複製による旧世代の提供ボリュームであることを示す“重複単独”がある。ＶＯＬ容量８０３には、対象ＶＯＬの容量の情報が格納される。プール＃８０４には、対象ＶＯＬに関連付けられているプール５０３の番号の情報が格納される。有効フラグ＃８０５には、対象ＶＯＬの記憶領域が圧縮及び重複排除が有効である領域（有効領域）であるか否かを示す有効フラグが格納される。有効フラグは、圧縮及び重複排除が有効である場合には、“有”であり、圧縮及び重複排除が無効である場合には、“無”である。ＶＯＬ種別８０６には、スナップショットをとった時（スナップショットを生成した時）の対象ＶＯＬの種別（ＰＶＯＬ（Ｐｒｉｍａｒｙ  ＶＯＬ：第1ボリューム）、又はＳＶＯＬ（Ｓｅｃｏｎｄａｒｙ  ＶＯＬ：第２ボリューム））が格納される。
【００７１】
次に、アドレス変換テーブルについて詳細に説明する。
【００７２】
図６は、一実施形態に係るアドレス変換テーブルの構成図である。
【００７３】
アドレス変換テーブル４２２は、参照元の論理アドレスと参照先の論理アドレスとの関係に関する情報を保持する。アドレス変換テーブル４２２は、論理ボリューム５０１（後述するレイヤ１の論理ボリューム）毎に設けられる。
【００７４】
アドレス変換テーブル４２２は、論理ボリューム５０１のブロック６０１毎にエントリを有する。各エントリは、ＶＯＬ内アドレス９０１、参照先ＶＯＬ＃９０２、参照先ＶＯＬ内アドレス９０３、データサイズ９０４、及び参照先ＶＯＬ種別９０５のフィールドを含む。以下、１つのブロック６０１（「対象ブロック」と呼ぶ）に対応するエントリを例に取って説明する。
【００７５】
ＶＯＬ内アドレス９０１には、論理ボリューム５０１における対象ブロックの論理アドレス（例えば、先頭の論理アドレス）が格納される。参照先ＶＯＬ＃９０２には、対象ブロックの参照先のＶＯＬ（追記ボリューム又は共通ボリューム）の番号（ＶＯＬ＃）が格納される。参照先ＶＯＬ内アドレス９０３には、対象ブロックの参照先のＶＯＬにおける対応する論理アドレス（参照先ＶＯＬ内論理アドレス）が格納される。データサイズ９０４には、対象ブロックをライト先としたデータセットのサイズ（圧縮した場合には圧縮後のサイズ）が格納される。参照先ＶＯＬ種別９０５には、対象ブロックの参照先のＶＯＬの種別（参照先ＶＯＬ種別）が格納される。参照先ＶＯＬ種別には、参照先のＶＯＬが追記ボリュームであることを示す“単独”と、参照先のＶＯＬが共通ボリュームであることを示す“共通”と、参照先のＶＯＬが重複単独ボリュームであることを示す“重複単独”とがある。
【００７６】
次に、ページ変換テーブルについて詳細に説明する。
【００７７】
図７は、一実施形態に係るページ変換テーブルの構成図である。
【００７８】
ページ変換テーブル４２５は、論理ボリューム５０１又は追記ボリューム５０２における領域（例えば、ページ５１のサイズと同数分のブロック６０１）とページ５１との関係に関する情報を保持する。ページ変換テーブル４２５は、論理ボリューム５０１及び追記ボリューム５０２のそれぞれ毎に設けられる。
【００７９】
ページ変換テーブル４２５は、論理ボリューム５０１又は追記ボリューム５０２における領域毎にエントリを有する。各エントリは、ＶＯＬ内アドレス１１０１、割当フラグ１１０２、及びページ＃１１０３のフィールドを含む。以下、１つの領域（「対象領域」と呼ぶ）に対応するエントリを例に取って説明する。
【００８０】
ＶＯＬ内アドレス１１０１には、対象領域の論理アドレス（例えば、先頭の論理アドレス）が格納される。割当フラグ１１０２には、対象領域にページ５１が割り当てられているか否かを示す割当フラグが格納される。割当フラグは、対象領域にページ５１が割当てられている場合には、“割当済”に設定され、対象領域にページ５１が割当てられていない場合には、“未割当”に設定される。ページ番号１１０３には、対象領域に割り当てられているページ５１の番号（ページ＃）が格納される。
【００８１】
次に、ページ割当管理テーブルについて詳細に説明する。
【００８２】
図８は、一実施形態に係るページ割当管理テーブルの構成図である。
【００８３】
ページ割当管理テーブル４２６は、プール５０３毎に設けられる。ページ割当管理テーブル４２６は、ページ５１とその割当先との関係に関する情報を保持する。ページ割当管理テーブル４２６は、ページ５１毎にエントリを有する。各エントリは、ページ＃１２０１、割当フラグ１２０２、割当先ＶＯＬ＃１２０３、及び割当先ＶＯＬ内アドレス１２０４のフィールドを含む。１つのページ５１（「対象ページ」と呼ぶ）に対応するエントリ「を例に取って説明する。
【００８４】
ページ＃１２０１には、プール５０３における対象ページの番号（ページ＃）が格納される。割当フラグ１２０２には、対象ページが割り当てられているか否かを示す割当フラグが格納される。割当フラグは、対象ページが割当てられている場合には、“割当済”に設定され、対象ページが割り当てられていない場合には、“未割当”に設定される。割当先ＶＯＬ＃１２０３には、対象ページの割当先のＶＯＬ（論理ボリューム５０１又は追記ボリューム５０２）の番号（割当先ＶＯＬ＃）が格納される。割当先ＶＯＬ内アドレス１２０４には、対象ページの割当先ＶＯＬにおける割当先の領域の論理アドレス（例えば、先頭論理アドレス）が格納される。
【００８５】
次に、サブブロック管理テーブルについて詳細に説明する。
【００８６】
図９は、一実施形態に係るサブブロック管理テーブルの構成図である。
【００８７】
サブブロック管理テーブル４２７は、追記ボリューム５０２毎に設けられる。サブブロック管理テーブル４２７は、サブブロック６０２（図１３参照）に関する情報を保持する。サブブロック管理テーブル４２７は、サブブロック６０２毎にエントリを有する。各エントリは、ページ＃１３０１、ページ内アドレス１３０２、割当フラグ１３０３、ＶＯＬ内アドレス１３０４、及びサブブロックサイズ１３０５のフィールドを含む。以下、１つのサブブロック６０２（「対象サブブロック」と呼ぶ）に対応するエントリを例に取って説明する。
【００８８】
ページ＃１３０１には、対象サブブロックを含むページ５１の番号（ページ＃）が格納される。ページ内アドレス１３０２には、ページ５１における対象サブブロックの論理アドレスが格納される。割当フラグ１３０３には、対象サブブロックが割り当てられているか否か、すなわち、対象サブブロックが使用中であるか否かを示すフラグが格納される。このフラグは、対象サブブロックが割当てられている場合には、“割当済”が設定され、割当てられていない場合には、“未割当”が設定される。ＶＯＬ内アドレス１３０４には、対象サブブロックの割当先の論理アドレス（追記ボリューム５０２における領域の論理アドレス）が格納される。サブブロックサイズ１３０５には、対象サブブロックのサイズ（対象サブブロックに格納されている圧縮後のデータセットのサイズ）が格納される。なお、ページ内アドレス１３０２の値と、ＶＯＬ内アドレス１３０４の値とは同じであってもよい。
【００８９】
次に、重複管理テーブルについて詳細に説明する。
【００９０】
図１０は、一実施形態に係る重複管理テーブルの構成図である。
【００９１】
重複管理テーブル４３０は、重複データセットの位置（論理アドレス）に関する情報を保持する。重複管理テーブル４３０は、例えば、共通ボリューム５０１Ｃを構成する複数の共通ブロック６０１Ｃの各々について、ＶＯＬ内アドレス１４０１を有する。ＶＯＬ内アドレス１４０１には、共通ブロック６０１Ｃの論理アドレスが格納される。また、重複管理テーブル４３０においては、参照元が存在する共通ブロック６０１Ｃのアドレスに対して、参照元のブロックに対応するエントリ１４０２が例えばキュー形式で関連付けられる。参照元のエントリ１４０２は、ＶＯＬ＃１４０３と、ＶＯＬ内アドレス１４０４とを含む。ＶＯＬ＃１４０３には、参照元のブロック６０１を含む論理ボリューム５０１の番号が格納される。ＶＯＬ内アドレス１４０４には、参照元のブロック６０１の論理アドレスが格納される。
【００９２】
次に、共通領域割当管理テーブルについて詳細に説明する。
【００９３】
図１１は、一実施形態に係る共通領域割当管理テーブルの構成図である。
【００９４】
共通領域管理テーブル４３１は、共通ボリューム５０１Ｃ（図１４参照）毎に設定される。共通領域管理テーブル４３１は、共通ボリューム５０１Ｃの空き状況に関する情報を保持する。共通領域管理テーブル４３１は、例えば、共通ボリューム５０１Ｃを構成する複数の共通ブロック６０１Ｃ（図１４参照）毎のエントリを有する。各エントリは、ＶＯＬ内アドレス１８０１、使用中フラグ１８０２、及び参照フラグ１８０３のフィールドを含む。以下、１つの共通ブロック６０１Ｃ（「対象ブロック」と呼ぶ）に対応するエントリを例に取って説明する。
【００９５】
ＶＯＬ内アドレス１８０１には、対象ブロックの論理アドレスが格納される。使用中フラグ１８０２には、対象ブロックが使用中であるか、使用中でないかを示すフラグ（使用中フラグ）が格納される。本実施形態では、使用中フラグは、対象ブロックが使用中である場合には、“使用中”が設定され、使用中でない場合には、“未使用”が設定される。ここで、使用中フラグが“使用中”である場合には、対象ブロックに直接的（追記ボリューム非経由）又は間接的（追記ボリューム経由）にページ５１が割り当てられていることを意味する。一方、フラグが“未使用”である場合には、対象ブロックにページ５１が割り当てられていないこと、すなわち、空きであることを意味する。
【００９６】
参照フラグ１８０３には、共通ボリューム５０１Ｃが参照しているか否かを示すフラグ（参照フラグ）が格納される。参照フラグは、対象ブロックについて１以上の参照元となるブロック６０１が存在する場合には、“有”に設定され、存在しない場合には、“無”に設定される。
【００９７】
次に、ストレージシステム２００の記憶階層について説明する。
【００９８】
図１２は、一実施形態に係るストレージシステムの記憶階層を説明する図である。
【００９９】
ここで、以下の説明では、レイヤは、データを利用する上位装置に近いほど上位といい、ＰＤＥＶに近いほど下位という。そして、ｎ（ｎは自然数）層目のレイヤを「レイヤｎ」と呼ぶ。このｎは、値が小さい程、上位のレイヤであることを示している。
【０１００】
ストレージシステム２００内の記憶階層には、レイヤ１からレイヤ４の記憶階層がある。
【０１０１】
レイヤ１（図３における上位レイヤの一例）の論理記憶領域としては、提供ボリューム５０１Ｐがある。提供ボリューム５０１Ｐは、サーバシステム２０１に提供される。すなわち、提供ボリューム５０１Ｐは、サーバシステム２０１から可視の論理ボリュームである。また、レイヤ１の論理記憶領域として、本実施形態では、後述する共通領域８０に属する論理ボリュームである共通ボリュームがある。共通ボリュームは、サーバシステム２０１に提供されない。すなわち、共通ボリュームは、サーバシステム２０１から不可視の論理ボリュームである。更に、レイヤ１の論理記憶領域として、後述する単独領域７０に属する論理ボリュームである単独ボリュームがある。単独ボリュームは、サーバシステム２０１に提供されない。すなわち、単独ボリュームは、サーバシステム２０１から不可視の論理ボリュームである。
【０１０２】
レイヤ２の論理記憶領域としては、追記ボリューム５０２がある。追記ボリューム５０２は、追記用の論理ボリュームである。１つの追記ボリューム５０２には、いずれか１つの論理ボリューム５０１（例えば、提供ボリューム５０１Ｐなど）が関連付けられる。逆に、１つの論理ボリューム５０１には、１又は複数の追記ボリューム５０２が関連付けられる。従って、追記ボリューム５０２（レイヤ２の論理記憶領域）と、論理ボリューム５０１（レイヤ１の論理記憶領域）とは、１対１又は１対多の関係である。なお、本実施形態では、説明を簡単にするために、追記ボリューム５０２と論理ボリューム５０１とは１対１の関係であるとする。
【０１０３】
レイヤ３（図３を用いて説明した下位レイヤの一例）の論理記憶領域としては、プール５０３がある。プール５０３は、１以上のＲＧ５０４に基づく論理記憶領域である。プール５０３は、複数のページ５１で構成されている。なお、プール５０３は、少なくとも１つのＲＧ５０４に代えて、又は加えて、ストレージシステム２００の外部の記憶資源に基づく記憶領域を含んでいてもよい。
【０１０４】
レイヤ４の論理記憶領域としては、ＲＧ５０４がある。ＲＧ５０４は、複数のＰＤＥＶ２２０で構成されたＲＡＩＤグループの空間（記憶領域）である。
【０１０５】
図１２に示す提供ボリューム５０１Ｐの一部は、２以上の提供ボリューム５０１Ｐのうちの少なくとも一部であり、圧縮又は重複排除の少なくとも一方のデータ量削減機能が有効とされている領域（「有効領域」という）である。一方、２以上の提供ボリューム５０１Ｐのうち有効領域以外の領域は、圧縮及び重複排除のデータ低減機能が無効とされている領域（「無効領域」という）である。
【０１０６】
ストレージコントローラ１０１は、ライト対象のデータセットＡのライト先が有効領域（ここでは、圧縮が有効）である場合、ライト対象のデータセットＡを圧縮し、提供ボリューム５０１Ｐに対応した追記ボリューム５０２に割り当てられたページ５１Ｐａ（ライト先のページに対して割り当てられた単独ページであるページ５１Ｐａ）に、圧縮されたデータセットＡ´を追記する。
【０１０７】
ページ５１Ｐａは、提供ボリューム５０１Ｐに対応した追記ボリューム５０２に割り当てられたページ５１、言い換えれば、提供ボリューム５０１Ｐに間接的に割り当てられたページ５１である。このような追記ボリューム５０２に割り当てられたページ（提供ボリューム５０１Ｐに間接的に割り当てられたページ）を「追記ページ」という。
【０１０８】
一方、ストレージコントローラ１０１は、ライト対象のデータセットＢのライト先が無効領域の場合、ライト対象のデータセットＢを圧縮することなしに、ライト先のページに対して割り当てられたページ５１Ｐｂに、非圧縮のデータセットＢを格納する。ページ５１Ｐｂは、提供ボリューム５０１Ｐに直接的に（追記ボリューム５０２非経由で）割り当てられたページ５１である。提供ボリューム５０１Ｐに直接的に割り当てられたページ５１には、上書きすることができ、この提供ボリューム５０１Ｐに直接的に割り当てられたページを「上書きページ」という。
【０１０９】
次に、ページへの追記について説明する。
【０１１０】
図１３は、一実施形態に係るページへの追記を説明する図である。
【０１１１】
論理ボリューム５０１は、複数の単位領域である複数のブロック６０１で構成されている。本実施形態では、データセットは、ブロック単位のデータである。
【０１１２】
論理ボリューム５０１に対応した追記ボリューム５０２に割り当てられたページ５１Ｐａには、圧縮後のデータセットが追記されていく。ここで、ページ５１Ｐａにおいて、圧縮後のデータセットが占める領域を、「サブブロック６０２」という。なお、ページ５１Ｐａには、非圧縮のデータセットが追記されてもよいが、本実施形態では、圧縮後のデータセットが追記されるものとして説明する。プール５０３には、ページ５１Ｐａの状態が反映される。
【０１１３】
次に、重複排除処理について説明する。
【０１１４】
図１４は、一実施形態に係る重複排除処理を説明する図である。図１４において、（Ａ）は、重複排除処理前の状態の例を示し、（Ｂ）が、重複排除処理後の状態を示している。
【０１１５】
図１４（Ａ）及び（Ｂ）に示すように、論理ボリューム５０１として、提供ボリューム５０１Ｐと、共通ボリューム５０１Ｃとがある。共通ボリューム５０１Ｃは、共通領域８０に属し、サーバシステム２０１に提供されない論理ボリュームである。図１４においては、共通ボリューム５０１Ｃの少なくとも一部が有効領域である。なお、全体が有効領域である共通ボリュームと、全体が無効領域である共通ボリュームとを備えてもよい。
【０１１６】
また、ストレージシステム２００においては、アドレス変換テーブル４２２（４２２Ｐ、又は４２２Ｃ）及び追記ボリューム５０２（５０２Ｐ又は５０２Ｃ）が、論理ボリューム５０１毎に設けられている。
【０１１７】
以下の説明において、論理ボリューム＃ｍ（ＶＯＬ＃が“ｍ”の論理ボリューム（ｍは０以上の整数））に対応したアドレス変換テーブル４２２を、「アドレス変換テーブル＃ｍ」ということがある。
【０１１８】
また、以下の説明において、論理ボリューム＃ｍに対応した追記ボリューム５０２を、「追記ボリューム＃ｍ」ということがある。
【０１１９】
また、以下の説明において、下記の用語を使用することがある。
・提供ブロック：提供ボリュームにおけるブロック。
・共通ブロック：共通ボリュームにおけるブロック。
・重複先ブロック：重複データセットのライト先（コピー先）とされた共通ブロック。
・追記単独ページ：単独ページ且つ追記ページであるページ。
・追記共通ページ：共通ページ且つ追記ページであるページ、すなわち、共通ボリュームに対応した追記ボリュームに割り当てられたページ。
【０１２０】
ストレージシステム２００には、提供ボリューム＃１及び＃２があるので、それぞれに対応するアドレス変換テーブル＃１及び＃２と、追記ボリューム＃１及び＃２がある。また、共通ボリューム＃３があるので、アドレス変換テーブル＃３と追記ボリューム＃３とがある。ストレージシステム２００では、追記ボリューム＃１及び＃２が、単独領域７０に属し、追記ボリューム＃３が、共通領域８０に属する。
【０１２１】
重複排除処理前においては、（Ａ）に示すように、提供ボリューム＃１及び＃２がそれぞれ有する２つの提供ブロック６０１Ｐの各々に、データセットＡが存在している。結果として、追記ボリューム＃１及び＃２にそれぞれ割り当てられた２つの追記単独ページ（単独ページ５１Ｐ）の各々に、圧縮後データセットＡ’（サブブロック６０２Ｐ）が存在する。
【０１２２】
アドレス変換テーブル＃１及び＃２の各々においては、データセットＡのライト先提供ブロック（提供ブロック６０１Ｐ）の論理アドレスの参照先が、追記単独ページ５１Ｐにおけるサブブロック６０２Ｐの論理アドレスとなっている。
【０１２３】
以下、重複排除処理における処理動作について説明する。
【０１２４】
図１５は、一実施形態に係る重複排除処理のフローチャートである。なお、図１５の説明において、図１４（Ｂ）を適宜参照する。
【０１２５】
ストレージコントローラ１０１は、複数の提供ボリューム５０１Ｐ間で重複するデータセット（重複データセット）が存在することを検出できたか否かを判定する（Ｓ２１１０）。この結果、重複するデータセットが存在することを検出できなかった場合（Ｓ２１１０：検出しない）には、重複排除処理を終了する。
【０１２６】
一方、重複するデータセットが存在することを検出できた場合（Ｓ２１１０：検出した）には、ストレージコントローラ１０１は、重複するデータセット（ここでは、圧縮されたデータセットの伸張後のデータセットに相当）を、提供ボリュームにおける有効領域７０の提供ブロック６０１Ｐから、共通ボリューム５０１Ｃの有効領域におけるいずれかの未使用の共通ブロック６０１Ｃにコピーする。コピー先の共通ブロック６０１Ｃが、重複先ブロックである。次いで、ストレージコントローラ１０１は、重複先ブロック（共通ブロック６０１Ｃ）に対応する追記ボリューム５０２Ｃにページを割り当てる（Ｓ２１１２）。割り当てられたページが、追記共通ページ（共通ページ５１Ｃ）である。例えば、図１４の例では、Ｓ２１１２では、提供ボリューム＃１及び＃２に重複するデータセットＡが存在することが検出され、重複データセットＡ（圧縮後データセットＡ’の伸張後のデータセットに相当）を格納されるページとして、提供ボリューム＃１及び＃２における有効領域の提供ブロック６０１Ｐのページから、共通ボリューム＃３の有効領域におけるいずれかの未使用の共通ブロック６０１Ｃの共通ページに変更される。
【０１２７】
次いで、ストレージコントローラ１０１は、重複データセットを圧縮し（Ｓ２１１４）、圧縮後のデータセット（圧縮後データセット）を、追記共通ページに追記する（Ｓ２１１６）。例えば、図１４（Ｂ）の例では、ストレージコントローラ１０１は、Ｓ２１１４で重複データセットＡを圧縮し、Ｓ２１１６で圧縮後データセットＡ’を、追記共通ページに追記する。
【０１２８】
次いで、ストレージコントローラ１０１は、アドレス変換テーブル４２２Ｃを更新する（Ｓ２１１８）。ストレージコントローラ１０１は、アドレス変換テーブル４２２Ｃにおける、重複先ブロック（共通ブロック６０１Ｃ）の論理アドレスの参照先を、追記共通ページ（共通ページ５１Ｃ）におけるサブブロック６０２Ｃ（圧縮後データセットが存在するサブブロック６０２Ｃ）の論理アドレスに更新する。例えば、図１４（Ｂ）の例では、ストレージコントローラ１０１は、アドレス変換テーブル＃３において、重複先ブロック（共通ブロック６０１Ｃ）の論理アドレスの参照先を、共通ページ５１Ｃにおける圧縮後データセットＡ´が存在するサブブロック６０２Ｃの論理アドレスとする。
【０１２９】
次いで、ストレージコントローラ１０１は、アドレス変換テーブル４２２Ｐを更新する（Ｓ２１２０）。ストレージコントローラ１０１は、アドレス変換テーブル４２２Ｃにおける提供ブロック６０１Ｐの論理アドレスの参照先を、追記単独ページにおけるサブブロック６０２Ｐ（圧縮後データセットが存在するサブブロック６０２Ｐ）の論理アドレスに代えて、重複先ブロックの論理アドレスとする。例えば、図１４（Ｂ）の例では、ストレージコントローラ１０１は、アドレス変換テーブル＃１、＃３において、提供ブロック６０１Ｐの論理アドレスの参照先を、共通ページ５１Ｃにおける圧縮後データセットＡ´が存在するサブブロック６０２Ｃの論理アドレスとする。
【０１３０】
次いで、ストレージコントローラ１０１は、追記ボリューム５０２Ｐにそれぞれ割り当てられた２つの追記単独ページの各々のうち、圧縮後データセットが格納されているサブブロック６０２Ｐを、点線で示すように、無効サブブロック（未割当）として管理する（Ｓ２１２２）。図１４（Ｂ）の例では、追記ボリューム＃１、＃３におけるサブブロック６０２Ｐを無効サブブロックとする。
【０１３１】
次いで、ストレージコントローラ１０１は、重複管理テーブル４３０を更新する（Ｓ２１２４）。ストレージコントローラ１０１は、重複管理テーブル４３０において、重複先ブロック（共通ブロック６０１Ｃ）の論理アドレスの参照元を、コピー元の２つの提供ブロック６０１Ｐの論理アドレスとする。
【０１３２】
なお、上記した重複排除処理において、ストレージコントローラ１０１は、重複データセットを共通ブロック６０１Ｃにコピーすることに代えて、いずれかの圧縮後データセットを共通領域８０に属する共通ページ５１Ｃに追記的にコピーしてもよい。そして、ストレージコントローラ１０１は、２つの提供ブロック６０１Ｐの論理アドレスの参照先を、コピー先ページ（共通ページ５１Ｃ）のサブブロック６０２Ｃの論理アドレスとし、コピー元のサブブロック６０２Ｐを無効サブブロックとしてもよい。このようにする場合には、共通ボリューム５０１Ｃはなくてもよい。
【０１３３】
また、ストレージコントローラ１０１が重複データセットを共通ブロック６０１Ｃにコピーする場合、共通ブロック６０１Ｃの記憶領域としてキャッシュメモリ４０２の記憶領域が割り当てられてもよい。
【０１３４】
次に、ボリューム複製（コピー）処理について説明する。ここで、コピー先のボリュームが有効領域となっているものとして説明する。なお、以下の説明において、データセットの圧縮及び伸張は、データ量削減プログラム４１４により（より正確には、データ量削減プログラム４１４を実行するプロセッサ２１１により）、実行されてもよい。
【０１３５】
ボリューム複製処理は、例えば、いずれかの提供ボリューム５０１Ｐを指定したボリューム複製要求を受け付けた場合に実行される。
【０１３６】
ボリューム複製制御プログラム４１８（正確には、ボリューム複製制御プログラム４１８を実行するプロセッサ部２１１）は、コピー先の提供ボリューム５０１Ｓに対応する追記ボリューム５０２Ｓを作成し、ＶＯＬ管理テーブル４２１に新たなエントリを追加し、そのエントリのＶＯＬ＃８０１に複製先の追記ボリューム５０２Ｓの番号を設定し、ＶＯＬ属性８０２に“追記”を設定し、ＶＯＬ容量８０３に作成した追記ボリューム５０２Ｓの容量を設定し、プール＃８０４に追記ボリューム５０２Ｓに割り当てられるプールの番号を設定し、有効フラグ８０５に“有効”を設定する。
【０１３７】
次いで、ボリューム複製制御プログラム４１８は、図示しないスナップショット管理テーブルにおいて、コピー元の提供ボリューム５０１Ｐの番号と、コピー先の提供ボリューム５０１Ｓの番号とを対応付けて格納することにより、これらの提供ボリューム５０１Ｐ，５０１Ｓをスナップショットペアとして登録する。
【０１３８】
なお、ボリュームを有効領域とすると、重複排除処理を行う分、処理性能が低下するため、処理性能を重視する場合は、ボリュームを無効領域とするようにすればよい。その場合は、コピー元の提供ボリュームを無効領域とし、コピー先のボリュームを有効領域とすればよい。なお、ボリュームの複製（コピー）は複数世代とることもできる。
【０１３９】
次に、コピー元の提供ボリュームが無効領域であり、コピー先の提供ボリュームが有効領域である場合において、提供ボリュームをコピーする例を、図１６〜図２０を参照して説明する。なお、この例は、スナップショットのＣＯＷ方式を採用した方法である。
【０１４０】
図１６は、一実施形態に係るボリュームペアの複製を説明する図である。
【０１４１】
ここで、複製前において、コピー元の提供ボリューム＃１は、単独データセットＡと単独データセットＢとを持っているとすると、複製後においては、提供ボリューム＃１のコピー先のボリューム＃１１は、提供ボリューム＃１の単独データセットＡと単独データセットＢを参照するようになる。
【０１４２】
すなわち、提供ボリューム＃１を複製した後においては、単独領域７０に存在する単独データセットＡと単独データセットＢとは、提供ボリューム＃１から参照され、また、提供ボリューム＃１１からも提供ボリューム＃１の論理アドレスを介して間接的に参照されるようになる。
【０１４３】
提供ボリューム＃１１のアドレス変換テーブル４２２は、例えば、データセットＡが格納される領域に対応するエントリ、すなわち、その領域のボリューム内アドレスがＶＯＬ内アドレス９０１に格納されるエントリにおいて、参照先ＶＯＬ＃９０２には、提供ボリューム＃１の番号が格納され、参照先ＶＯＬ内アドレス９０３には、提供ボリューム＃１のデータセットＡが格納されているボリューム内アドレスが格納され、データサイズ９０４には、コピー元の提供ボリューム＃１は無効領域であるため、無効を示す値（例えば−１など）が格納され、参照先ＶＯＬ種別９０５には、提供ボリューム＃１のＶＯＬ属性が格納される。なお、データセットＢについても同様にアドレス変換テーブル４２２が更新される。
【０１４４】
複製前、提供ボリューム＃１からのみ参照されていた単独データセットであるデータセットＡとデータセットＢは、複製後、提供ボリューム＃１と提供ボリューム＃１１とから参照される共通データセットになる。しかし、データセットＡとデータセットＢとは重複データセットではあるが、共通領域８０には存在せず、単独領域７０に存在する。従って、複製前、単独領域７０に存在する単独ページは、複製後、共通ページになるわけではない。ここで、単独領域７０に存在しながら、重複データセットを格納する単独ページを「重複単独ページ」ということとする。
【０１４５】
次に、複製後のペアがサスペンド状態になった時に無効領域であるコピー元の提供ボリュームのデータセットに他のデータセットをライトするライト要求を受信した場合のライト処理について説明する。
【０１４６】
図１８は、一実施形態に係る機能無効コピー元ボリュームライト処理のフローチャートである。図１８は、図１のステップＳ１４に対応する処理である。
【０１４７】
ストレージコントローラ１０１（具体的にはボリューム複製制御プログラム４１８を実行するプロセッサ２２１）は、ライト要求のライト先に格納されているデータセット（旧データセット）が他（コピー先のボリューム）から参照されているか否かを判定する（Ｓ２６０１）。参照されているか否かの判定の方法は、ＶＯＬ管理テーブル４２１の対象となる提供ボリュームに対応するエントリを参照し、エントリのＶＯＬ種別８０６に“ＰＶＯＬ”が登録されていれば、この提供ボリュームの複製が作成されていることが特定でき、複製が作成されていることが特定できた場合には、図示しないスナップショット管理テーブルからコピー先のボリュームのＶＯＬ＃を検索し、検索したＶＯＬ＃のボリュームに対応するアドレス変換テーブル４２２において、参照先ＶＯＬ＃９０２にコピー元の提供ボリュームのＶＯＬ＃が設定されている場合には、データセットが他から参照されていると判定する。別の方法としては、ＶＯＬ＃に対応し、ボリューム内の各ＶＯＬ内アドレスに対応するビットを含むビットマップを記憶するようにし、各ビットを対応するＶＯＬ内アドレスの領域が他から参照されているか否かを示す値に設定するようにし、そのビットマップを参照することにより、判定する方法がある。
【０１４８】
判定の結果、他から参照されていない場合（Ｓ２６０１：Ｎｏ）には、ストレージコントローラ１０１は、処理をステップＳ２６０７に進める。
【０１４９】
一方、他から参照されている場合（Ｓ２６０１：Ｙｅｓ）には、旧データセットは、他の提供ボリュームから参照されているため、コピー元の提供ボリュームをライト対象のデータセット（ライトデータセット）に更新する前に、この旧データセットを共通領域８０に新たに確保したページへの退避コピーが必要になる。ここで、コピー先のボリュームは有効領域であるため、共通領域８０へのコピーをする。ストレージコントローラ１０１は、共通ブロック６０１Ｃに対応した追記ボリューム６０２Ｃにページを割り当てる（Ｓ２６０２）。
【０１５０】
次いで、ストレージコントローラ１０１は、旧データセットを読み出して圧縮し（Ｓ２６０３）、圧縮後データセットを、追記共通ページに追記する（Ｓ２６０４）。
【０１５１】
ストレージコントローラ１０１は、共通ボリューム５０１Ｃのアドレス変換テーブル４２２を更新する（Ｓ２６０５）。具体的には、ストレージコントローラ１０１は、アドレス変換テーブル４２２の共通ブロック６０１Ｃの論理アドレスに対応するエントリにおける参照先ＶＯＬ＃９０２に追記ボリューム５０２ＣのＶＯＬ＃を設定し、参照先ＶＯＬ内アドレス９０３に追記共通ページ（共通ページ５１Ｃ）におけるサブブロック６０２Ｃ（圧縮後データセットが存在するサブブロック６０２Ｃ）の論理アドレスを設定する。
【０１５２】
次に、ストレージコントローラ１０１は、提供ボリューム５０１Ｓのアドレス変換テーブルを更新する（Ｓ２６０６）。すなわち、ストレージコントローラ１０１は、アドレス変換テーブル４２２の提供ブロック６０１Ｐの論理アドレスの参照先を、追記単独ページにおけるサブブロック６０２Ｐ（圧縮後データセットが存在するサブブロック６０２Ｐ）の論理アドレスに代えて、共通ブロック６０１Ｃの論理アドレスに更新する。具体的には、ストレージコントローラ１０１は、アドレス変換テーブル４２２の提供ブロック６０１Ｐの論理アドレスに対応するエントリの参照先ＶＯＬ＃９０２に共通ボリューム５０１ＣのＶＯＬ＃を設定し、参照先ＶＯＬ内アドレス９０３に共通ブロック６０１Ｃの論理アドレスを設定する。
【０１５３】
ステップＳ２６０７では、提供ボリューム５０１Ｐの単独領域７０のページのライト対象の領域にライトデータセットを上書きして更新し（Ｓ２６０７）、処理を終了する。
ステップＳ２６０７にて、提供ボリュームが管理するサイズ（ブロック）より、ライト要求されたデータセットのサイズが小さい場合には、ライト要求の対象位置が含まれるブロックを一旦読み出し、圧縮されている場合には伸張し、ライトデータをブロックの対象部分に上書きし、その後、ブロック全体を再度圧縮する処理を行う。
【０１５４】
なお、この後、図１５に示す重複判定処理が実行されると、共通ブロックが他の提供ボリュームのブロックと重複していたら、重複管理テーブル４３０が更新されることとなる。この場合、重複管理テーブル４３０においては、重複先ブロック（共通ブロック６０１Ｃ）の論理アドレスの参照元が、コピー元の２つの提供ブロック６０１Ｐの論理アドレスに更新される。
【０１５５】
次に、図１６に示すように複製後のペアがサスペンド状態になった時に無効領域であるコピー元の提供ボリュームのデータセットＡに他のデータセットＥをライトするライト要求を受信した場合のライト処理の具体例について説明する。
【０１５６】
図１７は、一実施形態に係るボリュームペアがサスペンド状態であるときのコピー元ボリュームへのライト処理を説明する図である。なお、図１６を適宜参照して説明する。
【０１５７】
機能無効コピー元ボリュームライト処理のステップＳ２６０１では、データセットＡは、提供ボリューム＃１とは別の提供ボリューム＃１１から参照されているため、処理は、ステップＳ２６０２へ進む。データセットＡは、提供ボリューム＃１１から参照されているため、提供ボリューム＃１の単独データセットＡを更新する前に、データセットＡを共通領域８０に新たに確保したページ＃２に退避コピーが必要になる。複製先の提供ボリューム＃１１が有効領域であるため、共通領域８０へのコピーをする。
【０１５８】
ステップＳ２６０２では、ストレージコントローラ１０１は、共通ブロック６０１Ｃに対応した追記ボリューム＃３にページを割り当てる。割り当てられたページは、追記共通ページ（共通ページ５１Ｃ）である。ステップＳ２６０３では、ストレージコントローラ１０１は、データセットＡを読み出して圧縮し、ステップＳ２６０４では、圧縮後データセットＡ´を、追記共通ページに追記する。
【０１５９】
ステップＳ２６０５では、ストレージコントローラ１０１は、アドレス変換テーブル＃３を更新し、ステップＳ２６０６では、提供ボリューム＃１１のアドレス変換テーブルを更新する。ステップＳ２６０７では、ストレージコントローラ１０１は、データセットＡを共通ブロックへ退避コピーした後、提供ボリューム＃１の単独領域７０のページ＃１の単独データセットＡが格納されていた領域にデータセットＥを上書きして更新する。
【０１６０】
この結果、提供ボリューム＃１は、更新後のデータセットＥをサーバシステム２０１に提供することができるとともに、提供ボリューム＃１１は、圧縮後データセットＡ´を伸張することにより、旧データセットＡをサーバシステム２０１に提供することができる。
【０１６１】
次に、複製後のペアがサスペンド状態になった時に有効領域であるコピー先の提供ボリュームのデータセットに他のデータセットをライトするライト要求を受信した場合のライト処理について説明する。
【０１６２】
図２０は、一実施形態に係る機能無効コピー先ボリュームライト処理のフローチャートである。図２０は、図１のステップＳ１５に対応する処理である。
【０１６３】
ストレージコントローラ１０１は、提供ボリューム５０１Ｓのデータセットは提供ボリューム５０１Ｐのデータセットを参照しているため、共通領域８０の共通ページ５１Ｃに領域を確保し（Ｓ２７０１）、ライト対象のデータセット（ライトデータセット）を圧縮し（Ｓ２７０２）、圧縮後のデータセットを共通領域８０の共通ページ５１Ｃに追記する（Ｓ２７０３）。この際、ストレージコントローラ１０１は、圧縮後のデータセットを、共通ページ５１Ｃにおける使用済み共通ブロックの後のアドレスの領域に追記する。
ステップＳ２７０２にて、提供ボリュームが管理するサイズ（ブロック）より、ライト要求されたデータセットのサイズが小さい場合には、ライト要求の対象位置が含まれるブロックを一旦読み出し、圧縮されている場合には伸張し、ライトデータをブロックの対象部分に上書きし、その後、ブロック全体を再度圧縮する処理を行う。
【０１６４】
次いで、ストレージコントローラ１０１は、ライト要求の対象領域に対するアクセスがあった場合に、共通ページ５１Ｃに追記された圧縮後のデータセットを参照できるように、共通ボリューム５０１Ｃのアクセス変換テーブル４２２を更新する（Ｓ２７０４）。なお、アクセス変換テーブル４２２の更新は、Ｓ２６０５と同様であるので詳細については省略する。
【０１６５】
次いで、ストレージコントローラ１０１は、提供ボリューム５０１Ｓのアクセス変換テーブル４２２を更新する（Ｓ２７０５）。具体的には、ストレージコントローラ１０１は、アドレス変換テーブル４２２のライト要求の対象領域の提供ブロック６０１Ｓの論理アドレスに対応するエントリの参照先ＶＯＬ＃９０２に共通ボリューム５０１ＣのＶＯＬ＃を設定し、参照先ＶＯＬ内アドレス９０３に共通ブロック６０１Ｃの論理アドレスを設定する。
【０１６６】
次いで、ストレージコントローラ１０１（詳細には、データ量削減プログラム４１４を実行するプロセッサ２２１）は、旧サブブロックの参照元（旧参照元）が、ライト先ブロックの論理アドレスであるか否か、すなわち、単独領域７０であるか否かを判定する（Ｓ２７０６）。ここで、「旧サブブロック」とは、ライトデータセットの圧縮後データセットの更新前の圧縮後データセットを格納したサブブロックである。すなわち、ステップＳ２７０６では、ライトデータセットが、単独領域７０内のデータセットの更新後のデータセットであるか、共通領域８０内のデータセットの更新後のデータセットであるかを判定している。
【０１６７】
この結果、旧参照元が単独領域７０であると判定された場合（Ｓ２７０６：Ｙｅｓ）には、ストレージコントローラ１０１は、旧参照元の旧サブブロックを未使用化し（Ｓ２７０７）、処理を終了する一方、旧参照元が単独領域７０であると判定されていない場合（Ｓ２７０６：Ｎｏ）には、処理を終了する。
【０１６８】
次に、図１８に示すように複製後のペアがサスペンド状態になった時に有効領域である複製先の提供ボリューム＃１１のデータセットＢに他のデータセットＦをライトするライト要求を受信した場合のライト処理の具体例について説明する。
【０１６９】
図１９は、一実施形態に係るボリュームペアがサスペンド状態であるときのコピー先ボリュームへのライト処理を説明する図である。なお、図２０を適宜参照して説明する。
【０１７０】
機能無効コピー先ボリュームライト処理のステップＳ２７０１では、提供ボリューム＃１１のデータセットＢが提供ボリューム＃１のデータセットＢを参照しているため、ストレージコントローラ１０１は、共通領域８０のページ＃２に領域を確保し、Ｓ２７０２でデータセットＦを圧縮し、Ｓ２７０３で圧縮後のデータセットＦ´をページ＃２に追記する。
【０１７１】
次いで、ストレージコントローラ１０１は、Ｓ２７０４で共通ボリュームのアクセス変換テーブルを更新し、Ｓ２７０５で提供ボリューム＃１１のアクセス変換テーブルを更新する。次いで、ストレージコントローラ１０１は、Ｓ２７０６で、旧参照元が単独領域７０ではないと判定し（Ｓ２７０６：Ｎｏ）、処理を終了する。
【０１７２】
なお、この後、提供ボリューム＃１１のデータセットＦに対して、データセットＨのライト要求を受信した場合には、ストレージコントローラ１０１は、共通領域８０のページ＃２の新たな領域を確保し、データセットＨを圧縮して格納する。
【０１７３】
次に、コピー元の提供ボリュームが有効領域であり、コピー先の提供ボリュームも有効領域である場合において、提供ボリュームを複製する例を、図２１〜図２３を参照して説明する。なお、この例は、スナップショットのＲＯＷ方式を採用した方法である。
【０１７４】
図２１は、一実施形態に係る両方が有効領域であるボリュームペアの複製を説明する図である。
【０１７５】
ここで、複製前において、コピー元の提供ボリューム＃１は、単独領域７０に存在する単独データセットＡ´（データセットＡを圧縮したデータセット）と単独データセットＢ´（データセットＢを圧縮したデータセット）とを持っているとすると、複製後においては、提供ボリューム＃１のコピー先のボリューム＃１１も、単独データセットＡ´と単独データセットＢ´を参照するようになる。このため、共通領域８０のページ＃２を確保し、単独データセットＡ´と単独データセットＢ´とを読み出し伸張し、伸張したデータセットＡとデータセットＢとを圧縮し、共通領域８０のページ＃２へ格納する。この結果、データセットＡ´とデータセットＢ´とは重複データセットになる。
【０１７６】
提供ボリューム＃１のアドレス変換テーブル４２２において、データセット（データセットＡ´、データセットＢ´）が格納される領域に対応するエントリ、すなわち、その領域のボリューム内アドレスがＶＯＬ内アドレス９０１に格納されるエントリにおいて、参照先ＶＯＬ＃９０２には、共通ボリューム５０１ＣのＶＯＬ＃が格納され、参照先ＶＯＬ内アドレス９０３には、データセットが格納されているボリューム内アドレスが格納される。
【０１７７】
次に、複製後の有効領域であるボリュームペアがサスペンド状態になった時に提供ボリュームのデータセットに他のデータセットをライトするライト要求を受信した場合のライト処理について説明する。
【０１７８】
図２３は、一実施形態に係る機能有効ライト処理のフローチャートである。図２３は、図１のステップＳ１６に対応する処理である。
【０１７９】
ストレージコントローラ１０１は、単独領域７０にライト対象の提供ボリュームが使用するためのページがあるか否か判定する（Ｓ２８０１）。具体的には、ストレージコントローラ１０１は、旧サブブロックであるサブブロック６０２の参照元（旧参照元）が、提供ボリューム５０１（５０１Ｐ，５０１Ｓ）におけるいずれかの提供ブロック６０１Ｐの論理アドレスであるか否かを判定する。ここで、「旧サブブロック」とは、ライト対象の圧縮後データセットの更新前の圧縮後データセット（旧圧縮後データセット）を格納したサブブロックである。「ライト対象の圧縮後データセット」とは、ライト先の提供ブロック６０１Ｐへのライト対象のデータセットＥの圧縮後データセットである。
【０１８０】
この結果、ページがある場合（Ｓ２８０１：Ｙｅｓ）には、処理をステップＳ２８０３に進める一方、ページがない場合（２８０１：Ｎｏ）には、単独領域７０に新たなページを確保し、提供ボリューム５０１の提供ブロック６０１Ｐに割り当て（Ｓ２８０２）、処理をステップＳ２８０３に進める。
【０１８１】
次いで、ストレージコントローラ１０１は、ライト対象のデータセットを圧縮し（Ｓ２８０３）、圧縮後のデータセット（圧縮後データセット）を単独領域７０の追記単独ページ（単独ページ５１Ｐ）における新たなサブブロックに追記する（Ｓ２８０４）。なお、データセットを圧縮する際に、提供ボリュームが管理するサイズ（ブロック）より、ライト要求されたデータセットのサイズが小さい場合には、ライト要求の対象位置が含まれるブロックを一旦読み出し、圧縮されている場合には伸張し、ライトデータをブロックの対象部分に上書きし、その後、ブロック全体を再度圧縮する処理を行う。
【０１８２】
次いで、ストレージコントローラ１０１は、提供ボリュームのアドレス変換テーブル４２２のライト先の提供ブロック６０１Ｐの論理アドレスの参照先を、重複先ブロックの論理アドレスから、追記したサブブロックの論理アドレスに変更する（Ｓ２８０５）。具体的には、ストレージコントローラ１０１は、提供ボリュームのアドレス変換テーブル４２２のライト先の提供ブロック６０１Ｐの論理アドレスに対応するエントリの参照先ＶＯＬ＃９０２には、追記ボリューム５０２（５０２Ｐ、５０２Ｓ）のＶＯＬ＃を格納し、参照先ＶＯＬ内アドレス９０３には、サブブロックのボリューム内アドレスを格納する。
【０１８３】
次いで、ストレージコントローラ１０１は、重複管理テーブル４３０を更新し（Ｓ２８０６）、処理を終了する。具体的には、ストレージコントローラ１０１は、重複管理テーブル４３０から、旧サブブロックに対応するエントリ１４０２を削除する。
【０１８４】
次に、複製後の有効領域であるボリュームペアがサスペンド状態になった時に提供ボリュームのデータセットに他のデータセットをライトするライト要求を受信した場合のライト処理について説明する。
【０１８５】
図２２は、一実施形態に係る有効領域であるボリュームペアがサスペンド状態であるときの複製元及び複製先ボリュームへのライト処理を説明する図である。なお、図２３を適宜参照して説明する。
【０１８６】
ここで、ストレージコントローラ１０１が、例えば、提供ボリューム＃１のうちの、データセットＢのライト先の提供ブロック６０１Ｐに、データセットＥを書き込むためのライト要求を受信した場合について説明する。
【０１８７】
ストレージコントローラ１０１は、提供ボリューム＃１に対応する追記ボリューム＃１の追記単独ページ（単独ページ５１Ｐ）に対して、旧サブブロックであるサブブロック６０２の参照元（旧参照元）が、提供ボリューム＃１におけるいずれかの提供ブロック６０１Ｐの論理アドレスであるか否かを判定する。
【０１８８】
この例では、ストレージコントローラ１０１は、Ｓ２８０１で、単独領域７０内の提供ボリューム＃１が使用するためのページがあると判定し（Ｓ２８０１：Ｙｅｓ）、処理をＳ２８０２に進める。
【０１８９】
次いで、ストレージコントローラ１０１は、Ｓ２８０３で、ライト対象のデータセットＥを圧縮し、Ｓ２８０４で、圧縮後データセットＥ´を追記単独ページ（単独ページ５１Ｐ）における新たなサブブロックに追記し、Ｓ２８０５で、ライト先の提供ブロック６０１Ｐの論理アドレスの参照先を、重複先ブロックの論理アドレスから、新たなサブブロックの論理アドレスに変更し、Ｓ２８０６で、重複ブロックの重複管理テーブル４３０を更新する。
【０１９０】
その後、提供ボリューム＃１１のデータセットＢに対するデータセットＦのライト要求を受けると、ストレージコントローラ１０１は、単独領域７０内に提供ボリューム＃１１が使用するための新たなページ＃３を確保する。次いで、ストレージコントローラ１０１は、データセットＦを圧縮し、確保したページ＃３へ格納する。次いで、ストレージコントローラ１０１は、提供ボリューム＃１１のアドレス変換テーブル４２２を、データセットＦを参照できるように更新する。
【０１９１】
この結果、提供ボリューム＃１は、更新後のデータセットＥを、圧縮データセットＥ´を伸張することにより、サーバシステム２０１に提供することができるとともに、提供ボリューム＃１１は、圧縮後データセットＦ´を伸張することにより、データセットＦをサーバシステム２０１に提供することができる。
【０１９２】
例えば、追記単独ページにおいて、有効な圧縮後データセット（有効なサブブロック６０２Ｐ）の論理アドレスが非連続となる状況、すなわち、有効な圧縮後データセットが離散した状況になったら、単独領域７０に関して、有効な圧縮後データが連続するようにするガベージコレクション処理を行うようにしてもよい。
【０１９３】
また、共通ボリューム５０１Ｃにおける重複先ブロック（共通ブロック６０１Ｃ）が、いずれの提供ボリューム５０１（５０１Ｐ、５０１Ｓ）における提供ブロック６０１（６０１Ｐ，６０１Ｓ）からも参照されなくなっているにも関わらず、使用中のままとなり、結果として、共通ボリューム５０１Ｃの空き容量が増えず、且つ、不必要な圧縮後データブロックが共通ページ５１Ｃに残り続けてしまう状況になったら、ストレージコントローラ１０１は、重複先ブロックを未使用とするための解放処理を行うようにしてもよい。
【０１９４】
データ量削減プログラム４１４は、例えば定期的に、又は、データ量削減要求がある場合に、対象となるデータセットについて重複排除処理を行うようにしてもよい。また、選択されたデータセットが単独データセットであるが故に重複排除がされなかった場合、データ量削減プログラム４１４は、重複排除されなかった単独データセットについて追記処理を行ってもよい。選択されたデータセットが重複データセットであるが故に重複排除がされた場合、又は、追記処理の後、データ量削減プログラム４１４は、選択されたデータセットを破棄（例えばキャッシュメモリ４０２から削除）してもよい。
【０１９５】
以上説明したように、スナップショットで作成したボリュームを使用する際に、コピー元のボリュームが有効領域であるか否かでライト処理の方法が異なる。本実施形態によると、ユーザが、コピー元のボリュームが有効領域であるか否かの属性を意識することなく、スナップショットでボリュームを作成し、作成されたボリュームを容易且つ適切に利用することができる。また、ユーザのスナップショット操作が一元化されるので、運用が容易化され、ユーザの負荷を低減できる。また、ユーザに対して、有効領域のボリュームと無効領域のボリュームとのスナップショットボリュームを提供でき、ユーザの要求するテスト環境で使用できるボリュームのバリエーションを増やすことができ、幅広いデータ利活用方法を提供できる。これにより、全体としてユーザへのサービスの向上を実現することができる。
【０１９６】
次に、ストレージシステム２００がサーバシステム２０１からリード要求を受信した場合に実行されるリード処理について説明する。
【０１９７】
図２４は、一実施形態に係るリード処理のフローチャートである。
【０１９８】
リードプログラム４１１（正確には、リードプログラム４１１を実行するプロセッサ２１１）は、ＶＯＬ管理テーブル４２１を基に、リード要求に従うリード元が有効領域であるか否かを判定する（ステップ２５０１）。この結果、判定結果が真の場合、すなわち、リード元が有効領域である場合（ステップ２５０１：Ｙｅｓ）には、リードプログラム４１１は、特定したボリュームに対応したアドレス変換テーブル４２２を参照する（ステップ２５０６）。
【０１９９】
次いで、リードプログラム４１１は、特定したボリュームを構成する各ブロックを、アドレス変換テーブル４２２に基づいて特定し、特定した各ブロックを対象に、以下の処理（Ｓ２５０７〜Ｓ２５１０）を行う。ここで、本フローチャートの説明において、対象とするブロックを対象ブロックという。
【０２００】
まず、リードプログラム４１１は、対象ブロックの参照先のボリュームが単独領域であるか否かを判定する（Ｓ２５０７）。具体的には、リードプログラム４１１は、対象ブロックに対応したアドレス変換テーブル４２２のエントリの参照先ＶＯＬ種別９０５の値が“単独”であるか否かを判定する。
【０２０１】
ステップＳ２５０７の判定結果が偽の場合、すなわち、参照先のボリュームが単独領域でない場合（Ｓ２５０７：Ｎｏ）には、リードプログラム４１１は、対象ブロックに対応したエントリの参照先ＶＯＬ＃９０２及び参照先ＶＯＬ内アドレス９０３の値が示す共通ボリューム５０１Ｃに対応したアドレス変換テーブル４２２を参照し（Ｓ２５０８）、処理をステップＳ２５０９に進める。
【０２０２】
一方、ステップ２５０７の判定結果が真の場合、すなわち、参照先のボリュームが単独領域である場合（Ｓ２５０７：Ｙｅｓ）には、処理をステップＳ２５０９に進める。
【０２０３】
参照先のボリュームが単独領域である場合（Ｓ２５０７：Ｙｅｓ）又はステップ２５０８の処理を行った場合には、リードプログラム４１１は、対象ブロックに対応したページ５１を、ページ変換テーブル４２５を基に特定し（Ｓ２５０９）、特定したページ５１から、対象ブロックに対応する圧縮後データセットを読み出し、圧縮後データセットを伸張し、伸張後データセットをキャッシュメモリ４０２に格納する（Ｓ２５１０）。
【０２０４】
ステップＳ２５０１の判定結果が真の場合（Ｓ２５０１：ＹＥＳ）において、リード元のボリュームを構成する各ブロックについてステップ２５１０までの処理が終了すると、リード要求に従うデータがキャッシュメモリ４０２に格納されるため、リードプログラム４１１は、キャッシュメモリ４０２に格納されたデータをリード要求の発行元に転送し（Ｓ２５１１）、処理を終了する。
【０２０５】
一方、ステップＳ２５０１の判定結果が偽の場合、すなわち、ロード元が有効領域でない場合（Ｓ２５０１：ＮＯ）には、リードプログラム４１１は、リード元のボリュームに割り当てられているページ５１を、ページ変換テーブル４２５を基に特定し（Ｓ２５０９）、特定したページ５１から、リード対象のデータを読み出し（Ｓ２５１０）、読み出したデータをリード要求に送信元に転送し（Ｓ２５１１）、処理を終了する。
【０２０６】
次に、ストレージシステム２００における重複排除処理について詳細に説明する。
【０２０７】
図２５は、一実施形態に係る重複排除処理のフローチャートである。
【０２０８】
ここで、図２５の説明において、重複排除処理の処理対象のデータセットを「ライトデータセット」といい、ライトデータセットのライト先のブロックを「ライト先ブロック」といい、ライト先ブロックを含んだ論理ボリュームを「ライト先ボリューム」という。
【０２０９】
データ量削減プログラム４１４（正確には、データ量削減プログラム４１４を実行するプロセッサ２１１）は、ライトデータセットについて他のデータセットと重複しているかを判定する重複判定処理を行う（Ｓ２２０１）。なお、データセットが重複しているかを判定する処理については、公知の技術であるのでここでは詳細な説明を省略する。
【０２１０】
次いで、データ量削減プログラム４１４は、この重複判定処理の結果により、ライトデータセットが重複しているか否かを判定する（Ｓ２２０２）。この結果、ライトデータセットが重複していないデータセット（単独データセット）である場合（Ｓ２２０２：Ｎｏ）には、データ量削減プログラム４１４は、この処理対象のデータセットに対する重複排除処理を終了する。
【０２１１】
一方、ライトデータセットが重複しているデータセット（重複データセット）である場合（Ｓ２２０２：Ｙｅｓ）には、データ量削減プログラム４１４は、ライトデータセットと重複する別の重複データセットが単独領域７０に存在するか否かを判定する（ステップ２２０３）。
【０２１２】
ここで、重複判定処理の対象とされるデータは、典型的には、所定の処理対象のデータであり、ブロックのサイズよりも大きい。このため、重複判定処理は、ブロック単位（データセット単位）で行われてもよいが、本実施形態では、ブロック単位に代えて処理対象のデータの単位でまとめて行うようにしている。具体的には、例えば、処理対象のデータは、いずれかの提供ボリューム５０１Ｐに対するライト要求に従うデータであり、ライト要求に従うデータのサイズは、ブロックのサイズの整数倍でよく、重複判定処理は、ライト要求に従うデータの単位（すなわち、Ｉ／Ｏ要求の単位）で行われてもよい。例えば、重複判定処理は、処理対象のデータの単位でまとめて行われると、効率的である。
【０２１３】
また、図２５の以下の説明において、ライトデータセットと、そのライトデータセットと重複する別のデータセットとを、「重複データセット」と総称する。すなわち、「重複データセット」は、ライトデータセットを含む２以上のデータセットのうちのいずれであってもよい。
【０２１４】
ステップＳ２２０３の判定は、具体的には、例えば、ライト先ブロックに対応したＶＯＬのＶＯＬ番号が、ＶＯＬ管理テーブル４２１のＶＯＬ属性８０２が“提供”であるエントリのＶＯＬ＃８０１のＶＯＬ＃と一致するか、或いはＶＯＬ属性８０２が“共通”のエントリのＶＯＬ＃８０１のＶＯＬ＃と一致するかに基づいて行うことができる。ライト先ブロックに対応したＶＯＬのＶＯＬ＃が、ＶＯＬ属性８０２が“提供”のエントリのＶＯＬ＃８０１のＶＯＬ＃と一致すれば、別の重複データセットが単独領域７０に存在することを示しているので、ステップＳ２２０３における判定結果は、真（ＹＥＳ）となる。一方、ライト先ブロックに対応したＶＯＬのＶＯＬ番号が、ＶＯＬ属性８０２が“共通”のエントリのＶＯＬ＃８０１のＶＯＬ＃と一致すれば、別の重複データセットが共通領域８０に存在することを示しているので、ステップＳ２２０３の判定結果は、偽（ＮＯ）となる。
【０２１５】
ステップＳ２２０３の判定結果が真の場合（Ｓ２２０３：ＹＥＳ）には、データ量削減プログラム４１４は、共通領域割当管理テーブル４３１を参照し、対応するエントリの使用中フラグ１８０２が“未使用”である共通ブロック６０１Ｃを選択する（Ｓ２２０４）。以下の説明において、この共通ブロック６０１Ｃを、「対象共通ブロック」といい、対象共通ブロックを含む共通ボリューム５０１Ｃを、「対象共通ボリューム」という。
【０２１６】
次いで、データ量削減プログラム４１４は、重複データセットを圧縮し、その圧縮後データセットを、対象共通ボリュームに対応する追記ボリューム５０２に割り当てられた共通ページ５１Ｃ（追記共通ページ、特に対象共通ブロック）に追記する（Ｓ２２０５）。
【０２１７】
次いで、データ量削減プログラム４１４は、重複データセットの追記に基づいて、重複管理テーブル４３０を更新する（Ｓ２２０６）。具体的には、データ量削減プログラム４１４は、重複管理テーブル４３０の対象共通ブロックに対応するアドレスに対して、参照元となる１以上の重複データセットのそれぞれに対応する１以上のブロック６０１を示すエントリ１４０２を関連付ける。
【０２１８】
次いで、データ量削減プログラム４１４は、ライトデータセット以外の重複データセットを格納する提供ボリューム５０１Ｐに対応するアドレス変換テーブル４２２を更新する（Ｓ２２０９）。具体的には、データ量削減プログラム４１４は、アドレス変換テーブル４２２の重複データセットが格納されていた領域に対応するエントリの参照先ＶＯＬ＃９０２、及び、参照先ＶＯＬ内アドレス９０３を、対象共通ボリュームの番号、及び、対象共通ブロックの論理アドレスに更新し、且つ、参照先ＶＯＬ種別９０５を“共通”に変更する。
【０２１９】
次いで、データ量削減プログラム４１４は、ライトデータセット以外の重複データセットを格納する提供ボリューム５０１Ｐに対応した追記ボリューム５０２に関するサブブロック管理テーブル４２７を更新する（Ｓ２２１０）。具体的には、データ量削減プログラム４１４は、サブブロック管理テーブル４２７のライトデータセット以外の重複データセットの圧縮後データセットを格納するサブブロックに対応するエントリの割当フラグ１３０３を“未割当”に変更する。
【０２２０】
一方、ステップＳ２２０３の判定結果が偽の場合（Ｓ２２０３：ＮＯ）、データ量削減プログラム４１４は、重複管理テーブル４３０を更新する（Ｓ２２１１）。具体的には、データ量削減プログラム４１４は、重複管理テーブル４３０において、重複データセットを格納した共通ブロック６０１Ｃに対応するアドレスに対して、ライト先ブロックを示すエントリ１４０２を関連付ける。
【０２２１】
ステップＳ２２１０又はステップＳ２２１１を実行した後、データ量削減プログラム４１４は、ライト先ボリュームに対応したアドレス変換テーブル４２２を更新する（Ｓ２２１３）。具体的には、データ量削減プログラム４１４は、アドレス変換テーブル４２２のライト先ブロック（ライトデータセット）に対応するエントリの参照先ＶＯＬ＃９０２、及び、参照先ＶＯＬ内アドレス９０３を、共通ボリューム５０１Ｃの番号、及び、共通ブロック６０１Ｃの論理アドレスに変更し、且つ、参照先ＶＯＬ種別９０５を“共通”に変更する。
【０２２２】
次いで、データ量削減プログラム４１４は、ライトデータセットの圧縮後データセットが追記単独ページにあれば、ライト先ボリュームに対応する追記ボリューム５０２に関するサブブロック管理テーブル４２７を更新し（Ｓ２２１４）、処理を終了する。具体的には、データ量削減プログラム４１４は、サブブロック管理テーブル４２７において、ライトデータセットの圧縮後データセットを格納するサブブロックに対応するエントリの割当フラグ１３０３を“未割当”に変更する。
【０２２３】
上記した重複排除処理は、ポストプロセスとしての処理として説明しているが、例えば、重複排除処理をインプロセスとしての処理とする場合には、例えば、図２５のステップＳ２２１４の処理を行わなくてもよい。これは、ライトデータセットの圧縮後データセットを追記すること無しに、又はライトデータセットの圧縮をすること無しに重複排除がされるためである。
【０２２４】
以上説明したように、上記した実施形態に係るストレージシステム２００によると、スナップショットに係るボリュームの記憶領域の属性をユーザが意識することなく、適切にボリュームに対するＩ／Ｏを処理することができる。
【０２２５】
なお、本発明は、上述の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で、適宜変形して実施することが可能である。
【０２２６】
例えば、上記実施形態では、Ｉ／Ｏ要求の送信元（Ｉ／Ｏ元）をサーバシステム２０１としていたが、本発明はこれに限られず、Ｉ／Ｏ元を、ストレージシステム２００における図示しないプログラム（例えば、ＶＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）上で実行されるアプリケーションプログラム）であってもよい。
【０２２７】
また、上記実施形態において、単独領域７０又は共通領域８０へのデータの格納を、ブロック単位（データセット単位）で行うようにしてもよく、ブロック単位に代えて処理対象のデータの単位（例えば、ブロックのサイズよりも大きい単位）でまとめて行うようにしてもよい。具体的には、例えば、処理対象のデータは、いずれかの提供ボリューム５０１Ｐに対するライト要求に従うデータであり、ライト要求に従うデータのサイズは、ブロックのサイズの整数倍でよく、単独領域７０又は共通領域８０へのデータの格納を、ライト要求に従うデータの単位（すなわち、Ｉ／Ｏ要求の単位）で行うようにしてもよい。このように、単独領域７０又は共通領域８０へのデータの格納を行うと、処理対象のデータの単位でまとめて行うことができるので、効率的である。
【０２２８】
また、上記実施形態において、データ量削減処理として、圧縮処理及び重複排除処理を実行するようにしていたが、本発明はこれに限られず、データ量削減処理として、圧縮処理又は重複排除処理の少なくとも一方を実行するようにすればよい。
【０２２９】
また、上記実施形態において、プロセッサが行っていた処理の一部又は全部を、ハードウェア回路で行うようにしてもよい。また、上記実施形態におけるプログラムは、プログラムソースからインストールされてよい。プログラムソースは、プログラム配布サーバ又は記憶メディア（例えば可搬型の記憶メディア）であってもよい。
【符号の説明】
【０２３０】
７０…単独領域、８０…共通領域、１００…計算機システム、１０１…ストレージコントローラ、２００…ストレージシステム、２０１…サーバシステム、２０５…管理システム、２１１…プロセッサ、２２０…ＰＤＥＶ、５０１…論理ボリューム、５０３…プール
【図１】
2020080130.tif 000003
【図２】
2020080130.tif 000004
【図３】
2020080130.tif 000005
【図４】
2020080130.tif 000006
【図５】
2020080130.tif 000007
【図６】
2020080130.tif 000008
【図７】
2020080130.tif 000009
【図８】
2020080130.tif 000010
【図９】
2020080130.tif 000011
【図１０】
2020080130.tif 000012
【図１１】
2020080130.tif 000013
【図１２】
2020080130.tif 000014
【図１３】
2020080130.tif 000015
【図１４】
2020080130.tif 000016
【図１５】
2020080130.tif 000017
【図１６】
2020080130.tif 000018
【図１７】
2020080130.tif 000019
【図１８】
2020080130.tif 000020
【図１９】
2020080130.tif 000021
【図２０】
2020080130.tif 000022
【図２１】
2020080130.tif 000023
【図２２】
2020080130.tif 000024
【図２３】
2020080130.tif 000025
【図２４】
2020080130.tif 000026
【図２５】
2020080130.tif 000027