(57)【要約】【課題】第１のサーバ及び第２のサーバに対するアクセス性能を低下させることなく、第１のサーバ及び第２のサーバのいずれに対しても同一内容のファイルにライトアクセスが可能となる技術を提供する。【解決手段】ファイル格納システムは、第１のＦＳ（ファイルシステム）を有する第１のサーバと、第２のＦＳを有する第２のサーバとを含む。第１及び第２のサーバは、第１及び第２の差分管理テーブルをそれぞれ記憶する。第１のサーバは、ライト要求を受信した場合、第１のファイルの差分を第１のＦＳに格納し、第１の差分管理テーブルを更新し、第１のファイルの差分が第１のＦＳに格納されたことを示す差分格納通知を第２のサーバに送信する。第２のサーバは、差分格納通知を受信し、第２の差分管理テーブルを更新する。【選択図】図１
2013250948.tif 000002
【特許請求の範囲】
【請求項１】
第１のファイルシステムを有する第１のサーバと、
第２のファイルシステムを有する第２のサーバと
を有し、
前記第１のサーバは、前記第１のファイルシステム及び前記第２のファイルシステムに格納されている第１のファイルについての差分が前記第１のファイルシステム又は前記第２のファイルシステムのいずれかに格納されているかを示す第１の差分管理テーブルを保持し、
前記第２のサーバは、前記第１のファイルについての差分が前記第１のファイルシステム又は前記第２のファイルシステムのいずれかに格納されているかを示す第２の差分管理テーブルを保持し、
前記第１のサーバは、前記第１のファイルに対するライト要求を受信した場合に、前記ライト要求に基づく前記第１のファイルの差分データを前記第１のファイルシステムに格納し、前記第１のファイルの前記差分データが前記第１のファイルシステムに格納されていることを示すデータを前記第１の差分管理テーブルに格納し、前記第１のファイルの前記差分データが前記第１のファイルシステムに格納されたことを示す差分格納通知を前記第２のサーバに送信し、
前記第２のサーバは、前記差分格納通知を前記第１のサーバから受信した場合に、前記第１のファイルについての差分が前記第１のファイルシステムに格納されていることを示すデータを前記第２の差分管理テーブルに格納する、
ことを特徴とするファイル格納システム。
【請求項２】
前記第２のサーバは、
前記第２の差分管理テーブルに基づいて、前記第２のファイルシステムに格納されていない前記第１のファイルの前記差分データを前記第１のサーバから取得し、
前記取得した前記第１のファイルの前記差分データを前記第２のファイルシステムに格納するとともに、前記第１のファイルの前記差分データが前記第１のファイルシステム及び前記第２のファイルシステムに格納されていることを示すデータを前記第２の差分管理テーブルに格納する、
ことを特徴とする請求項１に記載のファイル格納システム。
【請求項３】
前記第２のサーバは、前記第１のファイルに対するリード要求を受信した場合に、
前記第２の差分管理テーブルに基づいて、前記第２のファイルシステムに格納されていない前記第１のファイルの前記差分データを前記第１のサーバから取得し、
前記第２のファイルシステムに格納されている前記第１のファイルと前記差分データとにより前記リード要求に応答する、
ことを特徴とする請求項１に記載のファイル格納システム。
【請求項４】
前記第２のサーバは、前記第１のファイルに対するアクセス要求を一定時間以上受信していない場合に、
前記第２の差分管理テーブルに基づいて、前記第２のファイルシステムに格納されていない前記第１のファイルの前記差分データを前記第１のサーバから取得し、
前記取得した前記第１のファイルの前記差分データを前記第２のファイルシステムに格納するとともに、前記第１のファイルの前記差分データが前記第１のファイルシステム及び
前記第２のファイルシステムに格納されていることを示すデータを前記第２の差分管理テーブルに格納する、
ことを特徴とする請求項１に記載のファイル格納システム。
【請求項５】
前記第１のファイルは、前記第１のファイルシステム及び前記第２のファイルシステムのそれぞれにファイルブロック単位で格納されており、
前記第１のファイルの前記差分データは、前記第１のファイルシステム及び前記第２のファイルシステムのそれぞれに前記第１のファイルのファイルブロック単位で格納され、
前記第１の差分管理テーブル及び前記第２の差分管理テーブルは、前記第１のファイルのファイルブロック単位の差分データごとに当該差分データがどのファイルシステムに格納されているかを示す
ことを特徴とする請求項１に記載のファイル格納システム。
【請求項６】
前記第２のサーバは、前記第１のファイルについての差分が一定量以上となっている場合に、
前記第２の差分管理テーブルに基づいて、前記第２のファイルシステムに格納されていない前記第１のファイルの前記差分データを前記第１のサーバから取得し、
前記取得した前記第１のファイルの前記差分データを前記第２のファイルシステムに格納するとともに、前記第１のファイルの前記差分データが前記第１のファイルシステム及び
前記第２のファイルシステムに格納されていることを示すデータを前記第２の差分管理テーブルに格納する、
ことを特徴とする請求項１に記載のファイル格納システム。
【請求項７】
前記第２のサーバは、前記第２のサーバが障害から復旧した場合において、前記第１のファイルの前記差分データが前記第１のファイルシステムに格納されているときは、前記第１のファイルの前記差分データが前記第１のファイルシステムに格納されていることを示すデータを前記第２の差分管理テーブルに格納する、
ことを特徴とする請求項１に記載のファイル格納システム。
【請求項８】
前記第１のサーバは、前記第２のサーバに障害が発生している間に前記第１のファイルに対する削除要求を受信した場合、前記第１のファイルシステムから前記第１のファイルを削除するとともに前記第１のファイルが削除されたこと示すデータを記憶し、
前記第２のサーバは、
前記第２のサーバが障害から復旧した場合に、
前記第１のファイルが削除されたこと示すデータを前記第１のサーバが記憶しているときは、前記第１のファイルを前記第２のファイルシステムから削除し、
前記第１のファイルが削除されたこと示すデータを前記第１のサーバが記憶しておらず、且つ、前記第１のファイルが前記第２のファイルシステムに存在しないときは、前記第１のファイルを前記第１のサーバから取得して前記第２のファイルシステムに格納する、
ことを特徴とする請求項７に記載のファイル格納システム。
【請求項９】
第１のファイルシステムを有する第１のサーバと、第２のファイルシステムを有する第２のサーバとを含むファイル格納システムにおけるファイル格納方法であって、
前記第１のサーバは、前記第１のファイルに対するライト要求を受信した場合、前記ライト要求に基づく前記第１のファイルの差分データを前記第１のファイルシステムに格納し、前記第１のファイルの前記差分データが前記第１のファイルシステムに格納されていることを示すデータを、前記第１のファイルシステム及び前記第２のファイルシステムに格納されている第１のファイルについての差分が前記第１のファイルシステム又は前記第２のファイルシステムのいずれかに格納されているかを示す第１の差分管理テーブルに格納し、前記第１のファイルの前記差分データが前記第１のファイルシステムに格納されたことを示す差分格納通知を前記第２のサーバに送信し、
前記第２のサーバは、前記差分格納通知を前記第１のサーバから受信した場合に、前記第１のファイルについての差分が前記第１のファイルシステムに格納されていることを示すデータを、前記第１のファイルについての差分が前記第１のファイルシステム又は前記第２のファイルシステムのいずれかに格納されているかを示す第２の差分管理テーブルに格納する、
ことを特徴とするファイル格納方法。
【請求項１０】
前記第２のサーバは、
前記第２の差分管理テーブルに基づいて、前記第２のファイルシステムに格納されていない前記第１のファイルの前記差分データを前記第１のサーバから取得し、
前記取得した前記第１のファイルの前記差分データを前記第２のファイルシステムに格納するとともに、前記第１のファイルの前記差分データが前記第１のファイルシステム及び前記第２のファイルシステムに格納されていることを示すデータを前記第２の差分管理テーブルに格納する、
ことを特徴とする請求項９に記載のファイル格納方法。
【請求項１１】
前記第２のサーバは、前記第１のファイルに対するリード要求を受信した場合に、
前記第２の差分管理テーブルに基づいて、前記第２のファイルシステムに格納されていない前記第１のファイルの前記差分データを前記第１のサーバから取得し、
前記第２のファイルシステムに格納されている前記第１のファイルと前記差分データとにより前記リード要求に応答する、
ことを特徴とする請求項９に記載のファイル格納方法。
【請求項１２】
前記第２のサーバは、前記第１のファイルに対するアクセス要求を一定時間以上受信していない場合に、
前記第２の差分管理テーブルに基づいて、前記第２のファイルシステムに格納されていない前記第１のファイルの前記差分データを前記第１のサーバから取得し、
前記取得した前記第１のファイルの前記差分データを前記第２のファイルシステムに格納するとともに、前記第１のファイルの前記差分データが前記第１のファイルシステム及び
前記第２のファイルシステムに格納されていることを示すデータを前記第２の差分管理テーブルに格納する、
ことを特徴とする請求項９に記載のファイル格納方法。
【請求項１３】
前記第１のファイルは、前記第１のファイルシステム及び前記第２のファイルシステムのそれぞれにファイルブロック単位で格納されており、
前記第１のファイルの前記差分データは、前記第１のファイルシステム及び前記第２のファイルシステムのそれぞれに前記第１のファイルのファイルブロック単位で格納され、
前記第１の差分管理テーブル及び前記第２の差分管理テーブルは、前記第１のファイルのファイルブロック単位の差分データごとに当該差分データがどのファイルシステムに格納されているかを示す
ことを特徴とする請求項９に記載のファイル格納方法。
【請求項１４】
前記第２のサーバは、前記第１のファイルについての差分が一定量以上となっている場合に、
前記第２の差分管理テーブルに基づいて、前記第２のファイルシステムに格納されていない前記第１のファイルの前記差分データを前記第１のサーバから取得し、
前記取得した前記第１のファイルの前記差分データを前記第２のファイルシステムに格納するとともに、前記第１のファイルの前記差分データが前記第１のファイルシステム及び
前記第２のファイルシステムに格納されていることを示すデータを前記第２の差分管理テーブルに格納する、
ことを特徴とする請求項９に記載のファイル格納方法。
【請求項１５】
前記第２のサーバは、前記第２のサーバが障害から復旧した場合において、前記第１のファイルの前記差分データが前記第１のファイルシステムに格納されているときは、前記第１のファイルの前記差分データが前記第１のファイルシステムに格納されていることを示すデータを前記第２の差分管理テーブルに格納する、
ことを特徴とする請求項９に記載のファイル格納方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、第１のファイルシステムを有する第１のサーバと、第２のファイルシステムを有する第２のサーバとを含むファイル格納システムでのファイルの格納に関する。
【背景技術】
【０００２】
近年、各拠点や部門に設置されたクライアントから、インターネット回線を介して、データセンターに設置されたファイルサーバに対してファイルを転送し、データセンターにおいてファイルを集中管理するストレージクラウドが普及しつつある。ストレージクラウドでは、データ保護の観点から、ファイルサーバ内のデータのリモートコピーが行われる。ファイルサーバ内のデータのリモートコピーを行うためのシステム構成としては、通常運用時にクライアントがアクセスするファイルサーバ（以下「正サイト」と記す）と、正サイトのリモートコピー先であり、正サイトに障害が発生した場合にクライアントがアクセスするファイルサーバ（以下「副サイト」と記す）とを有するシステム構成が一般的である。通常、正サイトと副サイトとは異なるデータセンターに設置される。前述のシステム構成では、副サイトは、通常時はアクセス不可もしくはＲｅａｄＯｎｌｙアクセス（以下「ＲＯアクセス」と記す）可能な状態で運用される。副サイトを、Ｒｅａｄ／Ｗｒｉｔｅアクセス（Ｒｅａｄ及びＷｒｉｔｅが可能なアクセスのことであり、以下「ＲＷアクセス」と記す）可能な状態で運用すれば、クライアントとデータセンターとをインターネット回線により接続する低速な通信環境において、クライアントは、データセンターとの物理的な距離を考慮し、最適な通信品質となるサイトのファイルサーバをアクセス先として選択することが可能となる。
【０００３】
正サイトと副サイトとの間のリモートコピーに関する従来技術としては、正サイトから副サイトへ非同期リモートコピーをし、正サイトにて差分ビットを管理し、副サイトにおいても差分ビットを管理する構成が開示されている（例えば、特許文献１）。特許文献１に開示されたシステムは、副サイトへのアクセスが発生した場合には、正サイトの差分ビットと副サイトの差分ビットとを比較して副サイトに送られていないデータを特定し、特定されたデータを正サイトから副サイトに送り、副サイトを正サイトに昇格させて、正サイトを副サイトに変更し、その後、クライアントが正サイトに昇格した副サイトへのアクセスを開始する。これにより、クライアントは、副サイトに対してもＲＷアクセスが可能となる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−９３３３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、特許文献１に開示された技術では、常時正サイト及び副サイトに対するクライアントからのＲＷアクセスを可能とさせるために、副サイトへのアクセスが発生する度に差分ビットの比較及び正サイトから副サイトへのデータの転送を行う必要がある。このため、ＲＷアクセスのアクセス性能が大幅に低下するおそれがある。
【課題を解決するための手段】
【０００６】
ファイル格納システムは、第１のファイルシステムを有する第１のサーバと、第２のファイルシステムを有する第２のサーバとを含む。第１のサーバ（例えば、第１サーバの記憶デバイス）は、第１のファイルシステム及び第２のファイルシステムに格納されている第１のファイルについての差分がどのファイルシステムに格納されているかを示す第１の差分管理テーブルを記憶する。第２のサーバ（例えば、第２のサーバの記憶デバイス）は、第１のファイルについての差分がどのファイルシステムに格納されているかを示す第２の差分管理テーブルを記憶する。第１のサーバ（例えば、第１のサーバの制御デバイス）は、第１のファイルに対するライト要求を受信した場合、ライト要求に基づく第１のファイルについての差分を第１のファイルシステムに格納し、第１のファイルについての差分が第１のファイルシステムに格納されていることを示すデータを第１の差分管理テーブルに格納し、第１のファイルについての差分が第１のファイルシステムに格納されたことを示す差分格納通知を第２のサーバに送信する。第２のサーバ（例えば、第２のサーバの制御デバイス）は、差分格納通知を第１のサーバから受信した場合、第１のファイルについての差分が第１のファイルシステムに格納されていることを示すデータを第２の差分管理テーブルに格納する。
【図面の簡単な説明】
【０００７】
【図１】図１は、実施例１の概要を説明するための図である。
【図２】図２は、実施例１に係る計算機システムの一例の構成図である。
【図３】図３は、実施例１に係るファイルサーバの一例の構成図である。
【図４】図４は、実施例１に係るディスクアレイ装置の一例の構成図である。
【図５】図５は、実施例１に係る差分ファイル管理テーブルの一例の構成図である。
【図６】図６は、実施例１に係る差分ブロック管理テーブルの一例の構成図である。
【図７】図７は、実施例１に係るロックファイル管理テーブルの一例の構成図である。
【図８】図８は、実施例１に係るファイル生成処理のフローチャートである。
【図９】図９は、実施例１に係るファイルリード処理の第１のフローチャートである。
【図１０】図１０は、実施例１に係るファイルリード処理の第２のフローチャートである。
【図１１】図１１は、実施例１に係るファイルリード処理の第３のフローチャートである。
【図１２】図１２は、実施例１に係るファイルライト処理のフローチャートである。
【図１３】図１３は、実施例１に係るファイル削除処理のフローチャートである。
【図１４】図１４は、実施例１に係る同期処理の第１のフローチャートである。
【図１５】図１５は、実施例１に係る同期処理の第２のフローチャートである。
【図１６】図１６は、実施例２に係る計算機システムの一例の構成図である。
【図１７】図１７は、実施例２に係るファイル生成処理のフローチャートである。
【図１８】図１８は、実施例２に係るファイルリード処理の第１のフローチャートである。
【図１９】図１９は、実施例２に係るファイルリード処理の第２のフローチャートである。
【図２０】図２０は、実施例２に係るファイルライト処理のフローチャートである。
【図２１】図２１は、実施例２に係るファイル削除処理のフローチャートである。
【図２２】図２２は、実施例２に係る整合性確認処理の第１のフローチャートである。
【図２３】図２３は、実施例２に係る整合性確認処理の第２のフローチャートである。
【図２４】図２４は、実施例２に係る整合性確認処理の第３のフローチャートである。
【発明を実施するための形態】
【０００８】
幾つかの実施例を、図面を参照して説明する。なお、以下に説明する実施例は特許請求の範囲にかかる発明を限定するものではなく、また実施例の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。これらの図面において、複数の図を通じて同一の符号は同一の構成要素を示している。
【０００９】
なお、以後の説明では、「ａａａテーブル」等の表現にて情報を説明することがあるが、これら情報はテーブル、リスト、ＤＢ、キュー等のデータ構造以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「ａａａ表」等について「ａａａ情報」と呼ぶことがある。
【００１０】
また、各情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「名称」、「ＩＤ」という表現を用いるが、これらについては互いに置換が可能である。
【００１１】
また、以後の説明では「プログラム」を主語として説明を行う場合があるが、プログラムは、プロセッサによって実行されることで定められた処理をメモリ及び通信ポートを用いながら行うため、プロセッサを主語とした説明としてもよい。また、プログラムを主語として開示された処理はサーバ等の計算機が行う処理としてもよい。また、プログラムの一部または全ては専用ハードウェアによって実現されてもよい。また、各種プログラムはプログラム配布サーバや、計算機が読み取り可能な記憶メディアによって各計算機にインストールされてもよい。
【実施例１】
【００１２】
図１は、実施例１の概要を説明するための図である。
【００１３】
ファイルサーバＡ及びファイルサーバＢは、互いにリモートコピーが行われる関係にあるファイルサーバ２０００のペアである。ファイルサーバＡ及びファイルサーバＢのそれぞれは、ファイルサーバＡのファイルシステム（ＦＳ）２５００及びファイルサーバＢのファイルシステム２５００に格納されているファイルについての差分がどのファイルサーバ２０００の差分格納ファイルシステム２６００に格納されているかを示す差分管理テーブル（例えば、差分ファイル管理テーブルＴ１００及び差分ブロック管理テーブルＴ２００）を有する。ファイルサーバＡは、クライアントからファイルＡに対するリード（Ｒｅａｄ）要求を受信した場合（同図中（１））、差分管理テーブルにおけるファイルＡに関するエントリの内容、及び差分格納ファイルシステム２６００におけるファイルＡの差分について、ファイルサーバＢと同期をとり（同図中（２）、（３））、差分管理テーブルにおけるファイルＡに関するエントリ、及び差分格納ファイルシステム２６００におけるファイルＡの差分を最新の状態にする。その後、ファイルＡとファイルＡの差分とから仮想のファイルＡ、すなわち、差分が反映されたファイルＡを作成し、作成した仮想のファイルＡをクライアントＡに送信する（同図中（４））。また、ファイルサーバＡは、クライアントＡからファイルＡに対するライト（Ｗｒｉｔｅ）要求を受信した場合、そのＷｒｉｔｅ要求に基づくファイルＡの差分を差分格納ファイルシステム２６００に格納し、差分管理テーブルにおけるファイルＡに関するエントリをファイルサーバＢと同期させて最新の状態にする（同図中（５））。また、ファイルサーバＢに対して、クライアントからファイルＡに対するＲｅａｄ要求又はｗｒｉｔｅ要求を受信した場合には、ファイルサーバＢにおいて、上記ファイルサーバＡと同様な処理が行われる。このように、ファイルサーバＡ及びファイルサーバＢのそれぞれが差分管理テーブルを有し、ファイルサーバＡとファイルサーバＢとの間で差分管理テーブルの内容、及びファイルの差分を同期させることにより、ファイルサーバＡ及びファイルサーバＢのいずれに対してもＲＷアクセスが可能となる。
【００１４】
図２は、実施例１に係る計算機システムの一例の構成図である。
【００１５】
計算機システムは、ネットワーク２００と、２つのクライアント１０００（クライアントＡ及びクライアントＢ）と、２つのファイルサーバ２０００（ファイルサーバＡ及びファイルサーバＢ）と、２つのディスクアレイ装置３０００（ディスクアレイ装置Ａ及びディスクアレイ装置Ｂ）とを含む。クライアント１０００とファイルサーバ２０００とはネットワーク２００を介して接続される。ファイルサーバ２０００には、そのファイルサーバ２０００に記憶領域を提供するディスクアレイ装置３０００が接続される。本実施例では、ファイルサーバＡには、ファイルサーバＡに記憶領域を提供するディスクアレイ装置Ａが接続され、ファイルサーバＢには、ファイルサーバＢに記憶領域を提供するディスクアレイ装置Ｂが接続される。ファイルサーバＡ及びファイルサーバＢは、互いにリモートコピーが行われる関係にあるファイルサーバ２０００のペアである。ファイルサーバＡとディスクアレイ装置Ａとは、拠点Ａに配置され、ファイルサーバＢとディスクアレイ装置Ｂとは、拠点Ｂに配置されている。
【００１６】
クライアント１０００とファイルサーバ２０００との間は、例えばＷＡＮ（Ｗｉｄｅ
Ａｒｅａ Ｎｅｔｗｏｒｋ）によって接続されている。ファイルサーバ２０００とディスクアレイ装置３０００との間は、例えばＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）によって接続されても良いし、専用線を介した直接接続されても良い。また、ファイルサーバ２０００及びディスクアレイ装置３０００は、両方の機能を有する１つの装置、例えばＮＡＳ（Ｎｅｔｗｏｒｋ  ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）であっても良い。
【００１７】
図３は、実施例１に係るファイルサーバの一例の構成図である。
【００１８】
ファイルサーバ２０００は、ＣＰＵ２１００と、ネットワークインタフェース２２００と、ディスクインタフェース２３００と、メモリ２４００と、ファイルシステム２５００と、差分格納ファイルシステム２６００と、それらを接続する内部的な通信路（例えば、バス）とを有する。
【００１９】
ＣＰＵ２１００は、メモリ２４００に格納されたプログラムを実行する。ネットワークインタフェース２２００は、ネットワーク２００を介して他のファイルサーバ２０００やクライアント１０００との通信を行うためのデバイスである。ディスクインタフェース２３００は、ディスクアレイ装置３０００との通信を行うためのデバイスである。
【００２０】
ファイルシステム２５００及び差分格納ファイルシステム２６００は、ディスクインタフェース２３００を介してファイルサーバ２０００にマウントされたディスクアレイ装置３０００のディスクドライブ３３００に基づく記憶領域である。ファイルシステム２５００は、クライアント１０００によりアクセスされるファイルを格納する領域である。差分格納ファイルシステム２６００、クライアント１０００によりアクセスされるファイルの差分を格納する領域である。
【００２１】
メモリ２４００には、プログラム及びテーブルが格納される。具体的には、メモリ２４００には、ファイル操作制御プログラム２４１０と、差分同期制御プログラム２４２０と、差分ファイル管理テーブルＴ１００と、差分ブロック管理テーブルＴ２００と、ファイルロック管理テーブルＴ３００とが格納される。差分ファイル管理テーブルＴ１００及び差分ブロック管理テーブルＴ２００は、ファイルの差分がどのファイルサーバ２０００の差分格納ファイルシステム２６００に格納されているかを示す情報（差分管理テーブル）である。ファイル操作制御プログラム２４１０は、差分ファイル管理テーブルＴ１００、差分ブロック管理テーブルＴ２００、及びファイルロック管理テーブルＴ３００を管理し、ファイルシステム２５００に対するファイルの入出力及び差分格納ファイルシステム２６００に対するファイルの差分の入出力を、所定サイズのファイルブロック単位で制御するプログラムである。差分同期制御プログラム２４２０は、差分ファイル管理テーブルＴ１００、差分ブロック管理テーブルＴ２００、及びファイルロック管理テーブルＴ３００を管理し、ファイルサーバ２０００間における差分ファイル管理テーブルＴ１００及び差分ブロック管理テーブルＴ２００、ファイル及びファイルの差分の同期を制御するプログラムである。
【００２２】
図４は、実施例１に係るディスクアレイ装置の一例の構成図である。
【００２３】
ディスクアレイ装置３０００は、ディスク制御コントローラ３１００と、ディスクインタフェース３２００と、ディスクドライブ３３００と、それらを接続する内部的な通信路（例えば、バス）とを有する。
【００２４】
ディスク制御コントローラ３１００は、ディスクインタフェース３２００を介して、ファイルサーバ２０００からの入出力要求（リード要求及びライト要求）を受信する。そして、ディスク制御コントローラ３１００は、その入出力要求に基づいて、ディスクドライブ３３００内の対応するデータを、例えばブロック単位で入出力する。
【００２５】
ディスクインタフェース３２００は、ファイルサーバ２０００との通信を行うためのデバイスである。
【００２６】
ディスクドライブ３３００は、データを格納するための記憶領域を提供する記憶デバイスである。ディスクドライブ３３００は、ファイルシステム２５００または差分格納ファイルシステム２６００としてファイルサーバ２０００へマウントされる。本実施例では、ディスクアレイ装置Ａのディスクドライブ３３００はファイルサーバＡへマウントされ、ディスクアレイ装置Ｂのディスクドライブ３３００はファイルサーバＢへマウントされる。  図５は、実施例１に係る差分ファイル管理テーブルの一例の構成図である。
【００２７】
差分ファイル管理テーブルＴ１００は、ファイルサーバ２０００のファイルシステム２５００に格納されているファイルごとに、そのファイルの差分がどのファイルサーバ２０００の差分格納ファイルシステム２６００に格納されているかを示すデータ（差分保持情報）を管理する。差分ファイル管理テーブルＴ１００は、ファイルサーバ２０００によって作成される。
【００２８】
差分ファイル管理テーブルＴ１００は、ファイル名Ｔ１０１と、差分ファイル保持フラグＴ１０２とのフィールドを含む。ファイル名Ｔ１０１には、ファイルを識別するための情報、例えばファイル名が格納される。差分ファイル保持フラグＴ１０２には、ファイルの差分が存在しない場合にはそのことを示すデータ、例えば「Ｎｕｌｌ」が格納され、ファイルの差分が存在する場合には最新の差分が格納されているファイルサーバ２０００を示すデータ、例えばファイルサーバ２０００の名称が格納される。本実施例では、差分ファイル保持フラグＴ１０２には、ファイルの最新の差分がファイルサーバＡに格納されている場合に「ファイルサーバＡ」が格納され、ファイルの最新の差分がファイルサーバＢに格納されている場合に「ファイルサーバＢ」が格納され、ファイルの最新の差分がファイルサーバＡ及びファイルサーバＢに格納されている場合に「ファイルサーバＡＢ」が格納され、ファイルの差分が存在しない場合に「Ｎｕｌｌ」が格納される。差分ファイル管理テーブルＴ１００において、各ファイルの最新の差分がどのファイルサーバ２０００に格納されているかを示すデータを管理することで、ファイル単位で差分の転送が必要か否かを判定することが可能となる。また、ファイルサーバＡとファイルサーバＢとの間で、それぞれの差分ファイル管理テーブルＴ１００の内容について同期がとられる。
【００２９】
図６は、実施例１に係る差分ブロック管理テーブルの一例の構成図である。
【００３０】
差分ブロック管理テーブルＴ２００は、ファイルブロック単位でファイルの差分がどのファイルサーバ２０００の差分格納ファイルシステム２６００に格納されているかを示すデータを管理する。差分ブロック管理テーブルＴ２００は、ファイルサーバ２０００によって作成される。
【００３１】
差分ブロック管理テーブルＴ２００は、差分ＩＤＴ２０１と、ファイル名Ｔ２０２と、ファイルブロックパスＴ２０３と、差分ブロックパスＴ２０４と、差分ブロック保持フラグＴ２０５のフィールドとを含む。差分ＩＤＴ２０１には、差分ブロック管理テーブルＴ２００の各エントリに対して一意に付与された識別子が格納される。ファイル名Ｔ２０２には、ファイルを識別するための情報、例えばファイル名が格納される。ファイルブロックパスＴ２０３には、ファイルを構成するファイルブロックについてのファイルシステム２５００内の格納領域を特定するための情報、例えばパス情報が格納される。差分ブロックパスＴ２０４には、ファイルを構成するファイルブロックの最新差分である差分ブロックについての差分格納ファイルシステム２６００内の格納領域を特定するための情報、例えばパス情報が格納される。差分ブロック保持フラグＴ２０５には、差分ブロックが存在しない場合にはそのことを示すデータ、例えば「Ｎｕｌｌ」が格納され、差分ブロックが存在する場合にはその差分ブロックが格納されているファイルサーバ２０００を示すデータ、例えばファイルサーバ２０００の名称が格納される。本実施例では、差分ブロック保持フラグＴ２０５には、差分ブロックがファイルサーバＡに格納されている場合に「ファイルサーバＡ」が格納され、差分ブロックがファイルサーバＢに格納されている場合に「ファイルサーバＢ」が格納され、差分ブロックがファイルサーバＡ及びファイルサーバＢに格納されている場合に「ファイルサーバＡＢ」が格納され、差分ブロックが存在しない場合に「Ｎｕｌｌ」が格納される。差分ブロック管理テーブルＴ２００において、各ファイルを構成するファイルブロックの格納領域へのパス情報と、ファイルブロックの最新差分である差分ブロックの格納領域へのパス情報と、差分ブロックがどのファイルサーバ２０００に格納されているかを示すデータとを管理することで、差分の転送が必要と判定されたファイルについて、ファイルブロック単位で差分の転送が必要か否かを判定することが可能となる。また、ファイルサーバＡとファイルサーバＢとの間で、それぞれの差分ブロック管理テーブルＴ２００の内容について同期がとられる。
【００３２】
図７は、実施例１に係るファイルロック管理テーブルの一例の構成図である。
【００３３】
ファイルロック管理テーブルＴ３００は、ファイルがロックされているか否かを示す情報（ロック情報）を管理する。ファイルロック管理テーブルＴ３００は、ファイルサーバ２０００によって作成される。
【００３４】
ファイルロック管理テーブルＴ３００は、ファイル名Ｔ３０１と、ロックフラグＴ３０２と、ロックユーザＴ３０３とのフィールドを含む。ファイル名Ｔ３０１には、ファイルを識別するための情報、例えばファイル名が格納される。ロックフラグＴ３０２には、ファイルのロック情報が格納される。ロックフラグＴ３０２には、ファイルのロックが取得されている場合には、その旨を示すデータ（例えば、「Ｙ」）が設定され、ファイルのロックが取得されていない場合には、その旨を示すデータ（例えば、「Ｎ」）が設定される。ロックユーザＴ３０３には、ファイルのロックを取得しているユーザを示す情報、例えばユーザ名が格納される。また、ファイルサーバＡとファイルサーバＢとの間で、それぞれのファイルロック管理テーブルＴ３００の内容について同期がとられる。
【００３５】
以下、本実施例に係るファイルサーバ２０００（ファイルサーバＡ及びファイルサーバＢ）の動作を説明する。以下の説明において、ファイルサーバＡが有する差分ファイル管理テーブルＴ１００を「差分ファイル管理テーブルＴ１００Ａ」と表記し、ファイルサーバＢが有する差分ファイル管理テーブルＴ１００を「差分ファイル管理テーブルＴ１００Ｂ」と表記する。また、ファイルサーバＡが有する差分ブロック管理テーブルＴ２００を「差分ブロック管理テーブルＴ２００Ａ」と表記し、ファイルサーバＢが有する差分ブロック管理テーブルＴ２００を「差分ブロック管理テーブルＴ２００Ｂ」と表記する。また、ファイルサーバＡが有するファイルロック管理テーブルＴ３００を「ファイルロック管理テーブルＴ３００Ａ」と表記し、ファイルサーバＢが有するファイルロック管理テーブルＴ３００を「ファイルロック管理テーブルＴ３００Ｂ」と表記する。
【００３６】
図８は、実施例１に係るファイル生成処理のフローチャートである。同図は、クライアントＡがファイルサーバＡに対してファイルＡの生成を要求する場合の例を示す。
【００３７】
まず、エンドユーザ１００が操作するクライアントＡが、ファイルサーバＡに対して、ファイルＡの生成（Ｃｒｅａｔｅ）要求を発行し、Ｃｒｅａｔｅ要求と共にファイルＡを送信する（ステップＳ１０１）。
【００３８】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、Ｃｒｅａｔｅ要求と、ファイルＡとを受信し、受信したファイルＡを、ファイルサーバＡのファイルシステム２５００に格納する（ステップＳ１０２）。ファイルサーバＡのファイル操作制御プログラム２４１０がファイルＡをファイルサーバＡのファイルシステム２５００に格納することにより、ファイルＡは、ファイルサーバＡへマウントされたディスクドライブ３３００、すなわちディスクアレイ装置Ａのディスクドライブ３３００に書き込まれる。
【００３９】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、ステップＳ１０２でファイルシステム２５００に格納したファイルＡを、ファイルサーバＢに送信する（ステップＳ１０３）。
【００４０】
ファイルＡを受信したファイルサーバＢのファイル操作制御プログラム２４１０は、受信したファイルＡをファイルサーバＢのファイルシステム２５００に格納する（ステップＳ１０４）。ファイルサーバＢのファイル操作制御プログラム２４１０がファイルＡをファイルサーバＢのファイルシステム２５００に格納することにより、ファイルＡは、ファイルサーバＢへマウントされたディスクドライブ３３００、すなわちディスクアレイ装置Ｂのディスクドライブ３３００に書き込まれる。
【００４１】
ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルＡをファイルサーバＢに送信した後、ステップＳ１０３でファイルシステム２５００に格納したファイルＡの差分を格納するための領域を、ファイルサーバＡの差分格納ファイルシステム２６００に確保する（ステップＳ１０５）。このように、ファイルＡの生成時にファイルＡの差分を格納するための領域を確保することにより、ＲＷアクセスがある度に差分の格納領域を確保する必要がなくなるため、ＲＷアクセスのアクセス性能を高めることができる。
【００４２】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ファイル管理テーブルＴ１００ＡにファイルＡに関するエントリを追加する。具体的には、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイル名Ｔ１０１に「ファイルＡ」を格納し、差分ファイル保持フラグＴ１０２に「Ｎｕｌｌ」を格納したエントリを新規に追加する。また、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ブロック管理テーブルＴ２００ＡにファイルＡに関するエントリを追加する。具体的には、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ＩＤＴ２０１に一意な数値を格納し、ファイル名Ｔ２０２に「ファイルＡ」を格納し、ファイルブロックパスＴ２０３に、ファイルサーバＡのファイルシステム２５００におけるファイルＡを構成するファイルブロックの格納領域へのパスを格納し、差分ブロックパスＴ２０４に、ファイルサーバＡの差分格納ファイルシステム２６００におけるファイルＡの差分ブロック（ファイルＡを構成するファイルブロックの差分ブロック）の格納領域へのパスを格納し、差分ブロック保持フラグＴ２０５に「Ｎｕｌｌ」を格納したエントリを追加する。差分ブロック管理テーブルＴ２００Ａへのエントリの追加は、ファイルＡを構成するファイルブロックの全てに対して実施される。また、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００ＡにファイルＡに関するエントリを追加する。具体的には、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイル名Ｔ３０１に「ファイルＡ」を格納し、ロックフラグＴ３０２に「Ｎ」を格納し、ロックユーザＴ３０３に「Ｎｕｌｌ」を格納したエントリを追加する（ステップＳ１０６）。
【００４３】
一方、ファイルサーバＢのファイル操作制御プログラム２４１０は、ファイルＡをファイルサーバＢのファイルシステム２５００に格納した後、ファイルサーバＢ内において、ステップＳ１０５及びステップＳ１０６と同様の処理を行う。すなわち、ファイルサーバＢのファイル操作制御プログラム２４１０は、ファイルＡの差分を格納するための領域を、ファイルサーバＢの差分格納ファイルシステム２６００に確保する（ステップＳ１０７）。その後、ファイルサーバＢのファイル操作制御プログラム２４１０は、差分ファイル管理テーブルＴ１００ＢにファイルＡに関するエントリを追加する。具体的には、ファイルサーバＢのファイル操作制御プログラム２４１０は、ファイル名Ｔ１０１に「ファイルＡ」を格納し、差分ファイル保持フラグＴ１０２に「Ｎｕｌｌ」を格納したエントリを追加する。また、ファイルサーバＢのファイル操作制御プログラム２４１０は、差分ブロック管理テーブルＴ２００ＢにファイルＡに関するエントリを追加する。具体的には、ファイルサーバＢのファイル操作制御プログラム２４１０は、差分ＩＤＴ２０１に一意な数値を格納し、ファイル名Ｔ２０２に「ファイルＡ」を格納し、ファイルブロックパスＴ２０３に、ファイルサーバＢのファイルシステム２５００におけるファイルＡを構成するファイルブロックの格納領域へのパスを格納し、差分ブロックパスＴ２０４に、ファイルサーバＢの差分格納ファイルシステム２６００におけるファイルＡの差分ブロックの格納領域へのパスを格納し、差分ブロック保持フラグＴ２０５に「Ｎｕｌｌ」を格納したエントリを追加する。差分ブロック管理テーブルＴ２００Ｂへのエントリの追加は、ファイルＡを構成するファイルブロックの全てに対して実施される。また、ファイルサーバＢのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００ＢにファイルＡに関するエントリを追加する。具体的には、ファイルサーバＢのファイル操作制御プログラム２４１０は、ファイル名Ｔ３０１に「ファイルＡ」を格納し、ロックフラグＴ３０２に「Ｎ」を格納し、ロックユーザＴ３０３に「Ｎｕｌｌ」を格納したエントリを追加する（ステップＳ１０８）。
【００４４】
ステップＳ１０６の処理を終えた後、ファイルサーバＡのファイル操作制御プログラム２４１０は、クライアントＡにファイルＡの生成が完了したことを通知し（ステップＳ１０９）、ファイル生成処理を終了する。
【００４５】
図９は、実施例１に係るファイルリード処理の第１のフローチャートである。図１０は、実施例１に係るファイルリード処理の第２のフローチャートである。図１１は、実施例１に係るファイルリード処理の第３のフローチャートである。図９〜図１１に示す３つのフローチャートは、ファイルリード処理の全体を示しており、これらの図中の（１）、（２）、（３）は、各図のフローチャートの接続関係を示しており、異なる図面の同一の表記の部分は、処理が連続していることを示している。図９〜図１１は、クライアントＡがファイルサーバＡに対してファイルＡの読み出しを要求する場合の例を示している。
【００４６】
図９において、まず、エンドユーザ１００が操作するクライアントＡが、ファイルサーバＡに対して、ファイルＡのリード（Ｒｅａｄ）要求を発行する（ステップＳ２０１）。
【００４７】
ファイルサーバＡのファイル操作制御プログラム２４１０は、クライアントＡからのファイルＡのリード要求を受信すると、ファイルロック管理テーブルＴ３００Ａを参照し、ファイル名Ｔ３０１が「ファイルＡ」であるエントリ、すなわちファイルＡに関するエントリのロックフラグＴ３０２が「Ｙ」であるか「Ｎ」であるかを判定して処理を分岐する（ステップＳ２０２）。具体的には、ファイルサーバＡのファイル操作制御プログラム２４１０は、ロックフラグＴ３０２が「Ｎ」である場合（ステップＳ２０２：Ｎ）はステップＳ２０３へ処理を進め、ロックフラグＴ３０２が「Ｙ」である場合（ステップＳ２０２：Ｙ）はステップＳ２０７へ処理を進める。
【００４８】
ステップＳ２０２の判定において、ロックフラグＴ３０２が「Ｎ」である場合（ステップＳ２０２：Ｎ）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００ＡにおけるファイルＡに関するエントリのロックフラグＴ３０２を「Ｙ」に設定し、ロックユーザＴ３０３を「クライアントＡ」に設定する（ステップＳ２０３）。そして、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルＡのロックを取得することをファイルサーバＢのファイル操作制御プログラム２４１０に通知する。
【００４９】
ファイルＡのロックを取得することの通知を受けたファイルサーバＢのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００Ｂを参照し、ファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックフラグＴ３０２が「Ｙ」であるか、または「Ｎ」であるかを判定して処理を分岐する（ステップＳ２０４）。具体的には、ファイルサーバＢのファイル操作制御プログラム２４１０は、ロックフラグＴ３０２が「Ｙ」である場合（ステップＳ２０４：Ｙ）は、ファイルＡは既にロック済みであることをファイルサーバＡに通知し、ロックフラグＴ３０２が「Ｎ」である場合（ステップＳ２０４：Ｎ）はステップＳ２０６へ処理を進める。
【００５０】
ファイルサーバＢからファイルＡがロック済みであることの通知を受けたファイルサーバＡのファイル操作制御プログラム２４１０は、ステップＳ２０５において、ファイルロック管理テーブルＴ３００ＡにおけるファイルＡに関するエントリのロックフラグＴ３０２を「Ｎ」に設定し、ロックユーザＴ３０３を「Ｎｕｌｌ」に設定し、一定時間待機後、ステップＳ２０２へ処理を進める。
【００５１】
一方、ステップＳ２０４の判定において、ロックフラグＴ３０２が「Ｎ」である場合（ステップＳ２０４：Ｎ）に実行される処理を次に示す。ファイルサーバＢのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００ＢにおけるファイルＡに関するエントリのロックフラグＴ３０２を「Ｙ」に設定し、ロックユーザＴ３０３を「クライアントＡ」に設定し（ステップＳ２０６）、ファイルＡのロックを取得したことをファイルサーバＡに通知する。なお、ファイルサーバＢからファイルＡのロックを取得したことの通知を受けたファイルサーバＡのファイル操作制御プログラム２４１０は、図１０のステップＳ２１０へ処理を進める。
【００５２】
ステップＳ２０２の判定において、ロックフラグＴ３０２が「Ｙ」である場合（ステップＳ２０２：Ｙ）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００Ａを参照し、ファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックユーザＴ３０３が示すユーザ、すなわちファイルＡのロックを取得しているユーザを判定して処理を分岐する（ステップＳ２０７）。具体的には、ファイルサーバＡのファイル操作制御プログラム２４１０は、ロックユーザＴ３０３が「システム」であった場合、すなわちファイルＡのロックをシステムが取得している場合（ステップＳ２０７：システム）はステップＳ２０８へ処理を進め、ロックユーザＴ３０３が「システム」以外であった場合、すなわちファイルＡのロックをシステム以外が取得している場合（ステップＳ２０７：システム以外）はステップＳ２０９へ処理を進める。
【００５３】
ステップＳ２０７の判定において、ロックユーザＴ３０３が「システム」である場合（ステップＳ２０７：システム）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、一定時間待機し（ステップＳ２０８）、その後、ステップＳ２０２へ処理進める。
【００５４】
ステップＳ２０７の判定において、ロックユーザＴ３０３が「システム」以外である場合（ステップＳ２０７：システム以外）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルＡは別のユーザによりロックされているため、読み取り専用となることをクライアントＡに通知し（ステップＳ２０９）、その後、図１０のステップＳ２１０へ処理を進める。
【００５５】
図１０のステップＳ２１０において、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ファイル管理テーブルＴ１００Ａを参照し、ファイル名Ｔ１０１が「ファイルＡ」であるエントリ（ファイルＡに関するエントリ）の差分ファイル保持フラグＴ１０２の値を判定して処理を分岐する（ステップＳ２１０）。具体的には、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ファイル保持フラグＴ１０２が「ファイルサーバＢ」である場合、すなわちファイルＡの最新の差分がファイルサーバＢに格納されている場合（ステップＳ２１０：ファイルサーバＢ）は図１１のステップＳ２１６へ処理を進め、差分ファイル保持フラグＴ１０２が「ファイルサーバＡ」または「ファイルサーバＡＢ」である場合、すなわちファイルＡの最新の差分がファイルサーバＡに格納されている場合（ステップＳ２１０：ファイルサーバＡまたはファイルサーバＡＢ）はステップＳ２１１へ処理を進め、差分ファイル保持フラグＴ１０２が「Ｎｕｌｌ」である場合、すなわちファイルＡの差分が存在しない場合（ステップＳ２１０：Ｎｕｌｌ）はステップＳ２１３へ処理を進める。
【００５６】
ステップＳ２１０の判定において、差分ファイル保持フラグＴ１０２が「ファイルサーバＡ」または「ファイルサーバＡＢ」である場合（ステップＳ２１０：ファイルサーバＡまたはファイルサーバＡＢ）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ブロック管理テーブルＴ２００Ａにおけるファイル名Ｔ２０２が「ファイルＡ」であるエントリ（ファイルＡに関するエントリ）のそれぞれの差分ブロック保持フラグＴ２０５を参照し、ファイルＡを構成する各ファイルブロックについて差分ブロックが存在するか否かを特定する。そして、差分ブロック保持フラグＴ２０５が「Ｎｕｌｌ」であるファイルブロック、すなわち差分ブロックが存在しないファイルブロックについては、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルサーバＡのファイルシステム２５００におけるファイルブロックパスＴ２０３が示すパス情報によって特定される領域からそのファイルブロックを取得する。一方、差分ブロック保持フラグＴ２０５が「Ｎｕｌｌ」以外であるファイルブロック、すなわち差分ブロックが存在するファイルブロックについては、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルサーバＡの差分格納ファイルシステム２６００における差分ブロックパスＴ２０４が示すパス情報によって特定される領域からそのファイルブロックの差分ブロックを取得する。その後、ファイルサーバＡのファイル操作制御プログラム２４１０は、取得したファイルブロック及び差分ブロックに基づいてメモリ２４００内に仮想のファイルＡ、すなわち最新の差分が反映されたファイルＡを作成する（ステップＳ２１１）。
【００５７】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、ステップＳ２１１で作成した仮想のファイルＡを、クライアントＡへ送信し（ステップＳ２１２）、処理をステップＳ２１４に進める。
【００５８】
ステップＳ２１０の判定において、差分ファイル保持フラグＴ１０２が「Ｎｕｌｌ」である場合（ステップＳ２１０：Ｎｕｌｌ）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ブロック管理テーブルＴ２００Ａにおけるファイル名Ｔ２０２が「ファイルＡ」であるエントリのそれぞれのファイルブロックパスＴ２０３から、ファイルＡを構成する各ファイルブロックの格納領域を特定するためのパス情報を取得する。そして、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルサーバＡのファイルシステム２５００における、取得したパス情報によって特定される領域からファイルＡを構成する各ファイルブロックを取得する。その後、ファイルサーバＡのファイル操作制御プログラム２４１０は、取得したファイルブロックに基づいてメモリ２４００内にファイルＡを作成する。その後、ファイルサーバＡのファイル操作制御プログラム２４１０は、作成したファイルＡを、クライアントＡへ送信し（ステップＳ２１３）、処理をステップＳ２１４に進める。
【００５９】
ステップＳ２１４では、ファイルサーバＡのファイル操作制御プログラム２４１０は、クライアントＡからファイルＡのクローズ要求を受信するまで待機する。
【００６０】
クライアントＡからファイルＡのクローズ要求を受信した場合、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルＡのクローズ要求を受信したことをファイルサーバＢへ通知し、ファイルロック管理テーブルＴ３００Ａにおけるファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックフラグを「Ｎ」に設定し、ロックユーザを「Ｎｕｌｌ」に設定する（ステップＳ２１５）。その後、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルリード処理を終了する。
【００６１】
ファイルサーバＡからファイルＡのクローズ要求を受信したことの通知を受信したファイルサーバＢのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００Ｂにおけるファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックフラグを「Ｎ」に設定し、ロックユーザを「Ｎｕｌｌ」に設定する（ステップＳ２２５）。その後、ファイルサーバＢのファイル操作制御プログラム２４１０は、ファイルリード処理を終了する。
【００６２】
また、ステップＳ２１０の判定において、差分ファイル保持フラグＴ１０２が「ファイルサーバＢ」である場合（ステップＳ２１０：ファイルサーバＢ）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルＡを構成するファイルブロックのそれぞれに対して、図１１のステップＳ２１６〜ステップＳ２２１の中のファイルサーバＡにおける処理を行う。なお、ステップＳ２１６〜ステップＳ２２１の処理は、ファイルサーバＡのファイル操作制御プログラム２４１０は、各ファイルブロックに対して、逐次に処理しても良いし、並列に処理しても良い。ここで、ファイルＡを構成するファイルブロックのうちの処理対象となる一つをステップＳ２１６〜ステップＳ２２１の説明において「対象ファイルブロック」という。ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ブロック管理テーブルＴ２００Ａにおける対象ファイルブロックに関するエントリの差分ブロック保持フラグＴ２０５を参照し、対象ファイルブロックについての差分ブロックが存在するか否か及び存在する場合に対象ファイルブロックの差分ブロックがどのファイルサーバ２０００に格納されているかを判定して処理を分岐する（ステップＳ２１６）。具体的には、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ブロック保持フラグＴ２０５が「ファイルサーバＢ」である場合、すなわち差分ブロックが存在しその差分ブロックがファイルサーバＢに格納されている場合（ステップＳ２１６：ファイルサーバＢ）は、対象ファイルブロックに関するエントリの差分ＩＤＴ２０１の値をファイルサーバＢに通知する一方、差分ブロック保持フラグＴ２０５が「ファイルサーバＡＢ」または「Ｎｕｌｌ」である場合、すなわち差分ブロックが存在しないかまたはファイルサーバＡに格納されている場合（ステップＳ２１６：ファイルサーバＡＢまたはＮｕｌｌ）は、ステップＳ２２２へ処理を進める。
【００６３】
ファイルサーバＡから、対象ファイルブロックに関するエントリの差分ＩＤＴ２０１の値の通知を受けたファイルサーバＢのファイル操作制御プログラム２４１０は、ステップＳ２１７へ処理を進める。  ステップＳ２１７において、ファイルサーバＢのファイル操作制御プログラム２４１０は、通知された差分ＩＤＴ２０１の値に基づいて、差分ブロック管理テーブルＴ２００Ｂにおける対象ファイルブロックに関するエントリを特定する。そして、ファイルサーバＢのファイル操作制御プログラム２４１０は、特定したエントリの差分ブロックパスＴ２０４が示すパス情報によって特定される領域から対象ファイルブロックの差分ブロックを取得する（ステップＳ２１７）。
【００６４】
次に、ファイルサーバＢのファイル操作制御プログラム２４１０は、ステップＳ２１７で取得した差分ブロックを、差分ＩＤＴ２０１の値と共にファイルサーバＡに送信する（ステップＳ２１８）。
【００６５】
ファイルサーバＢから対象ファイルブロックの差分ブロックを受信したファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルサーバＡの差分格納ファイルシステム２６００における対象ファイルブロックに関するエントリの差分ブロックパスＴ２０４が示すパス情報によって特定される領域に、受信した差分ブロックを上書きで格納する（ステップＳ２１９）。ファイルサーバＡのファイル操作制御プログラム２４１０が差分ブロックをファイルサーバＡの差分格納ファイルシステム２６００に格納することにより、差分ブロックは、ファイルサーバＡへマウントされたディスクドライブ３３００、すなわちディスクアレイ装置Ａのディスクドライブ３３００に書き込まれる。
【００６６】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ブロック管理テーブルＴ２００Ａにおける対象ファイルブロックに関するエントリの差分ブロック保持フラグＴ２０５を「ファイルサーバＡＢ」に設定する（ステップＳ２２０）。
【００６７】
一方、ファイルサーバＢのファイル操作制御プログラム２４１０は、対象ファイルブロックの差分ブロックを送信した後（ステップＳ２１８の後）、差分ブロック管理テーブルＴ２００Ｂにおける対象ファイルブロックに関するエントリの差分ブロック保持フラグＴ２０５を「ファイルサーバＡＢ」に設定する（ステップＳ２２１）。
【００６８】
ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルＡを構成するファイルブロックのそれぞれについてステップＳ２１６〜ステップＳ２２１の処理が完了するまで待機し（ステップＳ２２２）、ファイルＡを構成するファイルブロックのそれぞれについての処理が完了した後、ファイルサーバＢに差分ブロックの取得が完了したことを通知する。
【００６９】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ファイル管理テーブルＴ１００Ａにおけるファイル名Ｔ１０１が「ファイルＡ」であるエントリの差分ファイル保持フラグＴ１０３を「ファイルサーバＡＢ」に設定する（ステップＳ２２３）。その後、ファイルサーバＡのファイル操作制御プログラム２４１０は、図１０のステップＳ２１１へ処理を進める。
【００７０】
一方、ファイルサーバＡから差分ブロックの取得が完了したことの通知を受信したファイルサーバＢのファイル操作制御プログラム２４１０は、差分ファイル管理テーブルＴ１００Ｂにおけるファイル名Ｔ１０１が「ファイルＡ」であるエントリの差分ファイル保持フラグＴ１０３を「ファイルサーバＡＢ」に設定する（ステップＳ２２４）。
【００７１】
図１２は、実施例１に係るファイルライト処理のフローチャートである。同図は、クライアントＡがファイルサーバＡに対してファイルＡのライト（書込み）を要求する場合の例を示す。なお、同図のファイルライト処理が行われる前に図９〜図１１のファイルリード処理が行われているものとする。
【００７２】
まず、エンドユーザ１００が操作するクライアントＡが、ファイルサーバＡに対して、ファイルＡのライト（Ｗｒｉｔｅ）要求を発行し、Ｗｒｉｔｅ要求と共に更新後の内容のファイルＡを送信する（ステップＳ３０１）。
【００７３】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００Ａを参照し、ファイル名Ｔ３０１が「ファイルＡ」のエントリが存在するか否かを判定して処理を分岐する（ステップＳ３０２）。具体的には、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイル名Ｔ３０１が「ファイルＡ」のエントリが存在する場合（ステップＳ３０２：ＹＥＳ）はステップＳ３０３へ処理を進め、ファイル名Ｔ３０１が「ファイルＡ」のエントリが存在しない場合（ステップＳ３０２：ＮＯ）はファイルＡのファイル生成処理（図８参照）を行う。
【００７４】
ステップＳ３０２の判定において、ファイル名Ｔ３０１が「ファイルＡ」のエントリが存在する場合（ステップＳ３０２：ＹＥＳ）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００Ａを参照し、ファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックユーザＴ３０３が示すユーザを判定して処理を分岐する（ステップＳ３０３）。具体的には、ファイルサーバＡのファイル操作制御プログラム２４１０は、ロックユーザＴ３０３が「クライアントＡ」である場合（ステップＳ３０３：クライアントＡ）はステップＳ３０５へ処理を進め、ロックユーザＴ３０３が「Ｎｕｌｌ」である場合（ステップＳ３０３：Ｎｕｌｌ）は同名の別ファイルを上書きする処理であると判断し、ファイルＡのファイル削除処理（図１３参照）を行った後に、ファイルＡのファイル生成処理（図８参照）を行う。また、ファイルサーバＡのファイル操作制御プログラム２４１０は、ロックユーザＴ３０３が「クライアントＡ」及び「Ｎｕｌｌ」のどちらでもない場合（ステップＳ３０３：クライアントＡ及びＮｕｌｌ以外）はステップＳ３０４へ処理を進める。
【００７５】
ステップＳ３０３の判定において、ロックユーザＴ３０３が「クライアントＡ」及び「Ｎｕｌｌ」のどちらでもない場合（ステップＳ３０３：クライアントＡ及びＮｕｌｌ以外）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルＡは別のユーザによりロックされているため、読み取り専用状態であり、Ｗｒｉｔｅ不可であるとクライアントＡに通知し（ステップＳ３０４）、ファイルライト処理を終了する。
【００７６】
ステップＳ３０３の判定において、ロックユーザＴ３０３が「クライアントＡ」である場合（ステップＳ３０３：クライアントＡ）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、ステップＳ３０１でクライアントＡから受信したファイルＡを構成する各ファイルブロックと、図１０のステップＳ２１２またはステップＳ２１３でクライアントＡに送信したファイルＡ、すなわち、このファイルライト処理の前に行われたファイルリード処理においてクライアントへ送信したファイルＡを構成する各ファイルブロックとを比較し、更新されたファイルＡのファイルブロック（以下「更新ブロック」という）を抽出する（ステップＳ３０５）。
【００７７】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ブロック管理テーブルＴ２００Ａから、更新ブロックに関するエントリの差分ブロックパスＴ２０４が示すパス情報を取得する。そして、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルサーバＡの差分格納ファイルシステム２６００における、取得したパス情報によって特定される領域に、更新ブロックの更新後のデータを、差分ブロックとして格納し（ステップＳ３０６）、ファイルサーバＢに差分ブロックの格納の完了を通知する。
【００７８】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ブロック管理テーブルＴ２００Ａにおける更新ブロックに関するエントリの差分ブロック保持フラグＴ２０５を「ファイルサーバＡ」に設定する（ステップＳ３０７）。
【００７９】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ファイル管理テーブルＴ１００Ａにおけるファイル名Ｔ１０１が「ファイルＡ」であるエントリの差分ファイル保持フラグＴ１０２を「ファイルサーバＡ」に設定し（ステップＳ３０８）、ステップＳ３１１に処理を進める。
【００８０】
一方、ファイルサーバＡから差分ブロックの格納の完了の通知を受信したファイルサーバＢのファイル操作制御プログラム２４１０は、ステップＳ３０７及びステップＳ３０８と同様の処理を行う。すなわち、ファイルサーバＢのファイル操作制御プログラム２４１０は、差分ブロック管理テーブルＴ２００Ｂにおける更新ブロックに関するエントリの差分ブロック保持フラグＴ２０５を「ファイルサーバＡ」に設定する（ステップＳ３０９）。また、ファイルサーバＢのファイル操作制御プログラム２４１０は、差分ファイル管理テーブルＴ１００Ｂにおけるファイル名Ｔ１０１が「ファイルＡ」であるエントリの差分ファイル保持フラグＴ１０２を「ファイルサーバＡ」に設定する（ステップＳ３１０）。
【００８１】
ステップＳ３１１で、ファイルサーバＡのファイル操作制御プログラム２４１０は、クライアントＡにファイルＡの書込みが完了したことを通知して（ステップＳ３１１）、ファイルライト処理を終了する。
【００８２】
図１３は、実施例１に係るファイル削除処理のフローチャートである。同図は、クライアントＡがファイルサーバＡに対してファイルＡの削除を要求する場合の例を示す。
【００８３】
まず、エンドユーザ１００が操作するクライアントＡが、ファイルサーバＡに対して、ファイルＡの削除（Ｄｅｌｅｔｅ）要求を発行する（ステップＳ４０１）。
【００８４】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００Ａを参照し、ファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックフラグＴ３０２が「Ｙ」であるか、「Ｎ」であるかを判定して処理を分岐する（ステップＳ４０２）。具体的には、ファイルサーバＡのファイル操作制御プログラム２４１０は、ロックフラグＴ３０２が「Ｙ」である場合（ステップＳ４０２：Ｙ）はステップＳ４０３へ処理を進める一方、ロックフラグＴ３０２が「Ｎ」である場合（ステップＳ４０２：Ｎ）はステップＳ４０４へ処理を進める。
【００８５】
ステップＳ４０２の判定において、ロックフラグＴ３０２が「Ｙ」である場合（ステップＳ４０２：Ｙ）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルＡは別のユーザによりロックされているため、読み取り専用状態であり、Ｄｅｌｅｔｅ不可であるとクライアントＡに通知し（ステップＳ４０３）、ファイル削除処理を終了する。
【００８６】
ステップＳ４０２の判定において、ロックフラグＴ３０２が「Ｎ」である場合（ステップＳ４０２：Ｎ）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００Ａにおけるファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックフラグＴ３０２を「Ｙ」に設定し、ロックユーザＴ３０３を「クライアントＡ」に設定する（ステップＳ４０４）。そして、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルサーバＢのファイル操作制御プログラム２４１０に、ファイルＡのロックを取得することを通知する。
【００８７】
ファイルサーバＡからファイルＡのロックを取得することの通知を受けたファイルサーバＢのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００Ｂを参照し、ファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックフラグＴ３０２が「Ｙ」であるか、「Ｎ」であるかを判定して処理を分岐する（ステップＳ４０５）。具体的には、ファイルサーバＢのファイル操作制御プログラム２４１０は、ロックフラグＴ３０２が「Ｙ」である場合（ステップＳ４０５：Ｙ）は、ファイルサーバＡに、既に別のユーザによってファイルＡのロックが取得されていることを通知する一方、ロックフラグＴ３０２が「Ｎ」である場合（ステップＳ４０５：Ｎ）はステップＳ４０７へ処理を進める。ファイルサーバＢからファイルＡがロック済みであることの通知を受けたファイルサーバＡのファイル操作制御プログラム２４１０は、ステップＳ４０６へ処理を進める。
【００８８】
ステップＳ４０６において、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００Ａにおけるファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックフラグＴ３０２を「Ｎ」に設定し、ロックユーザＴ３０３を「Ｎｕｌｌ」に設定し、一定時間待機後、ステップＳ４０２へ処理を進める。
【００８９】
一方、ステップＳ４０５の判定において、ロックフラグＴ３０２が「Ｎ」である場合（ステップＳ４０５：Ｎ）に実行される処理を次に示す。ファイルサーバＢのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００Ｂにおけるファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックフラグＴ３０２を「Ｙ」に設定し、ロックユーザＴ３０３を「クライアントＡ」に設定し（ステップＳ４０７）、ファイルサーバＡに、ファイルＡのロックを取得したことを通知する。
【００９０】
ファイルサーバＢからファイルＡのロックを取得したことの通知を受けたファイルサーバＡのファイル操作制御プログラム２４１０は、ステップＳ４０８において、差分ブロック管理テーブルＴ２００Ａにおけるファイル名Ｔ２０２が「ファイルＡ」であるエントリのファイルブロックパスＴ２０３が示すパス情報によって特定される領域に格納されているファイルブロック、すなわちファイルサーバＡのファイルシステム２５００内に格納されているファイルＡを構成するファイルブロックを全て削除する。また、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ブロック管理テーブルＴ２００Ａにおけるファイル名Ｔ２０２が「ファイルＡ」であるエントリの差分ブロックパスＴ２０４が示すパス情報によって特定される領域に格納されている差分ブロック、すなわちファイルサーバＡの差分格納ファイルシステム２６００内に格納されているファイルＡの差分ブロックを全て削除する。
【００９１】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ファイル管理テーブルＴ１００Ａ、差分ブロック管理テーブルＴ２００Ａ及びファイルロック管理テーブルＴ３００Ａのそれぞれに登録されているファイルＡに関するエントリの全てを削除し（ステップＳ４０９）、処理をステップＳ４１２に進める。
【００９２】
ファイルサーバＢでは、ステップＳ４０７の処理を終えた後、ステップＳ４０８及びステップＳ４０９と並行して、ファイルサーバＢのファイル操作制御プログラム２４１０は、ファイルサーバＢにおいて、ステップＳ４０８及びステップＳ４０９と同様の処理を行う。すなわち、ファイルサーバＢのファイル操作制御プログラム２４１０は、差分ブロック管理テーブルＴ２００Ｂにおけるファイル名Ｔ２０２が「ファイルＡ」であるエントリのファイルブロックパスＴ２０３が示すパス情報によって特定される領域に格納されているファイルブロック、すなわちファイルサーバＢのファイルシステム２５００内に格納されているファイルＡを構成するファイルブロックを全て削除する。また、ファイルサーバＢのファイル操作制御プログラム２４１０は、差分ブロック管理テーブルＴ２００Ｂにおけるファイル名Ｔ２０２が「ファイルＡ」であるエントリの差分ブロックパスＴ２０４が示すパス情報によって特定される領域に格納されている差分ブロック、すなわちファイルサーバＢの差分格納ファイルシステム２６００内に格納されているファイルＡの差分ブロックを全て削除する（ステップＳ４１０）。その後、ファイルサーバＢのファイル操作制御プログラム２４１０は、差分ファイル管理テーブルＴ１００Ｂ、差分ブロック管理テーブルＴ２００Ｂ及びファイルロック管理テーブルＴ３００Ｂのそれぞれに登録されているファイルＡに関するエントリの全てを削除する（ステップＳ４１１）。
【００９３】
ステップＳ４０９の処理を終えた後、ファイルサーバＡのファイル操作制御プログラム２４１０は、クライアントＡにファイルＡの削除が完了したことを通知し（ステップＳ４１２）、ファイル削除処理を終了する。
【００９４】
図１４は、実施例１に係る同期処理の第１のフローチャートである。図１５は、実施例１に係る同期処理の第２のフローチャートである。図１４及び図１５に示す２つのフローチャートにより、同期処理の全体を示しており、図中の（４）は、各図のフローチャートの接続関係を示しており、異なる図面の同一の表記の部分は、処理が連続していることを示している。図１４及び図１５は、ファイルシステム２５００にファイルＡが格納されている場合の例を示している。
【００９５】
同期処理は、定期的に又は不定期的に行われる。例えば、ファイルサーバ２０００は、ファイルシステム２５００に格納されているファイルの中に同期がとれそうなファイルがあるかないかを確認し、同期がとれそうなファイルがある場合に同期処理を行っても良い。具体的には、例えば、ファイルサーバ２０００は、ファイルに対するアクセスが一定時間以上ない場合又はファイルの差分が一定量以上たまっている場合、すなわち差分格納ファイルシステム２６００に格納された差分ブロックの数が一定値以上となっている場合に同期処理を行っても良い。アクセスが一定時間以上ないという状態のファイル、又は、ファイル差分が一定量以上たまっているという状態のファイルが数多く存在する状態で運用を続けると、片方の拠点（例えばファイルサーバ）に障害が発生した際の不整合ファイルが増加する要因となってしまうが、ファイルに対するアクセスが一定時間以上ない場合又はファイルの差分が一定量以上たまっている場合、同期処理を行えば、障害発生時の不整合ファイルの発生率を抑止することが期待できる。また、ファイルサーバ２０００は、同期処理の開始日時が定められたスケジュールに基づいて同期処理を行っても良い。ファイルサーバ２０００は、複数のファイルのうちの一部のファイルについてだけ同期処理を行っても良い。例えば、ファイルサーバ２０００は、アクセスが一定時間以上ないファイル又は差分が一定量以上たまっているファイルについてだけ同期処理を行っても良い。
【００９６】
図１４において、まず、ファイルサーバＡの差分同期制御プログラム２４２０は、差分ファイル管理テーブルＴ１００Ａを参照し、ファイル名Ｔ１０１が「ファイルＡ」であるエントリの差分ファイル保持フラグＴ１０２の値を判定して処理を分岐する（ステップＳ５０１）。具体的には、ファイルサーバＡの差分同期制御プログラム２４２０は、差分ファイル保持フラグＴ１０２が「ファイルサーバＢ」または「ファイルサーバＡＢ」である場合（ステップＳ５０１：ファイルサーバＢまたはファイルサーバＡＢ）はステップＳ５０２へ処理を進める一方、差分ファイル保持フラグＴ１０２が「ファイルサーバＡ」または「Ｎｕｌｌ」である場合（ステップＳ５０１：ファイルサーバＡまたはＮｕｌｌ）は同期処理を終了する。
【００９７】
ステップＳ５０１の判定において、差分ファイル保持フラグＴ１０２が「ファイルサーバＢ」または「ファイルサーバＡＢ」である場合（ステップＳ５０１：ファイルサーバＢまたはファイルサーバＡＢ）に実行される処理を次に示す。ファイルサーバＡの差分同期制御プログラム２４２０は、ファイルロック管理テーブルＴ３００Ａを参照し、ファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックフラグＴ３０２が「Ｙ」であるか、「Ｎ」であるかを判定して処理を分岐する（ステップＳ５０２）。具体的には、ファイルサーバＡの差分同期制御プログラム２４２０は、ロックフラグＴ３０２が「Ｎ」である場合（ステップＳ５０２：Ｎ）はステップＳ５０３へ処理を進める一方、ロックフラグＴ３０２が「Ｙ」である場合（ステップＳ５０２：Ｙ）は同期処理を終了する。
【００９８】
ステップＳ５０２の判定において、ロックフラグＴ３０２が「Ｎ」である場合（ステップＳ５０２：Ｎ）に実行される処理を次に示す。ファイルサーバＡの差分同期制御プログラム２４２０は、ファイルロック管理テーブルＴ３００Ａにおけるファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックフラグＴ３０２を「Ｙ」に設定し、ロックユーザＴ３０３を「システム」に設定する（ステップＳ５０３）。そして、ファイルサーバＡの差分同期制御プログラム２４２０は、ファイルサーバＢの差分同期制御プログラム２４２０に、ファイルＡのロックを取得することを通知する。
【００９９】
ファイルサーバＡからファイルＡのロックを取得することの通知を受けたファイルサーバＢの差分同期制御プログラム２４２０は、ファイルロック管理テーブルＴ３００Ｂを参照し、ファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックフラグＴ３０２が「Ｙ」であるか、「Ｎ」であるかを判定して処理を分岐する（ステップＳ５０４）。具体的には、ファイルサーバＢの差分同期制御プログラム２４２０は、ロックフラグＴ３０２が「Ｙ」である場合（ステップＳ５０４：Ｙ）は、ファイルサーバＡに、既に別のユーザによってファイルＡのロックが取得されていることを通知する一方、ロックフラグＴ３０２が「Ｎ」である場合（ステップＳ５０４：Ｎ）はステップＳ５０６へ処理を進める。
【０１００】
ファイルサーバＢからファイルＡがロック済みであることの通知を受けたファイルサーバＡの差分同期制御プログラム２４２０は、ステップＳ５０５において、ファイルサーバＡの差分同期制御プログラム２４２０は、ファイルロック管理テーブルＴ３００Ａにおけるファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックフラグＴ３０２を「Ｎ」に設定し、ロックユーザＴ３０３を「Ｎｕｌｌ」に設定し、一定時間待機後、ステップＳ５０２へ処理を進める。
【０１０１】
一方、ステップＳ５０４の判定において、ロックフラグＴ３０２が「Ｎ」である場合（ステップＳ５０４：Ｎ）に実行される処理を次に示す。ファイルサーバＢの差分同期制御プログラム２４２０は、ファイルロック管理テーブルＴ３００Ｂにおけるファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックフラグＴ３０２を「Ｙ」に設定し、ロックユーザＴ３０３を「システム」に設定し（ステップＳ５０６）、ファイルサーバＡに、ファイルＡのロックを取得したことを通知する。
【０１０２】
ファイルサーバＢからファイルＡのロックを取得したことの通知を受けたファイルサーバＡの差分同期制御プログラム２４２０は、ステップＳ５０７において、ファイルサーバＡの差分同期制御プログラム２４２０は、差分ファイル管理テーブルＴ１００Ａを参照し、ファイル名Ｔ１０１が「ファイルＡ」であるエントリの差分ファイル保持フラグＴ１０２の値を判定して処理を分岐する（ステップＳ５０７）。具体的には、ファイルサーバＡの差分同期制御プログラム２４２０は、差分ファイル保持フラグＴ１０２が「ファイルサーバＢ」である場合、すなわちファイルＡの最新の差分がファイルサーバＢに格納されている場合（ステップＳ５０７：ファイルサーバＢ）はステップＳ５０８へ処理を進める一方、差分ファイル保持フラグＴ１０２が「ファイルサーバＡＢ」である場合、すなわちファイルＡの最新の差分がファイルサーバＡ及びファイルサーバＢに格納されている場合（ステップＳ５０７：ファイルサーバＡＢ）は、ファイルサーバＢに差分ブロックの同期が完了したことを通知し、図１５のステップＳ５１３へ処理を進める。
【０１０３】
ステップＳ５０７の判定において、差分ファイル保持フラグＴ１０２が「ファイルサーバＢ」である場合（ステップＳ５０７：ファイルサーバＢ）に実行される処理を次に示す。ファイルサーバＡの差分同期制御プログラム２４２０は、ファイルＡを構成するファイルブロックのそれぞれに対して、ステップＳ５０８〜ステップＳ５１１の処理のうちのファイルサーバＡ側の処理を行う。なお、ステップＳ５０８〜Ｓ５１１の処理は、各ファイルブロックに対して、逐次に処理しても良いし、並列に処理しても良い。ここで、ファイルＡを構成するファイルブロックのうちの処理対象となる一つをステップＳ５０８〜ステップＳ５１１の説明において「対象ファイルブロック」という。
【０１０４】
ファイルサーバＡの差分同期制御プログラム２４２０は、差分ブロック管理テーブルＴ２００Ａにおける対象ファイルブロックに関するエントリの差分ブロック保持フラグＴ２０５を参照し、対象ファイルブロックの差分ブロックが存在するか否か及び存在する場合に対象ファイルブロックの差分ブロックがどのファイルサーバ２０００に格納されているかを判定して処理を分岐する（ステップＳ５０８）。具体的には、ファイルサーバＡの差分同期制御プログラム２４２０は、差分ブロック保持フラグＴ２０５が「ファイルサーバＢ」である場合、すなわち差分ブロックが存在しその差分ブロックがファイルサーバＢに格納されている場合（ステップＳ５０８：ファイルサーバＢ）は、対象ファイルブロックに関するエントリの差分ＩＤＴ２０１の値をファイルサーバＢに通知する一方、差分ブロック保持フラグＴ２０５が「ファイルサーバＡＢ」または「Ｎｕｌｌ」である場合、すなわち差分ブロックが存在しないかまたはファイルサーバＡに格納されている場合（ステップＳ５０８：ファイルサーバＡＢまたはＮｕｌｌ）は、ステップＳ５１２へ処理を進める。
【０１０５】
ファイルサーバＡから対象ファイルブロックに関するエントリの差分ＩＤＴ２０１の値の通知を受けたファイルサーバＢの差分同期制御プログラム２４２０は、ステップＳ５０９において、ファイルサーバＢの差分同期制御プログラム２４２０は、通知された差分ＩＤＴ２０１の値に基づいて、差分ブロック管理テーブルＴ２００Ｂにおける対象ファイルブロックに関するエントリを特定する。そして、ファイルサーバＢの差分同期制御プログラム２４２０は、特定したエントリの差分ブロックパスＴ２０４が示すパス情報によって特定される領域から対象ファイルブロックの差分ブロックを取得する（ステップＳ５０９）。
【０１０６】
次に、ファイルサーバＢの差分同期制御プログラム２４２０は、ステップＳ５０９で取得した差分ブロックを、差分ＩＤＴ２０１の値と共にファイルサーバＡに送信する（ステップＳ５１０）。
【０１０７】
ファイルサーバＢから対象ファイルブロックの差分ブロックを受信したファイルサーバＡの差分同期制御プログラム２４２０は、ファイルサーバＡの差分格納ファイルシステム２６００における対象ファイルブロックに関するエントリの差分ブロックパスＴ２０４が示すパス情報によって特定される領域に、受信した差分ブロックを上書きで格納する（ステップＳ５１１）。
【０１０８】
次に、ファイルサーバＡの差分同期制御プログラム２４２０は、ファイルＡを構成するファイルブロックのそれぞれについてステップＳ５０８〜ステップＳ５１１の処理が完了するまで待機し（ステップＳ５１２）、ファイルＡを構成するファイルブロックのそれぞれについての処理が完了した後、ファイルサーバＢに差分ブロックの同期が完了したことを通知し、図１５のステップＳ５１３へ処理を進める。
【０１０９】
図１５のステップＳ５１３において、ファイルサーバＡの差分同期制御プログラム２４２０は、差分ブロック管理テーブルＴ２００Ａを参照し、ファイル名Ｔ２０２が「ファイルＡ」であり、かつ差分ブロック保持フラグＴ２０５が「Ｎｕｌｌ」以外のエントリが示すファイルブロック、すなわち差分ブロックが存在するファイルブロックを特定する。そして、ファイルサーバＡの差分同期制御プログラム２４２０は、ファイルサーバＡのファイルシステム２５００における、特定したファイルブロックの格納領域に、ファイルサーバＡの差分格納ファイルシステム２６００に格納されている、特定したファイルブロックの差分ブロックを上書きで格納する（ステップＳ５１３）。
【０１１０】
次に、ファイルサーバＡの差分同期制御プログラム２４２０は、差分ブロック管理テーブルＴ２００Ａにおけるファイル名Ｔ２０２が「ファイルＡ」であるエントリの差分ブロックパスＴ２０４が示すパス情報によって特定される領域に格納されている差分ブロック、すなわちファイルサーバＡの差分格納ファイルシステム２６００に格納されているファイルＡの差分ブロックを削除する（ステップＳ５１４）。
【０１１１】
次に、ファイルサーバＡの差分同期制御プログラム２４２０は、差分ブロック管理テーブルＴ２００Ａにおけるファイル名Ｔ２０２が「ファイルＡ」であるエントリのそれぞれの差分ブロック保持フラグＴ２０５を「Ｎｕｌｌ」に設定する（ステップＳ５１５）。
【０１１２】
次に、ファイルサーバＡの差分同期制御プログラム２４２０は、差分ファイル管理テーブルＴ１００Ａにおけるファイル名Ｔ１０１が「ファイルＡ」であるエントリの差分ファイル保持フラグを「Ｎｕｌｌ」に設定する（ステップＳ５１６）。
【０１１３】
次に、ファイルサーバＡの差分同期制御プログラム２４２０は、ファイルロック管理テーブルＴ３００Ａにおけるファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックフラグＴ３０２を「Ｎ」に設定し、ロックユーザＴ３０３を「Ｎｕｌｌ」に設定する（ステップＳ５１７）。
【０１１４】
一方、ファイルサーバＡから差分ブロックの同期が完了したことの通知を受信したファイルサーバＢの差分同期制御プログラム２４２０は、ステップＳ５１３〜ステップＳ５１７と並行して、ファイルサーバＢにおいて、ステップＳ５１３〜ステップＳ５１７と同様の処理を行う。すなわち、ファイルサーバＢの差分同期制御プログラム２４２０は、差分ブロック管理テーブルＴ２００Ｂを参照し、ファイル名Ｔ２０２が「ファイルＡ」であり、かつ差分ブロック保持フラグＴ２０５が「Ｎｕｌｌ」以外のエントリが示すファイルブロック、すなわち差分ブロックが存在するファイルブロックを特定する。そして、ファイルサーバＢの差分同期制御プログラム２４２０は、ファイルサーバＢのファイルシステム２５００における、特定したファイルブロックの格納領域に、ファイルサーバＢの差分格納ファイルシステム２６００に格納されている、特定したファイルブロックの差分ブロックを上書きで格納する（ステップＳ５１８）。次に、ファイルサーバＢの差分同期制御プログラム２４２０は、差分ブロック管理テーブルＴ２００Ｂにおけるファイル名Ｔ２０２が「ファイルＡ」であるエントリの差分ブロックパスＴ２０４が示すパス情報によって特定される領域に格納されている差分ブロック、すなわちファイルサーバＢの差分格納ファイルシステム２６００に格納されているファイルＡの差分ブロックを削除する（ステップＳ５１９）。次に、ファイルサーバＢの差分同期制御プログラム２４２０は、差分ブロック管理テーブルＴ２００Ｂにおけるファイル名Ｔ２０２が「ファイルＡ」であるエントリのそれぞれの差分ブロック保持フラグＴ２０５を「Ｎｕｌｌ」に設定する（ステップＳ５２０）。次に、ファイルサーバＢの差分同期制御プログラム２４２０は、差分ファイル管理テーブルＴ１００Ｂにおけるファイル名Ｔ１０１が「ファイルＡ」であるエントリの差分ファイル保持フラグを「Ｎｕｌｌ」に設定する（ステップＳ５２１）。次に、ファイルサーバＢの差分同期制御プログラム２４２０は、ファイルロック管理テーブルＴ３００Ｂにおけるファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックフラグＴ３０２を「Ｎ」に設定し、ロックユーザＴ３０３を「Ｎｕｌｌ」に設定する（ステップＳ５２２）。
【０１１５】
ステップＳ５１７の処理を終えた後、ファイルサーバＡの差分同期制御プログラム２４２０は、同期処理を終了する。
【０１１６】
本実施例における同期処理では、ファイルサーバ２０００は、ステップＳ５１０において差分ブロックを転送した後で、ステップＳ５１３及びステップＳ５１８においてファイルシステム２５００内のファイルブロックに差分格納ファイルシステム２６００内の差分ブロックを上書きし、ファイルに対する差分の反映を行ったが、必ずしも差分の反映まで行う必要はない。例えば、ファイルサーバ２０００は、或る時点での同期処理では、差分ブロックの転送及び転送された差分ブロックの差分格納ファイルシステム２６００への格納だけを行って、ファイルに対する差分の反映までは行わず、他の或る時点での同期処理では、差分ブロックの転送及びファイルに対する差分の反映を行うようにしても良い。
【実施例２】
【０１１７】
以下、実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略或いは簡略する。
【０１１８】
図１６は、実施例２に係る計算機システムの一例の構成図である。
【０１１９】
本実施例に係る計算機システムの構成は、実施例１に係る計算機システムの構成と実質的に同じである。本実施例では、ファイルサーバＢに障害が発生しているものとする。障害の形態としては、例えば、クライアントＡ又はクライアントＢとファイルサーバＢとの間の接続障害、ファイルサーバＢの内部の障害、ファイルサーバＢとディスクアレイ装置Ｂとの間の接続障害、ディスクアレイ装置Ｂの内部の障害等がある。ファイルサーバＡは、ファイルサーバＢの障害発生を検知すると、後述する図１７〜図２１に示す障害発生時の処理に切り替えて稼動を続ける。なお、ファイルサーバＡとファイルサーバＢとがお互いの障害発生を監視する方法としては、本実施例においては、ファイルサーバＡとファイルサーバＢとがネットワーク２００を介してお互いに死活監視、例えばハートビートに基づく監視を行うことを想定しているが、この方法に限定されず、ファイルサーバＡとファイルサーバＢとがお互いの障害発生を監視できる方法であれば他の方法でも良い。
【０１２０】
図１７は、実施例２に係るファイルクリエイト処理のフローチャートである。同図は、ファイルサーバＢに障害が発生している場合において、クライアントＡがファイルサーバＡに対してファイルＡの生成を要求する場合の例を示す。
【０１２１】
まず、エンドユーザ１００が操作するクライアントＡが、ファイルサーバＡに対して、ファイルＡのＣｒｅａｔｅ要求を発行し、そのＣｒｅａｔｅ要求と共にファイルＡを送信する（ステップＳ６０１）。
【０１２２】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、ステップＳ６０１でＣｒｅａｔｅ要求と共に受信したファイルＡを、ファイルサーバＡのファイルシステム２５００に格納する（ステップＳ６０２）。
【０１２３】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、ステップＳ６０２でファイルシステム２５００に格納したファイルＡの差分を格納するための領域を、ファイルサーバＡの差分格納ファイルシステム２６００に確保する（ステップＳ６０３）。
【０１２４】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ファイル管理テーブルＴ１００ＡにファイルＡに関するエントリを追加する。具体的には、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイル名Ｔ１０１に「ファイルＡ」を格納し、差分ファイル保持フラグＴ１０２に「Ｎｕｌｌ」を格納したエントリを追加する。また、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ブロック管理テーブルＴ２００ＡにファイルＡに関するエントリを追加する。具体的には、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ＩＤＴ２０１に一意な数値を格納し、ファイル名Ｔ２０２に「ファイルＡ」を格納し、ファイルブロックパスＴ２０３に、ファイルサーバＡのファイルシステム２５００におけるファイルＡを構成するファイルブロックの格納領域へのパスを格納し、差分ブロックパスＴ２０４に、ファイルサーバＡの差分格納ファイルシステム２６００におけるファイルＡの差分ブロックの格納領域へのパスを格納し、差分ブロック保持フラグＴ２０５に「Ｎｕｌｌ」を格納したエントリを追加する。差分ブロック管理テーブルＴ２００Ａへのエントリの追加は、ファイルＡを構成するファイルブロックの全てに対して実施される。また、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００ＡにファイルＡに関するエントリを追加する。具体的には、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイル名Ｔ３０１に「ファイルＡ」を格納し、ロックフラグＴ３０２に「Ｎ」を格納し、ロックユーザＴ３０３に「Ｎｕｌｌ」を格納したエントリを追加する（ステップＳ６０４）。
【０１２５】
ステップＳ６０４の処理を終えた後、ファイルサーバＡのファイル操作制御プログラム２４１０は、クライアントＡにファイルＡの生成が完了したことを通知し（ステップＳ６０５）、ファイル生成処理を終了する。
【０１２６】
図１８は、実施例２に係るファイルリード処理の第１のフローチャートである。図１９は、実施例２に係るファイルリード処理の第２のフローチャートである。図１８及び図１９に示す２つのフローチャートは、ファイルリード処理の全体を示しており、図１８及び図１９の中の（５）は、各図のフローチャートの接続関係を示しており、異なる図面の同一の表記の部分は、処理が連続していることを示している。図１８及び図１９は、ファイルサーバＢに障害が発生している場合において、クライアントＡがファイルサーバＡに対してファイルＡの読み出しを要求する場合の例を示す。
【０１２７】
図１８において、まず、エンドユーザ１００が操作するクライアントＡが、ファイルサーバＡに対して、ファイルＡのＲｅａｄ要求を発行する（ステップＳ７０１）。
【０１２８】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００Ａを参照し、ファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックフラグＴ３０２が「Ｙ」であるか、「Ｎ」であるかを判定して処理を分岐する（ステップＳ７０２）。具体的には、ファイルサーバＡのファイル操作制御プログラム２４１０は、ロックフラグＴ３０２が「Ｎ」である場合（ステップＳ７０２：Ｎ）はステップＳ７０３へ処理を進める一方、ロックフラグＴ３０２が「Ｙ」である場合（ステップＳ７０２：Ｙ）はステップＳ７０７へ処理を進める。
【０１２９】
ステップＳ７０２の判定において、ロックフラグＴ３０２が「Ｎ」である場合（ステップＳ７０２：Ｎ）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ファイル管理テーブルＴ１００Ａを参照し、ファイル名Ｔ１０１が「ファイルＡ」であるエントリの差分ファイル保持フラグＴ１０２の値を判定して処理を分岐する（ステップＳ７０３）。具体的には、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ファイル保持フラグＴ１０２が「ファイルサーバＢ」である場合（ステップＳ７０３：ファイルサーバＢ）はステップＳ７０４へ処理を進める一方、差分ファイル保持フラグＴ１０２が「ファイルサーバＢ」以外である場合（ステップＳ７０３：ファイルサーバＢ以外）はステップＳ７０６へ処理を進める。
【０１３０】
ステップＳ７０３の判定において、差分ファイル保持フラグＴ１０２が「ファイルサーバＢ」である場合（ステップＳ７０３：ファイルサーバＢ）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００ＡにおけるファイルＡに関するエントリのロックフラグＴ３０２を「Ｙ」に設定し、ロックユーザＴ３０３を「障害中」に設定する（ステップＳ７０４）。その後、ファイルサーバＡのファイル操作制御プログラム２４１０は、ステップＳ７０５へ処理を進める。
【０１３１】
ステップＳ７０３の判定において、差分ファイル保持フラグＴ１０２が「ファイルサーバＢ」以外である場合（ステップＳ７０３：ファイルサーバＢ以外）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００ＡにおけるファイルＡに関するエントリのロックフラグＴ３０２を「Ｙ」に設定し、ロックユーザＴ３０３を「クライアントＡ」に設定する（ステップＳ７０６）。その後、ファイルサーバＡのファイル操作制御プログラム２４１０は、図１９のステップＳ７１０へ処理を進める。
【０１３２】
ステップＳ７０２の判定において、ロックフラグＴ３０２が「Ｙ」である場合（ステップＳ７０２：Ｙ）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００Ａを参照し、ファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックユーザＴ３０３の値を判定して処理を分岐する（ステップＳ７０７）。具体的には、ファイルサーバＡのファイル操作制御プログラム２４１０は、ロックユーザＴ３０３が「システム」である場合（ステップＳ７０７：システム）はステップＳ７０８へ処理を進め、ロックユーザＴ３０３が「障害中」である場合（ステップＳ７０７：障害中）はステップＳ７０５へ処理を進め、ロックユーザＴ３０３が「障害中」及び「システム」以外である場合（ステップＳ７０７：障害中及びシステム以外）はステップＳ７０９へ処理を進める。
【０１３３】
ステップＳ７０７の判定において、ロックユーザＴ３０３が「システム」である場合（ステップＳ７０７：システム）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、一定時間待機し（ステップＳ７０８）、その後、ステップＳ７０２へ処理を進める。
【０１３４】
ステップＳ７０７の判定において、ロックユーザＴ３０３が「障害中」及び「システム」以外である場合（ステップＳ７０７：障害中及びシステム以外）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルＡは別のユーザによりロックされているため、読み取り専用となることをクライアントＡに通知する（ステップＳ７０９）。その後、ファイルサーバＡのファイル操作制御プログラム２４１０は、図１９のステップＳ７１０へ処理を進める。
【０１３５】
ステップＳ７０５において、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルＡに不整合が発生しており、ファイルＡが最新状態ではない可能性があるため、ファイルＡは一時的に読み取り専用になっていることをクライアントＡに通知する。その後、ファイルサーバＡのファイル操作制御プログラム２４１０は、図１９のステップＳ７１０へ処理を進める。
【０１３６】
図１９のステップＳ７１０において、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ファイル管理テーブルＴ１００Ａを参照し、ファイル名Ｔ１０１が「ファイルＡ」であるエントリの差分ファイル保持フラグＴ１０２の値を判定して処理を分岐する（ステップＳ７１０）。具体的には、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ファイル保持フラグＴ１０２が「Ｎｕｌｌ」である場合（ステップＳ７１０：Ｎｕｌｌ）はステップＳ７１３へ処理を進める一方、差分ファイル保持フラグＴ１０２が「Ｎｕｌｌ」以外である場合（ステップＳ７１０：Ｎｕｌｌ以外）はステップＳ７１１へ処理を進める。
【０１３７】
ステップＳ７１０の判定において、差分ファイル保持フラグＴ１０２が「Ｎｕｌｌ」以外である場合（ステップＳ７１０：Ｎｕｌｌ以外）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ブロック管理テーブルＴ２００Ａにおけるファイル名Ｔ２０２が「ファイルＡ」であるエントリのそれぞれの差分ブロック保持フラグＴ２０５を参照し、ファイルＡを構成する各ファイルブロックについて差分ブロックが存在するか否かを特定する。そして、差分ブロック保持フラグＴ２０５が「Ｎｕｌｌ」であるファイルブロック、すなわち差分ブロックが存在しないファイルブロックについては、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルサーバＡのファイルシステム２５００におけるファイルブロックパスＴ２０３が示すパス情報によって特定される領域からそのファイルブロックを取得する。一方、差分ブロック保持フラグＴ２０５が「Ｎｕｌｌ」以外であるファイルブロック、すなわち差分ブロックが存在するファイルブロックについては、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルサーバＡの差分格納ファイルシステム２６００における差分ブロックパスＴ２０４が示すパス情報によって特定される領域からそのファイルブロックの差分ブロックを取得する。その後、ファイルサーバＡのファイル操作制御プログラム２４１０は、取得したファイルブロック及び差分ブロックに基づいてメモリ２４００内に仮想のファイルＡ、すなわち最新の差分が反映されたファイルＡを作成する（ステップＳ７１１）。
【０１３８】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、ステップＳ７１１で作成した仮想のファイルＡを、クライアントＡへ送信し（ステップＳ７１２）、ステップＳ７１４に処理を進める。
【０１３９】
ステップＳ７１０の判定において、差分ファイル保持フラグＴ１０２が「Ｎｕｌｌ」である場合（ステップＳ７１０：Ｎｕｌｌ）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ブロック管理テーブルＴ２００Ａにおけるファイル名Ｔ２０２が「ファイルＡ」であるエントリのそれぞれのファイルブロックパスＴ２０３から、ファイルＡを構成する各ファイルブロックの格納領域を特定するためのパス情報を取得する。そして、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルサーバＡのファイルシステム２５００における、取得したパス情報によって特定される領域からファイルＡを構成する各ファイルブロックを取得する。その後、ファイルサーバＡのファイル操作制御プログラム２４１０は、取得したファイルブロックに基づいてメモリ２４００内にファイルＡを作成する。その後、ファイルサーバＡのファイル操作制御プログラム２４１０は、作成したファイルＡを、クライアントＡへ送信し（ステップＳ７１３）、ステップＳ７１４に処理を進める。
【０１４０】
ステップＳ７１４では、ファイルサーバＡのファイル操作制御プログラム２４１０は、クライアントＡからファイルＡのクローズ要求を受信するまで待機する。
【０１４１】
クライアントＡからファイルＡのクローズ要求を受信した場合、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００Ａにおけるファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックフラグを「Ｎ」に設定し、ロックユーザを「Ｎｕｌｌ」に設定する（ステップＳ７１５）。その後、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルリード処理を終了する。
【０１４２】
図２０は、実施例２に係るファイルライト処理のフローチャートである。同図は、ファイルサーバＢに障害が発生している場合において、クライアントＡがファイルサーバＡに対してファイルＡの書込みを要求する場合の例を示す。なお、同図のファイルライト処理が行われる前に図１８及び図１９のファイルリード処理が行われているものとする。
【０１４３】
まず、エンドユーザ１００が操作するクライアントＡが、ファイルサーバＡに対して、ファイルＡのＷｒｉｔｅ要求を発行し、そのＷｒｉｔｅ要求と共に書込み後の内容のファイルＡを送信する（ステップＳ８０１）。
【０１４４】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００Ａを参照し、ファイル名Ｔ３０１が「ファイルＡ」のエントリが存在するか否かを判定して処理を分岐する（ステップＳ８０２）。具体的には、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイル名Ｔ３０１が「ファイルＡ」のエントリが存在する場合（ステップＳ８０２：ＹＥＳ）はステップＳ８０３へ処理を進める一方、ファイル名Ｔ３０１が「ファイルＡ」のエントリが存在しない場合（ステップＳ８０２：ＮＯ）はファイルＡのファイル生成処理（図１７参照）を行う。
【０１４５】
ステップＳ８０２の判定において、ファイル名Ｔ３０１が「ファイルＡ」のエントリが存在する場合（ステップＳ８０２：ＹＥＳ）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００Ａを参照し、ファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックユーザＴ３０３が示すユーザを判定して処理を分岐する（ステップＳ８０３）。具体的には、ファイルサーバＡのファイル操作制御プログラム２４１０は、ロックユーザＴ３０３が「クライアントＡ」である場合（ステップＳ８０３：クライアントＡ）はステップＳ８０５へ処理を進める一方、ロックユーザＴ３０３が「Ｎｕｌｌ」である場合（ステップＳ８０３：Ｎｕｌｌ）は同名の別ファイルを上書きする処理であると判断し、ファイルＡのファイル削除処理（図２１参照）を行った後に、ファイルＡのファイル生成処理（図１７参照）を行う。また、ファイルサーバＡのファイル操作制御プログラム２４１０は、ロックユーザＴ３０３が「クライアントＡ」及び「Ｎｕｌｌ」のどちらでもない場合（ステップＳ８０３：クライアントＡ及びＮｕｌｌ以外）はステップＳ８０４へ処理を進める。
【０１４６】
ステップＳ８０３の判定において、ロックユーザＴ３０３が「クライアントＡ」及び「Ｎｕｌｌ」のどちらでもない場合（ステップＳ８０３：クライアントＡ及びＮｕｌｌ以外）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、クライアントＡ以外のユーザによってファイルＡがロックされているため、ファイルＡは読み取り専用状態であり、Ｗｒｉｔｅ不可であるとクライアントＡに通知し（ステップＳ８０４）、ファイルライト処理を終了する。
【０１４７】
ステップＳ８０３の判定において、ロックユーザＴ３０３が「クライアントＡ」である場合（ステップＳ８０３：クライアントＡ）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、ステップＳ８０１でクライアントＡから受信したファイルＡを構成する各ファイルブロックと、図１９のステップＳ７１２またはステップＳ７１３でクライアントＡに送信したファイルＡ、すなわち、このファイルライト処理の前に行われたファイルリード処理においてクライアントへ送信したファイルＡを構成する各ファイルブロックとを比較し、更新されたファイルＡのファイルブロック（更新ブロック）を抽出する（ステップＳ８０５）。
【０１４８】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ブロック管理テーブルＴ２００Ａから、更新ブロックに関するエントリの差分ブロックパスＴ２０４が示すパス情報を取得する。そして、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルサーバＡの差分格納ファイルシステム２６００における、特定したパス情報によって特定される領域に、更新ブロックの更新後のデータを、差分ブロックとして格納する（ステップＳ８０６）。
【０１４９】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ブロック管理テーブルＴ２００Ａにおける更新ブロックに関するエントリの差分ブロック保持フラグＴ２０５を「ファイルサーバＡ」に設定する（ステップＳ８０７）。
【０１５０】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ファイル管理テーブルＴ１００Ａにおけるファイル名Ｔ１０１が「ファイルＡ」であるエントリの差分ファイル保持フラグＴ１０２を「ファイルサーバＡ」に設定する（ステップＳ８０８）。
【０１５１】
その後、ファイルサーバＡのファイル操作制御プログラム２４１０は、クライアントＡにファイルＡの書込みが完了したことを通知して（ステップＳ８０９）、ファイルライト処理を終了する。
【０１５２】
図２１は、実施例２に係るファイル削除処理のフローチャートである。同図は、ファイルサーバＢに障害が発生している場合において、クライアントＡがファイルサーバＡに対してファイルＡの削除を要求する場合の例を示す。
【０１５３】
まず、エンドユーザ１００が操作するクライアントＡが、ファイルサーバＡに対して、ファイルＡのＤｅｌｅｔｅ要求を発行する（ステップＳ９０１）。
【０１５４】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００Ａを参照し、ファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックフラグＴ３０２が「Ｙ」であるか、「Ｎ」であるかを判定して処理を分岐する（ステップＳ９０２）。具体的には、ファイルサーバＡのファイル操作制御プログラム２４１０は、ロックフラグＴ３０２が「Ｙ」である場合（ステップＳ９０２：Ｙ）はステップＳ９０３へ処理を進める一方、ロックフラグＴ３０２が「Ｎ」である場合（ステップＳ９０２：Ｎ）はステップＳ９０４へ処理を進める。
【０１５５】
ステップＳ９０２の判定において、ロックフラグＴ３０２が「Ｙ」である場合（ステップＳ９０２：Ｙ）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルＡは別のユーザによりロックされているため、読み取り専用状態であり、Ｄｅｌｅｔｅ不可であるとクライアントＡに通知し（ステップＳ９０３）、ファイル削除処理を終了する。
【０１５６】
ステップＳ９０２の判定において、ロックフラグＴ３０２が「Ｎ」である場合（ステップＳ９０２：Ｎ）に実行される処理を次に示す。ファイルサーバＡのファイル操作制御プログラム２４１０は、ファイルロック管理テーブルＴ３００Ａにおけるファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックフラグＴ３０２を「Ｙ」に設定し、ロックユーザＴ３０３を「クライアントＡ」に設定する（ステップＳ９０４）。
【０１５７】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ブロック管理テーブルＴ２００Ａにおけるファイル名Ｔ２０２が「ファイルＡ」であるエントリのファイルブロックパスＴ２０３が示すパス情報によって特定される領域に格納されているファイルブロック、すなわちファイルサーバＡのファイルシステム２５００内に格納されているファイルＡを構成するファイルブロックを全て削除する。また、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ブロック管理テーブルＴ２００Ａにおけるファイル名Ｔ２０２が「ファイルＡ」であるエントリの差分ブロックパスＴ２０４が示すパス情報によって特定される領域に格納されている差分ブロック、すなわちファイルサーバＡの差分格納ファイルシステム２６００内に格納されているファイルＡの差分ブロックを全て削除する（ステップＳ９０５）。
【０１５８】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ブロック管理テーブルＴ２００Ａ及びファイルロック管理テーブルＴ３００Ａのそれぞれに登録されているファイルＡに関するエントリの全てを削除する（ステップＳ９０６）。
【０１５９】
次に、ファイルサーバＡのファイル操作制御プログラム２４１０は、差分ファイル管理テーブルＴ１００Ａにおけるファイル名Ｔ１０１が「ファイルＡ」であるエントリの差分ファイル保持フラグＴ１０２を「Ｄｅｌｅｔｅ」に設定する（ステップＳ９０７）。ファイル保持フラグＴ１０２の「Ｄｅｌｅｔｅ」は、リモートコピーのペアとなっている他のファイルサーバ２０００（本実施例では、ファイルサーバＢ）に障害が発生している間にファイルが削除されたことを示している。
【０１６０】
その後、ファイルサーバＡのファイル操作制御プログラム２４１０は、クライアントＡにファイルＡの削除が完了したことを通知し（ステップＳ９０８）、ファイル削除処理を終了する。
【０１６１】
図２２は、実施例２に係る整合性確認処理の第１のフローチャートである。図２３は、実施例２に係る整合性確認処理の第２のフローチャートである。図２４は、実施例２に係る整合性確認処理の第３のフローチャートである。図２２〜図２４に示す３つのフローチャートは、整合性確認処理の全体を示しており、これらの図中の（６）、（７）は、各図のフローチャートの接続関係を示しており、異なる図面の同一の表記の部分は、処理が連続していることを示している。整合性確認処理は、ファイルサーバＢが障害から復旧した際に行われる処理であり、ファイルサーバＡとファイルサーバＢとの間で差分管理テーブルについての同期をとる処理である。片方のファイルサーバが障害から復旧した場合、障害から復旧した方のファイルサーバと、障害中に片系で運用継続していた方のファイルサーバとでは、差分管理テーブルの内容が不一致となっているが、整合性確認処理を行うことにより、両系運用の際に差分管理テーブルを同じ内容にすることができる。図２２〜図２４は、ファイルシステム２５００にファイルＡが格納されている場合の例を示す。
【０１６２】
図２２において、まず、ファイルサーバＢの差分同期制御プログラム２４２０は、ファイルサーバＢが障害から復旧した後、この整合性確認処理が完了するまで、クライアント１０００からの入出力要求を抑止する（ステップＳ１００１）。
【０１６３】
一方、ファイルサーバＡの差分同期制御プログラム２４２０は、差分ファイル管理テーブルＴ１００Ａを参照し、ファイル名Ｔ１０１が「ファイルＡ」であるエントリの差分ファイル保持フラグＴ１０２の値を判定して処理を分岐する（ステップＳ１００２）。具体的には、ファイルサーバＡの差分同期制御プログラム２４２０は、差分ファイル保持フラグＴ１０２が「Ｄｅｌｅｔｅ」である場合（ステップＳ１００２：Ｄｅｌｅｔｅ）は、ファイルＡが障害発生中に削除されたことをファイルサーバＢへ通知し、差分ファイル保持フラグＴ１０２が「Ｄｅｌｅｔｅ」以外である場合（ステップＳ１００２：Ｄｅｌｅｔｅ以外）は整合性の確認を開始することをファイルサーバＢへ通知する。
【０１６４】
ファイルサーバＡからファイルＡが障害発生中に削除されたことの通知を受信したファイルサーバＢの差分同期制御プログラム２４２０は、ステップＳ１００３へ処理を進める。一方、ファイルサーバＡから整合性の確認を開始することの通知を受信したファイルサーバＢの差分同期制御プログラム２４２０は、図２３のステップＳ１００８へ処理を進める。
【０１６５】
ステップＳ１００３において、ファイルサーバＢの差分同期制御プログラム２４２０は、ファイルＡが存在するか否かを判定して処理を分岐する。具体的には、ファイルサーバＢの差分同期制御プログラム２４２０は、差分ファイル管理テーブルＴ１００Ｂ、差分ブロック管理テーブルＴ２００Ｂ及びファイルロック管理テーブルＴ３００ＢにファイルＡに関するエントリが存在するか否かを判定することにより、ファイルＡが存在するか否かを判定する。ファイルサーバＢの差分同期制御プログラム２４２０は、ファイルＡが存在する場合（ステップＳ１００３：ＹＥＳ）はステップＳ１００４へ処理を進める一方、ファイルＡが存在しない場合（ステップＳ１００３：ＮＯ）は整合性確認処理を終了する。
【０１６６】
ステップＳ１００３の判定において、ファイルＡが存在する場合（ステップＳ１００３：ＹＥＳ）に実行される処理を次に示す。ファイルサーバＢの差分同期制御プログラム２４２０は、ファイルロック管理テーブルＴ３００ＢにおけるファイルＡに関するエントリのロックフラグＴ３０１を「Ｙ」に設定し、ロックユーザＴ３０２を「システム」に設定する（ステップＳ１００４）。なお、クライアント１０００からファイルサーバＢへの入出力要求を抑止しているため、ファイルＡがロック済みであることは無い。
【０１６７】
次に、ファイルサーバＢの差分同期制御プログラム２４２０は、差分ブロック管理テーブルＴ２００Ｂにおけるファイル名Ｔ２０２が「ファイルＡ」であるエントリのファイルブロックパスＴ２０３が示すパス情報によって特定される領域に格納されているファイルブロック、すなわちファイルサーバＢのファイルシステム２５００内に格納されているファイルＡを構成するファイルブロックを全て削除する。また、ファイルサーバＢの差分同期制御プログラム２４２０は、差分ブロック管理テーブルＴ２００Ｂにおけるファイル名Ｔ２０２が「ファイルＡ」であるエントリの差分ブロックパスＴ２０４が示すパス情報によって特定される領域に格納されている差分ブロック、すなわちファイルサーバＢの差分格納ファイルシステム２６００内に格納されているファイルＡの差分ブロックを全て削除し（ステップＳ１００５）、ファイルＡの削除が完了したことをファイルサーバＡに通知する。
【０１６８】
次に、ファイルサーバＢの差分同期制御プログラム２４２０は、差分ファイル管理テーブルＴ１００Ｂ、差分ブロック管理テーブルＴ２００Ｂ及びファイルロック管理テーブルＴ３００Ｂのそれぞれに登録されているファイルＡに関するエントリの全てを削除する（ステップＳ１００６）。その後、ファイルサーバＢの差分同期制御プログラム２４２０は、整合性確認処理を終了する。
【０１６９】
一方、ファイルサーバＢからファイルＡの削除が完了したことの通知を受信したファイルサーバＡの差分同期制御プログラム２４２０は、ステップＳ１００６と並行して、差分ファイル管理テーブルＴ１００Ａに登録されているファイルＡに関するエントリを削除する（ステップＳ１００７）。その後、ファイルサーバＡの差分同期制御プログラム２４２０は、整合性確認処理を終了する。
【０１７０】
図２３のステップＳ１００８において、ファイルサーバＢの差分同期制御プログラム２４２０は、ファイルＡが存在するか否かを判定して処理を分岐する。具体的には、ファイルサーバＢの差分同期制御プログラム２４２０は、差分ファイル管理テーブルＴ１００Ｂ、差分ブロック管理テーブルＴ２００Ｂ及びファイルロック管理テーブルＴ３００ＢにファイルＡに関するエントリが存在するか否かを判定することによりファイルＡが存在するか否かを判定する。ファイルサーバＢの差分同期制御プログラム２４２０は、ファイルＡが存在する場合（ステップＳ１００８：ＹＥＳ）は、ファイルＡが存在することをファイルサーバＡへ通知する一方、ファイルＡが存在しない場合（ステップＳ１００８：ＮＯ）は、ファイルＡが存在しないことをファイルサーバＡの差分同期制御プログラム２４２０へ通知する。
【０１７１】
ファイルサーバＢからファイルＡが存在することの通知を受信したファイルサーバＡの差分同期制御プログラム２４２０は、図２４のステップＳ１０１３に処理を進める。一方、ファイルサーバＢからファイルＡが存在しないことの通知を受信したファイルサーバＡの差分同期制御プログラム２４２０は、ステップＳ１００９に処理を進める。
【０１７２】
ステップＳ１００９において、ファイルサーバＡの差分同期制御プログラム２４２０は、差分ブロック管理テーブルＴ２００Ａにおけるファイル名Ｔ２０２が「ファイルＡ」であるエントリのそれぞれのファイルブロックパスＴ２０３から、ファイルＡを構成する各ファイルブロックの格納領域を特定するためのパス情報を取得する。そして、ファイルサーバＡの差分同期制御プログラム２４２０は、ファイルサーバＡのファイルシステム２５００における、取得したバス情報によって特定される領域からファイルＡを構成する各ファイルブロックを取得する。その後、ファイルサーバＡの差分同期制御プログラム２４２０は、取得したファイルブロックに基づいてメモリ２４００内にファイルＡを作成する。その後、ファイルサーバＡの差分同期制御プログラム２４２０は、作成したファイルＡを、ファイルサーバＢへ送信する（ステップＳ１００９）。
【０１７３】
ファイルサーバＡからファイルＡを受信したファイルサーバＢの差分同期制御プログラム２４２０は、受信したファイルＡを、ファイルサーバＢのファイルシステム２５００に格納する（ステップＳ１０１０）。
【０１７４】
次に、ファイルサーバＢの差分同期制御プログラム２４２０は、ステップＳ１０１０でファイルシステム２５００に格納したファイルＡの差分を格納するための領域を、ファイルサーバＢの差分格納ファイルシステム２６００に確保する（ステップＳ１０１１）。
【０１７５】
次に、ファイルサーバＢの差分同期制御プログラム２４２０は、差分ファイル管理テーブルＴ１００ＢにファイルＡに関するエントリを追加する。具体的には、ファイルサーバＢの差分同期制御プログラム２４２０は、ファイル名Ｔ１０１に「ファイルＡ」を格納し、差分ファイル保持フラグＴ１０２に「Ｎｕｌｌ」を格納したエントリを追加する。また、ファイルサーバＢの差分同期制御プログラム２４２０は、差分ブロック管理テーブルＴ２００ＢにファイルＡに関するエントリを追加する。具体的には、ファイルサーバＢの差分同期制御プログラム２４２０は、差分ＩＤＴ２０１に一意な数値を格納し、ファイル名Ｔ２０２に「ファイルＡ」を格納し、ファイルブロックパスＴ２０３に、ファイルサーバＢのファイルシステム２５００におけるファイルＡを構成するファイルブロックの格納領域へのパスを格納し、差分ブロックパスＴ２０４に、ファイルサーバＢの差分格納ファイルシステム２６００におけるファイルＡの差分ブロックの格納領域へのパスを格納し、差分ブロック保持フラグＴ２０５に「Ｎｕｌｌ」を格納したエントリを追加する。差分ブロック管理テーブルＴ２００Ｂへのエントリの追加は、ファイルＡを構成するファイルブロックの全てに対して実施される。また、ファイルサーバＢの差分同期制御プログラム２４２０は、ファイルロック管理テーブルＴ３００ＢにファイルＡに関するエントリを追加する。具体的には、ファイルサーバＢの差分同期制御プログラム２４２０は、ファイル名Ｔ３０１に「ファイルＡ」を格納し、ロックフラグＴ３０２に「Ｎ」を格納し、ロックユーザＴ３０３に「Ｎｕｌｌ」を格納したエントリを新規に追加する（ステップＳ１０１２）。その後、ファイルサーバＢの差分同期制御プログラム２４２０は、ファイルサーバＡにファイルＡの登録が完了したことを通知する。
【０１７６】
ファイルサーバＢからファイルＡの登録が完了したことの通知を受信したファイルサーバＡの差分同期制御プログラム２４２０は、図２４のステップＳ１０１３に処理を進め、差分ファイル管理テーブルＴ１００Ａを参照し、ファイル名Ｔ１０１が「ファイルＡ」であるエントリの差分ファイル保持フラグＴ１０２の値を判定して処理を分岐する。具体的には、ファイルサーバＡの差分同期制御プログラム２４２０は、差分ファイル保持フラグＴ１０２が「ファイルサーバＡ」である場合（ステップＳ１０１３：ファイルサーバＡ）は、ステップＳ１０１４に処理を進め、差分ファイル保持フラグＴ１０２が「ファイルサーバＡ」以外である場合（ステップＳ１０１３：ファイルサーバＡ以外）は、整合性確認処理を終了する。
【０１７７】
ステップＳ１０１３の判定において、差分ファイル保持フラグＴ１０２が「ファイルサーバＡ」である場合（ステップＳ１０１３：ファイルサーバＡ）に実行される処理を次に示す。ファイルサーバＡの差分同期制御プログラム２４２０は、ファイルロック管理テーブルＴ３００Ａを参照し、ファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックフラグＴ３０２が「Ｙ」であるか、「Ｎ」であるかを判定して処理を分岐する（ステップＳ１０１４）。具体的には、ファイルサーバＡの差分同期制御プログラム２４２０は、ロックフラグＴ３０２が「Ｙ」である場合（ステップＳ１０１４：Ｙ）はステップＳ１０１５へ処理を進め、ロックフラグＴ３０２が「Ｎ」である場合（ステップＳ１０１４：Ｎ）はステップＳ１０１６へ処理を進める。
【０１７８】
ステップＳ１０１４の判定において、ロックフラグＴ３０２が「Ｙ」である場合（ステップＳ１０１４：Ｙ）に実行される処理を次に示す。ファイルサーバＡの差分同期制御プログラム２４２０は、一定時間待機し（ステップＳ１０１５）、その後、ステップＳ１０１４へ処理を進める。
【０１７９】
ステップＳ１０１４の判定において、ロックフラグＴ３０２が「Ｎ」である場合（ステップＳ１０１４：Ｎ）に実行される処理を次に示す。ファイルサーバＡの差分同期制御プログラム２４２０は、ファイルロック管理テーブルＴ３００Ａにおけるファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックフラグＴ３０２を「Ｙ」に設定し、ロックユーザＴ３０３を「システム」に設定し、ファイルＡのロックを取得したことをファイルサーバＢに通知する（ステップＳ１０１６）。
【０１８０】
ファイルサーバＡからファイルＡのロックを取得したことの通知を受信したファイルサーバＢの差分同期制御プログラム２４２０は、ファイルロック管理テーブルＴ３００Ｂにおけるファイル名Ｔ３０１が「ファイルＡ」であるエントリのロックフラグＴ３０２を「Ｙ」に設定し、ロックユーザＴ３０３を「システム」に設定する（ステップＳ１０１７）。
【０１８１】
次に、ファイルサーバＢの差分同期制御プログラム２４２０は、差分ファイル管理テーブルＴ１００Ａにおけるファイル名Ｔ１０１が「ファイルＡ」であるエントリの差分ファイル保持フラグＴ１０２を「ファイルサーバＡ」に設定し、ファイルＡのロックを取得したことをファイルサーバＡに通知する（ステップＳ１０１８）。
【０１８２】
ファイルサーバＢからファイルＡのロックを取得したことの通知を受信したファイルサーバＡの差分同期制御プログラム２４２０は、ファイルＡを構成するファイルブロックのそれぞれに対して、ステップＳ１０１９〜ステップＳ１０２１の処理の中のファイルサーバＡ側の処理を行う。なお、ステップＳ１０１９〜ステップＳ１０２１の処理については、各ファイルブロックに対して、逐次に処理しても良いし、並列に処理しても良い。ここで、ファイルＡを構成するファイルブロックのうちの処理対象となる一つをステップＳ１０１９〜ステップＳ１０２１の説明において「対象ファイルブロック」という。
【０１８３】
ファイルサーバＡの差分同期制御プログラム２４２０は、差分ブロック管理テーブルＴ２００Ａにおける対象ファイルブロックに関するエントリの差分ブロック保持フラグＴ２０５の値を判定して処理を分岐する（ステップＳ１０１９）。具体的には、ファイルサーバＡの差分同期制御プログラム２４２０は、差分ブロック保持フラグＴ２０５が「ファイルサーバＡ」である場合（ステップＳ１０１９：ファイルサーバＡ）は、対象ファイルブロックに関するエントリの差分ＩＤＴ２０１の値をファイルサーバＢに通知する一方、差分ブロック保持フラグＴ２０５が「ファイルサーバＡ」以外である場合（ステップＳ１０１９：ファイルサーバＡ以外）はステップＳ１０２２へ処理を進める。
【０１８４】
ファイルサーバＡから対象ファイルブロックに関するエントリの差分ＩＤＴ２０１の値の通知を受けたファイルサーバＢの差分同期制御プログラム２４２０は、ステップＳ１０２０へ処理を進め、通知された差分ＩＤＴ２０１の値に基づいて、差分ブロック管理テーブルＴ２００Ｂにおける対象ファイルブロックに関するエントリを特定する。そして、ファイルサーバＢの差分同期制御プログラム２４２０は、差分ブロック管理テーブルＴ２００Ｂにおける対象ファイルブロックに関するエントリの差分ブロック保持フラグＴ２０５の値を判定して処理を分岐する（ステップＳ１０２０）。具体的には、ファイルサーバＢの差分同期制御プログラム２４２０は、差分ブロック保持フラグＴ２０５が「ファイルサーバＡ」である場合（ステップＳ１０２０：ファイルサーバＡ）は整合性の確認が完了したことをファイルサーバＡに通知する一方、「ファイルサーバＡ」以外である場合（ステップＳ１０２０：ファイルサーバＡ以外）はステップＳ１０２１へ処理を進める。
【０１８５】
ファイルサーバＢから整合性の確認が完了したことの通知を受信したファイルサーバＡの差分同期制御プログラム２４２０は、ステップＳ１０２２へ処理を進める。
【０１８６】
ステップＳ１０２０の判定において、差分ブロック保持フラグＴ２０５が「ファイルサーバＡ」以外である場合（ステップＳ１０２０：ファイルサーバＡ以外）に実行される処理を次に示す。ファイルサーバＢの差分同期制御プログラム２４２０は、差分ブロック管理テーブルＴ２００Ｂにおける対象ファイルブロックに関するエントリの差分ブロック保持フラグＴ２０５を「ファイルサーバＡ」に設定する（ステップＳ１０２１）。その後、ファイルサーバＢの差分同期制御プログラム２４２０は、整合性の確認が完了したことをファイルサーバＡに通知する。
【０１８７】
ファイルサーバＢから整合性の確認が完了したことの通知を受信したファイルサーバＡの差分同期制御プログラム２４２０は、ステップＳ１０２２へ処理を進める。
【０１８８】
ステップＳ１０２２において、ファイルサーバＡの差分同期制御プログラム２４２０は、ファイルＡを構成するファイルブロックのそれぞれについてステップＳ１０１９〜ステップＳ１０２１の処理が完了するまで待機し、完了した後、整合性確認処理を終了する。
【０１８９】
本実施例によれば、リモートコピーのペアであるファイルサーバＡ及びファイルサーバＢに対するＲＷアクセスのアクセス性能の低下を抑制した上で、ファイルサーバＡ及びファイルサーバＢのいずれに対してもＲＷアクセスが可能なシステム構成が可能となる。
【０１９０】
なお、本発明は、以上説明した実施例に限定されるものでなく、その趣旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【０１９１】
１０００  クライアント、２０００  ファイルサーバ、３０００  ディスクアレイ装置。
【図１】
2013250948.tif 000003
【図２】
2013250948.tif 000004
【図３】
2013250948.tif 000005
【図４】
2013250948.tif 000006
【図５】
2013250948.tif 000007
【図６】
2013250948.tif 000008
【図７】
2013250948.tif 000009
【図８】
2013250948.tif 000010
【図９】
2013250948.tif 000011
【図１０】
2013250948.tif 000012
【図１１】
2013250948.tif 000013
【図１２】
2013250948.tif 000014
【図１３】
2013250948.tif 000015
【図１４】
2013250948.tif 000016
【図１５】
2013250948.tif 000017
【図１６】
2013250948.tif 000018
【図１７】
2013250948.tif 000019
【図１８】
2013250948.tif 000020
【図１９】
2013250948.tif 000021
【図２０】
2013250948.tif 000022
【図２１】
2013250948.tif 000023
【図２２】
2013250948.tif 000024
【図２３】
2013250948.tif 000025
【図２４】
2013250948.tif 000026