(57)【要約】【課題】ファームウェア更新を高速化すること。【解決手段】記憶部１１は、ストレージ装置２０内の冗長化された２つのモジュール２１，２２の制御に用いられるファームウェアの異なる版同士の互換性の情報１１ａを記憶する。演算部１２は、モジュール２１，２２のファームウェアを第１の版から第１の版と互換性のない第２の版へ更新する際に、情報１１ａを参照して、第１の版から第２の版までの版のうち、相手のモジュールに現在適用されている版のファームウェアと互換性があり、かつ、相手のモジュールに現在適用されている版よりも新しい版のファームウェアを片方のモジュールずつ交互に適用する。【選択図】図１
2015225508.tif 000002
【特許請求の範囲】
【請求項１】
ストレージ装置内の冗長化された２つのモジュールの制御に用いられるファームウェアの異なる版同士の互換性の情報を記憶する記憶部と、
両方のモジュールのファームウェアを第１の版から前記第１の版と互換性のない第２の版へ更新する際に、前記情報を参照して、前記第１の版から前記第２の版までの版のうち、相手のモジュールに現在適用されている版のファームウェアと互換性があり、かつ、前記相手のモジュールに現在適用されている版よりも新しい版のファームウェアを片方のモジュールずつ交互に適用する演算部と、
を有するファームウェア更新装置。
【請求項２】
前記演算部は、前記第１の版から前記第２の版までの版のうち、前記相手のモジュールに現在適用されている版のファームウェアと互換性があり、かつ、前記相手のモジュールに現在適用されている版よりも新しい複数の版のうち、最新の版を選択する、請求項１記載のファームウェア更新装置。
【請求項３】
各版のファームウェアは、複数のプログラムの組合せであり、また、プログラム単位の更新に応じて版が付与されるものであり、
前記演算部は、適用対象の版のファームウェアのうち未取得の版のファームウェアを他の装置から取得する際に、取得済の版のファームウェアに含まれるプログラムに応じて、未取得の版のファームウェアに含まれるプログラムのうち、取得対象とするプログラムを絞り込む、
請求項１または２記載のファームウェア更新装置。
【請求項４】
前記演算部は、前記第２の版のファームウェアを一方のモジュールに適用すると、前記第２の版のファームウェアを他方のモジュールにも適用する、請求項１乃至３の何れか１項に記載のファームウェア更新装置。
【請求項５】
前記情報は、両方のモジュールによるファームウェアの活性交換が可能である場合に互換性ありを示し、前記活性交換が不可能であれば互換性なしを示す、請求項１乃至４の何れか１項に記載のファームウェア更新装置。
【請求項６】
ストレージ装置内の冗長化された２つのモジュールの制御に用いられるファームウェアの異なる版同士の互換性の情報を記憶する記憶部と、
両方のモジュールのファームウェアを第１の版から前記第１の版と互換性のない第２の版へ更新する際に、前記情報を参照して、前記第１の版から前記第２の版までの版のうち、相手のモジュールに現在適用されている版のファームウェアと互換性があり、かつ、前記相手のモジュールに現在適用されている版よりも新しい版のファームウェアを片方のモジュールずつ交互に適用する演算部と、
を有するストレージ制御装置。
【請求項７】
ストレージ装置内の冗長化された２つのモジュールの制御に用いられるファームウェアを第１の版から前記第１の版と互換性のない第２の版へ更新する際に、ファームウェアの異なる版同士の互換性の情報を参照して、前記第１の版から前記第２の版までの版のうち、相手のモジュールに現在適用されている版のファームウェアと互換性があり、かつ、前記相手のモジュールに現在適用されている版よりも新しい版のファームウェアを片方のモジュールずつ交互に適用する、
処理をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はファームウェア更新装置、ストレージ制御装置およびプログラムに関する。
【背景技術】
【０００２】
現在、データの保存にストレージ装置が利用されている。ストレージ装置は、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）などを複数搭載して大容量の記憶領域を利用可能とする。ストレージ装置は、記憶領域に対するアクセス制御や他の装置との通信制御など、ストレージ装置内で所定の機能を担う各種のモジュールを有する。機能毎にモジュールを冗長化することで、機能単位の耐故障性を高めることもある。
【０００３】
ところで、モジュールの動作制御にはファームウェアと呼ばれるソフトウェアが用いられる。ファームウェアは機能拡張や修正のためにバージョンアップされることがある。そこで、装置上で利用するファームウェアをアップデートする方法が考えられている。
【０００４】
例えば、ストレージ装置のコントローラ・モジュールに２個のＣＰＵ（Central Processing Unit）を搭載し、ＣＰＵ単位にファームウェア活性交換を行うことで、交換中のコントローラ・モジュールとホストとの間のパス切れを防止する提案がある。
【０００５】
また、タスク管理、メモリ管理、入出力制御等をそれぞれ実行するための多数のモジュール単位のプログラムデータを組み合わせた制御プログラムに基づいて動作する電子機器において、制御プログラムの更新をモジュール単位に行う提案もある。
【０００６】
なお、旧版数ソフトウェアを新版数ソフトウェアにアップデートする際に、全更新処理、部分更新処理および複写後更新処理と呼ばれる３種類の更新処理それぞれの更新処理時間を比較し、最短のものを選択して更新処理を行う提案もある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００６−３３８２１７号公報
【特許文献２】特開平７−４４３９３号公報
【特許文献３】特開２００７−３３４６３６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ストレージ装置内のモジュールの冗長構成を利用して、ストレージ装置の運用を停止させずに、ファームウェアの更新を行うことが考えられる。具体的には、新版のファームウェアを各モジュールの不揮発性メモリに書き込んだ後に、２重化されているモジュールを片系（冗長化されたモジュールの片方）ずつ順次リブートする。ブート時に、モジュールは、モジュールが備えるＲＡＭ（Random Access Memory）などの揮発性メモリに新版のファームウェアをロードし、新版のファームウェアによる稼働を開始する。このとき、両モジュールが異なる版のファームウェアで稼働しても、両版のファームウェアに互換性があれば、両モジュールは適切に連携して冗長構成を維持できる。
【０００９】
ところが、現在の版から複数版隔てた他の版（最終更新先の版）のファームウェアにアップデートするとき、現版と最終更新先の版とでファームウェアによる機能（例えば、冗長制御の機能など）に互換性がないことがある。最終更新先の版のファームウェアを両モジュールに書き込んだ後に、片系ずつ順次リブートする方法を採ると、一方の系は最終更新先の版のファームウェアで稼働し、他方の系は現版のファームウェアで稼働する期間が生じ得る。両系のファームウェアによる機能に互換性がないと、例えば両系の冗長構成が損なわれ、誤動作や耐故障性の低下を招くおそれがある。一方、両方のモジュールのファームウェアを１世代ずつ順次アップデートしていく方法も考えられる。しかし、この方法ではファームウェアの交換回数が多くなり更新の所要時間が増大し得る。
【００１０】
１つの側面では、本発明は、ファームウェア更新を高速化できるファームウェア更新装置、ストレージ制御装置およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
１つの態様では、ファームウェア更新装置が提供される。ファームウェア更新装置は、記憶部および演算部を有する。記憶部は、ストレージ装置内の冗長化された２つのモジュールの制御に用いられるファームウェアの異なる版同士の互換性の情報を記憶する。演算部は、両方のモジュールのファームウェアを第１の版から第１の版と互換性のない第２の版へ更新する際に、記憶部に記憶された情報を参照して、第１の版から第２の版までの版のうち、相手のモジュールに現在適用されている版のファームウェアと互換性があり、かつ、相手のモジュールに現在適用されている版よりも新しい版のファームウェアを片方のモジュールずつ交互に適用する。
【００１２】
また、１つの態様では、ストレージ制御装置が提供される。ストレージ制御装置は、記憶部および演算部を有する。記憶部は、ストレージ装置内の冗長化された２つのモジュールの制御に用いられるファームウェアの異なる版同士の互換性の情報を記憶する。演算部は、両方のモジュールのファームウェアを第１の版から第１の版と互換性のない第２の版へ更新する際に、記憶部に記憶された情報を参照して、第１の版から第２の版までの版のうち、相手のモジュールに現在適用されている版のファームウェアと互換性があり、かつ、相手のモジュールに現在適用されている版よりも新しい版のファームウェアを片方のモジュールずつ交互に適用する。
【００１３】
また、１つの態様では、コンピュータによって実行されるプログラムが提供される。このプログラムは、ストレージ装置内の冗長化された２つのモジュールの制御に用いられるファームウェアを第１の版から第１の版と互換性のない第２の版へ更新する際に、ファームウェアの異なる版同士の互換性の情報を参照して、第１の版から第２の版までの版のうち、相手のモジュールに現在適用されている版のファームウェアと互換性があり、かつ、相手のモジュールに現在適用されている版よりも新しい版のファームウェアを片方のモジュールずつ交互に適用する、処理をコンピュータに実行させる。
【発明の効果】
【００１４】
１つの側面では、ファームウェア更新を高速化できる。
【図面の簡単な説明】
【００１５】
【図１】第１の実施の形態のファームウェア更新装置を示す図である。
【図２】第２の実施の形態の情報処理システムを示す図である。
【図３】第２の実施の形態のストレージ装置のハードウェア例を示す図である。
【図４】第２の実施の形態の管理サーバのハードウェア例を示す図である。
【図５】第２の実施の形態のストレージ装置のファームウェアの例を示す図である。
【図６】第２の実施の形態の機能例を示す図である。
【図７】第２の実施の形態のＦＷ互換性テーブルの例を示す図である。
【図８】第２の実施の形態の互換性指数テーブルの例を示す図である。
【図９】第２の実施の形態の活性交換可能閾値の例を示す図である。
【図１０】第２の実施の形態の中間ＦＷテーブルの例を示す図である。
【図１１】第２の実施の形態のＦＷ更新例を示すフローチャートである。
【図１２】第２の実施の形態の階段式連続活性交換例を示すフローチャートである。
【図１３】第２の実施の形態のＦＷ更新例（その１）を示す図である。
【図１４】第２の実施の形態のＦＷ更新例（その２）を示す図である。
【図１５】第３の実施の形態の機能例を示す図である。
【図１６】第４の実施の形態の機能例を示す図である。
【発明を実施するための形態】
【００１６】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態のファームウェア更新装置を示す図である。ファームウェア更新装置１０は、ストレージ装置２０のファームウェアの更新を制御する。ファームウェアは、ストレージ装置２０のハードウェアモジュールの制御に用いられるソフトウェアである。ファームウェア更新装置１０は、ストレージ装置２０に外付けされてもよいし、ストレージ装置２０に内蔵されてもよい。ファームウェア更新装置１０は、記憶部１１および演算部１２を有する。
【００１７】
記憶部１１は、ＲＡＭなどの揮発性記憶装置でもよいし、ＨＤＤやフラッシュメモリなどの不揮発性記憶装置でもよい。演算部１２は、ＣＰＵ、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。演算部１２はプログラムを実行するプロセッサであってもよい。ここでいう「プロセッサ」には、複数のプロセッサの集合（マルチプロセッサ）も含まれ得る。
【００１８】
ストレージ装置２０は、モジュール２１，２２および記憶装置群２３，２４を有する。モジュール２１，２２は、所定の機能を実現するハードウェアモジュールである。例えば、モジュール２１，２２はストレージ装置２０全体を制御する制御モジュールでもよい。モジュール２１，２２は、他の装置と通信するための通信モジュールや制御モジュールと記憶装置群２３，２４との接続インタフェースを提供する接続モジュールなどでもよい。
【００１９】
モジュール２１，２２は互いに連携し、冗長構成となっている。例えば、モジュール２１，２２は互いに死活監視の通信を行い、何れか一方が故障しても、故障していないモジュールが、故障したモジュールに対するリクエストを蓄積したり、リクエストに対する処理を代行したりする。冗長制御は、モジュール２１，２２で実行されるファームウェアにより実現される。モジュール２１を第１の系、モジュール２２を第２の系と呼ぶこともできる。
【００２０】
モジュール２１は、ＲＡＭ２１ａ、フラッシュメモリ２１ｂおよびプロセッサ２１ｃを有する。ＲＡＭ２１ａは、プロセッサ２１ｃが実行するファームウェアのプログラムを一時的に記憶する揮発性記憶装置である。フラッシュメモリ２１ｂは、ファームウェアのプログラムを記憶する不揮発性記憶装置である。プロセッサ２１ｃは、ファームウェアのプログラムを実行する。
【００２１】
モジュール２２は、ＲＡＭ２２ａ、フラッシュメモリ２２ｂおよびプロセッサ２２ｃを有する。ＲＡＭ２２ａは、フラッシュメモリ２２ｂおよびプロセッサ２２ｃは、モジュール２１の同名のユニットに対応する。記憶装置群２３，２４は、複数のＨＤＤや複数のＳＳＤなどの集合であり、ユーザデータを記憶するための記憶領域を提供する。通常の運用時、プロセッサ２１ｃ，２２ｃは、同じ版のファームウェアを実行する。両モジュールによる冗長制御などの連携を適切に行えるからである。
【００２２】
ここで、ストレージ装置２０の運用では、現版のファームウェアを新しい版のファームウェアに更新することがある（現版のファームウェアを新しい版のファームウェアに交換するともいえる）。例えば、ファームウェアの更新は次のような手順で行われる。
【００２３】
ファームウェアの更新前において、モジュール２１，２２では、版Ｖ１のファームウェアがＲＡＭ２１ａ，２２ａにロードされており、プロセッサ２１ｃ，２２ｃにより実行されている（版Ｖ１のファームウェアが適用された状態）。この状態で、モジュール２１，２２の版Ｖ１のファームウェアを、冗長制御などの機能において版Ｖ１と互換性がある版Ｖ２のファームウェアに更新することを考える。
【００２４】
この場合、版Ｖ２のファームウェアをフラッシュメモリ２１ｂ，２２ｂに書き込んだ後、版Ｖ２のファームウェアをＲＡＭ２１ａ，２２ａにロードするために、モジュール２１，２２を再起動させることになる。しかし、モジュール２１，２２を同時に再起動させると、再起動中に、記憶装置群２３，２４へのデータアクセスを行えなくなる。このため、ストレージ装置２０は、モジュール２１，２２の何れか一方のモジュールを先に再起動し、その後、他方のモジュールを再起動する。
【００２５】
すると、何れか一方を再起動させた直後に、再起動した方のモジュールは版Ｖ２のファームウェアで動作し、未だ再起動していない方のモジュールは版Ｖ１のファームウェアで動作する期間が発生する。すなわち、再起動した方のモジュールには版Ｖ２のファームウェアが適用され、未だ再起動していない方のモジュールには版Ｖ１のファームウェアが適用された状態が発生する。版Ｖ１，Ｖ２のファームウェアに互換性があれば、当該期間においても、モジュール２１，２２の冗長制御などの連携を適切に行える。その後、もう一方のモジュールを再起動させることで、当該モジュールも版Ｖ２のファームウェアで動作することになる（版Ｖ２のファームウェアが両モジュールに適用されたことになる）。このように、記憶装置群２３，２４に対するデータアクセスを停止させずに、ファームウェアの更新を行うことを、ファームウェアの活性交換と呼ぶことがある。
【００２６】
通常、版の差が１世代であれば、ファームウェアの互換性は保たれる。最低限１世代の版差で互換性が保たれていなければ、ファームウェアの活性交換を行えないからである。ただし、ファームウェアのバージョンアップが複数世代を跨いで行われることもある（すなわち、２世代以上離れたファームウェアに更新することもある）。複数世代を跨ぐとき、更新元の版と更新先の版との互換性がないこともある。そこで、ファームウェア更新装置１０は、ストレージ装置２０のファームウェア更新を次のように制御する。
【００２７】
記憶部１１は、ストレージ装置２０内の冗長化されたモジュール２１，２２の制御に用いられるファームウェアの異なる版同士の互換性の情報１１ａを記憶する。一例として、ファームウェアの版数ＦＷ１，ＦＷ２，ＦＷ３，ＦＷ４を考える。版数ＦＷ２は版数ＦＷ１よりも新しい。版数ＦＷ３の版数ＦＷ２よりも新しい。版数ＦＷ４は版数ＦＷ３よりも新しい。情報１１ａは、版数ＦＷ１，ＦＷ２，ＦＷ３，ＦＷ４に対して、次のような互換性の情報を含む。
【００２８】
版数ＦＷ１のファームウェアは、版数ＦＷ２のファームウェアと互換性があり、版数ＦＷ３，ＦＷ４のファームウェアと互換性がない。版数ＦＷ２のファームウェアは、版数ＦＷ１，ＦＷ３のファームウェアと互換性があり、版数ＦＷ４のファームウェアと互換性がない。版数ＦＷ３のファームウェアは、版数ＦＷ２，ＦＷ４のファームウェアと互換性があり、版数ＦＷ１のファームウェアと互換性がない。版数ＦＷ４のファームウェアは、版数ＦＷ３のファームウェアと互換性があり、版数ＦＷ１，ＦＷ２のファームウェアと互換性がない。
【００２９】
演算部１２は、モジュール２１，２２のファームウェアを第１の版から第１の版と互換性のない第２の版へ更新する旨の指示を受け付ける。演算部１２は、ファームウェア更新装置１０に接続された入力デバイスを用いたユーザの所定の操作入力により、ファームウェアの版を更新する指示を受け付けてもよい。例えば、演算部１２は、版数ＦＷ１（第１の版）から版数ＦＷ４（第２の版）へ更新する旨の指示を受け付ける。情報１１ａによれば、版数ＦＷ４のファームウェアは、版数ＦＷ１のファームウェアとは互換性がない。
【００３０】
演算部１２は、記憶部１１を参照して、第１の版から第２の版までの版のうち、相手のモジュールに現在適用されている版のファームウェアと互換性があり、かつ、相手のモジュールに現在適用されている版よりも新しい版のファームウェアを片方のモジュールずつ交互に適用する。すなわち、演算部１２は、第１，第２の版を除き両方のモジュールに同じ版のファームウェアを適用しない。
【００３１】
ここで、相手のモジュールとは、冗長化された２つのモジュールのうち、一方のモジュールからみた他方のモジュールである。例えば、モジュール２１の相手のモジュールはモジュール２２である。モジュール２２の相手のモジュールはモジュール２１である。
【００３２】
例えば、演算部１２は、モジュール２２のファームウェアを最初に更新すると決定する。演算部１２は、所定の基準（例えば、モジュール２１，２２に主／副などの関係があれば、副側を最初に更新する、など）により、どちらのモジュールのファームウェアを最初に更新するかを決定してもよい。すると、演算部１２は、情報１１ａを参照して、次の更新手順１２ａを実行する。
【００３３】
演算部１２は、モジュール２２の相手であるモジュール２１に現在適用されている版数ＦＷ１のファームウェアと互換性があり、かつ、版数ＦＷ１よりも新しい版数ＦＷ２のファームウェアをモジュール２２に適用する（ステップＳ１）。
【００３４】
演算部１２は、モジュール２１の相手であるモジュール２２に現在適用されている版数ＦＷ２のファームウェアと互換性があり、かつ、版数ＦＷ２よりも新しい版数ＦＷ３のファームウェアをモジュール２１に適用する（ステップＳ２）。なお、演算部１２は、モジュール２１に版数ＦＷ２のファームウェアを適用しない。
【００３５】
演算部１２は、モジュール２２の相手であるモジュール２１に現在適用されている版数ＦＷ３のファームウェアと互換性があり、かつ、版数ＦＷ３よりも新しい版数ＦＷ４のファームウェアをモジュール２２に適用する（ステップＳ３）。なお、演算部１２は、モジュール２２に版数ＦＷ３のファームウェアを適用しない。
【００３６】
モジュール２２に現在適用されている版数ＦＷ４は、最終更新先の版のファームウェアなので、演算部１２は、版数ＦＷ４のファームウェアをモジュール２１にも適用する（ステップＳ４）。
【００３７】
ファームウェア更新装置１０によれば、モジュール２１，２２のファームウェアを第１の版から第２の版に更新する際に、第１の版から第２の版までの版のうち、相手のモジュールに現在適用されている版のファームウェアと互換性があり、かつ、相手のモジュールに現在適用されている版よりも新しい版のファームウェアが片方のモジュールずつ交互に適用される。これにより、ファームウェア更新を高速化できる。
【００３８】
ここで、情報１１ａを参照しない手順（更新手順１２ａとは異なる手順）も考えられる。例えば、両モジュールのファームウェアを１世代ずつ順次更新する方法である。前述のように、版の差が１世代であれば、ファームウェアの互換性は保たれていると考えられるからである。具体的には、まず、版数ＦＷ２のファームウェアをモジュール２２に適用する（１ステップ目）。次に、版数ＦＷ２のファームウェアをモジュール２１に適用する（２ステップ目）。次に、版数ＦＷ３のファームウェアをモジュール２２に適用する（３ステップ目）。次に、版数ＦＷ３のファームウェアをモジュール２１に適用する（４ステップ目）。次に、版数ＦＷ４のファームウェアをモジュール２２に適用する（５ステップ目）。次に、版数ＦＷ４のファームウェアをモジュール２１に適用する（６ステップ目）。
【００３９】
しかし、この方法では、ファームウェアの更新手順のステップ数が増大するおそれがある。ファームウェアの更新手順のステップ数が増大すると、ファームウェア更新に失敗するリスクも高まる。そこで、ファームウェア更新装置１０は、相手の系と互換性のある範囲で、相手の系よりも新しい版のファームウェアを片系ずつ交互に適用することで、ファームウェアの更新手順のステップ数を低減する。
【００４０】
例えば、１つのモジュールに新しいファームウェアを適用することを１ステップと数えるとする。すると、両モジュールのファームウェアを版数ＦＷ１から版数ＦＷ４に更新するまでに、情報１１ａを参照しない上記手順では計６ステップを要するのに対し、ファームウェア更新装置１０の更新手順１２ａでは計４ステップ（上記のステップＳ１〜Ｓ４）で済む。このようにファームウェアの更新手順のステップ数を低減して、ファームウェア更新を高速化できる。
【００４１】
なお、ファームウェアは、複数のサブファームウェアの集合体であってもよい。例えば、モジュール２１，２２がストレージ装置２０の全体を制御するモジュールである場合、モジュール２１，２２は前述のように通信用モジュールや記憶装置群２３，２４との接続用モジュールなどの他の種類のモジュールの動作を制御することもある。その場合、モジュール２１，２２は、モジュール２１，２２自体のファームウェアおよび他の種類のモジュールのファームウェアを実行し得る。モジュールの種類毎のファームウェアをサブファームウェア（モジュール単位のファームウェア）と考えれば、各サブファームウェアを組み合わせたものを１つのファームウェアと考えることができる。その場合も、各版のファームウェアに対して情報１１ａと同様の情報を作成でき、当該情報に基づくファームウェア更新を行える。また、プロセッサ２１ｃまたはプロセッサ２２ｃが演算部１２の機能を担ってもよい。
【００４２】
［第２の実施の形態］
図２は、第２の実施の形態の情報処理システムを示す図である。第２の実施の形態の情報処理システムは、ストレージ装置１００、管理サーバ２００、サーバ３００およびＦＷ（FirmWare）配信サーバ４００を含む。ストレージ装置１００、管理サーバ２００およびサーバ３００は、ネットワーク３０に接続されている。ネットワーク３０は、例えばＬＡＮ（Local Area Network）である。
【００４３】
ストレージ装置１００およびサーバ３００は、ＳＡＮ（Storage Area Network）４０に接続されている。ネットワーク３０は、ネットワーク５０に接続されている。ネットワーク５０は、例えば、インターネットやＷＡＮ（Wide Area Network）などの広域ネットワークである。ＦＷ配信サーバ４００は、ネットワーク５０に接続されている。
【００４４】
ストレージ装置１００は、サーバ３００の処理に用いられるユーザデータを記憶する。ストレージ装置１００は、ファームウェアを実行し、ストレージ装置１００内のハードウェアモジュールの動作を制御する。
【００４５】
管理サーバ２００は、ストレージ装置１００の運用管理を行うサーバコンピュータである。
サーバ３００は、ストレージ装置１００に格納されたユーザデータにアクセスするサーバコンピュータである。
【００４６】
ＦＷ配信サーバ４００は、ストレージ装置１００で用いられるファームウェアを、ストレージ装置１００または管理サーバ２００に配信するサーバコンピュータである。ファームウェアは、機能拡張やプログラム修正に応じて更新され得る。ＦＷ配信サーバ４００は、ファームウェアが更新されると、ネットワーク５０を介して、更新後のファームウェアの配信を行う。なお、以下の説明では、ファームウェアをＦＷと略記することがある。
【００４７】
図３は、第２の実施の形態のストレージ装置のハードウェア例を示す図である。ストレージ装置１００は、ストレージ制御装置１０１およびＤＥ（Drive Enclosure）１０２，１０３を有する。ストレージ制御装置１０１はストレージ装置１００の動作を制御する。ストレージ制御装置１０１は、ＣＭ（Controller Module）１１０，１２０を有する。
【００４８】
ＣＭ１１０，１２０は、ＤＥ１０２，１０３の記憶領域の管理やＤＥ１０２，１０３に対するアクセス制御を行う。ＣＭ１１０，１２０はストレージ制御装置１０１内で冗長化されている。
【００４９】
ＣＭ１１０は、プロセッサ１１１、ＲＡＭ１１２、フラッシュメモリ１１３、ＣＡ（Channel Adaptor）１１４，１１５、ＮＡ（Network Adaptor）１１６およびＥＸＰ（EXPander）１１７を有する。
【００５０】
プロセッサ１１１は、ＣＭ１１０の情報処理を制御するプロセッサである。プロセッサ１１１は、マルチプロセッサであってもよい。プロセッサ１１１は、例えばＣＰＵ、ＤＳＰ、ＡＳＩＣまたはＦＰＧＡなどである。プロセッサ１１１は、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどのうちの２以上の要素の組み合わせであってもよい。
【００５１】
ＲＡＭ１１２は、ＣＭ１１０の主記憶装置である。ＲＡＭ１１２は、プロセッサ１１１に実行させるファームウェアのプログラムの少なくとも一部を一時的に記憶する。
フラッシュメモリ１１３は、ＣＭ１１０の補助記憶装置である。フラッシュメモリ１１３は、不揮発性の半導体メモリである。フラッシュメモリ１１３は、ファームウェアのプログラムなどを記憶する。
【００５２】
ＣＡ１１４，１１５は、ＳＡＮ４０を介してサーバ３００と通信する通信インタフェースである。ＣＡ１１４，１１５は冗長化されている。
ＮＡ１１６は、ネットワーク３０を介して他のコンピュータと通信する通信インタフェースである。ＣＭ１１０は、複数個のＮＡを備えてもよい。
【００５３】
ＥＸＰ１１７は、ＤＥ１０２，１０３と通信する通信インタフェースである。
ＣＭ１２０は、プロセッサ１２１、ＲＡＭ１２２、フラッシュメモリ１２３、ＣＡ１２４，１２５、ＮＡ１２６およびＥＸＰ１２７を有する。ＣＭ１２０の各ユニットは、ＣＭ１１０の同名のユニットと同様である。
【００５４】
ここで、ストレージ制御装置１０１は、第１の実施の形態のファームウェア更新装置１０の一例と考えることができる。
ＤＥ１０２，１０３は、複数のＨＤＤ（磁気ディスク装置）を収容し、複数のＨＤＤを組み合わせた大容量の記憶領域を利用可能にする。ＤＥ１０２は、ＩＯＭ（Input / Output Module）１３０およびＨＤＤ群１３１を有する。
【００５５】
ＩＯＭ１３０は、ＣＭ１１０，１２０の指示に応じて、ＨＤＤ群１３１の記憶領域に対するデータの書き込みや読み出しなどのアクセスを実行する。ＨＤＤ群１３１は、ＨＤＤ１３１ａ，１３１ｂ，１３１ｃ，１３１ｄなどの複数のＨＤＤを含む。ＤＥ１０２は、ＨＤＤの代わりに、または、ＨＤＤと併せて、ＳＳＤなどの他の不揮発性記憶媒体を備えてもよい。
【００５６】
ＤＥ１０３は、ＩＯＭ１４０およびＨＤＤ群１４１を有する。ＩＯＭ１４０は、ＩＯＭ１３０と同様に、ＣＭ１１０，１２０の指示に応じて、ＨＤＤ群１４１の記憶領域に対するデータの書き込みや読み出しなどのアクセスを実行する。ＤＥ１０３も、ＤＥ１０２と同様に、ＨＤＤ１４１ａ，１４１ｂ，１４１ｃ，１４１ｄなどの複数のＨＤＤを含む。例えば、ＣＭ１１０，１２０は、ＤＥ１０２，１０３に内蔵された複数のＨＤＤ（あるいはＳＳＤ）を用いてＲＡＩＤ（Redundant Array of Independent Disks）と呼ばれる技術により、アクセス性能や耐障害性を確保した論理的な記憶領域を実現する。
【００５７】
図４は、第２の実施の形態の管理サーバのハードウェア例を示す図である。管理サーバ２００は、プロセッサ２０１、ＲＡＭ２０２、ＨＤＤ２０３、画像信号処理部２０４、入力信号処理部２０５、読み取り装置２０６および通信インタフェース２０７を有する。各ユニットが管理サーバ２００のバスに接続されている。サーバ３００やＦＷ配信サーバ４００も管理サーバ２００と同様のハードウェアにより実現できる。
【００５８】
プロセッサ２０１は、管理サーバ２００の情報処理を制御する。プロセッサ２０１は、マルチプロセッサであってもよい。プロセッサ２０１は、例えばＣＰＵ、ＤＳＰ、ＡＳＩＣまたはＦＰＧＡなどである。プロセッサ２０１は、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどのうちの２以上の要素の組み合わせであってもよい。
【００５９】
ＲＡＭ２０２は、管理サーバ２００の主記憶装置である。ＲＡＭ２０２は、プロセッサ２０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ２０２は、プロセッサ２０１による処理に用いる各種データを記憶する。
【００６０】
ＨＤＤ２０３は、管理サーバ２００の補助記憶装置である。ＨＤＤ２０３は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ２０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。管理サーバ２００は、フラッシュメモリやＳＳＤなどの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
【００６１】
画像信号処理部２０４は、プロセッサ２０１からの命令に従って、管理サーバ２００に接続されたディスプレイ３１に画像を出力する。ディスプレイ３１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイなどを用いることができる。
【００６２】
入力信号処理部２０５は、管理サーバ２００に接続された入力デバイス３２から入力信号を取得し、プロセッサ２０１に出力する。入力デバイス３２としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
【００６３】
読み取り装置２０６は、記録媒体３３に記録されたプログラムやデータを読み取る装置である。記録媒体３３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。また、記録媒体３３として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することもできる。読み取り装置２０６は、例えば、プロセッサ１１１からの命令に従って、記録媒体３３から読み取ったプログラムやデータをＲＡＭ２０２またはＨＤＤ２０３に格納する。
【００６４】
通信インタフェース２０７は、ネットワーク３０を介して他の装置と通信を行う。通信インタフェース２０７は、有線通信インタフェースでもよいし、無線通信インタフェースでもよい。
【００６５】
図５は、第２の実施の形態のストレージ装置のファームウェアの例を示す図である。ストレージ装置１００の各種ハードウェアモジュールは冗長化されている。第２の実施の形態では、一例として、ＣＭ１１０およびＩＯＭ１３０を含むモジュールのグループを０系、ＣＭ１２０およびＩＯＭ１４０を含むモジュールのグループを１系と呼ぶこととする。前述のように、ＣＭ１１０，１２０は、ＥＸＰ１１７，１２７などの他のモジュールを含み得る。
【００６６】
０系、１系に含まれる各モジュールは冗長化されている。例えば、ＣＭ１１０が故障したとしても、ＣＭ１１０に対するデータアクセス要求を、ＣＭ１２０を用いて一時的に蓄積したり、データアクセス要求に応じた処理を代行したりすることができる。例えば、ＣＭ１１０が復旧すると、ＣＭ１２０は蓄積したデータアクセス要求をＣＭ１１０に送信し、データアクセスを実行させることもできる。ＣＭ１２０が故障したときも同様である。また、例えば、ＨＤＤ群１３１，１４１の両方に同一のデータを複製して保持すれば（例えば、ミラーリング）、ＩＯＭ１３０が故障してＨＤＤ群１３１へのアクセスが困難になっても、ＣＭ１１０，１２０は、ＩＯＭ１４０を用いてデータアクセスを継続できる。
【００６７】
ＣＭ１１０は、ファームウェアＰａを実行する。ファームウェアＰａは、ＣＭ１１０がＣＭ１１０に含まれる各種モジュール、または、ＣＭ１１０と接続された各種モジュールを制御するためソフトウェアである。同様に、ＣＭ１２０は、ファームウェアＰｂを実行する。ファームウェアＰｂは、ＣＭ１２０がＣＭ１２０に含まれる各種モジュール、または、ＣＭ１２０と接続された各種モジュールを制御するためのソフトウェアである。
【００６８】
ファームウェアＰａ，Ｐｂは、それぞれモジュール単位ファームウェアＡ，Ｂ，Ｃを含む。モジュール単位ファームウェアＡは、ＣＭ（例えば、ＣＭ１１０，１２０）全体の制御に用いられるソフトウェアである。モジュール単位ファームウェアＢは、ＩＯＭ（例えば、ＩＯＭ１３０，１４０）の制御に用いられるソフトウェアである。モジュール単位ファームウェアＣは、ＣＡ（例えば、ＣＡ１１４，１１５，１２４，１２５）の制御に用いられるソフトウェアである。モジュール単位ファームウェアをファームウェアＰａ，Ｐｂに対するサブファームウェアと呼ぶこともできる。
【００６９】
例えば、ＣＭ１１０は、ファームウェアＰａに含まれるモジュール単位ファームウェアＡを用いてＣＭ１１０を制御する。ＣＭ１１０は、ファームウェアＰａに含まれるモジュール単位ファームウェアＢを用いてＩＯＭ１３０，１４０を制御する。ＣＭ１１０は、ファームウェアＰａに含まれるモジュール単位ファームウェアＣを用いてＣＡ１１４，１１５を制御する。ＣＭ１２０も同様に、ファームウェアＰｂに含まれるモジュール単位ファームウェアＡ，Ｂ，Ｃを用いて、ＣＭ１１０、ＩＯＭ１３０，１４０およびＣＡ１２４，１２５を制御する。
【００７０】
以下の説明では、単に「ファームウェア」という場合、上記のように３種類のモジュール単位ファームウェアを含むファームウェアＰａ，Ｐｂを指すものとする。なお、上記モジュールの種類は一例であり、ファームウェアＰａ，Ｐｂは他の種類のモジュールを制御するためのモジュール単位ファームウェアを更に含んでもよい（または、２種類のモジュール単位ファームウェアの集合体でもよい）。
【００７１】
図６は、第２の実施の形態の機能例を示す図である。ＣＭ１１０の機能は、ＲＡＭ１１２に記憶されたプログラムをプロセッサ１１１が実行することで実現されてもよい。ＣＭ１２０の機能は、ＲＡＭ１２２に記憶されたプログラムをプロセッサ１２１が実行することで実現されてもよい。管理サーバ２００の機能は、ＲＡＭ２０２に記憶されたプログラムをプロセッサ２０１が実行することで実現されてもよい。
【００７２】
ＣＭ１１０は、記憶部１５０、ＦＷ取得部１６０およびＦＷ更新部１７０を有する。記憶部１５０はフラッシュメモリ１１３に確保された記憶領域として実現できる。ただし、プロセッサ１１１による処理のために、記憶部１５０に格納された情報の複製がＲＡＭ１１２に格納されることもある。
【００７３】
記憶部１５０は、異なる版数のファームウェア間における互換性の情報を記憶する。また、記憶部１５０は、ＦＷ配信サーバ４００からダウンロードされたファームウェアを記憶する。第２の実施の形態では、版数の異なる複数のファームウェアをＣＭ１１０に順番に適用して、ＣＭ１１０のファームウェアを新しい版数に更新することもある。その場合、記憶部１５０は、異なる版数の複数のファームウェアの適用順序を示す情報を記憶する。更新元の版数のファームウェアを更新先の版数のファームウェアに更新するとき、更新元（起点）の版数と更新先（終点）の版数との間の版数に対応するファームウェアを中間ファームウェア（または、中間ＦＷ）と称することがある。
【００７４】
ＦＷ取得部１６０は、現版数のファームウェアを新しい版数のファームウェアに更新する際に、ＦＷ配信サーバ４００から取得すべきファームウェア（中間ファームウェアを含む）の版数を決定する。ＦＷ取得部１６０は、決定した版数のファームウェアをＦＷ配信サーバ４００から取得し、記憶部１５０に格納する。ＦＷ取得部１６０は、中間ファームウェアを適用する場合、記憶部１５０に記憶された互換性の情報に基づいて中間ファームウェアの適用順序を決定し、決定した適用順序を示す情報を記憶部１５０に格納する。
【００７５】
ＦＷ取得部１６０は、決定した版数のファームウェアの取得を管理サーバ２００に代行させることもできる。その場合、ＦＷ取得部１６０は、管理サーバ２００を介して、ＦＷ配信サーバ４００からファームウェアを取得する。ＦＷ取得部１６０が管理サーバ２００にファームウェア取得を代行させる場合としては、ストレージ装置１００からネットワーク３０へのアクセスが制限されている場合が考えられる。
【００７６】
ＦＷ更新部１７０は、後述するようにＣＭ１２０と連携して、ＣＭ１１０のファームウェアを更新する。
ＣＭ１２０は、記憶部１５０ａ、ＦＷ取得部１６０ａおよびＦＷ更新部１７０ａを有する。記憶部１５０ａはフラッシュメモリ１２３に確保された記憶領域として実現できる。ただし、プロセッサ１２１による処理のために、記憶部１５０ａに格納された情報の複製がＲＡＭ１２２に格納されることもある。
【００７７】
記憶部１５０ａは、異なる版数のファームウェア間における互換性の情報を記憶する。また、記憶部１５０ａは、ＦＷ配信サーバ４００からダウンロードされたファームウェアを記憶する。記憶部１５０ａは、中間ファームウェアをＣＭ１２０に適用して、ＣＭ１２０のファームウェアを新しいものに更新する場合に、中間ファームウェアの適用順序を示す情報を記憶する。
【００７８】
ＦＷ取得部１６０ａは、現版数のファームウェアを新しい版数のファームウェアに更新する際に、ＦＷ配信サーバ４００から取得すべきファームウェア（中間ファームウェアを含む）の版数を決定する。ＦＷ取得部１６０ａは、決定した版数のファームウェアをＦＷ配信サーバ４００から取得し、記憶部１５０ａに格納する。ＦＷ取得部１６０ａは、中間ファームウェアを適用する場合、記憶部１５０ａに記憶された互換性の情報に基づいて、中間ファームウェアの適用順序を決定し、決定した適用順序を示す情報を記憶部１５０ａに格納する。
【００７９】
ＦＷ取得部１６０ａは、決定した版数のファームウェアの取得を管理サーバ２００に代行させることもできる。その場合、ＦＷ取得部１６０ａは、管理サーバ２００を介して、ＦＷ配信サーバ４００からファームウェアを取得する。ＦＷ取得部１６０ａが管理サーバ２００にファームウェア取得を代行させる場合としては、ストレージ装置１００からネットワーク３０へのアクセスが制限されている場合が考えられる。
【００８０】
なお、ＦＷ取得部１６０，１６０ａは互いに連携して、取得すべきファームウェアの決定、決定した版数のファームウェアの取得およびファームウェアの適用順序の決定を、ＦＷ取得部１６０，１６０ａのどちらか一方が行うよう制御する。これらの処理をＦＷ取得部１６０（または、ＦＷ取得部１６０ａ）に優先的に行わせると予め決定しておいてもよい。
【００８１】
例えば、ＦＷ取得部１６０がＦＷ配信サーバ４００からファームウェアを取得した場合、ＦＷ取得部１６０ａは、ＣＭ１２０に適用するファームウェアをＦＷ取得部１６０から取得し、記憶部１５０ａに格納する。この場合、ＦＷ取得部１６０ａは、中間ファームウェアの適用順序の決定を行わなくてもよい（後述するように、中間ファームウェアの適用はＦＷ更新部１７０により主導されるからである）。
【００８２】
あるいは、ＦＷ取得部１６０ａがＦＷ配信サーバ４００からファームウェアを取得した場合、ＦＷ取得部１６０は、ＦＷ取得部１６０ａからＣＭ１１０に適用するファームウェアを取得し、記憶部１５０に格納する。この場合、ＦＷ取得部１６０は、中間ファームウェアの適用順序の決定を行わなくてもよい（後述するように、中間ファームウェアの適用はＦＷ更新部１７０ａにより主導されるからである）。
【００８３】
ＦＷ更新部１７０ａは、ＦＷ更新部１７０と連携して、ＣＭ１２０におけるファームウェアを更新する。例えば、ＣＭ１１０，１２０のファームウェアの更新は、ＦＷ更新部１７０，１７０ａのうち、ＦＷ配信サーバ４００からファームウェアの取得を行った方によって主導される。
【００８４】
例えば、ＦＷ更新部１７０が主導する場合、ＦＷ更新部１７０は、ＣＭ１１０に対するファームウェアの適用を行うとともに、次にＣＭ１２０に適用すべきファームウェアの版数をＦＷ更新部１７０ａに指示する。前述のように、ＦＷ更新部１７０は、中間ファームウェアの適用順序を決定している場合、決定した適用順序に応じて、次にＣＭ１２０に適用すべきファームウェアの版数をＦＷ更新部１７０ａに指示する。
【００８５】
また、ＦＷ更新部１７０ａが主導する場合、ＦＷ更新部１７０ａは、ＣＭ１２０に対するファームウェアの適用を行うとともに、次にＣＭ１１０に適用すべきファームウェアの版数をＦＷ更新部１７０に指示する。前述のように、ＦＷ更新部１７０ａは、中間ファームウェアの適用順序を決定している場合、決定した適用順序に応じて、次にＣＭ１１０に適用すべきファームウェアの版数をＦＷ更新部１７０に指示する。
【００８６】
ここで、ＣＭ１１０，１２０に対するファームウェアの適用は次のようにして行われる。（１）ＦＷ更新部１７０は、更新先の版数のファームウェアのプログラムを記憶部１５０に格納する。（２）ＦＷ更新部１７０は、ＣＭ１１０を再起動させる。記憶部１５０は不揮発性の記憶部なので、ＣＭ１１０をシャットダウンさせても記憶部１５０に格納されたプログラムは保持される。（３）ＦＷ更新部１７０は、ＣＭ１１０が起動する際に更新先の版数のファームウェアのプログラムを記憶部１５０から読み出して、ＲＡＭ１１２に格納する。これにより、プロセッサ１１１により実行されるファームウェアが更新される（新たなファームウェアがＣＭ１１０に適用される）。ＦＷ更新部１７０ａも同様にしてＣＭ１２０のファームウェアを更新する。
【００８７】
管理サーバ２００は、記憶部２１０および管理部２２０を有する。記憶部２１０は、ＲＡＭ２０２やＨＤＤ２０３に確保された記憶領域として実現できる。記憶部２１０は、管理部２２０の処理に用いられる情報を記憶する。
【００８８】
管理部２２０は、ストレージ装置１００の運用管理を行う。前述のように、管理部２２０は、ストレージ装置１００からの要求に応じて、ストレージ装置１００のファームウェアのダウンロードを行うこともある。
【００８９】
図７は、第２の実施の形態のＦＷ互換性テーブルの例を示す図である。ＦＷ互換性テーブル１５１は、記憶部１５０，１５０ａに予め格納される。ＦＷ互換性テーブル１５１は、異なる版数のファームウェア間における互換性の情報である。ＦＷ互換性テーブル１５１は、全体版数、モジュール単位版数および互換性指数合計の項目を含む。
【００９０】
全体版数の項目には、モジュール単位ファームウェアを組み合わせたファームウェア全体としての版数（全体版数ということがある）が登録される。「ファームウェアの版数」という場合、全体版数を示すことになる。
【００９１】
モジュール単位版数の項目には、全体版数に対応するモジュール単位ファームウェアそれぞれの版数（モジュール単位版数ということがある）が登録される。「モジュール単位ファームウェアの版数」という場合、モジュール単位版数を示すことになる。
【００９２】
互換性指数合計の項目には、ファームウェアに対する互換性指数合計が登録される。互換性指数合計とは、モジュール単位の互換性指数（後述する）の合計値である。互換性指数合計は、全体版数の異なるモジュール間における互換性の有無の判定に用いられる。
【００９３】
例えば、ＦＷ互換性テーブル１５１には、全体版数が“Ｖ１”、モジュール単位版数が“Ａ１／Ｂ１／Ｃ１”、互換性指数合計が“Ｘ１”という情報が登録される。ここで、モジュール単位版数“Ａ１／Ｂ１／Ｃ１”の記述において、“Ａ１”はモジュール単位ファームウェアＡの版数Ａ１を示す。“Ｂ１”はモジュール単位ファームウェアＢの版数Ｂ１を示す。“Ｃ１”はモジュール単位ファームウェアＣの版数Ｃ１を示す。すなわち、全体版数Ｖ１のファームウェアは、モジュール単位ファームウェアＡ，Ｂ，Ｃのうち、モジュール単位版数がそれぞれＡ１、Ｂ１、Ｃ１のものの組み合わせであり、互換性指数合計値がＸ１であることを示す。
【００９４】
同様に、ＦＷ互換性テーブル１５１には、全体版数が“Ｖ２”、モジュール単位版数が“Ａ２／Ｂ１／Ｃ１”、互換性指数合計が“Ｘ２”という情報が登録される。これは、全体版数Ｖ２のファームウェアは、モジュール単位ファームウェアＡ，Ｂ，Ｃのうち、モジュール単位版数がそれぞれＡ２、Ｂ１、Ｃ１のものの組み合わせであり、互換性指数合計値がＸ２であることを示す。
【００９５】
なお、ＦＷ互換性テーブル１５１の例では、下に記載された全体版数ほど新しい版数である。ＦＷ互換性テーブル１５１の表記において、全体版数Ｖ２は、全体版数Ｖ１よりも１世代新しい全体版数である。全体版数Ｖａは、全体版数Ｖ２よりも複数世代新しい全体版数である。全体版数Ｖａ１は、全体版数Ｖａよりも１世代新しい全体版数である。全体版数Ｖｂは、全体版数Ｖａ１よりも複数世代新しい全体版数である。全体版数Ｖｂ１は、全体版数Ｖｂよりも１世代新しい全体版数である。全体版数Ｖｃは、全体版数Ｖｂ１よりも複数世代新しい全体版数である。
【００９６】
例えば、異なる全体版数に対応する互換性指数合計の差ΔＸは、異なる全体版数である２つのファームウェアの互換性の乖離度（互換性乖離度）を示している。互換性乖離度は、両版数のファームウェア間の互換性の乖離の度合いを示す指標である。例えば、互換性乖離度が閾値以下であれば両版数のファームウェアに互換性があると判断でき、互換性乖離度が閾値よりも大きければ両版数のファームウェアに互換性がないと判断できる。
【００９７】
図８は、第２の実施の形態の互換性指数テーブルの例を示す図である。互換性指数テーブル１５２は、記憶部１５０，１５０ａに予め格納される。互換性指数テーブル１５２は、モジュール単位版数に対応する互換性指数を示す情報である。互換性指数テーブル１５２は、モジュール単位版数および互換性指数の項目を含む。
【００９８】
モジュール単位版数の項目には、モジュール単位版数が登録される。互換性指数の項目には、互換性指数が登録される。互換性指数は、モジュール単位版数が新しい版数であるほど、値が大きくなる。２つのモジュール単位版数に対応する互換性指数の差は、各モジュール単位版数のモジュール単位ファームウェアの互換性における乖離度の指標を示している。乖離度が大きいほど、モジュール単位ファームウェアの連携機能などの乖離が大きいことになる。
【００９９】
例えば、互換性指数テーブル１５２には、モジュール単位版数が“Ａ１”、互換性指数が“ａ１”という情報が登録される。これは、モジュール単位版数Ａ１の互換性指数がａ１であることを示している。
【０１００】
同様に、互換性指数テーブル１５２には、モジュール単位ファームウェアＡの他のモジュール単位版数（モジュール単位版数Ａ２など）に対しても、それぞれ互換性指数が登録されている。また、互換性指数テーブル１５２には、モジュール単位ファームウェアＢ，Ｃに対してもモジュール単位版数毎に互換性指数が登録されている。
【０１０１】
例えば、全体版数Ｖ１のファームウェアは、モジュール単位ファームウェアの組み合わせ“Ａ１／Ｂ１／Ｃ１”である。この場合、全体版数Ｖ１の互換性指数合計は、Ｘ１＝ａ１＋ｂ１＋ｃ１である。ＦＷ取得部１６０，１６０ａは、全体版数とモジュール単位版数との対応関係の情報を取得できれば、互換性指数テーブル１５２を参照して、全体版数に対する互換性指数合計を計算できる。
【０１０２】
図９は、第２の実施の形態の活性交換可能閾値の例を示す図である。図９（Ａ）は、活性交換可能閾値情報１５３を示している。活性交換可能閾値情報１５３は、記憶部１５０，１５０ａに予め格納される。活性交換可能閾値情報１５３には、閾値Ｙが登録されている。閾値Ｙは、図７で説明した互換性乖離度と比較されて、ファームウェア間の互換性有無の判定に用いられる。
【０１０３】
図９（Ｂ）は、活性交換可能閾値を用いた互換性有無の判定例を示している。例えば、全体版数Ｖ１，Ｖ２，Ｖａ，Ｖａ１を考える。
（１）ＦＷ互換性テーブル１５１の例によれば、全体版数Ｖ１の互換性指数合計はＸ１＝ａ１＋ｂ１＋ｃ１である。
【０１０４】
（２）全体版数Ｖ２の互換性指数合計は、Ｘ２＝ａ２＋ｂ１＋ｃ１である。全体版数Ｖ１，Ｖ２に対する互換性乖離度は、ΔＸ＝Ｘ２−Ｘ１である。Ｘ２−Ｘ１≦Ｙであるとする。この場合、全体版数Ｖ１，Ｖ２のファームウェアは互換性がある。したがって、全体版数Ｖ１のファームウェアがＣＭ１１０に適用され、全体版数Ｖ２のファームウェアがＣＭ１２０に適用されているとしても（あるいは、その逆としても）、ＣＭ１１０，１２０は、互いに連携し、ファームウェアの活性交換を適切に行える。
【０１０５】
（３）全体版数Ｖａの互換性指数合計は、Ｘａ＝ａ３＋ｂ３＋ｃ１である。全体版数Ｖ１，Ｖａに対する互換性乖離度は、ΔＸ＝Ｘａ−Ｘ１である。Ｘａ−Ｘ１≦Ｙであるとする。この場合、全体版数Ｖ１，Ｖａのファームウェアは互換性がある。したがって、全体版数Ｖ１のファームウェアがＣＭ１１０に適用され、全体版数ＶａのファームウェアがＣＭ１２０に適用されているとしても（あるいは、その逆としても）、ＣＭ１１０，１２０は、互いに連携し、ファームウェアの活性交換を適切に行える。
【０１０６】
（４）全体版数Ｖａ１の互換性指数合計は、Ｘａ１＝ａ３＋ｂ３＋ｃ２である。全体版数Ｖ１，Ｖａ１に対する互換性乖離度は、ΔＸ＝Ｘａ１−Ｘ１である。Ｘａ１−Ｘ１＞Ｙであるとする。この場合、全体版数Ｖ１，Ｖａ１のファームウェアは互換性がない。したがって、全体版数Ｖ１のファームウェアがＣＭ１１０に適用され、全体版数Ｖａ１のファームウェアがＣＭ１２０に適用されていると（あるいは、その逆）、ファームウェアの活性交換の際に、ＣＭ１１０，１２０の連携を適切に行えないおそれがある。
【０１０７】
この場合、全体版数Ｖａは、全体版数Ｖ１に対してファームウェアの活性交換が可能な最も新しい全体版数である。そして、全体版数Ｖａに対しても、同様にファームウェアの活性交換が可能な全体版数を確認していくことができる。
【０１０８】
（５）全体版数Ｖａの互換性指数合計は、（３）で述べたようにＸａである。
（６）全体版数Ｖａ１の互換性指数合計は、（４）で述べたようにＸａ１である。全体版数Ｖａ，Ｖａ１に対する互換性乖離度は、ΔＸ＝Ｘａ１−Ｘａである。Ｘａ１−Ｘａ≦Ｙであるとする。この場合、全体版数Ｖａ，Ｖａ１のファームウェアは互換性がある。したがって、全体版数Ｖａ１のファームウェアがＣＭ１１０に適用され、全体版数ＶａのファームウェアがＣＭ１２０に適用されているとしても（あるいは、その逆としても）、ＣＭ１１０，１２０は、互いに連携し、ファームウェアの活性交換を適切に行える。
【０１０９】
（７）全体版数Ｖｂの互換性指数合計は、Ｘｂ＝ａ５＋ｂ３＋ｃ２である。全体版数Ｖａ，Ｖｂに対する互換性乖離度は、ΔＸ＝Ｘｂ−Ｘａである。Ｘｂ−Ｘａ≦Ｙであるとする。この場合、全体版数Ｖａ，Ｖｂのファームウェアは互換性がある。したがって、全体版数Ｖａ１のファームウェアがＣＭ１１０に適用され、全体版数ＶｂのファームウェアがＣＭ１２０に適用されているとしても（あるいは、その逆としても）、ＣＭ１１０，１２０は、互いに連携し、ファームウェアの活性交換を適切に行える。
【０１１０】
以降、同様にして、ストレージ装置１００は、全体版数Ｖａに対しても、互換性のある最新の全体版数を確認できる。
ＦＷ取得部１６０，１６０ａは、ＦＷ互換性テーブル１５１、互換性指数テーブル１５２および活性交換可能閾値情報１５３を、ＦＷ配信サーバ４００から予めダウンロードし、記憶部１５０，１５０ａに格納しておく。前述のように、互換性テーブル１５１における互換性指数合計値は、ＦＷ互換性テーブル１５１における全体版数とモジュール単位版数との対応関係および互換性指数テーブル１５２から取得できる。このため、ストレージ装置１００は、全体版数とモジュール単位版数との対応関係の情報と互換性指数テーブル１５２をＦＷ配信サーバ４００から取得して、ＦＷ互換性テーブル１５１を作成してもよい。
【０１１１】
図１０は、第２の実施の形態の中間ＦＷテーブルの例を示す図である。中間ＦＷテーブル１５４は、記憶部１５０，１５０ａに格納される。中間ＦＷテーブル１５４は、ＣＭ１１０，１２０のうち、少なくともファームウェアの活性交換を主導するＣＭの記憶部に格納されていればよい。中間ＦＷテーブル１５４は、適用順序、全体版数、モジュール単位ＦＷプログラムおよび適用フラグの項目を含む。
【０１１２】
適用順序の項目には、適用する順番が登録される。例えば、番号が小さいほど順番が早く、番号が大きいほど順番が遅い。全体版数の項目には、中間ファームウェアの全体版数が登録される。
【０１１３】
モジュール単位ＦＷプログラムの項目には、モジュール単位のＦＷ（ファームウェア）プログラムの本体（中間ファームウェアの全体版数に対応するもの）が登録される。なお、中間ＦＷテーブル１５４の例では、モジュール単位版数を示す記号（“Ａ３”など）を用いて、中間ファームウェアの要素であるモジュール単位ＦＷプログラムの本体を表記している。例えば、図１０において“Ａ３”の表記は、モジュール単位ファームウェアＡの版数“Ａ３”に対応するプログラム（モジュール単位ＦＷプログラム）の本体を示す。
【０１１４】
適用フラグの項目には、該当のレコードで示される中間ファームウェアを何れかのＣＭに適用済であるか否かを示すフラグが登録される。“ｆａｌｓｅ”は未適用を示す。“ｔｒｕｅ”は適用済を示す。適用フラグのデフォルト値は“ｆａｌｓｅ”である。
【０１１５】
例えば、中間ＦＷテーブル１５４には、適用順序が“１”、全体版数が“Ｖａ”、モジュール単位ＦＷプログラムが“Ａ３／Ｂ３”、適用フラグが“ｆａｌｓｅ”という情報が登録されている。これは、全体版数Ｖａのファームウェアが中間ファームウェアとして取得されており、ファームウェア更新の際の適用順序が１番目であることを示している。また、当該中間ファームウェアの要素として、モジュール単位ファームウェアＡの版数Ａ３に対応するプログラム、モジュール単位ファームウェアＢの版数Ｂ３に対応するプログラムを取得していることを示す。また、当該中間ファームウェアは未適用であることを示す。
【０１１６】
なお、ストレージ装置１００は、全体版数に対応する全てのモジュール単位版数について、モジュール単位ＦＷプログラムを取得しなくてよい。例えば、全体版数Ｖａに対応するモジュール単位版数は“Ａ３／Ｂ３／Ｃ１”である。この場合、全体版数Ｖａへ更新する直前の全体版数が、例えば全体版数Ｖ１であれば、全体版数Ｖａのモジュール単位ＦＷプログラムとして、版数Ｃ１に対応するモジュール単位ＦＷプログラムを取得しなくてよい。全体版数Ｖ１，Ｖａにおけるモジュール単位版数の差分は“Ａ３／Ｂ３”であり、モジュール単位版数Ｃ１は変更なしだからである。
【０１１７】
中間ＦＷテーブル１５４の適用順序“２”のレコードについても同様のことがいえる。例えば、全体版数Ｖａに更新する直前の全体版数が全体版数Ｖｂであれば、全体版数Ｖｂのモジュール単位ＦＷプログラムとして、版数Ｂ３に対応するモジュール単位ＦＷプログラムを取得しなくてよい。全体版数Ｖａ，Ｖｂにおけるモジュール単位版数の差分は“Ａ５／Ｃ２”であり、モジュール単位版数Ｂ３は変更なしだからである。
【０１１８】
図１１は、第２の実施の形態のＦＷ更新例を示すフローチャートである。以下、図１１に示す処理をステップ番号に沿って説明する。図１１の手順ではＣＭ１１０，１２０のうちＣＭ１１０がＦＷ更新の処理を主導する場合を例示する。ただし、ＣＭ１２０がＦＷ更新の処理を主導する場合も同様の手順である（記憶部１５０，１５０ａ、ＦＷ取得部１６０，１６０ａおよびＦＷ更新部１７０，１７０ａの役割をそれぞれ入れ換えればよい）。
【０１１９】
（Ｓ１１）ＦＷ取得部１６０は、現版数（稼働中のファームウェアの版数）よりも新しい最終更新先のファームウェア（ＦＷ）の版数（この版数は全体版数である）を取得する。最終更新先の版数は、今回のファームウェア更新において目的とする最終の版数である。０系、１系両方に適用されているファームウェアの版数が両方とも最終更新先の版数となれば、ファームウェアの更新が完了したといえる。最終更新先の版数は、例えば、ユーザによりストレージ装置１００に入力される。例えば、ユーザは、管理サーバ２００を操作して、ネットワーク３０経由でストレージ装置１００に最終更新先の版数を入力できる。あるいは、ＦＷ取得部１６０が、ネットワーク３０を介してＦＷ配信サーバ４００から最新版のファームウェアの配信が開始された旨の通知を受け付けるなどして、最終更新先のファームウェアの版数（例えば、最新の版数）を取得してもよい。
【０１２０】
（Ｓ１２）ＦＷ取得部１６０は、記憶部１５０に記憶されたＦＷ互換性テーブル１５１を参照して、稼働中の版数のファームウェアから活性交換可能な（互換性のある）他の版数のファームウェアが存在するか否かを判定する。存在する場合、処理をステップＳ１４に進める。存在しない場合、処理をステップＳ１３に進める。稼働中のファームウェアから活性交換可能な他のファームウェアが存在するか否かは、図９で説明したように、稼働中のファームウェアの版数の互換性指数合計および他の版数の互換性閾値合計の差ΔＸと、活性交換可能閾値Ｙとの比較に応じて判定できる。ΔＸ≦Ｙとなるような他の版数が存在すれば、稼働中のファームウェアから活性交換可能なファームウェアは存在する。ΔＸ≦Ｙとなるような他の版数が存在しなければ、稼働中のファームウェアから活性交換可能な他のファームウェアは存在しない。
【０１２１】
（Ｓ１３）ＦＷ取得部１６０は、ファームウェアの活性交換を行えない旨をユーザに通知する。例えば、ＦＷ取得部１６０は、ネットワーク３０を介して管理サーバ２００に所定のメッセージを送信し、管理サーバ２００を介して活性交換を行えない旨をユーザに通知してもよい。ＦＷ取得部１６０は、ストレージ装置１００が備える表示パネルなどにメッセージを表示したり、所定のアドレスに対してメッセージ（例えば、電子メール）を送信したりすることで、ユーザへの通知を行ってもよい。そして、処理を終了する。
【０１２２】
（Ｓ１４）ＦＷ取得部１６０は、ファームウェアの活性交換が可能なファームウェアの中に、最終更新先の版数のファームウェアが含まれるか否かを判定する。含まれる場合、処理をステップＳ１５に進める。含まれない場合、処理をステップＳ１６に進める。
【０１２３】
（Ｓ１５）ＦＷ更新部１７０は、ファームウェアの活性交換を行う。この場合、ＦＷ更新部１７０は、稼働中のファームウェアから最終更新先の版数のファームウェアへ、中間ファームウェアを介さずに、更新可能である。例えば、ＦＷ更新部１７０は、最終更新先の版数のファームウェアのプログラムをＦＷ配信サーバ４００からダウンロードし、記憶部１５０に格納する。ＦＷ更新部１７０は、ダウンロードしたファームウェアのプログラムをＣＭ１２０に提供し、ファームウェアの活性交換の開始を指示する。すると、ＦＷ更新部１７０ａは、最終更新先の版数のファームウェアをＣＭ１２０に適用する（ＣＭ１２０の再起動を伴う）。ＣＭ１２０に対する適用が完了すると、ＦＷ更新部１７０は、最終更新先の版数のファームウェアをＣＭ１１０に適用する（ＣＭ１１０の再起動を伴う）。そして、ファームウェアの活性交換の処理を完了する。
【０１２４】
（Ｓ１６）ＦＷ取得部１６０は、ＦＷ互換性テーブル１５１を参照して、活性交換可能な最新の中間ファームウェアの版数を計算する。例えば、ＦＷ取得部１６０は、ステップＳ１６を最初に実行するとき、稼働中のファームウェアの版数に対して、活性交換可能な（互換性のある）最新の中間ファームウェアの版数を計算する。例えば、稼働中のファームウェアの版数がＶ１であり、最終更新先の版数がＶｂである場合を考える。図９の例でいえば、版数Ｖ１に対して活性交換可能な最新の中間ファームウェアの版数は版数Ｖａである。版数Ｖ１と版数Ｖａとは活性交換可能であるが、版数Ｖ１と版数Ｖａ１（版数Ｖａよりも１世代新しい版数）とでは活性交換不可だからである。ステップＳ１７以降のステップで中間ファームウェアを取得した後にステップＳ１６を実行するとき、ＦＷ取得部１６０は、取得済の中間ファームウェアのうち最新の版数に対して、活性交換可能な最新の中間ファームウェア（未取得のもの）の版数を計算する。計算方法は、版数Ｖ１に対して中間ファームウェアの版数Ｖａを求めたときと同様である。
【０１２５】
（Ｓ１７）ＦＷ取得部１６０は、ＦＷ互換性テーブル１５１を参照して、モジュール毎の版数の差分をチェックする。例えば、全体版数Ｖ１と全体版数Ｖａとの差分をチェックする場合を考える。全体版数Ｖ１のモジュール単位版数は“Ａ１／Ｂ１／Ｃ１”である。全体版数Ｖａのモジュール単位版数は“Ａ３／Ｂ３／Ｃ１”である。よって、モジュール毎の版数の差分は“Ａ３／Ｂ３”である。
【０１２６】
（Ｓ１８）ＦＷ取得部１６０は、更新分のＦＷプログラムをモジュール毎に配信サーバ４００からダウンロードする。例えば、ステップＳ１７で、モジュール毎の版数の差分を“Ａ３／Ｂ３”と求めているなら、ＦＷ取得部１６０は、モジュール単位ファームウェアＡの版数Ａ３のプログラムと、モジュール単位ファームウェアＢの版数Ｂ３のプログラムとをダウンロードする。この場合、ＦＷ取得部１６０は、モジュール単位ファームウェアＣの版数Ｃ１に対応するプログラムをダウンロードしなくてよい。
【０１２７】
（Ｓ１９）ＦＷ取得部１６０は、ダウンロードしたプログラムを適用順序および全体版数に対応付けて中間ＦＷテーブル１５４に登録する。例えば、中間ＦＷテーブル１５４に最初にレコードを登録するときは、適用順序“１”とする。次にレコードを登録するときは、適用順序“２”とする。以降、同様に、ＦＷ取得部１６０は、１ずつ加算した値を適用順序の項目に登録する。適用フラグの項目はデフォルト値“ｆａｌｓｅ”とする。
【０１２８】
（Ｓ２０）ＦＷ取得部１６０は、ＦＷ互換性テーブル１５１および中間ＦＷテーブル１５４を参照して、入手済のファームウェアのうち最新のものから活性交換可能な未取得のファームウェアがあるか否かを判定する。ない場合、処理をステップＳ２１に進める。ある場合、処理をステップＳ２２に進める。
【０１２９】
（Ｓ２１）ＦＷ取得部１６０は、ファームウェアの活性交換を行えない旨をユーザに通知する。通知方法としては、ステップＳ１３と同様の方法が考えられる。そして、処理を終了する。
【０１３０】
（Ｓ２２）ＦＷ取得部１６０は、活性交換可能な未取得のファームウェアに、最終更新先の版数のファームウェアが含まれるか否かを判定する。含まれる場合、処理をステップＳ２３に進める。含まれない場合、処理をステップＳ１６に進める。
【０１３１】
（Ｓ２３）ＦＷ更新部１７０は、中間ファームウェアを用いたファームウェアの活性交換（階段式連続活性交換と称する）を実行する。
図１２は、第２の実施の形態の階段式連続活性交換例を示すフローチャートである。以下、図１２に示す処理をステップ番号に沿って説明する。以下に示す手順は、図１１のステップＳ２３に相当する。
【０１３２】
（Ｓ３１）ＦＷ取得部１６０は、配信サーバ４００から最終更新先の版数のファームウェアのプログラムをダウンロードし、記憶部１５０に格納する。
（Ｓ３２）ＦＷ更新部１７０は、中間ＦＷテーブル１５４を参照して、１系に次に適用するファームウェアの版数が最終更新先の版数であるか否かを判定する。最終更新先の版数でない場合、処理をステップＳ３３に進める。最終更新先の版数である場合、処理をステップＳ３６に進める。具体的には、中間ＦＷテーブル１５４の適用フラグが全て“ｔｒｕｅ”であれば、１系に次に適用するファームウェアの版数は最終更新先の版数である。適用フラグ“ｆａｌｓｅ”のレコードが中間ＦＷテーブル１５４にあれば、１系に次に適用するファームウェアは最終更新先の版数ではない。
【０１３３】
（Ｓ３３）ＦＷ更新部１７０は、中間ファームウェアを１系に適用する。具体的には、ＦＷ更新部１７０は、中間ＦＷテーブル１５４を参照して、適用フラグが“ｆａｌｓｅ”であるレコードのうち、適用順序が最小のものを取得する。ＦＷ更新部１７０は、取得したレコードに登録されたモジュール単位ＦＷプログラムを取得し、ＣＭ１２０に出力する。ＦＷ取得部１６０ａは、モジュール単位ＦＷプログラムを取得し、記憶部１５０ａに格納する。ＦＷ更新部１７０は、提供した版数の中間ファームウェアの適用をＦＷ更新部１７０ａに指示する。ＦＷ更新部１７０ａは、記憶部１５０ａを参照して、中間ファームウェアをＣＭ１２０に適用する（ＣＭ１２０の再起動を伴う）。ＦＷ更新部１７０ａは、ＦＷ更新部１７０に適用完了を通知する。ＦＷ更新部１７０は、適用された中間ファームウェアについて、中間ＦＷテーブル１５４の適用フラグを“ｆａｌｓｅ”から“ｔｒｕｅ”に設定変更する。
【０１３４】
（Ｓ３４）ＦＷ更新部１７０は、中間ＦＷテーブル１５４を参照して、０系に次に適用するファームウェアの版数が最終更新先の版数であるか否かを判定する。最終更新先の版数でない場合、処理をステップＳ３５に進める。最終更新先の版数である場合、処理をステップＳ３８に進める。判定方法は、ステップＳ３２と同様である。
【０１３５】
（Ｓ３５）ＦＷ更新部１７０は、中間ファームウェアを０系に適用する。具体的には、ＦＷ更新部１７０は、中間ＦＷテーブル１５４を参照して、適用フラグが“ｆａｌｓｅ”であるレコードのうち、適用順序が最小のものを取得する。ＦＷ更新部１７０は、そのレコードに登録されたモジュール単位ＦＷプログラムを取得し、ＣＭ１１０に適用する（ＣＭ１１０の再起動を伴う）。ＦＷ更新部１７０は、適用が完了すると、適用された中間ファームウェアについて、中間ＦＷテーブル１５４の適用フラグを“ｆａｌｓｅ”から“ｔｒｕｅ”に設定変更する。そして、処理をステップＳ３２に進める。
【０１３６】
（Ｓ３６）ＦＷ更新部１７０は、最終更新先の版数のファームウェアを１系に適用する。具体的には、ＦＷ更新部１７０は、最終更新先の版数のファームウェアのプログラムを記憶部１５０から取得し、ＣＭ１２０に出力し、ファームウェアの活性交換の開始を指示する。すると、ＦＷ更新部１７０ａは、最終更新先の版数のファームウェアをＣＭ１２０に適用する（ＣＭ１２０の再起動を伴う）。ＦＷ更新部１７０ａは、ＦＷ更新部１７０に適用完了を通知する。
【０１３７】
（Ｓ３７）ＦＷ更新部１７０は、ＦＷ更新部１７０ａから適用完了の通知を受けると、最終更新先の版数のファームウェアを０系にも適用する。具体的には、ＦＷ更新部１７０は、最終更新先の版数のファームウェアのプログラムを記憶部１５０から取得し、ＣＭ１１０に適用する（ＣＭ１１０の再起動を伴う）。そして、処理を終了する。
【０１３８】
（Ｓ３８）ＦＷ更新部１７０は、最終更新先の版数のファームウェアを０系に適用する。具体的な適用方法は、ステップＳ３７と同様である。
（Ｓ３９）ＦＷ更新部１７０は、最終更新先の版数のファームウェアを１系にも適用する。具体的な適用方法は、ステップＳ３６と同様である。そして、処理を終了する。
【０１３９】
このように、ＦＷ更新部１７０，１７０ａは、両系におけるファームウェアの互換性を保ちながら、片系ずつ交互に、異なる版数のファームウェアを適用していく。
図１３は、第２の実施の形態のＦＷ更新例（その１）を示す図である。図１３では、両系で稼働中のファームウェアの版数（全体版数）がＶ１であり、最終更新先の版数がＶｂである場合を例示している。この場合、図１１の手順によれば、ＦＷ取得部１６０は、中間ファームウェアとして、図１０で示した版数Ｖａに対応する情報をＦＷ配信サーバ４００からダウンロードし、中間ＦＷテーブル１５４に格納する。また、ＦＷ取得部１６０は、最終更新先の版数Ｖｂに対応する情報もＦＷ配信サーバ４００からダウンロードし、記憶部１５０に格納する。
【０１４０】
このとき、ＦＷ取得部１６０は、版数Ｖａの情報として、版数Ｖ１，Ｖａの差分である“Ａ３／Ｂ３”のモジュール単位ＦＷプログラムをダウンロードすればよい。“Ｃ１”に対応するモジュール単位ＦＷプログラムは、版数Ｖ１のファームウェアに含まれており、既に適用済なので、ダウンロード不要である。
【０１４１】
また、ＦＷ取得部１６０は、版数Ｖｂの情報として、版数Ｖａ，Ｖｂの差分である“Ａ５／Ｃ２”のモジュール単位ＦＷプログラムをダウンロードすればよい。“Ｂ３”に対応するモジュール単位ＦＷプログラムは、版数Ｖａの情報に含まれているので、ダウンロード不要である。そして、ＦＷ更新部１７０は、次のように両系のファームウェアを更新していく。
【０１４２】
まず、ＦＷ更新部１７０は、ＦＷ更新部１７０ａに対して版数Ｖａの中間ファームウェアの適用を指示する。ＦＷ更新部１７０ａは、版数Ｖａの中間ファームウェアをＣＭ１２０に適用する（ステップＳＴ１１）。このとき、ＦＷ更新部１７０ａは、版数Ｖ１との差分“Ａ３／Ｂ３”に相当するモジュール単位ＦＷプログラムを交換すればよい。“Ｃ１”に相当するモジュール単位ＦＷプログラムに更新はないからである。
【０１４３】
図９で例示したように版数Ｖ１，Ｖａのファームウェアは互換性がある。したがって、０系で版数Ｖ１のファームウェアが稼働し、１系で版数Ｖａのファームウェアが稼働する状態が発生しても、両系は適切に連携できる。
【０１４４】
次に、ＦＷ更新部１７０は、最終更新先の版数ＶｂのファームウェアをＣＭ１１０に適用する（ステップＳＴ１２）。このとき、ＦＷ更新部１７０は、版数Ｖｂに対応するモジュール単位ＦＷプログラムのうち、“Ｂ３”に対応するモジュール単位ＦＷプログラムを、中間ＦＷテーブル１５４の全体版数Ｖａのレコードから取得できる。
【０１４５】
図９で例示したように、版数Ｖａ，Ｖｂのファームウェアは互換性がある。したがって、０系で版数Ｖｂのファームウェアが稼働し、１系で版数Ｖａのファームウェアが稼働する状態が発生しても、両系は適切に連携できる。
【０１４６】
次に、ＦＷ更新部１７０は、ＦＷ更新部１７０ａに対して版数Ｖｂのファームウェアの適用を指示する。ＦＷ更新部１７０ａは、版数ＶｂのファームウェアをＣＭ１２０に適用する（ステップＳＴ１３）。このとき、ＦＷ更新部１７０ａは、版数Ｖａとの差分“Ａ５／Ｃ２”に相当するモジュール単位ＦＷプログラムを交換すればよい。“Ｂ３”に相当するモジュール単位ＦＷプログラムに更新はないからである。
【０１４７】
これにより、０系、１系の両系に対する版数Ｖｂのファームウェアの適用が完了する。
図１４は、第２の実施の形態のＦＷ更新例（その２）を示す図である。図１４では、両系で稼働中のファームウェアの版数（全体版数）がＶ１であり、最終更新先の版数がＶｃである場合を例示している。ここで、版数Ｖｂ，Ｖｃのファームウェアは互換性があるものとする。この場合、図１１の手順によれば、ＦＷ取得部１６０は、中間ファームウェアとして、版数Ｖａ，Ｖｂのレコードを中間ＦＷテーブル１５４に格納する。また、ＦＷ取得部１６０は、最終更新先の版数Ｖｃに対応する情報もＦＷ配信サーバ４００からダウンロードし、記憶部１５０に格納する。
【０１４８】
このとき、ＦＷ取得部１６０は、版数Ｖａの情報として、版数Ｖ１，Ｖａの差分である“Ａ３／Ｂ３”のモジュール単位ＦＷプログラムをダウンロードすればよい。“Ｃ１”に対応するモジュール単位ＦＷプログラムは、版数Ｖ１のファームウェアに含まれており、既に適用済なので、ダウンロード不要である。
【０１４９】
また、ＦＷ取得部１６０は、版数Ｖｂの情報として、版数Ｖａ，Ｖｂの差分である“Ａ５／Ｃ２”のモジュール単位ＦＷプログラムをダウンロードすればよい。“Ｂ３”に対応するモジュール単位ＦＷプログラムは、版数Ｖａの情報に含まれているので、ダウンロード不要である。
【０１５０】
同様に、ＦＷ取得部１６０は、版数Ｖｃの情報として、版数Ｖｂ，Ｖｃの差分である“Ａ６／Ｂ４”のモジュール単位ＦＷプログラムをダウンロードすればよい。“Ｃ２”に対応するモジュール単位ＦＷプログラムは、版数Ｖｂの情報に含まれているので、ダウンロード不要である。そして、ＦＷ更新部１７０は、次のように両系のファームウェアを更新していく。
【０１５１】
まず、ＦＷ更新部１７０は、ＦＷ更新部１７０ａに対して版数Ｖａの中間ファームウェアの適用を指示する。ＦＷ更新部１７０ａは、版数Ｖａの中間ファームウェアをＣＭ１２０に適用する（ステップＳＴ２１）。このとき、ＦＷ更新部１７０ａは、版数Ｖ１との差分“Ａ３／Ｂ３”に相当するモジュール単位ＦＷプログラムを交換すればよい。“Ｃ１”に相当するモジュール単位ＦＷプログラムに更新はないからである。
【０１５２】
図９で例示したように版数Ｖ１，Ｖａのファームウェアは互換性がある。したがって、０系で版数Ｖ１のファームウェアが稼働し、１系で版数Ｖａのファームウェアが稼働する状態が発生しても、両系は適切に連携できる。
【０１５３】
次に、ＦＷ更新部１７０は、版数Ｖｂの中間ファームウェアをＣＭ１１０に適用する（ステップＳＴ２２）。このとき、ＦＷ更新部１７０は、版数Ｖｂに対応するモジュール単位ＦＷプログラムのうち、“Ｂ３”に対応するモジュール単位ＦＷプログラムを、中間ＦＷテーブル１５４の全体版数Ｖａのレコードから取得できる。
【０１５４】
図９で例示したように、版数Ｖａ，Ｖｂのファームウェアは互換性がある。したがって、０系で版数Ｖｂのファームウェアが稼働し、１系で版数Ｖａのファームウェアが稼働する状態が発生しても、両系は適切に連携できる。
【０１５５】
次に、ＦＷ更新部１７０は、ＦＷ更新部１７０ａに対して最終更新先の版数Ｖｃのファームウェアの適用を指示する。このとき、ＦＷ更新部１７０は、版数Ｖｃに対応するモジュール単位ＦＷプログラムのうち、“Ｃ２”に対応するモジュール単位ＦＷプログラムを、中間ＦＷテーブル１５４の全体版数Ｖｂのレコードから取得できる。ＦＷ更新部１７０ａは、版数Ｖｃの中間ファームウェアをＣＭ１２０に適用する（ステップＳＴ２３）。
【０１５６】
版数Ｖｂ，Ｖｃのファームウェアは互換性がある。したがって、０系で版数Ｖｂのファームウェアが稼働し、１系で版数Ｖｃのファームウェアが稼働する状態が発生しても、両系は適切に連携できる。
【０１５７】
次に、ＦＷ更新部１７０は、版数ＶｃのファームウェアをＣＭ１１０に適用する（ステップＳＴ２４）。このとき、ＦＷ更新部１７０は、版数Ｖｂとの差分“Ａ６／Ｂ４”に相当するモジュール単位ＦＷプログラムを交換すればよい。“Ｃ２”に相当するモジュール単位ＦＷプログラムに更新はないからである。
【０１５８】
これにより、０系、１系の両系に対する版数Ｖｃのファームウェアの適用が完了する。第２の実施の形態のストレージ装置１００によればファームウェア更新を高速化できる。
ここで、例えば、両系のファームウェアを１世代ずつ順次更新する方法も考えられる。版数の差が１世代であれば、通常、ファームウェアの互換性は保たれていると考えられるからである。具体的には、ファームウェアを版数（全体版数）Ｖ１からＶｂまで更新する場合に、まず、版数Ｖ２のファームウェアを１系に適用し、次に、版数Ｖ２のファームウェアを０系に適用する。次に、版数Ｖ３のファームウェアを１系に適用し、次に版数Ｖ３のファームウェアを０系に適用する。これを繰り返して両系のファームウェアを１世代ずつ更新していく。しかし、この方法では、ファームウェアの更新手順が増大するおそれがある。ファームウェアの更新手順が増大すると、ファームウェア更新に失敗するリスクも高まる。
【０１５９】
そこで、ストレージ装置１００は、他方の系に適用された版数と互換性のある範囲で、相手の系よりも新しい版数のファームウェアを片系ずつ交互に適用することで、ファームウェアの更新手順のステップ数を低減できる。
【０１６０】
特に、ストレージ装置１００の方法では、他方の系に適用された版数と互換性があり、かつ、相手の系よりも新しい複数の版数のうち最新の版数を選択する。このため、例えば、版数Ｖ１と版数Ｖａとの間の他の版数（版数Ｖ２など）に対応するファームウェアの適用を省ける。このため、ファームウェアの更新手順のステップ数をより一層低減できる。
【０１６１】
更に、全版数それぞれについて、未取得であるモジュール単位ＦＷプログラムに限定して取得するので、複数の全版数に対応するモジュール単位ＦＷプログラムを重複してダウンロードしなくて済む。
【０１６２】
なお、第２の実施の形態の説明では、モジュール単位ファームウェアとして、ＣＭ１１０，１２０、ＩＯＭ１３０，１４０およびＣＡ１１４，１１５，１２４，１２５の３種類のファームウェアを例示したが、他の種類のファームウェアも考えられる。例えば、ＣＭ１１０，１２０で用いられるＢＩＯＳ（Basic Input/Output System）やＥＸＰ１１７，１２７のファームウェアもモジュール単位ファームウェアとして考えることができる。
【０１６３】
ファームウェアにモジュール単位ファームウェア（サブファームウェア）が２種類または４種類以上含まれる場合にも、第２の実施の形態の方法を適用できる。例えば、１つのファームウェアに含まれるモジュール単位ファームウェアがＮ種類（Ｎは２以上の整数）ならば、Ｎ種類のモジュール単位ファームウェアそれぞれの互換性指数の合計が、当該ファームウェアの互換性指数合計となる。
【０１６４】
また、セキュリティの関係上、ストレージ装置１００からネットワーク５０に対するアクセスが制限されることもある。この場合、ストレージ装置１００は、ＦＷ配信サーバ４００から直接ファームウェアをダウンロードすることは困難になる。そこで、ストレージ装置１００は、中間ファームウェアの全版数や最終更新先の全版数を管理サーバ２００に通知して、ＦＷ配信サーバ４００からのファームウェアのダウンロードを管理サーバ２００に代行させてもよい。
【０１６５】
［第３の実施の形態］
以下、第３の実施の形態を説明する。前述の第２の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【０１６６】
第２の実施の形態では、ＣＭ１１０，１２０にＦＷ取得部１６０，１６０ａを設けるものとしたが、他の機能配置も考えられる。第３の実施の形態では、ファームウェアの取得およびファームウェアの更新を管理サーバ２００により制御する方法を提供する。
【０１６７】
ここで、第３の実施の形態の情報処理システムは、図２で説明した第２の実施の形態の情報処理システムと同様である。また、第３の実施の形態の各装置および各装置のハードウェアは、図３，４，５で説明した第２の実施の形態の各装置および各装置のハードウェア例と同様である。そこで、第３の実施の形態では、第２の実施の形態と同様の名称および符号を用いて装置や機能モジュールなどの各要素を指し示す。
【０１６８】
第３の実施の形態では、ＦＷ配信サーバ４００からファームウェアを取得する機能や、ファームウェアをＣＭ１１０，１２０に適用する機能を管理サーバ２００が担う。すなわち、第２の実施の形態ではストレージ装置１００が有していた機能の一部を、ストレージ装置１００ではなく管理サーバ２００に設ける点が、第２の実施の形態と異なる。
【０１６９】
図１５は、第３の実施の形態の機能例を示す図である。管理サーバ２００は、記憶部２１０、ＦＷ取得部２３０およびＦＷ更新制御部２４０を有する。管理サーバ２００の機能は、ＲＡＭ２０２に記憶されたプログラムをプロセッサ２０１が実行することで実現されてもよい。
【０１７０】
記憶部２１０は、ＲＡＭ２０２やＨＤＤ２０３に確保された記憶領域として実現できる。記憶部２１０は、記憶部１５０，１５０ａの代わりに、ＦＷ互換性テーブル１５１、互換性指数テーブル１５２、活性交換可能閾値情報１５３および中間ＦＷテーブル１５４を記憶する。
【０１７１】
ＦＷ取得部２３０は、ＦＷ配信サーバ４００からファームウェアをダウンロードして、記憶部２１０に格納する。ＦＷ取得部２３０がＦＷ配信サーバ４００からファームウェアをダウンロードするタイミングとしては、ユーザによって指定されたタイミングや、ＦＷ配信サーバ４００から新たなファームウェアの配信を開始した旨の通知を受けたタイミングが考えられる。
【０１７２】
ＦＷ取得部２３０は、図１１のフローチャートにより例示したＦＷ取得部１６０（または、ＦＷ取得部１６０ａ）と同様の手順により、中間ファームウェアや最終更新先のファームウェアをＦＷ配信サーバ４００から取得する。図１１で説明した手順におけるＦＷ取得部１６０の処理を、ＦＷ取得部２３０の処理として読み替えればよい。ＦＷ取得部２３０は、記憶部２１０に記憶された情報を参照し、また、新たに取得した情報（中間ＦＷテーブル１５４など）を記憶部２１０に格納して、ＦＷ取得部１６０と同様の処理を実行できる。
【０１７３】
ＦＷ更新制御部２４０は、ＦＷ取得部２３０によって新しいファームウェアが取得されると、取得されたファームウェアを、ＣＭ１１０，１２０に適用する。ＦＷ更新制御部２４０は、図１２のフローチャートにより例示したＦＷ更新部１７０（または、ＦＷ更新部１７０ａ）と同様の手順により、記憶部２１０に記憶された情報を参照して、中間ファームウェアや最終更新先のファームウェアをＣＭ１１０，１２０に適用できる。図１２で説明した手順におけるＦＷ更新部１７０の処理を、ＦＷ更新制御部２４０の処理として読み替えればよい。ただし、ＣＭ１１０にファームウェアを適用する場合には、ＦＷ更新制御部２４０は、適用対象のファームウェアをＦＷ更新部１７０に提供し、適用を指示することになる。
【０１７４】
ＣＭ１１０は、記憶部１５０およびＦＷ更新部１７０を有する。ＣＭ１２０は、記憶部１５０ａおよびＦＷ更新部１７０ａを有する。記憶部１５０，１５０ａは、ＦＷ更新制御部２４０から取得したファームウェアのプログラムを格納する。ＦＷ更新部１７０は、ＦＷ更新制御部２４０の指示に従って、ＣＭ１１０で実行されるファームウェアを更新する。ＦＷ更新部１７０ａは、ＦＷ更新制御部２４０の指示に従って、ＣＭ１２０で実行されるファームウェアを更新する。
【０１７５】
このように、管理サーバ２００が、ストレージ装置１００内の冗長化されたＣＭ１１０，１２０の制御に用いられるファームウェアの異なる版同士の互換性の情報を、記憶部２１０を用いて記憶してもよい。管理サーバ２００は、ＣＭ１１０，１２０の両方のモジュールのファームウェアを第１の版から、第１の版と互換性のない第２の版へ更新する際に、記憶部２１０に記憶された情報を参照して、第１の版から第２の版までのうち、相手のモジュールに現在適用されている版のファームウェアと互換性があり、かつ、相手のモジュールに現在適用されている版よりも新しい版のファームウェアを、ＣＭ１１０，１２０の片方ずつ交互に適用する。第３の実施の形態の管理サーバ２００は、第１の実施の形態のファームウェア更新装置１０の一例と考えることができる。
【０１７６】
第３の実施の形態によれば、ストレージ装置１００がＦＷ配信サーバ４００から直接ファームウェアをダウンロードできなくても、管理サーバ２００を介して、ファームウェアを取得し、ファームウェアの更新を行える。
【０１７７】
［第４の実施の形態］
以下、第４の実施の形態を説明する。前述の第２，第３の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【０１７８】
第４の実施の形態の情報処理システムは、図２で説明した第２の実施の形態の情報処理システムと同様である。また、第４の実施の形態の各装置および各装置のハードウェアは、図３，４，５で説明した第２の実施の形態の各装置および各装置のハードウェア例と同様である。そこで、第４の実施の形態では、第２の実施の形態と同様の名称および符号を用いて装置や機能モジュールなどの各要素を指し示す。
【０１７９】
ただし、第４の実施の形態のストレージ装置１００は、ＣＭ１１０，１２０を管理する管理ユニットとして、管理モジュールを有している。管理モジュールは、管理処理に用いられるプロセッサ、ＲＡＭ、フラッシュメモリおよびネットワーク３０に接続可能な通信インタフェースを備える。
【０１８０】
第４の実施の形態では、ＦＷ配信サーバ４００からファームウェアを取得する機能や、ファームウェアをＣＭ１１０，１２０に適用する機能を管理モジュールが担う。すなわち、第２の実施の形態ではＣＭ１１０，１２０が有していた機能の一部を、ＣＭ１１０，１２０ではなく管理モジュールに設ける点が、第２の実施の形態と異なる。
【０１８１】
図１６は、第４の実施の形態の機能例を示す図である。管理モジュール１８０は、記憶部１８１、ＦＷ取得部１８２およびＦＷ更新制御部１８３を有する。管理モジュール１８０の機能は、管理モジュール１８０が備えるＲＡＭに記憶されたプログラムを、管理モジュール１８０が備えるプロセッサが実行することで実現されてもよい。
【０１８２】
記憶部１８１は、管理モジュール１８０が備えるＲＡＭやフラッシュメモリに確保された記憶領域として実現できる。記憶部１８１は、記憶部１５０，１５０ａの代わりに、ＦＷ互換性テーブル１５１、互換性指数テーブル１５２、活性交換可能閾値情報１５３および中間ＦＷテーブル１５４を記憶する。
【０１８３】
ＦＷ取得部１８２は、ＦＷ配信サーバ４００からファームウェアをダウンロードして、記憶部１８１に格納する。ＦＷ取得部１８２がＦＷ配信サーバ４００からファームウェアをダウンロードするタイミングとしては、ユーザによって指定されたタイミングや、ＦＷ配信サーバ４００から新たなファームウェアの配信を開始した旨の通知を受けたタイミングが考えられる。
【０１８４】
ＦＷ取得部１８２は、図１１のフローチャートにより例示したＦＷ取得部１６０（または、ＦＷ取得部１６０ａ）と同様の手順により、中間ファームウェアや最終更新先のファームウェアをＦＷ配信サーバ４００から取得する。図１１で説明した手順におけるＦＷ取得部１６０の処理を、ＦＷ取得部１８２の処理として読み替えればよい。ＦＷ取得部１８２は、記憶部１８１に記憶された情報を参照し、また、新たに取得した情報（中間ＦＷテーブル１５４など）を記憶部１８１に格納して、ＦＷ取得部１６０と同様の処理を実行できる。
【０１８５】
ＦＷ更新制御部１８３は、ＦＷ取得部１８２によって新しいファームウェアが取得されると、取得されたファームウェアを、ＣＭ１１０，１２０に適用する。ＦＷ更新制御部１８３は、図１２のフローチャートにより例示したＦＷ更新部１７０（または、ＦＷ更新部１７０ａ）と同様の手順により、記憶部１８１に記憶された情報を参照して、中間ファームウェアや最終更新先のファームウェアをＣＭ１１０，１２０に適用できる。図１２で説明した手順におけるＦＷ更新部１７０の処理を、ＦＷ更新制御部１８３の処理として読み替えればよい。ただし、ＣＭ１１０にファームウェアを適用する場合には、ＦＷ更新制御部１８３は、適用対象のファームウェアをＦＷ更新部１７０に提供し、適用を指示することになる。
【０１８６】
ＣＭ１１０は、記憶部１５０およびＦＷ更新部１７０を有する。ＣＭ１２０は、記憶部１５０ａおよびＦＷ更新部１７０ａを有する。記憶部１５０，１５０ａは、ＦＷ更新制御部１８３から取得したファームウェアのプログラムを格納する。ＦＷ更新部１７０は、ＦＷ更新制御部１８３の指示に従って、ＣＭ１１０で実行されるファームウェアを更新する。ＦＷ更新部１７０ａは、ＦＷ更新制御部１８３の指示に従って、ＣＭ１２０で実行されるファームウェアを更新する。
【０１８７】
このように、管理モジュール１８０が、ストレージ装置１００内の冗長化されたＣＭ１１０，１２０の制御に用いられるファームウェアの異なる版同士の互換性の情報を、記憶部１８１を用いて記憶してもよい。管理モジュール１８０は、ＣＭ１１０，１２０の両方のモジュールのファームウェアを第１の版から、第１の版と互換性のない第２の版へ更新する際に、記憶部１８１に記憶された情報を参照して、第１の版から第２の版までのうち、相手のモジュールに現在適用されている版のファームウェアと互換性があり、かつ、相手のモジュールに現在適用されている版よりも新しい版のファームウェアを、ＣＭ１１０，１２０の片方ずつ交互に適用する。管理モジュール１８０は、第１の実施の形態のファームウェア更新装置１０の一例と考えることができる。
【０１８８】
このように、管理モジュール１８０をＣＭ１１０，１２０とは別個に設けることで、プロセッサ１１１，１２１、ＲＡＭ１１２，１２２およびフラッシュメモリ１１３，１２３のリソース使用量を軽減することも考えられる。
【０１８９】
なお、第１の実施の形態の情報処理は、演算部１２にプログラムを実行させることで実現できる。第２の実施の形態の情報処理は、プロセッサ１１１，１２１にプログラムを実行させることで実現できる。第３の実施の形態の情報処理は、プロセッサ２０１にプログラムを実行させることで実現できる。第４の実施の形態の情報処理は、管理モジュール１８０が備えるプロセッサにプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体３３として例示した光ディスクやメモリカードなど）に記録できる。
【０１９０】
例えば、プログラムを記録した記録媒体を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体に記録されたプログラムまたは他のコンピュータから受信したプログラムを、ＲＡＭ、フラッシュメモリおよびＨＤＤなどの記憶装置に格納し（インストールし）、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【０１９１】
１０  ファームウェア更新装置
１１  記憶部
１１ａ  情報
１２  演算部
１２ａ  更新手順
２０  ストレージ装置
２１，２２  モジュール
２１ａ，２２ａ  ＲＡＭ
２１ｂ，２２ｂ  フラッシュメモリ
２１ｃ，２２ｃ  プロセッサ
２３，２４  記憶装置群
【図１】
2015225508.tif 000003
【図２】
2015225508.tif 000004
【図３】
2015225508.tif 000005
【図４】
2015225508.tif 000006
【図５】
2015225508.tif 000007
【図６】
2015225508.tif 000008
【図７】
2015225508.tif 000009
【図８】
2015225508.tif 000010
【図９】
2015225508.tif 000011
【図１０】
2015225508.tif 000012
【図１１】
2015225508.tif 000013
【図１２】
2015225508.tif 000014
【図１３】
2015225508.tif 000015
【図１４】
2015225508.tif 000016
【図１５】
2015225508.tif 000017
【図１６】
2015225508.tif 000018