JP2014517363A - クローンファイル作成方法と、それを用いたファイルシステム - Google Patents

クローンファイル作成方法と、それを用いたファイルシステム Download PDF

Info

Publication number
JP2014517363A
JP2014517363A JP2013550681A JP2013550681A JP2014517363A JP 2014517363 A JP2014517363 A JP 2014517363A JP 2013550681 A JP2013550681 A JP 2013550681A JP 2013550681 A JP2013550681 A JP 2013550681A JP 2014517363 A JP2014517363 A JP 2014517363A
Authority
JP
Japan
Prior art keywords
file
clone
data
block
difference
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2013550681A
Other languages
English (en)
Other versions
JP5775177B2 (ja
Inventor
仁志 亀井
隆喜 中村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Publication of JP2014517363A publication Critical patent/JP2014517363A/ja
Application granted granted Critical
Publication of JP5775177B2 publication Critical patent/JP5775177B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • G06F16/1824Distributed file systems implemented using Network-attached Storage [NAS] architecture
    • G06F16/183Provision of network file services by network file servers, e.g. by using NFS, CIFS
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/11File system administration, e.g. details of archiving or snapshots
    • G06F16/128Details of file system snapshots on the file-level, e.g. snapshot creation, administration, deletion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems
    • G06F16/162Delete operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • G06F16/184Distributed file systems implemented as replicated file system
    • G06F16/1844Management specifically adapted to replicated file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/1873Versioning file systems, temporal file systems, e.g. file system supporting different historic versions of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0643Management of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]

Abstract

【課題】従来のファイルのクローン作成技術は、クローンファイル作成時に、スナップショットとファイルの管理テーブルを作成していたため、クローンファイルの作成時間と記憶容量が大きかった。
【解決手段】ファイルのクローンを作成する要求を受けた場合、ファイルへの更新を禁止し、差分ファイルを作成して、差分ファイルへ更新データを書き込む。さらに、差分ファイルを作成した後であって、差分ファイルに最初の更新要求を受けた場合、管理テーブルを作成する。これにより、高速にかつ大量のクローンファイル作成を可能とする。
【選択図】図6

Description

