(57)【要約】  ストレージ装置は、１以上のボリュームと、ノード内通信路で相互接続された複数の制御パッケージから成るノードを複数有し、ノード間の制御パッケージは、ノード内通信路よりも伝送路容量の低いノード間通信路で相互接続された構成をとる。ホスト計算機がボリュームにアクセスする際、複数の制御パッケージのうち少なくとも２以上の制御パッケージのいずれを介してもアクセス可能に構成されており、また各制御パッケージには、当該ボリュームに対してアクセス要求を発行する際の優先度が定められている。  ストレージ装置は障害を検知した時、障害発生部位に応じて、制御パッケージに定められている優先度を変更し、ホスト計算機に通知する。ホスト計算機は通知された優先度に基づいて、アクセス要求の発行先となる制御パッケージを決定する。
2016013116.tif 000002
【特許請求の範囲】
【請求項１】
ホスト計算機からの要求を処理するための複数の制御ノードと、１以上のボリュームを有するストレージ装置において、
前記複数の制御ノードのそれぞれは、プロセッサ、メモリ、ホスト計算機からのアクセスを受け付けるポート、とを有する制御パッケージを複数有し、
前記ノード内の各制御パッケージ同士は、第１の通信路を介して相互接続され、
前記制御パッケージは、前記制御パッケージの属する前記ノードと異なるノードが有する制御パッケージと、前記第１の通信路よりも性能が低い第２の通信路を介して相互接続され、
前記ホスト計算機から前記ボリュームには、前記複数の制御パッケージのうち少なくとも２以上の制御パッケージのいずれを介してもアクセス可能であって、前記少なくとも２以上の制御パッケージの各々には、前記ホスト計算機から前記ボリュームに対してアクセス要求を発行する際の優先度が定められており、
前記ストレージ装置は障害を検知した時、障害発生部位に応じて前記制御パッケージに定められている前記優先度を変更し、前記変更された優先度を前記ホスト計算機に通知する、
ことを特徴とする、ストレージ装置。
【請求項２】
前記１以上のボリュームの各々について、オーナである前記制御パッケージが定められており、前記オーナである前記制御パッケージは、前記ホスト計算機から到来する前記ボリュームに対するＩ／Ｏ要求を処理するよう構成されており、
前記ストレージ装置は障害を検知した時、障害発生部位に応じて、前記ボリュームのオーナとなる前記制御パッケージを変更し、前記ボリュームのオーナとなる前記制御パッケージの前記優先度を最も高い優先度に変更し、前記変更された優先度を前記ホスト計算機に通知する、
ことを特徴とする、請求項１に記載のストレージ装置。
【請求項３】
前記ボリュームのオーナとなる前記制御パッケージの障害を検知した場合と、前記ボリュームのオーナとなる前記制御パッケージと前記ホスト計算機との間のアクセス経路の障害を検知した場合とで、それぞれ異なる制御パッケージを前記ボリュームのオーナに変更する、
ことを特徴とする、請求項２に記載のストレージ装置。
【請求項４】
前記ボリュームのオーナとなる前記制御パッケージに障害が発生したことを検知した場合、
前記障害が発生した前記制御パッケージの属する前記ノードに、複数の正常な前記制御パッケージが存在しないときは、前記障害が発生した前記制御パッケージの属する前記ノードと異なるノードが有する前記制御パッケージを、前記ボリュームのオーナにする、
ことを特徴とする、請求項３に記載のストレージ装置。
【請求項５】
前記ボリュームのオーナとなる前記制御パッケージと前記ホスト計算機との間のアクセス経路に障害が発生したことを検知した場合、
前記障害が発生した前記制御パッケージの属する前記ノードと同一のノードが有する前記制御パッケージを、前記ボリュームのオーナにする、
ことを特徴とする、請求項３に記載のストレージ装置。
【請求項６】
前記ボリュームのオーナでない前記制御パッケージが、前記ホスト計算機からの前記ボリュームに対するアクセス要求を所定の閾値以上受信した時、
前記ボリュームのオーナとなる前記制御パッケージと前記ホスト計算機との間のアクセス経路に障害が発生したと判断する、
ことを特徴とする、請求項５に記載のストレージ装置。
【請求項７】
前記ストレージ装置は、前記ボリュームのオーナとなる前記制御パッケージの前記優先度を最も高く定め、前記ボリュームのオーナとなる前記制御パッケージと同一ノードに属する制御パッケージの前記優先度を２番目に高く定め、前記ボリュームのオーナとなる前記制御パッケージと異なるノードに属する制御パッケージの前記優先度を３番目に高く定めており、
前記ストレージ装置は、前記ボリュームのオーナとなる前記制御パッケージの属するノードの全ての前記制御パッケージがアクセス要求を受け付けられない場合、前記３番目に優先度の高い前記制御パッケージが、前記ホスト計算機からの前記ボリュームに対するアクセス要求を受け付け、
前記３番目に優先度の高い前記制御パッケージは、前記第２の通信路を介して、前記アクセス要求を前記ボリュームのオーナとなる前記制御パッケージに転送する、
ことを特徴とする、請求項２に記載のストレージ装置。
【請求項８】
前記制御パッケージ内の前記メモリの一部の領域は、前記ボリュームのデータをキャッシュするためのキャッシュ領域として構成されており、
前記ホスト計算機から前記ボリュームに対するライト要求を受信した時、前記ボリュームのオーナである、第１の前記制御パッケージが、前記第１の制御パッケージ内のキャッシュ領域にライトデータを格納するとともに、前記ボリュームに対するライトデータの複製を格納する役割を有する準オーナであると定められている第２の前記制御パッケージに、前記ライトデータを前記第２の制御パッケージ内の前記キャッシュ領域に格納させる、
ことを特徴とする、請求項２に記載のストレージ装置。
【請求項９】
前記ストレージ装置は、前記ボリュームのオーナとなる前記制御パッケージに障害が発生したことを検知した場合、
前記障害が発生した前記制御パッケージの属する前記ノードに、複数の正常な前記制御パッケージが存在しないときは、前記障害が発生した前記制御パッケージの属する前記ノードと異なるノードが有する前記制御パッケージを、前記ボリュームのオーナにし、
前記ボリュームの準オーナと定められている前記第２の制御パッケージ内の前記キャッシュ領域に格納されているダーティデータを、前記ボリュームを構成する記憶デバイスにデステージする、
ことを特徴とする、請求項８に記載のストレージ装置。
【請求項１０】
前記ストレージ装置は、前記ボリュームのオーナでない前記制御パッケージが、前記ホスト計算機からの前記ボリュームに対するアクセス要求を所定の閾値以上受信した時、
前記ボリュームのオーナでない前記制御パッケージを、前記ボリュームのオーナに変更し、
前記ボリュームのオーナでない前記制御パッケージの属する前記ノードと同一のノードが有する前記制御パッケージを、前記ボリュームの準オーナに変更し、
前記変更の結果、前記ボリュームのオーナであった前記制御パッケージが、前記ボリュームのオーナでも準オーナでもなくなった場合には、前記ボリュームのオーナであった前記制御パッケージ内の前記キャッシュ領域に格納されているダーティデータを、前記ボリュームを構成する記憶デバイスにデステージする、
ことを特徴とする、請求項８に記載のストレージ装置。
【請求項１１】
前記ストレージ装置は、前記ボリュームのオーナとなる前記制御パッケージに障害が発生したことを検知した場合、
前記障害が発生した前記制御パッケージの属する前記ノードに、複数の正常な前記制御パッケージが存在しないときは、前記障害が発生した前記制御パッケージの属する前記ノードと異なるノードが有する前記制御パッケージを、前記ボリュームのオーナにし、
前記ボリュームの準オーナであった前記制御パッケージ内の前記キャッシュ領域に格納されているダーティデータを、前記ボリュームのオーナにされた前記制御パッケージ内の前記キャッシュ領域にコピーする、
ことを特徴とする、請求項８に記載のストレージ装置。
【請求項１２】
前記ストレージ装置は、前記ボリュームのオーナでない前記制御パッケージが、前記ホスト計算機からの前記ボリュームに対するアクセス要求を所定の閾値以上受信した時、
前記ボリュームのオーナでない前記制御パッケージを、前記ボリュームのオーナに変更し、
前記ボリュームのオーナに変更された前記制御パッケージの属する前記ノードと同一のノードが有する前記制御パッケージを、前記ボリュームの準オーナに変更し、
前記変更の結果、前記ボリュームのオーナであった前記制御パッケージが、前記ボリュームの準オーナに変更された場合には、前記ボリュームのオーナであった前記制御パッケージ内の前記ボリュームに対応するデータのうち、クリーンデータを、前記ボリュームのオーナに変更された前記制御パッケージ内の前記キャッシュ領域にコピーし、
前記変更の結果、前記ボリュームのオーナであった前記制御パッケージが、前記ボリュームのオーナでも準オーナでもなくなった場合には、前記ボリュームのオーナであった前記制御パッケージ内の前記ボリュームに対応するデータを全て、前記ボリュームのオーナに変更された前記制御パッケージ内の前記キャッシュ領域にコピーする、
ことを特徴とする、請求項８に記載のストレージ装置。
【請求項１３】
ホスト計算機と、前記ホスト計算機からの要求を処理する複数の制御ノードと１以上のボリュームを有するストレージ装置とを有する計算機システムにおいて、
前記複数の制御ノードのそれぞれは、プロセッサ、メモリ、前記ホスト計算機からのアクセスを受け付けるポート、とを有する制御パッケージを複数有し、
前記ノード内の各制御パッケージ同士は、第１の通信路を介して相互接続され、
前記制御パッケージは、前記制御パッケージの属する前記ノードと異なるノードが有する各制御パッケージと、前記第１の通信路よりも伝送路容量が低い第２の通信路を介して相互接続され、
前記ホスト計算機から前記ボリュームには、前記複数の制御パッケージのうち少なくとも２以上の制御パッケージのいずれを介してもアクセス可能であって、前記少なくとも２以上の制御パッケージの各々には、前記ホスト計算機から前記ボリュームに対してアクセス要求を発行する際の優先度が定められており、
前記ストレージ装置は障害を検知した時、障害発生部位に応じて前記制御パッケージに定められている前記優先度を変更し、前記変更された優先度を前記ホスト計算機に通知し、
前記前記ホスト計算機は、前記ストレージ装置から通知された前記優先度に基づいて、前記ボリュームに対するアクセス要求の発行先である前記制御パッケージを選択する、
ことを特徴とする、計算機システム。
【請求項１４】
前記ホスト計算機は、前記優先度の最も高い前記制御パッケージに対して、前記ボリュームに対するアクセス要求を発行する、
ことを特徴とする、請求項１３に記載の計算機システム。
【請求項１５】
前記ストレージ装置では、前記１以上のボリュームの各々について、オーナである前記制御パッケージが定められており、前記オーナである前記制御パッケージは、前記ホスト計算機から到来する前記ボリュームに対するＩ／Ｏ要求を処理するよう構成されており、
前記ストレージ装置は、前記ボリュームのオーナとなる前記制御パッケージの前記優先度を最も高く定め、前記ボリュームのオーナとなる前記制御パッケージと同一ノードに属する少なくとも１以上の制御パッケージの前記優先度を、２番目に高く定めており、
前記ホスト計算機は、前記優先度の最も高い前記制御パッケージに対して、前記ボリュームに対するアクセス要求を発行できない場合、前記２番目に優先度の高い前記制御パッケージに対して、前記ボリュームに対するアクセス要求を発行する、
ことを特徴とする、請求項１４に記載の計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置の障害時における制御技術に関する。
【背景技術】
【０００２】
重要なデータを扱う計算機システムでは、構成要素の障害に起因するシステム停止やデータ消失を防ぐために、多くの構成要素を二重化した、いわゆる冗長構成が用いられる。ストレージ装置内の構成要素、及びホスト計算機とストレージ装置のボリュームとの間の経路（アクセスパス）も例外ではない。多くの場合、ストレージ装置のコントローラは二重化され、またホスト計算機とストレージ装置のボリュームを接続するアクセスパスは二重化された構成を採る。これにより、コントローラに障害が発生した場合、あるいはアクセスパスが断線するなどの障害が発生した場合でも、業務継続が可能である。【０００３】
一般に、コントローラが二重化されたストレージ装置において、ホスト計算機がいずれのコントローラに対してアクセス要求を発行しても、アクセス性能が同一というケースは少ない。たとえばコントローラＡ、コントローラＢの２つのコントローラを搭載するストレージ装置において、あるボリュームへのアクセス要求をコントローラＡに発行した場合のアクセス性能が、アクセス要求をコントローラＢに発行した場合のアクセス性能よりも低いことがある。つまりホスト計算機のアクセスパスの選択によって、性能が異なることがある。【０００４】
そのため、アクセスパスの優先度をストレージ装置からホストに通知する機能（ＡＬＵＡ（Ａｓｙｍｍｅｔｒｉｃ  Ｌｏｇｉｃａｌ  Ｕｎｉｔ  Ａｃｃｅｓｓ））が知られている（特許文献１）。特許文献１には、ストレージ装置からアクセスパスの優先度に関する情報を受信したホストは、優先パスを用いたストレージ装置へのアクセスを実行し、障害が発生して優先パスが使用できないときには、ホストは非優先パスを用いたストレージ装置へのアクセスを実行する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許出願公開第２０１２／０２５４６５７号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
近年では、高可用性の確保のため、そして高性能化のため、２よりも多くのコントローラを搭載したストレージ装置が普及している。ただし先に述べたとおり、アクセスパスの選択によってアクセス性能が異なることがあり、障害発生時の適切なアクセス経路の切り替え先は、障害発生部位によって異なり得る。特許文献１に開示の技術では、二重化コントローラ構成でのアクセス経路切り替えしか考慮がなく、多重化コントローラ構成時にアクセス経路の適切な選択を行うことはできない。【０００７】
また、ホストからストレージ装置に至る経路の障害などは、ストレージ装置では検出不可能であるため、その場合に適切なアクセス切り替え先をホストに通知する方法は知られていない。
【課題を解決するための手段】
【０００８】
本発明の一実施形態に係るストレージ装置は、ノード内通信路で相互接続された複数の制御パッケージから成るノードを複数有し、ノード間の制御パッケージは、ノード内通信路よりもデータ転送速度の低いノード間通信路で相互接続された構成をとる。ストレージ装置は障害を検知した時、障害発生部位に応じて、制御パッケージに定められている優先度を変更し、ホスト計算機に通知する。ホスト計算機は通知された優先度に基づいて、適切なアクセス要求の発行先となる制御パッケージを決定する。
【発明の効果】
【０００９】
本発明のストレージ装置は、障害が発生した場合であっても、ホスト計算機が適切な交替パスを使ってストレージ装置にアクセスすることを可能にする。
【図面の簡単な説明】
【００１０】
【図１】実施例１に係る計算機システムで行われる処理の概要を表した図である。
【図２】実施例１に係る計算機システムで行われる処理の概要を表した図である。
【図３】実施例に係る計算機システムとストレージシステムの構成図である。
【図４】ストレージ装置のメモリに格納される、各種情報やプログラムの内容を表した図である。
【図５】クラスタ構成管理情報の例を表した図である。
【図６】ボリューム管理情報の例を表した図である。
【図７】キャッシュ管理情報の例を表した図である。
【図８】ストレージ装置内でのデータの流れの概要を表した図である。
【図９】ポート管理情報の例を表した図である。
【図１０】実施例１に係る計算機システムで行われる処理の概要を表した図である。
【図１１】実施例１に係るボリュームＩ／Ｏプログラムの処理フロー（１）である。
【図１２】実施例１に係るボリュームＩ／Ｏプログラムの処理フロー（２）である。
【図１３】実施例１に係るボリュームＩ／Ｏプログラムの処理フロー（３）である。
【図１４】実施例１に係る優先パス通知プログラムの処理フローである。
【図１５】ＲＥＰＯＲＴ  ＴＡＲＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳに対する返信用情報のフォーマットの一例である。
【図１６】ＲＥＰＯＲＴ  ＴＡＲＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳに対する返信用情報のフォーマットの一例である。
【図１７】障害対処プログラムの処理フローである。
【図１８】オーナ変更プログラムの処理フローである。
【図１９】実施例１に係るストレージ装置における、オーナ変更対象ボリュームのキャッシュデータに対して行うべき処理の内容を表した図である。
【図２０】実施例２に係る計算機システムで行われる処理の概要を表した図である。
【図２１】実施例２に係るボリュームＩ／Ｏプログラムの処理フロー（１）である。
【図２２】実施例２に係るボリュームＩ／Ｏプログラムの処理フロー（２）である。
【図２３】実施例２に係るボリュームＩ／Ｏプログラムの処理フロー（３）である。
【図２４】実施例３に係るストレージ装置における、オーナ変更対象ボリュームのキャッシュデータに対して行うべき処理の内容を表した図である。
【発明を実施するための形態】
【００１１】
以下、図面を参照して、実施形態に係るストレージ装置について説明する。なお、本発明は、以下に説明する実施形態に限定されるものではない。
【００１２】
また以下で説明される各要素のうち、同種の要素には、同一の参照番号にｓｕｆｆｉｘ（ａ、ｂ等）を付した参照符号を付している。そして同種の要素を特に区別しないで説明する場合、参照番号のみを用いて説明し、同種の要素を区別して説明する場合には、参照番号とｓｕｆｆｉｘの組み合わせを用いて説明している。
【実施例１】
【００１３】
実施例１の概要を、図１を用いて説明する。図１は実施例１に係る計算機システムの概略構成と、Ｉ／Ｏ要求処理時のデータの流れを表している。実施例１に係るストレージ装置１００は、複数の制御パッケージ１１０を有する制御ノード（ノードと略記されることもある）１３０を複数備えている。図１の構成例の場合、ノード１３０ｐは制御パッケージ１１０ａ及び１１０ｂを、ノード１３０ｐは制御パッケージ１１０ｃ及び１１０ｄを有する。制御パッケージ１１０はプロセッサ（ＭＰ）やメモリを有したパッケージボードで、ホスト計算機３００からのＩ／Ｏ要求の処理や、ストレージ装置１００に搭載された複数のドライブ（非図示）へのＩ／Ｏ処理の制御を行う。また、ストレージ装置１００は複数のドライブから１以上の論理ボリュームを構成し、ホスト計算機３００に提供する機能を有する。【００１４】
実施例１に係るストレージ装置１００では、論理ボリュームに対するＩ／Ｏ要求の処理を担当する制御パッケージ１１０（オーナ）が論理ボリューム毎に定められている。図１では、制御パッケージ１１０ａが論理ボリューム１２２ｘのオーナである例が示されている。【００１５】
各制御パッケージ１１０はそれぞれ、キャッシュ領域１３４を有し、ホスト計算機３００からのライトデータや、ドライブから読み出されたデータを一時格納するために用いられる。ストレージ装置１００はキャッシュ領域１３４をいわゆるライトバックキャッシュとして用いるため、ライトデータがキャッシュ領域１３４に格納された時点で、ホスト計算機３００に対してライト処理が完了した旨が通知される。制御パッケージ１１０等に障害が発生した時にライトデータが消失することを防ぐために、制御パッケージ１１０ａはホスト計算機３００からライト要求及びライトデータを受信すると、２つの制御パッケージ１１０のキャッシュ領域１３４（図１の例では制御パッケージ１１０ａのキャッシュ領域１３４ａと、制御パッケージ１１０ｂのキャッシュ領域１３４ｂ）にライトデータを格納する。なお、実施例において、ライトデータの複製がキャッシュ領域１３４に格納される制御パッケージ１１０のことを「準オーナ」と呼ぶ。【００１６】
２つのキャッシュ領域１３４にライトデータを格納する際、制御パッケージ間を接続する通信路を介した通信が行われる。各ノード内の各制御パッケージ１１０は、ノード内通信路を介して互いに通信可能に接続されている。また異なるノードに属する各制御パッケージ１１０はノード間通信路を介して相互に通信可能に接続されているが、ノード間通信路はノード内通信路に比べて性能が低い（伝送路容量が小さい、あるいはアクセス遅延が大きい）。そのため、論理ボリューム１２２ｘに対するライトデータを２つのキャッシュ領域１３４に格納する際、原則として、論理ボリューム１２２ｘのオーナである制御パッケージ１１０ａのキャッシュ領域１３４ａと、制御パッケージ１１０ａの属するノード１３０ｐ内の制御パッケージ１１０ｂが有するキャッシュ領域１３４ｂに格納する。【００１７】
実施例１に係るストレージ装置１００は、ＳＣＳＩの仕様で規格化されているＡＬＵＡ（Ａｓｙｍｍｅｔｒｉｃ  Ｌｏｇｉｃａｌ  Ｕｎｉｔ  Ａｃｃｅｓｓ）と呼ばれる規約を採用している。ホスト計算機３００は、各論理ボリュームに対するポートの状態（優先度）をストレージ装置１００から取得し、ポート状態がＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄであるポートを有する制御パッケージ１１０に対してアクセス要求を発行するように動作する。一方ストレージ装置１００は、ホスト計算機３００からある論理ボリュームに対するポート状態の取得要求（コマンド）を受信すると、当該論理ボリュームのオーナである制御パッケージ１１０のポートの状態がＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄである旨を返送し、当該論理ボリュームのオーナである制御パッケージ１１０のポートの状態がＡｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄである旨を返送する。図１の例では制御パッケージ１１０ａのポート状態がＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄで、制御パッケージ１１０ｂのポート状態が／ｎｏｎ−ｏｐｔｉｍｉｚｅｄである旨が返送される。また、ポート状態がＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄまたはＡｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄでない制御パッケージ（１１０ｃ、１１０ｄ）のポート状態については、Ｓｔａｎｄｂｙである旨が返送される。これにより、ホスト計算機３００が論理ボリュームにアクセスする際、オーナである制御パッケージ１００に対してアクセス要求を発行することができる。【００１８】
ホスト計算機３００からストレージ装置１００の制御パッケージ１１０ａに至る経路（アクセスパス）が障害などの要因で遮断されたことにより、ホスト計算機３００から制御パッケージ１１０ａにアクセスできなくなった場合、ホスト計算機３００はポート状態がＡｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄであるポートを有する制御パッケージ１１０ｂに対してアクセス要求（たとえばリード要求）を発行する。この場合、ストレージ装置１００では、制御パッケージ１１０ｂによって受信されたリード要求を制御パッケージ１１０ｂから制御パッケージ１１０ａへと転送し、処理は制御パッケージ１１０ａで行われる。処理結果は制御パッケージ１１０ａから制御パッケージ１１０ｂへと転送され、制御パッケージ１１０ｂがホスト計算機３００に対して処理結果を返送する。制御パッケージ１１０間での通信が多発するとアクセス性能が低下するため、ストレージ装置１００では論理ボリューム１２２ｘのオーナを制御パッケージ１１０ａから制御パッケージ１１０ｂに移す処理が行われる。そしてストレージ装置１００からホスト計算機３００には、制御パッケージ１１０ａのポートの状態がＡｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄに変更され、制御パッケージ１１０ｂのポートの状態がＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄに変更されたことが通知される。【００１９】
また、制御パッケージ１１０ａに障害が発生し、制御パッケージ１１０ａが停止した場合の例を図２に示す。この場合は、アクセスパスが遮断された場合と異なり、ストレージ装置１００は論理ボリューム１２２ｘのオーナを制御パッケージ１１０ａから、ノード１３０ｑ内の制御パッケージ１１０ｃ（あるいは１１０ｄ）に移す。制御パッケージ１１０ａが停止した場合には、キャッシュ領域１３４ａにライトデータの複製を格納することができないため、論理ボリューム１２２ｘのオーナを制御パッケージ１１０ｂに移動すると、制御パッケージ１１０ｂはライトデータをキャッシュ領域１３４ｂ以外に、ノード１３０ｐ以外のノード（ノード１３０ｑ）内の制御パッケージ１１０（１１０ｃまたは１１０ｄ）に転送しなければならず、アクセス性能が低下するためである。【００２０】
そしてストレージ装置１００からホスト計算機３００には、制御パッケージ１１０ａのポートの状態がＯｆｆｌｉｎｅに変更され、制御パッケージ１１０ｂのポートの状態がＳｔａｎｄｂｙに変更され、制御パッケージ１１０ｃのポートの状態がＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄに変更され、制御パッケージ１１０ｄのポートの状態がＡｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄに変更されたことが通知される。状態がＳｔａｎｄｂｙまたはＯｆｆｌｉｎｅに設定されているポートに対しては、ホスト計算機３００はアクセス要求を発行しない。ホスト計算機３００はポートの状態が変更されたことを検知すると、それ以降はポート状態がＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄであるポート（制御パッケージ１１０ｃのポート）へとアクセス要求を発行する。【００２１】
このように、実施例１に係るストレージ装置１００では、計算機システムの障害発生箇所に応じて、論理ボリュームのオーナを適切に変更し、かつホスト計算機に適切なアクセス先の制御パッケージの情報（新たに論理ボリュームのオーナになった制御パッケージのポート）が通知される。そのため、論理ボリュームへのアクセス性能がオーナ変更前に比べて低下することを防ぐことができる。本実施例は特に、オンライントランザクション処理など、性能要件の厳しい用途に好適である。【００２２】
以下、実施例１に係る計算機システムの各構成要素や動作について説明する。図３は、実施例１に係る計算機システムの構成を示す。計算機システムは、ストレージ装置１００、ホスト計算機３００（以下、「ホスト３００」と略記することもある）が、スイッチ２００ａ、２００ｂを介して結合された構成をとる。【００２３】
ストレージ装置１００は、複数の制御パッケージ１１０が内部スイッチ１１６で相互接続されて構成されるストレージコントローラ１０５と、バックエンドネットワーク１２５を介して制御パッケージ１１０に接続された複数のドライブ１２１から構成される。ドライブ１２１は、ホスト計算機３００からのライトデータを格納する記憶デバイスで、一例としてＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）が用いられる。ただし、ＨＤＤ以外の記憶デバイス、例えばＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）が用いられてもよい。【００２４】
なお図３では、制御パッケージ１１０として、４つの制御パッケージ１１０ａ、１１０ｂ、１１０ｃ、１１０ｄが記載されているが、制御パッケージの数は必ずしも４台に限定されない。また図３では、ドライブ１２１ａ、１２１ｂ、１２１ｃ、１２１ｄの、４台のドライブ１２１が記載されているが、ドライブの台数も４台に限定されない。また、内部スイッチ１１６も冗長化されていても良い。【００２５】
制御パッケージ１１０は、ホスト３００からのＩ／Ｏ要求を処理し、ドライブ１２１に対するデータアクセスを行うコンポーネントである。制御パッケージ１１０は、プロセッサ１１１（図では「ＭＰ」と記載）、メモリ１１２、チャネル制御部１１３、ドライブ制御部１１４、通信制御部１１５から構成される。【００２６】
チャネル制御部１１３は、ストレージ装置１００をホスト３００と接続するためのインタフェースを備えたコンポーネントで、ホスト３００からのＩ／Ｏ要求（コマンド）やライトデータの中継を行う。チャネル制御部１１３は、スイッチ２００やホスト３００に接続するためのポートを１以上有する。インタフェースには、一例としてファイバチャネルインタフェースが用いられる。なお、特に断りのない限り、各チャネル制御部１１３は、１つのポートのみを有する構成例について説明する。ただしチャネル制御部１１３が複数のポートを有する場合でも、本実施例は有効である。【００２７】
ドライブ制御部１１４は、制御パッケージ１１０をドライブ１２１と接続するためのコンポーネントで、ドライブ１２１に送信されるＩ／Ｏ要求やデータの中継を行う。ドライブ制御部１１４は、ドライブ１２１またはバックエンドネットワーク１２５に接続するためのバックエンドインタフェースを１以上有する。ドライブ制御部１１４とドライブ１２１またはバックエンドネットワーク１２５を接続するためのインタフェースには、一例としてＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）が用いられる。【００２８】
ＭＰ１１１は、ストレージ装置１００内の各種処理を実行するコンポーネントである。たとえば、ホスト３００から受信したコマンドを解釈してドライブ１２１に対するデータ書き込み、あるいはデータ読み込みを実施する。【００２９】
メモリ１１２は、ＭＰ１１１が実行するプログラム、あるいはＭＰ１１１が使用する管理情報等を格納するために用いられる。さらにメモリ１１２は、ホスト３００から到来するライトデータやドライブ１２１から読み出されたデータを一時格納するための、いわゆるディスクキャッシュとしても用いられる。以下では、メモリ１１２内の領域のうち、ディスクキャッシュとして用いられる領域のことを、「キャッシュ領域」と呼ぶ。【００３０】
バックエンドネットワーク１２５は、たとえばドライブ１２１とドライブ制御部１１４で用いられるインタフェースがＳＡＳである場合、ＳＡＳリンクとＳＡＳエクスパンダで構成されるネットワークである。各制御パッケージ１１０のドライブ制御部１１４とドライブ１２１がバックエンドネットワーク１２５に接続されることにより、各制御パッケージ１１０は、全てのドライブ１２１に対してアクセス可能に構成される。【００３１】
通信制御部１１５は、制御パッケージ１１０間の通信を行うためのコンポーネントである。実施例１に係るストレージ装置１００は、制御パッケージ１１０間の通信用の通信路として２種類の通信路を有している。そして通信制御部１１５は、この２種類の通信路に接続されている。尚、通信制御部１１５を接続する2種の通信経路はそれぞれ冗長化しても良い。【００３２】
１つ目の通信路は、内部スイッチ１１６を介さずに制御パッケージ１１０の通信制御部１１５同士を接続する通信路で、この通信路は「ノード内通信路」と呼ばれる。またノード内通信路を用いた通信のことは「ノード内通信」と呼ばれる。図３において、通信制御部１１５ａと通信制御部１１５ｂとを直接接続している線、及び通信制御部１１５ｃと通信制御部１１５ｄとを直接接続している線が、ノード内通信路を表している。【００３３】
実施例１に係るストレージ装置１００において、ノード内通信路を介して接続される制御パッケージ１１０の集合、つまりノード内通信により相互通信可能な制御パッケージ１１０の集合は、「ノード」と呼ばれる。図３の構成例の場合、制御パッケージ１１０ａと制御パッケージ１１０ｂのセットが、１つのノードである。同様に制御パッケージ１１０ｃと制御パッケージ１１０ｄのセットも、１つのノードである。ただし、ノードを構成する制御パッケージ１１０の数は２に限定されない。１つのノードに３以上の制御パッケージ１１０が含まれていてもよい。またノードの数も２に限定されるわけではなく、ストレージ装置１００内に３以上のノードが含まれていて良い。【００３４】
また、以下では、ある制御パッケージ１１０に着目した時、当該制御パッケージ以外の制御パッケージのうち、当該制御パッケージと同一ノードに属する制御パッケージのことは、「隣接パッケージ」と呼ばれる。たとえば図３の構成例において、制御パッケージ１１０ｂは、制御パッケージ１１０ａの隣接パッケージと呼ばれる。逆に制御パッケージ１１０ａは、制御パッケージ１１０ｂの隣接パッケージであるともいえる。【００３５】
２つ目の通信路は、内部スイッチ１１６を介して制御パッケージ１１０同士を接続する通信路で、この通信路は「ノード間通信路」と呼ばれる。またノード間通信路を用いた通信のことは「ノード間通信」と呼ばれる。通信制御部１１５は、ノード内通信路とノード間通信路という２種類の通信路に接続するためのインタフェースを、それぞれ少なくとも１つ以上有している。【００３６】
ノード内通信路は、ノード間通信路よりも性能が良いという関係にある。なお、本実施例において、通信路の「性能が良い」とは、たとえば伝送路容量（データ転送速度）が大きい、及び／またはアクセス遅延時間が短い、ことを意味する。たとえばノード内通信路の単位時間当たりのデータ伝送量がＡ（ＭＢ／ｓｅｃ）の場合、ノード間通信路の単位時間当たりのデータ伝送量はＢ（ＭＢ／ｓｅｃ）（ただしＡ＞Ｂの関係にある）である。またノード内通信路は通信制御部同士を直接接続するものだが、ノード間通信路は内部スイッチ１１６を経由する通信路であるため、ノード内通信路に比べてノード間通信路のアクセス遅延時間は長くなる。ただし、ノード内通信路は伝送路長が短い等の実装上の制約があるため、ストレージ装置１００内の全ての制御パッケージ１１０を同一のノード内通信路に接続することは困難である。そのため実施例１に係るストレージ装置１００では、ノード内通信路は、一部の制御パッケージ１１０同士（具体的には、同一ノード内の制御パッケージ１１０同士）の接続にのみ使用され、全制御パッケージ１１０を接続するためにはノード間通信路が用いられている。【００３７】
異なるノードに属する制御パッケージ１１０間で通信が行われる場合には、ノード間通信が用いられる。一方、同一ノードに属する制御パッケージ１１０間で通信が行われる場合には、ノード間通信とノード内通信の両方が使用可能である。ただし、ノード内通信路の方が、伝送路容量が大きい（性能が高い）ため、同一ノードに属する制御パッケージ１１０間で通信が行われる場合には、ノード内通信が用いられる。【００３８】
続いてホスト計算機３００の構成について説明する。ホスト計算機は少なくとも、プロセッサ（ＭＰ）３０１、メモリ３０２、複数のＨＢＡ（Ｈｏｓｔ  Ｂｕｓ  Ａｄａｐｔｅｒ）３０３（３０３ａ、３０３ｂ）を備えている。ＭＰ３０１は、メモリ３０２に格納されたプログラムを実行する。ＨＢＡ３０３は、スイッチ２００を介してホスト計算機３００をストレージ装置１００に接続するためのインタフェースである。【００３９】
実施例１に係る計算機システムでは、計算機システム内の１つの構成要素に障害が発生した場合でも、ホスト計算機３００からストレージ装置１００へのアクセスが継続可能になるように、ＨＢＡ３０３は複数設けられている。またホスト計算機３００とストレージ装置１００の間の経路が単一障害点にならないように、スイッチ２００も２つ設けられ、ＨＢＡ３０３ａとＨＢＡ３０３ｂは、それぞれ異なるスイッチ（２００ａ、２００ｂ）に接続される。また、スイッチ２００ａは、制御パッケージ１１０ａと制御パッケージ１１０ｃに接続され、スイッチ２００ｂは、制御パッケージ１１０ｂと制御パッケージ１１０ｄに接続される。実施例１に係る計算機システムではこのように、ホスト計算機３００とストレージ装置１００が接続されるので、ホスト計算機３００からストレージ装置１００内の全ての制御パッケージ１１０へのアクセス経路が存在することになる。【００４０】
続いて、ストレージ装置１００のメモリ１１２に格納される、各種情報やプログラムについて、図４を用いて説明する。【００４１】
ストレージ装置１００のメモリ１１２には、クラスタ構成管理情報１３１、ボリューム管理情報１３２、ポート管理情報１３５、キャッシュ管理情報１３３の、４種類の管理情報が格納されている。なお、各管理情報の詳細は図５以降で説明される。また、図５以降では、各管理情報のデータ構造がテーブルとして示されているが、各管理情報はテーブル以外のデータ構造として管理されてもよい。【００４２】
またいずれの管理情報も、全制御パッケージ１１０のメモリ１１２内に格納されている。ただし、各メモリ１１２内に格納されているクラスタ構成管理情報１３１とボリューム管理情報１３２とポート管理情報１３５の内容は、全て同一になるように管理される。つまり制御パッケージ１１０ａのＭＰ１１１ａが、メモリ１１２ａに格納されたクラスタ構成管理情報１３１の内容を更新すると、その更新内容は、ノード内通信及び／またはノード間通信を用いて、他の制御パッケージ１１０にも伝搬され、各制御パッケージ１１０でクラスタ構成管理情報１３１の更新が行われる。【００４３】
クラスタ構成管理情報１３１の例を図５に示す。実施例１に係るストレージ装置１００では、各制御パッケージ１１０に一意な識別子を付して管理しており、この識別子のことを「パッケージＩＤ」と呼ぶ。また、ノードにも一意な識別子を付して管理しており、この識別子のことを「ノードＩＤ」と呼ぶ。なお、実施例１に係るストレージ装置１００では、識別子（パッケージＩＤ、ノードＩＤ等）には非負の整数値が用いられるが、本発明はこれに限定されるものではない。なお、本実施例においては、図３等に示されている制御パッケージ１１０ａ、１１０ｂ、１１０ｃ、１１０ｄのパッケージＩＤはそれぞれ、０、１、２、３であるとする。【００４４】
クラスタ構成管理情報１３１は、パッケージＩＤとノードＩＤの関係、及び各制御パッケージ１１０の状態を管理する情報である。クラスタ構成管理情報１３１の各行が、１つの制御パッケージ１１０の情報を表している。パッケージＩＤ（１３１−１）には、管理対象となる制御パッケージ１１０のパッケージＩＤが格納され、同じ行のノードＩＤ（１３１−２）には、当該制御パッケージ１１０の属するノードのノードＩＤが格納される。そして状態（１３１−３）には、当該制御パッケージの状態についての情報が格納される。【００４５】
状態（１３１−３）には、「正常」、「閉塞」、「未実装」のいずれかの情報が格納される。状態（１３１−３）に「正常」が格納されている場合、当該制御パッケージ１１０の状態が正常であることを表している。一方「閉塞」が格納されている場合、当該制御パッケージ１１０に障害が発生し、動作していない状態であることを表している。「未実装」が格納されている場合、当該制御パッケージ１１０がストレージ装置１００に実装されていないことを表している。たとえば、制御パッケージ１１０がストレージ装置１００から撤去された場合に、「未実装」が格納される。【００４６】
各制御パッケージ１１０のＭＰ１１１では、各制御パッケージ１１０の状態を検知するプログラム（後述する、障害対処プログラム（１４４））が稼働しており、制御パッケージ１１０（仮にパッケージＩＤが「７」の制御パッケージ１１０とする）の状態が変更されると（たとえば制御パッケージ１１０に障害が発生して動作しなくなった、あるいは制御パッケージ１１０が撤去された）、それを検知した制御パッケージ１１０のＭＰ１１１は、検知した制御パッケージ１１０内メモリ１１２に格納されているクラスタ構成管理情報１３１のパッケージＩＤ（１３１−１）が７番の行の、状態（１３１−３）の内容を変更する。同時にこの変更内容を、他の制御パッケージ１１０にも通知し、他の制御パッケージ１１０のメモリ１１２にあるクラスタ構成管理情報１３１の内容も変更させる。つまりクラスタ構成管理情報１３１は、全制御パッケージ１１０で同期更新される。【００４７】
続いてボリューム管理情報１３２について説明する。その前に、実施例１に係るストレージ装置１００で定義されるボリュームについて説明する。実施例１に係るストレージ装置１００では、複数のドライブ１２１を用いて１つのＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）グループを形成している。これにより、ＲＡＩＤグループ内の１台（または２台）のドライブ１２１に障害が発生してデータアクセスできなくなった場合でも、ＲＡＩＤグループ内の残りのドライブ１２１に格納されているデータを用いて、障害が発生したドライブ１２１に格納されていたデータを復旧できるようにしている。【００４８】
またストレージ装置１００は、ＲＡＩＤグループの記憶領域を論理ボリュームとして、ホスト計算機３００に提供する。そのため、ホスト計算機３００からは論理ボリュームが認識されるが、ドライブ１２１はホスト計算機３００からは認識されないように構成されている。実施例１に係るストレージ装置１００では、１つのＲＡＩＤグループの記憶領域が、１つの論理ボリュームに対応付けられた構成を採用している。なお、本実施例において、論理ボリュームとボリュームとは同義の語として用いられており、論理ボリュームのことを「ボリューム」と略記することがある。【００４９】
ストレージ装置１００は各論理ボリュームに対して、ストレージ装置１００内で一意な識別子を付して、論理ボリュームを管理している。この識別子は「ボリュームＩＤ」と呼ばれる。同様に、各ドライブ１２１にもストレージ装置１００内で一意な識別子が付されている。この識別子は「ドライブＩＤ」と呼ばれる。なお、実施例１に係るストレージ装置１００においては、ボリュームＩＤは、ホスト計算機３００がボリュームに対してコマンドを発行する際に、ボリュームを一意に特定するための識別子として用いるＬＵＮ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ  Ｎｕｍｂｅｒ）と等しい。ただし本発明はこの構成に限定されるものではない。【００５０】
ストレージ装置１００は、論理ボリュームに対するホスト計算機３００からのＩ／Ｏ要求の処理を担当する１または２の制御パッケージ１１０を、論理ボリュームごとに定めている。ある論理ボリュームに対するＩ／Ｏ要求の処理を担当する第１の制御パッケージ１１０は「オーナ」と呼ばれ、またある論理ボリュームに対するＩ／Ｏ要求の処理を担当する第２の制御パッケージ１１０は「準オーナ」と呼ばれる。詳細は後述するが、準オーナである制御パッケージ１１０は、論理ボリュームに対するライトデータの複製を格納する役割を負う。【００５１】
オーナまたは準オーナとなる制御パッケージ１１０のキャッシュ領域１３４には、ホスト計算機３００から論理ボリュームに対するライトデータが一時格納される。オーナまたは準オーナとなる制御パッケージ１１０は、ストレージ装置１００の管理者が設定、変更することが可能である。さらにストレージ装置１００の状態に応じて、ある論理ボリュームのオーナまたは準オーナを、ストレージ装置１００が変更することができる。【００５２】
ボリューム管理情報１３２は、各論理ボリュームについて、論理ボリュームを形成しているドライブ１２１の情報、論理ボリュームのオーナ、準オーナの情報などを管理するための情報である。図６にボリューム管理情報１３２の例を示す。ボリューム管理情報１３２の各行が、論理ボリュームの情報を表している。各行は、ボリュームＩＤ（１３２−１）、状態（１３２−２）、ＲＡＩＤ構成（１３２−３）、ドライブＩＤ（１３２−４）、オーナＩＤ（１３２−５）、準オーナＩＤ（１３２−６）、非最適パスＩ／Ｏ頻度（１３２−７）の項目を有している。【００５３】
ボリュームＩＤ（１３２−１）には、論理ボリュームのボリュームＩＤが格納される。状態（１３２−２）には、「定常」、「未定義」、「変更中」のいずれかの情報が格納される。論理ボリュームが通常の状態で運用されている場合には、「定常」が格納されている。論理ボリュームが未定義の場合、「未定義」が格納されている。論理ボリュームのオーナあるいは準オーナの変更処理が行われている場合には、「変更中」が格納される。【００５４】
ドライブＩＤ（１３２−４）、ＲＡＩＤ構成（１３２−３）にはそれぞれ、論理ボリュームの記憶領域が対応付けられているＲＡＩＤグループを構成しているドライブのドライブＩＤ、そして当該ＲＡＩＤグループのＲＡＩＤ構成に関する情報が格納される。ＲＡＩＤ構成に関する情報とは、ＲＡＩＤグループの冗長化レベルを表すＲＡＩＤレベル、及び当該ＲＡＩＤグループにデータを格納する際に生成される冗長情報（パリティ等）の数及び当該冗長情報を生成する際に使用されるデータ数の情報である。たとえばＲＡＩＤ構成（１３２−３）に「ＲＡＩＤ６（１４Ｄ＋２Ｐ）」が格納されている場合、ＲＡＩＤレベルがＲＡＩＤ６であり、１４個のデータから２個の冗長情報（パリティ）を生成して格納する構成のＲＡＩＤグループであることを意味している。【００５５】
オーナＩＤ（１３２−５）、準オーナＩＤ（１３２−６）には、論理ボリュームのオーナである制御パッケージ１１０のパッケージＩＤ、及び論理ボリュームの準オーナである制御パッケージ１１０のパッケージＩＤが格納される。なお、ストレージ装置１００の状態によっては、準オーナは設定されない場合がある。その場合、準オーナＩＤ（１３２−６）  には、無効値（たとえば“−１”等の、パッケージＩＤとしてあり得ない数値。なお、本明細書では、管理情報の欄に無効値が格納される場合、「ｎ／ａ」と表記する）が格納される。【００５６】
非最適パスＩ／Ｏ頻度（１３２−７）には、オーナ以外の制御パッケージ１１０のポートに到来するＩ／Ｏ要求の頻度が格納される。【００５７】
クラスタ構成管理情報１３１と同様、ボリューム管理情報１３２の内容は全制御パッケージ１１０で同期更新される。またポート管理情報１３５の内容も全制御パッケージ１１０で同期更新されるが、ポート管理情報１３５の詳細については後述する。【００５８】
続いて図７を用いて、キャッシュ管理情報１３３について説明する。この情報はクラスタ構成管理情報１３１やボリューム管理情報１３２と異なり、各制御パッケージ１１０で独立に管理されている情報である。制御パッケージ１１０ａ内のキャッシュ管理情報１３３の更新に同期して、他の制御パッケージ１１０内のキャッシュ管理情報１３３が更新されることはない。【００５９】
ストレージ装置１００の制御パッケージ１１０は、論理ボリュームの記憶領域に対してホスト計算機３００からライト要求のあったライトデータ、またはリード要求のあったリードデータをキャッシュ領域１３４に一時格納する。キャッシュ管理情報１３３は、キャッシュ領域１３４に格納されているデータの管理情報である。なお、キャッシュ管理情報１３３によるキャッシュ領域の管理単位は、ホスト３００が論理ボリュームにアクセスする際のアクセス最小単位であるブロック（一般的には５１２バイト）を１単位として管理する。そのため、キャッシュ管理情報１３３の１行には、キャッシュ領域１３４内の５１２バイトの領域に格納されているデータについての情報が格納される。【００６０】
キャッシュ管理情報１３３の各行には、キャッシュアドレス（１３３−１）、状態（１３３−２）、ボリュームＩＤ（１３３−３）、ＬＢＡ（１３３−４）の項目が含まれている。ボリュームＩＤ（１３３−３）、ＬＢＡ（１３３−４）にはそれぞれ、論理ボリュームのボリュームＩＤ及び当該論理ボリューム上のアドレス（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）が格納される。これにより、ボリュームＩＤ（１３３−３）、ＬＢＡ（１３３−４）で特定される論理ボリューム上のブロックのデータが、キャッシュアドレス（１３３−１）を開始アドレスとする、キャッシュ領域１３４内の５１２バイト領域に格納（キャッシュ）されていることを表している。【００６１】
状態（１３３−２）には、キャッシュされているデータの状態についての情報が格納される。状態（１３３−２）に格納される情報は、「Ｃｌｅａｎ」、「Ｆｒｅｅ」、「Ｄｉｒｔｙ」のいずれかである。状態（１３３−２）に「Ｆｒｅｅ」が格納されている場合、その領域（キャッシュアドレス（３３−１）で特定される領域）にデータが格納されていないことを意味する。状態（１３３−２）に「Ｃｌｅａｎ」が格納されている場合、その領域（キャッシュアドレス（１３３−１）で特定される領域）にデータが格納されているが、そのデータの内容は、ドライブ１２１に反映済みであることを意味する（なお、この状態にあるデータのことを、「クリーンデータ」と呼ぶ）。状態（１３３−２）に「Ｄｉｒｔｙ」が格納されている場合、その領域（キャッシュアドレス（３３−１）で特定される領域）にデータが格納されており、かつそのデータはまだドライブ１２１に反映されていない状態のデータ（いわゆるダーティデータ）であることを意味する。【００６２】
キャッシュ管理情報１３３は、各制御パッケージ１１０内のキャッシュ領域１３４の管理のみに用いられる情報である。そのため、例えば制御パッケージ１１０ａ内のキャッシュ管理情報１３３ａは、制御パッケージ１１０ａ内のキャッシュ領域１３４ａの管理情報だけが格納される。【００６３】
続いてホスト計算機３００上で稼働するプログラム、及びＩ／Ｏ処理時のストレージ装置１００内でのデータの流れの概要を、図８を用いて説明する。ホスト計算機３００では少なくとも、アプリケーション（ＡＰ）３１１、交替パスソフトウェア３１０が稼働している。ＡＰ３１１は、ストレージ装置１００が提供するボリュームに対してデータのリード・ライトを行うプログラムで、一例としてはデータベース管理システム（ＤＢＭＳ）などの業務プログラムである。ただしＡＰ３１１がどのような種類のプログラムであっても本発明は適用可能である。【００６４】
交替パスソフトウェア３１０は、ホスト計算機３００からストレージ装置１００のボリューム１２２ｘに至る複数の経路のうち、１つの経路に障害が発生してボリュームにアクセスできなくなった場合にアクセス経路を切り替えて、ＡＰ３１１等の上位のプログラムに対して障害を隠蔽するプログラムである。【００６５】
ボリューム１２２ｘに対してホスト計算機３００からライト要求またはリード要求を受け付けた時のデータの流れを、図８を用いて説明する。また、以下では、制御パッケージ１１０ａがボリューム１２２ｘのオーナで、制御パッケージ１１０ｂがボリューム１２２ｘの準オーナである場合の例を説明する。なお、図８は、制御パッケージ１１０ａ内にボリューム１２２ｘのオブジェクトが記載された図になっているが、これは制御パッケージ１１０ａがボリューム１２２ｘのオーナであることを表している。これ以降の説明においても、制御パッケージ１１０ｘ（ｘは、ａ〜ｄのいずれかの符号であることを意味する）内にボリュームが存在している図は、当該ボリュームのオーナが制御パッケージ１１０ｘであることを意味している。【００６６】
制御パッケージ１１０ａのポートが、ホスト計算機３００からボリューム１２２ｘに対するライト要求及びライトデータを受信すると、制御パッケージ１１０ａは自身のキャッシュ領域１３４ａにライトデータを格納するとともに、ノード内通信路を介して、制御パッケージ１１０ｂに、制御パッケージ１１０ｂのキャッシュ領域１３４ｂにライトデータを格納するよう指示する。キャッシュ領域１３４ａ、１３４ｂにライトデータが格納されると、制御パッケージ１１０ａはライト処理が完了した旨をホスト計算機３００に返信する。なお、制御パッケージ１１０ａのポートが複数存在する場合、どのポートがライト要求を受け付けても、上で説明した処理と同じ処理が行われる。またどのポートがリード要求を受け付けても、アクセス性能には変わりはない。【００６７】
ストレージ装置１００がライトデータをキャッシュ領域１３４ａ、１３４ｂの両方に書き込む理由は、ライトデータをドライブ１２１に格納する前に制御パッケージ１１０ａに障害が発生し、キャッシュ領域１３４ａにアクセスできなくなった場合、キャッシュ領域１３４ａ以外にライトデータが残っていないと、ライトデータが消失したことになるためである。そのためストレージ装置１００は、少なくとも２つの制御パッケージ１１０のキャッシュ領域１３４へのライトデータの書き込みを行う。【００６８】
またストレージ装置１００が、ライトデータをキャッシュ領域１３４ｃ（または１３４ｄ）ではなくキャッシュ領域１３４ｂに書き込む理由は、制御パッケージ１１０ａから制御パッケージ１１０ｂへの指示はノード内通信により行うことができるが、制御パッケージ１１０ａから制御パッケージ１１０ｃ、１１０ｄへの指示は、ノード間通信が必要となり、制御パッケージ１１０ｂに指示する場合に比べて性能が悪化するためである。つまりストレージ装置１００は原則として、オーナとなる制御パッケージ１１０と同一ノードに属する制御パッケージ１１０を準オーナにするよう構成される。【００６９】
キャッシュ領域１３４に格納されたデータ（ダーティデータ）は、ホスト計算機３００からのライト要求とは非同期に、ドライブ１２１へと格納される。キャッシュ領域１３４のデータをドライブ１２１へ格納する処理のことを、「デステージ」と呼ぶ。デステージが終了すると、準オーナである制御パッケージ１１０ｂのキャッシュ領域１３４ｂから、ライトデータは削除（破棄）される。またオーナである制御パッケージ１１０ａのキャッシュ領域１３４ａに格納されていたダーティデータは、デステージ終了後は、クリーンデータとして扱われる。【００７０】
制御パッケージ１１０ａのポートが、ホスト計算機３００からボリューム１２２ｘに対するリード要求を受信すると、制御パッケージ１１０ａは自身のキャッシュ領域１３４ａにリード要求でリード対象とされているデータ（リード対象データ）が格納されているか確認する。キャッシュ領域１３４ａにリード対象データが格納されている場合、キャッシュ領域１３４ａ上のデータをホスト計算機３００に返送する。キャッシュ領域１３４ａにリード対象データが格納されていない場合、ドライブ１２１からデータを読み出し、ホスト計算機３００に返送する。またこの時、キャッシュ領域１３４ａにもデータを格納する。なお、制御パッケージ１１０ａのポートが複数存在する場合、どのポートがリード要求を受け付けても、上で説明した処理と同じ処理が行われる。またどのポートがリード要求を受け付けても、アクセス性能には変わりはない。【００７１】
上で説明したデータの流れは、いずれもアクセス要求をオーナである制御パッケージ１１０（上で説明した例の場合には制御パッケージ１１０ａ）が受け付けた場合である。オーナでない制御パッケージ１１０のポートがアクセス要求を受け付けた場合には、上で説明した流れとは若干異なる流れになる。制御パッケージ１１０ｂのポートがホスト計算機３００からボリューム１２２ｘに対するリード要求を受信した場合、制御パッケージ１１０ｂはノード内通信路を介してリード要求をオーナである制御パッケージ１１０ａに転送する。その後制御パッケージ１１０ｂは制御パッケージ１１０ａからノード内通信路を介して転送されてくるリードデータをホスト計算機３００に返送する。【００７２】
さらに、制御パッケージ１１０ｃ（または１１０ｄ）のポートがホスト計算機３００からボリューム１２２ｘに対するリード要求を受信した場合、制御パッケージ１１０ｃ（または１１０ｄ）はノード間通信路を介してリード要求をオーナである制御パッケージ１１０ａに転送する。その後制御パッケージ１１０ｃ（または１１０ｄ）は制御パッケージ１１０ａからノード間通信路を介して転送されてくるリードデータをホスト計算機３００に返送する。ただし、実施例１に係るストレージ装置１００において、制御パッケージ１１０ａがオーナであるボリュームに対するアクセス要求を、制御パッケージ１１０ａと異なるノードに属する制御パッケージ１１０ｃ（または１１０ｄ）が受信する事象は、原則として発生しない。実施例２（後述）に係るストレージ装置１００で発生し得る事象である。【００７３】
このように、オーナでない制御パッケージ１１０がリード要求を受け付けた場合、リード要求やリードデータを制御パッケージ１１０間で転送する必要が生じる。制御パッケージ１１０ａと同一ノードに属する制御パッケージ１１０ｂがアクセス要求を受け付けた場合には、ノード内通信によるデータ転送が発生する。制御パッケージ１１０ａと異なるノードに属する制御パッケージ１１０ｃ（または１１０ｄ）がアクセス要求を受け付けた場合には、ノード間通信によるデータ転送が発生する。そのため、制御パッケージ１１０ａと同一ノードに属する制御パッケージ１１０ｂがアクセス要求を受け付けた場合は、制御パッケージ１１０ａと異なるノードに属する制御パッケージ１１０ｃ（または１１０ｄ）がアクセス要求を受け付けた場合と比べて、アクセス性能が良い。【００７４】
いずれにせよ、オーナでない制御パッケージ１１０がアクセス要求を受け付けた場合、リード要求をオーナである制御パッケージ１１０ａが受信する場合に比べて、アクセス性能が低下する。このように、実施例１に係るストレージ装置１００では、アクセス要求を受け付けた制御パッケージ１１０によってアクセス性能に差が生じるため、ホスト計算機３００はボリュームに対するアクセス要求を、オーナである制御パッケージ１１０に対して発行するように構成されていることが望ましい。これを実現するため、以下では、後述するＡＬＵＡ規約を利用する例を説明する。【００７５】
実施例１に係るストレージ装置１００は、ＳＣＳＩの仕様で規格化されているＡＬＵＡ（Ａｓｙｍｍｅｔｒｉｃ  Ｌｏｇｉｃａｌ  Ｕｎｉｔ  Ａｃｃｅｓｓ）と呼ばれる規約を採用している。ＡＬＵＡをサポートするストレージ装置は、論理ボリューム毎に、アクセス要求を発行すべきポートの状態（優先度）をホスト計算機３００に通知する機能を備えている。実施例１に係るストレージ装置１００はこれを利用して、ある論理ボリュームに対するアクセス要求の発行先となる制御パッケージ１１０の優先度を、ホスト計算機３００に通知する。そしてホスト計算機３００は通知された情報に基づいて、優先度の最も高い制御パッケージ１１０（のポート）に対してアクセス要求を発行するよう動作する。【００７６】
ＡＬＵＡでは、１以上のポートの集合は、ターゲットポートグループと呼ばれるグループとして管理される。また、ターゲットポートグループは論理ボリュームごとに定められる。実施例１に係るストレージ装置１００の場合、１つの制御パッケージ１１０内の全ポートが、１つのターゲットポートグループとして管理される。また、異なる制御パッケージ１１０内のポートは、それぞれ異なるターゲットポートグループに属するよう管理される。【００７７】
具体的には、ある１つの論理ボリューム１２２ｘのオーナである制御パッケージ１１０（図８の場合、制御パッケージ１１０ａである）内の全ポートは、１つのターゲットポートグループ（第１ターゲットポートグループと呼ぶ）として管理される。そして、ある１つの論理ボリューム１２２ｘの準オーナである制御パッケージ１１０（図８の場合、制御パッケージ１１０ｂが該当する）内の全ポートは、第１ターゲットポートグループとは異なるターゲットポートグループ（第２ターゲットポートグループと呼ぶ）として管理される。さらに制御パッケージ１１０ａ、１１０ｂ以外の制御パッケージ１１０内のポートもそれぞれ、制御パッケージ１１０毎に第１及び第２ターゲットポートグループとは異なるターゲットポートグループとして管理される。【００７８】
なお、本実施例においては、１つの論理ボリューム（仮にこの論理ボリュームのＩＤをｎとする）に対して定められる各ターゲットポートグループは一意な識別子を有し、各制御パッケージ１１０のポートが属するターゲットポートグループ（ボリュームＩＤがｎの論理ボリュームに対して定められるターゲットポートグループ）の識別子は、パッケージＩＤと等しいものとする。つまり、制御パッケージ１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ（先に述べたとおり、これらのパッケージのパッケージＩＤはそれぞれ、０、１、２、３である）のポートが属するターゲットポートグループ（ボリュームＩＤがｎの論理ボリュームに対して定められるターゲットポートグループ）の識別子はそれぞれ、０、１、２、３である。【００７９】
また、各制御パッケージ１１０のポートは、ターゲットポートグループ内で一意な識別子を有し、パッケージＩＤがｋの制御パッケージ１１０内のポートの識別子は、（ｋ＋１）であるとする。つまり、制御パッケージ１１０ａ、１１０ｂ、１１０ｃ、１１０ｄのポートの識別子はそれぞれ、１、２、３、４である。【００８０】
また以下では、ターゲットポートグループの識別子のことを「ターゲットポートグループＩＤ」と呼び、ポートの識別子のことを「ポートＩＤ」と呼ぶ。【００８１】
ＡＬＵＡをサポートするストレージ装置の各ポートは、少なくとも以下の４つの状態を有する。
ａ）  Ａｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄ
ｂ）  Ａｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄ
ｃ）  Ｓｔａｎｄｂｙ
ｄ）  Ｏｆｆｌｉｎｅ【００８２】
ＡＬＵＡでは、上で述べた状態以外のポート状態も定義されており、実施例１に係るストレージ装置１００の各ポートも、上で述べた４状態以外のポート状態を有することがある。ただしここでは、本実施例の説明に関係の深い、上の４状態についてのみ説明する。また、以下では、ａ）の状態を“最適”、ｂ）の状態を“非最適”、ｃ）の状態を“待機”、ｄ）の状態を“切断”と呼ぶこともある。また、同一のターゲットポートグループに属するポートは、すべて同じポート状態を有すると決められている。【００８３】
ポートの状態がＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄまたはＡｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄの場合、当該ポートはホスト３００からリードまたはライトコマンドを受信可能で、且つ正常な応答を返却可能である。ただしＡＬＵＡでは、ポートの状態がＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄであるポートが最も優先度が高いことを意味する。そしてポートの状態がＡｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄの場合、そのポートは２番目に優先度が高い（Ａｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄの状態のポートよりも優先度が低い）ことを意味する。また、状態がＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄであるポートを介してボリュームにアクセスする場合よりも、アクセス性能が低くなるポートに対して、Ａｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄの状態が設定される。そのため、実施例１に係るストレージ装置１００では、第１ターゲットポートグループに属する各ポートの状態は、Ａｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄに設定され、また第２ターゲットポートグループに属する各ポートの状態は、Ａｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄに設定される。【００８４】
ポートの状態がＳｔａｎｄｂｙであるポートに対してリードまたはライトコマンドが発行された場合、ストレージ装置はリードまたはライト処理は行わず、コマンド発行元に対して正常応答を返却しない。ただし当該ポートに対して、ＩＮＱＵＩＲＹコマンド、あるいは後述するＲＥＰＯＲＴ  ＴＡＲＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳコマンド等の、ボリュームやパスの状態などを返却するコマンドが発行された場合には、ストレージ装置は正常な応答を返却する。【００８５】
ポートの状態がＯｆｆｌｉｎｅの場合、このポートはホスト計算機３００からのコマンドを受信不可能な状態になっている。実施例１に係るストレージ装置１００では、オーナでもなく準オーナでもない制御パッケージ内の各ポートの状態は、ＳｔａｎｄｂｙあるいはＯｆｆｌｉｎｅの状態にある。オーナでもなく準オーナでもない制御パッケージのうち、正常な制御パッケージ１１０内のポートの状態はＳｔａｎｄｂｙに設定され、正常でない（閉塞である）制御パッケージ１１０内のポート状態はＯｆｆｌｉｎｅに設定される。【００８６】
図９のポート管理情報１３５は、各論理ボリュームに対して定められているポート（及びポートグループ）の状態を表している。ポートＡｃｔｉｖｅ／ｏｐｔ（１３５−１２）には、ポート状態がＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄであるポートのポートＩＤが格納され、ポートグループＡｃｔｉｖｅ／ｏｐｔ（１３５−１１）には当該ポートの属するポートグループＩＤが格納される。ポートＡｃｔｉｖｅ／ｎｏｎｏｐｔ（１３５−２２）には、ポート状態がＡｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄであるポートのポートＩＤが格納され、ポートグループＡｃｔｉｖｅ／ｎｏｎｏｐｔ（１３５−２１）には当該ポートの属するポートグループＩＤが格納される。ポートＳｔａｎｄｂｙ（１３５−３２）には、ポート状態がＳｔａｎｄｂｙであるポートのポートＩＤが格納され、ポートグループＡｃｔｉｖｅ／Ｓｔａｎｄｂｙ（１３５−３１）には当該ポートの属するポートグループＩＤが格納される。ポートＯｆｆｌｉｎｅ（１３５−４２）には、ポート状態がＯｆｆｌｉｎｅであるポートのポートＩＤが格納され、ポートグループＡｃｔｉｖｅ／Ｏｆｆｌｉｎｅ（１３５−４１）には当該ポートの属するポートグループＩＤが格納される。ストレージ装置１００が論理ボリュームのオーナを設定した時あるいは変更した時、ポート管理情報１３５の内容も更新する。【００８７】
ホスト計算機３００がある論理ボリュームにアクセスする際、当該論理ボリュームに設定されている各ポートの状態を知っていた場合、状態がＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄであるポートに対してＩ／Ｏ要求（リードまたはライトコマンド）を発行すれば、論理ボリュームへのアクセス性能が良くなる。またポート状態がＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄであるポートに対してＩ／Ｏ要求を発行できない場合（これはたとえばホスト計算機から当該ポートに至るアクセス経路（パス）に障害が発生していた場合等が該当する）には、ポート状態がＡｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄのポートに対してＩ／Ｏ要求を発行すればよい。【００８８】
ＡＬＵＡをサポートするストレージ装置は、各ポートの状態をホスト計算機に返却するコマンド（ＲＥＰＯＲＴ  ＴＡＲＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳコマンド）をサポートしている。ホスト計算機３００は、このコマンドをストレージ装置１００に発行することで、アクセス要求を発行すべきポート（つまりポート状態がＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄであるポート）を知ることができる。またこのコマンドを発行する際、論理ボリュームの識別番号（ＬＵＮ）も指定されるため、このコマンドを受信したストレージ装置は、指定された論理ボリュームに対応した各ポートの状態を、コマンド発行元に返却する。詳細は後述する。【００８９】
図８の例では、論理ボリューム１２２ｘに設定されている各ポートの状態（優先度）は、制御パッケージ１１０ａのポートの状態はＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄで最も優先度が高い。また制御パッケージ１１０ｂのポートの状態はＡｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄで、２番目に優先度が高い状態と設定される。そして制御パッケージ１１０ｃ及び１１０ｄのポートの状態はＳｔａｎｄｂｙに設定される。ホスト計算機３００が論理ボリューム１２２ｘに設定されているポート状態を取得するために、ＲＥＰＯＲＴ  ＴＡＲＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳコマンドを発行してきた場合、ホスト計算機３００が論理ボリューム１２２ｘに設定されている各ポートの状態を取得するためにＲＥＰＯＲＴ  ＴＡＲＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳコマンドを発行してきた場合、ストレージ装置１００は、制御パッケージ１１０ａのポートの状態はＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄで、制御パッケージ１１０ｂのポートの状態はＡｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄで、制御パッケージ１１０ｃ及び１１０ｄのポートの状態はＳｔａｎｄｂｙである旨を返答する。【００９０】
また、先に述べたとおり、１つの制御パッケージ１１０内の全ポートの状態は同じであるので、ＲＥＰＯＲＴ  ＴＡＲＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳコマンドを用いて各ポートの状態（優先度）を取得することは、論理ボリューム１２２ｘに対してアクセスする際、優先的にアクセス要求を発行すべき制御パッケージ１１０の情報（各制御パッケージ１１０の優先度）を取得していることと等価である。【００９１】
ホスト計算機３００では、交替パス管理ソフトウェア３１０が各ポートの状態を管理している。交替パス管理ソフトウェア３１０が、ＡＰ３１１等の上位のプログラムからボリュームに対するＩ／Ｏ要求を受信すると、交替パス管理ソフトウェア３１０は、ポートの状態がＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄであるポートに対してＩ／Ｏ要求を送信する。またＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄであるポートに対してＩ／Ｏ要求を送信した結果、エラーが返却された、あるいは応答がなかった場合には、交替パス管理ソフトウェア３１０は、状態がＡｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄであるポートに対してＩ／Ｏ要求を送信するよう動作する。【００９２】
ボリュームのオーナは、ストレージ装置１００あるいは計算機システムの状態が変化した場合には変更されることが望ましい。続いて、実施例１に係る計算機システムにおいて障害が発生した時の、ストレージ装置１００で行われる処理の概要を、図８、図１、図２、図１０を用いて説明する。図８は、障害が発生する前の状態を表しており、図１、２、１０は、障害が発生した際の計算機システムの状態を表した図である。図８に示されている通り、障害が発生する前は、制御パッケージ１１０ａがボリューム１２２ｘのオーナである。また、ボリューム１２２ｘの準オーナは制御パッケージ１１０ｂである。【００９３】
図２は、制御パッケージ１１０ａに障害が発生した場合、制御パッケージ１１０ｂ〜１１０ｄはいずれも正常である場合に行われる処理の概要を表した図である。制御パッケージ１１０ａに障害が発生した場合、制御パッケージ１１０ａはボリューム１２２ｘに対するアクセス処理を行えなくなるため、他の制御パッケージ１１０をボリューム１２２ｘのオーナにする必要が出る。制御パッケージ１１０ｂ〜１１０ｄはすべて正常であるため、制御パッケージ１１０ｂ〜１１０ｄはいずれもオーナになることが可能である。【００９４】
ただし、ホスト計算機３００からのライトデータをキャッシュ領域１３４に格納する際、ライトデータは少なくとも２つのキャッシュ領域１３４に書き込まれる必要がある。仮に制御パッケージ１１０ｂがオーナになった場合、ストレージ装置１００はライトデータをキャッシュ領域１３４ｂに加えて、キャッシュ領域１３４ｃまたは１３４ｄに格納する必要がある。この場合、ノード間通信路を用いたデータ伝送が発生し、アクセス性能が悪化する。【００９５】
そのため、制御パッケージ１１０ａに障害が発生した場合、ノード内に複数の正常な制御パッケージ１１０が存在しない場合には、ストレージ装置１００はできるだけ、複数の正常な制御パッケージ１１０が存在するノードから、オーナ及び／または準オーナとなる制御パッケージ１１０を選択するよう動作する。図２に記載されたストレージ装置１００の構成では、１ノード内に２制御パッケージ１１０しか存在しない構成であるため、ボリューム１２２ｘのオーナが制御パッケージ１１０ｃに変更された状態になる（そして準オーナが制御パッケージ１１０ｄに変更された状態になる）。このようにオーナが変更された場合、ホスト計算機３００からのライトデータは、ノード内の２つのキャッシュ領域１３４（キャッシュ領域１３４ｃと１３４ｄ）に格納されることになるため、障害の発生前と同等のアクセス性能を維持することができる。ただし、制御パッケージ１１０ａに障害が発生したとしても、制御パッケージ１１０ａの属するノード内に複数の正常な制御パッケージ１１０が存在している構成であった場合（つまり１ノード内に３以上の制御パッケージ１１０が存在している場合）、当該ノード内の２つの制御パッケージ１１０をそれぞれ、オーナ、準オーナにしてもよい。【００９６】
ボリューム１２２ｘのオーナが制御パッケージ１１０ａから別の制御パッケージ１１０（たとえば制御パッケージ１１０ｃ）に変更された場合、ホスト計算機３００のアクセス要求発行先の制御パッケージ１１０は、制御パッケージ１１０ｃであるべきである。そのため、ストレージ装置１００はオーナ変更後に、ポート状態が変更されたことをホスト計算機に通知する。図２の場合には、制御パッケージ１１０ｃ内のポートの状態がＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄであること、制御パッケージ１１０ｄ内のポートの状態がＡｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄであること、制御パッケージ１１０ｂ内のポートの状態がＳｔａｎｄｂｙであること、制御パッケージ１１０ａ内のポートの状態がＯｆｆｌｉｎｅであることが、ホスト計算機３００に通知される。ホスト計算機３００はポート状態が変更されたことを検知すると（なお、ポート状態が変更されたことが通知される契機については後述する）、ポート状態がＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄである制御パッケージ１１０ｃのポートに対してＩ／Ｏ要求を発行するようになる。【００９７】
図１０は、制御パッケージ１１０ａに障害が発生した場合に行われる処理の概要を表した図である。図２との違いは、すでに制御パッケージ１１０ｄにも障害が発生していて、制御パッケージ１１０ｄが閉塞状態になっていることである。【００９８】
この場合、ボリューム１２２ｘのオーナを制御パッケージ１１０ａから、（制御パッケージ１１０ａの属するノードと）別ノードの制御パッケージ１１０ｃに移動しても、ライトデータを２つのキャッシュ領域１３４に格納する場合、制御パッケージ１１０ｃはキャッシュ領域１３４ｃとキャッシュ領域１３４ｂに格納する必要がある。キャッシュ領域１３４ｂにライトデータを格納するためには、ノード間通信路を用いる必要があり、アクセス性能が向上しない。つまりオーナを制御パッケージ１１０ｃに移動しても、オーナが制御パッケージ１１０ｂに移動した場合に比べてアクセス性能は向上しないため、この場合には、オーナを別ノードの制御パッケージ１１０に移動することは行わず、制御パッケージ１１０ｂにオーナを移動する。ただし、オーナを別ノードの制御パッケージ１１０に移動してもよい。【００９９】
ホスト計算機３００に通知されるポート状態は、図１０に示されているように、制御パッケージ１１０ｂ内のポートの状態がＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄに、制御パッケージ１１０ｃ内のポートの状態がＡｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄに、制御パッケージ１１０ａ内のポートの状態がＯｆｆｌｉｎｅに変更されたことが通知される（また、制御パッケージ１１０ｄ内のポートの状態はＯｆｆｌｉｎｅであることが通知される）。【０１００】
図１は、ホスト計算機３００から制御パッケージ１１０ａに至る経路（パス）に障害が発生した場合、かつストレージ装置１００には障害が発生していない場合に行われる処理の概要を表している。この場合、ストレージ装置１００はボリューム１２２ｘのオーナを制御パッケージ１１０ａから制御パッケージ１１０ｂに移動し、また制御パッケージ１１０ａをボリューム１２２ｘの準オーナに変更する。なぜならば、この場合には制御パッケージ１１０ａは正常であるため、キャッシュ領域１３４ａにアクセス可能だからである。【０１０１】
もちろん図２で説明した例のように、別ノードの制御パッケージ１１０がオーナ及び準オーナになるように、オーナ及び準オーナの変更を行うことも可能である。ただし一般に、別ノードの制御パッケージ１１０は、（制御パッケージ１１０ａがオーナであった論理ボリュームとは）別の論理ボリュームのオーナとして稼働している。もし別ノードの制御パッケージ１１０を、制御パッケージ１１０ａがオーナであった論理ボリュームのオーナに変更すると、別ノードの制御パッケージ１１０の負荷が高くなり、結果として論理ボリュームのアクセス性能の低下を招く。そのため、制御パッケージ１１０の障害でない場合には、ストレージ装置１００は極力ノード内の制御パッケージ１１０をオーナまたは準オーナにする。これによりアクセス性能が低下することを防ぐことができる。【０１０２】
制御パッケージ１１０ｂにオーナが移動した後にホスト計算機３００からのライトデータを受け付けると、制御パッケージ１１０ｂは自身のキャッシュ領域１３４ｂにライトデータを書き込むとともに、ノード内通信路を介して、制御パッケージ１１０ａに、ライトデータをキャッシュ領域１３４ａに格納するよう指示する。制御パッケージ１１０ａはその指示に応じて、ライトデータをキャッシュ領域１３４ａに格納する。【０１０３】
ホスト計算機３００に通知されるポート状態は、図１に示されているように、制御パッケージ１１０ｂ内のポートの状態がＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄに変更されたことが通知される。また制御パッケージ１１０ａ内のポートの状態がＡｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄに変更されたことが通知される。【０１０４】
なお、図１のように、パスに障害が発生した場合の問題点は、ストレージ装置１００には障害が発生していないため、ストレージ装置１００はボリューム１２２ｘのオーナを変更するべきか判断がつかない点である。ただしパスに障害が発生した場合、ホスト計算機３００は、ボリューム１２２ｘのオーナである制御パッケージ１１０ａに対してＩ／Ｏ要求を発行することができないため、ポートの状態がＡｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄである制御パッケージ１１０ｂ内のポートに対してＩ／Ｏ要求を発行するように、交替パス管理ソフトウェア３１０の設定を変更する。結果として、制御パッケージ１１０ｂに多量のＩ／Ｏ要求が到来する。そのため、実施例１に係るストレージ装置１００は、オーナでない制御パッケージ１１０（準オーナである制御パッケージ１１０）に対して多量のＩ／Ｏ要求が到来したことを検知した時点で、ホスト計算機３００から制御パッケージ１１０ａに至る経路（パス）に障害が発生したと判断し、オーナを変更するよう動作する。【０１０５】
続いて、ストレージ装置１００で実行される各種プログラムについて説明していく。ストレージ装置１００が有する主要なプログラムとして、ボリュームＩ／Ｏプログラム（１４１）、優先パス通知プログラム（１４２）、ドライブＩ／Ｏプログラム（１４３）、障害対処プログラム（１４４）、オーナ変更プログラム（１４５）、そして通信プログラム（１４６）がある。なお、以下では、説明が冗長になることを防ぐために、プログラムが動作主体となって処理を実行するかのような記載がなされることもあるが、実際にはその処理はプログラムを実行するＭＰ１１１によって行われることを意味する。また、各プログラムは、全制御パッケージ１１０のメモリ１１２に格納されており、各制御パッケージ１１０のＭＰ１１１はいずれも、上に挙げたプログラムを実行する。【０１０６】
ボリュームＩ／Ｏプログラム（１４１）は、ホスト計算機３００からＩ／Ｏ要求（リードコマンド、ライトコマンド）を受け付けた時に実行されるプログラムである。優先パス通知プログラム（１４２）は、ホスト計算機３００からＲＥＰＯＲＴ  ＴＡＲＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳコマンドを受け付けた時に実行されるプログラムである。障害対処プログラム（１４４）は定期的に実行されるプログラムで、このプログラムがＭＰ１１１で実行されることにより、ＭＰ１１１はストレージ装置１００内で正常に動作していない制御パッケージ１１０を検出し、正常に動作していない制御パッケージ１１０が存在した場合に、オーナの変更など、必要な対処を行う。【０１０７】
オーナ変更プログラム（１４５）は、他のプログラムから呼び出される形で実行される。他のプログラムが、論理ボリュームのオーナ、準オーナの変更が必要な際にオーナ変更プログラム（１４５）を呼び出す。【０１０８】
ドライブＩ／Ｏプログラム（１４３）は、ＭＰ１１１がドライブ１２１からメモリ１１２（具体的にはメモリ１１２内のキャッシュ領域１３４）にデータを読み出すとき、あるいはメモリ１１２からドライブ１１２に対してデータを書き込む際に実行される。なお本実施例では、ドライブ１２１からメモリ１１２にデータを読み出す処理は「ステージング」と呼ばれ、またメモリ１１２からドライブ１２１に対してデータを書き込む処理は「デステージング」と呼ばれる。ステージング、デステージング処理は、公知のディスクキャッシュを搭載したストレージ装置でも行われている処理である。【０１０９】
また本実施例に係るストレージ装置１００で行われるデステージング処理では原則として、論理ボリュームのオーナである制御パッケージ１１０が、自身のキャッシュ領域１３４にある、当該論理ボリュームにデステージすべきダーティデータを、論理ボリュームを構成するドライブ１２１に対してデステージを行う。そしてオーナである制御パッケージはデータをデステージした後、当該データの複製を保持している準オーナの制御パッケージ１１０に対し、当該データの複製を破棄するように通知する。準オーナである制御パッケージはその通知を受けると、自身のキャッシュ領域１３４に格納されている当該データの複製を破棄（削除）する。キャッシュ領域１３４に格納されているデータが破棄されると、当該データの格納されていた領域は他のデータを格納する等の用途で自由に使用可能になる。本明細書ではキャッシュ領域１３４に格納されているデータを破棄する処理のことを、「フリー化」と呼ぶこともある。【０１１０】
通信プログラム（１４６）は、制御パッケージ１１０間のデータ通信を行うためのプログラムである。ある制御パッケージ１１０内のＭＰ１１１が、他の制御パッケージ１１０に対して要求やデータの送信を行う場合、あるいは他の制御パッケージ１１０から要求やデータを受信する際に、通信プログラム（１４６）が実行される。先に述べたとおり、本実施例に係るストレージ装置１００には、ノード内通信路とノード間通信路が存在する。そのためある制御パッケージ１１０のＭＰ１１１で実行されている通信プログラム（１４６）は、要求あるいはデータの送信先が、同一ノード内制御パッケージ１１０であれば、ノード内通信路を介した送信要求あるいはデータの送信を行う。そして要求あるいはデータの送信先が、異なるノード制御パッケージ１１０である場合には、ノード間通信路を介した送信要求あるいはデータの送信を行う。【０１１１】
続いて図１１〜１３を用いて、ボリュームＩ／Ｏプログラム（１４１）により実行される処理のフローを説明する。【０１１２】
ホスト計算機３００からＩ／Ｏ要求（リードコマンドまたはライトコマンド）を受領すると（ステップ１４１−１）、ＭＰ１１１はＩ／Ｏ要求で指定されている、リードまたはライト先のボリューム（以下このボリュームのことは「対象ボリューム」と呼ばれる）が存在するか判定する（ステップ１４１−２）。Ｉ／Ｏ要求には、アクセス先の論理ボリュームの識別子（ＬＵＮ）が含まれているため、ステップ１４１−１ではＭＰ１１１は、ボリューム管理情報１３２内のボリュームＩＤ（１３２−１）が、アクセス要求に含まれているＬＵＮと等しく、かつ状態（１３２−２）が「未定義」ではない行があるか判定する。ボリュームＩＤ（１３２−１）がアクセス要求に含まれているＬＵＮと等しく、かつ状態（１３２−２）が「未定義」ではない行がある場合、対象ボリュームが存在することを意味する。【０１１３】
対象ボリュームが存在する場合（ステップ１４１−２：Ｙ）、ＭＰ１１１はステップ１４１−５以降のステップを実行するが、対象ボリュームが存在しない場合（ステップ１４１−２：Ｎ）は、ＭＰ１１１はホスト計算機３００にエラーを返却し（ステップ１４１−３）、処理を終了する。【０１１４】
ステップ１４１−５では、対象ボリュームが変更中であるか判定する処理が行われる。ＭＰ１１１は、ボリューム管理情報１３２内のボリュームＩＤ（１３２−１）が、アクセス要求に含まれているＬＵＮと等しい行（以下、この行を「アクセス対象行」と呼ぶ）について、状態（１３２−２）が「変更中」か否かを判定する。状態（１３２−２）が「変更中」であった場合（ステップ１４１−５：Ｙ）、ＭＰ１１１は状態（１３２−２）が「変更中」から「定常」に変更されるまで待機する。状態（１３２−２）が「変更中」でない場合（ステップ１４１−５：Ｎ）、ＭＰ１１１はステップ１４１−７以降の処理を実行する。【０１１５】
ステップ１４１−７では、ＭＰ１１１は対象ボリュームのオーナを確認する。対象ボリュームのオーナは、アクセス対象行のオーナＩＤ（１３２−５）、準オーナＩＤ（１３２−６）を参照することで確認可能である。なお、ボリュームＩ／Ｏプログラム（１４１）を実行しているＭＰ１１１は、自身が所属する（存在する）制御パッケージ１１０（以下、この制御パッケージのことを「自パッケージ」と呼ぶ）のパッケージＩＤ（このパッケージＩＤは「自パッケージＩＤ」と呼ばれる）を認識することができる。ＭＰ１１１は自パッケージＩＤを、アクセス対象行のオーナＩＤ（１３２−５）及び準オーナＩＤ（１３２−６）と比較する。【０１１６】
比較の結果、自パッケージＩＤがアクセス対象行のオーナＩＤ（１３２−５）と等しい場合、自パッケージはアクセス対象ボリュームのオーナであるので、ＭＰ１１１はステップ１４１−１４の処理を実行する。自パッケージＩＤがアクセス対象行の準オーナＩＤ（１３２−６）と等しい場合、自パッケージはアクセス対象ボリュームの準オーナであるので、ＭＰ１１１はステップ１４１−１０の処理を実行する。自パッケージＩＤがアクセス対象行のオーナＩＤ（１３２−５）、準オーナＩＤ（１３２−６）のいずれとも等しくない場合には、自パッケージはアクセス対象ボリュームのオーナでもなく準オーナでもないので、ＭＰ１１１はホスト計算機３００に、Ｉ／Ｏ処理が不可能である旨を応答し（ステップ１４１−８）、処理を終了する。【０１１７】
ステップ１４１−１０では、ＭＰ１１１はアクセス対象行の非最適パスＩ／Ｏ頻度（１３２−７）を参照し、非最適パスＩ／Ｏ頻度（１３２−７）が所定の閾値を超過しているか判定する。先に述べたが、ストレージ装置１００は、準オーナである制御パッケージ１１０に多量のＩ／Ｏ要求が到来した場合、オーナを変更するよう動作する。多量のＩ／Ｏ要求が到来したか判定するために、ＭＰ１１１はアクセス対象行の非最適パスＩ／Ｏ頻度（１３２−７）の情報を用いる。準オーナである制御パッケージ１１０にＩ／Ｏ要求が到来するたびに、ＭＰ１１１は非最適パスＩ／Ｏ頻度（１３２−７）の値を１加算する処理を行う（後述するステップ１４１−１３で行われる）。そのため非最適パスＩ／Ｏ頻度（１３２−７）の情報を参照することで、準オーナである制御パッケージ１１０に多くのＩ／Ｏ要求が到来しているか判定することができる。【０１１８】
ステップ１４１−１０で、非最適パスＩ／Ｏ頻度（１３２−７）が所定の閾値を超過していないと判定された場合（ステップ１４１−１０：Ｎ）、ＭＰ１１１は非最適パスＩ／Ｏ頻度（１３２−７）を１加算し（ステップ１４１−１３）、ステップ１４１−１４の処理を実行する。【０１１９】
ステップ１４１−１０で、非最適パスＩ／Ｏ頻度（１３２−７）が所定の閾値を超過していると判定された場合（ステップ１４１−１０：Ｙ）、ＭＰ１１１はオーナ変更プログラム（１４５）を呼び出して、自パッケージを対象ボリュームのオーナに変更し、また自パッケージの隣接パッケージを、対象ボリュームの準オーナに変更する処理を行う（ステップ１４１−１１）。オーナ変更プログラム（１４５）により行われる処理の流れについては後述する。【０１２０】
ステップ１４１−１１の後、ＭＰ１１１は非最適パスＩ／Ｏ頻度（１３２−７）の値をクリアし（０にする）、その後ステップ１４１−１４の処理を実行する。【０１２１】
ステップ１４１−１４では、ＭＰ１１１は、受領したＩ／Ｏ要求がリードコマンドであるのかライトコマンドであるのか判断する。これはＩ／Ｏ要求の内容を参照することで判定できる。Ｉ／Ｏ要求がリードコマンドである場合、ステップ１４１−２０以降の処理が実行される（図１２）。Ｉ／Ｏ要求がライトコマンドである場合、ステップ１４１−３０以降の処理が実行される（図１３）。【０１２２】
ステップ１４１−２０では、ＭＰ１１１は対象ボリュームのオーナを確認し、自パッケージはアクセス対象ボリュームのオーナであるか、あるいは準オーナであるか判定する。これはステップ１４１−７で行われる処理と同様のことを行うことで判定できる。自パッケージがアクセス対象ボリュームのオーナである場合、ステップ１４１−２３の処理を実行する。自パッケージがアクセス対象ボリュームの準オーナである場合、ステップ１４１−２１の処理を実行する。【０１２３】
ステップ１４１−２１では、ＭＰ１１１は対象ボリュームのオーナである制御パッケージを特定し（アクセス対象行のオーナＩＤ（１３２−５）を参照することで特定できる）、ステップ１４１−２２ではＭＰ１１１は通信プログラム（１４６）を呼び出して、ステップ１４１−２１で特定された制御パッケージに対して、受領したＩ／Ｏ要求（リードコマンド）を転送する。そしてＩ／Ｏ要求を転送した制御パッケージから、リードデータが返送されてくるのを待つ。Ｉ／Ｏ要求が転送された制御パッケージでは、Ｉ／Ｏ要求の内容に基づいてキャッシュ領域１３４あるいはドライブ１２１からのデータリードを行い、読み出されたデータをＩ／Ｏ要求を転送した制御パッケージへと返送することになっている。【０１２４】
ステップ１４１−２１では、ＭＰ１１１はＩ／Ｏ要求（リードコマンド）で対象となっているデータがキャッシュ領域１３４に格納されているか判定する。この判定はキャッシュ管理情報１３３を参照することで行われる。データがキャッシュ領域１３４に格納されていない場合（ステップ１４１−２３：Ｎ）、ＭＰ１１１は、リードデータを格納するための領域をキャッシュ領域１３４に確保し（ステップ１４１−２４）、ドライブＩ／Ｏプログラム（１４３）を呼び出すことにより、キャッシュ領域１３４に確保された領域にデータをステージングする。【０１２５】
ステップ１４１−２６でＭＰ１１１は、ステージングされたデータ（ステップ１４１−２５が実行された場合）あるいはオーナである制御パッケージ１１０から返送されてきたデータ（ステップ１４１−２２が実行された場合）を、Ｉ／Ｏ要求（リードコマンド）の要求元であるホスト計算機３００に転送し、処理を終了する。【０１２６】
受領したＩ／Ｏ要求がライトコマンドである場合（ステップ１４１−１４：Ｙ）、ステップ１４１−３０以降の処理が実行される。ステップ１４１−３０でＭＰ１１１は、ライトコマンドの発行元であるホスト計算機３００からライトデータが送信されてくるのを待つ。送信されてきたライトデータは、一例としてチャネル制御部１１３内のバッファに格納される。【０１２７】
ライトデータの受領が完了すると、ＭＰ１１１は自パッケージの隣接パッケージを特定する（１４１−３１）。各ノードが２以内の制御パッケージ１１０で構成されている場合、ＭＰ１１１はクラスタ構成管理情報１３１を参照することにより、ノードＩＤ（１３１−２）が自パッケージの属するノードのノードＩＤと等しい、１つのパッケージＩＤを特定することができる。ここで特定されたパッケージＩＤが、隣接パッケージのパッケージＩＤである。これによりＭＰ１１１は隣接パッケージを特定する。【０１２８】
また、別の実施態様として、特に各ノードが３以上の制御パッケージ１１０で構成されている場合には、ＭＰ１１１はボリューム管理情報１３２を参照することにより、隣接パッケージを特定する。ＭＰ１１１はボリューム管理情報１３２のオーナＩＤ（１３２−５）、準オーナＩＤ（１３２−６）を参照することにより、自パッケージがオーナであるか準オーナであるか判定する。自パッケージがオーナである場合、準オーナＩＤ（１３２−６）で特定される制御パッケージ１１０が隣接パッケージである。また自パッケージが準オーナである場合、オーナＩＤ（１３２−５）で特定される制御パッケージ１１０が隣接パッケージである。【０１２９】
これ以降では、ＭＰ１１１は自パッケージのキャッシュ領域１３４にライトデータを格納する（ステップ１４１−３２、１４１−３３）とともに、隣接パッケージに対して、隣接パッケージのキャッシュ領域１３４にライトデータを格納させる処理（ステップ１４１−３２、１４１−３３）を並行して行う。【０１３０】
まず、自パッケージのキャッシュ領域１３４にライトデータを格納する処理について説明する。ステップ１４１−３２でＭＰ１１１は、ライトデータを格納するための領域をキャッシュ領域１３４上に確保し、ステップ１４１−３３では、確保した領域にライトデータを格納する。なお、ステップ１４１−３２の実行前に、ライトデータを格納するための領域が既に確保済みである場合もあり、その場合にはステップ１４１−３２で、領域を確保する必要はない。【０１３１】
隣接パッケージのキャッシュ領域１３４にライトデータを格納させる処理は、次のような処理を行う。ステップ１４１−３４でＭＰ１１１は、隣接パッケージに対してキャッシュ領域１３４上にライトデータを格納するための領域を確保するよう指示する。続いてステップ１４１−３４で、隣接パッケージに対し、確保した領域にライトデータを格納する旨の指示、及びライトデータを送信する。隣接パッケージに対する指示及びライトデータの送信は、通信プログラム（１４６）を呼び出すことにより行われる。【０１３２】
自パッケージ及び隣接パッケージのキャッシュ領域１３４へのライトデータの格納が完了すると、ＭＰ１１１はライト処理が完了した旨をホスト計算機３００に通知し（ステップ１４１−３６）、処理を終了する。【０１３３】
続いて図１４を用いて、優先パス通知プログラム（１４２）により実行される処理の流れを説明する。優先パス通知プログラム（１４２）は、ホスト計算機３００からＲＥＰＯＲＴ  ＴＡＲＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳコマンドを受け付けた時に実行される。【０１３４】
ホスト計算機３００からＲＥＰＯＲＴ  ＴＡＲＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳコマンドを受領すると（ステップ１４１−１）、ＭＰ１１１はコマンドで指定されているボリューム（以下このボリュームのことは「対象ボリューム」と呼ばれる）が存在するか判定する（ステップ１４２−２）。この判定は、ステップ１４１−２で行われるものと同様である。対象ボリュームが存在しないと判定された場合（ステップ１４２−２：Ｎ）、ホスト計算機３００に対してエラーを報告し（ステップ１４２−３）、処理を終了する。【０１３５】
対象ボリュームが存在すると判定された場合（ステップ１４２−２：Ｙ）、ステップ１４２−４以降の処理が行われる。ステップ１４２−４では、ＭＰ１１１はホスト計算機３００に対して返信するための情報を作成する。実施例１に係るストレージ装置１００では、返信用の情報のフォーマットとして、ＳＣＳＩで規定されている、ＲＥＰＯＲＴ  ＴＡＲＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳコマンドの返信用情報のフォーマットが用いられる。ただし返信用情報のフォーマットはこれに限定されない。【０１３６】
図１５に返信用情報のフォーマットを示す。返信用の情報は、対象ボリュームに対して定義されている複数のターゲットポートグループの情報を羅列したものである。先頭から４バイトの領域（フィールドＦ１４２−０）に返信用情報のデータ長が格納される。そして、先頭から９バイト目（図中、“Ｂｙｔｅ８”）以降の、フィールドＦ１４２−１ａ〜Ｆ１４２−１ｎの各領域には、各ターゲットポートグループの情報であるターゲットポートグループ記述子が格納される。なお、これ以外の情報については、本発明と直接関係しないため、説明を省略する。ステップ１４２−４では、図１５に示された返信用情報のうち、ターゲットポートグループ記述子（Ｆ１４２−１ａ〜Ｆ１４２−１ｎ）を除いた部分を作成する。【０１３７】
ターゲットポートグループ記述子の内容について、図１６を用いて説明する。ターゲットポートグループ記述子には、先頭バイトの下位４ビット部分（フィールドＦ１４２−１−０）に、当該ターゲットポートグループに属するポートの状態（先に述べた、Ａｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄ、Ａｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄ等）が格納される。具体的には、フィールドＦ１４２−１−０に、
０が格納される場合：  ポートの状態がＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄである、
１が格納される場合：  ポートの状態がＡｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄである、
２が格納される場合：  ポートの状態がＳｔａｎｄｂｙである、
Ｅ（１６進数）が格納される場合：  ポートの状態がＯｆｆｌｉｎｅである、
ことを意味する。先にも述べたが、同一のターゲットポートグループに属するポートは、すべて同じポート状態を有する。そのため、ターゲットポートグループの情報（ターゲットポートグループ記述子）の中に格納されているポート状態の情報は１種類だけである。【０１３８】
また、ターゲットポートグループ記述子の、先頭から３バイト目及び４バイト目の領域（Ｆ１４２−１−１）に、当該ターゲットポートグループのターゲットポートグループＩＤが格納され、先頭から８バイト目の領域（Ｆ１４２−１−２）に、当該ターゲットポートグループに属するポートの数が格納される。【０１３９】
またターゲットポートグループ記述子の、先頭から９バイト目以降の領域（フィールドＦ１４２−１−３１〜Ｆ１４２−１−３ｍ）に、当該ターゲットポートグループに属するポートのポートＩＤが格納される。ターゲットポートグループに属するポートが複数あれば、複数のポートＩＤが格納される。なお、これ以外の情報については、本発明と直接関係しないため、説明を省略する。【０１４０】
続いてＭＰ１１１は、上で説明したターゲットポートグループ記述子のフォーマットに従って、ターゲットポートグループ記述子を作成する（ステップ１４２−５）。具体的にはＭＰ１１１は、ポート管理情報１３５を参照することにより、ポート状態がＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄであるポートが属するターゲットポートグループのターゲットポートグループＩＤ及びポートＩＤ、ポート状態がＡｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄであるポートが属するターゲットポートグループのターゲットポートグループＩＤ及びポートＩＤ、ポート状態がＳｔａｎｄｂｙであるポートが属するターゲットポートグループのターゲットポートグループＩＤ及びポートＩＤ、ポート状態がＯｆｆｌｉｎｅであるポートが属するターゲットポートグループのターゲットポートグループＩＤ及びポートＩＤを得ることができるので、それを用いることで、ターゲットポートグループ記述子が作成できる。【０１４１】
最後にＭＰ１１１は、作成された返答用情報をホスト計算機３００に返送し（ステップ１４２−１０）、処理を終了する。【０１４２】
なお、ホスト計算機３００がストレージ装置１００に対してＲＥＰＯＲＴ  ＴＡＲＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳコマンドを発行する契機の１つには、ホスト計算機３００が起動した時がある。またホスト計算機３００が定期的に、ストレージ装置１００に対してＲＥＰＯＲＴ  ＴＡＲＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳコマンドを発行するようにしてもよい。【０１４３】
しかしそれ以外に、ストレージ装置１００でボリュームのオーナが変更された場合にも、ホスト計算機３００がストレージ装置１００に対してＲＥＰＯＲＴ  ＴＡＲＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳコマンドを発行することが望まれる。なぜならば、ボリュームのオーナである制御パッケージ１１０が変更されることは、ポート状態が変更されることと同義だからである。【０１４４】
そのためストレージ装置１００は、オーナが変更された場合、ターゲットポートグループの状態が変更された旨をホスト計算機に通知する。ホスト計算機３００はこの通知を受信すると、ストレージ装置１００に対してＲＥＰＯＲＴ  ＴＡＲＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳコマンドを発行する。【０１４５】
なお、ターゲットポートグループの状態が変更された旨をホスト計算機に通知する方法としては、様々な公知の方法を採用することができる。一例として、ＳＣＳＩ規格で規定されている、以下で示すような、エラーまたはイベント情報の取得方法が利用できる。【０１４６】
オーナが変更された場合、ストレージ装置１００はホスト計算機３００に返送されるＳＣＳＩのセンスデータとして、ＵＮＩＴ  ＡＴＴＥＮＴＩＯＮ  ＣＯＮＤＩＴＩＯＮを生成した旨を表すセンスデータを生成してホスト計算機３００に返送する。ホスト計算機３００は通常、このセンスデータを受信すると、ＲＥＱＵＥＳＴ  ＳＥＮＳＥコマンドを発行することで詳細な情報（この場合、ターゲットポートグループ状態が変更された旨の情報）を取得するよう動作する。詳細な情報の中には、ターゲットポートグループ状態が変更された旨の情報が含まれているので、ホスト計算機３００はターゲットポートグループ状態が変更されたことを検知することができる。【０１４７】
続いて、障害対処プログラム（１４４）により実施される処理の流れを、図１７を用いて説明する。先にも述べたが、障害対処プログラム（１４４）は定期的（たとえば１秒ごと、あるいは１分毎など）に実行されるプログラムである。また、他の制御パッケージ１１０で実行されている障害対処プログラム（１４４）からハートビートメッセージが送信された時、それに対して返答する処理も行われる。【０１４８】
障害対処プログラム（１４４）が開始されると、ＭＰ１１１はクラスタ構成管理情報１３１を参照し、状態（１３１−３）が「正常」であるすべての制御パッケージ１１０に対し、ハートビートメッセージを送信し、一定時間、各制御パッケージ１１０からの応答を待つ（ステップ１４４−２）。他の制御パッケージ１１０で実行されている障害対処プログラム（１４４）は、ハートビートメッセージを受信すると、返答メッセージを、ハートビートメッセージの送信元制御パッケージ１１０に対して返送する。【０１４９】
ＭＰ１１１は、ハートビートメッセージを送信した全制御パッケージ１１０から返答があった場合（ステップ１４４−３：Ｙ）、処理を終了する。ハートビートメッセージに対する返答がなかった制御パッケージ１１０が存在した場合（ステップ１４４−３：Ｙ）、ＭＰ１１１はステップ１４４−５以降の処理を実行する。ステップ１４４−５ではＭＰ１１１は、返答がなかった制御パッケージ１１０について、クラスタ構成管理情報１３１の状態（１３１−３）を「閉塞」に設定する。なお、以下では、ハートビートメッセージに対する返答がなかった制御パッケージ１１０のことを、「障害パッケージ」と呼ぶ。【０１５０】
続いてステップ１４４−６でＭＰ１１１は、ボリューム管理情報１３２を参照し、障害パッケージがオーナであったボリュームを特定する。以下、ここで特定されたボリュームのことを、「対象ボリューム」と呼ぶ。【０１５１】
ステップ１４４−７でＭＰ１１１は、自身が所属する（存在する）制御パッケージ１１０（これを「自パッケージ」と呼ぶ）と障害パッケージとが同一ノードに所属しているか判定する。同一ノードに所属していない場合（ステップ１４４−７：Ｎ）には、ＭＰ１１１は、障害パッケージが所属するノード（図１７ではこのノードのことを「障害発生ノード」と表記している）が冗長構成を維持しているか（つまり障害発生ノードに２以上の正常な制御パッケージ１１０が存在するか）、判定する（ステップ１４４−８）。障害発生ノードが冗長構成を維持している場合（ステップ１４４−８：Ｙ）には、ＭＰ１１１は、ステップ１４４−５にて「閉塞」に設定されたクラスタ構成管理情報１３１の状態（１３１−３）を、再び「正常」に戻して、障害対処プログラム（１４４）の処理を終了する（ステップ１４４−９）。【０１５２】
ステップ１４４−７で、自パッケージと障害パッケージが同一ノードに所属していると判定された場合（ステップ１４４−７：Ｙ）、ＭＰ１１１はステップ１４４−１０以降の処理を実行する。ステップ１４４−１０では、ＭＰ１１１は自身が所属するノードが冗長構成を維持しているか判定し、自身が所属するノードが冗長構成を維持している場合には、ステップ１４４−１３が実行される。ステップ１４４−１３ではＭＰ１１１は、自パッケージを対象ボリュームのオーナに、そして自パッケージの隣接パッケージのうち、正常な（閉塞状態でない）制御パッケージ１１０を対象ボリュームの準オーナにするよう、ボリューム管理情報１３２の内容を更新し、処理を終了する。【０１５３】
ステップ１４４−１０では、自身が所属するノードが冗長構成を維持していない場合、ステップ１４４−１１の判定が行われる。ステップ１４４−１１でＭＰ１１１は、自身が所属するノード以外のノードで、冗長構成を維持しているノードがあるか判定し、ある場合（ステップ１４４−１１：Ｙ）には、ＭＰ１１１は、ステップ１４４−５にて「閉塞」に設定されたクラスタ構成管理情報１３１の状態（１３１−３）を、再び「正常」に戻して、障害対処プログラム（１４４）の処理を終了する（ステップ１４４−１５）。処理を終了し、冗長構成を維持しているノードが無い場合（ステップ１４４−１１：Ｎ）には、ステップ１４４−１２の判定が行われる。【０１５４】
ステップ１４４−１２では、ＭＰ１１１は、自パッケージ以外に、状態が正常である制御パッケージ１１０が存在するか判定する。状態が正常である制御パッケージ１１０が存在する場合（ステップ１４４−１２：Ｙ）、ＭＰ１１１は、自パッケージを対象ボリュームのオーナに、そして自パッケージ以外の正常な制御パッケージ１１０を対象ボリュームの準オーナにするよう、ボリューム管理情報１３２の内容を更新し、処理を終了する。なお、自パッケージ以外の正常な制御パッケージ１１０が複数存在する場合には、複数の正常な制御パッケージ１１０のいずれが、対象ボリュームの準オーナに設定されてもよい。【０１５５】
一方、状態が正常である制御パッケージ１１０が存在しない場合（ステップ１４４−１２：Ｎ）、ＭＰ１１１は、自パッケージを対象ボリュームのオーナにするよう、ボリューム管理情報１３２の内容を更新した後、処理を終了する。またこの時、対象ボリュームの準オーナは設定しない（ボリューム管理情報１３２の準オーナＩＤ（１３２−６）に無効値を格納する）。【０１５６】
なお、ステップ１４４−８及びステップ１４４−１１の判定が肯定的だった場合には、対象ボリュームのオーナの変更は行われないようにみえる。しかし実際には、障害対処プログラム（１４４）は、他の全ての制御パッケージ１１０で実行されているため、他の制御パッケージ１１０（かつ当該制御パッケージ１１０の属するノードが冗長構成の場合）で障害対処プログラム（１４４）が実行された際に、他の制御パッケージ１１０のＭＰ１１１によって、オーナ・準オーナの変更が行われる。また、図１７の処理は一例であって、必ずしも図１７の処理フローに従ってオーナの変更をしなければならないわけではない。障害を検知した制御パッケージ１１０が、必ず対象ボリュームのオーナを変更するような処理を採用してもよい。【０１５７】
続いて、オーナ変更プログラム（１４５）により行われる処理の流れを、図１８を用いて説明する。オーナ変更プログラム（１４５）は、ボリュームＩ／Ｏプログラム（１４１）や障害対処プログラム（１４４）から呼び出されることで実行される。ボリュームＩ／Ｏプログラム（１４１）や障害対処プログラム（１４４）等の呼び出し元プログラムは、オーナ変更プログラム（１４５）を呼び出す際、オーナ変更対象のボリュームのボリュームＩＤ、変更後のオーナＩＤ、準オーナＩＤをパラメータとして指定する。【０１５８】
ステップ１４５−２では、ＭＰ１１１はボリューム管理情報１３２の中の、ボリュームＩＤ（１３２−１）が指定されたオーナ変更対象ボリュームのボリュームＩＤと等しい行（以下、この行を「対象行」と呼ぶ）について、状態１３２−２の内容を「変更中」に設定する。続いてＭＰ１１１は、対象行のオーナＩＤ（１３２−５）と準オーナＩＤ（１３２−６）に、パラメータとして指定されたオーナＩＤ、準オーナＩＤを設定する（ステップ１４５−３）。【０１５９】
ステップ１４５−３において同時に、ＭＰ１１１はポート管理情報１３５のボリュームＩＤ（１３５−０）が、指定されたオーナ変更対象ボリュームのボリュームＩＤと等しい行について、ポートグループ及びポートの情報（項目１３５−１１〜１３５−４２）を更新する。具体的にはＭＰ１１１はボリューム管理情報１３２及びクラスタ構成管理情報１３１を参照し、オーナ変更対象ボリュームのオーナとなる制御パッケージ１１０のポートのポートＩＤ及びポートグループＩＤをそれぞれ、ポートＡｃｔｉｖｅ／ｏｐｔ（１３５−１２）、ポートグループＡｃｔｉｖｅ／ｏｐｔ（１３５−１１）に格納し、オーナ変更対象ボリュームの準オーナとなる制御パッケージ１１０のポートのポートＩＤ及びポートグループＩＤをそれぞれ、ポートＡｃｔｉｖｅ／ｎｏｎｏｐｔ（１３５−２２）、ポートグループＡｃｔｉｖｅ／ｎｏｎｏｐｔ（１３５−２１）に格納する。また、オーナ変更対象ボリュームのオーナでも準オーナでもない制御パッケージ１１０のうち、正常な制御パッケージ１１０のポートのポートＩＤ及びポートグループＩＤをそれぞれ、ポートＳｔａｎｄｂｙ（１３５−３２）、ポートグループＡｃｔｉｖｅ／Ｓｔａｎｄｂｙ（１３５−３１）に格納する。さらに、オーナ変更対象ボリュームのオーナでも準オーナでもない制御パッケージ１１０のうち、閉塞状態の制御パッケージ１１０のポートのポートＩＤ及びポートグループＩＤをそれぞれ、ポートＯｆｆｌｉｎｅ（１３５−４２）、ポートグループＡｃｔｉｖｅ／Ｏｆｆｌｉｎｅ（１３５−４１）に格納する。またこの時、ポート管理情報１３５の一部の欄に設定すべき情報が存在しない場合もありえる。たとえば閉塞状態の制御パッケージ１１０が存在しない場合、ポートグループＡｃｔｉｖｅ／Ｏｆｆｌｉｎｅ（１３５−４１）、ポートＯｆｆｌｉｎｅ（１３５−４２）に格納すべき情報は存在しない。そのような場合、当該欄には無効値（ｎ／ａ）が格納される。【０１６０】
ステップ１４５−４では、オーナ変更に伴うキャッシュ領域の復旧処理が行われる。この処理の内容は後述する。最後にＭＰ１１１は、対象行の状態１３２−２の内容を「定常」に戻して、処理を終了する。【０１６１】
ステップ１４５−４で行われる、オーナ変更に伴うキャッシュ領域の復旧処理について説明する。オーナ変更が行われる際、現在オーナまたは準オーナである制御パッケージ１１０のキャッシュ領域１３４には、オーナ変更対象のボリュームのキャッシュデータが格納されていることがある。特にそのデータがダーティデータである場合、オーナを変更してしまうと、キャッシュ領域１３４に格納されたダーティデータが、ドライブ１２１に反映されなくなってしまう。またそのデータがクリーンデータであった場合、オーナを変更してしまうと、キャッシュ領域１３４に残されたクリーンデータはアクセスされることがなく、キャッシュ領域１３４を無駄に圧迫する。キャッシュ領域の復旧処理は、オーナ変更対象のボリュームのキャッシュデータに対して適切な処置を行うために、ボリュームのオーナ変更時に実施される。【０１６２】
キャッシュ領域の復旧処理では、以下の考え方に基づいて処理が行われる。
ａ）  オーナ変更対象のボリュームのダーティデータを有する制御パッケージ（オーナ変更前に、オーナまたは準オーナであった制御パッケージ）は、デステージを行う。オーナ変更前に対象ボリュームのオーナであった制御パッケージが存在する場合には、対象ボリュームのオーナであった制御パッケージがデステージを行い、オーナ変更前に対象ボリュームのオーナであった制御パッケージが存在しない場合（たとえば対象ボリュームのオーナであった制御パッケージが故障した場合）には、対象ボリュームの準オーナであった制御パッケージがデステージを行う。ただしオーナ変更後に、対象ボリュームのオーナまたは準オーナになった制御パッケージがダーティデータを有している場合（オーナ変更後に対象ボリュームのオーナまたは準オーナになった制御パッケージがいずれも、オーナ変更前に対象ボリュームの準オーナまたはオーナであった場合）はダーティデータのコピーを行う必要はない。
ｂ）  オーナ変更後の制御パッケージのうち、対象ボリュームのオーナになる制御パッケージ以外の制御パッケージからは、クリーンデータを破棄（フリー化）する
ｃ）  オーナ変更後の制御パッケージのうち、対象ボリュームのオーナでもなく準オーナでもない制御パッケージからは、全データを破棄する。【０１６３】
図１９は、各制御パッケージ１１０での、オーナ変更対象ボリュームのキャッシュデータに対して行うべき処理をまとめた表である。列１４４−３−４（１４４−３−４１、１４４−３−４２、１４４−３−４３）の各欄にはそれぞれ、制御パッケージ１１０がオーナ変更対象ボリュームのオーナに変更された場合、オーナ変更対象ボリュームの準オーナに変更された場合、オーナ変更対象ボリュームのオーナでも準オーナでもない状態に変更された場合に、オーナ変更対象ボリュームのキャッシュデータに対して行うべき処理が記載されている。【０１６４】
図１９に記載されている通り、各欄に格納される情報には、「デステージ」、「データのフリー化」、「ＮＯＰ」、「ｎ／ａ」の４種類がある。「デステージ」は、キャッシュされているダーティデータをドライブ２１にデステージすべきであることを意味する。「データのフリー化」は、キャッシュされているデータを破棄（ｆｒｅｅにする）すべきであることを意味する。また「ＮＯＰ」は、キャッシュデータに対して何の処理も行わないことを表し、「ｎ／ａ」はあり得ない状態であることを意味する。【０１６５】
列１４４−３−４（１４４−３−４１、１４４−３−４２、１４４−３−４３）のそれぞれには、９つの欄が設けられているが、行１４４−３−１１内の各欄には、故障したパッケージがなかった場合に行われるべき処理が格納されている。また行１４４−３−１２内の各欄には、オーナ変更対象ボリュームのオーナであるパッケージが故障した場合に行われるべき処理が格納されている。また行１４４−３−１３内の各欄には、オーナ変更対象ボリュームの準オーナであるパッケージが故障した場合に行われるべき処理が格納されている。【０１６６】
行１４４−３−１３を例にとって、各欄の内容を説明する。行１４４−３−１３のうち、列１４４−３−４２の３つの欄には、オーナ変更対象ボリュームの準オーナであるパッケージが故障した場合に行われるべき処理が格納されている。この３つの欄のうち、最上段の欄には、オーナ変更前にオーナ変更対象ボリュームのオーナであり、またオーナ変更後にオーナ変更対象ボリュームの準オーナである制御パッケージがとるべき処理が格納されている。この欄には「デステージ」、「データのフリー化」が格納されているので、この欄に該当する制御パッケージ１１０は、オーナ変更が行われる際、オーナ変更対象ボリュームのデータのデステージを行う。なお、この欄に該当する制御パッケージ１１０がデステージを行う理由は、当該制御パッケージ１１０が先に述べた規則ａ）に該当するからである。先に述べたとおり、新たに準オーナになった制御パッケージ１１０が最新のデータにアクセスできるようにするためである。オーナ変更対象ボリュームのオーナである制御パッケージ１１０がデステージを行わなかった場合、さらにオーナである制御パッケージ１１０に障害が発生して停止すると、デステージが行われなかったデータにアクセスできなくなる。このような事態が発生しないようにデステージが行われる。【０１６７】
また、この欄に該当する制御パッケージ１１０は、先に述べた規則ｂ）に基づき、デステージの後、オーナ変更対象ボリュームのデータのフリー化を行う。規則ｂ）に基づけば、クリーンデータのみをフリー化すれば良いのであるが、先に述べた規則ａ）に基づいてデステージが行われているため、オーナ変更対象ボリュームの全データがクリーンデータになっている。そのため、クリーンデータをフリー化することによって、全データがフリー化される。【０１６８】
２段目の欄は、オーナ変更前及びオーナ変更後にオーナ変更対象ボリュームの準オーナである制御パッケージがとるべき処理が格納される。ただし行１４４−３−１３は、オーナ変更対象ボリュームの準オーナであるパッケージが故障した場合の処理が格納される行であるから、当該欄の条件に該当する制御パッケージ１１０は存在しない。そのため当該欄には「ｎ／ａ」が格納されている。【０１６９】
３段目の欄は、オーナ変更前にオーナ変更対象ボリュームのオーナでも準オーナでもなかったが、オーナ変更後に準オーナに設定される制御パッケージがとるべき処理が格納される。ただし、オーナ変更前にオーナ変更対象ボリュームのオーナでも準オーナでもない制御パッケージには、オーナ変更対象ボリュームのデータはキャッシュされていないため、オーナ変更に伴って行うべき処理は無い。そのため当該欄には「ＮＯＰ」が格納されている。【０１７０】
キャッシュ領域の復旧処理（ステップ１４５−４）では、各制御パッケージ１１０のキャッシュ領域１３４にキャッシュされている、オーナ変更対象ボリュームのキャッシュデータに対し、図１９の各欄の内容に基づいて処理が行われる。【０１７１】
以上述べたとおり、実施例１に係るストレージ装置では、計算機システムの障害発生箇所に応じて、適切な制御パッケージを論理ボリュームのオーナとして選択することができ、かつオーナ変更後にはホスト計算機に対して、制御パッケージのポート状態（優先度）を通知するため、ホスト計算機は適切なアクセス要求発行先制御パッケージを把握することができる。また論理ボリュームのオーナとなる制御パッケージの選択の際、冗長構成を有しているノードを優先的に論理ボリュームのオーナとすることにより、ライトデータをキャッシュ領域に二重書きする際のオーバヘッドが、オーナ変更前と比べて増加しないようにしている。そのため、障害の発生に伴う論理ボリュームのオーナ変更が発生しても、アクセス性能が低下することがない。
【実施例２】
【０１７２】
続いて実施例２の説明を行う。実施例２に係る計算機システムの構成は、実施例１で説明した計算機システムと同じであるため、ここでは説明しない。また、実施例２に係るストレージ装置の構成、ストレージ装置のメモリ１１２に格納される各種情報やプログラムの種類も、実施例１で説明したストレージ装置１００のものと同様である。【０１７３】
先に述べたとおり、実施例１に係るストレージ装置１００では、障害発生箇所に応じて、ボリュームへのアクセス性能が低下しないように、適切にボリュームのオーナ、ポート状態を変更する。実施例２に係るストレージ装置１００は、実施例１に係るストレージ装置１００と同様の特徴を備えるとともに、さらに広範な障害にも対応可能である。【０１７４】
実施例１に係るストレージ装置１００における課題点の一つに、ノード単位の障害が発生した場合の対処が困難である点が挙げられる。この点について図１を用いて説明する。ストレージ装置１００内のある１つのノード、たとえばノード１３０ｐ全体が停止する障害が発生した、またはノード１３０ｐへのアクセスパスがすべて遮断された場合を想定する。この場合、残されているアクセス可能な制御パッケージ１１０は、ノード１３０ｑの制御パッケージ１１０ｃ、１１０ｄであるが、ホスト計算機３００は、ボリューム１２２ｘに対して定義されている、制御パッケージ１１０ｃ、１１０ｄのポートのポート状態はいずれも“Ｓｔａｎｄｂｙ”であると認識している。そのため、制御パッケージ１１０ａ及び１１０ｂにアクセスできなくなった場合に、ホスト計算機３００はアクセス先を制御パッケージ１１０ｃ、１１０ｄにアクセス先を切り替えることは行わないため、Ｉ／Ｏ処理が停止する。【０１７５】
実施例２に係るストレージ装置１００では、ノード単位の障害が発生した場合であっても、Ｉ／Ｏ処理が停止しないようにする。【０１７６】
実施例２に係るストレージ装置１００では、少なくとも以下の４種類のポート状態を有するように構成される。また実施例２に係るホスト計算機３００（の交替パス管理ソフトウェア３１０）は、少なくとも以下の４種類のポート状態を識別可能に構成される。
ａ）  Ａｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄ
ｂ）  Ａｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄ
ｄ）  Ｏｆｆｌｉｎｅ
ｅ）  Ａｃｔｉｖｅ／ｎｏｎ−ｐｒｅｆｅｒｒｅｄ【０１７７】
ａ）、ｂ）、ｄ）のポート状態は、実施例１で説明したものと同じ定義である。実施例２に係るストレージ装置１００では、実施例１で説明したｃ）のポート状態（Ｓｔａｎｄｂｙ）の代わりに、新たにｅ）のポート状態（Ａｃｔｉｖｅ／ｎｏｎ−ｐｒｅｆｅｒｒｅｄ）を有する。【０１７８】
ポート状態がＡｃｔｉｖｅ／ｎｏｎ−ｐｒｅｆｅｒｒｅｄの場合、リードまたはライトコマンドを受信し、正常な応答を返却可能である（つまりＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄまたはＡｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄと同様の状態である）。ただし、Ａｃｔｉｖｅ／ｎｏｎ−ｐｒｅｆｅｒｒｅｄの状態は、当該状態のポートはアクセス可能ではあるが、アクセスが推奨されないポート（他のアクセス可能な状態のポートに対してアクセス要求を発行することが推奨される）であることを意味する。つまり、Ａｃｔｉｖｅ／ｎｏｎ−ｐｒｅｆｅｒｒｅｄの状態にあるポート（あるいは制御パッケージと解してもよい）は、Ａｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄの状態にあるポート、Ａｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄの状態にあるポートに次いで、３番目にアクセス優先度の高いポート（制御パッケージ）といえる。【０１７９】
そのため交替パス管理ソフトウェア３１０は、その他の状態（つまりＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄまたはＡｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄ）のポートにアクセス可能である場合には、ポート状態がＡｃｔｉｖｅ／ｎｏｎ−ｐｒｅｆｅｒｒｅｄであるポートへのアクセスは行わないように構成されている。Ａｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄまたはＡｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄの状態のポートが存在しなくなった場合に限り、Ａｃｔｉｖｅ／ｎｏｎ−ｐｒｅｆｅｒｒｅｄ状態であるポートにアクセスする。【０１８０】
なお、上では、実施例２に係るストレージ装置１００が、実施例１で説明したｃ）のポート状態の代わりに、新たにｅ）のポート状態を有する例について説明したが、ｃ）のポート状態に加えてｅ）のポート状態を有するようにしてもよい。【０１８１】
図２０を用いて、実施例２に係るストレージ装置１００で行われる処理の概要を説明する。制御パッケージ１１０ａがボリューム１２２ｘのオーナであり、準オーナが制御パッケージ１１０ｂの場合、制御パッケージ１１０ａのポート状態はＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄで、制御パッケージ１１０ｂのポート状態はＡｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄである。さらに実施例２に係るストレージ装置１００では、ボリューム１２２ｘのオーナでも準オーナでもない制御パッケージ１１０ｃ、１１０ｄのポート状態は、Ａｃｔｉｖｅ／ｎｏｎ−ｐｒｅｆｅｒｒｅｄに設定される。【０１８２】
これにより、ホスト計算機３００が、制御パッケージ１１０ａと１１０ｂのいずれにもアクセスできない場合には、ポート状態がＡｃｔｉｖｅ／ｎｏｎ−ｐｒｅｆｅｒｒｅｄである制御パッケージ１１０ｃまたは１１０ｄのポートに対してアクセス要求を発行する。制御パッケージ１１０ｃまたは１１０ｄに到来する、ボリューム１２２ｘに対するアクセス要求は、ノード間通信路を介して、オーナである制御パッケージ１１０ａへと転送されることにより、Ｉ／Ｏ処理が行われる。【０１８３】
ノード１３０ｐ全体に障害が発生し、制御パッケージ１１０ａと１１０ｂの両方が停止した場合には、少なくともボリューム１２２ｘのオーナが変更されるまでは、制御パッケージ１１０ｃまたは１１０ｄがボリューム１２２ｘに対するアクセス要求（リード要求またはライト要求）を受け付けても、処理不可能（エラーが返却される）である。ただしこの場合、実施例１で説明したように、ボリューム１２２ｘのオーナが他の制御パッケージ１１０（図２０の構成例の場合には制御パッケージ１１０ｃまたは１１０ｄ）に変更され、オーナ変更後の制御パッケージ１１０によってＩ／Ｏ要求が処理される。【０１８４】
また実施例１で説明したように、この場合にはオーナが変更された旨の通知も、ホスト計算機３００と制御パッケージ１１０ｃまたは１１０ｄとの間のアクセスパスを介してホスト計算機３００に通知され、ホスト計算機３００はこの通知に応じて、変更後のオーナ（ポート状態）の情報をストレージ装置１００から取得することによって、制御パッケージ１１０ｃ、１１０ｄのポート状態を変更することが可能である。これによりノード１３０ｐに障害が発生した場合でも、Ｉ／Ｏが停止することがない。【０１８５】
続いて図２１〜２３を用いて、実施例２に係るボリュームＩ／Ｏプログラム（１４１）が行う処理のフローを説明する。実施例２に係るボリュームＩ／Ｏプログラム（１４１）が行う処理のフローは、実施例１に係るボリュームＩ／Ｏプログラム（１４１）が行う処理のフローと共通点が多いため、以下では相違点を中心に説明する。【０１８６】
ステップ１４１−６までの処理は、実施例１のものと同じである。【０１８７】
ステップ１４１−７’では、ＭＰ１１１は、自パッケージがアクセス対象ボリュームのオーナであるか、オーナでないか（準オーナである場合、またはオーナ・準オーナのいずれでもない場合、がある）、を判定し、オーナである場合には、ステップ１４１−１４以降の処理を実行する。オーナでない場合には、ステップ１４１−１０以降の処理を実行する。なお、ステップ１４１−１０〜ステップ１４１−１４の処理は、実施例１のものと同じである。【０１８８】
ステップ１４１−２０’では、ＭＰ１１１は対象ボリュームのオーナを確認し、自パッケージはアクセス対象ボリュームのオーナであるか、あるいはオーナでないか、を判定する。自パッケージがアクセス対象ボリュームのオーナである場合、ステップ１４１−２１の処理を実行する。自パッケージがアクセス対象ボリュームの準オーナである場合、ステップ１４１−２３の処理を実行する。ステップ１４１−２１〜ステップ１４１−２６の処理は、実施例１のものと同じである。
尚、ステップ１４１−１３での頻度情報のカウントアップの際には、準オーナのパッケージのポートを経由した場合には1を、オーナ・準オーナ以外のパッケージのポートを経由した場合には10を加算するといったように、経路によって重みをつけても良い。【０１８９】
ステップ１４１−１４において、受領したＩ／Ｏ要求がライトコマンドであると判定された場合（ステップ１４１−１４：Ｙ）、ステップ１４１−３０以降の処理が実行される。ステップ１４１−３０の処理は実施例１のものと同じである。ステップ１４１−３０の後、ＭＰ１１１はステップ１４１−３８’を実行する。【０１９０】
ステップ１４１−３８’ではＭＰ１１１は、対象ボリュームのオーナを確認し、自パッケージはアクセス対象ボリュームのオーナまたは準オーナであるか、あるいはオーナでも準オーナでもないか、判定する。自パッケージはアクセス対象ボリュームのオーナまたは準オーナである場合、ステップ１４１−３１以降の処理を実行する。ステップ１４１−３１以降の処理は、実施例１で説明したものと同じである。【０１９１】
ステップ１４１−３８’の判定で、自パッケージはアクセス対象ボリュームのオーナでも準オーナでもないと判定された場合、ＭＰ１１１は通信プログラム（１４６）を呼び出して、オーナである制御パッケージに対して受領したＩ／Ｏ要求（ライトコマンド）を転送する（ステップ１４１−３９）。そしてＩ／Ｏ要求を転送した制御パッケージからの応答を待ち、応答が帰ってきたら、処理を終了する。【０１９２】
続いて、実施例２に係る優先パス通知プログラム（１４２）により実行される処理について、実施例１で説明したものとの相違点について説明する。実施例２に係る優先パス通知プログラム（１４２）では、オーナでも準オーナでもない制御パッケージのうち、正常な制御パッケージのポート状態が、Ａｃｔｉｖｅ／ｎｏｎ−ｐｒｅｆｅｒｒｅｄである旨を返却する点が、実施例１で説明した優先パス通知プログラムと異なる。その他の点については違いがない。また、実施例１におけるポート管理情報には、ポートＳｔａｎｄｂｙ（１３５−３２）、ポートグループＡｃｔｉｖｅ／Ｓｔａｎｄｂｙ（１３５−３１）の欄があったが、実施例２に係るポート管理情報ではこれに代えて、ポートＡｃｔｉｖｅ／ｎｏｎ−ｐｒｅｆｅｒｒｅｄ、ポートグループＡｃｔｉｖｅ／ｎｏｎ−ｐｒｅｆｅｒｒｅｄの欄が設けられる。これ以外の点については実施例１で説明したポート管理情報と違いがないため、図示を省略する。【０１９３】
続いて、実施例２に係るオーナ変更プログラム（１４５）により行われる処理について、実施例１で説明したものとの相違点について説明する。実施例１に係るオーナ変更プログラム（１４５）では、ステップ１４５−３において、オーナ変更対象ボリュームのオーナでも準オーナでもない制御パッケージ１１０のうち、正常な制御パッケージ１１０のポートのポートＩＤ及びポートグループＩＤをそれぞれ、ポートＳｔａｎｄｂｙ（１３５−３２）、ポートグループＡｃｔｉｖｅ／Ｓｔａｎｄｂｙ（１３５−３１）に格納していた。実施例２ではこの処理が、オーナ変更対象ボリュームのオーナでも準オーナでもない制御パッケージ１１０のうち正常な制御パッケージ１１０のポートのポートＩＤ及びポートグループＩＤを、ポート管理テーブルのポートＡｃｔｉｖｅ／Ｓｔａｎｄｂｙ欄、ポートグループＡｃｔｉｖｅ／Ｓｔａｎｄｂｙ欄に格納する処理に変更される。その他の点については違いがない。【０１９４】
また、障害対処プログラム（１４４）により行われる処理の流れは、実施例１で説明したものと同じであるため、説明を省略する。【０１９５】
実施例２に係るストレージ装置１００は、実施例１に係るストレージ装置１００と同様の特徴を備えるとともに、ノード全体の障害が発生した場合でも業務継続を可能にすることができる。
【実施例３】
【０１９６】
続いて実施例３の説明を行う。実施例３に係る計算機システムの構成、及びストレージ装置１００が有するプログラムや管理情報の種類は、実施例１または２で説明したものと同じである。【０１９７】
実施例１または２に係るストレージ装置では、オーナ変更に伴うキャッシュ領域の復旧処理で、ボリュームのオーナまたは準オーナである制御パッケージからダーティデータをデステージすることで、オーナ変更後の制御パッケージが不整合なデータを読み出すことがないようにしていた。一方、実施例３に係るストレージ装置では、オーナ変更に伴うキャッシュ領域の復旧処理で、ボリュームのオーナまたは準オーナである制御パッケージは、オーナ変更後にボリュームのオーナまたは準オーナになる制御パッケージに対して、ノード内通信路またはノード間通信路を介してキャッシュデータを転送し、オーナ変更後にボリュームのオーナまたは準オーナになる制御パッケージのキャッシュ領域に、キャッシュデータを格納させる。【０１９８】
実施例３に係るストレージ装置で行われる処理は、実施例１で説明したキャッシュ領域の復旧処理（ステップ１４５−４）を除いては、実施例１または実施例２で説明したものと同一である。以下では、実施例３に係るストレージ装置で行われるキャッシュ領域の復旧処理についてのみ説明する。【０１９９】
図２４は、実施例３に係る各制御パッケージ１１０での、オーナ変更対象ボリュームのキャッシュデータに対して行うべき処理をまとめた表である。以下、実施例１（図１９）との相違点を中心に説明する。実施例１（図１９）ではデステージが行われていた箇所が、実施例３では新オーナ及び／または新準オーナへのデータのコピーに変更されている点が主な相違点である。【０２００】
実施例３に係る各制御パッケージ１１０で行われる処理は、以下の考え方（規則）に基づく。
１）  オーナ変更対象ボリュームのダーティデータを有する制御パッケージは、オーナ変更後にオーナ変更対象ボリュームのオーナまたは準オーナになる制御パッケージに対して、ダーティデータのコピーを行うようにする。ただしオーナ変更後の制御パッケージが明らかにダーティデータを有している場合（オーナ変更後の制御パッケージが、オーナ変更前に対象ボリュームのオーナまたは準オーナであった場合）はダーティデータのコピーを行う必要はない。
２）  制御パッケージがオーナ変更対象ボリュームのクリーンデータを有している場合、オーナ変更後にオーナ変更対象ボリュームのオーナになる制御パッケージに対して、クリーンデータをコピーする。
３）  オーナ変更後の制御パッケージのうち、オーナ変更対象ボリュームのオーナになる制御パッケージ以外の制御パッケージからは、クリーンデータを破棄する。
４）  オーナ変更後の制御パッケージのうち、オーナ変更対象ボリュームのオーナでもなく準オーナでもない制御パッケージからは、全データを破棄する。【０２０１】
上の規則３）、４）は、実施例１で説明した規則ｂ）、ｃ）と同じ規則である。また上の規則１）、２）は、実施例３で設けられている新たな規則である。この規則１）、２）により、オーナ変更後にオーナ変更対象ボリュームのオーナまたは準オーナになる制御パッケージに対して、ダーティデータがコピーされ、またオーナ変更後にオーナ変更対象ボリュームのオーナになる制御パッケージに対して、クリーンデータがコピーされる。【０２０２】
以上で実施例３に係るストレージ装置の説明を終了する。実施例１または２に係るストレージ装置では、オーナ変更に伴うキャッシュ領域の復旧処理で、ボリュームのオーナまたは準オーナである制御パッケージからダーティデータをデステージすることで、オーナ変更後の制御パッケージが不整合なデータを読み出すことがないようにしていた。その結果、オーナ変更前はキャッシュ領域に格納されていたデータを、オーナ変更後の制御パッケージはドライブにアクセスして読み出す必要があったため、アクセス性能が低下するという問題がある。【０２０３】
実施例３に係るストレージ装置では、オーナ変更に伴うキャッシュ領域の復旧処理で、ボリュームのオーナまたは準オーナである制御パッケージは、オーナ変更後にボリュームのオーナまたは準オーナになる制御パッケージに対して、ノード内通信路またはノード間通信路を介してキャッシュデータを転送し、オーナ変更後にボリュームのオーナまたは準オーナになる制御パッケージのキャッシュ領域に、キャッシュデータを格納させる。これにより、オーナ変更後にボリュームのオーナまたは準オーナになる制御パッケージが、不整合なデータを読み出すことはなく、かつドライブからデータを読み出す必要もなくなるため、アクセス性能が向上する。【０２０４】
以上、実施例を説明してきたが、これは本発明の説明のための例示であって、本発明を上で説明した実施例に限定する趣旨ではない。本発明は、他の種々の形態でも実施可能である。【０２０５】
たとえば、上で説明した実施例では、ストレージ装置は各ボリュームに対して定められたポートの状態及びターゲットポートグループＩＤの情報を、ポート管理情報１３５に格納して管理し、ボリュームのオーナが変更されるたびに、ポート管理情報１３５に格納されているポートの状態の情報を更新している。そしてストレージ装置はホスト計算機からＲＥＰＯＲＴ  ＴＡＲＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳコマンドを受信すると、ポート管理情報１３５に格納されている情報をもとに返答用情報を作成して、ホスト計算機に返答用情報を返送している。ただし本発明は、ポート管理情報１３５によって各ポートの状態を管理する態様に限定されない。【０２０６】
上で述べたとおり、ボリュームのオーナである制御パッケージのポートの状態がＡｃｔｉｖｅ／ｏｐｔｉｍｉｚｅｄであり、ボリュームの準オーナである制御パッケージのポートの状態がＡｃｔｉｖｅ／ｎｏｎ−ｏｐｔｉｍｉｚｅｄであり、ボリュームのオーナでも準オーナでもない制御パッケージのうち、正常な制御パッケージのポートの状態がＳｔａｎｄｂｙ（あるいはＡｃｔｉｖｅ／ｎｏｎ−ｐｒｅｆｅｒｒｅｄ）である、という関係にある。つまり、制御パッケージの状態（正常か閉塞中か）についての情報、及びボリュームのオーナまたは準オーナである制御パッケージの情報が分かっていれば、各ポートの状態は一意に決定される。【０２０７】
そのため、ストレージ装置でポート管理情報１３５を管理せず、ストレージ装置がホスト計算機からＲＥＰＯＲＴ  ＴＡＲＧＥＴ  ＰＯＲＴ  ＧＲＯＵＰＳコマンドを受信した時点で、クラスタ構成管理情報１３１とボリューム管理情報１３２に格納されている内容に基づいて、返答用情報を作成、返信するという処理を行うようにしてもよい。【０２０８】
また、ストレージ装置の構成は、上の実施例で説明した構成に限定されない。たとえば上で説明した実施例２に係るストレージ装置において、各ノード内に、ノード内の各制御パッケージからアクセス可能な、２つの共有キャッシュ領域を設ける構成にし、各ノードがライトデータを、この２つの共有キャッシュ領域に格納するような構成を採用してもよい。【０２０９】
また実施例においてプログラムとして記載されている構成物は、ハードワイヤードロジックなどを用いたハードウェアによって実現してもよい。また実施例中の各プログラムを、ＣＤ−ＲＯＭ、ＤＶＤ等の記憶媒体に格納して提供する形態をとることも可能である。
【符号の説明】
【０２１０】
１００:  ストレージ装置
１１０:  制御パッケージ
１１１:  ＭＰ
１１２:  メモリ
１１３:  チャネル制御部
１１４:  ドライブ制御部
１１５:  通信制御部
１１６:  内部スイッチ
１２１:  ドライブ
１２５:  バックエンドネットワーク
２００:  スイッチ
３００:  ホスト計算機
３０１:  ＭＰ
３０２:  メモリ
３０３:  ＨＢＡ
【図１】
2016013116.tif 000003
【図２】
2016013116.tif 000004
【図３】
2016013116.tif 000005
【図４】
2016013116.tif 000006
【図５】
2016013116.tif 000007
【図６】
2016013116.tif 000008
【図７】
2016013116.tif 000009
【図８】
2016013116.tif 000010
【図９】
2016013116.tif 000011
【図１０】
2016013116.tif 000012
【図１１】
2016013116.tif 000013
【図１２】
2016013116.tif 000014
【図１３】
2016013116.tif 000015
【図１４】
2016013116.tif 000016
【図１５】
2016013116.tif 000017
【図１６】
2016013116.tif 000018
【図１７】
2016013116.tif 000019
【図１８】
2016013116.tif 000020
【図１９】
2016013116.tif 000021
【図２０】
2016013116.tif 000022
【図２１】
2016013116.tif 000023
【図２２】
2016013116.tif 000024
【図２３】
2016013116.tif 000025
【図２４】
2016013116.tif 000026
【手続補正書】
【提出日】平成28年10月19日(2016.10.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ホスト計算機からの要求を処理するための複数の制御ノードと、１以上のボリュームを有するストレージ装置において、
前記複数の制御ノードのそれぞれは、プロセッサ、メモリ、ホスト計算機からのアクセスを受け付けるポート、とを有する制御パッケージを複数有し、
前記制御ノード内の各制御パッケージ同士は、第１の通信路を介して相互接続され、
前記制御パッケージは、前記制御パッケージの属する前記制御ノードと異なる制御ノードが有する制御パッケージと、前記第１の通信路よりも性能が低い第２の通信路を介して相互接続され、
前記ホスト計算機から前記ボリュームには、前記複数の制御パッケージのうち少なくとも２以上の制御パッケージのいずれを介してもアクセス可能であって、前記少なくとも２以上の制御パッケージの各々には、前記ホスト計算機から前記ボリュームに対してアクセス要求を発行する際の優先度が定められており、
前記ストレージ装置は障害を検知した時、障害発生部位に応じて前記制御パッケージに定められている前記優先度を変更し、変更された前記優先度を前記ホスト計算機に通知する、
ことを特徴とする、ストレージ装置。
【請求項２】
前記１以上のボリュームの各々について、オーナである前記制御パッケージが定められており、前記オーナである前記制御パッケージは、前記ホスト計算機から到来する前記ボリュームに対するＩ／Ｏ要求を処理するよう構成されており、
前記ストレージ装置は障害を検知した時、障害発生部位に応じて、前記ボリュームのオーナとなる前記制御パッケージを変更し、前記ボリュームのオーナとなる前記制御パッケージの前記優先度を最も高い優先度に変更し、変更された前記優先度を前記ホスト計算機に通知する、
ことを特徴とする、請求項１に記載のストレージ装置。
【請求項３】
前記ボリュームのオーナとなる前記制御パッケージの障害を検知した場合と、前記ボリュームのオーナとなる前記制御パッケージと前記ホスト計算機との間のアクセス経路の障害を検知した場合とで、それぞれ異なる制御パッケージを前記ボリュームのオーナに変更する、
ことを特徴とする、請求項２に記載のストレージ装置。
【請求項４】
前記ボリュームのオーナとなる前記制御パッケージに障害が発生したことを検知した場合、
前記障害が発生した前記制御パッケージの属する前記制御ノードに、複数の正常な前記制御パッケージが存在しないときは、前記障害が発生した前記制御パッケージの属する前記制御ノードと異なる制御ノードが有する前記制御パッケージを、前記ボリュームのオーナにする、
ことを特徴とする、請求項３に記載のストレージ装置。
【請求項５】
前記ボリュームのオーナとなる前記制御パッケージと前記ホスト計算機との間のアクセス経路に障害が発生したことを検知した場合、
前記障害が発生した前記制御パッケージの属する前記制御ノードと同一の制御ノードが有する前記制御パッケージを、前記ボリュームのオーナにする、
ことを特徴とする、請求項３に記載のストレージ装置。
【請求項６】
前記ボリュームのオーナでない前記制御パッケージが、前記ホスト計算機からの前記ボリュームに対するアクセス要求を所定の閾値以上受信した時、
前記ボリュームのオーナとなる前記制御パッケージと前記ホスト計算機との間のアクセス経路に障害が発生したと判断する、
ことを特徴とする、請求項５に記載のストレージ装置。
【請求項７】
前記ストレージ装置は、前記ボリュームのオーナとなる前記制御パッケージの前記優先度を最も高く定め、前記ボリュームのオーナとなる前記制御パッケージと同一制御ノードに属する制御パッケージの前記優先度を２番目に高く定め、前記ボリュームのオーナとなる前記制御パッケージと異なる制御ノードに属する制御パッケージの前記優先度を３番目に高く定めており、
前記ストレージ装置は、前記ボリュームのオーナとなる前記制御パッケージの属する制御ノードの全ての前記制御パッケージがアクセス要求を受け付けられない場合、前記３番目に優先度の高い前記制御パッケージが、前記ホスト計算機からの前記ボリュームに対するアクセス要求を受け付け、
前記３番目に優先度の高い前記制御パッケージは、前記第２の通信路を介して、前記アクセス要求を前記ボリュームのオーナとなる前記制御パッケージに転送する、
ことを特徴とする、請求項２に記載のストレージ装置。
【請求項８】
前記制御パッケージ内の前記メモリの一部の領域は、前記ボリュームのデータをキャッシュするためのキャッシュ領域として構成されており、
前記ホスト計算機から前記ボリュームに対するライト要求を受信した時、前記ボリュームのオーナである、第１の前記制御パッケージが、前記第１の前記制御パッケージ内のキャッシュ領域にライトデータを格納するとともに、前記ボリュームに対するライトデータの複製を格納する役割を有する準オーナであると定められている第２の前記制御パッケージに、前記ライトデータを前記第２の前記制御パッケージ内の前記キャッシュ領域に格納させる、
ことを特徴とする、請求項２に記載のストレージ装置。
【請求項９】
前記ストレージ装置は、前記ボリュームのオーナとなる前記制御パッケージに障害が発生したことを検知した場合、
前記障害が発生した前記制御パッケージの属する前記制御ノードに、複数の正常な前記制御パッケージが存在しないときは、前記障害が発生した前記制御パッケージの属する前記制御ノードと異なる制御ノードが有する前記制御パッケージを、前記ボリュームのオーナにし、
前記ボリュームの準オーナと定められている前記第２の前記制御パッケージ内の前記キャッシュ領域に格納されているダーティデータを、前記ボリュームを構成する記憶デバイスにデステージする、
ことを特徴とする、請求項８に記載のストレージ装置。
【請求項１０】
前記ストレージ装置は、前記ボリュームのオーナでない前記制御パッケージが、前記ホスト計算機からの前記ボリュームに対するアクセス要求を所定の閾値以上受信した時、
前記ボリュームのオーナでない前記制御パッケージを、前記ボリュームのオーナに変更し、
前記ボリュームのオーナでない前記制御パッケージの属する前記制御ノードと同一の制御ノードが有する前記制御パッケージを、前記ボリュームの準オーナに変更し、
前記変更の結果、前記ボリュームのオーナであった前記制御パッケージが、前記ボリュームのオーナでも準オーナでもなくなった場合には、前記ボリュームのオーナであった前記制御パッケージ内の前記キャッシュ領域に格納されているダーティデータを、前記ボリュームを構成する記憶デバイスにデステージする、
ことを特徴とする、請求項８に記載のストレージ装置。
【請求項１１】
前記ストレージ装置は、前記ボリュームのオーナとなる前記制御パッケージに障害が発生したことを検知した場合、
前記障害が発生した前記制御パッケージの属する前記制御ノードに、複数の正常な前記制御パッケージが存在しないときは、前記障害が発生した前記制御パッケージの属する前記制御ノードと異なる制御ノードが有する前記制御パッケージを、前記ボリュームのオーナにし、
前記ボリュームの準オーナであった前記制御パッケージ内の前記キャッシュ領域に格納されているダーティデータを、前記ボリュームのオーナにされた前記制御パッケージ内の前記キャッシュ領域にコピーする、
ことを特徴とする、請求項８に記載のストレージ装置。
【請求項１２】
前記ストレージ装置は、前記ボリュームのオーナでない前記制御パッケージが、前記ホスト計算機からの前記ボリュームに対するアクセス要求を所定の閾値以上受信した時、
前記ボリュームのオーナでない前記制御パッケージを、前記ボリュームのオーナに変更し、
前記ボリュームのオーナに変更された前記制御パッケージの属する前記制御ノードと同一の制御ノードが有する前記制御パッケージを、前記ボリュームの準オーナに変更し、
前記変更の結果、前記ボリュームのオーナであった前記制御パッケージが、前記ボリュームの準オーナに変更された場合には、前記ボリュームのオーナであった前記制御パッケージ内の前記ボリュームに対応するデータのうち、クリーンデータを、前記ボリュームのオーナに変更された前記制御パッケージ内の前記キャッシュ領域にコピーし、
前記変更の結果、前記ボリュームのオーナであった前記制御パッケージが、前記ボリュームのオーナでも準オーナでもなくなった場合には、前記ボリュームのオーナであった前記制御パッケージ内の前記ボリュームに対応するデータを全て、前記ボリュームのオーナに変更された前記制御パッケージ内の前記キャッシュ領域にコピーする、
ことを特徴とする、請求項８に記載のストレージ装置。
【請求項１３】
ホスト計算機と、前記ホスト計算機からの要求を処理する複数の制御ノードと１以上のボリュームを有するストレージ装置とを有する計算機システムにおいて、
前記複数の制御ノードのそれぞれは、プロセッサ、メモリ、前記ホスト計算機からのアクセスを受け付けるポート、とを有する制御パッケージを複数有し、
前記制御ノード内の各制御パッケージ同士は、第１の通信路を介して相互接続され、
前記制御パッケージは、前記制御パッケージの属する前記制御ノードと異なる制御ノードが有する各制御パッケージと、前記第１の通信路よりも伝送路容量が低い第２の通信路を介して相互接続され、
前記ホスト計算機から前記ボリュームには、前記複数の制御パッケージのうち少なくとも２以上の制御パッケージのいずれを介してもアクセス可能であって、前記少なくとも２以上の制御パッケージの各々には、前記ホスト計算機から前記ボリュームに対してアクセス要求を発行する際の優先度が定められており、
前記ストレージ装置は障害を検知した時、障害発生部位に応じて前記制御パッケージに定められている前記優先度を変更し、変更された前記優先度を前記ホスト計算機に通知し、
前記ホスト計算機は、前記ストレージ装置から通知された前記優先度に基づいて、前記ボリュームに対するアクセス要求の発行先である前記制御パッケージを選択する、
ことを特徴とする、計算機システム。
【請求項１４】
前記ホスト計算機は、前記優先度の最も高い前記制御パッケージに対して、前記ボリュームに対するアクセス要求を発行する、
ことを特徴とする、請求項１３に記載の計算機システム。
【請求項１５】
前記ストレージ装置では、前記１以上のボリュームの各々について、オーナである前記制御パッケージが定められており、前記オーナである前記制御パッケージは、前記ホスト計算機から到来する前記ボリュームに対するＩ／Ｏ要求を処理するよう構成されており、
前記ストレージ装置は、前記ボリュームのオーナとなる前記制御パッケージの前記優先度を最も高く定め、前記ボリュームのオーナとなる前記制御パッケージと同一制御ノードに属する少なくとも１以上の制御パッケージの前記優先度を、２番目に高く定めており、
前記ホスト計算機は、前記優先度の最も高い前記制御パッケージに対して、前記ボリュームに対するアクセス要求を発行できない場合、前記２番目に優先度の高い前記制御パッケージに対して、前記ボリュームに対するアクセス要求を発行する、
ことを特徴とする、請求項１４に記載の計算機システム。
【国際調査報告】
2016013116.tif 000027
2016013116.tif 000028
2016013116.tif 000029