(57)【要約】  外部装置が使用する論理記憶領域を作成するための物理記憶領域を提供する複数の記憶ドライブと、前記記憶ドライブへのデータ入出力を実行するドライブインタフェース部と、前記記憶ドライブ及び前記ドライブインタフェース部に動作電源を供給する電源部とを有するドライブユニット部と、前記外部装置から前記記憶ドライブへのデータ書き込み処理及び前記記憶ドライブからのデータ読み出し処理を含むデータ入出力処理を、前記ドライブインタフェース部を介して実行する複数の演算装置と、各前記演算装置からの要求により前記ドライブインタフェース部へのコマンドを発行するドライブ制御インタフェース部とを備えた記憶制御部と、複数の前記演算装置のそれぞれが、前記ドライブユニット部の前記ドライブインタフェース部との間でデータ転送を実行するための通信路であるデータパスを通じてデータ入出力処理を実行しようとしたときに当該データ入出力処理が成功したかを前記データパス毎に記録するための障害有無記憶部と、前記複数の演算装置のいずれかが、前記ドライブインタフェース部との間の前記データ入出力処理が正常に実行されなかったと判定した場合に当該データ入出力処理異常を前記障害有無記憶部に記録した後所定時間以内に他の前記演算装置が各々実施した前記データ入出力処理の結果を前記障害有無記憶部に記録したか判定し、最初にデータ入出力異常を検出した前記演算装置が前記障害有無記憶部に前記データパスのすべてについてデータ入出力処理異常が記録されていると判定した場合に、データ入出力処理異常が検出されたドライブユニット部及び当該ドライブユニット部の下流側に接続されている他のドライブユニット部に対するデータ入出力処理の停止を指示する電源障害検出処理を実行する障害検出部とを備えているストレージ装置である。
2012081071.tif 000002
【特許請求の範囲】
【請求項１】
外部装置が使用する論理記憶領域を作成するための物理記憶領域を提供する複数の記憶ドライブと、前記記憶ドライブへのデータ入出力を実行するドライブインタフェース部と、前記記憶ドライブ及び前記ドライブインタフェース部に動作電源を供給する電源部とを有するドライブユニット部と、
前記外部装置から前記記憶ドライブへのデータ書き込み処理及び前記記憶ドライブからのデータ読み出し処理を含むデータ入出力処理を、前記ドライブインタフェース部を介して実行する複数の演算装置と、各前記演算装置からの要求により前記ドライブインタフェース部へのコマンドを発行するドライブ制御インタフェース部とを備えた記憶制御部と、
複数の前記演算装置のそれぞれが、前記ドライブユニット部の前記ドライブインタフェース部との間でデータ転送を実行するための通信路であるデータパスを通じてデータ入出力処理を実行しようとしたときに当該データ入出力処理が成功したかを前記データパス毎に記録するための障害有無記憶部と、
前記複数の演算装置のいずれかが、前記ドライブインタフェース部との間の前記データ入出力処理が正常に実行されなかったと判定した場合に当該データ入出力処理異常を前記障害有無記憶部に記録した後所定時間以内に他の前記演算装置が各々実施した前記データ入出力処理の結果を前記障害有無記憶部に記録したか判定し、最初にデータ入出力異常を検出した前記演算装置が前記障害有無記憶部に前記データパスのすべてについてデータ入出力処理異常が記録されていると判定した場合に、データ入出力処理異常が検出されたドライブユニット部及び当該ドライブユニット部の下流側に接続されている他のドライブユニット部に対するデータ入出力処理の停止を指示する電源障害検出処理を実行する障害検出部と、
を備えているストレージ装置。
【請求項２】
前記障害検出部は、前記所定時間後に前記障害有無記憶部を参照したときに、いずれかのデータパスについてデータ入出力処理結果が記録されていないと判定した場合に、該当のデータパスに対してデータ入出力処理検査用コマンドを発行し、当該コマンドの処理結果を前記障害有無記憶部に記録し、
前記ドライブ制御インタフェース部に前記演算装置が発行するコマンドを順次一時的に格納しておくデータキューが設けられており、前記障害検出部は、前記データ入出力処理検査用コマンドを発行する前に、当該コマンドが発行されるデータパスに設けられているデータキューに格納されているデータをすべて消去し、
前記障害検出部は、前記障害有無記憶部において、すべての前記データパスについて、特定の前記ドライブユニット部以降の下流側で前記データ入出力処理異常が記録されていないと判定した場合、前記データ入出力処理異常が記録されている前記データパスのあて先である前記記憶ドライブの異常であると判定して当該記憶ドライブについての異常記録回数を累積的に記録し、
前記障害検出部の機能を実行した前記演算装置が前記障害有無記憶部を参照し、前記データ入出力処理が停止されている前記ドライブユニット部があると判定した場合、当該ドライブユニット部に設けられている前記ドライブインタフェース部への前記データパスに前記データ入出力処理検査用コマンドを発行し、発行された当該コマンドがすべて正常に処理されたと判定した場合に前記障害検出部が検出した電源障害が回復したと判定する電源障害回復処理を実行する障害回復部を備え、
前記ドライブユニット部に設けられている複数の前記記憶ドライブはデータ格納の冗長度、あるいはデータ入出力における誤り訂正を含む所定の目的を果たすように編成された組み合わせを構成しており、前記障害検出部は、いずれかの前記ドライブユニット部について、前記組み合わせを構成できない態様で前記データパスに前記データ入出力異常を検出した場合に、当該ドライブユニット部に電源障害が発生したと判定し、
前記ドライブユニット部に設けられている複数の前記記憶ドライブはデータ格納の冗長度、あるいはデータ入出力における誤り訂正を含む所定の目的を果たすように編成された組み合わせを構成しており、前記障害回復部は、いずれかの前記ドライブユニット部について、前記組み合わせを少なくとも構成できる態様で前記データパスが正常な前記データ入出力処理を実行することができると判定した場合に、当該ドライブユニット部の電源障害が回復したと判定する、請求項１に記載のストレージ装置。
【請求項３】
前記障害検出部は、前記所定時間後に前記障害有無記憶部を参照したときに、いずれかのデータパスについてデータ入出力処理結果が記録されていないと判定した場合に、該当のデータパスに対してデータ入出力処理検査用コマンドを発行し、当該コマンドの処理結果を前記障害有無記憶部に記録する、請求項１に記載のストレージ装置。
【請求項４】
前記ドライブ制御インタフェース部に前記演算装置が発行するコマンドを順次一時的に格納しておくデータキューが設けられており、前記障害検出部は、前記データ入出力処理検査用コマンドを発行する前に、当該コマンドが発行される前記データパスに設けられている前記データキューに格納されているデータをすべて消去する、請求項３に記載のストレージ装置。
【請求項５】
前記ドライブ制御インタフェース部に前記演算装置が発行するコマンドを順次一時的に格納しておくデータキューが設けられており、前記障害検出部は、前記データ入出力処理検査用コマンドとして前記データキューに格納されている通常のデータ入出力処理用コマンドよりも実行優先度が高いコマンドを発行する、請求項３に記載のストレージ装置。
【請求項６】
前記障害検出部は、前記障害有無記憶部において、すべての前記データパスについて、特定の前記ドライブユニット部以降の下流側で前記データ入出力処理異常が記録されていないと判定した場合、前記データ入出力処理異常が記録されている前記データパスのあて先である前記記憶ドライブの異常であると判定して当該記憶ドライブについての異常記録回数を累積的に記録する、請求項１に記載のストレージ装置。
【請求項７】
前記記憶制御部において、複数の前記演算装置のうちで、前記電源障害検出処理を実行する前記演算装置があらかじめ代表演算装置として指定されており、前記代表演算装置が最初に前記データ入出力処理異常を検出した場合には前記代表演算装置が前記電源障害検出処理を実行し、前記代表演算装置以外の前記演算装置が最初に前記データ入出力処理異常を検出した場合には、当該演算装置が前記代表演算装置に前記電源障害検出処理を実行するように依頼する旨の通知を行う、請求項１に記載のストレージ装置。
【請求項８】
前記電源障害検出処理を実行した前記演算装置が前記障害有無記憶部を参照し、前記データ入出力処理が停止されている前記ドライブユニット部があると判定した場合、当該ドライブユニット部に設けられている前記ドライブインタフェース部への前記データパスに前記データ入出力処理検査用コマンドを発行し、発行された当該コマンドがすべて正常に処理されたと判定した場合に前記障害検出部が検出した電源障害が回復したと判定する電源障害回復処理を実行する障害回復部を備えている、請求項１に記載のストレージ装置。
【請求項９】
前記ドライブユニット部に設けられている複数の前記記憶ドライブはデータ格納の冗長度、あるいはデータ入出力における誤り訂正を含む所定の目的を果たすように編成された組み合わせを構成しており、前記障害検出部は、いずれかの前記ドライブユニット部について、前記組み合わせを構成できない態様で前記データパスに前記データ入出力異常を検出した場合に、当該ドライブユニット部に電源障害が発生したと判定する、請求項１に記載のストレージ装置。
【請求項１０】
前記ドライブユニット部に設けられている複数の前記記憶ドライブはデータ格納の冗長度、あるいはデータ入出力における誤り訂正を含む所定の目的を果たすように編成された組み合わせを構成しており、前記障害回復部は、いずれかの前記ドライブユニット部について、前記組み合わせを少なくとも構成できる態様で前記データパスが正常な前記データ入出力処理を実行することができると判定した場合に、当該ドライブユニット部の電源障害が回復したと判定する、請求項８に記載のストレージ装置。
【請求項１１】
外部装置が使用する論理記憶領域を作成するための物理記憶領域を提供する複数の記憶ドライブと、前記記憶ドライブへのデータ入出力を実行するドライブインタフェース部と、前記記憶ドライブ及び前記ドライブインタフェース部に動作電源を供給する電源部とを有するドライブユニット部と、
前記外部装置から前記記憶ドライブへのデータ書き込み処理及び前記記憶ドライブからのデータ読み出し処理を含むデータ入出力処理を、前記ドライブインタフェース部を介して実行する複数の演算装置と、各前記演算装置からの要求により前記ドライブインタフェース部へのコマンドを発行するドライブ制御インタフェース部とを有する記憶制御部とを備えたストレージ装置の電源障害検出方法であって、
複数の前記演算装置のそれぞれが、前記ドライブユニット部の前記ドライブインタフェース部との間でデータ転送を実行するための通信路であるデータパスを通じてデータ入出力処理を実行しようとしたときに当該データ入出力処理が成功したかを前記データパス毎に記録し、
前記複数の演算装置のいずれかが、前記ドライブインタフェース部との間の前記データ入出力処理が正常に実行されなかったと判定した場合に当該データ入出力処理異常を記録した後所定時間以内に他の前記演算装置が各々実施した前記データ入出力処理の結果を記録したか判定し、最初にデータ入出力異常を検出した前記演算装置が前記データパスのすべてについてデータ入出力処理異常が記録していると判定した場合に、データ入出力処理異常が検出されたドライブユニット部及び当該ドライブユニット部の下流側に接続されている他のドライブユニット部に対するデータ入出力処理の停止を指示する、
ストレージ装置の電源障害検出方法。
【請求項１２】
前記所定時間後に前記障害有無記憶部を参照したときに、いずれかの前記データパスについてデータ入出力処理結果が記録されていないと判定した場合に、該当のデータパスに対してデータ入出力処理検査用コマンドを発行し、当該コマンドの処理結果を前記障害有無記憶部に記録する、請求項１１に記載のストレージ装置の電源障害検出方法。
【請求項１３】
前記ドライブ制御インタフェース部に前記演算装置が発行するコマンドを順次一時的に格納しておくデータキューが設けられており、前記障害検出部は、前記データ入出力処理検査用コマンドを発行する前に、当該コマンドが発行される前記データパスに設けられている前記データキューに格納されているデータをすべて消去する、請求項１２に記載のストレージ装置の電源障害検出方法。
【請求項１４】
前記記憶制御部において、複数の前記演算装置のうちで、前記電源障害検出処理を実行する前記演算装置があらかじめ代表演算装置として指定されており、前記代表演算装置が最初に前記データ入出力処理異常を検出した場合には前記代表演算装置が前記電源障害検出処理を実行し、前記代表演算装置以外の前記演算装置が最初に前記データ入出力処理異常を検出した場合には、当該演算装置が前記代表演算装置に前記電源障害検出処理を実行するように依頼する旨の通知を行う、請求項１１に記載のストレージ装置の電源障害検出方法。
【請求項１５】
前記障害検出部の機能を実行した前記演算装置が前記障害有無記憶部を参照し、前記データ入出力処理が停止されている前記ドライブユニット部があると判定した場合、当該ドライブユニット部に設けられている前記ドライブインタフェース部への前記データパスに前記データ入出力処理検査用コマンドを発行し、発行された当該コマンドがすべて正常に処理されたと判定した場合に前記障害検出部が検出した電源障害が回復したと判定する電源障害回復処理を実行する障害回復部を備えている、請求項１１に記載のストレージ装置の電源障害検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置及びストレージ装置の電源障害検出方法に係わり、特により簡略化されたハードウェア構成でストレージ装置の電源系統に発生する障害を確実かつ迅速に検出してこれに対応することができるストレージ装置及びストレージ装置の電源障害検出方法に関する。
【背景技術】
【０００２】
ストレージ装置は、ハードディスクドライブ（Hard Disk Drive、以下「ＨＤＤ」）、半導体記憶ドライブ（Solid State Drive、以下「ＳＳＤ」）等の記憶媒体を備えて、ホストコンピュータ等で稼働するアプリケーション等が処理するデータの記憶領域を提供する装置であり、ディスクサブシステムとも呼ばれる。【０００３】
近年、ストレージ装置に対する省電力化、省スペース化、高密度実装化、及び製造・保守コストの低減といった要求がいっそう強くなりつつある。ストレージ装置の電源障害は、高信頼性での連続稼働を求められるデータセンタ等におけるシステムダウンにつながるおそれがある重大な障害であるから、これを確実かつ迅速に検出して対応するために、例えばＨＤＤの駆動制御基板に専用の電源監視回路を設け、ディスクコントローラ等にある制御プロセッサとの間を専用のインタフェース（配線）で接続する構成が採用されている。【０００４】
しかし、この専用の電源監視回路と専用インタフェースを設ける構成では、比較的安価な汎用ディスクドライブを採用して、前記した例えば高密度実装化、製造コストの低減の要請に十分対応することができなくなっている。【０００５】
この点、特許文献１では、複数系列のファイバーチャネルインタフェースポートを持つＨＤＤと、このＨＤＤとの間のファイバーチャネルインタフェースおよびファイバーチャネル制御インタフェースを含むファイバーチャネル制御部を複数系列持つＨＤＤ駆動部と、ＨＤＤに対してリード／ライトのアクセスを制御するＨＤＤ制御論理を複数系列持つＨＤＤ制御論理部とを有する電源制御装置に適用され、各ファイバーチャネル制御部には、各ＨＤＤ制御論理から各ファイバーチャネル制御インタフェースに供給されるファイバーチャネル制御インタフェース用の制御信号を用いてＨＤＤ駆動部の電源制御を行う電源制御回路を含む構成が提案されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００３−３１６５２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、特許文献１が提案する構成によれば、電源障害に関する情報が通常のデータＩ／Ｏコマンドと同じルートで送受信されるため、電源障害が発生した場合の障害発生部位の特定、障害の影響を受けたコマンドの再試行に時間を要し、システム性能の低下を余儀なくされるおそれがある。また、前記の障害回復処理には、専門知識を持った保守要員が従事する必要があり、保守コストの低減という市場要請の観点からも問題があった。【０００８】
本発明は、以上の課題に鑑みてなされたものであり、その一つの目的は、より簡略化されたハードウェア構成でストレージ装置の電源系統に発生する障害を確実かつ迅速に検出してこれに対応することができるストレージ装置及びストレージ装置の電源障害検出方法を提供することである。
【課題を解決するための手段】
【０００９】
前記の課題及び他の課題を解決するために、本発明の一つの態様は、外部装置が使用する論理記憶領域を作成するための物理記憶領域を提供する複数の記憶ドライブと、前記記憶ドライブへのデータ入出力を実行するドライブインタフェース部と、前記記憶ドライブ及び前記ドライブインタフェース部に動作電源を供給する電源部とを有するドライブユニット部と、前記外部装置から前記記憶ドライブへのデータ書き込み処理及び前記記憶ドライブからのデータ読み出し処理を含むデータ入出力処理を、前記ドライブインタフェース部を介して実行する複数の演算装置と、各前記演算装置からの要求により前記ドライブインタフェース部へのコマンドを発行するドライブ制御インタフェース部とを備えた記憶制御部と、複数の前記演算装置のそれぞれが、前記ドライブユニット部の前記ドライブインタフェース部との間でデータ転送を実行するための通信路であるデータパスを通じてデータ入出力処理を実行しようとしたときに当該データ入出力処理が成功したかを前記データパス毎に記録するための障害有無記憶部と、前記複数の演算装置のいずれかが、前記ドライブインタフェース部との間の前記データ入出力処理が正常に実行されなかったと判定した場合に当該データ入出力処理異常を前記障害有無記憶部に記録した後所定時間以内に他の前記演算装置が各々実施した前記データ入出力処理の結果を前記障害有無記憶部に記録したか判定し、最初にデータ入出力異常を検出した前記演算装置が前記障害有無記憶部に前記データパスのすべてについてデータ入出力処理異常が記録されていると判定した場合に、データ入出力処理異常が検出されたドライブユニット部及び当該ドライブユニット部の下流側に接続されている他のドライブユニット部に対するデータ入出力処理の停止を指示する電源障害検出処理を実行する障害検出部とを備えているストレージ装置である。【００１０】
その他本願が開示する課題やその解決方法については、発明の実施形態の欄及び図面により明らかにされる。
【発明の効果】
【００１１】
本発明によれば、より簡略化されたハードウェア構成でストレージ装置の電源系統に発生する障害を確実かつ迅速に検出してこれに対応することができるストレージ装置及びストレージ装置の電源障害検出方法が提供される。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施形態によるストレージ装置１０の外観図の一例である。
【図２】本発明の一実施形態によるストレージ装置１０に含まれるコントローラ部１００の外観図である。
【図３】本発明の一実施形態によるストレージ装置１０に含まれるドライブユニット部２００の外観図である。
【図４】ストレージ装置１０のハードウェア構成の一例を示す図である。
【図５】コントローラ部１００に設けられるホストインタフェース基板１０１のハードウェア構成図である。
【図６】コントローラ部１００に設けられるスイッチ基板１０２及びメモリ基板１０３のハードウェア構成の一例を示す図である。
【図７】コントローラ部１００に設けられるＭＰ基板１０４のハードウェア構成の一例を示す図である。
【図８】コントローラ部１００に設けられるドライブ制御基板１０５のハードウェア構成の一例を示す図である。
【図９】ドライブユニット部２００に設けられるドライブ基板２０１のハードウェア構成の一例を示す図である。
【図１０】ストレージ装置１０のソフトウェア構成の一例を示す図である。
【図１１】ストレージ装置１０におけるデータ書き込み処理フローの一例を示す図である。
【図１２】ストレージ装置１０におけるデータ読み出し処理フローの一例を示す図である。
【図１３】従来の電源障害検出系統例を示す模式図である。
【図１４】従来の電源障害検出系統例を示す模式図である。
【図１５】本実施形態の電源障害検出系統例を示す模式図である。
【図１６】ドライブ制御基板１０５に設けられているドライブキューの構成例を示す模式図である。
【図１７】ドライブユニット２００のデータ転送障害検出状態を示す模式図である。
【図１８】電源障害チェックテーブル１５００の構成例を示す図である。
【図１９】電源障害チェックテーブル１５００の構成例を示す図である。
【図２０】電源障害チェックテーブル１５００の構成例を示す図である。
【図２１】電源障害チェックテーブル１５００の構成例を示す図である。
【図２２】データ転送障害を最初に検出したＭＰが実行する電源障害検出処理フローの一例を示す図である。
【図２３】データ転送障害を２番目以降に検出したＭＰが実行する電源障害検出処理フローの一例を示す図である。
【図２４】代表ＭＰ管理テーブル１６００の構成例を示す図である。
【図２５】代表ＭＰが実行する電源障害検出処理フローの一例を示す図である。
【図２６】代表ＭＰ以外のＭＰが実行する電源障害検出処理フローの一例を示す図である。
【図２７】電源障害回復処理フローの一例を示す図である。
【図２８】ドライブ構成管理テーブル１７００の構成例を示す図である。
【図２９】電源障害回復処理フローの一例を示す図である。
【発明を実施するための形態】
【００１３】
以下、添付図面を参照して、本発明につきその実施形態に即して説明する。
ストレージ装置の構成の概要
ストレージ装置の構造
まず、本実施形態に係るストレージ装置１０の構造について説明する。図１に、本発明の一実施形態によるストレージ装置１０の外観の一例を示している。
【００１４】
ストレージ装置１０はラックＲを備え、ラックＲには、コントローラ部１００と、複数のドライブユニット部２００とが着脱可能に取り付けられる。なお、図１では、ストレージ装置１０の最下部にコントローラ部１００が設けられ、その上に複数のドライブユニット部２００が重ねて配置される構成を示しているが、コントローラ部１００及びドライブユニット部２００の配置は図１の例に限定されるものではない。
【００１５】
ラックＲは、前面部Ｒ１と、前面部Ｒ１の後側にある後面部Ｒ２とを備える。図１に白抜き太矢印で示されるように、コントローラ部１００、及びドライブユニット部２００の内部を冷却するための冷却空気は、ラックＲの前面部Ｒ１側から導入され、ラックＲの後面部Ｒ２側から排出される。
【００１６】
図２に、ストレージ装置１０に含まれるコントローラ部１００の外観の一例を示している。コントローラ部１００は、ほぼ直方体の形状を有するラックマウント型構造であり、複数の略矩形金属板を組み合わせてなるほぼ角筒状の筐体１１０と、その筐体１１０の内部に収納された回路モジュール１２０と、これらの回路モジュール１２０を冷却するためのファン１３０とを備えて構成されている。図１に示したように、コントローラ部１００は、他のドライブユニット部２００とともに、ラックＲに収容される。
【００１７】
回路モジュール１２０は、後出する記憶ドライブへのデータ入出力制御を実行するためのプロセッサ、メモリ、ネットワークスイッチ、通信インタフェース回路等の回路部品が収容された回路ユニットである。ファン１３０は、所定の設計上の性能を備えた電動冷却ファンであって、例えば図２に示すような形態で配置される。
【００１８】
筐体１１０は、縦方向に前記回路モジュール１２０を１２台積層して収納することができる形状寸法に構成されているが、筐体１１０の構成は特に例示の構成に限定されることはない。
【００１９】
図３に、ストレージ装置１０に含まれるドライブユニット部２００の外観の一例を示している。ドライブユニット部２００は、ストレージ装置１０としての物理記憶領域を提供する、ＨＤＤ等の記憶ドライブと、その入出力制御回路等を収容している。ドライブユニット部２００は、コントローラ部１００と同様に、ほぼ直方体の形状を有するラックマウント型構造であり、複数の略矩形金属板を複数組み合わせてなるほぼ角筒状の筐体２１０Ｆ、２１０Ｒを有する。
【００２０】
筐体２１０Ｆ、２１０Ｒはそれぞれ、その内部に格納されている記憶ドライブ（図示せず）、記憶ドライブ制御用回路を有する回路ユニット（図示せず）、ファン２３１、及びファン２３１を駆動するためのファン駆動用電源ユニット（以下「ファン電源」）２２０を備えている。筐体２１０Ｆと２１０Ｒは、実質的に互いに同一の内部機器配置で構成されており、筐体２１０Ｆと筐体２１０Ｒとは、後面同士で互いに接続されて一つのドライブユニット部２００を構成している。
【００２１】
ファン２３１は、コントローラ部１００のファン１３０に関して説明したように、内部機器冷却用の空気流を生成するための電動ファンであり、ドライブユニット部２００では、内蔵されている記憶ドライブと記憶ドライブ制御用回路を冷却する機能を有する。ファン２３１としては、情報処理装置の冷却用として一般的に利用されるＡＣファン、ＤＣファン等から適宜に選定したものを用いることができる。また、ファン２３１には、ブロワ等の他の名称で呼ばれる送風用機器を包括的に含むものとする。
【００２２】
図３に例示するドライブユニット部２００では、２個のファン２３１を合成樹脂等で形成したユニット部材にマウントしてファンユニット２３０を構成し、そのファンユニット２３０を各筐体２１０Ｆ、２１０Ｒの正面左右両側に２個ずつ配置して取り付けている。したがって、筐体２１０Ｆ、２１０Ｒとも、その正面両側に縦方向に配列された４つずつのファン２３１が取り付けられた構成となる。ファン電源２２０は、筐体２１０Ｆ、２１０Ｒの正面中央部に、左右からファン２３１に挟まれるようにして配置されている。２つのファン電源２２０が縦方向に並べて配置されており、各ファン２３１に対して二重系で動作電源を供給する。ファン電源２２０の形式は、採用するファン２３１の制御に適するものを適宜選定すればよい。
【００２３】
ストレージ装置１０のシステム構成
次に、本実施形態のストレージ装置１０のシステム構成について説明する。図４に、ストレージ装置１０のハードウェア構成の一例を示している。ストレージ装置１０は、一つ以上のホストコンピュータ（以下「ホスト」）２と通信ネットワーク３を介して通信可能に接続されてストレージシステム１を構成している。
【００２４】
通信ネットワーク３は、ＬＡＮ（Local Area Network）、ＳＡＮ（Storage Area Network）、ＷＡＮ（Wide Area Network）、インターネット、公衆通信網、専用線等である。通信ネットワーク３を介して行われる通信は、例えば、ＴＣＰ／ＩＰ、ｉＳＣＳＩ（internet Small Computer System Interface）、ファイバーチャネルプロトコル（Fibre Channel Protocol）等のプロトコルに従って行われる。
【００２５】
ホスト２（外部装置）は、ストレージ装置１０が提供する論理記憶領域（データの記憶領域）を利用する情報処理装置（コンピュータ）である。ホスト２は、パーソナルコンピュータ、メインフレーム（Mainframe）、オフィスコンピュータ等を用いて構成されている。ホスト２は、上記記憶領域へのアクセスに際し、データＩ／Ｏ要求（データ書き込み要求、データ読み出し要求等）を含んだデータフレーム（以下「フレーム」）をストレージ装置１０に送信する。
【００２６】
ストレージ装置１０は、ホスト２から送られてくる前述のＩ／Ｏ要求に応じて記録媒体にアクセスし、ホスト２にデータやレスポンスを送信する。ストレージ装置１０は、コントローラ部１００と、ドライブユニット部２００とを備える。図４の例ではコントローラ部１００、ドライブユニット部２００ともに１つずつ設けられているが、いずれかあるいは両方を２以上設けて接続し処理能力を向上させてもよい。
【００２７】
コントローラ部１００（記憶制御部）は、ホスト２から受信するデータＩ／Ｏ要求を処理し、ドライブユニット部２００との間で、データ書き込み、データ読み取り等の処理を実行する。本実施形態では、コントローラ部１００は、ホストインタフェース基板（以下「ホストＩ／Ｆ基板」）１０１、スイッチ基板１０２、メモリ基板１０３、ＭＰ（MicroProcessor）基板１０４、及びドライブ制御基板１０５を備えている。これらの基板は、ファイバーチャネル、ｉＳＣＳＩ、ＴＣＰ／ＩＰ等の通信プロトコルにより内部ネットワーク１０６を介して互いに通信可能に接続されている。
【００２８】
ホストＩ／Ｆ基板１０１は、ホスト２から送られてくるフレームを受信し、受信したフレームに含まれているデータＩ／Ｏ要求についての処理の応答（例えば読み出したデータ、読み出し完了報告、書き込み完了報告）を含んだフレームをホスト２に送信する。なお、以下の説明において、フレームはファイバーチャネルのフレーム（ＦＣフレーム（FC: Fibre Channel））であるものとする。
【００２９】
スイッチ基板１０２は、例えば高速クロスバースイッチ（Cross Bar Switch）を用いて構成され、ホストＩ／Ｆ基板１０１、メモリ基板１０３、ＭＰ基板１０４、及びドライブ制御基板１０５相互間での制御コマンド及びデータ転送のスイッチングを実行する。
【００３０】
メモリ基板１０３は、例えば高速アクセスが可能なＲＡＭ（Random Access Memory）を用いて構成されている。メモリ基板１０３には、記憶ドライブに書き込まれるデータ（以下「書き込みデータ」）、記憶ドライブから読み出されたデータ（以下「読み出しデータ」）等が格納されるキャッシュメモリと、ストレージ装置１０の制御に用いられる各種の情報（テーブル等）が格納される共有メモリとが設けられる。
【００３１】
ＭＰ基板１０４（演算装置基板）は、ホストＩ／Ｆ基板１０１が受信したフレームに含まれている上記データＩ／Ｏ要求に応じて、ホストＩ／Ｆ基板１０１、ドライブ制御基板１０５、及びメモリ基板１０３のキャッシュメモリ間で行われるデータ転送に関する処理を行う。ＭＰ基板１０４は、キャッシュメモリを介して行われる、ホストＩ／Ｆ基板１０１とドライブ制御基板１０５との間のデータ（後出の記憶ドライブ２０２から読み出したデータ、記憶ドライブ２０２に書き込むデータ）の引き渡し、キャッシュメモリに格納されるデータのステージング（記憶ドライブ２０２からのデータの読み出し）又はデステージング（記憶ドライブ２０２へのデータの書き出し）等を行う。また、本実施形態では、ドライブユニット部２００の電源監視及び電源障害検出処理をＭＰ基板１０４に実装されているマイクロプロセッサ（以下「ＭＰ」）（演算装置）によって実行する。このＭＰによる電源監視及び電源障害検出処理については後述する。
【００３２】
ドライブ制御基板１３は、記憶ドライブ２０２からのデータの読み出し、及び記憶ドライブ２０２へのデータの書き込みに際しドライブユニット部２００のドライブ基板２０１と通信を行う。
【００３３】
ドライブユニット部２００は、ドライブ基板２０１と、複数の記憶ドライブ２０２とを備えて構成されている。記憶ドライブ２０２は、例えばＳＡＳ（Serial Attached SCSI）、ＳＡＴＡ（Serial ATA）、ＦＣ（Fibre Channel）、ＰＡＴＡ（Parallel ATA）、ＳＣＳＩ等のインタフェースを有するＨＤＤ、もしくはＳＳＤである。ドライブ基板２０１は、コントローラ部１００のドライブ制御基板１０５からデータを受信して記憶ドライブ２０２に格納する処理、コントローラ部１００のドライブ制御基板１０５から受信する制御コマンドの処理等を実行する。なお、図４の例にかかわらず、ドライブ基板２０１、記憶ドライブ２０２は設計上の要請等に基づく任意の数設ければよい。
【００３４】
ドライブユニット部２００は、記憶ドライブ２０２をＲＡＩＤ（Redundant Arrays of Inexpensive （or Independent) Disks）等の方式で制御することによって提供される論理的な記憶領域を単位としてホスト２に記憶領域を提供する。この論理的な記憶領域は、例えばＲＡＩＤグループ（パリティグループ（Parity Group））を用いて構成される論理装置（Logical DEVice、以下「ＬＤＥＶ」（単位論理記憶領域））である。またストレージ装置１０は、ホスト２に対してＬＤＥＶを用いて構成される論理的な記憶領域（Logical Unit、又はLogical Volume、以下「ＬＵ」）（論理ボリューム）を提供する。ストレージ装置１０は、ＬＵとＬＤＥＶとの対応（関係）を管理しており、ストレージ装置１０は、この対応に基づきＬＵに対応するＬＤＥＶの特定、もしくは、ＬＤＥＶに対応するＬＵの特定を行う。後述するが、ＭＰ基板１０４に実装されているＭＰには、それぞれデータＩ／Ｏ処理を担当するＬＤＥＶが割り当てられている。
【００３５】
図５にホストＩ／Ｆ基板１０１のハードウェア構成を示している。図５に示すように、ホストＩ／Ｆ基板１０１は、ホスト２と通信するためのポート（通信ポート）を有する外部通信インタフェース（以下「外部通信Ｉ／Ｆ」）１０１１、プロセッサ１０１２（後述するフレーム処理チップ、フレーム転送チップを含む）、メモリ１０１３、及びＭＰ基板１０４と通信するためのポート（通信ポート）を有する内部通信インタフェース（以下「内部通信Ｉ／Ｆ」）１０１４を備えている。
【００３６】
外部通信Ｉ／Ｆ１０１１は、ＮＩＣ（Network Interface Card）、ＨＢＡ（Host Bus Adaptor）等を用いて構成されている。プロセッサ１０１２は、ＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）等を用いて構成されている。メモリ１０１３は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）である。メモリ１０１３にはマイクロプログラムが格納されている。プロセッサ１０１２が、メモリ１０１３から上記マイクロプログラムを読み出して実行することにより、ホストＩ／Ｆ基板１０１が提供する各種の機能が実現される。内部通信Ｉ／Ｆ１０１４は、内部ネットワーク１０６及びスイッチ基板１０２を介してＭＰ基板１０４、ドライブ制御基板１０５、及びメモリ基板１０３と通信する。
【００３７】
図６にスイッチ基板１０２、メモリ基板１０３のハードウェア構成を示している。図６に示すように、スイッチ基板１０２、メモリ基板１０３は、それぞれプロセッサ１０２２、１０３２、メモリ１０２３、１０３３、及び内部通信Ｉ／Ｆ１０２１、１０３１を備えている。
【００３８】
プロセッサ１０２２、１０３２は、ＣＰＵ、ＭＰＵ等を用いて構成されている。メモリ１０２３、１０３３は、ＲＡＭ又はＲＯＭである。スイッチ基板１０２のメモリ１０２３には、プロセッサ１０２２によって読み出されて実行される、各種スイッチ機能を実現するためのマイクロプログラムが格納されている。メモリ基板１０３のメモリ１０３３は、キャッシュメモリ及び共有メモリとして利用される。内部通信Ｉ／Ｆ１０２１、１０３１は、内部ネットワーク１０６及びスイッチ基板１０２を介してＭＰ基板１０４、ドライブ制御基板１０５と通信する。なお、メモリ基板１０３では、特にプロセッサ１０３２を設けなくともよい。
【００３９】
図７にＭＰ基板１０４のハードウェア構成を示している。ＭＰ基板１０４は、内部通信Ｉ／Ｆ１０４１、ＭＰ１０４２、及びメモリ基板１０３のメモリ１０３３に比べてＭＰ１０４２からのアクセス性能が高い（高速アクセスが可能な）メモリ１０４３（ローカルメモリ）を備えている。メモリ１０４３にはマイクロプログラムが格納されている。ＭＰ１０４２が、メモリ１０４３から上記マイクロプログラムを読み出して実行することにより、ＭＰ基板１０４が提供する各種の機能が実現される。
【００４０】
内部通信Ｉ／Ｆ１０４１は、内部ネットワーク１０６及びスイッチ基板１０２を介してホストＩ／Ｆ基板１０１、ドライブ制御基板１０５、メモリ基板１０３と通信を行う。ＭＰ１０４２は、ＣＰＵ、ＭＰＵ、ＤＭＡ（Direct Memory Access）等を用いて構成されている。メモリ１０４３は、ＲＡＭ又はＲＯＭである。ＭＰ１０４２はメモリ１０４３及びメモリ基板１０３のメモリ１０３３で構成される共有メモリのいずれにもアクセスすることができる。図７の例では１枚のＭＰ基板１０４に４個のＭＰ１０４２を実装しているが、ＭＰ１０４２の実装数は設計上の要請等に応じて適宜決定することができる。
【００４１】
図８にドライブ制御基板１０５のハードウェア構成を示している。ドライブ制御基板１０５は、内部通信Ｉ／Ｆ１０５１、プロセッサ１０５２、メモリ１０５３、及びドライブ制御インタフェース（以下「ドライブ制御Ｉ／Ｆ」）１０５４を備えている。メモリ１０５３にはマイクロプログラムが格納されている。プロセッサ１０５２が、メモリ１０５３から上記マイクロプログラムを読み出して実行することにより、ドライブ制御基板１０５が提供する各種の機能が実現される。
【００４２】
内部通信Ｉ／Ｆ１０５１は、内部ネットワーク１０６及びスイッチ基板１０２を介して、ホストＩ／Ｆ基板１０１、ＭＰ基板１０４、及びメモリ基板１０３のメモリ１０３３で構成されているキャッシュメモリ、共有メモリと通信する。プロセッサ１０５２は、ＣＰＵ、ＭＰＵ等を用いて構成されている。メモリ１０５３は、例えばＲＡＭ、ＲＯＭである。ドライブ制御Ｉ／Ｆ１０５４は、ドライブユニット部２００のドライブ基板２０１との間で通信を行う。
【００４３】
図９にドライブ基板２０１のハードウェア構成を示している。ドライブ基板２０１は、内部通信Ｉ／Ｆ２０１１、プロセッサ２０１２、メモリ２０１３、ドライブインタフェース（以下「ドライブＩ／Ｆ」）２０１４、及び環境モニタ回路２０１５を備えている。メモリ２０１３にはマイクロプログラムが格納されている。プロセッサ２０１２が、メモリ２０１３から上記マイクロプログラムを読み出して実行することにより、ドライブ基板２０１が提供する各種の機能が実現される。
【００４４】
内部通信Ｉ／Ｆ２０１１は、筐体間配線を介してコントローラ部１００のドライブ制御基板１０５と通信する。プロセッサ２０１２は、ＣＰＵ、ＭＰＵ等を用いて構成されている。メモリ２０１３は、例えばＲＡＭ、ＲＯＭである。ドライブＩ／Ｆ２０１４は、記憶ドライブ２０２との間で通信を行うブロックであり、例えばＣＰＵとメモリとを一体化してなるいわゆるワンチップマイコン（one-chip microcomputer）で構成することができる。
【００４５】
環境モニタ回路２０１５は、ストレージ装置１０の稼働状況をリアルタイムに監視し、ストレージ装置１０の各所に設けられているセンサから送られてくる計測値を随時取得する。前記センサには、例えば温度センサ、電圧センサ、電流センサ、結露センサ、ファン２３１の回転数を計測する回転数センサが含まれる。環境モニタ回路２０１５は、例えばドライブＩ／Ｆ２０１４と同様に、ワンチップマイコンで構成することができる。
【００４６】
図４に戻ると、保守装置（SerVice Processor、「ＳＶＰ」）３００は、ストレージ装置１０の各構成要素の制御や状態監視を行う。ＳＶＰ３００は、パーソナルコンピュータ、オフィスコンピュータ等である。ＳＶＰ３００は、内部ネットワーク１０６、ＬＡＮ１０７等の通信手段を介してホストＩ／Ｆ基板１０１、ＭＰ基板１０４、ドライブ制御基板１０５、メモリ基板１０３、及びスイッチ基板１０２等のストレージ装置１０の構成要素と随時通信を行い、各構成要素から稼働情報等を取得して管理装置４に提供する。またＳＶＰ３００は管理装置４から送られてくる制御情報や稼働情報に基づき、各構成要素の設定や制御、保守（ソフトウェアの導入や更新を含む）を行う。
【００４７】
管理装置４は、ＳＶＰ３００とＬＡＮ等を介して通信可能に接続されるコンピュータである。管理装置４はストレージ装置１０の制御や監視のためのＧＵＩ（Graphical User Interface）やＣＬＩ（Command Line Interface）等を用いたユーザインタフェースを備える。
【００４８】
次に、ストレージ装置１０のソフトウェア構成について説明する。図１０に、ストレージ装置１０のソフトウェア構成の一例を示している。図１０に示すように、ストレージ装置１０は、Ｉ／Ｏ処理部１１００、記憶領域管理部１２００、及び電源監視部１３００を備えている。
【００４９】
Ｉ／Ｏ処理部１１００は、ドライブユニット部２００への書き込みに関する処理を行うデータ書き込み処理部１１０１、ドライブユニット部２００からのデータの読み出しに関する処理を行うデータ読み出し処理部１１０２を備える。
【００５０】
記憶領域管理部１２００は、コントローラ部１００のＭＰ基板１０４に備えられている各ＭＰ１０４２が担当するＬＤＥＶに関するデータ入出力処理を実行するために設けられ、各ＭＰ１０４２はこの記憶領域管理部１２００の指示により担当ＬＤＥＶに関するデータ入出力処理を実行する。
【００５１】
電源監視部１３００は、ドライブユニット部２００のドライブユニット電源の状態を、前記した記憶ドライブ２０２へのデータＩ／Ｏコマンドの処理状況に基づいて監視する機能を有するブロックであり、本実施形態の特徴的な機能を備えている。電源監視部１３００は、障害検出部１３０１と障害回復部１３０２とを備えている。障害検出部１３０１は、ＭＰが発行したデータＩ／Ｏコマンドのドライブユニット部２００のドライブ基板２０１にあるドライブＩ／Ｆ２０１４における処理状況を監視して、後述する電源障害発生時の各種処理を実行する機能ブロックである。障害回復部１３０２は、電源障害が検出されたドライブユニット部２００が復旧したかを判定し、復旧した場合の障害回復処理を実行する機能ブロックである。
【００５２】
なお、Ｉ／Ｏ処理部１１００、記憶領域管理部１２００、及び電源監視部１３００の機能は、ストレージ装置１０のＭＰ基板１０４に実装されているＭＰ１０４２が、メモリ１０４３に格納されているマイクロプログラムを読み出して実行することにより実現される。電源障害チェックテーブル１５００、代表ＭＰ管理テーブル１６００、及びドライブ構成管理テーブル１７００については後述する。
【００５３】
ストレージ装置１０のデータＩ／Ｏ処理
次に、以上説明した構成を有するストレージ装置１０によって実行される記憶ドライブ２０２に対するデータＩ／Ｏ処理について説明する。このデータＩ／Ｏ処理は、ストレージ装置１０により実行される一般的な処理である。
【００５４】
図１１は、ストレージ装置１０がホスト２からデータ書き込み要求を含んだフレームを受信した場合に、Ｉ／Ｏ処理部１１００の書き込み処理部１１０１が行う処理（以下「データ書き込み処理１９００」）を説明するフローチャートである。以下、図１１とともにデータ書き込み処理１９００について説明する。なお、以下の説明において、符号の前に付している「Ｓ」の文字はステップを意味する。
【００５５】
ホスト２から送信されてくるフレームは、ストレージ装置１０のホストＩ／Ｆ基板１０１によって受信される（Ｓ１９０１，Ｓ１９０２）。ホストＩ／Ｆ基板１０１はフレームを受信するとその旨をＭＰ基板１０４に通知する（Ｓ１９０３）。
【００５６】
ＭＰ基板１０４は、ホストＩ／Ｆ基板１０１から上記通知を受信すると（Ｓ１９０４）、当該フレームのデータ書き込み要求に基づくドライブ書き込み要求を生成し、生成したドライブ書き込み要求をメモリ基板１０３のメモリ１０３３（キャッシュメモリ）に格納する。そしてＭＰ基板１０４は、生成したドライブ書き込み要求をドライブ基板２０１に送信する（Ｓ１９０８）。ホストＩ／Ｆ基板１０１は、ホスト２に完了報告を送信し（Ｓ１９０６）、ホスト２は完了報告を受信する（Ｓ１９０７）。
【００５７】
ドライブ基板２０１は、ドライブ書き込み要求を受信すると書き込み処理待ちキューに登録する（Ｓ１９０９）。ドライブ基板２０１は、書き込み処理待ちキューからドライブ書き込み要求を随時読み出す（Ｓ１９１０）。ドライブ基板２０１は、読み出したドライブ書き込み要求に指定されている書き込みデータをメモリ１０３３から読み出し、読み出した書き込みデータを記憶ドライブ２０２に書き込む（Ｓ１９１１）。
【００５８】
次にドライブ基板２０１は、ドライブ書き込み要求について書き込みデータの書き込みが完了した旨の報告（完了報告）をＭＰ基板１０４に通知し（Ｓ１９１２）、ＭＰ基板１０４は送られてきた完了報告を受信する（Ｓ１９１３）。
【００５９】
図１２はストレージ装置１０がホスト２からデータ読み出し要求を含んだフレームを受信した場合にストレージ装置１０のＩ／Ｏ処理部１１００のデータ読み出し処理部１１０２によって行われるＩ／Ｏ処理（以下「データ読み出し処理２０００」）を説明するフローチャートである。以下、図１２とともにデータ読み出し処理２０００について説明する。
【００６０】
ホスト２から送信されてくるフレームは、ストレージ装置１０のホストＩ／Ｆ基板１０１によって受信される（Ｓ２００１，Ｓ２００２）。ホストＩ／Ｆ基板１０１は、ホスト２からフレームを受信すると、その旨をドライブ基板２０１に通知する（Ｓ２００３）。
【００６１】
ドライブ基板２０１は、ホストＩ／Ｆ基板１０１から上記通知を受信すると、当該フレームに含まれているデータ読み出し要求に指定されているデータ（例えばＬＢＡ（Logical Block Address）によって指定される）を、記憶ドライブ２０２から読み出す（Ｓ２００４）。なお、メモリ基板１０３のメモリ１０３３（キャッシュメモリ）に読み出しデータが存在する場合（キャッシュヒットした場合）には、記憶ドライブ２０２からの読み出し処理（Ｓ２００４）は省略される。ＭＰ基板１０４は、ドライブ基板２０１によって読み出されたデータをキャッシュメモリに書き込む（Ｓ２００５）。ＭＰ基板１０４は、キャッシュメモリに書き込んだデータをホストＩ／Ｆ基板１０１に随時転送する（Ｓ２００６）。
【００６２】
ホストＩ／Ｆ基板１０１は、ＭＰ基板１０４から送られてくる読み出しデータをホスト２に順次送信する（Ｓ２００７，Ｓ２００８）。読み出しデータの送信が完了すると、ホストＩ／Ｆ基板１０１はホスト２に完了報告を送信し（Ｓ２００９）、ホスト２は送られてきた完了報告を受信する（Ｓ２０１０）。
【００６３】
電源障害検出系統
次に、以上の構成を有するストレージ装置１０に実装される電源障害検出系統について、典型的な従来例と対比して説明する。図１３に、従来の電源障害検出系統の一例を示している。
【００６４】
図１３の例では、ストレージ装置１０としての基本的な構成は図４に例示した本実施形態のものと同様であるが、記憶ドライブ２０２との間でのデータＩ／Ｏを担当する２系統のＭＰ１０４がドライブ制御基板１０５に１つずつ設けられている。これらのＭＰ１０４は電源系統の冗長性を確保するためにこのように別系統とされており、ここではそれぞれの系統をクラスタ１、クラスタ２（適宜「Ｃ１」、「Ｃ２」と略称する。）と呼ぶこととする。また、クラスタ１、クラスタ２に属する構成要素を、例えばＭＰ１、ＭＰ２、ドライブユニット１、ドライブユニット２等と呼んで区別することとする。各ＭＰ１０４は、自身と同一のクラスタに属するドライブ制御基板１０５にアクセスすることができるが、他のクラスタに属するドライブ制御基板１０５にアクセスすることはできない。この点で、図１３の従来の構成は、本実施形態と異なる。
【００６５】
図１３の構成はまた、１台のコントローラ部１００に２台のドライブユニット部２００を接続してなるストレージ装置１０を示している。実際には、１つの装置筐体に２台以上のコントローラ部１００、及び１台ないし３台以上のドライブユニット部２００が設けられる構成も可能である。
【００６６】
ＭＰ１０４による記憶ドライブ２０２へのデータＩ／Ｏコマンド処理、及びドライブユニット部２００の電源監視及び電源障害検出処理は、クラスタ毎に実行される。ＭＰ１とＭＰ２は、コントローラ部１００の共有メモリ（例えばメモリ１０３３）にいずれもアクセスすることができ、ＭＰ１、ＭＰ２が共通して利用すべきデータの書き込み、読み出しを行うことができる。
【００６７】
各ドライブユニット部２００には、２系統のクラスタ別ドライブユニット電源（以下「ユニット電源」）２０３が設けられており、それぞれ別系統のＡＣ電源にブレーカ等の開閉器を介して接続されている。ユニット電源２０３は、例えば複数のＤＣ電圧出力を有するＡＣ／ＤＣスイッチング電源装置を備えている。各ドライブユニット部２００のドライブ基板２０１には、前記した環境モニタ回路２０１５及び電源監視回路２０１６がそれぞれ設けられている。ユニット電源２０３は、ドライブ基板２０１に動作電源を供給しているとともに、電源監視回路２０１６には電源情報信号を入力している。電源情報信号は、例えば出力電圧の消失、異常な低下、あるいはユニット電源２０３内の各種異常に起因する電源異常を報知する信号である。
【００６８】
この電源情報信号を受信した電源監視回路２０１６は、環境モニタ制御回路１０５５を介してＭＰ１０４に電源情報信号を送信する。前記のように、環境モニタ制御回路１０５５と環境モニタ回路２０１５及び電源監視回路２０１６との間には専用の通信線が設けられて、適宜の通信プロトコルにより電源情報信号ほか前記各種計測値データが授受される構成となっている。電源監視回路２０１６は、各ドライブユニット部２００にクラスタ毎に設けられているため、コントローラ部１００に接続されるドライブユニット部２００が増加すれば、ドライブユニット部２００とコントローラ部１００との間に布設される電源監視回路２０１６からの信号線の数も増加する。
【００６９】
すなわち、上記の従来例では、ＭＰ基板１０４に環境モニタ制御回路１０５５からの電源情報信号を受信するインタフェース回路が、また各ドライブユニット部２００のドライブ基板２０１に電源監視回路２０１６を設ける必要があり、ＭＰ基板１０４とドライブユニット部２００との間に専用の電源情報信号線を必要とする。このため、ストレージ装置１０の小型化、低消費電力化、低価格化の市場要求に十分対応することが困難である。また、電源監視回路２０１６及び周辺回路を構成するための部品点数が増加するため故障率が増加し、ストレージ装置１０としての信頼性が低下する傾向となる。さらに、ドライブユニット部２００に電源監視回路２０１６が設けられるため、コントローラ部１００との間に専用の信号線等が必要となり、ドライブユニット部２００として低価格な汎用ディスクドライブ装置を採用することができない、といった問題点があった。
【００７０】
次に、他の従来例について説明する。図１４に、他の従来例に係る電源障害検出系統の一例を示している。前術した典型的な従来例に対して、図１４に示す電源障害検出系統の構成例は、図１３の構成例と異なり、記憶ドライブ２０２との間のデータＩ／Ｏを担当するＭＰ１０４２は、ＭＰ基板１０４に独立して実装されており、図１４の例ではストレージ装置１０の電源系統毎に設けられているＭＰ基板１０４にそれぞれ４つのＭＰ１０４２が設けられている。これらのＭＰ１０４２は、それぞれ図４に示したスイッチ基板１０２を介して他のいずれのＭＰ１０４２とも通信を行うことができる。
【００７１】
図１４の構成例を参照すると、ドライブ制御基板１０５には、図１３の環境モニタ制御回路１０５５に相当する回路はなく、ユニット電源２０３に関する電源情報信号は、ドライブユニット部２００のドライブ基板２０１にあるドライブＩ／Ｆ２０１４に入力され、ドライブ制御Ｉ／Ｆ１０５４とドライブＩ／Ｆ２０１４との間で行われる、記憶ドライブ２０２のデータＩ／Ｏの通信インタフェース（ファイバーチャネル、ＳＡＳ、ＳＡＴＡ等）を利用して受信される。
【００７２】
コントローラ部１００のドライブ制御基板１０５にあるドライブ制御Ｉ／Ｆ１０５４には、ＭＰ１０４２からのデータＩ／Ｏコマンドを順次格納するデータキュー１０５４１が設けられる。このデータキュー１０５４１は、ハードウェアとしては例えばメモリ基板１０３のメモリ１０３３に設定されている共有メモリに格納され、コントローラ部１００にあるすべてのＭＰ１０４２がアクセスすることができる。データキュー１０５４１にはまた、電源監視及び電源障害検出処理を実行する代表ＭＰ１０４２により、電源障害からの回復処理等に関するコマンドも格納される。
【００７３】
以上の構成によれば、ＭＰ基板１０４、ドライブユニット部２００に、電源監視回路２０１６及び関連回路を設ける必要はなくなるため、これに伴う問題点は解消されていると言える。しかし、データキュー１０５４１を電源障害検出処理のためにも使用していることから、データキュー１０５４１に単純に電源障害検出用コマンドを設定した場合、データキュー１０５４１に記憶ドライブ２０２等へＭＰ１０４２が発行した通常のデータＩ／Ｏコマンドがすでに設定されていたとすると、先行する通常コマンド処理が実行された後に、ドライブＩ／Ｆ２０１４あての電源障害検出用コマンドが処理されるため、電源障害検出に要する判定時間が増大し、電源障害が検出された場合の障害コマンド再送が遅延することとなる。このため、電源障害発生時にストレージ装置１０のデータＩ／Ｏ処理能力低下が起こるおそれがある。また、データキュー１０５４１に格納されているコマンドの処理が、ドライブユニット部２００の記憶ドライブ２０２等の応答遅れによって遅延した場合、応答遅れ時間がコマンドの処理待ち時間を超えることにより、ドライブユニット部２００に電源障害が発生していないにもかかわらず電源障害を誤検出し、ドライブユニット部２００の誤閉塞等が発生してシステムダウンにつながりかねないという点が問題となる。
【００７４】
本実施形態による電源障害検出系統の説明
次に、以上説明したストレージ装置１０において電源障害検出を実施するための系統例について説明する。図１５に、本実施形態の電源障害検出系統の一例を示している。本実施形態の電源障害検出系統は、ＭＰ１０４２が発行したコマンドを一時的に格納するためのデータキュー１０５４１を有し、第２の従来例として説明した構成例と類似した構成を備えている。以下では従来例と異なる個所について主として説明する。
【００７５】
コントローラ部１００は、電源系統の冗長性を持たせるために、２つのクラスタ、クラスタ１、クラスタ２に分けて構成されており、各クラスタにはそれぞれ複数のＭＰ１０４２を有するＭＰ基板１０４が設けられている。また、コントローラ部１００には、クラスタ毎にドライブ制御基板１０５が設けられ、各ドライブ制御基板１０５が備えているドライブ制御インタフェース回路１０５４には、それぞれ２つのデータキュー１０５４１が設けられている。図１５において図示を省略しているスイッチ基板１０２の機能により、各ＭＰ１０４２は、いずれのクラスタのいずれのドライブ制御Ｉ／Ｆ１０５４にもアクセスすることができる。したがって、各ＭＰ１０４２がドライブユニット部２００の記憶ドライブ２０２等に向けて発行するデータＩ／Ｏコマンド等は、いずれのデータキュー１０５４１にも格納することができる。また、後述するように、各データキュー１０５４１には、ドライブユニット部２００での電源障害発生の有無を調べるための専用問い合わせコマンドを格納することもできる。
【００７６】
図１５の構成例では、コントローラ部１００に対して複数のドライブユニット部２００が直列に接続されている。各ドライブユニット部２００は、２台のユニット電源２０３により、二重系で電源が供給されている。したがって、いずれかのドライブユニット部２００に電源障害が発生した場合には、電源障害が発生した当該ドライブユニット部２００と、それに直列接続されている以降のドライブユニット部２００、すなわち下流側のドライブユニット部２００に対してＭＰ１０４２からアクセスすることはできなくなる。
【００７７】
図１５に例示する各ドライブユニット部２００には、４つのドライブＩ／Ｆ基板２０１が設けられている。各ドライブＩ／Ｆ基板２０１には、２つのドライブＩ／ＦＬＳＩ２０１６が備えられ、コントローラ部１００のデータキュー１０５４１から転送されてくるコマンドを転送先の記憶ドライブ２０２へ送出する機能、記憶ドライブ２０２から読み出されたデータ等をコントローラ部１００のドライブ制御Ｉ／Ｆ１０５４に送出する機能を備えている。ドライブユニット部２００のドライブ基板２０１には、複数の記憶ドライブ２０２が備えられている。また、図１５の構成例では、ドライブユニット部２００としてドライブユニット１〜ドライブユニットｎまでのｎ台が設けられているが、ストレージ装置１０が要求される記憶容量に応じて２台以上の適宜の数のドライブユニット部２００を設ければよい。
【００７８】
各ドライブユニット部２００に設けられている記憶ドライブ２０２は、データＩ／Ｏ処理の際の誤り訂正処理のため、複数の記憶ドライブ２０２によってＥＣＣグループを構成している。ＥＣＣグループとしては、周知のように、データを格納する記憶ドライブ２０２である「Ｄ」とデータパリティを格納する記憶ドライブ２０２である「Ｐ」との組み合わせとして、例えば「３Ｄ＋Ｐ」、「７Ｄ＋Ｐ」などが考えられる。
【００７９】
コントローラ部１００のドライブ制御Ｉ／Ｆ１０５４にある各データキュー１０５４１とドライブユニット部２００の各ドライブＩ／Ｆ基板２０１４、すなわち各ドライブＩ／ＦＬＳＩ２０１６との間でデータ転送が実行される経路であるデータパスを、以下「パス」と呼ぶこととする。図１５の構成例において、コントローラ部１００のドライブ制御基板１０５とドライブユニット部２００のドライブＩ／Ｆ基板２０１４との間には、パスＡ〜パスＨの８つのパスが設定されている。
【００８０】
本実施形態における電源障害検出方式
次に、本実施形態の電源障害検出系統例における電源障害検出方式の概要について説明する。図１６に、ＭＰ１０４２が発行したデータＩ／Ｏコマンド等を格納しているデータキュー１０５４１を模式的に示している。図１６では、簡単のため、各データキュー１０５４１について先頭の２ブロックに格納されているデータの転送先ドライブ名を示している。例えば図１６のデータキュー１は、ドライブユニット２のドライブＩ／Ｆ基板２−１とのデータ転送経路であるパスＡに送出されるデータを格納しており、先頭から順に「ドライブユニット２のドライブＩ／Ｆ基板２−１に接続されている記憶ドライブＡ２１」、「ドライブユニットｎのドライブＩ／Ｆ基板ｎ−１に接続されている記憶ドライブＡｎ１」あてのデータであることを示している。以下、データキュー２については「ドライブユニット２の記憶ドライブＢ２２」等と、ドライブユニット２以降に設けられている記憶ドライブ２０２あてのコマンドが格納されていることを示している。本実施形態では、データキュー１０５４１に格納される各コマンドを発行したＭＰ１０４２がそれぞれコマンド発行からの経過時間を計測しており、所定のデータ転送障害が発生したことを、コマンド発行からのタイムアウト、例えばＳＡＳインタフェースにおいては「IT-Nexus-Loss」タイムアウトによって検出する。検出条件としては、例えば「コマンド発行後経過時間＞データ転送障害検出時間＋ユニット電源２０３の停電時の出力低下時間」を設定することができる。
【００８１】
図１７に、上記の電源障害検出方式の概略を模式的に示している。図１７では、図１６に示したデータキュー１０５４１のうちの一つを取り出してデータ（コマンド）の流れを示している。ドライブユニット部２００の電源が正常に機能している場合、いずれかのＭＰ１０４２が発行したコマンドはドライブ制御Ｉ／Ｆ１０５４のデータキュー１０５４１にいったん格納され、次いでコマンドのあて先である記憶ドライブ２０２を制御しているドライブＩ／ＦＬＳＩ２０１４に転送されてコマンドの内容に従ったデータＩ／Ｏ処理等が実行される。しかし、ドライブユニット部２００の電源障害が発生している場合には、前記のタイムアウト時間を経過してもコマンドに対する応答が返ってこないため、該当コマンドを発行したＭＰ１０４２はあて先のドライブユニット部２００において電源障害が発生しているおそれがあると判定する。ドライブユニット部２００で電源障害が発生している場合には、図１６に示したすべてのパスについて正常なコマンド応答が得られないこととなるので、本実施形態では、各ＭＰ１０４２が発行したコマンドの実行結果を集計することによって、ドライブユニット部２００に電源障害が発生しているか、発生しているとすればどのドライブユニット部２００であるかを判定するようにしている。
【００８２】
次に、上記各ＭＰ１４０２によるコマンド処理結果を集計するために使用されるテーブルである電源障害チェックテーブル１５００（障害有無記憶部）について説明する。図１８に、電源障害チェックテーブル１５００の構成の一例を示している。前記のように、電源障害チェックテーブル１５００は、各ＭＰ１０４２がそれぞれ発行したコマンドについて処理結果に異常があったと判定した場合にパス毎に記録するためのテーブルであって、電源障害チェックテーブル１５００での集計結果においてすべてのパスにコマンド処理の異常があると記録された場合には、いずれかのドライブユニット部２００において電源障害が発生していると判定されることとなる。
【００８３】
図１８に例示する電源障害チェックテーブル１５００には、パスＩＤ１５０１、状態種別１５０２、パス単位異常有無記録１５０３、電源境界１５１０、及び閉塞情報１５２０の各項目が、ＭＰ１０４２によって記録される。電源障害チェックテーブル１５００は、例えばメモリ基板１０３内の共用メモリに設定され保持される。
【００８４】
パスＩＤ１５０１は、ＭＰ１０４２がデータＩ／Ｏ等のコマンド処理を実行したパスを識別するための識別符号であるパスＩＤを記録しており、図１８の例では図１６に示したパスＡ〜パスＨが示されている。
【００８５】
状態種別１５０２は、電源障害チェックテーブル１５００に記録されるコマンド処理異常の種別を記録するための項目であり、図１８の例ではデータＩ／Ｏコマンド処理の異常（前記のコマンドタイムアウト等）に関する記録であることを示す「ＩＯ状態」の語句が記録されている。パス単位異常記録有無１５０３の項目は、パスＩＤ１５０１で特定されるパス毎にコマンド処理異常があったか否かを記録する欄であり、コマンド処理異常があったパスには、当該パスによりデータ転送を実行しようとしていたＭＰ１４０２によって「＊」記号が記録される。なお、パス単位異常記録有無１５０３の項目は、ドライブユニット部２００を識別する識別符号（例えばドライブユニット１等）と、各ドライブユニット部２００に設けられている記憶ドライブ２０２を識別するための識別符号を含む。記憶ドライブ識別符号については図１８では、例えば「ＺＺ１１」、…、「ＺＺｎｎ」と表記しているが、これは電源障害チェックテーブル１５００全体構成を簡易に記述するためであって、実際には各ドライブユニット部２００の所属に応じて符号ＺＺには「Ａ〜Ｄ」のいずれかが表記される。
【００８６】
電源境界１５１０の項目は、各ドライブユニット部２００に設けられているユニット電源２０３の識別情報を記録している。閉塞情報１５２０の項目には、電源障害が発生していると判定されたドライブユニット部２００とそれに直列に接続されているドライブユニット部２００について、各ＭＰ１４０２がコマンドを発行することができないようにするために、「仮閉塞」の語句が記録される。なお、「仮閉塞」の語句を用いているのは、実際に電源障害が発生していると考えられるドライブユニット部２００だけでなく、当該ドライブユニット部２００の下流側に接続されている、電源障害の有無にかかわらず事実上コマンド処理を実行することができないドライブユニット部２００もコマンド発行の対象から除外するようにしているためであるが、他の語句を用いて記録することも全く差し支えない。
【００８７】
図１９には、本実施形態で利用することができる電源障害チェックテーブル１５００の他の構成例を示している。図１９の構成例では、図１８の構成例において「ＩＯ状態」のみが記録されていた状態種別１５０２の項目に、「ＬＳＩ状態」の記録が追加されている。本実施形態の電源障害検出系統では、各ドライブユニット部２００での電源障害有無を、各ＭＰ１４０２から各パスに対して発行される通常のコマンド（データＩ／Ｏコマンド等）の処理結果を監視することにより実行している。したがって、あるパスにおいてコマンド処理異常が検出された後、他のパスに対して長時間コマンドが発行されないことが想定され、この場合、電源障害発生と判定されるまでにも長時間を要し、データＩ／Ｏ処理に支障を来すことが考えられる。このような不都合を防ぐため、図１９の電源障害チェックテーブル１５００を備える構成例では、あるＭＰ１０４２が特定パスについて電源障害が疑われるコマンド処理異常を検出した後、所定時間経過しても電源障害チェックテーブル１５００のＩＯ状態に関するチェック結果がすべて記録されない場合、そのチェック結果が記録されていないパスに対して電源障害チェック専用のコマンド（例えば所定プロトコルのインクワイアリー（問い合わせ）コマンド）を発行させてドライブユニット部２００での担当ドライブＩ／ＦＬＳＩ２０１６からの応答が正常であるか否かをパス単位異常記録有無１５０３の「ＬＳＩ状態」の項目に記録する。図１９の例では、パスＤ、Ｆ、Ｈについてこの「ＬＳＩ状態」が異常を示していることが「＊」によって記録されている。
【００８８】
図２０及び図２１に示す電源障害チェックテーブル１５００は、それぞれ図１８、図１９と同じ構成を備えているが、図２０においてはドライブユニット２について、パスＢの記憶ドライブＡ２２（２０２）に関するＩＯ状態として正常を示す「ＯＫ」が記録されている。これは、パスＢを用いて記憶ドライブＡ２２に対するデータＩ／Ｏ処理を実行したＭＰ１０４２が、その処理が成功したことを記録したことを意味している。この場合には、少なくともパスＡを用いた記憶ドライブＡ２１へのアクセス失敗は、ドライブユニット２の電源障害により発生したのではないと判定されるため、記憶ドライブＡ２１へのデータＩ／Ｏ処理は再実行されるように構成される。この場合、図２０の閉塞情報１５２０の項目に記録されているように、ドライブユニット２以降のドライブユニット部２００に対するデータＩ／Ｏ処理は通常通りに行われる。図２１の例でも同様に、パスＦを用いたドライブユニット２への電源障害チェック専用コマンドは正常に実行されたと判定されたため、パスＦのドライブユニット２についてのＬＳＩ状態は「ＯＫ」と記録されており、少なくともドライブユニット２での電源障害はなくドライブユニット２以降のドライブユニット部２００に対するデータＩ／Ｏ処理は通常通りに行われる。
【００８９】
なお、本実施形態では、電源障害発生有無の判定処理を開始する起因となったパスＡを含む全パスにおいて、一定時間内にデータ転送処理についての障害が発生した場合に起因となったパスＡのあて先ドライブユニット部２００（ドライブユニット２）以降の電源障害と判定している。この他に、図４に例示する８つのパスのうち、例えばパスＡに対するパスＥのような交替パスを除く別のパスでデータ転送障害が検出されたことを条件として当該ドライブユニット部２００での電源障害発生と判定するように構成することができる。あるいは、所定のドライブ基板２０１にわたってＥＣＣ（Error Check and Correction）グループを構成することができない記憶ドライブ２０２をあて先とするパス、例えば図４におけるパスＡ、Ｂ、Ｅ、及びＦにおいてデータ転送障害が検出されたことを条件として当該ドライブユニット部２００での電源障害発生と判定するように構成してもよい。
【００９０】
本実施形態による電源障害検出処理の説明
次に、以上説明した本実施形態による電源障害検出系統例で実行される電源障害検出処理について、関連するフローチャート等を参照して説明する。
【００９１】
＝＝実施例１＝＝
まず、本実施形態のうち、第１の実施例により実現される電源障害検出処理について説明する。図２２に、実施例１による電源障害検出処理フローの一例を示している。実施例１では、各ドライブユニット部２００とのデータＩ／Ｏ処理等を実行する各ＭＰ１０４２が、自身が発行したデータＩ／Ｏコマンドの処理について異常を検出したことを契機として実行する処理フローである。図２２の例では、あるＭＰ１０４２がパスＡを通じてドライブユニット２の記憶ドライブＡ２１にあてて発行したデータＩ／Ｏコマンドの処理に異常が通知されたことを契機として電源障害検出処理フローが起動されている。なお、本実施形態の電源障害検出処理は、具体的には各ＭＰ１０４２が図１０に示す電源監視部１３００の障害検出部１３０１の機能を果たすソフトウェアを実行することにより行われる。以下障害検出部１３０１を動作主体として記述した場合には、ＭＰ１０４２が該当ソフトウェアを実行することを意味するものとする。また処理フロー内の各ステップに付した符号「Ｓ」はステップの略号である。
【００９２】
まず、障害検出部１３０１は、例えばメモリ基板１０３の共有メモリの適宜記憶領域に設定されている電源開始判定フラグを参照して電源障害検出処理フローがすでに開始されている、電源判定中であるかを判定し（Ｓ２２０１）、すでに処理中であると判定した場合には（Ｓ２２０１、Ｙｅｓ）、電源障害が疑われるデータＩ／Ｏコマンドの処理異常を検出したＭＰ１０４２が実行すべき処理である、図２３の処理フローへ移行する。
【００９３】
一方、Ｓ２２０１で電源障害判定中でないと判定した場合（Ｓ２２０１、Ｎｏ）、障害検出部１３０１は電源判定開始フラグをセットして自身が以後の電源障害検出処理を実行することを他のＭＰ１０４２が認識することができるようにする（Ｓ２２０２）。次いで障害検出部１３０１は、電源障害チェックテーブル１５００にアクセスして自身がデータＩ／Ｏコマンドの処理に異常を検出したパスと記憶ドライブ２０２（本実施例の場合はパスＡのＡ２１）にデータＩ／Ｏコマンドの処理異常があった旨の「＊」記号を記録する（Ｓ２２０３）。
【００９４】
次に、障害検出部１３０１は、他のＭＰ１０４２が電源判定開始フラグのセットを確認後、電源障害チェックテーブル１５００にデータＩ／Ｏコマンドの処理結果を記録し終わるまでの見込み時間である時間Ｔ１の間待機してから電源障害チェックテーブル１５００を参照する（Ｓ２２０４、Ｓ２２０５）。
【００９５】
次に、障害検出部１３０１は、電源障害チェックテーブル１５００において、すべてのパス、本実施例ではパスＡ〜パスＨについてデータＩ／Ｏコマンドの処理異常が記録されているかを判定する（Ｓ２２１０）。本実施例では、パスＢ〜ＨのいずれかのＩＯ状態の項目に「＊」記号が記録されているかをチェックすることにより判定される。パスＡ〜パスＨについてデータＩ／Ｏコマンドの処理異常が記録されていると判定した場合（Ｓ２２１０、Ｙｅｓ）、処理は後述のＳ２２２０に移行される。
【００９６】
データＩ／Ｏコマンドの処理異常が記録されていないパスがあると判定した場合（Ｓ２２１０、Ｎｏ）、障害検出部１３０１は、データＩ／Ｏコマンドの処理結果が記録されていないパスについて、ドライブ制御Ｉ／Ｆ１０５４のデータキュー１０５４１に格納されている全データをクリアすることにより各データキュー１０５４１をフラッシュする処理を実行する（Ｓ２２１１）。この際、図１５に図示されていないドライブＩ／Ｆ基板２０１４に設定されているドライブユニット部２００側のデータキューについても同様にフラッシュ処理を行う。このデータキューのフラッシュ処理は、次ステップ以降で電源障害チェック専用コマンドを発行した場合に、各ＭＰ１０４２において当該専用コマンドが遅滞なく実行されてパスのデータＩ／Ｏコマンドの処理異常有無を迅速に判定することができるようにするためである。なお、データキュー１０５４１等をフラッシュする代わりに、通常のデータＩ／Ｏコマンドよりも処理優先度の高いチェック専用コマンドを発行することにより異常有無判定の迅速化を確保するようにしてもよい。また、ストレージ装置１０として電源障害検出処理にある程度の遅延が許容される場合には、単にデータキュー１０５４１等のフラッシュを省略する構成としてもよい。
【００９７】
本実施例では、障害検出部１３０１は、データＩ／Ｏコマンドの処理結果が記録されていないパスについて前記の電源障害チェック専用コマンドを発行し（Ｓ２２１２）、コマンド処理結果が返ってくるまでの時間Ｔ２の間待機し（Ｓ２２１３）、その後専用コマンドの処理結果を電源障害チェックテーブル１５００に記録する（Ｓ２２１４）。
【００９８】
次に、障害検出部１３０１は、電源障害チェックテーブル１５００において、全パスの特定ドライブユニット部２００以降においてデータＩ／Ｏコマンドの処理異常が記録されているか判定し、特定ドライブユニット部２００以降で異常が記録されていると判定した場合（Ｓ２２２０、Ｙｅｓ）、その先頭のドライブユニット部２００（図１８の例ではドライブユニット２）において電源障害が発生していると判定し（Ｓ２２２１）、当該ドライブユニット部２００以降に接続されている各ドライブユニット部２００について電源障害チェックテーブル１５００の閉塞情報１５２０の項目に「仮閉塞」を記録することにより各ＭＰ１０４２がデータＩ／Ｏ処理を実行することができないようにする（Ｓ２２２２）。
【００９９】
次いで障害検出部１３０１は、共有メモリ内に設定されている電源判定開始フラグをリセットし（Ｓ２２２３）、ＳＶＰ３００にドライブユニット２で電源障害が発生した旨の通知を行い（Ｓ２２２４）、電源障害チェックテーブル１５００に記録されているデータＩ／Ｏコマンドの処理結果をクリアして処理を終了する（Ｓ２２２５）。以後、各ＭＰ１０４２は仮閉塞されていないドライブユニット部２００（本実施例ではドライブユニット１のみ）を利用してデータＩ／Ｏ処理を継続して実行する。ドライブユニット１を含むすべてのドライブユニット部２００について仮閉塞が実行された場合には、ストレージ装置１０としてのデータＩ／Ｏ処理はできないため、ＳＶＰ３００の通知結果によってドライブユニット部２００の交換等の保守作業が行われることになる。
【０１００】
Ｓ２２２０に戻って、全パスの特定ドライブユニット部２００以降においてデータＩ／Ｏコマンドの処理異常が記録されていないと判定した場合（Ｓ２２２０、Ｎｏ）、障害検出部１３０１は、電源判定開始フラグをリセットし（Ｓ２２３０）、検出されたのはドライブユニット２の電源障害ではなくパスＡのデータＩ／Ｏのあて先である記憶ドライブＡ２１に発生した個別障害であると判定して（Ｓ２２３１）、例えば共有メモリ内に設定されている個別障害判定用情報に記録されている数値データをインクリメントする（Ｓ２２３２）。個別障害判定用情報については所定の閾値を設けておき、個別障害判定用情報としての数値データがその所定閾値に達した場合には（Ｓ２２４０、Ｙｅｓ）、当該記憶ドライブＡ２１になんらかの障害が発生しているものとしてその旨をＳＶＰ３００に通知して処理を終了する（Ｓ２２４２）。障害ありと判定された記憶ドライブＡ２１（２０２）については、ＳＶＰ３００の通知内容に従って、ドライブ交換等の所要の保守作業が行われる。
【０１０１】
一方、個別障害判定用情報としての数値データがその所定閾値に達していないと判定した場合には（Ｓ２２４０、Ｎｏ）、障害検出部１３０１は、パスＡを通じた記憶ドライブＡ２１へのデータＩ／Ｏを再試行して処理を終了する（Ｓ２２４１）。
【０１０２】
以上説明した実施例１の電源障害検出処理によれば、各ＭＰ１０４２が通常のデータＩ／Ｏコマンドの処理結果に基づいてドライブユニット部２００について電源障害有無の判定処理を実行することができるため、電源障害検出処理のための特別な回路等を設けることなく確実迅速にドライブユニット部２００の電源障害有無を検出することができ、また汎用のドライブユニット部２００を用いてストレージ装置１０を構成することが可能である。さらに、電源障害チェック専用コマンドを使用してドライブユニット部２００の障害有無を判定する場合に、ドライブ制御Ｉ／Ｆ１０５４のデータキュー１０５４１等をフラッシュ処理し、あるいは専用コマンドとして通常のデータＩ／Ｏコマンドよりも処理優先度が高いコマンドを使用する構成とすれば、電源障害検出をより迅速に実行することができる。
【０１０３】
図２３には、図２２で説明した、データＩ／Ｏコマンドの処理異常を最初に検出したＭＰ１０４２（本実施例ではパスＡを使用してドライブユニット２の記憶ドライブＡ２１に対してデータＩ／Ｏを実行しているＭＰ１０４２）以外のＭＰ１０４２が実行する処理フローを示している。図２２の電源障害検出処理フローのＳ２２０１ですでに電源障害判定中であると判定した場合（Ｓ２２０１、Ｙｅｓ）、当該ＭＰ１０４２は図２３の処理フローに移行し、自身が担当するパスについて検出したデータＩ／Ｏコマンドの処理結果を電源障害チェックテーブル１５００に記録する（Ｓ２３０１）。
【０１０４】
次いで障害検出部１３０１は、共有メモリをチェックして電源判定開始フラグがリセットされるのを待機する（Ｓ２３０２、Ｎｏ）。電源判定開始フラグがリセットされたと判定した場合（Ｓ２３０２、Ｙｅｓ）、障害検出部１３０１は、障害が検出されたパスを使用したデータＩ／Ｏ処理を再試行（リトライ）してその結果を判定する（Ｓ２３０３、Ｓ２３０４）。再試行が成功したと判定した場合（Ｓ２３０４、Ｙｅｓ）、障害検出部１３０１はそのまま処理を終了する。一方、再試行が成功しなかったと判定した場合（Ｓ２３０４、Ｎｏ）、障害検出部１３０１は、対応するデータキュー１０５４１がフラッシュ処理されており、かつ仮閉塞がされていないことが電源障害チェックテーブル１５００から判定される全部のドライブユニット部２００に対してデータＩ／Ｏを再試行して処理を終了する。
【０１０５】
以上の構成によれば、データＩ／Ｏコマンドの処理異常を検出したＭＰ１０４２以外のＭＰ１０４２により各パスのデータＩ／Ｏコマンドの処理の異常有無を迅速に集計させることができる。
【０１０６】
＝＝実施例２＝＝
次に、本実施形態の実施例２で実行される処理について説明する。実施例２では、実施例１とは異なり、電源障害検出処理を実行するＭＰ１０４２が、代表ＭＰ１０４２（代表演算装置）としてあらかじめ決定され、代表ＭＰ管理テーブル１６００に設定されている。図２４に代表ＭＰ管理テーブル１６００の構成例を示している。図２４の例では、各ＭＰ１０４２を特定するための識別符号であるＭＰ番号１６０１と代表ＭＰであることを示すフラグである代表ＭＰ１６０２の項目とが対応して記録されている。図２４の例ではコントローラ部１００のクラスタ１に属するＭＰ００が電源障害検出処理を実行する代表ＭＰ１０４２として設定されており、他のＭＰ１０４２（ＭＰ０１〜ＭＰ１３）が先にデータＩ／Ｏコマンドの処理異常を検出した場合には、当該ＭＰ１０４２が代表ＭＰ１６０２としてのＭＰ００に電源障害検出処理を依頼する通知を行うこととなる。なお、代表ＭＰ１６０２はあらかじめいずれかのＭＰ１０４２を指定しておくこともできるし、あるいは各ＭＰ１０４２の処理負荷に応じて変更する等の動的な設定を行うように構成することもできる。
【０１０７】
図２５に、代表ＭＰ１６０２であるＭＰ１０４２によりデータＩ／Ｏコマンドの処理異常が検出され、それを受けて電源障害検出処理が実行される場合の処理フロー例を示している。図２５の処理フロー例は、図２２の場合とほぼ同様であるから、代表ＭＰ１６０２による特有の処理として図２２の場合と異なる構成を説明する。
【０１０８】
図２５の処理フロー開始の契機は、代表ＭＰ１６０２自身がデータＩ／Ｏコマンドの処理異常を検出したこと、あるいは異常を検出した代表ＭＰ１６０２以外のＭＰ１４０２から電源障害検出処理実行の依頼を受けたことである。まず、Ｓ２５０１〜Ｓ２５２０の処理は、図２２のＳ２２０１〜Ｓ２２２０と同様である。Ｓ２５２０で全パスの特定ドライブユニット部２００での障害が検出されなかったと判定した場合には（Ｓ２５２０、Ｎｏ）、障害検出部１３０１は、共有メモリに設定されている電源拝呈開始フラグをリセットして、Ｓ２５３０へ処理を移行させる（Ｓ２５２５）。Ｓ２５３０では、検出処理実行を依頼した依頼元のＭＰ１４０２に電源障害検出の有無を通知する処理を行う。通知を受けた他のＭＰ１０４２では、通知内容に従って後述の処理を実行することとなる。
【０１０９】
以上の代表ＭＰ１６０２を選定しておく構成によれば、電源障害検出処理の処理負荷が各ＭＰ１４０２の本来のデータＩ／Ｏ処理に与える影響を低減させる効果を得ることができる。
【０１１０】
次に、実施例２において代表ＭＰ１６０２以外のＭＰ１４０２がデータＩ／Ｏコマンドの処理異常を検出した場合に当該ＭＰ１４０２が実行する電源障害検出処理フローについて説明する。図２６に、当該検出処理フローの一例を示している。図２６の処理フローは、図２３に示した実施例１の処理フロー例と一部同一の構成を備えている。まず、データＩ／Ｏコマンドの処理異常を検出したＭＰ１０４２は、代表ＭＰ管理テーブル１６００を参照して自身が代表ＭＰ１６０２であるか判定し（Ｓ２６０１）、代表ＭＰ１６０２であると判定した場合（Ｓ２６０１、Ｙｅｓ）、図２５の処理フローにより代表ＭＰ１６０２としての処理を実行する。
【０１１１】
Ｓ２６０１で代表ＭＰ１６０２でないと判定した場合（Ｓ２６０１、Ｎｏ）、障害検出部１３０１は、代表ＭＰ管理テーブル１６００に指定されていた代表ＭＰ１６０２に電源障害検出処理を依頼し、電源障害チェックテーブル１５００においてデータＩ／Ｏコマンドの処理異常が検出されたパスとあて先の記憶ドライブ２０２を示す欄に「＊」記号を記録する（Ｓ２６０３）。
【０１１２】
次いで、障害検出部１３０１は、代表ＭＰ１６０２から判定結果が通知されるのを待機し（Ｓ２６０４、Ｎｏ）、判定結果が通知されたと判定した場合（Ｓ２６０４、Ｙｅｓ）、通知された内容が電源障害発生を示すものであるかをさらに判定する（Ｓ２６０５）。電源障害発生を示す結果が通知されたと判定した場合（Ｓ２６０５、Ｙｅｓ）、障害検出部１３０１は、仮閉塞されたドライブユニット部２００以外のドライブユニット部２００を使用してデータＩ／Ｏ処理を続行する（Ｓ２６１０）。
【０１１３】
一方、Ｓ２６０５で電源障害でないと判定された場合は（Ｓ２６０５、Ｎｏ）、障害検出部１３０１は、図２２のＳ２２３１以降のステップに対応するＳ２６１２〜Ｓ２６１６の処理を実行し、自身が担当しているパスのあて先記憶ドライブ２０２の個別障害に対する処理を行う。
【０１１４】
以上の構成によれば、代表ＭＰ１６０２以外のＭＰ１０４２は、データＩ／Ｏコマンドの処理異常を検出した場合に電源障害検出処理を代表ＭＰ１４０２に実行させることができるので、電源障害検出処理実行時の自身が実行すべき通常のデータＩ／Ｏ処理への影響を低減させることができる。
【０１１５】
本実施形態の電源回復処理の説明
次に、本実施形態による電源障害検出処理が実行された後、電源障害が復旧したときに実行される電源回復処理について説明する。
【０１１６】
＝＝実施例１＝＝
図２７に、各ＭＰ１０４２が電源障害検出処理を実行する実施例１の構成における電源回復処理フローの一例を示している。電源回復処理は、ＭＰ１０４２が図１０に示す電源監視部１３００の障害回復部１３０２が有する機能を実現するソフトウェアを実行することにより行われる。後述する実施例２についても同様である。
【０１１７】
図２２の電源障害検出処理を実行したＭＰ１０４２は、適宜の時間間隔で電源障害チェックテーブル１５００を参照し、各ドライブユニット部２００の閉塞状態１５２０の項目に通常使用が記録される通常状態となっているかを判定し（Ｓ２７０１）、通常状態となっていると判定した場合（Ｓ２７０１、Ｙｅｓ）、各ドライブユニット部２００には電源障害が発生していないためそのまま処理を終了する。
【０１１８】
すべてのドライブユニット部２００について通常使用が記録されているわけではない、言い換えれば一部のドライブユニット部２００について仮閉塞がされていると判定した場合（Ｓ２７０１、Ｎｏ）、障害回復部１３０２は、所定時間Ｔ３が経過するまで待機し（Ｓ２７０２、Ｎｏ）、所定時間Ｔ３が経過したと判定した場合（Ｓ２７０２、Ｙｅｓ）、仮閉塞が記録されている各ドライブユニット部２００のドライブ医Ｉ／ＦＬＳＩ２０１６に対して通常のデータＩ／Ｏコマンドを発行する（Ｓ２７０３）。
【０１１９】
次いで、障害回復部１３０２は、Ｓ２７０３で発行した全コマンドに対して正常な応答が返されたか判定し（Ｓ２７０４）、一部のコマンドに対して正常な応答が得られないドライブユニット部２００があると判定した場合（Ｓ２７０４、Ｎｏ）、当該コマンド処理異常が電源障害に由来するものであるか判定するためにＳ２７０１に処理を戻す。
【０１２０】
一方、発行した全コマンドに対して正常な応答が返されたと判定した場合（Ｓ２７０４、Ｙｅｓ）、障害回復部１３０２は、各ドライブユニット部２００の電源が回復したと判定し（Ｓ２７０５）、電源障害チェックテーブル１５００に記録されているすべてのパス、及びすべてのドライブユニット部２００に関する障害記録をクリアし（Ｓ２７０６）、ＳＶＰ３００に電源回復を通知して処理を終了する（Ｓ２７０７）。
【０１２１】
以上の実施例１の電源回復処理によれば、各ドライブユニット部２００の電源回復を迅速に判定して仮閉塞状態を解除することができ、それによってストレージ装置１０としてのデータＩ／Ｏ性能の低下を抑制することができる。
【０１２２】
なお、図２７の例では仮閉塞されているドライブユニット部２００にある全部のドライブＩ／ＦＬＳＩ２０１６から正常な応答が得られた場合に電源回復と判定しているが、各ドライブユニット部２００において、ＲＡＩＤグループあるいはＥＣＣグループを構成している記憶ドライブ２０２のうち、データＩ／Ｏに必要な最小限の記憶ドライブ２０２の組み合わせについて正常なコマンド応答が得られたことを条件として電源回復と判定する構成をとることもでき、その場合にはストレージ装置１０としての稼働率向上を見込むことができる。
【０１２３】
図２８に、本実施形態におけるドライブユニット１（コントローラ部１００に接続されている先頭のドライブユニット部２００）を例にとって、ドライブ構成管理テーブル１７００の一例を示している。
【０１２４】
図２８のドライブ構成管理テーブル１７００は、ドライブユニット部２００を特定するための識別符号を記録するドライブユニットＩＤ１７０１、データＩ／Ｏ処理のパスを特定する識別符号を記録するパスＩＤ１７０２、ドライブＩ／Ｆ基板２０１を特定する識別符号を記録するドライブＩ／Ｆ基板ＩＤ１７０３、記憶ドライブ２０２を特定する識別符号を記録するドライブＩＤ１７０４、及びドライブユニット部２００毎のＥＣＣグループの構成を記録するＥＣＣ構成１７０５の各項目を備えている。図２８の例の場合、ＥＣＣ構成１７０５が７Ｄ＋Ｐの構成を備えているので、データの冗長度を考慮しない、例えば読み出しモードで当該ドライブユニット日２００を運用することが許容されれば、パスＡ〜パスＧまでのコマンド応答が正常であると判定されればドライブユニット１は回復したものとして扱うことが可能となる。この例以外のＲＡＩＤグループあるいはＥＣＣグループに関しても、同様のドライブ管理を行うことにより稼働率の向上を図ることができる。
【０１２５】
＝＝実施例２＝＝
次に、ＭＰ１０４２のうちで、電源障害検出処理を実行する代表ＭＰ１６０２が指定されている実施例２の構成における電源回復処理について説明する。代表ＭＰ１６０２による電源回復処理フローは、図２７に例示した実施例１の場合と同様であるので、処理フローの図示及び説明は省略する。図２９には、代表ＭＰ１０６２以外のＭＰ１０４２による電源回復処理フローの一例を示している。
【０１２６】
ＭＰ１０４２によって実行される障害回復部１３０２は、まず電源障害チェックテーブル１５００を所定時間間隔で参照して各ドライブユニット部２００について記録されている閉塞情報１５２０の項目が通常使用となるのを待機する（Ｓ２９０１、Ｎｏ）。電源障害チェックテーブル１５００において各ドライブユニット部２００について閉塞情報１５２０に通常使用が記録されていると判定した場合（Ｓ２９０１、Ｙｅｓ）、ＭＰ１０４２はドライブユニット部２００の電源障害が回復したと判定して処理を終了する（Ｓ２９０２）。
【０１２７】
以上の実施例に２における電源回復処理によれば、実施例１の場合と同様に、各ドライブユニット部２００の電源回復を迅速に判定して仮閉塞状態を解除することができ、それによってストレージ装置１０としてのデータＩ／Ｏ性能の低下を抑制することができる。
【０１２８】
以上本発明をその実施形態に即して説明したが、この実施形態に係るストレージ装置及びストレージ装置の電源障害検出方法によれば、以下の技術的効果を得ることができる。
【０１２９】
ドライブユニット部２００の電源障害を検出するために、記憶ドライブ２０２に対する通常のデータＩ／Ｏコマンドの処理を利用するため、電源障害を検出するための専用の電源監視回路、及びその周辺回路と専用通信線を設ける必要がなく、ストレージ装置としての故障率の低減、製造コストの低減を図ることができる。
【０１３０】
電源障害判定のための判定時間として、ＭＰ１４０２のコマンド発行から記憶ドライブ２０２での処理状態を受信するまでの遅延時間を見込んで設定した時間を使用するので、電源障害の誤検出を低減させることができ、無用のデータＩ／Ｏ処理性能低下やシステム停止のおそれを低減させることができる。
【０１３１】
ドライブユニット部２００毎に電源障害発生の有無を検出するため、ＭＰ１４０２によるデータＩ／Ｏ処理を停止する閉塞処理を実施する範囲を最小とすることができ、ストレージ装置１０としての性能低下を最小限に留めることができる。
【０１３２】
通常のデータＩ／Ｏ処理により電源障害検出を実施するため、ドライブ制御Ｉ／Ｆ１０５４のデータキュー１０５４１に格納されているデータをクリアすることなく判定が可能となり、ＭＰ１０４２によるコマンドリトライ回数、ＭＰ１０４２による処理アクセス数を低減することが可能となる。またコマンドの処理密度が低いパスについてはデータキュー１０５４１をフラッシュした上で専用のチェックコマンドを実行させる、あるいは通常のデータＩ／Ｏコマンドより処理優先度が高い専用チェックコマンドをじっこうさせることにより、より迅速に電源障害検出を行うことができる。
【０１３３】
以上、本実施形態について説明したが、上記実施形態は本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更、改良され得ると共に、本発明にはその等価物も含まれる。
【図１】
2012081071.tif 000003
【図３】
2012081071.tif 000004
【図４】
2012081071.tif 000005
【図５】
2012081071.tif 000006
【図６】
2012081071.tif 000007
【図７】
2012081071.tif 000008
【図８】
2012081071.tif 000009
【図９】
2012081071.tif 000010
【図１０】
2012081071.tif 000011
【図１１】
2012081071.tif 000012
【図１２】
2012081071.tif 000013
【図１３】
2012081071.tif 000014
【図１４】
2012081071.tif 000015
【図１５】
2012081071.tif 000016
【図１６】
2012081071.tif 000017
【図１７】
2012081071.tif 000018
【図１８】
2012081071.tif 000019
【図１９】
2012081071.tif 000020
【図２０】
2012081071.tif 000021
【図２１】
2012081071.tif 000022
【図２２】
2012081071.tif 000023
【図２３】
2012081071.tif 000024
【図２４】
2012081071.tif 000025
【図２５】
2012081071.tif 000026
【図２６】
2012081071.tif 000027
【図２７】
2012081071.tif 000028
【図２８】
2012081071.tif 000029
【図２９】
2012081071.tif 000030
【図２】
2012081071.tif 000031
【国際調査報告】
2012081071.tif 000032
2012081071.tif 000033
2012081071.tif 000034