図1は、本実施例のディスクアレイ装置1の構成図である。ディスクアレイ装置1を構成するユニットは多くの種類を有する。CM(Controller Module)ユニット2、3はディスクアレイ装置1の全体の制御を行う。SVC(Service Controller)ユニット41,42は装置全体の電源監視、制御を行う。CA(Channel Adapter)ユニット43,44は外部装置とCM2,3との間で情報の送受信を行う。外部装置とは例えばホスト装置である。DE(Device Enclosure)47,48は磁気ディスク装置を複数個格納する。PBC(Port Bypass Circuit)ユニット45,46はDEの制御、監視を行う。PSU(Power Suply unit)ユニット49,50は他の各ユニットに電源を供給する。BU(Battery unit)ユニット51,52は停電時に電源を供給する。RT(Router)ユニット53、54はディスクアレイ装置1のCM2とCM3との間、CM2およびCM3とPBC45およびPBC46との間を接続し、ルーティングを行う。各ユニットはバス4により接続されている。
ディスクアレイ装置1はCA43、CA44を経由してホスト装置に応答するため常に動作することを要求される。したがって、ディスクアレイ装置1の各ユニットは同一の機能を実行するユニットを複数有した冗長な構成となる。例えば、ディスクアレイ装置1はCM2とCM3の2つのCMを有する。この構成により一方のユニットが故障した場合でも故障していないユニットが継続して動作することによりディスクアレイ装置1全体としての動作が停止することはない。また、同一の機能を実行するユニット間では、ユニットに格納されたファームウェアの版数、実行するファームウェア、再起動後に実行するファームウェアが全て一致するように設定される。したがって、同一の機能を実行するユニット間の設定は統一される。ファームウェアはユニットの基本的な制御を行なうためにユニットに組み込まれたソフトウェアである。ユニットに固定的に搭載され、本来はあまり変更が加えられない。ユニットに内蔵されたROMやフラッシュメモリに記憶される。ファームウェアは、ユニットの機能の追加や不具合の修正のため、後から変更できるようになっているものが多い。改版されたファームウェアを識別するために付す数字を版数という。したがって、版数が異なるファームウェアを実行するユニットは異なる処理を実行する。
ディスクアレイ装置1はDE47および48内の磁気ディスク装置にシステムディスク90、システムディスク91を有する。システムディスク90、システムディスク91にはディスクアレイ装置1内の各ユニットにダウンロードするファームウェアのファイル92およびファイル93が格納される。システムディスクおよびファイルも冗長な構成となる。各ユニットはファームウェアをダウンロードして、ファームウェアの命令群に応じた動作することにより機能する。ファイル92には各版数のファームウェアが格納される。
したがって、ファイル92は同じユニットのファームウェアであっても複数の版数のファームウェアを有する構成となる。ディスクアレイ装置1を構成するそれぞれのユニットは、2つの種類に分類可能である。1つ目の種類のユニットは、記憶手段の稼動領域にファームウェアのダウンロードが可能なユニットである。2つ目の種類のユニットは、記憶手段の稼動領域にファームウェアのダウンロードが不可能なユニットである。以降の説明のために、交換の対象となるユニットをユニット70とし、ディスクアレイ装置1内で動作するユニットをユニット80とする。
本実施例で交換の対象となるディスクアレイ装置1内のユニットについて説明する。図2はユニットの構成図である。ユニット60は実行部61と主記憶62と記憶手段63とインターフェース部64を有する。実行部61と主記憶62と記憶手段63とインターフェース部64はバス65により接続される。
実行部61は主記憶62に展開されたファームウェアに従った処理を実行する。実行部61は記憶手段63からファームウェアを呼び出して主記憶62に展開する。ユニット60は主記憶62に読出したファームウェアに応じた処理を実行する。従って、ファームウェアの版数が異なるとユニット60は異なる処理を実行することとなる。ディスクアレイ装置1内の各ユニットが有する主記憶の記憶容量は異なる。大容量の主記憶を搭載したユニットは、記憶手段に圧縮形式で保存されているファームウェアを主記憶上に展開する。大容量の主記憶を搭載したユニットは主記憶上に全てのファームウェアを展開して稼動する。大容量の主記憶を有するユニットは、例えばCMである。大容量の主記憶を有するユニットは、主記憶にファームウェアを展開した後、記憶手段に対する読込処理は発生しない。したがって、記憶手段内のファームウェアの更新が可能である。大容量の主記憶を搭載したユニットは高価である。一方、小容量の主記憶を搭載したユニットは、記憶手段に保存されているファームウェアを主記憶上にすべて展開することはできない。主記憶の容量が足りないためである。小容量主記憶を搭載したユニットは、例えば、制御を行うユニットであるPBC(Port Bypass Circuit)ユニットおよび装置全体の電源監視や制御を行うSVC(SerVice Controller)ユニット等がある。小容量の主記憶を搭載したユニットは安価である。また、小容量の主記憶を搭載したユニットは記憶手段内にファイルシステムを有するものもある。ファイルシステムを有するユニットは複数のファームウェアをユニットの機能ごとに分割して管理する。ディスクアレイ装置内でユニットが稼動するとき、ユニットの実行部は、ユニットの現在の稼動に必要なファームウェアのみを記憶手段内のファイルシステムから主記憶に展開する。従って、ファイルシステムを採用したユニットは、ユニットの稼動中は記憶手段内の稼動するファームウェアが格納された領域に対する読み込み処理が常に発生する。
主記憶62は、記憶手段63に格納されたファームウェアが展開されるメモリである。例えばRAMである。インターフェース部64はCM2及びCM3と接続する。CM2又はCM3から情報を受信すると実行部61に受け渡す。またユニット60の実行部61が処理をした結果をCM2またはCM3に受け渡す。
記憶手段63はファームウェアを格納する。記憶手段63は複数の記憶領域を有する。記憶手段63は、第一の記憶領域631、第二の記憶領域632、第三の記憶領域633を有する。ユニット60を機能させる一つのまとまりからなるファームウェアは記憶領域に格納される。具体的には、記憶手段63は第一の記憶手段631にファームウェアを格納し、第二の記憶手段632に別のファームウェアを格納する。複数のファームウェアを記憶することにより、例えば一方のファームウェアに不具合があることが判明した場合に、ユニットに格納された他の版数のファームウェアを実行することにより、不具合を回避することが可能となる。したがって、ユニット60は、記憶手段63の第一の記憶領域631あるいは第二の記憶領域632から主記憶62に展開するファームウェアを選択することが可能である。ユニット60の実行部61が主記憶62に展開して実行するファームウェアが格納される記憶領域を稼動領域634とする。一方、ユニットが主記憶に展開しないファームウェアが格納されている領域を非稼動領域635とする。稼動領域634となる記憶領域は第三の記憶手段633に格納された稼動領域を識別する番号に応じて切り替わる。したがって、稼動領域634は稼動領域を識別する番号に応じて第一の記憶領域631または第二の記憶領域632のどちらかとなる。記憶手段63は例えば、フラッシュメモリである。
以降の説明のために、図3(b)に交換の対象となるユニット70の構成を示し、図3(a)にディスクアレイ装置内で動作するユニット80の構成を示す。交換の対象となるユニット70は、実行部71、主記憶72、記憶手段73およびインターフェース部74を有する。実行部71、主記憶72、記憶手段73およびインターフェース部74は、バス75により接続される。記憶手段は第一の記憶領域731、第二の記憶領域732、第三の記憶領域733を有する。また、稼動領域は稼動領域734、非稼動領域は非稼動領域735とする。ディスクアレイ装置内で動作するユニット80は、実行部81、主記憶82、記憶手段83およびインターフェース部84を有する。実行部81、主記憶82、記憶手段83およびインターフェース部84は、バス85により接続される。記憶手段は第一の記憶領域831、第二の記憶領域832、第三の記憶領域833を有する。また、稼動領域は稼動領域834、非稼動領域は非稼動領域835とする。
次にCMユニットの説明をする。ディスクアレイ装置1は複数のCMユニットを有する。図1ではCM2及びCM3である。以下はCM2について説明するがCM3も同様の構成である。図4にCMの構成図を示す。CM2は、実行部201、主記憶202、記憶手段203、インターフェース部204を有する。実行部201、主記憶202、記憶手段203およびインターフェース部204は、バス205により接続される。CM2の実行部201は、書込判別部、版数判別部、第一の記憶領域のファームウェア版数一致部、第二の記憶領域のファームウェア版数一致部、稼働領域一致部、および、次稼動領域一致部として機能する。CM2の実行部201は、CM2の記憶手段203に格納された書込判別プログラム211、版数判別プログラム222、第一の記憶領域のファームウェア版数一致プログラム233、第二の記憶領域のファームウェア版数一致プログラム244、稼働領域一致プログラム255、および、次稼動領域一致プログラム266をCM2の主記憶202に展開して実行する。
書込判別部は交換の対象のユニット70の記憶手段73の稼働領域734にファームウェアを書き込み不可能であるかどうかを判別する。
版数判別部は、ディスクアレイ装置1内で動作中のユニット80の記憶手段83に格納されるファームウェアの版数および交換の対象のユニット70の記憶手段73に格納されているファームウェアの版数を検出する。また、版数判別部は、ディスクアレイ装置1内で動作中のユニット80の記憶手段83の稼動領域834を識別する番号および交換の対象のユニット70の記憶手段73の稼動領域734を識別する番号を検出する。また、版数判別部は、ディスクアレイ装置1内で動作中のユニット80の記憶手段83の次稼動領域を識別する番号および交換の対象のユニット70の記憶手段73の次稼動領域を識別する番号を検出する。
稼働領域一致部は、版数判別部におけるディスクアレイ装置1内で動作中のユニット80の記憶手段83の稼働領域834の識別番号と交換の対象のユニット70の記憶手段73の稼働領域734の識別番号とが不一致であった場合に、交換の対象のユニット70の記憶手段73の稼動領域734に対応する識別番号とディスクアレイ装置1内で動作中のユニット80の記憶手段83の稼動領域834に対応する識別番号とを一致させる。
第一の記憶領域のファームウェア版数一致部は、ディスクアレイ装置1内で動作中のユニット80の記憶手段83の第一の記憶領域831に格納されるファームウェアの版数と交換の対象のユニット70の記憶手段73の第一の記憶領域731に格納されるファームウェアの版数とを一致させる。
第二の記憶領域のファームウェア版数一致部は、ディスクアレイ装置1内で動作中のユニット80の記憶手段83の第二の記憶領域832に格納されるファームウェアの版数と交換の対象のユニット70の記憶手段73の第二の記憶領域732に格納されるファームウェアの版数とを一致させる。
次稼動領域一致部は、ディスクアレイ装置1内で動作中のユニット80が再起動した後に主記憶82に展開するファームウェアが記憶された記憶手段83の稼動領域834に対応する識別番号と交換の対象のユニット70が再起動した後に主記憶72に展開するファームウェアが記憶された記憶手段73の稼動領域734に対応する識別番号とを一致させる。
CM2の記憶手段203はファームウェア制御テーブル27が記憶される。ファームウェア制御テーブル27はCM2がディスクアレイ装置1内の各ユニットの記憶手段に格納されたファームウェアを管理する情報を記憶する。次にファームウェア制御テーブル27について説明する。
図5は、CMが有するファームウェア制御テーブル27の構成である。なお、図5のファームウェア制御テーブル27は本発明の特徴に関連した部分の項目のみの構成であり、従来のファームウェアの制御に関する部分は省略する。ファームウェア制御テーブルには、ディスクアレイ装置1内で動作するユニット80の状態、交換の対象のユニット70の状態、交換の対象のユニットに対する処理条件の設定値が格納される。ファームウェア制御テーブル27は、動作ユニット領域1ファームウェア版数2701、動作ユニット領域2ファームウェア版数2702、動作ユニット稼働領域識別番号2703、動作ユニット次稼働領域識別番号2704、交換ユニット領域1ファームウェア版数2705、動作ユニット領域2ファームウェア版数2706、交換ユニット稼働領域識別番号2707、交換ユニット次稼働領域識別番号2708を有する。
動作ユニット領域1ファームウェア版数2701は、ディスクアレイ装置1内で動作するユニット80の記憶手段83の第一の記憶領域831に格納されたファームウェアの版数の情報である。動作ユニット領域2ファームウェア版数2702は、ディスクアレイ装置1内で動作するユニット80の記憶手段83の第二の記憶領域832に格納されたファームウェアの版数の情報である。動作ユニット稼働領域識別番号2703は、ディスクアレイ装置1内で動作するユニット80の記憶手段83の稼動領域834に対応する記憶領域を識別する番号である。動作ユニット次稼働領域識別番号2704は、ディスクアレイ装置1内で動作するユニット80がリブートした後に稼動領域とする記憶領域を識別する番号である。
交換ユニット領域1ファームウェア版数2705は、交換の対象のユニット70の記憶手段73の第一の記憶領域731に格納されたファームウェアの版数の情報である。動作ユニット領域2ファームウェア版数2706は、交換の対象のユニット70の記憶手段73の第二の記憶領域732に格納されたファームウェアの版数の情報である。交換ユニット稼働領域識別番号2707は、交換の対象のユニット70の記憶手段73の稼動領域734に対応する記憶領域を識別する番号である。交換ユニット次稼働領域識別番号2708は、交換の対象のユニット70がリブートした後に稼動領域とする記憶領域を識別する番号である。
本実施例は動作ユニット領域1ファームウェア版数2701、動作ユニット領域2ファームウェア版数2702、動作ユニット稼働領域識別番号2703、動作ユニット次稼働領域識別番号2704を元に、ディスクアレイ装置1内で動作中のすべてのユニットの記憶手段の各記憶領域に格納されたファームウェアの版数、および、記憶手段の稼働領域、および、ユニットがリブートした後の稼働領域を一致させる。
なお、ディスクアレイ装置1内で動作中のユニットの種類を基準としてユニットの記憶手段の各記憶領域に格納されたファームウェアの版数、および、記憶手段の稼働領域、および、ユニットがリブートした後の稼働領域を一致させるためには、以下の構成とする。ユニットの種類毎に動作ユニット領域1ファームウェア版数2701、動作ユニット領域2ファームウェア版数2702、動作ユニット稼働領域識別番号2703、動作ユニット稼働領域識別番号2704を設ける。
モードパラメタ2709は、リブートBIT、稼働領域変更BITおよびファームウェアダウンロードBITを有する。リブートBITは、交換の対象のユニット70をリブートするか否かを判定するビットである。稼働領域変更BITは、ユニット70の記憶手段73の稼動領域734を変更するか否かを判定するビットである。ファームウェアダウンロードBITは、ユニット70の記憶手段73の第一の記憶領域731あるいは第二の記憶領域732にファームウェアをダウンロードするか否かを判定するビットである。モードパラメタ2709は、図8に示す「稼働領域にファームウェアを書き込み可能なユニットの場合のファームウェアの版数のチェック」のフローチャート、及び図7に示す「稼働領域にファームウェアを書き込み不可能なユニットの場合のファームウェアの版数のチェック」のフローチャートで示される処理においてCM2の実行部201が設定する。設定されたモードパラメタ2709は、図6に示す「ユニットのファームウェアの版数の一致」のフローチャートで示される処理中でCM2の実行部201が処理の判断に使用する。
ダウンロード先指定パラメタ2710は、交換の対象のユニット70の記憶手段73のファームウェアをダウンロードする先の記憶領域を識別する番号を記憶する。版数指定パラメタ2711は、交換の対象のユニット70の記憶手段73の記憶領域にダウンロードするファームウェアの版数を記憶する。稼働領域変更指定パラメタ2712は、交換の対象のユニット70がリブートした後に稼働領域734となる記憶領域を識別する番号が設定される。
図6は、本発明に係るディスクアレイ装置1に新たにユニットを組み込むときの処理のフローチャートである。なお、ディスクアレイ装置1全体は、新たなユニットを組み込む間も継続して動作する。新たなユニットを組み込むときディスクアレイ装置1のCM2は以下の3つの状態を装置で稼動するユニットと一致させる。一つ目の状態は、交換の対象のユニット70の記憶手段73の第一の記憶領域731及び第二の記憶領域732のファームウェアの版数をディスクアレイ装置1内で動作するユニット80の記憶手段83の第一の記憶領域831及び第二の記憶領域832に格納されたファームウェアの版数に一致させる。二つ目は、交換の対象のユニット70の記憶手段73の稼動領域734をディスクアレイ装置1内で動作するユニット80の記憶手段83の稼動領域834に一致させる。三つ目は、交換の対象のユニット70が再起動した後に稼動する記憶手段73の稼動領域734をディスクアレイ装置1内で動作するユニット80が再起動した後に稼動する記憶手段83の稼動領域834に一致させる。
CM2の実行部201は、CM2の記憶手段203に格納された書込判別プログラム211、版数判別プログラム222、第一の記憶領域のファームウェア版数一致プログラム233、第二の記憶領域のファームウェア版数一致プログラム244、稼働領域一致プログラム255、および、次稼動領域一致プログラム266をCM2の主記憶202に展開して実行する。CM2は交換の対象のユニット70をディスクアレイ装置1が認識したときに、交換の対象のユニット70の状態とディスクアレイ装置1内で動作するユニット80の状態とを一致させるために、書込判別部、版数判別部、第一の記憶領域のファームウェア版数一致部、第二の記憶領域のファームウェア版数一致部、稼働領域一致部、および、次稼動領域一致部として機能する。
まず、CM2の実行部201は交換の対象のユニット70を確認する(S301)。具体的には、CM2の実行部201は交換の対象のユニット70の記憶手段73の第三の記憶領域からユニット70の種類情報、ユニット70の記憶手段73の稼働領域734に該当する記憶領域を識別する番号、ユニット70がリブートした後に稼動領域となる記憶手段73の記憶領域を識別する番号、ユニット70の記憶手段73の第一の記憶領域731に格納されたファームウェアの版数、ユニット70の記憶手段73の第二の記憶領域732に格納されたファームウェアの版数、ユニット70のシリアルナンバ、ユニット70のOS情報、ユニット70のファイルシステム情報を取得する。CM2の実行部201は取得した情報をCM2のファームウェア制御テーブル27に登録する。
次に、CM2の実行部201は交換の対象のユニット70から取得したOS情報とファイルシステム情報とから、交換の対象のユニット70は記憶手段73の稼動領域734にファームウェアをダウンロードすることが可能か否かを判定する(S302)。例えば、S302の判定は、CM2が稼動領域に直接ファームウェアをダウンロード可能か否かの情報とOS情報とを予め関連付けた情報、および、稼動領域に直接ファームウェアをダウンロード可能か否かの情報とファイルシステム情報とを関連付けた情報を予め記憶手段203に記憶しておくことにより可能である。
なお、S302の判定は、交換の対象のユニット70の種別のみによりユニット70の記憶手段73の稼動領域734にファームウェアをダウンロードすることができるユニットか否かを判断することが可能な場合は、交換の対象のユニット70の種別の情報と稼動領域に直接ファームウェアをダウンロード可能か否かの情報とを関連付けた情報を基準とすることも可能である
また、交換の対象のユニット70の種別、版数情報及びシリアルナンバなどの組合せにより交換の対象のユニット70の記憶手段73の稼動領域734にファームウェアをダウンロードすることができるユニットか否かを判断することが可能な場合には、交換の対象のユニット70の種別、版数情報及びシリアルナンバなどの組合せにより判定することも可能である。
書込判別部は、交換の対象のユニット70のOS情報及びファイルシステム情報から交換の対象のユニット70の稼動領域にファームウェアが書き込み可能であるかどうかを判別する。したがって、仮にあらかじめ登録したOS情報及びファイルシステム情報の範囲内であれば記憶手段の稼動領域に書き込み可能なユニットが開発途中でユニット仕様が変わり、ユニットが記憶手段の稼動領域に書き込み不可能になったとしても、ファームウェアダウンロード制御プログラム側に影響がない。
交換の対象のユニット70が記憶手段73の稼動領域734にファームウェアをダウンロードすることができる場合は、CM2の実行部201は「稼働領域にファームウェア書き込み可能なユニットの版数チェック」処理(S303)を実行する。S303の処理の詳細は図8に示す。一方、交換の対象のユニット70が記憶手段73の稼動領域734にファームウェアをダウンロードすることができない場合は、CM2の実行部201は「稼働領域にファームウェアの書き込みが不可能なユニットの版数チェック」処理(S304)を実行する。S304の処理の詳細は図7に示す。
CM2の実行部201は、S303あるいはS304により、交換の対象のユニット70のファームウェアの版数のチェックが完了するとCM2のファームウェア制御テーブル27を参照する。CM2の実行部201はファームウェア制御テーブル27のモードパラメタ2709のファームウェアダウンロードBITがONになっているかどうかを判定する(S305)。
ファームウェアダウンロードBITがONの場合(S305:Yes)には、CM2の実行部201は版数指定パラメタ2711によって特定される交換の対象のユニット70の記憶手段73の記憶領域に対してダウンロード先指定パラメタ2710によって特定されるファームウェアのダウンロードを行う(S306)。
次にCM2の実行部201はモードパラメタ2709の稼働領域変更BITがONになっているかどうかを判定する(S307)。稼働領域変更BITがONの場合(S307:Yes)には、実行部201は交換の対象のユニット70の記憶手段73の稼働領域変更指定パラメタ2712に合致する識別番号に対応する記憶領域を稼動領域734に変更する(S308)。具体的には、CM2の実行部201は、設定情報を交換の対象のユニット70に送信する。ユニット70の実行部71は受け取った設定情報を第三の記憶領域733に記憶する。
次にCM2の実行部201はモードパラメタ2709のリブートBITがONになっているかどうかを判定する(S309)。リブートBITがONの場合(S309:Yes)は、実行部201は交換の対象のユニット70に対してリブート指示を発信する(S310)。リブートBITがOFFの場合(S309:No)は、実行部201は処理を終了する。したがって、CM2の実行部201は、モードパラメタ2709のリブートBITがONの場合、交換の対象のユニット70がリブートした後にS301からS309までの処理を再度実行する。CM2の実行部201は、モードパラメタ2709のリブートBITがONにならなくなるまで実行することとなる。
なお、交換の対象のユニット70が記憶手段73の稼動領域734にファームウェアをダウンロードすることができる場合は、最大で1回のリブートによりディスクアレイ装置1内で動作中のユニット80と交換の対象のユニット70との間で記憶手段の各記憶領域に格納されたファームウェアの版数および記憶手段の稼動領域を一致させることが可能である。また、交換の対象のユニット70が記憶手段73の稼動領域734にファームウェアをダウンロードすることができない場合は、最大で2回のリブートによりディスクアレイ装置1内で動作中のユニット80と交換の対象のユニット70との間で記憶手段の各記憶領域に格納されたファームウェアの版数および記憶手段の稼動領域を一致させることが可能である。
したがって、図6のフローチャートが実施される場合にリブートが最大の回数を超えたにもかかわらずモードパラメタ2709のリブートBITがONである場合は、交換の対象のユニット70が想定通りにファームウェアの版数および記憶手段の面をディスクアレイ装置1内で動作中のユニット80と一致させることができていない可能性がある。したがって、対象となる交換の対象のユニット70を異常とみなして検出することも可能である。
図7は、交換の対象のユニット70の記憶手段73の稼動領域734にファームウェアをダウンロードすることができない場合のファームウェアの版数をチェックする処理のフローチャートである。図7のフローチャートの各表記を説明する。「70」は装置に取付けるユニットを示す。「80」は装置で稼動するユニットを示す。「稼動領域734」は装置に取付けるユニットの稼動するファームウェアが格納された領域を示す。「稼動領域834」は装置内で稼動するユニットの稼動するファームウェアが格納された領域を示す。「稼動版数70」は、稼動領域734に格納されたファームウェアの版数を示す。「稼動版数80」は稼動領域834に格納されたファームウェアの版数を示す。「非稼動版数70」は、装置に取付けるユニットの記憶領域の内、稼動領域ではない領域に格納されたファームウェアの版数を示す。「非稼動版数80」は、装置内で稼動するユニットの記憶領域の内、稼動領域ではない領域に格納されたファームウェアの版数を示す。「次稼動領域70」はユニット70が再起動した後に稼動するファームウェアが格納された領域を示す。「次稼動領域80」はユニット80が再起動した後に稼動するファームウェアが格納された領域を示す。
CM2の実行部201はファームウェア制御テーブル27に登録した動作ユニット稼働領域識別番号2703と交換ユニット稼働領域識別番号2707とを比較する(S401)。S401で比較した番号が一致している場合は、実行部はS407の処理を実行する。
CM2の実行部201は、ファームウェア制御テーブル27のモードパラメタ2709のリブートBITをONにする(S402)。現在、交換の対象のユニット70の稼動領域734に対応する識別番号とディスクアレイ装置1内で動作中のユニット80の稼動領域834に対応する識別番号とが異なるため、ユニット70をリブートさせる処理が必要だからである。
次にCM2の実行部201は動作ユニット稼働領域識別番号2703と交換ユニット次稼働領域識別番号2708とが一致しているか判定する(S403)。S403で比較する番号が不一致であると判断した場合(S403:Yes)、CM2の実行部201はファームウェア制御テーブル27の稼働領域変更指定パラメタ2712にディスクアレイ装置1内で動作中のユニット80の稼動領域834に対応する識別番号を設定する(S404)。現在、交換の対象のユニット70の稼動領域734に対応する識別番号とディスクアレイ装置1内で動作中のユニット80の稼動領域834に対応する識別番号が異なるためである。また、CM2の実行部201はモードパラメタ2709の稼働領域変更BITをONにする(S404)。交換の対象のユニット70の稼動領域734に対応する記憶領域を変更させるためである。
次にCM2の実行部201は、交換の対象のユニット70の記憶手段73の非稼働領域735に格納されたファームウェアの版数とディスクアレイ装置1内で動作中のユニット80の稼動領域834に格納されたファームウェアの版数とが一致しているかどうかを判定する(S405)。
具体的には、交換の対象のユニット70の非稼働領域735のファームウェアの版数は、交換ユニット稼働領域識別番号2707が「1」である場合は、交換の対象のユニット70の記憶手段73の第二の記憶領域732に格納されたファームウェアの版数である。
また、交換の対象のユニット70の非稼働領域735のファームウェアの版数は、交換ユニット稼働領域識別番号2707が「2」である場合は、交換の対象のユニット70の記憶手段73の第一の記憶領域731に格納されたファームウェアの版数が交換の対象のユニット70の非稼働領域735のファームウェアの版数である。また、動作ユニット稼働領域識別番号2703が「1」である場合は、ディスクアレイ装置1内で動作中のユニット80の非稼働領域835のファームウェアの版数は、ディスクアレイ装置1内で動作するユニット80の記憶手段83の第二の記憶領域832に格納されたファームウェアの版数である。また、動作ユニット稼働領域識別番号が「2」である場合は、ディスクアレイ装置1内で動作中のユニット80の非稼働領域835のファームウェアの版数は、ディスクアレイ装置1内で動作するユニット80の記憶手段83の第一の記憶領域831に格納されたファームウェアの版数である。
S405で比較したファームウェアの版数が不一致である場合、CM2の実行部201はファームウェア制御テーブル27のダウンロード先指定パラメタ2710に交換の対象のユニット70の非稼働領域735に対応する識別番号を設定する。さらに、実行部201はディスクアレイ装置1内で動作するユニット80の稼働領域834に対応する識別番号に格納されたファームウェアの版数を版数指定パラメタ2711に設定する。実行部201は、交換の対象のユニット70の非稼動領域735にディスクアレイ装置1内で動作するユニット80の稼動領域834に格納された版数のファームウェアをダウンロードさせるためにモードパラメタ2709のファームウェアダウンロードBITをONに設定する(S406)。
次にS401の判定結果が、交換の対象のユニット70稼働領域734に対応する識別番号とディスクアレイ装置1内で動作するユニット80の稼働領域834に対応する識別番号とが一致した場合の処理について説明する。
ファームウェア制御テーブル27の動作ユニット稼働領域識別番号2703と交換ユニット稼働領域識別番号2707とが一致する場合(S401:No)、CM2の実行部201は交換の対象のユニット70の稼働領域734に格納されたファームウェアの版数とディスクアレイ装置1内で動作するユニット80の稼働領域834に格納されたファームウェアの版数とを比較する(S407)。ユニット70の稼動領域734およびユニット80の稼動領域834のファームウェアの版数が一致する場合にはユニット70をリブートさせることなく、交換の対象のユニット70の状態とディスクアレイ装置1内で動作するユニット80の状態とを合致させることができるためである。状態とはユニット70の記憶手段73の第一の記憶領域731および第二の記憶領域732に格納されたファームウェアの版数、ユニット70の記憶手段73の稼動領域734、および、ユニット70がリブート後に展開する記憶領域を識別する番号である。
S407で比較する版数が不一致である場合(S407:Yes)には、CM2の実行部201はファームウェア制御テーブル27内のモードパラメタ2709のリブートBITをONにする(S408)。以降の設定後にユニット70をリブートすることを必要とするためである。すなわち、ユニット70はリブート処理を行い、リブート前のユニット70の稼動領域734をリブート後に非稼動領域735として、非稼動領域735にディスクアレイ装置1で動作中のユニット80の稼動領域834のファームウェアを書き込む必要があるからである。
次にCM2の実行部201は交換の対象のユニット70がリブート後に稼動領域734とする識別番号とディスクアレイ装置1内で動作中のユニット80の記憶手段83の稼働領域834に対応する識別番号とが一致しているか判定する。実行部201はファームウェア制御テーブル27の交換ユニット次稼働領域識別番号2708と動作ユニット稼働領域識別番号2703とが一致しているかを判定する(S409)。
S409で比較した番号が一致していれば、CM2の実行部201はファームウェア制御テーブル27の稼働領域変更指定パラメタ2712にディスクアレイ装置1内で動作するユニット80の記憶手段83の非稼動領域835に対応する識別番号を設定する。実行部201はモードパラメタ2709の稼働領域変更BITをONに設定する(S410)。
次にCM2の実行部201は交換の対象のユニット70の非稼働領域735に格納されたファームウェアの版数とディスクアレイ装置1内で動作中のユニット80の稼働領域834に格納されたファームウェアの版数が一致しているかどうかを判定する(S411)。実行部201は、交換ユニット稼働領域識別番号2707ではない識別番号に対応する交換ユニット領域1ファームウェア版数2705あるいは交換ユニット領域2ファームウェア版数2706から交換の対象のユニット70の非稼動領域735のファームウェアの版数を特定する。また、実行部201は、動作ユニット稼働領域識別番号2703に対応する動作ユニット領域1ファームウェア版数2701あるいは動作ユニット領域2ファームウェア版数2702からディスクアレイ装置1内で動作中のユニット80の稼動領域834のファームウェアの版数を特定する。
CM2の実行部201は、S411で比較する版数が不一致の場合には、ファームウェア制御テーブル27のダウンロード先指定パラメタ2710に交換の対象のユニット70の非稼働領域735に対応する識別番号を設定する。実行部201は版数指定パラメタ2711にディスクアレイ装置1内で動作するユニット80の稼働領域834に格納されたファームウェアの版数を設定する。実行部201はモードパラメタ2709のファームウェアダウンロードBITをONに設定する(S412)。
次にS407で比較する版数が一致している場合の処理を説明する。S407で比較する版数が一致する場合(S407:No)は、CM2の実行部201は交換の対象のユニット70の非稼働領域735のファームウェアの版数とディスクアレイ装置1内で動作中のユニット80の非稼働領域835のファームウェアの版数が一致しているかどうかを判定する(S413)。CM2の実行部201は、S413で比較した版数が一致していれば、S415を実行する。CM2の実行部201は、S413で比較した版数が不一致の場合には、ファームウェア制御テーブル27のダウンロード先指定パラメタ2710に交換の対象のユニット70の非稼働領域735に対応する識別番号を設定する。非稼働領域735に対応する識別番号はファームウェア制御テーブル27の交換ユニット稼働領域識別番号2707とは異なる値となる。実行部201は、ファームウェア制御テーブル27の版数指定パラメタ2711にディスクアレイ装置1内で動作するユニット80の非稼働領域835に格納されたファームウェアの版数を設定する。実行部201は、モードパラメタ2709のファームウェアダウンロードBITをONに設定する(S414)。
次に実行部201は交換の対象のユニット70がリブート後に稼動領域734とする記憶領域の識別番号とディスクアレイ装置1内で動作するユニット80がリブート後に稼動領域834とする記憶領域の識別番号とが一致しているか判定する(S415)。具体的には、実行部201は動作ユニット次稼働領域識別番号2704と交換ユニット次稼働領域識別番号2708とが一致するかを判定する。実行部201は、S415で比較する番号が一致していれば、処理を終了する。実行部201は、S415で比較する番号が不一致の場合には、ファームウェア制御テーブル27の稼働領域変更指定パラメタ2712に動作ユニット次稼働領域識別番号を設定する。また実行部201は、モードパラメタ2709の稼働領域変更BITをONに設定する(S416)。図8は、ユニットの記憶手段の稼動領域にファームウェアをダウンロードすることができるユニットである場合のファームウェアの版数をチェックする処理のフローチャートである。図8のフローチャートの各表記を説明する。「70」は装置に取付けるユニットを示す。「80」は装置で稼動するユニットを示す。「稼動領域734」は装置に取付けるユニットの稼動するファームウェアが格納された領域を示す。「稼動領域834」は装置内で稼動するユニットの稼動するファームウェアが格納された領域を示す。「稼動版数70」は、稼動領域734に格納されたファームウェアの版数を示す。「稼動版数80」は稼動領域834に格納されたファームウェアの版数を示す。「非稼動版数70」は、装置に取付けるユニットの記憶領域の内、稼動領域ではない領域に格納されたファームウェアの版数を示す。「非稼動版数80」は、装置内で稼動するユニットの記憶領域の内、稼動領域ではない領域に格納されたファームウェアの版数を示す。「次稼動領域70」はユニット70が再起動した後に稼動するファームウェアが格納された領域を示す。「次稼動領域80」はユニット80が再起動した後に稼動するファームウェアが格納された領域を示す。
CM2の実行部201は、交換の対象のユニット70の稼働領域734に対応する識別番号とディスクアレイ装置1内で動作するユニット80の稼働領域834に対応する識別番号とを比較する(S501)。実行部201は、S501で比較した番号が一致している場合は、S507の処理を実行する。
一方、実行部201は、S501で比較した番号が不一致の場合には、S502以降の処理を実行する。まず実行部201は、ファームウェア制御テーブル27内のモードパラメタ2709のリブートBITをONに設定する(S502)。次に実行部201は、交換ユニット次稼働領域識別番号2708と動作ユニット稼働領域識別番号2703とが一致しているか判定する(S503)。S503で比較した番号が一致していれば、実行部はS505の処理を実行する。一方、S503で比較した番号が不一致の場合には、実行部201はファームウェア制御テーブル27の稼働領域変更指定パラメタ2712に動作ユニット稼働領域識別番号2703を設定する。実行部は、モードパラメタ2709の稼働領域変更BITをONに設定する(S504)。
次に、CM2の実行部201は交換の対象のユニット70の非稼働領域735に格納されたファームウェアの版数とディスクアレイ装置1内で動作中のユニット80の稼働領域834に格納されたファームウェアの版数とが一致しているか判定する(S505)。実行部201は、交換ユニット稼働領域識別番号2707ではない識別番号に対応する非稼動領域735のファームウェアの版数を交換ユニット領域1ファームウェア版数2705あるいは交換ユニット領域2ファームウェア版数2706から抽出する。また、実行部201は動作ユニット稼働領域識別番号2703に対応するディスクアレイ装置1内で動作するユニット80の稼動領域834のファームウェアの版数を動作ユニット領域1ファームウェア版数2701あるいは動作ユニット領域2ファームウェア版数2702から抽出する。
CM2の実行部201は、S505で比較した版数が一致していれば処理を終了する。一方、S505で比較した版数が不一致の場合、実行部201はファームウェア制御テーブル27のダウンロード先指定パラメタ2710に交換の対象のユニット70の非稼働領域735に対応する識別番号を設定する。また、実行部201は、版数指定パラメタ2711に動作ユニット稼働領域識別番号2703に対応する稼動領域734のファームウェアの版数を設定する。また、実行部201は、モードパラメタ2709のファームウェアダウンロードBITをONに設定する(S506)。その後、処理を終了する。
S501の判定結果、実行部201は交換の対象のユニット70の稼働領域734に対応する識別番号とディスクアレイ装置1内で動作中のユニット80の稼働領域834に対応する識別番号とが一致した場合は、実行部201は交換の対象のユニット70の稼働領域734に格納されたファームウェアの版数とディスクアレイ装置1内で動作中のユニット80の稼働領域834に格納されたファームウェアの版数とを判定する(S507)。
実行部201は、S507で比較した版数が一致している場合にはS511の処理を行う。一方、S507で比較した版数が不一致の場合には、実行部201はファームウェア制御テーブル27のダウンロード先指定パラメタ2710に交換の対象のユニット70の稼働領域734に対応する識別番号を設定する。また、実行部201は、動作ユニット稼働領域識別番号2703と動作ユニット領域1ファームウェア版数2701と動作ユニット領域2ファームウェア版数2702とから特定されるディスクアレイ装置1内で動作するユニット80の稼働領域834に格納されたファームウェアの版数を版数指定パラメタ2711に設定する。さらに実行部201は、モードパラメタ2709のファームウェアダウンロードBITおよびリブートBITをONに設定する(S508)。
次に実行部201は交換ユニット次稼働領域識別番号2708とディスクアレイ装置1内で動作中のユニット80の稼働領域834に対応する識別番号とが一致しているか判定する(S509)。
実行部201は、S509で比較した番号が一致していれば処理を終了する。一方、S509で比較した番号が不一致の場合には、実行部201はファームウェア制御テーブル27の稼働領域変更指定パラメタ2712に動作ユニット稼働領域識別番号2703を設定する。実行部201は、モードパラメタ2709の稼働領域変更BITをONに設定する(S510)。その後、処理を終了する。
次に、S507の判定結果、交換の対象のユニット70の稼働領域734に格納されたファームウェアの版数とディスクアレイ装置1内で動作中のユニット80の稼働領域834に格納されたファームウェアの版数とが一致する場合を説明する。
CM2の実行部201は交換の対象のユニット70の非稼働領域735に格納されたファームウェアの版数とディスクアレイ装置1内で動作中のユニット80の非稼働領域835に格納されたファームウェアの版数とが一致しているか判定する(S511)。実行部201は、S511で比較した版数が一致していればS513の処理を行う。実行部201は、S511で比較した版数が不一致の場合にはファームウェア制御テーブル27のダウンロード先指定パラメタ2710に交換の対象のユニット70の非稼働領域735に対応する識別番号を設定する。実行部201は、版数指定パラメタ2711にディスクアレイ装置1内で動作中のユニット80の非稼働領域835に格納されたファームウェアの版数を設定する。実行部201は、モードパラメタ2709のファームウェアダウンロードBITをONに設定する(S512)。次に実行部201は交換ユニット次稼働領域識別番号2708が動作ユニット次稼働領域識別番号2704と一致しているか判定する(S513)。実行部201は、S513で比較した番号が一致していれば処理を終了する。一方、実行部201はS513で比較した番号が不一致の場合には、ファームウェア制御テーブル27の稼働領域変更指定パラメタ2712に動作ユニット次稼働領域識別番号2704を設定する。また、実行部201は、モードパラメタ2709の稼働領域変更BITをONに設定する(S514)。その後処理を終了する。
以上の処理により、ディスクアレイ装置1が動作中でのユニットを交換する作業において、稼動領域にファームウェアをダウンロードすることが可能であるユニットと稼動領域にファームウェアをダウンロードすることが不可能であるユニットとがディスクアレイ装置1内に混在する場合でも、交換の対象のユニット70とディスクアレイ装置1内で動作するユニット80の各記憶領域に格納されたファームウェアの版数を一致させることが可能となる。また、ディスクアレイ装置1内で動作するユニット80の記憶手段83の稼動領域834に対応する識別番号が一致し、交換の対象のユニット70がリブート後に稼動領域734とする記憶領域も一致する。一般にユニットは新しい版数のファームウェアを稼動領域に格納し、旧い版数のファームウェアを非稼動領域に格納する。したがって、例えば障害が発生したときなどにディスクアレイ装置1全体のファームウェアの版数を容易に切り替えることが可能となる。
なお、本実施例では、ディスクアレイ装置1内のユニットを同時に複数交換する構成ではない。同時に複数のユニットを交換することを可能にするためには以下の構成とする。ファームウェア制御テーブル27の動作ユニット領域1ファームウェア版数2701、動作ユニット領域2ファームウェア版数2702、動作ユニット稼働領域識別番号2703、動作ユニット次稼働領域識別番号2704、交換ユニット領域1ファームウェア版数2705、交換ユニット領域2ファームウェア版数2706、交換ユニット稼働領域識別番号2707、交換ユニット次稼働領域識別番号2708、モードパラメタ2709、ダウンロード先指定パラメタ2710、版数指定パラメタ2711、および稼働領域変更指定パラメタ2712のユニットに固有の情報を、ユニット毎に用意する。CM2の実行部201がファームウェア制御テーブル27を参照する際に、現在の処理の対象である交換の対象のユニット70から取得した固有の情報の部分を参照する。以上の構成により同時に複数のユニットを交換することが可能となる。
本発明のユニットの記憶手段は複数のファームウェアを格納する領域を有する。ユニットの記憶手段の稼動領域に書き込み可能なユニットとユニットの記憶手段の稼動領域に書き込み不可能なユニットがあった場合で、かつ、ディスクアレイ装置内で稼動中のユニットのファームウェアの版数と交換の対象のユニットのファームウェアの版数とが不一致であった場合、CMは記憶手段の非稼動側領域にディスクアレイ装置内で稼動中のユニットのファームウェアの版数が同じファームウェアを書き込む。その後、CMが交換の対象のユニットの稼動側領域と非稼動側領域とを切り替えて、非稼動側に格納されたファームウェアを稼動側領域のファームウェアとすることにより、装置で稼動するユニットの稼動領域に格納されたファームウェアの版数と交換の対象のユニットの稼動領域に格納されたファームウェアの版数とを一致させる方法が考えられる。しかしながら、従来技術は、記憶手段の稼動領域の識別番号を揃えることについて考慮しない。ディスクアレイ装置は100個以上ユニットを搭載する場合がある。ディスクアレイ装置の開発時にディスクアレイ装置の全ユニットにファームウェアをダウンロードし、ディスクアレイ装置を再起動した後に、ユニットが本当に正常に立ち上がってきたかどうかを判断する際に、ユニットが再起動する前に記憶手段のいずれの領域で処理を実行していたのかをユニット毎に比較して判断する必要がある。ユニットが再起動する前に記憶手段のいずれの領域で処理を実行していたのかが不明である。実際に記憶手段のいずれの領域で処理を実行していたのかを比較する場合は多大な労力を必要とする。本発明は稼動領域を揃える構成を有しているためデバッグの作業効率が向上する。
また、従来技術では、交換の対象のユニットの記憶手段にファームウェアをダウンロードした後にユニットの再起動をした場合、ダウンロードしたファームウェアに応じた処理をユニットが実行するとディスクアレイ装置が動作しない場合がある。例えば、ディスクアレイ装置の開発時のファームウェアの場合、ユニットのファームウェアであってもディスクアレイ装置全体が起動しない不具合を持つ場合がある。したがって、ディスクアレイ装置を復旧させるために各ユニットの記憶手段の稼動領域を装置リブート前状態に戻す作業が発生し、多大な労力を必要とする。本発明では、再起動後に稼動する記憶手段の領域も一致させる構成を有する。したがって、装置を再起動した後であっても、各ユニットを再起動前の状態に戻すことが容易である。
また、ディスクアレイ装置が運用中のときに不具合が発生すると、不具合の原因を調査する必要がある。ディスクアレイ装置で不具合が発生した状況を再現するためには、不具合が発生した時のディスクアレイ装置の状態にあわせる必要がある。したがって、ディスクアレイ装置の各ユニットの記憶手段の稼動領域も一致させる必要がある。ディスクアレイ装置で不具合が発生した状況を人間が解析するには多大な労力と時間がかかる。本発明は、稼動領域に記憶された各ファームウェアの版数、稼動するファームウェア、および、再起動後に実行するファームウェアを一致させることができる。また、各ユニットの稼動領域も一致して動作する。したがって、デバッグ時の状態を再現する作業数を減少させることが可能となる。
(付記1)
複数のファームウェアを格納したユニットを複数使用するディスクアレイ装置の制御方法であって、該ディスクアレイ装置の同一の機能を実行する複数のユニットの複数のファームウェアの版数を統一し、該複数のユニットで実行するファームウェアを統一することを特徴とするディスクアレイ装置の制御方法。
(付記2)
該ディスクアレイ装置の同一の機能を実行する複数のユニットの複数のファームウェアの版数の情報を取得し、該取得したファームウェアの版数の情報が異なる場合に該複数のユニットに同一の版数のファームウェアを送信し、該ディスクアレイ装置の同一の機能を実行する複数のユニットの実行するファームウェアの情報を取得し、該実行するファームウェアの情報が異なる場合に同一のファームウェアを実行させる情報を該複数のユニットに送信することを特徴とする付記1に記載のディスクアレイ装置の制御方法。
(付記3)
該複数のユニットは記憶手段を有し、該複数のユニットの記憶手段の複数のファームウェアを格納する領域を統一することを特徴とする付記1に記載のディスクアレイ装置の制御方法。
(付記4)
該ディスクアレイ装置が新たにユニットを認識した場合に、該ディスクアレイ装置の該新たに認識したユニットと同一の機能を実行するユニット間の複数のファームウェアの版数を統一し、該新たに認識されたユニットで実行するファームウェアと該同一の機能を実行するユニット間で実行するファームウェアを統一することを特徴とする付記1に記載のディスクアレイ装置の制御方法。
(付記5)
該ディスクアレイ装置が新たにユニットを認識すると該ディスクアレイ装置の同一の機能を実行する複数のユニットの複数のファームウェアの版数に統一し、該新たに認識されたユニットで実行するファームウェアを該ディスクアレイ装置の同一の機能を実行する複数のユニットで実行するファームウェアに統一することを特徴とする付記4に記載のディスクアレイ装置の制御方法。
(付記6)
該新たに認識したユニットが実行中のファームウェアが記憶された記憶領域にダウンロードできないユニットの場合、該新たに認識したユニットの記憶領域の実行中ではないファームウェアが記憶された領域と該ディスクアレイ装置の同一の機能を実行するユニットが実行する版数のファームウェアとを統一し、該新たに認識したユニットが該変更後の該ディスクアレイ装置の同一の機能を実行するユニットが実行する版数のファームウェアにより再起動した後で、該新たに認識したユニットの記憶領域の実行中ではないファームウェアが記憶された領域と該ディスクアレイ装置の同一の機能を実行するユニットが実行する版数のファームウェアとを統一することを特徴とする付記1に記載のディスクアレイ装置の制御方法。
(付記7)
該ディスクアレイ装置の同一の機能を実行する複数のユニットが再起動したときに実行するファームウェアを統一することを特徴とする付記1に記載のディスクアレイ装置の制御方法。
(付記8)
複数のファームウェアを格納したユニットを複数使用するディスクアレイ装置であって該ディスクアレイ装置の同一の機能を実行する複数のユニットの複数のファームウェアの版数を統一する統一手段と、該複数のユニットで実行するファームウェアを統一する第二の統一手段とを有することを特徴とするディスクアレイ装置。
(付記9)
複数のファームウェアを格納したユニットを複数使用するディスクアレイ装置のコンピュータの制御プログラムであって、該コンピュータを、該ディスクアレイ装置の同一の機能を実行する複数のユニットの複数のファームウェアの版数を統一する統一手段、該複数のユニットで実行するファームウェアを統一する第二の統一手段として機能させることを特徴とするディスクアレイ装置の制御プログラム。