本発明は、ファイルクローニング機能を持つファイルシステムにおいて、クローンファイル作成性能の向上方法に関する。
近年、VDI(Virtual Desktop Infrastructure)に代表される仮想化技術の進展により、VM(Virtual Machine)の利用が拡大している。VMを素早く利用可能にするため、OS(Operating System)環境をインストールした仮想ディスクファイルをコピーすることが一般的になっている。
しかし、仮想ディスクファイルは数GB(Giga Bytes)の大きさになることがあるため、物理的にコピーすると数十秒から数十分ほど時間がかかる。そこで、仮想ディスクファイルを仮想的にコピーすることでコピーにかかる時間を削減可能なファイルクローン機能が注目されている(特許文献1)。
米国特許第7409511号明細書
特許文献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のデータ管理テーブルに記録することである。
前記のように、クローンファイル作成時にはスナップショットの作成が不要なため、クローンファイルを高速に作成できる。また、クローンファイルへの更新発生後に管理テーブルを作成するため、更新前に無駄な容量を確保しなくて済み、消費容量を削減できる。
本発明の構成例を示す図である。 クライアントの構成例を示す図である。 ファイルサーバの構成例を示す図である。 ディスクストレージ装置の構成例を示す図である。 管理端末の構成例を示す図である。 クローンファイルのファイル関係を示す図である ファイルの管理情報の関係を示す図である。 クローンファイルのデータの関係を示す図である。 クローンファイル作成の動作例を示すフローチャートである。 クローンファイル読み込みの動作例を示すフローチャートである。 ファイルシステムプログラムのファイル読み込み動作例を示すフローチャートである。 クローンファイル書き込みの動作例を示すフローチャートである。 ファイルシステムプログラムのファイル書き込み動作例を示すフローチャートである。 クローンファイルのサイズ変更動作例を示すフローチャートである。 ファイルシステムプログラムのクローンファイルのサイズ変更動作例を示すフローチャートである。 クローンファイルの削除動作例を示すフローチャートである。 ファイルシステムプログラムのクローンファイルの削除動作例を示すフローチャートである。 管理GUIの例である。 実施例2におけるクローンファイルの階層化構成を示す図である。 実施例2におけるクローンファイル読み込み動作例を示すフローチャートである。 実施例2におけるファイルシステムプログラムのクローンファイル読み込み動作例を示すフローチャートである。 実施例2におけるクローンファイル書き込み動作例を示すフローチャートである。 実施例2におけるファイルシステムプログラムのクローンファイル書き込み動作例を示すフローチャートである。 実施例3における管理GUIの例である。 実施例3におけるファイルコピーの動作例を示すフローチャートである。
以下、図面を参照しながら本発明の実施の形態を説明するが、本発明はこの実施形態に限定されるものではない。
本発明の第一の実施例を図1から図18で説明する。まず、構成を図1から図5で説明する。図1は、本発明におけるファイル共有システムの構成例を示す図である。クライアント1001は、ファイル共有システムを利用するエンドユーザが使用する計算機である。クライアント1001の内部構成と内部処理の動作は、後述(図2を用いて説明)する。
ネットワークスイッチ1002は、クライアント1001、管理端末1005、そして、ファイルサーバ1003をLAN(Local Area Network)によって接続可能とする装置である。ただし、LANを構成するために無線通信装置などを用いてもよく、本発明は接続形態を限定するものではない。ファイルサーバ1003は、クライアント1001を利用するエンドユーザへファイル共有サービスを提供する計算機である。内部の構成と内部の処理は後で後述する。ディスクストレージ1004は、ファイルサーバ1003に格納されるファイルデータを保持するためのディスク装置である。
ファイルサーバ1003とディスクストレージ1004は、FC(Fibre Channel)プロトコルを用いて接続されている。ファイルサーバ1003とディスクストレージ1004との接続には、iSCSI(Internet Small Computer System Interface)といった別のプロトコルを用いてもよい。本発明は、ファイルサーバ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は、RAID(Redundant Arrays of Inexpensive Disks)機能を有し、複数のディスク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は、そのファイルの属性を示すフラグを保持する。設定されるフラグはGI(Golden Image)フラグと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が管理者やエンドユーザへ提供する管理GUI(Graphic User Interface)18001の例である。管理GUI18001には、クローン管理ビュー18002とクローン作成ビュー18011がある。
クローン管理ビュー18002には、管理者やエンドユーザが表示したいクローンファイルのパスを入力する入力ボックス18003があり、その入力情報の送信ボタンがある。管理者やエンドユーザが、入力ボックス18003へクローンファイルのパスを入力し、送信ボタンを押すと、クローンツリー18004にクローン関係が表示される。クローンツリー18004には、図7で説明したクローンファイルのファイル関係が表示される。
すなわち、クローン元ファイル6011のファイル名を示すボックス18005、クローン親差分ファイルのファイル名を示すボックス18008と、クローン子差分ファイルのファイル名を示すボックス18006及び18007が表示される。そして、ボックス18006と18007の右横に、クローン子差分ファイル6012に書き込まれた差分の割合を示す分化率(differentiation ratio)を示すフィールド18009と18010が表示される。なお、図18は2つのクローン子ファイル6012が作成されている例を示したが、1ないし3つ以上でも構わない。
また、管理者やエンドユーザがクローンを作成する場合、管理者やエンドユーザがクローン作成ビュー18011の入力ボックス18012と18013へ、クローン元ファイル6011とするファイルのパスと作成数を入力する。そして、管理者やエンドユーザが送信ボタンを押すと、クローンファイルの作成が実行される。最後に、その実行結果がボックス18014に表示される。
以上に示した第一の実施例に依れば、ファイルシステムプログラムがクローンファイルを作成する際にファイルメタデータ3008のみ作成すれば良い。従って、ディスクブロックを管理するデータ管理テーブルの作成とその初期化が必要ないので、クローンファイルを高速に作成できる。
第二の実施形態では、クローン子ファイル6003をクローン元ファイル6011として作成する。つまり、クローン子ファイル6003が入れ子になって作成される(ネスト構造)場合について説明する。本実施形態により、任意のタイミングでクローン子ファイルを自由に作成できる。
図19は、クローンファイルの階層化構成の一例を示す図である。図19のクローン元ファイル6011は、図6のクローン元ファイルと同等である。クローン子差分ファイル1 19002は、クローン元ファイル6011を指す。前述の通り、クローン子差分ファイル1 19002が作成された後のクローン子ファイルへの更新データは、クローン子差分ファイル1 19002に保存される。
一方、クローン親ファイルへの更新データは、クローン親差分ファイル1 19004へ保存される。なお、本実施例におけるクローン元ファイル6011は、最新のクローン親差分ファイルを指示す情報をファイルメタデータへ保持する。例えば、ここで、エンドユーザが、クローン子ファイルに対してクローン子ファイルを作成する。この場合、クローン子差分ファイル1 19002がクローン元ファイルとなる。そして、クローン子差分ファイル2 19003が作成されると同時に、クローン親差分ファイル2 19005が作成される。
クローン子ファイルのクローンが作成された後、クローン子ファイルへの書き込みがあった場合、クローン子差分ファイル2 19003へ差分データが保存される。一方、クローン親ファイルへ書き込みがあった場合、クローン親差分ファイル2 19005へ差分データが保存される。また、クローン元ファイル6011は、inode3009に格納されたソースポインタ3020と親差分ポインタ3021により、最新のクローン親差分ファイルであるクローン親差分ファイル2 19005との関係を指示できる。
以上のように、クローン子ファイルが階層的に入れ子になる場合、クローン親ファイルも入れ子になる。この方法により、クローン子ファイルへの書き込み差分データとクローン親ファイルへの書き込み差分データを保持することが可能になる。
なお、図19では、クローン子ファイルに対するクローン子ファイルを1つのみ記載しているが、クローン子ファイルが2つ以上のクローン子ファイルを保持してよい。つまり、クローン子差分ファイル1 19002はクローン子差分ファイル2 19003の他にクローン子差分ファイル3を持つことができる。本実施例は、クローン子差分ファイルの数や種類を限定するものではない。
図20は、クローンファイルの階層化構成において、クローンファイルの読み込み動作を示すフローチャートである。クローンファイルの読み込みの基本フローは、図10で説明した。ここでは、クローンファイルの階層化構成の動作フローの特徴について説明する。
アプリケーションプログラム2003がクローン子ファイル6003やクローン親ファイル6004を読み込む場合、処理10003までは図10と同じである。処理10003において、読み込み対象ファイルがクローン元ファイルだった場合(ステップ10003:「YES」)、ファイルシステムプログラム3004は、読み込み対象ファイルに対する最新クローン親差分ファイルのファイルメタデータ3008を取得する。
そして、ファイルシステムプログラム3004は、読み込み対象のクローン親差分ファイルのファイルメタデータとクローン元ファイルのファイルメタデータを用いて、処理21000を実行する。つまり、図19の場合、アプリケーションプログラム2003はクローン親ファイルを読み出すために、クローン元ファイル6011のファイルメタデータ3008が指示しているクローン親差分ファイル2 19005(最新のクローン親差分ファイル)のファイルメタデータ3008を取得する。
一方、読み込み対象ファイルがクローン元ファイルでは無かった場合(ステップ10003:「NO」)、ファイルシステムプログラム3004は、大本(GIファイル)のクローン元ファイル(以降、ルートのクローン元ファイルと呼ぶ)のファイルメタデータを取得するため、ステップ20005とステップ20006を実行する。
ルートのクローン元ファイルのファイルメタデータを取得できる場合(ステップ20006:「YES」)、ファイルシステムプログラム3004は、読み込み対象ファイルのファイルメタデータとルートのクローン元ファイルのファイルメタデータを用いて、図21の処理21000を実行する。
つまり、図19の場合、ファイルシステムプログラム3004は、クローン子差分ファイル2 19003が持つクローン元ファイルの情報を辿り、クローン子差分ファイル1
19002のファイルメタデータを取得する。さらに、ファイルシステムプログラム3004は、クローン子差分ファイル1 19002のファイルメタデータからクローン元ファイル6011のファイルメタデータを取得する。そして、ファイルシステムプログラム3004は、読み込み対象のクローン親差分ファイルのファイルメタデータとクローン元ファイルのファイルメタデータを用いて、図21の処理21000を実行する。
以上のように、クローンファイルの階層化構成では、ファイルシステムプログラム3004は、最新のクローン親差分ファイルまたはクローン子差分ファイルのファイルメタデータを用いて、読み出し処理を実行する。そのために、ファイルシステムプログラム3004は、入れ子になっているクローン子差分ファイルを辿る必要がある。
図21は、クローンファイルの階層化構成におけるファイル読み込み処理フローを示す。クローンファイルの階層化構成では、ファイル読み込み処理の入れ子構造を辿っていく。例えば、図19の場合、クローン子差分ファイル2 19003を読み出す場合、ファイルシステムプログラム3004はクローン子差分ファイル2 19003に更新差分データがあるかどうか調べる。そして、更新差分データが無い場合、ファイルシステムプログラム3004はクローン子差分ファイル1 19002の更新差分データを調べる。
もしルートのクローン元ファイルまで更新差分データが無い場合、ファイルシステムプログラム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が指示しているクローン親差分ファイル2 19005(最新クローン親差分ファイル)のファイルメタデータ3008を取得する。
一方、書き込み対象ファイルがクローン元ファイルでは無かった場合(ステップ1203:「NO」)、ファイルシステムプログラム3004は、ルートのクローン元ファイルのファイルメタデータを取得するため、ステップ22001とステップ22002を実行する。
ルートのクローン元ファイルのファイルメタデータを取得できる場合(ステップ22002:「YES」)、ファイルシステムプログラム3004は読み込み対象ファイルのファイルメタデータとルートのクローン元ファイルのファイルメタデータを用いて処理21000を実行する。
つまり、図19の場合、ファイルシステムプログラム3004は、クローン子差分ファイル2 19003が持つクローン元ファイルの情報を辿り、クローン子差分ファイル1
19002のファイルメタデータを取得する。さらに、ファイルシステムプログラム3004は、クローン子差分ファイル1 19002のファイルメタデータからクローン元ファイル6011のファイルメタデータを取得する。そして、ファイルシステムプログラム3004は、書き込み対象のクローン親差分ファイルのファイルメタデータとクローン元ファイルのファイルメタデータを用いて処理23000を実行する。
以上のように、クローンファイルの階層化構成では、ファイルシステムプログラム3004は最新のクローン親差分ファイルまたはクローン子差分ファイルを用いて処理する。そのため、ファイルシステムプログラム3004は入れ子になっているクローン子差分ファイルを辿る必要がある。
図23は、クローンファイルの階層化構成におけるファイル書き込み処理フローを示す。クローンファイルの階層化構成では入れ子構造を辿っていく。例えば、図19の場合、クローン子差分ファイル2 19003へデータを書き出す場合、ファイルシステムプログラム3004は、クローン子差分ファイル2 19003に更新差分データがあるかどうか調べる。そして、更新差分データが無い場合、ファイルシステムプログラム3004は、クローン子差分ファイル1 19002の更新差分データを調べる。
もし、ルートのクローン元ファイルまで更新差分データが無い場合、ファイルシステムプログラム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が新たにデータブロックを割り当てる。
以上説明した本実施例によって、クローンファイルを任意の時間で階層的に作成することが可能となる。
第三の実施形態は、クライアントからコピープロシージャ(ファイル全体の複製)が発行された場合、データのコピーの代わりにファイルクローニング機能がクローンファイルを作成する例である。このファイルクローニング機能がクローンファイルを作成することにより、コピー時間を大幅に削減できる。なお、コピープロシージャは、例えば、CIFS(Common Internet File System)やNFS(Network File System)などによってサポートされている。
図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)。
以上のように、クライアントがコピープロシージャを用いてファイルコピーを行う場合、ファイルサーバが全データをコピーする必要がなく、一部のデータで構成したクローンファイルを作成することでコピー時間を大幅に削減できる。
本発明は、大型コンピュータ、サーバやパーソナルコンピュータなどの情報処理装置、ストレージシステムやHDDレコーダなどの情報・映像記憶装置、携帯電話などの通信装置に適用できる。
1001 クライアント
1002 ネットワークスイッチ
1003 ファイルサーバ
1004 ディスクストレージ
1005 管理端末
2001 CPU
2002 メモリ
2003 アプリケーションプログラム
2004 ファイルアクセスプログラム
2005 ネットワークインタフェース
3001 CPU
3020 ネットワークインタフェース
3021 ストレージインタフェース
3002 メモリ
3003 ファイルサーバプログラム
3004 ファイルシステムプログラム
3005 ファイルクローニングプログラム
3006 ファイルクローニング管理プログラム
3007 ファイルシステム管理データ
3008 ファイルメタデータ
3009 inode
3010 フラグ
3011 データ管理テーブル
3012 最小サイズ
3013 参照カウンタ
3020 ソースポインタ
3021 親差分ポインタ
4001 CPU
4002 メモリ
4003 ストレージ管理プログラム
4004 ディスクコントローラ
4005 ディスク
4006 ストレージインタフェース
5001 CPU
5002 メモリ
5002 管理プログラム
5003 管理インタフェース
5004 ネットワークインタフェース
6001、6002 データブロック
6003 クローン子ファイル
6004 クローン親ファイル
6010 クローン親差分ファイル
6011 クローン元ファイル
6012 クローン子差分ファイル
7001 ファイル
7002 ファイルオフセット
7003 開始ブロック位置
7004 ブロック長
7010 ブロック
7021 ファイルのデータ領域
7022 ホール
8001、8002 書き込み
8003、8004 読み出し
18001 管理GUI
18002 クローン管理ビュー
18011 クローン作成ビュー
18003 クローンファイルパス入力ボックス
18004 クローンツリー
18005 クローン元ファイル表示ボックス
18008 クローン親差分ファイル表示ボックス
18006、18007 クローン子差分ファイル表示ボックス
18009、18010 分化率
18011 クローン作成ビュー
18012 ファイルパス
18013 ファイル作成数
18014 実行結果
19002 クローン子差分ファイル1
19004 クローン親差分ファイル1
19003 クローン子差分ファイル2
19005 クローン親差分ファイル2
24001 コピーモード
24002 チェックボックス

