(57)【特許請求の範囲】
【請求項１】
コンピュータに、
アプリケーションソフトウェアによって取得された第１の記憶領域に格納されたデータの書き込み要求を、前記アプリケーションソフトウェアから受け付け、
前記書き込み要求を受け付けた場合に、前記第１の記憶領域とは異なる第２の記憶領域を取得し、
前記データを、取得した前記第２の記憶領域に複製し、
ミラーリングの対象になる複数の記憶装置のそれぞれに対する複製された前記データの書き込み要求を、前記複数の記憶装置のそれぞれに応じたドライバに送信し、
複製された前記データの書き込み要求を前記ドライバに送信してから前記ドライバによるデータの書き込み処理がリトライオーバーするより前に所定時間が経過した際に、前記複数の記憶装置のうち、少なくとも何れかの記憶装置に対する書き込み成功の応答がある場合には、前記アプリケーションソフトウェアに書き込み成功を応答し、書き込み成功の応答がない記憶装置をミラーリングの対象から除外する、
処理を実行させることを特徴とする制御プログラム。
【請求項２】
前記所定時間は、前記ドライバがデータの書き込み要求を受け付けてから前記記憶装置に対する書き込みに失敗したと判定するまでの時間よりも短い時間に設定される、ことを特徴とする請求項１に記載の制御プログラム。
【請求項３】
コンピュータが、
アプリケーションソフトウェアによって取得された第１の記憶領域に格納されたデータの書き込み要求を、前記アプリケーションソフトウェアから受け付け、
前記書き込み要求を受け付けた場合に、前記第１の記憶領域とは異なる第２の記憶領域を取得し、
前記データを、取得した前記第２の記憶領域に複製し、
ミラーリングの対象になる複数の記憶装置のそれぞれに対する複製された前記データの書き込み要求を、前記複数の記憶装置のそれぞれに応じたドライバに送信し、
複製された前記データの書き込み要求を前記ドライバに送信してから前記ドライバによるデータの書き込み処理がリトライオーバーするより前に所定時間が経過した際に、前記複数の記憶装置のうち、少なくとも何れかの記憶装置に対する書き込み成功の応答がある場合には、前記アプリケーションソフトウェアに書き込み成功を応答し、書き込み成功の応答がない記憶装置をミラーリングの対象から除外する、
処理を実行することを特徴とする制御方法。
【請求項４】
アプリケーションソフトウェアによって取得された第１の記憶領域に格納されたデータの書き込み要求を、前記アプリケーションソフトウェアから受け付け、
前記書き込み要求を受け付けた場合に、前記第１の記憶領域とは異なる第２の記憶領域を取得し、
前記データを、取得した前記第２の記憶領域に複製し、
ミラーリングの対象になる複数の記憶装置のそれぞれに対する複製された前記データの書き込み要求を、前記複数の記憶装置のそれぞれに応じたドライバに送信し、
複製された前記データの書き込み要求を前記ドライバに送信してから前記ドライバによるデータの書き込み処理がリトライオーバーするより前に所定時間が経過した際に、前記複数の記憶装置のうち、少なくとも何れかの記憶装置に対する書き込み成功の応答がある場合には、前記アプリケーションソフトウェアに書き込み成功を応答し、書き込み成功の応答がない記憶装置をミラーリングの対象から除外する、
制御部を有することを特徴とする制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御プログラム、制御方法、および制御装置に関する。
【背景技術】
【０００２】
従来、複数の記憶装置を用いてデータを冗長化して記憶するミラーリングの技術がある。例えば、ミラーリングを制御するソフトウェアは、アプリケーションソフトウェアからデータの書き込み要求を受け付けると、複数の記憶装置のそれぞれに応じたドライバを制御して、当該データを複数の記憶装置のそれぞれに書き込ませる。
【０００３】
関連する技術としては、例えば、サーバと経路を介して接続された入出力装置に対して発行された入出力要求に対する入出力応答を監視し、タイムアウト時間内に該入出力応答がないとタイムアウト処理を行うものがある。また、例えば、発生した障害が自装置内のディスク装置に起因する障害かパスに起因する障害かを切り分けて障害発生部位を特定し、障害の種類および障害発生部位に対応する、リトライ回数およびリトライ時のパスを指示する技術がある。また、例えば、他系の何れかの連続する２つ以上のアドレスの装置で通信のタイムアウトまたはシーケンスエラーまたは障害割込み通知の何れかが発生した際に、他系バス障害と判断する技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−２２３７０２号公報
【特許文献２】特開２０００−１３２４１３号公報
【特許文献３】特開２００１−５６８３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した従来技術では、ミラーリングを制御するソフトウェアが、アプリケーションソフトウェアから受け付けたデータの書き込み要求に対して応答するまでの時間が増大してしまう場合がある。例えば、ミラーリングを制御するソフトウェアは、複数の記憶装置におけるデータの整合性を担保するために、複数の記憶装置のそれぞれに応じたドライバから応答を受け付けるまで、アプリケーションソフトウェアに応答することができない。
【０００６】
１つの側面では、本発明は、データの書き込み要求に対する応答時間の増大を抑制することができる制御プログラム、制御方法、および制御装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、アプリケーションソフトウェアによって取得された第１の記憶領域に格納されたデータの書き込み要求を、前記アプリケーションソフトウェアから受け付け、前記書き込み要求を受け付けた場合に、前記第１の記憶領域とは異なる第２の記憶領域を取得し、前記データを、取得した前記第２の記憶領域に複製し、ミラーリングの対象になる複数の記憶装置のそれぞれに対する複製された前記データの書き込み要求を、前記複数の記憶装置のそれぞれに応じたドライバに送信し、複製された前記データの書き込み要求をドライバに送信してからドライバによるデータの書き込み処理がリトライオーバーするより前に所定時間が経過した際に、前記複数の記憶装置のうち、少なくとも何れかの記憶装置に対する書き込み成功の応答がある場合には、前記アプリケーションソフトウェアに書き込み成功を応答し、書き込み成功の応答がない記憶装置をミラーリングの対象から除外する制御プログラム、制御方法、および制御装置が提案される。
【発明の効果】
【０００８】
本発明の一態様によれば、データの書き込み要求に対する応答時間の増大を抑制することができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施の形態にかかる制御方法の一実施例を示す説明図である。
【図２】図２は、制御装置１００のシステム構成例を示す説明図である。
【図３】図３は、制御装置１００のハードウェア構成例を示すブロック図である。
【図４】図４は、各種テーブルの記憶内容の一例を示す説明図である。
【図５】図５は、制御装置１００の機能的構成例を示すブロック図である。
【図６】図６は、制御装置１００における制御の流れを示す説明図である。
【図７】図７は、制御装置１００における制御の一例を示す説明図である。
【図８】図８は、制御装置１００の各種処理の流れを示すフローチャート（その１）である。
【図９】図９は、制御装置１００の各種処理の流れを示すフローチャート（その２）である。
【図１０】図１０は、制御装置１００の各種処理の流れを示すフローチャート（その３）である。
【図１１】図１１は、制御装置１００の全体処理手順の一例を示すフローチャートである。
【図１２】図１２は、アプリ１０１の書き込み処理手順の一例を示すフローチャートである。
【図１３】図１３は、ミラーソフト１０２の第１の書き込み処理手順の一例を示すフローチャートである。
【図１４】図１４は、ミラーソフト１０２の第２の書き込み処理手順の一例を示すフローチャートである。
【図１５】図１５は、ディスクドライバ１０３の書き込み処理手順の一例を示すフローチャートである。
【図１６】図１６は、ミラーソフト１０２の第２の応答処理手順の一例を示すフローチャート（その１）である。
【図１７】図１７は、ミラーソフト１０２の第２の応答処理手順の一例を示すフローチャート（その２）である。
【図１８】図１８は、ミラーソフト１０２の第１の応答処理手順の一例を示すフローチャートである。
【図１９】図１９は、アプリ１０１の応答処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に、図面を参照して、本発明にかかる制御プログラム、制御方法、および制御装置の実施の形態を詳細に説明する。
【００１１】
（実施の形態にかかる制御方法の一実施例）
図１は、実施の形態にかかる制御方法の一実施例を示す説明図である。図１において、制御装置１００は、アプリケーションソフトウェア１０１、複数の記憶装置を用いてデータを冗長化して記憶するミラーリングを制御するソフトウェア１０２、複数の記憶装置のそれぞれに応じたディスクドライバ１０３を起動するコンピュータである。以下の説明では、アプリケーションソフトウェア１０１を「アプリ１０１」と表記する場合がある。以下の説明では、ミラーリングを制御するソフトウェア１０２を「ミラーソフト１０２」と表記する場合がある。以下の説明では、ディスクドライバ１０３を「ドライバ１０３」と表記する場合がある。
【００１２】
ここで、アプリ１０１、ミラーソフト１０２、ドライバ１０３は、それぞれ、下記のように動作する場合が考えられる。例えば、アプリ１０１は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）からバッファを確保し、バッファに書き込み対象のデータを格納して、バッファの制御権とともにデータの書き込み要求をミラーソフト１０２に送信する。そして、アプリ１０１は、ミラーソフト１０２から書き込みの成功の応答を受け付けるまで、書き込み要求したデータの読み出しなどを含む業務を行わない。
【００１３】
また、ミラーソフト１０２は、データの書き込み要求を受け付けると、制御権を受け付けたバッファを流用して、バッファの制御権とともにデータの書き込み要求を複数の記憶装置のそれぞれに応じたドライバ１０３に送信して、記憶装置にデータを書き込ませる。そして、ミラーソフト１０２は、データの整合性を保つために、複数のドライバ１０３のそれぞれから書き込み成否の応答を受け付けてから、アプリ１０１に書き込みの成否を応答する。また、ミラーソフト１０２は、複数のドライバ１０３のそれぞれから書き込み成否の応答を受け付けるまでは、アプリ１０１に書き込みの成否を応答しない。
【００１４】
また、ドライバ１０３は、データの書き込み要求を受け付けると、データの書き込み要求に応じたタスクをキューに登録して、キューから取り出したタスクにしたがって、制御権を受け付けたバッファに基づいて記憶装置に対するデータの書き込みを試行する。ドライバ１０３は、データの書き込みがタイムアウトした場合には、試行回数が所定回数になるまでは記憶装置に対するデータの書き込みを再試行する。ここで、ドライバ１０３は、データの書き込みが成功した場合には、データの書き込み成功の応答を、ミラーソフト１０２に送信する。一方で、ドライバ１０３は、データの書き込みが所定回数タイムアウトした場合には、記憶装置に対するデータの書き込みを再試行せず、データの書き込み失敗の応答を、ミラーソフト１０２に送信する。
【００１５】
しかしながら、このように動作する場合では、下記のように、第１の要因、第２の要因などによって、アプリ１０１から受け付けたデータの書き込み要求に対するミラーソフト１０２の応答時間が増大してしまう場合がある。これにより、アプリ１０１の業務について停滞を招いてしまい、アプリ１０１の利用者が要求する処理能力を保証することができなくなることがある。
【００１６】
例えば、第１の要因は、複数の記憶装置のうち、何れかの記憶装置に異常があることである。何れかの記憶装置に異常があることは、制御装置１００から何れかの記憶装置までの伝送路に異常があることを含んでよい。第１の要因によれば、ドライバ１０３が、記憶装置に対するデータの書き込みを所定回数試行してからミラーソフト１０２に応答することになるため、ミラーソフト１０２からの書き込み要求に対するドライバ１０３の応答時間が増大してしまう。そして、ミラーソフト１０２が、ドライバ１０３から応答を受け付けるまではアプリ１０１に応答しないため、アプリ１０１からの書き込み要求に対するミラーソフト１０２の応答時間の増大も招いてしまう。
【００１７】
第２の要因は、第１の要因に加えて、アプリ１０１が、連続的にデータの書き込み要求をミラーソフト１０２に送信することである。第２の要因によれば、ドライバ１０３が、キューに蓄積されたタスクのそれぞれについて、記憶装置に対するデータの書き込みを所定回数試行してからミラーソフト１０２に応答することになる。このため、ミラーソフト１０２からの書き込み要求に対するドライバ１０３の応答時間が、さらに増大してしまう。
【００１８】
そこで、本実施の形態では、複数の記憶装置の何れかに異常がある場合であっても、アプリ１０１から受け付けたデータの書き込み要求に対するミラーソフト１０２の応答時間の増大を抑制することができる制御方法について説明する。かかる制御方法によれば、アプリ１０１およびドライバ１０３の動作を変更しなくても、ミラーソフト１０２の応答時間の増大を抑制することができる。
【００１９】
図１において、制御装置１００は、ミラーリングの対象になる複数の記憶装置（ディスク）と接続されている。ディスクは、例えば、磁気ディスクや光ディスク、ディスクアレイ、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、オールフラッシュのディスクアレイなどである。制御装置１００において、アプリ１０１が起動されている。また、制御装置１００において、ミラーソフト１０２が起動されている。また、制御装置１００において、複数のディスクのそれぞれに応じたドライバ１０３が起動されている。ドライバ１０３は、例えば、ディスクドライバ１０３である。
【００２０】
図１の例では、アプリ１０１は、第１の記憶領域ｍ１を確保し、第１の記憶領域ｍ１に格納したデータの書き込み要求をミラーソフト１０２に送信する。第１の記憶領域ｍ１は、書き込み対象のデータを格納する領域を有する。データの書き込み要求は、例えば、第１の記憶領域ｍ１の制御権とともに送信される。
【００２１】
アプリ１０１は、例えば、第１の記憶領域ｍ１をＯＳから確保して、書き込み対象のデータを第１の記憶領域ｍ１に格納する。より具体的には、書き込み対象のデータは、第１の記憶領域ｍ１が有する書き込み対象のデータを格納する領域に格納される。そして、アプリ１０１は、第１の記憶領域ｍ１の制御権とともに、第１の記憶領域ｍ１に格納されたデータの書き込み要求を、ミラーソフト１０２に送信する。ここで、第１の記憶領域ｍ１が不使用になった場合には、第１の記憶領域ｍ１を確保したアプリ１０１が、第１の記憶領域ｍ１を解放するという規則がある。
【００２２】
（１−１）ミラーソフト１０２は、第１の記憶領域ｍ１に格納されたデータの書き込み要求を、アプリ１０１から受け付ける。ミラーソフト１０２は、例えば、第１の記憶領域ｍ１の制御権とともに、第１の記憶領域ｍ１に格納されたデータの書き込み要求を、アプリ１０１から受け付ける。
【００２３】
（１−２）ミラーソフト１０２は、書き込み要求を受け付けた場合に、第１の記憶領域ｍ１とは異なる第２の記憶領域ｍ２を取得して確保する。第２の記憶領域ｍ２は、書き込み対象のデータを格納する領域を有する。ミラーソフト１０２は、例えば、第１の記憶領域ｍ１とは異なる第２の記憶領域ｍ２をＯＳに要求して、ＯＳから割り当てられた第２の記憶領域ｍ２を確保する。
【００２４】
（１−３）ミラーソフト１０２は、第１の記憶領域ｍ１に格納されたデータを、確保した第２の記憶領域ｍ２に複製する。以下の説明では、第２の記憶領域ｍ２に複製されたデータを「複製データ」と表記する場合がある。
【００２５】
（１−４）ミラーソフト１０２は、ミラーリングの対象になるディスクｄ１，ｄ２のそれぞれに対する複製データの書き込み要求を、ディスクｄ１，ｄ２のそれぞれに応じたドライバ１０３に送信する。ミラーソフト１０２は、例えば、第２の記憶領域ｍ２が有する複製データを格納する領域の制御権とともに、複数のディスクのそれぞれに対する複製データの書き込み要求を、複数のディスクのそれぞれに応じたドライバ１０３に送信する。
【００２６】
これにより、ミラーソフト１０２は、第１の記憶領域ｍ１を流用せずに、データの書き込み要求を、複数のドライバ１０３のそれぞれに送信することができる。そして、ミラーソフト１０２は、第１の記憶領域ｍ１の制御権をアプリ１０１に返却しても、ドライバ１０３による動作を続行可能にすることができる。
【００２７】
複数のドライバ１０３のそれぞれは、例えば、当該ドライバ１０３に応じたディスクに対する、第２の記憶領域ｍ２に格納された複製データの書き込み要求を、ミラーソフト１０２から受け付け、当該ディスクに対する複製データの書き込みを試行する。複数のドライバ１０３のそれぞれは、例えば、第２の記憶領域ｍ２が有する複製データを格納する領域の制御権とともに、当該ドライバ１０３に応じたディスクに対する複製データの書き込み要求を、ミラーソフト１０２から受け付け、当該ディスクに対する複製データの書き込みを試行する。そして、複数のドライバ１０３のそれぞれは、複製データの書き込みの成否をミラーソフト１０２に応答する。
【００２８】
（１−５）ミラーソフト１０２は、複製データの書き込み要求をドライバ１０３に送信してからの経過時間を監視して、複製データの書き込み要求をドライバ１０３に送信してからドライバ１０３によるデータの書き込み処理がリトライオーバーするより前に所定時間が経過したことを検出する。ミラーソフト１０２は、例えば、複製データの書き込み要求をドライバ１０３に送信した際に監視タイマーを起動し、複製データの書き込み要求をドライバ１０３に送信してからドライバ１０３によるデータの書き込み処理がリトライオーバーするより前に所定時間が経過したことを検出する。
【００２９】
所定時間は、例えば、ドライバ１０３がデータの書き込み要求を受け付けてから当該データの書き込みがリトライオーバーするまでにかかる時間より短い時間が設定される。所定時間は、さらに、ドライバ１０３がデータの書き込み要求を受け付けてから１回目のデータの書き込みを試行するまでにかかる時間より長い時間が設定されてもよい。
【００３０】
これにより、ミラーソフト１０２は、まだドライバ１０３から書き込みの成否の応答がなくても、所定時間が経過したときに書き込みの成否の応答がないディスクを異常がある可能性があるディスクであると判定することができる。また、ミラーソフト１０２は、ドライバ１０３から書き込み成功の応答があるディスクであっても、ドライバ１０３がデータの書き込みを複数回試行した不安定なディスクであり、間欠故障の可能性があるディスクであると判定することができる。
【００３１】
（１−６）ミラーソフト１０２は、所定時間が経過した際に、複数のディスクｄ１，ｄ２のうち少なくとも何れかのディスクｄ１に対する書き込み成功の応答がある場合には、書き込みの応答がないディスクｄ２をミラーリングの対象から切り離して除外する。ミラーソフト１０２は、例えば、所定時間が経過したことを検出した際に、複数のディスクのうち、少なくとも何れかのディスクに対する書き込み成功の応答がある場合には、書き込みの応答がないディスクをミラーリングの対象から除外する。書き込みの応答がないディスクは、上述したように故障の可能性があるディスクである。
【００３２】
これにより、ミラーソフト１０２は、データの整合性を保つために、故障の可能性があるディスクを、ミラーリングの対象から除外することができる。また、ミラーソフト１０２は、必ずデータの書き込みが失敗する状態でなくても、不安定になったディスクであり、間欠故障の可能性があるディスクを、ミラーリングの対象から除外することができる。このため、ミラーソフト１０２は、不安定なディスクを使い続けてデータの損失などが発生することを防止して、データの整合性を保証しやすくすることができる。
【００３３】
（１−７）ミラーソフト１０２は、所定時間が経過した際に、複数のディスクｄ１，ｄ２のうち、少なくとも何れかのディスクｄ１に対する書き込み成功の応答がある場合には、アプリ１０１に書き込み成功を応答する。ミラーソフト１０２は、例えば、所定時間が経過したことを検出した際に、複数のディスクのうち、少なくとも何れかのディスクに対する書き込み成功の応答がある場合には、アプリ１０１に書き込み成功を応答する。
【００３４】
これによれば、ミラーソフト１０２は、ドライバ１０３に第１の記憶領域ｍ１を使用させずにディスクｄ１，ｄ２に対する書き込みを試行させ、ドライバ１０３がディスクｄ１，ｄ２に対する書き込みを試行中であってもアプリ１０１に応答可能になる。また、ミラーソフト１０２は、所定時間が経過したことを検出した際に、まだ書き込み成功の応答がなく、故障の可能性があるディスクを、ミラーリングの対象から除外することができる。
【００３５】
これにより、ミラーソフト１０２は、複数のドライバ１０３のそれぞれからの応答を待たなくても、アプリ１０１に応答することができ、応答時間の増大を抑制することができ、応答遅延を防止することができる。換言すれば、ミラーソフト１０２は、ディスクに異常がある場合であっても、応答時間の増大を抑制することができる。また、ミラーソフト１０２は、連続的なデータの書き込み要求を受け付けた場合であっても、応答時間の増大を抑制することができる。また、ミラーソフト１０２は、アプリ１０１からデータの読み出し要求などを受け付けた場合に、ディスクｄ１，ｄ２のうち、故障の可能性があるディスクからデータの読み出しなどを行ってしまうことを防止することができる。
【００３６】
アプリ１０１は、ドライバ１０３がデータの書き込みを試行中であっても、書き込み成功の応答を受け付けて第１の記憶領域ｍ１を解放可能になり、データの読み出しなどを含む業務を再開することができる。そして、アプリ１０１は、アプリ１０１の利用者が要求する処理能力を保証しやすくなる。
【００３７】
また、ミラーソフト１０２は、複数のドライバ１０３のそれぞれからの応答があった場合に、第２の記憶領域ｍ２を解放してもよい。これにより、ミラーソフト１０２は、ミラーリングの対象からディスクｄ１，ｄ２の何れかを除外したり、アプリ１０１に応答した後であっても、第２の記憶領域ｍ２を確保したままにせず解放することができ、ＯＳに返却することができる。
【００３８】
ここでは、制御装置１００が、ディスクｄ１，ｄ２のそれぞれに応じた独立したドライバ１０３を有する場合について説明したが、これに限らない。例えば、制御装置１００が有する１つのドライバ１０３が、複数のディスクｄ１，ｄ２のそれぞれに対するデータの書き込みを制御する共通したドライバ１０３であってもよい。
【００３９】
ここでは、説明の簡略化のため、詳細な説明を省略したが、第１の記憶領域ｍ１は、さらに、書き込み対象のデータについての管理情報を格納する領域を有する。同様に、第２の記憶領域ｍ２は、さらに、書き込み対象のデータについての管理情報を格納する領域を有する。
【００４０】
（制御装置１００のシステム構成例）
次に、図２を用いて、制御装置１００のシステム構成例について説明する。
【００４１】
図２は、制御装置１００のシステム構成例を示す説明図である。図２において、制御装置１００と、ディスク装置２０２とは、伝送路２０１によって接続される。伝送路２０１は、例えば、ＦＣ（Ｆｉｂｅｒ  Ｃｈａｎｎｅｌ）、ＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）などである。
【００４２】
制御装置１００は、ＯＳを有する。ＯＳは、ハードウェア資源などをソフトウェアに割り当てる。ＯＳは、例えば、図３に後述するメモリ３０２に設けられたバッファの空きプールを管理し、ソフトウェアの要求に応じて空きプールから当該ソフトウェアにバッファを割り当てる。制御装置１００は、階層構造になったソフトウェアを有する。制御装置１００は、例えば、上位から順に、アプリ１０１、ミラーソフト１０２、ディスクドライバ１０３を有する。アプリ１０１、ミラーソフト１０２、ディスクドライバ１０３の動作については、図６および図７に後述する。ディスク装置２０２は、ミラーリングの対象になる複数のディスクを有する。図２の例では、ディスク装置２０２は、ディスクｄ１およびディスクｄ２を有する。
【００４３】
（制御装置１００のハードウェア構成例）
次に、図３を用いて、制御装置１００のハードウェア構成例について説明する。
【００４４】
図３は、制御装置１００のハードウェア構成例を示すブロック図である。図３において、制御装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３０１と、メモリ３０２と、ディスクＩ／Ｆ３０３とを有する。また、各構成部は、バス３００によってそれぞれ接続される。
【００４５】
ここで、ＣＰＵ３０１は、制御装置１００の全体の制御を司る。メモリ３０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）およびフラッシュＲＯＭなどを有する。具体的には、例えば、フラッシュＲＯＭやＲＯＭが各種プログラムを記憶し、ＲＡＭがＣＰＵ３０１のワークエリアとして使用される。メモリ３０２に記憶されるプログラムは、ＣＰＵ３０１にロードされることで、コーディングされている処理をＣＰＵ３０１に実行させる。
【００４６】
ディスクＩ／Ｆ３０３は、ディスク装置２０２に接続され、ディスク装置２０２と内部のインターフェースを司り、ディスク装置２０２と内部に対するデータの入出力を制御する。ディスクＩ／Ｆ３０３は、例えば、上述した伝送路２０１となる。
【００４７】
制御装置１００は、上述した構成部のほか、例えば、ＳＳＤ、半導体メモリ、キーボード、マウス、ディスプレイなどを有することにしてもよい。また、制御装置１００は、ＳＳＤおよび半導体メモリなどを有していてもよい。制御装置１００は、例えば、サーバ、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）などによって実現される。
【００４８】
（各種テーブルの記憶内容）
次に、図４を用いて、ミラー状態管理テーブル４００、発行Ｉ／Ｏのキュー管理テーブル４１０と、発行Ｉ／Ｏ管理テーブル４２０などを含む各種テーブルの記憶内容の一例について説明する。各種テーブルは、例えば、図３に示したメモリ３０２、ディスク装置２０２などの記憶領域によって実現される。また、各種テーブルは、例えば、ミラーソフト１０２によって作成される。具体的には、例えば、ミラー状態管理テーブル４００と発行Ｉ／Ｏのキュー管理テーブル４１０とは、ミラーリングの対象となるディスク群ごとにセットで作成される。
【００４９】
図４は、各種テーブルの記憶内容の一例を示す説明図である。図４に示すように、ミラー状態管理テーブル４００は、ミラーに含まれる各ディスクの状態のフィールドを有する。ミラー状態管理テーブル４００は、ミラーを設定する毎に、ミラー状態管理情報がレコード４００−１などとして記憶される。
【００５０】
ミラーに含まれるディスクの状態とは、ミラー管理されたディスクが正常であるか異常であるかを示すフラグである。ミラーに含まれるディスクの状態は、ミラー管理されたディスクが正常であれば「０」である。ミラーに含まれるディスクの状態は、ミラー管理されたディスクが異常であれば「１」である。ミラー状態管理テーブル４００は、第２制御機能からの応答（通知）により、どちらかの書き込みに異常があれば、ミラー状態管理テーブル４００のミラーに含まれるディスクの状態を「１」に変更することで、異常側のディスクを除外（閉塞）する。
【００５１】
例えば、ミラーに含まれるディスクの状態が「０，０」であれば、ミラーリングが正常であることを示す。また、例えば、ミラーに含まれるディスクの状態が「０，１」であれば、ミラー元のディスクが正常であり、ミラー先のディスクが異常であることを示す。また、例えば、ミラーに含まれるディスクの状態が「１，０」であれば、ミラー元のディスクが異常であり、ミラー先のディスクが正常であることを示す。
【００５２】
また、図４に示すように、発行Ｉ／Ｏのキュー管理テーブル４１０は、Ｉ／Ｏ発行中と、Ｉ／Ｏ完了待ちとのフィールドを有する。発行Ｉ／Ｏのキュー管理テーブル４１０は、ミラーを設定する毎に、発行Ｉ／Ｏのキュー管理情報がレコード４１０−１などとして記憶される。
【００５３】
発行Ｉ／Ｏのキュー管理テーブル４１０は、アプリ１０１からの書き込み要求に応じてミラーソフト１０２から複数のディスクドライバ１０３のそれぞれに送信される書き込み要求（発行Ｉ／Ｏ）群を管理するテーブルである。Ｉ／Ｏ発行中とは、書き込み要求（発行Ｉ／Ｏ）群を管理する発行Ｉ／Ｏ管理テーブル４２０を指し示すアドレスである。Ｉ／Ｏ発行中は、例えば、複数のディスクドライバ１０３に書き込み要求を行い、どちらのディスクドライバ１０３に対しても応答待ち、かつ、所定時間が経過していない状態に対応する発行Ｉ／Ｏ管理テーブル４２０を指し示すアドレスである。また、どちらか一方のディスクドライバ１０３からの書き込み正常応答があり、所定時間が経過していないもう片方のディスクドライバ１０３からの応答を待ち続ける状態を含んでもよい。
【００５４】
Ｉ／Ｏ完了待ちとは、書き込み要求（発行Ｉ／Ｏ）群を管理する発行Ｉ／Ｏ管理テーブル４２０を指し示すアドレスである。Ｉ／Ｏ完了待ちは、例えば、どちらか一方のディスクドライバ１０３からの書き込み正常応答があり、所定時間が経過した後のもう片方のディスクドライバ１０３からの応答を待ち続ける状態に対応する発行Ｉ／Ｏ管理テーブル４２０を指し示すアドレスである。この時、ミラー状態管理テーブル４００のミラーに含まれるディスクの状態に関して、応答を待ち続けるディスクは、異常の状態となる。
【００５５】
また、図４に示すように、発行Ｉ／Ｏ管理テーブル４２０は、発行Ｉ／Ｏのキュー管理テーブル４１０のアドレス先に格納された管理テーブルであり、各ディスクドライバ１０３への書き込み要求（発行Ｉ／Ｏ）に対応したレコード４２０−１、４２０−２、４２０−３として格納されている。そして発行Ｉ／Ｏのキュー管理テーブル４１０のアドレスを参照することでその書き込み要求（発行Ｉ／Ｏ）に対応したレコード４２０−１、４２０−２、４２０−３が取得できる。各レコード４２０−１、４２０−２、４２０−３は、書き込み要求（発行Ｉ／Ｏ）ごとの書き込みと応答に必要なフィールドを有する。発行Ｉ／Ｏ管理テーブル４２０は、例えば、書き込み要求（発行Ｉ／Ｏ）ごとに、各バッファのアドレスと、バッファｂ２およびバッファｂ２’に対して、Ｉ／Ｏ発行有無と、Ｉ／Ｏ応答状態とのフィールドをそれぞれ有する。さらに、書き込み要求（発行Ｉ／Ｏ）がＩ／Ｏ発行中からＩ／Ｏ完了待ちに変わると、それに応じて発行Ｉ／Ｏのキュー管理テーブル４１０のＩ／Ｏ発行中に対応した発行Ｉ／Ｏ管理テーブル４２０からＩ／Ｏ完了待ちに対応した発行Ｉ／Ｏ管理テーブル４２０に移し変える。（例えば、破線で表現したように発行Ｉ／Ｏ管理テーブルのレコード４２０−３は、フィールドの情報を更新し、レコード４２１−１に移し変えられる。）
【００５６】
バッファｂ２Ｉ／Ｏ発行有無とは、ディスクドライバ１０３に対する書き込み要求の有無を示すフラグである。バッファｂ２Ｉ／Ｏ発行の有無は、例えば、未発行であれば「０」であり、発行済であれば「１」である。バッファｂ２’Ｉ／Ｏ発行有無は、バッファｂ２Ｉ／Ｏ発行有無と同様である。
【００５７】
バッファｂ１とは、アプリ１０１が、ディスク装置２０２に対してデータを書き込むために、ＯＳから確保したバッファｂ１であり、管理域ｍａ１とデータ域ｄａ１を有したバッファｂ１のアドレスである。バッファｂ１は、例えば、図１に示した第１の記憶領域ｍ１に対応する。
【００５８】
バッファｂ２とは、ミラーソフト１０２が、書き込み要求を受け付けた後、アプリ１０１への応答と、ディスクドライバ１０３からの応答待ちとを、別々に扱うことができるように、第２の制御機能により確保したバッファｂ２であり、バッファｂ１とは異なる、管理域ｍａ２とデータ域ｄａ２を有したバッファｂ２のアドレスである。バッファｂ２は、例えば、図１に示した第２の記憶領域ｍ２に該当し、ミラーリングの書き込み対象となる一方のディスクに対応するバッファである。
【００５９】
バッファｂ２’は、バッファｂ２と同様であるが、バッファｂ２のデータ域ｄａ２を利用可能であるため、データ域を有さなくても良い。バッファｂ２’は、例えば、図１に示した第２の記憶領域ｍ２に該当し、ミラーリングの書き込み対象となる他方のディスクに対応するバッファである。なお、ミラーソフト１０２は、アプリ１０１から受け付けたバッファｂ１に格納された書き込み対象のデータをバッファｂ２のデータ域ｄａ２に複製し、管理情報をバッファｂ２の管理域ｍａ２に設定する。また、ミラーソフト１０２は、バッファｂ２に格納した管理情報を、バッファｂ２’の管理域ｍａ２’に複製する。
【００６０】
バッファｂ２Ｉ／Ｏ応答状態とは、ディスクドライバ１０３から応答があったか否かを示すフラグである。バッファｂ２Ｉ／Ｏ応答状態とは、例えば、Ｉ／Ｏ応答待ちであれば「０」であり、Ｉ／Ｏ応答ありであれば「１」である。バッファｂ２’Ｉ／Ｏ応答状態は、バッファｂ２Ｉ／Ｏ応答状態と同様である。
【００６１】
（制御装置１００の機能的構成例）
次に、図５を用いて、制御装置１００の機能的構成例について説明する。
【００６２】
図５は、制御装置１００の機能的構成例を示すブロック図である。制御装置１００は、第１の制御機能と、第２の制御機能とを有する。制御装置１００は、第１の制御機能となる、第１の受付部５１１と、第１の管理部５１２と、第１の応答部５１３を含む。制御装置１００は、第２の制御機能となる、第２の受付部５２１と、複製部５２２と、要求部５２３と、第２の管理部５２４と、第２の応答部５２５と、解放部５２６を含む。
【００６３】
例えば、第１の制御機能では、第１の受付部５１１はアプリからの書き込み要求を受け付ける受付部、第１の管理部５１２はミラー状態管理テーブル４００に基づいてミラー状態を確認し書き込み要求を発行するディスクを決定するミラー管理部、書き込み要求とバッファの制御権を第２の受付部５２１に送信するミラー管理部、第２の応答部５２５からの応答を受けそれぞれの状態に合わせてアプリ１０１への応答と異常側のミラーリングを除外（閉塞）するミラー管理部、第１の応答部５１３は第２の応答部５２５からの応答と第１の管理部５１２からの指示によりアプリ１０１への応答を行う応答部、また第２の応答部５２５からの応答を受け、異常のディスクを除外するとともにアプリ１０１への応答を行うミラー切離部を含んで良い。さらに第２の制御機能では、第２の受付部５２１は第１の管理部５１２からの書き込み要求を受け付ける受付部、複製部５２２は複製バッファを獲得し書き込み要求の対象となるデータを複製する複製部、要求部５２３は監視タイマーを起動し複製データの書き込み要求をドライバ１０３へ行う書込要求部、第２の管理部５２４は監視タイマーおよびドライバ１０３からの応答を監視し第１の応答部５１３へ書き込み要求に対する応答を返す管理部、また第１の応答部５１３へ書き込み要求に対する応答を返す第２の応答部５２５を含んで良い、また第２の管理部５２４からの指示でバッファを解放するバッファ解放部５２６を含んで良い。
【００６４】
第１の受付部５１１〜解放部５２６は、制御部となる機能であり、具体的には、例えば、図３に示したメモリ３０２、ディスク装置２０２などの記憶装置に記憶されたプログラムをＣＰＵ３０１に実行させることにより、または、ディスクＩ／Ｆ３０３により、その機能を実現する。各機能部の処理結果は、例えば、図３に示したメモリ３０２、ディスク装置２０２などの記憶装置に記憶される。
【００６５】
第１の受付部５１１は、アプリ１０１によって取得された第１の記憶領域ｍ１に格納されたデータの書き込み要求を、アプリ１０１から受け付ける。第１の記憶領域ｍ１とは、アプリ１０１からＯＳに要求され、ＯＳからアプリ１０１に割り当てられた記憶領域である。第１の記憶領域ｍ１は、例えば、書き込み対象のデータが格納される記憶領域と、管理情報が格納される記憶領域とを含む。第１の記憶領域ｍ１は、例えば、バッファｂ１に対応する。第１の受付部５１１は、例えば、バッファｂ１の制御権とともに、バッファｂ１に格納されたデータの書き込み要求を、アプリ１０１から受け付ける。
【００６６】
第１の管理部５１２は、ミラー状態管理テーブル４００に基づいてミラーリングの状態を確認し、書き込み要求を発行するディスクを決定し、書き込み要求を第２の受付部５２１に送信する。第１の管理部５１２は、例えば、ミラーリングの対象になる両方のディスクとも正常で、ミラーリングが解除されていなければ、第２の受付部５２１に対してバッファｂ１の制御権を送信し、両方のディスクに書き込むように、書き込み要求を送信する。一方で、第１の管理部５１２は、例えば、一方のディスクが異常で、ミラーリングが解除されていれば、第２の受付部５２１に対して、バッファｂ１の制御権を送信し、正常な他方のディスクに書き込むように、書き込み要求を送信する。上述した第１の管理部５１２の機能は、第１の受付部５１１が含んでもよい。
【００６７】
第２の受付部５２１は、第１の受付部５１１がアプリ１０１から受け付けたバッファｂ１の制御権とともに、バッファｂ１に格納されたデータの書き込み要求を、第１の管理部５１２から受け付ける。
【００６８】
第２の受付部５２１は、書き込み要求を受け付けると、発行Ｉ／Ｏ管理テーブル４２０を更新する。第２の受付部５２１は、例えば、両方のディスクとも正常で、ミラーリングが解除されておらず、両方のディスクに書き込むように書き込み要求を受信した場合、バッファｂ２Ｉ／Ｏ発行有無に「１」、バッファｂ２’Ｉ／Ｏ発行有無に「１」を設定する。第２の受付部５２１は、一方のディスクが異常で、ミラーリングが解除されており、正常な他方のディスクに書き込むように書き込み要求を受信した場合、バッファｂ２Ｉ／Ｏ発行有無に「１」、バッファｂ２’Ｉ／Ｏ発行有無に「０」を設定する。
【００６９】
複製部５２２は、第２の受付部５２１が書き込み要求を受け付けた場合に、第１の記憶領域ｍ１とは異なる第２の記憶領域ｍ２を取得して確保する。第２の記憶領域ｍ２とは、ＯＳから割り当てられる記憶領域である。第２の記憶領域ｍ２は、例えば、書き込み対象のデータが格納される記憶領域と、複数のディスクドライバ１０３のそれぞれが用いる管理情報が格納される記憶領域とを含む。第２の記憶領域ｍ２は、例えば、バッファｂ２とバッファｂ２’との組み合わせに対応する。そして、複製部５２２は、データを、取得した第２の記憶領域ｍ２に複製する。
【００７０】
複製部５２２は、例えば、複数のディスクドライバ１０３の何れかが用いるバッファｂ２、および、残余のディスクドライバ１０３のそれぞれが用いるバッファｂ２’をＯＳに要求する。残余のディスクドライバ１０３が複数ある場合、バッファｂ２’は残余のディスクドライバ１０３のそれぞれに合わせて複数あってよい。複製部５２２は、ＯＳから割り当てられた、何れかのディスクドライバ１０３が用いるバッファｂ２、および、残余のディスクドライバ１０３のそれぞれが用いるバッファｂ２’を確保する。そして、複製部５２２は、バッファｂ１に格納された書き込み対象のデータを、確保したバッファｂ２に複製し、管理情報を設定する。また、複製部５２２は、バッファｂ２に格納された管理情報を、確保した残余のディスクドライバ１０３のそれぞれが用いるバッファｂ２’に複製する。
【００７１】
複製部５２２は、具体的には、発行Ｉ／Ｏ管理テーブル４２０のバッファｂ２Ｉ／Ｏ発行有無に「１」、バッファｂ２’Ｉ／Ｏ発行有無に「１」が設定されていれば、一方のディスクに対応するディスクドライバ１０３が用いるバッファｂ２、および、他方のディスクに対応するディスクドライバ１０３が用いるバッファｂ２’をＯＳに要求する。そして、複製部５２２は、バッファｂ１に格納された書き込み対象のデータを、確保したバッファｂ２に複製し、管理情報を設定するとともに、バッファｂ２に格納された管理情報を、確保したバッファｂ２’に複製する。
【００７２】
また、複製部５２２は、具体的には、発行Ｉ／Ｏ管理テーブル４２０のバッファｂ２Ｉ／Ｏ発行有無に「１」、バッファｂ２’Ｉ／Ｏ発行有無に「０」が設定されていれば、正常な一方のディスクに対応するディスクドライバ１０３が用いるバッファｂ２をＯＳに要求し、異常な他方のディスクに対応するディスクドライバ１０３が用いるバッファｂ２’について要求しない。そして、複製部５２２は、バッファｂ１に格納された書き込み対象のデータを、確保したバッファｂ２に複製し、管理情報を設定する。
【００７３】
要求部５２３は、複数のディスクのそれぞれに対する複製データの書き込み要求を、複数のディスクのそれぞれに応じたドライバ１０３に送信する。複数のディスクは、例えば、ミラーリングの対象になり、データを冗長化して記憶することに用いられる、図１に示したディスクｄ１，ｄ２である。ドライバ１０３は、ディスクへのデータの書き込みを制御するソフトウェアである。ドライバ１０３は、例えば、ディスクドライバ１０３である。
【００７４】
要求部５２３は、例えば、バッファｂ２の制御権とともに、バッファｂ２に複製された書き込み対象のデータの書き込み要求を、何れかのディスクドライバ１０３に送信する。また、要求部５２３は、例えば、残余のディスクドライバ１０３のそれぞれについて確保されたバッファｂ２’の制御権とともに、バッファｂ２に複製された書き込み対象のデータの書き込み要求を、残余のディスクドライバ１０３のそれぞれに送信する。
【００７５】
要求部５２３は、具体的には、発行Ｉ／Ｏ管理テーブル４２０のバッファｂ２Ｉ／Ｏ発行有無に「１」、バッファｂ２’Ｉ／Ｏ発行有無に「１」が設定されていれば、確保されたバッファｂ２の制御権とともに、バッファｂ２に複製された書き込み対象のデータの書き込み要求を、一方のディスクに対応するディスクドライバ１０３に送信する。また、要求部５２３は、確保されたバッファｂ２’の制御権とともに、バッファｂ２に複製された書き込み対象のデータの書き込み要求を、他方のディスクに対応するディスクドライバ１０３に送信する。
【００７６】
また、要求部５２３は、具体的には、発行Ｉ／Ｏ管理テーブル４２０のバッファｂ２Ｉ／Ｏ発行有無に「１」、バッファｂ２’Ｉ／Ｏ発行有無に「０」が設定されていれば、確保されたバッファｂ２の制御権とともに、バッファｂ２に複製された書き込み対象のデータの書き込み要求を、正常な一方のディスクに対応するディスクドライバ１０３に送信する。
【００７７】
また、要求部５２３は、書き込み要求をディスクドライバ１０３に送信すると、書き込み要求を送信してから経過した時間の計測を開始する。要求部５２３は、例えば、監視タイマーｔ１を起動する。
【００７８】
第２の管理部５２４は、例えば、両方のディスクへの書き込みが指示された場合に、両方のディスクドライバ１０３からの応答を待ち受け、監視タイマーｔ１のタイムアウトを監視する。第２の管理部５２４は、監視タイマーｔ１のタイムアウトまでに、両方のディスクドライバ１０３から書き込み成功の応答があれば、書き込みが正常であるとして、第１の応答部５１３に対して正常の応答を行い、バッファｂ１の制御権を返却する。
【００７９】
一方で、第２の管理部５２４は、例えば、両方のディスクへの書き込みが指示された場合に、両方のディスクドライバ１０３からの応答を待ち受け、監視タイマーｔ１のタイムアウトを監視する。第２の管理部５２４は、監視タイマーｔ１のタイムアウトまでに、一方のディスクドライバ１０３からしか書き込み成功の応答がなければ、他方の書き込みが異常であるとして、第１の応答部５１３に対して一方が正常であり他方が異常であるとの応答を行い、バッファｂ１の制御権を返却する。
【００８０】
また、第２の管理部５２４は、例えば、一方のディスクのみへの書き込みが指示された場合に、一方のディスクドライバ１０３からの応答を待ち受け、監視タイマーｔ１のタイムアウトを監視する。第２の管理部５２４は、監視タイマーｔ１のタイムアウトまでに、一方のディスクドライバ１０３から書き込み成功の応答があれば、書き込みが正常であるとして、第１の応答部５１３に対して正常の応答を行い、バッファｂ１の制御権を返却する。
【００８１】
以下では、両方のディスクへの書き込みが指示されたが、一方のディスクドライバ１０３からしか書き込み成功の応答がなく、他方の書き込みが異常である場合について詳細に説明する。ここで、第２の管理部５２４は、例えば、書き込み要求をディスクドライバ１０３に送信してからの経過時間を監視し、書き込み要求をディスクドライバ１０３に送信してから所定時間が経過したことを検出する監視部、またディスクドライバ１０３から書き込み成功の応答を待ち続けるディスクドライバ応答待ち部を含んでよい。なお、第２の管理部５２４は、第２の応答部５２５や解放部５２６の機能を含んでもよい。なお、第２の管理部５２４は、第２の管理部５２４からの指示でバッファを解放するバッファ解放部５２６を含んでもよい。
【００８２】
第２の管理部５２４は、複数のディスクドライバ１０３のそれぞれからの応答を待ち続ける。第２の管理部５２４は、何れかのディスクドライバ１０３から応答を受け付けると、発行Ｉ／Ｏ管理テーブル４２０のバッファｂ２Ｉ／Ｏ応答状態とバッファｂ２’Ｉ／Ｏ応答状態とのうち、応答を受け付けたディスクドライバ１０３に対応するＩ／Ｏ応答状態を「０」から「１」に更新する。
【００８３】
第２の管理部５２４は、複製データの書き込み要求をディスクドライバ１０３に送信してから所定時間が経過した際に、少なくとも何れかのディスクに対する書き込み成功の応答がある場合には、書き込みの応答がないディスクを記録する。ここで、所定時間は、例えば、ディスクドライバ１０３がデータの書き込み要求を受け付けてからディスクに対する書き込みがリトライオーバーするまでの時間よりも短い時間に設定される。
【００８４】
第２の管理部５２４は、書き込み要求をディスクドライバ１０３に送信してからの経過時間を監視し、書き込み要求をディスクドライバ１０３に送信してから所定時間が経過したことを検出する。例えば、書き込み要求がディスクドライバ１０３に送信された後、所定時間の監視と複数のディスクドライバ１０３のそれぞれからの応答の状態に基づいて、発行Ｉ／Ｏのキュー管理テーブル４１０に記録する。その際に、第２の管理部５２４は発行Ｉ／Ｏ管理テーブル４２０を参照し、応答状態の情報に基づいて各ディスクの応答あり・なしを判定し、その判定に応じた応答がないディスクを特定する。さらに、第２の管理部５２４は第１の応答部５１３に対して異常の応答を行う。この異常の応答により、第１の管理部５１２は異常の応答があったディスクに対応するミラー状態管理テーブル４００を更新し、第１の管理部５１２は異常の応答があったディスクをミラーリングの対象から除外する。
【００８５】
第２の応答部５２５は、要求部５２３が複製データの書き込み要求をディスクドライバ１０３に送信してから所定時間が経過する前に、複数のディスクのそれぞれに対する書き込み成功の応答がある場合には、第１の応答部５１３に書き込み成功を応答する。第２の応答部５２５は、例えば、所定時間が経過したことを検出する前であっても、複数のディスクのそれぞれに対する書き込み成功の応答がある場合には、第１の応答部５１３に書き込み成功を応答する。また、第２の応答部５２５は、バッファｂ１の制御権を、第１の応答部５１３に返却する。
【００８６】
第２の応答部５２５は、要求部５２３が複製データの書き込み要求をディスクドライバ１０３に送信してから所定時間が経過した際に、複数のディスクのうち、少なくとも何れかのディスクに対する書き込み成功の応答がある場合には、他方のディスクに対する書き込みが異常であるとして、第１の応答部５１３に対して何れかのディスクに対する書き込みが正常であり、他方のディスクに対する書き込みが異常であるとの応答をする。第２の応答部５２５は、例えば、所定時間が経過したことを検出した際に、複数のディスクのうち、少なくとも何れかのディスクに対する書き込み成功の応答がある場合には、他方のディスクに対する書き込みが異常であるとして、第１の応答部５１３に対して何れかのディスクに対する書き込みが正常であり、他方のディスクに対する書き込みが異常であるとの応答をする。また、第２の応答部５２５は、バッファｂ１の制御権を、第１の応答部５１３に返却する。
【００８７】
第１の管理部５１２は、第２の応答部５２５からの応答を受け、第１の応答部５１３にアプリ１０１に応答を返すための指示と、ミラー状態管理テーブル４００を更新する。例えば、第２の応答部５２５からの応答が、複数のディスクのそれぞれに対する書き込み成功の応答がある場合には、第１の応答部５１３にアプリ１０１に書き込み成功の応答を返すように指示する。さらに、複数のディスクのそれぞれに対する書き込みに関し、第１の管理部５１２は、成功の応答があったディスクに対しては第２の応答部５２５の応答により第１の応答部５１３にアプリ１０１に書き込み成功の応答を返すように指示し、異常の応答があったディスクに対しては対応するミラー状態管理テーブル４００の情報を更新し、ミラーリングの対象から除外する。
【００８８】
第１の管理部５１２は、第１の応答部５１３がアプリ１０１に書き込み成功を応答するとともに、ディスクをミラーリングの対象から除外してもよい。また、第１の管理部５１２は、第１の応答部５１３がアプリ１０１に書き込み成功を応答してから、アプリ１０１から新たな書き込み要求が送信されるまでの間に、ディスクをミラーリングの対象から除外してもよい。また、第１の管理部５１２がアプリ１０１に直接書き込み成功を応答するとともに、ディスクをミラーリングの対象から除外してもよい。
【００８９】
第１の応答部５１３は、第２の応答部５２５の応答と第１の管理部５１２からの指示の両方があった場合には、アプリ１０１への応答とともにバッファｂ１の制御権を、アプリ１０１に返却する。
【００９０】
第１の応答部５１３は、第１の管理部５１２がディスクをミラーリングの対象から除外するとともに、アプリ１０１に書き込み成功を応答してもよい。また、第１の応答部５１３は、第１の管理部５１２がディスクをミラーリングの対象から除外した後に、アプリ１０１に書き込み成功を応答してもよい。また第２の応答部５２５からの応答を受け、異常のディスクを除外するとともにアプリへの応答を行うミラー切離部を含んで良い。
【００９１】
解放部５２６は、発行Ｉ／Ｏ管理テーブル４２０を参照し、複数のディスクのそれぞれに応じたドライバ１０３からの応答がすべてある場合には、第２の記憶領域ｍ２を解放する。ここで、応答は、ディスクについての書き込み成功の応答であっても、書き込み失敗の応答であってもよい。解放部５２６は、例えば、複数のディスクドライバ１０３のそれぞれから書き込みの成否の応答がすべてある場合には、バッファｂ２およびバッファｂ２’を解放する。
【００９２】
（制御装置１００における制御の流れ）
次に、図６を用いて、制御装置１００における制御の流れについて説明する。
【００９３】
図６は、制御装置１００における制御の流れを示す説明図である。図６において、ディスク装置２０２が、ディスクｄ１およびディスクｄ２の２つのディスクを含む場合を例に挙げる。
【００９４】
（６−１）アプリ１０１は、ディスク装置２０２に対してデータを書き込むため、ＯＳからバッファｂ１を確保する。バッファｂ１は、管理域ｍａ１とデータ域ｄａ１を有する。管理域ｍａ１は、管理情報が格納される領域である。データ域ｄａ１は、書き込み対象のデータが格納される領域である。
【００９５】
（６−２）アプリ１０１は、（６−１）で確保したバッファｂ１の管理域ｍａ１およびデータ域ｄａ１に、それぞれ、管理情報および書き込み対象のデータを格納し、ミラーソフト１０２に対して書き込み要求と、バッファｂ１の制御権とを送信する。
【００９６】
（６−３）ミラーソフト１０２は、書き込み要求を受け付けると、アプリ１０１への応答と、ディスクドライバ１０３からの応答待ちとを、別々に扱うことができるように、バッファｂ１とは異なるバッファｂ２およびバッファｂ２’をＯＳから確保する。バッファｂ２は、管理域ｍａ２とデータ域ｄａ２を有する。管理域ｍａ２は、管理情報が格納される領域である。データ域ｄａ２は、書き込み対象のデータが格納される領域である。
【００９７】
バッファｂ２’は、管理域ｍａ２’を有する。管理域ｍａ２’は、管理情報が格納される領域である。バッファｂ２’は、バッファｂ２のデータ域ｄａ２を利用可能であるため、データ域を有さなくてもよい。バッファｂ２’は、バッファｂ２のデータ域ｄａ２を利用しない場合には、さらにデータ域を有する。
【００９８】
（６−４）ミラーソフト１０２は、アプリ１０１から受け付けたバッファｂ１に格納された書き込み対象のデータをバッファｂ２のデータ域ｄａ２に複製し、管理情報をバッファｂ２の管理域ｍａ２に設定する。また、ミラーソフト１０２は、バッファｂ２の管理情報を、バッファｂ２’の管理域ｍａ２’に複製する。
【００９９】
（６−５）ミラーソフト１０２は、（６−４）で書き込み対象のデータを複製したバッファｂ２およびバッファｂ２’を用いて、ディスクドライバ１０３を制御してディスクｄ１およびディスクｄ２に対する書き込みを行わせる。このとき、ミラーソフト１０２は、監視タイマーｔ１を起動する。
【０１００】
（６−６）ディスクドライバ１０３は、監視タイマーｔ２を用いて、監視タイマーｔ２がタイムアウトするまでディスクに対するデータの書き込みを試行する。ディスクドライバ１０３は、監視タイマーｔ２がタイムアウトした場合には、データの書き込みの試行回数が所定回数になるまで、ディスクに対するデータの書き込みを再試行する。
【０１０１】
（６−７）ミラーソフト１０２は、監視タイマーｔ１がタイムアウトしても、ディスクｄ２について応答がないため、ディスクｄ２は異常である可能性があると判定する。そして、ミラーソフト１０２は、ディスクｄ２について応答がなくても、ディスクｄ１について書き込み成功の応答があれば、ディスクｄ２をミラーリングの対象から除外する。
【０１０２】
また、ミラーソフト１０２は、ミラーリングの対象から除外した際に、アプリ１０１に書き込み成功の応答とともに、バッファｂ１の制御権を返却する。このとき、ディスクｄ２に応じたディスクドライバ１０３は、データの書き込みを再試行中である。
【０１０３】
（６−８）アプリ１０１は、書き込み成功の応答を受け付けると、ＯＳから確保したバッファｂ１を解放して、バッファｂ１をＯＳの空きプールに返却する。
【０１０４】
（６−９）ミラーソフト１０２は、（６−４）で書き込み対象のデータや管理情報を格納したバッファｂ２およびバッファｂ２’を解放せずに、異常と判定したディスクｄ２からの応答を待つ。ミラーソフト１０２は、異常と判定したディスクｄ２に応じたディスクドライバ１０３からの応答があれば、バッファｂ２およびバッファｂ２’を使用終了したと判定して、バッファｂ２およびバッファｂ２’を解放する。
【０１０５】
（制御装置１００における制御の一例）
次に、図７を用いて、制御装置１００における制御の一例について説明する。
【０１０６】
図７は、制御装置１００における制御の一例を示す説明図である。図７において、ディスク装置２０２が、ディスクｄ１およびディスクｄ２の２つのディスクを含む場合を例に挙げる。
【０１０７】
＜アプリ１０１の書き込み要求の処理＞
アプリ１０１は、バッファｂ１をＯＳから確保する。書き込み対象のデータをバッファｂ１に格納して、バッファｂ１の制御権とともに、バッファｂ１に格納された書き込み対象のデータの書き込み要求を、ミラーソフト１０２に送信する。
【０１０８】
＜ミラーソフト１０２の第１の受付部５１１、第１の管理部５１２の処理＞
ミラーソフト１０２は、第１の制御機能によって、上位であるアプリ１０１から書き込み要求を受け付けると、ミラー状態管理テーブル４００を参照して、ミラーリングの状態を確認する。ミラーリングの状態は、例えば、両方のディスクとも正常である第１の状態と、片方のディスクが異常である第２の状態とがある。
【０１０９】
ここで、ミラーソフト１０２は、ミラーリングの対象になる両方のディスクとも正常であれば、第２の制御機能に対してバッファｂ１の制御権を送信し、両方のディスクに書き込むように指示する。一方で、ミラーソフト１０２は、一方のディスクが異常であれば、第２の制御機能に対して、バッファｂ１の制御権を送信し、正常な他方のディスクに書き込むように指示する。
【０１１０】
＜第１の状態でのミラーソフト１０２の第２の受付部５２１、複製部５２２、要求部５２３の処理＞
ミラーソフト１０２は、書き込みが指示されると、第２の制御機能によって、発行Ｉ／Ｏ管理テーブル４２０を更新し、何れのディスクに書き込みが指示されたかを管理する。ミラーソフト１０２は、発行Ｉ／Ｏ管理テーブル４２０を参照し、両方のディスクへの書き込みが指示された場合には、第２の制御機能によって、ＯＳからバッファｂ２およびバッファｂ２’を確保する。ミラーソフト１０２は、バッファｂ１に格納された書き込み対象のデータを、ＯＳから確保したバッファｂ２に複製し、管理情報をバッファｂ２に設定する。
【０１１１】
ミラーソフト１０２は、第２の制御機能によって、バッファｂ２に設定した管理情報を、ＯＳから新たに確保したバッファｂ２’に複製する。ミラーソフト１０２は、監視タイマーｔ１を起動する。ミラーソフト１０２は、バッファｂ２とバッファｂ２’の制御権とともに、バッファｂ２とバッファｂ２’を用いた書き込み要求を、ディスクドライバ１０３−１およびディスクドライバ１０３−２に送信する。
【０１１２】
＜第２の状態でのミラーソフト１０２の第２の受付部５２１、複製部５２２、要求部５２３の処理＞
ミラーソフト１０２は、書き込みが指示されると、第２の制御機能によって、発行Ｉ／Ｏ管理テーブル４２０を更新し、何れのディスクに書き込みが指示されたかを管理する。ミラーソフト１０２は、発行Ｉ／Ｏ管理テーブル４２０を参照し、片方のディスクへの書き込みが指示された場合には、第２の制御機能によって、ＯＳからバッファｂ２を確保する。ミラーソフト１０２は、バッファｂ１に格納された書き込み対象のデータを、ＯＳから確保したバッファｂ２に複製し、管理情報をバッファｂ２に設定する。ミラーソフト１０２は、監視タイマーｔ１を起動する。ミラーソフト１０２は、バッファｂ２の制御権とともに、バッファｂ２を用いた書き込み要求を、正常なディスクに応じたディスクドライバ１０３に送信する。
【０１１３】
＜ディスクドライバ１０３のディスクに対する書き込みの処理＞
複数のディスクのそれぞれに応じたディスクドライバ１０３−１，１０３−２は、上位であるミラーソフト１０２から書き込み要求を受け付ける。例えば、ディスクドライバ１０３−１は、書き込み要求を受け付けると、ディスクに対してデータの書き込みを行い、監視タイマーｔ２により経過時間を監視する。このとき、ディスクドライバ１０３−１は、ディスクやディスクまでの伝送路２０１に異常が発生し、監視タイマーｔ２がタイムアウトするまでに書き込みの応答がない場合には、試行回数が所定回数になるまで書き込みを再試行する。
【０１１４】
再試行では、ディスクドライバ１０３−１は、再び、ディスクに対してデータの書き込みを行い、監視タイマーｔ２により経過時間を監視し、タイムアウトするまでに書き込みが成功するか否かを判定する。ディスクドライバ１０３−１は、書き込みが成功したか、または、書き込みを所定回数試行しても書き込みの応答がない場合、ミラーソフト１０２に書き込みの成否を応答する。ディスクドライバ１０３−２は、ディスクドライバ１０３−１と同様の処理を行うため、説明を省略する。
【０１１５】
＜第１の状態でのミラーソフト１０２の第２の管理部５２４、第２の応答部５２５、解放部５２６、第２の管理部５２４が有するディスクドライバ応答待ち部、監視部の処理＞
ミラーソフト１０２は、両方のディスクへの書き込みが指示された場合には、第２の制御機能によって、両方のディスクドライバ１０３からの応答の受け付け、および監視タイマーｔ１のタイムアウトを監視する。ミラーソフト１０２は、応答を受け付ける都度、発行Ｉ／Ｏ管理テーブル４２０を更新し、両方のディスクドライバ１０３からの応答状態を管理する。
【０１１６】
ミラーソフト１０２は、第２の制御機能によって、監視タイマーｔ１のタイムアウトまでに、両方のディスクドライバ１０３から書き込み成功の応答があれば、第１の制御機能に両方のディスクが正常であることを通知し、バッファｂ１の制御権を返却する。このとき、ミラーソフト１０２は、第２の制御機能によって、バッファｂ２およびバッファｂ２’を解放する。
【０１１７】
一方で、監視タイマーｔ１のタイムアウトの前に、一方のディスクドライバ１０３から書き込み成功の応答があり、かつ、他方のディスクドライバ１０３から書き込みの応答がない場合がある。この場合、ミラーソフト１０２は、第２の制御機能によって、監視タイマーｔ１のタイムアウトがあるか否かを判定する。ミラーソフト１０２は、第２の制御機能によって、タイムアウトがなければ、引き続き、ディスクドライバ１０３からの応答を待つ。
【０１１８】
ミラーソフト１０２は、第２の制御機能によって、タイムアウトがあれば、第１の制御機能に一方のディスクが正常であり他方のディスクが異常であることを通知し、バッファｂ１の制御権を返却する。このとき、ミラーソフト１０２は、第２の制御機能によって、異常であると判定したディスクについての応答を待つ。そして、ミラーソフト１０２は、第２の制御機能によって、両方のディスクドライバ１０３からの応答がある場合には、ＯＳから確保したバッファｂ２およびバッファｂ２’を解放する。
【０１１９】
＜第１の状態でのミラーソフト１０２の第１の管理部５１２、第１の応答部５１３の処理＞
ミラーソフト１０２は、第１の制御機能によって、第２の制御機能からの書き込み成否の通知を受け付け、両方のディスクに対する書き込みが成功したか確認する。ミラーソフト１０２は、第１の制御機能によって、両方のディスクに対する書き込みが成功していれば、アプリ１０１に対して書き込み成功の応答とともに、バッファｂ１の制御権を返却する。
【０１２０】
ミラーソフト１０２は、第１の制御機能によって、一方のディスクに対する書き込みが成功し、他方のディスクに対する書き込みが成功していなければ、ミラー状態管理テーブル４００を更新し、異常があると判定したディスクをミラーリングの対象から除外する。そして、ミラーソフト１０２は、第１の制御機能によって、アプリ１０１に対して書き込み成功の応答とともに、バッファｂ１の制御権を返却する。
【０１２１】
＜第２の状態でのミラーソフト１０２の第２の管理部５２４、第２の応答部５２５、解放部５２６、第２の管理部５２４が有するディスクドライバ応答待ち部、監視部の処理＞
ミラーソフト１０２は、片方のディスクへの書き込みが指示された場合には、第２の制御機能によって、片方のディスクドライバ１０３からの応答の受け付け、および監視タイマーｔ１のタイムアウトを監視する。ミラーソフト１０２は、応答を受け付けると発行Ｉ／Ｏ管理テーブル４２０を更新し、片方のディスクドライバ１０３からの応答状態を管理する。
【０１２２】
ミラーソフト１０２は、第２の制御機能によって、監視タイマーｔ１のタイムアウトまでに、片方のディスクドライバ１０３から書き込み成功の応答があれば、第１の制御機能に片方のディスクが正常であることを通知し、バッファｂ１の制御権を返却する。このとき、ミラーソフト１０２は、第２の制御機能によって、バッファｂ２を解放する。
【０１２３】
＜第２の状態でのミラーソフト１０２の第１の管理部５１２、第１の応答部５１３の処理＞
ミラーソフト１０２は、第１の制御機能によって、第２の制御機能からの書き込み成否の通知を受け付け、片方のディスクに対する書き込みが成功したか確認する。ミラーソフト１０２は、第１の制御機能によって、片方のディスクに対する書き込みが成功していれば、アプリ１０１に対して書き込み成功の応答とともに、バッファｂ１の制御権を返却する。
【０１２４】
＜アプリ１０１の解放の処理＞
アプリ１０１は、ミラーソフト１０２からの書き込み成功の応答を受け付け、ＯＳから確保したバッファｂ１を解放し、業務を再開する。これにより、アプリ１０１の書き込み要求に対するミラーソフト１０２の応答時間の増大を抑制することができる。
【０１２５】
（制御装置１００における各種処理の流れ）
次に、図８〜図１０を用いて、ディスク装置２０２に２つのディスクが含まれる場合を例に挙げて、制御装置１００におけるアプリ１０１、ミラーソフト１０２、ディスクドライバ１０３などによる各種処理の流れについて説明する。
【０１２６】
図８〜図１０は、制御装置１００の各種処理の流れを示すフローチャートである。図８において、アプリ１０１は、バッファｂ１を確保して、書き込み対象のデータを書き込む（ステップＳ８０１）。そして、アプリ１０１は、バッファｂ１の制御権とともに、書き込み対象のデータのディスクｄ１およびディスクｄ２を有するディスク装置２０２に対する書き込み要求を、ミラーソフト１０２に送信する（ステップＳ８０２）。
【０１２７】
ミラーソフト１０２は、第１の制御機能によって、ミラー状態管理テーブル４００を参照し、ミラーリングの状態を確認して、ミラーリングが解除されていなければ、ミラーリングの対象となる２つのディスクｄ１およびディスクｄ２を書込先として設定する（ステップＳ８０３）。そして、ミラーソフト１０２は、第１の制御機能によって、バッファｂ１の制御権を、ミラーソフト１０２の第２の制御機能に送信する（ステップＳ８０４）。
【０１２８】
ミラーソフト１０２は、第２の制御機能によって、バッファｂ２を確保してバッファｂ１のデータを複製し管理情報を設定するとともに、バッファｂ２’を確保してバッファｂ２の管理情報を複製する（ステップＳ８０５）。そして、ミラーソフト１０２は、第２の制御機能によって、バッファｂ２の制御権とともに、書き込み対象のデータの書き込み要求を、一方のディスクｄ１に応じたディスクドライバ１０３−１に送信する（ステップＳ８０６）。
【０１２９】
また、ミラーソフト１０２は、第２の制御機能によって、バッファｂ２’の制御権とともに、書き込み対象のデータの書き込み要求を、他方のディスクｄ２に応じたディスクドライバ１０３−２に送信する（ステップＳ８０７）。また、ミラーソフト１０２は、第２の制御機能によって、応答時間の増大を抑制するための応答のトリガーとなる監視タイマーｔ１を起動する（ステップＳ８０８）。ステップＳ８０６〜Ｓ８０８は、並列して実行される。
【０１３０】
ディスクドライバ１０３−１は、書き込みに対するタイムアウトを判定するトリガーとなる監視タイマーｔ２を起動し、バッファｂ２に格納されたデータのディスクｄ１に対する書き込みを試行する（ステップＳ８０９）。次に、ディスクドライバ１０３−１は、ディスクｄ１からの応答、または、タイムアウトがあるか否かを判定する（ステップＳ８１０）。
【０１３１】
ここで、応答、および、タイムアウトがない場合（ステップＳ８１０：Ｎｏ）、ディスクドライバ１０３−１は、ステップＳ８１０の処理に戻る。一方で、応答、または、タイムアウトがある場合（ステップＳ８１０：Ｙｅｓ）、ディスクドライバ１０３−１は、バッファｂ２の制御権とともに、書き込みの成否の応答を、ミラーソフト１０２に送信する（ステップＳ８１１）。
【０１３２】
また、ディスクドライバ１０３−２は、書き込みに対するタイムアウトを判定するトリガーとなる監視タイマーｔ２’を起動し、バッファｂ２’に格納されたデータのディスクｄ２に対する書き込みを試行する（ステップＳ８１２）。次に、ディスクドライバ１０３−２は、ディスクｄ２からの応答、または、タイムアウトがあるか否かを判定する（ステップＳ８１３）。
【０１３３】
ここで、応答、および、タイムアウトがない場合（ステップＳ８１３：Ｎｏ）、ディスクドライバ１０３−２は、ステップＳ８１３の処理に戻る。一方で、応答、または、タイムアウトがある場合（ステップＳ８１３：Ｙｅｓ）、ディスクドライバ１０３−２は、バッファｂ２’の制御権とともに、書き込みの成否の応答を、ミラーソフト１０２に送信する（ステップＳ８１４）。
【０１３４】
ミラーソフト１０２は、第２の制御機能によって、ディスクドライバ１０３−１からの応答を受け付ける（ステップＳ８１５）。また、ミラーソフト１０２は、第２の制御機能によって、ディスクドライバ１０３−２からの応答を受け付ける（ステップＳ８１６）。このとき、ミラーソフト１０２は、応答を受け付ける都度、発行Ｉ／Ｏ管理テーブル４２０を更新し、両方のディスクドライバ１０３からの応答状態を管理する。また、ミラーソフト１０２は、第２の制御機能によって、応答時間の増大を抑制するための応答のトリガーとなる監視タイマーｔ１のタイムアウトを待つ（ステップＳ８１７）。
【０１３５】
ここで、ミラーソフト１０２は、ディスクドライバ１０３−１からの応答、または、ディスクドライバ１０３−２からの応答を受け付けたときに、図９の処理、および、図１０の処理が未実行であれば、並列して実行する。
【０１３６】
図９において、ミラーソフト１０２は、第２の制御機能によって、ディスクドライバ１０３−１からの応答、または、ディスクドライバ１０３−２からの応答があるか否かを判定する（ステップＳ９０１）。ここで、応答がない場合（ステップＳ９０１：Ｎｏ）、ミラーソフト１０２は、ステップＳ９０１の処理に戻る。
【０１３７】
一方で、応答がある場合（ステップＳ９０１：Ｙｅｓ）、ミラーソフト１０２は、第２の制御機能によって、ディスクドライバ１０３−１、および、ディスクドライバ１０３−２からの応答があるか否かを判定する（ステップＳ９０２）。ここで、すべて応答がある場合（ステップＳ９０２：Ｙｅｓ）、ミラーソフト１０２は、ステップＳ９０３の処理に移行する。
【０１３８】
ステップＳ９０３では、ミラーソフト１０２は、第２の制御機能によって、バッファｂ１の制御権とともに、複数のディスクｄ１およびディスクｄ２のそれぞれに対する書き込み成功の応答を、第１の制御機能に送信する（ステップＳ９０３）。そして、ミラーソフト１０２は、ステップＳ９０６の処理に移行する。
【０１３９】
一方で、片方のディスクドライバから応答がない場合（ステップＳ９０２：Ｎｏ）、ミラーソフト１０２は、第２の制御機能によって、応答時間の増大を抑制するための応答のトリガーとなる監視タイマーｔ１のタイムアウトがあるか否かを判定する（ステップＳ９０４）。ここで、タイムアウトがない場合（ステップＳ９０４：Ｎｏ）、ミラーソフト１０２は、ステップＳ９０１の処理に戻る。一方で、タイムアウトがある場合（ステップＳ９０４：Ｙｅｓ）、ミラーソフト１０２は、ステップＳ９０５の処理に移行する。
【０１４０】
ステップＳ９０５では、ミラーソフト１０２は、第２の制御機能によって、バッファｂ１の制御権とともに、一方のディスクの書き込み成功と、他方のディスクの書き込み失敗との応答を、第１の制御機能に送信する（ステップＳ９０５）。そして、ミラーソフト１０２は、ステップＳ９０６の処理に移行する。
【０１４１】
ステップＳ９０６では、ミラーソフト１０２は、第１の制御機能によって、ディスクｄ１、および、ディスクｄ２のうち、異常があると判定されたディスクがあるか否かを判定する（ステップＳ９０６）。ここで、異常があると判定されたディスクがない場合（ステップＳ９０６：Ｎｏ）、ミラーソフト１０２は、ステップＳ９０８の処理に移行する。
【０１４２】
一方で、異常があると判定されたディスクがある場合（ステップＳ９０６：Ｙｅｓ）、ミラーソフト１０２は、第１の制御機能によって、ミラー状態管理テーブル４００を更新し、異常があると判定されたディスクを、ミラーリングの対象から除外する（ステップＳ９０７）。そして、ミラーソフト１０２は、ステップＳ９０８の処理に移行する。
【０１４３】
ステップＳ９０８では、ミラーソフト１０２は、第１の制御機能によって、バッファｂ１の制御権とともに、書き込み成功の通知をアプリ１０１に送信する（ステップＳ９０８）。アプリ１０１は、後処理を実行する（ステップＳ９０９）。次に、アプリ１０１は、バッファｂ１をＯＳに解放する（ステップＳ９１０）。そして、アプリ１０１は、業務を再開する（ステップＳ９１１）。このように、制御装置１００は、並行して実行された図９の処理、および、図１０の処理のうち、図９の処理を終了する。
【０１４４】
図１０において、ミラーソフト１０２は、第２の制御機能によって、ディスクｄ１およびディスクｄ２のそれぞれに応じたディスクドライバ１０３−１およびディスクドライバ１０３−２からの応答があるか否かを判定する（ステップＳ１００１）。ここで、どちらか一方でも応答がない場合（ステップＳ１００１：Ｎｏ）、ミラーソフト１０２は、ステップＳ１００１の処理に戻る。
【０１４５】
一方で、すべて応答がある場合（ステップＳ１００１：Ｙｅｓ）、ミラーソフト１０２は、第２の制御機能によって、バッファｂ２、および、バッファｂ２’を、ＯＳに解放する（ステップＳ１００２）。このように、制御装置１００は、並行して実行された図９の処理、および、図１０の処理のうち、図１０の処理を終了する。制御装置１００が、図８の処理を行い、並行して実行された図９の処理、および、図１０の処理すべてを行うことにより、制御装置１００における各種処理が行われる。これにより、アプリ１０１の書き込み要求に対するミラーソフト１０２の応答時間の増大を抑制することができる。
【０１４６】
（制御装置１００の全体処理手順）
次に、図１１を用いて、制御装置１００の全体処理手順の一例について説明する。
【０１４７】
図１１は、制御装置１００の全体処理手順の一例を示すフローチャートである。図１１において、制御装置１００は、アプリ１０１の書き込み処理を実行する（ステップＳ１１０１）。次に、制御装置１００は、ミラーソフト１０２の第１の書き込み処理を実行する（ステップＳ１１０２）。そして、制御装置１００は、ミラーソフト１０２の第２の書き込み処理を実行する（ステップＳ１１０３）。
【０１４８】
次に、制御装置１００は、ディスクドライバ１０３の書き込み処理を実行開始する（ステップＳ１１０４）。そして、制御装置１００は、ミラーソフト１０２の第２の応答処理として解放処理および異常判定処理を並行して実行開始する（ステップＳ１１０５）。
【０１４９】
次に、制御装置１００は、少なくとも異常判定処理が終了していれば、ミラーソフト１０２の第１の応答処理を実行する（ステップＳ１１０６）。そして、制御装置１００は、アプリ１０１の応答処理を実行して（ステップＳ１１０７）、全体処理を終了する。これにより、アプリ１０１の書き込み要求に対するミラーソフト１０２の応答時間の増大を抑制することができる。
【０１５０】
（アプリ１０１の書き込み処理手順）
次に、図１２を用いて、アプリ１０１の書き込み処理手順の一例について説明する。
【０１５１】
図１２は、アプリ１０１の書き込み処理手順の一例を示すフローチャートである。図１２において、アプリ１０１は、ＯＳから、書き込み対象のデータの格納先として、バッファｂ１を確保する（ステップＳ１２０１）。次に、アプリ１０１は、書き込み対象のデータを、確保したバッファｂ１に書き込む（ステップＳ１２０２）。
【０１５２】
そして、アプリ１０１は、バッファｂ１の制御権とともに、書き込み対象のデータのディスクに対する書き込み要求を、ミラーソフト１０２に送信して（ステップＳ１２０３）、書き込み処理を終了する。これにより、アプリ１０１は、ミラーソフト１０２にデータの書き込みを依頼することができる。
【０１５３】
（ミラーソフト１０２の第１の書き込み処理手順）
次に、図１３を用いて、ミラーソフト１０２の第１の書き込み処理手順の一例について説明する。
【０１５４】
図１３は、ミラーソフト１０２の第１の書き込み処理手順の一例を示すフローチャートである。図１３において、ミラーソフト１０２は、アプリ１０１から書き込み要求を受け付けると、ミラー状態管理テーブル４００を参照して、ミラーリングが解除されているか否かを判定する（ステップＳ１３０１）。
【０１５５】
ここで、ミラーリングが解除されていない場合（ステップＳ１３０１：Ｎｏ）、ミラーソフト１０２は、書き込み対象のデータの書込先として、ミラーリングの対象となる複数のディスクを設定し、バッファｂ１の制御権とともに、第２の書き込み処理手順に送信する（ステップＳ１３０２）。そして、ミラーソフト１０２は、第１の書き込み処理を終了する。
【０１５６】
一方で、ミラーリングが解除されている場合（ステップＳ１３０１：Ｙｅｓ）、ミラーソフト１０２は、書き込み対象のデータの書込先として、異常がないと判定された何れかのディスクを設定し、バッファｂ１の制御権とともに、第２の書き込み処理手順に送信する（ステップＳ１３０３）。そして、ミラーソフト１０２は、第１の書き込み処理を終了する。これにより、ミラーソフト１０２は、データの書込先を決定することができる。
【０１５７】
（ミラーソフト１０２の第２の書き込み処理手順）
次に、図１４を用いて、ミラーソフト１０２の第２の書き込み処理手順の一例について説明する。
【０１５８】
図１４は、ミラーソフト１０２の第２の書き込み処理手順の一例を示すフローチャートである。図１４において、ミラーソフト１０２は、書込先として設定されたディスクが複数あるか否かを判定する（ステップＳ１４０１）。
【０１５９】
ここで、書込先として設定されたディスクが複数ある場合（ステップＳ１４０１：Ｙｅｓ）、ミラーソフト１０２は、書込先として設定された複数のディスクの何れかのディスクに応じたバッファｂ２を確保するとともに、他のディスクに応じたバッファｂ２’を確保する（ステップＳ１４０２）。次に、ミラーソフト１０２は、バッファｂ１に格納された書き込み対象のデータを、確保したバッファｂ２に複製し、管理情報を設定するとともに、バッファｂ２に格納された管理情報を、確保したバッファｂ２’に複製する（ステップＳ１４０３）。そして、ミラーソフト１０２は、ステップＳ１４０６の処理に移行する。
【０１６０】
一方で、書込先として設定されたディスクが１つである場合（ステップＳ１４０１：Ｎｏ）、ミラーソフト１０２は、バッファｂ２を確保する（ステップＳ１４０４）。次に、ミラーソフト１０２は、バッファｂ１に格納された書き込み対象のデータを、確保したバッファｂ２に複製し、管理情報を設定する（ステップＳ１４０５）。そして、ミラーソフト１０２は、ステップＳ１４０６の処理に移行する。
【０１６１】
ステップＳ１４０６では、ミラーソフト１０２は、応答時間の増大を抑制するための応答のトリガーとなる監視タイマーｔ１を起動する（ステップＳ１４０６）。次に、ミラーソフト１０２は、書込先として設定されたディスクが複数あるか否かを判定する（ステップＳ１４０７）。ここで、書込先として設定されたディスクが複数ある場合（ステップＳ１４０７：Ｙｅｓ）、ミラーソフト１０２は、ステップＳ１４０８の処理に移行する。
【０１６２】
ステップＳ１４０８では、ミラーソフト１０２は、書込先として設定された複数のディスクの何れかのディスクに応じたバッファｂ２の制御権とともに、他のディスクに応じたバッファｂ２’の制御権を、それぞれのディスクに応じたディスクドライバ１０３に送信する（ステップＳ１４０８）。そして、ミラーソフト１０２は、第２の書き込み処理を終了する。
【０１６３】
一方で、書込先として設定されたディスクが１つである場合（ステップＳ１４０７：Ｎｏ）、ミラーソフト１０２は、ステップＳ１４０９の処理に移行する。ステップＳ１４０９では、ミラーソフト１０２は、バッファｂ２の制御権を、書込先として設定された何れかのディスクに応じたディスクドライバ１０３に送信する（ステップＳ１４０９）。そして、ミラーソフト１０２は、第２の書き込み処理を終了する。これにより、ミラーソフト１０２は、アプリ１０１が確保したバッファｂ１を流用せずに、ディスクドライバ１０３に書き込み要求を送信することができる。
【０１６４】
（ディスクドライバ１０３の書き込み処理手順）
次に、図１５を用いて、ディスクドライバ１０３の書き込み処理手順の一例について説明する。
【０１６５】
図１５は、ディスクドライバ１０３の書き込み処理手順の一例を示すフローチャートである。図１５において、ディスクドライバ１０３は、書き込み要求をキューの待ち行列に入れる（ステップＳ１５０１）。次に、ディスクドライバ１０３は、書き込みに対するタイムアウトを判定するトリガーとなる監視タイマーｔ２を起動する（ステップＳ１５０２）。そして、ディスクドライバ１０３は、キュー内の最も古い書き込み要求を取り出して、ディスクに対する書き込みを試行する（ステップＳ１５０３）。
【０１６６】
次に、ディスクドライバ１０３は、ディスクからの応答があるか否かを判定する（ステップＳ１５０４）。ここで、応答がある場合（ステップＳ１５０４：Ｙｅｓ）、ディスクドライバ１０３は、書き込み成功と判定する（ステップＳ１５０５）。次に、ディスクドライバ１０３は、ミラーソフト１０２から受信したバッファの制御権とともに、書き込み成功の応答を、ミラーソフト１０２に送信する（ステップＳ１５０６）。そして、ディスクドライバ１０３は、ステップＳ１５１１の処理に移行する。
【０１６７】
一方で、応答がない場合（ステップＳ１５０４：Ｎｏ）、ディスクドライバ１０３は、書き込みに対するタイムアウトを判定するトリガーとなる監視タイマーｔ２がタイムアウトしたか否かを判定する（ステップＳ１５０７）。ここで、タイムアウトしていない場合（ステップＳ１５０７：Ｎｏ）、ディスクドライバ１０３は、ステップＳ１５０４の処理に戻る。
【０１６８】
一方で、タイムアウトした場合（ステップＳ１５０７：Ｙｅｓ）、ディスクドライバ１０３は、ディスクへの書き込みを再試行するか否かを判定する（ステップＳ１５０８）。ここで、再試行する場合（ステップＳ１５０８：Ｙｅｓ）、ディスクドライバ１０３は、取り出した書き込み要求を、キューの元の位置に入れて（ステップＳ１５０９）、ステップＳ１５０２の処理に戻る。
【０１６９】
一方で、再試行しない場合（ステップＳ１５０８：Ｎｏ）、ディスクドライバ１０３は、ミラーソフト１０２から受信したバッファの制御権とともに、書き込み失敗の応答を、ミラーソフト１０２に送信する（ステップＳ１５１０）。そして、ディスクドライバ１０３は、ステップＳ１５１１の処理に移行する。
【０１７０】
ステップＳ１５１１では、ディスクドライバ１０３は、キューに書き込み要求があるか否かを判定する（ステップＳ１５１１）。ここで、書き込み要求がある場合（ステップＳ１５１１：Ｙｅｓ）、ディスクドライバ１０３は、ステップＳ１５０２の処理に戻る。一方で、書き込み要求がない場合（ステップＳ１５１１：Ｎｏ）、ディスクドライバ１０３は、書き込み処理を終了する。これにより、ディスクドライバ１０３は、ディスクにデータを書き込むことができる。
【０１７１】
（ミラーソフト１０２の第２の応答処理手順）
次に、図１６および図１７を用いて、ミラーソフト１０２の第２の応答処理手順の一例について説明する。
【０１７２】
図１６および図１７は、ミラーソフト１０２の第２の応答処理手順の一例を示すフローチャートである。図１６では、第２の応答処理における解放処理について示す。図１７では、第２の応答処理において解放処理と並行して行われる異常判定処理について示す。
【０１７３】
図１６において、ミラーソフト１０２は、何れかのディスクドライバ１０３からの応答を受け付ける（ステップＳ１６０１）。このとき、ミラーソフト１０２は、応答を受け付ける都度、発行Ｉ／Ｏ管理テーブル４２０を更新し、両方のディスクドライバ１０３からの応答状態を管理する。次に、ミラーソフト１０２は、発行Ｉ／Ｏ管理テーブル４２０を参照し、複数のディスクドライバ１０３のそれぞれからの応答があるか否かを判定する（ステップＳ１６０２）。ここで、応答がある場合（ステップＳ１６０２：Ｙｅｓ）、ミラーソフト１０２は、複数のディスクの何れかのディスクに応じたバッファｂ２と、他のディスクに応じたバッファｂ２’とを、ＯＳに解放する（ステップＳ１６０３）。そして、ミラーソフト１０２は、解放処理を終了する。
【０１７４】
一方で、片方のディスクドライバから応答がない場合（ステップＳ１６０２：Ｎｏ）、ミラーソフト１０２は、書込先となるディスクが１つであるか否かを判定する（ステップＳ１６０４）。ここで、１つではない場合（ステップＳ１６０４：Ｎｏ）、ミラーソフト１０２は、ステップＳ１６０１の処理に戻る。一方で、１つである場合（ステップＳ１６０４：Ｙｅｓ）、ミラーソフト１０２は、バッファｂ２をＯＳに解放する（ステップＳ１６０５）。そして、ミラーソフト１０２は、解放処理を終了する。
【０１７５】
図１７において、ミラーソフト１０２は、ディスクドライバ１０３からの応答があるか否かを判定する（ステップＳ１７０１）。ここで、応答がない場合（ステップＳ１７０１：Ｎｏ）、ミラーソフト１０２は、ステップＳ１７０１の処理に戻る。
【０１７６】
一方で、応答がある場合（ステップＳ１７０１：Ｙｅｓ）、ミラーソフト１０２は、複数のディスクドライバ１０３のそれぞれからの応答があるか否かを判定する（ステップＳ１７０２）。ここで、応答がある場合（ステップＳ１７０２：Ｙｅｓ）、ミラーソフト１０２は、ステップＳ１７０４の処理に移行する。
【０１７７】
一方で、片方のディスクドライバから応答がない場合（ステップＳ１７０２：Ｎｏ）、ミラーソフト１０２は、書込先となるディスクが１つであって、書込先となるディスクに応じたディスクドライバ１０３からの応答があるか否かを判定する（ステップＳ１７０３）。ここで、１つであって、応答がある場合（ステップＳ１７０３：Ｙｅｓ）、ミラーソフト１０２は、ステップＳ１７０４の処理に移行する。ステップＳ１７０４では、ミラーソフト１０２は、複数のディスクのそれぞれに対する、または、書込先となるディスクが１つであって、その書込先となるディスクに対する書き込み成功と判定して（ステップＳ１７０４）、第２の応答処理を終了する。
【０１７８】
一方で、１つではない場合（ステップＳ１７０３：Ｎｏ）、ミラーソフト１０２は、応答時間の増大を抑制するための応答のトリガーとなる監視タイマーｔ１のタイムアウトがあるか否かを判定する（ステップＳ１７０５）。ここで、タイムアウトがない場合（ステップＳ１７０５：Ｎｏ）、ミラーソフト１０２は、ステップＳ１７０１の処理に戻る。
【０１７９】
一方で、タイムアウトがある場合（ステップＳ１７０５：Ｙｅｓ）、ミラーソフト１０２は、応答がないディスクを、異常があるディスクであると判定して（ステップＳ１７０６）、第２の応答処理を終了する。これにより、ミラーソフト１０２は、ディスクに異常があるか否かを判定することができる。
【０１８０】
（ミラーソフト１０２の第１の応答処理手順）
次に、図１８を用いて、ミラーソフト１０２の第１の応答処理手順の一例について説明する。
【０１８１】
図１８は、ミラーソフト１０２の第１の応答処理手順の一例を示すフローチャートである。図１８において、ミラーソフト１０２は、ミラーリングの対象となる複数のディスクのうち、異常があると判定されたディスクがあるか否かを判定する（ステップＳ１８０１）。ここで、異常があると判定されたディスクがない場合（ステップＳ１８０１：Ｎｏ）、ミラーソフト１０２は、ステップＳ１８０３の処理に移行する。
【０１８２】
一方で、異常があると判定されたディスクがある場合（ステップＳ１８０１：Ｙｅｓ）、ミラーソフト１０２は、ミラー状態管理テーブル４００を更新し、異常があると判定されたディスクを、ミラーリングの対象から除外する（ステップＳ１８０２）。そして、ミラーソフト１０２は、ステップＳ１８０３の処理に移行する。
【０１８３】
ステップＳ１８０３では、ミラーソフト１０２は、バッファｂ１の制御権とともに、書き込み成功の応答をアプリ１０１に送信する（ステップＳ１８０３）。そして、ミラーソフト１０２は、第１の応答処理を終了する。これにより、ミラーソフト１０２は、異常があるディスクがあれば、異常があるディスクをミラーリングの対象から除外しつつ、アプリ１０１に応答することができる。
【０１８４】
（アプリ１０１の応答処理手順）
次に、図１９を用いて、アプリ１０１の応答処理手順の一例について説明する。
【０１８５】
図１９は、アプリ１０１の応答処理手順の一例を示すフローチャートである。図１９において、アプリ１０１は、後処理を実行する（ステップＳ１９０１）。次に、アプリ１０１は、バッファｂ１をＯＳに解放する（ステップＳ１９０２）。そして、アプリ１０１は、応答処理を終了する。これにより、アプリ１０１は、業務を再開することができる。
【０１８６】
以上説明したように、制御装置１００によれば、アプリ１０１が確保したバッファｂ１に格納された書き込み対象のデータの書き込み要求をアプリ１０１から受け付け、バッファｂ１とは異なるバッファｂ２およびバッファｂ２’を確保することができる。次に、制御装置１００によれば、バッファｂ１に格納された書き込み対象のデータを、確保したバッファｂ２に複製し、管理情報を設定するとともに、バッファｂ２に格納された管理情報を、確保したバッファｂ２’に複製することができる。そして、制御装置１００によれば、バッファｂ２の制御権とともに、バッファｂ２に格納された書き込み対象のデータの書き込み要求を、複数のディスクの何れかに応じたドライバ１０３に送信することができる。また、制御装置１００によれば、残余のディスクドライバ１０３のそれぞれについて確保されたバッファｂ２’の制御権とともに、バッファｂ２に複製された書き込み対象のデータの書き込み要求を、残余のディスクドライバ１０３のそれぞれに送信することができる。これにより、制御装置１００は、バッファｂ１を流用せずに、書き込み対象のデータの書き込み要求を複数のドライバ１０３のそれぞれに送信することができ、ドライバ１０３がディスクに対する書き込みを試行中であってもアプリ１０１に応答可能になる。
【０１８７】
また、制御装置１００によれば、書き込み対象のデータの書き込み要求をドライバ１０３に送信してからドライバ１０３によるデータの書き込み処理がリトライオーバーするより前に所定時間が経過したことを検出することができる。そして、制御装置１００によれば、検出した際に、複数のディスクのうち、少なくとも何れかのディスクに対する書き込み成功の応答がある場合には、アプリ１０１に書き込み成功を応答することができる。また、制御装置１００によれば、検出した際に、複数のディスクのうち、少なくとも何れかのディスクに対する書き込み成功の応答がある場合には、書き込みの応答がないディスクをミラーリングの対象から除外することができる。これにより、制御装置１００は、データの整合性を保つために、故障の可能性があるディスクを、ミラーリングの対象から除外することができる。
【０１８８】
これらのことから、ミラーソフト１０２は、複数のドライバ１０３のそれぞれからの応答を待たなくても、アプリ１０１に応答することができ、応答時間の増大を抑制することができる。さらに、ミラーソフト１０２は、アプリ１０１からデータの読み出し要求などを受け付けた場合に、故障の可能性があるディスクｄ１，ｄ２からデータの読み出しなどを行ってしまうことを防止することができる。
【０１８９】
また、制御装置１００によれば、書き込み要求をドライバ１０３に送信してから所定時間が経過する前に、複数のディスクのそれぞれに対する書き込み成功の応答がある場合には、アプリ１０１に書き込み成功を応答することができる。これにより、制御装置１００は、書き込み要求を送信してから所定時間が経過するまで待たなくても、複数のディスクのそれぞれが正常であって書き込みが成功していればアプリ１０１に応答することができる。
【０１９０】
また、制御装置１００によれば、複数のディスクのそれぞれに対する書き込みの応答がある場合には、バッファｂ２およびバッファｂ２’を解放することができる。これにより、制御装置１００は、ミラーリングの対象からディスクを除外したり、アプリ１０１に応答した後であっても、バッファｂ２およびバッファｂ２’を確保したままにせず解放し、ＯＳに返却することができ、ＯＳの空きプールの記憶容量の枯渇を防止することができる。
【０１９１】
また、制御装置１００によれば、所定時間として、ドライバ１０３がデータの書き込み要求を受け付けてからディスクに対する書き込みに失敗したと判定（リトライオーバー）するまでの時間よりも短い時間を用いることができる。これにより、制御装置１００は、まだドライバ１０３から書き込みの成否の応答がなくても、所定時間が経過したときに書き込みの成否の応答がないディスクを異常がある可能性があるディスクであると判定することができる。また、制御装置１００は、ドライバ１０３から書き込み成功の応答があるディスクであっても、ドライバ１０３がデータの書き込みを複数回試行した不安定なディスクであり、間欠故障の可能性があるディスクであると判定することができる。
【０１９２】
なお、本実施の形態で説明した制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１９３】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１９４】
（付記１）コンピュータに、
アプリケーションソフトウェアによって取得された第１の記憶領域に格納されたデータの書き込み要求を、前記アプリケーションソフトウェアから受け付け、
前記書き込み要求を受け付けた場合に、前記第１の記憶領域とは異なる第２の記憶領域を取得し、
前記データを、取得した前記第２の記憶領域に複製し、
ミラーリングの対象になる複数の記憶装置のそれぞれに対する複製された前記データの書き込み要求を、前記複数の記憶装置のそれぞれに応じたドライバに送信し、
複製された前記データの書き込み要求を前記ドライバに送信してから前記ドライバによるデータの書き込み処理がリトライオーバーするより前に所定時間が経過した際に、前記複数の記憶装置のうち、少なくとも何れかの記憶装置に対する書き込み成功の応答がある場合には、前記アプリケーションソフトウェアに書き込み成功を応答し、書き込み成功の応答がない記憶装置をミラーリングの対象から除外する、
処理を実行させることを特徴とする制御プログラム。
【０１９５】
（付記２）前記コンピュータに、
前記複数の記憶装置のそれぞれに対する書き込み成功の応答がある場合には、前記第２の記憶領域を解放する、
処理を実行させることを特徴とする付記１に記載の制御プログラム。
【０１９６】
（付記３）前記コンピュータに、
前記複数の記憶装置のそれぞれに対する書き込み成功の応答がない場合であっても、前記アプリケーションソフトウェアの応答とは別に、前記複数の記憶装置のそれぞれからの応答を待った後に前記第２の記憶領域を解放する、
処理を実行させることを特徴とする付記１または２に記載の制御プログラム。
【０１９７】
（付記４）前記所定時間は、前記ドライバがデータの書き込み要求を受け付けてから前記記憶装置に対する書き込みに失敗したと判定するまでの時間よりも短い時間に設定される、ことを特徴とする付記１〜３の何れか一つに記載の制御プログラム。
【０１９８】
（付記５）コンピュータが、
アプリケーションソフトウェアによって取得された第１の記憶領域に格納されたデータの書き込み要求を、前記アプリケーションソフトウェアから受け付け、
前記書き込み要求を受け付けた場合に、前記第１の記憶領域とは異なる第２の記憶領域を取得し、
前記データを、取得した前記第２の記憶領域に複製し、
ミラーリングの対象になる複数の記憶装置のそれぞれに対する複製された前記データの書き込み要求を、前記複数の記憶装置のそれぞれに応じたドライバに送信し、
複製された前記データの書き込み要求を前記ドライバに送信してから前記ドライバによるデータの書き込み処理がリトライオーバーするより前に所定時間が経過した際に、前記複数の記憶装置のうち、少なくとも何れかの記憶装置に対する書き込み成功の応答がある場合には、前記アプリケーションソフトウェアに書き込み成功を応答し、書き込み成功の応答がない記憶装置をミラーリングの対象から除外する、
処理を実行することを特徴とする制御方法。
【０１９９】
（付記６）アプリケーションソフトウェアによって取得された第１の記憶領域に格納されたデータの書き込み要求を、前記アプリケーションソフトウェアから受け付け、
前記書き込み要求を受け付けた場合に、前記第１の記憶領域とは異なる第２の記憶領域を取得し、
前記データを、取得した前記第２の記憶領域に複製し、
ミラーリングの対象になる複数の記憶装置のそれぞれに対する複製された前記データの書き込み要求を、前記複数の記憶装置のそれぞれに応じたドライバに送信し、
複製された前記データの書き込み要求を前記ドライバに送信してから前記ドライバによるデータの書き込み処理がリトライオーバーするより前に所定時間が経過した際に、前記複数の記憶装置のうち、少なくとも何れかの記憶装置に対する書き込み成功の応答がある場合には、前記アプリケーションソフトウェアに書き込み成功を応答し、書き込み成功の応答がない記憶装置をミラーリングの対象から除外する、
制御部を有することを特徴とする制御装置。
【符号の説明】
【０２００】
１００  制御装置
１０１  アプリケーションソフトウェア
１０２  ミラーソフト
１０３  ディスクドライバ
２０１  伝送路
２０２  ディスク装置
３００  バス
３０１  ＣＰＵ
３０２  メモリ
３０３  ディスクＩ／Ｆ
４００  ミラー状態管理テーブル
４１０  発行Ｉ／Ｏのキュー管理テーブル
４２０  発行Ｉ／Ｏ管理テーブル
５１１  第１の受付部
５１２  第１の管理部
５１３  第１の応答部
５２１  第２の受付部
５２２  複製部
５２３  要求部
５２４  第２の管理部
５２５  第２の応答部
５２６  解放部
ｍ１，ｍ２  記憶領域
ｄ１，ｄ２  ディスク
ｂ１，ｂ２，ｂ２’  バッファ
ｍａ１，ｍａ２  管理域
ｄａ１，ｄａ２  データ域
ｔ１，ｔ２  監視タイマー
【図１】
0006680030.tif 000002
【図２】
0006680030.tif 000003
【図３】
0006680030.tif 000004
【図４】
0006680030.tif 000005
【図５】
0006680030.tif 000006
【図６】
0006680030.tif 000007
【図７】
0006680030.tif 000008
【図８】
0006680030.tif 000009
【図９】
0006680030.tif 000010
【図１０】
0006680030.tif 000011
【図１１】
0006680030.tif 000012
【図１２】
0006680030.tif 000013
【図１３】
0006680030.tif 000014
【図１４】
0006680030.tif 000015
【図１５】
0006680030.tif 000016
【図１６】
0006680030.tif 000017
【図１７】
0006680030.tif 000018
【図１８】
0006680030.tif 000019
【図１９】
0006680030.tif 000020