(57)【要約】【課題】  接続された装置を構成するために初期設定コードを実行するための方法、システム、およびプログラムを提供することにある。【解決手段】  少なくとも１つの接続された装置を構成するための複数のセグメントが提供され、それぞれのセグメントは少なくとも１つの接続された装置を構成するための構成コードを含む。それぞれのセグメント内の構成コードを実行して少なくとも１つの接続された装置に関する構成操作を実行することにより、セグメントはセグメント順に従って実行される。セグメントに関する構成操作の実行を完了したことに応答してメモリ内にセグメントの完了が示される。【選択図】  図１
2007149085.tif 000002
【特許請求の範囲】
【請求項１】
システムに接続された少なくとも１つの装置を構成するためおよびメモリと通信するために使用可能なコードを有するプログラムであって、前記コードにより操作が前記システムで実行され、前記操作が、
前記少なくとも１つの接続された装置を構成するための複数のセグメントで、それぞれのセグメントが前記少なくとも１つの接続された装置を構成するための構成コードを含む前記複数のセグメントを提供することと、
前記それぞれのセグメント内の前記構成コードを実行して前記少なくとも１つの接続された装置に関する構成操作を実行することにより、セグメント順に従って前記セグメントを実行することと、
前記セグメントに関する前記構成操作の実行を完了したことに応答して前記メモリ内に前記セグメントの完了を示すことと、
を含む、前記プログラム。
【請求項２】
前記セグメント順で最後に完了したセグメントに続いて障害発生セグメントを実行している間に発生した障害からの回復に応答して、前記セグメント順で前記最後に完了したセグメントを前記メモリから決定することと、
前記障害発生セグメントから実行を継続できるかどうかを判定することと、
前記障害発生セグメントから実行を継続できると判定したことに応答して前記障害発生セグメント内の前記構成コードを実行することと、
をさらに含む、請求項１に記載のプログラム。
【請求項３】
前記障害発生セグメントに関連するクリーンアップ・ルーチンが存在するかどうかを判定することと、
前記クリーンアップ・ルーチンが存在すると判定したことに応答して前記決定されたクリーンアップ・ルーチンを実行し、前記少なくとも１つの接続された装置の前記構成を前記障害発生セグメントの実行を開始する前の状態に戻すことであって、前記クリーンアップ・ルーチンを実行したことに応答して前記障害発生セグメント内の前記構成コードが実行されることと、
をさらに含む、請求項２に記載のプログラム。
【請求項４】
前記障害発生セグメントから実行を継続できると判定したことに応答して再試行値が再試行限界を超えるかどうかを判定することと、
前記再試行値が前記再試行限界を超えないと判定したことに応答して前記障害発生セグメント内の前記構成コードを実行する前に前記再試行値を増分することと、
前記再試行値が前記再試行限界を超えると判定したことに応答して再試行せずに前記回復に失敗することと、
をさらに含む、請求項２に記載のプログラム。
【請求項５】
前記障害発生セグメントから実行を継続できないと判定したことに応答して前記障害発生セグメントならびに前記障害発生セグメントに先行するすべてのセグメントに関連するクリーンアップ・ルーチンが存在するかどうかを判定することと、
決定された各クリーンアップ・ルーチンを前記セグメント順の逆の順序で実行し、前記少なくとも１つの接続された装置の前記構成を前記構成コードの実行前の状態に戻すことと、
をさらに含む、請求項２に記載のプログラム。
【請求項６】
前記セグメントの構成コードに固有のクリーンアップを実行するために、異なるセグメントに異なるクリーンアップ・ルーチンが関連付けられる、請求項５に記載のプログラム。
【請求項７】
第１および第２のクラスタが初期設定コードを実行し、さらに、
１つのセグメントを実行したことに応答して前記第１のクラスタにより前記第２のクラスタに通知することであって、前記メモリ内に１つのセグメントの完了を示すことが、前記完了したセグメント内の前記構成コードを実行した前記第１または第２のクラスタを示すことをさらに含む前記通知することと、
前記第２のクラスタによる使用のために前記少なくとも１つの接続された装置を構成するための前記信号を受け取ったことに応答して、前記第１のクラスタによって実行された前記セグメントを前記第２のクラスタにより実行することと、
を実行する、請求項１に記載のプログラム。
【請求項８】
前記セグメントに関する前記構成操作の実行を完了したことに応答して前記メモリ内に前記セグメントの完了を前記第１および第２のクラスタにより示すことと、
１つのセグメントを実行したことに応答して前記第２のクラスタにより前記第１のクラスタに通知することであって、前記第１のクラスタが前記信号に応答して次のセグメントを実行することと、
をさらに含む、請求項７に記載のプログラム。
【請求項９】
前記構成中の障害を前記第１のクラスタにより検出することと、
前記障害を検出したことに応答して最後に完了したセグメントを前記メモリから前記第１のクラスタにより決定することであって、前記セグメント順で前記最後に完了したセグメントに続いて障害発生セグメントを実行する前記第１または第２のクラスタによって前記障害が発生していることと、
前記障害発生セグメントから実行を継続できるかどうかを前記第１のクラスタにより判定することと、
をさらに含む、請求項７に記載のプログラム。
【請求項１０】
前記第１のクラスタが前記最後に完了したセグメントを前記メモリから決定し、前記障害発生セグメントから実行を継続できるかどうかを判定し、前記第１のクラスタが、
前記障害発生セグメントから実行を継続できないと判定したことに応答して前記障害発生セグメントならびに前記障害発生セグメントに先行するすべてのセグメントに関連するクリーンアップ・ルーチンが存在するかどうかを判定することと、
決定された各クリーンアップ・ルーチンを前記セグメント順の逆の順序で実行し、前記少なくとも１つの接続された装置の前記構成を前記構成コードの実行前の状態に戻すことと、
前記第２のクラスタにより、決定された各クリーンアップ・ルーチンを前記セグメント順の逆の順序で実行させて、前記少なくとも１つの接続された装置の前記構成を前記構成コードの実行前の状態に戻すよう、前記第２のクラスタに通知することと、
をさらに実行する、請求項９に記載のプログラム。
【請求項１１】
前記第１または第２のクラスタのいずれか一方が前記セグメントを実行する前に前記メモリにアクセスできないと判定したことに応答して前記構成に失敗すること
をさらに含む、請求項７に記載のプログラム。
【請求項１２】
接続された装置を有するシステムであって、
プロセッサと、
前記プロセッサと通信するメモリと、
少なくとも１つの接続された装置を構成するための複数のセグメントを含み、それぞれのセグメントが前記少なくとも１つの接続された装置を構成するための構成コードを含むコンピュータ可読媒体と、
操作を実行するために前記プロセッサによって実行されるコードであって、前記操作が、
前記それぞれのセグメント内の前記構成コードを実行して前記少なくとも１つの接続された装置に関する構成操作を実行することにより、セグメント順に従って前記セグメントを実行することと、
前記セグメントに関する前記構成操作の実行を完了したことに応答して前記メモリ内に前記セグメントの完了を示すことと、
を含むコードと、
を含む前記システム。
【請求項１３】
前記プロセッサ、前記メモリ、および前記コンピュータ可読媒体が第１のクラスタを構成し、第２のクラスタをさらに構成し、
前記第１のクラスタが１つのセグメントを実行したことに応答して前記第２のクラスタに通知し、前記第２のクラスタが前記第２のクラスタによる使用のために前記少なくとも１つの接続された装置を構成するための前記信号を受け取ったことに応答して前記第１のクラスタによって実行された前記セグメントを実行し、前記第１および第２のクラスタが前記メモリ内に１つのセグメントの完了を示し、前記完了したセグメント内の前記構成コードを実行した前記第１または第２のクラスタを示すステップをさらに含む、請求項１２に記載のシステム。
【請求項１４】
少なくとも１つの接続された装置を構成するための複数のセグメントで、それぞれのセグメントが前記少なくとも１つの接続された装置を構成するための構成コードを含む前記複数のセグメントを提供することと、
前記それぞれのセグメント内の前記構成コードを実行して前記少なくとも１つの接続された装置に関する構成操作を実行することにより、セグメント順に従って前記セグメントを実行することと、
前記セグメントに関する前記構成操作の実行を完了したことに応答してメモリ内に前記セグメントの完了を示すことと、
を含む方法。
【請求項１５】
前記セグメント順で最後に完了したセグメントに続いて障害発生セグメントを実行している間に発生した障害からの回復に応答して、前記セグメント順で前記最後に完了したセグメントを前記メモリから決定することと、
前記障害発生セグメントから実行を継続できるかどうかを判定することと、
前記障害発生セグメントから実行を継続できると判定したことに応答して前記障害発生セグメント内の前記構成コードを実行することと、
をさらに含む、請求項１４に記載の方法。
【請求項１６】
前記障害発生セグメントに関連するクリーンアップ・ルーチンが存在するかどうかを判定することと、
前記クリーンアップ・ルーチンが存在すると判定したことに応答して前記決定されたクリーンアップ・ルーチンを実行し、前記少なくとも１つの接続された装置の前記構成を前記障害発生セグメントの実行を開始する前の状態に戻すことであって、前記クリーンアップ・ルーチンを実行したことに応答して前記障害発生セグメント内の前記構成コードが実行されることと、
をさらに含む、請求項１５に記載の方法。
【請求項１７】
第１および第２のクラスタが初期設定コードを実行し、さらに、
１つのセグメントを実行したことに応答して前記第１のクラスタにより前記第２のクラスタに通知することであって、前記メモリ内に１つのセグメントの完了を示すことが、前記完了したセグメント内の前記構成コードを実行した前記第１または第２のクラスタを示すことをさらに含む前記通知することと、
前記第２のクラスタによる使用のために前記少なくとも１つの接続された装置を構成するための前記信号を受け取ったことに応答して、前記第１のクラスタによって実行された前記セグメントを前記第２のクラスタにより実行することと、
を実行する、請求項１４に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、接続された装置を構成するために初期設定コードを実行するための方法、システム、およびプログラムに関する。
【背景技術】
【０００２】
ストレージ・ネットワーク内のホスト・システムは、複数の経路によりストレージ・コントローラと通信することができる。ストレージ・コントローラは個別のストレージ・クラスタ（storage cluster）から構成することができ、各ストレージ・クラスタは記憶装置にアクセスすることができ、記憶装置にアクセスするための冗長性を提供する。ホストは、いずれか一方のクラスタを介して、付加された記憶装置にアクセスすることができる。ストレージ・クラスタに障害が発生した場合、ホストは、もう一方のストレージ・クラスタを使用して記憶装置にアクセスすることにフェイルオーバ（failover）することができる。さらに、一方のクラスタに障害が発生した場合、記憶装置への最近の書込みが非障害クラスタの不揮発性記憶装置（ＮＶＳ：non-volatilestorage）に維持されるように、クラスタはもう一方のクラスタへの書込みをＮＶＳ内にバッファリングすることができる。このような複式クラスタ・システムでは、付加された記憶装置内に構成された論理装置、たとえば、論理サブシステム（ＬＳＳ：logicalsubsystem）を使用するように各クラスタを構成しなければならない。
【０００３】
複式クラスタ・システムでは、各クラスタは、バス・インターフェース、記憶装置、アダプタなどの接続された装置にアクセスするようにクラスタを構成するために、初期マイクロコード・ロード（ＩＭＬ：initial microcode load）などの初期設定コードを別々に実行する。各クラスタは、接続された装置にアクセスするために使用するための個別の構成情報セットを維持している。構成中に障害が発生し、エラー回復手順ではその障害から回復して構成および初期設定を続行することができない場合、管理者は、複式クラスタ・システムを障害が発生した初期設定および構成の開始以前の状態に戻すために、各クラスタの設定を手動で編集し再構成しなければならない可能性がある。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
当技術分野では、構成操作中に障害を処理するための改良された技法が必要である。
【課題を解決するための手段】
【０００５】
接続された装置を構成するために初期設定コードを実行するための方法、システム、およびプログラムが提供される。少なくとも１つの接続された装置を構成するための複数のセグメントが提供され、それぞれのセグメントは少なくとも１つの接続された装置を構成するための構成コードを含む。それぞれのセグメント内の構成コードを実行して少なくとも１つの接続された装置に関する構成操作を実行することにより、セグメントはセグメント順に従って実行される。セグメントに関する構成操作の実行を完了したことに応答してメモリ内にセグメントの完了が示される。
【発明を実施するための最良の形態】
【０００６】
図１は、ネットワーク・コンピューティング環境の一実施形態を示している。システム２は、それぞれが１つまたは複数のボリューム１０ａ、１０ｂ（たとえば、論理装置番号、論理装置など）を有するように構成された記憶装置８ａ、８ｂに向けられたホスト・システム４ａ、４ｂ・・・４ｎからの入出力（Ｉ／Ｏ）要求をネットワーク６により受け取る。システム２は、それぞれがプロセッサ複合体１４ａ、１４ｂとキャッシュ１６ａ、１６ｂとを含む２つのクラスタ１２ａ、１２ｂを含む。クラスタ１２ａ、１２ｂは、ホスト４ａ、４ｂ・・・４ｎからの入出力要求を受け取り、その要求をバッファリングし、それぞれのキャッシュ１６ａ、１６ｂ内のデータを記憶装置８ａ、８ｂに書き込む。クラスタ１２ａ、１２ｂは、キャッシュ１６ａ、１６ｂ内で更新のバックアップ記憶を可能にするために不揮発性記憶装置（図示せず）などの追加のコンポーネントを含むことができる。クラスタ１２ａ、１２ｂは、異なる電力境界（power boundary）を有することができる。上述の実施形態では、各ストレージ・クラスタ１２ａ、１２ｂは、記憶装置８ａ、８ｂを含む付加された記憶装置へのアクセスを可能にする。各クラスタ１２ａ、１２ｂは、ホスト４ａ、４ｂ・・・４ｎの入出力要求を処理するためにプロセッサ複合体１４ａ、１４ｂによって実行される入出力管理機能ソフトウェア１８ａ、１８ｂを含む。バス２０は、クラスタ１２ａ、１２ｂ間の通信を可能にするための通信インターフェースを提供する。バス２２は、クラスタ１２ａ、１２ｂと記憶装置８ａ、８ｂとの間の通信を提供する。バス２０および２２は、周辺装置相互接続（ＰＣＩ：PeripheralComponent Interconnect）バスなど、当技術分野で知られている適切な通信インターフェースまたはその他のバス・インターフェースを含むことができる。バス２０および２２は、接続するか、個別のものにするか、または複数の接続済みバス・デバイスを含むか、あるいはこれらの組み合わせにすることができる。
【０００７】
クラスタ１２ａ、１２ｂはいずれも、バス２０またはその他の何らかのインターフェースにより共用メモリ２４にアクセスすることができる。共用メモリ２４は、ハード・ディスク・ドライブ、不揮発性電子メモリなどを含むことができる。代わって、マスタがクラッシュした場合に非マスタがその構成を引き継ぐために、各クラスタ内のコピーが同期状態に保持されるように、個別の共用メモリ・デバイスがまったくない場合、共用メモリ２４は各クラスタ内に同じデータのコピーを含むことができる。コピーの同期は各セグメントの完了時に行うことができる。各クラスタ１２ａ、１２ｂによる各セグメントの完了に留意するために、共用メモリ２４を更新することができる。さらに、共用メモリ２４は各クラスタごとにセグメント・チェックポイント情報を含むことができ、それは、いずれかのクラスタ１２ａ、１２ｂがセグメントを完了したかどうかを示すものである。
【０００８】
さらに、クラスタ１２ａ、１２ｂは、ホスト４ａ、４ｂ・・・４ｎと通信するためにアダプタ２６ａ、２６ｂ・・・２６ｎにアクセスすることができる。アダプタは、クラスタ１２ａ、１２ｂのハードウェア内にまたはクラスタ１２ａ、１２ｂの外部に実現することができる。クラスタ１２ａ、１２ｂは、使用のために接続された装置を構成するようにクラスタ１２ａ、１２ｂが実行する初期マイクロコード・ロード（ＩＭＬ：initial microcode load）などの初期設定コード２８ａ、２８ｂをさらに含む。構成操作は、接続された装置によるアクセスおよび通信を可能にするために、ドライバおよび接続された装置をロードし構成することを含むことができる。たとえば、クラスタ１２ａ、１２ｂは、バス２０と、記憶ボリューム１０ａ、１０ｂと、アダプタ２６ａ、２６ｂ・・・２６ｎと、ホスト４ａ、４ｂ・・・４ｎなど、アダプタ２６ａ、２６ｂ・・・２６ｎに接続された任意のデバイスとを使用するようにクラスタ１２ａ、１２ｂを構成するために初期設定コード２８ａ、２８ｂを実行する。構成操作は、それらのデバイスを使用するためにクラスタ１２ａ、１２ｂのメモリ、たとえば、キャッシュ１６ａ、１６ｂ内のデータ構造を更新することを伴う場合もある。たとえば、構成コードは、記憶装置内のボリューム１０ａ、１０ｂにアクセスできるようにクラスタ１２ａ、１２ｂを構成するかまたは仮想化装置を構成することができる。セグメント完了情報３０は、その実行が正常に完了した構成コードのセグメントまたはセクションに関する情報を含む。特定の諸実施形態では、初期設定およびウォーム・スタートなどの再始動中の障害後のエラー回復手順に対して情報を提供できるように、共用メモリ２４は構成エラーが発生した後の情報を維持する。
【０００９】
システム２は、ストレージ・コントローラまたはサーバを含むことができる。代替一実施形態では、システム２は、接続された装置の初期設定および構成操作を実行する種々のタイプのコンピュータ・デバイスを含むことができる。ホスト４ａ、４ｂ・・・４ｎは、サーバ、メインフレーム、ワークステーション、パーソナル・コンピュータ、ハンドヘルド・コンピュータ、ラップトップ、電話装置、ネットワーク家電など、当技術分野で知られているコンピューティング・デバイスを含むことができる。ネットワーク６は、ストレージ・エリア・ネットワーク（ＳＡＮ）、ローカル・エリア・ネットワーク（ＬＡＮ）、イントラネット、インターネット、広域ネットワーク（ＷＡＮ）などを含むことができる。記憶装置８ａ、８ｂは、単純ディスク束（ＪＢＯＤ：Just a Bunch of Disks）、直接アクセス記憶装置（ＤＡＳＤ：Direct Access Storage Device）、冗長ディスク・アレイ（ＲＡＩＤ：RedundantArray of Independent Disks）というアレイ、仮想化装置、テープ記憶装置、フラッシュ・メモリなどの記憶装置のアレイを含むことができる。
【００１０】
図２は、初期設定構成操作を実行するために実行される初期設定手順５０と、初期設定および構成操作中に障害を検出したことに応答して実行されるエラー回復手順（ＥＲＰ：error recovery procedure）５２とを含む、初期設定コード・コピー２８ａ、２８ｂなどの初期設定コード２８のコンポーネントを示している。初期設定コード２８はセグメント５４ａ、５４ｂ・・・５４ｎ内に編成された構成コードをさらに含み、各セグメントは構成コード５６ａ、５６ｂ・・・５６ｎおよびチェックポイント情報５８ａ、５８ｂ・・・５８ｎのセクションを含む。各セグメント５４ａ、５４ｂ・・・５４ｎには任意選択のクリーンアップ・ルーチンを関連付けることができる。セグメントに関連するクリーンアップ・ルーチン６０ａ、６０ｂ・・・６０ｎを実行すると、クラスタ構成は関連セグメント５４ａ、５４ｂ・・・５４ｎの構成コード５６ａ、５６ｂ・・・５６ｎが実行される前の状態に戻される。クリーンアップ・ルーチン６０ａ、６０ｂ・・・６０ｎは、メモリおよびレジスタ内の特定の情報を削除し、障害が発生した構成コードの実行によって引き起こされた設定をその他の方法で逆転することができる。
【００１１】
セグメント５４ｂ・・・５４ｎは、構成コード５６ｂ、５６ｃ（図示せず）と、チェックポイント情報５８ｂ・・・５８ｎ（図示せず）と、任意選択でクリーンアップ・ルーチン６０ｂ・・・６０ｎ（図示せず）とを含む。クリーンアップ・ルーチン６０ｂ・・・６０ｎは、構成コードとは別に記憶することができる。ある実施形態では、構成コード５４ａ、５４ｂ・・・５４ｎは、構成コード５４ａ、５４ｂ・・・５４ｎの種々のセグメントを分離するチェックポイントを有する１つまたは複数のプログラムで実現することができる。代わって、あるセグメントに関するチェックポイント情報がそのセグメントに関する情報を提供する場合、構成コード５４ａ、５４ｂ・・・５４ｎの各セグメントは個別にアドレス可能である場合もある。各セグメント内の構成コード５４ａ・・・５４ｎは個別の構成操作を実行することができる。
【００１２】
図３は、継続情報７０とクリーンアップ・ルーチン情報７２とを含み、チェックポイント情報５８ａなど、あるセグメントに関するチェックポイント情報５８とともに含めることができる情報の一実施形態を示している。継続情報７０は、あるセグメント５４ａ、５４ｂ・・・５４ｎに関する構成コード５６ａ、５６ｂ・・・５６ｎを実行している間に障害が発生した場合、エラー回復手順（ＥＲＰ）５２中にそのセグメントから構成を継続できるかどうかを示している。クリーンアップ・ルーチン情報７２は、実行されたときに、クラスタまたはシステム構成を障害発生セグメントの構成コードが実行される前の状態に戻すクリーンアップ・ルーチンを識別する。しかし、障害が発生した構成コードのうち試行された実行セグメントより前に実行され完了した構成コード・セグメントの結果として行われた変更は有効なままになる。障害が発生した構成コードの実行中に行われた可能性のある変更を逆転するためにコードを実行する必要がない場合、セグメントはクリーンアップ・ルーチンを備えていない場合もある。
【００１３】
図４は、構成コード５６ａ、５６ｂ・・・５６ｎのセグメントを識別するかまたはアドレス指定するセグメントＩＤまたはポインタ８２と、識別された構成コードの実行が成功したかどうかを示す完了フラグ８４とを含み、あるセグメント５４ａ、５４ｂ・・・５４ｎに関するセグメント完了情報３０（図１）とともに含まれる情報の一例８０を示している。したがって、システムがあるセグメントに関する構成コードの実行を完了するたびに、構成コードの正常に実行されたセグメントに関するセグメント完了情報の一例８０内の完了フラグ８４に、その正常完了を示す情報が示される。この情報により、システムは、最後に正常に完了したセグメントを決定することができる。セグメント順は構成コードが実行された順序を示し、その順序はプログラムが構成コードのセグメントを実行する順序から決定することができる。
【００１４】
図５は、１つまたは複数のクラスタを含むシステムによって実行されたときに初期設定コード５０によって実行される操作の一実施形態を示している。図５の操作は、単一のプロセッサなどを有するシステムなどの単一クラスタ・デバイスに接続された複数のデバイスを構成するために、クラスタ１２ａなど、１つのクラスタのみを有するシステムによって実行することができる。単一クラスタ環境、すなわち、単一プロセッサ環境では、共用メモリは、構成中にプロセッサによって使用される不揮発性メモリを含む。初期設定手順５０を実行することによって構成操作を開始すると（ブロック１００）、初期設定手順５０は、第１のセグメント５４ａ内の構成コード５６ａにアクセスし（ブロック１０２）、論理装置、記憶領域、メモリ領域、アダプタなど、少なくとも１つの接続された装置を構成するように実行する（ブロック１０４）。構成コードの実行を正常に完了すると、たとえば、不揮発性メモリ２４にセグメントの完了が示される（ブロック１０６）。ある実施形態では、完了したセグメントに関するセグメント完了情報の一例８０内にそのセグメント８２に関する完了フラグ８４を設定することにより、そのセグメントに関する構成コードの完了を示すことができる。実行すべき追加セグメント５４ａ、５４ｂ・・・５４ｎが存在する場合（ブロック１０８）、初期設定コード２８内の次のセグメントに関する構成コード５６ｂ・・・５６ｎにアクセスし（ブロック１１０）、次にアクセスされた構成コード５６ｂ・・・５６ｎを実行するために制御はブロック１０４に戻る。すべてのセグメントに関する構成コードを実行した後、構成完了が返され（ブロック１１２）、成功したかまたは失敗した構成操作を除去するために共用メモリ２４が更新される。
【００１５】
図６は、図５において構成コードの実行中に障害を検出したことに応答してエラー回復手順（ＥＲＰ）５２によって実行される操作の一実施形態を示している。図６の操作は、接続された装置、たとえば、バス・インターフェース、記憶装置、アダプタなどを構成するために単一または複数のクラスタ・システムによって実行することができる。あるセグメント内の構成コード５６ａ、５６ｂ・・・５６ｎのセグメントを実行している間に障害が発生した後でＥＲＰ５２を開始したこと（ブロック１５０）に応答して、ＥＲＰ５２はメモリ２４から最後に完了したセグメントを決定する（ブロック１５２）。一般に、セグメントＥＲＰを開始するために、セグメント障害がセグメントＥＲＰへの分岐を引き起こす方法（ブロック１５０および２５０）と、セグメント障害がシステムＥＲＰを引き起こし、システムＥＲＰの後、障害発生セグメントが共用メモリ内のマスタによって検出され、セグメントＥＲＰが開始される方法と、セグメント障害がシステム・リブートを引き起こし、システムＩＭＬの後、障害発生セグメントが共用メモリ内のマスタによって検出され、セグメントＥＲＰが開始される方法という３通りの方法がある。最後に完了したセグメントは、その完了フラグ８２が設定されているセグメントであって、セグメント順で最後のセグメントを含むことができる。障害発生セグメントに関するチェックポイント情報５８ａ、５８ｂ・・・５８ｎ内の継続情報７０（図３）など、障害発生セグメントに関する継続情報が、障害発生セグメントから実行を継続できないことを示している場合（ブロック１５４）、ＥＲＰ５２は、障害発生セグメントならびに障害発生セグメントに先行し、その実行が正常に完了したすべてのセグメントに関連する任意のクリーンアップ・ルーチン６０ａ、６０ｂ・・・６０ｎを決定する（ブロック１５６）。その場合、障害が発生した単一セグメントについてクリーンアップ・ルーチン６０ａ、６０ｂ・・・６０ｎを実行すると、障害発生セグメントを再試行することができる可能性がある。特定の状況では、クリーンアップ・ルーチンを実行せずに、障害発生セグメントを通る途中の障害ポイントから障害発生セグメントを再試行できるであろう。少なくとも１つの接続された装置の構成を構成コードの実行前の状態に戻すために、決定されたクリーンアップ・ルーチン６０ａ、６０ｂ・・・６０ｎがセグメント順の逆の順序で実行される（ブロック１５８）。次に、構成の失敗が返される（ブロック１６０）。
【００１６】
障害発生セグメントから構成を継続できることを構成情報７０が示す場合（ブロック１５４）、および障害が発生した構成コードの実行を再試行するためにＥＲＰ５２が試みた回数が再試行限界より大きいことを再試行値３１（図１）が示す場合（ブロック１６２）、制御はブロック１５６に移行し、構成に失敗のプロセスを開始する。図１において共用メモリ２４内の再試行値３１として示されているように、再試行値を不揮発性メモリ内に維持することができる。さもなければ、再試行値３１が再試行限界より小さい場合（ブロック１６２）、再試行値が増分される（ブロック１６４）。障害発生セグメント、すなわち、障害が発生した構成コードを有するセグメントについてクリーンアップ・ルーチン６０ａ、６０ｂ・・・６０ｎが存在する場合（ブロック１６６）、ＥＲＰ５２は、決定されたクリーンアップ・ルーチン６０ａ・・・６０ｎを実行し、システムを障害が検出された構成コードの実行前に存在した状態に戻す（ブロック１６８）。ブロック１６８またはブロック１６６のＮＯ分岐から、障害発生セグメント５４ａ、５４ｂ・・・５４ｎ内の構成コード５６ａ、５６ｂ・・・５６ｎがアクセスされ、実行される（ブロック１７０）。ブロック１７０の構成コードの実行が失敗した場合（ブロック１７２）、制御はブロック１５０に戻る。さもなければ、構成コード５６ａ、５６ｂ・・・５６ｎがブロック１７０で正常に実行された場合、再試行値３１がクリアされ（ブロック１７４）、制御は図５のブロック１０６に移行し、構成を完了するためにセグメント５４ａ、５４ｂ・・・５４ｎ内の構成コードの実行を継続する（ブロック１７６）。
【００１７】
図６の操作では、初期設定コード２８を実行するシステムは、障害から回復することができ、始めから構成を再始動しなければならないことを回避し、構成プロセスの自動回復を可能にするために、障害が発生したポイントから構成コードの実行を試みることができる。
【００１８】
図７および図８は、バス２０、２２、アダプタ２６ａ、２６ｂ・・・２６ｎ、および記憶装置８ａ、８ｂなどの接続された装置を構成するためにマルチクラスタ・システム２（図１）内のクラスタ１２ａ、１２ｂによって実行される操作の一実施形態を示している。クラスタ１２ａ、１２ｂは、その両方がアクセスする記憶装置８ａ、８ｂおよびバス２０、２２などの共用リソースを構成することができる。クラスタ１２ａなどの一方のクラスタは構成中にマスタとして指定することができ、クラスタ１２ｂなどのもう一方のクラスタは非マスタとして指定することができ、クラスタ１２ａ、１２ｂはいずれもマスタとして指定することができる。ある実施形態では、クラスタ１２ａ、１２ｂがいずれも共用メモリ２４にアクセスできない場合、システム２全体に関する構成が失敗する可能性がある。
【００１９】
図７に関しては、マスタ・クラスタ１２ａが構成操作を開始すると（ブロック２００）、マスタ・クラスタ１２ａは、構成コード５６ａの第１のセグメントにアクセスし（ブロック２０２）、アクセスされた構成コード５６ａを実行する（ブロック２０４）。正常に完了すると、マスタ・クラスタ１２ａは、そのセグメントの構成コードを実行するよう、非マスタ・クラスタ１２ｂに通知する、すなわち、メッセージを送る（ブロック２０６）。マスタ・クラスタ１２ａは、実行されたばかりの構成コードに関連する構成データを非マスタ・クラスタ１２ｂにさらに転送することができる。この信号に応答して、非マスタ・クラスタ１２ｂは、マスタ・クラスタ１２ａによって実行されたばかりのセグメント内の構成コードを実行する（ブロック２０８）。正常に完了すると、非マスタ・クラスタ１２ｂは、構成コードの実行が成功または失敗だったことをマスタ・クラスタに通知する（ブロック２１０）。
【００２０】
非マスタ・クラスタ１２ｂからの完了に応答して、マスタ・クラスタ１２ａは、共用メモリ２４内にセグメントの完了を示す（ブロック２１２）。ブロック２１２におけるこの表示は、その構成コードが両方のクラスタ１２ａ、１２ｂによって正常に実行されたセグメント８２に関するセグメント完了情報の一例８０内に完了フラグ８４を設定することを伴う場合もある。この実施形態では、完了の表示は、両方のクラスタ１２ａ、１２ｂがそのセグメントに関する構成コード５６ａ、５６ｂ・・・５６ｎの実行を正常に完了したことを示す。
【００２１】
実行すべき構成コード５６ａ、５６ｂ・・・５６ｎの追加セグメントが存在する場合（ブロック２１４）、そのセグメントに関する構成コードが実行されるセグメント順に従って次のセグメントに関する構成コード５６ｂ・・・５６ｎがアクセスされ（ブロック２１６）、制御はブロック２０４に戻り、次にアクセスされたセグメントに関する構成コード５６ｂ・・・５６ｎを実行する。すべてのセグメントに関する構成コードが両方のクラスタ１２ａ、１２ｂによって正常に実行された後、構成が完了し（ブロック２１８）、成功または失敗した構成操作を除去するために共用メモリ２４が更新される。
【００２２】
図８は、マスタ・クラスタ１２ａまたは非マスタ・クラスタ１２ｂのいずれか一方が図７の操作により構成コードを実行しているときに構成障害が発生する可能性のある場合に、構成コードの実行中に障害を検出したことに応答してマスタ・クラスタ１２ａによって実行されるエラー回復操作の一実施形態を示している。ＥＲＰ５２を実行したことに応答して（ブロック２５０）、マスタ・クラスタ１２ａは、図６のブロック１５２〜１７２の操作を実行し、障害が発生したときに実行されていたセグメントからの構成コードを実行する（ブロック２５２）。障害発生セグメント５４ａ、５４ｂ・・・５４ｎ内の構成コード５６ａ、５６ｂ・・・５６ｎの実行が成功した場合（ブロック２５４）、マスタ・クラスタ１２ａは、障害発生セグメントからの構成コード５６ａ、５６ｂ・・・５６ｎを実行するよう、非マスタ・クラスタ１２ｂに通知する（ブロック２５６）。マスタ・クラスタ１２ａは、図７のブロック２１２に移行して、追加セグメント内の構成コードの実行を継続する（ブロック２６６）。ブロック２５４で構成コードの実行が失敗した場合（再試行限界を超えたために図６のブロック１６０で失敗が返された場合またはブロック１５４で障害発生セグメントから実行を継続できないことを継続情報が示す場合に発生するもの）、マスタ・クラスタ１２ａは、構成に失敗するよう、非マスタ・クラスタ１２ｂに通知する（ブロック２５７）。
【００２３】
マスタ・クラスタ１２ａから障害発生セグメントを実行するための信号を受け取ると、非マスタ・クラスタ１２ｂは、図６のブロック１５２〜１７２の操作を実行し、障害発生セグメント内の構成コードを実行する（ブロック２５８）。障害発生セグメント内の構成コードの実行が成功した場合（ブロック２６０）、非マスタ・クラスタ１２ｂは、そのセグメントの構成コード５６ａ、５６ｂ・・・５６ｎの実行が成功したことをマスタ・クラスタ１２ａに通知する（ブロック２６２）。この信号に応答して、マスタ・クラスタ１２ａは図７のブロック２１２およびそれ以降に移行して、そのセグメントに関する構成コードの実行を継続する。ブロック２６０で非マスタ・クラスタ１２ｂによる構成コードの実行が失敗した場合（再試行限界を超えたために図６のブロック１６０で失敗が返された場合またはブロック１５４で障害発生セグメントから実行を継続できないことを継続情報が示す場合に発生するもの）、非マスタ・クラスタ１２ｂは、マスタ・クラスタ１２ａにその失敗を通知する（ブロック２６４で）。
【００２４】
図７および図８の上述の操作では、マスタ・クラスタ１２ａおよび非マスタ・クラスタ１２ｂはそれぞれ、あるセグメントに関する構成コードを実行し、そのセグメントに関する構成コードのそれぞれの実行を調整する。障害が存在する場合、マスタ・クラスタ１２ａは、障害が発生したセグメント内の構成コードを実行しようと再試行し、障害発生セグメントからの構成コードも実行するよう、非マスタに通知する。さらに、構成操作中にマスタがクラッシュした場合、非マスタはマスタになり、システムＥＲＰの終わりに共用メモリに照会する。上述の操作では、障害が発生した場合、どちらのクラスタも障害が発生したセグメントから始動しようと試みることができる。
【００２５】
追加の実施形態の詳細
上述の操作は、ソフトウェア、ファームウェア、ハードウェア、または任意のそれらの組み合わせを生成するために標準のプログラミングまたはエンジニアリングあるいはその両方の技法を使用する方法、装置、またはプログラム（article of manufacture）として実現することができる。プロセッサが「コンピュータ可読媒体（computerreadable medium）」からコードを読み取って実行できる場合、上述の操作は、コンピュータ可読媒体内に維持されたコードとして実現することができる。コンピュータ可読媒体は、磁気記憶媒体（たとえば、ハード・ディスク・ドライブ、フレキシブル・ディスク、テープなど）、光学記憶装置（ＣＤ−ＲＯＭ、ＤＶＤ、光ディスクなど）、揮発性および不揮発性メモリ・デバイス（たとえば、ＥＥＰＲＯＭ、ＲＯＭ、ＰＲＯＭ、ＲＡＭ、ＤＲＡＭ、ＳＲＡＭ、フラッシュ・メモリ、ファームウェア、プログラマブル・ロジックなど）などの媒体を含むことができる。上述の操作を実現するコードは、ハードウェア・ロジック（たとえば、集積回路チップ、プログラマブル・ゲート・アレイ（ＰＧＡ：ProgrammableGate Array）、特定用途向け集積回路（ＡＳＩＣ：Application Specific Integrated Circuit）など）でさらに実現することができる。さらに、「伝送信号（transmissionsignal）」が空間を伝搬するかまたは光ファイバ、銅線などの伝送媒体を伝搬できる場合、上述の操作を実現するコードは、伝送信号で実現することができる。コードまたはロジックがコード化される伝送信号は、ワイヤレス信号、衛星伝送、電波、赤外線信号、Ｂｌｕｅｔｏｏｔｈなどをさらに含むことができる。伝送信号にコード化されるコードまたはロジックを受信局および送信局または受信装置および送信装置でハードウェアまたはコンピュータ可読媒体にデコードし記憶できる場合、コードまたはロジックがコード化される伝送信号は、送信局によって送信し、受信局によって受信することができる。「プログラム（articleof manufacture）」は、コードを実現できるコンピュータ可読媒体、ハードウェア・ロジック、または伝送信号、あるいはこれらの組み合わせを含む。上述の操作の諸実施形態を実現するコードがコード化される装置は、コンピュータ可読媒体またはハードウェア・ロジックを含むことができる。当然のことながら、当業者であれば、本発明の範囲を逸脱せずにこの構成に対して多くの変更を行うことができ、プログラムが当技術分野で知られている適切な情報伝送媒体を含むことができることを認識するであろう。
【００２６】
「一実施形態（an embodiment）」、「実施形態（embodiment）」、「諸実施形態（embodiments）」、「この実施形態（theembodiment）」、「これらの実施形態（the embodiments）」、「１つまたは複数の実施形態（one or more embodiments）」、「いくつかの実施形態（someembodiments）」、および「ある実施形態（one embodiment）」という用語は、特に明記されていない限り、「本発明（複数も可）の１つまたは複数（だがすべてではない）実施形態」を意味する。
【００２７】
「含む（including）」、「含む（comprising）」、「有する（having）」という用語ならびにその変形は、特に明記されていない限り、「含むがそれに限定されない」ことを意味する。
【００２８】
列挙された項目のリストは、特に明記されていない限り、それらの項目の一部または全部が互いに排他的であることを示すわけではない。
【００２９】
「１つの（a）」、「ある（an）」、および「その（the）」という用語は、特に明記されていない限り、「１つまたは複数」を意味する。
【００３０】
互いに連絡している装置は、特に明記されていない限り、互いに連続的に連絡している必要はない。加えて、互いに連絡している装置は、直接的に、あるいは１つまたは複数の仲介を介して間接的に、通信することができる。
【００３１】
互いに連絡しているいくつかのコンポーネントを含む一実施形態の記述は、このようなコンポーネントがすべて必要であることを示しているわけではない。これに反して、本発明について考えられる種々様々な実施形態を例示するために、色々な任意選択のコンポーネントが記載されている。
【００３２】
さらに、プロセス・ステップ、方法ステップ、アルゴリズムなどは、ある順序で記述することができるが、このようなプロセス、方法、およびアルゴリズムは、代替順序で機能するように構成することもできる。換言すれば、記述可能な任意の順番または順序のステップは必ずしも、それらのステップがその順序で実行されるという要件を示すわけではない。本明細書に記載されているプロセスのステップは、実用的な任意の順序で実行することができる。さらに、いくつかのステップは同時に実行することができる。
【００３３】
単一の装置またはプログラム（article）が本明細書に記載されている場合、単一の装置／プログラムの代わりに２つ以上の装置／プログラム（それらが協働するかどうかは問わない）を使用できることは容易に明らかであろう。同様に、２つ以上の装置またはプログラム（それらが協働するかどうかは問わない）が本明細書に記載されている場合、２つ以上の装置またはプログラムの代わりに単一の装置／プログラムを使用できるか、あるいは示されている数の装置またはプログラムの代わりに異なる数の装置／プログラムを使用できることは容易に明らかであろう。ある装置の機能または特徴あるいはその両方は、その代わりに、このような機能／特徴を有するものとして明示的に記載されていない１つまたは複数の他の装置によって具体化することができる。したがって、本発明のその他の諸実施形態はその装置そのものを含む必要はない。
【００３４】
図５、図６、図７、および図８に例示されている操作は、特定の順序で発生する特定のイベントを示している。代替諸実施形態では、特定の操作を異なる順序で実行するか、変更するか、または除去することもできる。その上、上述のロジックにステップを追加することができ、そのステップが依然として上述の諸実施形態に適合することができる。さらに、本明細書に記載されている操作は順次実行できるかまたは特定の複数の操作を並行して処理することができる。さらに、操作は単一の処理装置によって実行するかまたは複数の分散処理装置によって実行することができる。
【００３５】
本発明の様々な諸実施形態に関する上記の記述は、例示および説明のために提示されたものである。網羅することまたは開示された正確な形式に本発明を限定することは意図されていない。上記の教示を考慮すると、多くの変更および変形が可能である。本発明の範囲は、この詳細な説明ではなく、むしろ特許請求の範囲によって制限されることが意図されている。上記の仕様、例、およびデータは、本発明の構成の製造および使用に関する完全な説明を提供するものである。本発明の精神および範囲を逸脱せずに本発明の多くの実施形態を作成できるので、本発明は特許請求の範囲に存在する。
【図面の簡単な説明】
【００３６】
【図１】コンピューティング環境の一実施形態を示す図である。
【図２】初期設定コード内のコンポーネントを示す図である。
【図３】チェックポイント情報の一実施形態を示す図である。
【図４】セグメント完了情報の一実施形態を示す図である。
【図５】構成コードを実行するための操作の一実施形態を示す図である。
【図６】構成コードの実行中の障害から回復するためのエラー回復手順のための操作の一実施形態を示す図である。
【図７】複式クラスタ環境で構成コードを実行するための操作の一実施形態を示す図である。
【図８】複式クラスタ環境で構成コードの実行中の障害から回復するためのエラー回復手順のための操作の一実施形態を示す図である。
【符号の説明】
【００３７】
２：システム
４ａ、４ｂ・・・４ｎ：ホスト
６：ネットワーク
８ａ、８ｂ：記憶装置
１０ａ、１０ｂ：ボリューム
１２ａ、１２ｂ：クラスタ
１４ａ、１４ｂ：プロセッサ複合体
１６ａ、１６ｂ：キャッシュ
１８ａ、１８ｂ：入出力管理機能
２０、２２：バス
２４：共用メモリ
２６ａ、２６ｂ・・・２６ｎ：アダプタ
２８ａ、２８ｂ：初期設定コード
３０：セグメント完了情報
３１：再試行値
【図１】
2007149085.tif 000003
【図２】
2007149085.tif 000004
【図３】
2007149085.tif 000005
【図４】
2007149085.tif 000006
【図５】
2007149085.tif 000007
【図６】
2007149085.tif 000008
【図７】
2007149085.tif 000009
【図８】
2007149085.tif 000010