(57)【要約】【課題】障害発生に備えて保持するデータ量を抑制すること。【解決手段】情報処理装置１は、制御部３を含む。制御部３は、書込指示７ａ，８ａを第１の記憶装置４と第２の記憶装置５に行って応答７ｂ，８ｂを取得し、第１の記憶装置４と第２の記憶装置５のデータの書込位置を示す位置情報２ａを記憶部２に格納し、データ移動指示７ｃ，８ｃを第１の記憶装置４と第２の記憶装置５に行い、データ移動応答７ｄを取得し、第１の記憶装置４と第２の記憶装置５の何れからデータ移動応答を取得したか否かを示す応答情報２ｂを記憶部２に格納し、第１の記憶装置４または第２の記憶装置５に障害の発生を検出した場合に応答情報２ｂに基づいて不揮発性記録媒体へのデータ６ｃを書き込み済みの第１の記憶装置４を判定し、位置情報２ａに基づいて第１の記憶装置４から読み出したデータ６ｅを第２の記憶装置５に書き込む。【選択図】図１
2018018193.tif 000002
【特許請求の範囲】
【請求項１】
第１の記憶装置と第２の記憶装置をミラーリング制御する情報処理装置であって、
データの書き込みを指示する書込指示を前記第１の記憶装置と前記第２の記憶装置とに行い、
前記書込指示に対する応答を前記第１の記憶装置と前記第２の記憶装置とから取得し、
前記第１の記憶装置の前記データの書込位置と前記第２の記憶装置の前記データの書込位置を示す位置情報を記憶部に格納し、
不揮発性記録媒体への書き込み前の前記データをキャッシュメモリに保持している場合に前記データをキャッシュメモリから不揮発性記録媒体に書き込むことを指示するデータ移動指示を、前記第１の記憶装置および前記第２の記憶装置に行い、
前記第１の記憶装置または前記第２の記憶装置から前記データ移動指示に対するデータ移動応答を取得し、前記第１の記憶装置および前記第２の記憶装置の何れから前記データ移動応答を取得したか否かを示す応答情報を前記記憶部に格納し、
前記第１の記憶装置または前記第２の記憶装置に関する障害の発生を検出した場合に前記応答情報に基づいて前記第１の記憶装置および前記第２の記憶装置がキャッシュメモリから不揮発性記録媒体への前記データの書き込みを完了しているか否かを判定し、前記第１の記憶装置がキャッシュメモリから不揮発性記録媒体への前記データの書き込みを完了していると判定し前記第２の記憶装置がキャッシュメモリから不揮発性記録媒体への前記データの書き込みを完了していないと判定したとき、前記位置情報に基づいて前記第１の記憶装置から読み出した前記データを、前記位置情報に基づいて前記第２の記憶装置に書き込む、
制御部を含む情報処理装置。
【請求項２】
前記制御部は、
前記位置情報を前記記憶部に格納する際に、前記位置情報とともに前記データのデータ量を前記記憶部に格納し、
前記第１の記憶装置がキャッシュメモリから不揮発性記録媒体への前記データの書き込みを完了していると判定し前記第２の記憶装置がキャッシュメモリから不揮発性記録媒体への前記データの書き込みを完了していないと判定したとき、前記記憶部から読み出した前記位置情報と前記データ量とに基づいて前記第１の記憶装置から前記データを読み出す、
請求項１に記載の情報処理装置。
【請求項３】
前記記憶部は、前記第１の記憶装置および前記第２の記憶装置に関する装置情報と、前記第１の記憶装置が有するキャッシュメモリ容量および前記第２の記憶装置が有するキャッシュメモリ容量との対応関係を示すキャッシュメモリ情報を記憶し、
前記制御部は、前記第１の記憶装置および前記第２の記憶装置に関する装置情報を取得し、前記第１の記憶装置が有するキャッシュメモリ容量および前記第２の記憶装置が有するキャッシュメモリ容量を特定する、
請求項１または２に記載の情報処理装置。
【請求項４】
前記制御部は、
第１のタイミングで第１のデータの書き込みを指示する第１の書込指示を前記第１の記憶装置と前記第２の記憶装置とに行い、前記第１のタイミングより後の第２のタイミングで第２のデータの書き込みを指示する第２の書込指示を前記第１の記憶装置と前記第２の記憶装置とに行い、
前記第１のデータのデータ量と前記第２のデータのデータ量との合計値が前記第１の記憶装置が有するキャッシュメモリ容量または前記第２の記憶装置が有するキャッシュメモリ容量を超えた場合、前記第１のデータと前記第２のデータとのうち前記第２のデータを、前記第１の記憶装置から読み出し対象のデータとする、
請求項３に記載の情報処理装置。
【請求項５】
前記制御部は、前記第１の記憶装置および前記第２の記憶装置に対するアクセスが一定期間行われていないことを検出した場合、前記第１の記憶装置および前記第２の記憶装置に前記データ移動指示を行う、
請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
第１の記憶装置と第２の記憶装置をミラーリング制御するコンピュータに、
データの書き込みを指示する書込指示を前記第１の記憶装置と前記第２の記憶装置とに行い、
前記書込指示に対する応答を前記第１の記憶装置と前記第２の記憶装置とから取得し、
前記第１の記憶装置の前記データの書込位置と前記第２の記憶装置の前記データの書込位置を示す位置情報を記憶部に格納し、
不揮発性記録媒体への書き込み前の前記データをキャッシュメモリに保持している場合に前記データをキャッシュメモリから不揮発性記録媒体に書き込むことを指示するデータ移動指示を、前記第１の記憶装置および前記第２の記憶装置に行い、
前記第１の記憶装置または前記第２の記憶装置から前記データ移動指示に対するデータ移動応答を取得し、前記第１の記憶装置および前記第２の記憶装置の何れから前記データ移動応答を取得したか否かを示す応答情報を前記記憶部に格納し、
前記第１の記憶装置または前記第２の記憶装置に関する障害の発生を検出した場合に前記応答情報に基づいて前記第１の記憶装置および前記第２の記憶装置がキャッシュメモリから不揮発性記録媒体への前記データの書き込みを完了しているか否かを判定し、前記第１の記憶装置がキャッシュメモリから不揮発性記録媒体への前記データの書き込みを完了していると判定し前記第２の記憶装置がキャッシュメモリから不揮発性記録媒体への前記データの書き込みを完了していないと判定したとき、前記位置情報に基づいて前記第１の記憶装置から読み出した前記データを、前記位置情報に基づいて前記第２の記憶装置に書き込む、
処理を実行させる制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理装置および制御プログラムに関する。
【背景技術】
【０００２】
書込要求のライトデータをキャッシュメモリに格納した時点で書込完了を応答し、キャッシュメモリに格納したライトデータを後から磁気ディスクに書き込むＨＤＤ（Hard Disk Drive）が知られている。このようなＨＤＤは、磁気ディスクにデータを書き込む前に電源障害が発生した場合、キャッシュメモリに格納しているライトデータを消失する。
【０００３】
このような電源障害に起因するデータ消失を防止する技術が提案されている。例えば、サーバは、ＨＤＤへのライトデータをＳＳＤ（Solid State Drive）に保持し、電源障害などが発生した後、ＳＳＤに格納されているライトデータをＨＤＤへ格納する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−１６１１１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記技術のように、ＨＤＤの障害発生に備えてデータを重複して保持することは、システムが保持するデータ量をいたずらに増大させることとなり設備負担の一因になる。
１つの側面では、本発明は、障害発生に備えて保持するデータ量を抑制できる情報処理装置および制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
１つの態様では、第１の記憶装置と第２の記憶装置をミラーリング制御する情報処理装置が提供される。この情報処理装置は、制御部を含む。制御部は、データの書き込みを指示する書込指示を第１の記憶装置と第２の記憶装置とに行い、書込指示に対する応答を第１の記憶装置と第２の記憶装置とから取得し、第１の記憶装置のデータの書込位置と第２の記憶装置のデータの書込位置を示す位置情報を記憶部に格納し、不揮発性記録媒体への書き込み前のデータをキャッシュメモリに保持している場合にデータをキャッシュメモリから不揮発性記録媒体に書き込むことを指示するデータ移動指示を、第１の記憶装置および第２の記憶装置に行い、第１の記憶装置または第２の記憶装置からデータ移動指示に対するデータ移動応答を取得し、第１の記憶装置および第２の記憶装置の何れからデータ移動応答を取得したか否かを示す応答情報を記憶部に格納し、第１の記憶装置または第２の記憶装置に関する障害の発生を検出した場合に応答情報に基づいて第１の記憶装置および第２の記憶装置がキャッシュメモリから不揮発性記録媒体へのデータの書き込みを完了しているか否かを判定し、第１の記憶装置がキャッシュメモリから不揮発性記録媒体へのデータの書き込みを完了していると判定し第２の記憶装置がキャッシュメモリから不揮発性記録媒体へのデータの書き込みを完了していないと判定したとき、位置情報に基づいて第１の記憶装置から読み出したデータを、位置情報に基づいて第２の記憶装置に書き込む。
【０００７】
また、１つの態様では、制御プログラムが提供される。この制御プログラムは、第１の記憶装置と第２の記憶装置をミラーリング制御するコンピュータに、データの書き込みを指示する書込指示を第１の記憶装置と第２の記憶装置とに行い、書込指示に対する応答を第１の記憶装置と第２の記憶装置とから取得し、第１の記憶装置のデータの書込位置と第２の記憶装置のデータの書込位置を示す位置情報を記憶部に格納し、不揮発性記録媒体への書き込み前のデータをキャッシュメモリに保持している場合にデータをキャッシュメモリから不揮発性記録媒体に書き込むことを指示するデータ移動指示を、第１の記憶装置および第２の記憶装置に行い、第１の記憶装置または第２の記憶装置からデータ移動指示に対するデータ移動応答を取得し、第１の記憶装置および第２の記憶装置の何れからデータ移動応答を取得したか否かを示す応答情報を記憶部に格納し、第１の記憶装置または第２の記憶装置に関する障害の発生を検出した場合に応答情報に基づいて第１の記憶装置および第２の記憶装置がキャッシュメモリから不揮発性記録媒体へのデータの書き込みを完了しているか否かを判定し、第１の記憶装置がキャッシュメモリから不揮発性記録媒体へのデータの書き込みを完了していると判定し第２の記憶装置がキャッシュメモリから不揮発性記録媒体へのデータの書き込みを完了していないと判定したとき、位置情報に基づいて第１の記憶装置から読み出したデータを、位置情報に基づいて第２の記憶装置に書き込む、処理を実行させる。
【発明の効果】
【０００８】
１つの側面では、障害発生に備えて保持するデータ量を抑制できる。
【図面の簡単な説明】
【０００９】
【図１】第１の実施の形態の情報処理装置の一例を示す図である。
【図２】第２の実施の形態のＰＣのハードウェアの一例を示す図である。
【図３】第２の実施の形態のＲＡＩＤコントローラのハードウェアの一例を示す図である。
【図４】第２の実施の形態のＲＡＩＤコントローラの機能の一例を示す図である。
【図５】第２の実施の形態のキャッシュ容量テーブルの一例を示す図である。
【図６】第２の実施の形態の管理テーブルの一例を示す図である。
【図７】第２の実施の形態のビット情報の一例を示す図である。
【図８】第２の実施の形態のデータ格納処理の一例を示す図（その１）である。
【図９】第２の実施の形態のデータ格納処理の一例を示す図（その２）である。
【図１０】第２の実施の形態の容量オーバー処理の一例を示す図である。
【図１１】第２の実施の形態のデータ格納処理のフローチャートの一例を示す図である。
【図１２】第２の実施の形態のＷｒｉｔｅコマンド処理のフローチャートの一例を示す図である。
【図１３】第２の実施の形態のＦＬＵＳＨ  ＣＡＣＨＥコマンド処理のフローチャートの一例を示す図である。
【図１４】第２の実施の形態のＳｔａｎｄ  Ｂｙコマンド処理のフローチャートの一例を示す図である。
【図１５】第２の実施の形態の完了応答処理のフローチャートの一例を示す図である。
【図１６】第２の実施の形態の復旧処理の一例を示す図（その１）である。
【図１７】第２の実施の形態の復旧処理の一例を示す図（その２）である。
【図１８】第２の実施の形態の電源投入時処理のフローチャートの一例を示す図である。
【図１９】第２の実施の形態の復旧処理のフローチャートの一例を示す図である。
【発明を実施するための形態】
【００１０】
以下、実施の形態について図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の情報処理装置の一例を示す図である。情報処理装置１は、第１の記憶装置４と第２の記憶装置５をミラーリング制御する。第１の記憶装置４は、キャッシュメモリ４ａと不揮発性記録媒体４ｂとを含む。第２の記憶装置５は、キャッシュメモリ５ａと不揮発性記録媒体５ｂとを含む。
【００１１】
情報処理装置１は、記憶部２と制御部３を含む。例えば、記憶部２は、ＲＡＭ（Random Access Memory）やフラッシュメモリなどである。例えば、制御部３は、プロセッサが所要の処理を実行することにより実現し得る。
【００１２】
制御部３は、第１の記憶装置４にデータ６ａの書き込みを指示（書込指示７ａ）し、第２の記憶装置５にデータ６ｂの書き込みを指示（書込指示８ａ）する。なお、データ６ａとデータ６ｂは、第１の記憶装置４と第２の記憶装置５とのミラーリング制御におけるミラーリング対象データである。なお、制御部３は、上位装置（図示を省略）からデータの書込指示を取得し、上位装置から取得したデータの書込指示に応じて第１の記憶装置４と第２の記憶装置５とに書込指示を行うものであってもよい。例えば、上位装置は、情報処理装置１がＲＡＩＤ（Redundant Arrays of Inexpensive Disks）制御装置であるとき、ＲＡＩＤ制御装置を制御対象とする情報処理装置（例えば、ＰＣ：Personal Computer）が備えるプロセッサである。また、上位装置は、情報処理装置１がＰＣであるとき、情報処理装置１と通信可能なホスト装置である。
【００１３】
制御部３は、第１の記憶装置４から書込指示７ａに対する応答７ｂを取得する。制御部３は、第２の記憶装置５から書込指示８ａに対する応答８ｂを取得する。制御部３は、記憶部２に位置情報２ａを格納する。位置情報２ａは、第１の記憶装置４のデータの書込位置と第２の記憶装置５のデータの書込位置を示す。
【００１４】
制御部３は、不揮発性記録媒体４ｂへの書き込み前のデータ６ｃをキャッシュメモリ４ａに保持している場合、第１の記憶装置４にデータ移動指示７ｃを指示する。データ移動指示７ｃは、キャッシュメモリ４ａから不揮発性記録媒体４ｂへのデータ６ｃの書込の指示である。制御部３は、不揮発性記録媒体５ｂへの書き込み前のデータ６ｄをキャッシュメモリ５ａに保持している場合、第２の記憶装置５にデータ移動指示８ｃを指示する。データ移動指示８ｃは、キャッシュメモリ５ａから不揮発性記録媒体５ｂへのデータ６ｄの書込の指示である。
【００１５】
制御部３は、第１の記憶装置４または第２の記憶装置５からデータ移動応答を取得する。データ移動応答は、データ移動指示に対する応答である。例えば、制御部３は、第１の記憶装置４からデータ移動応答７ｄを取得する。
【００１６】
制御部３は、記憶部２に応答情報２ｂを格納する。応答情報２ｂは、第１の記憶装置４および第２の記憶装置５の何れからデータ移動応答を取得したか否かを示す。例えば、応答情報２ｂは、第１の記憶装置４からデータ移動応答７ｄを取得したことを示し、第２の記憶装置５からデータ移動応答を取得していないことを示す。
【００１７】
制御部３は、第１の記憶装置４または第２の記憶装置５に関する障害の発生を検出する。例えば、障害は、電源障害などである。制御部３は、障害を検出する場合、第１の記憶装置４および第２の記憶装置５を監視し、第１の記憶装置４または第２の記憶装置５に障害が発生したことを検出する。または、制御部３は、情報処理装置１に電源障害が発生した場合、第１の記憶装置４および第２の記憶装置５にも電源障害が発生したものとみなして障害の発生を検出してもよい。
【００１８】
制御部３は、障害の発生を検出した場合に応答情報２ｂに基づいて第１の記憶装置４および第２の記憶装置５がキャッシュメモリから不揮発性記録媒体へのデータの書き込みを完了しているか否かを判定する。制御部３は、第１の記憶装置４がキャッシュメモリ４ａから不揮発性記録媒体４ｂへのデータ６ｃの書き込みを完了していると判定する。制御部３は、第２の記憶装置５がキャッシュメモリ５ａから不揮発性記録媒体５ｂへのデータ６ｄの書き込みを完了していないと判定する。これにより、制御部３は、障害により第２の記憶装置５がデータ６ｄを消失していることを検出できる。
【００１９】
制御部３は、位置情報２ａに基づいて第１の記憶装置４にデータ６ｅの読出７ｅの指示を行う。制御部３は、位置情報２ａに基づいて第２の記憶装置５にデータ６ｅの書込７ｆの指示を行う。
【００２０】
第１の実施の形態によれば、情報処理装置１は、位置情報２ａと応答情報２ｂとに基づいて、第１の記憶装置４に格納されているデータ６ｅを第２の記憶装置５に書き込むことができる。よって、情報処理装置１は、位置情報２ａと応答情報２ｂを保持していれば、第２の記憶装置５にデータ６ｅを復旧することができる。
【００２１】
よって、第１の実施の形態によれば、情報処理装置１は、障害発生に備えて保持するデータ量を抑制できる。
［第２の実施の形態］
次に、第２の実施形態のＰＣについて図２を用いて説明する。図２は、第２の実施の形態のＰＣのハードウェアの一例を示す図である。ＰＣ１００は、事務所や家庭等におけるパーソナルユースのコンピュータである。なお、ＰＣ１００は、パーソナルユースのコンピュータに限らず、汎用コンピュータなどであってもよい。
【００２２】
ＰＣ１００は、ＣＰＵ（Central Processing Unit）１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、読み取り装置１０６およびＲＡＩＤコントローラ２００を含む。また、ＰＣ１００は、ＨＤＤ３００，３１０，３２０を含む。
【００２３】
ＣＰＵ１０１は、ＰＣ１００で実行される各処理を制御する。ＣＰＵ１０１は、マルチプロセッサであってもよい。ＣＰＵ１０１は、例えば、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）またはＦＰＧＡ（Field Programmable Gate Array）などである。
【００２４】
ＲＡＭ１０２は、ＰＣ１００の主記憶装置である。ＲＡＭ１０２は、ＣＰＵ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ１０２は、ＣＰＵ１０１による処理に用いる各種データを記憶する。
【００２５】
ＨＤＤ１０３は、ＰＣ１００の補助記憶装置である。ＨＤＤ１０３は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ１０３は、ＯＳのプログラム、アプリケーションプログラム、および各種データを記憶する。ＰＣ１００は、フラッシュメモリやＳＳＤなどの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
【００２６】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、ＰＣ１００に接続されたディスプレイ１１に画像を出力する。ディスプレイ１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイなどを用いることができる。
【００２７】
入力信号処理部１０５は、ＰＣ１００に接続された入力デバイス１２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス１２としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
【００２８】
読み取り装置１０６は、記録媒体１３に記録されたプログラムやデータを読み取る装置である。記録媒体１３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。また、記録媒体１３として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することもできる。読み取り装置１０６は、例えば、ＣＰＵ１０１からの命令に従って、記録媒体１３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。更に、ＣＰＵ１０１は、記録媒体１３から読み取ったプログラムやデータを、ＰＣ１００のＲＡＭ１０２やＨＤＤ１０３に格納するようＰＣ１００に指示することもできる。
【００２９】
ＨＤＤ３００は、キャッシュメモリ３０１と磁気ディスク３０２とを含む。ＨＤＤ３００は、書込要求を受信したとき、書込要求のデータをキャッシュメモリ３０１に格納した時点で書き込み完了を応答する。ＨＤＤ３００は、キャッシュメモリ３０１に書き込まれたデータを所定のタイミングで磁気ディスク３０２に書き込む。
【００３０】
ＨＤＤ３１０は、キャッシュメモリ３１１と磁気ディスク３１２とを含む。ＨＤＤ３１０は、書込要求を受信したとき、書込要求のデータをキャッシュメモリ３１１に格納した時点で書き込み完了を応答する。ＨＤＤ３１０は、キャッシュメモリ３１１に書き込まれたデータを所定のタイミングで磁気ディスク３１２に書き込む。
【００３１】
ＨＤＤ３２０は、キャッシュメモリ３２１と磁気ディスク３２２とを含む。ＨＤＤ３２０は、書込要求を受信したとき、書込要求のデータをキャッシュメモリ３２１に格納した時点で書き込み完了を応答する。ＨＤＤ３２０は、キャッシュメモリ３２１に書き込まれたデータを所定のタイミングで磁気ディスク３２２に書き込む。
【００３２】
なお、ＨＤＤ３００，３１０，３２０の少なくとも１つは、キャッシュメモリを有するＳＳＤでもよい。また、ＨＤＤ３００，３１０，３２０は、ＰＣ１００と一体にして設けられるものであってもよいし、ＰＣ１００と別体にして設けられるものであってもよい。
【００３３】
ＲＡＩＤコントローラ２００は、ＨＤＤ３００，３１０，３２０をＲＡＩＤとして管理する。ＲＡＩＤコントローラ２００は、磁気ディスク３０２，３１２，３２２の記憶領域に設定された論理ボリュームのＬＢＡ（Logical Block Address）を指定してアクセスする。また、ＲＡＩＤコントローラ２００は、ＨＤＤ３００，３１０，３２０をＲＡＩＤ１で制御する。すなわち、ＲＡＩＤコントローラ２００は、ＨＤＤ３００，３１０，３２０をミラーリング制御する。
【００３４】
なお、一の観点によればＲＡＩＤコントローラ２００は、第１の実施の形態の情報処理装置１の一形態である。また、他の観点によればＲＡＩＤコントローラ２００を含むＰＣ１００は、第１の実施の形態の情報処理装置１の一形態である。このとき、ＲＡＭ１０２、ＨＤＤ１０３は第１の実施の形態の記憶部２の一形態となり、ＣＰＵ１０１は第１の実施の形態の制御部３の一形態となり得る。
【００３５】
図３は、第２の実施の形態のＲＡＩＤコントローラのハードウェアの一例を示す図である。ＲＡＩＤコントローラ２００は、ＣＰＵ２０１、ＲＡＭ２０２およびフラッシュメモリ２０３を含む。
【００３６】
ＣＰＵ２０１は、ＲＡＩＤコントローラ２００で実行される各処理を制御する。ＲＡＭ２０２は、ＲＡＩＤコントローラ２００の主記憶装置である。ＲＡＭ２０２は、ＣＰＵ２０１に実行させるアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ２０２は、ＣＰＵ２０１による処理に用いる各種データを記憶する。フラッシュメモリ２０３は、ＲＡＩＤコントローラ２００の補助記憶装置である。フラッシュメモリ２０３に、アプリケーションプログラム、および各種データを記憶する。
【００３７】
図４は、第２の実施の形態のＲＡＩＤコントローラの機能の一例を示す図である。ＲＡＩＤコントローラ２００は、記憶部２１０および制御部２２０を含む。記憶部２１０は、キャッシュ容量テーブル、管理テーブル、ビット情報を記憶する。記憶部２１０は、例えば、ＲＡＭ２０２またはフラッシュメモリ２０３の少なくとも一方で実現される。
【００３８】
キャッシュ容量テーブルは、ＨＤＤ３００，３１０，３２０ごとのキャッシュ容量を示す。管理テーブルは、ＨＤＤ３００，３１０，３２０ごとのデータの書き込み状態を示す。制御部２２０は、ビット情報から何れのＨＤＤでデータの書き込みが完了したかを検出することができる。
【００３９】
ＲＡＩＤコントローラ２００は、ＣＰＵ１０１からＷｒｉｔｅコマンド、ＦＬＵＳＨ  ＣＡＣＨＥコマンドなどを受信する。Ｗｒｉｔｅコマンドは、データの書込指示である。なお、Ｗｒｉｔｅコマンドは、第１の実施の形態の書込指示の一形態である。
【００４０】
ＦＬＵＳＨ  ＣＡＣＨＥコマンドは、キャッシュメモリから磁気ディスクへのデータの書込の指示である。なお、ＦＬＵＳＨ  ＣＡＣＨＥコマンドは、キャッシュメモリから磁気ディスクへのデータの書込の指示の一例である。そのため、制御部２２０は、ＦＬＵＳＨ  ＣＡＣＨＥコマンドと同じ意味のコマンドをＣＰＵ１０１から受信してもよい。なお、ＦＬＵＳＨ  ＣＡＣＨＥコマンドは、第１の実施の形態のデータ移動指示の一形態である。
【００４１】
制御部２２０は、ＲＡＩＤコントローラ２００が受信したコマンドに対する制御を行う。制御部２２０は、例えば、ＣＰＵ２０１が所定のプログラムを実行することによって実現される。
【００４２】
制御部２２０は、ＲＡＩＤコントローラ２００がＷｒｉｔｅコマンドを受信した場合、Ｗｒｉｔｅコマンド処理を実行する。Ｗｒｉｔｅコマンド処理は、後で詳細に説明する。なお、ＨＤＤ３００，３１０，３２０は、各ＨＤＤのキャッシュメモリにデータを格納した時点でＷｒｉｔｅコマンドに対する完了応答を制御部２２０に送信する。なお、ＨＤＤ３００，３１０，３２０は、完了応答の後、キャッシュメモリに格納しているデータを磁気ディスクに格納するまでの間、電源障害の発生によりデータを消失する可能性がある。
【００４３】
制御部２２０は、ＲＡＩＤコントローラ２００がＦＬＵＳＨ  ＣＡＣＨＥコマンドを受信した場合、ＦＬＵＳＨ  ＣＡＣＨＥコマンド処理を実行する。ＦＬＵＳＨ  ＣＡＣＨＥコマンド処理は、後で詳細に説明する。
【００４４】
制御部２２０は、ＨＤＤ３００，３１０，３２０に障害が発生し、キャッシュメモリに格納されていたデータが消失したとみなした場合、復旧処理を実行する。復旧処理は、後で詳細に説明する。
【００４５】
図５は、第２の実施の形態のキャッシュ容量テーブルの一例を示す図である。キャッシュ容量テーブル２１１は、項番、モデル名、キャッシュ容量の項目を含む。項番の項目は、キャッシュ容量テーブル２１１のレコードの番号を示す。モデル名の項目は、ＨＤＤ３００などの名称を示す。キャッシュ容量の項目は、ＨＤＤ３００などが有するキャッシュメモリの容量を示す。
【００４６】
例えば、キャッシュ容量テーブル２１１の項番“１”は、ＨＤＤ３００のモデル名が“Ｍ１”であり、キャッシュメモリ３０１のキャッシュ容量が“６４”ＭＢであることを示す。なお、ＨＤＤ３１０のモデル名は、“Ｍ１”である。ＨＤＤ３２０のモデル名は、“Ｍ１”である。
【００４７】
制御部２２０は、ＨＤＤ３００,３１０，３２０からモデル名を取得し、キャッシュ容量テーブル２１１を参照することで、ＨＤＤ３００,３１０，３２０のキャッシュ容量を特定できる。なお、モデル名は、ＨＤＤの機種情報の一形態である。なお、キャッシュ容量テーブル２１１は、キャッシュ容量が６４ＭＢ以外のモデル名も含まれる。
【００４８】
図６は、第２の実施の形態の管理テーブルの一例を示す図である。管理テーブル２１２は、項番、確定ＨＤＤ、コマンドコード、ＬＢＡ、セクタ数の項目を含む。
項番の項目は、管理テーブル２１２のレコードの番号を示す。確定ＨＤＤの項目は、ＨＤＤ３００，３１０，３２０が有するキャッシュメモリから磁気ディスクにデータが書き込み済みであるか否かを示す。すなわち、確定ＨＤＤの項目は、ＨＤＤ３００，３１０，３２０が有する磁気ディスクへデータが書き込まれていることの確定の有無を示す。なお、確定ＨＤＤの項目に登録される情報は、１バイトで登録される。登録される情報については、後で説明する。コマンドコードの項目は、ＲＡＩＤコントローラ２００が受信したコマンドを識別する情報を示す。コマンドコード“０ｘ３５”は、Ｗｒｉｔｅコマンドを示す。コマンドコード“０ｘＥＡ”は、ＦＬＵＳＨ  ＣＡＣＨＥコマンドを示す。ＬＢＡの項目は、データの書き込みを開始する先頭のＬＢＡを示す。セクタ数の項目は、ＨＤＤ３００，３１０，３２０が有する磁気ディスクへ書き込むデータ長を示す。
【００４９】
なお、制御部２２０は、ＲＡＩＤコントローラ２００がＦＬＵＳＨ  ＣＡＣＨＥコマンドを受信した場合、ＬＢＡとセクタ数の項目に“不定”を登録する。“不定”は、ＬＢＡとセクタ数の項目にどんな情報が登録されるか定まっていないことを意味する。管理テーブル２１２に登録される情報の具体例は、後で示す。
【００５０】
図７は、第２の実施の形態のビット情報の一例を示す図である。ビット情報２１３は、管理テーブル２１２の確定ＨＤＤの項目に登録される情報の意味を示す。
ビット情報２１３は、確定ＨＤＤの項目に登録される情報の０ビット目が“１”の場合、ｈｄ１（ＨＤＤ３００の識別情報）の磁気ディスクにデータが書き込み済みであることを示す。ビット情報２１３は、確定ＨＤＤの項目に登録される情報の１ビット目が“１”の場合、ｈｄ２（ＨＤＤ３１０の識別情報）の磁気ディスクにデータが書き込み済みであることを示す。ビット情報２１３は、確定ＨＤＤの項目に登録される情報の２ビット目が“１”の場合、ｈｄ３（ＨＤＤ３２０の識別情報）の磁気ディスクにデータが書き込み済みであることを示す。３〜７ビットは、リザーブである。
【００５１】
図８は、第２の実施の形態のデータ格納処理の一例を示す図（その１）である。図９は、第２の実施の形態のデータ格納処理の一例を示す図（その２）である。図８（Ａ）は、ＲＡＩＤコントローラ２００がＣＰＵ１０１からＷｒｉｔｅコマンドおよびＦＬＵＳＨ  ＣＡＣＨＥコマンドを受信した場合を示す。
【００５２】
ＲＡＩＤコントローラ２００は、ＣＰＵ１０１からＷｒｉｔｅコマンドを受信する。Ｗｒｉｔｅコマンドは、ＬＢＡおよびセクタ数を含む。ＬＢＡは、“０ｘ０００００２Ｅ６４ＦＢＢ”である。セクタ数は、“０ｘ０１００”である。制御部２２０は、ＷｒｉｔｅコマンドをＨＤＤ３００，３１０，３２０に発行する。これにより、ＨＤＤ３００，３１０，３２０は、キャッシュメモリ３０１，３１１，３２１にデータを格納できる。また、ＨＤＤ３００，３１０，３２０は、Ｗｒｉｔｅコマンドに含まれているＬＢＡをデータと対応付けてキャッシュメモリ３０１，３１１，３２１に格納する。なお、ＨＤＤ３００，３１０，３２０は、ＬＢＡに対応する磁気ディスクの物理アドレスをデータと対応付けてキャッシュメモリ３０１，３１１，３２１に格納してもよい。制御部２２０は、Ｗｒｉｔｅコマンドに対する完了応答をＨＤＤ３００，３１０，３２０から受信する。制御部２２０は、Ｗｒｉｔｅコマンドに対する完了応答をＣＰＵ１０１に送信する。
【００５３】
制御部２２０は、管理テーブル２１２ａの確定ＨＤＤの項目に“０ｘ００”を登録する。制御部２２０は、管理テーブル２１２ａのコマンドコードの項目に“０ｘ３５”を登録する。制御部２２０は、管理テーブル２１２ａのＬＢＡの項目にＷｒｉｔｅコマンドに含まれているＬＢＡ“０ｘ０００００２Ｅ６４ＦＢＢ”を登録する。制御部２２０は、管理テーブル２１２ａのセクタ数の項目にＷｒｉｔｅコマンドに含まれているセクタ数“０ｘ０１００”を登録する。
【００５４】
ＲＡＩＤコントローラ２００は、ＣＰＵ１０１からＷｒｉｔｅコマンドを受信する。制御部２２０は、ＷｒｉｔｅコマンドをＨＤＤ３００，３１０，３２０に発行する。制御部２２０は、Ｗｒｉｔｅコマンドに対する完了応答をＨＤＤ３００，３１０，３２０から受信する。制御部２２０は、Ｗｒｉｔｅコマンドに対する完了応答をＣＰＵ１０１に送信する。
【００５５】
制御部２２０は、管理テーブル２１２ａの確定ＨＤＤの項目に“０ｘ００”を登録する。制御部２２０は、管理テーブル２１２ａのコマンドコードの項目に“０ｘ３５”を登録する。制御部２２０は、管理テーブル２１２ａのＬＢＡの項目にＷｒｉｔｅコマンドに含まれているＬＢＡ“０ｘ０００００１１９３８Ｃ０”を登録する。制御部２２０は、管理テーブル２１２ａのセクタ数の項目にＷｒｉｔｅコマンドに含まれているセクタ数“０ｘ０１００”を登録する。
【００５６】
ＲＡＩＤコントローラ２００は、ＣＰＵ１０１からＦＬＵＳＨ  ＣＡＣＨＥコマンドを受信する。制御部２２０は、ＦＬＵＳＨ  ＣＡＣＨＥコマンドをＨＤＤ３００，３１０，３２０に発行する。これにより、ＨＤＤ３００，３１０，３２０は、キャッシュメモリ３０１，３１１，３２１に格納されているデータをＬＢＡに対応する磁気ディスクの位置に書き込むことができる。
【００５７】
制御部２２０は、管理テーブル２１２ａの確定ＨＤＤの項目に“０ｘ００”を登録する。制御部２２０は、管理テーブル２１２ａのコマンドコードの項目に“０ｘＥＡ”を登録する。制御部２２０は、管理テーブル２１２ａのＬＢＡおよびセクタ数の項目に“不定”を登録する。
【００５８】
図８（Ｂ）は、管理テーブル２１２ａの後に制御部２２０がＨＤＤ３００からＦＬＵＳＨ  ＣＡＣＨＥコマンドに対する完了応答を受信した場合を示す。制御部２２０は、ＨＤＤ３００からＦＬＵＳＨ  ＣＡＣＨＥコマンドに対する完了応答を受信する。制御部２２０は、ビット情報２１３を参照し、管理テーブル２１２ｂの項番“３”のレコードの確定ＨＤＤの項目に“０ｘ０１”を登録する。“０ｘ０１”は、確定ＨＤＤの項目の０ビット目が１になったからである。制御部２２０は、管理テーブル２１２ｂの項番“１”のレコードの確定ＨＤＤの項目に“０ｘ０１”を登録する。制御部２２０は、管理テーブル２１２ｂの項番“２”のレコードの確定ＨＤＤの項目に“０ｘ０１”を登録する。
【００５９】
図９（Ａ）は、管理テーブル２１２ｂの後に制御部２２０がＨＤＤ３１０からＦＬＵＳＨ  ＣＡＣＨＥコマンドに対する完了応答を受信した場合を示す。制御部２２０は、ＨＤＤ３１０からＦＬＵＳＨ  ＣＡＣＨＥコマンドに対する完了応答を受信する。制御部２２０は、ビット情報２１３を参照し、管理テーブル２１２ｃの項番“３”のレコードの確定ＨＤＤの項目に“０ｘ０３”を登録する。“０ｘ０３”は、確定ＨＤＤの項目の０ビット目と１ビット目とが１になったからである。制御部２２０は、管理テーブル２１２ｃの項番“１”のレコードの確定ＨＤＤの項目に“０ｘ０３”を登録する。制御部２２０は、管理テーブル２１２ｃの項番“２”のレコードの確定ＨＤＤの項目に“０ｘ０３”を登録する。
【００６０】
図９（Ｂ）は、管理テーブル２１２ｃの後に制御部２２０がＨＤＤ３２０からＦＬＵＳＨ  ＣＡＣＨＥコマンドに対する完了応答を受信した場合を示す。制御部２２０は、ＨＤＤ３２０からＦＬＵＳＨ  ＣＡＣＨＥコマンドに対する完了応答を受信する。制御部２２０は、ビット情報２１３を参照し、管理テーブル２１２ｃの項番“３”のレコードの確定ＨＤＤの項目に“０ｘ０７”を登録する。“０ｘ０７”は、確定ＨＤＤの項目の０ビット目と１ビット目と２ビット目とが１になったからである。制御部２２０は、管理テーブル２１２ｄの項番“１”のレコードの確定ＨＤＤの項目に“０ｘ０７”を登録する。制御部２２０は、管理テーブル２１２ｄの項番“２”のレコードの確定ＨＤＤの項目に“０ｘ０７”を登録する。制御部２２０は、ＦＬＵＳＨ  ＣＡＣＨＥコマンドに対する完了応答をＣＰＵ１０１に送信する。このように、管理テーブル２１２ｄの確定ＨＤＤの項目は、“０ｘ００”から“０ｘ０７”の範囲までを示す。管理テーブル２１２ｄの確定ＨＤＤの項目は、磁気ディスク３０２，３１２，３２２の全てにデータが書き込まれていない場合、“０ｘ０１”から“０ｘ０６”の範囲までの何れかを示す。制御部２２０は、磁気ディスク３０２，３１２，３２２にデータが書き込まれた場合、管理テーブル２１２ｄの確定ＨＤＤの項目に“０ｘ０７”を登録する。
【００６１】
なお、管理テーブル２１２は、制御部２２０による管理テーブル２１２への登録処理が行われる場合以外はフラッシュメモリ２０３に格納される。ＲＡＩＤコントローラ２００は、管理テーブル２１２をフラッシュメモリ２０３に格納することで、ＰＣ１００の障害発生による管理テーブル２１２の消失を防止できる。また、キャッシュ容量テーブル２１１およびビット情報２１３は、制御部２２０による処理で使用される場合以外はフラッシュメモリ２０３に格納される。
【００６２】
図１０は、第２の実施の形態の容量オーバー処理の一例を示す図である。なお、制御部２２０は、キャッシュメモリ３０１，３１１，３２１の容量が同じ場合、容量オーバー処理を実行する。
【００６３】
制御部２２０は、管理テーブル２１２ｅの項番“５１２”まで登録済みである。ＲＡＩＤコントローラ２００は、ＣＰＵ１０１からＷｒｉｔｅコマンドを受信する。制御部２２０は、ＷｒｉｔｅコマンドをＨＤＤ３００，３１０，３２０に発行する。制御部２２０は、Ｗｒｉｔｅコマンドに対する完了応答をＨＤＤ３００，３１０，３２０から受信する。制御部２２０は、Ｗｒｉｔｅコマンドに対する完了応答をＣＰＵ１０１に送信する。
【００６４】
制御部２２０は、管理テーブル２１２ｅの項番“５１３”のレコードの確定ＨＤＤの項目に“０ｘ００”を登録する。制御部２２０は、管理テーブル２１２ｅの項番“５１３”のレコードのコマンドコードの項目に“０ｘ３５”を登録する。制御部２２０は、管理テーブル２１２ｅの項番“５１３”のレコードのＬＢＡの項目にＷｒｉｔｅコマンドに含まれているＬＢＡ“０ｘ０００００２Ｅ８３Ｆ９８”を登録する。制御部２２０は、管理テーブル２１２ｅの項番“５１３”のレコードのセクタ数の項目にＷｒｉｔｅコマンド含まれているセクタ数“０ｘ０１００”を登録する。図１０（Ａ）は、制御部２２０が管理テーブル２１２ｅの項番“５１３”のレコードを作成したことを示している。
【００６５】
制御部２２０は、管理テーブル２１２ｅを参照し、コマンドコードの項目が“０ｘ３５”の中で確定ＨＤＤの項目が“０ｘ００”のレコードの項番“１”〜“５１３”のセクタ数の総和を算出する。制御部２２０は、セクタ数の総和がキャッシュメモリの容量“６４”ＭＢを超えたと判定する。制御部２２０は、キャッシュメモリの容量を超えた容量が“０ｘ０１００”であることを特定する。制御部２２０は、ＨＤＤ３００，３１０，３２０でキャッシュメモリの容量を超えた容量のデータが磁気ディスクに書き込まれたと推測する。制御部２２０は、磁気ディスクに書き込まれたデータがＨＤＤ３００，３１０，３２０のキャッシュメモリに格納されてから最も時間が長いデータであると推測する。制御部２２０は、項番が一番古い項番“１”のレコードの確定ＨＤＤの項目に“０ｘ０７”を登録する。図１０（Ｂ）は、管理テーブル２１２ｆの項番“１”のレコードの確定ＨＤＤの項目に“０ｘ０７”が登録された状態を示している。
【００６６】
ＲＡＩＤコントローラ２００は、管理テーブル２１２ｆを参照することで、キャッシュメモリに格納されているデータ量を把握することができる。また、ＲＡＩＤコントローラ２００は、管理テーブル２１２ｆを参照することで、キャッシュメモリの容量を超えたデータ容量を把握することができる。
【００６７】
図１１は、第２の実施の形態のデータ格納処理のフローチャートの一例を示す図である。ＲＡＩＤコントローラ２００は、ＣＰＵ１０１からのコマンドの受信を契機にデータ格納処理を実行する。
【００６８】
（Ｓ１１）ＲＡＩＤコントローラ２００は、ＣＰＵ１０１からコマンドを受信する。
（Ｓ１２）制御部２２０は、受信したコマンドがＷｒｉｔｅコマンド、ＦＬＵＳＨ  ＣＡＣＨＥコマンド、Ｓｔａｎｄ  Ｂｙコマンドであるか否かを判定する。受信したコマンドがＷｒｉｔｅコマンドの場合、制御部２２０は、ステップＳ１３に進む。受信したコマンドがＦＬＵＳＨ  ＣＡＣＨＥコマンドの場合、制御部２２０は、ステップＳ１４に進む。受信したコマンドがＳｔａｎｄ  Ｂｙコマンドの場合、制御部２２０は、ステップＳ１５に進む。受信したコマンドがＷｒｉｔｅコマンド、ＦＬＵＳＨ  ＣＡＣＨＥコマンド、Ｓｔａｎｄ  Ｂｙコマンドの何れでもない場合、制御部２２０は、データ格納処理を終了する。
【００６９】
（Ｓ１３）制御部２２０は、Ｗｒｉｔｅコマンド処理を実行する。
（Ｓ１４）制御部２２０は、ＦＬＵＳＨ  ＣＡＣＨＥコマンド処理を実行する。
（Ｓ１５）制御部２２０は、Ｓｔａｎｄ  Ｂｙコマンド処理を実行する。
【００７０】
図１２は、第２の実施の形態のＷｒｉｔｅコマンド処理のフローチャートの一例を示す図である。制御部２２０は、ステップＳ１３の実行を契機にＷｒｉｔｅコマンド処理を実行する。
【００７１】
（Ｓ２１）制御部２２０は、ＷｒｉｔｅコマンドをＨＤＤ３００，３１０，３２０に発行する。これにより、ＨＤＤ３００，３１０，３２０は、キャッシュメモリ３０１，３１１，３２１にデータを格納することができる。また、ＨＤＤ３００，３１０，３２０は、キャッシュメモリ３０１，３１１，３２１にＷｒｉｔｅコマンドに含まれているＬＢＡを格納する。
【００７２】
（Ｓ２２）制御部２２０は、Ｗｒｉｔｅコマンドに対する完了応答をＨＤＤ３００，３１０，３２０から受信する。
（Ｓ２３）制御部２２０は、管理テーブル２１２のポインタをインクリメントする。なお、制御部２２０は、ポインタが管理テーブル２１２の最後尾の場合、ポインタを先頭に移動する。
【００７３】
（Ｓ２４）制御部２２０は、管理テーブル２１２の確定ＨＤＤの項目に０ｘ００を登録する。制御部２２０は、管理テーブル２１２のコマンドコードの項目に０ｘ３５を登録する。制御部２２０は、管理テーブル２１２のＬＢＡの項目にＷｒｉｔｅコマンドに含まれているＬＢＡを登録する。制御部２２０は、管理テーブル２１２のセクタ数の項目にＷｒｉｔｅコマンドに含まれているセクタ数を登録する。
【００７４】
制御部２２０は、後述するように、容量オーバー処理を行わない旨の情報を記憶部２１０が記憶している場合、Ｗｒｉｔｅコマンドに対する完了応答をＣＰＵ１０１に送信し、ステップＳ２５以降の処理を実行せずにＷｒｉｔｅコマンド処理を終了する。
【００７５】
（Ｓ２５）制御部２２０は、管理テーブル２１２を参照し、コマンドコードの項目が０ｘ３５の中で確定ＨＤＤの項目が０ｘ００のレコードのセクタ数の総和を算出する。
（Ｓ２６）制御部２２０は、ステップＳ６８で後述するように、記憶部２１０に格納されているキャッシュメモリの容量の情報とステップＳ２５で算出したセクタ数の総和を比較する。制御部２２０は、ステップＳ２５で算出したセクタ数の総和がキャッシュメモリの容量を超えるか否かを判定する。キャッシュメモリの容量を超える場合、制御部２２０は、ステップＳ２７に進む。キャッシュメモリの容量を超えない場合、制御部２２０は、Ｗｒｉｔｅコマンドに対する完了応答をＣＰＵ１０１に送信する。制御部２２０は、Ｗｒｉｔｅコマンド処理を終了する。
【００７６】
（Ｓ２７）制御部２２０は、キャッシュメモリの容量を超えた容量を特定する。制御部２２０は、管理テーブル２１２の確定ＨＤＤの項目が０ｘ００の中で項番が古い順に、キャッシュメモリの容量を超えたデータ容量に対応するレコードの確定ＨＤＤの項目に０ｘ０７を登録する。制御部２２０は、Ｗｒｉｔｅコマンドに対する完了応答をＣＰＵ１０１に送信する。
【００７７】
図１３は、第２の実施の形態のＦＬＵＳＨ  ＣＡＣＨＥコマンド処理のフローチャートの一例を示す図である。制御部２２０は、ステップＳ１４の実行を契機にＦＬＵＳＨ  ＣＡＣＨＥコマンド処理を実行する。
【００７８】
（Ｓ３１）制御部２２０は、ＦＬＵＳＨ  ＣＡＣＨＥコマンドをＨＤＤ３００，３１０，３２０に発行する。これにより、ＨＤＤ３００，３１０，３２０は、キャッシュメモリ３０１，３１１，３２１に格納されているデータを磁気ディスクに書き込む処理を開始することができる。
【００７９】
（Ｓ３２）制御部２２０は、管理テーブル２１２のポインタをインクリメントする。なお、制御部２２０は、ポインタが管理テーブル２１２の最後尾の場合、ポインタを先頭に移動する。
【００８０】
（Ｓ３３）制御部２２０は、管理テーブル２１２の確定ＨＤＤの項目に０ｘ００を登録する。制御部２２０は、管理テーブル２１２のコマンドコードの項目に０ｘＥＡを登録する。制御部２２０は、管理テーブル２１２のＬＢＡおよびセクタ数の項目に“不定”を登録する。
【００８１】
（Ｓ３４）制御部２２０は、ＦＬＵＳＨ  ＣＡＣＨＥコマンドに対する完了応答を１つのＨＤＤから受信する。
（Ｓ３５）制御部２２０は、ビット情報２１３を参照し、完了応答を送信したＨＤＤで磁気ディスクにデータが書き込み済みである旨を管理テーブル２１２の確定ＨＤＤの項目に登録する。例えば、制御部２２０は、コマンドコードの項目が０ｘＥＡのレコードの確定ＨＤＤの項目に、完了応答を送信したＨＤＤで磁気ディスクにデータが書き込み済みである旨を登録する。制御部２２０は、コマンドコードの項目が０ｘ３５のレコードの確定ＨＤＤの項目に、完了応答を送信したＨＤＤで磁気ディスクにデータが書き込み済みである旨を登録する。
【００８２】
なお、制御部２２０は、ＣＰＵ１０１からＦＬＵＳＨ  ＣＡＣＨＥコマンドを受信せずに、自らＦＬＵＳＨ  ＣＡＣＨＥコマンドをＨＤＤ３００，３１０，３２０に発行してもよい。例えば、制御部２２０は、管理テーブル２１２の最後尾の項番まで情報が登録されている場合、自らＦＬＵＳＨ  ＣＡＣＨＥコマンドをＨＤＤ３００，３１０，３２０に発行する。または、制御部２２０は、ＨＤＤ３００，３１０，３２０に対するアクセスが一定期間行われていないことを検出した場合、自らＦＬＵＳＨ  ＣＡＣＨＥコマンドをＨＤＤ３００，３１０，３２０に発行する。このように、制御部２２０は、ＨＤＤ３００，３１０，３２０の状態を考慮して自らＦＬＵＳＨ  ＣＡＣＨＥコマンドを発行する。これにより、制御部２２０は、ＨＤＤ３００，３１０，３２０に障害が発生する前にＨＤＤ３００，３１０，３２０の磁気ディスクにデータを格納させることができるので、ＨＤＤ３００，３１０，３２０に格納されているデータの消失を防ぐことができる。
【００８３】
図１４は、第２の実施の形態のＳｔａｎｄ  Ｂｙコマンド処理のフローチャートの一例を示す図である。制御部２２０は、ステップＳ１５の実行を契機にＳｔａｎｄ  Ｂｙコマンド処理を実行する。
【００８４】
（Ｓ４１）制御部２２０は、Ｓｔａｎｄ  ＢｙコマンドをＨＤＤ３００，３１０，３２０に発行する。これにより、ＨＤＤ３００，３１０，３２０は、キャッシュメモリに格納されているデータを磁気ディスクに書き込む。
【００８５】
（Ｓ４２）制御部２２０は、Ｓｔａｎｄ  Ｂｙコマンドに対する完了応答をＨＤＤ３００，３１０，３２０から受信する。
（Ｓ４３）制御部２２０は、管理テーブル２１２のポインタをインクリメントする。なお、制御部２２０は、ポインタが管理テーブル２１２の最後尾の場合、ポインタを先頭に移動する。
【００８６】
（Ｓ４４）制御部２２０は、管理テーブル２１２の確定ＨＤＤの項目に０ｘ０７を登録する。制御部２２０は、管理テーブル２１２のコマンドコードの項目に０ｘＥ２を登録する。制御部２２０は、管理テーブル２１２のＬＢＡおよびセクタ数の項目に“不定”を登録する。
【００８７】
（Ｓ４５）制御部２２０は、管理テーブル２１２の確定ＨＤＤの項目が０ｘ０７以外のレコードの確定ＨＤＤの項目を０ｘ０７に更新する。制御部２２０は、Ｓｔａｎｄ  Ｂｙコマンドに対する完了応答をＣＰＵ１０１に送信する。
【００８８】
図１５は、第２の実施の形態の完了応答処理のフローチャートの一例を示す図である。制御部２２０は、ステップＳ３１で発行したＦＬＵＳＨ  ＣＡＣＨＥコマンドに対する完了応答をステップＳ３４の完了応答を送信したＨＤＤ以外から受信したときを契機に完了応答処理を実行する。
【００８９】
（Ｓ５１）制御部２２０は、ステップＳ３１で発行したＦＬＵＳＨ  ＣＡＣＨＥコマンドに対する完了応答をステップＳ３４の完了応答を送信したＨＤＤ以外から受信する。
（Ｓ５２）制御部２２０は、ビット情報２１３を参照し、管理テーブル２１２の確定ＨＤＤの項目に、完了応答を送信したＨＤＤで磁気ディスクにデータが書き込み済みである旨を登録する。例えば、制御部２２０は、コマンドコードの項目が０ｘＥＡのレコードの確定ＨＤＤの項目に、完了応答を送信したＨＤＤで磁気ディスクにデータが書き込み済みである旨を登録する。制御部２２０は、コマンドコードの項目が０ｘ３５のレコードの確定ＨＤＤの項目に、完了応答を送信したＨＤＤで磁気ディスクにデータが書き込み済みである旨を登録する。
【００９０】
また、制御部２２０は、ＨＤＤ３００，３１０，３２０から完了応答を受信した場合、ＦＬＵＳＨ  ＣＡＣＨＥコマンドに対する完了応答をＣＰＵ１０１に送信する。
図１６は、第２の実施の形態の復旧処理の一例を示す図（その１）である。図１７は、第２の実施の形態の復旧処理の一例を示す図（その２）である。管理テーブル２１２ｇの項番“１０６”は、制御部２２０がＨＤＤ３００，３１０，３２０にＦＬＵＳＨ  ＣＡＣＨＥコマンドを発行したことを示している。管理テーブル２１２ｇの項番“１０２”〜“１０６”は、制御部２２０がＨＤＤ３００からＦＬＵＳＨ  ＣＡＣＨＥコマンドに対する完了応答を受信したことを示している。
【００９１】
すなわち、管理テーブル２１２ｇは、Ｗｒｉｔｅコマンドで指定した全てのデータがキャッシュメモリ３０１から磁気ディスク３０２に書き込み済みであることを示す。管理テーブル２１２ｇは、Ｗｒｉｔｅコマンドで指定した全てのデータがキャッシュメモリ３１１から磁気ディスク３１２に書き込み済みでないことを示す。管理テーブル２１２ｇは、Ｗｒｉｔｅコマンドで指定した全てのデータがキャッシュメモリ３２１から磁気ディスク３２２に書き込み済みでないことを示す。
【００９２】
管理テーブル２１２ｇの状態でＨＤＤ３００，３１０，３２０に障害が発生したものとする。例えば、ＰＣ１００で電源障害が発生し、ＨＤＤ３００，３１０，３２０でも電源障害が発生する。これにより、ＨＤＤ３１０は、キャッシュメモリ３１１に格納していたデータを消失する。ＨＤＤ３２０は、キャッシュメモリ３２１に格納していたデータを消失する。
【００９３】
制御部２２０は、ＰＣ１００に電源が投入されたことを検出する。これにより、制御部２２０は、ＰＣ１００で電源障害が発生し、ＨＤＤ３００，３１０，３２０でも電源障害が発生したことを検出する。
【００９４】
制御部２２０は、管理テーブル２１２ｇを参照し、コマンドコードの項目が“０ｘ３５”の中で確定ＨＤＤの項目が０ｘ００以外かつ０ｘ０７以外のレコードである項番“１０２”を特定する。制御部２２０は、確定ＨＤＤの項目を参照し、データを磁気ディスクに書き込み済みのＨＤＤ３００とデータを磁気ディスクに未書き込みのＨＤＤ３１０，３２０を特定する。
【００９５】
制御部２２０は、ＬＢＡ“０ｘ０００００２Ｅ６４ＦＢＢ”に対応する磁気ディスク３０２の位置からセクタ数“０ｘ０１００”分のデータをＨＤＤ３００から取得する。制御部２２０は、ＨＤＤ３１０，３２０にＷｒｉｔｅコマンドを発行する。Ｗｒｉｔｅコマンドは、ＨＤＤ３００から取得したデータとＬＢＡ“０ｘ０００００２Ｅ６４ＦＢＢ”を含む。これにより、ＨＤＤ３１０，３２０は、制御部２２０がＨＤＤ３００から取得したデータをキャッシュメモリ３１１，３２１に格納できる。
【００９６】
制御部２２０は、項番“１０３”〜“１０５”についても同様に、ＨＤＤ３００に書き込まれているデータを取得する。制御部２２０は、ＨＤＤ３００から取得したデータを含むＷｒｉｔｅコマンドをＨＤＤ３１０，３２０に発行する。
【００９７】
制御部２２０は、ＨＤＤ３１０，３２０にＦＬＵＳＨ  ＣＡＣＨＥコマンドを発行する。これにより、ＨＤＤ３１０，３２０は、キャッシュメモリ３１１，３２１に格納されているデータをＬＢＡに対応する磁気ディスク３１２，３２２の位置に格納することができる。
【００９８】
ＨＤＤ３１０，３２０は、ＦＬＵＳＨ  ＣＡＣＨＥコマンドに対する完了応答を制御部２２０に送信する。制御部２２０は、管理テーブル２１２ｇの項番“１０２”〜“１０６”の確定ＨＤＤの項目に“０ｘ０７”を登録する。図１７の管理テーブル２１２ｈは、制御部２２０が確定ＨＤＤの項目に“０ｘ０７”を登録した後の状態を示している。
【００９９】
図１８は、第２の実施の形態の電源投入時処理のフローチャートの一例を示す図である。制御部２２０は、ＰＣ１００に電源が投入されたのを契機に電源投入時処理を実行する。
【０１００】
（Ｓ６１）制御部２２０は、ＨＤＤ３００，３１０，３２０からモデル名とＨＤＤ３００，３１０，３２０の識別情報を取得する。
（Ｓ６２）記憶部２１０は、前回電源が切れる前の構成の情報（モデル名と識別情報）を記憶している。制御部２２０は、ステップＳ６１で取得したモデル名および識別情報と、前回の構成とを比較し、前回の構成と同じであるか否かを判定する。前回の構成と同じ場合、制御部２２０は、ステップＳ６３に進む。前回の構成と異なる場合、制御部２２０は、電源投入時処理を終了する。
【０１０１】
（Ｓ６３）制御部２２０は、管理テーブル２１２を参照し、確定ＨＤＤの項目が全て０ｘ０７であるか否かを判定する。全て０ｘ０７の場合、制御部２２０は、ステップＳ６６に進む。全て０ｘ０７でない場合、制御部２２０は、ステップＳ６４に進む。
【０１０２】
（Ｓ６４）制御部２２０は、管理テーブル２１２を参照し、コマンドコードの項目が０ｘ３５の中で確定ＨＤＤの項目が０ｘ００以外かつ０ｘ０７以外が存在するか否かを判定する。すなわち、制御部２２０は、確定ＨＤＤの項目が０ｘ０１から０ｘ０６までの何れかが存在するか否かを判定する。０ｘ００以外かつ０ｘ０７以外（０ｘ０１から０ｘ０６）が存在する場合、制御部２２０は、ステップＳ６５に進む。０ｘ００以外かつ０ｘ０７以外（０ｘ０１から０ｘ０６）が存在しない場合、制御部２２０は、ステップＳ６６に進む。
【０１０３】
（Ｓ６５）制御部２２０は、復旧処理を実行する。
（Ｓ６６）制御部２２０は、ステップＳ６１で取得したＨＤＤ３００，３１０，３２０のモデル名がキャッシュ容量テーブル２１１に存在するか否かを判定する。ＨＤＤ３００，３１０，３２０のモデル名がキャッシュ容量テーブル２１１に存在する場合、制御部２２０は、ステップＳ６７に進む。ＨＤＤ３００，３１０，３２０のモデル名がキャッシュ容量テーブル２１１に存在しない場合、制御部２２０は、容量オーバー処理を行わない旨の情報を記憶部２１０に登録する。制御部２２０は、電源投入時処理を終了する。
【０１０４】
このように、制御部２２０は、キャッシュ容量テーブル２１１からＨＤＤ３００，３１０，３２０のキャッシュメモリの容量を特定することができる。
（Ｓ６７）制御部２２０は、キャッシュ容量テーブル２１１を参照し、ステップＳ６１で取得したＨＤＤ３００，３１０，３２０のモデル名のキャッシュ容量が同じであるか否かを判定する。キャッシュ容量が同じ場合、制御部２２０は、ステップＳ６８に進む。キャッシュ容量が異なる場合、制御部２２０は、容量オーバー処理を行わない旨の情報を記憶部２１０に登録する。制御部２２０は、電源投入時処理を終了する。
【０１０５】
（Ｓ６８）制御部２２０は、１つのＨＤＤのキャッシュ容量を記憶部２１０に格納する。例えば、制御部２２０は、ＨＤＤ３００のキャッシュ容量である６４ＭＢを記憶部２１０に格納する。
【０１０６】
（Ｓ６９）制御部２２０は、管理テーブル２１２を初期化する。
（Ｓ７０）制御部２２０は、管理テーブル２１２のポインタを０に設定する。
図１９は、第２の実施の形態の復旧処理のフローチャートの一例を示す図である。制御部２２０は、ステップＳ６５の実行を契機に復旧処理を実行する。
【０１０７】
（Ｓ７１）制御部２２０は、管理テーブル２１２を参照し、コマンドコードの項目が“０ｘ３５”の中で確定ＨＤＤの項目が０ｘ００以外かつ０ｘ０７以外のレコードを１つ選択する。
【０１０８】
（Ｓ７２）制御部２２０は、選択したレコードの確定ＨＤＤの項目を参照し、磁気ディスクにデータを書き込み済みのＨＤＤと未書き込みのＨＤＤを特定する。
（Ｓ７３）制御部２２０は、選択したレコードのＬＢＡが示す位置からセクタ数分のデータを書き込み済みのＨＤＤから取得する。このように、制御部２２０は、管理テーブル２１２に登録されているＬＢＡとセクタ数とから、書き込み済みのＨＤＤから取得するデータの位置と大きさを特定することができる。
【０１０９】
（Ｓ７４）制御部２２０は、未書き込みのＨＤＤにＷｒｉｔｅコマンドを発行する。Ｗｒｉｔｅコマンドは、書き込み済みのＨＤＤから取得したデータとＬＢＡを含む。これにより、未書き込みのＨＤＤは、制御部２２０が書き込み済みのＨＤＤから取得したデータをキャッシュメモリに格納できる。
【０１１０】
（Ｓ７５）制御部２２０は、コマンドコードの項目が“０ｘ３５”の中で確定ＨＤＤの項目が０ｘ００以外かつ０ｘ０７以外のレコードを全て選択したか否かを判定する。全て選択した場合、制御部２２０は、ステップＳ７６に進む。全て選択していない場合、制御部２２０は、ステップＳ７１に進む。
【０１１１】
（Ｓ７６）制御部２２０は、未書き込みのＨＤＤにＦＬＵＳＨ  ＣＡＣＨＥコマンドを発行する。これにより、制御部２２０は、未書き込みのＨＤＤのキャッシュメモリに格納されていたデータを磁気ディスクに格納することができる。
【０１１２】
（Ｓ７７）制御部２２０は、ＦＬＵＳＨ  ＣＡＣＨＥコマンドに対する完了応答を受信する。
図１６の管理テーブル２１２ｇを用いて説明する。ＨＤＤ３１０，３２０は、管理テーブル２１２ｇの状態でＨＤＤ３１０，３２０に障害が発生した場合、キャッシュメモリ３１１，３２１に格納されているデータを消失する。第２の実施の形態によれば、ＲＡＩＤコントローラ２００は、管理テーブル２１２ｇに基づいて磁気ディスク３０２に格納されているデータを磁気ディスク３１２，３２２に書き込むことができる。よって、ＲＡＩＤコントローラ２００は、管理テーブル２１２ｇを保持していれば、ＨＤＤ３１０，３２０で消失したデータを復旧することができる。ＲＡＩＤコントローラ２００は、障害発生に備えてキャッシュメモリ３１１，３２１に格納されていたデータと重複するデータをＳＳＤなどで保持するよりも管理テーブル２１２ｇを保持した方が保持するデータ量を抑制できる。
【０１１３】
よって、第２の実施の形態によれば、ＲＡＩＤコントローラ２００は、障害発生に備えて保持するデータ量を抑制できる。
また、制御部２２０は、キャッシュメモリの容量を超えたデータ容量に対応するレコードの確定ＨＤＤの項目に０ｘ０７を登録することで、キャッシュメモリの容量を超えたデータ容量を復旧処理の対象から除外することができる。
【０１１４】
また、第１の実施の形態の情報処理は、情報処理装置１に用いられるプロセッサに、プログラムを実行させることで実現できる。第２の実施の形態の情報処理は、ＣＰＵ２０１にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体に記録できる。
【０１１５】
例えば、プログラムを記録した記録媒体は、プログラムを流通させることで配布することができる。また、制御部２２０に相当する機能を実現するプログラムは、別個のプログラムとして各プログラムを別個に配布することができる。制御部２２０の機能は、別個のコンピュータにより実現されてもよい。コンピュータは、例えば、記録媒体に記録されたプログラムを、ＲＡＭ２０２、フラッシュメモリ２０３に格納し、プログラムを読み込んで実行してもよい。
【符号の説明】
【０１１６】
１  情報処理装置
２  記憶部
２ａ  位置情報
２ｂ  応答情報
３  制御部
４  第１の記憶装置
４ａ，５ａ  キャッシュメモリ
４ｂ，５ｂ  不揮発性記録媒体
５  第２の記憶装置
６ａ，６ｂ，６ｃ，６ｄ，６ｅ  データ
７ａ，８ａ  書込指示
７ｂ，８ｂ  応答
７ｃ，８ｃ  データ移動指示
７ｄ  データ移動応答
７ｅ  読出
７ｆ  書込
【図１】
2018018193.tif 000003
【図２】
2018018193.tif 000004
【図３】
2018018193.tif 000005
【図４】
2018018193.tif 000006
【図５】
2018018193.tif 000007
【図６】
2018018193.tif 000008
【図７】
2018018193.tif 000009
【図８】
2018018193.tif 000010
【図９】
2018018193.tif 000011
【図１０】
2018018193.tif 000012
【図１１】
2018018193.tif 000013
【図１２】
2018018193.tif 000014
【図１３】
2018018193.tif 000015
【図１４】
2018018193.tif 000016
【図１５】
2018018193.tif 000017
【図１６】
2018018193.tif 000018
【図１７】
2018018193.tif 000019
【図１８】
2018018193.tif 000020
【図１９】
2018018193.tif 000021