(57)【特許請求の範囲】
【請求項１】
ストレージ装置において、
記憶領域を提供する１又は複数の記憶デバイスと、
前記１又は複数の記憶デバイスが提供する前記記憶領域上に第１及び第２の論理ボリュームを作成し、ホスト計算機からの要求に応じて前記第１の論理ボリュームにデータを読み書きするコントローラと
を備え、
前記コントローラには、メモリが設けられ、
前記コントローラは、
前記第１の論理ボリュームのある時点のデータイメージである１又は複数のスナップショットを取得し、取得した各前記スナップショットの管理情報を前記第２の論理ボリュームに格納し、
必要時に必要な前記スナップショットの管理情報を前記第２の論理ボリュームから前記メモリに読み出し、読み出した前記管理情報を用いて処理を実行すると共に、不要となった前記管理情報を前記メモリから前記第２の論理ボリュームに戻し、
各前記スナップショットには、当該スナップショットの前記世代を表す情報として、原則として当該スナップショットの取得順に順次大きくなる世代番号がそれぞれ割り当てられ、
前記コントローラは、
前記第２の論理ボリュームから前記メモリに前記スナップショットの管理情報を読み出す際、前記管理情報が必要な前記スナップショットに割り当てられた前記世代番号が小さいほど、少ない世代数分の前記管理情報を前記第２の論理ボリュームの広いアドレス範囲で前記第２の論理ボリュームから前記メモリに読み出し、当該世代番号が大きいほど、多い世代数分の前記管理情報を前記第２の論理ボリュームの狭いアドレス範囲で前記第２の論理ボリュームから前記メモリに読み出す
ことを特徴とする記載のストレージ装置。
【請求項２】
前記コントローラは、
前記第２の論理ボリュームから前記管理情報を前記メモリに読み出す際の前記スナップショットの世代数及び前記第２の論理ボリュームの前記アドレス範囲を段階的に変更する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項３】
前記コントローラは、
前記スナップショットが削除されることにより当該スナップショットに割り当てていた前記世代番号が欠番となったときには、新たに取得された前記スナップショットに対して当該世代番号を割り当てる一方、
最も小さい前記世代番号の世代を含む段階に属するいずれかの前記世代番号が割り当てられていた前記スナップショットが削除されることにより当該世代番号が欠番となった場合においても、新たに取得された前記スナップショットに対して当該世代番号を割り当てない
ことを特徴とする請求項２に記載のストレージ装置。
【請求項４】
前記コントローラは、
前記ホスト計算機からの要求に応じて前記第１の論理ボリュームにデータを書き込むライト処理を実行する際、複数世代の前記スナップショットに渡って前記管理情報の更新が必要なときには、最新世代の前記スナップショットの前記管理情報を更新し、他の前記世代のスナップショットの前記管理情報については、当該ライト処理とは非同期に更新する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項５】
前記コントローラは、
他の前記世代のスナップショットの前記管理情報については、当該他の世代のスナップショットに対するリード要求又はライト要求が与えられた場合に、当該他の世代のスナップショットの前記管理情報を更新する
ことを特徴とする請求項４に記載のストレージ装置。
【請求項６】
前記コントローラは、
他の前記世代のスナップショットの前記管理情報を更新する前に、当該他の世代のスナップショットの更新があったか否かを管理し、
前記他の世代のスナップショットの管理情報を更新する際には、更新された前記スナップショットを跨いで、該当する前記他の世代の前記スナップショットの前記管理情報を更新する
ことを特徴とする請求項５に記載のストレージ装置。
【請求項７】
記憶領域を提供する１又は複数の記憶デバイスと、前記１又は複数の記憶デバイスが提供する前記記憶領域上に第１の論理ボリュームを作成し、ホスト計算機からの要求に応じて前記第１の論理ボリュームにデータを読み書きするコントローラとを有するストレージ装置の制御方法において、
前記コントローラには、メモリが設けられ、
前記コントローラが、前記１又は複数の記憶デバイスが提供する前記記憶領域上に第２の論理ボリュームを作成する第１のステップと、
前記コントローラが、前記第１の論理ボリュームのある時点のデータイメージである１又は複数のスナップショットを取得し、取得した各前記スナップショットの管理情報を前記第２の論理ボリュームに格納する第２のステップと、
前記コントローラが、必要時に必要な前記スナップショットの管理情報を前記第２の論理ボリュームから前記メモリに読み出し、読み出した前記管理情報を用いて処理を実行すると共に、不要となった前記管理情報を前記メモリから前記第２の論理ボリュームに戻す第３のステップと
を備え、
各前記スナップショットには、当該スナップショットの前記世代を表す情報として、原則として当該スナップショットの取得順に順次大きくなる世代番号がそれぞれ割り当てられ、
前記第３のステップにおいて、前記コントローラは、
前記第２の論理ボリュームから前記メモリに前記スナップショットの管理情報を読み出す際、前記管理情報が必要な前記スナップショットに割り当てられた前記世代番号が小さいほど、少ない世代数分の前記管理情報を前記第２の論理ボリュームの広いアドレス範囲で前記第２の論理ボリュームから前記メモリに読み出し、当該世代番号が大きいほど、多い世代数分の前記管理情報を前記第２の論理ボリュームの狭いアドレス範囲で前記第２の論理ボリュームから前記メモリに読み出す
ことを特徴とするストレージ装置の制御方法。
【請求項８】
前記第３のステップにおいて、前記コントローラは、
前記第２の論理ボリュームから前記管理情報を前記メモリに読み出す際の前記スナップショットの世代数及び前記第２の論理ボリュームの前記アドレス範囲を段階的に変更する
ことを特徴とする請求項７に記載のストレージ装置の制御方法。
【請求項９】
前記第２乃至第３のステップにおいて、前記コントローラは、
前記スナップショットが削除されることにより当該スナップショットに割り当てていた前記世代番号が欠番となったときには、新たに取得された前記スナップショットに対して当該世代番号を割り当てる一方、
最も小さい前記世代番号の世代を含む段階に属するいずれかの前記世代番号が割り当てられていた前記スナップショットが削除されることにより当該世代番号が欠番となった場合においても、新たに取得された前記スナップショットに対して当該世代番号を割り当てない
ことを特徴とする請求項８に記載のストレージ装置の制御方法。
【請求項１０】
前記コントローラは、
前記ホスト計算機からの要求に応じて前記第１の論理ボリュームにデータを書き込むライト処理を実行する際、複数世代の前記スナップショットに渡って前記管理情報の更新が必要なときには、最新世代の前記スナップショットの前記管理情報を更新し、他の前記世代のスナップショットの前記管理情報については、当該ライト処理とは非同期に更新する
ことを特徴とする請求項７に記載のストレージ装置の制御方法。
【請求項１１】
前記コントローラは、
他の前記世代のスナップショットの前記管理情報については、当該他の世代のスナップショットに対するリード要求又はライト要求が与えられた場合に、当該他の世代のスナップショットの前記管理情報を更新する
ことを特徴とする請求項１０に記載のストレージ装置の制御方法。
【請求項１２】
前記コントローラは、
他の前記世代のスナップショットの前記管理情報を更新する前に、当該他の世代のスナップショットの更新があったか否かを管理し、
前記他の世代のスナップショットの管理情報を更新する際には、更新された前記スナップショットを跨いで、該当する前記他の世代の前記スナップショットの前記管理情報を更新する
ことを特徴とする請求項１１に記載のストレージ装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置及びその制御方法に関し、例えばスナップショット機能が搭載されたディスクアレイ装置に適用して好適なものである。
【背景技術】
【０００２】
従来、ディスクアレイ装置の機能の１つとして、スナップショットの取得指示を受けた時点における指定された論理ボリューム（以下、これをプライマリボリュームと呼ぶ）のイメージを保持する、いわゆるスナップショット機能がある。スナップショット機能は、人為的なミスによりデータが消失してしまったときや、所望時点におけるファイルシステムの状態を復元したいときなどに、その時点におけるプライマリボリュームを復元するために用いられる。
【０００３】
スナップショット機能によりスナップショットが取得された場合、その後、プライマリボリュームにデータが書き込まれるタイミングで、そのデータに上書きされる前のデータ（以下、これを旧データと呼ぶ）が旧データ退避用の論理ボリュームに退避される。つまり、スナップショットの取得指示を受けた時点におけるプライマリボリュームと、現在のプライマリボリュームとの差分が旧データとして旧データ退避用の論理ボリュームに退避されることになる。従って、現在のプライマリボリュームに格納されているデータと、旧データ退避用の論理ボリュームに格納された旧データとを組み合わせることにより、スナップショットの取得時点におけるプライマリボリュームのデータイメージ（スナップショット）を復元することができる。
【０００４】
このようなスナップショット機能によれば、プライマリボリュームの内容をそのまま記憶する場合に比べて、より小さい記憶容量でスナップショット取得指示された時点のプライマリボリュームを復元できるという利点がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−１１３６６７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、上述のようなスナップショット機能が搭載されたディスクアレイ装置は、取得したスナップショットを管理するための情報として、種々の管理情報をメモリ上に保持している（特許文献１参照）。
【０００７】
これらの管理情報は、スナップショットごとのものも多い。従って、ディスクアレイ装置において取得可能なスナップショット数が増えるに従ってスナップショットを管理するための管理情報全体としての容量も増大することになる。
【０００８】
ところが、これらの管理情報を保持するメモリの容量は有限であり、スナップショットの管理情報を無尽蔵にメモリ上に置いておくことはできないため、ディスクアレイ装置で取得可能なスナップショット数がある程度制限される問題があった。
【０００９】
本発明は以上の点を考慮してなされたもので、より多くのスナップショットを取得可能なストレージ装置及びその制御方法を提案しようとするものである。
【課題を解決するための手段】
【００１０】
かかる課題を解決するため本発明においては、ストレージ装置において、記憶領域を提供する１又は複数の記憶デバイスと、前記１又は複数の記憶デバイスが提供する前記記憶領域上に第１及び第２の論理ボリュームを作成し、ホスト計算機からの要求に応じて前記第１の論理ボリュームにデータを読み書きするコントローラとを設け、前記コントローラには、メモリが設けられ、前記コントローラが、前記第１の論理ボリュームのある時点のデータイメージである１又は複数のスナップショットを取得し、取得した各前記スナップショットの管理情報を前記第２の論理ボリュームに格納し、必要時に必要な前記スナップショットの管理情報を前記第２の論理ボリュームから前記メモリに読み出し、読み出した前記管理情報を用いて処理を実行すると共に、不要となった前記管理情報を前記メモリから前記第２の論理ボリュームに戻し、各前記スナップショットには、当該スナップショットの前記世代を表す情報として、原則として当該スナップショットの取得順に順次大きくなる世代番号がそれぞれ割り当てられ、前記コントローラが、前記第２の論理ボリュームから前記メモリに前記スナップショットの管理情報を読み出す際、前記管理情報が必要な前記スナップショットに割り当てられた前記世代番号が小さいほど、少ない世代数分の前記管理情報を前記第２の論理ボリュームの広いアドレス範囲で前記第２の論理ボリュームから前記メモリに読み出し、当該世代番号が大きいほど、多い世代数分の前記管理情報を前記第２の論理ボリュームの狭いアドレス範囲で前記第２の論理ボリュームから前記メモリに読み出すようにした。
【００１１】
また本発明においては、記憶領域を提供する１又は複数の記憶デバイスと、前記１又は複数の記憶デバイスが提供する前記記憶領域上に第１の論理ボリュームを作成し、ホスト計算機からの要求に応じて前記第１の論理ボリュームにデータを読み書きするコントローラとを有するストレージ装置の制御方法において、前記コントローラには、メモリが設けられ、前記コントローラが、前記１又は複数の記憶デバイスが提供する前記記憶領域上に第２の論理ボリュームを作成する第１のステップと、前記コントローラが、前記第１の論理ボリュームのある時点のデータイメージである１又は複数のスナップショットを取得し、取得した各前記スナップショットの管理情報を前記第２の論理ボリュームに格納する第２のステップと、前記コントローラが、必要時に必要な前記スナップショットの管理情報を前記第２の論理ボリュームから前記メモリに読み出し、読み出した前記管理情報を用いて処理を実行すると共に、不要となった前記管理情報を前記メモリから前記第２の論理ボリュームに戻す第３のステップとを設け、各前記スナップショットには、当該スナップショットの前記世代を表す情報として、原則として当該スナップショットの取得順に順次大きくなる世代番号がそれぞれ割り当てられ、前記第３のステップにおいて、前記コントローラは、前記第２の論理ボリュームから前記メモリに前記スナップショットの管理情報を読み出す際、前記管理情報が必要な前記スナップショットに割り当てられた前記世代番号が小さいほど、少ない世代数分の前記管理情報を前記第２の論理ボリュームの広いアドレス範囲で前記第２の論理ボリュームから前記メモリに読み出し、当該世代番号が大きいほど、多い世代数分の前記管理情報を前記第２の論理ボリュームの狭いアドレス範囲で前記第２の論理ボリュームから前記メモリに読み出すようにした。
【００１２】
かかる本発明のストレージ装置及びその制御方法によれば、スナップショットの管理情報を第２の論理ボリュームに保持し、必要時に必要な管理情報のみをコントローラ内のメモリに読み出すようにしているため、メモリの容量によって取得可能なスナップショット数が制限されることがない。
【発明の効果】
【００１３】
本発明によれば、より多くのスナップショットを取得可能なストレージ装置及びその制御方法を実現できる。
【図面の簡単な説明】
【００１４】
【図１】本実施の形態による計算機システムの全体構成を示すブロック図である。
【図２】スナップショットの論理構成の説明に供する概念図である。
【図３】本ディスクアレイ装置における管理情報と、旧データとのデータプールへの格納方式の説明に供する概念図である。
【図４】データプール内の各チャンクの管理方法の説明に供する概念図である。
【図５】管理情報の説明に供する概念図である。
【図６】ペア管理テーブルの構成を示す概念図である。
【図７】スナップショット差分ビットマップの構成を示す概念図である。
【図８】プライマリボリューム差分ビットマップの構成を示す概念図である。
【図９】スナップショット差分集約ビットマップの構成を示す概念図である。
【図１０】旧データ退避アドレステーブルの構成を示す概念図である。
【図１１】旧データ退避領域空きビットマップの構成を示す概念図である。
【図１２】（Ａ）−（Ｃ）は、旧データ退避未反映ビットマップの説明に供する概念図である。
【図１３】（Ａ）−（Ｃ）は、旧データ退避未反映ビットマップの説明に供する概念図である。
【図１４】（Ａ）−（Ｃ）は、旧データ退避未反映ビットマップの説明に供する概念図である。
【図１５】旧データ退避未反映ビットマップの構成を示す概念図である。
【図１６】（Ａ−１）−（Ｂ−２）は、分割順番号−世代番号マッピングテーブルの説明に供する概念図である。
【図１７】分割順番号−世代番号マッピングテーブルの構成を示す概念図である。
【図１８】（Ａ）−（Ｃ）は、スナップショットライト差分ビットマップの説明に供する概念図である。
【図１９】（Ａ）−（Ｃ）は、スナップショットライト差分ビットマップの説明に供する概念図である。
【図２０】（Ａ）−（Ｃ）は、スナップショットライト差分ビットマップの説明に供する概念図である。
【図２１】スナップショットライト差分ビットマップの構成を示す概念図である。
【図２２】リード処理の処理手順を示すフローチャートである。
【図２３】ライト処理の処理手順を示すフローチャートである。
【図２４】第１のスナップショットリード処理の処理手順を示すフローチャートである。
【図２５】第２のスナップショットリード処理の処理手順を示すフローチャートである。
【図２６】スナップショットライト処理の処理手順を示すフローチャートである。
【図２７Ａ】ペア削除処理の処理手順を示すフローチャートである。
【図２７Ｂ】ペア削除処理の処理手順を示すフローチャートである。
【図２８】世代塊の説明に供する概念図である。
【図２９Ａ】（Ａ）−（Ｃ）は、スナップショットに対する世代番号の割当て方式の説明に供する概念図である。
【図２９Ｂ】（Ａ）−（Ｂ）は、スナップショットに対する世代番号の割当て方式の説明に供する概念図である。
【図３０】（Ａ）−（Ｃ）は、スナップショットに対する世代番号の割当て方式の説明に供する概念図である。
【図３１】世代番号割当て処理の処理手順を示すフローチャートである。
【図３２】管理情報取得処理の処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下図面について、本発明の一実施の形態を詳述する。
【００１６】
（１）本実施の形態による計算機システム
図１において、１は全体として本実施の形態による計算機システムを示す。この計算機システム１は、１又は複数のネットワーク２を介して接続されたホスト計算機３及びディスクアレイ装置４を備えて構成される。
【００１７】
ネットワーク２は、例えばＳＡＮ（Storage Area Network）、ＬＡＮ、インターネット、公衆回線又は専用回線などから構成される。このネットワーク２を介したホスト計算機３及びディスクアレイ装置４間の通信は、例えばネットワーク２がＳＡＮである場合にはファイバーチャネルプロトコルに従って行われ、ネットワーク２がＬＡＮである場合にはＴＣＰ／ＩＰ（Transmission Control Protocol/Internet Protocol）プロトコルに従って行われる。
【００１８】
ホスト計算機３は、ＣＰＵ（Central Processing Unit）及びメモリ等の情報処理資源を備えたコンピュータ装置であり、例えばパーソナルコンピュータや、ワークステーション、メインフレームなどから構成される。ホスト計算機３は、キーボード、スイッチやポインティングデバイス、マイクロフォン等の情報入力装置（図示せず）と、モニタディスプレイやスピーカ等の情報出力装置（図示せず）とを備える。
【００１９】
ディスクアレイ装置４は、複数の記憶デバイス１０と、これら複数の記憶デバイス１０に対するデータの入出力を制御するコントローラ１１とを備えて構成される。
【００２０】
記憶デバイス１０は、例えばＳＣＳＩ（Small Computer System Interface）ディスク等の高価なディスクデバイス、又はＳＡＴＡ（Serial AT Attachment）ディスクや光ディスク等の安価なディスクデバイスなどから構成される。
【００２１】
これらの記憶デバイス１０は、コントローラ１１によりＲＡＩＤ（Redundant Arrays of Inexpensive Disks）方式で運用される。１又は複数の記憶デバイス１０により提供される物理的な記憶領域上に、１又は複数の論理ボリュームＶＯＬが設定される。そしてデータは、この論理ボリュームＶＯＬ内に所定大きさ（以下、64〔KB〕とする）のブロック（以下、これを論理ブロックと呼ぶ）を単位として記憶される。
【００２２】
各論理ボリュームＶＯＬには、それぞれ固有の識別番号（以下、これをＬＵＮ（Logical Unit number）と呼ぶ）が付与されると共に、各論理ブロックには、それぞれ対応する論理ボリューム内で固有の識別番号（以下、これをＬＢＡ（Logical Block Address）と呼ぶ）が付与される。本実施の形態の場合、データの入出力は、これらＬＵＮ及びＬＢＡを組み合わせたものをアドレスとして、当該アドレスを指定して行われる。
【００２３】
コントローラ１１は、それぞれフロントエンドインタフェース１２、データ転送コントローラ１３、バックエンドインタフェース１４、キャッシュメモリ１５、ローカルメモリ１６及びＣＰＵ１７を備えて構成される。
【００２４】
フロントエンドインタフェース１２は、ネットワーク２と接続される１又は複数の通信ポートを備える。通信ポートには、例えばＩＰ（Internet Protocol）アドレスやＷＷＮ（World Wide Name）などの固有のネットワークアドレスがそれぞれ割り当てられる。このフロントエンドインタフェース１２は、ネットワーク２を介したホスト計算機３との通信時におけるプロトコル制御を行う機能を有しており、このフロントエンドインタフェース１２のプロトコル制御機能により、ホスト計算機３及びディスクアレイ装置４間においてＦＣプロトコルやｉＳＣＳＩプロトコル等に従ったデータやコマンドの送受が行われる。
【００２５】
データ転送コントローラ１３は、コントローラ１１の制御のもとに、フロントエンドインタフェース１２、キャッシュメモリ１５、バックエンドインタフェース１４及びコントローラ１７間の接続関係を切り替える機能を有するもので、例えばＰＣＩｅ（ＰＣＩ（peripheral component interconnect）Ｅｘｐｒｅｓｓ）スイッチから構成される。
【００２６】
バックエンドインタフェース１４は、記憶デバイス１０に対するインタフェースであり、ＣＰＵ及びメモリなどの情報処理資源を備える。このバックエンドインタフェース１４は、フロントエンドインタフェース１２から与えられるホスト計算機３からのライトコマンドやリードコマンドに応じて対応する記憶デバイス１０を制御することにより、リードデータやライトデータをリードコマンドやライトコマンドにおいて指定された論理ボリュームＶＯＬ内の当該リードコマンド又はライトコマンドにおいて指定されたアドレス位置に読み書きする。
【００２７】
キャッシュメモリ１５は、例えばＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）等の揮発メモリから構成され、主として記憶デバイス１０に読み書きするデータを一時的に記憶するために用いられる。スナップショットを管理するために利用される後述の管理情報も、記憶デバイス１０から読み出されてこのキャッシュメモリ１５に格納されて保持される。
【００２８】
ローカルメモリ１６は、各種制御プログラムを格納するために用いられるほか、ホスト計算機３から与えられるリードコマンドやライトコマンド等の各種コマンドを一時的に保持するために用いられる。ＣＰＵ１７は、このローカルメモリ１６に保持されたリードコマンドやライトコマンドを、当該ローカルメモリ１６に保持された順番で処理する。後述するスナップショット制御プログラムは、このローカルメモリ１６に格納されて保持される。
【００２９】
ＣＰＵ１７は、ディスクアレイ装置４全体の動作制御を司るプロセッサである。ＣＰＵ１７は、複数のコアを備える。各コアは適切なソフトウェア環境において複数のソフトウェア・スレッドを並列に実行する。各コアには、それぞれ１又は２以上の論理ボリュームＶＯＬが割り当てられる。そして各コアは、自己に割り当てられた論理ボリュームＶＯＬに対するデータのリード／ライト処理の制御等を担当する。
【００３０】
（２）本実施の形態によるスナップショット機能
次に、かかるディスクアレイ装置に搭載された本実施の形態によるスナップショット機能について説明する。
【００３１】
（２−１）スナップショットの論理構成
図２は、本ディスクアレイ装置におけるスナップショットの論理構成を示す。本ディスクアレイ装置４の場合、スナップショットは、プライマリボリュームＰＶＯＬ、スナップショットボリュームＳＳＶＯＬ及びデータプールＤＰの３つのボリュームから構成される。
【００３２】
プライマリボリュームＰＶＯＬは、ホスト計算機３に提供される論理ボリュームＶＯＬであり、ホスト計算機３からのデータが読み書きされる。このプライマリボリュームＰＶＯＬは、通常の実体を有する論理ボリュームＶＯＬ及び実体を有さない仮想的な論理ボリュームＶＯＬのいずれであってもかまわない。
【００３３】
スナップショットボリュームＳＳＶＯＬは、スナップショットのデータを保持する仮想的な論理ボリュームであり、プライマリボリュームＰＶＯＬとコピーペアに設定される。このコピーペアの状態（ペア状態）としては、「ペアード（paired）」、「スプリット（split）」及び「シンプレックス（simplex）」などがある。
【００３４】
「ペアード」は、プライマリボリュームＰＶＯＬ及びスナップショットボリュームＳＳＶＯＬがミラーになっている状態を指し、「スプリット」は、プライマリボリュームＰＶＯＬからスナップショットボリュームＳＳＶＯＬへのデータライトが行われない状態を指す。従って、コピーペアのペア状態を「ペアード」から「スプリット」に切り替えることによって、その時点におけるプライマリボリュームＰＶＯＬの静的なデータイメージ（つまりスナップショット）がそのコピーペアを形成するスナップショットボリュームＳＳＶＯＬによって保持されることになる。以下においては、かかるコピーペアのペア状態を「ペアード」から「スプリット」に切り替えることを、「スナップショットボリュームＳＳＶＯＬをプライマリボリュームＰＶＯＬから分割する」又は「スナップショットを取得する」と呼ぶものとする。また「シンプレックス」は、スナップショットボリュームＳＳＶＯＬにおいてスナップショットを保持しておらず、かつ、プライマリボリュームＰＶＯＬと、スナップショットボリュームＳＳＶＯＬとが「ペアード」でもない状態を指す。
【００３５】
データプールＤＰは、スナップショットの管理情報と、プライマリボリュームＰＶＯＬから退避された旧データとが格納される論理ボリュームＶＯＬである。スナップショットが取得された場合、その後にプライマリボリュームＰＶＯＬを対象とするライトコマンドがディスクアレイ装置４に与えられると、そのライトコマンドに基づくライト処理により更新される直前のプライマリボリュームＰＶＯＬ内のデータ（旧データ）がデータプールＤＰに退避される。これにより、データプールＤＰに退避されたデータと、プライマリボリュームＰＶＯＬに残存するデータ（更新されていないデータ）とを組み合わせることで、かかるライト処理によりデータが更新される直前のプライマリボリュームＰＶＯＬのデータイメージ（スナップショット）を復元することができる。
【００３６】
なお本実施の形態の場合、ディスクアレイ装置４では、同一のプライマリボリュームＰＶＯＬに対して最大1024個のスナップショットボリュームＳＳＶＯＬを設定することができる。従って、本実施の形態の場合、ディスクアレイ装置４は、同一のプライマリボリュームＰＶＯＬに対して最大1024個のスナップショットを取得することができる。
【００３７】
（２−２）ディスクアレイ装置におけるデータプールへのデータ格納方式
上述のように、本ディスクアレイ装置４においては、プライマリボリュームＰＶＯＬから退避させた旧データに加えて、各スナップショットの管理情報をもデータプールＤＰ内に保持している。そして、これらスナップショットの管理情報は必要となったタイミングでデータプールＤＰからキャッシュメモリ１５に読み込まれ、不要となった段階でデータプールＤＰに戻される。
【００３８】
図３は、ディスクアレイ装置４における各スナップショットの管理情報と、プライマリボリュームＰＶＯＬから退避された旧データとのデータプールＤＰへの格納方式を示す。
【００３９】
この図３に示すように、本ディスクアレイ装置４では、データプールＤＰの記憶領域を、所定サイズ（例えば１〔GB〕）の複数の領域単位（以下、これをチャンクと呼ぶ）に区分し、これらチャンク単位で管理している。そしてプライマリボリュームＰＶＯＬが作成されるごとに、そのプライマリボリュームＰＶＯＬに対して、当該プライマリボリュームＰＶＯＬについて取得されたスナップショットの管理情報を格納するためのチャンク（以下、これを管理情報格納用チャンクと呼ぶ）ＣＫ１と、そのプライマリボリュームＰＶＯＬから退避された旧データを格納するためのチャンク（以下、これを旧データ退避用チャンクと呼ぶ）ＣＫ２とをそれぞれ割り当てるようになされている。
【００４０】
従って、本ディスクアレイ装置４の場合、プライマリボリュームＰＶＯＬごとに異なる管理情報格納用チャンクＣＫ１及び旧データ退避用チャンクＣＫ２が割り当てられることとなり、異なるプライマリボリュームＰＶＯＬについて取得されたスナップショットの管理情報が同一の管理情報格納用チャンクＣＫ１に格納されたり、異なるプライマリボリュームＰＶＯＬから退避された旧データが同一の旧データ退避用チャンクＣＫ２に格納されることはない。
【００４１】
これにより本ディスクアレイ装置４においては、例えばプライマリボリュームＰＶＯＬが削除された場合など、１つのプライマリボリュームＰＶＯＬに対して割り当てられた管理情報格納用チャンクＣＫ１及び又は旧データ退避用チャンクＣＫ２が不要となったときに、他のプライマリボリュームＰＶＯＬの状況に関わりなく、その管理情報格納用チャンクＣＫ１及び又は旧データ退避用チャンクＣＫ２を解放することができる。
【００４２】
なお、本ディスクアレイ装置４の場合、図４に示すように、データプールＤＰ内の個々のチャンク（管理情報格納用チャンクＣＫ１及び旧データ退避用チャンクＣＫ２を含む）がそれぞれ何に使用されているかを表すデータプールＤＰごとのチャンク管理情報１７と、各プライマリボリュームＰＶＯＬにそれぞれ割り当てた個々のチャンクを特定するためのチャンク特定情報１８からなるボリューム割当てチャンク特定情報１９とをキャッシュメモリ１５内に保持しており、これらチャンク管理情報１７及びボリューム割当てチャンク特定情報１９に基づいて、プライマリボリュームＰＶＯＬに対するチャンクの割当て処理などを行っている。
【００４３】
従って、「チャンクの解放」とは、チャンク管理情報１７におけるそのチャンクのステータスを、そのチャンクが未使用であることを表す「未割当て」に変更し、さらに対応するボリューム割当てチャンク特定情報１９における対応するプライマリボリュームと対応付けられたそのチャンクのチャンク特定情報１８を削除することを意味する。
【００４４】
プライマリボリュームＰＶＯＬに対する管理情報格納用チャンクＣＫ１の割り当ては、プライマリボリュームＰＶＯＬが作成されたタイミングで行われる。そして、この後、プライマリボリュームＰＶＯＬ及びスナップショットボリュームＳＳＶＯＬから構成されるコピーペアが分割された後（スナップショットが取得された後）、プライマリボリュームＰＶＯＬに対する最初のリードアクセス又はライトアクセスがあったタイミングで、そのスナップショットに対して管理情報格納用チャンクＣＫ１内の記憶領域ＳＡ１が所定大きさ単位（例えば128〔MB〕単位）で割り当てられ、その記憶領域ＳＡ１内にそのスナップショットの管理情報が格納される。
【００４５】
またプライマリボリュームＰＶＯＬに対する旧データ退避用チャンクＣＫ２の対応付けは、プライマリボリュームＰＶＯＬに格納されたデータをデータプールＤＰに退避させる必要が生じたタイミングで行われる。そして、この後、そのプライマリボリュームＰＶＯＬから退避された旧データがその旧データ退避用チャンクＣＫ２に順次格納される。なお、プライマリボリュームＰＶＯＬからの旧データの退避は論理ブロック単位（64〔KB〕単位）で行われる。従って、プライマリボリュームＰＶＯＬの１つの論理ブロックから旧データが退避される場合に旧データ退避用チャンクＣＫ２から当該データの格納先として割り当てられる記憶領域ＳＡ２のサイズは論理ブロックと同じ64〔KB〕となる。
【００４６】
（２−３）スナップショット管理情報
次に、スナップショットに関する各種管理情報（以下、適宜、これをスナップショット管理情報と呼ぶ）の具体的な内容について説明する。本ディスクアレイ装置４の場合、かかるスナップショット管理情報として、図５に示すように、ペア管理テーブル２０及び分割順番号−世代番号マッピングテーブル２７がキャッシュメモリ１５に格納され、スナップショット差分ビットマップ２１、プライマリボリューム差分ビットマップ２２、スナップショット差分集約ビットマップ２３、旧データ退避アドレステーブル２４、旧データ退避領域空きビットマップ２５、旧データ退避未反映ビットマップ２６及びスナップショットライト差分ビットマップ２８がデータプールＤＰの管理情報格納用チャンクＣＫ１に格納されている。
【００４７】
（２−３−１）ペア管理テーブル
ペア管理テーブル２０は、プライマリボリュームＰＶＯＬ及びスナップショットボリュームＳＳＶＯＬから構成される各コピーペアのペア状態等を管理するために用いられるテーブルであり、プライマリボリュームＰＶＯＬごとにそれぞれ作成される。
【００４８】
このペア管理テーブル２０は、図６に示すように、同一のプライマリボリュームＰＶＯＬに対して設定可能なコピーペアのペア数の最大値と同じ数のエントリ（列）２０Ａを備えて構成される。本実施の形態の場合、上述のように同一のプライマリボリュームＰＶＯＬに対して設定可能なコピーペアの最大ペア数は1024個であるため、これと同じ数のエントリ２０Ａがペア管理テーブル２０に用意されていることになる。
【００４９】
各エントリ２０Ａは、それぞれペア番号欄２０Ｂ、ペア状態欄２０Ｃ、ＬＵＮ欄２０Ｄ及び世代番号欄２０Ｅを含む複数の欄に区分されている。そしてペア番号欄２０Ｂには、対応するコピーペアに対して付与された識別番号（以下、これをペア番号と呼ぶ）が格納される。またペア状態欄２０Ｃには、そのコピーペアのペア状態が格納され、ＬＵＮ欄２０Ｄには、そのコピーペアを構成するスナップショットボリュームＳＳＶＯＬに付与されたＬＵＮが格納される。さらに世代番号欄２０Ｅには、そのスナップショットボリュームＳＳＶＯＬにより保持されているスナップショットの世代番号が格納される。なお、世代番号の詳細については後述する。
【００５０】
従って、例えば図６では、「PN0」というペア番号のコピーペアは、このペア管理テーブル２０と対応付けられたプライマリボリュームＰＶＯＬと、「２」というＬＵＮが付与されたスナップショットボリュームＳＳＶＯＬとから構成され、そのコピーペアの現在のペア状態が「スプリット（Split）」であり、世代番号が「２」のスナップショットが当該スナップショットボリュームＳＳＶＯＬにより保持されていることが示されている。
【００５１】
このペア管理テーブル２０は、新たなコピーペアの作成時やコピーペアの操作時などに更新される。例えば、スナップショットボリュームＳＳＶＯＬが新たに作成された場合、そのスナップショットボリュームＳＳＶＯＬに対して１つのエントリ２０Ａが割り当てられ、そのエントリ２０Ａのペア番号欄２０Ｂに、そのスナップショットボリュームＳＳＶＯＬと、プライマリボリュームＰＶＯＬとで構成されるコピーペアに対して付与されたペア番号が格納される。また、そのエントリ２０Ａのペア状態欄２０Ｃには、そのコピーペアのペア状態として「シンプレックス」が格納され、当該エントリ２０ＡのＬＵＮ欄２０Ｄには、そのスナップショットボリュームＳＳＶＯＬのＬＵＮが格納される。さらに、この後、そのスナップショットボリュームＳＳＶＯＬがプライマリボリュームＰＶＯＬから分割されて新たなスナップショットが取得された場合、ペア管理テーブル２０における対応するペア状態欄２０Ｃが「ペアード」から「スプリット」に更新される。
【００５２】
（２−３−２）スナップショット差分ビットマップ
スナップショット差分ビットマップ２１は、各スナップショット内の個々の論理ブロックのデータをデータプールＤＰに退避済みであるか否かを管理するために用いられるビットマップであり、プライマリボリュームＰＶＯＬごとに作成される。なお、以下の説明においては、同一のプライマリボリュームＰＶＯＬについて取得された個々のスナップショットを区別するため、「世代」及び「世代番号」という用語を用いる。本明細書における「世代」及び個々の「世代」に対して付与された識別番号である「世代番号」は、後述するように、取得されたスナップショットに対して任意に付与された「０」から始まる番号にすぎず、そのスナップショットが取得された順番（そのスナップショットを保持するスナップショットボリュームＳＳＶＯＬがプライマリボリュームＰＶＯＬから分割された順番）を表すものではない。
【００５３】
スナップショット差分ビットマップ２１は、図７に示すように、第１のエントリ（列）２１Ａと、同一のプライマリボリュームＰＶＯＬについて取得可能な最大数のスナップショットの世代数と同じ数の第２のエントリ（列）２１Ｂとを備えて構成される。本実施の形態の場合、上述のように同一のプライマリボリュームＰＶＯＬについて最大1024個のスナップショットを取得可能であるため、これと同じ数の第２のエントリ２１Ｂが予めスナップショット差分ビットマップ２１に設けられている。
【００５４】
第１のエントリ２１Ａは、プライマリボリュームＰＶＯＬ内の各論理ブロックとそれぞれ対応付けられた複数のＬＢＡ欄２１ＡＡに区分されている。そして、これらＬＢＡ欄２１ＡＡには、それぞれ対応する論理ブロックのＬＢＡが順番に格納されている。
【００５５】
また各第２のエントリ２１Ｂは、それぞれプライマリボリュームＰＶＯＬ内の各論理ブロックとそれぞれ対応付けられた複数の差分ビット欄２１ＢＡに区分されている。そして各差分ビット欄２１ＢＡには、それぞれ対応する世代のスナップショット内の対応する論理ブロックのデータをデータプールＤＰに退避済みであるか否かを表す差分ビットが格納されている。
【００５６】
実際上、この差分ビットは、初期時は「０」に設定されており、対応する世代のスナップショットにおける対応する論理ブロックのデータがデータプールＤＰに退避される際に「１」に更新される。従って、差分ビットの「１」は、対応する世代のスナップショットにおける対応する論理ブロックのデータがデータプールＤＰに退避されていることを表し、差分ビットの「０」は、対応する世代のスナップショットにおける対応する論理ブロックのデータがデータプールＤＰに退避されていないことを表している。
【００５７】
（２−３−３）プライマリボリューム差分ビットマップ
プライマリボリューム差分ビットマップ２２は、同一のプライマリボリュームＰＶＯＬについて取得されたすべての世代のスナップショットにおいて、同じＬＢＡの論理ブロック内のデータをデータプールＤＰに退避済みであるか否かを管理するために利用されるビットマップであり、プライマリボリュームＰＶＯＬごとに作成される。
【００５８】
このプライマリボリューム差分ビットマップ２２は、図８に示すように、第１及び第２のエントリ（列）２２Ａ，２２Ｂを備えて構成される。そして第１のエントリ２２Ａは、対応するプライマリボリュームＰＶＯＬ内の各論理ブロックとそれぞれ対応付けられた複数のＬＢＡ欄２１ＡＡに区分されており、これらＬＢＡ欄２１ＡＡに、それぞれ対応する論理ブロックのＬＢＡが格納されている。
【００５９】
また第２のエントリ２２Ｂは、第１のエントリの各ＬＢＡ欄２１ＡＡとそれぞれ対応させて設けられた複数の差分ビット欄２２ＢＡに区分されている。そして各差分ビット欄２２ＢＡには、それぞれそのプライマリボリュームＰＶＯＬについて取得されたすべての世代のスナップショットにおいて、対応するＬＢＡの論理ブロックのデータがすべてデータプールＤＰに退避済みであるか否かを表す差分ビットが格納されている。
【００６０】
具体的に、差分ビットは、対応するプライマリボリュームＰＶＯＬについて取得されたすべての世代のスナップショットにおいて、対応するＬＢＡの論理ブロックのデータがデータプールＤＰに退避されている場合には「１」に設定され、いずれかの世代のスナップショットにおいて、対応するＬＢＡの論理ブロックのデータがデータプールＤＰに退避されていない（未退避）の場合には「０」に設定される。
【００６１】
このプライマリボリューム差分ビットマップ２２は、対応するプライマリボリュームＰＶＯＬにデータが書き込まれた場合に、プライマリボリュームＰＶＯＬにおけるそのデータが書き込まれた論理ブロックと対応付けられた差分ビット欄２２ＢＡの差分ビットが「１」に設定される。これは、後述のように、プライマリボリュームＰＶＯＬにデータが書き込まれた場合、そのデータが書き込まれた論理ブロックのうちの未だデータ退避が行われていないすべての世代のスナップショットについてデータの退避が行われ、結果的にそのとき取得されているすべての世代のスナップショットにおいて、その論理ブロックのデータが旧データとしてデータプールＤＰに退避されることになるからである。
【００６２】
またこのプライマリボリューム差分ビットマップ２２は、新しい世代のスナップショットが取得されると、すべての差分ビット欄２２ＢＡの差分ビットが「０」に設定される。これは、取得直後のスナップショットでは、いずれの論理ブロックのデータもデータプールＤＰに退避されていないからである。
【００６３】
（２−３−４）スナップショット差分集約ビットマップ
一方、スナップショット差分集約ビットマップ２３は、スナップショット差分ビットマップ２１における個々の差分ビットにより表される情報を、スナップショットごとに、かつ、所定個数の論理ブロックごとの情報に集約したビットマップであり、プライマリボリュームＰＶＯＬごとに作成される。
【００６４】
実際上、スナップショット差分集約ビットマップ２３は、図９に示すように、第１のエントリ（列）２３Ａと、同一のプライマリボリュームＰＶＯＬについて取得可能な最大数のスナップショットの世代数と同じ数の第２のエントリ（列）２３Ｂとを備えて構成される。本実施の形態の場合、上述のように同一のプライマリボリュームＰＶＯＬについて取得可能なスナップショットの世代数の最大値は1024であるため、これと同じ数の第２のエントリ２３Ｂがスナップショット差分集約ビットマップ２３に設けられている。
【００６５】
第１のエントリ２３Ａは、プライマリボリュームＰＶＯＬ内のＬＢＡが連続する所定個数（図９では１６個）の論理ブロックを１つの論理ブロック群として、各論理ブロック群とそれぞれ対応付けられた複数の集約ＬＢＡ欄２３ＡＡに区分されている。そして各集約ＬＢＡ欄２３ＡＡには、それぞれ対応する論理ブロック群を構成する各論理ブロックのＬＢＡが格納されている。
【００６６】
また各第２のエントリ２３Ｂは、第１のエントリ２３Ａと同様に、それぞれ上述の各論理ブロック群とそれぞれ対応付けられた複数の差分ビット欄（以下、これを差分集約ビット欄と呼ぶ）２３ＢＡに区分されている。そして各差分集約ビット欄２３ＢＡには、それぞれ対応する世代のスナップショットにおける、対応する論理ブロック群のデータの退避状態を表す差分集約ビットが格納される。
【００６７】
具体的に、差分集約ビットは、スナップショット差分ビットマップ２１（図７）における対応する論理ブロック群を構成する各論理ブロックとそれぞれ対応付けられたすべての差分ビットがすべて「０」である場合には「０」に設定され、これ以外の場合には「１」に設定される。また差分集約ビットは、対応するプライマリボリュームＰＶＯＬ又はスナップショットの対応する論理ブロックにデータの書き込み（ライト）があった場合に、必要に応じて「０」から「１」に変更される。
【００６８】
このスナップショット差分集約ビットマップ２３は、プライマリボリュームＰＶＯＬ及びスナップショットボリュームＳＳＶＯＬのペアを削除（つまり、そのスナップショットボリュームＳＳＶＯＬに保持されたスナップショットを削除）するペア削除処理において、そのスナップショットの旧データをデータプールＤＰから削除する際に使用される。
【００６９】
すなわち、削除対象のスナップショットの旧データをデータプールＤＰから削除する場合、どの論理ブロックの旧データがデータプールＤＰに退避されているかをチェックする必要があるが、スナップショット差分ビットマップ２１を用いて論理ブロックごとにチェックを行っていては時間がかかり過ぎる。
【００７０】
そこで、このような場合には、まず、スナップショット差分集約ビットマップ２３をチェックし、差分集約ビット欄２３ＢＡに格納された差分集約ビットが「１」の論理ブロック群については、その論理ブロック群を構成する各論理ブロックのうちのどの論理ブロックの旧データがデータプールＤＰに退避されているかをスナップショット差分ビットマップ２１によりチェックし、差分集約ビット欄２３ＢＡに格納された差分集約ビットが「０」の論理ブロック群については、かかるスナップショット差分ビットマップ２１のチェックを行わない。このような処理により、かかるペア削除処理を高速化することができる。なお、このペア削除処理の詳細については後述する（図２７Ａ及び図２７Ｂ参照）。
【００７１】
（２−３−５）旧データ退避アドレステーブル
旧データ退避アドレステーブル２４は、各世代のスナップショットについて、個々の論理ブロックに格納されていたデータがデータプールＤＰ内のどこに退避されているかを管理するためのテーブルであり、プライマリボリュームＰＶＯＬごとに作成される。
【００７２】
この旧データ退避アドレステーブル２４は、図１０に示すように、第１のエントリ（列）２４Ａと、同一のプライマリボリュームＰＶＯＬについて取得可能な最大数のスナップショットの世代数と同じ数の第２のエントリ（列）２４Ｂとを備えて構成される。本実施の形態の場合、上述のように同一のプライマリボリュームＰＶＯＬについて取得可能なスナップショットの世代数は最大1024個であるため、これと同じ数の第２のエントリ２４Ｂが旧データ退避アドレステーブル２４に予め設けられている。
【００７３】
第１のエントリ２４Ａは、プライマリボリュームＰＶＯＬ内の各論理ブロックとそれぞれ対応付けられた複数のＬＢＡ欄２４ＡＡに区分されており、これらＬＢＡ欄２４ＡＡに、それぞれ対応する論理ブロックのＬＢＡが格納されている。
【００７４】
また第２のエントリ２４Ｂは、それぞれ第１のエントリ２４Ａの各ＬＢＡ欄２４ＡＡとそれぞれ対応付けられた複数のアドレス欄２４ＢＡに区分されている。そして各アドレス欄２４ＢＡには、それぞれ対応する世代のスナップショット内の対応する論理ブロックの旧データがデータプールＤＰに退避済みである場合には、そのデータを退避したデータプールＤＰ内の記憶領域ＳＡ２（図３）のアドレスが格納される。
【００７５】
実際上、各アドレス欄２４ＢＡには、作成当初は初期値（「０」）が格納されている。そして、対応するプライマリボリュームＰＶＯＬ又はスナップショットに対してデータをライトする際、データライト前の旧データをデータプールＤＰに退避するときに、そのデータプールＤＰにおけるそのデータの退避先のアドレスが、対応するアドレス欄２４ＢＡに格納される。
【００７６】
この旧データ退避アドレステーブル２４は、スナップショットをリード先とするリードコマンドがホスト計算機３から与えられたときに参照される。そしてリード先となるスナップショットと対応付けられた第２のエントリ２４Ｂのアドレス欄２４ＢＡに初期値が格納されている論理ブロックについてはプライマリボリュームＰＶＯＬからデータが読み出され、かかるアドレス欄２４ＢＡにデータプールＤＰ内のアドレスが格納されている論理ブロックについては、データプールＤＰにおけるそのアドレスから１論理ブロック分のデータが読み出される。そして、これらプライマリボリュームＰＶＯＬから読み出されたデータと、データプールＤＰから読み出されたデータとが組み合わされてスナップショットが復元され、復元されたスナップショットがホスト計算機３に提供される。
【００７７】
また、旧データ退避アドレステーブル２４は、スナップショットへのデータライト時や、スナップショットの削除時に、データライト先又は削除対象のスナップショットが他の世代のスナップショットとデータを共有しているか否かをチェックする際にも使用される。
【００７８】
すなわち、２つのスナップショットがデータを共有している場合、同じ論理ブロックと対応付けられたアドレス欄２４ＢＡにはデータプールＤＰ上の同じアドレスが格納される。そこで、かかるチェックは、データのライト先のスナップショットについては、そのスナップショットにおけるデータライト先の論理ブロックと対応付けられたアドレス欄２４ＢＡについて、そのアドレス欄２４ＢＡに格納されているアドレスと同じアドレスが他の第２のエントリ２４Ｂのいずれのアドレス欄２４ＢＡにも格納されていないか否かを判断することにより行われる。
【００７９】
そして、データライト先のスナップショットにおけるデータライト先の論理ブロックと対応付けられたアドレス欄２４ＢＡに格納されているアドレスと同じアドレスが他のいずれかの第２のエントリ２４Ｂのアドレス欄２４ＢＡに格納されている場合、そのスナップショットにおけるその論理ブロックのデータは、他の世代のスナップショットと共有されていることになる。
【００８０】
かくして、この場合には、データプールＤＰ上の対応する旧データ退避用チャンクＣＫ２（図３）内に新たな記憶領域ＳＡ２（図３）が確保され、データライト先のスナップショットにおけるそのデータが書き込まれる前のデータ（旧データ）がこの記憶領域ＳＡ２に退避される。また、この際、旧データ退避アドレステーブル２４上のデータライト先のスナップショットと対応付けられた第２のエントリ２４Ｂにおける、データライト先の論理ブロックと対応付けられたアドレス欄２４ＢＡに、上述の記憶領域ＳＡ２のアドレスが格納される。
【００８１】
また、削除対象のスナップショットに対するかかるチェックは、旧データ退避アドレステーブル２４上のそのスナップショットと対応付けられた第２のエントリ２４Ｂの各アドレス欄２４ＢＡについて、そのアドレス欄２４ＢＡに格納されたアドレスが、旧データ退避アドレステーブル２４上の他のいずれのアドレス欄２４ＢＡに格納されているアドレスと一致するか否かを判断することにより行われる。
【００８２】
そして、旧データ退避アドレステーブル２４上の削除対象のスナップショットに対する各アドレス欄２４ＢＡにそれぞれ格納されたアドレスが、いずれの他のアドレス欄２４ＢＡに格納されているアドレスとも一致しない場合にはそのデータは削除され、旧データ退避アドレステーブル２４上の削除対象のスナップショットに対する各アドレス欄２４ＢＡに格納されたアドレスが、いずれかの他のアドレス欄２４ＢＡに格納されているアドレスと一致した場合には、そのデータを削除することなく、データプールＤＰ上に残しておく。
【００８３】
（２−３−６）旧データ退避領域空きビットマップ
旧データ退避領域空きビットマップ２５は、データプールＤＰ内に定義された旧データ退避用チャンクＣＫ２（図３）内の記憶領域ＳＡ２（図３）のうち、旧データが退避されていない記憶領域（以下、これを空き記憶領域と呼ぶ）ＳＡ２を管理するために利用されるテーブルであり、データプールＤＰごとに作成される。なお、本実施の形態においては、データプールＤＰは１つだけであるので、旧データ退避領域空きビットマップ２５も１つだけ作成される。
【００８４】
旧データ退避領域空きビットマップ２５は、図１１に示すように、データプールＤＰ内の旧データ退避用チャンクＣＫ２数と同じ数のエントリ２５Ａを備えて構成される。各エントリ２５Ａは、それぞれデータプールＤＰ内のいずれかの旧データ退避用チャンクＣＫ２と対応付けられており、当該旧データ退避用チャンクＣＫ２内の１論理ブロック分の旧データが退避される各記憶領域ＳＡ２とそれぞれ１対１に対応付けられた複数の空きビット欄２５ＡＡに区分されている。
【００８５】
そして、各空きビット欄２５ＡＡには、それぞれ対応する旧データ退避用チャンクＣＫ２内の対応する記憶領域ＳＡ２に旧データが退避されているか否かを表す空きビットがそれぞれ格納される。具体的に、空きビットは、対応する旧データ退避用チャンクＣＫ２内の対応する記憶領域ＳＡ２が空き記憶領域である場合には「０」に設定され、当該記憶領域ＳＡ２が空き記憶領域でない場合には「１」に設定される。
【００８６】
この旧データ退避領域空きビットマップ２５は、プライマリボリュームＰＶＯＬやスナップショットにデータを書き込むに際し、旧データをデータプールＤＰ内の対応する旧データ退避用チャンクＣＫ２に退避させる場合に、その旧データ退避用チャンクＣＫ２内の空き記憶領域ＳＡ２を検索するときに利用される。そしてプライマリボリュームＰＶＯＬやスナップショットのデータをその旧データ退避用チャンクＣＫ２内の記憶領域ＳＡ２に退避させた場合、対応する空きビット欄２５ＡＡに格納された空きビットが「０」から「１」に更新される。
【００８７】
また旧データ退避領域空きビットマップ２５は、スナップショットが削除され、これに伴いデータプールＤＰ内の旧データ退避用チャンクＣＫ２からそのスナップショットの旧データが削除された場合に、対応する空きビット欄２５ＡＡの空きビットが「１」から「０」に更新される。そして旧データ退避領域空きビットマップ２５内の各エントリ２５Ａにおいて、そのエントリ２５Ａに含まれる各空きビット欄２５ＡＡに格納された空きビットがすべて「０」となった場合に、その旧データ退避領域空きビットマップ２５と対応付けられた旧データ退避用チャンクＣＫ２が解放される。
【００８８】
（２−３−７）旧データ退避未反映ビットマップ
スナップショットの複数世代に渡って更新が行われなかった論理ブロック内のデータが更新された場合、そのデータはかかる更新に伴って旧データとしてデータプールＤＰに退避される。この場合、データプールＤＰに退避された旧データは、かかる複数世代のスナップショット間で共有されることになるため、これに応じてスナップショット差分ビットマップ２１や、スナップショット差分集約ビットマップ２３及び旧データ退避アドレステーブル２４などの管理情報をかかる複数世代のスナップショット分だけ更新する必要がある。
【００８９】
例えば、図１２（Ａ）〜（Ｃ）に示すように、プライマリボリュームＰＶＯＬ内のＬＢＡが「０」の論理ブロックが更新されないまま第０〜第1023世代（世代番号は「０」〜「1023」）のスナップショットが取得されている状態において、その論理ブロックに格納されたデータが更新された場合、図１３（Ａ）〜（Ｃ）に示すように、データプールＤＰへの旧データの退避に伴って、スナップショット差分ビットマップ２１における当該論理ブロックと対応付けられた各差分ビット欄２１ＢＡにそれぞれ格納されているすべての差分ビット（破線Ｋ１Ａで囲まれたすべての差分ビット）と、スナップショット差分集約ビットマップ２３におけるかかる論理ブロックと対応付けられた各差分集約ビット欄２３ＢＡにそれぞれ格納されているすべての差分集約ビット（破線Ｋ２Ａで囲まれたすべての差分集約ビット）と、旧データ退避アドレステーブル２４におけるかかる論理ブロックと対応付けられた各アドレス欄２４ＢＡにそれぞれ格納されているすべてのアドレス（破線Ｋ３Ａで囲まれたすべてのアドレス）とを更新しなければならない。
【００９０】
しかしながら、このような処理は更新すべき世代数が多いほど負荷が大きく、このような処理をプライマリボリュームＰＶＯＬへのデータライト時に実行することは、当該プライマリボリュームＰＶＯＬに対するデータのライト性能に悪影響を及ぼすおそれがある。
【００９１】
そこで、本実施の形態によるディスクアレイ装置４においては、プライマリボリュームＰＶＯＬへのデータライト時には、旧データを共有する複数世代のスナップショットのうち、最新世代のスナップショットの管理情報のみを更新する。そして、残りの世代のスナップショットの管理情報は、その残りのスナップショットへのアクセス（リードアクセス又はライトアクセス）があったときや、その残りのスナップショットを削除する際（そのスナップショットを保持するスナップショットボリュームＳＳＶＯＬとプライマリボリュームＰＶＯＬとの間のコピーペアを削除する際）に更新する。
【００９２】
例えば、図１２（Ａ）〜（Ｃ）について上述した例の場合、図１４（Ａ）〜（Ｃ）に示すように、プライマリボリュームＰＶＯＬへのデータライト時には、旧データを共有する複数世代のスナップショットのうち、最新世代である第1023世代（世代番号は「1023」）のスナップショットに関する管理情報（破線Ｋ１Ｃ〜Ｋ３Ｃで囲んだ管理情報）のみを更新する。そして、残りの世代のスナップショットの管理情報（破線Ｋ１Ｂ〜Ｋ３Ｂで囲んだ管理情報）は、その残りのスナップショットへのリードアクセス又はライトアクセスがあったときや、その残りのスナップショットを削除する際に更新する。
【００９３】
このように本ディスクアレイ装置４では、頻繁に発生するプライマリボリュームＰＶＯＬへのデータライト時の処理負荷を、あまり発生しないスナップショットへのアクセス時に移すことで、上述のような管理情報の更新処理に起因するプライマリボリュームＰＶＯＬへのデータライト性能が低下するのを有効に防止している。
【００９４】
以上のような動作を実行するため、本ディスクアレイ装置４では、旧データを共有する複数世代のスナップショットのうち、最新世代以外の世代のスナップショットの管理情報を更新済か否かを、旧データ退避未反映ビットマップ２６を用いて管理している。この旧データ退避未反映ビットマップ２６は、プライマリボリュームＰＶＯＬごとに作成される。
【００９５】
旧データ退避未反映ビットマップ２６は、図１５に示すように、第１及び第２のエントリ（列）２６Ａ，２６Ｂを備えて構成される。そして第１のエントリ２６Ａは、プライマリボリュームＰＶＯＬ内の各論理ブロックとそれぞれ対応付けられた複数のＬＢＡ欄２６ＡＡに区分されており、これらＬＢＡ欄２６ＡＡに、それぞれ対応する論理ブロックのＬＢＡが格納されている。
【００９６】
また第２のエントリ２６Ｂは、対応するプライマリボリュームＰＶＯＬの各論理ブロックにそれぞれ対応させて設けられた複数の未反映ビット欄２６ＢＡを備えて構成される。そして、これらの未反映ビット欄２６ＢＡには、それぞれプライマリボリュームＰＶＯＬへのデータライトがあった場合に、最新世代以外の世代のスナップショットの管理情報を更新済であるか否かを表す未反映ビットが格納されている。
【００９７】
具体的に、未反映ビットは、プライマリボリュームＰＶＯＬへのデータライトにより、対応する論理ブロック内の旧データがデータプールＤＰに退避された場合に初期値「０」から「１」に更新され、この後、最新世代以外の世代のスナップショットの管理情報が更新されると、「０」に戻される。
【００９８】
つまり、かかる未反映ビットが「１」であることは最新世代以外の世代のスナップショットの管理情報の更新が行われていないことを表し、かかる未反映ビットが「０」であることは最新世代以外の世代のスナップショットの管理情報が更新済であることを表す。
【００９９】
なお、データプールＤＰに退避された旧データを共有するスナップショットの世代間でどの世代が最新であるかという判断は、後述する分割順番号−世代番号マッピングテーブル２７に基づいて行われる。
【０１００】
（２−３−８）分割順番号−世代番号マッピングテーブル
図１２〜図１５について上述したように、本ディスクアレイ装置４では、プライマリボリュームＰＶＯＬへのデータライト時には、旧データを共有する複数世代のスナップショットのうち、最新世代のスナップショットの管理情報のみを更新し、残りの世代のスナップショットの管理情報は、その残りのスナップショットへのリードアクセス又はライトアクセスがあったときや、その残りのスナップショットを削除する際に更新する。
【０１０１】
ここで、図１６（Ａ−１）は、このような機能を有する本ディスクアレイ装置４におけるスナップショット差分ビットマップ２１の状態例を示し、図１６（Ａ−２）は、図１６（Ａ−１）と同じ時点における旧データ退避アドレステーブル２４の状態例を示す。これら図１６（Ａ−１）及び（Ａ−２）は、いずれもスナップショット差分ビットマップ２１や、旧データ退避アドレステーブル２４におけるＬＢＡが「０」の論理ブロックに対応する部分のみを抜き出したものである。また図１６（Ａ−２）において、「A1」〜「A3」は、いずれもデータプールＤＰ上のアドレスを示す。後述する図１６（Ｂ−１）及び（Ｂ−２）についても同様である。
【０１０２】
図１６（Ａ−１）では、第３世代（世代番号は「３」）のスナップショットが取得された後、第４世代（世代番号は「４」）のスナップショットが取得されるまでの間にプライマリボリュームＰＶＯＬのＬＢＡが「０」の論理ブロックのデータが更新されたため、スナップショット差分ビットマップ２１におけるＬＢＡが「０」の論理ブロックと対応付けられた差分ビットがデータライト時の最新世代として「１」に更新されたことが示されている。またこの図１６（Ａ−１）では、この際、第２世代（世代番号は「２」）のスナップショットの管理情報の更新が行われず、ＬＢＡが「０」の論理ブロックと対応付けられた差分ビットが「０」のままとなっていることも示されている。
【０１０３】
また図１６（Ａ−１）では、その後、第７世代（世代番号は「７」）のスナップショットが取得されるまでの間はプライマリボリュームＰＶＯＬのＬＢＡが「０」の論理ブロックのデータが更新されず、第７世代のスナップショットの取得後にＬＢＡが「０」の論理ブロックのデータが更新されたため、スナップショット差分ビットマップ２１における当該論理ブロックと対応付けられた差分ビットがデータライト時の最新世代として「１」に更新されたことが示されている。またこの図では、この際、第４〜６世代（世代番号は「４」〜「６」）のスナップショットの管理情報の更新が行われず、当該論理ブロックと対応付けられた第４〜６世代の差分ビットがいずれも「０」のままとなっていることも示されている。
【０１０４】
この場合において、例えば、取得された順番が早いスナップショットほど、そのスナップショットに若い世代番号を割り当てる制御が行われる場合には、その後行われる「最新世代」のスナップショットの管理情報を「残りの世代」のスナップショットの管理情報に反映させる処理（以下、これを差分反映処理と呼ぶ）の実行時において、例えば、第２世代のスナップショットについては、第３世代のスナップショットの管理情報を反映させ、第４〜第６世代のスナップショットについては、第７世代のスナップショットの管理情報を反映させれば良い。
【０１０５】
具体的には、第２世代のスナップショットについては、図１６（Ｂ−１）に示すように、スナップショット差分ビットマップ２１のエントリのうち、第２世代のスナップショットと対応付けられたエントリ２１Ｂにおける当該論理ブロックと対応付けられた差分ビット欄２１ＢＡの差分ビットを「１」に更新する。また図１６（Ｂ−２）に示すように、旧データ退避アドレステーブル２４のエントリ２４Ｂのうち、第３世代のスナップショットと対応付けられたエントリ２４ＢにおけるプライマリボリュームＰＶＯＬのＬＢＡが「０」の論理ブロックと対応付けられたアドレス欄２４ＢＡに格納されたアドレスを、第２世代のスナップショットと対応付けられたエントリ２４Ｂにおける当該論理ブロックと対応付けられたアドレス欄２４ＢＡにコピーする。さらに、スナップショット差分集約ビットマップ２３（図９）のエントリ２３Ｂ（図９）のうち、第２世代のスナップショットと対応付けられたエントリ２３Ｂにおけるかかる論理ブロックと対応付けられた差分集約ビット欄２３ＢＡ（図３）に格納されている差分集約ビットも必要に応じて更新する。
【０１０６】
同様に、第４〜第６世代のスナップショットについては、図１６（Ｂ−１）に示すように、スナップショット差分ビットマップ２１のエントリ２１Ｂのうち、第４〜第６世代のスナップショットとそれぞれ対応付けられた各エントリ２１Ｂにおける当該論理ブロックと対応付けられた差分ビット欄２１ＢＡの差分ビットを「１」にそれぞれ更新する。また図１６（Ｂ−２）に示すように、旧データ退避アドレステーブル２４のエントリ２４Ｂのうち、第７世代のスナップショットと対応付けられたエントリ２４ＢにおけるプライマリボリュームＰＶＯＬのＬＢＡが「０」の論理ブロックと対応付けられたアドレス欄２４ＢＡに格納されたアドレスを、第４〜第６世代のスナップショットとそれぞれ対応付けられた各エントリ２４Ｂにおける当該論理ブロックと対応付けられた各アドレス欄２４ＢＡにそれぞれコピーする。さらに、スナップショット差分集約ビットマップ２３（図９）のエントリ２３Ｂ（図９）のうち、第４〜第６世代のスナップショットとそれぞれ対応付けられた各エントリ２３Ｂにおけるかかる論理ブロックと対応付けられた差分集約ビット欄２３ＢＡに格納されている差分集約ビットも必要に応じて更新する。
【０１０７】
さらに、この後、旧データ退避未反映ビットマップ２６（図１５）における、プライマリボリュームＰＶＯＬのかかる論理ブロックと対応付けられた第２及び第４〜第６世代のスナップショットと対応する未反映ビット欄２６ＢＡ（図１５）に格納されている未反映ビットを「１」から「０」に更新する。
【０１０８】
以上のような差分反映処理により、第３世代のスナップショットの管理情報を第２世代のスナップショットの管理情報に反映することができると共に、第７世代のスナップショットの管理情報を第４〜第６世代のスナップショットの管理情報に反映することができる。
【０１０９】
しかしながら、本ディスクアレイ装置４の場合、後述のように世代番号は、スナップショットボリュームＳＳＶＯＬをプライマリボリュームＰＶＯＬから分割することによりスナップショットを取得したときに、そのスナップショットに対して任意に割り当てられる番号であって、そのスナップショットが取得された順番を表すものではない。
【０１１０】
従って、例えば図１６（Ａ−１）〜（Ｂ−２）の例において、例えば第２世代のスナップショットが第３世代のスナップショットよりも後に取得されたものである場合に上述のような差分反映処理を実行すると、先に取得されたスナップショットの管理情報が後から取得されたスナップショットの管理情報に反映されることとなり、不具合が生じることとになる。
【０１１１】
そこで、本ディスクアレイ装置４は、スナップショットを保持するスナップショットボリュームＳＳＶＯＬをプライマリボリュームから分割することによりスナップショットを取得した順番と、そのスナップショットに割り当てられた世代番号との関係を分割順番号−世代番号マッピングテーブル２７を用いて管理している。この分割順番号−世代番号マッピングテーブル２７は、プライマリボリュームＰＶＯＬごとに作成される。
【０１１２】
分割順番号−世代番号マッピングテーブル２７は、図１７に示すように、第１及び第２のエントリ（行）２７Ａ，２７Ｂを備えて構成される。そして第１のエントリ２７Ａは、同一のプライマリボリュームＰＶＯＬに対して設定可能なコピーペアのペア数の最大値と同じ数の分割順番号欄２７ＡＡに区分され、これら分割順番号欄２７ＡＡにそれぞれ分割順番号が格納されている。なお、分割順番号は、左端の分割順番号欄２７ＡＡに「０」、その右隣の分割順番号欄２７ＡＡに「１」、さらにその右隣の分割順番号欄２７ＡＡに「２」……というように、右の分割順番号欄２７ＡＡほど１ずつ数値が大きくなるように分割順番号欄２７ＡＡに格納されている。
【０１１３】
また第２のエントリ２７Ｂは、上述の分割順番号欄２７ＡＡにそれぞれ対応させて複数の世代番号欄２７Ｂに区分され、これらの世代番号欄２７Ｂに、対応するスナップショットの世代番号が格納されている。なお、ここでいう「対応するスナップショットの世代番号」とは、同一のプライマリボリュームＰＶＯＬとコピーペアに設定されたスナップショットボリュームＳＳＶＯＬのうち、当該プライマリボリュームＰＶＯＬから分割された順番が、対応する分割順番号欄２７ＡＡに格納された分割順番号と同じスナップショットボリュームＳＳＶＯＬにより保持されているスナップショットを指す。
【０１１４】
この分割順番号−世代番号マッピングテーブル２７は、第１に、プライマリボリュームＰＶＯＬに対するデータライトがあったときに、最新世代のスナップショットを検出するために利用され、第２に、上述の差分反映処理時にスナップショットボリュームＳＳＶＯＬのプライマリボリュームＰＶＯＬからの分割順番号を検出するために利用される。
【０１１５】
具体的に、ディスクアレイ装置４は、例えば、スナップショット差分ビットマップ２１が図１８（Ｃ）に示す状態であり、分割順番号−世代番号マッピングテーブル２７が図１８（Ｂ）に示す状態である場合、分割順番号−世代番号マッピングテーブル２７を利用して、スナップショット差分ビットマップ２１における各スナップショットとそれぞれ対応するエントリ２１Ｂの並び順を、図１８（Ａ）に示すように、スナップショットの取得順に並び変える。同様に、このときの旧データ退避アドレステーブル２４が図１９（Ｃ）に示す状態の場合、分割順番号−世代番号マッピングテーブル２７（図１９（Ｂ））を利用して、旧データ退避アドレステーブル２４における各スナップショットとそれぞれ対応するエントリ２１Ｂの並び順を、図１９（Ａ）に示すように、その取得順に並び替える。
【０１１６】
例えば図１８（Ｃ）の例では、図１８（Ｂ）を参照すると、第０世代（世代番号は「０」）のスナップショットが分割順番号が「０」のスナップショットボリュームＳＳＶＯＬにより保持されたスナップショットであり、その後、第２世代、第３世代、第４世代、第６世代、第７世代、第１世代及び第５世代のスナップショットがこの順番で取得されていることが分かる。そこで、差分反映処理時には、図１８（Ａ）に示すように、各スナップショットとそれぞれ対応するエントリ２１Ｂがこの世代番号の順番で並ぶように、スナップショット差分ビットマップ２１における各エントリ２１Ｂを並び替え、図１８（Ａ）に示すように、各スナップショットと対応するエントリ２４Ｂがこの世代番号の順番で並ぶように、旧データ退避アドレステーブル２４における各エントリ２４Ｂを並び替える。
【０１１７】
そして、差分反映処理では、このようにしてエントリ２１Ａ，２４Ｂの並び順を対応するスナップショットボリュームＳＳＶＯＬの分割順（スナップショットの取得順）に並び替えたスナップショット差分ビットマップ２１を利用して、まず、プライマリボリュームＰＶＯＬの１つの論理ブロックに注目し、各エントリ２１Ｂのその論理ブロックと対応付けられた差分ビットのうち、値が「１」の差分ビットで挟まれた値が「０」の差分ビットを検出する。
【０１１８】
例えば図１８（Ａ）の例では、ＬＢＡが「０」の論理ブロックと対応付けられた各エントリ２１Ｂの差分ビットのうち、分割順番号が「１」のスナップショットボリュームＳＳＶＯＬにより保持されるスナップショット（第２世代のスナップショット）と対応付けられた差分ビットと、分割順番号が「３」〜「５」のスナップショットボリュームＳＳＶＯＬによりそれぞれ保持されるスナップショット（それぞれ第４世代、第６世代又は第７世代のスナップショット）とそれぞれ対応付けられた差分ビットとが、検出すべき差分ビットとなる。
【０１１９】
そして、差分反映処理では、このようにして検出した値が「０」の差分ビットと対応付けられた各スナップショット（以下、これを未反映スナップショットと呼ぶ）について、その未反映スナップショットの取得後、最も早く取得されたスナップショットであって、かかる論理ブロックと対応付けられた差分ビットの値が「１」のスナップショットを検出し、当該スナップショットの管理情報のうちのかかる論理ブロックに関する管理情報を、対応する未反映スナップショットの管理情報のうちのかかる論理ブロックに関する管理情報に反映する。
【０１２０】
例えば図１８及び図１９の例の場合、プライマリボリュームＰＶＯＬのそのとき注目している論理ブロックのＬＢＡが「０」であるものとすると、分割順番号が「１」のスナップショットボリュームＳＳＶＯＬにより保持されているスナップショット（第２世代のスナップショット）については、そのスナップショットの取得後、最も早く取得されたスナップショットであって、かかる論理ブロックと対応付けられた差分ビットの値が「１」のスナップショットは、分割順番号が「２」のスナップショットボリュームＳＳＶＯＬにより保持されている世代番号が「３」のスナップショット（第３世代のスナップショット）である。よって、この場合には、第３世代のスナップショットの管理情報のうち、かかる論理ブロックに関する管理情報を、第２世代のスナップショットの管理情報のうちの、当該論理ブロックに関する管理情報に反映する。
【０１２１】
具体的には、図１９（Ａ）に示す旧データ退避アドレステーブル２４のエントリ２４Ｂのうち、第３世代のスナップショットと対応付けられたエントリ２４Ｂ内のかかる論理ブロックと対応付けられたアドレス欄２４ＢＡに格納されているアドレスを、当該旧データ退避アドレステーブル２４のエントリ２４Ｂのうち、第２世代のスナップショットと対応付けられたエントリ２４Ｂ内のかかる論理ブロックと対応付けられたアドレス欄２４ＢＡにコピーする。また図１８（Ａ）に示すスナップショット差分ビットマップ２１のエントリのうち、第２世代のスナップショットと対応付けられたエントリ２１Ｂ内のかかる論理ブロックと対応付けられた差分ビット欄２１ＢＡに格納されている差分ビットを「１」に更新する。
【０１２２】
同様に、分割順番号が「３」〜「５」のスナップショットボリュームＳＳＶＯＬに保持されている第４世代、第６世代及び第７世代のスナップショットについては、これらのスナップショットの取得後、最も早く取得されたスナップショットであって、かかる論理ブロックと対応付けられた差分ビットの値が「１」のスナップショットは、分割順番号が「６」のスナップショットボリュームＳＳＶＯＬに保持されている第１世代のスナップショットである。よって、この場合には、第１世代のスナップショットの管理情報のうち、かかる論理ブロックに関する管理情報を、分割順番号が「３」〜「５」のスナップショットボリュームＳＳＶＯＬに保持されている第４世代、第６世代及び第７世代のスナップショットの管理情報のうちの、当該論理ブロックに関する管理情報に反映する。
【０１２３】
具体的には、図１９（Ａ）に示す旧データ退避アドレステーブル２４のエントリ２４Ｂのうち、第１世代のスナップショットと対応付けられたエントリ２４Ｂ内のかかる論理ブロックと対応付けられたアドレス欄２４ＢＡに格納されているアドレスを、当該旧データ退避アドレステーブル２４のエントリ２４Ｂのうち、分割順番号が「３」〜「５」のスナップショットボリュームＳＳＶＯＬに保持されている第４世代、第６世代及び第７世代のスナップショットとそれぞれ対応付けられた各エントリ２４Ｂ内のかかる論理ブロックと対応付けられたアドレス欄２４ＢＡにそれぞれコピーする。また図１８（Ａ）に示すスナップショット差分ビットマップ２１のエントリ２１Ｂのうち、第４世代、第６世代及び第７世代のスナップショットとそれぞれ対応付けられた各エントリ２１Ｂ内のかかる論理ブロックと対応付けられた差分ビット欄２１ＢＡに格納されている差分ビットをそれぞれ「１」に更新する。
【０１２４】
そして、この後、旧データ退避未反映ビットマップ２６（図１５）上の未反映ビット欄２６ＢＡ（図１５）のうち、かかる論理ブロックと対応付けられた未反映ビット欄２６ＢＡに格納されている未反映ビットを「１」から「０」に変更する。
【０１２５】
また差分反映処理では、以上の処理をプライマリボリュームＰＶＯＬのすべての論理ブロックについて実行する。このような処理により、各未反映スナップショットについて、対応するスナップショットの管理情報がその未反映スナップショットの管理情報に反映されることになる。
【０１２６】
（２−３−９）スナップショットライト差分ビットマップ
上述のように、差分反映処理では、後から取得されたスナップショットの管理情報を反映すべき世代をスナップショット差分ビットマップ２１及び分割順番号−世代番号マッピングテーブル２７を利用して判断する。
【０１２７】
ところで、かかる差分反映処理が実行される前に、差分反映処理が行われていない世代（以下、これを未反映世代と呼ぶ）のスナップショットに対してデータライトが行われた場合、スナップショット差分ビットマップ２１におけるそのデータライトが行われた未反映世代のスナップショットと対応付けられたエントリ２１Ｂのうち、かかるデータライトが行われた論理ブロックと対応付けられた差分ビットが「１」に更新される。しかしながら、このような処理が行われると、その後実行される差分反映処理が正しく行われなくなる問題がある。
【０１２８】
例えば、プライマリボリュームＰＶＯＬからのスナップショットボリュームＳＳＶＯＬの分割順と、それらのスナップショットボリュームＳＳＶＯＬに保持されるスナップショットの世代番号とが一致する場合において、スナップショット差分ビットマップ２１が図２０（Ａ−１）、旧データ退避アドレステーブル２４が図２０（Ａ−２）のような状態にそれぞれある場合において、第５世代のスナップショットのアドレス「０」にデータライトがあった場合を考える。
【０１２９】
この場合、スナップショット差分ビットマップ２１は、図２０（Ｂ−１）に示すように、第５世代と対応するエントリ２１ＢにおけるＬＢＡが「０」の論理ブロックと対応する差分ビット欄２１ＢＡに格納された差分ビットが「１」に更新され、旧データ退避アドレステーブル２４は、図２０（Ｂ−２）に示すように、第５世代のスナップショットのデータライトがあった「０」の論理ブロックのデータを退避させたデータプールＤＰ内のアドレス（図２０（Ｂ−２）では「A4」）が格納される。
【０１３０】
そして、この後、差分反映処理が行われた場合、図２０（Ｂ−１）及び（Ｂ−２）において破線の矢印で示すように、第７世代のスナップショットの管理情報が第６世代のスナップショットの管理情報に反映され、第５世代のスナップショットの管理情報が第４世代のスナップショットの管理情報に反映されることになる。つまり、本来的には、図２０（Ａ−１）及び（Ａ−２）において破線の矢印で示すように、第４世代のスナップショットの管理情報は、第５世代のスナップショットではなく、第７世代のスナップショットの管理情報に基づいて更新されるべきであるにも関わらず、第５世代のスナップショットに対してデータライトがあったために、第４世代のスナップショットに対する差分反映処理が正しく行われなくなる。
【０１３１】
そこで、本ディスクアレイ装置４においては、スナップショットに対するデータライトがあったか否かを、スナップショットライト差分ビットマップ２８を用いて管理している。
【０１３２】
スナップショットライト差分ビットマップ２８は、プライマリボリュームＰＶＯＬごとに作成されるビットマップであり、図２１に示すように、第１のエントリ（列）２８Ａと、同一のプライマリボリュームＰＶＯＬについて取得可能な最大数のスナップショットの世代数と同じ数の第２のエントリ（列）２８Ｂを備えて構成される。本実施の形態の場合、上述のように同一のプライマリボリュームＰＶＯＬについて取得可能なスナップショットの世代数は最大1024個であり、これと同じ数の第２のエントリ２８Ｂが予めスナップショットライト差分ビットマップ２８に設けられている。
【０１３３】
第１のエントリ２８Ａは、プライマリボリュームＰＶＯＬ内の各論理ブロックとそれぞれ対応付けられた複数のＬＢＡ欄２８ＡＡに区分されている。そして、これらＬＢＡ欄２８ＡＡには、それぞれ対応する論理ブロックのＬＢＡが格納されている。
【０１３４】
また各第２のエントリ２８Ｂは、それぞれプライマリボリュームＰＶＯＬ内の各論理ブロックとそれぞれ対応付けられた複数のライト差分ビット欄２８ＢＡに区分されている。そして各ライト差分ビット欄２８ＢＡには、それぞれ対応する世代のスナップショットの対応する論理ブロック内のデータにデータライトがあったか否かを表すライト差分ビットが格納される。
【０１３５】
実際上、ライト差分ビットは、初期時は「０」に設定されており、対応する世代のスナップショットにおける対応する論理ブロックにデータが書き込まれた場合に「１」に更新される。従って、ライト差分ビットの「０」は、対応する世代のスナップショットにおける対応する論理ブロックに対するデータライトが発生していない（対応するプライマリボリュームＰＶＯＬの論理ブロックにライトが発生している場合を除き、その論理ブロックに格納されていたデータがデータプールＤＰに退避されていない）ことを表し、ライト差分ビットの「１」は、対応する世代のスナップショットにおける対応する論理ブロックに対するデータライトが発生した（その論理ブロックに格納されていたデータがデータプールＤＰに退避された）ことを表している。
【０１３６】
（２−４）各種処理の処理手順
次に、かかる本ディスクアレイ装置４に搭載されたスナップショット機能に関連してディスクアレイ装置４のＣＰＵ１７（図１）により実行される各種処理の具体的な処理内容について説明する。なお、ＣＰＵ１７は、以下の各種処理をローカルメモリ１６（図１）に格納された図示しない制御プログラムに基づいて実行する。
【０１３７】
（２−４−１）リード処理
図２２は、ホスト計算機３から送信されたプライマリボリュームＰＶＯＬを対象とするリードコマンドをディスクアレイ装置４が受信した場合にＣＰＵ１７により実行されるリード処理の処理手順を示す。
【０１３８】
ＣＰＵ１７は、かかるリードコマンドを受信すると、この図２２に示すリード処理を開始し、かかるリードコマンドに基づいてバックエンドインタフェース１４（図１）を制御することにより、当該リードコマンドにおいて指定されたプライマリボリュームＰＶＯＬ内の当該リードコマンドにおいて指定された論理ブロックからデータをリードする。またＣＰＵ１７は、リードしたデータをキャッシュメモリ１５を経由してそのリードコマンドの発行元のホスト計算機３に転送させる（ＳＰ１）。そしてＣＰＵ１７は、この後、このリード処理を終了する。
【０１３９】
（２−４−２）ライト処理
【０１４０】
また図２３は、ホスト計算機３から送信されたプライマリボリュームＰＶＯＬを対象とするライトコマンドをディスクアレイ装置３４が受信した場合にＣＰＵ１７により実行されるライト処理の処理手順を示す。
【０１４１】
ＣＰＵ１７は、かかるライトコマンドを受信すると、この図２３に示すライト処理を開始し、まず、データプールＤＰに格納されているスナップショット管理情報（スナップショット差分ビットマップ２１、プライマリボリューム差分ビットマップ２２、スナップショット差分集約ビットマップ２３、旧データ退避アドレステーブル２４、旧データ退避領域空きビットマップ２５、旧データ退避未反映ビットマップ２６及びスナップショットライト差分ビットマップ２８）のうちの処理に必要な一部の管理情報を、バックエンドインタフェース１４を介してキャッシュメモリ１５に読み出す（ＳＰ１０）。従って、この後、ライト処理におけるこれらの管理情報の参照及び更新等は、キャッシュメモリ１５上に読み出された管理情報に対して行われることになる。
【０１４２】
続いて、ＣＰＵ１７は、データのライト先のプライマリボリュームＰＶＯＬと対応するプライマリボリューム差分ビットマップ２２（図８）を参照して、かかるライトコマンドにおいてデータのライト先として指定されたプライマリボリューム（以下、これをライト先プライマリボリュームと呼ぶ）ＰＶＯＬ上の、当該ライトコマンドにおいてデータのライト先として指定された論理ブロック（以下、これをライト先論理ブロックと呼ぶ）に格納されているデータがデータプールＤＰに退避されているか否かを判断する（ＳＰ１１）。この判断は、かかるプライマリボリューム差分ビットマップ２２におけるライト先論理ブロックと対応付けられた差分ビットが「０」であるか否かを判断することにより行われる。
【０１４３】
そしてＣＰＵ１７は、この判断で否定結果を得ると、ステップＳＰ２１に進む。これに対してＣＰＵ１７は、この判断で肯定結果を得ると、スナップショット差分ビットマップ２１（図７）、分割順番号−世代番号マッピングテーブル２７（図１７）及びスナップショットライト差分ビットマップ２８（図２１）を参照して、かかるライト先論理ブロックのデータが未だ退避されていないスナップショットの世代のうちの最新世代の世代番号を検出する（ＳＰ１２）。
【０１４４】
次いで、ＣＰＵ１７は、旧データ退避領域空きビットマップ２５（図１１）を参照して、かかるライト先論理ブロックに格納されているデータの退避先を決定する（ＳＰ１３）。具体的に、ＣＰＵ１７は、データプールＤＰ内のライト先プライマリボリュームＰＶＯＬと対応付けられた旧データ退避用チャンクＣＫ２（図３）内に、かかるライト先論理ブロック内のデータ（旧データ）を退避するだけの記憶領域ＳＡ２（図３）の空きがあるか否かを判定する。そしてＣＰＵ１７は、かかる空きがあると判定した場合には、当該データを退避できる分の記憶領域ＳＡ２をその旧データ退避用チャンクＣＫ２内に確保し、確保した記憶領域ＳＡ２をかかるデータの退避先として決定する。またＣＰＵ１７は、データプールＤＰ内のライト先プライマリボリュームＰＶＯＬと対応付けられた旧データ退避用チャンクＣＫ２内に、かかる空きがないと判定した場合には、データプールＤＰ上にそのライト先プライマリボリュームＰＶＯＬと対応付けた新たな旧データ退避用チャンクＣＫ２を作成し、その旧データ退避用チャンクＣＫ２内にかかるライト先論理ブロックのデータを退避可能な分の記憶領域ＳＡ２を確保し、確保した記憶領域ＳＡ２をかかるデータの退避先として決定する。
【０１４５】
さらに、ＣＰＵ１７は、ライト先プライマリボリュームＰＶＯＬ内のライト先論理ブロックに格納されているデータ（旧データ）の退避先を旧データ退避アドレステーブル２４（図１０）に登録する（ＳＰ１４）。具体的に、ＣＰＵ１７は、旧データ退避アドレステーブル２４の第２のエントリ２４Ｂ（図１０）のうち、ステップＳＰ１２において検出した最新世代のスナップショットと対応付けられた第２のエントリ２４Ｂにおけるライト先論理ブロックと対応付けられたアドレス欄２４ＢＡに、ステップＳＰ１３においてデータの退避先として決定したデータプールＤＰ上の記憶領域ＳＡ２のアドレスを格納する。
【０１４６】
さらにＣＰＵ１７は、旧データ退避領域空きビットマップ２５（図１１）内の各空きビット欄２５ＡＡ（図１１）のうち、ステップＳＰ１３においてデータの退避先として決定した記憶領域ＳＡ２と対応する空きビット欄２５ＡＡに格納されている空きビットを「０」から「１」に変更し（ＳＰ１５）、この後、ライト先プライマリボリュームＰＶＯＬ内のライト先論理ブロックに格納されているデータ（旧データ）を、データプールＤＰ内のステップＳＰ１３において決定した記憶領域ＳＡ２に退避させる（ＳＰ１６）。
【０１４７】
続いて、ＣＰＵ１７は、ライト先プライマリボリュームＰＶＯＬ上のライト先論理ブロックと対応する旧データ退避未反映ビットマップ２６（図１５）上の未反映ビット欄２６ＢＡに格納された未反映ビットを「０」から「１」に変更する（ＳＰ１７）。またＣＰＵ１７は、スナップショット差分集約ビットマップ２３（図９）上の差分集約ビット欄２３ＢＡのうち、ステップＳＰ１６においてデータの退避が行われたライト先論理ブロックと対応付けられた差分集約ビット欄２３ＢＡに格納されている差分集約ビットを「０」から「１」に変更する（ＳＰ１８）。
【０１４８】
次いで、ＣＰＵ１７は、スナップショット差分ビットマップ２１（図７）の差分ビット欄２１ＢＡ（図７）のうち、ステップＳＰ１６においてデータの退避を行ったライト先論理ブロックと対応する差分ビット欄２１ＢＡ（最新世代のスナップショットと対応する第１のエントリ２１Ｂ内のライト先論理ブロックと対応する差分ビット欄２１ＢＡ）に格納されている差分ビットを「０」から「１」に更新する（ＳＰ１９）。またＣＰＵ１７は、プライマリボリューム差分ビットマップ２２（図８）の差分ビット欄２２ＢＡ（図８）のうち、かかるライト先論理ブロックと対応する差分ビット欄２２ＢＡに格納されている差分ビットを「０」から「１」に更新する（ＳＰ２０）。
【０１４９】
さらにＣＰＵ１７は、この後、ライトコマンドと共にホスト計算機３から送られてきたライトデータをキャッシュメモリ１５（図１）を経由してライト先プライマリボリュームＰＶＯＬ内のライト先論理ブロックにライトする（ＳＰ２１）。そしてＣＰＵ１７は、この後、このライト処理を終了する。
【０１５０】
（２−４−３）第１のスナップショットリード処理
図２４は、ホスト計算機３から送信されたスナップショットを対象とするリードコマンド（以下、これをスナップショットリードコマンドと呼ぶ）をディスクアレイ装置４が受信した場合にＣＰＵ１７により実行される第１のスナップショットリード処理の処理手順を示す。
【０１５１】
ＣＰＵ１７は、かかるスナップショットリードコマンドを受信すると、この図２４に示す第１のスナップショットリード処理を開始し、まず、データプールＤＰに格納されている管理情報のうちの処理に必要な一部の管理情報を、バックエンドインタフェース１４（図１）を介してキャッシュメモリ１５（図１）に読み出す（ＳＰ３０）。従って、この後、第１のスナップショットリード処理における管理情報の参照及び更新等は、キャッシュメモリ１５上に読み出された管理情報に対して行われることになる。
【０１５２】
続いて、ＣＰＵ１７は、対応する旧データ退避未反映ビットマップ２６（図１５）を参照して、スナップショットリードコマンドにおいてデータのリード先として指定された世代のスナップショット（以下、これをリード先スナップショットと呼ぶ）内の当該スナップショットリードコマンドにおいてデータのリード先として指定された論理ブロック（以下、これをリード先論理ブロックと呼ぶ）に対する差分反映処理が未実行であるか否かを判断する（ＳＰ３１）。この判断は、かかる旧データ退避未反映ビットマップ２６の未反映ビット欄２６ＢＡのうち、リード先スナップショットと対応付けられた第２のエントリ２６Ｂ内のリード先論理ブロックと対応付けられた未反映ビット欄２６ＢＡに格納されている未反映ビットが「１」であるか否かを判断することにより行われる。
【０１５３】
そしてＣＰＵ１７は、この判断で否定結果を得るとステップＳＰ３４に進む。これに対してＣＰＵ１７は、ステップＳＰ３１の判断で肯定結果を得ると、スナップショット差分ビットマップ２１（図７）、スナップショット差分集約ビットマップ２３（図９）及び旧データ退避アドレステーブル２４（図１０）を参照して、差分反映処理を実行する（ＳＰ３２）。なお、このとき差分反映処理の対象とするのは、リード先スナップショットのリード先論理ブロックに対応する全世代のスナップショットの論理ブロック（つまりすべての世代のスナップショットにおけるリード先論理ブロックと同じＬＡＢの論理ブロック）である。ただし、このステップＳＰ３２において、差分反映処理を実行すべきすべての世代のスナップショットのすべての論理ブロックに対して差分反映処理を実行するようにしても良い。
【０１５４】
次いで、ＣＰＵ１７は、旧データ退避未反映ビットマップ２６（図１５）の未反映ビット欄２６ＢＡのうち、ステップＳＰ３２においてすべての世代のスナップショットにおいて差分反映処理を実行した論理ブロックに対応する未反映ビット欄２６ＢＡに格納されている未反映ビットを「１」から「０」に変更する（ＳＰ３３）。
【０１５５】
そしてＣＰＵ１７は、この後、スナップショット差分ビットマップ２１内の差分ビット欄２１ＢＡのうち、リード先スナップショットにおけるリード先論理ブロックと対応する差分ビット欄２１ＢＡに格納されている差分ビットが「０」であるか否かを判断する（ＳＰ３４）。
【０１５６】
この判断で肯定結果を得ることは、リード先スナップショットのリード先論理ブロックのデータが未だデータプールＤＰには退避されておらず、そのデータがプライマリボリュームＰＶＯＬ内に存在することを意味する。かくして、このときＣＰＵ１７は、プライマリボリュームＰＶＯＬ内のリード先論理ブロックと同じＬＢＡの論理ブロックからデータを読み出し、これをキャッシュメモリ１５を介してかかるスナップショットリードコマンドの送信元のホスト計算機３に転送する（ＳＰ３５）。そしてＣＰＵ１７は、この後、この第１のスナップショットリード処理を終了する。
【０１５７】
これに対して、ステップＳＰ３４の判断で否定結果を得ることは、リード先スナップショットのリード先論理ブロックのデータは既にデータプールＤＰに退避されており、そのデータがプライマリボリュームＰＶＯＬ内に存在しないことを意味する。かくして、このときＣＰＵ１７は、旧データ退避アドレステーブル２４（図１０）の各アドレス欄２４ＢＡのうち、リード先スナップショットのリード先論理ブロックと対応するアドレス欄２４ＢＡに格納されているアドレス（つまりリード先論理ブロックに格納されていたデータの退避先のアドレス）を読み出す（ＳＰ３６）。
【０１５８】
そしてＣＰＵ１７は、データプールＤＰ内の対応する旧データ退避用チャンクＣＫ２（図３）におけるステップＳＰ３６において取得したアドレスが付与された記憶領域ＳＡ２（図３）から、リード先論理ブロックから退避したデータを読み出し、これをキャッシュメモリ１５を介してかかるスナップショットリードコマンドの送信元のホスト計算機３に転送する（ＳＰ３７）。そしてＣＰＵ１７は、この後、この第１のスナップショットリード処理を終了する。
【０１５９】
（２−４−４）第２のスナップショットリード処理
一方、図２５は、ホスト計算機３から送信されたスナップショットリードコマンドをディスクアレイ装置４が受信した場合にＣＰＵ１７により実行される第２のスナップショットリード処理の処理手順を示す。
【０１６０】
図２４について上述した第１のスナップショットリード処理は、旧データ退避未反映ビットマップ２６をスナップショット差分ビットマップ２１よりも先にチェック（図２４のステップＳＰ３１及びステップＳＰ３４参照）するバージョンであり、この第２のスナップショットリード処理は、スナップショット差分ビットマップ２１を旧データ退避未反映ビットマップ２６よりも先にチェック（図２５のステップＳＰ４１及びステップＳＰ４４参照）するバージョンである。
【０１６１】
ＣＰＵ１７は、かかるスナップショットリードコマンドを受信すると、この図２５に示す第２のスナップショットリード処理を開始し、まず、データプールＤＰに格納されている管理情報のうちの処理に必要な一部の管理情報を、バックエンドインタフェース１４（図１）を介してキャッシュメモリ１５（図１）に読み出す（ＳＰ４０）。従って、この後、第２のスナップショットリード処理における管理情報の参照及び更新等は、キャッシュメモリ１５上に読み出された管理情報に対して行われることになる。
【０１６２】
続いて、ＣＰＵ１７は、スナップショット差分ビットマップ２１内の差分ビット欄２１ＢＡのうち、リード先スナップショットにおけるリード先論理ブロックと対応する差分ビット欄２１ＢＡに格納されている差分ビットが「０」であるか否かを判断する（ＳＰ４１）。
【０１６３】
この判断で否定結果を得ることは、リード先スナップショットのリード先論理ブロックのデータは既にデータプールＤＰに退避されており、そのデータがプライマリボリュームＰＶＯＬ内に存在しないことを意味する。かくして、このときＣＰＵ１７は、旧データ退避アドレステーブル２４（図１０）の各アドレス欄２４ＢＡのうち、リード先スナップショットのリード先論理ブロックと対応するアドレス欄２４ＢＡに格納されているアドレス（つまりリード先論理ブロックに格納されていたデータの退避先のアドレス）を読み出す（ＳＰ４２）。
【０１６４】
そしてＣＰＵ１７は、データプールＤＰ内のステップＳＰ４２において取得したアドレスが付与された記憶領域ＳＡ２（図３）から、リード先論理ブロックから退避したデータを読み出し、これをキャッシュメモリ１５を介してかかるスナップショットリードコマンドの送信元のホスト計算機３に転送する（ＳＰ４３）。そしてＣＰＵ１７は、この後、この第２のスナップショットリード処理を終了する。
【０１６５】
これに対して、ステップＳＰ４１の判断で肯定結果を得ることは、リード先スナップショットのリード先論理ブロックのデータが未だデータプールＤＰには退避されておらず、そのデータがプライマリボリュームＰＶＯＬ内に存在するか、又は、リード先スナップショットのリード先論理ブロックに対する差分反映処理が未だ行われていない可能性があることを意味する。かくして、このときＣＰＵ１７は、リード先スナップショット内のリード先論理ブロックに対する差分反映処理が未実行であるか否かを判断する（ＳＰ４４）。具体的に、ＣＰＵ１７は、旧データ退避未反映ビットマップ２６（図１５）内の未反映ビット欄２６ＢＡ（図１５）のうち、リード先スナップショットと対応付けられた第２のエントリ２６Ｂ内のリード先論理ブロックと対応付けられた未反映ビット欄２６ＢＡに格納されている未反映ビットが「１」となっているか否かを判断する。
【０１６６】
この判断で肯定結果を得ることは、リード先スナップショットのリード先論理ブロックに対する差分反映処理が未だ行われていない可能性があることを意味する。かくして、このときＣＰＵ１７は、図２４のステップＳＰ３２と同様の差分反映処理を実行する（ＳＰ４５）。
【０１６７】
次いで、ＣＰＵ１７は、旧データ退避未反映ビットマップ２６の未反映ビット欄２６ＢＡのうち、ステップＳＰ４５においてすべての世代のスナップショットにおいて差分反映処理を実行した論理ブロックに対応する未反映ビット欄２６ＢＡに格納されている未反映ビットを「１」から「０」に変更し（ＳＰ４６）、この後、ステップＳＰ４１に戻る。
【０１６８】
これに対して、ステップＳＰ４４の判断で否定結果を得ることは、リード先スナップショットのリード先論理ブロックのデータが未だデータプールＤＰには退避されておらず、そのデータがプライマリボリュームＰＶＯＬ内に存在することを意味する。かくして、このときＣＰＵ１７は、プライマリボリュームＰＶＯＬ内のリード先論理ブロックと同じＬＢＡの論理ブロックからデータを読み出し、これをキャッシュメモリ１５を介してかかるスナップショットリードコマンドの送信元のホスト計算機３に転送する（ＳＰ４７）。そしてＣＰＵ１７は、この後、この第２のスナップショットリード処理を終了する。
【０１６９】
（２−４−５）スナップショットライト処理
図２６は、ホスト計算機３から送信されたスナップショットを対象とするライトコマンド（以下、これをスナップショットライトコマンドと呼ぶ）をディスクアレイ装置４が受信した場合にＣＰＵ１７により実行されるスナップショットライト処理の処理手順を示す。
【０１７０】
ＣＰＵ１７は、かかるスナップショットライトコマンドを受信すると、この図２６に示すスナップショットライト処理を開始し、まず、データプールＤＰに格納されている管理情報のうちの処理に必要な一部の管理情報を、バックエンドインタフェース１４（図１）を介してキャッシュメモリ１５（図１）に読み出す（ＳＰ５０）。従って、この後、スナップショットライト処理における管理情報の参照及び更新等は、キャッシュメモリ１５上に読み出されたこれら管理情報に対して行われることになる。
【０１７１】
続いてＣＰＵ１７は、ライト先スナップショットと対応する旧データ退避未反映ビットマップ２６（図１５）を参照して、かかるスナップショットライトコマンドにおいてデータのライト先として指定されたスナップショット（以下、これをライト先スナップショットと呼ぶ）上の、当該スナップショットライトコマンドにおいてデータのライト先として指定された論理ブロック（ライト先論理ブロック）に対する差分反映処理が未実行であるか否かを判断する（ＳＰ５１）。この判断は、かかる旧データ退避未反映ビットマップ２６内の未反映ビット欄２６ＢＡ（図１５）のうち、ライト先スナップショットと対応付けられた第２のエントリ２６Ｂ内のライト先論理ブロックと対応付けられた未反映ビット欄２６ＢＡに格納されている未反映ビットが「１」であるか否かを判断することにより行われる。
【０１７２】
そしてＣＰＵ１７は、この判断で否定結果を得るとステップＳＰ５４に進む。これに対してＣＰＵ１７は、この判断で肯定結果を得ると、ススナップショット差分ビットマップ２１（図７）、旧データ退避アドレステーブル２４（図１０）及びスナップショット差分集約ビットマップ２３（図９）を参照して差分反映処理を実行する（ＳＰ５２）。なお、このとき差分反映処理の対象とするのは、ライト先スナップショットのライト先論理ブロックに対応する全世代のスナップショットの論理ブロック（つまりすべての世代のスナップショットにおけるライト先論理ブロックと同じＬＡＢの論理ブロック）である。ただし、このステップＳＰ５２において、差分反映処理を実行すべきすべての世代のスナップショットのすべての論理ブロックに対して差分反映処理を実行するようにしても良い。
【０１７３】
次いで、ＣＰＵ１７は、旧データ退避未反映ビットマップ２６（図１５）の未反映ビット欄２６ＢＡ（図１５）のうち、ステップＳＰ５２においてすべての世代のスナップショットにおいて差分反映処理を実行した論理ブロックに対応する未反映ビット欄２６ＢＡに格納されている未反映ビットを「１」から「０」に変更する（ＳＰ５３）。
【０１７４】
続いて、ＣＰＵ１７は、スナップショットのライト先論理ブロックと対応付けられたプライマリボリュームＰＶＯＬ内の論理ブロック（以下、これをライト先対応論理ブロックと呼ぶ）に格納されていたデータがデータプールＤＰに未退避（未だ退避されていない）であるか否かを判断する（ＳＰ５４）。この判断は、スナップショット差分ビットマップ２１上のライト先対応論理ブロックと対応する差分ビット欄２１ＢＡに格納された差分ビットが「０」であるか否かを判断することにより行われる。
【０１７５】
そしてＣＰＵ１７は、この判断で否定結果を得るとステップＳＰ６２に進む。これに対してＣＰＵ１７は、この判断で肯定結果を得ると、旧データ退避領域空きビットマップ２５（図１１）を参照して、かかるライト先対応論理ブロックに格納されているデータの退避先を決定する（ＳＰ５５）。
【０１７６】
具体的に、ＣＰＵ１７は、データプールＤＰ内の対応するプライマリボリュームＰＶＯＬと対応付けられた旧データ退避用チャンクＣＫ２（図３）内に、かかるライト先対応論理ブロックに格納されているデータ（旧データ）を退避するだけの記憶領域ＳＡ２（図３）の空きがあるか否かを判定する。そしてＣＰＵ１７は、空きがあると判定した場合には、当該データを退避できる分の記憶領域ＳＡ２をその旧データ退避用チャンクＣＫ２内に確保し、確保した記憶領域ＳＡ２をかかるデータの退避先として決定する。またＣＰＵ１７は、データプールＤＰ内のライト先プライマリボリュームＰＶＯＬと対応付けられた旧データ退避用チャンクＣＫ２内に、かかる空きがないと判定した場合には、データプールＤＰ上にそのライト先プライマリボリュームＰＶＯＬと対応付けた新たな旧データ退避用チャンクＣＫ２を作成し、その旧データ退避用チャンクＣＫ２内にかかるライト先対応論理ブロックのデータを退避可能な分の記憶領域ＳＡ２を確保し、確保した記憶領域ＳＡ２をかかるデータの退避先として決定する。
【０１７７】
この後、ＣＰＵ１７は、ライト先プライマリボリュームＰＶＯＬ内のライト先対応論理ブロックに格納されているデータ（旧データ）の退避先を旧データ退避アドレステーブル２４（図１０）に登録する（ＳＰ５６）。具体的に、ＣＰＵ１７は、旧データ退避アドレステーブル２４の第２のエントリ２４Ｂのうち、ライト先対応論理ブロックと対応付けられたアドレス欄２４ＢＡに、ステップＳＰ５５においてデータの退避先として決定したデータプールＤＰ上の記憶領域ＳＡ２のアドレスを格納する。
【０１７８】
またＣＰＵ１７は、旧データ退避領域空きビットマップ２５（図１１）内の各空きビット欄２５ＡＡのうち、ステップＳＰ５５においてデータの退避先として決定した記憶領域ＳＡ２と対応する空きビット欄２５ＡＡに格納されている空きビットを「０」から「１」に変更する（ＳＰ５７）。
【０１７９】
続いて、ＣＰＵ１７は、ライト先プライマリボリュームＰＶＯＬ内のライト先対応論理ブロックに格納されているデータ（旧データ）を、ライト先プライマリボリュームＰＶＯＬから読み出し、これをライトデータとマージする。そしてＣＰＵ１７は、かかるマージにより得られたマージデータを、データプールＤＰ内のステップＳＰ５５において決定した記憶領域ＳＡ２に退避させる（ＳＰ５８）。
【０１８０】
次いで、ＣＰＵ１７は、スナップショット差分集約ビットマップ２３（図９）上のライト先プライマリボリュームＰＶＯＬのライト先対応論理ブロックと対応付けられた差分集約ビット欄２３ＢＡに格納されている差分集約ビットを「０」から「１」に変更すると共に（ＳＰ５９）、スナップショットライト差分ビットマップ２８（図２１）上のライト先論理ブロックと対応付けられたライト差分ビット欄２８ＢＡ（図２１）に格納されているライト差分ビットを「０」から「１」に変更する（ＳＰ６０）。またＣＰＵ１７は、スナップショット差分ビットマップ２１におけるライト先論理ブロックと対応付けられた差分ビット欄２１ＢＡに格納されている差分ビットを「０」から「１」に変更する（ＳＰ６１）。
【０１８１】
この後、ＣＰＵ１７は、プライマリボリュームＰＶＯＬのライト先対応論理ブロックからデータプールＤＰに退避されているデータ（旧データ）は、ライト先スナップショットと異なる世代のスナップショットと共有されているか否かを判断する（ＳＰ６２）。この判断は、旧データ退避アドレステーブル２４（図１０）におけるライト先論理ブロックと対応するアドレス欄２４ＢＡに格納されたアドレスと同じアドレスが、当該旧データ退避アドレステーブル２４における他のアドレス欄２４ＢＡに格納されているか否かを判定することにより行われる。
【０１８２】
そしてＣＰＵ１７は、この判断で肯定結果を得ると、ステップＳＰ５５に戻り、この後、ステップＳＰ５５〜ステップＳＰ６２を上述のように順次処理する。これによりＣＰＵ１７は、データプールＤＰ内の対応する旧データ退避用チャンクＣＫ２からライト先スナップショットのライト先論理ブロックのデータの退避先（既にデータプールＤＰに退避されている旧データのコピー先）となる記憶領域ＳＡ２を決定し、決定した記憶領域ＳＡ２のアドレスを旧データ退避アドレステーブル２４の対応するアドレス欄２４ＢＡに登録する。
【０１８３】
そしてＣＰＵ１７は、やがてステップＳＰ６２において肯定結果を得ると、旧データ退避アドレステーブル２４のアドレス欄２４ＢＡのうち、ライト先スナップショットのライト先論理ブロックと対応付けられたアドレス欄２４ＢＡに格納されているアドレスを取得し（ＳＰ６３）、ライトデータをデータプールＤＰ内のステップＳＰ６３において取得したアドレス位置に上書きする（ＳＰ６４）。
【０１８４】
そしてＣＰＵ１７は、この後、このスナップショットライト処理を終了する。
【０１８５】
（２−４−６）ペア削除処理
図２７Ａ及び図２７Ｂは、ホスト計算機３から送信された、プライマリボリュームＰＶＯＬ及びスナップショットボリュームＳＳＶＯＬのコピーペアを削除すべき旨のコマンド（つまり、そのスナップショットボリュームＳＳＶＯＬに保持されたスナップショットを削除すべき旨のコマンドであり、以下、これをペア削除コマンドと呼ぶ）をディスクアレイ装置４が受信した場合にＣＰＵ１７により実行されるペア削除処理の処理手順を示す。
【０１８６】
ＣＰＵ１７は、かかるペア削除コマンドを受信すると、この図２７Ａ及び図２７Ｂに示すペア削除処理を開始し、まず、データプールＤＰに格納されている管理情報のうちの処理に必要な一部の管理情報を、バックエンドインタフェース１４（図１）を介してキャッシュメモリ１５（図１）に読み出す（ＳＰ７０）。従って、この後、ペア削除処理における管理情報の参照及び更新等は、キャッシュメモリ１５上に読み出されたこれら管理情報に対して行われることになる。
【０１８７】
続いてＣＰＵ１７は、スナップショット差分ビットマップ２１（図７）、スナップショット差分集約ビットマップ２３（図９）及び旧データ退避アドレステーブル２４（図１０）を参照して、すべてのスナップショット内のすべての論理ブロックに対する差分反映処理を実行する（ＳＰ７１）。またＣＰＵ１７は、この後、旧データ退避未反映ビットマップ２６（図１５）の各未反映ビット欄２６ＢＡ（図１５）にそれぞれ格納されているすべての未反映ビットを「１」から「０」に変更する（ＳＰ７２）。
【０１８８】
次いで、ＣＰＵ１７は、スナップショット差分集約ビットマップ２３（図９）内の第２のエントリ２３Ｂのうち、ペア削除コマンドにおいてペア削除処理の対象として指定されたスナップショットボリュームＳＳＶＯＬにより保持されているスナップショット（以下、これを対象スナップショットと呼ぶ）と対応付けられた第２のエントリ２３Ｂ内の差分集約ビット欄２３ＢＡを１つ選択し（ＳＰ７３）、その差分集約ビット欄２３ＢＡに格納された差分集約ビットが「１」となっているか否かを判断する（ＳＰ７４）。
【０１８９】
この判断で否定結果を得ることは、スナップショット差分ビットマップ２１上のその差分集約ビットと対応付けられた各差分ビットがすべて「０」であり、従って、これら差分ビットとそれぞれ対応付けられた対象スナップショット上の各論理ブロックにそれぞれ格納されたデータのいずれもがデータプールＤＰに退避されていないことを意味する。かくして、このときＣＰＵ１７は、ステップＳＰ８６に進む。
【０１９０】
これに対して、ステップＳＰ７４の判断で肯定結果を得ることは、スナップショット差分ビットマップ２１上のその差分集約ビットと対応付けられた各差分ビットのうちの少なくとも１つの差分ビットが「１」であり、その差分ビットと対応付けられた対象スナップショット上の論理ブロックに格納されたデータがデータプールＤＰに退避されていることを意味する。かくして、このときＣＰＵ１７は、かかるデータプールＤＰに退避されたかかるデータが他の世代のスナップショットと共有されていない場合には、そのデータをデータプールＤＰ上から削除すべく、以下の処理を実行する。
【０１９１】
すなわちＣＰＵ１７は、まず、スナップショット差分ビットマップ２１上の差分ビットのうち、ステップＳＰ７３において選択した差分集約ビットと対応付けられた差分ビットを１つ選択し（ＳＰ７５）、その差分ビットが「１」であるか否かを判断する（ＳＰ７６）。そしてＣＰＵ１７は、この判断で否定結果を得るとステップＳＰ８４に進む。
【０１９２】
これに対してＣＰＵ１７は、ステップＳＰ７６の判断で肯定結果を得ると、スナップショットライト差分ビットマップ２８上のライト差分ビットのうち、かかる差分ビットと対応するライト差分ビットが「１」である場合には、そのライト差分ビットを「０」に変更すると共に（ＳＰ７７）、ステップＳＰ７５において選択したスナップショット差分ビットマップ２１上の差分ビットを「１」から「０」に変更する（ＳＰ７８）。
【０１９３】
またＣＰＵ１７は、旧データ退避アドレステーブル２４（図１０）上のその差分ビットと対応するアドレス欄２４ＢＡ（図１０）を初期化（そのアドレス欄２４ＢＡに格納されているアドレスを初期値「０」に変更）する（ＳＰ７９）。
【０１９４】
さらにＣＰＵ１７は、対象スナップショットの各論理ブロックのうち、ステップＳＰ７５において選択した差分ビットと対応する論理ブロックからデータプールＤＰに退避した旧データが、対象スナップショット以外のスナップショットと共有されているか否かを、図２６について上述したスナップショットライト処理のステップＳＰ６２と同様に判断する（ＳＰ８０）。
【０１９５】
この判断で肯定結果を得ることは、対象スナップショット内のステップＳＰ７５において選択した差分ビットと対応する論理ブロックからデータプールＤＰに退避された旧データは他のスナップショットと共有されており、従って、その旧データをデータプールＤＰから削除できないことを意味する。かくして、このときＣＰＵ１７はステップＳＰ８４に進む。
【０１９６】
これに対してステップＳＰ８０の判断で否定結果を得ることは、対象スナップショット内のステップＳＰ７５において選択した差分ビットと対応する論理ブロックからデータプールＤＰに退避された旧データは他のスナップショットと共有されておらず、従って、そのデータをデータプールＤＰから削除できることを意味する。かくして、このときＣＰＵ１７は、旧データ退避領域空きビットマップ２５（図１１）内の空きビット欄２５ＡＡに格納されている空きビットのうち、その旧データが格納されているデータプールＤＰ内の記憶領域ＳＡ２（図３）に対応する空きビット欄２５ＡＡに格納されている空きビットを「１」から「０」に変更する（ＳＰ８１）。
【０１９７】
続いてＣＰＵ１７は、ステップＳＰ８１の処理によりデータプールＤＰ内の対応する旧データ退避用チャンクＣＫ２（図３）から完全に旧データ（プライマリボリュームＰＶＯＬから退避された旧データ）を削除し終えたか否かを判断する（ＳＰ８２）。
【０１９８】
そしてＣＰＵ１７は、この判断で否定結果を得るとステップＳＰ８４に進み、これに対して肯定結果を得ると、かかる旧データ退避用チャンクＣＫ２を解放する（ＳＰ８３）。
【０１９９】
次いで、ＣＰＵ１７は、スナップショット差分ビットマップ２１（図７）上の差分ビットのうち、ステップＳＰ７３において選択した差分集約ビットに対応するすべての差分ビットについて、ステップＳＰ７４〜ステップＳＰ８３の処理を実行し終えたか否かを判断する（ＳＰ８４）。
【０２００】
そしてＣＰＵ１７は、この判断で否定結果を得ると、ステップＳＰ７５に戻り、この後、ステップＳＰ７５において選択する差分ビットを他の差分ビットに変更しながら、ステップＳＰ７６〜ステップＳＰ８４の処理を繰り返す。
【０２０１】
そしてＣＰＵ１７は、やがてステップＳＰ７３において選択した差分集約ビットと対応付けられたすべての差分ビットについてステップＳＰ７４〜ステップＳＰ８３の処理を実行し終えることによりステップＳＰ８４において肯定結果を得ると、ステップＳＰ７３において選択した差分集約ビットを「１」から「０」に変更する（ＳＰ８５）。
【０２０２】
この後、ＣＰＵ１７は、スナップショット差分集約ビットマップ２３内の第２のエントリ２３Ｂのうち、対象スナップショットと対応付けられた第２のエントリ２３Ｂ内のすべての差分集約ビットについて、ステップＳＰ７３〜ステップＳＰ８５の処理を実行し終えたか否かを判断する（ＳＰ８６）。
【０２０３】
そしてＣＰＵ１７は、この判断で否定結果を得るとステップＳＰ７３に戻り、この後、ステップＳＰ７３において選択する差分集約ビットを対象スナップショットと対応付けられた第２のエントリ２３Ｂ内の他の差分集約ビットに順次切り替えながら、ステップＳＰ７３〜ステップＳＰ８６の処理を繰り返す。
【０２０４】
そしてＣＰＵ１７は、やがて対象スナップショットと対応付けられた第２のエントリ２３Ｂ内のすべての差分集約ビットについてステップＳＰ７３〜ステップＳＰ８５の処理を実行し終えることによりステップＳＰ８６で肯定結果を得ると、このペア削除処理を終了する。
【０２０５】
なお、上述のペア削除処理により、同一のプライマリボリュームＰＶＯＬとコピーペアに設定されたすべてのスナップショットボリュームＳＳＶＯＬのペア設定が解除された場合（つまり同一のプライマリボリュームＰＶＯＬについて取得されたすべてのスナップショットが削除された場合）、そのタイミングでそのプライマリボリュームＰＶＯＬが使用していた管理情報が格納されていた管理情報格納用チャンクＣＫ１（図３）が解放される。
【０２０６】
（３）本実施の形態による管理情報へのアクセス方式
（３−１）世代塊
次に、本実施の形態によるディスクアレイ装置４において、データプールＤＰから必要なスナップショットの管理情報をキャッシュメモリ１５に読み出す際や、キャッシュメモリ１５に読み出した管理情報にＣＰＵ１７がアクセスする際のアクセス方式について説明する。
【０２０７】
上述のように本ディスクアレイ装置４では、同一のプライマリボリュームＰＶＯＬに対して最大1024個のスナップショットを取得することが可能であるため、これら1024個分のスナップショットの管理情報も莫大なデータ量となる。そこで、本ディスクアレイ装置４では、スナップショットの管理情報のうち、ペア管理テーブル２０（図６）及び分割順番号−世代番号マッピングテーブル２７（図１７）についてはコントローラ１１のキャッシュメモリ１５に駐在させておくものの、これ以外のスナップショット差分ビットマップ２１（図７）、プライマリボリューム差分ビットマップ２２（図８）、スナップショット差分集約ビットマップ２３（図９）、旧データ退避アドレステーブル２４（図１０）、旧データ退避領域空きビットマップ２５（図１１）、旧データ退避未反映ビットマップ２６（図１５）及びスナップショットライト差分ビットマップ２８（図２１）については、データプールに保持しておき、必要時に必要な管理情報のみをデータプールＤＰからキャッシュメモリ１５に読み出す（ステージング）方式を採用している。
【０２０８】
この場合において、本ディスクアレイ装置４は、データ量の少ないプライマリボリューム差分ビットマップ２２、旧データ退避領域空きビットマップ２５、旧データ退避未反映ビットマップ２６については必要なビットのみをキャッシュメモリ１５に読み出す一方、スナップショット差分ビットマップ２１、スナップショット差分集約ビットマップ２３、旧データ退避アドレステーブル２４及びスナップショットライト差分ビットマップ２８については、そのとき存在するスナップショットの世代数に応じて、データプールＤＰからキャッシュメモリ１５に読み出す世代数及びＬＢＡの範囲を変えている点を特徴としている。
【０２０９】
実際上、本実施の形態においては、図２８に示すように、世代番号が「０」〜「２」の３つ世代については、これら３世代のスナップショットの管理情報をすべてまとめたものを１つの塊（以下、これを３世代塊と呼ぶ）として、必要時にこの３世代塊単位でデータプールＤＰからキャッシュメモリ１５に管理情報を読み出している。
【０２１０】
また世代番号が「３」〜「63」の61世代については、これら61世代分のスナップショットの管理情報のうち、ＬＢＡが小さい半数分の論理ブロックの管理情報をすべてまとめて１つの塊とし、ＬＢＡが大きい半数分の論理ブロックの管理情報をすべてまとめて１つの塊として、必要時にこの塊（以下、これらの塊をそれぞれ61世代塊と呼ぶ）単位でデータプールＤＰからキャッシュメモリ１５に管理情報を読み出している。つまり、61世代塊は３世代塊と比較して、狭い範囲のＬＢＡ論理ブロックと対応する管理情報であり、多くの世代数と対応する管理情報である。
【０２１１】
さらに、世代番号が「125」以降の世代については、世代を243世代ごとに区切り、個々の243世代分のスナップショットの管理情報を、論理ブロックのＬＢＡに応じて所定個数の論理ブロック単位で分け、243世代分のスナップショットの管理情報のうちの所定個数の論理ブロック分の管理情報をそれぞれ別個の塊（以下、これらをそれぞれ243世代と呼ぶ）として、必要時にこの243世代塊単位でデータプールＤＰからキャッシュメモリ１５に管理情報を読み出している。つまり、243世代塊は61世代塊と比較して、狭い範囲のＬＢＡ論理ブロックと対応する管理情報であり、多くの世代数と対応する管理情報である。
【０２１２】
つまり「世代塊」とは、複数世代のスナップショットの管理情報にＣＰＵ１７がアクセスする際のデータ単位を意味し、ＣＰＵ１７がデータプールＤＰからキャッシュメモリ１５に一度に読み出したり、キャッシュメモリ１５上でＣＰＵ１７がアクセスするスナップショットの管理情報の単位である。
【０２１３】
そして、本ディスクアレイ装置４においては、このように世代塊の範囲を定めることにより、同一のプライマリボリュームＰＶＯＬについて取得されたスナップショットの世代が少ない場合には、世代数は少ないものの広い範囲の論理ブロックの管理情報をキャッシュヒットさせることができ、同一のプライマリボリュームＰＶＯＬについて取得されたスナップショットの世代が多い場合には、多くの世代の管理情報をキャッシュヒットさせることができるようになされている。
【０２１４】
なお、本実施の形態の場合、図２８からも明らかなように、スナップショットの世代として、外部仕様の1024世代に対して内部的に1097世代分の管理情報を保持することができ、73世代分のスナップショットの管理情報を外部仕様よりも多く保持できるようになされている。これは、スナップショットの再同期、削除及びリストアが管理情報の初期化やデータプールＤＰに退避されたデータ（旧データ）のバックグランド処理に多くの時間を要し、その間データプールＤＰ上のその世代のスナップショットの管理情報を格納する記憶領域が使用できなくなることに起因する。すなわち、本ディスクアレイ装置４においては、上述のように73世代分のマージンを確保することにより、仮に1024世代のスナップショットをすべて一度に削除する操作が行われた場合においても、少なくとも73世代分のスナップショットを即座に生成できることとしている。
【０２１５】
（３−２）スナップショットに対する世代番号の割り当て
次に、本ディスクアレイ装置４においてスナップショットに世代番号を割り当てる際の割当て方式について説明する。
【０２１６】
（３−２−１）原則
本ディスクアレイ装置４の場合、原則として、プライマリボリュームＰＶＯＬから分割された順番が早いスナップショットボリュームＳＳＶＯＬにより保持されているスナップショットに対してより若い世代番号を割り当てる。そしてスナップショットボリュームＳＳＶＯＬの削除が行われるなどして使用可能な世代番号が発生した場合には、その使用可能な世代番号を若い方から順番に前詰めで新しいスナップショットに割り当てる。
【０２１７】
例えば、図２９Ａ（Ａ−１）及び（Ａ−２）に示すように、プライマリボリュームＰＶＯＬとコピーペアに設定されたいずれのスナップショットボリュームＳＳＶＯＬについて、当該プライマリボリュームとコピーペアが削除されていない初期状態では、スナップショットボリュームＳＳＶＯＬ０〜ＳＳＶＯＬ２がプライマリボリュームＰＶＯＬから分割されてスナップショットが取得されるごとに、そのスナップショットに対して若い世代番号が順番に割り当てられる。
【０２１８】
なお、図２９Ａ（Ａ−１）及び（Ａ−２）は、スナップショットボリュームＳＳＶＬ０〜３がプライマリボリュームＰＶＯＬから順次分割され、これにより各スナップショットボリュームＳＳＶＬ０〜３にそれぞれ保持されることになった各スナップショットにそれぞれ世代番号として「０」〜「３」が付与された状態を示している。また、この例では、プライマリボリュームＰＶＯＬ及びスナップショットボリュームＳＳＶＯＬ４のコピーペアのペア状態は「ペアード」の状態にあるものとする。
【０２１９】
この後、スナップショットボリュームＳＳＶＯＬ１が、当該スナップショットボリュームＳＳＶＯＬ１の内容を再びプライマリボリュームＰＶＯＬと一致させる再同期状態（ペア状態は「ペアード」）となると、図２９Ａ（Ｂ−１）及び（Ｂ−２）に示すように、スナップショットボリュームＳＳＶＯＬ１が保持するスナップショットが削除され、これに伴い「１」という世代番号が未使用となる。また、かかるスナップショットボリュームＳＳＶＯＬ１が保持するスナップショットの削除に伴い、当該スナップショットの管理情報の初期化が実行される。
【０２２０】
そして、この後、例えば、第１世代（世代番号は「１」）のスナップショットの管理情報の初期化処理が完了する前に、スナップショットボリュームＳＳＶＯＬ１が再度プライマリボリュームＰＶＯＬから分割されると、図２９Ｂ（Ａ−１）及び（Ａ−２）に示すように、スナップショットＳＳＶＯＬ１が保持するスナップショットに対して「４」という世代番号が付与される。
【０２２１】
さらに、この後、第１世代（世代番号は「１」）のスナップショットの管理情報の初期化処理が完了し、「１」という世代番号が使用可能になった後に、スナップショットボリュームＳＳＶＯＬ４がプライマリボリュームＰＶＯＬから分割されると、図２９Ｂ（Ｂ−１）及び（Ｂ−２）に示すように、そのとき空いている最も若い世代番号である「１」がスナップショットボリュームＳＳＶＯＬ４により保持されたスナップショットに対して付与される。
【０２２２】
なお、以上のようなスナップショットに対する世代番号の割り当ては、スナップショットの取得後、プライマリボリュームＰＶＯＬに対して最初のアクセス（ライトアクセス又はリードアクセス）が発生したタイミングで行われ、そのタイミングでそのスナップショットに割り当てる世代番号が決定される。
【０２２３】
（３−２−２）例外
上述のように、本ディスクアレイ装置４では、プライマリボリュームＰＶＯＬについて取得された最初のスナップショットに世代番号を割り当てる際は、図３０（Ａ）に示すように、３世代塊を構成する世代の中から最も若い世代の世代番号（つまり第０世代）を割り当て、その後、スナップショットが取得されるごとに、残存する最も若い世代の世代番号をそのスナップショットに順次割り当てることを原則としている。
【０２２４】
一方で、本ディスクアレイ装置４は、図３０（Ｂ）に示すように、３世代塊を構成する世代（第０世代〜第３世代）の世代番号をすべてスナップショットに割り当て終え、１つ目の61世代塊を構成する世代番号をスナップショットに割り当て始めた以降（つまり第４世代の世代番号をスナップショットに割り当てた以降）は、スナップショットの削除などにより３世代塊に使用可能な世代番号（図３０（Ｂ）の第１世代）があったとしても、新規には３世代塊から世代番号を割り当てず、それ以降の世代塊を構成する世代の世代番号を割り当てる点をも特徴の１つとしている。
【０２２５】
これはデータプールＤＰからキャッシュメモリ１５に管理情報（スナップショット差分ビットマップ２１、スナップショット差分集約ビットマップ２３、旧データ退避アドレステーブル２４及び又はスナップショットライト差分ビットマップ２８）を読み出す回数を抑えることにより性能の向上を図るためである。
【０２２６】
すなわち、同一のプライマリボリュームＰＶＯＬについて取得されたスナップショット数が３世代塊に収まるような程度であれば（つまり３世代までであれば）、３世代塊に管理情報を割り当てることにより良い性能が得られる。しかしながら、同一のプライマリボリュームＰＶＯＬについて取得されたスナップショット数がこれ以上になると、管理情報の更新の度に複数世代塊のデータプールＤＰからキャッシュメモリ１５への管理情報の読み出しが必要となり、性能が低下する。
【０２２７】
そこで、本ディスクアレイ装置４の場合、初期導入の際は３世代塊を構成する世代番号を使用し、これ以降はできるだけ61世代塊を構成する世代番号以降の世代番号をスナップショットに割り当てることにより、３世代塊を構成する世代の世代番号が割り当てられたスナップショットの管理情報をデータプールＤＰからキャッシュメモリ１５に読み出す必要性をなくし、性能を向上させ得るようにしている。
【０２２８】
例えば図３０（Ａ）及び（Ｂ）の例では、61世代塊に属する世代番号のスナップショットを処理する場合、３世代塊に属する各世代番号のスナップショットの管理情報と、61世代塊に属する各世代番号のスナップショットの管理情報とをデータプールＤＰからキャッシュメモリ１５に読み出さなければならず、スナップショットの管理情報の読出し処理が２回必要となる。しかしながら、この後、上述のような世代番号の割当て処理を行うことによって、３世代塊に属する各世代番号のスナップショットが削除された場合に、図３０（Ｃ）に示すように、61世代塊に属する世代番号のスナップショットの管理情報のみを読み出せば良いため、かかる読出し処理を１回で済ませることができる。
【０２２９】
（３−２−３）世代番号割当て処理
図３１は、スナップショットに世代番号を割り当てる世代番号割当て処理の具体的な処理手順を示す。ＣＰＵ１７は、この図３１に示す処理手順に従って、新たに取得されたスナップショットに世代番号を割り当てる。
【０２３０】
すなわちＣＰＵ１７は、プライマリボリュームＰＶＯＬ及びスナップショットボリュームＳＳＶＯＬから構成されるコピーペアの分割をすべき旨のペア分割コマンドが与えられると、この世代番号割当て処理を開始し、まず、ペア管理テーブル２０（図６）に登録されたそのペアのペア状態を検索し、当該コピーペアを分割（スナップショットを取得）できる状態にあるか否かを判断する（ＳＰ９０）。
【０２３１】
この場合において、例えば対象とするコピーペア（以下、これを対象ペアと呼ぶ）のペア状態が既に「スプリット」となっている（既にスナップショットが取得されている）場合や、かかるペア状態が「シンプレックス」である場合などのときには、そのコピーペアを分割することはできない。かくして、ＣＰＵ１７は、ステップＳＰ９０の判断で否定結果を得ると、かかるペア分割コマンドの送信元のホスト計算機３にエラーを通知し（ＳＰ９１）、この後、この世代番号割当て処理を終了する。
【０２３２】
これに対してＣＰＵ１７は、ステップＳＰ９０の判断で肯定結果を得ると、対象ペアを分割する（ＳＰ９２）。具体的に、ＣＰＵ１７は、ペア管理テーブル２０における対象ペアと対応するエントリ２０Ａ（図６）のペア状態欄２０Ｃに格納されているペア状態を「スプリット」に変更する。
【０２３３】
続いてＣＰＵ１７は、ステップＳＰ９２のペア分割により取得したスナップショットに対するアクセスコマンドを受信するなどして、そのスナップショットの管理情報が必要となるのを待ち受ける（ＳＰ９３）。
【０２３４】
そしてＣＰＵ１７は、やがてかかるスナップショットの管理情報が必要となると、対応するプライマリボリュームＰＶＯＬについて現在取得されているスナップショットの世代数が３よりも大きいか否かを判断する（ＳＰ９４）。
【０２３５】
ＣＰＵ１７は、この判断で肯定結果を得ると、３世代塊以外の世代塊に属する世代番号の中から最も若い世代番号を選択し、その世代番号をそのスナップショットに割り当てる（ＳＰ９５）。そしてＣＰＵ１７は、この後、この世代番号割当て処理を終了する。
【０２３６】
これに対してＣＰＵ１７は、ステップＳＰ９４の判断で否定結果を得ると、３世代塊を含むすべての世代塊にそれぞれ属するすべての世代番号のうち、最も若い世代番号を選択し、その世代番号をそのスナップショットに割り当てる（ＳＰ９６）。そしてＣＰＵ１７は、この後、この世代番号割当て処理を終了する。
【０２３７】
（３−２−４）管理情報取得処理
図３２は、ライトコマンドやリードコマンド又はコピーペアを操作するペア操作コマンドなど、対応する処理を実行するために対応するスナップショットの管理情報が必要となるコマンドがホスト計算機３からディスクアレイ装置４に与えられた場合にＣＰＵ１７により実行される管理情報取得処理の処理手順を示す。なお、通常、この種のコマンドでは、対象となる論理ボリュームＶＯＬ（プライマリボリュームＰＶＯＬ及び又はスナップショットボリュームＳＳＶＯＬ等）のＬＵＮ及び当該論理ボリュームＶＯＬ内の対象となるＬＢＡが指定されるため、以下においてはこれを前提として説明する。
【０２３８】
ＣＰＵ１７は、かかるコマンドを受信すると、この図３２に示す管理情報取得処理を開始し、まず、ペア管理テーブル２０（図６）を参照して、かかるコマンドの対象となるスナップショットの世代番号を取得する（ＳＰ１００）。例えば、ＣＰＵ１７は、ＬＵＮが「１」のスナップショットボリュームＳＳＶＯＬを対象とするライトコマンドを受信した場合、ペア管理テーブル２０のエントリ２０Ａ（図６）のうち、ＬＵＮ欄２０Ｄ（図６）に「１」が格納されているエントリ２０Ａを検索し、そのエントリ２０Ａの世代番号欄２０Ｅ（図６）に格納されている世代番号（図６では「１」）を取得する。この世代番号は、かかるスナップショットボリュームＳＳＶＯＬにより保持されているスナップショットの世代番号である。
【０２３９】
続いて、ＣＰＵ１７は、ステップＳＰ１００において取得した対象とするスナップショットの世代番号と、かかるコマンドから認識される処理対象となるＬＢＡの範囲とに基づいて、コマンドに応じた処理を実行するのに必要なスナップショットの管理情報がどの世代塊に属するかを特定する（ＳＰ１０１）。
【０２４０】
次いで、ＣＰＵ１７は、ステップＳＰ１０１において特定した世代塊の管理情報がキャッシュメモリ１５（図１）上に存在するか否かを判断する（ＳＰ１０２）。この場合、ＣＰＵ１７は、キャッシュメモリ１５上に存在する世代塊を管理情報ステージング情報として常に管理している。従って、この判断はかかる管理情報ステージング情報に基づいて行われる。
【０２４１】
そしてＣＰＵ１７は、この判断で肯定結果を得ると、ステップＳＰ１０１において特定した世代塊の管理情報をキャッシュメモリ１５から読み出し（ＳＰ１０３）、この後、この管理情報取得処理を終了する。またＣＰＵ１７は、ステップＳＰ１０４の判断で否定結果を得ると、ステップＳＰ１０２において特定した世代塊の管理情報をデータプールＤＰからキャッシュメモリ１５に読み出し（ＳＰ１０４）、この後、この管理情報取得処理を終了する。
【０２４２】
かくしてＣＰＵ１７は、この後、ステップＳＰ１０３又はステップＳＰ１０４において取得した世代塊の管理情報に基づいて、上述のコマンドに応じた処理を実行する。
【０２４３】
（４）本実施の形態の効果
以上のように本実施の形態によるディスクアレイ装置４では、スナップショットの管理情報をデータプールＤＰ内に保持し、必要時に必要な管理情報のみをコントローラ１１内のキャッシュメモリ１５に読み出すようにしているため、キャッシュメモリ１５のメモリ容量によって取得可能なスナップショットの数が制限されることがない。従って、本ディスクアレイ装置に４によれば、キャッシュメモリのメモリ容量によってスナップショットの取得数が制限されていた従来のディスクアレイ装置と比して、より多くのスナップショットを取得することができる。
【０２４４】
また本ディスクアレイ装置４では、プライマリボリュームＰＶＯＬへのデータライト時には、旧データを共有する複数世代のスナップショットのうち、最新世代のスナップショットの管理情報のみを更新し、残りの世代のスナップショットの管理情報については、その残りのスナップショットへのアクセスがあったときや、その残りのスナップショットを削除する際に更新するため、スナップショット管理情報の更新処理の処理負荷がプライマリボリュームＰＶＯＬへのライト性能に悪影響を及ぼすのを未然かつ有効に防止することができる。かくするにつき、ディスクアレイ装置４全体としての信頼性を向上させることができる。
【０２４５】
（５）他の実施の形態
なお上述の実施の形態においては、本発明を図１のように構成されたディスクアレイ装置に適用するようにした場合について述べたが、本発明はこれに限らず、この他種々の構成を有するストレージ装置に広く適用することができる。
【０２４６】
また上述の実施の形態においては、差分反映処理を、差分反映処理すべきスナップショットへのアクセスがあったときや、そのスナップショットを削除する際に実行するようにした場合について述べたが、本発明はこれに限らず、これ以外のタイミングでかかる差分反映処理を実行するようにしても良い。
【０２４７】
さらに上述の実施の形態においては、データプールＤＰに保持したスナップショットの管理情報を読み出すメモリとしてキャッシュメモリ１５を適用するようにした場合について述べたが、本発明はこれに限らず、かかる管理情報を例えばローカルメモリ１６に読み出すようにしても良く、さらには、かかる管理情報を読み出すための専用のメモリを設けるようにしても良い。
【０２４８】
さらに上述の実施の形態においては、データプールＤＰからスナップショットの管理情報を読み出す単位である世代塊を図２８について上述したように定義するようにした場合について述べたが、本発明はこれに限らず、個々の世代塊をこれ以外の内容で定義するようにしても良い。
【産業上の利用可能性】
【０２４９】
本発明は、スナップショット機能が搭載されたストレージ装置に広く適用できる。
【符号の説明】
【０２５０】
１……計算機システム、３……ホスト計算機、４……ディスクアレイ装置、１０……記憶デバイス、１１……コントローラ、１５……キャッシュメモリ、１９……ＣＰＵ、２０……ペア管理テーブル、２１……スナップショット差分ビットマップ、２２……プライマリボリューム差分ビットマップ、２３……スナップショット差分集約ビットマップ、２４……旧データ退避アドレステーブル、２５……旧データ退避領域空きビットマップ、２６……旧データ退避未反映ビットマップ、２７……分割順番号−世代番号マッピングテーブル、２８……スナップショットライト差分ビットマップ、ＣＫ１……管理情報格納用チャンク、ＣＫ２……旧データ退避用チャンク、ＤＰＰＬ……データプール、ＰＶＯＬ……プライマリボリューム、ＳＡ１，ＳＡ２……記憶領域、ＳＳＶＯＬ……スナップショットボリューム、ＶＯＬ……論理ボリューム。
【図１】
0005715297.tif 000002
【図２】
0005715297.tif 000003
【図３】
0005715297.tif 000004
【図４】
0005715297.tif 000005
【図５】
0005715297.tif 000006
【図６】
0005715297.tif 000007
【図７】
0005715297.tif 000008
【図８】
0005715297.tif 000009
【図９】
0005715297.tif 000010
【図１０】
0005715297.tif 000011
【図１１】
0005715297.tif 000012
【図１２】
0005715297.tif 000013
【図１３】
0005715297.tif 000014
【図１４】
0005715297.tif 000015
【図１５】
0005715297.tif 000016
【図１６】
0005715297.tif 000017
【図１７】
0005715297.tif 000018
【図１８】
0005715297.tif 000019
【図１９】
0005715297.tif 000020
【図２０】
0005715297.tif 000021
【図２１】
0005715297.tif 000022
【図２２】
0005715297.tif 000023
【図２３】
0005715297.tif 000024
【図２４】
0005715297.tif 000025
【図２５】
0005715297.tif 000026
【図２６】
0005715297.tif 000027
【図２７Ａ】
0005715297.tif 000028
【図２７Ｂ】
0005715297.tif 000029
【図２８】
0005715297.tif 000030
【図３０】
0005715297.tif 000031
【図３１】
0005715297.tif 000032
【図３２】
0005715297.tif 000033
【図２９Ａ】
0005715297.tif 000034
【図２９Ｂ】
0005715297.tif 000035