Claims (12)

  1. クライアント端末とストレージシステムとに接続されるファイルサーバであって、
    プロセッサと、
    ファイルを管理するファイルシステムプログラムを格納するメモリとを有し、
    前記ファイルシステムプログラムは、
    前記ファイルのクローンを作成する要求を受けた場合、前記ファイルへの更新を禁止し、
    第1の差分ファイルを作成し、
    前記クローンへのアクセス要求を受けた場合、前記第1の差分ファイルへアクセスし、前記アクセスが
    (1)更新要求の場合は、
    (1a)前記更新要求で指定された前記第1の差分ファイルのファイルブロックに、前記ストレージシステムのディスクブロックが割り当てられていない場合は、そのファイルブロックに前記ストレージシステムのディスクブロックを割り当てて、そこに更新データを書き込み、
    (1b)そのファイルブロックに前記ストレージシステムのディスクブロックが割り当てられている場合は、そこに更新データを書き込み、
    (2)読み出し要求の場合は
    (2a)前記読み出し要求で指定された前記第1の差分ファイルのファイルブロックにデータが有ればそのデータを読み出し、
    (2b)そのファイルブロックにデータが無ければ、前記ファイルの対応するファイルブロックにデータがあればそのデータを読み出し、
    前記ファイルへの更新要求があった場合、第2の差分ファイルを作成し、
    前記更新要求で指定された前記第2の差分ファイルのファイルブロックに前記ストレージシステムのディスクブロックを割り当て、そこに更新データを書き込むように構成されていることを特徴とするファイルサーバ。
  2. 請求項1記載のファイルサーバであって、前記ファイルシステムプログラムは、
    前記ファイルのコピーファイル作成要求があった場合、前記ファイルへの更新要求の有無にかかわらず、前記第1の差分ファイルとともに、第2の差分ファイルを作成し、前記ファイルへのアクセス要求を受け付けた場合、前記第2の差分ファイルにアクセスし、
    前記アクセスが
    (1)更新要求の場合、
    (1a)前記更新要求で指定された前記第2の差分ファイルのファイルブロックに前記ストレージシステムのディスクブロックが割り当てられていない場合は、前記ストレージシステムのディスクブロックを割り当てて、そこに更新データを書き込み、
    (1b)そのファイルブロックにディスクブロックが割り当てられている場合は、そこに更新データを書き込み、
    (2)読み出し要求の場合、
    (2a)前記読み出し要求で指定された前記第2の差分ファイルのファイルブロックにデータが有ればそのデータを読み出し、
    (2b)そのファイルブロックにデータが無ければ、前記ファイルの対応するファイルブロックにデータがあればそのデータを読み出すように構成されていることを特徴とするファイルサーバ。
  3. 請求項1記載のファイルサーバであって、前記ファイルシステムプログラムは、
    前記第1の差分ファイルを作成した後であって、前記第1の差分ファイルに最初の更新要求を受けた場合、第1のデータ管理テーブルを作成し、
    その更新データを含むファイルデータのオフセットと、その更新要求で指定された前記第1の差分ファイルのファイルブロックに割り当てた前記ストレージシステムのディスクブロックの開始ブロック位置と、そのファイルデータブロック長とを前記第1のデータ管理テーブルに記録するよう構成されていることを特徴とするファイルサーバ。
  4. 請求項1記載のファイルサーバであって、前記ファイルシステムプログラムは、
    前記第2の差分ファイルを作成した後であって、前記第2の差分ファイルに最初の更新要求を受けた場合、第2のデータ管理テーブルを作成し、
    その更新データを含むファイルデータのオフセットと、その更新要求で指定された前記第2の差分ファイルのファイルブロックに割り当てた前記ストレージシステムのディスクブロックの開始ブロック位置と、そのファイルデータブロック長とを前記第2のデータ管理テーブルに記録するよう構成されていることを特徴とするファイルサーバ。
  5. 請求項2記載のファイルサーバであって、前記ファイルシステムプログラムは、
    前記第2の差分ファイルを作成した後であって、前記第2の差分ファイルに最初の更新要求を受けた場合、第2のデータ管理テーブルを作成し、
    その更新データを含むファイルデータのオフセットと、その更新要求で指定された前記第2の差分ファイルのファイルブロックに割り当てた前記ストレージシステムのディスクブロックの開始ブロック位置と、そのファイルデータブロック長とを前記第2のデータ管理テーブルに記録するよう構成されていることを特徴とするファイルサーバ。
  6. 請求項1記載のファイルサーバであって、前記第1の差分ファイルはメタデータを有し、前記メタデータは、前記第1の差分ファイルがクローンであることを示す情報を含むことを特徴とするファイルサーバ。
  7. 請求項2記載のファイルサーバであって、前記第1の差分ファイルはメタデータを有し、前記メタデータは、前記第1の差分ファイルがクローンであることを示す情報を含むことを特徴とするファイルサーバ。
  8. 請求項1記載のファイルサーバであって、前記ファイルシステムプログラムは、
    前記ファイルのクローンを作成する要求を受けるごとに、前記第1の差分ファイルを作成するよう構成され、
    前記ファイルはメタデータを有し、前記メタデータは、前記ファイルがクローンのソースであることを示す情報と、前記第1の差分ファイルのファイル数とを含むことを特徴とするファイルサーバ。
  9. 請求項1記載のファイルサーバであって、前記ファイルシステムプログラムは、
    (1)前記ファイルの削除要求を受けた場合は、前記第2の差分ファイルを削除し、前記ファイルを前記クライアント端末から見えないように設定し、
    (2)前記第1の差分ファイルの削除要求を受けた場合は、前記第1の差分ファイルを削除するよう構成されていることを特徴とするファイルサーバ。
  10. 請求項2記載のファイルサーバであって、前記ファイルシステムプログラムは、
    (1)前記ファイルの削除要求を受けた場合は、前記第2の差分ファイルを削除し、前記ファイルを前記クライアント端末から見えないように設定し、
    (2)前記第1の差分ファイルの削除要求を受けた場合は、前記第1の差分ファイルを削除するよう構成されていることを特徴とするファイルサーバ。
  11. コンピュータシステムであって、
    ファイルサーバと、
    ファイルサーバに接続される管理端末と、
    ファイルサーバに接続されるストレージシステムとを有し、
    前記ファイルサーバは、
    プロセッサと、
    ファイルを管理するファイルシステムプログラムを格納するメモリとを有し、
    前記ファイルシステムプログラムは、
    前記ファイルのクローンを作成する要求を受けた場合、前記ファイルへの更新を禁止し、
    第1の差分ファイルを作成し、
    前記クローンへのアクセス要求を受けた場合、前記第1の差分ファイルへアクセスし、前記アクセスが
    (1)更新要求の場合は、
    (1a)前記更新要求で指定された前記第1の差分ファイルのファイルブロックに、前記ストレージシステムのディスクブロックが割り当てられていない場合は、そのファイルブロックに前記ストレージシステムのディスクブロックを割り当てて、そこに更新データを書き込み、
    (1b)そのファイルブロックに前記ストレージシステムのディスクブロックが割り当てられている場合は、そこに更新データを書き込み、
    (2)読み出し要求の場合は
    (2a)前記読み出し要求で指定された前記第1の差分ファイルのファイルブロックにデータが有ればそのデータを読み出し、
    (2b)そのファイルブロックにデータが無ければ、前記ファイルの対応するファイルブロックにデータがあればそのデータを読み出し、
    前記ファイルへの更新要求があった場合、第2の差分ファイルを作成し、
    前記更新要求で指定された前記第2の差分ファイルのファイルブロックに前記ストレージシステムのディスクブロックを割り当て、そこに更新データを書き込むように構成されていることを特徴とするコンピュータシステム。
  12. 請求項11記載のコンピュータシステムであって、前記ファイルシステムプログラムは、
    前記ファイルのコピーファイル作成要求があった場合、前記ファイルへの更新要求の有無にかかわらず、前記第1の差分ファイルとともに、第2の差分ファイルを作成し、前記ファイルへのアクセス要求を受け付けた場合、前記第2の差分ファイルにアクセスし、
    前記アクセスが
    (1)更新要求の場合、
    (1a)前記更新要求で指定された前記第2の差分ファイルのファイルブロックに前記ストレージシステムのディスクブロックが割り当てられていない場合は、前記ストレージシステムのディスクブロックを割り当てて、そこに更新データを書き込み、
    (1b)そのファイルブロックにディスクブロックが割り当てられている場合は、そこに更新データを書き込み、
    (2)読み出し要求の場合、
    (2a)前記読み出し要求で指定された前記第2の差分ファイルのファイルブロックにデータが有ればそのデータを読み出し、
    (2b)そのファイルブロックにデータが無ければ、前記ファイルの対応するファイルブロックにデータがあればそのデータを読み出すように構成されていることを特徴とするコンピュータシステム。
