(57)【要約】  各ストレージ管理ＡＰでの処理論理の追加を不要とし、ストレージシステムの負荷を高くせずに、ストレージシステムでの拡張機能や新ストレージシステムに各ストレージ管理ＡＰを適用できるストレージ管理システムを提供する。そのために、ストレージ管理サーバーのストレージ管理ＡＰＩライブラリに複数の汎用的な処理を実装する。また、ストレージ管理ＡＰがストレージ管理ＡＰＩライブラリを介してストレージ管理ＡＰＩ提供サーバープログラムと接続されたときに、ストレージ管理ＡＰＩライブラリがストレージ管理ＡＰＩ提供サーバープログラムからＡＰＩ属性情報を取得する。そして、ストレージ管理ＡＰがストレージ管理ＡＰＩライブラリを介してストレージシステムの機能を実行するときに、その機能の実行の前後で、ストレージ管理ＡＰＩライブラリがＡＰＩ属性情報に従って複数の汎用的な処理を組み合わせてストレージ管理サーバーが実行する。
2016121086.tif 000002
【特許請求の範囲】
【請求項１】
ストレージシステムと管理サーバーとを含んで構成されるストレージ管理システムであって、  前記ストレージシステムは、  第１のＣＰＵと、  第１の記憶デバイスと、を備え、  前記管理サーバーは、  第２のＣＰＵと、  第２の記憶デバイスと、を備え、  前記ストレージシステムの第１の記憶デバイスに、  前記管理サーバーと前記ストレージシステムとの接続を行うためのストレージ管理ＡＰＩ属性情報と、  前記ストレージ管理ＡＰＩ属性情報を前記管理サーバーに提供するために前記第１のＣＰＵにより実行されるストレージ管理ＡＰＩ提供サーバープログラムと、が格納され、  前記管理サーバーの第２の記憶デバイスに、  前記ストレージシステムを管理するため前記第２のＣＰＵが実行するストレージ管理アプリケーションプログラムと、  前記ストレージ管理アプリケーションプログラムを動作させるためのストレージ管理ＡＰＩライブラリと、が格納され、  前記ストレージ管理ＡＰＩライブラリに、前記第２のＣＰＵで実行する１つ以上の汎用処理プログラムを備え、  前記ストレージ管理アプリケーションプログラムが前記ストレージシステムに所定の機能を実行するため前記ストレージ管理ＡＰＩライブラリを介して前記ストレージ管理ＡＰＩ提供サーバープログラムに接続された場合、  前記第２のＣＰＵは、  前記ストレージ管理ＡＰＩ提供サーバープログラムから前記ストレージ管理ＡＰＩ属性情報を取得し、  前記ストレージ管理ＡＰＩ属性情報と、前記ストレージ管理ＡＰＩライブラリの前記汎用処理プログラムとを組み合わせて前記ストレージシステムへの機能を実行させる  ことを特徴とするストレージ管理システム。
【請求項２】
請求項１記載のストレージ管理システムであって、前記ストレージ管理ＡＰＩ属性情報は、  機能名と、前記所定の機能を実行させるための要求データのメンバーと、前記所定の機能の実行結果である応答データのメンバーとを含んで構成され、  前記要求データのメンバー及び応答データのメンバーは、メンバー名と、当該メンバー名のタイプとを含んで構成され、  前記メンバー名毎に設定される属性と当該属性への設定値を含む  ことを特徴とするストレージ管理システム。
【請求項３】
請求項２記載のストレージ管理システムであって、前記ストレージシステムのシステム構成を示すストレージシステム構成情報が前記第１の記憶デバイスに格納され、  前記第１のＣＰＵが前記ストレージシステム構成情報を参照して前記ストレージ管理ＡＰＩ属性情報を更新する  ことを特徴とするストレージ管理システム。
【請求項４】
請求項３記載のストレージ管理システムであって、前記ストレージ管理ＡＰＩ属性情報は、前記ストレージ管理ＡＰＩ提供サーバープログラムの起動時ないし定期的に更新される  ことを特徴とするストレージ管理システム。
【請求項５】
請求項２記載のストレージ管理システムであって、前記管理サーバーの第２のＣＰＵが、  前記ストレージ管理ＡＰＩ属性情報に前記所定の機能を実行するための要求データを設定し、  前記要求データが付加されたストレージ管理ＡＰＩ属性情報の妥当性の確認を、前記汎用処理プログラムで実行する  ことを特徴とするストレージ管理システム。
【請求項６】
請求項５記載のストレージ管理システムであって、前記管理サーバーの第２のＣＰＵが、  前記要求データが付加されたストレージ管理ＡＰＩ属性情報の妥当性の確認を、前記要求データに設定されている情報のタイプ及び値で行う  ことを特徴とするストレージ管理システム。
【請求項７】
管理サーバーに接続されるストレージシステムであって、  前記ストレージシステムは、  第１のＣＰＵと、  第１の記憶デバイスと、を備え、  前記管理サーバーは、  第２のＣＰＵと、  第２の記憶デバイスと、を備え、  前記ストレージシステムの第１の記憶デバイスに、  前記管理サーバーと前記ストレージシステムとの接続を行うためのストレージ管理ＡＰＩ属性情報と、  前記ストレージ管理ＡＰＩ属性情報を前記管理サーバーに提供するために前記第１のＣＰＵにより実行されるストレージ管理ＡＰＩ提供サーバープログラムと、  前記管理サーバーの第２の記憶デバイスに、  前記ストレージシステムを管理するため前記第２のＣＰＵが実行するストレージ管理アプリケーションプログラムと、  前記ストレージ管理アプリケーションプログラムを動作させるためのストレージ管理ＡＰＩライブラリと、が格納され、  前記ストレージ管理ＡＰＩライブラリに、前記第２のＣＰＵで実行する１つ以上の汎用処理プログラムを備え、  前記ストレージ管理アプリケーションプログラムが前記ストレージシステムに所定の機能を実行するため前記ストレージ管理ＡＰＩライブラリを介して前記ストレージ管理ＡＰＩ提供サーバープログラムに接続された場合、  前記第２のＣＰＵは、  前記ストレージ管理ＡＰＩ提供サーバープログラムから前記ストレージ管理ＡＰＩ属性情報を取得し、  前記ストレージ管理ＡＰＩ属性情報と、前記ストレージ管理ＡＰＩライブラリの前記汎用処理プログラムとを組み合わせて前記ストレージシステムへの機能を実行させる  ことを特徴とするストレージシステム。
【請求項８】
請求項７記載のストレージシステムであって、前記ストレージ管理ＡＰＩ属性情報は、  機能名と、前記所定の機能を実行させるための要求データのメンバーと、前記所定の機能の実行結果である応答データのメンバーとを含んで構成され、  前記要求データのメンバー及び応答データのメンバーは、メンバー名と、当該メンバー名のタイプとを含んで構成され、  前記メンバー名毎に設定される属性と当該属性への設定値を含む  ことを特徴とするストレージシステム。
【請求項９】
請求項８記載のストレージシステムであって、前記ストレージシステムのシステム構成を示すストレージシステム構成情報が前記第１の記憶デバイスに格納され、  前記第１のＣＰＵが前記ストレージシステム構成情報を参照して前記ストレージ管理ＡＰＩ属性情報を更新する  ことを特徴とするストレージシステム。
【請求項１０】
請求項９記載のストレージシステムであって、前記ストレージ管理ＡＰＩ属性情報は、前記ストレージ管理ＡＰＩ提供サーバープログラムの起動時ないし定期的に更新される  ことを特徴とするストレージシステム。
【請求項１１】
請求項８記載のストレージシステムであって、前記管理サーバーの第２のＣＰＵが、  前記ストレージ管理ＡＰＩ属性情報に前記所定の機能を実行するための要求データを設定し、  前記要求データが付加されたストレージ管理ＡＰＩ属性情報の妥当性の確認を、前記汎用処理プログラムで実行する  ことを特徴とするストレージシステム。
【請求項１２】
請求項１１記載のストレージシステムであって、前記管理サーバーの第２のＣＰＵが、  前記要求データが付加されたストレージ管理ＡＰＩ属性情報の妥当性の確認を、前記要求データに設定されている情報のタイプ及び値で行う  ことを特徴とするストレージシステム。
【請求項１３】
管理サーバーに接続されるストレージシステムの機能拡張方法であって、  前記ストレージシステムは、  第１のＣＰＵと、  第１の記憶デバイスと、を備え、  前記管理サーバーは、  第２のＣＰＵと、  第２の記憶デバイスと、を備え、  前記ストレージシステムの第１の記憶デバイスに、  前記管理サーバーと前記ストレージシステムとの接続を行うためのストレージ管理ＡＰＩ属性情報と、  前記ストレージ管理ＡＰＩ属性情報を前記管理サーバーに提供するために前記第１のＣＰＵにより実行されるストレージ管理ＡＰＩ提供サーバープログラムと、が格納され、  前記管理サーバーの第２の記憶デバイスに、  前記ストレージシステムを管理するため前記第２のＣＰＵが実行するストレージ管理アプリケーションプログラムと、  前記ストレージ管理アプリケーションプログラムを動作させるためのストレージ管理ＡＰＩライブラリと、が格納され、  前記ストレージ管理ＡＰＩライブラリに、前記第２のＣＰＵで実行する１つ以上の汎用処理プログラムを備え、  前記ストレージ管理アプリケーションプログラムが前記ストレージシステムに所定の機能を実行するため前記ストレージ管理ＡＰＩライブラリを介して前記ストレージ管理ＡＰＩ提供サーバープログラムに接続された場合、  前記第２のＣＰＵは、  前記ストレージ管理ＡＰＩ提供サーバープログラムから前記ストレージ管理ＡＰＩ属性情報を取得し、  前記ストレージ管理ＡＰＩ属性情報と前記ストレージ管理ＡＰＩライブラリの前記汎用処理プログラムを組み合わせて前記ストレージシステムへの機能を実行させる  ことを特徴とするストレージシステムの機能拡張方法。
【請求項１４】
請求項１３記載のストレージシステムの機能拡張方法であって、前記ストレージ管理ＡＰＩ属性情報は、  機能名と、前記所定の機能を実行させるための要求データのメンバーと、前記所定の機能の実行結果である応答データのメンバーとを含んで構成され、  前記要求データのメンバー及び応答データのメンバーは、メンバー名と、当該メンバー名のタイプとを含んで構成され、  前記メンバー名毎に設定される属性と当該属性への設定値を含む  ことを特徴とするストレージシステムの機能拡張方法。
【請求項１５】
請求項１４記載のストレージシステムの機能拡張方法であって、前記ストレージシステムのストレージシステム構成を示すストレージシステム構成情報が前記第１の記憶デバイスに格納され、  前記第１のＣＰＵが前記ストレージシステム構成情報を参照して前記ストレージ管理ＡＰＩ属性情報を更新する  ことを特徴とするストレージシステムの機能拡張方法。 
【発明の詳細な説明】
【技術分野】
【０００１】  本発明は、ストレージ管理システム、ストレージシステム及び機能拡張方法に関する。
【背景技術】
【０００２】  近年、企業の管理する計算機システムやストレージシステムなどのＩＴシステムは、データや業務ソフトウェアの増加、仮想化などのＩＴプラットフォーム技術の高度化などに伴って年々複雑化している。そこで、ＩＴシステムの運用を容易にするために、ストレージ管理サーバーで動作する様々なストレージ管理アプリケーションプログラムが多くのベンダーから提供されている。【０００３】  これらのストレージ管理アプリケーションプログラムでストレージシステムを管理するとき、そのストレージ管理アプリケーションプログラムはストレージシステムのストレージ管理ＡＰＩ（Application  Programming  Interface）を介して接続される。そして、ストレージシステムの機能拡張や新しいストレージシステムのリリース時に、このストレージ管理ＡＰＩは拡張され、このストレージ管理ＡＰＩの変更に合わせて各ストレージ管理アプリケーションプログラムを拡張する必要がある。これら技術に関するものとして、特許文献１の技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願公開第２００２／０１６１８８０号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】  ストレージ管理サーバーのストレージ管理アプリケーションプログラム側でストレージシステムの機能拡張に対応する場合、「拡張されたストレージ管理ＡＰＩを使用した新たな処理論理の追加」と「拡張されたストレージ管理ＡＰＩライブラリへの再リンク」が必要となる。そのため、既にリリース済みのストレージ管理アプリケーションプログラムでそのまま対応することができない。更に、多くのストレージ管理アプリケーションプログラムが存在するため、タイムリーに拡張していくことが困難である。【０００６】  前述の課題に対して、ストレージ管理アプリケーションプログラム（管理ＡＰ）側にはユーザー操作画面の表示機能及び入力機能のみを実装し、他の全ての機能及び処理をストレージシステムのストレージ管理ＡＰＩ提供サーバープログラム側に実装する解決手段もある。しかしながら、この手段を用いると複数のストレージ管理アプリケーションプログラムの処理をストレージシステム側のストレージ管理ＡＰＩ提供サーバープログラムで集約して実行することとなるため、ストレージシステム側の処理負荷が高くなってしまう。更に、１つの機能を実行するには多数のコマンド命令とパラメータの発行とコマンド実行結果の受信が必要となり、ストレージ管理サーバーとストレージシステムとの間の情報の送受信が急増し、通信負荷も高くなる。そこで、本発明の１つの目的は、各ストレージ管理アプリケーションプログラムでの処理論理の追加を行わず、また、ストレージ管理ＡＰＩ提供サーバープログラムを動作させるシステムでの処理負荷も高くせず、ストレージシステムで拡張された機能や新しいストレージシステムに各ストレージ管理アプリケーションプログラムを適用できるようにすることにある。
【課題を解決するための手段】
【０００７】  上記課題を解決するために、本発明の一実施形態では、ストレージ管理サーバーのストレージ管理ＡＰＩライブラリに複数の汎用的な処理を実装する。また、ストレージ管理アプリケーションプログラムがストレージ管理ＡＰＩライブラリを介してストレージ管理ＡＰＩ提供サーバープログラムと接続されたときに、ストレージ管理ＡＰＩライブラリがストレージ管理ＡＰＩ提供サーバープログラムからストレージ管理ＡＰＩ属性情報を取得する。そして、ストレージ管理アプリケーションプログラムがストレージ管理ＡＰＩライブラリを介してストレージシステムの機能を実行するときに、その機能の実行の前後でストレージ管理ＡＰＩライブラリが、ストレージ管理ＡＰＩ属性情報に従って複数の汎用的な処理を組み合わせ、組み合わせた機能をストレージ管理アプリケーションプログラムが実行する。
【発明の効果】
【０００８】  本発明の一実施形態によれば、各ストレージ管理アプリケーションプログラムでの処理論理の追加を行わず、ストレージシステムの負荷も高くせずに、ストレージシステムでの機能拡張や機能追加に既存のストレージ管理アプリケーションプログラムを適用できる。前述以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【０００９】
【図１】図１は、本実施形態の概念を示す図である。
【図２】図２は、ストレージ管理システムの全体構成を示す図である。
【図３】図３は、ストレージ管理システムでのソフトウェア構成を示す図である。
【図４】図４は、第１のストレージ管理ＡＰＩ属性定義情報（ｃｒｅａｔｅＬｄｅｖ）の構成例を示す図である。
【図５】図５は、第１のストレージ管理ＡＰＩ属性情報（ｃｒｅａｔｅＬｄｅｖ）の構成例を示す図である。
【図６】図６は、第２のストレージ管理ＡＰＩ属性定義情報（ａｄｄＬｕＰａｔｈ）の構成例を示す図である。
【図７】図７は、第２のストレージ管理ＡＰＩ属性情報（ａｄｄＬｕＰａｔｈ）の構成例を示す図である。
【図８】図８は、ストレージ管理ＡＰＩ属性情報の生成処理の動作と、任意の機能の実行動作のシーケンスを示す図である。
【図９】図９は、要求データの妥当性チェック処理を示すフローチャート図である。
【図１０】図１０は、整数メンバーの妥当性チェック処理を示すフローチャート図である。
【図１１】図１１は、整数メンバーの妥当性チェック処理を示すフローチャート図である。
【図１２】図１２は、文字列メンバーの妥当性チェック処理を示すフローチャート図である。
【図１３】図１３は、バイト配列メンバーの妥当性チェック処理を示すフローチャート図である。
【図１４】図１４は、ストレージ管理ＡＰＩ属性情報を利用した管理アプリケーションの画面の構成例を示す図である。
【発明を実施するための形態】
【００１０】  以下、図面を参照しながら実施の形態を説明する。なお、以下の説明では、「管理テーブル」等の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていてもよい。また、データ構造に依存しないことを示すために「管理テーブル」を「管理情報」と呼ぶことができる。
【００１１】  また、「プログラム」を主語として処理を説明する場合がある。そのプログラムは、プロセッサ、例えば、ＭＰ（Micro  Processor）やＣＰＵ（Central  Processing  Unit）により実行されるもので、定められた処理をするものである。なお、プロセッサは、適宜に記憶資源（例えばメモリ）及び通信インターフェース（例えば、通信ポート）を用いながら処理を行うため、処理の主語がプロセッサとされてもよい。プロセッサは、ＣＰＵの他に専用ハードウェアを有していても良い。コンピュータプログラムは、プログラムソースから各コンピュータにインストールされても良い。プログラムソースは、例えば、プログラム配布サーバー又は記憶メディアなどで提供されるものであっても良い。
【００１２】  また、各要素、例えば、コントローラは番号などで識別可能であるが、各要素を識別可能な情報であれば、名前など他種の識別情報が用いられても良い。本実施例の図及び説明において同一部分には同一符号を付与しているが、本発明が本実施例に制限されることは無く、本発明の思想に合致するあらゆる応用例が本発明の技術的範囲に含まれる。また、特に限定しない限り、各構成要素は複数でも単数でも構わない。
【００１３】＜発明概念＞  図１は、本実施形態の概念を示す図である。本実施形態のストレージ管理システムは、ストレージシステムＡ  １ａとストレージシステムＢ  １ｂとが管理ネットワーク９１を介し、ストレージシステムの運用管理システムであるストレージ管理サーバー２（ストレージ管理サーバー２ａ／２ｂ／２ｃ）を接続される。なお、ストレージシステムＡ  １ａとストレージシステムＢ  １ｂを単にストレージシステム１と、ストレージ管理サーバー２ａ／２ｂ／２ｃを単にストレージ管理サーバー２を呼称することがある。
【００１４】  本実施形態では、（１）ストレージ管理ＡＰＩ属性情報の取得、（２）機能実行の妥当性チェック、（３）機能実行の３つの動作により、前述の「拡張されたストレージ管理ＡＰＩを使用した新たな処理論理の追加」と「拡張されたストレージ管理ＡＰＩライブラリへの再リンク」が不必要とする。なお、ライブラリとは、汎用性のある処理や機能を実行するためのプログラムを纏めたファイルであり、ＯＳやＡＰ等からコールされて所定の処理（通信処理、関数計算処理など）を実行する。また、ストレージ管理ＡＰＩとは、１つの機能を示すストレージ管理ＡＰＩ属性情報を複数纏めたインターフェースプログラムである。
【００１５】  （１）ストレージ管理ＡＰＩ属性情報の取得  ストレージ管理サーバー２が、ストレージシステムＡ  １ａのストレージ管理ＡＰＩ提供サーバープログラム３ａ内のストレージ管理ＡＰＩ属性情報１２ａ、ストレージシステムＢ  １ｂのストレージ管理ＡＰＩ提供サーバープログラム３ｂ内のストレージ管理ＡＰＩ属性情報１２ｂを取得する。また、このストレージ管理ＡＰＩ属性情報とは、どのような機能コマンドがサポートされており、そのコマンドを実行する上で必要なデータ項目の種類、そのデータ項目の型（タイプ：文字列、整数等）、そのデータ項目の属性（最大値、最小値等）を定めたものである。このストレージ管理ＡＰＩ属性情報は、ストレージシステム構成情報１５ａ／１５ｂにより、更新される。つまり、ストレージシステム１の構成が変更になるとストレージ管理ＡＰＩ属性情報も変更されたストレージシステム構成情報１５で更新される。このストレージシステム構成情報１５は、ストレージシステムの新規導入時に設定され、システムの構成が変更される毎に情報が更新される。  例えば、ストレージ管理サーバー２ａ／２ｃがストレージシステムＡ  １ａのストレージ管理ＡＰＩ属性情報１２ａを取得し、ストレージ管理サーバー２ｂ／２ｃがストレージシステムＢ  １ｂのストレージ管理ＡＰＩ属性情報１２ｂを取得する。また、各ストレージ管理サーバーのストレージ管理ＡＰＩライブラリ、例えば、ストレージ管理ＡＰＩライブラリ２２ａ）に複数種類の汎用処理プログラム（図中の汎用処理Ａ／Ｂ／Ｃ等、以下汎用処理と略す）が予め実装されている。また、各ストレージ管理サーバーのストレージ管理アプリケーションプログラムは、ストレージ管理ＡＰＩライブラリを用いて所定の処理を実行する。  以上のように、ストレージ管理サーバー２ａはストレージ管理ＡＰＩ属性情報１２ａを、ストレージ管理サーバー２ｂはストレージ管理ＡＰＩ属性情報１２ｂを、ストレージ管理サーバー２ｃはストレージ管理ＡＰＩ属性情報１２ａ及びストレージ管理ＡＰＩ属性情報１２ｂを取得し、ストレージ管理ＡＰＩライブラリに格納し保持する。
【００１６】  （２）機能実行の妥当性チェック  各ストレージ管理サーバーでは、各ストレージシステムから取得したストレージ管理ＡＰＩ属性情報に基づいて、ストレージ管理ＡＰＩライブラリに予め実装されている汎用処理（図中の汎用処理Ａ／Ｂ／Ｃ等、例えば図３のチェック処理）を組み合わせて機能の妥当性チェックを行う。例えば、ストレージ管理サーバー２ａが取得したストレージシステムＡ  １ａのストレージ管理ＡＰＩ属性情報１２ａに基づいて、汎用処理Ａ／Ｂ／Ｃ等を組み合わせてストレージシステムＡ  １ａへの機能実行の妥当性チェックを行う。同じく、ストレージ管理サーバー２ｂでは、ストレージ管理ＡＰＩ属性情報１２ｂに基づいて、汎用処理Ａ／Ｂ／Ｃ等を組み合わせてストレージシステムＢ  １ｂへの機能実行の妥当性チェックを行う。同様に、ストレージ管理サーバー２ｃでは、ストレージ管理ＡＰＩ属性情報１２ａないしストレージ管理ＡＰＩ属性情報１２ｂに基づいて、汎用処理Ａ／Ｂ／Ｃ等を組み合わせて、ストレージシステムＡ  １ａへの機能実行の妥当性チェックを行い、ストレージシステムＢ  １ｂへの機能実行の妥当性チェックも行う。妥当性チェック処理の内容については、図３で説明する。
【００１７】  （３）妥当性チェック完了後の機能実行  ストレージ管理サーバーは、妥当性チェック完了後の機能をストレージシステムに対し実行する。機能実行の命令を受けたストレージシステムは、ストレージシステム制御プログラム１４が指定された命令を実行する。ストレージシステム制御プログラム１４とは、システムの基本的な制御（ディスク制御、システム情報管理など）を行うプログラムで、後述のメモリないしディスクに格納されＣＰＵで適宜実行される。例えば、ストレージ管理サーバー２ａでは、ストレージシステムＡ  １ａへ機能を実行する。ストレージ管理サーバー２ｃでは、ストレージシステムＡ  １ａないしストレージシステムＢ  １ｂへ新機能を実行する。そして、それぞれのストレージシステム制御プログラム１４での実行結果をストレージ管理サーバーが取得する。  以上の（１）から（３）の動作により、各ストレージ管理アプリケーションプログラムでの処理論理の追加が不必要とし、ストレージ管理ＡＰＩ提供サーバープログラムへの負荷も高くせずに、ストレージシステムの拡張された機能や新しいストレージシステムに各ストレージ管理アプリケーションプログラムを適用できるようになる。この詳細な動作については後述する。
【００１８】＜システム構成＞  図２は、ストレージ管理システムの全体構成を示す図である。ストレージ管理システムは、ストレージシステム、およびストレージ管理サーバーを含んで構成される。ストレージシステムは一つでも複数でも良い。また、ストレージ管理サーバーも一つでも複数でも良い。  図２に示すストレージ管理システムでは、ストレージシステム１ａ／ストレージシステム１ｂ、ストレージシステム１の管理システムであるストレージ管理サーバー４ａ／４ｂ、ストレージ管理サーバー４ａ／４ｂを制御するための管理端末６ａ／６ｂ（以下、管理端末６）、ストレージシステム１とストレージ管理サーバー４との接続システムとしての役割を果たすアダプタサーバー５とを備え、それぞれのシステムが管理ネットワーク９１／９２により接続される。
【００１９】  ストレージシステム１ａは、ＳＶＰ（Ｓｅｒｖｉｃｅ  Ｐｒｏｃｅｓｓｏｒ）１０とストレージデバイス１３を備える。  ＳＶＰ１０には、システム全体を制御するＣＰＵ１０１、管理ネットワーク９１に接続し、ストレージ管理サーバー４やアダプタサーバー５との通信を行うＮＩＣ（Network  Interface  Card）１０２、ストレージシステムのストレージシステム構成情報２０などの制御情報やストレージ管理ＡＰＩ提供サーバープログラム３などの各種プログラムやライブラリを一時的に格納する揮発性メモリ１０３（以下、メモリ１０３）、ストレージシステム構成情報２０などの制御情報やストレージ管理ＡＰＩ提供サーバープログラム３などのプログラムやライブラリを恒久的に格納する不揮発性記憶デバイスであるディスク１０４を備える。ＳＶＰ１０は、ストレージデバイス１３の構成や状態を監視し、 ストレージ管理サーバー４やアダプタサーバー５からの管理コマンドを受け付けて、ストレージデバイス１３を制御する。ストレージ管理ＡＰＩ提供サーバープログラム３がＳＶＰ１０のＣＰＵ１０１で動作し、前述の構成や状態の監視機能及び管理コマンドの受信機能を実現する。  また、ストレージデバイス１３は、大量のデータを恒久的に格納するディスク１３６とそのディスク１３６を制御するディスクコントローラ（以下、コントローラ）１３５を備え、ホストサーバー（図示せず）とユーザーデータのやり取りを行い、ユーザーデータをディスク１３６に保管する。ストレージシステム制御プログラム１４がコントローラ１３５で動作し、前述のユーザーデータのやり取り機能とユーザーデータの保管機能を実現する。  なお、ストレージデバイス１３とＳＶＰ１０は同一筐体内にあっても良いし、異なる筐体となっていてネットワークや接続線で接続されていても良い。
【００２０】  ストレージシステム１ｂは、ＳＶＰ３１とストレージデバイス３３から構成される。ＳＶＰ３１は、ストレージシステム１ａのＳＶＰ１０と同様、ＣＰＵ３１１、ＮＩＣ３１２、メモリ３１３、ディスク３１４を備え、更にストレージデバイス３３との通信を行うＮＩＣ３１７を備える。ＳＶＰ３１は、ストレージデバイス３３の構成や状態を監視し、 ストレージ管理サーバー４やアダプタサーバー５からの管理コマンドを受け付けて、ストレージデバイス３３を制御する。ストレージ管理ＡＰＩ提供サーバープログラム３がＳＶＰ３１のＣＰＵ３１１で動作し、前述の構成や状態の監視機能及び管理コマンドの受信機能を実現する。  また、ストレージデバイス３３は、ディスク３３６、コントローラ３３５、ＳＶＰ３１との通信を行うＮＩＣ３３７を備え、ホストサーバー（図示せず）とユーザーデータのやり取りを行い、ユーザーデータをディスク３３６に保管する。ストレージシステム制御プログラム１４がコントローラ３３５で動作し、前述のユーザーデータのやり取り機能とユーザーデータの保管機能を実現する。  なお、ストレージデバイス３３とＳＶＰ３１は同一筐体内にあっても良いし、異なる筐体となっていてネットワークで接続されていても良い。また、ＳＶＰ３１には、１つ以上のストレージデバイス３３を接続することができる。
【００２１】  ストレージ管理サーバー４は、ＣＰＵ４１１、メモリ４１３、ディスク４１４、ＮＩＣ４１２／４１７を備え、単一、もしくは複数のストレージシステム１とネットワークで接続され、ストレージシステム１を操作するユーザーインターフェースや別のストレージ管理サーバー４がストレージシステム１を操作するためのＡＰＩを提供する。別のストレージ管理サーバー４にＡＰＩを提供するストレージ管理サーバーを、特にアダプタサーバー５と呼ぶこともある。ストレージ管理アプリケーションがストレージ管理サーバー４のＣＰＵ４１１で動作し、前述のユーザーインターフェース機能やＡＰＩ提供機能を実現する。  アダプタサーバー５は、ＣＰＵ５１１、メモリ５１３、ディスク５１４、ＮＩＣ５１２／５１７を備える。  また、図示はしていないが、管理端末６もストレージ管理サーバー４と同様のハードウェア構成を備え、更にキーボードやマウスなどの情報入力装置や液晶ディスプレイなどの表示装置を備える。なお、各システムの構成は全て同じである必要はなく、管理端末６のように、情報入力装置または表示装置を備えてもよい。
【００２２】＜ソフトウェア構成＞  図３は、ストレージ管理システムでのソフトウェア構成を示す図である。ストレージシステム１ａのソフトウェアとして、ストレージ管理ＡＰＩ提供サーバープログラム３ａがストレージシステム１ａのディスク１０４またはディスク１３６に格納され、ＣＰＵ１０１ないしコントローラ１３５により適宜メモリ１０３に読み出されて使用される。なお、ストレージ管理ＡＰＩ提供サーバープログラム３ａによりストレージ管理ＡＰＩ属性情報１２ａが管理される。また、ストレージシステム１ａと同様、ストレージシステム１ｂのソフトウェアとして、ストレージ管理ＡＰＩ提供サーバープログラム１ｂがストレージシステム１ｂのディスク３１４またはディスク３３６に格納され、ＣＰＵ３１１ないしコントローラ３３５により適宜メモリ３１３に読み出されて実行される。なお、ストレージ管理ＡＰＩ提供サーバープログラム３ｂによりストレージ管理ＡＰＩ属性情報１２ｂが管理される。  このストレージ管理ＡＰＩ属性情報１２ａは、ディスク１０４ないしディスク１３６に格納され、ＣＰＵ１０１やコントローラ１３５により適宜メモリ１０３に読み出され、ＮＩＣ１０２で接続されるネットワーク９１経由でストレージ管理サーバー４やアダプタサーバー５に提供される。  また、ストレージ管理ＡＰＩ属性情報１２ｂは、ディスク３１４ないしディスク３３６に格納され、ＣＰＵ３１１やコントローラ３３５により適宜メモリ３１３に読み出され、ＮＩＣ３１２で接続されるネットワーク９１経由でストレージ管理サーバー４やアダプタサーバー５に提供される。  なお、図示はしていないがストレージ管理ＡＰＩ属性情報１２aを生成するためのストレージ管理ＡＰＩ属性定義情報（図４ないし図６参照）も、ディスク３１４ないしディスク３３６に格納されている。そして、ストレージ管理ＡＰＩ属性定義情報はＣＰＵ３１１やコントローラ３３５によりディスク３１４ないしディスク３３６から適宜メモリ３１３に読み出され、同じく読み出されたストレージシステム１ａのストレージシステム構成情報１５ａに基づいてストレージ管理ＡＰＩ属性情報１２aが生成される。ストレージ管理ＡＰＩ属性情報１２ｂもストレージ管理ＡＰＩ属性情報１２aと同様である。詳細な動作については後述する。
【００２３】  ストレージ管理サーバー４ａのソフトウェアとして、ストレージ管理アプリケーションプログラム（管理ＡＰ）４１ａがある。ストレージ管理ＡＰ４１ａは、前述のようにストレージシステム１ａのストレージ管理ＡＰＩ属性情報１２ａないしストレージシステム１ｂのストレージ管理ＡＰＩ属性情報１２ｂと、ストレージ管理ＡＰＩライブラリ４２ａとを用いて所定の機能をストレージシステム１ａないしストレージシステム１ｂに対してＣＰＵ４１１で実行するソフトウェアである。ストレージ管理ＡＰ４１ａはディスク４１４に格納され、適宜ＣＰＵ４１１によりメモリ４１３に読み出され実行される。また、ストレージ管理ＡＰＩライブラリ４２ａもディスク４１４に格納され、適宜ＣＰＵ４１１によりメモリ４１３に読み出され、ストレージ管理ＡＰ４１ａの実行時に用いられる。更に、ストレージシステム１から取得されるストレージ管理ＡＰＩ属性情報１２もディスク４１４に一旦格納され、適宜ＣＰＵ４１１によりメモリ４１３に読み出され、ストレージ管理ＡＰ４１ａの実行時に用いられる。  ストレージ管理サーバー４ｂのソフトウェアとして、ストレージ管理ＡＰ４１ｂがある。ストレージ管理ＡＰ４１ｂは、ストレージ管理ＡＰ４１ａと同様、ストレージ管理ＡＰＩ属性情報とストレージ管理ＡＰＩライブラリとを用いて所定の機能をストレージシステム１ａないしストレージシステム１ｂに対してＣＰＵ４２１で実行するソフトウェアでディスク４２４に格納され、メモリ４２３に読み出され実行される。
【００２４】  アダプタサーバー５のソフトウェアとして、ストレージ管理サーバー４ｂのストレージ管理ＡＰ４１ｂがストレージシステム１ａないしストレージシステム１ｂに対して機能を実行する際のアダプタの役割を果たすアダプタプログラム（以下、アダプタ）５１がある。アダプタ５１は、ストレージシステム１ａのストレージ管理ＡＰＩ属性情報１２ａないしストレージシステム１ｂのストレージ管理ＡＰＩ属性情報１２ｂと、ストレージ管理ＡＰＩライブラリ５２とを用いて、ストレージ管理サーバー４ｂのストレージ管理ＡＰ４１ｂからの要求に応じた機能をストレージシステム１ａないしストレージシステム１ｂに対してＣＰＵ５１１で実行するソフトウェアである。このアダプタサーバー５のアダプタ５により、ストレージ管理サーバー４ｂでは、ストレージ管理ＡＰＩライブラリの実装とストレージ管理ＡＰＩ属性情報の取得が不要となる。このアダプタ５１はディスク５１４に格納され、ストレージ管理ＡＰ４１ｂがＣＰＵ４２１で動作する場合、ＣＰＵ５１１によりディスク５１４からメモリ５１３に読み出され実行される。また、ストレージ管理ＡＰＩライブラリ５２及びストレージ管理ＡＰＩ属性情報１２はディスク５１４に格納され、ストレージ管理ＡＰ４１ｂがＣＰＵ４２１で動作する場合、必要に応じてＣＰＵ５１１がメモリ５１３に読み出して実行する。
【００２５】  ストレージ管理ＡＰＩライブラリ４２ａないしストレージ管理ＡＰＩライブラリ５２には、汎用処理として、例えば、依存メンバーチェック処理、最大値（静的）チェック処理、最小値（静的）チェック処理、使用可能値（静的）チェック処理、最大値（動的）チェック処理、最小値（動的）チェック処理、使用可能値（動的）チェック処理などの各種汎用処理を格納し予め実装しておく。なお、汎用処理は、チェック処理に限定されるものではなく、チェック処理結果をエラーコードで表示する処理、更にエラーメッセージに変換する処理などを加えることもできる。
【００２６】  なお、複数のストレージ管理ＡＰＩ提供サーバープログラムから複数種類のストレージ管理ＡＰＩ属性情報を取得することがストレージ管理サーバー４／アダプタサーバー５で可能である。そのため、ストレージ管理サーバー４／アダプタサーバー５で１つのストレージ管理ＡＰＩライブラリを用いて異なるストレージシステムの管理を行うことができる。また、ストレージ管理ＡＰＩライブラリに実装されている汎用処理はエンハンスで追加することが可能である。
【００２７】＜ストレージ管理ＡＰＩ属性定義情報１＞  図４は、第１のストレージ管理ＡＰＩ属性定義情報の構成例を示す図である。ストレージ管理ＡＰＩ属性定義情報とは、機能内容と必要なパラメータ（設定値）を定義した属性情報でストレージ管理ＡＰＩ属性情報の基となる情報である。図４のストレージ管理ＡＰＩ属性定義情報４００では、ｃｒｅａｔｅＬｄｅｖ機能（ＬＤＥＶ作成機能）を例とした場合である。このストレージ管理ＡＰＩ属性定義情報４００は、ストレージ管理ＡＰＩ提供サーバープログラム３が起動（動作開始）した際に、ストレージシステム１ａのメモリ１０３ないしディスク１０４／ディスク１３６からＣＰＵ１０１が取得する。なお、ストレージシステム１ｂの場合は、ストレージ管理ＡＰＩ属性定義情報をメモリ３１３ないしディスク３１４／ディスク３３６からＣＰＵ３１１が取得する。
【００２８】  ストレージ管理ＡＰＩ属性定義情報４００は、機能名が“ｃｒｅａｔｅＬｄｅｖ”で、要求データのメンバーとして４つあり、名前（メンバー名）がそれぞれ“ＬｄｅｖＩｄ”、“Ｎｉｃｋｎａｍｅ”、“Ｃａｐａｃｉｔｙ”、“ＰｏｏｌＩｄ”で対応する型（タイプ）はそれぞれ“整数”、“文字列”、“整数”、“整数”である。また、要求データに対する応答データのメンバーは１つあり、名前が“Ｒｅｓｕｌｔ”で型は“整数”である。
【００２９】  要求データのメンバー“ＬｄｅｖＩｄ”、“Ｎｉｃｋｎａｍｅ”、“Ｃａｐａｃｉｔｙ”、“ＰｏｏｌＩｄ”それぞれに対応するストレージ管理ＡＰＩ属性定義情報が符号４０１から４０４で、応答データのメンバー“Ｒｅｓｕｌｔ”に対するストレージ管理ＡＰＩ属性定義情報が符号４０５である。
【００３０】  ストレージ管理ＡＰＩ属性定義情報４０１（メンバー名：“ＬｄｅｖＩｄ”）のメンバーの属性は、“最大値（静的）”、“最小値（静的）”、“使用可能値（動的）”の３つあり、それぞれの値が整数で設定される。“最大値（静的）”及び“最小値（静的）”の値が、ストレージ管理ＡＰＩ提供サーバープログラムの起動時にメモリ１０３／メモリ３１３やディスク１０４／ディスク３１４ないしディスク１３６／ディスク３３６に格納されたファイルの情報で設定される。属性“使用可能値（動的）”は、ストレージ管理ＡＰＩ提供サーバープログラム３がストレージシステム１のストレージシステム構成情報１５を取得した場合に設定される。
【００３１】  ストレージ管理ＡＰＩ属性定義情報４０２（メンバー名：“Ｎｉｃｋｎａｍｅ”）のメンバーの属性は、“最大文字列長”、“最小文字列長”、“使用可能文字”の３つあり、“最大文字列長”が３２、“最小文字列長”が０という整数で、“使用可能文字”が“ａ−ｚ、Ａ−Ｚ、０−９”で指定される文字列で設定される。
【００３２】  ストレージ管理ＡＰＩ属性定義情報４０３（メンバー名：“Ｃａｐａｃｉｔｙ”）のメンバーの属性は、“依存メンバー”、“最大値（静的）”、“最小値（静的）”、“最大値（動的）”である。“依存メンバー”は、メンバー名が“ＰｏｏｌＩｄ”であるストレージ管理ＡＰＩ属性定義情報４０４の内容を取得するための情報である。また、属性“最大値（動的）”は、前述の属性“使用可能値（動的）”と同様、ストレージ管理ＡＰＩ提供サーバープログラム３がストレージシステム１のストレージシステム構成情報１５を取得した場合に設定される。
【００３３】  ストレージ管理ＡＰＩ属性定義情報４０４（メンバー名：“ＰｏｏｌＩｄ”）のメンバーの属性は、ストレージ管理ＡＰＩ属性定義情報４０１と同様である。ストレージ管理ＡＰＩ属性定義情報４０５のメンバーの属性はなく、機能名が“ｃｒｅａｔｅＬｄｅｖ”を実行した結果が応答データにＲｅｓｕｌｔというメンバー名で整数として格納されることを示す。応答データのＲｅｓｕｌｔの格納値は、例えば、“０”が正常動作、“０”以外が異常終了という値によって実行した結果を判断できるようにする。
【００３４】  なお、要求データ、応答データのメンバーはストレージシステムのエンハンス（改良：機能拡張、新機能追加など）で、ストレージ管理ＡＰＩ属性定義情報に追加することが可能である。また、メンバーの型はエンハンスで変更することが可能である。メンバーの属性もエンハンスでストレージ管理ＡＰＩ属性定義情報に追加することが可能である。メンバーの属性の値はエンハンスで変更することが可能である。
【００３５】＜ストレージ管理ＡＰＩ属性情報１＞  図５は、第１のストレージ管理ＡＰＩ属性情報（ｃｒｅａｔｅＬｄｅｖ）の構成例を示す図である。図８で後述するＳ８１５の処理でストレージシステム１のシステム情報を元にストレージ管理ＡＰＩ属性定義情報４００に動的な情報を格納して、ストレージ管理ＡＰＩ属性情報５００を生成する。
【００３６】  ストレージ管理ＡＰＩ属性情報５０１（メンバー名：“ＬｄｅｖＩｄ”）の属性“使用可能値（動的）”には、取得したストレージシステム１のシステム情報から“２１−３０”、“１００−１０２３”が格納される。すなわち、ＬｄｅｖＩｄが“２１−３０”、“１００−１０２３”は未使用で、この番号のＬＤＥＶを生成することが可能であることを意味する。
【００３７】  ストレージ管理ＡＰＩ属性情報５０４（メンバー名：“ＰｏｏｌＩｄ”）の属性“使用可能値（動的）”には、取得した情報から“０、２、１００”が格納される。すなわち、ＰｏｏｌＩｄが“０”、“２”、“１００”であるプールが生成されたプールで使用可能なものを示している。そして、本情報を引数としてストレージ管理ＡＰＩ属性情報５０３（メンバー名：“Ｃａｐａｃｉｔｙ”）に伝達される。つまり、メンバー名が“ストレージ管理ＡＰＩ属性情報５０３の属性“最大値（動的）”で、“ＰｏｏｌＩｄ＝０のとき最大値（動的）は６５５３５”、“ＰｏｏｌＩｄ＝２のとき最大値（動的）は４０９６”、“ＰｏｏｌＩｄ＝１００のとき最大値（動的）は１００００”と“ＰｏｏｌＩｄ”の情報が引用される。
【００３８】  本実施形態では、例えば、拡張前のストレージ管理ＡＰＩで、機能名が“ｃｒｅａｔｅＬｄｅｖ”であるストレージ管理ＡＰＩ属性定義情報には、メンバー名が“Ｎｉｃｋｎａｍｅ”（型：“整数”）がなく、拡張後のストレージ管理ＡＰＩで、メンバー名が“Ｎｉｃｋｎａｍｅ”（型：“整数”）がサポートされたとする。管理アプリケーション側では、この拡張後のストレージ管理ＡＰＩでのメンバー名が“Ｎｉｃｋｎａｍｅ”（型：“整数”）の機能が実行できるようにする必要がある。そこで、この“ｃｒｅａｔｅＬｄｅｖ”機能が実行要求をストレージシステム１のストレージ管理ＡＰＩ提供サーバープログラム３が受信すると、機能拡張後のストレージ管理ＡＰＩ属性定義情報から生成されたストレージ管理ＡＰＩ属性情報を管理アプリケーション側のストレージ管理ＡＰＩライブラリに送信し、ストレージ管理ＡＰＩライブラリは受信したストレージ管理ＡＰＩ属性情報を内部に格納し保持する。そして、この“ｃｒｅａｔｅＬｄｅｖ”機能への設定情報が妥当であるかを汎用処理である妥当性チェック処理で判断し、拡張機能の実行を可能とする。その妥当性チェック処理の詳細動作については図８以降で詳述する。
【００３９】＜ストレージ管理ＡＰＩ属性定義情報２＞  図６は、第２のストレージ管理ＡＰＩ属性定義情報（ａｄｄＬｕＰａｔｈ）の構成例を示す図である。図６のストレージ管理ＡＰＩ属性定義情報６００では、ａｄｄＬｕＰａｔｈ機能（ＬＵパス追加機能）を例とした場合である。このストレージ管理ＡＰＩ属性定義情報６００も、ストレージ管理ＡＰＩ属性定義情報４００と同様、ストレージ管理ＡＰＩ提供サーバープログラム３が起動（動作開始）した際に、ストレージシステム１ａのメモリ１０３ないしディスク１０４／ディスク１３６からＣＰＵ１０１が取得する。なお、ストレージシステム１ｂの場合は、ストレージ管理ＡＰＩ属性定義情報をメモリ３１３ないしディスク３１４／ディスク３３６からＣＰＵ３１１が取得する。
【００４０】  ストレージ管理ＡＰＩ属性定義情報６００は、機能名が“ａｄｄＬｕＰａｔｈ”で、要求データのメンバーとして４つあり、名前（メンバー名）がそれぞれ“ＨｏｓｔＷｗｎ”、“ＰｏｒｔＩｄ”、“Ｌｕｎ”、“ＬｄｅｖＩｄ”で対応する型（タイプ）はそれぞれ“バイト配列”、“整数”、“整数”、“整数”である。また、要求データに対する応答データのメンバーは１つあり、名前が“Ｒｅｓｕｌｔ”で型は“整数”である。
【００４１】  要求データのメンバー“ＨｏｓｔＷｗｎ”、“ＰｏｒｔＩｄ”、“Ｌｕｎ”、“ＬｄｅｖＩｄ”それぞれに対応するストレージ管理ＡＰＩ属性定義情報が符号６０１から６０４で、応答データのメンバー“Ｒｅｓｕｌｔ”に対するストレージ管理ＡＰＩ属性定義情報が符号６０５である。
【００４２】  ストレージ管理ＡＰＩ属性定義情報６０１（メンバー名：“ＨｏｓｔＷｗｎ”）のメンバーの属性は、“配列長”で８バイトの情報で定義される。ストレージ管理ＡＰＩ属性定義情報６０３（メンバー名：“Ｌｕｎ”）のメンバーの属性は、“依存メンバー”、“最大値（静的）”、“最小値（静的）”、“最大値（動的）”である。“依存メンバー”は、メンバー名が“ＰｏｒｔＩｄ”であるストレージ管理ＡＰＩ属性定義情報６０２の内容を取得するための情報である。ストレージ管理ＡＰＩ属性定義情報６０２（メンバー名：“ＰｏｒｔＩｄ”）とストレージ管理ＡＰＩ属性定義情報６０４（メンバー名：“ＬｄｅｖＩｄ”）は、前述のストレージ管理ＡＰＩ属性定義情報４０１（メンバー名：“ＬｄｅｖＩｄ”）ないしストレージ管理ＡＰＩ属性定義情報４０４（メンバー名：“ＰｏｏｌＩｄ”）の構成と同様である。
【００４３】  なお、要求データ、応答データのメンバー、メンバーの属性はエンハンスでストレージ管理ＡＰＩ属性定義情報への追加が可能で、メンバーの属性の値もエンハンスでストレージ管理ＡＰＩ属性定義情報の変更が可能である。メンバーの型もエンハンスでストレージ管理ＡＰＩ属性定義情報への追加が可能である。
【００４４】＜ストレージ管理ＡＰＩ属性情報２＞  図７は、第２のストレージ管理ＡＰＩ属性情報（ａｄｄＬｕＰａｔｈ）の構成例を示す図である。図８のＳ８１５でストレージシステムの情報を元にストレージ管理ＡＰＩ属性定義情報に動的な情報を格納して、本ストレージ管理ＡＰＩ属性情報を生成する。
【００４５】  本例でも、図５と同様、ストレージ管理ＡＰＩ属性情報７０２（メンバー名：“ＰｏｒｔＩｄ”）の属性“使用可能値（動的）”には、取得した情報から“０、１、２、３”が格納され、０番から３番までのポートが使用可能であることが分かる。ストレージ管理ＡＰＩ属性情報７０３（メンバー名：“Ｌｕｎ”）、ストレージ管理ＡＰＩ属性情報７０４（メンバー名：“ＬｄｅｖＩｄ”）も、ストレージ管理ＡＰＩ属性情報７０２（メンバー名：“ＰｏｒｔＩｄ”）と同様である。なお、前述のストレージ管理ＡＰＩ属性定義情報及びストレージ管理ＡＰＩ属性情報は、機能名が“ｃｒｅａｔｅＬｄｅｖ”（ＬＤＥＶ生成）と、“ａｄｄＬｕＰａｔｈ”（ＬＵＮパス追加）という機能について説明したがこれに限定されるものではなく、機能がボリューム容量拡張、差分データ保存（スナップショット実行）、ボリューム種別変更などでもよい。また、本実施形態では既存の機能へのメンバー追加を例として、説明したが、ボリュームに関する命令として、前述のＬＤＥＶ生成やボリューム容量拡張とは、異なる新機能である「ボリューム削除」という命令を新規に追加して汎用処理とを組み合わせることで、メンバー追加時と同等の効果を得ることができる。
【００４６】＜動作シーケンス＞  図８は、ストレージ管理ＡＰＩ属性情報の生成処理の動作と、任意の機能の実行動作のシーケンスを示す図である。処理の主体を、各ソフトウェアないしシステムとするが、ストレージシステム１またはストレージ管理サーバー４、アダプタサーバー５単体でもよく、各システムのＣＰＵでもよい。
【００４７】  Ｓ８１１で、ストレージシステム１のＣＰＵ１０１／ＣＰＵ３１１で動作するストレージ管理ＡＰＩ提供サーバープログラム３は、プログラム起動命令により自身の起動を開始する。プログラム起動命令は、スケジューラ等で定期的に、またはストレージシステム１の構成や機能が追加・変更されたことを契機に発行される。  Ｓ８１２で、ストレージ管理ＡＰＩ提供サーバープログラム３は、ストレージシステム１のメモリ１０３／メモリ３１３ないしディスク１０４／ディスク３１４に格納されたストレージ管理ＡＰＩ属性定義情報を読み出す。  Ｓ８１３で、ストレージ管理ＡＰＩ提供サーバープログラム３は、ストレージシステム１のストレージシステム構成情報１５（ボリュームの生成状態情報、ストレージプールの生成・使用状態情報や上位システムとの接続ポート情報など）を取得するための命令をストレージシステム制御プログラム１４に発行する。なお、ストレージシステム１のストレージシステム構成情報１５は、予めストレージシステム１のメモリ１０３／メモリ３１３ないしディスク１０４／ディスク３１４に格納しておき、ストレージ管理ＡＰＩ提供サーバープログラム３が取得するようにしてもよい。
【００４８】  Ｓ８１４で、取得命令を受信したストレージシステム制御プログラム１４はメモリ１０３／メモリ３１３ないしディスク１０４／ディスク３１４に格納してあるストレージシステム１のストレージシステム構成情報１５を読み出してストレージ管理ＡＰＩ提供サーバープログラム３に送信する。ストレージ管理ＡＰＩ提供サーバープログラム３は、取得したストレージシステム構成情報１５をストレージ管理ＡＰＩ提供サーバープログラム３が管理するメモリ１０３／メモリ３１３ないしディスク１０４／ディスク３１４の記憶領域に格納する。  Ｓ８１５で、ストレージ管理ＡＰＩ提供サーバープログラム３は、Ｓ８１４で取得したストレージシステム構成情報１５で、ストレージ管理ＡＰＩ属性定義情報（例えば、ストレージ管理ＡＰＩ属性定義情報４００）を更新し、ストレージ管理ＡＰＩ属性情報（例えば、ストレージ管理ＡＰＩ属性情報５００）を生成する。そして、ストレージ管理ＡＰＩ提供サーバープログラム３は、生成したストレージ管理ＡＰＩ属性情報をメモリ１０３／メモリ３１３ないしディスク１０４／ディスク３１４に格納する。このＳ８１５の処理をストレージ管理ＡＰＩでサポートしている全ての機能に対して実行する。  以上のＳ８１１からＳ８１５の処理で、ストレージ管理ＡＰＩ提供サーバープログラム３は、最新のストレージ管理ＡＰＩ属性情報を生成できる。Ｓ８１２の処理は、サーバー起動開始時だけでなく、スケジューラ等で定期的に、または拡張ＡＰＩ実装時にファイルから読み込むようにしてもよい。また、Ｓ８１３からＳ８１５のストレージ管理ＡＰＩ属性情報の生成も同様である。なお、ストレージ管理ＡＰ４１ないしアダプタ５１からの機能実行要求で該当する機能または全機能のストレージ管理ＡＰＩ属性情報を更新するようにしてもよい。
【００４９】  Ｓ８２１で、ストレージ管理サーバー４（ＣＰＵ４１１）で動作するストレージ管理ＡＰ４１ないしアダプタサーバー５（ＣＰＵ５１１）で動作するアダプタ５１は、システム管理者から任意の機能を実行する命令を受領する。つまり、システム運用管理者が管理端末６の入力装置で所定処理の実行命令を入力し、その命令を管理端末６が受け付けてストレージ管理サーバー４ないしアダプタサーバー５に転送することを契機に、ストレージ管理サーバー４（ＣＰＵ４１１）ないしアダプタサーバー５（ＣＰＵ５１１）によりＳ８２１の処理が開始される。
【００５０】  Ｓ８２２で、任意機能の実行命令を受領したストレージ管理ＡＰ４１／アダプタ５１は、その命令の機能名の機能を実行する準備を行う。つまり、ストレージ管理ＡＰ４１／アダプタ５１が動作するストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、ストレージ管理ＡＰＩライブラリ４２／５２を介して機能名に対するストレージ管理ＡＰＩ属性情報の取得を、ストレージ管理ＡＰＩ提供サーバープログラム３に要求する。  Ｓ８２３で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、ストレージ管理ＡＰＩ提供サーバープログラム３から機能名に対応するストレージ管理ＡＰＩ属性情報の取得を要求する。例えば、ＬＤＥＶ生成機能を実行するためには、図５でのストレージ管理ＡＰＩ属性情報５００から５０４を取得する。  Ｓ８２４で、ストレージ管理ＡＰＩ提供サーバープログラム３は、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）に機能名に対応するストレージ管理ＡＰＩ属性情報を送信する。ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、受信したストレージ管理ＡＰＩ属性情報をストレージ管理ＡＰＩライブラリ４２／５２に組み込む。ストレージ管理ＡＰＩ属性情報を組み込んだストレージ管理ＡＰＩライブラリ４２／５２は、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）により、メモリ４１３／メモリ５１３またはディスク４１４／ディスク５１４に格納し保持される。  Ｓ８２５で、機能名に対応するストレージ管理ＡＰＩ属性情報のストレージ管理ＡＰＩライブラリ４２／５２への組み込み完了後、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、機能実行の準備完了をストレージ管理ＡＰ４１／アダプタ５１に通知する。前述のように、拡張前のストレージ管理ＡＰＩではメンバー名が“Ｎｉｃｋｎａｍｅ”（型：“整数”）がなく、拡張後のストレージ管理ＡＰＩでメンバー名“Ｎｉｃｋｎａｍｅ”がサポートされた場合でも、図１４のように、メンバー名“Ｎｉｃｋｎａｍｅ”及び型の表示と入力（要求データの設定）ができる。
【００５１】  Ｓ８２６で、ストレージ管理ＡＰ４１／アダプタ５１は、機能の要求データを設定して、ストレージ管理ＡＰＩライブラリ４２／５２へ送信する。機能の要求データの設定は、図１４に示す管理アプリケーションでの画面を用いて行う。なお、設定される要求データの例として、図５に示すストレージ管理ＡＰＩ属性情報５００から５０４の情報である。設定された要求データに問題がないかの妥当性チェックを、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）がＳ８２７で行う。  Ｓ８２７で、要求データをストレージ管理ＡＰＩライブラリ４２／５２が受信すると、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、ストレージ管理ＡＰＩライブラリ４２／５２に予め実装して備えられた汎用処理で要求データの妥当性チェックを行う。妥当性チェックは、サポートメンバー、その型（タイプ）、及びその属性の確認を行うが、その詳細については図９から図１３で詳述する。妥当性チェックで問題がなければ、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、ストレージ管理ＡＰＩライブラリ４２／５２でサポートされた汎用処理を用いて、Ｓ８２８を実行し、問題があればエラー報告をストレージ管理ＡＰ４１／アダプタ５１へ行う。  Ｓ８２８で、要求データを指定された命令の引数としてストレージ管理ＡＰＩライブラリ４２／５２に保存するため、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、ストレージ管理ＡＰＩライブラリ４２／５２が管理している記憶領域（メモリ１０３／メモリ３１３ないしディスク１０４／ディスク３１４）に要求データを格納する。
【００５２】  Ｓ８２９で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、ストレージ管理ＡＰＩライブラリ４２／５２に機能の要求データの設定が完了したことをストレージ管理ＡＰ４１／アダプタ５１に通知する。  Ｓ８３０で、機能の要求データの設定完了通知を受領したストレージ管理ＡＰ４１／アダプタ５１は指定された機能実行を、ストレージ管理ＡＰＩライブラリ４２／５２を介しストレージ管理ＡＰＩ提供サーバープログラム３へ要求する。  Ｓ８３１で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、機能実行の要求を受けたストレージ管理ＡＰＩライブラリ４２／５２を介してストレージ管理ＡＰＩ提供サーバープログラム３へ機能実行命令を要求データと共に送信する。  Ｓ８３２で、ストレージ管理ＡＰＩ提供サーバープログラム３はストレージシステム制御プログラム１４に要求データ付の機能実行命令を送信する。そして、ストレージシステム制御プログラム１４は、受信した要求データ付の機能を実行し、実行結果を自身が管理しているメモリ１０３／メモリ３１３ないしディスク１０４／ディスク３１４の記憶領域に格納する。
【００５３】  Ｓ８３３で、ストレージシステム制御プログラム１４は、前述の実行結果を応答データとして、ストレージ管理ＡＰＩ提供サーバープログラム３へ送信する。  Ｓ８３４で、ストレージ管理ＡＰＩ提供サーバープログラム３は、応答データをストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）に送信する。この応答データは、例えば、ストレージ管理ＡＰＩ属性情報５００の応答データメンバーと、ストレージ管理ＡＰＩ属性情報５０５の応答データメンバーの属性及び値が該当する。ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、受信した応答データをストレージ管理ＡＰＩライブラリ４２／５２に組み込む。応答データを組み込んだストレージ管理ＡＰＩライブラリ４２／５２は、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）により、メモリ４１３／メモリ５１３またはディスク４１４／ディスク５１４に格納し保持される。  Ｓ８３５で、応答データのストレージ管理ＡＰＩライブラリ４２／５２への格納完了後に、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、ストレージ管理ＡＰ４１／アダプタ５１へ機能実行の完了通知を送信する。
【００５４】  Ｓ８３６で、機能実行の完了を確認したストレージ管理ＡＰ４１／アダプタ５１は、機能の応答データ取得要求をストレージ管理ＡＰＩライブラリ４２／５２へ送信する。  Ｓ８３７で、機能の応答データ取得要求をストレージ管理ＡＰＩライブラリ４２／５２を介して受信したストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、メモリ４１３／メモリ５１３またはディスク４１４／ディスク５１４に格納し保持されている応答データを読み出して取得する。  Ｓ８３８で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、取得した応答データをストレージ管理ＡＰ４１／アダプタ５１へ送信する。  Ｓ８３９で、ストレージ管理ＡＰ４１／アダプタ５１は、取得した応答データ管理端末６に転送し、任意の機能の実行結果を表示装置等に表示してシステム管理者へ要求機能の実行結果を通知する。
【００５５】  Ｓ８４１からＳ８４３の処理は、Ｓ８１３からＳ８１５の処理と同じである。このＳ８４１からＳ８４３の処理は、スケジューラ等で定期的（一定時刻に到達時）に、またはストレージシステム１の構成や機能が追加・変更されたこと（ストレージ管理ＡＰＩ属性定義情報が更新された場合やストレージシステム１のストレージシステム構成情報１５が更新された場合）を契機に実行される。また、ストレージ管理ＡＰＩ提供サーバープログラム３へのアクセス毎に、ストレージ管理ＡＰＩ属性定義情報とストレージシステム１のストレージシステム構成情報１５を取得し、ストレージ管理ＡＰＩ属性情報を生成してもよい。
【００５６】  以上のように、任意の機能を実行する際、ストレージ管理ＡＰＩ属性情報を取得して、その機能に合致した要求データを設定し、その妥当性をチェックすることにより、ストレージシステム１で機能が拡張されても管理側のアプリケーションをエンハンス（改良）することなく拡張された機能を実行できる。なお、本実施形態の汎用処理は、妥当性チェック処理に限定にされるものではなく、例えば、ストレージ管理ＡＰＩライブラリ５２に格納済のストレージ管理ＡＰＩ属性情報と、取得したストレージ管理ＡＰＩ属性情報との差分有無を検出する処理、追加されたメンバーや属性・型・値の変更内容を検出する処理等もあり、これら処理を予めストレージ管理ＡＰＩライブラリ４２／５２に実装することも可能である。更に、応答データの整数値（命令実行結果の内容を示す値）をストレージ管理サーバーやストレージシステム１の運用管理するシステム管理者が分かり易いメッセージに変更するための汎用処理でもよい。
【００５７】＜要求データの妥当性チェック処理＞  図９は、要求データの妥当性チェック処理を示すフローチャート図である。本処理は、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）がストレージ管理ＡＰＩライブラリ４２／５２に実装された汎用処理を用いて実行する。要求データの妥当性チェックは、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）がストレージ管理ＡＰＩライブラリ４２／５２のＳ８２７の処理を実行することで開始される。ストレージ管理ＡＰＩ属性情報５００（機能名：“ｃｒｅａｔｅＬｄｅｖ”／要求データのメンバー：“ＬｄｅｖＩｄ”、“Ｎｉｃｋｎａｍｅ”、“Ｃａｐａｃｉｔｙ”、“ＰｏｏｌＩｄ”／対応する型（タイプ）：“整数”、“文字列”、“整数”、“整数”）を例として説明する。
【００５８】  Ｓ９０１で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、機能名（“ｃｒｅａｔｅＬｄｅｖ”）でサポートしているメンバーかを判断する。要求データのメンバーが“ＬｄｅｖＩｄ”、“Ｎｉｃｋｎａｍｅ”、“Ｃａｐａｃｉｔｙ”、“ＰｏｏｌＩｄ”であれば（Ｓ９０１：Ｙｅｓ）、Ｓ９０２を実行し、それ以外のメンバーであればＳ９０６を実行する。  Ｓ９０２で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、メンバーの型を判断する。メンバーの型が“整数”であればＳ９０３を、“文字列”であればＳ９０４を、“バイト配列”であればＳ９０５を実行する。例えば、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、メンバーが“ＬｄｅｖＩｄ”の型は“整数”なのでＳ９０３を、メンバーが“Ｎｉｃｋｎａｍｅ”の型は“文字列”なのでＳ９０４を、また、ストレージ管理ＡＰＩ属性情報７００の要求データのメンバーが“ＨｏｓｔＷｗｎ”の型は“バイト配列”なので、Ｓ９０５を実行する。
【００５９】  Ｓ９０３で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、整数メンバーの妥当性チェック処理（図１０及び図１１）を実施し、そのチェック結果（応答データ）を取得する。  Ｓ９０４で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、文字列メンバーの妥当性チェック処理（図１２）を実施し、そのチェック結果（応答データ）を取得する。  Ｓ９０５で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、バイト配列メンバーの妥当性チェック処理（図１３）を実施し、そのチェック結果（応答データ）を取得する。
【００６０】  Ｓ９０６で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、サポートしているメンバーに該当しないと判断して、未サポートメンバーエラーをストレージ管理ＡＰ４１／アダプタ５１へ通知する。そして、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、要求データの妥当性チェックを終了する。以上の処理で、要求データが妥当か否かを判断でき、その判断結果（チェック結果）を応答データとして生成できる。Ｓ９０１、Ｓ９０３からＳ９０５の処理それぞれが、汎用処理の１つの例である。
【００６１】＜整数メンバーの妥当性チェック処理＞  図１０及び図１１は、整数メンバーの妥当性チェック処理を示すフローチャート図である。この整数メンバーの妥当性チェック処理で要求データの妥当性を検証する。本処理は、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）がストレージ管理ＡＰＩライブラリ４２／５２に実装された汎用処理を用いて実行する。
【００６２】  Ｓ１００１で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、属性に依存メンバーが設定されているかを判断する。設定されている場合（Ｓ１００１：Ｙｅｓ）、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）はＳ１００２を実行し、設定されていない場合（Ｓ１００１：Ｎｏ）はＳ１００４を実行する。例えば、ストレージ管理ＡＰＩ属性情報５０３では、依存メンバーとして“ＰｏｏｌＩｄ”が設定されている。同様に、ストレージ管理ＡＰＩ属性情報７０３でも、依存メンバーとして“ＰｏｒｔＩｄ”が設定されている。  Ｓ１００２で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、依存メンバーのチェックを実施する。つまり、依存メンバーとして適切なメンバーの値が設定されているかをストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は判断する。例えば、ストレージ管理ＡＰＩ属性情報５０３では依存メンバーとして“ＰｏｏｌＩｄ”が設定されているので、Ｃａｐａｃｉｔｙの値を設定する前にＰｏｏｌＩｄに妥当な値が設定されているかを確認する。ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、適切なメンバーの値が設定されている場合はチェック結果を“ＯＫ”とし、設定されていない場合は“ＮＧ”とする。  Ｓ１００３で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、依存メンバーのチェック結果が“ＯＫ”の場合はＳ１００４を、“ＮＧ”の場合はＳ１０２３を実行する。Ｓ１０２３で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、依存メンバー未設定エラーをストレージ管理ＡＰ４１／アダプタ５１に通知する。
【００６３】  Ｓ１００４で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、属性に最大値（静的）が設定されているかを判断する。設定されている場合（Ｓ１００４：Ｙｅｓ）、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）はＳ１００５を実行し、設定されていない場合（Ｓ１００４：Ｎｏ）はＳ１００７を実行する。例えば、ストレージ管理ＡＰＩ属性情報５０３ないしストレージ管理ＡＰＩ属性情報７０２では、属性に最大値（静的）が設定されている。  Ｓ１００５で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、最大値（静的）のチェックを実施する。つまり、設定値が最大値（静的）以下かをストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は判断する。ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、超えている場合はチェック結果を“ＮＧ”とし、以下の場合は“ＯＫ”とする。  Ｓ１００６で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、チェック結果が“ＯＫ”であればＳ１００７を、“ＮＧ”であればＳ１０２４を実行する。Ｓ１０２４で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、最大値（静的）範囲エラーをストレージ管理ＡＰ４１／アダプタ５１に通知する。
【００６４】  Ｓ１００７で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、属性に最小値（静的）が設定されているかを判断する。設定されている場合（Ｓ１００７：Ｙｅｓ）、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）はＳ１００８を実行し、設定されていない場合（Ｓ１００７：Ｎｏ）はＳ１０１０を実行する。例えば、ストレージ管理ＡＰＩ属性情報５０３ないしストレージ管理ＡＰＩ属性情報７０２では、属性に最小値（静的）が設定されている。  Ｓ１００８で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、最小値（静的）のチェックを実施する。つまり、設定値が最小値（静的）以上かをストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は判断する。ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、未満の場合はチェック結果を“ＮＧ”とし、以上の場合は“ＯＫ”とする。  Ｓ１００９で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、チェック結果が“ＯＫ”であればＳ１０１０を、“ＮＧ”であればＳ１０２５を実行する。Ｓ１０２５で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、最小値（静的）範囲エラーをストレージ管理ＡＰ４１／アダプタ５１に通知する。
【００６５】  Ｓ１０１０で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、属性に使用可能値（静的）が設定されているかを判断する。設定されている場合（Ｓ１０１０：Ｙｅｓ）、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）はＳ１０１１を実行し、設定されていない場合（Ｓ１０１０：Ｎｏ）はＳ１０１３を実行する。  Ｓ１０１１で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、使用可能値（静的）のチェックを実施する。つまり、設定値が使用可能値（静的）に存在するかをストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は判断する。ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、存在する場合はチェック結果を“ＯＫ”とし、存在しない場合は“ＮＧ”とする。  Ｓ１０１２で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、チェック結果が“ＯＫ”であればＳ１０１３を、“ＮＧ”であればＳ１０２６を実行する。Ｓ１０２６で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、使用可能値（静的）対象外エラーをストレージ管理ＡＰ４１／アダプタ５１に通知する。
【００６６】  Ｓ１０１３で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、属性に最大値（動的）が設定されているかを判断する。設定されている場合（Ｓ１０１３：Ｙｅｓ）、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）はＳ１０１４を実行し、設定されていない場合（Ｓ１０１３：Ｎｏ）はＳ１０１６を実行する。例えば、ストレージ管理ＡＰＩ属性情報５０３では、属性に最大値（動的）が設定されている。  Ｓ１０１４で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、最大値（動的）のチェックを実施する。つまり、設定値が最大値（動的）以下かをストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は判断する。ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、超えている場合はチェック結果を“ＮＧ”とし、以下の場合は“ＯＫ”とする。  Ｓ１０１５で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、チェック結果が“ＯＫ”であればＳ１０１６を、“ＮＧ”であればＳ１０２７を実行する。Ｓ１０２７で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、最大値（動的）範囲エラーをストレージ管理ＡＰ４１／アダプタ５１に通知する。
【００６７】  Ｓ１０１６で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、属性に最小値（動的）が設定されているかを判断する。設定されている場合（Ｓ１０１６：Ｙｅｓ）、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）はＳ１０１７を実行し、設定されていない場合（Ｓ１０１６：Ｎｏ）はＳ１０１９を実行する。  Ｓ１０１７で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、最小値（動的）のチェックを実施する。つまり、設定値が最小値（動的）以上かをストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は判断する。ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、未満の場合はチェック結果を“ＮＧ”とし、以上の場合は“ＯＫ”とする。  Ｓ１０１８で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、チェック結果が“ＯＫ”であればＳ１０１９を、“ＮＧ”であればＳ１０２８を実行する。Ｓ１０２８で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、最小値（動的）範囲エラーをストレージ管理ＡＰ４１／アダプタ５１に通知する。
【００６８】  Ｓ１０１９で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、属性に使用可能値（動的）が設定されているかを判断する。設定されている場合（Ｓ１０１９：Ｙｅｓ）、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）はＳ１０２０を実行し、設定されていない場合（Ｓ１０１９：Ｎｏ）はＳ１０２２を実行する。例えば、ストレージ管理ＡＰＩ属性情報５０１ないしストレージ管理ＡＰＩ属性情報５０４、ストレージ管理ＡＰＩ属性情報７０２から７０４では、属性に使用可能値（動的）が設定されている。  Ｓ１０２０で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、使用可能値（動的）のチェックを実施する。つまり、設定値が使用可能値（動的）に存在するかをストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は判断する。ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、存在する場合はチェック結果を“ＯＫ”とし、存在しない場合は“ＮＧ”とする。  Ｓ１０２１で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、チェック結果が“ＯＫ”であればＳ１０２２を、“ＮＧ”であればＳ１０２９を実行する。Ｓ１０２９で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、使用可能値（動的）対象外エラーをストレージ管理ＡＰ４１／アダプタ５１に通知する。
【００６９】  Ｓ１０２２で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、チェックした結果、妥当と判断された値をメモリ１０３／メモリ３１３ないしディスク１０４／ディスク３１４に格納する。そして、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、整数メンバーの妥当性チェック処理を終了する。このように、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）では、ストレージ管理ＡＰＩライブラリ４２／５２に汎用処理として整数メンバーの妥当性チェック処理を組み込むことで、機能を実行できるかどうかの判断をすることができるので、設定数値に関する新機能がストレージシステム１に追加された場合でも、この汎用処理で機能の実行可否を判断できる。
【００７０】＜文字列メンバーの妥当性チェック処理＞  図１２は、文字列メンバーの妥当性チェック処理を示すフローチャート図である。この文字列メンバーの妥当性チェック処理で要求データの妥当性を検証する。本処理は、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）がストレージ管理ＡＰＩライブラリ４２／５２に実装された汎用処理を用いて実行する。
【００７１】  Ｓ１２０１で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、属性に依存メンバーが設定されているかを判断する。設定されている場合（Ｓ１２０１：Ｙｅｓ）、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）はＳ１２０２を実行し、設定されていない場合（Ｓ１２０１：Ｎｏ）はＳ１２０４を実行する。  Ｓ１２０２で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、依存メンバーのチェックを実施する。つまり、依存メンバーとして適切なメンバーが設定されているかをストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は判断する。ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、適切なメンバー名が設定されている場合はチェック結果を“ＯＫ”とし、設定されていない場合は“ＮＧ”とする。  Ｓ１２０３で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、チェック結果が“ＯＫ”であればＳ１２０４を、“ＮＧ”であればＳ１２１４を実行する。Ｓ１２１４で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、依存メンバー未設定エラーをストレージ管理ＡＰ４１／アダプタ５１に通知する。
【００７２】  Ｓ１２０４で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、属性に最大文字列長が設定されているかを判断する。設定されている場合（Ｓ１２０４：Ｙｅｓ）、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）はＳ１２０５を実行し、設定されていない場合（Ｓ１２０４：Ｎｏ）はＳ１２０７を実行する。例えば、ストレージ管理ＡＰＩ属性情報５０２では、属性に最大文字列長が設定されている。  Ｓ１２０５で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、最大文字列長のチェックを実施する。つまり、設定された文字列の文字列長が最大文字列長以下であるかをストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は判断する。最大文字列長以下である場合はチェック結果を“ＯＫ”とし、範囲外である場合は“ＮＧ”とする。  Ｓ１２０６で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、チェック結果が“ＯＫ”であればＳ１２０７を、“ＮＧ”であればＳ１２１５を実行する。Ｓ１２１５で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、最大文字列長範囲エラーをストレージ管理ＡＰ４１／アダプタ５１に通知する。
【００７３】  Ｓ１２０７で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、属性に最小文字列長が設定されているかを判断する。設定されている場合（Ｓ１２０７：Ｙｅｓ）、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）はＳ１２０８を実行し、設定されていない場合（Ｓ１２０７：Ｎｏ）はＳ１２１０を実行する。例えば、ストレージ管理ＡＰＩ属性情報５０２では、属性に最小文字列長が設定されている。  Ｓ１２０８で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、最小文字列長のチェックを実施する。つまり、設定された文字列の文字列長が最小文字列長以上であるかをストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は判断する。最小文字列長以上である場合はチェック結果を“ＯＫ”とし、範囲外である場合は“ＮＧ”とする。  Ｓ１２０９で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、チェック結果が“ＯＫ”であればＳ１２１０を、“ＮＧ”であればＳ１２１６を実行する。Ｓ１２１６で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、最小文字列長範囲エラーをストレージ管理ＡＰ４１／アダプタ５１に通知する。
【００７４】  Ｓ１２１０で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、属性に使用可能文字が設定されているかを判断する。設定されている場合（Ｓ１２１０：Ｙｅｓ）、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）はＳ１２１１を実行し、設定されていない場合（Ｓ１２１０：Ｎｏ）はＳ１２１３を実行する。例えば、ストレージ管理ＡＰＩ属性情報５０２では、属性に使用可能文字が設定されている。  Ｓ１２１１で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、使用可能文字のチェックを実施する。つまり、設定された文字列に使用されている文字が使用可能文字のみであるかをストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は判断する。使用可能文字のみである場合はチェック結果を“ＯＫ”とし、使用不可能な文字が含まれている場合は“ＮＧ”とする。  Ｓ１２１２で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、チェック結果が“ＯＫ”であればＳ１２１３を、“ＮＧ”であればＳ１２１７を実行する。Ｓ１２１７で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、使用可能文字対象外エラーをストレージ管理ＡＰ４１／アダプタ５１に通知する。
【００７５】  Ｓ１２１３で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、チェックした結果、妥当と判断された値をメモリ１０３／メモリ３１３ないしディスク１０４／ディスク３１４に格納する。そして、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、文字列メンバーの妥当性チェック処理を終了する。このように、ストレージ管理ＡＰＩライブラリ４２／５２に汎用処理として、文字列メンバーの妥当性チェック処理を組み込むことで、機能を実行できるかどうかの判断をすることができるので、文字列に関する新機能がストレージシステム１に追加または拡張された場合でも、この汎用処理で機能の実行可否を判断できる。
【００７６】＜バイト配列メンバーの妥当性チェック処理＞  図１３は、バイト配列メンバーの妥当性チェック処理を示すフローチャート図である。このバイト配列メンバーの妥当性チェック処理で要求データの妥当性を検証する。本処理は、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）がストレージ管理ＡＰＩライブラリ４２／５２に実装された汎用処理を用いて実行する。
【００７７】  Ｓ１３０１で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、属性に依存メンバーが設定されているかを判断する。設定されている場合（Ｓ１３０１：Ｙｅｓ）、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）はＳ１３０２を実行し、設定されていない場合（Ｓ１３０１：Ｎｏ）はＳ１３０４を実行する。  Ｓ１３０２で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、依存メンバーのチェックを実施する。つまり、依存メンバーとして適切なメンバーが設定されているかをストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は判断する。ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、適切なメンバー名が設定されている場合はチェック結果を“ＯＫ”とし、設定されていない場合は“ＮＧ”とする。  Ｓ１３０３で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、チェック結果が“ＯＫ”であればＳ１３０４を、“ＮＧ”であればＳ１３０８を実行する。Ｓ１３０８で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、依存メンバー未設定エラーをストレージ管理ＡＰ４１／アダプタ５１に通知する。
【００７８】  Ｓ１３０４で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、属性に配列長が設定されているかを判断する。設定されている場合（Ｓ１３０４：Ｙｅｓ）、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）はＳ１３０５を実行し、設定されていない場合（Ｓ１３０４：Ｎｏ）はＳ１３０７を実行する。例えば、ストレージ管理ＡＰＩ属性情報７０１のメンバー名“ＨｏｓｔＷｗｎ”では、属性に配列長が８バイトとして設定されている。  Ｓ１３０５で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、配列長のチェックを実施する。つまり、設定されたバイト配列の配列長が属性に設定されている配列長と一致するかをストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は判断する。一致する場合はチェック結果を“ＯＫ”とし、一致しない場合は“ＮＧ”とする。  Ｓ１３０６で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、チェック結果が“ＯＫ”であればＳ１３０７を、“ＮＧ”であればＳ１３０９を実行する。Ｓ１３０９で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、配列長不正エラーをストレージ管理ＡＰ４１／アダプタ５１に通知する。
【００７９】  Ｓ１３０７で、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、チェックした結果、妥当と判断された値をメモリ１０３／メモリ３１３ないしディスク１０４／ディスク３１４に格納する。そして、ストレージ管理サーバー４（ＣＰＵ４１１）／アダプタサーバー５（ＣＰＵ５１１）は、文字列メンバーの妥当性チェック処理を終了する。このように、ストレージ管理ＡＰＩライブラリ４２／５２に汎用処理として、バイト配列メンバーの妥当性チェック処理を組み込むことで、機能を実行できるかどうかの判断をすることができるので、バイト配列に関する新機能がストレージシステム１に追加された場合でも、この汎用処理で機能の実行可否を判断できる。
【００８０】＜管理アプリケーションでの画面構成＞  図１４は、ストレージ管理ＡＰＩ属性情報を利用した管理アプリケーションでの画面の構成例を示す図である。図１４では、ストレージ管理画面１４０で、ＬＤＥＶを生成する場合（ｃｒｅａｔｅＬｄｅｖ機能の実行時）を例としている。
【００８１】  ストレージ管理画面１４０は、ＬＤＥＶを一意に識別するための情報を入力するＬＤＥＶ  ＩＤ入力領域１４０１、生成するＬＤＥＶのニックネームを設定するための情報を入力するＮｉｃｋｎａｍｅ入力領域１４０２、生成するＬＤＥＶの記憶容量を入力するＣａｐａｃｉｔｙ入力領域１４０３、ＬＤＥＶに対応付けるプールを一意に識別するための情報を入力するＰｏｏｌ  ＩＤ入力領域１４０４、入力した情報を確定させるためのＡｐｐｌｙボタン１４０５、入力した情報を削除するためのＣａｎｃｅｌボタン１４０６で構成される。
【００８２】  各入力領域には、入力可能な数値範囲や最大文字列値などが表示され、範囲外な数値や最大値を超える値の入力は受け付けられない。これは、Ｓ８２７での要求データ（入力情報）の妥当性チェック処理でエラーとなるためである。エラーとなった場合、本画面にエラーメッセージを表示するようにしてもよい。また、エラー時に入力範囲や入力最大値を強調表示（フォント色を赤で表示する、ボールド表示するなど）するようにしてもよい。
【００８３】  以上のように、ストレージ管理ＡＰＩライブラリ４２／５２に汎用処理を実装し、ストレージ管理ＡＰＩ属性情報への要求データを、汎用処理である妥当性チェックで検証することで、各ストレージ管理ＡＰ４１での処理論理追加（プログラムの追加や改変）は不必要となる。加えて、ストレージ管理ＡＰＩ提供サーバープログラム３での処理が低減できるため処理性能の低下も防止できる。更に、ストレージシステム１の拡張された機能や新しいストレージシステムに各ストレージ管理ＡＰ４１を迅速に適用できるようになる。また、ストレージシステム１を管理する側で新機能を生成できストレージ管理ＡＰＩ提供サーバープログラム３を使用せず実行できるため、ストレージ管理ＡＰ４１とストレージ管理ＡＰＩ提供サーバープログラム３間の通信量を低減できるため、通信帯域を有効利用できる。
【００８４】  なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。また、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。
【００８５】  各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Solid  State  Drive）等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置いてもよい。また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【００８６】  １：ストレージシステム、３：ストレージ管理ＡＰＩ提供サーバープログラム、４：ストレージ管理サーバー、５：アダプタサーバー、６：管理端末、１２：ストレージ管理ＡＰＩ属性情報、１４：ストレージシステム制御プログラム、１５：ストレージシステム構成情報、２２：ストレージ管理ＡＰＩライブラリ、３１：ＳＶＰ、３３：ストレージデバイス、４１：ストレージ管理ＡＰ、４２／５２：ストレージ管理ＡＰＩライブラリ、５１：アダプタプログラム、１０１／３１１／４１１／４２１／５１１：ＣＰＵ、１０３／３１３／４１３／４２３／５１３：メモリ、１０４／３１４／４１４／４２４／５１４：ディスク、４００／６００：ストレージ管理ＡＰＩ属性定義情報、５００／７００：ストレージ管理ＡＰＩ属性情報
【図１】
2016121086.tif 000003
【図２】
2016121086.tif 000004
【図３】
2016121086.tif 000005
【図４】
2016121086.tif 000006
【図５】
2016121086.tif 000007
【図６】
2016121086.tif 000008
【図７】
2016121086.tif 000009
【図８】
2016121086.tif 000010
【図９】
2016121086.tif 000011
【図１０】
2016121086.tif 000012
【図１１】
2016121086.tif 000013
【図１２】
2016121086.tif 000014
【図１３】
2016121086.tif 000015
【図１４】
2016121086.tif 000016
【国際調査報告】
2016121086.tif 000017
2016121086.tif 000018
2016121086.tif 000019
2016121086.tif 000020