(57)【要約】【課題】安価にプログラムムデータを冗長化すると共に、自動的かつ安全に故障したプログラムデータを復旧すること。【解決手段】ＣＰＵ１１は、管理部１７が起動時の処理失敗を確認した場合、管理部１７からコントローラ２０内の管理部２７へアクセスし、セレクタ１８，１９を介してコントローラ２０内のＢＩＯＳ  ＲＯＭ２６からＢＩＯＳデータを読み出す。そして、ＣＰＵ１１は、この読み出したＢＩＯＳデータと、起動時に用いたＢＩＯＳデータとが一致するか否かを判定し、両ＢＩＯＳデータが一致しないと判定した場合、読み出したＢＩＯＳデータをＢＩＯＳ  ＲＯＭ１６に上書きし、この上書きしたＢＩＯＳデータを用いて再起動を行なう。【選択図】図１
2013073258.tif 000002
【特許請求の範囲】
【請求項１】
同一構成のコントローラを少なくとも１ペア含むストレージ装置であって、
前記コントローラは、
制御部と、
ハードウェアとの入出力を制御するプログラムデータを記憶するデータ記憶部と、
前記データ記憶部に記憶するプログラムデータを用いた起動時の処理を管理する管理部と、
前記管理部から他の前記コントローラ内の管理部へ所定のアクセスがあった場合のみ当該他のコントローラ内のデータ記憶部との通信を許可する通信部と、
を備え、
前記制御部は、
前記管理部が起動時の処理失敗を確認した場合、前記管理部から他の前記コントローラ内の管理部へのアクセスし、前記通信部を介して前記他のコントローラ内のデータ記憶部からプログラムデータを読み出すデータ読み出し手段と、
前記データ読み出し手段で読み出したプログラムデータと、前記起動時に用いたプログラムデータとが一致するか否かを判定する判定手段と、
前記判定手段で両プログラムデータが一致しないと判定した場合、前記データ読み出し手段で読み出したプログラムデータを前記データ記憶部に上書きする上書き手段と、
前記上書き手段で前記データ記憶部に上書きしたプログラムデータを用いて再起動を行なう再起動手段と、
を有することを特徴とするストレージ装置。
【請求項２】
前記コントローラは、
前記再起動を行なった回数を示すカウント値を記憶するカウンタを備え、
前記管理部は、
前記起動時の処理失敗を確認した場合、前記カウント値が所定値を超えているか否かを判定するカウント値判定手段を備え、
前記カウント値判定手段で前記カウント値が所定値を超えていると判定した場合、前記制御部は、当該コントローラの交換を要求するために必要な情報を前記管理部に記憶し、
前記カウント値判定手段で前記カウント値が所定値を超えていないと判定した場合、前データ読み出し手段、前記判定手段、前記上書き手段、前記再起動手段が動作することを特徴とする請求項１記載のストレージ装置。
【請求項３】
前記ハードウェアは、複数の不揮発性記憶装置を含むディスクエンクロージャであることを特徴とする請求項１又は２記載のストレージ装置。
【請求項４】
前記プログラムデータは、ＢＩＯＳ（Basic Input/Output System）データであることを特徴とする請求項１乃至３のいずれか一項に記載のストレージ装置。
【請求項５】
同一構成のコントローラを少なくとも１ペア含むストレージ装置のプログラムデータ復旧方法であって、
前記コントローラは、
制御部と、
ハードウェアとの入出力を制御するプログラムデータを記憶するデータ記憶部と、
前記データ記憶部に記憶するプログラムデータを用いた起動時の処理を管理する管理部と、
前記管理部から他の前記コントローラ内の管理部へ所定のアクセスがあった場合のみ当該他のコントローラ内のデータ記憶部との通信を許可する通信部と、
を備え、
前記制御部は、
前記管理部が起動時の処理失敗を確認した場合、前記管理部から他の前記コントローラ内の管理部へのアクセスし、前記通信部を介して前記他のコントローラ内のデータ記憶部からプログラムデータを読み出すステップと、
前記読み出したプログラムデータと、前記起動時に用いたプログラムデータとが一致するか否かを判定するステップと、
両プログラムデータが一致しないと判定した場合、前記読み出したプログラムデータを前記データ記憶部に上書きするステップと、
前記上書き手段で前記データ記憶部に上書きしたプログラムデータを用いて再起動を行なうステップと、
を有することを特徴とするストレージ装置のプログラムデータ復旧方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置及びストレージ装置のプログラムデータ復旧方法に関する。
【背景技術】
【０００２】
近年、ストレージ装置、例えば、ストレージ装置のコントローラに搭載されるＣＰＵやチップセット、その他のデバイスが高度化しており、これにより、コントローラのプログラムデータ、例えばＢＩＯＳ（Basic Input/Output System）データはより複雑になる傾向にある。そのため出荷後に、製品の安定性や機能の向上を図るため、クライアントが使用する環境でＢＩＯＳデータの書き換えを行う機会が増えてきている。この際、ＢＩＯＳデータの書き換え途中に予期しないトラブルが発生し、ＲＯＭ内のＢＩＯＳデータが破損し、コントローラが起動不能になる可能性がある。
【０００３】
従来は、コントローラが起動不能になった場合に、そのコントローラを他の新たなコントローラに交換する手段が取られていた。しかし、これでは作業者の手間及び時間がかかるため、ストレージ装置においてもＢＩＯＳデータを予め冗長化しておくことが求められるようになった。
【０００４】
そこで、ＢＩＯＳデータを冗長化する技術として、同一コントローラ内にＢＩＯＳを有するフラッシュＲＯＭを設け、管理結果に基づいて、フラッシュＲＯＭを選択することにより、使用するＢＩＯＳデータを切り替える技術が提案されている（例えば、特許文献１参照）。
【０００５】
また、他の技術として、大容量のＢＩＯＳ  ＲＯＭを用いて、当該ＢＩＯＳ  ＲＯＭの記憶領域をメイン用及びバックアップ用などの領域に分けて、複数のＢＩＯＳデータを予め格納する技術が提案されている。
【０００６】
また更に、他の技術として、ＢＩＯＳ  ＲＯＭ内をコントローラの起動に最低限必要なブートブロックとそれ以外の機能を実現するメインブロックに区切り、ブートブロックについては書き換え不能にし、メインブロックについて書き換え可能にし、当該メインブロックにＢＩＯＳデータを格納することにより、安全に復旧を行なう技術が提案されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００３−３１６５８２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上記のＢＩＯＳを冗長化する技術のうち、先の２つの技術については、同一コントローラ内に複数のＢＩＯＳフラッシュＲＯＭを設ける必要があり、又は、大容量のＢＩＯＳ  ＲＯＭを設ける必要があるためコストアップになるというデメリットがあった。
【０００９】
また、最後の技術については、データを安全に復旧することは可能になるが、メインブロック内のＢＩＯＳデータが破損した場合は、ブートブロックのみで起動し、その際手作業で外部メディアからメインブロックのデータを復旧する作業が必要になるなど特別な手間が必要であり、コストアップに繋がる。
【００１０】
したがって、上記技術のいずれの場合でも、ＢＩＯＳ  ＲＯＭ内のデータが破損した場合に自動で復旧を行うためには、何らかの方法でコントローラが起動できないことを検出し、当該検出結果に基づいて、ＢＩＯＳ  ＲＯＭを切り替えや領域の切り替え、又はメインブロックのデータの復旧を行う仕組みが必要であった。
【００１１】
本発明は、上記事情に鑑みてなされたものであり、その目的は、プログラムデータの冗長化を安価に行なうと共に、自動的かつ安全に破損したプログラムデータを復旧することができるストレージ装置及びストレージ装置のプログラムデータ復旧方法を提供することにある。
【課題を解決するための手段】
【００１２】
本発明は、同一構成のコントローラを少なくとも１ペア含むストレージ装置であって、前記コントローラは、制御部と、ハードウェアとの入出力を制御するプログラムデータを記憶するデータ記憶部と、前記データ記憶部に記憶するプログラムデータを用いた起動時の処理を管理する管理部と、前記管理部から他の前記コントローラ内の管理部へ所定のアクセスがあった場合のみ当該他のコントローラ内のデータ記憶部との通信を許可する通信部と、を備え、前記制御部は、前記管理部が起動時の処理失敗を確認した場合、前記管理部から他の前記コントローラ内の管理部へのアクセスし、前記通信部を介して前記他のコントローラ内のデータ記憶部からプログラムデータを読み出すデータ読み出し手段と、前記データ読み出し手段で読み出したプログラムデータと、前記起動時に用いたプログラムデータとが一致するか否かを判定する判定手段と、前記判定手段で両プログラムデータが一致しないと判定した場合、前記データ読み出し手段で読み出したプログラムデータを前記データ記憶部に上書きする上書き手段と、前記上書き手段で前記データ記憶部に上書きしたプログラムデータを用いて再起動を行なう再起動手段と、を有することを特徴とする。
【００１３】
他の本発明は、同一構成のコントローラを少なくとも１ペア含むストレージ装置のプログラムデータ復旧方法であって、前記コントローラは、制御部と、ハードウェアとの入出力を制御するプログラムデータを記憶するデータ記憶部と、前記データ記憶部に記憶するプログラムデータを用いた起動時の処理を管理する管理部と、前記管理部から他の前記コントローラ内の管理部へ所定のアクセスがあった場合のみ当該他のコントローラ内のデータ記憶部との通信を許可する通信部と、を備え、前記制御部は、前記管理部が起動時の処理失敗を確認した場合、前記管理部から他の前記コントローラ内の管理部へのアクセスし、前記通信部を介して前記他のコントローラ内のデータ記憶部からプログラムデータを読み出すステップと、前記読み出したプログラムデータと、前記起動時に用いたプログラムデータとが一致するか否かを判定するステップと、両プログラムデータが一致しないと判定した場合、前記読み出したプログラムデータを前記データ記憶部に上書きするステップと、前記上書き手段で前記データ記憶部に上書きしたプログラムデータを用いて再起動を行なうステップと、を有することを特徴とする。
【発明の効果】
【００１４】
本発明によると、プログラムデータの冗長化を安価に行なうと共に、自動的かつ安全に破損したプログラムデータを復旧することができるストレージ装置及びストレージ装置のプログラムデータ復旧方法を提供できる。
【図面の簡単な説明】
【００１５】
【図１】本発明の実施の形態に係るストレージ装置の構成を示す図である。
【図２】同実施の形態に係るセレクタの経路切替条件を示す図である。
【図３】同実施の形態に係るセレクタの経路切替条件を示す図である。
【図４】同実施の形態に係るセレクタの経路切替条件を示す図である。
【図５】同実施の形態に係るセレクタの経路切替条件を示す図である。
【図６】同実施の形態に係るＢＩＯＳの復旧処理を示すフローチャートである。
【図７】同実施の形態に係るＢＩＯＳの復旧処理を示すフローチャートである。
【図８】同実施の形態に係るＢＩＯＳの復旧処理を示すフローチャートである。
【図９】同実施の形態に係るＢＩＯＳの復旧処理を示すフローチャートである。
【図１０】同実施の形態に係るＢＩＯＳの復旧処理を示すフローチャートである。
【図１１】上記ストレージ装置のセレクタに係る構成の変形例を示す図である。
【図１２】同実施の形態に係るセレクタの経路切替条件を示す図である。
【図１３】同実施の形態に係るセレクタの経路切替条件を示す図である。
【発明を実施するための形態】
【００１６】
以下、本発明の実施の形態について図面を参照して説明する。
【００１７】
図１は、ストレージ装置であるストレージサブシステム３の構成を示す図である。同図に示すように、ストレージサブシステム３は、コントローラ１０、コントローラ２０、及びディスクエンクロージャ３０を有している。また、コントローラ１０は、ホスト１及びホスト２と通信可能に接続されており、コントローラ２０はホスト１及びホスト２と通信可能に接続されている。
【００１８】
コントローラ１０は、ストレージサブシステム３の各種制御を行うコントローラであり、制御部であるＣＰＵ１１、チップセット１２、メモリ１３、ホストＩ／Ｆ（Interface）１４、ディスクＩ／Ｆ（Interface）１５、データ記憶部であるＢＩＯＳ  ＲＯＭ１６、管理部１７、セレクタ１８及びセレクタ１９を有している。
【００１９】
また、コントローラ２０は、コントローラ１０と同様に、ストレージサブシステム３の各種制御を行うコントローラであり、ＣＰＵ２１、チップセット２２、メモリ２３、ホストＩ／Ｆ２４、ディスクＩ／Ｆ２５、ＢＩＯＳ  ＲＯＭ２６、管理部２７、セレクタ２８及びセレクタ２９を有している。
【００２０】
更に、コントローラ１０及び２０間においては、セレクタ１８とセレクタ２９とが接続可能に構成され、セレクタ１９とセレクタ２８とが接続可能に構成されている。これらセレクタ１８とセレクタ２９，セレクタ１９とセレクタ２８とがどのような場合に接続されるかについては後述する。また、管理部１７と管理部２７とが通信可能に接続されている。このように、ストレージサブシステム３は、コントローラ１０及び２０間で通信可能となるように構成されている。
【００２１】
次に、ストレージサブシステム３に含まれるコントローラ１０，２０及びディスクエンクロージャ３０について詳細に説明する。なお、コントローラ２０は、コントローラ１０と同一な構成をしているため、以下では、コントローラ１０の構成について詳細に説明し、コントローラ２０の構成についての詳細な説明は省略する。
【００２２】
ＣＰＵ１１は、中央制御装置であり、復旧プログラム１１ａを有している。この復旧プログラム１１ａは、ＢＩＯＳの復旧処理を行うためのプログラムであり、ＣＰＵ１１は復旧プログラム１１ａを実行することにより、ＢＩＯＳ  ＲＯＭ１６に保存されたＢＩＯＳデータの復旧を行なうことが可能になっている。このＢＩＯＳデータの復旧処理については後述する。
【００２３】
また、ＣＰＵ１１はチップセット１２を介して、制御信号Ｓ００を用いてセレクタ１８の制御を行う。さらに、ＣＰＵ１１はチップセット１２及び管理部１７を介してコントローラ２０の管理部２７に対して制御信号Ｔ１０を送信し、間接的にセレクタ２９の制御を行うことが可能になっている。
【００２４】
チップセット１２は、ＣＰＵ１１と組み合わせてＩ／Ｏ(Input/Output)機能等を提供する。チップセット１２はＣＰＵ１１とＤＭＩ（Direct Media Interface）又はＥＳＩ（Enterprise Southbridge Interface）等の専用インターフェースで接続され、管理部１７とＬＰＣ（Low Pin Count）インターフェースで接続される。チップセット１２は、更に、制御信号Ｓ００によりセレクタ１８を制御する。
【００２５】
メモリ１３は、ＤＲＡＭ（Dynamic Random Access Memory）等のメモリデバイスで構成され、ＣＰＵ１１とＤＤＲ  ＳＤＲＡＭ（Double-Data-Rate Synchronous Dynamic Random Access Memory）、ＤＤＲ２  ＳＤＲＡＭ、ＤＤＲ３  ＳＤＲＡＭ等のメモリインターフェース規格で接続される。メモリ１３は、ホスト１，２又はディスクエンクロージャ３０からのデータの授受を行なう際のキャッシュメモリとして使用されると共に後述するＢＩＯＳデータの復旧処理を行なう場合には、ＢＩＯＳデータの保存場所としても使用される。
【００２６】
ホストＩ／Ｆ１４は、ＣＰＵ１１とＰＣＩ  Ｅｘｐｒｅｓｓ等のインターフェースで接続され、また、ホスト１，２とファイバチャネルやｉＳＣＳＩ（Internet Small Computer System Interface）等のインターフェースで接続される。ホストＩ／Ｆ１４は、ホスト１，２とＣＰＵ１１との間でのデータの授受等に使用される。
【００２７】
ディスクＩ／Ｆ１５は、ＣＰＵ１１とＰＣＩ  Ｅｘｐｒｅｓｓ等のインターフェースで接続され、また、ディスクエンクロージャ３０とＳＡＳ（Serial Attached SCSI）又はＳＡＴＡ（Serial Advanced Technology Attachment）等のインターフェースで接続される。ディスクＩ／Ｆ１５は、ＣＰＵ１１とディスクエンクロージャ３０との間でのデータの授受等に使用される。
【００２８】
ＢＩＯＳ  ＲＯＭ１６は、ハードウェアとの入出力を制御するプログラムデータを記憶するＲＯＭであり、より詳細には、コントローラ１０の起動に必要なＢＩＯＳデータが格納されている書き換え可能な不揮発性メモリデバイスである。ＢＩＯＳ  ＲＯＭ１６は、経路Ｚ００、セレクタ１９、経路Ｙ００、セレクタ１８及び経路Ｘ００を経由して、チップセット１２とＳＰＩ（Serial Peripheral Interface）等のインターフェースで接続される。なお、ＢＩＯＳ  ＲＯＭ１６内のＢＩＯＳデータがなんらかの理由で破損した場合、コントローラ１０は起動できなくなる。
【００２９】
セレクタ１８は、コントローラ２０内のＢＩＯＳ  ＲＯＭ２６との間の経路の切り替えを行う。より詳細には、セレクタ１８はチップセット１２とＳＰＩ等の経路Ｘ００で接続され、セレクタ１９とＳＰＩ等の経路Ｙ００で接続され、コントローラ２０内のセレクタ２９とＳＰＩ等の経路Ｙ０１で接続される。また、セレクタ１８は、チップセット１２から送信される制御信号Ｓ００に基づいて、経路を経路Ｙ００及び経路Ｙ０１のいずれかに切り替えるようになっている。
【００３０】
セレクタ１９は、セレクタ１８とＳＰＩ等の経路Ｙ００で接続され、ＢＩＯＳ  ＲＯＭ１６とＳＰＩ等の経路Ｚ００で接続され、コントローラ２０内のセレクタ２８とＳＰＩ等の経路Ｙ１１で接続されている。また、セレクタ１９は、管理部１７から送信される制御信号Ｔ００に基づいて、経路を経路Ｚ００及び経路Ｙ１１のいずれかに切り替えるようになっている。
【００３１】
なお、既述の制御信号Ｓ００、制御信号Ｔ００（コントローラ２０では、制御信号Ｓ１０、制御信号Ｔ１０に相当する。）は、「Ｔｒｕｅ」と「Ｆａｌｓｅ」のいずれかの論理状態をとるように構成されている。制御信号Ｓ００，Ｔ００（制御信号Ｓ１０，Ｔ１０）はいずれもコントローラ１０（コントローラ２０）の起動後の初期状態は「Ｆａｌｓｅ」の状態をとるように構成されている。
【００３２】
管理部１７は、チップセット１２とＬＰＣインターフェース等で接続され、コントローラ２０の管理部２７とＩ２Ｃ（Inter-Integrated Circuit）インターフェース等で接続される。また、管理部１７は、ントローラ２０内の管理部２７から管理部１７から送信される送制御信号Ｔ００をセレクタ１９へ送信できるようになっている。
【００３３】
管理部１７は、コントローラ１０内の他の制御部（又は回路）とは独立して動作し、ＢＩＯＳ  ＲＯＭ１６に保存するＢＩＯＳデータを用いた起動時の処理等を管理する。より詳細には、管理部１７は、コントローラ１０の起動指示、起動失敗等の故障管理、発生したイベント及び各種エラーに関する情報の登録、並びに制御信号Ｔ００を用いたセレクタ１９の切替制御を行う。例えば、管理部は、ＢＭＣ(Baseboard Management Controller)である。
【００３４】
また、管理部１７は、カウンタ１７ａを有している。カウンタ１７ａは、コントローラ１０が再起動を行なった回数を示すカウント値を記憶する。
【００３５】
上述のコントローラ１０とコントローラ２０とは、ペア（冗長構成）となっており、一方が故障もしくは取り外された状態でも、他方のコントローラでストレージサブシステム３の制御を続行することができるようになっている。
【００３６】
ディスクエンクロージャ３０は、複数のＨＤＤ（Hard Disk Drive）又はＳＳＤ（Solid State Drive）等の不揮発性記憶デバイスを搭載し、これら不揮発性記憶デバイスを制御する。本実施の形態においては、図１に示すように、ＨＤＤ３１ａ，ＨＤＤ３１ｂ，・・・，ＨＤＤ３１ｎがディスクエンクロージャ３０内に搭載されている。
【００３７】
次に、セレクタ１８，１９，２８及び２９の経路切替条件について図２から図５を参照して説明する。
【００３８】
図２に示すように、セレクタ１８は、制御信号Ｓ００が「Ｆａｌｓｅ」の場合、経路Ｘ００と経路Ｙ００とを接続し、制御信号Ｓ００が「Ｔｒｕｅ」の場合、経路Ｘ００と経路Ｙ０１と接続するように経路を切り替える。
【００３９】
また、図３に示すように、セレクタ１９は、制御信号Ｔ００が「Ｆａｌｓｅ」の場合、経路Ｙ００と経路Ｚ００とを接続し、制御信号Ｔ００が「Ｔｒｕｅ」の場合、経路Ｙ１１と経路Ｚ００とを接続するように経路を切り替える。
【００４０】
更に、図４に示すように、セレクタ２８は、制御信号Ｓ１０が「Ｆａｌｓｅ」の場合、経路Ｘ１０と経路Ｙ１０とを接続し、制御信号Ｓ１０が「Ｔｒｕｅ」の場合、経路Ｘ１０と経路Ｙ１１とを接続するように経路を切り替える。
【００４１】
更にまた、図５に示すように、セレクタ２９は、制御信号Ｔ１０が「Ｆａｌｓｅ」の場合、経路Ｙ１０と経路Ｚ１０とを接続し、制御信号Ｔ１０が「Ｔｒｕｅ」の場合、経路Ｙ０１と経路Ｚ１０とを接続するように経路を切り替える。
【００４２】
次に、何らかの理由によりコントローラ１０のＢＩＯＳ  ＲＯＭ１６内に保存しているＢＩＯＳデータが破損した場合に、コントローラ１０が起動処理を行なったときに、当該破損したＢＩＯＳデータを復旧し、復旧したＢＩＯＳデータに基づいてコントローラ１０が再起動する処理について図６から図１０を参照して説明する。
【００４３】
管理部１７は、ＢＩＯＳデータが破損しているため、コントローラ１０の起動失敗を検出する（Ｓ１０１）。起動失敗の検出方法は、例えば、管理部１７内にウォッチドッグタイマー（Watch Dog Timer）を設け、管理部１７が起動前にこのウォッチドッグタイマーを０からスタートさせ、起動成功時にＣＰＵ１１がこのウォッチドッグタイマーをクリアするという仕組みを予め用意し、このウォッチドッグタイマーが規定時間を超えタイムアウトした場合に起動失敗と判断する方法等によって容易に実現できる。
【００４４】
管理部１７は、コントローラ１０の起動失敗を検出した後、カウンタ１７ａのカウント値が所定値（規定回数）を超えているか否かを判定する（Ｓ１０２：カウンタ値判定手段）。所定値は、例えば、ストレージサブシステム３の保守者等が予め任意の値を設定しておけば良い。所定値を超えていると判定した場合（Ｓ１０２：ＹＥＳ）、管理部１７は、後述するコントローラ１０の交換を要求する処理（図１０参照）を実行する。
【００４５】
一方、規定回数を超えていないと判定した場合（Ｓ１０２：ＮＯ）、管理部１７は、コントローラ２０の管理部２７へ起動失敗を通知し（Ｓ１０３）、ＣＰＵ１１へＢＩＯＳデータ復旧処理の開始を指示する（Ｓ１０４）。
【００４６】
当該指示を受け付けると、ＣＰＵ１１は、ＢＩＯＳ  ＲＯＭ１６内のＢＩＯＳデータを読み出し、メモリ１３へ保存し（Ｓ１０５）、制御信号Ｓ００の状態を初期状態の「Ｆａｌｓｅ」から「Ｔｒｕｅ」へ変更し（Ｓ１０６）、管理部１７を介してコントローラ２０の管理部（他の管理部）２７へ制御信号Ｔ１０を「Ｆａｌｓｅ」から「Ｔｒｕｅ」へ変更するための指示を送信する（Ｓ１０７）。これにより、ＣＰＵ１１がチップセット１２、セレクタ１８、コントローラ２０内のセレクタ２９を介してコントローラ２０内のＢＩＯＳ  ＲＯＭ２６からＢＩＯＳデータを読み出せるようになる。
【００４７】
このように、ストレージサブシステム３は、管理部１７から他のコントローラ２０内の管理部２７へ所定のアクセスがあった場合のみ、ＣＰＵ１１は、当該他のコントローラ２０内のＢＩＯＳ  ＲＯＭ２６との通信が許可され、ＢＩＯＳ  ＲＯＭ２６からＢＩＯＳデータを読み出せるようになっている。このようなセレクタ１８，２９の動作等により通信部が構成される。
【００４８】
次に、ＣＰＵ１１は、コントローラ２０内のＢＩＯＳ  ＲＯＭ２６からＢＩＯＳデータを読み出し、メモリ１３に保存し（Ｓ１０８：読み出し手段）、当該メモリ１３に保存したＢＩＯＳデータと、既述のステップＳ１０５においてメモリ１３に保存したＢＩＯＳデータとが一致するか否かを判定する（Ｓ１０９：判定手段）。
【００４９】
両ＢＩＯＳデータが一致していると判定した場合（Ｓ１０９：ＹＥＳ）、コントローラ１０の起動失敗の原因はＢＩＯＳデータの破損ではないことを意味するため、ＣＰＵ１１は、当該判定結果に応じて後述する処理（図８参照）を実行する。
【００５０】
一方、両ＢＩＯＳデータが一致していないと判定した場合（Ｓ１０９：ＮＯ）、ＣＰＵ１１はＢＩＯＳ  ＲＯＭ１６内のＢＩＯＳデータが破損していることを示す情報を管理部１７に登録する（Ｓ１１０）。
【００５１】
次に、ＣＰＵ１１は、既述のステップＳ１０５においてメモリ１３に保存したコントローラ２０のＢＩＯＳ  ＲＯＭ２６から読み出したＢＩＯＳデータをＢＩＯＳ  ＲＯＭ１６上書きする（Ｓ１１１：上書き手段）。
【００５２】
次に、ＣＰＵ１１は、ＢＩＯＳ  ＲＯＭ１６からＢＩＯＳデータを読み出し（Ｓ１１２）、当該読み出したＢＩＯＳデータと、既述のステップＳ１０５においてメモリ１３に保存したコントローラ２０のＢＩＯＳ  ＲＯＭ２６から読み出したＢＩＯＳデータとが一致するか否かを判定する（Ｓ１１３）。これにより、ＢＩＯＳ  ＲＯＭ１６に上書きしたＢＩＯＳデータのベリファイを行なうことができる。
【００５３】
両ＢＩＯＳデータが一致していないと判定した場合（Ｓ１１３：ＮＯ）、ＢＩＯＳデータの復旧ができないことを示すため、ＣＰＵ１１は、後述するコントローラ１０の交換を要求する処理（図９参照）を実行する。
【００５４】
一方、両ＢＩＯＳデータが一致していると判定した場合（Ｓ１１３：ＹＥＳ）、ＣＰＵ１１は、ＢＩＯＳ  ＲＯＭ１６内のＢＩＯＳデータが正常に復旧したことを示す情報を管理部１７に登録する（Ｓ１１４）。
【００５５】
次に、ＣＰＵ１１は、管理部１７を介してコントローラ２０の管理部２７へ、制御信号Ｔ１０を「Ｔｒｕｅ」から「Ｆａｌｓｅ」へ変更する指示を送信し（Ｓ１１５）、制御信号Ｓ００を「Ｔｒｕｅ」から「Ｆａｌｓｅ」へ変更し（Ｓ１１６）、メモリ１３に保存しているＢＩＯＳ  ＲＯＭ２６から読み出したＢＩＯＳデータを消去する（Ｓ１１７）。
【００５６】
次に、ＣＰＵ１１は、ＢＩＯＳデータの復旧が完了したことを管理部１７へ通知する（Ｓ１１８）。このＣＰＵ１１からの通知を受けて管理部１７は、ＢＩＯＳデータの復旧が完了したことをコントローラ２０の管理部２７へ通知する（Ｓ１１９）。
【００５７】
次に、管理部１７は、カウンタ１７ａをインクリメントし（Ｓ１２０）、コントローラ１０の再起動を行ない（Ｓ１２１：再起動手段）、コントローラ１０の再起動が実行でき、正常起動できたか否かを判定する（Ｓ１２２）。再起動が正常にできなかったと判定した場合（Ｓ１２２：ＮＯ）、処理は既述したステップＳ１０１へ進み、当該ステップＳ１０１からの処理が繰り返される。
【００５８】
一方、正常起動できたと判定した場合（Ｓ１２２：ＹＥＳ）、ＣＰＵ１１は、管理部１７へカウンタ１７ａをクリアする指示を送信し（Ｓ１２３）、処理が終了する。このようにＢＩＯＳ  ＲＯＭ１６のＢＩＯＳデータの復旧が行なわれ、コントローラ１０の再起動が行なわれる。
【００５９】
次に、既述のステップＳ１０９において、両ＢＩＯＳデータが一致していると判定した場合（Ｓ１０９：ＹＥＳ）の処理について図８を参照しながら説明する。
【００６０】
図８に示すように、ＣＰＵ１１は、ＢＩＯＳ  ＲＯＭ１６のＢＩＯＳデータは正常であることを示す情報を管理部１７に登録する（Ｓ３０１）。
【００６１】
次に、ＣＰＵ１１は、管理部１７を介してコントローラ２０の管理部２７へ制御信号Ｔ１０を「Ｔｒｕｅ」から「Ｆａｌｓｅ」へ変更する指示を送信し（Ｓ３０２）、制御信号Ｓ００を「Ｔｒｕｅ」から「Ｆａｌｓｅ」へ変更する（Ｓ３０３）。
【００６２】
次に、ＣＰＵ１１は、メモリ１３に保存しているコントローラ２０内のＢＩＯＳ  ＲＯＭか２６ら読み出したＢＩＯＳデータを消去する（Ｓ３０４）。
【００６３】
次に、ＣＰＵ１１は、コントローラ１０が起動しない場合に、他の復旧手段が設けられている場合、当該復旧手段を実行し（Ｓ３０５）、処理を終了する。なお、他の復旧手段が予めストレージサブシステム３に設けられていない場合、ステップＳ３０５の処理は行なわずにこの処理が終了する。
【００６４】
次に、既述のステップＳ１１３において、両ＢＩＯＳデータが一致していないと判定した場合（Ｓ１１３：ＮＯ）の処理について図９を参照しながら説明する。
【００６５】
図９に示すように、ＣＰＵ１１は、ＢＩＯＳ  ＲＯＭ１６のＢＩＯＳデータの復旧が失敗したことを示す情報を管理部１７に登録する（Ｓ４０１）。
【００６６】
次に、ＣＰＵ１１は、管理部１７を介してコントローラ２０の管理部２７へ制御信号Ｔ１０を「Ｔｒｕｅ」から「Ｆａｌｓｅ」へ変更する指示を送信し（Ｓ４０２）、制御信号Ｓ００を「Ｔｒｕｅ」から「Ｆａｌｓｅ」へ変更する（Ｓ４０３）。
【００６７】
次に、ＣＰＵ１１は、メモリ１３に保存しているコントローラ２０のＢＩＯＳ  ＲＯＭ２６から読み出したＢＩＯＳデータを消去する（Ｓ４０４）。
【００６８】
上記ステップＳ４０１において、ＢＩＯＳデータの復旧が失敗したことを示す情報が管理部１７に登録された場合、この登録情報が、例えば管理ネットワークに接続された保守端末装置（図示を省略する。）を介して保守員によって確認され、当該保守員によってコントローラ１０、は正常動作する新たなコントローラに交換される。このようにコントローラが交換された後、当該交換されたコントローラによって起動処理が行なわれる。これにより、処理が終了する。
【００６９】
次に、既述のステップＳ１０２において、所定値を超えていると判定した場合（Ｓ１０２：ＹＥＳ）の処理について図１０を参照しながら説明する。
【００７０】
図１０に示すように、ＣＰＵ１１は、ＢＩＯＳ  ＲＯＭ１６のＢＩＯＳデータの復旧回数が所定値を超えたことを示す情報を管理部１７に登録する（Ｓ５０１）。
【００７１】
上記ステップＳ５０１において、ＢＩＯＳ  ＲＯＭ１６のＢＩＯＳデータの復旧回数が所定値を超えたことを示す情報が管理部１７に登録された場合、この登録情報が、図９を参照して説明した場合と同様に、例えば管理ネットワークに接続された保守端末装置（図示を省略する。）を介して保守員によって確認され、当該保守員によってコントローラ１０は正常動作する新たなコントローラに交換される。このようにコントローラが交換された後、当該交換されたコントローラによって起動処理が行なわれる。これにより、処理が終了する。
【００７２】
以上のように構成されたストレージサブシステム３は、管理部１７でＢＩＯＳ  ＲＯＭ１６のＢＩＯＳデータの破損を検出した場合、ＣＰＵ１１が復旧プログラム１１ａを実行することにより、自動的にＢＩＯＳデータの復旧をすることができる。
【００７３】
また、ストレージサブシステム３において、コントローラ１０は、コントローラ２０内のＢＩＯＳ  ＲＯＭ２６に保存されるＢＩＯＳデータへアクセスする回路を備えているため、同一コントローラ内に複数のＢＩＯＳ  ＲＯＭ及びＢＩＯＳデータを持たなくてもＢＩＯＳを冗長化することができる。
【００７４】
更に、ストレージサブシステム３は、ＢＩＯＳデータの復旧開始の指示を故障したコントローラ１０の管理部１７が行ない、ＣＰＵ１１がセレクタ１８，管理部２７を介したセレクタ２９の制御を行なうことにより、コントローラ２０内のＢＩＯＳ  ＲＯＭ２６とのアクセスを許可し、ＢＩＯＳ  ＲＯＭ１６のＢＩＯＳデータを復旧する構成になっている。このため、ＣＰＵ１１がアクセスを許可する処理をしない限り、ＢＩＯＳ  ＲＯＭ１６のＢＩＯＳデータが上書きされない。言い換えれば、コントローラ１０以外の他のコントローラ（コントローラ２０を含む）から勝手にＢＩＯＳ  ＲＯＭ１６のＢＩＯＳデータを上書きすることができない。したがって、ストレージサブシステム３は、故障したＢＩＯＳデータの復旧を安全に行なうことができる。
【００７５】
なお、上記実施の形態では、コントローラ１０のＢＩＯＳ  ＲＯＭ１６内のＢＩＯＳデータが破損した場合の復旧処理について説明したが、コントローラ２０のＢＩＯＳ  ＲＯＭ２６内のＢＩＯＳデータが破損した場合の復旧処理も、実質的に同様な処理で行なうことができる。
【００７６】
（変形例）
次に、図１１から図１３を参照して、ストレージサブシステム３内のコントローラ１０，２０間を接続するセレクタの構成の変形例を説明する。このセレクタの構成を変形したストレージサブシステム４は、上述したストレージサブシステム３とは、セレクタに係る構成が異なるのみで、他の構成については同様であるため、同一な構成には同一の符号を付し、詳細な説明は省略する。
【００７７】
図１１に示すように、ストレージサブシステム４においては、既述の図１に示すストレージサブシステム３のセレクタ１８，１９，２８及び２９、並びに経路Ｘ００，経路Ｘ１０，経路Ｙ００，経路Ｙ０１，経路Ｙ１０，経路Ｙ１１，経路Ｚ００及び経路Ｚ１０に代えて、セレクタ５１及び５２、並びに経路Ｗ，経路Ｘ０２，経路Ｘ１２，経路Ｚ０２及び経路Ｚ１２に置き換える構成となっている。
【００７８】
次に、セレクタ５１，５２の切替制御条件について図１２及び図１３を参照して説明する。
【００７９】
先ず、セレクタ５１の経路の切替制御条件６１について説明する。セレクタ５１は、制御信号Ｓ０１，Ｔ０１，ＥＮ１に基づいて経路Ｘ０２，経路Ｚ０２及び経路Ｗの切り替えを以下のように行う。
【００８０】
図１２に示すように、制御信号Ｓ０１が「Ｆａｌｓｅ」、かつ制御信号Ｔ０１が「Ｆａｌｓｅ」の場合、セレクタ５１は、制御信号ＥＮ１の状態によらず経路Ｘ０２と経路Ｚ０２とを接続する。また、経路ＷがＨｉ―Ｚ（ハイインピーダンス）状態に設定され、制御信号ＥＮ０が「Ｆａｌｓｅ」に設定される。
【００８１】
制御信号Ｓ０１が「Ｔｒｕｅ」、かつ制御信号Ｔ０１が「Ｆａｌｓｅ」、かつ制御信号ＥＮ１が「Ｆａｌｓｅ」の場合、セレクタ５１は、経路Ｘ０２と経路Wとを接続する。また、経路Ｚ０２がＨｉ―Ｚ状態に設定され、制御信号ＥＮ０が「Ｔｒｕｅ」に設定される。
【００８２】
制御信号Ｓ０１が「Ｆａｌｓｅ」、かつ制御信号Ｔ０１が「Ｔｒｕｅ」、かつ制御信号ＥＮ１が「Ｔｒｕｅ」の場合、セレクタ５１は経路Wと経路Ｚ０２とを接続する。また、経路Ｘ０２がＨｉ―Ｚ状態に設定され、制御信号ＥＮ０が「Ｆａｌｓｅ」に設定される。
【００８３】
制御信号Ｓ０１、制御信号Ｔ０１及び制御信号ＥＮ１の状態の組み合わせが既述した組み合わせ以外の場合は不正な状態であるため、経路Ｘ０２，経路Ｚ０２，経路Ｗの全てがＨｉ―Ｚ状態に設定され、制御信号ＥＮ０が「Ｆａｌｓｅ」に設定される。
【００８４】
次に、セレクタ５２の経路の切替制御条件６２について説明する。セレクタ５２は制御信号Ｓ１１，Ｔ１１，ＥＮ０に基づいて経路Ｘ１２，経路Ｚ１２及び経路Ｗの切り替えを以下のように行う。
【００８５】
制御信号Ｓ１１が「Ｆａｌｓｅ」、かつ制御信号Ｔ１１が「Ｆａｌｓｅ」の場合、セレクタ５２は、制御信号ＥＮ０の状態によらず経路Ｘ１２と経路Ｚ１２とを接続する。また、経路WがＨｉ―Ｚ状態に設定され、制御信号ＥＮ１が「Ｆａｌｓｅ」に設定される。
【００８６】
制御信号Ｓ１１が「Ｔｒｕｅ」、かつ制御信号Ｔ１１が「Ｆａｌｓｅ」、かつ制御信号ＥＮ０が「Ｆａｌｓｅ」の場合、セレクタ５２は、経路Ｘ１２と経路Wとを接続する。また、経路Ｚ１２がＨｉ―Ｚ状態に設定され、制御信号ＥＮ１が「Ｔｒｕｅ」に設定される。
【００８７】
制御信号Ｓ１１が「Ｆａｌｓｅ」、かつ制御信号Ｔ１１が「Ｔｒｕｅ」、かつ制御信号ＥＮ０が「Ｔｒｕｅ」の場合、セレクタ５２は経路Ｗと経路Ｚ１２とを接続する。また、経路Ｘ１２がＨｉ―Ｚ状態に設定され、制御信号ＥＮ１が「Ｆａｌｓｅ」に設定される。
【００８８】
制御信号Ｓ１１，制御信号Ｔ１１及び制御信号ＥＮ０の状態の組み合わせが既述した組み合わせ以外の場合は不正な状態であるため、経路Ｘ１２，経路Ｚ１２，経路Ｗの全てがＨｉ―Ｚ状態に設定され、制御信号ＥＮ１が「Ｆａｌｓｅ」に設定される。
【００８９】
なお、経路Ｗ，経路Ｘ０２，経路Ｘ１２，経路Ｚ０２，経路Ｚ１２は電気的にフローティング（中間電位）状態にならないように、電位を確定させるための弱いプルアップ処理又は弱いプルダウン処理がなされている。
【００９０】
以上説明したストレージサブシステム４のようにストレージサブシステム３からセレクタに係る構成を変形した場合でも、ストレージサブシステム４は、ストレージサブシステム３の奏する効果と同様な効果を奏することができる。
【００９１】
なお、上記実施の形態は、同一構成のコントローラ１０，２０を１ペア有するストレージサブシステム３又は４について説明したが、このように１ペアのコントローラ１０，２０を有する場合に限らず、ストレージサブシステムが同一構成のコントローラを複数ペア有する場合にも本発明を適用することができる。
【００９２】
更に、上記実施の形態は、本発明のストレージ装置をストレージサブシステム３又は４に適用した場合で説明したが、ストレージサブシステムに適用される場合に限らず、記憶装置等のハードウェアを制御する同一構成のコントローラを1又は複数ペア有する情報処理装置にも適用することができる。また、プログラムデータの一例として、ＢＩＯＳデータについて説明したが、他のプログラムデータにも適用可能である。
【００９３】
なお、本発明は上述の実施の形態に限定されるものではなく、その実施に際して様々な変形が可能である。
【００９４】
上記実施の形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【００９５】
（付記１）
同一構成のコントローラを少なくとも１ペア含むストレージ装置であって、
前記コントローラは、
制御部と、
ハードウェアとの入出力を制御するプログラムデータを記憶するデータ記憶部と、
前記データ記憶部に記憶するプログラムデータを用いた起動時の処理を管理する管理部と、
前記管理部から他の前記コントローラ内の管理部へ所定のアクセスがあった場合のみ当該他のコントローラ内のデータ記憶部との通信を許可する通信部と、
を備え、
前記制御部は、
前記管理部が起動時の処理失敗を確認した場合、前記管理部から他の前記コントローラ内の管理部へのアクセスし、前記通信部を介して前記他のコントローラ内のデータ記憶部からプログラムデータを読み出すデータ読み出し手段と、
前記データ読み出し手段で読み出したプログラムデータと、前記起動時に用いたプログラムデータとが一致するか否かを判定する判定手段と、
前記判定手段で両プログラムデータが一致しないと判定した場合、前記データ読み出し手段で読み出したプログラムデータを前記データ記憶部に上書きする上書き手段と、
前記上書き手段で前記データ記憶部に上書きしたプログラムデータを用いて再起動を行なう再起動手段と、
を有することを特徴とするストレージ装置。
【００９６】
（付記２）
前記コントローラは、
前記再起動を行なった回数を示すカウント値を記憶するカウンタを備え、
前記管理部は、
前記起動時の処理失敗を確認した場合、前記カウント値が所定値を超えているか否かを判定するカウント値判定手段を備え、
前記カウント値判定手段で前記カウント値が所定値を超えていると判定した場合、前記制御部は、当該コントローラの交換を要求するために必要な情報を前記管理部に記憶し、
前記カウント値判定手段で前記カウント値が所定値を超えていないと判定した場合、前データ読み出し手段、前記判定手段、前記上書き手段、前記再起動手段が動作することを特徴とする付記１記載のストレージ装置。
【００９７】
（付記３）
前記ハードウェアは、複数の不揮発性記憶装置を含むディスクエンクロージャであることを特徴とする付記１又は２記載のストレージ装置。
【００９８】
（付記４）
前記プログラムデータは、ＢＩＯＳ（Basic Input/Output System）データであることを特徴とする付記１乃至３のいずれか一項に記載のストレージ装置。
【００９９】
（付記５）
同一構成のコントローラを少なくとも１ペア含むストレージ装置のプログラムデータ復旧方法であって、
前記コントローラは、
制御部と、
ハードウェアとの入出力を制御するプログラムデータを記憶するデータ記憶部と、
前記データ記憶部に記憶するプログラムデータを用いた起動時の処理を管理する管理部と、
前記管理部から他の前記コントローラ内の管理部へ所定のアクセスがあった場合のみ当該他のコントローラ内のデータ記憶部との通信を許可する通信部と、
を備え、
前記制御部は、
前記管理部が起動時の処理失敗を確認した場合、前記管理部から他の前記コントローラ内の管理部へのアクセスし、前記通信部を介して前記他のコントローラ内のデータ記憶部からプログラムデータを読み出すステップと、
前記読み出したプログラムデータと、前記起動時に用いたプログラムデータとが一致するか否かを判定するステップと、
両プログラムデータが一致しないと判定した場合、前記読み出したプログラムデータを前記データ記憶部に上書きするステップと、
前記上書き手段で前記データ記憶部に上書きしたプログラムデータを用いて再起動を行なうステップと、
を有することを特徴とするストレージ装置のプログラムデータ復旧方法。
【産業上の利用可能性】
【０１００】
本発明は、冗長性のあるコントローラを含むストレージ装置及びこれのプログラムデータ復旧方法に広く適用可能である。
【符号の説明】
【０１０１】
１，２・・・ホスト
３・・・ストレージサブシステム
１０，２０・・・コントローラ
１１，２１・・・ＣＰＵ
１１ａ，２１ａ・・・復旧プログラム
１２，２２・・・チップセット
１３，２３・・・メモリ
１４，２４・・・ホストＩ／Ｆ
１５，２５・・・ディスクＩ／Ｆ
１６，２６・・・ＢＩＯＳ  ＲＯＭ
１７，２７・・・管理部
１７ａ，２７ａ・・・カウンタ
１８，１９，２８，２９，５１，５２・・・セレクタ
３０・・・ディスクエンクロージャ
３１ａ，・・・，３１ｎ・・・ＨＤＤ
【図１】
2013073258.tif 000003
【図２】
2013073258.tif 000004
【図３】
2013073258.tif 000005
【図４】
2013073258.tif 000006
【図５】
2013073258.tif 000007
【図６】
2013073258.tif 000008
【図７】
2013073258.tif 000009
【図８】
2013073258.tif 000010
【図９】
2013073258.tif 000011
【図１０】
2013073258.tif 000012
【図１１】
2013073258.tif 000013
【図１２】
2013073258.tif 000014
【図１３】
2013073258.tif 000015