(57)【要約】【課題】起動プログラムを格納した第１記憶装置の復旧を容易にできるようにする。【解決手段】第１の起動プログラムを実行して行なわれる起動処理時に、第１記憶装置１６−１の診断を行なった結果、第１記憶装置の異常が検出された場合に、第２記憶装置１６−２に格納された第２の起動プログラムから読み出したデータを用いて、第１記憶装置１６−１に格納された第１の起動プログラムのデータの格納領域における異常検出箇所を上書き更新することで、第１記憶装置１６−１を修復する修復部１０３とを備える。【選択図】図２
2018022333.tif 000002
【特許請求の範囲】
【請求項１】
第１の起動プログラムを格納する第１記憶装置と、
第２の起動プログラムを格納する第２記憶装置と、
前記第１の起動プログラムを実行して行なわれる起動処理時に、前記第１記憶装置の診断を行なう診断部と、
前記診断部により前記第１記憶装置の異常が検出された場合に、前記第２記憶装置に格納された前記第２の起動プログラムから読み出したデータを用いて、前記第１記憶装置に格納された前記第１の起動プログラムのデータの格納領域における異常検出箇所を上書き更新することで、前記第１記憶装置を修復する修復部とを備える
ことを特徴とする、ストレージ制御装置。
【請求項２】
前記第１記憶装置に格納された前記第１の起動プログラムと、前記第２記憶装置に格納された前記第２の起動プログラムとのいずれかを用いて、当該ストレージ制御装置の起動設定処理を行なう起動設定処理部と、
前記診断部が、前記第１記憶装置における、当該ストレージ制御装置の主記憶装置が使用可能になった以降の期間に前記起動設定処理部によって実行される前記起動プログラムのデータの格納領域において異常を検出した場合に、前記修復部が前記第１記憶装置を修復する
ことを特徴とする、請求項１記載のストレージ制御装置。
【請求項３】
前記第１記憶装置に格納された前記第１の起動プログラムと、前記第２記憶装置に格納された前記第２の起動プログラムとのうち、前記起動設定処理部が用いる起動プログラムを設定する設定部とを備え、
前記診断部が、前記第１記憶装置における、当該ストレージ制御装置の主記憶装置が使用不可の期間に前記起動設定処理部によって実行される前記起動プログラムのデータの格納領域において異常を検出した場合に、前記設定部が、次回の本ストレージ制御装置の起動時に、前記起動設定処理部が用いる前記起動プログラムを切り換えた後、当該ストレージ制御装置の再起動を行なう
ことを特徴とする、請求項２記載のストレージ制御装置。
【請求項４】
第１の起動プログラムを格納する第１記憶装置と、第２の起動プログラムを格納する第２記憶装置と、プロセッサと、を備える情報処理装置において、
前記プロセッサに、
前記第１の起動プログラムを実行して行なわれる起動処理時に、前記第１記憶装置の診断を行ない、
前記診断の結果、前記第１記憶装置の異常が検出された場合に、前記第２記憶装置に格納された前記第２の起動プログラムから読み出したデータを用いて、前記第１記憶装置に格納された前記第１の起動プログラムのデータの格納領域における異常検出箇所を上書き更新することで、前記第１記憶装置を修復する
処理を実行させる、記憶装置管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置および記憶装置管理プログラムに関する。
【背景技術】
【０００２】
ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）装置等のストレージ装置には、記憶装置を制御するＣＭ（Controller Module）が備えられている。
【０００３】
ＣＭには起動プログラムであるＢＩＯＳ（Basic Input Output System：基本入出力システム）を格納したＢＩＯＳメモリが備えられ、ＣＭの起動時においては、ＣＭのＣＰＵ（Central Processing Unit）が、このＢＩＯＳを実行する。これにより、装置起動時におけるハードウェアの初期化やＯＳ（Operating System）の読み込み、接続された装置・機器に対する基本的な入出力制御等が行なわれる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−５３９８４号公報
【特許文献２】特開２００３−３１６５８２号公報
【特許文献３】特開２０１１−１５８９９５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
このような従来のＣＭにおいて、ＢＩＯＳメモリに異常が生じた場合に、ＢＩＯＳの復旧が困難であるという課題がある。
【０００６】
例えば、保守作業者が保守作業を行なうことでＢＩＯＳのデータを書き換えて復旧させる場合には、人的ミスが生じるおそれがあり、また、保守に要するコストが高騰する。
【０００７】
また、例えば、カーネルやファームウェア等のＢＩＯＳ以外のコンポーネントや、ＵＳＢ（Universal Serial Bus）デバイス等の外部デバイスを用いて、ＢＩＯＳメモリの修復を行なう場合には、ＢＩＯＳメモリにおける異常発生箇所を特定することが困難である。
【０００８】
１つの側面では、本発明は、起動プログラムを格納した記憶装置の修復を容易にできるようにすることを目的とする。
【課題を解決するための手段】
【０００９】
このため、このストレージ制御装置は、第１の起動プログラムを格納する第１記憶装置と、第２の起動プログラムを格納する第２記憶装置と、前記第１の起動プログラムを実行して行なわれる起動処理時に、前記第１記憶装置の診断を行なう診断部と、前記診断部により前記第１記憶装置の異常が検出された場合に、前記第２記憶装置に格納された前記第２の起動プログラムから読み出したデータを用いて、前記第１記憶装置に格納された前記第１の起動プログラムのデータの格納領域における異常検出箇所を上書き更新することで、前記第１記憶装置を修復する修復部とを備える。
【発明の効果】
【００１０】
一実施形態によれば、起動プログラムを格納した記憶装置の復旧を容易にできる。
【図面の簡単な説明】
【００１１】
【図１】実施形態の一例としてのＣＭのハードウェア構成を例示する図である。
【図２】実施形態の一例としてのＣＭの機能構成を例示する図である。
【図３】実施形態の一例としてのＣＭの電源投入時におけるＢＩＯＳメモリの管理処理の概要を説明するためのフローチャートである。
【図４】実施形態の一例としてのＣＭにおけるＢＩＯＳフラッシュＲＯＭのリカバリ処理を説明するためのフローチャートである。
【図５】実施形態の一例としてのＣＭにおけるシステムダウン処理部による処理を説明するためのフローチャートである。
【図６】実施形態の一例としてのＣＭにおける起動側ＢＩＯＳフラッシュＲＯＭの領域１において異常が検出された場合の処理を説明するための図である。
【図７】実施形態の一例としてのＣＭにおける起動側ＢＩＯＳフラッシュＲＯＭの領域２において異常が検出された場合の処理を説明するための図である。
【図８】実施形態の一例としてのＣＭにおける待機側ＢＩＯＳフラッシュＲＯＭの領域２において異常が検出された場合の処理を説明するための図である。
【図９】実施形態の一例としてのＣＭにおけるＢＩＯＳメモリの管理処理の詳細を説明するためのフローチャートである。
【図１０】実施形態の一例としてのＣＭにおけるＢＩＯＳメモリの管理処理の詳細を説明するためのフローチャートである。
【図１１】実施形態の一例としてのＣＭにおけるＢＩＯＳメモリの管理処理の詳細を説明するためのフローチャートである。
【発明を実施するための形態】
【００１２】
以下、図面を参照して本ストレージ制御装置および記憶装置管理プログラムに係る実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形（実施形態及び各変形例を組み合わせる等）して実施することができる。又、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【００１３】
（Ａ）構成
ストレージ装置は、例えば、記憶装置を仮想化して、仮想ストレージ環境を形成し、この仮想ボリュームを、上位装置であるホスト装置等に提供する。
【００１４】
ストレージ装置は、ストレージ装置内の動作を制御する１つ以上のＣＭ（Controller Module：制御装置，ストレージ制御装置）を備える。
【００１５】
図１は実施形態の一例としてのＣＭ１のハードウェア構成を例示する図、図２はその機能構成を例示する図である。
【００１６】
ＣＭ１は、図示しないホスト装置から送信されるＩ／Ｏ要求に従って、記憶装置へのデータアクセス制御等、各種制御を行なうストレージ制御装置（情報処理装置）である。
【００１７】
ＣＭ１は、図１に示すように、ＣＰＵ１０，ＰＣＨ（Platform Controller Hub）１１，ＦＰＧＡ（Field Programmable Gate Array）１２，ＮＶＲＡＭ（Non-Volatile Random Access Memory）１３，ＤＩＭＭ（Dual Inline Memory Module）１４，エキスパンダ（ＥＸＰ）１５およびＢＩＯＳフラッシュＲＯＭ（Read Only Memory）１６−１，１６−２を備える。
【００１８】
ＤＩＭＭ１４は、複数のＤＲＡＭ（Dynamic Random Access Memory）チップをプリント基板上に搭載したメモリモジュールである。ＤＩＭＭ１４は、主記憶装置として用いられ、後述するＣＰＵ１０が、実行するプログラムやデータを、一時的に展開・格納する一次記憶メモリあるいはワーキングメモリとして利用される。
【００１９】
図１に示す例においては、ＣＭ１に２つのＤＩＭＭ１４が備えられているが、これに限定されるものではなく、１つもしくは３つ以上のＤＩＭＭ１４を備えてもよい。
【００２０】
以下、ＤＩＭＭ１４をメモリ１４という場合がある。
【００２１】
ＰＣＨ１１は、周辺入出力制御用プロセッサであり、ＣＰＵ１０に対して、メモリ１４やＮＶＲＡＭ１３，ＢＩＯＳフラッシュＲＯＭ１６−１，１６−２等を接続するコントローラハブとして機能する。
【００２２】
ＰＣＨ１１は、ＣＰＵ１０，ＤＩＭＭ１４，ＦＰＧＡ１２，ＮＶＲＡＭ１３，エキスパンダ（ＥＸＰ）１５およびＢＩＯＳフラッシュＲＯＭ１６−１，１６−２を相互に通信可能に接続する。
【００２３】
ＰＣＨ１１は、ＦＰＧＡ１２を介してＮＶＲＡＭ１３，エキスパンダ１５およびＢＩＯＳフラッシュＲＯＭ１６−１，１６−２と接続されている。
【００２４】
ＦＰＧＡ１２は、プログラミングすることができるＬＳＩ（プログラマブル集積回路）である。本システムでは、ＦＰＧＡ１２は、図１のとおりエキスパンダ１５とＢＩＯＳフラッシュＲＯＭ１６−１，１６−２との間に実装されている。エキスパンダ１５からの起動指示を受けて、ＦＰＧＡ１２は、ＢＩＯＳフラッシュＲＯＭ１６−１もしくはＢＩＯＳフラッシュＲＯＭ１６−２を起動させる処理を行なう。なお、ＦＰＧＡ１２が実装されていなくてもよい。
【００２５】
ＢＩＯＳフラッシュＲＯＭ１６−１，１６−２は、それぞれＢＩＯＳ（起動プログラム）を格納するメモリ（ＢＩＯＳメモリ；記憶装置）である。ＢＩＯＳはＣＭ１の起動時に実行され、ハードウェアの初期化やＯＳの読み込み、接続された装置・機器に対する基本的な入出力制御等を実現する。
【００２６】
ＢＩＯＳフラッシュＲＯＭ１６−１（第１記憶装置）には第１のＢＩＯＳ（第１のプログラム）が格納され、ＢＩＯＳフラッシュＲＯＭ１６−２（第２記憶装置）には第２のＢＩＯＳ（第２のプログラム）が格納されている。
【００２７】
本ＣＭ１においては、２つのＢＩＯＳフラッシュＲＯＭ１６−１，１６−２を備えて冗長化することにより、システムの可用化を向上させている。
【００２８】
これらのＢＩＯＳフラッシュＲＯＭ１６−１に格納されたＢＩＯＳと、ＢＩＯＳフラッシュＲＯＭ１６−２に格納されたＢＩＯＳは、同じであることが望ましい。なお、同じＢＩＯＳとは、例えば版が同じであることを示す。
【００２９】
本実施形態においては、ＢＩＯＳフラッシュＲＯＭ１６−１とＢＩＯＳフラッシュＲＯＭ１６−２とには同じＢＩＯＳが格納され、これらのＢＩＯＳフラッシュＲＯＭ１６−１とＢＩＯＳフラッシュＲＯＭ１６−２とは同じデータ構造を有するものとする。
【００３０】
すなわち、ＢＩＯＳフラッシュＲＯＭ１６−１と、ＢＩＯＳフラッシュＲＯＭ１６−２との間において、同じアドレスが示す範囲（アドレス範囲）には、互いに同じデータ（ＢＩＯＳデータ）が格納されている。
【００３１】
後述するＣＰＵ１０は、本ＣＭ１の電源投入時において、ＢＩＯＳフラッシュＲＯＭ１６−１，１６−２のいずれか一方からＢＩＯＳを読み出し、ＣＭ１の起動処理を行なう。
【００３２】
従って、ＣＰＵ１０は、ＢＩＯＳフラッシュＲＯＭ１６−１に格納されたＢＩＯＳと、ＢＩＯＳフラッシュＲＯＭ１６−２に格納されたＢＩＯＳとのいずれかを用いて、本ＣＭ１の起動設定処理を行なう起動設定処理部として機能する。
【００３３】
なお、以下、ＢＩＯＳフラッシュＲＯＭ１６−１をＢＩＯＳフラッシュＲＯＭ＃０という場合があり、また、ＢＩＯＳフラッシュＲＯＭ１６−２をＢＩＯＳフラッシュＲＯＭ＃１という場合がある。
【００３４】
また、以下、ＢＩＯＳフラッシュＲＯＭを示す符号としては、複数のＢＩＯＳフラッシュＲＯＭのうち１つを特定する必要があるときには符号１６−１，１６−２もしくは＃０，＃１を用いるが、任意のＢＩＯＳフラッシュＲＯＭを指すときには符号１６を用いる。
【００３５】
ＮＶＲＡＭ１３は、不揮発性メモリであって、種々のデータを格納するものである。例えば、ＮＶＲＡＭ１３は、ＥＣ（Engineering Change）情報を格納する。
【００３６】
ＥＣ情報は、次回の本ＣＭ１の起動に用いられるＢＩＯＳフラッシュＲＯＭ１６を特定する情報である。
【００３７】
以下、ＣＭ１の起動に用いられることを起動側と表現する場合がある。また、ＣＭ１の起動に用いられるＢＩＯＳフラッシュＲＯＭ１６を起動側ＢＩＯＳフラッシュＲＯＭ１６という場合がある。
【００３８】
これに対して、ＣＭ１の起動に用いられず、起動側ＢＩＯＳフラッシュＲＯＭ１６に何らの異常が検出される場合に備えて、冗長性を持たせるために備えられていることを待機側という場合がある。そして、このような待機側のＢＩＯＳフラッシュＲＯＭ１６を待機側ＢＩＯＳフラッシュＲＯＭ１６という場合がある。
【００３９】
ＥＣ情報は、起動側のＢＩＯＳフラッシュＲＯＭ１６や待機側のＢＩＯＳフラッシュＲＯＭ１６を特定する。
【００４０】
エキスパンダ１５は、ストレージシステムに備えられた他のＣＭ１のエキスパンダ１５との間での通信を行なう。また、エキスパンダ１５は、ＣＭ１における起動制御や監視処理を行なう。
【００４１】
エキスパンダ１５は、本ＣＭ１の電源投入時（起動時）において、ＮＶＲＡＭ１３に格納されたＥＣ情報を参照することで、ＢＩＯＳを読み出すＢＩＯＳフラッシュＲＯＭ１６−１，１６−２を決定する。エキスパンダ１５は、ＣＰＵ１０に対して、２つのＢＩＯＳフラッシュＲＯＭ１６−１，１６−２のうち、決定したＢＩＯＳフラッシュＲＯＭ１６を通知して、ＢＩＯＳ起動指示を行なう。
【００４２】
ＣＰＵ１０は、ＣＭ１全体を制御するハードウェアプロセッサである。ＣＰＵ１０は、マルチプロセッサであってもよい。なお、ＣＰＵ１０に代えて、例えばＭＰＵ（Micro Processing Unit），ＤＳＰ（Digital Signal Processor），ＡＳＩＣ（Application Specific Integrated Circuit），ＰＬＤ（Programmable Logic Device），ＦＰＧＡのいずれか一つであってもよい。また、ＣＰＵ１０は、ＣＰＵ，ＭＰＵ，ＤＳＰ，ＡＳＩＣ，ＰＬＤ，ＦＰＧＡのうちの２種類以上の要素の組み合わせであってもよい。
【００４３】
ＣＰＵ１０は、種々の制御や演算を行なう処理装置であり、ＮＶＲＡＭ１３等の記憶装置に格納されたＯＳやプログラムを実行することにより、種々の機能を実現する。例えば、ＣＰＵ１０は、ＢＩＯＳフラッシュＲＯＭ１６に格納されたＢＩＯＳを実行することで、ＣＭ１の起動処理を実現する。
【００４４】
また、ＣＰＵ１０は、図２に示すように、診断部１０１，ＥＣ情報更新部１０２，リカバリ処理部１０３，システムダウン処理部１０４およびエラー出力部１０５としての機能を実現する。
【００４５】
診断部１０１は、ＢＩＯＳフラッシュＲＯＭ１６の診断を行なう。すなわち、診断部１０１は、ＣＭ１におけるＢＩＯＳフラッシュＲＯＭ１６の自己診断機能を実現する。
【００４６】
ＣＭ１においては、ＢＩＯＳフラッシュＲＯＭ１６に格納されたデータの診断を実施することで、素子故障やデータ化け等が原因でのＢＩＯＳフラッシュＲＯＭ異常による期待外の動作を防止する。
【００４７】
以下、ＢＩＯＳフラッシュＲＯＭ１６に格納されたデータ（ＢＩＯＳデータ）の診断を行なうことを、単に、ＢＩＯＳフラッシュＲＯＭ１６の診断という場合がある。
【００４８】
診断部１０１は、冗長化された２つのＢＩＯＳフラッシュＲＯＭ１６−１，１６−２の両方の診断を行なう。
【００４９】
ＢＩＯＳは起動処理の過程で様々なハードウェアを初期化する。ＢＩＯＳは、例えば、メモリ１４の初期化も行なうものであり、メモリ１４の初期化完了前はメモリ１４を使うことができない。
【００５０】
メモリ１４が使用可能であるか否かによって、ＣＰＵ１０によるＢＩＯＳの処理速度は大きく変化する。それに伴って、ＢＩＯＳは、起動フェーズ（ＥＦＩ（Extensible Firmware Interface）フェーズ）に応じて、以下の期間１〜３に示すように３段階の期間に分けて段階的に動作場所（プログラムロード領域）を変更する。
【００５１】
期間１：ＢＩＯＳは、その起動直後、ＢＩＯＳフラッシュＲＯＭ１６上にロードされて動作する。ＥＦＩフェーズにおけるＳＥＣ（Security）フェーズがこの期間に相当する。この期間１においては、メモリ１４はまだ使用することができない。
【００５２】
期間２：期間１の後、ＣＰＵ１０のキャッシュをメモリと同様に使用できるようにする機能であるＣＡＲ（Cache As Ram）が有効となると、ＢＩＯＳは、ＣＡＲ領域にロードされて動作する。ＥＦＩフェーズにおけるＰＥＩ（Pre-EFI Initialization）フェーズの一部がこの期間２に相当する。
【００５３】
期間３：期間２の後、メモリ１４が使用可能になった時には、ＢＩＯＳはメモリ１４上に展開されたプログラムで動作する。ＥＦＩフェーズにおけるＰＥＩフェーズの一部や、ＤＸＥ（Driver Execution Environment）フェーズ及びＢＤＳ（Boot Device Selection）フェーズがこの期間３に相当する。
【００５４】
診断部１０１は、ＢＩＯＳフラッシュＲＯＭ１６の診断を、上述したＢＩＯＳの動作場所に合わせて、（a1）フラッシュ動作領域、（a2）ＣＡＲ動作領域、および（a3）メモリ動作領域の順で段階的（３段階）に分けて診断を行なう。
【００５５】
（a1）フラッシュ動作領域は、ＢＩＯＳフラッシュＲＯＭ１６において、ＥＦＩフェーズにおいて読み出されるデータ（ＢＩＯＳデータ，ＢＩＯＳプログラム，モジュール）が格納されている領域である。以下、フラッシュ動作領域を領域１という場合がある。
【００５６】
ＢＩＯＳフラッシュＲＯＭ１６において、上述した期間１にＣＰＵ１０に実行されるＢＩＯＳデータが格納されている領域が、この領域１に相当する。
【００５７】
（a2）ＣＡＲ動作領域は、ＣＡＲが有効となった後、メモリ１４が利用可能になるまでの間において読み出されるデータ（ＢＩＯＳプログラム，モジュール）が格納されている領域である。以下、ＣＡＲ動作領域を領域２という場合がある。
【００５８】
ＢＩＯＳフラッシュＲＯＭ１６において、上述した期間２にＣＰＵ１０に実行されるＢＩＯＳデータが格納されている領域が、この領域２に相当する。
【００５９】
（a3）メモリ動作領域は、ＢＩＯＳフラッシュＲＯＭ１６において、メモリ１４が使用可能になった後において読み出されるデータ（ＢＩＯＳプログラム，モジュール）が格納されている領域である。以下、メモリ動作領域を領域３という場合がある。
【００６０】
ＢＩＯＳフラッシュＲＯＭ１６において、上述した期間３においてＣＰＵ１０に実行されるＢＩＯＳデータが格納されている領域が、この領域３に相当する。
【００６１】
上述の如く、期間１においては、メモリ１４はまだ使用可能な状態になっていない。そこで、以下、領域１を、メモリ使用不可領域という場合がある。これに対して、期間２，３においては、メモリ１４は使用可能な状態になっている。そこで、以下、領域２，３を、メモリ使用可領域という場合がある。
【００６２】
診断部１０１は、ＢＩＯＳフラッシュＲＯＭ１６に対して、領域１、領域２、領域３の順で診断を行なう。
【００６３】
診断部１０１は、チェックサム（Checksum）を用いてＢＩＯＳフラッシュＲＯＭ１６の診断を行なう。
【００６４】
また、診断部１０１は、ＢＩＯＳフラッシュＲＯＭ１６において、異常発生箇所をブロック単位やセクタ単位で特定することできる。
【００６５】
ただし、ＢＩＯＳフラッシュＲＯＭ１６において、メモリ使用不可の時に診断する領域には、ＥＦＩの規約上チェックサムが備わっていない。そこで、ＢＩＯＳフラッシュＲＯＭ１６に書き込むＢＩＯＳデータの作成時に、チェックサムを計算し、このＢＩＯＳデータ内に格納する。これにより、診断部１０１によるＢＩＯＳフラッシュＲＯＭ１６の全領域の診断を可能にしている。
【００６６】
診断部１０１は、起動側のＢＩＯＳフラッシュＲＯＭ１６の診断が終了した後に、待機側のＢＩＯＳフラッシュＲＯＭ１６の診断を行なう。
【００６７】
ＥＣ情報更新部１０２は、ＮＶＲＡＭ１３のＥＣ情報を更新（変更）する。例えば、ＥＣ情報更新部１０２は、システムダウン処理部１０４によるシステムダウン処理時において、次回起動時に他方のＢＩＯＳフラッシュＲＯＭ１６を用いるようにＥＣ情報を書き換える。
【００６８】
ＥＣ情報更新部１０２は、システムダウン処理部１０４によるシステムダウン処理の過程において、ＮＶＲＡＭ１３に設定されたＥＣ情報を、待機側ＢＩＯＳフラッシュＲＯＭ１６を次回起動側とするように設定する（切り替える）。
【００６９】
すなわち、ＥＣ情報更新部１０２は、ＢＩＯＳフラッシュＲＯＭ１６−１に格納されたＢＩＯＳと、ＢＩＯＳフラッシュＲＯＭ１６−２に格納されたＢＩＯＳとのうち、ＣＰＵ１０（起動設定処理部）が用いるＢＩＯＳを設定する設定部として機能する。
【００７０】
リカバリ処理部１０３は、診断部１０１により異常が検出されたＢＩＯＳフラッシュＲＯＭ１６（以下、異常ＢＩＯＳフラッシュＲＯＭ１６もしくは修復対象ＢＩＯＳフラッシュＲＯＭ１６という場合がある）のデータの修復（リカバリ）を行なう。
【００７１】
すなわち、リカバリ処理部１０３は、ＣＭ１におけるＢＩＯＳフラッシュＲＯＭ１６の自己修復機能を実現する。
【００７２】
具体的には、リカバリ処理部１０３は、異常ＢＩＯＳフラッシュＲＯＭ１６における診断部１０１により異常が検出された箇所（異常発生箇所）のアドレス（異常発生アドレス）を特定する。
【００７３】
なお、異常ＢＩＯＳフラッシュＲＯＭ１６における異常発生箇所の特定は、例えば、診断部１０１による診断結果を参照することにより、既知の手法で実現することができ、その説明は省略する。
【００７４】
また、リカバリ処理部１０３は、この異常発生アドレスを含む所定のアドレス範囲を修復対象範囲として決定する。
【００７５】
リカバリ処理部１０３は、異常が検出されていない他方のＢＩＯＳフラッシュＲＯＭ１６における、異常ＢＩＯＳフラッシュＲＯＭ１６の修復範囲に対応する箇所から、ＢＩＯＳデータを抽出する。
【００７６】
前述の如く、本実施形態においては、ＢＩＯＳフラッシュＲＯＭ１６−１とＢＩＯＳフラッシュＲＯＭ１６−２とには同じデータ構造を備え、同じアドレス位置には同じＢＩＯＳデータが格納されている。
【００７７】
そこで、リカバリ処理部１０３は、異常が検出されていない他方のＢＩＯＳフラッシュＲＯＭ１６から、前述の如く決定した修復対象範囲と同じアドレス範囲のデータ（ＢＩＯＳデータ）を修復用データとして抽出する。
【００７８】
そして、リカバリ処理部１０３は、この他方のＢＩＯＳフラッシュＲＯＭ１６から抽出したデータ（修復用データ）を用いて、異常ＢＩＯＳフラッシュＲＯＭ１６における異常発生箇所を含む修復対象範囲のデータを上書きする。
【００７９】
すなわち、リカバリ処理部１０３は、冗長化された複数のＢＩＯＳフラッシュＲＯＭ１６において、一方のＢＩＯＳフラッシュＲＯＭ１６において異常が検出された位置を含む修復対象範囲のデータを、異常が検出されていない他方のＢＩＯＳフラッシュＲＯＭ１６の同じアドレス範囲から読み出したデータ（修復用データ）を用いて上書き更新する。
【００８０】
これにより、修復対象ＢＩＯＳフラッシュＲＯＭ１６のデータを異常のない状態に修復することができる。
【００８１】
以下、ＢＩＯＳフラッシュＲＯＭ１６に格納されたデータ（ＢＩＯＳデータ）を修復することを、単に、ＢＩＯＳフラッシュＲＯＭ１６の修復という場合がある。
【００８２】
なお、起動側ＢＩＯＳフラッシュＲＯＭ１６の領域１の診断は、メモリ１４が使用不可の状態で行なわれるので、診断処理を実行中である自分自身（動作中の起動プログラム）も診断対象に含まれる。
【００８３】
そのため、起動側ＢＩＯＳフラッシュＲＯＭ１６の領域１において異常が検出された場合は、動作中の起動プログラムの処理結果についても信頼性も低い。そこで、このようにメモリ１４が使用不可の状態で診断部１０１がＢＩＯＳフラッシュＲＯＭ１６の異常（診断異常）を検出した場合においては、異常が検知された領域１に対するリカバリ処理は実施せずに、ＥＣ情報更新部１０２にＥＣ情報を切り替えさせ、次回のＣＭ１の起動時にリカバリを実施する。
【００８４】
システムダウン処理部１０４は、本ＣＭ１を停止（再起動）させる処理（システムダウン処理）を行なう。
【００８５】
このシステムダウン処理において、システムダウン処理部１０４は、ＥＣ情報更新部１０２に、次回起動時に他方のＢＩＯＳフラッシュＲＯＭ１６を用いるようにＥＣ情報を書き換えさせる（ＥＣ情報更新）。
【００８６】
また、システムダウン処理部１０４は、ＮＶＲＡＭ１３における所定の記憶領域に、リセット依頼を示す情報（以下、単にリセット依頼という）を書き込む。また、システムダウン処理部１０４は、ＣＭ１に対する電力供給を停止させる処理を行なう。
【００８７】
エラー出力部１０５は、ＢＩＯＳフラッシュＲＯＭ１６に異常が検出された場合であって、リカバリ処理部１０３による修復を行なっても異常が解消されない場合に、ＢＩＯＳフラッシュＲＯＭ１６のリカバリが失敗したことを示す情報（エラーログ）を出力する。  また、エラー出力部１０５は、診断部１０１による待機側ＢＩＯＳフラッシュＲＯＭ１６の各領域１〜３の診断において異常が検出された場合にも、待機側ＢＩＯＳフラッシュＲＯＭ１６において異常が検出されたことを示す情報（警告ログ）を出力する。
【００８８】
エラー出力部１０５は、例えば、ＮＶＲＡＭ１３の所定の記憶領域等に、エラーログや警告ログを出力する。
【００８９】
そして、ＣＰＵ１０が、メモリ管理プログラム（記憶装置管理プログラム）を実行することにより、これらの診断部１０１，ＥＣ情報更新部１０２，リカバリ処理部１０３，システムダウン処理部１０４およびエラー出力部１０５として機能する。このメモリ管理プログラムは、各ＢＩＯＳフラッシュＲＯＭ１６の領域１にＢＩＯＳのモジュールとして格納されている。
【００９０】
メモリ管理プログラムは、本ＣＭ１に備えられたＢＩＯＳフラッシュＲＯＭ１６を管理するためのプログラムであり、ＢＩＯＳフラッシュＲＯＭ１６の診断（自己診断）と修復（自己修復）を実現する。
【００９１】
なお、診断部１０１，ＥＣ情報更新部１０２，リカバリ処理部１０３，システムダウン処理部１０４およびエラー出力部１０５としての機能を実現するためのプログラム（メモリ管理プログラム）は、例えばフレキシブルディスク，ＣＤ（ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−ＲＷ等），ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−ＲＡＭ，ＤＶＤ−Ｒ，ＤＶＤ＋Ｒ，ＤＶＤ−ＲＷ，ＤＶＤ＋ＲＷ，ＨＤ  ＤＶＤ等），ブルーレイディスク，磁気ディスク，光ディスク，光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供される。そして、コンピュータはその記録媒体からプログラムを読み取って内部記憶装置または外部記憶装置に転送し格納して用いる。又、そのプログラムを、例えば磁気ディスク，光ディスク，光磁気ディスク等の記憶装置（記録媒体）に記録しておき、その記憶装置から通信経路を介してコンピュータに提供するようにしてもよい。
【００９２】
メモリ管理プログラム（記憶装置管理プログラム）を記録する記録媒体には、ＢＩＯＳフラッシュＲＯＭ１６を含む。
【００９３】
診断部１０１，ＥＣ情報更新部１０２，リカバリ処理部１０３，システムダウン処理部１０４およびエラー出力部１０５としての機能を実現する際には、内部記憶装置（本実施形態では各ＢＩＯＳフラッシュＲＯＭ１６）に格納されたプログラムがコンピュータのマイクロプロセッサ（本実施形態ではＣＰＵ１０）によって実行される。このとき、記録媒体に記録されたプログラムをコンピュータが読み取って実行するようにしてもよい。
【００９４】
（Ｂ）動作
上述の如く構成された実施形態の一例としてのＣＭ１の電源投入時におけるＢＩＯＳメモリの管理処理の概要を、図３に示すフローチャート（ステップＡ１〜Ａ８）に従って説明する。
【００９５】
エキスパンダ１５が、ＮＶＲＡＭ１３のＥＣ情報を確認し、いずれのＢＩＯＳフラッシュＲＯＭ１６を用いてＣＭ１の起動を行なうかを確認する（ステップＡ１）。
【００９６】
ここで、ＥＣ情報には、ＢＩＯＳフラッシュＲＯＭ＃０が起動側であることが設定されているものとする。
【００９７】
エキスパンダ１５は、ＣＰＵ１０に対して、ＢＩＯＳフラッシュＲＯＭ＃０を起動側としてＢＩＯＳの実行を行なわせる指示（ＢＩＯＳ起動指示）を行なう（ステップＡ２）。
【００９８】
ＣＰＵ１０は、ＢＩＯＳフラッシュＲＯＭ＃０の領域１からＢＩＯＳを読み出し実行する。ＢＩＯＳにはメモリ管理プログラムが含まれている。ＣＰＵ１０がこのメモリ管理プログラムを実行することにより、ＣＰＵ１０は、診断部１０１，ＥＣ情報更新部１０２，リカバリ処理部１０３，システムダウン処理部１０４およびエラー出力部１０５としての機能を実現する。
【００９９】
診断部１０１は、先ず、起動側ＢＩＯＳフラッシュＲＯＭ１６−１（ＢＩＯＳフラッシュＲＯＭ＃０）の診断を行なう。診断部１０１は、起動側ＢＩＯＳフラッシュＲＯＭ＃０について、領域１，領域２および領域３の順番で診断を行なう（ステップＡ３〜Ａ５）。
【０１００】
診断部１０１は、次に、待機側ＢＩＯＳフラッシュＲＯＭ１６−２（ＢＩＯＳフラッシュＲＯＭ＃１）の診断を行なう。診断部１０１は、待機側ＢＩＯＳフラッシュＲＯＭ＃１について、領域１，領域２および領域３の順番で診断を行なう（ステップＡ６〜Ａ８）。
【０１０１】
ＣＭ１の起動時におけるＢＩＯＳフラッシュＲＯＭ１６の診断の終了後、ＢＩＯＳにおける他の処理が行なわれ、ＯＳの起動等が行なわれる。
【０１０２】
次に、実施形態の一例としてのＣＭ１におけるＢＩＯＳフラッシュＲＯＭ１６のリカバリ処理を、図４に示すフローチャート（ステップＢ１〜Ｂ４）に従って説明する。
【０１０３】
本処理は、例えば、後述の如く、診断部１０１により起動側ＢＩＯＳフラッシュＲＯＭ１６の領域２，３や待機側ＢＩＯＳフラッシュＲＯＭ１６の領域１〜３のいずれかにおいて異常が初めて検出された場合に実施される。
【０１０４】
リカバリ処理部１０３は、リカバリ開始を示すログをＮＶＲＡＭ１３の所定の記憶領域に出力する（ステップＢ１）。
【０１０５】
リカバリ処理部１０３は、診断部１０１による診断結果に基づき、修復対象ＢＩＯＳフラッシュＲＯＭ１６において異常が検出された箇所（異常発生箇所）のアドレス（異常発生アドレス）を特定する（ステップＢ２）。そして、リカバリ処理部１０３は、この異常発生アドレスを含む所定のアドレス範囲を修復対象範囲として決定する。
【０１０６】
リカバリ処理部１０３は、冗長化された２つのＢＩＯＳフラッシュＲＯＭ１６のうち、異常が検出されていない方のＢＩＯＳフラッシュＲＯＭ１６から、このＢＩＯＳフラッシュＲＯＭ１６における異常発生アドレスを含む所定サイズの領域（修復対象範囲）のデータ（修復用データ）を抽出する（ステップＢ３）。
【０１０７】
そして、リカバリ処理部１０３は、この他方のＢＩＯＳフラッシュＲＯＭ１６から抽出した修復用データを用いて、修復対象ＢＩＯＳフラッシュＲＯＭ１６における同じアドレス領域（修復対象領域）に上書きする（ステップＢ４）。これにより修復対象ＢＩＯＳフラッシュＲＯＭ１６の復旧が完了し、処理を終了する。
【０１０８】
次に、実施形態の一例としてのＣＭ１におけるシステムダウン処理を、図５に示すフローチャート（ステップＣ１〜Ｃ３）に従って説明する。
【０１０９】
本処理は、例えば、後述の如く、診断部１０１により起動側ＢＩＯＳフラッシュＲＯＭ１６の領域２，３や待機側ＢＩＯＳフラッシュＲＯＭ１６の領域１〜３のいずれかにおいて異常が検出された場合であって、リカバリ処理部１０３による修復処理を行なっても異常が解消されない場合に実施される（図９のステップＤ４，図１０のステップＤ８，Ｄ１２参照）。すなわち、異常ＢＩＯＳフラッシュＲＯＭ１６に対してリカバリ処理部１０３による修復処理を行なっても、この修復対象ＢＩＯＳフラッシュＲＯＭ１６において、再度異常が検出された場合に実施される。
【０１１０】
システムダウン処理部１０４は、エラー出力部１０５に対して、リカバリ処理部１０３による修復が失敗したことを示すログ（エラーログ）をＮＶＲＡＭ１３の所定の記憶領域に出力させる（ステップＣ１）。
【０１１１】
システムダウン処理部１０４は、ＥＣ情報更新部１０２にＮＶＲＡＭ１３のＥＣ情報を更新させる。すなわち、システムダウン処理部１０４は、ＥＣ情報更新部１０２に対して、異常ＢＩＯＳフラッシュＲＯＭ１６とは異なる方のＢＩＯＳフラッシュＲＯＭ１６を特定する情報をＥＣ情報として、ＮＶＲＡＭ１３に登録させる（ステップＣ２）。
【０１１２】
その後、システムダウン処理部１０４は、ＮＶＲＡＭ１３における所定の記憶領域に、リセット依頼を示す情報（以下、単にリセット依頼という）を書き込む（ステップＣ３）。また、システムダウン処理部１０４は、ＣＭ１に対する電力供給を停止させる処理を行なう。以上で、ＣＭ１におけるシステムダウン処理が終了する。
【０１１３】
次に、実施形態の一例としてのＣＭ１におけるＢＩＯＳメモリの管理処理の詳細を、図６〜図８を参照しながら、図９〜図１１に示すフローチャート（ステップＤ１〜Ｄ２４）に従って説明する。
【０１１４】
なお、図９はステップＤ１〜Ｄ４の処理を、図１０はステップＤ５〜Ｄ１２の処理を、また、図１１はステップＤ１３〜Ｄ２４の処理を、それぞれ示す。
【０１１５】
また、図６は起動側ＢＩＯＳフラッシュＲＯＭ１６の領域１において異常が検出された場合の処理を説明するための図、図７は起動側ＢＩＯＳフラッシュＲＯＭ１６の領域２において異常が検出された場合の処理を説明するための図である。また、図８は待機側ＢＩＯＳフラッシュＲＯＭ１６の領域２において異常が検出された場合の処理を説明するための図である。
【０１１６】
エキスパンダ１５が、ＮＶＲＡＭ１３のＥＣ情報を確認し、いずれのＢＩＯＳフラッシュＲＯＭ１６を用いてＣＭ１の起動を行なうかを確認する（図９のステップＤ１）。
【０１１７】
ここで、ＥＣ情報には、ＢＩＯＳフラッシュＲＯＭ１６−１（ＢＩＯＳフラッシュＲＯＭ＃０）が起動側であることが設定されているものとする。
【０１１８】
エキスパンダ１５は、ＢＩＯＳフラッシュＲＯＭ＃０を起動側として、ＣＰＵ１０に対して、このＢＩＯＳフラッシュＲＯＭ＃０に格納されているＢＩＯＳを用いてＣＭ１の起動処理を行なうよう指示（ＢＩＯＳ起動指示）する（図９のステップＤ２）。
【０１１９】
ＣＰＵ１０は、ＢＩＯＳフラッシュＲＯＭ＃０の領域１から、ＢＩＯＳを読み出し実行する。ＢＩＯＳには、メモリ管理プログラムが含まれている。ＣＰＵ１０がこのメモリ管理プログラムを実行することにより、ＣＰＵ１０は、診断部１０１，ＥＣ情報更新部１０２，リカバリ処理部１０３，システムダウン処理部１０４およびエラー出力部１０５としての機能を実現する。
【０１２０】
診断部１０１は、起動側ＢＩＯＳフラッシュＲＯＭ１６の領域１の診断を行なう（図９のステップＤ３）。
【０１２１】
ステップＤ３における診断の結果、起動側ＢＩＯＳフラッシュＲＯＭ１６の領域１において異常が検出された場合には（ステップＤ３の“異常”ルート参照；図６の符号Ｐ１参照）、システムダウン処理部１０４がシステムダウン処理を行なう（図９のステップＤ４；図６の符号Ｐ２参照）。
【０１２２】
このシステムダウン処理には、ＥＣ情報更新部１０２による、ＥＣ情報に対して、次回起動用ＢＩＯＳフラッシュＲＯＭ１６を、例えば、ＢＩＯＳフラッシュＲＯＭ＃０からＢＩＯＳフラッシュＲＯＭ＃１へ設定を変更する更新作業が含まれる（図６の符号Ｐ３参照）。
【０１２３】
なお、前述の如く、起動側ＢＩＯＳフラッシュＲＯＭ１６の領域１において異常が検出された場合には、その時点でリカバリ処理は行なわないので、リカバリ処理部１０３による修復が失敗したことを示すエラーログの出力（図５のステップＣ１参照）も行なわれない。
【０１２４】
その後、処理はステップＤ１に戻り、ＣＭ１の再起動処理において、エキスパンダ１５が、ＮＶＲＡＭ１３のＥＣ情報を確認する。ＥＣ情報には、ＢＩＯＳフラッシュＲＯＭ＃１を示す情報が設定されているので、ＣＰＵ１０は、起動側ＢＩＯＳフラッシュＲＯＭ１６に格納されているＢＩＯＳを用いてＣＭ１の起動を行なう（図６の符号Ｐ４参照）。
【０１２５】
一方、ステップＤ３における診断の結果、領域１において異常が検出されない場合には（ステップＤ３の“正常”ルート参照）、図１０のステップＤ５に移行する。
【０１２６】
診断部１０１は、起動側ＢＩＯＳフラッシュＲＯＭ１６の領域２の診断を行なう（図１０のステップＤ５）。
【０１２７】
ステップＤ５における診断の結果、起動側ＢＩＯＳフラッシュＲＯＭ１６の領域２において異常が検出された場合には（ステップＤ５の“異常”ルート参照；図７の符号Ｐ５参照）、システムダウン処理部１０４は、この領域２における初回の異常検出であるかを確認する（図１０のステップＤ６）。
【０１２８】
ステップＤ６における確認の結果、この領域２における初回の異常検出である場合には（ステップＤ６のＹＥＳルート参照）、リカバリ処理部１０３が、ＢＩＯＳリカバリ処理を行なう（図１０のステップＤ７）。
【０１２９】
すなわち、リカバリ処理部１０３は、待機側ＢＩＯＳフラッシュＲＯＭ＃１から読み出したデータを用いて、起動側ＢＩＯＳフラッシュＲＯＭ＃０における異常発生箇所のデータを書き換える（図７の符号Ｐ６参照）。
【０１３０】
リカバリ処理の終了後には、ステップＤ５に戻る。これにより、リカバリ処理が行なわれた起動側ＢＩＯＳフラッシュＲＯＭ＃０の領域２に対して、再度、診断部１０１による診断が行なわれるのである（図７の符号Ｐ７参照）。
【０１３１】
また、ステップＤ６における確認の結果、この領域２における初回の異常検出でない場合には（ステップＤ６のＮＯルート参照）、この領域２において固定故障が生じていると判断される（図７の符号Ｐ８参照）。そこで、システムダウン処理部１０４が、システムダウン処理を行なう（図１０のステップＤ８）。
【０１３２】
このシステムダウン処理には、ＥＣ情報更新部１０２による、ＥＣ情報に対して、次回起動用ＢＩＯＳフラッシュＲＯＭ１６を、例えば、ＢＩＯＳフラッシュＲＯＭ＃０からＢＩＯＳフラッシュＲＯＭ＃１へ設定を変更する更新作業が含まれる（図７の符号Ｐ９参照）。その後、処理は図９のステップＤ１に戻る。
【０１３３】
一方、ステップＤ５における診断の結果、領域２において異常が検出されない場合には（ステップＤ５の“正常”ルート参照）、図１０のステップＤ９に移行する。
【０１３４】
診断部１０１は、起動側ＢＩＯＳフラッシュＲＯＭ＃１の領域３の診断を行なう（図１０のステップＤ９）。
【０１３５】
ステップＤ９における診断の結果、起動側ＢＩＯＳフラッシュＲＯＭ１６の領域３において異常が検出された場合には（ステップＤ９の“異常”ルート参照）、システムダウン処理部１０４は、この領域３における初回の異常検出であるかを確認する（図１０のステップＤ１０）。
【０１３６】
ステップＤ１０における確認の結果、この領域３における初回の異常検出である場合には（ステップＤ１０のＹＥＳルート参照）、リカバリ処理部１０３が、ＢＩＯＳリカバリ処理を行なう（図１０のステップＤ１１）。
【０１３７】
すなわち、リカバリ処理部１０３は、待機側ＢＩＯＳフラッシュＲＯＭ＃１から読み出したデータを用いて、起動側ＢＩＯＳフラッシュＲＯＭ＃０における異常発生箇所のデータを書き換える。
【０１３８】
リカバリ処理の終了後には、ステップＤ９に戻る。これにより、リカバリ処理が行なわれた起動側ＢＩＯＳフラッシュＲＯＭ＃０の領域３に対して、再度、診断部１０１による診断が行なわれるのである。
【０１３９】
また、ステップＤ１０における確認の結果、この領域３における初回の異常検出でない場合には（ステップＤ１０のＮＯルート参照）、この領域３において固定故障が生じていると判断される。そこで、システムダウン処理部１０４が、システムダウン処理を行なう（図１０のステップＤ１２）。
【０１４０】
このシステムダウン処理には、ＥＣ情報更新部１０２による、ＥＣ情報に対して、次回起動用ＢＩＯＳフラッシュＲＯＭ１６を、現在の待機側ＢＩＯＳフラッシュＲＯＭ１６に変更する更新作業が含まれる。その後、処理は図９のステップＤ１に戻る。
【０１４１】
一方、ステップＤ９における診断の結果、領域３において異常が検出されない場合には（ステップＤ９の“正常”ルート参照）、図１１のステップＤ１３に移行する。
【０１４２】
診断部１０１は、待機側ＢＩＯＳフラッシュＲＯＭ１６の領域１の診断を行なう（図１１のステップＤ１３）。
【０１４３】
ステップＤ１３における診断の結果、待機側ＢＩＯＳフラッシュＲＯＭ１６の領域１において異常が検出された場合には（ステップＤ１３の“異常”ルート参照）、エラー出力部１０５が、待機側ＢＩＯＳフラッシュＲＯＭ１６の領域１において異常が検出されたことを示す情報（警告ログ）を出力する。
【０１４４】
システムダウン処理部１０４は、この領域１における初回の異常検出であるかを確認する（図１１のステップＤ１４）。
【０１４５】
ステップＤ１４における確認の結果、この領域１における初回の異常検出である場合には（ステップＤ１４のＹＥＳルート参照）、リカバリ処理部１０３が、ＢＩＯＳリカバリ処理を行なう（図１１のステップＤ１５）。
【０１４６】
すなわち、リカバリ処理部１０３は、起動側ＢＩＯＳフラッシュＲＯＭ１６から読み出したデータを用いて、待機側ＢＩＯＳフラッシュＲＯＭ１６における異常発生箇所のデータを書き換える。
【０１４７】
リカバリ処理の終了後には、ステップＤ１３に戻る。これにより、リカバリ処理が行なわれた待機側ＢＩＯＳフラッシュＲＯＭ１６の領域１に対して、再度、診断部１０１による診断が行なわれるのである。
【０１４８】
また、ステップＤ１４における確認の結果、この領域１における初回の異常検出でない場合には（ステップＤ１４のＮＯルート参照）、この領域１において固定故障が生じていると判断される。
【０１４９】
そこで、エラー出力部１０５が、リカバリ処理部１０３によるリカバリ処理が失敗したことを示すリカバリ失敗ログ（警告）をＮＶＲＡＭ１３の所定の記憶領域に出力する（図１１のステップＤ１６）。その後、処理は図１１のステップＤ１７に移行する。
【０１５０】
また、ステップＤ１３における診断の結果、領域１において異常が検出されない場合にも（ステップＤ１３の“正常”ルート参照）、図１１のステップＤ１７に移行する。
【０１５１】
ステップＤ１７において、診断部１０１は、待機側ＢＩＯＳフラッシュＲＯＭ１６の領域２の診断を行なう。
【０１５２】
ステップＤ１７における診断の結果、待機側ＢＩＯＳフラッシュＲＯＭ１６の領域２において異常が検出された場合には（ステップＤ１７の“異常”ルート参照；図８の符号Ｐ１０参照）、エラー出力部１０５が、待機側ＢＩＯＳフラッシュＲＯＭ１６の領域２において異常が検出されたことを示す情報（警告ログ）を出力する（図８の符号Ｐ１１参照）。
【０１５３】
システムダウン処理部１０４は、この領域２において検出された異常が、初回の異常検出であるかを確認する（図１１のステップＤ１８）。
【０１５４】
ステップＤ１８における確認の結果、この領域２における初回の異常検出である場合には（ステップＤ１８のＹＥＳルート参照）、リカバリ処理部１０３が、ＢＩＯＳリカバリ処理を行なう（図１１のステップＤ１９）。
【０１５５】
すなわち、リカバリ処理部１０３は、起動側ＢＩＯＳフラッシュＲＯＭ＃０から読み出したデータを用いて、待機側ＢＩＯＳフラッシュＲＯＭ＃０における異常発生箇所のデータを書き換える（図８の符号Ｐ１２参照）。
【０１５６】
リカバリ処理の終了後には、ステップＤ１７に戻る。これにより、リカバリ処理が行なわれた待機側ＢＩＯＳフラッシュＲＯＭ＃１の領域２に対して、再度、診断部１０１による診断が行なわれるのである（図８の符号Ｐ１３参照）。
【０１５７】
また、ステップＤ１８における確認の結果、この領域２における初回の異常検出でない場合には（ステップＤ１８のＮＯルート参照）、この領域２において固定故障が生じていると判断される（図８の符号Ｐ１４参照）。
【０１５８】
そこで、エラー出力部１０５が、リカバリ処理部１０３によるリカバリ処理が失敗したことを示すリカバリ失敗ログ（警告）をＮＶＲＡＭ１３の所定の記憶領域に出力する（図１１のステップＤ２０）。その後、処理は図１１のステップＤ２１に移行する。
【０１５９】
また、ステップＤ１７における診断の結果、領域２において異常が検出されない場合にも（ステップＤ１７の“正常”ルート参照）、図１１のステップＤ２１に移行する。
【０１６０】
診断部１０１は、待機側ＢＩＯＳフラッシュＲＯＭ１６の領域３の診断を行なう（図１１のステップＤ２１）。
【０１６１】
ステップＤ２１における診断の結果、待機側ＢＩＯＳフラッシュＲＯＭ１６の領域３において異常が検出された場合には（ステップＤ２１の“異常”ルート参照）、エラー出力部１０５が、待機側ＢＩＯＳフラッシュＲＯＭ１６の領域３において異常が検出されたことを示す情報（警告ログ）を出力する。
【０１６２】
システムダウン処理部１０４は、この領域３における初回の異常検出であるかを確認する（図１１のステップＤ２２）。
【０１６３】
ステップＤ２２における確認の結果、この領域３における初回の異常検出である場合には（ステップＤ２２のＹＥＳルート参照）、リカバリ処理部１０３が、ＢＩＯＳリカバリ処理を行なう（図１１のステップＤ２３）。
【０１６４】
すなわち、リカバリ処理部１０３は、起動側ＢＩＯＳフラッシュＲＯＭ１６から読み出したデータを用いて、待機側ＢＩＯＳフラッシュＲＯＭ１６における異常発生箇所のデータを書き換える。
【０１６５】
リカバリ処理の終了後には、ステップＤ２１に戻る。これにより、リカバリ処理が行なわれた待機側ＢＩＯＳフラッシュＲＯＭ１６の領域３に対して、再度、診断部１０１による診断が行なわれるのである。
【０１６６】
また、ステップＤ２２における確認の結果、この領域３における初回の異常検出でない場合には（ステップＤ２２のＮＯルート参照）、この領域３において固定故障が生じていると判断される。
【０１６７】
そこで、エラー出力部１０５が、リカバリ処理部１０３によるリカバリ処理が失敗したことを示すリカバリ失敗ログ（警告）をＮＶＲＡＭ１３の所定の記憶領域に出力する（図１１のステップＤ２４）。
【０１６８】
その後、処理は終了する。
【０１６９】
また、ステップＤ２１における診断の結果、領域３において異常が検出されない場合にも（ステップＤ２１の“正常”ルート参照）、処理を終了する。
【０１７０】
（Ｃ）効果
実施形態の一例としてのＣＭ１によれば、冗長化して備えられたＢＩＯＳフラッシュＲＯＭ１６のうち、一つのＢＩＯＳフラッシュＲＯＭ１６に異常が検出された場合に、リカバリ処理部１０３が、他のＢＩＯＳフラッシュＲＯＭ１６から読み出したデータを用いて異常発生個所のデータを上書き更新することで、ＢＩＯＳデータの修復を行なう。
【０１７１】
これにより、異常が検出されたＢＩＯＳフラッシュＲＯＭ１６を、ＣＭ１内において自己修復することができ、リカバリ処理に要する時間を短縮し、システム稼働率を向上させることができる。
【０１７２】
また、ＢＩＯＳフラッシュＲＯＭ１６やＣＭ１等の部品交換が不要となり、保守に要するコストを削減することができる。
【０１７３】
また、リカバリ処理部１０３によるＢＩＯＳフラッシュＲＯＭ１６の修復が行なわれた後に、診断部１０１が、異常を検出した領域に対して再度診断を行なう。これにより、信頼性を向上させることができる。
【０１７４】
ＢＩＯＳフラッシュＲＯＭ１６の診断や修復をＰＯＳＴ（Power On Self Test）中に行なうことで、ＲＡＳ（Reliability Availability Serviceability）機能を保ちながらも、ＢＩＯＳフラッシュＲＯＭ１６のリカバリ処理に要する時間を最小限にすることができる。
【０１７５】
（Ｄ）その他
そして、本発明は上述した実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で種々変形して実施することができる。
【０１７６】
例えば、上述した実施形態においては、ＣＭ１に２つのＢＩＯＳフラッシュＲＯＭ１６−１，１６−２を備えることで冗長化した例を示しているが、これに限定されるものではなく、３つ以上のＢＩＯＳフラッシュＲＯＭ１６を備えてもよい。
【０１７７】
また、上述した実施形態においては、ＣＰＵ１０がメモリ管理プログラムを実行することで、診断部１０１，ＥＣ情報更新部１０２，リカバリ処理部１０３，システムダウン処理部１０４およびエラー出力部１０５としての機能を実現しているが、これに限定されるものではない。例えば、これらのうち一部の機能を、他のプロセッサや回路装置によって実現してもよく、種々変形して実施することができる。
【０１７８】
また、上述した開示により本実施形態を当業者によって実施・製造することが可能である。
【０１７９】
（Ｅ）付記
以上の実施形態に関し、更に以下の付記を開示する。
【０１８０】
（付記１）
第１の起動プログラムを格納する第１記憶装置と、
第２の起動プログラムを格納する第２記憶装置と、
前記第１の起動プログラムを実行して行なわれる起動処理時に、前記第１記憶装置の診断を行なう診断部と、
前記診断部により前記第１記憶装置の異常が検出された場合に、前記第２記憶装置に格納された前記第２の起動プログラムから読み出したデータを用いて、前記第１記憶装置に格納された前記第１の起動プログラムのデータの格納領域における異常検出箇所を上書き更新することで、前記第１記憶装置を修復する修復部とを備える
ことを特徴とする、ストレージ制御装置。
【０１８１】
（付記２）
前記第１記憶装置に格納された前記第１の起動プログラムと、前記第２記憶装置に格納された前記第２の起動プログラムとのいずれかを用いて、当該ストレージ制御装置の起動設定処理を行なう起動設定処理部と、
前記診断部が、前記第１記憶装置における、当該ストレージ制御装置の主記憶装置が使用可能になった以降の期間に前記起動設定処理部によって実行される前記起動プログラムのデータの格納領域において異常を検出した場合に、前記修復部が前記第１記憶装置を修復する
ことを特徴とする、付記１記載のストレージ制御装置。
【０１８２】
（付記３）
前記第１記憶装置に格納された前記第１の起動プログラムと、前記第２記憶装置に格納された前記第２の起動プログラムとのうち、前記起動設定処理部が用いる起動プログラムを設定する設定部とを備え、
前記診断部が、前記第１記憶装置における、当該ストレージ制御装置の主記憶装置が使用不可の期間に前記起動設定処理部によって実行される前記起動プログラムのデータの格納領域において異常を検出した場合に、前記設定部が、次回の本ストレージ制御装置の起動時に、前記起動設定処理部が用いる前記起動プログラムを切り換えた後、当該ストレージ制御装置の再起動を行なう
ことを特徴とする、付記２記載のストレージ制御装置。
【０１８３】
（付記４）
第１の起動プログラムを格納する第１記憶装置と、第２の起動プログラムを格納する第２記憶装置と、プロセッサと、を備える情報処理装置において、
前記プロセッサに、
前記第１の起動プログラムを実行して行なわれる起動処理時に、前記第１記憶装置の診断を行ない、
前記診断の結果、前記第１記憶装置の異常が検出された場合に、前記第２記憶装置に格納された前記第２の起動プログラムから読み出したデータを用いて、前記第１記憶装置に格納された前記第１の起動プログラムのデータの格納領域における異常検出箇所を上書き更新することで、前記第１記憶装置を修復する
処理を実行させる、記憶装置管理プログラム。
【０１８４】
（付記５）
前記第１記憶装置に格納された前記第１の起動プログラムと、前記第２記憶装置に格納された前記第２の起動プログラムとのいずれかを用いて、当該情報処理装置の起動設定処理を行ない、
前記第１記憶装置における、当該情報処理装置の主記憶装置が使用可能になった以降の期間に前記プロセッサによって実行される前記起動プログラムのデータの格納領域において異常が検出された場合に、前記第１記憶装置を修復する
処理を前記プロセッサに実行させる、付記４記載の記憶装置管理プログラム。
【０１８５】
（付記６）
前記第１記憶装置における、当該情報処理装置の主記憶装置が使用不可の期間に前記プロセッサによって実行される前記起動プログラムのデータの格納領域において異常を検出した場合に、
前記第１記憶装置に格納された前記第１の起動プログラムと、前記第２記憶装置に格納された前記第２の起動プログラムとのうち、次回の本情報処理装置の起動時に前記起動設定処理に用いられる起動プログラムを切り換え、
当該情報処理装置の再起動を行なう
処理を前記プロセッサに実行させる、付記５記載の記憶装置管理プログラム。
【０１８６】
（付記７）
第１の起動プログラムを格納する第１記憶装置と、第２の起動プログラムを格納する第２記憶装置と、プロセッサと、を備える情報処理装置において、
前記プロセッサに、
前記第１の起動プログラムを実行して行なわれる起動処理時に、前記第１記憶装置の診断を行ない、
前記診断の結果、前記第１記憶装置の異常が検出された場合に、前記第２記憶装置に格納された前記第２の起動プログラムから読み出したデータを用いて、前記第１記憶装置に格納された前記第１の起動プログラムのデータの格納領域における異常検出箇所を上書き更新することで、前記第１記憶装置を修復する
処理を実行させる、記憶装置管理プログラムを記録したコンピュータ読取可能な記録媒体。
【０１８７】
（付記８）
前記第１記憶装置に格納された前記第１の起動プログラムと、前記第２記憶装置に格納された前記第２の起動プログラムとのいずれかを用いて、当該情報処理装置の起動設定処理を行ない、
前記第１記憶装置における、当該情報処理装置の主記憶装置が使用可能になった以降の期間に前記プロセッサによって実行される前記起動プログラムのデータの格納領域において異常が検出された場合に、前記第１記憶装置を修復する
処理を前記プロセッサに実行させる、付記７記載の記憶装置管理プログラムを記録したコンピュータ読取可能な記録媒体。
【０１８８】
（付記９）
前記第１記憶装置における、当該情報処理装置の主記憶装置が使用不可の期間に前記プロセッサによって実行される前記起動プログラムのデータの格納領域において異常を検出した場合に、
前記第１記憶装置に格納された前記第１の起動プログラムと、前記第２記憶装置に格納された前記第２の起動プログラムとのうち、次回の本情報処理装置の起動時に前記起動設定処理に用いられる起動プログラムを切り換え、
当該情報処理装置の再起動を行なう
処理を前記プロセッサに実行させる、付記８記載の記憶装置管理プログラムを記録したコンピュータ読取可能な記録媒体。
【符号の説明】
【０１８９】
１    ＣＭ
１０    ＣＰＵ
１１    ＰＣＨ
１２    ＦＰＧＡ
１３    ＮＶＲＡＭ
１４    ＤＩＭＭ
１５    エキスパンダ
１６−１，１６    ＢＩＯＳフラッシュＲＯＭ＃０
１６−２，１６    ＢＩＯＳフラッシュＲＯＭ＃１
１０１    診断部
１０２    ＥＣ情報更新部
１０３    リカバリ処理部
１０４    システムダウン処理部
１０５    エラー出力部
【図１】
2018022333.tif 000003
【図２】
2018022333.tif 000004
【図３】
2018022333.tif 000005
【図４】
2018022333.tif 000006
【図５】
2018022333.tif 000007
【図６】
2018022333.tif 000008
【図７】
2018022333.tif 000009
【図８】
2018022333.tif 000010
【図９】
2018022333.tif 000011
【図１０】
2018022333.tif 000012
【図１１】
2018022333.tif 000013