JP2013550681A 2011-09-14 2011-09-14 クローンファイル作成方法と、それを用いたファイルシステム Expired - Fee Related JP5775177B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2011/005192 WO2013038447A1 (en) 2011-09-14 2011-09-14 Method for creating clone file, and file system adopting the same

Publications (2)

Publication Number Publication Date
JP2014517363A true JP2014517363A (ja) 2014-07-17
JP5775177B2 JP5775177B2 (ja) 2015-09-09

Family

ID=47830784

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013550681A Expired - Fee Related JP5775177B2 (ja) 2011-09-14 2011-09-14 クローンファイル作成方法と、それを用いたファイルシステム

Country Status (5)

Country Link
US (2) US9092153B2 (ja)
EP (1) EP2754027B1 (ja)
JP (1) JP5775177B2 (ja)
CN (1) CN103597440A (ja)
WO (1) WO2013038447A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018134985A1 (ja) * 2017-01-20 2018-07-26 株式会社日立製作所 ストレージ装置、その制御装置、およびその制御方法

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9495377B2 (en) * 2012-09-12 2016-11-15 International Business Machines Corporation Secure deletion operations in a wide area network
US8924443B2 (en) * 2012-10-05 2014-12-30 Gary Robin Maze Document management systems and methods
US9923762B1 (en) * 2013-08-13 2018-03-20 Ca, Inc. Upgrading an engine when a scenario is running
US9250828B2 (en) * 2013-10-29 2016-02-02 Skyera, Llc Writable clone data structure
WO2015172107A1 (en) 2014-05-09 2015-11-12 Nutanix, Inc. Mechanism for providing external access to a secured networked virtualization environment
US9619543B1 (en) * 2014-06-23 2017-04-11 EMC IP Holding Company LLC Replicating in virtual desktop infrastructure
US9569110B2 (en) * 2014-11-18 2017-02-14 International Business Machines Corporation Efficient management of cloned data
CN104462290B (zh) * 2014-11-27 2017-10-10 华为技术有限公司 文件系统复制方法及装置
KR102030786B1 (ko) * 2014-12-27 2019-10-10 후아웨이 테크놀러지 컴퍼니 리미티드 데이터 처리 방법, 장치 및 시스템
JP6281511B2 (ja) * 2015-03-24 2018-02-21 日本電気株式会社 バックアップ制御装置、バックアップ制御方法、及び、プログラム
WO2016186617A1 (en) * 2015-05-15 2016-11-24 Hewlett-Packard Development Company, L.P. Data copying
US11579861B2 (en) 2016-02-12 2023-02-14 Nutanix, Inc. Virtualized file server smart data ingestion
CN107273378B (zh) * 2016-04-07 2021-01-01 创新先进技术有限公司 一种文件存储方法及装置
US11218418B2 (en) 2016-05-20 2022-01-04 Nutanix, Inc. Scalable leadership election in a multi-processing computing environment
US10268384B2 (en) * 2016-09-16 2019-04-23 International Business Machines Corporation File transfers between machines without target CPU intervention
US11568073B2 (en) 2016-12-02 2023-01-31 Nutanix, Inc. Handling permissions for virtualized file servers
US10728090B2 (en) 2016-12-02 2020-07-28 Nutanix, Inc. Configuring network segmentation for a virtualization environment
US11562034B2 (en) 2016-12-02 2023-01-24 Nutanix, Inc. Transparent referrals for distributed file servers
US10824455B2 (en) 2016-12-02 2020-11-03 Nutanix, Inc. Virtualized server systems and methods including load balancing for virtualized file servers
US11294777B2 (en) 2016-12-05 2022-04-05 Nutanix, Inc. Disaster recovery for distributed file servers, including metadata fixers
US11281484B2 (en) 2016-12-06 2022-03-22 Nutanix, Inc. Virtualized server systems and methods including scaling of file system virtual machines
US11288239B2 (en) * 2016-12-06 2022-03-29 Nutanix, Inc. Cloning virtualized file servers
US11188422B2 (en) * 2017-06-02 2021-11-30 Apple Inc. Techniques for preserving clone relationships between files
US11086826B2 (en) 2018-04-30 2021-08-10 Nutanix, Inc. Virtualized server systems and methods including domain joining techniques
CN108710510A (zh) * 2018-05-07 2018-10-26 成都市极米科技有限公司 一种系统设置存储和克隆的方法及系统
US11194680B2 (en) 2018-07-20 2021-12-07 Nutanix, Inc. Two node clusters recovery on a failure
US11770447B2 (en) 2018-10-31 2023-09-26 Nutanix, Inc. Managing high-availability file servers
CN113853778B (zh) * 2020-01-17 2024-01-30 华为技术有限公司 一种文件系统的克隆方法及装置
US11768809B2 (en) 2020-05-08 2023-09-26 Nutanix, Inc. Managing incremental snapshots for fast leader node bring-up
CN117873955A (zh) * 2022-10-11 2024-04-12 成都华为技术有限公司 文件系统管理方法、装置和存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6473775B1 (en) * 2000-02-16 2002-10-29 Microsoft Corporation System and method for growing differential file on a base volume of a snapshot
US20040267836A1 (en) * 2003-06-25 2004-12-30 Philippe Armangau Replication of snapshot using a file system copy differential
US7334095B1 (en) * 2004-04-30 2008-02-19 Network Appliance, Inc. Writable clone of read-only volume
US7409511B2 (en) * 2004-04-30 2008-08-05 Network Appliance, Inc. Cloning technique for efficiently creating a copy of a volume in a storage system
US20090013009A1 (en) * 2007-07-02 2009-01-08 Kiyotaka Nakayama Using differential file representing differences of second version of a file compared to first version of the file

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7937547B2 (en) * 2005-06-24 2011-05-03 Syncsort Incorporated System and method for high performance enterprise data protection
WO2011127845A2 (zh) * 2011-05-04 2011-10-20 华为终端有限公司 一种移动通信终端间进行系统升级的方法、系统及终端

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6473775B1 (en) * 2000-02-16 2002-10-29 Microsoft Corporation System and method for growing differential file on a base volume of a snapshot
US20040267836A1 (en) * 2003-06-25 2004-12-30 Philippe Armangau Replication of snapshot using a file system copy differential
US7334095B1 (en) * 2004-04-30 2008-02-19 Network Appliance, Inc. Writable clone of read-only volume
US7409511B2 (en) * 2004-04-30 2008-08-05 Network Appliance, Inc. Cloning technique for efficiently creating a copy of a volume in a storage system
US20090013009A1 (en) * 2007-07-02 2009-01-08 Kiyotaka Nakayama Using differential file representing differences of second version of a file compared to first version of the file

