(57)【要約】【課題】  中間情報処理部が情報発行部に異常を報告すること無く情報を再発行するように構成されていても、異常に応じた処理が情報発行部によって開始されるのが遅くならないようにする。【解決手段】  情報処理システムは、特定の障害に関するデータである障害データを記憶する障害記憶域と、情報を発行する情報発行部と、中間情報処理部と、情報フィルタ部とを備える。中間情報処理部は、情報発行部によって発行された情報を受信して出力し、情報の出力に応答して異常を受信した場合、異常を情報発行部に知らせる前に、少なくとも一回は出力した情報を再出力し、少なくとも一回の再出力を行っても異常を受信した場合、異常を情報発行部に知らせる。情報フィルタ部は、中間情報処理部から発行された情報を受信し、障害記憶域に障害データが記憶されているか否かを判断し、障害データが記憶されていない場合、受信した情報をリソース部へ出力し、障害データが記憶されている場合、情報の受信に応答して異常を中間情報処理部に通知する。【選択図】図１７
2006031335.tif 000002
【特許請求の範囲】
【請求項１】
記憶システムと通信する情報処理システムにおいて、
複数のコンピュータプログラムを記憶するプログラム記憶域と、
特定の障害に関するデータである障害データを記憶する障害記憶域と、
前記記憶域から少なくとも一つのコンピュータプログラムを読み込み実行する少なくとも一つのプロセッサと
を備え、前記複数のコンピュータプログラムは、
情報を発行する情報発行プログラムと、
前記情報発行プログラムによって発行された情報を受信して出力し、前記情報の出力に応答して異常を受信した場合、異常を前記情報発行プログラムに知らせる前に、少なくとも一回は前記出力した情報を再出力し、前記少なくとも一回の再出力を行っても異常を受信した場合、異常を前記情報発行プログラムに知らせる中間処理プログラムと、
前記中間処理プログラムから発行された情報を受信し、前記障害記憶域に障害データが記憶されているか否かを判断し、前記障害データが記憶されていない場合、前記受信した情報を前記記憶システムへ出力し、前記障害データが記憶されている場合、前記情報の受信に応答して異常を前記中間処理プログラムに通知する情報フィルタプログラムと
を含んでいる、
情報処理システム。
【請求項２】
前記記憶システムは、前記情報処理システムから発行された情報を処理し、前記情報を正常に処理した場合には、正常を表す処理結果データを前記情報処理システムに返送し、前記情報を正常に処理しなかった場合には、異常を表す処理結果データを前記情報処理システムに返送し、
前記情報フィルタプログラムは、前記記憶システムから返送された処理結果データを受信し、前記受信した処理結果データが正常を表している場合には、正常を前記中間処理プログラムに出力し、前記受信した処理結果データが異常を表している場合には、前記障害データを前記障害記憶域に格納し、且つ、異常を前記中間処理プログラムに出力する、
請求項１記載の情報処理システム。
【請求項３】
前記中間処理プログラムは、識別子を有する情報を発行し、
前記情報フィルタプログラムは、前記受信した処理結果データが異常を表す場合、その処理結果データに対応した情報の識別子を前記障害記憶域に登録し、前記中間処理プログラムから情報を受信した場合、前記受信した情報が有する識別子に適合する識別子が前記障害記憶域に登録されている場合に、異常を前記中間処理プログラムに通知する、
請求項２記載の情報処理システム。
【請求項４】
前記記憶システムは、第一の論理ボリュームを備えており、
前記第一の論理ボリュームは、第二の論理ボリュームとペアを形成し、
前記第二の論理ボリュームは、前記記憶システム、又は、前記記憶システムに接続された別の記憶システムに備えられ、
前記複数のコンピュータプログラムは、前記第一の論理ボリュームと前記第二の論理ボリュームとの間でデータのコピーに関する制御を実行し、前記制御を正常に行わなければ、異常を表す制御結果データを出力するコピー制御プログラムを更に含み、
前記情報フィルタプログラムは、前記コピー制御プログラムに制御の実行の要求を行い、前記要求に応答して前記制御結果データを前記コピー制御プログラムから受信し、前記受信した制御結果データが異常を表していれば、障害データを前記障害記憶域に格納し、異常を前記中間処理プログラムに出力する、
請求項１記載の情報処理システム。
【請求項５】
前記情報処理システムは、前記中間処理プログラムから発行された情報を一時的に記憶するための情報記憶域を更に備え、
前記情報フィルタプログラムは、前記受信した情報を前記情報記憶域に格納する前、又は、前記情報記憶域から前記情報を読み出した後に、前記障害記憶域に障害データが記憶されているか否かを判断する、
請求項１記載の情報処理システム。
【請求項６】
前記複数のコンピュータプログラムは、前記特定の障害が回復したか否かを検知し、回復したと検知された場合には、障害の回復を前記障害記憶域に記録する障害回復検知プログラムを更に含む、
請求項１記載の情報処理システム。
【請求項７】
前記障害回復検知プログラムは、前記記憶システムに関するデバイス情報の取得が行われたことを検出した場合に、前記特定の障害が回復したか否かを検知する、
請求項６記載の情報処理システム。
【請求項８】
前記障害回復検知プログラムは、前記記憶システムのリソースをオンラインにすることを検出した場合に、前記特定の障害が回復したか否かを検知する、
請求項６記載の情報処理システム。
【請求項９】
情報発行部と中間情報処理部とリソース部とを備えるシステムにおいて行われる情報処理方法であって、
情報発行部が、情報を発行するステップと、
中間情報処理部が、前記発行された情報を受信して出力するステップと、
前記出力された情報を受信し、障害記憶域に障害データが記憶されているか否かを判断し、前記障害データが記憶されていない場合、前記出力された情報を前記リソース部へ出力するステップと、
前記リソース部が、前記出力された情報を受信し、前記受信した情報を正常に処理できない場合に異常を表す処理結果データを出力するステップと、
前記出力された処理結果データを受信し、前記受信した制御結果データが異常を表していれば、障害データを前記障害記憶域に格納し、異常を前記中間情報処理部に出力するステップと、
前記中間情報処理部が、前記情報の出力に応答して異常を受信した場合、異常を前記情報発行部に知らせる前に、前記出力した情報を再出力するステップと、
前記出力された情報を受信し、前記障害記憶域に障害データが記憶されているか否かを判断し、前記障害データが記憶されている場合、前記情報の受信に応答して異常を前記中間情報処理部に通知するステップと、
前記中間情報処理部が、前記再出力に応答して異常を受信した場合、異常を前記情報発行部に知らせるステップと、
前記情報発行部が、異常を受信し、受信した異常に応答した処理を実行するステップと
を有する情報処理方法。
【請求項１０】
情報を発行する情報発行プログラムによって発行された情報を受信して出力する中間処理プログラムから出力された情報を受信するステップと、
記憶域に障害データが記憶されているか否かを判断するステップと、
前記判断の結果、前記障害データが記憶されていない場合、前記受信した情報を宛先に出力するステップと、
前記判断の結果、前記障害データが記憶されている場合、前記情報の受信に応答して異常を前記中間処理プログラムに通知するステップと
をコンピュータに実行させるためのコンピュータプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１１】
リソース部と通信する情報処理システムにおいて、
特定の障害に関するデータである障害データを記憶する障害記憶域と、
情報を発行する情報発行部と、
前記情報発行部によって発行された情報を受信して出力し、前記情報の出力に応答して異常を受信した場合、異常を前記情報発行部に知らせる前に、少なくとも一回は前記出力した情報を再出力し、前記少なくとも一回の再出力を行っても異常を受信した場合、異常を前記情報発行部に知らせる中間情報処理部と、
前記中間情報処理部から発行された情報を受信し、前記障害記憶域に障害データが記憶されているか否かを判断し、前記障害データが記憶されていない場合、前記受信した情報を前記リソース部へ出力し、前記障害データが記憶されている場合、前記情報の受信に応答して異常を前記中間情報処理部に通知する情報フィルタ部と
を含んでいる、
情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータを用いた情報処理技術に関わり、具体的には、例えば、特定の障害によって異常が発生した場合の情報処理に関わる。
【背景技術】
【０００２】
例えば、上位装置（例えばホストコンピュータ）と、第一と第二の記憶装置システム（例えば、ＲＡＩＤ（Redundant Array of Independent Disks）のようなディスクアレイシステム）とを有するコンピュータシステムが知られている。第一と第二の記憶装置システムの各々は、少なくとも一つの論理ボリュームを備えている。一つの論理ボリュームは、記憶装置システムが備える１又は複数の物理的な記憶デバイス（例えばハードディスク）上に用意される。
【０００３】
このようなコンピュータシステムでは、例えば、リモートコピーという処理が行われることがある。リモートコピーとは、第一の記憶装置システムの論理ボリューム内のデータを、上位装置を経由すること無く、第二の記憶装置システムの論理ボリュームにコピーすることである。リモートコピーのコピー元となる論理ボリュームをコピー元ボリュームと言い、リモートコピーのコピー先となる論理ボリュームをコピー先ボリュームと言う。コピー元ボリュームとコピー先ボリュームは、例えば、記憶容量が同一であり、一対一の対応関係（換言すれば一つのコピーペア）を形成する。コピー元ボリューム内のデータは、第一と第二の記憶装置システム間を接続するリモートコピーライン（例えば、専用回線或いは公衆回線等）を介して、コピー先ボリュームにコピーされる。リモートコピーでは、例えば、コピー方向は一方向であり、上位装置からの書き込み要求について、コピー元ボリュームでは受け付けることができるが、コピー先ボリュームでは受け付けることができない。コピー元ボリュームに含まれるデータが更新された場合（例えば、第一のデータに第二のデータが上書きされた場合）、更新データ（例えば、第一のデータと第二のデータの差分）が、コピー元ボリュームからリモートコピーラインを介してコピー先ボリュームに書き込まれ、それにより、コピー元ボリューム内のデータとコピー先ボリューム内のデータとを同一内容にすることができる。このようなリモートコピーに関する技術は、特許文献１（特開２００３−７６５９２号公報）や特許文献２（米国特許明細書第５，７４２，７９２号）に開示されている。
【０００４】
ところで、コンピュータシステムには、複数の上位装置、例えば、第一と第二の上位装置が備えられることがある。このようなコンピュータシステムでは、第一と第二の上位装置によって同一の論理ボリュームが共有される場合がある（以下、その論理ボリュームを「共有ボリューム」と言う）。共有ボリュームは、排他制御される。具体的には、例えば、共有ボリュームは、第一の上位装置からのアクセス要求のみが許可され、同時期に第二の上位装置からのアクセス要求が許可されないよう制御される。より具体的には、例えば、上位装置と記憶装置システムとのインターフェイスとしてＳＣＳＩ（Small Computer System Interface）が採用されているコンピュータシステムでは、第一の上位装置が、上記ＳＣＳＩで規定するリザーブ系のコマンドを共有ボリュームに対して送信し、記憶装置システムは、共有ボリュームがどの上位装置にも使用されていない場合に、上記リザーブ系のコマンドを第一の上位装置から受信したならば、共有ボリュームを第一の上位装置に対してリザーブ状態にし、それにより、第二の上位装置からのアクセス要求を受け付けないようにすることができる。共有ボリュームが第一の上位装置に対してリザーブ状態にされている最中に、第二の上位装置から共有ボリュームに対するアクセス要求を受けた場合、記憶装置システムは、例えば、共有ボリュームに別の上位装置がリザーブされていることを表すステータスデータ（例えばリザベーションコンフリクトというステータスを表すデータ）を第二の上位装置に返送する。
【０００５】
上位装置には、例えば、アプリケーションソフトウェア（以下、単に「アプリケーション」と言う）と、記憶装置システムのドライバソフトウェア（以下、ディスク制御ソフトウェア）とが備えられている。アプリケーションは、ユーザの操作等に応じて、論理ボリュームへのデータの書込み或いは論理ボリュームからのデータの読出しを求めるＩ／Ｏ要求を発行することができる。ディスク制御ソフトウェアは、アプリケーションから発行されたＩ／Ｏ要求を受信し、そのＩ／Ｏ要求を、記憶装置システムが処理できる形式（例えばＳＣＳＩプロトコルに基づく形式）に変換して、変換後のＩ／Ｏ要求を記憶装置システムに送信することができる。また、例えば、ディスク制御ソフトウェアは、そのＩ／Ｏ要求に対する応答として、異常ステータスを表すデータ（以下、異常ステータスデータ）を記憶装置システムから受信することがある。ディスク制御ソフトウェアは、受信した異常ステータスデータが特定の異常ステータスを表している場合には、リトライ処理、例えば、過去に送信した上記変換後のＩ／Ｏ要求を再び記憶装置システムに送信する処理を実行することができる。
【０００６】
ところで、複数の上位装置を接続してクラスタを構成することができる。この場合、クラスタを構成する各上位装置（以下、便宜上「クラスタサーバ」と言う）には、例えば、クラスタを実現するためのソフトウェア（以下、クラスタソフトウェア）が搭載される。以下、便宜上、クラスタが管理するリソース（例えば、物理的な記憶デバイス等のハードウェアや、データベースマネジメントシステム等のプログラムのこと）を、クラスタリソースと呼ぶ。また、クラスタを備えたコンピュータシステムを、クラスタシステムと呼ぶ。
【０００７】
クラスタシステムは、フェイルオーバという処理を行うことで、クラスタリソースの使用を継続することができる。具体的には、例えば、或る一つのクラスタサーバに障害が発生することで、そのクラスタサーバによって或るクラスタリソースの使用が継続されなくなる場合、そのクラスタサーバに備えられているクラスタソフトウェアが、フェイルオーバ処理、すなわち、正常に稼動している別のクラスタサーバに上記或るクラスタリソースの使用を切り替える処理を行うことで、その或るクラスタリソースの使用が継続される。クラスタシステムを構成する複数のクラスタサーバは、インターネット等のＩＰ（Internet protocol)を用いたネットワークによって接続される。各クラスタサーバのクラスタソフトウェアは、このネットワークを用いて他のクラスタサーバと互いに通信することで、通信相手のクラスタサーバの状態を監視する。この通信を、クラスタ通信又はハートビート通信という。
【０００８】
複数のクラスタサーバが一つの記憶装置システムを共有しているクラスタシステムを、例えば、共有ディスクモデルクラスタシステムと呼ぶ。共有ディスクモデルクラスタシステムでは、例えば、二つのクラスタサーバ間でのハートビート通信が切断された場合、それら二つのクラスタサーバの各々が、共有ボリュームを用いた共有排他制御を行うことで、二つのクラスタサーバは互いの稼動状態を確認することができ、それにより、二つのクラスタサーバが別個に動作する状態（以下、スプリットブレイン）を阻止することができる。以下、便宜上、このスプリットブレインを防ぐための制御（上記の例では、共有排他制御）を「調停」と呼ぶ。
【０００９】
共有ディスクモデルクラスタシステムを実現するためのクラスタソフトウェアには、例えば、調停を行うために使用される記憶デバイス（例えば、調停用ディスク、調停用ボリューム又はクォーラムディスクと呼ばれることがある）に対してＳＣＳＩコマンドを用いた共有排他制御を行い（つまり、リザーブ系のコマンドを発行することをディスク制御ソフトウェアに要求し）、それにより、スプリットブレイン状態を回避するソフトウェアがある。例えば、クラスタソフトウェアは、定期的に、ディスク制御ソフトウェアを介して記憶装置システムにＩ／Ｏ要求を発行し、それに応答して記憶装置システムからディスク制御ソフトウェアを介して受信する応答結果を参照して、Ｉ／Ｏ要求を受信した記憶装置システムの状態を監視することができる。応答結果が異常ステータスである場合は、クラスタソフトウェアは、障害が発生したと判断して、上述したフェイルオーバ処理を実行することができる。クラスタソフトウェアについては、例えば、特許文献３（米国特許明細書第６，２７９，０３２号）及び特許文献４（米国特許明細書第６，４０１，１２０号）に開示がある。
【００１０】
【特許文献１】特開２００３−７６５９２号公報
【特許文献２】米国特許明細書第５，７４２，７９２号
【特許文献３】米国特許明細書第６，２７９，０３２号
【特許文献４】米国特許明細書第６，４０１，１２０号
【発明の開示】
【発明が解決しようとする課題】
【００１１】
ところで、上述した従来技術では、例えば、ディスク制御ソフトウェアが、特定の異常ステータス（一例として、タイムアウト）を表す異常ステータスデータを受信した場合、異常を上位のアプリケーションに報告すること無く、リトライ処理、例えば、過去に送信したＩ／Ｏ要求を再び記憶装置システムに送信する処理を実行することがある。そして、それに応答して、再び、特定の異常ステータスデータを受信した場合、ディスク制御ソフトウェアは、再度、異常を上位のアプリケーションに報告すること無くリトライ処理を実行することがある。ディスク制御ソフトウェアは、例えば、予めユーザによって設定されたリトライ回数だけ、或いは、異常が回復して正常ステータスを表すデータを受信するまで、異常を上位のアプリケーションに報告すること無く上述したリトライ処理を延々と繰り返すことがある。
【００１２】
アプリケーションの一つであるクラスタソフトウェアは、ディスク制御ソフトウェアから異常の報告を受けた場合に、異常が発生したと判断して、上述したフェイルオーバ処理を開始することができる。換言すれば、クラスタソフトウェアがディスク制御ソフトウェアから異常の報告を受けるまで、フェイルオーバ処理が開始されないまま待ちの状態が続いてしまう。これでは、フェイルオーバ処理の開始が遅くなる。
【００１３】
上述したような問題点と同質の問題点は、クラスタシステムに限らず種々のシステムに存在すると考えられる。例えば、情報発行部とリソース部との間に中間情報処理部が介在するシステムにおいて、中間情報処理部が、情報発行部からの情報（例えば、リソースの使用に関する要求）に応答してリソース部に情報を発行し、その情報に応答してリソース部から異常を受信した場合に、少なくとも一回は情報発行部に異常を知らせること無く情報をリソース部に再発行し、それでもなお異常を受信した場合に、異常を情報発行部に通知するようになっている場合、情報発行部に異常が知らされるのが遅延するという問題点が存在すると考えられる。
【００１４】
従って、本発明の目的は、中間情報処理部が情報発行部に異常を報告すること無く情報を再発行するように構成されていても、異常に応じた処理が情報発行部によって開始されるのが遅くならないようにすることにある。具体的には、例えば、本発明の一つの目的は、ディスク制御ソフトウェアが異常を受信した場合に異常をクラスタソフトウェアに報告すること無くＩ／Ｏ要求を再発行するようになっていたとしても、クラスタソフトウェアによるフェイルオーバ処理の開始が遅くならないようにすることにある。
【００１５】
本発明の更なる目的は、後の記載から明らかになるであろう。
【課題を解決するための手段】
【００１６】
本発明の第一の側面に従う情報処理システム（以下、第一情報処理システム）は、記憶システムと通信することができ、複数のコンピュータプログラムを記憶するプログラム記憶域と、特定の障害に関するデータである障害データを記憶する障害記憶域と、前記記憶域から少なくとも一つのコンピュータプログラムを読み込み実行する少なくとも一つのプロセッサとを備える。前記複数のコンピュータプログラムは、情報を発行する情報発行プログラムと、中間処理プログラムと、情報フィルタプログラムとを含む。中間処理プログラムは、前記情報発行プログラムによって発行された情報を受信して出力し、前記情報の出力に応答して異常を受信した場合、異常を前記情報発行プログラムに知らせる前に、少なくとも一回は前記出力した情報を再出力し、前記少なくとも一回の再出力を行っても異常を受信した場合、異常を前記情報発行プログラムに知らせる。情報フィルタプログラムは、前記中間処理プログラムから発行された情報を受信し、前記障害記憶域に障害データが記憶されているか否かを判断し、前記障害データが記憶されていない場合、前記受信した情報を前記記憶システムへ出力し、前記障害データが記憶されている場合、前記情報の受信に応答して異常を前記中間処理プログラムに通知する。
【００１７】
情報処理システムは、記憶システムを備えても良い。記憶システムは、記憶装置（例えばハードディスクドライブ）であっても良いし、複数の記憶装置を備えた記憶装置システムであっても良い。また、情報フィルタプログラムは、前記障害データが記憶されている場合、受信した情報を記憶システムに出力することなく（例えばそれを消去して）、異常を前記中間処理プログラムに通知しても良い。
【００１８】
「特定の障害」とは、例えば、記憶システムに関する障害であっても良いし、記憶システムに関わらず、情報処理システムに関わる障害（例えば、後述のコピー制御プログラムのコピー制御に関する障害）であっても良い。
【００１９】
また、中間処理プログラムは、情報発行プログラムから受けた情報と全く同じ情報を出力しても良いし、その情報を加工したもの（例えば、記憶システムが解釈できる形式に変換したもの）を出力しても良い。また、第一情報処理システムにおいてやり取りされる「異常」は、例えば異常を表すデータである。
【００２０】
第一情報処理システムの第一の実施態様では、前記記憶システムは、前記情報処理システムから発行された情報を処理し、前記情報を正常に処理した場合には、正常を表す処理結果データを前記情報処理システムに返送し、前記情報を正常に処理しなかった場合には、異常を表す処理結果データを前記情報処理システムに返送するようになっている。この場合、前記情報フィルタプログラムは、前記記憶システムから返送された処理結果データを受信し、前記受信した処理結果データが正常を表している場合には、正常を前記中間処理プログラムに出力し、前記受信した処理結果データが異常を表している場合には、前記障害データを前記障害記憶域に格納し、且つ、異常を前記中間処理プログラムに出力する。
【００２１】
第一情報処理システムの第二の実施態様では、前記第一の実施態様において、前記中間処理プログラムは、識別子を有する情報を発行する。前記情報フィルタプログラムは、前記受信した処理結果データが異常を表す場合、その処理結果データに対応した情報の識別子を前記障害記憶域に登録し、前記中間処理プログラムから情報を受信した場合、前記受信した情報が有する識別子に適合する識別子が前記障害記憶域に登録されている場合に、異常を前記中間処理プログラムに通知する。
【００２２】
第一情報処理システムの第三の実施態様では、前記記憶システムは、第一の論理ボリュームを備えている。前記第一の論理ボリュームは、第二の論理ボリュームとペアを形成することができる。前記第二の論理ボリュームは、前記記憶システム、又は、前記記憶システムに接続された別の記憶システムに備えられる。この場合、前記複数のコンピュータプログラムは、前記第一の論理ボリュームと前記第二の論理ボリュームとの間でデータのコピーに関する制御を実行し、前記制御を正常に行わなければ、異常を表す制御結果データを出力するコピー制御プログラムを更に含む。前記情報フィルタプログラムは、前記コピー制御プログラムに制御の実行の要求を行い、前記要求に応答して前記制御結果データを前記コピー制御プログラムから受信し、前記受信した制御結果データが異常を表していれば、障害データを前記障害記憶域に格納し、異常を前記中間処理プログラムに出力する。
【００２３】
第一情報処理システムの第四の実施態様では、前記情報処理システムは、前記中間処理プログラムから発行された情報を一時的に記憶するための情報記憶域を更に備える。前記情報フィルタプログラムは、前記受信した情報を前記情報記憶域に格納する前、又は、前記情報記憶域から前記情報を読み出した後に、前記障害記憶域に障害データが記憶されているか否かを判断する。
【００２４】
第一情報処理システムの第五の実施態様では、前記複数のコンピュータプログラムは、前記特定の障害が回復したか否かを検知し、回復したと検知された場合には、障害の回復を前記障害記憶域に記録する障害回復検知プログラムを更に含む。
【００２５】
第一情報処理システムの第六の実施態様では、前記第五の実施態様において、前記障害回復検知プログラムは、前記記憶システムに関するデバイス情報の取得が行われたことを検出した場合に、前記特定の障害が回復したか否かを検知する。
【００２６】
第一情報処理システムの第七の実施態様では、前記第五の実施態様において、前記障害回復検知プログラムは、前記記憶システムのリソース（例えば論理ボリューム）をオンラインにすることを検出した場合に、前記特定の障害が回復したか否かを検知する。
【００２７】
本発明の第二の側面に従う情報処理方法は、情報発行部と中間情報処理部とリソース部とを備えるシステムにおいて行われる情報処理方法であって、情報発行部が、情報を発行するステップと、中間情報処理部が、前記発行された情報を受信して出力するステップと、前記出力された情報を受信し、障害記憶域に障害データが記憶されているか否かを判断し、前記障害データが記憶されていない場合、前記出力された情報を前記リソース部へ出力するステップと、前記リソース部が、前記出力された情報を受信し、前記受信した情報を正常に処理できない場合に異常を表す処理結果データを出力するステップと、前記出力された処理結果データを受信し、前記受信した制御結果データが異常を表していれば、障害データを前記障害記憶域に格納し、異常を前記中間情報処理部に出力するステップと、前記中間情報処理部が、前記情報の出力に応答して異常を受信した場合、異常を前記情報発行部に知らせる前に、前記出力した情報を再出力するステップと、前記出力された情報を受信し、前記障害記憶域に障害データが記憶されているか否かを判断し、前記障害データが記憶されている場合、前記情報の受信に応答して異常を前記中間情報処理部に通知するステップと、前記中間情報処理部が、前記再出力に応答して異常を受信した場合、異常を前記情報発行部に知らせるステップと、前記情報発行部が、異常を受信し、受信した異常に応答した処理を実行するステップとを有する。
【００２８】
本発明の第三の側面に従う記録媒体は、以下のコンピュータプログラム、すなわち、情報を発行する情報発行プログラムによって発行された情報を受信して出力する中間処理プログラムから出力された情報を受信するステップと、記憶域に障害データが記憶されているか否かを判断するステップと、前記判断の結果、前記障害データが記憶されていない場合、前記受信した情報を宛先に出力するステップと、前記判断の結果、前記障害データが記憶されている場合、前記情報の受信に応答して異常を前記中間処理プログラムに通知するステップとをコンピュータに実行させるためのコンピュータプログラムを記録したコンピュータ読み取り可能な記録媒体である。
【００２９】
本発明の第四の側面に従う情報処理システムは、リソース部と通信する情報処理システムであって、特定の障害に関するデータである障害データを記憶する障害記憶域と、情報を発行する情報発行部と、中間情報処理部と、情報フィルタ部とを備える。前記中間情報処理部は、前記情報発行部によって発行された情報を受信して出力し、前記情報の出力に応答して異常を受信した場合、異常を前記情報発行部に知らせる前に、少なくとも一回は前記出力した情報を再出力し、前記少なくとも一回の再出力を行っても異常を受信した場合、異常を前記情報発行部に知らせる。前記情報フィルタ部は、前記中間情報処理部から発行された情報を受信し、前記障害記憶域に障害データが記憶されているか否かを判断し、前記障害データが記憶されていない場合、前記受信した情報を前記リソース部へ出力し、前記障害データが記憶されている場合、前記情報の受信に応答して異常を前記中間情報処理部に通知する。
【００３０】
上述した各部或いはステップの全部または一部は、例えば、ハードウェア、コンピュータプログラム或いはそれらの組合せによって実現することができる。コンピュータプログラムは、例えば、ハードディスク、光ディスク、半導体メモリ等の記憶媒体に固定して配布することができる。または、コンピュータプログラムをインターネット等の通信ネットワークを介して、配信することもできる。
【００３１】
また、上述した情報処理システムは、１台のコンピュータマシン（例えば、パーソナルコンピュータ、サーバ又は記憶装置システム）内で構築しても良いし、通信ネットワークに接続された複数台のコンピュータマシン上で構築しても良い。
【発明の効果】
【００３２】
例えば、本発明の第四の側面によれば、中間情報処理部が情報発行部に異常を報告すること無く情報を再発行するように構成されていても、異常に応じた処理が情報発行部によって開始されるのが遅くならない。
【発明を実施するための最良の形態】
【００３３】
図１７Ａ及び図１７Ｂは、本発明の一実施形態に係るシステムの概念と、そのシステムにおいて行われる処理流れの一例を示す。
【００３４】
本実施形態に係るシステムは、情報発行部（例えば後述のクラスタソフトウェア）１１と、中間情報処理部（例えば後述のディスク制御ソフトウェア）１２と、リソース部（例えば後述の記憶装置システム）１３と、情報フィルタ部（例えば後述の調停エミュレーションソフトウェア）１４とを備える。情報発行部１１と中間情報処理部１２との間のやり取り、中間情報処理部１２と情報フィルタ部１４との間のやり取り、及び、情報フィルタ部１４とリソース部１３との間のやり取りは、所定の媒体を介して行われる。ここで、「媒体」としては、例えば、通信ネットワーク、通信インターフェース或いは記憶媒体など、種々のものを採用することができる。また、情報発行部１１、中間情報処理部１２及び情報フィルタ部１４は、ＣＰＵ等のプロセッサに読み込まれプロセッサによって実行されるコンピュータプログラムとすることができるが、それに限らず、ハードウェア或いはハードウェアとコンピュータプログラムとの組み合わせであってもよい。リソース部１３は、リソース（例えば、コンピュータに関するリソース）それ自体であっても良いし、リソースを備えた装置であっても良い。具体的には、例えば、リソース部１３は、物理記憶デバイス（例えば、ハードディスク或いはそれを備えたドライブ）であっても良いし、物理記憶デバイスを備えたシステム（例えばＲＡＩＤシステム等のディスクアレイシステム）であっても良い。また、中間情報処理部１２は、リソース部１３のドライバ（「デバイスドライバ」とも言う）であってもよい。
【００３５】
以下、この情報処理システムにおいて行われる処理流れの一例を、例えば、リソース部１３に障害が発生していない場合（以下、正常ケース）と、リソース部１３で障害が発生した場合（以下、異常ケース）とに分けて説明する。
【００３６】
（１）正常ケース。
【００３７】
図１７Ａに示すように、情報発行部１１は、情報（例えばデータ又はコマンド）を発行する。中間情報処理部１２は、情報発行部１１から発行された情報を受信し、その情報を、リソース部１３が解釈可能な形式の情報（以下、リソース用情報）に変換し、そのリソース用情報を発行する。情報フィルタ部１４は、中間情報処理部１２から発行されたリソース用情報を受信し、そのリソース用情報をリソース部１３に発行する。
【００３８】
リソース部１３は、受信したリソース用情報を処理し、そのリソース用情報の処理を行い、その処理の結果を表す情報（以下、処理結果情報）を生成し、生成された処理結果情報を発行する。処理結果情報としては、例えば、正常に処理が終了したことを表す正常情報と、異常が発生したことを表す異常情報とがある。情報フィルタ部１４は、発行された処理結果情報を受信し、処理結果情報が正常情報であることを検出した場合、受信した処理結果情報を、中間情報処理部１２へ発行する。中間情報処理部１２は、情報フィルタ部１４から発行された処理結果情報を受信し、その処理結果情報が正常情報であることを検出した場合、その処理結果情報を情報発行部１１に発行する。これにより、情報発行部１１は、自分が発行した情報の処理結果として処理結果情報を受信し、その処理結果情報から、正常に処理が行われたことを把握することができる。
【００３９】
なお、正常ケースでは、情報発行部１１が情報を発行してから処理結果を受信するまで、時間長としてＴ（例えばＴは０以外の数）を要したとする（なお、後述の以上ケースでも、情報を発行してから処理結果を受信するまでに少なくともＴの時間を要するものとする）。
【００４０】
（２）異常ケース。
【００４１】
情報発行部１１から情報が発行されて、リソース部１３によって処理されるまでは、正常ケースと同様である。ただし、リソース部１３では障害が発生したので、リソース部１３は、処理結果情報として異常情報を発行する。
【００４２】
通信フィルタ部１４は、受信した処理結果情報が異常情報であることを検出した場合、エラーを表すエラーデータを所定の記憶域１６にセットする。そして、通信フィルタ部１４は、異常情報を中間情報処理部１２に発行する。
【００４３】
中間情報処理部１２は、異常情報を受信した場合、リトライ処理、例えば、受信した異常情報を情報発行部１１に送信することなく、過去に発行したリソース用情報（具体的には、異常情報に対応したリソース用情報）を再発行する。通信フィルタ部１４は、再発行されたリソース用情報を受信した場合、エラーデータがセットされていれば、受信したリソース用情報をリソース部１３に送らずに、リソース用情報に対する応答として、異常情報を中間情報処理部１２に送信する。このような処理は、中間情報処理部１２がリトライ処理を行う都度に行われる。
【００４４】
中間情報処理部１２は、予め設定された最大回数（例えば４回）だけリトライ処理を実行してもなお、異常情報を通信フィルタ部１４から受信した場合、リトライ処理を行わずに、異常情報を情報発行部１１に送る。これにより、情報発行部１１は、自分が発行した情報の処理結果として処理結果情報を受信し、その処理結果情報から、異常が発生したことを把握することができ、その場合、それに応じて、第二処理（例えば、クラスタシステムであれば、フェイルオーバ処理）を開始することができる。
【００４５】
なお、異常ケースでは、情報発行部１１が情報を発行してから処理結果を受信するまでの時間長として、図１７Ｂによれば、Ｔ（例えばＴは０以外の数）よりも長いように見えるが、実質的にはＴとすることができる。少なくとも、図１７Ｃに示すように、本実施形態のような通信フィルタ部１４が備えられないシステムにおいて、中間情報処理部１２によって同じ回数だけリトライ処理が行われた場合の時間長（例えばＴの５倍）に比べると、短い時間となる。
【００４６】
この実施形態によれば、中間情報処理部１２が、異常情報を受けた場合にそれを情報発行部１１に通知することなくリトライ処理を実行するように構成されていても、そのリトライ処理を早く終了させることができ、結果として、情報発行部１１に、異常を早くに検出させ第二処理の開始を早めさせることができる。
【００４７】
なお、上述したシステムの各種の構成要素は、例えば、通信ネットワーク上に配置することができる。例えば、情報発行部１１、中間情報処理部１２及び情報フィルタ部１４は、一つの上位装置に備えることもできるし、複数の上位装置に分散して備えることもできる。また、リソース部１３は、同一の上位装置に備えられても良いし、別の装置、例えば、記憶装置システム（例えばＲＡＩＤシステム）に備えられても良い。
【００４８】
以下、本発明の一実施形態に係るシステムがクラスタシステムに適用された場合を例に採り、幾つかの実施例を説明する。
【実施例１】
【００４９】
図１は、本発明の一実施形態の第一実施例に係るクラスタシステムの全体概要を示すブロック図である。このクラスタシステムは、例えば、第１サイト１０Ａと、第２サイト１０Ｂとを備えており、各サイト１０Ａ，１０Ｂ間は、通信ネットワークＣＮ１２，ＣＮ１３によって接続されている。なお、クラスタシステムは３つ以上のサイトから構成することもできる。
【００５０】
第１サイト１０Ａと第２サイト１０Ｂとは、例えば、別々の都市に設置することができる。また、第１サイト１０Ａと第２サイト１０Ｂとは、例えば、同一行政区画に位置する異なる地点に設置することもできる。さらに、第１サイト１０Ａと第２サイト１０Ｂとは、例えば、同一敷地内のそれぞれ異なる建物内に設けることもできる。
【００５１】
第１サイト１０Ａと第２サイト１０Ｂとは、基本的に同一構造を備える。一つの例として、第１サイト１０Ａは、図外のクライアントマシンに対して情報処理サービスを提供する現用系サイト（稼働系サイト）である。第２サイト１０Ｂは、第１サイト１０Ａに障害が発生した場合にデータをバックアップするバックアップサイト（待機系サイト）である。
【００５２】
もっとも、サイト全体を稼働系または待機系として使用する必要はなく、情報処理サービスを提供するアプリケーションプログラム毎に、稼働系サイトと待機系サイトとをそれぞれ設定してもよい。例えば、第１のアプリケーションプログラムの稼働系サイトを第１サイト１０Ａとし、第２のアプリケーションプログラムの稼働系サイトを第２サイト１０Ｂとすることもできる。
【００５３】
第１サイト１０Ａは、複数の上位装置ＨＡ１，ＨＡｎと、記憶装置システム２０Ａとを備えている。各上位装置ＨＡ１，ＨＡｎは、例えば、マイクロコンピュータを用いたサーバマシンとして構成される。
【００５４】
記憶装置システム２０Ａは、例えば、ディスクアレイサブシステムとして構成することができる。記憶装置システム２０Ａは、後述のように、複数の論理ボリューム２１２を備えており、これらの論理ボリューム２１２は、上位装置ＨＡ１，ＨＡｎによって利用される。
【００５５】
各上位装置ＨＡ１，ＨＡｎは、サイト内の通信ネットワークＣＮ１１を介して、記憶装置システム２０Ａと接続されている。この通信ネットワークＣＮ１１は、例えば、SAN（Storage Area Network）として構成され、ファイバチャネルプロトコルに従ってデータ通信を行う。
【００５６】
各上位装置ＨＡ１，ＨＡｎは、上位装置間を相互に接続する通信ネットワークＣＮ１２を介して、それぞれ接続されている。また、第１サイト１０Ａの各上位装置ＨＡ１，ＨＡｎは、通信ネットワークＣＮ１２を介して、第２サイト１０Ｂの各上位装置ＨＢ１，ＨＢｎとも相互に接続されている。この上位装置間の通信ネットワークＣＮ１２は、例えば、インターネット、LAN（Local Area Network）、WAN（Wide Area Netwrok）、MAN（Metropolitan Area Network）等のようなネットワークとして構成され、TCP/IP（Transmission Control Protocol/Internet Protocol）等に基づいてデータ通信を行う。
【００５７】
第２サイト１０Ｂも、上述した第１サイト１０Ａと同様に、複数の上位装置ＨＢ１，ＨＢｎと、記憶装置システム２０Ｂとを備えている。これらの構成は、第１サイト１０Ａで述べたと同様であるので、その説明を省略する。
【００５８】
ここで、記憶装置システム２０Ａと記憶装置システム２０Ｂとは、記憶装置間ネットワークとしてのリモートコピーラインＣＮ１３によって直接的に接続されている。リモートコピーラインＣＮ１３は、例えば、専用線または公衆回線により構成される。
【００５９】
なお、サイト内ネットワークＣＮ１１は、ファイバチャネルプロトコルを用いる構成に限らず、例えば、iSCSIのように、SCSIコマンドをIPパケットで包み込み、ブロックレベルのデータ転送をＩＰ網で実行する構成でもよい。
【００６０】
さて、以下、上位装置ＨＡ１及び記憶装置システム２０Ａを代表的に例に採り説明する。なお、以下の上位装置ＨＡ１及び記憶装置システム２０Ａについての説明は、他の上位装置及び他の記憶装置システムにも適用することができる。
【００６１】
上位装置ＨＡ１は、例えば、CPU３１０と、メモリ３２０と、ディスク３３０と、ディスクインターフェース（以下「Ｉ／Ｆ」）３４０と、上位ネットワークＩ／Ｆ３５０と、キーボードスイッチ３６０と、ディスプレイ３７０とを備え、これら各部はバス３８０により相互に接続されている。
【００６２】
CPU（Central Processing Unit）３１０は、メモリ３２０に記憶されているプログラムコードを読み込んで実行する。CPU３１０が所定のプログラムコードを実行することにより、クラスタ制御やリモートコピー制御等の各処理または機能が上位装置ＨＡ１上に実現される。
【００６３】
メモリ３２０は、例えば、ROM（Read Only Memory）やRAM（Random Access Memory）等から構成される。図中では、ROMとRAMの区別をしていないが、実際には、プログラムコード等を格納するROMと、一時的記憶領域や作業領域等として使用されるRAMとが設けられてもよい。ディスク３３０は、例えば、ハードディスクドライブとして構成される。ディスク３３０には、例えば、プログラムやデータが記憶される。また、ディスク３３０の一部の記憶領域は、一時ファイルを格納するためのテンポラリ領域として使用されてもよい。
【００６４】
ディスクＩ／Ｆ３４０は、サイト内ネットワークＣＮ１１を介して、記憶装置システム２０Ａとの間のデータ授受を制御するインターフェース回路である。ディスクＩ／Ｆ３４０は、例えば、SCSIやiSCSI等に基づいて、ブロックレベルのデータ転送を制御する。上位ネットワークＩ／Ｆ３５０は、上位装置間ネットワークＣＮ１２を介して、他の上位装置（ＨＡｎ，ＨＢ１〜ＨＢｎ）との間のデータ授受を制御する回路である。上位ネットワークＩ／Ｆ３５０は、例えば、IP（Internet Protocol）に基づいて、データ転送を制御する。
【００６５】
キーボードスイッチ３６０は、情報入力手段の一例であり、システム管理者は、キーボードスイッチ３６０を介して、必要な指示等を入力することができる。ディスプレイ３７０は、情報出力手段の一例であり、例えば、CRT（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ、プラズマディスプレイ、EL（Electronic Luminescent）ディスプレイ等から構成される。ディスプレイ３７０には、システム管理者からの明示の要求に応じて、あるいは自発的に、種々の情報が表示される。なお、これらに限らず、例えば、音声入力装置、音声出力装置、ポインティングデバイス、プリンタ等を用いてもよい。
【００６６】
記憶装置システム２０Ａのハードウェア構成を説明する。記憶装置システム２０Ａは、例えば、RAIDグループ２１０と、ディスク制御部２２０と、上位装置Ｉ／Ｆ２３０と、装置間Ｉ／Ｆ２４０と、キャッシュメモリ２５０と、共有メモリ２６０と、スイッチング制御部２７０と、サービスプロセッサ（SVP）２８０とを備える。
【００６７】
RAID（Redundant Array of Independent
Disks）グループ２１０は、複数の物理的な記憶デバイス（以下、物理記憶デバイス）２１１を含んでおり、例えば、RAID１やRAID５等のRAIDに基づく冗長記憶を提供する。各物理記憶デバイス２１１は、例えば、ハードディスクドライブ、半導体メモリ装置、光ディスクドライブ、光磁気ディスクドライブ等の記憶デバイスから構成することができる。各物理記憶デバイス２１１が提供する物理的な記憶領域上には、論理的な記憶領域である論理ボリューム２１２を少なくとも一つ以上設定可能である。論理ボリューム２１２には、上位装置Ｈから利用される多数のデータが記憶される。また、別の論理ボリューム２１２には、制御情報等を格納し、システム領域として利用することもできる。なお、物理記憶デバイス２１１は、その全てが記憶装置システム２０Ａの筐体内に位置する必要はない。例えば、同一サイト内に設置された他の記憶装置システム（不図示）が有する論理ボリュームを、記憶装置システム２０Ａの論理ボリュームとして使用することもできる。以下の説明では、論理ボリュームを「ボリューム」と省略して記載する場合がある。
【００６８】
ディスク制御部２２０は、各物理記憶デバイス２１１との間のデータ授受を制御するものである。ディスク制御部２２０は、例えば、CPUやROM、RAM等を含んだマイクロコンピュータシステムとして構成される。ディスク制御部２２０は、記憶装置システム２０Ａ内に複数設けられる。ディスク制御部２２０は、例えば、SCSIやiSCSI等に基づいて、物理記憶デバイス２１１との間でブロックレベルのデータ転送を行う。
【００６９】
上位装置Ｉ／Ｆ２３０は、サイト内ネットワークＣＮ１１を介して、上位装置Ｈとの間のデータ転送を制御するものである。上位装置Ｉ／Ｆ２３０は、ディスク制御部２２０と同様に、マイクロコンピュータシステムとして構成可能である。上位装置Ｉ／Ｆ２３０は、上位装置Ｈの種類（サーバかメインフレームか等）に応じて、それぞれ用意することができる。なお、本実施例では、上位装置Ｈをサーバとして構成する場合を例に挙げて説明するが、メインフレームであってもよい。
【００７０】
装置間Ｉ／Ｆ２４０は、リモートコピーラインＣＮ１３を介して、他のサイト１０Ｂの記憶装置システム２０Ｂとの間でデータ通信を行うものである。装置間Ｉ／Ｆ２４０は、論理ボリューム２１２に書き込まれた更新データや差分データを、上位装置Ｈを介さずに、相手方の記憶装置システム２０Ｂに転送する。
【００７１】
キャッシュメモリ２５０は、例えば、揮発または不揮発の半導体メモリから構成することができる。キャッシュメモリ２５０は、上位装置Ｈからのライトデータ（論理ボリュームに書き込まれるデータ）を記憶する。また、キャッシュメモリ２５０は、論理ボリューム２１２から読み出されたデータ（以下、リードデータ）を記憶する。
【００７２】
共有メモリ２６０は、例えば、不揮発または揮発の半導体メモリから構成することができる。共有メモリ２６０は、例えば、上位装置Ｈから受信した各種コマンドや、記憶装置システム２０Ａの制御に使用する制御情報等を記憶する。これらのコマンドや制御情報等は、複数の共有メモリ２６０によって、冗長記憶される。なお、キャッシュメモリ２５０と共有メモリ２６０とは、それぞれ別々のメモリとして構成することもできるし、あるいは、一つのメモリの一部をキャッシュメモリ領域として使用し、残りを共有メモリ領域として使用することもできる。
【００７３】
スイッチング制御部２７０は、各ディスク制御部２２０と、各上位装置Ｉ／Ｆ２３０と、装置間Ｉ／Ｆ２４０と、キャッシュメモリ２５０と、共有メモリ２６０とを、それぞれ相互に接続するものである。スイッチング制御部２７０は、例えば、超高速クロスバスイッチ等から構成することができる。
【００７４】
SVP２８０は、上位装置Ｉ／Ｆ２３０を介して、記憶装置システム２０Ａ内の各部の状態を収集し監視する。SVP２８０は、収集した内部状態の情報を生データのままで、あるいは、統計処理したデータとして、外部の管理端末（不図示）に出力する。SVP２８０が収集可能な情報としては、例えば、装置構成、電源アラーム、温度アラーム、入出力速度（IOPS）等が挙げられる。システム管理者は、管理端末からSVP２８０を介して、RAID構成の設定変更や、各種パッケージ（上位装置Ｉ／Ｆ、ディスク制御部等）の閉塞処理等を行うことができる。
【００７５】
次に、記憶装置システム２０Ａが行う処理の一例について説明する。上位装置Ｉ／Ｆ２３０は、サイト内ネットワークＣＮ１１を介して、上位装置Ｈからライトコマンド及びライトデータを受信する。受信されたライトコマンドは共有メモリ２６０に記憶され、受信されたライトデータはキャッシュメモリ２５０に記憶される。ディスク制御部２２０は、共有メモリ２６０を随時参照している。ディスク制御部２２０は、共有メモリ２６０に記憶されている未処理のライトコマンドを発見すると、このライトコマンドに従って、キャッシュメモリ２５０からライトデータを読み出し、アドレス変換等を行う。ディスク制御部２２０は、ライトコマンドによって指定された論理ボリューム２１２を構成する各物理記憶デバイス２１１に、ライトデータを記憶させる。
【００７６】
上位装置ＨＡ１からのリード要求を処理する場合を説明する。上位装置Ｉ／Ｆ２３０は、上位装置ＨＡ１からリードコマンドを受信すると、このリードコマンドを共有メモリ２６０に記憶させる。ディスク制御部２２０は、共有メモリ２６０内で未処理のリードコマンドを発見すると、このリードコマンドによって指定された論理ボリューム２１２を構成する各物理記憶デバイス２１１からデータを読み出す。ディスク制御部２２０は、読み出したデータをキャッシュメモリ２５０に記憶させる。また、ディスク制御部２２０は、要求されたデータの読出しが完了した旨を、共有メモリ２６０を介して、上位装置Ｉ／Ｆ２３０に通知する。上位装置Ｉ／Ｆ２３０は、キャッシュメモリ２５０からデータを読み込み、上位装置ＨＡ１に送信する。
【００７７】
以上が、本実施例に係るクラスタシステムにおけるハードウェア構成例である。なお、言うまでも無いが、サイト１０Ａ、上位装置ＨＡ１及び記憶装置システム２０Ａのいずれも、上述した構成に限定する必要は無い。
【００７８】
図２は、上位装置ＨＡ１内で動作する種々のコンピュータプログラムを示す。以下、第１サイト１０Ａ内の上位装置ＨＡ１を代表的に例に採り説明する。なお、以下、説明を分かり易くするため、上位装置ＨＡ１内の各コンピュータプログラムには、参照番号の末尾に「ａ」を付し、一方、第２サイト１０Ｂにおける上位装置ＨＢ１内の各コンピュータプログラムには、参照番号の末尾に「ｂ」を付す。
【００７９】
本実施例では、記憶装置システム２０Ａに、リモートコピーの際のコピーペアを構成する一方の論理ボリューム２１２ａが備えられ、記憶装置システム２０Ｂに、そのコピーペアを構成する他方の論理ボリューム２１２ｂが備えられる。コピーペアを構成する２つの論理ボリューム２１２ａ、２１２ｂの各々に、複数の上位装置が接続され、リモートコピーのコピーペアが一つの共有ボリュームとして扱われる。図２では、コピーペアを構成する一方の論理ボリューム２１２ａを備えた一つ以上の物理記憶デバイスが、「調停用ディスク２１１ａ」と表記され、そのコピーペアを構成する他方の論理ボリューム２１２ｂを備えた一つ以上の物理記憶デバイスが、「調停用ディスク２１１ｂ」と表記されている。調停用ディスク２１１ａも２１１ｂも、以下に詳述する「調停」の際に使用される。すなわち、本実施例では、第一サイト１０Ａ内で、二以上の上位装置ＨＡ１〜ＨＡｎによって第一の小クラスタが構成され、第二サイト１０Ｂ内で、二以上の上位装置ＨＢ１〜ＨＢｎによって第二の小クラスタが構成され、第一の小クラスタと第二の小クラスタによって一つの大クラスタが構成され、調停用ディスク２１１ａが有する論理ボリューム２１２ａと、調停用ディスク２１１ｂが有する論理ボリューム２１２ｂとが一つの共有ボリュームとされ、一つの大クラスタによって、一つの共有ボリュームが使用される。
【００８０】
上位装置ＨＡ１には、複数のコンピュータプログラムとして、例えば、図示しないオペレーティングシステム（例えば、ウィンドウズ（登録商標）或いはリナックス（登録商標））や、クラスタソフトウェア１０４０ａや、ディスク制御ソフトウェア１０５０ａや、調停エミュレーションソフトウェア１０６０ａや、リモートコピー制御ソフトウェア１０７０ａが備えられる。各ソフトウェア１０４０ａ、１０５０ａ、１０６０ａ及び１０７０ａの少なくとも一つは、オペレーティングシステムの一つとして動作するように構成されていても良いし、或いは、オペレーティングシステム上で動作するアプリケーションプログラムの一つとして動作するように構成されていても良い。上述した複数のコンピュータプログラムは、例えば、ディスク３３０（図１参照）に格納されており、ディスク３３０からメモリ３２０へロードされ、ＣＰＵ３１０で実行される。それにより、複数のコンピュータプログラムの各々について、特有の処理が実行される。
【００８１】
クラスタソフトウェア１０４０ａは、クラスタを実現するためのソフトウェアであり、例えば、記憶装置システム２０Ａの状態を検出したり、上位装置間ネットワークＣＮ２を介して上位装置ＨＢ１の状態を検出したり、フェイルオーバ処理を実行したりすることができる。クラスタソフトウェア１０４０ａは、例えば、マイクロソフトクラスタサーバ（マイクロソフト社が提供するクラスタソフトウェアの一つ）であっても良い。クラスタソフトウェア１０４０ａは、例えば、種々の要求をディスク制御ソフトウェア１０５０ａに発行することができる。なお、以下の説明では、ディスク制御ソフトウェア１０５０ａが受信する要求を「内部要求」と称する。内部要求には、例えば、ロック系の要求と、リードライト系の要求とがある。ロック系の要求とは、論理ボリュームの使用の排他制御に関わる要求であり、具体例としては、クラスタソフトウェア１０４０ａが使用する論理ボリュームを他の上位装置には使用させないようにすることを意味する「Reserve」や、その論理ボリュームを他の上位装置に使用させても良いことを意味する「Release」等がある。なお、リードライト系の要求とは、論理ボリュームにデータを書き込むこと、或いは、論理ボリュームからデータを読み出すことを表す要求である。また、「使用させても良い」とは、「使用権の解放」と呼ばれることもある。
【００８２】
ディスク制御ソフトウェア１０５０ａは、記憶装置システム２０Ａのデバイスドライバとして動作するソフトウェアである。ディスク制御ソフトウェア１０５０ａは、例えば、クラスタソフトウェアから内部要求を受け、その内部要求を、記憶装置システム２０Ａが解釈できる形式のコマンド（例えばＳＣＳＩコマンド）に変換し、そのコマンドを含んだ要求（以下、Ｉ／Ｏ要求）を発行する。また、ディスク制御ソフトウェア１０５０ａは、発行したＩ／Ｏ要求の処理結果として異常ステータスを表すデータを受信した場合、上記発行したＩ／Ｏ要求と同一のＩ／Ｏ要求を再発行するリトライ処理を実行する。
【００８３】
なお、このリトライ処理は、例えば、メモリ３２０（或いは他の記憶装置）に登録されたリトライ回数情報２が表すリトライ回数だけ行われる。具体的には、例えば、ディスク制御ソフトウェア１０５０ａは、リトライ回数情報２を読み込み、リトライ回数情報２が表すリトライ回数を把握し、リトライ処理を行う都度に、行ったリトライ処理の回数をカウントし、カウント結果が、リトライ回数情報２が表すリトライ回数と一致した場合には、Ｉ／Ｏ要求の処理結果をクラスタソフトウェア１０４０ａに通知する。クラスタソフトウェア１０４０ａは、Ｉ／Ｏ要求の処理結果として異常に関する結果を受けた場合には、フェイルオーバー処理を開始する。
【００８４】
調停エミュレーションソフトウェア１０６０ａは、クラスタを構成する上位装置ＨＡ１、ＨＢ１が別個に動作するスプリットブレイン状態を防ぐための制御（本実施例では便宜上「調停」と呼ぶ）を行うためのソフトウェアである。調停エミュレーションソフトウェア１０６０ａは、記憶装置システム２０Ａ内の調停用ディスク２１１ａを用いて調停を行う。記憶装置システム２０Ａは、調停用ディスク２１１ａ内のデータを、能動的に（換言すればプッシュ方式で）又は記憶装置システム２０Ｂからの要求に応じて（換言すればプル式で）、リモートコピーラインＣＮ３を介して、記憶装置システム２０Ｂ内の調停用ディスク２１１ｂにコピーすることができる。
【００８５】
リモートコピー制御ソフトウェア１０７０ａは、リモートコピーを制御するためのソフトウェアである。リモートコピー制御ソフトウェア１０７０ａは、例えば、リモートコピーのためのコピーペアの作成や削除を行ったり、そのコピーペアのコピー元とコピー先の入替えを行ったりすることができる。詳細には、例えば、直接的な指示は、リモートコピー制御ソフトウェア１０７０ａが行って、間接的な指示は、調停エミュレーションソフトウェア１０６０ａが行っても良い。より詳細には、例えば、リモートコピー制御ソフトウェア１０７０ａは、上位装置ＨＡ１に搭載されている或るソフトウェア（図示せず）のアプリケーションプログラムインターフェース（ＡＰＩ）となって、記憶装置システム２０Ａに指示を出すことができ、調停エミュレーションソフトウェア１０６０ａは、ＡＰＩとなるリモートコピー制御ソフトウェア１０７０ａを介して、記憶装置システム２０Ａに指示を出すことができる。
【００８６】
この実施例では、二段階の調停が行われる。簡単に説明すると、第一の調停では、各サイト内で、二以上の上位装置間で、調停ディスクを用いた調停が行なわれ、それにより、各サイト毎に、調停の勝者が決まる。第二の調停では、各サイト内での調停に勝った二以上の上位装置間で、リモートコピーのコピーペアを有する調停用ディスク２１１ａ、２１１ｂを用いた調停が行われ、その調停に勝った上位装置が、最終的な勝者となる。以下、二段階調停の一つの具体的な流れを説明する。この場合、第一の調停を行うのがクラスタソフトウェア１０４０ａで、第二の調停を行うのが調停エミュレーションソフトウェア１０６０ａである。
【００８７】
第一の調停において、例えば、二以上の上位装置ＨＡ１〜ＨＡｎが、論理ボリューム２１２ａに対して、ＳＣＳＩコマンドを有するＩ／Ｏ要求を発行することで、後述するロック（Reserve、Release、Reset）系コマンドによるロック状態の操作や、或いは、リードライト(Read、Write)系コマンドによる特定のセクタ確認が行われ、それにより、最終的に論理ボリューム２１２ａを確保することができた上位装置が調停の勝者となる（なお、バスリセット（Reset）は、正確にはＳＣＳＩコマンドではないが、便宜上区別しないものとする）。なお、どの上位装置がどの論理ボリューム２１２ａを確保することができたかに関する情報（以下、調停用ディスク制御情報６）は、例えば、記憶装置システム２０Ａの上位装置Ｉ／Ｆ２３０によって、共有メモリ２６０に登録される。上位装置Ｉ／Ｆ２３０は、調停用ディスク制御情報６を参照することにより、調停の敗者（上位装置）からの論理ボリューム２１２ａに対するアクセス要求を拒否することができる。このような第一の調停は、他のサイトでも行われる。
【００８８】
しかし、単にそれだけでは、以下のような問題が生じてしまう。すなわち、一方の論理ボリューム２１２ａが確保されたという状態が、他方の論理ボリューム２１２ｂには反映されないため、各サイト毎に、コピーペアを構成する論理ボリュームを確保することができ、それ故に、各サイト毎に調停の勝者（上位装置）が生じ、結果として、クラスタシステムにおいて、複数の調停勝者が存在することになってしまう。
【００８９】
そこで、それを避けるために、本実施例では、コピーペアの状態に基づいて、最終的な調停勝者が決定される。具体的には、例えば、コピー状態が「コピー元状態」である論理ボリュームが、その論理ボリュームを確保した上位装置によって確保された状態とされ、コピー状態が「コピー先状態」である論理ボリュームが、その論理ボリュームを確保した上位装置とは別の上位装置によって確保された状態とされ、コピー状態が「コピー中断」である論理ボリュームが、どの上位装置からも確保されていない状態とされる。この結果、コピー元状態となった論理ボリュームを確保した上位装置が、最終的な調停勝者となり、コピー先状態となった論理ボリュームを確保した上位装置にとっては、他の上位装置に論理ボリュームが確保されてしまったものとして認識される。なお、どのボリュームがどんなコピー状態であるかや、どのボリュームとどのボリュームによってコピーペアが形成されているか等に関する情報（例えば、リモートコピー制御情報４と同様の内容を有する情報）も、調停用ディスク制御情報６に含まれていて、上位装置Ｉ／Ｆ２３０が、その情報６を参照することにより、どのボリュームがどんなコピー状態であるか等を特定することができてもよい。
【００９０】
以上のように、二段階調停は、ＳＣＳＩコマンドとリモートコピー制御を一つの組にして行われる。
【００９１】
図３は、上位装置ＨＡ１のソフトウェア構成を詳細に示す。
【００９２】
調停エミュレーションソフトウェア１０６０ａは、Ｉ／Ｏ要求受付部３０００、Ｉ／Ｏ要求処理部３０１０及び障害回復検知部３０２０を備える。また、上位装置ＨＡ１のメモリ３２０（或いは他の記憶領域）上に、Ｉ／Ｏ要求キュー３５００、障害検知フラグ３５１０、障害情報３５２０、ＳＣＳＩコマンド種別判定テーブル３５３０、Ｉ／Ｏ戻り値判定テーブル３５４０、ＳＣＳＩコマンド戻り値判定テーブル３５５０、リモートコピー制御戻り値判定テーブル３５６０及びＩ／Ｏ・ＳＣＳＩコマンド戻り値変換テーブル３５７０が用意され、これらのうちの少なくとも一つが、Ｉ／Ｏ要求受付部３０００、Ｉ／Ｏ要求処理部３０１０及び障害回復検知部３０２０のうちの少なくとも一つに適宜使用される。
【００９３】
Ｉ／Ｏ要求キュー３５００は、調停用ディスク２１１ａが有する論理ボリューム（以下、調停用ボリューム２１２ａ）に対して発行されたＩ／Ｏ要求を格納する仕組みであり、例えばリストにより構成される。
【００９４】
障害検知フラグ３５１０は、調停用ディスク２１１ａの障害（以下、「ディスク障害」と言う）が発生したことを記録するフラグである。障害検知フラグ３５１０は、ディスク障害が検出された場合に「ＯＮ」に設定され、ディスク障害が検出されない場合に「ＯＦＦ」に設定される。
【００９５】
障害情報３５２０は、検出されたディスク障害に関する情報、例えば、調停用ディスク２１１aから返ってきたＩ／Ｏ戻り値及びＳＣＳＩコマンド戻り値に設定されている異常ステータスの内容等を表す。ここで、「Ｉ／Ｏ戻り値」とは、Ｉ／Ｏ要求それ自体の処理の結果を表す情報として記憶装置システム２０Ａから受信するものであり、ＳＣＳＩコマンドを含んでいるか否かに関わらず、発行した全てのＩ／Ｏ要求について受信するものである。「ＳＣＳＩコマンド戻り値」とは、Ｉ／Ｏ要求に含まれているＳＣＳＩコマンドに対する処理の結果を表す情報として記憶装置システム２０Ａから受信するものであり、ＳＣＳＩコマンドを含んだＩ／Ｏ要求を発行した場合にのみに受信するものである。すなわち、本実施例では、記憶装置システム２０Ａ（例えば、上位装置Ｉ／Ｆ２３０）が、ＳＣＳＩ調停用Ｉ／Ｏ要求を受信した場合、そのＩ／Ｏ要求及びそれに含まれるＳＣＳＩコマンドにそれぞれ応じた処理結果を表すＩ／Ｏ戻り値及びＳＣＳＩコマンド戻り値を、上位装置ＨＡ１に送信することができる。
【００９６】
ＳＣＳＩコマンド種別判定テーブル３５３０は、ＳＣＳＩコマンドの種別を判定する基準に関する情報が登録されたテーブルである。具体的には、例えば、ＳＣＳＩコマンド種別判定テーブル３５３０は、Ｉ／Ｏ要求に含まれるＳＣＳＩコマンドがロック系とリードライト系のどちらに属するのかの判定基準を格納するテーブルである。
【００９７】
Ｉ／Ｏ戻り値判定テーブル３５４０は、Ｉ／Ｏ戻り値の内容をどのように判定するかの基準に関する情報が登録されたテーブルである。具体的には、例えば、Ｉ／Ｏ戻り値判定テーブル３５４０は、どんなＩ／Ｏ戻り値が正常ステータス、異常ステータス及びコンフリクトのうちのどれに属するのかの判定基準を格納するテーブルである。
【００９８】
ＳＣＳＩコマンド戻り値判定テーブル３５５０は、ＳＣＳＩコマンド戻り値の内容をどのように判定するかの基準に関する情報が登録されたテーブルである。具体的には、例えば、ＳＣＳＩコマンド戻り値判定テーブル３５５０は、どんなＳＣＳＩコマンド戻り値が正常ステータス、異常ステータス及びコンフリクトのうちのどれに属するのかの判定基準を格納するテーブルである。
【００９９】
リモートコピー制御戻り値判定テーブル３５６０は、リモートコピー制御戻り値の内容をどのように判定するかの基準に関する情報が登録されたテーブルである。具体的には、例えば、リモートコピー制御戻り値判定テーブル３５６０は、どんなリモートコピー制御戻り値が正常ステータス、異常ステータス及びコンフリクトのどれに属するのかの判定基準を格納するテーブルである。なお、「リモートコピー制御戻り値」とは、後述するリモートコピーペア制御の処理の結果として記憶装置システム２０Ａから受信する情報である。
【０１００】
Ｉ／Ｏ・ＳＣＳＩコマンド戻り値変換テーブル３５７０は、どのようなリモートコピー制御戻り値を受け取った場合に、どのようなＩ／Ｏ戻り値およびＳＣＳＩコマンド戻り値を出力するかの基準を格納するテーブルである。
【０１０１】
Ｉ／Ｏ要求受付部３０００は、調停用ボリューム２１２ａに対して発行されたＩ／Ｏ要求をディスク制御ソフトウェア１０５０ａから受信し、Ｉ／Ｏ要求キュー３５００の所定位置（例えば最後尾）にそのＩ／Ｏ要求を格納する処理を行う。このＩ／Ｏ要求受付部３０００の処理フローの一例は、図１０に示す。
【０１０２】
Ｉ／Ｏ要求処理部３０１０は、Ｉ／Ｏ要求キュー３５００から１つずつＩ／Ｏ要求を取り出し、上述した二段階調停の処理を行う。二段階調停の処理では、リモートコピー制御ソフトウェア１０７０ａと通信を行う必要があり、この通信には、ソフトウェア間インターフェイス３０３０が用いられる。ソフトウェア間インターフェイス３０３０としては、例えば、図示しないオペレーティングシステムが提供するインターフェイスを使用する方法や、ソフトウェア間で共有して使用することができるメモリを介してデータ送受信を行う方法等を採用することができる。Ｉ／Ｏ要求処理部３０１０の処理フローの一例は、図１１に示す。
【０１０３】
障害回復検知部３０２０は、Ｉ／Ｏ要求処理部３０１０の処理によってディスク障害が検出された場合に別スレッドで実行され、ディスク障害の回復が検出されるまで或るタイミングで（例えば定期的に又は不定期に）調停用ディスク１０３０ａの状態を調べる。
【０１０４】
リモートコピー制御ソフトウェア１０７０は、コピーペアを構成する一方の調停用ボリューム２１２ａを有する調停用ディスク２１１ａに対して、リモートコピーペアの制御を行う。なお、リモートコピーペアの制御の内容は、Ｉ／Ｏ要求処理部３０１０とのソフトウェア間インターフェイス３０３０を介した通信の内容により異なる。また、例えば、調停用ボリューム２１２ａがどの論理ボリュームとペアになっているかや、調停用ボリューム２１２ａがコピー元であるかコピー先であるかなどは、リモートコピー制御情報６（例えば所定の記憶域に存在する）に登録されていて、そのリモートコピー情報６を参照することにより、特定することができても良い。
【０１０５】
図４は、障害情報３５２０の構成例を示す。
【０１０６】
障害情報３５２０には、１以上のＩ／Ｏ要求識別子と、各Ｉ／Ｏ要求識別子毎に対応付けられた障害時Ｉ／Ｏ戻り値、障害時ＳＣＳＩコマンド戻り値及び障害時リモートコピー制御戻り値が含まれる。
【０１０７】
Ｉ／Ｏ要求識別子とは、異常ステータスに属するＩ／Ｏ戻り値又はＳＣＳＩ戻り値に対応するＩ／Ｏ要求（換言すれば、正常に処理されなかったＩ／Ｏ要求）の識別子、例えば、Ｉ／Ｏ要求へのポインタの値（例えば0x1234）等である。なお、障害情報３５２０に一つもＩ／Ｏ要求識別子が存在しない場合、Ｉ／Ｏ要求識別子として所定の初期値（例えばＮＵＬＬ）が障害情報３５２０に設定される。
【０１０８】
障害時Ｉ／Ｏ戻り値とは、異常ステータスに属するＩ／Ｏ戻り値であると判定された場合の、そのＩ／Ｏ戻り値として設定されていた値それ自体であり、例えば、ＴＩＭＥＯＵＴ，ＤＩＳＣＯＮＮＥＣＴ，ＢＵＳＹ等である。なお、障害情報３５２０に一つも障害時Ｉ／Ｏ戻り値が存在しない場合、障害時Ｉ／Ｏ戻り値として所定の初期値（例えばＳＵＣＣＥＳＳ）が設定される。
【０１０９】
障害時ＳＣＳＩコマンド戻り値とは、異常ステータスに属するＳＣＳＩコマンド戻り値であると判定された場合の、そのＳＣＳＩ戻り値として設定されていた値それ自体であり、例えば、ＴＩＭＥＯＵＴ，ＤＩＳＣＯＮＮＥＣＴ，ＢＵＳＹ等である。なお、障害情報３５２０に一つも障害時ＳＣＳＩコマンド戻り値が存在しない場合、障害時ＳＣＳＩコマンド戻り値として所定の初期値（例えばＧＯＯＤ）が設定される。
【０１１０】
障害時リモートコピー制御戻り値とは、異常ステータスに属するリモートコピー制御戻り値であると判定された場合の、そのリモートコピー制御戻り値それ自体であり、例えば、ＴＩＭＥＯＵＴ，ＤＩＳＣＯＮＮＥＣＴ，ＢＵＳＹ等である。なお、障害情報３５２０に一つも障害時リモートコピー制御戻り値が存在しない場合、障害時リモートコピー制御戻り値として所定の初期値（例えばＧＯＯＤ）が設定される。
【０１１１】
図５は、ＳＣＳＩコマンド種別判定テーブル３５３０の構成例を示す。
【０１１２】
ＳＣＳＩコマンド種別判定テーブル３５３０には、複数のＳＣＳＩコマンド内容の各々がどのＳＣＳＩコマンド種別に該当するかが登録されている。ＳＣＳＩコマンド内容としては、例えば、Ｒｅｓｅｒｖｅ、Ｒｅｌｅａｓｅ、Ｒｅｓｅｔ、Ｒｅａｄ及びＷｒｉｔｅがあり、ＳＣＳＩコマンド種別としては、ロック系とリードライト系とがある。この図５に示すテーブル３５３０は、ＳＣＳＩコマンド内容がＲｅｓｅｒｖｅ、Ｒｅｌｅａｓｅ及びＲｅｓｅｔのうちのいずれかであれば、ＳＣＳＩコマンド種別としてロック系に該当することを表している。また、このテーブル３５３０は、ＳＣＳＩコマンド内容が、Ｒｅａｄ及びＷｒｉｔｅのうちのいずれかであれば、ＳＣＳＩコマンド種別としてリードライト系に該当することを表している。
【０１１３】
図６は、Ｉ／Ｏ戻り値判定テーブル３５４０の構成例を示す。
【０１１４】
Ｉ／Ｏ戻り値判定テーブル３５４０には、複数種類のＩ／Ｏ戻り値と、複数種類のＩ／Ｏ戻り値の各々に対応付けられたＩ／Ｏ戻り値判定結果とが登録されている。以下、その対応付けの一例を説明するが、対応付けは、以下の例に限定されなくてもよい。
【０１１５】
Ｉ／Ｏ戻り値「SUCCESS」は、調停用ボリューム２１２ａに対して発行されたＩ／Ｏ要求（以下、「調停用Ｉ／Ｏ要求」と略記）が正常に処理されたことを意味する。Ｉ／Ｏ戻り値「TIMEOUT」は、調停用Ｉ／Ｏ要求の処理が遅延しそれ故にタイムアウトが起きたことを意味する。Ｉ／Ｏ戻り値「DISCONNECT」は、調停用Ｉ／Ｏ要求を渡すことができなかった（例えば、調停用Ｉ／Ｏ要求が記憶装置システム２０Ａのキャッシュメモリ２５０に格納できなかった）ことを意味する。Ｉ／Ｏ戻り値「BUSY」は、調停用ディスク２１１ａがビジー状態であるが故に調停用Ｉ／Ｏ要求を処理できなかったことを意味する。
【０１１６】
Ｉ／Ｏ戻り値判定結果は、どのＩ／Ｏ戻り値がどんなステータスに該当するかを判定した結果であり、そのステータスとしては、例えば、正常ステータス、異常ステータス及びコンフリクトがある。正常ステータスとは、調停用Ｉ／Ｏ要求の処理が正常に終了したことを意味する。異常ステータスは、調停用Ｉ／Ｏ要求の処理において異常が発生したことを意味する。コンフリクトは、調停用ボリューム２１２ａが他の上位装置によって予約されているため（換言すれば確保されているため）、調停用Ｉ／Ｏ要求を処理できなかったことを意味する。
【０１１７】
Ｉ／Ｏ戻り値判定テーブル３５４０によれば、Ｉ／Ｏ戻り値が「ＳＵＣＣＥＳＳ」の場合、Ｉ／Ｏ戻り値判定結果として正常ステータスと判定される。また、Ｉ／Ｏ戻り値が「ＴＩＭＥＯＵＴ」及び「ＤＩＳＣＯＮＮＥＣＴ」のうちのいずれかの場合、Ｉ／Ｏ戻り値判定結果として異常ステータスと判定される。Ｉ／Ｏ戻り値が「ＢＵＳＹ」の場合、Ｉ／Ｏ戻り値判定結果として異常ステータス又はコンフリクトと判定され、ＳＣＳＩコマンド戻り値判定テーブル３５５０により更に判定する必要が生じる。
【０１１８】
図７は、ＳＣＳＩコマンド戻り値判定テーブル３５５０の構成例を示す。
【０１１９】
ＳＣＳＩコマンド戻り値判定テーブル３５５０には、複数種類のＳＣＳＩコマンド戻り値と、複数種類のＳＣＳＩコマンド戻り値の各々に対応付けられたＳＣＳＩコマンド戻り値判定結果とが登録されている。なお、調停用Ｉ／Ｏ要求には、ＳＣＳＩコマンドを含むものとそうでないものとがあるが、両方のどちらであっても良い場合には単に「調停用Ｉ／Ｏ要求」と言い、ＳＣＳＩコマンドを含む調停用Ｉ／Ｏ要求の場合には「ＳＣＳＩ調停用Ｉ／Ｏ要求」と言う。
【０１２０】
ＳＣＳＩコマンド戻り値「GOOD」は、ＳＣＳＩ調停用Ｉ／Ｏ要求が正常に処理されたことを意味する。ＳＣＳＩコマンド戻り値「TIMEOUT」は、ＳＣＳＩ調停用Ｉ／Ｏ要求の処理が遅延しそれ故にタイムアウトが起きたことを意味する。ＳＣＳＩコマンド戻り値「DISCONNECT」は、ＳＣＳＩ調停用Ｉ／Ｏ要求を渡すことができなかった（例えば、ＳＣＳＩ調停用Ｉ／Ｏ要求が記憶装置システム２０Ａのキャッシュメモリ２５０に格納できなかった）ことを意味する。ＳＣＳＩコマンド戻り値「BUSY」は、調停用ディスク２１１ａがビジー状態であるが故にＳＣＳＩ調停用Ｉ／Ｏ要求を処理できなかったことを意味する。ＳＣＳＩコマンド戻り値「ＣＯＮＦＬＩＣＴ」は、調停用ボリューム２１２ａが他の上位装置によって予約されているため（換言すれば確保されているため）、ＳＣＳＩ調停用Ｉ／Ｏ要求を処理できなかったことを意味する。
【０１２１】
ＳＣＳＩコマンド戻り値判定結果は、どのＳＣＳＩコマンド戻り値がどんなステータスに該当するかを判定した結果であり、そのステータスとしては、例えば、正常ステータス、異常ステータス及びコンフリクトがある。正常ステータスとは、ＳＣＳＩ調停用Ｉ／Ｏ要求の処理が正常に終了したことを意味する。異常ステータスは、ＳＣＳＩ調停用Ｉ／Ｏ要求の処理において異常が発生したことを意味する。コンフリクトは、調停用ボリューム２１２ａが他の上位装置によって予約されているため（換言すれば確保されているため）、ＳＣＳＩ調停用Ｉ／Ｏ要求を処理できなかったことを意味する。
【０１２２】
ＳＣＳＩコマンド戻り値判定テーブル３５５０によれば、ＳＣＳＩコマンド戻り値が「GOOD」の場合、ＳＣＳＩコマンド戻り値判定結果として正常ステータスと判定される。また、ＳＣＳＩコマンド戻り値が「ＴＩＭＥＯＵＴ」、「ＤＩＳＣＯＮＮＥＣＴ」及び「ＢＵＳＹ」のうちのいずれかの場合、ＳＣＳＩコマンド戻り値判定結果として異常ステータスと判定される。ＳＣＳＩコマンド戻り値が「ＣＯＮＦＬＩＣＴ」の場合、ＳＣＳＩコマンド戻り値判定結果としてコンフリクトと判定される。
【０１２３】
以上が、ＳＣＳＩコマンド戻り値判定テーブル３５５０の構成例であるが、ＳＣＳＩコマンド戻り値と、ＳＣＳＩコマンド戻り値判定結果との対応付けは、上記の例に限定されなくてもよい。
【０１２４】
図８は、リモートコピー制御戻り値判定テーブル３５６０の構成例である。
【０１２５】
リモートコピー制御戻り値判定テーブル３５６０には、複数種類のリモートコピー制御戻り値と、複数種類のリモートコピー制御戻り値の各々に対応付けられたリモートコピー制御戻り値判定結果とが登録されている。以下、その対応付けの一例を説明するが、対応付けは、以下の例に限定されなくてもよい。
【０１２６】
リモートコピー制御戻り値「ＧＯＯＤ」は、リモートコピー制御ソフトウェア１０７０ａによるリモートコピーペア制御の処理が正常に終了したことを意味する。リモートコピー制御戻り値「TIMEOUT」は、リモートコピーペア制御の処理に遅延が発生し、タイムアウトが起きたことを意味する。リモートコピー制御戻り値「DISCONNECT」は、リモートコピーペア制御の対象となる調停用ディスク２１１ａ（或いは調停用ボリューム２１２ａ）が見つからなかったことを意味する。リモートコピー制御戻り値「BUSY」は、リモートコピーペア制御の対象となる調停用ディスク２１１ａがビジー状態で処理を行えなかったことを意味する。リモートコピー制御戻り値「ＣＯＮＦＬＩＣＴ」は、リモートコピーペア制御の処理が正常に終了し、且つ、調停用ボリューム２１２ａのコピー状態が「コピー先状態」である（すなわち、調停用ボリューム２１２ａがコピー先論理ボリュームである）ことを意味する。
【０１２７】
リモートコピー制御戻り値判定結果とは、どんなリモートコピー制御戻り値のときにどんなステータスに該当するかを判定した結果であり、そのステータスとしては、例えば、正常ステータス、異常ステータス及びコンフリクトがある。正常ステータスとは、リモートコピーペア制御の処理が正常に終了したことを意味する。異常ステータスとは、リモートコピーペア制御の処理で異常が発生したことを意味する。コンフリクトとは、リモートコピーペア制御の処理が正常に終了し、且つ、調停用ボリューム２１２ａがコピー先論理ボリュームであることを意味する。
【０１２８】
リモートコピー制御戻り値判定テーブル３５６０によれば、リモートコピー制御戻り値が「ＧＯＯＤ」の場合、リモートコピー制御戻り値判定結果として正常ステータスと判定される。また、リモートコピー制御戻り値が「ＴＩＭＥＯＵＴ」、「ＤＩＳＣＯＮＮＥＣＴ」及び「ＢＵＳＹ」のうちのいずれかの場合、リモートコピー制御戻り値判定結果として異常ステータスと判定される。リモートコピー制御戻り値が「ＣＯＮＦＬＩＣＴ」の場合、リモートコピー制御戻り値判定結果としてコンフリクトと判定される。
【０１２９】
図９は、Ｉ／Ｏ・ＳＣＳＩコマンド戻り値変換テーブル３５７０の構成例である。
【０１３０】
Ｉ／Ｏ・ＳＣＳＩコマンド戻り値変換テーブル３５７０は、前述した通り、どのようなリモートコピー制御戻り値を受け取った場合に、どのようなＩ／Ｏ戻り値およびＳＣＳＩコマンド戻り値を出力するかの基準を格納するテーブルである。以下、その基準の一例を説明するが、その基準は、以下の例に限定されてなくても良い。
【０１３１】
このテーブル３５７０では、リモートコピー制御戻り値「ＧＯＯＤ」に対して、変換後Ｉ／Ｏ戻り値「ＳＵＣＣＥＳＳ」と、変換後ＳＣＳＩコマンド戻り値「ＧＯＯＤ」とが対応付けられている。これは、リモートコピー制御戻り値として「ＧＯＯＤ」が検出された場合には、ＳＣＳＩコマンドを含んだＩ／Ｏ要求のＩ／Ｏ戻り値として「ＳＵＣＣＥＳＳ」が出力され、そのＩ／Ｏ要求のＳＣＳＩコマンド戻り値として「ＧＯＯＤ」が出力されることを意味する。
【０１３２】
また、このテーブル３５７０では、リモートコピー制御戻り値「ＴＩＭＥＯＵＴ」に対して、変換後Ｉ／Ｏ戻り値「ＴＩＭＥＯＵＴ」と、変換後ＳＣＳＩコマンド戻り値「ＴＩＭＥＯＵＴ」とが対応付けられている。これは、リモートコピー制御戻り値として「ＴＩＭＥＯＵＴ」が検出された場合には、ＳＣＳＩコマンドを含んだＩ／Ｏ要求のＩ／Ｏ戻り値として「ＴＩＭＥＯＵＴ」が出力され、そのＩ／Ｏ要求のＳＣＳＩコマンド戻り値として「ＴＩＭＥＯＵＴ」が出力されることを意味する。
【０１３３】
また、このテーブル３５７０では、リモートコピー制御戻り値「ＤＩＳＣＯＮＮＥＣＴ」に対して、変換後Ｉ／Ｏ戻り値「ＤＩＳＣＯＮＮＥＣＴ」と、変換後ＳＣＳＩコマンド戻り値「ＤＩＳＣＯＮＮＥＣＴ」とが対応付けられている。これは、リモートコピー制御戻り値として「ＤＩＳＣＯＮＮＥＣＴ」が検出された場合には、ＳＣＳＩコマンドを含んだＩ／Ｏ要求のＩ／Ｏ戻り値として「ＤＩＳＣＯＮＮＥＣＴ」が出力され、そのＩ／Ｏ要求のＳＣＳＩコマンド戻り値として「ＤＩＳＣＯＮＮＥＣＴ」が出力されることを意味する。
【０１３４】
また、このテーブル３５７０では、リモートコピー制御戻り値「ＢＵＳＹ」に対して、変換後Ｉ／Ｏ戻り値「ＢＵＳＹ」と、変換後ＳＣＳＩコマンド戻り値「ＢＵＳＹ」とが対応付けられている。これは、リモートコピー制御戻り値として「ＢＵＳＹ」が検出された場合には、ＳＣＳＩコマンドを含んだＩ／Ｏ要求のＩ／Ｏ戻り値として「ＢＵＳＹ」が出力され、そのＩ／Ｏ要求のＳＣＳＩコマンド戻り値として「ＢＵＳＹ」が出力されることを意味する。
【０１３５】
また、このテーブル３５７０では、リモートコピー制御戻り値「ＣＯＮＦＬＩＣＴ」に対して、変換後Ｉ／Ｏ戻り値「ＢＵＳＹ」と、変換後ＳＣＳＩコマンド戻り値「ＣＯＮＦＬＩＣＴ」とが対応付けられている。これは、リモートコピー制御戻り値として「ＣＯＮＦＬＩＣＴ」が検出された場合には、ＳＣＳＩコマンドを含んだＩ／Ｏ要求のＩ／Ｏ戻り値として「ＢＵＳＹ」が出力され、そのＩ／Ｏ要求のＳＣＳＩコマンド戻り値として「ＣＯＮＦＬＩＣＴ」が出力されることを意味する。
【０１３６】
以下、図５〜図９を参照して説明した種々のテーブルを用いて行われる処理流れを、図１０〜図１３を参照して説明する。なお、以下の説明を、適宜に図３を用いて参照すれば、本実施例に係るクラスタシステムにおいて行われる全体的な処理流れがよく分かるであろう。
【０１３７】
図１０は、Ｉ／Ｏ要求受付部３０００の処理フローの一例を示す。なお、以下の説明では、動作を表すステップを「Ｓ」と略記する。
【０１３８】
クラスタソフトウェア１０４０ａが、調停用ボリューム２１２ａに対する要求を表す内部要求をディスク制御ソフトウェア１０５０ａしたとする。その場合、ディスク制御ソフトウェア１０５０ａは、その内部要求をＳＣＳＩコマンドに変換して、そのＳＣＳＩコマンドを含んだ調停用Ｉ／Ｏ要求（つまりＳＣＳＩ調停用Ｉ／Ｏ要求）を生成し、そのＳＣＳＩ調停用Ｉ／Ｏ要求を調停エミュレーションソフトウェア１０６０ａに発行する。
【０１３９】
Ｉ／Ｏ要求受付部３０００は、Ｉ／Ｏ要求を受け付けており、ＳＣＳＩ調停用Ｉ／Ｏ要求をディスク制御ソフトウェア１０５０ａから受信する（Ｓ１００００）。そして、Ｉ／Ｏ要求受付部３０００は、受信したＳＣＳＩ調停用Ｉ／Ｏ要求を、Ｉ／Ｏ要求キュー３５００の最後尾（別な位置であってもよい）に格納する（Ｓ１００１０）。その後、Ｉ／Ｏ要求受付部３０００は、再びＩ／Ｏ要求を受け付ける。
【０１４０】
図１１は、Ｉ／Ｏ要求処理部３０１０の処理フローの一例を示す。
【０１４１】
Ｉ／Ｏ要求処理部３０１０は、Ｉ／Ｏ要求キュー３５００の所定位置（例えば先頭）からＩ／Ｏ要求を１つ取り出す（以下、ここで取りされたＩ／Ｏ要求をＳＣＳＩ調停用Ｉ／Ｏ要求とする）（Ｓ１１０００）ただし、Ｉ／Ｏ要求キュー３５００にＩ／Ｏ要求が格納されていない場合には、Ｉ／Ｏ要求処理部３０１０は、新たなＩ／Ｏ要求が格納されるまで待つ。
【０１４２】
次に、Ｉ／Ｏ要求処理部３０１０は、障害検知フラグ３５１０を参照し、その障害検知フラグ３５１０の状態を判定する（Ｓ１１０１０）。
【０１４３】
Ｓ１１０１０の判定の結果、障害検知フラグ３５１０が「ＯＦＦ」であることを検出した場合（つまり、ディスク障害が発生していないことを検出した場合）、Ｉ／Ｏ要求処理部３０１０は、ステップ１１０２０の処理を行う。すなわち、Ｉ／Ｏ要求処理部３０１０は、ＳＣＳＩコマンド種別判定テーブル３５３０（図５参照）を参照し、ＳＣＳＩ調停用Ｉ／Ｏ要求に含まれるＳＣＳＩコマンドの種別の判定を行う。具体的には、Ｉ／Ｏ要求処理部３０１０は、ＳＣＳＩ調停用Ｉ／Ｏ要求に含まれるＳＣＳＩコマンドの内容が「Ｒｅｓｅｒｖｅ」、「Ｒｅｌｅａｓｅ」及び「Ｒｅｓｅｔ」のうちのいずれかであることを検出した場合、ＳＣＳＩコマンド種別はロック系であると判定し、一方、そのＳＣＳＩコマンドの内容が「Ｒｅａｄ」及び「Ｗｒｉｔｅ」のうちのいずれかであることを検出した場合、ＳＣＳＩコマンド種別はリードライト系であると判定する。このＳ１１０２０の判定結果によって、以後の処理流れが大きく異なる。以下、Ｓ１１０２０の判定結果がロック系であるかリードライト系であるかに分けて説明する。
【０１４４】
（１）Ｓ１１０２０でロック系であると判定された場合。
【０１４５】
Ｓ１１０２０において、ＳＣＳＩコマンド種別はロック系であると判定された場合、Ｉ／Ｏ要求処理部３０１０は、ＳＣＳＩ調停用Ｉ／Ｏ要求を記憶装置システム２０Ａに送信する（Ｓ１１０３０）。それにより、Ｉ／Ｏ要求処理部３０１０は、ＳＣＳＩ調停用Ｉ／Ｏ要求の処理結果を記憶装置システム２０Ａから受信する（Ｓ１１０４０）。ここで受信した処理結果には、Ｉ／Ｏ戻り値及びＳＣＳＩ戻り値が含まれている。
【０１４６】
Ｉ／Ｏ要求処理部３０１０は、ステップ１１０４０で受け取ったＩ／Ｏ戻り値を用いてＩ／Ｏ戻り値判定テーブル３５４０（図６参照）を参照することにより、そのＩ／Ｏ戻り値がどんなステータスに該当するかのＩ／Ｏ戻り値判定を行い、且つ、ステップ１１０４０で受け取ったＳＣＳＩコマンド戻り値を用いてＳＣＳＩコマンド戻り値判定テーブル３５５０（図７参照）を参照することにより、そのＳＣＳＩコマンド戻り値がどんなステータスに該当するかのＳＣＳＩコマンド戻り値判定を行う（Ｓ１１０５０）。Ｉ／Ｏ要求処理部３０１０は、Ｉ／Ｏ戻り値が「ＳＵＣＣＥＳＳ」であり、ＳＣＳＩ戻り値が「ＧＯＯＤ」であることを検出した場合、正常ステータスと判定する。また、Ｉ／Ｏ要求処理部３０１０は、Ｉ／Ｏ戻り値が「ＴＩＭＥＯＵＴ」、「ＤＩＳＣＯＮＮＥＣＴ」及び「ＢＵＳＹ」のうちのいずれかであり、ＳＣＳＩコマンド戻り値が「ＴＩＭＥＯＵＴ」、「ＤＩＳＣＯＮＮＥＣＴ」及び「ＢＵＳＹ」のうちのいずれかであることを検出した場合、異常ステータスと判定する。また、Ｉ／Ｏ要求処理部３０１０は、Ｉ／Ｏ戻り値が「ＢＵＳＹ」であり、ＳＣＳＩコマンド戻り値が「ＣＯＮＦＬＩＣＴ」であることを検出した場合、コンフリクトと判定する。
【０１４７】
Ｓ１１０５０において、コンフリクトと判定された場合、Ｉ／Ｏ要求処理部３０１０は、ＳＣＳＩ調停用Ｉ／Ｏ要求の処理結果として、Ｓ１１０４０で受信したＩ／Ｏ戻り値及びＳＣＳＩ戻り値を、ディスク制御ソフトウェア１０５０ａに返す（Ｓ１１１００）。
【０１４８】
Ｓ１１０５０において、異常ステータスと判定された場合、Ｉ／Ｏ要求処理部３０１０は、障害検知フラグ３５１０へアクセスし、障害検知フラグ３５１０の状態を「ＯＦＦ」から「ＯＮ」に変更する（Ｓ１１１１０）。これにより、ディスク障害の発生が、上位装置ＨＡ１内の記憶域（例えばメモリ３２０上の領域）に記録される。また、Ｉ／Ｏ要求処理部３０１０は、障害情報３５２０（図４参照）中に、異常ステータスと判定されたＳＣＳＩ調停用Ｉ／Ｏ要求の識別子（例えばポインタの値）と、受信したＩ／Ｏ戻り値（つまり障害時Ｉ／Ｏ戻り値）と、受信したＳＣＳＩ戻り値（つまり障害時ＳＣＳＩ戻り値）とを記録する（Ｓ１１１２０）。また、Ｉ／Ｏ要求処理部３０１０は、障害回復検知部３０２０を別スレッドで開始させる（Ｓ１１１３０）。それにより、ディスク障害が回復したか否かの監視が開始される。最後に、Ｉ／Ｏ要求処理部３０１０は、ＳＣＳＩ調停用Ｉ／Ｏ要求の処理結果として、Ｓ１１０４０で受信したＩ／Ｏ戻り値及びＳＣＳＩ戻り値を、ディスク制御ソフトウェア１０５０ａに返す（Ｓ１１１００）。
【０１４９】
Ｓ１１０５０において、正常ステータスと判定された場合、Ｉ／Ｏ要求処理部３０１０は、ソフトウェア間インターフェイス３０３０を介してリモートコピー制御ソフトウェア１０７０ａにリモートコピー制御要求を送信し（Ｓ１１０６０）、それにより、リモートコピーペアの制御を行わせる。ここで送信されるリモートコピー制御要求には、ＳＣＳＩコマンドが含まれており、リモートコピー制御ソフトウェア１０７０aは、そのＳＣＳＩコマンドの種類に従ったリモートコピーペア制御を行う。Ｉ／Ｏ要求処理部３０１０は、リモートコピー制御戻り値を含んだ制御結果をリモートコピー制御ソフトウェア１０７０aから受信する（Ｓ１１０７０）。
【０１５０】
Ｉ／Ｏ要求処理部３０１０は、Ｉ／Ｏ・ＳＣＳＩコマンド戻り値変換テーブル３５７０（図９参照）を参照し、受信したリモートコピー制御戻り値に対応した変換後Ｉ／Ｏ戻り値及び変換後ＳＣＳＩ戻り値をＩ／Ｏ・ＳＣＳＩコマンド戻り値変換テーブル３５７０から取得する（Ｓ１１０８０）。そして、Ｉ／Ｏ要求処理部３０１０は、取得された変換後Ｉ／Ｏ戻り値及び変換後ＳＣＳＩ戻り値を用いて、Ｓ１１０５０と同様の判定処理を行う（Ｓ１１０９０）。
【０１５１】
Ｓ１１０９０において、異常ステータスと判定された場合、Ｉ／Ｏ要求処理部３０１０は、上述したＳ１１１１０以降の処理を行う。ただし、Ｉ／Ｏ要求処理部３０１０は、Ｓ１１０７０でリモートコピー制御戻り値を受信したので、Ｓ１１１２０の処理では、受信したリモートコピー制御戻り値をも障害情報３５２０に登録する。また、Ｓ１１１００では、Ｉ／Ｏ要求処理部３０１０は、Ｓ１１０８０で取得したＩ／Ｏ戻り値及びＳＣＳＩ戻り値をディスク制御ソフトウェア１０５０ａに返す。
【０１５２】
Ｓ１１０９０において、正常ステータス又はコンフリクトと判定された場合、Ｉ／Ｏ要求処理部３０１０は、ＳＣＳＩ調停用Ｉ／Ｏ要求の処理結果として、Ｓ１１０８０で取得したＩ／Ｏ戻り値及びＳＣＳＩ戻り値を、ディスク制御ソフトウェア１０５０ａに返す（Ｓ１１１００）。
【０１５３】
以上が、Ｓ１１０２０でロック系であると判定された場合に行われる処理の流れである。次に、Ｓ１１０２０でリードライト系であると判定された場合に行われる処理の流れについて説明する。
【０１５４】
（２）Ｓ１１０２０でリードライト系であると判定された場合。
【０１５５】
Ｓ１１０２０において、ＳＣＳＩコマンド種別はリードライト系であると判定された場合、Ｉ／Ｏ要求処理部３０１０は、Ｓ１１０６０と同様に、ＳＣＳＩコマンドを含んだリモートコピー制御要求をリモートコピー制御ソフトウェア１０７０ａに送信する（Ｓ１１１５０）。その後、Ｉ／Ｏ要求処理部３０１０は、リモートコピー制御戻り値を含んだ制御結果をリモートコピー制御ソフトウェア１０７０aから受信する（Ｓ１１１６０）。
【０１５６】
Ｉ／Ｏ要求処理部３０１０は、ステップ１１１６０で受け取ったリモートコピー制御戻り値を用いてリモートコピー制御戻り値判定テーブル３５６０（図８参照）を参照することにより、そのリモートコピー制御戻り値がどんなステータスに該当するかのリモートコピー制御戻り値判定を行う（Ｓ１１１７０）。
【０１５７】
Ｓ１１１７０において、異常ステータス又はコンフリクトと判定された場合、Ｉ／Ｏ要求処理部３０１０は、Ｓ１１１６０で受信したリモートコピー制御戻り値を用いて、上述したＳ１１０８０以降の処理を行う。なお、Ｉ／Ｏ要求処理部３０１０は、Ｓ１１１００では、Ｓ１１０８０で取得したＩ／Ｏ戻り値及びＳＣＳＩ戻り値をディスク制御ソフトウェア１０５０ａに返す。また、Ｉ／Ｏ要求処理部３０１０は、Ｓ１１０９０で異常ステータスと判定された場合には、Ｓ１１１２０では、障害情報３５２０中に、Ｓ１１６０で受信したリモートコピー制御戻り値（「ＧＯＯＤ」以外）を登録する。
【０１５８】
Ｓ１１１７０において、正常ステータスと判定された場合、Ｉ／Ｏ要求処理部３０１０は、ＳＣＳＩ調停用Ｉ／Ｏ要求を記憶装置システム２０Ａに送信し（Ｓ１１１８０）、その後、そのＳＣＳＩ調停用Ｉ／Ｏ要求の処理結果を記憶装置システム２０Ａから受信する（Ｓ１１１９０）。Ｉ／Ｏ要求処理部３０１０は、その受信した処理結果に含まれているＩ／Ｏ戻り値及びＳＣＳＩ戻り値を用いて、上述したＳ１１０９０以降の処理を行う。例えば、Ｉ／Ｏ要求処理部３０１０は、Ｓ１１１００では、Ｓ１１１９０で受信したＩ／Ｏ戻り値及びＳＣＳＩ戻り値をディスク制御ソフトウェア１０５０ａに返す。また、例えば、Ｉ／Ｏ要求処理部３０１０は、Ｓ１１０９０で異常ステータスと判定された場合には、Ｓ１１１２０では、障害情報３５２０中に、Ｓ１１６０で受信したリモートコピー制御戻り値「ＧＯＯＤ」を登録する。
【０１５９】
以上が、Ｓ１１０２０でリードライト系であると判定された場合に行われる処理の流れの説明である。
【０１６０】
ところで、Ｓ１１０１０において、障害検知フラグ３５１０が「ＯＮ」であることを検出した場合（つまり、ディスク障害が発生したことを検出した場合）、Ｉ／Ｏ要求処理部３０１０は、ステップ１１１４０の処理を行う。すなわち、Ｉ／Ｏ要求処理部３０１０は、障害情報３５２０の中から、Ｓ１１０００で取り出されたＳＣＳＩ調停用Ｉ／Ｏ要求に含まれている識別子に対応した障害時Ｉ／Ｏ戻り値及び障害時ＳＣＳＩ戻り値を取得し、ディスク制御ソフトウェア１０５０ａに返す処理結果に、それらの取得された値を設定する（Ｓ１１１４０）。そして、Ｉ／Ｏ要求処理部３０１０は、その処理結果（すなわち、Ｓ１１１４０で取得された障害時Ｉ／Ｏ戻り値及び障害時ＳＣＳＩ戻り値を含んだデータ）を、ディスク制御ソフトウェア１０５０ａに送信する（Ｓ１１１００）。
【０１６１】
図１２は、障害回復検知部３０２０の処理フローの一例を示す。
【０１６２】
障害回復検知部３０２０は、例えば、Ｉ／Ｏ要求処理部３０１０のＳ１１１３０の処理（図１１参照）により、起動して、以下の処理を開始することができる。
【０１６３】
障害回復検知部３０２０は、まず、障害情報３５２０の中の障害時リモートコピー制御戻り値がどんな値であるかを判定する（Ｓ１２０００）。
【０１６４】
このＳ１２０００において、障害時リモートコピー制御戻り値が「ＧＯＯＤ」であるということは、調停用ディスク２１１ａに関して何らかの障害が発生したことを表す。この場合、障害回復検知部３０２０は、調停用ディスク２１１aの障害の回復を検知するためのＳＣＳＩ調停用Ｉ／Ｏ要求を作成する（Ｓ１２０１０）。ここで作成されるＳＣＳＩ調停用Ｉ／Ｏ要求としては、例えば、「Ｒｅｓｅｒｖｅ」のＳＣＳＩコマンドを含んだ調停用Ｉ／Ｏ要求を採用することができる。また、例えば、作成されたＳＣＳＩ調停用Ｉ／Ｏ要求（換言すれば、送信される予定のＳＣＳＩ調停用Ｉ／Ｏ要求）は、上位装置ＨＡ１の所定の記憶域（例えばメモリ３２０）に登録されても良い。
【０１６５】
障害回復検知部３０２０は、作成したＳＣＳＩ調停用Ｉ／Ｏ要求を記憶装置システム２０Ａに送信し（Ｓ１２０２０）、その後、それの処理結果を記憶装置システム２０Ａから受信する（Ｓ１２０３０）。障害回復検知部３０２０は、受信した処理結果に含まれているＩ／Ｏ戻り値及びＳＣＳＩ戻り値を用いて、例えばＳ１１０５０（図１１参照）と同様の判定処理を行う（Ｓ１２０４０）。
【０１６６】
Ｓ１２０４０において、正常ステータス又はコンフリクトと判定されたということは、ディスク障害が回復したことを表す。この場合、障害回復検知部３０２０は、使用済みのＳＣＳＩ調停用Ｉ／Ｏ要求を開放し（例えばＳ１２０１０で作成したＳＣＳＩ調停用Ｉ／Ｏ要求を所定の記憶域から消去し）（Ｓ１２０５０）、障害検知フラグ３５１０の状態を「ＯＮ」から「ＯＦＦ」に変更し（Ｓ１２０６０）、障害情報３５２０の内容を消去（例えば初期値で上書き）して（Ｓ１２０７０）、処理を終了する。
【０１６７】
一方、Ｓ１２０４０において、異常ステータスと判定されたということは、ディスク障害が継続していることを表す。この場合、障害回復検知部３０２０は、使用済みのＳＣＳＩ調停用Ｉ／Ｏ要求を開放し（Ｓ１２０８０）、待ち処理を行った後（Ｓ１２０９０）、再び、Ｓ１２０１０の処理を行う。なお、待ち処理とは、使用済みのＳＣＳＩ調停用Ｉ／Ｏ要求を開放してから再びＳＣＳＩ調停用Ｉ／Ｏ要求を作成するまでに一定時間（例えば３秒）待ち状態となる処理である。待ち時間は、固定値であってもよいし、ユーザによって可変であっても良い。
【０１６８】
さて、Ｓ１２０００において、障害時リモートコピー制御戻り値が「ＧＯＯＤ」以外であるということは、ディスク障害では無く、リモートコピー制御に関して何らかの障害が発生したこと（例えば、リモートコピー制御ソフトウェア１０７０aに障害が発生したこと）ということである。この場合、障害回復検知部３０２０は、リモートコピー制御要求を生成してリモートコピー制御ソフトウェア１０７０ａに送信する（Ｓ１２１００）。送信されるリモートコピー制御要求の内容は、例えば、リモートコピーペアのコピー状態を確認することである。障害回復検知部３０２０は、それの結果をリモートコピー制御ソフトウェア１０７０aから受信し（Ｓ１２１１０）、受信した結果に含まれているリモートコピー制御戻り値を用いて、例えばＳ１１１７０（図１１参照）と同様の判定を行う（Ｓ１２１２０）。Ｓ１２１２０において、正常ステータスと判定された場合、障害回復検知部３０２０は、Ｓ１２０６０以降の処理を行い、異常ステータスと判定された場合、一定時間（例えば３秒間）待ってから（Ｓ１２１３０）、再び、Ｓ１２１００の処理を行う。なお、Ｓ１２１００で送信されるリモートコピー制御要求の内容は、リモートコピーペアの状態確認であるため、リモートコピー制御戻り値にコンフリクトが設定されることはない。
【０１６９】
図１３は、リモートコピー制御ソフトウェア１０７０aの処理フローの一例を示す。
【０１７０】
リモートコピー制御ソフトウェア１０７０aは、Ｉ／Ｏ要求処理部３０１０又は障害回復検知部３０２０から、リモートコピー制御要求を受信する（Ｓ１３０００）。
【０１７１】
次に、リモートコピー制御ソフトウェア１０７０aは、受信したリモートコピー制御要求に従うリモートコピーペア制御を実行する（Ｓ１３０１０）。具体的には、例えば、リモートコピー制御ソフトウェア１０７０ａは、以下の（１）〜（３）の処理、
（１）コピーペアを構成する一方の論理ボリュームである調停用ボリューム２１２ａのコピー状態を確認する処理、
（２）調停用ボリューム２１２ａがコピー元論理ボリュームである場合、リモートコピー、例えば、調停用ボリューム２１２ａに格納するデータの全部又は一部（例えば、既存のデータと新たに書き込まれるデータとの差分）を装置Ｉ／Ｆ２４０を介してコピー先ボリューム２１２ｂに格納することを記憶装置システム２０Ａに対して実行させる処理、
（３）調停用ボリューム２１２ａと２１２ｂのお互いのコピー状態を反転し、それに伴い、調停用ボリューム２１２ａ内のデータと、調停用ボリューム２１２ｂ内のデータとを入れ替える処理、
のうちのいずれかを実行することができる。
【０１７２】
リモートコピー制御ソフトウェア１０７０aは、リモートコピー制御の処理結果に応じたリモートコピー制御戻り値を生成し、その値を含んだ処理結果データを、リモートコピー制御要求の送信元（Ｉ／Ｏ要求処理部３０１０又は障害回復検知部３０２０）に送信する（Ｓ１３０２０）。
【０１７３】
以上の流れのうちの一つをまとめると、例えば以下の通りである。
（１）ロック系のＳＣＳＩコマンドを含んだＳＣＳＩ調停用Ｉ／Ｏ要求が出力された場合。
【０１７４】
調停エミュレーションソフトウェア１０６０ａは、デバイス制御ソフトウェア１０５０ａからＳＣＳＩ調停用Ｉ／Ｏ要求を受信したならば、そのＳＣＳＩ調停用Ｉ／Ｏ要求を記憶装置システム２０Ａに出力する（例えば、第一の調停に勝つことを試みる）。それに応答して、正常ステータスに該当するＩ／Ｏ戻り値及びＳＣＳＩコマンド戻り値を記憶装置システム２０Ａから受信した場合（例えば、第一の調停の勝者になった旨の解答を受信した場合）、調停エミュレーションソフトウェア１０６０ａは、リモートコピー制御要求をリモートコピー制御ソフトウェア１０７０ａに送信する（例えば、第二の調停にも勝つことを試みる）。リモートコピー制御ソフトウェア１０７０ａは、例えば、調停用ボリューム２１２ａをコピー元状態にできなかった場合、異常ステータスに該当するリモートコピー制御戻り値を出力する（例えば、第二の調停の敗者になった旨の回答を出力する）。調停エミュレーションソフトウェア１０６０ａは、リモートコピー制御戻り値を受信し、そのリモートコピー制御戻り値に対応するＩ／Ｏ戻り値及びＳＣＳＩコマンド戻り値を取得し、取得されたＩ／Ｏ戻り値及びＳＣＳＩコマンド戻り値が異常ステータスに該当すれば、障害検知フラグ３５１０をオンにするとともに、取得されたＩ／Ｏ戻り値及びＳＣＳＩコマンド戻り値を障害情報３５２０に書き込む。
（２）リードライト系のＳＣＳＩコマンドを含んだＳＣＳＩ調停用Ｉ／Ｏ要求が出力された場合。
【０１７５】
調停エミュレーションソフトウェア１０６０ａは、デバイス制御ソフトウェア１０５０ａからＳＣＳＩ調停用Ｉ／Ｏ要求を受信したならば、リモートコピー制御要求をリモートコピー制御ソフトウェア１０７０ａに送信する。リモートコピー制御ソフトウェア１０７０ａは、例えば、リモートコピーに失敗した場合、異常ステータスに該当するリモートコピー制御戻り値を出力する。調停エミュレーションソフトウェア１０６０ａは、リモートコピー制御戻り値を受信し、そのリモートコピー制御戻り値に対応するＩ／Ｏ戻り値及びＳＣＳＩコマンド戻り値を取得し、取得されたＩ／Ｏ戻り値及びＳＣＳＩコマンド戻り値が異常ステータスに該当すれば、障害検知フラグ３５１０をオンにするとともに、取得されたＩ／Ｏ戻り値及びＳＣＳＩコマンド戻り値を障害情報３５２０に書き込む。
【０１７６】
さて、以上、上述した第一実施例によれば、ディスク制御ソフトウェア１０５０ａと記憶装置システム２０Ａとの間に、調停エミュレーションソフトウェア１０６０ａが介在する（調停エミュレーションソフトウェア１０６０ａはディスク制御ソフトウェア１０５０ａに組み込まれていても良い）。調停エミュレーションソフトウェア１０６０ａは、ディスク制御ソフトウェア１０５０ａからＳＣＳＩ調停用Ｉ／Ｏ要求を受けてそれを記憶装置システム２０Ａに送信したり、そのＳＣＳＩ調停用Ｉ／Ｏ要求の処理結果（Ｉ／Ｏ戻り値及びＳＣＳＩコマンド戻り値を含んだデータ）を記憶装置システム２０Ａから受信したりする。調停エミュレーションソフトウェア１０６０ａは、受信した処理結果に含まれているＩ／Ｏ戻り値及びＳＣＳＩコマンド戻り値から、異常が発生したか否かを判定し、異常が発生したと判定された場合、障害検知フラグ３５１０の状態をＯＮに設定し、そのときのＩ／Ｏ戻り値及びＳＣＳＩコマンド戻り値（障害時Ｉ／Ｏ戻り値及び障害時ＳＣＳＩコマンド戻り値）を所定の記憶域に記憶させて、障害時Ｉ／Ｏ戻り値及び障害時ＳＣＳＩ戻り値をディスク制御ソフトウェア１０５０ａに送信する。ディスク制御ソフトウェア１０５０ａは、障害時Ｉ／Ｏ戻り値及び障害時ＳＣＳＩ戻り値を受けた場合、リトライ処理、すなわち、先に送信したＳＣＳＩ調停用Ｉ／Ｏ要求を再送信する。調停エミュレーションソフトウェア１０６０ａは、障害検知フラグ３５１０がＯＮ状態である期間中に、異常が発生したと判定されたときと同一のＳＣＳＩ調停用Ｉ／Ｏ要求を受信した場合、そのＩ／Ｏ要求を記憶装置システム２０Ａに送信することなく（例えばそのＩ／Ｏ要求を破棄して）、直ちに、障害時Ｉ／Ｏ戻り値及び障害時ＳＣＳＩコマンド戻り値を所定の記憶域から読み出してディスク制御ソフトウェア１０５０ａに返送する。ディスク制御ソフトウェア１０５０ａにとってみると、リトライ処理としてＳＣＳＩ調停用Ｉ／Ｏ要求を再送信した直後に再び障害時Ｉ／Ｏ戻り値及び障害時ＳＣＳＩコマンド戻り値を受信することになる。これは、リモートコピー制御において何らかの障害が発生し、それに応じたリモートコピー制御戻り値が発行された場合にも、障害検知フラグ３５１０がＯＮ状態に設定され、同様の処理が行われる。これにより、ディスク制御ソフトウェア１０５０ａによって複数回のリトライ処理が行われても、複数回のリトライ処理は、ＳＣＳＩ調停用Ｉ／Ｏ要求が記憶装置システム２０Ａに送信される場合よりも早く（例えば大幅に短い時間で）終了する。このため、クラスタソフトウェア１０４０ａは、ディスク制御ソフトウェア１０５０ａから早くエラー報告を受けることができ（例えば、複数回のリトライ処理が行われても、一度もリトライ処理が行われない場合と実質的に同じ又はそれに近いタイミングでエラー報告を受けることができ）、以って、フェイルオーバー処理を早く開始することができる。
【実施例２】
【０１７７】
以下、本発明の一実施形態に係る第二の実施例について説明する。なお、以下、第一実施例と重複する部分の説明は省略又は簡略し、第一実施例と異なる部分の説明を主に説明する（これは、第二実施例のみならず、第三実施例以降も同様である）。
【０１７８】
図１４は、第二実施例におけるＩ／Ｏ要求受付部３０００の処理フローの一例を示す。
【０１７９】
Ｉ／Ｏ要求受付部３０００が、ディスク制御ソフトウェア１０５０ａからＳＣＳＩ調停用Ｉ／Ｏ要求を受信し（Ｓ１４０００）、Ｉ／Ｏ要求キュー３５００に格納する前に、障害検知フラグ３５１０を参照してそれの状態を判定する（Ｓ１４０１０）。
【０１８０】
Ｓ１４０１０において、障害検知フラグ３５１０が「ＯＦＦ」状態であると判定された場合、Ｉ／Ｏ要求受付部３０００は、受信したＳＣＳＩ調停用Ｉ／Ｏ要求を、Ｉ／Ｏ要求キュー３５００の所定位置（例えば最後尾）に格納する（Ｓ１４０２０）。
【０１８１】
一方、Ｓ１４０１０において、障害検知フラグ３５１０が「ＯＮ」状態であると判定された場合、Ｉ／Ｏ要求受付部３０００は、受信したＳＣＳＩ調停用Ｉ／Ｏ要求の識別子に対応した障害時Ｉ／Ｏ戻り値及び障害時ＳＣＳＩコマンド戻り値を障害情報３５２０から取得し（Ｓ１４０３０）、それらをディスク制御ソフトウェア１０５０ａに送信する（Ｓ１４０４０）。
【０１８２】
以上のように、この第二実施例では、Ｉ／Ｏ要求受付部３０００が、障害検知フラグ３５１０の状態を判定し、それが「ＯＮ」状態であると判定されれば、障害時Ｉ／Ｏ戻り値及び障害時ＳＣＳＩコマンド戻り値をディスク制御ソフトウェア１０５０ａに返送する。このため、Ｉ／Ｏ要求処理部３０１０は、上述したＳ１１０１０及びＳ１１１４０の処理（図１１参照）を行う必要がなくなる（その他の処理は、第一実施例と同様に行う）。
【実施例３】
【０１８３】
第三実施例では、プラグアンドプレイ（以下、「ＰｎＰ」と記す）によってデバイス情報に変更があったことが所定のモジュール（例えばオペレーティングシステム内のモジュール）によって検知された場合に、オペレーティングシステムによって、自動的に、デバイス情報取得処理が実行される。デバイス情報とは、例えば、記憶装置システム２０Ａの構成に関する情報であり、例えば、どんな属性（例えば信頼性が高いか低いか等）を持った物理記憶デバイス上にどんな容量を持った論理ボリュームが備えられているか等の情報である。デバイス情報は、例えば、記憶装置システム２０Ａの共有メモリ２６０に格納される情報である。また、このデバイス情報が変更されことは、例えば、記憶装置システム２０Ａから通知されることにより識別することができる。
【０１８４】
デバイス情報取得処理が開始されると、障害回復検知部３０２０が起動し、障害回復検知部３０２０によって以下の処理が行われる。
【０１８５】
図１５は、第三実施例における障害回復検知部３０２０の処理フローの一例を示す。
【０１８６】
障害回復検知部３０２０は、まず、障害情報３５２０の中の障害時リモートコピー制御戻り値がどんな値であるかを判定する（Ｓ１６０００）。
【０１８７】
このＳ１２０００において、障害時リモートコピー制御戻り値が「ＧＯＯＤ」であることが判定された場合、障害回復検知部３０２０は、デバイス情報取得用のＩ／Ｏ要求を生成して記憶装置システム２０Ａに送信し（Ｓ１６０１０）、その後、それの処理結果を記憶装置システム２０Ａから受信する（Ｓ１６０２０）。なお、送信されるデバイス情報取得用のＩ／Ｏ要求としては、例えば、「Query Device Relations」のＰｎＰ
Ｉ／Ｏ要求を採用することができる。
【０１８８】
障害回復検知部３０２０は、受信した処理結果に含まれているＩ／Ｏ戻り値を用いて、例えばＳ１１０５０（図１１参照）と同様の判定処理を行う（Ｓ１６０３０）。Ｓ１６０３０において、正常ステータスと判定された場合、障害回復検知部３０２０は、障害検知フラグ３５１０の状態を「ＯＮ」から「ＯＦＦ」に変更し（Ｓ１６０４０）、障害情報３５２０の内容を消去（例えば初期値で上書き）して（Ｓ１６０５０）、処理を終了する。Ｓ１６０３０において、異常ステータスと判定された場合、障害回復検知部３０２０は、処理を終了する。
【０１８９】
さて、Ｓ１６０００において、障害時リモートコピー制御戻り値が「ＧＯＯＤ」以外であると判定された場合、障害回復検知部３０２０は、上述したＳ１２１００〜Ｓ１２１２０と同様の処理を行う。Ｓ１２１２０において、異常ステータスと判定された場合、障害回復検知部３０２０は、処理を終了する。
【実施例４】
【０１９０】
第四実施例では、クラスタソフトウェア１０４０ａが、調停用ディスク２１１ａ（クラスタリソースの一つ）を使用可能な状態にするリソースオンライン処理を行うことによって、障害の回復を検知するシステムの例を示す。なお、ここで言う「クラスタリソース」とは、クラスタが管理するリソース（例えば、物理的な記憶デバイス等のハードウェアや、データベースマネジメントシステム等のプログラムのこと）のことである。
【０１９１】
図１６は、第四実施例における障害回復検知部３０２０の処理フローの一例を示す。
【０１９２】
例えば、障害回復検知部３０２０は、クラスタソフトウェア１０４０ａから起動命令を受けて、以下の処理を行う。
【０１９３】
障害回復検知部３０２０は、上述したＳ１２０００〜Ｓ１２０７０と同様の処理（図１１参照）を行う（Ｓ１７０００〜Ｓ１７０７０）。障害回復検知部３０２０は、Ｓ１７０７０の処理の後、調停用ディスク２１１ａを使用可能な状態にする、例えば、調停用ディスク２１１ａをネットワークＣＮ１２又はＣＮ１３に論理的に接続するリソースオンラインを行う（Ｓ１７０８０）。
【０１９４】
障害回復検知部３０２０は、Ｓ１７０４０において、異常ステータスと判定された場合、Ｓ１７０２０で送信したＩ／Ｏ要求を開放する（Ｓ１７０９０）。また、障害回復検知部３０２０は、Ｓ１７０００において「ＧＯＯＤ」以外と判定された場合、上述したＳ１６０６０〜Ｓ１６０８０と同様の処理（図１５参照）を行う（Ｓ１７１００〜Ｓ１７１２０）。
【０１９５】
以上、本発明の好適な実施形態及び幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施形態及び実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
【図面の簡単な説明】
【０１９６】
【図１】本発明の一実施形態の第一実施例に係るクラスタシステムの全体概要を示すブロック図である。
【図２】上位装置ＨＡ１内で動作する種々のコンピュータプログラムを示す。
【図３】上位装置ＨＡ１のソフトウェア構成を詳細に示す。
【図４】障害情報３５２０の構成例を示す。
【図５】ＳＣＳＩコマンド種別判定テーブル３５３０の構成例を示す。
【図６】Ｉ／Ｏ戻り値判定テーブル３５４０の構成例を示す。
【図７】ＳＣＳＩコマンド戻り値判定テーブル３５５０の構成例を示す。
【図８】リモートコピー制御戻り値判定テーブル３５６０の構成例である。
【図９】Ｉ／Ｏ・ＳＣＳＩコマンド戻り値変換テーブル３５７０の構成例である。
【図１０】Ｉ／Ｏ要求受付部３０００の処理フローの一例を示す。
【図１１】Ｉ／Ｏ要求処理部３０１０の処理フローの一例を示す。
【図１２】障害回復検知部３０２０の処理フローの一例を示す。
【図１３】リモートコピー制御ソフトウェア１０７０aの処理フローの一例を示す。
【図１４】本発明の一実施形態の第二実施例におけるＩ／Ｏ要求受付部３０００の処理フローの一例を示す。
【図１５】本発明の一実施形態の第三実施例における障害回復検知部３０２０の処理フローの一例を示す。
【図１６】本発明の一実施形態の第四実施例における障害回復検知部３０２０の処理フローの一例を示す。
【図１７】図１７Ａ及び図１７Ｂは、本発明の一実施形態に係るシステムの概念と、そのシステムにおいて行われる処理流れの一例を示す。
【符号の説明】
【０１９７】
１０Ａ、１０Ｂ…サイト、１１…情報発行部、１２…中間情報処理部、１３…リソース保持部、１４…情報フィルタ部、１６…記憶域、２０Ａ、２０Ｂ…記憶装置システム、２１０…RAIDグループ、２１１…ディスクドライブ、２１２…論理ボリューム、２２０…ディスク制御部、２３０…上位装置Ｉ／Ｆ、２４０…装置間Ｉ／Ｆ、２５０…キャッシュメモリ、２６０…共有メモリ、２７０…スイッチング制御部、３１０…CPU、３２０…メモリ、３３０…ディスクドライブ、３４０…ディスクＩ／Ｆ、３５０…上位ネットワークＩ／Ｆ、３６０…キーボードスイッチ、３７０…ディスプレイ、３８０…バス、ＣＮ…ネットワーク、Ｈ…上位装置、１０４０…クラスタソフトウェア、１０５０…ディスク制御ソフトウェア、１０６０…調停エミュレーションソフトウェア、１０７０…リモートコピー制御ソフトウェア、３０００…Ｉ／Ｏ要求受付部、３０１０…Ｉ／Ｏ要求処理部、３０２０…障害回復検知部、３０３０…ソフトウェア間インターフェイス、３５００…Ｉ／Ｏ要求キュー、３５１０…障害検知フラグ、３５２０…障害情報、３５３０…ＳＣＳＩコマンド種別判定テーブル、３５４０…Ｉ／Ｏ戻り値判定テーブル、３５５０…ＳＣＳＩコマンド戻り値判定テーブル、３５６０…リモートコピー制御戻り値判定テーブル、３５７０…Ｉ／Ｏ・ＳＣＳＩコマンド戻り値変換テーブル
【図１】
2006031335.tif 000003
【図２】
2006031335.tif 000004
【図３】
2006031335.tif 000005
【図４】
2006031335.tif 000006
【図５】
2006031335.tif 000007
【図６】
2006031335.tif 000008
【図７】
2006031335.tif 000009
【図８】
2006031335.tif 000010
【図９】
2006031335.tif 000011
【図１０】
2006031335.tif 000012
【図１１】
2006031335.tif 000013
【図１２】
2006031335.tif 000014
【図１３】
2006031335.tif 000015
【図１４】
2006031335.tif 000016
【図１５】
2006031335.tif 000017
【図１６】
2006031335.tif 000018
【図１７】
2006031335.tif 000019