【実施例1】
【0017】
本実施例は、一つの実ストレージ装置(物理ストレージ装置)を仮想化して、複数の仮想ストレージ装置を提供する。各仮想ストレージ装置に対して、一つのリソースグループ(実リソースのグループ)が割り当てられ、割り当てられたリソースグループのリソースに、仮想リソース識別子が付与される。
【0018】
図1は、実施例1の概念を説明するための計算機システムの全体構成図を示す。
図1において、計算機システムは、ホスト計算機1000と一つのストレージ装置(実ストレージ装置)2000を含む。ホスト計算機1000とストレージ装置2000は、ネットワーク5000を介して接続される。
【0019】
管理者(ユーザ)8000、8500は、管理クライアントPC9000を使用して、ストレージ装置2000にアクセスする。ストレージ装置2000の管理サーバ2600は、管理クライアントPC9000からの管理コマンドを、ネットワーク7000を介して受信し、それを内部制御コマンドに変換して、ストレージ装置2000内の他の要素に転送する。また、管理サーバ2600は、管理クライアントPC9000からのアクセス制御を行う。管理サーバ2600の処理の詳細は後述する。
【0020】
図1の例において、ストレージ装置2000は複数のリソース(実リソース)を含み、それらは、三つのリソースグループ(RPU:RESOURCE PARTITION UNITと呼ぶ)2900に分割されている。以下に説明する例においては、一つのRPUのみが一つの仮想ストレージ装置に割り当てられる。各リソースには、ストレージ装置2000で使用される実リソース識別子が付与されている。
【0021】
図1の例において、RPU2900に含まれるリソース(実リソース)は、ポート2810、ボリューム2800、そしてパリティグループ2820である。パリティグループは、RAID(Redundant Arrays of Independent Disks)グループとも呼ばれ、RAIDを構成する複数のドライブのグループである。
【0022】
ボリュームは、論理デバイス(LDEV)とも呼ばれる。ボリュームは、例えば、一つのパリティグループが与える記憶領域内の一部の記憶領域が対応する。ストレージ装置2000におけるこれらリソースが、いずれかのRPUに割り当てられる。他の種類のリソース、例えば、後述する(Micro Processor PacKage)2200、CMPK(Cache Memory PacKage)2300をRPUに含めてもよい。
【0023】
RPU#01(RPU ID=01のRPU)とRPU#02(RPU ID=02のRPU)は、それぞれ、仮想シリアル番号が1111と1212の仮想ストレージ装置(VSA#1111、VSA#1212)に割り当てられている。それらの各リソースには、仮想ストレージ装置のリソースとして、仮想リソース識別子(VID)2326Dが付与されている。RPU#00(RPU ID=00のRPU)は、仮想ストレージ装置に未割り当てのリソースからなるリソースグループ2900であり、
図1の例においては、いずれのリソースにも仮想リソース識別子は付与されていない。
【0024】
本例において、全てのリソース(ポート、ボリューム、パリティグループ)は、初期状態において、RPU#00に含まれ、一部のリソースが、その後に作成された他のRPU#01、RPU#02に移動されている。ボリュームは、RPU#01、RPU#02において新たに作成可能である。
【0025】
各仮想ストレージ装置に対して個別のネームスペースが定義されている。各ネームスペースは独立しているため、仮想ストレージ装置内において、他の仮想ストレージ装置及びストレージ装置2000で使用されているリソース識別子(仮想リソース識別子及び実リソース識別子)を考慮することなく、仮想リソース識別子を自由にRPU2900内のリソースに割り当てることができる。仮想リソース識別子は、仮想ストレージ装置内で一意である。
【0026】
ストレージ装置2000が具備するリソース識別子制御機能は、ホスト計算機1000及び管理クライアントPC9000からのリソース識別子応答要求に対して、仮想リソース識別子2326Dを応答する。
【0027】
これにより、ホスト計算機1000と管理クライアントPC9000を利用する管理者8000、8500とは、RPU#01内のリソースをシリアル番号が1111であるストレージ装置のリソースと認識し、RPU#02内のリソースを、シリアル番号が1212であるストレージ装置のリソースと認識する。
【0028】
これより、
図1の構成を形成するための仮想化方法を説明する。まず、ホスト計算機1000の構成例を説明する。
図2は、ホスト計算機1000の構成例を模式的に示すブロック図である。ホスト計算機1000は、プロセッサ1100、メモリ1200、ホストバスアダプタ(HBA)1300、入力デバイス1700、出力デバイス1600などを備えた計算機であり、例えば、パーソナルコンピュータや、ワークステーションまたはメインフレームなどから構成される。
【0029】
プロセッサ1100は、ホスト計算機1000全体を統括制御する機能を有し、メモリ1200に格納された業務アプリケーション1210、交替パスプログラム1400そしてファイルシステム1500を含むOSを実行することにより、各種の制御処理を実行する。
【0030】
例えば、プロセッサ1100は、業務アプリケーション1210を実行することで、ストレージ装置2000に対してアクセス要求として、例えば、リードアクセス要求またはライトアクセス要求を発行する。メモリ1200は、プログラム等を記憶するために用いられるほか、プロセッサ1100のワークメモリとしても用いられる。
【0031】
HBA1300は、ストレージ装置2000との通信時におけるプロトコル制御を行う。HBA1300が、プロトコル制御機能を実行することで、ホスト計算機1000とストレージ装置2000との間において、例えば、ファイバチャネルプロトコルに従ってデータやコマンドの送受信が行われる。
【0032】
ローデバイス1310は、ファイルシステム1500がアクセスされた際に、ページキャッシュ(図示せず)に一旦データをコピーする処理を行うことなく、I/O(Input/Output)処理を実行し、オーバヘッドを低減するためのデバイスとして用いられる。
【0033】
交替パスプログラム1400は、ローデバイス1310を用いて接続先ボリューム2800の識別子を取得し、同一識別子を有する複数ボリューム2800からの複数ローデバイス1310を一つのローデバイス1320としてまとめる。ファイルシステム15000からのI/O発行要求に対して、一つまたは複数のローデバイス1310にI/O要求を発行する。
【0034】
交替パスプログラム1400が取得するボリューム識別子は、グローバルユニークな値である必要があり、例えば、ストレージ装置の識別子とストレージ装置内のローカルボリューム識別子の組合せで形成される。ストレージ装置2000は、ボリューム識別子の応答において、仮想識別子を応答する。この点は後述する。
【0035】
入力装置1700は、例えば、キーボード、スイッチやポインティングデバイス、マイクロフォンなどから構成される。出力デバイス1600は、モニタディスプレイやスピーカなどから構成される。
【0036】
図3は、ストレージ装置2000のハードウェア構成を模式的に示すブロック図である。ストレージ装置2000は、
図3に示すように、FEPK(FrontEnd PacKage)2100、MPPK2200、CMPK2300、BEPK(BackEnd PacKage)2400、記憶デバイスの一例としてのHDD(ハードディスクドライブ)2700、そして管理サーバ2600を含む。
【0037】
内部ネットワーク2500は、FEPK2100と、MPPK2200と、CMPK2300と、BEPK2400と管理サーバ2600とを接続する。内部ネットワーク2500により、MPPK2200の各MP2210は、FEPK2100、CMPK2300、BEPK2400、管理サーバ2600のいずれとも通信可能である。
【0038】
図3は、FEPK2100、MPPK2200、CMPK2300、BEPK2400等のパッケージ内の一部の構成要素のみを図示しており、これらは、図示された要素と異なる要素をさらに含むことができる。
【0039】
FEPK2100は、ホスト計算機1000との通信のためのインタフェースユニットである。FEPK2100は、複数のホストI/F2110を有する。ホストI/F2110は、ホスト計算機1000のHBAにネットワーク5000を介して接続し、ホスト計算機1000との通信のためのプロトコル制御を行う。例えば、一つのホストI/F2110が一つのポートに対応する。ホストI/F2110が複数のポートを有していてもよい。FEPK2100は、さらに、図示しない転送回路を含む。
【0040】
BEPK2400は、HDD2700との通信のためのインタフェースユニットである。BEPK2400は、複数のディスクI/F2410を有する。ディスクI/F2410は、例えば、ケーブルを介してHDD2700と接続されるとともに、内部ネットワーク2500と接続されており、内部ネットワーク2500側とHDD2700との間におけるリード又はライト対象のデータの受け渡しを仲介する。
【0041】
CMPK2300は、データキャッシュ用メモリ2310と制御情報用メモリ2320を有する、共有メモリユニットである。CMPK2300において、データキャッシュ用メモリ2310と制御情報用メモリ2320は、不揮発性メモリ、又は、揮発メモリ、例えば、DRAM(Dynamic Random Access Memory)である。
【0042】
データキャッシュ用メモリ2310は、HDD2700にライトするデータを一時的に格納(キャッシュ)し、又はHDD2700からリードしたデータを一時的に格納(キャッシュ)する。制御情報用メモリ2320は、ストレージ装置2000における処理に必要な情報、例えば、リソース構成情報及び他の情報を格納する。制御情報用メモリ2320が格納する情報については後述する。
【0043】
MPPK2200は、複数のMP(Micro Processor)2210と、ローカルメモリ(LM)2220と、これらを接続するバス2230とを有する。LM2220は、制御情報用メモリ2320に格納されている制御情報の一部を格納している。本実施形態において、プロセッサは、例えば、1若しくは複数のMP又は1若しくは複数のMPPKで構成することができる。
【0044】
管理サーバ2600は、制御情報用メモリ2320からLM2220にロードされ、MP2210により実行されている制御プログラムへ、管理クライアントPC9000からのユーザ操作要求を伝達する。例えば、管理サーバ2600は計算機であって、キーボード、スイッチやポインティングデバイス、マイクロフォンなどの入力デバイスとモニタディスプレイやスピーカなどの出力デバイス(図示せず)を有してもよい。
【0045】
上述のように、管理サーバ2600は、管理者8000、8500に対するアクセス制御を行い、その制御方式として、例えば、ロールベースアクセス制御(Role−based Access Control)方式を使用することができる。
【0046】
図4は、制御情報用メモリ2320が格納している情報の一例を示す。本例において、制御情報用メモリ2320は、ストレージ装置制御プログラム2321、RPU管理プログラム2322、リソースID管理プログラム2323、ユーザアカウント管理プログラム2324を格納している。
【0047】
ストレージ装置制御プログラム2321は、ホスト計算機1000からのリードアクセス要求及びライトアクセス要求を処理する他、ストレージ装置2000内における様々な処理を行う。
【0048】
RPU管理プログラム2322は、ストレージ装置2000内のRPUの管理を行う。リソースID管理プログラム2323は、ストレージ装置2000のリソースに付与されている実リソース識別子及び仮想リソース識別子を管理する。ユーザアカウント管理プログラム2324は、ユーザ認証を行い、そして、ストレージ装置2000のユーザアカウントを管理し、特に、各ユーザのアクセス権限の情報を管理する。
【0049】
制御情報用メモリ2320は、さらに、各制御プログラムが利用する制御情報として、RPU管理テーブル2325、リソースID管理テーブル2326、ユーザアカウント管理テーブル2327、ストレージ装置モデルリスト2328、DKC(Disk Controller)プール管理テーブル2329、メタ情報テーブル2330を格納している。DKCプール管理テーブル2329、メタ情報テーブル2330は実施例1では使用されないが、便宜上、図示されている。DKCプール管理テーブル2329、メタ情報テーブル2330の詳細は、実施例2で説明する。
【0050】
図5は、管理サーバ2600によるロールベースアクセス制御において利用されるユーザアカウント管理テーブル2327の構成例を示している。ユーザアカウント管理テーブル2327は、管理者のユーザIDを格納するユーザID欄2327A、当該ユーザID(管理者)に割り当てられたRPUを格納するRPU ID欄2327B、当該ユーザIDに対して与えられている操作権限の種別を格納する権限欄2327C、そして当該ユーザIDに対応づけられたパスワードを格納するパスワード欄2327Dを有する。
【0051】
ユーザは、ユーザアカウント管理テーブル2327において当該ユーザに対して登録されている1又は複数のRPUに対してのみ、登録されている権限を有しており、当該ユーザに対して登録されていないRPUに対しては何の権限も有していない。
【0052】
例えば、「ADMIN1」の管理者(例えば
図1における管理者8000)は、RPU#01に対してのみ、「STORAGE ADMIN」の権限を有している。「ADMIN3」の管理者(例えば
図1における管理者8500)は、全てのRPUに対して、「STORAGE ADMIN」と「MODIFY VIRTUAL STORAGE」の権限を有している(全体管理者)。RPU ID欄2327Bにおける「FF」は全てのRPUを示す。
【0053】
「STORAGE ADMIN」の権限を有するユーザは、割り当てられているRPU(仮想ストレージ装置)内において、全ての操作を行うことができる。例えば、当該権限を有するユーザは、ボリュームの作成及び削除やコピーペアの制御等を行うことができる。
【0054】
この権限を有するユーザは、RPUの作成、RPUの物理リソースの変更(追加・削除)など、RPUの物理リソースを制御することはできない。また、仮想ストレージ装置の仕様を変更することはできない。ここで、RPUの物理リソースは、ポート及びパリティグループである。ボリュームは論理リソースであり、「STORAGE ADMIN」の権限を有するユーザが、それを操作できる。
【0055】
「MODIFY VIRTUAL STORAGE」の権限を有するユーザは、仮想ストレージ装置の作成及び変更を行うことができる。当該権限を有するユーザは、新たにRPPUを作成し、RPUの物理リソースを変更し(リソース割り当て)、新たに仮想ストレージ装置を定義してRPUを割り当て、仮想ストレージ装置の仕様を変更することができる。
【0056】
RPUの物理リソースの変更は、RPU間の物理リソースの移動を意味する。したがって、一つのRPUの物理リソースを変更するためには、当該ユーザが、他のRPUに対する「MODIFY VIRTUAL STORAGE」の権限を有することが必要である。なお、本例のユーザ権限の種類及びその内容は一例であって、これらと異なる権限が定義されていてもよい。
【0057】
ユーザアカウント管理プログラム2324は、管理クライアントPC9000からの指示に従って、ユーザアカウント管理テーブル2327においてユーザアカウントを登録する。具体的には、管理サーバ2600が、管理クライアントPC9000から、ユーザアカウントの追加、変更、削除等の指示を登録内容の情報と共に受信し、それらを起動したユーザアカウント管理プログラム2324に転送する。ユーザアカウント管理プログラム2324は、転送された指示に従って、ユーザアカウント管理プログラム2324を更新する。
【0058】
上述のように、管理サーバ2600は、ユーザアカウント管理テーブル2327の情報に従って、ユーザからのアクセスを制御する。例えば、管理サーバ2600は、管理クライアントPC9000から、ログインのためのユーザID及びパスワードを受信し、それをユーザアカウント管理プログラム2324に転送する。
【0059】
ユーザアカウント管理プログラム2324は、取得したユーザID及びパスワードをユーザアカウント管理テーブル2327の情報と比較して、取得したユーザIDのユーザが、ユーザアカウント管理テーブル2327に登録されているか確認する。ユーザが登録されている場合、ユーザアカウント管理プログラム2324は、その認証結果と当該ユーザの権限情報を管理サーバ2600に送信する。ユーザが登録されていない場合、ユーザアカウント管理プログラム2324は、その認証結果を管理サーバ2600に送信する。
【0060】
ログインを試みているユーザが非登録ユーザである場合、管理サーバ2600は、ログインエラーを管理クライアントPC9000に返す。当該ユーザが登録ユーザである場合、管理サーバ2600は、その後の当該ユーザからの管理コマンドを、当該ユーザの権限内において処理する。上述のように、管理サーバ2600は、ユーザの管理操作範囲を、当該ユーザのアカウントに割り当てられているRPU内のリソースに限定し、さらに実行できる操作を割り当てられた権限内で許される操作に限定する。
【0061】
例えば、管理サーバ2600は、ユーザから、割り当てられていないRPUの仮想ストレージ装置におけるボリューム操作(ボリューム作成や削除、ペア形成等)の要求を拒否する。また、管理サーバ2600は、「MODIFY VIRTUAL STORAGE」権限を有していないユーザからの仮想ストレージ装置の作成要求やリソース移動(リソース割り当て)の要求を拒否する。
【0062】
図6は、RPU管理テーブル2325の構成例を示す。RPU管理テーブル2325は、ストレージ装置2000で構成されているRPUそれぞれの構成情報を格納する。RPU管理プログラム2322は、RPU管理テーブル2325を更新する。
【0063】
図6において、RPU管理テーブル2325は、RPU ID欄2325A、ベンダ欄2325B、モデル欄2325C、シリアル番号(S/N)欄2325D、ポートIPアドレス欄2325E、ボリューム数欄2325F、ポート数欄2325G、パリティグループ数欄2325H、ステータス欄2325Iを有する。RPU管理テーブル2325において、「0」は、値が割り当てられていないことを意味する。
【0064】
RPU ID欄2325Aは、ストレージ装置2000内でRPUを一意に特定可能な識別子を格納する。ベンダ欄2325B、モデル欄2325C、シリアル番号(S/N)欄2325Dは、それぞれ、RPUが表現する(RPUが割り当てられている)仮想ストレージ装置の仮想ベンダ名(ベンダの仮想識別子)、仮想モデル名(モデルの仮想識別子)、仮想シリアル番号(シリアル番号の仮想識別子)を格納する。
【0065】
これら三つの値が、仮想ストレージ装置を特定する仮想識別子を構成することができる。仮想ストレージ装置の仮想識別子は、ストレージ装置2000内で一意である。なお、ベンダ欄2325B、モデル欄2325C、シリアル番号欄2325Dにおいて、「DEFAULT」は、ストレージ装置2000の実値が割り当てられていることを意味する。
【0066】
管理ポートIPアドレス欄2325Eは、RPU管理用に定義されている管理サーバ2600へのアクセスIPアドレスを格納する。例えば、一つの物理ポートにおいて、アクセスIPアドレスがマスカレードされ、各仮想ストレージ装置に一つのアクセスIPアドレスが割り当てられている。
【0067】
ボリューム数欄2325Fは、RPUへの割り当て最大ボリューム数と、RPUが表現する仮想ストレージ装置モデルの最大ボリューム数(カッコ内の値)を格納する。例えば、RPU ID=01の仮想ストレージ装置モデルが、仕様上、作成することができる最大ボリューム数は、65536である。RPU ID=01の仮想ストレージ装置が作成することができる最大ボリューム数は、8192である。同一モデル(同一ベンダの同一モデル)の仮想ストレージ装置であっても、作成できる最大ボリューム数は各仮想ストレージ装置の設計(定義)よって異なりうる。
【0068】
ポート数欄2325Gは、RPUへの割り当て最大ポート数と、RPUが表現する仮想ストレージ装置モデルの最大ポート数(カッコ内の値)を格納する。例えば、RPU ID01の仮想ストレージ装置モデルが、仕様上、実装できるポートの最大数は255である。
【0069】
RPU ID=01の仮想ストレージ装置が含みうるポートの最大数は128である。RPU#01が表現するのは仮想ストレージ装置であるため、RPU#01のポート数は変化し(増減され)得る。従って、その実際のポート数は、128以下のいずれかの数である。
【0070】
パリティグループ数欄2325Hは、RPUへの割り当て最大パリティグループ数とRPUが表現する仮想ストレージ装置モデルの最大パリティグループ数(カッコ内の値)を格納する。例えば、RPU ID=01の仮想ストレージ装置モデルが、仕様上、実装できるパリティグループの最大数は65536である。
【0071】
RPU ID=01の仮想ストレージ装置が含みうるパリティグループの最大数は16384である。RPU#01が表現するのは仮想ストレージ装置であるため、RPU#01のパリティグループ数は変化し(増減され)得る。従って、その実際のパリティグループ数は、16384以下のいずれかの数である。
【0072】
ステータス欄2325Iは、RPUの状態を示す値を格納する。RPUステータスが「ACTIVE」の場合、当該RPUが仮想ストレージ装置を表現中、すなわち当該仮想ストレージ装置が動作中であって、ストレージ装置2000は、ホスト計算機1000と管理クライアントPC9000にその仮想識別子(仮想ストレージ装置の仮想識別子と仮想リソース識別子を含む)を応答する。
【0073】
RPUステータスが「INACTIVE」であれば、当該RPUが仮想ストレージ装置を表現しておらず、当該仮想ストレージ装置は動作していない。ストレージ装置2000は、ホスト計算機1000と管理クライアントPC9000からの識別子応答要求に対して、当該RPUの仮想識別子を応答していない。
【0074】
図7は、リソースID管理テーブル2326の構成例を示す図である。リソースID管理テーブル2326は、リソースの識別子(ID)を管理する。リソースID管理テーブル2326は、実リソースID欄2326A、種別欄2326B、RPU ID欄2326C、そして仮想リソースID欄2326Dを有する。
【0075】
実リソースID欄2326Aは、ストレージ装置2000(実ストレージ装置)に対して定義されているネームスペースにおいて、各リソースに割り当てられている識別子(実リソース識別子)を格納している。実リソース識別子は、ストレージ装置2000内において、リソースを一意に特定可能である。
【0076】
種別欄2326Bは、各リソースの種別を示す。本例においては、登録種別は、ポート、ボリューム、パリティグループである。これらと異なる種別が登録されていてもよい。RPU ID欄2326Cは、各リソースが所属するRPUの識別子を格納する。本例において、全ての登録リソースがいずれかのRPUに属する。
【0077】
仮想リソースID欄2326Dは、リソースに付与されている仮想リソース識別子を格納している。仮想識別子(ID)は、仮想ストレージ装置の仮想識別子(ID)又はリソースに付与される仮想リソース識別子(ID)を示す。
【0078】
仮想リソースID欄2326Dにおいて、「NULL」は、仮想リソース識別子が付与されていないことを示す。一部のリソースに対して仮想リソース識別子が付与され、他のリソースに対しては未付与である。仮想リソース識別子は、RPUに対して定義されているネームスペースにおける識別子である。
【0079】
仮想リソース識別子は、RPU内において、リソースを一意に特定可能である。仮想ストレージ装置を表現するRPUにおいて、一部のリソースに対してのみ仮想リソース識別子が付与され、他の一部のリソースに対しては仮想リソース識別子が付与されていなくともよい。仮想リソース識別子が付与されていないリソースは、所属するRPUが「ACTIVE」であっても、仮想ストレージ装置のリソースとしてホスト計算機1000及び管理クライアントPC9000に認識されていない。
【0080】
各RPUにおいて仮想リソース識別子を付与するために、それぞれにネームスペースが定義される。そのため、各RPU(仮想ストレージ装置)において、他のRPUの仮想リソース識別子及び実ストレージ装置2000において付与される実リソース識別子と独立に、各リソースに対して仮想リソース識別子を付与することができる。これにより、各RPUにおいて自由に仮想リソース識別子を付与でき、実ストレージ装置2000において複数の仮想ストレージ装置を提供するための管理を容易化する。
【0081】
RPU IDは、ストレージ装置2000において一意であり、RPU IDと仮想リソース識別子で構成される識別子は、実リソース識別子と同様に、ストレージ装置2000においてリソースを一意に特定可能である。同様に、RPUが表現する仮想ストレージ装置の仮想ベンダID、仮想モデル名そして仮想シリアル番号からなる仮想識別子と、仮想リソース識別子とにより、ストレージ装置2000においてリソースを一意に特定可能である。
【0082】
リソースID管理プログラム2323は、リソースID管理テーブル2326を管理する。後述する処理により、リソースはRPU間を移動され、仮想リソース識別子が付与される。このようなリソース構成に変更があると、リソースID管理プログラム2323は、その変更に応じてリソースID管理テーブル2326を更新する。
【0083】
図8は、RPUが表現可能な仮想ストレージ装置のベンダ名(ベンダID)及びモデル名(モデルID)を登録するためのストレージ装置モデルリスト2328である。ストレージ装置モデルリスト2328は表現可能なベンダのベンダ名を登録するベンダ欄2328Aと、ベンダ欄2328Aに登録されたベンダに属するモデルのモデル名を登録するモデル欄2328Bを有する。
【0084】
管理者は、ストレージ装置モデルリスト2328のエントリから、一つのエントリを選択し、ストレージ装置2000において作成する仮想ストレージに選択したベンダ名とモデル名を付与することができる。RPUは、ストレージ装置モデルリスト2328に登録されているベンダ名とモデル名の組合せを有する仮想ストレージ装置を表現可能である。
【0085】
リソースID管理プログラム2323は、ストレージ装置モデルリスト2328を管理する。例えば、リソースID管理プログラム2323は、管理サーバ2800を介して管理クライアントPC9000から受信した指示に従って、ストレージ装置モデルリスト2328を更新する。
【0086】
上述のように、ストレージ装置2000は、ホスト計算機1000及び管理クライアントPC9000からのリソース識別子応答要求に対して、仮想識別子を応答する。また、ユーザ(管理者)からのアクセスを、そのRPUに対する権限に応じて制御する。ストレージ装置2000は、これら二つの機能により、それ自体(ストレージ装置2000)に加え、複数の仮想ストレージ装置を提供することができる。以下において、仮想ストレージ装置を提供するストレージ装置2000における処理を、具体的に説明する。
【0087】
ホスト計算機1000と管理クライアント9000が発行するSCSI(Small Computer System Interface)コマンドのストレージ装置2000による処理について説明する。
図9は、SCSIコマンドを処理する論理デバイス(ボリューム)の構成例を模式的に示す図である。
図9において、一つのホストI/F2110がホスト計算機1000と管理クライアント9000と接続しているが、複数の一つのホストI/F2110が、それぞれ、ホスト計算機1000と管理クライアント9000の一方と接続してもよい。
【0088】
ホスト計算機1000及び管理クライアントPC9000は、ネットワーク5000にホストI/F2110のWWN(World Wide Name)をターゲットとする論理パスを形成しており、論理パスに対して、論理ユニット(LU)2120の番号(LU番号)を指定したSCSIコマンドを発行する。WWNは、仮想ストレージ装置の仮想識別子とポートの仮想リソース識別子から作成される。
【0089】
また、SCSIコマンドがデータボリューム(LDEV)2800に対するデータリード/データライト要求を含む場合、アクセス先のLBA(Logical Block Address)が指定される。
【0090】
ホストI/F2110を介してSCSIコマンドを受理したFEPK2100の転送回路は、そのSCSIコマンドを分析し、指定されたLU番号からコマンドを処理するMPPK2220を特定する。転送回路は、LU番号とMPPK2220の関係を管理する管理情報を有しており、その管理情報を参照して、指定されたLU番号のLU2120に対するコマンドを処理するMPPK2220を特定することができる。
【0091】
FEPK2100の転送回路は、特定したMPPK2220に対して、SCSIコマンドで指示された操作要求を発行する。当該操作要求を受信したMPPK2220において、ストレージ装置制御プログラム2321が動作する。ストレージ装置制御プログラム2321は、指定されているLU番号から、当該LU2120に対応するボリューム(LDEV)を特定するとともに、SCSIコマンドで指示されている操作の種類を判定する。
【0092】
制御情報用メモリ2320は、論理ユニット(所属ポート及びLU番号で特定される)とボリューム(実リソース識別子で特定される)との関係を管理する管理情報を格納しており、ストレージ装置制御プログラム2321は、その管理情報を参照して指定されたLU番号に対応するボリュームを特定することができる。当該管理情報は、ボリュームの種別の情報も含む。
【0093】
SCSIコマンドに含まれる操作要求が、データのリード又はライトであり、指定LU番が論理ユニット(LU2)2120であるとする。ストレージ装置制御プログラム2321は、データボリューム2800に対応するBEPK2400に対して、SCSIコマンドから特定されたデータボリューム2800及びLBAに対応する記憶領域からのデータのリード又は記憶領域へのデータのライトを要求する。
【0094】
次に、SCSIコマンドに含まれる操作要求が、SCSI Inquiry ID(IDentifiier)のようなリソース識別子応答要求であるとする。ストレージ装置2000は、リソース識別子応答要求に対して、仮想識別子を応答する。
【0095】
具体的には、SCSIコマンドが担当MPPK2220に転送されると、ストレージ装置制御プログラム2321は、当該SCSIコマンドが指定する操作要求が、SCSI Inquiry IDであると判定する。ストレージ装置制御プログラム2321は、当該SCSIコマンドが指定しているLU番号についての識別子情報を、リソースID管理プログラム2323に要求する。
【0096】
例えば、ストレージ装置制御プログラム2321は、上記管理情報を参照して、指定されたLU番号からボリュームの実リソース識別子を取得し、当該実リソース識別子を指定して、リソースID管理プログラム2323に仮想識別子の情報を要求する。
【0097】
リソースID管理プログラム2323は、ストレージ装置制御プログラム2321からの要求に応じて、リソースID管理テーブル2326を参照し、指定された実リソース識別子を検索する。リソースID管理プログラム2323は、指定された実リソース識別子のエントリから、RPU ID(欄2326C)と仮想リソース識別子(欄2326D)を取得する。
【0098】
リソースID管理プログラム2323は、さらに、RPU管理テーブル2325において、リソースID管理テーブル2326から取得したRPUIDを検索する。リソースID管理プログラム2323は、RPU管理テーブル2325における当該RPUIDのエントリから、ベンダ名(欄2325B)、モデル名(欄2325C)、シリアル番号(欄2325D)を取得する。
【0099】
リソースID管理プログラム2323は、取得した、ベンダ名、モデル名、シリアル番号(仮想ストレージ装置識別子)、そして仮想ボリュームIDを、ストレージ装置制御プログラム2321に返す。ストレージ装置制御プログラム2321は、取得した仮想ストレージ装置の識別子及び仮想ボリュームIDを、Inquiryデータに含めて、要求元に応答する。
【0100】
リソース識別子応答要求に対する応答が含む仮想識別子は、設計に依存する。リソース識別子応答は、上記例の一部の仮想識別子のみを含むことができ、上記例と異なる仮想識別子を含むことができる。例えば、リソース識別子応答は、ボリューム(LDEV)の仮想リソース識別子と仮想ストレージ装置の仮想シリアル番号(これも仮想識別子の一つ)のみを含むことができる。異なる例において、リソース識別子応答は、指定された論理ユニットが所属するポートの仮想リソース識別子を含むことができる。
【0101】
次に、SCSIコマンドが指定するLU番号が、論理ユニット(LU1)2120のLU番号である例を説明する。論理ユニット(LU1)2120に対応するボリューム(LDEV)は、コマンドデバイス2800である。コマンドデバイス2800は、それが所属する仮想又は実ストレージ装置(RPU)に対する制御コマンドを受けるボリュームである。
【0102】
ストレージ装置制御プログラム2321は、制御コマンドを受信すると、管理サーバ2600に対して、制御コマンドの種別及び対象RPU並びに送信元(管理者)を示して、アクセス制御を要求する。
【0103】
管理サーバ2600は、示された情報と、ユーザアカウント管理テーブル2327の情報を比較して、上記ロールベースアクセス制御を行う。ユーザが上記制御コマンドの要求を行う権限を有する場合、それをストレージ装置制御プログラム2321に応答し、ユーザが上記権限を有していない場合、ストレージ装置制御プログラム2321及び管理クライアントPC9000に、それを通知する。ユーザアカウント管理プログラム2324が、コマンドデバイス2800が受信した制御コマンドのアクセス制御を行ってもよい。
【0104】
まず、存在している仮想ストレージ装置のリソース操作を要求する制御コマンドの処理を説明する。仮想ストレージ装置に対する制御コマンドが要求する操作は、例えば、ボリュームの作成、ボリュームの記憶領域のフォーマット、指定したボリューム間でのデータコピー等である。
【0105】
SCSIコマンドが担当MPPK2220に転送されると、それはコマンドデバイス2800へのSCSIコマンドであるので、ストレージ装置制御プログラム2321は、当該SCSIコマンドが装置制御コマンドであると判定する。ストレージ装置制御プログラム2321は、受信したSCSIコマンドから装置操作要求を抽出する。
【0106】
操作要求は、操作対象リソースを識別する識別子を含む。ここでは、操作対象リソースは、仮想ストレージ装置の識別子及び操作対象リソースの仮想リソース識別子により、指定される。制御コマンドにより要求される操作は、実リソース識別子を使用して行われる。そのため、ストレージ装置制御プログラム2321は、操作要求が指定する操作対象の仮想リソースIDを、実リソース識別子に変換する。
【0107】
ストレージ装置制御プログラム2321は、RPU管理テーブル2325を参照して、操作対象リソースの仮想ストレージ識別子に関連付けられているRPU ID(欄2325A)を取得する。さらに、ストレージ装置制御プログラム2321は、制御コマンドを受信したコマンドデバイスが所属するRPUのRPU IDを、リソースID管理テーブル2326(欄2326C)から取得する。例えば、ストレージ装置制御プログラム2321は、コマンドデバイスの実リソース識別子から、そのRPU IDを特定できる。
【0108】
ストレージ装置制御プログラム2321は、コマンドデバイスが所属するRPUのRPU IDと、制御コマンドが指定する各リソースが所属するRPUのRPU IDを比較する。いずれかの指定リソースのRPUが、コマンドデバイスのRPUと異なる場合、エラー(実行不可)を当該SCSIコマンド要求元に応答する。
【0109】
これにより、仮想ストレージ装置のコマンドデバイスで受信した制御コマンドが操作可能なリソースを、当該コマンドデバイスのRPU、つまり、当該仮想ストレージ装置内に閉じることができる。
【0110】
制御コマンドが指定する全リソースが所属するRPUのRPU IDが、コマンドデバイスが所属するRPUのRPU IDと一致する場合、ストレージ装置制御プログラム2321は、指示された操作を実行する。
【0111】
ストレージ装置制御プログラム2321は、リソースID管理テーブル2326において、コマンドデバイスのRPU ID(欄2326C)と制御コマンドで指定された各仮想リソース識別子(欄2326D)を含むエントリから、実リソース識別子(欄2326A)を取得する。ストレージ装置制御プログラム2321は、取得した実リソース識別子を使用して、指示された操作を実行する。
【0112】
上記例は、仮想ストレージ装置に対する仮想リソース識別子を指定した制御コマンドの処理例であり、操作が仮想ストレージ装置内に限定されている。コマンドデバイスで受け付けることができる制御コマンド(特殊コマンド)は、後述する仮想ストレージ装置の作成、リソースのRPUへの割り当て(RPU間でのリソース移動)、仮想リソース識別子の付与のように、受信したコマンドデバイスのRPUと異なるRPUの操作を要求する制御コマンドや、実リソース識別子でリソースを指定する制御コマンドを含むことができる。これらの詳細は後述する。
【0113】
例えば、RPU#00のコマンドデバイスが、仮想ストレージ装置作成コマンドやRPUへのリソース割り当てコマンドのような、RPU操作を含む制御コマンドを受信する。MPPK2200は、RPU#00の制御コマンドの処理においては、操作対象リソースを当該RPU#00に限定しない。MPPK2200は、制御コマンドの要求操作種別に応じて、当該要求の処理をコマンドデバイスのRPU内に限定するか、他のRPUのリソースの操作を許可するか判定してもよい。
【0114】
以下において、仮想ストレージ装置の構築を説明する。以下に説明する仮想ストレージ装置の構築方法の例は、仮想ストレージ装置の作成(
図10)、作成した仮想ストレージ装置(RPU)へのリソースの割り当て(
図13)、そして、新たに割り当てたリソースへの仮想リソース識別子の付与(
図14)の処理を実行する。
【0115】
まず、仮想ストレージ装置の作成処理を説明する。仮想ストレージ装置の作成は、新たに作成する仮想ストレージ装置の構成定義の指定を受け、当該仮想ストレージ装置に対して、既存のRPUを割り当てる。
【0116】
仮想ストレージ装置を新たに作成するためには、仮想ストレージ装置作成権限を有するユーザアカウントが必要である。本例において、「MODIFY VIRTUAL STORAGE」(ユーザアカウント管理テーブル2327参照)が、仮想ストレージ装置作成権限を含む。
【0117】
管理者は、仮想ストレージ装置作成権限を有するユーザアカウントを用いてストレージ装置2000の管理サーバ2600にログインする。上述のように、管理サーバ2600は、ロールベース制御により、管理者のアクセスを制御する。管理サーバ2600は、「MODIFY VIRTUAL STORAGE」権限を有する管理者に対して、仮想ストレージ装置の作成を許可する。
【0118】
図10は、仮想ストレージ装置作成処理の例を示すフローチャートである。RPU管理プログラム2322は、このフローに従い、仮想ストレージ装置作成処理を行う。管理サーバ2600又はコマンドデバイス2800は、管理クライアントPC9000からの仮想ストレージ装置作成要求を受信する。例えば、RPU#00のコマンドデバイスが、仮想ストレージ装置作成要求を含む制御コマンドを受信し、ストレージ装置制御プログラム2321は、管理サーバ2600に対して、当該仮想ストレージ装置作成要求についてのアクセス制御を要求する。
【0119】
仮想ストレージ装置作成権限を有する管理者からの要求である場合、仮想ストレージ装置作成要求を受けたストレージ装置制御プログラム2321又は管理サーバ2600又は、RPU管理プログラム2322を起動し、当該要求が示す情報を渡す。
【0120】
RPU管理プログラム2322は、RPU管理テーブル2325を参照し、そこから、状態(欄2325I)が「非アクティブ」のエントリのRPU IDを一つ抽出し、変数Xに代入する(ステップF1000)。変数Xの初期値はNULLであり、上記条件のエントリが存在しない場合、NULLが維持される。
【0121】
XがNULLの場合(ステップF1050:YES)、全てのRPUが利用中であり、新規仮想ストレージ装置を構築することができない。RPU管理プログラム2322は、管理サーバ2600又はストレージ装置制御プログラム2321を介して、要求者に「新規作成不可」のエラーを返す(ステップF1150)。XにRPU IDが代入されている場合(ステップF1050:NO)、RPU管理プログラム2322は、RPU管理テーブル2325の更新処理(ステップF1100)を実行する。
【0122】
図11は、仮想ストレージ装置作成処理におけるRPU管理テーブル2325の更新処理(ステップF1100)を示すフローチャートである。まず、RPU管理プログラム2322は、管理者の仮想ストレージ装置作成要求に含まれる新規仮想ストレージ装置のベンダ名、モデル名、シリアル番号を取得する(ステップP1000)。以下では、これらを、「V」、「M」、「S」で示す。これらの値の組(V、M、S)は、指定された仮想ストレージ装置識別子である。
【0123】
RPU管理プログラム2322は、RPU管理テーブル2325の欄2325B、2325C、2325Dを参照し、取得した値の組(V、M、S)が、他のRPUエントリに設定されているか確認する(ステップP1050)。
【0124】
取得した値の組が、他のRPUエントリに設定されている場合(P1050:YES)、要求された仮想ストレージ識別子と同一仮想識別子を有する仮想ストレージ装置とが既に存在する。したがって、RPU管理プログラム2322は、管理サーバ2600又はストレージ装置制御プログラム2321を介して、要求者に要求された識別子の仮想ストレージ装置は既に存在していることを通知し、仮想ストレージ装置作成処理を終了する(ステップP1200)。
【0125】
取得した値の組が他のRPUエントリに設定されていない場合(P1050:NO)、RPU管理プログラム2322は、RPU管理テーブル2325のステップF1000で選択したRPU IDのエントリにおいて、該当する欄2325B〜2325Dに、取得した組(V、M、S)の各値を格納する(ステップP1100)。さらに、RPU管理プログラム2322は、RPU管理テーブル2325の当該エントリにおいて、欄2325Iの値を“ACTIVE”に変更する(ステップP1150)。以上で、仮想ストレージ装置作成処理が完了する。
【0126】
ステップP1150の処理の後、ホスト計算機1000及び管理クライアントPC9000は、ステップF1000で選択されたRPUが割り当てられた仮想ストレージ装置を認識することができる。
【0127】
図12は、仮想ストレージ装置管理画面V1000の一例を示す。管理クライアントPC9000は、管理サーバ2600から情報を受信して、その表示デバイスにおいて、この画面を表示することができる。仮想ストレージ装置管理画面V1000は、ストレージ装置2000に既存の仮想ストレージ装置の一覧を表示するテーブルV1010と、ストレージ装置2000に既存の仮想ストレージ装置の個数を示すテキストボックスV1020を有する。
【0128】
ユーザは、テーブルV1010とテキストボックスV1020によって、ストレージ装置2000内の仮想ストレージ装置を確認することができる。テキストボックスV1020の表現形式において、既存仮想ストレージ装置数が分子であり、ストレージ装置2000内で提供可能な最大仮想ストレージ装置数、すなわちRPU#00を除くRPUの数が分母である。
【0129】
また、ストレージ装置管理画面V1000は、仮想ストレージ装置を新規作成するために必要な情報を入力する入力ボックスV1030〜V1090と、仮想ストレージ装置作成要求を送信するボタンV1100と、入力をキャンセルするボタンV1110と、仮想ストレージ装置管理画面V1000から抜けるボタンV1120を含む。管理者は、管理クライアントPC9000の入力デバイスを使用して、必要な情報を入力することができる。
【0130】
例えば、管理者は、入力ボックスV1030にて新規作成する仮想ストレージ装置のベンダ名を選択し、入力ボックスV1040にてモデル名を選択し、入力ボックスV1050にてシリアル番号を入力する。管理者は、入力ボックスV1030、V1040で、ストレージ装置モデル一覧2328に登録されている値のみ選択できる。
【0131】
または、管理クライアントPC9000は、ストレージ装置モデル一覧2328の情報を管理サーバ2600から受信しており、入力された組がストレージ装置モデル一覧2328のいずれのエントリとも一致しない場合、指定されている仮想ストレージ装置は、ストレージ装置2000にてエミュレート可能な仮想ストレージ装置ではないと判定する。実行ボタンV1100が押下されても、管理クライアントPC9000は、仮想ストレージ装置作成要求をストレージ装置2000に送信しない。この処理は、ストレージ装置2000が行ってもよい。
【0132】
入力ボックスV1060は、ストレージ装置2000が備える管理機能(管理サーバ2600)へアクセスするための管理ポートのIPアドレスを入力するためのボックスであり、入力値が新規作成する仮想ストレージ装置用のIPアドレスである。入力ボックスV1070〜V1090は、新規作成する仮想ストレージ装置の各リソースの数を入力するため入力ボックスである。これらの表現方法は、RPU管理テーブル2325を参照して説明した通りである。
【0133】
このように、管理者は、仮想ストレージ装置管理画面V1000を使用して新たに作成する仮想ストレージ装置の構成情報を入力し、ボタンV1100を押下して、仮想ストレージ装置作成要求をストレージ装置2000に送信する。管理クライアントPC9000は、仮想ストレージ装置管理画面V1000において既存仮想ストレージ装置の構成変更を受け付け、及びストレージ装置2000がその要求に応じて構成を変更してもよい。
【0134】
次に、仮想ストレージ装置へのリソース割り当て処理について
図13を用いて説明する。ストレージ装置2000は、仮想ストレージ装置を作成(RPUを割り当て)した後に当該処理を行うことで、仮想ストレージ装置に割り当てたRPUのリソース構成を、管理者が望む構成に変更できる。
【0135】
ストレージ装置2000のリソースは、初期状態でRPU#00に所属している。以下に説明する仮想ストレージ装置へのリソース割り当て処理は、RPU#00から割り当てる仮想ストレージ装置に対応するRPUへ、リソースを移動する。なお、仮想ストレージ装置のRPUから他のRPUへの移動を行ってもよい。
【0136】
リソース移動後に、ストレージ装置2000が
図14を参照して後述するRPU内実リソースへの仮想リソース識別子付加処理を実施すると、ホスト計算機1000と管理クライアントPC9000が新規割り当てリソースを認識することが可能となる。
【0137】
図13は、リソース割り当て処理のフローチャートである。仮想ストレージ装置作成要求と同様に、管理サーバ2600やコマンドデバイス2800(例えばRPU#00のコマンドデバイス)は、リソース割り当て要求を受信する。アクセス制御は、仮想ストレー装置作成処理と同様であり、正当権限を有する管理者からの要求の場合、RPU管理プログラム2322が呼び出される。
【0138】
RPU管理プログラム2322は、管理者からのリソース割り当て要求から、移動するリソースの実リソース識別子と、移動先RPU IDを取得する(ステップP2000)。以下では、移動するリソースの実リソース識別子を「S」、移動先RPU IDを「T」で示す。
【0139】
次に、RPU管理プログラム2322は、リソースID管理テーブル2326の欄2326Aにおいて、指定された実リソース識別子Sを検索し、当該エントリの欄2326Dに仮想リソース識別子が登録されているか判定する(ステップP2010)。
【0140】
実リソース識別子Sのリソースに仮想リソース識別子が既に付与されている場合(ステップP2010:YES)、RPU管理プログラム2322は、管理サーバ2600又はストレージ装置制御プログラム2321を介して、要求者に仮想リソース識別子の解除を要求し(ステップP2030)、リソース割り当て処理を終了する。ステップP2010及びステップP2030は、管理者の管理業務がリソース割り当て処理によって中断されることを防ぐ。管理者は、制御コマンドにより、仮想リソース識別子を解除できる。
【0141】
実リソース識別子Sのリソースに仮想リソース識別子が未付与の場合(ステップP2010:NO)、RPU管理プログラム2322は、リソース識別子管理テーブル2326の実リソース識別子Sのエントリにおいて、RPU ID(欄2326C)の値を「T」に変更し(ステップP2020)、リソース割り当て処理を完了する。
【0142】
リソースの割り当ては、パリティグループとそれに対応する全ボリュームを一つのRPU内に含めることで、他の仮想ストレージ装置の割り当てリソースを使用することや仮想ストレージ装置に未割り当てのリソースを使用することを避けることができる。
【0143】
次に、実リソースに仮想リソース識別子を付与する処理を説明する。以下に説明する処理は、例えば、
図13を参照して説明したリソース移動により別のRPUに移動されたリソースに、仮想リソース識別子を付与する。
【0144】
図14は、RPU内の実リソースに仮想リソース識別子を付与する処理例のフローチャートである。仮想ストレージ装置作成要求と同様に、管理サーバ2600やコマンドデバイス2800、例えばRPU#00のコマンドデバイス、は、仮想リソース識別子付与要求を受信する。
【0145】
アクセス制御は、仮想ストレージ装置作成処理と同様であり、正当権限を有する管理者からの要求の場合、RPU管理プログラム2322が呼び出される。対象リソースが含まれる仮想ストレージ装置にコマンドデバイスが作成されている場合、そのコマンドデバイスが仮想リソース識別子付与要求を受け付けてもよい。
【0146】
RPU管理プログラム2322は、管理者からの仮想リソース識別子付与要求から、仮想リソース識別子を付与するリソースの実リソース識別子(「P」で示す)と、仮想リソース識別子(「V」で示す)を取得する(ステップP3000)。
【0147】
RPU管理プログラム2322は、リソース識別子管理テーブル2326において、指定された実リソース識別子Pのエントリから、RPU ID(当該実利ソースの所属RPUの識別子)を取得する。RPU管理プログラム2322は、取得したRPU IDと指定されている仮想リソース識別子Vの組が、リソースID管理テーブル2326に登録済みであるか判定する(ステップP3010)。具体的には、RPU管理プログラム2322は、その組が、いずれかのエントリの欄2326C、2326Dの値の組と一致するか判定する。
【0148】
上記組が登録済みの場合(ステップP3010:YES)、RPU管理プログラム2322は、指定された仮想ストレージ装置のネームスペースにおいて、指定された仮想リソース識別子が既存であることを、管理サーバ2600又はストレージ装置制御プログラム2321を介して、要求者に通知し(ステップP3030)、このフローを終了する。これにより、仮想ストレージ装置において同一仮想識別子が重複することを避ける。
【0149】
上記組が未登録である場合(ステップP3010:NO)、RPU管理プログラム2322は、リソース識別子管理テーブル2326上の実リソース識別子Pのエントリにおいて、欄2326Dに仮想リソース識別子Vを格納し(ステップP3020)、仮想リソース識別子付与処理を終了する。
【0150】
以上の仮想ストレージ装置作成処理、リソース割り当て処理、そして仮想リソース識別子付与処理により、
図1に示した構成を構築することができる。本実施例によれば、実ストレージ装置のリソースを複数グループに分割し個別管理可能な一つの仮想ストレージ装置のリソースとして、ホスト計算機及び管理者に提供することができる。これにより、仮想化された実ストレージ装置のリソース管理を容易化ができる。
【実施例2】
【0151】
実施例1は、一つの実ストレージ装置のリソースを複数のグループに分割し、各グループを一つの仮想的なストレージ装置としてホスト計算機1000及び管理システム9000に示す。実施例2は、それぞれが複数の実ストレージ装置2000を跨る複数のグループ(RPU集合体)で、複数の仮想ストレージ装置を形成し、それらをホスト計算機1000及び管理クライアントPC9000に提供する。これにより、一台の仮想ストレージ装置のリソースを複数の実ストレージ装置から選出することができる。実施例2においては、主に実施例1と異なる点を説明する。
【0152】
図15は、実施例2の概念を説明するための計算機システムの全体構成図を示している。複数のストレージ装置(実ストレージ装置)2000は、バックエンドストレージネットワーク6000にて相互接続されており、各ストレージ装置2000は、他のストレージ装置2000に、バックエンドストレージネットワーク6000を介してSCSIコマンドを転送することができる。バックエンドストレージネットワーク6000とストレージネットワーク5000は同一でもよい。
【0153】
システムデバイス2810については後述するが、一つのストレージ装置2000に一つのシステムデバイス2810が形成される。例えば、初期状態において全てのリソースが所属するRPU#00に、システムデバイスが含まれる。
【0154】
本実施例において、ストレージ装置間接続を含むSCSIコマンド転送範囲を、DKCプール4000と呼ぶ。DKCプール4000には、複数ストレージ装置2000を跨ぐリソースグループ(RPU集合体)が存在し、一つのRPU集合体が一つの仮想的なストレージ装置としてホスト計算機1000や管理クライアントPC9000に認識される。
【0155】
図15の構成は、複数実ストレージ装置2000を跨ぐリソースグループと、リソースグループへのリソース割り当て手段と、リソースグループ内のリソースに仮想リソース識別子を付与する仮想リソース識別子付加手段と、ホスト計算機1000や管理クライアントPC9000から送られたコマンド(以下の例でSCSIコマンド)を操作対象の実リソースが存在するストレージ装置2000に転送する転送手段によって実現される。
【0156】
まず、複数ストレージ装置2000を跨ぐリソースグループの構成例を、
図16を参照して説明する。一つのストレージ装置2000内のリソースは、実施例1のリソース分割と同様に、リソースグループであるRPU2900に分割される。
【0157】
本実施例において、複数ストレージ装置2000を跨るグループは、DKCプール4000内で、同一RPU IDが付与された異なるストレージ装置2000のRPUの集合体である。RPU集合体を構成する各RPUは、ストレージ装置2000の識別子と割り当てられているRPU IDにより、DKCプール4000内で一意に識別できる。
【0158】
図16は、ストレージ装置間接続構成を説明するためのブロック構成図である。
図16の例において、三つのストレージ装置2000がDKCプール4000を構成する。複数ストレージ装置2000を跨ぐ三つのリソースグループ(RPU集合体)、RPU#00、RPU#01、RPU#02が例示されている。それぞれを構成するRPUに同一のRPU IDが付与されている。
【0159】
RPU#00の集合体において、各RPU(各ストレージ装置2000)は、コマンド受信のためのボリューム(LDEV)であるシステムデバイス2810を含む。RPU#01及びRPU#02の各集合体において、各RPU(各ストレージ装置2000)は、コマンド受信のためのボリューム(LDEV)であるRPMD(Resource Partition Management Device)2815を含む。システムデバイス2810及びRPMD2815については後述する。
【0160】
図17は、ユーザアカウント(管理者アカウント)とアクセス可能なRPUの関係を示すユーザアカウントテーブルT1000である。各ストレージ装置2000は、ユーザアカウントテーブルT1000を保持する。当該テーブルT1000は、管理者のアクセス制御において参照される。ユーザアカウントテーブルT1000は、ユーザID欄T1010及び割り当てられたRPUの欄T1020を有する。
【0161】
図17の例において、仮想ストレージ装置を管理する管理者は、DKCプール4000内の全てのストレージ装置2000に存在する、当該仮想ストレージ装置に割り当てられているRPUにアクセスできる。
【0162】
例えば、仮想ストレージ装置1(VDKC1とも呼ぶ)を構成するRPU集合体を、RPU#01の集合体とする。VDKC1を管理対象とする管理者VDKC1 ADMINは、DKCプール4000内の全てのストレージ装置2000にあるRPU#01へアクセス可能である。
【0163】
ストレージ装置2000を単体で扱う管理者は、一つのストレージ装置2000内のリソースにのみアクセスできる。例えば、管理者ST1 ADMINは、操作対象となる実ストレージ装置(ST1)2000のRPU#00にのみアクセス可能であり、管理者ST2 ADMINは、実ストレージ装置(ST2)2000のRPU#00にのみアクセス可能である。仮想ストレージ装置の作成やリソース割り当てを行う管理者、
図17の例における管理者DKC POOL ADMINは、DKCプール4000内の全てのRPUにアクセスできる。
【0164】
図18は、DKCプール管理テーブル2329の構成例を示す。各ストレージ装置2000は、DKCプール管理テーブル2329を保持する。DKCプール管理テーブル2329は、DKCプール4000を構成するストレージ装置2000の情報を管理する。DKCプール管理テーブル2329は、実ストレージ装置ID欄I1000、システムデバイスID欄I1010、アクセスポートWWN欄I1020、メインシステムデバイス欄I1030を有する。DKCプール管理テーブル2329は、実ストレージ装置2000間での要求(コマンド)転送において参照される。
【0165】
実ストレージ装置ID欄I1000は、DKCプール4000内でストレージ装置2000を一意に特定可能とする識別子を格納する。システムデバイスID欄I1010は、ストレージ装置2000のシステムデバイス2810(ボリューム)をDKCプール4000内で一意に特定可能な識別子を格納する。
【0166】
アクセスポートWWN欄I1020は、ネットワーク6000を介してストレージ装置2000に接続するためのポートのWWNを格納する。メインシステムデバイス欄I1030は、いずれのシステムデバイスがメインシステムデバイス(メイン属性のシステムデバイス)であるかを示す情報を格納する。システムデバイス2810に関しては、後述する。
【0167】
図19は、メタ情報テーブル2330の構成例を示す。各ストレージ装置2000は、メタ情報テーブル2330を保持する。
図19はメタ情報の一部のみを示し、メタ情報テーブル2330は、仮想リソース識別子が付与されている全てのリソースの情報を含む。メタ情報テーブル2330は、実ストレージ装置2000間での要求(コマンド)転送において使用される。
【0168】
メタ情報テーブル2330は、仮想リソース識別子を付与されたリソースの所属RPU及び実ストレージ装置を管理する。メタ情報テーブル2330は、RPU ID欄T2000、仮想リソースID欄T2001、実ストレージ装置ID欄T2002を有する。
【0169】
RPU ID欄T2000は、仮想リソース識別子が付与されているリソースの所属RPUを特定する識別子を格納する。仮想リソースID欄T2001は、RPU集合体内で一意に特定可能な仮想リソース識別子を格納する。実ストレージ装置ID欄T2002は、仮想リソース識別子が付与されているリソースの所属ストレージ装置2000の識別子を格納する。
【0170】
後述するように、本例のリソース割り当て要求は、仮想リソースIDにより、割り当てる(移動する)リソースを指定する。そのため、RPU#00のリソースに対しても、移動前に仮想リソースIDが付与される。実施例1で説明した仮想リソースID付与要求によりRPU#00のリソースに仮想リソースIDを付与する、又は、初期状態においてリソースに仮想リソースIDが付与されている。
図19に示すように、定義されている仮想リソースIDが、いずれのリソースにも割り当てられていなくともよい。
【0171】
図20を用いて、本実施例におけるホスト計算機1000が発行するSCSIコマンド(リード要求又はライト要求)の処理について説明する。実施例1で説明したように、ホスト計算機1000は、ストレージ装置2000のポートに割り当てられているWWNを発行先アドレスとして、ネットワーク5000に論理パスを形成している。ホスト計算機1000は、前論理パスを介して、SCSIコマンドによりLU番号とLBAを指定してデータのリード/ライトを要求する。
【0172】
FEPK2100(転送回路)は、指定されたLU番号を、対応する仮想ボリューム識別子(ボリュームの仮想リソース識別子)に変換する。例えば、制御情報用メモリ2320は、ポートの実リソース識別子及びLU番号と仮想ボリューム識別子とを対応付ける管理情報を記憶しており、FEPK2100はこの管理情報を参照して、指定されたLU番号を仮想ボリューム識別子に変換する。さらに、FEPK2100は、リソースID管理テーブル2326から、SCSIコマンドを受信したポートが属するRPUのRPU IDを取得する。
【0173】
次に、FEPK2100は、メタ情報テーブル2330より、上記仮想ボリューム識別子のボリュームを含むストレージ装置2000の実識別子を取得する。具体的には、FEPK2100は、上記SCSIコマンドを受けたポートが属するRPUのRPU ID(欄T2000)と、上記仮想ボリューム識別子(欄T2001)と有するエントリをメタ情報テーブル2330で特定し、そのエントリから実ストレージ装置識別子(欄T2002)を選択する。
【0174】
選択した実ストレージ装置識別子が自らのストレージ装置2000の識別子である場合、当該ストレージ装置2000は、実施例1において説明したように、ホスト計算機1000からのSCSIコマンド(リード要求/ライト要求)を処理する。
【0175】
選択したストレージ装置2000の識別子が異なるストレージ装置2000の識別子である場合、FEPK2100は、DKCプール管理テーブル2329から抽出したストレージ装置2000の識別子を元に、受信したSCSIコマンドを転送する転送先WWN(DKCプール管理テーブル2329の欄I1030)を選択する。
【0176】
FEPK2100は、WWNをターゲットとするバックエンドネットワーク6000への論理パスに対して、上記特定したRPU IDと共に、ホスト計算機1000から送信されたSCSIコマンドを転送する。
【0177】
転送されたSCSIコマンドを受けたストレージ装置2000のFEPK2100は、受信したRPU IDとSCSIコマンドを元に、実施例1で説明したように、受信したSCSIコマンド(リード要求/ライト要求)を処理する。例えば、データリード/データライトを実行したストレージ装置2000は、受信したSCSIコマンドへの応答を、コマンド転送元のストレージ装置2000に返し、コマンド転送元ストレージ装置2000は、当該応答をホスト計算機1000に転送する。
【0178】
本構成により、FEPK2100によりストレージ装置2100間のコマンド転送が可能となり、ボリュームを提供するストレージ装置2000と異なるストレージ装置2000が受信したリード/ライト要求を、当該ボリュームを含むストレージ装置2000に適切に転送することができる。
【0179】
次に、
図21を参照して、管理クライアントPC9000からのリソース割り当て(RPU集合体間でのリソース移動)要求の処理の流れを説明する。本実施例において、ストレージ装置2000の組込みコマンドデバイスであるシステムデバイス2810が、リソース割り当てのSCSIコマンドを受理する。管理サーバ2600は、いずれかの要求を含む管理コマンドを受信すると、それをSCSIコマンドに変換して、システムデバイス2810に転送する。
【0180】
まず、DKCプール4000内の任意のストレージ装置2000のシステムデバイス2810が管理クライアントPC9000から上記要求を受信する。ストレージ装置制御プログラム2321(担当MPPK2220)は、DKCプール管理テーブル2329のメインシステムデバイス欄I1030を参照し、I1030に「1」が格納されているエントリを選択する。
【0181】
ストレージ装置制御プログラム2321は、選択したエントリから、実ストレージ装置識別子(ストレージ装置2000の実識別子)とシステムデバイス識別子を取得する。取得した実ストレージ装置識別子が、当該要求を受信した実ストレージ装置2000と異なる実ストレージ装置2000の識別子である場合、ストレージ装置制御プログラム2321は、FEPK2100を使用して、バックエンドストレージネットワーク6000を介して、メイン属性を有する異なる実ストレージ装置2000のシステムデバイス2810に、受信したコマンドを転送する。
【0182】
メインシステムデバイス2810が転送されたSCSIコマンドを受信すると、転送先のストレージ装置制御プログラム2321(担当MPPK2220)は、受信したSCSIコマンドから、操作対象リソースの識別子、すなわち仮想リソース識別子を取得し、メタ情報2329から、当該仮想リソース識別子が示す実リソースを担当する実ストレージ装置2000の識別子を取得する。
【0183】
取得したストレージ装置2000の識別子が、メインシステムデバイス2810のストレージ装置2000の識別子であれば、当該ストレージ装置2000は、実施例1で説明したリソース割り当て処理を行う。割り当てるリソースに仮想リソースIDが付与されているため、その仮想リソースIDは解除される。
【0184】
取得したストレージ装置2000の識別子が、メインシステムデバイス2810のストレージ装置2000と異なるストレージ装置2000のIDである場合、ストレージ装置制御プログラム2321は、DKCプール管理テーブル2329から、当該異なる実ストレージ装置2000の転送先WWNとシステムデバイス識別子を取得し、FEPK2100を使用して、バックエンドストレージネットワーク6000を介して、SCSIコマンドを転送する。
【0185】
バックエンドストレージネットワーク6000に接続するポートから、上記異なるストレージ装置2000のメイン属性のシステムデバイス2810は、SCSIコマンドを受信する。当該異なるストレージ装置2000は、実施例1で説明したリソース割り当て処理を行う。
【0186】
移動されたリソースに対する仮想リソース識別子付与要求は、SCSIコマンドに含まれて、リソース割り当て要求と同様に、システムデバイス2810で受理される。SCSIコマンドの転送は、リソース割り当て要求と同様である。
【0187】
また、管理クライアントPC9000からの仮想ストレージ装置作成要求も、SCSIコマンドに含まれ、リソース割り当て要求と同様に、システムデバイス2810で受理される。メインシステムデバイス2810は、DKCプール4000内の全ての実ストレージ装置2000のシステムデバイス2810に対して、バックエンドストレージネットワーク6000を介して、仮想ストレージ装置作成要求を発行する。各実ストレージ装置2000は、仮想ストレージ装置作成処理を行う。
【0188】
メタ情報テーブル2330の更新が必要な場合、全ての実ストレージ装置2000において、メタ情報テーブル2330を更新する(メタ情報テーブル2330の同期)。
【0189】
例えば、システムデバイス2810が受理したコマンドによるメタ情報テーブル2330の更新のため、メインシステムデバイス2810のストレージ装置2000のリソースID管理プログラム2323は、他のストレージ装置2000に、バックエンドストレージネットワーク6000を介して、メタ情報テーブル2330の更新を通知する。メインシステムデバイスにより、RPU集合体間のリソースの移動及び全実ストレージ装置2000の物理リソース(パリティグループ及びポート)を統合管理することができる。
【0190】
図22は、管理クライアントPC9000からのリソース管理要求の処理の流れを示す構成図である。ここで説明するリソース管理要求は、一つの仮想ストレージ装置(RPU集合体)内に閉じた処理の要求である。例えば、ボリュームのフォーマット、ポート属性(ターゲット又はイニシエータ)の変更などである。
【0191】
管理クライアントPC9000は、実施例1において説明したコマンドデバイスへ、リソース管理要求(SCSICコマンド)を送信する。ストレージ装置制御プログラム2321(担当MPPK2220)は、要求で指定された操作対象の仮想リソース識別子を取得し、さらに、メタ情報テーブル2330から操作対象リソースを担当する実ストレージ装置2000の識別子を選択する。
【0192】
選択した識別子の実ストレージ装置2000が自機であれば、ストレージ装置制御プログラム2321は、リソース識別子管理テーブル2323により、操作対象仮想リソース識別子を実リソース識別子に変換し、それを使用して要求を処理する。
【0193】
選択した識別子の実ストレージ装置2000が他機であれば、ストレージ装置制御プログラム2321は、実ストレージ装置間の制御コマンド受理ボリュームであるRPMD2815に、受信したリソース管理要求(SCSIコマンド)を転送する。RPMD2815を外部装置(管理クライアントPC9000)からのコマンドを受けるコマンドデバイスと別に設けることで、ユーザリソース(コマンドデバイス)への影響を避ける。
【0194】
FEPK2100は、バックエンドストレージネットワーク6000を介して、リソース管理要求を転送する。転送先のストレージ装置制御プログラム2321は、受信した要求の操作対象仮想リソース識別子を実リソース識別子に変換し、それを使用して要求を処理する。
【0195】
ボリュームの作成要求も、リソース管理要求により可能である。例えば、パリティグループが仮想リソースIDで指定されている場合、ストレージ装置制御プログラム2321は、メタ情報テーブル2330を参照して、当該要求を、そのパリティグループを含む実ストレージ装置2000に転送する。
【0196】
新たに作成されたボリュームに対しては、仮想リソース識別子が付与される。そのため、ボリュームを作成した実ストレージ装置におけるリソースID管理テーブル2326に加え、メタ情報テーブル2330が更新される。例えば、ボリュームを作成した実ストレージ装置2000のストレージ装置制御プログラム2321が、他の実ストレージ装置2000に、バックエンドストレージネットワーク6000を介して、メタ情報テーブル2330の更新を通知する。
【0197】
図23A及び
図23Bは、
図21と
図22を参照して説明した、管理クライアントPC9000からのストレージ管理操作要求(SCSIコマンド)の転送処理を示すフローチャートである。
【0198】
ストレージ管理操作要求(SCSIコマンド)を受信した実ストレージ装置2000はストレージ管理操作要求から、指定された操作を取得し、その操作を解析する(ステップP5000)。
【0199】
上記実ストレージ装置2000は、指定された操作が、所定の種別の操作、上記例において、RPU集合体間でのリソース移動に関連する操作(仮想ストレージ装置作成、リソース割り当て又は仮想リソース識別子付与)であるか判定する(ステップP5010)。
【0200】
ステップP5010の判定結果が肯定的である場合、上記実ストレージ装置2000は、当該要求をメインシステムデバイス2810に送信する(ステップP5020)。その後、
図21を参照して説明した処理が実行される。
【0201】
ステップP5010の判定結果が否定的である場合、上記実ストレージ装置2000は、
図22を参照して説明した処理を実行する。つまり、要求対象仮想リソース識別子を有するリソースが自ストレージ装置2000内にある場合(ステップP5030:YES)、上記実ストレージ装置2000は当該要求を処理する(ステップP5025)。要求対象仮想リソース識別子を有するリソースが他ストレージ装置2000内にある場合(ステップP5030:NO)、上記実ストレージ装置2000は、当該要求を、上記リソースが存在する実ストレージ装置2000のRPMD2815に転送する。
【0202】
RPU集合体内に閉じた処理を要求するコマンドと、異なるRPU集合体に関わるコマンドのために、異なる受理デバイス及び異なる転送方法を使用することで、それぞれに適切な転送制御を行うことができる。
【0203】
ストレージ装置2000間接続ネットワーク6000は、
図20を参照して説明したホスト計算機1000が発行するSCSIコマンドの他ストレージ装置2000への転送と、ストレージ管理操作要求の転送とに、共有されている。ストレージ管理操作要求の転送が頻発すると、ホスト計算機1000からのI/O要求の処理とネットワーク6000の利用が干渉し、結果として、ホスト計算機1000からのI/O要求の処理の遅延を招く恐れがある。
【0204】
上記例は、コマンドを受信したストレージ装置2000にコマンド転送先を定める処理を組み込むことで、DKCプール4000内の全ストレージ装置2000へのブロードキャストのような余分なストレージ装置間コマンド転送を避け、ホスト計算機1000からのI/O要求の処理の遅延を低減できる。
【0205】
また、コマンドで指定された仮想リソース識別子を実リソース識別子に変換する処理をコマンド転送先ストレージ装置2000が行うことより、ストレージ装置2000間コマンド転送時のコマンド内容変更による転送情報量の増加を抑止することができる。ネットワーク6000に流れるコマンドの転送情報量は、ネットワーク5000で流れた情報量と略同量である。
【0206】
メタ情報テーブル2330(システム全体のリソース構成情報)は、全実ストレージ装置2000において同期している必要がある。情報同期処理時間は、DKCプール4000内のストレージ装置2000の数や、ストレージ装置2000間のネットワーク6000の帯域に関連して変動する。例えば、ストレージ装置制御プログラム2321は、更新内容に応じて早期に構成情報の同期処理が必要であるかを判定し、コマンド処理速度の低下を避けるように更新タイミングを決定することができる。
【0207】
以上のように、実施例1で説明したRPU管理及びリソース識別子管理と、本実施例で具体的に説明した実ストレージ装置間での構成情報同期及び実ストレージ装置間でのコマンド転送により、
図15で示した構成を構築し、複数実ストレージ装置2000を跨る複数仮想ストレージ装置を、適切に管理、制御することができる。
【0208】
上記例は、ストレージ装置2000が、コマンドの転送先を決定した。これと異なり、ストレージシステム(複数ストレージ装置2000)にネットワークを介して接続する外部の管理計算機が、コマンドの転送先ストレージ装置2000を決定し、そこにコマンドを転送してもよい。例えば、管理計算機は、実施例2で説明した、DKCプール管理テーブル2329及びメタ情報テーブル2330を保持している。
【0209】
管理クライアントPC9000からコマンドを受信した管理計算機は、上記ストレージ装置2000と同様に、受信コマンドの仮想識別子と保持している情報を参照して、コマンドの転送先ストレージ装置2000を選択し、当該ストレージ装置2000にネットワーク6000を介してコマンドを送信する。
【0210】
以上、本発明の実施形態を説明したが、本発明が上記の実施形態に限定されるものではない。ある実施例の構成の一部を他の実施例の構成で置換し又はある実施例の構成の一部を他の実施例の構成に追加することができる。各実施例の各要素を、本発明の範囲において容易に削除、変更、追加することができる。
【0211】
例えば、上記二つの実施例は、一つ又は複数の同一RPU IDを一つの仮想ストレージ装置を対応付けるが、異なるRPU IDを有する複数のRPUを、一つの仮想ストレージ装置に割り当ててもよい。
【0212】
本発明は、プロセッサ上で稼動するソフトウェアを使用して実装してもよいし、専用ハードウェア又はソフトウェアに従い動作するプロセッサと専用ハードウェアの組み合わせで実装してもよい。各種プログラムはプログラム配布サーバや非一時的な記憶媒体によって装置にインストールされてもよい。本発明において、情報を表すデータ構造は限定されず、テーブル、リスト、DB、キュー等のデータ構造やそれ以外で表現されていてもよい。
【0213】
上記では、主に、「プログラム」を主語(動作主体)として各処理について説明を行ったが、プログラムはプロセッサによって実行されることで定められた処理をメモリ及び通信I/Fを用いながら行うため、プロセッサを主語とした説明でもよいし、当該プロセッサを含む装置(システム)を主語とした説明でもよい。
【0214】
プロセッサは、プログラムに従って動作することによって、所定の機能を実現する機能部として動作する。例えば、プロセッサは、制御プログラムに従って動作することで制御部として機能し、管理プログラムに従って動作することで管理部として機能する。プロセッサを含む装置及びシステムは、これらの機能部を含む装置及びシステムである。
【0215】
各機能を実現するプログラム、テーブル、ファイル等の情報は、不揮発性半導体メモリ、ハードディスクドライブ、SSD(Solid State Drive)等の記憶デバイス、または、ICカード、SDカード、DVD等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。