(57)【要約】    【課題】ファームウェア更新中にエラーがあっても、その後の電源投入時に確実に起動できるようにして信頼性の高める。    【解決手段】ファームウェアＦＷ１，ＦＷ２を、起動用のブートコード７４及び復旧コード７６を格納した不揮発メモリ３２と第１磁気ディスク２０−１に分けて格納する。不揮発メモリ３２に格納したファームウェアＦＷ１のコピーを第１磁気ディスク２０−１に格納し、更に、第１ディスク媒体に格納したファームウェアＦＷ１，ＦＷ２全体のコピーを第２磁気ディスク２０−２に格納する。ファームウェア更新中にエラーが発生した場合、次の電源投入時に、揮発メモリ３０、第１磁気ディスク２０−１、及び第２磁気ディスク２０−２が正常か異常かを判定し、判定内容に応じた起動モードにより揮発メモリ３０に有効なファームウェアを読出し配置して起動させる。    【選択図】      図１０
2008084291.tif 000002
【特許請求の範囲】
【請求項１】
ディスク媒体に対しデータを記録再生するドライブ制御ソフトウェアであるファームウェアを、起動コード及び復旧コードを格納した不揮発メモリと第１ディスク媒体に分けて格納すると共に、前記不揮発メモリに格納したファームウェアのコピーを前記第１ディスク媒体に格納し、更に、前記第１ディスク媒体に格納したファームウェア全体のコピーを第２ディスク媒体に格納するファームウェア格納処理部と、
電源投入時に、前記不揮発メモリが正常な場合に前記起動コードに基づいて前記不揮発メモリと前記第１ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第１起動モード、前記第１起動モードで前記第１ディスク媒体が異常な場合に前記不揮発メモリと第２ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第２起動モード、前記不揮発メモリが異常な場合に前記復旧コードに基づいて前記第１ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第３起動モード、又は前記第３起動モードで前記第１ディスク媒体が異常な場合に前記第２ディスク媒体からファームウェア全体を前記揮発メモリに読出し配置して起動する第４起動モードのいずれかを実行する起動処理部と、
を備えたことを特徴とする記憶装置。
【請求項２】
請求項１記載の記憶装置に於いて、
上位装置から前記ファームウェアの更新要求を受けた際に、前記揮発メモリに配置されている旧ファームウェアを前記上位装置から転送された新ファームウェアに切り替えて実行した後に、前記揮発メモリの新ファームウェアを前記第１ディスク媒体、前記不揮発メモリ及び前記第２ディスク媒体の順番に書き込んで更新するファームウェア更新処理部を備えたことを特徴とする記憶装置。
【請求項３】
請求項１記載の記憶装置に於いて、更に、バックグラウンド処理により動作するリカバリー処理部を設け、
前記リカバリー処理部は、前記起動処理部が前記第１起動モードで起動した場合に第１ディスク媒体のファームウェアを第２ディスク媒体にコピーし、前記起動処理部が前記第２起動モードで起動した場合は第２ディスク媒体のファームウェアを第１ディスク媒体にコピーすることを特徴とする記憶装置。
【請求項４】
請求項３記載の記憶装置に於いて、前記リカバリー処理部は、更に、前記起動処理部が前記第３起動モードで起動した場合に第１ディスク媒体のファームウェアを第２ディスク媒体にコピーし、前記起動処理部が前記第４起動モードで起動した場合は第２ディスク媒体のファームウェアを第１ディスク媒体にコピーすることを特徴とする記憶装置。
【請求項５】
請求項１記載の記憶装置に於いて、前記起動処理部は、
前記第１乃至第４起動モードでは、前記不揮発メモリについて、格納したファームウェアの正当性の確認を行ない正常と判断し、そうでない場合は異常と判断し、
前記第１又は第２起動モードでは、前記第１ディスク媒体及び前記第２ディスク媒体について、格納したファームウェアが読出し可能で、正当であり、更にバージョンが前記不揮発メモリのファームウェアと同一な場合に正常と判断し、そうでない場合は異常と判断し、
前記第３又は第４起動モードでは、前記第１ディスク媒体及び第２ディスク媒体について、格納したファームウェアが読出し可能で、且つ正当性の確認を行ない正常と判断し、そうでない場合は異常と判断することを特徴とする記憶装置。
【請求項６】
請求項２記載の記憶装置に於いて、前記ファームウェア更新処理部は、
前記バッファメモリに格納した新ファームウェアを前記揮発メモリに配置されている旧ファームウェアに上書きして更新した後に装置を起動して新ファームウェアの処理に切り替え、
切り替え後の新ファームウェアの実行により前記上位装置に更新終了を通知し、
前記揮発メモリの新ファームウェアをバックグラウンド処理により前記第１ディスク媒体、前記不揮発メモリ及び前記第２ディスク媒体の順番に書き込んで更新することを特徴とする記憶装置。
【請求項７】
ディスク媒体に対しデータを記録再生するドライブ制御ソフトウェアであるファームウェアを、起動コード及び復旧コードを格納した不揮発メモリと第１ディスク媒体に分けて格納すると共に、前記不揮発メモリに格納したファームウェアのコピーを前記第１ディスク媒体に格納し、更に、前記第１ディスク媒体に格納したファームウェア全体のコピーを第２ディスク媒体に格納するファームウェア格納処理ステップと、
電源投入時に、前記不揮発メモリが正常な場合に前記起動コードに基づいて前記不揮発メモリと前記第１ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第１起動モード、前記第１起動モードで前記第１ディスク媒体が異常な場合に前記不揮発メモリと第２ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第２起動モード、前記不揮発メモリが異常な場合に前記復旧コードに基づいて前記第１ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第３起動モード、又は前記第３起動モードで前記第１ディスク媒体が異常な場合に前記第２ディスク媒体からファームウェア全体を前記揮発メモリに読出し配置して起動する第４起動モードのいずれかを実行する起動処理ステップと、
を備えたことを特徴とする記憶装置の制御方法。
【請求項８】
請求項７記載の記憶装置の制御方法に於いて、上位装置から前記ファームウェアの更新要求を受けた際に、前記揮発メモリに配置されている旧ファームウェアを前記上位装置から転送された新ファームウェアに切り替えて実行した後に、前記揮発メモリの新ファームウェアを前記第１ディスク媒体、前記不揮発メモリ及び前記第２ディスク媒体の順番に書き込んで更新するファームウェア更新処理ステップを備えたことを特徴とする記憶装置の制御方法。
【請求項９】
ディスク媒体に対しデータを記録再生するドライブ制御ソフトウェアであるファームウェアを、起動コード及び復旧コードを格納した不揮発メモリと第１ディスク媒体に分けて格納すると共に、前記不揮発メモリに格納したファームウェアのコピーを前記第１ディスク媒体に格納し、更に、前記第１ディスク媒体に格納したファームウェア全体のコピーを第２ディスク媒体に格納するファームウェア格納処理部と、
電源投入時に、前記不揮発メモリが正常な場合に前記起動コードに基づいて前記不揮発メモリと前記第１ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第１起動モード、前記第１起動モードで前記第１ディスク媒体が異常な場合に前記不揮発メモリと第２ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第２起動モード、前記不揮発メモリが異常な場合に前記復旧コードに基づいて前記第１ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第３起動モード、又は前記第３起動モードで前記第１ディスク媒体が異常な場合に前記第２ディスク媒体からファームウェア全体を前記揮発メモリに読出し配置して起動する第４起動モードのいずれかを実行する起動処理部と、
を備えたことを特徴とする記憶装置の制御装置。
【請求項１０】
ディスク媒体に対しデータを記録再生するドライブ制御ソフトウェアであるファームウェアを、起動コード及び復旧コードを格納した不揮発メモリとディスク媒体に分けて格納すると共に、前記不揮発メモリに格納したファームウェアのコピーを前記ディスク媒体に格納するファームウェア格納処理部と、
電源投入時に、前記不揮発メモリが正常な場合に前記起動コードに基づいて前記不揮発メモリと前記ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第１起動モード、又は前記第１起動モードで前記不揮発メモリが異常な場合に前記復旧コードに基づいて前記ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第２起動モードのいずれかを実行する起動処理部と、
上位装置から前記ファームウェアの更新要求を受けた際に、バッファメモリに格納した新ファームウェアを前記ディスク媒体に書き込んで更新した後に前記不揮発メモリの旧ファームウェアを破壊し、前記揮発メモリに配置されている旧ファームウェアを前記新ファームウェアに切り替えて実行した後に前記上位装置に更新終了を通知し、その後、前記第１ディスク媒体の新ファームウェアをバックグラウンド処理により前記不揮発メモリに書き込んで更新するファームウェア更新部と、
を備えたことを特徴とする記憶装置。
【請求項１１】
ディスク媒体に対しデータを記録再生するドライブ制御ソフトウェアであるファームウェアを、起動コード及び復旧コードを格納した不揮発メモリと第１ディスク媒体に分けて格納すると共に、前記不揮発メモリに格納したファームウェアのコピーを前記第１ディスク媒体に格納し、更に、前記第１ディスク媒体に格納したファームウェア全体のコピーを第２ディスク媒体に格納するファームウェア格納処理部と、
電源投入時に、前記不揮発メモリが正常な場合に前記起動コードに基づいて前記不揮発メモリと前記ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第１起動モード、前記第１起動モードで前記不揮発メモリが異常な場合に前記復旧コードに基づいて前記第１ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第２起動モード、又は、前記第２起動モードで前記第１ディスク媒体が異常な場合に前記第２ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第３起動モードのいずれかを実行する起動処理部と、
上位装置から前記ファームウェアの更新要求を受けた際に、バッファメモリに格納した新ファームウェアを前記第１ディスク媒体に書き込んで更新した後に前記不揮発メモリの旧ファームウェアを破壊し、前記揮発メモリに配置されている旧ファームウェアを前記新ファームウェアに切り替えて実行した後に前記上位装置に更新終了を通知し、その後、前記揮発メモリの新ファームウェアをバックグラウンド処理により前記不揮発メモリ及び前記第２ディスク媒体の順番に書き込んで更新するファームウェア更新部と、
を備えたことを特徴とする記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ホストからの更新要求によりデータを記録再生するドライブ制御ソフトウェアであるファームウェアをダウンロードして更新する記憶装置、制御方法、及び制御装置に関し、特に、装置の稼動状態でホストからの新ファームウェアをダウンロードして装置側の旧ファームウェアを更新する記憶装置、制御方法、及び制御装置に関する。
【背景技術】
【０００２】
従来、ドライブ制御ソフトウェアとして磁気ディスク装置のコントローラに実装されたファームウェアについては、ユーザに装置を出荷した後の運用中にあっても、その後に発生した様々な要因に対する対応策を講ずることでバージョンアップされており、逐次、新バージョンのファームウェアをダウンロードして更新するようにしている。
【０００３】
このような磁気ディスク装置におけるファームウェアの更新は、磁気ディスク装置１台ごとに行う必要があり、例えばホストに対しサブシステムとして接続されたディスクアレイシステムにあっては、ディスクアレイに実装されている多数の磁気ディスク装置に対し、ホストから新バージョンのファームウェアを装置側に転送してダウンロードし、装置内部でファームウェアの更新を実行させている。
【０００４】
従来の磁気ディスク装置にあっては、装置内に設けた不揮発メモリであるフラッシュメモリと磁気ディスクとに分けてファームウェアを格納しており、装置を起動すると、フラッシュメモリの先頭位置に記憶されたブートコードを実行してフラッシュメモリ内のファームウェア及び磁気ディスク媒体のファームウェアを読み出して揮発メモリであるバッファメモリとＳＲＡＭに書き込み、ＣＰＵにより実行して磁気ディスク媒体に対するデータの記録再生を実行している。
【０００５】
このような磁気ディスク装置に対する従来のファームウェアの更新処理は次の手順で行っている。
（１）ホストから磁気ディスク装置に新バージョンの新ファームウェアを転送し、バッファメモリに格納する（ファームウェアダウンロード）。
（２）ＳＲＡＭに展開している旧バージョンの旧ファームウェアを、バッファメモリに格納した新ファームウェアで上書きし、新バージョンのファームウェアに切り替える。
（３）切替え後に、新バージョンのファームウェアの対応する部分をフラッシュメモリ及び磁気ディスク媒体のファームウェア格納領域に書き込んで更新する。
（４）更新終了をホストに通知し、ホストとの接続を切離す。
【特許文献１】特許第２９７２７４２号公報
【特許文献２】特開２００６−０７２７６１号公報
【特許文献３】特開２００１−１００９８７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、このような従来のファームウェア更新方法にあっては、フラッシュＲＯＭ及び磁気ディスク媒体に対するファームウェアの更新中にエラーが発生してデータが破壊された場合や、フラッシュＲＯＭの更新直後にエラーにより処理が中断して磁気ディスク媒体のファームウェアが更新できなかった場合、次に電源を再投入した際にフラッシュＲＯＭの診断エラーが発生し、ファームウェアが起動できず、装置が使用不能となる問題がある。
【０００７】
本発明は、ファームウェア更新中にエラーがあっても、その後の電源投入時に確実に起動できるようにした信頼性の高い記憶装置、制御方法及び制御装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
（装置）
本発明はディスク媒体に対しデータを記録再生する記憶装置を提供する。本発明の記憶装置は、
ディスク媒体に対しデータを記録再生するドライブ制御ソフトウェアであるファームウェアを、起動コード及び復旧コードを格納した不揮発メモリと第１ディスク媒体に分けて格納すると共に、不揮発メモリに格納したファームウェアのコピーを第１ディスク媒体に格納し、更に、第１ディスク媒体に格納したファームウェア全体のコピーを第２ディスク媒体に格納するファームウェア格納処理部と、
電源投入時に、不揮発メモリが正常な場合に起動コードに基づいて不揮発メモリと第１ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第１起動モード、第１起動モードで第１ディスク媒体が異常な場合に不揮発メモリと第２ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第２起動モード、不揮発メモリが異常な場合に復旧コードに基づいて第１ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第３起動モード、又は第３起動モードで第１ディスク媒体が異常な場合に第２ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第４起動モードのいずれかを実行する起動処理部と、
を備えたことを特徴とする。
【０００９】
更に本発明の記憶装置は、上位装置から前記ファームウェアの更新要求を受けた際に、揮発メモリに配置されている旧ファームウェアを上位装置から転送された新ファームウェアに切り替えて実行した後に、揮発メモリの新ファームウェアを第１ディスク媒体、不揮発メモリ及び第２ディスク媒体の順番に書き込んで更新するファームウェア更新処理部を備えたことを特徴とする。
【００１０】
本発明の記憶装置は、更に、バックグラウンド処理により動作するリカバリー処理部を設け、リカバリー処理部は、起動処理部が第１起動モードで起動した場合に第１ディスク媒体のファームウェアを第２ディスク媒体にコピーし、起動処理部が第２起動モードで起動した場合は第２ディスク媒体のファームウェアを第１ディスク媒体にコピーすることを特徴とする。
【００１１】
リカバリー処理部は、更に、起動処理部が第３起動モードで起動した場合に第１ディスク媒体のファームウェアを第２ディスク媒体にコピーし、起動処理部が第４起動モードで起動した場合は第２ディスク媒体のファームウェアを第１ディスク媒体にコピーする。
【００１２】
起動処理部は、
第１乃至第４起動モードでは、不揮発メモリについて、格納したファームウェアの正当性の確認を行ない正常と判断し、そうでない場合は異常と判断し、
第１又は第２起動モードでは、第１ディスク媒体及び第２ディスク媒体について、格納したファームウェアが読出し可能で、正当であり、更にバージョンが不揮発メモリのファームウェアと同一な場合に正常と判断し、そうでない場合は異常と判断し、
第３又は第４起動モードでは、第１ディスク媒体及び第２ディスク媒体について、格納したファームウェアが読出し可能で、且つ正当性の確認を行ない正常と判断し、そうでない場合は異常と判断する。
【００１３】
ファームウェア更新処理部は、
バッファメモリに格納した新ファームウェアを揮発メモリに配置されている旧ファームウェアに上書きして更新した後に装置を起動して新ファームウェアの処理に切り替え、
切り替え後の新ファームウェアの実行により前記上位装置に更新終了を通知し、
揮発メモリの新ファームウェアをバックグラウンド処理により第１ディスク媒体、不揮発メモリ及び第２ディスク媒体の順番に書き込んで更新する。
【００１４】
（方法）
本発明はデータを記録再生する記憶装置の制御方法を提供する。本発明による記憶装置の制御方法は、
ディスク媒体に対しデータを記録再生するドライブ制御ソフトウェアであるファームウェアを、起動コード及び復旧コードを格納した不揮発メモリと第１ディスク媒体に分けて格納すると共に、不揮発メモリに格納したファームウェアのコピーを前記第１ディスク媒体に格納し、更に、第１ディスク媒体に格納したファームウェア全体のコピーを第２ディスク媒体に格納するファームウェア格納処理ステップと、
電源投入時に、不揮発メモリが正常な場合に起動コードに基づいて不揮発メモリと第１ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第１起動モード、第１起動モードで第１ディスク媒体が異常な場合に不揮発メモリと第２ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第２起動モード、不揮発メモリが異常な場合に復旧コードに基づいて第１ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第３起動モード、又は第３起動モードで第１ディスク媒体が異常な場合に第２ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第４起動モードのいずれかを実行する起動処理ステップと、
を備えたことを特徴とする。
【００１５】
本発明による記憶装置の制御方法は、更に、上位装置からファームウェアの更新要求を受けた際に、揮発メモリに配置されている旧ファームウェアを上位装置から転送された新ファームウェアに切り替えて実行した後に、揮発メモリの新ファームウェアを第１ディスク媒体、不揮発メモリ及び第２ディスク媒体の順番に書き込んで更新するファームウェア更新処理ステップを備えたことを特徴とする。
【００１６】
（制御装置）
本発明はデータを記録再生する記憶装置の制御装置を提供する。本発明による記憶装置の制御装置は、
ディスク媒体に対しデータを記録再生するドライブ制御ソフトウェアであるファームウェアを、起動コード及び復旧コードを格納した不揮発メモリと第１ディスク媒体に分けて格納すると共に、不揮発メモリに格納したファームウェアのコピーを第１ディスク媒体に格納し、更に、第１ディスク媒体に格納したファームウェア全体のコピーを第２ディスク媒体に格納するファームウェア格納処理部と、
電源投入時に、不揮発メモリが正常な場合に起動コードに基づいて不揮発メモリと第１ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第１起動モード、第１起動モードで第１ディスク媒体が異常な場合に不揮発メモリと第２ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第２起動モード、不揮発メモリが異常な場合に復旧コードに基づいて第１ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第３起動モード、又は第３起動モードで第１ディスク媒体が異常な場合に第２ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第４起動モードのいずれかを実行する起動処理部と、
を備えたことを特徴とする。
【００１７】
本発明による記憶装置の制御装置は、更に、上位装置からファームウェアの更新要求を受けた際に、揮発メモリに配置されている旧ファームウェアを上位装置から転送された新ファームウェアに切り替えて実行した後に、揮発メモリの新ファームウェアを第１ディスク媒体、不揮発メモリ及び第２ディスク媒体の順番に書き込んで更新するファームウェア更新処理部を備えたことを特徴とする。
【００１８】
（不揮発メモリなしの装置）
本発明は、ファームウェアを格納する不揮発メモリを持たない記憶装置を提供する。本発明の記憶装置は、
ディスク媒体に対しデータを記録再生するドライブ制御ソフトウェアであるファームウェアを、起動コード及び復旧コードを格納した第１ディスク媒体に格納すると共に、第１ディスク媒体に格納したファームウェアのコピーを第２ディスク媒体及び第３ディスク媒体の各々に格納するファームウェア格納処理部と、
電源投入時に、
第１ディスク媒体が正常な場合に起動コードに基づいて第１ディスク媒体と第２ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第１起動モード、
第１起動モードで第２ディスク媒体が異常な場合に第１ディスク媒体と第２ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第２起動モード、又は
第２起動モードで第２ディスク媒体が異常な場合に第３ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第３起動モードのいずれかを実行する起動処理部と、
上位装置からファームウェアの更新要求を受けた際に、揮発メモリに配置されている旧ファームウェアを上位装置から転送された新ファームウェアに切り替えて実行した後に、揮発メモリの新ファームウェアを第１ディスク媒体、第２ディスク媒体及び第３ディスク媒体の順番に書き込んで更新するファームウェア更新処理部と、
を備えたことを特徴とする。
【００１９】
更に本発明の記憶装置は、更に、バックグラウンド処理により動作するリカバリー処理部を設け、リカバリー処理部は、
起動処理部が第１起動モードで起動した場合は第１ディスク媒体のファームウェアを第２ディスク媒体及び第３ディスク媒体にコピーし、
起動処理部が第２起動モードで起動した場合は第２ディスク媒体のファームウェアを第３ディスク媒体及び第１ディスク媒体にコピーし、
起動処理部が第３起動モードで起動した場合は第３ディスク媒体のファームウェアを第１ディスク媒体及び第１ディスク媒体にコピーする。
【００２０】
（磁気ディスクの初期更新）
本発明の別の形態にあっては、不揮発メモリとディスク媒体にファームウェアを格納し、新ファームウェアの更新について、ディスク媒体を更新してからバックグランドで不揮発メモリを更新するようにした記憶装置を提供する。
【００２１】
本発明の記憶装置は、
ディスク媒体に対しデータを記録再生するドライブ制御ソフトウェアであるファームウェアを、起動コード及び復旧コードを格納した不揮発メモリとディスク媒体に分けて格納すると共に、不揮発メモリに格納したファームウェアのコピーを前記ディスク媒体に格納するファームウェア格納処理部と、
電源投入時に、不揮発メモリが正常な場合に起動コードに基づいて不揮発メモリとディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第１起動モード、又は第１起動モードで不揮発メモリが異常な場合に復旧コードに基づいてディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第２起動モードのいずれかを実行する起動処理部と、
上位装置からファームウェアの更新要求を受けた際に、バッファメモリに格納した新ファームウェアをディスク媒体に書き込んで更新した後に不揮発メモリの旧ファームウェアを破壊し、揮発メモリに配置されている旧ファームウェアを新ファームウェアに切り替えて実行した後に上位装置内に更新終了を通知し、その後、揮発メモリの新ファームウェアをバックグラウンド処理により不揮発メモリに書き込んで更新するファームウェア更新部と、
を備えたことを特徴とする。
【００２２】
本発明の別の形態にあっては、不揮発メモリ、第１ディスク媒体及び第２ディスク媒体にファームウェアを格納し、新ファームウェアの更新について、第１ディスク媒体を更新してからバックグランドで不揮発メモリ及び第２ディスク媒体を更新するようにした記憶装置を提供する。
【００２３】
本発明の記憶装置は、
ディスク媒体に対しデータを記録再生するドライブ制御ソフトウェアであるファームウェアを、起動コード及び復旧コードを格納した不揮発メモリと第１ディスク媒体に分けて格納すると共に、不揮発メモリに格納したファームウェアのコピーを第１ディスク媒体に格納し、更に、前記第１ディスク媒体に格納したファームウェア全体のコピーを第２ディスク媒体に格納するファームウェア格納処理部と、
電源投入時に、
不揮発メモリが正常な場合に起動コードに基づいて不揮発メモリとディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第１起動モード、
第１起動モードで不揮発メモリが異常な場合に復旧コードに基づいて第１ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第２起動モード、又は、
第２起動モードで第１ディスク媒体が異常な場合に第２ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第３起動モード、
のいずれかを実行する起動処理部と、
上位装置からファームウェアの更新要求を受けた際に、バッファメモリに格納した新ファームウェアを第１ディスク媒体に書き込んで更新した後に不揮発メモリの旧ファームウェアを破壊し、揮発メモリに配置されている旧ファームウェアを新ファームウェアに切り替えて実行した後に上位装置に更新終了を通知し、その後、第１ディスク媒体の新ファームウェアをバックグラウンド処理により不揮発メモリ及び第２ディスク媒体の順番に書き込んで更新するファームウェア更新部と、
を備えたことを特徴とする。
【発明の効果】
【００２４】
本発明によれば、フラッシュＲＯＭなどの不揮発メモリと第１ディスク媒体とに分けて格納したファームウェアに加え、第１ディスク媒体と第２ディスク媒体の各々にファームウェア全体のコピーを格納し、上位装置から新ファームウェアがダウンロードされた際に、第１ディスク媒体、不揮発メモリ及び第２ディスク媒体の順番に更新し、この更新中にエラーが発生していたとしても、起動コードに基づく不揮発メモリと第１ディスク媒体又は第２ディスク媒体との組合せによるファームウェアの読出し配置、或いは不揮発メモリに診断エラーがあったときの復旧コードに基づく第１ディスク媒体又は第２ディスク媒体からのファームウェア全体の読出し配置により、不揮発メモリ、第１ディスク媒体及び第２ディスク媒体に格納している一部のファームウェアにデータ破壊や未更新部分があっても、確実に更新済みのファームウェアにより装置を起動することができ、ファームウェア更新中のエラーにより、それ以降の電源投入時に起動ができずに使用不可となってしまうことを確実に防止し、信頼性を高めることができる。
【００２５】
本発明の別の実施形態にあっては、上位装置からファームウェア更新コマンドを受けた際に、まずディスク媒体を新ファームウェアに更新した後に不揮発メモリの旧ファームウェアの一部を破壊し、新ファームウェアの実行に切替えた後にコマンド終了を上位装置に通知し、その後、バックグラウンドで不揮発メモリを新ファームウェアに更新するようにしたことで、更新コマンドが正常に終了した直後に、装置の電源が切られて不揮発メモリが更新されていなくても、次の電源投入時には、不揮発メモリの旧ファームウェアは更新処理に伴う一部破壊で必ず異常となり、そのため復旧コードの実行によりディスク媒体の新ファームウェアが揮発メモリに読出し配置され、新ファームウェアで起動することができる。
【００２６】
また本発明の別の形態にあっては、ファームウェア更新コマンドによりディスク媒体への書込みが失敗した場合、コマンドを異常終了できるため、上位装置は記憶装置の異常を早期に検出し、必要な対応措置をとることができる。
【発明を実施するための最良の形態】
【００２７】
図１は本発明が適用される磁気ディスク装置のブロック図である。図１において、ハードディスクドライブ（ＨＤＤ）として知られた磁気ディスク装置１０は、ディスクエンクロージャ１２と制御ボード１４で構成される。ディスクエンクロージャ１２にはスピンドルモータ１６が設けられ、スピンドルモータ１６の回転軸にディスク媒体として磁気ディスク２０−１，２０−２を装着し、一定時間例えば４２００ｒｐｍで回転させる。
【００２８】
またディスクエンクロージャ１２にはボイスコイルモータ１８が設けられ、ボイスコイルモータ１８はロータリアクチュエータ２５のアーム先端にヘッド２２−１〜２２−４を搭載しており、磁気ディスク２０−１，２０−２の記録面に対するヘッドの位置決めを行う。
【００２９】
ヘッド２２−１〜２２−２にはライトヘッド素子とリードヘッド素子が一体化されて搭載されている。また磁気ディスク２０−１，２０−２に対するヘッド２２−１〜２２−４による磁気記録方式としては、長手磁気記録方式または垂直磁気記録方式にいずれであっても良い。
【００３０】
ヘッド２２−１，２２−２はヘッドＩＣ２４に対し信号線接続されており、ヘッドＩＣ２４は上位装置となるホストからのライトコマンドまたはリードコマンドに基づくヘッドセレクト信号で１つのヘッドを選択して書込みまたは読出しを行う。またヘッドＩＣ２４には、ライト系についてはライトドライバが設けられ、リード系についてはプリアンプが設けられている。
【００３１】
制御ボード１４にはＭＰＵ２６が設けられ、ＭＰＵ２６のバス２８に対し、装置の起動時に、制御コードと変数を含むドライブ制御ソフトウェアであるファームウェアが展開されるＳＲＡＭなどを用いた揮発メモリ３０、起動コードであるブートコード及び揮発メモリ３０に展開するファームウェアを格納するフラッシュＲＯＭ等を用いた不揮発メモリ３２が設けられている。なお、本実施形態にあっては、ファームウェアは不揮発メモリ３２と例えば磁気ディスク２０−１とに分けて格納されている。
【００３２】
またＭＰＵ２６のバス２８には、ホストインタフェース制御部３４、ＳＤＲＡＭなどを用いたバッファメモリ３８を制御するバッファメモリ制御部３６、フォーマットとして機能するハードディスクコントローラ４０、ライト変調部及びリード復調部として機能するリードチャネル４２、ボイスコイルモータ１８及びスピンドルモータ１６を制御するモータ駆動制御部４４が設けられている。
【００３３】
更に、制御ボード１２に設けたＭＰＵ２６、メモリ３０、不揮発メモリ３２、ホストインタフェース制御部３４、バッファメモリ制御部３６、ハードディスクコントローラ４０及びリードチャネル４２は制御回路１５を構成しており、制御回路１５は１つのＬＳＩ回路として実現されている。
【００３４】
本実施形態において、バッファメモリ３８の一部の領域はＭＰＵ２６のダイレクトアクセス領域に割当られており、装置の起動時に、ダイレクトアクセス領域に不揮発メモリ３０及び磁気ディスク２０−１から読み出したファームウェアの一部を書き込んで配置する。
【００３５】
磁気ディスク装置１０は、ホストからのコマンドに基づきファームウェアの制御コードの実行により書込処理及び読出処理を行う。ここで、磁気ディスク装置における通常の動作を説明すると次のようになる。
【００３６】
ホストからのライトコマンドとライトデータをホストインタフェース制御部３４で受けると、ライトコマンドをＭＰＵ２６で解読し、受信したライトデータを必要に応じてバッファメモリ３８に格納した後、ハードディスクコントローラ４０で所定のデータ形式に変換すると共にＥＣＣ符号化処理によりＥＣＣ符号を付加し、リードチャネル４２におけるライト変調系でスクランブル、ＲＬＬ符号変換、更に書込補償を行った後、ライトアンプからヘッドＩＣ２４を介して選択した例えばヘッド２２−１のライトヘッドからディスク媒体２０−１に書き込む。
【００３７】
このときＭＰＵ２６からＤＳＰなどを用いたモータ駆動制御部４４にヘッド位置決め信号が与えられており、ボイスコイルモータ１８によりヘッドをコマンドで指示された目標トラックにシークした後にオントラックしてトラック追従制御を行っている。
【００３８】
一方、ホストからのリードコマンドをホストインタフェース制御部３４で受けると、リードコマンドをＭＰＵ２６で解読し、ヘッドＩＣ２４のヘッドセレクトで選択されたリードヘッドから読み出された読出信号をプリアンプで増幅した後に、リードチャネル４２のリード復調系に入力し、パーシャルレスポンス最尤検出（ＰＲＭＬ）などによりリードデータを復調し、ハードディスクコントローラ４０でＥＣＣ復号処理を行ってエラーを訂正した後、バッフメモリ３８にバッファリングし、ホストインタフェース制御部３４からリードデータをホストに転送する。
【００３９】
図２は本実施形態の磁気ディスク装置を複数設けたディスクアレイ装置のブロック図である。図２において、ディスクアレイ装置５６には、２系統に分けてチャネルアダプタ５８−１１，５８−１２とチャネルアダプタ５８−２１，５８−２２が設けられており、サーバなどのホスト５５−１，５５−２を接続している。
【００４０】
またディスクアレイ装置５６には二重化された制御モジュール６０−１，６０−２が設けられている。制御モジュール６０−１，６０−２に対してはディスクエンクロージャ６２−１，６２−２が設けられ、それぞれ図１に示したと同じ磁気ディスク装置１０−１１〜１０−１５及び１０−２１〜１０−２５を設けている。
【００４１】
ディスクエンクロージャ６２−１，６２−２の各５台の磁気ディスク装置１０−１１〜１０−１５，１０−２１〜１０−２５は、所定のＲＡＩＤレベル例えばＲＡＩＤ１あるいはＲＡＩＤ５といったＲＡＩＤ構成によるディスクアレイを構成している。
【００４２】
制御モジュール６０−１，６０−２には、ＣＰＵ６６−１，６６−２、ＤＭＡコントローラ６４−１，６４−２、メモリ６８−１，６８−２、デバイスインタフェース７０−１１，７０−１２，７０−２１，７０−２２が設けられている。
【００４３】
ディスクアレイ装置５６はホスト５５−１，５５−２からの入出力要求に応じてディスクエンクロージャ６２−１，６２−２に設けている磁気ディスク装置１０−１１〜１０−１５，１０−２１〜１０−２５に対するリード処理およびライト処理を実行する。
【００４４】
再び図１を参照するに、制御ボード１４上のＭＰＵ２６には、プログラム制御により実現される機能として、ファームウェア格納処理部４６、起動処理部４８、ファームウェア更新処理部５０、及びリカバリー処理部５２の機能が設けられている。
【００４５】
ファームウェア格納処理部４６は、本実施形態の磁気ディスク装置１０の製造工程で不揮発メモリ３２にダウンロードしたプログラムの実行により実現される機能であり、格納処理が済めば、そのプログラムは不揮発メモリ３２から削除される。
【００４６】
ファームウェア格納処理部４６は、本実施形態の磁気ディスク装置１０において、磁気ディスク２０−１〜２０−２に対しデータを記録再生するためのドライブ制御ソフトであるファームウェアを、フラッシュＲＯＭを使用した不揮発メモリ３２と例えば第１磁気ディスク２０−１に分けて格納すると共に、不揮発メモリ３２に格納したファームウェアのコピーを第１磁気ディスク２０−１に格納し、更に第１磁気ディスク２０−１に格納したファームウェア全体のコピーを別の第２磁気ディスク２０−２に格納する。以下、磁気ディスク２０−１を第１磁気ディスクといい、磁気ディスク２０−２を第２磁気ディスクという。
【００４７】
図３は図１のファームウェア格納処理部４６によるファームウェアの格納状態であり、図１の実施形態におけるバッファメモリ３８、揮発メモリ３０、不揮発メモリ３２及び第１磁気ディスク２０−１，第２磁気ディスク２０−２を取り出して示している。
【００４８】
不揮発メモリ３２の先頭位置には起動用のブートコード７４が格納され、その後ろのファームウェア格納領域７２−１にファームウェアの一部分であるファームウェアＦＷ１を格納している。更に不揮発メモリ３２には、電源投入時の不揮発メモリ３２の診断エラーが発生してブートコード７４により起動できなくなった際に起動処理を行う復旧コード７６を格納している。
【００４９】
第１磁気ディスク２０−１のファームウェア格納領域７２−２には、不揮発メモリ３２のファームウェアＦＷ１と組み合わせて１つのファームウェアを構成する部分となるファームウェアＦＷ２が格納されている。
【００５０】
ここで、ファームウェアＦＷ１は装置を起動してからドライブレディ状態になるまでに必要な処理とし、ファームウェアＦＷ２はドライブレディ後の動作可能になる処理としている。
【００５１】
これに加え本実施形態にあっては、第１磁気ディスク２０−１のファームウェア格納領域７２−３に不揮発メモリ３２のファームウェアＦＷ１のコピーを格納している。このため、第１磁気ディスク２０−１のファームウェア格納領域７２−２，７２−３には部分的なファームウェアＦＷ１，ＦＷ２が格納されることで、ファームウェア全体を格納している。
【００５２】
更に第２磁気ディスク２０−２にはファームウェア格納領域７２−４，７２−５が設けられ、ここに第１磁気ディスク２０−１のファームウェアＦＷ２，ＦＷ１のコピーを格納している。
【００５３】
磁気ディスク装置の電源投入時にあっては、不揮発メモリ３２の先頭のブートコード７４がＭＰＵ２６により読み出されて実行されることで、不揮発メモリ３２のファームウェアＦＷ１と第１磁気ディスク２０−１のファームウェアＦＷ２が読み出されて、バッファメモリ３８及び揮発メモリ３０に配置される。
【００５４】
本実施形態にあっては、揮発メモリ３０にファームウェア配置領域７８−１を設けると同時に、バッファメモリ３８側にＭＰＵ２６のダイレクトアクセス領域を確保して、ここをファームウェア配置領域７８−１として使用しており、揮発メモリ３０の容量不足をバッファメモリ３８の一部を使用することで補っている。
【００５５】
この例では不揮発メモリ３２のファームウェアＦＷ１はファームウェアＦＷ１１〜ＦＷ１６に分割されており、分割したファームウェアＦＷ１１，ＦＷ１２がバッファメモリ３８に読出し配置され、残りの分割したファームウェアＦＷ１３〜ＦＷ１６が揮発メモリ３０に読出し配置され、更に第１磁気ディスク２０−１のファームウェアＦＷ２が不揮発メモリ３２に読出し配置されている。
【００５６】
本実施形態のドライブ制御ソフトウェアであるファームウェアＦＷ１，ＦＷ２は、図１のホストインタフェース制御部３４、バッファメモリ制御部３６、ハードディスクコントローラ４０、リードチャネル４２、モータ駆動制御部４４及びヘッドＩＣ２４のそれぞれを制御するための制御コード及び変数で構成されている。
【００５７】
またファームウェアＦＷ１，ＦＷ２の内、揮発メモリ３０のファームウェア格納領域７８−１には、処理時間を短くする必要のある制御コード及び参照頻度の高い変数を配置し、バッファメモリ３８のファームウェア格納領域７８−１には、性能確保には直接関係しない試験用コードやセルフテストコード、及び参照頻度の低い変数、更にはバッファに置かなくてはならないデータを配置している。
【００５８】
図４は説明の都合上、図３のファームウェアＦＷ１，ＦＷ２の読出し配置を揮発メモリ３０に対してのみ行うようにした説明図であり、実際の装置にあってはファームウェアの一部を図３のようにバッファメモリ３８に配置するが、以下の説明にあっては説明を簡単にするため、図４のようにファームウェアは全て揮発メモリ３０に読出し配置するものとして説明する。
【００５９】
再び図１を参照するに、ＭＰＵ２６に設けた起動処理部４８は、電源投入時に、第１起動モード、第２起動モード、第３起動モード又は第４起動モードのいずれかで起動する。
【００６０】
第１起動モードは、不揮発メモリ３０が正常な場合にブートコード７４に基づいて不揮発メモリ３２と第１磁気ディスク２０−１のファームウェアを揮発メモリ３０に読出し配置して起動する。
【００６１】
第２起動モードは、第１起動モードで第１磁気ディスク２０−１が異常な場合に不揮発メモリ３２と第２磁気ディスク２０−２のファームウェアを揮発メモリ３０に読出し配置して起動する。
【００６２】
第３起動モードは、不揮発メモリ３２が異常な場合に復旧コード７６に基づいて第１磁気ディスク２０−１からファームウェア全体を揮発メモリ３０に読出し配置して起動する。
【００６３】
第４起動モードは、第３起動モードで第１磁気ディスク２０−１が異常な場合に第２磁気２ディスク２０−２からファームウェア全体を揮発メモリ３０に読出し配置して起動する。
【００６４】
更に起動処理部４８を詳細に説明すると次のようになる。電源投入時には、不揮発メモリ３２に格納されているＢＩＯＳ相当の機能をもつ起動プログラムによる各デバイスの初期化と診断が行われ、不揮発メモリ３２についても、格納したファームウェアの例えばチェックサムを診断する。
【００６５】
不揮発メモリ３２の診断で診断エラーとならずに正常な場合、起動処理部４８は第１起動モードとなり、ブートコード７４の実行により図４のように不揮発メモリ３２のファームウェアＦＷ１と第１磁気ディスク２０−１のファームウェアＦＷ２を読み出して揮発メモリ３０のファームウェア格納領域７８に配置し、ＭＰＵ２６により実行する。
【００６６】
ここ第１磁気ディスク２０−１からのファームウェアＦＷ２の読出し配置は、磁気ディスク２０−１のファームウェアが正常であることを条件に行う。このためファームウェアＦＷ２を読出し配置する前に、第１磁気ディスク２０−１について次のチェックを行う。
（１）格納したファームウェアが読出し可能か。
（２）チェックサムが正しいか。
（３）格納しているファームウェアのバージョンが不揮発メモリ３２のファームウェアと同一か。
【００６７】
この（１）〜（３）の全てクリアできれば正常と判断し、ひとつでもクリアできない場合は異常と判断する。
【００６８】
図４の第１起動モードで第１磁気ディスク２０−１につき異常を判定した場合は、図５に示す第２起動モードとする。第２起動モードは、第１磁気ディスク２０−１にエラーがあって異常と判定されていることから、この場合には、第２磁気ディスク２０−２が正常であることを条件に、不揮発メモリ３２と第２磁気ディスク２０−２の組合わせでファームウェアＦＷ１，ＦＷ２を読み出して揮発メモリ３０に配置して実行する。
【００６９】
電源投入時に、図６に示すように、不揮発メモリ３２のファームウェアＦＷ１のチェックサムがエラー８１となった場合、起動処理部４８は第３起動モードで起動する。第３起動モードは、不揮発メモリ３２が診断エラーにより異常と判定されたことから、ブートコード７４による起動処理ができず、この場合は、本実施形態で新たに設けている復旧コード７６を実行することによる復旧処理８２を行う。
【００７０】
復旧コード７６に基づく復旧処理８２は、第１磁気ディスク２０−１が正常であることを条件に、第１磁気ディスク２０−１からファームウェアＦＷ１，ＦＷ２を読み出して揮発メモリ３０に配置して実行する。
【００７１】
この第３起動モードにおける磁気ディスクのチェックは、
（１）格納したファームウェアが読出し可能か。
（２）チェックサムが正しいか。
をクリアすれば正常、そうでなければ異常と判定する。
【００７２】
第３起動モードにおける第１磁気ディスク２０−１のチェックで図５に示すようにエラー８０が存在して異常と判定された場合、起動処理部４８は第４起動モードで起動する。第４起動モードは、第２磁気ディスク２０−２が正常であることを条件に、復旧コード７６に基づく復旧処理８２により磁気ディスク２０−２のファームウェアＦＷ１，ＦＷ２を読み出して揮発メモリ３０に展開する。
【００７３】
次に図１のＭＰＵ２６に設けたリカバリー処理部５２を説明する。リカバリー処理部５２は、起動処理部４８が図４の第１起動モードで起動した場合、図８に示すように、起動に使用した第１磁気ディスク２０−１のファームウェアを第２磁気ディスク２０−１にコピーし、二重化して保存している第１磁気ディスク２０−１，第２磁気ディスク２０−２のファームウェアの同一性を保証する。
【００７４】
またリカバリー処理部５２は、起動処理部４８が図５の第２起動モードで起動した場合には、図９に示すように、起動に使用した第２磁気ディスク２０−２のファームウェアを第１磁気ディスク２０−２にコピーし、二重化して保存している第１磁気ディスク２０−１，第２磁気ディスク２０−２のファームウェアの同一性を保証する。
【００７５】
更に、リカバリー処理部５２は、起動処理部４８が図６の第３起動モードで起動した場合、第１起動モードと同様に、図８に示すように、起動に使用した第１磁気ディスク２０−１のファームウェアを第２磁気ディスク２０−２にコピーし、また、起動処理部４８が図７の第４起動モードで起動した場合には、図９に示すように、起動に使用した第２磁気ディスク２０−２のファームウェアを第１磁気ディスク２０−１にコピーするようにしても良い。
【００７６】
次に図１のＭＰＵ２６に設けたファームウェア更新処理部５０の機能を説明する。ファームウェア更新処理部５０は、上位装置としてのホストからファームウェアの更新要求を受けた際に、図１０に示すように、バッファメモリ３８のファームウェア格納領域９０に新ファームウェアＮＦＷ１，ＮＦＷ２をダウンロードした後、揮発メモリ３０に読出し配置されて実行されている旧ファームウェアＦＷ１，ＦＷ２に上書きして新ファームウェアに切り替えた後に、電源投入（パワーオンスタート）によるリブート処理を行うことで、新ファームウェアの実行に切り替える。
【００７７】
ここで、揮発メモリ３０の旧ファームウェアを新ファームウェアに切り替えた後の起動（パワーオンスタートのリブート）は、ブートコード７４の実行によるファームウェアの読出し配置は行わず、単に揮発メモリ３０の新ファームウェアの先頭コードから実行を開始する起動処理である。
【００７８】
このようにしてダウンロードされた新ファームウェアを揮発メモリ３０に配置して実行する切り替えが済むと、本実施形態にあっては、ホストに対しファームウェアの更新終了を通知する。
【００７９】
ここで新ファームウェアＮＦＷ１，ＮＦＷ２は、先頭位置に更新終了通知コードを配置しており、揮発メモリ３０上に書き込まれて切り替え実行した時に、更新終了通知コードが最初に実行され、ホストに対し更新終了通知を送信させる。更新終了通知コードは一回だけ実行されるコードであり、実行後は消去または無効化され、不揮発メモリ３２側には格納されない。
【００８０】
このため上位装置にあっては、本実施形態の磁気ディスク装置１０側で実際に不揮発メモリ３２や第１磁気ディスク２０−１，２０−２に対するファームウェア更新の終了を待つことなく、ファームウェア更新終了通知が得られ、このため図２のように、ディスクアレイ装置５６のディスクエンクロージャ６２−１，６２−２に複数の磁気ディスク装置１０−１１〜１０−２５を配置し、それぞれについてファームウェアの更新要求を制御モジュール６０−１側から行う場合、ディスクアレイ装置５６から見た磁気ディスク装置それぞれのファームウェア更新処理時間を短くすることができ、システム全体としてのファームウェア更新時の処理性能の低下を抑えることができる。
【００８１】
図１０において、揮発メモリ３０に新ファームウェアＮＦＷ１，ＮＦＷ２が書き込まれて実行されると、その後、動作中のバックグラウンド処理により、不揮発メモリ３２、第１磁気ディスク２０−１，第２磁気ディスク２０−２に対する新ファームウェアの更新処理が実行される。
【００８２】
このファームウェアの更新処理は、
（１） 第１磁気ディスク２０−１
（２） 不揮発メモリ３２
（３） 第２磁気ディスク２０−２
の順番に行われる。この順番は、図１０については「更新１番」、「更新２番」、「更新３番」として表記している。
【００８３】
次に図１のＭＰＵ２６に設けたファームウェア更新処理部５０による図１０に示したファームウェア更新中にエラーが発生した後の起動処理部４８の処理動作を説明する。
【００８４】
図１１は揮発メモリ３０の新ファームウェアＮＦＷ１，ＮＦＷ２を最初に第１磁気ディスク２０−１に書き込んで更新する際に、不具合が発生してエラー９２が発生した場合であり、この場合には、第１磁気ディスク２０−１のファームウェアはエラー９２の発生でデータ破壊９６−１を起こしている。
【００８５】
このようなファームウェア更新エラーが発生した後の電源投入時は、図１２に示すように、起動処理部４８はまず第１起動モードで起動する。即ち、不揮発メモリ３２は正常であることからブートコード７４を実行して不揮発メモリ３２のファームウェアＮＦＷ１を揮発メモリ３０に読出し配置した後、第１磁気ディスク２０−１をチェックする。しかし、第１磁気ディスク２０−１のファームウェアＮＦＷ２は更新時にエラーを起しデータ破壊９６−１となっているか、または中断９６−２により読出し不可となっており、異常が判定される。
【００８６】
このため起動処理部４８は第２起動モードに移行し、第２磁気ディスク２０−２をチェックし、この場合は正常であることから、第２磁気ディスク２０−２からファームウェアＮＦＷ２を揮発メモリ３２に読出し配置することができ、ファームウェアＮＦＷ１，ＮＦＷ２を実行して正常に起動することができる。
【００８７】
図１２のように、起動処理部４８により不揮発メモリ３２と第２磁気ディスク２０−２の組合せによるファームウェアＦＷ１，ＦＷ２の読出し配置で正常に起動した場合には、起動後の動作中のバックグラウンド処理として、図１３に示すリカバリー処理部５２によるリカバリー処理が行われる。
【００８８】
このリカバリー処理は図９に示したリカバリー処理と同等であり、第２磁気ディスク２０−２のファームウェアＦＷ１，ＦＷ２を、エラー９２を起こしている第１磁気ディスク２０−１に書き込んで、データ破壊を解消して正しいファームウェアＦＷ１，ＦＷ２の格納状態を作り出す。
【００８９】
図１４はファームウェア更新処理部５０により第１磁気ディスク２０−１に対する新ファームウェアＮＦＷ２，ＮＦＷ１の更新が正常更新１０２として終了した後、不揮発メモリ３２に対し２番目の更新となる新ファームウェアＮＦＷ１の更新中にエラー１０４が発生してデータ破壊１０６となった場合である。
【００９０】
図１５は図１４の不揮発メモリ３２の更新中のエラーにより第２エラーステータスが保存された後に装置の電源を投入した場合の起動処理部４８による起動処理の説明図である。この場合の電源投入による起動処理にあっては、電源投入に伴う不揮発メモリ３２に格納しているファームウェアＦＷ１のチェックサムの検査を行う診断処理の際に、エラー１０４によるデータ破壊によるチェックサムが異常となって診断エラーが検出される。
【００９１】
このため診断エラーにより不揮発メモリ３２が異常と判定され、起動処理部４８は復旧コード７６の実行により第３起動モードによる復旧処理１１０を行う。第３起動モードの復旧処理１１０は、第１磁気ディスク２０−１のファームウェアＮＦＷ１，ＮＦＷ２を読み出して揮発メモリ３０に配置して実行することで、正常に起動することができる。
【００９２】
図１６は図１のファームウェア更新処理部５０により更新２番となる不揮発メモリ３２に対するファームウェア更新の直後に処理の中断１１６が発生した場合であり、この場合には第２磁気ディスク２０−２のファームウェアＦＷ１，ＦＷ２が未更新となる。
【００９３】
また不揮発メモリ３２の更新が正常に行われ、中断も起きなかったが、更新３番となる第２磁気ディスク２０−２の更新中にエラー１１８が発生してデータ破壊１２２を生じた場合にも、不揮発メモリ３２の更新終了直後の中断１１６によるエラーの場合と同様、第２磁気ディスク２０−２のファームウェアＦＷ１，ＦＷ２が未更新となる。
【００９４】
このように図１６の更新中のエラー発生後の電源投入時には、図１７に示すように、起動処理が起動処理部４８により行われる。図１７において、電源投入時の診断により不揮発メモリ３２は正常であることから、第１起動モードとしてブートコード７４を実行して不揮発メモリ３２のファームウェアＮＦＷ１を揮発メモリ３０に読出し配置する。次に、第１磁気ディスク２０−１をチェックして正常であることから、そのファームウェアＮＦＷ２を揮発メモリ３０に読出し配置し、配置済みのファームウェアＮＦＷ１，ＮＦＷ２を実行することで正常に起動できる。
【００９５】
図１７のファームウェアの読出し配置で正常に動作した後については、図１８に示すリカバリー処理部５２によるリカバリー処理が行われる。即ち、装置動作中のバックグラウンド処理として、リカバリー処理部５２が起動に使用した第１磁気ディスク２０−１のファームウェアＮＦＷ１，ＮＦＷ２をコピー処理１２４により第２磁気ディスク２０−２に書き込む。
【００９６】
これによって図１６の第２磁気ディスク２０−２のファームウェア更新中に生じたエラー１１８によるデータ破壊１２２が解消する。同時に、このコピー処理１２４は、第２磁気ディスク２０−２の旧ファームウェアＦＷ１，ＦＷ２を第１磁気ディスク２０−１の新ファームウェアＮＦＷ１，ＮＦＷ２により上書きするファームウェア更新処理を実質的に行うことになる。
【００９７】
図１９は図１のＭＰＵ２６に設けたファームウェア格納処理部４６により磁気ディスク装置１０の製造段階で行うファームウェア格納処理のフローチャートである。図１９において、ファームウェア格納処理は、ステップＳ１でファームウェアをダウンロード設備もしくはホストからバッファメモリ３８にダウンロードした後、ステップＳ２でバッファ上のファームウェアを例えば図４に示したように不揮発メモリ３２と第１磁気ディスク２０−１に分けてファームウェアＦＷ１，ＦＷ２として格納する。
【００９８】
次にステップＳ３で、不揮発メモリ３２に格納したファームウェアＦＷ１を第１磁気ディスク２０−１のファームウェア格納領域７２−３にコピーして二重化する。もちろん、このファームウェア格納領域７２−３に対する書込みは、バッファメモリ３８上から対応するファームウェアＦＷ１をコピーして二重化してもよい。
【００９９】
更にステップＳ４で、第１磁気ディスク２０−１のファームウェアＦＷ１，ＦＷ２を第２磁気ディスク２０−２にコピーして二重化する。この場合にも、バッファメモリ３８上のファームウェアＦＷ１，ＦＷ２を第２磁気ディスク２０−２にコピーして二重化するようにしてもよいことはもちろんである。
【０１００】
このような図１９のファームウェア格納処理が終了したならば、図１のファームウェア格納処理部４６の機能は不要であることから、この機能を実現する不揮発メモリ３２にダウンロードしたファームウェア格納処理プログラムは消去する。
【０１０１】
図２０はファームウェアを格納した後の図１の磁気ディスク装置１０の実施形態の処理動作を示したフローチャートである。まず磁気ディスク装置１０の電源を投入すると、ステップＳ１で起動処理を起動処理部４８により実行する。この起動処理は第１起動モード乃至第４起動モードのいずれかの起動処理となる。
【０１０２】
ステップＳ２の起動処理により正常に起動して動作状態となると、ステップＳ２でホストからのコマンドの有無をチェックし、コマンドを受信すると、ステップＳ３でコマンドを実行する。このコマンドはホストからのリードコマンドあるいはライトコマンドであり、具体的にはホストからのコマンドはキューに格納された後に実行されることになる。
【０１０３】
またステップＳ４で動作中にホストからファームウェア更新要求があると、ステップＳ５に進み、ファームウェア更新処理部５０によるファームウェア更新処理を信号する。一方、ステップＳ２でコマンドがないアイドルが判別されるとステップＳ７に進み、リカバリー処理部５２によるリカバリー処理がバックグランド処理として実行される。
【０１０４】
またステップＳ８でステップＳ５のファームウェア更新処理による更新フラグがセットされていることを判別すると、ステップＳ９でファームウェアを第１磁気ディスク２０−１、不揮発メモリ３２及び第２磁気ディスク２０−２の順番に書込んで更新する内部更新処理をバックグラウンド処理として実行する。このようなステップＳ２〜Ｓ５，Ｓ７〜Ｓ９の処理を、ステップＳ６で停止指示があるまで繰り返す。
【０１０５】
図２１は図２０のステップＳ１の起動処理の詳細を示した説明図である。図２１において、起動処理は、ステップＳ１で不揮発メモリ３２のファームウェアは正常か否か判定し、正常であればステップＳ２に進み第１磁気ディスク２０−１が正常か否か判定する。不揮発メモリ３２及び第１磁気ディスク２０−１が共に正常な場合はステップＳ３に進み、第１起動モードにより不揮発メモリ３２及び第１磁気ディスク２０−１からファームウェアを読み出して揮発メモリ３０に配置して実行する。
【０１０６】
ステップＳ２で第１磁気ディスク２０−１の異常を判定した場合は、ステップＳ４に進み、第２磁気ディスク２０−２が正常か否か判定する。第２磁気ディスク２０−２が正常であればステップＳ５に進み、第２起動モードにより不揮発メモリ３２及び第２磁気ディスク２０−２からファームウェアを読み出して揮発メモリ３０に配置して実行する。
【０１０７】
ステップＳ１で不揮発メモリ３２の異常を判定した場合にはステップＳ６進み、第１磁気ディスク２０−１が正常か否か判定する。第１磁気ディスク２０−１が正常であればステップＳ７に進み、第３起動モードにより第１磁気ディスク２０−１からファームウェア全体を読み出して揮発メモリ３０に配置して実行する。
【０１０８】
ステップＳ６で第１磁気ディスク２０−１の異常を判定した場合にはステップＳ８進み、第２磁気ディスク２０−２が正常か否か判定する。第２磁気ディスク２０−２が正常であればステップＳ９に進み、第４起動モードにより第２磁気ディスク２０−２からファームウェア全体を読み出して揮発メモリ３０に配置して実行する。ステップＳ８で第２磁気ディスク２０−２の異常を判定した場合は異常終了となる。
【０１０９】
図２２は図２０のステップＳ７のリカバリー処理の詳細を示したフローチャートである。図２２において、先ずステップＳ１で第１磁気ディスク２０−１を使用して起動したか否か判定し、第１磁気ディスク２０−１を使用して起動していた場合にはステップＳ２に進み、第１磁気ディスク２０−１のファームウェアを第２磁気ディスク２０−２にコピーする処理を実行する。
【０１１０】
ステップＳ１で第１磁気ディスク２０−１を使用した起動でないことを判別した場合は、ステップＳ３に進み、第２磁気ディスク２０−２を使用して起動したか否か判定する。第２磁気ディスク２０−２を使用して起動したことを判別した場合はステップＳ４に進み、第２磁気ディスク２０−２のファームウェアを第1磁気ディスク２０−1にコピーする処理を実行する。
【０１１１】
図２３は図２０のステップＳ５のファームウェア更新処理の詳細を示したフローチャートである。図２３において、ステップＳ１でホストインターフェース制御部３４がホストからファームウェア更新要求コマンドを受信すると、ホストインターフェース応答処理を行うことでホストとのインターフェース接続を確立し、ステップＳ２でホストから送信された新ファームウェアを受信してバッファメモリ３８に図１０に示したように格納する。
【０１１２】
続いてステップＳ３でバッファメモリ３８に格納した受信済みの新ファームウェアに対し、チェックサムなどにより正当性を確認し、正当性が確認できるとステップＳ４でバックグラウンド処理として内部的な更新処理を行うために更新フラグをセットする。
【０１１３】
次にステップＳ５でバッファメモリ３８に格納した新ファームウェアを揮発メモリ３０のの旧ファームウェアに上書きし、これによって旧ファームウェアを新ファームウェアに切り替える。
【０１１４】
続いてステップＳ６でパワーオンスタートとして知られた起動処理を行うことで、切替済みの新ファームウェアを実行し、ステップＳ７で新ファームウェアの実行によりホストに対しファームウェア更新要求に対する更新終了を通知し、一連のファームウェアダウンロード処理を終了する。
【０１１５】
図２４は図２０のステップＳ９のファームウェア内部更新処理の詳細を示したフローチャートである。まずステップＳ１で、図１１に示したように、揮発メモリ３０に配置している新ファームウェアＮＦＷ１，ＮＦＷ２を第１磁気ディスク２０−１に書き込んで更新する。続いてステップ２で第１磁気ディスク２０−１の更新直後に中断が発生したか否か判定する。
【０１１６】
中断がなければステップＳ３に進み揮発メモリ３０に配置している新ファームウェアＮＦＷ１を不揮発メモリ３２に分割して書き込んで更新する。続いてステップＳ４で不揮発メモリ３２の更新直後に中断が発生したか否か判定する。
【０１１７】
ステップＳ４で中断がないことが判別された場合はステップＳ５に進み、揮発メモリ３０に配置している新ファームウェアＮＦＷ１，ＮＦＷ２を第２磁気ディスク２０−２に書き込んで更新する。これで内部的な更新が全て終了したことから、ステップＳ６で更新フラグをリセットして図２０のメインルーチンにリターンする。
【０１１８】
ステップＳ２またはステップＳ４で中断を判別した場合は、更新未終了であるが、ステップＳ６で更新フラグをリセットして図２０のメインルーチンにリターンする。
【０１１９】
一方、ステップＳ２で中断を判別した場合は、その後の電源投入時の起動処理として、不揮発メモリ３２が正常であれば、不揮発メモリ３２と第２磁気ディスク２０−１の組み合せで旧ファームウェアを揮発メモリ３０に読出し配置して起動する第１起動モードの実行となる。
【０１２０】
また不揮発メモリ３２の異常が判定されれば、第１磁気ディスク２０−１から新ファームウェア全体を揮発メモリ３０に読出し配置して実行する第３起動モード、或いは第１磁気ディスク２０−２に異常があれば第２磁気ディスク２０−２から旧ファームウェア全体を揮発メモリ３０に読出し配置して実行する第４起動モードとなり、その後の電源投入時に確実に起動することができる。
【０１２１】
また、ステップＳ４で中断が判別された場合は、不揮発メモリ３２及び第１磁気ディスク２０−１には新ファームウェアが格納され、第２磁気ディスク２０−２には旧ファームウェアが保存されているため、その後の電源投入時に、第１乃至第４起動モードのいずれかで確実に起動できる。更に、第１磁気ディスク２０−１を使用して起動した場合は、図２２のリカバリー処理におけるステップＳ２のコピー処理により、第１磁気ディスク２０−１の更新済みの新ファームウェアが未更新となっている第２磁気ディスク２０−２の旧ファームウェアに書き込まれるリカバリー処理がバックグラウンドで行われ、この段階で第２磁気ディスク２０−２のファームウェア更新が実質的に行われることになる。
【０１２２】
図２５はフラッシュＲＯＭなどのコスト的に高価な不揮発メモリを持たない磁気ディスク装置を対象とした本発明の他の実施形態のファームウェア格納状態の実施形態である。この図２５の実施形態が対象とする磁気ディスク装置は、図１の磁気ディスク装置１０における不揮発メモリ３２が設けられておらず、不揮発メモリ３２の機能は全て磁気ディスク２０−１，２０−２に対する書込みで対応している。
【０１２３】
この実施形態におけるファームウェアの格納は、第１磁気ディスク２０−１１、第２磁気ディスク２０−１２及び第３磁気ディスク２０−２１を使用して行う。なお第１磁気ディスク２０−１１、第２磁気ディスク２０−１２及び第３磁気ディスク２０−２１は、１枚の磁気ディスクでもよいし、磁気ディスクは両面に記録面を持つことから、各記録面がこれに対応している。
【０１２４】
第１磁気ディスク２０−１１には先頭にブートコード７４が格納され、これに続くファームウェア格納領域１２８−１にファームウェアＦＷ１を格納し、更に復旧コード１２６を格納している。第２磁気ディスク２０−１２及び第３磁気ディスク２０−２１のファームウェア格納領域１２８−２，１２８−３には、第１磁気ディスク２０−１１のファームウェアＦＷのコピーが格納されている。
【０１２５】
この図２５のファームウェアの格納配置を持つ実施形態にあっても、図１のＭＰＵ２６には同様にファームウェア格納処理部４６、起動処理部４８、ファームウェア更新処理部５０、及びリカバリー処理部５２の機能が設けられている。
【０１２６】
即ち図２５の実施形態において、ファームウェア格納処理部４６は、ファームウェアＦＷ１を起動コードであるブートコード７４及び復旧コード１２６を格納した第１磁気ディスク２０−１１に格納すると共に、第１磁気ディスク２０−１１に格納したファームウェアＦＷのコピーを第２磁気ディスク２０−１２及び第３磁気ディスク２０−２１の各々に格納している。
【０１２７】
起動処理部４８は電源投入時に第１起動モード乃至第３起動モードのいずれかで起動する。第１起動モードは、第１磁気ディスク２０−１１が正常な場合に起動コード７４に基づいて第１磁気ディスク２０−１１のファームウェアＦＷを揮発メモリ３０に読出し配置して実行する。
【０１２８】
第２起動モードは、第１起動モードで第１磁気ディスク２０−１１が異常な場合に第２磁気ディスク２０−１２のファームウェアＦＷを揮発メモリ３０に読出し配置して実行する。
【０１２９】
第３起動モードは、第２起動モードで第２磁気ディスク２０−１２が異常な場合に第３磁気ディスク２０−２１のファームウェアＦＷを揮発メモリ３０に読出し配置して実行する。
【０１３０】
ファームウェア更新処理部５０は、ホストからファームウェア更新要求を受けた際に、図２６に示すように、バッファメモリ３８のファームウェア格納領域１３２に新ファームウェアＮＦＷを格納した後、揮発メモリ３０に格納されている旧ファームウェアＦＷを上書きした後に、パワーオンスタートによる起動処理（リブート）で新ファームウェアの実行に切り替え、この状態でホスト側にファームウェア更新の終了通知を行った後、揮発メモリ３０の新ファームウェアＮＦＷを第１磁気ディスク２０−１１、第２磁気ディスク２０−１２及び第３磁気ディスク２０−２１の順番に書き込んで更新する。
【０１３１】
更に、リカバリー処理部５２は、次のコピー処理をバックグラウンドで行う。
（１）起動処理部４８が第１起動モードで起動した場合は、第１磁気ディスク２０−１１のファームウェアを第２磁気ディスク２０−１２及び第３磁気ディスク２０−２１にコピーする。
（２）起動処理部４８が第２起動モードで起動した場合は、第２磁気ディスク２０−１２のファームウェアを第３磁気ディスク２０−２１及び第１磁気ディスク２０−１１にコピーする。
（３）起動処理部４８が第３起動モードで起動した場合は、第３磁気ディスク２０−２１のファームウェアを第１磁気ディスク２０−１１及び第２磁気ディスク２０−１２にコピーする。
【０１３２】
図２７は本発明の他の実施形態におけるファームウェアの格納配置と更新処理の説明図である。図２７の実施形態にあっては、製造段階において不揮発メモリ３２にファームウェアの一部であるファームウェアＦＷ１を格納し、残りのファームウェアＦＷ２を第１磁気ディスク２０−１に格納している。また第１磁気ディスク２０−１には不揮発メモリ３２と同じファームウェアＦＷ１が格納されている。即ち第１磁気ディスク２０−１には、ファームウェアＦＷ１，ＦＷ２のファームウェア全体が格納されている。
【０１３３】
このような不揮発メモリ３２及び第１磁気ディスク２０−１に対するファームウェアの格納は、図１のＭＰＵ２６に示したファームウェア格納処理部４６により行われる。即ちファームウェア格納処理部４６は、図２７の実施形態の場合、起動コードであるブートコード７４と復旧コード７６を格納した不揮発メモリ３２と、第１磁気ディスク２０−１とに分けて、ファームウェアＦＷ１，ＦＷ２を格納すると共に、不揮発メモリ３２に記憶したファームウェアＦＷ１のコピーをファームウェアＦＷ１として第１磁気ディスク２０−１に格納している。
【０１３４】
次に図２７の実施形態における図１のＭＰＵ２６に示したファームウェア更新処理部５０による処理を説明する。ファームウェア更新処理部５０は、上位装置としてのホストからファームウェアの更新要求であるファームウェア更新コマンドを受信すると、バッファメモリ３８のファームウェア格納領域９０に新ファームウェアＮＦＷ１，ＮＦＷ２をダウンロードした後、まず更新１番として第１磁気ディスク２０−１に新ファームウェアＮＦＷ１，ＮＦＷ２を書き込む。続いて不揮発メモリ３２の旧ファームウェアＦＷ１の一部を破壊する破壊処理１３０を行う。
【０１３５】
次にバッファメモリ３８の新ファームウェアＮＦＷ１，ＮＦＷ２を、揮発メモリ３０に読出し配置して実行されている旧ファームウェアＦＷ１，ＦＷ２に上書きした後、電源投入（パワーオンスタート）によるリブート処理を行うことで、新ファームウェアの実行に切り替える。
【０１３６】
このようにしてダウンロードされた新ファームウェアを揮発メモリ３０に配置して実行する切替えが済むと、ホストに対しファームウェア更新コマンドの正常終了を報告する。
【０１３７】
その後、バックグランドにおいて、揮発メモリ３０の新ファームウェアＮＦＷ１を分割しながら不揮発メモリ３２の旧ファームウェアＦＷ１に書き込む内部更新処理を行う。
【０１３８】
図２８は図２７のファームウェア更新直後に電源が切られた場合の、その後の電源投入による第２起動モードによる起動処理を示した説明図である。
【０１３９】
図２７に示したように、ファームウェア更新処理が正常終了して、ホストに対しコマンド正常終了を報告した直後に電源が切られた場合、第１磁気ディスク２０−１は図２８に示すように新ファームウェアＮＦＷ１，ＮＦＷ２の更新状態にあるが、不揮発メモリ３２は更新処理による破壊処理１３０により旧ファームウェアＦＷ１が部分的に破壊された状態にある。
【０１４０】
このような状態で電源を投入すると、図１のＭＰＵ２６に示した起動処理部４８による起動処理が行われる。起動処理部４８は電源投入時に不揮発メモリ３２に格納されているＢＩＯＳ相当の機能を持つ起動プログラムによる各デバイスの初期化と診断を行った後、不揮発メモリ３２についても、格納したファームウェアの例えばチェックサムを診断する。
【０１４１】
ここで不揮発メモリ３２の旧ファームウェアＦＷ１は、ファームウェア更新時の破壊処理１３０により部分的に破壊されているため、例えばチェックサムの診断で診断エラーとなる。不揮発メモリ３２のファームウェアＦＷ１のチェックサムがエラーとなった場合、起動処理部４８は第２起動モードで起動する。
【０１４２】
第２起動モードは、不揮発メモリ３２が診断エラーにより異常と判定されたことから、ブートコード７４による起動処理ができず、この場合は復旧コード７６を実行することによる復旧処理１３２を行う。
【０１４３】
復旧コード７６による復旧処理１３２は、第１磁気ディスク２０−１が正常であることを条件に、第１磁気ディスク２０−１から新ファームウェアＮＦＷ１，ＮＦＷ２を読み出して、揮発メモリ３０に配置して実行する。
【０１４４】
この結果、図２７のファームウェア配置を持つ実施形態にあっては、ファームウェア更新コマンドの正常終了直後に電源が切られた場合、図２８に示す第２起動モードで起動し、第１磁気ディスク２０−１の新ファームウェアＮＦＷ１，ＮＦＷ２により立ち上げることができる。
【０１４５】
図２９は図２７のファームウェア更新の正常終了後、電源が切られることなく、動作を継続した場合のバックグランドで実行する不揮発メモリの内部更新処理を示した説明図である。
【０１４６】
図２９にあっては、ファームウェア更新コマンドの実行により、図２７に示したように不揮発メモリ３２の旧ファームウェアＦＷ１は破壊処理１３０を受けていることから、現在実行中の揮発メモリ３０に配置されている不揮発メモリ３２のファームウェアＮＦＷ１を最小アクセス単位となる新ファームウェアＮＦＷ１１〜ＮＦＷ１５に分割し、ホストからのコマンド実行の空き時間のタイミングで不揮発メモリ３２のファームウェア領域に対して新ファームウェアＮＦＷ１１〜ＮＦＷ１５を順次書き込む内部更新処理を行う。
【０１４７】
このような分割したファームウェアＮＦＷ１１〜ＮＦＷ１５の内部更新処理にあっては、１回の更新が終了するごとに、もしそのときホストからのリードコマンドもしくはライトコマンドがコマンドキューに格納されて実行待ちにあった場合には、分割した新ファームウェアの更新終了でコマンドキューからの処理待ちのリードコマンドまたはライトコマンドを取り出して実行する。
【０１４８】
このため、不揮発メモリ３２に対する新ファームウェアのすべての更新が済むまで、コマンドキューに格納されているホストからのアクセスコマンドの処理が待たされることがなく、新ファームウェアの更新処理と上位装置のアクセスコマンドの並列的な実行を可能とし、ファームウェア内部更新処理におけるホスト側のシステム処理性能の低下を最小限に抑えることができる。
【０１４９】
図３０は図２９のバックグランドによる内部更新処理で不揮発メモリ３２のファームウェアが更新された後の電源投入による第１起動モードによる起動処理を示した説明図である。
【０１５０】
図２７のファームウェア配置を対象とした図１のＭＰＵ２６に設けた起動処理部４８にあっては、電源投入時に不揮発メモリ３２のファームウェアが正常な場合には、第１起動モードによる起動処理として、ブートコード７４に基づいて不揮発メモリ３２の新ファームウェアＮＦＷ１と第１磁気ディスク２０−１の新ファームウェアＮＦＷ２を揮発メモリ３０に読出し配置して実行する。
【０１５１】
図３１は図２７の実施形態について製造段階で行うファームウェア格納処理のフローチャートであり、図１のＭＰＵ２６に設けたファームウェア格納処理部４６により実行される。図３１において、ファームウェア格納処理は、ステップＳ１でファームウェアをダウンロードもしくはホストからバッファメモリ３８にダウンロードした後、ステップＳ２でバッファ上のファームウェアを不揮発メモリ３２と第１磁気ディスク２０−１に分けてファームウェアＦＷ１，ＦＷ２として格納する。
【０１５２】
続いてステップＳ３で不揮発メモリ３２のファームウェアＦＷ１を第１磁気ディスク２０−１にコピーして２重化する。これによって、図２７に示した不揮発メモリ３２に対するファームウェアＦＷ１の格納状態、及び第１磁気ディスク２０−１に対するファームウェアＦＷ１，ＦＷ２の格納状態が得られる。
【０１５３】
図３２は図２７のファームウェア配置をもつ実施形態の処理動作を示したフローチャートである。図１の磁気ディスク装置１０の電源を投入すると、ステップＳ１で起動処理を起動処理部４８により実行する。この起動処理は第１起動モードまたは第２起動モードのいずれかの起動処理となる。
【０１５４】
ステップＳ１の起動処理により正常に起動して動作状態になると、ステップＳ２でホストからのコマンドの有無をチェックし、コマンドを受信すると、ステップＳ３でコマンドを実行する。このコマンドはホストからのリードコマンドあるいはライトコマンドであり、具体的にはホストからのコマンドはキューに格納された後に実行されることになる。
【０１５５】
またステップＳ４で動作中にホストからファームウェア更新要求（ファームウェア更新コマンド）があると、ステップＳ５に進み、ファームウェア更新処理部５０によるファームウェア更新処理を実行する。
【０１５６】
一方、ステップＳ２でコマンドがないアイドルが判別されると、ステップＳ７に進み、ファームウェア更新処理による更新フラグがセットされているか否か判別する。更新フラグがセットされている場合にはステップＳ８に進み、ファームウェアを不揮発メモリ３２に書き込んで更新する内部更新処理をバックグランドで実行する。このようなステップＳ２〜Ｓ５，Ｓ７，Ｓ８の処理を、ステップＳ６で停止指示があるまで繰り返す。
【０１５７】
図３３は図３２のステップＳ１の起動処理の詳細を示した説明図である。図３３において、起動処理は、ステップＳ１で不揮発メモリ３２のファームウェアが正常か否か判定し、正常であればステップＳ２に進み、第１磁気ディスク２０−１が正常か否か判定する。
【０１５８】
不揮発メモリ３２及び第１磁気ディスク２０−１が共に正常な場合は、ステップＳ３に進み、第１起動モードにより、図３０に示したように、不揮発メモリ３２及び第１磁気ディスクからファームウェアを読み出し、揮発メモリ３０に配置して実行する。なお、ステップＳ２で第１磁気ディスクが異常な場合は異常終了となる。
【０１５９】
一方、ステップＳ１で不揮発メモリの異常を判定した場合は、ステップＳ４に進み、第１磁気ディスク２０−１が正常か否か判定する。第１磁気ディスク２０−１が正常であれば、ステップＳ５に進み、第２起動モードにより第１磁気ディスク２０−１から図２８に示したようにファームウェア全体を読み出して、揮発メモリ３０に配置して実行する。ステップＳ２で第１磁気ディスクに異常があれば異常終了となる。
【０１６０】
図３４は図３２のステップＳ５のファームウェア更新処理の詳細を示したフローチャートである。図３４において、ステップＳ１でホストインタフェース制御部３４がホストからのファームウェア更新要求コマンドを受信すると、ホストインタフェース応答処理を行うことでホストとのインタフェース接続を確立し、ステップＳ２でホストから送信された新ファームウェアを受信し、バッファメモリ３８に格納する。
【０１６１】
続いてステップＳ３で、バッファメモリ３８に格納した受信済み新ファームウェアに対しチェックサムなどにより正当性を確認し、正当性が確認できると、ステップＳ４でバックグランド処理として内部的な更新処理を行うために更新フラグをセットする。
【０１６２】
次にステップＳ５で、バッファメモリ３８に格納した新ファームウェアを第１磁気ディスクの旧ファームウェアに上書きする。続いてステップＳ６で第１磁気ディスク２０−１に対するファームウェアの書込みにつき書込み失敗か否かチェックしており、万一、書込み失敗となった場合には異常終了となり、ホストに対しファームウェア更新コマンドの異常終了を応答する。これを受けてホスト側で記憶装置に対する新ファームウェア更新について適切な対応措置を迅速にとることができる。
【０１６３】
ステップＳ６で書込みに失敗がなければ、ステップＳ７に進み、不揮発メモリ３２の旧ファームウェアの一部を破壊する破壊処理１３０を行う。続いてステップＳ８に進み、バッファメモリ３８に格納した新ファームウェアを揮発メモリ３０の旧ファームウェアに上書きし、これによって旧ファームウェアを新ファームウェアに切り替える。
【０１６４】
続いてステップＳ９でパワーオンスタートとして知られた起動処理を行うことで新ファームウェアの実行に切替え、ステップＳ１０で実行した新ファームウェアによりホストに対しファンアウト更新コマンドに対する更新終了を通知し、一連のファームウェアダウンロード処理を終了する。
【０１６５】
図３５は図３２のステップＳ８のファームウェア内部更新処理の詳細を示したフローチャートである。図３５において、ステップＳ１で、図２９に示したように、揮発メモリ３０のファームウェアを分割し、アイドル状態でのバックグランド処理により不揮発メモリ３２に分割単位で順次書き込んで更新する。更新が済むと、ステップＳ２で更新フラグをリセットする。
【０１６６】
このように図２７に示した第１磁気ディスク２０−１と不揮発メモリ３２にファームウェアを配置する実施形態にあっては、ホストからのファームウェア更新コマンドが正常に終了した直後に装置の電源が切られて不揮発メモリ３２が更新されていなくとも、更新処理の際に不揮発メモリのファームウェアを一部破壊していることで、次の電源投入時には不揮発メモリの旧ファームウェアが必ず異常となり、そのため、復旧コードの実行により第１磁気ディスク２０−１の新ファームウェアを揮発メモリ３０にメモリ配置して実行することで、必ず新ファームウェアで立ち上げることができる。
【０１６７】
またファームウェア更新コマンドにより第１磁気ディスク２０−１への書込みが万一、失敗した場合であっても、コマンド実行中のエラーであることから、コマンドの異常終了をホストに通知することができ、ホストは記憶装置側の異常を早期に検出し、必要な対応措置を適切にとることができる。
【０１６８】
図３６は本発明の他の実施形態におけるファームウェアの配置と更新処理の説明図である。図３６の実施形態にあっては、図２７の実施形態に更に第２磁気ディスク２０−２を追加し、第２磁気ディスク２０−２にもファームウェアＦＷ１，ＦＷ２を格納するようにしたことを特徴とする。
【０１６９】
この第２磁気ディスク２０−２をファームウェア格納のために追加した図３６の実施形態におけるファームウェア更新処理は、ファームウェア更新コマンドの受信で、バッファメモリ３８に格納した新ファームウェアＮＦＷ１，ＮＦＷ２を更新１番として、まず第１磁気ディスク２０−１に格納し、続いて不揮発メモリ３２の旧ファームウェアＦＷ１の一部を破壊する破壊処理１３０を行った後に揮発メモリ３０に新ファームウェアＮＦＷ１，ＮＦＷ２を上書きして実行することで、コマンド終了をホストに通知する。
【０１７０】
ファームウェア更新要求コマンドを正常終了してホストに終了応答をした直後に電源が切られた場合については、図３７のように第２起動モードによる起動処理を行う。この点は、図２７の実施形態でファームウェア更新コマンドの終了応答直後に電源が切られて、図２８で第２起動モードによる起動処理を行う場合と同じである。
【０１７１】
図３７の第２起動モードによる起動処理は、不揮発メモリ３２の旧ファームウェアＦＷ１の破壊処理１３０による異常を検出して復旧コード７６により復旧処理１３２を実行し、第１磁気ディスク２０−１のファームウェアＮＦＷ１，ＮＦＷ２を揮発メモリ３０に読出し配置して実行することで、新ファームウェアで立ち上がることができる。
【０１７２】
図３６のファームウェア更新処理により正常終了してコマンド終了応答を行った後、装置の電源が切られることなく継続動作している場合には、図３８に示すように、バックグランドで不揮発メモリ３２及び第２磁気ディスク２０−２に対する内部更新処理を行う。
【０１７３】
このバックグランドで行う内部更新処理が、図２７の実施形態に対し、この実施形態にあっては新たに第２磁気ディスク２０−２を設けていることから、バックグランド処理の内部更新処理で第１磁気ディスク２０−１から第２磁気ディスク２０−２にコピー処理１３４を行って、更新３番として第２磁気ディスク２０−２を新ファームウェアＮＦＷ１，ＮＦＷ２に更新する。
【０１７４】
またバックグランド処理で行う不揮発メモリ３２の新ファームウェアＮＦＷ１の更新については、図２７の実施形態における図２９の場合と同様、揮発メモリ３０の新ファームウェアＮＦＷ１を新ファームウェアＮＦＷ１１〜ＮＦＷ１５に分割し、ホストからのコマンド空き時間を利用して分割単位に不揮発メモリ３２に順次書き込むことになる。
【０１７５】
なお、図３８にあっては、第２ディスク２０−２に第１磁気ディスク２０−１からのコピー処理１３４により新ファームウェアＮＦＷ１，ＮＦＷ２を書き込んでいるが、揮発メモリ３０から第２ディスク２０−２に新ファームウェアＮＦＷ１，ＮＦＷ２を書き込むようにしても良い。
【０１７６】
図３９は、図３８のようにファームウェア更新後のバックグランドによる内部更新処理で、不揮発メモリ３２及び第２磁気ディスク２０−２についても新ファームウェアへの正常な更新が行われた後の電源投入時における第１起動モードによる起動処理を示している。
【０１７７】
第１起動モードによる起動処理は、図２７の実施形態について示した図３０の第１起動モードによる起動処理と同じであり、不揮発メモリ３２と第１磁気ディスク２０−１から新ファームウェアＮＦＷ１，ＮＦＷ２を読み出して揮発メモリ３０に配置して実行することで立ち上げることができる。
【０１７８】
図４０は図３６のファームウェア更新処理において、ファームウェア更新コマンドの実行中に電源が切られた場合の、その後の電源投入に伴う第３起動モードによる起動処理を示した説明図である。
【０１７９】
図３６に示したファームウェア更新処理のコマンド実行中に電源が切られると、コマンド異常終了による応答ができず、またコマンド実行中にあるため第１磁気ディスク２０−１及び不揮発メモリ３２のそれぞれのファームウェアを保証することができず、図４０に示すように、不揮発メモリ３２のファームウェアＦＷ１及び第２磁気ディスク２０−２のファームウェアＮＦＷ２が共に異常な状態にあることが想定される。
【０１８０】
このようなファームウェア更新コマンド実行中に電源が切られた場合の起動処理にあっては、まず不揮発メモリ３２のファームウェアＦＷ１をチェックして、チェックサムなどの診断エラーが出ることから第２起動モードによる起動処理となり、復旧コード７６により復旧処理１３８を行い、第１磁気ディスク２０−１のファームウェアＮＦＷ２をチェックする。
【０１８１】
しかし、第１磁気ディスク２０−１のファームウェアＮＦＷ２についてもエラー１３６が発生した場合、第３起動モードによる起動処理となり、復旧処理１３８として第２磁気ディスク２０−２のファームウェアＮＦＷ１，ＮＦＷ２を揮発メモリ３０に読出し配置して実行することにより立ち上げる。
【０１８２】
この第３起動モードによる起動処理にあっては、図３９に示した第１起動モードによる起動処理及び図３７に示した第２起動モードによる起動処理が新ファームウェアで立ち上がるのに対し、第３起動モードによる起動処理は旧ファームウェアで立ち上がることになる。
【０１８３】
図４１は図４０の第３起動モードによる起動処理で立ち上がった後のバックグランドで実行されるリカバリ処理の説明図である。図４１のリカバリ処理にあっては、不揮発メモリ３２のファームウェアＦＷ１に異常があることから、揮発メモリ３０のファームウェアＦＷ１をファームウェアＦＷ１１〜ＦＷ１５に分割し、分割単位に順次揮発メモリ３０に書き込む。
【０１８４】
また第１磁気ディスク２０−１については、第２磁気ディスク２０−２からのコピー処理１４０により旧ファームウェアＦＷ１，ＦＷ２を全体としてコピーする。このリカバリ処理により、ファームウェア更新コマンドの実行中の電源断により異常となった不揮発メモリ３２及び第１磁気ディスク２０−１のファームウェアを更新前の旧ファームウェアに回復させることができる。
【０１８５】
このような図３６乃至図４１に示した処理は、図１のＭＰＵ２６に示したファームウェア格納処理部４６、起動処理部４８、ファームウェア更新処理部５０及びリカバリ処理部５２の機能として実行される。
【０１８６】
図４２は図３６のファームウェア配置をもつ実施形態について、製造段階で行うファームウェア格納処理のフローチャートである。図４２において、ステップＳ１〜Ｓ３の処理は図３１と同じであり、更に本実施形態にあっては、ファームウェアの格納場所として第２磁気ディスク２０−２を設け、ステップＳ４で第１磁気ディスク２０−１のファームウェア全体を第２磁気ディスク２０−２にコピーして２重化している。
【０１８７】
図４３は図３６の実施形態の処理動作を示したフローチャートである。図４３において、図１に示した磁気ディスク装置１０の電源を投入すると、ステップＳ１で起動処理を起動処理部４８により実行する。この起動処理は、第１起動モード、第２起動モード及び第３起動モードのいずれかの起動処理となる。
【０１８８】
続いてステップＳ２でホストからのライトコマンドまたはリードコマンドの有無をチェックし、コマンドを受信した場合には、ステップＳ３で受信したコマンドを実行する。続いてステップＳ４でファームウェア更新要求コマンドを判別すると、ステップＳ５に進み、ファームウェア更新処理部５０によるファームウェア更新処理を実行する。
【０１８９】
一方、ステップＳ２でコマンドがないアイドル状態が判別されると、ステップＳ７に進み、リカバリー処理部５２によるリカバリ処理がバックグランドで実行される。
【０１９０】
またステップＳ８でステップＳ５のファームウェア更新処理による更新フラグがセットされていることを判別すると、ステップＳ９でファームウェアを不揮発メモリ３２及び第２磁気ディスク２０−２の順番に書き込んで更新するバックグランドでの内部更新処理を実行する。そして、このようなステップＳ２〜Ｓ５，Ｓ７〜Ｓ９の処理を、ステップＳ６で停止指示があるまで繰り返す。
【０１９１】
図４４は図４３のステップＳ５のファームウェア更新処理の詳細を示したフローチャートである。図４４において、ステップＳ１〜Ｓ３の第１モードの起動処理、及びステップＳ４，Ｓ５の第２モードの起動処理は、図３３に示した図２７の実施形態と同じである。
【０１９２】
ステップＳ６，Ｓ７は第３起動モードによる起動処理である。第３起動モードによる起動処理にあっては、ステップＳ１で不揮発メモリ３２の異常が判別され、更にステップＳ４で第１磁気ディスク２０−１の異常が判別された場合に、ステップＳ６に進み、第２磁気ディスク２０−２が正常であることを条件に、ステップＳ７で第２磁気ディスク２０−２から全ファームウェアを揮発メモリ３０に読出し配置して実行する。
【０１９３】
図４５は図４３のステップＳ５のファームウェア更新処理の詳細を示したフローチャートであり、処理手順は図３４のフローチャートと同じである。
【０１９４】
図４６は図４３のステップＳ７のリカバリー処理の詳細を示したフローチャートである。リカバリー処理は、図４０に示したように、第２磁気ディスク２０−２のファームウェアを揮発メモリ３０に読出し配置して実行する第２起動モードで起動した後に、図４１に示すようにバックグランドで実行される処理である。
【０１９５】
即ちステップＳ１で第２磁気ディスク２０−２を使用して起動したか否かチェックし、第２磁気ディスク２０−２を使用して起動したことを判別すると、ステップＳ２に進み、図４１に示したように揮発メモリ３０のファームウェアＦＷ１をハードウェアＦＷ１１〜ＦＷ１５に分割し、アイドル状態のバックグランド処理として分割単位に不揮発メモリ３２に順次書き込んで更新する。続いてステップＳ３で、第２磁気ディスク２０−２からファームウェア全体を第１磁気ディスク２０−１にコピーする。
【０１９６】
図４７は図４３のステップＳ９のファームウェア内部更新処理の詳細を示した説明図である。ファームウェア内部更新処理は、ステップＳ１で図３８に示したように、不揮発メモリ３２に新ファームウェアを分割し、アイドル状態のバックグランド処理として分割単位に不揮発メモリ３２に順次書き込んで更新する。続いて、ステップＳ２で第２磁気ディスク２０−２に第１磁気ディスク２０−１からファームウェア全体をコピーする。そしてステップＳ３で更新フラグをリセットする。
【０１９７】
この図３６〜図４７に示した不揮発メモリ３２及び第１磁気ディスク２０−１に加えて更に第２磁気ディスク２０−２にファームウェアを格納するようにした実施形態にあっては、ファームウェア更新コマンドのコマンド実行中の電源切断に対し、第３起動モードによる起動処理により旧ファームウェアで立ち上がることができ、この点で図２７の実施形態に示した第２磁気ディスクにファームウェアを格納していない場合に比べメリットが得られる。
【０１９８】
しかしながら、ファームウェア更新コマンドの実行中に電源を切断する可能性はごく低いことから、実用上は第２磁気ディスク２０−２にファームウェアを格納しない図２７〜図３５の実施形態の方が装置構成及び処理が簡単であることから、有利ということもできる。
【０１９９】
また本発明は図１の磁気ディスク装置１０に設けたＭＰＵ２６で実行する制御プログラムを提供するものであり、この制御プログラムは図１９〜図２４、図３１〜図３５、図４２〜図４７のフローチャートに示した内容となる。
【０２００】
また本発明はＭＰＵ２６で実行されるプログラムを格納したコンピュータ読取り可能な記憶媒体を提供するものである。この記憶媒体としてはＣＤ−ＲＯＭ、フロッピィディスク（Ｒ）、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの可搬型記憶媒体や、コンピュータシステムの内外に備えられたハードディスクドライブなどの記憶装置の他、回線を介してプログラムを保持するデータベース、更には他のコンピュータシステム並びにそのデータベースや、更に回線上の伝送媒体を含むものである。
【０２０１】
更に本発明は、図１の磁気ディスク装置１０の制御ボード１４で実現される制御装置を提供するものである。
【０２０２】
なお本発明は上記の条件に限定されず、その目的と利点を損なうことのない適宜の変形を含む。更に本発明は上記の実施形態に示した数値による限定は受けない。
ここで本発明の特徴をまとめて列挙すると次の付記のようになる。
（付記）
（付記１）（装置）
ディスク媒体に対しデータを記録再生するドライブ制御ソフトウェアであるファームウェアを、起動コード及び復旧コードを格納した不揮発メモリと第１ディスク媒体に分けて格納すると共に、前記不揮発メモリに格納したファームウェアのコピーを前記第１ディスク媒体に格納し、更に、前記第１ディスク媒体に格納したファームウェア全体のコピーを第２ディスク媒体に格納するファームウェア格納処理部と、
電源投入時に、前記不揮発メモリが正常な場合に前記起動コードに基づいて前記不揮発メモリと前記第１ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第１起動モード、前記第１起動モードで前記第１ディスク媒体が異常な場合に前記不揮発メモリと第２ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第２起動モード、前記不揮発メモリが異常な場合に前記復旧コードに基づいて前記第１ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第３起動モード、又は前記第３起動モードで前記第１ディスク媒体が異常な場合に前記第２ディスク媒体からファームウェア全体を前記揮発メモリに読出し配置して起動する第４起動モードのいずれかを実行する起動処理部と、
を備えたことを特徴とする記憶装置。（１）
【０２０３】
（付記２）
付記１記載の記憶装置に於いて、
上位装置から前記ファームウェアの更新要求を受けた際に、前記揮発メモリに配置されている旧ファームウェアを前記上位装置から転送された新ファームウェアに切り替えて実行した後に、前記揮発メモリの新ファームウェアを前記第１ディスク媒体、前記不揮発メモリ及び前記第２ディスク媒体の順番に書き込んで更新するファームウェア更新処理部を備えたことを特徴とする記憶装置。（２）
【０２０４】
（付記３）
付記１記載の記憶装置に於いて、更に、バックグラウンド処理により動作するリカバリー処理部を設け、
前記リカバリー処理部は、前記起動処理部が前記第１起動モードで起動した場合に第１ディスク媒体のファームウェアを第２ディスク媒体にコピーし、前記起動処理部が前記第２起動モードで起動した場合は第２ディスク媒体のファームウェアを第１ディスク媒体にコピーすることを特徴とする記憶装置。（３）
【０２０５】
（付記４）
付記３記載の記憶装置に於いて、前記リカバリー処理部は、更に、前記起動処理部が前記第３起動モードで起動した場合に第１ディスク媒体のファームウェアを第２ディスク媒体にコピーし、前記起動処理部が前記第４起動モードで起動した場合は第２ディスク媒体のファームウェアを第１ディスク媒体にコピーすることを特徴とする記憶装置。（４）
【０２０６】
（付記５）
付記１記載の記憶装置に於いて、前記起動処理部は、
前記第１乃至第４起動モードでは、前記不揮発メモリについて、格納したファームウェアの正当性の確認を行ない正常と判断し、そうでない場合は異常と判断し、
前記第１又は第２起動モードでは、前記第１ディスク媒体及び前記第２ディスク媒体について、格納したファームウェアが読出し可能で、正当であり、更にバージョンが前記不揮発メモリのファームウェアと同一な場合に正常と判断し、そうでない場合は異常と判断し、
前記第３又は第４起動モードでは、前記第１ディスク媒体及び第２ディスク媒体について、格納したファームウェアが読出し可能で、且つ正当性の確認を行ない正常と判断し、そうでない場合は異常と判断することを特徴とする記憶装置。（５）
【０２０７】
（付記６）
付記２記載の記憶装置に於いて、前記ファームウェア更新処理部は、
前記バッファメモリに格納した新ファームウェアを前記揮発メモリに配置されている旧ファームウェアに上書きして更新した後に装置を起動して新ファームウェアの処理に切り替え、
切り替え後の新ファームウェアの実行により前記上位装置に更新終了を通知し、
前記揮発メモリの新ファームウェアをバックグラウンド処理により前記第１ディスク媒体、前記不揮発メモリ及び前記第２ディスク媒体の順番に書き込んで更新することを特徴とする記憶装置。（６）
【０２０８】
（付記７）
ディスク媒体に対しデータを記録再生するドライブ制御ソフトウェアであるファームウェアを、起動コード及び復旧コードを格納した不揮発メモリと第１ディスク媒体に分けて格納すると共に、前記不揮発メモリに格納したファームウェアのコピーを前記第１ディスク媒体に格納し、更に、前記第１ディスク媒体に格納したファームウェア全体のコピーを第２ディスク媒体に格納するファームウェア格納処理ステップと、
電源投入時に、前記不揮発メモリが正常な場合に前記起動コードに基づいて前記不揮発メモリと前記第１ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第１起動モード、前記第１起動モードで前記第１ディスク媒体が異常な場合に前記不揮発メモリと第２ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第２起動モード、前記不揮発メモリが異常な場合に前記復旧コードに基づいて前記第１ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第３起動モード、又は前記第３起動モードで前記第１ディスク媒体が異常な場合に前記第２ディスク媒体からファームウェア全体を前記揮発メモリに読出し配置して起動する第４起動モードのいずれかを実行する起動処理ステップと、
を備えたことを特徴とする記憶装置の制御方法。（７）
【０２０９】
（付記８）
付記７記載の記憶装置の制御方法に於いて、上位装置から前記ファームウェアの更新要求を受けた際に、前記揮発メモリに配置されている旧ファームウェアを前記上位装置から転送された新ファームウェアに切り替えて実行した後に、前記揮発メモリの新ファームウェアを前記第１ディスク媒体、前記不揮発メモリ及び前記第２ディスク媒体の順番に書き込んで更新するファームウェア更新処理ステップを備えたことを特徴とする記憶装置の制御方法。（８）
【０２１０】
（付記９）
付記７記載の記憶装置の制御方法に於いて、更に、バックグラウンド処理により動作するリカバリー処理ステップを設け、
前記リカバリー処理ステップは、前記起動処理ステップが前記第１起動モードで起動した場合に第１ディスク媒体のファームウェアを第２ディスク媒体にコピーし、前記起動処理ステップが前記第２起動モードで起動した場合は第２ディスク媒体のファームウェアを第１ディスク媒体にコピーすることを特徴とする記憶装置の制御方法。
【０２１１】
（付記１０）
付記９記載の記憶装置の制御方法に於いて、前記リカバリー処理ステップは、更に、前記起動処理ステップが前記第３起動モードで起動した場合に第１ディスク媒体のファームウェアを第２ディスク媒体にコピーし、前記起動処理ステップが前記第４起動モードで起動した場合は第２ディスク媒体のファームウェアを第１ディスク媒体にコピーすることを特徴とする記憶装置の制御方法。
【０２１２】
（付記１１）
付記８記載の記憶装置の制御方法に於いて、前記ファームウェア更新処理ステップは、
前記バッファメモリに格納した新ファームウェアを前記揮発メモリに配置されている旧ファームウェアに上書きして更新した後に装置を起動して新ファームウェアの処理に切り替え、
切り替え後の新ファームウェアの実行により前記上位装置に更新終了を通知し、
前記揮発メモリの新ファームウェアをバックグラウンド処理により前記第１ディスク媒体、前記不揮発メモリ及び前記第２ディスク媒体の順番に書き込んで更新することを特徴とする記憶装置の制御方法。
【０２１３】
（付記１２）
ディスク媒体に対しデータを記録再生するドライブ制御ソフトウェアであるファームウェアを、起動コード及び復旧コードを格納した不揮発メモリと第１ディスク媒体に分けて格納すると共に、前記不揮発メモリに格納したファームウェアのコピーを前記第１ディスク媒体に格納し、更に、前記第１ディスク媒体に格納したファームウェア全体のコピーを第２ディスク媒体に格納するファームウェア格納処理部と、
電源投入時に、前記不揮発メモリが正常な場合に前記起動コードに基づいて前記不揮発メモリと前記第１ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第１起動モード、前記第１起動モードで前記第１ディスク媒体が異常な場合に前記不揮発メモリと第２ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第２起動モード、前記不揮発メモリが異常な場合に前記復旧コードに基づいて前記第１ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第３起動モード、又は前記第３起動モードで前記第１ディスク媒体が異常な場合に前記第２ディスク媒体からファームウェア全体を前記揮発メモリに読出し配置して起動する第４起動モードのいずれかを実行する起動処理部と、
を備えたことを特徴とする記憶装置の制御装置。（９）
【０２１４】
（付記１３）
付記１２記載の記憶装置の制御装置に於いて、上位装置から前記ファームウェアの更新要求を受けた際に、前記揮発メモリに配置されている旧ファームウェアを前記上位装置から転送された新ファームウェアに切り替えて実行した後に、前記揮発メモリの新ファームウェアを前記第１ディスク媒体、前記不揮発メモリ及び前記第２ディスク媒体の順番に書き込んで更新するファームウェア更新処理部を備えたことを特徴とする記憶装置の制御装置。
【０２１５】
（付記１４）
付記１２記載の記憶装置の制御装置に於いて、更に、バックグラウンド処理により動作するリカバリー処理部を設け、
前記リカバリー処理部は、前記起動処理部が前記第１起動モードで起動した場合に第１ディスク媒体のファームウェアを第２ディスク媒体にコピーし、前記起動処理部が前記第２起動モードで起動した場合は第２ディスク媒体のファームウェアを第１ディスク媒体にコピーすることを特徴とする記憶装置の制御装置。
【０２１６】
（付記１５）
付記１３記載の記憶装置の制御装置に於いて、前記リカバリー処理部は、更に、前記起動処理部が前記第３起動モードで起動した場合に第１ディスク媒体のファームウェアを第２ディスク媒体にコピーし、前記起動処理部が前記第４起動モードで起動した場合は第２ディスク媒体のファームウェアを第１ディスク媒体にコピーすることを特徴とする記憶装置の制御装置。
【０２１７】
（付記１６）
付記１３記載の記憶装置の制御装置に於いて、前記起動処理部は、
前記第１乃至第４起動モードでは、前記不揮発メモリについて、格納したファームウェアの正当性の確認を行い正常と判断し、そうでない場合は異常と判定し、
前記第１又は第２起動モードでは、前記第１ディスク媒体及び前記第２ディスク媒体について、格納したファームウェアが読出し可能で、正当であり、更にバージョンが前記不揮発メモリのファームウェアと同一な場合に正常と判断し、そうでない場合は異常と判断し、
前記第３又は第４起動モードでは、前記第１ディスク媒体及び第２ディスク媒体について、格納したファームウェアが読出し可能で、且つ正当性の確認を行い正常と判断し、そうでない場合は異常と判断することを特徴とする記憶装置の制御装置。
【０２１８】
（付記１７）
付記１３記載の記憶装置の制御装置に於いて、前記ファームウェア更新処理部は、
前記バッファメモリに格納した新ファームウェアを前記揮発メモリに配置されている旧ファームウェアに上書きして更新した後に装置を起動して新ファームウェアの処理に切り替え、
切り替え後の新ファームウェアの実行により前記上位装置に更新終了を通知し、
前記揮発メモリの新ファームウェアをバックグラウンド処理により前記第１ディスク媒体、前記不揮発メモリ及び前記第２ディスク媒体の順番に書き込んで更新することを特徴とする記憶装置の制御装置。
【０２１９】
（付記１８）
付記１記載の記憶装置に於いて、更に、バックグラウンド処理により動作するリカバリー処理部を設け、
前記リカバリー処理部は、
前記起動処理部が前記第１起動モードで起動した場合は第１ディスク媒体のファームウェアを第２ディスク媒体及び第３ディスク媒体にコピーし、
前記起動処理部が前記第２起動モードで起動した場合は第２ディスク媒体のファームウェアを第３ディスク媒体及び第１ディスク媒体にコピーし、更に
前記起動処理部が前記第３起動モードで起動した場合は第３ディスク媒体のファームウェアを第１ディスク媒体及び第２ディスク媒体にコピーすることを特徴とする記憶装置。
【０２２０】
（付記１９）
ディスク媒体に対しデータを記録再生するドライブ制御ソフトウェアであるファームウェアを、起動コード及び復旧コードを格納した不揮発メモリとディスク媒体に分けて格納すると共に、前記不揮発メモリに格納したファームウェアのコピーを前記ディスク媒体に格納するファームウェア格納処理部と、
電源投入時に、前記不揮発メモリが正常な場合に前記起動コードに基づいて前記不揮発メモリと前記ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第１起動モード、又は前記第１起動モードで前記不揮発メモリが異常な場合に前記復旧コードに基づいて前記ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第２起動モードのいずれかを実行する起動処理部と、
上位装置から前記ファームウェアの更新要求を受けた際に、バッファメモリに格納した新ファームウェアを前記ディスク媒体に書き込んで更新した後に前記不揮発メモリの旧ファームウェアを破壊し、前記揮発メモリに配置されている旧ファームウェアを前記新ファームウェアに切り替えて実行した後に前記上位装置に更新終了を通知し、その後、前記揮発メモリの新ファームウェアをバックグラウンド処理により前記不揮発メモリに書き込んで更新するファームウェア更新部と、
を備えたことを特徴とする記憶装置。（１０）
【０２２１】
（付記２０）
ディスク媒体に対しデータを記録再生するドライブ制御ソフトウェアであるファームウェアを、起動コード及び復旧コードを格納した不揮発メモリと第１ディスク媒体に分けて格納すると共に、前記不揮発メモリに格納したファームウェアのコピーを前記第１ディスク媒体に格納し、更に、前記第１ディスク媒体に格納したファームウェア全体のコピーを第２ディスク媒体に格納するファームウェア格納処理部と、
電源投入時に、前記不揮発メモリが正常な場合に前記起動コードに基づいて前記不揮発メモリと前記ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第１起動モード、前記第１起動モードで前記第１ディスク媒体が異常な場合に前記不揮発メモリと前記第２ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第２起動モード、前記第１起動モードで前記不揮発メモリが異常な場合に前記復旧コードに基づいて前記第１ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第３起動モード、又は、前記第３起動モードで前記第１ディスク媒体が異常な場合に前記第２ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第４起動モードのいずれかを実行する起動処理部と、
上位装置から前記ファームウェアの更新要求を受けた際に、バッファメモリに格納した新ファームウェアを前記第１ディスク媒体に書き込んで更新した後に前記不揮発メモリの旧ファームウェアを破壊し、前記第１ディスク媒体に配置されている旧ファームウェアを前記新ファームウェアに切り替えて実行した後に前記上位装置に更新終了を通知し、その後、前記揮発メモリの新ファームウェアをバックグラウンド処理により前記不揮発メモリ及び前記第２ディスク媒体の順番に書き込んで更新するファームウェア更新部と、
を備えたことを特徴とする記憶装置。（１１）
【０２２２】
（付記２１）
ディスク媒体に対しデータを記録再生するドライブ制御ソフトウェアであるファームウェアを、起動コード及び復旧コードを格納した不揮発メモリとディスク媒体に分けて格納すると共に、前記不揮発メモリに格納したファームウェアのコピーを前記ディスク媒体に格納するファームウェア格納処理ステップと、
電源投入時に、前記不揮発メモリが正常な場合に前記起動コードに基づいて前記不揮発メモリと前記ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第１起動モード、又は前記第１起動モードで前記不揮発メモリが異常な場合に前記復旧コードに基づいて前記ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第２起動モードのいずれかを実行する起動処理ステップと、
上位装置から前記ファームウェアの更新要求を受けた際に、バッファメモリに格納した新ファームウェアを前記ディスク媒体に書き込んで更新した後に前記不揮発メモリの旧ファームウェアを破壊し、前記揮発メモリに配置されている旧ファームウェアを前記新ファームウェアに切り替えて実行した後に前記上位装置に更新終了を通知し、その後、前記揮発メモリの新ファームウェアをバックグラウンド処理により前記不揮発メモリに書き込んで更新するファームウェア更新ステップと、
を備えたことを特徴とする記憶方法。
【０２２３】
（付記２２）
ディスク媒体に対しデータを記録再生するドライブ制御ソフトウェアであるファームウェアを、起動コード及び復旧コードを格納した不揮発メモリと第１ディスク媒体に分けて格納すると共に、前記不揮発メモリに格納したファームウェアのコピーを前記第１ディスク媒体に格納し、更に、前記第１ディスク媒体に格納したファームウェア全体のコピーを第２ディスク媒体に格納するファームウェア格納処理ステップと、
電源投入時に、前記不揮発メモリが正常な場合に前記起動コードに基づいて前記不揮発メモリと前記ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第１起動モード、前記第１起動モードで前記第１ディスク媒体が異常な場合に前記不揮発メモリと前記第２ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第２起動モード、前記第１起動モードで前記不揮発メモリが異常な場合に前記復旧コードに基づいて前記第１ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第３起動モード、又は、前記第３起動モードで前記第１ディスク媒体が異常な場合に前記第２ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第４起動モードのいずれかを実行する起動処理ステップと、
上位装置から前記ファームウェアの更新要求を受けた際に、バッファメモリに格納した新ファームウェアを前記第１ディスク媒体に書き込んで更新した後に前記不揮発メモリの旧ファームウェアを破壊し、前記揮発メモリに配置されている旧ファームウェアを前記新ファームウェアに切り替えて実行した後に前記上位装置に更新終了を通知し、その後、前記第１ディスク媒体の新ファームウェアをバックグラウンド処理により前記不揮発メモリ及び前記第２ディスク媒体の順番に書き込んで更新するファームウェア更新ステップと、
を備えたことを特徴とする記憶方法。
【０２２４】
（付記２３）
ディスク媒体に対しデータを記録再生するドライブ制御ソフトウェアであるファームウェアを、起動コード及び復旧コードを格納した不揮発メモリとディスク媒体に分けて格納すると共に、前記不揮発メモリに格納したファームウェアのコピーを前記ディスク媒体に格納するファームウェア格納処理ステップと、
電源投入時に、前記不揮発メモリが正常な場合に前記起動コードに基づいて前記不揮発メモリと前記ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第１起動モード、又は前記第１起動モードで前記不揮発メモリが異常な場合に前記復旧コードに基づいて前記ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第２起動モードのいずれかを実行する起動処理ステップと、
上位装置から前記ファームウェアの更新要求を受けた際に、バッファメモリに格納した新ファームウェアを前記ディスク媒体に書き込んで更新した後に前記不揮発メモリの旧ファームウェアを破壊し、前記揮発メモリに配置されている旧ファームウェアを前記新ファームウェアに切り替えて実行した後に前記上位装置に更新終了を通知し、その後、前記揮発メモリの新ファームウェアをバックグラウンド処理により前記不揮発メモリに書き込んで更新するファームウェア更新ステップと、
を備えたことを特徴とする記憶装置の制御装置。
【０２２５】
（付記２４）
ディスク媒体に対しデータを記録再生するドライブ制御ソフトウェアであるファームウェアを、起動コード及び復旧コードを格納した不揮発メモリと第１ディスク媒体に分けて格納すると共に、前記不揮発メモリに格納したファームウェアのコピーを前記第１ディスク媒体に格納し、更に、前記第１ディスク媒体に格納したファームウェア全体のコピーを第２ディスク媒体に格納するファームウェア格納処理ステップと、
電源投入時に、前記不揮発メモリが正常な場合に前記起動コードに基づいて前記不揮発メモリと前記ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第１起動モード、前記第１起動モードで前記第１ディスク媒体が異常な場合に前記不揮発メモリと前記第２ディスク媒体のファームウェアを揮発メモリに読出し配置して起動する第２起動モード、前記第１起動モードで前記不揮発メモリが異常な場合に前記復旧コードに基づいて前記第１ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第３起動モード、又は、前記第３起動モードで前記第１ディスク媒体が異常な場合に前記第２ディスク媒体からファームウェア全体を揮発メモリに読出し配置して起動する第４起動モードのいずれかを実行する起動処理ステップと、
上位装置から前記ファームウェアの更新要求を受けた際に、バッファメモリに格納した新ファームウェアを前記第１ディスク媒体に書き込んで更新した後に前記不揮発メモリの旧ファームウェアを破壊し、前記揮発メモリに配置されている旧ファームウェアを前記新ファームウェアに切り替えて実行した後に前記上位装置に更新終了を通知し、その後、前記揮発メモリ又は前記第１ディスク媒体の新ファームウェアをバックグラウンド処理により前記不揮発メモリ及び前記第２ディスク媒体の順番に書き込んで更新するファームウェア更新ステップと、
を備えたことを特徴とする記憶装置の制御装置。
【図面の簡単な説明】
【０２２６】
【図１】本発明の一実施形態を示した磁気ディスク装置のブロック図
【図２】本実施形態の磁気ディスク装置を備えたディスクアレイ装置のブロック図
【図３】本実施形態におけるファームウェアの格納と起動時の読出し配置を示した説明図
【図４】本実施形態の起動処理部による第１起動モードの起動処理の説明図
【図５】本実施形態の起動処理部による第２起動モードの起動処理の説明図
【図６】本実施形態の起動処理部による第３起動モードの起動処理の説明図
【図７】本実施形態の起動処理部による第４起動モードの起動処理の説明図
【図８】第１磁気ディスクを使用して起動した際の運用中におけるリカバリー処理の説明図
【図９】第２磁気ディスクを使用して起動した際の運用中におけるリカバリー処理の説明図
【図１０】ファームウェア更新処理の説明図
【図１１】第１磁気ディスクの更新中又は更新直後にエラーが発生した場合の説明図
【図１２】図１１の更新中にエラーが発生した後の電源投入による起動処理の説明図
【図１３】図１２の起動処理により起動した後の動作中に行われるリカバリー処理の説明図
【図１４】不揮発メモリの更新中にエラーが発生した場合の説明図
【図１５】図１４の更新中エラーが発生した後の電源投入による起動処理の説明図
【図１６】不揮発メモリの更新直後又は第２磁気ディスクの更新中にエラーが発生した場合の説明図
【図１７】図１６の更新中エラーが発生した後の電源投入による起動処理の説明図
【図１８】図１７の起動処理で起動した後の動作中に行われるリカバリー処理の説明図
【図１９】製造段階で行う本実施形態によるファームウェア格納処理のフローチャート
【図２０】本実施形態の処理動作を示したフローチャート
【図２１】図２０のステップＳ１の起動処理の詳細を示したフローチャート
【図２２】図２０のステップＳ７のリカバリー処理の詳細を示したフローチャート
【図２３】図２０のステップＳ５のファームウェア更新処理の詳細を示したフローチャート
【図２４】図２０のステップＳ９のファームウェア内部更新処理の詳細を示したフローチャート
【図２５】不揮発メモリを持たない装置を対象とした本発明の他の実施形態におけるファームウェアの格納状態の説明図
【図２６】図２５の実施形態におけるファームウェア更新処理の説明図
【図２７】本発明の他の実施形態におけるファームウェアの配置と更新処理の説明図
【図２８】図２７のファームウェア更新で更新直後に電源を切った後の電源投入による第２起動モードの起動処理を示した説明図
【図２９】図２７のファームウェア更新後のバックグランドで実行する不揮発メモリの内部更新処理を示した説明図
【図３０】図２９で不揮発メモリが更新された後の電源投入による第１起動モードの起動処理を示した説明図
【図３１】図２７の実施形態について製造段階で行うファームウェア格納処理のフローチャート
【図３２】図２７の実施形態の処理動作を示したフローチャート
【図３３】図３２のステップＳ１の起動処理の詳細を示したフローチャート
【図３４】図３２のステップＳ５のファームウェア更新処理の詳細を示したフローチャート
【図３５】図３２のステップＳ８のファームウェア内部更新処理の詳細を示したフローチャート
【図３６】本発明の他の実施形態におけるファームウェアの配置と更新処理の説明図
【図３７】図３６のファームウェア更新で更新直後に電源を切った後の電源投入による第２起動モードの起動処理を示した説明図
【図３８】図３６のファームウェア更新後のバックグランドで実行する不揮発メモリの内部更新処理を示した説明図
【図３９】図３６で不揮発メモリが更新された後の電源投入による第１起動モードの起動処理を示した説明図
【図４０】不揮発メモリ及び第１磁気ディスクのエラーにより第２磁気ディスクのファームウェアを使用する第３起動モードの起動処理を示した説明図
【図４１】図４０の第３起動モードで起動した後のバックグランドで実行されるリカバリ処理の説明図
【図４２】図３６の実施形態について製造段階で行う本実施形態によるファームウェア格納処理のフローチャート
【図４３】図３６の実施形態の処理動作を示したフローチャート
【図４４】図４３のステップＳ１の起動処理の詳細を示したフローチャート
【図４５】図４３のステップＳ５のファームウェア更新処理の詳細を示したフローチャート
【図４６】図４３のステップＳ７のリカバリ−処理の詳細を示したフローチャート
【図４７】図４３のステップＳ８のファームウェア内部更新処理の詳細を示したフローチャート
【符号の説明】
【０２２７】
１０，１０−１１〜１０−２５：磁気ディスク装置
１２：ディスクエンクロージャ
１４：制御ボード
２５：ロータリアクチュエータ
１６：スピンドルモータ
１８：ボイスコイルモータ
２０：磁気ディスク
２０−１，２０−１１：第１磁気ディスク
２０−２，２０−１２：第２磁気ディスク
２０−２１：第３磁気ディスク
２２−１〜２２−４：ヘッド
２４：ヘッドＩＣ
２６：ＭＰＵ
２８：バス
３０：揮発メモリ
３２：不揮発メモリ
３４：ホストインタフェース制御部
３６：バッファメモリ制御部
３８：バッファメモリ
４０：ハードディスクコントローラ
４２：リードチャネル
４４：モータ駆動制御部
４６：ファームウェア格納処理部
４８：起動処理部
５０：ファームウェア更新処理部
５２：リカバリー処理部
５５−１，５５−２：ホスト
５６：ディスクアレイ装置
５８−１１，５８−１２，５８−２１，５８−２２：チャネルアダプタ
６０−１，６０−２：制御モジュール
６２−１，６２−２：ディスクエンクロージャ
６４−１，６４−２：ＤＭＡコントローラ
６６−１，６６−２：ＣＰＵ
６８−１，６８−２：メモリ（揮発）
７０−１１，７０−１２，７０−２１，７０−２２：デバイスインタフェース
７２−１〜７２−５：ファームウェア格納領域
７４：ブートコード
７６：復旧コード
７８，７８−１，７８−２：ファームウェア格納領域
１３０：破壊処理
１３２，１３８：復旧処理
１３４，１４０：コピー処理
１３６：エラー
【図１】
2008084291.tif 000003
【図２】
2008084291.tif 000004
【図３】
2008084291.tif 000005
【図４】
2008084291.tif 000006
【図５】
2008084291.tif 000007
【図６】
2008084291.tif 000008
【図７】
2008084291.tif 000009
【図８】
2008084291.tif 000010
【図９】
2008084291.tif 000011
【図１０】
2008084291.tif 000012
【図１１】
2008084291.tif 000013
【図１２】
2008084291.tif 000014
【図１３】
2008084291.tif 000015
【図１４】
2008084291.tif 000016
【図１５】
2008084291.tif 000017
【図１６】
2008084291.tif 000018
【図１７】
2008084291.tif 000019
【図１８】
2008084291.tif 000020
【図１９】
2008084291.tif 000021
【図２０】
2008084291.tif 000022
【図２１】
2008084291.tif 000023
【図２２】
2008084291.tif 000024
【図２３】
2008084291.tif 000025
【図２４】
2008084291.tif 000026
【図２５】
2008084291.tif 000027
【図２６】
2008084291.tif 000028
【図２７】
2008084291.tif 000029
【図２８】
2008084291.tif 000030
【図２９】
2008084291.tif 000031
【図３０】
2008084291.tif 000032
【図３１】
2008084291.tif 000033
【図３２】
2008084291.tif 000034
【図３３】
2008084291.tif 000035
【図３４】
2008084291.tif 000036
【図３５】
2008084291.tif 000037
【図３６】
2008084291.tif 000038
【図３７】
2008084291.tif 000039
【図３８】
2008084291.tif 000040
【図３９】
2008084291.tif 000041
【図４０】
2008084291.tif 000042
【図４１】
2008084291.tif 000043
【図４２】
2008084291.tif 000044
【図４３】
2008084291.tif 000045
【図４４】
2008084291.tif 000046
【図４５】
2008084291.tif 000047
【図４６】
2008084291.tif 000048
【図４７】
2008084291.tif 000049