(57)【要約】【課題】複数システム間のファイル複製におけるネットワーク転送、ディスクＩ／Ｏ、更新ブロック検出を最小限のブロックに限定することで、高速かつ柔軟なファイル複製を実現するファイル複製システムを得る。【解決手段】ディスク装置１０８に格納されるファイルを、データブロック及び連続する複数のデータブロックから構成されるセグメントである領域に分割し、分割した領域毎の更新有無が判定可能な更新判定情報を含むメタデータブロックを階層的に配置し、階層的に配置されたメタデータブロックを前記ファイルの大きさに応じて木構造でディスク装置１０８に格納するメタデータブロック管理手段１０６と、複数のコンピュータ間で前記木構造の情報ブロックに含まれる更新判定情報の比較を行って更新されたデータブロックを検出し、更新されたデータブロックのみを複製元から複製先へ転送するファイル複製制御手段１０７とを設けた。【選択図】図１
2007200029.tif 000002
【特許請求の範囲】
【請求項１】
第１のディスク装置に格納されるファイルを、データブロック及び連続する複数のデータブロックから構成されるセグメントである領域に分割し、分割した領域毎の更新有無が判定可能な更新判定情報を含む情報ブロックを階層的に配置し、階層的に配置された情報ブロックを前記ファイルの大きさに応じて木構造で第２のディスク装置に格納するメタデータブロック管理手段と、
複数のコンピュータ間で前記木構造の情報ブロックに含まれる更新判定情報の比較を行って更新されたデータブロックを検出し、更新されたデータブロックのみを複製元から複製先へ転送するファイル複製制御手段と
を備えたことを特徴とするファイル複製システム。
【請求項２】
前記メタデータブロック管理手段は、前記更新判定情報として、領域に対する最終更新日時を用い、単一のデータブロック又は連続する第１の所定数のデータブロックから構成されるセグメントである小領域を包含する、連続する前記第１の所定数より大きい第２の所定数のデータブロックから構成されるセグメントである大領域の最終更新日時を前記小領域の最終更新日時の最大値として設定し、
前記ファイル複製制御手段は、最終更新日時が増加した際に更新があったと判定する
ことを特徴とする請求項１記載のファイル複製システム。
【請求項３】
前記メタデータブロック管理手段は、前記更新判定情報として、ファイル更新の都度増加する世代番号を用い、単一のデータブロック又は連続する第１の所定数のデータブロックから構成されるセグメントである小領域を包含する、連続する前記第１の所定数より大きい第２の所定数のデータブロックから構成されるセグメントである大領域の世代番号を前記小領域の世代番号の最大値として設定し、
前記ファイル複製制御手段は、世代番号が増加した際に更新があったと判定する
ことを特徴とする請求項１記載のファイル複製システム。
【請求項４】
前記メタデータブロック管理手段は、前記更新判定情報として、領域内のデータに対するチェックサムを用い、
前記ファイル複製制御手段は、チェックサムが一致しない場合に更新があったと判定する
ことを特徴とする請求項１記載のファイル複製システム。
【請求項５】
前記ファイル複製制御手段は、第１のコンピュータにおいて、第２のコンピュータから送付された更新判定情報に基づいてファイルを構成する領域の更新有無を判定し、更新が検出された場合に前記領域を構成する小領域の更新判定情報を前記第２のコンピュータに送付する
ことを特徴とする請求項１から請求項４までのいずれかに記載のファイル複製システム。
【請求項６】
前記メタデータブロック管理手段は、ファイルの一部に未書き込み領域が含まれる場合に、前記未書き込み領域に対応する更新判定情報の一部を格納しない
ことを特徴とする請求項１から請求項４までのいずれかに記載のファイル複製システム。
【請求項７】
前記第１及び第２のディスク装置は、同じディスク装置である
ことを特徴とする請求項１から請求項４までのいずれかに記載のファイル複製システム。
【請求項８】
前記第１及び第２のディスク装置は、異なるディスク装置である
ことを特徴とする請求項１から請求項４までのいずれかに記載のファイル複製システム。
【請求項９】
前記メタデータブロック管理手段は、更新判定情報であることを示す文字列、ファイルを識別する名称、および階層レベルを含んだ名前によりアクセスされるファイルとして各階層レベルの更新判定情報を格納する
ことを特徴とする請求項１から請求項４までのいずれかに記載のファイル複製システム。
【請求項１０】
前記メタデータブロック管理手段は、ファイルの先頭に近い部分をより大きな領域に分割し、ファイルの末尾に近い部分をより小さな領域に分割して更新判定情報を格納する
ことを特徴とする請求項１から請求項４までのいずれかに記載のファイル複製システム。
【請求項１１】
前記メタデータブロック管理手段は、
ファイル書き込みの結果を直ちに更新判定情報の木構造に反映せず、更新判定情報の木構造への反映に必要な情報を第３のディスク装置に書き込むファイル更新ログ追加手段と、
ファイル書き込みと独立して実行され、同一領域への複数回の更新ログ情報をまとめるファイル更新ログマージ手段と、
ファイル更新ログ情報を更新判定情報の木構造に反映するファイル更新ログ反映手段とを含む
ことを特徴とする請求項１から請求項４までのいずれかに記載のファイル複製システム。
【請求項１２】
メタデータブロック管理手段は、
ファイル書き込みの結果を直ちにチェックサムの木構造に反映せず、ファイルのデータブロック毎の更新フラグを設定する手段と、
ファイル書き込みと独立して実行され、更新フラグが設定されているデータブロックに対してチェックサムの木構造の更新を行う手段とを含む
ことを特徴とする請求項４記載のファイル複製システム。
【請求項１３】
単一のデータブロック又は連続する第１の所定数のデータブロックから構成されるセグメントである小領域を包含する、連続する前記第１の所定数より大きい第２の所定数のデータブロックから構成されるセグメントである大領域のチェックサムを、前記小領域毎のチェックサムをオフセット順に連結したバイト列に対するチェックサムとする
ことを特徴とする請求項４記載のファイル複製システム。
【請求項１４】
更新される、単一のデータブロック又は連続する第１の所定数のデータブロックから構成されるセグメントである小領域を包含する、連続する前記第１の所定数より大きい第２の所定数のデータブロックから構成されるセグメントである大領域の更新後のチェックサムが、前記小領域および前記大領域の更新前のチェックサムと前記小領域の更新後のチェックサムから導出可能な線形関数を用いる
ことを特徴とする請求項４記載のファイル複製システム。
【請求項１５】
既存のファイルデータからチェックサム木構造を生成する手段を備える
ことを特徴とする請求項４記載のファイル複製システム。
【請求項１６】
前記ファイル複製制御手段は、複製元に複製先の全てのブロックより古いブロックが存在しない場合にデータ転送を実行し、それ以外の場合にデータ転送を行わない
ことを特徴とする請求項２又は３記載のファイル複製システム。
【請求項１７】
前記メタデータブロック管理手段は、ファイルに付与された番号に基づいてファイルシステム内の全ファイルを階層的に群に分け、ファイル群に関する更新判定情報を木構造で格納し、
前記ファイル複製制御手段は、指定したファイルまたはファイルシステム全体の複製を行う
ことを特徴とする請求項１から請求項４までのいずれかに記載のファイル複製システム。
【請求項１８】
前記メタデータブロック管理手段は、ファイルのディレクトリ名に基づいてファイルシステム内の全ファイルを階層的に群に分け、ファイル群に関する更新判定情報を木構造で格納し、
前記ファイル複製制御手段は、指定したファイルまたは指定したディレクトリ以下の全ファイルの複製を行う
ことを特徴とする請求項１から請求項４までのいずれかに記載のファイル複製システム。
【請求項１９】
コンピュータと第１のディスク装置を接続するバスに接続されたファイル複製補助装置を備えるファイル複製システムであって、
前記ファイル複製補助装置は、
前記バス上を送付される前記第１のディスク装置への書き込みコマンドを監視するバス監視手段と、
前記書き込みコマンドに基づいて前記第１のディスク装置全体を階層的に分割した領域毎の更新判定情報を第２のディスク装置に木構造で格納するメタデータブロック管理手段と、
格納したメタデータブロックを読み出すメタデータブロック読出手段とを含む
ことを特徴とするファイル複製システム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、複数システム間のファイル複製におけるネットワーク転送、ディスクＩ／Ｏ、更新ブロック検出を最小限のブロックに限定すると共に、管理者の介在を必要とする情報への依存を排することで、高速かつ柔軟なファイル複製を実現するファイル複製システムに関するものである。
【背景技術】
【０００２】
コンピュータが扱うデータ規模の増大に伴い、不測の事態に備えたデータ複製が重要となっている。大量のデータを頻繁に複製するには複製の高速化が必要であり、ファイルより小さなブロックを単位とすることでこれを実現しようとする複製方式が提案されている。これはファイルの更新においては全体が置き換わるようなケースは稀であり、ログにおける末尾への追加やデータベースにおける固定長ページ単位での更新がほとんどであるという観察に基づき、更新されていないブロックを毎回複製しないようにすることで高速化を図るものである。従来のファイル複製方式では、ファイル複製の際にまずブロック毎の検算値（チェックサム、ハッシュ値）を計算し、複製元と複製先の間で各ブロックの検算値のみの転送・比較を行う。その結果、検算値が一致したブロックは更新のないブロックとしてデータ転送対象から除外し、残ったブロックのデータのみを複製元から複製先へ転送する（例えば、特許文献１参照）。また、別の従来方式では、ファイル更新の際、元のブロックを上書きするのではなく別のブロックに書き込むファイルシステムを利用する。すなわち、複製元において過去のある時点でのブロックアドレスをスナップショットとして保存しておき、ファイル複製時のブロックアドレスと比較することで更新のあったブロックを検出し、複製先に転送するものである（例えば、特許文献２参照）。
【０００３】
【特許文献１】特開２００５−１００００７号公報（第１頁、図２）
【特許文献２】特開２００４−０３８９２８号公報（第３４頁、図７）
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上述したような従来のファイル複製方式では、ファイル複製の実行時に検算値を計算するためファイル全体を更新のないブロックも含めて読み出さなければならず、それに伴うディスクＩ／Ｏコストにより高速化が阻害されるという問題点があった。また、非常に大きなファイルにおいてはブロック数も多くなるため、全ブロックの検算値を転送するネットワークコストも性能低下要因となる。
【０００５】
また、上述したような別の従来方式では、複製元で予め作成しておいたスナップショットが更新検出の基準となるが、スナップショットは通常１０個程度までしか作成できず、人手で管理（削除）する作業を要するため柔軟性に欠ける。例えば、耐障害性を高めるため複製先を複数にした場合、全ての複製先への複製が完了するまでは複製元のスナップショットを削除することができない。ファイル複製に要する時間とデータ消失リスクのトレードオフを考慮して、高頻度で複製を行う少数の複製先と低頻度で複製を行う多数の複製先を用いる場合、さらに管理は煩雑になる。また、障害時に任意の複製先を新たな複製元として使用できるようにするためには、複製先においてもスナップショットを適切に管理する必要がある。
【０００６】
この発明は、上述のような課題を解決するためになされたもので、その目的は、複数システム間のファイル複製におけるネットワーク転送、ディスクＩ／Ｏ、更新ブロック検出を最小限のブロックに限定すると共に、管理者の介在を必要とする情報への依存を排することで、高速かつ柔軟なファイル複製を実現することができるファイル複製システムを得るものである。
【課題を解決するための手段】
【０００７】
この発明に係るファイル複製システムは、第１のディスク装置に格納されるファイルを、データブロック及び連続する複数のデータブロックから構成されるセグメントである領域に分割し、分割した領域毎の更新有無が判定可能な更新判定情報を含む情報ブロックを階層的に配置し、階層的に配置された情報ブロックを前記ファイルの大きさに応じて木構造で第２のディスク装置に格納するメタデータブロック管理手段と、複数のコンピュータ間で前記木構造の情報ブロックに含まれる更新判定情報の比較を行って更新されたデータブロックを検出し、更新されたデータブロックのみを複製元から複製先へ転送するファイル複製制御手段とを設けたものである。
【発明の効果】
【０００８】
この発明に係るファイル複製システムは、複数システム間のファイル複製におけるネットワーク転送、ディスクＩ／Ｏ、更新ブロック検出を最小限のブロックに限定すると共に、管理者の介在を必要とする情報への依存を排することで、高速かつ柔軟なファイル複製を実現することができるという効果を奏する。
【発明を実施するための最良の形態】
【０００９】
実施の形態１．
この発明の実施の形態１に係るファイル複製システムについて図１から図３３までを参照しながら説明する。図１は、この発明の実施の形態１に係るファイル複製システムの構成を示す図である。なお、以降では、各図中、同一符号は同一又は相当部分を示す。
【００１０】
図１において、この実施の形態１に係るファイル複製システムは、ネットワーク３００を介して、複製元システム１００と、複製先システム２００とが設けられている。
【００１１】
複製元システム１００と複製先システム２００は、それぞれコンピュータシステムであり、例えばＩｎｔｅｌ社Ｘｅｏｎプロセッサ、ＤＲＡＭ、ＳＣＳＩインタフェースを備える固定ディスク装置、ギガビットイーサネット（登録商標）インタフェース、およびそれらを接続するＰＣＩ−Ｘバスなどのハードウェアと、ＧＮＵ／Ｌｉｎｕｘオペレーティングシステムソフトウェアにより実現することができる。
【００１２】
複製元システム１００には、ファイルシステム管理手段１０５と、メタデータブロック管理手段１０６と、複製元ファイル複製制御手段１０７と、ディスク装置１０８とが設けられている。同様に、複製先システム２００には、ファイルシステム管理手段２０５と、メタデータブロック管理手段２０６と、複製元ファイル複製制御手段２０７と、ディスク装置２０８とが設けられている。
【００１３】
複製元システム１００は、ファイルをディスク装置１０８に格納する際、ファイルデータブロック（データブロック）１０２Ａ〜Ｄと共に、ファイル管理情報１０１、ブロックメタデータブロック（情報ブロック）１０３Ａ〜Ｂ、およびセグメントメタデータブロック１０４（情報ブロック）Ａを併せて格納する。ファイルデータブロック１０２は、ファイルの内容を固定長に分割して格納するためのディスク装置１０８上の領域であり、ファイルのサイズに応じて必要な数を割り当てて使用する。
【００１４】
ファイル管理情報１０１は、複数のファイルデータブロック１０２のディスク装置１０８上のアドレスを管理し、ファイルの任意の部分へのランダムアクセスを可能にする。また、ファイル管理情報１０１は、ファイルの更新日時や所有ユーザなど、メタデータと呼ばれる属性情報も格納する。ディスク装置１０８上の記憶領域の管理や、ファイル管理情報１０１を介したファイルアクセスの機能は、一般にオペレーティングシステムの一部であるファイルシステム管理手段１０５により提供される。
【００１５】
ファイルシステム管理手段１０５は、例えばＧＮＵ／Ｌｉｎｕｘオペレーティングシステムが備えるｅｘｔ３ファイルシステムなど、公知の技術により実現することができる。なお、ＧＮＵ／Ｌｉｎｕｘを含むＵｎｉｘ（登録商標）系のオペレーティングシステムにおいては、ファイル管理情報１０１はｉノードと称される。
【００１６】
ブロックメタデータブロック１０３Ａ〜Ｂおよびセグメントメタデータブロック１０４Ａは、公知のファイルシステムには存在しないものであり、メタデータブロック管理手段１０６によりディスク装置１０８上に格納される。メタデータブロック管理手段１０６は、ファイルシステム管理手段１０５によりファイル更新の都度呼び出される。
【００１７】
また、メタデータブロック管理手段１０６は、ファイルシステム管理手段１０５の機能の一部を利用してディスク装置１０８上の記憶領域の確保や解放を行う。ファイル管理情報１０１は、ファイルデータブロック１０２Ａ〜Ｄのディスク装置１０８上のアドレスと共に、セグメントメタデータブロック１０４Ａのアドレスも格納しており、さらにセグメントメタデータブロック１０４Ａには、ブロックメタデータブロック１０３Ａ〜Ｂのアドレスが格納されている。
【００１８】
複製先システム２００においても、複製元システム１００と同様にしてファイルをディスク装置２０８に格納する。ファイル管理情報２０１、ファイルデータブロック２０２Ａ〜Ｄ、ブロックメタデータブロック２０３Ａ〜Ｂ、およびセグメントメタデータブロック２０４Ａは、複製元システム１００のファイル管理情報１０１、ファイルデータブロック１０２Ａ〜Ｄ、ブロックメタデータブロック１０３Ａ〜Ｂ、およびセグメントメタデータブロック１０４Ａにそれぞれ対応しており、ある時点で複製元システム１００から複製した際の内容を持っている。
【００１９】
ファイルシステム管理手段２０５は、ファイルシステム管理手段１０５と同一もしくは同等の動作を行う。メタデータブロック管理手段２０６は、メタデータブロック管理手段１０６と同一である。
【００２０】
複製元ファイル複製制御手段１０７と複製先ファイル複製制御手段２０７は、複製元システム１００から複製先システム２００へのファイル複製において、ネットワーク３００を介して互いに通信しながら、それぞれ複製元システム１００と複製先システム２００の制御を行う。
【００２１】
図２は、この発明の実施の形態１に係るファイル複製システムのディスク装置の別の構成を示す図である。
【００２２】
図２は、図１と異なるサイズのファイルに対するファイルデータブロック、ブロックメタデータブロック、およびセグメントメタデータブロックの構成を示す。セグメントメタデータブロックとブロックメタデータブロックは、ファイルのサイズに応じて高さの変わる木構造を構成する。この木構造においては、一定数（図２では２個）のファイルデータブロック（１０２Ａ〜Ｇ）毎に階層レベル０となるブロックメタデータブロック１０３Ａ〜Ｄを配置する。また、一定数（図２では２個）のブロックメタデータブロック（１０３Ａ〜Ｄ）毎に階層レベル１となるセグメントメタデータブロック１０４Ｂ〜Ｃを配置する。ここで、『セグメント』は、連続する複数のブロックを意味する。
【００２３】
さらに、レベル１の一定数（図２では２個）のセグメントメタデータブロック（１０４Ｂ〜Ｃ）毎に階層レベル２となるセグメントメタデータブロック１０４Ａを配置する。レベル２において必要なセグメントメタデータブロックの数が１となるため、このファイルに対するブロックメタデータブロックおよびセグメントメタデータブロックの木構造に必要な高さは３となる。
【００２４】
ファイル管理情報（ｉノード）１０１には、木構造の最も高いレベルにある単一のセグメントメタデータブロック、すなわちセグメントメタデータブロック１０４Ａのディスク装置１０８上のアドレスを格納する。このセグメントメタデータブロック１０４Ａを『ルートメタデータブロック』と呼ぶ。高さ１の木構造、すなわち単一のブロックメタデータブロックで十分なサイズのファイルに対しては、ルートメタデータブロックは当該ブロックメタデータブロックとなる。
【００２５】
各レベル間のセグメント／ブロックメタデータブロック（１０４Ａ〜Ｃ、１０３Ａ〜Ｄ）の対応付けは、上位セグメントメタデータブロックに下位セグメント／ブロックメタデータブロックのディスク装置１０８上のアドレスを格納することにより行う。一方、ブロックメタデータブロックとファイルデータブロックの間はファイル中のオフセットにより間接的に対応付けられる。例えば、ブロックメタデータブロック１０３Ａは、木構造中の位置からファイルの先頭および２番目のオフセットのファイルデータブロック、すなわちファイルデータブロック１０２Ａおよび１０２Ｂに対応することが定まる。セグメント／ブロックメタデータブロックとファイルデータブロックの間で明示的な参照を行わないことにより、両者のディスク装置１０８上の配置の自由度を高めることが可能になる。
【００２６】
図３は、この発明の実施の形態１に係るファイル複製システムのディスク装置内のファイル管理情報の構成を示す図である。
【００２７】
図３は、ファイル管理情報（ｉノード）１０１の詳細を示す。ファイル管理情報（ｉノード）１０１は、ファイルサイズ１０１１、ファイルメタデータ１０１２、ルートメタデータブロックアドレス１０１３、およびデータブロックアドレスリスト１０１４を含む。ファイル管理情報（ｉノード）１０１は、この他にファイル作成日時や所有ユーザ、アクセス権に関する情報などを含んでいても良い。
【００２８】
ルートメタデータブロックアドレス１０１３は、ルートメタデータブロックとなるセグメントメタデータブロックまたはブロックメタデータブロックのディスク装置１０８上のアドレスを格納する。ルートメタデータブロックは、図１や図２においてはセグメントメタデータブロック１０４Ａである。
【００２９】
また、データブロックアドレスリスト１０１４には、複数のファイルデータブロックのアドレスを格納するが、例えば上記のｅｘｔ３ファイルシステムのようにファイルデータブロックアドレスの配列、間接ブロック（ファイルデータブロックアドレスの配列を格納したブロック）のアドレス、二重間接ブロック（ファイルデータブロックアドレスの配列を格納した複数ブロックのアドレス配列を格納したブロック）のアドレス、および三重間接ブロックのアドレスなどにより実現することができる。
ファイルメタデータ１０１２には、ファイルに対する更新の有無を判定できる任意の情報を格納することができるが、ここではファイルの最終更新日時、ファイルを更新する都度増加する世代番号、およびファイルデータのチェックサム（例えば、公知のＭＤ５やＳＨＡ−１など）を用いるものとする。
【００３０】
図４は、この発明の実施の形態１に係るファイル複製システムのディスク装置内のブロックメタデータブロックの構成を示す図である。
【００３１】
図４は、ブロックメタデータブロック１０３（１０３Ａ〜Ｄ）の詳細を示す。ブロックメタデータブロック１０３は、階層レベル１０３１、有効エントリ数１０３２、ブロックメタデータ（０）〜（ｎ−１）（１０３３Ａ〜Ｚ）からなる。階層レベル１０３１には、常に値０が格納される。有効エントリ数１０３２には、有効な値が設定されたブロックメタデータのエントリ数が格納され、ブロックメタデータ（０）〜ブロックメタデータ（有効エントリ数−１）が有効であることを表す。有効エントリ数＝０のブロックメタデータブロックは作成されず、有効エントリ数は１〜ｎまでの値を取る。ｎはブロックメタデータブロック１０３の領域サイズが許す範囲内で最大の値を用いる。ブロックメタデータの各エントリ（１０３３Ａ〜Ｚ）のサイズによっては、ブロックメタデータブロック１０３の末尾には空領域が存在することもある。
【００３２】
ブロックメタデータの各エントリ（１０３３Ａ〜Ｚ）には、ファイルデータブロックに対する更新の有無を判定する情報として、ファイルメタデータ１０１２に対応するものを格納する。すなわち、ファイルデータブロックの最終更新日時、ファイルデータブロックの世代番号、およびファイルデータブロックのチェックサムである。ブロックメタデータ（０）（１０３３Ａ）に対応するファイルデータブロックはブロックメタデータブロック１０３の木構造中の位置に応じて定まり、ブロックメタデータ（１）〜（有効エントリ数−１）（１０３３Ｂ〜）にはファイル中のオフセットが当該ファイルデータブロックに引き続くファイルデータブロックが対応する。例えば、図２ではｎ＝２であり、ブロックメタデータブロック１０３Ａのブロックメタデータ（０）および（１）にはファイルデータブロック１０２Ａおよび１０２Ｂが、ブロックメタデータブロック１０３Ｂのブロックメタデータ（０）および（１）にはファイルデータブロック１０２Ｃおよび１０２Ｄが、それぞれ対応する。
【００３３】
図５は、この発明の実施の形態１に係るファイル複製システムのディスク装置内のセグメントメタデータブロックの構成を示す図である。
【００３４】
図５は、セグメントメタデータブロック１０４（１０４Ａ〜Ｃ）の詳細を示す。セグメントメタデータブロック１０４は、階層レベル１０４１、有効エントリ数１０４２、セグメントメタデータ（０）〜（ｍ−１）（１０４３Ａ〜Ｚ）、下位メタデータブロックアドレス（０）〜（ｍ−１）（１０４４Ａ〜Ｚ）からなる。
【００３５】
階層レベル１０４１には、当該セグメントメタデータブロックが配置される木構造中の階層レベルの値（≧１）が格納される。有効エントリ数１０４２には、有効な値が設定されたセグメントメタデータおよび下位メタデータブロックアドレスのエントリ数が格納され、セグメントメタデータ（０）〜セグメントメタデータ（有効エントリ数−１）および下位メタデータブロックアドレス（０）〜下位メタデータブロックアドレス（有効エントリ数−１）が有効であることを表す。有効エントリ数＝０のセグメントメタデータブロックは作成されず、有効エントリ数は１〜ｍまでの値を取る。ｍはセグメントメタデータブロック１０４の領域サイズが許す範囲内で最大の値を用いる。
【００３６】
セグメントメタデータの各エントリ（１０４３Ａ〜Ｚ）は、セグメントメタデータブロック１０４の先頭から末尾に向かって順に使用され、下位メタデータブロックアドレスの各エントリ（１０４４Ａ〜Ｚ）は、逆にセグメントメタデータブロック１０４の末尾から先頭に向かって順に使用される。セグメントメタデータ（ｍ−１）（１０４３Ｚ）と下位メタデータブロックアドレス（ｍ−１）（１０４４Ｚ）の間には空領域が存在することもある。これにより、下位メタデータブロックアドレスを参照しない場合にはセグメントメタデータブロック１０４とブロックメタデータブロック１０３の構造の違いを区別する必要がなくなる。一方、階層レベル１０３１または１０４１の値を参照すれば、値が０であればブロックメタデータブロック１０３、０でなければセグメントメタデータブロック１０４、と再び両者を識別することが可能である。以下、単にメタデータブロックと記した場合は、セグメントメタデータブロックおよびブロックメタデータブロックを総称するものとする。
【００３７】
セグメントメタデータの各エントリ（１０４３Ａ〜Ｚ）には、セグメントに対する更新の有無を判定する情報として、ファイルメタデータ１０１２に対応するものを格納する。すなわち、セグメントの最終更新日時、セグメントの世代番号、およびセグメントのチェックサムである。セグメントメタデータ（０）（１０４３Ａ）に対応するセグメントはセグメントメタデータブロック１０４の木構造中の位置に応じて定まり、セグメントメタデータ（１）〜（有効エントリ数−１）（１０４３Ｂ〜）にはファイル中のオフセットが当該セグメントに引き続くセグメントが対応する。例えば、図２では、ｎ＝２、ｍ＝２であり、セグメントメタデータブロック１０４Ｂのセグメントメタデータ（０）および（１）にはファイルデータブロック１０２Ａ〜Ｂからなるセグメントおよびファイルデータブロック１０２Ｃ〜Ｄからなるセグメントが、セグメントメタデータブロック１０４Ａのセグメントメタデータ（０）にはファイルデータブロック１０２Ａ〜Ｄからなるセグメントが、それぞれ対応する。
【００３８】
下位メタデータブロックアドレスの各エントリ（１０４４Ａ〜Ｚ）には、木構造中で当該セグメントメタデータブロック１０４の下位に位置する各メタデータブロック（セグメント／ブロックメタデータブロック）のディスク装置１０８上のアドレスを格納する。例えば、図２では、ｍ＝２であり、セグメントメタデータブロック１０４Ｂの下位メタデータブロックアドレス（０）および（１）にはブロックメタデータブロック１０３Ａおよび１０３Ｂのアドレスが、セグメントメタデータブロック１０４Ａの下位メタデータブロックアドレス（０）および（１）にはセグメントメタデータブロック１０４Ｂおよび１０４Ｃのアドレスが、それぞれ格納される。
【００３９】
次に、セグメント／ブロックメタデータブロックにより構成される木構造を特徴付けるパラメータについて一般的に成り立つ関係を説明する。ファイルデータブロックのサイズをＢバイト、ブロックメタデータブロックの最大エントリ数をｎ、セグメントメタデータブロックの最大エントリ数をｍとすると、Ｓバイトのファイルに必要な木構造の高さＨは、式（１）で表される。
【００４０】
【数１】
2007200029.tif 000003
【００４１】
ただし、
【数２】
2007200029.tif 000004
はｘより小さくない最小の整数を表す（小数点以下の切り上げ）。ブロックメタデータブロックの階層レベルｈ＝０であり、ルートメタデータブロックの階層レベルｈ＝Ｈ（Ｓ）−１である。また、Ｓバイトのファイルに必要なファイルデータブロック数Ｉは、式（２）で、
【００４２】
【数３】
2007200029.tif 000005
【００４３】
階層レベルｈに位置するメタデータブロック数Ｋｈは、式（３）で表される。
【００４４】
【数４】
2007200029.tif 000006
【００４５】
各ファイルデータブロックにファイル中のオフセット順にブロック番号ｉ（０≦ｉ＜Ｉ（Ｓ））を付与すると、オフセットｓバイトのデータを含むファイルデータブロックのブロック番号ｉは、式（４）で与えられる。
【００４６】
【数５】
2007200029.tif 000007
【００４７】
ただし、
【数６】
2007200029.tif 000008
はｘを越えない最大の整数を表す（小数点以下の切り捨て）。同様に、階層レベルｈのメタデータブロックにファイル中のオフセット順にブロック番号ｋｈ（０≦ｋｈ＜Ｋｈ（Ｓ））を付与すると、オフセットｓバイトの位置に対応する階層レベルｈのメタデータブロックのブロック番号ｋｈは、式（５）で与えられる。
【００４８】
【数７】
2007200029.tif 000009
【００４９】
また、階層レベルｈのメタデータブロックにおいて、セグメント／ブロックメタデータの各エントリに対応する最大セグメントサイズＧｈは、式（６）で表される。
【００５０】
【数８】
2007200029.tif 000010
【００５１】
ただし、ブロックメタデータブロックのブロックメタデータエントリに対応するファイルデータブロックを単一ファイルデータブロックからなるセグメントとみなしている。ファイルの末尾ではセグメントの一部しか使用されないため、実際のセグメントサイズｇｈは、最大セグメントサイズＧｈより小さくなることもある。階層レベルｈのメタデータブロックにおいて、オフセットｓバイトの位置のセグメント／ブロックメタデータエントリに対応するセグメントサイズｇｈは、式（７）の通りとなる。
【００５２】
【数９】
2007200029.tif 000011
【００５３】
さらに、階層レベルｈのメタデータブロックｋｈにおいて、オフセットｓバイトの位置に対応するセグメント／ブロックメタデータおよび下位メタデータブロックアドレスのエントリ番号ｊｈは、式（８）で与えられる。
【００５４】
【数１０】
2007200029.tif 000012
【００５５】
ただし、ｘ  ｍｏｄ  ｎは、ｘをｎで割った剰余を表す。
【００５６】
次に、メタデータブロック管理手段１０６の動作について説明する。図６は、この発明の実施の形態１に係るファイル複製システムのメタデータブロック管理手段の動作を説明するための図である。
【００５７】
この図６は、ファイルへの書き込みに伴ってファイルサイズが拡張される際に、メタデータブロック管理手段１０６によりメタデータブロック木構造に加えられる変更を示す。ここでは、ｎ＝４、ｍ＝３としている。
【００５８】
書き込み前のファイルサイズを６・Ｂとすると、ブロック番号ｉ＝０〜５の６つのファイルデータブロック（斜線部分）が存在し、メタデータブロックが構成する木構造の高さは２となる（Ｈ（６・Ｂ）＝２）。書き込み前の木構造のレベル０の位置には２つ（Ｋ０（６・Ｂ）＝２）のブロックメタデータブロックが存在し、レベル１の位置にはルートメタデータブロックとなるセグメントメタデータブロックが１つ（Ｋ１（６・Ｂ）＝１）存在する。ｋ０＝０のブロックメタデータブロックのエントリは全て使用され、エントリ番号ｊ０＝０，１，２，３にはファイルデータブロックｉ＝０，１，２，３のメタデータがそれぞれ格納される。また、ｋ０＝１のブロックメタデータブロックのエントリは先頭の２つのみ使用され、エントリ番号ｊ０＝０，１にファイルデータブロックｉ＝４，５のメタデータがそれぞれ格納される。ｋ１＝０のセグメントメタデータブロックのエントリは先頭の２つのみ使用され、エントリ番号ｊ１＝０，１の下位メタデータブロックアドレスにブロックメタデータブロックｋ０＝０，１のアドレスがそれぞれ格納される。また、エントリ番号ｊ１＝０，１のセグメントメタデータには、ファイルデータブロックｉ＝０〜３，４〜５に対応するセグメントのメタデータがそれぞれ格納される。
【００５９】
ファイルへの書き込みによりファイルサイズが変化しない場合、すなわちファイルデータブロックｉ＝０〜５のいずれかに対する書き込みの際は、メタデータブロックの木構造は変化せず、ファイル／セグメント／ブロックメタデータのみが更新される。例えば、ブロック番号ｉ＝４のファイルデータブロックへの書き込みに対しては、ブロックメタデータブロックｋ０（４・Ｂ）＝１のブロックメタデータ（ｊ０（４・Ｂ）＝０）、セグメントメタデータブロックｋ１（４・Ｂ）＝０のセグメントメタデータ（ｊ１（４・Ｂ）＝１）、およびファイルメタデータが更新対象となる。
【００６０】
メタデータの内、最終更新日時と世代番号については各メタデータエントリに同一の値を設定する。すなわち、最終更新日時には現在の日時を、世代番号にはファイルメタデータの世代番号に１を加えた値をそれぞれ設定する。これらは書き込まれるデータ自体には影響されないデータ非依存メタデータであり、階層レベル間で次の関係が成り立つ。
【００６１】
データ非依存セグメントメタデータ（ｊ）
＝下位メタデータブロックアドレス（ｊ）が指すメタデータブロックのデータ非依存セグメント／ブロックメタデータ（０）〜（有効エントリ数−１）の最大値
【００６２】
同様に、次の関係も成り立つ。
【００６３】
データ非依存ファイルメタデータ
＝ルートメタデータブロックのデータ非依存セグメント／ブロックメタデータ（０）〜（有効エントリ数−１）の最大値
【００６４】
一方、データ依存メタデータであるチェックサムについては、階層レベル間で一定の関係が成り立つよう、次のように定義する。
【００６５】
セグメントメタデータ（ｊ）のチェックサム部
＝下位メタデータブロックアドレス（ｊ）が指すメタデータブロックのセグメント／ブロックメタデータ（０）〜（有効エントリ数−１）のチェックサム部に対して求めたチェックサム値
【００６６】
ファイルメタデータのチェックサム部
＝ルートメタデータブロックのセグメント／ブロックメタデータ（０）〜（有効エントリ数−１）のチェックサム部に対して求めたチェックサム値
【００６７】
これらの定義は、ファイル／セグメントデータに対するチェックサム関数を階層レベル毎に変えることに相当するが、階層レベル間でチェックサム値の比較を行うことはないため、ファイル／セグメントの更新の有無を判定するには十分である。これにより、階層レベルの下位から上位に向かって段階的にチェックサムを計算することが可能になる。ファイル／セグメントデータから直接チェックサムを計算する場合、１つのファイルデータブロックを更新する都度ファイル全体を読み出す必要が生じ、極めて非効率となる。
【００６８】
次に、ファイルへの書き込みがブロック番号ｉ＝１８のファイルデータブロックに対して行われるとすると、ファイルサイズは１９・Ｂに増加し、木構造はＨ（１９・Ｂ）＝３の高さが必要になる。そこで、メタデータブロック管理手段１０６は、元のルートメタデータブロック（ｋ１＝０）の上位（階層レベル＝２）にセグメントメタデータブロック（ｋ２＝０）を割り当てて新たなルートメタデータブロックとし、元のルートメタデータブロック（ｋ１＝０）のアドレスを新たなルートメタデータブロック（ｋ２＝０）の下位メタデータブロックアドレス（０）に格納する。また、元のルートメタデータブロック（ｋ１＝０）のセグメントメタデータ（０）〜（１）の最終更新日時と世代番号の最大値を新たなルートメタデータブロック（ｋ１＝０）のセグメントメタデータ（０）に設定する。
【００６９】
また、ブロック番号ｉ＝１８に対応するエントリは、ブロックメタデータブロックｋ０（１８・Ｂ）＝４のブロックメタデータ（ｊ０（１８・Ｂ）＝２）、セグメントメタデータブロックｋ１（１８・Ｂ）＝１のセグメントメタデータ（ｊ１（１８・Ｂ）＝１）、およびセグメントメタデータブロックｋ２（１８・Ｂ）＝１のセグメントメタデータ（ｊ２（１８・Ｂ）＝１）であり、存在しないｋ０＝４とｋ１＝１のメタデータブロックを割り当てると共に、下位メタデータブロックアドレスのエントリを設定して新たな木構造を構成する。
【００７０】
ここでは、ブロック番号６から１７のファイルデータブロックに対する書き込みは行われず、ファイルデータブロックが物理的に割り当てられないホールが生じるものとしている。例えば、ｅｘｔ３など、一般的なファイルシステムはホールの存在を許しており、ホール領域からの読み込みを行った場合は当該領域がバイト値０で埋め尽くされているものとして扱う。メタデータブロック管理手段１０６も同様に、対応するファイルデータブロックやセグメントがホールのみとなるメタデータブロック（ｋ０＝２および３）の割り当ては行わない。また、階層レベル上位の対応する下位メタデータブロックアドレス（セグメントメタデータブロックｋ１＝０のエントリｊ１＝２およびセグメントメタデータブロックｋ１＝１のエントリｊ１＝０）には無効値（アドレス０）を格納する。これら未割り当てメタデータブロックは、ホールへの書き込みの際にメタデータブロック管理手段１０６により必要に応じて割り当てられる。
【００７１】
一方、一部にホールを含むメタデータブロック（ｋ０＝１，４およびｋ１＝０，１）においてはホールに対応するエントリ（メタデータブロックｋ０＝１のエントリ２，３、メタデータブロックｋ０＝４のエントリ０，１、メタデータブロックｋ１＝０のエントリ２、メタデータブロックｋ１＝１のエントリ０）を含むことになる。ホールはそれを生じさせるファイルデータブロック（ｉ＝１８）への書き込みと同時に、当該領域（ｉ＝６〜１７）にバイト値０が書き込まれたものとして扱う。従って、これらのエントリに対応するセグメント／ブロックメタデータの内、データ非依存の最終更新日時および世代番号については、書き込みブロック（ｉ＝１８）に対応するエントリと同様、現在の日時およびファイル世代番号＋１をそれぞれ設定する。一方、データ依存メタデータすなわちチェックサムについては、バイト値０で埋められているファイルデータブロックやセグメントと同じ値になるようにする。これらのチェックサム値は予め計算しておくことができる。階層レベル上位へのチェックサム値の伝播は通常の書き込みと同様に行う。ホールに対応するエントリはホールの先頭と末尾の両端に生じる可能性があり、後者は書き込みブロックに対応するメタデータブロック上に生じるが、前者は元のファイルの末尾に生じるため、ホールを生じない書き込みと比較して複雑な処理を要する。
【００７２】
ファイルサイズの縮小は、ファイルへの書き込みによっては起こらないが、明示的なファイルサイズ切り詰め操作により発生する。この場合の変化は図６の新旧を逆転させることに相当し、ファイルシステム管理手段１０５が不要なファイルデータブロックを解放すると共に、メタデータブロック管理手段１０６は不要なメタデータブロックを解放し、ルートメタデータブロックを変更することで木構造の高さを減少させる。
【００７３】
次に、メタデータブロック管理手段１０６の動作を実現するための手段について説明する。図７は、この発明の実施の形態１に係るファイル複製システムのメタデータブロック管理手段のファイル書き込み動作の概要を示すフローチャートである。ただし、書き込みはファイルデータブロック単位に行い、複数のファイルデータブロックにまたがる書き込みは複数回に分けて処理するものとする。
【００７４】
まず、ステップＳ７０１において、入力パラメータを元に変数の初期化を行う。入力パラメータは、書き込み開始オフセットｓ、書き込みサイズｇの２つであり、ｓと式（４）により定まる書き込みファイルデータブロック番号ｉ（ｓ）を変数ｉにセットする。書き込み領域が単一のファイルデータブロックに収まるためには、ｓ，ｇ，ｉの間にｓ＋ｇ≦（ｉ＋１）・Ｂの関係が成り立っている必要がある。また、書き込み前におけるファイル管理情報（ｉノード）１０１のファイルサイズ１０１１の値を変数Ｓに、ｍａｘ（Ｓ，ｓ＋ｇ）で与えられる書き込み後のファイルサイズを変数Ｓ’に、それぞれセットする。
【００７５】
次に、ステップＳ７０２において、ファイル管理情報（ｉノード）１０１を更新する。すなわち、ファイルサイズ１０１１にＳ’を格納し、ファイルメタデータ１０１２のデータ非依存部、すなわち最終更新日時に現在の日時を、世代番号に現在の世代番号に１を加えた値を、それぞれ格納する。
【００７６】
次に、ステップＳ７０３において、後述する手順により書き込み後ファイルサイズＳ’に対して階層レベル数が十分かどうか判定し、不足する場合は階層レベルの追加を行う。
【００７７】
次に、ステップＳ７０４において、書き込みファイルデータブロックｉに対応するメタデータブロックをルートメタデータブロックから下位階層レベルに向かって辿り、未割り当てメタデータブロックがあれば割り当てを行う。また、セグメント／ブロックメタデータの内、データ非依存部を設定する。ファイルにホールが生じる場合はホール末尾領域に対応するメタデータブロックのセグメント／ブロックメタデータエントリの設定も併せて行う。
【００７８】
続いて、ステップＳ７０５において、ファイルにホールが生じる場合、ホール先頭領域に対応するメタデータブロックのセグメント／ブロックメタデータエントリの設定を行う。
【００７９】
さらに、ステップＳ７０６において、書き込みファイルデータブロックｉに対応するブロックメタデータブロックのブロックメタデータの内、チェックサムを更新し、上位セグメントメタデータブロックのセグメントメタデータを階層的に更新する。ファイルにホールが生じる場合はホール先頭領域に対応するメタデータブロックのセグメントメタデータも階層的に更新する。
【００８０】
最後に、ステップＳ７０７において、ルートメタデータブロックのセグメント／ブロックメタデータ（０）〜（有効エントリ数−１）に基づいてファイルメタデータ１０１２のチェックサムを更新する。
【００８１】
次に、ステップＳ７０３〜ステップＳ７０６のそれぞれの詳細な動作を説明する。図８は、この発明の実施の形態１に係るファイル複製システムのメタデータブロック管理手段のファイル書き込み動作のステップＳ７０３の詳細な動作を示すフローチャートである。
【００８２】
まず、ステップＳ８０１において、変数ｒをファイル管理情報（ｉノード）１０１のルートメタデータブロックアドレス１０１３の値に初期化し、変数ｈをｒが指すメタデータブロック（１０４または１０３）の階層レベル（１０４１または１０３１）の値に初期化する。
【００８３】
続いて、ステップＳ８０２において、ｈ＋１を式（１）に基づくＨ（Ｓ’）と比較し、ｈ＋１の方が小さい場合はステップＳ８０３に進み、そうでない場合は処理を終了する。ここで、ｈ＋１は書き込み前のメタデータブロック木構造の高さ、Ｈ（Ｓ’）は書き込み後のメタデータブロック木構造の高さを表しており、ステップＳ８０２によりファイルの拡張に対して木構造の高さを増加させる必要があるかどうかの判定が行われる。
【００８４】
ステップＳ８０３において、新たなセグメントメタデータブロック１０４を割り当て、次のように初期化する。すなわち、階層レベル１０４１にｈ＋１を、有効エントリ数１０４２に１を、下位メタデータブロックアドレス（０）（１０４４Ａ）にｒの値を、セグメントメタデータ（０）にｒが指すメタデータブロックのセグメントメタデータ（０）〜（有効エントリ数−１）から求めたメタデータ値を、それぞれ格納する。ただし、メタデータの内最終更新日時および世代番号については、ｒが指すメタデータブロックのセグメントメタデータ（０）〜（有効エントリ数−１）の最大値を用い、チェックサムについてはｒが指すメタデータブロックのセグメントメタデータ（０）〜（有効エントリ数−１）から算出した値を用いる。
【００８５】
次に、ステップＳ８０４において、ファイル管理情報（ｉノード）１０１のルートメタデータブロックアドレス１０１３にステップＳ８０３で割り当てたメタデータブロックのアドレスを設定し、ステップＳ８０２に戻る。ステップＳ８０３とステップＳ８０４の動作により、書き込み前のルートメタデータブロックの上位に新たなルートメタデータブロックが挿入される。
【００８６】
図９は、この発明の実施の形態１に係るファイル複製システムのメタデータブロック管理手段のファイル書き込み動作のステップＳ７０４の詳細な動作を示すフローチャートである。
【００８７】
まず、ステップＳ９０１において、変数ｈをｒが指すルートメタデータブロック（１０４または１０３）の階層レベル（１０４１または１０３１）の値に初期化し、変数ｐｈをｒに設定する。
【００８８】
ステップＳ９０２において、階層レベルｈにおいて書き込み開始オフセットｓに対応する式（８）のエントリ番号ｊｈ（ｓ）を変数ｊｈに設定する。
【００８９】
次に、ステップＳ９０３において、ｈを０と比較し、ｈが０より大きければステップＳ９０４に進み、そうでなければステップＳ９１２に進む。
【００９０】
ステップＳ９０４において、ｊｈとｐｈが指すセグメントメタデータブロックの有効エントリ数を比較し、ｊｈの方が小さければステップ９０５に進み、そうでない場合はステップＳ９０７に進む。
【００９１】
ステップＳ９０５において、ｐｈが指すセグメントメタデータブロックの下位メタデータブロックアドレス（ｊｈ）が無効値かどうかを判定し、無効値であればステップＳ９０６に進み、そうでない場合はステップＳ９１０に進む。
【００９２】
ステップＳ９０６において、セグメントメタデータブロック（ｈ＞１の時）またはブロックメタデータブロック（ｈ＝１の時）を割り当てて初期化する。階層レベルをｈ−１に、有効エントリ数はｈ＞１であればｍに、ｈ＝１であればｎに設定する。また、セグメント／ブロックメタデータブロックの全エントリについて、データ非依存部（最終更新日時および世代番号）をｐｈが指すセグメントメタデータブロックのセグメントメタデータ（ｊｈ）の値に設定すると共に、チェックサムをホールに対応する値、すなわちバイト値０で満たされたセグメントに対して階層的に計算した値に設定する。さらに、ｈ＞１の時は下位メタデータブロックアドレスの全エントリ（０〜ｍ−１）に無効値を設定する。このステップは既存のホールに書き込みを行う場合に実行され、図６における未割り当てメタデータブロックを割り当て、設定する処理を実現する。
【００９３】
一方、ステップＳ９０７において、ｐｈが指すセグメントメタデータブロックの更新を行う。エントリ番号が現在の有効エントリ数〜ｊｈ−１に対応する下位メタデータブロックアドレスに全て無効値を設定し、セグメントメタデータのデータ非依存部にファイルメタデータ１０１２の値を、チェックサムにホールに対応する値をそれぞれ設定する。その後、有効エントリ数にｊｈ＋１を設定する。本ステップはファイルサイズの拡張を伴う書き込みにおいて実行される。ホールを生じる際にはホール末尾領域に対応するセグメントメタデータエントリの設定も行う。ホールを生じないファイルサイズ拡張においてはｊｈ＝有効エントリ数となり、下位メタデータブロックアドレスやセグメントメタデータの設定対象エントリは存在しない。
【００９４】
続いて、ステップＳ９０８において、新たなセグメント／ブロックメタデータブロックを割り当て、階層レベルをｈ−１に、有効エントリ数を０に初期化する。
【００９５】
ステップＳ９０９において、ｐｈが指すセグメントメタデータブロックの下位メタデータブロックアドレス（ｊｈ）に、ステップＳ９０６またはステップＳ９０８において新たに割り当てたセグメント／ブロックメタデータブロックのアドレスを設定する。
【００９６】
続く、ステップＳ９１０において、ｐｈが指すセグメントメタデータブロックのセグメントメタデータ（ｊｈ）のデータ非依存部にファイルメタデータ１０１２の値を設定する。
【００９７】
ステップＳ９１１において、変数ｐｈ−１にｐｈが指すセグメントメタデータブロックの下位メタデータブロックアドレス（ｊｈ）の値を設定し、変数ｈを１減じた上で、ステップＳ９０２以下の処理を繰り返す。
【００９８】
ステップＳ９０３に続くステップＳ９１２では、ｐｈが指すブロックメタデータブロックのブロックメタデータ（ｊｈ）のデータ非依存部にファイルメタデータ１０１２の値を設定し、処理を終了する。
【００９９】
図１０は、この発明の実施の形態１に係るファイル複製システムのメタデータブロック管理手段のファイル書き込み動作のステップＳ７０５の詳細な動作を示すフローチャートである。
【０１００】
まず、ステップＳ１００１において、式（４）に基づき、書き込み前ファイルサイズＳに引き続く領域のブロック番号ｉ（Ｓ）と書き込みブロック番号ｉ（ｓ）を比較する。前者の方が小さい場合はホールが生じているのでステップＳ１００２に進み、そうでない場合はホールが生じていないので終了する。
【０１０１】
ステップＳ１００２において、変数ｈをｒが指すルートメタデータブロックの階層レベルの値に初期化し、変数ｐｈ’をｒに設定する。
【０１０２】
ステップＳ１００３において、式（５）と式（８）に基づき次の値を求める。すなわち、階層レベルｈにおいてオフセットＳに対応するメタデータブロック番号ｋｈ’＝ｋｈ（Ｓ）およびエントリ番号ｊｈ’＝ｊｈ（Ｓ）と、階層レベルｈにおいてオフセットｓに対応するメタデータブロック番号ｋｈ＝ｋｈ（ｓ）およびエントリ番号ｊｈ＝ｊｈ（ｓ）である。前者はホールの先頭領域に対応し、後者はホールの末尾領域に対応する。
【０１０３】
続いて、ステップＳ１００４において、ｋｈ’とｋｈを比較し、ｋｈ’が小さい場合はステップＳ１００７へ、そうでない場合はステップＳ１００５へ進む。
【０１０４】
ステップＳ１００５において、ｊｋ’＋１とｊｋを比較し、前者が小さければステップＳ１００６へ、そうでなければステップＳ１００８へ進む。
【０１０５】
ステップＳ１００６において、ｐｈ’が指すメタデータブロックのセグメント／ブロックメタデータ（ｊｈ’＋１）〜（ｊｈ−１）の内、データ非依存部（最終更新日時および世代番号）をファイルメタデータの値に設定し、チェックサムをホールに対応する値に設定する。本ステップは、ホール前後の領域が１つのメタデータブロックに含まれている場合に、ホールに対応するメタデータエントリを設定する処理を行う。
【０１０６】
また、ステップＳ１００７において、ｐｈ’が指すメタデータブロックを更新する。ｈ＞０の時は有効エントリ数をｍに設定し、セグメントメタデータ（ｊｈ’＋１）〜（ｍ−１）の内、データ非依存部（最終更新日時および世代番号）をファイルメタデータの値に、チェックサムをホールに対応する値にそれぞれ設定する。また、ｈ＝０の時は有効エントリ数をｎに設定し、ブロックメタデータ（ｊｈ’＋１）〜（ｎ−１）の内データ非依存部（最終更新日時および世代番号）をファイルメタデータの値に、チェックサムをホールに対応する値にそれぞれ設定する。本ステップは、ホールが複数メタデータブロックにまたがっている場合に、ホールの先頭領域がかかるメタデータブロックの処理を行う。
【０１０７】
ステップＳ１００６とステップＳ１００７に引き続くステップＳ１００８では、ｈを０と比較し、ｈ＞０ならステップＳ１００９に進み、そうでなければ終了する。
【０１０８】
ステップＳ１００９において、変数ｐｈ−１’にｐｈ’が指すセグメントメタデータブロックの下位メタデータブロックアドレス（ｊｈ’）の値を設定し、変数ｈを１減じた上で、ステップＳ１００３以下の処理を繰り返す。ｐｈ’は常にホールの先頭領域に対応するメタデータブロックを指す。
【０１０９】
図１１は、この発明の実施の形態１に係るファイル複製システムのメタデータブロック管理手段のファイル書き込み動作のステップＳ７０６の詳細な動作を示すフローチャートである。
【０１１０】
まず、ステップＳ１１０１において、図９の手順で設定したｐ０が指すブロックメタデータブロックのブロックメタデータ（ｊ０）のチェックサムを書き込みファイルデータブロックｉの先頭ｇ０（ｓ）バイトの内容から計算する。ｇ０（ｓ）は当該ファイルデータブロックがファイル末尾の時にＢより小さくなることもある（式（７））。
【０１１１】
次に、ステップＳ１１０２において、変数ｈに０を設定する。
【０１１２】
ステップＳ１１０３において、ｐｈをファイル管理情報（ｉノード）１０１のルートメタデータブロックアドレス１０１３の値と比較し、等しければ終了する。
【０１１３】
両者が等しくない場合は、ステップＳ１１０４において、ｈに１を加える。
【０１１４】
続く、ステップＳ１１０５において、ｐｈ（図９で設定したもの）が指すセグメントメタデータブロックのセグメントメタデータ（ｊｈ）に含まれるチェックサムを、ｐｈ−１が指す下位のメタデータブロックにおけるセグメント／ブロックメタデータ（０）〜（有効エントリ数−１）の値から計算して設定する。
【０１１５】
ステップＳ１１０６において、ホールが生じ、かつｐｈ’（図１０で設定したもの）≠ｐｈが成り立つ場合は、ｐｈ’が指すセグメントメタデータブロックのセグメントメタデータ（ｊｈ’）に含まれるチェックサムを、ｐｈ’が指す下位のメタデータブロックにおけるセグメント／ブロックメタデータ（０）〜（有効エントリ数−１）の値から計算して設定する。その後はステップＳ１１０３以下を繰り返す。
【０１１６】
次に、ファイルサイズの切り詰め操作におけるメタデータブロック管理手段１０６の動作を説明する。図１２は、この発明の実施の形態１に係るファイル複製システムのメタデータブロック管理手段のファイルサイズの切り詰め動作の概要を示すフローチャートである。
【０１１７】
まず、ステップＳ１２０１において、入力パラメータである切り詰め後のファイルサイズＳと式（４）に基づき、切り詰め後の最終ファイルデータブロック番号ｉ（Ｓ−１）を変数ｉに設定する。ただし、Ｓは元のファイルサイズより小さいものとし、そうでない場合はファイルシステム管理手段１０５によるメタデータブロック管理手段１０６の呼び出しは行われないものとする。
【０１１８】
次に、ステップＳ１２０２において、ファイル管理情報（ｉノード）１０１を更新する。すなわち、ファイルサイズ１０１１にＳを格納し、ファイルメタデータ１０１２のデータ非依存部、すなわち最終更新日時に現在の日時を、世代番号に現在の世代番号に１を加えた値を、それぞれ格納する。
【０１１９】
次に、ステップＳ１２０３において、ファイルサイズの縮小により不要となった階層レベルの除去を行う。
【０１２０】
次に、ステップＳ１２０４において、最終ファイルデータブロックｉに対応するメタデータブロックをルートメタデータブロックから下位階層レベルに向かって辿り、不要となったメタデータブロックは解放し、ホールに対応する未割り当てメタデータブロックがあれば割り当てを行う。また、セグメント／ブロックメタデータの内、データ非依存部を設定する。
【０１２１】
ステップＳ１２０５において、ファイルデータブロックｉへの書き込みと同様にして対応するセグメント／ブロックメタデータ（チェックサム）の更新を行う。
【０１２２】
最後に、ステップＳ１２０６において、ルートメタデータブロックのセグメント／ブロックメタデータ（０）〜（有効エントリ数−１）に基づいてファイルメタデータ１０１２のチェックサムを更新する。
【０１２３】
図１３は、この発明の実施の形態１に係るファイル複製システムのメタデータブロック管理手段のファイルサイズの切り詰め動作のステップＳ１２０３の詳細な動作を示すフローチャートである。
【０１２４】
まず、ステップＳ１３０１において、変数ｒをファイル管理情報（ｉノード）１０１のルートメタデータブロックアドレス１０１３の値に初期化し、変数ｈをｒが指すメタデータブロック（１０４または１０３）の階層レベル（１０４１または１０３１）の値に初期化する。
【０１２５】
ステップＳ１３０２において、ｈ＋１の値を式（１）に基づくＨ（Ｓ）の値と比較し、ｈ＋１の方が大きい場合はステップＳ１３０３に進み、そうでない場合は終了する。ここで、ｈ＋１はファイル切り詰め前のメタデータブロック木構造の高さ、Ｈ（Ｓ）はファイル切り詰め後のメタデータブロック木構造の高さを表しており、ステップＳ１３０２によりファイル切り詰めに対して木構造の高さを減少させる必要があるかどうかの判定が行われる。
【０１２６】
ステップＳ１３０３において、ファイル管理情報（ｉノード）１０１のルートメタデータブロックアドレスにｒが指すセグメントメタデータブロックの下位メタデータブロックアドレス（０）の値を格納する。
【０１２７】
次いで、ステップＳ１３０４において、ｒが指すセグメントメタデータブロックの下位メタデータブロックアドレス（１）〜（有効エントリ数−１）が指すメタデータブロックの階層を下位階層レベルから順に解放し、最後にｒが指すセグメントメタデータブロックを解放する。その後、ステップＳ１３０１以下の手順を繰り返す。
【０１２８】
図１４は、この発明の実施の形態１に係るファイル複製システムのメタデータブロック管理手段のファイルサイズの切り詰め動作のステップＳ１２０４の詳細な動作を示すフローチャートである。
【０１２９】
まず、ステップＳ１４０１において、変数ｈをｒが指すルートメタデータブロックの階層レベルの値に初期化し、変数ｐｈをｒに設定する。
【０１３０】
ステップＳ１４０２において、ｐｈが指すメタデータブロックのファイル切り詰め後の最終エントリ番号ｊｈ（Ｓ−１）を変数ｊｈに設定する。
【０１３１】
ステップＳ１４０３において、ｈを０と比較し、ｈ＞０の場合はステップＳ１４０４に進み、そうでない場合はステップＳ１４１１に進む。
【０１３２】
ステップＳ１４０４において、ｐｈが指すセグメントメタデータブロックの下位メタデータブロックアドレス（ｊｈ＋１）〜（有効エントリ数−１）が指すメタデータブロックの階層を解放する。
【０１３３】
ステップＳ１４０５において、ｐｈが指すセグメントメタデータブロックの有効エントリ数をｊｈ＋１に設定する。
【０１３４】
ステップＳ１４０６において、ｐｈが指すセグメントメタデータブロックの下位メタデータブロックアドレス（ｊｈ）が無効値かどうかを判定し、無効値であればステップＳ１４０７に進み、そうでない場合はステップＳ１４０９に進む。
【０１３５】
ステップＳ１４０７において、セグメントメタデータブロック（ｈ＞１の時）またはブロックメタデータブロック（ｈ＝１の時）を割り当てて初期化する。階層レベルをｈ−１に、有効エントリ数はｈ＞１であればｍに、ｈ＝１であればｎに設定する。また、セグメント／ブロックメタデータブロックの全エントリについて、データ非依存部（最終更新日時および世代番号）をｐｈが指すセグメントメタデータブロックのセグメントメタデータ（ｊｈ）の値に設定すると共に、チェックサムをホールに対応する値、すなわちバイト値０で満たされたセグメントに対して階層的に計算した値に設定する。さらに、ｈ＞１の時は下位メタデータブロックアドレスの全エントリ（０〜ｍ−１）に無効値を設定する。このステップはホール内に新たなファイルサイズを指定した切り詰めを行った場合に必要となる。
【０１３６】
ステップＳ１４０８において、ｐｈが指すセグメントメタデータブロックの下位メタデータブロックアドレス（ｊｈ）に新たに割り当てたセグメント/ブロックメタデータブロックのアドレスを設定する。
【０１３７】
続く、ステップＳ１４０９において、ｐｈが指すセグメントメタデータブロックのセグメントメタデータ（ｊｈ）のデータ非依存部にファイルメタデータ１０１２の値を設定する。
【０１３８】
ステップＳ１４１０において、変数ｐｈ−１にｐｈが指すセグメントメタデータブロックの下位メタデータブロックアドレス（ｊｈ）の値を設定し、変数ｈを１減じた上で、ステップＳ１４０２以下の処理を繰り返す。
【０１３９】
ステップＳ１４０３に続くステップＳ１４１１では、ｐｈが指すブロックメタデータブロックの有効エントリ数をｊｈ＋１に設定し、終了する。
【０１４０】
図１２に示すメタデータブロック管理手段１０６のステップＳ１２０５における動作は、図１１の手順と同様に実現することができる。
【０１４１】
以上説明した書き込み時と切り詰め時のメタデータブロック管理手段１０６の動作により、ディスク装置１０８上のファイルに対応するメタデータブロックの木構造を維持することが可能になる。
【０１４２】
次に、複製元ファイル複製制御手段１０７および複製先ファイル複製制御手段２０７の動作について説明する。図１５は、この発明の実施の形態１に係るファイル複製システムの複製元システムの複製元ファイル複製制御手段及び複製先システムの複製先ファイル複製制御手段の動作を説明するための図である。
【０１４３】
この図１５は、複製元システム１００と複製先システム２００の間で行われるファイル複製の手順を概念的に示す。ファイル複製は、図１５の右から左に進む形で行われる。太枠で示したものが実際に転送されるデータを現している。初めに、ファイルメタデータが比較され、ファイルが更新されているかどうかを検出する。ファイルメタデータが一致しなかった場合、複数のセグメントメタデータが比較され、どのセグメントが更新されたかを検出する。ここでは、２つのセグメントの内、下側のセグメントにおいてメタデータの不一致があったものとする。次に、不一致セグメントの構成要素間での比較が行われる。ここでは、２つのブロックメタデータが比較され、一番下のブロックで不一致が見付かったものとする。最後に、メタデータ不一致ブロックのデータ本体を複製元から複製先に転送し、複製先のディスク装置２０８に格納する。
【０１４４】
図１６は、この発明の実施の形態１に係るファイル複製システムの複製元システム及び複製先システムのメッセージ交換のタイミングを説明するための図である。
【０１４５】
この図１６は、複製元システム１００と複製先システム２００の間で行われるメッセージ交換のタイミングを示す。まず、時刻ｔ１において、複製先から複製元へファイルメタデータを含むメッセージが送られる。複製元は、これを時刻ｔ２に受け取って自身のファイルメタデータと比較しファイルの更新検出を行う。更新が検出された結果、時刻ｔ３に複製元から複製先に最上位のセグメントメタデータを含むメッセージが返される。複製先は、時刻ｔ４にこれを受け取り、更新セグメントを検出する。時刻ｔ５に複製先から複製元へ更新が検出されたセグメントの下位セグメントのメタデータが送信される。複製元は、時刻ｔ６にこれを受け取って更新ブロックの検出を行う。時刻ｔ７に複製元は更新が検出されたブロックのデータ自体を複製先に向け送信する。複製先は、時刻ｔ８以降にブロックデータを受け取ってファイルの複製を更新する。
【０１４６】
このように複製元と複製先は、更新の検出結果と下位階層レベルのメタデータ送信を一括して行い、交互に異なる階層レベルを比較することで、更新の検出をどちらか一方で固定的に実施した場合と比べてメッセージ交換の回数を約半分にすることを可能にしている。
【０１４７】
図１７は、この発明の実施の形態１に係るファイル複製システムの複製先システムの複製先ファイル複製制御手段から複製元システムの複製元ファイル複製制御手段へ送られるファイル複製開始メッセージの構成を示す図である。
【０１４８】
この図１７は、ファイル複製の開始時点で、複製先ファイル複製制御手段２０７から複製元ファイル複製制御手段１０７に送付されるファイル複製開始メッセージ１７の内容を示す。ファイル複製開始メッセージ１７は、メッセージ種別１７０１、ファイル名文字列長１７０２、ファイル名文字列１７０３、ファイル識別子１７０４、ファイルサイズ１７０５、およびファイルメタデータ１７０６からなる。メッセージ種別１７０１は、受信側に対し、バイト列をどのメッセージとして解釈すべきかを指示する。ファイル名文字列１７０３は、通常の手段でファイルにアクセスする際に用いる名前であるが、ファイル識別子１７０４は、整数値など文字列よりも比較が容易な表現を用い、複製先ファイル複製制御手段２０７と複製元ファイル複製制御手段１０７の間でファイル複製処理を行っている期間のみ有効な識別子である。ファイル識別子１７０４は、複数ファイルの複製を並行して行う際に各ファイルを容易に識別するために用いる。ファイル識別子１７０４としては、ファイル名のハッシュ値、ファイルのiノード番号、などを用いることができる。
【０１４９】
図１８は、この発明の実施の形態１に係るファイル複製システムの複製元システムの複製元ファイル複製制御手段から複製先システムの複製先ファイル複製制御手段へ送られるファイル一致応答メッセージの構成を示す図である。
【０１５０】
この図１８は、ファイル複製開始メッセージに対する応答として複製元ファイル複製制御手段１０７から複製先ファイル複製制御手段２０７に送付されるファイル一致応答メッセージ１８の内容を示す。ファイル一致応答メッセージ１８は、メッセージ種別１８０１とファイル識別子１８０２からなる。
【０１５１】
図１９は、この発明の実施の形態１に係るファイル複製システムの複製元システムの複製元ファイル複製制御手段から複製先システムの複製先ファイル複製制御手段へ送られるファイル削除応答メッセージの構成を示す図である。
【０１５２】
この図１９は、ファイル複製開始メッセージに対する応答として複製元ファイル複製制御手段１０７から複製先ファイル複製制御手段２０７に送付されるファイル削除応答メッセージ１９の内容を示す。ファイル削除応答メッセージ１９は、メッセージ種別１９０１とファイル識別子１９０２からなる。
【０１５３】
図２０は、この発明の実施の形態１に係るファイル複製システムの複製元システムの複製元ファイル複製制御手段と複製先システムの複製先ファイル複製制御手段の間で相互に送られるセグメントメタデータメッセージの構成を示す図である。
【０１５４】
この図２０は、複製元ファイル複製制御手段１０７と複製先ファイル複製制御手段２０７の間で相互に交わされるセグメントメタデータメッセージ２０の内容を示す。セグメントメタデータメッセージ２０は、メッセージ種別２００１、ファイル識別子２００２、ファイルサイズ２００３、ファイルサイズ差分２００４、階層レベル２００５、セグメント数２００６と、それに続くセグメント開始オフセット２００７、セグメントサイズ２００８、セグメントメタデータ２００９のセグメント数分の繰り返しからなる。本メッセージの内容は、セグメント／ブロックメタデータブロックに基づいて生成される。
【０１５５】
図２１は、この発明の実施の形態１に係るファイル複製システムの複製先システムの複製先ファイル複製制御手段から複製元システムの複製元ファイル複製制御手段へ送られるブロック転送要求メッセージの構成を示す図である。
【０１５６】
この図２１は、複製先ファイル複製制御手段２０７から複製元ファイル複製制御手段１０７に送付されるブロック転送要求メッセージ２１の内容を示す。ブロック転送要求メッセージ２１は、メッセージ種別２１０１、ファイル識別子２１０２、ファイルサイズ２１０３、ファイルサイズ差分２１０４、ブロック数２１０５と、それに続くブロック開始オフセット２１０６とブロックサイズ２１０７のブロック数分の繰り返しからなる。
【０１５７】
図２２は、この発明の実施の形態１に係るファイル複製システムの複製元システムの複製元ファイル複製制御手段から複製先システムの複製先ファイル複製制御手段へ送られるブロック転送メッセージの構成を示す図である。
【０１５８】
この図２２は、複製元ファイル複製制御手段１０７から複製先ファイル複製制御手段２０７に送付されるブロック転送メッセージ２２の内容を示す。ブロック転送メッセージ２２は、メッセージ種別２２０１、ファイル識別子２２０２、ファイルサイズ２２０３、ファイルサイズ差分２２０４、ブロック数２２０５と、それに続くブロック開始オフセット２２０６、ブロックサイズ２２０７、ブロックデータ２２０８のブロック数分の繰り返しからなる。
【０１５９】
次に、複製元ファイル複製制御手段１０７および複製先ファイル複製制御手段２０７の動作の詳細について説明する。
【０１６０】
図２３は、この発明の実施の形態１に係るファイル複製システムの複製元システムの複製元ファイル複製制御手段の動作の概要を示すフローチャートである。
【０１６１】
まず、ステップＳ２３０１において、複製先ファイル複製制御手段２０７からファイル複製開始メッセージ１７を受け取るまで待機する。
【０１６２】
ステップＳ２３０２において、ファイル複製開始メッセージ１７を受け取るとファイル名文字列１７０３に指定されたファイルが複製元システム１００に存在するかどうかをチェックする。
【０１６３】
ステップＳ２３０３において、ファイルが存在しない場合は、複製先ファイル複製制御手段２０７にファイル削除応答メッセージ１９を送信し、終了する。
【０１６４】
ステップＳ２３０４において、ファイルが存在する場合は、ファイル複製開始メッセージ１７のファイルサイズ１７０５とファイル管理情報（ｉノード）１０１のファイルサイズ１０１１、およびファイル複製開始メッセージ１７のファイルメタデータ１７０６とファイル管理情報（ｉノード）１０１のファイルメタデータ１０１２をそれぞれ比較する。
【０１６５】
ステップＳ２３０５において、ファイルサイズ、ファイルメタデータ共に一致する場合は、複製先ファイル複製制御手段２０７にファイル一致応答メッセージ１８を送信し、終了する。
【０１６６】
ステップＳ２３０６において、ファイルサイズまたはファイルメタデータが一致しない場合は、後述する手順により最上位階層レベルのセグメントメタデータメッセージ２０を生成し、複製先ファイル複製制御手段２０７に送信する。
【０１６７】
ステップＳ２３０７において、複製先ファイル複製制御手段２０７からセグメントメタデータメッセージ２０またはブロック転送要求メッセージ２１を受け取るまで待機する。
【０１６８】
続いて、ステップＳ２３０８において、受信したメッセージのメッセージ種別をチェックし、セグメントメタデータメッセージを表していればステップＳ２３１０に進み、ブロック転送要求メッセージを表していればステップＳ２３０９に進む。
【０１６９】
ステップＳ２３０９では、受信したブロック転送要求メッセージ２１のブロック開始オフセット２１０６およびブロックサイズ２１０７に指定されたブロックのデータ、およびファイルサイズ差分２１０４が０より大の時はファイル末尾のファイルサイズ差分に相当する領域のデータからなるブロック転送メッセージ２２を生成し、複製先ファイル複製制御手段２０７に送信し、終了する。
【０１７０】
ステップＳ２３０８に続くステップＳ２３１０では、受信したセグメントメタデータメッセージ２０の階層レベル２００５をチェックし、０でなければステップＳ２３１１に進み、０に等しければステップＳ２３１２に進む。
【０１７１】
ステップＳ２３１２においては、受信したセグメントメタデータメッセージ２０のセグメント開始オフセット２００７、セグメントサイズ２００８、セグメントメタデータ２００９をディスク装置上のブロックメタデータブロック１０３と比較し、メタデータが一致しないブロックのデータと、ファイルサイズ差分２１０４が０より大の時はファイル末尾のファイルサイズ差分に相当する領域のデータからなるブロック転送メッセージ２２を生成し、複製先ファイル複製制御手段２０７に送信し、終了する。
【０１７２】
ステップＳ２３１０に続くステップＳ２３１１では、受信したセグメントメタデータメッセージ２０のセグメント開始オフセット２００７、セグメントサイズ２００８、セグメントメタデータ２００９をディスク装置上のセグメントメタデータブロック１０４と比較し、メタデータが一致しないセグメントの下位階層レベルのメタデータブロックのセグメント／ブロックメタデータからなるセグメントメタデータメッセージ２０を生成し、複製先ファイル複製制御手段２０７に送信し、ステップＳ２３０７以下の処理を繰り返す。
【０１７３】
図２４は、この発明の実施の形態１に係るファイル複製システムの複製先システムの複製先ファイル複製制御手段の動作の概要を示すフローチャートである。
【０１７４】
まず、ステップＳ２４０１において、複製対象のファイルに対してファイル複製開始メッセージ１７を生成し、複製元ファイル複製制御手段１０７に送信する。
【０１７５】
次に、ステップＳ２４０２において、複製元ファイル複製制御手段１０７からいずれかのメッセージを受信するまで待機する。
【０１７６】
ステップＳ２４０３において、受信したメッセージのメッセージ種別をチェックし、ファイル一致応答メッセージを表していれば終了し、ファイル削除応答メッセージを表していればステップＳ２４０４に進む。
【０１７７】
ステップＳ２４０４において、当該ファイルを削除した後に終了する。
【０１７８】
ステップＳ２４０５において、受信したメッセージがセグメントメタデータメッセージ２０であれば階層レベル２００５を０と比較する。受信したセグメントメタデータメッセージ２０の階層レベル２００５が０でない場合はステップＳ２４０６に進み、０に等しい場合はステップＳ２４０７に進む。
【０１７９】
ステップＳ２４０６において、受信したセグメントメタデータメッセージ２０のセグメント開始オフセット２００７、セグメントサイズ２００８、セグメントメタデータ２００９をディスク装置上のセグメントメタデータブロック２０４と比較し、メタデータが一致しないセグメントの下位階層レベルのメタデータブロックのセグメント／ブロックメタデータからなるセグメントメタデータメッセージ２０を生成し、複製元ファイル複製制御手段１０７に送信する。
【０１８０】
一方、ステップＳ２４０７では、受信したセグメントメタデータメッセージ２０のセグメント開始オフセット２００７、セグメントサイズ２００８、セグメントメタデータ２００９をディスク装置上のブロックメタデータブロック２０４と比較し、メタデータが一致しないブロックに対するブロック転送要求メッセージ２１を生成し、複製元ファイル複製制御手段１０７に送信する。
【０１８１】
ステップＳ２４０６およびステップＳ２４０７に続くステップＳ２４０８では、複製元ファイル複製制御手段１０７からいずれかのメッセージを受信するまで待機する。
【０１８２】
ステップＳ２４０９において、受信したメッセージのメッセージ種別をチェックし、セグメントメタデータメッセージを表していればステップＳ２４０５以下の処理を繰り返す。メッセージ種別がブロック転送メッセージを表していればステップＳ２４１０に進む。
【０１８３】
ステップＳ２４１０において、受信したブロック転送メッセージ２２のファイルサイズ差分２２０４を０と比較する。ファイルサイズ差分２２０４が０より小さければステップＳ２４１１に進み、そうでなければステップＳ２４１２に進む。
【０１８４】
ステップＳ２４１１において、受信したブロック転送メッセージ２２のファイルサイズ２２０３に当該ファイルのサイズを切り詰める。
【０１８５】
ステップＳ２４１２では、受信したブロック転送メッセージ２２のブロック開始オフセット２２０６、ブロックサイズ２２０７、ブロックデータ２２０８を用いて、当該ファイルの対応するブロックを更新し、終了する。
【０１８６】
図２５は、この発明の実施の形態１に係るファイル複製システムの複製元ファイル複製制御手段のステップＳ２３０６の詳細な動作を示すフローチャートである。
【０１８７】
まず、ステップＳ２５０１において、変数ｅに複製元のファイル管理情報（ｉノード）１０１のファイルサイズ１０１１と受信したファイル複製開始メッセージ１７のファイルサイズ１７０５の最小値を設定する。変数ｅは複製元ファイルと複製先ファイルに共通する領域のサイズを表す。
【０１８８】
続いて、ステップＳ２５０２で、変数ｐをファイル管理情報（ｉノード）１０１のルートメタデータブロックアドレス１０１３の値に初期化し、変数ｈをｐが指すメタデータブロック（１０４または１０３）の階層レベル（１０４１または１０３１）の値に初期化する。
【０１８９】
次に、ステップＳ２５０３において、変数ｈを式（１）に基づくＨ（ｅ）−１と比較し、ｈの方が大きい場合はステップＳ２５０４に進み、ｐが指すセグメントメタデータブロックの下位メタデータブロックアドレス（０）の値をｐに設定すると共に、ｈを新たなｐが指すメタデータブロックの階層レベルの値に設定し、ステップＳ２５０３に戻る。ｈがＨ（ｅ）−１に等しい場合はステップＳ２５０５に進む。この時、変数ｐは複製元ファイルと複製先ファイルの共通領域に対するメタデータブロック木構造の最上位階層レベルのメタデータブロックを指している。
【０１９０】
次に、ステップＳ２５０５において、セグメントメタデータメッセージ２０を初期化する。メッセージ種別２００１には当該メッセージが「セグメントメタデータメッセージ」であることを表す識別情報を、ファイル識別子２００２に受信したファイル複製開始メッセージ１７のファイル識別子１７０４を、ファイルサイズ２００３に複製元ファイル管理情報（ｉノード）１０１のファイルサイズ１０１１を、ファイルサイズ差分２００４に複製元ファイル管理情報（ｉノード）１０１のファイルサイズ１０１１から受信したファイル複製開始メッセージ１７のファイルサイズ１７０５を引いた値を、階層レベル２００５にｈを、さらにセグメント数２００６に０を、それぞれ設定する。
【０１９１】
続く、ステップＳ２５０６では、後述する手順により、ｐが指すメタデータブロックに基づいて開始オフセットを０、サイズをｅとするファイルの領域に対するセグメントメタデータのエントリをセグメントメタデータメッセージの末尾に追加する。
【０１９２】
最後に、ステップＳ２５０７において、セグメントメタデータメッセージ２０を複製先ファイル複製制御手段２０７に送信する。
【０１９３】
図２６は、図２５のステップＳ２５０６及び図２８のステップＳ２８０９の詳細な動作を示すフローチャートである。
【０１９４】
まず、ステップＳ２６０１において、入力パラメータｓ（ファイル領域の開始オフセット）、ｇ（ファイル領域のサイズ）、ｐ（ファイル領域に対応するメタデータブロックのアドレス）に基づき、変数ｅをｓ＋ｇ（ファイル領域の直後のオフセット）に、変数ｈをｐが指すメタデータブロックの階層レベルに、変数ｊを０に、それぞれ設定する。
【０１９５】
ステップＳ２６０２において、ｓとｅを比較し、ｓがｅより小さければステップＳ２６０３に進み、そうでなければ終了する。
【０１９６】
ステップＳ２６０３では、セグメントメタデータメッセージ２０にセグメントのエントリを追加する。すなわち、新たなセグメント数Ｔをセグメント数２００６に１を加えた値とし、セグメント数２００６にＴを、セグメント開始オフセット２００７のエントリＴ−１にｓを、セグメントサイズ２００８のエントリＴ−１に式（７）に基づくｇｈ（ｓ）を、セグメントメタデータ２００９のエントリＴ−１にｐが指すメタデータブロックのセグメント／ブロックメタデータ（ｊ）の値を、それぞれ設定する。
【０１９７】
続いて、ステップＳ２６０４において、ｓにｓ＋ｇｈ（ｓ）を設定し、ｊに１を加えた後に、ステップＳ２６０２以下の処理を繰り返す。
【０１９８】
図２７は、この発明の実施の形態１に係るファイル複製システムの複製元ファイル複製制御手段のステップＳ２３１１及び複製先ファイル複製制御手段のステップＳ２４０６の詳細な動作を示すフローチャートである。
【０１９９】
まず、ステップＳ２７０１において、送信用のセグメントメタデータメッセージ２０の初期化を行う。すなわち、メッセージ種別２００１には当該メッセージが「セグメントメタデータメッセージ」であることを表す識別情報を、ファイル識別子２００２、ファイルサイズ２００３、およびファイルサイズ差分２００４には受信したセグメントメタデータメッセージの対応する項目を、階層レベル２００５に受信したセグメントメタデータメッセージの階層レベルから１を引いた値を、さらにセグメント数２００６に０を、それぞれ設定する。
【０２００】
ステップＳ２７０２では、変数ｔを０に初期化する。
【０２０１】
続いて、ステップＳ２７０３で、ｔと受信したセグメントメタデータメッセージのセグメント数を比較し、ｔが小さければステップＳ２７０４に進み、そうでなければステップＳ２７０６に進んで送信用のセグメントメタデータメッセージ２０を相手に送信し、終了する。
【０２０２】
ステップＳ２７０４では、後述する手順により、受信したセグメントメタデータメッセージのセグメント開始オフセット（ｔ）、セグメントサイズ（ｔ）、セグメントメタデータ（ｔ）に基づくメタデータ比較を行い、不一致が検出された場合は下位階層レベルのセグメントメタデータのエントリを送信用のセグメントメタデータメッセージ２０に追加する。
【０２０３】
ステップＳ２７０５では、ｔに１を加え、ステップＳ２７０３以下の処理を繰り返す。
【０２０４】
図２８は、図２７のステップＳ２７０４の詳細な動作を示すフローチャートである。
【０２０５】
まず、ステップＳ２８０１において、入力パラメータｓ（受信セグメントメタデータメッセージのセグメント開始オフセット（ｔ））、ｇ（受信セグメントメタデータメッセージのセグメントサイズ（ｔ））、Ｍ（受信セグメントメタデータメッセージのセグメントメタデータ（ｔ））を受け取る。
【０２０６】
ステップＳ２８０２において、変数ｐをファイル管理情報（ｉノード）のルートメタデータブロックアドレスの値に初期化し、変数ｈをｐが指すメタデータブロックの階層レベルの値に初期化する。
【０２０７】
続いて、ステップＳ２８０３において、ｐが指すメタデータブロックにおけるオフセットｓに対応するエントリ番号ｊｈ（ｓ）を変数ｊに設定する。
【０２０８】
ステップＳ２８０４では、ｐが指すセグメントメタデータブロックの下位メタデータブロックアドレス（ｊ）をチェックし、無効値であればステップＳ２８１０に進み、そうでない場合はステップＳ２８０５に進む。
【０２０９】
ステップＳ２８０５では、ｈを受信セグメントメタデータメッセージの階層レベルと比較し、両者が等しければステップＳ２８０７に進み、そうでなければステップＳ２８０６に進んで、ｐが指すセグメントメタデータブロックの下位メタデータブロックアドレス（ｊ）の値をｐに、新たなｐが指すメタデータブロックの階層レベルをｈに、それぞれ設定してステップＳ２８０３に戻る。
【０２１０】
ステップＳ２８０７において、ｇとｇｈ（ｓ）の値、Ｍとｐが指すセグメントメタデータブロックのセグメントメタデータ（ｊ）の値をそれぞれ比較し、全て一致する場合は処理を終了する。少なくとも一方が一致しない場合はステップＳ２８０８に進み、ｐが指すセグメントメタデータブロックの下位メタデータブロックアドレス（ｊ）の値をｐに設定する。
【０２１１】
続く、ステップＳ２８０９では、図２７に示した手順により、ｐが指すメタデータブロックに基づいて開始オフセットをｓ、サイズをｇとするファイル領域に対するセグメントメタデータのエントリを送信用のセグメントメタデータメッセージの末尾に追加し、終了する。
【０２１２】
ステップＳ２８０４に続くステップＳ２８１０は、ホールに対してセグメントメタデータを比較しようとした場合に実行される。そのため、本ステップにおいてホールに対するメタデータを動的に生成する。すなわち、ｈの値は受信したセグメントメタデータメッセージの階層レベルに設定し、ホールメタデータのデータ非依存部分をｐが指すセグメントメタデータブロックのセグメントメタデータ（ｊ）の値に、チェックサムをサイズｇｈ（ｓ）のホール（バイト値０で埋められた領域）に対する値にそれぞれ設定する。
【０２１３】
次に、ステップＳ２８１１において、ｇとｇｈ（ｓ）の値、Ｍとホールメタデータの値をそれぞれ比較し、全て一致する場合は処理を終了する。少なくとも一方が一致しない場合はステップＳ２８１２に進み、ｈを１減じた上で対応するチェックサムの値を再計算する。
【０２１４】
続く、ステップＳ２８１３において、後述する手順により階層レベルｈとホールメタデータに基づいて開始オフセットをｓ、サイズをｇとするファイル領域に対するセグメントメタデータのエントリを送信用のセグメントメタデータメッセージの末尾に追加し、終了する。
【０２１５】
図２９は、図２８のステップＳ２８１３の詳細な動作を示すフローチャートである。
【０２１６】
まず、ステップＳ２９０１において、入力パラメータｓ（ファイル領域の開始オフセット）、ｇ（ファイル領域のサイズ）、ｈ（階層レベル）、Ｌ（ホールメタデータ）を受け取り、変数ｅをｓ＋ｇ（ファイル領域の直後のオフセット）に設定する。
【０２１７】
ステップＳ２９０２において、ｓとｅを比較し、ｓがｅより小さければステップＳ２９０３に進み、そうでなければ終了する。
【０２１８】
ステップＳ２９０３では、セグメントメタデータメッセージ２０にセグメントのエントリを追加する。すなわち、新たなセグメント数Ｔをセグメント数２００６に１を加えた値とし、セグメント数２００６にＴを、セグメント開始オフセット２００７のエントリＴ−１にｓを、セグメントサイズ２００８のエントリＴ−１に式（７）に基づくｇｈ（ｓ）を、セグメントメタデータ２００９のエントリＴ−１にホールメタデータＬを、それぞれ設定する。
【０２１９】
続いて、ステップＳ２９０４において、ｓにｓ＋ｇｈ（ｓ）を設定した後に、ステップＳ２９０２以下の処理を繰り返す。
【０２２０】
図３０は、この発明の実施の形態１に係るファイル複製システムの複製先ファイル複製制御手段のステップＳ２４０７の詳細な動作を示すフローチャートである。
【０２２１】
ステップＳ３００１において、ブロック転送要求メッセージ２１を初期化する。すなわち、メッセージ種別２１０１には当該メッセージが「ブロック転送要求メッセージ」であることを表す識別情報を、ファイル識別子２１０２、ファイルサイズ２１０３、およびファイルサイズ差分２１０４には受信したセグメントメタデータメッセージの対応する項目を、ブロック数２１０５に０を、それぞれ設定する。
【０２２２】
ステップＳ３００２では、変数ｔを０に初期化する。
【０２２３】
続いて、ステップＳ３００３では、ｔと受信したセグメントメタデータメッセージのセグメント数を比較し、ｔが小さければステップＳ３００４に進み、そうでなければステップＳ３００６に進んで、ブロック転送要求メッセージ２１を複製元ファイル複製制御手段１０７に送信し、終了する。
【０２２４】
ステップＳ３００４では、後述する手順により、受信したセグメントメタデータメッセージのセグメント開始オフセット（ｔ）、セグメントサイズ（ｔ）、セグメントメタデータ（ｔ）に基づくメタデータ比較を行い、不一致が検出された場合はブロックのエントリをブロック転送要求メッセージ２１に追加する。
【０２２５】
ステップＳ３００５では、ｔに１を加え、ステップＳ３００３以下の処理を繰り返す。
【０２２６】
図３１は、図３０のステップＳ３００４の詳細な動作を示すフローチャートである。
【０２２７】
まず、ステップＳ３１０１において、入力パラメータｓ（受信セグメントメタデータメッセージのセグメント開始オフセット（ｔ））、ｇ（受信セグメントメタデータメッセージのセグメントサイズ（ｔ））、Ｍ（受信セグメントメタデータメッセージのセグメントメタデータ（ｔ））を受け取る。
【０２２８】
ステップＳ３１０２において、変数ｐをファイル管理情報（ｉノード）のルートメタデータブロックアドレスの値に初期化し、変数ｈをｐが指すメタデータブロックの階層レベルの値に初期化する。
【０２２９】
続いて、ステップＳ３１０３において、ｐが指すメタデータブロックにおけるオフセットｓに対応するエントリ番号ｊｈ（ｓ）を変数ｊに設定する。
【０２３０】
ステップＳ３１０４では、ｈを０と比較し、両者が等しければステップＳ３１０７に進み、そうでなければステップＳ３１０５に進む。
【０２３１】
ステップＳ３１０５では、ｐが指すセグメントメタデータブロックの下位メタデータブロックアドレス（ｊ）をチェックし、無効値であればステップＳ３１０８に進み、そうでない場合はステップＳ３１０６において、ｐが指すセグメントメタデータブロックの下位メタデータブロックアドレス（ｊ）の値をｐに、新たなｐが指すメタデータブロックの階層レベルをｈに、それぞれ設定してステップＳ３１０３に戻る。
【０２３２】
ステップＳ３１０４に続くステップＳ３１０７では、ｇとｇ０（ｓ）の値、Ｍとｐが指すブロックメタデータブロックのブロックメタデータ（ｊ）の値をそれぞれ比較し、全て一致する場合は処理を終了し、少なくとも一方が一致しない場合はステップＳ３１１０に進む。
【０２３３】
また、ステップＳ３１０５に続くステップＳ３１０８は、ホールに対してブロックメタデータを比較しようとした場合に実行される。そのため、本ステップにおいてホールに対するメタデータを動的に生成する。すなわち、ホールメタデータのデータ非依存部分をｐが指すセグメントメタデータブロックのセグメントメタデータ（ｊ）の値に、チェックサムをサイズｇ０（ｓ）のホール（バイト値０で埋められた領域）に対する値にそれぞれ設定する。
【０２３４】
次に、ステップＳ３１０９において、ｇとｇ０（ｓ）の値、Ｍとホールメタデータの値をそれぞれ比較し、全て一致する場合は処理を終了する。少なくとも一方が一致しない場合はステップＳ３１１０に進む。
【０２３５】
ステップＳ３１１０では、ブロック転送要求メッセージ２１にブロックのエントリを追加する。すなわち、新たなブロック数Ｔをブロック数２１０５に１を加えた値とし、ブロック数２１０５にＴを、ブロック開始オフセット２１０６のエントリＴ−１にｓを、ブロックサイズ２１０７のエントリＴ−１にｇ０（ｓ）を、それぞれ設定し、終了する。
【０２３６】
図３２は、この発明の実施の形態１に係るファイル複製システムの複製元ファイル複製制御手段のステップＳ２３１２の詳細な動作を示すフローチャートである。
【０２３７】
ステップＳ３２０１において、ブロック転送メッセージ２２を初期化する。すなわち、メッセージ種別２２０１には当該メッセージが「ブロック転送メッセージ」であることを表す識別情報を、ファイル識別子２２０２、ファイルサイズ２２０３、およびファイルサイズ差分２２０４には受信したセグメントメタデータメッセージの対応する項目を、ブロック数２２０５に０を、それぞれ設定する。
【０２３８】
ステップＳ３２０２では、変数ｔを０に初期化する。
【０２３９】
続いて、ステップＳ３２０３では、ｔと受信したセグメントメタデータメッセージのセグメント数を比較し、ｔが小さければステップＳ３２０４に進み、そうでなければステップＳ３２０６に進む。
【０２４０】
ステップＳ３２０４では、後述する手順により、受信したセグメントメタデータメッセージのセグメント開始オフセット（ｔ）、セグメントサイズ（ｔ）、セグメントメタデータ（ｔ）に基づくメタデータ比較を行い、不一致が検出された場合はブロックデータのエントリをブロック転送メッセージ２２に追加する。
【０２４１】
ステップＳ３２０５では、ｔに１を加え、ステップＳ３２０３以下の処理を繰り返す。
【０２４２】
ステップＳ３２０３に続くステップＳ３２０６では、ファイルサイズ差分２２０４を０と比較し、ファイルサイズ差分が０より大ならばステップＳ３２０７に進み、そうでないならばステップＳ３２０８に進む。
【０２４３】
ステップＳ３２０７において、ブロック転送メッセージ２２にブロックデータのエントリを追加する。すなわち、新たなブロック数Ｔをブロック数２２０５に１を加えた値とし、ブロック数２２０５にＴを、ブロック開始オフセット２２０６のエントリＴ−１にファイルサイズ２２０３からファイルサイズ差分２２０４を引いた値を、ブロックサイズ２２０７のエントリＴ−１にファイルサイズ差分２２０４の値を、ブロックデータ２２０８のエントリＴ−１に当該ファイル領域の内容をそれぞれ設定する。
【０２４４】
最後に、ステップＳ３２０８においてブロック転送メッセージ２２を複製先ファイル複製制御手段２０７に送信する。
【０２４５】
図３３は、図３２のステップＳ３２０４の詳細な動作を示すフローチャートである。
【０２４６】
まず、ステップＳ３３０１において、入力パラメータｓ（受信セグメントメタデータメッセージのセグメント開始オフセット（ｔ））、ｇ（受信セグメントメタデータメッセージのセグメントサイズ（ｔ））、Ｍ（受信セグメントメタデータメッセージのセグメントメタデータ（ｔ））を受け取る。
【０２４７】
ステップＳ３３０２において、変数ｐをファイル管理情報（ｉノード）のルートメタデータブロックアドレスの値に初期化し、変数ｈをｐが指すメタデータブロックの階層レベルの値に初期化する。
【０２４８】
続いて、ステップＳ３３０３において、ｐが指すメタデータブロックにおけるオフセットｓに対応するエントリ番号ｊｈ（ｓ）を変数ｊに設定する。
【０２４９】
ステップＳ３３０４では、ｈを０と比較し、両者が等しければステップＳ３３０７に進み、そうでなければステップＳ３３０５に進む。
【０２５０】
ステップＳ３３０５では、ｐが指すセグメントメタデータブロックの下位メタデータブロックアドレス（ｊｈ）をチェックし、無効値であればステップＳ３３０８に進み、そうでない場合はステップＳ３３０６において、ｐが指すセグメントメタデータブロックの下位メタデータブロックアドレス（ｊ）の値をｐに、新たなｐが指すメタデータブロックの階層レベルをｈに、それぞれ設定してステップＳ３３０３に戻る。
【０２５１】
ステップＳ３３０４に続くステップＳ３３０７では、ｇとｇ０（ｓ）の値、Ｍとｐが指すブロックメタデータブロックのブロックメタデータ（ｊ）の値をそれぞれ比較し、全て一致する場合は処理を終了し、少なくとも一方が一致しない場合はステップＳ３３１０に進む。
【０２５２】
また、ステップＳ３３０５に続くステップＳ３３０８では、ホールに対するメタデータを動的に生成する。すなわち、ホールメタデータのデータ非依存部分をｐが指すセグメントメタデータブロックのセグメントメタデータ（ｊ）の値に、チェックサムをサイズｇ０（ｓ）のホール（バイト値０で埋められた領域）に対する値にそれぞれ設定する。
【０２５３】
続いて、ステップＳ３３０９において、ｇとｇ０（ｓ）の値、Ｍとホールメタデータの値をそれぞれ比較し、全て一致する場合は処理を終了する。少なくとも一方が一致しない場合はステップＳ３３１０に進む。
【０２５４】
ステップＳ３３１０では、ブロック転送メッセージ２２にブロックデータのエントリを追加する。すなわち、新たなブロック数Ｔをブロック数２２０５に１を加えた値とし、ブロック数２２０５にＴを、ブロック開始オフセット２２０６のエントリＴ−１にｓを、ブロックサイズ２２０７のエントリＴ−１にｇ０（ｓ）を、ブロックデータ２２０８のエントリＴ−１に当該ファイルデータブロックの内容をそれぞれ設定し、終了する。
【０２５５】
以上のように、ファイル更新に伴ってファイルシステム管理手段１０５、２０５から呼び出され、ブロック毎の更新の有無を判定するためのメタデータを格納するブロックを木構造状に維持するメタデータブロック管理手段１０６、２０６を備えるので、ファイル複製の際に更新されていないブロックを読み出すことなく更新ブロックを検出することができ、高速なファイル複製を実現することができる。
【０２５６】
また、メタデータブロックの格納先としてデータと同じ領域を用いるので追加の記憶領域を必要としない。また、メタデータの木構造を互いに比較する複製元ファイル複製制御手段１０７および複製先ファイル複製制御手段２０７を備えるので、更新されていないブロックに関する比較を避けることができる。また、複製元と複製先でメタデータ木構造の異なる階層を交互に比較するので、一方でのみ比較を行う場合に比べてメッセージ交換の回数を半数にすることができる。また、メタデータブロック管理手段１０６、２０６は、ファイルにホールが存在することを許すので、消費するメタデータブロック領域やメタデータブロックの更新に要する時間を最小限に止めることができる。また、チェックサム木の下位階層レベルから上位階層レベルのチェックサムを計算するので、ファイルへの書き込みの際にファイルデータブロックを読み出すことなく上位のチェックサムを更新することができる。
【０２５７】
実施の形態２．
この発明の実施の形態２に係るファイル複製システムについて図３４及び図３５を参照しながら説明する。図３４は、この発明の実施の形態２に係るファイル複製システムの構成を示す図である。
【０２５８】
図３４において、この実施の形態２に係るファイル複製システムは、複製元システムまたは複製先システム１００Ａを設け、複製元として動作する際は複製元ファイル複製制御手段１０７Ａが、複製先として動作する時は複製先ファイル複製制御手段２０７Ａが動作する。
【０２５９】
ディスク装置１０８Ａおよびディスク装置１０８Ｂは、独立なディスク装置であり、ディスク装置１０８Ａには、ファイル毎にファイル管理情報（ｉノード）１０１Ａが格納され、ファイルの内容は複数のファイルデータブロック１０２Ａ〜Ｄに格納される。ディスク装置１０８Ｂには、ファイル毎にファイルメタデータ管理情報１０１Ｂが格納され、ファイルのブロック毎のメタデータを階層的に構成するブロックメタデータブロック１０３Ａ〜Ｂとセグメントメタデータブロック１０４Ａが格納される。ファイルデータブロック１０２Ａ〜Ｄ、ブロックメタデータブロック１０３Ａ〜Ｂ、セグメントメタデータブロック１０４Ａは、上記の実施の形態１で図１に示したものと同一である。なお、ディスク装置１０８Ａおよびディスク装置１０８Ｂは、論理的に独立であれば良く、物理的に同一のディスク装置を分割した別パーティションに対応していても良い。
【０２６０】
ディスク装置１０８Ａのファイル管理情報（ｉノード）１０１Ａとファイルデータブロック１０２Ａ〜Ｄは、ファイルシステム管理手段１０５Ａにより格納・割当・解放される。ファイル管理情報（ｉノード）１０１Ａおよびファイルシステム管理手段１０５Ａは、公知のファイルシステムにおけるデータ構造および制御ソフトウェアに対応し、メタデータブロックについては関知しない点が上記の実施の形態１と異なる。
【０２６１】
ディスク装置１０８Ｂのファイルメタデータ管理情報１０１Ｂ、ブロックメタデータブロック１０３Ａ〜Ｂ、およびセグメントメタデータブロック１０４Ａは、メタデータブロック管理手段１０６Ａにより格納・割当・解放される。また、メタデータブロック管理手段１０６Ａは、ディスクＩ／Ｏ要求を受け取り、当該要求をファイルシステム管理手段１０５Ａに受け渡すと共に、ファイルへの書き込みや切り詰めが要求された場合には上記の実施の形態１におけるメタデータブロック管理手段１０６と同様にメタデータブロック木構造の更新を行う。
【０２６２】
複製元ファイル複製制御手段１０７Ａおよび複製先ファイル複製制御手段２０７Ａは、それぞれ上記の実施の形態１の複製元ファイル複製制御手段１０７および複製先ファイル複製制御手段２０７に対応するが、メタデータブロック木構造とファイルデータブロックが異なるディスク装置上に存在することを前提として動作する点が異なる。
【０２６３】
図３５は、この発明の実施の形態２に係るファイル複製システムのディスク装置内のファイルメタデータ管理情報の構成を示す図である。
【０２６４】
ファイルメタデータ管理情報１０１Ｂは、メタデータブロック管理手段１０６Ａによりディスク装置１０８Ｂに格納される。ファイルメタデータ管理情報１０１Ｂは、ファイルサイズ１０１１、ファイルメタデータ（ファイルに対する更新を検出可能な、最終更新日時、世代番号、チェックサムなどの情報）１０１２、およびメタデータブロック木構造の根を指すルートメタデータブロックアドレス１０１３からなる。上記実施の形態１でファイル管理情報（ｉノード）１０１に含まれていた情報を取り出した形になっている。
【０２６５】
メタデータブロック管理手段１０６Ａは、上記の実施の形態１におけるメタデータブロック管理手段１０６と異なり、ファイル管理情報（ｉノード）１０１Ａではなくファイルメタデータ管理情報１０１Ｂを参照して動作する。また、ディスク装置１０８Ｂの記憶領域の割当・解放を行うと共に、Ｉ／Ｏ要求をファイルシステム管理手段１０５Ａに受け渡す点が上記の実施の形態１と異なる。
【０２６６】
以上のように、ファイルのブロック毎の更新検出を行うためのメタデータブロック木構造の情報をファイル本体とは異なるディスク装置１０８Ｂに格納すると共に、公知のファイルシステムの上位にメタデータブロック管理手段１０６Ａを設けたので、公知のファイルシステムに影響を及ぼすことなくファイル複製の高速化を実現することが可能になる。
【０２６７】
実施の形態３．
この発明の実施の形態３に係るファイル複製システムについて図３６を参照しながら説明する。図３６は、この発明の実施の形態３に係るファイル複製システムのディスク装置に格納されるファイルデータおよびメタデータの構成を示す図である。その他の構成は、上記の実施の形態２と同様とする。
【０２６８】
図３６において、ファイル本体１０２０は、上記の実施の形態２と同様である。階層レベル０のブロックメタデータファイル１０３０は、上記の実施の形態２におけるブロックメタデータブロックのブロックメタデータ１０３３を、対応するブロックのオフセット順に全て格納したファイルである。階層レベル１のセグメントメタデータファイル１０４０および階層レベル２のセグメントメタデータファイル１０５０は、同様にそれぞれ階層レベル１のセグメントメタデータブロック（図２の１０４Ｂ〜Ｃなど）のメタデータおよび階層レベル２のセグメントメタデータブロック（図２の１０４Ａなど）のメタデータをオフセット順に全て格納したファイルである。また、ファイルメタデータファイル１０６０は、ファイルメタデータを格納し、上記の実施の形態２のファイルメタデータ管理情報１０１Ｂに対応する。
【０２６９】
メタデータファイル（１０３０、１０４０、１０５０）のメタデータエントリには論理オフセットによりランダムアクセス可能なので、階層レベル間をつなぐブロックアドレス（図５の１０４４）は不要である。また、メタデータファイルのサイズからメタデータエントリの数も判明するため有効エントリ数（図４の１０３２や図５の１０４２）も含まない。
【０２７０】
ファイル本体１０２０とメタデータファイル（１０３０、１０４０、１０５０、１０６０）は、上記の実施の形態２のように異なるディスク装置に格納するか、上記の実施の形態１のように同じディスク装置に格納する。同じディスク装置に格納する場合は両者の識別や対応付けが容易なように、メタデータファイルに特殊なファイル名を用いる。例えばファイル本体の名前が／ｆｏｏ／ｂａｒの時、各メタデータファイルを／．ｍｅｔａ／ｌｅｖｅｌ０／ｆｏｏ／ｂａｒ、／．ｍｅｔａ／ｌｅｖｅｌ１／ｆｏｏ／ｂａｒ、／．ｍｅｔａ／ｌｅｖｅｌ２／ｆｏｏ／ｂａｒなどとする。あるいは、ファイルを識別する番号、例えばｅｘｔ３などのファイルシステムにおけるｉノード番号を用いて、／．ｍｅｔａ／ｌｅｖｅｌ０／‘ｉノード番号’としても良い。
【０２７１】
以上のように、ファイルのブロック毎の更新検出を行うためのメタデータブロック木構造の情報をファイルとしてディスク装置に格納するので、ディスク装置の記憶領域管理に公知のファイルシステムを利用することが可能になり、容易に高速なファイル複製システムを実現することができる。
【０２７２】
実施の形態４．
この発明の実施の形態４に係るファイル複製システムについて図３７を参照しながら説明する。図３７は、この発明の実施の形態４に係るファイル複製システムの構成を示す図である。
【０２７３】
図３７において、この実施の形態４に係るファイル複製システムは、複製元システム（コンピュータ）または複製先システム（コンピュータ）１００Ｂと、ディスク装置１０８Ａと、ファイル複製補助装置１００Ｃとが設けられている。
【０２７４】
複製元として動作する際は複製元ファイル複製制御手段１０７Ｂが、複製先として動作する時は複製先ファイル複製制御手段２０７Ｂが動作する。
【０２７５】
ディスク装置１０８Ａは、複製元コンピュータまたは複製先コンピュータ１００ＢとディスクＩ／Ｆバス１０８０を介して接続されており、上記の実施の形態２におけるファイル管理情報（ｉノード）１０１Ａやファイルデータブロック１０２が格納される。ディスクＩ／Ｆバス１０８０は、例えばＳＣＳＩなど複数の装置を接続可能なものとする。ディスクＩ／Ｆバス１０８０には、さらにファイル複製補助装置１００Ｃが接続される。
【０２７６】
ファイル複製補助装置１００Ｃは、ディスク装置１０８Ｂと、メタデータブロック管理手段１０６Ｂ、ディスクＩ／Ｆバス監視手段１０６Ｃ、及びメタデータブロック読出手段１０６Ｄからなる。ディスク装置１０８Ｂには、上記の実施の形態２と同様、ファイルメタデータ管理情報１０１Ｂ、セグメントメタデータブロック１０４Ａ、およびブロックメタデータブロック１０３Ａ〜Ｂが格納される。
【０２７７】
ディスクＩ／Ｆバス監視手段１０６Ｃは、ディスクＩ／Ｆバス上を複製元コンピュータまたは複製先コンピュータ１００Ｂからディスク装置１０８Ａに対して送付されるコマンドを監視し、書き込みコマンドを検出するとそのブロックアドレスや内容をメタデータブロック管理手段１０６Ｂに通知する。メタデータブロック管理手段１０６Ｂは、ディスク装置１０８Ａ全体を１つのファイルとみなし、ブロックアドレスをファイルオフセットとみなして単一のメタデータブロック木構造を維持する。ディスクＩ／Ｆバス１０８０上にさらに別のディスク装置が接続されている場合は、ディスク装置毎にメタデータブロック木構造を作成する。
【０２７８】
ディスク装置１０８Ｂ上のメタデータブロックは、メタデータブロック読出手段１０６Ｄを介して複製元コンピュータまたは複製先コンピュータ１００Ｂから読み出すことができ、複製元ファイル複製制御手段１０７Ｂや複製先ファイル複製制御手段２０７Ｂはメタデータをファイル複製補助装置１００Ｃのメタデータブロック読出手段１０６Ｄから、ファイルデータブロックをディスク装置１０８Ａから読み出して更新検出・データ転送を行う。
【０２７９】
以上のように、ディスクＩ／Ｆバス１０８０を監視し、書き込みを自動的に検出してディスク装置毎のメタデータブロック木構造を更新するファイル複製補助装置１００Ｃを用いるので、従来のファイルシステムやディスクＩ／Ｏに変更を加えることなく高速なファイル複製を実現することができる。
【０２８０】
実施の形態５．
この発明の実施の形態５に係るファイル複製システムについて図３８及び図３９を参照しながら説明する。図３８は、この発明の実施の形態５に係るファイル複製システムのメタデータブロック管理手段の構成を示す図である。その他の構成は、上記の実施の形態２と同様とする。
【０２８１】
図３８において、Ｉ／Ｏ要求受付手段１０６０は、受け付けたディスクＩ／Ｏ要求をファイルシステム管理手段１０５Ａに渡すと共に、当該要求がファイルへの書きこみまたはファイルの切り詰めを指示している場合はファイル更新ログ追加手段１０６１を起動する。ファイル更新ログ追加手段１０６１は、ディスク装置上のファイル更新ログ情報に当該Ｉ／Ｏ要求に基づく情報を追加する。ファイル更新ログマージ手段１０６３は、ディスクＩ／Ｏとは独立に動作し、ファイル更新ログ情報１０６２中の同一ファイル・同一ブロックに対する更新情報をまとめ、最終的に効果を持つエントリのみを残す。ファイル更新ログ反映手段１０６４は、ファイル更新ログマージ手段１０６３の出力に従い、メタデータブロック木構造の更新を行う。
【０２８２】
図３９は、この発明の実施の形態５に係るファイル複製システムのメタデータブロック管理手段のファイル更新ログ情報の構成を示す図である。
【０２８３】
図３９において、ファイル更新ログ情報１０６２は、タイムスタンプ１０６２１、操作種別１０６２２、ファイル識別子１０６２３、開始オフセット１０６２４、サイズ１０６２５、及び世代番号１０６２６からなる。タイムスタンプ１０６２１は、ファイル識別子１０６２３、開始オフセット１０６２４で指定されるブロックに対する複数回の操作を順序付け、最終的に効果を持つものを残すためにファイル更新ログマージ手段１０６３により使用されると共に、当該ブロックに対する最終更新日時として直接メタデータに反映される。ブロックのチェックサムは、開始オフセット１０６２４で指定されるファイルデータブロックを読み込むことで算出される。また、操作種別１０６２２は、書き込みと切り詰めを識別するための情報を含む。
【０２８４】
ファイル更新ログマージ手段１０６３を実行するタイミングとしては、一定時間毎、一定数のファイル更新ログ情報１０６２を書き込んだ時、または、複製元ファイル複製制御手段１０７Ａや複製先ファイル複製制御手段２０７Ａが動作する前、などを用いることができる。
【０２８５】
以上のようにファイル更新やファイル切り詰めの際に操作の概要のみを記録するファイル更新ログ追加手段１０６１と、同一ファイル・同一ブロックに対する複数の操作を１つにまとめるファイル更新ログマージ手段１０６３を備えるので、通常のＩ／Ｏ操作に対するオーバヘッドを軽減し、頻繁にアクセスされるファイルに対するスループットを向上することができる。
【０２８６】
なお、更新検出のためのメタデータとしてチェックサムのみを用いる場合は、ファイルのブロック毎に設けた更新フラグをファイル書き込みの際にセットし、一定時間毎あるいは複製元ファイル複製制御手段１０７Ａや複製先ファイル複製制御手段２０７Ａが動作する前にファイルの更新フラグを走査し、更新フラグがセットされているブロックについてチェックサムを更新するという実現方式を取っても良い。
【０２８７】
実施の形態６．
この発明の実施の形態６に係るファイル複製システムについて図４０を参照しながら説明する。図４０は、この発明の実施の形態６に係るファイル複製システムのセグメント／ブロックメタデータブロックの構成を示す図である。その他の構成は、上記の実施の形態１や実施の形態２と同様とする。
【０２８８】
図４０において、階層レベル２のセグメントメタデータブロック１０４Ａや階層レベル１のセグメントメタデータブロック１０４Ｃは、最終エントリを除いて下位メタデータブロックアドレスが有効になっておらず、各エントリに対応するセグメントに関するメタデータのみを保持する。
【０２８９】
メタデータブロック管理手段１０６や１０６Ａは、セグメントメタデータブロック１０４に新たなエントリを追加する際に、最終エントリ以外の下位メタデータブロックを再帰的に解放し、下位メタデータブロックアドレスの当該エントリに無効値を設定する。複製元ファイル複製制御手段１０７（または１０７Ａ）や複製先ファイル複製制御手段２０７（または２０７Ａ）は、下位メタデータブロックアドレスが無効なセグメントの更新を検出した際は、セグメント全体をデータ転送の対象とする。
【０２９０】
以上のように、ファイルの末尾に近いセグメントメタデータブロックのみを割り当てることで、追加書き込みが主体の大規模なファイルが作成される状況において、ほとんど更新されないメタデータブロックの割り当てを避けることができ、メタデータブロックが消費するディスク装置の記憶領域を削減することができる。
【０２９１】
実施の形態７．
この発明の実施の形態７に係るファイル複製システムについて図４１を参照しながら説明する。図４１は、この発明の実施の形態７に係るファイル複製システムのディスク装置に格納される情報を示す図である。
【０２９２】
この図４１は、上記の実施の形態１に追加して、ディスク装置１０８に格納される情報を示す。図４１において、ファイルシステムスーパーブロック９０１は、ディスク装置１０８上に作成されたファイルシステムに関する管理情報を保持しており、ファイルシステム管理手段１０５により管理される。
【０２９３】
各ファイルに対応するｉノード（ファイル管理情報）９０２Ａ〜Ｇは、それぞれ固有のｉノード番号を付与され、ファイルシステムスーパーブロック９０１から全てのｉノード９０２にアクセス可能となっている。ファイルメタデータブロック９０３Ａ〜Ｄは、ブロックメタデータブロック１０３と同様に、複数のファイルに関するファイルメタデータ１０１３を格納する固定長ブロックであり、ファイル群メタデータブロック９０４Ａ〜Ｃは、ｉノード番号に基づいて複数ファイルにまたがるメタデータを階層的に格納する固定長ブロックである。ファイルメタデータブロック９０３とファイル群メタデータブロック９０４は木構造を構成し、ルートとなる単一のファイル群メタデータブロック９０４Ａのブロックアドレスはファイルシステムスーパーブロック９０１に格納される。
【０２９４】
メタデータブロック管理手段１０６は、ファイルを更新し、ブロック毎のメタデータブロック木構造の更新を行った後で、当該ファイルのｉノード番号に基づいてファイル群メタデータブロック９０４の木構造をルートメタデータブロック９０４Ａから辿り、ファイル群メタデータブロック９０４およびファイルメタデータブロック９０３のメタデータエントリの更新を行う。複製元ファイル複製制御手段１０７や複製先ファイル複製制御手段２０７は、ファイルシステム全体の複製を指示するファイル複製開始メッセージによりファイル群メタデータブロックの階層的な比較を行い、更新のあった全てのファイルに関する更新ブロックの転送を実行する。
【０２９５】
以上のように複数ファイルに関して更新の有無を判定する情報を階層的に保持するので、ファイルシステム全体を対象とするファイル複製を高速に実現することができる。
【図面の簡単な説明】
【０２９６】
【図１】この発明の実施の形態１に係るファイル複製システムの構成を示す図である。
【図２】この発明の実施の形態１に係るファイル複製システムのディスク装置の別の構成を示す図である。
【図３】この発明の実施の形態１に係るファイル複製システムのディスク装置内のファイル管理情報の構成を示す図である。
【図４】この発明の実施の形態１に係るファイル複製システムのディスク装置内のブロックメタデータブロックの構成を示す図である。
【図５】この発明の実施の形態１に係るファイル複製システムのディスク装置内のセグメントメタデータブロックの構成を示す図である。
【図６】この発明の実施の形態１に係るファイル複製システムのメタデータブロック管理手段の動作を説明するための図である。
【図７】この発明の実施の形態１に係るファイル複製システムのメタデータブロック管理手段のファイル書き込み動作の概要を示すフローチャートである。
【図８】この発明の実施の形態１に係るファイル複製システムのメタデータブロック管理手段のファイル書き込み動作のステップＳ７０３の詳細な動作を示すフローチャートである。
【図９】この発明の実施の形態１に係るファイル複製システムのメタデータブロック管理手段のファイル書き込み動作のステップＳ７０４の詳細な動作を示すフローチャートである。
【図１０】この発明の実施の形態１に係るファイル複製システムのメタデータブロック管理手段のファイル書き込み動作のステップＳ７０５の詳細な動作を示すフローチャートである。
【図１１】この発明の実施の形態１に係るファイル複製システムのメタデータブロック管理手段のファイル書き込み動作のステップＳ７０６の詳細な動作を示すフローチャートである。
【図１２】この発明の実施の形態１に係るファイル複製システムのメタデータブロック管理手段のファイルサイズの切り詰め動作の概要を示すフローチャートである。
【図１３】この発明の実施の形態１に係るファイル複製システムのメタデータブロック管理手段のファイルサイズの切り詰め動作のステップＳ１２０３の詳細な動作を示すフローチャートである。
【図１４】この発明の実施の形態１に係るファイル複製システムのメタデータブロック管理手段のファイルサイズの切り詰め動作のステップＳ１２０４の詳細な動作を示すフローチャートである。
【図１５】この発明の実施の形態１に係るファイル複製システムの複製元システムの複製元ファイル複製制御手段及び複製先システムの複製先ファイル複製制御手段の動作を説明するための図である。
【図１６】この発明の実施の形態１に係るファイル複製システムの複製元システム及び複製先システムのメッセージ交換のタイミングを説明するための図である。
【図１７】この発明の実施の形態１に係るファイル複製システムの複製先システムの複製先ファイル複製制御手段から複製元システムの複製元ファイル複製制御手段へ送られるファイル複製開始メッセージの構成を示す図である。
【図１８】この発明の実施の形態１に係るファイル複製システムの複製元システムの複製元ファイル複製制御手段から複製先システムの複製先ファイル複製制御手段へ送られるファイル一致応答メッセージの構成を示す図である。
【図１９】この発明の実施の形態１に係るファイル複製システムの複製元システムの複製元ファイル複製制御手段から複製先システムの複製先ファイル複製制御手段へ送られるファイル削除応答メッセージの構成を示す図である。
【図２０】この発明の実施の形態１に係るファイル複製システムの複製元システムの複製元ファイル複製制御手段と複製先システムの複製先ファイル複製制御手段の間で相互に送られるセグメントメタデータメッセージの構成を示す図である。
【図２１】この発明の実施の形態１に係るファイル複製システムの複製先システムの複製先ファイル複製制御手段から複製元システムの複製元ファイル複製制御手段へ送られるブロック転送要求メッセージの構成を示す図である。
【図２２】この発明の実施の形態１に係るファイル複製システムの複製元システムの複製元ファイル複製制御手段から複製先システムの複製先ファイル複製制御手段へ送られるブロック転送メッセージの構成を示す図である。
【図２３】この発明の実施の形態１に係るファイル複製システムの複製元システムの複製元ファイル複製制御手段の動作の概要を示すフローチャートである。
【図２４】この発明の実施の形態１に係るファイル複製システムの複製先システムの複製先ファイル複製制御手段の動作の概要を示すフローチャートである。
【図２５】この発明の実施の形態１に係るファイル複製システムの複製元ファイル複製制御手段のステップＳ２３０６の詳細な動作を示すフローチャートである。
【図２６】図２５のステップＳ２５０６及び図２８のステップＳ２８０９の詳細な動作を示すフローチャートである。
【図２７】この発明の実施の形態１に係るファイル複製システムの複製元ファイル複製制御手段のステップＳ２３１１及び複製先ファイル複製制御手段のステップＳ２４０６の詳細な動作を示すフローチャートである。
【図２８】図２７のステップＳ２７０４の詳細な動作を示すフローチャートである。
【図２９】図２８のステップＳ２８１３の詳細な動作を示すフローチャートである。
【図３０】この発明の実施の形態１に係るファイル複製システムの複製先ファイル複製制御手段のステップＳ２４０７の詳細な動作を示すフローチャートである。
【図３１】図３０のステップＳ３００４の詳細な動作を示すフローチャートである。
【図３２】この発明の実施の形態１に係るファイル複製システムの複製元ファイル複製制御手段のステップＳ２３１２の詳細な動作を示すフローチャートである。
【図３３】図３２のステップＳ３２０４の詳細な動作を示すフローチャートである。
【図３４】この発明の実施の形態２に係るファイル複製システムの構成を示す図である。
【図３５】この発明の実施の形態２に係るファイル複製システムのディスク装置内のファイルメタデータ管理情報の構成を示す図である。
【図３６】この発明の実施の形態３に係るファイル複製システムのディスク装置に格納されるファイルデータおよびメタデータの構成を示す図である。
【図３７】この発明の実施の形態４に係るファイル複製システムの構成を示す図である。
【図３８】この発明の実施の形態５に係るファイル複製システムのメタデータブロック管理手段の構成を示す図である。
【図３９】この発明の実施の形態５に係るファイル複製システムのメタデータブロック管理手段のファイル更新ログ情報の構成を示す図である。
【図４０】この発明の実施の形態６に係るファイル複製システムのセグメント／ブロックメタデータブロックの構成を示す図である。
【図４１】この発明の実施の形態７に係るファイル複製システムのディスク装置に格納される情報を示す図である。
【符号の説明】
【０２９７】
１００  複製元システム、１００Ｃ  ファイル複製補助装置、１０５、１０５Ａ  ファイルシステム管理手段、１０６、１０６Ａ、１０６Ｂ  メタデータブロック管理手段、１０６Ｃ  ディスクＩ／Ｆバス監視手段、１０６Ｄ  メタデータブロック読出手段、１０７、１０７Ａ、１０７Ｂ  複製元ファイル複製制御手段、１０８、１０８Ａ、１０８Ｂ  ディスク装置、２００  複製先システム、２０５  ファイルシステム管理手段、２０６  メタデータブロック管理手段、２０７、２０７Ａ、２０７Ｂ  複製先ファイル複製制御手段、２０８  ディスク装置、３００  ネットワーク、１０６０  Ｉ／Ｏ要求受付手段、１０６１  ファイル更新ログ追加手段、１０６２  ファイル更新ログ情報、１０６３  ファイル更新ログマージ手段、１０６４  ファイル更新ログ反映手段、１０８０  ディスクＩ／Ｆバス。
【図１】
2007200029.tif 000013
【図２】
2007200029.tif 000014
【図３】
2007200029.tif 000015
【図４】
2007200029.tif 000016
【図５】
2007200029.tif 000017
【図６】
2007200029.tif 000018
【図７】
2007200029.tif 000019
【図８】
2007200029.tif 000020
【図９】
2007200029.tif 000021
【図１０】
2007200029.tif 000022
【図１１】
2007200029.tif 000023
【図１２】
2007200029.tif 000024
【図１３】
2007200029.tif 000025
【図１４】
2007200029.tif 000026
【図１５】
2007200029.tif 000027
【図１６】
2007200029.tif 000028
【図１７】
2007200029.tif 000029
【図１８】
2007200029.tif 000030
【図１９】
2007200029.tif 000031
【図２０】
2007200029.tif 000032
【図２１】
2007200029.tif 000033
【図２２】
2007200029.tif 000034
【図２３】
2007200029.tif 000035
【図２４】
2007200029.tif 000036
【図２５】
2007200029.tif 000037
【図２６】
2007200029.tif 000038
【図２７】
2007200029.tif 000039
【図２８】
2007200029.tif 000040
【図２９】
2007200029.tif 000041
【図３０】
2007200029.tif 000042
【図３１】
2007200029.tif 000043
【図３２】
2007200029.tif 000044
【図３３】
2007200029.tif 000045
【図３４】
2007200029.tif 000046
【図３５】
2007200029.tif 000047
【図３６】
2007200029.tif 000048
【図３７】
2007200029.tif 000049
【図３８】
2007200029.tif 000050
【図３９】
2007200029.tif 000051
【図４０】
2007200029.tif 000052
【図４１】
2007200029.tif 000053