(57)【要約】【課題】  スナップショットを複製するために必要となるボリュームの容量を低減する。【解決手段】  運用ボリュームと差分格納ボリュームとを使用して、運用ボリュームに更新が発生した場合に更新前のデータを差分格納ボリュームに退避し、これら二個のボリュームのデータを組み合わせてスナップショットを構成する。スナップショットを構成するために運用ボリュームと差分格納ボリュームのデータ配置を記録したブロックコピー管理テーブルを利用して、スナップショット保存ボリュームにスナップショットを構成するのに必要なデータをコピーし、さらに、コピーした後のデータ配置を保持する別のブロックコピー管理テーブルをボリュームに保存する。スナップショットを構成するデータをコピーしたスナップショット保存ボリュームを、スナップショット読み込みプログラムを使用してアクセスすることで、保存したスナップショットを参照することができる。【選択図】      図１
2006209636.tif 000002
【特許請求の範囲】
【請求項１】
サーバ装置と複数の記憶媒体を持つストレージ装置とから構成されるストレージシステムで実行するスナップショット維持方法であって、
サーバ装置はストレージ装置が持つ第１の記憶媒体を運用ボリュームとして使用し、
前記第１の記憶媒体とは異なる第２の記憶媒体を差分ボリュームとして使用し、
前記第１の記憶媒体とは異なる第３の記憶媒体を保存ボリュームとして使用し、
サーバ装置上で運用ボリュームのデータ更新の差分を差分ボリュームと保存ボリュームに保存して、そのデータの配置を管理することで運用ボリュームのスナップショットを作成して維持するものであって、
データの配置を管理するテーブルの情報に基いて、差分ボリュームのデータを保存ボリュームに移動してスナップショットを保存ボリュームに複製可能であることを特徴とするスナップショット維持方法。
【請求項２】
請求項１記載のスナップショット維持方法において、
運用ボリュームの中で保存ボリュームに格納していないデータを、保存ボリュームにコピーして、
データの配置を管理するテーブルをスナップショットの整合性を維持するように変更したものを保存ボリュームに格納して、
スナップショットを複製した保存ボリュームをストレージシステムから切り離し可能であることを特徴とするスナップショット維持方法。
【請求項３】
請求項２記載のスナップショット維持方法において、
スナップショットを複製した保存ボリュームを切り離したものを、再度接続してスナップショットに参照可能であることを特徴とするスナップショット維持方法。
【請求項４】
請求項３記載のスナップショット維持方法において、
再度接続した保存ボリュームから、運用ボリュームにスナップショットのデータを復元可能であることを特徴とするスナップショット維持方法。
【請求項５】
請求項１記載のスナップショット維持方法において、
データの配置を管理するテーブルをスナップショットの整合性を維持するように変更したものを保存ボリュームに格納して、
保存ボリュームに複製したスナップショットは、運用ボリュームと差分ボリュームによって構成するスナップショットを参照することで整合性を維持し、
スナップショットを複製した保存ボリュームをストレージシステムから切り離し可能であることを特徴とするスナップショット維持方法。
【請求項６】
請求項５記載のスナップショット維持方法において、
スナップショットを複製した保存ボリュームを切り離したものを、再度接続してスナップショットに参照可能であることを特徴とするスナップショット維持方法。
【請求項７】
請求項６記載のスナップショット維持方法において、
再度接続した保存ボリュームから、運用ボリュームにスナップショットのデータを復元可能であることを特徴とするスナップショット維持方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムにおけるスナップショット機能の実現技術に関し、特に、論理ボリュームマネージャによりスナップショットを作成し維持する方法に適用して有効な技術に関するものである。
【背景技術】
【０００２】
情報システムの利用が拡大するにつれ、そのデータを保存するストレージの容量も拡大を続けている。これに伴い、ストレージに保存されたデータの価値が高まり、データへの不正アクセスや誤操作によるデータの破壊は、情報システムを運営する上で大きな損失となる。そのため、データの破壊を防止する目的で、またデータを破壊した場合に復旧を行えるようにする目的でデータ保護機能が重要になっている。
【０００３】
スナップショット機能は、ストレージシステムのデータ保護機能の一つとして使用する。スナップショット機能を用いれば、ストレージシステム内でデータを保存して運用中のボリュームのデータをある時点で静止化したイメージであるスナップショットを作成し維持することができる。スナップショットは、運用中のボリュームとは別の手段でアクセス可能であり、作成した時点のデータを参照することができる。そのため、運用中のボリュームのデータを破壊してしまった場合、スナップショット作成時点のデータを復元することができる。
【０００４】
スナップショットの作成と維持を実現する方法として、データの処理や制御を行うサーバ装置上の論理ボリューム機能を利用する方法、ファイルシステム機能を利用する方法がある。
【０００５】
論理ボリューム機能を利用する方法では、例えばＬｉｎｕｘカーネルのＬｏｇｉｃａｌ  Ｖｏｌｕｍｅ  Ｍａｎａｇｅｒ（ＬＶＭ）が上げられる(非特許文献１参照)。ＬＶＭで、運用中のボリューム、つまり運用論理ボリュームのスナップショットを作成する場合、もう一つ別の論理ボリュームを差分格納用論理ボリュームとして用意する必要がある。そして、スナップショットを作成した後に、運用論理ボリュームで更新（書き込み）が発生すると、更新前のデータを差分格納用論理ボリュームにコピーする。ＬＶＭは運用論理ボリュームのデータと差分格納用論理ボリュームのデータとを組み合わせて、スナップショット作成時のボリュームイメージを仮想的な論理ボリュームの形式でスナップショットとして構成可能にする機能を持つ。この機能は、スナップショットのデータが運用論理ボリュームに存在するか、差分格納用論理ボリュームに存在するかを表すテーブルを保持することで実現している。
【０００６】
また、ファイルシステム機能を利用する方法では、Ｗｒｉｔｅ−ａｎｙｗｈｅｒｅファイルシステムがある(例えば、特許文献１)。Ｗｒｉｔｅ−ａｎｙｗｈｅｒｅファイルシステムでは、以下のようにスナップショットを作成する。ファイルシステムは、ｉｎｏｄｅにファイルのデータ配置ブロックを保持しているが、スナップショットを作成した後にファイルが変更されると、ｉｎｏｄｅを複製してデータの変更部分の配置を複製した新しいｉｎｏｄｅに保持する。そして、変更前のｉｎｏｄｅをスナップショット用のｉｎｏｄｅとして利用する。運用中のファイルシステムへのアクセスの際には、最新のｉｎｏｄｅによってデータの配置を認識し、スナップショットへのアクセスの際には、スナップショット用のｉｎｏｄｅによってデータの配置を認識するようにして、それぞれのデータのアクセスを可能にする。
【０００７】
このようにスナップショットを作成すると、運用中のボリュームやファイルシステムへのアクセスを継続したまま、過去のボリュームイメージやファイルシステムイメージを保存することが出来る。そして、スナップショットを参照して、誤って削除したデータを復旧したり、ディスク以外のメディアへのデータのバックアップをしたりできる。
【０００８】
さらに、スナップショットの時系列順の並びを保存したまま、別のメディアに複製して、データの保護を行う方法がある。
【０００９】
例えば、ＬＶＭによってスナップショットを作成した場合、運用論理ボリュームと差分格納用論理ボリュームを、ストレージ装置のボリュームコピー機能（例えば、非特許文献２）によって複製することで、スナップショットを維持するのに必要なボリュームのデータを複製することができる。
【００１０】
また、ファイルシステムでスナップショットを作成している場合、２つのスナップショット間の変化を判定して、別のサーバに送信することでスナップショットを複製する方法がある（例えば、特許文献２）。
【特許文献１】米国特許第５８１９２９２号
【特許文献２】特開２００４−３８９２８公報
【非特許文献１】ＡＪ  Ｌｅｗｉｓ著  「ＬＶＭ  ＨＯＷＴＯ」  ｈｔｔｐ：／／ｉｂｉｂｌｉｏ．ｏｒｇ／ｐｕｂ／Ｌｉｎｕｘ／ｄｏｃｓ／ＨＯＷＴＯ／ｏｔｈｅｒ−ｆｏｒｍａｔｓ／ｐｄｆ／ＬＶＭ−ＨＯＷＴＯ．ｐｄｆ
【非特許文献２】株式会社日立製作所  「Ｈｉｔａｃｈｉ  ＳｈａｄｏｗＩｍａｇｅ」  ｈｔｔｐ：／／ｗｗｗ．ｈｉｔａｃｈｉ．ｃｏ．ｊｐ／Ｐｒｏｄ／ｃｏｍｐ／ｓｔｏｒａｇｅ／ｄｉｓｋａｒｒａｙ／ｐｒｏｄｕｃｔｓ／ｓｏｆｔｗａｒｅ／ｒ＿ｓｈａｄｏｗ／ｉｎｄｅｘ．ｈｔｍｌ
【発明の開示】
【発明が解決しようとする課題】
【００１１】
スナップショットを運用中のボリュームや差分格納用ボリューム以外に複製するためには、スナップショットを1個のボリュームとして別ボリュームにコピーする方法、運用中のボリュームや差分格納用ボリューム全てを別ボリュームにコピーする方法、あるいはファイル毎に差分を検索してコピーする方法があった。
【００１２】
スナップショップを１個のボリュームとして別ボリュームにコピーする方法では、スナップショットをコピーするためにボリュームを１個用意してそこに格納する。そのため、ボリュームの容量はスナップショットと同量必要となり、格納するスナップショットの数が増えると多数のボリュームを必要とするという課題がある。
【００１３】
また、運用中のボリュームと差分ボリューム全てを別ボリュームにコピーする方法も、同様にボリュームを大量に必要とする課題がある。論理ボリューム機能によって作成したスナップショットでは、スナップショットを作成した後では参照を必要としない最新の運用中のボリュームのデータもある。また、あるデータについて、スナップショットを構成するための差分データがあれば、同じデータの運用ボリュームに存在する部分は参照しないためコピーする必要がない。しかし、ボリュームごとコピーする方法であるため、それら本来コピーの必要がないデータも格納する必要がある。そのため、ボリュームの消費量が多量になる。
【００１４】
ファイル毎に差分を検索する方法は、上記二点の課題は発生しない。しかし、ファイル毎の差分を検索する必要がある。そのため、ファイルが大量にあるファイルシステムである場合、差分を検索する処理の時間が多量に必要になるという課題がある。
【００１５】
そこで、本発明の目的は、スナップショットの複製を保存するのに必要なボリューム容量を低減し、かつファイルシステムのファイル数に依存しない処理量でスナップショットを複製する技術を提供することにある。
【課題を解決するための手段】
【００１６】
本発明は、論理ボリュームによりスナップショットを作成して維持する方法を持つストレージシステムに適用される。
【００１７】
スナップショットの維持は、ファイルシステムの運用を行う運用ボリュームと、スナップショット作成後に運用ボリュームのデータを更新した際に生じる差分を格納する差分格納ボリュームと、スナップショットの差分を移動してスナップショットを保存するためのスナップショット保存ボリュームを組み合わせて行う。
【００１８】
スナップショットを作成して維持している間は、運用ボリュームと差分格納ボリュームと、それらのデータの配置状態を保存してスナップショットを構成するために用いるブロックコピー管理テーブルを用いて稼動する。ブロックコピー管理テーブルは、運用ボリュームの差分を差分格納ボリュームに格納する際、差分格納ボリュームのどのブロックにコピーしたか、どのスナップショットに属するのかを保存している。そして、スナップショットを参照するとこのブロックコピー管理テーブルの情報を用いて、運用ボリュームと差分格納ボリュームのデータを組み合わせてスナップショットを構成する。
【００１９】
あるスナップショットをスナップショット保存ボリュームに移動する場合には、コマンドなどでデータの移動を指示する。すると、ブロックコピー管理テーブルを参照して、差分格納ボリュームに格納してあるデータを、スナップショット保存ボリュームにコピーしてから、ブロックコピー管理テーブルの情報を変更する。つまり、ブロックコピー管理テーブルには、差分格納ボリュームからスナップショット保存ボリュームに、かつコピーしたブロックが変わったことを反映する。また、データのコピーを開始した後で運用ボリュームとの差分が発生した場合、差分データの格納先をスナップショット保存ボリュームに変更する。この手順は、スナップショット1個について指定することも出来るが、複数のスナップショットを指定しても良い。このように、差分の格納を行うデバイスを変更して、スナップショットを維持したまま、スナップショット保存ボリュームへスナップショットを移動する。
【００２０】
さらに、スナップショット保存ボリュームをスナップショットの運用から切り離し、独立して参照することを可能にするため、さらに処理を行う。運用ボリュームのデータをブロックコピー管理テーブルを参照して、必要なものを選択してスナップショット保存ボリュームに格納する。このとき、差分の格納先と、運用ボリュームのデータをコピーした先の配置を管理する、ブロックコピー管理テーブルも同時にスナップショット保存ボリュームに保存する。これにより、スナップショットの構築に必要なデータをすべてスナップショット保存ボリュームに格納する。
【００２１】
スナップショット保存ボリュームを独立して参照するには、スナップショット保存ボリュームから、ブロックコピー管理テーブルを読み出し、その情報を使ってボリューム上のデータにアクセスする。
【発明の効果】
【００２２】
本発明によれば、スナップショットを保存する場合に、ブロックコピー管理テーブルの情報を用いてスナップショット保存に必要なデータを選択する。つまり、差分としてスナップショットのデータが保存してあれば、運用ボリュームから重複してデータを保存する必要がない。そのため、ボリューム全体の複製を作る方法と比較して、スナップショットの保存に必要なボリュームの容量を低減することが出来る。
【００２３】
また、本発明によれば、差分を保存する際に検索する情報は、運用ボリュームの大きさ、つまりブロック数に依存しており、ファイル数には影響を受けない。つまり、大量のファイルが存在するファイルシステムにおいても、差分の検索に必要な処理はボリュームとブロックのサイズにのみ依存する。そのため、ファイルシステムによる方法と比較して、多数のファイルが保存されている場合に、差分の検索に必要な処理を低減することができる。
【発明を実施するための最良の形態】
【００２４】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の機能を有する部材には原則として同一の符号を付し、その繰り返しの説明は省略する。
【００２５】
本発明は、スナップショットの複製を保存するのに必要なボリューム容量を低減するという目的を、スナップショットを作成して維持するのに必要なブロックコピー管理テーブルの情報を利用することで実現可能にするものである。スナップショットの複製を保存する際、ブロックコピー管理テーブルを参照して必要な情報を選択して、スナップショットを保存するボリュームにコピーして処理することを特徴とする。
【００２６】
本発明において、保存したスナップショットの複製を参照するためにスナップショットを保存したボリューム上のブロックコピー管理テーブルを利用する方法（実施の形態１）と、スナップショットを保存したボリューム上のブロックコピー管理テーブルと論理ボリュームマネージャが保持するブロックコピー管理テーブルとの両方を利用する方法（実施の形態２）とがあり、以下において具体的に説明する。
【００２７】
（実施の形態１）
本実施の形態は、スナップショットを保存したボリューム上のブロックコピー管理テーブルを利用して、保存したスナップショットを参照する例である。
【００２８】
図１は、本発明の実施の形態１におけるストレージシステムのシステム構成の一例を示す構成図である。
【００２９】
本実施の形態におけるストレージシステムは、サーバ装置１００とストレージ装置１１０とストレージ装置１２０から構成される。
【００３０】
サーバ装置１００は、処理を行う制御部としての機能を持つＣＰＵ１０１、サーバ装置１００の処理に必要なデータおよびＣＰＵ１０１が実行するソフトウェアを保持するメモリ１０２、サーバ装置１００とストレージ装置１１０とストレージ装置１２０とを接続してそれぞれの間でデータ転送を行うための接続装置としての機能を持つインタフェース１０３を備える。
【００３１】
通常、サーバ装置上では様々なプログラムが動作している。例えば、Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  ＳｔｏｒａｇｅとしてＮＦＳサーバプログラムやデータベースの管理を行うＤａｔａ  Ｂａｓｅ  Ｍａｎａｇｅｍｅｎｔ  Ｓｙｓｔｅｍのように様々なサービスを提供するプログラムが挙げられる。しかし、ここではボリュームのスナップショットを説明することを主眼におくため、これらのプログラムを図示していない。
【００３２】
これらサービスを提供するプログラムに加えて、サーバ装置１００で動作するソフトウェアとして、メモリ１０２上には、スナップショット管理プログラム１０４とストレージ装置１１０とストレージ装置１２０にブロックＩ／Ｏを発行するブロックＩ／Ｏ管理プログラム１０５がある。
【００３３】
スナップショット管理プログラム１０４は、運用ボリュームや差分格納ボリューム、そしてスナップショット保存ボリュームを管理し、スナップショットを作成して維持し、各ボリュームやスナップショットへのアクセスを可能にする。さらにスナップショット管理プログラム１０４は、スナップショットをスナップショット保存ボリュームに格納し、スナップショット保存ボリュームに格納したスナップショットへのアクセスを可能にする。
【００３４】
ブロックＩ／Ｏ管理プログラム１０５は、スナップショット管理プログラム１０４のボリュームへのアクセス要求を、インタフェース１０３を経由してストレージ装置１１０やストレージ装置１２０のコマンドへと変換して、ボリュームのデータアクセスを実行する。例えば、ブロックＩ／Ｏ管理プログラム１０５は、ＬｉｎｕｘカーネルではブロックデバイスドライバやＳＣＳＩドライバに相当する。
【００３５】
ストレージ装置１１０は、データを保持するための記憶装置としての機能を持つディスクドライブ１１１，１１２、ストレージ装置１１０とサーバ装置１００を接続してそれぞれの間でデータ転送を行うための接続装置としての機能を持つインタフェース１１３を備える。
【００３６】
また、ストレージ装置１２０は、データを保持するための記憶装置としての機能を持つディスクドライブ１２１、ストレージ装置１２０とサーバ装置１００を接続してそれぞれの間でデータ転送を行うための接続装置としての機能を持つインタフェース１２２を備える。
【００３７】
それぞれのディスクドライブ１１１，１１２、およびディスクドライブ１２１は、一定のサイズをデータの管理単位であるブロックとして、ブロック単位でアクセス可能である。つまり、データの読み出しや書き込み、さらに他のデータに関するアクセス時には、ブロック単位で指定をする必要がある。これら、データを保存し、後に参照可能にする記憶媒体であるディスクドライブ１１１，１１２，１２１は  それぞれ単体のディスクドライブ装置や、ディスクドライブ装置を複数のパーティションと呼ばれる領域に分割したものである。あるいは、複数のディスクドライブ装置を統合して管理するＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）を用いる方法もある。また、複数のディスクドライブを論理的に１個のディスクドライブとして用いる方法もある。
【００３８】
本実施の形態では、サーバ装置１００上で動作するスナップショット管理プログラム１０４は、ディスクドライブ１１１を運用ボリュームとして、ディスクドライブ１１２を差分格納ボリュームとして、ディスクドライブ１２１をスナップショット保存ボリュームとして使用しているものとする。このような構成は、スナップショット保存ボリュームを通常の運用ボリュームとは別のストレージ装置とすることで、スナップショットの管理を容易にすることを想定している。しかし、運用ボリューム、差分格納ボリューム、スナップショット保存ボリュームは、スナップショット管理プログラム１０４でそれぞれ別のボリュームとして識別できればよいので、本発明を実施する上では同一ストレージ装置上に全ボリュームを配置しても良い。また、ボリュームはそれぞれ別のディスクドライブである必要はなく、ディスクドライブのパーティションや、複数のディスクドライブを組み合わせてボリュームとして実施することもできる。
【００３９】
さらに、本実施の形態では、スナップショットへの書き込みはできず、読み出し専用のボリュームとして説明する。ただし、スナップショット管理プログラム１０４を変更することで、スナップショットが書き込み可能なボリュームとして実施することもできる。
【００４０】
次に、サーバ装置１００で動作するスナップショット管理プログラム１０４について、図２から図６を用いて説明する。
【００４１】
図２は、スナップショット管理プログラム１０４の構成の一例を示す説明図である。スナップショット管理プログラム１０４は、サーバ装置１００で動作するソフトウェアから、運用ボリューム、差分格納ボリューム、スナップショット保存ボリュームへのアクセスを制御し、スナップショットの作成を行うプログラムである。スナップショット管理プログラム１０４を構成するソフトウェアモジュールおよびデータ構造について図２を用いて説明する。
【００４２】
スナップショット管理プログラム１０４は、初期化サブプログラム２０１、読み出し処理サブプログラム２０２、書き込み処理サブプログラム２０３、スナップショット作成サブプログラム２０４、スナップショット削除サブプログラム２０５、スナップショット移動サブプログラム２０６、保存ボリューム切離しサブプログラム２０７、および、保存ボリューム再接続サブプログラム２０８のサブプログラム群と、ブロックコピー管理テーブル２１１、使用ブロック管理テーブル２１２およびコピー先管理テーブル２１３のデータ管理テーブル群からなる。
【００４３】
まず、スナップショット管理プログラム１０４を構成するサブプログラム群について説明する。
【００４４】
初期化サブプログラム２０１は、スナップショット管理プログラム１０４の保持するテーブル群の管理を行う。例えば、ディスクドライブ１１１，１１２，１２１をそれぞれ運用ボリューム、差分格納ボリューム、スナップショット保存ボリュームで使用する場合、それぞれを管理するスナップショット管理プログラム１０４の保持するデータ管理テーブル群の初期化を行う。これは、図７を用いて後に説明する。
【００４５】
読み出し処理サブプログラム２０２は、ブロックコピー管理テーブル２１１とコピー先管理テーブル２１３とを用いて運用ボリュームやスナップショットへのデータ参照を行うために使用する。詳細な処理については、図１０を用いて後に説明する。
【００４６】
書き込み処理サブプログラム２０３は、運用ボリュームへの書き込みを制御し、スナップショットの維持をするために必要な処理である。運用ボリュームへの書き込みが発生するたびに呼び出され、運用ボリュームへの書き込みとスナップショットの維持を行う。その際、差分データを差分格納ボリュームへとコピーし、ブロックコピー管理テーブル２１１を更新する。処理の詳細は、図１１を用いて後に説明する。
【００４７】
スナップショット作成サブプログラム２０４は、運用ボリュームのスナップショットを作成する時点で実行する。この実行後、スナップショットへのアクセスが可能になる。このプログラムは、ブロックコピー管理テーブル２１１とコピー先管理テーブル２１３を更新する。詳細な処理については、図８を用いて後に説明する。
【００４８】
スナップショット削除プログラム２０５は、作成したスナップショットを削除する場合に実行する。このプログラムは、ブロックコピー管理テーブル２１１とコピー先管理テーブル２１３を更新し、差分格納ボリュームやスナップショット保存ボリュームで差分を保存していた領域を解放する処理を行う。詳細な処理手順については、図９を用いて後に説明する。
【００４９】
スナップショット移動サブプログラム２０６は、差分格納ボリュームに差分を保存しているスナップショットを、スナップショット保存ボリュームに移動する。このとき、差分データを差分格納ボリュームからスナップショット保存ボリュームにコピーし、同時にブロックコピー管理テーブル２１１とコピー先管理テーブル２１３を更新する処理を行う。差分データをコピーする際には、使用ブロック管理テーブル２１２の更新を行う。詳細な処理については、図１２を用いて後に説明する。
【００５０】
保存ボリューム切離しサブプログラム２０７は、スナップショット保存ボリュームを運用から切り離して、スナップショットを独立して参照できるようにする。このプログラムは、運用ボリュームにあるデータをスナップショット保存ボリュームにコピーし、ブロックコピー管理テーブル２１１と使用ブロック管理テーブル２１２の更新を行う。さらに、ブロックコピー管理テーブル２１１をスナップショット保存ボリュームに書き込む。詳細な処理については、図１３，図１４を用いて後に説明する。
【００５１】
保存ボリューム再接続サブプログラム２０８は、保存ボリューム切離しサブプログラム２０７で切り離したスナップショット保存ボリュームを認識してスナップショットを参照するための処理を行う。このプログラムは、スナップショット保存ボリュームからブロックコピー管理テーブル２１１を読み出してメモリ１０２に展開する。同時に、データ管理テーブル群を構築してスナップショットの参照に必要な情報を作成する。これの実行後は、運用ボリュームと差分格納ボリュームの組を用いた場合と同様に、スナップショット保存ボリューム上のデータのみを使用してスナップショットの参照が可能になる。詳細な処理については、図１５を用いて後に説明する。
【００５２】
次に、スナップショット管理プログラム１０４を構成するデータ管理テーブル群について、図３から図６を用いて説明する。
【００５３】
ブロックコピー管理テーブル２１１は、スナップショットを維持するため、運用ボリュームのデータを差分格納ボリュームやスナップショット保存ボリュームにコピーしたブロックを保存するテーブルである。図３を用いて詳細を説明する。ブロックコピー管理テーブル２１１は、運用ボリュームのブロックアドレス３１１と、それに対応するスナップショットの差分データのコピー先を各スナップショット毎に表す列からなる。本実施の形態では、運用ボリュームがブロック数ｍ個、スナップショットを最大ｎ個作成できるものとして述べる。そのため、ブロックアドレス３１１は０からｍ−１まで、スナップショット毎の情報を表す列が１からｎまでのｎ列ある。また、各列に存在するボリュームは、使用しているボリュームを表すために数字を割り当てることとし、ボリューム０は運用ボリューム、ボリューム１は差分格納ボリューム、ボリューム２はスナップショット保存ボリュームを表す。
【００５４】
例えば、スナップショット１は列３１２と行３２１の交わる部分を見ると、ボリュームが「２」でありブロックが「３２」である。つまり、スナップショット１のブロックアドレス０を参照する際には、スナップショット保存ボリュームのブロックアドレス３２を参照すればよいことが分かる。同様に、スナップショット２のブロックアドレスｔを参照する際は列３１３と行３２２の部分を見ると、差分格納ボリュームのブロックアドレス「９４」のデータを参照することになる。スナップショット２のブロックアドレス０は、列３１３と行３２１の部分を見ると、ボリュームもブロックも「０」となっている。この場合、差分データが発生していないことを表し、運用ボリュームからデータを参照すればよいことが分かる。また、スナップショットｎは列３１４すべての値が「なし」になっている。これは、スナップショットｎを作成していない状態を表す。
【００５５】
使用ブロック管理テーブル２１２は、差分格納ボリュームとスナップショット保存ボリュームで差分データをコピーしたブロックやブロックコピー管理テーブル２１１を保存するために使用したブロックを重複して使用しないために、使用状況を管理するテーブルである。図２では、使用ブロック管理テーブル２１２を一つのオブジェクトとして記述しているが、必ずしも一つであるわけではない。本実施の形態では、差分格納ボリュームとスナップショット保存ボリュームそれぞれについて、テーブルを作成する。図４は差分格納ボリュームの使用ブロック管理テーブル２１２、図５はスナップショット保存ボリュームの使用ブロック管理テーブル２１２の一例である。
【００５６】
本実施の形態では、図４のように、差分格納ボリュームのブロックは０からｐ−１までのｐ個である。それぞれの差分ボリュームブロックアドレス４０１について、使用しているか否かを表す使用状態フラグ４０２を記録しておく。例えば、差分ボリュームブロックアドレス４０１が０である行４１１やブロックアドレスがｒである行４１２は、そのブロックが使用中であることを表すため、使用状態フラグ４０２が「１」になっている。一方、使用していないブロックは、ブロックアドレスがｐ−１である行４１３のように、使用状態フラグ４０２は「０」になっている。
【００５７】
同様に、スナップショット保存ボリュームが０からｑ−１までのｑ個のブロックである場合、図５のような例になる。保存ボリュームブロックアドレス５０１それぞれについて、使用状態フラグ５０２を保存している。ブロックアドレスが０である行５１１は、ブロック０が使用中であることをあらわすため、使用状態フラグ５０２が「１」になっており、ブロックアドレスｓとｑ−１のブロックは、使用していないため、使用状態フラグ５０２が「０」になっている。これら、使用状態フラグ４０２，５０２はスナップショット管理プログラム１０４の各サブプログラムが動作する際に更新する。
【００５８】
コピー先管理テーブル２１３は、スナップショットを維持する際に発生する差分データのコピー先ボリュームを保持するテーブルである。スナップショットを作成したときには差分格納ボリュームに差分データをコピーするが、スナップショットをスナップショット保存ボリュームに移動した後に差分データが発生した場合、コピー先はスナップショット保存ボリュームにする必要がある。その処理のために、このテーブルが必要である。図６はその一例である。各ボリュームを表すため、ブロックコピー管理テーブル２１１の例と同様に各ボリュームを数字で表すことにする。
【００５９】
例えば、スナップショット１のコピー先を知るには、列６０１を参照すればよい。すると、ボリュームが「２」であることが分かるので、スナップショット保存ボリュームに差分をコピーすることがわかる。同様に、スナップショット２は列６０２を参照するとボリューム「１」なので、差分格納ボリュームにコピーすればよい。また、スナップショットｎは列６０３が「なし」となっているので、スナップショットを作成していないことが分かる。
【００６０】
以下では、スナップショット管理プログラム１０４を構成するサブプログラム群の処理フローについて、図７から図１５を用いて説明する。
【００６１】
図７は、初期化サブプログラム２０１の動作を表す処理フローの一例である。初期化サブプログラム２０１は、運用ボリュームと差分格納ボリューム、そしてスナップショット保存ボリュームを指定して実行する。そして、ボリュームの構成に合わせた管理テーブル群を初期化する。
【００６２】
まず、運用ボリュームの大きさに合わせてブロックコピー管理テーブルを初期化する（Ｓ７０１）。このとき、各スナップショットに対応する列のエントリは、すべて「なし」の状態にする。次に、使用ブロック管理テーブルを初期化する（Ｓ７０２）。このとき、差分格納ボリュームとスナップショット保存ボリュームの双方について使用ブロック管理テーブルを初期化する。そして、コピー先管理テーブルを初期化する（Ｓ７０３）。コピー先管理テーブルの各スナップショットに対応する内容は、すべて「なし」としておく。これらのテーブルの初期化を実行して終了する。
【００６３】
図８は、スナップショット作成サブプログラム２０４の動作を表す処理フローの一例である。スナップショット作成サブプログラム２０４を実行する際は、作成するスナップショットの番号を指定する。この番号を用いて、各テーブルの操作を行う列が決定する。
【００６４】
まず、ブロックコピー管理テーブルに初期値を設定する（Ｓ８０１）。つまり、実行時に指定されたスナップショットの番号に対応する列について、ボリュームとブロックの部分を全てのブロックアドレスについて「０」を設定する。そして、コピー先管理テーブルに差分格納ボリュームを設定する（Ｓ８０２）。つまり、実行時に指定されたスナップショットの番号に対応する列に、差分格納ボリュームを表す「１」を設定する。ただし、ここではスナップショット作成時には必ず差分格納ボリュームに差分データをコピーするため、このような処理にしている。スナップショット作成時から、スナップショット保存ボリュームに差分データをコピーするように指定する方法も可能である。その場合、スナップショット作成サブプログラム２０４を実行時に、差分データをコピーする先のボリュームを指定できるようにすればよい。
【００６５】
図９は、スナップショット削除プログラム２０５の動作を表す処理フローの一例である。スナップショット削除プログラム２０５を実行する際は、削除するスナップショットの番号を指定する。
【００６６】
まず、ブロックコピー管理テーブルに初期化時の値を設定する（Ｓ９０１）。つまり、削除するスナップショットの番号に対応する列について、ボリューム、ブロックとも「なし」を設定する。このとき、スナップショットで使用していたブロックを解放することになるので、使用ブロック管理テーブルの状態フラグを更新する（Ｓ９０２）。つまり、スナップショットの削除によって不要になった差分データをコピーしたブロックを再利用できるようにする。次に、コピー先管理テーブルに初期化時の値を設定する（Ｓ９０３）。つまり、削除するスナップショットの番号に対応する列に「なし」を設定する。これらの処理により、管理テーブル群をスナップショット作成前の状態に戻して終了する。
【００６７】
図１０は読み出し処理サブプログラム２０２の動作を表す処理フローの一例である。読み出し処理は、運用ボリュームと、スナップショット作成サブプログラム２０４によって作成したスナップショットに対して実行可能である。
【００６８】
まず、読み出し要求を受け取り、その要求がスナップショットからの読み出しかを判定する（Ｓ１００１）。スナップショットからの読み出し要求でなければ（ＮＯ）、運用ボリュームの指定されたブロックからデータを読み出して（Ｓ１００３）、終了する。スナップショットからの読み出し要求であれば（ＹＥＳ）、要求されたスナップショットのブロックに該当するブロックコピー管理テーブルを参照して、コピー先アドレスの値が「０」かを判定する（Ｓ１１０２）。「０」であれば（ＹＥＳ）、差分データがコピーされていないので、運用ボリュームの指定されたブロックからデータを読み出して（Ｓ１００３）、終了する。「０」でなければ（ＮＯ）、差分データがコピーされているので、ブロックコピー管理テーブルのコピー先にあるボリューム・ブロックからデータを読み出して（Ｓ１００４）、終了する。
【００６９】
図１１は書き込み処理サブプログラム２０３の動作を表す処理フローの一例である。運用ボリュームへのデータの書き込み処理を行い、同時に、スナップショットの差分データを差分格納ボリュームやスナップショット保存ボリュームにコピーすることでスナップショットの維持を行う。書き込みは、書き込むデータとボリュームとブロックアドレスを指定した要求に従って行う。
【００７０】
まず、書き込み要求を受け取ると、ブロックコピー管理テーブル２１１からスナップショットを一つ選択する（Ｓ１１０１）。そして、書き込み要求にあるブロックについてブロックコピー管理テーブル２１１を参照し、書き込むブロックのコピー先アドレスは「０」であるかを判定する（Ｓ１１０２）。コピー先アドレスが「０」であれば（ＹＥＳ）、差分データのコピーが必要なので続いて処理を行う。コピー先管理テーブルからコピー先のボリュームを認識し、その使用ブロック管理テーブルからコピー先ボリュームで状態フラグが「０」であるブロックを選択する（Ｓ１１０３）。そして、そのブロックを差分データのコピー先として使用するために、使用ブロック管理テーブルの状態フラグを「１」に変更する（Ｓ１１０４）。
【００７１】
そして、データを書き込む先のブロックにある運用ボリュームのデータを選択したブロックにコピーする（Ｓ１１０５）。ブロックコピー管理テーブルのボリュームとブロックを選択したボリュームとブロック番号に変更する（Ｓ１１０６）。そして全てのスナップショットについて処理したかを判定し（Ｓ１１０７）、まだ処理が終わっていなければ（ＮＯ）、再びスナップショットを選択する処理（Ｓ１１０１）から繰り返し実行する。全てのスナップショットについて処理が完了していれば（ＹＥＳ）、データの運用ボリュームへの書き込みを実行して（Ｓ１１０８）、終了する。また、Ｓ１１０２でコピー先アドレスが「０」でなければ（ＮＯ）、既に差分データをコピー済みであるか、スナップショットを作成していないので、Ｓ１１０７から処理を行う。
【００７２】
本実施の形態では、差分データのコピーが必要な全てのスナップショットについてコピーを実行することになるが、このコピーの数を削減することができる。そのためには、コピー先管理テーブルで同じボリュームが指定されているスナップショットについては、一つのコピーについてブロックをブロックコピー管理テーブル２１１に保存すればよい。これを各コピー先ボリュームで実行すれば、スナップショットは維持可能である。ただし、この場合、スナップショット削除サブプログラムを変更する必要がある。スナップショットを削除する際、各ブロックについて他の作成済みのスナップショットでブロックコピー管理テーブルに保存されていないかを判定し、保存されていれば使用ブロック管理テーブルを変更しないようにすればよい。
【００７３】
図１２は、スナップショット移動サブプログラム２０６の動作を表す処理フローの一例である。差分格納ボリュームにあるスナップショットをスナップショット保存ボリュームに保存する処理を行う。実行する際は、差分格納ボリュームに格納されたスナップショットの番号を指定する。
【００７４】
まず、移動するスナップショットについてコピー先管理テーブルのコピー先ボリュームを変更する（Ｓ１２０１）。これより以後、移動するスナップショットの差分データのコピーがある場合、差分格納ボリュームではなくスナップショット保存ボリュームにコピーするようになる。そして、移動するスナップショットについてブロックコピー管理テーブルからブロックを選択する（Ｓ１２０２）。つまり、スナップショットの全てのブロックについて以下の処理を行う。選択したブロックについて、ブロックコピー管理テーブルのコピー先ブロックが「０」であるかを判定する（Ｓ１２０３）。「０」であれば（ＹＥＳ）、このブロックの差分データはコピーされていないので、Ｓ１２０９の処理に飛ぶ。一方「０」でない場合（ＮＯ）、Ｓ１２０４からＳ１２０８の処理を行う。
【００７５】
まず、スナップショット保存ボリュームの使用ブロック管理テーブルから状態フラグが「０」のブロックを選択し（Ｓ１２０４）、選択した使用ブロック管理テーブルの状態フラグを更新する（Ｓ１２０５）。つまり、使用状態である「１」に変更する。次に、差分格納ボリュームにある差分データをスナップショット保存ボリュームに移動するため、ブロックコピー管理テーブルにあるブロックから選択したブロックにデータをコピーする（Ｓ１２０６）。そして、ブロックコピー管理テーブルのボリュームとブロックを更新し（Ｓ１２０７）、スナップショット保存ボリューム上のデータを参照するようにする。
【００７６】
この後、差分格納ボリュームのデータを参照することはないので差分格納ボリュームのブロックを解放するため、コピー元の使用ブロック管理テーブルの状態フラグを更新する（Ｓ１２０８）。つまり、状態フラグを「０」にする。スナップショットのサイズ分のブロックを処理するため、全てのブロックを処理したかを判定し（Ｓ１２０９）、全て処理していれば（ＹＥＳ）終了し、そうでなければ（ＮＯ）、Ｓ１２０２に戻ってブロック数分の処理を繰り返す。
【００７７】
図１３，図１４は保存ボリューム切離しサブプログラム２０７の動作を表す処理フローの一例である。これは、スナップショット保存ボリュームを一時運用から切り離すために実行する。
【００７８】
まず、保存ボリュームにブロックコピー管理テーブルを格納する領域を作成する（Ｓ１３０１）。格納する領域は、例えばボリュームの先頭ブロックにあらかじめ保存することにしておき、読み出す際にそこから読み出すようにすればよい。次に、コピー先がスナップショット保存ボリュームであるスナップショットを選択する（Ｓ１３０２）。以降、選択したスナップショットについて、全てのブロックに関する処理を繰り返し行う。そのため、まずブロックコピー管理テーブルからブロックを選択する（Ｓ１３０３）。そして、そのコピー先ブロックが「０」かを判定する（Ｓ１３０４）。このとき、「０」でなければ（ＮＯ）、次のブロックを処理するためＳ１３０９の処理に移る。「０」であれば（ＹＥＳ）、スナップショット保存ボリュームにコピーしていないデータをコピーするための処理を行う。
【００７９】
まず、コピーする先のブロックを確保するため、使用ブロック管理テーブルで状態フラグが「０」のブロックを選択する（Ｓ１３０５）。選択したブロックの使用ブロック管理テーブルの状態を「１」に変更して（Ｓ１３０６）、他のデータがコピーされないようにする。運用ボリュームの該当ブロックのデータを選択したブロックにコピーして（Ｓ１３０７）、保存する。さらに、コピーした先のブロックの情報を用いて、ブロックコピー管理テーブルのデバイスとブロックを更新する。これにより、スナップショット保存ボリュームを切り離した後もデータにアクセスすることができる。そして、全てのブロックを処理したかを判定し（Ｓ１３０９）、処理していなければ（ＮＯ）、Ｓ１３０３に戻りブロックごとの処理を繰り返す。処理が完了していれば（ＹＥＳ）、Ｓ１４０１に進む。
【００８０】
スナップショット保存ボリュームを切り離すためには、スナップショット保存ボリュームに差分データを保持するスナップショット全てについてデータをコピーする処理が必要である。そのため、ブロックコピー管理テーブルの全てのスナップショットを処理したかを判定し（Ｓ１４０１）、処理していなければ（ＮＯ）、Ｓ１３０２に戻って全てのスナップショットを処理するまで繰り返す。全て処理していれば（ＹＥＳ）、ブロックコピー管理テーブルをスナップショット保存ボリュームに書き込む（Ｓ１４０２）。このとき、差分格納ボリュームに差分データを保存しているスナップショットについては、テーブルの各ブロックについて、コピー先であるボリュームとブロックの値は「なし」にしておく。
【００８１】
そして、スナップショット保存ボリュームにあるスナップショットへのアクセスがなくなるため、ブロックコピー管理テーブルとコピー先管理テーブルを変更する（Ｓ１４０３）。この変更は、スナップショットを削除したときと同様、対応するスナップショットのボリュームとブロック、コピー先を「なし」にすればよい。そして、保存ボリュームを使用しなくなるため、保存ボリュームの使用ブロック管理テーブルを変更して（Ｓ１４０４）、終了する。この変更は、使用ブロック管理テーブルをメモリ上から削除すればよい。
【００８２】
図１５は保存ボリューム再接続サブプログラム２０８の動作を表す処理フローの一例である。これを実行すると、保存ボリューム切離しサブプログラム２０７で切り離したスナップショット保存ボリュームにあるスナップショットにアクセス可能になる。
【００８３】
まず、保存ボリュームからブロックコピー管理テーブルを読み出す（Ｓ１５０１）。読み出しは、保存ボリューム切離しサブプログラム２０７で保存する箇所をあらかじめ決めておけば、そこから読み出せばよい。そして、読み出したら、再接続した保存ボリュームのためのブロックコピー管理テーブルを作成する（Ｓ１５０２）。つまり、他の運用ボリュームや差分格納ボリュームさらに、スナップショット保存ボリュームとは無関係に、再接続したスナップショット保存ボリュームのブロックコピー管理テーブルを作成することで、他のスナップショットとは独立してアクセス可能にする。
【００８４】
このように、スナップショット保存ボリュームを再接続して、スナップショットのアクセスを可能にすることで、スナップショットから運用ボリュームにデータを回復することが出来る。例えば、スナップショットの全ブロックを読み出して、運用ボリュームに書き込むことで、運用ボリュームにデータを回復できる。または、運用ボリューム上にファイルシステムを作成して使用していた場合、スナップショットもファイルシステムとして認識可能であるため、ファイル単位で運用ボリューム上のファイルシステムにデータを回復できる。
【００８５】
本実施の形態は、スナップショット保存ボリュームを１個使用するようになっているが、簡単な変更を加えることで複数のスナップショット保存ボリュームを使用可能になる。例えば、使用ブロック管理テーブルをスナップショット保存ボリューム毎に作成するようにし、スナップショット移動サブプログラムでスナップショットを移動するボリュームを指定できるようにすればよい。そして、ブロックコピー管理テーブルで保存するボリュームをスナップショット保存ボリューム毎に番号を決めて書き込むことにする。こうすることで、本実施の形態で説明した処理を利用しつつ、複数のスナップショット保存ボリュームを使用できる。
【００８６】
また、スナップショット保存ボリュームに新たなボリュームを追加するようにできる。例えば、スナップショット再接続サブプログラムで、ブロックコピー管理テーブルを読み出せなかった場合には、新たなスナップショット保存ボリュームとして認識し、使用ブロック管理テーブルなどを新規に作成するようにし、スナップショット移動サブプログラムで使用できるように変更可能である。
【００８７】
このように、複数のボリューム間でスナップショットのデータを複製可能になる。
【００８８】
（実施の形態２）
本実施の形態では、差分コピー以外の運用ボリュームからのデータのコピーを削減したスナップショットの保存方法について述べる。
【００８９】
システムの構成は、実施の形態１と同様であるが、スナップショット保存ボリュームに参照先スナップショットを保存するように変更する。また、保存ボリューム切離しサブプログラムと保存ボリューム再接続サブプログラムを以下のように変更する。
【００９０】
保存ボリューム切離しサブプログラムは、切り離しの際、差分データとしてコピーされていないブロックを運用ボリュームからコピーしていた。これを止め、代わりに、スナップショット保存ボリュームにある最新のスナップショットの番号をブロックコピー管理テーブルと一緒に保存しておく。そして、メモリ上のブロックコピー管理テーブルでは、保存した番号のスナップショットを削除不可として、差分データのコピーを継続するようにしておく。
【００９１】
保存ボリューム再接続サブプログラムは、再接続したスナップショット保存ボリュームから、保存されていたスナップショットの番号を読み出す処理を追加する。そして、この番号をスナップショット保存ボリュームと関連付けてメモリ上に保持する。また、再接続していない、運用開始から接続していたスナップショット保存ボリュームについては、参照先スナップショットが運用ボリュームであることを示す値を、同様にメモリ上に保持することにする。
【００９２】
読み出し処理サブプログラムは、スナップショットからの読み出しであり、かつブロックコピー管理テーブルのブロックが「０」である場合に処理を追加する。実施の形態１では、ブロックが「０」である場合、無条件に運用ボリュームからデータを読み出していたが、まず、参照先スナップショットの番号をメモリから読み出し、それに該当するスナップショットのブロックからデータを読み出すようにする。これにより、再接続したスナップショット保存ボリュームにあるスナップショットを参照する際、差分データのコピーを継続しているスナップショットのデータを組み合わせているため、スナップショットの整合性を保つことができる。
【００９３】
このように、スナップショット保存ボリュームの切り離しの際に発生するデータのコピーを削減することが可能になる。
【００９４】
本発明による、スナップショットのデータ移行を用いることで、ストレージシステムに格納された様々なデータ保護が可能になる。特に、長期間にわたってスナップショットを保持し続ける場合、複数のボリュームにスナップショットを多量に保存できる。
【００９５】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【産業上の利用可能性】
【００９６】
本発明は、ストレージシステムにおけるスナップショット機能の実現技術に関し、特に、論理ボリュームマネージャによりスナップショットを作成し維持する方法に適用して有効である。
【図面の簡単な説明】
【００９７】
【図１】本発明の実施の形態１におけるストレージシステムのシステム構成の一例を示す構成図である。
【図２】本発明の実施の形態１において、スナップショット管理プログラムの構成の一例を示す説明図である。
【図３】本発明の実施の形態１において、ブロックコピー管理テーブルの一例を示す説明図である。
【図４】本発明の実施の形態１において、使用ブロック管理テーブル（差分格納ボリューム）の一例を示す説明図である。
【図５】本発明の実施の形態１において、使用ブロック管理テーブル（スナップショット保存ボリューム）の一例を示す説明図である。
【図６】本発明の実施の形態１において、コピー先管理テーブルの一例を示す説明図である。
【図７】本発明の実施の形態１において、初期化サブプログラムの動作の一例を示すフロー図である。
【図８】本発明の実施の形態１において、スナップショット作成サブプログラムの動作の一例を示すフロー図である。
【図９】本発明の実施の形態１において、スナップショット削除サブプログラムの動作の一例を示すフロー図である。
【図１０】本発明の実施の形態１において、読み出し処理サブプログラムの動作の一例を示すフロー図である。
【図１１】本発明の実施の形態１において、書き込み処理サブプログラムの動作の一例を示すフロー図である。
【図１２】本発明の実施の形態１において、スナップショット移動サブプログラムの動作の一例を示すフロー図である。
【図１３】本発明の実施の形態１において、保存ボリューム切離しサブプログラムの動作の一例を示すフロー図である。
【図１４】本発明の実施の形態１において、保存ボリューム切離しサブプログラムの動作（図１３に続く）の一例を示すフロー図である。
【図１５】本発明の実施の形態１において、保存ボリューム再接続サブプログラムの動作の一例を示すフロー図である。
【符号の説明】
【００９８】
１００  サーバ装置
１０１  ＣＰＵ
１０２  メモリ
１０３  インタフェース
１０４  スナップショット管理プログラム
１０５  ブロックＩ／Ｏ管理プログラム
１１０，１２０  ストレージ装置
１１１，１１２，１２１  ディスクドライブ
１１３，１２２  インタフェース
２０１  初期化サブプログラム
２０２  読み出し処理サブプログラム
２０３  書き込み処理サブプログラム
２０４  スナップショット作成サブプログラム
２０５  スナップショット削除サブプログラム
２０６  スナップショット移動サブプログラム
２０７  保存ボリューム切離しサブプログラム
２０８  保存ボリューム再接続サブプログラム
２１１  ブロックコピー管理テーブル
２１２  使用ブロック管理テーブル
２１３  コピー先管理テーブル
【図１】
2006209636.tif 000003
【図２】
2006209636.tif 000004
【図３】
2006209636.tif 000005
【図４】
2006209636.tif 000006
【図５】
2006209636.tif 000007
【図６】
2006209636.tif 000008
【図７】
2006209636.tif 000009
【図８】
2006209636.tif 000010
【図９】
2006209636.tif 000011
【図１０】
2006209636.tif 000012
【図１１】
2006209636.tif 000013
【図１２】
2006209636.tif 000014
【図１３】
2006209636.tif 000015
【図１４】
2006209636.tif 000016
【図１５】
2006209636.tif 000017