(57)【要約】【課題】データの入出力のために移動元情報システムにかかるクライアントプログラムが存在することがあり、情報システム間でデータを移行することができないことがある。【解決手段】プロセッサと、記憶デバイスとを備えたコンピュータを複数備え、クライアントプログラムからの要求に基づいて前記記憶デバイスへのデータの入出力を行う情報システムにおいて、移動元情報システムに記憶されたデータを、自情報システムの記憶デバイスに移動させる場合に、プロセッサは、データの移行元となる移動元情報システムにかかるクライアントプログラムに、移動元情報システムの移動対象のデータへのアクセス手段を作成させる指示を送信し、移動元情報システムのクライアントプログラムが作成したアクセス手段を用いて、移動対象のデータを情報システムの記憶デバイスに記憶する。【選択図】図３
2020027433.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、記憶デバイスとを備えたコンピュータを複数備え、クライアントプログラムからの要求に基づいて前記記憶デバイスへのデータの入出力を行う情報システムにおいて、
移動元情報システムに記憶されたデータを、自情報システムの記憶デバイスに移動させる場合に、
前記プロセッサは、
前記データの移行元となる移動元情報システムにかかるクライアントプログラムに、前記移動元情報システムの前記移動対象のデータへのアクセス手段を作成させる指示を送信し、
前記移動元情報システムのクライアントプログラムが作成したアクセス手段を用いて、前記移動対象のデータを前記情報システムの記憶デバイスに記憶する
こと特徴とする情報システム。
【請求項２】
請求項１において、
前記移動元情報システムにかかるクライトアントプログラムは、前記情報システムのコンピュータにインストールされたプログラムである
ことを特徴とする情報システム。
【請求項３】
請求項１において、
前記移行元情報システムがそのクライアントプログラムとの通信に用いるプロトコルと、前記自情報システムが通信に用いるプロトコルとは、異なっており、
前記自情報システムと前記移行元クライアントプログラムとが通信を行うプロトコルは、規格化されたプロトコルである
ことを特徴とする情報システム。
【請求項４】
請求項１において、
前記アクセス手段の作成は、前記移行元情報システム内のデータにアクセスするために、前記移動元情報システムの外に作成されたボリュームである
ことを特徴とする情報システム。
【請求項５】
クライアントプログラムからの要求に基づいて情報システムの記憶デバイスへのデータの入出力を行う情報処理方法において、
移動元情報システムに記憶されたデータを、情報システムの記憶デバイスに移動させる場合に、
前記データの移行元となる移動元情報システムにかかるクライアントプログラムに、前記移動元情報システムの前記移動対象のデータへのアクセス手段を作成させる指示を送信し、
前記移動元情報システムのクライアントプログラムが作成したアクセス手段を用いて、前記移動対象のデータを前記情報システムの記憶デバイスに記憶する
こと特徴とする情報処理方法。
【請求項６】
クライアントプログラムからの要求に基づいて情報システムの記憶デバイスへのデータの入出力を行うコンピュータであって前記情報システムにおけるコンピュータに、
移動元情報システムに記憶されたデータを、情報システムの記憶デバイスに移動させる場合に、
前記データの移行元となる移動元情報システムにかかるクライアントプログラムに、前記移動元情報システムの前記移動対象のデータへのアクセス手段を作成させる指示を送信し、
前記移動元情報システムのクライアントプログラムが作成したアクセス手段を用いて、前記移動対象のデータを前記情報システムの記憶デバイスに記憶する
ことを実行させることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、情報システム及に関し、例えば、ＳＤＳ（Software Defined Storage）の少なくとも一部として動作する計算機を含む情報システムに関する。
【背景技術】
【０００２】
ストレージシステム（１以上のストレージ装置）の管理コストを削減するための技術として、ストレージシステムの仮想化技術がある。この技術は、管理方法が異なる多岐に渡るストレージシステムを、仮想化技術によって、統一的な管理を実現することで、管理コストを削減し、またストレージシステムの使い勝手を向上させる。
【０００３】
特許文献１は、ストレージシステムの仮想化技術に関する。本文献では、ホスト計算機に接続された第１のストレージシステムに、第２のストレージシステムが接続された計算機システムが開示されている。この計算機システムは、ホスト計算機に対して、第２のストレージシステムのボリュームを第１のストレージシステムのボリュームとして提供する。この構成では、ホスト計算機からは、第２のストレージシステムは隠蔽されており、ホスト計算機の読み書き要求はすべて、第１ストレージシステムに発行される。ホスト計算機から受領した読み書き要求が、第２のストレージシステムのボリュームに対するものであれば、第１のストレージシステムはその要求を、第２のストレージシステムに発行して、読み書き要求を実行させる。これにより、ストレージの管理者は実質的に第１のストレージシステムだけを管理すればよくなり、ストレージシステムの管理工数を大幅に削減できる。
【０００４】
一方、近年、ＳＤＳ（Software Defined Storage）が注目されている。ストレージ機能を有するＳＤＳ用ソフトウェア（本明細書ではこれを、「ストレージ制御プログラム」と呼ぶ）が物理的な計算機（たとえば汎用的な計算機）で実行されることにより、当該計算機がストレージ装置なる（つまり、当該計算機がＳＤＳとなる）。ベンダが、ＳＤＳとしてのストレージ装置を提供する場合、ストレージ制御プログラムをユーザに提供する。ユーザは、自身で用意した計算機にこのストレージ制御プログラムをインストールする。結果として、当該計算機がＳＤＳとなる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１０−２８３２７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＳＤＳ間でデータの移行が必要になることがある。しかし、移行元ＳＤＳによっては、データの入出力のために移動元ＳＤＳにかかるクライアントプログラムが存在することがあり、ＳＤＳ間でデータを移行することができないことがある。
【０００７】
このような課題は、ＳＤＳ以外の情報システム間でのデータ移行についてもあり得る。
【課題を解決するための手段】
【０００８】
プロセッサと、記憶デバイスとを備えたコンピュータを複数備え、クライアントプログラムからの要求に基づいて前記記憶デバイスへのデータの入出力を行う情報システムにおいて、移動元情報システムに記憶されたデータを、自情報システムの記憶デバイスに移動させる場合に、プロセッサは、データの移行元となる移動元情報システムにかかるクライアントプログラムに、移動元情報システムの移動対象のデータへのアクセス手段を作成させる指示を送信し、移動元情報システムのクライアントプログラムが作成したアクセス手段を用いて、移動対象のデータを情報システムの記憶デバイスに記憶する。
【発明の効果】
【０００９】
本発明によれば、データの入出力のために移動元ＳＤＳにかかるクライアントプログラムが存在しても情報システム間でデータを移行することが可能になる。
【図面の簡単な説明】
【００１０】
【図１】実施例における情報システムの構成を示す図である。
【図２】実施例におけるＳＤＳの構成を示す図である。
【図３】アクセスプロトコルの異なるＳＤＳ間のデータ移行の流れの概要を説明する図である。
【図４】本実施例におけるＩ／Ｏ要求のフォーマットの例を示す図である。
【図５】本実施例におけるThin Provisioning機能の概念を説明する図である。
【図６】管理情報に含まれる情報を示す図である。
【図７】論理ボリューム情報の形式を示す図である。
【図８】実ページ情報の形式を示す図である。
【図９】記憶装置情報の形式を示す図である。
【図１０】記憶装置グループ情報の形式を示す図である。
【図１１】空きページ管理情報キューの構造を表した図である。
【図１２】ストレージ制御プログラムに含まれるプログラムモジュールを示す図である。
【図１３】ＳＤＳ移行処理のフローを示す図である。
【図１４】リード処理実行部の処理フローの一部を示す図である。
【図１５】リード処理実行部の処理フローの残りを示す図である。
【図１６】ライト処理実行部の処理フローの一部を示す図である。
【図１７】ライト処理実行部の処理フローの残りを示す図である。
【図１８】コピー処理スケジュール部の処理フローを示す図である。
【図１９】コピー処理実行部の処理フローを示す図である。
【発明を実施するための形態】
【００１１】
以下、本発明の実施例について、図面を用いて説明する。なお、以下に説明する実施例は特許請求の範囲に係る発明を限定するものではなく、また実施例の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１２】
実施例の説明に入る前に、実施例で用いられる各種用語について説明する。
【００１３】
以下で説明する実施例においては、特に断りのない限り、物理的なストレージ装置（つまり専用のハードウェアで構成されたストレージ装置）を、「在来型ストレージ装置」と呼ぶ。また、以下に説明する実施例においては、ストレージ制御プログラムがインストールされた物理的な計算機（たとえば汎用的な計算機）を「ＳＤＳ」と呼ぶ。
【００１４】
以下で説明する実施例においては、「ストレージ装置」は、在来型ストレージ装置とＳＤＳの両方を意味する語として用いられる。たとえば在来型ストレージ装置とＳＤＳが共通に備える機能や特徴を説明する場合、「ストレージ装置」の語が用いられる。
【００１５】
「ボリューム」とは、ストレージ装置や記憶デバイス等のターゲットデバイスが、ホスト計算機等のイニシエータに提供する記憶空間のことを意味する。イニシエータがボリューム上の領域に対するＩ／Ｏ（Input/Output）要求、たとえばリード要求を発行すると、ボリュームを提供しているターゲットデバイスは、その領域に対応付けられているターゲットデバイス上の領域からデータを読み出して、イニシエータに返送する。
【００１６】
ストレージ装置の中には、ボリュームとして、いわゆるThin Provisioning技術により形成される仮想的なボリュームを、イニシエータに提供できるものがある。以下で説明する実施例では、仮想的なボリュームをイニシエータに提供する機能を「Thin Provisioning機能」と呼ぶ。
【００１７】
仮想的なボリュームは、その初期状態（定義された直後）では、記憶空間上の領域に記憶デバイスが対応付けられていない。イニシエータが記憶空間上の領域にデータ書き込み要求を発行した時点で、ストレージ装置はその領域に対応付けられる記憶デバイスを動的に決定することができる。以下で説明される実施例におけるＳＤＳは、仮想的なボリュームをイニシエータに提供できる。
【００１８】
「ボリュームの仮想化機能」（または単に「仮想化機能」と呼ばれることもある）とは、他のストレージ装置が有するボリュームを、自己のボリュームとしてイニシエータデバイスに提供する機能である。ボリュームの仮想化機能は、たとえば専用の装置（たとえば仮想化アプライアンスと呼ばれる）に実装されて提供される。あるいはストレージ装置がボリュームの仮想化機能を備えていることもある。
【００１９】
図１は、本実施例における情報システムの構成を示す。
【００２０】
情報システムは、複数のサーバコンピュータ（１００，１０５，１４０）を有し、これらのサーバコンピュータ（１００，１０５，１４０）がネットワーク１２０で相互接続されて構成される。サーバコンピュータ（１００，１０５，１４０）はいずれも、パーソナルコンピュータ等の汎用的な計算機でよく、基本的なハードウェア構成はいずれも同じでよい。ただしそれぞれのサーバコンピュータ（１００，１０５，１４０）のハードウェア構成は、必ずしも完全に同一でなくてもよい。たとえばサーバコンピュータ（１００，１０５，１４０）の有するプロセッサ（たとえばＣＰＵ（Central Processing Unit））の数やメモリ容量等が異なっていてもよい。
【００２１】
複数のサーバコンピュータ（１００，１０５，１４０）のうち、サーバコンピュータ１０５は、ユーザが使用するアプリケーションプログラム（ＡＰ）が実行される計算機で、以下ではこれを「ＡＰサーバ１０５」と呼ぶ。アプリケーションプログラムはたとえば、データベース管理システム（ＤＢＭＳ）あるいは表計算ソフトウェアやワードプロセッサ等のプログラムでよい。ＡＰサーバ１０５は、ホストシステムの一例である。
【００２２】
一方、サーバコンピュータ１００は、ＡＰサーバ１０５が使用するデータを格納するためのストレージ装置として動作する計算機である。サーバコンピュータ１００のプロセッサでストレージ制御プログラム１３０が実行されることにより、サーバコンピュータ１００はストレージ装置としての動作を行う。そのため、以下ではサーバコンピュータ１００のことを、「ＳＤＳ１００」と呼ぶ。
【００２３】
ＳＤＳ１００は、１以上のボリュームを定義することができ、定義されたボリュームはＡＰサーバ１０５等のイニシエータに提供される。ＡＰサーバ１０５は、ボリューム（を提供しているＳＤＳ１００）に対するライト要求を発行することで、アプリケーションプログラムによって生成されたデータ（たとえばデータベーステーブルなど）を、ボリュームに格納し、またボリューム（を提供しているＳＤＳ１００）に対するリード要求を発行することで、データをボリュームから読み出す。
【００２４】
サーバコンピュータ１４０は、情報システムの使用者または管理者（以下では単に、「ユーザ」と呼ぶ）が情報システムの管理操作を行うために使用する計算機であり、以下ではこれを「管理サーバ１４０」と呼ぶ。管理サーバ１４０は、ユーザが情報システムの管理操作を行う時に使用する、キーボードやマウスなどの入力デバイス、ディスプレイ等の出力デバイスを有する。もちろん管理サーバ１４０以外のサーバコンピュータ（ＳＤＳ１００、ＡＰサーバ１０５）も入力デバイスと出力デバイスを備えていてもよい。
【００２５】
ＳＤＳ１００、ＡＰサーバ１０５及び管理サーバ１４０の少なくとも１つは、クラウド基盤のような計算機リソースプール（たとえば、インタフェースデバイス、メモリ及びプロセッサ）に基づき提供される仮想的な装置でもよい。ＳＤＳ１００、ＡＰサーバ１０５、管理サーバ１４０はそれぞれ、情報システム内に複数存在していてもよい。ただし本実施例では、ＡＰサーバ１０５、管理サーバ１４０はそれぞれ情報システム内に１台存在し、ＳＤＳ１００は２台以上情報システム内に存在する例を説明する。また、本実施例では、ＳＤＳ１００間でデータの移行が行われるが、移行元のＳＤＳ１００と移行先のＳＤＳ１００で実行されるストレージ制御プログラム１３０は異なり、このため、移行元のＳＤＳ１００と移行先のＳＤＳ１００のアクセスプロトコル（典型的には、Ｉ／Ｏ要求の送信やその応答の受信の際のプロトコル）が異なる。
【００２６】
ネットワーク１２０にはたとえば、イーサネット（登録商標）やファイバチャネル等の伝送媒体が用いられる。ネットワーク１２０は、ＡＰサーバ１０５がＳＤＳ１００に対してデータを読み書きする際に用いられるとともに、管理サーバ１４０とＳＤＳ１００（またはＡＰサーバ１０５）との間での管理操作コマンド（または各種管理情報）のやり取りにも用いられる。ただし別の例として、ＡＰサーバ１０５とＳＤＳ１００との間で読み書きされるデータを送受信するためのネットワークと、管理サーバ１４０が管理操作コマンド等を送受信するためのネットワークの、２種類が設けられていてもよい。すなわち、ネットワーク１２０は、単一のネットワークでもよいし、複数のネットワークでもよい。
【００２７】
図２は、ＳＤＳ１００の構成を示している。
【００２８】
ＳＤＳ１００は、主記憶（メモリ）２１０、記憶デバイス２２０、ネットワークインタフェースコントローラ（ＮＩＣ）１９０、ディスクインタフェース（ＤＩＳＫ  Ｉ／Ｆ）１８０、及び、それらに接続されたプロセッサ（ＣＰＵ）２００を含む。プロセッサ２００、メモリ、記憶デバイス２２０、ＮＩＣ１９０及びＤＩＳＫ  Ｉ／Ｆ１８０の少なくとも１つのコンポーネントは、１つでも複数でもよい。
【００２９】
プロセッサ２００は、主記憶２１０にロードされた各プログラムを実行する。主記憶２１０は、ＤＲＡＭ（Dynamic Random Access Memory）等の揮発性メモリであり、主記憶２１０には、ストレージ制御プログラム１３０、管理プログラム１５０、インストールプログラム２５０、そしてストレージ制御プログラム１３０が利用する管理情報２３０が格納される。
【００３０】
一方、記憶デバイス２２０は、磁気ディスクまたはフラッシュメモリ等の、不揮発性記憶媒体を有する記憶デバイスで、ＡＰサーバ１０５から書き込まれたデータを格納するために用いられる。なお、上で述べたストレージ制御プログラム１３０や管理情報２３０などは、ＳＤＳ１００が稼働していない時（電源ＯＦＦの状態の時）には記憶デバイス２２０に格納されており、ＳＤＳ１００が起動された時に、記憶デバイス２２０から主記憶２１０にロードされるとよい。
【００３１】
ＤＩＳＫ  Ｉ／Ｆ１８０は、プロセッサ２００と記憶デバイス２２０との間に設けられるインタフェースデバイスである。一方ＮＩＣ１９０は、ＳＤＳ１００をネットワーク１２０に接続するためのインタフェースデバイスで、ＳＤＳ１００とネットワーク１２０間に設けられる伝送線（ネットワークケーブル）を接続するためのポートも有する。そのため以下では、ＮＩＣ１９０を「ポート１９０」と表記することもある。なお、ポート１９０経由の通信は、伝送線経由の通信に代えて、無線通信でもよい。
【００３２】
続いて主記憶２１０上に格納されているプログラムの役割を概説する。なお、以後の説明では、サーバコンピュータ（ＳＤＳ１００，ＡＰサーバ１０５、管理サーバ１４０等）で実行される処理について、「プログラム」を主語として説明を行う場合があるが、実際には、サーバコンピュータのプロセッサがプログラムを実行することによって、プログラムに記述された処理が行われる。ただし説明が冗長になることを防ぐため、プログラムを主語にして処理の内容を説明することがある。そしてプログラムを主語にして説明されている処理の主体は、実際にはプログラムを実行しているプロセッサであることを意味する。
【００３３】
ストレージ制御プログラム１３０は、ＳＤＳ１００（つまりサーバコンピュータ）をストレージ装置として機能させるためのプログラムである。具体的には、例えば、ＳＤＳ１００はストレージ制御プログラム１３０の働きにより、ＡＰサーバ１０５等のイニシエータに１以上のボリュームを提供したりする、イニシエータからＩ／Ｏ要求（リード要求やライト要求）を受け付けて、リード要求で指定されたアドレスのデータをイニシエータに返送する、またはライト要求で指定されたライトデータをボリュームに格納する等の処理を行ったりすることができる。なお、在来型ストレージ装置は、ボリュームを提供する以外の機能（たとえばボリュームのミラーコピーを作成する等）を有するが、ストレージ制御プログラム１３０も同様に、ボリュームを提供する以外の機能をＳＤＳ１００に実現するプログラムであってもよい。
【００３４】
またストレージ制御プログラム１３０は、ＡＰサーバ１０５から頻繁にアクセスされるデータを保持しておくための領域２４０を、主記憶２１０上に確保する。ＡＰサーバ１０５から頻繁にアクセスされるデータを保持するための領域２４０を「キャッシュ領域２４０」と呼ぶ。ただしＳＤＳ１００は必ずしもキャッシュ領域２４０を有していなくてもよい。
【００３５】
またＳＤＳ１００は、主記憶２１０に保持されているデータが停電等の障害時に消失することを防ぐ手段を有していてもよい。たとえばＳＤＳ１００がバッテリーを有し、停電時にバッテリーから供給される電力を用いて、主記憶２１０上のデータを維持するとよい。ただしＳＤＳ１００は必ずしもバッテリー等のデータ維持手段を有していなくてもよい。
【００３６】
管理プログラム１５０は、情報システム内のストレージ装置（ＳＤＳ）を管理するためのプログラムである。具体的には、例えば、管理プログラム１５０で行われる管理とは、ボリュームの定義、削除等の操作、ＳＤＳ１００の状態の監視などでよい。本実施例では、管理プログラム１５０は情報システム内の特定の１台のＳＤＳ１００（後述するＳＤＳ＃ｘ）にインストールされている例を説明する。管理プログラム１５０は情報システム内の全てのＳＤＳの管理を行うことができる。また管理サーバ１４０では、ＳＤＳ１００で実行される管理プログラム１５０と通信を行う通信プログラム（非図示）が実行されており、ユーザは当該通信プログラムを用いて、管理サーバ１４０にボリュームの定義等の指示を行う。
【００３７】
インストールプログラム２５０は、プログラムをインストールするためのプログラムである。インストールプログラム２５０は情報システム内の各ＳＤＳ１００が有している。たとえば、ストレージ制御プログラム１３０は、インストールプログラム２５０によってＳＤＳ１００にインストールされる。例えば、ユーザがプログラムのインストールを行う時、ユーザは管理サーバ１４０を用いて、ＳＤＳ１００で実行される管理プログラム１５０に対してインストールの指示を出す。インストールの指示を受領した管理プログラム１５０は、プログラムのインストール先のＳＤＳ１００が有するインストールプログラム２５０にプログラムのインストールを行わせる。プログラムのインストールは、ユーザの指示無しに行われてもよい。例えば、少なくともインストールプログラム２５０以外のプログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は計算機が読み取り可能な（例えば非一時的な）記録媒体であってもよい。また、以下の説明において、二つ以上のプログラムが一つのプログラムとして実現されてもよいし、一つのプログラムが二つ以上のプログラムとして実現されてもよい。
【００３８】
インストールプログラム２５０は、ＳＤＳクライアントプログラム２６０をインストールすることもできる。ＳＤＳクライアントプログラム２６０については後述する。
【００３９】
なお、ＳＤＳ１００では上で述べたプログラム以外のプログラムも実行されていてよい。たとえばＳＤＳ１００（のプロセッサ２００）では、汎用的な計算機で実行されるオペレーティングシステムが実行されていてもよく、その場合ストレージ制御プログラム１３０等は、オペレーティングシステムの提供する機能を用いながら動作してもよい。あるいはＳＤＳ１００上で、いわゆる仮想計算機を定義するためのプログラム（たとえばハイパーバイザと呼ばれる）が実行されてもよく、その場合ストレージ制御プログラム１３０等は、定義された仮想計算機上で実行されるとよい。
【００４０】
本実施例に係る情報システムには、複数のＳＤＳ１００が混在している。本実施例では、少なくとも２つのＳＤＳ１００で実行されるストレージ制御プログラム１３０は、仕様（少なくともアクセスプロトコル）の異なるストレージ制御プログラム１３０である。、ストレージ制御プログラム１３０の仕様（少なくともアクセスプロトコル）が異なることを、ストレージ制御プログラム１３０の種類が異なると言うことができる。情報システムで複数種類のストレージ制御プログラム１３０が実行される場合、それぞれのストレージ制御プログラム１３０は少なくとも、汎用的な計算機（本実施例におけるサーバコンピュータなど）で実行可能なプログラムで、且つＳＤＳ１００にストレージ装置としての最低限の機能を提供させることができるプログラムである必要があるが、サポートされる機能に差異があってもよい。なお、ストレージ装置としての最低限の機能とは、Ｉ／Ｏ要求に従ってデータのＩ／Ｏを行う機能でよい。
【００４１】
本実施例では、図３に例示の仕組みにより、アクセスプロトコルの異なるＳＤＳ間でのデータ移行が可能である。
【００４２】
図３は、アクセスプロトコルの異なるＳＤＳ間のデータ移行の流れの概要を説明する図である。
【００４３】
図３に示すように、移行先ＳＤＳ１００（以下ではこれを、「ＳＤＳ＃ｘ（３００）」と呼ぶ）が存在する。また、ＳＤＳ＃ｘのアクセスプロトコルとは異なるアクセスプロトコルで通信する移行元ＳＤＳ１００（以下ではこれを、「ＳＤＳ＃ｙ（３０１）」と呼ぶ）が存在する。
【００４４】
情報システム内に存在するＳＤＳ＃ｘ（３００）とＳＤＳ＃ｙ（３０１）の数は、いずれも１つでも複数でもよいが、本実施例では特に断りのない限り、情報システム内にＳＤＳ＃ｘ（３００）が１つ、ＳＤＳ＃ｙ（３０１）も１つ存在する例を説明する。
【００４５】
ＳＤＳ＃ｘ（３００）のアクセスプロトコルは、ＳＣＳＩプロトコルのような汎用のアクセスプロトコルである。「汎用のアクセスプロトコル」とは、第２のアクセスプロトコルの一例であり、ＳＤＳ＃ｘ（３００）のＳＤＳクライアントプログラム無し（非経由）の通信で使用されるアクセスプロトコルである。例えば、ＳＤＳ＃ｘ（３００）とＡＰサーバ１０５との間でやり取りされるＩ／Ｏ要求（コマンド）は、ＡＮＳＩ  Ｔ１０で規格化されているＳＣＳＩの規格に従ったコマンド（以下、「ＳＣＳＩコマンド」と呼ぶ）でよい。
【００４６】
一方、ＳＤＳ＃ｙ（３０１）のアクセスプロトコルは、ＳＤＳ＃ｙ（３０１）のベンダ規定のアクセスプロトコル（以下、ベンダプロトコル）である。「ベンダプロトコル」とは、第１のアクセスプロトコルの一例であり、１以上のＳＤＳクライアントプログラム２６０のうちのＳＤＳ＃ｙ用のＳＤＳクライアントプログラム２６０との間の通信で使用されるアクセスプロトコルである。ＳＤＳクライアントプログラム２６０は、ボリュームを提供したり、当該ボリュームに対するＩ／Ｏを受け付けた場合に当該ボリュームに関連付けられた記憶空間に属し当該Ｉ／ＯのＩ／Ｏ先に対応したアドレスを指定したＩ／Ｏ要求を送信したりするプログラムである。以下、ＳＤＳ＃ｙ用のＳＤＳクライアントプログラム２６０を、「ＳＤＳクライアントプログラム２６０ｙ」と表記し、且つ、その表記における参照符号に、ＳＤＳクライアントプログラム２６０ｙのインストール先に応じて枝番を付すものとする。
【００４７】
ＡＰサーバ１０５（のプロセッサ）では、ＡＰ（アプリケーションプログラム）３２５が実行される。ＡＰ３２５のＩ／Ｏ対象のデータがＳＤＳ＃ｙ（３０１）に格納されるためには、ＳＤＳ＃ｙ（３０１）との通信のためにＳＤＳクライアントプログラム２６０ｙが必要である。そのため、ＡＰサーバ１０５には、ＳＤＳクライアントプログラム２６０ｙがインストールされる。ＡＰサーバ１０５にインストールされたＳＤＳクライアントプログラム２６０ｙを、「ＳＤＳクライアントプログラム２６０ｙ−０」と表記する。
【００４８】
ＳＤＳクライアントプログラム２６０ｙ−０は、ＳＤＳ＃ｙ（３０１）が提供する記憶空間２８０−１（第１の記憶空間の一例）に関連付けられたボリュームＬＶ１（第１のボリュームの一例）を作成し当該ボリュームＬＶ１を管理する。ボリュームＬＶ１は、例えば、ＡＰ３２５からの指示に従い作成される。ＡＰ３２５は、ＳＤＳクライアントプログラム２６０ｙ−０を有する装置（例えば物理的又は仮想的な装置）における外部プログラム（ＳＤＳクライアントプログラム２６０ｙ−０の外部のプログラム）の一例である。当該装置における論理的な階層において、ＡＰ３２５は、ＳＤＳクライアントプログラム２６０ｙ−０のレイヤよりも上位のレイヤに位置するプログラムでよい。作成されたボリュームＬＶ１のアドレス範囲に、記憶空間２８０−１のアドレス範囲のうちの少なくとも一部のアドレス範囲が対応付けられてよい。記憶空間２８０−１は、ＳＤＳ＃ｙ（３０１）のポート１９０−１を介してＳＤＳクライアントプログラム２６０ｙ−０に提供されてよい。
【００４９】
ボリュームＬＶ１は、ＳＤＳクライアントプログラム２６０ｙ−０によりＡＰ３２５に提供される。ＡＰ３２５は、ボリュームＬＶ１に対してＩ／Ｏを行う。ＳＤＳクライアントプログラム２６０ｙ−０は、ボリュームＬＶ１に対するＩ／Ｏを受け付けた場合、当該Ｉ／ＯのＩ／Ｏ先（例えばアドレス）を当該Ｉ／Ｏ先に対応したアドレス（記憶空間２８０−１に属するアドレス）に変換し、変換後のアドレスを指定したＩ／Ｏ要求を、ベンダプロトコルに従いＳＤＳ＃ｙ（３０１）に送信する。そのＩ／Ｏ要求に応答して、ＳＤＳ＃ｙ（３０１）が、そのＩ／Ｏ要求に従うＩ／Ｏ対象のデータを記憶空間２８０−１に格納する。なお、記憶空間２８０−１は、ＳＤＳ＃ｙ（３０１）内の１以上の記憶デバイス２２０（例えば、ＲＡＩＤグループのような記憶デバイスグループ）に基づく記憶空間である。ボリュームＬＶ１に属するアドレスと記憶空間２８０−１に属するアドレスとの関係を示す第１のアドレスマップが、ＳＤＳクライアントプログラム２６０ｙ−０及びＳＤＳ＃ｙ（３０１）の少なくとも１つにおいて管理される。当該第１のアドレスマップが、定期的に又は不定期的に、ＳＤＳクライアントプログラム２６０ｙ−０及びＳＤＳ＃ｙ（３０１）の少なくとも１つから管理サーバ１４０に送られる。例えば、管理サーバ１４０が、第１のアドレスマップを管理し、管理サーバ１４０内の第１のアドレスマップが、ＳＤＳクライアントプログラム２６０ｙ−０及びＳＤＳ＃ｙ（３０１）の少なくとも１つにおける第１のアドレスマップと同期する。なお、第１のアドレスマップは、ボリュームＬＶ１の全域との対応関係を示してもよいし、ボリュームＬＶ１のうちデータのライト先とされたアドレスとの対応関係を示してもよい。
【００５０】
管理サーバ１４０が、ＳＤＳ＃ｙ（３０１）とＳＤＳ＃ｘ（３００）とを管理する。管理サーバ１４０が、ＳＤＳ＃ｙ（３０１）とＳＤＳ＃ｘ（３００）の他に、ＡＰサーバ１０５を管理してもよい。例えば、管理サーバ１４０は、ＡＰサーバ１０５毎に、下記のうちの少なくとも１つ、
・ＡＰサーバ１０５のアドレス（例えばＩＰアドレス）、
・ＡＰサーバ１０５にインストールされているＳＤＳクライアントプログラム２６０のＩＤ、
・ＳＤＳクライアントプログラム２６０が管理するボリュームのＩＤ、
・ＳＤＳクライアントプログラム２６０が管理するボリュームに対するＩ／Ｏを行うＡＰ３２５のＩＤ、及び、
・ボリュームについてのアドレスマップ（当該ボリュームに属するアドレスと、当該ボリュームに関連付けられた記憶空間に属するアドレスとの対応関係を示す情報）、
を表す情報を保持していてよい。また、例えば、管理サーバ１４０は、管理対象の各ＳＤＳが有する管理情報２３０（図２参照）の少なくとも一部を管理していてもよい。管理サーバ１４０は、例えば、各ＳＤＳについて、ＳＤＳのアドレスと、ＳＤＳが有する記憶空間のＩＤとを管理してよい。
【００５１】
ボリュームＬＶ１に記憶空間２８０−１が関連付けられている場合において、管理サーバ１４０は、移行指示を、ＳＤＳ＃ｘ（３００）内の管理プログラム１５０に送信する（Ｓ１）。移行指示は、入力デバイスやＡＰサーバ１０５経由でユーザから管理サーバ１４０に対する指示に応答して送信されてもよいし、ＳＤＳ＃ｘ（３００）の情報システムへの追加（例えばネットワーク１２０への追加）の検出に応答して送信されてもよい。また、移行指示には、下記のパラメータ、
・ＳＤＳ＃ｙ（３０１）（移行元ＳＤＳの一例）のアドレス、
・管理サーバ１４０が有する第１のアドレスマップ（ボリュームＬＶ１に属するアドレスと記憶空間２８０−１に属するアドレスとの対応関係を示す情報）、
・記憶空間２８０−１のＩＤ、
・記憶空間２８０−１にアクセスするために必要な認証情報（例えば、ＳＤＳ＃ｙ用のＳＤＳクライアントプログラム２６０のＩＤ及びパスワード）、
・ＡＰサーバ１０５のアドレス、及び、
・ＡＰ３２５のＩＤ、
が関連付けられる（一部のパラメータが無くてもよい）。
【００５２】
ＳＤＳ＃ｘ（３００）内の管理プログラム１５０が、当該移行指示に応答して、Ｓ２〜Ｓ５を行う。なお、以下の説明において、ボリュームＬＶ１に属するアドレスを「第１ボリュームアドレス」と言い、記憶空間２８０−１に属するアドレスを「第１空間アドレス」と言い、ボリュームＬＶ０に属するアドレスを「第２ボリュームアドレス」と言い、ＳＤＳ＃ｘ（３００）が有する記憶空間２８０−０（第２の記憶空間の一例）に属するアドレスを「第２空間アドレス」と言うことがある。また、第１ボリュームアドレスと第２ボリュームアドレスを「ボリュームアドレス」と総称することができ、同様に、第１空間アドレスと第２空間アドレスを「空間アドレス」と総称することができる。
【００５３】
管理プログラム１５０が、当該移行指示で指定されているプログラムＩＤ（ＳＤＳ＃ｙ用のＳＤＳクライアントプログラム２６０のＩＤ）が示すＳＤＳ＃ｙ用のＳＤＳクライアントプログラム２６０ｙがインストールされていなければ、インストールプログラム２５０を呼び出す。インストールプログラム２５０が、当該プログラムＩＤをキーにＳＤＳ＃ｙ用のＳＤＳクライアントプログラム２６０ｙを特定し、当該特定されたＳＤＳクライアントプログラム２６０ｙプログラムソース（図示せず）からＳＤＳ＃ｘ（３００）にインストールする（Ｓ２）。ＳＤＳ＃ｘ（３００）にインストールされたＳＤＳ＃ｙ用のＳＤＳクライアントプログラム２６０ｙを「ＳＤＳクライアントプログラム２６０ｙ−１」と表記する。移行指示にプログラムＩＤが関連付けられており、当該移行指示に応答してＳＤＳ＃ｙ用のＳＤＳクライアントプログラム２６０ｙのインストールが行われるので、別段のインストール指示を不要とすることができる。
【００５４】
管理プログラム１５０が、記憶空間２８０−１に関連付けられるボリュームＬＶ０（第２のボリュームの一例）を作成することをＳＤＳクライアントプログラム２６０ｙ−１に指示する（Ｓ３）。この指示では、第１のアドレスマップが関連付けられる。第１のアドレスマップ（及び後述の第２のアドレスマップ）は、例えば、ファイルシステム情報でよい。この指示に応答して、ＳＤＳクライアントプログラム２６０ｙ−１が、記憶空間２８０−１に関連付けられるボリュームＬＶ０を作成し、当該ボリュームＬＶ０を管理する。作成されたボリュームＬＶ０に属する複数の第２ボリュームアドレスのうちの、第１のアドレスマップが示す２以上の第１ボリュームアドレスにそれぞれ対応した（例えば一致した）２以上の第２ボリュームアドレスの各々について、当該第２ボリュームアドレスに、記憶空間２８０−１が属する複数の第１空間アドレスのうちの、第１のアドレスマップが示す第１空間アドレス（当該第２ボリュームアドレスに対応した第１ボリュームアドレスにマッピングされている第１空間アドレス）がマッピングされる。第２ボリュームアドレスと第２空間アドレスとの対応関係を示す第２のアドレスマップが、ＳＤＳクライアントプログラム２６０ｙ−１及びＳＤＳ＃ｘ（３００）の少なくとも１つにおいて管理される。
【００５５】
ボリュームＬＶ０は、ボリュームＬＶ１に代わってＡＰ３２５からＩ／Ｏがされるボリュームである。具体的には、例えば、管理プログラム１５０が、移行指示で指定されているサーバアドレス（ＡＰサーバ１０５のアドレス）を用いて、ＡＰサーバ１０５に、１以上の指示を送信する（Ｓ４）。当該１以上の指示は、ボリュームＬＶ０を認識すること、及び、Ｉ／Ｏのために使用されるパスを、ボリュームＬＶ１に接続されたパスから、ボリュームＬＶ０に接続されたパスに切り替えることの指示である。当該１以上の指示では、ＡＰ３２５のＩＤと、ボリュームＬＶ０のＩＤと、ＳＤＳクライアントプログラム２６０ｙ−１のＩＤとが指定されている。当該１以上の指示に応答して、当該１以上の指示で指定されているＡＰ３２５について、ＳＤＳクライアントプログラム２６０ｙ−１が管理するボリュームＬＶ０が認識されて、Ｉ／Ｏのために使用されるパスが、ボリュームＬＶ１に接続されたパスから、ボリュームＬＶ０に接続されたパスに切り替えられる（Ｓ５）。この後は、ＡＰ３２５は、ボリュームＬＶ１に対するＩ／Ｏに代えて、ボリュームＬＶ０に対するＩ／Ｏを行う。なお、ボリュームＬＶ０の認識、及び、パスの切り替えのための上記１以上の指示の少なくとも１つは、管理プログラム１５０に代えて、管理サーバ１４０からＡＰサーバ１０５に自動送信されてもよいし、ＡＰサーバ１０５にユーザにより入力（例えば、ＡＰサーバ１０５又は管理サーバ１４０の入力デバイス経由で入力）されてもよい。
【００５６】
管理プログラム１５０が（又は、管理プログラム１５０からの指示に応答してＳＤＳクライアントプログラム２６０ｙ−１が）、記憶空間２８０−１から記憶空間２８０−０にボリュームＬＶ０経由で移行対象データ（ＡＰ３２５からボリュームＬＶ１経由で格納されたデータ）をコピーすることであるデータコピーを行う（Ｓ６）。データコピーは、例えば、ボリュームＬＶ０の先頭のアドレスからシーケンシャルに読出し（記憶装置２８０−１からの読出し）及び書込み（記憶装置２８０−０への書込み）が行われることで、完了してもよい。データコピーは、第２のアドレスマップ（第１のアドレスマップを基に作成されたアドレスマップ）から特定される２以上の第２ボリュームアドレスのうち、記憶装置２８０−０への書込みが済んでいない各第２ボリュームアドレスについて、下記（ｍ１）及び（ｍ２）を含む。
（ｍ１）管理プログラム１５０（又は、ＳＤＳクライアントプログラム２６０ｙ−１）が、当該第２ボリュームアドレスを指定した読出しをボリュームＬＶ０に対して行う（ＳＤＳクライアントプログラム２６０ｙ−１に、ボリュームＬＶ０からデータを読み出す読出し要求を送信する）。ここでの読出しでは、ベンダプロトコルと異なるプロトコルであり規格化されたプロトコル（例えばSCSIプロトコルのような汎用プロトコル）が使用される。次に、ＳＤＳクライアントプログラム２６０ｙ−１は、第２ボリュームアドレスに対する読出しを受け付けた場合、第２のアドレスマップ（第１のアドレスマップを基に作成されたアドレスマップ）を基に当該第２ボリュームアドレスを第１空間アドレスに変換し、当該第１空間アドレスを指定した読出し要求を、ベンダプロトコルに従いＳＤＳ＃ｙ（３０１）に送信する。その読出し要求に応答して記憶装置２８０−１からＳＤＳ＃ｙ（３０１）により移行対象データが読み出され、当該読み出された移行対象データをＳＤＳ＃ｙ（３０１）からＳＤＳクライアントプログラム２６０ｙ−１が受ける。そして、当該移行対象データは、ＳＤＳクライアントプログラム２６０ｙ−１から管理プログラム１５０に返る。ＳＤＳクライアントプログラム２６０ｙ−１から管理プログラム１５０への移行対象データの返却では、上記規格化されたプロトコルが使用される。すなわち、管理プログラム１５０とＳＤＳクライアントプログラム２６０ｙ−１間の通信では、ベンダプロトコルを使用する必要がない。
（ｍ２）管理プログラム１５０（又は、ＳＤＳクライアントプログラム２６０ｙ−１）が、ＳＤＳ＃ｙ（３０１）から取得された移行対象データを、当該第２ボリュームアドレスが属するボリュームＬＶ０に関連付いた記憶空間２８０−０に書き込む。管理プログラム１５０が、当該第２ボリュームアドレスにマッピングされる空間アドレス（第２のアドレスマップに記述の空間アドレス）を、（ｍ１）での読出し元の第１空間アドレスから、（ｍ２）での書込み先の第２空間アドレスに変更する。
【００５７】
なお、いずれの第２ボリュームアドレスについて書込みが済んでいるかは、例えば、複数の第２ボリュームアドレスにそれぞれ対応した複数のビットで構成されたビットマップを基に管理されてよい。例えば、管理プログラム１５０（又は、ＳＤＳクライアントプログラム２６０ｙ−１）は、複数の第２ボリュームアドレスのうち、データコピーでの書込み、又は、ボリュームＬＶ０に対するＩ／Ｏに従う書込みが行われた第２ボリュームアドレスに対応したビットを“１”に更新する。これにより、ビット“０”に対応した第２ボリュームアドレスが、書込みが済んでいない第２ボリュームアドレスである。
【００５８】
なお、ＡＰ３２５によりボリュームＬＶ０に対するＩ／Ｏがされると、例えば次の処理が行われる。
【００５９】
すなわち、ボリュームＬＶ０に対するＩ／Ｏが読出しの場合、リード処理実行部（図１２参照）が、当該読出しを受け付け、上述のビットマップを基に、当該読出しの読出し元の第２ボリュームアドレスについてデータコピーが完了済か否かを判断する。データコピーが未完了の場合、リード処理実行部は、当該読出し元の第２ボリュームアドレスに対応した空間アドレスとして、第２のアドレスマップから第１の空間アドレスを特定し、第１の空間アドレスを指定した読出し指示をＳＤＳクライアントプログラム２６０ｙ−１に出す。このため、ＳＤＳクライアントプログラム２６０ｙ−１は、当該第１の空間アドレスを指定した読出し要求をＳＤＳ＃ｙ（３０１）に送信することにより、読出し対象のデータを取得し、当該読出し対象のデータがＳＤＳクライアントプログラム２６０ｙ−１からリード処理実行部に返る。一方、データコピーが完了済の場合、リード処理実行部は、当該読出し元の第２ボリュームアドレスに対応した空間アドレスとして、第２のアドレスマップから第２の空間アドレスを特定する。リード処理実行部は、当該第２の空間アドレスを用いて記憶空間２８０−０から読出し対象のデータを取得する。
【００６０】
ボリュームＬＶ０に対する書込みの場合、ライト処理実行部（図１２参照）が、当該書込みを受け付け、上述のビットマップを基に、当該書込みの書込み先の第２ボリュームアドレスについてデータコピーが完了済か否かを判断する。データコピーが未完了の場合、ライト処理実行部は、当該第２ボリュームアドレスに空きの第２空間アドレスをマッピングし、当該第２空間アドレスを用いて記憶空間２８０−０にデータを書き込む。また、ライト処理実行部は、第２のアドレスマップにおける、当該第２ボリュームアドレスに対応した空間アドレスを、書込み先の第２空間アドレスに変更する。また、ライト処理実行部は、上述のビットマップのうちの、当該第２ボリュームアドレスに対応したビットを、“１”に更新する。一方、データコピーが完了済の場合、ライト処理実行部は、当該書込み先の第２ボリュームアドレスに対応した第２空間アドレスを第２のアドレスマップから特定し、当該第２の空間アドレスを用いて記憶空間２８０−０にデータを書き込む。
【００６１】
本実施例に係る情報システムでは、ＳＤＳ＃ｘ（３００）は仮想化機能により、その他のＳＤＳ＃ｙ（３０１）が有するボリュームを、自身の（ＳＤＳ＃ｘ（３００）の）ボリュームとしてＡＰサーバ１０５に提供することができる。なお、以下の説明では主にＳＤＳ＃ｘ（３００）が行う機能についての説明を行う。そこでＳＤＳ＃ｘ（３００）がＡＰサーバ１０５に提供するボリュームと、その他のＳＤＳ（ＳＤＳ＃ｙ（３０１））が有するボリュームとの混同を避けるために、ＳＤＳ＃ｘ（３００）がＡＰサーバ１０５に提供するボリュームの事は「論理ボリューム」と呼ぶ。なお、図３において、ＳＤＳ＃ｘ（３００）の仮想化機能によれば、ＳＤＳ＃ｙ（３０１）の記憶空間２８０−１がＳＤＳ＃ｘ（３００）のボリュームＬＶ０として提供される。
【００６２】
続いて、本実施例に係るＳＤＳ＃ｘにおける記憶領域の管理方法の一例について説明する。
【００６３】
ＳＤＳ＃ｘ（３００）は、記憶デバイス２２０の記憶空間を直接イニシエータ（ＡＰサーバ１０５など）に提供せず、これとは異なる記憶空間である論理ボリュームとしての記憶空間を定義する。ＳＤＳ＃ｘ（３００）は論理ボリュームを複数定義可能である。各論理ボリュームにはＳＤＳ＃ｘ（３００）内で一意な識別番号が付され、これを論理ボリューム識別子（あるいは、論理ボリュームＩＤ）と呼ぶ。なお、「論理ボリューム」は、ＳＤＳクライアントプログラム２６０ｙ−１が作成するボリュームＬＶ０であってもよいし、当該ボリュームＬＶ０に関連付けられる記憶空間２８０−０であってもよい。以下、説明を簡単にするために、論理ボリュームの一例が、ボリュームＬＶ０であるとする。
【００６４】
ＳＤＳ＃ｘは、Thin Provisioning機能により定義された論理ボリュームを、直接的に（ＳＤＳクライアントプログラム２６０非経由で）、又は、間接的に（ＳＤＳクライアントプログラム２６０経由で）、ＡＰサーバ１０５に提供することができる。後者の場合、論理ボリュームを一例とした記憶空間２８０−０に代えてボリュームＬＶ０が、ＡＰサーバ１０５に提供される。ＳＤＳ＃ｘはボリュームの仮想化機能を有し、他のストレージ装置の有する記憶領域を用いた論理ボリュームを定義することもできる。
【００６５】
図４に、本実施例において、イニシエータ（ＡＰサーバ１０５等）からＳＤＳ１００に対して発行されるＩ／Ｏ要求（リード要求やライト要求）のフォーマットの例を示す。Ｉ／Ｏ要求４００には少なくとも、オペレーションコード４０１、ポートＩＤ４０２、ボリューム識別子４０３、アクセスアドレス４０４、データ長４０５が含まれる。
【００６６】
オペレーションコード４０１には、Ｉ／Ｏ要求の種類が格納される。たとえばＡＰサーバ１０５がリード要求を発行する場合、オペレーションコード４０１にリード要求である旨を表す情報が格納される。
【００６７】
ポートＩＤ４０２は、アクセス対象のボリュームを有するＳＤＳ１００のポート１９０の識別子である。ポート１９０の識別子には、ｉＳＣＳＩ  Ｎａｍｅ（ネットワーク１２０がＴＣＰ／ＩＰプロトコルを伝送するネットワークの場合）や、ＰＯＲＴ  ＩＤ（ネットワーク１２０がファイバチャネルで構成されたネットワークの場合）などが用いられる。
【００６８】
ボリューム識別子４０３は、アクセス対象のボリュームの識別子で、たとえばＬＵＮ（Logical Unit Number）等が用いられる。アクセスアドレス４０４とデータ長４０５は、アクセス対象ボリューム内の、アクセス対象範囲を表す情報である。アクセスアドレス４０４に“Ａ”、データ長４０５に“Ｂ”が含まれている場合、アドレスＡで始まるサイズＢの領域がアクセス対象範囲であることを表す。なお、アクセスアドレス４０４やデータ長４０５に格納される情報の単位は、特定のものには限定されない。たとえばデータ長４０５にはブロック数（１ブロックはたとえば５１２バイトの領域である）が格納され、またアクセスアドレス４０４にはＬＢＡ（Logical Block Address）が格納されるとよい。
【００６９】
また、Ｉ／Ｏ要求４００には、上で説明した以外の情報（図４では“その他４０６”と表記する）が含まれていてもよい。たとえばＩ／Ｏ要求がライト要求の場合、データ長４０５の後に、ライト対象データが付加される。
【００７０】
続いてThin Provisioning機能と、ＳＤＳ＃ｘ（３００）内での記憶領域の管理方法の一例について説明する。
【００７１】
Thin Provisioning機能により形成される論理ボリュームは、自身が（つまりＳＤＳ＃ｘ（３００）が）有する記憶デバイス２２０を記憶領域として使用するように構成されている。ただし最初は（この論理ボリュームが定義された直後は）、論理ボリューム上の各アドレスに対して書き込まれるデータの格納するために使用される記憶領域は定まっていない。論理ボリュームへのライト要求を受け付けたときにはじめて、ＳＤＳ＃ｘ（３００）はライト対象範囲（ライト要求で指定されている範囲）に書き込まれるデータの格納先となる、記憶デバイス２２０の記憶領域を決定する。以下では、ライト対象範囲（ライト要求で指定されている範囲）に書き込まれるデータの格納先を決定する処理のことを、「割り当てる」と表現する。
【００７２】
Thin Provisioning機能により論理ボリュームに割り当てられる記憶領域について説明する。ＳＤＳ＃ｘ（３００）は、複数の記憶デバイス２２０の中のいずれか１つが故障しても、その記憶デバイス２２０のデータを回復できるRedundant Arrays of Inexpensive/Independent Disks/Device（ＲＡＩＤ）機能を有する。ＳＤＳ＃ｘ（３００）は、ＳＤＳ＃ｘ（３００）内のいくつか（たとえば４つ、８つ等）の記憶デバイス２２０を用いて１つのＲＡＩＤを構成する。ＲＡＩＤを構成する記憶デバイス２２０の集合を記憶デバイスグループと呼ぶ。また、以下の説明では、説明を簡単にするために、記憶空間２８０（例えば２８０−０）が、記憶デバイスグループが提供する記憶空間であるとし、故に、記憶空間２８０を「記憶デバイスグループ２８０」と表記することもある。本実施例に係るＳＤＳ＃ｘ（３００）では、１つの記憶デバイスグループ２８０は同一種類の記憶デバイス２２０から構成される。またＳＤＳ＃ｘ（３００）は、記憶デバイスグループ２８０の各記憶領域を、一次元のアドレスで特定可能にする記憶空間として管理する。
【００７３】
図５を用いて、Thin Provisioning機能により形成される論理ボリュームと記憶デバイスグループ２８０の関係について説明する。ＳＤＳ＃ｘ（３００）は論理ボリューム（図中の“ＬＶ０”）に割り当てられる記憶領域の管理の為に、論理ボリュームを複数の仮想ページ（図５では、ＶＰ０、ＶＰ１、ＶＰ２）という所定サイズの領域ごとに管理している。論理ボリュームに記憶領域を割り当てる際、ＳＤＳ＃ｘ（３００）はこの仮想ページ毎に記憶領域を割り当てる。各仮想ページには論理ボリューム内で一意な識別番号が付される。この識別番号を仮想ページ番号と呼ぶ（あるいは「仮想ページ＃」と表記されることもある）。また、仮想ページ番号がｎの仮想ページは、“仮想ページ＃ｎ”と表記される。
【００７４】
仮想ページは、ＳＤＳ＃ｘ（３００）内部で論理ボリュームの記憶空間の管理のためにのみ用いられる概念である。ＡＰサーバ１０５等のイニシエータは、論理ボリュームの記憶領域にアクセスする際には、ＬＢＡ（Logical Block Address）などのアドレスを用いて、アクセス対象の記憶領域を特定する。ＡＰサーバ１０５が論理ボリュームへのアクセス要求を発行した時、ＳＤＳ＃ｘ（３００）は、ＡＰサーバ１０５が指定したＬＢＡを仮想ページ番号及び仮想ページ内の相対アドレス（仮想ページ先頭からのオフセットアドレス）に変換する。この変換は、ＬＢＡを仮想ページサイズで除算することで実現できる。仮に仮想ページのサイズがＰ（ＭＢ）とすると、論理ボリュームの先頭位置からＰ（ＭＢ）分の領域が仮想ページ＃０として管理され、その次のＰ（ＭＢ）分の領域が仮想ページ＃１として管理される。そしてそれ以降も同様に、Ｐ（ＭＢ）の領域がそれぞれ、仮想ページ＃２、＃３…として管理される。
【００７５】
ＳＤＳ＃ｘ（３００）が論理ボリュームを定義した直後は、各仮想ページに物理記憶領域は割り当てられていない。ＳＤＳ＃ｘ（３００）は、ＡＰサーバ１０５から仮想ページに対するライト要求を受け付けた時点ではじめて、その仮想ページに対して物理記憶領域を割り当てる。仮想ページに割り当てられる物理記憶領域は実ページと呼ばれる。実ページは、記憶デバイスグループ２８０上の記憶領域である。図５では、仮想ページ＃０（ＶＰ０）に実ページＲＰ０が割り当てられている状態を表している。
【００７６】
実ページは、記憶デバイスグループ２８０の複数の記憶デバイス２２０の記憶領域を用いて形成される領域である。図５において、１６０−１，１６０−２，１６０−３，１６０−４はそれぞれ、各記憶デバイス２２０の記憶領域を表している。また、図５で例示している記憶デバイスグループ２８０のＲＡＩＤレベル（ＲＡＩＤ技術における、データ冗長化方式の種類。ＲＡＩＤレベルには一般的には、ＲＡＩＤレベル１（ＲＡＩＤ  １）からＲＡＩＤレベル６（ＲＡＩＤ  ６）の種類がある）は、ＲＡＩＤ４で、またデータドライブ３台、パリティドライブ１台で構成されるＲＡＩＤである。ただし、記憶デバイスグループ２８０のＲＡＩＤレベルには、ＲＡＩＤ４以外のもの（たとえばＲＡＩＤ５、ＲＡＩＤ６等）が採用されてもよい。
【００７７】
ＳＤＳ＃ｘ（３００）は、記憶デバイスグループ２８０に属する各記憶デバイス２２０の記憶領域を、ストライプブロックと呼ばれる複数の固定サイズの記憶領域に分割して管理する。たとえば図５において、０（Ｄ），１（Ｄ），２（Ｄ）…、またはＰ０，Ｐ１…と記載されているそれぞれの領域が、ストライプブロックを表している。
【００７８】
図５で、ストライプブロックのうち、Ｐ０，Ｐ１…と記載されているストライプブロックは、ＲＡＩＤ機能により生成される冗長データ（パリティ）の格納されるストライプブロックであり、これを「パリティストライプ」と呼ぶ。一方、０（Ｄ），１（Ｄ）、２（Ｄ）…と記載されているストライプブロックは、ＡＰサーバ１０５から書き込まれるデータ（冗長データではないデータ）が格納されるストライプブロックである。このストライプブロックのことは、「データストライプ」と呼ばれる。パリティストライプには、複数のデータストライプを用いて生成される冗長データが格納される。
【００７９】
以下、パリティストライプと、当該パリティストライプに格納される冗長データを生成するために用いられるデータストライプのセットのことを、「ストライプライン」と呼ぶ。図５に示された例では、たとえばパリティストライプＰ０には、データストライプ０（Ｄ），１（Ｄ），２（Ｄ）を用いて生成される冗長データ（パリティ）が格納される関係にあり、データストライプ０（Ｄ），１（Ｄ），２（Ｄ）とパリティストライプＰ０は、同一のストライプラインに属する。
【００８０】
つまり１つのストライプラインに属する各ストライプブロックは、ストレージ装置（１６０−１，１６０−２，１６０−３，１６０−４）上の同じ位置（アドレス）に存在する。ただし別の実施形態として、同一ストライプラインに属する各ストライプブロックが、記憶デバイス２２０上の異なるアドレスに存在する構成が採用されてもよい。実ページ（たとえばＲＰ０、ＲＰ１）は図５に示されるように、１または複数のストライプラインから構成される領域である。
【００８１】
またＳＤＳ＃ｘ（３００）は、記憶デバイスグループ２８０の各記憶領域（ブロック）を、一次元のアドレスで特定可能にする記憶空間として管理する。以下ではこの記憶空間を「記憶デバイスグループの記憶空間」と呼び、この記憶空間上のアドレスを「記憶デバイスグループのアドレス」または「記憶デバイスグループアドレス」と呼ぶ。記憶デバイスグループアドレスの例を図５に示す。記憶デバイスグループの記憶空間は図５に示されているように、記憶デバイスグループ２８０内の各ストライプが、１つずつ順に配置された記憶空間である。記憶デバイスグループ内の先頭のストライプブロックの記憶デバイスグループアドレスが０と定められ、以下各ストライプブロックに、たとえば図５に示されるようにアドレスが付される。記憶デバイスグループのアドレスは、実ページと記憶デバイスグループ２８０上の記憶領域の対応関係を管理するために用いられる。
【００８２】
また実ページが仮想ページに割り当てられる場合、データストライプ（０（Ｄ），１（Ｄ）等）のみが割り当てられ、パリティストライプは割り当てられない。そのため、実ページ上のライトデータの格納される領域の合計サイズは、仮想ページのサイズと等しい関係にある。つまり、（実ページのサイズーパリティ格納領域のサイズ）＝仮想ページサイズ、の関係にある。図５ではＲＡＩＤ４の構成例についてのみ示されているが、たとえば記憶デバイスグループ２８０のＲＡＩＤタイプがＲＡＩＤ１の場合には、実ページサイズは、仮想ページサイズの２倍になる。
【００８３】
なお、ＳＤＳ＃ｘ（３００）が必ずしもＲＡＩＤ機能をサポートしていなくてもよい。その場合、パリティストライプは定義されず、実ページのサイズと仮想ページのサイズは同じになる。
【００８４】
仮想ページ内の各領域と、実ページ内の各領域との関係（マッピング）は、図５に示されている通りである。つまり、実ページの先頭ストライプからパリティを除いた領域（０（Ｄ）、１（Ｄ）、２（Ｄ））が、仮想ページの先頭領域に割り当てられている。それ以降も同様に、実ページの２番目以降の各ストライプからパリティを除いた領域（３（Ｄ）、４（Ｄ）、５（Ｄ）…）が、順番に仮想ページの領域に割り当てられる。
【００８５】
このように、仮想ページ内の各領域と実ページ内の各領域とのマッピングは規則的にマッピングされているため、ＳＤＳ＃ｘは、ＡＰサーバ１０５からのアクセス要求で指定されている論理ボリューム上のアクセス位置（ＬＢＡ）から仮想ページ番号及び仮想ページ内の相対アドレス（仮想ページ先頭からのオフセットアドレス）を求めることで、当該アクセス位置に対応付けられている記憶デバイス２２０及びその記憶デバイス２２０内の領域（データストライプ）を一意に算出できる。さらにアクセス位置に対応付けられているデータストライプに加え、そのデータストライプと同一ストライプラインに属するパリティストライプも一意に定まる。ただし、仮想ページ内の各領域と実ページ内の各領域とのマッピングは、ここで説明したマッピング方法に限定されるものではない。
【００８６】
なお、１つの論理ボリューム中の各仮想ページに割り当てられる実ページは、必ずしも同一記憶デバイスグループ２８０内の実ページに限定されない。仮想ページ＃０に割り当てられる実ページと、仮想ページ＃１に割り当てられる実ページが、それぞれ異なる記憶デバイスグループ２８０内の実ページであってもよい。
【００８７】
また仮想ページに割り当てられる実ページは、まだ他の仮想ページに割り当てられていない実ページでなければならない。仮想ページに割り当てられていない実ページのことを、「空きページ」または「空き実ページ」と呼ぶ。
【００８８】
ここでは、ＳＤＳ＃ｘ（３００）の有するThin Provisioning機能について説明したが、本実施例に係る情報システム内のその他のストレージ装置（ＳＤＳ＃ｙ（３０１）など）はこれらの機能を有していなくてもよい。
【００８９】
続いて、本実施例におけるＳＤＳ＃ｘ（３０１）のストレージ制御プログラム１３０が使用する管理情報の内容を説明していく。
【００９０】
図６は、ＳＤＳ＃ｘ（３０１）が有する管理情報２３０に含まれる主な情報を示している。
【００９１】
管理情報２３０には、論理ボリューム情報２０００、実ページ情報２１００、空きページ管理情報ポインタ２２００、記憶デバイスグループ情報２３００、記憶デバイス情報２５００、仮想ページ容量２６００が含まれる。ただし管理情報２３０にはこれ以外の情報が含まれていてよい。
【００９２】
論理ボリューム情報２０００は、論理ボリュームの構成（たとえば、仮想ページと実ページのマッピング）などの管理情報であり、ＳＤＳ＃ｘ（３００）が有する論理ボリューム毎に論理ボリューム情報２０００が定義される。そのためＳＤＳ＃ｘ（３００）内に論理ボリュームがＬ個定義された時、管理情報２３０内に論理ボリューム情報２０００はＬ個存在する。以下では、ある論理ボリューム情報２０００によって属性情報が管理される論理ボリュームのことを、「管理対象論理ボリューム」と呼ぶ。
【００９３】
実ページ情報２１００は実ページを管理するための情報で、実ページ毎に実ページ情報２１００が存在する（管理情報２３０内には、ＳＤＳ＃ｘ（３００）が有する実ページの数と同数の実ページ情報２１００が存在する）。以下、ある実ページ情報２１００によって属性情報が管理される実ページのことを、「管理対象実ページ」と呼ぶ。
【００９４】
記憶デバイスグループ情報２３００は、ＳＤＳ＃ｘ（３００）が有する記憶デバイスグループ２８０の構成についての情報である。記憶デバイスグループ情報２３００は記憶デバイスグループ２８０毎に存在する。以下、ある記憶デバイスグループ情報２３００によって属性情報が管理される記憶デバイスグループのことを、「管理対象記憶デバイスグループ」と呼ぶ。
【００９５】
記憶デバイス情報２５００は、ＳＤＳ＃ｘ（３００）が有する記憶デバイス２２０についての情報で、記憶デバイス２２０毎に存在する。以下、ある記憶デバイス情報２５００によって属性情報が管理される記憶デバイスのことを、「管理対象記憶デバイス」と呼ぶ。
【００９６】
空きページ管理情報ポインタ２２００は、空き実ページを管理するための情報であり、１つの記憶デバイスグループ２８０に対して１つの空きページ管理情報ポインタ２２００が存在する。
【００９７】
仮想ページ容量２６００は、仮想ページのサイズを表す情報である。本実施例では、各論理ボリュームの仮想ページのサイズはいずれも等しい前提とする。そのため管理情報２３０内には仮想ページ容量２６００は１つだけ存在する。
【００９８】
図７は、論理ボリューム情報２０００の形式を示す図である。
【００９９】
論理ボリューム情報２０００には、論理ボリュームＩＤ２００１、論理ボリューム容量２００２、仮想化フラグ２００３、ＳＤＳ  ＩＤ２００４、ＳＤＳクライアントプログラムＩＤ２０２０、ボリュームＩＤ２００５、コピー中フラグ２００６、コピーポインタ２００７、第２ＳＤＳ  ＩＤ２００８、第２ＳＤＳクライアントプログラムＩＤ２０２１、第２ボリュームＩＤ２００９、論理ボリュームＲＡＩＤタイプ２０１０、待ちフラグ２０１１、実ページポインタ２０１２が含まれる。
【０１００】
論理ボリュームＩＤ２００１は、管理対象論理ボリュームの識別子を示す。本実施例では論理ボリュームの識別子には、ＬＵＮ（Logical Unit Number）が用いられる例を説明する。ただし論理ボリュームの識別子は、ＳＤＳ１００内で一意な識別子であればよく、ＬＵＮ以外の識別子が用いられてもよい。なお本実施例では識別子のことを「ＩＤ」と表記することもある。
【０１０１】
論理ボリューム容量２００２は、管理対象論理ボリュームの容量である。
【０１０２】
仮想化フラグ２００３には、０（オフ）または１（オン）の何れかが格納される。管理対象論理ボリュームが他のストレージ装置（ＳＤＳ＃ｘ（３００）以外のＳＤＳ１００）のボリュームを用いて形成されている場合（つまり仮想化機能を用いて定義された論理ボリュームの場合）、仮想化フラグ２００３はオン（１）に設定される。また論理ボリューム情報２０００の仮想化フラグ２００３がオンのとき、ＳＤＳ  ＩＤ２００４、ボリュームＩＤ２００５はそれぞれ、管理対象論理ボリュームにマップされているボリュームを有するＳＤＳ１００の識別子とそのボリュームの識別子を表す。また本実施例では、ＳＤＳ１００の識別子として、ＳＤＳ１００のポート１９０の識別子が用いられる前提とする。そのため、ＳＤＳ  ＩＤ２００４そして後述する第２ＳＤＳ  ＩＤ２００８には、ＳＤＳ１００のポート１９０の識別子が格納される。ただしこれ以外の情報が、ＳＤＳ１００の識別子として用いられてもよい。
【０１０３】
コピー中フラグ２００６、第２ＳＤＳ  ＩＤ２００８は、論理ボリュームが仮想化機能を用いて定義された論理ボリュームの場合に用いられる。ＳＤＳ＃ｘ（３００）は、後述するコピー処理実行部４３００を実行することで、仮想化機能を用いて定義された論理ボリュームのコピー処理を行うことがある。このコピー処理では、論理ボリュームにマップされたボリュームのデータを、他の場所（ＳＤＳ＃ｘ（３００）内の記憶デバイス２２０あるいは別のＳＤＳ１００）にコピーする。コピー中フラグ２００６は、論理ボリュームにマップされたボリュームのデータを他の場所にコピー中か否かを表す情報である。コピー中フラグ２００６が“オン”（１）の時、コピー処理中であることを表す。コピーポインタ２００７はコピー処理で用いられる情報で、詳細は後述する。
【０１０４】
第２ＳＤＳ  ＩＤ２００８は、論理ボリュームにマップされたボリュームのデータの、コピー先のＳＤＳ１００の識別子を表す。コピー先のＳＤＳ１００は、自装置（つまりＳＤＳ＃ｘ（３００））であってもよい。第２ＳＤＳ  ＩＤ２００８が、ＳＤＳ＃ｘ（３００）の識別子であれば、コピー処理実行部４３００は論理ボリュームにマップされたボリュームのデータを、ＳＤＳ＃ｘの有する記憶デバイス２２０上にコピー中であることを意味する。逆に第２ＳＤＳ  ＩＤ２００８がＳＤＳ＃ｘの識別子でなければ、論理ボリュームにマップされたボリュームのデータのコピー先は、別のＳＤＳ１００のボリュームであることを意味する。データのコピー先が別のＳＤＳ１００のボリュームである場合、第２ボリュームＩＤ２００９は、データコピー先のボリュームの識別子を示す。
【０１０５】
論理ボリュームＲＡＩＤタイプ２０１０には、論理ボリュームに割り当てられる実ページを有する記憶デバイスグループ２８０のＲＡＩＤ構成についての情報が格納される。本実施例においてＲＡＩＤ構成とは具体的には、ＲＡＩＤ（記憶デバイスグループ２８０）のＲＡＩＤレベルと、記憶デバイスグループ２８０を構成する記憶デバイス２２０の数を含む情報である。
【０１０６】
待ちフラグ２０１１は、管理対象論理ボリュームに待ち状態にあるリード処理又はライト処理があることを示す情報である。
【０１０７】
実ページポインタ２０１２は、管理対象論理ボリュームの仮想ページと実ページの対応関係（マッピング）についての情報である。実ページポインタ２０１２には、仮想ページに割り当てられた実ページのページ管理情報（後述する実ページ情報２１００）へのポインタ（主記憶２１０上のアドレス）が格納される。
【０１０８】
１つの論理ボリューム情報２０００の中に含まれる実ページポインタ２０１２の数は、管理対象論理ボリュームの仮想ページ数（論理ボリューム容量２００２を仮想ページ容量２６００で割った数と等しい）である。たとえば論理ボリュームの仮想ページ数がｎであれば、その論理ボリュームの論理ボリューム情報２０００内には、実ページポインタ２０１２はｎ個存在する。図７では、仮想ページ＃ｐ（ｐは０以上の整数とする）の実ページポインタ２０１２を「実ページポインタ２０１２−ｐ」と表記している。
【０１０９】
なお、仮想ページに実ページが割り当てられる契機は、論理ボリュームが定義された時ではなく、仮想ページに対して、ＡＰサーバ１０５からのデータ書き込みが行われる契機である。したがって、まだ書き込みが行われていない仮想ページの実ページポインタ２０１２はＮＵＬＬ（無効値。たとえば“−１”等の値）になっている。
【０１１０】
図８は、実ページ情報２１００の形式を示す図である。
【０１１１】
先に述べたとおり、実ページは記憶デバイスグループ２８０内に定義される記憶領域である。実ページ情報２１００は実ページの存在する記憶デバイスグループ２８０、及び記憶デバイスグループ２８０内の位置を特定する情報を格納した情報であり、具体的には、記憶デバイスグループ２１０１、実ページアドレス２１０２、空きページポインタ２１０３を含んでいる。
【０１１２】
記憶デバイスグループ２１０１は、管理対象実ページの属する記憶デバイスグループ２８０の識別子（記憶デバイスグループＩＤと呼ぶ）を表す。実ページアドレス２１０２は、管理対象実ページの存在する位置を表す情報である。実ページは記憶デバイスグループ２８０内に存在するので、実ページアドレス２１０２に用いられる情報は、記憶デバイスグループ２８０のアドレスである。具体的には実ページアドレス２１０２には、管理対象実ページの先頭領域のアドレスが格納される。図５を参照しながら説明する。図５では、たとえばストライプブロックＮが、実ページＲＰ１の先頭に位置づけられ、またストライプブロックＮのアドレス（ストレージグループアドレス）は“０ｘ０００１５０００”であるので（なお、“０ｘ”は、数値が１６進数表記であることを表す）、実ページＲＰ１の実ページ情報２１００の実ページアドレス２１０２には“０ｘ０００１５０００”が格納される。
【０１１３】
空きページポインタ２１０３は、管理対象実ページが仮想ページに割り当てられていない場合に用いられる。詳細は後述する。実ページが仮想ページに割り当てられている場合、その実ページの空きページポインタ２１０３にはＮＵＬＬが格納される。
【０１１４】
図９は、記憶デバイス情報２５００の形式を示す図である。
【０１１５】
記憶デバイス情報２５００は、記憶デバイス２２０の属性情報を記録した情報で、記憶デバイスＩＤ２５０１、記憶容量２５０２の情報を含む。記憶デバイスＩＤ２５０１は管理対象記憶デバイスの識別子である。記憶容量２５０２は、管理対象記憶デバイスの容量である。
【０１１６】
図１０は、記憶デバイスグループ情報２３００の形式を示す図である。
【０１１７】
記憶デバイスグループ情報２３００は、記憶デバイスグループＩＤ２３０１、記憶デバイスグループＲＡＩＤタイプ２３０２、実ページ数２３０３、空き実ページ数２３０４、記憶デバイスポインタ２３０５の情報を有する。記憶デバイスポインタ２３０５は、管理対象記憶デバイスグループに属する記憶デバイス２２０の管理情報（記憶デバイス情報２５００）へのポインタである。記憶デバイスグループ２８０がＮ個の記憶デバイス２２０から構成される時、その記憶デバイスグループ２８０の記憶デバイスグループ情報２３００は、Ｎ個の記憶デバイスポインタ２３０５を有する。
【０１１８】
記憶デバイスグループＩＤ２３０１は、管理対象記憶デバイスグループの識別子である。記憶デバイスグループＲＡＩＤタイプ２３０２は、管理対象記憶デバイスグループのＲＡＩＤタイプである。記憶デバイスグループＲＡＩＤタイプ２３０２に格納される情報の内容は、論理ボリュームＲＡＩＤタイプ２０１０を説明したときに述べたものと同じである。実ページ数２３０３と空き実ページ数２３０４はそれぞれ、管理対象記憶デバイスグループが有する総実ページ数と、空き実ページの数を示す。
【０１１９】
続いて空きページ管理情報ポインタ２２００について説明する。空きページ管理情報ポインタ２２００は、記憶デバイスグループ２８０ごとに設けられる情報である。図１１は、空きページ管理情報ポインタ２２００によって管理される空き実ページの集合を表している。この構造を、空きページ管理情報キュー２２０１と呼ぶ。また、実ページ情報２１００のうち、空き実ページに対応した実ページ情報２１００を空き実ページ情報２１００と呼ぶ。空きページ管理情報ポインタ２２００は、先頭の空き実ページ情報２１００のアドレスをさす。次に、先頭の実ページ情報２１００の中の空きページポインタ２１０３が次の空き実ページ情報２１００を指す。図１１では、最後の空き実ページ情報２１００の空きページポインタ２１０３は、空きページ管理情報ポインタ２２００を指し示しているが、ＮＵＬＬでもよい。
【０１２０】
ＳＤＳ＃ｘ（３００）は、仮想ボリューム上の領域のうち、実ページが割り当てられていない仮想ページに対する書き込み要求を受け付けると、ＲＡＩＤ構成がその仮想ボリュームの論理ボリュームＲＡＩＤタイプ２０１０と同一の記憶デバイスグループ２８０の中のいずれかの記憶デバイスグループ２８０を選択する。選択可能な記憶デバイスグループ２８０が複数ある場合、ＳＤＳ＃ｘ（３００）はたとえば、空き実ページ数の最も多い記憶デバイスグループ２８０を選択し、その記憶デバイスグループ２８０の空きページ管理情報キュー２２０１から空き実ページを探し、仮想ページに割り当てる。
【０１２１】
ＳＤＳ＃ｘ（３００）の動作は、ＳＤＳ＃ｘ（３００）内のプロセッサ２００が、主記憶２１０に格納されたストレージ制御プログラム１３０を実行することで主に実現される。ストレージ制御プログラム１３０は複数のプログラムモジュール（以下では「モジュール」と略記する）を含んでいる。図１２は、ストレージ制御プログラム１３０が有するモジュールのうち、本実施例の説明に関係する各モジュールを示したものである。本実施例に関するモジュールは、リード処理実行部４０００、ライト処理実行部４１００、コピー処理スケジュール部４２００、コピー処理実行部４３００である。
【０１２２】
図１３は、ＳＤＳ移行処理のフローを示す図である。
【０１２３】
ステップ９００１：管理プログラム１５０が、移行指示を管理サーバ１４０から受信する。
【０１２４】
ステップ９００２：管理プログラム１５０が、移行指示で指定されているプログラムＩＤをキーに、ＳＤＳ＃ｙ用（移行元ＳＤＳ用）のＳＤＳクライアントプログラム２６０ｙを特定する。
【０１２５】
ステップ９００３：管理プログラム１５０が、Ｓ９００２で特定されたＳＤＳクライアントプログラム２６０ｙが、ＳＤＳ＃ｘ（３００）にインストール済か否かを判断する。
【０１２６】
ステップ９００４：ステップ９００３の判断結果が偽の場合、管理プログラム１５０が、インストールプログラム２５０を呼び出すことにより、Ｓ９００２で特定されたＳＤＳクライアントプログラム２６０ｙをＳＤＳ＃ｘ（３００）にインストールする。
【０１２７】
ステップ９００５：ステップ９００３の判断結果が真の場合、又はステップ９００４の後、管理プログラム１５０が、第２ＳＤＳ  ＩＤ２００８がＳＤＳ＃ｘ（３００）の識別子と等しいかを判断する。
【０１２８】
ステップ９００６：ステップ９００３の判断結果が偽の場合、コピー先（移行先）が、ＳＤＳ＃ｘ（３００）とは別のＳＤＳ（例えば、ＳＤＳ＃ｘ（３００）に接続されＳＤＳ＃ｘ（３００）に記憶空間を提供する外部接続されたストレージ）である。管理プログラム１５０が、当該別のＳＤＳ用のＳＤＳクライアントプログラムを特定する。
【０１２９】
ステップ９００７：管理プログラム１５０が、Ｓ９００６で特定されたＳＤＳクライアントプログラムが、当該別のＳＤＳにインストール済か否かを判断する。
【０１３０】
ステップ９００８：ステップ９００７の判断結果が偽の場合、管理プログラム１５０が、インストールプログラム２５０を呼び出すことにより、Ｓ９００６で特定されたＳＤＳクライアントプログラムを当該別のＳＤＳにインストールする。
【０１３１】
ステップ９００９：ステップ９００５の判断結果が真の場合、ステップ９００７の判断結果が真の場合、又はステップ９００８の後、管理プログラム１５０が、仮想ボリューム（仮想的な論理ボリューム）ＬＶ０をＳＤＳクライアントプログラム２６０ｙ−１に作成させる。
【０１３２】
ステップ９０１０：管理プログラム１５０が、記憶空間２８０−１から記憶空間２８０−０へのボリュームＬＶ０を経由したデータコピーを行う。
【０１３３】
図１４及び図１５は、リード処理実行部４０００の処理フローを示す図である。
【０１３４】
リード処理実行部４０００は、ＳＤＳ＃ｘ（３００）がＡＰサーバ１０５からリード要求を受け付けたときに実行される。なお、本実施例では説明が複雑になることを避けるために、ＡＰサーバ１０５から受領したリード要求で指定されているリード対象領域は、１つの仮想ページ内に収まっている例を説明する。
【０１３５】
ステップ５０００：リード処理実行部４０００は、リード要求で指定されている、リード対象論理ボリュームの論理ボリューム情報２０００を参照し、仮想化フラグ２００３がオンかを確認する。仮想化フラグ２００３がオンであれば、次にステップ５００８（図１５）が行われ、オフの場合にはリード処理実行部４０００は次にステップ５００１を実行する。
【０１３６】
ステップ５００１：リード処理実行部４０００は、受け取ったリード要求で指定されたリード対象アドレスから、リード対象アドレスを含む仮想ページの仮想ページ＃と仮想ページ内の相対アドレスを計算する。
【０１３７】
ステップ５００２：当該ステップではリード処理実行部４０００は、リード対象となった仮想ページに割り当てた実ページに対応する実ページ情報２１００を、論理ボリューム情報２０００の実ページポインタ２０１２から獲得する。
【０１３８】
ステップ５００３：リード処理実行部４０００は、リード対象の実ページが存在する記憶デバイスグループ２８０と、その記憶デバイスグループ２８０のアドレスを特定する。これらは、ステップ５００２で獲得した実ページ情報２１００の記憶デバイスグループ２１０１、実ページアドレス２１０２を参照することで得られる。
【０１３９】
ステップ５００４：リード処理実行部４０００は、ステップ５００１で得た仮想ページ内の相対アドレスと記憶デバイスグループＲＡＩＤタイプ２３０２から、当該要求のアクセス対象となる実ページ内の相対アドレスを計算する。そしてリード処理実行部４０００は、計算した実ページ内相対アドレス、記憶デバイスグループＲＡＩＤタイプ２３０２と記憶デバイスポインタ２３０５とから、リード対象の記憶デバイス２２０を特定するとともに、その記憶デバイス２２０のリード先アドレスを特定する。
【０１４０】
ステップ５００５：リード処理実行部４０００は、ステップ５００４で特定した記憶デバイス２２０に対し、リード要求を発行する。
【０１４１】
ステップ５００６：リード処理実行部４０００は、記憶デバイス２２０からデータが返送されてくるまで待機する。
【０１４２】
ステップ５００７：リード処理実行部４０００は、記憶デバイス２２０から受け取ったデータを、ＡＰサーバ１０５に送り、処理を完了する。
【０１４３】
ステップ５００８：リード処理実行部４０００は、コピー中フラグ２００６が、オンかをチェックする。オンであれば、次にステップ５０１０が実行される。
【０１４４】
ステップ５００９：コピー中フラグ２００６がオフの場合、ＳＤＳ  ＩＤ２００４及びボリュームＩＤ２００５で特定される、ＳＤＳ１００のボリュームと、ＡＰサーバ１０５から受け取ったリード対象アドレスとについて、データコピーが未完了である。この場合、リード処理実行部４０００は、リード対象アドレスに対応した空間アドレスとして、第２のアドレスマップから第１の空間アドレスを特定し、第１の空間アドレスを指定した読出し指示をＳＤＳクライアントプログラム２６０ｙ−１に出す。この後リード処理実行部４０００は、データが送られてくるまで待機し（ステップ５００６）、その後ステップ５００７を実行し、処理を終了する。すなわち、ＳＤＳクライアントプログラム２６０ｙ−１は、当該第１の空間アドレスを指定した読出し要求をＳＤＳ＃ｙ（３０１）に送信することにより、読出し対象のデータを取得し、当該読出し対象のデータが、ＳＤＳクライアントプログラム２６０ｙ−１からリード処理実行部４０００に返る。リード処理実行部４０００は、受け取ったデータを、ＡＰサーバ１０５に送り、処理を完了する。
【０１４５】
ステップ５０１０：コピー中フラグ２００６がオンの場合、リード処理実行部４０００はＡＰサーバ１０５から受領したリード要求で指定されたアドレスがコピーポインタ２００７より大きいかを判定し、大きい場合にはリード処理実行部４０００はステップ５００９を実行する。ステップ５００９が実行された後の処理は、上で説明したとおりであるため、ここでの説明は略す。
【０１４６】
ステップ５０１１：ＡＰサーバ１０５から受領したリード要求で指定されたアドレスがコピーポインタ２００７と等しい場合、リード対象領域がコピー中であることを意味する。そのためリード処理実行部４０００は、リード対象論理ボリュームの待ちフラグ２０１１をオン（１）にして、コピー処理の完了を待つ。コピー処理が完了した後、リード処理実行部４０００は再びステップ５０１０を実行する。
【０１４７】
ステップ５０１２：ＡＰサーバ１０５から受領したリード要求で指定されたアドレスがコピーポインタ２００７より小さい場合、リード処理実行部４０００は、第２ＳＤＳ  ＩＤ２００８がＳＤＳ＃ｘ（３００）の識別子と等しいかを判別する。等しい場合、リード処理実行部４０００はステップ５００１を実行する。
【０１４８】
ステップ５０１３：第２ＳＤＳ  ＩＤ２００８が、ＳＤＳ＃ｘ（３００）の識別子と等しくない場合、リード処理実行部４０００は第２ＳＤＳ  ＩＤ２００８，第２ボリュームＩＤ２００９で特定される、ＳＤＳ１００のボリュームに対して、リード要求をネットワーク１２０経由で発行する。この後リード処理実行部４０００は、ステップ５００６、ステップ５００７を実行し、処理を終了する。
【０１４９】
図１６及び図１７は、ライト処理実行部４１００の処理フローを示す図である。
【０１５０】
ライト処理実行部４１００は、ＡＰサーバ１０５から、ＳＤＳ＃ｘ（３００）がライト要求を受け付けたときに実行される。なお、本実施例では説明が複雑になることを避けるために、ＡＰサーバ１０５から受領したライト要求で指定されているライト対象領域は、１つの仮想ページ内に収まっている例を説明する。
【０１５１】
ステップ６０００：ライト処理実行部４１００は、ライト要求で指定されている、ライト対象論理ボリュームの論理ボリューム情報２０００を参照し、仮想化フラグ２００３がオンかを確認する。仮想化フラグ２００３がオンであれば、次にステップ６００９が行われ、オフの場合にはライト処理実行部４１００は次にステップ６００１を実行する。
【０１５２】
ステップ６００１：ライト処理実行部４１００は、受け取ったライト要求で指定されたライト対象とするアドレスから、対応する仮想ページとアクセスする仮想ページ内の相対アドレスを計算する。
【０１５３】
ステップ６００２:当該ステップではライト処理実行部４１００は、ライト対象となった仮想ページに、実ページが割り当てられているかをチェックする。仮想ページに実ページが割り当てられていない場合、ステップ６０１５が実行されるが、割り当てられている場合にはステップ６０１５はスキップされる。
【０１５４】
ステップ６０１５：ここでは、ライト対象の仮想ページに実ページが割り当てられる。仮想ページへの実ページの割り当ては、以下のようにして行われる。ライト処理実行部４１００は論理ボリューム情報２０００の論理ボリュームＲＡＩＤタイプ２０１０、記憶デバイスグループ情報２３００の、記憶デバイスグループＲＡＩＤタイプ２３０２、空き実ページ数２３０４等を参照して、どの記憶デバイスグループ２８０の実ページを割り当てるか選択する。続いて、ライト処理実行部４１００は選択された記憶デバイスグループ２８０の空きページ管理情報キュー２２０１を参照して、ライト対象の仮想ページの実ページポインタ２０１２が、空きページ管理情報キュー２２０１の先頭に位置する空き実ページ情報２１００（空きページ管理情報ポインタ２２００で指し示されている空き実ページ情報２１００）を指し示すようにする。
【０１５５】
またライト処理実行部４１００は、空きページ管理情報ポインタ２２００が空きページ管理情報キュー２２０１内の２番目の実ページ情報２１００（仮想ページに割り当てた実ページの実ページ情報２１００の中の空きページポインタ２１０３が指し示す実ページ情報２１００）を示すように、空きページ管理情報ポインタ２２００を更新し、さらに、仮想ページに割り当てた実ページの実ページ情報２１００の中の空きページポインタ２１０３をＮＵＬＬに変更する。また、当該実ページに対応する記憶デバイスグループ情報２３００の空き実ページ数２３０４の数を減らす。仮想ページへの実ページの割り当てが行われた後、ステップ６００３が行われる。
【０１５６】
なお、本実施例では、仮想ページへの実ページの割り当てはＳＤＳ１００がライト要求を受け付けたときに実施される例を説明したが、この割り当て処理は必ずしもライト要求を受け付けた時に実施されなくてもよい。この割り当て処理は、ＳＤＳ１００が記憶デバイス２２０へデータを格納する時までに実行されればよい。
【０１５７】
ステップ６００３：ライト処理実行部４１００はライト対象仮想ページに割り当てられている実ページの実ページ情報２１００を、論理ボリューム情報２０００の実ページポインタ２０１２を参照することにより獲得する。
【０１５８】
ステップ６００４：ライト処理実行部４１００は、獲得した実ページ情報２１００の記憶デバイスグループ２１０１、実ページアドレス２１０２から、ライト対象の実ページが存在する記憶デバイスグループ２８０とその記憶デバイスグループ２８０上のアドレスを特定する。これはステップ５００３と同様の処理である。
【０１５９】
ステップ６００５：ライト処理実行部４１００はステップ６００１で得た仮想ページ内の相対アドレスと記憶デバイスグループＲＡＩＤタイプ２３０２から、当該要求のアクセス対象となる実ページ内の相対アドレスを計算する。計算した実ページ内相対アドレス、記憶デバイスグループＲＡＩＤタイプ２３０２と記憶デバイスポインタ２３０５とから、ライト先の記憶デバイス２２０及びその記憶デバイス２２０上のライト先アドレスを決定する。ライト処理実行部４１００はまた、記憶デバイスグループＲＡＩＤタイプ２３０２を参照して、公知の方法で、必要な冗長データを生成し、冗長データを格納する記憶デバイス２２０とそのアドレスを決定する。
【０１６０】
ステップ６００６：ライト処理実行部４１００はステップ６００５で決定した記憶デバイス２２０のアドレスを用いて、データの格納を指示するライト要求を作成して記憶デバイス２２０に発行する。またライト処理実行部４１００は、冗長データの格納先の記憶デバイス２２０に対してもライト要求を発行して、冗長データの書き込みも行う。
【０１６１】
ステップ６００７：ライト要求の発行後、ライト処理実行部４１００は記憶デバイス２２０から応答が返却されるまで待機する。
【０１６２】
ステップ６００８：ライト処理実行部４１００はＡＰサーバ１０５に、完了報告を送る。
【０１６３】
ステップ６００９：ライト処理実行部４１００は、コピー中フラグ２００６がオンかチェックする。オンであれば、次にステップ６０１１が行われる。
【０１６４】
ステップ６０１０：コピー中フラグ２００６がオフの場合、ライト処理実行部４１００はＳＤＳ  ＩＤ２００４，ボリュームＩＤ２００５で特定される、ＳＤＳ１００のボリュームに対して、受け取った相対アドレスと長さを指定して、ライト要求を、ネットワーク１２０経由で発行する。この後ライト処理実行部４１００は、ステップ６００７、ステップ６００８を実行し、処理を終了する。
【０１６５】
ステップ６０１１：コピー中フラグ２００６がオンの場合、ライト処理実行部４１００はＡＰサーバ１０５から受領したライト要求で指定されたアドレスがコピーポインタ２００７より、大きいかを判定し、大きい場合、次にステップ６０１０を実行する。ステップ６０１０の後は、上で述べたとおり、ライト処理実行部４１００は、ステップ６００７、ステップ６００８を実行し、処理を終了する。
【０１６６】
ステップ６０１２：ＡＰサーバ１０５から受領したライト要求で指定されたアドレスがコピーポインタ２００７と等しい場合、ライト対象領域がコピー中であることを意味する。そのためライト処理実行部４１００は待ちフラグ２０１１をオンにして、ライト対象領域のコピー処理が完了するまで待機する。コピー処理が完了した後、ライト処理実行部４１００は再びステップ６０１１を実行する。
【０１６７】
ステップ６０１３：ＡＰサーバ１０５から受領したライト要求で指定されたアドレスがコピーポインタ２００７より小さい場合、ライト処理実行部４１００は第２ＳＤＳ  ＩＤ２００８が、ＳＤＳ＃ｘ（３００）の識別子と等しいか判別する。等しい場合、ライト処理実行部４１００はステップ６００１を実行する。
【０１６８】
ステップ６０１４：第２ＳＤＳ  ＩＤ２００８が、ＳＤＳ＃ｘ（３００）の識別子と等しくない場合、ライト処理実行部４１００は第２ＳＤＳ  ＩＤ２００８，第２ボリュームＩＤ２００９で特定されるＳＤＳ１００のボリュームに対してライト要求をネットワーク１２０経由で発行する。この後ライト処理実行部４１００は、ステップ６００７、ステップ６００８を実行し、処理を終了する。
【０１６９】
本実施例では、ライト処理実行部４１００は記憶デバイス２２０へデータを書き込んだ後、ＡＰサーバ１０５に完了報告を返却する例を説明した。ただしライト処理実行部４１００は、キャッシュ領域２４０へデータを書き込んだ時点で、ＡＰサーバ１０５に完了報告を返し、その後記憶デバイス２２０へデータを書き込んでもよい。
【０１７０】
図１８は、コピー処理スケジュール部４２００の処理フローを示す図である。
【０１７１】
コピー処理スケジュール部４２００は、管理プログラム１５０から指定されたＳＤＳ１００のボリュームのデータを、別のＳＤＳ１００にコピーする処理をスケジュールする。データのコピー先は、ＳＤＳ＃ｘ（３００）の記憶デバイス２２０でもよいし、あるいは指定されたＳＤＳ１００以外のＳＤＳ１００に定義されたボリュームでもよい。
【０１７２】
ステップ７０００：コピー処理スケジュール部４２００は、論理ボリューム情報２０００の中で、仮想化フラグ２００３がオンで、かつ、ＳＤＳ  ＩＤ２００４が指定されたＳＤＳ１００と一致するものを見つける。見つからなかった場合、すべての論理ボリュームを見つけたことになるので、コピー処理が完了するのをまつため、ステップ７００３へジャンプする。
【０１７３】
ステップ７００１：ステップ７０００において条件に該当する論理ボリュームが見つかった場合、コピー処理スケジュール部４２００は見つかった論理ボリュームについてコピー処理を行うための準備を行う。具体的にはコピー処理スケジュール部４２００は、見つかった論理ボリュームのコピー中フラグ２００６をオンにする。続いてコピー処理スケジュール部４２００は、データのコピー先ＳＤＳ１００を決定する。コピー先の決定方法には任意の方法が採用されてよい。たとえば空き領域の最も多いＳＤＳ１００がコピー先に選択されるとよい。
【０１７４】
ＳＤＳ＃ｘ（３００）以外のＳＤＳ１００にデータをコピー（退避）する場合には、コピー処理スケジュール部４２００は、ステップ７０００で見つけた論理ボリュームの論理ボリューム容量２００２を参照して、他のＳＤＳ１００に、論理ボリューム容量２００２と同サイズ（あるいはそれ以上のサイズ）のボリュームの定義を行う。またＳＤＳ＃ｘ（３００）内の記憶デバイス２２０にデータをコピーする場合、コピー処理スケジュール部４２００は見つかった論理ボリュームの論理ボリューム容量２００２より多くの空き実ページが存在するかチェックする。
【０１７５】
他ＳＤＳ１００内にボリュームを定義する場合、コピー処理スケジュール部４２００は、ボリュームの定義先となるＳＤＳ１００とネットワーク１２０経由で情報を交換して、ボリュームの定義処理を実行してもよい。あるいはコピー処理スケジュール部４２００は、管理プログラム１５０にボリュームの定義を要求して、管理プログラム１５０がボリュームを定義するＳＤＳ１００を決め、そのＳＤＳ１００に指定した容量のボリュームを定義させて、そのＳＤＳ１００の識別子と論理ボリュームの識別子を、ＳＤＳ＃ｘ（３００）に返却してもよい。
【０１７６】
データのコピー先が、ＳＤＳ＃ｘ（３００）の記憶デバイス２２０である場合、コピー処理スケジュール部４２００は第２ＳＤＳ  ＩＤ２００８に、ＳＤＳ＃ｘ（３００）の識別子を設定する。一方データのコピー先が、他ＳＤＳ１００内のボリュームである場合、コピー処理スケジュール部４２００は、コピー先ボリュームを有するＳＤＳ１００の識別子を第２ＳＤＳ  ＩＤ２００８に定義し、コピー先ボリュームの識別子を第２ボリュームＩＤ２００９に設定する。さらにコピー処理スケジュール部４２００は、コピーポインタ２００７に初期値（０）を設定する。
【０１７７】
ステップ７００２：コピー処理スケジュール部４２００はコピー処理実行部４３００を起動する。この際コピー処理スケジュール部４２００は、コピー処理対象となる論理ボリュームの論理ボリューム情報２０００を指定する。この後、コピー処理スケジュール部４２００は次の論理ボリュームを探すため、再びステップ７０００を実行する。
【０１７８】
なお、ここでコピー処理スケジュール部４２００は、コピー処理実行部４３００の処理が終了するまで待機する必要がなく、コピー処理実行部４３００を起動した後、すぐにステップ７０００に戻ってよい。具体的にはコピー処理スケジュール部４２００はコピー処理実行部４３００を起動する際、コピー処理実行部４３００が実行されるプロセスを生成し、そのプロセスにコピー処理実行部４３００を実行させ、再びコピー処理スケジュール部４２００はステップ７０００を実行する。
【０１７９】
またコピー処理実行部４３００の実行されるプロセスは複数生成されてもよく、複数プロセスが生成された時、それらのプロセスは並行に実行可能である。そのため、たとえば第１の論理ボリュームについてのコピー処理を行うプロセスと第２の論理ボリュームについてのコピー処理を行うプロセスとが並行実施されてもよい。
【０１８０】
ステップ７００３：コピー処理スケジュール部４２００は、ステップ７０００〜ステップ７００２で行った、全論理ボリュームのコピー処理が完了するまで待機する。
【０１８１】
ステップ７００４：コピー処理スケジュール部４２００は、指定されたＳＤＳ１００の論理ボリュームのコピー処理が完了したことを、管理プログラム１５０に報告し、処理を終了する。なお、上では、指定されたＳＤＳ１００のすべてのボリュームのコピー処理がスケジュールされる例を説明したが、先に述べたとおり、コピー処理スケジュール部４２００はユーザからコピー処理が必要なボリュームの識別子を受領して、コピー処理が必要なボリュームのコピー処理だけを行ってもよい。
【０１８２】
図１９は、コピー処理実行部４３００の処理フローを示す図である。
【０１８３】
コピー処理実行部４３００は、コピー処理スケジュール部４２００から呼び出されると（ステップ７００２）、実行を開始する。コピー処理スケジュール部４２００がコピー処理実行部４３００を呼び出すとき、コピー処理対象の論理ボリュームを指定する。コピー処理実行部４３００は、この指定された論理ボリュームについてコピー処理を実行する。
【０１８４】
ステップ８０００：コピー処理実行部４３００は、指定された論理ボリュームのコピーポインタ２００７、ＳＤＳ  ＩＤ２００４とボリュームＩＤ２００５を参照して、対応するＳＤＳ１００に、論理ボリューム、読み出し開始アドレス、１仮想ページ分の容量を指定して、データを読み出すリード要求を発行する。なお、本実施例では、コピー処理実行部４３００がコピー処理を行う際に、仮想ページ単位でコピーを行う例を説明するが、それ以外の単位でコピー処理が行われてもよい。
【０１８５】
ステップ８００１：コピー処理実行部４３００は、ステップ８０００でリード要求を発行したＳＤＳ１００からデータが送られてくるまで待機する。
【０１８６】
ステップ８００２：コピー処理実行部４３００は、第２ＳＤＳ  ＩＤ２００８が、ＳＤＳ＃ｘ（３００）かをチェックし、そうでない場合、次にステップ８０１１を行う。第２ＳＤＳ  ＩＤ２００８が、ＳＤＳ＃ｘ（３００）である場合には、次にステップ８００３が行われる。
【０１８７】
ステップ８００３：コピー処理実行部４３００は、コピーポインタ２００７で特定されるアドレスに対応する仮想ページに、実ページを割り当てる。この処理はステップ６０１５と同様の処理である。
【０１８８】
ステップ８００４：ここで行われる処理は、ステップ６００４，６００５と同様の処理である。コピー処理実行部４３００は、記憶デバイスグループＲＡＩＤタイプ２３０２と記憶デバイスポインタ２３０５とから、データライト先実ページが存在する記憶デバイス２２０のアドレスを特定する。またコピー処理実行部４３００は記憶デバイスグループＲＡＩＤタイプ２３０２を参照して、公知の方法で、必要な冗長データを生成し、冗長データを格納する記憶デバイス２２０とそのアドレスを計算する。
【０１８９】
ステップ８００５：ここで行われる処理はステップ６００６と同様の処理である。コピー処理実行部４３００は、ステップ８００４で特定した、データ格納先の記憶デバイス２２０と冗長データ格納先の記憶デバイス２２０に対して、データと冗長データを格納するライト要求を発行し、データと冗長データを転送する。この後コピー処理実行部４３００はステップ８００６を行う。
【０１９０】
ステップ８０１１：第２ＳＤＳ  ＩＤ２００８がＳＤＳ＃ｘ（３００）ではない場合、コピー処理実行部４３００はコピーポインタ２００７、第２ＳＤＳ  ＩＤ２００８と第２ボリュームＩＤ２００９を参照して、対応するＳＤＳ１００に、論理ボリューム、読み出し開始アドレス、１ページ分の容量を指定して、ライト要求を発行し、書き込むデータを送る。この後、この後コピー処理実行部４３００はステップ８００６を行う。
【０１９１】
ステップ８００６：コピー処理実行部４３００は、記憶デバイス２２０（または他のＳＤＳ１００）から応答が返却されるまで待機する。
【０１９２】
ステップ８００７：コピー処理実行部４３００は待ちフラグ２０１１を参照し、待ちフラグ２０１１がオンなら、待ち状態の処理の待ちを開放して、待ちフラグ２０１１をオフにする。
【０１９３】
ステップ８００８：コピー処理実行部４３００はコピーポインタ２００７を１ページ分進める。
【０１９４】
ステップ８００９：コピー処理実行部４３００はコピーポインタ２００７と論理ボリューム容量２００２を参照して、コピーポインタ２００７が論理ボリュームの終端アドレスを超過したか（つまり当該論理ボリュームのコピーが完了したか）チェックする。論理ボリュームのコピーが完了していない場合、コピー処理実行部４３００は再びステップ８０００から処理を繰り返す。
【０１９５】
ステップ８０１０：論理ボリュームのコピーが完了した場合、コピー処理実行部４３００はコピー中フラグ２００６をオフにする。さらにコピー処理実行部４３００は、第２ＳＤＳ  ＩＤ２００８がＳＤＳ＃ｘ（３００）の識別子であれば、仮想化フラグ２００３をオフにする。第２ＳＤＳ  ＩＤ２００８がＳＤＳ＃ｘ（３００）の識別子でない場合、コピー処理実行部４３００は第２ＳＤＳ  ＩＤ２００８と第２ボリュームＩＤ２００９を、ＳＤＳ  ＩＤ２００４とボリュームＩＤ２００５にコピーし、処理を終了する。
【０１９６】
コピー処理実行部４３００は、上に述べた処理を行うことで、１つの論理ボリュームのデータを、別の記憶領域に移動（コピー）する。なお、コピー処理実行部４３００によるコピー処理中も、リード処理実行部４０００またはライト処理実行部４１００は、論理ボリュームのデータリード処理またはライト処理を実行可能である。リード処理実行部４０００は、特に図１５に記載の処理（ステップ５００８〜ステップ５０１３）を行うように構成されているため、リード対象論理ボリュームがコピー処理実行部４３００によりコピー処理中であっても、コピー処理実行部４３００のコピー処理の実行完了を待たずに、データの読み出しが可能である。またライト処理実行部４１００も同様に、図１７に記載の処理を行うことで、コピー処理実行部４３００のコピー処理の実行完了を待たずに、データの書き込みが可能である。そのため、ユーザは業務を停止することなく（たとえばＡＰサーバ１０５からの論理ボリュームへのアクセスを停止することなく）、ＳＤＳ＃ｙ（３０１）のプログラム交換を行うことができる。
【０１９７】
以上、本発明の実施例を説明したが、これは、本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。すなわち、本発明は、他の種々の形態でも実施する事が可能である。
【０１９８】
上で説明した実施例では、ＳＤＳ＃ｘ（３００）が管理プログラム１５０を実行し、情報システム内の各ストレージ装置（ＳＤＳ）を管理していたが、管理プログラム１５０は必ずしもＳＤＳ＃ｘ（３００）で実行されなくてもよい。たとえば管理サーバ１４０が管理プログラム１５０を実行することで、管理サーバ１４０が情報システム内の各ＳＤＳ１００を管理するように構成されていてもよい。あるいはＡＰサーバ１０５で管理プログラム１５０が実行される構成でもよい。
【０１９９】
また上で説明した実施例では、用途ごとにサーバコンピュータが存在していたが（ＳＤＳ１００、ＡＰサーバ１０５、管理サーバ１４０）、１つのサーバコンピュータが複数の用途を兼ねるように構成されていてもよい。たとえば上で述べた実施例で管理サーバ１４０が実行していたクライアントプログラムが、ＳＤＳ１００で実行されるように構成されていてもよい。この場合ユーザは、ＳＤＳ１００に備えられている入出力デバイス（キーボードやディスプレイ）を用いて、管理操作を行う。
【０２００】
あるいは情報システムは、アプリケーションプログラムとストレージ制御プログラム１３０が、同一のサーバコンピュータで実行される構成であってもよい。その場合、このサーバコンピュータは上で述べた実施例におけるＡＰサーバとＳＤＳの両方の機能を果たす。
【０２０１】
またこの場合、サーバコンピュータ上に複数の仮想計算機を定義して、仮想計算機上でアプリケーションプログラムとストレージ制御プログラムが実行される構成でもよい。たとえばサーバコンピュータ上でハイパーバイザを実行することで、アプリケーションプログラムを実行する仮想計算機と、ストレージ制御プログラムを実行する仮想計算機を定義する。そしてストレージ制御プログラムを実行する仮想計算機が、アプリケーションプログラムを実行する仮想計算機（あるいはこれ以外のサーバコンピュータ等）にボリュームを提供するように構成されるとよい。ただし各プログラムが必ずしも仮想計算機上で実行されなければならないわけではない。たとえば上で説明したストレージ制御プログラムと同等の処理を行うプログラムコードをハイパーバイザに含め、サーバコンピュータはこのハイパーバイザを実行することで、アプリケーションプログラムを実行する仮想計算機にボリュームを提供するよう構成されていてもよい。
【０２０２】
また、上で説明した処理の一部が人手で行われてもよい。たとえば図１７で説明した処理では、管理プログラム１５０がコピー処理スケジュール部４２００に指示して、ステップ１００３０を実行させ、その後プログラムの交換対象であるＳＤＳ１００（ＳＤＳ＃ｙ（３０１））にプログラム交換を指示していた。この処理の一部をユーザが行ってもよい。すなわち、ユーザはステップ１００３０（ＳＤＳ＃ｙ（３０１）のデータ移動）の終了が確認できた後、ＳＤＳ＃ｙ（３０１）のプログラムの交換を行ってもよい。
【０２０３】
この時のプログラムの交換は、ユーザは管理サーバ１４０からＳＤＳ＃ｘ（３００）の管理プログラム１５０に、ＳＤＳ＃ｙ（３０１）へのプログラムインストールを指示することで、管理プログラム１５０からＳＤＳ＃ｙ（３０１）のインストールプログラム２５０にプログラム交換を行わせてもよいし、管理サーバ１４０から直接ＳＤＳ＃ｙ（３０１）のインストールプログラム２５０に対して、プログラムのインストールを指示してもよい。或いはＳＤＳ＃ｙ（３０１）がキーボードやディスプレイ等の入出力デバイスを備えている場合は、ユーザはそれを用いてＳＤＳ＃ｙ（３０１）にプログラムのインストールを指示してもよい。
【０２０４】
また、上で説明した実施例では、ＳＤＳが受け付けるＩ／Ｏ要求（コマンド）は、いわゆるＳＣＳＩコマンドである例が説明された。つまりＳＤＳが、いわゆるブロックレベルのアクセス要求を受け付けるストレージ装置である例を説明した。しかし、ＳＤＳがそれ以外のタイプのストレージ装置であってもよい。たとえばファイルレベルやオブジェクトレベルのアクセス要求を受け付けるストレージ装置（いわゆるNetwork Attached Storage（ＮＡＳ）やObject-based Storage Device（ＯＳＤ））などでもよい。
【０２０５】
また、上で説明した実施例では、コピー処理実行部４３００によって論理ボリュームのデータがＳＤＳ＃ｙ（３０１）以外の記憶領域に移動される際、移動先の記憶領域は、ＳＤＳ＃ｘ（３００）の記憶デバイスか、あるいは他のＳＤＳ１００が有するボリュームの何れかである例を説明した。ただし、移動先の記憶領域に、ＳＤＳ＃ｘ（３００）の記憶デバイスと、他のＳＤＳ１００のボリュームの両方が用いられてもよい。
【０２０６】
たとえば図３に示された、ＳＤＳ＃ｘ（３００）、ＳＤＳ＃ｙ（３０１−１）、ＳＤＳ＃ｙ（３０１−２）において、ＳＤＳ＃ｙ（３０１−１）のプログラム交換が行われる時、ＬＶ２に格納されているデータは、ＳＤＳ＃ｙ（３０１−１）以外のＳＤＳに移動される必要がある（なお、仮想化機能によりＬＶ２はＬＶ１にマップされている）。この場合ＳＤＳ＃ｘ（３００）は、ＬＶ２に格納されているデータのうち、一部のデータ、たとえばＬＶ２の先頭から半分のデータをＳＤＳ＃ｘ（３００）の記憶デバイス２２０に移動し、残りのデータをたとえばＳＤＳ＃ｙ（３０１−２）のボリュームＬＶ３に移動してもよい。もちろんこの場合、ＳＤＳ＃ｘ（３００）は、論理ボリュームの領域ごと（たとえば仮想ページごと）に、異なるボリュームの記憶領域（または記憶デバイス２２０の記憶領域）を割り当てることが可能なように構成されている必要がある。
【０２０７】
また、例えば、管理プログラム１５０が設けられることに代えて、管理プログラム１５０の機能がストレージ制御プログラム１３０に含まれていてもよい。
【０２０８】
また、上で説明した処理をＣＰＵに実行させる各プログラムは、計算機が読み取り可能な記憶メディアに格納された状態で提供され、プログラムを実行する各装置にインストールされてもよい。計算機が読み取り可能な記憶メディアとは、非一時的なコンピュータ可読媒体で、たとえばＩＣカード、ＳＤカード、ＤＶＤ等の不揮発性記憶媒体である。あるいは上で説明した処理をＣＰＵに実行させる各プログラムは、プログラム配布サーバからネットワーク経由で提供されてもよい。
【０２０９】
また、上で説明した実施例では、１つのＳＤＳは、単一の計算機（例えばサーバコンピュータ）であるが、１つのＳＤＳが、同一のストレージ制御プログラム１３０をそれぞれ実行する複数の計算機でもよい。単一の計算機が複数のＳＤＳの各々の一部でもよい。また、「ＳＤＳ」は、データを格納する機能を備えたソフトウェアディファインドの装置全般（例えば、ＳＤＤＣ（Software-defined Datacenter））をカバーする意味であってもよい。また、計算機が、ＳＤＳの他に、ＳＤＳに対してＩ／Ｏ要求を発行するホストシステムとしての１以上の仮想的な計算機を実行してもよい。また、ＳＤＳが、ストレージ機能に加えて、ホスト機能（ストレージ機能に対してＩ／Ｏ要求を発行するホストシステムとしての機能）を有してもよい。
【０２１０】
また、「記憶デバイスグループ」は、冗長構成グループの一例でよい。冗長構成の例としては、Erasure Coding、ＲＡＩＮ（Redundant Array of Independent Nodes）、ノード間ミラーリング、ＲＡＩＤなどがあり、いずれの冗長構成が採用されてもよい。従って、「記憶デバイス」は、ＮＶＲＡＭ（Non-Volatile RAM）のような記憶媒体でもよいし、スケールアウト型の記憶システムの構成要素としてのノード（例えば汎用計算機）でもよい。
【０２１１】
なお、以上の説明を以下のように総括することができる。以下の説明は、上述の説明に無い事項を含んでいてもよい。
【０２１２】
プロセッサと、記憶デバイスとを備えたコンピュータを複数備え、クライアントプログラムからの要求に基づいて記憶デバイスへのデータの入出力を行う情報システム（例えばＳＤＳ＃ｘ（３００））において、移動元情報システム（例えばＳＤＳ＃ｙ（３０１））に記憶されたデータを、自情報システム（例えばＳＤＳ＃ｘ（３００））の記憶デバイスに移動させる場合に、プロセッサは、データの移行元となる移動元情報システムにかかるクライアントプログラム（例えばＳＤＳクライアントプログラム２６０ｙ）に、移動元情報システムの移動対象のデータへのアクセス手段を作成させる指示を送信し、移動元情報システムのクライアントプログラムが作成したアクセス手段を用いて、移動対象のデータを前記情報システムの記憶デバイスに記憶する。
【０２１３】
移動元情報システムにかかるクライトアントプログラムは、情報システムのコンピュータにインストールされたプログラム（例えばＳＤＳクライアントプログラム２６０ｙ−１）でよい。
【０２１４】
移行元情報システムがそのクライアントプログラムとの通信に用いるプロトコルと、自情報システムが通信に用いるプロトコルとは、異なっており、自情報システムと移行元クライアントプログラムとが通信を行うプロトコルは、規格化されたプロトコルでよい。
【０２１５】
アクセス手段の作成は、移行元情報システム内のデータにアクセスするために、移動元情報システムの外に作成されたボリューム（例えばボリュームＬＶ０）でよい。
【０２１６】
このような情報システムは、コンピュータにインストールされ実行される一つ以上のプログラムであるプログラム群が実行されることにより構築されてもよい。プログラム群は、上述したストレージ制御プログラム１３０のようにストレージ機能を発揮するプログラム（例えば記憶デバイスに対する入出力を行うプログラム）でもよいし、当該プログラムに加えて、上述した管理プログラム１５０のようにクライアントプログラムのインストール等の制御を行うプログラムを含んでもよい。
【符号の説明】
【０２１７】
１００：  ＳＤＳ
【図１】
2020027433.tif 000003
【図２】
2020027433.tif 000004
【図３】
2020027433.tif 000005
【図４】
2020027433.tif 000006
【図５】
2020027433.tif 000007
【図６】
2020027433.tif 000008
【図７】
2020027433.tif 000009
【図８】
2020027433.tif 000010
【図９】
2020027433.tif 000011
【図１０】
2020027433.tif 000012
【図１１】
2020027433.tif 000013
【図１２】
2020027433.tif 000014
【図１３】
2020027433.tif 000015
【図１４】
2020027433.tif 000016
【図１５】
2020027433.tif 000017
【図１６】
2020027433.tif 000018
【図１７】
2020027433.tif 000019
【図１８】
2020027433.tif 000020
【図１９】
2020027433.tif 000021