情報処理装置であって、オペレーティングシステムと、前記オペレーティングシステムを起動するためのオペレーティングシステム起動コードと、所定のログ情報を格納する処理と前記オペレーティングシステム起動コードを呼び出す処理とを実行するための第1のブートローダと、前記第1のブートローダを呼び出す処理を実行するための第1の起動コードとを格納する第1の記憶装置と、前記情報処理装置の起動時に前記第1の起動コードを実行することによって、第2の記憶装置が前記情報処理装置に接続されているか否かを判定し、前記第2の記憶装置が前記情報処理装置に接続されていない場合、前記第2の起動コードによって前記第1のブートローダを呼び出して前記第1のブートローダを実行する、プロセッサとを具備する情報処理装置。前記第2の記憶装置が前記情報処理装置に接続されている場合、前記プロセッサは、前記第1の起動コードによって、前記第2の記憶装置に格納され、前記オペレーティングシステムを起動するための第2のブートローダを呼び出して前記第2のブートローダを実行する請求項1に記載の情報処理装置。前記第2の記憶装置を前記第1の記憶装置のキャッシュとして用いるキャッシュ制御手段を更に具備する請求項1に記載の情報処理装置。前記オペレーティングシステムの起動後、前記プロセッサは、監視プログラムファイルによって、前記第1の起動コードおよび前記ログ情報の改変を禁止する処理を実行する請求項1に記載の情報処理装置。前記第2の記憶装置が前記情報処理装置に接続されていない場合、前記プロセッサは、前記監視プログラムファイルによって、前記第2の記憶装置が取り外されていることを通知する処理を実行する請求項4に記載の情報処理装置。オペレーティングシステムと、前記オペレーティングシステムを起動するためのオペレーティングシステム起動コードと、所定のログ情報を格納する処理と前記オペレーティングシステム起動コードを呼び出す処理とを実行するための第1のブートローダと、前記第1のブートローダを呼び出す処理を実行するための第1の起動コードとを格納する第1の記憶装置と、プロセッサとを有する情報処理装置の起動方法であって、前記情報処理装置の起動時に、前記プロセッサが、前記第1の起動コードによって、第2の記憶装置が前記情報処理装置に接続されているか否かを判定する処理を実行し、前記第2の記憶装置が前記情報処理装置に接続されていない場合、前記プロセッサが、前記第2の起動コードによって、前記第1のブートローダを呼び出す処理を実行する、情報処理装置の起動方法。前記第2の記憶装置が前記情報処理装置に接続されている場合、前記プロセッサが、前記第1の起動コードによって、前記第2の記憶装置に格納され、前記オペレーティングシステムを起動するための第2のブートローダを呼び出す処理を実行する請求項6に記載の情報処理装置の起動方法。前記情報処理装置は、前記第2の記憶装置を前記第1の記憶装置のキャッシュとして用いる請求項6に記載の情報処理装置の起動方法。前記オペレーティングシステムの起動後、前記プロセッサは、監視プログラムファイルによって、前記第1の起動コードおよび前記ログ情報の改変を禁止する処理を実行する請求項6に記載の情報処理装置の起動方法。前記第2の記憶装置が前記情報処理装置に接続されていない場合、前記プロセッサは、前記監視プログラムファイルによって、前記第2の記憶装置が取り外されていることを通知する処理を実行する請求項9に記載の情報処理装置の起動方法。起動時に記憶装置が取り外されている場合、システムが記憶装置内のデータを読み出そうとすると、不具合が生じる恐れがあるので、起動時に記憶装置が取り外されているかを判定し、判定結果を記録することが望まれている。本発明の目的は、起動時に記憶装置が取り外されているかを判定し、判定結果を記録することが可能な情報処理装置および情報処理装置の起動方法を提供することにある。実施形態によれば、情報処理装置は、第1の記憶装置と、プロセッサとを具備する。第1の記憶装置は、オペレーティングシステムと、前記オペレーティングシステムを起動するためのオペレーティングシステム起動コードと、所定のログ情報を格納する処理と前記オペレーティングシステム起動コードを呼び出す処理とを実行するための第1のブートローダと、前記第1のブートローダを呼び出す処理を実行するための第1の起動コードとを格納する。プロセッサは、前記情報処理装置の起動時に前記第1の起動コードを実行することによって、第2の記憶装置が前記情報処理装置に接続されているか否かを判定し、前記第2の記憶装置が前記情報処理装置に接続されていない場合、前記第2の起動コードによって前記第1のブートローダを呼び出して前記第1のブートローダを実行する。以下、実施の形態について図面を参照して説明する。図1は、実施形態に係る情報処理装置のシステム構成を示す図である。本実施形態の情報処理装置は、パーソナルコンピュータ10として実現されている。図1に示すように、本情報処理装置10は、CPUCentralprocessingunit11、MCHMemorycontrollerhub12、メインメモリ13、ICHIocontrollerhub14、GPUGraphicsprocessingunit15、ビデオメモリVRAM15A、サウンドコントローラ16、BIOS-ROMReadonlymemory17、第1の記憶装置としてのハードディスクドライブHDD18、ODDOpticaldiscdrive19、各種周辺機器21、EEPROMElectricallyerasableprogrammableROM22、EC/KBCEmbeddedcontrollerkeyboardcontroller23等を備えている。CPU11は、本情報処理装置の動作を制御するプロセッサであり、HDD18やODD19からメインメモリ13にロードされる各種プログラムを実行する。このCPU11によって実行される各種プログラムの中には、リソース管理を司るオペレーティングシステムOS110や、当該OS110の配下で動作する、キャッシュドライバ120および各種アプリケーションプログラム130等が存在する。また、CPU11は、BIOS-ROM17に格納されたBIOSも実行する。BIOSは、ハードウェア制御のためのプログラムである。以下では、BIOS-ROM17の格納物であるBIOS自体についてもBIOS17と表記することがある。MCH12は、CPU11とICH14との間を接続するブリッジとして動作すると共に、メインメモリ13をアクセス制御するメモリコントローラとして動作する。また、MCH12は、GPU15との通信を実行する機能を有している。GPU15は、本情報処理装置に組み込まれ、または、外部接続される表示装置を制御する表示コントローラである。GPU15は、VRAM15Aを有し、また、各種プログラムが表示しようとする画像をCPU11に代わって描画するアクセラレータを搭載している。ICH14は、HDD18、およびODD19を制御するためのIDEIntegrateddeviceelectronicsコントローラを内蔵する。ICH14は、PCIPeripheralcomponentinterconnectバスに接続された各種周辺機器21の制御も行う。また、ICH14は、サウンドコントローラ16との通信機能も有している。また、ICH14は、コンピュータ本体から取り外し可能な、第2の記憶装置としてのSSDSolidStateDrive31と通信を行うUSBコントローラ14Aを内蔵する。なお、SSD31は、HDD18よりもランダムアクセス速度が高速で、取り外し可能な不揮発メモリである。キャッシュドライバ120は、HDD18とSSD31とを制御するプログラムである。本情報処理装置は、SSD31の一部または全部をHDD18のキャッシュとして利用することで、SSD31に対するアクセスの高速化を図る。キャッシュドライバ120は、そのための仕組みを備えたものである。サウンドコントローラ16は音源デバイスであり、各種プログラムが再生対象とするオーディオデータを、本情報処理装置に組み込まれ、または、外部接続されるスピーカ等に出力する。EEPROM22は、例えば本情報処理装置の個体情報や環境設定情報などを格納するためのメモリデバイスである。そして、EC/KBC23は、電力管理を行うためのエンベデッドコントローラと、キーボードやポインティングデバイス等の操作によるデータ入力を制御するためのキーボードコントローラとが集積された1チップMPUMicroprocessingunitである。HDDに一般的に格納されるデータの構成について図2を参照して説明する。HDD18の先頭は、ブートセクタ200と言われる。一般にHDD18は複数の領域パーティションまたはボリュームに分割して管理されている。図2に示す例では、第1パーティション210および第2パーティション220が設定されている。HDD18の各パーティションを管理するための管理情報はブートセクタ200内にレイアウト情報パーティションテーブル202として格納されている。管理可能なパーティションの数は有限である。各々のパーティションはファイルシステムによってさらに細かい単位で管理される。また、ブートセクタ200には、BIOSによって実行が開始される、第1の起動コードとしての起動コード201が格納されている。起動コード201は、第1パーティション210の先頭ブロックに格納されている、オペレーティングシステム起動コードとしてのカーネル起動コード211を実行させる。カーネル起動コード211は、オペレーティングシステム110のカーネルを実行させる機能を有する。一般的なオペレーティングシステム110の起動について説明する。電源をオンした後、またはリセットされた場合、CPU11によってBIOSが実行される。BIOSはPowerOnSelfTestPOST処理を実行することによって、オペレーティングシステム110の起動に必要な機器が正常に動作するかをチェックする。また、同時にそれら周辺機器の初期化も行う。次にBIOSは、ブート可能なデバイスを探す。BIOSがブート可能デバイスHDD18を検出すると、BIOSは検出されたデバイスHDD18のブートセクタに格納されている起動コード201をメモリ13にロードし、起動コード201をCPU11に実行させる。起動コード201はレイアウト情報202からHDD18内のアクティブなパーティション第1パーティション210を検出する。アクティブなパーティションを検出すると、起動コード201は、アクティブなパーティション第1パーティション210の先頭に格納されている、オペレーティングシステム110のカーネルを実行させるためのカーネル起動コード211をメモリ13にロードし、ロードされたカーネル起動コード211をCPU11に実行させる。ところで、本装置は、SSD31をキャッシュメモリとして利用する。SSD31は、取り外し可能なメディアであるので、オペレーティングシステムの起動時に取り外されている場合がある。上述した一般的な起動プロセスでは、SSD31の有無を検出するようなことを行っていない。以下では、オペレーティングシステムの起動時にSSD31が取り外されている場合に、SSD31が取り外されていることが記述されているログを記録することが可能なように、HDD18に格納されている起動コード201を変更する例について説明する。ログを記録するために、CPU11によって実行される起動プロセス変更プログラムによって、HDD18内の起動コード201の書き替え、およびログの記録を行うログ起動用ブートローダの書き込み、SSD31へのキャッシュ有り用ブートローダの書き込み等が行われる。図3を参照して、起動プロセス変更プログラムの構成を説明する。起動プロセス変更プログラム300は、第1連続領域確保部301、第2連続領域確保部302、および起動コード/ブートローダ変更部303等を備えている。第1連続領域確保部301は、HDD18にログ起動用ブートローダを書き込むための第1連続領域を確保する処理を行う。第2連続領域確保部302は、SSD31内にキャッシュ有り用ブートローダを書き込まれると共に、キャッシュデータが格納される第2連続領域を確保する処理を行う。起動コード/ブートローダ変更部303は、第1連続領域および第2連続領域の確保後、第1連続領域にログ記録用ブートローダ731を格納する処理と、第2連続領域にキャッシュ有り用ブートローダを格納する処理と、起動コード201を別の起動コードによって書き替える処理とを行う。先ず、起動プロセス変更プログラム300が、カーネル起動コード211を実行させるまでのプロセスを変更するための手順を図4を参照して説明する。先ず、起動プロセス変更プログラム300の第1連続領域確保部301は、HDD18内に第1連続領域を確保するステップ401。図5を参照して、起動プロセス変更プログラムが、第1連続領域を確保する処理の手順を説明する。第1連続領域確保部301は、HDD18のブートセクタ200からレイアウト情報202を読み出す。第1連続領域確保部301は、読み出されたレイアウト情報202に基づいてHDD18に設定されているパーティションの数が最大数未満であるかを判定するステップ501。設定されているパーティションの数が最大数未満であると判定した場合ステップ501のYes、第1連続領域確保部301は、HDD18に第1連続領域を生成するために必要な容量より大きく、パーティションが割り当てられていない領域があるかを判定するステップ502。HDD18に第1連続領域を生成するために必要な容量より大きく、パーティションが割り当てられていない領域がないと判定した場合ステップ502のNo、第1連続領域確保部301は、オペレーティングシステム110にサイズを縮小することが可能なパーティションがあるかを問い合わせる。第1連続領域確保部301は、問い合わせに対するオペレーティングシステムからの応答に応じて、サイズを縮小することが可能なパーティションがあるかを判定するステップ503。例えば、HDD18の状態が図6に示す状態であり、第2パーティション220のサイズが縮小可能であり、第2パーティション220のサイズを縮小することが可能であると判定した場合ステップ503のYes、第1連続領域確保部301は、第2パーティション220を選択するステップ504。サイズを縮小することが可能なパーティションが複数ある場合、最もサイズを縮小することが可能なパーティションを選択する。第1連続領域確保部301は、選択したパーティション第2パーティション220のサイズを縮小するための縮小処理を行うステップ505。例えば、図7に示すように、第1連続領域確保部301は、第2パーティション220のサイズを縮小し、パーティションが設定されていない未管理領域230を生成する。この縮小処理は、オペレーティングシステムが提供している機能を使用しても良いし、第1連続領域確保部301が縮小処理を行う機能を有していても良い。縮小処理後、第1連続領域確保部301は、未管理領域230が第1連続領域を生成するために必要な容量を有するかを判定するステップ506。未管理領域230が第1連続領域を生成するために必要な容量を有すると判定した場合ステップ506のYes、またはステップ502においてHDD18が図7に示す状態であり、HDD18に第1連続領域を生成するために必要な容量より大きい、パーティションが割り当てられていない未管理領域230があると判定した場合ステップ502のYes、第1連続領域確保部301は、図8に示すように、第1連続領域を確保するために必要な容量を有するパーティション第3パーティション231を作成するステップ507。第3パーティション231の作成後、第1連続領域確保部301は、第3パーティション231に固定データを書き込むことによって、第3パーティション231を初期化するステップ508。初期化後、第1連続領域確保部301は、初期化されているかを確認する。ステップ501において設定されているパーティションの数が最大数未満ではないと判定した場合ステップ501のNo、ステップ503においてパーティションのサイズを縮小することができないと判定した場合ステップ503のNo、または第1連続領域を確保するために必要な容量を有する、パーティションが設定されていない領域がないと判定した場合ステップ506のNo、第1連続領域確保部301は、HDD18内に既知のファイルシステムによって管理され、第1連続領域を確保するために必要な容量を有する空き領域を作成可能であるかを判定するステップ509。空き領域を作成可能であると判定した場合ステップ509のYes、第1連続領域確保部301は、HDD18内のデータを移動させることによって、図9に示すように、アドレスが連続する空き領域212を作成するステップ510。空き領域212作成後、第1連続領域確保部301は、作成された空き領域212の容量が第1連続領域を確保するために必要な容量より大きいかを判定するステップ511。空き領域212の容量が第1連続領域を確保するために必要な容量より大きくないと判定した場合ステップ511のNo、第1連続領域確保部301は、第1連続領域の確保処理を終了する。空き領域212の容量が第1連続領域を確保するために必要な容量より大きいと判定した場合ステップ511のYes、第1連続領域確保部301は、空き領域212に固定データを書き込むことによって、空き領域212を初期化するステップ508。以上でHDD18での連続領域の確保処理の説明を終了する。HDD18内での第1連続領域の確保処理が終了した後、第2連続領域確保部302は、SSD31のレイアウト情報内に起動フラグの値が起動可を示しているパーティションがあるかを判定するステップ402。起動フラグの値が起動可を示しているパーティションがあると判定した場合ステップ402のYes、起動可を示している起動フラグの値を起動フラグの値を起動不可を示す値に書き換えるステップ403。この書き換え処理は、ユーザの承諾後に行われる。起動フラグの値が起動可を示しているパーティションがないと判定した場合ステップ402のNo、または起動フラグを起動フラグの値を起動不可を示す値に書き換えた後ステップ403、第2連続領域確保部302はSSD31に第2連続領域を確保する確保処理を行うステップ404。SSD31に第2連続領域を確保する確保処理について図10のフローチャートを参照して説明する。第2連続領域確保部302は、SSD31のブートセクタ200からレイアウト情報202を読み出す。ブートローダ設定プログラムは、読み出されたレイアウト情報202に基づいてSSD31に設定されているパーティションの数が最大数未満であるかを判定するステップ601。最大数未満であると判定した場合ステップ601のYes、第2連続領域確保部302は、SSD31に第2連続領域を確保するために必要な容量より大きい、パーティションが割り当てられていない領域があるかを判定するステップ602。SSD31に第2連続領域を確保するために必要な容量より大きい、パーティションが割り当てられていない未管理領域がないと判定した場合ステップ602のNo、第2連続領域確保部302は、オペレーティングシステム110に対してSSD31にサイズを縮小することが可能なパーティションがあるかを問い合わせる。第2連続領域確保部302は、問い合わせに対するオペレーティングシステムからの応答に応じて、SSD31内にサイズを縮小することが可能なパーティションがあるかを判定するステップ603。サイズを縮小することが可能であると判定した場合ステップ603のYes、第2連続領域確保部302は、SSD31から最もサイズを縮小することが可能なパーティションを選択するステップ604。第2連続領域確保部302は、選択したパーティションのサイズを縮小するための縮小処理を行うステップ605。この縮小処理は、オペレーティングシステムが提供している機能を使用しても良いし、第2連続領域確保部302が縮小処理を行う機能を有していても良い。縮小処理後、第2連続領域確保部302は、SSD31に第2連続領域を生成するために必要な容量を有する、パーティションが割り当てられていない未管理領域があるかを判定するステップ606。第1連続領域を確保するために必要な容量を有する未管理領域があると判定した場合ステップ606のYes、または第2連続領域を確保するために必要な容量より大きい、パーティションが割り当てられていない未管理領域があると判定した場合ステップ602のYes、第2連続領域確保部302は、図11に示すように、第2連続領域を確保するために必要な容量を有する第1パーティション710をSSD31に作成するステップ607。図11に示すように、SSDの先頭のブートセクタ700内には、第1パーティション710を管理するためのレイアウト情報702が格納されている。第1パーティション710作成後、第2連続領域確保部302は、第1パーティション710に固定データを書き込むことによって、第1パーティション710を初期化するステップ608。以上の処理によって、第2連続領域として第1パーティション710が生成される。ステップ601においてSSD31に設定されているパーティションの数が最大数未満ではないと判定した場合ステップ601のNo、ステップ603においてパーティションサイズを縮小することができないと判定した場合ステップ603のNo、または第2連続領域を確保するために必要な容量を有する未管理領域がないと判定した場合ステップ606のNo、第2連続領域確保部302は、第2連続領域の確保処理を終了する。以上でSSD31での連続領域の確保処理の説明を終了する。なお、以下では、図8に示すようにHDD18に第3パーティション231が第1連続領域として確保され、図11に示すようにSSD31に第1パーティション710が第2連続領域として確保された場合を説明する。SSD31内に第2連続領域を確保することができた場合ステップ405のYes、起動コード/ブートローダ変更部303は、HDD18の個体識別番号とHDD18が接続されたコンピュータ本体の個体識別番号を取得するステップ406。また、起動コード/ブートローダ変更部303は、カーネル起動コードの位置を取得する。次いで、起動コード/ブートローダ変更部303は、起動コード/ブートローダ変更部303が有するキャッシュ有り用ブートローダのマスターコードを取得された個体識別番号およびカーネル起動コードの位置に基づいてカスタマイズするステップ407。起動コード/ブートローダ変更部303は、図12に示すように、カスタマイズされたマスターコード712を有するブートローダ以下、キャッシュ有り用ブートローダ711をSSD31の第1パーティション710の先頭ブロックから書き込むステップ408。キャッシュ有り用ブートローダ711は、連続する領域に書き込まれる。カスタマイズされたマスターコード712には、キャッシュ有り用ブートローダ711が後述するカーネル起動コードを起動して良いかを判別するための情報として、HDD18の個体識別番号、コンピュータの個体識別番号、カーネル起動コードの位置が記録されている。起動コード/ブートローダ変更部303は、図12示すように、キャッシュ有り用ブートローダ711が格納されている最後の領域の次の領域に、後にHDD18のブートセクタ200に書き込まれるデータ以下、ブートセクタデータ700Aを書き込む。ブートセクタデータ710Aは、書き替え起動コード701A、およびレイアウト情報702Aを有する。なお、この時点で、レイアウト情報702Aは有効な情報を有していない。そして、起動コード/ブートローダ変更部303は、HDD18内のブートセクタ200からデータを読み出しステップ409、読み出されたブートセクタ200に格納されていたブートセクタデータ200Aをブートセクタデータ700Aが書き込まれている領域の次の領域から書き込むステップ410。図12に示すように、SSD31に書き込まれたブートセクタデータ200Aは、起動コード201およびレイアウト情報202Aのコピーである起動コード201Aおよびレイアウト情報202Aを有する。HDD18内に第1連続領域第3パーティション231が正常に確保された場合ステップ411のYes、起動コード/ブートローダ変更部303は、図13に示すように、第3パーティション231の先頭ブロックからログ記録用ブートローダ731を書き込むステップ412。起動コード/ブートローダ変更部303は、HDD18またはSSD31からブートセクタに格納されているデータを読み出し、ログ記録用ブートローダ731が書き込まれている最後のブロックの次のブロックから、読み出されたブートセクタデータ200Bを書き込む図13。ブートセクタデータ200Bは、起動コード201およびレイアウト情報202Aのコピーである起動コード201Bおよびレイアウト情報202Bを有する。第1連続領域内のログ記録用ブートローダ731およびブートセクタデータ200Bが書き込まれていない領域の少なくとも一部はログ記録用ブートローダがログ情報を書き込むログ記録領域232となる。起動コード/ブートローダ変更部303は、HDD18のブートセクタ200に書き込まれているレイアウト情報202を読み出し、読み出されたレイアウト情報202によってHDD18内のブートセクタデータ700Aのレイアウト情報をSSD31内のレイアウト情報702Aを上書きし、ブートセクタデータ700Aにレイアウト情報202Bを生成するステップ413、図14。また、SSD31内のブートセクタデータ700A内に、HDD18の第3パーティション231内のログ記録用ブートローダ731の位置情報先頭アドレスおよび大きさ、およびログ記録領域232の位置情報先頭アドレスおよび大きさを含む位置情報703Aを書き込む。さらに、ブートローダ書換プログラムは、HDD18のブートセクタ200に、SSD31内のブートセクタデータ700Aを書き込むことによって、起動コード201およびレイアウト情報を書き換え起動コード701Aおよび書き替えレイアウト情報202Bによって上書きすると共に、位置情報703Bを書き込むステップ414、図15。ブートローダ書換プログラムは、後述する管理アプリケーションプログラムをインストールするステップ415。もし、HDD18内に第1連続領域を確保することができなかった場合ステップ411のNo、起動コード/ブートローダ変更部303は、HDD18のブートセクタ200に書き込まれているレイアウト情報202を読み出し、読み出されたレイアウト情報202によってHDD18内のブートセクタデータ700Aのレイアウト情報をSSD31内のレイアウト情報702Aを上書きするステップ416。そして、SSD31内のブートセクタデータ700A内に、HDD18の第3パーティション231内のログ記録用ブートローダ731の位置情報先頭アドレスおよび大きさ、およびログ記録領域232の位置情報先頭アドレスおよび大きさを含む位置情報を書き込む。なお、起動コード/ブートローダ変更部303は、ログ記録用ブートローダ731の位置情報として0や1などの明らかに異常とわかる値を設定することでログ取得機能が無効にする。さらに、起動コード/ブートローダ変更部303は、HDD18のブートセクタに、SSD31内の連続領域の先頭ブロックアドレスが埋め込まれている新たな書き換え起動コードを有するブロックを書き込むことによって、オリジナル起動コードを書き換え起動コードによって上書きするステップ416。以上で、ブートセクタの書き替えする処理、およびログ記録用ブートローダ731を書き込む処理の説明を終了する。次に、上述したブートセクタの書き替えする処理、およびログ記録用ブートローダ731を書き込む処理が終了した後の本装置の起動シーケンスについて説明する。電源オン直後、ないしリセット後、CPU11は、BIOSを実行する。BIOSはPowerOnSelfTestPOST処理を実行し、必要な機器が正常に動作するかをチェックする。また、同時にそれら周辺機器の初期化も実行する。次に初期プログラムは、ブート可能なデバイスを検索する。初期プログラムがブート可能なデバイスHDD18を検出すると、検出されたデバイスのブートセクタに格納されている起動コード701Aをメモリ13にロードし、ロードされた起動コード701AがCPU11によって実行される。起動コード701Aによって行われる処理の手順を図16のフローチャートを参照して説明する。起動コード701Aは、レイアウト情報202Bに基づいてSSD31を検索するステップ401。SSD31を検出した場合ステップ802のYes、起動コード701Aは、SSD31からキャッシュ有り用ブートローダ711の読み出しを試みるステップ803。読み出しに成功した場合ステップ804のYes、起動コード701Aは、キャッシュ有り用ブートローダ711をメモリ13にロードし、CPU11にキャッシュ有り用ブートローダ711を実行させるステップ805。SSD31を検出しなかった場合ステップ802のNo、またはSSD31からキャッシュ有り用ブートローダ711を読み出せなかった場合ステップ804のNo、起動コード701Aは、HDD18のブートセクタ200内の位置情報703B内のログ記録用ブートローダ731の位置情報に基づいてログ取得機能が有効になっているかを判定するステップ806。有効になっていると判定した場合ステップ806のYes、起動コード701Aは、HDD18からログ記録用ブートローダ731をメモリ13にロードすることを試みるステップ807。ログ記録用ブートローダ731が正常にロードされた場合ステップ807のYes、起動コード701Aは、ロードされたログ記録用ブートローダ731をCPU11に実行させるステップ809。ログ取得機能が有効になっていないと判定した場合ステップ806のNo、またはログ記録用ブートローダ731が正常に読み出されなかった場合ステップ808のNo、書き替えブートローダは、レイアウト情報202Bを参照することによってオペレーティングシステムのカーネルを起動するためのカーネル起動コード211をメモリ13にロードしステップ811、読み出されたカーネル起動コード211をCPU11に実行させるステップ812。次に、キャッシュ有り用ブートローダ711によって実行される処理を図17のフローチャートを参照して説明する。キャッシュ有り用ブートローダ711は、SSD31からマスターコード712の読み出しを試みるステップ901。マスターコード712の読み出しに成功するとステップ902のYes、キャッシュ有り用ブートローダ711は、コンピュータに接続されている全てのHDDから個体識別情報をそれぞれ読み出し、読み出された個体識別情報を有する個体識別番号テーブルを作成するステップ903。キャッシュ有り用ブートローダ711は、個体識別番号テーブル内にマスターコード712に登録されている個体識別情報と一致する個体識別番号があるかを判定するステップ904。一致する個体識別番号があると判定した場合ステップ904のYes、キャッシュ有り用ブートローダ711は、マスターコード712内のコンピュータの識別番号、およびカーネル起動コード211の先頭位置アドレスが有効であるかを判定するステップ905。有効であると判定した場合ステップ905のYes、キャッシュ有り用ブートローダ711は、リクエスト監視ルーチンを実行するステップ906。リクエスト監視ルーチンについては後述する。キャッシュ有り用ブートローダ711は、カーネル起動コードをメモリ13にロードするステップ907。次ステップのカーネル起動コードがロードされたら、キャッシュ有り用ブートローダ711は、CPU11にカーネル起動コードを実行させるステップ908。構成情報の読み出しに失敗した場合ステップ902のNo、一致する個体識別番号がないと判定した場合ステップ904のNo、または構成情報が有効ではなかった場合ステップ905のNo、キャッシュ有り用ブートローダ711は、位置情報703Bのログ記録用ブートローダ731の位置情報に基づいてログ取得機能が有効になっているかを判定するステップ909。有効になっていると判定した場合ステップ909のYes、キャッシュ有り用ブートローダは、HDD18からログ記録用ブートローダ731をメモリ13にロードすることを試みるステップ910。ログ記録用ブートローダ731が正常に読み出された場合ステップ911のYes、キャッシュ有り用ブートローダは、ロードされたログ記録用ブートローダ731をCPU11に実行させるステップ912。ログ取得機能が有効になっていないと判定した場合ステップ911のNo、またはログ記録用ブートローダ731が正常に読み出されなかった場合ステップ909のNo、キャッシュ有り用ブートローダ711は、レイアウト情報202Aを参照することによってオペレーティングシステムのカーネルを起動するためのカーネル起動コード211をメモリ13にロードしステップ913、ロードされたカーネル起動コード211をCPU11に実行させるステップ914。次に、ステップ906におけるリクエスト監視ルーチンについて図18のフローチャートを参照して説明する。キャッシュ有り用ブートローダ711は、I/Oリクエストの対象が監視対象ドライブであるHDD18であるかを判定するステップ1001。HDD18であると判定した場合ステップ1001のYes、キャッシュ有り用ブートローダ711は、I/OリクエストされたデータがSSD31にキャッシュされているかを判定するステップ1002。キャッシュされていると判定した場合ステップ1002のYes、キャッシュ有り用ブートローダ711は、I/Oリクエストがデータの書き込みであるかを判定するステップ1003。書き込みではないと判定した場合ステップ1003のNo、キャッシュ有り用ブートローダ711は、I/Oリクエストを発行先に転送するステップ1005。I/Oリクエストの発行先がデータを転送したら、キャッシュ有り用ブートローダ711は、転送されたデータおよびデータの位置情報をSSD31内に格納し、データをキャッシュするステップ1010。ステップ1003において書き込みであると判定した場合ステップ1003のYes、キャッシュ有り用ブートローダ711は、SSD31にキャッシュされているデータを無効にするステップ1006。そして、キャッシュ有り用ブートローダ711は、元のI/Oリクエスト処理を実行するステップ1007。対象のデータがキャッシュされていないと判定した場合ステップ1002のNo、キャッシュ有り用ブートローダ711は、I/Oリクエストがデータの書き込みであるかを判定するステップ1008。書き込みであると判定した場合ステップ1008のYes、キャッシュ有り用ブートローダ711は、通常のデータ書き込み処理を行うステップ1007。書き込みではない判定した場合ステップ1008のNo、キャッシュ有り用ブートローダ711は、I/OリクエストされたデータをHDD18から読み出し、読み出されたデータおよびアドレスをSSD31に書き込むステップ1009。そして、キャッシュ有り用ブートローダ711は、元のI/Oリクエスト処理を実行するステップ1007。このような処理をおこなうことで、HDD18のランダムリードアクセスのシークタイムを隠蔽することが可能となる。HDD18内にキャッシュ有り用ブートローダ711を配置すると余計なヘッドシークが複数発生するが、SSD31をキャッシュ有り用ブートローダ711に格納することで、起動時間を短くすることが可能である。次に、ログ記録用ブートローダ731による処理について図19のフローチャートを参照して説明する。なお、起動コード701Aから、ログ記録用ブートローダ731が読み出されるまでに発生した異常系への分岐の履歴がエラー情報としてメモリ13内に記録されている。ログ記録用ブートローダ731は、エラー情報をメモリ13内から収集するステップ1101。ログ記録用ブートローダ731は、キャッシュメモリとして用いられるSSD31が接続されていないことを示す未装着情報および記録日時を有するエラーログをHDD18内のログ記録領域に記録するステップ1102。なお、メモリ13内のエラー情報はログ記録用ブートローダ731から読み出されると消去される。ログ記録用ブートローダ731は、カーネル起動コード211をメモリ13にロードしステップ1103、ロードされたカーネル起動コード211をCPU11に実行させるステップ1104。カーネル起動コード211は、先ずオペレーティングシステムのカーネルを起動し、順次オペレーティングシステム110が実行される。オペレーティングシステムの起動中に実行される処理を図20を参照して説明する。図20に示すように、オペレーティングシステムの起動中、レガシーモードで動作するプログラムによって、カーネルモードで動作するオペレーティングシステムカーネル1201と、カーネルI/O監視アプリケーションプログラム1202と、ディスクドライバ1203とが起動される。ここで、レガシーモードとは、BIOSによって起動コードが起動されてからカーネルが起動する前までの状態である。また、カーネルモードとは、カーネル起動後の状態である。カーネルI/O監視アプリケーションプログラム1202は、オペレーティングシステムカーネル1201からディスクドライバ1203に対するリクエストをフックする。次に、オペレーティングシステム起動後の実行される処理を図21を参照して説明する。オペレーティングシステムの起動後、図21に示すように、ユーザモードで動作する管理アプリケーションプログラム1211や各種アプリケーションプログラム1212が起動される。カーネルI/O監視アプリケーションプログラム1202は、ファイルシステム1204からディスクドライバ1203に対するリクエストをフックする。なお、管理アプリケーションプログラム1211は、図21に示すように、カーネルI/O監視プログラム1202が取得したログ情報をオペレーティングシステムカーネル1201に格納する処理を行う。カーネルモードI/O監視アプリケーションプログラムの構成を図22を参照して説明する。カーネルモードI/O監視アプリケーションプログラム1200は、OS起動停止部1301および保護領域保護部1302等を備えている。OS起動停止部1301は、ログ記録領域232内のログ情報を参照し、そのまま起動すると致命的なエラー情報が含まれている例えばSSD31に最新のデータが含まれており、HDD18には含まれていない場合ことを検出したとき、OSの起動を停止する。致命的ではない場合は、そのままOSの起動を継続する。保護領域保護部1302は、ログ記録用ブートローダ731、ログ記録領域232、およびキャッシュ有り用ブートローダ711以下、ログ記録用ブートローダ731、ログ記録領域232、およびキャッシュ有り用ブートローダ711が格納されている領域を保護領域と記すが別なデータで改変されないようにする。保護領域保護部1302は、保護領域内のデータが改変されないようにI/Oリクエストを監視する処理を実行する。OS起動停止部1301によって実行される処理の手順の一例を図23のフローチャートを参照して説明する。OS起動停止部1301は、起動コード701A内の位置情報703Bを参照することで、ログ記録領域232内のログ情報を読み出すステップ1401。OS起動停止部1301は、ログ情報に基づいてログ情報が起動時にSSD31が装着されていないことが致命的かどうか判定するステップ1402。SSD31が装着されていないことが致命的な場合、OS起動停止部1401はOSの起動を停止させるため、Panicを発生させたり、システムを再起動をさせたりする。SSD31が装着されていないことが致命的ではない場合ステップ1402のYes、そのままオペレーティングシステム110の起動を継続される。以上の処理で、オペレーティングシステムの起動中に実行されるカーネルI/O監視アプリケーションプログラム1202は、ログ記録用ブートローダ731によって生成されたログ情報に基づいて、SSD31が装着されていないことを検出することが可能になる。また、カーネルモードI/O監視プログラムの起動停止部によって、自動的に起動停止することで、SSD31が使用できないことによって生じる致命的なデータ破壊を抑制することが可能になる。オペレーティングシステム起動後に実行される管理プログラムが実行される。管理プログラム1300は、ログ管理部および保護領域保護部1302等を有する。保護領域保護部1302によって実行されるI/Oリクエストを監視する処理の手順の一例を図24のフローチャートを参照して説明する。保護領域保護部1302は、ファイルシステム等からHDD18に対して発行されたI/Oリクエストをフックするステップ1501。保護領域保護部1302は、I/Oリクエストが書き込み要求であるかを判定するステップ1502。書き込み要求であると判定した場合ステップ1502のYes、保護領域保護部1302は、リクエストによってデータが書き込まれるのが保護領域を含んでいるかを判定するステップ1503。保護領域を含んでいると判定した場合、保護領域保護部1302は、書き込み要求を失敗させるステップ1504。保護領域保護部1302は、保護領域を含んでいないと判定した場合、I/Oリクエストを発行元に渡すステップ1505。以上の処理で保護領域に格納されているデータの改変を防止することができる。上記実施形態では、SSD31がHDD18のキャッシュメモリとして用いられる例を説明したが、通常のデータを記録するのではなく、システムの実行に関連するデータを格納するので有れば、本実施形態を適用することが可能である。また、上記実施形態では、第2の記憶装置が、USBバスによって接続されたSSD31である例を説明したが、SATASerialAdvancedTechnologyAttachmentの外付け用の規格であるeSATAによって接続されたSSDであっても良い。また、第2の記憶装置は、取り外し可能な記憶メディアであれば、SSD以外であっても良い。例えば、第2の記憶装置がUSBメモリであっても良い。本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。