(57)【特許請求の範囲】
【請求項１】
複数のストレージと、
同一のデータを前記複数のストレージに書き込むことによってデータの冗長化を行うホストと、
前記複数のストレージの何れかのストレージに障害が発生したことによって冗長度が低下した場合に、前記複数のストレージのうち障害の無い何れかのストレージをコピー元ストレージ、冗長度を回復するために使用するストレージをコピー先ストレージとし、前記コピー元ストレージから前記コピー先ストレージに冗長度の低下したデータと同一のデータをコピーする冗長度回復処理を実行する冗長度回復処理サーバと、
前記複数のストレージに記憶されているファイルおよびディレクトリへの変更操作が前記冗長度回復処理中に前記ホストと前記冗長度回復処理サーバとから同時に行われないように、ファイルおよびディレクトリ単位で排他を行うためのロック管理サーバとを備え、
前記ホストは、変更対象のファイルあるいはディレクトリにアクセスするための情報（ファイルハンドル）を取得するパス名解決処理において、前記冗長度回復処理中のコピー先ストレージに前記変更対象のファイルあるいはディレクトリの上位ディレクトリが存在しないことを発見した場合、存在しなかった上位ディレクトリを、コピー元ストレージからコピー先ストレージにコピーして生成し、該生成した上位ディレクトリ下に前記変更対象のファイルあるいはディレクトリを生成して変更操作を行い、
前記冗長度回復処理サーバは、前記冗長度回復処理では、コピー元ストレージのファイルあるいはディレクトリに一致するファイルあるいはディレクトリがコピー先ストレージに存在するか否かを調べ、存在しないファイルあるいはディレクトリをコピー元ストレージからコピー先ストレージにコピーして生成する
データ多重化システム。
【請求項２】
前記冗長度回復処理サーバから前記ホストへ前記冗長度回復処理の開始と終了の通知を行うことを特徴とする請求項１に記載のデータ多重化システム。
【請求項３】
ａ）ホストが、同一のデータを複数のストレージに書き込むことによってデータの冗長化を行うステップと、
ｂ）冗長度回復処理サーバが、前記複数のストレージの何れかのストレージに障害が発生したことによって冗長度が低下した場合に、前記複数のストレージのうち障害の無い何れかのストレージをコピー元ストレージ、冗長度を回復するために使用するストレージをコピー先ストレージとし、前記コピー元ストレージから前記コピー先ストレージに冗長度の低下したデータと同一のデータをコピーする冗長度回復処理を実行するステップと、
ｃ）前記ホストおよび前記冗長度回復処理サーバが、前記複数のストレージに記憶されているファイルおよびディレクトリへの変更操作が前記ホストと前記冗長度回復処理サーバとで前記冗長度回復処理中に同時に行われないように、ロック管理サーバからロックを取得してファイルおよびディレクトリ単位で排他を行うステップと、
ｄ）前記ホストが、変更対象のファイルあるいはディレクトリにアクセスするための情報（ファイルハンドル）を取得するパス名解決処理において、前記冗長度回復処理中のコピー先ストレージに前記変更対象のファイルあるいはディレクトリの上位ディレクトリが存在しないことを発見した場合、存在しなかった上位ディレクトリを、コピー元ストレージからコピー先ストレージにコピーして生成し、該生成した上位ディレクトリ下に前記変更対象のファイルあるいはディレクトリを生成して変更操作を行うステップとを有し、
前記冗長度回復処理サーバは、前記冗長度回復処理では、コピー元ストレージのファイルあるいはディレクトリに一致するファイルあるいはディレクトリがコピー先ストレージに存在するか否かを調べ、存在しないファイルあるいはディレクトリをコピー元ストレージからコピー先ストレージにコピーして生成する
ことを特徴とするデータ多重化方法。
【請求項４】
前記冗長度回復処理サーバから前記ホストへ前記冗長度回復処理の開始と終了の通知を行うことを特徴とする請求項３に記載のデータ多重化方法。
【請求項５】
同一のデータを複数のストレージに書き込むことによってデータの冗長化を行うホスト計算機であって、
前記複数のストレージの何れかのストレージに障害が発生したことによって冗長度が低下した場合に、前記複数のストレージのうち障害の無い何れかのストレージをコピー元ストレージ、冗長度を回復するために使用するストレージをコピー先ストレージとし、前記コピー元ストレージから前記コピー先ストレージに冗長度の低下したデータと同一のデータをコピーする冗長度回復処理を実行する冗長度回復処理サーバにおける前記冗長度回復処理中は、前記複数のストレージに記憶されているファイルおよびディレクトリへの変更操作が同時に行われないようにファイルおよびディレクトリ単位で排他を行うためのロック管理サーバからロックを取得するロック手段と、
変更対象のファイルあるいはディレクトリにアクセスするための情報（ファイルハンドル）を取得するパス名解決処理において、前記冗長度回復処理中のコピー先ストレージに前記変更対象のファイルあるいはディレクトリの上位ディレクトリが存在しないことを発見した場合、存在しなかった上位ディレクトリを、コピー元ストレージからコピー先ストレージにコピーして生成し、該生成した上位ディレクトリ下に前記変更対象のファイルあるいはディレクトリを生成して変更操作を行うストレージアクセス手段とを備えることを特徴とするホスト計算機。
【請求項６】
同一のデータを複数のストレージに書き込むことによってデータの冗長化を行うホスト計算機を、
前記複数のストレージの何れかのストレージに障害が発生したことによって冗長度が低下した場合に、前記複数のストレージのうち障害の無い何れかのストレージをコピー元ストレージ、冗長度を回復するために使用するストレージをコピー先ストレージとし、前記コピー元ストレージから前記コピー先ストレージに冗長度の低下したデータと同一のデータをコピーする冗長度回復処理を実行する冗長度回復処理サーバにおける前記冗長度回復処理中は、前記複数のストレージに記憶されているファイルおよびディレクトリへの変更操作が同時に行われないようにファイルおよびディレクトリ単位で排他を行うためのロック管理サーバからロックを取得するロック手段と、
変更対象のファイルあるいはディレクトリにアクセスするための情報（ファイルハンドル）を取得するパス名解決処理において、前記冗長度回復処理中のコピー先ストレージに前記変更対象のファイルあるいはディレクトリの上位ディレクトリが存在しないことを発見した場合、存在しなかった上位ディレクトリを、コピー元ストレージからコピー先ストレージにコピーして生成し、該生成した上位ディレクトリ下に前記変更対象のファイルあるいはディレクトリを生成して変更操作を行うストレージアクセス手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ多重化システムに関し、特にユーザアプリケーションプログラムが稼動するホスト計算機が複数のストレージに同一のデータを書き込むことによりデータの多重化を行うデータ多重化システムに関する。
【背景技術】
【０００２】
複数のストレージ（ディスク装置、ディスクアレイ、ファイルサーバなど）から構成され、1つのファイルシステムとして使用される分散型のストレージシステムが存在する。このようなシステムにおいて、障害対策等のために1つのファイルを複数のストレージに冗長に格納する際、図18に示すように、ホスト1から複数のストレージ2に同一のデータを書き込むことで冗長化する構成がある。
【０００３】
例えば特許文献1では、ホストと複数のストレージとの間にデータ二重化装置を設け、ホストが送信したデータI/O指示をデータ二重化装置が多重化して、各々のストレージに発行することにより、データの多重化を行っている。特許文献1ではホストの負荷を軽減するためにデータ二重化装置を設けているが、ホストの負荷増加が問題にならなければデータ二重化装置で行われる処理をホスト1自身で行うことも可能である。
【０００４】
このようにホストが直接あるいは間接的に同一のデータを複数のストレージに書き込むことでデータの冗長化を行っている多重化システムにおいて、ストレージに障害が発生した際、障害が発生したストレージに格納されていたデータの冗長度が減少し、信頼性が低下する。そのため、信頼性を回復するために、冗長度が減少したデータの新たな複製を作成する必要がある。
【０００５】
減少した冗長度を回復する処理の一例が特許文献1の0065段落〜0070段落に記載されている。その記載によれば、何れかのストレージ（特許文献1ではディスクサブシステム）に障害が発生し、障害発生当時と同じ状態の回復対象ストレージ（コピー先ストレージ）を用意できない場合には、正常なストレージ（コピー元ストレージ）に記憶されている全てのデータをコピー先ストレージへコピーすることで、冗長度を回復させている。そして、特許文献1では、冗長度の回復処理中は、ホストからコピー先ストレージへのアクセスを禁止し、コピー元ストレージへのアクセスは許容している。
【０００６】
【特許文献１】特開2005−196490号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、コピー元ストレージに記憶されているデータをコピー先ストレージへコピーしている最中に、ホストがコピー元ストレージのデータを書き換えた場合、その書き換えた部分が未だコピーを完了していない領域であれば、ホストが書き換えたデータはその後に回復対象ストレージへコピーされるために問題は生じないが、既にコピーを終えた領域であれば、回復対象ストレージへ反映されないため、コピー元とコピー先のストレージの記憶内容に矛盾が生じる。このため、特許文献1には詳細は記載されていないが、コピー元のストレージをホストがどのように書き換えたかを記録しておき、コピー元ストレージのデータをコピー先ストレージへ一通りコピーし終えた時点で、前記記録を参照し、ホストによって書き換えられた箇所を再度コピーするといった処理が必要になる。しかし、この再コピー中にホストが再びコピー元ストレージを書き換えると、またコピーが必要になり、このような状態が際限なく繰り返される。結局、ホストがコピー元ストレージを更新しない時期が一定時間以上現れない限り、コピー元ストレージとコピー先ストレージの内容を同一にすることは困難であり、冗長度を回復するまでに長時間を要することになる。
【０００８】
本発明の目的は、ホストが複数のストレージに同一のデータを書き込むことで冗長化を行うデータ多重化システムにおいて、冗長度が低下した場合に、ホストからの書き込みを停止せずに冗長度を速やかに回復させることにある。
【課題を解決するための手段】
【０００９】
本発明の第1のデータ多重化システムは、複数のストレージと、同一のデータを前記複数のストレージに書き込むことによってデータの冗長化を行うホストと、前記複数のストレージの何れかのストレージに障害が発生したことによって冗長度が低下した場合に、前記複数のストレージのうち障害の無い何れかのストレージをコピー元ストレージ、冗長度を回復するために使用するストレージをコピー先ストレージとし、前記コピー元ストレージから前記コピー先ストレージに冗長度の低下したデータと同一のデータをコピーする冗長度回復処理を実行する冗長度回復処理サーバと、前記複数のストレージに記憶されているファイルおよびディレクトリへの変更操作が前記冗長度回復処理中に前記ホストと前記冗長度回復処理サーバとから同時に行われないように、ファイルおよびディレクトリ単位で排他を行うためのロック管理サーバとを備える。
【００１０】
本発明の第1のデータ多重化方法は、ａ）ホストが、同一のデータを複数のストレージに書き込むことによってデータの冗長化を行うステップと、ｂ）冗長度回復処理サーバが、前記複数のストレージの何れかのストレージに障害が発生したことによって冗長度が低下した場合に、前記複数のストレージのうち障害の無い何れかのストレージをコピー元ストレージ、冗長度を回復するために使用するストレージをコピー先ストレージとし、前記コピー元ストレージから前記コピー先ストレージに冗長度の低下したデータと同一のデータをコピーする冗長度回復処理を実行するステップと、ｃ）前記ホストおよび前記冗長度回復処理サーバが、前記複数のストレージに記憶されているファイルおよびディレクトリへの変更操作が前記ホストと前記冗長度回復処理サーバとで前記冗長度回復処理中に同時に行われないように、ロック管理サーバからロックを取得してファイルおよびディレクトリ単位で排他を行うステップとを含む。
【００１１】
本発明の第1のホスト計算機は、同一のデータを複数のストレージに書き込むことによってデータの冗長化を行うホスト計算機であって、前記複数のストレージの何れかのストレージに障害が発生したことによって冗長度が低下した場合に、前記複数のストレージのうち障害の無い何れかのストレージをコピー元ストレージ、冗長度を回復するために使用するストレージをコピー先ストレージとし、前記コピー元ストレージから前記コピー先ストレージに冗長度の低下したデータと同一のデータをコピーする冗長度回復処理を実行する冗長度回復処理サーバにおける前記冗長度回復処理中は、前記複数のストレージに記憶されているファイルおよびディレクトリへの変更操作が同時に行われないようにファイルおよびディレクトリ単位で排他を行うためのロック管理サーバからロックを取得するロック手段と、前記冗長度回復処理中のコピー先ストレージへのアクセス時、変更対象のファイルあるいはディレクトリの上位ディレクトリが存在しないことを発見した場合、存在しなかった上位ディレクトリを、コピー元ストレージからコピー先ストレージへコピーし、変更対象のファイルあるいはディレクトリの変更操作を行うストレージアクセス手段とを備える。
【００１２】
本発明の第2のホスト計算機は、同一のデータを複数のストレージに書き込むことによってデータの冗長化を行うホスト計算機であって、前記複数のストレージの何れかのストレージに障害が発生したことによって冗長度が低下した場合に、前記複数のストレージのうち障害の無い何れかのストレージをコピー元ストレージ、冗長度を回復するために使用するストレージをコピー先ストレージとし、前記コピー元ストレージから前記コピー先ストレージに冗長度の低下したデータと同一のデータをコピーする冗長度回復処理を実行し、且つ、不完全処理通知で指定された存在しなかった上位ディレクトリとその配下のディレクトリおよびファイルを、コピー元ストレージからコピー先ストレージへコピーする機能を有する冗長度回復処理サーバにおける前記冗長度回復処理中は、前記複数のストレージに記憶されているファイルおよびディレクトリへの変更操作が同時に行われないようにファイルおよびディレクトリ単位で排他を行うためのロック管理サーバからロックを取得するロック手段と、前記冗長度回復処理中のコピー先ストレージへのアクセス時、変更対象のファイルあるいはディレクトリの上位ディレクトリが存在しないことを発見するストレージアクセス手段と、前記発見された存在しなかった上位ディレクトリを指定した不完全処理通知を前記冗長度回復処理サーバへ送信する不完全処理通知手段とを備える。
【００１３】
本発明の第1の冗長度回復処理サーバ装置は、ホストから同一のデータを書き込まれることによってデータの冗長化が行われる複数のストレージの何れかのストレージに障害が発生したことによって冗長度が低下した場合に、冗長度を回復するための処理を実行する冗長度回復処理サーバ装置であって、前記複数のストレージのうち障害の無い何れかのストレージをコピー元ストレージ、冗長度を回復するために使用するストレージをコピー先ストレージとし、前記コピー元ストレージから前記コピー先ストレージに冗長度の低下したデータと同一のデータをコピーする冗長度回復処理を実行するコピー手段と、前記複数のストレージに記憶されているファイルおよびディレクトリへの変更操作が前記ホストと前記コピー手段とから同時に行われないようにファイルおよびディレクトリ単位で排他を行うためにロック管理サーバからロックを取得するロック手段とを備える。
【００１４】
本発明の第2の冗長度回復処理サーバ装置は、ホストから同一のデータを書き込まれることによってデータの冗長化が行われる複数のストレージの何れかのストレージに障害が発生したことによって冗長度が低下した場合に、冗長度を回復するための処理を実行する冗長度回復処理サーバ装置であって、前記複数のストレージのうち障害の無い何れかのストレージをコピー元ストレージ、冗長度を回復するために使用するストレージをコピー先ストレージとし、前記コピー元ストレージから前記コピー先ストレージに冗長度の低下したデータと同一のデータをコピーする冗長度回復処理を実行するコピー手段と、前記冗長度回復処理中のコピー先ストレージへアクセスした前記ホストが、変更対象のファイルあるいはディレクトリの上位ディレクトリが存在しないことを発見したことにより、存在しなかった上位ディレクトリを指定した不完全処理通知を送信した場合に、前記不完全処理通知を受信して記憶する不完全処理通知記憶手段とを備え、前記コピー手段は、不完全処理通知で指定された存在しなかった上位ディレクトリとその配下のディレクトリおよびファイルを、コピー元ストレージからコピー先ストレージへコピーすることを特徴とする。
【発明の効果】
【００１５】
本発明によれば、ホストからストレージ群に冗長書き込みを行うデータ多重化システムにおいて、冗長度が低下した場合に、ホストからの書き込みを停止せずに冗長度を速やかに回復させることができる。その理由は、コピー元ストレージおよびコピー先ストレージを含む複数のストレージのファイルおよびディレクトリへの変更操作が冗長度回復処理中にホストと冗長度回復処理サーバとから同時に行われないように、ファイルおよびディレクトリ単位で排他しながら、コピー元ストレージからコピー先ストレージへのコピーと、ホストによるコピー元ストレージおよびコピー先ストレージを含む複数のストレージへの変更操作とを並行して行うようにしているためである。
【発明を実施するための最良の形態】
【００１６】
次に、本発明の実施の形態について図面を参照して詳細に説明する。
【００１７】
『第1の実施の形態』
［構成の説明］
図1を参照すると、本発明の第1の実施の形態に係るデータ多重化システムは、ホストコンピュータ（以下、単にホストと言う）1と、データを冗長化して格納する複数のストレージ2a〜2nと、ロック管理サーバ3と、冗長度回復処理サーバ4とから構成される。
【００１８】
ホスト1は、ユーザプログラム（図示せず）が動く計算機であり、一般的な計算機と同様にＣＰＵおよびメモリなどのハードウェアを備えるとともにオペレーティングシステムなどのソフトウェアを備えており、特にデータの多重化に関連する部分として、ストレージアクセス部5を有している。ホスト1上で動作するユーザプログラムは、このストレージアクセス部5を介してストレージ2a〜2n中のファイルにアクセスを行う。
【００１９】
ストレージアクセス部5は、ユーザプログラムからの指示に従ってストレージ2a〜2nに対してアクセスを行う手段であり、例えばホスト1を構成するＣＰＵとプログラムとで実現される。ストレージアクセス部5は、状態管理部6とロック部7とを持つ。
【００２０】
状態管理部6は、ストレージ2a〜2nの状態が、「通常状態」、「障害状態」、「回復中状態」の3状態の内の何れの状態であるかを管理する。「通常状態」とは、ストレージ2a〜2nの全ストレージが正常に動作している状態、つまり、指定されたデータの冗長度をnとすると、冗長度nで多重化されている状態を意味する。また「障害状態」とは、ストレージ2a〜2nの何れかがアクセスできなくなっており、冗長度が低下している状態を言う。「回復中状態」とは、障害によってアクセスできなくなったストレージに代えて別のストレージをアクセスできるようにするために、当該別のストレージに正常なストレージからデータをコピーし、冗長度を回復させている状態を言う。
【００２１】
これら3つの状態の遷移図を図3に示す。通常状態において、何れかのストレージが障害になると障害状態に遷移する。障害状態において、冗長度を回復する処理が開始されると、回復中状態へ遷移し、冗長度回復処理の完了時点で障害のあるストレージが無くなり冗長度が元に戻ると通常状態へ遷移し、未だ障害のストレージが残っていると障害状態へ遷移する。
【００２２】
また状態管理部6は、障害状態のときには、アクセスできないストレージがどのストレージであるかを記録し、回復中状態のときには、アクセスできないストレージがどのストレージで、回復対象のストレージ（コピー先のストレージ）がどのストレージであるかを記録する。さらに状態管理部6は、各状態で処理を開始したものの完了、および、オープンしたファイル、ディレクトリのクローズを管理する。
【００２３】
ロック部7は、ロック管理サーバ3と通信し、ストレージに記憶されているファイルおよびディレクトリの単位でロックを獲得、解放する処理を行う。
【００２４】
ストレージアクセス部5は、必要に応じてロック部7を用いてロックを獲得、解放しながら、ホスト1上で稼動するユーザプログラムからの要求に従って、ストレージ2a〜2nに対するアクセス、具体的には、ファイル作成、ファイル削除、ディレクトリ作成、ディレクトリ削除、ファイルへの書き込み、ファイルからの読み出しといった処理を行う。ストレージアクセス部5の動作は、状態管理部6によって管理されている状態の種類によって相違する（詳しくは後述する）。
【００２５】
なお、図1ではホスト1は一つしか存在しないが、ホストは複数存在していても良い。
【００２６】
ストレージ2a〜2nは、ファイルあるいはオブジェクトを記録するNAS(Network Attached Storage)あるいは、OSD(Object Based Storage Device)のような記憶装置である。各ファイルは、ストレージ2a〜2nに分散して配置される。また、同一のファイルをストレージ2a〜2n中の複数のストレージに格納することで、冗長化している。
【００２７】
本発明において、各ファイルを複数のストレージ2a〜2nに分散配置する方法、および各ファイルを冗長化する方法は任意である。例えば、AFS(Andrew File System)のボリュームのようにディレクトリの下位ディレクトリおよびファイルの単位で、ストレージに割り当てても良いし、また、ディレクトリ単位および、ファイル単位で行ってもよい。複製の格納方法に関しても、ストレージ2a・2b・2c、ストレージ2d・2e・2f等、ストレージを幾つかのグループに分け、個々のグループをセットとしたり、あるいは、各ストレージを複数の領域に分割しその領域単位で固定のセットを作り、各セットにそれぞれ同じ内容のファイルを配置する方法を使用しても良い。また、ファイルあるいはディレクトリ単位で、任意の組み合わせのストレージ群に割り当てを行い、その割り当てを図示しないメタサーバで管理し、ホスト1がパス名解決の際にメタサーバに問い合わせて、冗長化ファイルの所在を取得するようにしても良い。また、ファイルあるいはディレクトリ単位で、任意の組み合わせのストレージ群に割り当てを行い、各ホスト1に割り当て状況を記録したテーブルを持たせても良い。以下では、説明の便宜上、同一のファイルをストレージ2a〜2nに格納することで、冗長度nで多重化しているものとする。
【００２８】
ロック管理サーバ3は、ストレージ2a〜2nに記憶されているファイルおよびディレクトリへの変更操作が、ホスト1と冗長度回復処理サーバ4とから同時に行われないように、ファイルおよびディレクトリ単位でロックの取得者を管理するサーバである。冗長度nの場合、物理的にn個のファイルおよびディレクトリが存在するが、それぞれ独立にロックがかけられるのでなく、1つのロックでn個のファイルおよびディレクトリがロックされる。図1では、ロック管理サーバ3は1つしか存在しないが、複数あっても良い。複数備える構成では、例えばロック管理サーバ3毎に担当するファイルおよびディレクトリを分担する。このようにすることで、ロック管理サーバ3が処理ネックになることを避けることができる。
【００２９】
冗長度回復処理サーバ4は、ストレージ2a〜2nの何れかのストレージに障害が発生したことによって冗長度が低下した場合に、ストレージ2a〜2nのうち障害の無い何れかのストレージをコピー元ストレージ、冗長度を回復するために新たに組み入れたストレージをコピー先ストレージとし、コピー元ストレージからコピー先ストレージに冗長度の低下したデータと同一のデータをコピーする冗長度回復処理を実行する計算機である。
【００３０】
冗長度回復処理サーバ4は、一般的な計算機と同様にＣＰＵおよびメモリなどのハードウェアを備えるとともにオペレーティングシステムなどのソフトウェアを備えており、特に冗長度回復処理に関連する部分として、コピー部8を有している。
【００３１】
コピー部8は、ストレージ2a〜2nの何れかのストレージから別のストレージにディレクトリおよびファイルのコピーを行う手段であり、例えば冗長度回復処理サーバ4を構成するＣＰＵとプログラムとで実現される。冗長度回復処理サーバ4は、通知部9とロック部10とを持つ。
【００３２】
通知部9は、減少したデータの冗長度を回復する処理の開始をホスト1に通知し、また回復処理の終了時にその旨をホスト1に通知する手段である。
【００３３】
ロック部10は、ロック管理サーバ3と通信し、ストレージに記憶されているファイルおよびディレクトリの単位でロックを獲得、解放する処理を行う。
【００３４】
なお、図1には冗長度回復処理サーバ4は1台しか存在しないが、複数あってもよい。複数備える構成では、冗長度回復処理サーバ4間で複製を作る対象を分担して複製の作成を行う。このようにすることで、回復処理を短時間に終わらせることができる。
【００３５】
また、ロック管理サーバ3と冗長度回復処理サーバ4は、それぞれ独立した計算機として説明したが、同じ計算機で実現することも可能であり、ホスト1の機能の一部として実現することも可能である。
【００３６】
［動作の説明］
次に本実施の形態に係るデータ多重化システムにおけるストレージ2a〜2nに関連する動作を説明する。
【００３７】
（1）ホスト1の動作1
ホスト1のストレージ2a〜2nに対する動作は、状態管理部6で管理されている状態によって決定される。ここでは、通常状態の動作と障害状態の動作を説明し、回復中状態での動作は冗長度回復処理サーバ4の動作を説明した後で説明する。
【００３８】
（1−1）通常状態
ホスト1での通常状態での動作について、ファイルの読み出し動作、ファイルの書き込み動作、ファイルの作成等の動作、障害状態の検出時の動作にわけて説明する。
【００３９】
（1−1−1）ファイルの読み出し
ホスト1のストレージアクセス部5は、ユーザプログラムがアクセス対象とするファイル（以下、対象ファイルと言う）を格納した複数のストレージ2a〜2n中の何れか1つのストレージから、該当ファイルの読み出しを行う。
【００４０】
（1−1−2）ファイルの書き込み
ホスト1のストレージアクセス部5は、対象ファイルを格納した複数のストレージ2a〜2nの全てに対して、該当ファイルへの書き込みを行う。これによって、対象ファイルの各データは冗長度nで冗長化される。
【００４１】
（1−1−3）ファイルの作成等
ホスト1のストレージアクセス部5は、ファイル作成、ファイル削除、ディレクトリ作成、ディレクトリ削除については、対象ファイルまたは対象ディレクトリを格納した全てのストレージに対して、該当処理を行う。これによって、ファイルおよびディレクトリは冗長度nで冗長化される。
【００４２】
（1−1−4）障害状態の検出時
ストレージ2a〜2nの障害の検出は任意の方法で行われる。例えば、ホスト1のストレージアクセス部5は、ストレージ2a〜2nに対して処理要求を出した際、応答が帰って来ないストレージは障害が発生したストレージとして検出する。複数のホスト1がある場合、ストレージ2a〜2nの障害を検出したホスト1が他のホスト1に障害検出を通知しても良い。また、ストレージの監視用サーバ（図示せず）が各ストレージ2a〜2nの状態を監視し、ホスト1に通知しても良い。
【００４３】
ストレージ2a〜2nで障害が検出された場合、ホスト1の状態管理部6に、障害が発生したストレージが通知される。状態管理部6は、通常状態から障害状態に遷移し、通知されたストレージをアクセス不能ストレージとして記録する。以後、ストレージアクセス部5での処理要求の対象からアクセス不能ストレージが外される。
【００４４】
（1−2）障害状態
ホスト1での障害状態での動作について、ファイルの読み出し動作、ファイルの書き込み動作、ファイルの作成等の動作、障害状態の検出時の動作にわけて説明する。
【００４５】
（1−2−1）ファイルの読み出し
ホスト1のストレージアクセス部5は、対象ファイルを格納した複数のストレージ2a〜2nのうち、状態管理部6にアクセス不能ストレージとして記録されているストレージを除いた残りのストレージ群の何れか1つのストレージから、該当ファイルの読み出しを行う。
【００４６】
（1−2−2）ファイルの書き込み
ホスト1のストレージアクセス部5は、対象ファイルを格納した複数のストレージ2a〜2nのうち、状態管理部6にアクセス不能ストレージとして記録されているストレージを除いた残りの全てのストレージに対して、該当ファイルへの書き込みを行う。
【００４７】
（1−2−3）ファイル作成等
ホスト1のストレージアクセス部5は、ファイル作成、ファイル削除、ディレクトリ作成、ディレクトリ削除については、対象ファイルまたはディレクトリを格納した複数のストレージ2a〜2nのうち、状態管理部6にアクセス不能ストレージとして記録されているストレージを除いた残りのストレージ群の全てのストレージに対して、該当処理を行う。
【００４８】
（1−2−4）処理対象から外す具体的な方法
以上述べた障害状態での処理は、ファイルの書き込みや読み出し、ファイルの作成や削除、ディレクトリの作成や削除に先立って行われるパス名解決処理の際に、アクセス不能ストレージを処理の過程で範囲から外すことで実現する。ここで、パス名解決処理とは、指定されたパス名のファイルあるいはディレクトリにアクセスするための情報（ファイルハンドル）を取得する処理である。パス名解決処理の詳細は、回復中状態での処理として後述する。
【００４９】
（2）冗長度回復処理サーバ４の動作
（2−1）全体の流れ
障害が発生したストレージの代替となるストレージが用意され、当該用意されたストレージがホスト1および冗長回復処理サーバ4から要求を受信可能となった後に、システム管理者からの指示などを契機に、冗長度回復処理サーバ4の処理が開始される。ここで、代替となるストレージの記憶内容としては、障害が発生したストレージの障害発生時と同じ記憶内容になっている場合とそうでない場合の2通りが考えられるが、何れの場合も回復処理の手順は同じである。以下、冗長度回復処理サーバ4の全体の動作の流れを図4を参照して説明する。
【００５０】
冗長度回復処理サーバ4のコピー部8は、通知部9によって全ホスト1に対して、回復対象のストレージ（コピー先ストレージ）の情報を付加して回復処理中（回復処理の開始）を通知し(S100)、全ホスト1からの応答を待つ(S101)。回復処理中の通知を受けたホスト1の処理については後述するが、所定の条件が整った時点でホスト1が応答を返してくる。冗長度回復処理サーバ4は、全ホスト1から応答を受信すると、回復処理を行う(S102)。そして、回復処理が完了すると、通知部9によって全ホスト1に対して、回復処理が完了したストレージの情報を付加して回復処理完了を通知し(S103)、図4の処理を終了する。
【００５１】
（2−2）回復処理
次に、図4のステップS102の回復処理の詳細について図5を参照して説明する。
【００５２】
まず、コピー部8は、正常なストレージ（コピー元ストレージ）から回復対象のストレージ（コピー先ストレージ）に格納する（コピーする）未処理のディレクトリを1つ選択し、処理対象とする（S200）。このステップS200での未処理のディレクトリの選択では、ディレクトリの木構造の最上位（rootに近いもの）から順に選択する。次にコピー部8は、処理対象としたディレクトリについてディレクトリ回復処理を行う（S201）。1つの未処理のディレクトリについての回復処理を終えると、回復対象のストレージに格納する未処理のディレクトリが残っているかどうかを判定し（S202）、残っていれば、ステップS200に戻って上述した処理と同様の処理を繰り返し、残っていなければ、図5の処理を終了する（S202）。
【００５３】
（2−3）ディレクトリ回復処理
次に、図5のステップS201のディレクトリ回復処理について図6を参照して説明する。
【００５４】
ディレクトリ回復処理は、図5のステップS200で選択されたディレクトリを対象ディレクトリとして指定し、起動される。
【００５５】
まず、コピー部8は、ロック部10を用いて、対象ディレクトリを指定してロック管理サーバ3にロックを要求し、ロック取得の応答まで待つ（S300）。
【００５６】
次に、コピー部8は、回復対象ストレージ（コピー先ストレージ）の指定されたディレクトリに対応する回復対象ではないストレージ（コピー元ストレージ）のディレクトリの下位ディレクトリの内容と、回復対象ストレージの指定されたディレクトリの下位ディレクトリの内容とを比較する（S301）。
【００５７】
比較の結果、コピー元ストレージに存在し、コピー先ストレージに存在しない下位ディレクトリに関して、コピー部8は、コピー先ストレージの対象ディレクトリに下位ディレクトリを作成する。比較の結果、コピー元ストレージに存在せず、コピー先ストレージに存在する下位ディレクトリについては、コピー部8は、コピー先ストレージの対象ディレクトリから削除する（S302）。
【００５８】
次いで、コピー部8は、ロック部10を用いて、ロック管理サーバ3にステップS300で取得したロックの解放を要求する（S303）。
【００５９】
次いで、コピー部8は、対象ディレクトリの下位のディレクトリで回復対象ストレージに格納する未処理のディレクトリがあれば、ステップS305に移行し、無ければステップS307に移行する（S304）。
【００６０】
ステップS305では、コピー部8は、対象ディレクトリの下位のディレクトリ中で、回復対象ストレージに格納する未処理のディレクトリを1つ処理対象として選択する。次にコピー部8は、この処理対象として選択したディレクトリを指定して、当該図6のディレクトリ回復処理を再び呼び出し(S306)、終了したらステップS304に移行する。
【００６１】
ステップS307では、コピー部8は、対象ディレクトリを指定してファイル回復処理を行う。そして、ステップS307のファイル回復処理が終了すると、図6のディレクトリ回復処理を終了し、呼び出し元へ戻る。
【００６２】
以上のように、ディレクトリの作成および削除に関して、排他して行うことで、冗長度回復処理サーバ4の処理中にホスト1が対象ディレクトリにディレクトリを作成および削除することを排除でき、一貫性が維持できる。
【００６３】
（2−4）ファイル回復処理
次に図6のステップS307のファイル回復処理について図7を参照して説明する。
【００６４】
ファイル回復処理は、ディレクトリを指定して起動される。
【００６５】
まず、コピー部8は、ロック部10を用いて、対象ディレクトリを指定してロック管理サーバ3にロックを要求し、ロック取得の応答まで待つ（S400）。
【００６６】
次に、コピー部8は、回復対象ストレージ（コピー先ストレージ）の指定されたディレクトリに対応する回復対象ではないストレージ（コピー元ストレージ）のディレクトリ配下のファイルの内容と、回復対象ストレージの指定されたディレクトリ配下のファイルの内容とを比較する（S401）。この比較により、コピー元ストレージに存在するが、コピー先ストレージに存在しないファイル、コピー先ストレージに存在するが、コピー元ストレージに存在しないファイル、双方のストレージに共に存在するが、ファイルの中身が違っているファイルが検出される。
【００６７】
上記の比較の結果、一致していないファイルが1つもない場合にはステップS403へ、一致していないファイルが少なくとも1つある場合にはステップS404に移行する（S402）。
【００６８】
ステップS403では、コピー部8は、ロック部10を用いて、ロック管理サーバ3にステップS400で取得したロックの解放を要求し、図7の処理を終了する。
【００６９】
ステップS404では、コピー部8は、ステップS401で発見した内容が一致しないファイルから1つを選択する。
【００７０】
コピー部8は、ステップS404で選択したファイルが、コピー元にないファイルの場合にはステップS406へ、そうでない場合にはステップS407へ移行する（S405）。
【００７１】
ステップS406では、コピー部8は、コピー先ストレージから該当ファイルを削除し、ステップS402に移行する。
【００７２】
ステップS407では、選択したファイルがコピー先にないファイルの場合はステップS408へ、そうでない場合はステップS409へ移行する。
【００７３】
ステップS408では、コピー部8は、コピー先ストレージにステップS404で選択したファイルを作成する。
【００７４】
ステップS409では、コピー部8は、ロック部10を用いて、ステップS404で選択したファイルを指定してロック管理サーバ3にロックを要求し、ロック取得の応答まで待つ。
【００７５】
次いで、ロック部8は、ロック管理サーバ3にステップS400で取得したディレクトリについてのロックの解放を要求し（S410）、次いで、コピー元ストレージからコピー先ストレージへステップS404で選択したファイルをコピーする（S411）。そして、コピー部8は、ロック部10を用いて、ロック管理サーバ3に、ステップS409で取得したファイルについてロックの解放を要求し、ステップS400に移行する（S412）。
【００７６】
このように、ファイルの作成および削除に関して、排他して行うことで、冗長度回復処理サーバ4の処理中にホスト1が対象ディレクトリにファイルを作成および削除することを排除でき、一貫性が維持できる。
【００７７】
また、ファイルのコピーに関して、排他して行うことで、冗長度回復処理サーバ4が処理中にホスト1が対象ファイルを変更することを排除でき、一貫性が維持できる。
【００７８】
なお、本実施の形態では、ファイルのコピーを行う前に対象ディレクトリをアンロックしているため（図7のS410）、ファイルコピー中にホスト1が対象ディレクトリにアクセスして該当ファイルの情報を削除すると、コピー先ストレージにコピーされたファイルはディレクトリからリンクされないファイルとして残ることになる。しかし、このようなファイルは、その参照カウントが0になった段階で削除されるため、一貫性は維持される。
【００７９】
図16に、上記のディレクトリ回復処理およびファイル回復処理によってコピー元ストレージからコピー先ストレージへディレクトリおよびファイルがコピーされていく様子を示す。図中の(1)〜(31）は何れもコピー先ストレージの状態を示し、初期状態は(1)で示すようにルートのディレクトリのみである。また、コピー先ストレージは、(31)に示す状態と同じであるとしている。図中、□はディレクトリ、網かけした□はロックされているディレクトリ、○はファイルを示す。
【００８０】
図16の(2)〜(4)に示すように、最初はルートのディレクトリをロックした状態で、コピー元ストレージのルート直下にある2つのディレクトリが作成（コピー）される。次に、この2つのディレクトリのうちの1つのディレクトリが処理対象とされ、対象ディレクトリをロックした状態で、コピー元ストレージの対象ディレクトリ直下にある1つのディレクトリが作成（コピー）される(（5)〜(7））。次に、この生成したディレクトリが処理対象とされ、対象ディレクトリをロックした状態で、コピー元ストレージの対象ディレクトリ直下にあるディレクトリをコピーしようとするが、コピー元ストレージにはディレクトリが存在しないので、アンロックして当該対象ディレクトリについての処理を終える（(8)〜(10)）。そして、末端のディレクトリに到達したので、その末端のディレクトリを処理対象としてロックした状態で、コピー元ストレージの対象ディレクトリ直下にある3つのファイルが作成（コピー）される（(11)〜(13)）。その後、対象ディレクトリを1つ前の階層に戻し、同様の操作を繰り返していく。
【００８１】
（3）ホスト1の動作2
（3−1）回復処理中の通知を受けた際の動作
ホスト1のストレージアクセス部5は、冗長度回復処理サーバ4から回復処理対象ストレージ（コピー先ストレージ）の情報を付加した回復処理中の通知を受信すると、図8に示す処理の実行を開始する。
【００８２】
まず、ストレージアクセス部5は、状態管理部6により、状態を回復処理中状態へ変更し、通知された回復処理対象ストレージの情報を図示しないメモリに記憶する（S500）。次にストレージアクセス部5は、状態管理部6により、回復処理中の通知を受信する前に開始されていた処理（ストレージ2a〜2nに対するファイル書き込みや読み出し、ディレクトリの作成や削除、ファイルの作成や削除）が完了するのを待つ（S501）。さらに、ストレージアクセス部5は、状態管理部6により、回復処理中の通知を受信する前にオープンされたファイルおよびディレクトリがクローズされるのを待つ（S502）。そして、回復処理開始通知を受信する前に開始されていた処理の全てが完了し、かつ、オープンしていたファイルおよびディレクトリがすべてクローズされると、回復処理中の通知に対する応答を、冗長度回復処理サーバ4に送信し（S503）、図8の処理を終了する。
【００８３】
（3−2）回復処理完了の通知を受けた際の動作
ホスト1のストレージアクセス部5は、冗長度回復処理サーバ4から回復処理が完了したストレージの情報を付加した回復処理完了通知を受信すると、図9に示す処理の実行を開始する。
【００８４】
まず、ストレージアクセス部5は、状態管理部6により、回復処理が完了したストレージを回復対象ストレージから削除する（S600）。次に、未だ回復対象ストレージが残っているかどうかを状態管理部6で管理しているメモリの記録を参照して判断し、回復対象ストレージが少なくとも1つ残っていれば、図9の処理を終了し、1つも残っていなければステップS602へ移行する（S601）。ステップS602では、ストレージアクセス部5は、状態管理部6により、メモリの記録を参照してアクセス不能ストレージが残っているかどうかを判断し、少なくとも1つ残っていれば、ステップS603へ移行し、1つも残っていなければステップS604へ移行する。ステップS603では、状態管理部6により、状態を障害状態へ変更し、図9の処理を終了する。ステップS604では、状態管理部6により、状態を通常状態へ変更し、図9の処理を終了する。
【００８５】
（3−3）回復中状態での動作
（3−3−1）パス名解決
回復中状態でのホスト1でのパス名解決の動作を図10を参照して説明する。
【００８６】
パス名解決は、指定されたパス名のファイルあるいはディレクトリにアクセスするための情報（ファイルハンドル）を取得する処理である。
【００８７】
まず、ストレージアクセス部5は、先頭ディレクトリを検索範囲に設定する（S700）。次にストレージアクセス部5は、先頭ディレクトリを格納したストレージの情報とファイルハンドルを取得する（S701）。次にストレージアクセス部5は、ステップS700で設定した範囲がパス名解決の末端であった場合には、ステップS703に移行し、違う場合はステップS704に移行する（S702）。ステップS703では、ストレージアクセス部5は、ステップS701で取得したストレージとファイルハンドルの情報をパス名解決処理の返却値とし、終了する。
【００８８】
他方、ステップS704では、ストレージアクセス部5は、検索範囲となるディレクトリの下のディレクトリ名あるいはファイル名をパス名から抽出し、検索対象として設定する。
【００８９】
次いで、ストレージアクセス部5は、検索範囲のストレージ群のうち回復中あるいはアクセス不能となっていないストレージで且つ未検索（未処理）のストレージを1つ選択する（S705）。次いで、ステップS705で対象ストレージがあった場合にはステップS707へ、無かった場合にはステップS711へ移行する（S706）。
【００９０】
ステップS707では、ストレージアクセス部5は、ステップS705で選択したストレージの検索範囲のディレクトリから検索対象のファイルあるいはディレクトリのファイルハンドル取得（lookup）を行う。このステップS707でlookupが成功した場合には、ステップS710へ、失敗した場合にはステップS709へ移行する（S708）。ステップS709では、ストレージアクセス部5は、パス名解決処理の返却値をエラーとし、図10の処理を終了する。ステップS710では、ストレージアクセス部5は、ステップS707で取得したファイルハンドルを、ステップS705で選択したストレージにおける検索対象ファイルあるいはディレクトリのファイルハンドルとして図示しないメモリに記憶する。そして、ステップS705へ移行する。
【００９１】
他方、ステップS711では、ストレージアクセス部5は、検索範囲のストレージ群のうち回復中のストレージで且つ未検索（未処理）のストレージを選択する。次いで、ステップS711で対象ストレージがあった場合にはステップS716へ、無かった場合にはステップS713へ移行する。
【００９２】
ステップS713では、ストレージアクセス部5は、パス名解決の末端まで解決されているかどうかを判別し、解決されている場合には、ステップS714へ移行し、解決されていない場合にはステップS715へ移行する。ステップS714では、記憶したファイルハンドル群を返却し、図10の処理を終了する。ステップS715では、記憶したファイルハンドル群を次の検索範囲に設定し、ステップS704へ移行して上述した処理を繰り返す。
【００９３】
また、ステップS716では、ストレージアクセス部5は、ステップS711で選択したストレージ（回復中のストレージ）の検索範囲のディレクトリから検索対象のファイルあるいはディレクトリのファイルハンドル取得（lookup）を行う。そして、このステップS716でlookupが成功した場合には、ステップS718へ、失敗した場合にはステップS719へ移行する（S717）。
【００９４】
ステップS718では、ストレージアクセス部5は、ステップS716で取得したファイルハンドルを、ステップS711で選択したストレージにおける検索対象ファイルあるいはディレクトリのファイルハンドルとして図示しないメモリに記憶する。そして、ステップS711へ移行する。
【００９５】
ステップS719へ移行する状況が発生するのは、回復中のストレージに対する冗長度回復処理サーバ4によるコピー処理が未だ実施されていないディレクトリやファイルに対してホスト1がアクセスしようとした場面で発生する。本実施の形態では、この時点で、ホスト1自身が冗長度回復処理サーバ4に代わって、今回のパス名解決に必要な範囲で、コピー元ストレージからコピー先ストレージへのコピー処理を実施する。
【００９６】
具体的には、まず、ストレージアクセス部5は、ロック部7を用いて、検索範囲のディレクトリを指定してロック管理サーバ3にロックを要求し、ロックの獲得まで待つ（S719）。次に、ストレージアクセス部5は、ステップS704で対象としたファイルあるいはディレクトリを、ステップS711で選択したストレージの検索範囲のディレクトリ下に作成（コピー）する（S720)。次いで、ステップS720で作成したファイルあるいはディレクトリを、ステップS711で選択したストレージのファイルハンドラとして記憶する（S721）。最後に、ストレージアクセス部5は、ロック部7を用いて、ロック管理サーバ3にステップS719で獲得したロックの解放を要求する（S722）。そして、ステップS711へ移行する。
【００９７】
図17に、ホスト1でのパス名解決時に、冗長度の回復対象ストレージに対して対象ディレクトリの作成を行う例を示す。ここでは、図16の（13）の状態にある回復対象ストレージに対して、ホスト1が新しいファイルを作成する場合のものである。
【００９８】
ホスト1は、ルート直下の2つのディレクトリのうちの右側のディレクトリまでのlookup処理を終え、その下のディレクトリ名をパス名から抽出して（図10のS704）、ステップS716でlookup処理を行った際、対象ディレクトリが無いことを発見する。そこで、ホスト1は、図17の（14）に示すように検索範囲のディレクトリをロックし（S719）、次いで（15）に示すように正常な他のストレージからコピーすることでディレクトリを作成し（S720）、この作成したディレクトリを回復対象ストレージのファイルハンドラとして記憶し（S721）、（16）に示すように検索範囲のディレクトリのロックを解放する（S722）。その後、ホスト1はパス名解決で得られたファイルハンドラを用いて新規ファイルを作成する（図17の（17）〜（19））。
【００９９】
このように本実施の形態では、パス名解決中に回復対象ストレージに存在しないディレクトリが発見された場合にディレクトリを作成することができる。また、作成する際にロックを行っているため、冗長度回復処理サーバ4の処理とは排他され、一貫性が崩れることもない。
【０１００】
図10の処理に関して説明を補足する。ステップS700では、rootと呼ばれる先頭のディレクトリから検索を開始する。また、rootの格納ストレージ群および対応したファイルハンドルはmount等のタイミングで事前に取得されているものとする。
【０１０１】
また、相対パス指定の場合には、root以外のディレクトリから解決を行う場合もある。この場合、相対パス指定の場合も視点となるディレクトリの格納ストレージ群および対応したファイルハンドルはワーキングディレクトリの解決等のタイミングで事前に取得されているものとする。
【０１０２】
ファイルハンドルの取得は、ホスト1内に記憶している情報を使用する。また、ストレージ2a〜2nに問い合わせる場合もある。さらに、メタサーバと呼ばれるストレージ内のファイルの格納を管理するサーバに問い合わせる場合もある。
【０１０３】
（3−3−2）ファイルの作成等
回復中状態において、ホスト1のストレージアクセス部5がディレクトリ作成、ディレクトリ削除、ファイル作成、ディレクトリ作成を行う場合、実際に作成および削除を行う前に、ロック部7を用いて、ファイルまたはディレクトリが作成あるいは削除される上位ディレクトリを指定してロック管理サーバ3にロックを要求し、ロックの獲得まで待つ。そして、実際に作成および削除を行った後に、ロック部7を用いて、前記取得したロックの解放をロック管理サーバ3に要求する。このようにファイルあるいはディレクトリが作成あるいは削除する際にロックを行っているため、冗長度回復処理サーバ4の処理とは排他され、一貫性が崩れることがない。
【０１０４】
（3−3−3）ファイルオープン
ホスト1のストレージアクセス部5は、ファイルのオープン毎にロックの管理を行う。回復中状態でのホスト1でのファイルオープンの動作を図11を参照して説明する。
【０１０５】
まず、ストレージアクセス部5は、オープンがリードオンリー（read only）モードで要求された場合には、ステップS803へ移行し、違う場合はステップS801へ移行する。ステップS801では、ロック部7により、オープン対象を指定してロック管理サーバ3にロックを要求し、ロックの獲得まで待つ。次いで、後のロックの解放に必要となる情報をオープン毎のロック管理の領域に記憶し、ステップS803へ移行する（S802）。
【０１０６】
ステップS803では、ストレージアクセス部5は、オープン処理をアクセス不能ストレージ以外の対象ファイルを格納しているストレージに対して行い、図11の処理を終了する。
【０１０７】
（3−3−4）ファイルクローズ
回復中状態でのホスト1でのファイルクローズの動作を図12を参照して説明する。
【０１０８】
まず、ストレージアクセス部5は、オープンしたストレージについてクローズ処理を行う（S900）。次に、オープン毎のロック管理領域を参照して、ロックされていたことが記録されていた場合はステップS902へ移行し、記録されていなかった場合は図12の処理を終了する（S901）。ステップS902では、ロック部7を用いて、記録されていた情報をもとにロック管理サーバ3にロックの解放を要求し、図12の処理を終了する。
【０１０９】
このようにして、オープンでロックを行い、クローズでロックを解放することで、冗長度回復処理サーバ4の処理とは排他され、一貫性が崩れることがない。また、リードオンリー（read only）の際にはロックを行わないことで、ライトを行わない際にはホスト1の処理を妨げることもない。
【０１１０】
（3−3−5）ファイルの書き込み
ホスト1のストレージアクセス部5は、回復中状態においてファイルへの書き込みを行う場合、対象ファイルを格納した複数のストレージのうち状態管理部6でアクセス不能ストレージとして記録されているストレージを除いた残りの全てのストレージ群に該当ファイルの書き込みを行う。
【０１１１】
（3−3−6）ファイルの読み出し
ホスト1のストレージアクセス部5は、回復中状態においてファイルからの読み出しを行う場合、対象ファイルを格納した複数のストレージのうち状態管理部6でアクセス不能ストレージおよび回復対象ストレージとして記録されているストレージを除いた残りの全てのストレージ群の何れかのストレージから該当ファイルの読み出しを行う。
【０１１２】
（4）ロック管理サーバ3の動作
ロック管理サーバ3は、ファイルあるいはディレクトリ単位でロックの取得状態を管理し、ロックは同時には1要求にしか取得を許可しない。例えばロック管理サーバ3は、ロック要求をサーバ内で記憶し、同一ファイルあるいはディレクトリに関する要求は、到着順等の順序で次にロックを取得する要求を決定する。また、ロック管理サーバ3は、ロック取得の要求に対しては、許可した場合に取得できたことを通知し、ロック解放要求によりロックの解放を行う。
【０１１３】
なお、本実施の形態では、ホスト1のストレージアクセス部5は、ファイルのオープン時にロック要求を行ったが、対象ファイルに初めてライトする前にロックを行い、ファイルのクローズ時にロックを解放する方法でも良い。このようにすると、実際にファイルを変更しない（ライトしない）場合には、ロックを行わないので、ホスト1での処理を妨げる可能性をさらに下げられる。
【０１１４】
『第2の実施の形態』
図2を参照すると、本発明の第2の実施の形態に係るデータ多重化システムは、図1に示した第1の実施の形態に係るデータ多重化システムと比較して、ホスト1がストレージアクセス部5に代えてストレージアクセス部5Aを備え、冗長度回復処理サーバ4がコピー部8に代えてコピー部8Aを備えている点で相違する。
【０１１５】
ホスト1のストレージアクセス部5Aは、ストレージアクセス部5と比較して、新たに不完全処理通知部11を備えている点で相違し、また、回復中状態での動作が一部相違している。
【０１１６】
冗長度回復処理サーバ4のコピー部8Aは、コピー部8と比較して、新たに不完全処理通知保存部12を備えている点で相違し、また、回復処理の一部が相違している。
【０１１７】
以下、本実施の形態の動作を第1の実施の形態との相違点を中心に説明する。
【０１１８】
（3'）ホスト1の動作2
（3−3'）回復中状態でのホストの動作
（3−3−1'）パス名解決
回復中状態でのホスト1でのパス名解決の動作を図14を参照して説明する。前述したように、パス名解決は、指定されたパス名のファイルあるいはディレクトリにアクセスするための情報（ファイルハンドル）を取得する処理である。なお、本実施の形態の場合、ストレージアクセス部5Aは、不完全処理flagを処理の内部状態として持つ。
【０１１９】
まず、ストレージアクセス部5Aは、先頭ディレクトリを検索範囲に設定し、不完全処理flagをクリアする（S1100）。次いで、先頭ディレクトリを格納したストレージの情報とファイルハンドルを取得し（S1101）、次にステップS1100で設定した範囲がパス名解決の末端であった場合には、ステップS1103に移行し、違う場合はステップS1104に移行する（S1102）。ステップS1103では、ステップS1101で取得したストレージとファイルハンドルの情報と不完全処理flagとを返却し、終了する。
【０１２０】
ステップS1104以降の処理のうち、ステップS1104〜S1113、S1115〜S1118は、図10のステップS704〜S713、S715〜S718と同じである。ステップS1119とステップS1114では以下のような処理が行われる。
【０１２１】
ステップS1119では、ステップS1116におけるlookupに失敗したので、不完全処理flagをセットし、今回見つからなかったディレクトリを不完全処理flagに対応付けてメモリに記録し、ステップS1111へ移行する。第1の実施の形態では、パス名解決の際に回復対象ストレージに存在しないディレクトリを発見すると、ホスト1がそのディレクトリを作成（コピー）した。しかし、本実施の形態では、パス名解決中に回復対象ストレージに存在しないディレクトリが発見された場合は、検索範囲からは外れたとして、下位のディレクトリあるいはファイルに関しては回復対象ストレージに対して変更処理は行わない。その代わりに、未発見のディレクトリのコピーを後に冗長度回復処理サーバ4に行わせるために、不完全処理flagをセットし、見つからなかったディレクトリをメモリに記録しておく。これにより、ディレクトリを作成する処理とそれに関連するロックを行わないため、第1の実施の形態に較べて、ホスト1での処理時間が短縮される。
【０１２２】
ステップS1114では、記憶したファイルハンドル群と、不完全処理flagおよびそれに対応して記憶した未発見ディレクトリの情報とをパス名解決処理の返却値とし、図14の処理を終える。
【０１２３】
（3−3−2'）ファイルの作成等
回復中状態において、ホスト1のストレージアクセス部5がディレクトリ作成、ディレクトリ削除、ファイル作成、ファイル削除を行う場合、実際に作成および削除を行う前に、ロック部7を用いて、ファイルまたはディレクトリが作成あるいは削除される上位ディレクトリを指定してロック管理サーバ3にロックを要求し、ロックの獲得まで待つ。
【０１２４】
次に、ファイルハンドルが取得できたストレージに対してのみ、ディレクトリ作成、ディレクトリ削除、ファイル作成、ファイル削除を行った後に、ロック部7を用いて、前記取得したロックの解放をロック管理サーバ3に要求する。このようにファイルあるいはディレクトリが作成あるいは削除する際にロックを行っているため、冗長度回復処理サーバ4の処理とは排他され、一貫性が崩れることがない。
【０１２５】
その後、パス名解決で返却された不完全処理flagがセットされていた場合には、不完全処理通知部11を用いて、不完全処理flagに対応して記録された未発見ディレクトリのうちの上位ディレクトリを指定し、冗長度回復処理サーバ4に不完全処理を通知する。パス名解決の際に回復対象ストレージにディレクトリを作成せず回復対象ストレージに変更を行わないが、冗長度回復処理サーバ4に不完全処理を通知し、後述するようにコピー処理を再度実行させることにより、ディレクトリの状態の同期が保証される。
【０１２６】
（3−3−3'）ファイルオープン
本実施の形態での回復中状態でのホスト1のファイルのオープン処理は、ファイルハンドルが取得できたストレージに対してのみ行う点、オープン処理の呼び出しの際にパス名解決で返却された不完全処理flagとそれに付随する未発見ディレクトリとを受け取って記憶しておく点を除き、第1の実施の形態の回復中状態でのホスト1のファイルのオープン処理と同じである。ここで、不完全処理flagとそれに付随する未発見ディレクトリとを記憶しておくのは、後のファイルのクローズ時に使用するためである。
【０１２７】
（3−3−4'）ファイルクローズ
次に回復中状態でのホスト1でのファイルクローズの動作を図15を参照して説明する。
【０１２８】
まず、オープンしたストレージについてクローズ処理を行う（S1200）。
【０１２９】
次に、オープン毎のロック管理領域にロックされていたことが記録されていた場合、ステップS1202へ移行し、記録されていなかった場合は図15の処理を終了する(S1201)。
【０１３０】
ステップS1202では、記録されていた情報をもとにロック管理サーバ3にロックの解放を要求する。このようにすることで、ファイルあるいはディレクトリが作成あるいは削除する際にロックを行っているため、冗長度回復処理サーバ4の処理とは排他され、一貫性が崩れることがない。
【０１３１】
次に、オープン時に記憶した不完全処理flagを参照し、セットされて渡されていた場合にはステップS1204へ移行し、そうでない場合には図15の処理を終了する。
【０１３２】
ステップS1204では、不完全処理通知保存部12を用いて、冗長度回復処理サーバ4に、不完全処理flagに付随して記録された未発見ディレクトリのうちの上位ディレクトリを指定して、不完全処理を通知し、終了する。このように、パス名解決の際に回復対象ストレージにディレクトリを作成せず回復対象ストレージに変更を行わないが、冗長度回復処理サーバ4に不完全処理を通知し、再度コピー処理を実行させることにより、ディレクトリの状態の同期が保証される。
【０１３３】
（3−3−5'）ファイルの書き込み
ホスト1のストレージアクセス部5は、回復中状態においてファイルへの書き込みを行う場合、対象ファイルを格納した複数のストレージのうち、状態管理部6がファイルオープンしたストレージ群の全てに該当ファイルの書き込みを行う。従って、パス名解決ができなかった回復対象ストレージについては、書き込みは行われない。
【０１３４】
（3−3−6'）ファイルの読み出し
ホスト1のストレージアクセス部5は、回復中状態においてファイルからの読み出しを行う場合、対象ファイルを格納した複数のストレージのうち状態管理部6でアクセス不能ストレージおよび回復対象ストレージとして記録されているストレージを除いた残りの全てのストレージ群の何れかのストレージから該当ファイルの読み出しを行う。
【０１３５】
（2'）冗長度回復処理サーバ4の動作
（2−1'）全体の流れ
障害が発生したストレージの代替となるストレージが用意され、当該用意されたストレージがホスト1および冗長度回復処理サーバ4から要求を受信可能となった後に、冗長度回復処理サーバ4の処理が開始される。ここで、代替となるストレージの記憶内容としては、障害が発生したストレージの障害発生時と同じ記憶内容になっている場合とそうでない場合の2通りが考えられるが、何れの場合も回復処理の手順は同じである。以下、冗長度回復処理サーバ4の全体の動作の流れを図13を参照して説明する。
【０１３６】
冗長度回復処理サーバ4のコピー部8Aは、通知部9によって全ホスト1に対して、回復対象のストレージ（コピー先ストレージ）の情報を付加して回復処理中を通知し(S1000)、全ホスト1からの応答を待つ(S1001)。回復処理中の通知を受けたホスト1は第1の実施の形態と同様に、所定の条件が整った時点で応答を返してくる。冗長度回復処理サーバ4は、全ホスト1から応答を受信すると、回復処理を行う(S1002)。ここまでの動作は、第1の実施の形態と同じである。
【０１３７】
コピー部8Aは、ステップS1002の回復処理を終えると、不完全処理通知保存部12を参照して、不完全処理通知がホスト1から来ているかどうかを判定し、来ている場合にはステップS1005へ、来ていない場合にはステップS1004へ移行する（S1003）。ステップS1004では、通知部9によって全ホスト1に対して、回復処理が完了したストレージの情報を付加して回復処理完了を通知し、図13の処理を終了する。
【０１３８】
ステップS1005では、コピー部8Aは、不完全処理通知保存部12に記憶されているディレクトリから未処理のディレクトリを1つ選択する。未処理のディレクトリが無い場合にはステップS1003へ移行し、ある場合にはステップS1007へ移行する（S1006）。
【０１３９】
ステップS1007では、コピー部8Aは、ステップS1005で選択したディレクトリを指定しディレクトリ回復処理を行い、ステップS1005へ移行する。ステップS1007で行われるディレクトリ回復処理の詳細は図6を参照して既に説明した処理と同じである。
【０１４０】
このようにホスト1から不完全処理通知で通知されたディレクトリを指定したディレクトリ回復処理を再度実行することによって、ホスト1が正常なストレージに対しては作成ないし削除できたファイルやディレクトリを、ホスト1が作成ないし削除できなかった回復処理中ストレージに対して反映することができ、一貫性が崩れることがない。
【０１４１】
なお、ステップS1002とステップS1003の間に、システムで規定した時間だけ待つ処理を挿入するようにしても良い。
【図面の簡単な説明】
【０１４２】
【図１】本発明の第1の実施の形態のブロック図
【図２】本発明の第2の実施の形態のブロック図
【図３】ホストの状態遷移を示す状態遷移図
【図４】冗長度回復処理サーバの動作を示すフロー図
【図５】冗長度回復処理サーバでの回復処理の動作を示すフロー図
【図６】冗長度回復処理サーバでのディレクトリ回復処理の動作を示すフロー図
【図７】冗長度回復処理サーバでのファイル回復処理の動作を示すフロー図
【図８】回復処理開始の通知を受けた際のホストの動作を示すフロー図
【図９】回復処理完了の通知を受けた際のホストの動作を示すフロー図
【図１０−１】ホストでの回復中状態でのパス名解決の動作を示すフロー図
【図１０−２】ホストでの回復中状態でのパス名解決の動作を示すフロー図
【図１１】ホストでの回復中状態でのファイルオープンの動作を示すフロー図
【図１２】ホストでの回復中状態でのファイルクローズの動作を示すフロー図
【図１３】冗長度回復処理サーバでの回復処理の別の動作を示すフロー図
【図１４−１】ホストでの回復中状態でのパス名解決の別の動作を示すフロー図
【図１４−２】ホストでの回復中状態でのパス名解決の別の動作を示すフロー図
【図１５】ホストでの回復中状態でのファイルクローズの別の動作を示すフロー図
【図１６−１】ディレクトリ回復処理およびファイル回復処理によってコピー元ストレージからコピー先ストレージへディレクトリおよびファイルがコピーされていく様子を示す図
【図１６−２】ディレクトリ回復処理およびファイル回復処理によってコピー元ストレージからコピー先ストレージへディレクトリおよびファイルがコピーされていく様子を示す図
【図１７】ホストでのパス名解決時に、冗長度の回復対象ストレージに対して対象ディレクトリの作成を行う例を示す図
【図１８】ホストが複数のストレージに同一のデータを書き込むことでデータの多重化を行うシステムのブロック図
【符号の説明】
【０１４３】
1…ホスト
2a〜2n…ストレージ
3…ロック管理サーバ
4…冗長度回復処理サーバ
5、5A…ストレージアクセス部
6…状態管理部
7、10…ロック部
8、8A…コピー部
9…通知部
11…不完全処理通知部
12…不完全処理通知保存部
【図１】
0005303935.tif 000002
【図２】
0005303935.tif 000003
【図３】
0005303935.tif 000004
【図４】
0005303935.tif 000005
【図５】
0005303935.tif 000006
【図６】
0005303935.tif 000007
【図７】
0005303935.tif 000008
【図８】
0005303935.tif 000009
【図９】
0005303935.tif 000010
【図１０−１】
0005303935.tif 000011
【図１０−２】
0005303935.tif 000012
【図１１】
0005303935.tif 000013
【図１２】
0005303935.tif 000014
【図１３】
0005303935.tif 000015
【図１４−１】
0005303935.tif 000016
【図１４−２】
0005303935.tif 000017
【図１５】
0005303935.tif 000018
【図１６−１】
0005303935.tif 000019
【図１６−２】
0005303935.tif 000020
【図１７】
0005303935.tif 000021
【図１８】
0005303935.tif 000022