なお、以下の実施例において、ストレージシステム内で実行される処理について、「プログラム」を主語として説明を行う場合がある。実際には、ストレージシステムが有するプロセッサ(CPU)がプログラムを実行することによって、プログラムに記述された処理が行われるため、処理の主体はプロセッサ(CPU)である。ただし説明が冗長になることを防ぐため、プログラムを主語にして処理の内容を説明することがある。また、プログラムの一部または全ては専用ハードウェアによって実現されてもよい。また、以下で説明される各種プログラムは、プログラム配布サーバや計算機が読み取り可能な記憶メディアによって提供され、プログラムを実行する各装置にインストールされてもよい。計算機が読み取り可能な記憶メディアとは、非一時的なコンピュータ可読媒体で、例えばICカード、SDカード、DVD等の不揮発性記憶媒体である。
図1は、実施例1における情報システムの構成を示す。情報システムは、一つ以上の実ストレージシステム100、一つ以上のサーバ110、実ストレージシステム100とサーバ110とを接続するSAN(Storage Area Network)120、ストレージ管理サーバ180を有する。サーバ110は、サーバポート195によって、実ストレージシステム100は、ストレージポート197によって、SAN120に接続される。サーバ110は、一つ以上のサーバポート195をもつ。
実ストレージシステム100は、SAN120に接続される一つ以上のストレージポート197と、サーバ110からのリードライト要求を実行する1以上のストレージコントローラ200と、サーバ110からのライトデータを格納する複数のストレージ装置160と、頻繁にリードライトされるデータを格納するキャッシュ210と、制御情報を格納する共有メモリ220と、これらの装置を結合する接続機構250を含む。
ストレージ装置160にはいくつかの種類がある。たとえば磁気ディスクを記憶媒体とするHDD(Hard Disk Drive)や、あるいはフラッシュメモリを記憶媒体として使用するフラッシュストレージが、ストレージ装置160として用いられてよい。また、フラッシュストレージに用いられるフラッシュメモリにはいくつかの種類があり、高価格、高性能、消去可能回数の多いSLCとこれに対し、低価格、低性能、消去可能回数の少ないMLCがある。
本実施例では、実ストレージシステム100が有するストレージ装置160は、HDDまたはフラッシュストレージである例を説明する。なお、フラッシュストレージとして、SLCタイプのフラッシュメモリを用いるものは、「フラッシュストレージ(SLC)」と表記し、MLCタイプのフラッシュメモリを用いるものは、「フラッシュストレージ(MLC)」と表記する。ただし別の実施形態として、相変化メモリなどの新しい記憶媒体を用いたストレージ装置160が用いられてもよい。
サーバ110は、パーソナルコンピュータ(PC)等の汎用の計算機で、サーバポート195の他に、プロセッサやメモリ(非図示)を有する。サーバ110は、ユーザが使用するアプリケーションプログラム1100等を実行するための計算機で、SAN120経由で、実ストレージシステム100が提供するボリュームにアクセスする。また、実ストレージシステム100同士も、互いにSAN120経由で、データの送受信を行う。SAN120はSCSIコマンドが転送可能なプロトコルに基づくデータ伝送が可能なネットワークで、例えば、Fibre Channel等が伝送媒体として用いられる。
ストレージコントローラ200は、サーバ110から発行されたリードライト要求を処理するプロセッサ260、プログラムや情報を保管するメモリ270、そしてバッファ275を有する。バッファ275は、後述する冗長データを生成する際、生成に必要な情報や、生成した冗長データを格納するために使用される。またバッファ275は、キャッシュ210に格納されたデータを、恒久的に格納する記憶装置(ストレージ装置160)に書き込む際に、一時的なデータの格納領域としても使用される。
キャッシュ210、共有メモリ220は、通常DRAMなどの揮発メモリで構成されるが、バッテリーなどにより不揮発化されているものとする。また、本実施例では、高信頼化のため、キャッシュ210、共有メモリ220はそれぞれ2重化されており、キャッシュ210、共有メモリ220に書き込まれるデータはいずれも、少なくとも2つの領域に書き込まれるものとする。ただ、本発明は、キャッシュ210、共有メモリ220が不揮発化されていなくても、2重化されていなくとも、有効である。
キャッシュ210には、ストレージ装置160に格納されたデータの中で、ストレージコントローラ200からよくアクセスされるデータが格納される。ストレージコントローラ200は、サーバ110からライト要求を受け付けた時、ストレージ装置160に書き込むよう受け取ったデータを、キャッシュ210に書き込んだ時点で、ライト要求の完了の通知をサーバ110に返却する。キャッシュ210に書き込まれたデータは、適当なタイミングでストレージ装置160に格納(デステージ)される。ただし別の実施形態として、サーバ110から受け取ったデータをストレージ装置160に格納した後に、ライト要求の完了の通知をサーバ110に返却するようにしてもよい。
続いて、本実施例に係る実ストレージシステム100における、記憶領域の管理方法について説明する。
本実施例に係るストレージコントローラ200は、複数のストレージ装置160の中のいずれか1つが故障しても、そのストレージ装置160のデータを回復できるRedundant Arrays of Inexpensive/Independent Disks/Device (RAID)機能を有する。ストレージコントローラ200は、実ストレージシステム100が有するストレージ装置160のいくつか(たとえば4つ、8つ等)を用いて1つのRAIDを構成する。RAIDを構成するストレージ装置160の集合をストレージグループ2101と呼ぶ。本実施例に係る実ストレージシステム100では、1つのストレージグループ2101は同一種類のストレージ装置160から構成される。なお、ストレージコントローラ200がRAID機能をもっていなくとも本発明は有効である。
さらに、本実施例に係るストレージコントローラ200は、ストレージグループ2101以外の記憶空間として、論理ボリュームと仮想論理ボリュームを定義することができる。まず論理ボリュームについて説明する。ストレージコントローラ200は論理ボリュームを複数定義可能である。各論理ボリュームには実ストレージシステム100内で一意な識別番号が付され、これを論理ボリューム識別子(あるいは、論理ボリュームID)と呼ぶ。
本実施例に係る実ストレージシステム100は、容量仮想化機能を持っている。論理ボリュームは、容量仮想化機能により形成される記憶空間である。論理ボリュームを定義した時点では、論理ボリューム上の各記憶領域に対して書き込まれるデータの格納先は定まっていない。論理ボリュームへのライト要求を受け付けたときにはじめて、ストレージコントローラ200はライト対象領域(ライト要求で指定されている領域)に書き込まれるデータの格納先を決定する。以下では、ライト対象領域(ライト要求で指定されている領域)に書き込まれるデータの格納先を決定する処理のことを、「割り当てる」と表現する。
図2を用いて、論理ボリュームとストレージグループ2101の関係について説明する。ストレージコントローラ200は論理ボリューム(図中の“LV0”)に割り当てられる記憶領域の管理の為に、論理ボリュームを複数の仮想ページ(図2では、VP0、VP1、VP2)という所定単位の領域に分割して管理している。論理ボリュームに記憶領域を割り当てる際、ストレージコントローラ200はこの仮想ページ毎に記憶領域を割り当てる。各仮想ページには論理ボリューム内で一意な識別番号が付される。この識別番号を仮想ページ番号と呼ぶ(あるいは「仮想ページ#」と表記されることもある)。また、仮想ページ番号がnの仮想ページは、“仮想ページ#n”と表記される。
仮想ページは、ストレージコントローラ200内部で論理ボリュームの記憶空間の管理のためにのみ用いられる概念である。サーバ110は論理ボリュームの記憶領域にアクセスする際には、LBA(Logical Block Address)などのアドレスを用いて、アクセス対象の記憶領域を特定する。サーバ110が論理ボリュームへのアクセス要求を発行した時、ストレージコントローラ200は、サーバ110が指定したLBAを仮想ページ番号及び仮想ページ内の相対アドレス(仮想ページ先頭からのオフセットアドレス)に変換する。この変換は、LBAを仮想ページサイズで除算することで実現できる。仮に仮想ページのサイズがP(MB)とすると、論理ボリュームの先頭位置からP(MB)分の領域が仮想ページ#0として管理され、その次のP(MB)分の領域が仮想ページ#1として管理される。そしてそれ以降も同様に、P(MB)の領域がそれぞれ、仮想ページ#2、#3…として管理される。
ストレージコントローラ200が論理ボリュームを定義した直後は、各仮想ページに物理記憶領域は割り当てられていない。ストレージコントローラ200は、サーバ110から仮想ページに対するライト要求を受け付けた時点ではじめて、その仮想ページに対して物理記憶領域を割り当てる。仮想ページに割り当てられる物理記憶領域は実ページと呼ばれる。実ページは、ストレージグループ2101上の記憶領域である。図2では、仮想ページ#0(VP0)に実ページRP0が割り当てられている状態を表している。
実ページは、ストレージグループ2101の複数のストレージ装置160の記憶領域を用いて形成される領域である。図2において、160-1,160-2,160-3,160-4はそれぞれ、各ストレージ装置160の記憶領域を表している。また、図2で例示しているストレージグループ2101のRAIDタイプは、RAID4の3D+1P構成(データドライブ3台、パリティドライブ1台で構成されるRAID)である。
ストレージコントローラ200は、ストレージグループ2101に属する各ストレージ装置160の記憶領域を、ストライプブロックと呼ばれる複数の固定サイズの記憶領域に分割して管理する。たとえば図2において、0(D),1(D),2(D)…、またはP0,P1…と記載されているそれぞれの領域が、ストライプブロックを表している。
図2で、ストライプブロックのうち、P0,P1…と記載されているストライプブロックは、RAID機能により生成される冗長データ(パリティ)の格納されるストライプブロックであり、これを「パリティストライプ」と呼ぶ。一方、0(D),1(D)、2(D)…と記載されているストライプブロックは、サーバ110から書き込まれるデータ(冗長データではないデータ)が格納されるストライプブロックである。このストライプブロックのことは、「データストライプ」と呼ばれる。パリティストライプには、複数のデータストライプを用いて生成される冗長データが格納される。
以下、パリティストライプと、当該パリティストライプに格納される冗長データを生成するために用いられるデータストライプのセットのことを、「ストライプライン」と呼ぶ。本実施例に係る実ストレージシステム100の場合、たとえばパリティストライプP0には、データストライプ0(D),1(D),2(D)を用いて生成される冗長データ(パリティ)が格納される関係にあり、データストライプ0(D),1(D),2(D)とパリティストライプP0は、同一のストライプラインに属する。
つまり1つのストライプラインに属する各ストライプブロックは、ストレージ装置(160-1,160-2,160-3,160-4)上の同じ位置(アドレス)に存在する。ただし別の実施形態として、同一ストライプラインに属する各ストライプブロックが、フラッシュボリューム上の異なるアドレスに存在する構成が採用されてもよい。そして本実施例に係る実ストレージシステム100では、図2に示されるように、実ページ(たとえばRP0、RP1)は、1または複数のストライプラインから構成される。
またストレージコントローラ200は、ストレージグループ2101の各記憶領域(ブロック)を、一次元のアドレスで特定可能にする記憶空間として管理する。以下ではこの記憶空間を「ストレージグループの記憶空間」と呼び、この記憶空間上のアドレスを「ストレージグループのアドレス」または「ストレージグループアドレス」と呼ぶ。ストレージグループアドレスの例を図2に示す。ストレージグループの記憶空間は図2に示されているように、ストレージグループ2101内の各ストライプが、1つずつ順に配置された記憶空間である。ストレージグループ内の先頭のストライプブロックのストレージグループアドレスが0と定められ、以下各ストライプブロックに、たとえば図2に示されるようにアドレスが付される。ストレージグループのアドレスは、実ページとストレージグループ2101上の記憶領域の対応関係を管理するために用いられる。
また実ページが仮想ページに割り当てられる場合、データストライプ(0(D),1(D)等)のみが割り当てられ、パリティストライプは割り当てられない。そのため、実ページ上のライトデータの格納される領域の合計サイズは、仮想ページのサイズと等しい関係にある。つまり、(実ページのサイズーパリティ格納領域のサイズ)=仮想ページサイズ、の関係にある。図2ではRAID4の構成例についてのみ示されているが、たとえばストレージグループ2101のRAIDタイプがRAID1の場合には、実ページサイズは、仮想ページサイズ(仮想ページ容量2600)の2倍になる。
仮想ページ内の各領域と、実ページ内の各領域との関係(マッピング)は、図2に示されている通りである。つまり、実ページの先頭ストライプからパリティを除いた領域(0(D)、1(D)、2(D))が、仮想ページの先頭領域に割り当てられている。それ以降も同様に、実ページの2番目以降の各ストライプからパリティを除いた領域(3(D)、4(D)、5(D)…)が、順番に仮想ページの領域に割り当てられる。
このように、仮想ページ内の各領域と実ページ内の各領域とのマッピングは規則的にマッピングされているため、実ストレージシステム100は、サーバ110からのアクセス要求で指定されている論理ボリューム上のアクセス位置(LBA)から仮想ページ番号及び仮想ページ内の相対アドレス(仮想ページ先頭からのオフセットアドレス)を求めることで、当該アクセス位置に対応付けられているストレージ装置160及びそのストレージ装置160内の領域(データストライプ)を一意に算出できる。さらにアクセス位置に対応付けられているデータストライプに加え、そのデータストライプと同一ストライプラインに属するパリティストライプも一意に定まる。ただし、仮想ページ内の各領域と実ページ内の各領域とのマッピングは、ここで説明したマッピング方法に限定されるものではない。
なお、1つの論理ボリューム中の各仮想ページに割り当てられる実ページは、必ずしも同一ストレージグループ2101内の実ページに限定されない。仮想ページ#0に割り当てられる実ページと、仮想ページ#1に割り当てられる実ページが、それぞれ異なるストレージグループ2101内の実ページであってもよい。
実ストレージシステム100は、仮想ページに割り当てられる領域(実ページ)を有するストレージグループ2101の集合を定義して管理する。このストレージグループ2101の集合を「プール」と呼ぶ。実ストレージシステム100が仮想ページに実ページを割り当てる際、プールに所属しているストレージグループ2101を1つ選択し、そのストレージグループ2101の有する実ページを割り当てる。
仮想ページに割り当てられる実ページは、まだ他の仮想ページに割り当てられていない実ページでなければならない。仮想ページに割り当てられていない実ページのことを、「空きページ」または「空き実ページ」と呼ぶ。プールに空きページがなくなると、仮想ページへの実ページの割り当てができなくなるため、実ストレージシステム100はプールの空きページ量を常に管理している。
続いて、仮想ストレージシステムと実ストレージシステムの関係、そして仮想論理ボリュームと論理ボリュームの関係について説明する。本実施例に係る情報システムには、一つ以上の実ストレージシステム100から構成される仮想ストレージシステム190が少なくとも一つ存在する。サーバ110からは、仮想ストレージシステム190が、単一のストレージシステムとして認識される。
実ストレージシステム100は、装置の識別子(実ストレージシステム識別子と呼ばれる)を持つ。この識別子は、各実ストレージシステム100で異なる。さらに本実施例に係る実ストレージシステム100は、同じ仮想ストレージシステム190に属する各実ストレージシステム100は、仮想ストレージ識別子と呼ばれる識別子を有する。同じ仮想ストレージシステム190に属する各実ストレージシステム100は、同じ仮想ストレージ識別子を有する。
仮想論理ボリュームは、サーバ110が認識し、アクセス可能な記憶空間である。仮想論理ボリュームにも論理ボリュームと同様、識別番号が付される。この識別番号は、“仮想論理ボリューム識別子”と呼ばれる。あるいは、仮想論理ボリュームIDまたはVVIDと呼ばれることもある。仮想論理ボリューム識別子は、仮想ストレージシステム190内で一意な識別番号である。
仮想論理ボリュームは、少なくとも1つの論理ボリュームに対応付けられる(「マップされる」と表現されることもある)。図3に例を示す。図3において、VV0とVV1は仮想論理ボリュームを表し、LV1-0及びLV2-0は論理ボリュームを表している。LV1-0は、実ストレージシステム#1(100-1)が有する論理ボリュームで、LV2-0は実ストレージシステム#2(100-1)が有する論理ボリュームである。VV0は論理ボリュームLV1-0に対応付けられており、VV1は論理ボリュームLV2-0に対応付けられている。また図3では、仮想論理ボリュームVV0及びVV1は、実ストレージシステム#1内に定義されている。
サーバ110がたとえば仮想論理ボリュームVV0に対してI/O要求を発行すると、そのI/O要求を受領した実ストレージシステム(図3では実ストレージシステム#1(100-1))は、そのI/O要求を、仮想論理ボリュームVV0に対応付けられている論理ボリュームLV1-0に対するI/O要求に変換する。
仮想論理ボリュームのサイズは、仮想論理ボリュームに対応付けられている論理ボリュームのサイズと同じである。また本実施例では、実ストレージシステム100がサーバ110から仮想論理ボリュームのあるアドレス(たとえばアドレスx)に対するアクセス要求を受け付けると、実ストレージシステム100はそのアクセス要求を、仮想論理ボリュームのアドレスxに対するI/O要求に変換する。
仮想論理ボリュームは、仮想論理ボリュームが定義されている実ストレージシステム100以外の実ストレージシステム100が有する論理ボリュームに対応付けられてもよい。図3の例では、仮想論理ボリュームVV1は論理ボリュームLV2-0に対応付けられている。その場合サーバ110が仮想論理ボリュームVV1に対してI/O要求を発行すると、実ストレージシステム#1はそのI/O要求を、論理ボリュームLV2-0に対するI/O要求に変換する。具体的には、実ストレージシステム#1は、実ストレージシステム#2のLV2-0に対してI/O要求を発行する。
このように、本実施例に係る仮想ストレージシステム190では、ユーザ(管理者)は仮想論理ボリュームとこの仮想論理ボリュームに対応付けられる論理ボリュームとを、それぞれ異なる実ストレージシステム100に定義してもよい。そのため、仮想論理ボリュームの定義された実ストレージシステム(図3の例では実ストレージシステム#1)のプールの空きページ量が不足している場合には、別の実ストレージシステム100(図3の例では実ストレージシステム#2)の論理ボリュームを仮想論理ボリュームに対応付けることで、仮想ストレージシステム190内のいずれかの実ストレージシステム100に空きページがあれば、仮想論理ボリュームを定義することができる。
また、本実施例に係る仮想ストレージシステム190は、仮想ストレージシステム190に属する複数の実ストレージシステム100の有するページ量の合計と空きページ量の合計を、それぞれ仮想ストレージシステム190のプールの容量、仮想ストレージシステム190のプールの空きページ量として管理し、必要に応じてサーバ110またはストレージ管理サーバ180に仮想ストレージシステム190のプールの容量、仮想ストレージシステム190のプールの空きページ量とを通知する機能を有する(正確には、仮想ストレージシステム190に属する各実ストレージシステム100が、仮想ストレージシステム190のプールの容量、仮想ストレージシステム190のプールの空きページ量を管理する。そして、仮想ストレージシステム190に属する任意の実ストレージシステム100が、サーバ110またはストレージ管理サーバ180に仮想ストレージシステム190のプールの容量、仮想ストレージシステム190のプールの空きページ量を通知して良い)。
仮想ストレージシステムの概念を持たない従来のストレージシステムが複数存在する情報システムにおいては、各ストレージシステムが自身の空きページ量をサーバ110またはストレージ管理サーバ180に通知し、ユーザ(または管理者)は、各ストレージシステムの空きページ量をもとに、論理ボリュームを定義する場所(ストレージシステム)を決定する、あるいはストレージシステムの増設の要否を決定する。
一方、本実施例に係る仮想ストレージシステム190では、仮想ストレージシステム190内のいずれかの実ストレージシステム100に空きページがあれば、(仮想)論理ボリュームを定義可能である。そのため仮想ストレージシステム190は、仮想ストレージシステム190という、1台の(仮想的な)ストレージシステムのプールの空きページ量だけをユーザ(管理者)に通知し、ユーザ(または管理者)は1台の仮想ストレージシステム190のプールの空き容量を監視・把握すればよい。
仮想論理ボリュームが定義されている実ストレージシステム100以外の実ストレージシステム100が有する論理ボリュームに、仮想論理ボリュームが対応付けられる構成は、実ストレージシステム100間でデータを移行する場合にも用いられる。図4を参照しながらデータ移行の例を説明する。
図4の(a)では、実ストレージシステム#2に仮想論理ボリュームVV12と、これに対応付けられている論理ボリュームLV2-0が存在する。仮想論理ボリュームVV12のVVIDは1である。
論理ボリュームLV2-0のデータを実ストレージシステム#1の論理ボリューム(たとえば論理ボリュームLV1-1)に移行する場合の構成を図4(b)に示す。なお、この時、論理ボリュームLV1-1と論理ボリュームLV2-0のサイズは等しくなければならない。
移行の際、実ストレージシステム#1は仮想論理ボリュームVV11を作成し、仮想論理ボリュームVV11のVVIDを仮想論理ボリュームVV12と同じく1とする。そして実ストレージシステム#1は論理ボリュームLV2-0のデータを論理ボリュームLV1-1にコピーし、また仮想論理ボリュームVV11に論理ボリュームLV1-1を対応付ける。そして実ストレージシステム#2は仮想論理ボリュームVV12を削除する。
サーバ110は仮想論理ボリュームを認識する際、仮想論理ボリュームの情報を実ストレージシステム100から取得する。ここで実ストレージシステム100から取得される仮想論理ボリュームの情報には、VVIDと仮想ストレージシステム識別子が含まれる。仮想論理ボリュームVV11と仮想論理ボリュームVV12のVVID及び仮想ストレージシステム識別子はいずれも同じであるため、サーバ110は仮想論理ボリュームVV11と仮想論理ボリュームVV12が単一ストレージシステムの同じボリュームと認識する(つまり、VV11とVV12がいずれも仮想ストレージシステム190内のボリュームで、かつ同一のボリュームと認識する)。そのためデータが実ストレージシステム#1から実ストレージシステム#2に移動し、仮想論理ボリュームVV12が削除されても、サーバ110はアクセスを停止することなく、業務を継続できる(サーバ110は仮想論理ボリュームVV12の代わりに、VV11にアクセスする)。
なお、仮想論理ボリュームとこの仮想論理ボリュームに対応付けられる論理ボリュームとが、それぞれ異なる実ストレージシステム100に定義されていても、サーバ110は(仮想)論理ボリュームのデータにアクセスできる。そのため、必ずしも論理ボリューム間でデータ移行を行う必要はないが、仮想論理ボリュームに対応付けられる論理ボリュームが仮想論理ボリュームと同じ実ストレージシステム100に存在する方が、アクセス性能の点で有利である。そのため、仮想論理ボリュームに対応付けられる論理ボリュームは、仮想論理ボリュームと同じ実ストレージシステム100に置かれるように、構成が変更される方が望ましい。
また、図4(b)では仮想論理ボリュームVV11に、2つの論理ボリューム(LV1-1とLV2-0)が対応付けられている。本実施例に係る仮想ストレージシステム190は、論理ボリュームのデータ移行中もサーバ110からのI/O要求を受け付け可能にするため、一時的に1つの仮想論理ボリュームに2つの論理ボリュームが対応付けられることを許している。また実ストレージシステム100は実際には、上で説明したものとは若干異なる順序で移行処理を行う。これは論理ボリュームのデータ移行中もサーバ110から仮想論理ボリュームへのI/O要求を受け付け可能にするためである。データ移行処理の詳細は後述する。
また、以下の説明では、仮想論理ボリュームに対応付けられる2つの論理ボリュームのうち、データ移行元の論理ボリュームを“旧論理ボリューム”と呼び、データ移行先の論理ボリュームを“現論理ボリューム”と呼ぶ。図4の例では論理ボリュームLV2-0から論理ボリュームLV1-1にデータ移行が行われるが、この場合、論理ボリュームLV2-0が旧論理ボリュームで、論理ボリュームLV1-1が現論理ボリュームである。
続いて、サーバ110と実ストレージシステム100が有する管理情報の内容を説明する。図5は、サーバポート情報198のフォーマットである。サーバポート情報198は、サーバ110がメモリに格納している情報で、サーバポート195ごとに設けられる。またサーバポート情報198は、パス管理ソフト1981が実ストレージシステム100に読み書き要求を発行する際に、要求の送信に用いるサーバポート195とストレージポート197を特定するために用いる情報である。サーバ110は、実ストレージシステム100に読み書き要求を発行する際、ストレージシステムの識別子、(仮想)論理ボリュームの識別子、ストレージポートの識別子を指定する。このため、サーバポート情報198には、サーバポート識別子24000と、当該サーバポート195を経由してサーバ110がアクセス要求を発行する対象となる論理ボリュームの論理ボリューム識別子24001、この論理ボリュームを含むストレージシステム識別子24002、ストレージポート識別子24003が含まれる。サーバ110がアクセス要求を発行する対象となる論理ボリュームが複数存在する場合、複数の論理ボリューム識別子24001がサーバポート情報198に含まれる。
また当該論理ボリュームが複数のストレージポート197に接続されている場合、1つの論理ボリューム識別子24001に対して複数のストレージポート識別子24003が設定される。なお、本実施例では、ストレージシステム識別子24002には、仮想ストレージシステム190の識別子が設定される。論理ボリューム識別子24001には、仮想論理ボリュームの識別子が設定される。ストレージポート識別子24003には、仮想論理ボリュームが定義されている実ストレージシステム100のストレージポート197の識別子が設定される。
サーバ110の読み書き要求は、少なくとも仮想論理ボリュームの識別子、ストレージポート197の識別子を含む。またこれ以外の情報が読み書き要求に含まれていても良く、たとえば仮想ストレージシステムの識別子が含まれていてもよい。ストレージポート197の識別子は、リアルな値(実ストレージシステム100の持つストレージポート197の識別子)であるため、この要求を受け取る実ストレージシステム100が一意に決定される。また、本実施例では、仮想論理ボリュームへの読み書き要求を処理する実ストレージシステム100が変更されることがある、その際にも仮想論理ボリュームの識別子は変化せず、接続されたストレージポート197だけが変更される。
図6は、本実施例における実ストレージシステム100の共有メモリ220の中に格納される情報のうち、本実施例の説明で必要となる情報を示している。共有メモリ220には少なくとも、ストレージシステム情報2050、他実ストレージシステム情報2070、仮想論理ボリューム情報2040、論理ボリューム情報2000、実ページ情報2100、ストレージグループ情報2300、ストレージ装置情報2500が含まれる。
この中で、ストレージシステム情報2050は、図7に示すように、実ストレージシステム100及び仮想ストレージシステム190に関する情報で、実施例1では、仮想ストレージシステム識別子2051、実ストレージシステム識別子2052、仮想ストレージ記憶容量2053、総実ストレージ記憶容量2054、総空き記憶容量2055、実ストレージ記憶容量2056、空き記憶容量2057、プール容量2058を含む情報である。仮想ストレージシステム識別子2051は、当該実ストレージシステム100が含まれる仮想ストレージシステム190の識別子である。実ストレージシステム識別子2052は、当該実ストレージシステム100の識別子である。
仮想ストレージ記憶容量2053は、当該仮想ストレージシステム190のプールの容量である。総実ストレージ記憶容量2054は、仮想ストレージシステム190を構成する各実ストレージシステム100が有するストレージ装置160の容量の合計値である。総空き記憶容量2055は、仮想ストレージシステム190内プールの空き容量である。空き容量とは、プールの容量のうち、仮想ページに割り当てられていない実ページの容量の合計である。ただし本実施例では、プールの容量、空き容量は、プールに属するストレージ装置160の容量(または空き容量)を仮想ページの量に換算した値を用いる。たとえば仮想ストレージシステム190のプールに属するストレージグループ2101の容量の合計(言い換えれば実ページの総量)が200TBで、プールに属するストレージグループ2101のRAIDタイプがすべてRAID1の場合、仮想ページのサイズは実ページのサイズの半分なので、プールの容量(仮想ストレージ記憶容量2053)は100TBである。
実ストレージ記憶容量2056は、当該実ストレージシステム100中のストレージ装置160の記憶容量の合計値である。プール容量2058は、実ストレージシステム100のプールの容量である。空き記憶容量2057は、実ストレージシステム100のプールの空き容量である。そのため、各実ストレージシステム100の空き記憶容量2057の合計値は、総空き記憶容量2055に等しい。また、プール容量2058と空き記憶容量2057には、仮想ストレージ記憶容量2053と同様に、プールに属するストレージ装置160の容量を仮想ページの容量に換算した値が用いられる。
なお、本実施例では、各実ストレージシステム100内の全ストレージ装置160がプールに所属する場合の例を説明する。そのため、本実施例に係る仮想ストレージシステム190においては、仮想ストレージ記憶容量2053は、総実ストレージ記憶容量2054を仮想ページの容量に換算した値と等しい。また、プール容量2058は、実ストレージ記憶容量2056を仮想ページの容量に換算した値と等しい。
図8は、他実ストレージシステム情報2070の形式を示している。他実ストレージシステム情報2070は、仮想ストレージシステム識別子2071、他実ストレージシステム識別子2072、ストレージポート識別子2073を含む。仮想ストレージシステム識別子2071は、図7に含まれる仮想ストレージシステム識別子2051と同じで、当該実ストレージシステム100が含まれる仮想ストレージシステム190の識別子である。他実ストレージシステム識別子2072は、当該実ストレージシステム100を含む仮想ストレージシステム190に含まれる他の実ストレージシステムの識別子である。仮想ストレージシステム190に(n+1)台の実ストレージシステム100が含まれる場合、他実ストレージシステム情報2070にはn個の他実ストレージシステム識別子2072が含まれる。図8において、他実ストレージシステム識別子2072-kは、複数の他実ストレージシステム識別子2072のうちのk番目の識別子を表す。ストレージポート識別子2073は、他実ストレージシステム識別子2072で特定される実ストレージシステム100がもつストレージポート197の識別子である。ストレージポート識別子2073-kは、他実ストレージシステム識別子2072-kで特定される実ストレージシステム100がもつストレージポート197の識別子を表す。実ストレージシステム100が複数のストレージポート197を持つ場合、他実ストレージシステム識別子2072-kは複数存在する。
図14は、ストレージ装置情報2500のフォーマットである。ストレージ装置情報2500は、ストレージ装置160の属性情報を管理するための情報で、ストレージ装置160毎に作成される。以下、あるストレージ装置情報2500で管理されるストレージ装置160のことを、「管理対象ストレージ装置」と呼ぶ。ストレージ装置情報2500は、ストレージ装置識別子2501、ストレージタイプ2503、容量2504を有する。
ストレージ装置識別子2501は、管理対象ストレージ装置の識別子である。ストレージタイプ2503は、管理対象ストレージ装置の種類(これを「デバイスタイプ」と呼ぶ)である。本実施例では、ストレージ装置160の種類(デバイスタイプ)とは、ストレージ装置160に用いられている記憶媒体の種類を意味し、ストレージタイプ2503には、HDD、フラッシュストレージ(SLC)、フラッシュストレージ(MLC)のいずれかの情報が設定される。ストレージタイプ2503がHDDの場合、管理対象ストレージ装置は磁気ディスク(HDD)であり、ストレージタイプ2503がフラッシュストレージ(SLC)の場合、管理対象ストレージ装置は、SLCタイプのフラッシュメモリを用いたフラッシュストレージであり、またストレージタイプ2503がフラッシュストレージ(MLC)の場合、管理対象ストレージ装置は、MLCタイプのフラッシュメモリを用いたフラッシュストレージであることを意味する。
容量2504は、管理対象ストレージ装置の容量である。なお、本実施例では、1つのストレージグループ2101に属する各ストレージ装置160のストレージタイプ2503と容量2504は、等しいとする。
図12は、ストレージグループ情報2300のフォーマットである。ストレージグループ情報2300は、ストレージグループ2101ごとに存在する情報である。以下、あるストレージグループ情報2300によって管理されるストレージグループ2101のことを、「管理対象ストレージグループ」と呼ぶ。ストレージグループ情報2300は、ストレージグループ識別子2301、ストレージグループタイプ2302、ストレージ装置識別子2303、グループI/Oカウント2304、最大I/O数2305、空きページ管理ポインタ2200を有する。
ストレージグループ識別子2301は、管理対象ストレージグループの識別子である。ストレージグループタイプ2302には、管理対象ストレージグループのRAIDタイプの情報と、管理対象ストレージグループを構成するストレージ装置160のデバイスタイプの情報が設定される。なお、RAIDタイプの情報には、RAID-1~RAID-6等のデータ冗長化方式を表す情報に加え、ストレージグループ2101を構成するストレージ装置160の台数を示す情報も含まれる。ストレージ装置識別子2303は、管理対象ストレージグループを構成するストレージ装置160の識別子である。ストレージグループ2101には複数のストレージ装置160が属するので、ストレージグループ情報2300には、ストレージグループ2101に属する全てのストレージ装置160の識別子が、格納されている。
グループI/Oカウント2304は、ストレージコントローラ200が管理対象ストレージグループに対して発行したライト要求の合計値である。管理対象ストレージグループが定義された直後は、グループI/Oカウント2304の値は0である。
最大I/O数2305は、管理対象ストレージグループが受け付け可能なライト要求回数の最大値である。最大I/O数2305は管理対象ストレージグループに属するストレージ装置160が、フラッシュメモリを記憶媒体とするストレージ装置160の場合に用いられる。管理対象ストレージグループに属するストレージ装置160が、たとえばHDD等のように、更新可能回数に制限のないものである場合、最大I/O数2305にはNULLが設定される。
なお、ストレージ装置160の更新可能回数は、ストレージ装置160の種類(ストレージタイプ2503)毎に異なる。そのため、最大I/O数2305は、ストレージグループ2101を構成するストレージ装置160のデバイスタイプ(先に述べたとおり、これはストレージグループタイプ2302に含まれている情報である)ごとに異なっている。
空きページ管理ポインタ2200は、管理対象ストレージグループ内の実ページのうち、空き実ページを管理するための情報である。空きページ管理ポインタ2200の詳細は、後で図13を用いて説明する。
図9は、仮想論理ボリューム情報2040の形式である。仮想論理ボリューム情報2040は、仮想論理ボリュームの属性情報を管理するための情報で、仮想論理ボリュームごとに作成される。以下、ある仮想論理ボリューム情報2040によって属性情報が管理される仮想論理ボリュームのことを、「管理対象仮想論理ボリューム」と呼ぶ。仮想論理ボリューム情報2040は、仮想論理ボリューム識別子2085、接続ストレージポート識別子2084、現論理ボリューム識別子2086、旧論理ボリューム識別子2087、有効フラグ2088、コピーポインタ2089を含む。
仮想論理ボリューム識別子2085は、管理対象仮想論理ボリュームの識別子である。接続ストレージポート識別子2084は、管理対象仮想論理ボリュームが接続されるストレージポート197の識別子で、一つ以上存在する。接続ストレージポート識別子2084は、他の実ストレージシステム100のストレージポート197の識別子であってもよい。
現論理ボリューム識別子2086は、管理対象仮想論理ボリュームにマップされている現論理ボリュームを特定するための識別子である。現論理ボリューム識別子2086には、現論理ボリュームの論理ボリューム識別子に加え、現論理ボリュームが定義されている実ストレージシステム100の識別子と、現論理ボリュームの接続されているストレージポート197の識別子が含まれる。現論理ボリューム識別子2086に含まれている実ストレージシステム100の識別子が管理対象仮想論理ボリュームの定義されている実ストレージシステム100の識別子と同じであれば、現論理ボリュームは、管理対象仮想論理ボリュームの定義されている実ストレージシステム100と同じ実ストレージシステム100に定義された論理ボリュームということを意味する。
旧論理ボリューム識別子2087は、管理対象仮想論理ボリュームにマップされている旧論理ボリュームを特定するための識別子である。原則として、旧論理ボリュームから現論理ボリュームにデータを移行中の場合に、旧論理ボリューム識別子2087に有効な値が設定されている。旧論理ボリューム識別子2087に含まれる情報は現論理ボリューム識別子2086と同様で、旧論理ボリュームの論理ボリューム識別子に加え、旧論理ボリュームが定義されている実ストレージシステム100の識別子と、旧論理ボリュームの接続されているストレージポート197の識別子が含まれる。
有効フラグ2088は、旧論理ボリューム識別子2087の内容が有効か否かを示す情報である。有効フラグ2088の値が1(ON)の時、旧論理ボリューム識別子2087の内容が有効で、旧論理ボリュームから現論理ボリュームにデータを移行中であることを示す。有効フラグ2088の値が0(OFF)の時、旧論理ボリューム識別子2087には有効な情報が格納されていないことを表す。
コピーポインタ2089は、データ移行が、どこまで進んでいるかを示す情報である。本実施例に係る実ストレージシステム100は、旧論理ボリュームから現論理ボリュームへのデータ移動(コピー)を行う際、旧論理ボリュームの先頭仮想ページから順にコピーを行う。コピーポインタ2089にはコピー対象仮想ページの仮想ページ番号が格納される。コピーポインタ2089の初期値は0で、仮想ページのコピー処理が行われるたびに1加算される。なお、コピーポインタ2089に仮想ページ番号以外の情報が格納されてもよい。コピー対象の仮想ページが特定できる情報であればよいので、コピーポインタ2089に論理ボリュームのLBAが用いられてもよい。
図10は、論理ボリューム情報2000の形式を示したものである。論理ボリューム情報2000は論理ボリュームの属性情報を管理するための情報で、論理ボリュームごとに存在する情報である。以下、ある論理ボリューム情報2000によって属性情報が管理される論理ボリュームのことを、「管理対象論理ボリューム」と呼ぶ。論理ボリューム情報2000は、論理ボリューム識別子2001、論理容量2002、ストレージグループタイプ2003、実ページポインタ2004、累積I/O数2005を含む。
論理ボリューム識別子2001は、管理対象論理ボリュームの論理ボリューム識別子である。論理容量2002は、管理対象論理ボリュームの容量である。
ストレージグループタイプ2003は、管理対象論理ボリューム(の仮想ページ)に割り当てられる実ページの属するストレージグループ2101の属性(具体的にはストレージグループタイプ2302)である。もし管理対象論理ボリュームにストレージグループタイプ2003が設定されている場合には、実ストレージシステム100は管理対象論理ボリュームの各仮想ページに実ページを割り当てる時、ストレージグループ2101のストレージグループタイプ2302が、ストレージグループタイプ2003と同じストレージグループ2101を選択して、そのストレージグループ2101内の実ページを割り当てる。
ただし本実施例に係る実ストレージシステム100では、論理ボリュームにストレージグループタイプ2003は設定されなくてもよい。論理ボリュームにストレージグループタイプ2003が設定されていない場合(ストレージグループタイプ2003がNULLの場合)、実ストレージシステム100は管理対象論理ボリュームの各仮想ページに実ページを割り当てる時、任意のストレージグループ2101内の実ページを割り当てて良い。実施例1では特に断りのない限り、ストレージグループタイプ2003には情報が設定されない場合の例を説明する。
実ページポインタ2004は、管理対象論理ボリュームの仮想ページに割り当てられる実ページの管理情報(後述する実ページ情報2100)へのポインタである。論理ボリューム情報2000は、論理ボリュームが有する仮想ページの数と同数の実ページポインタ2004を持つ(なお、論理容量2002を仮想ページサイズで割ることで、論理ボリュームが有する仮想ページの数が得られる)。論理ボリューム情報2000内の複数の実ページポインタ2004のうち、先頭から(n+1)番目の実ページポインタ2004には、仮想ページ#nに割り当てられた実ページの実ページ情報2100へのポインタが格納される。
通常、容量仮想化においては、論理ボリュームの記憶容量を、実際の記憶媒体の容量よりも大きく見せる。このため、実ストレージシステム100内の仮想ページの総数のほうが、実ページの総数より大きいのが、一般的である。なお、本実施例においては、仮想ページの容量(仮想ページサイズ)は実ストレージシステム100の中で共通である場合の例を説明する。ただし、実ストレージシステム100にサイズの異なる仮想ページが存在するように構成されていても、本発明は有効である。
累積I/O数2005は、管理対象論理ボリュームに対して発行されたライト要求の数である。実ストレージシステム100は、サーバ110または他の実ストレージシステム100から管理対象論理ボリュームに対するライト要求を受領するたびに、累積I/O数2005に1を加算する。
図11は、実ページ情報2100の形式である。実ページ情報2100は、実ページの管理情報で、実ページ毎に存在する。以下の説明において、ある実ページ情報2100によって管理される実ページのことを、「管理対象ページ」と呼ぶ。実ページ情報2100は、ストレージグループ識別子2104、実ページアドレス2102、空きページポインタ2103、累積ページI/O数2105を含む。
ストレージグループ識別子2104は、管理対象ページが存在するストレージグループ2101の識別子である。実ページアドレス2102は、管理対象ページの存在する位置を表す情報である。実ページはストレージグループ2101内に存在するので、実ページアドレス2102に用いられる情報は、ストレージグループのアドレスである。具体的には実ページアドレス2102には、管理対象ページの先頭領域のアドレスが格納される。図2を参照しながら説明する。図2では、たとえばストライプブロックNが、実ページRP1の先頭に位置づけられ、ストライプブロックNのアドレス(ストレージグループアドレス)は“0x00015000”であるので(なお、“0x”は、数値が16進数表記であることを表す)、実ページRP1の実ページ情報2100の実ページアドレス2102には“0x00015000”が格納される。
累積ページI/O数2105には、管理対象ページに対して、外部(サーバ110または他の実ストレージシステム100)からライト要求が発行された回数が記録される。空きページポインタ2103は、管理対象ページが仮想ページに割り当てられていない場合(空きページである場合)に用いられる情報である。空きページの空きページポインタ2103には、他の空き実ページの実ページ情報2100へのポインタが格納される。後述するが、本実施例に係る実ストレージシステム100は、空き実ページをストレージグループ2101毎に管理する。そのため空きページポインタ2103には、同じストレージグループ2101に存在する空きページの実ページ情報2100へのポインタが格納される。
続いて、ストレージグループ情報2300に含まれる空きページ管理ポインタ2200について説明する。図13は、空きページ管理ポインタ2200によって管理される空き実ページの集合を表している。以下では、空き実ページに対応した実ページ情報2100を空き実ページ情報2100と呼ぶこともある。図13に示されるように、ストレージコントローラ200は各空き実ページ情報2100を、空きページポインタ2103で接続して、リンクリストとして管理する。またストレージコントローラ200は空きページ管理ポインタ2200に、リンクリストの先頭の空き実ページ情報2100へのポインタ(アドレス)を格納することで、空き実ページを管理している。このリンクリストを、空き実ページ情報キューと呼ぶ。空き実ページ情報キューは、ストレージグループ2101毎に存在する。
空きページ管理ポインタ2200には、先頭の空き実ページ情報2100へのポインタが格納される。これにより、空きページ管理ポインタ2200が、ストレージグループ2101内の1つの空き実ページの実ページ情報2100を指し示すことになる。次に、空きページ管理ポインタ2200に指し示された空き実ページ情報2100の中の空きページポインタ2103が次の空き実ページ情報2100を指す。図13では、最後の空き実ページ情報2100の空きページポインタ2103は、空きページ管理ポインタ2200を指し示しているが、ヌル(NULL)値でもよい。ストレージコントローラ200は、実ページが割り当てられていない仮想ページに対する書き込み要求を受け付けると、ストレージグループ2101のいずれか、例えば、空き実ページを最も多く有するストレージグループ2101に対応する空きページ管理ポインタ2200から、空き実ページを探し、仮想ページに割り当てる。
なお、上で説明した各種の管理情報に加えて、実ストレージシステム100は、プールに所属するストレージグループ2101を識別するための情報として、プール管理情報を有する。そして実ストレージシステム100は、管理者からストレージグループ2101をプールに所属させる指示を受け付けると、ストレージグループ2101の情報(ストレージグループ識別子等)をプール管理情報に格納することで、プールを定義、管理する。ただしプール管理情報は、プールに所属する全ストレージグループ2101の情報が登録されただけの情報であるので、プール管理情報の説明は略す。
また以下の説明においては、実ストレージシステム100が仮想ページに実ページを割り当てる際、実ストレージシステム100内のいずれかのストレージグループ2101を選択する例を説明する。これは本実施例に係る各実ストレージシステム100は、全ストレージ装置160(ストレージグループ2101)がプールに所属している前提だからである。実ストレージシステム100内の一部のストレージグループ2101だけがプールに所属している場合には、実ストレージシステム100が仮想ページに実ページを割り当てる際、プール管理情報を参照することでプールに所属しているストレージグループ2101を選択し、選択されたストレージグループの有する実ページを割り当てる必要がある。
次に、上で説明した管理情報を用いて、ストレージコントローラ200が実行する動作の説明を行う。まず、ストレージコントローラ200の動作を説明する。ストレージコントローラ200では、ストレージコントローラ200内のプロセッサ260がプログラムを実行することで、以下で説明するような各処理が行われる。そのプログラムは、メモリ270に格納されている。また、先に述べたとおり、以下の各処理の説明ではプログラムを主語として説明が行われることもあるが、それらはプロセッサ260またはストレージコントローラ200が実行するものと理解することができる。
図15は、メモリ270内に格納された、本実施例に関するプログラムが示されている。本実施例に関するプログラムは、リード処理実行部4000、ライト要求受付部4100、ライトアフタ処理実行部4200、実ストレージシステム追加処理部4300、コピー処理部4400である。
また、本実施例に係る仮想ストレージシステム190には複数の実ストレージシステム100が所属している。そしてある実ストレージシステム100(仮にこれを「実ストレージA」と呼ぶ)で実行されるプログラムの処理対象(たとえば論理ボリューム)は、実ストレージAの有する論理ボリュームであることもあれば、仮想ストレージシステム190内の他の実ストレージシステム100の有する論理ボリュームであることもあり得る。実ストレージAで実行されるプログラムの処理対象が、実ストレージAにある場合と、他の実ストレージシステム100にある場合とで、行うべき処理は異なるため、プログラムは処理対象が実ストレージAにあるか否か判定を行うことがある。以下で、各プログラムの処理フローの説明を行う際、プログラムが実行されている実ストレージシステム100のことを、「自ストレージ」と呼び、自ストレージ以外の実ストレージシステム100のことを、「他ストレージ」と呼ぶ。
図16と図17は、リード処理実行部4000の処理フローである。リード処理実行部4000は、自ストレージがサーバ110からリード要求を受け付けたときか、他ストレージからリード要求を受け付けたときに実行されるプログラムである。他ストレージからリード要求を受け付けたときには、ステップ5000からではなく、ステップ5007から実行が開始される。また、サーバ110がアクセス要求(リード要求またはライト要求)を発行する時、サーバ110はアクセス対象のボリュームを指定するために、アクセス要求に仮想論理ボリューム識別子を含める。一方実ストレージシステム100が他の実ストレージシステム100にアクセス要求を発行する時、サーバ110はアクセス対象のボリュームを指定するために、アクセス要求に論理ボリューム識別子を含める。
ステップ5000:リード処理実行部4000は、サーバ110から受け取ったリード要求で指定された仮想論理ボリュームに対応する仮想論理ボリューム情報2040を参照し、有効フラグ2088がONかチェックする。有効フラグ2088がOFFであれば(ステップ5000:Yes)、ステップ5003にジャンプする。
ステップ5001:リード処理実行部4000は、指定されたアドレスを仮想ページ番号に変換した値がコピーポインタ2089より大きいかをチェックする。指定されたアドレスを仮想ページ番号に変換した値がコピーポインタ2089より大きい場合は、次にステップ5002が行われ、小さい場合にはステップ5002はスキップされ、次にステップ5003が行われる。
ステップ5002:リード処理実行部4000は、旧論理ボリューム識別子2087で特定される論理ボリューム(つまり旧論理ボリューム)を含む実ストレージシステム100に、読み出し要求を発行する。旧論理ボリューム識別子2087には、論理ボリューム識別子と、論理ボリュームの接続されているストレージポート197の識別子が含まれる。リード処理実行部4000はこれらの情報を用いて、旧論理ボリュームを有する実ストレージシステム100のストレージポート197に対してリード要求を発行する。この後、ステップ5005が行われる。
ステップ5003:リード処理実行部4000は現論理ボリューム識別子2086を参照して、アクセス対象の論理ボリュームは自ストレージに含まれる論理ボリュームかをチェックし、そうであれば、ステップ5007へジャンプする。
ステップ5004:リード処理実行部4000は、現論理ボリューム識別子2086で指定された論理ボリュームを含む実ストレージシステム100に、論理ボリュームを指定した読み出し要求を発行する。
ステップ5005:リード処理実行部4000は、リード要求発行先の実ストレージシステム100からデータが送られてくるのを待つ。
ステップ5006:リード処理実行部4000は、送られてきたデータをサーバ110へ送り、処理を完了する。
ステップ5007:リード処理実行部4000は、現論理ボリューム識別子2086、あるいは、他ストレージから指定された論理ボリュームの識別子が示す論理ボリュームを処理対象とする。(他の実ストレージシステム100からリード要求を受け取った場合、本ステップから実行を開始する。)
ステップ5008:リード処理実行部4000は、リード要求で指定されたアドレスのデータがキャッシュ210に存在するかをチェックする。データがキャッシュ210に存在しない場合、次にステップ5010が行われる。データがキャッシュ210に存在する場合、次にステップ5009が行われる。
ステップ5009:リード処理実行部4000は、キャッシュ210上に存在するデータをサーバ110、あるいは、要求を発行した他ストレージに送る。この後、処理を完了する。
ステップ5010:この場合リード処理実行部4000は、指定されている論理ボリュームの識別子から、対応する論理ボリューム情報2000を認識する。さらにリード処理実行部4000は、リード要求で指定されたアドレスを含む仮想ページの実ページポインタ2004を参照することで、仮想ページに割り当てられている実ページの実ページ情報2100を取得する。
たとえばリード要求で指定されたアドレスを仮想ページ番号に変換した結果、仮想ページ番号がnだった場合、リード処理実行部4000は論理ボリューム情報2000内の(n+1)番目の実ページポインタ2004を参照することで実ページ情報2100を取得する。そしてリード処理実行部4000は実ページ情報2100を参照することで、対応するストレージグループ情報2300を認識し、RAIDタイプなどから、要求されたデータを含むストレージ装置160とそのアドレスを特定する。そしてリード処理実行部4000は、リード対象データの格納されているストレージ装置160に読み出し要求を発行する。
ステップ5011:リード処理実行部4000は、要求が完了してリードデータが返送されて来るまで待機する。
ステップ5012,ステップ5013:リード処理実行部4000は、送られてきたデータをキャッシュ210に格納する(ステップ5012)。さらにリード処理実行部4000はこのデータを、サーバ110、あるいは、要求を発行した他ストレージに送り(ステップ5013)、処理を完了する。
図18、図19は、ライト要求受付部4100の処理フローである。ライト要求受付部4100は、ストレージコントローラ200が、サーバ110からライト要求を受け付けたときか、他ストレージからライト要求を受け付けたときに実行される。他ストレージからライト要求を受け付けたときには、ステップ6000からではなく、ステップ6008から実行が開始される。
ステップ6000:ライト要求受付部4100(プロセッサ260)は、サーバ110からライト要求とライトデータを受け取る。
ステップ6001:ライト要求受付部4100は、受け取ったライト要求で指定されている仮想論理ボリュームに対応する仮想論理ボリューム情報2040を参照し、有効フラグ2088がONかチェックする。有効フラグ2088がOFFであれば(ステップ6001:Yes)、ステップ6002、ステップ6003はスキップされる。
ステップ6002:ライト要求受付部4100は、受け取ったライト要求で指定されているアドレスが、コピーポインタ2089より大きいかをチェックする。指定されているアドレスがコピーポインタ2089より小さい場合(ステップ6002:Yes)、次にステップ6004が行われる。
ステップ6003:ライト要求で指定されているアドレスがコピーポインタ2089以上の場合(ステップ6002:No)、ステップ6003が実行される。ステップ6003ではライト要求受付部4100は、旧論理ボリュームを有する実ストレージシステム100にライト要求を発行し、ライトデータを送る。旧論理ボリューム識別子2087には、論理ボリュームの識別子と、論理ボリュームの接続されているストレージポート197の識別子が含まれている。ライト要求受付部4100はこれらの情報を用いて、旧論理ボリューム識別子2087で特定される論理ボリューム(旧論理ボリューム)を有する実ストレージシステム100(のストレージポート197)に対してライト要求を発行する。この後、ライト要求受付部4100は、ステップ6004、ステップ6005をスキップし、ステップ6006を実行する。
ステップ6004:ライト要求受付部4100は、現論理ボリューム識別子2086を参照して、ライト対象の論理ボリュームが自ストレージに含まれる論理ボリュームかチェックし、そうであれば、ステップ6008へジャンプする。
ステップ6005:ライト要求受付部4100は、現論理ボリューム識別子2086で指定された論理ボリュームを含む実ストレージシステム100(他ストレージ)に、ライト要求を発行し、ライトデータを送る。このライト要求を受領した他ストレージでは、ライト要求受付部4100が実行されるが、その時ステップ6008から処理が開始される。
ステップ6006:ライト要求受付部4100は、ライト要求発行先の実ストレージシステム100からライト要求完了の通知が返却されるまで待つ。
ステップ6007:ライト要求受付部4100は、サーバ110に終了報告を行い、処理を完了する。
ステップ6008:ライト要求受付部4100は、他ストレージからライト要求とライトデータを受け取る。(他ストレージからライト要求を受け取った場合、本ステップから実行が開始される。)
ステップ6009:ライト要求受付部4100は、ライト要求で指定されたアドレスに対応する仮想ページに、実ページが割り当てられているか判定する。これは、ライト要求で指定されたアドレスを仮想ページ番号に変換し、それをもとに論理ボリューム情報2000の実ページポインタ2004を参照することで判定できる。たとえばライト要求で指定されたアドレスを仮想ページ番号に変換した結果、仮想ページ番号がnだった場合、ライト要求受付部4100は論理ボリューム情報2000内の(n+1)番目の実ページポインタ2004を参照し、この実ページポインタ2004に有効な値が格納されているか判定するとよい。実ページが割り当てられていれば、次にステップ6013が行われる。実ページが割り当てられていない場合には、次にステップ6010が行われる。
ステップ6010:ライト要求受付部4100は、総空き記憶容量2055と空き記憶容量2057を、仮想ページ容量分だけ減算する。またライト要求受付部4100は、他ストレージへ、総空き記憶容量2055の減算を要求し、この完了を待つ。(この要求を受け取った他ストレージは、総空き記憶容量2055を、仮想ページ容量分だけ減算し、その後要求発行元の実ストレージシステム100に、完了を報告する。これだけの処理であるので、この処理フローは省略する。)
ステップ6011:ライト要求受付部4100は、総空き記憶容量2055と空き記憶容量2057をチェックして、必要があれば、新たな実ストレージシステム100の追加を、ストレージ管理サーバ180に要求する。たとえば、総空き記憶容量2055または空き記憶容量2057が所定の閾値を下回っている場合に、新たな実ストレージシステム100の追加が要求されるとよい。ストレージ管理サーバ180に通知された情報を保守員が認識して、実ストレージシステム100の追加の要求がベンダに要求されると、情報システムに実ストレージシステム100が追加されることになる。
ステップ6012:ライト要求受付部4100は、適当なストレージグループ情報2300を選択して、空きページ管理ポインタ2200から、実ページ情報2100を1つ選択し、仮想ページに割り当てる。仮に、ここでのライト対象の仮想ページ番号がnの場合、ライト要求受付部4100は、ライト対象論理ボリュームの論理ボリューム情報2000内の複数の実ページポインタ2004のうち、先頭から(n+1)番目の実ページポインタ2004に、確保された実ページの実ページ情報2100へのポインタを登録する。
ステップ6013:ライト要求受付部4100は、受け取ったデータをキャッシュ210に格納する。またライト要求受付部4100は、ライト対象論理ボリュームの論理ボリューム情報2000内の累積I/O数2005に1を加算するとともに、ライト対象実ページの実ページ情報2100内の累積ページI/O数2105に1を加算する。この後ライト要求受付部4100は、サーバ110から受け取ったライト要求であればサーバ110に完了報告を行い、他ストレージから受け取ったライト要求であれば、他ストレージに完了報告を行う。
なお、ここでは累積I/O数2005と累積ページI/O数2105に1が加算される例を説明したが、ライトデータ量に応じて累積I/O数2005と累積ページI/O数2105に1より大きな値が加算されるようにしてもよい。たとえばライトデータサイズがnストライプブロック分の大きさの場合に、ライト要求受付部4100は累積I/O数2005と累積ページI/O数2105にnを加算するようにしてもよい。
また、ライト要求受付部4100はデータをキャッシュ210に格納する際、そのデータに関する情報を付加してから格納する。データに関する情報とは具体的には、そのデータの書き込み先となるストレージ装置160、及びストレージ装置160内のアドレスを特定可能な情報である。ライト要求受付部4100がキャッシュ210に格納したデータは、いずれストレージ装置160に書き込まれる必要がある。この処理は後述するライトアフタ処理実行部4200が行う。
ライトアフタ処理実行部4200がデータをストレージ装置160に書き込む際に、データ書き込み先のストレージ装置160を特定する必要がある。さらにデータをストレージグループ2101に書き込む際、RAIDのパリティ(冗長データ)の更新も必要であるので、ライトアフタ処理実行部4200は冗長データの書き込み先のストレージ装置160を特定する必要がある。そのために、ライト要求受付部4100はデータに関する情報を付加する。
なお、データに関する情報は、一例として、データ(及び冗長データ)格納先のストレージ装置160の識別子及びストレージ装置160内のアドレスである。ただしこれ以外の情報でも良い。たとえば、データの書き込み先の論理ボリューム識別子とその論理ボリュームのアドレス(LBA)がデータに付加されていれば、これらの情報からデータ(及び冗長データ)の書き込み先のストレージ装置160及びストレージ装置160内のアドレスは導出可能である。そのため論理ボリューム識別子と論理ボリュームのLBAが付加されていてもよい。本実施例では、データに関する情報として、データ書き込み先の論理ボリューム識別子とLBAがデータに付加されているという前提で説明する。
また、データに関する情報は、データと共にキャッシュ210に格納されてもよいが、共有メモリ220に格納されるようにしてもよい。
図20は、ライトアフタ処理実行部4200の処理フローである。ライトアフタ処理実行部4200は、プロセッサ260が、適宜実行する処理である。
ステップ7000:ライトアフタ処理実行部4200は、キャッシュ210上に、ストレージ装置160にまだ書き込まれていないライトデータ(以下、「ダーティデータ」と呼ぶ)があるか判定する。ダーティデータが存在する場合、ライトアフタ処理実行部4200はそのうちの1つを選択する。なお、キャッシュ210上にダーティデータが存在しない場合、ライトアフタ処理実行部4200はステップ7001以降の処理を行わずに終了する。
ステップ7001:ライトアフタ処理実行部4200は、ダーティデータに付加されている情報(データに関する情報)をもとに、ダーティデータとこのダーティデータの冗長データの書き込み先のストレージグループ2101とそのストレージ装置160と、そのアドレスを特定する。さらにライトアフタ処理実行部4200は、特定されたストレージグループ2101のストレージグループ情報2300内の、グループI/Oカウント2304に1を加算する。また別の実施形態として、ストレージ装置160に書き込まれるデータのサイズに応じて、グループI/Oカウント2304に加算される値の量が変更されてもよい。たとえばnストライプブロック分のデータがストレージ装置160に書き込まれる場合には、グループI/Oカウント2304にnが加算されるようにしてもよい。
ステップ7002:ライトアフタ処理実行部4200は、ステップ7000で選択されたダーティデータの冗長データを生成する。なお、冗長データの生成のために、ライトアフタ処理実行部4200はストレージグループ2101内のストレージ装置160からデータを読み出さなければならないこともある。ただしこれは公知の技術のため、説明を略す。
ステップ7003:ライトアフタ処理実行部4200は、ダーティデータを書き込むストレージ装置160と冗長データを書き込むストレージ装置160のそれぞれに書き込み要求を発行する。(別々のストレージ装置となる。)
ステップ7004:ライトアフタ処理実行部4200は、ストレージ装置160から書き込み処理の完了応答が返ってくるまで待機する。
ステップ7005:ストレージ装置160から書き込み処理の完了応答が返却された後、ライトアフタ処理実行部4200は、キャッシュ210上のダーティデータを消去する。あるいは、当該ダーティデータはすでにストレージ装置160に書き込まれていることがわかる状態にする。この後、処理を完了する。
図21は、実ストレージシステム追加処理部4300の処理フローである。以下の説明では、仮想ストレージシステム190に追加された実ストレージシステム100のことを「自ストレージ」と呼び、自ストレージの追加される仮想ストレージシステム190を「追加対象仮想ストレージ」と呼ぶ。
また、追加対象仮想ストレージに追加される実ストレージシステム100(自ストレージ)には、ストレージグループ2101が定義済みで、ストレージ装置情報2500、ストレージグループ情報2300が定義済みである。またこれ以外に、自ストレージには、仮想ストレージシステム識別子2051、実ストレージシステム識別子2052、実ストレージ記憶容量2056、空き記憶容量2057、プール容量2058があらかじめ設定されている。具体的には、仮想ストレージシステム識別子2051には追加対象仮想ストレージの識別子が事前設定されている。また、実ストレージ記憶容量2056には実ストレージシステム100内のストレージ装置160の容量の合計値が、プール容量2058と空き記憶容量2057には、プールの容量が設定されている。
自ストレージは、SAN120に接続された直後(ステップ8001の実行直前)に各実ストレージシステム100と通信することで、仮想ストレージシステム識別子2051が等しい実ストレージシステム100を認識する。そして自ストレージは、同じ仮想ストレージシステム190に属する各実ストレージシステム100に通知を行う必要がある場合には、ここで認識された各実ストレージシステム100に対して通知を行う。
なお、図21に記載の各ステップのうち、ステップ8001~ステップ8007は、自ストレージの実ストレージシステム追加処理部4300が実行する処理である。そしてステップ8011~ステップ8022は、自ストレージから通知を受けた実ストレージシステム100(以下ではこれを、自ストレージと区別するために、「実ストレージA」と呼ぶ)の実ストレージシステム追加処理部4300が実行する処理である。ただし以下の説明では、説明が冗長になることを避けるために、ステップ8001~ステップ8007の処理の主体を「自ストレージ」と表記し、またステップ8011~ステップ8022の処理の主体を「実ストレージA」と表記する。
ステップ8001:自ストレージは、仮想ストレージシステム190内に実ストレージシステム100が追加された旨の情報と、自ストレージの実ストレージ記憶容量2056とプール容量2058と、自ストレージの実ストレージシステム識別子2052と、自ストレージが有するストレージポート197のストレージポート識別子を、追加対象仮想ストレージ内の各実ストレージシステム100に通報する。
ステップ8002:自ストレージは、各実ストレージシステム100から回答が返ってくるまで待機する。
一方、追加された実ストレージシステム100から通知を受けた実ストレージシステム100(実ストレージA)は、一部の仮想論理ボリュームを、追加された実ストレージシステム100に移行することを決定する(ただし、仮想論理ボリュームを移行しないと決定されることもある)。そして実ストレージAは、仮想ストレージ記憶容量2053、総実ストレージ記憶容量2054、総空き記憶容量2055の情報、さらに移行が決定された仮想論理ボリュームの識別子、またこの仮想論理ボリュームにマップされている論理ボリュームの識別子(現論理ボリューム識別子2086)と論理容量2002とストレージグループタイプ2003、そしてこの仮想論理ボリュームに接続されているストレージポート197の識別子を、追加された実ストレージシステム100に送信する(ステップ8016)。実ストレージAが行う処理については後述する。
ステップ8003:自ストレージは、実ストレージAから受け取った情報(仮想ストレージ記憶容量2053、総実ストレージ記憶容量2054、総空き記憶容量2055の情報)を、ストレージシステム情報2050に設定する。また自ストレージは、移行対象として指定された1または複数の仮想論理ボリュームの定義を行う。具体的には自ストレージは、仮想論理ボリュームの仮想論理ボリューム情報2040を作成し、実ストレージAから移行対象として指定された仮想論理ボリュームの識別子及びその仮想論理ボリュームにマップされている論理ボリュームの識別子(現論理ボリューム識別子2086)をそれぞれ、作成した仮想論理ボリューム情報2040の仮想論理ボリューム識別子2085と旧論理ボリューム識別子2087に設定する。さらに自ストレージは、仮想論理ボリューム情報2040の接続ストレージポート識別子2084に、受け取ったストレージポート識別子を設定する。
また自ストレージは、移行対象として指定された仮想論理ボリュームにマップされる論理ボリューム(現論理ボリューム)を定義(作成)する。具体的には自ストレージは、論理ボリューム情報2000を新たに作成する。さらに実ストレージシステム追加処理部4300は論理ボリュームの識別子を決定し、決定した論理ボリューム識別子を論理ボリューム情報2000の論理ボリューム識別子2001に格納する。ここで決定される論理ボリューム識別子は、すでに自ストレージ内に存在する論理ボリュームの識別子以外の識別子であれば、任意のものでよい。
また自ストレージは、他の実ストレージシステム100から受け取った論理ボリュームの記憶容量とストレージグループタイプの情報をそれぞれ、論理容量2002とストレージグループタイプ2003に記憶する。なお、移行対象として指定された論理ボリュームにストレージグループタイプ2003が設定されていない場合、自ストレージはここで定義される現論理ボリュームのストレージグループタイプ2003を設定しなくて良い。
また自ストレージは、今回作成された仮想論理ボリューム情報2040の現論理ボリューム識別子2086に、作成した論理ボリュームの識別子と自ストレージの識別子と自ストレージのストレージポート197の識別子を設定し、また有効フラグ2088に1(ON)を、そしてコピーポインタ2089に初期値(0)を設定する。また、自ストレージは、仮想論理ボリュームにサーバ110がアクセスする際に使用可能なストレージポート197を決定し、決定されたストレージポート197の識別子を、仮想論理ボリューム情報2040に格納する。なお、使用可能なストレージポート197は複数あってよい。
ステップ8004:自ストレージは、自ストレージの有する仮想ストレージシステム識別子2051と、ステップ8003で定義された仮想論理ボリュームの仮想論理ボリューム識別子2085と、この仮想論理ボリュームにアクセスする際に使用可能なストレージポート197のストレージポート識別子をサーバ110に通知する。サーバ110はこの通知により、当該仮想論理ボリュームが、通知されたストレージポート197に接続されたことを認識し、サーバポート情報198にこのストレージシステム識別子とストレージポート識別子の情報を格納する。
ステップ8005:自ストレージは、移行対象として指定された仮想論理ボリュームの集合を一つ以上含む他の実ストレージシステム100に情報設定が完了したことを知らせる。さらに自ストレージは、他の実ストレージシステム100に、現論理ボリューム識別子2086と、現論理ボリュームにアクセス可能なストレージポート197の識別子と仮想論理ボリュームの識別子を伝えてもよい。
ステップ8006:自ストレージは、他の各実ストレージシステム100から返信が帰ってくるまで待機する。
ステップ8007:自ストレージは、ステップ8005で通知を送った全ての実ストレージシステム100から返信を受け取ると、移行を行う仮想論理ボリュームごとに、コピー処理を起動する(コピー処理部4400の実行を開始させる)。この後、処理を終了する。
続いて、仮想ストレージシステム190に追加された実ストレージシステム100以外の実ストレージシステム100、特に追加された実ストレージシステム100から要求を受け取った実ストレージシステム100(実ストレージA)が実行する処理について説明する。
まず、実ストレージAが、追加された実ストレージシステム100から最初に要求を受け取ったとき(ステップ8001)に実行される処理を説明する(ステップ8011~ステップ8016)。実ストレージAは、追加された実ストレージシステム100から受け取ったプール容量2058を、仮想ストレージ記憶容量2053と総空き記憶容量2055とに加算し、追加された実ストレージシステム100から受け取った実ストレージ記憶容量2056を総実ストレージ記憶容量2054に加算する(ステップ8011)。また実ストレージAはサーバ110に、実ストレージシステム100が追加された旨と、仮想ストレージ記憶容量2053と総実ストレージ記憶容量2054と総空き記憶容量2055の情報を通知する(ステップ8012)。サーバ110に通知するのは、どれか一つの実ストレージシステム100にするのが望ましいが、同じ容量を、複数の実ストレージシステム100が報告してもよい。
ステップ8013で、実ストレージAは、実ストレージAのプール容量2058と空き記憶容量2057を比較して、実ストレージAのプール空き容量が不足していると判断した場合(たとえば空き記憶容量2057が所定値以下になった場合、あるいは“空き記憶容量2057÷プール容量2058”が所定値以下になった場合等である)、1または複数の仮想論理ボリュームを、追加された実ストレージシステム100に移行することを決定する(ステップ8014)。もし実ストレージAのプール空き容量が不足していない場合は(ステップ8013:No)、ステップ8014はスキップされる。
なお、ここで移行が決定された仮想論理ボリュームのことを、「移行対象仮想論理ボリューム」と呼ぶ。また移行対象仮想論理ボリュームにマップされている論理ボリュームも移行の対象となる。移行対象仮想論理ボリュームにマップされている論理ボリュームのことは「移行対象論理ボリューム」と呼ぶ。
また、ステップ8014における移行対象(仮想)論理ボリュームの数や論理容量の決定方法は任意でよいが、仮想ストレージシステム190を構成する実ストレージシステム100の数や、追加された実ストレージシステム100の記憶容量を勘案して、移行する論理ボリュームの論理容量(または数)を決定することが好ましい。たとえば実ストレージAは、追加された実ストレージシステム100の記憶容量(総実ストレージ記憶容量2054)が比較的大きい場合(所定の閾値以上の場合)には、移行対象の仮想論理ボリュームを増やすとよい。また仮想ストレージシステム190を構成する実ストレージシステム100の数が多い場合には、他の実ストレージシステム100も追加された実ストレージシステム100に論理ボリュームを移行するため、移行対象の仮想論理ボリュームを多くしないほうがよい。
また、ステップ8014において、移行対象(仮想)論理ボリュームを1以上選択する時に、実ストレージAは任意の(仮想)論理ボリュームを選択してよい。ただし別の実施形態として、実ストレージAは何らかの判断基準に基づいて(仮想)論理ボリュームを選択してもよい。移行対象(仮想)論理ボリュームの選択方法の一例は、後述する変形例で説明する。
ステップ8015で実ストレージAは、追加された実ストレージシステム100の実ストレージシステム識別子と、追加された実ストレージシステム100が有するストレージポート197のストレージポート識別子を、他実ストレージシステム情報2070に追加する。
この後ステップ8016で、実ストレージAは、移行対象仮想論理ボリュームの識別子、移行対象論理ボリュームの識別子(正確には、移行対象仮想論理ボリュームの仮想論理ボリューム情報2040に記録されている、現論理ボリューム識別子2086)、移行対象論理ボリュームの容量、さらに、移行対象仮想論理ボリュームに接続されているストレージポート197の識別子(ただし、実ストレージAのストレージポート197の識別子を除く)を、追加した実ストレージシステム100に送る。移行対象仮想論理ボリュームが複数ある場合には、移行対象仮想論理ボリューム毎にこれらの情報が送られる。なお、移行対象仮想論理ボリュームがなければ、ヌル値が送られる。
続いて、追加した実ストレージシステム100から二回目の要求を実ストレージAが受け取ったとき(ステップ8005)に、実ストレージAで実行される処理(ステップ8021~8022)について説明する。ここでは実ストレージAは、移行対象仮想論理ボリュームが接続されているサーバ110に、移行対象仮想論理ボリュームの識別子と、実ストレージAが有するストレージポート197のストレージポート識別子24003を通知し、移行対象仮想論理ボリュームに対応付けられているストレージポート識別子24003の中から、通知されたストレージポート識別子24003を削除するよう要求する(ステップ8021)。サーバ110はこの要求を受領すると、サーバポート情報198から、指定された仮想論理ボリュームのストレージポート識別子24003を削除する。
さらに実ストレージAは、移行対象仮想論理ボリュームの仮想論理ボリューム情報2040を消去する(ステップ8022)。また、仮想ストレージシステム190に追加された実ストレージシステム100から、仮想論理ボリューム識別子、論理ボリューム識別子、ストレージポート識別子を受け取った場合、実ストレージAは、仮想論理ボリューム識別子に対応する仮想論理ボリューム情報2040の、現論理ボリューム識別子2086に論理ボリューム識別子を設定し、接続ストレージポート識別子2084にストレージポート識別子を設定する。この後、追加された実ストレージシステム100に処理の完了を通知した後、実ストレージAの実ストレージシステム追加処理部4300は処理を終了する。
図22と図23は、コピー処理部4400の処理フローである。コピー処理部4400は、仮想論理ボリュームにマップされている旧論理ボリュームから現論理ボリュームにデータを移行(コピー)する処理を行うプログラムである。コピー処理部4400は、実ストレージシステム追加処理部4300から起動の指示が発行されたとき(ステップ8007)、実行を開始する。この処理は、仮想論理ボリュームごとに実行される。なお、複数の仮想論理ボリュームのコピー処理が並列に実行されてもよい。以下の説明では、データ移行処理を行う対象の仮想論理ボリュームのことを、移行対象仮想論理ボリュームと呼ぶ。
ステップ14000~ステップ14010の処理は、仮想ストレージシステム190に新たに追加された実ストレージシステム100のコピー処理部4400が実行する処理である。ただし以下の説明では、表現が冗長になることを避けるために、処理の主体を単に「コピー処理部4400」と表記して説明する。
ステップ14000:コピー処理部4400は、移行対象仮想論理ボリュームのコピーポインタ2089が示すアドレス(仮想ページ番号)を特定する。ここで特定された仮想ページ番号で特定される、旧論理ボリュームの仮想ページと現論理ボリュームの仮想ページがコピー処理対象と決定される。コピー処理部4400は、仮想ページごとにコピー処理を実行する。
またコピー処理部4400は、旧論理ボリームの先頭仮想ページから順にデータを読み出して、現論理ボリュームの仮想ページへとコピーする。なお、以下のステップ14001~ステップ14006の説明においては、コピー処理部4400が仮想ページ#nに対して処理を行う場合の例を説明する。また以下では、仮想ページ#nを「VP#n」と表記することもある。
ステップ14001:コピー処理部4400は、移行対象仮想論理ボリュームに対応する仮想論理ボリューム情報2040の旧論理ボリューム識別子2087から、旧論理ボリュームを有する実ストレージシステム100の識別子、旧論理ボリュームの論理ボリューム識別子を特定し、コピーポインタ2089から、読み出し要求で指定するアドレスを決める。またコピー処理部4400は、特定した実ストレージシステム100に、特定した論理ボリュームの論理ボリューム識別子及び読み出し対象の仮想ページのアドレスを指定して、読み出し要求を発行する。
ステップ14002:コピー処理部4400は、リード要求を発行した実ストレージシステム100からデータが送られてくるまで待機し、データが送られてきた時点で、ステップ14003を実行する。なお、リード要求を発行した実ストレージシステム100からヌル値が送られてくる場合がある。その場合には、コピー処理部4400は次にステップ14007を実行する。
ステップ14003:ここでは、現論理ボリュームのVP#nに割り当てるべき実ページの確保が行われる。コピー処理部4400は、実ストレージシステム100内のストレージグループ2101を適当に選択して、このストレージグループの空き実ページ情報2100を参照して、空き実ページを確保する。そして現論理ボリュームの論理ボリューム情報2000内の複数の実ページポインタ2004のうち、先頭から(n+1)番目の実ページポインタ2004に、確保された実ページの実ページ情報2100へのポインタを登録する。さらにコピー処理部4400は、空き記憶容量2057から仮想ページサイズを減算する。ここで選択されるストレージグループ2101は任意のものでも良いし、あるいは何らかの選択基準に従ってストレージグループ2101が選択されてもよい。
ステップ14004:コピー処理部4400は、送られてきたデータから冗長データを生成する。
ステップ14005:コピー処理部4400は、ステップ14003で確保した実ページが存在するストレージ装置160に、受け取ったデータと冗長データを書き込むため、ライト要求を発行する。実ページはストレージグループ2101に属する複数のストレージ装置160に跨って定義される領域である。そのためここでは、複数のストレージ装置160にライト要求が発行される。
ステップ14006:コピー処理部4400は、各ストレージ装置160からライト処理の完了の報告が返却されるまで待機する。
ステップ14007:コピー処理部4400は、コピーポインタ2089に1を加算する。
ステップ14008:コピー処理部4400は、コピーポインタ2089と当該論理ボリュームの仮想ページ数を比較することで、コピーが完了したかをチェックする。完了していない場合、つまりコピーポインタ2089が論理ボリュームの仮想ページ数以下の場合(ステップ14008:No)、コピー処理部4400は再びステップ14000から処理を行う。コピーが完了した場合、つまりコピーポインタ2089が論理ボリュームの仮想ページ数を超過した場合(ステップ14008:Yes)、次にステップ14009が行われる。
ステップ14009:コピー処理部4400は、仮想論理ボリュームの有効フラグ2088に0(OFF)を格納し、また、旧論理ボリューム識別子2087で特定される旧論理ボリュームを有する実ストレージシステム100に、コピーが完了した旨、及び旧論理ボリュームの論理ボリューム識別子を送る。
ステップ14010:コピー処理部4400は、旧論理ボリュームを有する実ストレージシステム100から完了報告を受け取ると、処理を終了する。
図23は、追加された実ストレージシステム100に論理ボリュームを移行する側の実ストレージシステム100、つまり旧論理ボリュームを有する実ストレージシステム100のコピー処理部4400が実行する処理フローである。
ステップ14011-14015の処理は、旧論理ボリュームを有する実ストレージシステム100が、追加された実ストレージシステム100からリード要求(ステップ14001で発行される要求)を受領した時に、実行される。以下、特に断りのない限り、ステップ14011-14015についての説明で記述される処理は、旧論理ボリュームを有する実ストレージシステム100のコピー処理部4400が実行する処理である。
ステップ14011:コピー処理部4400は論理ボリューム情報2000の実ページポインタ2004を参照することで、指定された仮想ページに実ページが割り当てられているか判定する。実ページが割り当てられている場合、次にステップ14013が行われる。
ステップ14012:実ページが割り当てられていない場合、コピー処理部4400は要求元の実ストレージシステム100にヌル値を返送し、処理を完了する。
ステップ14013:コピー処理部4400は、実ページの存在するストレージグループ2101(さらにはストレージグループ2101を構成するストレージ装置160)を認識し、認識したストレージ装置160に、データ(仮想ページのデータ)の読み出し要求を発行する。なお、実ページにはリード対象データに加えて、リード対象データの冗長データも含まれているが、ここではコピー処理部4400は冗長データを読み出す必要はない。
ステップ14014:コピー処理部4400は、ストレージ装置160からのデータ読み出しが完了するまで待機する。
ステップ14015:コピー処理部4400は、読み出した仮想ページのデータを、要求元の実ストレージシステム100に送る。さらに、自身の(旧論理ボリュームを有する実ストレージシステム100の)空き記憶容量2057に1仮想ページのサイズを加算する。これで旧論理ボリュームを有する実ストレージシステム100がリード要求を受領した時の処理は終了する。
続いて、追加した実ストレージシステム100からコピー完了の報告が行われた時(ステップ14009)に、旧論理ボリュームを有する実ストレージシステム100のコピー処理部4400で行われる処理の説明を行う(図示は略す)。追加した実ストレージシステム100からは、コピー完了の報告とともに論理ボリューム識別子が送られてくるので、コピー処理部4400は、受け取った論理ボリューム識別子で特定される論理ボリュームの削除を行う。具体的には論理ボリューム情報2000の消去が行われるとよい。またこの時コピー処理部4400は、消去対象の論理ボリュームに割り当てられている実ページの実ページ情報2100を、空き実ページ情報キューへ移動する処理も行う。この後、追加した実ストレージシステム100に完了報告を行う。
以上が実施例1の説明である。実施例1に係る仮想ストレージシステムは、複数の実ストレージシステムから構成される。実ストレージシステムは論理ボリュームを定義するとともに、論理ボリュームに対応付けられた仮想論理ボリュームを定義してサーバに提供する。また仮想論理ボリュームが定義される実ストレージシステムと、仮想論理ボリュームが対応付けられる論理ボリュームが定義された実ストレージシステムは同じである必要がないため、ユーザ(管理者)は仮想ストレージシステム内のいずれかの実ストレージシステムに空き領域があれば、その領域を使用可能である。
また実施例1に係る仮想ストレージシステムでは、実ストレージシステムが自身のプール容量とプール空き容量を管理することに加え、仮想ストレージシステムに含まれる各実ストレージシステムのプール容量の合計及びプール空き容量の合計を算出し、これらをそれぞれ仮想ストレージシステムのプール容量、プール空き容量としてサーバに提供する。これによりユーザ(管理者)は、それぞれの(実)ストレージシステムのプール容量(または空き容量)を監視する必要はなく、単一のストレージシステム(仮想ストレージシステム)の容量のみを監視すればよい。
[変形例]
続いて、実施例1に係る仮想ストレージシステムの変形例について説明する。実施例1に係る仮想ストレージシステムでは、仮想ストレージシステムに実ストレージシステムが追加されると、これまで仮想ストレージシステムに属していた実ストレージシステム内の一部の論理ボリュームが、追加された実ストレージに移動された。これは各実ストレージシステム内のプール空き容量を確保することが目的だが、以下で説明する変形例では、プール空き容量を確保することに加え、ストレージ装置の長寿命化のために、論理ボリュームの移動が行われる例を説明する。
変形例における仮想ストレージシステムと実ストレージシステムのハードウェア構成と各種管理情報は、実施例1で説明したものと違いはないため、図示は略す。以下では実施例1で説明した事項と異なる点を中心に説明する。変形例における実ストレージシステムで実行されるプログラムは、実施例1で説明したプログラムとほとんど同じだが、内部ウェアレベリング部4500とシステムウェアレベリング部4600(非図示)が追加される。また、ライト要求受付部4100と実ストレージシステム追加処理部4300の処理が、実施例1で説明したものと若干異なる。
まず変形例におけるライト要求受付部4100の処理の中で、実施例1で説明したものと異なる点について説明する。変形例における実ストレージシステムでは、各論理ボリュームに割り当てられる実ページの種類に制約がある。変形例における実ストレージシステム100が論理ボリュームの各仮想ページに実ページを割り当てる時(たとえばライト要求受付部4100のステップ6012が実行される時)、ストレージグループ2101のストレージグループタイプ2302が、論理ボリュームのストレージグループタイプ2003と同じストレージグループ2101を選択する。以下では、ここで選択されるストレージグループ2101を「候補グループ」と呼ぶ。そのため、変形例に係る実ストレージシステム100では、各論理ボリュームの論理ボリューム情報2000内のストレージグループタイプ2003に、有効な値が設定されていることが前提である。
そして実ストレージシステム100は、候補グループの中から空き実ページを選択して、仮想ページに割り当てる。なお候補グループの中から空き実ページを選択する際、実ストレージシステム100は残寿命の長い候補グループが有する空き実ページを優先的に選択する。
なお、本例では候補グループの選択の際、上で述べたように、ストレージグループ2101のストレージグループタイプ2302が、論理ボリュームのストレージグループタイプ2003と同じストレージグループを選択する例を説明するが、別の実施形態として、単にデバイスタイプが共通のストレージグループ2101が候補グループとして選択されてもよい。たとえば論理ボリュームのストレージグループタイプ2003に設定されているデバイスタイプが「フラッシュストレージ(SLC)」または「フラッシュストレージ(MLC)」の場合、実ストレージシステム100はフラッシュストレージ(SLCまたはMLCのいずれでもよい)で構成されるストレージグループ2101を候補グループとして選択するという方法を採用してもよい。
変形例における、残寿命の判定方法を説明する。良く知られているように、フラッシュメモリは消去回数に一定の制限があり、消去回数が制限に達すると使用できなくなる。ここでは、フラッシュメモリの消去回数が所定の制限値に達することを「寿命を迎えた」と呼び、フラッシュメモリの消去回数が制限値に近い値になった時の状態を、「残寿命が短い」状態と呼ぶ。
なお、以下で説明する変形例では、実ストレージAは、フラッシュストレージで構成されるストレージグループ2101の消去回数の代わりにライト回数を用いて、ストレージグループ2101の残寿命の長さを判定する。フラッシュメモリの消去回数とライト(書き換え)回数には相関があるため、ライト回数を用いても寿命の推定が可能だからである。
ストレージグループ2101の寿命の判定を行う際、具体的には、実ストレージシステム100は、ストレージグループ2101のストレージグループ情報2300を参照することで、“グループI/Oカウント2304÷最大I/O数2305”を算出する。以下では、“グループI/Oカウント2304÷最大I/O数2305”のことを“更新度”と呼ぶ。更新度が小さいほど、ストレージグループ2101の残寿命が長く、逆に更新度が大きいほど、ストレージグループ2101の残寿命が短いことを意味する。
たとえばライト要求受付部4100のステップ6012が実行される時、実ストレージシステム100は、空き実ページを有する候補グループのうち、更新度が最も小さいストレージグループ2101を選択し、そのストレージグループ2101が有する空き実ページを選択する。これにより、残寿命が最も長いストレージグループ2101の空き実ページを仮想ページに割り当てることができる。
なお、寿命の判定の際に、グループI/Oカウント2304(つまりライト回数)ではなく、更新度(グループI/Oカウント2304÷最大I/O数2305)を算出する理由は、フラッシュストレージの書き換え可能回数(または消去可能回数)は、デバイスタイプによって異なるため、単純にライト回数のみに基づいて寿命を判断することは適切でないからである。
続いて、内部ウェアレベリング部4500の処理について説明する。内部ウェアレベリング部4500は、実ストレージシステム100内のストレージ装置160間でのデータ移動を行うことで、各ストレージ装置160の書き換え回数(消去回数)を極力等しくするためのプログラムである。なお、ここでデータ移動処理の対象となるストレージ装置160は、フラッシュメモリを記憶媒体とするストレージ装置160、つまり書き換え回数に制限があるストレージ装置160である。
なお、フラッシュメモリを記憶媒体とするストレージ装置160(フラッシュストレージ)は、ストレージ装置160の内部でもいわゆるウェアレベリング処理を行って、ストレージ装置160内の各フラッシュメモリの書き換え回数(または消去回数)が等しくなるように制御している。ただしこの処理は公知の処理のため、説明を略す。
以下、内部ウェアレベリング部4500の処理の概要を述べる。内部ウェアレベリング部4500は、定期的に実行される。内部ウェアレベリング部4500は、実ストレージシステム100内の各ストレージグループ2101のストレージグループ情報2300を参照することで、各ストレージグループ2101の更新度を算出する。さらに内部ウェアレベリング部4500は、実ストレージシステム100内の全ストレージグループ2101の更新度の平均値を算出する。
そして、あるストレージグループ2101(以下、「対象グループ」と呼ぶ)の更新度と、算出された更新度の平均値の差が所定値を超過している場合、内部ウェアレベリング部4500はそのストレージグループ2101に属する実ページのうち、論理ボリュームの仮想ページに割り当てられている実ページを特定する。実ページの特定のためには、内部ウェアレベリング部4500は、各論理ボリューム情報2000のうち、ストレージグループタイプ2003が、対象グループのストレージグループタイプ2302と同じものを選択し、選択した論理ボリューム情報2000の実ページポインタ2004により指し示されている実ページ情報2100のストレージグループ識別子2104を参照することで特定できる。
そして内部ウェアレベリング部4500は、特定された実ページのうち、累積ページI/O数2105が最も大きい実ページを特定する(この実ページを「移動元実ページ」と呼ぶ)。そして移動元実ページのデータを、更新度が最も小さいストレージグループ2101に属する空き実ページ(これを「移動先実ページと呼ぶ」)に移動し、移動元実ページが割り当てられていた仮想ページには、移動先実ページが割り当てられるように、論理ボリューム情報2000の実ページポインタを変更する。
なお、内部ウェアレベリング部4500が行う、移動対象データの選択方法は、上で説明した方法に限定されない。各ストレージ装置160あるいはストレージグループ2101間の書き換え回数(消去回数)の不均衡が極力解消されるようにデータ移動が行われるのであれば、様々な方法が用いられてもよい。
続いて、変形例における実ストレージシステム追加処理部4300の処理内容を説明する。ただし、仮想ストレージシステム190に追加された実ストレージシステム100の実ストレージシステム追加処理部4300が行う処理(図21 ステップ8001~ステップ8007)の内容は、実施例1で説明したものと同じであるので、ここでは説明を略す。
一方、追加された実ストレージシステム100から要求を受け取った実ストレージシステム100(以下の説明では実施例1と同じく、これを「実ストレージA」と呼ぶ)が実行する処理(図21 ステップ8011以降)は、実施例1で説明したものと若干異なる。実施例1では、実ストレージAが、追加された実ストレージシステム100に仮想論理ボリュームを移行する際、任意の仮想論理ボリュームを移動してもよかった。一方変形例では、実ストレージAの実ストレージシステム追加処理部4300は、残寿命の短いストレージグループ2101があった場合、そのストレージグループ2101の実ページが割り当てられている仮想論理ボリュームを優先的に、追加された実ストレージシステム100に移行する。
変形例における、ステップ8011以降の処理の内容について説明する。ステップ8011~ステップ8022のうち、ステップ8014以外の処理は実施例1で説明した処理と同じであるため、以下ではステップ8014で行われる内容を説明する。なお、以下の処理は、実ストレージAの実ストレージシステム追加処理部4300が実行する処理だが、説明が冗長になることを避けるために、以下の説明では実ストレージAを処理の主体として表記している。
実ストレージAのプール空き容量が不足している場合(ステップ8013:Yes)、ステップ8014が実行される。ステップ8014で実ストレージAはまず、移行対象仮想論理ボリュームの容量を決定する。これは実施例1で説明したものと同じ処理である。つまり、仮想ストレージシステム190を構成する実ストレージシステム100の数や、追加された実ストレージシステム100の記憶容量を考慮して、移行対象仮想論理ボリュームの容量が決定されるとよい。なお、以下ではここで決定された移行対象仮想論理ボリュームの容量を、「移行量」と呼ぶ。
続いて実ストレージAは、“グループI/Oカウント2304÷最大I/O数2305”(更新度)が所定の閾値(たとえば0.9等の、あらかじめ決められた値)を超過するストレージグループ2101があるか判定する。変形例では、実ストレージシステム100は、更新度が所定の閾値を超過するストレージグループ2101を、残寿命の短いストレージグループ2101とみなす。ただし、最大I/O数2305が設定されていないストレージグループ2101、たとえばHDD等のように書き換え回数に制限のないストレージグループ2101については、判定対象外とされる。
残寿命の短いストレージグループ2101がなかった場合、実ストレージAは実施例1で説明したものと同じく、任意の仮想論理ボリュームを移行対象仮想論理ボリュームとして選択する。
もし残寿命の短いストレージグループ2101があった場合、実ストレージAは、論理ボリュームのストレージグループタイプ2003が、そのストレージグループ2101のストレージグループタイプ2302と同じものを抽出する。さらに実ストレージAは、抽出された各論理ボリュームについて、論理ボリュームに割り当てられている実ページの実ページ情報2100を参照することにより、残寿命の短いストレージグループ2101の実ページが割り当てられている論理ボリュームを特定する。もしそのような論理ボリュームが複数存在した場合、実ストレージAは、移行量に達するまで、特定された複数の論理ボリュームの中から移行対象論理ボリュームを選択する。同時に実ストレージAは、移行対象論理ボリュームが対応付けられている仮想論理ボリュームを、移行対象仮想論理ボリュームとして選択する。この後の処理は実施例1で説明した処理と同じである。つまり実ストレージAは、移行対象仮想論理ボリュームの識別子や移行対象論理ボリュームの識別子等を、追加された実ストレージシステム100(自ストレージ)に通知する(ステップ8016)。一方自ストレージはステップ8003~ステップ8007を実行することにより、実ストレージAから通知された移行対象論理ボリュームのデータを、自ストレージに定義した論理ボリュームに移動する処理等を行う。
なお移行対象論理ボリュームを選択する際、実ストレージAは残寿命の短いストレージグループ2101の実ページが最も多く割り当てられている論理ボリュームから優先的に選択する。これにより、残寿命の短いストレージグループ2101の書き換え回数が、より削減されることが期待され、残寿命の短いストレージグループ2101の寿命を延ばすことができる。
なお、上ではステップ8013の判定が行われる例、つまり実ストレージAのプール空き容量が不足している場合に(仮想)論理ボリュームの移行を行う例を説明した。しかし別の実施形態として、ステップ8013の判定を行わなくてもよい。つまり実ストレージAのプール空き容量が不足していなくても、更新度が所定の閾値を超過するストレージグループ2101が存在していた場合には、実ストレージAは(仮想)論理ボリュームを移行すると決定してもよい。
また別の実施形態として、実ストレージAが残寿命の短いストレージグループ2101と同じストレージグループタイプの論理ボリュームの中から移行対象論理ボリュームを選択する際に、残寿命の短いストレージグループ2101の実ページが多く割り当てられている論理ボリュームを優先的に選択する代わりに、累積I/O数2005が最も多い論理ボリュームを優先的に移行対象論理ボリュームとして選択してもよい。
累積I/O数2005が最も多い論理ボリュームが他の実ストレージシステム100に移行されることによって、実ストレージA内の各ストレージグループ2101に対するライト回数の総量が削減される。また実ストレージAでは内部ウェアレベリング部4500が定期的に実行されるので、各ストレージグループ2101に対する書き換え回数はほぼ均等になる。そのため、残寿命の短いストレージグループ2101に対する書き換え回数も削減されることが期待でき、結果としてこのストレージグループ2101の寿命を延ばすことができる。
続いて、変形例におけるシステムウェアレベリング部4600の処理について説明する。システムウェアレベリング部4600は、各実ストレージシステム100が定期的に実行する。システムウェアレベリング部4600は、仮想ストレージシステム190内の各実ストレージシステム100が有するストレージグループ2101のライト回数が等しくなるように各ストレージグループ2101を制御し、これにより特定の実ストレージシステム100のストレージグループ2101の寿命が短くなることを防ぐ。
具体的には、各実ストレージシステム100が有するストレージグループ2101の更新度に不均衡が生じた場合、更新度が大きいストレージグループ2101を有する実ストレージシステム100(以下ではこれを「実ストレージA」と呼ぶ)は、更新度が小さいストレージグループ2101を有する実ストレージシステム100(以下ではこれを「実ストレージB」と呼ぶ)に、(仮想)論理ボリュームを移動する。
図30を参照しながら、システムウェアレベリング部4600の処理の流れを説明する。なお、以下の説明において、特に断りのない限り、ステップ9001~ステップ9007は、実ストレージAのシステムウェアレベリング部4600が実行する処理、つまり実ストレージA以外の実ストレージシステム100に(仮想)論理ボリュームを移動する処理である。そしてステップ9011~ステップ9017は、実ストレージBのシステムウェアレベリング部4600が実行する処理である。
ステップ9001:実ストレージAは、仮想ストレージシステム190内の各実ストレージシステム100に対して、寿命情報と空き容量の送信を依頼し、各実ストレージシステム100から寿命情報とプールの空き容量を取得する。寿命情報とは、各ストレージグループ2101の更新度(グループI/Oカウント2304÷最大I/O数2305)の平均値である。
この要求を受領した各実ストレージシステム100(実ストレージBも含まれる)は、実ストレージシステム100内のストレージグループ2101ごとに更新度を算出し、さらに算出された値の平均値(寿命情報)を求める。なお、最大I/O数2305がNULLのストレージグループ2101については、各実ストレージシステム100は更新度の算出を行わない。そして各実ストレージシステム100は、求められた平均値(寿命情報)と、空き記憶容量2057を実ストレージAに返送する(ステップ9011)。
ステップ9002:実ストレージAは、実ストレージAが有するストレージグループ2101の寿命情報を求める。具体的には実ストレージAは、実ストレージA内のストレージグループ2101ごとに“グループI/Oカウント2304÷最大I/O数2305”を算出し、さらに算出された値の平均値を求める(以下、この平均値をaと表記する)。さらに実ストレージAは、仮想ストレージシステム190内の各実ストレージシステム100から取得した寿命情報の平均値を算出する(以下、この平均値をbと表記する)。
(a-b)が所定の値以上の場合(ステップ9002:Yes)、実ストレージAが有するストレージグループ2101の(平均)残寿命と、他の実ストレージシステム100が有するストレージグループ2101の(平均)残寿命との間で不均衡が生じており、かつ実ストレージAが有するストレージグループ2101の(平均)残寿命が短いことを意味する。この場合には、実ストレージAは実ストレージA内の一部の仮想論理ボリュームの移動を行うと決定し、ステップ9003以降の処理を行う。逆に(a-b)が所定の値未満の場合(ステップ9002:No)、処理は終了する。
ステップ9003:ここではまず、実ストレージAは、実ストレージAが有する論理ボリューム(及びその論理ボリュームがマップされている仮想論理ボリューム)の移動先の実ストレージシステム100を決定する。実ストレージAは、各実ストレージシステム100から取得した寿命情報を参照し、最も小さな寿命情報を有する実ストレージシステム100を論理ボリュームの移動先にする。以下では論理ボリュームの移動先に決定された実ストレージシステム100を、実ストレージBと呼ぶ。
続いて実ストレージAは、移動する論理ボリュームの量)を、実ストレージBから受領している空き記憶容量2057に基づいて決定する。ここで決定された量を「移動量」と呼ぶ。ただし空き記憶容量2057と同量の論理ボリュームが実ストレージBに移動されると、実ストレージBの記憶領域が枯渇するので、実ストレージAはたとえば、空き記憶容量2057のx%に相当する量を移動量とするとよい(xは10等の比較的小さな値である)。
さらに実ストレージAは、実ストレージAが有するストレージグループ2101のうち、更新度の最も大きなストレージグループ2101の実ページが割り当てられている論理ボリューム(及び仮想論理ボリューム)を移動対象と決定する。この条件に該当する論理ボリュームが複数あり、かつそれらの論理ボリュームの論理容量の合計が移動量を超過する場合、実ストレージAは、更新度の最も大きなストレージグループ2101の実ページが最も多く割り当てられている論理ボリュームから優先的に、移動対象論理ボリュームとして選択する。
なお、移動対象となり得る論理ボリューム(更新度の最も大きなストレージグループ2101の実ページが割り当てられている論理ボリューム)が1つしかないが、その論理ボリュームの論理容量が移動量を超過している場合もありえる。この場合には論理ボリュームの移動はできない。次のステップ9004ではこの判定が行われる。
ステップ9004:実ストレージAは、上で述べたように、ステップ9003で選択された論理ボリュームが、実ストレージBに移動可能か判定する。選択された論理ボリュームが実ストレージBに移動できない場合(ステップ9004:No)、処理は終了し、移動できる場合には次にステップ9005が行われる。
ステップ9005:実ストレージAは、移動対象の論理ボリューム(及び仮想論理ボリューム)の情報を実ストレージBに送る。この処理はステップ8016と同様の処理である。そして実ストレージAは、実ストレージBからの応答が返送されて来るまで待機する。
ステップ9006:ここでは実ストレージAは、実施例1で説明したステップ8021と同様の処理、つまり移行対象仮想論理ボリュームが接続されているサーバ110に、実ストレージAが有するストレージポート197のストレージポート識別子24003を通知し、通知したストレージポート識別子24003の情報をサーバポート情報198から削除させる。
ステップ9007:ここでは実ストレージAは、実施例1で説明したステップ8022と同様の処理を行い、処理を終了する。
続いて実ストレージBで行われる処理を説明する。ステップ9011では先に述べたとおり、実ストレージAから寿命情報と空き容量の送信を依頼された各実ストレージシステム100(実ストレージBも含まれる)が、実ストレージシステム100内のストレージグループ2101のうち、フラッシュストレージで構成される全ストレージグループ2101の更新度の平均値を算出し、算出された平均値と空き記憶容量2057を実ストレージAに返送する。その後実ストレージBは、実ストレージAから情報が送信されて来るまで待機する。
ステップ9012:実ストレージBは、実ストレージAがステップ9005で送信した情報を受領し、仮想論理ボリュームと、現論理ボリュームの定義を行う。ステップ9012の処理は、実施例1で説明したステップ8003とほとんど同じである。ただしステップ9012では、仮想ストレージ記憶容量2053、総実ストレージ記憶容量2054、総空き記憶容量2055の情報の設定は行われない。ここでは容量(プール容量等)の増加は発生しないからである。
ステップ9013:実ストレージBは、実施例1で説明したステップ8004と同じ処理、つまりサーバ110にサーバポート情報198への情報設定を行わせる。
ステップ9014:実ストレージBは実ストレージAに、移行対象仮想論理ボリュームの定義やサーバ110への情報設定が完了したことを通知する。これは実施例1で説明したステップ8005と同様の処理である。ステップ9014が行われると、実ストレージAではステップ9006が行われる。
ステップ9015:実ストレージBは、実ストレージAから処理完了の通知(ステップ9007)が返ってくると、移行対象仮想論理ボリュームのコピー処理を開始する。これはステップ8007と同様の処理である。コピー処理の終了後、実ストレージBのシステムウェアレベリング部4600の処理は終了する。
以上が変形例の説明である。変形例に係る仮想ストレージシステムでは、実ストレージシステムの追加時に、更新度の大きなストレージグループの実ページが割り当てられている論理ボリューム(及びその論理ボリュームが対応付けられている仮想論理ボリューム)を、追加された実ストレージシステムに移行する。また仮想ストレージシステム内の各ストレージグループの更新度が等しくなるように、実ストレージ間での(仮想)論理ボリュームの移動を行う。これにより、各ストレージ装置の長寿命化を図っている。
なお、上で説明した例では、実ストレージシステムが計数したストレージグループのライト回数(グループI/Oカウント2304)に基づいて、(仮想)論理ボリュームの移動要否の判定や、移動対象の(仮想)論理ボリュームの選択が行われている。しかし別の実施形態として、ストレージ装置160が内部でフラッシュメモリの消去回数を計数し、ストレージコントローラに消去回数を通知する機能を有している場合、実ストレージシステムは、ライト回数(グループI/Oカウント2304)に代えて、ストレージ装置160から取得した消去回数を用いることで、移動対象の論理ボリュームを選択してもよい。
続いて実施例2の説明を行う。実施例2における情報システムのハードウェア構成は、実施例1における情報システムと同様であるので、図示は略す。
実施例2と実施例1の相違点の1つは、実施例2に係る仮想ストレージシステム190では、1論理ボリュームに、複数の実ストレージシステム100の実ページが割り当てられて良い点である。実施例2における共有メモリ220内に定義される情報は、実施例1で説明したものとほぼ同様だが、下記の点で異なる。
実施例2に係る実ストレージシステム100は、実施例1で説明した他実ストレージシステム情報2070に代えて、他実ストレージシステム情報2070’を有する。図24は、他実ストレージシステム情報2070’の形式である。他実ストレージシステム情報2070’は、実施例1で説明した他実ストレージシステム情報2070と同様の情報だが、他実ストレージシステム情報2070’には、他実ストレージシステム情報2070の有する情報に加えて、他実ストレージ記憶容量2074、他空き記憶容量2075が含まれる。他実ストレージ記憶容量2074、他空き記憶容量2075は他実ストレージシステム識別子2072と同様に、仮想ストレージシステム190内に存在する実ストレージシステム100毎に存在する情報で、それぞれ、実ストレージシステム100が有するプール容量2058と空き記憶容量2057と同じ値が格納される。なお、図24では、他実ストレージシステム識別子2072-kで特定される実ストレージシステム100のために設けられている他実ストレージ記憶容量2074と他空き記憶容量2075をそれぞれ、他実ストレージ記憶容量2074-k、他空き記憶容量2075-kと表記している。また以下の説明においては、ある実ストレージシステム(仮に「実ストレージX」と呼ぶ)のために設けられている他実ストレージ記憶容量2074と他空き記憶容量2075のことをそれぞれ、「実ストレージXの他実ストレージ記憶容量2074」、「実ストレージXの他空き記憶容量2075」と呼ぶ。
また、実施例2では、ストレージグループ情報の内容も実施例1で説明したストレージグループ情報2300と異なる。図25に、実施例2における実ストレージシステム100が有するストレージグループ情報2300’のフォーマットを示す。ストレージグループ情報2300’には、実施例1で説明したストレージグループ情報2300に含まれる情報に加えて、使用中ページリスト2200’が含まれる。
使用中ページリスト2200’は、実ストレージシステム100が有する管理対象ストレージグループ内の実ページのうち、他の実ストレージシステム100で使用されている実ページを管理するための情報である。使用中ページリスト2200’には他の実ストレージシステム100で使用されている実ページの実ページ情報2100へのポインタが格納される。他の実ストレージシステム100で使用されている実ページが複数ある場合、ストレージグループ情報2300’は複数の使用中ページリスト2200’を有する。また、別の実施形態として、空きページ管理ポインタ2200によって構成される空き実ページ情報キューのように、他の実ストレージシステム100で使用されている実ページの実ページ情報2100が、リンクリスト構造で管理されるようにしてもよい。
実施例2と実施例1ではさらに、論理ボリューム情報に違いがある。実施例2における論理ボリューム情報は、実施例1における論理ボリューム情報2000とフォーマットは同じである。そのため以下の説明において、実施例2における論理ボリューム情報についても、「論理ボリューム情報2000」と表記し、また図示は略す。
ただし、実施例2では実ページポインタ2004に格納される情報の内容が、実施例1で説明したものと異なる。実施例2における実ページポインタ2004にはまず、その実ページが格納されている実ストレージシステム100の識別子が格納され、さらにその実ページの実ページ情報2100の内容のうち、ストレージグループ識別子2104と実ページアドレス2102が格納される。実施例2における論理ボリュームには、複数の実ストレージシステム100の実ページが割り当てられることがあるためである。
実施例2において、ストレージコントローラ200によって実行されるプログラムは、実施例1で説明したものと同様で、リード処理実行部4000’、ライト要求受付部4100’、ライトアフタ処理実行部4200’、実ストレージシステム追加処理部4300’、コピー処理部4400’が実行される。実施例1と同様、これらのプログラムはストレージコントローラ200のメモリ270に格納される(図示は略す)。以下、これらのプログラムで行われる処理の説明を行う。なお、以下の説明では、実施例1と同様に、「自ストレージ」、「他ストレージ」という用語が用いられることがあるが、これらの用語の意味は実施例1で説明したものと同じである。
図16と図26を用いて、リード処理実行部4000’の処理の流れを説明する。リード処理実行部4000’が行う処理は、実施例1で説明したリード処理実行部4000とほとんど同じで、少なくともステップ5000~ステップ5006は図16に記載のものと同じである。以下では図26を用いて、リード処理実行部4000’の後半部の処理(具体的にはステップ5007以降の処理)の説明を行う。なお、リード処理実行部4000’の後半部の処理は、実施例1で説明した処理と共通する点が多いため、以下では実施例1で説明したリード処理実行部4000と異なる点を中心に説明する。
ステップ5007は、実施例1で説明したものと同じである。続いてステップ5008では、要求されたデータがキャッシュ210に存在しない場合(ステップ5008:No)、リード処理実行部4000’は次にステップ15000を行う。要求されたデータがキャッシュ210に存在する場合には(ステップ5008:Yes)、リード処理実行部4000’は次にステップ5009を行って、処理を終了する。ステップ5009は実施例1で説明したものと同じである。
ステップ15000:リード処理実行部4000’は、リード要求で指定された領域を含む仮想ページに割り当てられている実ページの実ページポインタ2004を参照することで、その実ページが自ストレージの有する実ページか判定する。具体的にはリード処理実行部4000’は、実ページポインタ2004に格納されている、実ストレージシステム100の識別子が自ストレージの識別子か否かを判定する。自ストレージが有する実ページの場合(ステップ15000:Yes)、リード処理実行部4000’はステップ5010~ステップ5013を行い、その後処理を終了する。ステップ5010~ステップ5013は、実施例1で説明したものと同じである。
ステップ15001:リード要求で指定された領域を含む実ページが他ストレージの実ページの場合(ステップ15000:No)、ステップ15001が行われる。ステップ15001ではリード処理実行部4000’は、リード要求で指定された領域を含む実ページを有する実ストレージシステム100にリード要求を発行する。ここで発行されるリード要求(コマンド)にはリード対象領域のアドレスが含まれるが、リード処理実行部4000’は実ページポインタ2004に格納されている、ストレージグループ識別子2104と実ページアドレス2102をリード対象領域のアドレスとして指定したコマンドを作成する。そしてリード処理実行部4000’は、作成されたコマンドを、リード対象の実ページを有する実ストレージシステム100に対して発行する。
ステップ15002:リード処理実行部4000’は、リード要求発行先の実ストレージシステム100から、処理完了の報告及びリードデータが返却されるまで待機する。処理完了の報告を受領した後、リード処理実行部4000’はステップ5012、ステップ5013を実行した後、処理を終了する。
なお、このリード要求を受け取った実ストレージシステム100は、指定されたストレージグループ識別子2104と実ページアドレス2102から、アクセス対象のストレージ装置160とアクセス対象アドレスを計算して、そのストレージ装置160に、計算したアドレスを指定した読み出し要求を発行する。この後実ストレージシステム100は、読み出したデータを、要求元の実ストレージシステム100に送り、処理を完了する。
続いて図18と図27を用いて、ライト要求受付部4100’の処理フローを説明する。ライト要求受付部4100’が行う処理の多くは、実施例1におけるライト要求受付部4100と同様である。少なくともステップ6000~6007は、図18に記載のものと同じである。以下では図27を用いて、後半部の処理(具体的にはステップ6008以降の処理)について、特に実施例1で説明したライト要求受付部4100の処理と異なる点を主に説明する。なお、図27の説明において、自ストレージのことを「実ストレージA」と呼ぶこともある。なお図27に記載の処理は、特に断りのない限り、実ストレージAのライト要求受付部4100’が行う。
ライト要求受付部4100’は、実施例1におけるライト要求受付部4100が行うステップ6010とステップ6011の代わりに、以下のステップを実行する。
ステップ16000:ライト要求で指定された領域に対して実ページが割り当てられていない場合(ステップ6009:No)、ステップ16000が実行される。ライト要求受付部4100’は、総空き記憶容量2055と空き記憶容量2057から、仮想ページサイズを減算する。また、他の実ストレージシステム100へ、総空き記憶容量2055と実ストレージAの空き記憶容量(他の実ストレージシステム100が有する他実ストレージシステム情報2070’の中の、実ストレージAの他空き記憶容量2075)から、仮想ページサイズを減算するよう要求し、他の実ストレージシステム100で処理が完了するまで待機する。
この要求を受け取った他ストレージは、総空き記憶容量2055を、仮想ページ容量分だけ減算し、さらに実ストレージAの他空き記憶容量2075を、仮想ページ容量分だけ減算する。この処理が終了した後、他ストレージは要求を発行した実ストレージシステム100(実ストレージA)に処理完了を報告する。
ステップ16001:ライト要求受付部4100’は、総空き記憶容量2055をチェックして、必要があれば、新たな実ストレージシステム100の追加を要求する。
ステップ16002:ライト要求受付部4100’は、実ストレージAに空きページがあるか判定する。具体的には、実ストレージAの有するストレージシステム情報2050の中の、空き記憶容量2057が負の値になっていなければ空きページがあり、負値であれば空きページがないことを意味する。実ストレージAに空きページがある場合、つまり空き記憶容量2057が負の値でない場合には(ステップ16002:No)、ライト要求受付部4100’は次にステップ6012を実行する。ステップ6012、ステップ6013は、実施例1で説明したものと同じである。
ステップ16003:ライト要求受付部4100’は他実ストレージシステム情報2070’の他空き記憶容量2075を参照することで、他ストレージに空き実ページがあるか(他空き記憶容量2075が1仮想ページ以上のサイズである実ストレージシステム100があるか)をチェックする。空き実ページのある実ストレージシステム100が見つからなかった場合には、サーバ110にエラーを返却してライト処理は終了する。
空き実ページのある実ストレージシステム100が見つかった場合、ライト要求受付部4100’は空き実ページのある実ストレージシステム100に空き実ページの割り当てを依頼する(ステップ16004)。ただしステップ16004の説明の前に、まず空き実ページのある実ストレージシステム100が見つかった場合にステップ16003で行われる処理について説明する。以下の説明では、空き実ページの割り当てが依頼される実ストレージシステム100を「実ストレージB」と表記する。
まず実ストレージAのライト要求受付部4100’が行う処理を説明する。ライト要求受付部4100’は、空き記憶容量2057を0にする。さらにライト要求受付部4100’は、仮想ストレージシステム190内の他の各実ストレージシステム100に対して、実ストレージAの他空き記憶容量2075を0に、実ストレージBの他空き記憶容量2075を1ページ分減算するよう要求し、各実ストレージシステム100から完了が帰ってくるまで待機する。
そして、この要求を受け取った各実ストレージシステム100は、他実ストレージシステム情報2070’内の情報の更新を行う。具体的には各実ストレージシステム100は、実ストレージAの他空き記憶容量2075を0に、実ストレージBの他空き記憶容量2075を1ページ分減算し、この処理の終了後、実ストレージAに完了を報告する(ただし、実ストレージBの他空き記憶容量2075は、実ストレージB以外の実ストレージシステム100だけが更新する)。以上が、ステップ16003で実ストレージAが行う処理、及び実ストレージAから要求を受け付けた各実ストレージシステム100が行う処理の内容である。
ステップ16004:実ストレージAのライト要求受付部4100’は、実ストレージBに実ページを割り当てる要求を発行し、実ストレージBからの応答を待つ。実ストレージBで実ページの確保が行われると、実ストレージAには応答情報として実ページの情報が返却される。実ページの情報とは具体的には、実ページポインタ2004に格納されるべき情報、つまり実ページを有する実ストレージシステム100の識別子、実ページの存在するストレージグループ2101の識別子、ストレージグループ2101内のアドレスである。実ストレージAのライト要求受付部4100’は実ストレージBから応答情報を受領すると、受け取った情報を実ページポインタ2004に設定する。
一方、実ストレージAから実ページを割り当てる要求を受け取った実ストレージBは、適当なストレージグループ情報2300を選択して、空きページ管理ポインタ2200から、空き実ページを1つ選択し、選択された空き実ページの情報(この空き実ページの属する実ストレージシステムの識別子及びストレージグループの識別子、そして実ページアドレス2102)を、実ストレージAに送る。なお、ここで選択された実ページが、実ストレージBまたは他の実ストレージシステム100で使用されないようにするために、実ストレージBはここで選択された空き実ページの実ページ情報2100を空き実ページ情報キューから外し、この実ページ情報2100へのポインタを使用中ページリスト2200’に格納しておく。また実ストレージBは、ストレージシステム情報2050内の空き記憶容量2057を1ページ分減算する。
この後実ストレージAのライト要求受付部4100’は、ステップ6013を実行し、処理を終了する。
図28は、実施例2におけるライトアフタ処理実行部4200’の処理フローである。ライトアフタ処理実行部4200’では、実施例1で説明したライトアフタ処理実行部4200の行う処理に加えて、以下のステップが実行される。なお、ここではライトアフタ処理実行部4200’によってデステージされるデータが、論理ボリューム上の1仮想ページ内に収まるサイズのデータである場合の例を説明する。
ステップ17000:ライトアフタ処理実行部4200’は、ステップ7000の後、ステップ17000を実行する。ステップ17000ではライトアフタ処理実行部4200’は、キャッシュ210上のライトデータに付加されている情報をもとに、ステップ7000で選択したライトデータの書き込み先仮想ページを特定し、さらにその仮想ページに設定されている実ページポインタ2004を特定する。そしてライトアフタ処理実行部4200’は、特定された実ページポインタ2004の内容から、仮想ページに割り当てられている実ページが、自ストレージに存在するものか判定する。この判定は、たとえばステップ15000で行われるものと同様のものである。
自ストレージが有する実ページである場合(ステップ17000:Yes)、ライトアフタ処理実行部4200’は、実施例1と同様の処理(ステップ7001~ステップ7005)を行う。
ステップ17001:ステップ7000で選択したライトデータの書き込み先が他の実ストレージシステム100の実ページの場合(ステップ17000:No)、ライトアフタ処理実行部4200’はその実ストレージシステム100に、実ページポインタ2004に格納されている、ストレージグループ識別子2104と実ページアドレス2102をライト先アドレスとして指定した、書き込み要求を発行する。
ステップ17002:ライトアフタ処理実行部4200’は、ステップ17001で発行したライト要求が完了するまで待機する。ライト要求が完了した後、ライトアフタ処理実行部4200’はステップ7005を実行し、処理を終了する。
また、この書き込み要求を受け取った実ストレージシステム100は、書き込み要求で指定されているストレージグループ識別子2104と実ページアドレス2102から、ライトデータの書き込み先となるストレージ装置160及びストレージ装置160内のアドレスを算出する。その後は、図20のステップ7002~7004と同様の処理を行い、ストレージ装置160への書き込みが完了した後、要求元の実ストレージシステム100に完了報告を行い、処理を終了する。
続いて実施例2における実ストレージシステム追加処理部4300’の処理フローを説明する。ただし、実ストレージシステム追加処理部4300’の実行する処理は、実施例1で説明した実ストレージシステム追加処理部4300の処理(図21)と殆ど同じであるため、以下では図21を参照しながら相違点を説明する。
まず、追加された実ストレージシステム100で実行される処理は、実施例1で説明したもの(図21 ステップ8001~ステップ8007)と同じである。続いて、追加された実ストレージシステム100から通知を受け取る他の実ストレージシステム100(これを「実ストレージA」と呼ぶ)の処理は、実施例1で説明したもの(図21 ステップ8011~ステップ8022)とほぼ同様であるが、ステップ8015の処理が異なる。
実ストレージAの実ストレージシステム追加処理部4300’はステップ8015で、他実ストレージシステム情報2070’に、追加された実ストレージシステム100の情報を追加する。具体的にはまず、追加された実ストレージシステム100の実ストレージシステム識別子と、追加された実ストレージシステム100が有するストレージポート197のストレージポート識別子が追加される。これらの処理は実施例1のステップ8015と同じ処理である。
さらに実ストレージAの実ストレージシステム追加処理部4300’は、追加された実ストレージシステム100のプール容量2058を、追加された実ストレージシステム100の他実ストレージ記憶容量2074と他空き記憶容量2075に設定する(ステップ8015’)。これ以外の点は、実施例1で説明したものと同じである。
続いてコピー処理部4400’の処理フローの説明を行う。コピー処理部4400’が行う処理は、実施例1で説明したコピー処理部4400の処理と多くの部分で共通しているので、以下では相違点を中心に説明する。
なお、本実施例では、追加された実ストレージシステム100がデータのコピー先論理ボリューム(現論理ボリューム)に対して割り当てる実ページが、追加された実ストレージシステム100の有する実ページである例を説明する。ただし、仮想ストレージシステム190に属する任意の実ストレージシステム100の実ページが割り当てられてもよい。また以下では、追加された実ストレージシステム100を「実ストレージA」と表記し、実ストレージAに仮想論理ボリュームを移行する実ストレージシステム100を「実ストレージB」と表記する。
実ストレージAのコピー処理部4400’が実行する処理は、実施例1で説明したもの(ステップ14000~ステップ14010)とほとんど同じであるが、ステップ14009とステップ14010で、以下の処理が行われる点が異なる。
ステップ14009で実ストレージAはまず、実施例1と同じ処理を行う。その後実ストレージAは、仮想ストレージシステム190内の各実ストレージシステム100に、実ストレージAの他空き記憶容量2075から、移行対象の論理ボリュームの論理容量を減算するよう指示する。
続いてステップ14010で、実ストレージB(旧論理ボリュームを有する実ストレージシステム100)から完了報告を受け取った後、実ストレージAは仮想ストレージシステム190内の各実ストレージシステム100に、実ストレージBの他空き記憶容量2075に、移行対象の論理ボリュームの論理容量を加算するよう指示する。これら以外の処理は、実施例1で説明したものと同じため、コピー処理部4400’の処理フローの図示は略す。
図29は、追加された実ストレージシステム100が発行する実ページの読み出し要求(ステップ14001)を受け取った実ストレージシステム100(つまり旧論理ボリュームを有する実ストレージシステム100)のコピー処理部4400’で行われる処理の流れを示している。なお、以下の説明では、旧論理ボリュームを有する実ストレージシステム100のことを「要求先ストレージ」と呼ぶ。
ステップ14011:コピー処理部4400’は、論理ボリューム情報2000の実ページポインタ2004を参照することで、指定された仮想ページに実ページが割り当てられているか判定する。実ページが割り当てられている場合、次にステップ15000’が行われる。
ステップ14012:実ページが割り当てられていない場合、コピー処理部4400’は要求元の実ストレージシステム100にヌル値を返送し、処理を完了する。この処理は実施例1で説明したものと同じである。
ステップ15000’:ステップ15000’、15001’、15002’は、リード処理実行部4000’が行う処理(ステップ15000~ステップ15002)と同様である。つまりステップ15000’ではコピー処理部4400’は、リード要求で指定された領域を含む実ページは、要求先ストレージが有する実ページか判定する。要求先ストレージが有する実ページの場合(ステップ15000’:Yes)、コピー処理部4400’はステップ14013~ステップ14015を行うことで、要求先ストレージ内のストレージ装置160からデータを読み出して、要求元の実ストレージシステム100にデータを返送する。ステップ14013~ステップ14015は、実施例1で説明したものと同じである。
ステップ15001’:ステップ15000’の判定で、リード要求で指定された領域を含む実ページは、要求先ストレージが有する実ページでなかった場合(ステップ15000:No)、コピー処理部4400’は、リード要求で指定された領域を含む実ページを有する実ストレージシステム100にリード要求を発行する。この処理はリード処理実行部4000’がステップ15001で行う処理と同様である。
ステップ15002’:ステップ15001’の後、コピー処理部4400’はリード要求を発行した実ストレージシステム100からリードデータが返送されて来るまで待機する。その後リードデータを要求元の実ストレージシステム100にデータを返送し(ステップ14015)、処理を終了する。
以上が実施例2の説明である。実施例2に係る仮想ストレージシステムは、実施例1に係る仮想ストレージシステムと同様の機能を有することに加え、論理ボリュームの仮想ページには、仮想ストレージシステム内の任意の実ストレージシステムが有するページを割り当て可能に構成されている。複数の(実)ストレージシステムが設けられる情報システムにおいて、各ストレージシステムの空き容量の合計は、ユーザが望む(作成したい)ボリュームの容量以上存在するが、個々の実ストレージのそれぞれには、ユーザが望む容量の空き領域が存在していない場合があり得る。実施例2に係る仮想ストレージシステムは、複数の実ストレージシステムが有する空き領域(空きページ)を用いて、論理ボリュームを定義できるため、上に述べたような場合であっても、記憶領域を有効に活用できる。
以上、本発明の実施例を説明したが、これらは、本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。すなわち、本発明は、他の種々の形態でも実施する事が可能である。
上で説明した実施例では、実ストレージシステムが仮想ストレージシステムに追加されると、サーバに仮想ストレージ記憶容量2053(つまり仮想ストレージシステムのプールの容量)と総実ストレージ記憶容量2054と総空き記憶容量2055(仮想ストレージシステムのプールの空き容量)の情報が通知された。しかし、必ずしもこれらの全ての情報が通知されなくともよい。たとえばプールの空き容量(総空き記憶容量2055)だけが通知されてもよい。
また、上で説明した実施例では、仮想ストレージ記憶容量2053や総空き記憶容量2055の値として、プールに属するストレージ装置160の容量(または空き容量)を仮想ページの量に換算した値を用いる例を説明した。しかし必ずしもプールの容量や空き容量を仮想ページの量に換算する必要はない。ストレージシステム(仮想ストレージシステムに含まれる実ストレージシステム)は、プールに属するストレージ装置160の容量(または空き容量)を、プールの容量(または空き容量)として計数してサーバに提供してもよい。
また、上で説明した実施例では、実ストレージシステムが仮想ストレージシステムに追加された時点で、実ストレージシステムからサーバに、仮想ストレージシステムのプールの空き容量の情報等が通知されたが、別の実施形態として、実ストレージシステムが自発的にこれらの情報をサーバに送る代わりに、サーバからの問い合わせがあった時点で、これらの情報を実ストレージシステムからサーバに通知してもよい。
また、上で説明した各実施例では、実ストレージシステムがキャッシュ210と共有メモリ220とメモリ270という複数種類のメモリを有していた。しかし別の実施形態として、ストレージ装置が単一種類のメモリのみを有する構成であっても良い。たとえばメモリ270だけを有する構成でもよい。その場合、全ての情報(サーバ110からのライトデータ、仮想論理ボリューム情報等の管理情報等)が同じメモリ270に格納される。
また、実ストレージシステムのハードウェア構成は、サーバと同様の構成であってもよい。たとえば上の実施例で説明した実ストレージシステムに代えて、パーソナルコンピュータ等の汎用のコンピュータ(以下、これを単に「コンピュータ」と呼ぶ)に複数のストレージ装置160を搭載(または接続)し、コンピュータ上で、上で説明した各種プログラム(リード処理実行部4000や実ストレージシステム追加処理部4300等)を実行させてもよい。この場合、コンピュータがサーバから(仮想)論理ボリュームに対するI/O要求を受け付けて、ストレージ装置へのデータの格納、またはストレージ装置からのデータの読み出しを行う。
また、コンピュータ上で、上で説明した各種プログラムを実行させる構成の場合、上で述べた実施例で説明した、実ストレージシステム上で実行される各種プログラムとサーバで実行されるプログラムがいずれも、同一コンピュータ上で実行されるように構成されていてもよい。この場合、たとえば仮想マシンを形成するハイパーバイザプログラムをコンピュータ上で実行することで、コンピュータ上に少なくとも、サーバで実行されるプログラム(アプリケーションプログラム1100等)を実行する仮想マシンと、上の実施例で説明した各種プログラム(図15に記載の各プログラム)を実行する仮想マシンとを形成するとよい。