(57)【要約】【課題】  システム更新処理において、ダウンタイムを減少させることができる装置等を提供する。【解決手段】  電子機器は、複数のシステムにより多重化されていて、起動するシステムを指定する指定情報を参照して、指定されたシステムとは異なる他のシステムを更新対象のシステムとして設定し、指定されたシステムに対応する制御プログラムを読み出し、起動処理を実行する起動手段と、外部から取得したシステムの更新情報に従って、更新処理の進捗状況を示す更新進捗情報を設定し、起動手段により更新対象のシステムとして設定された他のシステムに対応する制御プログラムの更新処理が完了した後に、指定情報で指定するシステムを他のシステムに変更する更新手段とを含む。【選択図】  図３
2019149118.tif 000002
【特許請求の範囲】
【請求項１】
複数のシステムにより多重化された電子機器であって、
起動するシステムを指定する指定情報を参照して、指定されたシステムとは異なる他のシステムを更新対象のシステムとして設定し、前記指定されたシステムに対応する制御プログラムを読み出し、起動処理を実行する起動手段と、
外部から取得したシステムの更新情報に従って、更新処理の進捗状況を示す更新進捗情報を設定し、前記起動手段により前記更新対象のシステムとして設定された前記他のシステムに対応する制御プログラムの更新処理が完了した後に、前記指定情報で指定するシステムを前記他のシステムに変更する更新手段とを含む、電子機器。
【請求項２】
前記各システムは、機器の記憶領域を論理的に分割した各論理区画または各機器の各記憶領域に存在し、
前記起動手段は、前記更新対象のシステムが存在する機器として参照される機器情報に、前記他のシステムが存在する論理区画または記憶領域を割り当てることにより、前記他のシステムを前記更新対象のシステムとして設定する、請求項１に記載の電子機器。
【請求項３】
前記更新手段は、前記他のシステムに対する更新処理を実行する前に、前記他のシステムが存在する論理区画または記憶領域を管理するための管理情報を、前記指定されたシステムが存在する論理区画または記憶領域に複製する、請求項２に記載の電子機器。
【請求項４】
前記更新手段は、前記他のシステムが存在する論理区画または記憶領域の割り当てが不可である場合、前記指定されたシステムが存在する論理区画または記憶領域に複製した管理情報を、前記他のシステムが存在する論理区画または記憶領域に書き込む、請求項３に記載の電子機器。
【請求項５】
前記更新手段は、前記更新情報を外部記録媒体から取得し、前記起動手段が起動処理に使用する起動情報を含む前記管理情報を、前記外部記録媒体に複製する、請求項３または４に記載の電子機器。
【請求項６】
前記更新手段は、前記他のシステムが存在する論理区画または記憶領域の割り当てが不可である場合、前記指定されたシステムが存在する論理区画または記憶領域を管理するための管理情報を、前記他のシステムが存在する論理区画または記憶領域に書き込む、請求項２に記載の電子機器。
【請求項７】
前記指定情報を記憶する記憶手段を含む、請求項１〜６のいずれか１項に記載の電子機器。
【請求項８】
前記更新手段は、前記更新進捗情報に応じて、更新処理をバックグラウンドで実行する、請求項１〜７のいずれか１項に記載の電子機器。
【請求項９】
複数のシステムの更新処理をコンピュータに実行させるためのプログラムであって、
起動するシステムを指定する指定情報を参照して、指定されたシステムとは異なる他のシステムを更新対象のシステムとして設定するステップと、
前記指定されたシステムに対応する制御プログラムを読み出し、起動処理を実行するステップと、
外部から取得したシステムの更新情報に従って、更新処理の進捗状況を示す更新進捗情報を設定するステップと、
前記更新対象のシステムとして設定された前記他のシステムに対応する制御プログラムの更新処理が完了した後に、前記更新情報に従って、前記指定情報で指定するシステムを前記他のシステムに変更するステップとを実行させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のシステムにより多重化された電子機器および複数のシステムの更新処理をコンピュータに実行させるためのプログラムに関する。
【背景技術】
【０００２】
PCやプリンタ等の電子機器に実装された各ハードウェアを制御するために、ファームウェアと呼ばれるプログラムが使用される。ファームウェアは、不具合、欠陥、脆弱性等が見つかった場合や機能の追加等に伴って更新され、ファームウェア更新のために、更新ファイルが提供される。
【０００３】
ファームウェア更新は、更新ファイルが読み込めない等の原因により失敗する場合があり、更新が失敗しても、電子機器を正常に起動させ、更新を再開させるために、ファームウェアを多重化する技術が知られている（例えば、特許文献１参照）。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上記の技術では、ファームウェアとして、正常時に起動するプライマリシステムと、更新失敗時に起動するセカンダリシステムとが存在する論理区画（パーティション）が共に固定である。このため、プライマリシステムの更新から開始し、その更新が失敗した場合、再起動後、セカンダリシステムによるプライマリシステムの更新を行い、再び再起動しなければ、ユーザが電子機器を利用できる状態にすることができない。これでは、ユーザが電子機器を利用できない期間（ダウンタイム）が発生するという問題があった。
【０００５】
本発明は、上記の問題に鑑みなされたものであり、ダウンタイムを減少させることができる電子機器およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
上述した課題を解決するために、発明の一実施形態では、複数のシステムにより多重化された電子機器であって、
起動するシステムを指定する指定情報を参照して、指定されたシステムとは異なる他のシステムを更新対象のシステムとして設定し、指定されたシステムに対応する制御プログラムを読み出し、起動処理を実行する起動手段と、
外部から取得したシステムの更新情報に従って、更新処理の進捗状況を示す更新進捗情報を設定し、起動手段により更新対象のシステムとして設定された他のシステムに対応する制御プログラムの更新処理が完了した後に、指定情報で指定するシステムを他のシステムに変更する更新手段と
を含む、電子機器を提供する。
【発明の効果】
【０００７】
本発明によれば、ダウンタイムを減少させることができる。
【図面の簡単な説明】
【０００８】
【図１】画像形成装置のハードウェア構成の一例を示した図。
【図２】画像形成装置のハードウェアおよびソフトウェア構成の一例を示した図。
【図３】画像形成装置の起動処理に関する主要な機能構成を示したブロック図。
【図４】画像形成装置のシステム更新に関する第１の機能構成を示したブロック図。
【図５】更新ファイルのデータ構造の一例を示した図。
【図６】画像形成装置の起動処理の第１の例を示したフローチャート。
【図７】画像形成装置のシステム更新通知が来た場合の処理の第１の例を示したフローチャート。
【図８】更新中断情報がNVRAMに記憶されている場合の処理の第１の例を示したフローチャート。
【図９】NVRAMに記憶される記憶情報の遷移について説明する図。
【図１０】記憶情報の遷移における区間１で更新中断が発生した場合の処理の第１の例を示したフローチャート。
【図１１】記憶情報の遷移における区間２で更新中断が発生した場合の処理の第１の例を示したフローチャート。
【図１２】ファイルシステムについて説明する図。
【図１３】画像形成装置のシステム更新に関する第２の機能構成を示したブロック図。
【図１４】画像形成装置のシステム更新通知が来た場合の処理の第２の例を示したフローチャート。
【図１５】更新中断情報がNVRAMに記憶されている場合の処理の第２の例を示したフローチャート。
【図１６】記憶情報の遷移における区間１で更新中断が発生した場合の処理の第２の例を示したフローチャート。
【図１７】記憶情報の遷移における区間２で更新中断が発生した場合の処理の第２の例を示したフローチャート。
【発明を実施するための形態】
【０００９】
以下、本実施形態の電子機器を、画像形成装置として説明するが、電子機器は、画像形成装置に限定されるものではない。画像形成装置には、コピー機、ファクシミリ装置、スキャナ装置、プリンタのほか、コピー、ファクシミリ、スキャナ、プリント等の画像を扱う複合機能を有する複合機等があるが、以下、画像形成装置を複合機として説明する。
【００１０】
図１は、画像形成装置１０のハードウェア構成の一例を示した図である。画像形成装置１０は、コントローラ１１と、操作部１２と、エンジン１３とを含んで構成される。コントローラ１１は、CPU２０と、ASIC(Application Specific Integration Circuit)２１と、DRAM（Dynamic Random Access Memory）２２と、ハードディスクドライブ(HDD)２３と、不揮発性メモリとしてのNVRAM２４と、SSD２５とを備える。また、コントローラ１１は、USB(Universal Serial Bus)メモリ３０を接続し、USBメモリ３０への読み書きを制御するUSB I/F２６と、SDカード３１を接続し、SDカード３１への読み書きを制御するSDカードI/F２７とを備える。
【００１１】
CPU２０は、画像形成装置１０全体を制御し、DRAM２２を作業用記憶領域として使用し、所定の処理を実行する。CPU２０は、ASIC２１を介してHDD２３と接続され、各種のプログラムをHDD２３からDRAM２２に読み出し、実行する。CPU２０は、USB I/F２６と接続され、USBメモリ３０から印刷ジョブ等を受け付ける。このため、DRAM２２は、印刷ジョブを処理するための描画用メモリ等としても使用される。また、CPU２０は、操作部１２と接続され、操作部１２が受け付けた各種指示の入力に基づき、操作部１２が表示する画面を作成し、提供する。
【００１２】
ASIC２１は、HDD２３に記憶された画像データを読み出し、各種の画像処理を実行する。ASIC２１は、SSD２５と接続され、SSD２５は、記憶領域が２つの論理区画（パーティション）に論理的に分割され、システムを二重化するために当該システムに対応する制御プログラムが各パーティションに記憶されている。
【００１３】
ここで、システムとは、ハードウェアを制御するためのファームウェアと、その上位の各アプリケーション（以下、アプリと略す。）とからなる集合をいう。システムの二重化とは、システムに対応する制御プログラムを２組用意し、各制御プログラムを、例えばSSD２５の各パーティションに記憶し、起動するシステムを選択可能とされた構成をいう。各システムは、同一構成であってもよいし、最小構成のみが同一で、相違する構成を含むものであってもよい。
【００１４】
図１に示す例では、「SSD1」と「SSD2」というパーティションが形成されている。この例では、HDD２３とは別にSSD２５を設けているが、HDD２３のみとし、HDD２３を論理的に分割してパーティションを形成した構成にしてもよいし、HDD２３を設けず、SSD２５のみとし、ASIC２１が使用する画像データ等をSSD２５に記憶する構成にしてもよい。
【００１５】
NVRAM２４は、画像形成装置１０の各種システム情報や各種設定情報を記憶し、本実施形態では、後述する更新中断情報を記憶する。
【００１６】
操作部１２は、ユーザから各種指示の入力を受け付け、画面表示を行うためのユーザ・インタフェースを提供する。エンジン１３は、ASIC２１と接続され、CPU２０により実行される各種のプログラムが発行した指令を受け、画像形成処理や画像読取処理等を実行する。
【００１７】
SDカード３１は、外部記録媒体であり、システムを更新するために使用される更新情報として更新ファイルを記憶する。CPU２０は、プログラムを実行してSDカード３１から更新ファイルを読み出し、SSD２５の各パーティションに記憶された制御プログラムを書き換え、システムを更新する。
【００１８】
図１では、SSD２５のパーティション毎に制御プログラムを記憶させることで、システムを多重化しているが、SSD２５のほかに、別のSSDを設け、機器（デバイス）毎に制御プログラムを記憶させて多重化してもよい。なお、システムは、二重化に限らず、三重化以上であってもよい。
【００１９】
図２は、画像形成装置１０のハードウェアおよびソフトウェア構成の一例を示した図である。ハードウェアは、HDD２３やエンジン１３等のデバイスで、これらのデバイスはハードウェア・リソース４０として参照される。ソフトウェアは、起動部５０とアプリケーション層５１とプラットフォーム層５２とを含んで構成される。
【００２０】
エンジン１３とプラットフォーム層５２との間には、エンジン１３とプラットフォーム層５２とを接続するためのエンジンI/F６０が設けられる。
【００２１】
アプリケーション層５１は、各種機能を提供するための各種のアプリを含む。アプリケーション層５１は、アプリとして、コピー・アプリ７０、ファックス・アプリ７１、スキャナ・アプリ７２、プリンタ・アプリ７３、リモート更新アプリ７４を含む。
【００２２】
コピー・アプリ７０は、原稿を読み取り、印刷して出力する処理を実行する。ファックス・アプリ７１は、原稿を読み取り、ファックス送信する処理や、ファックス受信し、印刷して出力する処理を実行する。スキャナ・アプリ７２は、原稿を読み取る処理を実行し、プリンタ・アプリ７３は、読み取った原稿や画像データを印刷して出力する処理を実行する。リモート更新アプリ７４は、システム更新が必要と判断したとき、インターネット経由で最新のシステムをダウンロードし、システムの更新処理を実行する。
【００２３】
アプリケーション層５１は、プラットフォーム層５２とAPI(Application Programming Interface)５３により接続される。API５３は、予め定義された関数を有し、アプリケーション層５１から処理要求を受け付け、プラットフォーム層５２に対して処理要求を処理させる。
【００２４】
プラットフォーム層５２は、エンジン制御サービス(ECS)８０、メモリ制御サービス(MCS)８１、オペレーション制御サービス(OCS)８２、ファクシミリ制御サービス(FCS)８３、ネットワーク制御サービス(NCS)８４、システム制御サービス(SCS)８５といった各種の制御サービスを含む。制御サービスは、アプリケーション層５１からの処理要求を解釈し、ハードウェア・リソース４０の獲得要求を生成する。
【００２５】
ECS８０は、エンジン１３やHDD２３等のハードウェア・リソース４０を制御し、画像の読み込みや画像形成動作等を制御する。MCS８１は、画像メモリの取得や解放、画像データの圧縮や伸張等のメモリ制御を行う。OCS８２は、ユーザと画像形成装置１０との間のインタフェースとなる操作部１２の制御を行う。FCS８３は、GSTN(General Switched Telephone Network)インタフェースと接続し、GSTN網を使用したファクシミリ送受信、ファクシミリ読み取り等を制御する。
【００２６】
NCS８４は、NIC(Network Interface Card)を制御して、画像形成装置１０をインターネットやイーサネット（登録商標）と接続し、ネットワークI/Oを必要とするアプリに対して共通に利用可能なサービスを提供する。NCS８４は、ネットワーク側から各プロトコルによって受信したデータを各アプリに振り分け、各アプリからのデータをネットワーク側に送信する際の仲介を行う。
【００２７】
SCS８５は、各アプリの管理、システム画面表示やLED表示等のユーザ・インタフェースの制御、ハードウェア・リソース４０の管理、割り込みアプリの制御等を行う。
【００２８】
プラットフォーム層５２は、そのほか、システム資源管理マネージャ(SRM)８６、イメージメモリハンドラ(IMH)８７、OS８８を含む。SRM８６は、OS８８を通してエンジン１３を調停する。IMH８７は、OS８８を通してコントローラ１１およびエンジン１３間の画像データの転送を制御する。OS８８は、各アプリやサービスに対して標準的なインタフェースを提供し、ハードウェア・リソース４０を効率的に管理する。OS８８としては、UNIX（登録商標）やWINDOWS（登録商標）等を使用することができる。
【００２９】
起動部５０は、画像形成装置１０の電源投入時に起動され、アプリケーション層５１やプラットフォーム層５２のプロセス群に対応する制御プログラムを読み出し、メモリ上に展開して、プロセスを起動する。このプロセスの起動により、システムが起動され、各機能部が実現される。
【００３０】
画像形成装置１０は、２つのシステムのうちの一方のシステム（以下、プライマリシステムと呼ぶ。）と、他方のシステム（以下、セカンダリシステムと呼ぶ。）とによって冗長化される。このため、一方のシステムが、更新処理の中断により障害を被った場合でも、他方のシステムの起動が可能となるように構成されている。
【００３１】
図３を参照して、画像形成装置１０の起動処理について説明する。図３は、画像形成装置１０の起動処理に関する主要な機能構成を示したブロック図である。図３は、起動手段として機能するブートローダ９０と、NVRAM２４と、SSD２５の記憶領域により与えられる第１のパーティション９１および第２のパーティション９２と、操作部１２と、システム９３とを示している。
【００３２】
NVRAM２４は、記憶手段として機能し、ブートローダ９０により参照され、起動するシステムを指定する指定情報として、起動するシステムが存在するパーティションを識別するための起動パーティション番号９４を記憶する。第１のパーティション９１および第２のパーティション９２は、冗長化された２つのシステムの各々に対応した制御プログラム９５、９６を記憶する。このため、ブートローダ９０は、起動パーティション番号９４に応じて、読み出す制御プログラムを切り替え、システムを起動させることができる。
【００３３】
ユーザが画像形成装置１０の電源を投入すると、ブートローダ９０が起動し、NVRAM２４に記憶された起動パーティション番号９４を参照して、起動するパーティションを決定する。そして、ブートローダ９０が決定したパーティションから制御プログラムを読み出し、システム９３の起動処理を実行する。
【００３４】
NVRAM２４は、起動パーティション番号９４のほか、更新処理の状況（ステータス）を示す更新中断情報９７を記憶する。更新中断情報９７は、更新対象のモジュールを識別するためのモジュールIDと、更新処理の実行順位を示すインデックスとを含む。モジュールは、システムを構成するファームウェアや各アプリ等である。
【００３５】
インデックスは、更新処理の進捗状況を示す情報である。インデックスは、例えばプライマリシステム、セカンダリシステムの順に更新処理を実行する場合、現在の更新処理がプライマリシステムの場合は「１／２」に、セカンダリシステムの場合は「２／２」に設定される。インデックスの記号「／」より前方にある値、すなわちインデックスの最初の数値は、システム更新処理の順位を示し、記号「／」の後方にある値、すなわちインデックスの後の数値は、総処理数を示す。
【００３６】
ブートローダ９０により起動されたシステム９３は、検知部１００と、更新部１０１とを含んで構成される。
【００３７】
検知部１００は、NVRAM２４に記憶された記憶情報を参照し、参照した記憶情報の中に、更新中断情報９７があるかどうかを確認する。すなわち、検知部１００は、モジュールIDおよびインデックスが設定されているかを確認する。更新中断情報９７がある場合、検知部１００は、システム更新が中断されたことを検知する。更新中断情報９７は、更新処理の開始により設定され、更新処理の完了をもってその設定が消去される。このため、更新中断情報９７があるということは、電源断等により更新処理が中断されたことを示している。
【００３８】
更新部１０１は、SDカード３１等の外部から取得した更新ファイルを解析して、更新を開始できるかを判断し、更新を開始できる場合はシステムの更新を開始する。更新を開始できない場合は、通知手段として機能する操作部１２に対し、ユーザに対してエラーを通知するように指示する。
【００３９】
図４を参照して、画像形成装置１０のシステム更新について説明する。図４は、画像形成装置のシステム更新に関する主要な機能構成を示したブロック図である。起動されたシステム９３は、更新部１０１を含み、更新部１０１は、解析部１０２、更新制御部１０３、書換部１０４を含む。NVRAM２４は、図３に示したように、起動パーティション番号９４と、更新中断情報９７とを含む。図４では、第１のパーティション９１がプライマリシステム用制御プログラム９５を含み、第２のパーティション９２がセカンダリシステム用制御プログラム９６を含んで構成されている。
【００４０】
SDカード３１により提供されるシステムの更新ファイル１０５は、SDカード３１から読み出され、メモリ上に展開される。なお、更新ファイル１０５は、リモート更新アプリ７４によりインターネット経由でダウンロードし、メモリ上に展開されてもよい。メモリは、DRAM２２である。
【００４１】
解析部１０２は、メモリ上に展開された更新ファイル１０５を解析し、更新ファイル１０５の中から必要な情報を抽出する。図５に、更新ファイル１０５の構成例を示す。更新ファイル１０５は、データ本体とは別にデータの先頭に置かれるヘッダ部１１０と、データ本体が記録されるデータ部１２０とを含む。
【００４２】
ヘッダ部１１０は、プライマリシステムとセカンダリシステムとに共通の事項を定める共通ヘッダ１１１と、プライマリシステムに固有な事項を定めるプライマリシステム用ヘッダ１１２と、セカンダリシステムに固有な事項を定めるセカンダリシステム用ヘッダ１１３とを含む。
【００４３】
共通ヘッダ１１１は、画像形成装置１０の機種を特定するための機種ID１１４と、更新対象のモジュールID１１５とを含む。プライマリシステム用ヘッダ１１２およびセカンダリシステム用ヘッダ１１３はそれぞれ、更新先の記憶領域を示す更新先アドレス１１６ａ、１１６ｂと、更新先の記憶領域の大きさを示す更新先領域長１１７ａ、１１７ｂと、インデックス指定値１１８ａ、１１８ｂとを含む。インデックス指定値１１８ａ、１１８ｂは、更新中断情報９７のインデックスに設定するための値である。
【００４４】
データ部１２０は、更新対象のモジュールの、バイナリ実行コードにより記述される制御プログラムを含み、各パーティションの各更新部分を書き換えるための更新実体データ１２１と、更新実体データ１２１の正当性を保証するために添付される電子署名１２２とを含む。
【００４５】
電子署名１２２は、ハッシュ関数と呼ばれる関数を使用して更新実体データ１２１からハッシュ値を計算し、計算したハッシュ値を、秘密鍵を使用して暗号化したものである。電子署名１２２は、更新ファイル１０５の作成者により付与される。このため、更新ファイル１０５により更新しようとする者は、更新ファイル１０５に含まれる更新実体データ１２１に対してハッシュ関数を適用してハッシュ値を計算し、秘密鍵に対応する公開鍵を使用して復号し、両者が一致するかを確認することで、電子署名１２２の正当性を検証することができる。電子署名１２２としては、例えばRSA署名、DSA署名、Schnorr署名、ElGamal署名等を採用することができる。
【００４６】
再び図４を参照して、解析部１０２は、必要な情報として、共通ヘッダ１１１等に含まれる機種ID１１４等の各ヘッダに含まれる情報および更新するデータを抽出する。
【００４７】
更新制御部１０３は、更新開始前の更新中断情報９７の設定と、更新終了後の起動パーティション番号９４の変更を行う。また、更新制御部１０３は、外部のSDカード３１等から更新ファイル１０５を取得したことを受けて、更新対象のシステムに対応する制御プログラムの更新処理を開始する。
【００４８】
書換部１０４は、更新制御部１０３の更新処理の開始を受けて、抽出された更新先アドレス１１６ａ、１１６ｂ、更新先領域長１１７ａ、１１７ｂ、更新実体データ１２１を基に、各パーティションに記憶された制御プログラムを書き換える。図４に示す例では、制御プログラム９５、９６の一部が更新され、その一部が更新部分１０６、１０７として示されている。
【００４９】
図６を参照して、画像形成装置１０の起動処理について詳細に説明する。ユーザが画像形成装置１０の電源ボタンを押下し、電源を投入することにより、ステップ６００から起動処理を開始する。ステップ６０１では、ブートローダ９０が起動し、ブートローダ９０がNVRAM２４から起動パーティション番号９４を取得する。
【００５０】
ステップ６０２で、ブートローダ９０が取得した起動パーティション番号９４が第１のパーティション９１を示す番号「１」であるかを確認する。第１のパーティション９１を示す番号「１」である場合、ステップ６０３へ進み、ブートローダ９０は、起動システムが存在するデバイスとして参照される機器情報としてのデバイス名Aに、第１のパーティション９１を割り当て、第１のパーティション９１から起動できる状態にする。すなわち、デバイス名Aに第１のパーティション９１をマウントする。そして、ステップ６０４で、第１のパーティション９１とは異なる第２のパーティション９２を、更新対象のシステムが存在するデバイスとして参照されるデバイス名Bにマウントし、システムを更新できる状態にする。
【００５１】
一方、ステップ６０２で第１のパーティション９１を示す番号でない場合、ステップ６０５へ進み、ブートローダ９０は、起動システムを示すデバイス名Aに第２のパーティション９２にマウントする。そして、ステップ６０６で、ブートローダ９０は、第２のパーティション９２とは異なる第１のパーティション９１を、更新対象のシステムを示すデバイス名Bにマウントする。
【００５２】
ステップ６０７では、ブートローダ９０が、起動システムを示すデバイス名Aにマウントしたパーティションに存在する制御プログラムを読み出し、システム９３を起動する。システム９３の起動により、ステップ６０８で起動処理を終了する。
【００５３】
次に図７を参照して、起動処理が完了した後にシステム更新通知が来た場合の処理について詳細に説明する。SDカードスロットへのSDカード３１の挿入や更新ファイル１０５のダウンロードにより、ステップ７００から処理を開始する。ステップ７０１では、検知部１００がNVRAM２４に更新中断情報９７が記憶されているかどうかを確認する。確認した結果、更新中断情報９７が記憶されている場合、符号Aに進み、記憶されていない場合、通常の更新処理であり、ステップ７０２へ進む。
【００５４】
ステップ７０２では、更新部１０１に含まれる解析部１０２が、更新ファイル１０５に含まれる共通ヘッダ１１１から機種ID１１４およびモジュールID１１５を取得し、検証する。検証は、取得した機種ID１１４が画像形成装置１０の機種IDと一致するか、画像形成装置１０に実装されているモジュールの中に、取得したモジュールID１１５に一致するものが存在するかを確認することにより行われる。
【００５５】
ステップ７０３では、解析部１０２が、更新ファイル１０５に含まれるデータ部１２０から電子署名１２２を取得し、電子署名１２２の正当性を検証する。電子署名１２２の正当性の検証方法については既に説明したので、ここではその説明を省略する。
【００５６】
ステップ７０４では、機種ID１１４およびモジュールID１１５の検証結果、並びに電子署名１２２の正当性の検証結果に基づき、更新処理を実行できるかを判断する。検証結果で機種ID１１４が一致しない、もしくはモジュールID１１５に一致するものが存在しない、または電子署名１２２の正当性が確認できない場合、更新を開始できないものとして、ステップ７０５へ進み、エラーを通知し、ステップ７１４へ進み、この処理を終了する。
【００５７】
一方、ステップ７０４で、検証結果で機種ID１１４が一致し、かつモジュールID１１５に一致するものが存在し、かつ電子署名１２２の正当性が確認できた場合、更新を開始できるものとして、ステップ７０６へ進む。ステップ７０６では、更新制御部１０３が、更新ファイル１０５のプライマリシステム用ヘッダ１１２から、更新先アドレス１１６ａ、更新先領域長１１７ａ、インデックス指定値１１８ａを取得する。
【００５８】
ステップ７０７では、更新制御部１０３が、取得したモジュールID１１５、インデックス指定値１１８ａを更新中断情報９７として設定する。
【００５９】
ステップ７０８では、更新制御部１０３が、更新対象のシステムの更新を開始する。更新対象のシステムは、デバイス名Bで示されるパーティションのシステムで、当該パーティションに記憶された制御プログラムにより起動されるシステムである。書換部１０４は、取得した更新先アドレス１１６ａ、更新先領域長１１７ａを基に、更新実体データ１２１を使用して制御プログラム９５を書き換え、システムを更新する。
【００６０】
ステップ７０９では、更新制御部１０３が、更新対象のシステムの更新として、そのシステムを起動するための制御プログラム９５の書き換えが完了したかを確認する。完了したところで、ステップ７１０へ進み、更新制御部１０３が、更新ファイル１０５のセカンダリシステム用ヘッダ１１３から、更新先アドレス１１６ｂ、更新先領域長１１７ｂ、インデックス指定値１１８ｂを取得する。
【００６１】
ステップ７１１では、更新制御部１０３が、NVRAM２４に記憶された更新中断情報９７に設定されたモジュールID１１５およびインデックスを、取得した値に書き換え、設定する。ステップ７１２で、更新制御部１０３が、NVRAM２４に記憶された起動パーティション番号９４を、デバイス名Bで示されるパーティションのパーティション番号に変更する。そして、ステップ７１３で再起動し、ステップ７１４で処理を終了する。
【００６２】
図８を参照して、図７のステップ７０１で更新中断情報９７がNVRAM２４に記憶されている場合の処理について説明する。なお、図７に示すステップ７１３で再起動を行うと、更新中断情報９７がNVRAM２４上に残ったままとなるので、再度処理をステップ７００から開始し、ステップ７０１で符号Aに進み、図８に示す処理を実行することになる。ステップ８００の符号Aから開始し、ステップ８０１では、更新制御部１０３が、NVRAM２４に記憶されている更新中断情報９７を読み出し、取得する。
【００６３】
ステップ８０２およびステップ８０３は、図７に示したステップ７０２およびステップ７０３と同様の処理を実行する。ステップ８０４では、機種ID１１４およびモジュールID１１５の検証結果、並びに電子署名１２２の正当性の検証結果に基づき、更新処理を実行するか否かを判断する。更新を開始できない場合、符号Cへ進み、図７に示すステップ７０５へ進んでエラーを通知し、ステップ７１４へ進み、この処理を終了する。
【００６４】
ステップ８０４で更新を開始できる場合は、ステップ８０５へ進み、更新制御部１０３が、更新ファイル１０５のプライマリシステム用ヘッダ１１２から、更新先アドレス１１６ａ、更新先領域長１１７ａ、インデックス指定値１１８ａを取得する。
【００６５】
ステップ８０６では、更新制御部１０３が、取得した更新中断情報９７に含まれるインデックスと、取得したインデックス指定値１１８ａとを比較し、インデックス指定値１１８ａがインデックスの値以上であるかを確認する。プライマリシステム用ヘッダ１１２のインデックス指定値１１８ａは、「１／２」に設定されているため、更新中断情報９７に含まれるインデックスの値が「１／２」の場合に、インデックス指定値１１８ａがインデックスの値以上となる。
【００６６】
なお、インデックス指定値１１８ａがインデックスの値以上となる場合とは、更新進捗状況がプライマリシステムの更新完了未満であり、プライマリシステムの更新に失敗したことを意味する。インデックス指定値１１８ａがインデックスの値未満である場合とは、インデックス指定値１１８ａが「１／２」に対し、インデックスの値が「２／２」となる場合であり、プライマリシステムの更新に成功したことを意味する。
【００６７】
ステップ８０６でインデックス指定値１１８ａがインデックスの値以上であることを確認した場合、プライマリシステムの更新を行うべく、ステップ８０７へ進み、更新制御部１０３が、取得したモジュールID１１５およびインデックス指定値１１８ａに従って、更新中断情報９７を書き換える。ステップ８０８で、更新制御部１０３が、デバイス名Bで示されるパーティションのシステムの更新処理を開始する。デバイス名Bにマウントしたパーティションが第１のパーティション９１である場合、第１のパーティション９１のシステムの更新処理を開始する。ステップ８０９では、更新制御部１０３が、更新処理が完了したかを確認する。
【００６８】
ステップ８０９で更新処理が完了したことを確認したところで、ステップ８１０へ進み、更新制御部１０３が、NVRAM２４に記憶された起動パーティション番号９４を、デバイス名Bで示されるパーティションのパーティション番号に変更する。そして、ステップ８１１で再起動し、ステップ８１７で処理を終了する。ステップ８１７で終了した後は、更新中断情報９７がNVRAM２４上に残ったままとなるので、再度処理をステップ７００から開始し、ステップ７０１で符号Aに進み、ステップ８００から処理を実行することになる。
【００６９】
ステップ８０６でインデックス指定値１１８ａがインデックスの値未満であることを確認した場合、プライマリシステムの更新には成功しているため、セカンダリシステムの更新を行うべく、ステップ８１２へ進む。ステップ８１２からステップ８１６までの処理は、セカンダリ側への同期処理であるため、通常起動のバックグラウンドでの処理となる。
【００７０】
ステップ８１２では、更新制御部１０３が、更新ファイル１０５のセカンダリシステム用ヘッダ１１３から、更新先アドレス１１６ｂ、更新先領域長１１７ｂ、インデックス指定値１１８ｂを取得する。
【００７１】
ステップ８１３では、更新制御部１０３が、取得したモジュールID１１５およびインデックス指定値１１８ｂに従って、更新中断情報９７を書き換える。ステップ８１４で、更新制御部１０３が、更新対象のシステムの更新を開始する。更新対象のシステムは、デバイス名Bで示されるパーティションのシステムである。このときのデバイス名Bには、図７のステップ７１２で起動パーティション番号９４が、例えば第２のパーティション９２から第１のパーティション９１のパーティション番号に変更されているので、第２のパーティション９２がマウントされている。このため、更新対象のシステムは、第２のパーティション９２のシステムとなる。
【００７２】
ステップ８１５では、更新制御部１０３が、更新処理が完了したかを確認する。ステップ８１５で更新処理が完了したことを確認したところで、ステップ８１６へ進み、更新制御部１０３が、NVRAM２４に記憶された更新中断情報９７を消去し、ステップ８１７で処理を終了する。これにより、全更新が完了する。
【００７３】
図８に示すステップ８１２〜ステップ８１６の処理を実施しているときに起動しているシステムは、単体で画像形成装置１０としての機能を満たすものである。これは、起動しているシステムが、更新に成功したプライマリシステムだからである。上記の更新処理は、単純に両パーティションのシステムのバージョンを一致させるために同期を取っているだけである。したがって、再起動によるシステムのリブートは不要である。
【００７４】
図８に示すステップ８１２〜ステップ８１６の処理は、通常起動のバックグラウンドで実行可能であるため、ユーザの体感としては、再起動してデバイス名Aで示されるパーティションから起動し、デバイス名Bで示されるパーティションのシステムを更新し、再起動するという従来の処理に比較し、約２倍の速度でシステム更新が終わり、画像形成装置１０の使用が可能となる。
【００７５】
システム更新処理は、以上に説明した通りであるが、NVRAM２４に記憶される記憶情報の状態遷移を、図９にまとめる。記憶情報は、起動パーティション番号９４と、更新中断情報９７とを含み、更新中断情報９７は、モジュールID１１５と、インデックスとから構成される。
【００７６】
第１のパーティション９１のパーティション番号を「１」とし、第２のパーティション９２のパーティション番号を「２」とし、第１のパーティション９１から起動した場合、起動後、起動するパーティションのパーティション番号として「１」が設定される。このとき、更新中断情報９７はまだ設定されていないので、モジュールID１１５も、インデックスも、何も情報がないことを示す記号「−」となっている。
【００７７】
この例では、起動パーティションが第１のパーティション９１であるため、更新対象のシステムが第２のパーティション９２のシステムとなる。このため、システム更新の通知が来ると、更新ファイル１０５の共通ヘッダ１１１のモジュールID１１５から、例えば「SYSTEM」を、プライマリシステム用ヘッダ１１２のインデックス指定値１１８ａから、例えば「１／２」を取得する。そして、これらの情報を更新中断情報９７として設定する。このとき、起動パーティション番号は、更新されていないので、更新通知前と同じ「１」が設定される。
【００７８】
起動パーティション番号が更新され、再起動して、起動パーティションが第２のパーティション９２になると、更新対象のシステムが第１のパーティション９１のシステムとなる。更新ファイル１０５の共通ヘッダ１１１のモジュールID１１５から、上記と同様の「SYSTEM」を、セカンダリシステム用ヘッダ１１３のインデックス指定値１１８ｂから、例えば「２／２」を取得する。そして、これらの情報を更新中断情報９７として設定する。このとき、起動パーティション番号が更新されているため、「２」が設定される。
【００７９】
両パーティションのシステムが更新されると、更新中断情報９７が消去される。このため、モジュールID１１５およびインデックスが、何も情報がないことを示す記号「−」となる。起動パーティション番号については、最後の更新後、再起動していないので、最後の更新前と同じ「２」が設定される。
【００８０】
図９は、第１のパーティション９１から起動する例を示したが、第２のパーティション９２から起動してもよい。この場合、起動パーティション番号のみが逆になり、更新通知前は「２」、更新通知後は「２」、再起動後は「１」、更新完了後は「１」となる。
【００８１】
図９では、記憶情報の状態遷移を各区間に分けて説明したが、各区間で更新中断が発生した場合について、図１０および図１１を参照して説明する。図１０は、図９に示す区間１（更新通知後から再起動前の区間）で更新中断が発生したときの処理の流れを示すフローチャートである。
【００８２】
ステップ１０００の区間１で更新中断が発生すると、ステップ１００１で、起動パーティション番号「１」で設定されている第１のパーティション９１から起動し、ステップ１００２で、共通ヘッダ１１１を解析する。ステップ１００３で電子署名１２２の正当性を検証し、ステップ１００４で、プライマリシステム用ヘッダ１１２を解析する。
【００８３】
ステップ１００５では、デバイス名Bで示されるパーティション、この例では第２のパーティション９２のシステムを更新し、ステップ１００６で、再起動する。
【００８４】
ステップ１００７で、第２のパーティション９２から起動し、ステップ１００８で共通ヘッダ１１１を解析し、ステップ１００９で電子署名１２２の正当性を検証する。ステップ１０１０で、セカンダリシステム用ヘッダ１１３を解析し、デバイス名Bで示されるパーティション、ここではパーティションが更新され、第１のパーティション９１となっているため、ステップ１０１１で第１のパーティション９１のシステムを更新する。これにより、両パーティションのシステムが更新されたため、ステップ１０１２へ進み、処理を終了する。
【００８５】
図１１は、図９に示す区間２（再起動後から更新完了前の区間）で更新中断が発生したときの処理の流れを示すフローチャートである。この処理では、既にプライマリシステムの更新は成功しているため、セカンダリシステムについてのみ更新を行う。
【００８６】
ステップ１１００の区間２で更新中断が発生すると、ステップ１１０１で、起動パーティション番号「２」で設定されている第２のパーティション９２から起動する。プライマリシステムの更新後、起動パーティション番号が「１」から「２」へ変更されるからである。
【００８７】
ステップ１１０２では、共通ヘッダ１１１を解析し、ステップ１１０３で、電子署名１２２の正当性を検証し、ステップ１１０４で、セカンダリシステム用ヘッダ１１３を解析する。そして、ステップ１１０５で、デバイス名Bで示されるパーティションのシステムを更新する。デバイス名Bで示されるパーティションは、起動しているパーティションである第２のパーティション９２とは異なる第１のパーティション９１である。更新が終了すると、ステップ１１０６へ進み、この処理を終了する。
【００８８】
このように、２つのパーティションが、通常起動するパーティションと更新失敗時に起動するパーティションに固定されないため、一方のシステムの更新が失敗しても、他方のシステムで正常に起動することができるので、ダウンタイムを減少させることができる。また、全更新後に再起動することなくそのまま使用することができ、セカンダリシステムの更新をバックグラウンドで実行することができるので、ダウンタイムをさらに減少させることができる。
【００８９】
システムは、１つのSSD２５等の記憶装置を論理的に分割した論理パーティション上に構成できるので、１つのデバイスで実現でき、画像形成装置１０を安価で提供することが可能となる。記憶情報は、システムが実装される記憶装置（SSD２５）とは別の記憶装置(NVRAM２４)に記憶するものとして説明したが、システムが実装される記憶装置と同一の記憶装置に記憶してもよい。これにより、デバイスの数を減らし、さらに安価で提供することが可能となる。
【００９０】
システムは、パーティション上ではなく、別個のSSD等の記憶装置上に別個に構成してもよく、これにより、片方のデバイスが故障しても動作が可能となり、装置の信頼性を向上させることができる。また、記憶情報をSSD２５とは別のNVRAM２４に記憶することで、システムが存在するデバイスが故障しても、記憶情報を記憶するデバイスが影響を受けることはなく、故障したデバイスのみを交換し、復旧することが可能となる。新たに記憶情報を作成する必要がないため、作成ミスを防止し、装置の信頼性を向上させることができる。
【００９１】
これまでに説明してきた例では、更新中断が発生しても、いずれかのパーティションは、更新前または更新後のシステムが存在し、起動可能となっており、正常起動し、失敗したシステム更新を再開させることができる。これらの例では、上記には説明していないが、システム更新に、ファイルシステムを利用して更新データの書き込みを行っている。
【００９２】
ファイルシステムは、データを管理する機能を提供し、管理情報を保持する。管理情報は、どこにどのようなファイルが格納されているかという情報である。このため、ファイルへのアクセス要求があった場合、管理情報を参照し、格納場所を調べてから実際のファイルにアクセスする。ファイルシステムには、MS-DOS（登録商標）で利用されるFAT(File Allocation Table)、Linux（登録商標）で利用されるext2(second extended filesystem)、ext3、ext4、UNIX（登録商標）で利用されるUFS(Unix File System)等がある。
【００９３】
図１２を参照して、ファイルシステムについて説明する。ファイルシステムは、起動の際に参照される起動情報として、パーティションの区切りを決定するマスターブートレコード(MBR)１３０を有する。MBR１３０は、パーティション・エントリ・テーブル(PET)１３１を保持し、PET１３１は、各パーティションの先頭セクタを識別するための先頭セクタ番号１３２を格納する。
【００９４】
各パーティションの先頭セクタには、各ファイルシステム固有の管理情報が存在する。例えば、FATファイルシステムでは、図１２に示すファイル管理のための構造を有する。
【００９５】
管理情報は、BIOSパラメータ・ブロック(BPB)１３３と、FAT１３４と、ルート・ディレクトリ・エントリ(RDE)１３５とを含む。なお、ユーザ・データ領域１３６は、ファイルの実体で、実際にシステム更新内容が書き込まれる領域である。
【００９６】
BPB１３３は、主に、１セクタ当たりのバイト数、ファイルサイズの最低単位、FAT１つ当たりのセクタ数、種類の情報を保持する。セクタは、最小の記録単位で、FATファイルシステムでは、１以上のセクタをまとめてクラスタとして管理する。FAT１３４は、管理するクラスタのクラスタ番号の管理ビット数によって３つの種類があり、その種類としてFAT12、FAT16、FAT32がある。
【００９７】
FAT１３４は、ユーザ・データ領域１３６のうち、ユーザが利用している領域、空き領域、使用不可領域等がどの場所にあるかを管理するテーブルである。
【００９８】
FATファイルシステムは、階層型のファイル構造を有し、階層の最上位の層のディレクトリやフォルダは、ルートと呼ばれる。RDE１３５は、そのルートに配置されるファイルの名前や属性、更新日時等の情報と、FAT１３４で確定された場所に配置してあるファイルのデータを関連付けるための情報とを保持する。
【００９９】
システム更新によりファイルの書き込みがあり、ユーザ・データ領域１３６が変化した場合、そのファイルを管理するFAT１３４やRDE１３５等の管理情報を書き換えなければならない。
【０１００】
システム更新では、ファイルシステムの管理情報の書き換えが頻繁に発生する。このため、管理情報の書き換え時に電源断が発生した場合、正常にファイルにアクセスできなくなり、管理情報が復旧不可能になる場合がある。
【０１０１】
このことに鑑み、管理情報の書き換え前に、管理情報を起動可能なシステムが存在するパーティション内に複製（コピー）しておき、管理情報の書き換え時に電源断等で中断し、管理情報が復旧不可能になった場合、コピーしておいた管理情報を書き込み、更新前の状態に戻すようにする。書き込み後は、更新前の正常な管理情報が存在することから、システム更新をやり直すことができる。
【０１０２】
これを実現するために、図３に示した更新部１０１は、解析部１０２、更新制御部１０３、書換部１０４に加えて、図１３に示すようにファイルシステム管理部１０８を備える。
【０１０３】
ファイルシステム管理部１０８は、更新対象のシステムが存在するパーティションから更新前のファイルシステムの管理情報を取得し、コピーして、起動しているシステムが存在するパーティション内に格納する。ファイルシステム管理部１０８は、取得した管理情報をもう１つコピーし、SDカード３１内に格納することができる。
【０１０４】
ファイルシステム管理部１０８は、更新対象のシステムが存在するパーティションのマウントが成功しているかを確認する。マウントが失敗している場合、管理情報に何らかの異常が存在していると判断することができる。したがって、ファイルシステム管理部１０８は、マウントが失敗している場合、起動しているシステムが存在するパーティション内に格納しておいた管理情報を、更新対象のシステムが存在するパーティション内に書き込み、更新前の状態に戻す。書き込み後、再起動することで、正常な管理情報となり、マウントが成功し、正常にシステム更新を行うことができる。
【０１０５】
図１３に示した機能構成の場合、管理情報をコピーし、マウントを判断し、マウントが失敗の場合に書き込み、再起動する工程が、図７、図８、図１０および図１１に示した画像形成装置１０が実行する処理に追加される。そこで、これらの工程を追加した各フローチャートを図１４〜図１７に示し、図１４〜図１７を参照して画像形成装置１０が実行する各処理について説明する。
【０１０６】
図１４は、起動処理が完了した後にシステム更新通知が来た場合の処理の流れを示したフローチャートである。ステップ１４００〜ステップ１４０５、ステップ１４０８、ステップ１４１０、ステップ１４１１、ステップ１４１４〜ステップ１４１８の処理は、図７に示したステップ７００〜ステップ７０８、ステップ７１０〜ステップ７１４の処理と同じであるため、それらの処理の説明については省略する。
【０１０７】
ステップ１４０６では、更新を開始できる場合、SDカード３１経由の更新で、かつSDカード３１が接続されているかを確認する。SDカード３１経由の更新で、かつSDカード３１が接続されている場合、ステップ１４０７へ進み、デバイス名A、Bそれぞれのパーティション内にあるファイルシステムの管理情報を取得し、SDカード３１に格納する。このとき、MBR１３０も取得し、SDカード３１に格納する。ステップ１４０６でSDカード３１経由の更新ではない場合、またはSDカード３１が接続されていない場合、ステップ１４０８へ直接進む。
【０１０８】
ステップ１４０９では、プライマリシステムの更新を行う前に、ファイルシステム管理部１０８が、デバイス名Bで示されるパーティションに存在するファイルシステムの管理情報をコピーし、デバイス名Aで示されるパーティション内にファイルAとして格納する。ファイルAの格納は、デバイス名Bで示されるパーティションのシステムの更新前に実施される。
【０１０９】
ステップ１４１２では、更新制御部１０３が、更新対象の全モジュールの書き換えが完了したかを確認する。１つのモジュールでも書き換えが完了していない場合、ステップ１４０２へ戻り、モジュールの書き換えを行う。
【０１１０】
ステップ１４１２で全モジュールの書き換えが完了した場合は、プライマリシステムが正常に更新されたため、ステップ１４１３へ進む。ステップ１４１３では、セカンダリシステムの更新を行う前に、ファイルシステム管理部１０８が、デバイス名Aで示されるパーティションに存在するファイルシステムの管理情報をコピーし、デバイス名Bで示されるパーティション内にファイルAとして格納する。
【０１１１】
図１５は、図１４のステップ１４０１で更新中断情報９７がNVRAM２４に記憶されている場合の処理の流れを示したフローチャートである。ステップ１５００〜ステップ１５０４、ステップ１５０７、ステップ１５０８、ステップ１５１０、ステップ１５１１、ステップ１５１４〜ステップ１５１６、ステップ１５１８、ステップ１５１９、ステップ１５２１、ステップ１５２２の処理は、図８に示したステップ８００〜ステップ８０８、ステップ８１０〜ステップ８１４、ステップ８１６、ステップ８１７の処理と同じであるため、それらの処理の説明については省略する。
【０１１２】
ステップ１５０５では、ファイルシステム管理部１０８が、デバイス名Bで示されるパーティションのシステムのマウントが成功しているかを確認する。失敗している場合、ステップ１５０６へ進み、ファイルシステム管理部１０８が、デバイス名Aで示されるパーティション内のファイルAのバイナリデータを、更新対象のパーティション内のファイルシステムの管理情報が記憶される領域に書き込む。これにより、管理情報を更新開始前の状態に復旧することができる。書き込んだ後、ステップ１５１５へ進む。
【０１１３】
ステップ１５０９では、ファイルシステム管理部１０８が、デバイス名Bで示されるパーティション内にあるファイルシステムの管理情報をコピーし、デバイス名Aで示されるパーティション内にファイルAとして格納する。この処理により、更新対象のシステムの管理情報に何らかの異常が発生しても、管理情報を復旧することができる。
【０１１４】
ステップ１５１２では、更新制御部１０３が、全モジュールの書き換えが完了したかを確認する。１つのモジュールでも書き換えが完了していない場合、ステップ１５０７へ戻る。全モジュールの書き換えが完了した場合、ステップ１５１３へ進み、ファイルシステム管理部１０８が、デバイス名Aで示されるパーティション内にあるファイルシステムの管理情報をコピーし、デバイス名Bで示されるパーティション内にファイルAとして格納する。この処理により、次に更新する、現在起動しているシステムの管理情報に何らかの異常が発生しても、管理情報を復旧することができる。
【０１１５】
ステップ１５１７では、ファイルシステム管理部１０８が、デバイス名Aで示されるパーティション内にあるファイルシステムの管理情報をコピーし、デバイス名Bで示されるパーティション内にファイルAとして格納する。この処理により、更新対象のシステムの管理情報に何らかの異常が発生しても、管理情報を復旧することができる。
【０１１６】
ステップ１５２０では、ステップ１５１２と同様、更新制御部１０３が、全モジュールの書き換えが完了したかを確認する。１つのモジュールでも書き換えが完了していない場合、ステップ１５１６へ戻る。
【０１１７】
図１６は、図９に示した区間１で更新中断が発生したときの処理の流れを示すフローチャートである。ステップ１６００〜ステップ１６０３、ステップステップ１６０７〜ステップ１６１５の処理は、図１０に示したステップ１０００〜ステップ１０１２の処理と同じであるため、説明を省略する。
【０１１８】
電子署名１２２の正当性を検証した後、ステップ１６０４では、ファイルシステム管理部１０８が、デバイス名Bで示されるパーティションのマウントが成功しているかを確認する。成功している場合、ステップ１６０７へ進み、プライマリシステム用ヘッダ１１２を解析する。
【０１１９】
失敗している場合、ステップ１６０５へ進み、更新対象のシステムが存在するパーティション内に、デバイス名Aで示されるパーティション内にファイルAとして格納しておいた管理情報を書き込む。そして、ステップ１６０６で再起動し、ステップ１６０１に戻る。これにより、管理情報を更新前の状態に戻し、システム更新をやり直すことができる。
【０１２０】
図１７は、図９に示した区間２で更新中断が発生したときの処理の流れを示すフローチャートである。ステップ１７００〜ステップ１７０３、ステップ１７０７〜ステップ１７０９の処理は、図１１に示したステップ１１００〜ステップ１１０６の処理と同じであるため、説明を省略する。
【０１２１】
電子署名１２２の正当性を検証した後、ステップ１７０４では、ファイルシステム管理部１０８が、デバイス名Bで示されるパーティションのマウントが成功しているかを確認する。成功している場合、ステップ１７０７へ進み、セカンダリシステム用ヘッダ１１３を解析する。
【０１２２】
失敗している場合、ステップ１７０５へ進み、更新対象のシステムが存在するパーティション内に、デバイス名Aで示されるパーティション内にファイルAとして格納しておいた管理情報を書き込む。そして、ステップ１７０６で再起動し、ステップ１７０１に戻る。これにより、管理情報を更新前の状態に戻し、システム更新をやり直すことができる。
【０１２３】
以上のようにして、システムの更新前に管理情報をコピーし、残しておくことで、システム更新中に電源断等で更新が失敗し、管理情報が破壊され、元のファイル構成が復旧不可能な状態になった場合でも、管理情報を復旧し、更新前の状態に戻すことができる。
【０１２４】
また、管理情報のほか、MBR１３０もSDカード３１に保存しておくことで、MBR１３０も破壊され、システムを起動できない場合でも、ブートローダ９０がSDカード３１に保存したMBR１３０の情報を使用し、正しくシステムを起動することが可能となり、画像形成装置１０の耐障害性を向上させることができる。
【０１２５】
上記では、更新対象のシステムが存在するパーティション内のファイルシステムの管理情報をコピーし、起動しているシステムが存在するパーティション内に格納しておき、当該管理情報が破壊された場合、管理情報を書き込み、復旧することについて説明した。しかしながら、これに限られるものではなく、起動しているシステムが存在するパーティション内のファイルシステムの管理情報をコピーし、それを更新対象のシステムが存在するパーティション内に書き込み、復旧してもよい。これにより、管理情報をコピーし、格納する処理の際の電源断を考慮しなくてもよく、耐障害性を向上させることができる。
【０１２６】
これまで本発明を、電子機器およびプログラムとして上述した実施の形態をもって説明してきた。しかしながら、本発明は上述した実施の形態に限定されるものではなく、他の実施の形態、追加、変更、削除など、当業者が想到することができる範囲内で変更することができるものである。また、いずれの態様においても本発明の作用・効果を奏する限り、本発明の範囲に含まれるものである。したがって、そのプログラムが記録された記録媒体、そのプログラムを提供するプログラム提供サーバ等も提供することができるものである。
【符号の説明】
【０１２７】
１０…画像形成装置
１１…コントローラ
１２…操作部
１３…エンジン
２０…CPU
２１…ASIC
２２…DRAM
２３…HDD
２４…NVRAM
２５…SSD
２６…USB I/F
２７…SDカードI/F
３０…USBメモリ
３１…SDカード
４０…ハードウェア・リソース
５０…起動部
５１…アプリケーション層
５２…プラットフォーム層
５３…API
６０…エンジンI/F
７０…コピー・アプリ
７１…ファックス・アプリ
７２…スキャナ・アプリ
７３…プリンタ・アプリ
７４…リモート更新アプリ
８０…ECS
８１…MCS
８２…OCS
８３…FCS
８４…NCS
８５…SCS
８６…SRM
８７…IMH
８８…OS
９０…ブートローダ
９１…第１のパーティション
９２…第２のパーティション
９３…システム
９４…起動パーティション番号
９５、９６…制御プログラム
９７…更新中断情報
１００…検知部
１０１…更新部
１０２…解析部
１０３…更新制御部
１０４…書換部
１０５…更新ファイル
１０６、１０７…更新部分
１０８…ファイルシステム管理部
１１０…ヘッダ部
１１１…共通ヘッダ
１１２…プライマリシステム用ヘッダ
１１３…セカンダリシステム用ヘッダ
１１４…機種ID
１１５…モジュールID
１１６ａ、１１６ｂ…更新先アドレス
１１７ａ、１１７ｂ…更新先領域長
１１８ａ、１１８ｂ…インデックス指定値
１２０…データ部
１２１…更新実体データ
１２２…電子署名
１３０…MBR
１３１…PET
１３２…先頭セクタ番号
１３３…BPB
１３４…FAT
１３５…RDE
１３６…ユーザ・データ領域
【先行技術文献】
【特許文献】
【０１２８】
【特許文献１】特開２００９−４２８１８号公報
【図１】
2019149118.tif 000003
【図２】
2019149118.tif 000004
【図３】
2019149118.tif 000005
【図４】
2019149118.tif 000006
【図５】
2019149118.tif 000007
【図６】
2019149118.tif 000008
【図７】
2019149118.tif 000009
【図８】
2019149118.tif 000010
【図９】
2019149118.tif 000011
【図１０】
2019149118.tif 000012
【図１１】
2019149118.tif 000013
【図１２】
2019149118.tif 000014
【図１３】
2019149118.tif 000015
【図１４】
2019149118.tif 000016
【図１５】
2019149118.tif 000017
【図１６】
2019149118.tif 000018
【図１７】
2019149118.tif 000019