(57)【特許請求の範囲】
【請求項１】
コピー元ボリュームに記憶されたコピー元データを、コピー先ボリュームにコピーし、コピーされたデータを世代単位で管理するストレージ装置において、
前記コピー先ボリュームの論理アドレスに対応付けて複数世代を一括りにした世代単位のコピーの有無を示す情報を記憶するコピー有無記憶部と、
前記論理アドレスに対応する前記コピー先ボリュームの物理アドレスが世代単位で記憶されるアドレス記憶部と、
前記コピー先ボリュームへの所定の論理アドレスの読み出し要求を受信した場合に、前記コピー有無記憶部に記憶された、前記論理アドレスに対応付けられた世代単位のコピーの有無を示す情報を用いて前記読み出し要求された所定の論理アドレスのコピーの有無を判定し、判定結果に基づいて指定される世代の前記アドレス記憶部から取得した前記コピー先ボリュームの物理アドレスに対してアクセスを行うアクセス部と
を備えることを特徴とするストレージ装置。
【請求項２】
前記コピー有無記憶部には、コピーの有無に関係する情報が複数世代を一括りにした世代単位で前記コピー先ボリュームの各論理アドレスに対応付けて記憶される
ことを特徴とする請求項１に記載のストレージ装置。
【請求項３】
前記アクセス部は、前記コピー先ボリュームへの読み出し要求を受信した場合に、前記コピー有無記憶部に記憶された前記世代単位のコピーの有無を示す情報を用いて前記読み出し要求により指定された世代の論理アドレスのコピーの有無を判定し、コピー有りと判定された場合に、当該世代の前記アドレス記憶部から取得した前記コピー先ボリュームの物理アドレスに対してアクセスを行い、取得した物理アドレスが初期値である場合に、コピー有りと判定された他の世代の中から選択された前記アドレス記憶部から取得した前記コピー先ボリュームの物理アドレスに対してアクセスを行う
ことを特徴とする請求項１または請求項２に記載のストレージ装置。
【請求項４】
前記アクセス部は、前記読み出し要求により指定された世代が最新世代であり、最新世代のコピーが無いと判定された場合は、前記コピー元ボリュームに対してアクセスを行う
ことを特徴とする請求項３に記載のストレージ装置。
【請求項５】
前記アクセス部は、前記コピー先ボリュームへの書き込み要求を受信した場合に、前記書き込み要求された世代の前記アドレス記憶部から取得した物理アドレスが初期値である場合に、前記コピー先ボリュームにおける当該世代の空き領域に前記書き込み要求されたデータを書き込むとともに、前記コピー有無記憶部の該世代に対応する前記世代単位のコピーの有無を示す情報にコピー有りの情報を書き込む
ことを特徴とする請求項１または請求項２に記載のストレージ装置。
【請求項６】
コピー元ボリュームに記憶されたコピー元データを、コピー先ボリュームにコピーし、コピーされたデータを世代単位で管理するストレージ装置のストレージ制御装置において、
前記コピー先ボリュームの論理アドレスに対応付けて複数世代を一括りにした世代単位のコピーの有無を示す情報を記憶するコピー有無記憶部と、
前記論理アドレスに対応する前記コピー先ボリュームの物理アドレスが世代単位で記憶されるアドレス記憶部と、
前記コピー先ボリュームへの所定の論理アドレスの読み出し要求を受信した場合に、前記コピー有無記憶部に記憶された、前記論理アドレスに対応付けられた世代単位のコピーの有無を示す情報を用いて前記読み出し要求された所定の論理アドレスのコピーの有無を判定し、判定結果に基づいて指定される世代の前記アドレス記憶部から取得した前記コピー先ボリュームの物理アドレスに対してアクセスを行うアクセス部と
を備えることを特徴とするストレージ制御装置。
【請求項７】
コピー元ボリュームに記憶されたコピー元データを、コピー先ボリュームにコピーし、コピーされたデータを世代単位で管理するストレージ装置によって実行されるコピー先データアクセス方法であって、
前記コピー先ボリュームへの所定の論理アドレスの読み出し要求を受信した場合に、前記コピー先ボリュームの論理アドレスに対応付けて複数世代を一括りにした世代単位のコピーの有無を示す情報を記憶するコピー有無記憶部に記憶された、前記論理アドレスに対応付けられた世代単位のコピーの有無を示す情報を用いて前記読み出し要求された所定の論理アドレスのコピーの有無を判定し、
前記判定する処理に応じた判定結果に基づいて指定される世代の、前記論理アドレスに対応する前記コピー先ボリュームの物理アドレスが世代単位で記憶されるアドレス記憶部から取得した前記コピー先ボリュームの物理アドレスに対してアクセスを行う
各処理を実行することを特徴とするコピー先データアクセス方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ技術等に関する。
【背景技術】
【０００２】
ストレージ製品やコンピュータにおけるデータをバックアップする手法の一つとして、コピーオンライト（Copy  On  Write）という手法がある。コピーオンライトとは、スナップショットを作成する時点ではなく、コピー元ボリュームへの書き込み要求時点に、コピー元ボリュームの当該要求のあった箇所における書き込み前のデータをコピー先ボリュームへバックアップする。
【０００３】
また、コピーオンライトを拡張したバックアップ手法として、書き込み要求のあった箇所（対象領域）を、コピービットマップを用いて世代管理する技術がある。コピービットマップは、コピー元ボリュームの対象領域のデータがコピー先ボリュームへコピー済みであるか否かを世代毎に管理することに用いられる。
【０００４】
図１６は、従来のコピービットマップのデータ構造を示す図である。図１６に示すように、コピービットマップは、世代毎に各対象領域のデータがコピー先ボリュームへコピー済みであるか否かを記憶する。ここでは、「０」は、対象領域のデータがコピー先ボリュームの対応する記憶領域に存在することを示すビットの値である。「１」は、対象領域のデータがコピー先ボリュームの対応する記憶領域に存在しないことを示すビットの値である。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−２６９３９号公報
【特許文献２】特開２００４−１９９７１１号公報
【特許文献３】特開２００２−３７３０９３号公報
【特許文献４】特開２０１０−２３８００９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、コピーオンライトでは、バックアップの世代を増やす都度、世代毎のコピービットマップをメモリに確保するので、メモリ容量の不足によりコピービットマップが確保できないと、世代を増やせない場合がある。メモリ容量の不足により世代を増やせない場合を考慮して、コピービットマップをディスクに配置することも考えられる。
【０００７】
しかしながら、コピーオンライトにおいて、従来のコピービットマップをディスクに配置すると、バックアップの世代を増やすと性能劣化が生じる場合がある。例えば、ある世代の対象領域についてコピー先ボリュームへの読み込み処理を行う場合、読み込み処理に時間がかかってしまう場合がある。図１７は、従来のコピー先ボリュームへの読込処理を説明する図である。
【０００８】
まず、読込処理では、ストレージ装置が、例えばホストから読み込み要求を受信すると（ステップＳ１０１）、読み込む対象である対象世代のコピービットマップを読み込む（ステップＳ１０２）。そして、ストレージ装置は、読み込んだコピービットマップを用いて、対象領域に対応するビットが０（データが存在）であるか否かを判定する（ステップＳ１０３）。
【０００９】
そして、ストレージ装置は、対象ビットが０であると判定した場合（ステップＳ１０３；Ｙｅｓ）、対象ビットに対応する対象領域を物理アドレスに変換し、変換した物理アドレスから対象世代のデータを読み込む（ステップＳ１０４）。一方、ストレージ装置は、対象ビットが０でないと判定した場合（ステップＳ１０３；Ｎｏ）、処理中の世代が最新世代であるか否かを判定する（ステップＳ１０５）。そして、ストレージ装置は、処理中の世代が最新世代でないと判定した場合（ステップＳ１０５；Ｎｏ）、次の世代のコピービットマップを読み込み（ステップＳ１０６）、対象領域のデータの存在有無を判断すべく、ステップＳ１０３に移行する。
【００１０】
一方、ストレージ装置は、処理中の世代が最新の世代であると判定した場合（ステップＳ１０５；Ｙｅｓ）、コピー元ボリュームの対象領域のデータを読み込む（ステップＳ１０７）。ストレージ装置は、ステップＳ１０４またはステップＳ１０７において、対象領域のデータを読み込むと、データをホストへ転送する（ステップＳ１０８）。
【００１１】
このように、ストレージ装置は、読み込み対象である世代について、対象領域に対応するデータが存在しない場合、繰り返し当該世代と異なる世代のコピービットマップをディスクから読み込んでデータの存在有無を判断する。この結果、世代の異なるコピービットマップの読み込み回数が増加すると、性能が劣化する。
【００１２】
１つの側面では、本発明は、バックアップの世代を増やしても、コピーオンライト向けの性能劣化を防止できるストレージ装置等を提供することを目的とする。
【課題を解決するための手段】
【００１３】
本願の開示するストレージ装置は、一つの態様において、コピー元ボリュームに記憶されたコピー元データを、コピー先ボリュームにコピーし、コピーされたデータを世代単位で管理するストレージ装置において、コピーの有無を示す情報が世代単位で前記コピー先ボリュームの論理アドレスに対応付けて記憶されるコピー有無記憶部と、前記論理アドレスに対応する前記コピー先ボリュームの物理アドレスが世代単位で記憶されるアドレス記憶部と、前記コピー先ボリュームへのアクセス要求を受信した場合に、前記コピー有無記憶部に記憶された前記コピーの有無を示す情報を用いて前記アクセス要求された論理アドレスのコピーの有無を判定し、判定結果に基づいて指定される世代の前記アドレス記憶部から取得した前記コピー先ボリュームの物理アドレスに対してアクセスを行うアクセス部とを有する。
【発明の効果】
【００１４】
本願の開示するストレージ装置の一つの態様によれば、バックアップの世代を増やしても、コピーオンライト向けの性能劣化を防止できるという効果を奏する。
【図面の簡単な説明】
【００１５】
【図１】図１は、実施例１に係るストレージ装置の構成を示す機能ブロック図である。
【図２】図２は、ＳｎａｐＯＰＣを説明する図である。
【図３】図３は、実施例１に係る最新世代ビットマップのデータ構造を示す図である。
【図４】図４は、ＬＢＡ変換テーブルのデータ構造を示す図である。
【図５】図５は、実施例１に係る集約ビットマップのデータ構造を示す図である。
【図６】図６は、セッション管理テーブルのデータ構造を示す図である。
【図７】図７は、エレメント管理テーブルのデータ構造を示す図である。
【図８】図８は、スナップテーブルプール内のエレメントを説明する図である。
【図９】図９は、コピー元ボリュームへの書込処理の手順を示すフローチャートである。
【図１０Ａ】図１０Ａは、コピー先ボリュームへの読込処理の手順を示すフローチャート（１）である。
【図１０Ｂ】図１０Ｂは、コピー先ボリュームへの読込処理の手順を示すフローチャート（２）である。
【図１１】図１１は、コピー先ボリュームへの書込処理の手順を示すフローチャートである。
【図１２】図１２は、スナップショットの作成手順を示すフローチャートである。
【図１３】図１３は、スナップショットの削除手順を示すフローチャートである。
【図１４】図１４は、実施例１に係る集約ビットマップのデータ構造の変形例を示す図である。
【図１５】図１５は、実施例２に係る集約ビットマップのデータ構造を示す図である。
【図１６】図１６は、従来のコピービットマップのデータ構造を示す図である。
【図１７】図１７は、従来のコピー先ボリュームへの読込処理を説明する図である。
【発明を実施するための形態】
【００１６】
以下に、本願の開示するストレージ装置、ストレージ制御装置およびコピー先データアクセス方法の実施例を図面に基づいて詳細に説明する。なお、実施例では、コピーオンライト向けのバックアップ手法としてＳｎａｐＯＰＣ（One  Point  Copy）を用いる。しかしながら、本実施例によりこの発明が限定されるものではない。
【実施例１】
【００１７】
［実施例１に係るストレージ装置の構成］
図１は、実施例に係るストレージ装置の構成を示す機能ブロック図である。図１に示すように、ストレージ装置２は、ホスト１と接続し、ホスト１の要求に応じて、コピー元ボリュームに記憶されたコピー元データを、世代毎に管理されたコピー先ボリュームにバックアップする。さらに、ストレージ装置２は、ドライブ３と、チャネルアダプタ（ＣＡ）４と、コントローラモジュール（ＣＭ）５とを有する。
【００１８】
ドライブ３は、データを記憶するデータ記憶装置であり、例えばＨＤＤ（Hard  Disk  Drive）やＳＳＤ（Solid  State  Drive）がある。さらに、ドライブ３は、集約ビットマップ３１と、ＬＢＡ（Logical  Block  Address）変換テーブル３２とを有する。集約ビットマップ３１は、コピー元ボリュームの領域のデータについて、コピー先ボリュームへの世代毎のコピーの有無を領域に対応付けて記憶する。ＬＢＡ変換テーブル３２は、コピー元ボリュームの領域に対するコピー先ボリュームの物理領域のアドレスを世代毎に記憶する。これら集約ビットマップ３１およびＬＢＡ変換テーブル３２を記憶するドライブ３は、アクセス処理を高速化するため、ＳＳＤであることが望ましい。しかしながら、これに限定されず、ＨＤＤであっても良い。また、集約ビットマップ３１およびＬＢＡ変換テーブル３２のデータ構造については、後述する。
【００１９】
ＣＭ５は、ドライブ３、ＣＡ４および後述する記憶部７等の資源の管理を行うストレージ制御装置に相当する。さらに、ＣＭ５は、ドライブ側アダプタ（ＤＡ）６と、記憶部７と、制御部８とを有する。ＤＡ６は、ドライブ３と通信接続する通信インタフェースである。記憶部７は、例えば、キャッシュメモリ、ＲＡＭ（Random  Access  Memory）、フラッシュメモリ（flash  memory）等の半導体メモリ素子である。さらに、記憶部７は、最新世代ビットマップ７１と、セッション管理テーブル７２と、エレメント管理テーブル７３とを有する。最新世代ビットマップ７１は、コピー元ボリュームの対象領域のデータの最新世代のコピー先ボリュームへのコピー状況を記憶する。セッション管理テーブル７２は、セッション（以降、世代と同義）を管理する。エレメント管理テーブル７３は、セッション管理テーブル７２で用いられるエレメントを管理する。なお、最新世代ビットマップ７１、セッション管理テーブル７２およびエレメント管理テーブル７３のデータ構造については、後述する。
【００２０】
制御部８は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）等の集積回路、または、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）等の電子回路である。さらに、制御部８は、チャネル制御部８１と、キャッシュ制御部８２と、ドライブ制御部８３と、コピー制御部８４とを有する。
【００２１】
チャネル制御部８１は、ＣＡ４を制御する。キャッシュ制御部８２は、キャッシュを一例とする記憶部７を制御する。ドライブ制御部８３は、ドライブ３を制御する。コピー制御部８４は、ＳｎａｐＯＰＣを実行する際のバックアップに関連する処理を制御する。ここで、ＳｎａｐＯＰＣとは、バックアップを実行する際に、コピー元ボリュームのデータのうち、書き込み等による更新が行われた領域における更新前のデータのみをコピー先ボリュームにバックアップする手法である。そして、ＳｎａｐＯＰＣは、書き込みを行う対象領域を世代毎に管理する。
【００２２】
図２は、ＳｎａｐＯＰＣについて説明する図である。図２に示すように、ストレージ装置２には、コピー元ボリュームとコピー先ボリュームがドライブ３に割り当てられている。そして、コピー先ボリュームは、複数世代存在し、それぞれＳＤＶ（Snap  Data  Volume）を利用している。ＳＤＶは、仮想的なボリュームであり、実際には小さい物理容量で大きい論理容量をホスト１に認識させる。つまり、ホスト１は、コピー元ボリュームのコピー元の物理容量と各世代のコピー先ボリュームの論理領域とが同じ容量であると認識する。言い換えると、コピー元ボリュームのコピー元ＬＢＡの最大値は、各コピー先ボリュームの論理領域のデータが存在する箇所を示した論理ＬＢＡの最大値と同じとなる。
【００２３】
かかる環境の下、ストレージ装置２は、コピー元ボリュームへの書き込み要求を受信すると、コピー元ボリュームのデータのうち当該要求の行われた書き込み箇所における書き込み前のデータのみを最新世代のコピー先ボリュームへコピーする。
【００２４】
図１に戻って、コピー制御部８４は、コピー元読込部８４１と、コピー元書込部８４２と、コピー先読込部８４３と、コピー先書込部８４４と、セッション管理部８４５とを有する。
【００２５】
コピー元読込部８４１は、ホスト１からコピー元ボリュームへの読み込み要求を受信すると、受信要求の行われた対象領域に対するデータをコピー元ボリュームから読み込む。そして、コピー元読込部８４１は、読み込んだデータをホスト１へ転送する。
【００２６】
コピー元書込部８４２は、ホスト１からコピー元ボリュームへの書き込み要求を受信すると、最新世代ビットマップ７１を用いて、当該要求の行われた対象領域のデータが最新世代のコピー先ボリュームへコピーされているか否かをチェックする。ここで、最新世代ビットマップ７１のデータ構造について、図３を参照して説明する。
【００２７】
図３は、実施例１に係る最新世代ビットマップのデータ構造を示す図である。図３に示すように、最新世代ビットマップ７１は、コピー元ボリュームの各対象領域のデータが最新世代のコピー先ボリュームへコピー済みであるか否かを記憶する。最新世代ビットマップ７１の大きさは、コピー元ボリュームの容量に依存する。例えば、コピー元ボリュームが１６ＧＢである場合、「０ｘ０２００００００」（１６進数）ブロック分のビット数が割り当てられる。１６ブロック（８キロバイト（ＫＢ））を１単位（１ビット）で管理する場合、２メガバイト（ＭＢ）の大きさになる。
【００２８】
図３の例では、「０」が、コピー済みであることを示すビット値である。「１」が、コピー済みでないことを示すビット値である。例えば、対象領域である論理ＬＢＡが「０ｘ００００００００」である場合、対象領域のデータがコピー済みであることを示す「０」を記憶している。対象領域である論理ＬＢＡが「０ｘ００００００１０」である場合、対象領域のデータがコピー済みでないことを示す「１」を記憶している。
【００２９】
図１に戻って、コピー元書込部８４２は、書き込み要求の行われた対象領域のデータが最新世代のコピー先ボリュームへコピーされていない場合、コピー元ボリュームの当該領域のデータを最新世代のコピー先ボリュームへコピーする。また、コピー元書込部８４２は、最新世代ビットマップ７１の対象領域に対応するビットにコピー済みであることを示す「０」を格納するとともに、対象領域に対応するコピー先の物理アドレスを最新世代のＬＢＡ変換テーブル３２に格納する。さらに、コピー書込部８４２は、書き込み要求の行われた対象領域に書き込み要求の行われたデータを書き込む。
【００３０】
コピー元書込部８４２は、書き込み要求の行われた対象領域のデータが最新世代のコピー先ボリュームへコピーされている場合、書き込み要求の行われた対象領域に書き込み要求の行われたデータを書き込む。この場合、書き込み前のデータが既にコピー先ボリュームへコピーされているので、コピー元ボリュームの対象領域のデータをコピー先ボリュームへコピーすることはしない。
【００３１】
ここで、ＬＢＡ変換テーブル３２のデータ構造について、図４を参照して説明する。図４は、ＬＢＡ変換テーブル３２のデータ構造を示す図である。図４に示すように、ＬＢＡ変換テーブル３２は、コピー元ボリュームの領域に対応するコピー先ボリュームの論理ＬＢＡとコピー先ボリュームの物理領域のデータが存在する箇所を示す物理ＬＢＡとを対応付けて記憶する。すなわち、ＬＢＡ変換テーブル３２は、コピー先ボリュームに格納されているデータについて論理ＬＢＡを物理ＬＢＡに変換することを可能とするテーブルである。図４の例では、コピー元ボリュームが「０ｘ０２００００００」ブロック（１６ＧＢ）である場合の１世代当たりのテーブルを表している。コピー先ボリュームに対し未コピー状態である部分は初期値として「０ｘＦＦＦＦＦＦＦＦ」（１６進数）を記憶する。
【００３２】
図１に戻って、コピー先読込部８４３は、コピー先ボリュームへの読み込み要求を受信した場合に、集約ビットマップ３１に記憶されたコピーの有無を示す情報を用いてアクセス要求された論理アドレスのコピーの有無を判定する。そして、コピー先読込部８４３は、判定結果に基づいて指定される世代のＬＢＡ変換テーブル３２から取得したコピー先ボリュームの物理アドレスに対してアクセスを行う。
【００３３】
例えば、コピー先読込部８４３は、ホスト１からコピー先ボリュームへの読み込み要求を受信すると、集約ビットマップ３１から、当該要求の行われた対象領域をキーとして、当該対象領域に関わるコピーの有無を読み込む。そして、コピー先読込部８４３は、読み込んだ対象領域に関わるコピーの有無から、当該要求の行われた対象世代を含む集約世代のコピーの有無を取得する。かかる集約世代とは、複数世代を一括りにした世代を示し、例えば１世代から４世代までの４世代分を一括りにした世代を指す。ここで、集約ビットマップ３１のデータ構造について、図５を参照して説明する。
【００３４】
図５は、実施例１に係る集約ビットマップのデータ構造を示す図である。図５に示すように、集約ビットマップ３１は、コピー先ボリュームへの集約世代毎のコピーの有無を論理ＬＢＡに対応付けて記憶する。論理ＬＢＡは、１６ブロック（８キロバイト（ＫＢ））を１単位とする。ここでは、「０」は、コピー元ボリュームの対象領域のデータが複数世代のいずれかのコピー先ボリュームへコピー済みであることを示すビット値である。「１」は、コピー元ボリュームの対象領域のデータがいずれの複数世代のコピー先ボリュームにもコピー済みでないことを示すビット値である。例えば、符号ａ０のように、対象領域がＬＢＡ０ｘ００００００００（１６進数）である場合、４世代を一括りにしたコピー先ボリュームへのコピーの有無を「０１１０１１１１１・・・」と記憶する。すなわち、世代１−４のコピーの有無は、コピー済みであることを示す「０」を記憶し、世代５−８のコピーの有無は、コピー済みでないことを示す「１」を記憶している。符号ａ１のように、対象領域がＬＢＡ０ｘ００００００１０である場合、４世代を一括りにしたコピー先ボリュームへのコピーの有無を「１０１０１１１１１・・・」と記憶する。すなわち、世代１−４のコピーの有無は、コピー済みでないことを示す「１」を記憶し、世代５−８のコピーの有無は、コピー済みであることを示す「０」を記憶している。
【００３５】
なお、集約ビットマップ３１は、集約世代に最新世代の情報を反映させないものとする。最新世代の情報として最新世代ビットマップ７１が存在するからである。しかしながら、集約ビットマップ３１は、これに限定されず、集約世代に最新世代の情報を反映させるようにしても良い。また、図５の例では、集約ビットマップ３１は、１つの集約世代を４世代毎に括るものとして説明したが、４世代毎に限らず、例えば３世代毎に括っても良いし、５世代毎に括っても良い。
【００３６】
図１に戻って、コピー先読込部８４３は、対象世代を含む集約世代のコピーの有無がコピー済みである場合、対象世代におけるＬＢＡ変換テーブル３２から、対象領域に対する物理領域のアドレスを読み込む。そして、コピー先読込部８４３は、読み込んだアドレスが初期値でない場合には、当該アドレスが指すデータを読み込む。また、コピー先読込部８４３は、読み込んだアドレスが初期値である場合には、コピー済みであると判定された集約世代に含まれる対象世代と異なる世代について、対象世代の場合の処理と同様にデータの読み込みを実行する。
【００３７】
また、コピー先読込部８４３は、対象世代を含むコピーの有無がコピー済みでない場合、集約ビットマップ３１から既に読み込んだ、対象領域に関わるコピーの有無からコピー済みである集約世代を検索する。そして、コピー先読込部８４３は、コピー済みである集約世代に含まれる先頭世代から最終世代まで順番に、各世代に対応するＬＢＡ変換テーブル３２から対象領域に対する物理領域のアドレスを読み込み、読み込んだアドレスが初期値以外のアドレスを取得する。そして、コピー先読込部８４３は、取得した初期値以外のアドレスが指すデータを読み込む。
【００３８】
また、コピー先読込部８４３は、読み込んだデータをホスト１へ転送する。なお、集約ビットマップ３１の集約世代に最新世代の情報を反映させない場合には、コピー先読込部８４３は、最新世代の１つ前の世代を含む集約世代までを検索対象とする。そして、コピー先読込部８４３は、最新世代の１つ前の世代を含む集約世代がコピー済みでない場合には、最新世代ビットマップ７１を用いて、対象領域に対応するコピーの有無を参照するようにすれば良い。
【００３９】
コピー先書込部８４４は、ホスト１からコピー先ボリュームへの書き込み要求を受信すると、当該要求の行われた対象世代のＬＢＡ変換テーブル３２から、当該要求の行われた対象領域に対する物理領域のアドレスを読み込む。また、コピー先書込部８４４は、読み込んだアドレスが初期値である場合、コピー元ボリュームにおける対象領域のデータを対象世代の空き領域にコピーする。これは、例えば書き込み要求の行われたデータ長が対象領域の読み込み単位のブロック長より短い場合に、当該要求に応じた長さのデータを書き込んだ後同じ領域を読み込んだときのデータの不整合を防止するためである。
【００４０】
また、コピー先書込部８４４は、対象世代のＬＢＡ変換テーブル３２の物理ＬＢＡを、コピーした物理領域のアドレスに更新する。加えて、コピー先書込部８４４は、集約ビットマップ３１の対象領域について、対象世代を含む集約世代のビットをコピー済みに更新する。そして、コピー先書込部８４４は、書き込み要求の行われた対象世代のコピー先ボリュームの対象領域に、当該要求の行われたデータを書き込む。
【００４１】
また、コピー先書込部８４４は、読み込んだアドレスが初期値以外の場合、書き込み要求の行われた対象世代のコピー先ボリュームの対象領域に、当該要求の行われたデータを書き込む。
【００４２】
セッション管理部８４５は、ホスト１からスナップショットの作成要求を受信すると、コピー先ボリュームにおけるセッション（世代と同義）を作成する時に、セッション（世代と同義）に対応するセッション管理テーブル７２を作成する。また、セッション管理部８４５は、ドライブ３上の予め作成されるストレージプールより、ＬＢＡ変換テーブル３２に必要なエレメントを割り当てる。ここで、予め作成されるストレージプールは、スナップショット用の領域として専用に使用でき、「スナップテーブルプール」という。
【００４３】
また、セッション管理部８４５は、初回のセッションの作成時の場合には、スナップテーブルプールより、集約ビットマップ３１に必要なエレメントを割り当て、割り当てたエレメント分の領域をコピー済みでないことを示す「１」で初期化（無効化）する。かかる場合には、セッション管理部８４５は、最新世代ビットマップ７１を記憶部７に作成し、コピー済みでないことを示す「１」で初期化する。例えば、コピー元ボリュームが１６ＧＢである場合、１６ブロック（８キロバイト（ＫＢ））を１単位として「０ｘ０２００００００」（１６進数）ブロック分のビット（２メガバイト（ＭＢ））をコピー済みでないことを示す「１」で初期化する。
【００４４】
ここで、セッション管理テーブル７２のデータ構造について、図６を参照して説明する。図６は、セッション管理テーブルのデータ構造を示す図である。図６に示すように、セッション管理テーブル７２は、コピー元ボリューム番号７２ａ、コピー先ボリューム番号７２ｂ、コピー元ボリュームの先頭ＬＢＡ７２ｃおよびコピー先ボリュームの先頭ＬＢＡ７２ｄを世代番号７２ｆに対応付けて記憶する。また、セッション管理テーブル７２は、コピー対象ブロック数７２ｅ、ＬＢＡ変換テーブルの先頭エレメント番号７２ｇおよび末尾エレメント番号７２ｈを世代番号７２ｆに対応付けて記憶する。さらに、セッション管理テーブル７２は、集約ビットマップの先頭エレメント番号７２ｉおよび末尾エレメント番号７２ｊを世代番号７２ｆに対応付けて記憶する。
【００４５】
コピー元ボリューム番号７２ａは、コピー元ボリュームの識別番号を示す。コピー先ボリューム番号７２ｂは、コピー先ボリュームの識別番号を示す。コピー元ボリュームの先頭ＬＢＡ７２ｃは、コピー元ボリュームのコピー対象領域の先頭ＬＢＡを示す。コピー先ボリュームの先頭ＬＢＡ７２ｄは、コピー先ボリュームのコピー対象領域の先頭ＬＢＡを示す。コピー対象ブロック数７２ｅは、コピー対象の全体のブロック数を示す。世代番号７２ｆは、コピー先ボリュームの世代番号を示す。
【００４６】
ＬＢＡ変換テーブルの先頭エレメント番号７２ｇは、世代番号で示される世代のＬＢＡ変換テーブル３２に必要なエレメントのうち先頭のエレメントの識別番号を示す。ＬＢＡ変換テーブルの末尾エレメント番号７２ｈは、世代番号で示される世代のＬＢＡ変換テーブル３２に必要なエレメントのうち末尾のエレメントの識別番号を示す。集約ビットマップ３１の先頭エレメント番号７２ｉは、集約ビットマップ３１に必要なエレメントのうち先頭のエレメントの識別番号を示す。集約ビットマップ３１の末尾エレメント番号７２ｊは、集約ビットマップ３１に必要なエレメントのうち末尾のエレメントの識別番号を示す。集約ビットマップ３１の先頭エレメント番号７２ｉおよび末尾エレメント番号７２ｊは、初回に作成される世代、すなわち最古の世代のみに設定される。
【００４７】
エレメントは、エレメント管理テーブル７３によって管理される。エレメント管理テーブル７３のデータ構造について、図７を参照して説明する。図７は、エレメント管理テーブルのデータ構造を示す図である。図７に示すように、エレメント管理テーブル７３は、エレメント番号７３ａ、ＳＳＤアドレス７３ｂ、次エレメント番号７３ｃおよび前エレメント番号７３ｄを対応付けて記憶する。エレメント番号７３ａは、エレメントの識別番号を示す。ＳＳＤアドレス７３ｂは、ＬＢＡ変換テーブル３２または集約ビットマップ３１の情報をＳＳＤに記憶する場合の、記憶するＳＳＤ上のアドレスを示す。次エレメント番号７３ｃは、ＬＢＡ変換テーブル３２または集約ビットマップ３１のそれぞれ情報の記憶に用いられる後続するエレメントの識別番号を示す。前エレメント番号７３ｄは、ＬＢＡ変換テーブル３２または集約ビットマップ３１のそれぞれの情報の記憶に用いられる直前のエレメントの識別番号を示す。
【００４８】
ここで、スナップテーブルプール内のエレメントについて、図８を参照して説明する。図８は、スナップテーブルプール内のエレメントを説明する図である。図８に示すように、スナップテーブルプールは、１ＭＢの区画を１つのエレメントとして分割される。そして、セッション管理部８４５は、ＬＢＡ変換テーブル３２および集約ビットマップ３１にそれぞれ必要なエレメント数のエレメントを割り当てる。仮にエレメントを採用しないで単純に連続領域としてスナップテーブルプールが使用されると、領域の獲得と解放が繰り返されることによって、使用可能な領域が歯抜けの状態となる。そうすると、容量に空きがあっても連続領域として領域を確保できなくなる場合が生じる。そこで、セッション管理部８４５は、セッションの作成時に、連続領域に関係なく、必要なエレメント数のエレメントを割り当てる。ここでは、１エレメントは、ＬＢＡ変換テーブル３２について、論理ＬＢＡが「０ｘ２０００００」（１６進数）ブロック分、すなわち１ＧＢ分のコピー元ボリュームの領域に相当する。また、１エレメントは、集約ビットマップ３１について、１ＧＢ分のコピー元ボリュームの領域に相当する（４世代分を一括りにした場合）。つまり、コピー先読込部８４３が集約ビットマップ３１から対象領域に対応する論理ＬＢＡを読み込む際、１エレメントを読み込むだけで論理ＬＢＡに関わる全ての集約世代のコピーの有無を取得できる。このため、仮にバックアップの世代を増やしたとしても、コピー先ボリュームへの読み込み処理の性能劣化を防止できる。
【００４９】
［コピー元ボリュームへの書込処理の手順］
次に、コピー元ボリュームへの書込処理の手順について、図９を参照して説明する。図９は、コピー元ボリュームへの書込処理の手順を示すフローチャートである。
【００５０】
まず、コピー元書込部８４２は、ホスト１からコピー元ボリュームへの書き込み要求を受信したか否かを判定する（ステップＳ１１）。ホスト１からコピー元ボリュームへの書き込み要求を受信しなかったと判定した場合（ステップＳ１１；Ｎｏ）、コピー元書込部８４２は、当該要求を受信するまで判定処理を繰り返す。
【００５１】
一方、ホスト１からコピー元ボリュームへの書き込み要求を受信したと判定した場合（ステップＳ１１；Ｙｅｓ）、コピー元書込部８４２は、最新世代ビットマップ７１を記憶部７から読み込む（ステップＳ１２）。かかるコピー元ボリュームへの書き込み要求には、例えば、当該要求の行われた対象領域であるＬＢＡと当該要求の行われたデータを含む。
【００５２】
そして、コピー元書込部８４２は、読み込んだ最新世代ビットマップ７１の、対象領域に対応する対象ビットがコピー済みでない「１」であるか否かを判定する（ステップＳ１３）。対象ビットがコピー済みである「０」であると判定した場合（ステップＳ１３；Ｎｏ）。コピー元書込部８４２は、ステップＳ１７に移行する。
【００５３】
一方、対象ビットがコピー済みでない「１」であると判定した場合（ステップＳ１３；Ｙｅｓ）、コピー元書込部８４２は、コピー元ボリュームの対象領域のデータを、最新世代のＳＤＶの空き領域である物理ＬＢＡへコピーする（ステップＳ１４）。続いて、コピー元書込部８４２は、最新世代ビットマップ７１の対象領域に対応するビットをコピー済みであることを示す「０」に更新する（ステップＳ１５）。加えて、コピー元書込部８４２は、コピー先の空き領域である物理ＬＢＡを対象領域に対応付けて、最新世代のＬＢＡ変換テーブル３２を更新する（ステップＳ１６）。
【００５４】
その後、コピー元書込部８４２は、ホスト１から書き込み要求の行われた、コピー元ボリュームの対象領域へ書き込み要求の行われたデータを書き込む（ステップＳ１７）。
【００５５】
［コピー先ボリュームへの読込処理の手順］
次に、コピー先ボリュームへの読込処理の手順について、図１０Ａおよび図１０Ｂを参照して説明する。図１０Ａは、コピー先ボリュームへの読込処理の手順を示すフローチャート（１）である。図１０Ｂは、コピー先ボリュームへの読込処理の手順を示すフローチャート（２）である。なお、集約ビットマップ３１およびＬＢＡ変換テーブル３２は、ＳＳＤのスナップテーブルプールに記憶されているものとする。また、最新世代ビットマップ７１は、記憶部７の一例としてメモリに記憶されているものとする。
【００５６】
まず、コピー先読込部８４３は、ホスト１からＳＤＶ（コピー先ボリューム）への読み込み要求を受信したか否かを判定する（ステップＳ２１）。ホスト１からＳＤＶへの読み込み要求を受信しなかったと判定した場合（ステップＳ２１；Ｎｏ）、コピー先読込部８４３は、当該要求を受信するまで判定処理を繰り返す。
【００５７】
一方、ホスト１からコピー先ボリュームへの読み込み要求を受信したと判定した場合（ステップＳ２１；Ｙｅｓ）、コピー先読込部８４３は、最新世代であるか否かを判定する（ステップＳ２１Ａ）。最新世代でない場合には（ステップＳ２１Ａ；Ｎｏ）、集約ビットマップ３１をＳＳＤより読み込む（ステップＳ２２）。具体的には、コピー先読込部８４３は、コピー先ボリュームへの読み込み要求を受信したと判定した場合、当該要求の行われた対象世代および対象領域である論理ＬＢＡを取得する。そして、コピー先読込部８４３は、対象世代を選択する。そして、コピー先読込部８４３は、取得した論理ＬＢＡに関わるコピーの有無を集約ビットマップ３１から読み込む。
【００５８】
そして、コピー先読込部８４３は、読み込んだ集約ビットマップ３１の、対象世代を含む集約世代の集約ビットがコピー済みであることを示す「０」であるか否かを判定する（ステップＳ２３）。集約ビットがコピー済みであることを示す「０」でないと判定した場合（ステップＳ２３；Ｎｏ）、コピー先読込部８４３は、次の集約世代の先頭の世代を選択する（ステップＳ２４）。そして、コピー先読込部８４３は、次の集約世代の集約ビットをチェックすべく、ステップＳ２３に移行する。
【００５９】
一方、集約ビットがコピー済みであることを示す「０」であると判定した場合（ステップＳ２３；Ｙｅｓ）、コピー先読込部８４３は、選択した世代が最新世代であるか否かを判定する（ステップＳ２５）。選択した世代が最新世代でない場合には（ステップＳ２５；Ｎｏ）、コピー先読込部８４３は、選択した世代のＬＢＡ変換テーブル３２を読み込む（ステップＳ２６）。具体的には、コピー先読込部８４３は、ＬＢＡ変換テーブル３２の、論理ＬＢＡに対応する物理ＬＢＡを読み込む。
【００６０】
続いて、コピー先読込部８４３は、読み込んだ物理ＬＢＡが初期値であるか否かを判定する（ステップＳ２７）。読み込んだ物理ＬＢＡが初期値であると判定した場合（ステップＳ２７；Ｙｅｓ）、コピー先読込部８４３は、次の世代を選択する（ステップＳ２８）。そして、コピー先読込部８４３は、選択した世代が次の集約世代に含まれるか否かを判定する（ステップＳ２９）。
【００６１】
選択した世代が次の集約世代に含まれると判定した場合（ステップＳ２９；Ｙｅｓ）、コピー先読込部８４３は、次の集約世代の集約ビットをチェックすべく、ステップＳ２３に移行する。一方、選択した世代が次の集約世代に含まれないと判定した場合（ステップＳ２９；Ｎｏ）、コピー先読込部８４３は、ステップＳ２５に移行する。
【００６２】
ステップＳ２７に戻って、読み込んだ物理ＬＢＡが初期値でないと判定した場合（ステップＳ２７；Ｎｏ）、コピー先読込部８４３は、選択した世代のＳＤＶの、読み込んだ物理ＬＢＡよりデータを読み込む（ステップＳ３０）。そして、コピー先読込部８４３は、ステップＳ３１に移行する。
【００６３】
ステップＳ２１Ａに戻って、選択した世代が最新世代である場合には（ステップＳ２１Ａ；Ｙｅｓ）、コピー読込部８４３は、ステップＳ４１に移行する。
【００６４】
ステップＳ２５に戻って、選択した世代が最新世代である場合には（ステップＳ２５；Ｙｅｓ）、コピー先読込部８４３は、ステップＳ４１に移行する。
【００６５】
続いて、コピー先読込部８４３は、メモリ上にある最新世代ビットマップ７１を用いて、最新世代のビットをチェックする（ステップＳ４１）。具体的には、コピー先読込部８４３は、ＳＤＶへの読み込み要求の行われた対象領域である論理ＬＢＡに対応するビットを参照する。
【００６６】
そして、コピー先読込部８４３は、チェック対象のビットがコピー済みであることを示す「０」であるか否かを判定する（ステップＳ４２）。チェック対象のビットがコピー済みであることを示す「０」であると判定した場合（ステップＳ４２；Ｙｅｓ）、コピー先読込部８４３は、最新世代のＬＢＡ変換テーブル３２を読み込む。そして、コピー先読込部８４３は、ＬＢＡ変換テーブル３２の、論理ＬＢＡに対応する物理ＬＢＡを取得する（ステップＳ４３）。そして、コピー先読込部８４３は、最新世代のＳＤＶの、取得した物理ＬＢＡよりデータを読み込む（ステップＳ４４）。そして、コピー先読込部８４３は、ステップＳ３１に移行する。
【００６７】
一方、チェック対象のビットがコピー済みであることを示す「０」でないと判定した場合（ステップＳ４２；Ｎｏ）、コピー先読込部８４３は、コピー元ボリュームの、対象領域である論理ＬＢＡよりデータを読み込む（ステップＳ４５）。そして、コピー先読込部８４３は、ステップＳ３１に移行する。
【００６８】
その後、コピー先読込部８４３は、読み込んだデータをホスト１へ転送する（ステップＳ３１）。
【００６９】
［コピー先ボリュームへの書込処理の手順］
次に、コピー先ボリュームへの書込処理の手順について、図１１を参照して説明する。図１１は、コピー先ボリュームへの書込処理の手順を示すフローチャートである。なお、集約ビットマップ３１およびＬＢＡ変換テーブル３２は、ＳＳＤのスナップテーブルプールに記憶されているものとする。また、最新世代ビットマップ７１は、記憶部７の一例としてメモリに記憶されているものとする。
【００７０】
まず、コピー先書込部８４４は、ホスト１からＳＤＶ（コピー先ボリューム）への書き込み要求を受信したか否かを判定する（ステップＳ５１）。ホスト１からＳＤＶへの書き込み要求を受信しなかったと判定した場合（ステップＳ５１；Ｎｏ）、コピー先書込部８４４は、当該要求を受信するまで判定処理を繰り返す。
【００７１】
一方、ホスト１からコピー先ボリュームへの書き込み要求を受信したと判定した場合（ステップＳ５１；Ｙｅｓ）、コピー先書込部８４４は、書き込み要求が行われた対象世代のＬＢＡ変換テーブル３２を読み込む（ステップＳ５２）。具体的には、コピー先書込部８４４は、ＬＢＡ変換テーブル３２の、書き込み要求が行われた対象領域である論理ＬＢＡに対応する物理ＬＢＡを読み込む。
【００７２】
続いて、コピー先書込部８４４は、読み込んだ物理ＬＢＡが初期値であるか否かを判定する（ステップＳ５３）。読み込んだ物理ＬＢＡが初期値であると判定した場合（ステップＳ５３；Ｙｅｓ）、コピー先書込部８４４は、コピー元ボリュームの対象領域のデータを、対象世代に対応するＳＤＶの空き領域である物理ＬＢＡへコピーする（ステップＳ５４）。
【００７３】
続いて、コピー先書込部８４４は、コピー先の空き領域である物理ＬＢＡを対象領域である論理ＬＢＡに対応付けて、対象世代のＬＢＡ変換テーブル３２を更新する（ステップＳ５５）。加えて、コピー先書込部８４４は、ＳＳＤにある集約ビットマップ３１をコピー済みであることを示す「０」に更新する（ステップＳ５６）。具体的には、コピー先書込部８４４は、集約ビットマップ３１の対象領域である論理ＬＢＡについて、対象世代を含む集約世代のビットを「０」に更新する。そして、コピー先書込部８４４は、ステップＳ５７に移行する。
【００７４】
ステップＳ５３に戻って、読み込んだ物理ＬＢＡが初期値でないと判定した場合（ステップＳ５３；Ｎｏ）、コピー先書込部８４４は、ステップＳ５７に移行する。その後、コピー先書込部８４４は、ホスト１から書き込み要求の行われた、ＳＤＶの対象領域へ書き込み要求の行われたデータを書き込む（ステップＳ５７）。
【００７５】
［スナップショットの作成手順］
次に、スナップショットの作成手順について、図１２を参照して説明する。図１２は、スナップショットの作成手順を示すフローチャートである。なお、集約ビットマップ３１およびＬＢＡ変換テーブル３２は、ＳＳＤのスナップテーブルプールに記憶されるものとする。また、最新世代ビットマップ７１は、記憶部７の一例としてメモリに記憶されるものとする。
【００７６】
まず、セッション管理部８４５は、ホスト１からスナップショットの作成要求を受信したか否かを判定する（ステップＳ６１）。ホスト１からスナップショットの作成要求を受信しなかったと判定した場合（ステップＳ６１；Ｎｏ）、セッション管理部８４５は、当該要求を受信するまで判定処理を繰り返す。
【００７７】
一方、ホスト１からスナップショットの作成要求を受信したと判定した場合（ステップＳ６１；Ｙｅｓ）、セッション管理部８４５は、要求が行われた対象世代のセッション管理テーブル７２を作成する（ステップＳ６２）。例えば、セッション管理部８４５は、セッション管理テーブル７２のコピー元ボリューム番号７２ａにコピー元ボリュームの識別番号を格納する。セッション管理部８４５は、セッション管理テーブル７２のコピー先ボリューム番号７２ｂに対象世代に対応するコピー先ボリュームの識別番号を格納する。セッション管理部８４５は、セッション管理テーブル７２のコピー元ボリュームの先頭ＬＢＡ７２ｃにコピー元ボリュームの先頭ＬＢＡを格納する。セッション管理部８４５は、セッション管理テーブル７２のコピー先ボリュームの先頭ＬＢＡ７２ｄに対象世代に対応するコピー先ボリュームの先頭ＬＢＡを格納する。セッション管理部８４５は、セッション管理テーブル７２のコピー対象ブロック数７２ｅにコピー対象であるコピー元ボリュームの全体のブロック数を格納する。セッション管理部８４５は、セッション管理テーブル７２の世代番号７２ｇに対象世代の識別番号を格納する。
【００７８】
そして、セッション管理部８４５は、ＳＳＤのスナップテーブルプールより、ＬＢＡ変換テーブル３２に必要なエレメントを割り当て、セッション管理テーブル７２に接続する（ステップＳ６３）。例えば、セッション管理部８４５は、コピー元ボリュームの全ブロック数に応じた数のエレメントを獲得し、ＬＢＡ変換テーブル３２として新規世代のセッション管理テーブル７２に接続する。
【００７９】
続いて、セッション管理部８４５は、初回の世代作成であるか否かを判定する（ステップＳ６４）。初回の世代作成であると判定した場合（ステップＳ６４；Ｙｅｓ）、セッション管理部８４５は、最新世代ビットマップ７１をメモリに割り当て、コピー済みでないことを示す「１」で初期化する（ステップＳ６５）。
【００８０】
そして、セッション管理部８４５は、スナップテーブルプールより、集約ビットマップ３１に必要なエレメントを割り当て、コピー済みでないことを示す「１」で初期化し、セッション管理テーブル７２に接続する（ステップＳ６６）。例えば、セッション管理部８４５は、コピー元ボリュームの全ブロック数且つ作成可能な世代数に応じた数のエレメントを獲得し、集約ビットマップ３１として新規世代のセッション管理テーブル７２に接続する。そして、セッション管理部８４５は、初回の世代の作成を終了する。
【００８１】
一方、初回の世代作成でないと判定した場合（ステップＳ６４；Ｎｏ）、セッション管理部８４５は、最新世代ビットマップ７１を作成した時点の最新世代を集約ビットマップ３１に反映し今回作成する世代を最新世代とすべく、ステップＳ６７に移行する。セッション管理部８４５は、最新世代ビットマップ７１の各ビットに対応させたＬＢＡを先頭ＬＢＡに設定する（ステップＳ６７）。そして、セッション管理部８４５は、設定したＬＢＡに対応するビットがコピー済みであることを示す「０」であるか否かを判定する（ステップＳ６８）。
【００８２】
設定したＬＢＡに対応するビットが「０」であると判定した場合（ステップＳ６８；Ｙｅｓ）、セッション管理部８４５は、集約ビットマップ３１をコピー済みであることを示す「０」に更新する（ステップＳ６９）。例えば、セッション管理部８４５は、ＳＤＶの集約ビットマップ３１から、設定したＬＢＡをキーとして、当該ＬＢＡに関わるビット群を読み込む。そして、セッション管理部８４５は、読み込んだビット群の中で、最新世代ビットマップ７１を作成した時点の最新世代が含まれるビットを「０」に更新し、ＳＤＶへ書き戻す。そして、セッション管理部８４５は、ステップＳ７０に移行する。
【００８３】
一方、設定したＬＢＡに対応するビットが「０」でないと判定した場合（ステップＳ６８；Ｎｏ）、セッション管理部８４５は、何も処理せず、ステップＳ７０に移行する。
【００８４】
続いて、セッション管理部８４５は、最新世代ビットマップ７１の各ビットに対応させたＬＢＡを次のＬＢＡに設定する（ステップＳ７０）。そして、セッション管理部８４５は、設定したＬＢＡが最終ＬＢＡを超えたか否かを判定する（ステップＳ７１）。
【００８５】
設定したＬＢＡが最終ＬＢＡを超えていないと判定した場合（ステップＳ７１；Ｎｏ）、セッション管理部８４５は、設定したＬＢＡに対応するビットをチェックすべく、ステップＳ６８に移行する。一方、設定したＬＢＡが最終ＬＢＡを超えていると判定した場合（ステップＳ７１；Ｙｅｓ）、セッション管理部８４５は、最新世代ビットマップ７１の各ビットをコピー済みでないことを示す「１」に初期化する（ステップＳ７２）。そして、セッション管理部８４５は、今回の世代の作成を終了する。
【００８６】
［スナップショットの削除手順］
次に、スナップショットの削除手順について、図１３を参照して説明する。図１３は、スナップショットの削除手順を示すフローチャートである。なお、集約ビットマップ３１およびＬＢＡ変換テーブル３２は、ＳＳＤのスナップテーブルプールに記憶されているものとする。また、最新世代ビットマップ７１は、記憶部７の一例としてメモリに記憶されているものとする。
【００８７】
まず、セッション管理部８４５は、ホスト１からスナップショットの削除要求を受信したか否かを判定する（ステップＳ８１）。ホスト１からスナップショットの削除要求を受信しなかったと判定した場合（ステップＳ８１；Ｎｏ）、セッション管理部８４５は、当該要求を受信するまで判定処理を繰り返す。
【００８８】
一方、ホスト１からスナップショットの削除要求を受信したと判定した場合（ステップＳ８１；Ｙｅｓ）、セッション管理部８４５は、最後の世代を削除するか否かを判定する（ステップＳ８２）。最後の世代を削除すると判定した場合（ステップＳ８２；Ｙｅｓ）、セッション管理部８４５は、最新世代ビットマップ７１および集約ビットマップ３１を解放し（ステップＳ８３）、ステップＳ９１に移行する。
【００８９】
一方、最後の世代を削除しないと判定した場合（ステップＳ８２；Ｎｏ）、セッション管理部８４５は、削除する世代のＬＢＡ変換テーブル３２を読み込み、論理ＬＢＡを先頭の論理ＬＢＡに設定する（ステップＳ８４）。続いて、セッション管理部８４５は、設定した論理ＬＢＡに対応する物理ＬＢＡが初期値であるか否かを判定する（ステップＳ８５）。設定した論理ＬＢＡに対応する物理ＬＢＡが初期値であると判定した場合（ステップＳ８５；Ｙｅｓ）、セッション管理部８４５は、削除する世代を含む集約世代のビットをそのままにすべく、ステップＳ８９に移行する。
【００９０】
一方、設定した論理ＬＢＡに対応する物理ＬＢＡが初期値でないと判定した場合（ステップＳ８５；Ｎｏ）、セッション管理部８４５は、該当する集約世代に含まれる他の世代のＬＢＡ変換テーブル３２を読み込む（ステップＳ８６）。そして、セッション管理部８４５は、設定した論理ＬＢＡに対応する物理ＬＢＡについて、初期値以外の世代が１つ以上あるか否かを判定する（ステップＳ８７）。
【００９１】
初期値以外の世代が１つ以上あると判定した場合（ステップＳ８７；Ｙｅｓ）、セッション管理部８４５は、該当する集約世代のビットをそのままにすべく、ステップＳ８９に移行する。一方、初期値以外の世代が１つ以上ないと判定した場合（ステップＳ８７；Ｎｏ）、セッション管理部８４５は、該当する集約世代のビットをコピー済みでないことを示す「１」に更新し（ステップＳ８８）、ステップＳ８９に移行する。
【００９２】
続いて、セッション管理部８４５は、論理ＬＢＡを次の論理ＬＢＡに設定する（ステップＳ８９）。そして、セッション管理部８４５は、設定した論理ＬＢＡが最終の論理ＬＢＡを超えたか否かを判定する（ステップＳ９０）。
【００９３】
設定した論理ＬＢＡが最終の論理ＬＢＡを超えていないと判定した場合（ステップＳ９０；Ｎｏ）、セッション管理部８４５は、設定した論理ＬＢＡに対応する物理ＬＢＡをチェックすべく、ステップＳ８５に移行する。一方、設定した論理ＬＢＡが最終の論理ＬＢＡを超えていると判定した場合（ステップＳ９０；Ｙｅｓ）、セッション管理部８４５は、削除する世代のＬＢＡ変換テーブル３２を解放する（ステップＳ９１）。そして、セッション管理部８４５は、削除する世代のセッション管理テーブル７２を削除する（ステップＳ９２）。そして、セッション管理部８４５は、スナップショットの削除を終了する。
【００９４】
なお、集約ビットマップ３１は、コピー先ボリュームへの集約世代毎のコピーの有無を論理ＬＢＡに対応付けて記憶するものとして説明した。集約世代は、複数世代を一括りにした世代である。しかしながら、集約ビットマップ３１は、集約世代を１世代に代えて、コピー先ボリュームへの１世代毎のコピーの有無を論理ＬＢＡに対応付けて記憶するものとしても良い。ここで、実施例１に係る集約ビットマップ３１Ａのデータ構造の変形例について、図１４を参照して説明する。
【００９５】
図１４は、実施例１に係る集約ビットマップのデータ構造の変形例を示す図である。図１４に示すように、コピー先ボリュームへの１世代毎のコピーの有無を論理ＬＢＡに対応付けて記憶する。例えば、符号ａ２のように、対象領域がＬＢＡ０ｘ００００００００（１６進数）である場合、コピーの有無を「０１１０１１１１１・・・」と記憶する。すなわち、世代１のコピーの有無が、コピー済みであることを示す「０」を記憶し、世代２のコピーの有無が、コピー済みでないことを示す「１」を記憶している。
【００９６】
［実施例１の効果］
上記実施例１によれば、ストレージ装置２は、コピー元ボリュームの論理ＬＢＡのデータについて、コピー先ボリュームへの世代毎のコピーの有無を論理ＬＢＡに対応付けてドライブ３の集約ビットマップ３１に記憶する。そして、ストレージ装置２は、コピー先ボリュームへの読み込み要求を受信すると、集約ビットマップ３１に記憶された、論理ＬＢＡに対応付けられた世代毎のコピーの有無を用いて、読み込み要求された論理ＬＢＡにアクセスする。かかる構成によれば、ストレージ装置２は、コピー先ボリュームへの世代毎のコピーの有無を論理ＬＢＡに対応付けて集約ビットマップ３１に記憶しているので、読み込み要求がされた論理ＬＢＡに対応付けられた世代毎のコピーの有無を纏めて読み込める。このため、ストレージ装置２は、読み込み要求がされた対象世代がコピー無しの場合であっても、コピー有りの世代を高速に検索できる。すなわち、ストレージ装置２は、論理ＬＢＡ毎のコピーの有無を世代に対応付けた従来のコピービットマップの場合と比べて、ドライブ３へのアクセス回数を減少させるので、コピー有りの世代を高速に検索できる。この結果、ストレージ装置２は、コピー先ボリュームへの読み込み性能を向上させることができる。
【００９７】
また、上記実施例１によれば、ストレージ装置２は、コピー元ボリュームの論理ＬＢＡのデータについて、複数世代を一括りにしたコピー先ボリュームへのコピーの有無を論理ＬＢＡに対応付けてドライブ３の集約ビットマップ３１に記憶する。そして、ストレージ装置２は、集約ビットマップ３１に記憶された、論理ＬＢＡに対応付けられた複数世代毎のコピーの有無を用いて、読み込み要求がされた論理ＬＢＡにアクセスする。かかる構成によれば、ストレージ装置２は、複数世代を一括りにしたコピー先ボリュームへのコピーの有無を論理ＬＢＡに対応付けて記憶しているので、読み込み要求がされた論理ＬＢＡに対応付けられた複数世代毎のコピーの有無を纏めて読み込める。このため、ストレージ装置２は、読み込み要求がされた対象世代を含む複数世代のコピーの有無がコピー無しの場合であっても、コピー有りの複数世代を高速に検索できる。すなわち、ストレージ装置２は、論理ＬＢＡ毎のコピーの有無を世代に対応付けた従来のコピービットマップの場合と比べて、ドライブ３へのアクセス回数を減少させるので、コピー有りの世代を有する複数世代を高速に検索できる。
【００９８】
また、上記実施例１によれば、ストレージ装置２は、コピー元ボリュームの論理ＬＢＡに対するコピー先ボリュームの物理ＬＢＡを世代毎にドライブ３のＬＢＡ変換テーブル３２に記憶する。そして、ストレージ装置２は、集約ビットマップ３１に記憶された論理ＬＢＡに対応する情報から、読み込み要求された対象世代を含むコピーの有無を検索し、検索したコピーの有無に基づいてコピーが有るか否かを判定する。そして、ストレージ装置２は、コピーが有ると判定した場合、対象世代のＬＢＡ変換テーブル３２から、読み込み要求された論理ＬＢＡに対する物理ＬＢＡを読み込み、読み込んだ物理ＬＢＡが初期値でない場合には、該物理ＬＢＡからデータを読み込む。一方、ストレージ装置２は、読み込んだ物理ＬＢＡが初期値である場合には、コピーが有ると判定された複数世代のうち対象世代と異なる世代についてデータの読み込みを実行する。かかる構成によれば、ストレージ装置２は、読み込み要求がされた対象世代を含む複数世代のいずれかがコピー有りの場合、対象世代にコピーが無くても、複数世代のいずれかよりデータを読み込めるので、データを読み込める世代の範囲を早期に限定できる。
【００９９】
また、上記実施例１によれば、ストレージ装置２は、読み込み要求により指定された世代が最新世代であり、最新世代のコピーが無いと判定された場合は、コピー元ボリュームに対してアクセスを行う。かかる構成によれば、ストレージ装置２は、最新世代のコピーがない場合であっても、最新世代のコピー元ボリュームのデータをコピー先ボリュームのデータとして検索できるので、コピー先ボリュームへの読み込み性能を向上させることができる。
【０１００】
また、上記実施例１によれば、ストレージ装置２は、コピー先ボリュームへの書き込み要求を受信すると、書き込み要求された世代のＬＢＡ変換テーブル３２から取得した物理アドレスが初期値である場合、前記コピー先ボリュームにおける当該世代の空き領域に書き込み要求されたデータを書き込む。そして、ストレージ装置２は、さらに、集約ビットマップ３１の該世代に対応するコピーの有無に関係する情報にコピー有りの情報を書き込む。かかる構成によれば、ストレージ装置２は、書き込み要求された世代について、データを書き込むと、集約ビットマップ３１の該世代に対応するコピーの有無に関係する情報にコピー有りの情報を書き込む。この結果、ストレージ装置２は、次回、該世代と同じ括りの世代についてコピー先ボリュームへの読み込み要求を受信すると、集約ビットマップ３１を利用した読み込みをすることができ、該世代と同じ括りの世代のデータを高速に検索できる。
【０１０１】
また、ストレージ装置２では、ドライブ３をＳＳＤまたはＨＤＤとした。かかる構成によれば、ストレージ装置２は、世代を増やす場合であっても、メモリの場合と異なり、容量の不足から世代を増やすことが困難となるという問題を防止できる。
【実施例２】
【０１０２】
ところで、実施例１に係るストレージ装置２では、集約ビットマップ３１が、コピー先ボリュームへの集約世代毎のコピーの有無を論理ＬＢＡに対応付けて記憶する場合を説明した。しかしながら、ストレージ装置２では、これに限定されず、集約ビットマップ３１Ｂが、コピー先ボリュームへの論理ＬＢＡ毎のコピーの有無を集約世代に対応付けて記憶するようにしても良い。
【０１０３】
そこで、実施例２では、集約ビットマップ３１Ｂが、コピー先ボリュームへの論理ＬＢＡ毎のコピーの有無を集約世代に対応付けて記憶する場合について説明する。
【０１０４】
［実施例２に係るストレージ装置の構成］
実施例２に係るストレージ装置２の構成を示す機能ブロック図は、図１に示すストレージ装置２と同様であるので、その重複する構成および動作の説明については省略する。実施例１と実施例２とが異なるところは、集約ビットマップ３１Ｂのデータ構造を変更した点にある。
【０１０５】
図１５は、実施例２に係る集約ビットマップのデータ構造を示す図である。図１５に示すように、集約ビットマップ３１Ｂは、コピー先ボリュームへの論理ＬＢＡ毎のコピーの有無を集約世代に対応付けて記憶する。ここでは、「０」は、コピー元ボリュームの対象領域のデータが複数世代のいずれかのコピー先ボリュームへコピー済みであることを示すビット値である。「１」は、コピー元ボリュームの対象領域のデータがいずれの複数世代のコピー先ボリュームにもコピー済みでないことを示すビット値である。例えば、４世代を一括りにした世代１から世代４までの集約世代の場合、コピー先ボリュームへのコピーの有無を「０１１０１１１１１・・・」と記憶する。そして、対象領域である論理ＬＢＡが「０ｘ００００００００」である場合、対象領域のデータがコピー済みであることを示す「０」を記憶している。対象領域である論理ＬＢＡが「０ｘ００００００１０」である場合、対象領域のデータがコピー済みでないことを示す「１」を記憶している。
【０１０６】
なお、論理ＬＢＡは、１６ブロック（８キロバイト（ＫＢ））を１単位とする。また、集約ビットマップ３１Ｂは、集約世代に最新世代の情報を反映させないものとする。最新世代の情報として最新世代ビットマップ７１が存在するからである。しかしながら、集約ビットマップ３１Ｂは、これに限定されず、集約世代に最新世代の情報を反映させるようにしても良い。
【０１０７】
また、図１５の例では、集約ビットマップ３１Ｂは、１つの集約世代を４世代毎に括るものとして説明したが、４世代毎に限らず、例えば３世代毎に括っても良いし、５世代毎に括っても良い。
【０１０８】
図１におけるコピー先読込部８４３は、ホスト１からコピー先ボリュームへの読み込み要求を受信すると、集約ビットマップ３１から、当該要求の行われた対象世代を含む集約世代のコピーの有無を読み込む。そして、コピー先読込部８４３は、読み込んだ集約世代に関わるコピーの有無から、当該要求の行われた対象領域である論理ＬＢＡに対応するコピーの有無を取得する。
【０１０９】
また、コピー先読込部８４３は、コピーの有無がコピー済みである場合、対象世代におけるＬＢＡ変換テーブル３２から、対象領域である論理ＬＢＡに対する物理領域のアドレスを読み込む。そして、コピー先読込部８４３は、対象世代について、読み込んだアドレスが初期値でない場合には、当該アドレスが指すデータを読み込む。また、コピー先読込部８４３は、対象世代について、読み込んだアドレスが初期値である場合には、コピー済みであると判定された集約世代に含まれる対象世代と異なる世代について、対象世代の場合の処理と同様に、データの読み込みを実行する。
【０１１０】
また、コピー先読込部８４３は、コピーの有無がコピー済みでない場合、順次異なる世代を検索すべく、集約ビットマップ３１から、次の集約世代のコピーの有無を読み込む。そして、コピー先読込部８４３は、読み込んだコピーの有無を用いて、対象世代を含む集約世代の場合の処理と同様に、データの読み込みを実行する。
【０１１１】
また、コピー先読込部８４３は、読み込んだデータをホスト１へ転送する。なお、集約ビットマップ３１Ｂの集約世代に最新世代の情報を反映させない場合には、コピー先読込部８４３は、最新世代の１つ前の世代を含む集約世代までを検索対象とする。そして、コピー先読込部８４３は、最新世代の１つ前の世代を含む集約世代がコピー済みでない場合には、最新世代ビットマップ７１を用いて、対象領域である論理ＬＢＡに対応するコピーの有無を参照するようにすれば良い。
【０１１２】
［実施例２の効果］
上記実施例２によれば、ストレージ装置２は、コピー元ボリュームの論理ＬＢＡのデータについて、コピー先ボリュームへの論理ＬＢＡ毎のコピーの有無を、複数世代を一括りにした世代情報に対応付けてドライブ３の集約ビットマップ３１Ｂに記憶する。そして、ストレージ装置２は、コピー先ボリュームへの読み込み要求を受信すると、集約ビットマップ３１Ｂに記憶された世代情報に対応付けられたコピーの有無を用いて、読み込み要求がされた論理ＬＢＡにアクセスする。かかる構成によれば、ストレージ装置２は、複数世代を一括りにした論理ＬＢＡ毎のコピーの有無を集約ビットマップ３１Ｂから読み込む。このため、ストレージ装置２は、読み込み要求がされた対象世代がコピー無しの場合であっても、コピー有りの世代を高速に検索できる。つまり、論理ＬＢＡ毎のコピーの有無を世代に対応付けた従来のコピービットマップでは、対象世代がコピー無しの場合、さらに次の世代の情報をコピービットマップから読み込むこととなる。したがって、ストレージ装置２は、従来のコピービットマップと比較して、集約ビットマップ３１Ｂの読み込み回数を１／（一括りにした複数世代の数）にすることができるので、コピー有りの世代を高速に検索できる。この結果、ストレージ装置２は、コピー先ボリュームへの読み込み性能を向上させることができる。
【０１１３】
［その他］
なお、図示したストレージ装置２の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、ストレージ装置２の分散・統合の具体的態様は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。例えば、コピー元読込部８４１とコピー元書込部８４２とを１つの部として統合しても良い。また、コピー先読込部８４３とコピー先書込部８４４とを１つの部として統合しても良い。また、コピー先読込部８４３を集約世代の情報から対象領域に対応するコピーの有無を検索する第１の検索部と、最新世代の情報から対象領域に対応するコピーの有無を検索する第２の検索部とに分散しても良い。また、記憶部７をＣＭ５の外部装置としてネットワーク経由で接続するようにしても良い。
【０１１４】
また、ＣＭ５にて行われる各処理機能は、その全部または任意の一部が、ＣＰＵ（またはＭＰＵ、ＭＣＵ（Micro  Controller  Unit）等のマイクロ・コンピュータ）あるいは、ワイヤードロジックによるハードウェアとして実現されても良い。また、制御部８にて行われる各処理機能は、その全部または任意の一部が、ＣＰＵ（またはＭＰＵ、ＭＣＵなどのマイクロ・コンピュータ）にて解析実行されるプログラムにて実現されても良い。
【０１１５】
以上の実施例に係る実施形態に関し、さらに以下の付記を開示する。
【０１１６】
（付記１）コピー元ボリュームに記憶されたコピー元データを、コピー先ボリュームにコピーし、コピーされたデータを世代単位で管理するストレージ装置において、
コピーの有無を示す情報が世代単位で前記コピー先ボリュームの論理アドレスに対応付けて記憶されるコピー有無記憶部と、
前記論理アドレスに対応する前記コピー先ボリュームの物理アドレスが世代単位で記憶されるアドレス記憶部と、
前記コピー先ボリュームへのアクセス要求を受信した場合に、前記コピー有無記憶部に記憶された前記コピーの有無を示す情報を用いて前記アクセス要求された論理アドレスのコピーの有無を判定し、判定結果に基づいて指定される世代の前記アドレス記憶部から取得した前記コピー先ボリュームの物理アドレスに対してアクセスを行うアクセス部と
を備えることを特徴とするストレージ装置。
【０１１７】
（付記２）前記コピー有無記憶部には、コピーの有無に関係する情報が複数世代を一括りにした世代単位で前記コピー先ボリュームの各論理アドレスに対応付けて記憶される
ことを特徴とする付記１に記載のストレージ装置。
【０１１８】
（付記３）前記アクセス部は、前記コピー先ボリュームへの読み出し要求を受信した場合に、
前記コピー有無記憶部に記憶された前記コピーの有無に関係する情報を用いて前記アクセス要求により指定された世代の論理アドレスのコピーの有無を判定し、コピー有りと判定された場合に、当該世代の前記アドレス記憶部から取得した前記コピー先ボリュームの物理アドレスに対してアクセスを行い、取得した物理アドレスが初期値である場合に、コピー有りと判定された他の世代の中から選択された前記アドレス記憶部から取得した前記コピー先ボリュームの物理アドレスに対してアクセスを行う
ことを特徴とする付記１または付記２に記載のストレージ装置。   
【０１１９】
（付記４）前記アクセス部は、前記読み出し要求により指定された世代が最新世代であり、最新世代のコピーが無いと判定された場合は、前記コピー元ボリュームに対してアクセスを行う
ことを特徴とする付記３に記載のストレージ装置。 
【０１２０】
（付記５）前記アクセス部は、前記コピー先ボリュームへの書き込み要求を受信した場合に、前記書き込み要求された世代の前記アドレス記憶部から取得した物理アドレスが初期値である場合に、前記コピー先ボリュームにおける当該世代の空き領域に前記書き込み要求されたデータを書き込むとともに、前記コピー有無記憶部の該世代に対応する前記コピーの有無に関係する情報にコピー有りの情報を書き込む
ことを特徴とする付記１または付記２に記載のストレージ装置。
【０１２１】
（付記６）前記コピー有無記憶部および前記アドレス記憶部は、ＳＳＤ（Solid  State  Drive）またはＨＤＤ（Hard  Disk  Drive）に記憶されることを特徴とする付記１から付記５のいずれか１つに記載のストレージ装置。
【０１２２】
（付記７）コピー元ボリュームに記憶されたコピー元データを、コピー先ボリュームにコピーし、コピーされたデータを世代単位で管理するストレージ装置において、
前記コピー元ボリュームの各領域のデータについて、前記コピー先ボリュームへの領域毎のコピーの有無を、複数世代を一括りにした世代情報に対応付けて記憶するコピー有無記憶部と、
前記コピー先ボリュームへのアクセス要求を受信した場合に、前記コピー有無記憶部に記憶された世代情報に対応付けられたコピーの有無を用いて、アクセスが要求された領域のデータにアクセスするアクセス部と
を備えることを特徴とするストレージ装置。
【０１２３】
（付記８）コピー元ボリュームに記憶されたコピー元データを、コピー先ボリュームにコピーし、コピーされたデータを世代単位で管理するストレージ装置のストレージ制御装置において、
コピーの有無を示す情報が世代単位で前記コピー先ボリュームの論理アドレスに対応付けて記憶されるコピー有無記憶部と、
前記論理アドレスに対応する前記コピー先ボリュームの物理アドレスが世代単位で記憶されるアドレス記憶部と、
前記コピー先ボリュームへのアクセス要求を受信した場合に、前記コピー有無記憶部に記憶された前記コピーの有無を示す情報を用いて前記アクセス要求された論理アドレスのコピーの有無を判定し、判定結果に基づいて指定される世代の前記アドレス記憶部から取得した前記コピー先ボリュームの物理アドレスに対してアクセスを行うアクセス部と
を備えることを特徴とするストレージ制御装置。
【０１２４】
（付記９）コピー元ボリュームに記憶されたコピー元データを、コピー先ボリュームにコピーし、コピーされたデータを世代単位で管理するストレージ装置によって実行されるコピー先データアクセス方法であって、
前記コピー先ボリュームへのアクセス要求を受信した場合に、コピーの有無を示す情報が世代単位で前記コピー先ボリュームの論理アドレスに対応付けて記憶されるコピー有無記憶部に記憶された前記コピーの有無を示す情報を用いて、前記アクセス要求された論理アドレスのコピーの有無を判定し、
前記判定する処理に応じた判定結果に基づいて指定される世代の、前記論理アドレスに対応する前記コピー先ボリュームの物理アドレスが世代単位で記憶されるアドレス記憶部から取得した前記コピー先ボリュームの物理アドレスに対してアクセスを行う
各処理を実行するコピー先データアクセス方法。
【符号の説明】
【０１２５】
１  ホスト
２  ストレージ装置
３  ドライブ
３１  集約ビットマップ
３２  ＬＢＡ変換テーブル
４  ＣＡ
５  ＣＭ
６  ＤＡ
７  記憶部
７１  最新世代ビットマップ
７２  セッション管理テーブル
７３  エレメント管理テーブル
８  制御部
８１  チャネル制御部
８２  キャッシュ制御部
８３  ドライブ制御部
８４  コピー制御部
８４１  コピー元読込部
８４２  コピー元書込部
８４３  コピー先読込部
８４４  コピー先書込部
８４５  セッション管理部
【図１】
0005776474.tif 000002
【図２】
0005776474.tif 000003
【図３】
0005776474.tif 000004
【図４】
0005776474.tif 000005
【図５】
0005776474.tif 000006
【図６】
0005776474.tif 000007
【図７】
0005776474.tif 000008
【図８】
0005776474.tif 000009
【図９】
0005776474.tif 000010
【図１０Ａ】
0005776474.tif 000011
【図１０Ｂ】
0005776474.tif 000012
【図１１】
0005776474.tif 000013
【図１２】
0005776474.tif 000014
【図１３】
0005776474.tif 000015
【図１４】
0005776474.tif 000016
【図１５】
0005776474.tif 000017
【図１６】
0005776474.tif 000018
【図１７】
0005776474.tif 000019