(57)【要約】  使用のためゴーストされたファイルを再構成するために、コンピューティングデバイス上の単一のゴースティングフィルタは、ゴーストされたファイルのメタデータの中にゴースティング情報を配置し、コンピューティングデバイスの特定のゴースティングマネージャの識別をゴースティング情報内に配置し、識別されたゴースティングマネージャはゴーストされたファイルに対して責任を負う。その後、ゴースティングフィルタは識別されたゴースティングマネージャに、対応する代替ロケーションからゴーストされたファイルのデータを取得するための要求を通信し、識別されたゴースティングマネージャは実際に前述の代替ロケーションから前述の要求されたデータを取得する。その後、識別されたゴースティングマネージャから、ゴーストされたファイルの要求されたデータを受信すると、ゴースティングフィルタは受信されたデータをゴーストされたファイルに再構成する。単一のゴースティングフィルタは、コンピューティングデバイスのすべてのゴースティングマネージャに共通のものである。
2009501396.tif 000002
【特許請求の範囲】
【請求項１】
ストレージボリュームと、前記ストレージボリュームを管理するファイルシステムと、前記ファイルシステムによって前記ストレージボリュームに記憶され、前述のファイルシステムによってアクセスされる複数のファイルとを有するコンピューティングデバイスに関連した方法であり、各ファイルがデータと前記データに関連したメタデータとを含むように定義され、前記ファイルの前記データの少なくとも一部が前記ファイルから除去されており、前記ファイルのデータが実質的に前記ボリューム上のいかなるスペースも占有することはなく、前記ファイルが縮小された、ゴーストされた形態となるように、複数の代替ロケーションのうちの１つに記憶されており、前記コンピューティングデバイスが前記複数の代替ロケーションの各々について対応のゴースティングマネージャをさらに有し、各ゴースティングマネージャは前記代替ロケーションと通信するために用いられ、各ゴースティングマネージャは前記代替ロケーションに対応しており、使用のためゴーストされたファイルを再構成するための、前記コンピューティングデバイス上に単一のゴースティングフィルタを含む方法であって、
前記ゴーストされたファイルの前記メタデータの中にゴースティング情報を配置し、
前記コンピューティングデバイスの特定のゴースティングマネージャの識別を前記ゴースティング情報内に配置し、
なお、ここで前記識別されたゴースティングマネージャが前記ゴーストされたファイルに対して責任を負い、
前記対応する代替ロケーションから前記ゴーストされたファイルのデータを取得するための要求を前記識別されたゴースティングマネージャに通信し、それによって前記識別されたゴースティングマネージャが実際に前述の代替ロケーションから前述の要求されたデータを取得し、
前記識別されたゴースティングマネージャから、前記ゴーストされたファイルの前記要求されたデータを受信し、
当該受信されたデータを前記ゴーストされたファイルに再構成することによって、
単一の前記ゴースティングフィルタが、前記コンピューティングデバイスの前記ゴースティングマネージャのすべてに対して共通となることを特徴とする方法。
【請求項２】
前記対応する代替ロケーションから前記ゴーストされたファイルの前記データの一部を取得するための要求を前記識別されたゴースティングマネージャに通信するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記対応する代替ロケーションから前記ゴーストされたファイルの前記データのすべてを取得するための要求を前記識別されたゴースティングマネージャに通信するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記コンピューティングデバイスはブランチのサーバであり、各代替ロケーションは、複数の前述のブランチのサーバにサービスを提供する、前記ブランチのサーバから離れたハブサーバであることを特徴とする請求項１に記載の方法。
【請求項５】
前記ボリュームに存在する前記ゴーストされたファイルの前記メタデータは実質的に、ゴースティングの前に前記ファイルからのすべての前記メタデータを含み、また、前記代替ロケーションから前記ファイルのためのデータを取り出すために用いられる前記ゴースティング情報も含有することを特徴とする請求項１に記載の方法。
【請求項６】
前記ファイルは主データと副データとを含んでいるデータを含むように定義され、前記主データが前記副データよりも大きく、前記ファイルの少なくとも前記主データが前記ファイルから除去されており、前記代替ロケーションに記憶されていることを特徴とする請求項１に記載の方法。
【請求項７】
ストレージボリュームと、前記ストレージボリュームを管理するファイルシステムと、前記ファイルシステムによって前記ストレージボリュームに記憶され、前述のファイルシステムによってアクセスされる複数のファイルとを有するコンピューティングデバイスに関連した方法であり、各ファイルがデータと前記データに関連したメタデータとを含むように定義され、前記ファイルの前記データの少なくとも一部が前記ファイルから除去されており、前記ファイルのデータが実質的に前記ボリューム上のいかなるスペースも占有することはなく、前記ファイルが縮小された、ゴーストされた形態となるように、前記ファイルの前記データの少なくとも一部が複数の代替ロケーションのうちの１つに記憶されており、前記コンピューティングデバイスが前記複数の代替ロケーションの各々について対応のゴースティングマネージャをさらに有し、各ゴースティングマネージャは前記代替ロケーションと通信するために用いられ、各ゴースティングマネージャは前記代替ロケーションに対応しており、使用のためゴーストされたファイルを再構成するための方法であって、
前記ゴーストされたファイルの前記メタデータの中にゴースティング情報を配置し、
前記コンピューティングデバイスの特定のゴースティングマネージャの識別を前記ゴースティング情報内に配置し、
なお、ここで前記識別されたゴースティングマネージャが前記ゴーストされたファイルに対して責任を負い、
前記対応する代替ロケーションから前記ゴーストされたファイルのデータを取得するための要求を前記識別されたゴースティングマネージャに通信し、それによって前記識別されたゴースティングマネージャが実際に前述の代替ロケーションから前述の要求されたデータを取得し
前記識別されたゴースティングマネージャから、前記ゴーストされたファイルの前記要求されたデータを受信し、
前記受信されたデータを前記ゴーストされたファイルに再構成することを特徴とする方法。
【請求項８】
前記対応する代替ロケーションから前記ゴーストされたファイルの前記データの一部を取得するための要求を前記識別されたゴースティングマネージャに通信するステップを含むことを特徴とする請求項７に記載の方法。
【請求項９】
前記対応する代替ロケーションから前記ゴーストされたファイルの前記データのすべてを取得するための要求を前記識別されたゴースティングマネージャに通信するステップを含むことを特徴とする請求項７に記載の方法。
【請求項１０】
前記コンピューティングデバイスはブランチのサーバであり、各代替ロケーションは、複数の前述のブランチのサーバにサービスを提供する、前記ブランチのサーバから離れたハブサーバであることを特徴とする請求項７に記載の方法。
【請求項１１】
前記ボリュームに存在する前記ゴーストされたファイルの前記メタデータは実質的に、ゴースティングの前に前記ファイルからのすべての前記メタデータを含み、また、前記代替ロケーションから前記ファイルのためのデータを取り出すために用いられる前記ゴースティング情報も含有することを特徴とする請求項７に記載の方法。
【請求項１２】
前記ファイルは主データと副データとを含んでいるデータを含むように定義され、前記主データが前記副データよりも大きく、前記ファイルの少なくとも前記主データが前記ファイルから除去されており、前記代替ロケーションに記憶されていることを特徴とする請求項７に記載の方法。
【請求項１３】
ストレージボリュームと、
前記ストレージボリュームを管理するファイルシステムと、
前記ファイルシステムによって前記ストレージボリュームに記憶され、前述のファイルシステムによってアクセスされる複数のファイルと
を有し、
なお、ここで、各ファイルがデータと前記データに関連したメタデータとを含むように定義され、前記ファイルの前記データの少なくとも一部が前記ファイルから除去されており、前記データが実質的に前記ボリューム上のいかなるスペースも占有することはなく、前記ファイルが縮小された、ゴーストされた形態となるように、前記ファイルの前記データの少なくとも一部が複数の代替ロケーションのうちの１つに記憶されており、
さらに、前記複数の代替ロケーションの各々について対応するゴースティングマネージャをさらに有し、
なお、ここで、前記代替ロケーションと通信するために用いられる各ゴースティングマネージャが前記代替ロケーションに対応しており、前記コンピューティングデバイス上の各ゴーストされたファイルが前記ファイルの前記メタデータの中にゴースティング情報を有しており、前記ゴースティング情報が前記コンピューティングデバイスの特定のゴースティングマネージャの識別を含み、前記識別されたゴースティングマネージャが前記ゴーストされたファイルに対して責任を負い、
前記コンピューティングデバイスの特定のゴースティングマネージャの識別を前記ファイルのゴースティング情報内に配置し、前記識別されたゴースティングマネージャが前記ゴーストされたファイルに対して責任を負い、前記対応する代替ロケーションから前記ゴーストされたファイルのデータを取得するための要求を前記識別されたゴースティングマネージャに通信し、前記識別されたゴースティングマネージャが実際に前述の代替ロケーションから前述の要求されたデータを取得し、前記取得されたデータを前記ゴーストされたファイルに再構成することによって各ゴーストされたファイルを、再構成することを特徴とするコンピューティングデバイス。
【請求項１４】
前記コンピューティングデバイスはブランチのサーバであり、各代替ロケーションは、複数の前述のブランチのサーバにサービスを提供する、前記ブランチのサーバから離れたハブサーバであることを特徴とする請求項１３に記載のコンピューティングデバイス。
【請求項１５】
前記ボリュームに存在する前記ゴーストされたファイルの前記メタデータは実質的に、ゴースティングの前に前記ファイルからのすべての前記メタデータを含み、また、前記代替ロケーションから前記ファイルのためのデータを取り出すために用いられる前記ゴースティング情報も含有することを特徴とする請求項１３に記載のコンピューティングデバイス。
【請求項１６】
前記ファイルは主データと副データとを含んでいるデータを含むように定義され、前記主データが前記副データよりも大きく、前記ファイルの少なくとも前記主データが前記ファイルから除去されており、前記代替ロケーションに記憶されていることを特徴とする請求項１３に記載のコンピューティングデバイス
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージボリュームに記憶されたコンピュータファイルからのデータを、ストレージボリューム上の空きスペースの代替ロケーションに移動または「ゴースト」することが可能なアーキテクチャおよび方法に関する。より詳細には、本発明は、ゴーストされたファイルのうちの残りのものがストレージボリュームにとどまり、代替ロケーションにあるゴーストされたデータが必要に応じて取り出され、ゴーストされたファイルに戻されてゴーストではないファイルとなることを可能にするアーキテクチャおよび方法に関する。
【背景技術】
【０００２】
パーソナルコンピュータ、コンピュータサーバまたはその他などのコンピューティングデバイスでは、知られているように、データは典型的にコンピューティングデバイスの１つまたは複数のローカルストレージボリュームに存在するローカルコンピュータファイルの形態で、コンピューティングデバイスに永続的に記憶される。これもまた知られているように、前述のストレージボリュームの各々はコンピュータデバイスまたはその他のハードドライブに存在してもよく、前述のストレージボリュームは、コンピューティングデバイスで動作するファイルシステムによってアクセスされるか、またはその他の方法で制御されることによって組織されてもよい。
【０００３】
時々、ストレージボリューム上のコンピュータファイルのうちの一部、多数、および場合によってはほとんどが関係のないものであり、「コールド」になっているとみなすことができるという場合がある。すなわち、前述のコールドファイルは、例えばある長さの時間にわたりアクセスされていない、および／またはある長さの時間にわたりアクセスされることはないかもしれず、したがってボリューム上の残りのものの中で、もしあるとしても僅かな価値しか持たない。
【０００４】
当然のことながら、特にボリューム上のスペースが求められる場合、前述のコールドファイルは単純にストレージボリュームから削除されることが可能である。しかしながら、ほとんどのユーザは単にスペースを作り出すためにファイルを削除することを嫌がるということを理解されたい。さらに、わかっている不使用状態のためだけにコールドファイルを削除することは、よくない慣習であると考えられる。いずれにせよ、必要であるとみなされず、必要になるとも思われないコールドファイルが、ある将来の時点でやはり必要となるかもしれないという場合は起こりうるし、また、そうなる場合があるだろう。
【０００５】
前述のような状況では、前述のコールドファイルがボリューム上でプレゼンスを維持することを可能にしながら、データを前述のコールドファイルから代替ロケーションに移動することによって、ボリューム上でスペースを作り出すことができるということが有用である。すなわち、データを前述のコールドファイルから代替ロケーションに移動することによってコールドファイルを「ゴースト」することができるということ、またはコールドファイルをボリューム上でより小さな「ゴースト」の形態のままにしておきながら、ファイル全体を代替ロケーションにコピーすることができるということが有用である。したがって、実際にコンピューティングデバイス上でゴーストされたファイルが必要とされる場合、前述のゴーストされたファイルのためのデータは代替ロケーションから取り出されてもよく、ゴーストされたファイルはそれに基づいて再構成されてもよく、前述の再構成されたファイルはその後用いられてもよい。
【０００６】
別のシナリオでは、組織またはその他のデータファイルが、おそらくはハブなどの中央ロケーションから、組織の複数の支店のロケーションで複製されるべきものであるという場合がある。例えば建築設計会社は、自社のすべての建築設計のファイルを会社の複数の支店のうちの任意の１つで利用可能にしたいと思うかもしれない。
【０００７】
前述のような状況では、ネットワーク化されたシステムは、各支店に対して各ファイルのコピーを複製し、すべてのファイルをすべての現在の支店で保持するように構成されることが可能である。前述のシステムでは、例えば集中ハブサーバは前述のファイルの各々を記憶し、ハブの各ファイルのコピーをネットワークを介して各支店のブランチのサーバまたはその他に分配するために、複製サービスが用いられる。しかしながら、組織のファイルの数が増えるにつれて、また各ファイルのサイズが大きくなるにつれて、また支店の数が増えるにつれて、ネットワーク上のトラフィックの量も、おそらくは利用可能な帯域幅を超える点まで増えるということが理解されよう。さらに、ハブサーバのすべてのファイルの全体のサイズが大きくなるにつれて、各ブランチのサーバには、ハブサーバから複製されるときに前述のファイルのすべてを記憶するために利用可能な十分なスペースがないという場合が実際にあるかもしれない。
【０００８】
しかしながら、前述のシナリオと同様に、特定の支店のブランチのサーバのコンピュータファイルのうちの一部、多数および場合によってはほとんどが関係のないものであり、不必要なものとみなすことができるという場合がある。前述の不必要なファイルは、例えば特定の支店には関係のない、おそらくは特定の支店からアクセスされることのない内容であり、したがって特定の支店のためのブランチのサーバで複製される価値は、もしあるとしても僅かしかないという内容に関連しているかもしれない。例えばペンシルバニア州ウィルケスベアにある建築設計会社の支店には、フロリダ州ボイトンビーチのその会社の支店によって処理されるプロジェクトに関する建築設計ファイルを持つ必要性は、もしあるとしても、おそらく僅かであろう。
【０００９】
前述のような状況では、先のシナリオと同様に、特定の支店に関連するファイルだけを特定の支店のブランチのサーバに全体的に記憶しながら、組織のハブサーバから入手可能なすべてのその他の関連性のないファイルを、前述の特定の支店のブランチのサーバに部分的にだけ記憶することができるということが有用である。したがって、先のシナリオと同様の方法で、特定の支店のブランチのサーバで関連性のないファイルを「ゴースト」し、各々の関連性のないファイルがより小さな、「ゴーストされた」形態でブランチのサーバに残すことを可能にすることが有用である。したがって、ここでもまた、実際にブランチのサーバでゴーストされたファイルが必要とされる場合、前述のゴーストされたファイルのためのデータをハブサーバから取り出してもよく、ゴーストされたファイルをそれに基づいて再構成してもよく、前述の再構成されたファイルをその後用いてもよい。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
したがって、ローカルボリュームまたはブランチのサーバなどのソースでファイルを複製またはゴーストすることが可能な方法およびメカニズムが必要とされている。その結果、データを代替ロケーションまたはハブサーバなどのシンクに記憶し、ソースのファイルを必要に応じて再構成することが可能となってソースのファイルが縮小またはゴーストされた形態となるからである。特に、前述のゴーストされたファイルを必要に応じて形成さし、再構成することが可能な方法およびメカニズムが必要とされている。
【課題を解決するための手段】
【００１１】
上述の必要性は、ストレージボリュームを有するコンピューティングデバイスと、ストレージボリュームを管理するファイルシステムと、ファイルシステムによってストレージボリューム上に記憶され、前述のファイルシステムによってアクセスされる複数のファイルとに関連した方法が提供される本発明によって、少なくとも部分的に満たされる。各ファイルはデータと、そのデータに関連するメタデータとを含むように定義され、ファイルのデータの少なくとも一部がファイルから除去されており、複数の代替ロケーションのうちの１つに記憶されているので、実質的にデータはボリューム上のいかなるスペースも占有することはなく、ファイルは縮小され、ゴーストされた形態である。さらに、コンピューティングデバイスは複数の代替ロケーションの各々のために対応するゴースティングマネージャを有しており、各ゴースティングマネージャは、それに対応する代替ロケーションと通信するために用いられるものである。
【００１２】
使用のためゴーストされたファイルを再構成するために、コンピューティングデバイス上の単一のゴースティングフィルタは、ゴーストされたファイルのメタデータの中にゴースティング情報を配置し、ゴースティング情報内にコンピューティングデバイスの特定のゴースティングマネージャの識別を配置し、ここで識別されるゴースティングマネージャはゴーストされたファイルに対して責任を負う。その後、ゴースティングフィルタはゴーストされたファイルのデータを対応する代替ロケーションから取得するための要求を識別されたゴースティングマネージャに通信し、識別されたゴースティングマネージャは実際に前述の要求されたデータを前述の代替ロケーションから取得する。識別されたゴースティングマネージャから要求されたゴーストされたファイルのデータを受信すると、ゴースティングフィルタは受信されたデータをゴーストされたファイルに再構成する。したがって、単一のゴースティングフィルタはコンピューティングデバイスのゴースティングマネージャのすべてに共通のものとなる。
【００１３】
上述の要約とともに以下の本発明の実施形態の詳細な説明は、添付の図面と合わせて読む場合により良く理解されるであろう。本発明を例示する目的で、現時点での好ましい実施形態が図面の中で示されている。しかしながら理解されるべきであるように、本発明は図面中で示されているものと寸分違わない配置および手段に限定されるわけではない。
【発明を実施するための最良の形態】
【００１４】
図１および以下の説明は、本発明および／または本発明の一部が実装されてもよい適切なコンピューティング環境の簡潔で一般的な説明を提供することを意図している。必要とされるわけではないが、本発明はクライアントワークステーションまたはサーバなどのコンピュータによって実行されるプログラムモジュールなどのコンピュータ実行可能命令の一般的なコンテキストの中で説明される。一般にプログラムモジュールは、特定のタスクを実行するか、または特定の抽象データ型を実装するルーティン、プログラム、オブジェクト、コンポーネント、データ、構造等を含む。さらに、本発明および／または本発明の一部を、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースか、またはプログラム可能な一般電子機器、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ等を含むその他のコンピュータシステム構成とともに実施してもよい。本発明をまた、通信ネットワークを通じてリンクされた遠隔の処理デバイスによってタスクが実行される分散型コンピューティング環境で実施してもよい。分散型のコンピューティング環境では、プログラムモジュールを局所および遠隔の両方のメモリストレージデバイスに配置してもよい。
【００１５】
図１に示されているように、例示的な汎用コンピューティングシステムは処理ユニット１２１と、システムメモリ１２２と、システムメモリを含む様々なシステムコンポーネントを処理ユニット１２１に接続するシステムバス１２３とを含んでいる従来のパーソナルコンピュータ１２０またはその他を含む。システムバス１２３は、メモリバス、メモリコントローラ、周辺バス、および任意の様々なバスアーキテクチャを使用するローカルバスを含む任意の複数の種類のバスであってもよい。システムメモリは読み取り専用メモリ（ＲＯＭ）１２４とランダムアクセスメモリ（ＲＡＭ）１２５とを含む。スタートアップの間などに、パーソナルコンピュータ１２０内の要素間で情報を転送することを助ける基本ルーティンを含む基本入力／出力システム１２６（ＢＩＯＳ）はＲＯＭ１２４の中に格納されている。
【００１６】
パーソナルコンピュータ１２０はさらに、ハードディスク（不図示）からの読み取りおよびハードディスクへの書き込みのためのハードディスクドライブ１２７、リムーバブル磁気ディスク１２９からの読み取りおよびリムーバブル磁気ディスク２９への書き込みのための磁気ディスク１２８、ならびにＣＤ−ＲＯＭまたはその他の光媒体などのリムーバブル光ディスク１３１からの読み取りおよびリムーバブル光ディスク１３１への書き込みのための光ディスクドライブ１３０を含んでもよい。ハードディスクドライブ１２７、磁気ディスクドライブ１２８および光ディスクドライブ１３０は、それぞれハードディスクドライブインタフェース１３２、磁気ディスクドライブインタフェース１３３および光ドライブインタフェース１３４によってシステムバス１２３に接続されている。ドライブおよびそれらの関連したコンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、およびパーソナルコンピュータ１２０のためのその他のデータの不揮発性ストレージを提供する。
【００１７】
本明細書で説明される例示的な環境はハードディスク、リムーバブル磁気ディスク１２９およびリムーバブル光ディスク１３１を用いるが、コンピュータによるアクセスが可能なデータを記憶することができる、その他の種類のコンピュータ可読媒体もまた例示的な動作環境の中で使用されてよいということを理解されたい。前述のようなその他の種類の媒体は磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）およびその他を含む。
【００１８】
複数のプログラムモジュールは、オペレーティングシステム１３５、１つまたは複数のアプリケーションプログラム１３６、別のプログラムモジュール１３７およびプログラムデータ１３８を含めてハードディスク、磁気ディスク１２９、光ディスク１３１、ＲＯＭ１２４またはＲＡＭ１２５に記憶されてもよい。ユーザはコマンドおよび情報を、キーボード１４０およびポインティングデバイス１４２などの入力デバイスを通じて入力する。その他の入力デバイス（不図示）はマイクロフォン、ジョイスティック、ゲームパッド、サテライトディスク、スキャナまたはその他を含んでもよい。これらの入力デバイスおよびその他の入力デバイスは、システムに接続されているシリアルポートインタフェース１４６を通じて処理ユニット１２１に接続されることがよくあるが、パラレルポート、ゲームポートまたはユニバーサルシリアルバス（ＵＳＢ）などのその他のインタフェースによって接続されてもよい。モニタ１４７またはその他の種類のディスプレイデバイスもまた、ビデオアダプタ１４８などのインタフェースを介してシステムバス１２３に接続される。モニタ１４７に加えて、パーソナルコンピュータは典型的に、スピーカおよびプリンタなどのその他の周辺出力デバイス（不図示）を含む。図１の例示的システムはまた、ホストアダプタ１５５、小型コンピュータシステムインタフェース（ＳＣＳＩ）バス１５６、およびＳＣＳＩバス１５６に接続された外部ストレージデバイス１６２を含む。
【００１９】
パーソナルコンピュータ１２０は、遠隔コンピュータ１４９などの１つまたは複数の遠隔コンピュータへの論理接続を使用してネットワーク化された環境の中で動作してもよい。遠隔コンピュータ１４９はその他のパーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイスまたはその他の一般ネットワークノードであってもよく、典型的には、パーソナルコンピュータ１２０に関して上で説明された要素のうちの多くのものか、またはすべてを含むが、図１にはメモリストレージデバイス１５０だけが示されている。図１に描かれている論理接続は、ローカルエリアネットワーク（ＬＡＮ）１５１とワイドエリアネットワーク（ＷＡＮ）１５２とを含む。前述のネットワーキング環境はオフィス、会社全体のコンピュータネットワーク、イントラネットおよびインターネットで普通に見られるものである。
【００２０】
ＬＡＮのネットワーキング環境で使用される場合、パーソナルコンピュータ１２０はネットワークインタフェースまたはアダプタ１５３を通じてＬＡＮ１５１に接続される。ＷＡＮのネットワーキング環境で使用される場合、パーソナルコンピュータ１２０は典型的にモデム１５４、またはインターネットなどのワイドエリアネットワーク１５２で通信を確立するためのその他の手段を含む。外部にあっても内部にあってもよいモデム１５４は、シリアルポート１４６を介してシステムバス１２３に接続されている。ネットワーク化された環境で、パーソナルコンピュータ１２０またはその一部に関して描かれているプログラムモジュールは、遠隔のメモリストレージデバイスに記憶されてもよい。示されているネットワーク接続は例示的なものであり、コンピュータ間で通信リンクを接続する別の手段が使用されてもよいということを理解されたい。
【００２１】
ファイルのゴースティングおよび再構成
ここで図２を参照すると、本発明では、パーソナルコンピュータまたはコンピュータサーバまたはその他のものなどのコンピューティングデバイス１０は、ハードドライブまたは永続的なＲＡＭドライブまたはその他のものなどのストレージボリューム１２を有し、ボリューム１２は複数のコンピュータファイル１４を記憶しており、ボリューム１２のファイル１４は、コンピューティングデバイス１０で動作するファイルシステム１６によって組織されるか、またはそれを通じてアクセスされるか、またはそれによってその他の方法で制御される。理解されるように、コンピューティングデバイス１０、ボリューム１２、ファイル１４およびファイルシステム１６は、本発明の精神および範囲から逸脱することなく、任意の種類のコンピューティングデバイス、ボリューム、ファイルおよびファイルシステムであってもよい。
【００２２】
本発明の１つの実施形態で、コンピューティングデバイス１０はパーソナルコンピュータまたはその他のものであり、コンピューティングデバイス１０のボリューム１２上のファイル１４のうちの少なくとも一部は、前述のファイル１４が例えばある長さの時間にわたりアクセスされていない、および／またはある長さの時間にわたりアクセスされることはないと思われ、したがってボリューム１２の残りのものの中で、もしあるとしても僅かな価値しか持たないという点でコールドであると判定されている。しかしながら、ファイル１４のコールド性は本発明の精神および範囲から逸脱することなく、任意の適切な方法で定義されてもよいということに留意されたい。
【００２３】
いずれにせよコールドであると判定されると、ファイル１４はボリューム１２から削除されることはないが、その代わりにファイル１４の少なくとも１部のデータ２０を代替ロケーション１８に移動することによって、ボリューム１２上でサイズを縮小される。前述の代替ロケーション１８はコンピューティングデバイスに対して局所的なものであってもよく、またはコンピューティングデバイスから離れていてもよい。一般に前述の代替ロケーション１８はコンピューティングデバイス１０に適切に接続されており、本発明の精神および範囲から逸脱することなく、任意の適切なストレージロケーションであってよい。例えば、代替ロケーション１８はストレージデバイス１０上の別のボリューム１２、別のコンピューティングデバイス１０上の別のボリューム１２、サーバのファイル保管場所、遠隔サーバの長期的ストレージデバイス、またはその他のものであってもよい。
【００２４】
その後代替ロケーション１８によって、ボリューム１２上のスペースは、前述のデータ２０を前述のコールドファイル１４から前述の代替ロケーション１８に移動することによって開放されてもよい。有意にも、データ２０は前述のコールドファイル１４から移動されるが、前述のコールドファイル１４は縮小されているか、またはゴーストされた形態ではあるが、ボリューム１２上に実在または「ゴースト」として残る。したがって実際に、ゴーストされたファイル１４がコンピューティングデバイス１０で必要とされる場合には、ファイル１４のデータ２０を代替ロケーション１８から取り出し、前述の取り出されたファイル２０を前述のゴーストされたファイル１４と再び関連付けて再構成されたファイル１４を形成することによって、前述のゴーストされたファイル１４は再構成される。理解されるように、ファイル１４は一旦再構成されると、後で実際に用いられてもよい。
【００２５】
本発明の別の実施形態で、コンピューティングデバイス１０はブランチのサーバまたはその他ものであり、コンピューティングデバイス１０のボリューム１２上のファイル１４のうちの少なくとも一部は、前述のファイル１４の中で、例えば前述のブランチのサーバに関連した支店オフィスに関係のない無関係なものと判定されている。当然のことながら、ファイル１４についての無関係性は、本発明の精神および範囲から逸脱することなく、任意の適切な方法で定義されてもよい。
【００２６】
いずれにしても以前のとおり、無関係なファイル１４は、ファイル１４の少なくとも一部のデータ２０を伴わない縮小された形式で、ブランチのサーバ１０のボリューム１２上で維持される。ここで前述のデータ２０は、その支店オフィスが支店である組織によって維持される中央ハブサーバなどの代替ロケーション１８で記憶される。ここでもまた、前述のハブサーバ１８はブランチのサーバ１０に適切に接続される。
【００２７】
その後ハブサーバ１８を用いて、前述の無関係なファイル１４からの上述のデータ２０を前述のハブサーバ１８に記憶することによって、ブランチのサーバ１０のボリューム１２で使用されるスペースは最小化されてもよく、前述のスペースをポピュレートするために必要な帯域幅もまた最小化されてもよい。有意にも前と同様に、前述の無関係なファイル１４からのデータ２０はブランチのサーバ１０に存在しないが、前述の無関係なファイル１４は、縮小されているか、または「ゴースト」された形態ではあるが、ブランチのサーバのボリューム１２上に実在または「ゴースト」として残る。したがって実際に、ゴーストされたファイル１４がブランチのサーバ１０で必要とされる場合には、ファイル１４のデータ２０をハブサーバ１８から取り出し、前述の取り出されたファイル２０を前述のゴーストされたファイル１４と再び関連付けて再構成されたファイル１４を形成することによって、前述のゴーストされたファイル１４は再構成される。ここでもまた、ファイル１４は一旦再構成されると、後で実際に用いられてもよい。
【００２８】
その後一般化するために、パーソナルコンピュータなどのコンピューティングデバイス１０と代替ロケーション１８とを伴う配置であるかどうかには関係なく、ファイル１４だけが、ファイル１４に関連したデータ２０の一部を含まない縮小された形式でボリューム１２上に存在すべきであるという判定が行われる図２からわかるように、「ゴースティング」にはソース１０のボリューム２０上のファイル１４が伴う。したがって、図２からわかるように、前述のデータ２０はソース１０に適切に結合されたシンク１８に記憶される。
【００２９】
前述のシンク１８を用いて、その後ソース１０のボリューム１２上で使用されるスペースは、ボリューム１２上のゴーストされたファイル１４が縮小されているか、または「スタブ」の形式で存在するように、最小化されてもよい。したがって、実際にゴーストされたファイル１４がソース１０で必要とされる場合には、ファイル１４のデータ２０をシンク１８から取り出し、前述の取り出されたファイル２０を前述のゴーストされたファイル１４と再び関連付けて再構成されたファイル１４を形成することによって、前述のゴーストされたファイル１４は再構成される。ここでもまた、ファイル１４は一旦再構成されると、その後実際に必要に応じてソース１０で用いられてもよい。
【００３０】
本発明の１つの実施形態で、ソース１０のボリューム上に存在するゴーストされたファイル１４のスタブは、オリジナルファイル１４としてボリューム１２上の同じロケーションに記憶される。したがって、ファイルシステム１６がディレクトリ形式によってボリューム１２を組織するのかどうかに関係なく、ゴーストされているファイル１４のための特定のロケーションを調べるファイルシステム１６は、ファイル１４、すなわちゴーストされたファイル１４のためのスタブを前述の場所で見つけ出さなければならない。有意にも、ソース１０のボリューム１２にあるゴーストされたファイル１４は、オリジナルのゴーストされていないファイル１４からのすべてのメタデータ２２を含み、また中でも、シンク１８からファイル１４のためのデータ２０を取り出すのに用いられてもよいゴースティング情報２４も含む。理解されるように、前述のゴースティング情報２４はファイル１４のためのメタデータ２２に付加されてもよく、またはファイル１４の別のロケーションに記憶されてもよい。
【００３１】
したがってユーザまたはその他は、ボリューム１２上のファイル１４の一部がゴーストされ、ボリューム１２上のファイル１４の一部がゴーストされない場合であっても、ファイルシステム１６を経由して、ソース１０の全体のボリューム１２を閲覧することができる。特に、ゴーストされたファイル１４に関連したメタデータ２２は、とりわけゴーストされたファイル１４を識別するため、サイズ情報、日時情報、およびその他を提供するために前述の閲覧の間に用いられてもよい。ユーザがゴーストされたファイル１４にアクセスしようとする場合、ファイル１４のデータ２０は、ゴーストされたファイル１４に存在するゴースティング情報２４に基づいて取り出され、ゴーストされたファイル１４はゴーストされていないファイル１４に再構成され、ゴーストされていないファイル１４は後で実際にユーザによってアクセスされてもよい。
【００３２】
ここで図３Ａを参照すると、ソース１０のボリューム１２上にあってもよいゴーストされていないファイル１４が、ヘッダまたはその他に組織されてもよいメタデータ２２を含むことがわかり、この場合前述のメタデータ２２は、論理的なファイルサイズ、ボリューム１２のサイズ、作成時間、変更時間、アクセス時間、アクセス許可、および様々なファイル属性などのゴーストされていないファイル１４のデータ２０に関連する情報を含む。さらに、明白であるように、ソース１０のボリューム１２上にある前述のゴーストされていないファイル１４は、ファイル１４の実際のデータ２０を含む。ここで、前述の実際のデータ２０は主データおよび代替データとして組織されてもよく、この場合主データは、アプリケーション３０またはその他（図２）によって用いられてもよいファイル１４からのデータ２０であり、一方で代替データは、別のユーザのために作成されているファイル１４からのデータである。しかしながら１つの例として、前述の代替データは、ソース１０で、おそらくはアプリケーション３０か、またはファイルシステム１６によってファイル１４の表現を表示する場合に用いられることが可能な「見本」などのグラフィック表現を含んでもよい。
【００３３】
いずれにしても、主データがサイズの点でデータ２０の大半を占めるという場合がある。したがって、実際にゴーストされていないファイル１４がゴーストされる場合、データ２０のうちの主データだけがゴーストされたファイル１４を形成するためにゴーストされていないファイル１４の残りのものから除去され、図３Ａに示されているように、おそらくはゴーストされたファイル１４の識別とともに、前述の主データだけがシンク１８に記憶されるという場合が実際にはあるかもしれない。当然のことながら、ファイル１４のその他の部分もまた、本発明の精神および範囲から逸脱することなく、ファイル１４のゴースティングの間に除去されてもよい。
【００３４】
しかしながら理解されるように、実際にゴーストされていないファイル１４がブランチのサーバ１０とハブサーバ１８とのコンテキストの中でゴーストされ、ハブサーバ１８がファイル１４をブランチのサーバ１０に複製する場合、データ２０の主データがゴーストされたファイル１４を形成するために、ソース１８で複製されたファイル１４のうちの残りのものから除去される間に、図３Ｂに示されているように、おそらくはゴーストされたファイル１４の識別とともに、前述のファイル１４のすべてがシンク１８に記憶されるという場合が実際にはあるかもしれない。
【００３５】
ここで図３および４を参照すると、ゴーストされていないファイル１４をゴーストされたファイル１４（すなわちゴーストファイル１４）に変換するために、はじめにファイル１４が識別され（ステップ４０１）、その後ファイル１４から除去されるべきデータ２０が識別される（ステップ４０３）。ここでもまた、前述のデータ２０は典型的にはデータ２０の主データであるが、前述のデータ２０からの別のデータである場合がある。いずれにしても、識別されたデータ２０はその後適切な輸送メカニズムおよびダクトを経由してソース１０からシンク１８に移動され（ステップ４０５）、前述の移動されたデータ２０はその後適切な形式でシンク１８に記憶される（ステップ４０７）。理解されるように、シンク１８にデータ２０を記憶することは、本発明の精神および範囲から逸脱することなく、任意の適切な形式および方法で行われてもよい。例えば、データ２０は必要に応じて圧縮および／または暗号化されてもよく、前述のデータ２０は、ファイル１４を再構成する要求に応じて、前述のデータ２０が比較的容易に取り出されることができるような方法で記憶されるべきである。例えば、前述のデータ２０は以下でより詳細に言及されるように、取り出しに用いられるＩＤに応じて記憶されてもよい。
【００３６】
理解されるように、ステップ４０５でデータ２０が一旦移動されると、ソース１０のボリューム１２上で前述のデータ２０によって占められているスペースは、ファイル１４に割り当てられたままである必要はない。したがって、前述の割り当てられたスペースは、空きスペースとしてマークされることが可能であり（ステップ４０９）、結果としてその時にゴーストされるファイル１４はまばらなものとしてマークされる。有意にも、前述の割り当てられたスペースはゴーストされたファイル１４による使用から開放されているが、その時にゴーストされるファイル１４の論理的なファイルサイズは、ファイル１４のためのボリューム１２上のサイズは実際には前述の開放されたスペースを反映するために変更されてもよいとはいえ、前述のファイル１４または別の場所のためのメタデータ２２の中で変更されるべきではない。
【００３７】
さらに本発明の１つの実施形態で、その時ゴーストされるファイル１４のためのメタデータ２２は、前述のファイル１４がその時ゴーストされるということを示すために修正される（ステップ４１１）。そうするために、例えば「ゴーストされる」属性はメタデータ２２の中でセットされてもよい。理解されるように、前述のゴーストされる属性のセットは、ファイル１４が実際にゴーストされるという問い合わせアプリケーション３０またはその他に対する信号として主に用いられてもよい。前述の信号を用いて、その後問い合わせアプリケーション３０は、ファイル１４が実際にゴーストされるということだけではなく、前述のファイル１４にアクセスすることは、前述のファイル１４がゴーストされていない形態に最初に再構成されなければならないという点でコストを伴うということを認識することができる。理解されるように、前述のコストはシンク１８からファイル１４のためのデータ２０にアクセスするために必要とされる帯域幅、ボリューム１２上のデータ２０のために必要とされるスペース、および／またはシンク１８のデータ２０にアクセスし、とりわけそれに基づいてファイル１４を再構成するための待ち時間に関するものである可能性がある。
【００３８】
また本発明の１つの実施形態で、その時ゴーストされるファイル１４のためのメタデータ２２は、前述のゴースティング情報２４を含むために修正される（ステップ４１３）。ここでもまた、前述のゴースティング情報２４は、とりわけシンク１８からファイル１４のためのデータ２０を取り出すために用いられてもよい。例えば前述のゴースティング情報２４は、記憶されている、シンク１８でデータ２０を識別するＩＤに加えて、シンク１８の配置の仕方についての情報、ファイル１４の再構成の仕方についての情報、および／またはその他についての情報を含む、ゴーストされたファイル１４に関連するその他の情報を記憶するために用いられることが可能なストレージ量を含んでもよい。前述のゴースティング情報２４の中のストレージは可変または固定の量であることが可能であり、後者の場合は１６キロバイトほどに制限されると思われる。理解されるように、前述のゴースティング情報２４は主に、ファイル１４を再構成するために用いられるどんな構成物によってでも用いられ、典型的に前述の問い合わせアプリケーション３０またはその他によって使用されることはないが、それにもかかわらず、本発明の精神および範囲から逸脱することなく、前述の使用が生じるかもしれない。
【００３９】
ここで理解されるように、ゴーストされるファイル１４はゴーストされるときに、短期間、長期間、非常に長い期間、または永久に、少なくともボリューム１２がもはや動作中ではなくなるまでソース１０のボリューム１２上に分散されずに存在してもよい。しかしながら、ここで図５を参照すると任意の時点で、ゴーストされたファイル１４の記憶されたデータ２０にアクセスするための要求は、アプリケーション３０、前述のアプリケーション３０のユーザ等から受信されてもよいということが理解される（ステップ５０１）。当然のことながら、前述の要求の前に、前述のゴーストされたファイル１４のメタデータ２２にアクセスするための１つまたは複数の要求もまた受信されてよいということも可能である。例えば前述のアプリケーション３０は、ファイル１４が実際にゴーストされるということを判定するために、前述のゴーストされたファイル１４のメタデータ２２の中のゴーストされる属性のセットにアクセスしてもよく、またはボリューム１２を制御するファイルシステム１６は、ディレクトリリストまたはその他を編集する過程の中で、メタデータ２２にアクセスしてもよい。特に後者の場合では、ファイルシステム１６、アプリケーション３０またはその他の主体は、ファイル１４の表現を表示する場合に用いられることが可能な前述のグラフィックを取得するために、データ２２の代替データにアクセスしてもよい。
【００４０】
いずれにしても、ステップ５０１でゴーストされたファイル１４の記憶されたデータ２０にアクセスするための要求に応答して、ゴーストされたファイル１４は実際に以下の方法で再構成される。ファイル１４は前もってボリューム１２に配置され（ステップ５０３）、その後ファイル１４のメタデータ２２の中のゴースティング情報２４が識別される（ステップ５０５）。理解されるように、シンク１８に記憶されているファイル１４のデータ２０は、前述の識別されたゴースティング情報２４に基づいて配置され（ステップ５０７）、その後前述の配置されたデータ２０は、適切な輸送メカニズムおよびダクトによって、シンク１８からソース１０に移動されることが可能である（ステップ５１１）。
【００４１】
当然のことながら、ファイル１４とともに前述のデータ２０をソース１０に記憶するために、ソース１０のボリューム１２上で前述のデータ２０によって占有されるスペースは割り当てられなければならず（ステップ５０９）結果として、もはやゴーストされたものではないファイル１４は、もはやまばらなものとしてマークされることはない。ここで理解されるように、データ２０が実際に同じものを再構成するためにファイル１４に移動された後、もはやゴーストされたものではないファイル１４のためのメタデータ２２は、例えば、前述のメタデータ２２の中のゴーストされる属性をリセットすることなどによって、前述のファイル１４がゴーストされていないということを示すために修正される（ステップ５１３）。もはやゴーストされたものではないファイル１４のためのメタデータ２２もまた、ゴースティング情報２４を除去するために修正される（ステップ５１５）。したがって、ここでファイル１４はゴーストされていない形態である。
【００４２】
ここで理解されるように、ゴーストされたファイル１４の作成につながる２つの主なシナリオがある。第１のシナリオでは、ファイル１４はボリューム１２上でゴーストされたファイル１４として直接作成される。前述のようなゴースト作成は、ブランチのサーバ１０とハブサーバ１８とともに上で言及されたものなどの複製アーキテクチャの中で典型的なものであると思われる。前述の複製アーキテクチャの中では、中央ハブサーバ１８からすべてのファイル１４のゴーストではないコピーを有する複数のブランチのサーバ１０の各々をポピュレートすることには、大量の帯域幅を必要とする。したがってその代わりに、複製エンジンは単にブランチのサーバ１０上でファイル１４のゴーストされたコピーを作成することを決定してもよい。任意の特定のブランチのサーバ１０の任意の特定のゴーストされたファイル１４に関連したデータ２０は、その後要求に応じて、また前述の特定のゴーストされたファイル１４を前述の特定のブランチのサーバ１０でゴーストではないファイル１４に再構成する必要がある場合に、ハブサーバ１８から取り出されてもよい。
【００４３】
第２のシナリオで、ファイル１４はボリューム１２上でゴーストではないファイル１４として作成され、しばらく後で、前述のボリューム１２上でゴーストされたファイル１４に変換される。前述のゴーストを行わない作成は、パーソナルコンピュータまたはその他と代替ロケーション１８とともに上で言及したものなどの省スペース型のアーキテクチャの中で典型的なものであると思われる。前述の省スペース型アーキテクチャでは、パーソナルコンピュータまたはその他のボリューム１２上のスペースは、例えばめったに使用されることのないファイル１４に関連したデータ２０を、別の媒体であってもよい代替ロケーション１８か、または別のシステムに移動することによって取り戻される。第１のシナリオのように、パーソナルコンピュータまたはその他の任意の特定のゴーストされたファイルに関連したデータ２０は、その後要求に応じて、また前述の特定のゴーストされたファイル１４をゴーストではないファイル１４に再構成する必要がある場合に、代替ロケーション１８から取り出されてもよい。
【００４４】
本発明の１つの実施形態で、ユーザまたはアプリケーション３０に代わって、ゴーストされたファイル１４に関してソース１０で実行される図５の動作は、図２からわかるように、実際にはゴースティングフィルタ２６の助けによって実行される。前述の動作は透過的に、またはユーザもしくはアプリケーション３０に通知されて実行されてもよいが、前述のユーザまたはアプリケーション３０にはおそらく透過的であることが好ましい。特に、ユーザまたはアプリケーション３０がゴーストされたファイル１４の除去されたデータ２０にアクセスしようとする場合、前述のアクセスを求める要求を受信したファイルシステム１６は、ゴーストされたファイル１４が除去されたデータ２０を含んでいないということを発見し、したがってゴースティングフィルタ２６が遮断することになるエラーを返信することになる。その後ゴースティングフィルタ２６は、前述の遮断の上で、ゴーストされたファイル１４のためのメタデータ２２からゴースティング情報２４を取得するためにファイルシステム１６を用い、取得されたゴースティング情報２４に基づいて、前述のゴースティングフィルタ２６は以下でより詳細に言及されるように、前述のゴーストされたファイル１４の再構成を開始するので、アクセスを求める要求は最終的に守られてもよい。
【００４５】
理解されるように、ゴースティングフィルタ２６は、多くの機能を持たず、シンク１８などのネットワークリソースへのアクセスを持たない、より低レベルの構成物であってもよい。前述のような状況では、図２に示されているように、ゴースティングフィルタ２６はゴースティングマネージャ２８などのより高レベルの構成物とインタフェースしてもよく、この場合前述のゴースティングマネージャ２８は、さらなるゴースティング機能と、シンク１８などのネットワークリソースへの直接アクセスとを含む。さらに、前述の状況では、ゴースティングフィルタ２６が前述のゴーストされたファイル１４の前述の再構成を開始する場合、ゴースティングマネージャ２８は図５と関連して示されており、以下でより詳細に言及されるように、ソース１０のための前述の再構成機能のまとまりを実行する。前述のゴースティングマネージャ２８はまた、図４と関連して示されているように、ソース１０のためのゴースティング機能のまとまりを実行してもよい。
【００４６】
ゴーストされたファイル１４からデータ２０を要求するアプリケーション３０
ゴーストされたファイル１４の再構成は図４と関連して上ですでに詳述されているが、前述のゴーストされたファイル１４のデータ２０の一部を読むことを望むアプリケーション３０またはその他の観点から、前述のプロセスを再検討することは有益である。理解されるように、その後、前述のファイル１４からの前述のデータ２０を読むことを望む前述のアプリケーション３０は典型的に、ファイル１４に関してファイルシステム１６にオープンコマンドを発行することによって、前述の機能を達成する。本発明の１つの実施形態で、前述のアプリケーション３０は前述の開始および読み取りコマンドを発行し続けるが、前述のコマンドは、ゴーストされる問題のファイル１４に基づいて、多少違って解釈される。前述の違いはアプリケーション３０に対して透過であり、アプリケーション３０にはあまり関係がないが、アプリケーション３０はゴーストされたファイル１４が再構成される過程の中でいくらかの待ち時間を経験するかもしれず、この場合前述の待ち時間は、おそらくは大部分が、データ２０をシンク１８からソース１０に移動することによるものである。
【００４７】
いずれにしても、ここで図６を参照すると、アプリケーション３０はボリューム１２上の特定のゴーストされたファイル１４に関してオープンコマンドを発行することによって、プロセスを開始し、前述のオープンコマンドは最終的にファイルシステム１６によって受信される（ステップ６０１）。特に、前述のオープンコマンドを発行するアプリケーション３０は、特定のファイル１４が実際にゴーストされているといういかなる知識も持っているとは予想されていないが、アプリケーション３０は実際に、ゴーストされた属性がファイル１４のためにセットされているかどうかを報告するようにファイルシステム１６に命令することによって、前述の判定を行うことができる。
【００４８】
上で述べられたように、ファイルシステム１６はオープンコマンドを受信すると、ゴーストされたファイル１４が除去されたデータ２０を含んでいないということに気づくので、エラーを返信し（ステップ６０３）、ゴースティングフィルタ２６は前述の返信されたエラーを遮断し、それに基づいて問題のファイル１４が実際にはゴーストされた形式であるということを認める（ステップ６０５）。したがって、ゴースティングフィルタ２６自体は、前述のゴーストされたファイル１４からゴースティング情報２４を取り出すようにファイルシステム１６に命令を出し、実際に前述のゴースティング情報を受信する（ステップ６０７）。前述のゴースティング情報２４に基づいて、その後ゴースティングフィルタ２６はゴーストされたファイル１４に対応するバッファおよびハンドルを作成し、アプリケーションからのオープンコマンドに対する（通常の）応答として、ハンドルをアプリケーション３０に届ける（ステップ６０９）。
【００４９】
アプリケーション３０によって受信されるゴーストされたファイル１４のためのハンドルは、開かれるゴーストされたファイル１４のインスタンスを表し、例えば読み取りコマンドまたはクローズコマンドなどの、前述のファイル１４に関するさらなるコマンドを発行する場合に、前述のファイル１４への参照としてアプリケーション３０によって用いられるということに留意されたい。しかしながら、有意にも、ゴースティングフィルタ２６によって作成され、アプリケーション３０からのコマンドのハンドルパラメータとして用いられるゴーストされたファイル１４のための前述のハンドルは、前述のコマンドがファイルシステム１６にではなく、直接ゴースティングフィルタ２６に届けられるようにする。
【００５０】
ゴーストされたファイル１４のためのバッファは、例えばゴーストされたファイル１４のゴースティング情報２４などの、ゴーストされたファイル１４に関連する情報を記憶するために、ゴースティングフィルタ２６によって用いられるということも留意されたい。したがって、ゴーストされたファイル１４がゴースティングフィルタ２６によって操作される過程の中で、前述のゴースティング情報２４に対する変更はバッファの中に記憶されることが可能であり、ファイル１４に再び書き込まれる必要はない。当然のことながら、ゴースティングフィルタ２６がゴーストされたファイル１４の操作を完了した後、バッファの中の前述の記録された変更は、必要に応じてファイル１４のためのゴースティング情報２４に再び書き込まれることができる。
【００５１】
いずれにしても、ゴースティングフィルタ２６からのゴーストされたファイル１４のためのハンドルを用いて、アプリケーション３０はボリューム１２上の特定のゴーストされたファイル１４に関して読み取りコマンドを発行することによって進行してもよく、この場合前述の読み取りコマンドはハンドル、ファイルのためのデータ２０へのオフセット、前述のオフセットから始まる前述のデータ２０に関する読み取りの長さ、およびその他を含むパラメータを有する。したがって、最終的にパラメータとして前述のハンドルを有することに基づく前述の読み取りコマンドは、ファイルシステム１６によってではなく、ゴースティングフィルタ２６によって受信される（ステップ６１１）。しかしながら、明白であるように、データ２０は実際にはゴーストされたファイル１４の中に存在せず、したがってゴースティングフィルタはさらなる処理を待つために、キューまたはその他の中に読み取りコマンドを記憶する（ステップ６１３）。
【００５２】
理解されるように、前述のさらなる処理は主に、シンク１８からゴーストされたファイル１４のためのデータ２０を取得することを含む。特に、ゴースティングフィルタ２６はシンク１８でファイル１４のデータ２０に基づいてゴーストされたファイル１４の再構成を開始し（ステップ６１５）、この場合前述の再構成は、以下の方法で生じてもよい。
【００５３】
ゴースティングフィルタ２６はより高レベルのゴースティング機能を実行し、シンク１８などのネットワークリソースに直接アクセスするためにゴースティングマネージャ２８とインタフェースしてもよく、ゴースティングフィルタ２６はシンク１８からゴーストされたファイル１４のためのデータ２０の一部を取得する要求をゴースティングマネージャ２８に発行し（ステップ６１５ａ）、この場合前述の要求はゴーストされたファイル１４のゴースティング情報２４からのＩＤ、データ２０へのオフセット、および前述のオフセットから始まる取得されるべきデータ２０の長さを含むということを思い出されたい。その後、ゴースティングマネージャ２８は実際にシンク１８から前述のデータ２０の要求された部分を取得する（ステップ６１５ｂ）。おそらくゴースティングマネージャ２８はそれらを取得するためのすべての必要な機能を含み、関係者には知られているか、または明らかであるべきであり、本明細書ではいかに詳細にも言及される必要のない方法で取得を行う。したがって、それらを取得する任意の特定の方法は、本発明の精神および範囲から逸脱することなく用いられてもよい。
【００５４】
ステップ６１５ｂで、ゴースティングマネージャ２８がシンク１８からデータ２０の要求された部分を取得する過程の中で、いくらかの遅延が存在する場合があるということに留意されたい。例えば、前述のデータ２０がネットワークを介して取得され、その時に、おそらく数ミリ秒、数秒またはそれよりも多くの列でネットワーク遅延が存在する場合がある。したがって、ゴースティングマネージャ２８、ゴースティングフィルタ２６および／またはその他の主体は、シンク１８から要求されており、おそらくは対応する要求時間とともに、そこからまだ取得されていないデータ２０の各部分を表す保留データリストを維持することを望んでもよい。理解されるように、データの各々の要求された部分の識別は、要求された上で保留データリストに付加され、受信された上で前述の保留データから除去され、ゴーストされたファイル１４とともに記憶される。その後、前述の保留データリストを用いて、データ２０のためのすべての保留要求がある期間にわたり監視され、特定の期間内に満たされない要求は時間切れとなってもよいという場合がある。
【００５５】
一旦ゴースティングマネージャ２８が実際にシンク１８から前述のデータ２０の前述の要求された部分を取得すると、前述のゴースティングマネージャ２８は前述の要求された部分をゴースティングフィルタ２６に届け（ステップ６１５ｃ）、その後前述のゴースティングフィルタ２６は前述の要求された部分を、ファイルシステム１６に対する適切なコマンドによって発行されるファイル１４の適切なロケーションに書き込む（ステップ６１５ｄ）。前述の要求された部分を発行されるファイル１４の適切なロケーションに書き込むことは、関係者には知られているか、または明らかであるべきであり、したがって、いかに詳細にも本明細書で言及される必要はない。したがって、そのように書き込みを行う任意の特定の方法は、本発明の範囲および精神から逸脱することなく用いられてよい。
【００５６】
当然のことながら、ファイル１４のためのデータ２０のすべてがファイル１４に書き込まれるまで、ステップ６１５ａ〜６１５ｂが複数回反復される必要があってもよく、したがって前述のステップは必要に応じて反復される。ファイル１４のためのデータ２０のすべてが一旦実際にファイルに書き込まれると、ゴースティングフィルタ２６は必要に応じて、ゴースティング情報２４を除去すること、およびゴーストされた属性をリセットすることを含めて、前述のその時に再構成されるファイル１４のメタデータ２２を修正するためにファイルシステム１４にコマンドを発行する（ステップ６１７）。さらに、ゴースティングフィルタ２６はファイル１４のためのすべての読み取りコマンドをキューから取り出し、前述の読み取りコマンドをさらなる処理のためにファイルシステム１６に渡し（ステップ６１９）、それによってアプリケーション３０からの読み取りコマンドは実際に発行されるデータ２０で応答される。
【００５７】
開かれたファイル１４のためのハンドルはゴースティングフィルタ２６に関連したままであり、アプリケーション３０からのコマンドを前述のその時に再構成されるファイル１４と関連して前述のゴースティングフィルタ２６に向け続けるということに留意されたい。したがって、ゴースティングフィルタ２６が前述のコマンドをファイルシステム１６に発送する場合、ゴースティングフィルタ２６がハンドルをファイルシステム１６に再び関連付ける場合、またはゴースティングフィルタがハンドルをファイルシステム１６と再び関連付けるために別の構成物に命令を出す場合、またはその他の場合がある。
【００５８】
ゴーストされたファイル１４の部分的再構成
理解されるように、ファイル１４からのゴーストされたデータ２０のうちのすべてよりも少ないものが要求を行うアプリケーション３０によって必要とされる状況では、ゴーストされたファイル１４を完全に再構成することが必要とされるべきではない。したがってアプリケーション３０が、データ２０の２ギガバイトの特定のオフセットで１、２、１２または１００キロバイトだけが必要であるということを判定することができる場合、シンク１８からデータ２０の２ギガバイトを取得するのではなく、代わりに特定のオフセットで必要とされるデータ２０のキロバイトだけを取得することが必要とされるべきではない。さらに、そのような状況では、ゴーストされたファイル１４を部分的にだけ再構成することによって、大量の必要ではないデータ２０をシンク１８からソース１０に送信する必要が回避され、それを行うために必要とされる帯域幅がそれに応じて減少される。
【００５９】
その後アプリケーション３０は、ゴーストされたファイル１４を部分的にだけ再構成することによって、ファイル１４の完全な再構成を開始することなく、必要に応じてファイルの数バイトだけを読み取ることができる。したがって、例えばビデオファイル１４の第１のフレームだけが必要とされる場合、そうした第１フレームは、１０ギガバイトか、または１００ギガバイトにさえなる列上にあることが可能な、ゴーストされたファイル１４のためのデータ２０の全体量ではなく、シンク１８のファイル１４のためのデータ２０から取得される。部分的に再構成すると、その後アプリケーション３０からの特定の読み取り要求を満たすために、ゴーストされたファイル１４のためのシンク１８にあるデータ２０を必要な分だけ取り出す。
【００６０】
ゴーストされたファイル１４を部分的に再構成する場合、シンク１８から取得されるデータ２０の一部は実際に前述のシンク１８から除去される場合もあり、または除去されない場合もあるということに留意されたい。一方では、取得された前述の部分はソース１０に記憶されるので、これ以上シンク１８で維持される必要はない。しかしながら他方では、実際にシンク１８から取得された部分を削除するために一層の努力を必要とする場合がある。さらに少なくとも一部の状況では、前述の取得された部分は、例えばシンクがハブサーバ１８であり、ソースがブランチのサーバ１０である場合など、別のソース１０によるアクセスのためにシンク１８に残っていなければならない。
【００６１】
理解されるように、ゴーストされたファイル１４が実際に部分的に再構成される場合、ゴーストされたファイル１４のどの部分が実際に再構成されているのかということを示して、ゴースティングフィルタ２６がゴーストされたファイル１４の中に前述の部分が存在するのかどうかを判定できるように、記録が維持されていなければならない。したがって本発明の１つの実施形態では、前述のゴーストされたファイル１４のメタデータ２２のゴースティング情報２４の中に、前述の記録が維持されている。特に、再構成され、したがってゴーストされたファイル１４の中に存在するゴーストされたファイル１４のデータ２０の各々の連続したセクションのために、ゴースティング情報２４は、セクションの始まりを述べるオフセットと、前述のセクションの連続した量を述べる長さとを含むセクション参照を含む。
【００６２】
典型的に、前述の部分的に再構成されたデータ２０の記録を含むゴーストされたファイル１４のためのゴースティング情報２４は、ゴースティングフィルタ２６によって維持される。先に述べられているとおり、前述のゴースティングフィルタ２６はファイルシステム１６によって、ゴーストされたファイル１４のメタデータ２２の中で直接的に前述のゴースティング情報２４を維持し、更新することが可能ではあるが、前述の維持および更新は、ファイルシステム１６によって実行される別の動作とインタフェースすることが可能である。したがって、ゴースティングフィルタ２６は代わりに、ゴーストされたファイル１４を操作する過程の中で、最初に前述のゴースティング情報２４を前述のメタデータ２２から取得して、図６のステップ６０９でゴーストされたファイル１４に関連して作成されたバッファの中に前述のゴースティング情報を記憶し、次いで、ゴーストされたファイル１４を操作する過程の間に、バッファからゴーストされたファイル１４のためのメタデータ２２への前述のゴースティング情報２４の書き込みを終了した上で、前述のゴースティング情報２４を維持し、更新する。
【００６３】
ゴーストされたファイル１４の部分的な再構成は、例えばソース１２の電力またはネットワーク接続性が低下することによって、時々中断される場合があるということに留意されたい。同様に、特に電力が低下し、バッファが揮発性ＲＡＭまたはその他の中で維持される場合など、ゴーストされたファイル１４のためのバッファが失われる場合もある。前述のような状況では、維持され、更新されるゴースティング情報２４は失われ、バッファからファイル１４のためのメタデータ２２へ書き込まれることはなく、実際には前述のゴースティング情報２４が失われるだけではなく、それに関連したすべての部分的に再構成されたデータ２０もまた、ソース１０に物理的に存在していても、特に前述のゴースティング情報２４がないのであれば前述のデータ２０も配置されることができないので失われてしまう。したがって本発明の１つの実施形態では、維持され、更新される前述のゴースティング情報２４は、例えば毎秒１回くらいで、バッファからファイル１４のためのメタデータ２２に周期的に書き込まれる。したがって最高でも、前述のゴースティング情報２４のごく僅かな部分と、それに関連した部分的に再構成されたデータ２０だけが、バッファのロスのせいで失われる可能性がある。
【００６４】
本発明の１つの実施形態で、ゴーストされたファイル１４は、前述のゴーストされたファイル１４からデータ２０を要求するアプリケーション３０からの適切なコマンドに基づいて、部分的にだけ再構成される。したがって前述のアプリケーション３０は、ゴーストされた属性が、前述のファイル１４が実際にゴーストされたのかどうかを判定するために特定のファイル１４のためにセットされているのかどうかを判定するために、最初にファイルシステム１６をチェックしなければならず、もしそうであれば、アプリケーション３０はその後適切なコマンドによって、前述のゴーストされたファイル１４のためのデータ２０の１つの部分か、または幾つかの部分の部分的再構成を要求してもよい。
【００６５】
部分的再構成を考慮すると、本発明の１つの実施形態では、その後、ゴースティングフィルタ２６は、図６のステップ６１１で示されているようなゴーストされたファイル１４に関する読み取りコマンドに応答する中で、対応するバッファに記憶された前述のゴーストされたファイル１４のためのゴースティング情報２４の中にある任意のセクション参照を最初に閲覧することによってそれに応答し、その後セクション参照から、要求されたデータ２０またはその部分がソース１０のゴーストされたファイル１４の中にすでに存在しているかどうかを判定する。要求されたデータ２０のすべてが実際に存在する場合、前述のデータ２０は、シンク１８から前述のデータ２０を取得する必要を伴わずに、ソース１０のゴーストされたファイル１４から読み取られる。要求されたデータ２０の一部だけが存在する場合、前述のデータ２０の存在する部分は、シンク１８から前述のデータ２０を取得する必要を伴わずに、ソース１０のゴーストされたファイル１４から読み取られ、データ２０のうちの残りのものはシンク１８から取得され、次いで上述のように読み取りを行う。要求されたデータ２０が存在しない場合、前述のデータ２０のすべてはシンク１８から取得され、次いで上述のように読み取りを行う。
【００６６】
次いで要約するために、ここで図７を参照すると、部分的再構成が要求されてもよいゴーストされたファイル１４を開くためのアプリケーション３０からのコマンドに応答して（ステップ７０１）、ゴースティングフィルタ２６はゴーストされたファイル１４に対応するバッファおよびハンドルを再び作成し、ステップ６０９でのアプリケーション３０からのオープンコマンドに対する（通常の）応答として、アプリケーション３０にハンドルを届ける。さらに、ゴースティングフィルタ２６は最初にゴーストされたファイル１４のためのメタデータ２２からゴースティング情報２４を取得し、前述のゴースティング情報２４を作成されたバッファの中に記憶する（ステップ７０５）。
【００６７】
前のとおり、ゴースティングフィルタ２６からのゴーストされたファイル１４のためのハンドルを用いて、アプリケーション３０はボリューム１２上の特定のゴーストされたファイル１４のデータ２０の一部のために読み取りコマンドを発行し、この場合前述の読み取りコマンドはハンドルを含み、ステップ６１１のようにオフセットおよび部分の長さを定義する（ステップ７０７）。ここで読み取りコマンドに応答して、ゴースティングフィルタ２６はゴーストされたファイル１４のためのバッファの中のゴースティング情報２４に基づいて、定義された前述の部分が少なくとも部分的に、ソース１０の常在物としてゴーストされたファイル１４の中にすでに存在しているかどうかを判定する（ステップ７０９）。前述の判定は関係者には知られているか、または明らかであるべきであり、本明細書ではいかに詳細にも言及される必要はない。したがって前述の判定を行う方法は、本発明の精神および範囲から逸脱することなく用いられてもよい。
【００６８】
ここでもまた、データ２０のすべての部分が実際に存在する場合、前述のデータの前述の部分はシンク１８から取得される必要はない（ステップ７１１ａ）。データ２０の一部だけが存在する場合、データ２０の一部の残りのものはシンク１８から取得される（ステップ７１１ｂ）。データ２０のどの部分も存在しない場合、データ２０の前述の部分のすべてはシンク１８から取得される（ステップ７１１ｃ）。有意にも、ステップ７１１ｂまたは７１１ｃで、シンク１８からデータ２０の任意の部分を取得すると、ゴースティングフィルタ２６は、データ２０の一部が現在ゴーストされたファイル１４とともに存在しており、ゴーストされたファイル１４に再構成されるということを適切に反映するために、バッファの中に記憶されたゴーストされたファイル１４のためのゴースティング情報２４を更新する（ステップ７１３）。いずれにしても、現在ソース１０に存在するデータ２０の要求された部分によって、前述の要求された部分はここで実際に、ステップ６１９のようにアプリケーション３０によって読み取られてもよい（ステップ７１５）。
【００６９】
上で言及されたように、ゴースティングフィルタ２６は最新の形態のゴースティング情報２４をバッファからファイル１４のためのメタデータ２２に周期的に書き込むので、前述のゴースティング情報２４およびそれに関連した部分的に再構成されたデータ２０は、バッファが失われるときに全体的に失われることはない（ステップ７１７）。さらにゴーストされたファイル１４が、例えばアプリケーション３０のコマンドで一旦閉じられると（ステップ７１９）、ゴースティングフィルタ２６は最新の形態のゴースティング情報２４をバッファからファイル１４のためのメタデータ２２に書き込むことによってバッファを閉じ（ステップ７２１）、当然のことながら、ゴーストされたファイル１４は完全に再構成されてはいないとみなす。したがって前述の最新の形態のゴースティング情報２４は、ステップ７０５のように、しばらく後で再び取り出されてもよい。
【００７０】
部分的に再構成されたゴーストされたファイル１４の高速読み取り
ゴーストされたファイル１４に関する読み取りコマンドを発行しているアプリケーション３０は、ゴーストされたファイル１４の状態を考慮に入れず、特にゴーストされたファイル１４がすでに部分的に再構成されているかどうか、および／またはすでに部分的に再構成されるプロセスにあるかどうかを考慮しない。すなわち、ここで図８を参照すると、ゴーストされたファイル１４に関する特定の読み取りコマンドがデータ２０の特定の部分を指定し、そうした特定の部分が、ゴーストされたファイル１４の中にすでに存在しているデータ２０を含む第１セグメント、シンク１８からゴーストされたファイル１４へコピーされるために保留中のデータ２０を含む第２セグメント、およびゴーストされたファイル１４の中には存在しないが、代わりにシンク１８にだけ記憶されているデータ２０を含む第３セグメントに対応している場合がある。
【００７１】
理解されるように、前述の読み取りコマンドが、データ２０の特定の部分のうちのすべてがシンク１８からゴーストされたファイル１４にコピーされるように処理されるべきものであった場合、前述の処理は、少なくとも前述の部分に対応する第１および第２セグメントに関しては重複した、無駄なものとなるだろう。特に、これもまた理解されるように、第１セグメントに対応するデータ２０をコピーすることは、前述のデータ２０がゴーストされたファイル１４の中にすでに存在しているので不必要なものであり、第２セグメントに対応するデータ２０をコピーすることは、前述のデータがシンク１８からゴーストされたファイル１４へコピーされるためにすでに保留中なので不必要なものである。実際は、前述のデータ２０はゴーストされたファイル１４の中に存在せず、前述のゴーストされたファイル１４へコピーされることをすでに要求されてはいないので、第３セグメントに対応するデータ２０だけが、シンク１８からゴーストされたファイル１４へコピーされることを必要とする。
【００７２】
本発明の１つの実施形態で、その後ゴースティングフィルタ２６は、最初にデータ２０の前述の特定の部分に関して、すでに存在しているゴーストされたファイル１４の中の対応するセグメント（すなわち第１セグメント）、すでに保留中であるゴーストされたファイル１４の中の対応するセグメント（すなわち第２セグメント）、および存在していないか、または保留中ではないゴーストされたファイル１４の中の対応するセグメント（すなわち第３セグメント）を識別することによって、データ２０の特定の部分のための前述の読み取りコマンドを処理し、その後実際には前述の第３セグメントだけを取得する。その後、ゴースティングフィルタ２６は実質的に、シンク１８から実際に読み取られる必要のないすべてのセグメントを読み取りコマンドから取り除く。前述の除去行為を実行することによって、そうした「高速読み取り」がゴーストされたファイル１４にすでに存在しているか、または保留中であるデータ２０ではなく、実際に必要とされているシンクからのデータ２０だけを取得するように、読み取りコマンドはより高速で処理される。したがって、ゴースティングフィルタ２６によって実行される高速読み取りによって、アプリケーション３０からの読み取りコマンドに対する応答が速くなり、それに付随して前述の読み取りコマンドのために必要とされる帯域幅の量が減少する。
【００７３】
本発明の１つの実施形態で、ゴースティングフィルタ２６は、前述のゴーストされたファイル１４のために維持されているゴースティング情報２４に関してすでに存在しているゴーストされたファイル１４の中の第１セグメントの各々を識別する。先に言及されたように、前述のゴースティング情報２４は前述のゴーストされたファイル１４のためのメタデータ２２に配置されて参照されてもよく、または前述のゴーストされたファイル１４に対応するバッファの中に配置されて参照されてもよい。同様に、本発明の１つの実施形態で、ゴースティングフィルタ２６は、図６のステップ６１５ｂと関連して開示された保留データリストの中の情報に関してすでに保留中である、ゴーストされたファイル１４の中の第２セグメントの各々を識別する。前述のゴースティング情報２４および保留データリストに関して前述の第１および第２セグメントを識別することは、関係者に知られているか、または明らかであるべきであり、したがっていかに詳細にも本明細書で言及される必要はない。したがって、前述の識別は本発明の精神および範囲から逸脱することなく、任意の適切な方法で実行されてもよい。
【００７４】
理解されるように、第１および第２セグメントが一旦識別されると、残っているのは第３セグメントであり、その後削除プロセスによって、存在していないか、または保留中ではないゴーストされたファイル１４の前述の第３セグメントが識別される。当然のことながら、前述の第３セグメントは一旦識別されると、実際にシンク１８から要求されてもよく、受信の上でゴーストされたファイル１４にコピーされてもよい。一旦コピーされると、前述の第３セグメントの各々は実質的に第２の保留セグメントになるということに留意されたい。また、一旦受信され、ゴーストされたファイル１４にコピーされると、第２セグメントの各々は実質的に第１の存在するセグメントになるということにも留意されたい。最後に、一旦セグメントが第１セグメントになると、前述の第１セグメントはアプリケーションからの読み取りコマンドに応答して、アプリケーション３０によって実際に読み取られるために利用可能になるということに留意されたい。
【００７５】
少なくとも一部の状況では、アプリケーション３０はゴーストされたファイル１４の中の特定のデータ２０のために読み取りコマンドを発行していないが、それにもかかわらずゴーストフィルタ２６は、特にゴースティングフィルタ１４が他に占有されていない場合、前述の読み取りコマンドを予測する中で、前述のデータ２０をシンク１８からゴーストされたファイル１４へ移動しなければならないということが理解されるであろう。１つの例であるが、ゴーストされた音声ファイル１４、ゴーストされた映像ファイル１４、またはゴーストされたマルチメディア１４などのコンテントをストリーミングする場合、特定の期間Ｔ０のデータ２０のための読み取りコマンドの後には、次の期間Ｔ１のデータ２０のための読み取りコマンドが後に続くことを予測するのが合理的である。そのような状況では、ゴースティングフィルタ２６は他に占有されていなければ、アプリケーション３０からの特定の読み取りコマンドがない場合であっても、シンク１８から期間Ｔ１のための前述のデータ２０を取得するための機会を利用することができる。当然のことながら、そのようにする中で、ゴースティングフィルタ２６は、上で言及された方法での高速読み取りとして、前述の行為を実行してもよい。
【００７６】
次いで要約するために、ここで図９を参照すると、ゴースティングフィルタ２６は以下の方法で、アプリケーション３０からの読み取りコマンドに応答して高速読み取りを実行する。先に、実際にアプリケーション３０から読み取りコマンドが受信され、この場合前述の読み取りコマンドは、ゴーストされたファイル１４から読み取られるべきデータ３０の部分または範囲を指定する（ステップ９０１）。典型的に、ここでもまた、前述の範囲はデータ３０に関するオフセットおよび長さとして表現される。
【００７７】
その後、ゴースティングフィルタ２６は最初に、前述のデータ２０の範囲内で、すでに存在しているゴーストされたファイル１４の中のデータ２０の対応する第１セグメントを識別する（ステップ９０３）。ここでもまた前述の識別は、前述のゴーストされたファイル１４のためのメタデータ２２の中か、または前述のゴーストされたファイル１４に対応するバッファの中にある、前述のゴーストされたファイル１４のために維持されているゴースティング情報２４に関して実行される。識別された第１セグメントがデータ２０の要求された範囲のすべてを含む場合、ゴーストされたファイル１４はすでに読み取りコマンドを満たすのに必要な程度まで再構成されており、したがって前述の読み取りコマンドは、シンク１８からのデータ２０の任意のさらなるコピーを伴わずに、また任意の保留データ２０を待つことなく完了されてもよい（ステップ９０５）。
【００７８】
しかしながら、識別された第１セグメントが要求されたデータ２０の要求された部分のすべてを含まない場合、ゴーストされたファイル１４は実際に、少なくとも保留データ２０に基づいて、読み取りコマンドを満たすのに必要な程度まで再構成されなければならず、したがってゴースティングフィルタ２６は、第１セグメントではないデータ２０の要求された範囲の各セグメントの範囲を含む第１セットを計算する（ステップ９０７）。その後、前のものと同様に、ゴースティングフィルタ２６は第１セット内で、保留中であるゴーストされたファイル１４の中のデータ２０の対応する第２セグメントを識別する（ステップ９０９）。ここでもまた、前述の識別は保留データリストに関して実行される。識別された第２セグメントが第１セットのすべてを含む場合、ゴーストされたファイル１４は読み取りコマンドを満たすのに必要な程度まで再構成されるために保留中であり、前述の読み取りコマンドは、すべての保留データ２０が実際にゴーストされたファイル１４にコピーされるときに完了されてもよい（ステップ９１１）。
【００７９】
しかしながら、ここで理解されるように、識別された第２セグメントが第１セットのすべてを含まない場合、ゴーストされたファイル１４は実際に、シンク１８からコピーされるべきデータ２０に基づいて、読み取りコマンドを満たすのに必要な程度まで再構成されなければならず、したがってゴースティングフィルタ２６は、第１セグメントでも第２セグメントでもない、データ２０の要求された範囲の各セグメントの範囲を含む第２セット、すなわち第３セグメントを計算する（ステップ９１３）。その後ゴースティングフィルタ２６は、第２セット／第３セグメントがシンク１８からゴーストされたファイル１４へコピーされることを要求する（ステップ９１５）。
【００８０】
ここでもまた、時間の経過の中で、要求される第３セグメントの各々は第２の保留セグメントになり、実際にコピーされる第２セグメントの各々はすべてのコピーが完了するまで、第１の存在するセグメントになる（ステップ９１７）。その後、読み取りコマンドの要求される範囲は、実際に前述の読み取りコマンドに応答してアプリケーション３０によって読み取られるために利用可能である（ステップ９１９）。
【００８１】
ファイル１４の再ゴースティング／ゴースティング
理解されるように、再構成されているか、または部分的に再構成されているゴーストされたファイル１４はある時点で、例えばソース１０にさらなるスペースが必要とされる場合に再ゴーストされることが可能である。さらに、これもまた理解されるように、同様にこれまでにゴーストされていないファイル１４は同様の理由で、ある時点でゴーストされることが可能である。
【００８２】
特に、一旦ゴーストされたファイル１４が部分的に、もしくは全体的に再構成されるか、または一旦ファイル１４がソース１０にインストールされると、前述のファイル１４は、前述のファイル１４が再ゴーストまたはゴースト（以下、再ゴーストとする）されることのない形態で、ソース１０に存在し続ける。前述の再ゴースティングは、例えばソース１０でのスペースの必要性の判定、ある期間ファイル１４がアクセスされていないということの判定等であってもよい、何らかのイベントによって開始される。さらに、特にブランチのサーバ１０とハブサーバ１８のコンテキストでは、ファイル１４の再ゴースティングによって、ファイル１４を最新の状態に保つために、ソース１０またはシンク１８のファイル１４に対する任意の変更がそれぞれシンク１８またはソース１０に対して複製されてもよい。
【００８３】
次いで、本発明の１つの実施形態で、ソース１０での再ゴースティングは最後のアクセス時間、ボリューム上の残りの空きスペース、データへのアクセスの周波数、どこか他の場所で起こるファイル１４に対する修正および／またはその他の要素を考慮に入れる再ゴースティングアルゴリズムによって実行される。前述の要素を考慮する再ゴースティングアルゴリズムは、再ゴーストされたすぐ後に、ゴーストされたファイル１４を再び再構成する可能性を減少させることを目標にすべきである。したがって、前述のゴースティングおよび再ゴースティングのために必要な帯域幅は、減少されないのであれば最小化されてもよい。典型的には、必ずしもそうとは限らないが、再ゴースティングアルゴリズムはソース１０でアプリケーション３０によって実行されるか、またはソース１０でゴースティングマネージャ２８によって実行されるが、本発明の精神および範囲から逸脱することなく、その他の主体が前述の再ゴースティングアルゴリズムを実行してもよい。
【００８４】
ソース１０でファイル１４を再ゴーストするために用いられる再ゴースティングアルゴリズムは、少なくとも部分的に設定可能なポリシーに基づいて定義されてもよい。特に、前述の再ゴースティングアルゴリズムは、少なくとも部分的に設定可能なポリシーに基づいて開始されてもよく、前述の再ゴースティングアルゴリズムは、少なくとも部分的に設定可能なポリシーに基づいて特定のファイル１４を再ゴーストすることを決定してもよい。各インスタンスの中で、前述のポリシーはソース１０の管理者またはその他によって、ソース１０のユーザによる設定が可能であってもよい。
【００８５】
再ゴースティングアルゴリズムと関連して用いられる可能な開始パラメータは、限定されるわけではないが以下のものを含む。
・所定の期間が経過するときに起動される周期的トリガ。
・ソース１０のボリューム１２の空きスペースが特定の量を下回る場合か、またはソース１０のボリューム１２で使用されるスペースが特定の量を超える場合に起動されるスペーストリガ。
・ソース１０の空きスペースが特定の量を下回るか、またはソースで使用されるスペースが特定の量を超える場合にだけ、所定の期間が経過するときに起動される周期的スペーストリガ。
・ゴースティングフィルタ２６がボリューム１２に空きスペースが残っていないことを示すために、ファイルシステム１６によって返信されるフルボリュームエラーに気づくときに起動されるフルボリュームトリガ。
・所定の数のバイトがソース１０にダウンロードされるときに起動されるバイトダウンロードトリガ。
・ユーザ、管理者またはその他によって起動されてよい手動トリガ。
【００８６】
当然のことながら、再ゴースティングアルゴリズムの開始は、前述のトリガのうちの単一のものか、または前述のトリガの組合せに基づいて生じてもよい。
【００８７】
特定のファイル１４を再ゴーストするかどうかを判定するための可能な選択要素は、限定されるわけではないが以下のものを含む。
・ファイル１４が最後にアクセスされた時間。これによって、より古いアクセス時間を有するファイル１４が優先的に再ゴーストされてもよい。
・ファイル１４に関連したダウンロード時間。これによって、より古いダウンロード時間を有するファイル１４が優先的に再ゴーストされてもよい。
・ファイル１４のファイルサイズ。これによって、より大きなファイル１４が優先的に再ゴーストされてもよい。
・ファイル１４のファイルの種類。これによって特定の拡張子を有するファイル１４が優先的に再ゴーストされてもよい。
・ファイル１４のファイル属性。これによって、例えばシステムファイルであるファイル１４は再ゴーストされず、隠されているファイル１４は再ゴーストされる。
・同種のファイル１４が複数あるかどうかということ。これによって、同種とみなされるファイル１４が優先的に再ゴーストされてもよい。
・ファイル１４がシンク１８で変更されたのかどうかということ。これによって、そのようなファイル１４は、古くなったとみなされるデータ２０をそこから除去するために再ゴーストされる。
・ファイル１４がソース１０で変更されたのか、または作成されたのかどうかということ。これによって、そのようなファイル１４は、前述の変更／作成を保存するために、再ゴーストされるために選択されないか、または前述の変更／作成をシンク１８にコピーするために、再ゴーストされるために選択されてもよい。
・特定の期間のファイル１４へのアクセスの周波数。
・特定の期間のファイル１４へのアクセスの回数。
・例えば同じフォルダ、同じコンテントセット等の中のその他の関連したファイル１４のアクセス周波数／アクセス回数／最後のアクセス時間。
・例えばリスト、方法、ＸＭＬファイル等による、優先的に再ゴーストされる特定の外部入力、またはファイルの種類。
【００８８】
当然のことながら、再ゴースティングアルゴリズムは単一の選択要素か、または前述の選択要素の組合せを用いてもよい。
【００８９】
再ゴースティングのために選択されるファイル１４は実際に再ゴーストされるか、またはその代わりに、優先再ゴースティングの候補として単に指定されてもよいということに留意されたい。特に後者の場合、特定の停止トリガが達成されるまでに限って、再ゴースティングが実行されてもよい。理解されるように、前述の停止トリガは再ゴースティングセッションを開始した開始パラメータに対応してもよく、再ゴースティングのための候補ファイル１４を選択するための基準に対応してもよく、または本発明の精神および範囲から逸脱しない別のトリガであってもよい。
【００９０】
また、何らかの停止トリガが達成されるまでに限って再ゴースティングが実行される場合、再ゴーストされるための候補であるファイル１４についての選択基準によって、前述のファイル１４全体で再ゴースティングを取り除くことが望ましい場合がある。例えば、ソース１０で少なくとも２週間の最後のアクセス日時を有しているということに基づいて候補ファイル１４が選択される場合、最初に２カ月よりも長い期間の最後のアクセス日時を有する候補のすべてを再ゴーストし、その後必要であれば１カ月よりも長い期間の最後のアクセス日時を有する候補のすべてを再ゴーストし、その後必要であれば３週間よりも長い期間の最後のアクセス日時を有する候補のすべてを再ゴーストするなど、停止トリガが起動されるまで再ゴーストを行うことが望ましい場合がある。同様に、候補ファイル１４が１０メガバイトの最小のファイルサイズを有していることに基づいて選択される場合、最初に前述の候補のすべてを１ギガバイトよりも大きなファイルサイズで再ゴーストし、その後必要であれば１００メガバイトよりも大きなファイルサイズで前述の候補のすべてを再ゴーストし、その後必要であれば５０メガバイトよりも大きなファイルサイズで前述の候補のすべてを再ゴーストするなど、停止トリガが起動されるまで再ゴーストを行うことが望ましい場合がある。理解されるように、いずれのシナリオでも、候補ファイル１４を作成するため、リストを分類するため、１つまたは複数の再ゴースティングのラウンドを生成するため、およびその他のために何らかの処理が必要とされる。
【００９１】
また再ゴースティングは、特にはファイル１４の異なるバージョンがソース１０とシンク１８との両方の場所に配置されてもよい場合に、ソース１０のファイル１４とシンク１８のファイル１４との整合性を維持するために用いられてもよいということにも留意されたい。したがって、ファイル１４はソース１０で再構成されおり、ファイル１４のデータ２０は変更されているが、シンク１８の対応するデータ２０が変更されていない場合、シンク１８のデータ２０をソース１０のデータと置き換えるために再ゴースティングが実行されてもよい。同様に、ソース１０のファイル１４のデータ２０は変更されていないが、シンク１８の対応するデータ２０が変更されている場合、後で行われる前述のファイルの再構成がシンク２８のデータ２０をソース１０にコピーすることを予想して、ソース１０の前述のデータ２０を削除するためだけに再ゴースティングが実行されてもよい。当然のことながら、ソース１０のファイル１４のデータ２０が変更されており、シンク１８の対応するデータ２０もまた変更されている場合には競合が存在し、したがってファイル１４を再ゴーストするかどうかということと、もし再ゴーストされるのであれば、それがどのようにして行われるのかということとを判定するために、適切な競合ルールが考慮されなければならないであろう。
【００９２】
次いで要約するために、ここで図１０を参照すると、ボリューム１２上のファイル１４の再ゴースティングは再ゴースティングアルゴリズムによって実行されてもよく、この場合前述の再ゴースティングアルゴリズムは、以下の方法で何らかの主体によって実行される。前もって、何らかのイベントによって再ゴースティングアルゴリズムが開始され（ステップ１００１）、ここで前述のトリガは主体によって内部的に生成されるか、または前述の主体によって外部的に受信されてもよい。その後、前述のように開始されると、再ゴースティングアルゴリズムは何らかの選択基準に基づいて、完全および部分的に再構成されたファイル１４と決してゴーストされていないファイル１４との中からファイル１４を選択する（ステップ１００３）。
【００９３】
この時点で、再ゴースティングアルゴリズムは、選択されたファイル１４の再ゴースティングによって単に開始されるか（ステップ１００５）、または代わりに、選択されたファイル１４を可能な再ゴースティングのための候補ファイル１４であるとみなしてもよい（ステップ１００７）。後者の場合、その後候補ファイル１４は停止トリガが起動されるまで、１つまたは複数のラウンドの中で再ゴースティングのために選択される。特に、各ラウンドのために、候補ファイル１４のグループが選択され（ステップ１００９）、前述の選択されたグループが再ゴーストされ（ステップ１０１１）、停止トリガが起動されていたかどうかについて判定が行われる。停止トリガが起動されていた場合、プロセスは終了する（ステップ１０１３）。停止トリガが起動されていない場合、ステップ１００９で別のグループを選択することに戻ることによって、プロセスは継続する（ステップ１０１５）。
【００９４】
共通ゴースティング
したがって、ここまでで本明細書で言及されているように、特定のソース１０でゴーストされたすべてのファイル１４は、特にファイル１４のデータ２０が単一のシンク１８に存在するようにゴーストされる。しかしながら理解されるように、特定のソース１０の各ゴーストされたファイル１４のデータ２０は、図１１に示されているように、複数の前述のシンク１８のうちのいずれかに存在するという場合がある。
【００９５】
特に理解されるように、本発明のゴースティングフィルタ２６は、データ２０をファイル１４から単一のシンク１８にゴーストするために、単一のゴースティングマネージャ２８とともに機能することに必ずしも限定される必要はない。代わりに、ゴーストフィルタは実際には複数のゴースティングマネージャ２８とともに機能することが可能であり、この場合各々の前述のゴースティングマネージャ２８は、複数のシンク１８のうちの特定の１つの関するゴースティング機能を実行する。
【００９６】
例えばブランチのサーバ１０とハブサーバ１８とのコンテキストでは、特定のブランチのサーバ１０は複数のハブサーバ１８とインタフェースすることができる。したがって、複数のブランチのサーバ１０とインタフェースされる１つのハブサーバ１８は第１ソースからのデータを有し、一方で前述の複数のブランチのサーバ１０とインタフェースされるハブサーバ１８は第２ソースからのデータ２０を有する。同様に、例えばコンピューティングデバイス１０と代替ロケーション１８とのコンテキストでは、特定のコンピューティングデバイス１０は複数の代替ロケーションにデータ２０を記憶することができる。したがって、特定のコンピューティングデバイス１０のための１つの代替ロケーション１８は、第１の特定の種類のファイル１４からのデータ２０を記憶するものとして指定され、一方で特定のコンピューティングデバイス１０のための別の代替ロケーション１８は、第２の特定の種類のファイル１４からのデータ２０を記憶するものとして指定されてもよい。当然のことながら、用いられるシンク１８の数、および前述のシンク１８の間でデータ２０を分配するための基準は、本発明の精神および範囲から逸脱することのない任意の適切な数、および基準であってよい。
【００９７】
いずれにしても、複数のシンク１８が特定のソース１８とともに用いられる場合、前述のソース１０の特定のゴーストされたファイル１４からのデータ２０を有するのはどのシンク１８であるのかを識別するため、および前述のシンク１８にアクセスするためにどの対応するゴースティングマネージャ２８が用いられなければならないのかを判定するために、メカニズムが必要とされる。したがって本発明の１つの実施形態では、図１１に示されているように、前述の特定のファイル１４に関連したゴースティング情報２４の中で、前述のような識別が維持される。
【００９８】
結果として、ゴースティングフィルタ２６は任意の特定のゴーストされたファイル１４に遭遇し、そこからゴースティング情報２４を読み取ると、前述のゴースティング情報２４から、前述の特定のゴーストされたファイル１４と関連して用いられるゴースティングマネージャ２８の識別を取得することができ、それに基づいて、前述のシンク１８に適切にアクセスするために前述の識別されたゴースティングマネージャ２８と通信することができる。その後、ゴースティングフィルタ２６は実際にすべてのゴースティングマネージャ２８に共通のものとなり、ゴースティングフィルタ２６は前述の特定のゴーストされたファイル１４と関連して任意の別のゴースティングマネージャ２８と決して通信してはならないので、識別されたゴースティングマネージャ２８は前述の特定のゴーストされたファイル１４を制御するか、または「所有」する。
【００９９】
おそらく各ゴースティングマネージャ２８は、それに対応するシンク１８と通信するために必要なすべての機能および情報を含むので、ゴースティングフィルタ２６は前述の問題に関与する必要はない。その後、ゴースティングフィルタ２６にとっては、対応するシンク１８にアクセスするために必要とされるのは、特定のゴーストされたファイル１４に関連して識別されたゴースティングマネージャ２８と通信することだけであり、前述のゴースティングフィルタ２６は実際に、前述の識別されたゴースティングマネージャ２８がどのようにして前述の対応するシンク１８と通信するのか、前述の識別されたゴースティングマネージャ２８は前述の対応するシンク１８をどのように配置するのか、またはその他のことに関与する必要はない。
【０１００】
次いで、ここで図１２を参照すると、図４および５に示されているプロセスと同様に、ファイル１４の共通ゴースティングおよび再構成が以下のような方法で実行される。おそらく前述のようなゴースティングは、特定の識別（ＩＤ）を有する特定のゴースティングマネージャ２８によって開始され、実際にはゴースティングフィルタ２６によって実行されるので、前述のゴースティングマネージャ２８はＩＤとゴーストされるファイル１４の識別とともに、適切なゴースティング要求をゴースティングフィルタ２６に送信し（ステップ１２０１）、その後ゴースティングフィルタ２６は必要に応じてファイル１４からデータ２０を除去する（ステップ１２０３）。次いで、ゴースティングフィルタ２６は必要に応じて、ゴースティングマネージャ２８のＩＤによって、前述の除去されたデータ２０を要求を行うゴースティングマネージャ２８に転送し（ステップ１２０５）、前述のゴースティングマネージャ２８は前述の除去されたデータを、前述のゴースティングマネージャ２８とともに含まれている、これを行うためのプロトコルに基づいて、対応するシンク１８に転送してもよい。
【０１０１】
このことに関して、シンク１８およびファイル１４の種類によっては、ゴースティングマネージャ２８は実際に、例えばシンク１８がソース１０への発行の際に読み取り専用の方法でファイル１４を複製した場合、前述の除去されたデータをシンク１８に送信しないことを選択してもよい。当然のことながら、そのような場合には、ゴースティングフィルタに通知したゴースティングマネージャ２８からのゴースティング要求は、実際には不必要なステップ１２０５を実行しなくてもよい。
【０１０２】
いずれにしても、前のように、ゴーティングフィルタ２６は「ゴーストされた」属性をセットし、ゴースティング情報２４を付加することによって、その時ゴーストされるファイルのためのメタデータ２２を修正する（ステップ１２０７）。有意にも、前述のゴースティング情報は、ゴーストされたファイル１４を再構成する場合、後で使用するためにゴースティングマネージャ２８のＩＤを含まなければならない。したがって、ゴースティングマネージャ２８またはアプリケーション３０が前述のゴーストされたファイル１４のデータ２０へのアクセスを要求するときのしばらく後で、先に言及されたように、要求は最終的にゴースティングフィルタ２６に到達し（ステップ１２０９）、前述のゴースティングフィルタ２６はファイル１４のメタデータ２２の中にゴースティング情報２４を配置する（ステップ１２１１）。
【０１０３】
ここでもまた、シンク１８に記憶されたファイル１４のデータ２０は前述の識別されたゴースティング情報２４に基づいて配置されるが、このインスタンスの中でゴースティングフィルタ２６は最初に、ゴースティングマネージャ２８のＩＤを前述のゴースティング情報２４内に配置し、前述のＩＤを用いて、実際に対応するシンク１８から前述のデータ２０を取得するための要求を対応するゴースティングマネージャ２８に通信する（ステップ１２１５）。おそらく、前述のゴースティングマネージャ２８は実際に、シンク１８から前述のデータ２０を取得し、同データをゴースティングマネージャ２６に供給し（ステップ１２１７）、その後前述のゴースティングフィルタは前述のデータ２０を発行の際にデータ２０に再構成する（ステップ１２１９）。
【０１０４】
結論
本発明に関連して実行されるプロセスを実現するために必要なプログラミングは比較的簡単なものであり、関連のあるプログラミング業者には明らかであるべきである。したがって前述のようなプログラミングは、本明細書に添付されていない。本明細書の精神および範囲から逸脱することなく、本発明を実現するために任意の特定のプログラミングが用いられてもよい。
【０１０５】
上記の説明の中で、本発明は、ローカルボリューム１２、コンピューティングデバイス１０またはブランチのサーバ１０などのソース１０のファイル１４が複製されるか、またはゴーストされて、ファイル１４のデータ２０が代替ロケーション１８またはハブサーバ１８などのシンク１８に記憶され、したがってソースのファイル１４が必要に応じて再構成されることが可能な縮小またはゴーストされた形態となる、新しくて有益な方法およびメカニズムを含むということがわかる。ゴーストされたファイル１４は必要に応じて形成され、再構成されてもよい。
【０１０６】
上述の実施形態に対して、その発明的な概念から逸脱することなく変更がなされうるということを理解されたい。したがって一般に、本発明は開示されている特定の実施形態に限定されるわけではなく、添付の特許請求の範囲によって定義される本発明の精神および範囲内に変更形態を含むことが意図されているということを理解されたい。
【図面の簡単な説明】
【０１０７】
【図１】本発明の態様および／または一部が組み込まれてもよい汎用コンピュータシステムを表すブロック図である。
【図２】本発明の実施形態による、データがシンクに記憶されるようにソースでゴーストされたファイルを示すブロック図である。
【図３Ａ】本発明の実施形態による、データだけがシンクに記憶される図２のファイルおよびデータを示すブロック図である。
【図３Ｂ】本発明の実施形態による、ファイル全体がシンクに記憶される図２のファイルおよびデータを示すブロック図である。
【図４】本発明の１つの実施形態による、図２のシンクにファイルをゴーストする中で実行される主要なステップを示す流れ図である。
【図５】本発明の１つの実施形態による、図２のシンクからゴーストされたファイルを再構成する中で実行される主要なステップを示す流れ図である。
【図６】本発明の１つの実施形態による、図２のシンクからゴーストされたファイルを再構成する中で実行される主要なステップをより詳細に示す流れ図である。
【図７】本発明の１つの実施形態による、図２のシンクからゴーストされたファイルを部分的に再構成する中で実行される主要なステップを示す流れ図である。
【図８】本発明の１つの実施形態による、図２のファイルのデータについての様々な状態を示すブロック図である。
【図９】本発明の１つの実施形態による、図８で言及される部分のデータのセグメントの状態に基づいて、図２のシンクからゴーストされたファイルのうちの少なくとも１部を効率的に再構成する中で実行される主要なステップを示す流れ図である。
【図１０】本発明の１つの実施形態による、図２のシンクにファイルを再ゴーストするときに実行される主要なステップを示す流れ図である。
【図１１】本発明の１つの実施形態による、ソースが単一の共通ゴースティングフィルタと各シンクに対応するゴースティングマネージャとを有する、複数のシンクに関連した図２のソースを示すブロック図である。
【図１２】本発明の１つの実施形態による、ファイルをソースでゴーストし、再構成する中で、図１１のゴースティングフィルタによって実行される主要なステップを示す流れ図である。
【図１】
2009501396.tif 000003
【図２】
2009501396.tif 000004
【図３Ａ】
2009501396.tif 000005
【図３Ｂ】
2009501396.tif 000006
【図４】
2009501396.tif 000007
【図５】
2009501396.tif 000008
【図６】
2009501396.tif 000009
【図７】
2009501396.tif 000010
【図８】
2009501396.tif 000011
【図９】
2009501396.tif 000012
【図１０】
2009501396.tif 000013
【図１１】
2009501396.tif 000014
【図１２】
2009501396.tif 000015