(57)【要約】【課題】ホストコンピュータにおける業務を停止せず、かつ、ホストコンピュータでアクセスの失敗を推定できるような冗長パス制御装置を提供する。【解決手段】  例えばコントローラ１１で保守作業が実施されるときに、コントローラ１２には、コントローラ１１が保守作業中であることを示す情報が記憶される。ホストコンピュータ１の冗長化ドライバ４は、論理ディスク１３〜１５へのコントローラ１１側のパスを指定し、ホストコンピュータ１から論理ディスク１３〜１５にアクセスさせる。アクセスに失敗しても、コントローラ１２の記憶情報から、ホストコンピュータ１はアクセスの失敗の原因を判別できる。【選択図】  図１
2005251188.tif 000002
【特許請求の範囲】
【請求項１】
ホストコンピュータと、
それぞれが前記ホストコンピュータと外部の記憶装置とに接続され、前記ホストコンピュータと交信することによって前記ホストコンピュータによる当該記憶装置へのアクセスを媒介する複数のコントローラと、より構成されており、
前記ホストコンピュータからそれぞれの前記コントローラを経て前記記憶装置へと至る経路が、互いに別個のパスを構成しており、
それぞれの前記コントローラは、他の前記コントローラを含むパスの状態を示す状態情報を取得して、書き換え可能な態様で記憶し、前記ホストコンピュータからリクエストを供給されたとき、当該リクエストに応答して当該状態情報を前記ホストコンピュータに供給し、
前記ホストコンピュータは、前記リクエストを生成して前記コントローラに供給し、前記コントローラから前記状態情報を供給されたとき、当該状態情報に基づいて、前記複数のパスのうちいずれかを指定し、指定したパスを経由して前記記憶装置へアクセスする、
ことを特徴とする冗長パス制御装置。
【請求項２】
前記状態情報は、保守作業の対象となっているコントローラを示す情報を含んでいる、
ことを特徴とする請求項１に記載の冗長パス制御装置。
【請求項３】
前記ホストコンピュータは、
前記記憶装置へのアクセスが失敗した場合に、当該アクセスのために用いたパス以外のパスを構成する前記コントローラに前記リクエストを供給して、当該コントローラより前記状態情報を取得し、
前記アクセスが失敗した原因が、当該アクセスのために用いたパスを構成するコントローラが保守作業の対象であったためであるか否かを、取得した状態情報に基づいて推定し、
前記アクセスが失敗した原因が、当該アクセスのために用いたパスを構成するコントローラが保守作業の対象であったためであると推定したとき、当該アクセスのために用いたパスとは異なるパスを指定し、指定したパスを経由して前記記憶装置へアクセスする、
ことを特徴とする請求項２に記載の冗長パス制御装置。
【請求項４】
前記ホストコンピュータは、任意の前記コントローラに前記リクエストを周期的に供給して前記状態情報を取得することにより、保守作業の対象となっているコントローラを周期的に特定する、
ことを特徴とする請求項２に記載の冗長パス制御装置。
【請求項５】
複数の前記ホストコンピュータを備える、
ことを特徴とする請求項１に記載の冗長パス制御装置。
【請求項６】
ホストコンピュータと、それぞれが前記ホストコンピュータと外部の記憶装置とに接続され、前記ホストコンピュータと交信することによって前記ホストコンピュータによる当該記憶装置へのアクセスを媒介する複数のコントローラと、より構成されていて、前記ホストコンピュータからそれぞれの前記コントローラを経て前記記憶装置へと至る経路が、互いに別個のパスを構成しているシステムにおいて、前記ホストコンピュータが前記アクセスのために用いるパスを選択するための冗長パス制御方法であって、
それぞれの前記コントローラは、他の前記コントローラを含むパスの状態を示す状態情報を取得して、書き換え可能な態様で記憶し、前記ホストコンピュータからリクエストを供給されたとき、当該リクエストに応答して当該状態情報を前記ホストコンピュータに供給し、
前記ホストコンピュータは、前記リクエストを生成して前記コントローラに供給し、前記コントローラから前記状態情報を供給されたとき、当該状態情報に基づいて、前記複数のパスのうちいずれかを指定し、指定したパスを経由して前記記憶装置へアクセスする、
ことを特徴とする冗長パス制御方法。
【請求項７】
前記状態情報は、保守作業の対象となっているコントローラを示す情報を含んでいる、
ことを特徴とする請求項６に記載の冗長パス制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、論理ディスクを備えると共に、この論理ディスクへアクセスするパスを冗長に持ち、パスを適宜に切替えて論理ディスクの記憶領域をホストコンピュータに提供する冗長パス制御装置、及び冗長パス制御方法に関する。
【背景技術】
【０００２】
複数のハードディスク装置をあたかも１台のハードディスク装置のように使用可能とするためのディスクアレイシステムとして、例えば、特許文献１に示されたディスクアレイシステムがある。
【特許文献１】特開２００２−３０４３３１号公報
【０００３】
特許文献１のディスクアレイシステムを構成するホストコンピュータは、複数のハードディスク装置より構成される論理ディスクに格納されたデータへとアクセスする。このアクセスは、このホストコンピュータが実行するアプリケーションソフトウェアに従って行われる。
【０００４】
このディスクアレイシステムは、各論理ディスクにアクセスするための複数のパスと、これらのパスそれぞれに対応付けられたコントローラとを備える。この結果、例えばホストコンピュータから論理ディスクへの高速なアクセスが可能になる。また、いずれかのパスに障害が発生した場合でも、他のパスを用いることでデータを再度転送ことができる。すなわち、他のパスを用いたリトライ処理が可能となる。
【０００５】
さらに、このディスクアレイシステムは、特定の装置により占有された状態（リザーブ状態）の論理ディスクがある場合に、当該リザーブ状態を強制的に解除して、ホストコンピュータにより占有された状態へと切替える機能を有する。このため、特定の装置により占有されていたためにリトライ処理が異常終了した場合も、リトライ処理を再度行なってこれを成功させることができる。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ディスクアレイシステムについて、コントローラの保守作業を実施する場合、具体的には、コントローラのパッケージの交換や、コントローラのファームウェアの置換を行う場合は、保守対象であるコントローラに対する入出力のアクセスが行われないようにするため、以下の（１）〜（３）として示す手法のいずれかに従って、保守作業を行っていた。
【０００７】
（１）  ホストコンピュータからディスクアレイへのアクセスをすべて停止した後、保守作業を実施する。
【０００８】
（２）  コントローラに対する保守作業が完了するまでの一定の期間、コントローラは、アプリケーションソフトウェアに従ったホストコンピュータからのＩ／Ｏアクセスに対して無応答となる。ホストコンピュータは、コントローラが無応答になった場合に、それまで使用していた論理ディスクにアクセスするパスに何らかの障害が発生したと見なし、パスを切替えてアクセスを継続させる。これにより、保守対象のコントローラへのアクセスがなくなる。
【０００９】
（３）  ホストコンピュータに対する人為的操作を行うことにより、ホストコンピュータが論理ディスクにアクセスするパスを切り替えた後、保守作業を実施する。
【００１０】
上述の（１）〜（３）の手法では、次のような問題があった。
即ち、（１）の手法では、ホストコンピュータからディスクアレイ側へのすべてのアクセスを停止する。このため、ホストコンピュータ上で動作しているアプリケーションソフトウェアの処理を停止することが必須である。
【００１１】
これに対し、（２）の手法では、保守作業を受けているコントローラは、ホストコンピュータからの入出力要求に応答しなくなり、ホストコンピュータによるアクセスは失敗することになる。しかし、代替パス（つまり、他のコントローラ）を用いたリトライ処理が行われる。このため、アプリケーションソフトウェアの処理を停止する必要はない。ところが、ホストコンピュータの側では、アクセスに失敗した原因が、パスの障害によるものなのか、コントローラが保守作業を受けているためなのかを判別することができず、例えば、一律にパスの障害として扱うこととなる。このように、アクセスの失敗の原因が判別できない場合には、保守作業の混乱が起きる可能性がある。
【００１２】
また、（３）の手法では、保守対象のコントローラに対してアクセス要求が発行されることのないよう、あらかじめ人為的に、論理ディスクにアクセスするためのパスを変更する（保守対象ではないコントローラを経由するよう変更する）。しかし、ディスクアレイシステムに接続されるホストコンピュータの数や、各ホストコンピュータに接続されるパスの数が多くなると、人為的操作の内容が複雑になり、パスの切り替えのミスを招く危険性が高くなる。
【００１３】
そこで、本発明は、ホストコンピュータの処理を停止させず、ホストコンピュータの側でアクセス失敗の原因を推定できるような冗長パス制御装置及び冗長パス制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１４】
上記目的を達成するために、本発明の第１の観点に係る冗長パス制御装置は、
ホストコンピュータと、
それぞれが前記ホストコンピュータと外部の記憶装置とに接続され、前記ホストコンピュータと交信することによって前記ホストコンピュータによる当該記憶装置へのアクセスを媒介する複数のコントローラと、より構成されており、
前記ホストコンピュータからそれぞれの前記コントローラを経て前記記憶装置へと至る経路が、互いに別個のパスを構成しており、
それぞれの前記コントローラは、他の前記コントローラを含むパスの状態を示す状態情報を取得して、書き換え可能な態様で記憶し、前記ホストコンピュータからリクエストを供給されたとき、当該リクエストに応答して当該状態情報を前記ホストコンピュータに供給し、
前記ホストコンピュータは、前記リクエストを生成して前記コントローラに供給し、前記コントローラから前記状態情報を供給されたとき、当該状態情報に基づいて、前記複数のパスのうちいずれかを指定し、指定したパスを経由して前記記憶装置へアクセスする、
ことを特徴とする。
【００１５】
尚、前記状態情報は、保守作業の対象となっているコントローラを示す情報を含んでいてもよい。
【００１６】
また、前記ホストコンピュータは、
前記記憶装置へのアクセスが失敗した場合に、当該アクセスのために用いたパス以外のパスを構成する前記コントローラに前記リクエストを供給して、当該コントローラより前記状態情報を取得し、
前記アクセスが失敗した原因が、当該アクセスのために用いたパスを構成するコントローラが保守作業の対象であったためであるか否かを、取得した状態情報に基づいて推定し、
前記アクセスが失敗した原因が、当該アクセスのために用いたパスを構成するコントローラが保守作業の対象であったためであると推定したとき、当該アクセスのために用いたパスとは異なるパスを指定し、指定したパスを経由して前記記憶装置へアクセスするものであってもよい。
【００１７】
また、前記ホストコンピュータは、任意の前記コントローラに前記リクエストを周期的に供給して前記状態情報を取得することにより、保守作業の対象となっているコントローラを周期的に特定するものであってもよい。
【００１８】
また、冗長パス制御装置は、複数の前記ホストコンピュータを備えるものであってもよい。
【００１９】
また、本発明の第２の観点に係る冗長パス制御方法は、
ホストコンピュータと、それぞれが前記ホストコンピュータと外部の記憶装置とに接続され、前記ホストコンピュータと交信することによって前記ホストコンピュータによる当該記憶装置へのアクセスを媒介する複数のコントローラと、より構成されていて、前記ホストコンピュータからそれぞれの前記コントローラを経て前記記憶装置へと至る経路が、互いに別個のパスを構成しているシステムにおいて、前記ホストコンピュータが前記アクセスのために用いるパスを選択するための冗長パス制御方法であって、
それぞれの前記コントローラは、他の前記コントローラを含むパスの状態を示す状態情報を取得して、書き換え可能な態様で記憶し、前記ホストコンピュータからリクエストを供給されたとき、当該リクエストに応答して当該状態情報を前記ホストコンピュータに供給し、
前記ホストコンピュータは、前記リクエストを生成して前記コントローラに供給し、前記コントローラから前記状態情報を供給されたとき、当該状態情報に基づいて、前記複数のパスのうちいずれかを指定し、指定したパスを経由して前記記憶装置へアクセスする、
ことを特徴とする。
【００２０】
尚、前記状態情報は、保守作業の対象となっているコントローラを示す情報を含んでいるものであってもよい。
【発明の効果】
【００２１】
本発明によれば、ホストコンピュータが実行する処理を停止しなくても、ホストコンピュータが記憶装置を利用できる。また、ホストコンピュータが記憶装置へのアクセスに失敗した場合でも、各コントローラがポートの状態を示す情報を記憶しているので、この情報に基づいて、アクセスの失敗の原因を判別することができる。
【発明を実施するための最良の形態】
【００２２】
以下、本発明の実施の形態を説明する。
図１は、本発明の実施の形態に係るホストコンピュータ１及びディスクアレイシステム１０の構成を示す図である。
【００２３】
ホストコンピュータ１は、プロセッサ、メモリ及びインターフェース回路などより構成されており、図示するように、ファイルシステム２と、上位ドライバ３と、パス冗長化ドライバ４と、下位ドライバ５と、イニシエータとなるＨＢＡ（Host Bus Adapter）６及び７と、を備え、アプリケーション８を実行する。なお、これらは互いに別個のハードウェアより構成されている必要はない。従って、例えば、１個のプロセッサが、アプリケーション８を実行するほか、ファイルシステム２、上位ドライバ３、パス冗長化ドライバ４、下位ドライバ５、ＨＢＡ６及び７の機能をレイヤとして提供するプログラムを実行するようにしてもよい。
【００２４】
ディスクアレイシステム１０は、図示するように、複数の論理ディスクを備え、更に、この論理ディスクへアクセスするためのパスを冗長に備える。そして、パスを適宜に切替えることにより論理ディスクの記憶領域をホストコンピュータ１に提供する。
【００２５】
ディスクアレイシステム１０は、具体的には、例えば２個のコントローラ１１及び１２と、任意の数のハードディスクより構成された論理ディスク１３，１４及び１５と、を備えている。コントローラ１１及び１２は、それぞれ、例えばプロセッサ、メモリ及びインターフェース回路などより構成されている。コントローラ１１は、ホストコンピュータ１からデータやコマンドを取得するホスト接続ポート１６を備えている。同様に、コントローラ１２はホスト接続ポート１７を備えている。コントローラ１１は、内部バス１８を介し、論理ディスク１３，１４及び１５に接続されている。コントローラ１２は、内部バス１９を介し、論理ディスク１３，１４及び１５に接続されている。そして、ホストコンピュータ１からコントローラ１１を経て論理ディスク１３，１４及び１５へと至る経路と、ホストコンピュータ１からコントローラ１２を経て論理ディスク１３，１４及び１５へと至る経路とが、互いに別個のパスを構成している。
【００２６】
ＨＢＡ６は、ホストインタフェースケーブル２０を介してホスト接続ポート１６に接続されている。ＨＢＡ７は、ホストインタフェースケーブル２１を介してホスト接続ポート１７に接続されている。
【００２７】
ホストコンピュータ１は、ディスクアレイシステム１０に与えるコマンドの発行をおこなう。そして、論理ディスク１３、１４及び１５に対するアクセスを行う。具体的には、論理ディスク１３、１４又は１５へのデータの供給及び論理ディスク１３、１４及び１５からのデータの取得を実行する。
【００２８】
下位ドライバ５は、ＨＢＡ６又は７を制御して、ＨＢＡ６又は７を介したデータの入出力を実行する。
【００２９】
パス冗長化ドライバ４は、上位ドライバ３からコマンドやデータを受け取って、下位ドライバ５に引き渡す。また、パス冗長化ドライバ４は、ディスクアレイシステム１０の論理ディスク１３、１４，１５に対するアクセスを実施した結果を示す情報を、ＨＢＡ６又は７と、下位ドライバ５とを介して受け取る。そして、この情報等に基づき、アクセスが正常終了したか異常終了したか、及び、異常終了の場合はその原因を判断する。そして、異常終了の原因がパスの構成要素（例えば、ＨＢＡ６及び７、ホストインタフェースケーブル２０及び２１、コントローラ１１及び１２等）について発生した障害ないし故障と判断した場合は、代替パスを用いて、異常終了したアクセスのリトライ処理を行う。
【００３０】
ディスクアレイシステム１０のコントローラ１１は、内部バス１８を介して各論理ディスク１３，１４及び１５に接続されている。コントローラ１２は、内部バス１９を介して各論理ディスク１３，１４及び１５に接続されている。コントローラ１１及び１２は、いずれも、各論理ディスク１３，１４及び１５にアクセスすることができる。
【００３１】
次に、ホストコンピュータ１及びディスクアレイシステム１０の動作を説明する。
ディスクアレイシステム１０に書き込まれるデータは、アプリケーション８を実行するホストコンピュータ１によって、ファイルシステム２、上位ドライバ３、パス冗長化ドライバ４、下位ドライバ５、例えばＨＢＡ６、ホストインタフェースケーブル２０及びホスト接続ポート１６を介してコントローラ１１に至り、このデータは、論理ディスク１３，１４又は１５のうちコントローラ１１により指定されたものに書き込まれる。
【００３２】
ディスクアレイシステム１０から読み出されるデータは、例えば、論理ディスク１３，１４又は１５のうちコントローラ１１により指定されたものより、コントローラ１１、ホスト接続ポート１６及びホストインタフェースケーブル２０を介してＨＢＡ６に至り、更に、下位ドライバ５、パス冗長化ドライバ４、上位ドライバ３及びファイルシステム２を経て、ホストコンピュータ１が実行しているアプリケーション８の処理へと引き渡される。
【００３３】
また、ホストコンピュータ１によるデータの入出力の実行結果については、ＨＢＡ６、下位ドライバ５、パス冗長化ドライバ４、上位ドライバ３、ファイルシステム２及びアプリケーション８の各レイヤによって判断が行われ、必要に応じた適宜の処理が行われるのが一般的である。
【００３４】
このうち、パス冗長化ドライバ４は、上述したように、下位ドライバ５より受け取った情報等に基づき、アクセスが正常終了したか異常終了したかの判断、及び、異常終了の場合はその原因の判断を行う。そして、異常終了の原因がパスの構成要素について発生した障害ないし故障と判断した場合は、代替パスを用いて、異常終了したアクセスのリトライ処理を行う。
【００３５】
さらに、パス冗長化ドライバ４は、一方のパス（例えば、コントローラ１１）のみに入出力が集中することのないよう、コントローラ１１又は１２にデータ入出力の処理を振り分けることにより、他方のパスを有効に活用し、入出力の負荷分散を行う。
【００３６】
以降では、保守作業の一例として、ディスクアレイシステム１０のコントローラ１１又は１２が記憶するファームウェアを置換する作業を行う場合について説明する。
【００３７】
まず、ディスクアレイシステム１０側の動作を図２〜図５を参照して説明する。
図２は、コントローラ１１及び１２が行うコマンド処理の一部を示すフローチャートである。
図３は、ファームウェアダウンロード処理を示すフローチャートである。
図４は、ポート状態取得コマンドデコード処理を示すフローチャートである。
図５は、コントローラ１１及び１２からホストコンピュータ１に与える情報を説明するための図である。
【００３８】
コントローラ１１及び１２は、ホストコンピュータ１からコマンドを受け取ると、このコマンドが正しく実行できるものであるかどうかを判断する（ステップＳ１０１）。そして、正しく実行することができないコマンドであれば（ステップＳ１０１：ＮＯ）、異常終了処理（ステップＳ１２０）へ移行する。正しく実行することが可能なコマンドであれば（ステップＳ１０１；ＹＥＳ）、このコマンドがファームウェアダウンロードコマンドであるか否かを判断する（ステップＳ１０２）。ファームウェアダウンロードコマンドであれば（ステップＳ１０２：ＹＥＳ）、ファームウェアダウンロードコマンドデコード処理（ステップＳ１２１）へ移行し、そうでなければ（ステップＳ１０２：ＮＯ）、ステップＳ１０３へ進む。
【００３９】
ステップＳ１０２からファームウェアダウンロードコマンドデコード処理（ステップＳ１２１）へ移行した場合は、図３に示すように、置換する対象のファームウェアを示すファームウェアコードをホストコンピュータ１から受け取ると（ステップＳ２０１）、当該ファームウェアを記憶するコントローラは、自己のポートの状態をホストコンピュータ１に示すために自己が記憶する情報を、ファームウェア置換開始指示待ちを示すよう設定し（ステップＳ２０２）、正常終了処理（ステップＳ２０３）へ移行する。
【００４０】
なお、コントローラ１１及び１２は、ホストコンピュータ１に示すための上述の情報として、各コントローラのポートないし当該ポートを含むパスの状態を示すポート状態情報を、図５に示すように、ポートの番号と、このポートに与えられているWorld Wide Port Nameとに対応付けて記憶する。（なお、コントローラ１１及び１２が互いのポートの状態についての情報を取得し合う手法は任意である。）
【００４１】
ステップＳ２０２でコントローラ１１又は１２は、各ポートについてのポート状態情報を更新する。なお、ポートの状態としては、ファームウェア置換開始指示待ちの他に、例えば、正常、ファームウェア置換処理中、ファームウェア置換処理失敗、の各状態がある。
【００４２】
外部の保守制御装置からファームウェアをダウンロードすると、まず、コントローラ１１又は１２は、自己が記憶する、このファームウェアを書き込む対象のコントローラのポートについてのポート状態情報を、ファームウェア置換開始指示待ちを示す状態へと更新する。ただし、ファームウェア置換開始指示コマンドを受け取るまではファームウェアの置換は開始せず、現在のファームウェアに従った処理を継続する。
【００４３】
続いて、コントローラ１１又は１２は、ホストコンピュータ１から与えられたコマンドがポート状態取得コマンドであるかを判断する（ステップＳ１０３）。そして、ポート状態取得コマンドであれば（ステップＳ１０３：ＹＥＳ）、ポート状態取得コマンドデコード処理（ステップＳ１２２）へ移行し、そうでなければ（ステップＳ１０３：ＮＯ）、ステップＳ１０４へ進む。
【００４４】
ステップＳ１０３でポート状態取得コマンドデコード処理（ステップＳ１２２）へ移行した場合、当該コントローラは、自己が記憶するポート状態情報を、各コントローラのポートないし当該ポートを含むパスの状態を正しく示すよう編集し（ステップＳ３０１）、正常終了処理（ステップＳ３０２）へ移行する。
ステップＳ１０４で、コントローラ１１又は１２は、ホストコンピュータ１から与えられたコマンドがファームウェア置換開始指示コマンドであるか否かを判断する。そして、ファームウェア置換開始指示コマンドであれば（ステップＳ１０４：ＹＥＳ）、ステップＳ１０５へ進み、そうでなければ（ステップＳ１０４：ＮＯ）、既存コマンドデコード処理（ステップＳ１２３）へ移行する。
【００４５】
ステップＳ１０５で、コントローラ１１又は１２は、自己のポート１６又は１７の状態が、ファームウェア置換開始指示待ちであるかを判断する。そして、ファームウェア置換開始指示待ちでなければ（ステップＳ１０５：ＮＯ）、終了処理（ステップＳ１２４）へ移行する。一方、ファームウェア置換開始指示待ちであれば（ステップＳ１０５：ＹＥＳ）、自己が記憶する、自己のポートについてのポート状態情報を、ファームウェア置換処理中の状態を示すように更新し（ステップＳ１０６）、ファームウェア置換処理を開始する（ステップＳ１０７）。このように、ファームウェア置換の対象であるポートの状態をファームウェア置換処理中の状態へと更新することで、ホストコンピュータ１は、コントローラ１１又は１２が保守作業中であることを認識することができる。
【００４６】
次に、コントローラ１１又は１２は、当該処理の結果を判断する（ステップＳ１０８）。そして、正常終了であれば（ステップＳ１０８：ＹＥＳ）、自己が記憶する、ファームウェア置換処理を行ったのポートについてのポート状態情報を、正常な状態を示すようと更新し（ステップＳ１０９）、正常終了処理（ステップＳ１１０）へ移行する。異常終了であれば（ステップＳ１０８：ＮＯ）、自己が記憶するポート状態情報を、ファームウェア置換処理失敗の状態を示すよう更新し（ステップＳ１２５）、異常終了処理（ステップＳ１２６）へ移行する。
次に、ホストコンピュータ１のパス冗長化ドライバ４の動作を、図６〜図９を参照しつつ説明する。
【００４７】
図６は、図１のパス冗長化ドライバ４が実施する処理過程の一部を示したフローチャートである。
図７は、パス切り戻し処理を示すフローチャートである。
図８は、パス死活監視処理を示すフローチャートである。
図９は、ファームウェア置換開始指示処理を示すフローチャートである。
【００４８】
パス冗長化ドライバ４は、ファームウェア置換処理中フラグ及びファームウェア置換処理終了フラグを使用し、図６〜図９に示す処理を実施する。
なお、バス冗長化ドライバ４は、ディスクアレイシステム１０のそれぞれのポートについて、ファームウェア置換処理中フラグ及びファームウェア置換処理終了フラグを記憶するものとし、パス冗長化ドライバ４が初めて起動する初期化時には、ファームウェア置換処理中フラグ及びファームウェア置換処理終了フラグをクリアするものとする。
【００４９】
パス冗長化ドライバ４は、上位ドライバ３から、ディスクアレイシステム１０へのデータの入出力のリクエストを受け取る（ステップＳ４０１）。このリクエストには、データを入出力するパスを指定する情報も含まれる。
【００５０】
パス冗長化ドライバ４は、データの入出力に用いようとするパスについてファームウェア置換処理終了フラグがセットされているかを判断する（ステップＳ４０２）。セットされていれば（ステップＳ４０２：ＹＥＳ）、既にファームウェア置換処理は終了しているため、図７のパス切戻し処理へ移行する（ステップＳ４２０）。
【００５１】
ファームウェア置換処理終了フラグがセットされていなければ（ステップＳ４０２：ＮＯ）、パス冗長化ドライバ４は、ファームウェア置換処理中フラグがセットされているかを判断する（ステップＳ４０３）。セットされていれば（ステップＳ４０３：ＹＥＳ）、後述するように、これからデータを入出力しようとするパスのコントローラ１１又は１２において、ファームウェアの置換が行われているため、ステップＳ４１２へスキップする。ファームウェア置換処理中フラグがセットされていなければ（ステップＳ４０３：ＮＯ）、下位ドライバ５へデータ入出力のリクエストを発行し（ステップＳ４０４）、その実行結果を確認する（ステップＳ４０５）。
【００５２】
ステップＳ４０５で、正常終了と確認された場合は（ステップＳ４０５：ＹＥＳ）、正常終了処理（ステップＳ４２１）へ移行する。異常終了と確認された場合は（ステップＳ４０５：ＮＯ）、指定されたパスで障害が発生しているか、もしくはファームウェア置換処理中の可能性がある。このためステップＳ４０６では、異常終了の原因の判別を行うために、パス冗長化ドライバ４が管理している有効なポート１６及び１７のうち、異常終了となったアクセスの際に用いられたパス以外のパスを構成するポートを指定して、このポートの状態の情報を求めるポート状態取得コマンドを生成し、下位ドライバ５へ発行する（ステップＳ４０７）。
【００５３】
ここで、ポート状態取得コマンドを発行した結果としてディスクアレイシステム１０から得られる情報は、先に説明したステップＳ３０１で編集された情報である。
【００５４】
ステップＳ４０８で、パス冗長化ドライバ４は、ステップＳ４０７で発行したコマンドの実行結果が正常であったかどうかを確認する。異常終了であれば（ステップＳ４０８：ＮＯ）、パスに障害が発生しているといえるので、異常終了処理（ステップＳ４２２）へ移行する。正常終了であれば（ステップＳ４０８：ＹＥＳ）、パス冗長化ドライバ４にはポート状態情報が正常に供給されているといえるので、これを取得する（ステップＳ４０９）。そして、ステップＳ４０９で取得したポート状態情報に基づいて、ステップＳ４０７で指定されたポートを有するコントローラがファームウェア置換処理中であるかを判断する（ステップＳ４１０）。ファームウェア置換処理中でないと判別した場合は（ステップＳ４１０：ＮＯ）、ステップＳ４０５の判断で異常終了となった原因がパスの一時的な間欠障害であったと判断し、異常終了処理（ステップＳ４２３）へ移行する。
【００５５】
一方、ファームウェア置換処理中であると判別すれば（ステップＳ４１０：ＹＥＳ）、パス冗長化ドライバ４は、当該判別の対象であるポートについてのファームウェア置換処理中フラグをセットし、当該ポートについてのファームウェア置換処理終了フラグをクリアして（ステップＳ４１１）、ステップＳ４１２に処理を移す。
【００５６】
ステップＳ４１２で、パス冗長化ドライバ４は、ステップＳ４０９で取得したポート状態情報と、パス冗長化ドライバ４が状態を把握している有効なパス内のポートのWorld Wide Port Nameとに基づいて、リトライに使用するパスを決定する。
【００５７】
次に、パス冗長化ドライバ４は、下位ドライバ５へ、ステップＳ４１２で決定したパスを経由するデータ入出力のリクエストを再度発行する（ステップＳ４１３）。ここでのリクエストの発行は、ステップＳ４０１で上位ドライバから受け取り、ステップＳ４０５で異常終了と判断したリクエストに対するリトライ処理も兼ねるものである。
【００５８】
次に、パス冗長化ドライバ４は、ステップＳ４１３でリクエストを発行したデータ入出力の実行結果を確認する（ステップＳ４１４）。正常終了と確認すれば（ステップＳ４１４：ＹＥＳ）、処理を終了する（ステップＳ４１５）。この場合、ステップＳ４０１で上位ドライバから受け取った後一旦ステップＳ４０５で異常終了と判断されたリクエストは、今度は正常にディスクアレイシステム１０に送信されている。
また、ステップＳ４０３でファームウェア置換処理中と判別したため、ステップＳ４１２へスキップして実施したデータ入出力のリクエストも正常に終了する。これにより、ファームウェア置換処理中においても、ホストコンピュータ１は、アプリケーション８に従った処理を継続することができる。一方、パス冗長化ドライバ４は、異常終了と確認した場合（ステップＳ４１４：ＮＯ）、異常終了処理（ステップＳ４２４）へ移行する。
【００５９】
次に、ステップＳ４２０のパス切り戻し処理を説明する。
上述のように、コントローラ１１又は１２がファームウェア置換処理中の場合に、ファームウェア置換処理中のコントローラを含む本来のパスは使用されず、ディスクアレイシステム１０の論理ディスク１３，１４又は１５へのデータの入出力のアクセスには、他のパスが使用される。図７のパス切り戻し処理は、ファームウェア置換処理終了後、アクセスに利用するパスを、ファームウェア置換処理開始前に利用していた本来のパスへと戻すための処理である。
【００６０】
パス冗長化ドライバ４は、ステップＳ４０１で上位ドライバから受け取ったリクエストが示す本来のパスを指定し、下位ドライバ５を介して、データ入出力のリクエストを発行する（ステップＳ５０１）。
【００６１】
次にパス冗長化ドライバ４は、このリクエストの実行結果が正常終了か否かを確認する（ステップＳ５０２）。そして、異常終了と確認すれば（ステップＳ５０２：ＮＯ）、異常終了処理（ステップＳ５１０）へ移行する。正常終了と確認すれば（ステップＳ５０２：ＹＥＳ）、当該本来のパスについてのファームウェア置換処理中フラグ及びファームウェア置換処理終了フラグをいずれもクリアし（ステップＳ５０３）、パス切戻し処理を終了する（ステップＳ５０４）。
【００６２】
次に、ステップＳ４０２及びＳ４０３で利用されるファームウェア置換処理中フラグ及びファームウェア置換処理終了フラグの設定手順を示す。
【００６３】
データ入出力の頻度の少ないパス等では、パスに障害が発生していてもすぐにはこの障害を検出することができない。障害を迅速に検出するため、パス冗長化ドライバ４は、図８に示すパス死活監視処理を実施する。パス死活監視処理は、すべてのパスに対して、定期的（例えば１分毎）にコマンドを発行し、このコマンドの実行結果に基づいてパス障害の有無を判断する処理である。なお、コマンドを発行するタイミングを決定する手法は任意である。従って、例えば、ホストコンピュータ１のプロセッサを駆動するためのクロック信号を、ホストコンピュータ１が備える発振器などから取得し、このクロック信号に基づいてタイミングを決定してもよい。
【００６４】
パス死活監視処理において、パス冗長化ドライバ４は、自己が状態を把握している複数のパスのうち１つを選択して、当該パスに含まれるポートについてのポート状態情報を取得するコマンドのリクエストを生成し（ステップＳ６０１）、下位ドライバ５へ、このリクエストを発行する（ステップＳ６０２）。そしてパス冗長化ドライバ４は、このリクエストの実行結果をステップＳ６０３で確認する。
【００６５】
リクエストの実行結果が異常終了である場合は（ステップＳ６０３：ＮＯ）、リクエストを発行したパスに障害が発生していることを意味するので、パス障害検出処理（ステップＳ６１０）へ移行する。正常終了であれば（ステップＳ６０３：ＹＥＳ）、ポート状態情報を取得し（ステップＳ６０４）、ファームウェア置換開始待ちの状態にあるポートの有無を判別する（ステップＳ６０５）。
【００６６】
そして、ファームウェア置換開始待ちの状態のポートがあれば（ステップＳ６０５：ＹＥＳ）、ファームウェア置換開始指示処理（ステップＳ６１１）へ移行する。該当するポートがなければ（ステップＳ６０５：ＮＯ）、ステップＳ６０６で、ファームウェア置換処理中の状態にあるポートの有無を判別する。
【００６７】
ステップＳ６０６での判別の結果、ファームウェア置換処理中のポートがあると判別すれば（ステップＳ６０６：ＹＥＳ）、該当するポートについてのファームウェア置換処理中フラグをセットし、当該ポートについてのファームウェア置換処理終了フラグをクリアして（ステップＳ６１２）、パス死活監視処理を終了する（ステップＳ６０８）。また、ファームウェア置換処理中のポートがなければ（ステップＳ６０６：ＮＯ）、該当するポートについてのファームウェア置換処理終了フラグをセットし（ステップＳ６０７）、パス死活監視処理を終了する（ステップＳ６０８）。
【００６８】
なお、ステップＳ６１１のファームウェア置換指示処理として、パス冗長化ドライバ４は、具体的には図９に示すステップＳ７０１〜ステップＳ７１０の処理を実行する。
【００６９】
すなわち、ステップＳ７０１において、パス冗長化ドライバ４は、ファームウェア置換開始指示待ちの状態にあるポートを備えるコントローラを指定したファームウェア置換開始指示コマンドのリクエストを生成し（ステップＳ７０１）、下位ドライバ５へ、当該リクエストを発行する（ステップＳ７０２）。そして、ステップＳ７０２で発行したリクエストの実行結果をステップＳ７０３で確認する。
【００７０】
そして、パス冗長化ドライバ４は、リクエストの実行結果が異常終了であれば（ステップＳ７０３：ＮＯ）、異常終了処理（ステップＳ７１０）へ移行する。正常終了であれば（ステップＳ７０３：ＹＥＳ）、当該ポートについてのファームウェア置換処理中フラグをセットし、当該ポートについてのファームウェア置換処理終了フラグをクリアし（ステップＳ７０４）、ファームウェア置換開始指示処理を終了する（ステップＳ７０５）。
【００７１】
以上説明した処理が行われることにより、ディスクアレイシステム１０内にある、ファームウェア置換を必要とするコントローラに対して、順次ファームウェアがダウンロードが実施される。そして、ホストコンピュータ１が実行する処理を停止せずに、ディスクアレイシステム１０のコントローラが記憶するファームウェアが変更される。
【００７２】
なお、上述の処理のうち、ファームウェアのダウンロード及び置換を行う処理の部分をコントローラのパッケージ交換の処理へと変更すれば、ホストコンピュータ１が実行する処理を停止せずに、コントローラのパッケージ交換を行うこともできる。
【００７３】
以上説明したように、本実施の形態では、ホストコンピュータ１が実行する処理に基づくデータ入出力を停止せずに、ディスクアレイシステム１０の保守作業を実施することができる。
又、データ入出力のリクエストの失敗の原因がパスの障害（具体的には、パスを構成するＨＢＡ、ホストインタフェースケーブル又はコントローラのいずれかの障害）によるものなのか、コントローラ１１又は１２が保守作業中に無応答となることによるものか、の判別がパス冗長化ドライバ４で可能となる。従って、すべての障害が一律にパスの障害として扱われるということがなくなり、保守作業時の混乱が回避される。
【００７４】
また、パスを切り替えるための人為的操作が不要であり、さらに、ディスクアレイシステムに接続されるホストコンピュータやパスの数に関係なく、ディスクアレイシステムとパス冗長化ドライバの間で協調してパスの変更が行われるため、保守作業を行う際の操作ミスの危険がない。
【００７５】
なお、本発明は、上記の実施形態に限定されるものではなく、種々の変形が可能である。
例えば、図１０に示すように、ホストコンピュータ１の数は複数であってもよく、これら複数のホストコンピュータ１が、共通のディスクアレイシステム１０にアクセスするという構成が採られてもよい。
【００７６】
また、ホストコンピュータ１が備えるＨＢＡの数は２個には限られない。図１に示す構成では、ホストコンピュータ１は２個のＨＢＡ６及び７を備えているが、ホストコンピュータ１は、自己が実行しているオペレーティングシステムの仕様、下位ドライバ５の仕様、及びホストコンピュータ１のハードウェアの仕様等に起因する制約の範囲内である限り、さらに多数のＨＢＡを搭載してもよい。
【００７７】
また、図１に示す構成では、ディスクアレイシステム１０は２個のコントローラ１１及び１２を備えているものの、ディスクアレイシステム１０が備えるコントローラの数も２個に限られない。
【００７８】
また、図１に示す構成では、論理ディスクはディスクアレイシステム１０内に構築されているが、論理ディスクは、ディスクアレイシステム１０に接続されたＪＢＯＤ（Just Bunch Of Disks）等の外部のディスクより構成されてもよい。
【００７９】
また、ホストコンピュータ１に接続されるディスクアレイシステム１０の数、ディスクアレイシステム１０内に構築される論理ディスクの数、ディスクアレイサブシステム１０内の内部バスの数は、いずれも任意である。
【００８０】
また、ポート状態情報が表し得るポートの状態は、正常、ファームウェア置換開始指示待ち、ファームウェア置換処理中、ファームウェア置換処理失敗の４種類に限られる必要はなく、任意の基準に従って分類されていてよい。
【００８１】
また、コントローラ１１又は１２がファームウェアを取得する源は任意である。従って、例えば、遠隔地にある保守センター等から通信回線等を介してファームウェアをダウンロードしてもよい。
【図面の簡単な説明】
【００８２】
【図１】本発明の実施形態に係るホストコンピュータ及びディスクアレイシステムの構成を示す図である。
【図２】コントローラが行うコマンド処理の一部を示すフローチャートである。
【図３】ファームウェアダウンロード処理を示すフローチャートである。
【図４】ポート状態取得コマンドデコード処理を示すフローチャートである。
【図５】コントローラがホストコンピュータに与える情報を説明する図である。
【図６】図１のパス冗長化ドライバが実施する処理の過程の一部を示したフローチャートである。
【図７】パス切り戻し処理を示すフローチャートである。
【図８】パス死活監視処理を示すフローチャートである。
【図９】ファームウェア置換開始指示処理を示すフローチャートである。
【図１０】図１の変形例を示す図である。
【符号の説明】
【００８３】
１      ホストコンピュータ
２      ファイルシステム
４      パス冗長化ドライバ
６，７      ＨＢＡ
８          アプリケーション
１０        ディスクアレイシステム
１１，１２  コントローラ
１３〜１５  論理ディスク
１６，１７  ホスト接続ポート
１８，１９  内部バス
２０，２１  ホストインタフェースケーブル
【図１】
2005251188.tif 000003
【図２】
2005251188.tif 000004
【図３】
2005251188.tif 000005
【図４】
2005251188.tif 000006
【図５】
2005251188.tif 000007
【図６】
2005251188.tif 000008
【図７】
2005251188.tif 000009
【図８】
2005251188.tif 000010
【図９】
2005251188.tif 000011
【図１０】
2005251188.tif 000012