(57)【特許請求の範囲】
【請求項１】
論理ディスクを有するディスクアレイサブシステムに接続されたコンピュータ内で、複数のイニシエータによる前記論理ディスクへのアクセスを制御する冗長パス制御方法において、
前記コンピュータが備える命令捕捉手段が、前記コンピュータ内のミドルウェア又はソフトウェアが前記論理ディスクをリザーブするためのリザーブ命令を発行したとき、このリザーブ命令を捕捉し、
前記コンピュータが備える命令置換手段が、前記命令捕捉手段が捕捉した前記リザーブ命令を、前記複数のイニシエータのうちの一のイニシエータが前記論理ディスクにアクセスすることを前記ディスクアレイサブシステムが許可するだけでなく前記複数のイニシエータのうちの他のイニシエータが前記論理ディスクにアクセスすることも前記ディスクアレイサブシステムが許可する命令に置換し、
前記コンピュータが備える命令発行手段が、前記命令置換手段が置換した前記命令を前記ディスクアレイサブシステムへ発行し、
前記ディスクアレイサブシステムへ発行する命令には、前記論理ディスクにアクセスすることを許可された前記イニシエータを示す情報が含まれ、
前記ディスクアレイサブシステムは、前記発行された命令を受けて、前記論理ディスクにアクセスすることを許可された前記イニシエータを示す情報をレジスタに書き込む、
ことを特徴とする冗長パス制御方法。
【請求項２】
前記命令捕捉手段は更に、前記ミドルウェア又はソフトウェアが前記論理ディスクをリザーブすることをリリースするためのリリース命令、当該リザーブすることを解除するためのリセット命令及び当該リザーブすることを強制解除するための強制解除命令の少なくとも一つの命令を発行したとき、この命令を捕捉し、
前記命令置換手段は更に、前記命令捕捉手段が捕捉した命令を、前記複数のイニシエータのいずれかについて前記論理ディスクにアクセスすることを前記ディスクアレイサブシステムが拒否する命令に置換し、
前記命令発行手段は更に、前記命令置換手段が置換した命令を前記ディスクアレイサブシステムへ発行する、
請求項１記載の冗長パス制御方法。
【請求項３】
前記ディスクアレイサブシステムへ発行する命令には、前記論理ディスクにアクセスすることを拒否された前記イニシエータを示す情報が含まれ、
前記ディスクアレイサブシステムは、前記発行された命令を受けて、前記論理ディスクにアクセスすることを拒否された前記イニシエータを示す情報をレジスタから消去する、
請求項２記載の冗長パス制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ディスクアレイサブシステムにアクセスするための複数のパスを制御する冗長パス制御方法に関する。
【背景技術】
【０００２】
ＳＣＳＩ（Small Computer System Interface）とは、パソコンなどの小型コンピュータとハードディスクや光ディスク装置などの周辺機器とを接続するための規格であり、一般に広く普及している。ＳＣＳＩバスに接続されたどのデバイスも、双方向対等関係を築き、イニシエータであり、ターゲットで有り得る。イニシエータとはＳＣＳＩバス上で命令を出す装置であり、その命令を受け取る装置をターゲットという。ほとんどの場合、イニシエータはＳＣＳＩホストアダプタ（ＳＣＳＩカード）であり、ターゲットはＳＣＳＩ機器（厳密にはディスクコントローラ）となる。イニシエータからの読み出し命令又は書き込み命令に従って、ＳＣＳＩ機器はデータの読み出し又は書き込みを行なう。
【０００３】
このようなＳＣＳＩに準拠したパス冗長化ドライバの基本的な機能として、複数のイニシエータ（ＨＢＡ：Host Bus Adapter）を使用することにより、あるイニシエータ経由での論理ディスクに対するＩ／Ｏ時に障害を検出した場合、他のイニシエータ経由でＩ／Ｏリトライを行う機能が知られている（例えば特許文献１）。更に、複数のイニシエータを積極的に使用することで、Ｉ／Ｏパスの負荷分散機能（Ｉ／Ｏパス帯域の有効活用機能）を有するパス冗長化ドライバも存在する。
【０００４】
【特許文献１】特開２００２−３０４３３１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、任意の論理ディスクに対してミドルウェア又はソフトウェアがＳＣＳＩのコマンドである「リザーブ」を使用する場合、当該論理ディスクはリザーブを発行したイニシエータに占有されるため、他のイニシエータから当該論理ディスクへのアクセス（リードデータ転送Ｉ／Ｏやライトデータ転送Ｉ／Ｏ）はできなくなる。つまり、ホストコンピュータ上に複数のイニシエータ（Ｉ／Ｏパス）が存在していても、当該論理ディスクはリザーブを発行したイニシエータに占有されることとなるので、他のイニシエータからのアクセスができない。そのため、複数のＩ／Ｏパス帯域を、有効に活用することができなかった。なお、リザーブを使用するものの一例としては、クラスタシステムが知られている。
【０００６】
このため、以下のような問題点が存在する。
【０００７】
（１）前述したように、パス冗長化ドライバがＩ／Ｏパスの負荷分散機能を有していても、複数のイニシエータを使用してのＩ／Ｏパスの負荷分散機能を積極的に活用することができない。
【０００８】
（２）既にリザーブを実施したイニシエータによってリリース（又は任意のイニシエータよってリセット）を実施した後、他のイニシエータからリザーブを行うことで、複数のＩ／Ｏパスを使用することは可能である。しかし、一回のＩ／Ｏを行う度に、<1>．リザーブを実施したイニシエータによってリリース（又は任意のイニシエータよってリセット）、<2>．他のイニシエータによってリザーブ、<3>．目的のＩ／Ｏ実施、というように合計３つのＩ／Ｏ発行が必要となるので、Ｉ／Ｏ性能に影響を与えてしまうことになる。なお、「リリース」及び「リセット」は、ともにＳＣＳＩのコマンドである。
【０００９】
（３）また、ミドルウェア又はソフトウェアの制御範囲外で、リリース（又はリセット）によって一時的にリザーブ状態が解除されることは、意図しないイニシエータからのＩ／Ｏアクセスが可能となることにより、ミドルウェア又はソフトウェアによる論理ディスクの排他制御の不整合やデータ破壊などの問題につながる可能性がある。
【００１０】
そこで、本発明の主な目的は、Ｉ／Ｏパスの負荷分散機能を積極的に活用し得る冗長パス制御方法を提供することにある。
【課題を解決するための手段】
【００１１】
本発明に係る冗長パス制御装置は、ディスクアレイサブシステム内の論理ディスクにアクセスするための複数のパスを制御するものである。そして、本発明に係る冗長パス制御装置は、複数のパスの中の第一のパスをリザーブするためのリザーブ命令を捕捉する命令捕捉手段と、命令捕捉手段で捕捉したリザーブ命令を、第一のパスのアクセスを許可するだけでなく他のパスのアクセスも許可し得る命令に置換する命令置換手段と、命令置換手段で置換された命令をディスクアレイサブシステムへ発行する命令発行手段と、を備えたことを特徴とする。ここでいう「第一のパス」は、単数のパスでも複数のパスでもよい。
【００１２】
リザーブ命令は、論理ディスクに対して一つのパスのみのアクセスを許可する。そのため、従来、リザーブ命令によって一つのパスがリザーブされると、他のパスはその論理ディスクにアクセスできなくなるため、複数のパスによる負荷分散機能が十分に発揮されなかった。これに対し、本発明では、リザーブ命令をそのままディスクアレイサブシステムへ送るのではなく、リザーブ命令を他のパスのアクセスも許可し得る命令に置換してディスクアレイサブシステムへ送ることにより、論理ディスクに対して複数のパスのアクセスが可能となるので、複数のパスによる負荷分散機能が十分に発揮されることになる。また、冗長パス制御装置の上位側のミドルウェア又はソフトウェアについては、従来どおりにリザーブ命令を発行すればよいので、新たな変更は不要である。言い換えると、ミドルウェア又はソフトウェアがリザーブを使用するシステム環境において、Ｉ／Ｏパス帯域を有効に活用する手段を提供できたので、Ｉ／Ｏアクセス性能が向上する。
【００１３】
このとき、命令発行手段が発行する命令には、第一のパスを示す情報が含まれる、としてもよい。ディスクアレイサブシステムは、第一のパスを示す情報をレジスタに書き込むことにより、論理ディスクに対する第一のパスのアクセスを許可し得る。なお、第一のパスが複数のパスであれば、第一のパスを示す情報も複数のパスを示す情報である。同様に、他のパスについてもその情報をレジスタに書き込むことにより、論理ディスクに対する複数のパスのアクセスを許可し得る。
【００１４】
各手段は、次の機能を有してもよい。命令捕捉手段は、複数のパスの中でリザーブされている第二のパスについて、当該リザーブをリリースするためのリリース命令、当該リザーブを解除するためのリセット命令及び当該リザーブを強制解除するための強制解除命令の少なくとも一つの命令を捕捉する機能を有する。命令置換手段は、命令捕捉手段で捕捉した命令を、第二のパスのみのアクセスを拒否する命令に置換する機能を有する。命令発行手段は、命令置換手段で置換された命令をディスクアレイサブシステムへ発行する機能を有する。ここでいう「第二のパス」は、単数のパスでも複数のパスでもよい。これにより、リリース命令、リセット命令及び強制解除命令のいずれかによって、指定されたパスのみのアクセスが拒否される。冗長パス制御装置の上位側のミドルウェア又はソフトウェアについては、従来どおりにリリース命令又はリセット命令を発行すればよいので、新たな変更は不要である。
【００１５】
このとき、命令発行手段が発行する命令には、第二のパスを示す情報が含まれる、としてもよい。ディスクアレイサブシステムは、第二のパスを示す情報をレジスタから消すことにより、論理ディスクに対する第二のパスのアクセスを拒否し得る。同様に、他のパスについてもその情報をレジスタから消すことにより、論理ディスクに対する複数のパスのアクセスを拒否し得る。なお、第二のパスが複数のパスであれば、第二のパスを示す情報も複数のパスを示す情報である。
【００１６】
本発明に係るディスクアレイシステムは、本発明に係る冗長パス制御装置と、ディスクアレイサブシステムと、を備えたことを特徴とする。本発明に係るディスクアレイシステムの作用及び効果は、前述した本発明に係る冗長パス制御装置の作用及び効果に準ずる。
【００１７】
本発明に係る冗長パス制御方法は、論理ディスクを有するディスクアレイサブシステムに接続されたコンピュータ内で、複数のイニシエータによる前記論理ディスクへのアクセスを制御する冗長パス制御方法において、前記コンピュータが備える命令捕捉手段が、前記コンピュータ内のミドルウェア又はソフトウェアが前記論理ディスクをリザーブするためのリザーブ命令を発行したとき、このリザーブ命令を捕捉し、前記コンピュータが備える命令置換手段が、前記命令捕捉手段が捕捉した前記リザーブ命令を、前記複数のイニシエータのうちの一のイニシエータが前記論理ディスクにアクセスすることを前記ディスクアレイサブシステムが許可するだけでなく前記複数のイニシエータのうちの他のイニシエータが前記論理ディスクにアクセスすることも前記ディスクアレイサブシステムが許可する命令に置換し、前記コンピュータが備える命令発行手段が、前記命令置換手段が置換した前記命令を前記ディスクアレイサブシステムへ発行し、前記ディスクアレイサブシステムへ発行する命令には、前記論理ディスクにアクセスすることを許可された前記イニシエータを示す情報が含まれ、前記ディスクアレイサブシステムは、前記発行された命令を受けて、前記論理ディスクにアクセスすることを許可された前記イニシエータを示す情報をレジスタに書き込む、ことを特徴とする。前記命令捕捉手段は更に、前記ミドルウェア又はソフトウェアが前記論理ディスクをリザーブすることをリリースするためのリリース命令、当該リザーブすることを解除するためのリセット命令及び当該リザーブすることを強制解除するための強制解除命令の少なくとも一つの命令を発行したとき、この命令を捕捉し、前記命令置換手段は更に、前記命令捕捉手段が捕捉した命令を、前記複数のイニシエータのいずれかについて前記論理ディスクにアクセスすることを前記ディスクアレイサブシステムが拒否する命令に置換し、前記命令発行手段は更に、前記命令置換手段が置換した命令を前記ディスクアレイサブシステムへ発行する、としてもよい。前記ディスクアレイサブシステムへ発行する命令には、前記論理ディスクにアクセスすることを拒否された前記イニシエータを示す情報が含まれ、前記ディスクアレイサブシステムは、前記発行された命令を受けて、前記論理ディスクにアクセスすることを拒否された前記イニシエータを示す情報をレジスタから消去する、としてもよい。本発明に係る冗長パス制御方法の作用及び効果は、前述した本発明に係る冗長パス制御装置の作用及び効果に準ずる。
【００１８】
本発明に係る冗長パス制御プログラムは、ディスクアレイサブシステム内の論理ディスクにアクセスするための複数のパスを制御する手段として機能するコンピュータに用いられ、複数のパスの中の第一のパスをリザーブするためのリザーブ命令を捕捉する命令捕捉手段、この命令捕捉手段で捕捉したリザーブ命令を、第一のパスのアクセスを許可するだけでなく他のパスのアクセスも許可し得る命令に置換する命令置換手段、及び、この命令置換手段で置換された命令をディスクアレイサブシステムへ発行する命令発行手段、としてコンピュータを機能させるためのものである。本発明に係る冗長パス制御プログラムの構成要素は、前述した本発明に係る冗長パス制御装置の構成要素に対応させてもよい。また、本発明に係る冗長パス制御プログラムの作用及び効果は、前述した本発明に係る冗長パス制御装置の作用及び効果に準ずる。
【００１９】
更に、本発明は次のように構成することもできる。
【００２０】
（１）．ディスクアレイサブシステムがそのパスにリザーブされるためのリザーブ命令を捕捉する手段、リザーブ状態をリリースするためのリリース命令を捕捉する手段、リザーブ状態を解除するためのリセット命令を捕捉する手段及びリザーブ状態を強制解除するための強制解除命令を捕捉する手段と、捕捉した命令を他の命令に置換して配下のディスクアレイサブシステムに発行する手段とを有するパス冗長化ドライバ。
【００２１】
（２）．上記（１）において、捕捉したリザーブ命令の代わりに、アクセスするパスを区別するためのレジスタに登録する「そのパスだけでなくグループを構成するパスからのアクセスを許可する状態を示す情報」を配下のディスクアレイサブシステムへ発行し、リリース命令又はリセット命令を捕捉した場合に「当該グループを構成するパスからのアクセスを許可する状態を示す情報」をレジスタからクリアする命令を発行するパス冗長化ドライバ。
【００２２】
（３）．上記（１）、（２）において、ディスクアレイサブシステムのリザーブ状態を取得するための命令を配下のディスク装置に発行し、自身のホストコンピュータでディスク装置をリザーブしていない場合はアクセスするパスを区別するためのレジスタに登録する「そのホストコンピュータに実装されるパスからのアクセスを許可する状態を示す情報」を配下のディスクアレイサブシステムへ発行しない手段を有するパス冗長化ドライバ。
【００２３】
（４）．上記（１）から（３）の構成によって、１台のホストコンピュータから複数パスに分散してディスクへアクセスすることを可能にしたパス冗長化ドライバ。
【００２４】
（５）．上記（１）から（４）の機能のいずれか一つ又は複数を含むパス冗長化ドライバを備えた記憶媒体。
【００２５】
解決手段の具体例を以下に示す。以下の例では、ＳＣＳＩ−３におけるパーシステント・リザーブ イン（Persistent Reserve In）命令及びパーシステント リザーブ アウト（Persistent Reserve Out）命令を処理する機能を実装したディスクアレイサブシステムを使用するものとする。また、以下のコマンドの機能（意味）については、ＳＣＳＩのスペックとなるので、以下のＵＲＬから参照できる。
http://www.t10.org/
http://www.t10.org/ftp/t10/drafts/spc2/spc2r20.pdf
http://www.t10.org/ftp/t10/drafts/spc3/spc3r23.pdf
【００２６】
＜１＞．リザーブ（Reserve）のＩ／Ｏリクエストを捕捉する手段をパス冗長化ドライバに設ける。
【００２７】
＜２＞．リリース（Release）のＩ／Ｏリクエストを捕捉する手段をパス冗長化ドライバに設ける。
【００２８】
＜３＞．リセット（Reset）のＩ／Ｏリクエストを捕捉する手段をパス冗長化ドライバに設ける。
【００２９】
＜４＞．パーシステント リザーブ（Persistent Reserve）を強制的に解除するＩ／Ｏリクエストを捕捉する手段をパス冗長化ドライバに設ける。
【００３０】
＜５＞．アクセスを許可するパスについては、パーシステント リザーブ アウト - レジスタ（Persistent Reserve Out - Register）サービスを発行及び制御する手段をパス冗長化ドライバに設ける。
【００３１】
＜６＞．リザーブ（Reserve）のＩ／Ｏリクエストについて、パーシステント リザーブ アウト - リザーブ（Persistent Reserve Out - Reserve）サービスへの置き換え、ディスクアレイサブシステムへの発行及び制御する手段をパス冗長化ドライバに設ける。
【００３２】
＜７＞．リリースのＩ／Ｏリクエストについて、パーシステント リザーブ アウト - クリア（Persistent Reserve Out - Clear）サービスへの置き換え、ディスクアレイサブシステムへの発行及び制御する手段をパス冗長化ドライバに設ける。
【００３３】
＜８＞．リセット（Reset）のＩ／Ｏリクエストについて、パーシステント リザーブ アウト - クリア（Persistent Reserve Out - Clear）サービスへの置き換え、ディスクアレイサブシステムへの発行及び制御する手段をパス冗長化ドライバに設ける。
【００３４】
＜９＞．パーシステント リザーブ（Persistent Reserve）の状態を取得するために、パーシステント リザーブ イン - リード キーズ（Persistent Reserve In - Read Keys）サービス及びパーシステント リザーブ イン - リード リザベーション（Persistent Reserve In - Read Reservation）サービスを発行及び制御する手段をパス冗長化ドライバに設ける。
【００３５】
＜１０＞．自身のホストコンピュータでパーシステント リザーブ（Persistent Reserve）をしていない場合は、パーシステント リザーブ アウト - レジスタ（Persistent Reserve Out - Register）サービスを使用しない制御手段をパス冗長化ドライバに設ける。
【００３６】
＜１１＞．自身のホストコンピュータでパーシステント リザーブ（Persistent Reserve）をしている場合に、パーシステント リザーブ（Persistent Reserve）によるリザーブを実施したイニシエータとディスクアレイサブシステムとの間でパス障害を検出したときに、他のイニシエータからパーシステント リザーブ アウト - プリエンプト（Persistent Reserve Out - Preempt）サービスを発行及び制御し、パーシステント リザーブ（Persistent Reserve）によるリザーブを移動させる手段をパス冗長化ドライバに設ける。
【００３７】
＜１２＞．自身のホストコンピュータでもはやパーシステント リザーブ（Persistent Reserve）を使用しない場合に、パーシステント リザーブ アウト - プリエンプト（Persistent Reserve Out - Preempt）サービスを発行及び制御し、パーシステント リザーブ（Persistent Reserve）に関する登録情報を削除する手段をパス冗長化ドライバに設ける。
【００３８】
＜１３＞．強制的にパーシステント リザーブ（Persistent Reserve）命令を使用可能とするために、パーシステント リザーブ アウト - レジスタ アンド イグノア イグズィスティング キー（Persistent Reserve Out - Register and Ignore Existing Key）サービスを発行及び制御する手段をパス冗長化ドライバに設ける。
【００３９】
＜１４＞．パーシステント リザーブ（Persistent Reserve）を強制的に解除するＩ／Ｏリクエストについて、パーシステント リザーブ アウト - クリア（Persistent Reserve Out - Clear）サービスへの置き換え、ディスクアレイサブシステムへの発行及び制御する手段をパス冗長化ドライバに設ける。
【００４０】
＜１５＞．パーシステント リザーブ（Persistent Reserve）強制解除コマンドを発行する手段としてパス冗長化ドライバを操作するユーザインタフェース上に設ける。
【発明の効果】
【００４１】
本発明によれば、リザーブ命令をそのままディスクアレイサブシステムへ送るのではなく、リザーブ命令を他のパスのアクセスも許可し得る命令に置換してディスクアレイサブシステムへ送ることにより、論理ディスクに対して複数のパスのアクセスが可能となるので、複数のパスによる負荷分散機能を十分に発揮できる。また、ミドルウェア又はソフトウェアについては、従来どおりにリザーブ命令を発行すればよいので、新たな改造は不要である。したがって、ミドルウェア又はソフトウェアがリザーブを使用するシステム環境において、Ｉ／Ｏパス帯域を有効に活用できるので、Ｉ／Ｏアクセス性能を向上できる。
【発明を実施するための最良の形態】
【００４２】
図１は、本発明に係るパス冗長化ドライバ（冗長パス制御装置）の一実施形態を示すブロック図である。図２は、本実施形態のパス冗長化ドライバを含むディスクアレイシステムを示すブロック図である。図３は、本実施形態のパス冗長化ドライバを含むクラスタシステム（ディスクアレイシステム）を示すブロック図である。以下、これらの図面に基づき説明する。
【００４３】
まず、図１及び図２に基づき、主要な部分を説明する。
【００４４】
パス冗長化ドライバ４は、ディスクアレイサブシステム１０内の論理ディスク１３〜１５にアクセスするための二つのパス（ＨＢＡ６を通るパス及びＨＢＡ７を通るパス）を制御する手段（図示せず）を備え、その他に命令捕捉手段４１、命令置換手段４２及び命令発行手段４３を備えている。これらの手段は、例えばコンピュータプログラムによって、ホストコンピュータ１内に実現することができる（すなわち本発明に係るパス冗長化プログラムの一実施形態）。命令捕捉手段４１は、一つのパスをリザーブするためのリザーブ命令を捕捉する。命令置換手段４２は、命令捕捉手段４１で捕捉したリザーブ命令を、一つのパスのアクセスを許可するだけでなく他のパスのアクセスも許可し得る命令に置換する。命令発行手段４３は、命令置換手段４２で置換された命令をディスクアレイサブシステム１０へ発行する。
【００４５】
リザーブ命令は、論理ディスク１３〜１５に対して一つのパスのみのアクセスを許可する。そのため、従来、リザーブ命令によって一つのパスがリザーブされると、他のパスはその論理ディスク１３〜１５にアクセスできなくなるため、複数のパスによる負荷分散機能が十分に発揮されなかった。これに対し、パス冗長化ドライバ４では、リザーブ命令をそのままディスクアレイサブシステム１０へ送るのではなく、リザーブ命令を他のパスのアクセスも許可し得る命令に置換してディスクアレイサブシステム１０へ送ることにより、論理ディスク１３〜１５に対して複数のパスのアクセスが可能となるので、複数のパスによる負荷分散機能が十分に発揮されることになる。また、パス冗長化ドライバ４の上位側のアプリケーション８等については、従来どおりにリザーブ命令を発行すればよいので、新たな変更は不要である。
【００４６】
このとき、命令発行手段４３が発行する命令には、アクセスを許可するパスを示す情報が含まれる。ディスクアレイサブシステム１０は、そのパスを示す情報をレジスタに書き込むことにより、論理ディスク１３〜１５に対するそのパスのアクセスを許可し得る。同様に、他のパスについてもその情報をレジスタに書き込むことにより、論理ディスク１３〜１５に対する複数のパスのアクセスを許可し得る。なお、レジスタは、例えばコントローラ１１，１２内又は論理ディスク１３〜１５内に設けられる。
【００４７】
各手段は、次の機能をも有する。命令捕捉手段４１は、複数のパスの中でリザーブされている一つのパスについて、当該リザーブをリリースするためのリリース命令、当該リザーブを解除するためのリセット命令及び当該リザーブを強制解除するための強制解除命令の少なくとも一つの命令を捕捉する機能を有する。命令置換手段４２は、命令捕捉手段４１で捕捉した命令を、一つのパスのみのアクセスを拒否する命令に置換する機能を有する。命令発行手段４３は、命令置換手段４２で置換された命令をディスクアレイサブシステム１０へ発行する機能を有する。これにより、リリース命令、リセット命令及び強制解除命令のいずれかによって、指定されたパスのみのアクセスが拒否される。アプリケーション８等については、従来どおりにリリース命令又はリセット命令を発行すればよいので、新たな変更は不要である。
【００４８】
このとき、命令発行手段４３が発行する命令には、アクセスを拒否するパスを示す情報が含まれる。ディスクアレイサブシステム１０は、そのパスを示す情報をレジスタから消すことにより、論理ディスク１３〜１５に対するそのパスのアクセスを拒否し得る。同様に、他のパスについてもその情報をレジスタから消すことにより、論理ディスク１３〜１５に対する複数のパスのアクセスを拒否し得る。
【００４９】
次に、図２の構成について更に詳しく説明する。
【００５０】
本実施形態のディスクアレイシステム１Ａは、ホストコンピュータ１とディスクアレイサブシステム１０とから成る。ホストコンピュータ１のＨＢＡ６，７は、それぞれホストインタフェースケーブル２０，２１を介してディスクアレイサブシステム１０のコントローラ１１，１２にあるホスト接続ポート１６，１７に接続されている。ホストコンピュータ１は、ディスクアレイサブシステム１０が制御する論理ディスク１３〜１５に対するＩ／Ｏを実行する。下位ドライバ５は、ＨＢＡ６，７を制御しＩ／Ｏ処理を行う。
【００５１】
パス冗長化ドライバ４は、上位ドライバ３から受け取ったＩ／Ｏを下位ドライバ５へ引き渡し、また、ＨＢＡ６，７を介してディスクアレイサブシステム１０が制御する論理ディスク１３〜１５に対するＩ／Ｏの実行結果を下位ドライバ５から受け取り、正常終了又は異常終了の判断を行い、異常終了の原因がパスの構成要素（ＨＢＡ６，７、ホストインタフェースケーブル２０，２１、コントローラ１１，１２等）における障害（故障）と判断した場合は、代替パスを用いて、異常終了したＩ／Ｏのリトライ処理を行う。
【００５２】
ディスクアレイサブシステム１０のコントローラ１１，１２は、それぞれ内部バス１８，１９を介して各論理ディスク１３〜１５に接続されている。コントローラ１１，１２のいずれからも、論理ディスク１３〜１５のそれぞれに対してアクセスすることができる。
【００５３】
次に、図３の構成について説明する。
【００５４】
図３のクラスタシステム１００は、図２のホストコンピュータ１を二台用意し、図２のディスクアレイサブシステム１０を一台用意し、二台のホストコンピュータ１で一台のディスクアレイサブシステム１０を共有するように組み合わせたものであり、論理ディスク１７０に対してリザーブを使用する２ノードクラスタシステムである。
【００５５】
図３のホストコンピュータ１１１，１１２は、一部の図示を省略しているが図２のホストコンピュータ１と同じ構成であり、これら二つでクラスタ１１０となっている。図３のディスクアレイサブシステム１５０は、一部の図示を省略しているが、図２のディスクアレイサブシステム１０と同じ構成である。ホストコンピュータ１１１はパス冗長化ドライバ１２１とＨＢＡ１３１ａ，１３１ｂとを備え、ホストコンピュータ１１２はパス冗長化ドライバ１２２とＨＢＡ１３２ａ，１３２ｂとを備えている。ディスクアレイサブシステム１５０は、コントローラ１６１，１６２と論理ディスク１７０とを備えている。ＨＢＡ１３１ａ，１３２ａとコントローラ１６１とはスイッチ１４１を介して接続され、ＨＢＡ１３１ｂ，１３２ｂとコントローラ１６２とはスイッチ１４２を介して接続されている。
【００５６】
次に、ディスクアレイシステム１Ａの動作を、図２に基づき説明する。
【００５７】
ホストコンピュータ１上で動作するアプリケーション８によってディスクアレイサブシステム１０に書き込まれるデータ（ライトデータ転送Ｉ／Ｏ）は、アプリケーション８、ファイルシステム２、上位ドライバ３、パス冗長化ドライバ４、下位ドライバ５、ＨＢＡ６、ホストインタフェースケーブル２０、ホスト接続ポート１６を介してコントローラ１１に至り、指定された論理ディスク１３〜１５に書き込まれる。
【００５８】
ホストコンピュータ１上で動作するアプリケーション８よってディスクアレイサブシステム１０から読み出されるデータ（リードデータ転送Ｉ／Ｏ）は、指定された論理ディスク１３〜１５から、コントローラ１１、ホスト接続ポート１６、ホストインタフェースケーブル２０を介してＨＢＡ６に至り、更に下位ドライバ５、パス冗長化ドライバ４、上位ドライバ３、ファイルシステム２を経てアプリケーション８に至る。
【００５９】
また、ホストコンピュータ１による各Ｉ／Ｏの実行結果については、ＨＢＡ６、下位ドライバ５、パス冗長化ドライバ４、上位ドライバ３、ファイルシステム２及びアプリケーション８の各レイヤによって判断が行われ、必要に応じて何らかの処置が行われるのが一般的である。
【００６０】
ここで、パス冗長化ドライバ４は、下位ドライバ５から受け取ったＩ／Ｏの実行結果について正常終了又は異常終了の判断を行い、異常終了の原因がパスの構成要素（ＨＢＡ、インタフェースケーブル、コントローラ等）における障害（故障）と判断した場合は、代替パスを用いて、異常終了したＩ／Ｏのリトライ処理を行うドライバである（として一般に知られている。）。更に、パス冗長化ドライバ４は、一方のＩ／Ｏパス（例えばコントローラ１１）のみにＩ／Ｏが集中することのないよう、複数のＩ／Ｏパスを有効に活用し、Ｉ／Ｏの負荷分散（コントローラ１１，１２にＩ／Ｏを振り分け）を行う機能を有する。
【００６１】
次に、ミドルウェア又はソフトウェアがリザーブを使用する場合において、Ｉ／Ｏパス帯域を有効活用する手段について説明する。
【００６２】
まず、リザーブを使用した環境における、従来のパス冗長化ドライバに関する問題点について説明する。
【００６３】
（１）．パス冗長化ドライバがＩ／Ｏパスの負荷分散機能を有していても、複数のイニシエータ（ＨＢＡ）を使用してのＩ／Ｏパスの負荷分散機能を積極的に活用することができない。
【００６４】
（２）．既にリザーブを実施したイニシエータによって、例えばリリース（又は任意のイニシエータよってリセット）を実施した後、他のイニシエータからリザーブを行うことにより、複数のＩ／Ｏパスを使用することは可能である。しかし、一回のＩ／Ｏを行うたびに、<1>.リザーブを実施したイニシエータでリリース（又は任意のイニシエータでリセット）、<2>.他のイニシエータでリザーブ、<3>.目的のＩ／Ｏ実施、というように合計３つのＩ／Ｏ発行が必要となるので、Ｉ／Ｏ性能に影響を与えてしまうことになる。
【００６５】
（３）．上記（２）は、ミドルウェア又はソフトウェアの制御範囲外で、リリース（又はリセット）によって一時的にリザーブ状態が解除されるため、意図しないイニシエータからのＩ／Ｏアクセスが可能となる。そのため、ミドルウェア又はソフトウェアによる論理ディスクの排他制御の不整合やデータ破壊などの問題につながる可能性がある。
【００６６】
これらの問題点を解決するための方法を、図２及び図４〜図１０を参照して以下に説明する。図４〜図１０は、パス冗長化ドライバ４によって実施される処理過程の一部を示したフローチャート（すなわち本発明に係るパス冗長化方法の一実施形態）である。
【００６７】
本実施形態では、ＳＣＳＩ−３におけるパーシステント リザーブ イン命令及びパーシステント リザーブ アウト命令を処理する機能が実装されているディスク装置を使用した場合について説明する。また、パーシステント リザーブで使用するリザベーション キーは、１つ又は複数のホストコンピュータに実装されているイニシエータ毎にユニークな値を使用するものとする。以降の説明では、リザベーション キーの一例として、イニシエータとなるＨＢＡのワールド ワイド ポート ネーム（World Wide Port Name）の８バイトを使用する。なお、ワールド ワイド ポート ネームとは、ファイバ チャネル（Fibre Channel）ケーブルを接続するファイバ チャネル機器の各ポートに付与された固有識別子のことである。
【００６８】
図４は、パス冗長化ドライバ４のＩ／Ｏリクエスト判別処理を示すフローチャートである。以下、この図面を中心に説明する。
【００６９】
まず、上位ドライバ３からＩ／Ｏリクエストを受け取り（ステップＳ１０１）、Ｉ／Ｏリクエストがリザーブであるか否かを判断し（ステップＳ１０２）、リザーブであればリザーブ処理に移行する（ステップＳ１１０）。リザーブでなければＩ／Ｏリクエストがリリースであるか否かを判断し（ステップＳ１０３）、リリースであればリリース処理に移行する（ステップＳ１１１）。リリースでなければＩ／Ｏリクエストがリセットであるか否かを判断し（ステップＳ１０４）、リセットであればリセット処理に移行する（ステップＳ１１２）。リセットでなければＩ／Ｏリクエストがパーシステント リザーブの強制解除であるか否かを判断し（ステップＳ１０５）、パーシステント リザーブの強制解除であれば強制解除処理に移行する（ステップＳ１１３）。パーシステント リザーブの強制解除でなければ、すなわちステップＳ１０２からステップＳ１０５のいずれにも該当しなければ、従来通りの処理へ移行する（ステップＳ１０６）。
【００７０】
図５及び図６は、上位ドライバ３から受け取ったＩ／Ｏリクエストがリザーブであり、パーシステント リザーブによるリザーブを実施するための変換処理を示すフローチャートである。以下、これらの図面を中心に説明する。
【００７１】
まず、現時点における目的の論理ディスク１３〜１５に対するパーシステント リザーブ情報に関して、パーシステント リザーブ イン - リード キーズ サービス及びパーシステント リザーブ イン - リード リザベーション サービスのＩ／Ｏリクエストを生成し、これを下位ドライバ５へ発行し、ディスクアレイサブシステム１０から情報を取得する（ステップＳ２０１）。
【００７２】
続いて、ステップＳ２０１で取得した情報を参照して、自身のホストコンピュータ１でパーシステント リザーブを実施しているか否かを判断し（ステップＳ２０２）、自身のホストコンピュータ１で実施していればステップＳ２０３へ移行し、そうでなければステップＳ２１０へ移行する。
【００７３】
≪既に自身のホストコンピュータでパーシステント リザーブを実施済みの場合の処理≫
【００７４】
ステップＳ２０３では、目的の論理ディスク１３〜１５に対して、パーシステント リザーブによるリザーブを実施するために、ステップＳ２０１で取得した情報を参照して、既にパーシステント リザーブ アウト - リザーブ サービスを実施したイニシエータが自身のホストコンピュータ１のＨＢＡ６又はＨＢＡ７のいずれかであるかを特定し（本実施形態ではＨＢＡ６であったとする）、ＨＢＡ６のワールド ワイド ポート ネームの８バイトをリザベーション キーに指定し、また、タイプ（Type）にイクスクルーシブ アクセス - レジストラント オンリ（Exclusive Access - Registrants Only）を指定したパーシステント リザーブ アウト - リザーブ サービスのＩ／Ｏリクエストを生成し、下位ドライバ５へ発行する。
【００７５】
以上で、自身のホストコンピュータ１でパーシステント リザーブによるリザーブを実施している場合の処理を終了し、従来の処理へ移行する（ステップＳ２０４）。
【００７６】
≪自身のホストコンピュータではパーシステント リザーブが未実施の場合の処理≫
【００７７】
ステップＳ２０２において、自身のホストコンピュータ１でパーシステント リザーブによるリザーブを実施していない場合は、ステップＳ２０１で取得した情報を参照して、パーシステント リザーブそのものが実施されているか否かを判断し（ステップＳ２１０）、パーシステント リザーブによるリザーブそのものが実施されていなければステップＳ２１１へ移行し、自身以外のホストコンピュータ（図２では図示略、図３参照）でパーシステント リザーブによるリザーブが実施されていればステップＳ２２０へ移行する。
【００７８】
≪既に自身以外のホストコンピュータがパーシステント リザーブを実施している場合の処理≫
【００７９】
ステップＳ２２０に移行する場合は、既に自身以外のホストコンピュータでパーシステント リザーブによるリザーブが実施済みであり、上位ドライバ３から受け取ったリザーブのＩ／Ｏリクエストは、リザベーション コンフリクト（Reservation Conflict）応答でリザーブに失敗することが期待値である。
【００８０】
目的の論理ディスク１３〜１５に対して、ＨＢＡ６又はＨＢＡ７のいずれかのＨＢＡ（本実施形態ではＨＢＡ６とする）のワールド ワイド ポート ネームの８バイトをリザベーション キーとして指定し、また、タイプにイクスクルーシブ アクセス - レジストラント オンリを指定したパーシステント リザーブ アウト - リザーブ サービスのＩ／Ｏリクエストを生成し、これを下位ドライバ５へ発行する。
【００８１】
当該パターンでは、自身のホストコンピュータ１のＨＢＡ６又はＨＢＡ７のいずれのイニシエータからもパーシステント リザーブ アウト - レジスタ サービスのＩ／Ｏリクエストの発行は行っていないことから、下位ドライバ５へ発行したパーシステント リザーブ アウト - リザーブ サービスのＩ／Ｏリクエストはリザベーション コンフリクト応答によってリザーブが失敗し、期待通りの結果が得られることとなる。
【００８２】
≪自身以外のホストコンピュータ含めパーシステント リザーブが実施されていない場合の処理≫
【００８３】
ステップＳ２１１において、自身のホストコンピュータ１及び自身以外のホストコンピュータのいずれのイニシエータからもパーシステント リザーブによるリザーブは実施されていないため、目的の論理ディスクに対してパーシステント リザーブを使用するために、ＨＢＡ６又はＨＢＡ７のいずれかのＨＢＡ（本実施形態ではＨＢＡ６とする）のワールド ワイド ポート ネームの８バイトをサービス アクション リザベーション キーとして指定し、リザベーション キーにゼロを指定したパーシステント リザーブ アウト - レジスタ サービスのＩ／Ｏリクエストを生成し、これを下位ドライバ５へ発行する。
【００８４】
続いて、目的の論理ディスク１３〜１５に対してＨＢＡ６からパーシステント リザーブによるリザーブを実施するために、リザベーション キーとして、ＨＢＡ６のワールド ワイド ポート ネームの８バイトを指定し、また、タイプにイクスクルーシブ アクセス - レジストラント オンリを指定したパーシステント リザーブ アウト - リザーブ サービスのＩ／Ｏリクエストを生成し、下位ドライバ５へ発行する（ステップＳ２１２）。
【００８５】
続いて、ステップＳ２１３において、ステップＳ２１２で下位ドライバ５へ発行したパーシステント リザーブによるリザーブの実行結果を確認し、正常終了であればステップＳ２１４へ移行し、異常終了であればステップＳ２３０へ移行する。
【００８６】
ステップＳ２１４では、ＨＢＡ６の対となるＨＢＡ７からも目的の論理ディスク１３〜１５に対してパーシステント リザーブを使用するために、ＨＢＡ７のワールド ワイド ポート ネームの８バイトをサービス アクション リザベーション キーとして指定し、リザベーション キーにゼロを指定したパーシステント リザーブ アウト - レジスタ サービスのＩ／Ｏリクエストを生成し、これを下位ドライバ５へ発行する。これらの処理により、ミドルウェア又はソフトウェアがリザーブを使用する場合において、複数のイニシエータを使用したＩ／Ｏアクセスが可能となる。
【００８７】
以上で、自身のホストコンピュータ１及び自身以外のホストコンピュータのどちらもパーシステント リザーブによるリザーブを実施していない場合の処理を終了し、従来の処理へ移行する（ステップＳ２１５）。
【００８８】
≪自身以外のホストコンピュータがリザーブ又はリセットしたためパーシステント リザーブができなかった場合の処理≫
【００８９】
ステップＳ２３０では、自身以外のホストコンピュータが既にリザーブのＩ／Ｏリクエストを実施したか、又はリセットのＩ／Ｏリクエストを実施したことで、ＨＢＡ６からのパーシステント リザーブによるリザーブができなかったため、ＨＢＡ６に関するリザベーション キーを指定したパーシステント リザーブ アウト - プリエンプト サービスのＩ／Ｏリクエストを生成し、これを下位ドライバ５へ発行する。これにより、目的の論理ディスクに対するＨＢＡ６に関するパーシステント リザーブ登録情報の削除を実施し、自身のホストコンピュータ１からのパーシステント リザーブは使用しない。
【００９０】
以上で、自身以外のホストコンピュータがリザーブのＩ／Ｏリクエスト又はリセットのＩ／Ｏリクエストを実施した場合の処理を終了し、従来の処理へ移行する（ステップＳ２３１）。
【００９１】
図７［１］は、上位ドライバ３から受け取ったＩ／Ｏリクエストがリリースであり、パーシステント リザーブによるリザーブ関係をリリースするための処理を示すフローチャートである。以下、この図面を中心に説明する。
【００９２】
本Ｉ／Ｏリクエストは、リザーブ命令を発行したイニシエータから発行することにより、このイニシエータにリザーブされている論理ディスクのリザーブをリリースすることはできるが、他のイニシエータにリザーブされている論理ディスクのリザーブをリリースすることはできない。そのため、本実施形態では、目的の論理ディスクに対するパーシステント リザーブ アウト - リザーブ サービス及びパーシステント リザーブ アウト - レジスタ サービスによるリザーブ関係を全てリリースするよう試みるのみとし、リザーブ関係がリリースできたか否かは特に気にしない。
【００９３】
ステップＳ３０１では、目的の論理ディスク１３〜１５に対して、ＨＢＡ６又はＨＢＡ７のいずれかのＨＢＡ（本実施形態ではＨＢＡ６とする）のワールド ワイド ポート ネームの８バイトをリザベーション キーとして指定したパーシステント リザーブ アウト - クリア サービスのＩ／Ｏリクエストを生成し、これを下位ドライバ５へ発行する。
【００９４】
以上で、パス冗長化ドライバ４がリリースのＩ／Ｏリクエストを受け付けた場合の処理を終了し、従来の処理へ移行する（ステップＳ３０２）。
【００９５】
これらの処理により、自身のホストコンピュータ１で以前に目的の論理ディスク１３〜１５に対してパーシステント リザーブ アウト - レジスタが行われていれば、この論理ディスクに対するパーシステント リザーブ アウト - リザーブ サービス及びパーシステント リザーブ アウト - レジスタ サービスによるリザーブ関係を全てリリースすることができ、自身のホストコンピュータ１で以前に当該論理ディスクに対してパーシステント リザーブ アウト - レジスタが行われていなければ、この論理ディスクに対するパーシステント リザーブ アウト - リザーブ サービス及びパーシステント リザーブ アウト - レジスタ サービスによるリザーブ関係はリリースすることはできなく、本来のリリース命令の振る舞いを実現することができる。
【００９６】
図７［２］は、上位ドライバ３から受け取ったＩ／Ｏリクエストがリセットであり、パーシステント リザーブによるリザーブをリセットするための処理を示すフローチャートである。以下、この図面を中心に説明する。
【００９７】
本Ｉ／Ｏリクエストは、リザーブ命令を発行したイニシエータに限らず、いずれかのイニシエータから発行することで、任意のイニシエータにリザーブされている論理ディスクのリザーブをリセットすることができる。そのため、本実施形態では、目的の論理ディスクに対するパーシステント リザーブ アウト - リザーブ サービス及びパーシステント リザーブ アウト - レジスタ サービスによるリザーブ関係を全てリセットするよう振る舞うこととする。
【００９８】
ステップＳ４０１では、目的の論理ディスク１３〜１７に対して、ＨＢＡ６又はＨＢＡ７のいずれかのＨＢＡ（本実施形態ではＨＢＡ６とする）のワールド ワイド ポート ネームの８バイトをリザベーション キーとして指定したパーシステント リザーブ アウト - レジスタ アンド イグノア イグズィスティング キー サービスのＩ／Ｏリクエストを生成し、これを下位ドライバ５へ発行する。
【００９９】
続いて、ステップＳ４０２において、目的の論理ディスク１３〜１５に対して、ステップＳ４０１にてパーシステント リザーブ アウト - レジスタ アンド イグノア イグズィスティング キー サービスを発行したＨＢＡ６のワールド ワイド ポート ネームの８バイトをリザベーション キーとして指定したパーシステント リザーブ アウト - クリア サービスのＩ／Ｏリクエストを生成し、これを下位ドライバ５へ発行する。
【０１００】
以上で、パス冗長化ドライバ４がリセットのＩ／Ｏリクエストを受け付けた場合の処理を終了し、従来の処理へ移行する（ステップＳ４０３）。
【０１０１】
これらの処理により、以前に目的の論理ディスクに対してパーシステント リザーブ アウト - レジスタが行われているか否かに関わらず、当該論理ディスクに対するパーシステント リザーブ アウト - リザーブサービス及びパーシステント リザーブ アウト - レジスタ サービスによるリザーブ関係を全てリセットすることができ、本来のリセット命令の振る舞いを実現することができる。
【０１０２】
図８は、下位ドライバ５から受け取った任意の論理ディスクに対するＩ／Ｏリクエストの実行結果にパス障害を検出した場合に、パス冗長化ドライバ４が他のパスに切り替えて当該Ｉ／Ｏリクエストのリトライをするための前処理を示すフローチャートである。以下、この図面を中心に説明する。
【０１０３】
まず、現時点における当該論理ディスクに関するパーシステント リザーブ情報に関して、パーシステント リザーブ イン - リード キーズ サービス及びパーシステント リザーブ イン - リード リザベーション サービスのＩ／Ｏリクエストを生成し、これを下位ドライバ５へ発行し、ディスクアレイサブシステム１０から情報を取得する（ステップＳ５０１）。
【０１０４】
ステップＳ５０２では、ステップＳ５０１で取得した情報を参照して、自身のホストコンピュータ１でパーシステント リザーブによるリザーブを実施しているか否かを判断し、自身のホストコンピュータ１で実施していればステップＳ５０３へ移行し、そうでなければ、従来のパス切り替え処理へ移行する（ステップＳ５１０）。
【０１０５】
ステップＳ５０３では、ステップＳ５０１で取得した情報を参照して、パス障害を検出したパスでパーシステント リザーブ アウト - リザーブ サービスを実施していたか否かを判断し、パス障害を検出したパスでパーシステント リザーブ アウト - リザーブ サービスを実施していたならステップＳ５０４へ移行し、そうでなければ、従来のパス切り替え処理へ移行する（ステップＳ５１１）。
【０１０６】
ステップＳ５０４では、パス障害を検出したパス（本実施形態ではＨＢＡ６であったとする）にてパーシステント リザーブ アウト - リザーブ サービスを実施しているため、ＨＢＡ６のワールド ワイド ポート ネームの８バイトをサービス アクション リザベーション キーとして指定し、パス切り替え先（本実施形態ではＨＢＡ７であったとする）よりＨＢＡ７のワールド ワイド ポート ネームの８バイトをリザベーション キーとして指定したパーシステント リザーブ アウト - プリエンプト サービスのＩ／Ｏリクエストを生成し、これを下位ドライバ５へ発行する。これらの処理により、パーシステント リザーブによるリザーブはＨＢＡ７のパスに移動させることができる。
【０１０７】
以上で、パス冗長化ドライバ４がパス障害を検出した場合の前処理を終了し、従来のパス切り替え処理へ移行する（ステップＳ５０５）。
【０１０８】
図９は、パス障害を検出したパスが部品交換などにより正常状態に復旧した場合に、パス冗長化ドライバ４に正常なパスとして組み込むための前処理を示すフローチャートである。以下、この図面を中心に説明する。
【０１０９】
まず、現時点における当該論理ディスクに関するパーシステント リザーブ情報に関して、パーシステント リザーブ イン - リード キーズ サービス及びパーシステント リザーブ イン - リード リザベーション サービスのＩ／Ｏリクエストを生成し、これを下位ドライバ５へ発行し、ディスクアレイサブシステム１０から情報を取得する（ステップＳ６０１）。
【０１１０】
ステップＳ６０２では、ステップＳ６０１で取得した情報を参照して、自身のホストコンピュータ１でパーシステント リザーブによるリザーブを実施しているか否かを判断し、自身のホストコンピュータ１で実施していたならばステップＳ６０３へ移行し、そうでなければ、従来のパス切り戻し処理へ移行する（ステップＳ６１０）。
【０１１１】
ステップＳ６０３では、以前にパス障害を検出したパス（本実施形態ではＨＢＡ６であったとする）は、パーシステント リザーブを使用するためのレジスタ情報が削除されている可能性があるため、再度ＨＢＡ６のワールド ワイド ポート ネームの８バイトをサービス アクション リザベーション キーとして指定し、リザベーション キーにゼロを指定したパーシステント リザーブ アウト - レジスタ サービスのＩ／Ｏリクエストを生成し、これを下位ドライバ５へ発行する。これらの処理によりＨＢＡ６のパスからもパーシステント リザーブを使用することができ、ミドルウェア又はソフトウェアがリザーブを使用する場合において、複数のイニシエータを使用したＩ／Ｏアクセスが可能となる。
【０１１２】
以上で、パス障害を検出したパスが部品交換などにより正常状態に復旧した場合に、パス冗長化ドライバ４に正常なパスとして組み込むための前処理を終了し、従来のパス切り替え処理へ移行する（ステップＳ６０４）。
【０１１３】
図４〜図９の処理では、上位ドライバ３から受け取ったリザーブ、リリース又はリセットのＩ／Ｏリクエストについて、パーシステント リザーブ イン命令及びパーシステント リザーブ アウト命令への置き換え、ディスクアレイサブシステム１０への発行及びこれらの管理及び制御は、パス冗長化ドライバ４内に隠蔽して処理するため、上位ドライバ３や下位ドライバ５及びリザーブを使用するミドルウェアやアプリケーションに改造の必要はない。
【０１１４】
なお、これらリザーブ、リリース又はリセットのＩ／Ｏリクエストは、主にミドルウェア又はソフトウェアが論理ディスクを排他制御するために使用し、ミドルウェア又はソフトウェアの処理開始時に使用されるか、ミドルウェア又はソフトウェアの稼動中に一定の時間間隔をもって使用されるものであって常時使用されるものではなく、通常のＩ／Ｏリクエスト（例えば、リードデータ転送Ｉ／Ｏやライトデータ転送Ｉ／Ｏ）への影響は与えない。
【０１１５】
図１０は、パーシステント リザーブを強制的に解除するための処理を示すフローチャートである。以下、この図面を中心に説明する。
【０１１６】
パーシステント リザーブ アウト - リザーブ サービスでは、命令のパラメータ指定によっては、ディスクアレイサブシステムの電源をオフし、次回の電源オン後も電源オフ以前のリザーブ状態が保持され続ける。このため、ミドルウェア又はソフトウェアによるリザーブの使用又は制御中にリザーブ管理に矛盾が発生した場合、パーシステント リザーブによるリザーブが解除できなくなる可能性がある点を考慮し、パーシステント リザーブによるリザーブ状態及び関連情報を強制解除する手段をパス冗長化ドライバ４に設けることとする。
【０１１７】
ステップＳ７０１では、目的の論理ディスク１３〜１５に対して、ＨＢＡ６又はＨＢＡ７のいずれかのＨＢＡ（本実施形態ではＨＢＡ６とする）のワールド ワイド ポート ネームの８バイトをリザベーション キーとして指定したパーシステント リザーブ アウト - レジスタ アンド イグノア イグズィスティング キー サービスのＩ／Ｏリクエストを生成し、これを下位ドライバ５へ発行する。
【０１１８】
続いて、ステップＳ７０２において、目的の論理ディスクに対して、ステップＳ７０１においてパーシステント リザーブ アウト - レジスタ アンド イグノア イグズィスティング キー サービスを発行したＨＢＡ６のワールド ワイド ポート ネームの８バイトをリザベーション キーとして指定したパーシステント リザーブ アウト - クリア サービスのＩ／Ｏリクエストを生成し、これを下位ドライバ５へ発行する。
【０１１９】
以上で、パス冗長化ドライバ４がパーシステント リザーブ強制解除のＩ／Ｏリクエストを受け付けた場合の処理を終了し、従来の処理へ移行する（ステップＳ７０３）。
【０１２０】
これらの処理により、目的の論理ディスクに対するパーシステント リザーブ アウト − リザーブ サービス及びパーシステント リザーブ アウト - レジスタ サービスによるリザーブ状態及び関連情報を全て解除することができる。
【０１２１】
一例として、図３のようなクラスタシステムにおいて、ミドルウェア又はソフトウェアによるリザーブの使用中又は制御中にリザーブ管理に矛盾が発生した場合にパーシステント リザーブを強制解除する手順を以下に示す。
【０１２２】
（１）全てのノード（ホストコンピュータ）にてＯＳをシャットダウン（電源オフ）する。
（２）任意の１ノードのみＯＳを起動（電源オン）する。
（３）クラスタソフトのサービスプログラム及びドライバ類をＯＳ起動時に自動で開始されないようにパラメータの設定を変更する。
（４）ＯＳを再起動（電源オフ→電源オン）する。
（５）パス冗長化ドライバを操作するユーザインタフェース上からパーシステント リザーブ強制解除コマンドを実行する。
（６）前記（３）で変更したクラスタソフトのサービスプログラム及びドライバ類のパラメータを元に戻す。
（７）ＯＳをシャットダウンする。
（８）全てのノードにてＯＳを起動し、クラスタシステムを再開する。
【０１２３】
次に、本発明の効果について詳細に説明する。第一の効果は、論理ディスクに対してミドルウェア又はソフトウェアがリザーブを使用する場合においても、パス冗長化ドライバにて、複数のイニシエータを使用してのＩ／Ｏパスの負荷分散機能を積極的に活用することが可能となり、アクセス性能の向上を図ることができる。
【０１２４】
その理由について説明する。リザーブ状態は、リザーブコマンドを発行したホストバスアダプタ（イニシエータ）とディスク（ターゲット）との間で確立される。このとき、ホストバスアダプタからリザーブされたディスクに対して、別のホストバスアダプタからリード／ライトしてもエラーとなり、リード／ライトは失敗する。そのため、リザーブコマンドが使用される場合では、ホストコンピュータにホストバスアダプタを二枚実装し、それぞれをディスクアレイサブシステムとケーブル接続することにより二つのデータ転送経路を設けても、データ転送に使用できる経路は一つに限定されてしまう。本発明では、この問題点を解決し、複数のデータ転送経路を有効に活用できる。
【０１２５】
第二の効果は、論理ディスクに対してミドルウェア又はアプリケーションが使用するリザーブ、リリース及びリセットのＩ／Ｏリクエストについて、パーシステント リザーブ イン（ＳＣＳＩ−３）命令及びパーシステント リザーブ アウト（ＳＣＳＩ−３）命令への置き換え、ディスクアレイサブシステムへの発行並びにこれらの管理及び制御は、パス冗長化ドライバ内に隠蔽して処理するため、上位ドライバや下位ドライバ及びミドルウェアやアプリケーションに改造の必要はない。
【０１２６】
その理由について説明する。パス冗長化ドライバは、ＯＳカーネル内でフィルタドライバとして実装する。フィルタドライバは一般的に、ＯＳ標準ドライバに無い機能を補う。また、その名前が示すように透過性があり、補いたい機能以外は全て素通りするので、フィルタドライバを挟む上下のドライバやミドルウェアに機能変更の必要は発生しない。更に、ユーザモードで動作するアプリケーションには、その存在がわからない。よって、アプリケーションにも改造の必要はない。
【０１２７】
第三の効果は、論理ディスクに対してミドルウェア又はアプリケーションが使用するリザーブ、リリース又はリセットのＩ／Ｏリクエストに関して作用するものであり、他のＩ／Ｏリクエストに対しては何ら影響を与えることはない。
【０１２８】
その理由について説明する。第二の効果で述べたように、フィルタドライバの目的は、ＯＳ標準ドライバに無い機能を補うことである。そのため、パス冗長化ドライバ（フィルタドライバ）にて機能強化する動作及び作用以外については、ＯＳ標準ドライバが普通に処理する。
【０１２９】
第四の効果は、ミドルウェア又はソフトウェアによるリザーブの使用又は制御中にリザーブ管理に矛盾が発生した場合にパーシステント リザーブを強制解除する手段を設けることにより、リザーブ管理の矛盾を解消し、正常状態に復帰させることができる。
【０１３０】
その理由について説明する。リザーブコマンドによるディスクのリザーブ状態は、仕様上、リザーブコマンドを発行したホストバスアダプタを搭載したホストコンピュータの電源オフやディスク装置の電源オフ、又はリセット（ＬＵＮリセット／ターゲット リセット／バス リセット）で解除さる。仮にミドルウェアやソフトウェアによるリザーブの使用又は制御中に、ミドルウェアやソフトウェアの不具合によりリザーブ状態の管理に矛盾が発生した場合においても、ホストコンピュータ又はディスク装置の電源オフでリザーブ状態を解除することができ、リスタートが可能である。
【０１３１】
一方、パーシステント リザーブコマンドでは、ホストコンピュータの電源オフやディスク装置の電源オフ、又はリセット（ＬＵＮリセット／ターゲット リセット／バス リセット）でもリザーブ状態を解除しない指定が可能である。この場合は、ミドルウェア、ソフトウェア又はパス冗長化ドライバの不具合によって、リザーブ状態の管理に矛盾が発生してしまうと、簡単にリザーブ状態を解除することができない。そのため、ディスクアレイ装置の保守員又は開発技術者によって特殊な保守コマンドでリザーブ状態を解除しなければならないので、ディスクアレイ装置の顧客の業務再開までに時間を要してしまい、その顧客に多大な損害を与えてしまう。そこで、予め強制解除手段を設けておくことにより、このような不測の事態を回避及び解決する。
【０１３２】
以下、本発明の他の実施形態について説明する。
【０１３３】
図２では、ＨＢＡ６，７の２つのＨＢＡを搭載するホストコンピュータ１を構成例としてあげたが、ＨＢＡの枚数は、ＯＳの種類、ＯＳ標準ドライバ、又はホストコンピュータ１のハードウェア等の仕様によって制限されるものであり、パス冗長化ドライバ４としてＨＢＡの枚数に制限はない。
【０１３４】
図２では、コントローラ１１，１２の２つのコントローラを搭載するディスクアレイサブシステム１０を構成例としてあげたが、そのコントローラ数に制限はない。
【０１３５】
図２では、コントローラ１１，１２にホスト接続ポート１６，１７を１つずつ搭載するディスクアレイサブシステム１０を構成例としてあげたが、コントローラに搭載するホスト接続ポート数に制限はない。
【０１３６】
図２では、ＨＢＡ６，７とコントローラ１１，１２とを直接ホストインタフェースケーブル２０，２１で接続したものを構成例としてあげたが、図３のように、途中に、スイッチ又はハブ等が介在してもかまわない。
【０１３７】
図２では、ディスクアレイサブシステム１０にホストコンピュータ１が１台のみ接続したものを構成例としてあげたが、図３に示すように、接続するホストコンピュータ数に制限はない。
【０１３８】
図２では、論理ディスクはディスクアレイサブシステム１０内に構成されるものを例としてあげたが、ディスクアレイサブシステム１０に接続されたＪＢＯＤ（Just Bunch of Disks）等の外部のディスクで構成されても良い。
【０１３９】
図２及び図３のホストコンピュータに接続されるディスクアレイサブシステムの数に制限はない。
【０１４０】
図２のディスクアレイサブシステム１０内に構成される論理ディスク１３〜１５の数に制限はない。
【０１４１】
図２のディスクアレイサブシステム１０内の内部バス１８，１９の数に制限はない。
【０１４２】
図３は２ノードクラスタの構成例であるが、クラスタを構成するノード数に制限はない。
【０１４３】
本実施形態では、ディスクアレイサブシステムを例にしたが、ディスクアレイサブシステムのみに限定されるものではない。
【０１４４】
本実施形態では、パーシステント リザーブ イン命令及びパーシステント リザーブ アウト命令のリザベーション キーとして、ＨＢＡのワールド ワイド ポート ネームの８バイトを使用して説明したが、この限りではなく、ユニークな値であれば何でも良い。
【０１４５】
本実施形態では、パーシステント リザーブ イン命令及びパーシステント リザーブ アウト命令を処理する機能をディスクアレイサブシステムが実装していることを例に挙げて説明したが、ディスクアレイサブシステムにベンダー固有の命令を実装し、ベンダー固有命令を１つ又は複数組み合わせて実現しても良い。
【図面の簡単な説明】
【０１４６】
【図１】本発明に係るパス冗長化ドライバの一実施形態を示すブロック図である。
【図２】本実施形態のパス冗長化ドライバを含むディスクアレイシステムを示すブロック図である。
【図３】本実施形態のパス冗長化ドライバを含むクラスタシステムを示すブロック図である。
【図４】本実施形態のパス冗長化ドライバの動作を示すフローチャート（フロー１）である。
【図５】本実施形態のパス冗長化ドライバの動作を示すフローチャート（フロー２）である。
【図６】本実施形態のパス冗長化ドライバの動作を示すフローチャート（フロー２）である。
【図７】本実施形態のパス冗長化ドライバの動作を示すフローチャート（フロー３，４）である。
【図８】本実施形態のパス冗長化ドライバの動作を示すフローチャート（フロー５）である。
【図９】本実施形態のパス冗長化ドライバの動作を示すフローチャート（フロー６）である。
【図１０】本実施形態のパス冗長化ドライバの動作を示すフローチャート（フロー７）である。
【符号の説明】
【０１４７】
１Ａ  ディスクアレイシステム
１  ホストコンピュータ
２  ファイルシステム
３  上位ドライバ
４  パス冗長化ドライバ（冗長パス制御装置）
４１  命令捕捉手段
４２  命令置換手段
４３  命令発行手段
５  下位ドライバ
６，７  ＨＢＡ
８  アプリケーション
１０  ディスクアレイサブシステム
１１，１２  コントローラ
１３，１４，１５  論理ディスク
１６，１７  ホスト接続ポート
１８，１９  内部バス
２０，２１  ホストインタフェースケーブル
【図１】
0004506594.tif 000002
【図２】
0004506594.tif 000003
【図３】
0004506594.tif 000004
【図４】
0004506594.tif 000005
【図５】
0004506594.tif 000006
【図６】
0004506594.tif 000007
【図７】
0004506594.tif 000008
【図８】
0004506594.tif 000009
【図９】
0004506594.tif 000010
【図１０】
0004506594.tif 000011