いくつかの実施例について、図面を参照して説明する。なお、以下に説明する実施例は特許請求の範囲にかかる発明を限定するものではなく、また実施例の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
図1は、第1の実施例に係る情報システムの構成を示す図である。
情報システムは、一つ以上のストレージボックス130、一つ以上の実ストレージシステム100、一つ以上のサーバ110、SAN(Storage Area Network)120、及びストレージ管理サーバ150を含む。SAN120は、実ストレージシステム100とサーバ110とを接続する。サーバ110は、一つ以上のサーバポート195を持つ。サーバ110は、サーバポート195によって、SAN120に接続される。実ストレージシステム100は、SAN120に接続される一つ以上のストレージポート197と、ストレージボックス130に接続するためのスイッチ170とをもつ。実ストレージシステム100は、ストレージポート197によって、SAN120に接続される。サーバ110は、内部に、サーバポート情報198をもつ。サーバ110は、ユーザアプリケーションが動作するシステムであり、実ストレージステム100との間で、SAN120経由で、必要なデータを読み書きする。実ストレージシステム100は、実ストレージシステム100同士で、互いに、SAN120経由で、データの送受信を行う。SAN120においては、SCSIコマンドが転送可能なプロトコルを用いる。例えば、Fibre Channel等のプロトコルを用いることができる。
本実施例では、情報システムには、一つ以上の実ストレージシステム100から構成される仮想ストレージシステム190が存在する。サーバ110からは、仮想ストレージシステム190が、ストレージシステムに見える。ただし、本実施例において、仮想ストレージステム190が存在しなくても良い。仮想ストレージステム190が存在しない場合、実ストレージシステム100が、サーバ110からは、ストレージステムに見える。
ストレージボックス130は、HDD(Hard Disk Drive)、フラッシュメモリを記憶媒体とするフラッシュストレージなどのストレージ装置160(共有ストレージ装置180)、スイッチ170などを含む。また、フラッシュストレージには、いくつかの種類があり、高価格、高性能、且つ消去可能回数の多いSLC(Single level Cell)型のフラッシュメモリを含むものと、低価格、低性能、且つ消去可能回数の少ないMLC(Multi Level Cell)型のフラッシュメモリを含むものとがある。ストレージ装置160は、相変化メモリなどの新しい記憶媒体を含んでいてもよい。
本実施例においては、ストレージボックス130の中のストレージ装置160は、複数の実ストレージシステム100によって、共有される。したがって、本実施例では、ストレージボックス130の中のストレージ装置160を、共有ストレージ装置180と呼ぶ場合がある。ストレージボックス130は、スイッチ170を経由して、仮想ストレージシステム190の中の一つ以上の実ストレージシステム100に接続される。ストレージボックス130は、必ずしも、仮想ストレージシステム190の中のすべての実ストレージシステム100と接続されている必要はない。また、ある実ストレージシステム100と別の実ストレージシステム100とのそれぞれに接続されているストレージボックス130の集合は、まったく同じである必要はない。ストレージボックス130は、スイッチ170を経由して、実ストレージシステム100のいくつかによって、共有されている。ストレージ管理サーバ150は、実ストレージステム100及びストレ−ジボックス130の管理を行うため、ストレージ管理者が利用する装置である。ストレージ管理サーバ150は、ネットワークなどを経由して、実ストレージシステム100と接続されている。第1の実施例では、実ストレージシステム100は、容量仮想化機能をもっていない。
図2は、第1の実施例に係るサーバポート情報の構成を示す図である。
サーバポート情報198は、サーバポート195ごとに持つ情報である。サーバ110は、実ストレージシステム100に読み書き要求(リード・ライト要求)を発行する際、ストレージシステムの識別子、論理ボリュームの識別子、及びパス(ストレージポート197)の識別子を設定する。このため、サーバポート情報198は、サーバポート識別子24000と、サーバポート195からアクセスする一つ以上の論理ボリューム識別子24001と、この論理ボリューム識別子24001の論理ボリュームを含むストレージシステムのストレージシステム識別子24002と、論理ボリューム識別子24001の論理ボリュームが接続されているストレージポート197のストレージポート識別子24003とを含む。1つの論理ボリュームが複数のストレージポート197に接続されている場合、この論理ボリュームに対応して、複数のストレージポート識別子24003が設定される。
本実施例では、ストレージシステム識別子24002には、仮想ストレージシステム190の識別子が設定される。ただし、仮想ストレージシステム190が存在しない場合には、ストレージシステム識別子24002には、実ストレージステム100の識別子が設定される。また、ストレージポート識別子24003には、ストレージポート197の識別子が設定される。
論理ボリューム識別子24001には、仮想論理ボリュームの識別子が設定される。仮想論理ボリュームの識別子は、仮想ストレージステム190内で、ユニークな値である。なお、それぞれの実ストレージスステム100も論理ボリュームをもつ。この論理ボリュームの識別子は、実ストレージシステム100内では、ユニークである。サーバ110のリード・ライト要求は、仮想ストレージシステムの識別子、仮想論理ボリュームの識別子、及びストレージポート197の識別子を含む。ストレージポート197の識別子は、リアルな値であるため、この識別子により、サーバ110の読み書き要求を受け取る実ストレージシステム100が決定される。なお、本実施例は、仮想ストレージシステム190が存在しなくてもよいので、その場合には、論理ボリューム識別子24001には、実ストレージステム100の論理ボリュームの識別子が設定される。また、本実施例では、仮想論理ボリュームを読み書きする実ストレージシステム100を変更するが、その際には、サーバ110は、リード・ライト要求の仮想論理ボリュームの識別子を変更せず、ストレージポート197の識別子を変更する。
図3は、第1の実施例に係る実ストレージシステムの構成を示す図である。
実ストレージシステム100は、一つ以上のストレージコントローラ200、キャッシュメモリ210、共有メモリ220、ストレージ装置160(内部ストレージ装置230)と、これらの構成要素を接続する一つ以上の接続装置250と、ストレージボックス130とのインターフェイスであるスイッチ170とを含む。実ストレージシステム100内に含まれるストレージ装置160は、基本的には、ストレージボックス130内に含まれるストレージ装置160と同じ装置である。本実施例では、実ストレージシステム100に含まれるストレージ装置160を内部ストレージ装置230と呼ぶ場合がある。ここで、本実施例では、ストレージ装置160は、内部ストレージ装置230、共有ストレージ装置160の双方を表すものとする。なお、本実施例においては、実ストレージシステム100は、必ずしも、内部ストレージ装置230をもつ必要はない。また、本実施例は、複数の実ストレージシステム100によって共有される一つ以上のストレージボックス130によって構成される複合ストレージシステムに関するものなので、内部ストレージ装置230に関して、ストレージコントローラ200が実行する処理、共有メモリ220に保有する情報などについては、説明を省略する。
ストレージコントローラ200は、サーバ110から発行されたリード・ライト要求を処理するプロセッサ260と、プログラムや情報を保管するメモリ270と、バッファ275とを含む。バッファ275は、(1)後述する冗長データを生成する際、生成に必要な情報や、生成した冗長データを格納するための一時的な記憶領域、(2)ストレージ装置160に対応するキャッシュ領域に格納されたデータを、恒久的に格納するストレージ装置160に書き込む際の一時的な格納領域、として使用される。
接続装置250は、実ストレージシステム100内の各構成要素を接続する装置である。本実施例の特徴は、接続装置250を経由して、一つ以上のストレージボックス130が接続されている点である。これにより、ストレージコントローラ200は、ストレージボックス130内のストレージ装置160に対して、読み書きを実行できる。なお、本実施例では、ストレージボックス130は、実ストレージシステム100内の一つ以上のストレージコントローラ200に接続されているものとする。
キャッシュメモリ210及び共有メモリ220は、通常DRAMなどの揮発性メモリであり、図示しないバッテリーなどにより電力が供給されて、不揮発化されている。また、本実施例では、キャッシュメモリ210及び共有メモリ220は、高信頼化のため、それぞれが2重化されている。なお、キャッシュメモリ210及び共有メモリ220が不揮発化されていなくてもよく、2重化されていなくてもよい。キャッシュメモリ210には、内部ストレージ装置230及び共有ストレージ装置180に格納されたデータの中で、ストレージコントローラ200からよくアクセスされるデータが格納される。ストレージコントローラ200は、サーバ110から、リード・ライト要求を受け付ける。この際、ストレージコントローラ200は、ストレージ装置160に書き込むよう受け取ったデータ(ライトデータ)を、キャッシュメモリ210に書き込んで、該当するライト要求を完了させる。なお、ライトデータを内部ストレージ装置230又は共有ストレージ装置180に格納した段階でライト要求を完了させるようにしてもよい。
図4は、第1の実施例に係るキャッシュメモリの構成を示す図である。
キャッシュメモリ210は、固定長のスロット21100に分割されている。スロット21100が、リード・ライトデータの割り当て単位となる。
本実施例では、ストレージコントローラ200は、ストレージ装置160の中の一台のストレージ装置160が故障しても、その故障したストレージ装置160のデータを回復できるRAID(Redundant Arrays of Inexpensive (or Independent) Disks)機能をもっているものとする。RAID機能をもっている場合、複数の同一種類のストレージ装置が、一つのRAID構成をとる。1つのRAID構成をとる複数のストレージ装置の集合をストレージグループ280(図3参照)と呼ぶ。本実施例では、RAID構成は、一つのストレージボックス130内の共有ストレージ装置180の集合(図62参照)、あるいは、一つのストレージシステム100内の内部ストレージ装置230の集合から構成されるものとする。なお、ストレージコントローラ200が、RAID機能を持っていなくてもよい。
図5は、第1の実施例に係るストレージシステムの共有メモリに格納された情報を示す図である。
共有メモリ220は、ストレージシステム情報2060、他ストレージシステム情報2070、仮想論理ボリューム情報2085、論理ボリューム情報2000、ストレージボックス情報2050、ストレージグループ情報2300、ストレージ装置情報2500、キャッシュ管理情報2750、及び空きキャッシュ管理情報ポインタ2650を格納する。
図6は、第1の実施例に係るストレージシステム情報の構成を示す図である。
ストレージシステム情報2060は、このストレージシステム情報2060を格納する共有メモリ220が属する実ストレージシステム100に関する情報である。ストレージシステム情報2060は、第1の実施例では、仮想ストレージシステム識別子2061と、実ストレージシステム識別子2062とを含む。仮想ストレージシステム識別子2061は、ストレージシステム情報2060が示す実ストレージシステム100が含まれる仮想ストレージシステム190の識別子である。実ストレージシステム識別子2062は、ストレージシステム情報2060が示す実ストレージシステム100の識別子である。
図7は、第1の実施例に係る他ストレージシステム情報の構成を示す図である。
他ストレージシステム情報2070は、この他ストレージシステム情報2070を格納する共有メモリ220が属する実ストレージシステム100の他の実ストレージシステム100に関する情報である。他ストレージシステム情報2070は、仮想ストレージシステム識別子2071と、実ストレージシステム識別子2072とを含む。仮想ストレージシステム識別子2071は、図6に含まれる仮想ストレージシステム識別子2061と同じであり、実ストレージシステム100が含まれる仮想ストレージシステム190の識別子である。実ストレージシステム識別子2072は、実ストレージシステム100を含む仮想ストレージシステム190に含まれる他の実ストレージシステム100の識別子である。
図8は、第1の実施例に係る仮想論理ボリューム情報の構成を示す図である。
仮想論理ボリューム情報2085は、仮想論理ボリュームごとに作成される。仮想論理ボリューム情報2085は、仮想論理ボリューム識別子2086、制御権情報2087、実ストレージシステム識別子2088、ストレージポート識別子2089、サーバポート識別子2091、及び論理ボリューム識別子2090を含む。仮想論理ボリューム識別子2086は、仮想論理ボリューム情報2085が示す仮想論理ボリューム(図8の説明において、当該仮想論理ボリュームという。)の識別子である。本実施例では、仮想論理ボリュームに対しては、情報システムにおけるどれか一つの実ストレージシステム100が読み書きを行う権限(制御権)をもつ。制御権情報2087は、この仮想論理ボリューム情報2085を格納する共有メモリ220が属する実ストレージシステム100(図8の説明で当該実ストレージシステム100という)が当該仮想論理ボリュームに対する制御権をもっているか否かを示す情報である。当該実ストレージシステム100が当該仮想論理ボリュームに対する制御権をもっていない場合、実ストレージシステム識別子2088は、当該仮想論理ボリュームに対する制御権を有する実ストレージシステム100の識別子を示し、ストレージポート識別子2089は、当該仮想論理ボリュームが接続されている一つ以上のストレージポート197の識別子を示す。論理ボリューム識別子2090は、当該実ストレージシステム100内の当該仮想論理ボリュームに対応する論理ボリュームの識別子であり、当該実ストレージシステム100内に対応する論理ボリュームが存在しない場合には、制御権をもつ実ストレージシステム100内の当該仮想論理ボリュームに対応する論理ボリュームの識別子である。
図9は、第1の実施例における論理ボリューム情報の構成を示す図である。
本実施例では、サーバ110がデータをリード・ライトするストレージ装置は、仮想論理ボリュームである。サーバ110は、仮想論理ボリュームのID、仮想論理ボリューム内のアドレス、及び読み書きしたいデータの長さを指定して、リード要求やライト要求を発行する。実ストレージシステム100は、サーバ110からリード要求やライト要求を受け取ると、仮想論理ボリューム情報2085により、要求に対応する論理ボリュームの識別子を認識する。本実施例では、論理ボリュームの識別子は、実ストレージシステム100内でユニークな情報である。論理ボリューム情報2000は、論理ボリュームごとに存在し、論理ボリュームに関する情報である。
論理ボリューム情報2000は、論理ボリューム識別子2001、論理容量2002、論理ボリュームタイプ2005、論理ボリュームRAIDグループタイプ2003、割り当て範囲2006、セグメントビットマップ2014、第1リード回数2007、第1ライト回数2008、第2リード回数2009、第2ライト回数2010、移動中フラグ2015、移動元LUN2016,移動ポインタ2017、移動待ちフラグ2018、閉塞移動中フラグ2019、閉塞移動元LUN2021、及びキャッシュ管理ポインタ2022を含む。
論理ボリューム識別子2001は、論理ボリューム情報2000に対応する論理ボリューム(以下、図9の説明において当該論理ボリュームという)のIDを示す。論理容量2002は、当該論理ボリュームの容量である。論理ボリュームタイプ2005は、当該論理ボリュームのタイプを表す。本実施例では、論理ボリュームタイプ2005は、当該論理ボリュームが、内部ストレージ装置230に格納されているか、共有ストレージ装置180に格納されているかを示す。論理ボリュームRAIDグループタイプ2003は、当該論理ボリュームのRAIDタイプ(例えば、RAID0、RAID1等)を示す。論理ボリュームRAIDグループタイプ2003は、RAID5のように、N台の容量に対し、1台の容量の冗長データを格納する場合、Nの具体的な数値を含むものとする。ただし、論理ボリュームRAIDグループタイプ2003には、任意のRAIDタイプが指定できるわけでなく、少なくとも一つストレージグループ280がもつRAIDタイプである必要がある。割り当て範囲2006は、当該論理ボリュームに割り当てたストレージグループ280の識別子と、最も小さい番号のセグメントの番号を示す。セグメントビットマップ2014は、最も小さい番号のセグメントを最初1ビットに対応させ、以降の番号の各セグメントを後続のビットに対応させ、各ビットにより、対応するセグメントが当該論理ボリュームに割り当てられているか、そうでないかを表す。
第1リード回数2007、第1ライト回数2008、第2リード回数2009、及び第2ライト回数2010は、当該論理ボリュームのリード処理・ライト処理の実行回数に関する情報である。本実施例では、プロセッサ260は、当該論理ボリュームに対するリード・ライト要求を受け付けると、第1リード回数2007、あるいは、第1ライト回数2008を加算する。さらに、プロセッサ260は、一定間隔ごとに、第1リード回数2007を第2リード回数2009にコピーし、第1ライト回数2008を第2ライト回数2010にコピーし、第1リード回数2007及び第1ライト回数2008を「0」にする。これによって、第2リード回数2009、第2ライト回数2010に、ある程度の期間のリード・ライト回数が格納されることとなり、当該論理ボリュームの性能特性を把握することができる。なお、リード回数、ライト回数以外に、リード処理又はライト処理におけるデータ量などを計測してもよい。これらの情報を用いて、ストレージコントローラ200は、論理ボリュームを実ストレージシステム100の間で再配置する。
移動中フラグ2015は、当該論理ボリュームを移動中であることを示すフラグである。移動元LUN2016は、当該論理ボリュームを移動中の場合、移動元となる論理ボリュームの実ストレージシステム100、ストレージポート197、及び論理ボリュームの識別子を表す。移動ポインタ2017は、移動処理(コピー処理)が、どのブロックまで進んだかを示す。移動待ちフラグ2018は、当該論理ボリュームが移動を待っている状態にあることを示すフラグである。閉塞移動中フラグ2019は、他の実ストレージシステム100に障害があり、障害を起こした実ストレージシステム100のキャッシュメモリ210、共用メモリ220の引継ぎデータをコピーしている状態を表すフラグである。ここで、実ストレージシステム100を閉塞しようとする場合、キャッシュメモリ210に残っているライトデータを、共有ストレージ装置180に書き込む必要がある。ライトデータを共有ストレージ装置180に書き込む方法として、二つの方法が考えられる。一つは、閉塞しようとしている実ストレージシステム100が、ライトデータを共有ストレージ装置180に書き込む方法である。もう一つの方法は、ライトデータを他の実ストレージシステム100のキャッシュメモリ210等に移動して、他の実ストレージシステム100が共有ストレージ装置180にデータを書き込む方法である。本実施例では、いずれの方法をとっても良い。なお、キャッシュメモリ210が二重化されていて、一方のキャッシュメモリ210が閉塞されている場合などは、ライトデータを、他の実ストレージシステム100のキャッシュメモリ210に移したほうが、より高速に、データを二重化した状態にすることができるので、信頼性の観点では優れる。以下の第1乃至第4の実施例においては、ライトデータを他の実ストレージシステム100のキャッシュメモリ210に移動して、他の実ストレージシステム100が共有ストレージ装置180にデータを書き込む方法について、詳細に述べる。だだし、第1乃至第4の実施例のいずれの実施例においても、論理ボリュームを移動する際、移動元の実ストレージシステム100が、ライトデータを、共有ストレージ装置180に書き込んでも良い。
障害移動先LUN2020は、移動元となる論理ボリューム情報に設定される情報で、移動先の実ストレージシステム100、ストレージポート197、論理ボリュームの識別子が設定される。閉塞移動元LUN2021は、移動先となる論理ボリュームの論理ボリューム情報2000に設定される情報であり、移動元の実ストレージシステム100、ストレージポート197、及び論理ボリュームの識別子を含む。キャッシュ管理ポインタ2022は、当該論理ボリュームをスロット21100に相当する容量で分割したそれぞれの領域に、スロット21100が割り当てられている(キャッシュメモリ210に格納されている)か否かを表す。スロット21100が割り当てられている場合、キャッシュ管理ポインタ2022は、対応するキャッシュ管理情報2750へのポインタとなる。また、スロット21100が割り当てられていない場合、キャッシュ管理ポインタ2022は、ヌル状態となる。
図10は、第1の実施例に係るキャッシュ管理情報の構成を示す図である。
キャッシュ管理情報2750は、スロット21100に対応して設けられる情報である。キャッシュ管理情報2750は、次キャッシュ管理情報ポインタ2751、割り当て論理ボリュームアドレス2752、ブロックビットマップ2753、及び更新ビットマップ2754を含む。
次キャッシュ管理情報ポインタ2751は、データを格納していない状態であるスロット21100(空きスロット21100)に対応するキャッシュ管理情報2750において有効な情報であり、次の空きスロット21100に対応するキャッシュ管理情報2750を示すポインタである。割り当て論理ボリュームアドレス2752は、キャッシュ管理情報2750に対応するスロット21100に、どの論理ボリュームのどのアドレスから開始する領域のデータを格納したかを示す。ブロックビットマップ2753は、割り当てられた領域の中で、キャッシュメモリ210に格納されたブロック(読み書きの最小単位)を示すためのビットマップである。ブロックビットマップ2753のビットは、ビットに対応するブロックがキャッシュメモリ210に格納されている場合には、オンに設定される。更新ビットマップ2754は、サーバ110から書き込み要求を受け、サーバ110から受け取り、キャッシュメモリ210に格納したブロックであって、まだ、ストレージ装置160に書き込んでいないブロックを示すためのビットマップである。更新ビットマップ2754のビットは、ビットに対応するブロックがストレージ装置160に書き込んでいないブロックである場合には、オンに設定される。
図11は、第1の実施例に係る空きキャッシュ情報管理キューの構成を示す図である。
空きキャッシュ情報管理キュー2201は、データが格納されていないスロット(空きスロット)を管理するためのキューである。空きキャッシュ情報管理キュー2201においては、空きキャッシュ管理情報ポインタ2650が、空きスロットに対応する先頭のキャッシュ管理情報2750をポイントし、そのキャッシュ管理情報2750の次キャッシュ管理情報ポインタ2751が、次の順番の空きスロットに対応するキャッシュ管理情報2750をポイントしている。
図12は、第1の実施例に係るストレージボックス情報の構成を示す図である。
ストレージボックス情報2050は、ストレージボックス130ごとに設けられる情報である。ストレージボックス情報2050は、ストレージボックス識別子7000、接続情報7001、ストレージ装置数7002、接続ストレージ装置数7003、パス数7004、パス識別子7006、及び接続可能パス数7005を含む。
ストレージボックス識別子7000は、ストレージボックス情報2050に対応するストレージボックス130(図12の説明で当該ストレージボックス130という)の識別子である。接続情報7001は、当該ストレージボックス130が、実ストレージシステム100に接続されているか、いないかを示す情報である。ストレージ装置数7002は、当該ストレージボックス130において、接続可能なストレージ装置160の台数である。接続ストレージ装置数7003は、当該ストレージボックス130に実際に接続されているストレージ装置160の台数である。パス数7004は、当該ストレージボックス130のパスの数である。パス識別子7006は、それぞれのパスごとの識別子である。接続可能パス数7005は、実際に接続可能なパスの数である。
図13は、第1の実施例に係るストレージグループ情報の構成を示す図である。
ストレージグループ情報2300は、ストレージグループID2301、ストレージグループ種別2306、パッケージグループRAIDタイプ2302、セグメント数2303、割り当て可能セグメント数2309、空きセグメント数2304、割り当て可能セグメントビットマップ2308、空きセグメントビットマップ2307、ストレージ装置ポインタ2305、第1R回数2310、第2R回数2311、第1W回数2312、及び第2W回数2313を含む。
ストレージグループID2301は、このストレージグループ情報2300が示すストレージグループ280(図13の説明において、当該ストレージグループ280という)の識別子である。ストレージグループ種別2306は、当該ストレージグループ280が、共有ストレージ装置180で構成されるか、内部ストレージ装置230で構成される装置かを示す情報である。共有ストレージ装置180で構成される場合、その共有ストレージ装置160を含むストレージボックス130の識別子も含む。パッケージグループRAIDタイプ2302は、当該ストレージグループ280のRAIDタイプである。本実施例におけるRAIDタイプは、図9の論理ボリュームRAIDグループタイプ2003で説明した通りである。
第1の実施例では、ストレージコントローラ200は、容量仮想化機能をもたないので、論理ボリュームを定義したときに、その容量分の物理的な領域が確保される。本実施例では、ストレージグループ2800の容量は、セグメントという単位に分割される。したがって、論理ボリュームの容量が定義されると、論理ボリュームには、その容量以上となる最小の数のセグメントが確保されることになる。セグメント数2303は、当該ストレージグループ280のセグメントの数を示す。割り当て可能セグメント数2309は、当該ストレージグループ280のセグメントの中で、ストレージグループ情報2300を格納している実ストレージシステム(図13の説明において、当該実ストレージシステムという)100が、割り当て可能である、すなわち割り当て権限をもっているセグメントの数を示す。例えば、当該実ストレージシステム100の内部ストレージ装置230のみから構成されるストレージグループ280の場合、すべてのセグメントの割り当て権限を、当該実ストレージシステム100がもつ。一方、ストレージボックス130の中の共有ストレージ装置180から構成されるストレージグループ280の場合、共有ストレージ装置180は複数の実ストレージシステム100にシェアされるので、それぞれ、実ストレージシステム100ごとに、割り当て権限をもつセグメントの集合が決められる。割り当て可能セグメントビットマップ2308は、それぞれのセグメントについて、当該実ストレージシステム100が、割り当て権限をもっている(割り当て可能か)か、いないかを表すビットマップである。空きセグメント数2304は、当該ストレージグループ280が割り当て権限をもっているセグメントの中で、空き状態のセグメントの数を示す。空きセグメントビットマップ2307は、当該ストレージグループ280が割り当て権限をもっているセグメントについて、それぞれのセグメントが、空き状態であるか、割り当て済みであるかを表すビットマップである。ストレージ装置ポインタ2305の数は、当該ストレージグループ280に属するストレージ装置160の数となっている。この数は、ストレージグループRAIDタイプ2302によって決まる値である。ストレージ装置ポインタ2305は、当該ストレージグループ280に属するストレージ装置160の識別子と、そのストレージ装置160が共有ストレージ装置180の場合、共有ストレージ装置180が、接続されているパスを示す。第1R回数2310、第2R回数2311、第1W回数2312、及び第2W回数2313は、当該ストレージグループ280のリード処理・ライト処理の実行回数に関する情報である。本実施例では、プロセッサ260は、当該ストレージグループ280のストレージボリュームにリード・ライト要求を受け付けると、第1R回数2310、あるいは、第1W回数2312を加算する。さらに、一定間隔ごとに、第1R回数2310を第2R回数2311にコピーし、第1W回数2312を第2W回数2313にコピーし、第1R回数2310、第1W回数2312を0にする。これによって、第2R回数2311、第2W回数2313に、ある程度の期間におけるリード・ライト回数が格納されることとなり、当該ストレージグループ280の性能特性を把握できる。なお、回数以外に、データ量などを計測してもよい。本実施例では、第2R回数2311、第2W回数2313等を用いて、論理ボリュームを実ストレージシステム100の間で再配置する。
図59は、第1の実施例に係るストレージ装置情報の構成を示す図である。
ストレージ装置情報2500は、ストレージ装置識別子2505、接続形態2501、接続パス2502、ストレージタイプ2503、及び容量2504を含む。
ストレージ装置識別子2505は、ストレージ装置情報2500に対応するストレージ装置160(図59の説明において、当該ストレージ装置という)の識別子である。接続形態2501は、当該ストレージ装置160が、共有ストレージ装置180であるか、内部ストレージ装置230であるかを示す。接続パス2502は、共有ストレージ装置180の場合、接続されているパスの識別子を示す。ストレージタイプ2503は、当該ストレージ装置160が、HDD、フラッシュメモリなどのどんな記憶媒体なのかを示す。容量2504は、当該ストレージ装置160の容量である。なお、本実施例では、ストレージグループ280を構成する各ストレージ装置160のストレージタイプ2503と容量2504は、等しいとする。
次に、上述の管理情報を用いて、ストレージコントローラ200が実行する動作の説明を行う。ストレージコントローラ200の動作は、ストレージコントローラ200内のプロセッサ260が、メモリ270に格納されているプログラムを実行することにより実現される。
図14は、第1の実施例に係るストレージコントローラが実行するプログラムの構成を示す図である。
本実施例に関するプログラムとして、メモリ270は、リード処理実行部4000、ライト要求受付部4100、ライトアフタ処理実行部4200、ストレージシステム追加処理部4300、ストレージシステム閉塞処理部4400、ストレージシステム移動処理部4500、ストレージボックス追加処理部4600、ストレージボックス閉塞処理部4700、ストレージボックス移動処理部4800、コピー処理部4900、キャッシュ閉塞スケジュール部4910、キャッシュ閉塞処理部4920、仮想論理ボリューム定義部4950、及び仮想論理ボリューム消去部4960を含む。
図15Aは、第1の実施例に係るリード処理実行部の処理フローを示す図である。
リード処理実行部4000は、サーバ110からリード要求を受け付けたときに、ストレージコントローラ200のプロセッサ260により実行される。
ステップ5000:プロセッサ260は、受け取ったリード要求で指定された仮想論理ボリュームの識別子を、仮想論理ボリューム情報2085に基づいて、論理ボリューム(図15Aの説明において当該論理ボリュームという)の識別子に変換し、当該論理ボリュームに対応する論理ボリューム情報2000を獲得する。
ステップ5001:プロセッサ260は、受け取ったリード要求のアドレス、キャッシュ管理ポインタ2022、キャッシュ管理情報2750のブロックビットマップ2753などから、当該リード要求で指定されたデータが、キャッシュメモリ210でヒットするか否かをチェックする。この結果、ミスであれば(ステップ5001:N)、プロセッサ260は、処理をステップ5002へジャンプさせる一方、ヒットであれば(ステップ5001:Y)、処理をステップ5007へジャンプさせる。
ステップ5002:プロセッサ260は、空きキャッシュ管理情報ポインタ2650が示す先頭のキャッシュ管理情報2750を、当該論理ボリューム情報2000の該当するキャッシュ管理ポインタ2022にセットすることで、当該論理ボリュームに対してキャッシュメモリ210のスロット21100を割り当てる。さらに、プロセッサ260は、キャッシュ管理情報2750の割り当て論理ボリュームアドレス2752に当該論理ボリュームの識別子と、アドレスとを設定する。
ステップ5003:プロセッサ260は、当該論理ボリュームの論理ボリューム情報2000の移動中フラグ2015が、オンか否かをチェックする。この結果、移動中フラグ2015がオフであれば(ステップ5003:N)、プロセッサ260は、処理をステップ5007へジャンプさせる。一方、移動中フラグ2015がオンであれば、プロセッサ260は、さらに、移動ポインタ2017とリード要求で指定されているアドレス(RA)を比較して、アドレスの方が小さければ(ステップ5003:N)、処理をステップ5007へジャンプさせる。
ステップ5004:プロセッサ260は、論理ボリューム情報2000の移動元LUN2016に格納された識別子に対応する実ストレージシステム100に、移動元LUN2016に格納されたストレージポート及び論理ボリュームの識別子と、リード要求で指定されたアドレスとを指定して、データを読むよう要求する。なお、実ストレージシステム100が、当該実ストレージシステム100の場合もある。この場合、プロセッサ260は、移動元LUN2016に格納されている論理ボリュームの識別子から、対応する論理ボリューム情報2000を認識する。さらに、プロセッサ260は、この論理ボリューム情報2000の論理ボリュームタイプ2005から、当該、論理ボリュームが、共有ストレージ装置180に格納されているか、内部ストレージ装置230に格納されているかを認識する。さらに、プロセッサ260は、当該ストレージ装置160が属するストレージグループ280を認識し、論理ボリュームRAIDグループタイプ2003のRAIDタイプなどから、要求されたデータを含むストレージ装置160とそのアドレスを認識して、該当するストレージ装置160に、対応するデータの読み出し要求を発行する。
ステップ5005:プロセッサ260は、読み出し要求が完了するのを待つ。
ステップ5006:プロセッサ260は、読み出し要求の応答として受け取ったデータを、キャッシュメモリ210に格納する。さらに、プロセッサ260は、キャッシュ管理情報2750のブロックビットマップ2753の受け取ったデータのブロックに対応するビットをオンにする。
ステップ5007:プロセッサ260は、論理ボリューム情報2000の閉塞移動中フラグ2019をチェックする。この結果、閉塞移動中フラグ2019が、オフであれば(ステップ5007:N)、プロセッサ260は、処理をステップ5012へジャンプさせる。さらに、プロセッサ260は、移動ポインタ2017の値に対して当該リード要求で指定されたアドレス(RA)が小さい場合(ステップ5007;N)、処理をステップ5012へジャンプさせる。
ステップ5008:プロセッサ260は、閉塞移動元LUN2021に格納された識別子の実ストレージシステム100に、閉塞先移動元LUN2021に格納されたストレージポート及び論理ボリュームの識別子と、リード要求で指定されたアドレスとを指定して、対応するスロットのライトデータを読むように要求する。
ステップ5009:プロセッサ260は、発行した要求が完了するのを待つ。
ステップ5010:プロセッサ260は、情報を読むように要求したスロットにライトデータがないという旨を受け取った場合、処理をステップ5012へジャンプさせる。一方、スロットからのデータを受け取った場合、プロセッサ260は、ブロックビットマップ2753及び更新ビットマップ2754の受け取ったブロックに対応するビットをセットする。さらに、プロセッサ260は、受け取ったデータを、キャッシュメモリ210に格納する。
ステップ5011:プロセッサ260は、ブロックビットマップ2753を参照し、要求されたデータが、キャッシュメモリ210に格納されているかをチェックする。この結果、要求されたデータが存在すれば(ステップ5011:Y)、プロセッサ260は、処理をステップ5015へジャンプさせる。
ステップ5012:プロセッサ260は、論理ボリュームの識別子から、対応する論理ボリューム情報2000を認識する。さらに、プロセッサ260は、論理ボリュームタイプ2005から、当該論理ボリュームが、共有ストレージ装置180に格納されているか、内部ストレージ装置230に格納されているかを、認識する。さらに、プロセッサ260は、当該ストレージ装置160が属するストレージグループ280を認識し、論理ボリュームRAIDグループタイプ2003のRAIDタイプなどから、要求されたデータを含むストレージ装置160とそのアドレスを認識して、該当するストレージ装置160に、対応するデータの読み出し要求を発行する。
ステップ5013:プロセッサ260は、発行した読み出し要求が完了するのを待つ。
ステップ5014:プロセッサ260は、読み出し要求の応答として受け取ったデータを、キャッシュメモリ210に格納する。さらに、対応するブロックビットマップ2753の受け取ったブロックに対応するビットをセットする。
ステップ5015:プロセッサ260は、受け取ったデータを、サーバ110に転送する。また、プロセッサ260は、転送したデータに対応する論理ボリュームの論理ボリューム情報2000の第1リード回数2007、転送したデータが格納されたストレージ装置160が属するストレージグループ280に対応するストレージグループ情報2300の第1R回数2310を1増やして、処理を完了する。
図15Bは、第1の実施例に係るキャッシュメモリのライトデータを転送するよう要求された実ストレージシステムの処理フローを示す図である。
ステップ5016:要求された実ストレージシステム100のプロセッサ260は、要求された論理ボリュームの相対アドレスに対応する領域にライトデータがある場合には、そのデータを要求元に送信する一方、ライトデータがない場合には、その旨を要求元に送信する。プロセッサ260は、送信後、ライトデータに対応するキャッシュ管理情報2750を、空き状態にする。
図16Aは、第1の実施例に係るライト要求受付部の処理フローを示す図である。
ライト要求受付部4100は、ストレージコントローラ200が、サーバ110からライト要求を受け付けたときにプロセッサ260により実行される。
ステップ6000:プロセッサ260は、受け取ったライト要求で指定された仮想論理ボリュームの識別子を、仮想論理ボリューム情報2085に基づいて、論理ボリューム(図16Aの説明において当該論理ボリュームという)の識別子に変換し、当該論理ボリュームに対応する論理ボリューム情報2000を取得する。
ステップ6001:プロセッサ260は、受け取ったライト要求のアドレスと、キャッシュ管理ポインタ2022、キャッシュ管理情報2750のブロックビットマップ2753などから、当該ライト要求で、指定されたデータが、キャッシュメモリ210でヒットするか否かをチェックする。この結果、ミスであれば(ステップ6001:N)、プロセッサ260は、処理をステップ6002へジャンプさせる一方、ヒットすれば(ステップ6001:Y)、処理をステップ6007へジャンプさせる。
ステップ6002:プロセッサ260は、空きキャッシュ管理情報ポインタ2650が示す先頭のキャッシュ管理情報2750を、当該論理ボリューム情報2000の該当するキャッシュ管理情報ポインタ2022にセットすることで、当該論理ボリュームに対してキャッシュメモリ210のスロット21100を割り当てる。さらに、プロセッサ260は、キャッシュ管理情報2750の割り当て論理ボリュームアドレス2752に当該論理ボリュームの識別子と、アドレスとを設定する。
ステップ6003: プロセッサ260は、閉塞移動中フラグ2019をチェックする。この結果、閉塞移動中フラグ2019がオフであれば(ステップ6003:N)、プロセッサ260は、処理をステップ6007へジャンプさせる。さらに、移動ポインタ2017に対して、当該ライト要求で指定されたアドレスが小さい場合(ステップ6003:N)、プロセッサ260は、処理をステップ6007へジャンプさせる。
ステップ6004:プロセッサ260は、閉塞移動元LUN2021に格納された識別子の実ストレージシステム100に、閉塞移動先LUN2021に格納されたストレージポート及び論理ボリュームの識別子と、ライト要求で指定されたアドレスを指定して、対応するスロットのライトデータを読むように要求する。
ステップ6005:プロセッサ260は、発行した要求が完了するのを待つ。
ステップ6006:プロセッサ260は、ライトデータを読むように要求したスロットにデータがないという旨を受け取った場合、特に、何もしない。一方、スロットからのデータを受け取った場合、プロセッサ260は、ブロックビットマップ2753及び更新ビットマップ2754の受け取ったブロックに対応するビットをセットする。さらに、プロセッサ260は、受け取ったデータを、キャッシュメモリ210に格納する。
ステップ6007:プロセッサ260は、サーバ110から、ライトするデータを受け取り、キャッシュメモリ210に格納する。この後、プロセッサ260は、対応するキャッシュ管理情報2750のブロックビットマップ2753と更新ビットマップ2754とを設定する。
ステップ6008:プロセッサ260は、当該論理ボリュームの論理ボリューム情報2000の移動中フラグ2015が、オンか否かをチェックする。この結果、移動中フラグ2015がオフであれば(ステップ6008:N)、プロセッサ260は、処理をステップ6012へジャンプさせる。一方、移動中フラグ2105がオンであれば、プロセッサ260は、さらに、移動ポインタ2017とライト要求で指定されているアドレス(RA)を比較して、アドレスの方が小さければ(ステップ6008:N)、処理をステップ6012へジャンプさせる。
ステップ6009:プロセッサ260は、論理ボリューム情報2000の移動元LUN2016に格納された識別子に対応する実ストレージシステム100が、当該実ストレージシステム100か否かをチェックする。移動元LUN2016に格納された識別子に対応する実ストレージシステム100が当該実ストレージシステム100でなければ、プロセッサ260は、移動元LUN2016に格納された実ストレージシステム100、ストレージポート、及び論理ボリューム識別子と、ライト要求で指定されたアドレスとを指定して、受け取ったデータを書き込むよう書き込み要求を発行し、キャッシュメモリ210に格納したデータを送信する。
ステップ6010:プロセッサ260は、書き込み要求が完了するのを待つ。
ステップ6011:プロセッサ260は、書き込み要求が完了すると、対応するキャッシュ管理情報2750を空きキャッシュ管理情報ポインタ2650が示すようにする。
ステップ6012:プロセッサ260は、サーバ110に完了報告を行い、ライトしたデータに対応する論理ボリュームの論理ボリューム情報2000の第1ライト回数2008と、書き込んだデータが格納されたストレージ装置160が属するストレージグループ280に対応するストレージグループ情報2300の第1W回数2311とを1増やして、処理を完了する。
図16Bは、第1の実施例に係るキャッシュメモリのライトデータを転送するよう要求された実ストレージシステム100の処理フローを示す図である。
ステップ6013:要求された実ストレージシステム100のプロセッサ260は、要求された論理ボリュームの相対アドレスに対応する領域に、ライトデータがある場合には、そのデータを要求元に送信する一方、ライトデータがない場合には、その旨を要求元に送信する。プロセッサ260は、送信後、対応するキャッシュ管理情報2750を、空き状態にする。
図17は、第1の実施例に係るライトアフタ処理実行部の処理フローを示す図である。
ライトアフタ処理実行部4200は、プロセッサ260により、適宜実行される。
ステップ7000:プロセッサ260は、キャッシュ管理情報2750をサーチして、更新ビットマップ2754がオンになっているキャッシュ管理情報2750を見つける。
ステップ7001:プロセッサ260は、見つけたキャッシュ管理情報2750の割り当て論理ボリュームアドレス2752をチェックして、キャッシュ管理情報2750に対応するスロットに対応する論理ボリューム(図17の説明において当該論理ボリュームという)を認識する。
ステップ7002:プロセッサ260は、当該論理ボリュームに対応する論理ボリューム情報2000の移動中フラグ2015がオンであるか否かをチェックする。この結果、移動中フラグ2015がオフであれば(ステップ7002:N)、プロセッサ260は、処理をステップ7009へジャンプさせる。さらに、プロセッサ260は、移動元LUN2016に格納された識別子に対応する実ストレージシステム100が、この実ストレージシステム100であり、かつ、移動ポインタ2017と当該論理ボリュームのアドレスとを比較して、当該論理ボリュームのアドレスの方が小さければ(ステップ7002:N)、処理をステップ7009へジャンプさせる。
ステップ7003:プロセッサ260は、移動元LUN2016に格納されている論理ボリュームの識別子から、対応する論理ボリューム情報2000を認識する。さらに、プロセッサ260は、論理ボリュームタイプ2005から、当該論理ボリュームが、共有ストレージ装置180に格納されているか、内部ストレージ装置230に格納されているかを認識する。さらに、プロセッサ260は、当該ストレージ装置160が属するストレージグループ280を認識し、論理ボリュームRAIDグループタイプ2003のRAIDタイプなどから、ライトデータに対応する冗長データを生成するのに、必要な情報を読み込むため、ストレージ装置160とそのアドレスを認識して、該当するストレージ装置160に、対応するデータの読み出し要求を発行する。
ステップ7004:プロセッサ260は、発行した読み出し要求が完了するのを待つ。
ステップ7005:プロセッサ260は、読み出し要求により読み出したデータに基づいて、ライトデータに対応する冗長データを生成する。
ステップ7006:プロセッサ260は、更新ビットマップ2754の更新されたことを示すビットに対応するデータと生成した冗長データとを格納する、ストレージ装置160とアドレスとを認識して、このストレージ装置160に、これらデータを書き込むための書き込み要求を発行する。
ステップ7007:プロセッサ260は、発行した書き込み要求が完了するのを待つ。
ステップ7008:プロセッサ260は、更新ビットマップ2754の書き込んだデータに対応するビットをオフする。この後、プロセッサ260は、処理を終了する。
ステップ7009:プロセッサ260は、論理ボリュームに対応する論理ボリューム情報2000の論理ボリュームタイプ2005から、当該論理ボリュームが、共有ストレージ装置180に格納されているのか、内部ストレージ装置230に格納されているのかを認識する。さらに、プロセッサ260は、当該ストレージ装置160が属するストレージグループ280を認識し、論理ボリュームRAIDグループタイプ2003のRAIDタイプなどから、ライトデータに対応する冗長データを生成するのに、必要な情報を読み込むため、ストレージ装置160とそのアドレスを認識して、該当するストレージ装置160に、対応するデータの読み出し要求を発行する。
ステップ7010:プロセッサ260は、発行した読み出し要求が完了するのを待つ。
ステップ7011:プロセッサ260は、ライトデータに対応する冗長データを生成する。
ステップ7012:プロセッサ260は、更新ビットマップ2754の更新されたことを示すビットに対応するデータと生成した冗長データとを格納する、ストレージ装置160とそのアドレスを認識して、該当するストレージ装置160に、これらデータを書き込むための書き込み要求を発行する。
ステップ7013:プロセッサ260は、発行した書き込み要求が完了するのを待つ。
ステップ7014:プロセッサ260は、対応する更新ビットマップ2754の書き込んだデータに対応するビットをオフする。この後、プロセッサ260は、処理を終了する。
図18Aは、第1の実施例に係るストレージシステム追加処理部の処理フローを示す図である。
本処理フローの処理は、追加された実ストレージシステム100で、実行される。具体的には、この処理は、追加された実ストレージシステム100のストレージコントローラ200のプロセッサ260がストレージシステム追加処理部4300を実行することにより実現される。
ステップ8000:追加された実ストレージシステム100のストレージコントローラ200は、サーバ110と通信を行い、実ストレージシステム100のストレージポート197の識別子をサーバポート情報198に設定するよう要求する。
ステップ8001:ストレージコントローラ200は、仮想ストレージシステム190内に、実ストレージステム100が追加されたこと及び当該実ストレージシステム100がアクセス可能なストレージボックス130を示す情報を、同一仮想ストレージシステム190の他の実ストレージシステム100に通知する。
ステップ8002:ストレージコントローラ200は、通知に対する回答が返ってくるのを待つ。
ステップ8003:ストレージコントローラ200は、回答に含まれている制御権を譲りうけた論理ボリュームの集合を、仮想論理ボリューム情報2085及び論理ボリューム情報2000に設定する。さらに、ストレージコントローラ200は、割り当て権限を与えられたストレージグループ280に対応するセグメントグループ情報2300のセグメント数2303、割り当て可能セグメント数2309、空きセグメント数2304、割り当て可能セグメントビットマップ2308、及び空きセグメントビットマップ2307に、回答に含まれている情報を設定する。
ステップ8008:論理ボリュームを移動しようとする場合、キャッシュメモリ210に残っているライトデータを、他の実ストレージシステム100のキャッシュメモリ210に移動する必要がある。ここでは、移動元の実ストレージシステム100の論理ボリュームのライトデータに、共有ストレージ装置160に書き込むライトデータがあれば、移動先の実ストレージシステム100のキャッシュメモリ210に移動する処理に入る。このため、ストレージコントローラ200は、コピー処理部4900をコールする。
ステップ8004:次に、ストレージコントローラ200は、サーバ110と通信を行い、どのストレージポート197に、どの仮想論理ボリュームが接続されているかについての情報をサーバポート情報198に設定するよう要求する。以上で、ストレージコントローラ200は、処理を終了する。
図18Bは、第1の実施例に係る追加された実ストレージシステムから通知を受けた実ストレージシステムの処理フローを示す図である。
ステップ8005:通知を受けた実ストレージシステム100のストレージコントローラ200は、追加された実ストレージシステム100がアクセス権限をもっていて、かつ、当該実ストレージシステム100がアクセス権限をもっているストレージボックス130を処理対象として以下の処理を行う。なお、処理対象となるストレージボックス130が一つもない場合、ストレージコントローラ200は、その旨を追加された実ストレージシステム100に通知する。まず、ストレージコントローラ200は、処理対象のストレージボックス130上に、定義されている論理ボリュームをすべて把握し、追加された実ストレージシステム100に制御権を渡す論理ボリュームの集合を決定する。この論理ボリュームの集合を決定する際に、ストレージコントローラ200は、各論理ボリューム情報2000の第2リード回数2009及び第2ライト回数2010を参照する。また、ストレージコントローラ200は、各論理ボリュームを割当てているストレージグループ280に対応するストレージグループ情報2300の第2R回数2311及び第2W回数2313を参照する。これによって、各ストレージグループ280のアクセス頻度と、各論理ボリュームのアクセス頻度を把握できる。このため、制御権を移す論理ボリュームの移行を行った後の、ストレージグループのアクセス頻度を予測することができる。この予測に基づき、制御権を移動する論理ボリュームを決定する。差らに、ストレージコントローラ200は、処理対象のストレージボックス130の属するストレージグループ280の割り当て権限をもっている領域の中で、割り当て権限を渡す一部の空き領域を決定する。
ステップ8006:ストレージコントローラ200は、サーバ100に、制御権を渡すと決めた論理ボリュームに対応する仮想論理ボリュームがそれまで接続されていたストレージポート197から、仮想論理ボリュームをはずす旨を通知する。
ステップ8007:ストレージコントローラ200は、追加されたストレージシステム100に、制御権を渡す論理ボリュームの集合と割り当て権限を渡す一部の空き領域とを通知し、処理を終了する。
図19Aは、第1の実施例に係るストレージシステム閉塞処理部の処理フローを示す図である。
本処理フローの処理は、削除する実ストレージシステム100で、実行される。具体的には、この処理は、削除する実ストレージシステム100のストレージコントローラ200のプロセッサ260がストレージシステム閉塞処理部4400を実行することにより実現される。
ステップ9000:削除する実ストレージシステム100のストレージコントローラ200は、論理ボリューム情報2000を参照して、ストレージボックス130に定義された論理ボリュームを認識する。さらに、ストレージコントローラ200は、各ストレージボックス130のストレージグループ280ごとに、割り当て権限をもっている領域と空き領域とを認識する。
ステップ9001:ストレージコントローラ200は、論理ボリュームの制御権と、割り当て権限をもっている領域とのそれぞれについて、どの実ストレージシステム100に移動するかを決定する。この際に、ストレージコントローラ200は、各論理ボリューム情報2000の第2リード回数2009及び第2ライト回数2010を参照する。また、ストレージコントローラ200は、各論理ボリュームを割当てているストレージグループ280に対応するストレージグループ情報2300の第2R回数2311、第2W回数2313を参照する。これによって、各ストレージグループ280のアクセス頻度と、各論理ボリュームのアクセス頻度を把握できる。これに基づき、制御権を移動する論理ボリュームを決定する。
ステップ9002:ストレージコントローラ200は、制御権を移すと決めた論理ボリュームに対応する仮想論理ボリュームを接続しているストレージポート197から、仮想論理ボリュームをはずす旨をサーバ110に通知する。
ステップ9003:ストレージコントローラ200は、制御権を移すと決めた仮想論理ボリューム及び論理ボリュームの情報、割り当て権限を移す領域及び空き領域の情報を、該当する実ストレージシステム100に通知する。
ステップ9004:ストレージコントローラ200は、通知した実ストレージシステム100からの回答が返ってくるのを待つ。
ステップ9005:次に、ストレージコントローラ200は、サーバ110と通信を行い、当該実ストレージシステム100のストレージポート197が閉塞されたことを通知して、処理を終了する。
図19Bは、第1の実施例に係る閉塞する実ストレージシステムから通知を受けた実ストレージシステムの処理フローを示す図である。
ステップ9006:通知を受けた実ストレージシステム100のストレージコントローラ200は、閉塞する実ストレージシステム100から通知された、制御権を譲りうける論理ボリュームの集合を、仮想論理ボリューム情報2085及び論理ボリューム情報2000に設定する。さらに、ストレージコントローラ200は、割り当て権限を与えられたストレージグループ280に対応するストレージグループ情報2300のセグメント数2303、割り当て可能セグメント数2309、空きセグメント数2304、割り当て可能セグメントビットマップ2308、及び空きセグメントビットマップ2307に、通知された情報を設定する。
ステップ9007:実ストレージシステム100を閉塞しようとする場合、キャッシュメモリ210に残っているライトデータを、他の実ストレージシステム100に移動する必要がある。特に、キャッシュメモリ210が二重化されていて、一方のキャッシュメモリ210に障害が発生して閉塞された場合などは、ライトデータを、他の実ストレージシステム100に移し、その実ストレージシステム100のキャッシュメモリ210において二重化した状態にし、障害を起こした実ストレージシステム100を閉塞したほうが、高信頼化を図ることが有効である。したがって、実ストレージシステム100を閉塞しようとする場合、キャッシュメモリ210に残っているライトデータを、共有ストレージ装置180に書き込む必要がある。ここでは、閉塞する実ストレージシステム100の論理ボリュームに、共有ストレージ180に書き込むライトデータがあれば、移動先の実ストレージシステム100のキャッシュメモリ210に移動する処理に入る。このため、ストレージコントローラ200は、コピー処理部4900をコールする。
ステップ9008:ストレージコントローラ200は、制御権を移動すると決められた論理ボリュームに対応する仮想論理ボリュームがどのストレージポート197に接続されているかを、サーバ110に報告する。
ステップ9009:この後、ストレージコントローラ200は、閉塞する実ストレージシステム100に処理の完了を報告する。この後、ストレージコントローラ200は、処理を終了する。
なお、以上の処理は、実ストレージシステム100の閉塞を行うときの処理フローであるが、実ストレージシステム100の負荷をバランスさせるために、論理ボリュームを実ストレージシステム100間で移動させる場合に同様な処理を行ってもよい。また、割り当て権限をもった領域を、実ストレージシステム100間で移動させるようにしてもよい。これらの処理は以下の処理フローにより実現できる。ここでは、便宜的に図19A及び図19Bを用いて説明する。なお、以下の処理においては、移動元の実ストレージシステム100のキャッシュメモリ210のライトデータを、移動先の実ストレージシステム100に移動する方式をとるが、すでに述べたように、移動元の実ストレージシステム100が、ライトデータを共有ストレージ装置180に書き込むようにしても良い。後述する第2乃至第4の実施例のいずれにおいても同様である。
まず、論理ボリューム、あるいは、空き領域の割当て権限の移動元の実ストレージシステム100による処理について説明する。
ステップ9001:移動元の実ストレージシステム100のストレージコントローラ200は、論理ボリュームの制御権、割り当て権限をもっている領域のそれぞれについて(なお、どちらか一方であってもよい)、どの実ストレージシステム100に移動するかを決定する。この際に、ストレージコントローラ200は、各論理ボリューム情報2000の第2リード回数2009、及び第2ライト回数2010を参照する。また、ストレージコントローラ200は、各論理ボリュームを割当てているストレージグループ280に対応するストレージグループ情報2300の第2R回数2311及び第2W回数2313を参照する。
ステップ9002:ストレージコントローラ200は、制御権を移すと決めた論理ボリュームに対応する仮想論理ボリュームを接続しているストレージポート197から、仮想論理ボリュームをはずす旨をサーバ110に通知する。(なお、割り当て権限だけを移す場合は、本ステップは実行しない。)
ステップ9003:ストレージコントローラ200は、制御権を移すと決めた仮想論理ボリューム及び論理ボリュームの情報、割り当て権限を移す領域及び空き領域の情報(どちらか一方でよい)を、該当する実ストレージシステム100に通知する。
次に、論理ボリューム制御権、あるいは、空き領域の割当て権限の移動先の実ストレージシステム100の処理について説明する。
ステップ9006:論理ボリューム制御権、あるいは、空き領域の割当て権限の移動先の実ストレージシステム100のストレージコントローら200は、通知された、制御権を譲りうける論理ボリュームの集合を、仮想論理ボリューム情報2085及び論理ボリューム情報2000に設定する。さらに、ストレージコントローラ200は、割り当て権限を与えられたストレージグループ280に対応するストレージグループ情報2300のセグメント数2303、割り当て可能セグメント数2309、空きセグメント数2304、割り当て可能セグメントビットマップ2308、及び空きセグメントビットマップ2307に、通知された情報を設定する。
ステップ9007:ストレージコントローラ200は、コピー処理部4900をコールする。
ステップ9008:ストレージコントローラ200は、制御権を譲り受けると決められた論理ボリュームに対応する仮想論理ボリュームがどのストレージポート197に接続されているかを、サーバ100に報告する。(なお、割り当て権限だけを移す場合は、本ステップは実行しない。)
図20Aは、第1の実施例に係るストレージシステム移動処理部の処理フローを示す図である。
本処理フローの処理は、移動元となる実ストレージシステム100で、実行される。具体的には、この処理は、移動元となる実ストレージシステム100のストレージコントローラ200のプロセッサ260がストレージシステム移動処理部4500を実行することにより実現される。
ステップ10000:移動元となる実ストレージシステム100のストレージコントローラ200は、論理ボリューム情報2000を参照して、ストレージボックス130に定義された論理ボリュームを認識する。さらに、ストレージコントローラ200は、各ストレージボックス130のストレージグループ280ごとに、割り当て権限をもっている領域と、空き領域とを認識する。
ステップ10001:ストレージコントローラ200は、制御権を移すと決めた論理ボリューム(ここでは、移動元実ストレージシステム100の全ての論理ボリューム)に対応する仮想論理ボリュームを接続しているストレージポート197から、仮想論理ボリュームをはずす旨をサーバ110に通知する。
ステップ10002:ストレージコントローラ200は、制御権を移すと決きめた仮想論理ボリューム及び論理ボリュームの情報、割り当て権限を移す領域及び空き領域の情報を、移動先の実ストレージシステム100に通知する。
ステップ10003:ストレージコントローラ200は、通知した実ストレージシステム100からの回答が返ってくるのを待つ。
ステップ10004:次に、ストレージコントローラ200は、サーバ110と通信を行い、当該実ストレージシステム100のストレージポート197が閉塞されたことを通知して、処理を終了する。
図20Bは、第1の実施例に係る移動元となる実ストレージシステムから通知を受けた移動先となる実ストレージシステムの処理フローを示す図である。
ステップ10005:移動先となる実ストレージシステム100のストレージコントローラ200は、通知された、制御権を譲りうける論理ボリュームの集合を、仮想論理ボリューム情報2085及び論理ボリューム情報2000に設定する。さらに、ストレージコントローラ200は、割り当て権限を与えられたストレージグループ280に対応するストレージグループ情報2300のセグメント数2303、割り当て可能セグメント数2309、空きセグメント数2304、割り当て可能セグメントビットマップ2308、及び空きセグメントビットマップ2307に、通知された情報を設定する。
ステップ10006:移動元の実ストレージシステム100を閉塞しようとした場合、キャッシュメモリ210に残っているライトデータを、共有ストレージ装置180に書き込む必要がある。ここでは、移動元の論理ボリュームについて、移動元の実ストレージシステム100のキャッシュメモリ210に共有ストレージ装置180に書き込むライトデータがあれば、このライトデータを移動先の実ストレージシステム100のキャッシュメモリ210に移動する処理に入る。このため、ストレージコントローラ200は、コピー処理部4900をコールする。
ステップ10007:ストレージコントローラ200は、サーバ110に、移動先の実ストレージシステム100のストレージポート197をサーバポート情報198に設定させる。さらに、ストレージコントローラ200は、制御権を譲り受けると決められた論理ボリュームに対応する仮想論理ボリュームがどのストレージポート197に接続されたかを、サーバ110に報告する。この後、ストレージコントローラ200は、移動元となる実ストレージシステム100に処理の完了を報告する。この後、ストレージコントローラ200は、処理を終了する。
図21Aは、第1の実施例に係るストレージボックス追加処理部の処理フローを示す図である。
ストレージボックス追加処理部4600は、ストレージボックス130が追加されたときに、ストレージコントローラ200により実行される。すなわち、ストレージボックス130が追加されたとき、そのストレージボックス130に接続された実ストレージシステム100が起動され、実ストレージシステム100のストレージコントローラ200が以下の処理を実行する。
ステップ11000:実ストレージシステム100のストレージコントローラ200は、追加されたストレージボックス130の容量を認識する。そして、ストレージコントローラ200は、どの実ストレージシステム100に、どの領域の割り当て権限を与えるかを決定する。
ステップ11001:ストレージコントローラ200は、認識したストレージボックス130の情報、自身の実ストレージシステム100が割り当て権限をもった領域の情報などに基づき、ストレージボックス情報2050、ストレージグループ情報2300、及びストレージ装置情報2500を設定する。
ステップ11002:ストレージコントローラ200は、認識したストレージボックス130の情報、それぞれの実ストレージシステム100に対して割り当て権限を与える領域の情報などを、対応する実ストレージシステム100に送る。
ステップ11003:ストレージコントローラ200は、他の実ストレージシステム100からの報告を待つ。
ステップ11004:ストレージコントローラ200は、完了報告を受け、処理を終了する。
図21Bは、第1の実施例に係るストレージボックスを認識した実ストレージシステムから情報を受け取った実ストレージシステムの処理フローを示す図である。
ステップ11005:情報を受け取った実ストレージシステム100のストレージコントローラ200は、ストレージボックス130の情報、当該実ストレージシステム100に対して割り当て権限が与えられる領域の情報などを、受け取る。
ステップ11006:ストレージコントローラ200は、受け取った情報により、ストレージボックス情報2050、ストレージグループ情報2300、及びストレージ装置情報2500を設定する。この後、ストレージコントローラ200は、情報を送信した実ストレージシステム100に完了報告を行い、処理を完了する。
図22は、第1の実施例に係るストレージボックス閉塞処理部の処理フローを示す図である。
ストレージボックス閉塞処理部4700は、ストレージボックス130が削除されるときに、ストレージコントローラ200に実行される処理である。ストレージボックス130が削除されることが決定したとき、そのストレージボックス130に接続された実ストレージシステム100の一つが起動され、この実ストレージシステム100のストレージコントローラ200が以下の処理を実行する。
ステップ12000:実ストレージシステム100のストレージコントローラ200は、削除されるストレージボックス130に定義されている論理ボリュームを認識する。
ステップ12001:ストレージコントローラ200は、自身の実ストレージシステム100の内部のストレージグループ280の空き領域及び削除されるストレージボックス130以外のストレージボックス130内の当該実ストレージシステム100が割り当て権限を持っている空き領域の中から、削除されるストレージボックス130に定義されている論理ボリュームを移動する領域を決定して、当該領域を移動先となる論理ボリュームとして定義する。この際に、ストレージコントローラ200は、各論理ボリューム情報2000の第2リード回数2009及び第2ライト回数2010を参照する。また、ストレージコントローラ200は、各論理ボリュームを割当てているストレージグループ280に対応するストレージグループ情報2300の第2R回数2311及び第2W回数2313を参照して移動先を決定する。具体的には、ストレージコントローラ200は、新しい論理ボリューム情報2000を確保して、必要な情報をセットする。特に、ここでは、ストレージコントローラ200は、移動元LUN2016に、当該実ストレージシステム100の識別子、削除されるストレージボックス130に定義された論理ボリュームの識別子、及びその論理ボリュームが定義されたストレージボックス130上の領域を設定する。また、ストレージコントローラ200は、移動する複数の論理ボリュームに対応する論理ボリューム情報2000の中の一つの論理ボリューム情報2000については、移動中フラグ2015をオンにして、移動ポインタ2017を先頭アドレスに設定する。ストレージコントローラ200は、残りの論理ボリューム情報2000については、移動待ちフラグ2018をオンにする。
ステップ12002:ストレージコントローラ200は、コピー処理部4900を起動する。ストレージコントローラ200は、その後処理を終了する。
図23は、第1の実施例に係るストレージボックス移動処理部の処理フローを示す図である。
ストレージボックス移動処理部4800は、旧いストレージボックス130が新しいストレージボックス130に置き換えられるときに、ストレージコントローラ200に実行される。ストレージボックス130が置き換えられることが決定したとき、旧いストレージボックス130に接続された実ストレージシステム100が起動され、起動された実ストレージシステム100のストレージコントローラ200が以下の処理を実行する。
ステップ13000:実ストレージシステム100のストレージコントローラ200は、旧いストレージボックス130に定義されている論理ボリュームを認識する。
ステップ13001:ストレージコントローラ200は、新しいストレージボックス130の中に、認識した論理ボリュームを格納する領域を決定し、決定した領域を移動先となる論理ボリュームとして定義する。具体的には、ストレージコントローラ200は、新しい論理ボリューム情報2000を確保して、必要な情報をセットする。特に、ここでは、ストレージコントローラ200は、論理ボリューム情報2000の移動元LUN2016に、当該実ストレージシステム100の識別子、削除されるストレージボックス130に定義された論理ボリュームの識別子、及びその論理ボリュームが定義された新しいストレージボックス130上の領域を設定する。また、ストレージコントローラ200は、移動する複数の論理ボリュームに対応する論理ボリューム情報2000の中の一つの論理ボリューム情報2000については、移動中フラグ2015をオンにして、移動ポインタ2017を先頭アドレスに設定する。ストレージコントローラ200は、残りの論理ボリューム情報2000については、移動待ちフラグ2018をオンにする。
ステップ13002:ストレージコントローラ200は、コピー処理部4900を起動する。
ステップ13003:ストレージコントローラ200は、新しいストレージボックス130の記憶容量が、旧いストレージボックス130に比べて大きい場合、容量増加分を新しいストレージボックス130に接続された実ストレージシステム100の数で均等に割って割当量を決定し、その割当量と該当する領域を決めて、ストレージグループ情報2300の空きセグメント数2304、空きセグメントビットマップ2307を更新する。この後、ストレージコントローラ200は、処理を終了する。
図24Aは、第1の実施例に係るコピー処理部の処理フローを示す図である。
コピー処理部4900は、他の処理部から起動を受けて、ストレージコントローラ200により実行が開始される。
ステップ14000:ストレージコントローラ200は、移動中フラグ2015がオンの論理ボリューム情報2000を見つける。
ステップ14001:ストレージコントローラ200は、当該論理ボリュームの識別子を、当該論理ボリューム情報2000の移動元LUN2016に設定した仮想論理ボリューム識別子に対応した仮想論理ボリュームの識別子にする。(移動先の論理ボリュームの識別子を移動元の論理ボリュームの識別子にコピーする。)さらに、ストレージコントローラ200は、移動元の論理ボリュームが当該実ストレージシステム100以外の実ストレージシステム100で管理されている場合、サーバ110のサーバポート情報198における、対応する仮想論理ボリュームが接続されているストレージポート197を新しいストレージポート197に切り換える。
ステップ14002:ストレージコントローラ200は、移動元論理ボリュームの論理ボリューム情報2000の移動元LUN2016に格納されている論理ボリューム識別子の論理ボリューム(移動元論理ボリューム)に対応する論理ボリューム情報2000と、移動元論理ボリュームが格納されているストレージグループ280に対応するストレージグループ情報2300のパッケージグループRAIDタイプ2302と、移動ポインタ2017とに基づいて、読み出したデータから冗長データが生成可能な領域を、移動元論理ボリュームから読み出す領域として決定する。なお、移動元LUN2016の実ストレージシステム100の識別子が、当該実ストレージシステム100の識別子である場合、ストレージコントローラ200は、ストレージグループ280に対応するストレージグループ情報2300のパッケージグループRAIDタイプ2302やストレージ装置情報2500などから、読み出しを行うストレージ装置160上の物理的な領域を決定する(このとき、移動元論理ボリュームの冗長データは読み出さない)。
ステップ14003:ストレージコントローラ200は、移動元論理ボリュームのデータを読み出し要求を発行する。なお、このとき、移動元LUN2016の実ストレージシステム100の識別子が、当該実ストレージシステム100の識別子でない場合、ストレージコントローラ200は、移動元LUN2016の識別子に対応する実ストレージシステム100に読み出し要求を発行する。また、移動元LUN2016の実ストレージシステム100の識別子が、当該実ストレージシステム100の識別子である場合、ストレージコントローラ200は、ステップ14002で決定された読み出しを行うストレージ装置160の領域に読み出し要求を発行する。なお、サーバ110から発行される読み出し要求では、仮想論理ボリュームが指定されているのに対し、この読み出し要求では、論理ボリュームが指定される。
ステップ14004:ストレージコントローラ200は、読み出し要求が完了するのを待つ。
ステップ14005:ストレージコントローラ200は、読み出されたデータから冗長データを生成する。
ステップ14006:ストレージコントローラ200は、移動先論理ボリュームの論理ボリューム情報2000と、格納されているストレージグループ280とに基づいて、読み出したデータと冗長データとを書き込む移動先の論理ボリュームの領域を決定する。
ステップ14007:ストレージコントローラ200は、決定した移動先論理ボリュームに対する書き込み要求を発行する。
ステップ14008:ストレージコントローラ200は、書き込み要求が完了するのを待つ。
ステップ14009:ストレージコントローラ200は、移動ポインタ2017を更新する。なお、移動させる全ての論理ボリュームのコピーが完了していなければ、ストレージコントローラ200は、処理をステップ14002へジャンプさせる。
ステップ14010:ストレージコントローラ200は、移動中フラグ2015をオフにする。移動元論理ボリュームの実ストレージシステム100が、当該実ストレージシステム100の場合(移行元の論理ボリュームと移行先の論理ボリュームが同一の実ストレージシステムの場合)、ストレージコントローラ200は、移動元LUN2016に対応する論理ボリューム情報2000を無効にする。
ステップ14011:ストレージコントローラ200は、移動待ちフラグ2018がオンの論理ボリューム情報2000を見つける。移動待ちフラグ2018がオンの論理ボリューム情報2000がなければ、ストレージコントローラ200は、処理を完了する。
ステップ14012:ストレージコントローラ200は、移動待ちフラグ2018をオフにして、移動中フラグ2015をオンにする。この後、ストレージコントローラ200は、処理をステップ14000にジャンプさせる。
図24Bは、移動先の論理ボリュームを含む実ストレージシステムから、論理ボリュームの中の指定された領域を読み出すよう指示された、移動元の論理ボリュームを含む実ストレージシステムの処理フローを示す図である。
ステップ14013:ストレージコントローラ200は、:指定された論理ボリュームの論理ボリューム情報2000を認識する。さらに、ストレージコントローラ200は、論理ボリューム情報2000と指定された領域と対応するストレージシステムムグループ情報23000、ストレージ装置情報2500などから、読み出しを行うストレージ装置160とその領域を認識する。
ステップ14014:ストレージコントローラ200は、ストレージ装置160に読み出し要求を発行する。
ステップ14015:ストレージコントローラ200は、読み出し要求が完了するのを待つ。
ステップ14016:ストレージコントローラ200は、要求が完了したら、読み出したデータを、当該論理ボリュームのデータの送信を要求した実ストレージシステム100に送る。
ステップ14017: ストレージコントローラ200は、当該論理ボリュームの最後まで、データを送った場合、当該論理ボリュームの論理ボリュームの情報を消去する。また、ストレージコントローラ200は、当該論理ボリュームに割りあてていたセグメントに対応する空きセグメントビットマップ2304のビットをオンし、セグメントの数だけ、空きセグメント数2307を増加させる。
図25は、第1の実施例に係るキャッシュ閉塞スケジュール部の処理フローを示す図である。
キャッシュ閉塞スケジュール部4910は、閉塞する実ストレージシステム100から論理ボリュームを引き継ぐ実ストレージシステム100や、論理ボリュームの移動先の実ストレージシステム100において、ストレージコントローラ200により実行される。
ステップ15000:ストレージコントローラ200は、引き継ぐ論理ボリューム又は、移動先となるすべての論理ボリュームに対応する論理ボリューム情報2000の閉塞移動中フラグ2019をオンにして、閉塞移動元LUN2021に、移動元の論理ボリューム、移動元の実ストレージシステム100、及びストレージポート197の情報を設定する。
ステップ15001:ストレージコントローラ200は、キャッシュ閉塞処理部4920を起動する。
ステップ15002:ストレージコントローラ200は、引き継ぐ論理ボリューム、又は移動先となる論理ボリュームの全てに対する処理が終わったか否かをチェックする。この結果、処理が終了していなければ(ステップ15002:Y)、ストレージコントローラ200は、処理をステップ15000へジャンプさせる一方、処理が終了していれば(ステップ15002:N)、処理を完了する。
図26Aは、第1の実施例に係るキャッシュ閉塞処理部の処理フローを示す図である。
キャッシュ閉塞処理部4920は、論理ボリュームを引き継ぐ実ストレージシステム100、又は論理ボリュームの移動先の実ストレージシステム100のストレージコントローラ200により実行される。
ステップ17000:ストレージコントローラ200は、引き継ぐ論理ボリューム又は移動先の論理ボリュームに対応する論理ボリューム情報2000の移動元LUN2016に含まれる、実ストレージシステム100及び論理ボリュームの識別子と、移動ポインタ2017のアドレスとを指定して、そのアドレス以降で、キャッシュメモリ210に残っているライトデータを転送するよう、実ストレージシステム100に要求する。
ステップ17001:ストレージコントローラ200は、データが送られてくるのを待つ。
ステップ17002、ステップ17003:ストレージコントローラ200は、データが送られてこなかった場合(ステップ17003:Y)、すべてのデータを受け取ったことを意味するので、処理を完了する。:ストレージコントローラ200は、データが送られてきた場合(ステップ17003:N)、キャッシュメモリ210にこのデータを格納する。さらに、ストレージコントローラ200は、移動ポインタ2017に送られてきたデータの次のアドレスを設定して、処理をステップ17000へ進める。
図26Bは、第1の実施例に係る移動元の実ストレージシステムの処理フローを示す。
ステップ17004:移動元の実ストレージシステム100のストレージコントローラ200は、移動先の実ストレージシステム100から受け取った論理ボリュームのアドレスから、ストレージ装置160に書き込むべきライトデータが、キャッシュメモリ210に残っているか否かを探す。ストレージ装置160に書き込むべきライトデータが見つかった場合、ストレージコントローラ200は、このライトデータと論理ボリューム上のアドレスとを、移動先の実ストレージシステム100に転送する。その後、ストレージコントローラ200は、処理を終了する。
図27は、第1の実施例に係る仮想論理ボリューム定義部の処理フローを示す図である。
仮想論理ボリューム定義部4950は、仮想論理ボリュームを定義するときに、ストレージコントローラ200により実行される。この場合、当該仮想論理ボリュームの制御権をもつ実ストレージシステム100のストレージコントローラ200が仮想論理ボリューム定義部4950を実行する。また、仮想論理ボリューム定義部4950の実行の際には、仮想論理ボリュームの識別子、論理ボリュームの識別子、及び論理ボリュームの容量が指定される。
ステップ18000:ストレージコントローラ200は、指定された仮想論理ボリュームの識別子をもつ仮想論理ボリューム情報2085を見いだし、仮想論理ボリューム情報2085の論理ボリューム識別子2090に指定された論理ボリュームの識別子を設定する。
ステップ18001:ストレージコントローラ200は、指定された論理ボリュームの識別子をもつ論理ボリューム情報2000を見いだし、指定された容量を、論理ボリューム情報2000の論理容量2002に設定する。
ステップ18002:ストレージコントローラ200は、ストレージグループ情報2300をサーチして、指定された容量に該当する空き領域をもつストレージグループ280に、論理ボリュームの領域を割り当てる処理を実行する。この後、ストレージコントローラ200は、処理を終了する。
図28は、第1の実施例に係る仮想論理ボリューム消去部の処理フローを示す図である。
仮想論理ボリューム消去部4960は、仮想論理ボリュームを消去するときに、実行される。この場合、消去する仮想論理ボリュームの制御権をもつ実ストレージシステム100のストレージコントローラ200により仮想論理ボリューム消去部4960が実行される。また、仮想論理ボリューム消去部4960の実行の際には、消去対象の仮想論理ボリュームの識別子が指定される。
ステップ19000:ストレージコントローラ200は、指定された仮想論理ボリュームの識別子をもつ仮想論理ボリューム情報2085を見いだし、論理ボリューム識別子2090に格納された論理ボリュームの識別子を、別に記憶し、論理ボリューム識別子2090の値を消去する。
ステップ19001:ストレージコントローラ200は、別に記憶している論理ボリュームの識別子をもつ論理ボリューム情報2000を見いだす。
ステップ19002:ストレージコントローラ200は、消去される仮想論理ボリュームに割り当てられていた領域を、空き領域にする。ストレージコントローラ200は、割り当てていたストレージグループ情報2300をサーチして、消去される仮想論理ボリュームに割り当てられていた領域を空き領域にする。この後、ストレージコントローラ200は、処理を終了する。
次に、第2の実施例に係る情報システムについて説明する。
第2の実施例に係る情報システムは、ストレージボックス130のアクセス権限、論理ボリュームの割当て権限を、一つの実ストレージシステム100がもつ。第2の実施例における情報システムの構成は、第1の実施例と同じである。
第2の実施例に係るサーバポート情報198の構成は、第1の実施例に係るサーバポート情報198と同じである。また、第2の実施例に係る実ストレージシステム100の構成は、第1の実施例に係る実ストレージシステム100と同じである。
第2の実施例に係るキャッシュメモリ210の構成は、第1の実施例に係るキャッシュメモリ210と同じである。
第2の実施例に係る実ストレージシステム100の共有メモリ220の中の情報は、第1の実施例に係る共有メモリ220と同様である。第2の実施例に係るストレージシステム情報2060は、第1の実施例に係るストレージシステム情報2060と同様である。第2の実施例に係る仮想論理ボリューム情報2085は、第1の実施例に係る仮想論理ボリューム情報2085と同様である。
第2の実施例に係る論理ボリューム情報2000の構成は、第1の実施例に係る論理ボリューム情報2000と同様である。また、第2の実施例に係るキャッシュ管理情報2750の構成は、第1の実施例に係るキャッシュ管理情報2750と同様である。
図29は、第2の実施例に係るストレージボックス情報の構成を示す図である。
第2の実施例に係るストレージボックス情報2050と、第1の実施例に係るストレージボックス情報2050との違いは、ストレージボックス情報2050の中に、制御権ストレージシステム7006を持つ点である。第2の実施例に係る情報システムでは、ストレージボックス130ごとに制御権をもつ実ストレージシステム100が決まっている。制御権ストレージシステム7006は、ストレージボックス情報2050に対応するストレージボックス130の制御権をもった実ストレージシステム100の識別子である。ストレージボックス情報2050のそれ以外の情報は、第1の実施例に係るストレージボックス情報2050と同様である。
図30は第2の実施例に係るストレージグループ情報の構成を示す図である。
第2の実施例に係るストレージグループ情報2300と、第1の実施例に係るストレージグループ情報2300との相違は、第2の実施例に係るストレージグループ情報2300が、割り当て可能セグメント数2309、割り当て可能セグメントビットマップ2308をもっていない点である。これは、ストレージグループ280の制御権をもっている実ストレージシステム100が決まっているためである。
第2の実施例に係るストレージ装置情報2500の構成は、第1の実施例に係るストレージ装置情報2500と同様である。
次に、上述の管理情報を用いて、ストレージコントローラ200が実行する動作の説明を行う。ストレージコントローラ200の動作は、ストレージコントローラ200内のプロセッサ260がメモリ270に格納されているプログラムを実行することにより実現される。第2の実施例において、メモリ270内に格納されたプログラムは、第1の実施例と同様である。
リード処理実行部4000、ライト要求受付部4100、及びライトアフタ処理実行部4200の処理フローは、第1の実施例と同様である。
図31Aは、第2の実施例に係るストレージシステム追加処理部の処理フローを示す図である。
本処理フローの処理は、追加された実ストレージシステム100で、実行される。具体的には、この処理は、追加された実ストレージシステム100のストレージコントローラ200のプロセッサ260がストレージシステム追加処理部4300を実行することにより実現される。
第2の実施例に係る処理フローが、第1の実施例に係る処理フローと異なるのは、下記の通りである。
ステップ20000: ストレージコントローラ200は、仮想ストレージシステム190内に、実ストレージステム100が追加されたこと及び当該実ストレージシステム100がアクセス可能なストレージボックス130を示す情報を、同一仮想ストレージシステム190の他の実ストレージシステム100に通知する。このように、第2の実施例では、ストレージボックス130を単位として割り当て権限が与えられる。
図31Bは、第2の実施例に係る追加された実ストレージシステムから通知を受けた実ストレージシステムの処理フローを示す図である。
ステップ20001:ストレージコントローラ200は、通知されたストレージボックス130の中から追加された実ストレージシステム100に制御権を渡すストレージボックス130を決定する。第2の実施例では、ストレージボックス130を単位として割り当て権限が移される。この際に、ストレージコントローラ200は、各論理ボリューム情報2000の第2リード回数2009及び第2ライト回数2010を参照する。また、ストレージコントローラ200は、各論理ボリュームを割当てているストレージグループ280に対応するストレージグループ情報2300の第2R回数2311及び第2W回数2313を参照する。
図32Aは、第2の実施例に係るストレージシステム閉塞処理部の処理フローを示す図である。
本処理フローの処理は、削除する実ストレージシステム100で実行される。具体的には、この処理は、削除する実ストレージシステム100のストレージコントローラ200のプロセッサ260がストレージシステム閉塞処理部4400を実行することにより実現される。
第2の実施例に係る処理フローが、第1の実施例の処理フローと異なるのは、以下の通りである。
ステップ21000、ステップ21001:これらステップは、ステップ9000、9001に対応するが、第2の実施例においては、ストレージボックス130についての割り当て権限を移譲する処理を行うようにしている。この際に、ストレージコントローラ200は、各論理ボリューム情報2000の第2リード回数2009、第2ライト回数2010を参照する。また、ストレージコントローラ200は、各論理ボリュームを割当てているストレージグループ280に対応するストレージグループ情報2300の第2R回数2311、第2W回数2313を参照する。
図32Bは、第2の実施例に係る削除される実ストレージシステムから通知を受けた実ストレージシステムの処理フローを示す図である。
ステップ21002:このステップは、ステップ9006に対応するが、ステップ21002では、ストレージコントローラ200は、ストレージボックス130単位で割り当て権限を譲り受けるようにしている。
第2の実施例でも、実ストレージシステム100の負荷をバランスさせるため、論理ボリュームを実ストレージシステム100間で移動させる場合に同様な処理を行ってもよい。また、割り当て権限をもった領域を、実ストレージシステム100間で移動させるようにしてもよい。この場合、その処理では、ステップ21000、ステップ21001、及びステップ21002を実行することとなる。
図33Aは、第2の実施例に係るストレージシステム移動処理部の処理フローを示す図である。
本処理フローの処理は、移動元となる実ストレージシステム100で実行される。具体的には、この処理は、移動元となる実ストレージシステム100のストレージコントローラ200のプロセッサ260がストレージシステム移動処理部4500を実行することにより実現される。
第2の実施例に係る処理フローが、第1の実施例の処理フローと異なるのは、以下の通りである。
ステップ22000:このステップは、ステップ10002に対応するが、ステップ22000では、ストレージコントローラ200は、ストレージボックス130について、割り当て権限を移動する。
図33Bは、第2の実施例に係る移動先の実ストレージシステムから通知を受けた実ストレージシステムの処理フローを示す図である。
ステップ22001:このステップは、ステップ10005に対応するが、ステップ22001では、ストレージコントローラ200は、ストレージボックス130単位で割り当て権限を譲り受けるようにしている。
図34Aは、第2の実施例に係るストレージボックス追加処理部の処理フローを示す図である。
ストレージボックス追加処理部4600は、ストレージボックス130が追加されたときに、ストレージコントローラ200により実行される。ストレージボックス130が追加されたとき、そのストレージボックス130に接続された実ストレージシステム100が起動され、この実ストレージシステム100のストレージコントローラ200が以下の処理を実行する。
第2の実施例に係る処理フローが第1の実施例に係る処理フローと異なる点は、処理を実行するのが割り当て権限をもつ実ストレージコントローラ100である点であり、下記の通りである。
ステップ23000:ストレージコントローラ200は、ストレージボックス情報2050、ストレージグループ情報2300、及びストレージ装置情報2500を設定する。
ステップ23001:ストレージコントローラ200は、認識したストレージボックス130の情報、当該実ストレージシステム100が割り当て権限をもつ旨の情報を、他の実ストレージシステム100に送る。
図34Bは、第2の実施例に係るストレージボックスの割り当て権限をもつ実ストレージシステムから情報を受け取った実ストレージシステムの処理フローを示す図である。
ステップ23002:ストレージコントローラ200は、受け取った情報により、ストレージボックス情報2050、ストレージグループ情報2300、及びストレージ装置情報2500を設定し、処理を完了する。
図60は、第2の実施例に係るストレージボックス閉塞処理部の処理フローを示す図である。
ストレージボックス閉塞処理部4700は、ストレージボックス130が削除されるときに、ストレージコントローラ200により実行される。ストレージボックス130が削除されることが決定したとき、そのストレージボックス130の制御権をもっている実ストレージシステム100が起動され、この実ストレージシステム100のストレージコントローラ200が以下の処理を実行する。
ステップ24000:実ストレージシステム100のストレージコントローラ200は、削除されるストレージボックス130に定義されている論理ボリュームを認識する。
ステップ24001:ストレージコントローラ200は、自身の実ストレージシステム100の内部のストレージグループ280の空き領域及び削除されるストレージボックス130以外のストレージボックス130内の当該実ストレージシステム100が割り当て権限を持っているストレージボックス130の中から、削除されるストレージボックス130に定義された論理ボリュームを移動する領域を決定して、当該領域を移動先となる論理ボリュームとして定義する。この際に、ストレージコントローラ200は、各論理ボリューム情報2000の第2リード回数2009及び第2ライト回数2010を参照する。また、ストレージコントローラ200は、各論理ボリュームを割当てているストレージグループ280に対応するストレージグループ情報2300の第2R回数2311及び第2W回数2313を参照する。具体的には、ストレージコントローラ200は、新しい論理ボリューム情報2000を確保して、必要な情報をセットする。特に、ここでは、ストレージコントローラ200は、移動元LUN2016に、当該実ストレージシステム100の識別子、削除されるストレージボックス130に定義された論理ボリュームの識別子、及びその論理ボリュームが定義されたストレージボックス130上の領域を設定する。また、ストレージコントローラ200は、移動する複数の論理ボリュームに対応する論理ボリューム情報2000の中の一つの論理ボリューム情報2000については、移動中フラグ2015をオンにして、移動ポインタ2017を先頭アドレスに設定する。ストレージコントローラ200は、残りの論理ボリューム情報2000については、移動待ちフラグ2018をオンにする。
ステップ24002:ストレージコントローラ200は、コピー処理部4900を起動する。ストレージコントローラ200は、その後処理を終了する。
図35は、第2の実施例に係るストレージボックス移動処理部の処理フローを示す図である。
ストレージボックス移動処理部4800は、旧いストレージボックス130が新しいストレージボックス130に置き換えられるときに、実行される。ストレージボックス130が置き換えられることが決定したとき、旧いストレージボックス130の制御権をもっている実ストレージシステム100が起動され、起動された実ストレージシステム100のストレージコントローラ200が以下の処理を実行する。
ステップ25000:実ストレージシステム100のストレージコントローラ200は、旧いストレージボックス130に定義されている論理ボリュームを認識する。
ステップ25001:ストレージコントローラ200は、新しいストレージボックス130の中に、認識した論理ボリュームを格納する領域を決定し、決定した領域を移動先となる論理ボリュームとして定義する。具体的には、ストレージコントローラ200は、新しい論理ボリューム情報2000を確保して、必要な情報をセットする。特に、ここでは、ストレージコントローラ200は、論理ボリューム情報2000の移動元LUN2016に、当該実ストレージシステム100の識別子、削除されるストレージボックス130に定義された論理ボリュームの識別子、及びその論理ボリュームが定義された新しいストレージボックス130上の領域を設定する。また、ストレージコントローラ200は、移動する複数の論理ボリュームに対応する論理ボリューム情報2000の中の一つの論理ボリューム情報2000については、移中フラグ2015をオンにして、移動ポインタ2017を先頭アドレスに設定する。ストレージコントローラ200は、残りの論理ボリューム情報2000については、移動待ちフラグ2018をオンにする。
ステップ25002:ストレージコントローラ200は、コピー処理部4900を起動する。
第2の実施例に係るコピー処理部4900の処理フローは、第1の実施例に係るコピー処理部4900の処理フローと同様である。
また、第2の実施例に係るキャッシュ閉塞スケジュール部4910の処理フローは、第1の実施例に係るキャッシュ閉塞スケジュール部4910の処理フローと同様である。
また、第2の実施例に係るキャッシュ閉塞処理部4920の処理フローは、第1の実施例に係るキャッシュ閉塞処理部4920の処理フローと同じである。
図36は、第2の実施例に係る仮想論理ボリューム定義部の処理フローを示す図である。
第2の実施例に係る処理フローが第1の実施例に係る処理フローと異なるのは、下記の通りである。
ステップ26000:ストレージコントローラ200は、当該実ストレージシステム100が割り当て権限をもつストレージボックス130内に論理ボリュームを定義する。
第2の実施例に係る仮想論理ボリューム消去処理部4960の処理フローは、第1の実施例に係る仮想論理ボリューム消去処理部4960の処理フローと同様である。
次に、第3の実施例に係る情報システムについて説明する。
第3の実施例に係る情報システムの構成は、第1の実施例に係る情報システムと同じである。第3の実施例では、実ストレージシステム100が容量仮想化機能をもつている。
第3の実施例に係る実ストレージシステム100の構成は、第1の実施例に係る実ストレージシステム100と同じである。また、第3の実施例に係るサーバポート情報198の構成は、第1の実施例に係るサーバポート情報198と同様である。
第3の実施例に係るキャッシュメモリ210の構成は、第1の実施例に係るキャッシュメモリ210と同じである。
図37は、第3の実施例に係る共有メモリに格納された情報を示す図である。
共有メモリ220は、ストレージシステム情報2060、他ストレージシステム情報2070、仮想論理ボリューム情報2085、論理ボリューム情報2000、ストレージボックス情報2050、実ページ情報2100、ストレージグループ情報2300、ストレージ装置情報2500、仮想ページ容量2600、キャッシュ管理情報2750、及び空きキャッシュ管理情報ポインタ2650を格納する。第3の実施例に係るストレージシステム情報2060は、第1の実施例に係るストレージシステム情報2060と同様である。また、第3の実施例に係る仮想論理ボリューム情報2085は、第1の実施例に係る仮想論理ボリューム情報2085と同様である。仮想論理ボリューム情報2085は、仮想論理ボリューム毎に対応して作成される。
図38は、第3の実施例に係る論理ボリューム情報の構成を示す図である。
第3の実施例に係る論理ボリューム情報2000が第1の実施例に係る論理ボリューム情報2000と異なる点は、割り当て範囲2006の代わりに、実ページポインタ2004を含む点である。第3の実施例では、実ストレージシステム100が容量仮想化機能をもっている。容量仮想化機能とは、論理ボリュームを定義したときに物理的な領域を割り当てずに、ライト要求があったときに、始めて、ライトされた領域を含むページを割り当てる機能である。論理ボリュームは、このページサイズごとに分割されていて、論理ボリュームの空間におけるページを仮想ページと呼び、実際に割り当てるページを実ページと呼ぶ。このため、論理ボリューム情報2000は、論理ボリュームの定義容量を、仮想ページサイズで割った数分の実ページポインタ2004を持ち、仮想ページに実ページを割り当てたとき、実ページポインタ2004に、その実ページ情報2100のアドレスが設定される。
第3の実施例では、ストレージステム100が容量仮想化機能をサポートしている。通常、容量仮想化機能において、記憶領域の割り当て単位は、ページと呼ばれる。また、論理ボリュームは、通常、サーバ110が読み書きをする論理的なストレージ装置である。ただし、本実施例では、キャッシングのために使用するストレージ装置の領域を論理ボリュームとして定義している。そして、この論理ボリュームにも、容量仮想化機能を適用して、ページを割り当てることで、実記憶領域を確保する。なお、本実施例では、論理ボリュームの空間は、仮想ページという単位で、分割されているものとし、実際のストレージグループ280は、実ページという単位で分割されているものとする。容量仮想化においては、論理ボリュームの記憶容量を、実際の記憶媒体の容量よりも大きく見せる。このため、仮想ページの数のほうが、実ページの数より大きいのが、一般的である。容量仮想化機能を実現した場合、サーバ110からのライト要求で書き込みを指示されたアドレスを含む仮想ページに実ページが割り当てられていないとき、ストレージコントローラ200が実ページを割り当てる。仮想ページ容量2600は、仮想ページの容量である。しかし、本実施例では、仮想ページ容量2600と実ページの容量は等しいというわけではない。というのは、実ページの容量は、RAIDのタイプにより異なってくる冗長データを含むためである。したがって、実ページの容量は、その実ページが割り当てられたストレージグループ280のRAIDタイプにより決まる。たとえば、RAID1のようにデータを2重に書き込む場合、実ページの容量は、仮想ページ容量2600の2倍になる。RAID5のように、N台のストレージ装置の容量に対し、1台分のストレージ装置の容量の冗長データを格納する場合、仮想ページ容量2600の(N+1)/Nの容量が確保される。当然、RAID0のように、冗長性がない場合、仮想ページ容量2600と等しい容量が実ページの容量ということになる。なお、本実施例においては、仮想ページ容量2600は、実ストレージシステム100の中で共通であるが、実ストレージシステム100に仮想ページ容量2600に異なったものがあってもよい。なお、本実施例では、それぞれのストレージグループは、RAID5で構成されているものとする。もちろん、ストレージグループが任意のRAIDグループで構成されていてもよい。
第3の実施例に係るキャッシュ管理情報2750の構成は、第1の実施例に係るキャッシュ管理情報2750の構成と同様である。
第3の実施例に係る空きキャッシュ管理情報ポインタ2650を用いて管理される空きキャッシュ情報管理キュー2201のデータ構造は、第1の実施例に係る空きキャッシュ情報管理キュー2201のデータ構造と同じである。
第3の実施例に係るストレージボックス情報2050の構成は、第1の実施例に係るストレージボックス情報2050と同じである。
図39は、第3の実施例に係るストレージグループ情報の構成を示す図である。
第3の実施例に係るストレージグループ情報2300は、第1の実施例に係るストレージグループ情報2300に含まれるセグメント数2303、割り当て可能セグメント数2309、空きセグメント数2304、割り当て可能セグメントビットマップ2308、及び空きセグメントビットマップ2307を含まないかわりに、空き実ページポインタ2315を含む。
図40は、第3の実施例に係る実ページ情報の構成を示す図である。
実ページ情報2100は、実ページごとに存在する各実ページを管理するための管理情報である。実ページ情報2100は、パッケージグループ2101、実ページアドレス2102、及び空きページポインタ2103を含む。
パッケージグループ2101は、実ページ情報2100に対応する実ページが、どのストレージ装置160に割り当てられているかを示す。実ページアドレス2102は、実ページがストレージグループ280の中で、どの相対的なアドレスに割り当てられているかを示す情報である。空きページポインタ2103は、この実ページに仮想ページが割り当てられていない場合、有効な値となる。この実ページに仮想ページが割り当てられていない場合、空きページポインタ2103の値は、ストレージグループ280の中で、次の仮想ページが割り当てられていない空きページに対応する実ページ情報2100をさす。
図41は、第3の実施例に係る空きページ情報管理キューの構成を示す図である。
空き実ページポインタ2200は、ストレージグループ280ごとに設けられる情報である。空きページ情報管理キュー2210は、空き実ページポインタ2200によって管理される空き実ページの集合を表している。空き実ページとは、仮想ページに割り当てられていない実ページを意味する。また、空き実ページに対応した実ページ情報2100を空き実ページ情報2100と呼ぶ。空き実ページポインタ2200は、先頭の空き実ページ情報2100のアドレスをさす。先頭の空き実ページ情報2100の中の空きページポインタ2103は、次の空き実ページ情報2100を指す。図41では、最後の空き実ページ情報2100の空き実ページポインタ2103は、空き実ページポインタ2200を示しているが、ヌル値でもよい。ストレージコントローラ200は、実ページを割り当てていない仮想ページに書き込み要求を受け付けると、論理ボリュームRAIDグループタイプ2003と割り当て範囲2006とに該当するストレージグループ280のいずれか、例えば、該当するストレージグループ280の中の空き実ページ数の最も多いストレージグループ280に対応する空き実ページポインタ2200から、空き実ページを探し、仮想ページに割り当てる。
第3の実施例に係るストレージ装置情報2500の構成は、第1の実施例に係るストレージ装置情報2500の構成と同様である。
次に、上述の管理情報を用いて、ストレージコントローラ200が実行する動作の説明を行う。ストレージコントローラ200の動作は、ストレージコントローラ200内のプロセッサ260がメモリ270に格納されているプログラムを実行することにより実現される。第3の実施例において、メモリ270内に格納されたプログラムは、第1の実施例と同様である。
図42Aは、第3の実施例に係るリード処理実行部の処理フローを示す図である。図42Bは、第3の実施例に係るキャッシュメモリのライトデータを転送するよう要求された実ストレージシステムの処理フローを示す図である。
リード処理実行部4000は、ストレージコントローラ200が、サーバ110からリード要求を受け付けたときに実行される。第3の実施例に係る処理フローと、第1の実施例に係る処理フローとの相違は以下の通りである。
ステップ5004の代わりに、以下のステップが実行される。
ステップ27000:ストレージコントローラ200は、リード要求が示す論理ボリュームに対応する論理ボリューム情報2000の移動元LUN2016に格納された識別子に対応する実ストレージシステム100に、移動元LUN2016に格納されたストレージポート及び論理ボリューム識別子と、リード要求で指定されたアドレスとを指定して、データを読むよう要求する。なお、実ストレージシステム100が、自身の実ストレージシステム100の場合もある。この場合、ストレージコントローラ200は、移動元LUN2016に格納されている論理ボリュームの識別子から、対応する論理ボリューム情報2000を認識する。また、ストレージコントローラ200は、対応するアドレスの実ページポインタ2004を参照して、実ページを含むストレージグループ280に対応するストレージグループ情報2300を認識し、RAIDタイプなどから、要求されたデータを含むストレージ装置160とそのアドレスとを認識して、該当するストレージ装置160に、読み出し要求を発行する。
ステップ5012の代わりに、以下のステップを実行する。
ステップ27001:ストレージコントローラ200は、論理ボリュームの識別子から、対応する論理ボリューム情報2000を認識する。ストレージコントローラ200は、対応するアドレスの実ページポインタ2004を参照して、実ページを含むストレージグループ280に対応するストレージグループ情報2300を認識し、RAIDタイプなどから、要求されたデータを含むストレージ装置160とそのアドレスとを認識して、該当するストレージ装置160に、読み出し要求を発行する。
図43Aは、第3の実施例に係るライト要求受付部の処理フローを示す図である。図43Bは、第3の実施例に係るキャッシュメモリのライトデータを転送するよう要求された実ストレージシステムの処理フローを示す図である。
ライト要求受付部4100は、ストレージコントローラ200が、サーバ110からライト要求を受け付けたときに実行される。
ここでは、第3の実施例に係るライト要求受付部4100の処理フローについて、第1の実施例に係るライト要求受付部4100の処理フローとの違いを説明する。
ステップ6002の前に、以下のステップが挿入されている。
ステップ28000:ストレージコントローラ200は、処理対象の論理ボリュームの論理ボリューム情報2000の移動中フラグ2015をチェックして、移動中フラグ2015がオフであるなら(ステップ28000:N)、処理をステップ28002へジャンプさせる。一方、移動中フラグ2015がオンである場合、ストレージコントローラ200は、移動中フラグ2015が、ライトするアドレスより小さいか否かをチェックし、移動中フラグ2015がライトするアドレスより小さければ(ステップ28000:N))、処理をステップ28002へジャンプさせる。
ステップ28001:ストレージコントローラ200は、論理ボリューム情報2000の移動元LUN2016を参照して、コピー元の論理ボリュームが当該実ストレージシステム100の論理ボリュームであれば、対応する実ページポインタ2004を参照して、実ページが割当てられていなければ、適当なストレージグループのストレージグループ情報2300を選択して、空き実ページ情報ポインタ2315から、実ページ情報2100を特定して、割り当てる。この後、ストレージコントローラ200は、処理をステップ6002へジャンプさせる。
ステップ28002:ストレージコントローラ200は、ライトするアドレスに基づいて、実ページポインタ2004を参照して、ライトするアドレスの領域に対して実ページが割り当てられているか否かを参照して、実ページが割り当てわれていなければ、適当なストレージグループ280に対応するストレージグループ情報2300を選択して、空き実ページ情報ポインタ2315から、実ページ情報2100を特定して、割り当てる。
図44は、第3の実施例に係るライトアフタ処理実行部の処理フローを示す図である。
ここでは、第3の実施例に係るライトアフタ処理実行部4200の処理フローについて、第1の実施例に係るライトアフタ処理実行部4200の処理フローとの違いを説明する。
ステップ7003の代わりに、下記のステップが挿入されている。
ステップ29000:プロセッサ260は、移動元LUN2016に格納されている論理ボリュームの識別子から、対応する論理ボリューム情報2000を認識する。さらに、プロセッサ260は、実ページポインタ2004を認識し、書き込みを行う実ページのアドレスを認識する。RAIDタイプなどから、ライトデータに対応する冗長データを生成するのに、必要な情報を読み込むため、プロセッサ260は、ストレージ装置160とそのアドレスとを認識して、該当するストレージ装置160に、読み出し要求を発行する。
ステップ7009の代わりに、下記のステップが挿入されている。
ステップ29001:プロセッサ260は、論理ボリュームに対応する論理ボリューム情報2000の実ページポインタ2004を参照して、対応するストレージグループ280を認識し、ライトする領域を認識する。さらに、プロセッサ260は、RAIDタイプなどから、ライトデータに対応する冗長データを生成するのに、必要な情報を読み込むため、ストレージ装置160とそのアドレスとを認識して、該当するストレージ装置160に、読み出し要求を発行する。
図45Aは、第3の実施例に係るストレージシステム追加処理部4300の処理フローである。
本処理フローの処理は、追加された実ストレージシステム100で実行される。ここでは、第3の実施例に係るストレージシステム追加処理部4300の処理フローについて、第1の実施例に係るストレージシステム追加処理部4300の処理フローとの違いを説明する。
ステップ8003の代わりに、以下のステップが挿入されている。
ステップ30000:ストレージコントローラ200は、制御権を譲りうけた論理ボリュームの集合を、仮想論理ボリューム情報2085及び論理ボリューム情報2000に設定する。また、ストレージコントローラ200は、論理ボリュームに割り当てられていた実ページの集合のぞれぞれの実ページに対し、実ページ情報2100を生成し、必要な情報の設定を行い、対応する実ページポインタ2004が、実ページ情報2100を示すように設定する。さらに、ストレージコントローラ200は、割り当て権限が与えられた実ページに関して、実ページ情報2100を生成して、対応するストレージグループ280に対応するストレージグループ情報2300の空き実ページポインタ2315に登録する。
図45Bは、第3の実施例に係る追加された実ストレージシステムから要求を受けた実ストレージシステムの処理フローを示す図である。
ステップ8005の代わりに、以下のステップが挿入される。
ステップ30001:通知を受けた実ストレージシステム100のストレージコントローラ200は、追加された実ストレージシステム100がアクセス権限をもっていて、かつ、当該実ストレージシステム100がアクセス権限をもっているストレージボックス130を処理対象として以下の処理を行う。なお、処理対象となるストレージボックス130が一つもない場合、ストレージコントローラ200は、その旨を追加された実ストレージシステム100に通知する。まず、ストレージコントローラ200は、処理対象のストレージボックス130上に、定義されている論理ボリュームをすべて把握し、追加された実ストレージシステム100に制御権を渡す論理ボリュームの集合を決定し、さらに、実ページポインタ2004を参照して、割り当てた実ページ情報2100から実ページのアドレスを認識し、対応する実ページ情報2100を消去する。この論理ボリュームの集合を決定する際に、ストレージコントローラ200は、各論理ボリューム情報の第2リード回数2009及び第2ライト回数2010を参照する。また、ストレージコントローラ200は、各論理ボリュームを割り当てているストレージグループ280に対応するストレージグループ情報2300の第2R回数2311及び第2W回数2313を参照する。さらに、ストレージコントローラ200は、処理対象のストレージボックス130の属するストレージグループ280の中で、割り当て権限を移譲する空き実ページを決める。ストレージコントローラ200は、決定した空き実ページに対応する実ページ情報2100から実ページのアドレスを認識する。さらに、ストレージコントローラ200は、この実ページ情報2100を空きページ情報管理キュー2210から外し、この実ページ情報2100を消去する。
ステップ8007の代わりに以下のステップが挿入されている。
ステップ30002:ストレージコントローラ200は、追加された実ストレージシステム100に、制御権を渡す仮想論理ボリューム及び論理ボリュームの集合と、対応する論理ボリュームに割り当てた実ページのアドレス情報及び割り当て権限を渡す実ページのアドレスの集合とを通知し、処理を終了する。
図46Aは、第3の実施例に係るストレージシステム閉塞処理部の処理フローを示す図である。
本処理フローの処理は、削除する実ストレージシステム100で実行される。なお、第1の実施例に係るストレージシステム閉塞処理部4400の処理フローと同様なステップについては、同一の符号を付し、説明を省略する。
ステップ31000:削除を行う実ストレージシステム100のストレージコントローラ200は、論理ボリューム情報2000を参照して、ストレージボックス130に定義された論理ボリュームを認識する。さらに、ストレージコントローラ200は、各ストレージボックス130のストレージグループ280ごとに、空き実ページを認識する。
ステップ31001:ストレージコントローラ200は、論理ボリュームの制御権及び割り当て権限をもっている実ページのそれぞれについて、どの実ストレージシステム100に移動するかを決定する。ストレージコントローラ200は、論理ボリュームに割り当てられている実ページのアドレスの把握と、対応する実ページ情報2100の消去と、割り当て権限を移す実ページのアドレスの把握と、対応する実ページ情報2100の消去とを行う。制御権を移す論理ボリュームと、割り当て権限を移す実ページとを決定する際に、ストレージコントローラ200は、各論理ボリューム情報2000の第2リード回数2009、第2ライト回数2010を参照する。また、ストレージコントローラ200は、各論理ボリュームを割当てているストレージグループ280の第2R回数2311、第2W回数2313を参照する。
ステップ31002:ストレージコントローラ200は、制御権を移すと決めた仮想論理ボリューム及び制御権を渡す論理ボリュームの集合と、対応する論理ボリュームに割り当てた実ページのアドレス情報及び割り当て権限を渡す実ページのアドレスの集合とを、該当する実ストレージシステム100に通知する。
図46Bは、第3の実施例に係る閉塞する実ストレージシステムから要求を受けた実ストレージシステムの処理フローを示す図である。
ステップ31003:通知を受けた実ストレージシステム100のストレージコントローラ200は、閉塞する実ストレージシステム100から受け取った仮想論理ボリューム情報及び論理ボリューム情報を、自身の共有メモリ220の仮想論理ボリューム情報2085及び論理ボリューム情報2000として設定する。ただし、論理ボリューム識別子については、当該実ストレージシステム100が決定して、仮想論理ボリューム情報2085と論理ボリューム情報2000とに設定する。また、ストレージコントローラ200は、論理ボリュームに割り当てた実ページごとに、実ページ情報2100を生成して、実ページ情報2100の実ページアドレス2102などの必要な情報を設定する。また、ストレージコントローラ200は、対応する実ページポインタ2004に、実ページ情報2100のアドレスを設定する。ストレージコントローラ200は、当該実ストレージシステム100に、割り当て権限を移すと決められた実ページに対応する実ページ情報2100を生成して、必要な情報を設定し、生成した実ページ情報2100を、空きページ情報管理キュー2210に登録する。
第3の実施例でも、実ストレージシステム100の負荷をバランスさせるため、論理ボリュームを実ストレージシステム100間で移動させる場合に上記同様な処理を行ってもよい。また、割り当て権限をもった領域を、実ストレージシステム100間で移動させるようにしてもよい。この場合、その処理では、ステップ31000、ステップ31001、ステップ31002、及びステップ31003を実行することとなる。
図47Aは、第3の実施例に係るストレージシステム移動処理部の処理フローを示す図である。
本処理フローの処理は、移動元となる実ストレージシステム100で実行される。
ステップ32000:移動元となる実ストレージシステム100のストレージコントローラ200は、論理ボリューム情報2000を参照して、ストレージボックス130に定義された論理ボリュームを認識する。さらに、ストレージコントローラ200は、各ストレージボックス130のストレージグループ280ごとに、空き実ページを認識する。
ステップ32001:ストレージコントローラ200は、論理ボリュームの制御権と、割り当て権限をもっている実ページとのそれぞれについて、どの実ストレージシステム100に移動するかを決定する。ストレージコントローラ200は、論理ボリュームに割り当てられている実ページのアドレスの把握と、対応する実ページ情報2100の消去と、割り当て権限を移す実ページのアドレスの把握と、対応する実ページ情報2100の消去とを行う。
ステップ32002:ストレージコントローラ200は、制御権を移すときめた仮想論理ボリューム及び制御権を渡す論理ボリュームの集合と、対応する論理ボリュームに割当てた実ページのアドレス情報及び割り当て権限を渡す実ページのアドレスの集合とを、移動先の実ストレージシステム100に通知する。
図47Bは、第3の実施例に係る移動先となる実ストレージシステムから要求を受けた実ストレージシステムの処理フローを示す図である。
ステップ32003:移動先となる実ストレージシステム100のストレージコントローラ200は、閉塞する実ストレージシステム100から受け取った仮想論理ボリュームの情報及び論理ボリュームの情報を、仮想論理ボリューム情報2085及び論理ボリューム情報2000に設定する。ただし、論理ボリュームの識別子は、当該実ストレージシステム100が決定して、仮想論理ボリューム情報2085の論理ボリューム識別子2090と、論理ボリューム情報2000の論理ボリューム識別子2001とに設定する。また、ストレージコントローラ200は、論理ボリュームに割り当てた実ページごとに、実ページ情報2100を生成して、実ページポインタ2004などの必要な情報を設定する。ストレージコントローラ200は、当該実ストレージシステム100に、割り当て権限を移すと決められた実ページに対応する実ページ情報2100を生成して、必要な情報を設定し、生成した実ページ情報2100を、空きページ情報管理キュー2210に登録する。
図48Aは、第3の実施例に係るストレージボックス追加処理部の処理フローを示す図である。
第3の実施例に係る処理フローが、第1の実施例に係る処理フローと異なるのは、以下の通りである。
ステップ11002の後に以下のステップが挿入されている。
ステップ33000:ストレージコントローラ200は、当該実ストレージシステム100が割り当て権限を持つ領域の実ページ情報2100を生成して、空きページ情報管理キュー2210に登録する。
ステップ33001:ストレージコントローラ200は、他の実ストレージシステム100が割り当て権限を持つ領域の実ページのアドレスを、他の実ストレージシステム100に送る。
図48Bは、第3の実施例に係るストレージボックスの割り当て権限をもつ実ストレージシステムから情報を受け取った実ストレージシステムの処理フローを示す図である。
第3の実施例に係る処理フローが、第1の実施例に係る処理フローと異なるのは、以下の通りである。
ステップ11006の後に以下のステップが挿入されている。
ステップ33002:ストレージコントローラ200は、当該実ストレージシステム100が割り当て権限を持つ領域の実ページ情報2100を生成して、空きページ情報管理キュー2210に登録する。
図61は、第3の実施例に係るストレージボックス閉塞処理部の処理フローを示す図である。
ストレージボックス閉塞処理部4700は、ストレージボックス130が削除されるときに、実行される。ストレージボックス130が削除されることが決定したとき、そのストレージボックス130に接続された実ストレージシステム100が起動され、起動された実ストレージシステム100のストレージコントローラ200が以下の処理を実行する。
第3の実施例に係る処理フローにおいては、第1実施例に係る処理フローに対して以下のステップが挿入されている。
ステップ34000:ストレージコントローラ200は、削除するストレージボックス130のストレージグループ280に定義されている空き実ページ情報2100を消去し、空きページ情報管理キュー2210をからにする。
図49は、第3の実施例に係るストレージボックス移動処理部4800の処理フローである。
ストレージボックス移動処理部4800は、旧い(移動元)ストレージボックス130が新しい(移動先)ストレージボックス130に置き換えられるときに、実行される。ストレージボックス130が置き換えられることが決定したとき、旧いストレージボックス130に接続された実ストレージシステム100が起動される。第3の実施例に係る処理フローと、第1の実施例に係る処理フローとの違いは、以下のとおりである。
移動元のストレージボックス130に関する処理としては、以下のステップが加えられる。
ステップ35000:実ストレージシステム100のストレージコントローラ200は、削除するストレージボックス130のストレージグループ280に定義されている空き実ページ情報2100を消去し、空きページ情報管理キュー2210をからにする。
移動先のストレージボックス130に関する処理としては、以下のステップが異なる。
ステップ35001:実ストレージシステム100のストレージコントローラ200は、新しいストレージボックス130の中に、これまで割り当て権限をもっている領域に対応する実ページに関する実ページ情報2100を生成して、対応するストレージグループ280の空きページ情報管理キュー2210に登録する。また、ストレージコントローラ200は、移動先となる論理ボリュームを決定して、論理ボリューム情報2000を定義する。具体的には、ストレージコントローラ200は、新しい論理ボリューム情報2000を確保して、必要な情報をセットする。特に、ここでは、ストレージコントローラ200は、論理ボリューム情報2000の移動元LUN2016に、当該実ストレージシステム100の識別子、削除されるストレージボックス130に定義された論理ボリュームの識別子、及びその論理ボリュームが定義された新しいストレージボックス130上の領域を設定する。また、ストレージコントローラ200は、移動する複数の論理ボリュームに対応する論理ボリューム情報2000の中の一つの論理ボリューム情報2000については、移動中フラグ2015をオンにして、移動ポインタ2017を先頭アドレスに設定する。ストレージコントローラ200は、残りの論理ボリューム情報2000については、移動待ちフラグ2018をオンにする。
さらに、第3の実施例に係る処理フローは、第1の実施例に係る処理フローのステップ13003に代えて、以下のステップとなる。
ステップ35002:ストレージコントローラ200は、新しいストレージボックス130の記憶容量が、旧いストレージボックス130に比べて大きい場合、容量増加分を新しいストレージボックス130に接続された実ストレージシステム100の数で均等に割って割当量を決定し、その割当量と該当する領域を決めて、対応する実ページの実ページ情報2100を設定して、空きページ情報管理キュー2210に設定する。この後、ストレージコントローラ200は、処理を終了する。
図50Aは、第3の実施例に係るコピー処理部の処理フローを示す図である。
コピー処理部4900は、他の処理部から起動を受け、ストレージコントローラ200により実行が開始される。
第3の実施例に係る処理フローと、第1実施例に係る処理フローとの違いは以下の通りである。
第1実施例に係る処理フローのステップ14002を以下のステップに変更する。
ステップ36000:ストレージコントローラ200は、移動元論理ボリュームに対応する論理ボリューム情報2000の移動先LUN2016の識別子に対応する論理ボリュームの論理ボリューム情報2000と、移動ポインタ2017とに基づいて、対応する実ページポインタ以降で、ヌルでない最初の実ページポインタに対応する実ページをコピー対象とする。なお、ヌルである実ページポインタについては、ストレージコントローラ200は、移動先の論理ボリュームに対応する論理ボリューム情報2000の実ページポインタ2004にコピーする。ストレージコントローラ200は、移動先のストレージグループ280のRAIDタイプと、移動ポインタ2017とに基づいて、読み出したデータから冗長データが生成可能な領域を、移動元の論理ボリュームから読み出す領域として決定する。なお、移動元LUN2016の実ストレージシステム100の識別子が、この実ストレージシステム100の識別子である場合、ストレージコントローラ200は、ストレージグループ280のRAIDタイプやストレージ装置160などから、読み出しを行う物理的な領域を決定する(このとき、移動元の論理ボリュームの冗長データは読み出さない)。
更に、第1実施例に係る処理フローのステップに次のステップが追加されている。
ステップ36001:ストレージコントローラ200は、移動先の論理ボリューム用の実ページを格納する。ストレージコントローラ200は、適当なストレージグループ280の空きページ情報管理キュー2210から、実ページ情報2100を確保し、この実ページ情報2100のアドレスを、論理ボリューム情報2000の実ページポインタ2004に設定する。
更に、第1実施例に係る処理フローのステップに次のステップが追加されている。
ステップ36002:ストレージコントローラ200は、移動元の実ページポインタ2004が示す実ページ情報2100を消去する。
図50Bは、第3の実施例に係る実ストレージシステム間で行われる論理ボリューム移動処理における移動元論理ボリュームに関わる処理フローを示す図である。第1実施例に係る処理フローのステップに次のステップが追加されている。
ステップ36003:ストレージコントローラ200は、移動元の実ページポインタ2004が示す実ページ管理情報2100を消去する。
ステップ36004:当該論理ボリュームの最後まで、データを送った場合、ストレージコントローラ200は、対応する論理ボリュームの論理ボリュームの情報を消去する。ただし、本実施例には、空きセグメントビットマップ2307、空きセグメント数2304は存在しないので、ストレージコントローラ200は、これらに対する操作をしない。
第3の実施例に係るキャッシュ閉塞スケジュール部4910の処理フローは、第1の実施例に係るキャッシュ閉塞スケジュール部4910の処理フローと同様である。
第3の実施例に係るキャッシュ閉塞処理部4920の処理フローは、第1の実施例に係るキャッシュ閉塞処理部4920の処理フローと同じである。
図51は、第3の実施例に係る仮想論理ボリューム定義部の処理フローを示す図である。
仮想論理ボリューム定義部4950は、仮想論理ボリュームを定義するときに、実行される。
第3の実施例に係る処理フローと、第1実施例に係る処理フローとの違いは、以下の通りである。
ステップ37000:ストレージコントローラ200は、ステップ18001で設定された論理容量2002と実ページサイズとから、実ページ数を算出する。ストレージコントローラ200は、論理ボリューム情報2000の算出した数の実ページポインタ2004に、ヌル値を設定する。この後、ストレージコントローラ200は、処理を終了する。
図52は、第3の実施例に係る仮想論理ボリューム消去部の処理フローを示す図である。
仮想論理ボリューム消去部4960は、仮想論理ボリュームを消去するときに、実行される。この場合、消去する仮想論理ボリュームの制御権をもつ実ストレージシステム100が処理を実行する。また、仮想論理ボリューム消去部4960の実行の際には、仮想論理ボリュームの識別子が指定される。
ステップ39000:ストレージコントローラ200は、論理ボリューム情報2000からヌル値でない実ページポインタ2004を見出し、実ページポインタ2004により示される割り当てられたすべての実ページ情報2100を、空きページ情報管理キュー2210に戻す。この後、ストレージコントローラ200は、処理を終了する。