(57)【要約】【課題】通信エラーが検出される回数を減少させる。【解決手段】制御部１ｂは、仮想ボリュームＶＬ１，ＶＬ２，ＶＬ３，・・・のうち仮想ボリュームＶＬ１に対するアクセス要求に応じて記憶装置２にアクセスしたときに通信エラーを検出した場合、仮想ボリュームＶＬ１に対応する使用パスを切り替えて記憶装置２に再度アクセスするとともに、エラー検出情報１１に基づいて仮想ボリューム群ＧＰ１，ＧＰ２の中から特定仮想ボリューム群ＧＰ１を特定する。ここで、仮想ボリューム群ＧＰ１，ＧＰ２のそれぞれは、仮想ボリュームＶＬ１と設定値が一致する他の仮想ボリュームを、抽出条件として異なる設定項目をそれぞれ用いることによって抽出される。制御部１ｂは、特定仮想ボリューム群ＧＰ１に含まれる仮想ボリュームＶＬ２，ＶＬ３のうち、通信エラーが検出されていないすべての仮想ボリュームについて、使用パスを切り替える。【選択図】図１
2019003586.tif 000002
【特許請求の範囲】
【請求項１】
複数のアクセスパスを介して記憶装置と接続されたストレージ制御装置において、
前記記憶装置の記憶領域を用いて実現される複数の仮想ボリュームのそれぞれに対するアクセス要求に応じて前記記憶装置にアクセスしたときに通信エラーが検出されたか否かを示す情報が、前記複数の仮想ボリュームのそれぞれについて登録されたエラー検出情報と、複数の設定項目のそれぞれに対応する設定値が、前記複数の仮想ボリュームのそれぞれについて登録された設定情報と、を記憶し、前記複数の設定項目は、前記複数のアクセスパスのうち前記記憶装置にアクセスする際に使用される使用パスに関するパス設定項目を含む、記憶部と、制御部とを有し、
前記制御部は、
前記複数の仮想ボリュームのそれぞれに対するアクセスが要求された場合、前記パス設定項目に対応する設定値に基づいて前記記憶装置にアクセスし、
前記複数の仮想ボリュームのうち第１の仮想ボリュームに対するアクセス要求に応じて前記記憶装置にアクセスしたときに通信エラーを検出した場合、前記第１の仮想ボリュームに対応する前記使用パスを切り替えて前記記憶装置に再度アクセスし、
前記エラー検出情報に基づいて複数の仮想ボリューム群の中から特定仮想ボリューム群を特定し、前記複数の仮想ボリューム群のそれぞれは、前記設定情報に基づき、前記複数の仮想ボリュームのうち前記第１の仮想ボリュームと設定値が一致する第２の仮想ボリュームを、抽出条件として前記複数の設定項目のうち異なる設定項目をそれぞれ用いることによって抽出され、
前記特定仮想ボリューム群に含まれる前記第２の仮想ボリュームのうち、前記通信エラーが検出されていないすべての仮想ボリュームについて、前記使用パスを切り替える、
ストレージ制御装置。
【請求項２】
前記複数の設定項目は、前記パス設定項目を複数含み、
前記抽出条件として異なる前記パス設定項目が用いられる、
請求項１記載のストレージ制御装置。
【請求項３】
前記複数の設定項目は、前記複数の仮想ボリュームがそれぞれ属するＲＡＩＤ（Redundant Array of Inexpensive Disks）グループを示すＲＡＩＤ設定項目を含み、
前記抽出条件の１つとして前記ＲＡＩＤ設定項目が用いられる、
請求項１または２記載のストレージ制御装置。
【請求項４】
前記通信エラーとして、前記記憶装置へのアクセス要求のリトライアウトによるエラーが含まれる、
請求項１乃至３のいずれか１項に記載のストレージ制御装置。
【請求項５】
前記特定仮想ボリューム群として、前記エラー検出情報に基づき、前記複数の仮想ボリューム群の中から、前記第２の仮想ボリュームのうち所定割合以上の仮想ボリュームにおいて前記通信エラーが検出されている前記仮想ボリューム群が特定される、
請求項１乃至４のいずれか１項に記載のストレージ制御装置。
【請求項６】
前記特定仮想ボリューム群の特定では、前記複数の仮想ボリューム群のそれぞれをあらかじめ決められた選択順にしたがって選択し、選択された前記仮想ボリューム群に含まれる前記第２の仮想ボリュームのうち前記所定割合以上の仮想ボリュームにおいて前記通信エラーが検出されているかを判定することで前記特定仮想ボリューム群を特定し、
前記使用パスの切り替えでは、前記選択順にしたがって先に特定された前記特定仮想ボリューム群を前記使用パスの切り替え対象とする、
請求項５記載のストレージ制御装置。
【請求項７】
複数のアクセスパスを介して記憶装置と接続されたコンピュータに、
複数の設定項目のそれぞれに対応する設定値が、前記複数の仮想ボリュームのそれぞれについて登録された設定情報を参照し、前記複数の設定項目は、前記複数のアクセスパスのうち前記記憶装置にアクセスする際に使用される使用パスに関するパス設定項目を含み、
前記記憶装置の記憶領域を用いて実現される複数の仮想ボリュームのそれぞれに対するアクセスが要求された場合、前記パス設定項目に対応する設定値に基づいて前記記憶装置にアクセスし、
前記複数の仮想ボリュームのうちの第１の仮想ボリュームに対するアクセス要求に応じて前記記憶装置にアクセスしたときに通信エラーを検出した場合、前記第１の仮想ボリュームに対応する前記使用パスを切り替えて前記記憶装置に再度アクセスし、
前記複数の仮想ボリュームのそれぞれに対するアクセス要求に応じて前記記憶装置にアクセスしたときに前記通信エラーが検出されたか否かを示す情報が、前記複数の仮想ボリュームのそれぞれについて登録されたエラー検出情報に基づいて、複数の仮想ボリューム群の中から特定仮想ボリューム群を特定し、前記複数の仮想ボリューム群のそれぞれは、前記設定情報に基づき、前記複数の仮想ボリュームのうち前記第１の仮想ボリュームと設定値が一致する第２の仮想ボリュームを、抽出条件として前記複数の設定項目のうち異なる設定項目をそれぞれ用いることによって抽出され、
前記特定仮想ボリューム群に含まれる前記第２の仮想ボリュームのうち、前記通信エラーが検出されていないすべての仮想ボリュームについて、前記使用パスを切り替える、
処理を実行させるパス切り替え制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置およびパス切り替え制御プログラムに関する。
【背景技術】
【０００２】
仮想ボリュームは、記憶装置が備える物理記憶領域によって実現される仮想的な記憶領域である。ストレージシステムでは、仮想ボリュームを必要に応じて生成し、生成された仮想ボリュームに対するホスト装置からのアクセス要求を受け付けるようにすることで、物理記憶領域を効率的に使用できる。
【０００３】
仮想ボリュームに対応する物理記憶領域は、仮想ボリュームに対するアクセス要求を受け付ける制御装置の外部に接続された記憶装置に実装されていてもよい。この場合、制御装置は、仮想ボリュームに対するアクセス要求を受け付けると、記憶装置にアクセスして、仮想ボリュームに対応する物理記憶領域に対するＩＯ（Input／Output）処理を実行する。
【０００４】
また、制御装置の外部に記憶装置が接続される構成では、制御装置と記憶装置との間のアクセスパスを冗長化することもできる。このような例として、複数のアクセスパスに優先度が付与され、使用中のアクセスパスに障害が発生すると、次に優先度の高いアクセスパスが選択されるストレージシステムが提案されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−１７８８１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、仮想ボリュームに対するアクセス要求に応じて記憶装置にアクセスする際に検出される通信エラーとしては、アクセスの前に検出可能な通信エラーと、アクセスを実行した後に検出される通信エラーとがある。
【０００７】
後者の通信エラーが検出された場合、制御装置は、例えば、使用するアクセスパスを切り替えて記憶装置に再度アクセスする。また、後者の通信エラーとして、アクセスのリトライアウトによって検出される通信エラーもある。この場合には、制御装置は、通信エラーが検出されるまで複数回、記憶装置にアクセスする。いずれの場合でも、アクセスを実行した後に通信エラーが検出されると、制御装置から記憶装置へのアクセス回数が増加してしまう。その結果、仮想ボリュームに対するアクセスが要求されてから応答するまでの応答時間が長くなり、応答性能が低下するという問題がある。
【０００８】
したがって、制御装置から記憶装置へのアクセス回数を抑制するためには、アクセスを実行した後に通信エラーが検出される回数を減少させることが課題となる。
１つの側面では、本発明は、通信エラーが検出される回数を減少させることが可能なストレージ制御装置およびパス切り替え制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
１つの案では、記憶部と制御部とを有する次のようなストレージ制御装置が提供される。記憶部は、記憶装置の記憶領域を用いて実現される複数の仮想ボリュームのそれぞれに対するアクセス要求に応じて記憶装置にアクセスしたときに通信エラーが検出されたか否かを示す情報が、複数の仮想ボリュームのそれぞれについて登録されたエラー検出情報と、複数の設定項目のそれぞれに対応する設定値が、複数の仮想ボリュームのそれぞれについて登録された設定情報と、を記憶する。ここで、複数の設定項目は、複数のアクセスパスのうち記憶装置にアクセスする際に使用される使用パスに関するパス設定項目を含む。制御部は、複数の仮想ボリュームのそれぞれに対するアクセスが要求された場合、パス設定項目に対応する設定値に基づいて記憶装置にアクセスする。また、制御部は、複数の仮想ボリュームのうち第１の仮想ボリュームに対するアクセス要求に応じて記憶装置にアクセスしたときに通信エラーを検出した場合、第１の仮想ボリュームに対応する使用パスを切り替えて記憶装置に再度アクセスする。また、制御部は、エラー検出情報に基づいて複数の仮想ボリューム群の中から特定仮想ボリューム群を特定する。ここで、複数の仮想ボリューム群のそれぞれは、設定情報に基づき、複数の仮想ボリュームのうち第１の仮想ボリュームと設定値が一致する第２の仮想ボリュームを、抽出条件として複数の設定項目のうち異なる設定項目をそれぞれ用いることによって抽出される。また、制御部は、特定仮想ボリューム群に含まれる第２の仮想ボリュームのうち、通信エラーが検出されていないすべての仮想ボリュームについて、使用パスを切り替える。
【００１０】
また、１つの案では、上記のストレージ制御装置と同様の処理をコンピュータに実行させるパス切り替え制御プログラムが提供される。
【発明の効果】
【００１１】
１つの側面では、通信エラーが検出される回数を減少させることができる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態に係るストレージシステムの構成例および処理例を示す図である。
【図２】第２の実施の形態に係るストレージシステムの構成例を示す図である。
【図３】ＣＭのハードウェア構成例を示す図である。
【図４】仮想ボリューム、ＲＡＩＤグループおよびアクセスパスの構成例を示す図である。
【図５】ＣＭが有する処理機能の構成例を示すブロック図である。
【図６】ある仮想ボリュームへのアクセスが要求された場合の処理手順についての比較例を示すシーケンス図である。
【図７】ボリューム管理テーブルのデータ構成例を示す図である。
【図８】仮想ボリュームのＩＯ制御処理の例を示すフローチャート（その１）である。
【図９】仮想ボリュームのＩＯ制御処理の例を示すフローチャート（その２）である。
【図１０】経路異常によるエラー検出時に対応する事前パス切り替え処理の例を示すフローチャートである。
【図１１】ボリューム異常によるエラー検出時に対応する事前パス切り替え処理の例を示すフローチャート（その１）である。
【図１２】ボリューム異常によるエラー検出時に対応する事前パス切り替え処理の例を示すフローチャート（その２）である。
【図１３】同一のＲＡＩＤグループに属する仮想ボリュームについてパス切り替えが行われる場合の例を示す図である。
【図１４】同一の相手ポートを用いる仮想ボリュームについてパス切り替えが行われる場合の例を示す図である。
【図１５】同一の自ポートを用いる仮想ボリュームについてパス切り替えが行われる場合の例を示す図である。
【発明を実施するための形態】
【００１３】
以下、本発明の実施の形態について図面を参照して説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係るストレージシステムの構成例および処理例を示す図である。図１に示すストレージシステムは、ストレージ制御装置１と記憶装置２を有する。また、ストレージ制御装置１と記憶装置２とは、複数のアクセスパスを介して接続されている。例えば、ストレージ制御装置１は、記憶装置２と通信するためのポートＰＴ１，ＰＴ２を有し、記憶装置２は、ストレージ制御装置１と通信するためのポートＰＴ３〜ＰＴ６を有する。そして、ストレージ制御装置１と記憶装置２との間のアクセスパスとして、ポートＰＴ１，ＰＴ３、ポートＰＴ１，ＰＴ４、ポートＰＴ２，ＰＴ５、ポートＰＴ２，ＰＴ６をそれぞれ経由するアクセスパスが存在するものとする。
【００１４】
さらに、ストレージシステムにおいては、記憶装置２の記憶領域を用いて実現される仮想ボリュームＶＬ１，ＶＬ２，ＶＬ３，・・・が設定されている。ストレージ制御装置１は、仮想ボリュームＶＬ１，ＶＬ２，ＶＬ３，・・・に対するアクセス要求を受け付ける機能を有する。例えば、ストレージ制御装置１は、図示しないホスト装置から、仮想ボリュームＶＬ１，ＶＬ２，ＶＬ３，・・・に対するアクセス要求を受け付ける。
【００１５】
ストレージ制御装置１は、記憶部１ａと制御部１ｂを有する。記憶部１ａは、例えば、ストレージ制御装置１が備える図示しない記憶装置の記憶領域として実装される。制御部１ｂは、例えば、ストレージ制御装置１が備える図示しないプロセッサとして実装される。
【００１６】
記憶部１ａには、エラー検出情報１１と設定情報１２が記憶される。
エラー検出情報１１には、仮想ボリュームＶＬ１，ＶＬ２，ＶＬ３，・・・のそれぞれに対するアクセス要求に応じて記憶装置２にアクセスしたときに通信エラーが検出されたか否かを示す情報が、仮想ボリュームＶＬ１，ＶＬ２，ＶＬ３，・・・のそれぞれについて登録されている。図１に示すエラー検出情報１１の例では、仮想ボリュームＶＬ１については通信エラーが検出されておらず、仮想ボリュームＶＬ２については通信エラーが検出されていることが登録されている。
【００１７】
設定情報１２には、複数の設定項目にそれぞれ対応する設定値が仮想ボリュームＶＬ１，ＶＬ２，ＶＬ３，・・・のそれぞれについて登録されている。このような設定項目としては、少なくとも、記憶装置２との間の複数のアクセスパスのうち、記憶装置２にアクセスする際に使用される使用パスに関するパス設定項目が用いられる。換言すると、設定情報１２には、少なくとも、記憶装置２との間の複数のアクセスパスのうち記憶装置２にアクセスする際に使用される使用パスに関する設定情報が、仮想ボリュームＶＬ１，ＶＬ２，ＶＬ３，・・・のそれぞれについて設定されている。
【００１８】
図１に示す設定情報１２の例では、「自ポート」および「相手ポート」という設定項目に対応する設定値が設定されている。「自ポート」は、使用パス上に含まれるポートのうちストレージ制御装置１側のポートを示し、「相手ポート」は、使用パス上に含まれるポートのうち記憶装置２側のポートを示す。したがって、「自ポート」、「相手ポート」のいずれも、使用パスに関するパス設定項目の１つである。
【００１９】
図１の例では、仮想ボリュームＶＬ１の使用パスとして、ポートＰＴ１，ＰＴ３を経由するアクセスパスが使用パスとして設定されているとする。この場合、図１に示すように、設定情報１２では、仮想ボリュームＶＬ１についての「自ポート」、「相手ポート」にそれぞれ「ＰＴ１」，「ＰＴ３」が設定される。また、図１の例では、仮想ボリュームＶＬ２の使用パスとして、ポートＰＴ２，ＰＴ５を経由するアクセスパスが使用パスとして設定されているとする。この場合、図示しないが、設定情報１２では、仮想ボリュームＶＬ１についての「自ポート」、「相手ポート」にそれぞれ「ＰＴ２」，「ＰＴ５」が設定される。
【００２０】
制御部１ｂは、仮想ボリュームＶＬ１，ＶＬ２，ＶＬ３，・・・のそれぞれに対するアクセスが要求された場合、設定情報１２の設定項目のうち使用パスに関するパス設定項目に対応する設定値に基づいて、記憶装置２にアクセスする。例えば、制御部１ｂは、仮想ボリュームＶＬ１に対するアクセスが要求された場合、「自ポート」、「相手ポート」にそれぞれ設定された「ＰＴ１」、「ＰＴ３」に基づいて、ポートＰＴ１，ＰＴ３を経由するアクセスパスを使用して記憶装置２にアクセスする。
【００２１】
次に、仮想ボリュームＶＬ１，ＶＬ２，ＶＬ３，・・・に対するアクセス要求に応じて記憶装置２にアクセスしたときに通信エラーが検出された場合の制御部１ｂの処理について説明する。
【００２２】
制御部１ｂは、例えば、仮想ボリュームＶＬ１に対するアクセス要求に応じて記憶装置２にアクセスしたときに、通信エラーを検出したとする（ステップＳ１）。この場合、制御部１ｂは、仮想ボリュームＶＬ１に対応する使用パスを切り替えて、記憶装置２に再度アクセスする（ステップＳ２）。
【００２３】
これとともに、制御部１ｂは、エラー検出情報１１に基づいて、複数の仮想ボリューム群の中から仮想ボリューム群を１つ特定する（ステップＳ３）。以下、特定された仮想ボリューム群を「特定仮想ボリューム群」と記載する。この複数の仮想ボリュームのそれぞれは、仮想ボリュームＶＬ１，ＶＬ２，ＶＬ３，・・・のうち、通信エラーが検出された仮想ボリュームＶＬ１と設定値が一致する他の仮想ボリュームを、抽出条件として設定情報１２内の複数の設定項目のうち異なる設定項目をそれぞれ用いることによって抽出される。
【００２４】
例えば、抽出条件の少なくとも１つとして、使用パスに関するパス設定項目が用いられる。この場合の例としては、いずれもパス設定項目の１つである「自ポート」と「相手ポート」を抽出条件として用いることができる。この場合、「自ポート」に「ＰＴ１」が設定された仮想ボリュームのグループと、「相手ポート」に「ＰＴ３」が設定された仮想ボリュームのグループとが抽出される。また、例えば、抽出条件として用いられる設定項目として、仮想ボリュームＶＬ１，ＶＬ２，ＶＬ３，・・・それぞれが属するＲＡＩＤ（Redundant Array of Inexpensive Disks）グループを用いることもできる。
【００２５】
制御部１ｂは、このようにして抽出される複数の仮想ボリューム群の中から、エラー検出情報１１に基づいて特定仮想ボリューム群を特定する。そして、制御部１ｂは、上記手順で特定された特定仮想ボリューム群に含まれる仮想ボリュームのうち、通信エラーが検出されていないすべての仮想ボリュームについて、使用パスを切り替える（ステップＳ４）。
【００２６】
ここで、ステップＳ３では、エラー検出情報１１を用いることで、制御部１ｂは、複数の仮想ボリューム群のそれぞれに含まれる仮想ボリュームにおける通信エラーの発生状況に基づいて、特定仮想ボリューム群を特定することができる。例えば、抽出された仮想ボリューム群の中に通信エラーが検出された仮想ボリューム群が多数含まれる場合、その仮想ボリューム群に含まれるその他の仮想ボリュームに対して今後アクセスが要求されたときに通信エラーが検出される可能性が高いと推定される。そのため、そのような仮想ボリューム群が特定仮想ボリューム群として特定される。
【００２７】
図１では一例として、仮想ボリューム群ＧＰ１，ＧＰ２が抽出された場合を示している。仮想ボリューム群ＧＰ１は、仮想ボリュームＶＬ２，ＶＬ３を含む。また、エラー検出情報１１によれば、仮想ボリューム群ＧＰ１に含まれる仮想ボリュームのうち２つにおいて、通信エラーが検出されている。このため、仮想ボリューム群ＧＰ１におけるエラー検出数は「２」となっている。一方、仮想ボリューム群ＧＰ２は、仮想ボリュームＶＬ３〜ＶＬ５を含む。また、エラー検出情報１１によれば、仮想ボリューム群ＧＰ２に含まれる仮想ボリュームのうち１つにおいて、通信エラーが検出されている。このため、仮想ボリューム群ＧＰ２におけるエラー検出数は「１」となっている。
【００２８】
例えば、仮想ボリューム群に含まれる仮想ボリュームのうち半数以上の仮想ボリュームで通信エラーが検出されている場合に、その仮想ボリューム群を特定仮想ボリューム群として特定するものとする。この場合、仮想ボリューム群ＧＰ１が特定仮想ボリューム群として特定される。
【００２９】
ところで、記憶装置２にアクセスする前でなく、アクセスした後に検出される通信エラーは、エラーの発生要因となった障害発生箇所を特定できない場合が多い。ステップＳ３の処理によれば、特定仮想ボリューム群を抽出するために抽出条件として用いられた設定項目は、障害発生箇所に関連している可能性が高い。例えば、ポートを示す設定項目が用いられた場合、その設定項目の設定値が示すポートまたはそのポートの近くで障害が発生している可能性が高い。このため、ステップＳ３の処理によれば、制御部１ｂは、通信エラーの検出によって障害発生箇所が特定できなくても、今後通信エラーが検出する可能性が高い仮想ボリュームを適切に推定できる。
【００３０】
したがって、ステップＳ４では、制御部１ｂは、今後通信エラーが検出される可能性が高い仮想ボリュームについて、使用パスを事前に切り替えておくことができる。これにより、その後に仮想ボリュームＶＬ１，ＶＬ２，ＶＬ３，・・・に対するアクセス要求に応じて記憶装置２にアクセスしたときに、通信エラーが検出される可能性を低減することができる。
【００３１】
通信エラーの検出回数が減少することにより、ストレージ制御装置１から記憶装置２へのアクセス回数を減少させることができる。例えば、通信エラーが検出されるとステップＳ２のようにアクセスパスを切り替えて記憶装置２のアクセスが再度実行される。通信エラーの検出回数が減少することにより、このような再アクセスの実行回数も減少する。また、記憶装置２にアクセスしたときに検出される通信エラーとしては、アクセスのリトライアウトによって検出される通信エラーがある。この場合、通信エラーが検出されるまでの間に複数回、記憶装置２へのアクセスが行われる。通信エラーの検出回数が減少することにより、このように複数回アクセスが行われる機会が減少する。
【００３２】
〔第２の実施の形態〕
図２は、第２の実施の形態に係るストレージシステムの構成例を示す図である。図２に示すストレージシステムは、ストレージ装置１００、外部ストレージ装置２００，３００およびホスト装置４１０，４２０を含む。ストレージ装置１００は、ＣＭ（Controller Module）１００ａ，１００ｂを有する。外部ストレージ装置２００は、ＣＭ２１０とＤＥ（Drive Enclosure）２２０を有する。外部ストレージ装置３００は、ＣＭ３１０とＤＥ３２０を有する。
【００３３】
ＣＭ１００ａ，１００ｂとＣＭ２１０，３１０との間は、ネットワーク５１０を介して接続されている。また、ホスト装置４１０，４２０とＣＭ１００ａ，１００ｂとの間は、ネットワーク５２０を介して接続されている。ネットワーク５１０，５２０は、例えば、ファイバチャネル（ＦＣ：Fibre Channel）やｉＳＣＳＩ（Internet Small Computer System Interface）などを用いたＳＡＮ（Storage Area Network）である。
【００３４】
ＣＭ１００ａ，１００ｂは、ホスト装置４１０，４２０からの要求に応じて、ＤＥ２２０，３２０に搭載された記憶装置に対するアクセスを制御する制御装置である。ＣＭ２１０は、ＣＭ１００ａ，１００ｂからの要求に応じてＤＥ２２０に搭載された記憶装置にアクセスする制御装置である。ＣＭ３１０は、ＣＭ１００ａ，１００ｂからの要求に応じてＤＥ３２０に搭載された記憶装置にアクセスする制御装置である。
【００３５】
なお、ＣＭ１００ａ，１００ｂとＣＭ２１０，３１０との間は、アクセスパスが冗長化された「マルチパス」によって接続されている。
ＤＥ２２０には、記憶装置として複数台のディスク２２１，２２２，２２３，・・・が搭載されている。ディスク２２１，２２２，２２３，・・・のそれぞれは、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）などの不揮発性記憶装置である。ＤＥ３２０にも同様に、記憶装置として複数台のディスク３２１，３２２，３２３，・・・が搭載されている。ディスク３２１，３２２，３２３，・・・のそれぞれは、ＨＤＤやＳＳＤなどの不揮発性記憶装置である。
【００３６】
このストレージシステムでは、ストレージ装置１００のＣＭ１００ａ，１００ｂは、ホスト装置４１０，４２０に対して仮想ボリュームを提供する。１つの仮想ボリュームは、ＤＥ２２０，３２０に搭載されたディスクによる物理記憶領域を用いて生成される仮想的な論理ボリュームである。以下の説明では、１つの仮想ボリュームに対しては、ＤＥ２２０，３２０のいずれかに搭載された１台以上のディスクによる物理記憶領域が割り当てられるものとする。また、ある仮想ボリュームの物理記憶領域を実現するＤＥが搭載された外部ストレージ装置を、「仮想ボリュームに対応する外部ストレージ装置」と略して記載する場合がある。
【００３７】
ＣＭ１００ａ，１００ｂのそれぞれには、どの仮想ボリュームに対するアクセス制御を担当するかが設定されている。ホスト装置４１０，４２０は、仮想ボリュームに対するアクセス要求を、ＣＭ１００ａ，１００ｂのうちその仮想ボリュームに対するアクセス制御を担当するＣＭに送信する。これによって、仮想ボリュームに対するアクセスが可能となる。
【００３８】
図３は、ＣＭのハードウェア構成例を示す図である。図３では例として、ＣＭ１００ａについて示している。ＣＭ１００ａは、プロセッサ１０１、ＲＡＭ（Random Access Memory）１０２、ＳＳＤ１０３および通信インタフェース１０４，１０５を有する。
【００３９】
プロセッサ１０１は、ＣＭ１００ａ全体を統括的に制御する。プロセッサ１０１は、例えば、ＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、またはＰＬＤ（Programmable Logic Device）である。また、プロセッサ１０１は、ＣＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＰＬＤのうちの２以上の要素の組み合わせであってもよい。
【００４０】
ＲＡＭ１０２は、ＣＭ１００ａの主記憶装置として使用される。ＲＡＭ１０２には、プロセッサ１０１に実行させるＯＳ（Operating System）プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、プロセッサ１０１による処理に必要な各種データが格納される。
【００４１】
ＳＳＤ１０３は、ＣＭ１００ａの補助記憶装置として使用される。ＳＳＤ１０３には、ＯＳプログラム、アプリケーションプログラム、および各種データが格納される。
通信インタフェース１０４は、ネットワーク５１０を介してＣＭ２１０，３１０との間で通信する。通信インタフェース１０５は、ネットワーク５２０を介してホスト装置４１０，４２０との間で通信する。
【００４２】
以上のハードウェア構成により、ＣＭ１００ａの処理機能が実現される。なお、ＣＭ１００ｂ，２１０，３１０も、ＣＭ１００ａと同様のハードウェア構成によって実現される。
【００４３】
次に、ストレージシステムに設定される仮想ボリュームおよびＲＡＩＤグループの構成、およびアクセスパスの構成について例示する。
図４は、仮想ボリューム、ＲＡＩＤグループおよびアクセスパスの構成例を示す図である。なお、以下の説明では、仮想ボリュームを「ＬＵＮ（Logical Unit Number）」と記載する場合がある。また、識別番号「ｘ」のＬＵＮを「ＬＵＮ＃ｘ」と表し、識別番号「ｘ」のＲＡＩＤグループを「ＲＡＩＤグループ＃ｘ」と表し、識別番号「ｘ」のポートを「ポート＃ｘ」と表す。
【００４４】
なお、ＲＡＩＤグループとは、複数のディスクを用いた論理記憶領域である。ＬＵＮ（仮想ボリューム）には、ＲＡＩＤグループから切り出された論理記憶領域が割り当てられる。また、ＲＡＩＤグループに割り当てられたＬＵＮのデータは、設定されたＲＡＩＤレベルに応じたＲＡＩＤ制御により、複数のディスクに冗長化されて記録される。
【００４５】
図４に示すように、ストレージシステムにはＬＵＮ＃０〜＃６が設定されている。ＣＭ１００ａは、ＬＵＮ＃０〜＃３に対するアクセス制御を担当する。ＣＭ１００ｂは、ＬＵＮ＃４〜＃６に対するアクセス制御を担当する。一方、外部ストレージ装置２００には、ＲＡＩＤグループ（ＧＰ）＃０，＃１が設定されている。また、外部ストレージ装置３００には、ＲＡＩＤグループ（ＧＰ）＃２が設定されている。
【００４６】
そして、ＬＵＮ＃０〜＃２はＲＡＩＤグループ＃０に割り当てられている。したがって、ホスト装置４１０，４２０からＬＵＮ＃０〜＃２に対するアクセスが要求された場合、ＣＭ１００ａから外部ストレージ装置２００へのアクセスが行われる。また、外部ストレージ装置２００は、「ＬＵＮ＃０〜＃２に対応する外部ストレージ装置」となる。
【００４７】
また、ＬＵＮ＃６はＲＡＩＤグループ＃１に割り当てられている。したがって、ホスト装置４１０，４２０からＬＵＮ＃６に対するアクセスが要求された場合、ＣＭ１００ｂから外部ストレージ装置２００へのアクセスが行われる。また、外部ストレージ装置２００は、「ＬＵＮ＃６に対応する外部ストレージ装置」となる。
【００４８】
さらに、ＬＵＮ＃３〜＃５はＲＡＩＤグループ＃２に割り当てられている。したがって、ホスト装置４１０，４２０からＬＵＮ＃３に対するアクセスが要求された場合、ＣＭ１００ａから外部ストレージ装置３００へのアクセスが行われる。また、ホスト装置４１０，４２０からＬＵＮ＃４，＃５に対するアクセスが要求された場合、ＣＭ１００ｂから外部ストレージ装置３００へのアクセスが行われる。そして、外部ストレージ装置３００は、「ＬＵＮ＃３〜＃５に対応する外部ストレージ装置」となる。
【００４９】
次に、図４を用いて、ＣＭ１００ａ，１００ｂと外部ストレージ装置２００，３００との間のアクセスパスについて説明する。
ＣＭ１００ａ，１００ｂと外部ストレージ装置２００，３００とは、スイッチ５１１，５１２を介して接続されている。すなわち、ＣＭ１００ａ，１００ｂと外部ストレージ装置２００，３００との間のアクセスパスは、スイッチ５１１を経由するアクセスパスと、スイッチ５１２を経由するアクセスパスとに冗長化されている。
【００５０】
ＣＭ１００ａは、ポート＃００とポート＃０１を有する。ポート＃００はスイッチ５１１に接続され、ポート＃０１はスイッチ５１２に接続されている。また、ＣＭ１００ｂは、ポート＃１０とポート＃１１を有する。ポート＃１０はスイッチ５１１に接続され、ポート＃１１はスイッチ５１２に接続されている。
【００５１】
外部ストレージ装置２００は、ポート＃２０とポート＃２１を有する。ポート＃２０はスイッチ５１１に接続され、ポート＃２１はスイッチ５１２に接続されている。また、外部ストレージ装置３００は、ポート＃３０とポート＃３１を有する。ポート＃３０はスイッチ５１１に接続され、ポート＃３１はスイッチ５１２に接続されている。なお、実際には、ポート＃２０，＃２１はＣＭ２１０に備えられており、ポート＃３０，＃３１はＣＭ３１０に備えられている。
【００５２】
このような構成により、ＣＭ１００ａと外部ストレージ装置２００との間には、ポート＃００、スイッチ５１１、ポート＃２０を介するアクセスパスと、ポート＃０１、スイッチ５１２、ポート＃２１を介するアクセスパスとが形成される。したがって、ＬＵＮ＃０〜＃２のそれぞれに対しては、これらのアクセスパスの一方が通常時に使用される優先パスに設定され、他方が代替用の代替パスに設定される。
【００５３】
また、ＣＭ１００ａと外部ストレージ装置３００との間には、ポート＃００、スイッチ５１１、ポート＃３０を介するアクセスパスと、ポート＃０１、スイッチ５１２、ポート＃３１を介するアクセスパスとが形成される。したがって、ＬＵＮ＃３に対しては、これらのアクセスパスの一方が優先パスに設定され、他方が代替パスに設定される。
【００５４】
さらに、ＣＭ１００ｂと外部ストレージ装置２００との間には、ポート＃１０、スイッチ５１１、ポート＃２０を介するアクセスパスと、ポート＃１１、スイッチ５１２、ポート＃２１を介するアクセスパスとが形成される。したがって、ＬＵＮ＃６に対しては、これらのアクセスパスの一方が優先パスに設定され、他方が代替パスに設定される。
【００５５】
また、ＣＭ１００ｂと外部ストレージ装置３００との間には、ポート＃１０、スイッチ５１１、ポート＃３０を介するアクセスパスと、ポート＃１１、スイッチ５１２、ポート＃３１を介するアクセスパスとが形成される。したがって、ＬＵＮ＃４，＃５のそれぞれに対しては、これらのアクセスパスの一方が優先パスに設定され、他方が代替パスに設定される。
【００５６】
本実施の形態では、仮想ボリューム（ＬＵＮ）ごとに、２つのアクセスパスのうちどちらを優先パスにし、どちらを代替パスにするかが設定される。
図５は、ＣＭが有する処理機能の構成例を示すブロック図である。ＣＭ１００ａは、記憶部１１０、ホストＩＯ（Input／Output）制御部１２０およびパス切り替え制御部１３０を有する。記憶部１１０は、例えば、ＲＡＭ１０２またはＳＳＤ１０３の記憶領域として実装される。ホストＩＯ制御部１２０およびパス切り替え制御部１３０の処理は、プロセッサ１０１が所定のプログラムを実行することで実現される。
【００５７】
記憶部１１０には、仮想ボリュームごとのボリューム管理テーブル１１１が記憶される。ボリューム管理テーブル１１１に、仮想ボリュームが属するＲＡＩＤグループや外部ストレージ装置に対するアクセスパスの情報など、仮想ボリュームの構成に関する情報を保持する。これに加えて、ボリューム管理テーブル１１１には、仮想ボリュームに対応する外部ストレージ装置に対するアクセス時に検出されたエラーの種類や、エラーの発生に応じて実行されたアクセスパスの切り替えに関する情報を保持する。
【００５８】
ホストＩＯ制御部１２０は、ホスト装置４１０，４２０からの要求に応じて、仮想ボリュームに対するアクセス制御を実行する。具体的には、ホストＩＯ制御部１２０は、仮想ボリュームにアクセスするためのＩＯコマンドをホスト装置４１０，４２０から受信する。ホストＩＯ制御部１２０は、仮想ボリュームに対応するボリューム管理テーブル１１１に基づいて、仮想ボリュームに対応する外部ストレージ装置を特定し、特定した外部ストレージ装置に対してＩＯコマンドを送信する。これにより、ホストＩＯ制御部１２０は、仮想ボリュームに割り当てられた物理記憶領域に対するＩＯ処理を実行する。
【００５９】
また、ホストＩＯ制御部１２０は、ある仮想ボリュームへのアクセス要求に応じて、その仮想ボリュームに対応する外部ストレージ装置へアクセスしたときにエラーを検出した場合、その仮想ボリュームについてのアクセスパスを代替パスに切り替える。これとともに、ホストＩＯ制御部１２０は、他のボリュームに関する事前パス切り替え処理の実行をパス切り替え制御部１３０に指示する。
【００６０】
パス切り替え制御部１３０は、ホストＩＯ制御部１２０からの指示に応じて、他のボリュームに関する事前パス切り替え処理を実行する。この事前パス切り替え処理では、パス切り替え制御部１３０は、他の仮想ボリュームの中からアクセスパスを事前に切り替えておいた方がよいと推定される仮想ボリュームを特定し、特定した仮想ボリュームについてのアクセスパスを代替パスに切り替える。
【００６１】
ここで、図６は、ある仮想ボリュームへのアクセスが要求された場合の処理手順についての比較例を示すシーケンス図である。この図６を用いて比較例における問題点を説明する。
【００６２】
なお、図６では例として、ＣＭ１００ａがアクセス制御を担当する仮想ボリュームに対して、ホスト装置４１０からアクセスが要求された場合を示す。また、仮想ボリュームに対応する外部ストレージ装置は、外部ストレージ装置２００であるものとする。
【００６３】
ホスト装置４１０は、ＣＭ１００ａに対して、仮想ボリュームにアクセスするためのＩＯコマンドを送信する（ステップＳ１１）。送信されるＩＯコマンドは、例えば、リードコマンド、またはライトコマンドである。ＣＭ１００ａのホストＩＯ制御部１２０は、仮想ボリュームに対応するボリューム管理テーブル１１１に基づいて、アクセスパスを選択する（ステップＳ１２）。ここでは、優先パスが選択されるものとする。
【００６４】
ホストＩＯ制御部１２０は、選択したアクセスパスを介してＩＯコマンドを送信するための準備処理を実行する。この過程で、ホストＩＯ制御部１２０は、選択したアクセスパスを介して、エラー要因が「経路異常」であるエラー（以下、「経路異常によるエラー」と記載する）を検出することができる（ステップＳ１３）。経路異常によるエラーとしては、例えば、アクセスパスにおいて通信リンクがダウンしているケースや、アクセスパス上のＣＭ１００ａ側のポートが異常によって動作していないケースがある。これらのケースでは、ホストＩＯ制御部１２０は、ＩＯコマンドを外部ストレージ装置２００に送信する前に、上記の準備処理においてエラーの発生を検出できる。
【００６５】
ホストＩＯ制御部１２０は、経路異常によるエラーを検出した場合には、アクセスパスを代替パスに変更し（ステップＳ１４）、代替パスを介してＩＯコマンドを外部ストレージ装置２００に送信する（ステップＳ１５）。一方、ホストＩＯ制御部１２０は、経路異常によるエラーを検出しなかった場合には、ステップＳ１４をスキップし、優先パスを介してＩＯコマンドを外部ストレージ装置２００に送信する（ステップＳ１５）。
【００６６】
ホストＩＯ制御部１２０は、外部ストレージ装置２００から処理の完了通知を受信すると（ステップＳ１６）、ホスト装置４１０に対して処理の完了通知を送信して応答する（ステップＳ１７）。
【００６７】
ところで、仮想ボリュームに対応する外部ストレージ装置２００へのアクセス時に発生するエラーとしては、ステップＳ１５のように外部ストレージ装置２００へのアクセス後（すなわち、ＩＯコマンドの送信後）に検出されるものもある。例えば、ＩＯコマンドの送信に対する応答内容から判別されるエラーや、ＩＯコマンド送信のリトライアウトによるエラーがある。後者のリトライアウトによるエラーは、ＩＯコマンドの送信に対する応答を一定時間内に受信できずに、ＩＯコマンドを再送し、一定時間ごとの再送を所定回数繰り返しても応答を受信できない場合に検出される。以下、このように外部ストレージ装置２００へのアクセス後に検出されるエラーを、「ボリューム異常によるエラー」と記載する。
【００６８】
経路異常によるエラーは、外部ストレージ装置２００へのアクセス前に検出できる。このため、ホストＩＯ制御部１３０は、経路異常によるエラーを検出した場合、アクセスパスを代替パスに切り替えてから外部ストレージ装置２００に正常にアクセスできる。しかし、ボリューム異常によるエラーは、外部ストレージ装置２００へアクセスした後にしか検出できない。このため、例えば、エラーを検出するとアクセスパスを変更して再度ＩＯコマンドを送信する、という運用が行われる場合、１つの仮想ボリュームについてＩＯコマンドが最低２回送信されることになる。また、リトライアウトによるエラーが検出された場合には、エラーが検出されるまでにＩＯコマンドが複数回送信されることになる。
【００６９】
したがって、ボリューム異常によるエラーが頻発すると、外部ストレージ装置２００へのＩＯコマンドの送信回数が増大し、ＣＭ１００ａと外部ストレージ装置２００との間の通信負荷が高くなる。その結果、ホスト装置４１０からのアクセス要求に対する応答時間が長くなり、その応答性能が悪化するという問題がある。
【００７０】
以下、図５に戻って、本実施の形態についての説明を続ける。
上記の問題に対して、パス切り替え制御部１３０は、事前パス切り替え処理を実行することで、外部ストレージ装置へのＩＯコマンドの送信回数を減少させる。前述のように、事前パス切り替え処理は、ある仮想ボリュームに対応する外部ストレージ装置へのアクセス時にエラーが検出された場合に実行される。なお、以下の説明では、対応する外部ストレージ装置へのアクセス時にエラーが検出された仮想ボリュームを「エラーボリューム」と記載する。
【００７１】
事前パス切り替え処理では、パス切り替え制御部１３０は、エラーボリューム以外の他の仮想ボリュームの中から、同じ要因のエラーが発生する可能性の高い仮想ボリュームを特定する。パス切り替え制御部１３０は、特定したすべての仮想ボリュームについてのアクセスパスを代替パスに切り替える。これにより、特定された仮想ボリュームに対するホスト装置からのアクセス要求に応じて、対応する外部ストレージ装置にアクセスしたときに、エラーが発生する可能性が低減される。換言すると、事前パス切り替え処理により、対応する外部ストレージ装置へのアクセス時にエラーが発生する可能性が高いと推定される仮想ボリュームについて、事前にアクセスパスが代替パスに切り替えられる。
【００７２】
ただし、経路異常によるエラーとは異なり、リトライアウトによるエラーが発生した場合には、送信元のＣＭは、エラーの要因となった障害発生箇所を特定できない。また、ＩＯコマンドに対する応答内容から判別されるエラーの中にも、障害発生箇所を特定できないものがある。このように障害発生箇所を特定できないため、パス切り替え制御部１３０は、事前パス切り替え処理において、他の仮想ボリュームのうちどの仮想ボリュームについてアクセスパスを切り替えるべきかを適切に判断できない。
【００７３】
そこで、パス切り替え制御部１３０は、ボリューム管理テーブル１１１の設定内容に基づいて、設定値がエラーボリュームと類似する仮想ボリューム群を、抽出条件として異なる設定項目をそれぞれ用いることで複数抽出する。パス切り替え制御部１３０は、ボリューム管理テーブル１１１を参照して、抽出された仮想ボリューム群ごとに、ボリューム異常によるエラーの発生状況を把握する。そして、パス切り替え制御部１３０は、仮想ボリューム群の中に、ボリューム異常によるエラーが多数の仮想ボリュームで検出されている仮想ボリューム群があった場合、この仮想ボリューム群に含まれるすべての仮想ボリュームについてのアクセスパスを代替パスに切り替える。
【００７４】
上記の抽出条件は、どの仮想ボリュームの範囲までをアクセスパスを一斉に切り替える対象とするかを示す「切り替え範囲」を決定するための条件である。抽出条件に応じた切り替え範囲には、次の切り替え範囲Ｒ１〜Ｒ４がある。
【００７５】
切り替え範囲Ｒ１は、エラーが検出された仮想ボリュームだけを含む。すなわち、切り替え範囲Ｒ１が適用された場合、エラーが検出された仮想ボリュームだけがパス切り替えの対象となる。この場合、エラーが検出された仮想ボリューム以外のその他の仮想ボリュームの抽出が行われない。したがって、実際には、事前パス切り替え処理では、以下の切り替え範囲Ｒ２〜Ｒ４が適用されることになる。
【００７６】
切り替え範囲Ｒ２は、同一のＲＡＩＤグループに属するという抽出条件によって抽出される仮想ボリュームの範囲である。切り替え範囲Ｒ２が適用された場合、エラーが検出された仮想ボリュームと同一のＲＡＩＤグループに属する仮想ボリュームが、パス切り替えの対象となる。
【００７７】
切り替え範囲Ｒ３は、優先パスとして同一の相手ポートを用いるという抽出条件によって抽出される仮想ボリュームの範囲である。切り替え範囲Ｒ３が適用された場合、エラーが検出された仮想ボリュームと同一の相手ポートを用いる仮想ボリュームが、パス切り替えの対象となる。ここで、「相手ポート」とは、外部ストレージ装置２００，３００が備えるポートを示す。
【００７８】
切り替え範囲Ｒ４は、優先パスとして同一の自ポートを用いるという抽出条件によって抽出される仮想ボリュームの範囲である。切り替え範囲Ｒ４が適用された場合、優先パスとして、エラーが検出された仮想ボリュームと同一の自ポートを用いる仮想ボリュームが、パス切り替えの対象となる。ここで、「自ポート」とは、ストレージ装置１００のＣＭ１００ａ，１００ｂのいずれかが備えるポートを示す。
【００７９】
パス切り替え制御部１３０は、上記のパス切り替え範囲Ｒ２〜Ｒ４の中から、各切り替え範囲に含まれる仮想ボリュームのエラー検出状況に基づいて、パスの切り替え対象とする切り替え範囲を特定する。これにより、すでにエラーが検出されている仮想ボリュームと、今後エラーが検出される可能性の高い仮想ボリュームとを含む切り替え範囲を適切に推定することができる。そして、パス切り替え制御部１３０は、特定された切り替え範囲に含まれるすべての仮想ボリュームについて、アクセスパスを代替パスに切り替える。
【００８０】
ここで、上記の切り替え範囲Ｒ２，Ｒ３，Ｒ４は、それぞれ「ＲＡＩＤグループ」、「優先パス情報」の「相手ポート」、「優先パス情報」の「自ポート」という設定項目を抽出条件として用いることで抽出される仮想ボリュームの範囲である。これらのうち、ＲＡＩＤグループは、実質的に外部ストレージ装置２００，３００内のディスクを特定する設定項目と言える。このため、これら３つの設定項目は、ストレージ装置１００から外部ストレージ装置２００，３００内のディスクまでのパス上の構成に関する設定項目と言うことができる。
【００８１】
このような設定項目を抽出条件として用いることで、パス切り替え制御部１３０は、障害発生箇所に関連すると推定される仮想ボリュームを含む切り替え範囲を特定することができる。これにより、障害発生箇所を特定できないにもかかわらず、今後エラーが検出される可能性の高い仮想ボリュームを適切に特定して、それらの仮想ボリュームについてのアクセスパスを事前に代替パスに切り替えておくことができる。
【００８２】
次に、図５に示すように、ＣＭ２１０は、ＲＡＩＤ制御部２１１を有する。ＲＡＩＤ制御部２１１の処理は、例えば、ＣＭ２１０が備えるプロセッサが所定のプログラムを実行することで実現される。ＲＡＩＤ制御部２１１は、ＤＥ２２０に搭載されたディスクを用いてＲＡＩＤグループを形成する。ＲＡＩＤ制御部２１１は、形成されたＲＡＩＤグループに対するアクセス要求をＣＭ１００ａ，１００ｂから受け付け、ＲＡＩＤグループに設定されたＲＡＩＤレベルに応じてディスクに対するＩＯ処理を実行する。
【００８３】
また、ＣＭ３１０は、ＲＡＩＤ制御部３１１を有する。ＲＡＩＤ制御部３１１の処理は、例えば、ＣＭ３１０が備えるプロセッサが所定のプログラムを実行することで実現される。ＲＡＩＤ制御部３１１は、ＤＥ３２０に搭載されたディスクを用いてＲＡＩＤグループを形成する。ＲＡＩＤ制御部３１１は、形成されたＲＡＩＤグループに対するアクセス要求をＣＭ１００ａ，１００ｂから受け付け、ＲＡＩＤグループに設定されたＲＡＩＤレベルに応じてディスクに対するＩＯ処理を実行する。
【００８４】
図７は、ボリューム管理テーブルのデータ構成例を示す図である。前述のように、記憶部１１０には、仮想ボリュームごとに作成されたボリューム管理テーブル１１１が記憶される。
【００８５】
ボリューム管理テーブル１１１には、ボリュームＩＤ、ボリューム構成情報および切り替え制御情報が登録される。ボリュームＩＤは、仮想ボリュームの識別番号を示す。
ボリューム構成情報は、ＲＡＩＤグループＩＤ、外部ストレージＩＤ、優先パス情報、代替パス情報、パスステータスの各項目を有する。
【００８６】
ＲＡＩＤグループＩＤの項目には、仮想ボリュームが属するＲＡＩＤグループの識別番号が登録される。外部ストレージＩＤの項目には、ＲＡＩＤグループが形成されている外部ストレージ装置の識別番号が登録される。
【００８７】
優先パス情報の項目には、優先パス上に含まれるデバイスの識別番号が登録される。優先パス情報の項目は、少なくとも、自ポートおよび相手ポートの各項目を含む。自ポートの項目には自ポートの識別番号が登録され、相手ポートの項目には相手ポートの識別番号が登録される。代替パス情報の項目には、代替パス上に含まれるデバイスの識別番号が登録される。代替パス情報の項目は、少なくとも、自ポートおよび相手ポートの各項目を含む。自ポートの項目には自ポートの識別番号が登録され、相手ポートの項目には相手ポートの識別番号が登録される。パスステータスの項目には、現在優先パスと代替パスのどちらが使用されているかを示すステータス情報が登録される。
【００８８】
なお、ＣＭ１００ａ，１００ｂは、各仮想ボリュームについての優先パスを、例えば、ＳＣＳＩ規格のＡＬＵＡ（Asymmetric Logical Unit Access）にしたがって決定する。あるいは、ＣＭ１００ａ，１００ｂは、各仮想ボリュームについての優先パスを、ユーザからの指定操作に応じて決定してもよい。
【００８９】
切り替え制御情報は、エラー要因、切り替え範囲の各項目を有する。
エラー要因の項目には、仮想ボリュームにおいてエラーが発生しているか否か、発生している場合、その要因は何かを示す情報が登録される。具体的には、エラー要因の項目には、「経路異常」、「ボリューム異常」、「エラーなし」のいずれかを示す情報が登録される。初期状態では、「エラーなし」を示す情報が登録される。
【００９０】
切り替え範囲の項目には、仮想ボリュームについてアクセスパスが代替パスに切り替えられた場合に、仮想ボリュームが前述の切り替え範囲Ｒ１〜Ｒ４のどれに含まれるかを示す情報が登録される。さらに、仮想ボリュームについてアクセスパスが代替パスに切り替えられていない場合、切り替え範囲の項目には、未切り替えであることを示す「Ｒ０」が登録される。初期状態では、「Ｒ０」が登録される。
【００９１】
なお、ＣＭ１００ａ，１００ｂは、共通のボリューム管理テーブル１１１を保持する。すなわち、ＣＭ１００ａ，１００ｂは、自装置がアクセス制御を担当する仮想ボリュームに対応するボリューム管理テーブル１１１だけでなく、他方のＣＭがアクセス制御を担当する仮想ボリュームに対応するボリューム管理テーブル１１１も保持する。
【００９２】
次に、ＣＭ１００ａ，１００ｂの処理について、フローチャートを用いて説明する。以下の説明では、ＣＭ１００ａの処理について説明するが、ＣＭ１００ｂも同様の処理を実行可能である。
【００９３】
図８、図９は、仮想ボリュームのＩＯ制御処理の例を示すフローチャートである。
［ステップＳ２１］ホストＩＯ制御部１２０は、ホスト装置から仮想ボリュームにアクセスするためのＩＯコマンド（例えば、ライトコマンドまたはリードコマンド）を受け付ける。ここでは例として、ホスト装置４１０から、ＬＵＮ＃０をアクセス先として指定したＩＯコマンドを受け付けたものとする。
【００９４】
［ステップＳ２２］ホストＩＯ制御部１２０は、ＬＵＮ＃０に対応するボリューム管理テーブル１１１を参照し、外部ストレージ装置へのアクセス時に使用するアクセスパスを選択する。
【００９５】
［ステップＳ２３］ホストＩＯ制御部１２０は、ステップＳ２２で選択されたアクセスパスを用いて外部ストレージ装置にＩＯコマンドを送信するための準備処理を実行する。ホストＩＯ制御部１２０は、この準備処理において経路異常によるエラーを検出した場合、ステップＳ２４の処理を実行し、経路異常によるエラーを検出しなかった場合、図９のステップＳ３１の処理を実行する。
【００９６】
なお、ステップＳ２２で代替パスが選択された場合、ホストＩＯ制御部１２０は、ステップＳ２４の代わりに、アクセスが不可能であることを示す応答をホスト装置４１０に送信して、処理を終了する。
【００９７】
［ステップＳ２４］ホストＩＯ制御部１２０は、ＬＵＮ＃０に対応するボリューム管理テーブル１１１の登録情報を次のように更新する。ホストＩＯ制御部１２０は、エラー要因の登録情報を「経路異常」に更新し、切り替え範囲の登録情報を「Ｒ４」に更新する。
【００９８】
［ステップＳ２５］ホストＩＯ制御部１２０は、アクセスに使用するアクセスパスを優先パスから代替パスに切り替える。また、ホストＩＯ制御部１２０は、ＬＵＮ＃０に対応するボリューム管理テーブル１１１において、パスステータスの登録情報を、代替パスが使用されていることを示す情報に更新する。
【００９９】
［ステップＳ２６］ホストＩＯ制御部１２０は、パス切り替え制御部１３０に対して、経路異常によるエラー検出時に対応する事前パス切り替え処理の実行を指示する。このとき、ホストＩＯ制御部１２０は、ＬＵＮ＃０でエラーが検出されたことをパス切り替え制御部１３０に通知する。これにより、エラーボリュームがＬＵＮ＃０に設定された図１０の処理が開始される。
【０１００】
［ステップＳ２７］ホストＩＯ制御部１２０は、ステップＳ２５で切り替えられた代替パスを介して、外部ストレージ装置に対してＩＯコマンドを送信する。なお、送信先の外部ストレージ装置は、ＬＵＮ＃０に対応するボリューム管理テーブル１１１の外部ストレージＩＤから特定される。
【０１０１】
［ステップＳ２８］ホストＩＯ制御部１２０は、外部ストレージ装置からＩＯ処理の完了通知を受信すると、ホスト装置４１０に対して、ＩＯ処理が正常に完了したことを示す応答を送信する。
【０１０２】
以下、図９を用いて説明を続ける。
［ステップＳ３１］ホストＩＯ制御部１２０は、ステップＳ２２で選択されたアクセスパスを介して、外部ストレージ装置に対してＩＯコマンドを送信する。なお、ステップＳ２７と同様に、送信先の外部ストレージ装置は、ＬＵＮ＃０に対応するボリューム管理テーブル１１１の外部ストレージＩＤから特定される。
【０１０３】
［ステップＳ３２］ホストＩＯ制御部１２０は、ボリューム異常によるエラーが検出された場合、ステップＳ３３の処理を実行し、ボリューム異常によるエラーが検出されなかった場合、ステップＳ３７の処理を実行する。なお、ＩＯコマンドに対する応答においてエラーが通知された場合に、ボリューム異常が検出される。あるいは、ＩＯコマンドの送信に対する応答を一定時間内に受信できずに、ＩＯコマンドを再送し、一定時間ごとの再送を所定回数繰り返しても応答を受信できない場合にも、ボリューム異常が検出される。
【０１０４】
［ステップＳ３３］ホストＩＯ制御部１２０は、ＬＵＮ＃０に対応するボリューム管理テーブル１１１の登録情報を次のように更新する。ホストＩＯ制御部１２０は、エラー要因の登録情報を「ボリューム異常」に更新し、切り替え範囲の登録情報を「Ｒ１」に更新する。
【０１０５】
なお、ステップＳ２２で代替パスが選択された場合、ホストＩＯ制御部１２０は、ステップＳ３３の代わりに、アクセスが不可能であることを示す応答をホスト装置４１０に送信して、処理を終了する。
【０１０６】
［ステップＳ３４］ホストＩＯ制御部１２０は、アクセスに使用するアクセスパスを優先パスから代替パスに切り替える。また、ホストＩＯ制御部１２０は、ＬＵＮ＃０に対応するボリューム管理テーブル１１１において、パスステータスの登録情報を、代替パスが使用されていることを示す情報に更新する。
【０１０７】
［ステップＳ３５］ホストＩＯ制御部１２０は、パス切り替え制御部１３０に対して、ボリューム異常によるエラー検出時に対応する事前パス切り替え処理の実行を指示する。このとき、ホストＩＯ制御部１２０は、ＬＵＮ＃０でエラーが検出されたことをパス切り替え制御部１３０に通知する。これにより、エラーボリュームがＬＵＮ＃０に設定された図１１の処理が開始される。
【０１０８】
［ステップＳ３６］ホストＩＯ制御部１２０は、ステップＳ３４で切り替えられた代替パスを介して、外部ストレージ装置に対してＩＯコマンドを送信する。なお、送信先の外部ストレージ装置は、ＬＵＮ＃０に対応するボリューム管理テーブル１１１の外部ストレージＩＤから特定される。
【０１０９】
［ステップＳ３７］ホストＩＯ制御部１２０は、外部ストレージ装置からＩＯ処理の完了通知を受信すると、ホスト装置４１０に対して、ＩＯ処理が正常に完了したことを示す応答を送信する。
【０１１０】
図１０は、経路異常によるエラー検出時に対応する事前パス切り替え処理の例を示すフローチャートである。ここでは、ＬＵＮ＃０でエラーが検出されたことがホストＩＯ制御部１２０から通知されたものとする。なお、図１０の処理は、ホストＩＯ制御部１２０から実行が指示されると即座に実行されてもよいし、その指示タイミングとは非同期のタイミングで実行されてもよい。
【０１１１】
［ステップＳ４１］パス切り替え制御部１３０は、優先パスとしてＬＵＮ＃０と同一の自ポートを用いる他の仮想ボリューム（ＬＵＮ）を検索する。具体的には、パス切り替え制御部１３０は、ＬＵＮ＃０に対応するボリューム管理テーブル１１１から、優先パスに含まれる自ポートを特定する。パス切り替え制御部１３０は、他のボリューム管理テーブル１１１の中から、優先パスに含まれる自ポートが特定された自ポートと同じであるボリューム管理テーブル１１１を特定する。パス切り替え制御部１３０は、特定されたボリューム管理テーブル１１１に対応する仮想ボリュームを検索結果として出力する。これにより、切り替え範囲Ｒ４に含まれる、ＬＵＮ＃０以外の仮想ボリュームが特定される。
【０１１２】
［ステップＳ４２］パス切り替え制御部１３０は、該当する他の仮想ボリュームが存在する場合、ステップＳ４３の処理を実行し、存在しない場合、処理を終了する。
［ステップＳ４３］パス切り替え制御部１３０は、該当する仮想ボリュームに対応するボリューム管理テーブル１１１を次のように更新する。パス切り替え制御部１３０は、パスステータスを代替パスが使用されていることを示すように更新して、使用するアクセスパスを代替パスに切り替える。なお、すでに代替パスが使用されている場合には、パスステータスの登録情報はそのまま維持される。また、パス切り替え制御部１３０は、エラー要因の登録情報を「経路異常」に更新し、切り替え範囲の登録情報を「Ｒ４」に更新する。
【０１１３】
以上の図１０の処理によれば、優先パスとしてＬＵＮ＃０と同一の自ポートを用いる他の仮想ボリュームのすべてについて、アクセスパスが代替パスに切り替えられる。これにより、これらの仮想ボリュームに対するアクセスが要求されたとき、経路異常によるエラーが検出されないようになり、ＩＯコマンドの準備処理が高速化される。
【０１１４】
図１１、図１２は、ボリューム異常によるエラー検出時に対応する事前パス切り替え処理の例を示すフローチャートである。ここでは、ＬＵＮ＃０でエラーが検出されたことがホストＩＯ制御部１２０から通知されたものとする。なお、図１１の処理は、ホストＩＯ制御部１２０から実行が指示されると即座に実行されてもよいし、その指示タイミングとは非同期のタイミングで実行されてもよい。
【０１１５】
［ステップＳ５１］パス切り替え制御部１３０は、ＬＵＮ＃０以外の他の仮想ボリュームの中から、ボリューム異常によるエラーが検出されている仮想ボリュームを検索する。具体的には、パス切り替え制御部１３０は、他の仮想ボリュームに対応するボリューム管理テーブル１１１の中から、エラー要因として「ボリューム異常」が登録されたボリューム管理テーブル１１１を特定する。
【０１１６】
［ステップＳ５２］パス切り替え制御部１３０は、該当する他の仮想ボリュームが存在する場合、ステップＳ５３の処理を実行し、存在しない場合、処理を終了する。
［ステップＳ５３］パス切り替え制御部１３０は、ステップＳ５１で検索された仮想ボリュームの中から、優先パスとしてＬＵＮ＃０と同一の自ポートを用いる仮想ボリュームを検索する。具体的には、パス切り替え制御部１３０は、ＬＵＮ＃０に対応するボリューム管理テーブル１１１を参照し、優先パス情報に含まれる「自ポート」の項目から、優先パスに含まれる自ポートを特定する。パス切り替え制御部１３０は、ステップＳ５１で特定されたボリューム管理テーブル１１１の中から、優先パスに含まれる自ポートが、特定された自ポートと同じであるボリューム管理テーブル１１１を特定する。パス切り替え制御部１３０は、特定されたボリューム管理テーブル１１１に対応する仮想ボリュームを検索結果として出力する。
【０１１７】
パス切り替え制御部１３０は、該当する仮想ボリュームが存在する場合、ステップＳ５４の処理を実行し、存在しない場合、図１２のステップＳ６１の処理を実行する。
［ステップＳ５４］パス切り替え制御部１３０は、ＬＵＮ＃０以外の他の仮想ボリュームの中から、優先パスとしてＬＵＮ＃０と同一の自ポートを用いる仮想ボリュームを検索する。具体的には、パス切り替え制御部１３０は、ステップＳ５３で特定された、ＬＵＮ＃０に設定された優先パスに含まれる自ポートを取得する。パス切り替え制御部１３０は、他の仮想ボリュームに対応するボリューム管理テーブル１１１の中から、優先パスに含まれる自ポートが、取得した自ポートと同じであるボリューム管理テーブル１１１を特定する。
【０１１８】
パス切り替え制御部１３０は、特定されたボリューム管理テーブル１１１の数に「１」を加算した数を、Ｉ１とする。このＩ１は、切り替え範囲Ｒ４に含まれる仮想ボリュームの総数を示す。一方、パス切り替え制御部１３０は、ステップＳ５３で検索された仮想ボリュームの数を、Ｉ２とする。このＩ２は、切り替え範囲Ｒ４に含まれる仮想ボリュームのうち、ボリューム異常によるエラーが発生している仮想ボリュームの数を示す。
【０１１９】
パス切り替え制御部１３０は、Ｉ２／Ｉ１が所定割合以上か（例えば、半数以上か）を判定する。パス切り替え制御部１３０は、Ｉ２／Ｉ１が所定割合以上の場合、ステップＳ５５の処理を実行し、Ｉ２／Ｉ１が所定割合より小さい場合、図１２のステップＳ６１の処理を実行する。
【０１２０】
［ステップＳ５５］パス切り替え制御部１３０は、ステップＳ５４で特定された、優先パスとしてＬＵＮ＃０と同一の自ポートを用いる他の仮想ボリュームのすべてについて、対応するボリューム管理テーブル１１１を次のように更新する。なお、更新対象のボリューム管理テーブル１１１は、ステップＳ５４で特定されたボリューム管理テーブル１１１となる。
【０１２１】
パス切り替え制御部１３０は、パスステータスを代替パスが使用されていることを示すように更新して、使用するアクセスパスを代替パスに切り替える。なお、すでに代替パスが使用されている場合には、パスステータスの登録情報はそのまま維持される。また、パス切り替え制御部１３０は、エラー要因の登録情報を「ボリューム異常」に更新し、切り替え範囲の登録情報を「Ｒ４」に更新する。なお、すでにボリューム異常によるエラーが検出されている場合には、エラー要因の登録情報はそのまま維持される。
【０１２２】
このステップＳ５５の処理により、優先パスとしてＬＵＮ＃０と同一の自ポートを用いる他の仮想ボリュームのすべてについて、アクセスパスが代替パスに切り替えられる。これにより、これらの仮想ボリュームに対するアクセス要求に応じて外部ストレージ装置にアクセスしたとき、ボリューム異常によるエラーが検出されないようになる。したがって、外部ボリュームに対する余計なアクセスが行われないようになり、その結果、外部ストレージ装置へのアクセス回数全体を減少させることができる。
【０１２３】
以下、図１２を用いて説明を続ける。
［ステップＳ６１］パス切り替え制御部１３０は、ステップＳ５１で検索された仮想ボリュームの中から、優先パスとしてＬＵＮ＃０と同一の相手ポートを用いる仮想ボリュームを検索する。具体的には、パス切り替え制御部１３０は、ＬＵＮ＃０に対応するボリューム管理テーブル１１１を参照し、優先パス情報に含まれる「相手ポート」の項目から、優先パスに含まれる相手ポートを特定する。パス切り替え制御部１３０は、ステップＳ５１で特定されたボリューム管理テーブル１１１の中から、優先パスに含まれる相手ポートが、特定された相手ポートと同じであるボリューム管理テーブル１１１を特定する。パス切り替え制御部１３０は、特定されたボリューム管理テーブル１１１に対応する仮想ボリュームを検索結果として出力する。
【０１２４】
パス切り替え制御部１３０は、該当する仮想ボリュームが存在する場合、ステップＳ６２の処理を実行し、存在しない場合、ステップＳ６５の処理を実行する。
［ステップＳ６２］パス切り替え制御部１３０は、ＬＵＮ＃０以外の他の仮想ボリュームの中から、優先パスとしてＬＵＮ＃０と同一の相手ポートを用いる仮想ボリュームを検索する。具体的には、パス切り替え制御部１３０は、ステップＳ６１で特定された、ＬＵＮ＃０に設定された優先パスに含まれる相手ポートを取得する。パス切り替え制御部１３０は、他の仮想ボリュームに対応するボリューム管理テーブル１１１の中から、優先パスに含まれる相手ポートが、取得した相手ポートと同じであるボリューム管理テーブル１１１を特定する。これにより、切り替え範囲Ｒ３に含まれる、ＬＵＮ＃０以外の仮想ボリュームが特定される。
【０１２５】
また、パス切り替え制御部１３０は、特定された仮想ボリュームの中から、切り替え範囲Ｒ４に含まれる仮想ボリュームとしてアクセスパスを切り替え済みの仮想ボリュームを特定する。具体的には、パス切り替え制御部１３０は、特定された仮想ボリュームの中から、対応するボリューム管理テーブル１１１の切り替え範囲の項目に「Ｒ４」が登録された仮想ボリュームを特定する。
【０１２６】
パス切り替え制御部１３０は、切り替え範囲Ｒ３に含まれる、ＬＵＮ＃０を含む仮想ボリュームの中から、特定された切り替え済みの仮想ボリュームを除外し、除外後の仮想ボリュームの総数をＪ１とする。これとともに、パス切り替え制御部１３０は、ステップＳ６１で特定された仮想ボリュームの中からも、特定された切り替え済みの仮想ボリュームを除外し、除外後の仮想ボリュームの総数に１を加算した数をＪ２とする。このＪ２は、Ｊ１個の仮想ボリュームのうち、ボリューム異常によるエラーが検出されている仮想ボリュームの数を示す。
【０１２７】
［ステップＳ６３］パス切り替え制御部１３０は、ボリューム異常によるエラーが検出されている仮想ボリュームの数が、全体の所定割合以上（例えば、半数以上）かを判定する。具体的には、パス切り替え制御部１３０は、Ｊ２／Ｊ１が所定割合以上かを判定する。パス切り替え制御部１３０は、Ｊ２／Ｊ１が所定割合以上の場合、ステップＳ６４の処理を実行し、Ｊ２／Ｊ１が所定割合より小さい場合、ステップＳ６５の処理を実行する。
【０１２８】
［ステップＳ６４］パス切り替え制御部１３０は、切り替え範囲Ｒ３に含まれる、ＬＵＮ＃０以外の他の仮想ボリュームのうち、ステップＳ６２で特定された切り替え済みの仮想ボリュームを除く仮想ボリュームのすべてについて、対応するボリューム管理テーブル１１１を次のように更新する。
【０１２９】
パス切り替え制御部１３０は、パスステータスを代替パスが使用されていることを示すように更新して、使用するアクセスパスを代替パスに切り替える。なお、すでに代替パスが使用されている場合には、パスステータスの登録情報はそのまま維持される。また、パス切り替え制御部１３０は、エラー要因の登録情報を「ボリューム異常」に更新し、切り替え範囲の登録情報を「Ｒ３」に更新する。なお、すでにボリューム異常によるエラーが検出されている場合には、エラー要因の登録情報はそのまま維持される。
【０１３０】
このステップＳ６４の処理により、優先パスとしてＬＵＮ＃０と同一の相手ポートを用いる他の仮想ボリュームのうち、切り替え範囲Ｒ４に含まれない仮想ボリュームのすべてについて、アクセスパスが代替パスに切り替えられる。これにより、これらの仮想ボリュームに対するアクセス要求に応じて外部ストレージ装置にアクセスしたとき、ボリューム異常によるエラーが検出されないようになる。したがって、外部ボリュームに対する余計なアクセスが行われないようになり、その結果、外部ストレージ装置へのアクセス回数全体を減少させることができる。
【０１３１】
［ステップＳ６５］パス切り替え制御部１３０は、ステップＳ５１で検索された仮想ボリュームの中から、ＬＵＮ＃０と同一のＲＡＩＤグループに属する仮想ボリュームを検索する。具体的には、パス切り替え制御部１３０は、ＬＵＮ＃０に対応するボリューム管理テーブル１１１を参照し、「ＲＡＩＤグループＩＤ」の項目から、ＬＵＮ＃０が属するＲＡＩＤグループを特定する。パス切り替え制御部１３０は、ステップＳ５１で特定されたボリューム管理テーブル１１１の中から、ＲＡＩＤグループＩＤとして、特定されたＲＡＩＤグループのＩＤが登録されているボリューム管理テーブル１１１を特定する。パス切り替え制御部１３０は、特定されたボリューム管理テーブル１１１に対応する仮想ボリュームを検索結果として出力する。
【０１３２】
パス切り替え制御部１３０は、該当する仮想ボリュームが存在する場合、ステップＳ６６の処理を実行し、存在しない場合、処理を終了する。
［ステップＳ６６］パス切り替え制御部１３０は、ＬＵＮ＃０以外の他の仮想ボリュームの中から、ＬＵＮ＃０と同一のＲＡＩＤグループに属する仮想ボリュームを検索する。具体的には、パス切り替え制御部１３０は、ステップＳ６５で特定された、ＬＵＮ＃０が属するＲＡＩＤグループを取得する。パス切り替え制御部１３０は、他の仮想ボリュームに対応するボリューム管理テーブル１１１の中から、ＲＡＩＤグループＩＤとして、取得したＲＡＩＤグループのＩＤが登録されているボリューム管理テーブル１１１を特定する。これにより、切り替え範囲Ｒ２に含まれる、ＬＵＮ＃０以外の仮想ボリュームが特定される。
【０１３３】
また、パス切り替え制御部１３０は、特定された仮想ボリュームの中から、切り替え範囲Ｒ３，Ｒ４に含まれる仮想ボリュームとしてアクセスパスを切り替え済みの仮想ボリュームを特定する。具体的には、パス切り替え制御部１３０は、特定された仮想ボリュームの中から、対応するボリューム管理テーブル１１１の切り替え範囲の項目に「Ｒ３」、「Ｒ４」のいずれかが登録された仮想ボリュームを特定する。
【０１３４】
パス切り替え制御部１３０は、切り替え範囲Ｒ２に含まれる、ＬＵＮ＃０を含む仮想ボリュームの中から、特定された切り替え済みの仮想ボリュームを除外し、除外後の仮想ボリュームの総数をＫ１とする。これとともに、パス切り替え制御部１３０は、ステップＳ６５で特定された仮想ボリュームの中からも、特定された切り替え済みの仮想ボリュームを除外し、除外後の仮想ボリュームの総数に１を加算した数をＫ２とする。このＫ２は、Ｋ１個の仮想ボリュームのうち、ボリューム異常によるエラーが検出されている仮想ボリュームの数を示す。
【０１３５】
［ステップＳ６７］パス切り替え制御部１３０は、ボリューム異常によるエラーが検出されている仮想ボリュームの数が、全体の所定割合以上（例えば、半数以上）かを判定する。具体的には、パス切り替え制御部１３０は、Ｋ２／Ｋ１が所定割合以上かを判定する。パス切り替え制御部１３０は、Ｋ２／Ｋ１が所定割合以上の場合、ステップＳ６８の処理を実行し、Ｋ２／Ｋ１が所定割合より小さい場合、処理を終了する。
【０１３６】
［ステップＳ６８］パス切り替え制御部１３０は、切り替え範囲Ｒ２に含まれる、ＬＵＮ＃０以外の他の仮想ボリュームのうち、ステップＳ６６で特定された切り替え済みの仮想ボリュームを除く仮想ボリュームのすべてについて、対応するボリューム管理テーブル１１１を次のように更新する。
【０１３７】
パス切り替え制御部１３０は、パスステータスを代替パスが使用されていることを示すように更新して、使用するアクセスパスを代替パスに切り替える。なお、すでに代替パスが使用されている場合には、パスステータスの登録情報はそのまま維持される。また、パス切り替え制御部１３０は、エラー要因の登録情報を「ボリューム異常」に更新し、切り替え範囲の登録情報を「Ｒ２」に更新する。なお、すでにボリューム異常によるエラーが検出されている場合には、エラー要因の登録情報はそのまま維持される。
【０１３８】
このステップＳ６８の処理により、ＬＵＮ＃０と同一のＲＡＩＤグループに属する他の仮想ボリュームのうち、切り替え範囲Ｒ３，Ｒ４のどちらにも含まれない仮想ボリュームのすべてについて、アクセスパスが代替パスに切り替えられる。これにより、これらの仮想ボリュームに対するアクセス要求に応じて外部ストレージ装置にアクセスしたとき、ボリューム異常によるエラーが検出されないようになる。したがって、外部ボリュームに対する余計なアクセスが行われないようになり、その結果、外部ストレージ装置へのアクセス回数全体を減少させることができる。
【０１３９】
なお、上記の図１１、図１２では、切り替え範囲Ｒ４，Ｒ３，Ｒ２の順に優先度が付与され、優先度が高い順に切り替え範囲の判定が行われている。この例では、切り替え範囲を特定するための抽出条件としてストレージ装置１００に近いハードウェアに関する設定項目が用いられた場合の方が、より広範囲の仮想ボリュームが切り替え範囲に入る可能性があり、影響度が大きいという考え方が用いられている。この考え方に基づき、以前に切り替え範囲Ｒ４に含まれる仮想ボリュームがパス切り替えの対象に決定されていた場合には、これらの仮想ボリュームは切り替え範囲Ｒ２，Ｒ３に含まれないように制御される。また、以前に切り替え範囲Ｒ３，Ｒ４のいずれかに含まれる仮想ボリュームがパス切り替えの対象に決定されていた場合には、これらの仮想ボリュームは切り替え範囲Ｒ２に含まれないように制御される。これにより、切り替え範囲を適切に設定できるようになる。
【０１４０】
次に、図４に示した構成を基にして、実際のパス切り替えの実行例について説明する。
図１３は、同一のＲＡＩＤグループに属する仮想ボリュームについてパス切り替えが行われる場合の例を示す図である。図１３では、ＬＵＮ＃０に対するアクセス要求に応じて外部ストレージ装置２００にアクセスした際に、ボリューム異常によるエラーが検出されたものとする。また、ＬＵＮ＃０の優先ポートとしては、ポート＃００，＃２０が設定されており、ＬＵＮ＃０の代替ポートとしては、ポート＃０１，＃２１が設定されているものとする。
【０１４１】
ホストＩＯ制御部１２０は、ＬＵＮ＃０のアクセスパスを、ポート＃００，＃２０を経由するパスからポート＃０１，＃２１を経由するパスに切り替える。また、パス切り替え制御部１３０は、ＬＵＮ＃０と同様にＲＡＩＤグループ＃０に属している他の仮想ボリュームとして、ＬＵＮ＃１，＃２を特定する。ここで、ＬＵＮ＃０〜＃２のうちの所定割合の仮想ボリュームにおいてボリューム異常によるエラーが検出されていた場合、パス切り替え制御部１３０は、ＬＵＮ＃１，＃２についてもアクセスパスを切り替える。図１３では、ＬＵＮ＃１，＃２についてもＬＵＮ＃０と同様の優先ポートおよび代替ポートが設定されているものとする。この場合、パス切り替え制御部１３０は、ＬＵＮ＃１，＃２のアクセスパスを、ポート＃００，＃２０を経由するパスからポート＃０１，＃２１を経由するパスに切り替える。
【０１４２】
このケースでは、例えば、ＲＡＩＤグループ＃０に割り当てられたディスクの少なくとも１つ、またはＣＭ２１０によって実行されるＲＡＩＤグループ＃０のＩＯ制御において、障害が発生している可能性が高い。このため、ＲＡＩＤグループ＃０に属するすべての仮想ボリュームについてパス切り替えが行われることで、これらの仮想ボリュームにおけるエラーの発生を確実に抑えつつも、必要最小限の仮想ボリュームについてだけパス切り替えを行うことができる。
【０１４３】
図１４は、同一の相手ポートを用いる仮想ボリュームについてパス切り替えが行われる場合の例を示す図である。図１４でも図１３と同様に、ＬＵＮ＃０に対するアクセス要求に応じて外部ストレージ装置２００にアクセスした際に、ボリューム異常によるエラーが検出されたものとする。したがって、ホストＩＯ制御部１２０は、ＬＵＮ＃０のアクセスパスを、ポート＃００，＃２０を経由するパスからポート＃０１，＃２１を経由するパスに切り替える。
【０１４４】
また、パス切り替え制御部１３０は、優先パスに含まれる相手ポートが、ＬＵＮ＃０と同様にポート＃２０であるＬＵＮ＃１，＃２，＃６を特定する。ここで、ＬＵＮ＃０〜＃２，＃６のうちの所定割合の仮想ボリュームにおいてボリューム異常によるエラーが検出されていた場合、パス切り替え制御部１３０は、ＬＵＮ＃１，＃２，＃６についてもアクセスパスを切り替える。具体的には、パス切り替え制御部１３０は、ＬＵＮ＃１，＃２のアクセスパスをポート＃０１，＃２１を経由するパスに切り替える。また、ＬＵＮ＃６のアクセスパスをポート＃１１，＃２１を経由するパスに切り替える。
【０１４５】
このケースでは、例えば、スイッチ５１１からポート＃２０までの経路上で障害が発生している可能性が高い。このため、優先パスにポート＃２０を含むすべての仮想ボリュームについてパス切り替えが行われることで、これらの仮想ボリュームにおけるエラーの発生を確実に抑えつつも、必要最小限の仮想ボリュームについてだけパス切り替えを行うことができる。
【０１４６】
図１５は、同一の自ポートを用いる仮想ボリュームについてパス切り替えが行われる場合の例を示す図である。図１５でも図１３、図１４と同様に、ＬＵＮ＃０に対するアクセス要求に応じて外部ストレージ装置２００にアクセスした際に、ボリューム異常によるエラーが検出されたものとする。したがって、ホストＩＯ制御部１２０は、ＬＵＮ＃０のアクセスパスを、ポート＃００，＃２０を経由するパスからポート＃０１，＃２１を経由するパスに切り替える。
【０１４７】
また、パス切り替え制御部１３０は、優先パスに含まれる自ポートが、ＬＵＮ＃０と同様にポート＃００であるＬＵＮ＃１〜＃３を特定する。ここで、ＬＵＮ＃０〜＃３のうちの所定割合の仮想ボリュームにおいてボリューム異常によるエラーが検出されていた場合、パス切り替え制御部１３０は、ＬＵＮ＃１〜＃３についてもアクセスパスを切り替える。具体的には、パス切り替え制御部１３０は、ＬＵＮ＃１，＃２のアクセスパスをポート＃０１，＃２１を経由するパスに切り替える。また、ＬＵＮ＃３のアクセスパスをポート＃０１，＃３１を経由するパスに切り替える。
【０１４８】
このケースでは、例えば、スイッチ５１１からポート＃００までの経路上で障害が発生している可能性が高い。このため、優先パスにポート＃００を含むすべての仮想ボリュームについてパス切り替えが行われることで、これらの仮想ボリュームにおけるエラーの発生を確実に抑えつつも、必要最小限の仮想ボリュームについてだけパス切り替えを行うことができる。
【０１４９】
なお、上記の各実施の形態に示した装置（例えば、ストレージ制御装置１、ＣＭ１００ａ，１００ｂ，２１０，３１０）の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０１５０】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１５１】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
【０１５２】
以上の各実施の形態に関し、さらに以下の付記を開示する。
（付記１）  複数のアクセスパスを介して記憶装置と接続されたストレージ制御装置において、
前記記憶装置の記憶領域を用いて実現される複数の仮想ボリュームのそれぞれに対するアクセス要求に応じて前記記憶装置にアクセスしたときに通信エラーが検出されたか否かを示す情報が、前記複数の仮想ボリュームのそれぞれについて登録されたエラー検出情報と、複数の設定項目のそれぞれに対応する設定値が、前記複数の仮想ボリュームのそれぞれについて登録された設定情報と、を記憶し、前記複数の設定項目は、前記複数のアクセスパスのうち前記記憶装置にアクセスする際に使用される使用パスに関するパス設定項目を含む、記憶部と、制御部とを有し、
前記制御部は、
前記複数の仮想ボリュームのそれぞれに対するアクセスが要求された場合、前記パス設定項目に対応する設定値に基づいて前記記憶装置にアクセスし、
前記複数の仮想ボリュームのうち第１の仮想ボリュームに対するアクセス要求に応じて前記記憶装置にアクセスしたときに通信エラーを検出した場合、前記第１の仮想ボリュームに対応する前記使用パスを切り替えて前記記憶装置に再度アクセスし、
前記エラー検出情報に基づいて複数の仮想ボリューム群の中から特定仮想ボリューム群を特定し、前記複数の仮想ボリューム群のそれぞれは、前記設定情報に基づき、前記複数の仮想ボリュームのうち前記第１の仮想ボリュームと設定値が一致する第２の仮想ボリュームを、抽出条件として前記複数の設定項目のうち異なる設定項目をそれぞれ用いることによって抽出され、
前記特定仮想ボリューム群に含まれる前記第２の仮想ボリュームのうち、前記通信エラーが検出されていないすべての仮想ボリュームについて、前記使用パスを切り替える、
ストレージ制御装置。
【０１５３】
（付記２）  前記複数の設定項目は、前記パス設定項目を複数含み、
前記抽出条件として異なる前記パス設定項目が用いられる、
付記１記載のストレージ制御装置。
【０１５４】
（付記３）  前記複数の設定項目は、前記複数の仮想ボリュームがそれぞれ属するＲＡＩＤ（Redundant Array of Inexpensive Disks）グループを示すＲＡＩＤ設定項目を含み、
前記抽出条件の１つとして前記ＲＡＩＤ設定項目が用いられる、
付記１または２記載のストレージ制御装置。
【０１５５】
（付記４）  前記通信エラーとして、前記記憶装置へのアクセス要求のリトライアウトによるエラーが含まれる、
付記１乃至３のいずれか１つに記載のストレージ制御装置。
【０１５６】
（付記５）  前記特定仮想ボリューム群として、前記エラー検出情報に基づき、前記複数の仮想ボリューム群の中から、前記第２の仮想ボリュームのうち所定割合以上の仮想ボリュームにおいて前記通信エラーが検出されている前記仮想ボリューム群が特定される、
付記１乃至４のいずれか１つに記載のストレージ制御装置。
【０１５７】
（付記６）  前記特定仮想ボリューム群の特定では、前記複数の仮想ボリューム群のそれぞれをあらかじめ決められた選択順にしたがって選択し、選択された前記仮想ボリューム群に含まれる前記第２の仮想ボリュームのうち前記所定割合以上の仮想ボリュームにおいて前記通信エラーが検出されているかを判定することで前記特定仮想ボリューム群を特定し、
前記使用パスの切り替えでは、前記選択順にしたがって先に特定された前記特定仮想ボリューム群を前記使用パスの切り替え対象とする、
付記５記載のストレージ制御装置。
【０１５８】
（付記７）  複数のアクセスパスを介して記憶装置と接続されたコンピュータに、
複数の設定項目のそれぞれに対応する設定値が、前記複数の仮想ボリュームのそれぞれについて登録された設定情報を参照し、前記複数の設定項目は、前記複数のアクセスパスのうち前記記憶装置にアクセスする際に使用される使用パスに関するパス設定項目を含み、
前記記憶装置の記憶領域を用いて実現される複数の仮想ボリュームのそれぞれに対するアクセスが要求された場合、前記パス設定項目に対応する設定値に基づいて前記記憶装置にアクセスし、
前記複数の仮想ボリュームのうちの第１の仮想ボリュームに対するアクセス要求に応じて前記記憶装置にアクセスしたときに通信エラーを検出した場合、前記第１の仮想ボリュームに対応する前記使用パスを切り替えて前記記憶装置に再度アクセスし、
前記複数の仮想ボリュームのそれぞれに対するアクセス要求に応じて前記記憶装置にアクセスしたときに前記通信エラーが検出されたか否かを示す情報が、前記複数の仮想ボリュームのそれぞれについて登録されたエラー検出情報に基づいて、複数の仮想ボリューム群の中から特定仮想ボリューム群を特定し、前記複数の仮想ボリューム群のそれぞれは、前記設定情報に基づき、前記複数の仮想ボリュームのうち前記第１の仮想ボリュームと設定値が一致する第２の仮想ボリュームを、抽出条件として前記複数の設定項目のうち異なる設定項目をそれぞれ用いることによって抽出され、
前記特定仮想ボリューム群に含まれる前記第２の仮想ボリュームのうち、前記通信エラーが検出されていないすべての仮想ボリュームについて、前記使用パスを切り替える、
処理を実行させるパス切り替え制御プログラム。
【０１５９】
（付記８）  前記複数の設定項目は、前記パス設定項目を複数含み、
前記抽出条件として異なる前記パス設定項目が用いられる、
付記７記載のパス切り替え制御プログラム。
【０１６０】
（付記９）  前記複数の設定項目は、前記複数の仮想ボリュームがそれぞれ属するＲＡＩＤグループを示すＲＡＩＤ設定項目を含み、
前記抽出条件の１つとして前記ＲＡＩＤ設定項目が用いられる、
付記７または８記載のパス切り替え制御プログラム。
【０１６１】
（付記１０）  前記通信エラーとして、前記記憶装置へのアクセス要求のリトライアウトによるエラーが含まれる、
付記７乃至９のいずれか１つに記載のパス切り替え制御プログラム。
【０１６２】
（付記１１）  前記特定仮想ボリューム群として、前記エラー検出情報に基づき、前記複数の仮想ボリューム群の中から、前記第２の仮想ボリュームのうち所定割合以上の仮想ボリュームにおいて前記通信エラーが検出されている前記仮想ボリューム群が特定される、
付記７乃至１０のいずれか１つに記載のパス切り替え制御プログラム。
【０１６３】
（付記１２）  前記特定仮想ボリューム群の特定では、前記複数の仮想ボリューム群のそれぞれをあらかじめ決められた選択順にしたがって選択し、選択された前記仮想ボリューム群に含まれる前記第２の仮想ボリュームのうち前記所定割合以上の仮想ボリュームにおいて前記通信エラーが検出されているかを判定することで前記特定仮想ボリューム群を特定し、
前記使用パスの切り替えでは、前記選択順にしたがって先に特定された前記特定仮想ボリューム群を前記使用パスの切り替え対象とする、
処理をさらに実行させる付記１１記載のパス切り替え制御プログラム。
【符号の説明】
【０１６４】
１  ストレージ制御装置
１ａ  記憶部
１ｂ  制御部
２  記憶装置
１１  エラー検出情報
１２  設定情報
ＧＰ１，ＧＰ２  仮想ボリューム群
ＰＴ１〜ＰＴ６  ポート
ＶＬ１〜ＶＬ３  仮想ボリューム
【図１】
2019003586.tif 000003
【図２】
2019003586.tif 000004
【図３】
2019003586.tif 000005
【図４】
2019003586.tif 000006
【図５】
2019003586.tif 000007
【図６】
2019003586.tif 000008
【図７】
2019003586.tif 000009
【図８】
2019003586.tif 000010
【図９】
2019003586.tif 000011
【図１０】
2019003586.tif 000012
【図１１】
2019003586.tif 000013
【図１２】
2019003586.tif 000014
【図１３】
2019003586.tif 000015
【図１４】
2019003586.tif 000016
【図１５】
2019003586.tif 000017