クライアント端末とストレージシステムとに接続されるファイルサーバであって、プロセッサと、ファイルを管理するファイルシステムプログラムを格納するメモリとを有し、前記ファイルシステムプログラムは、前記ファイルのクローンを作成する要求を受けた場合、前記ファイルへの更新を禁止し、第1の差分ファイルを作成し、前記クローンへのアクセス要求を受けた場合、前記第1の差分ファイルへアクセスし、前記アクセスが1更新要求の場合は、1a前記更新要求で指定された前記第1の差分ファイルのファイルブロックに、前記ストレージシステムのディスクブロックが割り当てられていない場合は、そのファイルブロックに前記ストレージシステムのディスクブロックを割り当てて、そこに更新データを書き込み、1bそのファイルブロックに前記ストレージシステムのディスクブロックが割り当てられている場合は、そこに更新データを書き込み、2読み出し要求の場合は2a前記読み出し要求で指定された前記第1の差分ファイルのファイルブロックにデータが有ればそのデータを読み出し、2bそのファイルブロックにデータが無ければ、前記ファイルの対応するファイルブロックにデータがあればそのデータを読み出し、前記ファイルへの更新要求があった場合、第2の差分ファイルを作成し、前記更新要求で指定された前記第2の差分ファイルのファイルブロックに前記ストレージシステムのディスクブロックを割り当て、そこに更新データを書き込むように構成されていることを特徴とするファイルサーバ。請求項1記載のファイルサーバであって、前記ファイルシステムプログラムは、前記ファイルのコピーファイル作成要求があった場合、前記ファイルへの更新要求の有無にかかわらず、前記第1の差分ファイルとともに、第2の差分ファイルを作成し、前記ファイルへのアクセス要求を受け付けた場合、前記第2の差分ファイルにアクセスし、前記アクセスが1更新要求の場合、1a前記更新要求で指定された前記第2の差分ファイルのファイルブロックに前記ストレージシステムのディスクブロックが割り当てられていない場合は、前記ストレージシステムのディスクブロックを割り当てて、そこに更新データを書き込み、1bそのファイルブロックにディスクブロックが割り当てられている場合は、そこに更新データを書き込み、2読み出し要求の場合、2a前記読み出し要求で指定された前記第2の差分ファイルのファイルブロックにデータが有ればそのデータを読み出し、2bそのファイルブロックにデータが無ければ、前記ファイルの対応するファイルブロックにデータがあればそのデータを読み出すように構成されていることを特徴とするファイルサーバ。請求項1記載のファイルサーバであって、前記ファイルシステムプログラムは、前記第1の差分ファイルを作成した後であって、前記第1の差分ファイルに最初の更新要求を受けた場合、第1のデータ管理テーブルを作成し、その更新データを含むファイルデータのオフセットと、その更新要求で指定された前記第1の差分ファイルのファイルブロックに割り当てた前記ストレージシステムのディスクブロックの開始ブロック位置と、そのファイルデータブロック長とを前記第1のデータ管理テーブルに記録するよう構成されていることを特徴とするファイルサーバ。請求項1記載のファイルサーバであって、前記ファイルシステムプログラムは、前記第2の差分ファイルを作成した後であって、前記第2の差分ファイルに最初の更新要求を受けた場合、第2のデータ管理テーブルを作成し、その更新データを含むファイルデータのオフセットと、その更新要求で指定された前記第2の差分ファイルのファイルブロックに割り当てた前記ストレージシステムのディスクブロックの開始ブロック位置と、そのファイルデータブロック長とを前記第2のデータ管理テーブルに記録するよう構成されていることを特徴とするファイルサーバ。請求項2記載のファイルサーバであって、前記ファイルシステムプログラムは、前記第2の差分ファイルを作成した後であって、前記第2の差分ファイルに最初の更新要求を受けた場合、第2のデータ管理テーブルを作成し、その更新データを含むファイルデータのオフセットと、その更新要求で指定された前記第2の差分ファイルのファイルブロックに割り当てた前記ストレージシステムのディスクブロックの開始ブロック位置と、そのファイルデータブロック長とを前記第2のデータ管理テーブルに記録するよう構成されていることを特徴とするファイルサーバ。請求項1記載のファイルサーバであって、前記第1の差分ファイルはメタデータを有し、前記メタデータは、前記第1の差分ファイルがクローンであることを示す情報を含むことを特徴とするファイルサーバ。請求項2記載のファイルサーバであって、前記第1の差分ファイルはメタデータを有し、前記メタデータは、前記第1の差分ファイルがクローンであることを示す情報を含むことを特徴とするファイルサーバ。請求項1記載のファイルサーバであって、前記ファイルシステムプログラムは、前記ファイルのクローンを作成する要求を受けるごとに、前記第1の差分ファイルを作成するよう構成され、前記ファイルはメタデータを有し、前記メタデータは、前記ファイルがクローンのソースであることを示す情報と、前記第1の差分ファイルのファイル数とを含むことを特徴とするファイルサーバ。請求項1記載のファイルサーバであって、前記ファイルシステムプログラムは、1前記ファイルの削除要求を受けた場合は、前記第2の差分ファイルを削除し、前記ファイルを前記クライアント端末から見えないように設定し、2前記第1の差分ファイルの削除要求を受けた場合は、前記第1の差分ファイルを削除するよう構成されていることを特徴とするファイルサーバ。請求項2記載のファイルサーバであって、前記ファイルシステムプログラムは、1前記ファイルの削除要求を受けた場合は、前記第2の差分ファイルを削除し、前記ファイルを前記クライアント端末から見えないように設定し、2前記第1の差分ファイルの削除要求を受けた場合は、前記第1の差分ファイルを削除するよう構成されていることを特徴とするファイルサーバ。コンピュータシステムであって、ファイルサーバと、ファイルサーバに接続される管理端末と、ファイルサーバに接続されるストレージシステムとを有し、前記ファイルサーバは、プロセッサと、ファイルを管理するファイルシステムプログラムを格納するメモリとを有し、前記ファイルシステムプログラムは、前記ファイルのクローンを作成する要求を受けた場合、前記ファイルへの更新を禁止し、第1の差分ファイルを作成し、前記クローンへのアクセス要求を受けた場合、前記第1の差分ファイルへアクセスし、前記アクセスが1更新要求の場合は、1a前記更新要求で指定された前記第1の差分ファイルのファイルブロックに、前記ストレージシステムのディスクブロックが割り当てられていない場合は、そのファイルブロックに前記ストレージシステムのディスクブロックを割り当てて、そこに更新データを書き込み、1bそのファイルブロックに前記ストレージシステムのディスクブロックが割り当てられている場合は、そこに更新データを書き込み、2読み出し要求の場合は2a前記読み出し要求で指定された前記第1の差分ファイルのファイルブロックにデータが有ればそのデータを読み出し、2bそのファイルブロックにデータが無ければ、前記ファイルの対応するファイルブロックにデータがあればそのデータを読み出し、前記ファイルへの更新要求があった場合、第2の差分ファイルを作成し、前記更新要求で指定された前記第2の差分ファイルのファイルブロックに前記ストレージシステムのディスクブロックを割り当て、そこに更新データを書き込むように構成されていることを特徴とするコンピュータシステム。請求項11記載のコンピュータシステムであって、前記ファイルシステムプログラムは、前記ファイルのコピーファイル作成要求があった場合、前記ファイルへの更新要求の有無にかかわらず、前記第1の差分ファイルとともに、第2の差分ファイルを作成し、前記ファイルへのアクセス要求を受け付けた場合、前記第2の差分ファイルにアクセスし、前記アクセスが1更新要求の場合、1a前記更新要求で指定された前記第2の差分ファイルのファイルブロックに前記ストレージシステムのディスクブロックが割り当てられていない場合は、前記ストレージシステムのディスクブロックを割り当てて、そこに更新データを書き込み、1bそのファイルブロックにディスクブロックが割り当てられている場合は、そこに更新データを書き込み、2読み出し要求の場合、2a前記読み出し要求で指定された前記第2の差分ファイルのファイルブロックにデータが有ればそのデータを読み出し、2bそのファイルブロックにデータが無ければ、前記ファイルの対応するファイルブロックにデータがあればそのデータを読み出すように構成されていることを特徴とするコンピュータシステム。特許文献1の技術は親仮想ボリュームの書き込み可能なコピーであるクローンを作成する技術を開示している。親仮想ボリュームのスナップショットと、上記クローンとして機能する仮想ボリュームを作成し、スナップショットに対する更新データを別のファイルで差分管理する。その差分ファイル作成直後はデータブロックを持たないが、データブロックの管理テーブルを作成する。データブロック管理テーブルのフィールドには物理ブロック番号などが格納され、初期値は0である。データブロック管理テーブルのフィールドが0状態のファイルにアクセスした場合は、スナップショットのデータが参照される。前記ファイルクローン機能では、ファイルブロックを管理するファイル管理テーブルや論理ブロックと物理ブロックの対応付けを行う管理デーブルを作成しているため、クローンファイルの作成性能に問題があった。すなわち、下記2つの課題がある。a1クローンを作成するのに一度スナップショットを作成する必要があること。a2クローンへの更新が発生する前に管理テーブルを生成するが、大サイズファイルの場合、ファイル管理テーブルの容量も大きく、クローン作成に時間がかかることその結果、数百から数千のクローンファイルを作成する場合にクローンファイル作成性能の低下及び作成の長時間化が問題となっていた。そこで、本発明では、b1ファイルのクローンを作成する要求を受けた場合、ファイルへの更新を禁止し、差分ファイルを作成して、差分ファイルへ更新データを書き込む。b2さらに、差分ファイルを作成した後であって、差分ファイルに最初の更新要求を受けた場合、管理テーブルを作成する。これらの2方式で、クローンファイルを高速に作成する。その具体的な手段は、クライアント端末とストレージシステムとに接続されるファイルサーバであって、プロセッサと、ファイルを管理するファイルシステムプログラムを格納するメモリとを有し、前記ファイルシステムプログラムは、前記ファイルのクローンを作成する要求を受けた場合、前記ファイルへの更新を禁止し、第1の差分ファイルを作成し、前記クローンへのアクセス要求を受けた場合、前記第1の差分ファイルへアクセスし、前記アクセスが1更新要求の場合は、1a前記更新要求で指定された前記第1の差分ファイルのファイルブロックに、前記ストレージシステムのディスクブロックが割り当てられていない場合は、そのファイルブロックに前記ストレージシステムのディスクブロックを割り当てて、そこに更新データを書き込み、1bそのファイルブロックに前記ストレージシステムのディスクブロックが割り当てられている場合は、そこに更新データを書き込み、2読み出し要求の場合は2a前記読み出し要求で指定された前記第1の差分ファイルのファイルブロックにデータが有ればそのデータを読み出し、2bそのファイルブロックにデータが無ければ、前記ファイルの対応するファイルブロックにデータがあればそのデータを読み出し、前記ファイルへの更新要求があった場合、第2の差分ファイルを作成し、前記更新要求で指定された前記第2の差分ファイルのファイルブロックに前記ストレージシステムのディスクブロックを割り当て、そこに更新データを書き込むことである。また、別の具体的な手段は、さらに、前記ファイルシステムプログラムは、前記ファイルのコピーファイル作成要求があった場合、前記ファイルへの更新要求の有無にかかわらず、前記第1の差分ファイルとともに、第2の差分ファイルを作成し、前記ファイルへのアクセス要求を受け付けた場合、前記第2の差分ファイルにアクセスし、前記アクセスが1更新要求の場合、1a前記更新要求で指定された前記第2の差分ファイルのファイルブロックに前記ストレージシステムのディスクブロックが割り当てられていない場合は、前記ストレージシステムのディスクブロックを割り当てて、そこに更新データを書き込み、1bそのファイルブロックにディスクブロックが割り当てられている場合は、そこに更新データを書き込み、2読み出し要求の場合、2a前記読み出し要求で指定された前記第2の差分ファイルのファイルブロックにデータが有ればそのデータを読み出し、2bそのファイルブロックにデータが無ければ、前記ファイルの対応するファイルブロックにデータがあればそのデータを読み出すことである。更に、別の具体的な手段は、前記ファイルシステムプログラムは、前記第1の差分ファイルを作成した後であって、前記第1の差分ファイルに最初の更新要求を受けた場合、第1のデータ管理テーブルを作成し、その更新データを含むファイルデータのオフセットと、その更新要求で指定された前記第1の差分ファイルのファイルブロックに割り当てた前記ストレージシステムのディスクブロックの開始ブロック位置と、そのファイルデータブロック長とを前記第1のデータ管理テーブルに記録することである。前記のように、クローンファイル作成時にはスナップショットの作成が不要なため、クローンファイルを高速に作成できる。また、クローンファイルへの更新発生後に管理テーブルを作成するため、更新前に無駄な容量を確保しなくて済み、消費容量を削減できる。以下、図面を参照しながら本発明の実施の形態を説明するが、本発明はこの実施形態に限定されるものではない。本発明の第一の実施例を図1から図18で説明する。まず、構成を図1から図5で説明する。図1は、本発明におけるファイル共有システムの構成例を示す図である。クライアント1001は、ファイル共有システムを利用するエンドユーザが使用する計算機である。クライアント1001の内部構成と内部処理の動作は、後述図2を用いて説明する。ネットワークスイッチ1002は、クライアント1001、管理端末1005、そして、ファイルサーバ1003をLANLocalAreaNetworkによって接続可能とする装置である。ただし、LANを構成するために無線通信装置などを用いてもよく、本発明は接続形態を限定するものではない。ファイルサーバ1003は、クライアント1001を利用するエンドユーザへファイル共有サービスを提供する計算機である。内部の構成と内部の処理は後で後述する。ディスクストレージ1004は、ファイルサーバ1003に格納されるファイルデータを保持するためのディスク装置である。ファイルサーバ1003とディスクストレージ1004は、FCFibreChannelプロトコルを用いて接続されている。ファイルサーバ1003とディスクストレージ1004との接続には、iSCSIInternetSmallComputerSystemInterfaceといった別のプロトコルを用いてもよい。本発明は、ファイルサーバ1003とディスクストレージ1004との接続形態を限定するものではない。管理端末1005は、本発明におけるファイル共有システムを管理するために、システム管理者が使用する計算機である。管理端末1005の内部構成と内部処理の動作は後述図5を用いて説明する。図2は、本発明におけるクライアント1001の内部構成例を示すブロック図である。クライアント1001は、CPU2001、メモリ2002、ネットワークインタフェース2005を有し、これらは内部通信路によって相互に接続されている。CPU2001は、メモリ2002へ格納されたアプリケーションプログラム2003とファイルアクセスプログラム2004を実行する。アプリケーションプログラム2003は、エンドユーザが利用するプログラムであり、例えば、表計算プログラムである。ファイルアクセスプログラム2004は、ファイルサーバ1003がエンドユーザへ提供するファイル共有サービスへアクセスするためのプログラムである。アプリケーションプログラム2003がファイルサーバ1003のファイルへLANを通してアクセスする場合、ファイルアクセスプログラム2004がファイルアクセス要求をファイルサーバ1003へ送信する。そして、ファイルアクセスプログラム2004はファイルアクセス結果をファイルサーバ1003から受信し、アプリケーションプログラム2003へ送信する。図3は、本発明におけるファイルサーバ1003の内部構成例を示すブロック図である。ファイルサーバ1003は、CPU3001とメモリ3002とネットワークインタフェース3020とストレージインタフェース3021とを有し、これらは内部通信路によって相互に接続されている。CPU3001は、メモリ3002に格納されたファイルサーバプログラム3003、ファイルシステムプログラム3004、ファイルクローニングプログラム3005、ファイルクローニング管理プログラム3006を実行する。なお、前記プログラム群をディスク図示せず上に格納して適宜読み出して実行しても良い。また、メモリは、ファイルメタデータ3008とファイルのデータブロック情報であるデータ管理テーブル3011を保持している。図7で詳述するように、ファイルメタデータ3008とデータ管理テーブル3011はファイル毎に作成される。また、ファイルサーバ1003の再起動後に再構成できるよう、ファイルメタデータ3008とデータ管理テーブル3011は、ディスクシステム1004のディスク4005に保存される。ファイルメタデータ3008は、ファイルサイズやアクセス許可フラグ等を持つファイル管理情報であるinode3009、クローンファイルの属性を保持するフラグ3010、ファイルが最も小さく切り詰められたデータが削除された後のサイズを格納する最小サイズ3012、クローン元ファイルを参照しているクローン子差分ファイルの数を持つ参照カウンタ3013を持つ。本発明では、inode3009がファイル管理情報の他に、図6で詳述するクローン元ファイル6011を指示すソースポインタ3020とクローン親差分ファイル6010を指示す親差分ポインタ3021を持つ。ソースポインタ3020と親差分ポインタ3021には、例えば、個々のinodeに割り当てられるユニークな番号であるinode番号を格納する。ただし、3020と3021に格納される情報を用いてinodeを識別できれば良く、特にinode番号に限定する訳ではない。ファイルクローニング機能は、これらのデータを用いてファイルクローニング機能を実現する。これらのデータの詳細な利用については後述する。なお、前記データやテーブルをディスク図示せず上に格納して適宜読み出して使用する、またはディスクに格納して使用しても良い。ファイルサーバプログラム3003は、クライアント1001のファイルアクセスプログラム2004からファイルアクセス要求を受け取る。そして、ファイルサーバプログラム3003は、ファイルシステムプログラム3004を用いてディスクストレージ1004に格納されたファイルのデータへアクセスするプログラムである。その際、アクセス対象のファイルがクローンファイルの場合は、ファイルシステムプログラム3004がクローンファイルに対する処理を実施する。ファイルサーバ1003の処理内容は後述する。図4は、本発明におけるディスクストレージ1004の内部構成例を示すブロック図である。ディスクストレージ1004は、CPU4001、メモリ4002、ディスクコントローラ4004、ストレージインタフェース4006を有し、それらは内部通信路によって相互に接続されている。さらに、ディスクコントローラ4004は、ディスク4005とも接続されておりディスク4005を制御している。ディスクコントローラ4004は、RAIDRedundantArraysofInexpensiveDisks機能を有し、複数のディスク4005を冗長化することでディスク装置の耐障害性を向上させる。CPU4001は、メモリ4002に格納されたストレージ管理プログラム4003を実行する。ストレージ管理プログラム4003は、ディスクコントローラ4004のRAID機能を管理するプログラムである。例えば、冗長化するディスク装置の構成を設定する。本発明において、ディスクストレージ1004は特殊なストレージ装置でも良く、また、冗長化機能を有しないストレージ装置でも良い。さらに、光学ディスクやテープ装置などを用いてもよい。つまり、本発明はファイルデータを保存する記憶装置を限定するものではない。図5は、本発明における管理端末1005の内部構成例を示すブロック図である。管理端末1005は、CPU5001、メモリ5005、ネットワークインタフェース5004を有し、それらは内部通信路によって相互に接続されている。CPU5001は、メモリ5005に格納されている管理プログラム5002と管理インタフェース5003を実行する。管理プログラム5002は、管理インタフェース5003を通して本発明におけるファイル共有システムを管理する機能をシステム管理者へ提供するプログラムである。システム管理者が管理インタフェース5003へ管理情報を入力すると、管理プログラム5002へその管理情報が伝えられる。管理プログラム5002は、その管理情報にしたがって、ファイルサーバ1003を設定する。管理プログラム5002の処理内容と管理インタフェース5003の詳細は後述する。次に、クローンファイル構造を説明する。図6は、本発明におけるクローンファイルのファイル関係を示す図である。本発明のファイルクローニング機能は、クローンファイルをクローン親ファイル6004とクローン子ファイル6003の2つに分けて定義する。クローン親ファイル6004は、クローンされるファイルと同じファイルを表現する。クローン親ファイル6004は、クローン元ファイル6011とクローン親差分ファイル6010によって構成される。クローン親ファイル6004は、クローンファイルの元となるファイルのように振る舞う。つまり、クローンファイル作成の前後で、クライアント1001がクローンファイルの元となるファイルへアクセスすると、クローン親ファイル6004へアクセスすることになる。クライアント1001がクローン親ファイル6004へアクセスする場合、ファイルシステムプログラム3004は、クローン元ファイル6011へアクセスする。同時に、ファイルシステムプログラム3004は、クローン親差分ファイル6010へもアクセスする。もし、クライアント1001がクローン親ファイル6004へデータを書き込む場合つまり、クローン元ファイル6011へデータを書き込む場合、ファイルシステムプログラム3004はそのデータをクローン親差分ファイルへ書き込む。この処理を実現するため、クローン元ファイル6011がオープンされる時、ファイルシステムプログラム3004は、クローン元ファイル6011のinode3009にある親差分ポインタ3021に、クローン親差分ファイル6010のinode番号を設定する。その後、ファイルシステムプログラム3004はクローン親差分ファイル6010をオープンし、クローン親差分ファイル6010のinode3009にあるソースポインタ3020にクローン元ファイル6011のinode番号を設定する。クライアント1001が、クローン元ファイル6011へデータを書き込もうとするとつまり、クローン親ファイル6004へデータを書き込もうとすると、ファイルシステムプログラム3004は親差分ポインタ3021からクローン親差分ファイル6010を求め、データをクローン親差分ファイル6010へ書き込む。以上の処理は、後で詳述する。前述のように、特許文献1では、管理が必要なスナップショットとクローンとを管理する必要がある。一方、本発明では、クローン親差分ファイル6010をクライアント1001へ公開することなくファイルクローニング機能を実現できるため、管理コストを削減できる。図6の例では、クローン親差分ファイル6010にデータ管理テーブル3011が無い点線部分。つまり、クローン親差分ファイル6010にはデータ6001が無い点線部分。つまり、クローン子ファイル6003の作成後、クライアント1001がクローン親ファイル6004へデータを書き込んでいない。このように、クローンファイルを作成する際には、クローン親差分ファイル6010はデータが無く、さらに、データ管理テーブル3011も無い。従って、クローン親差分ファイルを高速に作成できる。一方、クローン子ファイル6003は、クローン元ファイル6011とクローン子差分ファイル6012によって構成される。クローン子ファイル6003は、クローン元ファイル6011のコピーファイルのように振る舞う。クライアント1001がクローン子ファイル6003へアクセスする場合、ファイルシステムプログラム3004はクローン子差分ファイル6012へアクセスする。その際、ファイルシステムプログラム3004はクローン元ファイル6011へもアクセスする。もしクライアント1001がクローン子ファイル6003へデータを書き込む場合、ファイルシステムプログラム3004はそのデータをクローン子差分ファイル6012へ書き込む。この処理を実現するため、クローン子差分ファイル6012がオープンされる時、ファイルシステムプログラム3004はクローン子差分ファイル6012のinode3009にあるソースポインタ3020に、クローン元ファイル6011のinode番号を設定する。クライアント1001がクローン子差分ファイル6012へデータを書き込もうとするとつまり、クローン子ファイル6003へデータを書き込もうとすると、ファイルシステムプログラム3004はソースポインタ3020からクローン元ファイル6011を求める。そして、クローン元ファイル6011のデータと書き込みデータをあわせて、クローン子差分ファイル6012へ書き込む。これらの処理は後で詳述する。図6の例では、クライアント1001がクローン子ファイル6003へデータを書き込んだ結果、データ管理テーブル3011がファイルメタデータ6012に作成される。そのデータ管理テーブル3011が、ディスク4005のクローン子差分ファイルのデータブロック6002を指示している。また、クローン元ファイル6011のファイルメタデータにあるデータ管理テーブル3011は、クローン元ファイル6011のデータブロック6001を指示している。クローン親ファイル6004のファイル関係を示すため、クローン元ファイル6011のinode3009の親差分ポインタ3021は、クローン親差分ファイル6010のinode3009を指示している。同様に、クローン親差分ファイル6010のinode3009のソースポインタ3020もクローン元ファイル6011のinode3009を指示している。一方、クローン子ファイル6003のファイル関係を示すため、クローン子差分ファイル6012のinode3009のソースポインタ3020は、クローン元ファイル6011のinodeを指示している。また、クローン親差分ファイル6010のinode3009も、クローン元ファイル6011のinode3009を指示している。一方、クローン子ファイル6003のファイル関係を示すため、クローン子差分ファイル6012のinode3009は、クローン元ファイル6011のinodeを指示している。なお、それぞれのファイル6010、6011、6012のフラグ3010は、そのファイルの属性を示すフラグを保持する。設定されるフラグはGIGoldenImageフラグとCLONEフラグである。クローン子ファイルを作成する場合、ファイルクローニングプログラム3005は、クローン元ファイル6011のフラグ3010にクローン元ファイルであることを示すGIフラグを設定する。そして、クローン子差分ファイル6012のフラグ3010と、クローン親差分ファイル6010のフラグ3010とに、クローン差分ファイルであることを示すCLONEフラグを設定する。これらのフラグは、ファイルシステムプログラム3004が処理対象ファイルを特定するために使用される。図6の例の場合は、クローン子差分ファイルにデータがある。しかし、クローン子差分ファイルが作成された後にクローン子ファイルへ書き込みが無ければデータは無く、さらにデータ管理テーブル3011も無い。従って、クローン子差分ファイルを高速に作成できる。以上のように、クローンファイルのファイル関係が構築される。それぞれのファイルへの操作は後で詳述する。なお、図6は、クローン子ファイル6003が1つ作成される例を示している。本発明はクローン子ファイル6003の数を限定せず、クローン子ファイルを複数作成することも可能である。以降は、図6のように、クローン子ファイル6003が1つ作成されるものとして説明する。図7は、ファイル7001、ファイルメタデータ3008、データ管理テーブル3011及びディスク4005に格納されるファイルデータ7020の関係を示す図である。ファイル7001は、ファイルメタデータ3008とデータ管理テーブル3011を持つ。ファイル7001のサイズは、論理的なファイルブロック7030単位で管理される。例えば、ファイルの先頭から4キロバイトKBはブロック1、その次の4KBはブロック2として管理される。また、論理的なファイルブロック7030は、ディスクブロック7010とは異なり、ホール7022にもファイルブロック番号が割り当てられる。また、ディスク4005は、特定サイズのディスクブロックに分割して管理される。図7の場合、4KB毎のファイル7001のディスクブロック7010に分割されている。データ管理テーブル3011は、ファイル7001のファイルデータ7020を管理するテーブルである。データ管理テーブル3011の各レコードは、ファイルオフセット7002、開始ブロック位置7003とブロック長7004のフィールドを持つ。ファイルオフセット7002は、ファイルデータ7020の先頭からのオフセットを示す。開始ブロック位置7003は、ファイルデータ7020が格納されるディスクブロック6001の先頭のブロック番号を持つ。ブロック長7004は、ファイルデータ7020のブロック7010の長さを持つ。例えば、ファイルオフセット7002が0、開始ブロック位置7003が1、ブロック長7004が5である場合、ファイル7001の0バイトから20KB=4KB/ブロック5ブロックのデータは、ディスク4005のブロック番号1からブロック番号5に格納されていることを示す。同様に、ファイルオフセット7002が65536、開始ブロック位置7003が7、ブロック長7004が6である場合、65536バイト64KB目から24KB=4KB/ブロック6ブロックのデータは、ブロック番号7から始まりブロック番号12まで6ブロックに格納されていることを示す。図7の場合、ファイル7001のデータは、ファイルデータ7020のように、ファイルのデータ領域7021とホール7022を持つ。ホールとは、ディスク上のブロック7010が割り当てられていないデータ領域である。クライアント1001が、ファイル7001のホール7022の部分を読み出す場合、ブロック7010が無いため、ファイルシステムプログラム3004は0をクライアント1001へ返す。また、データ管理テーブル3011は、ディスクへデータを格納する時に作成される。同じく、新規ブロックが追加され、更にブロックが不連続である場合にのみ、レコードがデータ管理テーブル3011に追加される。図7の例では、ファイルに追加データが書き込まれブロック13が新たに使用される場合、2レコード目のブロック長7004の値が6から7へ1つ増加する。一方、ブロック14を新規に使用する場合には、レコード3レコード目を追加することもできる。このように、必要に応じたデータ管理テーブル3011へのレコード追加で、ファイル作成時に作成しなければならない管理データが削減でき、高速にファイルを作成できる。図8は、クローン子ファイル6003またはクローン親ファイル6004のデータ関係を示す図である。クローン子ファイル6003は、クローン子差分ファイル6012とクローン元ファイル6011とを重ねた様に構成される。クローン子差分ファイル6012のホールは、クローン子ファイル6003の作成後にデータが書き込まれていないつまり、差分情報が無い状態である。図8の場合、ファイルのブロック1にはクローン子差分ファイル6012にブロック番号10、クローン元ファイル6011にブロック番号1が割り当てられている。ここで、クライアント1001がクローン子ファイル6003のファイルブロック1を読み込む場合8003、ファイルシステムプログラム3004はクローン子差分ファイル6012のブロック番号10のデータを読み込む。また、クローン子差分ファイル6012のファイルブロック3はホール7022である。しかし、クローン元ファイル6011はブロック番号3が割り当てられている。ここで、クライアント1001がクローン子ファイル6003のファイルブロック3を読み込む場合8004、ファイルシステムプログラム3004はクローン元ファイル6011のブロック番号3のデータを読み込む。クライアント1001が、クローン子ファイル6003へデータを書き込むとクローン子差分ファイル6012へ、データが書き込まれる。書き込み8001の場合、クライアント1001が、クローン子ファイル6003のファイルブロック5にデータを書き込む。この場合、クローン子差分ファイル6012へブロックを割り当てて、クライアント1001から送られたデータを書き込む。また、クライアント1001がファイルブロック6にデータを書き込む場合8002、クローン子差分ファイル6012にブロック番号15が割り当てられているため、このディスク領域へデータを書き込む。以上のように、クライアント1001がクローン子ファイル6003へアクセスする場合、ファイルシステムプログラム3004は、まず、クローン子差分ファイル6012にブロックがあるかどうかを調べ、ブロックがある場合はそのデータを処理する。一方、クローン子差分ファイル6012にブロックが無い場合、ファイルシステムプログラム3004はクローン元ファイル6011のブロックを調べる。クローン元ファイル6011にブロックがある場合、ファイルシステムプログラム3004はそのブロックのデータを処理し、無い場合は0とする。なお、クローン親ファイル6004も同様となる。図9は、クローンファイル作成の動作例を示すフローチャートである。クライアント1001を利用するエンドユーザやファイルサーバ1003の管理者が、管理端末1005の管理プログラム5002を用いてクローンファイルを作成するステップ9001。管理プログラム5002は、管理インタフェース5003を通してファイルサーバ1003のファイルクローニング管理プログラム3006へ、クローンファイル作成を要求するステップ9002。ファイルクローニング管理プログラム3006は、クローンファイル作成要求を受理しステップ9003、ファイルクローニングプログラム3005へクローン子ファイル作成を要求するステップ9004。ファイルクローニングプログラム3005が、クローン子ファイル作成要求を受理すると、クローン元ファイル6011にするファイルを静止化する。そのため、ファイルクローニングプログラム3004は、そのファイルのフラグ3010にGIフラグを設定するステップ9010。GIフラグが設定されると、ファイルシステムプログラム3004は、その静止化されたファイルへの更新処理例えば、書き込み処理を禁止する。ステップ9010が終了した時点で、そのファイルはクローン元ファイル6011になる。次に、ファイルクローニングプログラム3005は、クローン子差分ファイル6012とクローン親差分ファイル6010を作成するステップ9006。そして、ファイルクローニングプログラム3005は、クローン子差分ファイル6012のinode3009のソースポインタ3020へクローン元ファイル6011のinode番号を設定するステップ9007。この処理により、クローン子差分ファイル6012のinode3009と、クローン元ファイル6011のinode3009とが対応付けられる。そして、ファイルクローニングプログラム3005は、クローン子差分ファイル6012のフラグ3010へ、CLONEフラグを設定する。以上のように、GIフラグをクローン元ファイル6011となるファイルのフラグ3010へ設定することにより、そのファイルを静止化できる。ファイルシステムプログラム3004はGIフラグを確認することで、当該ファイルがクローン元ファイル6011となり、更新が禁止されたことが分かる。また、ステップ9007において、ファイルクローニングプログラム3005は、クローン親差分ファイル6010のフラグ3010へ、CLONEフラグを設定する。そして、ファイルクローニングプログラム3005は、クローン親差分ファイル6010のinode3009のソースポインタ3020へ、クローン元ファイル6011のinode番号を設定する。そして、ファイルクローニングプログラム3005は、クローン元ファイル6011のinode3009の親差分ポインタ3021へ、クローン親差分ファイル6010のinode番号を設定する。同じく、ファイルクローニングプログラム3005は、クローン元ファイル6011の参照カウンタ3013の値を1つ上げる。最後に、ファイルクローニングプログラム3005は、クローンファイル作成結果を管理プログラム5002へ、管理インタフェース5003を通して通知するステップ9008。この結果、図6を用いて説明したクローンファイルのデータ関係が構築される。なお、クローンファイルを作成する際に、ファイルクローニングプログラム3005に同時作成数を入力するようにしても良い。その場合、ファイルクローニングプログラム3005はステップ9006を指定された同時作成数回実行する。ちなみに、本実施例が前提としているVDI環境では、まず、クローン元ファイル6011となる仮想ディスクファイルを作成して、その仮想ディスクファイルへVMのOSイメージをインストールする。そして、その仮想ディスクファイルに対してクローン子ファイル6003を作成する。VDI環境では、クライアント1001を利用するエンドユーザ毎に、クローン子ファイル6003を作成する。つまり、1000人のユーザがいれば1000の仮想ディスクファイルのクローン子ファイル6003を作成する。そして、エンドユーザは仮想ディスクファイルのクローン子ファイル6003を元にしてVMを起動する。一方、VMが作成された後は、クローン元ファイル6011を元にしてVMを起動することはないため、クローン元ファイル6011は更新されない。そこで、VDI環境を考慮し、図9のステップ9006において、ファイルクローニングプログラム3005がクローン親差分ファイル6010を作成しない方法もある。つまり、ファイルクローニングプログラム3005がクローン親差分ファイル6010を作成しなくとも済むため、クローンファイルの作成性能の向上が図れる。なお、クローン親差分ファイル6010を作成しない場合、クローンファイル作成後はクローン元ファイル6011の更新が禁止される。一方、ステップ9006において、ファイルクローニングプログラム3005がクローン親差分ファイル6010を作成せず、図12、図13で説明するクローン親ファイル6004へのデータ書き込みを行う時点で、クローン親差分ファイル6010を作成することも可能である。この方法では、クローン子ファイル6003を作成する時はクローン親差分ファイル6010を作成しないため、クローンファイル作成性能の向上を期待できる。さらに、クローン元ファイル6011への書き込みも可能になる。なお、従来技術では、取得したスナップショットに対するクローンファイルを作成している。スナップショットは、ある時点におけるファイルシステムイメージである。そのため、スナップショットを取得する際に、ファイルシステムプログラムはファイルシステムの管理情報を退避しておく必要がある。その結果、クローンファイルの作成に時間がかかる。しかしながら、本発明では、クローンファイル作成の際、スナップショットを取らなくても良いため、クローンファイル作成性能の向上が期待できる。同じく、従来技術では、クローン子差分ファイル6012の作成に相当する処理の実行では、そのクローン子差分ファイル6012のデータ管理テーブル3011に相当するテーブル全体を作成して、全てを初期化している。そのため、VDI環境でVMに割り当てる仮想ディスクファイルは数10GBのサイズで作成される場合があるため、初期化処理時間が長くなり、クローン処理が遅くなる。本発明では、データ管理テーブル3011の初期化は不必要なため、クローンファイル作成処理が高速であり、かつ余分なディスク容量を浪費することがない。図10は、クローンファイルの読み込み動作を示すフローチャートである。クライアント1001のアプリケーションプログラム2003が、クローン子ファイル6003やクローン親ファイル6004を読み込む場合、ファイルアクセスプログラム2004へファイル読み込みを要求する。そして、ファイルアクセスプログラム2004は、ファイル読み込み要求をファイルサーバ1003のファイルサーバプログラム3003へ送信するステップ10001。ファイルサーバプログラム3003がファイル読み込み要求を受信した後、ファイルサーバプログラム3003は、ファイル読み込み処理をファイルシステムプログラム3004へ要求するステップ10002。ファイル読み込み要求を受理したファイルシステムプログラム3004は、読み込み対象ファイルがクローン元ファイル6011かどうかをフラグ3010によって判定するステップ10003。ここで、読み込み対象ファイルがクローン元ファイル6011だった場合ステップ10003:YES、ファイルシステムプログラム3004は、クローン元ファイル6011のinode3009の差分ポインタ3021に格納されているクローン親差分ファイル6010のinode番号を元に、クローン親差分ファイル6010のファイルメタデータ3008を取得するステップ10004。次のステップ11000のファイルブロック読み出し処理は、クローン親差分ファイル6010のファイルメタデータ3008の状態に従い実行される。なお、ステップ11000の処理は、クローン子差分ファイル6012でも、クローン親差分ファイル6010でも共通である。一方、読み込み対象ファイルがクローン元ファイル6011でない場合ステップ10003:NO、ファイルシステムプログラム3004はステップ11000を実行する。ステップ11000の処理で、ファイルシステムプログラム3004が実際にファイルブロックを読み込む。本処理は後で詳述する。最後に、ファイルシステムプログラム3004がファイルサーバプログラム3003へファイル読み込み結果を返し、ファイルサーバプログラム3003はファイルアクセスプログラム2004へその結果を送信する。そして、ファイルアクセスプログラム2004は、アプリケーションプログラム2003へ結果を通知するステップ10005。以上の処理により、アプリケーションプログラム2003から要求されたファイル読み込み処理が実施できる。図11は、ファイルシステムプログラム3004のファイル読み込み動作を示すフローチャートである。ファイルシステムプログラム3004は、図10のステップ10004で求めたクローン親差分ファイル6010のファイルメタデータ3008のフラグ3010か、クローン子差分ファイル6012のファイルメタデータ3008のフラグ3010かに、GIフラグまたはCLONEフラグが設定されているかを確認するステップ11002、ステップ11003。フラグが設定されていない場合ステップ11003:NO、ファイルクローニング機能とは関係が無いファイルのため、通常のファイルとして処理するステップ11004。一方、いずれかのフラグが設定されている場合ステップ11003:YES、ファイルシステムプログラム3004はクローンファイルとして処理する。以下、クローン子差分ファイルに基づいて動作を説明する。なお、クローン親差分ファイルを用いる場合も同様の処理となる。ファイルシステムプログラム3004は読み込むファイル位置にクローン子差分ファイル6012のデータがあるかどうかを判定するステップ11005、ステップ11006。これは、図7で説明した管理情報を用いる。例えば、クライアント1001が4KBから10バイト読み込むことを要求した場合は、ファイル7001はディスクブロックを保持しているため、ファイルシステムプログラム3004はデータ有りと判定する。一方、クライアント1001が20KBから4KB読み込む場合、ファイル7001のその部分はホール7022であるため、ディスクブロックを保持していない。そのため、ファイルシステムプログラム3004はデータ無しと判定する。ステップ11006において、ファイルシステムプログラム3004がデータ有りと判定した場合、ファイルシステムプログラム3004はクローン子差分ファイル6012のデータを読み込み、そのデータを送信して図11の処理を終える。一方、ステップ11006において、ファイルシステムプログラム3004がデータ無しと判定した場合、ファイルシステムプログラム3004は最小サイズ3012と読み込み位置を比較するステップ11012。読み込み位置が最小サイズ3012のデータ最後尾位置より後ろの場合ステップ11012:YES、ファイルシステムプログラム3004は0を返すステップ11010。この処理は、クローン子差分ファイル6012がクローン元ファイル6011より切り詰められたデータが削除された後、クライアント1001がクローン子差分ファイル6012のサイズを伸長した時に有効である。この処理を行うと、クローン子差分ファイル6012のデータを切り詰めた部分のデータがホールになる。クライアント1001がこのホール部分を読み込む場合、ファイルシステムプログラム3004は0で送信する必要がある。しかし、ファイルシステムプログラム3004は、クローン子差分ファイル6012にデータが無かったのかクローン子ファイル6003が更新されていない、切り詰められたのかどうかを、ホールだけでは判定できない。そのため、最小サイズ3012が切り詰められた時の最小サイズを記憶する。ファイルシステムプログラム3004は最小サイズ3012のデータ最後尾位置と読み出し位置を比較することによって、0を返すかクローン元ファイル6011のデータを返すかを判定できるようになる。一方、ステップ11012での条件判定結果がNOの場合、ファイルシステムプログラム3004は、クローン元ファイル6011のデータ管理テーブル3011からクローン元ファイル6011がデータブロックを持っているかどうかを調べるステップ11008、ステップ11009。クローン元ファイル6011がデータブロックを持っていない場合ステップ11009:NO、ステップ11010へ進み、ファイルシステムプログラム3004は0を返して終了する。一方、ステップ11009での条件判定結果がYESの場合、ファイルシステムプログラム3004はクローン元ファイル6011のデータを返して終了する。以上の処理により、クライアント1001は、クローン子ファイル6003またはクローン親ファイル6004を読み込むことができるファイル読み込み動作サブルーチン11000のステップ11012により、クローン子ファイルのサイズとクローン元ファイルのサイズが異なって場合でも、正しくデータを読み出すことができる。もし、ファイルシステムプログラム3004がステップ11012を実施しない場合、クローン子差分ファイル6012のデータがディスクブロックを削除することによって0に変更されたのか、元々データが無かったのかを判断できない。図12は、クローンファイルへのデータ書き込み動作を示すフローチャートである。クライアント1001のアプリケーションプログラム2003が、クローン子ファイル6003やクローン親ファイル6004へデータを書き込む場合、ファイルアクセスプログラム2004へファイル書き込みを要求する。そして、ファイルアクセスプログラム2004は、ファイル書き込み要求をファイルサーバ1003のファイルサーバプログラム3003へ送信するステップ1201。ファイルサーバプログラム3003がファイル書き込み要求を受信した後、ファイルサーバプログラム3003はファイル書き込み処理をファイルシステムプログラム3004へ要求するステップ1202。ファイル書き込み要求を受理したファイルシステムプログラム3004は、データ書き込み対象ファイルがクローン元ファイル6011かどうかをフラグ3010によって判定するステップ1203。ここで、データ書き込み対象ファイルがクローン元ファイル6011だった場合ステップ1203:YES、ファイルシステムプログラム3004は、クローン元ファイル6011のinode3009の親差分ポインタ3021に格納されているクローン親差分ファイル6010のinode番号を元に、クローン親差分ファイル6010のファイルメタデータ3008を取得するステップ1204。ここで、クローン親ファイル6004への書き込み時点でクローン親差分ファイル6010を作成する場合、ファイルシステムプログラム3004がステップ1204を実行する時に、ファイルクローニングプログラム3005へステップ9006の実行を要求する。次のステップ13000では、クローン親差分ファイル6010のファイルメタデータ3008に基づいて動作する。なお、ステップ13000の処理は、クローン子差分ファイル6012でも、クローン親差分ファイル6010でも共通である。一方、ステップ1203がNOであった場合は、ファイルシステムプログラム3004の処理はなく、次のステップ13000へ進む。ステップ13000によってファイルシステムプログラム3004が実際にファイルブロック書き込む。本処理は後で詳述する。最後に、ファイルシステムプログラム3004がファイルサーバプログラム3003へファイル書き込み結果を返し、ファイルサーバプログラム3003はファイルアクセスプログラム2004へその結果を送信する。そして、ファイルアクセスプログラム2004は、アプリケーションプログラム2003へ結果を渡すステップ1205。以上の処理により、アプリケーションプログラム2003から要求されたファイル書き込み処理が実施できる。図13は、ファイルシステムプログラム3004のファイル書き込み動作を示すフローチャートである。ファイルシステムプログラム3004は、図12のステップ1204で求めたクローン親差分ファイル6010のファイルメタデータ3008のフラグ3010か、クローン子差分ファイル6012のファイルメタデータ3008のフラグ3010かに、GIフラグまたはCLONEフラグが設定されているか確認するステップ13002、ステップ13003。フラグが設定されていない場合、ファイルクローニング機能とは関係が無いファイルのため、通常のファイルとして処理するステップ13004。一方、いずれかのフラグが設定されている場合ステップ13003:YES、ファイルシステムプログラム3004はクローンファイルとして処理する。以下クローン子差分ファイルに基づいて動作を説明する。なお、クローン親差分ファイルを用いる場合も同様の処理となる。ファイルシステムプログラム3004は書き込むファイル位置にクローン子差分ファイル6012のデータがあるかどうかを判定するステップ13005。これは、図7で説明した管理情報を用いる。例えば、クライアント1001が4KB目から10バイト分のデータを書き込む場合、ファイル7001はディスクブロックを保持しているため、ファイルシステムプログラム3004はデータ有りと判定する。一方、クライアント1001が20KB目から4KB書き込む場合、ファイル7001のその部分はホール7022であるため、ディスクブロックを保持していない。そのため、ファイルシステムプログラム3004はデータ無しと判定する。ステップ13005において、ファイルシステムプログラム3004がデータ無しと判定した場合、ファイルシステムプログラム3004は、新たなディスクブロックをクローン子差分ファイル6012へ割り当てるステップ13006。そして、図7で説明したように、ファイルシステムプログラム3004は、割り当てたブロックが既に割り当てられているブロックの次から始まらない場合はデータ管理テーブル3011に新たなレコードを作成するステップ13020。次に、ファイルシステムプログラム3004はステップ13020で作成した新規レコードをディスクへ書き込むか、または、既にあるレコードを更新するステップ13021。ステップ13006、ステップ13020、ステップ13021の処理により、クローン子差分ファイル6012へデータが書き込まれる時にデータ管理テーブル3011のレコードを追加していく。そのため、クローン子差分ファイル6012の作成時には、データ管理テーブル3011のレコードを作成する必要が無い。その結果、クローン子差分ファイル6012を高速に作成することが可能となる。そして、ファイルシステムプログラム3004は、クローン元ファイル6011にデータが有ればメモリへ読み込み、そのデータを書き込みデータで書き換えてから、割り当てたディスクブロックへ書き込むステップ13022。もしクローン元ファイル6011にデータが無ければ割り当てたブロックへ書き込みデータをそのまま書き込む。一方、ステップ13005において、ファイルシステムプログラム3004がデータ有りと判定した場合YESに分岐、ファイルシステムプログラム3004は書き込みサイズがブロック7010のサイズ図7では4KBより小さいか同じかを判定するステップ13009。書き込みサイズがブロック7010のサイズと同じ場合ステップ13009:一致、ファイルシステムプログラム3004は、書き込みデータをディスクブロックへそのまま書き込む。一方、ステップ13009が不一致の場合、ファイルシステムプログラム3004は、クローン元ファイル6011のディスク4005のデータを、一旦、メモリ3002へ読み込むステップ13010。そして、ファイルシステムプログラム3004は、メモリ3002へ読み込んだデータの書き込み箇所へデータを書き込むステップ13011。そして、ファイルシステムプログラム3004は、メモリ3002にあるデータをディスク4005へ書き込むステップ13012。ファイルシステムプログラム3004は、ディスクブロック毎に読み書きを処理するため、このようにブロックサイズより書き込みサイズが小さい場合は、ディスクにあるデータをメモリへ読み込み、そのデータを更新してから書き込む必要がある。ただし、書き込みサイズがディスクブロックと同じサイズの場合は読み込む必要はない。一方、ステップ13005でファイルシステムプログラム3004がデータ無しと判定した場合NOに分岐、ファイルシステムプログラム3004は、新たなディスクブロックをクローン子差分ファイル6012へ割り当てるステップ13006。そして、ファイルシステムプログラム3004は、割り当てたディスクブロックへデータを書き込み、処理を終えるステップ13012。以上の処理により、クライアント1001は、クローン子ファイル6003またはクローン親ファイル6004へデータを書き込むことができる。図14は、クローンファイルのサイズ変更動作を示すフローチャートである。クライアント1001のアプリケーションプログラム2003が、クローン子ファイル6003やクローン親ファイル6004のサイズを変更する場合、ファイルアクセスプログラム2004へファイルサイズ変更を要求する。そして、ファイルアクセスプログラム2004は、ファイルサイズ変更要求をファイルサーバ1003のファイルサーバプログラム3003へ送信するステップ14001。ファイルサーバプログラム3003がファイルサイズ変更要求を受信した後、ファイルサーバプログラム3003は、ファイルサイズ変更処理をファイルシステムプログラム3004へ要求するステップ14002。ファイルサイズ変更要求を受理したファイルシステムプログラム3004は、ファイルサイズ変更対象ファイルがクローン元ファイル6011かどうかをフラグ3010によって判定するステップ14003。ここで、ファイルサイズ変更対象ファイルがクローン元ファイル6011だった場合ステップ14003:YESは、ステップ14004を実行する。ステップ14004でファイルシステムプログラム3004は、クローン元ファイル6011のinode3009の親差分ポインタ3021に格納されているクローン親差分ファイル6010のinode番号で、クローン親差分ファイル6010のファイルメタデータ3008を取得する。次のステップ15000では、クローン親差分ファイル6010のファイルメタデータ3008でファイルサイズ更新処理を実行する。なお、ステップ15000の処理内容は、クローン子差分ファイル6012でも、クローン親差分ファイル6010でも共通である。一方、ステップ14003の条件判定結果がNOであった場合は、ファイルシステムプログラム3004の処理はなく、ステップ15000へ進む。ステップ15000でファイルシステムプログラム3004が、実際にファイルサイズを変更する。本処理は後で詳述する。次に、ファイルシステムプログラム3004が、ファイルサーバプログラム3003へファイルサイズ変更結果を通知する。ファイルサーバプログラム3003は、ファイルアクセスプログラム2004へ変更結果を送信する。ファイルアクセスプログラム2004は、アプリケーションプログラム2003へ変更結果を通知するステップ14005。以上の処理により、アプリケーションプログラム2003から要求されたファイルサイズ変更処理が実施できる。図15は、ファイルシステムプログラム3004のファイルサイズ変更動作を示すフローチャートである。ファイルシステムプログラム3004は、図14のステップ14004で求めたクローン親差分ファイル6010のファイルメタデータ3008のフラグ3010か、クローン子差分ファイル6012のファイルメタデータ3008のフラグ3010かに、GIフラグかCLONEフラグが設定されているかを確認するステップ15002、ステップ15003。フラグが設定されていない場合ステップ15003:NO、ファイルクローニング機能とは関係が無いファイルのため、通常のファイルとして処理するステップ15004。一方、いずれかのフラグが設定されている場合ステップ15003:YES、ファイルシステムプログラム3004は、クローンファイルとして処理する。以下クローン子差分ファイルへの処理として、動作を説明する。なお、クローン親差分ファイルを用いる場合も同様の処理となる。ファイルシステムプログラム3004は、現在のファイルサイズと変更後のファイルサイズを比較するステップ15005。その結果、変更後のファイルサイズが大きい場合ステップ15005:NO、ファイルシステムプログラム3004は、変更後のファイルサイズをクローン子差分ファイル6012のinode3009へ設定ステップ15009して処理を終える。一方、変更後のファイルサイズが小さい場合ステップ15005:YES、ファイルシステムプログラム3004は、切り詰められて削除されて不要となるデータブロックを解放する。つまり、ファイルシステムプログラム3004は、クローン子差分ファイル6012のデータ管理テーブル3011を設定しなおすステップ15006。そして、クローン子差分ファイル6012の最小サイズ3012と変更後のファイルサイズを比較する。変更後ファイルサイズの方が小さい場合ステップ15007:YES、クローン子差分ファイル6012の最小サイズ3012に、変更後のファイルサイズを設定するステップ15008。そして、ファイルシステムプログラム3004は、変更後のファイルサイズをクローン子差分ファイル6012のinode3009へ設定して処理を終えるステップ15009。一方、ステップ15007の条件判定結果がNOの場合変更後ファイルサイズの方が大きい、ファイルシステムプログラム3004は、変更後のファイルサイズをクローン子差分ファイル6012のinode3009へ設定して処理を終えるステップ15009。以上の処理により、クライアント1001は、クローン子ファイル6003またはクローン親ファイル6004のファイルサイズを変更できる。図16は、クローンファイルの削除動作を示すフローチャートである。クライアント1001のアプリケーションプログラム2003が、クローン子ファイル6003やクローン親ファイル6004を削除する場合、ファイルアクセスプログラム2004へファイル削除処理を要求する。そして、ファイルアクセスプログラム2004は、ファイル削除要求をファイルサーバ1003のファイルサーバプログラム3003へ送信するステップ16001。ファイルサーバプログラム3003がファイル削除要求を受信した後、ファイルサーバプログラム3003はファイル削除処理をファイルシステムプログラム3004へ要求するステップ16002。ファイル削除処理要求を受理したファイルシステムプログラム3004は、ファイルがクローン元ファイル6011かどうかをフラグ3010によって判定するステップ16003。ファイルがクローン元ファイル6011だった場合ステップ16003:YESは、ステップ16004を実行する。ステップ16004でファイルシステムプログラム3004は、クローン元ファイル6011のinode3009の親差分ポインタ3021に格納されているクローン親差分ファイル6010のinode番号で、クローン親差分ファイル6010のファイルメタデータ3008を取得する。次のステップ17000では、クローン親差分ファイル6010のファイルメタデータ3008に基づいてファイル削除動作を実行する。なお、ステップ17000のファイル削除の処理内容は、クローン子差分ファイル6012でも、クローン親差分ファイル6010でも共通である。一方、ステップ16003の条件判定結果がNOであった場合は、ファイルシステムプログラム3004の処理はなく、次のステップへ進む。ステップ17000によってファイルシステムプログラム3004が実際にファイルを削除する。本処理は後で詳述する。最後に、ファイルシステムプログラム3004がファイルサーバプログラム3003へファイル削除結果を返し、ファイルサーバプログラム3003は、ファイルアクセスプログラム2004へその結果を送信する。そして、ファイルアクセスプログラム2004は、アプリケーションプログラム2003へ削除結果を通知ステップ16005する。以上の処理により、アプリケーションプログラム2003から要求されたファイル削除処理が実施できる。図17は、ファイルシステムプログラム3004のクローンファイル削除動作を示すフローチャートである。ファイルシステムプログラム3004は、図16のステップ14004で求めたクローン親差分ファイル6010のファイルメタデータ3008か、クローン子差分ファイル6012のファイルメタデータ3008のフラグ3010にGIフラグかCLONEフラグが設定されているか確認するステップ17002、ステップ17003。フラグが設定されていない場合、ファイルクローニング機能とは関係が無いファイルのため、通常のファイルとして処理するステップ17004。一方、いずれかのフラグが設定されている場合ステップ17003:YES、ファイルシステムプログラム3004はクローンファイルとして処理する。以下、クローン子差分ファイルの削除処理としての動作を説明する。なお、クローン親差分ファイルの削除処理も同じ動作である。ファイルシステムプログラム3004は、ファイルがクローン子差分ファイルかクローン元ファイルかどうかをフラグ3010に設定されているフラグに基づいて判定する。フラグ3010にGIフラグが設定されている場合ステップ17005:NO、ファイルシステムプログラム3004は、クローン親差分ファイル6010を削除しクローン元ファイル6011の名前を不可視に変更するステップ17010。不可視ファイルに変更するため、例えば、ファイルシステムプログラム3004が、クローン元ファイル6011のファイル名の先頭データを.やNULL空白へ変更する。この変更で、クライアント1001からはファイルが削除されたように見える。しかし、クローン子ファイル6003はクローン元ファイル6011を利用するため、クローン元ファイル6011は削除できない。不可視ファイルを利用すると、この問題が解決できる。一方、フラグ3010にCLONEフラグが設定されている場合ステップ17005:YES、ファイルシステムプログラム3004は、クローン子差分ファイル6012を削除する。そして、ファイルシステムプログラム3004は、クローン元ファイル6011の参照カウンタ3013を1つ減じるステップ17006。そして、ファイルシステムプログラム3004は、参照カウント3013が0であるかを判定する。参照カウント3013が0でない場合ステップ17007:NO、ファイルシステムプログラム3004は削除処理を終了する。一方、参照カウント3013が0の場合ステップ17007:YES、ファイルシステムプログラム3004はクローン元ファイル6011が不可視ファイルかどうかを調べるステップ17008。クローン元ファイル6011が不可視ファイルではない場合ステップ17008:NO、ファイルシステムプログラム3004は削除処理を終了する。一方、クローン元ファイル6011が不可視ファイルの場合ステップ17008:YES、ファイルシステムプログラム3004は、クローン元ファイル6011を削除しステップ17009、ファイル削除処理を終了する。このように、ファイルシステムプログラム3004が参照カウンタ3013と不可視ファイルを利用することで、図6に示したクローンファイルのファイル関係を維持したまま、クローン子ファイル6003やクローン親ファイル6004を削除できる。図18は、管理端末1005の管理プログラム5002が管理者やエンドユーザへ提供する管理GUIGraphicUserInterface18001の例である。管理GUI18001には、クローン管理ビュー18002とクローン作成ビュー18011がある。クローン管理ビュー18002には、管理者やエンドユーザが表示したいクローンファイルのパスを入力する入力ボックス18003があり、その入力情報の送信ボタンがある。管理者やエンドユーザが、入力ボックス18003へクローンファイルのパスを入力し、送信ボタンを押すと、クローンツリー18004にクローン関係が表示される。クローンツリー18004には、図7で説明したクローンファイルのファイル関係が表示される。すなわち、クローン元ファイル6011のファイル名を示すボックス18005、クローン親差分ファイルのファイル名を示すボックス18008と、クローン子差分ファイルのファイル名を示すボックス18006及び18007が表示される。そして、ボックス18006と18007の右横に、クローン子差分ファイル6012に書き込まれた差分の割合を示す分化率differentiationratioを示すフィールド18009と18010が表示される。なお、図18は2つのクローン子ファイル6012が作成されている例を示したが、1ないし3つ以上でも構わない。また、管理者やエンドユーザがクローンを作成する場合、管理者やエンドユーザがクローン作成ビュー18011の入力ボックス18012と18013へ、クローン元ファイル6011とするファイルのパスと作成数を入力する。そして、管理者やエンドユーザが送信ボタンを押すと、クローンファイルの作成が実行される。最後に、その実行結果がボックス18014に表示される。以上に示した第一の実施例に依れば、ファイルシステムプログラムがクローンファイルを作成する際にファイルメタデータ3008のみ作成すれば良い。従って、ディスクブロックを管理するデータ管理テーブルの作成とその初期化が必要ないので、クローンファイルを高速に作成できる。第二の実施形態では、クローン子ファイル6003をクローン元ファイル6011として作成する。つまり、クローン子ファイル6003が入れ子になって作成されるネスト構造場合について説明する。本実施形態により、任意のタイミングでクローン子ファイルを自由に作成できる。図19は、クローンファイルの階層化構成の一例を示す図である。図19のクローン元ファイル6011は、図6のクローン元ファイルと同等である。クローン子差分ファイル119002は、クローン元ファイル6011を指す。前述の通り、クローン子差分ファイル119002が作成された後のクローン子ファイルへの更新データは、クローン子差分ファイル119002に保存される。一方、クローン親ファイルへの更新データは、クローン親差分ファイル119004へ保存される。なお、本実施例におけるクローン元ファイル6011は、最新のクローン親差分ファイルを指示す情報をファイルメタデータへ保持する。例えば、ここで、エンドユーザが、クローン子ファイルに対してクローン子ファイルを作成する。この場合、クローン子差分ファイル119002がクローン元ファイルとなる。そして、クローン子差分ファイル219003が作成されると同時に、クローン親差分ファイル219005が作成される。クローン子ファイルのクローンが作成された後、クローン子ファイルへの書き込みがあった場合、クローン子差分ファイル219003へ差分データが保存される。一方、クローン親ファイルへ書き込みがあった場合、クローン親差分ファイル219005へ差分データが保存される。また、クローン元ファイル6011は、inode3009に格納されたソースポインタ3020と親差分ポインタ3021により、最新のクローン親差分ファイルであるクローン親差分ファイル219005との関係を指示できる。以上のように、クローン子ファイルが階層的に入れ子になる場合、クローン親ファイルも入れ子になる。この方法により、クローン子ファイルへの書き込み差分データとクローン親ファイルへの書き込み差分データを保持することが可能になる。なお、図19では、クローン子ファイルに対するクローン子ファイルを1つのみ記載しているが、クローン子ファイルが2つ以上のクローン子ファイルを保持してよい。つまり、クローン子差分ファイル119002はクローン子差分ファイル219003の他にクローン子差分ファイル3を持つことができる。本実施例は、クローン子差分ファイルの数や種類を限定するものではない。図20は、クローンファイルの階層化構成において、クローンファイルの読み込み動作を示すフローチャートである。クローンファイルの読み込みの基本フローは、図10で説明した。ここでは、クローンファイルの階層化構成の動作フローの特徴について説明する。アプリケーションプログラム2003がクローン子ファイル6003やクローン親ファイル6004を読み込む場合、処理10003までは図10と同じである。処理10003において、読み込み対象ファイルがクローン元ファイルだった場合ステップ10003:YES、ファイルシステムプログラム3004は、読み込み対象ファイルに対する最新クローン親差分ファイルのファイルメタデータ3008を取得する。そして、ファイルシステムプログラム3004は、読み込み対象のクローン親差分ファイルのファイルメタデータとクローン元ファイルのファイルメタデータを用いて、処理21000を実行する。つまり、図19の場合、アプリケーションプログラム2003はクローン親ファイルを読み出すために、クローン元ファイル6011のファイルメタデータ3008が指示しているクローン親差分ファイル219005最新のクローン親差分ファイルのファイルメタデータ3008を取得する。一方、読み込み対象ファイルがクローン元ファイルでは無かった場合ステップ10003:NO、ファイルシステムプログラム3004は、大本GIファイルのクローン元ファイル以降、ルートのクローン元ファイルと呼ぶのファイルメタデータを取得するため、ステップ20005とステップ20006を実行する。ルートのクローン元ファイルのファイルメタデータを取得できる場合ステップ20006:YES、ファイルシステムプログラム3004は、読み込み対象ファイルのファイルメタデータとルートのクローン元ファイルのファイルメタデータを用いて、図21の処理21000を実行する。つまり、図19の場合、ファイルシステムプログラム3004は、クローン子差分ファイル219003が持つクローン元ファイルの情報を辿り、クローン子差分ファイル119002のファイルメタデータを取得する。さらに、ファイルシステムプログラム3004は、クローン子差分ファイル119002のファイルメタデータからクローン元ファイル6011のファイルメタデータを取得する。そして、ファイルシステムプログラム3004は、読み込み対象のクローン親差分ファイルのファイルメタデータとクローン元ファイルのファイルメタデータを用いて、図21の処理21000を実行する。以上のように、クローンファイルの階層化構成では、ファイルシステムプログラム3004は、最新のクローン親差分ファイルまたはクローン子差分ファイルのファイルメタデータを用いて、読み出し処理を実行する。そのために、ファイルシステムプログラム3004は、入れ子になっているクローン子差分ファイルを辿る必要がある。図21は、クローンファイルの階層化構成におけるファイル読み込み処理フローを示す。クローンファイルの階層化構成では、ファイル読み込み処理の入れ子構造を辿っていく。例えば、図19の場合、クローン子差分ファイル219003を読み出す場合、ファイルシステムプログラム3004はクローン子差分ファイル219003に更新差分データがあるかどうか調べる。そして、更新差分データが無い場合、ファイルシステムプログラム3004はクローン子差分ファイル119002の更新差分データを調べる。もしルートのクローン元ファイルまで更新差分データが無い場合、ファイルシステムプログラム3004は、0をアプリケーションプログラムへ送信する。もしルートのクローン元ファイルまでに更新差分データがあるならば、ファイルシステムプログラム3004は、更新差分データをアプリケーションプログラムへ送信する。図21では、まず、ファイルシステムプログラム3004は、ステップ21010において、最新のクローン親差分ファイルまたはクローン子差分ファイルのフラグ3010を確認する。そして、クローンファイルに関するファイルである場合ステップ11003:YES、ファイルシステムプログラム3004は、そのファイルがデータブロックを持つかどうかを調べるステップ11005、11006。そのファイルがデータブロックを持たない場合ステップ11006:NO、ファイルシステムプログラム3004は、クローン元ファイルのファイルメタデータを取得し、そのクローン元ファイルがデータを持つかどうかを調べるステップ21001。データブロックを持つ場合ステップ21002:YES、ファイルシステムプログラム3004は、そのデータブロックを読み出してアプリケーションプログラムへ送信するステップ11007。一方、データブロックが無い場合ステップ21002:NO、ファイルシステムプログラム3004はそのファイルがルートのクローン元ファイルかどうかをフラグ3010によって判断するステップ21003。ルートのクローン元ファイルの場合、ファイルシステムプログラム3004はステップ11012以降の処理を実行する。一方、ルートのクローン元ファイルでは無い場合ステップ21003:NO、ファイルシステムプログラム3004は入れ子構造を辿るためにステップ21001へ戻り、処理を続ける。以上のように、ファイルシステムプログラム3004がクローンファイルの階層化構成を辿り、データブロックがある場合はそのデータをアプリケーションプログラム2003へ送信し、無い場合は0をアプリケーションプログラム2003へ送信する。図22は、クローンファイルの階層化構成においてクローンファイルの書き込み動作を示すフローチャートである。クローンファイルの書き込みの基本フローは、図12で説明した。ここでは、クローンファイルの階層化構成の動作フローについて差分を説明する。アプリケーションプログラム2003が、クローン子ファイル6003やクローン親ファイル6004へデータを書き込む場合、処理1202までは図12と同じである。処理1202において、書き込み対象ファイルがクローン元ファイルだった場合ステップ1203:YES、ファイルシステムプログラム3004は、書き込み込み対象ファイルに対する最新クローン親差分ファイルのファイルメタデータ3008を取得する。そして、ファイルシステムプログラム3004は、書き込み対象のクローン親差分ファイルのファイルメタデータ3008とクローン元ファイルのファイルメタデータ3008を用いて処理23000を実行する。つまり、図19の場合、アプリケーションプログラム2003は、クローン親ファイルへデータを書き込むために、クローン元ファイル6011のファイルメタデータ3008が指示しているクローン親差分ファイル219005最新クローン親差分ファイルのファイルメタデータ3008を取得する。一方、書き込み対象ファイルがクローン元ファイルでは無かった場合ステップ1203:NO、ファイルシステムプログラム3004は、ルートのクローン元ファイルのファイルメタデータを取得するため、ステップ22001とステップ22002を実行する。ルートのクローン元ファイルのファイルメタデータを取得できる場合ステップ22002:YES、ファイルシステムプログラム3004は読み込み対象ファイルのファイルメタデータとルートのクローン元ファイルのファイルメタデータを用いて処理21000を実行する。つまり、図19の場合、ファイルシステムプログラム3004は、クローン子差分ファイル219003が持つクローン元ファイルの情報を辿り、クローン子差分ファイル119002のファイルメタデータを取得する。さらに、ファイルシステムプログラム3004は、クローン子差分ファイル119002のファイルメタデータからクローン元ファイル6011のファイルメタデータを取得する。そして、ファイルシステムプログラム3004は、書き込み対象のクローン親差分ファイルのファイルメタデータとクローン元ファイルのファイルメタデータを用いて処理23000を実行する。以上のように、クローンファイルの階層化構成では、ファイルシステムプログラム3004は最新のクローン親差分ファイルまたはクローン子差分ファイルを用いて処理する。そのため、ファイルシステムプログラム3004は入れ子になっているクローン子差分ファイルを辿る必要がある。図23は、クローンファイルの階層化構成におけるファイル書き込み処理フローを示す。クローンファイルの階層化構成では入れ子構造を辿っていく。例えば、図19の場合、クローン子差分ファイル219003へデータを書き出す場合、ファイルシステムプログラム3004は、クローン子差分ファイル219003に更新差分データがあるかどうか調べる。そして、更新差分データが無い場合、ファイルシステムプログラム3004は、クローン子差分ファイル119002の更新差分データを調べる。もし、ルートのクローン元ファイルまで更新差分データが無い場合、ファイルシステムプログラム3004は、何もデータが書き込まれていないデータブロックへのデータ書き込みとして処理する。もし、ルートのクローン元ファイルまでに更新差分データがあるならば、ファイルシステムプログラム3004は、そのデータの更新処理を実行する。図23では、まず、ファイルシステムプログラム3004は、ステップ23010で最新のクローン親差分ファイルまたはクローン子差分ファイルのフラグ3010を確認する。そして、クローンファイルに関するファイルである場合ステップ13003:Yes、ファイルシステムプログラム3004は、そのファイルがデータブロックを持つかどうかを調べるステップ13005。そのファイルがデータブロックを持たない場合ステップ13005:NO、ファイルシステムプログラム3004は、クローン元ファイルのファイルメタデータを取得し、そのクローン元ファイルがルートのクローン元ファイルかどうかを調べるステップ23001。ルートのクローン元ファイルの場合ステップ23001:YES、ファイルシステムプログラム3004は最新のクローン親差分ファイルまたは最新のクローン子差分ファイルへデータブロックを新たに割り当てて書き込み処理を行うステップ13006以降の処理。一方、クローン元ファイルが、ルートのクローン元ファイルでは無い場合ステップ23001:NO、ファイルシステムプログラム3004は、そのファイルのクローン元ファイルのファイルメタデータを取得し、そのファイルがデータを持っているかどうかを調べるステップ23002、ステップ13005。ファイルがデータブロックを持つ場合ステップ13005:YES、ファイルシステムプログラム3004は、処理13009以降を実行する。以上のように、ファイルシステムプログラム3004がクローンファイルの階層化構成を辿り、データブロックがある場合はそのデータを更新する。一方、データブロックが無い場合は、ファイルシステムプログラム3004が新たにデータブロックを割り当てる。以上説明した本実施例によって、クローンファイルを任意の時間で階層的に作成することが可能となる。第三の実施形態は、クライアントからコピープロシージャファイル全体の複製が発行された場合、データのコピーの代わりにファイルクローニング機能がクローンファイルを作成する例である。このファイルクローニング機能がクローンファイルを作成することにより、コピー時間を大幅に削減できる。なお、コピープロシージャは、例えば、CIFSCommonInternetFileSystemやNFSNetworkFileSystemなどによってサポートされている。図24は、管理端末1005の管理プログラム5002が管理者へ提供する管理GUI18001の例を示す図である。図24本実施形態と図18第二の実施形態との差異は、コピーモードを指定するボックス24001があることである。管理者が、管理GUI18001を用いて、コピーモード24001のチェックボックス24002を設定すると、コピープロシージャによるファイルのコピーを契機に、ファイルシステムプログラム3004はクローンファイルを作成する。そのため、コピーモードのチェックボックス24001が設定されると、管理端末1005の管理プログラム5002は、ファイルサーバ1003のファイルシステムプログラム3004へコピーモードが設定されたことを通知する。実際の処理は図25を用いて説明する。図25は、ファイルシステムプログラム3004がコピープロシージャを処理する処理フローを示す。エンドユーザクライアントが用いるアプリケーションプログラム2003は、コピープロシージャを通してファイルサーバ1003のファイルをコピーする。そして、ファイルアクセスプログラム2004はコピープロシージャを用いてファイルサーバへコピー要求を送信するステップ25001。コピープロシージャにはコピー元のファイル名とコピー先のファイル名が含まれており、ファイルサーバプログラム3003は、それらのファイル名に基づいてファイルのコピーを実施する。コピー要求を受信したファイルサーバプログラム3003はコピーモードを調べるステップ25002。コピーモードが0つまり、未設定の場合ステップ25003:0、ファイルサーバプログラム3003は通常のコピー処理を行うステップ25006。一方、コピーモードが1つまり、設定の場合ステップ25003:1、ファイルサーバプログラム3003は、ファイルクローニングプログラム3005へクローン子ファイルの作成を要求するステップ25004。そして、ファイルクローニングプログラム3005は、クローン子ファイルのメタデータを作成しステップ9006、クローン元ファイルにフラグを設定し参照カウンタを1つ増加させるステップ9007。ステップ9006とステップ9007の処理は、図9で説明した処理と同じ動作である。最後に、ステップ25005でファイルクローニングプログラム3005は、クローンファイルの作成結果をファイルサーバプログラム3003へ通知する。そして、ファイルサーバプログラム3003はクライアントへ前記作成結果を通知するステップ25005。以上のように、クライアントがコピープロシージャを用いてファイルコピーを行う場合、ファイルサーバが全データをコピーする必要がなく、一部のデータで構成したクローンファイルを作成することでコピー時間を大幅に削減できる。