Non-Patent Citations (6)

* Cited by examiner, † Cited by third party
Title
CSNB201000756001; 宮本 久仁男: Xen 徹底入門 -第2版- , 20090914, pp.326-329, 株式会社翔泳社 *
CSNB201101101001; 平 初: KVM徹底入門 , 20100707, pp.143-146, 株式会社翔泳社 *
CSND201000015011; 阿部 恵史: 'クラウド時代を支える先端ストレージ完全網羅' 月刊アスキードットテクノロジーズ 第15巻第2号, 20100201, pp.76-83, 株式会社アスキー・メディアワークス *
JPN6014049579; 宮本 久仁男: Xen 徹底入門 -第2版- , 20090914, pp.326-329, 株式会社翔泳社 *
JPN6014049581; 阿部 恵史: 'クラウド時代を支える先端ストレージ完全網羅' 月刊アスキードットテクノロジーズ 第15巻第2号, 20100201, pp.76-83, 株式会社アスキー・メディアワークス *
JPN6014049583; 平 初: KVM徹底入門 , 20100707, pp.143-146, 株式会社翔泳社 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018134985A1 (ja) * 2017-01-20 2018-07-26 株式会社日立製作所 ストレージ装置、その制御装置、およびその制御方法

Also Published As

Publication number Publication date
US20150220563A1 (en) 2015-08-06
CN103597440A (zh) 2014-02-19
US20130066930A1 (en) 2013-03-14
EP2754027A1 (en) 2014-07-16
US9092153B2 (en) 2015-07-28
US9558205B2 (en) 2017-01-31
JP5775177B2 (ja) 2015-09-09
WO2013038447A1 (en) 2013-03-21
EP2754027B1 (en) 2017-08-23

