(57)【要約】【課題】ストレージ装置に含まれる複数のストレージ制御装置のいずれかのファームウェアを更新する間に、ストレージの構成に関する構成情報を変更する命令に対する処理を停滞させず、ファームウェアの更新の遅延を抑えて実行すること。【解決手段】図１の（１）で示すように、第１のストレージ制御装置１０１＃１は、システム運用ソフトから、設定系のコマンドｃｍｍを受け付ける。図１の（２）で示すように、第１のストレージ制御装置１０１＃１は、コマンドｃｍｍに対するコマンド処理ｃｍｍ＿ｐを実行可能な単位に分割した複数の分割コマンド処理ｃｍｍ＿ｓｐ１、ｃｍｍ＿ｓｐ２を特定する特定情報を、キューｑｕに記憶する。図１の（３−１）で示すように、第１のストレージ制御装置１０１＃１は、分割改版処理ｒｅｖ＿ｓｐ１を第２のストレージ制御装置１０１＃２が実行中となる時刻ｔ１〜ｔ２の間に、分割コマンド処理ｃｍｍ＿ｓｐ１を実行する。【選択図】図１
2018195088.tif 000002
【特許請求の範囲】
【請求項１】
ストレージを制御する複数のストレージ制御装置を有するストレージ装置であって、
前記複数のストレージ制御装置の各ストレージ制御装置は、
前記複数のストレージ制御装置間で同期される前記ストレージの構成に関する構成情報を記憶し、
前記複数のストレージ制御装置のうち第１のストレージ制御装置は、
前記複数のストレージ制御装置のうち第２のストレージ制御装置がファームウェアを更新する更新処理を実行中に、前記構成情報を変更する命令を受け付けた場合、前記命令に対する処理を実行可能な単位に分割した複数の分割命令処理を特定する特定情報を記憶領域に記憶し、
前記更新処理を分割した複数の分割更新処理のうち前記命令に対する処理と並列して実行可能な分割更新処理を前記第２のストレージ制御装置が実行中に、前記特定情報から特定される前記複数の分割命令処理の各分割命令処理を実行する、
ことを特徴とするストレージ装置。
【請求項２】
前記第１のストレージ制御装置は、前記複数の分割更新処理の各分割更新処理にかかる所定時間を記憶しており、
前記第１のストレージ制御装置は、
前記複数の分割更新処理のうち前記命令に対する処理と並列して実行可能な分割更新処理を前記第２のストレージ制御装置が実行開始してから前記分割更新処理にかかる所定時間が経過するまで、前記特定情報から特定される前記各分割命令処理を実行し、
前記複数の分割命令処理のうち実行していない分割命令処理がある場合、前記分割更新処理の次に前記命令に対する処理と並列して実行可能な次の分割更新処理を前記第２のストレージ制御装置が実行開始してから前記次の分割更新処理にかかる所定時間が経過するまで、前記複数の分割命令処理のうち実行していない分割命令処理を実行する、
ことを特徴とする請求項１に記載のストレージ装置。
【請求項３】
前記第１のストレージ制御装置は、
前記第２のストレージ制御装置が前記更新処理を実行中に、前記構成情報を変更し、かつ、前記命令の送信元が前記命令の応答を受け付ける受け付け処理を終了するまで前記受け付け処理とは異なる他の処理を実行しない同期命令を受け付けた場合、受け付けた前記同期命令に対する処理を特定する特定情報を前記記憶領域に記憶し、
前記複数の分割更新処理のうち前記命令に対する処理と並列して実行不可能な分割更新処理を前記第２のストレージ制御装置が実行する前に、前記特定情報から特定される前記同期命令に対する処理を実行する、
ことを特徴とする請求項１または２に記載のストレージ装置。
【請求項４】
前記複数の分割更新処理のうち前記命令に対する処理と並列して実行可能な分割更新処理は、前記ファームウェアを前記第２のストレージ制御装置の不揮発性の記憶領域に書き込む処理と、前記第２のストレージ制御装置を前記ストレージ装置に組み込むことが可能か否かを判断する処理と、前記第２のストレージ制御装置を前記ストレージ装置に組み込んだ後に前記ストレージ装置内の前記第２のストレージ制御装置以外の他の装置と前記第２のストレージ制御装置とが接続されているか確認する処理とであることを特徴とする請求項１〜３のいずれか一つに記載のストレージ装置。
【請求項５】
ストレージを制御する複数のストレージ制御装置を有するストレージ装置における１のストレージ制御装置であって、
前記複数のストレージ制御装置間で同期される前記ストレージの構成に関する構成情報を記憶する記憶部と、
前記複数のストレージ制御装置のうち他のストレージ制御装置がファームウェアを更新する更新処理を実行中に、前記構成情報を変更する命令を受け付けた場合、前記命令に対する処理を実行可能な単位に分割した複数の分割命令処理を特定する特定情報を記憶領域に記憶し、
前記更新処理を分割した複数の分割更新処理のうち前記命令に対する処理と並列して実行可能な分割更新処理を前記他のストレージ制御装置が実行中に、前記特定情報から特定される前記複数の分割命令処理の各分割命令処理を実行する制御部と、
を備えてなることを特徴とするストレージ制御装置。
【請求項６】
ストレージを制御する複数のストレージ制御装置を有し、前記ストレージの構成に関する構成情報が前記複数のストレージ制御装置間で同期されるストレージ装置における１のストレージ制御装置のストレージ制御プログラムであって、
前記１のストレージ制御装置に、
前記複数のストレージ制御装置のうち他のストレージ制御装置がファームウェアを更新する更新処理を実行中に、前記構成情報を変更する命令を受け付けた場合、前記命令に対する処理を実行可能な単位に分割した複数の分割命令処理を特定する特定情報を記憶領域に記憶し、
前記更新処理を分割した複数の分割更新処理のうち前記命令に対する処理と並列して実行可能な分割更新処理を前記他のストレージ制御装置が実行中に、前記特定情報から特定される前記複数の分割命令処理の各分割命令処理を実行する、
処理を実行させることを特徴とするストレージ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置、ストレージ制御装置、およびストレージ制御プログラムに関する。
【背景技術】
【０００２】
従来、ストレージ装置内に、冗長化のために、ストレージを制御するストレージ制御装置を複数有することがある。また、複数のストレージ制御装置の各ストレージ制御装置は、ストレージの構成に関する構成情報が各ストレージ制御装置の間で同一の内容となるように、前述の構成情報を記憶する。
【０００３】
関連する先行技術として、例えば、ホストから新ファームウェアを受信してバッファに格納した時点でホストに更新終了を通知した後、ホストが発行したコマンドの処理空き時間に新ファームウェアを不揮発メモリおよびディスクに書き込んで更新するものがある。また、ストレージのデータに対する第１、第２のコマンドの処理に要するそれぞれの処理時間と所定単位時間に基づき、第１、第２のコマンドをそれぞれ第１、第２のサブコマンドに分割し、第１および第２のサブコマンドを所定の条件に基づき処理する技術がある。また、予測値テーブルのコマンドの処理時間予測値の和が所定時間となる数のコマンドを受入キューから読み出し、受入キュー中のコマンド処理時間の予測値が最長のディスクを選択し、前述のディスクに対するコマンドを取り出して発行する技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−０４６７９１号公報
【特許文献２】特開平１１−１０２２６１号公報
【特許文献３】特開平０９−２５８９０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術によれば、ストレージ装置に含まれる複数のストレージ制御装置のいずれかのファームウェアを更新する間に、ストレージの構成に関する構成情報を変更する命令に対する処理を実行すると、ファームウェアの更新が遅延することがある。また、ファームウェアの更新を優先するとストレージの構成に関する構成情報を変更する命令に対する処理が停滞することになる。
【０００６】
１つの側面では、本発明は、ストレージ装置に含まれる複数のストレージ制御装置のいずれかのファームウェアを更新する際に、ストレージの構成に関する構成情報を変更する命令に対する処理を停滞させず、ファームウェアの更新の遅延を抑えて実行することができるストレージ装置、ストレージ制御装置、およびストレージ制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
１つの実施態様では、ストレージ装置、ストレージ制御装置、およびストレージ制御プログラムは、ストレージを制御する複数のストレージ制御装置を有するストレージ装置であって、複数のストレージ制御装置の各ストレージ制御装置は、複数のストレージ制御装置間で同期されるストレージの構成に関する構成情報を記憶し、複数のストレージ制御装置のうち第１のストレージ制御装置は、複数のストレージ制御装置のうち第２のストレージ制御装置がファームウェアを更新する更新処理を実行中に、構成情報を変更する命令を受け付けた場合、命令に対する処理を実行可能な単位に分割した複数の分割命令処理を特定する特定情報を記憶領域に記憶し、更新処理を分割した複数の分割更新処理のうち命令に対する処理と並列して実行可能な分割更新処理を第２のストレージ制御装置が実行中に、特定情報から特定される複数の分割命令処理の各分割命令処理を実行する。
【発明の効果】
【０００８】
一つの側面では、本発明は、ストレージ装置に含まれる複数のストレージ制御装置のいずれかのファームウェアを更新する際に、ストレージの構成に関する構成情報を変更する命令に対する処理を停滞させず、ファームウェアの更新の遅延を抑えて実行することが可能となる。
【図面の簡単な説明】
【０００９】
【図１】図１は、本実施の形態にかかるストレージ装置１００の動作例を示す説明図である。
【図２】図２は、ストレージシステム２００の構成例を示す説明図である。
【図３】図３は、ＣＭ２１１のハードウェア構成例を示す説明図である。
【図４】図４は、ＣＭ２１１の機能構成例を示す説明図である。
【図５】図５は、ファームウェア改版中の一連のシーケンスを示す説明図（その１）である。
【図６】図６は、ファームウェア改版中の一連のシーケンスを示す説明図（その２）である。
【図７】図７は、コマンド受け付け時処理手順の一例を示すフローチャートである。
【図８】図８は、改版処理実行中処理手順の一例を示すフローチャートである。
【図９】図９は、改版処理実行中コマンド処理手順の一例を示すフローチャートである。
【図１０】図１０は、コマンド処理分割実行可能判断処理手順の一例を示すフローチャートである。
【図１１】図１１は、非同期コマンド処理分割判断処理手順の一例を示すフローチャート（その１）である。
【図１２】図１２は、非同期コマンド処理分割判断処理手順の一例を示すフローチャート（その２）である。
【図１３】図１３は、キュー管理テーブル４１２の記憶内容の一例を示す説明図である。
【図１４】図１４は、コマンド処理分割リスト４１３の記憶内容の一例を示す説明図である。
【図１５】図１５は、改版制御処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に図面を参照して、開示のストレージ装置、ストレージ制御装置、およびストレージ制御プログラムの実施の形態を詳細に説明する。
【００１１】
図１は、本実施の形態にかかるストレージ装置１００の動作例を示す説明図である。ストレージ装置１００は、ストレージを制御する複数のストレージ制御装置を有する。より具体的には、ストレージ装置１００は、ストレージ装置１００を利用するサーバといったコンピュータに接続しており、該当のコンピュータからの命令を受け付けて、複数のストレージ制御装置のいずれかが、受け付けた命令に対する処理を実行する。
【００１２】
例えば、ストレージ装置１００は、複数のストレージをＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）技術によって形成されたボリュームとして提供する装置である。または、ストレージ装置１００は、ストレージとしてＤＢ（ＤａｔａＢａｓｅ）を制御するＤＢサーバでもよいし、複数の種類のストレージを階層化した階層型ストレージ装置でもよいし、ストレージとしてテープドライブを制御するテープライブラリでもよい。
【００１３】
近年、ブロードバンドの普及やＩＣＴ（Ｉｎｆｏｒｍａｔｉｏｎ  ａｎｄ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｔｅｃｈｎｏｌｏｇｙ）技術の高度化により、多種多様な非構造化データが急増している。さらに、多種多様な非構造化データを格納するストレージ制御装置にアクセスするサーバや、前述のサーバからのアクセスやシステム運用を制御するソフトウェアも同様に多様化している。多様化、ストレージにおける異機種混在システムでの相互運用性を高めることを目的として、システム運用ソフトウェアから、ストレージ装置１００を設定および管理する技術が考えられる。システム運用ソフトウェアからの多種多様な処理の実施・制御に対して、運用を妨げることのない、ストレージ制御装置のファームウェア更新が求められる。
【００１４】
ここで、ファームウェアとは、電子機器に具体的な仕事をさせるため、前述の電子機器に組み込む、制御用のプログラムである。また、プログラムには、プログラムの利用者に対して提供した順番を明示する版数が付与されることがある。そこで、ファームウェアを更新することを、以下、「ファームウェアを改版する」と表記する。また、ソフトウェアを、単に、「ソフト」と表記し、システム運用ソフトウェアを、「システム運用ソフト」と表記する。
【００１５】
また、ストレージ装置が保持し、システム運用ソフトにより設定および管理される、ストレージの構成に関する構成情報を、以下、「装置構成情報」と表記する。例えば、装置構成情報は、ストレージ装置１００がＲＡＩＤ技術を行う装置であれば、複数のボリュームの各ボリュームを形成するストレージの識別子や、各ボリュームのＲＡＩＤレベル等を有する。
【００１６】
また、システム運用ソフトにより装置構成情報を変更する命令を「装置構成情報設定コマンド」と表記し、装置構成情報を参照する命令を「装置構成情報参照コマンド」と表記する。ここで、装置構成情報の変更には、装置構成情報への新たな情報の登録、情報の削除、情報の更新が含まれる。例えば、装置構成情報設定コマンドには、ボリュームの作成、削除等が挙げられる。
【００１７】
さらに、説明の簡略化のため、装置構成情報設定コマンドと装置構成情報参照コマンドとを総称して、単に「コマンド」と表記することがある。また、装置構成情報設定コマンドを、「設定系のコマンド」と表記することがあり、装置構成情報参照コマンドを、「参照系のコマンド」と表記することがある。
【００１８】
また、ストレージ装置１００に含まれる複数のストレージ制御装置は、サーバからのアクセスに矛盾なく応答するために、装置構成情報が各ストレージ制御装置の間で同一の内容となるように、装置構成情報を記憶する。以下、装置構成情報を各ストレージ制御装置の間で同一の内容とすることを、単に、「装置構成情報を同期する」と表記することがある。
【００１９】
装置構成情報を同期させるため、複数のストレージ制御装置のいずれかのストレージ制御装置のファームウェア改版実施中には、例えば、システム運用ソフトからのアクセスを排他する方法が考えられる。前述の方法の目的は、ファームウェア改版処理と、システム運用ソフトにおけるコマンドに対する処理によるメモリレイアウトや装置構成情報の競合による矛盾を排他するためである。しかしながら、前述の方法では、システム運用面において、ファームウェア改版実施中にはシステム運用ソフトによる制御、更新が滞ることになる。
【００２０】
従って、いずれかのストレージ制御装置のファームウェア改版の際にシステム運用ソフトの動作を妨げないためには、システム運用ソフトからのコマンドを実行することになる。ファームウェア改版の際にシステム運用ソフトからのコマンドを実行する方法としては、例えば、ファームウェアを分割した分割ファームウェアの一回の不揮発メモリへの更新が終了するごとに、ホスト発行コマンドや内部発生コマンドを実行する方法が考えられる。
【００２１】
しかしながら、上述した方法では、複数のストレージ制御装置のいずれかのストレージ制御装置のファームウェアを更新する際に、装置構成情報を変更する命令に対する処理を実行すると、コマンドを実行する分、ファームウェアの改版が遅延することになる。
【００２２】
そこで、本実施の形態では、あるストレージ制御装置が、他のストレージ制御装置のファームウェア改版処理中に前述のコマンドに対する処理を分割した処理を、改版処理を分割した処理のうち並列可能な処理中に実行することについて説明する。また、改版処理を分割した処理を、「分割改版処理」と表記する。
【００２３】
図１を用いて、ストレージ装置１００の動作例について説明する。図１に示すストレージ装置１００は、複数のストレージ制御装置として、第１のストレージ制御装置１０１＃１と、第２のストレージ制御装置１０１＃２と、ストレージ１０３とを有する。第１のストレージ制御装置１０１＃１と、第２のストレージ制御装置１０１＃２とは、ストレージ１０３を制御する。
【００２４】
以下の説明では、同種の要素を区別する場合には、「ストレージ制御装置１０１＃１」、「ストレージ制御装置１０１＃２」のように参照符号を使用する。また、同種の要素を区別しない場合には、「ストレージ制御装置１０１」のように参照符号のうち共通番号だけを使用することがある。
【００２５】
また、ストレージ制御装置１０１は、ストレージ１０３の構成に関する構成情報として、装置構成情報１１１を有する。そして、ストレージ制御装置１０１は、それぞれ、装置構成情報１１１がストレージ制御装置１０１の間で同一の内容となるように、装置構成情報１１１を記憶する。
【００２６】
そして、図１の状態では、第１のストレージ制御装置１０１＃１が、ストレージ装置１００全体の制御を司るストレージ制御装置であり、第２のストレージ制御装置１０１＃２が、ファームウェアを改版する改版処理を実行中であるとする。この状態において、第１のストレージ制御装置１０１＃１が、システム運用ソフトから、設定系のコマンドｃｍｍを受け付けたとする。図１では、（１）で示すように、第１のストレージ制御装置１０１＃１は、システム運用ソフトから、設定系のコマンドｃｍｍを受け付ける。ここで、システム運用ソフトは、ストレージ装置１００とは別のコンピュータによって実行される。または、ストレージ装置１００内にシステム運用ソフトを実行するコンピュータがあってもよい。
【００２７】
次に、第１のストレージ制御装置１０１＃１は、設定系のコマンドｃｍｍに対する処理を実行可能な単位に分割した複数の分割命令処理を特定する特定情報を、記憶領域に記憶する。ここで、コマンドに対する処理を、以下、「コマンド処理」と表記する。同様に、分割命令処理を、「分割コマンド処理」と表記する。また、特定情報は、例えば、分割コマンド処理の関数の名称や、前述の関数の引数となるデータである。図１では、（２）で示すように、第１のストレージ制御装置１０１＃１は、コマンドｃｍｍに対するコマンド処理ｃｍｍ＿ｐを実行可能な単位に分割した複数の分割コマンド処理ｃｍｍ＿ｓｐ１、ｃｍｍ＿ｓｐ２を特定する特定情報を、キューｑｕに記憶する。キューｑｕは、第１のストレージ制御装置１０１＃１内の記憶領域である。
【００２８】
また、分割した結果、複数の分割コマンド処理のうち、装置構成情報１１１を変更しない分割コマンド処理があってもよい。図１の例では、分割コマンド処理ｃｍｍ＿ｓｐ１が、装置構成情報１１１を変更する処理であり、分割コマンド処理ｃｍｍ＿ｓｐ２が、装置構成情報１１１を変更しない、他の処理である。
【００２９】
ここで、分割コマンド処理の一例を示す。例えば、第１のストレージ制御装置１０１＃１が、設定系のコマンドとして、ボリュームの作成を指示するコマンドを受け付けたとする。この場合、受け付けたコマンドに対するコマンド処理は、装置構成情報１１１へ反映する処理と、新たなボリュームとして割り当てるストレージ１０３内の記憶領域のフォーマットを行う処理と、フォーマットした記憶領域のマッピングを行う処理とである。従って、この場合、受け付けたコマンドに対するコマンド処理は、３つの分割コマンド処理に分割することができる。
【００３０】
そして、第１のストレージ制御装置１０１＃１は、複数の分割改版処理のうち設定系のコマンド処理と並列して実行可能な分割改版処理を第２のストレージ制御装置１０１＃２が実行中に、複数の分割コマンド処理の各分割コマンド処理を実行する。複数の分割コマンド処理は、キューｑｕに記憶された特定情報から特定することができる。複数の分割改版処理は、具体的には、ファームウェアを不揮発性のメモリに書き込む処理と、不揮発性のメモリに書き込んだファームウェアによりストレージ制御装置１０１を再起動する処理等がある。より具体的な分割改版処理については、図４、図１５等で説明する。
【００３１】
図１の例では、改版処理は、３つの分割改版処理ｒｅｖ＿ｓｐ１、ｒｅｖ＿ｓｐ２、ｒｅｖ＿ｓｐ３に分割される。そして、分割改版処理ｒｅｖ＿ｓｐ１、ｒｅｖ＿ｓｐ３が、設定系のコマンド処理と並列可能であり、分割改版処理ｒｅｖ＿ｓｐ２が、設定系のコマンド処理と並列不可能であるとする。そして、図１の例では、分割改版処理ｒｅｖ＿ｓｐ１が、時刻ｔ１〜ｔ２の間で実行されており、分割改版処理ｒｅｖ＿ｓｐ２が、時刻ｔ２〜ｔ３の間で実行されており、分割改版処理ｒｅｖ＿ｓｐ３が、時刻ｔ３〜ｔ４の間で実行されているとする。
【００３２】
この場合、図１の（３−１）で示すように、第１のストレージ制御装置１０１＃１は、分割改版処理ｒｅｖ＿ｓｐ１を第２のストレージ制御装置１０１＃２が実行中となる時刻ｔ１〜ｔ２の間に、分割コマンド処理ｃｍｍ＿ｓｐ１を実行する。また、装置構成情報１１１の同期のため、第２のストレージ制御装置１０１＃２は、分割コマンド処理ｃｍｍ＿ｓｐ１と同様な処理として分割コマンド処理ｃｍｍ＿ｓｐ１’を実行する。具体的には、第１のストレージ制御装置１０１＃１は、分割コマンド処理ｃｍｍ＿ｓｐ１’を実行するように第２のストレージ制御装置１０１＃２に通知する。
【００３３】
そして、分割コマンド処理ｃｍｍ＿ｓｐ１の終了後、時刻ｔ２に到達する前に、分割コマンド処理ｃｍｍ＿ｓｐ２を実行することができないとする。この場合、図１の（３−２）で示すように、第１のストレージ制御装置１０１＃１は、分割改版処理ｒｅｖ＿ｓｐ３を第２のストレージ制御装置１０１＃２が実行中となる時刻ｔ３〜ｔ４の間に、分割コマンド処理ｃｍｍ＿ｓｐ２を実行する。また、第２のストレージ制御装置１０１＃２は、分割コマンド処理ｃｍｍ＿ｓｐ２と同様な処理として分割コマンド処理ｃｍｍ＿ｓｐ２’を実行する。
【００３４】
ここで、設定系のコマンド処理と並列可能な分割改版処理を第２のストレージ制御装置１０１＃２が実行中に、分割コマンド処理を実行する方法としては、例えば、第１のストレージ制御装置１０１＃１は、分割改版処理に応じた所定時間を予め記憶しておく。そして、第１のストレージ制御装置１０１＃１は、所定時間を超えない場合には分割コマンド処理を実行し、所定時間を超える場合には分割コマンド処理を実行しないようにすればよい。これにより、第１のストレージ制御装置１０１＃１は、所定時間に見合う分割コマンド処理を実行することができる。
【００３５】
また、設定系のコマンド処理を分割する際には、第１のストレージ制御装置１０１＃１は、排他制御を行い、分割されるコマンド処理に影響のあるコマンドを受け付けないようにする。例えば、設定系のコマンドとして、ボリュームのサイズを拡張する指示するコマンドを受け付けたとする。この場合、受け付けたコマンドに対するコマンド処理は、装置構成情報１１１へ反映する処理と、ボリュームとして割り当てたストレージ１０３内における拡張したサイズ分の記憶領域のフォーマットを行う処理とがある。そして、第１のストレージ制御装置１０１＃１は、排他制御を行っているため、前述のコマンド処理を分割した各分割コマンド処理の間に、前述のコマンド処理に影響のあるコマンドを受け付けず、各分割コマンド処理を正しく処理することができる。
【００３６】
なお、改版処理中におけるストレージ１０３のデータへのアクセスは、第１のストレージ制御装置１０１＃１がアクセスに応じた処理を実行することにより、正常に行うことができる。
【００３７】
以上により、ストレージ装置１００は、分割改版処理中に、設定系のコマンド処理が並列可能な処理を行うため、改版処理の遅延を抑えて、設定系のコマンド処理を実行することができる。このように、ストレージ装置１００は、システム運用ソフトによるストレージ装置の設定・管理指示に基づく動作と、ファームウェア改版とが干渉し合う状況であっても、双方の動作が矛盾なく同時並行実施することができる。次に、ストレージ装置１００を、ストレージシステム２００に適用した例を、図２を用いて説明する。
【００３８】
図２は、ストレージシステム２００の構成例を示す説明図である。ストレージシステム２００は、ストレージ装置２０１と、ホストＩ／Ｏサーバ２０２と、ストレージ装置端末２０３と、システム運用ソフト導入サーバ２０４とを含む。ストレージ装置２０１は、複数のＣＭ（Ｃｏｎｔｒｏｌｌｅｒ  Ｍｏｄｕｌｅ）２１１と、複数のディスク２１２とを有する。ここで、ストレージ装置２０１は、図１で示したストレージ装置１００に相当する。また、ＣＭ２１１は、図１で示したストレージ制御装置１０１に相当する。また、ディスク２１２は、図１で示したストレージ１０３に相当する。
【００３９】
複数のＣＭ２１１のそれぞれと、ホストＩ／Ｏサーバ２０２のそれぞれとは、スイッチ２２１により接続される。また、複数のＣＭ２１１のそれぞれと、ストレージ装置端末２０３と、システム運用ソフト導入サーバ２０４とは、スイッチ２２２により接続される。
【００４０】
ストレージ装置２０１は、ディスク２１２の記憶領域をストレージ装置端末２０３に提供する。ホストＩ／Ｏサーバ２０２は、ストレージ装置２０１にアクセスするサーバである。ホストＩ／Ｏサーバ２０２は、例えば、Ｗｅｂサーバ、ＤＢサーバである。ストレージ装置端末２０３は、ストレージ装置２０１の管理者等によって操作されるコンピュータであり、ＣＭ２１１のファームウェアの改版指示を行う。システム運用ソフト導入サーバ２０４は、システム運用ソフトを実行するコンピュータである。
【００４１】
ＣＭ２１１は、ディスク２１２を制御するコントローラモジュール（制御装置）である。また、複数のＣＭ２１１のいずれか一つのＣＭ２１１が、制御ＣＭとなる。制御ＣＭは、ストレージ装置２０１の全体を制御するＣＭである。また、制御ＣＭは、改版処理の制御を行うとともに、システム運用ソフト導入サーバ２０４からのコマンドを受け付ける。以下では、改版処理を行うＣＭを、「改版対象ＣＭ」と記載することがある。
【００４２】
ディスク２１２は、ホストＩ／Ｏサーバ２０２のデータを記憶する記憶装置である。ディスク２１２は、例えば、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）や、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）を採用することができる。
【００４３】
図３は、ＣＭ２１１のハードウェア構成例を示す説明図である。ＣＭ２１１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３０１と、フラッシュＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０２と、メモリ３０３と、ＣＡ（Ｃｈａｎｎｅｌ  Ａｄａｐｔｏｒ）３０４と、ＬＡＮポート３０５、ＤＩ（Ｄｉｓｋ  Ｉｎｔｅｒｆａｃｅ）３０６とを有する。
【００４４】
ＣＰＵ３０１は、ＣＭ２１１の全体の制御を司る演算処理装置である。また、ＣＰＵ３０１は、複数のプロセッサコアを有するマルチコアプロセッサでもよい。フラッシュＲＯＭ３０２は、ＣＭ２１１のファームウェアや、本実施の形態にかかるストレージ制御プログラムを記憶する不揮発性メモリである。フラッシュＲＯＭ３０２の記憶媒体としては、例えば、ＮＡＮＤフラッシュを採用することができる。メモリ３０３は、ＣＰＵ３０１のワークエリアとして使用される揮発性メモリである。
【００４５】
ＣＡ３０４は、ホストＩ／Ｏサーバ２０２と通信する通信インターフェースである。ＬＡＮポート３０５は、ストレージ装置端末２０３やシステム運用ソフト導入サーバ２０４と接続する通信インターフェースである。ＤＩ３０６は、ディスク２１２と通信する通信インターフェースである。
【００４６】
また、ホストＩ／Ｏサーバ２０２やシステム運用ソフト導入サーバ２０４は、ＣＰＵと、フラッシュＲＯＭと、キャッシュメモリと、通信インターフェースとを有する。また、ストレージ装置端末２０３は、ＣＰＵと、フラッシュＲＯＭと、キャッシュメモリと、通信インターフェースと、ディスプレイと、キーボードと、マウスとを有する。
【００４７】
（ＣＭ２１１の機能構成例）
図４は、ＣＭ２１１の機能構成例を示す説明図である。ＣＭ２１１は、制御部４００を有する。制御部４００は、分割部４０１と、実行部４０２と、改版処理制御部４０３とを有する。制御部４００は、記憶装置に記憶されたプログラムをＣＰＵ３０１が実行することにより、各部の機能を実現する。記憶装置とは、具体的には、例えば、図３に示したフラッシュＲＯＭ３０２などである。また、各部の処理結果は、メモリ３０３や、ＣＰＵ３０１のレジスタ、ＣＰＵ３０１のキャッシュメモリ等に格納される。また、ＣＭ２１１は、分割部４０１と実行部４０２とを一つのジョブが実行することにより実現し、改版処理制御部４０３を別のジョブが実行することにより実現してもよい。さらに、ＣＭ２１１は、分割部４０１と実行部４０２とを実現するジョブと、改版処理制御部４０３を実現するジョブとを、それぞれ異なるプロセッサコアに割り当ててもよい。
【００４８】
また、ＣＭ２１１は、記憶部４１０にアクセス可能である。記憶部４１０は、メモリ３０３といった記憶装置である。そして、記憶部４１０は、装置構成情報４１１と、キュー管理テーブル４１２の情報と、コマンド処理分割リスト４１３の情報とを記憶する。装置構成情報４１１は、図１で示した装置構成情報１１１に相当する。また、キュー管理テーブル４１２は、受け付けたコマンドを管理するテーブルである。キュー管理テーブル４１２の記憶内容の一例は、図１３で示す。また、コマンド処理分割リスト４１３は、図１で示したキューｑｕに相当する。コマンド処理分割リスト４１３の記憶内容の一例は、図１４で示す。
【００４９】
以下の説明では、複数のＣＭ２１１のうち、第１のＣＭとして制御ＣＭとなるＣＭ２１１の分割部４０１〜改版処理制御部４０３の機能について説明する。制御ＣＭは、複数のＣＭ２１１のいずれのＣＭ２１１でもなることが可能であるため、複数のＣＭ２１１の全てのＣＭ２１１が、分割部４０１〜改版処理制御部４０３を有してもよい。
【００５０】
分割部４０１は、複数のＣＭ２１１のうち第２のＣＭ２１１が改版処理を実行中に、設定系のコマンドを受け付けた場合、設定系のコマンドのコマンド処理を実行可能な単位に分割する。例えば、分割部４０１は、受け付けた設定系のコマンドが、非同期コマンドである場合に、受け付けた命令を実行可能な単位に分割する。ここで、非同期コマンドは、コマンドの送信元がコマンドの応答を受け付ける受け付け処理を終了する間に受け付け処理とは異なる他の処理を実行可能なコマンドである。コマンドの送信元は、本実施の形態では、システム運用ソフト導入サーバ２０４、または、システム運用ソフト導入サーバ２０４上で実行するジョブとなる。システム運用ソフト導入サーバ２０４、または、システム運用ソフト導入サーバ２０４上で実行するジョブは、非同期コマンドを送信した場合には、受け付け処理とは異なる処理を実行可能である。そして、分割部４０１は、分割した複数の分割コマンド処理を特定する特定情報をコマンド処理分割リスト４１３に記憶する。また、分割部４０１は、分割元のコマンド処理を特定する特定情報をキュー管理テーブル４１２に記憶する。
【００５１】
また、分割部４０１は、第２のＣＭ２１１が更新処理を実行中に、装置構成情報４１１を変更し、かつ、同期コマンドとなるコマンドを受け付けた場合、受け付けたコマンドに対するコマンド処理を特定する特定情報をキュー管理テーブル４１２に記憶する。ここで、同期コマンドは、前述した受け付け処理を終了するまで受け付け処理とは異なる他の処理を実行しないコマンドである。システム運用ソフト導入サーバ２０４、または、システム運用ソフト導入サーバ２０４上で実行するジョブは、同期コマンドを送信した場合には、受け付け処理とは異なる処理を実行せずに、コマンドの応答を待ち受ける。このように、分割部４０１は、同期コマンドを受け付けた場合には、同期コマンドに対するコマンド処理を分割しない。
【００５２】
実行部４０２は、複数の分割改版処理のうち設定系のコマンド処理と並列して実行可能な分割改版処理を第２のＣＭ２１１が実行中に、コマンド処理分割リスト４１３に記憶した特定情報から特定される複数の分割コマンド処理の各分割コマンド処理を実行する。ここで、本実施の形態では分割改版処理は、下記に示すように５つある。
【００５３】
１つ目の分割改版処理は、ファームウェアを第２のＣＭ２１１のフラッシュＲＯＭ３０２に書き込む処理である。２つ目の分割改版処理は、フラッシュＲＯＭ３０２に書き込まれたファームウェアにより第２のＣＭを再起動する処理である。再起動することを、以下、「リブート」と表記する。３つ目の分割改版処理は、第２のＣＭ２１１をストレージ装置２０１に組み込むことが可能か否かを判断する処理である。４つ目の分割改版処理は、第２のＣＭ２１１をストレージ装置２０１に組み込む処理である。５つ目の分割改版処理は、第２のＣＭ２１１をストレージ装置２０１に組み込んだ後、ストレージ装置２０１内の第２のＣＭ２１１以外の他の装置と、第２のＣＭ２１１とが接続されているか確認する処理である。１つ目〜５つ目の分割改版処理は、１つ目の分割改版処理から順々に実行される。以下の説明では、１つ目〜５つ目の分割改版処理のそれぞれを実行している段階と、さらに他の段階とを合わせて、「改版処理の各フェーズ」と表記することがある。改版処理の各フェーズは、以下の通りとなる。
【００５４】
１つ目のフェーズ：ファームウェア書き込みフェーズ
２つ目のフェーズ：ファームウェア更新開始フェーズ
３つ目のフェーズ：ファームウェア改版ＣＭリブート開始フェーズ
４つ目のフェーズ：ファームウェア改版ＣＭリブート組み込み中断開始フェーズ
５つ目のフェーズ：ファームウェア改版ＣＭリブート組み込み再開チェックフェーズ
６つ目のフェーズ：ファームウェア改版ＣＭリブート組み込み再開フェーズ
７つ目のフェーズ：ファームウェア改版ＣＭリブート後処理フェーズ
【００５５】
１つ目、３つ目、５つ目、６つ目、７つ目のフェーズが、それぞれ、１つ目〜５つ目の分割改版処理に対応する。そして、設定系のコマンド処理と並列して実行可能なフェーズは、１つ目、２つ目、４つ目、５つ目、７つ目のフェーズである。より詳細については、図１５で示す。
【００５６】
より具体的には、実行部４０２は、複数の分割改版処理のうち設定系のコマンド処理と並列して実行可能な分割改版処理を第２のＣＭ２１１が実行開始してから分割改版処理にかかる所定時間が経過するまで、特定情報から特定される各分割コマンド処理を実行する。ここで、所定時間は、改版処理の各フェーズにかかる時間であり、ＣＭ２１１は、改版処理の各フェーズにかかる時間を予め記憶する。所定時間の設定方法としては、ストレージ装置２０１の管理者によって設定された値でもよいし、過去の改版処理において、各フェーズの実行時間を計測しておき、計測した値に、余裕を持たせるための値を加えた値でもよい。
【００５７】
そして、複数の分割コマンド処理のうち実行していない分割コマンド処理があるとする。この場合、実行部４０２は、分割改版処理の次に設定系のコマンド処理と並列して実行可能な次の分割改版処理を第２のＣＭ２１１が実行開始してから次の分割改版処理にかかる時間が経過するまで、実行していない分割コマンド処理を実行する。例えば、分割コマンド処理が３つあり、改版処理の１つ目のフェーズの所定時間内に、２つの分割コマンド処理を実行したとする。この場合、実行部４０２は、改版処理の１つ目のフェーズの所定時間内に、残りの１つの分割コマンド処理を実行する。
【００５８】
また、実行部４０２は、複数の分割改版処理のうち設定系のコマンド処理と並列して実行不可能な分割改版処理を第２のＣＭ２１１が実行する前に、特定情報から特定される同期コマンドのコマンド処理を実行する。具体的には、実行部４０２は、キュー管理テーブル４１２に同期コマンドがある場合には、設定系のコマンド処理と並列して実行不可能な分割改版処理を実行させないように改版処理制御部４０３に指示する。そして、実行部４０２は、コマンド処理分割リスト４１３内の同期コマンドを全て実行した後に、設定系のコマンド処理と並列して実行不可能な分割改版処理を第２のＣＭ２１１に実行させるように改版処理制御部４０３に指示する。
【００５９】
改版処理制御部４０３は、改版対象ＣＭの状態や、同期コマンドの実行状態に応じて、複数の分割改版処理を、改版対象ＣＭに順次実行させる。具体的には、改版処理制御部４０３は、改版対象ＣＭにおいて、改版処理のあるフェーズが終了したら次のフェーズに遷移するよう指示する。また、改版処理制御部４０３は、次のフェーズが設定系のコマンド処理と並列して実行不可能であって、まだ実行していない同期コマンドがある場合には、実行部４０２の指示に従って、同期コマンドを実行してから次のフェーズに遷移させる。
【００６０】
図５は、ファームウェア改版中の一連のシーケンスを示す説明図（その１）である。また、図６は、ファームウェア改版中の一連のシーケンスを示す説明図（その２）である。
【００６１】
図５と図６とで示すシーケンスにおいて、ストレージ装置２０１は、大きく分類して、改版処理未実行状態と、改版処理実行中状態と、制御ＣＭ切り替え中状態とがある。改版処理未実行状態は、改版処理を実行しておらず、かつ、制御ＣＭも切り替えていない時の状態である。改版処理実行中状態は、改版処理を実行している時の状態である。制御ＣＭ切り替え中状態は、制御ＣＭを切り替えている時の状態である。
【００６２】
改版処理未実行状態における処理を、ステップＳ５０１〜Ｓ５０７で示し、改版処理実行中状態における処理を、ステップＳ６０１〜Ｓ６０９で示し、制御ＣＭ切り替え中状態における処理を、ステップＳ６１１〜Ｓ６１７で示す。また、図５と図６とで示すシーケンスの初期状態において、制御ＣＭは、ＣＭ２１１＃１であるとする。
【００６３】
ストレージ装置２０１が改版処理未実行状態において、システム運用ソフト導入サーバ２０４は、参照系のコマンドを制御ＣＭに送信する（ステップＳ５０１）。制御ＣＭであるＣＭ２１１＃１は、参照系のコマンド処理を実行する（ステップＳ５０２）。そして、ＣＭ２１１＃１は、参照系のコマンドの応答をシステム運用ソフト導入サーバ２０４に送信する（ステップＳ５０３）。
【００６４】
また、ストレージ装置２０１が改版処理未実行状態において、システム運用ソフト導入サーバ２０４は、ＣＭ２１１＃１に送信する（ステップＳ５０４）。ＣＭ２１１＃１は、設定系のコマンド処理を実行する（ステップＳ５０５）。ここで、設定系のコマンドである場合、ＣＭ２１１＃１は、ＣＭ２１１＃２の装置構成情報４１１＃２を、ステップＳ５０５の処理により更新したＣＭ２１１＃１の装置構成情報４１１＃１と同期させる（ステップＳ５０６）。そして、ＣＭ２１１＃１は、設定系のコマンドの応答をシステム運用ソフト導入サーバ２０４に送信する（ステップＳ５０７）。
【００６５】
ここで、装置構成情報４１１の同期については、ＣＭ２１１＃１は、ステップＳ５０５の処理により設定した装置構成情報４１１＃１を、ＣＭ２１１＃２に配信する。そして、ＣＭ２１１＃２は、装置構成情報４１１＃１の内容を、自身の装置構成情報４１１＃２に設定し、ＣＭ２１１＃１に更新が完了した旨を示す通知を送信する。前述の通知を受け付けた場合、ＣＭ２１１＃１は、設定系のコマンドの応答をシステム運用ソフト導入サーバ２０４に送信する。なお、制御ＣＭでないＣＭ２１１が複数ある場合、制御ＣＭは、制御ＣＭでない複数のＣＭ２１１それぞれに、更新した装置構成情報４１１を配信する。そして、前述の複数のＣＭ２１１全てから、更新が完了した旨を示す通知を受け付けた場合に、制御ＣＭは、設定系のコマンドの応答をシステム運用ソフト導入サーバ２０４に送信する。
【００６６】
次に、ＣＭ２１１＃２が、改版処理を実行する（ステップＳ６０１）。ＣＭ２１１のいずれかが改版処理を開始することにより、ストレージ装置２０１は、改版処理実行中状態となる。
【００６７】
そして、ストレージ装置２０１が改版処理実行中状態である際に、システム運用ソフト導入サーバ２０４は、参照系のコマンドをＣＭ２１１＃１に送信する（ステップＳ６０２）。ＣＭ２１１＃１は、参照系のコマンド処理を実行する（ステップＳ６０３）。そして、ＣＭ２１１＃１は、参照系のコマンドの応答をシステム運用ソフト導入サーバ２０４に送信する（ステップＳ６０４）。このように、改版処理実行中状態でも、参照系のコマンドであれば、特に制限なくコマンド処理を実行することができる。
【００６８】
また、ストレージ装置２０１が改版処理実行中状態である際に、システム運用ソフト導入サーバ２０４は、設定系のコマンドをＣＭ２１１＃１に送信する（ステップＳ６０５）。ここで、設定系のコマンドのコマンド処理を実行すると、装置構成情報４１１が更新されるため、改版処理と競合する恐れがある。そこで、改版処理実行中状態で設定系のコマンドを受け付けたら、ＣＭ２１１＃１は、コマンドをキュー管理テーブル４１２に登録し、ＣＭ２１１＃２が改版処理内の停止ポイントにあれば、キュー管理テーブル４１２に登録したコマンドのコマンド処理を実行する。さらに、ＣＭ２１１＃１は、受け付けたコマンドが分割可能であれば、分割した分割コマンドに対する分割コマンド処理を実行する。
【００６９】
図６の例では、ステップＳ６０５の処理で受け付けたコマンドが２つに分割可能であったとして、ＣＭ２１１＃１は、ＣＭ２１１＃２が改版処理内の停止ポイントにある際に、分割コマンド処理を実行する（ステップＳ６０６−１、Ｓ６０６−２）。そして、ＣＭ２１１＃１は、設定系のコマンドの応答をシステム運用ソフト導入サーバ２０４に送信する（ステップＳ６０７）。また、図６で示すステップＳ６０６’について、システム運用ソフト導入サーバ２０４からは、ステップＳ６０５の処理で受け付けたコマンドのコマンド処理が、ステップＳ６０６’のように実行されているように見えることを示す。また、図６では示していないが、ＣＭ２１１＃２の装置構成情報４１１＃２を、ステップＳ６０６−１、Ｓ６０６−２のそれぞれの処理により更新したＣＭ２１１＃１の装置構成情報４１１＃１と同期させる。
【００７０】
次に、ＣＭ２１１＃２が改版処理を終了し、ＣＭ２１１＃１にも改版処理をさせるため、ＣＭ２１１＃１、＃２は、制御ＣＭをＣＭ２１１＃１からＣＭ２１１＃２に切り替える（ステップＳ６１１、Ｓ６１２）。これにより、ストレージ装置２０１は、制御ＣＭ切り替え中状態となる。
【００７１】
ストレージ装置２０１が制御ＣＭ切り替え中状態である際に、システム運用ソフト導入サーバ２０４は、設定系のコマンドをＣＭ２１１＃１に送信する（ステップＳ６１３）。ここで、制御ＣＭ切り替え中状態では、設定系のコマンドのコマンド処理を実行できない。そこで、制御ＣＭ切り替え終了後、新たに制御ＣＭとなったＣＭ２１１＃２は、設定系のコマンド処理を実行する（ステップＳ６１４）。そして、ＣＭ２１１＃２は、設定系のコマンドの応答をシステム運用ソフト導入サーバ２０４に送信する（ステップＳ６１５）。また、図６で示すステップＳ６１４’−１、２について、システム運用ソフト導入サーバ２０４からは、ステップＳ６１３の処理で受け付けたコマンドのコマンド処理が、ステップＳ６０６’のように実行されているように見えることを示す。
【００７２】
なお、本実施の形態では、設定系のコマンドを実行するＣＭは制御ＣＭとする運用ポリシーであるため、制御ＣＭとなったＣＭ２１１＃２が、ステップＳ６１４の処理を実行する。例えば、コマンドを受け付けたＣＭがコマンドを実行するＣＭとする運用ポリシーであれば、制御ＣＭ切り替え終了後、ＣＭ２１１＃１が、ステップＳ６１４の処理を実行してもよい。また、図６では示していないが、ストレージ装置２０１が制御ＣＭ切り替え中状態である際に、参照系のコマンドを受信した場合には、単にＣＭ２１１＃１が実行すればよい。
【００７３】
ステップＳ６１５の処理後、ＣＭ２１１＃１が、改版処理を実行する（ステップＳ６２１）。ＣＭ２１１のいずれかが改版処理を開始することにより、ストレージ装置２０１は、再び改版処理実行中状態となる。改版処理実行中状態におけるコマンド処理に関しては、ステップＳ６０２〜Ｓ６０７の処理と同一の処理を行うため、説明を省略する。
【００７４】
なお、図５と図６とでは、ＣＭ２１１＃１、＃２という２つのＣＭ２１１のファームウェア改版について説明したが、ストレージ装置２０１に３つ以上のＣＭ２１１がある場合には、３つ以上のＣＭ２１１について、ＣＭ２１１のファームウェア改版を行ってもよい。例えば、ストレージ装置２０１内に、ＣＭ２１１＃１〜＃４という４つのＣＭ２１１があり、制御ＣＭがＣＭ２１１＃１であるとする。この場合、ストレージ装置２０１は、以下の２つの方法のいずれかを採用することができる。
【００７５】
１つ目の方法は、順次改版処理を行っていく方法である。具体的には、ＣＭ２１１＃１は、ＣＭ２１１＃２に改版処理を実行させ、ＣＭ２１１＃２の改版処理終了後、ＣＭ２１１＃３に改版処理を実行させ、ＣＭ２１１＃３の改版処理終了後、ＣＭ２１１＃４に改版処理を実行させる。ＣＭ２１１＃４の改版処理終了後、ＣＭ２１１＃１は、制御ＣＭをＣＭ２１１＃２に切り替える。制御ＣＭを切り替えた後、ＣＭ２１１＃２は、ＣＭ２１１＃１に改版処理を実行させる。
【００７６】
２つ目の方法は、ＣＭ２１１の冗長性を考慮して改版処理を行う方法である。ここで、ＣＭ２１１＃１、＃２とで冗長性を担保し、ＣＭ２１１＃３、＃４とで冗長性を担保しているとする。ここで、ＣＭ２１１の冗長性とは、ＣＭ２１１内のＣＡ３０４と、ホストＩ／Ｏサーバ２０２とのパス接続の冗長性である。そして、例えば、ＣＭ２１１＃３とＣＭ２１１＃４とに同時に改版処理を実行させてしまうと、ホストＩ／Ｏサーバ２０２は、Ｉ／Ｏを発行できなくなる。そこで、この例では、冗長性を担保するＣＭの個数が２つであるため、奇数番目と偶数番目とのＣＭ２１１に分けて改版処理を行う。例えば、ＣＭ２１１＃１は、自身が奇数番目であるため、偶数番目であるＣＭ２１１＃２、＃４に同時に改版処理を実行させる。そして、ＣＭ２１１＃２、＃４の改版処理終了後、ＣＭ２１１＃１は、制御ＣＭを、改版処理が完了したＣＭ２１１、例えばＣＭ２１１＃２に切り替える。制御ＣＭを切り替えた後、制御ＣＭとなったＣＭ２１１＃２は、奇数番目のＣＭ２１１＃１、＃３に改版処理を実行させる。
【００７７】
次に、コマンドを受け付けた際の一連の処理を示すフローチャートを、図７〜図１１を用いて説明する。
【００７８】
図７は、コマンド受け付け時処理手順の一例を示すフローチャートである。ここで、コマンド受け付け時処理は、制御ＣＭ内のジョブで実行される。
【００７９】
制御ＣＭは、コマンドを受け付ける（ステップＳ７０１）。次に、制御ＣＭは、受け付けたコマンドが設定系か否かを判断する（ステップＳ７０２）。ここで、例えば、制御ＣＭは、受け付けたコマンド内のフラグから、受け付けたコマンドが設定系か参照系かを判断してもよいし、コマンドの名称を含むリストを参照して受け付けたコマンドが設定系か参照系かを判断してもよい。
【００８０】
受け付けたコマンドが設定系である場合（ステップＳ７０２：Ｙｅｓ）、制御ＣＭは、現在のストレージ装置２０１の状態が改版処理実行中状態か否かを判断する（ステップＳ７０３）。ここで、現在のストレージ装置２０１の状態とは、図５と図６とで示した改版処理未実行状態と、改版処理実行中状態と、制御ＣＭ切り替え中状態のいずれかである。また、制御ＣＭは、現在のストレージ装置２０１の状態を変数として記憶する。前述の変数の初期値は、改版処理未実行状態である。
【００８１】
現在のストレージ装置２０１の状態が改版処理実行中状態でない場合（ステップＳ７０３：Ｎｏ）、制御ＣＭは、現在のストレージ装置２０１の状態が制御ＣＭ切り替え中状態か否かを判断する（ステップＳ７０４）。
【００８２】
受け付けたコマンドが設定系でない、すなわち参照系である場合（ステップＳ７０２：Ｎｏ）、または、現在の状態が制御ＣＭ切り替え中状態でない場合（ステップＳ７０４：Ｎｏ）、制御ＣＭは、受け付けたコマンドに対するコマンド処理を実行する（ステップＳ７０５）。なお、ステップＳ７０４：Ｎｏとなる状態とは、現在のストレージ装置２０１の改版処理未実行状態である。
【００８３】
一方、現在の状態が改版処理実行中状態である場合（ステップＳ７０３：Ｙｅｓ）、制御ＣＭは、改版処理実行中処理を実行する（ステップＳ７０６）。改版処理実行中処理は、図８で説明する。一方、現在の状態が制御ＣＭ切り替え中状態である場合（ステップＳ７０４：Ｙｅｓ）、制御ＣＭは、制御ＣＭ切り替え中処理を実行する（ステップＳ７０７）。ステップＳ７０５〜Ｓ７０７のいずれかの処理を終了後、制御ＣＭは、コマンド受け付け時処理を終了する。
【００８４】
図８は、改版処理実行中処理手順の一例を示すフローチャートである。制御ＣＭは、現在のストレージ装置２０１の状態を改版処理実行中状態に設定する（ステップＳ８０１）。次に、制御ＣＭは、受け付けたコマンドをソフトウェアコマンドキューに登録する（ステップＳ８０２）。そして、制御ＣＭは、ソフトウェアコマンドキューに登録されたコマンドがあるか否かを判断する（ステップＳ８０３）。ソフトウェアコマンドキューに登録されたコマンドがない場合（ステップＳ８０３：Ｎｏ）、制御ＣＭは、改版処理実行中処理を終了する。
【００８５】
一方、ソフトウェアコマンドキューに登録されたコマンドがある場合（ステップＳ８０３：Ｙｅｓ）、制御ＣＭは、改版状態がコマンド動作可能状態か否かを判断する（ステップＳ８０４）。改版状態の初期値は、コマンド動作可能状態でない状態を示す値である。
【００８６】
改版状態がコマンド動作可能状態でない場合（ステップＳ８０４：Ｎｏ）、制御ＣＭは、改版処理内停止通知を、改版処理を制御するジョブに指示する（ステップＳ８０５）。そして、制御ＣＭは、改版処理内停止ポイントか否かを判断する（ステップＳ８０６）。改版処理内停止ポイントでない場合（ステップＳ８０６：Ｎｏ）、制御ＣＭは、ステップＳ８０６の処理を再び繰り返す。一方、改版処理内停止ポイントである場合（ステップＳ８０６：Ｙｅｓ）、制御ＣＭは、改版状態をコマンド動作可能状態に設定し（ステップＳ８０７）、ステップＳ８０３の処理に移行する。
【００８７】
改版状態がコマンド動作可能状態である場合（ステップＳ８０４：Ｙｅｓ）、制御ＣＭは、改版状態をコマンド動作可能状態に設定してから所定時間が経過したか否かを判断する（ステップＳ８０８）。
【００８８】
改版状態をコマンド動作可能状態に設定してから所定時間が経過した場合（ステップＳ８０８：Ｙｅｓ）、制御ＣＭは、改版状態のコマンド動作可能状態を解除し（ステップＳ８０９）、ステップＳ８０３の処理に移行する。
【００８９】
一方、改版状態をコマンド動作可能状態に設定してから所定時間が経過していない場合（ステップＳ８０８：Ｎｏ）、制御ＣＭは、改版処理実行中コマンド処理を実行する（ステップＳ８１０）。改版処理実行中コマンド処理については、図９で示す。改版処理実行中コマンド処理を終了後、制御ＣＭは、ステップＳ８０３の処理に移行する。
【００９０】
図９は、改版処理実行中コマンド処理手順の一例を示すフローチャートである。制御ＣＭは、コマンド処理分割実行可能判断処理を実行する（ステップＳ９０１）。コマンド処理分割実行可能判断処理は、図１０で示す。
【００９１】
コマンド処理分割実行可能判断処理の処理終了後、制御ＣＭは、コマンド処理分割実行可能判断処理の判断結果が、コマンド処理分割実行可能を示すか否かを判断する（ステップＳ９０２）。コマンド処理分割実行可能を示す場合（ステップＳ９０２：Ｙｅｓ）、制御ＣＭは、分割した分割コマンド処理を実行する（ステップＳ９０３）。そして、制御ＣＭは、コマンド処理分割リスト４１３における、実行した分割コマンド処理の処理フラグをＯＮに設定する（ステップＳ９０４）。次に、制御ＣＭは、分割コマンド処理を全て実行したか否かを判断する（ステップＳ９０５）。実行していない分割コマンド処理がある場合（ステップＳ９０５：Ｎｏ）、制御ＣＭは、改版処理実行中コマンド処理を終了する。
【００９２】
また、コマンド処理分割実行可能判断処理の判断結果が、コマンド処理分割実行可能を示さない場合（ステップＳ９０２：Ｎｏ）、制御ＣＭは、コマンド処理を実行する（ステップＳ９０６）。ステップＳ９０６の処理終了後、または、分割コマンド処理を全て実行した場合（ステップＳ９０５：Ｙｅｓ）、制御ＣＭは、実行したコマンド処理に対応するコマンドをソフトウェアコマンドキューから解放する（ステップＳ９０７）。そして、制御ＣＭは、ソフトウェアコマンドキュー内のコマンドを全て解放したか否かを判断する（ステップＳ９０８）。
【００９３】
ソフトウェアコマンドキュー内のコマンドを全て解放した場合（ステップＳ９０８：Ｙｅｓ）、制御ＣＭは、改版状態のコマンド動作可能状態を解除し（ステップＳ９０９）、改版処理実行中コマンド処理を終了する。一方、ソフトウェアコマンドキュー内のコマンドを全て解放していない場合（ステップＳ９０８：Ｎｏ）、制御ＣＭは、改版処理実行中コマンド処理を終了する。
【００９４】
図１０は、コマンド処理分割実行可能判断処理手順の一例を示すフローチャートである。制御ＣＭは、受け付けたコマンドが同期コマンドか否かを判断する（ステップＳ１００１）。受け付けたコマンドが同期コマンドである場合（ステップＳ１００１：Ｙｅｓ）、制御ＣＭは、同期コマンドとして、優先度を高くしてキュー管理テーブル４１２に登録する（ステップＳ１００２）。
【００９５】
一方、受け付けたコマンドが同期コマンドでない場合（ステップＳ１００１：Ｎｏ）、制御ＣＭは、非同期コマンド処理分割判断処理を実行する（ステップＳ１００３）。非同期コマンド処理分割判断処理は、図１１、図１２で示す。非同期コマンド処理分割判断処理の処理終了後、制御ＣＭは、非同期コマンド処理分割判断処理の判断結果が処理分割可能を示すか否かを判断する（ステップＳ１００４）。非同期コマンド処理分割判断処理の判断結果が一括処理を示す場合（ステップＳ１００４：Ｎｏ）、制御ＣＭは、非同期コマンド、かつ、一括処理として、キュー管理テーブル４１２に登録する（ステップＳ１００５）。
【００９６】
一方、非同期コマンド処理分割判断処理の判断結果が処理分割可能を示す場合（ステップＳ１００４：Ｙｅｓ）、制御ＣＭは、非同期コマンド、かつ、分割処理として、キュー管理テーブル４１２に登録する（ステップＳ１００６）。ステップＳ１００２、Ｓ１００５、Ｓ１００６のいずれかの処理終了後、制御ＣＭは、コマンド処理分割実行可能判断処理を終了する。
【００９７】
図１１は、非同期コマンド処理分割判断処理手順の一例を示すフローチャート（その１）である。また、図１２は、非同期コマンド処理分割判断処理手順の一例を示すフローチャート（その２）である。
【００９８】
制御ＣＭは、受け付けたコマンドが分割可能か判断する（ステップＳ１１０１）。次に、制御ＣＭは、判断結果が分割可能を示すか否かを判断する（ステップＳ１１０２）。判断結果が分割可能を示さない場合（ステップＳ１１０２：Ｎｏ）、制御ＣＭは、一括処理として判断し（ステップＳ１１０３）、非同期コマンド処理分割判断処理を終了する。
【００９９】
一方、判断結果が分割可能を示す場合（ステップＳ１１０２：Ｙｅｓ）、制御ＣＭは、コマンド処理分割リスト４１３を作成する（ステップＳ１１０４）。次に、制御ＣＭは、受け付けたコマンドを、各コマンドに分割可能かを判断する（ステップＳ１１０５）。ここで、ステップＳ１１０５の処理として、受け付けたコマンドは、複数のコマンドが記載されたコマンドリストであることがある。そこで、制御ＣＭは、受け付けたコマンドがコマンドリストであれば、１つ１つのコマンドに分割できると判断する。
【０１００】
そして、制御ＣＭは、判断結果が分割可能を示すか否かを判断する（ステップＳ１１０６）。判断結果が分割可能を示す場合（ステップＳ１１０６：Ｙｅｓ）、制御ＣＭは、各コマンドの分割数を記憶する（ステップＳ１１０７）。
【０１０１】
ステップＳ１１０７の処理終了後、または、判断結果が分割可能を示さない場合（ステップＳ１１０６：Ｎｏ）、制御ＣＭは、各コマンドのうち未選択のコマンドを選択する（ステップＳ１２０１）。次に、制御ＣＭは、選択したコマンドに対するコマンド処理が分割可能かを判断する（ステップＳ１２０２）。そして、制御ＣＭは、判断結果が分割可能を示すか否かを判断する（ステップＳ１２０３）。判断結果が分割可能を示す場合（ステップＳ１２０３：Ｙｅｓ）、制御ＣＭは、コマンド処理分割リストを更新する（ステップＳ１２０４）。
【０１０２】
ステップＳ１２０４の処理終了後、または、判断結果が分割可能を示さない場合（ステップＳ１２０３：Ｎｏ）、制御ＣＭは、ステップＳ１１０７の処理で記憶した分割数分のコマンド処理分割を実施済かを判断する（ステップＳ１２０５）。そして、制御ＣＭは、判断結果が、実施済を示すか否かを判断する（ステップＳ１２０６）。判断結果が実施済を示さない場合（ステップＳ１２０６：Ｎｏ）、制御ＣＭは、ステップＳ１２０１の処理に移行する。一方、実施済を示す場合（ステップＳ１２０６：Ｙｅｓ）、制御ＣＭは、分割処理として判断し（ステップＳ１１０８）、非同期コマンド処理分割判断処理を終了する。
【０１０３】
図１３は、キュー管理テーブル４１２の記憶内容の一例を示す説明図である。図１３に示すキュー管理テーブル４１２は、レコード１３０１−１〜４を有する。キュー管理テーブル４１２の各レコードは、１つのコマンドに関する情報を記憶する。
【０１０４】
キュー管理テーブル４１２は、Ｎｏと、同期と、分割と、分割数と、処理数というフィールドを含む。Ｎｏフィールドには、コマンドの順番を示す。同期フィールドには、コマンドが同期か否かを示す識別子が格納される。具体的には、コマンドが同期であれば、同期フィールドには「Ｏｎ」識別子が格納され、コマンドが非同期であれば、同期フィールドには「Ｏｆｆ」識別子が格納される。
【０１０５】
分割フィールドには、コマンド処理が非同期である場合に、コマンド処理が分割可能か否かを示す値が格納される。具体的には、コマンド処理が分割可能であれば、分割フィールドには「Ｏｎ」識別子が格納され、コマンド処理が分割不可能であれば、分割フィールドには「Ｏｆｆ」識別子が格納される。
【０１０６】
分割数フィールドには、コマンド処理が分割可能である場合に、該当のコマンド処理の分割数を示す値が格納される。処理数フィールドには、コマンド処理が分割可能である場合に、コマンド処理のうち既に処理済のコマンド処理数が格納される。
【０１０７】
図１４は、コマンド処理分割リスト４１３の記憶内容の一例を示す説明図である。図１４に示すコマンド処理分割リスト４１３は、レコード１４０１−１〜５を有する。コマンド処理分割リスト４１３は、コマンド処理を分割した分割コマンド処理に関する情報を記憶する。また、図１４で示すレコード１４０１−１〜５は、図１３のレコード１３０１−２に対応するコマンドに対するコマンド処理を分割した各分割コマンド処理に対応する。
【０１０８】
コマンド処理分割リスト４１３は、Ｎｏと、処理Ｎｏと、処理フラグと、処理コマンドと、処理データというフィールドを含む。Ｎｏフィールドには、キュー管理テーブル４１２における、分割コマンド処理の分割元となるコマンドのＮｏが格納される。処理Ｎｏフィールドには、分割コマンド処理のＮｏが格納される。処理フラグフィールドには、分割コマンドが処理済か否かを示す識別子が格納される。具体的には、分割コマンド処理が処理済であれば、処理フラグフィールドには「Ｏｎ」識別子が格納され、分割コマンド処理がまだ処理されていなければ、処理フラグフィールドには「Ｏｆｆ」識別子が格納される。
【０１０９】
処理コマンドフィールドには、分割コマンド処理を示す具体的な文字列が格納される。処理データフィールドには、分割コマンド処理の引数となる処理データが格納される。
【０１１０】
図１５は、改版制御処理手順の一例を示すフローチャートである。改版制御処理は、改版対象ＣＭに対して、改版対象ＣＭの状態を問い合わせ、問い合わせの結果に応じた分割改版処理を、改版対象ＣＭに実行させる処理である。
【０１１１】
制御ＣＭは、改版処理の１つ目のフェーズとして、ファームウェア書き込みフェーズに遷移する（ステップＳ１５０１）。ファームウェア書き込みフェーズでは、制御ＣＭは、参照系、設定系のコマンドが並列実行可能である。ファームウェア書き込みフェーズでは、制御ＣＭは、改版対象ＣＭに、ファームウェアを改版対象ＣＭのフラッシュＲＯＭ３０２に書き込む処理を実行する指示を行う。
【０１１２】
改版対象ＣＭのフラッシュＲＯＭ３０２に書き込みが終了したことを改版対象ＣＭから受け付けた制御ＣＭは、改版処理の２つ目のフェーズとして、ファームウェア更新開始フェーズに遷移する（ステップＳ１５０２）。ここで、ステップＳ１５０２におけるファームウェア更新とは、ステップＳ１５０４以降のＣＭリブート、組み込みを含んだ意味である。ファームウェア更新開始フェーズでは、参照系のコマンドを実行可能である。また、設定系のコマンドについて、制御ＣＭは、同期コマンドを優先実行する。また、制御ＣＭは、同期コマンド終了後、ファームウェア更新開始フェーズに対応する所定時間の残り時間で実行可能分の非同期コマンド処理を実行する。ここで、より具体的には、所定時間の開始時刻は、ファームウェア更新開始フェーズに遷移した時刻である。従って、制御ＣＭは、ファームウェア更新開始フェーズに遷移した時刻において同期コマンドを優先実行する。そして、同期コマンドの終了後、前述の時刻から前述の所定時間がまだ経過していなければ、前述の所定時間から、現時刻から前述の時刻の差を引いた、残りの時間で実行可能分の非同期コマンド処理を実行する。
【０１１３】
次に、制御ＣＭは、設定系同期コマンドが処理済か否かを判断する（ステップＳ１５０３）。設定系同期コマンドが処理済でない場合（ステップＳ１５０３：Ｎｏ）、制御ＣＭは、ステップＳ１５０２の処理に移行する。
【０１１４】
一方、設定系同期コマンドが処理済であり（ステップＳ１５０３：Ｙｅｓ）、ファームウェア更新開始フェーズに対応する所定時間経過済となった際に、制御ＣＭは、改版処理の３つ目のフェーズとして、ファームウェア改版ＣＭリブート開始フェーズに遷移する（ステップＳ１５０４）。ファームウェア改版ＣＭリブート開始フェーズでは、制御ＣＭは、参照系のコマンドが実行可能である。また、ステップＳ１５０４の処理を行った状態が、改版処理内停止ポイントでなく、ステップＳ８０６の処理：Ｎｏとなる一つの箇所となる。ステップＳ８０６の処理：Ｎｏとなるため、制御ＣＭは、図８で示した処理において、ステップＳ８０７の処理に移行せず、待ち合わせ状態となる。また、ＣＭリブートとは、改版対象のＣＭをリブートし、フラッシュＲＯＭ３０２のファームウェアを、メモリ３０３に展開することを示す。従って、ファームウェア改版ＣＭリブート開始フェーズにおいて、制御ＣＭは、改版対象ＣＭに、リブートと、改版対象のフラッシュＲＯＭ３０２のファームウェアをメモリ３０３に展開することを指示する。
【０１１５】
リブートと、改版対象のフラッシュＲＯＭ３０２のファームウェアをメモリ３０３に展開することが終了したことを改版対象ＣＭから受け付けた制御ＣＭは、改版処理の４つ目のフェーズとして、ファームウェア改版ＣＭリブート組み込み中断フェーズに遷移する（ステップＳ１５０５）。ファームウェア改版ＣＭリブート組み込み中断フェーズでは、システム運用ソフト導入サーバ２０４からのコマンドが受け付け可能となる状態である。ファームウェア改版ＣＭリブート組み込み中断フェーズでは、制御ＣＭは、参照系のコマンドが実行可能である。設定系のコマンドについて、制御ＣＭは、同期コマンドを優先実行する。また、制御ＣＭは、同期コマンド終了後、実行可能分の非同期コマンド処理を実行する。
【０１１６】
そして、制御ＣＭは、改版処理の５つ目のフェーズとして、ファームウェア改版ＣＭリブート組み込み再開チェックフェーズに遷移する（ステップＳ１５０６）。ここで、組み込みとは、改版対象ＣＭをストレージ装置２０１に組み込むことである。組み込みを行う理由は、ファームウェア改版時には、改版対象ＣＭをストレージ装置２０１から一旦切り離すため、改版対象ＣＭをストレージ装置２０１に組み込むことになるためである。また、ファームウェア改版ＣＭリブート組み込み再開チェックフェーズでは、制御ＣＭは、参照系のコマンドが実行可能である。また、設定系のコマンドについて、制御ＣＭは、同期コマンドを優先実行する。また、制御ＣＭは、同期コマンド終了後、ファームウェアＣＭリブート組み込み再開チェックフェーズに対応する所定時間の残り時間で実行可能の非同期コマンド処理を実行する。また、ファームウェア改版ＣＭリブート組み込み再開チェックフェーズにおいて、制御ＣＭは、改版対象ＣＭに、改版対象ＣＭが組み込むことが可能かをチェックすることを指示する。
【０１１７】
次に、制御ＣＭは、設定系同期コマンドが処理済か否かを判断する（ステップＳ１５０７）。設定系同期コマンドが処理済でない場合（ステップＳ１５０７：Ｎｏ）、制御ＣＭは、ステップＳ１５０６の処理に移行する。
【０１１８】
一方、設定系同期コマンドが処理済であり（ステップＳ１５０７：Ｙｅｓ）、ファームウェア改版ＣＭリブート組み込み再開チェックフェーズに対応する所定時間経過済である際に、制御ＣＭは、改版処理の６つ目のフェーズとして、ファームウェア改版ＣＭリブート組み込み再開フェーズに遷移する（ステップＳ１５０８）。ファームウェア改版ＣＭリブート組み込み再開フェーズでは、制御ＣＭは、参照系のコマンドが実行可能である。また、ステップＳ１５０８の処理を行った状態が、改版処理内停止ポイントでなく、ステップＳ８０６の処理：Ｎｏとなる一つの箇所となる。ステップＳ８０６の処理：Ｎｏとなるため、制御ＣＭは、図８で示した処理において、ステップＳ８０７の処理に移行せず、待ち合わせ状態となる。制御ＣＭは、改版対象ＣＭに、改版対象ＣＭの組み込みを指示する。
【０１１９】
改版対象ＣＭの組み込みが終了したことを改版対象ＣＭから受け付けた制御ＣＭは、改版処理の７つ目のフェーズとして、ファームウェア改版ＣＭリブート後処理フェーズに遷移する（ステップＳ１５０９）。ファームウェア改版ＣＭリブート後処理フェーズでは、制御ＣＭは、参照系のコマンドが実行可能である。また、設定系のコマンドについて、制御ＣＭは、同期コマンドを優先実行する。また、後処理とは、例えば、改版対象ＣＭと、ストレージシステム２００内の他の装置との接続が正常か否かを確認したり、改版対象ＣＭの状態を、改版処理が終了した状態に設定したりする処理である。制御ＣＭは、改版対象ＣＭに、後処理の実行を指示する。
【０１２０】
後処理が終了したことを改版対象ＣＭから受け付けた制御ＣＭは、改版制御処理を終了する。
【０１２１】
以上説明したように、改版対象ＣＭのファームウェア改版処理中に、制御ＣＭとなるＣＭ２１１は、設定系のコマンド処理を分割した分割コマンド処理を、設定系のコマンド処理と並列可能な分割改版処理中に実行する。これにより、ＣＭ２１１は、改版処理の遅延を抑えて、設定系のコマンド処理を実行することができる。また、コマンド処理を分割することにより、分割改版処理のうち並列可能な処理中にできる処理が増えるため、ＣＭ２１１はコマンド処理を分割しない場合と比較して、改版処理の遅延に与える影響をより小さくすることができる。
【０１２２】
また、制御ＣＭとなるＣＭ２１１は、改版処理の各フェーズのうち設定系のコマンド処理と並列して実行可能なフェーズの処理を改版対象ＣＭが実行開始してから、該当のフェーズに対応する所定時間が経過するまで、各分割コマンド処理を実行する。これにより、制御ＣＭとなるＣＭ２１１は、分割改版処理中に実行可能な分の分割コマンド処理を実行することができる。
【０１２３】
また、制御ＣＭとなるＣＭ２１１は、設定系の同期コマンドを受け付けた場合には、同期コマンドのコマンド処理を分割せず、前述のコマンド処理を、設定系のコマンド処理と並列不可能な分割改版処理の前に実行する。同期コマンドは、即時性が求められるコマンドであるから、制御ＣＭとなるＣＭ２１１は、同期コマンドの送信元となるシステム運用ソフト導入サーバ２０４に即時に同期コマンドの応答を送信することができる。
【０１２４】
また、設定系のコマンド処理と並列可能な分割改版処理は、ファームウェアを第２のＣＭのフラッシュＲＯＭ３０２に書き込む処理と、第２のＣＭ２１１をストレージ装置２０１に組み込むことが可能か否かを判断する処理と、図１５で示した後処理としてもよい。このように、制御ＣＭとなるＣＭ２１１は、ファームウェアを第２のＣＭのフラッシュＲＯＭ３０２に書き込む処理以外にも、設定系のコマンド処理と並列可能な分割改版処理を規定している。従って、制御ＣＭとなるＣＭ２１１は、ファームウェアを第２のＣＭのフラッシュＲＯＭ３０２に書き込む処理だけを並列可能な分割改版処理として規定するよりも、より多く並列で処理することができ、改版処理の遅延に与える影響をより小さくすることができる。
【０１２５】
また、制御ＣＭとなるＣＭ２１１は、設定系の非同期コマンドを受け付けた場合には、同期コマンドのコマンド処理を分割してもよい。非同期コマンドは、即時性が求められないコマンドであり、非同期コマンドの送信元となるシステム運用ソフト導入サーバ２０４は他の処理を実行することができる。従って、コマンド処理を分割することにより、ＣＭ２１１は、コマンド処理を分割しない場合と比較して、改版処理の遅延に与える影響をより小さくすることができるとともに、システム運用ソフト導入サーバ２０４が他の処理を実行することができる。
【０１２６】
なお、本実施の形態で説明したストレージ制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本ストレージ制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本ストレージ制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１２７】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１２８】
（付記１）ストレージを制御する複数のストレージ制御装置を有するストレージ装置であって、
前記複数のストレージ制御装置の各ストレージ制御装置は、
複数のストレージ制御装置間で同期される前記ストレージの構成に関する構成情報を記憶し、
前記複数のストレージ制御装置のうち第１のストレージ制御装置は、
前記複数のストレージ制御装置のうち第２のストレージ制御装置がファームウェアを更新する更新処理を実行中に、前記構成情報を変更する命令を受け付けた場合、前記命令に対する処理を実行可能な単位に分割した複数の分割命令処理を特定する特定情報を記憶領域に記憶し、
前記更新処理を分割した複数の分割更新処理のうち前記命令に対する処理と並列して実行可能な分割更新処理を前記第２のストレージ制御装置が実行中に、前記特定情報から特定される前記複数の分割命令処理の各分割命令処理を実行する、
ことを特徴とするストレージ装置。
【０１２９】
（付記２）前記第１のストレージ制御装置は、前記複数の分割更新処理の各分割更新処理にかかる所定時間を記憶しており、
前記第１のストレージ制御装置は、
前記複数の分割更新処理のうち前記命令に対する処理と並列して実行可能な分割更新処理を前記第２のストレージ制御装置が実行開始してから前記分割更新処理にかかる所定時間が経過するまで、前記特定情報から特定される前記各分割命令処理を実行し、
前記複数の分割命令処理のうち実行していない分割命令処理がある場合、前記分割更新処理の次に前記命令に対する処理と並列して実行可能な次の分割更新処理を前記第２のストレージ制御装置が実行開始してから前記次の分割更新処理にかかる所定時間が経過するまで、前記複数の分割命令処理のうち実行していない分割命令処理を実行する、
ことを特徴とする付記１に記載のストレージ装置。
【０１３０】
（付記３）前記第１のストレージ制御装置は、
前記第２のストレージ制御装置が前記更新処理を実行中に、前記構成情報を変更し、かつ、前記命令の送信元が前記命令の応答を受け付ける受け付け処理を終了するまで前記受け付け処理とは異なる他の処理を実行しない同期命令を受け付けた場合、受け付けた前記同期命令に対する処理を特定する特定情報を前記記憶領域に記憶し、
前記複数の分割更新処理のうち前記命令に対する処理と並列して実行不可能な分割更新処理を前記第２のストレージ制御装置が実行する前に、前記特定情報から特定される前記同期命令に対する処理を実行する、
ことを特徴とする付記１または２に記載のストレージ装置。
【０１３１】
（付記４）前記複数の分割更新処理のうち前記命令に対する処理と並列して実行可能な分割更新処理は、前記ファームウェアを前記第２のストレージ制御装置の不揮発性の記憶領域に書き込む処理と、前記第２のストレージ制御装置を前記ストレージ装置に組み込むことが可能か否かを判断する処理と、前記第２のストレージ制御装置を前記ストレージ装置に組み込んだ後に前記ストレージ装置内の前記第２のストレージ制御装置以外の他の装置と前記第２のストレージ制御装置とが接続されているか確認する処理とであることを特徴とする付記１〜３のいずれか一つに記載のストレージ装置。
【０１３２】
（付記５）前記第１のストレージ制御装置は、
受け付けた前記命令が、前記命令の送信元が前記命令の応答を受け付ける受け付け処理を終了する間に前記受け付け処理とは異なる他の処理を実行可能な非同期命令である場合、受け付けた前記命令を実行可能な単位に分割する、
ことを特徴とする付記１〜３のいずれか一つに記載のストレージ装置。
【０１３３】
（付記６）ストレージを制御する複数のストレージ制御装置を有するストレージ装置における１のストレージ制御装置であって、
前記複数のストレージ制御装置間で同期される前記ストレージの構成に関する構成情報を記憶する記憶部と、
前記複数のストレージ制御装置のうち他のストレージ制御装置がファームウェアを更新する更新処理を実行中に、前記構成情報を変更する命令を受け付けた場合、前記命令に対する処理を実行可能な単位に分割した複数の分割命令処理を特定する特定情報を記憶領域に記憶し、
前記更新処理を分割した複数の分割更新処理のうち前記命令に対する処理と並列して実行可能な分割更新処理を前記他のストレージ制御装置が実行中に、前記特定情報から特定される前記複数の分割命令処理の各分割命令処理を実行する制御部と、
を備えてなることを特徴とするストレージ制御装置。
【０１３４】
（付記７）前記制御部は、
前記複数の分割更新処理の各分割更新処理にかかる所定時間を記憶しており、
前記複数の分割更新処理のうち前記命令に対する処理と並列して実行可能な分割更新処理を前記他のストレージ制御装置が実行開始してから前記分割更新処理にかかる所定時間が経過するまで、前記特定情報から特定される前記各分割命令処理を実行し、
前記複数の分割命令処理のうち実行していない分割命令処理がある場合、前記分割更新処理の次に前記命令に対する処理と並列して実行可能な次の分割更新処理を前記他のストレージ制御装置が実行開始してから前記次の分割更新処理にかかる所定時間が経過するまで、前記複数の分割命令処理のうち実行していない分割命令処理を実行する、
ことを特徴とする付記６に記載のストレージ制御装置。
【０１３５】
（付記８）ストレージを制御する複数のストレージ制御装置を有し、前記ストレージの構成に関する構成情報が前記複数のストレージ制御装置間で同期されるストレージ装置における１のストレージ制御装置のストレージ制御プログラムであって、
前記１のストレージ制御装置に、
前記複数のストレージ制御装置のうち他のストレージ制御装置がファームウェアを更新する更新処理を実行中に、前記構成情報を変更する命令を受け付けた場合、前記命令に対する処理を実行可能な単位に分割した複数の分割命令処理を特定する特定情報を記憶領域に記憶し、
前記更新処理を分割した複数の分割更新処理のうち前記命令に対する処理と並列して実行可能な分割更新処理を前記他のストレージ制御装置が実行中に、前記特定情報から特定される前記複数の分割命令処理の各分割命令処理を実行する、
処理を実行させることを特徴とするストレージ制御プログラム。
【０１３６】
（付記９）前記１のストレージ制御装置に、
前記複数の分割更新処理の各分割更新処理にかかる所定時間を記憶し、
前記複数の分割更新処理のうち前記命令に対する処理と並列して実行可能な分割更新処理を前記他のストレージ制御装置が実行開始してから前記分割更新処理にかかる所定時間が経過するまで、前記特定情報から特定される前記各分割命令処理を実行し、
前記複数の分割命令処理のうち実行していない分割命令処理がある場合、前記分割更新処理の次に前記命令に対する処理と並列して実行可能な次の分割更新処理を前記他のストレージ制御装置が実行開始してから前記次の分割更新処理にかかる所定時間が経過するまで、前記複数の分割命令処理のうち実行していない分割命令処理を実行する、
処理を実行させることを特徴とする付記８に記載のストレージ制御プログラム。
【符号の説明】
【０１３７】
１００、２０１  ストレージ装置
１０１  ストレージ制御装置
１０３  ストレージ
１１１、４１１  装置構成情報
２００  ストレージシステム
２０２  ホストＩ／Ｏサーバ
２０３  ストレージ装置端末
２０４  システム運用ソフト導入サーバ
２１１  ＣＭ
４００  制御部
４０１  分割部
４０２  実行部
４０３  改版処理制御部
４１０  記憶部
４１２  キュー管理テーブル
４１３  コマンド処理分割リスト
【図１】
2018195088.tif 000003
【図２】
2018195088.tif 000004
【図３】
2018195088.tif 000005
【図４】
2018195088.tif 000006
【図５】
2018195088.tif 000007
【図６】
2018195088.tif 000008
【図７】
2018195088.tif 000009
【図８】
2018195088.tif 000010
【図９】
2018195088.tif 000011
【図１０】
2018195088.tif 000012
【図１１】
2018195088.tif 000013
【図１２】
2018195088.tif 000014
【図１３】
2018195088.tif 000015
【図１４】
2018195088.tif 000016
【図１５】
2018195088.tif 000017