(57)【要約】  本発明の一観点に係る仮想ストレージシステムは、論理ボリュームに対する読み書き要求を受け付けるストレージコントローラと複数の記憶装置とを有するストレージシステムを複数有する。ストレージシステムは、論理ボリュームに記憶領域を割り当て可能な前記記憶装置を管理するプールを定義し、プールに属する前記記憶領域の容量（プール容量）と、プール内の未使用記憶領域の容量（プール空き容量）を管理する。さらにストレージシステムは、仮想ストレージシステムに含まれる複数のストレージシステムのプール空き容量の合計値を算出し、この合計値を仮想ストレージシステムのプール空き容量としてサーバに提供する。
2017149581.tif 000002
【特許請求の範囲】
【請求項１】
論理ボリュームに対する読み書き要求を受け付けるストレージコントローラと、前記論理ボリュームに対してサーバから書き込まれたデータを格納するための複数の記憶装置、とを有するストレージシステムを複数有する、仮想ストレージシステムにおいて、
前記ストレージシステムは、
前記複数の記憶装置のうち、前記論理ボリュームに記憶領域を割り当て可能な前記記憶装置を管理するプールを定義し、
前記プールに属する前記記憶領域の容量であるプール容量と、前記プールに属する前記記憶領域のうち、まだ前記論理ボリュームに割り当てられていない記憶領域の容量であるプール空き容量を管理するよう構成されており、
前記ストレージシステムはまた、前記仮想ストレージシステムに含まれる複数の前記ストレージシステムのプール空き容量の合計値を、前記仮想ストレージシステムのプール空き容量として、前記サーバに提供する、
ことを特徴とする、仮想ストレージシステム。
【請求項２】
前記ストレージシステムは、前記仮想ストレージシステムに含まれる複数の前記各ストレージシステムのプール容量の合計値を、前記仮想ストレージシステムのプール容量として、前記サーバに提供する、
ことを特徴とする、請求項１に記載の仮想ストレージシステム。
【請求項３】
前記ストレージシステムは、前記仮想ストレージシステムに、前記ストレージシステムが追加されると、
追加された前記ストレージシステムのプール容量を前記仮想ストレージシステムのプール空き容量に加算することで前記仮想ストレージシステムのプール空き容量を再計算し、
前記再計算されたプール空き容量を前記サーバに通知する、
ことを特徴とする、請求項１に記載の仮想ストレージシステム。
【請求項４】
前記各ストレージシステムは、前記追加されたストレージシステムのプール容量に基づいて、前記各ストレージシステムが有する前記論理ボリュームの中から、前記追加されたストレージシステムへの移行対象の論理ボリュームを選択し、
前記追加されたストレージシステムに、前記移行対象の論理ボリュームの情報を通知し、
前記通知を受領した、前記追加されたストレージシステムは、前記移行対象の論理ボリュームのデータを、前記追加されたストレージシステムに定義された移行先論理ボリュームに移動する、
ことを特徴とする、請求項３に記載の仮想ストレージシステム。
【請求項５】
前記追加されたストレージシステムは、前記移行対象の論理ボリュームから前記移行先論理ボリュームへデータ移動中に、
前記サーバから、前記移行対象の論理ボリュームまたは前記移行先論理ボリュームへのアクセス要求を受け付け可能に構成されている、
ことを特徴とする、請求項４に記載の仮想ストレージシステム。
【請求項６】
前記ストレージシステムは、前記移行対象の論理ボリューム及び前記移行先論理ボリュームとがマップされた仮想論理ボリュームを定義可能で、
前記ストレージシステムは、前記サーバから前記仮想論理ボリュームに対するアクセス要求を受け付けると、
前記アクセス要求が、前記移行対象の論理ボリュームから前記移行先論理ボリュームへデータ移動済みの領域に対する要求の場合、前記移行先論理ボリュームにアクセスし、
前記アクセス要求が、前記移行対象の論理ボリュームから前記移行先論理ボリュームにまだデータ移動が行われていない領域に対する要求の場合、前記移行対象の論理ボリュームにアクセスする、
ことを特徴とする、請求項５に記載の仮想ストレージシステム。
【請求項７】
前記ストレージシステムは、前記論理ボリューム上の領域をページ単位に分割して管理しており、
前記ストレージシステムは、前記論理ボリューム上のページに対する書き込み要求を受け付けた時点で、前記プール内の記憶領域を前記ページに割り当てるように構成されており、
前記ストレージシステムが前記ページに前記プール内の記憶領域を割り当てる際に、前記ストレージシステムのプールに未割り当ての記憶領域が存在しない場合、前記仮想ストレージシステムに属する他の前記ストレージシステムのプールの未割り当て記憶領域を割り当てる、
ことを特徴とする、請求項１に記載の仮想ストレージシステム。
【請求項８】
前記ストレージシステムは、前記記憶装置の寿命に基づいて、前記ストレージシステムが有する前記論理ボリュームの中から移行対象の論理ボリュームを選択し、
前記仮想ストレージシステム内の他の前記ストレージシステムに、前記選択された論理ボリュームを移動する、
ことを特徴とする、請求項１に記載の仮想ストレージシステム。
【請求項９】
前記各ストレージシステムは、前記記憶装置の寿命に基づいて、前記各ストレージシステムが有する前記論理ボリュームの中から、前記追加されたストレージシステムへの移行対象の論理ボリュームを選択し、
前記追加されたストレージシステムに、前記移行対象の論理ボリュームの情報を通知し、
前記通知を受領した、前記追加されたストレージシステムは、前記移行対象の論理ボリュームのデータを、前記追加されたストレージシステムに定義された移行先論理ボリュームに移動する、
ことを特徴とする、請求項３に記載の仮想ストレージシステム。
【請求項１０】
論理ボリュームに対する読み書き要求を受け付けるストレージコントローラと、前記論理ボリュームに対してサーバから書き込まれたデータを格納するための複数の記憶装置、とを有するストレージシステムを複数有する、仮想ストレージシステムの制御方法であって、
前記ストレージシステムが、
前記複数の記憶装置のうち、前記論理ボリュームに記憶領域を割り当て可能な前記記憶装置を管理するプールを定義する工程と、
前記プールに属する前記記憶領域の容量であるプール容量と、前記プールに属する前記記憶領域のうち、まだ前記論理ボリュームに割り当てられていない記憶領域の容量であるプール空き容量を管理する工程と、
前記仮想ストレージシステムに含まれる複数の前記ストレージシステムのプール空き容量の合計値を、前記仮想ストレージシステムのプール空き容量として、前記サーバに提供する工程と、
を実行することを特徴とする、仮想ストレージシステムの制御方法。
【請求項１１】
前記仮想ストレージシステムに属している前記ストレージシステムが、前記仮想ストレージシステムに、前記ストレージシステムが追加された時に、
追加された前記ストレージシステムのプール容量を前記仮想ストレージシステムのプール空き容量に加算することで前記仮想ストレージシステムのプール空き容量を再計算する工程と、
前記再計算されたプール空き容量を前記サーバに通知する工程と、
を実行することを特徴とする、請求項１０に記載の仮想ストレージシステムの制御方法。
【請求項１２】
前記ストレージシステムは、前記論理ボリューム上の領域であるページに対する書き込み要求を受け付けた時点で、前記プール内の記憶領域を前記ページに割り当てるように構成されており、
前記ページに前記プール内の記憶領域を割り当てる際に、前記ストレージシステムのプールに未割り当ての記憶領域が存在しない場合、前記仮想ストレージシステムに属する他の前記ストレージシステムのプールの未割り当て記憶領域を割り当てる工程を実行する、
ことを特徴とする、請求項１０に記載の仮想ストレージシステムの制御方法。
【請求項１３】
複数の記憶装置とプロセッサとを有するコンピュータの前記プロセッサに、
サーバが読み書き要求を発行する対象である論理ボリュームを定義する工程と、
前記複数の記憶装置のうち、前記論理ボリュームに記憶領域を割り当て可能な前記記憶装置を管理するプールを定義する工程と、
前記プールに属する前記記憶領域の容量であるプール容量と、前記プールに属する前記記憶領域のうち、まだ前記論理ボリュームに割り当てられていない記憶領域の容量であるプール空き容量を管理する工程と、
前記コンピュータに加え、他の１以上のコンピュータを有する仮想ストレージシステム内にある、各コンピュータが定義する前記プールのプール空き容量の合計値を算出する工程と、
前記プール空き容量の合計値を前記仮想ストレージシステムのプール空き容量として、前記サーバに提供する工程と、
を実行させるプログラムを記録した、コンピュータ読み取り可能な記憶媒体。
【請求項１４】
前記プログラムはさらに、
前記仮想ストレージシステムに、前記コンピュータが追加された時に、
追加された前記コンピュータのプール容量を前記仮想ストレージシステムのプール空き容量に加算することで前記仮想ストレージシステムのプール空き容量を再計算する工程と、
前記再計算されたプール空き容量を前記サーバに通知する工程と、
を前記プロセッサに実行させる、請求項１３に記載のコンピュータ読み取り可能な記憶媒体。
【請求項１５】
前記プログラムはさらに、
前記論理ボリューム上の領域であるページに対する書き込み要求を受け付けた時点で、前記プール内の記憶領域を前記ページに割り当てる工程、
を前記プロセッサに実行させるプログラムであって、
前記割り当てる工程は、前記コンピュータのプールに未割り当ての記憶領域が存在しない場合、前記仮想ストレージシステムに属する他の前記コンピュータのプールの未割り当て記憶領域を割り当てる工程を有する、
請求項１３に記載のコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムに関する。
【背景技術】
【０００２】
企業等の組織で取り扱われる電子情報の急増に伴い、組織の情報システムには多くのストレージシステムが導入され、運用されている。ストレージシステムの拡張性を高め、また管理を容易化するための技術として、仮想化技術がある。【０００３】
たとえば特許文献１では、“仮想ストレージ”と呼ばれる技術が開示されている。仮想ストレージは複数の実ストレージから構成され、それぞれの実ストレージは、仮想ストレージ識別子と実ストレージ識別子をもつ。仮想ストレージ識別子は、仮想ストレージを構成する実ストレージが共通にもつ識別子であり、実ストレージ識別子は、仮想ストレージを構成するそれぞれの実ストレージ固有の識別子である。仮想ストレージでは、サーバが読み書きする際に指定する論理ボリュームであるLU(Logical  Unit)に関しても、仮想LUN（Logical  Unit  Number）と実LUNが存在する。仮想LUNは、仮想ストレージ内でユニークな識別番号であり、実LUNは、実ストレージ内でユニークな識別番号である。仮想ストレージの特徴は、例えば、複数の実ストレージを見かけ上、巨大な単一の仮想的なシステムとして扱うことができる。また、旧いストレージを新しいストレージに置き換えた場合、実ストレージ識別子は変更されるが、旧いストレージと新しいストレージの両方が、同じ仮想ストレージ識別子を有するようにすると、サーバはストレージが置き換えられたことを認識しない。そのため、業務を中断することなく、ストレージの置き換えを行うことができる。【０００４】
さらに、特許文献１では、‘容量の仮想化’と呼ばれる技術の開示を行っている。容量の仮想化は、シン・プロビジョニングとも呼ばれる。容量の仮想化機能では、ストレージシステムはプールと呼ばれる比較的大容量の記憶領域を定義し、この記憶領域をページと呼ばれる区画に分割する。そしてストレージシステムは、論理ボリュームの定義時には記憶領域を確保せず、実際に論理ボリュームへの書き込みが発生した時に、該当する領域にページを割り当てる。初期状態では論理ボリュームに書き込まれるデータ量は多くないことが多いため、容量の仮想化機能を用いることにより、あらかじめ用意しておくべき記憶領域を削減できる。また、記憶領域を割り当てる契機が、書込みが発生した契機であるため、ストレージシステムのユーザ（管理者）は論理ボリュームの容量を厳密に計算する必要がなく、比較的大きい容量を定義すればよいので、管理コストも低減できる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２０１４／１４７６５７号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来、ストレージシステムでは、搭載可能な記憶装置をすべて搭載して出荷するのでなく、顧客が必要とする容量の記憶装置を搭載して、出荷して、容量が不足したときに、必要な容量の記憶装置を追加するという方法がとられていた。しかし、この方法だと保守費用がかかるので、最近では、容量不足が発生したときに、ストレージシステムそのものを情報システムに追加するという方法が注目されている。【０００７】
ストレージシステムのユーザまたは管理者が、容量の追加要否を判断する場合、プールの空き容量（論理ボリュームにまだ割り当てられていないページの量）を１つの判断材料とする。ストレージシステムが複数存在する場合、ストレージシステムごとにプールの空き容量を監視する必要がある。特許文献１に記載の仮想ストレージ技術では、複数のストレージシステムを見かけ上単一のストレージシステムとして扱えるものの、空き容量の監視・管理という点の考慮はない。そのため空き容量の監視は、各ストレージシステムについて行う必要があり、管理を煩雑にするという問題が残る。
【課題を解決するための手段】
【０００８】
本発明の一観点に係る仮想ストレージシステムは、論理ボリュームに対する読み書き要求を受け付けるストレージコントローラと複数の記憶装置とを有するストレージシステムを複数有する。ストレージシステムは、論理ボリュームに記憶領域を割り当て可能な前記記憶装置を管理するプールを定義し、プールに属する前記記憶領域の容量（プール容量）と、プール内の未使用記憶領域の容量（プール空き容量）を管理する。さらにストレージシステムは、仮想ストレージシステムに含まれる複数のストレージシステムのプール空き容量の合計値を算出し、この合計値を仮想ストレージシステムのプール空き容量としてサーバに提供する。
【発明の効果】
【０００９】
本発明の一観点に係る仮想ストレージシステムによれば、複数のストレージシステムから成る仮想ストレージシステムの記憶領域を、単一のストレージシステムの記憶領域として扱うことができ、管理が容易化される。
【図面の簡単な説明】
【００１０】
【図１】実施例１における情報システムの構成を示す図である。
【図２】論理ボリュームとストレージグループの関係を表した図である。
【図３】仮想論理ボリュームと論理ボリュームの関係を表した図である。
【図４】データ移行の概念図である。
【図５】実施例１におけるサーバポート情報の構成を示す図である。
【図６】実施例１におけるストレージシステムの共有メモリに格納された情報を示す図である。
【図７】実施例１におけるストレージシステム情報を示す図である。
【図８】実施例１における他実ストレージシステムの情報の形式を示す図である。
【図９】実施例１における仮想論理ボリューム情報の形式を示す図である。
【図１０】実施例１における論理ボリューム情報の形式を示す図である。
【図１１】実施例１における実ページ情報の形式を示す図である。
【図１２】実施例１におけるストレージグループ情報のフォーマットを示す図である。
【図１３】実施例１における空きページ情報ポインタによって管理される空き実ページの集合を示す図である。
【図１４】実施例１におけるストレージ装置情報のフォーマットを示す図である。
【図１５】実施例１における実ストレージシステムのメモリ上にあるプログラムを示す図である。
【図１６】実施例１におけるリード処理実行部の処理フロー（１）を示す図である。
【図１７】実施例１におけるリード処理実行部の処理フロー（２）を示す図である。
【図１８】実施例１におけるライト要求受付部の処理フロー（１）を示す図である。
【図１９】実施例１におけるライト要求受付部の処理フロー（２）を示す図である。
【図２０】実施例１におけるライトアフタ処理実行部の処理フローを示す図である。
【図２１】実施例１における実ストレージシステム追加処理部の処理フローを示す図である。
【図２２】実施例１におけるコピー処理部の処理フロー（１）を示す図である。
【図２３】実施例１におけるコピー処理部の処理フロー（２）を示す図である。
【図２４】実施例２における他実ストレージシステム情報のフォーマットを示す図である。
【図２５】実施例２におけるストレージグループ情報のフォーマットを示す図である。
【図２６】実施例２におけるリード処理実行部の処理フロー（後半部）を示す図である。
【図２７】実施例２におけるライト要求受付部の処理フロー（後半部）を示す図である。
【図２８】実施例２におけるライトアフタ処理実行部の処理フローを示す図である。
【図２９】実施例２におけるコピー処理部の処理フローを示す図である。
【図３０】変形例におけるシステムウェアレベリング部の処理フローを示す図である。
【発明を実施するための形態】
【００１１】
以下、幾つかの実施例について、図面を用いて説明する。
【００１２】
なお、以下の実施例において、ストレージシステム内で実行される処理について、「プログラム」を主語として説明を行う場合がある。実際には、ストレージシステムが有するプロセッサ（ＣＰＵ）がプログラムを実行することによって、プログラムに記述された処理が行われるため、処理の主体はプロセッサ（ＣＰＵ）である。ただし説明が冗長になることを防ぐため、プログラムを主語にして処理の内容を説明することがある。また、プログラムの一部または全ては専用ハードウェアによって実現されてもよい。また、以下で説明される各種プログラムは、プログラム配布サーバや計算機が読み取り可能な記憶メディアによって提供され、プログラムを実行する各装置にインストールされてもよい。計算機が読み取り可能な記憶メディアとは、非一時的なコンピュータ可読媒体で、例えばＩＣカード、ＳＤカード、ＤＶＤ等の不揮発性記憶媒体である。
【実施例１】
【００１３】
図１は、実施例１における情報システムの構成を示す。情報システムは、一つ以上の実ストレージシステム１００、一つ以上のサーバ１１０、実ストレージシステム１００とサーバ１１０とを接続するSAN（Storage  Area  Network）１２０、ストレージ管理サーバ１８０を有する。サーバ１１０は、サーバポート１９５によって、実ストレージシステム１００は、ストレージポート１９７によって、ＳＡＮ１２０に接続される。サーバ１１０は、一つ以上のサーバポート１９５をもつ。【００１４】
実ストレージシステム１００は、ＳＡＮ１２０に接続される一つ以上のストレージポート１９７と、サーバ１１０からのリードライト要求を実行する１以上のストレージコントローラ２００と、サーバ１１０からのライトデータを格納する複数のストレージ装置１６０と、頻繁にリードライトされるデータを格納するキャッシュ２１０と、制御情報を格納する共有メモリ２２０と、これらの装置を結合する接続機構２５０を含む。【００１５】
ストレージ装置１６０にはいくつかの種類がある。たとえば磁気ディスクを記憶媒体とするＨＤＤ（Hard Disk Drive）や、あるいはフラッシュメモリを記憶媒体として使用するフラッシュストレージが、ストレージ装置１６０として用いられてよい。また、フラッシュストレージに用いられるフラッシュメモリにはいくつかの種類があり、高価格、高性能、消去可能回数の多いSLCとこれに対し、低価格、低性能、消去可能回数の少ないMLCがある。【００１６】
本実施例では、実ストレージシステム１００が有するストレージ装置１６０は、ＨＤＤまたはフラッシュストレージである例を説明する。なお、フラッシュストレージとして、ＳＬＣタイプのフラッシュメモリを用いるものは、「フラッシュストレージ（ＳＬＣ）」と表記し、ＭＬＣタイプのフラッシュメモリを用いるものは、「フラッシュストレージ（ＭＬＣ）」と表記する。ただし別の実施形態として、相変化メモリなどの新しい記憶媒体を用いたストレージ装置１６０が用いられてもよい。【００１７】
サーバ１１０は、パーソナルコンピュータ（ＰＣ）等の汎用の計算機で、サーバポート１９５の他に、プロセッサやメモリ（非図示）を有する。サーバ１１０は、ユーザが使用するアプリケーションプログラム１１００等を実行するための計算機で、SAN１２０経由で、実ストレージシステム１００が提供するボリュームにアクセスする。また、実ストレージシステム１００同士も、互いにＳＡＮ１２０経由で、データの送受信を行う。SAN１２０はSCSIコマンドが転送可能なプロトコルに基づくデータ伝送が可能なネットワークで、例えば、Fibre  Channel等が伝送媒体として用いられる。【００１８】
ストレージコントローラ２００は、サーバ１１０から発行されたリードライト要求を処理するプロセッサ２６０、プログラムや情報を保管するメモリ２７０、そしてバッファ２７５を有する。バッファ２７５は、後述する冗長データを生成する際、生成に必要な情報や、生成した冗長データを格納するために使用される。またバッファ２７５は、キャッシュ２１０に格納されたデータを、恒久的に格納する記憶装置（ストレージ装置１６０）に書き込む際に、一時的なデータの格納領域としても使用される。【００１９】
キャッシュ２１０、共有メモリ２２０は、通常DRAMなどの揮発メモリで構成されるが、バッテリーなどにより不揮発化されているものとする。また、本実施例では、高信頼化のため、キャッシュ２１０、共有メモリ２２０はそれぞれ２重化されており、キャッシュ２１０、共有メモリ２２０に書き込まれるデータはいずれも、少なくとも２つの領域に書き込まれるものとする。ただ、本発明は、キャッシュ２１０、共有メモリ２２０が不揮発化されていなくても、２重化されていなくとも、有効である。【００２０】
キャッシュ２１０には、ストレージ装置１６０に格納されたデータの中で、ストレージコントローラ２００からよくアクセスされるデータが格納される。ストレージコントローラ２００は、サーバ１１０からライト要求を受け付けた時、ストレージ装置１６０に書き込むよう受け取ったデータを、キャッシュ２１０に書き込んだ時点で、ライト要求の完了の通知をサーバ１１０に返却する。キャッシュ２１０に書き込まれたデータは、適当なタイミングでストレージ装置１６０に格納（デステージ）される。ただし別の実施形態として、サーバ１１０から受け取ったデータをストレージ装置１６０に格納した後に、ライト要求の完了の通知をサーバ１１０に返却するようにしてもよい。【００２１】
続いて、本実施例に係る実ストレージシステム１００における、記憶領域の管理方法について説明する。【００２２】
本実施例に係るストレージコントローラ２００は、複数のストレージ装置１６０の中のいずれか１つが故障しても、そのストレージ装置１６０のデータを回復できるRedundant Arrays of Inexpensive/Independent Disks/Device  (RAID)機能を有する。ストレージコントローラ２００は、実ストレージシステム１００が有するストレージ装置１６０のいくつか（たとえば４つ、８つ等）を用いて１つのＲＡＩＤを構成する。ＲＡＩＤを構成するストレージ装置１６０の集合をストレージグループ２１０１と呼ぶ。本実施例に係る実ストレージシステム１００では、１つのストレージグループ２１０１は同一種類のストレージ装置１６０から構成される。なお、ストレージコントローラ２００がＲＡＩＤ機能をもっていなくとも本発明は有効である。【００２３】
さらに、本実施例に係るストレージコントローラ２００は、ストレージグループ２１０１以外の記憶空間として、論理ボリュームと仮想論理ボリュームを定義することができる。まず論理ボリュームについて説明する。ストレージコントローラ２００は論理ボリュームを複数定義可能である。各論理ボリュームには実ストレージシステム１００内で一意な識別番号が付され、これを論理ボリューム識別子（あるいは、論理ボリュームＩＤ）と呼ぶ。【００２４】
本実施例に係る実ストレージシステム１００は、容量仮想化機能を持っている。論理ボリュームは、容量仮想化機能により形成される記憶空間である。論理ボリュームを定義した時点では、論理ボリューム上の各記憶領域に対して書き込まれるデータの格納先は定まっていない。論理ボリュームへのライト要求を受け付けたときにはじめて、ストレージコントローラ２００はライト対象領域（ライト要求で指定されている領域）に書き込まれるデータの格納先を決定する。以下では、ライト対象領域（ライト要求で指定されている領域）に書き込まれるデータの格納先を決定する処理のことを、「割り当てる」と表現する。【００２５】
図２を用いて、論理ボリュームとストレージグループ２１０１の関係について説明する。ストレージコントローラ２００は論理ボリューム（図中の“ＬＶ０”）に割り当てられる記憶領域の管理の為に、論理ボリュームを複数の仮想ページ（図２では、ＶＰ０、ＶＰ１、ＶＰ２）という所定単位の領域に分割して管理している。論理ボリュームに記憶領域を割り当てる際、ストレージコントローラ２００はこの仮想ページ毎に記憶領域を割り当てる。各仮想ページには論理ボリューム内で一意な識別番号が付される。この識別番号を仮想ページ番号と呼ぶ（あるいは「仮想ページ＃」と表記されることもある）。また、仮想ページ番号がｎの仮想ページは、“仮想ページ＃ｎ”と表記される。【００２６】
仮想ページは、ストレージコントローラ２００内部で論理ボリュームの記憶空間の管理のためにのみ用いられる概念である。サーバ１１０は論理ボリュームの記憶領域にアクセスする際には、ＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）などのアドレスを用いて、アクセス対象の記憶領域を特定する。サーバ１１０が論理ボリュームへのアクセス要求を発行した時、ストレージコントローラ２００は、サーバ１１０が指定したＬＢＡを仮想ページ番号及び仮想ページ内の相対アドレス（仮想ページ先頭からのオフセットアドレス）に変換する。この変換は、ＬＢＡを仮想ページサイズで除算することで実現できる。仮に仮想ページのサイズがＰ（ＭＢ）とすると、論理ボリュームの先頭位置からＰ（ＭＢ）分の領域が仮想ページ＃０として管理され、その次のＰ（ＭＢ）分の領域が仮想ページ＃１として管理される。そしてそれ以降も同様に、Ｐ（ＭＢ）の領域がそれぞれ、仮想ページ＃２、＃３…として管理される。【００２７】
ストレージコントローラ２００が論理ボリュームを定義した直後は、各仮想ページに物理記憶領域は割り当てられていない。ストレージコントローラ２００は、サーバ１１０から仮想ページに対するライト要求を受け付けた時点ではじめて、その仮想ページに対して物理記憶領域を割り当てる。仮想ページに割り当てられる物理記憶領域は実ページと呼ばれる。実ページは、ストレージグループ２１０１上の記憶領域である。図２では、仮想ページ＃０（ＶＰ０）に実ページＲＰ０が割り当てられている状態を表している。【００２８】
実ページは、ストレージグループ２１０１の複数のストレージ装置１６０の記憶領域を用いて形成される領域である。図２において、１６０−１，１６０−２，１６０−３，１６０−４はそれぞれ、各ストレージ装置１６０の記憶領域を表している。また、図２で例示しているストレージグループ２１０１のＲＡＩＤタイプは、ＲＡＩＤ４の３Ｄ＋１Ｐ構成（データドライブ３台、パリティドライブ１台で構成されるＲＡＩＤ）である。【００２９】
ストレージコントローラ２００は、ストレージグループ２１０１に属する各ストレージ装置１６０の記憶領域を、ストライプブロックと呼ばれる複数の固定サイズの記憶領域に分割して管理する。たとえば図２において、０（Ｄ），１（Ｄ），２（Ｄ）…、またはＰ０，Ｐ１…と記載されているそれぞれの領域が、ストライプブロックを表している。【００３０】
図２で、ストライプブロックのうち、Ｐ０，Ｐ１…と記載されているストライプブロックは、ＲＡＩＤ機能により生成される冗長データ（パリティ）の格納されるストライプブロックであり、これを「パリティストライプ」と呼ぶ。一方、０（Ｄ），１（Ｄ）、２（Ｄ）…と記載されているストライプブロックは、サーバ１１０から書き込まれるデータ（冗長データではないデータ）が格納されるストライプブロックである。このストライプブロックのことは、「データストライプ」と呼ばれる。パリティストライプには、複数のデータストライプを用いて生成される冗長データが格納される。【００３１】
以下、パリティストライプと、当該パリティストライプに格納される冗長データを生成するために用いられるデータストライプのセットのことを、「ストライプライン」と呼ぶ。本実施例に係る実ストレージシステム１００の場合、たとえばパリティストライプＰ０には、データストライプ０（Ｄ），１（Ｄ），２（Ｄ）を用いて生成される冗長データ（パリティ）が格納される関係にあり、データストライプ０（Ｄ），１（Ｄ），２（Ｄ）とパリティストライプＰ０は、同一のストライプラインに属する。【００３２】
つまり１つのストライプラインに属する各ストライプブロックは、ストレージ装置（１６０−１，１６０−２，１６０−３，１６０−４）上の同じ位置（アドレス）に存在する。ただし別の実施形態として、同一ストライプラインに属する各ストライプブロックが、フラッシュボリューム上の異なるアドレスに存在する構成が採用されてもよい。そして本実施例に係る実ストレージシステム１００では、図２に示されるように、実ページ（たとえばＲＰ０、ＲＰ１）は、１または複数のストライプラインから構成される。【００３３】
またストレージコントローラ２００は、ストレージグループ２１０１の各記憶領域（ブロック）を、一次元のアドレスで特定可能にする記憶空間として管理する。以下ではこの記憶空間を「ストレージグループの記憶空間」と呼び、この記憶空間上のアドレスを「ストレージグループのアドレス」または「ストレージグループアドレス」と呼ぶ。ストレージグループアドレスの例を図２に示す。ストレージグループの記憶空間は図２に示されているように、ストレージグループ２１０１内の各ストライプが、１つずつ順に配置された記憶空間である。ストレージグループ内の先頭のストライプブロックのストレージグループアドレスが０と定められ、以下各ストライプブロックに、たとえば図２に示されるようにアドレスが付される。ストレージグループのアドレスは、実ページとストレージグループ２１０１上の記憶領域の対応関係を管理するために用いられる。【００３４】
また実ページが仮想ページに割り当てられる場合、データストライプ（０（Ｄ），１（Ｄ）等）のみが割り当てられ、パリティストライプは割り当てられない。そのため、実ページ上のライトデータの格納される領域の合計サイズは、仮想ページのサイズと等しい関係にある。つまり、（実ページのサイズーパリティ格納領域のサイズ）＝仮想ページサイズ、の関係にある。図２ではＲＡＩＤ４の構成例についてのみ示されているが、たとえばストレージグループ２１０１のＲＡＩＤタイプがＲＡＩＤ１の場合には、実ページサイズは、仮想ページサイズ（仮想ページ容量２６００）の２倍になる。【００３５】
仮想ページ内の各領域と、実ページ内の各領域との関係（マッピング）は、図２に示されている通りである。つまり、実ページの先頭ストライプからパリティを除いた領域（０（Ｄ）、１（Ｄ）、２（Ｄ））が、仮想ページの先頭領域に割り当てられている。それ以降も同様に、実ページの２番目以降の各ストライプからパリティを除いた領域（３（Ｄ）、４（Ｄ）、５（Ｄ）…）が、順番に仮想ページの領域に割り当てられる。【００３６】
このように、仮想ページ内の各領域と実ページ内の各領域とのマッピングは規則的にマッピングされているため、実ストレージシステム１００は、サーバ１１０からのアクセス要求で指定されている論理ボリューム上のアクセス位置（ＬＢＡ）から仮想ページ番号及び仮想ページ内の相対アドレス（仮想ページ先頭からのオフセットアドレス）を求めることで、当該アクセス位置に対応付けられているストレージ装置１６０及びそのストレージ装置１６０内の領域（データストライプ）を一意に算出できる。さらにアクセス位置に対応付けられているデータストライプに加え、そのデータストライプと同一ストライプラインに属するパリティストライプも一意に定まる。ただし、仮想ページ内の各領域と実ページ内の各領域とのマッピングは、ここで説明したマッピング方法に限定されるものではない。【００３７】
なお、１つの論理ボリューム中の各仮想ページに割り当てられる実ページは、必ずしも同一ストレージグループ２１０１内の実ページに限定されない。仮想ページ＃０に割り当てられる実ページと、仮想ページ＃１に割り当てられる実ページが、それぞれ異なるストレージグループ２１０１内の実ページであってもよい。【００３８】
実ストレージシステム１００は、仮想ページに割り当てられる領域（実ページ）を有するストレージグループ２１０１の集合を定義して管理する。このストレージグループ２１０１の集合を「プール」と呼ぶ。実ストレージシステム１００が仮想ページに実ページを割り当てる際、プールに所属しているストレージグループ２１０１を１つ選択し、そのストレージグループ２１０１の有する実ページを割り当てる。【００３９】
仮想ページに割り当てられる実ページは、まだ他の仮想ページに割り当てられていない実ページでなければならない。仮想ページに割り当てられていない実ページのことを、「空きページ」または「空き実ページ」と呼ぶ。プールに空きページがなくなると、仮想ページへの実ページの割り当てができなくなるため、実ストレージシステム１００はプールの空きページ量を常に管理している。【００４０】
続いて、仮想ストレージシステムと実ストレージシステムの関係、そして仮想論理ボリュームと論理ボリュームの関係について説明する。本実施例に係る情報システムには、一つ以上の実ストレージシステム１００から構成される仮想ストレージシステム１９０が少なくとも一つ存在する。サーバ１１０からは、仮想ストレージシステム１９０が、単一のストレージシステムとして認識される。【００４１】
実ストレージシステム１００は、装置の識別子（実ストレージシステム識別子と呼ばれる）を持つ。この識別子は、各実ストレージシステム１００で異なる。さらに本実施例に係る実ストレージシステム１００は、同じ仮想ストレージシステム１９０に属する各実ストレージシステム１００は、仮想ストレージ識別子と呼ばれる識別子を有する。同じ仮想ストレージシステム１９０に属する各実ストレージシステム１００は、同じ仮想ストレージ識別子を有する。【００４２】
仮想論理ボリュームは、サーバ１１０が認識し、アクセス可能な記憶空間である。仮想論理ボリュームにも論理ボリュームと同様、識別番号が付される。この識別番号は、“仮想論理ボリューム識別子”と呼ばれる。あるいは、仮想論理ボリュームＩＤまたはＶＶＩＤと呼ばれることもある。仮想論理ボリューム識別子は、仮想ストレージシステム１９０内で一意な識別番号である。【００４３】
仮想論理ボリュームは、少なくとも１つの論理ボリュームに対応付けられる（「マップされる」と表現されることもある）。図３に例を示す。図３において、ＶＶ０とＶＶ１は仮想論理ボリュームを表し、ＬＶ１−０及びＬＶ２−０は論理ボリュームを表している。ＬＶ１−０は、実ストレージシステム＃１（１００−１）が有する論理ボリュームで、ＬＶ２−０は実ストレージシステム＃２（１００−１）が有する論理ボリュームである。ＶＶ０は論理ボリュームＬＶ１−０に対応付けられており、ＶＶ１は論理ボリュームＬＶ２−０に対応付けられている。また図３では、仮想論理ボリュームＶＶ０及びＶＶ１は、実ストレージシステム＃１内に定義されている。【００４４】
サーバ１１０がたとえば仮想論理ボリュームＶＶ０に対してＩ／Ｏ要求を発行すると、そのＩ／Ｏ要求を受領した実ストレージシステム（図３では実ストレージシステム＃１（１００−１））は、そのＩ／Ｏ要求を、仮想論理ボリュームＶＶ０に対応付けられている論理ボリュームＬＶ１−０に対するＩ／Ｏ要求に変換する。【００４５】
仮想論理ボリュームのサイズは、仮想論理ボリュームに対応付けられている論理ボリュームのサイズと同じである。また本実施例では、実ストレージシステム１００がサーバ１１０から仮想論理ボリュームのあるアドレス（たとえばアドレスｘ）に対するアクセス要求を受け付けると、実ストレージシステム１００はそのアクセス要求を、仮想論理ボリュームのアドレスｘに対するＩ／Ｏ要求に変換する。【００４６】
仮想論理ボリュームは、仮想論理ボリュームが定義されている実ストレージシステム１００以外の実ストレージシステム１００が有する論理ボリュームに対応付けられてもよい。図３の例では、仮想論理ボリュームＶＶ１は論理ボリュームＬＶ２−０に対応付けられている。その場合サーバ１１０が仮想論理ボリュームＶＶ１に対してＩ／Ｏ要求を発行すると、実ストレージシステム＃１はそのＩ／Ｏ要求を、論理ボリュームＬＶ２−０に対するＩ／Ｏ要求に変換する。具体的には、実ストレージシステム＃１は、実ストレージシステム＃２のＬＶ２−０に対してＩ／Ｏ要求を発行する。【００４７】
このように、本実施例に係る仮想ストレージシステム１９０では、ユーザ（管理者）は仮想論理ボリュームとこの仮想論理ボリュームに対応付けられる論理ボリュームとを、それぞれ異なる実ストレージシステム１００に定義してもよい。そのため、仮想論理ボリュームの定義された実ストレージシステム（図３の例では実ストレージシステム＃１）のプールの空きページ量が不足している場合には、別の実ストレージシステム１００（図３の例では実ストレージシステム＃２）の論理ボリュームを仮想論理ボリュームに対応付けることで、仮想ストレージシステム１９０内のいずれかの実ストレージシステム１００に空きページがあれば、仮想論理ボリュームを定義することができる。【００４８】
また、本実施例に係る仮想ストレージシステム１９０は、仮想ストレージシステム１９０に属する複数の実ストレージシステム１００の有するページ量の合計と空きページ量の合計を、それぞれ仮想ストレージシステム１９０のプールの容量、仮想ストレージシステム１９０のプールの空きページ量として管理し、必要に応じてサーバ１１０またはストレージ管理サーバ１８０に仮想ストレージシステム１９０のプールの容量、仮想ストレージシステム１９０のプールの空きページ量とを通知する機能を有する（正確には、仮想ストレージシステム１９０に属する各実ストレージシステム１００が、仮想ストレージシステム１９０のプールの容量、仮想ストレージシステム１９０のプールの空きページ量を管理する。そして、仮想ストレージシステム１９０に属する任意の実ストレージシステム１００が、サーバ１１０またはストレージ管理サーバ１８０に仮想ストレージシステム１９０のプールの容量、仮想ストレージシステム１９０のプールの空きページ量を通知して良い）。【００４９】
仮想ストレージシステムの概念を持たない従来のストレージシステムが複数存在する情報システムにおいては、各ストレージシステムが自身の空きページ量をサーバ１１０またはストレージ管理サーバ１８０に通知し、ユーザ（または管理者）は、各ストレージシステムの空きページ量をもとに、論理ボリュームを定義する場所（ストレージシステム）を決定する、あるいはストレージシステムの増設の要否を決定する。【００５０】
一方、本実施例に係る仮想ストレージシステム１９０では、仮想ストレージシステム１９０内のいずれかの実ストレージシステム１００に空きページがあれば、（仮想）論理ボリュームを定義可能である。そのため仮想ストレージシステム１９０は、仮想ストレージシステム１９０という、１台の（仮想的な）ストレージシステムのプールの空きページ量だけをユーザ（管理者）に通知し、ユーザ（または管理者）は１台の仮想ストレージシステム１９０のプールの空き容量を監視・把握すればよい。【００５１】
仮想論理ボリュームが定義されている実ストレージシステム１００以外の実ストレージシステム１００が有する論理ボリュームに、仮想論理ボリュームが対応付けられる構成は、実ストレージシステム１００間でデータを移行する場合にも用いられる。図４を参照しながらデータ移行の例を説明する。【００５２】
図４の（ａ）では、実ストレージシステム＃２に仮想論理ボリュームＶＶ１２と、これに対応付けられている論理ボリュームＬＶ２−０が存在する。仮想論理ボリュームＶＶ１２のＶＶＩＤは１である。【００５３】
論理ボリュームＬＶ２−０のデータを実ストレージシステム＃１の論理ボリューム（たとえば論理ボリュームＬＶ１−１）に移行する場合の構成を図４（ｂ）に示す。なお、この時、論理ボリュームＬＶ１−１と論理ボリュームＬＶ２−０のサイズは等しくなければならない。【００５４】
移行の際、実ストレージシステム＃１は仮想論理ボリュームＶＶ１１を作成し、仮想論理ボリュームＶＶ１１のＶＶＩＤを仮想論理ボリュームＶＶ１２と同じく１とする。そして実ストレージシステム＃１は論理ボリュームＬＶ２−０のデータを論理ボリュームＬＶ１−１にコピーし、また仮想論理ボリュームＶＶ１１に論理ボリュームＬＶ１−１を対応付ける。そして実ストレージシステム＃２は仮想論理ボリュームＶＶ１２を削除する。【００５５】
サーバ１１０は仮想論理ボリュームを認識する際、仮想論理ボリュームの情報を実ストレージシステム１００から取得する。ここで実ストレージシステム１００から取得される仮想論理ボリュームの情報には、ＶＶＩＤと仮想ストレージシステム識別子が含まれる。仮想論理ボリュームＶＶ１１と仮想論理ボリュームＶＶ１２のＶＶＩＤ及び仮想ストレージシステム識別子はいずれも同じであるため、サーバ１１０は仮想論理ボリュームＶＶ１１と仮想論理ボリュームＶＶ１２が単一ストレージシステムの同じボリュームと認識する（つまり、ＶＶ１１とＶＶ１２がいずれも仮想ストレージシステム１９０内のボリュームで、かつ同一のボリュームと認識する）。そのためデータが実ストレージシステム＃１から実ストレージシステム＃２に移動し、仮想論理ボリュームＶＶ１２が削除されても、サーバ１１０はアクセスを停止することなく、業務を継続できる（サーバ１１０は仮想論理ボリュームＶＶ１２の代わりに、ＶＶ１１にアクセスする）。【００５６】
なお、仮想論理ボリュームとこの仮想論理ボリュームに対応付けられる論理ボリュームとが、それぞれ異なる実ストレージシステム１００に定義されていても、サーバ１１０は（仮想）論理ボリュームのデータにアクセスできる。そのため、必ずしも論理ボリューム間でデータ移行を行う必要はないが、仮想論理ボリュームに対応付けられる論理ボリュームが仮想論理ボリュームと同じ実ストレージシステム１００に存在する方が、アクセス性能の点で有利である。そのため、仮想論理ボリュームに対応付けられる論理ボリュームは、仮想論理ボリュームと同じ実ストレージシステム１００に置かれるように、構成が変更される方が望ましい。【００５７】
また、図４（ｂ）では仮想論理ボリュームＶＶ１１に、２つの論理ボリューム（ＬＶ１−１とＬＶ２−０）が対応付けられている。本実施例に係る仮想ストレージシステム１９０は、論理ボリュームのデータ移行中もサーバ１１０からのＩ／Ｏ要求を受け付け可能にするため、一時的に１つの仮想論理ボリュームに２つの論理ボリュームが対応付けられることを許している。また実ストレージシステム１００は実際には、上で説明したものとは若干異なる順序で移行処理を行う。これは論理ボリュームのデータ移行中もサーバ１１０から仮想論理ボリュームへのＩ／Ｏ要求を受け付け可能にするためである。データ移行処理の詳細は後述する。【００５８】
また、以下の説明では、仮想論理ボリュームに対応付けられる２つの論理ボリュームのうち、データ移行元の論理ボリュームを“旧論理ボリューム”と呼び、データ移行先の論理ボリュームを“現論理ボリューム”と呼ぶ。図４の例では論理ボリュームＬＶ２−０から論理ボリュームＬＶ１−１にデータ移行が行われるが、この場合、論理ボリュームＬＶ２−０が旧論理ボリュームで、論理ボリュームＬＶ１−１が現論理ボリュームである。【００５９】
続いて、サーバ１１０と実ストレージシステム１００が有する管理情報の内容を説明する。図５は、サーバポート情報１９８のフォーマットである。サーバポート情報１９８は、サーバ１１０がメモリに格納している情報で、サーバポート１９５ごとに設けられる。またサーバポート情報１９８は、パス管理ソフト１９８１が実ストレージシステム１００に読み書き要求を発行する際に、要求の送信に用いるサーバポート１９５とストレージポート１９７を特定するために用いる情報である。サーバ１１０は、実ストレージシステム１００に読み書き要求を発行する際、ストレージシステムの識別子、（仮想）論理ボリュームの識別子、ストレージポートの識別子を指定する。このため、サーバポート情報１９８には、サーバポート識別子２４０００と、当該サーバポート１９５を経由してサーバ１１０がアクセス要求を発行する対象となる論理ボリュームの論理ボリューム識別子２４００１、この論理ボリュームを含むストレージシステム識別子２４００２、ストレージポート識別子２４００３が含まれる。サーバ１１０がアクセス要求を発行する対象となる論理ボリュームが複数存在する場合、複数の論理ボリューム識別子２４００１がサーバポート情報１９８に含まれる。【００６０】
また当該論理ボリュームが複数のストレージポート１９７に接続されている場合、１つの論理ボリューム識別子２４００１に対して複数のストレージポート識別子２４００３が設定される。なお、本実施例では、ストレージシステム識別子２４００２には、仮想ストレージシステム１９０の識別子が設定される。論理ボリューム識別子２４００１には、仮想論理ボリュームの識別子が設定される。ストレージポート識別子２４００３には、仮想論理ボリュームが定義されている実ストレージシステム１００のストレージポート１９７の識別子が設定される。【００６１】
サーバ１１０の読み書き要求は、少なくとも仮想論理ボリュームの識別子、ストレージポート１９７の識別子を含む。またこれ以外の情報が読み書き要求に含まれていても良く、たとえば仮想ストレージシステムの識別子が含まれていてもよい。ストレージポート１９７の識別子は、リアルな値（実ストレージシステム１００の持つストレージポート１９７の識別子）であるため、この要求を受け取る実ストレージシステム１００が一意に決定される。また、本実施例では、仮想論理ボリュームへの読み書き要求を処理する実ストレージシステム１００が変更されることがある、その際にも仮想論理ボリュームの識別子は変化せず、接続されたストレージポート１９７だけが変更される。【００６２】
図６は、本実施例における実ストレージシステム１００の共有メモリ２２０の中に格納される情報のうち、本実施例の説明で必要となる情報を示している。共有メモリ２２０には少なくとも、ストレージシステム情報２０５０、他実ストレージシステム情報２０７０、仮想論理ボリューム情報２０４０、論理ボリューム情報２０００、実ページ情報２１００、ストレージグループ情報２３００、ストレージ装置情報２５００が含まれる。【００６３】
この中で、ストレージシステム情報２０５０は、図７に示すように、実ストレージシステム１００及び仮想ストレージシステム１９０に関する情報で、実施例１では、仮想ストレージシステム識別子２０５１、実ストレージシステム識別子２０５２、仮想ストレージ記憶容量２０５３、総実ストレージ記憶容量２０５４、総空き記憶容量２０５５、実ストレージ記憶容量２０５６、空き記憶容量２０５７、プール容量２０５８を含む情報である。仮想ストレージシステム識別子２０５１は、当該実ストレージシステム１００が含まれる仮想ストレージシステム１９０の識別子である。実ストレージシステム識別子２０５２は、当該実ストレージシステム１００の識別子である。【００６４】
仮想ストレージ記憶容量２０５３は、当該仮想ストレージシステム１９０のプールの容量である。総実ストレージ記憶容量２０５４は、仮想ストレージシステム１９０を構成する各実ストレージシステム１００が有するストレージ装置１６０の容量の合計値である。総空き記憶容量２０５５は、仮想ストレージシステム１９０内プールの空き容量である。空き容量とは、プールの容量のうち、仮想ページに割り当てられていない実ページの容量の合計である。ただし本実施例では、プールの容量、空き容量は、プールに属するストレージ装置１６０の容量（または空き容量）を仮想ページの量に換算した値を用いる。たとえば仮想ストレージシステム１９０のプールに属するストレージグループ２１０１の容量の合計（言い換えれば実ページの総量）が２００ＴＢで、プールに属するストレージグループ２１０１のＲＡＩＤタイプがすべてＲＡＩＤ１の場合、仮想ページのサイズは実ページのサイズの半分なので、プールの容量（仮想ストレージ記憶容量２０５３）は１００ＴＢである。【００６５】
実ストレージ記憶容量２０５６は、当該実ストレージシステム１００中のストレージ装置１６０の記憶容量の合計値である。プール容量２０５８は、実ストレージシステム１００のプールの容量である。空き記憶容量２０５７は、実ストレージシステム１００のプールの空き容量である。そのため、各実ストレージシステム１００の空き記憶容量２０５７の合計値は、総空き記憶容量２０５５に等しい。また、プール容量２０５８と空き記憶容量２０５７には、仮想ストレージ記憶容量２０５３と同様に、プールに属するストレージ装置１６０の容量を仮想ページの容量に換算した値が用いられる。【００６６】
なお、本実施例では、各実ストレージシステム１００内の全ストレージ装置１６０がプールに所属する場合の例を説明する。そのため、本実施例に係る仮想ストレージシステム１９０においては、仮想ストレージ記憶容量２０５３は、総実ストレージ記憶容量２０５４を仮想ページの容量に換算した値と等しい。また、プール容量２０５８は、実ストレージ記憶容量２０５６を仮想ページの容量に換算した値と等しい。【００６７】
図８は、他実ストレージシステム情報２０７０の形式を示している。他実ストレージシステム情報２０７０は、仮想ストレージシステム識別子２０７１、他実ストレージシステム識別子２０７２、ストレージポート識別子２０７３を含む。仮想ストレージシステム識別子２０７１は、図７に含まれる仮想ストレージシステム識別子２０５１と同じで、当該実ストレージシステム１００が含まれる仮想ストレージシステム１９０の識別子である。他実ストレージシステム識別子２０７２は、当該実ストレージシステム１００を含む仮想ストレージシステム１９０に含まれる他の実ストレージシステムの識別子である。仮想ストレージシステム１９０に（ｎ＋１）台の実ストレージシステム１００が含まれる場合、他実ストレージシステム情報２０７０にはｎ個の他実ストレージシステム識別子２０７２が含まれる。図８において、他実ストレージシステム識別子２０７２−ｋは、複数の他実ストレージシステム識別子２０７２のうちのｋ番目の識別子を表す。ストレージポート識別子２０７３は、他実ストレージシステム識別子２０７２で特定される実ストレージシステム１００がもつストレージポート１９７の識別子である。ストレージポート識別子２０７３−ｋは、他実ストレージシステム識別子２０７２−ｋで特定される実ストレージシステム１００がもつストレージポート１９７の識別子を表す。実ストレージシステム１００が複数のストレージポート１９７を持つ場合、他実ストレージシステム識別子２０７２−ｋは複数存在する。【００６８】
図１４は、ストレージ装置情報２５００のフォーマットである。ストレージ装置情報２５００は、ストレージ装置１６０の属性情報を管理するための情報で、ストレージ装置１６０毎に作成される。以下、あるストレージ装置情報２５００で管理されるストレージ装置１６０のことを、「管理対象ストレージ装置」と呼ぶ。ストレージ装置情報２５００は、ストレージ装置識別子２５０１、ストレージタイプ２５０３、容量２５０４を有する。【００６９】
ストレージ装置識別子２５０１は、管理対象ストレージ装置の識別子である。ストレージタイプ２５０３は、管理対象ストレージ装置の種類（これを「デバイスタイプ」と呼ぶ）である。本実施例では、ストレージ装置１６０の種類（デバイスタイプ）とは、ストレージ装置１６０に用いられている記憶媒体の種類を意味し、ストレージタイプ２５０３には、ＨＤＤ、フラッシュストレージ（ＳＬＣ）、フラッシュストレージ（ＭＬＣ）のいずれかの情報が設定される。ストレージタイプ２５０３がＨＤＤの場合、管理対象ストレージ装置は磁気ディスク（ＨＤＤ）であり、ストレージタイプ２５０３がフラッシュストレージ（ＳＬＣ）の場合、管理対象ストレージ装置は、ＳＬＣタイプのフラッシュメモリを用いたフラッシュストレージであり、またストレージタイプ２５０３がフラッシュストレージ（ＭＬＣ）の場合、管理対象ストレージ装置は、ＭＬＣタイプのフラッシュメモリを用いたフラッシュストレージであることを意味する。【００７０】
容量２５０４は、管理対象ストレージ装置の容量である。なお、本実施例では、１つのストレージグループ２１０１に属する各ストレージ装置１６０のストレージタイプ２５０３と容量２５０４は、等しいとする。【００７１】
図１２は、ストレージグループ情報２３００のフォーマットである。ストレージグループ情報２３００は、ストレージグループ２１０１ごとに存在する情報である。以下、あるストレージグループ情報２３００によって管理されるストレージグループ２１０１のことを、「管理対象ストレージグループ」と呼ぶ。ストレージグループ情報２３００は、ストレージグループ識別子２３０１、ストレージグループタイプ２３０２、ストレージ装置識別子２３０３、グループＩ／Ｏカウント２３０４、最大Ｉ／Ｏ数２３０５、空きページ管理ポインタ２２００を有する。【００７２】
ストレージグループ識別子２３０１は、管理対象ストレージグループの識別子である。ストレージグループタイプ２３０２には、管理対象ストレージグループのＲＡＩＤタイプの情報と、管理対象ストレージグループを構成するストレージ装置１６０のデバイスタイプの情報が設定される。なお、ＲＡＩＤタイプの情報には、ＲＡＩＤ−１〜ＲＡＩＤ−６等のデータ冗長化方式を表す情報に加え、ストレージグループ２１０１を構成するストレージ装置１６０の台数を示す情報も含まれる。ストレージ装置識別子２３０３は、管理対象ストレージグループを構成するストレージ装置１６０の識別子である。ストレージグループ２１０１には複数のストレージ装置１６０が属するので、ストレージグループ情報２３００には、ストレージグループ２１０１に属する全てのストレージ装置１６０の識別子が、格納されている。【００７３】
グループＩ／Ｏカウント２３０４は、ストレージコントローラ２００が管理対象ストレージグループに対して発行したライト要求の合計値である。管理対象ストレージグループが定義された直後は、グループＩ／Ｏカウント２３０４の値は０である。【００７４】
最大Ｉ／Ｏ数２３０５は、管理対象ストレージグループが受け付け可能なライト要求回数の最大値である。最大Ｉ／Ｏ数２３０５は管理対象ストレージグループに属するストレージ装置１６０が、フラッシュメモリを記憶媒体とするストレージ装置１６０の場合に用いられる。管理対象ストレージグループに属するストレージ装置１６０が、たとえばＨＤＤ等のように、更新可能回数に制限のないものである場合、最大Ｉ／Ｏ数２３０５にはＮＵＬＬが設定される。【００７５】
なお、ストレージ装置１６０の更新可能回数は、ストレージ装置１６０の種類（ストレージタイプ２５０３）毎に異なる。そのため、最大Ｉ／Ｏ数２３０５は、ストレージグループ２１０１を構成するストレージ装置１６０のデバイスタイプ（先に述べたとおり、これはストレージグループタイプ２３０２に含まれている情報である）ごとに異なっている。【００７６】
空きページ管理ポインタ２２００は、管理対象ストレージグループ内の実ページのうち、空き実ページを管理するための情報である。空きページ管理ポインタ２２００の詳細は、後で図１３を用いて説明する。【００７７】
図９は、仮想論理ボリューム情報２０４０の形式である。仮想論理ボリューム情報２０４０は、仮想論理ボリュームの属性情報を管理するための情報で、仮想論理ボリュームごとに作成される。以下、ある仮想論理ボリューム情報２０４０によって属性情報が管理される仮想論理ボリュームのことを、「管理対象仮想論理ボリューム」と呼ぶ。仮想論理ボリューム情報２０４０は、仮想論理ボリューム識別子２０８５、接続ストレージポート識別子２０８４、現論理ボリューム識別子２０８６、旧論理ボリューム識別子２０８７、有効フラグ２０８８、コピーポインタ２０８９を含む。【００７８】
仮想論理ボリューム識別子２０８５は、管理対象仮想論理ボリュームの識別子である。接続ストレージポート識別子２０８４は、管理対象仮想論理ボリュームが接続されるストレージポート１９７の識別子で、一つ以上存在する。接続ストレージポート識別子２０８４は、他の実ストレージシステム１００のストレージポート１９７の識別子であってもよい。【００７９】
現論理ボリューム識別子２０８６は、管理対象仮想論理ボリュームにマップされている現論理ボリュームを特定するための識別子である。現論理ボリューム識別子２０８６には、現論理ボリュームの論理ボリューム識別子に加え、現論理ボリュームが定義されている実ストレージシステム１００の識別子と、現論理ボリュームの接続されているストレージポート１９７の識別子が含まれる。現論理ボリューム識別子２０８６に含まれている実ストレージシステム１００の識別子が管理対象仮想論理ボリュームの定義されている実ストレージシステム１００の識別子と同じであれば、現論理ボリュームは、管理対象仮想論理ボリュームの定義されている実ストレージシステム１００と同じ実ストレージシステム１００に定義された論理ボリュームということを意味する。【００８０】
旧論理ボリューム識別子２０８７は、管理対象仮想論理ボリュームにマップされている旧論理ボリュームを特定するための識別子である。原則として、旧論理ボリュームから現論理ボリュームにデータを移行中の場合に、旧論理ボリューム識別子２０８７に有効な値が設定されている。旧論理ボリューム識別子２０８７に含まれる情報は現論理ボリューム識別子２０８６と同様で、旧論理ボリュームの論理ボリューム識別子に加え、旧論理ボリュームが定義されている実ストレージシステム１００の識別子と、旧論理ボリュームの接続されているストレージポート１９７の識別子が含まれる。【００８１】
有効フラグ２０８８は、旧論理ボリューム識別子２０８７の内容が有効か否かを示す情報である。有効フラグ２０８８の値が１（ＯＮ）の時、旧論理ボリューム識別子２０８７の内容が有効で、旧論理ボリュームから現論理ボリュームにデータを移行中であることを示す。有効フラグ２０８８の値が０（ＯＦＦ）の時、旧論理ボリューム識別子２０８７には有効な情報が格納されていないことを表す。【００８２】
コピーポインタ２０８９は、データ移行が、どこまで進んでいるかを示す情報である。本実施例に係る実ストレージシステム１００は、旧論理ボリュームから現論理ボリュームへのデータ移動（コピー）を行う際、旧論理ボリュームの先頭仮想ページから順にコピーを行う。コピーポインタ２０８９にはコピー対象仮想ページの仮想ページ番号が格納される。コピーポインタ２０８９の初期値は０で、仮想ページのコピー処理が行われるたびに１加算される。なお、コピーポインタ２０８９に仮想ページ番号以外の情報が格納されてもよい。コピー対象の仮想ページが特定できる情報であればよいので、コピーポインタ２０８９に論理ボリュームのＬＢＡが用いられてもよい。【００８３】
図１０は、論理ボリューム情報２０００の形式を示したものである。論理ボリューム情報２０００は論理ボリュームの属性情報を管理するための情報で、論理ボリュームごとに存在する情報である。以下、ある論理ボリューム情報２０００によって属性情報が管理される論理ボリュームのことを、「管理対象論理ボリューム」と呼ぶ。論理ボリューム情報２０００は、論理ボリューム識別子２００１、論理容量２００２、ストレージグループタイプ２００３、実ページポインタ２００４、累積Ｉ／Ｏ数２００５を含む。【００８４】
論理ボリューム識別子２００１は、管理対象論理ボリュームの論理ボリューム識別子である。論理容量２００２は、管理対象論理ボリュームの容量である。【００８５】
ストレージグループタイプ２００３は、管理対象論理ボリューム（の仮想ページ）に割り当てられる実ページの属するストレージグループ２１０１の属性（具体的にはストレージグループタイプ２３０２）である。もし管理対象論理ボリュームにストレージグループタイプ２００３が設定されている場合には、実ストレージシステム１００は管理対象論理ボリュームの各仮想ページに実ページを割り当てる時、ストレージグループ２１０１のストレージグループタイプ２３０２が、ストレージグループタイプ２００３と同じストレージグループ２１０１を選択して、そのストレージグループ２１０１内の実ページを割り当てる。【００８６】
ただし本実施例に係る実ストレージシステム１００では、論理ボリュームにストレージグループタイプ２００３は設定されなくてもよい。論理ボリュームにストレージグループタイプ２００３が設定されていない場合（ストレージグループタイプ２００３がＮＵＬＬの場合）、実ストレージシステム１００は管理対象論理ボリュームの各仮想ページに実ページを割り当てる時、任意のストレージグループ２１０１内の実ページを割り当てて良い。実施例１では特に断りのない限り、ストレージグループタイプ２００３には情報が設定されない場合の例を説明する。【００８７】
実ページポインタ２００４は、管理対象論理ボリュームの仮想ページに割り当てられる実ページの管理情報（後述する実ページ情報２１００）へのポインタである。論理ボリューム情報２０００は、論理ボリュームが有する仮想ページの数と同数の実ページポインタ２００４を持つ（なお、論理容量２００２を仮想ページサイズで割ることで、論理ボリュームが有する仮想ページの数が得られる）。論理ボリューム情報２０００内の複数の実ページポインタ２００４のうち、先頭から（ｎ＋１）番目の実ページポインタ２００４には、仮想ページ＃ｎに割り当てられた実ページの実ページ情報２１００へのポインタが格納される。【００８８】
通常、容量仮想化においては、論理ボリュームの記憶容量を、実際の記憶媒体の容量よりも大きく見せる。このため、実ストレージシステム１００内の仮想ページの総数のほうが、実ページの総数より大きいのが、一般的である。なお、本実施例においては、仮想ページの容量（仮想ページサイズ）は実ストレージシステム１００の中で共通である場合の例を説明する。ただし、実ストレージシステム１００にサイズの異なる仮想ページが存在するように構成されていても、本発明は有効である。【００８９】
累積Ｉ／Ｏ数２００５は、管理対象論理ボリュームに対して発行されたライト要求の数である。実ストレージシステム１００は、サーバ１１０または他の実ストレージシステム１００から管理対象論理ボリュームに対するライト要求を受領するたびに、累積Ｉ／Ｏ数２００５に１を加算する。【００９０】
図１１は、実ページ情報２１００の形式である。実ページ情報２１００は、実ページの管理情報で、実ページ毎に存在する。以下の説明において、ある実ページ情報２１００によって管理される実ページのことを、「管理対象ページ」と呼ぶ。実ページ情報２１００は、ストレージグループ識別子２１０４、実ページアドレス２１０２、空きページポインタ２１０３、累積ページＩ／Ｏ数２１０５を含む。【００９１】
ストレージグループ識別子２１０４は、管理対象ページが存在するストレージグループ２１０１の識別子である。実ページアドレス２１０２は、管理対象ページの存在する位置を表す情報である。実ページはストレージグループ２１０１内に存在するので、実ページアドレス２１０２に用いられる情報は、ストレージグループのアドレスである。具体的には実ページアドレス２１０２には、管理対象ページの先頭領域のアドレスが格納される。図２を参照しながら説明する。図２では、たとえばストライプブロックＮが、実ページＲＰ１の先頭に位置づけられ、ストライプブロックＮのアドレス（ストレージグループアドレス）は“０ｘ０００１５０００”であるので（なお、“０ｘ”は、数値が１６進数表記であることを表す）、実ページＲＰ１の実ページ情報２１００の実ページアドレス２１０２には“０ｘ０００１５０００”が格納される。【００９２】
累積ページＩ／Ｏ数２１０５には、管理対象ページに対して、外部（サーバ１１０または他の実ストレージシステム１００）からライト要求が発行された回数が記録される。空きページポインタ２１０３は、管理対象ページが仮想ページに割り当てられていない場合（空きページである場合）に用いられる情報である。空きページの空きページポインタ２１０３には、他の空き実ページの実ページ情報２１００へのポインタが格納される。後述するが、本実施例に係る実ストレージシステム１００は、空き実ページをストレージグループ２１０１毎に管理する。そのため空きページポインタ２１０３には、同じストレージグループ２１０１に存在する空きページの実ページ情報２１００へのポインタが格納される。【００９３】
続いて、ストレージグループ情報２３００に含まれる空きページ管理ポインタ２２００について説明する。図１３は、空きページ管理ポインタ２２００によって管理される空き実ページの集合を表している。以下では、空き実ページに対応した実ページ情報２１００を空き実ページ情報２１００と呼ぶこともある。図１３に示されるように、ストレージコントローラ２００は各空き実ページ情報２１００を、空きページポインタ２１０３で接続して、リンクリストとして管理する。またストレージコントローラ２００は空きページ管理ポインタ２２００に、リンクリストの先頭の空き実ページ情報２１００へのポインタ（アドレス）を格納することで、空き実ページを管理している。このリンクリストを、空き実ページ情報キューと呼ぶ。空き実ページ情報キューは、ストレージグループ２１０１毎に存在する。【００９４】
空きページ管理ポインタ２２００には、先頭の空き実ページ情報２１００へのポインタが格納される。これにより、空きページ管理ポインタ２２００が、ストレージグループ２１０１内の１つの空き実ページの実ページ情報２１００を指し示すことになる。次に、空きページ管理ポインタ２２００に指し示された空き実ページ情報２１００の中の空きページポインタ２１０３が次の空き実ページ情報２１００を指す。図１３では、最後の空き実ページ情報２１００の空きページポインタ２１０３は、空きページ管理ポインタ２２００を指し示しているが、ヌル（ＮＵＬＬ）値でもよい。ストレージコントローラ２００は、実ページが割り当てられていない仮想ページに対する書き込み要求を受け付けると、ストレージグループ２１０１のいずれか、例えば、空き実ページを最も多く有するストレージグループ２１０１に対応する空きページ管理ポインタ２２００から、空き実ページを探し、仮想ページに割り当てる。【００９５】
なお、上で説明した各種の管理情報に加えて、実ストレージシステム１００は、プールに所属するストレージグループ２１０１を識別するための情報として、プール管理情報を有する。そして実ストレージシステム１００は、管理者からストレージグループ２１０１をプールに所属させる指示を受け付けると、ストレージグループ２１０１の情報（ストレージグループ識別子等）をプール管理情報に格納することで、プールを定義、管理する。ただしプール管理情報は、プールに所属する全ストレージグループ２１０１の情報が登録されただけの情報であるので、プール管理情報の説明は略す。【００９６】
また以下の説明においては、実ストレージシステム１００が仮想ページに実ページを割り当てる際、実ストレージシステム１００内のいずれかのストレージグループ２１０１を選択する例を説明する。これは本実施例に係る各実ストレージシステム１００は、全ストレージ装置１６０（ストレージグループ２１０１）がプールに所属している前提だからである。実ストレージシステム１００内の一部のストレージグループ２１０１だけがプールに所属している場合には、実ストレージシステム１００が仮想ページに実ページを割り当てる際、プール管理情報を参照することでプールに所属しているストレージグループ２１０１を選択し、選択されたストレージグループの有する実ページを割り当てる必要がある。【００９７】
次に、上で説明した管理情報を用いて、ストレージコントローラ２００が実行する動作の説明を行う。まず、ストレージコントローラ２００の動作を説明する。ストレージコントローラ２００では、ストレージコントローラ２００内のプロセッサ２６０がプログラムを実行することで、以下で説明するような各処理が行われる。そのプログラムは、メモリ２７０に格納されている。また、先に述べたとおり、以下の各処理の説明ではプログラムを主語として説明が行われることもあるが、それらはプロセッサ２６０またはストレージコントローラ２００が実行するものと理解することができる。【００９８】
図１５は、メモリ２７０内に格納された、本実施例に関するプログラムが示されている。本実施例に関するプログラムは、リード処理実行部４０００、ライト要求受付部４１００、ライトアフタ処理実行部４２００、実ストレージシステム追加処理部４３００、コピー処理部４４００である。【００９９】
また、本実施例に係る仮想ストレージシステム１９０には複数の実ストレージシステム１００が所属している。そしてある実ストレージシステム１００（仮にこれを「実ストレージＡ」と呼ぶ）で実行されるプログラムの処理対象（たとえば論理ボリューム）は、実ストレージＡの有する論理ボリュームであることもあれば、仮想ストレージシステム１９０内の他の実ストレージシステム１００の有する論理ボリュームであることもあり得る。実ストレージＡで実行されるプログラムの処理対象が、実ストレージＡにある場合と、他の実ストレージシステム１００にある場合とで、行うべき処理は異なるため、プログラムは処理対象が実ストレージＡにあるか否か判定を行うことがある。以下で、各プログラムの処理フローの説明を行う際、プログラムが実行されている実ストレージシステム１００のことを、「自ストレージ」と呼び、自ストレージ以外の実ストレージシステム１００のことを、「他ストレージ」と呼ぶ。【０１００】
図１６と図１７は、リード処理実行部４０００の処理フローである。リード処理実行部４０００は、自ストレージがサーバ１１０からリード要求を受け付けたときか、他ストレージからリード要求を受け付けたときに実行されるプログラムである。他ストレージからリード要求を受け付けたときには、ステップ５０００からではなく、ステップ５００７から実行が開始される。また、サーバ１１０がアクセス要求（リード要求またはライト要求）を発行する時、サーバ１１０はアクセス対象のボリュームを指定するために、アクセス要求に仮想論理ボリューム識別子を含める。一方実ストレージシステム１００が他の実ストレージシステム１００にアクセス要求を発行する時、サーバ１１０はアクセス対象のボリュームを指定するために、アクセス要求に論理ボリューム識別子を含める。【０１０１】
ステップ５０００：リード処理実行部４０００は、サーバ１１０から受け取ったリード要求で指定された仮想論理ボリュームに対応する仮想論理ボリューム情報２０４０を参照し、有効フラグ２０８８がＯＮかチェックする。有効フラグ２０８８がＯＦＦであれば（ステップ５０００：Ｙｅｓ）、ステップ５００３にジャンプする。【０１０２】
ステップ５００１：リード処理実行部４０００は、指定されたアドレスを仮想ページ番号に変換した値がコピーポインタ２０８９より大きいかをチェックする。指定されたアドレスを仮想ページ番号に変換した値がコピーポインタ２０８９より大きい場合は、次にステップ５００２が行われ、小さい場合にはステップ５００２はスキップされ、次にステップ５００３が行われる。【０１０３】
ステップ５００２：リード処理実行部４０００は、旧論理ボリューム識別子２０８７で特定される論理ボリューム（つまり旧論理ボリューム）を含む実ストレージシステム１００に、読み出し要求を発行する。旧論理ボリューム識別子２０８７には、論理ボリューム識別子と、論理ボリュームの接続されているストレージポート１９７の識別子が含まれる。リード処理実行部４０００はこれらの情報を用いて、旧論理ボリュームを有する実ストレージシステム１００のストレージポート１９７に対してリード要求を発行する。この後、ステップ５００５が行われる。【０１０４】
ステップ５００３：リード処理実行部４０００は現論理ボリューム識別子２０８６を参照して、アクセス対象の論理ボリュームは自ストレージに含まれる論理ボリュームかをチェックし、そうであれば、ステップ５００７へジャンプする。【０１０５】
ステップ５００４：リード処理実行部４０００は、現論理ボリューム識別子２０８６で指定された論理ボリュームを含む実ストレージシステム１００に、論理ボリュームを指定した読み出し要求を発行する。【０１０６】
ステップ５００５：リード処理実行部４０００は、リード要求発行先の実ストレージシステム１００からデータが送られてくるのを待つ。【０１０７】
ステップ５００６：リード処理実行部４０００は、送られてきたデータをサーバ１１０へ送り、処理を完了する。【０１０８】
ステップ５００７：リード処理実行部４０００は、現論理ボリューム識別子２０８６、あるいは、他ストレージから指定された論理ボリュームの識別子が示す論理ボリュームを処理対象とする。（他の実ストレージシステム１００からリード要求を受け取った場合、本ステップから実行を開始する。）【０１０９】
ステップ５００８：リード処理実行部４０００は、リード要求で指定されたアドレスのデータがキャッシュ２１０に存在するかをチェックする。データがキャッシュ２１０に存在しない場合、次にステップ５０１０が行われる。データがキャッシュ２１０に存在する場合、次にステップ５００９が行われる。【０１１０】
ステップ５００９：リード処理実行部４０００は、キャッシュ２１０上に存在するデータをサーバ１１０、あるいは、要求を発行した他ストレージに送る。この後、処理を完了する。【０１１１】
ステップ５０１０：この場合リード処理実行部４０００は、指定されている論理ボリュームの識別子から、対応する論理ボリューム情報２０００を認識する。さらにリード処理実行部４０００は、リード要求で指定されたアドレスを含む仮想ページの実ページポインタ２００４を参照することで、仮想ページに割り当てられている実ページの実ページ情報２１００を取得する。【０１１２】
たとえばリード要求で指定されたアドレスを仮想ページ番号に変換した結果、仮想ページ番号がｎだった場合、リード処理実行部４０００は論理ボリューム情報２０００内の（ｎ＋１）番目の実ページポインタ２００４を参照することで実ページ情報２１００を取得する。そしてリード処理実行部４０００は実ページ情報２１００を参照することで、対応するストレージグループ情報２３００を認識し、ＲＡＩＤタイプなどから、要求されたデータを含むストレージ装置１６０とそのアドレスを特定する。そしてリード処理実行部４０００は、リード対象データの格納されているストレージ装置１６０に読み出し要求を発行する。【０１１３】
ステップ５０１１：リード処理実行部４０００は、要求が完了してリードデータが返送されて来るまで待機する。【０１１４】
ステップ５０１２，ステップ５０１３：リード処理実行部４０００は、送られてきたデータをキャッシュ２１０に格納する（ステップ５０１２）。さらにリード処理実行部４０００はこのデータを、サーバ１１０、あるいは、要求を発行した他ストレージに送り（ステップ５０１３）、処理を完了する。【０１１５】
図１８、図１９は、ライト要求受付部４１００の処理フローである。ライト要求受付部４１００は、ストレージコントローラ２００が、サーバ１１０からライト要求を受け付けたときか、他ストレージからライト要求を受け付けたときに実行される。他ストレージからライト要求を受け付けたときには、ステップ６０００からではなく、ステップ６００８から実行が開始される。【０１１６】
ステップ６０００：ライト要求受付部４１００（プロセッサ２６０）は、サーバ１１０からライト要求とライトデータを受け取る。【０１１７】
ステップ６００１：ライト要求受付部４１００は、受け取ったライト要求で指定されている仮想論理ボリュームに対応する仮想論理ボリューム情報２０４０を参照し、有効フラグ２０８８がＯＮかチェックする。有効フラグ２０８８がＯＦＦであれば（ステップ６００１：Ｙｅｓ）、ステップ６００２、ステップ６００３はスキップされる。【０１１８】
ステップ６００２：ライト要求受付部４１００は、受け取ったライト要求で指定されているアドレスが、コピーポインタ２０８９より大きいかをチェックする。指定されているアドレスがコピーポインタ２０８９より小さい場合（ステップ６００２：Ｙｅｓ）、次にステップ６００４が行われる。【０１１９】
ステップ６００３：ライト要求で指定されているアドレスがコピーポインタ２０８９以上の場合（ステップ６００２：Ｎｏ）、ステップ６００３が実行される。ステップ６００３ではライト要求受付部４１００は、旧論理ボリュームを有する実ストレージシステム１００にライト要求を発行し、ライトデータを送る。旧論理ボリューム識別子２０８７には、論理ボリュームの識別子と、論理ボリュームの接続されているストレージポート１９７の識別子が含まれている。ライト要求受付部４１００はこれらの情報を用いて、旧論理ボリューム識別子２０８７で特定される論理ボリューム（旧論理ボリューム）を有する実ストレージシステム１００（のストレージポート１９７）に対してライト要求を発行する。この後、ライト要求受付部４１００は、ステップ６００４、ステップ６００５をスキップし、ステップ６００６を実行する。【０１２０】
ステップ６００４：ライト要求受付部４１００は、現論理ボリューム識別子２０８６を参照して、ライト対象の論理ボリュームが自ストレージに含まれる論理ボリュームかチェックし、そうであれば、ステップ６００８へジャンプする。【０１２１】
ステップ６００５：ライト要求受付部４１００は、現論理ボリューム識別子２０８６で指定された論理ボリュームを含む実ストレージシステム１００（他ストレージ）に、ライト要求を発行し、ライトデータを送る。このライト要求を受領した他ストレージでは、ライト要求受付部４１００が実行されるが、その時ステップ６００８から処理が開始される。【０１２２】
ステップ６００６：ライト要求受付部４１００は、ライト要求発行先の実ストレージシステム１００からライト要求完了の通知が返却されるまで待つ。【０１２３】
ステップ６００７：ライト要求受付部４１００は、サーバ１１０に終了報告を行い、処理を完了する。【０１２４】
ステップ６００８：ライト要求受付部４１００は、他ストレージからライト要求とライトデータを受け取る。（他ストレージからライト要求を受け取った場合、本ステップから実行が開始される。）【０１２５】
ステップ６００９：ライト要求受付部４１００は、ライト要求で指定されたアドレスに対応する仮想ページに、実ページが割り当てられているか判定する。これは、ライト要求で指定されたアドレスを仮想ページ番号に変換し、それをもとに論理ボリューム情報２０００の実ページポインタ２００４を参照することで判定できる。たとえばライト要求で指定されたアドレスを仮想ページ番号に変換した結果、仮想ページ番号がｎだった場合、ライト要求受付部４１００は論理ボリューム情報２０００内の（ｎ＋１）番目の実ページポインタ２００４を参照し、この実ページポインタ２００４に有効な値が格納されているか判定するとよい。実ページが割り当てられていれば、次にステップ６０１３が行われる。実ページが割り当てられていない場合には、次にステップ６０１０が行われる。【０１２６】
ステップ６０１０：ライト要求受付部４１００は、総空き記憶容量２０５５と空き記憶容量２０５７を、仮想ページ容量分だけ減算する。またライト要求受付部４１００は、他ストレージへ、総空き記憶容量２０５５の減算を要求し、この完了を待つ。（この要求を受け取った他ストレージは、総空き記憶容量２０５５を、仮想ページ容量分だけ減算し、その後要求発行元の実ストレージシステム１００に、完了を報告する。これだけの処理であるので、この処理フローは省略する。）【０１２７】
ステップ６０１１：ライト要求受付部４１００は、総空き記憶容量２０５５と空き記憶容量２０５７をチェックして、必要があれば、新たな実ストレージシステム１００の追加を、ストレージ管理サーバ１８０に要求する。たとえば、総空き記憶容量２０５５または空き記憶容量２０５７が所定の閾値を下回っている場合に、新たな実ストレージシステム１００の追加が要求されるとよい。ストレージ管理サーバ１８０に通知された情報を保守員が認識して、実ストレージシステム１００の追加の要求がベンダに要求されると、情報システムに実ストレージシステム１００が追加されることになる。【０１２８】
ステップ６０１２：ライト要求受付部４１００は、適当なストレージグループ情報２３００を選択して、空きページ管理ポインタ２２００から、実ページ情報２１００を１つ選択し、仮想ページに割り当てる。仮に、ここでのライト対象の仮想ページ番号がｎの場合、ライト要求受付部４１００は、ライト対象論理ボリュームの論理ボリューム情報２０００内の複数の実ページポインタ２００４のうち、先頭から（ｎ＋１）番目の実ページポインタ２００４に、確保された実ページの実ページ情報２１００へのポインタを登録する。【０１２９】
ステップ６０１３：ライト要求受付部４１００は、受け取ったデータをキャッシュ２１０に格納する。またライト要求受付部４１００は、ライト対象論理ボリュームの論理ボリューム情報２０００内の累積Ｉ／Ｏ数２００５に１を加算するとともに、ライト対象実ページの実ページ情報２１００内の累積ページＩ／Ｏ数２１０５に１を加算する。この後ライト要求受付部４１００は、サーバ１１０から受け取ったライト要求であればサーバ１１０に完了報告を行い、他ストレージから受け取ったライト要求であれば、他ストレージに完了報告を行う。【０１３０】
なお、ここでは累積Ｉ／Ｏ数２００５と累積ページＩ／Ｏ数２１０５に１が加算される例を説明したが、ライトデータ量に応じて累積Ｉ／Ｏ数２００５と累積ページＩ／Ｏ数２１０５に１より大きな値が加算されるようにしてもよい。たとえばライトデータサイズがｎストライプブロック分の大きさの場合に、ライト要求受付部４１００は累積Ｉ／Ｏ数２００５と累積ページＩ／Ｏ数２１０５にｎを加算するようにしてもよい。【０１３１】
また、ライト要求受付部４１００はデータをキャッシュ２１０に格納する際、そのデータに関する情報を付加してから格納する。データに関する情報とは具体的には、そのデータの書き込み先となるストレージ装置１６０、及びストレージ装置１６０内のアドレスを特定可能な情報である。ライト要求受付部４１００がキャッシュ２１０に格納したデータは、いずれストレージ装置１６０に書き込まれる必要がある。この処理は後述するライトアフタ処理実行部４２００が行う。【０１３２】
ライトアフタ処理実行部４２００がデータをストレージ装置１６０に書き込む際に、データ書き込み先のストレージ装置１６０を特定する必要がある。さらにデータをストレージグループ２１０１に書き込む際、ＲＡＩＤのパリティ（冗長データ）の更新も必要であるので、ライトアフタ処理実行部４２００は冗長データの書き込み先のストレージ装置１６０を特定する必要がある。そのために、ライト要求受付部４１００はデータに関する情報を付加する。【０１３３】
なお、データに関する情報は、一例として、データ（及び冗長データ）格納先のストレージ装置１６０の識別子及びストレージ装置１６０内のアドレスである。ただしこれ以外の情報でも良い。たとえば、データの書き込み先の論理ボリューム識別子とその論理ボリュームのアドレス（ＬＢＡ）がデータに付加されていれば、これらの情報からデータ（及び冗長データ）の書き込み先のストレージ装置１６０及びストレージ装置１６０内のアドレスは導出可能である。そのため論理ボリューム識別子と論理ボリュームのＬＢＡが付加されていてもよい。本実施例では、データに関する情報として、データ書き込み先の論理ボリューム識別子とＬＢＡがデータに付加されているという前提で説明する。【０１３４】
また、データに関する情報は、データと共にキャッシュ２１０に格納されてもよいが、共有メモリ２２０に格納されるようにしてもよい。【０１３５】
図２０は、ライトアフタ処理実行部４２００の処理フローである。ライトアフタ処理実行部４２００は、プロセッサ２６０が、適宜実行する処理である。【０１３６】
ステップ７０００：ライトアフタ処理実行部４２００は、キャッシュ２１０上に、ストレージ装置１６０にまだ書き込まれていないライトデータ（以下、「ダーティデータ」と呼ぶ）があるか判定する。ダーティデータが存在する場合、ライトアフタ処理実行部４２００はそのうちの１つを選択する。なお、キャッシュ２１０上にダーティデータが存在しない場合、ライトアフタ処理実行部４２００はステップ７００１以降の処理を行わずに終了する。【０１３７】
ステップ７００１：ライトアフタ処理実行部４２００は、ダーティデータに付加されている情報（データに関する情報）をもとに、ダーティデータとこのダーティデータの冗長データの書き込み先のストレージグループ２１０１とそのストレージ装置１６０と、そのアドレスを特定する。さらにライトアフタ処理実行部４２００は、特定されたストレージグループ２１０１のストレージグループ情報２３００内の、グループＩ／Ｏカウント２３０４に１を加算する。また別の実施形態として、ストレージ装置１６０に書き込まれるデータのサイズに応じて、グループＩ／Ｏカウント２３０４に加算される値の量が変更されてもよい。たとえばｎストライプブロック分のデータがストレージ装置１６０に書き込まれる場合には、グループＩ／Ｏカウント２３０４にｎが加算されるようにしてもよい。【０１３８】
ステップ７００２：ライトアフタ処理実行部４２００は、ステップ７０００で選択されたダーティデータの冗長データを生成する。なお、冗長データの生成のために、ライトアフタ処理実行部４２００はストレージグループ２１０１内のストレージ装置１６０からデータを読み出さなければならないこともある。ただしこれは公知の技術のため、説明を略す。【０１３９】
ステップ７００３：ライトアフタ処理実行部４２００は、ダーティデータを書き込むストレージ装置１６０と冗長データを書き込むストレージ装置１６０のそれぞれに書き込み要求を発行する。（別々のストレージ装置となる。）【０１４０】
ステップ７００４：ライトアフタ処理実行部４２００は、ストレージ装置１６０から書き込み処理の完了応答が返ってくるまで待機する。【０１４１】
ステップ７００５：ストレージ装置１６０から書き込み処理の完了応答が返却された後、ライトアフタ処理実行部４２００は、キャッシュ２１０上のダーティデータを消去する。あるいは、当該ダーティデータはすでにストレージ装置１６０に書き込まれていることがわかる状態にする。この後、処理を完了する。【０１４２】
図２１は、実ストレージシステム追加処理部４３００の処理フローである。以下の説明では、仮想ストレージシステム１９０に追加された実ストレージシステム１００のことを「自ストレージ」と呼び、自ストレージの追加される仮想ストレージシステム１９０を「追加対象仮想ストレージ」と呼ぶ。【０１４３】
また、追加対象仮想ストレージに追加される実ストレージシステム１００（自ストレージ）には、ストレージグループ２１０１が定義済みで、ストレージ装置情報２５００、ストレージグループ情報２３００が定義済みである。またこれ以外に、自ストレージには、仮想ストレージシステム識別子２０５１、実ストレージシステム識別子２０５２、実ストレージ記憶容量２０５６、空き記憶容量２０５７、プール容量２０５８があらかじめ設定されている。具体的には、仮想ストレージシステム識別子２０５１には追加対象仮想ストレージの識別子が事前設定されている。また、実ストレージ記憶容量２０５６には実ストレージシステム１００内のストレージ装置１６０の容量の合計値が、プール容量２０５８と空き記憶容量２０５７には、プールの容量が設定されている。【０１４４】
自ストレージは、ＳＡＮ１２０に接続された直後（ステップ８００１の実行直前）に各実ストレージシステム１００と通信することで、仮想ストレージシステム識別子２０５１が等しい実ストレージシステム１００を認識する。そして自ストレージは、同じ仮想ストレージシステム１９０に属する各実ストレージシステム１００に通知を行う必要がある場合には、ここで認識された各実ストレージシステム１００に対して通知を行う。【０１４５】
なお、図２１に記載の各ステップのうち、ステップ８００１〜ステップ８００７は、自ストレージの実ストレージシステム追加処理部４３００が実行する処理である。そしてステップ８０１１〜ステップ８０２２は、自ストレージから通知を受けた実ストレージシステム１００（以下ではこれを、自ストレージと区別するために、「実ストレージＡ」と呼ぶ）の実ストレージシステム追加処理部４３００が実行する処理である。ただし以下の説明では、説明が冗長になることを避けるために、ステップ８００１〜ステップ８００７の処理の主体を「自ストレージ」と表記し、またステップ８０１１〜ステップ８０２２の処理の主体を「実ストレージＡ」と表記する。【０１４６】
ステップ８００１：自ストレージは、仮想ストレージシステム１９０内に実ストレージシステム１００が追加された旨の情報と、自ストレージの実ストレージ記憶容量２０５６とプール容量２０５８と、自ストレージの実ストレージシステム識別子２０５２と、自ストレージが有するストレージポート１９７のストレージポート識別子を、追加対象仮想ストレージ内の各実ストレージシステム１００に通報する。【０１４７】
ステップ８００２：自ストレージは、各実ストレージシステム１００から回答が返ってくるまで待機する。【０１４８】
一方、追加された実ストレージシステム１００から通知を受けた実ストレージシステム１００（実ストレージＡ）は、一部の仮想論理ボリュームを、追加された実ストレージシステム１００に移行することを決定する（ただし、仮想論理ボリュームを移行しないと決定されることもある）。そして実ストレージＡは、仮想ストレージ記憶容量２０５３、総実ストレージ記憶容量２０５４、総空き記憶容量２０５５の情報、さらに移行が決定された仮想論理ボリュームの識別子、またこの仮想論理ボリュームにマップされている論理ボリュームの識別子（現論理ボリューム識別子２０８６）と論理容量２００２とストレージグループタイプ２００３、そしてこの仮想論理ボリュームに接続されているストレージポート１９７の識別子を、追加された実ストレージシステム１００に送信する（ステップ８０１６）。実ストレージＡが行う処理については後述する。【０１４９】
ステップ８００３：自ストレージは、実ストレージＡから受け取った情報（仮想ストレージ記憶容量２０５３、総実ストレージ記憶容量２０５４、総空き記憶容量２０５５の情報）を、ストレージシステム情報２０５０に設定する。また自ストレージは、移行対象として指定された１または複数の仮想論理ボリュームの定義を行う。具体的には自ストレージは、仮想論理ボリュームの仮想論理ボリューム情報２０４０を作成し、実ストレージＡから移行対象として指定された仮想論理ボリュームの識別子及びその仮想論理ボリュームにマップされている論理ボリュームの識別子（現論理ボリューム識別子２０８６）をそれぞれ、作成した仮想論理ボリューム情報２０４０の仮想論理ボリューム識別子２０８５と旧論理ボリューム識別子２０８７に設定する。さらに自ストレージは、仮想論理ボリューム情報２０４０の接続ストレージポート識別子２０８４に、受け取ったストレージポート識別子を設定する。【０１５０】
また自ストレージは、移行対象として指定された仮想論理ボリュームにマップされる論理ボリューム（現論理ボリューム）を定義（作成）する。具体的には自ストレージは、論理ボリューム情報２０００を新たに作成する。さらに実ストレージシステム追加処理部４３００は論理ボリュームの識別子を決定し、決定した論理ボリューム識別子を論理ボリューム情報２０００の論理ボリューム識別子２００１に格納する。ここで決定される論理ボリューム識別子は、すでに自ストレージ内に存在する論理ボリュームの識別子以外の識別子であれば、任意のものでよい。【０１５１】
また自ストレージは、他の実ストレージシステム１００から受け取った論理ボリュームの記憶容量とストレージグループタイプの情報をそれぞれ、論理容量２００２とストレージグループタイプ２００３に記憶する。なお、移行対象として指定された論理ボリュームにストレージグループタイプ２００３が設定されていない場合、自ストレージはここで定義される現論理ボリュームのストレージグループタイプ２００３を設定しなくて良い。【０１５２】
また自ストレージは、今回作成された仮想論理ボリューム情報２０４０の現論理ボリューム識別子２０８６に、作成した論理ボリュームの識別子と自ストレージの識別子と自ストレージのストレージポート１９７の識別子を設定し、また有効フラグ２０８８に１（ＯＮ）を、そしてコピーポインタ２０８９に初期値（０）を設定する。また、自ストレージは、仮想論理ボリュームにサーバ１１０がアクセスする際に使用可能なストレージポート１９７を決定し、決定されたストレージポート１９７の識別子を、仮想論理ボリューム情報２０４０に格納する。なお、使用可能なストレージポート１９７は複数あってよい。【０１５３】
ステップ８００４：自ストレージは、自ストレージの有する仮想ストレージシステム識別子２０５１と、ステップ８００３で定義された仮想論理ボリュームの仮想論理ボリューム識別子２０８５と、この仮想論理ボリュームにアクセスする際に使用可能なストレージポート１９７のストレージポート識別子をサーバ１１０に通知する。サーバ１１０はこの通知により、当該仮想論理ボリュームが、通知されたストレージポート１９７に接続されたことを認識し、サーバポート情報１９８にこのストレージシステム識別子とストレージポート識別子の情報を格納する。【０１５４】
ステップ８００５：自ストレージは、移行対象として指定された仮想論理ボリュームの集合を一つ以上含む他の実ストレージシステム１００に情報設定が完了したことを知らせる。さらに自ストレージは、他の実ストレージシステム１００に、現論理ボリューム識別子２０８６と、現論理ボリュームにアクセス可能なストレージポート１９７の識別子と仮想論理ボリュームの識別子を伝えてもよい。【０１５５】
ステップ８００６：自ストレージは、他の各実ストレージシステム１００から返信が帰ってくるまで待機する。【０１５６】
ステップ８００７：自ストレージは、ステップ８００５で通知を送った全ての実ストレージシステム１００から返信を受け取ると、移行を行う仮想論理ボリュームごとに、コピー処理を起動する（コピー処理部４４００の実行を開始させる）。この後、処理を終了する。【０１５７】
続いて、仮想ストレージシステム１９０に追加された実ストレージシステム１００以外の実ストレージシステム１００、特に追加された実ストレージシステム１００から要求を受け取った実ストレージシステム１００（実ストレージＡ）が実行する処理について説明する。【０１５８】
まず、実ストレージＡが、追加された実ストレージシステム１００から最初に要求を受け取ったとき（ステップ８００１）に実行される処理を説明する（ステップ８０１１〜ステップ８０１６）。実ストレージＡは、追加された実ストレージシステム１００から受け取ったプール容量２０５８を、仮想ストレージ記憶容量２０５３と総空き記憶容量２０５５とに加算し、追加された実ストレージシステム１００から受け取った実ストレージ記憶容量２０５６を総実ストレージ記憶容量２０５４に加算する（ステップ８０１１）。また実ストレージＡはサーバ１１０に、実ストレージシステム１００が追加された旨と、仮想ストレージ記憶容量２０５３と総実ストレージ記憶容量２０５４と総空き記憶容量２０５５の情報を通知する（ステップ８０１２）。サーバ１１０に通知するのは、どれか一つの実ストレージシステム１００にするのが望ましいが、同じ容量を、複数の実ストレージシステム１００が報告してもよい。【０１５９】
ステップ８０１３で、実ストレージＡは、実ストレージＡのプール容量２０５８と空き記憶容量２０５７を比較して、実ストレージＡのプール空き容量が不足していると判断した場合（たとえば空き記憶容量２０５７が所定値以下になった場合、あるいは“空き記憶容量２０５７÷プール容量２０５８”が所定値以下になった場合等である）、１または複数の仮想論理ボリュームを、追加された実ストレージシステム１００に移行することを決定する（ステップ８０１４）。もし実ストレージＡのプール空き容量が不足していない場合は（ステップ８０１３：Ｎｏ）、ステップ８０１４はスキップされる。【０１６０】
なお、ここで移行が決定された仮想論理ボリュームのことを、「移行対象仮想論理ボリューム」と呼ぶ。また移行対象仮想論理ボリュームにマップされている論理ボリュームも移行の対象となる。移行対象仮想論理ボリュームにマップされている論理ボリュームのことは「移行対象論理ボリューム」と呼ぶ。【０１６１】
また、ステップ８０１４における移行対象（仮想）論理ボリュームの数や論理容量の決定方法は任意でよいが、仮想ストレージシステム１９０を構成する実ストレージシステム１００の数や、追加された実ストレージシステム１００の記憶容量を勘案して、移行する論理ボリュームの論理容量（または数）を決定することが好ましい。たとえば実ストレージＡは、追加された実ストレージシステム１００の記憶容量（総実ストレージ記憶容量２０５４）が比較的大きい場合（所定の閾値以上の場合）には、移行対象の仮想論理ボリュームを増やすとよい。また仮想ストレージシステム１９０を構成する実ストレージシステム１００の数が多い場合には、他の実ストレージシステム１００も追加された実ストレージシステム１００に論理ボリュームを移行するため、移行対象の仮想論理ボリュームを多くしないほうがよい。【０１６２】
また、ステップ８０１４において、移行対象（仮想）論理ボリュームを１以上選択する時に、実ストレージＡは任意の（仮想）論理ボリュームを選択してよい。ただし別の実施形態として、実ストレージＡは何らかの判断基準に基づいて（仮想）論理ボリュームを選択してもよい。移行対象（仮想）論理ボリュームの選択方法の一例は、後述する変形例で説明する。【０１６３】
ステップ８０１５で実ストレージＡは、追加された実ストレージシステム１００の実ストレージシステム識別子と、追加された実ストレージシステム１００が有するストレージポート１９７のストレージポート識別子を、他実ストレージシステム情報２０７０に追加する。【０１６４】
この後ステップ８０１６で、実ストレージＡは、移行対象仮想論理ボリュームの識別子、移行対象論理ボリュームの識別子（正確には、移行対象仮想論理ボリュームの仮想論理ボリューム情報２０４０に記録されている、現論理ボリューム識別子２０８６）、移行対象論理ボリュームの容量、さらに、移行対象仮想論理ボリュームに接続されているストレージポート１９７の識別子（ただし、実ストレージＡのストレージポート１９７の識別子を除く）を、追加した実ストレージシステム１００に送る。移行対象仮想論理ボリュームが複数ある場合には、移行対象仮想論理ボリューム毎にこれらの情報が送られる。なお、移行対象仮想論理ボリュームがなければ、ヌル値が送られる。【０１６５】
続いて、追加した実ストレージシステム１００から二回目の要求を実ストレージＡが受け取ったとき（ステップ８００５）に、実ストレージＡで実行される処理（ステップ８０２１〜８０２２）について説明する。ここでは実ストレージＡは、移行対象仮想論理ボリュームが接続されているサーバ１１０に、移行対象仮想論理ボリュームの識別子と、実ストレージＡが有するストレージポート１９７のストレージポート識別子２４００３を通知し、移行対象仮想論理ボリュームに対応付けられているストレージポート識別子２４００３の中から、通知されたストレージポート識別子２４００３を削除するよう要求する（ステップ８０２１）。サーバ１１０はこの要求を受領すると、サーバポート情報１９８から、指定された仮想論理ボリュームのストレージポート識別子２４００３を削除する。【０１６６】
さらに実ストレージＡは、移行対象仮想論理ボリュームの仮想論理ボリューム情報２０４０を消去する（ステップ８０２２）。また、仮想ストレージシステム１９０に追加された実ストレージシステム１００から、仮想論理ボリューム識別子、論理ボリューム識別子、ストレージポート識別子を受け取った場合、実ストレージＡは、仮想論理ボリューム識別子に対応する仮想論理ボリューム情報２０４０の、現論理ボリューム識別子２０８６に論理ボリューム識別子を設定し、接続ストレージポート識別子２０８４にストレージポート識別子を設定する。この後、追加された実ストレージシステム１００に処理の完了を通知した後、実ストレージＡの実ストレージシステム追加処理部４３００は処理を終了する。【０１６７】
図２２と図２３は、コピー処理部４４００の処理フローである。コピー処理部４４００は、仮想論理ボリュームにマップされている旧論理ボリュームから現論理ボリュームにデータを移行（コピー）する処理を行うプログラムである。コピー処理部４４００は、実ストレージシステム追加処理部４３００から起動の指示が発行されたとき（ステップ８００７）、実行を開始する。この処理は、仮想論理ボリュームごとに実行される。なお、複数の仮想論理ボリュームのコピー処理が並列に実行されてもよい。以下の説明では、データ移行処理を行う対象の仮想論理ボリュームのことを、移行対象仮想論理ボリュームと呼ぶ。【０１６８】
ステップ１４０００〜ステップ１４０１０の処理は、仮想ストレージシステム１９０に新たに追加された実ストレージシステム１００のコピー処理部４４００が実行する処理である。ただし以下の説明では、表現が冗長になることを避けるために、処理の主体を単に「コピー処理部４４００」と表記して説明する。【０１６９】
ステップ１４０００：コピー処理部４４００は、移行対象仮想論理ボリュームのコピーポインタ２０８９が示すアドレス（仮想ページ番号）を特定する。ここで特定された仮想ページ番号で特定される、旧論理ボリュームの仮想ページと現論理ボリュームの仮想ページがコピー処理対象と決定される。コピー処理部４４００は、仮想ページごとにコピー処理を実行する。【０１７０】
またコピー処理部４４００は、旧論理ボリームの先頭仮想ページから順にデータを読み出して、現論理ボリュームの仮想ページへとコピーする。なお、以下のステップ１４００１〜ステップ１４００６の説明においては、コピー処理部４４００が仮想ページ＃ｎに対して処理を行う場合の例を説明する。また以下では、仮想ページ＃ｎを「ＶＰ＃ｎ」と表記することもある。【０１７１】
ステップ１４００１：コピー処理部４４００は、移行対象仮想論理ボリュームに対応する仮想論理ボリューム情報２０４０の旧論理ボリューム識別子２０８７から、旧論理ボリュームを有する実ストレージシステム１００の識別子、旧論理ボリュームの論理ボリューム識別子を特定し、コピーポインタ２０８９から、読み出し要求で指定するアドレスを決める。またコピー処理部４４００は、特定した実ストレージシステム１００に、特定した論理ボリュームの論理ボリューム識別子及び読み出し対象の仮想ページのアドレスを指定して、読み出し要求を発行する。【０１７２】
ステップ１４００２：コピー処理部４４００は、リード要求を発行した実ストレージシステム１００からデータが送られてくるまで待機し、データが送られてきた時点で、ステップ１４００３を実行する。なお、リード要求を発行した実ストレージシステム１００からヌル値が送られてくる場合がある。その場合には、コピー処理部４４００は次にステップ１４００７を実行する。【０１７３】
ステップ１４００３：ここでは、現論理ボリュームのＶＰ＃ｎに割り当てるべき実ページの確保が行われる。コピー処理部４４００は、実ストレージシステム１００内のストレージグループ２１０１を適当に選択して、このストレージグループの空き実ページ情報２１００を参照して、空き実ページを確保する。そして現論理ボリュームの論理ボリューム情報２０００内の複数の実ページポインタ２００４のうち、先頭から（ｎ＋１）番目の実ページポインタ２００４に、確保された実ページの実ページ情報２１００へのポインタを登録する。さらにコピー処理部４４００は、空き記憶容量２０５７から仮想ページサイズを減算する。ここで選択されるストレージグループ２１０１は任意のものでも良いし、あるいは何らかの選択基準に従ってストレージグループ２１０１が選択されてもよい。【０１７４】
ステップ１４００４：コピー処理部４４００は、送られてきたデータから冗長データを生成する。【０１７５】
ステップ１４００５：コピー処理部４４００は、ステップ１４００３で確保した実ページが存在するストレージ装置１６０に、受け取ったデータと冗長データを書き込むため、ライト要求を発行する。実ページはストレージグループ２１０１に属する複数のストレージ装置１６０に跨って定義される領域である。そのためここでは、複数のストレージ装置１６０にライト要求が発行される。【０１７６】
ステップ１４００６：コピー処理部４４００は、各ストレージ装置１６０からライト処理の完了の報告が返却されるまで待機する。【０１７７】
ステップ１４００７：コピー処理部４４００は、コピーポインタ２０８９に１を加算する。【０１７８】
ステップ１４００８：コピー処理部４４００は、コピーポインタ２０８９と当該論理ボリュームの仮想ページ数を比較することで、コピーが完了したかをチェックする。完了していない場合、つまりコピーポインタ２０８９が論理ボリュームの仮想ページ数以下の場合（ステップ１４００８：Ｎｏ）、コピー処理部４４００は再びステップ１４０００から処理を行う。コピーが完了した場合、つまりコピーポインタ２０８９が論理ボリュームの仮想ページ数を超過した場合（ステップ１４００８：Ｙｅｓ）、次にステップ１４００９が行われる。【０１７９】
ステップ１４００９：コピー処理部４４００は、仮想論理ボリュームの有効フラグ２０８８に０（ＯＦＦ）を格納し、また、旧論理ボリューム識別子２０８７で特定される旧論理ボリュームを有する実ストレージシステム１００に、コピーが完了した旨、及び旧論理ボリュームの論理ボリューム識別子を送る。【０１８０】
ステップ１４０１０：コピー処理部４４００は、旧論理ボリュームを有する実ストレージシステム１００から完了報告を受け取ると、処理を終了する。【０１８１】
図２３は、追加された実ストレージシステム１００に論理ボリュームを移行する側の実ストレージシステム１００、つまり旧論理ボリュームを有する実ストレージシステム１００のコピー処理部４４００が実行する処理フローである。【０１８２】
ステップ１４０１１−１４０１５の処理は、旧論理ボリュームを有する実ストレージシステム１００が、追加された実ストレージシステム１００からリード要求（ステップ１４００１で発行される要求）を受領した時に、実行される。以下、特に断りのない限り、ステップ１４０１１−１４０１５についての説明で記述される処理は、旧論理ボリュームを有する実ストレージシステム１００のコピー処理部４４００が実行する処理である。【０１８３】
ステップ１４０１１：コピー処理部４４００は論理ボリューム情報２０００の実ページポインタ２００４を参照することで、指定された仮想ページに実ページが割り当てられているか判定する。実ページが割り当てられている場合、次にステップ１４０１３が行われる。【０１８４】
ステップ１４０１２：実ページが割り当てられていない場合、コピー処理部４４００は要求元の実ストレージシステム１００にヌル値を返送し、処理を完了する。【０１８５】
ステップ１４０１３：コピー処理部４４００は、実ページの存在するストレージグループ２１０１（さらにはストレージグループ２１０１を構成するストレージ装置１６０）を認識し、認識したストレージ装置１６０に、データ（仮想ページのデータ）の読み出し要求を発行する。なお、実ページにはリード対象データに加えて、リード対象データの冗長データも含まれているが、ここではコピー処理部４４００は冗長データを読み出す必要はない。【０１８６】
ステップ１４０１４：コピー処理部４４００は、ストレージ装置１６０からのデータ読み出しが完了するまで待機する。【０１８７】
ステップ１４０１５：コピー処理部４４００は、読み出した仮想ページのデータを、要求元の実ストレージシステム１００に送る。さらに、自身の（旧論理ボリュームを有する実ストレージシステム１００の）空き記憶容量２０５７に１仮想ページのサイズを加算する。これで旧論理ボリュームを有する実ストレージシステム１００がリード要求を受領した時の処理は終了する。【０１８８】
続いて、追加した実ストレージシステム１００からコピー完了の報告が行われた時（ステップ１４００９）に、旧論理ボリュームを有する実ストレージシステム１００のコピー処理部４４００で行われる処理の説明を行う（図示は略す）。追加した実ストレージシステム１００からは、コピー完了の報告とともに論理ボリューム識別子が送られてくるので、コピー処理部４４００は、受け取った論理ボリューム識別子で特定される論理ボリュームの削除を行う。具体的には論理ボリューム情報２０００の消去が行われるとよい。またこの時コピー処理部４４００は、消去対象の論理ボリュームに割り当てられている実ページの実ページ情報２１００を、空き実ページ情報キューへ移動する処理も行う。この後、追加した実ストレージシステム１００に完了報告を行う。【０１８９】
以上が実施例１の説明である。実施例１に係る仮想ストレージシステムは、複数の実ストレージシステムから構成される。実ストレージシステムは論理ボリュームを定義するとともに、論理ボリュームに対応付けられた仮想論理ボリュームを定義してサーバに提供する。また仮想論理ボリュームが定義される実ストレージシステムと、仮想論理ボリュームが対応付けられる論理ボリュームが定義された実ストレージシステムは同じである必要がないため、ユーザ（管理者）は仮想ストレージシステム内のいずれかの実ストレージシステムに空き領域があれば、その領域を使用可能である。【０１９０】
また実施例１に係る仮想ストレージシステムでは、実ストレージシステムが自身のプール容量とプール空き容量を管理することに加え、仮想ストレージシステムに含まれる各実ストレージシステムのプール容量の合計及びプール空き容量の合計を算出し、これらをそれぞれ仮想ストレージシステムのプール容量、プール空き容量としてサーバに提供する。これによりユーザ（管理者）は、それぞれの（実）ストレージシステムのプール容量（または空き容量）を監視する必要はなく、単一のストレージシステム（仮想ストレージシステム）の容量のみを監視すればよい。【０１９１】
［変形例］
続いて、実施例１に係る仮想ストレージシステムの変形例について説明する。実施例１に係る仮想ストレージシステムでは、仮想ストレージシステムに実ストレージシステムが追加されると、これまで仮想ストレージシステムに属していた実ストレージシステム内の一部の論理ボリュームが、追加された実ストレージに移動された。これは各実ストレージシステム内のプール空き容量を確保することが目的だが、以下で説明する変形例では、プール空き容量を確保することに加え、ストレージ装置の長寿命化のために、論理ボリュームの移動が行われる例を説明する。【０１９２】
変形例における仮想ストレージシステムと実ストレージシステムのハードウェア構成と各種管理情報は、実施例１で説明したものと違いはないため、図示は略す。以下では実施例１で説明した事項と異なる点を中心に説明する。変形例における実ストレージシステムで実行されるプログラムは、実施例１で説明したプログラムとほとんど同じだが、内部ウェアレベリング部４５００とシステムウェアレベリング部４６００（非図示）が追加される。また、ライト要求受付部４１００と実ストレージシステム追加処理部４３００の処理が、実施例１で説明したものと若干異なる。【０１９３】
まず変形例におけるライト要求受付部４１００の処理の中で、実施例１で説明したものと異なる点について説明する。変形例における実ストレージシステムでは、各論理ボリュームに割り当てられる実ページの種類に制約がある。変形例における実ストレージシステム１００が論理ボリュームの各仮想ページに実ページを割り当てる時（たとえばライト要求受付部４１００のステップ６０１２が実行される時）、ストレージグループ２１０１のストレージグループタイプ２３０２が、論理ボリュームのストレージグループタイプ２００３と同じストレージグループ２１０１を選択する。以下では、ここで選択されるストレージグループ２１０１を「候補グループ」と呼ぶ。そのため、変形例に係る実ストレージシステム１００では、各論理ボリュームの論理ボリューム情報２０００内のストレージグループタイプ２００３に、有効な値が設定されていることが前提である。【０１９４】
そして実ストレージシステム１００は、候補グループの中から空き実ページを選択して、仮想ページに割り当てる。なお候補グループの中から空き実ページを選択する際、実ストレージシステム１００は残寿命の長い候補グループが有する空き実ページを優先的に選択する。【０１９５】
なお、本例では候補グループの選択の際、上で述べたように、ストレージグループ２１０１のストレージグループタイプ２３０２が、論理ボリュームのストレージグループタイプ２００３と同じストレージグループを選択する例を説明するが、別の実施形態として、単にデバイスタイプが共通のストレージグループ２１０１が候補グループとして選択されてもよい。たとえば論理ボリュームのストレージグループタイプ２００３に設定されているデバイスタイプが「フラッシュストレージ（ＳＬＣ）」または「フラッシュストレージ（ＭＬＣ）」の場合、実ストレージシステム１００はフラッシュストレージ（ＳＬＣまたはＭＬＣのいずれでもよい）で構成されるストレージグループ２１０１を候補グループとして選択するという方法を採用してもよい。【０１９６】
変形例における、残寿命の判定方法を説明する。良く知られているように、フラッシュメモリは消去回数に一定の制限があり、消去回数が制限に達すると使用できなくなる。ここでは、フラッシュメモリの消去回数が所定の制限値に達することを「寿命を迎えた」と呼び、フラッシュメモリの消去回数が制限値に近い値になった時の状態を、「残寿命が短い」状態と呼ぶ。【０１９７】
なお、以下で説明する変形例では、実ストレージＡは、フラッシュストレージで構成されるストレージグループ２１０１の消去回数の代わりにライト回数を用いて、ストレージグループ２１０１の残寿命の長さを判定する。フラッシュメモリの消去回数とライト（書き換え）回数には相関があるため、ライト回数を用いても寿命の推定が可能だからである。【０１９８】
ストレージグループ２１０１の寿命の判定を行う際、具体的には、実ストレージシステム１００は、ストレージグループ２１０１のストレージグループ情報２３００を参照することで、“グループＩ／Ｏカウント２３０４÷最大Ｉ／Ｏ数２３０５”を算出する。以下では、“グループＩ／Ｏカウント２３０４÷最大Ｉ／Ｏ数２３０５”のことを“更新度”と呼ぶ。更新度が小さいほど、ストレージグループ２１０１の残寿命が長く、逆に更新度が大きいほど、ストレージグループ２１０１の残寿命が短いことを意味する。【０１９９】
たとえばライト要求受付部４１００のステップ６０１２が実行される時、実ストレージシステム１００は、空き実ページを有する候補グループのうち、更新度が最も小さいストレージグループ２１０１を選択し、そのストレージグループ２１０１が有する空き実ページを選択する。これにより、残寿命が最も長いストレージグループ２１０１の空き実ページを仮想ページに割り当てることができる。【０２００】
なお、寿命の判定の際に、グループＩ／Ｏカウント２３０４（つまりライト回数）ではなく、更新度（グループＩ／Ｏカウント２３０４÷最大Ｉ／Ｏ数２３０５）を算出する理由は、フラッシュストレージの書き換え可能回数（または消去可能回数）は、デバイスタイプによって異なるため、単純にライト回数のみに基づいて寿命を判断することは適切でないからである。【０２０１】
続いて、内部ウェアレベリング部４５００の処理について説明する。内部ウェアレベリング部４５００は、実ストレージシステム１００内のストレージ装置１６０間でのデータ移動を行うことで、各ストレージ装置１６０の書き換え回数（消去回数）を極力等しくするためのプログラムである。なお、ここでデータ移動処理の対象となるストレージ装置１６０は、フラッシュメモリを記憶媒体とするストレージ装置１６０、つまり書き換え回数に制限があるストレージ装置１６０である。【０２０２】
なお、フラッシュメモリを記憶媒体とするストレージ装置１６０（フラッシュストレージ）は、ストレージ装置１６０の内部でもいわゆるウェアレベリング処理を行って、ストレージ装置１６０内の各フラッシュメモリの書き換え回数（または消去回数）が等しくなるように制御している。ただしこの処理は公知の処理のため、説明を略す。【０２０３】
以下、内部ウェアレベリング部４５００の処理の概要を述べる。内部ウェアレベリング部４５００は、定期的に実行される。内部ウェアレベリング部４５００は、実ストレージシステム１００内の各ストレージグループ２１０１のストレージグループ情報２３００を参照することで、各ストレージグループ２１０１の更新度を算出する。さらに内部ウェアレベリング部４５００は、実ストレージシステム１００内の全ストレージグループ２１０１の更新度の平均値を算出する。【０２０４】
そして、あるストレージグループ２１０１（以下、「対象グループ」と呼ぶ）の更新度と、算出された更新度の平均値の差が所定値を超過している場合、内部ウェアレベリング部４５００はそのストレージグループ２１０１に属する実ページのうち、論理ボリュームの仮想ページに割り当てられている実ページを特定する。実ページの特定のためには、内部ウェアレベリング部４５００は、各論理ボリューム情報２０００のうち、ストレージグループタイプ２００３が、対象グループのストレージグループタイプ２３０２と同じものを選択し、選択した論理ボリューム情報２０００の実ページポインタ２００４により指し示されている実ページ情報２１００のストレージグループ識別子２１０４を参照することで特定できる。【０２０５】
そして内部ウェアレベリング部４５００は、特定された実ページのうち、累積ページＩ／Ｏ数２１０５が最も大きい実ページを特定する（この実ページを「移動元実ページ」と呼ぶ）。そして移動元実ページのデータを、更新度が最も小さいストレージグループ２１０１に属する空き実ページ（これを「移動先実ページと呼ぶ」）に移動し、移動元実ページが割り当てられていた仮想ページには、移動先実ページが割り当てられるように、論理ボリューム情報２０００の実ページポインタを変更する。【０２０６】
なお、内部ウェアレベリング部４５００が行う、移動対象データの選択方法は、上で説明した方法に限定されない。各ストレージ装置１６０あるいはストレージグループ２１０１間の書き換え回数（消去回数）の不均衡が極力解消されるようにデータ移動が行われるのであれば、様々な方法が用いられてもよい。【０２０７】
続いて、変形例における実ストレージシステム追加処理部４３００の処理内容を説明する。ただし、仮想ストレージシステム１９０に追加された実ストレージシステム１００の実ストレージシステム追加処理部４３００が行う処理（図２１  ステップ８００１〜ステップ８００７）の内容は、実施例１で説明したものと同じであるので、ここでは説明を略す。【０２０８】
一方、追加された実ストレージシステム１００から要求を受け取った実ストレージシステム１００（以下の説明では実施例１と同じく、これを「実ストレージＡ」と呼ぶ）が実行する処理（図２１  ステップ８０１１以降）は、実施例１で説明したものと若干異なる。実施例１では、実ストレージＡが、追加された実ストレージシステム１００に仮想論理ボリュームを移行する際、任意の仮想論理ボリュームを移動してもよかった。一方変形例では、実ストレージＡの実ストレージシステム追加処理部４３００は、残寿命の短いストレージグループ２１０１があった場合、そのストレージグループ２１０１の実ページが割り当てられている仮想論理ボリュームを優先的に、追加された実ストレージシステム１００に移行する。【０２０９】
変形例における、ステップ８０１１以降の処理の内容について説明する。ステップ８０１１〜ステップ８０２２のうち、ステップ８０１４以外の処理は実施例１で説明した処理と同じであるため、以下ではステップ８０１４で行われる内容を説明する。なお、以下の処理は、実ストレージＡの実ストレージシステム追加処理部４３００が実行する処理だが、説明が冗長になることを避けるために、以下の説明では実ストレージＡを処理の主体として表記している。【０２１０】
実ストレージＡのプール空き容量が不足している場合（ステップ８０１３：Ｙｅｓ）、ステップ８０１４が実行される。ステップ８０１４で実ストレージＡはまず、移行対象仮想論理ボリュームの容量を決定する。これは実施例１で説明したものと同じ処理である。つまり、仮想ストレージシステム１９０を構成する実ストレージシステム１００の数や、追加された実ストレージシステム１００の記憶容量を考慮して、移行対象仮想論理ボリュームの容量が決定されるとよい。なお、以下ではここで決定された移行対象仮想論理ボリュームの容量を、「移行量」と呼ぶ。【０２１１】
続いて実ストレージＡは、“グループＩ／Ｏカウント２３０４÷最大Ｉ／Ｏ数２３０５”（更新度）が所定の閾値（たとえば０．９等の、あらかじめ決められた値）を超過するストレージグループ２１０１があるか判定する。変形例では、実ストレージシステム１００は、更新度が所定の閾値を超過するストレージグループ２１０１を、残寿命の短いストレージグループ２１０１とみなす。ただし、最大Ｉ／Ｏ数２３０５が設定されていないストレージグループ２１０１、たとえばＨＤＤ等のように書き換え回数に制限のないストレージグループ２１０１については、判定対象外とされる。【０２１２】
残寿命の短いストレージグループ２１０１がなかった場合、実ストレージＡは実施例１で説明したものと同じく、任意の仮想論理ボリュームを移行対象仮想論理ボリュームとして選択する。【０２１３】
もし残寿命の短いストレージグループ２１０１があった場合、実ストレージＡは、論理ボリュームのストレージグループタイプ２００３が、そのストレージグループ２１０１のストレージグループタイプ２３０２と同じものを抽出する。さらに実ストレージＡは、抽出された各論理ボリュームについて、論理ボリュームに割り当てられている実ページの実ページ情報２１００を参照することにより、残寿命の短いストレージグループ２１０１の実ページが割り当てられている論理ボリュームを特定する。もしそのような論理ボリュームが複数存在した場合、実ストレージＡは、移行量に達するまで、特定された複数の論理ボリュームの中から移行対象論理ボリュームを選択する。同時に実ストレージＡは、移行対象論理ボリュームが対応付けられている仮想論理ボリュームを、移行対象仮想論理ボリュームとして選択する。この後の処理は実施例１で説明した処理と同じである。つまり実ストレージＡは、移行対象仮想論理ボリュームの識別子や移行対象論理ボリュームの識別子等を、追加された実ストレージシステム１００（自ストレージ）に通知する（ステップ８０１６）。一方自ストレージはステップ８００３〜ステップ８００７を実行することにより、実ストレージＡから通知された移行対象論理ボリュームのデータを、自ストレージに定義した論理ボリュームに移動する処理等を行う。【０２１４】
なお移行対象論理ボリュームを選択する際、実ストレージＡは残寿命の短いストレージグループ２１０１の実ページが最も多く割り当てられている論理ボリュームから優先的に選択する。これにより、残寿命の短いストレージグループ２１０１の書き換え回数が、より削減されることが期待され、残寿命の短いストレージグループ２１０１の寿命を延ばすことができる。【０２１５】
なお、上ではステップ８０１３の判定が行われる例、つまり実ストレージＡのプール空き容量が不足している場合に（仮想）論理ボリュームの移行を行う例を説明した。しかし別の実施形態として、ステップ８０１３の判定を行わなくてもよい。つまり実ストレージＡのプール空き容量が不足していなくても、更新度が所定の閾値を超過するストレージグループ２１０１が存在していた場合には、実ストレージＡは（仮想）論理ボリュームを移行すると決定してもよい。【０２１６】
また別の実施形態として、実ストレージＡが残寿命の短いストレージグループ２１０１と同じストレージグループタイプの論理ボリュームの中から移行対象論理ボリュームを選択する際に、残寿命の短いストレージグループ２１０１の実ページが多く割り当てられている論理ボリュームを優先的に選択する代わりに、累積Ｉ／Ｏ数２００５が最も多い論理ボリュームを優先的に移行対象論理ボリュームとして選択してもよい。【０２１７】
累積Ｉ／Ｏ数２００５が最も多い論理ボリュームが他の実ストレージシステム１００に移行されることによって、実ストレージＡ内の各ストレージグループ２１０１に対するライト回数の総量が削減される。また実ストレージＡでは内部ウェアレベリング部４５００が定期的に実行されるので、各ストレージグループ２１０１に対する書き換え回数はほぼ均等になる。そのため、残寿命の短いストレージグループ２１０１に対する書き換え回数も削減されることが期待でき、結果としてこのストレージグループ２１０１の寿命を延ばすことができる。【０２１８】
続いて、変形例におけるシステムウェアレベリング部４６００の処理について説明する。システムウェアレベリング部４６００は、各実ストレージシステム１００が定期的に実行する。システムウェアレベリング部４６００は、仮想ストレージシステム１９０内の各実ストレージシステム１００が有するストレージグループ２１０１のライト回数が等しくなるように各ストレージグループ２１０１を制御し、これにより特定の実ストレージシステム１００のストレージグループ２１０１の寿命が短くなることを防ぐ。【０２１９】
具体的には、各実ストレージシステム１００が有するストレージグループ２１０１の更新度に不均衡が生じた場合、更新度が大きいストレージグループ２１０１を有する実ストレージシステム１００（以下ではこれを「実ストレージＡ」と呼ぶ）は、更新度が小さいストレージグループ２１０１を有する実ストレージシステム１００（以下ではこれを「実ストレージＢ」と呼ぶ）に、（仮想）論理ボリュームを移動する。【０２２０】
図３０を参照しながら、システムウェアレベリング部４６００の処理の流れを説明する。なお、以下の説明において、特に断りのない限り、ステップ９００１〜ステップ９００７は、実ストレージＡのシステムウェアレベリング部４６００が実行する処理、つまり実ストレージＡ以外の実ストレージシステム１００に（仮想）論理ボリュームを移動する処理である。そしてステップ９０１１〜ステップ９０１７は、実ストレージＢのシステムウェアレベリング部４６００が実行する処理である。【０２２１】
ステップ９００１：実ストレージＡは、仮想ストレージシステム１９０内の各実ストレージシステム１００に対して、寿命情報と空き容量の送信を依頼し、各実ストレージシステム１００から寿命情報とプールの空き容量を取得する。寿命情報とは、各ストレージグループ２１０１の更新度（グループＩ／Ｏカウント２３０４÷最大Ｉ／Ｏ数２３０５）の平均値である。【０２２２】
この要求を受領した各実ストレージシステム１００（実ストレージＢも含まれる）は、実ストレージシステム１００内のストレージグループ２１０１ごとに更新度を算出し、さらに算出された値の平均値（寿命情報）を求める。なお、最大Ｉ／Ｏ数２３０５がＮＵＬＬのストレージグループ２１０１については、各実ストレージシステム１００は更新度の算出を行わない。そして各実ストレージシステム１００は、求められた平均値（寿命情報）と、空き記憶容量２０５７を実ストレージＡに返送する（ステップ９０１１）。【０２２３】
ステップ９００２：実ストレージＡは、実ストレージＡが有するストレージグループ２１０１の寿命情報を求める。具体的には実ストレージＡは、実ストレージＡ内のストレージグループ２１０１ごとに“グループＩ／Ｏカウント２３０４÷最大Ｉ／Ｏ数２３０５”を算出し、さらに算出された値の平均値を求める（以下、この平均値をａと表記する）。さらに実ストレージＡは、仮想ストレージシステム１９０内の各実ストレージシステム１００から取得した寿命情報の平均値を算出する（以下、この平均値をｂと表記する）。【０２２４】
（ａ−ｂ）が所定の値以上の場合（ステップ９００２：Ｙｅｓ）、実ストレージＡが有するストレージグループ２１０１の（平均）残寿命と、他の実ストレージシステム１００が有するストレージグループ２１０１の（平均）残寿命との間で不均衡が生じており、かつ実ストレージＡが有するストレージグループ２１０１の（平均）残寿命が短いことを意味する。この場合には、実ストレージＡは実ストレージＡ内の一部の仮想論理ボリュームの移動を行うと決定し、ステップ９００３以降の処理を行う。逆に（ａ−ｂ）が所定の値未満の場合（ステップ９００２：Ｎｏ）、処理は終了する。【０２２５】
ステップ９００３：ここではまず、実ストレージＡは、実ストレージＡが有する論理ボリューム（及びその論理ボリュームがマップされている仮想論理ボリューム）の移動先の実ストレージシステム１００を決定する。実ストレージＡは、各実ストレージシステム１００から取得した寿命情報を参照し、最も小さな寿命情報を有する実ストレージシステム１００を論理ボリュームの移動先にする。以下では論理ボリュームの移動先に決定された実ストレージシステム１００を、実ストレージＢと呼ぶ。【０２２６】
続いて実ストレージＡは、移動する論理ボリュームの量）を、実ストレージＢから受領している空き記憶容量２０５７に基づいて決定する。ここで決定された量を「移動量」と呼ぶ。ただし空き記憶容量２０５７と同量の論理ボリュームが実ストレージＢに移動されると、実ストレージＢの記憶領域が枯渇するので、実ストレージＡはたとえば、空き記憶容量２０５７のｘ％に相当する量を移動量とするとよい（ｘは１０等の比較的小さな値である）。【０２２７】
さらに実ストレージＡは、実ストレージＡが有するストレージグループ２１０１のうち、更新度の最も大きなストレージグループ２１０１の実ページが割り当てられている論理ボリューム（及び仮想論理ボリューム）を移動対象と決定する。この条件に該当する論理ボリュームが複数あり、かつそれらの論理ボリュームの論理容量の合計が移動量を超過する場合、実ストレージＡは、更新度の最も大きなストレージグループ２１０１の実ページが最も多く割り当てられている論理ボリュームから優先的に、移動対象論理ボリュームとして選択する。【０２２８】
なお、移動対象となり得る論理ボリューム（更新度の最も大きなストレージグループ２１０１の実ページが割り当てられている論理ボリューム）が１つしかないが、その論理ボリュームの論理容量が移動量を超過している場合もありえる。この場合には論理ボリュームの移動はできない。次のステップ９００４ではこの判定が行われる。【０２２９】
ステップ９００４：実ストレージＡは、上で述べたように、ステップ９００３で選択された論理ボリュームが、実ストレージＢに移動可能か判定する。選択された論理ボリュームが実ストレージＢに移動できない場合（ステップ９００４：Ｎｏ）、処理は終了し、移動できる場合には次にステップ９００５が行われる。【０２３０】
ステップ９００５：実ストレージＡは、移動対象の論理ボリューム（及び仮想論理ボリューム）の情報を実ストレージＢに送る。この処理はステップ８０１６と同様の処理である。そして実ストレージＡは、実ストレージＢからの応答が返送されて来るまで待機する。【０２３１】
ステップ９００６：ここでは実ストレージＡは、実施例１で説明したステップ８０２１と同様の処理、つまり移行対象仮想論理ボリュームが接続されているサーバ１１０に、実ストレージＡが有するストレージポート１９７のストレージポート識別子２４００３を通知し、通知したストレージポート識別子２４００３の情報をサーバポート情報１９８から削除させる。【０２３２】
ステップ９００７：ここでは実ストレージＡは、実施例１で説明したステップ８０２２と同様の処理を行い、処理を終了する。【０２３３】
続いて実ストレージＢで行われる処理を説明する。ステップ９０１１では先に述べたとおり、実ストレージＡから寿命情報と空き容量の送信を依頼された各実ストレージシステム１００（実ストレージＢも含まれる）が、実ストレージシステム１００内のストレージグループ２１０１のうち、フラッシュストレージで構成される全ストレージグループ２１０１の更新度の平均値を算出し、算出された平均値と空き記憶容量２０５７を実ストレージＡに返送する。その後実ストレージＢは、実ストレージＡから情報が送信されて来るまで待機する。【０２３４】
ステップ９０１２：実ストレージＢは、実ストレージＡがステップ９００５で送信した情報を受領し、仮想論理ボリュームと、現論理ボリュームの定義を行う。ステップ９０１２の処理は、実施例１で説明したステップ８００３とほとんど同じである。ただしステップ９０１２では、仮想ストレージ記憶容量２０５３、総実ストレージ記憶容量２０５４、総空き記憶容量２０５５の情報の設定は行われない。ここでは容量（プール容量等）の増加は発生しないからである。【０２３５】
ステップ９０１３：実ストレージＢは、実施例１で説明したステップ８００４と同じ処理、つまりサーバ１１０にサーバポート情報１９８への情報設定を行わせる。【０２３６】
ステップ９０１４：実ストレージＢは実ストレージＡに、移行対象仮想論理ボリュームの定義やサーバ１１０への情報設定が完了したことを通知する。これは実施例１で説明したステップ８００５と同様の処理である。ステップ９０１４が行われると、実ストレージＡではステップ９００６が行われる。【０２３７】
ステップ９０１５：実ストレージＢは、実ストレージＡから処理完了の通知（ステップ９００７）が返ってくると、移行対象仮想論理ボリュームのコピー処理を開始する。これはステップ８００７と同様の処理である。コピー処理の終了後、実ストレージＢのシステムウェアレベリング部４６００の処理は終了する。【０２３８】
以上が変形例の説明である。変形例に係る仮想ストレージシステムでは、実ストレージシステムの追加時に、更新度の大きなストレージグループの実ページが割り当てられている論理ボリューム（及びその論理ボリュームが対応付けられている仮想論理ボリューム）を、追加された実ストレージシステムに移行する。また仮想ストレージシステム内の各ストレージグループの更新度が等しくなるように、実ストレージ間での（仮想）論理ボリュームの移動を行う。これにより、各ストレージ装置の長寿命化を図っている。【０２３９】
なお、上で説明した例では、実ストレージシステムが計数したストレージグループのライト回数（グループＩ／Ｏカウント２３０４）に基づいて、（仮想）論理ボリュームの移動要否の判定や、移動対象の（仮想）論理ボリュームの選択が行われている。しかし別の実施形態として、ストレージ装置１６０が内部でフラッシュメモリの消去回数を計数し、ストレージコントローラに消去回数を通知する機能を有している場合、実ストレージシステムは、ライト回数（グループＩ／Ｏカウント２３０４）に代えて、ストレージ装置１６０から取得した消去回数を用いることで、移動対象の論理ボリュームを選択してもよい。
【実施例２】
【０２４０】
続いて実施例２の説明を行う。実施例２における情報システムのハードウェア構成は、実施例１における情報システムと同様であるので、図示は略す。【０２４１】
実施例２と実施例１の相違点の１つは、実施例２に係る仮想ストレージシステム１９０では、１論理ボリュームに、複数の実ストレージシステム１００の実ページが割り当てられて良い点である。実施例２における共有メモリ２２０内に定義される情報は、実施例１で説明したものとほぼ同様だが、下記の点で異なる。【０２４２】
実施例２に係る実ストレージシステム１００は、実施例１で説明した他実ストレージシステム情報２０７０に代えて、他実ストレージシステム情報２０７０’を有する。図２４は、他実ストレージシステム情報２０７０’の形式である。他実ストレージシステム情報２０７０’は、実施例１で説明した他実ストレージシステム情報２０７０と同様の情報だが、他実ストレージシステム情報２０７０’には、他実ストレージシステム情報２０７０の有する情報に加えて、他実ストレージ記憶容量２０７４、他空き記憶容量２０７５が含まれる。他実ストレージ記憶容量２０７４、他空き記憶容量２０７５は他実ストレージシステム識別子２０７２と同様に、仮想ストレージシステム１９０内に存在する実ストレージシステム１００毎に存在する情報で、それぞれ、実ストレージシステム１００が有するプール容量２０５８と空き記憶容量２０５７と同じ値が格納される。なお、図２４では、他実ストレージシステム識別子２０７２−ｋで特定される実ストレージシステム１００のために設けられている他実ストレージ記憶容量２０７４と他空き記憶容量２０７５をそれぞれ、他実ストレージ記憶容量２０７４−ｋ、他空き記憶容量２０７５−ｋと表記している。また以下の説明においては、ある実ストレージシステム（仮に「実ストレージＸ」と呼ぶ）のために設けられている他実ストレージ記憶容量２０７４と他空き記憶容量２０７５のことをそれぞれ、「実ストレージＸの他実ストレージ記憶容量２０７４」、「実ストレージＸの他空き記憶容量２０７５」と呼ぶ。【０２４３】
また、実施例２では、ストレージグループ情報の内容も実施例１で説明したストレージグループ情報２３００と異なる。図２５に、実施例２における実ストレージシステム１００が有するストレージグループ情報２３００’のフォーマットを示す。ストレージグループ情報２３００’には、実施例１で説明したストレージグループ情報２３００に含まれる情報に加えて、使用中ページリスト２２００’が含まれる。【０２４４】
使用中ページリスト２２００’は、実ストレージシステム１００が有する管理対象ストレージグループ内の実ページのうち、他の実ストレージシステム１００で使用されている実ページを管理するための情報である。使用中ページリスト２２００’には他の実ストレージシステム１００で使用されている実ページの実ページ情報２１００へのポインタが格納される。他の実ストレージシステム１００で使用されている実ページが複数ある場合、ストレージグループ情報２３００’は複数の使用中ページリスト２２００’を有する。また、別の実施形態として、空きページ管理ポインタ２２００によって構成される空き実ページ情報キューのように、他の実ストレージシステム１００で使用されている実ページの実ページ情報２１００が、リンクリスト構造で管理されるようにしてもよい。【０２４５】
実施例２と実施例１ではさらに、論理ボリューム情報に違いがある。実施例２における論理ボリューム情報は、実施例１における論理ボリューム情報２０００とフォーマットは同じである。そのため以下の説明において、実施例２における論理ボリューム情報についても、「論理ボリューム情報２０００」と表記し、また図示は略す。【０２４６】
ただし、実施例２では実ページポインタ２００４に格納される情報の内容が、実施例１で説明したものと異なる。実施例２における実ページポインタ２００４にはまず、その実ページが格納されている実ストレージシステム１００の識別子が格納され、さらにその実ページの実ページ情報２１００の内容のうち、ストレージグループ識別子２１０４と実ページアドレス２１０２が格納される。実施例２における論理ボリュームには、複数の実ストレージシステム１００の実ページが割り当てられることがあるためである。【０２４７】
実施例２において、ストレージコントローラ２００によって実行されるプログラムは、実施例１で説明したものと同様で、リード処理実行部４０００’、ライト要求受付部４１００’、ライトアフタ処理実行部４２００’、実ストレージシステム追加処理部４３００’、コピー処理部４４００’が実行される。実施例１と同様、これらのプログラムはストレージコントローラ２００のメモリ２７０に格納される（図示は略す）。以下、これらのプログラムで行われる処理の説明を行う。なお、以下の説明では、実施例１と同様に、「自ストレージ」、「他ストレージ」という用語が用いられることがあるが、これらの用語の意味は実施例１で説明したものと同じである。【０２４８】
図１６と図２６を用いて、リード処理実行部４０００’の処理の流れを説明する。リード処理実行部４０００’が行う処理は、実施例１で説明したリード処理実行部４０００とほとんど同じで、少なくともステップ５０００〜ステップ５００６は図１６に記載のものと同じである。以下では図２６を用いて、リード処理実行部４０００’の後半部の処理（具体的にはステップ５００７以降の処理）の説明を行う。なお、リード処理実行部４０００’の後半部の処理は、実施例１で説明した処理と共通する点が多いため、以下では実施例１で説明したリード処理実行部４０００と異なる点を中心に説明する。【０２４９】
ステップ５００７は、実施例１で説明したものと同じである。続いてステップ５００８では、要求されたデータがキャッシュ２１０に存在しない場合（ステップ５００８：Ｎｏ）、リード処理実行部４０００’は次にステップ１５０００を行う。要求されたデータがキャッシュ２１０に存在する場合には（ステップ５００８：Ｙｅｓ）、リード処理実行部４０００’は次にステップ５００９を行って、処理を終了する。ステップ５００９は実施例１で説明したものと同じである。【０２５０】
ステップ１５０００：リード処理実行部４０００’は、リード要求で指定された領域を含む仮想ページに割り当てられている実ページの実ページポインタ２００４を参照することで、その実ページが自ストレージの有する実ページか判定する。具体的にはリード処理実行部４０００’は、実ページポインタ２００４に格納されている、実ストレージシステム１００の識別子が自ストレージの識別子か否かを判定する。自ストレージが有する実ページの場合（ステップ１５０００：Ｙｅｓ）、リード処理実行部４０００’はステップ５０１０〜ステップ５０１３を行い、その後処理を終了する。ステップ５０１０〜ステップ５０１３は、実施例１で説明したものと同じである。【０２５１】
ステップ１５００１：リード要求で指定された領域を含む実ページが他ストレージの実ページの場合（ステップ１５０００：Ｎｏ）、ステップ１５００１が行われる。ステップ１５００１ではリード処理実行部４０００’は、リード要求で指定された領域を含む実ページを有する実ストレージシステム１００にリード要求を発行する。ここで発行されるリード要求（コマンド）にはリード対象領域のアドレスが含まれるが、リード処理実行部４０００’は実ページポインタ２００４に格納されている、ストレージグループ識別子２１０４と実ページアドレス２１０２をリード対象領域のアドレスとして指定したコマンドを作成する。そしてリード処理実行部４０００’は、作成されたコマンドを、リード対象の実ページを有する実ストレージシステム１００に対して発行する。【０２５２】
ステップ１５００２：リード処理実行部４０００’は、リード要求発行先の実ストレージシステム１００から、処理完了の報告及びリードデータが返却されるまで待機する。処理完了の報告を受領した後、リード処理実行部４０００’はステップ５０１２、ステップ５０１３を実行した後、処理を終了する。【０２５３】
なお、このリード要求を受け取った実ストレージシステム１００は、指定されたストレージグループ識別子２１０４と実ページアドレス２１０２から、アクセス対象のストレージ装置１６０とアクセス対象アドレスを計算して、そのストレージ装置１６０に、計算したアドレスを指定した読み出し要求を発行する。この後実ストレージシステム１００は、読み出したデータを、要求元の実ストレージシステム１００に送り、処理を完了する。【０２５４】
続いて図１８と図２７を用いて、ライト要求受付部４１００’の処理フローを説明する。ライト要求受付部４１００’が行う処理の多くは、実施例１におけるライト要求受付部４１００と同様である。少なくともステップ６０００〜６００７は、図１８に記載のものと同じである。以下では図２７を用いて、後半部の処理（具体的にはステップ６００８以降の処理）について、特に実施例１で説明したライト要求受付部４１００の処理と異なる点を主に説明する。なお、図２７の説明において、自ストレージのことを「実ストレージＡ」と呼ぶこともある。なお図２７に記載の処理は、特に断りのない限り、実ストレージＡのライト要求受付部４１００’が行う。【０２５５】
ライト要求受付部４１００’は、実施例１におけるライト要求受付部４１００が行うステップ６０１０とステップ６０１１の代わりに、以下のステップを実行する。【０２５６】
ステップ１６０００：ライト要求で指定された領域に対して実ページが割り当てられていない場合（ステップ６００９：Ｎｏ）、ステップ１６０００が実行される。ライト要求受付部４１００’は、総空き記憶容量２０５５と空き記憶容量２０５７から、仮想ページサイズを減算する。また、他の実ストレージシステム１００へ、総空き記憶容量２０５５と実ストレージＡの空き記憶容量（他の実ストレージシステム１００が有する他実ストレージシステム情報２０７０’の中の、実ストレージＡの他空き記憶容量２０７５）から、仮想ページサイズを減算するよう要求し、他の実ストレージシステム１００で処理が完了するまで待機する。【０２５７】
この要求を受け取った他ストレージは、総空き記憶容量２０５５を、仮想ページ容量分だけ減算し、さらに実ストレージＡの他空き記憶容量２０７５を、仮想ページ容量分だけ減算する。この処理が終了した後、他ストレージは要求を発行した実ストレージシステム１００（実ストレージＡ）に処理完了を報告する。【０２５８】
ステップ１６００１：ライト要求受付部４１００’は、総空き記憶容量２０５５をチェックして、必要があれば、新たな実ストレージシステム１００の追加を要求する。【０２５９】
ステップ１６００２：ライト要求受付部４１００’は、実ストレージＡに空きページがあるか判定する。具体的には、実ストレージＡの有するストレージシステム情報２０５０の中の、空き記憶容量２０５７が負の値になっていなければ空きページがあり、負値であれば空きページがないことを意味する。実ストレージＡに空きページがある場合、つまり空き記憶容量２０５７が負の値でない場合には（ステップ１６００２：Ｎｏ）、ライト要求受付部４１００’は次にステップ６０１２を実行する。ステップ６０１２、ステップ６０１３は、実施例１で説明したものと同じである。【０２６０】
ステップ１６００３：ライト要求受付部４１００’は他実ストレージシステム情報２０７０’の他空き記憶容量２０７５を参照することで、他ストレージに空き実ページがあるか（他空き記憶容量２０７５が１仮想ページ以上のサイズである実ストレージシステム１００があるか）をチェックする。空き実ページのある実ストレージシステム１００が見つからなかった場合には、サーバ１１０にエラーを返却してライト処理は終了する。【０２６１】
空き実ページのある実ストレージシステム１００が見つかった場合、ライト要求受付部４１００’は空き実ページのある実ストレージシステム１００に空き実ページの割り当てを依頼する（ステップ１６００４）。ただしステップ１６００４の説明の前に、まず空き実ページのある実ストレージシステム１００が見つかった場合にステップ１６００３で行われる処理について説明する。以下の説明では、空き実ページの割り当てが依頼される実ストレージシステム１００を「実ストレージＢ」と表記する。【０２６２】
まず実ストレージＡのライト要求受付部４１００’が行う処理を説明する。ライト要求受付部４１００’は、空き記憶容量２０５７を０にする。さらにライト要求受付部４１００’は、仮想ストレージシステム１９０内の他の各実ストレージシステム１００に対して、実ストレージＡの他空き記憶容量２０７５を０に、実ストレージＢの他空き記憶容量２０７５を１ページ分減算するよう要求し、各実ストレージシステム１００から完了が帰ってくるまで待機する。【０２６３】
そして、この要求を受け取った各実ストレージシステム１００は、他実ストレージシステム情報２０７０’内の情報の更新を行う。具体的には各実ストレージシステム１００は、実ストレージＡの他空き記憶容量２０７５を０に、実ストレージＢの他空き記憶容量２０７５を１ページ分減算し、この処理の終了後、実ストレージＡに完了を報告する（ただし、実ストレージＢの他空き記憶容量２０７５は、実ストレージＢ以外の実ストレージシステム１００だけが更新する）。以上が、ステップ１６００３で実ストレージＡが行う処理、及び実ストレージＡから要求を受け付けた各実ストレージシステム１００が行う処理の内容である。【０２６４】
ステップ１６００４：実ストレージＡのライト要求受付部４１００’は、実ストレージＢに実ページを割り当てる要求を発行し、実ストレージＢからの応答を待つ。実ストレージＢで実ページの確保が行われると、実ストレージＡには応答情報として実ページの情報が返却される。実ページの情報とは具体的には、実ページポインタ２００４に格納されるべき情報、つまり実ページを有する実ストレージシステム１００の識別子、実ページの存在するストレージグループ２１０１の識別子、ストレージグループ２１０１内のアドレスである。実ストレージＡのライト要求受付部４１００’は実ストレージＢから応答情報を受領すると、受け取った情報を実ページポインタ２００４に設定する。【０２６５】
一方、実ストレージＡから実ページを割り当てる要求を受け取った実ストレージＢは、適当なストレージグループ情報２３００を選択して、空きページ管理ポインタ２２００から、空き実ページを１つ選択し、選択された空き実ページの情報（この空き実ページの属する実ストレージシステムの識別子及びストレージグループの識別子、そして実ページアドレス２１０２）を、実ストレージＡに送る。なお、ここで選択された実ページが、実ストレージＢまたは他の実ストレージシステム１００で使用されないようにするために、実ストレージＢはここで選択された空き実ページの実ページ情報２１００を空き実ページ情報キューから外し、この実ページ情報２１００へのポインタを使用中ページリスト２２００’に格納しておく。また実ストレージＢは、ストレージシステム情報２０５０内の空き記憶容量２０５７を１ページ分減算する。【０２６６】
この後実ストレージＡのライト要求受付部４１００’は、ステップ６０１３を実行し、処理を終了する。【０２６７】
図２８は、実施例２におけるライトアフタ処理実行部４２００’の処理フローである。ライトアフタ処理実行部４２００’では、実施例１で説明したライトアフタ処理実行部４２００の行う処理に加えて、以下のステップが実行される。なお、ここではライトアフタ処理実行部４２００’によってデステージされるデータが、論理ボリューム上の１仮想ページ内に収まるサイズのデータである場合の例を説明する。【０２６８】
ステップ１７０００：ライトアフタ処理実行部４２００’は、ステップ７０００の後、ステップ１７０００を実行する。ステップ１７０００ではライトアフタ処理実行部４２００’は、キャッシュ２１０上のライトデータに付加されている情報をもとに、ステップ７０００で選択したライトデータの書き込み先仮想ページを特定し、さらにその仮想ページに設定されている実ページポインタ２００４を特定する。そしてライトアフタ処理実行部４２００’は、特定された実ページポインタ２００４の内容から、仮想ページに割り当てられている実ページが、自ストレージに存在するものか判定する。この判定は、たとえばステップ１５０００で行われるものと同様のものである。【０２６９】
自ストレージが有する実ページである場合（ステップ１７０００：Ｙｅｓ）、ライトアフタ処理実行部４２００’は、実施例１と同様の処理（ステップ７００１〜ステップ７００５）を行う。【０２７０】
ステップ１７００１：ステップ７０００で選択したライトデータの書き込み先が他の実ストレージシステム１００の実ページの場合（ステップ１７０００：Ｎｏ）、ライトアフタ処理実行部４２００’はその実ストレージシステム１００に、実ページポインタ２００４に格納されている、ストレージグループ識別子２１０４と実ページアドレス２１０２をライト先アドレスとして指定した、書き込み要求を発行する。【０２７１】
ステップ１７００２：ライトアフタ処理実行部４２００’は、ステップ１７００１で発行したライト要求が完了するまで待機する。ライト要求が完了した後、ライトアフタ処理実行部４２００’はステップ７００５を実行し、処理を終了する。【０２７２】
また、この書き込み要求を受け取った実ストレージシステム１００は、書き込み要求で指定されているストレージグループ識別子２１０４と実ページアドレス２１０２から、ライトデータの書き込み先となるストレージ装置１６０及びストレージ装置１６０内のアドレスを算出する。その後は、図２０のステップ７００２〜７００４と同様の処理を行い、ストレージ装置１６０への書き込みが完了した後、要求元の実ストレージシステム１００に完了報告を行い、処理を終了する。【０２７３】
続いて実施例２における実ストレージシステム追加処理部４３００’の処理フローを説明する。ただし、実ストレージシステム追加処理部４３００’の実行する処理は、実施例１で説明した実ストレージシステム追加処理部４３００の処理（図２１）と殆ど同じであるため、以下では図２１を参照しながら相違点を説明する。【０２７４】
まず、追加された実ストレージシステム１００で実行される処理は、実施例１で説明したもの（図２１  ステップ８００１〜ステップ８００７）と同じである。続いて、追加された実ストレージシステム１００から通知を受け取る他の実ストレージシステム１００（これを「実ストレージＡ」と呼ぶ）の処理は、実施例１で説明したもの（図２１  ステップ８０１１〜ステップ８０２２）とほぼ同様であるが、ステップ８０１５の処理が異なる。【０２７５】
実ストレージＡの実ストレージシステム追加処理部４３００’はステップ８０１５で、他実ストレージシステム情報２０７０’に、追加された実ストレージシステム１００の情報を追加する。具体的にはまず、追加された実ストレージシステム１００の実ストレージシステム識別子と、追加された実ストレージシステム１００が有するストレージポート１９７のストレージポート識別子が追加される。これらの処理は実施例１のステップ８０１５と同じ処理である。【０２７６】
さらに実ストレージＡの実ストレージシステム追加処理部４３００’は、追加された実ストレージシステム１００のプール容量２０５８を、追加された実ストレージシステム１００の他実ストレージ記憶容量２０７４と他空き記憶容量２０７５に設定する（ステップ８０１５’）。これ以外の点は、実施例１で説明したものと同じである。【０２７７】
続いてコピー処理部４４００’の処理フローの説明を行う。コピー処理部４４００’が行う処理は、実施例１で説明したコピー処理部４４００の処理と多くの部分で共通しているので、以下では相違点を中心に説明する。【０２７８】
なお、本実施例では、追加された実ストレージシステム１００がデータのコピー先論理ボリューム（現論理ボリューム）に対して割り当てる実ページが、追加された実ストレージシステム１００の有する実ページである例を説明する。ただし、仮想ストレージシステム１９０に属する任意の実ストレージシステム１００の実ページが割り当てられてもよい。また以下では、追加された実ストレージシステム１００を「実ストレージＡ」と表記し、実ストレージＡに仮想論理ボリュームを移行する実ストレージシステム１００を「実ストレージＢ」と表記する。【０２７９】
実ストレージＡのコピー処理部４４００’が実行する処理は、実施例１で説明したもの（ステップ１４０００〜ステップ１４０１０）とほとんど同じであるが、ステップ１４００９とステップ１４０１０で、以下の処理が行われる点が異なる。【０２８０】
ステップ１４００９で実ストレージＡはまず、実施例１と同じ処理を行う。その後実ストレージＡは、仮想ストレージシステム１９０内の各実ストレージシステム１００に、実ストレージＡの他空き記憶容量２０７５から、移行対象の論理ボリュームの論理容量を減算するよう指示する。【０２８１】
続いてステップ１４０１０で、実ストレージＢ（旧論理ボリュームを有する実ストレージシステム１００）から完了報告を受け取った後、実ストレージＡは仮想ストレージシステム１９０内の各実ストレージシステム１００に、実ストレージＢの他空き記憶容量２０７５に、移行対象の論理ボリュームの論理容量を加算するよう指示する。これら以外の処理は、実施例１で説明したものと同じため、コピー処理部４４００’の処理フローの図示は略す。【０２８２】
図２９は、追加された実ストレージシステム１００が発行する実ページの読み出し要求（ステップ１４００１）を受け取った実ストレージシステム１００（つまり旧論理ボリュームを有する実ストレージシステム１００）のコピー処理部４４００’で行われる処理の流れを示している。なお、以下の説明では、旧論理ボリュームを有する実ストレージシステム１００のことを「要求先ストレージ」と呼ぶ。【０２８３】
ステップ１４０１１：コピー処理部４４００’は、論理ボリューム情報２０００の実ページポインタ２００４を参照することで、指定された仮想ページに実ページが割り当てられているか判定する。実ページが割り当てられている場合、次にステップ１５０００’が行われる。【０２８４】
ステップ１４０１２：実ページが割り当てられていない場合、コピー処理部４４００’は要求元の実ストレージシステム１００にヌル値を返送し、処理を完了する。この処理は実施例１で説明したものと同じである。【０２８５】
ステップ１５０００’：ステップ１５０００’、１５００１’、１５００２’は、リード処理実行部４０００’が行う処理（ステップ１５０００〜ステップ１５００２）と同様である。つまりステップ１５０００’ではコピー処理部４４００’は、リード要求で指定された領域を含む実ページは、要求先ストレージが有する実ページか判定する。要求先ストレージが有する実ページの場合（ステップ１５０００’：Ｙｅｓ）、コピー処理部４４００’はステップ１４０１３〜ステップ１４０１５を行うことで、要求先ストレージ内のストレージ装置１６０からデータを読み出して、要求元の実ストレージシステム１００にデータを返送する。ステップ１４０１３〜ステップ１４０１５は、実施例１で説明したものと同じである。【０２８６】
ステップ１５００１’：ステップ１５０００’の判定で、リード要求で指定された領域を含む実ページは、要求先ストレージが有する実ページでなかった場合（ステップ１５０００：Ｎｏ）、コピー処理部４４００’は、リード要求で指定された領域を含む実ページを有する実ストレージシステム１００にリード要求を発行する。この処理はリード処理実行部４０００’がステップ１５００１で行う処理と同様である。【０２８７】
ステップ１５００２’：ステップ１５００１’の後、コピー処理部４４００’はリード要求を発行した実ストレージシステム１００からリードデータが返送されて来るまで待機する。その後リードデータを要求元の実ストレージシステム１００にデータを返送し（ステップ１４０１５）、処理を終了する。【０２８８】
以上が実施例２の説明である。実施例２に係る仮想ストレージシステムは、実施例１に係る仮想ストレージシステムと同様の機能を有することに加え、論理ボリュームの仮想ページには、仮想ストレージシステム内の任意の実ストレージシステムが有するページを割り当て可能に構成されている。複数の（実）ストレージシステムが設けられる情報システムにおいて、各ストレージシステムの空き容量の合計は、ユーザが望む（作成したい）ボリュームの容量以上存在するが、個々の実ストレージのそれぞれには、ユーザが望む容量の空き領域が存在していない場合があり得る。実施例２に係る仮想ストレージシステムは、複数の実ストレージシステムが有する空き領域（空きページ）を用いて、論理ボリュームを定義できるため、上に述べたような場合であっても、記憶領域を有効に活用できる。【０２８９】
以上、本発明の実施例を説明したが、これらは、本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。すなわち、本発明は、他の種々の形態でも実施する事が可能である。【０２９０】
上で説明した実施例では、実ストレージシステムが仮想ストレージシステムに追加されると、サーバに仮想ストレージ記憶容量２０５３（つまり仮想ストレージシステムのプールの容量）と総実ストレージ記憶容量２０５４と総空き記憶容量２０５５（仮想ストレージシステムのプールの空き容量）の情報が通知された。しかし、必ずしもこれらの全ての情報が通知されなくともよい。たとえばプールの空き容量（総空き記憶容量２０５５）だけが通知されてもよい。【０２９１】
また、上で説明した実施例では、仮想ストレージ記憶容量２０５３や総空き記憶容量２０５５の値として、プールに属するストレージ装置１６０の容量（または空き容量）を仮想ページの量に換算した値を用いる例を説明した。しかし必ずしもプールの容量や空き容量を仮想ページの量に換算する必要はない。ストレージシステム（仮想ストレージシステムに含まれる実ストレージシステム）は、プールに属するストレージ装置１６０の容量（または空き容量）を、プールの容量（または空き容量）として計数してサーバに提供してもよい。【０２９２】
また、上で説明した実施例では、実ストレージシステムが仮想ストレージシステムに追加された時点で、実ストレージシステムからサーバに、仮想ストレージシステムのプールの空き容量の情報等が通知されたが、別の実施形態として、実ストレージシステムが自発的にこれらの情報をサーバに送る代わりに、サーバからの問い合わせがあった時点で、これらの情報を実ストレージシステムからサーバに通知してもよい。【０２９３】
また、上で説明した各実施例では、実ストレージシステムがキャッシュ２１０と共有メモリ２２０とメモリ２７０という複数種類のメモリを有していた。しかし別の実施形態として、ストレージ装置が単一種類のメモリのみを有する構成であっても良い。たとえばメモリ２７０だけを有する構成でもよい。その場合、全ての情報（サーバ１１０からのライトデータ、仮想論理ボリューム情報等の管理情報等）が同じメモリ２７０に格納される。【０２９４】
また、実ストレージシステムのハードウェア構成は、サーバと同様の構成であってもよい。たとえば上の実施例で説明した実ストレージシステムに代えて、パーソナルコンピュータ等の汎用のコンピュータ（以下、これを単に「コンピュータ」と呼ぶ）に複数のストレージ装置１６０を搭載（または接続）し、コンピュータ上で、上で説明した各種プログラム（リード処理実行部４０００や実ストレージシステム追加処理部４３００等）を実行させてもよい。この場合、コンピュータがサーバから（仮想）論理ボリュームに対するＩ／Ｏ要求を受け付けて、ストレージ装置へのデータの格納、またはストレージ装置からのデータの読み出しを行う。【０２９５】
また、コンピュータ上で、上で説明した各種プログラムを実行させる構成の場合、上で述べた実施例で説明した、実ストレージシステム上で実行される各種プログラムとサーバで実行されるプログラムがいずれも、同一コンピュータ上で実行されるように構成されていてもよい。この場合、たとえば仮想マシンを形成するハイパーバイザプログラムをコンピュータ上で実行することで、コンピュータ上に少なくとも、サーバで実行されるプログラム（アプリケーションプログラム１１００等）を実行する仮想マシンと、上の実施例で説明した各種プログラム（図１５に記載の各プログラム）を実行する仮想マシンとを形成するとよい。
【符号の説明】
【０２９６】
１００  実ストレージシステム
１１０  サーバ
１２０  ＳＡＮ
１６０  ストレージ装置
１８０  ストレージ管理サーバ
１９０  仮想ストレージシステム
１９５  サーバポート
１９７  ストレージポート
１９８  サーバポート情報
２００  ストレージコントローラ
２１０  キャッシュ
２２０  共有メモリ
２５０  接続機構
２６０  プロセッサ
２７０  メモリ
２７５  バッファ
２０５０  ストレージシステム情報
２０４０  仮想論理ボリューム情報
２０７０  他実ストレージシステム情報
２０００  論理ボリューム情報
２３００  ストレージグループ情報
２５００  ストレージ装置情報
４０００  リード処理実行部
４１００  ライト要求受付部
４２００  ライトアフタ処理実行部
４３００  実ストレージシステム追加処理部
４４００  コピー処理部
２１００  実ページ情報
【図１】
2017149581.tif 000003
【図２】
2017149581.tif 000004
【図３】
2017149581.tif 000005
【図４】
2017149581.tif 000006
【図５】
2017149581.tif 000007
【図６】
2017149581.tif 000008
【図７】
2017149581.tif 000009
【図８】
2017149581.tif 000010
【図９】
2017149581.tif 000011
【図１０】
2017149581.tif 000012
【図１１】
2017149581.tif 000013
【図１２】
2017149581.tif 000014
【図１３】
2017149581.tif 000015
【図１４】
2017149581.tif 000016
【図１５】
2017149581.tif 000017
【図１６】
2017149581.tif 000018
【図１７】
2017149581.tif 000019
【図１８】
2017149581.tif 000020
【図１９】
2017149581.tif 000021
【図２０】
2017149581.tif 000022
【図２１】
2017149581.tif 000023
【図２２】
2017149581.tif 000024
【図２３】
2017149581.tif 000025
【図２４】
2017149581.tif 000026
【図２５】
2017149581.tif 000027
【図２６】
2017149581.tif 000028
【図２７】
2017149581.tif 000029
【図２８】
2017149581.tif 000030
【図２９】
2017149581.tif 000031
【図３０】
2017149581.tif 000032
【手続補正書】
【提出日】平成30年8月27日(2018.8.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データを記憶する記憶デバイスと、前記データのリード及びライトを制御するコントローラと、を有する複数のノードを備えたストレージシステムにおいて、
各々の前記ノードは、
同じ識別子を有することにより仮想ストレージシステムを形成し、
前記記憶デバイスの記憶領域を割り当ててプールボリュームを形成するとともに、前記プールボリュームを割り当てて、情報処理装置に提供する仮想ボリュームを形成し、
前記記憶デバイスの容量と、利用可能な容量とを管理し、
前記ノードは、
他のノードの利用可能な容量の情報を取得し、 
自ノードの利用可能な容量の情報と、前記取得した他ノードの利用可能な容量の情報とに基づいて、前記プールボリュームへの割り当て変更の要否を判断し、 
割り当て変更要と判断した場合に、前記自ノードである第１のノードは、他のノードである第２のノードの記憶デバイスの記憶領域を、第１のノードのプールボリュームに追加割り当てする 
ことを特徴とするストレージシステム。
【請求項２】
請求項１において、
前記割り当て変更要と判断した場合、前記他の複数のノードの空き容量を参照して、そのノードに割り当てを変更可能かどうか判定することを特徴とするストレージシステム。
【請求項３】
請求項２において、
前記第１のノードは、前記第２のノードに前記空き容量がある場合に、前記第２のノードに割り当て変更を依頼し、
前記第２のノードの割り当てた記憶領域情報を受信し、前記記憶領域情報を前記自ノードの記憶領域情報に設定することを特徴とするストレージシステム。
【請求項４】
請求項１において、
前記ノードは、
前記取得した容量の情報に基づいて、前記仮想ストレージシステムが提供する仮想ストレージ記憶容量と、前記各ノードの記憶容量の合計値である総ストレージ記憶容量と、総空き記憶容量と、自及び他ノードの記憶容量と、を共有することを特徴とするストレージシステム。
【請求項５】
請求項１において、
前記複数のノードの各々が、複数の仮想マシンを形成するハイパーバイザプログラムを実行する
ことを特徴とするストレージシステム。
【請求項６】
請求項５に記載のストレージシステムと、前記情報処理装置と、を有し、
前記複数の仮想マシンは、仮想論理ボリュームが提供される情報処理システムのプログラムを稼働させる仮想マシンと、前記データの読み書きを行うプログラムを稼働させる仮想マシンと、を含む
ことを特徴とするシステム。
【請求項７】
データを記憶する記憶デバイスと、前記データのリード及びライトを制御するコントローラと、を有する複数のノードを備えたストレージシステムの制御方法において、
各々の前記ノードは、
同じ識別子を有することにより仮想ストレージシステムを形成し、
前記記憶デバイスの記憶領域を割り当ててプールボリュームを形成するとともに、前記プールボリュームを割り当てて、情報処理装置に提供する仮想ボリュームを形成し、
前記記憶デバイスの容量と、利用可能容量とを管理し、
前記ノードは、
他のノードの利用可能な容量の情報を取得し、
自ノードの利用可能な容量の情報と、前記取得した他ノードの利用可能な容量の情報とに基づいて、前記プールボリュームへの割り当て変更の要否を判断し、
割り当て変更要と判断した場合に、前記自ノードである第１のノードは、他のノードである第２のノードの記憶デバイスの記憶領域を、第１のノードのプールボリュームに追加割り当てする
ことを特徴とするストレージシステムの制御方法。
【請求項８】
請求項７において、
前記割り当て変更要と判断した場合、前記他の複数のノードの空き容量を参照して、そのノードに割り当てを変更可能かどうか判定することを特徴とするストレージシステムの制御方法。
【請求項９】
請求項８において、
前記第１のノードは、前記第２のノードに前記空き容量がある場合に、前記第２のノードに割り当て変更を依頼し、
前記第２のノードの割り当てた記憶領域情報を受信し、前記記憶領域情報を前記自ノードの記憶領域情報に設定することを特徴とするストレージシステムの制御方法。
【請求項１０】
請求項７において、
前記ノードは、
前記取得した容量の情報に基づいて、前記仮想ストレージシステムが提供する仮想ストレージ記憶容量と、前記各ノードの記憶容量の合計値である総ストレージ記憶容量と、総空き記憶容量と、自及び他ノードの記憶容量と、共有することを特徴とするストレージシステムの制御方法。
【請求項１１】
請求項７において、
前記複数のノードの各々が、複数の仮想マシンを形成するハイパーバイザプログラムを実行する
ことを特徴とするストレージシステムの制御方法。
【請求項１２】
請求項１１において、
前記複数のノードは、仮想論理ボリュームが提供される情報処理システムのプログラムを稼働させる仮想マシンと、前記データの読み書きを行うプログラムを稼働させる仮想マシンと、を稼働する
ことを特徴とするシステムの制御方法。
【請求項１３】
請求項２において、
前記割り当てを行う第２のノードの選択は、前記取得した他のノードの利用可能な容量の情報に基づいて行う
ことを特徴とするストレージシステム。
【請求項１４】
請求項１において、
前記第１のノードが情報処理システムからライトデータを受信し、前記ライトデータを、前記第１のノードのプールボリュームに割り当てた前記第２のノードの記憶領域に格納する
ことを特徴とするストレージシステム。
【請求項１５】
請求項１において、
前記ノードは、自ノードのプールボリュームの使用中記憶領域情報を含むプールボリューム情報を有しており、
前記使用中記憶領域情報は、前記自ノードのプールボリュームに割り当てられた他のノードの記憶領域の情報が含まれている
ことを特徴とするストレージシステム。
【請求項１６】
請求項１において、
前記ノードは、他のノードから割当要求を受信し、そのノードの利用可能な記憶領域を前記割当要求を発行したノードのプールボリュームに割り当てる
ことを特徴とするストレージシステム。
【請求項１７】
請求項１において、
前記第１のノードは、ライト要求を受け、ライト要求にかかるライトデータを、自ノードのプールボリュームに割り当てられた前記第２のノードの記憶デバイスに格納するとともに前記ライト要求の発行元に応答する
ことを特徴とするストレージシステム。
【請求項１８】
請求項１７において、
前記第１のノードは、前記発行元への応答の前に、前記ライトデータを自ノードのキャッシュメモリに格納し、前記応答の後に、前記キャッシュメモリ内のライトデータを、前記第２のノードの記憶デバイスに格納する
ことを特徴とするストレージシステム。
【国際調査報告】
2017149581.tif 000033
2017149581.tif 000034