Similar Documents

Publication Publication Date Title
JP5775177B2 (ja) クローンファイル作成方法と、それを用いたファイルシステム
US11500897B2 (en) Allocation and reassignment of unique identifiers for synchronization of content items
US9171052B2 (en) Methods and systems for replicating an expandable storage volume
JP5876592B2 (ja) ファイルストレージシステムとファイルクローニング方法
US7664787B2 (en) System and method for creating an object-level snapshot in a storage system
JP4799936B2 (ja) 条件別スナップショット取得方法及びシステム
US8473636B2 (en) Information processing system and data management method
US9122397B2 (en) Exposing storage resources with differing capabilities
JP5541149B2 (ja) スナップショット採取プログラム、サーバおよびスナップショット採取方法
US7860909B2 (en) Search engine system using snapshot function of storage system
US20070192375A1 (en) Method and computer system for updating data when reference load is balanced by mirroring
JP2013524358A (ja) 情報処理システムの管理方法、及びデータ管理計算機システム
EP3935513B1 (en) Efficient space management for high performance writable snapshots
US8612495B2 (en) Computer and data management method by the computer
US20220188273A1 (en) Per-node metadata for custom node behaviors across platforms
US20200301948A1 (en) Timestamp consistency for synchronous replication
JP2006031608A (ja) 計算機、ストレージシステム、計算機が行うファイル管理方法、およびプログラム
US11496552B2 (en) Intent tracking for asynchronous operations
US20220114139A1 (en) Fractional consistent global snapshots of a distributed namespace
US20220197860A1 (en) Hybrid snapshot of a global namespace
US20210014131A1 (en) Efficient way to perform location slo validation
Aladyshev et al. Expectations of the High Performance Computing Cluster File System Selection

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20141125

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150120

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150310

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150327

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150616

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150702

R150 Certificate of patent or registration of utility model

Ref document number: 5775177

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees