(57)【要約】【課題】上位アプリケーションの入出力制御に対する処理完了応答の高速化を図り、上位アプリケーションの入出力制御に占有される時間を短縮する。【解決手段】入出力制御部１２ａは、上位アプリケーション１１からの入出力要求に応じて、冗長構成の複数の記憶装置２−１，２−２に対して同時に入出力制御を行なう。応答処理部１２ｂは、複数の記憶装置２−１，２−２に対して同時に入出力制御を行なった結果、複数の記憶装置２−１，２−２のうちのいずれか一つの第１記憶装置からの処理完了通知を受信すると、上位アプリケーション１１に対して、入出力要求に対応する処理の完了応答を出力する。【選択図】図１
2016057876.tif 000002
【特許請求の範囲】
【請求項１】
上位アプリケーションからの入出力要求に応じて、冗長構成の複数の記憶装置に対して同時に入出力制御を行なう入出力制御部と、
前記複数の記憶装置に対して同時に前記入出力制御を行なった結果、前記複数の記憶装置のうちのいずれか一つの第１記憶装置からの処理完了通知を受信すると、前記上位アプリケーションに対して、前記入出力要求に対応する処理の完了応答を出力する応答処理部と、を有する、情報処理装置。
【請求項２】
前記応答処理部は、
前記入出力制御を開始してから第１所定時間内に前記第１記憶装置からの処理完了通知を受信するとともに前記第１所定時間内に前記複数の記憶装置のうちの前記第１記憶装置以外の第２記憶装置からの処理完了通知を受信しない場合、前記上位アプリケーションに対して前記完了応答を出力する、請求項１に記載の情報処理装置。
【請求項３】
前記入出力制御部は、
前記上位アプリケーションからの前記入出力要求を処理するための第１メモリ領域とは異なる第２メモリ領域を前記記憶装置毎に確保し、
前記入出力要求に係る情報を前記第１メモリ領域から前記第２メモリ領域にコピーし、
前記第２メモリ領域にコピーされた前記入出力要求に係る情報を用いて各記憶装置に対する前記入出力制御を行なう、請求項２に記載の情報処理装置。
【請求項４】
前記入出力制御部は、
前記第２記憶装置用の前記第２メモリ領域に保存された前記入出力要求に係る情報を用いて、前記第１所定時間が経過した後に仮縮退状態に切り替えられた前記第２記憶装置に対する前記入出力制御を行なう一方、
前記第１記憶装置用の前記第２メモリ領域に保存された、前記上位アプリケーションからの新たな入出力要求に係る情報を用いて、前記新たな入出力要求に応じた入出力制御を前記第１記憶装置に対して行ない、
前記新たな入出力要求に応じた入出力制御がライトアクセスに係る場合、前記ライトアクセスを行なった前記第１記憶装置の領域の位置情報を、差分情報として、差分情報管理領域に記録する、請求項３に記載の情報処理装置。
【請求項５】
前記第１所定時間が経過してから第２所定時間内に前記第２記憶装置からの処理完了通知を受信すると、前記第２記憶装置を前記仮縮退状態から復旧し、前記差分情報管理領域に記録された前記差分情報に対応する差分データを、前記第１記憶装置から前記第２記憶装置にコピーする復旧処理部を有する、請求項４に記載の情報処理装置。
【請求項６】
前記復旧処理部は、
前記第１所定時間が経過してから前記第２所定時間内に前記第２記憶装置からの処理完了通知を受信しない場合、前記第２記憶装置を前記仮縮退状態から縮退状態に変更する、請求項５に記載の情報処理装置。
【請求項７】
上位アプリケーションからの入出力要求に応じて、冗長構成の複数の記憶装置に対して同時に入出力制御を行ない、
前記複数の記憶装置に対して同時に前記入出力制御を行なった結果、前記複数の記憶装置のうちのいずれか一つの第１記憶装置からの処理完了通知を受信すると、前記上位アプリケーションに対して、前記入出力要求に対応する処理の完了応答を出力する、
処理を、コンピュータに実行させる、入出力制御プログラム。
【請求項８】
コンピュータが、
上位アプリケーションからの入出力要求に応じて、冗長構成の複数の記憶装置に対して同時に入出力制御を行ない、
前記複数の記憶装置に対して同時に前記入出力制御を行なった結果、前記複数の記憶装置のうちのいずれか一つの第１記憶装置からの処理完了通知を受信すると、前記上位アプリケーションに対して、前記入出力要求に対応する処理の完了応答を出力する、入出力制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、入出力制御プログラム、及び入出力制御方法に関する。
【背景技術】
【０００２】
情報処理装置と記憶装置とを含む情報処理システムにおいて、情報処理装置は、記憶装置に対し入出力要求を発行し、記憶装置のデータに対するライトアクセスやリードアクセスを行なう。ここで、情報処理装置は、例えばサーバ，パーソナルコンピュータである。入出力要求は、例えばライトコマンド，リードコマンドであり、情報処理装置においてアプリケーションプログラムを実行することによって発行される。なお、以降、「入出力」は「Ｉ／Ｏ（Input/Output）」と記載され、「アプリケーションプログラム」は「アプリケーション」もしくは「アプリ」と記載される場合がある。
【０００３】
上述のような情報処理システムにおいては、記憶装置のディスク故障に対する可用性を向上させるため、複数の記憶装置を備えミラーリングによる冗長構成を採ることが知られている。ミラーリングによる冗長構成を採る場合、ディスク異常が発生しＩ／Ｏエラーが生じると、異常の生じたディスクが縮退され、縮退されたディスクと対を成す正常なディスクを用いて業務が継続される。
【０００４】
例えば、冗長構成の２つのディスク（記憶装置）のうちの一方でＩ／Ｏエラーが生じた場合の、情報処理システムの動作について、図１４を参照しながら説明する。図１４に示す例では、冗長構成の２つのディスク２０１，２０２の両方が現用（運用状態）である。つまり、冗長構成の２つのディスク２０１，２０２の両方がアクティブな状態である。このような状態をアクティブ−アクティブという。
【０００５】
図１４に示すように、ディスク２０１，２０２は、サーバ１００に接続される。サーバ１００のＣＰＵ（Central Processing Unit）１０１は、アプリケーション１１０を実行する。ＣＰＵ１０１は、ディスク管理ソフトウエアを実行することでディスク管理部１２０として機能する。ＣＰＵ１０１は、ドライバソフトウエアを実行することで、ディスク２０１，２０２のそれぞれに対応するディスクドライバ１３１，１３２として機能する。
【０００６】
図１４に示す情報処理システムにおいて、アプリケーション１１０はＩ／Ｏ要求を発行する（矢印Ａ１参照）。ディスク管理部１２０は、アプリケーション１１０からのＩ／Ｏ要求を受けると、ディスクドライバ１３１，１３２を介し、２つのディスク２０１，２０２に対して同時にＩ／Ｏ要求を発行する（矢印Ａ２ａ，Ａ２ｂ参照）。ディスクドライバ１３１は、一方のディスク２０１からの処理完了通知を受けるとＩ／Ｏ完了をディスク管理部１２０に通知する（矢印Ａ３参照）。
【０００７】
このとき、他方のディスク２０２が正常であれば処理完了通知をディスクドライバ１３２に返し、ディスクドライバ１３２もＩ／Ｏ完了をディスク管理部１２０に通知する。そして、ディスクドライバ１３１，１３２の両方からＩ／Ｏ完了を通知されたディスク管理１２０は、アプリケーション１１０にＩ／Ｏ完了を通知する。
【０００８】
これに対し、図１４に示すように、ディスク２０２でＩ／Ｏエラーが生じている場合、ディスク２０２は、ディスクドライバ１３２にＩ／Ｏ完了通知を返すことができない。このとき、ディスクドライバ１３２は、ディスク２０２からのＩ／Ｏ完了通知の待ち状態となり、所定回数のリトライ処理もしくは所定時間のタイムアウト待機を行なう。所定回数のリトライ処理を実行するか、もしくは、待ち時間が所定時間を超えると（符号Ａ４：Ｉ／Ｏ再送オーバ参照）、ディスクドライバ１３２は、Ｉ／Ｏエラーをディスク管理部１２０に通知する（矢印Ａ５参照）。
【０００９】
ディスク管理部１２０は、ディスクドライバ１３２からのＩ／Ｏエラーを受けると、ディスク２０２を縮退させ情報処理システムから切り離す（矢印Ａ６参照）。この後、ディスク管理部１２０は、アプリケーション１１０にＩ／Ｏ完了を通知する。これにより、アクティブ−アクティブの情報処理システムでは、２つのディスク２０１，２０２のいずれか一方でＩ／Ｏエラーが生じても、業務が、停止されることなく継続される。
【００１０】
なお、下記特許文献１では、現用の記憶装置と待機の記憶装置とが備えられ、処理装置（サーバ等）は、通常の運用時には、現用の記憶装置に対してアクセスを行なう。現用の記憶装置は、待機の記憶装置との間でコマンド等をやり取りし、ミラーリングを行なう。下記特許文献１では、冗長構成の２つの記憶装置の一方が現用（運用状態；アクティブ）であり、他方が待機状態（スタンバイ）である。このような状態を、上述したアクティブ−アクティブに対しアクティブ−スタンバイという。アクティブ−アクティブとアクティブ−スタンバイとでは上述のごとく構成が異なる。また、アクティブ−アクティブでは、一方の記憶装置に故障が生じても業務を停止させることなく他方の記憶装置による運用を継続することができる。一方、アクティブ−スタンバイでは、現用の記憶装置が故障した場合、現用系から待機系への切替を行なう間、業務が停止することになる。さらに、下記特許文献１に開示された技術は、現用の記憶装置のオーバヘッドを小さくするものであって、現用の記憶装置の故障時の、Ｉ／Ｏ要求に対する応答時間を短縮するものではない。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開平０９−１７１４４１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
上述したように、図１４に示す情報処理システムでは、ディスク２０２で異常が発生しＩ／Ｏ応答が無い場合、ディスクドライバ１３２は、リトライ処理もしくはタイムアウト待機を行なった後に、アプリケーション１１０にＩ／Ｏエラーを返している。しかし、ディスクドライバは、リトライ処理もしくはタイムアウト待機を行なっている間、Ｉ／Ｏの無応答状態になり、その間、業務が停止してしまう。つまり、上位アプリケーションからのＩ／Ｏ要求に応じたＩ／Ｏ制御に対する処理完了応答が遅くなり、上位アプリケーションのＩ／Ｏ制御に占有される時間（業務の停止時間）が長くなる。
【００１３】
このように、情報処理システムの業務が止まることで、業務の停止時間分の損害が発生する。このため、ディスクのＩ／Ｏ応答が遅い場合、ディスクドライバで粘ることなく、当該ディスクを切り離し、業務の停止時間をできるだけ短くすることが望まれている。
【００１４】
また、近年のビッグデータ化に伴い、１システム当たりのディスク本数が大幅に増加している。ディスク本数の増加に伴って、ディスク故障の発生数も増加しており、ディスクの信頼性や、ディスク故障時の業務停止時間短縮が重要視されている。
【００１５】
さらに、ＣＰＵやメモリなどの性能の向上に伴ってサーバの性能も向上しているため、ディスクへのＩ／Ｏ性能に対する要求も厳しくなってきている。したがって、上位アプリケーションのＩ／Ｏ制御に対する処理完了応答に要する時間をできるだけ短縮することが望まれている。
【００１６】
ただし、記憶装置として汎用的ディスクを用いている場合、ディスク側の構成を変更することができない。このため、ディスクよりも上位側で、上記処理完了応答の高速化を実現することが望まれる。
【００１７】
一つの側面で、本発明は、上位アプリケーションの入出力制御に対する処理完了応答の高速化を図り、上位アプリケーションの入出力制御に占有される時間を短縮することを目的とする。
【課題を解決するための手段】
【００１８】
本件の情報処理装置は、入出力制御部および応答処理部を有する。前記入出力制御部は、上位アプリケーションからの入出力要求に応じて、冗長構成の複数の記憶装置に対して同時に入出力制御を行なう。前記応答処理部は、前記複数の記憶装置に対して同時に前記入出力制御を行なった結果、前記複数の記憶装置のうちのいずれか一つの第１記憶装置からの処理完了通知を受信すると、前記上位アプリケーションに対して、前記入出力要求に対応する処理の完了応答を出力する。
【発明の効果】
【００１９】
上位アプリケーションの入出力制御に対する処理完了応答の高速化を図り、上位アプリケーションの入出力制御に占有される時間を短縮することができる。
【図面の簡単な説明】
【００２０】
【図１】本発明の一実施形態としての情報処理装置のハードウェア構成および機能構成を示すブロック図である。
【図２】本実施形態のボリューム構成・状態管理情報の例を示す図である。
【図３】本実施形態の差分情報（ビットマップ）の例を示す図である。
【図４】冗長構成の２つのディスクがいずれも正常である場合の、本実施形態の動作を説明する図である。
【図５】冗長構成の２つのディスクのうちの一方が異常である場合の、本実施形態の動作を説明する図である。
【図６】冗長構成の２つのディスクのうちの他方が異常である場合の、本実施形態の動作を説明する図である。
【図７】冗長構成の２つのディスクのうちの一方が異常である場合の、本実施形態の動作をより具体的に説明する図である。
【図８】本実施形態の仮縮退復旧動作を具体的に説明する図である。
【図９】本実施形態のディスク管理部の動作を説明するブロック図である。
【図１０】本実施形態のディスクドライバへのＩ／Ｏ要求発行処理を説明するフローチャートである。
【図１１】本実施形態の書込み処理時におけるディスク管理部の動作を説明するフローチャートである。
【図１２】本実施形態の読出し処理時におけるディスク管理部の動作を説明するフローチャートである。
【図１３】本実施形態の仮縮退復旧スレッドの処理手順を説明するフローチャートである。
【図１４】冗長構成の２つのディスクのうちの一方でＩ／Ｏエラーが生じた場合の、情報処理システムの動作を説明する図である。
【発明を実施するための形態】
【００２１】
以下に、図面を参照し、本願の開示する情報処理装置、入出力制御プログラム、及び入出力制御方法の実施形態について、詳細に説明する。ただし、以下に示す実施形態は、あくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能を含むことができる。そして、各実施形態は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【００２２】
〔１〕本実施形態の構成
まず、図１に示すブロック図を参照しながら、本発明の一実施形態としての情報処理装置１のハードウェア構成および機能構成について説明する。
【００２３】
本実施形態においては、情報処理装置としてのサーバ１と、冗長構成の複数（本実施形態では２台）の記憶装置２−１，２−２とが備えられている。なお、以下では、２台の記憶装置を区別する場合には符号２−１，２−２を用い、任意の記憶装置を指す場合には符号２を用いる。
【００２４】
図１に示す例において、各記憶装置２は、サーバ１に外付けされているが、サーバ１に内蔵されてもよい。また、各記憶装置２は、例えばＨＤＤ（Hard Disk Drive），ＳＳＤ（Solid State Drive）を複数含んでいてもよく、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）を構成していてもよい。
【００２５】
各記憶装置２は、複数のディスク（ＨＤＤ）を有している。記憶装置２−１は、ディスク＃１，…，ディスク＃ｍを有し、記憶装置２−２は、ディスク＃２，…，ディスク＃ｎを有している。ｍ，ｎは、３以上の整数である。本実施形態では、記憶装置２−１のディスク＃１と記憶装置２−２のディスク＃２とがミラーリングされる。なお、ミラーリングを行なう単位は、一ディスク単位でもよいし、複数ディスク単位（仮想ボリューム単位）でもよい。
【００２６】
各記憶装置２には、サーバ１からのＩ／Ｏ要求を受け当該Ｉ／Ｏ要求に応じたディスクの制御等を行なうＣＭ（Controller Module；図示略）が備えられている。
【００２７】
また、記憶装置２−１には、図２を参照しながら後述するボリューム構成・状態管理情報３１等を保存するディスク＃１，…，＃ｍ用状態管理領域４１ａ，…，４ｍａが備えられる。記憶装置２−１には、図３を参照しながら後述する差分情報（ビットマップ）５１等を保存するディスク＃１，…，＃ｍ用差分情報管理領域４１ｂ，…，４ｍｂが備えられる。領域４１ａ，…，４ｍａおよび領域４１ｂ，…，４ｍｂは、それぞれディスク＃１，…，＃ｍ上に確保されてもよいし、記憶装置２−１内に備えられＣＭがアクセス可能なＲＡＭ（Random Access Memory）等のメモリ（図示略）上に備えられてもよい。なお、領域４１ａ，…，４ｍａおよび領域４１ｂ，…，４ｍｂに保存される、ボリューム構成・状態管理情報３１等や差分情報（ビットマップ）５１等は、例えば、記憶装置２−１のＣＭによって更新される。
【００２８】
同様に、記憶装置２−２には、図２を参照しながら後述するボリューム構成・状態管理情報３２等を保存するディスク＃２，…，＃ｎ用状態管理領域４２ａ，…，４ｎａが備えられる。記憶装置２−２には、図３を参照しながら後述する差分情報（ビットマップ）５２等を保存するディスク＃２，…，＃ｎ用差分情報管理領域４２ｂ，…，４ｎｂが備えられる。領域４２ａ，…，４ｎａおよび領域４２ｂ，…，４ｎｂは、それぞれディスク＃２，…，＃ｎ上に確保されてもよいし、記憶装置２−２内に備えられＣＭがアクセス可能なＲＡＭ等のメモリ（図示略）上に備えられてもよい。なお、領域４２ａ，…，４ｎａおよび領域４２ｂ，…，４ｎｂに保存される、ボリューム構成・状態管理情報３２等や差分情報（ビットマップ）５２等は、例えば、記憶装置２−２のＣＭによって更新される。
【００２９】
サーバ１は、Ｉ／Ｏ要求を記憶装置２に対し発行し、記憶装置２のデータに対するライト（書込み）アクセスやリード（読出し）アクセスを行なう。Ｉ／Ｏ要求は、例えばライトコマンド，リードコマンドであり、サーバ１において上位アプリケーションプログラム１１を実行することによって発行される。
【００３０】
サーバ１と２つの記憶装置２−１，２−２との間は、サーバ１から２つの記憶装置２−１，２−２に同時アクセス可能に、ＦＣ−ＳＷ（Fibre Channel-スイッチ）３によって接続されている。なお、図１において、サーバ１におけるＦＣ−ＳＷ３とのインタフェースや、各記憶装置２におけるＦＣ−ＳＷ３とのインタフェースの図示は省略されている。また、図１では図示しないが、ＦＣ−ＳＷ３を介してサーバ１と２つの記憶装置２−１，２−２との間を通信可能に接続するパスは、マルチパス化され冗長化されている。
【００３１】
サーバ１には、ＣＰＵ１０とメモリ２０とが備えられている。ＣＰＵ１０は、上位アプリケーションプログラム１１を実行する。また、ＣＰＵ１０は、ディスク管理ソフトウエア（入出力制御プログラム）を実行することでディスク管理部１２として機能する。ディスク管理部１２には、後述する入出力制御部１２ａ，応答処理部１２ｂおよび復旧処理部１２ｃとしての機能が含まれる。さらに、ＣＰＵ１０は、ドライバソフトウエアを実行することで、ディスクドライバ１３（例えば、ディスク＃１，＃２のそれぞれに対応するディスクドライバ１３１，１３２）として機能する。
【００３２】
ＣＰＵ１０によって実行される上位アプリケーションプログラム１１，ディスク管理ソフトウエアおよびドライバソフトウエアは、フレキシブルディスク，ＣＤ（ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−ＲＷなど），ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−ＲＡＭ，ＤＶＤ−Ｒ，ＤＶＤ−ＲＷ，ＤＶＤ＋Ｒ，ＤＶＤ＋ＲＷなど），ブルーレイディスク等のコンピュータ読取可能な記録媒体に記録された形態で提供される。この場合、ＣＰＵ１０は、プログラム等を、当該記録媒体から読み取って内部記憶装置（例えばメモリ２０）または外部記憶装置に転送し格納して用いる。
【００３３】
メモリ２０は、種々のデータや上述したプログラム等を格納するもので、メモリ２０としては、例えばＲＡＭ，ＲＯＭ（Read Only Memory），ＨＤＤ，ＳＳＤが用いられる。
【００３４】
メモリ２０には、アプリ用のＩ／Ｏ要求管理情報領域２０ａおよびＩ／Ｏバッファ領域２０ｂが必要に応じて確保される。領域２０ａおよび２０ｂは、上位アプリケーション１１からのＩ／Ｏ要求を処理するための第１メモリ領域である。領域２０ａおよび２０ｂは、Ｉ／Ｏ要求発行時に上位アプリケーション１１によって確保される。一方、領域２０ａおよび２０ｂは、当該Ｉ／Ｏ要求に対応する完了応答を受けた上位アプリケーション１１によって解放される。
【００３５】
そして、アプリ用Ｉ／Ｏ要求管理情報領域２０ａには、上位アプリケーション１１からのＩ／Ｏ要求そのものを含む管理情報が保存される。アプリ用Ｉ／Ｏバッファ領域２０ｂには、Ｉ／Ｏ要求が書込み要求である場合、記憶装置２（ディスク＃１および＃２）に書き込むべきデータが保存される。また、アプリ用Ｉ／Ｏバッファ領域２０ｂには、Ｉ／Ｏ要求が読出し要求である場合、記憶装置２（ディスク＃１または＃２）から読み出されたデータが保存される。
【００３６】
また、メモリ２０には、ディスク＃１用のＩ／Ｏ要求管理情報領域２１ａおよびＩ／Ｏバッファ領域２１ｂが必要に応じて確保される。領域２１ａおよび２１ｂは、第１メモリ領域２０ａ，２０ｂとは異なる第２メモリ領域である。領域２１ａおよび２１ｂは、上位アプリケーション１１からディスク＃１または＃２へのＩ／Ｏ要求を受けたディスク管理部１２によって確保される。一方、領域２１ａおよび２１ｂは、上位アプリケーション１１へ当該Ｉ／Ｏ要求に対応する完了応答を発行する際にディスク管理部１２によって解放される。
【００３７】
そして、ディスク＃１用Ｉ／Ｏ要求管理情報領域２１ａには、アプリ用Ｉ／Ｏ要求管理情報領域２０ａに保存された管理情報が、ディスク管理部１２によってコピーされる。ディスク＃１用Ｉ／Ｏバッファ領域２１ｂには、Ｉ／Ｏ要求が書込み要求である場合、アプリ用Ｉ／Ｏバッファ領域２０ｂに保存された書込みデータが、ディスク管理部１２によってコピーされる。また、ディスク＃１用Ｉ／Ｏバッファ領域２１ｂには、Ｉ／Ｏ要求が読出し要求である場合、ディスク＃１から読み出されたデータが保存される。
【００３８】
同様に、メモリ２０には、ディスク＃２用のＩ／Ｏ要求管理情報領域２２ａおよびＩ／Ｏバッファ領域２２ｂが必要に応じて確保される。領域２２ａおよび２２ｂも、第１メモリ領域２０ａ，２０ｂとは異なる第２メモリ領域である。領域２２ａおよび２２ｂは、上位アプリケーション１１からディスク＃１または＃２へのＩ／Ｏ要求を受けたディスク管理部１２によって確保される。一方、領域２２ａおよび２２ｂは、上位アプリケーション１１へ当該Ｉ／Ｏ要求に対応する完了応答を発行する際にディスク管理部１２によって解放される。
【００３９】
そして、ディスク＃２用Ｉ／Ｏ要求管理情報領域２２ａには、アプリ用Ｉ／Ｏ要求管理情報領域２０ａに保存された管理情報が、ディスク管理部１２によってコピーされる。ディスク＃２用Ｉ／Ｏバッファ領域２２ｂには、Ｉ／Ｏ要求が書込み要求である場合、アプリ用Ｉ／Ｏバッファ領域２０ｂに保存された書込みデータが、ディスク管理部１２によってコピーされる。また、ディスク＃２用Ｉ／Ｏバッファ領域２２ｂには、Ｉ／Ｏ要求が読出し要求である場合、ディスク＃２から読み出されたデータが保存される。
【００４０】
さらに、メモリ２０には、ディスク＃１用の状態管理領域２１ｃおよび差分情報管理領域２１ｄが必要に応じて確保される。ディスク＃１用状態管理領域２１ｃには、ディスク管理部１２によって、記憶装置２−１のディスク＃１用状態管理領域４１ａにおけるディスク＃１のボリューム構成・状態管理情報３１（図２参照）が保存される。ディスク＃１用差分情報管理領域２１ｄには、ディスク管理部１２によって、記憶装置２−１のディスク＃１用差分情報管理領域４１ｂにおけるディスク＃１用差分情報（ビットマップ）５１（図３参照）が保存される。
【００４１】
同様に、メモリ２０には、ディスク＃２用の状態管理領域２２ｃおよび差分情報管理領域２２ｄが必要に応じて確保される。ディスク＃２用状態管理領域２２ｃには、ディスク管理部１２によって、記憶装置２−２のディスク＃２用状態管理領域４２ａにおけるディスク＃２のボリューム構成・状態管理情報３２（図２参照）が保存される。ディスク＃２用差分情報管理領域２２ｄには、ディスク管理部１２によって、記憶装置２−２のディスク＃２用差分情報管理領域４２ｂにおけるディスク＃２用差分情報（ビットマップ）５２（図３参照）が保存される。
【００４２】
ここで、図２および図３を参照しながら、本実施形態のボリューム構成・状態管理情報３１，３２および差分情報（ビットマップ）５１，５２について説明する。図２は、本実施形態のボリューム構成・状態管理情報３１，３２の例を示す図である。図３は、本実施形態の差分情報（ビットマップ）５１，５２の例を示す図である。
【００４３】
図２に示すように、ボリューム構成・状態管理情報には、ディスク毎に、デバイス名と状態とが含まれる。ここで、デバイス名は、対象ディスクを特定すべく、ＯＳ（Operating System）によって認識されるものである。状態は、デバイス名によって特定されるディスクの状態に対応する値である。当該状態としては、例えば以下の４つの状態(11)〜(14)のいずれか一つに対応する値が設定される。
【００４４】
状態(11)：正常
状態(12)：コピー（正常ディスクから異常ディスクへのデータコピー中）
状態(13)：縮退（ミラーリングから切り離されＩ／Ｏ要求の対象とならない状態）
状態(14)：仮縮退（ミラーリングから切り離されＩ／Ｏ要求の対象とならない状態ではあるが正常な状態に復旧する可能性のある状態：  仮縮退状態のディスクが存在する際にボリュームに対する書込みを行なった場合、当該書込み箇所の位置情報を差分情報として後述するビットマップ５１，５２等に記録する）
【００４５】
図２において、ボリューム構成・状態管理情報３１には、ディスク＃１のデバイス名sdaと当該ディスク＃１の状態「正常」とが設定されている。このようなボリューム構成・状態管理情報３１は、記憶装置２−１のディスク＃１用状態管理領域４１ａとサーバ１のメモリ２０のディスク＃１用状態管理領域２１ｃとに保存される。同様に、ディスク＃２のボリューム構成・状態管理情報３２には、ディスク＃２のデバイス名sdbと当該ディスク＃２の状態「縮退」とが設定されている。このようなボリューム構成・状態管理情報３２は、記憶装置２−２のディスク＃２用状態管理領域４２ａとサーバ１のメモリ２０のディスク＃２用状態管理領域２２ｃとに保存される。
【００４６】
差分情報は、前述した通り、仮縮退状態のディスクが存在する際にボリュームに対する書込み（ライトアクセス）を行なった場合、当該書込み箇所の位置情報である。より具体的に、ディスク＃１またはディスク＃２用の差分情報５１または５２は、図３に示すようなビットマップとして記録される。
【００４７】
つまり、ビットマップ５１，５２は、仮縮退状態のディスクが存在する場合に当該仮縮退状態のディスクのミラー対象ディスクにおけるボリュームの書込み箇所を管理する。例えば、ディスク＃２が仮縮退状態である場合には、ディスク＃２のミラー対象ディスク＃１におけるボリュームの書込み箇所が、ビットマップ５１によって管理される。
【００４８】
このとき、例えば、ビットマップ５１，５２の１ビットによって、ボリュームの１ＭＢ分のデータが管理される。第ｋビットは、ボリュームのオフセット（ｋ−１）ＭＢ〜ｋＭＢ−１Ｂの領域に対して書込みが行なわれたか否かを管理する。書込みが行なわれた場合に当該第ｋビットには“１”が設定され、書込みが行なわれていない場合に当該第ｋビットには“０”が設定される。後述するように、“１”を設定されたビットに対応するボリュームの領域のデータは、仮縮退状態のディスクを復旧する際に、正常ディスクから仮縮退状態のディスクにコピーされる。
【００４９】
次に、ＣＰＵ１０におけるディスク管理部１２に含まれる入出力制御部１２ａ，応答処理部１２ｂおよび復旧処理部１２ｃとしての機能について説明する。
【００５０】
入出力制御部１２ａは、上位アプリケーション１１からのＩ／Ｏ要求に応じて、冗長構成の２台の記憶装置２−１，２−２（ディスク＃１，＃２）に対して同時に入出力制御を行なう。本実施形態では、冗長構成の２つのディスク＃１，＃２の両方が現用（運用状態；アクティブ状態）であり、上述したアクティブ−アクティブのシステムが対象になっている。
【００５１】
なお、Ｉ／Ｏ要求が書込み要求である場合、２つのディスク＃１，＃２がＩ／Ｏ要求の対象になる。このとき、一方のディスクは上位アプリケーション１１によって指定され、他方のディスクとしては、一方のディスクと冗長構成を成すべく予め決められたディスクが選択される。また、Ｉ／Ｏ要求が読出し要求である場合は、図１２を参照しながら後述するごとく、上位アプリケーション１１によって指定される一のディスクのみがＩ／Ｏ要求の対象になる。
【００５２】
応答処理部１２ｂは、２つのディスク＃１，＃２に対して同時にＩ／Ｏ制御を行なった結果、下記条件を満たす場合、上位アプリケーション１１に対して、当該Ｉ／Ｏ要求に対応する処理の完了応答を出力する。当該条件とは、Ｉ／Ｏ制御を開始してから第１所定時間内に２つのディスク＃１，＃２のうちのいずれか一方（第１記憶装置）からの処理完了通知を受信するとともに、第１所定時間内に他方のディスク（第２記憶装置）からの処理完了通知を受信しない場合である。このとき、他方のディスクはディスク管理部１２によって仮縮退状態に変更され、当該他方のディスク用のボリューム構成・状態管理情報３１，３２における状態が仮縮退状態に更新される。
【００５３】
なお、第１所定時間は、ユーザ，オペレータ等によって適宜設定される。また、第１所定時間は、ディスク管理部１２におけるタイマ機能によってディスク毎に計時される。第１所定時間の計時開始タイミングつまりタイマ起動タイミングは、Ｉ／Ｏ制御開始時点である。当該Ｉ／Ｏ制御開始時点は、ディスク管理部１２が上位アプリケーション１１からＩ／Ｏ要求を受信した時点であってもよいし、図１０を参照しながら後述するステップＳ１４の処理の終了タイミングであってもよい。
【００５４】
また、入出力制御部１２ａは、上述したように、上位アプリケーション１１からのＩ／Ｏ要求を処理するための第１メモリ領域２０ａ，２０ｂとは異なる第２メモリ領域２１ａ，２１ｂ，２２ａ，２２ｂをディスク毎に確保する。そして、入出力制御部１２ａは、Ｉ／Ｏ要求に係る情報を第１メモリ領域２０ａ，２０ｂから第２メモリ領域２１ａ，２１ｂ，２２ａ，２２ｂにコピーする。さらに、入出力制御部１２ａは、第２メモリ領域２１ａ，２１ｂ，２２ａ，２２ｂにコピーされたＩ／Ｏ要求に係る情報を用い、ディスクドライバ１３経由で各ディスクに対するＩ／Ｏ制御を行なう。
【００５５】
ディスクドライバ１３１または１３２（入出力制御部１２ａ）は、他方のディスク用の第２メモリ領域２１ａ，２１ｂまたは２２ａ，２２ｂに保存されたＩ／Ｏ要求に係る情報を用いて、第１所定時間が経過した後に仮縮退状態に切り替えられた他方のディスクに対するＩ／Ｏ制御を行なう。また、入出力制御部１２ａは、一方のディスク用の第２メモリ領域２１ａ，２１ｂまたは２２ａ，２２ｂに保存された、上位アプリケーション１１からの新たなＩ／Ｏ要求に係る情報を用いて、当該新たなＩ／Ｏ要求に応じたＩ／Ｏ制御を一方のディスクに対して行なう。そして、入出力制御部１２ａは、当該新たなＩ／Ｏ要求に応じたＩ／Ｏ制御がライトアクセスに係る場合、当該ライトアクセスを行なった領域の位置情報を、差分情報管理領域２１ｄ，２２ｄ，４１ｂ，４２ｂにおけるビットマップ５１，５２に記録する。
【００５６】
復旧処理部１２ｃは、第１所定時間が経過してから第２所定時間内に他方のディスクからの処理完了通知を受信すると、他方のディスクを仮縮退状態から復旧させる。このとき、当該他方のディスク用のボリューム構成・状態管理情報３１，３２における状態が仮縮退状態からコピー状態（正常状態）に更新される。この後、復旧処理部１２ｃは、ビットマップ５１，５２で“１”を設定されたビットに対応する差分データを、一方のディスクから他方のディスクにコピーする。
【００５７】
なお、第２所定時間は、ユーザ，オペレータ等によって適宜設定される。また、第２所定時間は、ディスク管理部１２におけるタイマ機能によってディスク毎に計時される。第２所定時間の計時開始タイミングつまりタイマ起動タイミングは、例えば図１１や図１２を参照しながら後述するごとく、上述した第１所定時間の計時完了時点である。
【００５８】
一方、復旧処理部１２ｃは、第１所定時間が経過してから第２所定時間内に他方のディスクからの処理完了通知を受信しない場合、当該他方のディスクを仮縮退状態から縮退状態に変更する。このとき、当該他方のディスク用のボリューム構成・状態管理情報３１，３２における状態が仮縮退状態から縮退状態に更新される。
【００５９】
〔２〕本実施形態の動作
次に、図４〜図１３を参照ながら、上述のごとく構成された本実施形態のサーバ１を含む情報処理システムの動作について説明する。
【００６０】
まず、図４〜図６を参照しながら、本実施形態のサーバ１の基本的な動作を説明する。図４は、冗長構成の２つのディスク＃１，＃２がいずれも正常である場合の、本実施形態の動作を説明する図である。図５は、冗長構成の２つのディスク＃１，＃２のうちの一方（ディスク＃１）が異常である場合の、本実施形態の動作を説明する図である。図６は、冗長構成の２つのディスク＃１，＃２のうちの他方（ディスク＃２）が異常である場合の、本実施形態の動作を説明する図である。
【００６１】
図４に示すように、冗長構成の２つのディスク＃１，＃２がいずれも正常である場合、ディスク管理部１２（入出力制御部１２ａ）は、上位アプリケーション１１からＩ／Ｏ要求を受信すると（図４のタイミングｔ１参照）、以下の動作を行なう。つまり、ディスク管理部１２は、ディスクドライバ１３１，１３２を介し、２つのディスク＃１，＃２に対して同時もしくは略同時にＩ／Ｏ要求を発行しＩ／Ｏ制御を開始する（図４のタイミングｔ２ａ，ｔ３ａ；ｔ２ｂ，ｔ３ｂ参照）。このとき、タイミングｔ２ａおよびｔ２ｂでそれぞれディスク＃１，＃２用のタイマが起動され、第１所定時間の計時が開始される。
【００６２】
図４に示す例では、ディスク＃１，＃２がいずれも正常であるため、ディスク管理部１２は、ディスクドライバ１３１，１３２を介し、第１所定時間内にディスク＃１，＃２の両方から処理完了通知を受信する（図４のタイミングｔ４ａ，ｔ５ａ；ｔ４ｂ，ｔ５ｂ参照）。これに応じ、ディスク管理部１２（応答処理部１２ｂ）は、上位アプリケーション１１に対し完了応答を出力する（図４のタイミングｔ６参照）。このとき、上位アプリケーション１１がＩ／Ｏ要求を発行してから完了応答を受けるまでのＩ／Ｏ応答時間（タイミングｔ１とｔ６との時間間隔）は第１所定時間よりも短い。
【００６３】
図５に示すように、ディスク＃１が異常でありディスク＃２が正常である場合も、ディスク管理部１２は、上位アプリケーション１１からＩ／Ｏ要求を受信すると（図５のタイミングｔ１参照）、以下の動作を行なう。つまり、ディスク管理部１２は、ディスクドライバ１３１，１３２を介し、２つのディスク＃１，＃２に対して同時もしくは略同時にＩ／Ｏ要求を発行しＩ／Ｏ制御を開始する（図５のタイミングｔ２ａ，ｔ３ａ；ｔ２ｂ，ｔ３ｂ参照）。このとき、タイミングｔ２ａおよびｔ２ｂでそれぞれディスク＃１，＃２用のタイマが起動され、第１所定時間の計時が開始される。
【００６４】
図５に示す例では、ディスク＃２が正常であるため、ディスク管理部１２は、ディスクドライバ１３２を介し、第１所定時間内にディスク＃２から処理完了通知を受信する（図５のタイミングｔ４ｂ，ｔ５ｂ参照）。しかし、ディスク＃１は異常であるため、第１所定時間の計時がタイムアウトし、第１所定時間内にディスク＃１からの処理完了通知が受信されない。
【００６５】
これに応じ、応答処理部１２ｂは、上位アプリケーション１１に対し完了応答を出力する（図５のタイミングｔ７参照）。つまり、応答処理部１２ｂは、ディスク＃１からの処理完了通知を受信していなくても、ディスク＃２からの処理完了通知を受信しているので、Ｉ／Ｏ処理結果は正常であるものとして上位アプリケーション１１に対し完了応答を出力する。このとき、上位アプリケーション１１がＩ／Ｏ要求を発行してから完了応答を受けるまでのＩ／Ｏ応答時間（タイミングｔ１とｔ７との時間間隔）は第１所定時間となる。
【００６６】
なお、図５に示す例において、ディスク管理部１２は、第１所定時間の経過後にディスク＃１からの処理完了通知を受信している（図５のタイミングｔ４ａ′，ｔ５ａ′参照）。このように第１所定時間の経過後にディスク＃１からの処理完了通知を受信する場合については、後述する復旧処理部１２ｃによる処理が適用される。
【００６７】
図６に示すように、ディスク＃２が異常でありディスク＃１が正常である場合も、ディスク管理部１２は、上位アプリケーション１１からＩ／Ｏ要求を受信すると（図６のタイミングｔ１参照）、以下の動作を行なう。つまり、ディスク管理部１２は、ディスクドライバ１３１，１３２を介し、２つのディスク＃１，＃２に対して同時もしくは略同時にＩ／Ｏ要求を発行しＩ／Ｏ制御を開始する（図６のタイミングｔ２ａ，ｔ３ａ；ｔ２ｂ，ｔ３ｂ参照）。このとき、タイミングｔ２ａおよびｔ２ｂでそれぞれディスク＃１，＃２用のタイマが起動され、第１所定時間の計時が開始される。
【００６８】
図６に示す例では、ディスク＃１が正常であるため、ディスク管理部１２は、ディスクドライバ１３１を介し、第１所定時間内にディスク＃１から処理完了通知を受信する（図６のタイミングｔ４ａ，ｔ５ａ参照）。しかし、ディスク＃２は異常であるため、第１所定時間の計時がタイムアウトし、第１所定時間内にディスク＃２からの処理完了通知が受信されない。
【００６９】
これに応じ、応答処理部１２ｂは、上位アプリケーション１１に対し完了応答を出力する（図６のタイミングｔ７参照）。つまり、応答処理部１２ｂは、ディスク＃２からの処理完了通知を受信していなくても、ディスク＃１からの処理完了通知を受信しているので、Ｉ／Ｏ処理結果は正常であるものとして上位アプリケーション１１に対し完了応答を出力する。このとき、上位アプリケーション１１がＩ／Ｏ要求を発行してから完了応答を受けるまでのＩ／Ｏ応答時間（タイミングｔ１とｔ７との時間間隔）は第１所定時間となる。
【００７０】
なお、図６に示す例においても、ディスク管理部１２は、第１所定時間の経過後にディスク＃２からの処理完了通知を受信している（図６のタイミングｔ４ｂ′，ｔ５ｂ′参照）。このように第１所定時間の経過後にディスク＃２からの処理完了通知を受信する場合については、後述する復旧処理部１２ｃによる処理が適用される。
【００７１】
次に、図７を参照しながら、冗長構成の２つのディスク＃１，＃２のうちの一方（ディスク＃２）が異常である場合の、本実施形態の動作について、より具体的に説明する。
【００７２】
図７に示す例では、上位アプリケーション１１がＩ／Ｏ要求を発行し（矢印Ａ１１参照）、ディスク管理部１２が、上位アプリケーション１１からのＩ／Ｏ要求を受けると、Ｉ／Ｏ制御開始タイミングで第１所定時間を計時するタイマを起動する（符号Ａ１２参照）。そして、ディスク管理部１２（入出力制御部１２ａ）は、ディスクドライバ１３１，１３２を介し、２つのディスク＃１，＃２に対して同時もしくは略同時にＩ／Ｏ要求を発行する（矢印Ａ１３ａ，Ａ１３ｂ参照）。
【００７３】
ディスクドライバ１３１は、正常なディスク＃１からの処理完了通知を受け、Ｉ／Ｏ完了をディスク管理部１２に通知する（矢印Ａ１４参照）。このとき、ディスク管理部１２は、第１所定時間内にディスク＃１からの処理完了通知を受信することになる。一方、異常なディスク＃２は処理完了通知を返すことができず、ディスクドライバ１３２およびディスク管理部１２は、ディスク＃２からの処理完了通知を待機することになる。
【００７４】
そして、第１所定時間が経過しタイムアウトが発生すると（符号Ａ１５参照）、ディスク管理部１２は、ディスク＃２をミラーリングから切り離し（矢印Ａ１６参照）ディスク＃２を仮縮退状態に変更する。また、応答処理部１２ａは、上記タイムアウトの発生に応じて、上位アプリケーション１１に対し完了応答を通知する（矢印Ａ１７参照）。このとき、上位アプリケーション１１がＩ／Ｏ要求を発行してからＩ／Ｏ完了を受けるまでのＩ／Ｏ応答時間（矢印Ａ１１と矢印Ａ１７との時間間隔）は第１所定時間となる。
【００７５】
なお、ディスクドライバ１３２は、第１所定時間の経過後、第２所定時間の間、仮縮退状態に変更されたディスク＃２に対するＩ／Ｏ制御を行なう。その際、ディスクドライバ１３２は、ディスク＃２用の第２メモリ領域２２ａ，２２ｂに保存されたＩ／Ｏ要求に係る情報を参照する。
【００７６】
次に、本実施形態において、一方のディスク＃１からの処理完了通知を受信した後に他方のディスク＃２からの処理完了通知を待つことなく上位アプリケーション１１に対する完了応答を行なうための、ディスク管理部１２の機能等について、より詳細に説明する。
【００７７】
上位アプリケーション１１は、Ｉ／Ｏ要求発行時に、メモリ２０上にＩ／Ｏ要求管理情報領域２０ａおよびＩ／Ｏバッファ領域２０ｂを確保し、領域２０ａにはＩ／Ｏ要求そのものを含む管理情報を保存するとともに、書込み時であれば領域２０ｂに書込みデータを保存する。通常、ディスク管理部１２やディスクドライバ１３は、領域２０ａ，２０ｂに保存された情報を参照しながら、ディスク＃１，＃２に対する入出力制御等を行なう。そして、上位アプリケーション１１は、ディスク管理部１２からのＩ／Ｏ完了の通知を受けて領域２０ａ，２０ｂを解放する。
【００７８】
ディスク管理部１２は、下位のディスクドライバ１３へのＩ／Ｏ処理が全て完了したのを待った後で、上位アプリケーション１１にＩ／Ｏ完了を通知する必要がある。もし、下位からのＩ／Ｏ要求の処理完了通知を待たずに上位アプリケーション１１にＩ／Ｏ完了を通知した場合、メモリ領域２０ａ，２０ｂが、下位のディスクドライバ１３等で使用中であるにもかかわらず解放されてしまう。このため、ディスクドライバ１３等が、解放されたメモリ領域２０ａ，２０ｂにアクセスしてしまい、ハングアップやデータ破壊が発生するおそれがある。
【００７９】
そこで、本実施形態では、上位アプリケーション１１からＩ／Ｏ要求を受けると、通常通り上位アプリケーション１１によって獲得される第１メモリ領域２０ａ，２０ｂとは別の第２メモリ領域２１ａ，２１ｂ，２２ａ，２２ｂが獲得される。このとき、２つのディスク＃１，＃２がＩ／Ｏ要求の対象となり、ディスク＃１用の第２メモリ領域２１ａ，２１ｂとディスク＃２用の第２メモリ領域２２ａ，２２ｂとが獲得される。そして、第１メモリ領域２０ａの情報が第２メモリ２１ａ，２２ａにコピーされ、第１メモリ領域２０ｂの情報が第２メモリ２１ｂ，２２ｂにコピーされる。この後、第１メモリ領域２０ａ，２０ｂを用いることなく、第２メモリ領域２１ａ，２１ｂ，２２ａ，２２ｂを用いて下位ドライバ１３（１３１，１３２）に対するＩ／Ｏ制御が行なわれる。
【００８０】
このような構成によれば、第１メモリ領域２０ａ，２０ｂが解放されても、下位のドライバ１３等は、第１メモリ領域２０ａ，２０ｂとは異なる第２メモリ領域２１ａ，２１ｂ，２２ａ，２２ｂを用いて処理を行なうことができる。つまり、ディスク管理部１２が処理完了通知を待つことなく上位アプリケーション１１に対してＩ／Ｏ完了を通知することで、第１メモリ領域２０ａ，２０ｂが解放されても、下位のドライバ１３等は、第２メモリ領域２１ａ，２１ｂ，２２ａ，２２ｂを用いて処理を行なうことができる。これにより、ディスクドライバ１３等が、解放されたメモリ領域２０ａ，２０ｂにアクセスするのを抑止でき、ハングアップやデータ破壊の発生が確実に防止される。
【００８１】
ところで、第１所定時間内にＩ／Ｏ要求に対しディスクから何ら応答の無い場合に当該ディスクの縮退（ミラー構成の縮退）を行なうと、当該ディスクが故障していないにもかかわらず当該ディスクが切り離されてしまうことがある。例えば、ディスクとサーバ１との間のパスがマルチパス化されている場合、故障したパスを正常なパスに切り替えている間にタイムアウトが発生し、ディスクが切り離されることがある。
【００８２】
そこで、本実施形態では、第１所定時間内に処理完了通知の無かったディスクは、一時的な仮の縮退状態に変更する。仮縮退状態では、上記状態(14)として説明したように、ディスクは、ミラーリングから切り離されＩ／Ｏ要求の対象とならない状態ではあるが正常な状態に復旧する可能性のある状態である。このような仮縮退状態のディスクが存在している間は、当該仮縮退状態のディスクと対になる、縮退していないディスクに書込みを行なった場合、当該書込み箇所（更新箇所）の位置情報が差分情報としてビットマップ５１，５２に記録される。
【００８３】
第１所定時間経過後にさらに第２所定時間が経過すると、ディスク制御部１２は、図８に示すように動作する。図８は、本実施形態の仮縮退復旧動作を具体的に説明する図である。図８では、ディスク＃１が正常状態であり、ディスク＃２が仮縮退状態である。
【００８４】
上位アプリ１１にＩ／Ｏ完了を通知した後（矢印Ａ１７参照）にさらに第２所定時間が経過すると、ディスク制御部１２（復旧処理部１２ｃ）は、仮縮退状態のディスク＃２についてＩ／Ｏ要求の処理完了通知が全て受信されたか否かを確認する（矢印Ａ１８参照）。Ｉ／Ｏ要求の処理完了通知が全て受信された場合、復旧処理部１２ｃは、ディスク＃２を仮縮退状態からコピー状態（正常状態）に復旧しミラーに組み込む（矢印Ａ１９参照）。この後、復旧処理部１２ｃは、ディスク＃１用のビットマップ５１を参照し、ディスク＃１からディスク＃２へ更新箇所（差分データ）をコピーすることで（矢印Ａ２０参照）、ディスク＃１とディスク＃２とをミラー状態に復帰させる。
【００８５】
一方、復旧処理部１２ｃは、確認の結果、仮縮退状態のディスク＃２についてＩ／Ｏ要求の処理完了通知が受信されていない場合、ディスク＃２を仮縮退状態から縮退状態に変更する。また、復旧処理部１２ｃは、ディスク＃１の更新箇所の記録を止め、ディスク＃１用のビットマップ（差分情報）５１の全ビットを“０”に設定し、ディスク＃１用のビットマップ（差分情報）５１をクリアする。
【００８６】
第１所定時間を短く設定してＩ／Ｏ完了をできるだけ早く上位アプリ１１に返信するようにすると、パス変更等により処理完了通知が遅れているだけで故障していない正常なディスク＃２を縮退させてしまう可能性があった。本実施形態では、第１所定時間経過後にさらに第２所定時間だけ経過した時点で仮縮退状態のディスク＃２について処理完了通知の再確認を行ない処理完了通知を受信した場合、仮縮退状態のディスク＃２が復帰され、ディスク＃１とのミラー状態も復帰する。これにより、第１所定時間を短く設定しても正常なディスクを切り離してしまう状況を回避することができ、正常なディスクを有効に利用することができる。
【００８７】
次に、図９〜図１３を参照しながら、本実施形態のディスク管理部１２の動作について、より詳細に説明する。
【００８８】
図９に示すように、本実施形態のサーバ１において、ディスク管理部１２は、上位アプリケーション１１からのＩ／Ｏ要求（読出し要求または書込み要求）に応じ、冗長構成の２つのディスク＃１，＃２に対して同時にＩ／Ｏ制御を行なう。その際、ディスク管理部１２は、図１０〜図１３に示すフローチャートに従って、メモリ２０（もしくはディスク＃１，＃２）上のボリューム構成・状態管理情報３１，３２および差分情報５１，５２を参照／更新しながら以下のような動作を行なう。なお、図９は、本実施形態のディスク管理部１２の動作を説明するブロック図である。
【００８９】
まず、図１０に示すフローチャート（ステップＳ１１〜Ｓ１７）に従って、本実施形態のディスクドライバ１３（ディスク＃１，＃２）へのＩ／Ｏ要求発行処理（入出力制御部１２ａの動作）について説明する。なお、当該Ｉ／Ｏ要求発行処理は、Ｉ／Ｏ要求が書込み要求の場合、冗長構成の２つのディスク＃１，＃２のそれぞれに対し実行される。このとき、２つのディスク＃１，＃２に対するＩ／Ｏ要求発行処理は、並列的に同時に実行されてもよいし、シリアルに略同時に実行されてもよい。また、当該Ｉ／Ｏ要求発行処理は、Ｉ／Ｏ要求が読出し要求の場合、図１２を参照しながら後述するように、選択された一のディスクに対し実行される。
【００９０】
ディスク管理部１２は、上位アプリケーション１１からのＩ／Ｏ要求に応じて、上位アプリケーション１１が獲得したメモリ領域２０ａ，２０ｂとは異なる、ディスク＃１または＃２用のＩ／Ｏ要求管理情報領域２１ａまたは２２ａを獲得する（ステップＳ１１）。そして、ディスク管理部１２は、獲得した領域２１ａまたは２２ａに、アプリ用Ｉ／Ｏ要求管理情報領域２０ａに保存されている管理情報（上位アプリ１１から渡されたＩ／Ｏ要求を含む管理情報）をコピーする（ステップＳ１２）。
【００９１】
また、ディスク管理部１２は、上位アプリケーション１１からのＩ／Ｏ要求に応じて、上位アプリケーション１１が獲得したメモリ領域２０ａ，２０ｂとは異なる、ディスク＃１または＃２用のＩ／Ｏバッファ領域２１ｂまたは２２ｂを獲得する（ステップＳ１３）。そして、ディスク管理部１２は、Ｉ／Ｏ要求が書込み要求である場合、獲得した領域２１ｂまたは２２ｂに、アプリ用Ｉ／Ｏバッファ領域２０ｂに保存されている書込みデータ（上位アプリ１１から渡されたＩ／Ｏバッファのデータ）をコピーする（ステップＳ１４）。なお、Ｉ／Ｏ要求が読出し要求である場合、領域２１ｂまたは２２ｂは、ディスク＃１または＃２から読み出されたデータを保存するために用いられるものであり、ステップＳ１４の処理はスキップされる。
【００９２】
この後、ディスク管理部１２は、第１所定時間を計時するタイマ機能を起動する（ステップＳ１５）。当該タイマ機能はディスク毎に起動され、ディスク毎に第１所定時間が計時される。
【００９３】
タイマ機能の起動タイミングに対応して、入出力制御部１２ａは、メモリ２０の領域２１ａ，２２ａ，２１ｂ，２２ｂを参照しながら、ディスクドライバ１３を介し、２つのディスク＃１，＃２に対しＩ／Ｏ要求を発行しＩ／Ｏ制御を開始する（ステップＳ１６）。なお、タイマ機能の起動開始タイミングは、図１０ではＩ／Ｏ制御の開始前になっているが、Ｉ／Ｏ制御の開始後や、Ｉ／Ｏ制御の開始と同時であってもよい。そして、ディスク管理部１２は、ディスクドライバ１３（ディスク＃１，＃２）からのＩ／Ｏ応答（処理完了通知）を待機する（ステップＳ１７）。
【００９４】
ついで、図１１に示すフローチャート（ステップＳ２１〜Ｓ３３）に従って、本実施形態の書込み処理時におけるディスク管理部１２の動作について説明する。
【００９５】
上位アプリケーション１１からのＩ／Ｏ要求が書込み要求である場合、図１０に示すＩ／Ｏ要求発行処理が２つのディスク＃１，＃２に対し実行され、ディスク管理部１２は、ディスクドライバ１３（ディスク＃１，＃２）からのＩ／Ｏ応答の待機状態になる。書込み要求について待機状態のディスク管理部１２は、引き続き、図１１に示す処理が実行されることになる。以下、図１１を参照しながら行なう説明では、２つのディスク＃１，＃２のうち、先にＩ／Ｏ応答を行なったディスクをディスク＃１とし、もう一方のディスクをディスク＃２とする。
【００９６】
図１０のステップＳ１７で待機状態（書込み処理待機中）になったディスク管理部１２（入出力制御部１２ａ，応答処理部１２ｂ）は、ディスク＃１（ディスクドライバ１３１）からの処理完了通知を受信したか否かを判断する（ステップＳ２１）。ディスク管理部１２は、ディスク＃１からの処理完了通知を受信すると（ステップＳ２１のＹＥＳルート）、ディスク＃１用のＩ／Ｏ要求管理情報領域２１ａに、Ｉ／Ｏ処理結果（処理完了）が書き込まれる。ディスク管理部１２は、ディスク＃１用のＩ／Ｏ要求管理情報領域２１ａにおけるＩ／Ｏ処理結果を、アプリ用のＩ／Ｏ要求管理情報領域２０ａにコピーする（ステップＳ２２）。
【００９７】
なお、処理完了通知に関する情報は、例えば、処理完了通知を受信した場合に“０”から“１”に書き換えられるフラグ情報である。ステップＳ２２の処理を実行した時点では、アプリ用Ｉ／Ｏ要求管理情報領域２０ａおよびディスク＃１用のＩ／Ｏ要求管理情報領域２１ａにおける当該フラグ情報が“１”に書き換えられる。同時点で、ディスク＃２用のＩ／Ｏ要求管理情報領域２２ａにおける当該フラグ情報は“０”のままである。
【００９８】
そして、ディスク管理部１２は、ディスク＃２用のタイマ機能が第１所定時間を計時したか否か、つまりディスク＃２でＩ／Ｏ処理のタイムアウトが発生したか否かを判断する（ステップＳ２３）。ディスク＃２でタイムアウトが発生していない場合（ステップＳ２３のＮＯルート）、ディスク管理部１２は、ディスク＃２に対するＩ／Ｏ要求による処理が正常に終了したか否かを判断する（ステップＳ２４）。
【００９９】
第１所定時間が経過する前にディスク＃２に対するＩ／Ｏ要求による処理が正常に終了した場合（ステップＳ２４のＹＥＳルート）、ディスク管理部１２は、ディスク＃２用に獲得したメモリ領域２２ａ，２２ｂを解放する（ステップＳ２５）。さらに、ディスク管理部１２は、ディスク＃１用に獲得したメモリ領域２１ａ，２１ｂを解放する（ステップＳ２６）。
【０１００】
この後、ディスク管理部１２は、メモリ２０上の領域２１ｃ，２２ｃにおけるボリューム構成・状態管理情報３１，３２等を参照し、仮縮退状態のディスクが存在するか否かを判断する（ステップＳ２７）。ここでは、ディスク＃１とミラーリング構成を成すディスク＃２が仮縮退状態か否かを判断する。
【０１０１】
ステップＳ２４のＹＥＳルートからステップＳ２５，Ｓ２６を経由してステップＳ２７の処理に至った場合、ディスク＃２は正常状態であり、仮縮退状態のディスクが存在しないと判断され（ステップＳ２７のＮＯルート）、応答処理部１２ｂは、上位アプリケーション１１に対しＩ／Ｏ完了を通知する（ステップＳ２８）。Ｉ／Ｏ完了通知を受けアプリ用Ｉ／Ｏ要求管理情報領域２０ａにおけるフラグ情報“１”を参照した上位アプリケーション１１は、メモリ２０上の領域２０ａ，２０ｂを解放する。
【０１０２】
第１所定時間が経過する前にディスク＃２に対するＩ／Ｏ要求による処理が正常に終了しなかった場合（ステップＳ２４のＮＯルート）、ディスク管理部１２は、ディスク＃２を縮退状態に変更する。さらに、ディスク管理部１２は、領域２２ｃ，４２ａにおけるディスク＃２用のボリューム構成・状態管理情報３２における状態を正常状態から縮退状態に更新する（ステップＳ２９）。この後、ディスク管理部１２はステップＳ２５の処理に移行する。
【０１０３】
ステップＳ２４のＮＯルートからステップＳ２９，Ｓ２５，Ｓ２６を経由してステップＳ２７の処理に至った場合、ディスク＃２は縮退状態であり、仮縮退状態のディスクが存在しないと判断される（ステップＳ２７のＮＯルート）。そして、応答処理部１２ｂは、上位アプリケーション１１に対しＩ／Ｏ完了を通知する（ステップＳ２８）。このとき、ディスク＃２用のＩ／Ｏ要求管理情報領域２２ａにおける上記フラグ情報は“０”のままである。Ｉ／Ｏ完了通知を受けアプリ用Ｉ／Ｏ要求管理情報領域２０ａにおけるフラグ情報“１”を参照した上位アプリケーション１１は、メモリ２０上の領域２０ａ，２０ｂを解放する。
【０１０４】
一方、ディスク＃２でタイムアウトが発生した場合（ステップＳ２３のＹＥＳルート）、ディスク管理部１２は、第２所定時間を計時するタイマ機能を起動する（ステップＳ３０）。そして、ディスク管理部１２は、ディスク＃２を仮縮退状態に変更するとともに、領域２２ｃ，４２ａにおけるディスク＃２用のボリューム構成・状態管理情報３２における状態を正常状態から仮縮退状態に更新する（ステップＳ３１）。さらに、ディスク管理部１２は、復旧処理部１２ｃによる仮縮退復旧スレッド（図１３参照）を起動してから（ステップＳ３２）、ステップＳ２６の処理に移行する。
【０１０５】
ステップＳ３２において仮縮退復旧スレッドが起動されてから完了するまでの間、ディスク＃２に対する仮縮退復旧処理と、それ以外のディスク＃１との処理は、独立して並列的に行なわれる。この間、ディスク＃１のデータを更新しても、ディスク＃２には反映されず、ディスク＃１のみに対するＩ／Ｏ処理が実行されるが、ディスク＃１のデータが更新された場合、更新箇所の位置情報は、差分情報としてビットマップ５１に記録される。
【０１０６】
ステップＳ２３のＹＥＳルートからステップＳ３０〜Ｓ３２，Ｓ２６を経由してステップ２７の処理に至った場合、ディスク＃２は仮縮退状態であり、仮縮退状態のディスクが存在すると判断される（ステップＳ２７のＹＥＳルート）。この場合、ディスク管理部１２は、ディスク＃１に対する書込み要求によって書き換えられた領域の位置情報を、差分情報（ビットマップ）５１に記録する（ステップＳ３３）。そして、応答処理部１２ｂは、上位アプリケーション１１に対しＩ／Ｏ完了を通知する（ステップＳ２８）。このとき、ディスク＃２用のＩ／Ｏ要求管理情報領域２２ａにおける上記フラグ情報は“０”のままである。Ｉ／Ｏ完了通知を受けアプリ用Ｉ／Ｏ要求管理情報領域２０ａにおけるフラグ情報“１”を参照した上位アプリケーション１１は、メモリ２０上の領域２０ａ，２０ｂを解放する。
【０１０７】
なお、先にＩ／Ｏ応答を行なったディスク＃１でＩ／Ｏエラーが発生する場合の処理についての説明は省略する。この場合、残りのディスク＃２は、最後のディスクとなるため、仮縮退状態に変更されず、一般的なＩ／Ｏエラーの処理が実行される。
【０１０８】
ついで、図１２に示すフローチャート（ステップＳ４１〜Ｓ６０）に従って、本実施形態の読出し処理時におけるディスク管理部１２の動作について説明する。
【０１０９】
ディスク管理部１２は、上位アプリケーション１１からＩ／Ｏ要求として読出し要求を受信すると（ステップＳ４１のＹＥＳルート）、当該読出し要求によってリードするディスクを選択する（ステップＳ４２）。そして、ディスク管理部１２は、選択したディスク（以下、選択ディスクという）に対応するディスクドライバへのＩ／Ｏ要求発行処理（図１０参照）を実行する（ステップＳ４３）。これにより、当該ディスクに対応するタイマ機能が起動され、第１所定時間の計時が開始されるとともに、ディスク管理部１２は、ディスクドライバ１３からのＩ／Ｏ応答（処理完了通知）を待機する。
【０１１０】
読出し処理待機中になったディスク管理部１２（入出力制御部１２ａ，応答処理部１２ｂ）は、選択ディスク用のタイマ機能が第１所定時間を計時したか否か、つまり選択ディスクでＩ／Ｏ処理のタイムアウトが発生したか否かを判断する（ステップＳ４４）。選択ディスクでタイムアウトが発生していない場合（ステップＳ４４のＮＯルート）、ディスク管理部１２は、選択ディスクに対するＩ／Ｏ要求による処理が正常に終了したか否かを判断する（ステップＳ４５）。
【０１１１】
第１所定時間が経過する前に選択ディスクに対するＩ／Ｏ要求による処理が正常に終了した場合（ステップＳ４５のＹＥＳルート）、選択ディスク用のＩ／Ｏ要求管理情報領域には、Ｉ／Ｏ処理結果として処理完了を示す上記フラグ情報“１”が書き込まれている。また、選択ディスク用のＩ／Ｏバッファ領域には、Ｉ／Ｏ処理結果として選択ディスクから読み出されたデータが書き込まれている。そして、ディスク管理部１２は、選択ディスク用のＩ／Ｏ要求管理情報領域における処理完了情報を、アプリ用のＩ／Ｏ要求管理情報領域２０ａにコピーするとともに、選択ディスク用のＩ／Ｏバッファ領域における読出しデータを、アプリ用のＩ／Ｏ要求バッファ領域２０ｂにコピーする（ステップＳ４６）。
【０１１２】
この後、ディスク管理部１２は、選択ディスク用に獲得したメモリ領域を解放する（ステップＳ４７）。そして、応答処理部１２ｂは、上位アプリケーション１１に対しＩ／Ｏ完了を通知する（ステップＳ４８）。Ｉ／Ｏ完了通知を受けアプリ用Ｉ／Ｏ要求管理情報領域２０ａにおけるフラグ情報“１”を参照した上位アプリケーション１１は、メモリ２０上の領域２０ａ，２０ｂを解放する。
【０１１３】
第１所定時間が経過する前に選択ディスクに対するＩ／Ｏ要求による処理が正常に終了しなかった場合（ステップＳ４５のＮＯルート）、ディスク管理部１２は、選択ディスクを縮退状態に変更する。さらに、ディスク管理部１２は、選択ディスク用のボリューム構成・状態管理情報における状態を正常状態から縮退状態に更新する（ステップＳ４９）。さらに、ディスク管理部１２は、選択ディスク用に獲得したメモリ領域を解放する（ステップＳ５０）。
【０１１４】
この後、ディスク管理部１２は、上記選択ディスクとミラーリング構成を成す「もう一方のディスク」を選択する（ステップＳ５１）。そして、ディスク管理部１２は、もう一方のディスクに対応するディスクドライバへのＩ／Ｏ要求発行処理（図１０参照）を実行する（ステップＳ５２）。なお、もう一方のディスクに対するＩ／Ｏ処理がタイムアウトする二重故障の場合の処理についての説明は省略している。この場合、一般的なＩ／Ｏエラーの動作が実行されるからである。
【０１１５】
そして、ディスク管理部１２は、もう一方のディスクに対するＩ／Ｏ要求による処理が正常に終了したか否かを判断する（ステップＳ５３）。もう一方のディスクに対するＩ／Ｏ要求による処理が正常に終了した場合（ステップＳ５３のＹＥＳルート）、もう一方のディスク用のＩ／Ｏ要求管理情報領域には、Ｉ／Ｏ処理結果として処理完了を示す上記フラグ情報“１”が書き込まれている。また、もう一方のディスク用のＩ／Ｏバッファ領域には、Ｉ／Ｏ処理結果として、もう一方のディスクから読み出されたデータが書き込まれている。ディスク管理部１２は、もう一方のディスク用のＩ／Ｏ要求管理情報領域における処理完了情報を、アプリ用のＩ／Ｏ要求管理情報領域２０ａにコピーするとともに、もう一方のディスク用のＩ／Ｏバッファ領域における読出しデータを、アプリ用のＩ／Ｏ要求バッファ領域２０ｂにコピーする（ステップＳ５４）。
【０１１６】
この後、ディスク管理部１２は、もう一方のディスク用に獲得したメモリ領域を解放する（ステップＳ５５）。そして、応答処理部１２ｂは、上位アプリケーション１１に対しＩ／Ｏ完了を通知する（ステップＳ４８）。Ｉ／Ｏ完了通知を受けアプリ用Ｉ／Ｏ要求管理情報領域２０ａにおけるフラグ情報“１”を参照した上位アプリケーション１１は、メモリ２０上の領域２０ａ，２０ｂを解放する。
【０１１７】
一方、もう一方のディスクに対するＩ／Ｏ要求による処理が正常に終了しなかった場合（ステップＳ５３のＮＯルート）、ディスク管理部１２は、もう一方のディスク用に獲得したメモリ領域を解放する（ステップＳ５６）。そして、応答処理部１２ｂは、上位アプリケーション１１に対しＩ／Ｏエラーを通知する（ステップＳ５７）。
【０１１８】
また、選択ディスクでタイムアウトが発生した場合（ステップＳ４４のＹＥＳルート）、ディスク管理部１２は、第２所定時間を計時するタイマ機能を起動する（ステップＳ５８）。そして、ディスク管理部１２は、選択ディスクを仮縮退状態に変更するとともに、選択ディスク用のボリューム構成・状態管理情報における状態を正常状態から仮縮退状態に更新する（ステップＳ５９）。さらに、ディスク管理部１２は、復旧処理部１２ｃによる仮縮退復旧スレッド（図１３参照）を起動してから（ステップＳ６０）、ステップＳ５１の処理に移行する。
【０１１９】
ステップＳ６０において仮縮退復旧スレッドが起動されてから完了するまでの間、選択ディスクに対する仮縮退復旧処理と、それ以外のディスク（もう一方のディスク）との処理は、独立して並列的に行なわれる。この間、もう一方のディスクのデータを更新しても、選択ディスクには反映されず、もう一方のディスクのみに対するＩ／Ｏ処理が実行されるが、もう一方のディスクのデータが更新された場合、更新箇所の位置情報は、差分情報（ビットマップ）に記録される。
【０１２０】
ついで、図１３に示すフローチャート（ステップＳ６１〜Ｓ７０）に従って、本実施形態の仮縮退復旧スレッドの処理手順（復旧処理部１２ｃの動作）について説明する。
【０１２１】
図１１のステップＳ３２あるいは図１２のステップＳ６０において仮縮退復旧スレッドが起動されると、復旧処理部１２ｃが動作を開始する。まず、復旧処理部１２ｃは、対象のディスク（ここではディスク＃２とする）において、第２所定時間（仮縮退時間）以上に亘って復帰していないＩ／Ｏ要求があるか否かを判断する（ステップＳ６１）。ここで、「復帰していないＩ／Ｏ要求」とは、当該Ｉ／Ｏ要求について処理完了通知がディスク＃２からディスク管理部１２へ返信されていないことをいう。
【０１２２】
ディスク＃２において第２所定時間以上に亘って復帰していないＩ／Ｏ要求が無い場合（ステップＳ６１のＮＯルート）、即ちディスク＃２に対する全てのＩ／Ｏ要求について処理完了通知が返信されている場合、復旧処理部１２ｃは、以下の処理を実行する。
【０１２３】
つまり、復旧処理部１２ｃは、ディスク＃２を仮縮退状態からコピー状態に復帰させるとともに、ディスク＃２用のボリューム構成・状態管理情報３２における状態を仮縮退状態からコピー状態に更新する（ステップＳ６２）。ここで、ディスク＃２のコピー状態とは、ディスク＃２と対を成す正常状態のディスク＃１にＦＣ−ＳＷ３やサーバ１（ディスク管理部１２）を介して接続され、ディスク＃１からディスク＃２へのデータコピーが可能になっている状態である。
【０１２４】
そして、復旧処理部１２ｃは、もう一方のディスク（ここではディスク＃２とミラーリング構成を成すディスク＃１とする）用のビットマップ５１を参照し、ディスク＃１からディスク＃２に対し、更新箇所（差分データ）をコピーする（ステップＳ６３）。これにより、ディスク＃１とディスク＃２とがミラー状態に復旧される。
【０１２５】
この後、復旧処理部１２ｃは、差分情報（ビットマップ）５１を削除してから（ステップＳ６４）、ステップＳ６３でのコピー処理に成功したか否かを判断する（ステップＳ６５）。コピー処理に成功した場合（ステップＳ６５のＹＥＳルート）、復旧処理部１２ｃは、ディスク＃２をコピー状態から正常状態に変更するとともに、ディスク＃２用のボリューム構成・状態管理情報３２における状態をコピー状態から正常状態に更新する（ステップＳ６６）。そして、ディスク＃２は、システムに組み込まれ（ステップＳ６７）、ディスク＃２とディスク＃１とはミラーリング構成を成す。
【０１２６】
一方、コピー処理に失敗した場合（ステップＳ６５のＮＯルート）や、ディスク＃２において第２所定時間以上復帰していないＩ／Ｏ要求が有る場合（ステップＳ６１のＹＥＳルート）、復旧処理部１２ｃは、以下の処理を実行する。
【０１２７】
つまり、復旧処理部１２ｃは、ディスク＃２を仮縮退状態から縮退状態に変更するとともに、ディスク＃２用のボリューム構成・状態管理情報３２における状態を仮縮退状態から縮退状態に更新する（ステップＳ６８）。そして、復旧処理部１２ｃは、ディスク＃２に対応するディスク＃１の差分情報（ビットマップ）５１が存在する場合、当該差分情報（ビットマップ）５１を削除する（ステップＳ６９）。
【０１２８】
この後、縮退したディスク＃２に対するＩ／Ｏ要求が復帰した場合、ディスク制御部１２は、縮退したディスク＃２用に獲得したメモリ２０上のメモリ領域２２ａ，２２ｂを解放する（ステップＳ７０）。
【０１２９】
〔３〕本実施形態の効果
このように、本実施形態のサーバ１では、２つのディスク＃１，＃２に対して同時にＩ／Ｏ制御を行なった結果、Ｉ／Ｏ制御の開始後、第１所定時間内に一方のディスクからの処理完了通知を受信したが他方のディスクからの処理完了通知を受信しない場合、ディスク管理部１２は、他方のディスクに異常が発生しているものと判断する。そして、ディスク管理部１２は、ミラー状態を仮縮退してＩ／Ｏ完了を上位アプリケーション１１に通知する。したがって、Ｉ／Ｏ応答時間を、ユーザ，オペレータ等によって適宜設定される第１所定時間に抑えることができ、大幅に短縮することができる。
【０１３０】
これにより、上位アプリケーション１１のＩ／Ｏ制御に対する処理完了応答が高速化され、上位アプリケーション１１のＩ／Ｏ制御に占有される時間を大幅に短縮することができる。このとき、ディスク側の構成を変更することなく、ディスクよりも上位側のサーバ１（ディスク管理部１２）によって、処理完了応答の高速化を実現することができる。また、ディスクドライバの種類や、ハードウエア側の性能（リトライ処理時間やキャンセル処理時間）に依存することなく、応答時間を大幅に短縮することができる。
【０１３１】
また、本実施形態のサーバ１では、上位アプリケーション１１用の第１メモリ領域２０ａ，２０ｂが解放されても、下位のドライバ１３等は、第１メモリ領域２０ａ，２０ｂとは異なる第２メモリ領域２１ａ，２１ｂ，２２ａ，２２ｂを用いて処理を行なうことができる。つまり、ディスク管理部１２が処理完了通知を待つことなく上位アプリケーション１１に対しＩ／Ｏ完了を通知することで、第１メモリ領域２０ａ，２０ｂが解放されても、下位のドライバ１３等は、第２メモリ領域２１ａ，２１ｂ，２２ａ，２２ｂを用いて処理を行なうことができる。これにより、ディスクドライバ１３等が、解放されたメモリ領域２０ａ，２０ｂにアクセスするのを抑止でき、ハングアップやデータ破壊の発生が確実に防止される。
【０１３２】
ところで、上述した第１所定時間を短く設定してＩ／Ｏ完了をできるだけ早く上位アプリ１１に返信するようにすると、パス変更等により処理完了通知が遅れているだけで故障していない正常なディスク＃２を縮退させてしまう可能性があった。本実施形態のサーバ１では、第１所定時間経過後にさらに第２所定時間だけ経過した時点で仮縮退状態のディスク＃２について処理完了通知の再確認を行ない処理完了通知を受信した場合、仮縮退状態のディスク＃２が正常状態に復帰される。このとき、差分情報（ビットマップ）５１，５２に基づき差分データがディスク＃１からディスク＃２にコピーされ、ディスク＃１とディスク＃２とのミラー状態も復旧され、冗長構成が継続される。
【０１３３】
〔４〕本実施形態の変形例
上述した実施形態では、２つのディスクに対し同時にＩ／Ｏ制御を行なった結果、Ｉ／Ｏ制御開始後、第１所定時間内に一方のディスクからの処理完了通知を受信し且つ第１所定時間内に他方のディスクから処理完了通知を受信しない場合、上位アプリ１１に完了応答が出力される。しかしながら、本発明は、これに限定されるものではない。
【０１３４】
例えば、本実施形態の変形例として、応答処理部１２ｂは、２つのディスクに対し同時にＩ／Ｏ制御を行なった結果、一方のディスク（第１記憶装置）からの処理完了通知を受信すると、直ちに、上位アプリケーション１１に対して、Ｉ／Ｏ要求に対応する処理の完了応答を出力してもよい。これにより、当該変形例では、上述した実施形態よりも早く処理完了応答を返すことができ、上位アプリケーション１１のＩ／Ｏ制御に対する処理完了応答をより高速化することができる。
【０１３５】
当該変形例において、Ｉ／Ｏ制御開始後、第１所定時間の計時を行ない、第１所定時間内に２つのディスクのいずれからも処理完了通知を受信しない場合、応答処理部１２ｂは、２重故障が発生したものと判断し、上位アプリケーション１１に対しＩ／Ｏエラーを出力してもよい。
【０１３６】
また、当該変形例において、ディスク制御部１２が上位アプリケーション１１に対し完了応答を出力した時点で上記第２所定時間の計時を開始してもよい。この場合、上位アプリケーション１１に対する完了応答出力後、第２所定時間内に他方のディスク（第２記憶装置）からの処理完了通知を受信すると、復旧処理部１２ｃが、上述した実施形態と同様に機能する。
【０１３７】
つまり、復旧処理部１２ｃは、他方のディスクを仮縮退状態から復旧させた後、ビットマップ５１，５２で“１”を設定されたビットに対応する差分データを、一方のディスクから他方のディスクにコピーすることで、２つのディスクがミラー状態に復旧される。このとき、当該他方のディスク用のボリューム構成・状態管理情報３１，３２における状態が仮縮退状態から正常状態に更新される。一方、復旧処理部１２ｃは、上位アプリケーション１１に対する完了応答出力後、第２所定時間内に他方のディスクからの処理完了通知を受信しない場合、当該他方のディスクを仮縮退状態から縮退状態に変更する。このとき、当該他方のディスク用のボリューム構成・状態管理情報３１，３２における状態が仮縮退状態から縮退状態に更新される。
【０１３８】
これにより、本実施形態の変形例においても、上述した本実施形態と同様の作用効果を得ることができる。
【０１３９】
〔５〕その他
以上、本発明の好ましい実施形態について詳述したが、本発明は、係る特定の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内において、種々の変形、変更して実施することができる。
【０１４０】
例えば、上述した実施形態では、上位アプリケーション１１からのＩ／Ｏ要求に応じて同時にＩ／Ｏ制御を行なうディスク（記憶装置）の数が２である場合について説明したが、本発明は、これに限定されるものでなく、３以上である場合にも、上述した実施形態と同様に適用され、上述した実施形態と同様の作用効果を得ることができる。
【０１４１】
また、上述した実施形態では、上位アプリケーション１１からのＩ／Ｏ要求による処理対象を記憶装置２におけるディスク（ＨＤＤ）としたが、本発明は、これに限定されるものでなく、ＳＳＤ等、種々の記憶媒体を対象にしてもよい。
【０１４２】
〔６〕付記
以上の各実施形態を含む実施形態に関し、さらに以下の付記を開示する。
【０１４３】
（付記１）
上位アプリケーションからの入出力要求に応じて、冗長構成の複数の記憶装置に対して同時に入出力制御を行なう入出力制御部と、
前記複数の記憶装置に対して同時に前記入出力制御を行なった結果、前記複数の記憶装置のうちのいずれか一つの第１記憶装置からの処理完了通知を受信すると、前記上位アプリケーションに対して、前記入出力要求に対応する処理の完了応答を出力する応答処理部と、を有する、情報処理装置。
【０１４４】
（付記２）
前記応答処理部は、
前記入出力制御を開始してから第１所定時間内に前記第１記憶装置からの処理完了通知を受信するとともに前記第１所定時間内に前記複数の記憶装置のうちの前記第１記憶装置以外の第２記憶装置からの処理完了通知を受信しない場合、前記上位アプリケーションに対して前記完了応答を出力する、付記１に記載の情報処理装置。
【０１４５】
（付記３）
前記入出力制御部は、
前記上位アプリケーションからの前記入出力要求を処理するための第１メモリ領域とは異なる第２メモリ領域を前記記憶装置毎に確保し、
前記入出力要求に係る情報を前記第１メモリ領域から前記第２メモリ領域にコピーし、
前記第２メモリ領域にコピーされた前記入出力要求に係る情報を用いて各記憶装置に対する前記入出力制御を行なう、付記２に記載の情報処理装置。
【０１４６】
（付記４）
前記入出力制御部は、
前記第２記憶装置用の前記第２メモリ領域に保存された前記入出力要求に係る情報を用いて、前記第１所定時間が経過した後に仮縮退状態に切り替えられた前記第２記憶装置に対する前記入出力制御を行なう一方、
前記第１記憶装置用の前記第２メモリ領域に保存された、前記上位アプリケーションからの新たな入出力要求に係る情報を用いて、前記新たな入出力要求に応じた入出力制御を前記第１記憶装置に対して行ない、
前記新たな入出力要求に応じた入出力制御がライトアクセスに係る場合、前記ライトアクセスを行なった前記第１記憶装置の領域の位置情報を、差分情報として、差分情報管理領域に記録する、付記３に記載の情報処理装置。
【０１４７】
（付記５）
前記第１所定時間が経過してから第２所定時間内に前記第２記憶装置からの処理完了通知を受信すると、前記第２記憶装置を前記仮縮退状態から復旧し、前記差分情報管理領域に記録された前記差分情報に対応する差分データを、前記第１記憶装置から前記第２記憶装置にコピーする復旧処理部を有する、付記４に記載の情報処理装置。
【０１４８】
（付記６）
前記復旧処理部は、
前記第１所定時間が経過してから前記第２所定時間内に前記第２記憶装置からの処理完了通知を受信しない場合、前記第２記憶装置を前記仮縮退状態から縮退状態に変更する、付記５に記載の情報処理装置。
【０１４９】
（付記７）
上位アプリケーションからの入出力要求に応じて、冗長構成の複数の記憶装置に対して同時に入出力制御を行ない、
前記複数の記憶装置に対して同時に前記入出力制御を行なった結果、前記複数の記憶装置のうちのいずれか一つの第１記憶装置からの処理完了通知を受信すると、前記上位アプリケーションに対して、前記入出力要求に対応する処理の完了応答を出力する、
処理を、コンピュータに実行させる、入出力制御プログラム。
【０１５０】
（付記８）
前記入出力制御を開始してから第１所定時間内に前記第１記憶装置からの処理完了通知を受信するとともに前記第１所定時間内に前記複数の記憶装置のうちの前記第１記憶装置以外の第２記憶装置からの処理完了通知を受信しない場合、前記上位アプリケーションに対して前記完了応答を出力する、
処理を、前記コンピュータに実行させる、付記７に記載の入出力制御プログラム。
【０１５１】
（付記９）
前記上位アプリケーションからの前記入出力要求を処理するための第１メモリ領域とは異なる第２メモリ領域を前記記憶装置毎に確保し、
前記入出力要求に係る情報を前記第１メモリ領域から前記第２メモリ領域にコピーし、
前記第２メモリ領域にコピーされた前記入出力要求に係る情報を用いて各記憶装置に対する前記入出力制御を行なう、
処理を、前記コンピュータに実行させる、付記８に記載の入出力制御プログラム。
【０１５２】
（付記１０）
前記第２記憶装置用の前記第２メモリ領域に保存された前記入出力要求に係る情報を用いて、前記第１所定時間が経過した後に仮縮退状態に切り替えられた前記第２記憶装置に対する前記入出力制御を行なう一方、
前記第１記憶装置用の前記第２メモリ領域に保存された、前記上位アプリケーションからの新たな入出力要求に係る情報を用いて、前記新たな入出力要求に応じた入出力制御を前記第１記憶装置に対して行ない、
前記新たな入出力要求に応じた入出力制御がライトアクセスに係る場合、前記ライトアクセスを行なった前記第１記憶装置の領域の位置情報を、差分情報として、差分情報管理領域に記録する、
処理を、前記コンピュータに実行させる、付記９に記載の入出力制御プログラム。
【０１５３】
（付記１１）
前記第１所定時間が経過してから第２所定時間内に前記第２記憶装置からの処理完了通知を受信すると、前記第２記憶装置を前記仮縮退状態から復旧し、前記差分情報管理領域に記録された前記差分情報に対応する差分データを、前記第１記憶装置から前記第２記憶装置にコピーする、
処理を、前記コンピュータに実行させる、付記１０に記載の入出力制御プログラム。
【０１５４】
（付記１２）
前記第１所定時間が経過してから前記第２所定時間内に前記第２記憶装置からの処理完了通知を受信しない場合、前記第２記憶装置を前記仮縮退状態から縮退状態に変更する、
処理を、前記コンピュータに実行させる、付記１１に記載の入出力制御プログラム。
【０１５５】
（付記１３）
コンピュータが、
上位アプリケーションからの入出力要求に応じて、冗長構成の複数の記憶装置に対して同時に入出力制御を行ない、
前記複数の記憶装置に対して同時に前記入出力制御を行なった結果、前記複数の記憶装置のうちのいずれか一つの第１記憶装置からの処理完了通知を受信すると、前記上位アプリケーションに対して、前記入出力要求に対応する処理の完了応答を出力する、入出力制御方法。
【０１５６】
（付記１４）
前記コンピュータが、
前記入出力制御を開始してから第１所定時間内に前記第１記憶装置からの処理完了通知を受信するとともに前記第１所定時間内に前記複数の記憶装置のうちの前記第１記憶装置以外の第２記憶装置からの処理完了通知を受信しない場合、前記上位アプリケーションに対して前記完了応答を出力する、付記１３に記載の入出力制御方法。
【０１５７】
（付記１５）
前記コンピュータが、
前記上位アプリケーションからの前記入出力要求を処理するための第１メモリ領域とは異なる第２メモリ領域を前記記憶装置毎に確保し、
前記入出力要求に係る情報を前記第１メモリ領域から前記第２メモリ領域にコピーし、
前記第２メモリ領域にコピーされた前記入出力要求に係る情報を用いて各記憶装置に対する前記入出力制御を行なう、付記１４に記載の入出力制御方法。
【０１５８】
（付記１６）
前記コンピュータが、
前記第２記憶装置用の前記第２メモリ領域に保存された前記入出力要求に係る情報を用いて、前記第１所定時間が経過した後に仮縮退状態に切り替えられた前記第２記憶装置に対する前記入出力制御を行なう一方、
前記第１記憶装置用の前記第２メモリ領域に保存された、前記上位アプリケーションからの新たな入出力要求に係る情報を用いて、前記新たな入出力要求に応じた入出力制御を前記第１記憶装置に対して行ない、
前記新たな入出力要求に応じた入出力制御がライトアクセスに係る場合、前記ライトアクセスを行なった前記第１記憶装置の領域の位置情報を、差分情報として、差分情報管理領域に記録する、付記１５に記載の入出力制御方法。
【０１５９】
（付記１７）
前記コンピュータが、
前記第１所定時間が経過してから第２所定時間内に前記第２記憶装置からの処理完了通知を受信すると、前記第２記憶装置を前記仮縮退状態から復旧し、前記差分情報管理領域に記録された前記差分情報に対応する差分データを、前記第１記憶装置から前記第２記憶装置にコピーする、付記１６に記載の入出力制御方法。
【０１６０】
（付記１８）
前記コンピュータが、
前記第１所定時間が経過してから前記第２所定時間内に前記第２記憶装置からの処理完了通知を受信しない場合、前記第２記憶装置を前記仮縮退状態から縮退状態に変更する、付記１７に記載の入出力制御方法。
【符号の説明】
【０１６１】
１    サーバ（情報処理装置）
２，２−１，２−２    記憶装置
３    ＦＣ−ＳＷ
１０    ＣＰＵ
１１    上位アプリケーションプログラム
１２    ディスク管理部
１２ａ    入出力制御部
１２ｂ    応答処理部
１２ｃ    復旧処理部
１３，１３１，１３２    ディスクドライバ
２０    メモリ
２０ａ    アプリ用Ｉ／Ｏ要求管理情報領域（第１メモリ領域）
２０ｂ    アプリ用Ｉ／Ｏバッファ領域（第１メモリ領域）
２１ａ    ディスク＃１用Ｉ／Ｏ要求管理情報領域（第２メモリ領域）
２１ｂ    ディスク＃１用Ｉ／Ｏバッファ領域（第２メモリ領域）
２１ｃ    ディスク＃１用状態管理領域
２１ｄ    ディスク＃１用差分情報管理領域
２２ａ    ディスク＃２用Ｉ／Ｏ要求管理情報領域（第２メモリ領域）
２２ｂ    ディスク＃２用Ｉ／Ｏバッファ領域（第２メモリ領域）
２２ｃ    ディスク＃２用状態管理領域
２２ｄ    ディスク＃２用差分情報管理領域
３１    ディスク＃１のボリューム構成・状態管理情報
３２    ディスク＃２のボリューム構成・状態管理情報
４１ａ    ディスク＃１用状態管理領域
４１ｂ    ディスク＃１用差分情報管理領域
４２ａ    ディスク＃２用状態管理領域
４２ｂ    ディスク＃２用差分情報管理領域
４ｍａ    ディスク＃ｍ用状態管理領域
４ｍｂ    ディスク＃ｍ用差分情報管理領域
４ｎａ    ディスク＃ｎ用状態管理領域
４ｎｂ    ディスク＃ｎ用差分情報管理領域
５１    ディスク＃１用差分情報（ビットマップ）
５２    ディスク＃２用差分情報（ビットマップ）
【図１】
2016057876.tif 000003
【図２】
2016057876.tif 000004
【図３】
2016057876.tif 000005
【図４】
2016057876.tif 000006
【図５】
2016057876.tif 000007
【図６】
2016057876.tif 000008
【図７】
2016057876.tif 000009
【図８】
2016057876.tif 000010
【図９】
2016057876.tif 000011
【図１０】
2016057876.tif 000012
【図１１】
2016057876.tif 000013
【図１２】
2016057876.tif 000014
【図１３】
2016057876.tif 000015
【図１４】
2016057876.tif 000016