以下、本発明の実施例について、図面を用いて説明する。なお、以下に説明する実施例は特許請求の範囲に係る発明を限定するものではなく、また実施例の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
実施例の説明に入る前に、実施例で用いられる各種用語について説明する。
以下で説明する実施例においては、特に断りのない限り、物理的なストレージ装置(つまり専用のハードウェアで構成されたストレージ装置)を、「在来型ストレージ装置」と呼ぶ。また、以下に説明する実施例においては、ストレージ制御プログラムがインストールされた物理的な計算機(たとえば汎用的な計算機)を「SDS」と呼ぶ。
以下で説明する実施例においては、「ストレージ装置」は、在来型ストレージ装置とSDSの両方を意味する語として用いられる。たとえば在来型ストレージ装置とSDSが共通に備える機能や特徴を説明する場合、「ストレージ装置」の語が用いられる。
「ボリューム」とは、ストレージ装置や記憶デバイス等のターゲットデバイスが、ホスト計算機等のイニシエータに提供する記憶空間のことを意味する。イニシエータがボリューム上の領域に対するI/O(Input/Output)要求、たとえばリード要求を発行すると、ボリュームを提供しているターゲットデバイスは、その領域に対応付けられているターゲットデバイス上の領域からデータを読み出して、イニシエータに返送する。
ストレージ装置の中には、ボリュームとして、いわゆるThin Provisioning技術により形成される仮想的なボリュームを、イニシエータに提供できるものがある。以下で説明する実施例では、仮想的なボリュームをイニシエータに提供する機能を「Thin Provisioning機能」と呼ぶ。
仮想的なボリュームは、その初期状態(定義された直後)では、記憶空間上の領域に記憶デバイスが対応付けられていない。イニシエータが記憶空間上の領域にデータ書き込み要求を発行した時点で、ストレージ装置はその領域に対応付けられる記憶デバイスを動的に決定することができる。以下で説明される実施例におけるSDSは、仮想的なボリュームをイニシエータに提供できる。
「ボリュームの仮想化機能」(または単に「仮想化機能」と呼ばれることもある)とは、他のストレージ装置が有するボリュームを、自己のボリュームとしてイニシエータデバイスに提供する機能である。ボリュームの仮想化機能は、たとえば専用の装置(たとえば仮想化アプライアンスと呼ばれる)に実装されて提供される。あるいはストレージ装置がボリュームの仮想化機能を備えていることもある。
図1は、本実施例における情報システムの構成を示す。
情報システムは、複数のサーバコンピュータ(100,105,140)を有し、これらのサーバコンピュータ(100,105,140)がネットワーク120で相互接続されて構成される。サーバコンピュータ(100,105,140)はいずれも、パーソナルコンピュータ等の汎用的な計算機でよく、基本的なハードウェア構成はいずれも同じでよい。ただしそれぞれのサーバコンピュータ(100,105,140)のハードウェア構成は、必ずしも完全に同一でなくてもよい。たとえばサーバコンピュータ(100,105,140)の有するプロセッサ(たとえばCPU(Central Processing Unit))の数やメモリ容量等が異なっていてもよい。
複数のサーバコンピュータ(100,105,140)のうち、サーバコンピュータ105は、ユーザが使用するアプリケーションプログラム(AP)が実行される計算機で、以下ではこれを「APサーバ105」と呼ぶ。アプリケーションプログラムはたとえば、データベース管理システム(DBMS)あるいは表計算ソフトウェアやワードプロセッサ等のプログラムでよい。APサーバ105は、ホストシステムの一例である。
一方、サーバコンピュータ100は、APサーバ105が使用するデータを格納するためのストレージ装置として動作する計算機である。サーバコンピュータ100のプロセッサでストレージ制御プログラム130が実行されることにより、サーバコンピュータ100はストレージ装置としての動作を行う。そのため、以下ではサーバコンピュータ100のことを、「SDS100」と呼ぶ。
SDS100は、1以上のボリュームを定義することができ、定義されたボリュームはAPサーバ105等のイニシエータに提供される。APサーバ105は、ボリューム(を提供しているSDS100)に対するライト要求を発行することで、アプリケーションプログラムによって生成されたデータ(たとえばデータベーステーブルなど)を、ボリュームに格納し、またボリューム(を提供しているSDS100)に対するリード要求を発行することで、データをボリュームから読み出す。
サーバコンピュータ140は、情報システムの使用者または管理者(以下では単に、「ユーザ」と呼ぶ)が情報システムの管理操作を行うために使用する計算機であり、以下ではこれを「管理サーバ140」と呼ぶ。管理サーバ140は、ユーザが情報システムの管理操作を行う時に使用する、キーボードやマウスなどの入力デバイス、ディスプレイ等の出力デバイスを有する。もちろん管理サーバ140以外のサーバコンピュータ(SDS100、APサーバ105)も入力デバイスと出力デバイスを備えていてもよい。
SDS100、APサーバ105及び管理サーバ140の少なくとも1つは、クラウド基盤のような計算機リソースプール(たとえば、インタフェースデバイス、メモリ及びプロセッサ)に基づき提供される仮想的な装置でもよい。SDS100、APサーバ105、管理サーバ140はそれぞれ、情報システム内に複数存在していてもよい。ただし本実施例では、APサーバ105、管理サーバ140はそれぞれ情報システム内に1台存在し、SDS100は2台以上情報システム内に存在する例を説明する。また、本実施例では、SDS100間でデータの移行が行われるが、移行元のSDS100と移行先のSDS100で実行されるストレージ制御プログラム130は異なり、このため、移行元のSDS100と移行先のSDS100のアクセスプロトコル(典型的には、I/O要求の送信やその応答の受信の際のプロトコル)が異なる。
ネットワーク120にはたとえば、イーサネット(登録商標)やファイバチャネル等の伝送媒体が用いられる。ネットワーク120は、APサーバ105がSDS100に対してデータを読み書きする際に用いられるとともに、管理サーバ140とSDS100(またはAPサーバ105)との間での管理操作コマンド(または各種管理情報)のやり取りにも用いられる。ただし別の例として、APサーバ105とSDS100との間で読み書きされるデータを送受信するためのネットワークと、管理サーバ140が管理操作コマンド等を送受信するためのネットワークの、2種類が設けられていてもよい。すなわち、ネットワーク120は、単一のネットワークでもよいし、複数のネットワークでもよい。
図2は、SDS100の構成を示している。
SDS100は、主記憶(メモリ)210、記憶デバイス220、ネットワークインタフェースコントローラ(NIC)190、ディスクインタフェース(DISK I/F)180、及び、それらに接続されたプロセッサ(CPU)200を含む。プロセッサ200、メモリ、記憶デバイス220、NIC190及びDISK I/F180の少なくとも1つのコンポーネントは、1つでも複数でもよい。
プロセッサ200は、主記憶210にロードされた各プログラムを実行する。主記憶210は、DRAM(Dynamic Random Access Memory)等の揮発性メモリであり、主記憶210には、ストレージ制御プログラム130、管理プログラム150、インストールプログラム250、そしてストレージ制御プログラム130が利用する管理情報230が格納される。
一方、記憶デバイス220は、磁気ディスクまたはフラッシュメモリ等の、不揮発性記憶媒体を有する記憶デバイスで、APサーバ105から書き込まれたデータを格納するために用いられる。なお、上で述べたストレージ制御プログラム130や管理情報230などは、SDS100が稼働していない時(電源OFFの状態の時)には記憶デバイス220に格納されており、SDS100が起動された時に、記憶デバイス220から主記憶210にロードされるとよい。
DISK I/F180は、プロセッサ200と記憶デバイス220との間に設けられるインタフェースデバイスである。一方NIC190は、SDS100をネットワーク120に接続するためのインタフェースデバイスで、SDS100とネットワーク120間に設けられる伝送線(ネットワークケーブル)を接続するためのポートも有する。そのため以下では、NIC190を「ポート190」と表記することもある。なお、ポート190経由の通信は、伝送線経由の通信に代えて、無線通信でもよい。
続いて主記憶210上に格納されているプログラムの役割を概説する。なお、以後の説明では、サーバコンピュータ(SDS100,APサーバ105、管理サーバ140等)で実行される処理について、「プログラム」を主語として説明を行う場合があるが、実際には、サーバコンピュータのプロセッサがプログラムを実行することによって、プログラムに記述された処理が行われる。ただし説明が冗長になることを防ぐため、プログラムを主語にして処理の内容を説明することがある。そしてプログラムを主語にして説明されている処理の主体は、実際にはプログラムを実行しているプロセッサであることを意味する。
ストレージ制御プログラム130は、SDS100(つまりサーバコンピュータ)をストレージ装置として機能させるためのプログラムである。具体的には、例えば、SDS100はストレージ制御プログラム130の働きにより、APサーバ105等のイニシエータに1以上のボリュームを提供したりする、イニシエータからI/O要求(リード要求やライト要求)を受け付けて、リード要求で指定されたアドレスのデータをイニシエータに返送する、またはライト要求で指定されたライトデータをボリュームに格納する等の処理を行ったりすることができる。なお、在来型ストレージ装置は、ボリュームを提供する以外の機能(たとえばボリュームのミラーコピーを作成する等)を有するが、ストレージ制御プログラム130も同様に、ボリュームを提供する以外の機能をSDS100に実現するプログラムであってもよい。
またストレージ制御プログラム130は、APサーバ105から頻繁にアクセスされるデータを保持しておくための領域240を、主記憶210上に確保する。APサーバ105から頻繁にアクセスされるデータを保持するための領域240を「キャッシュ領域240」と呼ぶ。ただしSDS100は必ずしもキャッシュ領域240を有していなくてもよい。
またSDS100は、主記憶210に保持されているデータが停電等の障害時に消失することを防ぐ手段を有していてもよい。たとえばSDS100がバッテリーを有し、停電時にバッテリーから供給される電力を用いて、主記憶210上のデータを維持するとよい。ただしSDS100は必ずしもバッテリー等のデータ維持手段を有していなくてもよい。
管理プログラム150は、情報システム内のストレージ装置(SDS)を管理するためのプログラムである。具体的には、例えば、管理プログラム150で行われる管理とは、ボリュームの定義、削除等の操作、SDS100の状態の監視などでよい。本実施例では、管理プログラム150は情報システム内の特定の1台のSDS100(後述するSDS#x)にインストールされている例を説明する。管理プログラム150は情報システム内の全てのSDSの管理を行うことができる。また管理サーバ140では、SDS100で実行される管理プログラム150と通信を行う通信プログラム(非図示)が実行されており、ユーザは当該通信プログラムを用いて、管理サーバ140にボリュームの定義等の指示を行う。
インストールプログラム250は、プログラムをインストールするためのプログラムである。インストールプログラム250は情報システム内の各SDS100が有している。たとえば、ストレージ制御プログラム130は、インストールプログラム250によってSDS100にインストールされる。例えば、ユーザがプログラムのインストールを行う時、ユーザは管理サーバ140を用いて、SDS100で実行される管理プログラム150に対してインストールの指示を出す。インストールの指示を受領した管理プログラム150は、プログラムのインストール先のSDS100が有するインストールプログラム250にプログラムのインストールを行わせる。プログラムのインストールは、ユーザの指示無しに行われてもよい。例えば、少なくともインストールプログラム250以外のプログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は計算機が読み取り可能な(例えば非一時的な)記録媒体であってもよい。また、以下の説明において、二つ以上のプログラムが一つのプログラムとして実現されてもよいし、一つのプログラムが二つ以上のプログラムとして実現されてもよい。
インストールプログラム250は、SDSクライアントプログラム260をインストールすることもできる。SDSクライアントプログラム260については後述する。
なお、SDS100では上で述べたプログラム以外のプログラムも実行されていてよい。たとえばSDS100(のプロセッサ200)では、汎用的な計算機で実行されるオペレーティングシステムが実行されていてもよく、その場合ストレージ制御プログラム130等は、オペレーティングシステムの提供する機能を用いながら動作してもよい。あるいはSDS100上で、いわゆる仮想計算機を定義するためのプログラム(たとえばハイパーバイザと呼ばれる)が実行されてもよく、その場合ストレージ制御プログラム130等は、定義された仮想計算機上で実行されるとよい。
本実施例に係る情報システムには、複数のSDS100が混在している。本実施例では、少なくとも2つのSDS100で実行されるストレージ制御プログラム130は、仕様(少なくともアクセスプロトコル)の異なるストレージ制御プログラム130である。、ストレージ制御プログラム130の仕様(少なくともアクセスプロトコル)が異なることを、ストレージ制御プログラム130の種類が異なると言うことができる。情報システムで複数種類のストレージ制御プログラム130が実行される場合、それぞれのストレージ制御プログラム130は少なくとも、汎用的な計算機(本実施例におけるサーバコンピュータなど)で実行可能なプログラムで、且つSDS100にストレージ装置としての最低限の機能を提供させることができるプログラムである必要があるが、サポートされる機能に差異があってもよい。なお、ストレージ装置としての最低限の機能とは、I/O要求に従ってデータのI/Oを行う機能でよい。
本実施例では、図3に例示の仕組みにより、アクセスプロトコルの異なるSDS間でのデータ移行が可能である。
図3は、アクセスプロトコルの異なるSDS間のデータ移行の流れの概要を説明する図である。
図3に示すように、移行先SDS100(以下ではこれを、「SDS#x(300)」と呼ぶ)が存在する。また、SDS#xのアクセスプロトコルとは異なるアクセスプロトコルで通信する移行元SDS100(以下ではこれを、「SDS#y(301)」と呼ぶ)が存在する。
情報システム内に存在するSDS#x(300)とSDS#y(301)の数は、いずれも1つでも複数でもよいが、本実施例では特に断りのない限り、情報システム内にSDS#x(300)が1つ、SDS#y(301)も1つ存在する例を説明する。
SDS#x(300)のアクセスプロトコルは、SCSIプロトコルのような汎用のアクセスプロトコルである。「汎用のアクセスプロトコル」とは、第2のアクセスプロトコルの一例であり、SDS#x(300)のSDSクライアントプログラム無し(非経由)の通信で使用されるアクセスプロトコルである。例えば、SDS#x(300)とAPサーバ105との間でやり取りされるI/O要求(コマンド)は、ANSI T10で規格化されているSCSIの規格に従ったコマンド(以下、「SCSIコマンド」と呼ぶ)でよい。
一方、SDS#y(301)のアクセスプロトコルは、SDS#y(301)のベンダ規定のアクセスプロトコル(以下、ベンダプロトコル)である。「ベンダプロトコル」とは、第1のアクセスプロトコルの一例であり、1以上のSDSクライアントプログラム260のうちのSDS#y用のSDSクライアントプログラム260との間の通信で使用されるアクセスプロトコルである。SDSクライアントプログラム260は、ボリュームを提供したり、当該ボリュームに対するI/Oを受け付けた場合に当該ボリュームに関連付けられた記憶空間に属し当該I/OのI/O先に対応したアドレスを指定したI/O要求を送信したりするプログラムである。以下、SDS#y用のSDSクライアントプログラム260を、「SDSクライアントプログラム260y」と表記し、且つ、その表記における参照符号に、SDSクライアントプログラム260yのインストール先に応じて枝番を付すものとする。
APサーバ105(のプロセッサ)では、AP(アプリケーションプログラム)325が実行される。AP325のI/O対象のデータがSDS#y(301)に格納されるためには、SDS#y(301)との通信のためにSDSクライアントプログラム260yが必要である。そのため、APサーバ105には、SDSクライアントプログラム260yがインストールされる。APサーバ105にインストールされたSDSクライアントプログラム260yを、「SDSクライアントプログラム260y-0」と表記する。
SDSクライアントプログラム260y-0は、SDS#y(301)が提供する記憶空間280-1(第1の記憶空間の一例)に関連付けられたボリュームLV1(第1のボリュームの一例)を作成し当該ボリュームLV1を管理する。ボリュームLV1は、例えば、AP325からの指示に従い作成される。AP325は、SDSクライアントプログラム260y-0を有する装置(例えば物理的又は仮想的な装置)における外部プログラム(SDSクライアントプログラム260y-0の外部のプログラム)の一例である。当該装置における論理的な階層において、AP325は、SDSクライアントプログラム260y-0のレイヤよりも上位のレイヤに位置するプログラムでよい。作成されたボリュームLV1のアドレス範囲に、記憶空間280-1のアドレス範囲のうちの少なくとも一部のアドレス範囲が対応付けられてよい。記憶空間280-1は、SDS#y(301)のポート190-1を介してSDSクライアントプログラム260y-0に提供されてよい。
ボリュームLV1は、SDSクライアントプログラム260y-0によりAP325に提供される。AP325は、ボリュームLV1に対してI/Oを行う。SDSクライアントプログラム260y-0は、ボリュームLV1に対するI/Oを受け付けた場合、当該I/OのI/O先(例えばアドレス)を当該I/O先に対応したアドレス(記憶空間280-1に属するアドレス)に変換し、変換後のアドレスを指定したI/O要求を、ベンダプロトコルに従いSDS#y(301)に送信する。そのI/O要求に応答して、SDS#y(301)が、そのI/O要求に従うI/O対象のデータを記憶空間280-1に格納する。なお、記憶空間280-1は、SDS#y(301)内の1以上の記憶デバイス220(例えば、RAIDグループのような記憶デバイスグループ)に基づく記憶空間である。ボリュームLV1に属するアドレスと記憶空間280-1に属するアドレスとの関係を示す第1のアドレスマップが、SDSクライアントプログラム260y-0及びSDS#y(301)の少なくとも1つにおいて管理される。当該第1のアドレスマップが、定期的に又は不定期的に、SDSクライアントプログラム260y-0及びSDS#y(301)の少なくとも1つから管理サーバ140に送られる。例えば、管理サーバ140が、第1のアドレスマップを管理し、管理サーバ140内の第1のアドレスマップが、SDSクライアントプログラム260y-0及びSDS#y(301)の少なくとも1つにおける第1のアドレスマップと同期する。なお、第1のアドレスマップは、ボリュームLV1の全域との対応関係を示してもよいし、ボリュームLV1のうちデータのライト先とされたアドレスとの対応関係を示してもよい。
管理サーバ140が、SDS#y(301)とSDS#x(300)とを管理する。管理サーバ140が、SDS#y(301)とSDS#x(300)の他に、APサーバ105を管理してもよい。例えば、管理サーバ140は、APサーバ105毎に、下記のうちの少なくとも1つ、
・APサーバ105のアドレス(例えばIPアドレス)、
・APサーバ105にインストールされているSDSクライアントプログラム260のID、
・SDSクライアントプログラム260が管理するボリュームのID、
・SDSクライアントプログラム260が管理するボリュームに対するI/Oを行うAP325のID、及び、
・ボリュームについてのアドレスマップ(当該ボリュームに属するアドレスと、当該ボリュームに関連付けられた記憶空間に属するアドレスとの対応関係を示す情報)、
を表す情報を保持していてよい。また、例えば、管理サーバ140は、管理対象の各SDSが有する管理情報230(図2参照)の少なくとも一部を管理していてもよい。管理サーバ140は、例えば、各SDSについて、SDSのアドレスと、SDSが有する記憶空間のIDとを管理してよい。
ボリュームLV1に記憶空間280-1が関連付けられている場合において、管理サーバ140は、移行指示を、SDS#x(300)内の管理プログラム150に送信する(S1)。移行指示は、入力デバイスやAPサーバ105経由でユーザから管理サーバ140に対する指示に応答して送信されてもよいし、SDS#x(300)の情報システムへの追加(例えばネットワーク120への追加)の検出に応答して送信されてもよい。また、移行指示には、下記のパラメータ、
・SDS#y(301)(移行元SDSの一例)のアドレス、
・管理サーバ140が有する第1のアドレスマップ(ボリュームLV1に属するアドレスと記憶空間280-1に属するアドレスとの対応関係を示す情報)、
・記憶空間280-1のID、
・記憶空間280-1にアクセスするために必要な認証情報(例えば、SDS#y用のSDSクライアントプログラム260のID及びパスワード)、
・APサーバ105のアドレス、及び、
・AP325のID、
が関連付けられる(一部のパラメータが無くてもよい)。
SDS#x(300)内の管理プログラム150が、当該移行指示に応答して、S2~S5を行う。なお、以下の説明において、ボリュームLV1に属するアドレスを「第1ボリュームアドレス」と言い、記憶空間280-1に属するアドレスを「第1空間アドレス」と言い、ボリュームLV0に属するアドレスを「第2ボリュームアドレス」と言い、SDS#x(300)が有する記憶空間280-0(第2の記憶空間の一例)に属するアドレスを「第2空間アドレス」と言うことがある。また、第1ボリュームアドレスと第2ボリュームアドレスを「ボリュームアドレス」と総称することができ、同様に、第1空間アドレスと第2空間アドレスを「空間アドレス」と総称することができる。
管理プログラム150が、当該移行指示で指定されているプログラムID(SDS#y用のSDSクライアントプログラム260のID)が示すSDS#y用のSDSクライアントプログラム260yがインストールされていなければ、インストールプログラム250を呼び出す。インストールプログラム250が、当該プログラムIDをキーにSDS#y用のSDSクライアントプログラム260yを特定し、当該特定されたSDSクライアントプログラム260yプログラムソース(図示せず)からSDS#x(300)にインストールする(S2)。SDS#x(300)にインストールされたSDS#y用のSDSクライアントプログラム260yを「SDSクライアントプログラム260y-1」と表記する。移行指示にプログラムIDが関連付けられており、当該移行指示に応答してSDS#y用のSDSクライアントプログラム260yのインストールが行われるので、別段のインストール指示を不要とすることができる。
管理プログラム150が、記憶空間280-1に関連付けられるボリュームLV0(第2のボリュームの一例)を作成することをSDSクライアントプログラム260y-1に指示する(S3)。この指示では、第1のアドレスマップが関連付けられる。第1のアドレスマップ(及び後述の第2のアドレスマップ)は、例えば、ファイルシステム情報でよい。この指示に応答して、SDSクライアントプログラム260y-1が、記憶空間280-1に関連付けられるボリュームLV0を作成し、当該ボリュームLV0を管理する。作成されたボリュームLV0に属する複数の第2ボリュームアドレスのうちの、第1のアドレスマップが示す2以上の第1ボリュームアドレスにそれぞれ対応した(例えば一致した)2以上の第2ボリュームアドレスの各々について、当該第2ボリュームアドレスに、記憶空間280-1が属する複数の第1空間アドレスのうちの、第1のアドレスマップが示す第1空間アドレス(当該第2ボリュームアドレスに対応した第1ボリュームアドレスにマッピングされている第1空間アドレス)がマッピングされる。第2ボリュームアドレスと第2空間アドレスとの対応関係を示す第2のアドレスマップが、SDSクライアントプログラム260y-1及びSDS#x(300)の少なくとも1つにおいて管理される。
ボリュームLV0は、ボリュームLV1に代わってAP325からI/Oがされるボリュームである。具体的には、例えば、管理プログラム150が、移行指示で指定されているサーバアドレス(APサーバ105のアドレス)を用いて、APサーバ105に、1以上の指示を送信する(S4)。当該1以上の指示は、ボリュームLV0を認識すること、及び、I/Oのために使用されるパスを、ボリュームLV1に接続されたパスから、ボリュームLV0に接続されたパスに切り替えることの指示である。当該1以上の指示では、AP325のIDと、ボリュームLV0のIDと、SDSクライアントプログラム260y-1のIDとが指定されている。当該1以上の指示に応答して、当該1以上の指示で指定されているAP325について、SDSクライアントプログラム260y-1が管理するボリュームLV0が認識されて、I/Oのために使用されるパスが、ボリュームLV1に接続されたパスから、ボリュームLV0に接続されたパスに切り替えられる(S5)。この後は、AP325は、ボリュームLV1に対するI/Oに代えて、ボリュームLV0に対するI/Oを行う。なお、ボリュームLV0の認識、及び、パスの切り替えのための上記1以上の指示の少なくとも1つは、管理プログラム150に代えて、管理サーバ140からAPサーバ105に自動送信されてもよいし、APサーバ105にユーザにより入力(例えば、APサーバ105又は管理サーバ140の入力デバイス経由で入力)されてもよい。
管理プログラム150が(又は、管理プログラム150からの指示に応答してSDSクライアントプログラム260y-1が)、記憶空間280-1から記憶空間280-0にボリュームLV0経由で移行対象データ(AP325からボリュームLV1経由で格納されたデータ)をコピーすることであるデータコピーを行う(S6)。データコピーは、例えば、ボリュームLV0の先頭のアドレスからシーケンシャルに読出し(記憶装置280-1からの読出し)及び書込み(記憶装置280-0への書込み)が行われることで、完了してもよい。データコピーは、第2のアドレスマップ(第1のアドレスマップを基に作成されたアドレスマップ)から特定される2以上の第2ボリュームアドレスのうち、記憶装置280-0への書込みが済んでいない各第2ボリュームアドレスについて、下記(m1)及び(m2)を含む。
(m1)管理プログラム150(又は、SDSクライアントプログラム260y-1)が、当該第2ボリュームアドレスを指定した読出しをボリュームLV0に対して行う(SDSクライアントプログラム260y-1に、ボリュームLV0からデータを読み出す読出し要求を送信する)。ここでの読出しでは、ベンダプロトコルと異なるプロトコルであり規格化されたプロトコル(例えばSCSIプロトコルのような汎用プロトコル)が使用される。次に、SDSクライアントプログラム260y-1は、第2ボリュームアドレスに対する読出しを受け付けた場合、第2のアドレスマップ(第1のアドレスマップを基に作成されたアドレスマップ)を基に当該第2ボリュームアドレスを第1空間アドレスに変換し、当該第1空間アドレスを指定した読出し要求を、ベンダプロトコルに従いSDS#y(301)に送信する。その読出し要求に応答して記憶装置280-1からSDS#y(301)により移行対象データが読み出され、当該読み出された移行対象データをSDS#y(301)からSDSクライアントプログラム260y-1が受ける。そして、当該移行対象データは、SDSクライアントプログラム260y-1から管理プログラム150に返る。SDSクライアントプログラム260y-1から管理プログラム150への移行対象データの返却では、上記規格化されたプロトコルが使用される。すなわち、管理プログラム150とSDSクライアントプログラム260y-1間の通信では、ベンダプロトコルを使用する必要がない。
(m2)管理プログラム150(又は、SDSクライアントプログラム260y-1)が、SDS#y(301)から取得された移行対象データを、当該第2ボリュームアドレスが属するボリュームLV0に関連付いた記憶空間280-0に書き込む。管理プログラム150が、当該第2ボリュームアドレスにマッピングされる空間アドレス(第2のアドレスマップに記述の空間アドレス)を、(m1)での読出し元の第1空間アドレスから、(m2)での書込み先の第2空間アドレスに変更する。
なお、いずれの第2ボリュームアドレスについて書込みが済んでいるかは、例えば、複数の第2ボリュームアドレスにそれぞれ対応した複数のビットで構成されたビットマップを基に管理されてよい。例えば、管理プログラム150(又は、SDSクライアントプログラム260y-1)は、複数の第2ボリュームアドレスのうち、データコピーでの書込み、又は、ボリュームLV0に対するI/Oに従う書込みが行われた第2ボリュームアドレスに対応したビットを“1”に更新する。これにより、ビット“0”に対応した第2ボリュームアドレスが、書込みが済んでいない第2ボリュームアドレスである。
なお、AP325によりボリュームLV0に対するI/Oがされると、例えば次の処理が行われる。
すなわち、ボリュームLV0に対するI/Oが読出しの場合、リード処理実行部(図12参照)が、当該読出しを受け付け、上述のビットマップを基に、当該読出しの読出し元の第2ボリュームアドレスについてデータコピーが完了済か否かを判断する。データコピーが未完了の場合、リード処理実行部は、当該読出し元の第2ボリュームアドレスに対応した空間アドレスとして、第2のアドレスマップから第1の空間アドレスを特定し、第1の空間アドレスを指定した読出し指示をSDSクライアントプログラム260y-1に出す。このため、SDSクライアントプログラム260y-1は、当該第1の空間アドレスを指定した読出し要求をSDS#y(301)に送信することにより、読出し対象のデータを取得し、当該読出し対象のデータがSDSクライアントプログラム260y-1からリード処理実行部に返る。一方、データコピーが完了済の場合、リード処理実行部は、当該読出し元の第2ボリュームアドレスに対応した空間アドレスとして、第2のアドレスマップから第2の空間アドレスを特定する。リード処理実行部は、当該第2の空間アドレスを用いて記憶空間280-0から読出し対象のデータを取得する。
ボリュームLV0に対する書込みの場合、ライト処理実行部(図12参照)が、当該書込みを受け付け、上述のビットマップを基に、当該書込みの書込み先の第2ボリュームアドレスについてデータコピーが完了済か否かを判断する。データコピーが未完了の場合、ライト処理実行部は、当該第2ボリュームアドレスに空きの第2空間アドレスをマッピングし、当該第2空間アドレスを用いて記憶空間280-0にデータを書き込む。また、ライト処理実行部は、第2のアドレスマップにおける、当該第2ボリュームアドレスに対応した空間アドレスを、書込み先の第2空間アドレスに変更する。また、ライト処理実行部は、上述のビットマップのうちの、当該第2ボリュームアドレスに対応したビットを、“1”に更新する。一方、データコピーが完了済の場合、ライト処理実行部は、当該書込み先の第2ボリュームアドレスに対応した第2空間アドレスを第2のアドレスマップから特定し、当該第2の空間アドレスを用いて記憶空間280-0にデータを書き込む。
本実施例に係る情報システムでは、SDS#x(300)は仮想化機能により、その他のSDS#y(301)が有するボリュームを、自身の(SDS#x(300)の)ボリュームとしてAPサーバ105に提供することができる。なお、以下の説明では主にSDS#x(300)が行う機能についての説明を行う。そこでSDS#x(300)がAPサーバ105に提供するボリュームと、その他のSDS(SDS#y(301))が有するボリュームとの混同を避けるために、SDS#x(300)がAPサーバ105に提供するボリュームの事は「論理ボリューム」と呼ぶ。なお、図3において、SDS#x(300)の仮想化機能によれば、SDS#y(301)の記憶空間280-1がSDS#x(300)のボリュームLV0として提供される。
続いて、本実施例に係るSDS#xにおける記憶領域の管理方法の一例について説明する。
SDS#x(300)は、記憶デバイス220の記憶空間を直接イニシエータ(APサーバ105など)に提供せず、これとは異なる記憶空間である論理ボリュームとしての記憶空間を定義する。SDS#x(300)は論理ボリュームを複数定義可能である。各論理ボリュームにはSDS#x(300)内で一意な識別番号が付され、これを論理ボリューム識別子(あるいは、論理ボリュームID)と呼ぶ。なお、「論理ボリューム」は、SDSクライアントプログラム260y-1が作成するボリュームLV0であってもよいし、当該ボリュームLV0に関連付けられる記憶空間280-0であってもよい。以下、説明を簡単にするために、論理ボリュームの一例が、ボリュームLV0であるとする。
SDS#xは、Thin Provisioning機能により定義された論理ボリュームを、直接的に(SDSクライアントプログラム260非経由で)、又は、間接的に(SDSクライアントプログラム260経由で)、APサーバ105に提供することができる。後者の場合、論理ボリュームを一例とした記憶空間280-0に代えてボリュームLV0が、APサーバ105に提供される。SDS#xはボリュームの仮想化機能を有し、他のストレージ装置の有する記憶領域を用いた論理ボリュームを定義することもできる。
図4に、本実施例において、イニシエータ(APサーバ105等)からSDS100に対して発行されるI/O要求(リード要求やライト要求)のフォーマットの例を示す。I/O要求400には少なくとも、オペレーションコード401、ポートID402、ボリューム識別子403、アクセスアドレス404、データ長405が含まれる。
オペレーションコード401には、I/O要求の種類が格納される。たとえばAPサーバ105がリード要求を発行する場合、オペレーションコード401にリード要求である旨を表す情報が格納される。
ポートID402は、アクセス対象のボリュームを有するSDS100のポート190の識別子である。ポート190の識別子には、iSCSI Name(ネットワーク120がTCP/IPプロトコルを伝送するネットワークの場合)や、PORT ID(ネットワーク120がファイバチャネルで構成されたネットワークの場合)などが用いられる。
ボリューム識別子403は、アクセス対象のボリュームの識別子で、たとえばLUN(Logical Unit Number)等が用いられる。アクセスアドレス404とデータ長405は、アクセス対象ボリューム内の、アクセス対象範囲を表す情報である。アクセスアドレス404に“A”、データ長405に“B”が含まれている場合、アドレスAで始まるサイズBの領域がアクセス対象範囲であることを表す。なお、アクセスアドレス404やデータ長405に格納される情報の単位は、特定のものには限定されない。たとえばデータ長405にはブロック数(1ブロックはたとえば512バイトの領域である)が格納され、またアクセスアドレス404にはLBA(Logical Block Address)が格納されるとよい。
また、I/O要求400には、上で説明した以外の情報(図4では“その他406”と表記する)が含まれていてもよい。たとえばI/O要求がライト要求の場合、データ長405の後に、ライト対象データが付加される。
続いてThin Provisioning機能と、SDS#x(300)内での記憶領域の管理方法の一例について説明する。
Thin Provisioning機能により形成される論理ボリュームは、自身が(つまりSDS#x(300)が)有する記憶デバイス220を記憶領域として使用するように構成されている。ただし最初は(この論理ボリュームが定義された直後は)、論理ボリューム上の各アドレスに対して書き込まれるデータの格納するために使用される記憶領域は定まっていない。論理ボリュームへのライト要求を受け付けたときにはじめて、SDS#x(300)はライト対象範囲(ライト要求で指定されている範囲)に書き込まれるデータの格納先となる、記憶デバイス220の記憶領域を決定する。以下では、ライト対象範囲(ライト要求で指定されている範囲)に書き込まれるデータの格納先を決定する処理のことを、「割り当てる」と表現する。
Thin Provisioning機能により論理ボリュームに割り当てられる記憶領域について説明する。SDS#x(300)は、複数の記憶デバイス220の中のいずれか1つが故障しても、その記憶デバイス220のデータを回復できるRedundant Arrays of Inexpensive/Independent Disks/Device(RAID)機能を有する。SDS#x(300)は、SDS#x(300)内のいくつか(たとえば4つ、8つ等)の記憶デバイス220を用いて1つのRAIDを構成する。RAIDを構成する記憶デバイス220の集合を記憶デバイスグループと呼ぶ。また、以下の説明では、説明を簡単にするために、記憶空間280(例えば280-0)が、記憶デバイスグループが提供する記憶空間であるとし、故に、記憶空間280を「記憶デバイスグループ280」と表記することもある。本実施例に係るSDS#x(300)では、1つの記憶デバイスグループ280は同一種類の記憶デバイス220から構成される。またSDS#x(300)は、記憶デバイスグループ280の各記憶領域を、一次元のアドレスで特定可能にする記憶空間として管理する。
図5を用いて、Thin Provisioning機能により形成される論理ボリュームと記憶デバイスグループ280の関係について説明する。SDS#x(300)は論理ボリューム(図中の“LV0”)に割り当てられる記憶領域の管理の為に、論理ボリュームを複数の仮想ページ(図5では、VP0、VP1、VP2)という所定サイズの領域ごとに管理している。論理ボリュームに記憶領域を割り当てる際、SDS#x(300)はこの仮想ページ毎に記憶領域を割り当てる。各仮想ページには論理ボリューム内で一意な識別番号が付される。この識別番号を仮想ページ番号と呼ぶ(あるいは「仮想ページ#」と表記されることもある)。また、仮想ページ番号がnの仮想ページは、“仮想ページ#n”と表記される。
仮想ページは、SDS#x(300)内部で論理ボリュームの記憶空間の管理のためにのみ用いられる概念である。APサーバ105等のイニシエータは、論理ボリュームの記憶領域にアクセスする際には、LBA(Logical Block Address)などのアドレスを用いて、アクセス対象の記憶領域を特定する。APサーバ105が論理ボリュームへのアクセス要求を発行した時、SDS#x(300)は、APサーバ105が指定したLBAを仮想ページ番号及び仮想ページ内の相対アドレス(仮想ページ先頭からのオフセットアドレス)に変換する。この変換は、LBAを仮想ページサイズで除算することで実現できる。仮に仮想ページのサイズがP(MB)とすると、論理ボリュームの先頭位置からP(MB)分の領域が仮想ページ#0として管理され、その次のP(MB)分の領域が仮想ページ#1として管理される。そしてそれ以降も同様に、P(MB)の領域がそれぞれ、仮想ページ#2、#3…として管理される。
SDS#x(300)が論理ボリュームを定義した直後は、各仮想ページに物理記憶領域は割り当てられていない。SDS#x(300)は、APサーバ105から仮想ページに対するライト要求を受け付けた時点ではじめて、その仮想ページに対して物理記憶領域を割り当てる。仮想ページに割り当てられる物理記憶領域は実ページと呼ばれる。実ページは、記憶デバイスグループ280上の記憶領域である。図5では、仮想ページ#0(VP0)に実ページRP0が割り当てられている状態を表している。
実ページは、記憶デバイスグループ280の複数の記憶デバイス220の記憶領域を用いて形成される領域である。図5において、160-1,160-2,160-3,160-4はそれぞれ、各記憶デバイス220の記憶領域を表している。また、図5で例示している記憶デバイスグループ280のRAIDレベル(RAID技術における、データ冗長化方式の種類。RAIDレベルには一般的には、RAIDレベル1(RAID 1)からRAIDレベル6(RAID 6)の種類がある)は、RAID4で、またデータドライブ3台、パリティドライブ1台で構成されるRAIDである。ただし、記憶デバイスグループ280のRAIDレベルには、RAID4以外のもの(たとえばRAID5、RAID6等)が採用されてもよい。
SDS#x(300)は、記憶デバイスグループ280に属する各記憶デバイス220の記憶領域を、ストライプブロックと呼ばれる複数の固定サイズの記憶領域に分割して管理する。たとえば図5において、0(D),1(D),2(D)…、またはP0,P1…と記載されているそれぞれの領域が、ストライプブロックを表している。
図5で、ストライプブロックのうち、P0,P1…と記載されているストライプブロックは、RAID機能により生成される冗長データ(パリティ)の格納されるストライプブロックであり、これを「パリティストライプ」と呼ぶ。一方、0(D),1(D)、2(D)…と記載されているストライプブロックは、APサーバ105から書き込まれるデータ(冗長データではないデータ)が格納されるストライプブロックである。このストライプブロックのことは、「データストライプ」と呼ばれる。パリティストライプには、複数のデータストライプを用いて生成される冗長データが格納される。
以下、パリティストライプと、当該パリティストライプに格納される冗長データを生成するために用いられるデータストライプのセットのことを、「ストライプライン」と呼ぶ。図5に示された例では、たとえばパリティストライプP0には、データストライプ0(D),1(D),2(D)を用いて生成される冗長データ(パリティ)が格納される関係にあり、データストライプ0(D),1(D),2(D)とパリティストライプP0は、同一のストライプラインに属する。
つまり1つのストライプラインに属する各ストライプブロックは、ストレージ装置(160-1,160-2,160-3,160-4)上の同じ位置(アドレス)に存在する。ただし別の実施形態として、同一ストライプラインに属する各ストライプブロックが、記憶デバイス220上の異なるアドレスに存在する構成が採用されてもよい。実ページ(たとえばRP0、RP1)は図5に示されるように、1または複数のストライプラインから構成される領域である。
またSDS#x(300)は、記憶デバイスグループ280の各記憶領域(ブロック)を、一次元のアドレスで特定可能にする記憶空間として管理する。以下ではこの記憶空間を「記憶デバイスグループの記憶空間」と呼び、この記憶空間上のアドレスを「記憶デバイスグループのアドレス」または「記憶デバイスグループアドレス」と呼ぶ。記憶デバイスグループアドレスの例を図5に示す。記憶デバイスグループの記憶空間は図5に示されているように、記憶デバイスグループ280内の各ストライプが、1つずつ順に配置された記憶空間である。記憶デバイスグループ内の先頭のストライプブロックの記憶デバイスグループアドレスが0と定められ、以下各ストライプブロックに、たとえば図5に示されるようにアドレスが付される。記憶デバイスグループのアドレスは、実ページと記憶デバイスグループ280上の記憶領域の対応関係を管理するために用いられる。
また実ページが仮想ページに割り当てられる場合、データストライプ(0(D),1(D)等)のみが割り当てられ、パリティストライプは割り当てられない。そのため、実ページ上のライトデータの格納される領域の合計サイズは、仮想ページのサイズと等しい関係にある。つまり、(実ページのサイズーパリティ格納領域のサイズ)=仮想ページサイズ、の関係にある。図5ではRAID4の構成例についてのみ示されているが、たとえば記憶デバイスグループ280のRAIDタイプがRAID1の場合には、実ページサイズは、仮想ページサイズの2倍になる。
なお、SDS#x(300)が必ずしもRAID機能をサポートしていなくてもよい。その場合、パリティストライプは定義されず、実ページのサイズと仮想ページのサイズは同じになる。
仮想ページ内の各領域と、実ページ内の各領域との関係(マッピング)は、図5に示されている通りである。つまり、実ページの先頭ストライプからパリティを除いた領域(0(D)、1(D)、2(D))が、仮想ページの先頭領域に割り当てられている。それ以降も同様に、実ページの2番目以降の各ストライプからパリティを除いた領域(3(D)、4(D)、5(D)…)が、順番に仮想ページの領域に割り当てられる。
このように、仮想ページ内の各領域と実ページ内の各領域とのマッピングは規則的にマッピングされているため、SDS#xは、APサーバ105からのアクセス要求で指定されている論理ボリューム上のアクセス位置(LBA)から仮想ページ番号及び仮想ページ内の相対アドレス(仮想ページ先頭からのオフセットアドレス)を求めることで、当該アクセス位置に対応付けられている記憶デバイス220及びその記憶デバイス220内の領域(データストライプ)を一意に算出できる。さらにアクセス位置に対応付けられているデータストライプに加え、そのデータストライプと同一ストライプラインに属するパリティストライプも一意に定まる。ただし、仮想ページ内の各領域と実ページ内の各領域とのマッピングは、ここで説明したマッピング方法に限定されるものではない。
なお、1つの論理ボリューム中の各仮想ページに割り当てられる実ページは、必ずしも同一記憶デバイスグループ280内の実ページに限定されない。仮想ページ#0に割り当てられる実ページと、仮想ページ#1に割り当てられる実ページが、それぞれ異なる記憶デバイスグループ280内の実ページであってもよい。
また仮想ページに割り当てられる実ページは、まだ他の仮想ページに割り当てられていない実ページでなければならない。仮想ページに割り当てられていない実ページのことを、「空きページ」または「空き実ページ」と呼ぶ。
ここでは、SDS#x(300)の有するThin Provisioning機能について説明したが、本実施例に係る情報システム内のその他のストレージ装置(SDS#y(301)など)はこれらの機能を有していなくてもよい。
続いて、本実施例におけるSDS#x(301)のストレージ制御プログラム130が使用する管理情報の内容を説明していく。
図6は、SDS#x(301)が有する管理情報230に含まれる主な情報を示している。
管理情報230には、論理ボリューム情報2000、実ページ情報2100、空きページ管理情報ポインタ2200、記憶デバイスグループ情報2300、記憶デバイス情報2500、仮想ページ容量2600が含まれる。ただし管理情報230にはこれ以外の情報が含まれていてよい。
論理ボリューム情報2000は、論理ボリュームの構成(たとえば、仮想ページと実ページのマッピング)などの管理情報であり、SDS#x(300)が有する論理ボリューム毎に論理ボリューム情報2000が定義される。そのためSDS#x(300)内に論理ボリュームがL個定義された時、管理情報230内に論理ボリューム情報2000はL個存在する。以下では、ある論理ボリューム情報2000によって属性情報が管理される論理ボリュームのことを、「管理対象論理ボリューム」と呼ぶ。
実ページ情報2100は実ページを管理するための情報で、実ページ毎に実ページ情報2100が存在する(管理情報230内には、SDS#x(300)が有する実ページの数と同数の実ページ情報2100が存在する)。以下、ある実ページ情報2100によって属性情報が管理される実ページのことを、「管理対象実ページ」と呼ぶ。
記憶デバイスグループ情報2300は、SDS#x(300)が有する記憶デバイスグループ280の構成についての情報である。記憶デバイスグループ情報2300は記憶デバイスグループ280毎に存在する。以下、ある記憶デバイスグループ情報2300によって属性情報が管理される記憶デバイスグループのことを、「管理対象記憶デバイスグループ」と呼ぶ。
記憶デバイス情報2500は、SDS#x(300)が有する記憶デバイス220についての情報で、記憶デバイス220毎に存在する。以下、ある記憶デバイス情報2500によって属性情報が管理される記憶デバイスのことを、「管理対象記憶デバイス」と呼ぶ。
空きページ管理情報ポインタ2200は、空き実ページを管理するための情報であり、1つの記憶デバイスグループ280に対して1つの空きページ管理情報ポインタ2200が存在する。
仮想ページ容量2600は、仮想ページのサイズを表す情報である。本実施例では、各論理ボリュームの仮想ページのサイズはいずれも等しい前提とする。そのため管理情報230内には仮想ページ容量2600は1つだけ存在する。
図7は、論理ボリューム情報2000の形式を示す図である。
論理ボリューム情報2000には、論理ボリュームID2001、論理ボリューム容量2002、仮想化フラグ2003、SDS ID2004、SDSクライアントプログラムID2020、ボリュームID2005、コピー中フラグ2006、コピーポインタ2007、第2SDS ID2008、第2SDSクライアントプログラムID2021、第2ボリュームID2009、論理ボリュームRAIDタイプ2010、待ちフラグ2011、実ページポインタ2012が含まれる。
論理ボリュームID2001は、管理対象論理ボリュームの識別子を示す。本実施例では論理ボリュームの識別子には、LUN(Logical Unit Number)が用いられる例を説明する。ただし論理ボリュームの識別子は、SDS100内で一意な識別子であればよく、LUN以外の識別子が用いられてもよい。なお本実施例では識別子のことを「ID」と表記することもある。
論理ボリューム容量2002は、管理対象論理ボリュームの容量である。
仮想化フラグ2003には、0(オフ)または1(オン)の何れかが格納される。管理対象論理ボリュームが他のストレージ装置(SDS#x(300)以外のSDS100)のボリュームを用いて形成されている場合(つまり仮想化機能を用いて定義された論理ボリュームの場合)、仮想化フラグ2003はオン(1)に設定される。また論理ボリューム情報2000の仮想化フラグ2003がオンのとき、SDS ID2004、ボリュームID2005はそれぞれ、管理対象論理ボリュームにマップされているボリュームを有するSDS100の識別子とそのボリュームの識別子を表す。また本実施例では、SDS100の識別子として、SDS100のポート190の識別子が用いられる前提とする。そのため、SDS ID2004そして後述する第2SDS ID2008には、SDS100のポート190の識別子が格納される。ただしこれ以外の情報が、SDS100の識別子として用いられてもよい。
コピー中フラグ2006、第2SDS ID2008は、論理ボリュームが仮想化機能を用いて定義された論理ボリュームの場合に用いられる。SDS#x(300)は、後述するコピー処理実行部4300を実行することで、仮想化機能を用いて定義された論理ボリュームのコピー処理を行うことがある。このコピー処理では、論理ボリュームにマップされたボリュームのデータを、他の場所(SDS#x(300)内の記憶デバイス220あるいは別のSDS100)にコピーする。コピー中フラグ2006は、論理ボリュームにマップされたボリュームのデータを他の場所にコピー中か否かを表す情報である。コピー中フラグ2006が“オン”(1)の時、コピー処理中であることを表す。コピーポインタ2007はコピー処理で用いられる情報で、詳細は後述する。
第2SDS ID2008は、論理ボリュームにマップされたボリュームのデータの、コピー先のSDS100の識別子を表す。コピー先のSDS100は、自装置(つまりSDS#x(300))であってもよい。第2SDS ID2008が、SDS#x(300)の識別子であれば、コピー処理実行部4300は論理ボリュームにマップされたボリュームのデータを、SDS#xの有する記憶デバイス220上にコピー中であることを意味する。逆に第2SDS ID2008がSDS#xの識別子でなければ、論理ボリュームにマップされたボリュームのデータのコピー先は、別のSDS100のボリュームであることを意味する。データのコピー先が別のSDS100のボリュームである場合、第2ボリュームID2009は、データコピー先のボリュームの識別子を示す。
論理ボリュームRAIDタイプ2010には、論理ボリュームに割り当てられる実ページを有する記憶デバイスグループ280のRAID構成についての情報が格納される。本実施例においてRAID構成とは具体的には、RAID(記憶デバイスグループ280)のRAIDレベルと、記憶デバイスグループ280を構成する記憶デバイス220の数を含む情報である。
待ちフラグ2011は、管理対象論理ボリュームに待ち状態にあるリード処理又はライト処理があることを示す情報である。
実ページポインタ2012は、管理対象論理ボリュームの仮想ページと実ページの対応関係(マッピング)についての情報である。実ページポインタ2012には、仮想ページに割り当てられた実ページのページ管理情報(後述する実ページ情報2100)へのポインタ(主記憶210上のアドレス)が格納される。
1つの論理ボリューム情報2000の中に含まれる実ページポインタ2012の数は、管理対象論理ボリュームの仮想ページ数(論理ボリューム容量2002を仮想ページ容量2600で割った数と等しい)である。たとえば論理ボリュームの仮想ページ数がnであれば、その論理ボリュームの論理ボリューム情報2000内には、実ページポインタ2012はn個存在する。図7では、仮想ページ#p(pは0以上の整数とする)の実ページポインタ2012を「実ページポインタ2012-p」と表記している。
なお、仮想ページに実ページが割り当てられる契機は、論理ボリュームが定義された時ではなく、仮想ページに対して、APサーバ105からのデータ書き込みが行われる契機である。したがって、まだ書き込みが行われていない仮想ページの実ページポインタ2012はNULL(無効値。たとえば“-1”等の値)になっている。
図8は、実ページ情報2100の形式を示す図である。
先に述べたとおり、実ページは記憶デバイスグループ280内に定義される記憶領域である。実ページ情報2100は実ページの存在する記憶デバイスグループ280、及び記憶デバイスグループ280内の位置を特定する情報を格納した情報であり、具体的には、記憶デバイスグループ2101、実ページアドレス2102、空きページポインタ2103を含んでいる。
記憶デバイスグループ2101は、管理対象実ページの属する記憶デバイスグループ280の識別子(記憶デバイスグループIDと呼ぶ)を表す。実ページアドレス2102は、管理対象実ページの存在する位置を表す情報である。実ページは記憶デバイスグループ280内に存在するので、実ページアドレス2102に用いられる情報は、記憶デバイスグループ280のアドレスである。具体的には実ページアドレス2102には、管理対象実ページの先頭領域のアドレスが格納される。図5を参照しながら説明する。図5では、たとえばストライプブロックNが、実ページRP1の先頭に位置づけられ、またストライプブロックNのアドレス(ストレージグループアドレス)は“0x00015000”であるので(なお、“0x”は、数値が16進数表記であることを表す)、実ページRP1の実ページ情報2100の実ページアドレス2102には“0x00015000”が格納される。
空きページポインタ2103は、管理対象実ページが仮想ページに割り当てられていない場合に用いられる。詳細は後述する。実ページが仮想ページに割り当てられている場合、その実ページの空きページポインタ2103にはNULLが格納される。
図9は、記憶デバイス情報2500の形式を示す図である。
記憶デバイス情報2500は、記憶デバイス220の属性情報を記録した情報で、記憶デバイスID2501、記憶容量2502の情報を含む。記憶デバイスID2501は管理対象記憶デバイスの識別子である。記憶容量2502は、管理対象記憶デバイスの容量である。
図10は、記憶デバイスグループ情報2300の形式を示す図である。
記憶デバイスグループ情報2300は、記憶デバイスグループID2301、記憶デバイスグループRAIDタイプ2302、実ページ数2303、空き実ページ数2304、記憶デバイスポインタ2305の情報を有する。記憶デバイスポインタ2305は、管理対象記憶デバイスグループに属する記憶デバイス220の管理情報(記憶デバイス情報2500)へのポインタである。記憶デバイスグループ280がN個の記憶デバイス220から構成される時、その記憶デバイスグループ280の記憶デバイスグループ情報2300は、N個の記憶デバイスポインタ2305を有する。
記憶デバイスグループID2301は、管理対象記憶デバイスグループの識別子である。記憶デバイスグループRAIDタイプ2302は、管理対象記憶デバイスグループのRAIDタイプである。記憶デバイスグループRAIDタイプ2302に格納される情報の内容は、論理ボリュームRAIDタイプ2010を説明したときに述べたものと同じである。実ページ数2303と空き実ページ数2304はそれぞれ、管理対象記憶デバイスグループが有する総実ページ数と、空き実ページの数を示す。
続いて空きページ管理情報ポインタ2200について説明する。空きページ管理情報ポインタ2200は、記憶デバイスグループ280ごとに設けられる情報である。図11は、空きページ管理情報ポインタ2200によって管理される空き実ページの集合を表している。この構造を、空きページ管理情報キュー2201と呼ぶ。また、実ページ情報2100のうち、空き実ページに対応した実ページ情報2100を空き実ページ情報2100と呼ぶ。空きページ管理情報ポインタ2200は、先頭の空き実ページ情報2100のアドレスをさす。次に、先頭の実ページ情報2100の中の空きページポインタ2103が次の空き実ページ情報2100を指す。図11では、最後の空き実ページ情報2100の空きページポインタ2103は、空きページ管理情報ポインタ2200を指し示しているが、NULLでもよい。
SDS#x(300)は、仮想ボリューム上の領域のうち、実ページが割り当てられていない仮想ページに対する書き込み要求を受け付けると、RAID構成がその仮想ボリュームの論理ボリュームRAIDタイプ2010と同一の記憶デバイスグループ280の中のいずれかの記憶デバイスグループ280を選択する。選択可能な記憶デバイスグループ280が複数ある場合、SDS#x(300)はたとえば、空き実ページ数の最も多い記憶デバイスグループ280を選択し、その記憶デバイスグループ280の空きページ管理情報キュー2201から空き実ページを探し、仮想ページに割り当てる。
SDS#x(300)の動作は、SDS#x(300)内のプロセッサ200が、主記憶210に格納されたストレージ制御プログラム130を実行することで主に実現される。ストレージ制御プログラム130は複数のプログラムモジュール(以下では「モジュール」と略記する)を含んでいる。図12は、ストレージ制御プログラム130が有するモジュールのうち、本実施例の説明に関係する各モジュールを示したものである。本実施例に関するモジュールは、リード処理実行部4000、ライト処理実行部4100、コピー処理スケジュール部4200、コピー処理実行部4300である。
図13は、SDS移行処理のフローを示す図である。
ステップ9001:管理プログラム150が、移行指示を管理サーバ140から受信する。
ステップ9002:管理プログラム150が、移行指示で指定されているプログラムIDをキーに、SDS#y用(移行元SDS用)のSDSクライアントプログラム260yを特定する。
ステップ9003:管理プログラム150が、S9002で特定されたSDSクライアントプログラム260yが、SDS#x(300)にインストール済か否かを判断する。
ステップ9004:ステップ9003の判断結果が偽の場合、管理プログラム150が、インストールプログラム250を呼び出すことにより、S9002で特定されたSDSクライアントプログラム260yをSDS#x(300)にインストールする。
ステップ9005:ステップ9003の判断結果が真の場合、又はステップ9004の後、管理プログラム150が、第2SDS ID2008がSDS#x(300)の識別子と等しいかを判断する。
ステップ9006:ステップ9003の判断結果が偽の場合、コピー先(移行先)が、SDS#x(300)とは別のSDS(例えば、SDS#x(300)に接続されSDS#x(300)に記憶空間を提供する外部接続されたストレージ)である。管理プログラム150が、当該別のSDS用のSDSクライアントプログラムを特定する。
ステップ9007:管理プログラム150が、S9006で特定されたSDSクライアントプログラムが、当該別のSDSにインストール済か否かを判断する。
ステップ9008:ステップ9007の判断結果が偽の場合、管理プログラム150が、インストールプログラム250を呼び出すことにより、S9006で特定されたSDSクライアントプログラムを当該別のSDSにインストールする。
ステップ9009:ステップ9005の判断結果が真の場合、ステップ9007の判断結果が真の場合、又はステップ9008の後、管理プログラム150が、仮想ボリューム(仮想的な論理ボリューム)LV0をSDSクライアントプログラム260y-1に作成させる。
ステップ9010:管理プログラム150が、記憶空間280-1から記憶空間280-0へのボリュームLV0を経由したデータコピーを行う。
図14及び図15は、リード処理実行部4000の処理フローを示す図である。
リード処理実行部4000は、SDS#x(300)がAPサーバ105からリード要求を受け付けたときに実行される。なお、本実施例では説明が複雑になることを避けるために、APサーバ105から受領したリード要求で指定されているリード対象領域は、1つの仮想ページ内に収まっている例を説明する。
ステップ5000:リード処理実行部4000は、リード要求で指定されている、リード対象論理ボリュームの論理ボリューム情報2000を参照し、仮想化フラグ2003がオンかを確認する。仮想化フラグ2003がオンであれば、次にステップ5008(図15)が行われ、オフの場合にはリード処理実行部4000は次にステップ5001を実行する。
ステップ5001:リード処理実行部4000は、受け取ったリード要求で指定されたリード対象アドレスから、リード対象アドレスを含む仮想ページの仮想ページ#と仮想ページ内の相対アドレスを計算する。
ステップ5002:当該ステップではリード処理実行部4000は、リード対象となった仮想ページに割り当てた実ページに対応する実ページ情報2100を、論理ボリューム情報2000の実ページポインタ2012から獲得する。
ステップ5003:リード処理実行部4000は、リード対象の実ページが存在する記憶デバイスグループ280と、その記憶デバイスグループ280のアドレスを特定する。これらは、ステップ5002で獲得した実ページ情報2100の記憶デバイスグループ2101、実ページアドレス2102を参照することで得られる。
ステップ5004:リード処理実行部4000は、ステップ5001で得た仮想ページ内の相対アドレスと記憶デバイスグループRAIDタイプ2302から、当該要求のアクセス対象となる実ページ内の相対アドレスを計算する。そしてリード処理実行部4000は、計算した実ページ内相対アドレス、記憶デバイスグループRAIDタイプ2302と記憶デバイスポインタ2305とから、リード対象の記憶デバイス220を特定するとともに、その記憶デバイス220のリード先アドレスを特定する。
ステップ5005:リード処理実行部4000は、ステップ5004で特定した記憶デバイス220に対し、リード要求を発行する。
ステップ5006:リード処理実行部4000は、記憶デバイス220からデータが返送されてくるまで待機する。
ステップ5007:リード処理実行部4000は、記憶デバイス220から受け取ったデータを、APサーバ105に送り、処理を完了する。
ステップ5008:リード処理実行部4000は、コピー中フラグ2006が、オンかをチェックする。オンであれば、次にステップ5010が実行される。
ステップ5009:コピー中フラグ2006がオフの場合、SDS ID2004及びボリュームID2005で特定される、SDS100のボリュームと、APサーバ105から受け取ったリード対象アドレスとについて、データコピーが未完了である。この場合、リード処理実行部4000は、リード対象アドレスに対応した空間アドレスとして、第2のアドレスマップから第1の空間アドレスを特定し、第1の空間アドレスを指定した読出し指示をSDSクライアントプログラム260y-1に出す。この後リード処理実行部4000は、データが送られてくるまで待機し(ステップ5006)、その後ステップ5007を実行し、処理を終了する。すなわち、SDSクライアントプログラム260y-1は、当該第1の空間アドレスを指定した読出し要求をSDS#y(301)に送信することにより、読出し対象のデータを取得し、当該読出し対象のデータが、SDSクライアントプログラム260y-1からリード処理実行部4000に返る。リード処理実行部4000は、受け取ったデータを、APサーバ105に送り、処理を完了する。
ステップ5010:コピー中フラグ2006がオンの場合、リード処理実行部4000はAPサーバ105から受領したリード要求で指定されたアドレスがコピーポインタ2007より大きいかを判定し、大きい場合にはリード処理実行部4000はステップ5009を実行する。ステップ5009が実行された後の処理は、上で説明したとおりであるため、ここでの説明は略す。
ステップ5011:APサーバ105から受領したリード要求で指定されたアドレスがコピーポインタ2007と等しい場合、リード対象領域がコピー中であることを意味する。そのためリード処理実行部4000は、リード対象論理ボリュームの待ちフラグ2011をオン(1)にして、コピー処理の完了を待つ。コピー処理が完了した後、リード処理実行部4000は再びステップ5010を実行する。
ステップ5012:APサーバ105から受領したリード要求で指定されたアドレスがコピーポインタ2007より小さい場合、リード処理実行部4000は、第2SDS ID2008がSDS#x(300)の識別子と等しいかを判別する。等しい場合、リード処理実行部4000はステップ5001を実行する。
ステップ5013:第2SDS ID2008が、SDS#x(300)の識別子と等しくない場合、リード処理実行部4000は第2SDS ID2008,第2ボリュームID2009で特定される、SDS100のボリュームに対して、リード要求をネットワーク120経由で発行する。この後リード処理実行部4000は、ステップ5006、ステップ5007を実行し、処理を終了する。
図16及び図17は、ライト処理実行部4100の処理フローを示す図である。
ライト処理実行部4100は、APサーバ105から、SDS#x(300)がライト要求を受け付けたときに実行される。なお、本実施例では説明が複雑になることを避けるために、APサーバ105から受領したライト要求で指定されているライト対象領域は、1つの仮想ページ内に収まっている例を説明する。
ステップ6000:ライト処理実行部4100は、ライト要求で指定されている、ライト対象論理ボリュームの論理ボリューム情報2000を参照し、仮想化フラグ2003がオンかを確認する。仮想化フラグ2003がオンであれば、次にステップ6009が行われ、オフの場合にはライト処理実行部4100は次にステップ6001を実行する。
ステップ6001:ライト処理実行部4100は、受け取ったライト要求で指定されたライト対象とするアドレスから、対応する仮想ページとアクセスする仮想ページ内の相対アドレスを計算する。
ステップ6002:当該ステップではライト処理実行部4100は、ライト対象となった仮想ページに、実ページが割り当てられているかをチェックする。仮想ページに実ページが割り当てられていない場合、ステップ6015が実行されるが、割り当てられている場合にはステップ6015はスキップされる。
ステップ6015:ここでは、ライト対象の仮想ページに実ページが割り当てられる。仮想ページへの実ページの割り当ては、以下のようにして行われる。ライト処理実行部4100は論理ボリューム情報2000の論理ボリュームRAIDタイプ2010、記憶デバイスグループ情報2300の、記憶デバイスグループRAIDタイプ2302、空き実ページ数2304等を参照して、どの記憶デバイスグループ280の実ページを割り当てるか選択する。続いて、ライト処理実行部4100は選択された記憶デバイスグループ280の空きページ管理情報キュー2201を参照して、ライト対象の仮想ページの実ページポインタ2012が、空きページ管理情報キュー2201の先頭に位置する空き実ページ情報2100(空きページ管理情報ポインタ2200で指し示されている空き実ページ情報2100)を指し示すようにする。
またライト処理実行部4100は、空きページ管理情報ポインタ2200が空きページ管理情報キュー2201内の2番目の実ページ情報2100(仮想ページに割り当てた実ページの実ページ情報2100の中の空きページポインタ2103が指し示す実ページ情報2100)を示すように、空きページ管理情報ポインタ2200を更新し、さらに、仮想ページに割り当てた実ページの実ページ情報2100の中の空きページポインタ2103をNULLに変更する。また、当該実ページに対応する記憶デバイスグループ情報2300の空き実ページ数2304の数を減らす。仮想ページへの実ページの割り当てが行われた後、ステップ6003が行われる。
なお、本実施例では、仮想ページへの実ページの割り当てはSDS100がライト要求を受け付けたときに実施される例を説明したが、この割り当て処理は必ずしもライト要求を受け付けた時に実施されなくてもよい。この割り当て処理は、SDS100が記憶デバイス220へデータを格納する時までに実行されればよい。
ステップ6003:ライト処理実行部4100はライト対象仮想ページに割り当てられている実ページの実ページ情報2100を、論理ボリューム情報2000の実ページポインタ2012を参照することにより獲得する。
ステップ6004:ライト処理実行部4100は、獲得した実ページ情報2100の記憶デバイスグループ2101、実ページアドレス2102から、ライト対象の実ページが存在する記憶デバイスグループ280とその記憶デバイスグループ280上のアドレスを特定する。これはステップ5003と同様の処理である。
ステップ6005:ライト処理実行部4100はステップ6001で得た仮想ページ内の相対アドレスと記憶デバイスグループRAIDタイプ2302から、当該要求のアクセス対象となる実ページ内の相対アドレスを計算する。計算した実ページ内相対アドレス、記憶デバイスグループRAIDタイプ2302と記憶デバイスポインタ2305とから、ライト先の記憶デバイス220及びその記憶デバイス220上のライト先アドレスを決定する。ライト処理実行部4100はまた、記憶デバイスグループRAIDタイプ2302を参照して、公知の方法で、必要な冗長データを生成し、冗長データを格納する記憶デバイス220とそのアドレスを決定する。
ステップ6006:ライト処理実行部4100はステップ6005で決定した記憶デバイス220のアドレスを用いて、データの格納を指示するライト要求を作成して記憶デバイス220に発行する。またライト処理実行部4100は、冗長データの格納先の記憶デバイス220に対してもライト要求を発行して、冗長データの書き込みも行う。
ステップ6007:ライト要求の発行後、ライト処理実行部4100は記憶デバイス220から応答が返却されるまで待機する。
ステップ6008:ライト処理実行部4100はAPサーバ105に、完了報告を送る。
ステップ6009:ライト処理実行部4100は、コピー中フラグ2006がオンかチェックする。オンであれば、次にステップ6011が行われる。
ステップ6010:コピー中フラグ2006がオフの場合、ライト処理実行部4100はSDS ID2004,ボリュームID2005で特定される、SDS100のボリュームに対して、受け取った相対アドレスと長さを指定して、ライト要求を、ネットワーク120経由で発行する。この後ライト処理実行部4100は、ステップ6007、ステップ6008を実行し、処理を終了する。
ステップ6011:コピー中フラグ2006がオンの場合、ライト処理実行部4100はAPサーバ105から受領したライト要求で指定されたアドレスがコピーポインタ2007より、大きいかを判定し、大きい場合、次にステップ6010を実行する。ステップ6010の後は、上で述べたとおり、ライト処理実行部4100は、ステップ6007、ステップ6008を実行し、処理を終了する。
ステップ6012:APサーバ105から受領したライト要求で指定されたアドレスがコピーポインタ2007と等しい場合、ライト対象領域がコピー中であることを意味する。そのためライト処理実行部4100は待ちフラグ2011をオンにして、ライト対象領域のコピー処理が完了するまで待機する。コピー処理が完了した後、ライト処理実行部4100は再びステップ6011を実行する。
ステップ6013:APサーバ105から受領したライト要求で指定されたアドレスがコピーポインタ2007より小さい場合、ライト処理実行部4100は第2SDS ID2008が、SDS#x(300)の識別子と等しいか判別する。等しい場合、ライト処理実行部4100はステップ6001を実行する。
ステップ6014:第2SDS ID2008が、SDS#x(300)の識別子と等しくない場合、ライト処理実行部4100は第2SDS ID2008,第2ボリュームID2009で特定されるSDS100のボリュームに対してライト要求をネットワーク120経由で発行する。この後ライト処理実行部4100は、ステップ6007、ステップ6008を実行し、処理を終了する。
本実施例では、ライト処理実行部4100は記憶デバイス220へデータを書き込んだ後、APサーバ105に完了報告を返却する例を説明した。ただしライト処理実行部4100は、キャッシュ領域240へデータを書き込んだ時点で、APサーバ105に完了報告を返し、その後記憶デバイス220へデータを書き込んでもよい。
図18は、コピー処理スケジュール部4200の処理フローを示す図である。
コピー処理スケジュール部4200は、管理プログラム150から指定されたSDS100のボリュームのデータを、別のSDS100にコピーする処理をスケジュールする。データのコピー先は、SDS#x(300)の記憶デバイス220でもよいし、あるいは指定されたSDS100以外のSDS100に定義されたボリュームでもよい。
ステップ7000:コピー処理スケジュール部4200は、論理ボリューム情報2000の中で、仮想化フラグ2003がオンで、かつ、SDS ID2004が指定されたSDS100と一致するものを見つける。見つからなかった場合、すべての論理ボリュームを見つけたことになるので、コピー処理が完了するのをまつため、ステップ7003へジャンプする。
ステップ7001:ステップ7000において条件に該当する論理ボリュームが見つかった場合、コピー処理スケジュール部4200は見つかった論理ボリュームについてコピー処理を行うための準備を行う。具体的にはコピー処理スケジュール部4200は、見つかった論理ボリュームのコピー中フラグ2006をオンにする。続いてコピー処理スケジュール部4200は、データのコピー先SDS100を決定する。コピー先の決定方法には任意の方法が採用されてよい。たとえば空き領域の最も多いSDS100がコピー先に選択されるとよい。
SDS#x(300)以外のSDS100にデータをコピー(退避)する場合には、コピー処理スケジュール部4200は、ステップ7000で見つけた論理ボリュームの論理ボリューム容量2002を参照して、他のSDS100に、論理ボリューム容量2002と同サイズ(あるいはそれ以上のサイズ)のボリュームの定義を行う。またSDS#x(300)内の記憶デバイス220にデータをコピーする場合、コピー処理スケジュール部4200は見つかった論理ボリュームの論理ボリューム容量2002より多くの空き実ページが存在するかチェックする。
他SDS100内にボリュームを定義する場合、コピー処理スケジュール部4200は、ボリュームの定義先となるSDS100とネットワーク120経由で情報を交換して、ボリュームの定義処理を実行してもよい。あるいはコピー処理スケジュール部4200は、管理プログラム150にボリュームの定義を要求して、管理プログラム150がボリュームを定義するSDS100を決め、そのSDS100に指定した容量のボリュームを定義させて、そのSDS100の識別子と論理ボリュームの識別子を、SDS#x(300)に返却してもよい。
データのコピー先が、SDS#x(300)の記憶デバイス220である場合、コピー処理スケジュール部4200は第2SDS ID2008に、SDS#x(300)の識別子を設定する。一方データのコピー先が、他SDS100内のボリュームである場合、コピー処理スケジュール部4200は、コピー先ボリュームを有するSDS100の識別子を第2SDS ID2008に定義し、コピー先ボリュームの識別子を第2ボリュームID2009に設定する。さらにコピー処理スケジュール部4200は、コピーポインタ2007に初期値(0)を設定する。
ステップ7002:コピー処理スケジュール部4200はコピー処理実行部4300を起動する。この際コピー処理スケジュール部4200は、コピー処理対象となる論理ボリュームの論理ボリューム情報2000を指定する。この後、コピー処理スケジュール部4200は次の論理ボリュームを探すため、再びステップ7000を実行する。
なお、ここでコピー処理スケジュール部4200は、コピー処理実行部4300の処理が終了するまで待機する必要がなく、コピー処理実行部4300を起動した後、すぐにステップ7000に戻ってよい。具体的にはコピー処理スケジュール部4200はコピー処理実行部4300を起動する際、コピー処理実行部4300が実行されるプロセスを生成し、そのプロセスにコピー処理実行部4300を実行させ、再びコピー処理スケジュール部4200はステップ7000を実行する。
またコピー処理実行部4300の実行されるプロセスは複数生成されてもよく、複数プロセスが生成された時、それらのプロセスは並行に実行可能である。そのため、たとえば第1の論理ボリュームについてのコピー処理を行うプロセスと第2の論理ボリュームについてのコピー処理を行うプロセスとが並行実施されてもよい。
ステップ7003:コピー処理スケジュール部4200は、ステップ7000~ステップ7002で行った、全論理ボリュームのコピー処理が完了するまで待機する。
ステップ7004:コピー処理スケジュール部4200は、指定されたSDS100の論理ボリュームのコピー処理が完了したことを、管理プログラム150に報告し、処理を終了する。なお、上では、指定されたSDS100のすべてのボリュームのコピー処理がスケジュールされる例を説明したが、先に述べたとおり、コピー処理スケジュール部4200はユーザからコピー処理が必要なボリュームの識別子を受領して、コピー処理が必要なボリュームのコピー処理だけを行ってもよい。
図19は、コピー処理実行部4300の処理フローを示す図である。
コピー処理実行部4300は、コピー処理スケジュール部4200から呼び出されると(ステップ7002)、実行を開始する。コピー処理スケジュール部4200がコピー処理実行部4300を呼び出すとき、コピー処理対象の論理ボリュームを指定する。コピー処理実行部4300は、この指定された論理ボリュームについてコピー処理を実行する。
ステップ8000:コピー処理実行部4300は、指定された論理ボリュームのコピーポインタ2007、SDS ID2004とボリュームID2005を参照して、対応するSDS100に、論理ボリューム、読み出し開始アドレス、1仮想ページ分の容量を指定して、データを読み出すリード要求を発行する。なお、本実施例では、コピー処理実行部4300がコピー処理を行う際に、仮想ページ単位でコピーを行う例を説明するが、それ以外の単位でコピー処理が行われてもよい。
ステップ8001:コピー処理実行部4300は、ステップ8000でリード要求を発行したSDS100からデータが送られてくるまで待機する。
ステップ8002:コピー処理実行部4300は、第2SDS ID2008が、SDS#x(300)かをチェックし、そうでない場合、次にステップ8011を行う。第2SDS ID2008が、SDS#x(300)である場合には、次にステップ8003が行われる。
ステップ8003:コピー処理実行部4300は、コピーポインタ2007で特定されるアドレスに対応する仮想ページに、実ページを割り当てる。この処理はステップ6015と同様の処理である。
ステップ8004:ここで行われる処理は、ステップ6004,6005と同様の処理である。コピー処理実行部4300は、記憶デバイスグループRAIDタイプ2302と記憶デバイスポインタ2305とから、データライト先実ページが存在する記憶デバイス220のアドレスを特定する。またコピー処理実行部4300は記憶デバイスグループRAIDタイプ2302を参照して、公知の方法で、必要な冗長データを生成し、冗長データを格納する記憶デバイス220とそのアドレスを計算する。
ステップ8005:ここで行われる処理はステップ6006と同様の処理である。コピー処理実行部4300は、ステップ8004で特定した、データ格納先の記憶デバイス220と冗長データ格納先の記憶デバイス220に対して、データと冗長データを格納するライト要求を発行し、データと冗長データを転送する。この後コピー処理実行部4300はステップ8006を行う。
ステップ8011:第2SDS ID2008がSDS#x(300)ではない場合、コピー処理実行部4300はコピーポインタ2007、第2SDS ID2008と第2ボリュームID2009を参照して、対応するSDS100に、論理ボリューム、読み出し開始アドレス、1ページ分の容量を指定して、ライト要求を発行し、書き込むデータを送る。この後、この後コピー処理実行部4300はステップ8006を行う。
ステップ8006:コピー処理実行部4300は、記憶デバイス220(または他のSDS100)から応答が返却されるまで待機する。
ステップ8007:コピー処理実行部4300は待ちフラグ2011を参照し、待ちフラグ2011がオンなら、待ち状態の処理の待ちを開放して、待ちフラグ2011をオフにする。
ステップ8008:コピー処理実行部4300はコピーポインタ2007を1ページ分進める。
ステップ8009:コピー処理実行部4300はコピーポインタ2007と論理ボリューム容量2002を参照して、コピーポインタ2007が論理ボリュームの終端アドレスを超過したか(つまり当該論理ボリュームのコピーが完了したか)チェックする。論理ボリュームのコピーが完了していない場合、コピー処理実行部4300は再びステップ8000から処理を繰り返す。
ステップ8010:論理ボリュームのコピーが完了した場合、コピー処理実行部4300はコピー中フラグ2006をオフにする。さらにコピー処理実行部4300は、第2SDS ID2008がSDS#x(300)の識別子であれば、仮想化フラグ2003をオフにする。第2SDS ID2008がSDS#x(300)の識別子でない場合、コピー処理実行部4300は第2SDS ID2008と第2ボリュームID2009を、SDS ID2004とボリュームID2005にコピーし、処理を終了する。
コピー処理実行部4300は、上に述べた処理を行うことで、1つの論理ボリュームのデータを、別の記憶領域に移動(コピー)する。なお、コピー処理実行部4300によるコピー処理中も、リード処理実行部4000またはライト処理実行部4100は、論理ボリュームのデータリード処理またはライト処理を実行可能である。リード処理実行部4000は、特に図15に記載の処理(ステップ5008~ステップ5013)を行うように構成されているため、リード対象論理ボリュームがコピー処理実行部4300によりコピー処理中であっても、コピー処理実行部4300のコピー処理の実行完了を待たずに、データの読み出しが可能である。またライト処理実行部4100も同様に、図17に記載の処理を行うことで、コピー処理実行部4300のコピー処理の実行完了を待たずに、データの書き込みが可能である。そのため、ユーザは業務を停止することなく(たとえばAPサーバ105からの論理ボリュームへのアクセスを停止することなく)、SDS#y(301)のプログラム交換を行うことができる。
以上、本発明の実施例を説明したが、これは、本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。すなわち、本発明は、他の種々の形態でも実施する事が可能である。
上で説明した実施例では、SDS#x(300)が管理プログラム150を実行し、情報システム内の各ストレージ装置(SDS)を管理していたが、管理プログラム150は必ずしもSDS#x(300)で実行されなくてもよい。たとえば管理サーバ140が管理プログラム150を実行することで、管理サーバ140が情報システム内の各SDS100を管理するように構成されていてもよい。あるいはAPサーバ105で管理プログラム150が実行される構成でもよい。
また上で説明した実施例では、用途ごとにサーバコンピュータが存在していたが(SDS100、APサーバ105、管理サーバ140)、1つのサーバコンピュータが複数の用途を兼ねるように構成されていてもよい。たとえば上で述べた実施例で管理サーバ140が実行していたクライアントプログラムが、SDS100で実行されるように構成されていてもよい。この場合ユーザは、SDS100に備えられている入出力デバイス(キーボードやディスプレイ)を用いて、管理操作を行う。
あるいは情報システムは、アプリケーションプログラムとストレージ制御プログラム130が、同一のサーバコンピュータで実行される構成であってもよい。その場合、このサーバコンピュータは上で述べた実施例におけるAPサーバとSDSの両方の機能を果たす。
またこの場合、サーバコンピュータ上に複数の仮想計算機を定義して、仮想計算機上でアプリケーションプログラムとストレージ制御プログラムが実行される構成でもよい。たとえばサーバコンピュータ上でハイパーバイザを実行することで、アプリケーションプログラムを実行する仮想計算機と、ストレージ制御プログラムを実行する仮想計算機を定義する。そしてストレージ制御プログラムを実行する仮想計算機が、アプリケーションプログラムを実行する仮想計算機(あるいはこれ以外のサーバコンピュータ等)にボリュームを提供するように構成されるとよい。ただし各プログラムが必ずしも仮想計算機上で実行されなければならないわけではない。たとえば上で説明したストレージ制御プログラムと同等の処理を行うプログラムコードをハイパーバイザに含め、サーバコンピュータはこのハイパーバイザを実行することで、アプリケーションプログラムを実行する仮想計算機にボリュームを提供するよう構成されていてもよい。
また、上で説明した処理の一部が人手で行われてもよい。たとえば図17で説明した処理では、管理プログラム150がコピー処理スケジュール部4200に指示して、ステップ10030を実行させ、その後プログラムの交換対象であるSDS100(SDS#y(301))にプログラム交換を指示していた。この処理の一部をユーザが行ってもよい。すなわち、ユーザはステップ10030(SDS#y(301)のデータ移動)の終了が確認できた後、SDS#y(301)のプログラムの交換を行ってもよい。
この時のプログラムの交換は、ユーザは管理サーバ140からSDS#x(300)の管理プログラム150に、SDS#y(301)へのプログラムインストールを指示することで、管理プログラム150からSDS#y(301)のインストールプログラム250にプログラム交換を行わせてもよいし、管理サーバ140から直接SDS#y(301)のインストールプログラム250に対して、プログラムのインストールを指示してもよい。或いはSDS#y(301)がキーボードやディスプレイ等の入出力デバイスを備えている場合は、ユーザはそれを用いてSDS#y(301)にプログラムのインストールを指示してもよい。
また、上で説明した実施例では、SDSが受け付けるI/O要求(コマンド)は、いわゆるSCSIコマンドである例が説明された。つまりSDSが、いわゆるブロックレベルのアクセス要求を受け付けるストレージ装置である例を説明した。しかし、SDSがそれ以外のタイプのストレージ装置であってもよい。たとえばファイルレベルやオブジェクトレベルのアクセス要求を受け付けるストレージ装置(いわゆるNetwork Attached Storage(NAS)やObject-based Storage Device(OSD))などでもよい。
また、上で説明した実施例では、コピー処理実行部4300によって論理ボリュームのデータがSDS#y(301)以外の記憶領域に移動される際、移動先の記憶領域は、SDS#x(300)の記憶デバイスか、あるいは他のSDS100が有するボリュームの何れかである例を説明した。ただし、移動先の記憶領域に、SDS#x(300)の記憶デバイスと、他のSDS100のボリュームの両方が用いられてもよい。
たとえば図3に示された、SDS#x(300)、SDS#y(301-1)、SDS#y(301-2)において、SDS#y(301-1)のプログラム交換が行われる時、LV2に格納されているデータは、SDS#y(301-1)以外のSDSに移動される必要がある(なお、仮想化機能によりLV2はLV1にマップされている)。この場合SDS#x(300)は、LV2に格納されているデータのうち、一部のデータ、たとえばLV2の先頭から半分のデータをSDS#x(300)の記憶デバイス220に移動し、残りのデータをたとえばSDS#y(301-2)のボリュームLV3に移動してもよい。もちろんこの場合、SDS#x(300)は、論理ボリュームの領域ごと(たとえば仮想ページごと)に、異なるボリュームの記憶領域(または記憶デバイス220の記憶領域)を割り当てることが可能なように構成されている必要がある。
また、例えば、管理プログラム150が設けられることに代えて、管理プログラム150の機能がストレージ制御プログラム130に含まれていてもよい。
また、上で説明した処理をCPUに実行させる各プログラムは、計算機が読み取り可能な記憶メディアに格納された状態で提供され、プログラムを実行する各装置にインストールされてもよい。計算機が読み取り可能な記憶メディアとは、非一時的なコンピュータ可読媒体で、たとえばICカード、SDカード、DVD等の不揮発性記憶媒体である。あるいは上で説明した処理をCPUに実行させる各プログラムは、プログラム配布サーバからネットワーク経由で提供されてもよい。
また、上で説明した実施例では、1つのSDSは、単一の計算機(例えばサーバコンピュータ)であるが、1つのSDSが、同一のストレージ制御プログラム130をそれぞれ実行する複数の計算機でもよい。単一の計算機が複数のSDSの各々の一部でもよい。また、「SDS」は、データを格納する機能を備えたソフトウェアディファインドの装置全般(例えば、SDDC(Software-defined Datacenter))をカバーする意味であってもよい。また、計算機が、SDSの他に、SDSに対してI/O要求を発行するホストシステムとしての1以上の仮想的な計算機を実行してもよい。また、SDSが、ストレージ機能に加えて、ホスト機能(ストレージ機能に対してI/O要求を発行するホストシステムとしての機能)を有してもよい。
また、「記憶デバイスグループ」は、冗長構成グループの一例でよい。冗長構成の例としては、Erasure Coding、RAIN(Redundant Array of Independent Nodes)、ノード間ミラーリング、RAIDなどがあり、いずれの冗長構成が採用されてもよい。従って、「記憶デバイス」は、NVRAM(Non-Volatile RAM)のような記憶媒体でもよいし、スケールアウト型の記憶システムの構成要素としてのノード(例えば汎用計算機)でもよい。
なお、以上の説明を以下のように総括することができる。以下の説明は、上述の説明に無い事項を含んでいてもよい。
プロセッサと、記憶デバイスとを備えたコンピュータを複数備え、クライアントプログラムからの要求に基づいて記憶デバイスへのデータの入出力を行う情報システム(例えばSDS#x(300))において、移動元情報システム(例えばSDS#y(301))に記憶されたデータを、自情報システム(例えばSDS#x(300))の記憶デバイスに移動させる場合に、プロセッサは、データの移行元となる移動元情報システムにかかるクライアントプログラム(例えばSDSクライアントプログラム260y)に、移動元情報システムの移動対象のデータへのアクセス手段を作成させる指示を送信し、移動元情報システムのクライアントプログラムが作成したアクセス手段を用いて、移動対象のデータを前記情報システムの記憶デバイスに記憶する。
移動元情報システムにかかるクライトアントプログラムは、情報システムのコンピュータにインストールされたプログラム(例えばSDSクライアントプログラム260y-1)でよい。
移行元情報システムがそのクライアントプログラムとの通信に用いるプロトコルと、自情報システムが通信に用いるプロトコルとは、異なっており、自情報システムと移行元クライアントプログラムとが通信を行うプロトコルは、規格化されたプロトコルでよい。
アクセス手段の作成は、移行元情報システム内のデータにアクセスするために、移動元情報システムの外に作成されたボリューム(例えばボリュームLV0)でよい。
このような情報システムは、コンピュータにインストールされ実行される一つ以上のプログラムであるプログラム群が実行されることにより構築されてもよい。プログラム群は、上述したストレージ制御プログラム130のようにストレージ機能を発揮するプログラム(例えば記憶デバイスに対する入出力を行うプログラム)でもよいし、当該プログラムに加えて、上述した管理プログラム150のようにクライアントプログラムのインストール等の制御を行うプログラムを含んでもよい。