(57)【要約】      （修正有）【課題】特定のディレクトリ配下のファイル数およびファイルデータの使用量について制限をかけることができるようにする。【解決手段】ファイル作成またはブロック割付け等の使用量が増えるファイルシステム更新要求があった場合、ファイルシステムインタフェース処理部１２１は使用量制限値判定処理部１５１に制御を渡す。使用量制限値判定処理部１５１は、使用予定量と制限値とを比較し、使用予定量の制限値を超えるかどうかを判定する。ここで、制限値を超えないと判断した場合は、使用量制限値判定処理部１５１は、制御をファイルシステムインタフェース処理部１２１に戻す。【選択図】図１７
2008123542.tif 000002
【特許請求の範囲】
【請求項１】
識別情報を有するディレクトリを用いてファイルを管理するためのファイル管理プログラムにおいて、
コンピュータを、
ディレクトリ毎に、記憶領域の使用量の制限値を設定する制限値設定手段、
ファイル操作要求があると、ファイル操作を実行した場合の各ディレクトリの記憶領域の使用予定量を計算し、各ディレクトリにおいて、前記制限値設定手段で設定された制限値と使用予定量とを比較する比較手段、
前記比較手段で比較された結果、使用予定量が制限値を超えるディレクトリが存在しない場合に、前記ファイル操作要求に応答してファイル操作を実行するファイル操作手段、
として機能させることを特徴とするファイル管理プログラム。
【請求項２】
前記制限値設定手段は、前記記憶領域の使用量の制限値として、前記ディレクトリ配下に配置可能なファイル数を設定することを特徴とする請求項１記載のファイル管理プログラム。
【請求項３】
前記制限値設定手段は、前記記憶領域の使用量の制限値として、前記ディレクトリ配下に配置されたファイルで使用可能な記憶容量を設定することを特徴とする請求項１記載のファイル管理プログラム。
【請求項４】
前記制限値設定手段は、各ディレクトリに対して、ユーザ毎に前記記憶領域の使用量の制限値を設定し、
前記比較手段は、前記ファイル操作要求を出したユーザの使用量と、当該ユーザの使用量の制限値とを比較することを特徴とする請求項１記載のファイル管理プログラム。
【請求項５】
前記制限値設定手段は、各ディレクトリに対して、グループ毎に前記記憶領域の使用量の制限値を設定し、
前記比較手段は、前記ファイル操作要求を出したユーザの属するグループの使用量と、当該グループの使用量の制限値とを比較することを特徴とする請求項１記載のファイル管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピュータのファイルを管理するためのファイル管理プログラムに関し、特にディレクトリ構造におけるファイルの所在を効率よく管理するファイル管理プログラムに関する。
【背景技術】
【０００２】
一般的に、コンピュータは、ファイルシステムによりハードディスク装置（ＨＤＤ：Hard Disk Drive）などの記憶装置に格納されるファイルを管理している。ファイルシステムは、ファイルの所在管理を行うための管理情報と、ファイル実体で構成される構造体である。
【０００３】
通常のファイルシステムは、多数のファイルを管理しやすくするために、階層構造を採っている。階層構造を有するファイルシステムでは、ディレクトリを節、一般ファイルを葉とする木構造を有している。
【０００４】
ファイルは、ファイル名と、そのファイルの所在を示す階層構造上の位置によって特定される。階層構造上の位置は、予め決められたルートディレクトリから順にディレクトリを辿り、ファイルが置かれたディレクトリに至るまでの経路で示される。このようなディレクトリの経路は、パスと呼ばれる。ファイルシステムは、パスとファイル名により、ファイルを探索する。
【０００５】
従来のファイルシステムでは、各ディレクトリに対して、そのディレクトリ配下のディレクトリやファイルに関する管理情報が設定されている。したがって、ファイルのパスとファイル名とが分かっていれば、ディレクトリ構造を上から順に辿ることで、目的のファイルにアクセスすることができる。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ところで、従来のファイルシステムの中には、ファイルシステム中のファイル数やファイルデータの使用量とその制限値をユーザ毎およびグループ毎に保持することができるものがある。このようなファイルシステムでは、ファイル数やファイルデータの使用量とその制限値を参照し、ユーザ毎およびグループ毎に使用量を制限することができる。
【０００７】
しかし、従来は、特定のディレクトリ配下のファイル数およびファイルデータの使用量について制限をかける機能を持つファイルシステムは存在しなかった。
しかも、従来のファイルシステムでは、ファイルから親ディレクトリを辿る手段を持っていない。そのため、通常のディレクトリ探索と異なる方法で、対象となるファイルを見つけたときに、そのファイルのパス名を生成するためには、ルートディレクトリから順に、全ての経路を検査し、該当するファイルを探索するしか手段がない。この場合、発見の確率を考慮すると平均的にファイルシステムの半分を探索しなければならない。そのため、処理負荷が大きく、大量の処理を高速に実行しなければならない大規模なファイルシステムでは実用的ではなかった。
【０００８】
また、ファイルから親ディレクトリを辿る有効な手段を持っていないことは、ファイルシステムの機能拡張を妨げる原因にもなっていた。たとえば、ディレクトリ配下の子ディレクトリを含むファイルに対してある種の属性(例えばファイルへのアクセスが発生してもアクセス時刻情報を更新しない)を設定する機能を考えた場合、ファイル、ディレクトリ個々にその性質を記録し、処理発生時にその情報を参照しその条件に従って動作する実装が考えられる。この場合、ファイルシステムの持つディレクトリの移動機能を考えた場合、移動先に求められる性質を、移動対象となるディレクトリ配下のディレクトリやファイルの全てに対してリアルタイムに特定の性質を再設定するのは、実際の運用上困難である。そのため、一貫性を犠牲にした中途半端なものしか実現できていなかった。
【０００９】
ファイルから親ディレクトリを辿ることができれば、あるディレクトリ配下の子ディレクトリやファイルに与えるべき性質を設定しておき、ファイルが操作された際に、ファイルから親ディレクトリを辿り、親ディレクトリに設定された性質に応じた処理をファイルに施すことができる。すなわち、無理に、あるディレクトリ配下の全てのディレクトリやファイルそれぞれに、性質を設定する必要がなくなる。
【００１０】
このように、ファイルからその親ディレクトリを辿れないことに起因して、ファイルシステムの応用範囲が狭められていた。たとえば、ディレクトリに対して与えた属性によって、そのディレクトリ配下の全てのディレクトリやファイルに特別な制御を行うことも難しかった。
【００１１】
本発明はこのような点に鑑みてなされたものであり、少ない処理負荷でファイルの所在を特定し、特定のディレクトリ配下のファイル数およびファイルデータの使用量について制限をかけることができるファイル管理プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記課題を解決するために、識別情報を有するディレクトリを用いてファイルを管理するためのファイル管理プログラムにおいて、コンピュータを、ディレクトリ毎に、記憶領域の使用量の制限値を設定する制限値設定手段、ファイル操作要求があると、ファイル操作を実行した場合の各ディレクトリの記憶領域の使用予定量を計算し、前記各ディレクトリにおいて、前記制限値設定手段で設定された制限値と使用予定量とを比較する比較手段、前記比較手段で比較された結果、使用予定量が制限値を超えるディレクトリが存在しない場合に、前記ファイル操作要求に応答してファイル操作を実行するファイル操作手段として機能させることを特徴とするファイル管理プログラムが提供される。
【００１３】
このようなファイル管理プログラムがコンピュータで実行されると、制限値設定手段により、ディレクトリ毎に、記憶領域の使用量の制限値が設定される。その後、ファイル操作要求があると、比較手段により、ファイル操作を実行した場合の各ディレクトリの記憶領域の使用予定量が計算され、各ディレクトリにおいて、制限値設定手段で設定された制限値と使用予定量とが比較される。そして、比較手段で比較された結果、使用予定量が制限値を超えるディレクトリが存在しない場合、ファイル操作手段により、ファイル操作要求に応答してファイル操作が実行される。
【発明の効果】
【００１４】
本発明では、特定のディレクトリ配下の記憶領域の使用量について制限をかけることができる。
【発明を実施するための最良の形態】
【００１５】
以下、本発明の実施の形態を図面を参照して説明する。
図１は、関連技術の原理構成図である。本発明のファイル管理プログラムを実行するコンピュータは、記憶領域１、管理情報２、ファイル操作手段３、親ディレクトリ情報設定手段４、親ディレクトリ情報提供手段５および探索手段６を有する。
【００１６】
記憶領域１は、特定のファイルシステムで管理される記憶領域である。たとえば、ハードディスク装置などのストレージデバイス内の記憶領域である。図１の例では、記憶領域１内に、ディレクトリ１ａ，１ｂ，１ｃとファイル１ｄとが格納されている。記憶領域１内のデータは、ディレクトリ１ａを最上位とした木構造を形成している。
【００１７】
たとえば、図１の例では、ディレクトリ１ａの下にディレクトリ１ｂが配置され、ディレクトリ１ｂの下にディレクトリ１ｃが配置され、ディレクトリ１ｂとディレクトリ１ｃとの下にファイル１ｄが配置されている。なお、ディレクトリ１ａ，１ｂ，１ｃとファイル１ｄとには、それぞれ識別情報ａ〜ｄが予め設定されている。
【００１８】
管理情報２は、記憶領域１内のディレクトリ１ａ，１ｂ，１ｃとファイル１ｄとのそれぞれに対応する親ディレクトリ情報２ａ〜２ｄを有している。
ファイル操作手段３は、ファイル操作要求に応答して、記憶領域１内において、ファイルを任意のディレクトリの下に配置する。たとえば、ファイル操作手段３は、ファイル１ｄをディレクトリ１ｂとディレクトリ１ｃとの下に配置する。また、ファイル操作手段３は、ファイル操作要求に応答して、上位ディレクトリの下に下位ディレクトリを配置する。
【００１９】
親ディレクトリ情報設定手段４は、ファイル操作手段３によりファイルが配置されると、配置されたファイルの親ディレクトリ情報として、ファイルを配置したディレクトリの識別情報を設定する。親ディレクトリ情報設定手段４は、ファイルが複数のディレクトリの下に配置された場合には、配置されたファイルの親ディレクトリ情報として、複数のディレクトリそれぞれの識別情報を設定する。
【００２０】
たとえば、親ディレクトリ情報設定手段４は、ファイル１ｄがディレクトリ１ｂとディレクトリ１ｃとの下に配置されると、ファイル１ｄの親ディレクトリ情報２ｄとして、ディレクトリ１ｂの識別情報ｂとディレクトリ１ｃの識別情報ｃとを設定する。また、親ディレクトリ情報設定手段４は、ファイル操作手段３により、上位ディレクトリの下に下位ディレクトリが配置されると、配置された下位ディレクトリの親ディレクトリ情報として、上位ディレクトリの識別情報を設定する。
【００２１】
親ディレクトリ情報提供手段５は、ファイル（あるいはディレクトリ）を指定した親ディレクトリ情報取得要求に応答して、ファイル（あるいはディレクトリ）の親ディレクトリ情報を参照し、ディレクトリの識別情報を出力する。たとえば、親ディレクトリ情報提供手段５は、ファイル１ｄに関する親ディレクトリ取得要求を受け取ると、ディレクトリ１ｂの識別情報ｂと、ディレクトリ１ｃの識別情報ｃとを出力する。
【００２２】
探索手段６は、ファイルの経路探索要求に応答して、ファイルの親ディレクトリ情報に示されているディレクトリの識別情報から順に、各ディレクトリの親ディレクトリ情報に設定されている識別情報で示されるディレクトリを辿り、最上位のディレクトリまでの経路を探索する。そして、探索手段６は、探索結果として、ファイルから最上位のディレクトリまでの経路を出力する。
【００２３】
図１の例では、探索手段６は、親ディレクトリ情報提供手段５に親ディレクトリ取得要求を出すことにより、ファイルやディレクトリの親ディレクトリ情報として設定されている識別情報を取得する。
【００２４】
このような構成のファイル管理装置によれば、ファイル作成のファイル操作要求が出されると、ファイル操作手段３によって、ファイルが作成される。すると、親ディレクトリ情報設定手段４によって、作成されたファイルに対応する親ディレクトリ情報として、そのファイルが配置されたディレクトリの識別情報が設定される。
【００２５】
その後、経路探索要求が出されると、探索手段６から親ディレクトリ情報提供手段５に親ディレクトリ取得要求が出される。たとえば、ファイル１ｄの識別情報ｄを指定した経路探索要求であれば、探索手段６から親ディレクトリ情報提供手段５へ、ファイル１ｄ（識別情報ｄ）の親ディレクトリ取得要求が出される。
【００２６】
親ディレクトリ取得要求を受けた親ディレクトリ情報提供手段５により、指定されたファイルまたはディレクトリの親ディレクトリ情報に設定されている識別情報が、探索手段６に出力される。たとえば、ファイル１ｄの親ディレクトリ取得要求を受け取ったのであれば、ファイル１ｄに対応する親ディレクトリ情報２ｄに設定されている識別情報ｂ，ｃが探索手段６に対して出力される。
【００２７】
すると、探索手段６により、受け取った識別情報が最上位のディレクトリに達するまで、受け取った識別情報を指定した親ディレクトリ取得要求が、繰り返し親ディレクトリ情報提供手段５に出力される。その結果、親ディレクトリ情報提供手段５から探索手段６へ、最初に指定したファイルから最上位のディレクトリに達するまでの経路上の各ディレクトリの識別情報が、順次出力される。たとえば、ファイル１ｄの経路探索要求であれば、ファイル１ｄの親ディレクトリ情報として２つの識別情報が設定されているため、「ｄ→ｃ→ｂ→ａ」と「ｄ→ｂ→ａ」との２つ経路の識別情報の列が、親ディレクトリ情報提供手段５から探索手段６へ出力される。
【００２８】
最後に、探索手段６により、探索結果の経路情報が出力される。たとえば、親ディレクトリ情報提供手段５から出力された識別情報が、後に出力されたものから順に並べられ、最上位のディレクトリからファイルに至るまでの経路として、探索手段６から出力される。ファイル１ｄの経路探索要求であれば、「ａ→ｂ→ｃ→ｄ」と「ａ→ｂ→ｄ」とが探索結果として出力される。
【００２９】
このようにして、ファイルを指定して、順に親ディレクトリを探索することが可能となる。たとえば、ファイルシステムのルートのディレクトリ情報を事前に保持することで、ルートのディレクトリまでのファイルからの逆探索を行い、各ディレクトリから子ファイル(ディレクトリを含む)へのパス名が生成できる。
【００３０】
しかも、各ファイルが複数の親ディレクトリ情報を保持できるため、複数のディレクトリの下に配置されたファイルについても全てのパス名が生成できる。
なお、図１に示したファイル管理装置の機能を、各種コンピュータに対して、ファイルシステムの一部として実装することができる。たとえば、ＵＮＩＸ（登録商標）系のＯＳ(Operating System)で動作するコンピュータ、WINDOWS（登録商標）系のＯＳで動作するコンピュータのいずれのコンピュータにも実装可能である。また、ファイルサーバに実装することで、既存のファイルシステムを有するコンピュータであっても、ネットワーク経由で本発明のファイルシステムによる機能を利用することが可能である。
【００３１】
［ファイルサーバによる本発明の実施の形態］
以下に、ファイルサーバの１つであるＮＡＳ(Network Attached Storage)ファイラに本発明に係るファイルシステムを実装する場合を例に採り、本発明の実施の形態を説明する。
【００３２】
図２は、本発明のシステム構成例を示す図である。図２に示すように、ＮＡＳファイラ１００には、ネットワーク１０を介して複数のクライアントコンピュータ（以下、単にクライアントと呼ぶ）２０、２０ａ，２０ｂ，２０ｃ，・・・が接続されている。ネットワーク１０は、たとえば、ＬＡＮ(Local Area Network)である。クライアント２０、２０ａ，２０ｂ，２０ｃ，・・・は、たとえば、ＵＮＩＸなどのマルチユーザに対応したＯＳで動作するコンピュータである。
【００３３】
図３は、ＮＡＳファイラのハードウェア構成例を示す図である。ＮＡＳファイラ１００は、ＣＰＵ(Central Processing Unit)１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０７を介してＲＡＭ(Random Access Memory)１０２、複数のハードディスクドライブ（ＨＤＤ:Hard Disk Drive）１０３，１０３ａ，１０３ｂ，・・・、グラフィック処理装置１０４、入力インタフェース１０５、および通信インタフェース１０６が接続されている。
【００３４】
ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳ(Operating System)のプログラムやアプリケーション部の少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。ＨＤＤ１０３，１０３ａ，１０３ｂ，・・・には、ＯＳやアプリケーション部が格納される。ＨＤＤ１０３，１０３ａ，１０３ｂ，・・・は、たとえばＲＡＩＤ(Redundant Array of Independent Disks)により管理され、高速で信頼性の高いファイル管理が行われる。
【００３５】
グラフィック処理装置１０４には、モニタ１１が接続されている。グラフィック処理装置１０４は、ＣＰＵ１０１からの命令に従って、画像をモニタ１１の画面に表示させる。入力インタフェース１０５には、キーボード１２とマウス１３とが接続されている。入力インタフェース１０５は、キーボード１２やマウス１３から送られてくる信号を、バス１０７を介してＣＰＵ１０１に送信する。
【００３６】
通信インタフェース１０６は、ネットワーク１０に接続されている。通信インタフェース１０６は、ネットワーク１０を介して、他のコンピュータとの間でデータの送受信を行う。
【００３７】
なお、図３には、ＮＡＳファイラ１００のハードウェア構成例を示したが、クライアント２０，２０ａ，２０ｂ，２０ｃ，・・・のハードウェア構成もほぼ同様である。ただし、クライアント２０，２０ａ，２０ｂ，２０ｃ，・・・は、ＨＤＤを複数有している必要はない。
【００３８】
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。
図４は、本実施の形態のシステムにおける処理機能を示す機能ブロック図である。クライアント２０は、アプリケーション部２１とネットワーク制御部２２とを有している。アプリケーション部２１は、ユーザの操作入力などによる命令に応じて処理を実行する。
【００３９】
アプリケーション部２１が実行する処理の中には、ファイル操作に関する処理要求の出力も含まれる。ファイル操作に関する処理とは、たとえば、ファイルの作成、ファイル移動、ファイル削除、ハードリンク作成である。
【００４０】
ハードリンクとは、あるファイル実体に対して、その本来の名前に加えて、別のパスによるアクセスも可能にする機能である。通常のファイルシステムでは、０個以上のファイルまたはディレクトリを子にもつディレクトリを節、ファイルを葉とする木構造を持つ。しかし、ＵＮＩＸ系のＯＳのファイルシステムにおいては、同一のファイルを子とする複数のディレクトリの存在を認めており、複数のディレクトリを親に持つファイルはハードリンクと呼ばれている。ハードリンクを持つファイルシステムは純粋な木構造とはならない。
【００４１】
また、アプリケーション部２１は、ＮＡＳファイラ１００のファイルシステムに対して、ディレクトリに対する属性の設定要求を出したり、ファイルを特定して、そのファイルのパスの取得要求を出したりすることもできる。
【００４２】
ネットワーク制御部２２は、アプリケーション部２１からの要求に応じて、所定のネットワークプロトコルにより、ＮＡＳファイラ１００と通信を行うことができる。ネットワーク制御部２２がＮＡＳファイラ１００と通信することで、アプリケーション部２１は、ＮＡＳファイラ１００内のファイルシステムを利用することができる。
【００４３】
ＮＡＳファイラ１００は、ネットワーク制御部１１０、ファイルシステム制御部１２０、入出力ドライバ部１３０、およびデータ記憶部１４０を有している。
ネットワーク制御部１１０は、ネットワーク１０を介したクライアント２０，２０ａ，２０ｂ，２０ｃ，・・・との間の通信を制御する。ネットワーク制御部１１０は、クライアント２０，２０ａ，２０ｂ，２０ｃ，・・・からの要求をファイルシステム制御部１２０に渡したり、要求に対するファイルシステム制御部１２０からの応答を、ネットワーク１０を介してクライアント２０，２０ａ，２０ｂ，２０ｃ，・・・に送信したりする。
【００４４】
ファイルシステム制御部１２０は、ファイルシステムインタフェース処理部１２１、ファイルシステム情報管理部１２２、属性設定管理部１２３、ファイル操作部１２４およびディスク管理部１２５を有している。
【００４５】
ファイルシステムインタフェース処理部１２１は、ネットワーク制御部１１０を介して、アプリケーション部２１からの要求を受け取り、その要求の内容に応じた処理の命令を、ファイルシステム情報管理部１２２、属性設定管理部１２３およびファイル操作部１２４に渡す。また、ファイルシステムインタフェース処理部１２１は、ファイルシステム情報管理部１２２、属性設定管理部１２３およびファイル操作部１２４から処理結果を受け取り、処理結果を示す応答をネットワーク制御部１１０を介してアプリケーション部２１に送る。
【００４６】
ファイルシステム情報管理部１２２は、ファイルシステムのディレクトリやファイルに関する情報を管理している。たとえば、ファイルシステム情報管理部１２２は、ディレクトリやファイルの親ディレクトリの情報を格納したり、ディレクトリやファイルの親ディレクトリの情報を参照して、ディレクトリパスを下位から上位へと辿ったりすることができる。
【００４７】
属性設定管理部１２３は、ディレクトリやファイルの属性を管理している。ここでいう属性は、ディレクトリやファイルに対して、所定の規則を与えるものである。たとえば、属性を設定することで、「ファイルへのアクセスが発生してもアクセス時刻情報を更新しない」という規則や、「ディレクトリ配下のディスク使用量が予め設定した制限値を超えない」という規則が与えられる。
【００４８】
ファイル操作部１２４は、データ記憶部１４０に格納されているファイルを操作する。ファイルの操作としては、ファイルの作成、ファイルの移動、ファイルの削除、ハードリンクの作成などがある。
【００４９】
ディスク管理部１２５は、ＲＡＩＤ機構などを用いて、データ記憶部１４０を構成するＨＤＤ１０３，１０３ａ，１０３ｂ，・・・に対するデータの入出力を管理する。
入出力ドライバ部１３０は、データ記憶部１４０に含まれるＨＤＤ１０３，１０３ａ，１０３ｂ，・・・それぞれの動作を制御する。また、入出力ドライバ部１３０は、ＨＤＤ１０３，１０３ａ，１０３ｂ，・・・へのデータの書き込みや、データの読み出しを行う。
【００５０】
データ記憶部１４０は、複数のＨＤＤ１０３，１０３ａ，１０３ｂ，・・・によりデータを記憶する。
次に、上記のような構成のシステムにおいて提供されるファイルシステムの構造について説明する。
【００５１】
図５は、本実施の形態におけるファイルシステム構造の一例を示す図である。たとえば、図５に示すファイルシステムでは、複数のディレクトリ３１〜３５と複数のファイル４１〜４４とを有している。ディレクトリ３１はルートディレクトリであり、木構造における最上位の位置に配置されている。
【００５２】
ディレクトリ３１の直接の子として、２つのディレクトリ３２，３３が配置されている。ディレクトリ３２の直接の子として、ディレクトリ３４と２つのファイル４１，４２とが配置されている。ディレクトリ３３の直接の子としてディレクトリ３５とファイル４３とが配置されている。ディレクトリ３４の直接の子として、２つのファイル４２，４３が配置されている。ディレクトリ３５の直接の子として、ファイル４４が配置されている。
【００５３】
このように、ディレクトリ３１〜３５とファイル４１〜４４とは、木構造に構造化されている。ただし、ハードリンクを用いると、ファイル４２やファイル４３のように、複数のディレクトリの子として配置することができる。すなわち、ファイル４２は、ディレクトリ３２の子であると共にディレクトリ３４の子でもある。
【００５４】
ここで、ハードリンクを用いたファイルシステムの構造が、ディレクトリやファイルの管理情報として、どのように定義されているのかについて説明する。
図６は、ファイルシステム構造の定義例を示す図である。図６の例は、ファイルシステム全体の管理情報の中から、図５に示したディレクトリ３２，３４の管理情報３２ａ，３４ａと、ファイル４１，４２の管理情報４１ａ，４２ａとの記述部分を抜き出したものである。
【００５５】
ディレクトリ３２，３４の管理情報３２ａ，３４ａには、直接の子ファイルの一覧、親ディレクトリ情報、および属性情報が設定されている。
直接の子ファイルの一覧には、そのディレクトリの直下に配置されたディレクトリとファイルとの名称（ディレクトリ名とファイル名）、およびそのディレクトリやファイルを特定する情報（識別情報）が設定されている。
【００５６】
親ディレクトリ情報には、そのディレクトリの直接上のディレクトリの識別情報が設定されている。属性情報には、そのディレクトリに対する属性情報が設定されている。
ファイル４１，４２の管理情報４１ａ，４２ａには、直接の親のディレクトリ情報として、親ディレクトリの識別情報が設定されている。特にファイル４２には、親ディレクトリが複数存在するため、ファイル４２の管理情報４２ａには、直接の親ディレクトリ情報のリスト（識別情報の配列）が設定されている。
【００５７】
このように、ファイル４１，４２に対して、直接の親ディレクトリの管理情報４１ａ，４２ａを設定したことで、ファイル４１，４２からそのファイルのパスを探索することが可能となる。その結果、ファイルからファイルパス名の高速な生成が実現できる。
【００５８】
また、各ディレクトリ３２，３４に属性情報を設定したことにより、所定のディレクトリ配下の全てのファイルおよびディレクトリをグループ化して、属性設定することが可能となる。
【００５９】
なお、各ファイル情報は識別情報で参照可能なデータ構造を取る。識別情報はＵＮＩＸファイルシステムの場合、inode番号が使用される。
次に、本発明のファイルシステムにおける処理内容を説明する。
【００６０】
［ハードリンクを含まないパス名探索］
まず、ハードリンクを含まない場合のパス名の探索方法について説明する。
図７は、ファイルシステム処理における指示の流れを示す図である。図７に示す矢印は、指示を出す側から指示（処理要求）を受ける側に対して向いている。なお、図７では、ファイルシステム情報管理部１２２と属性設定管理部１２３との中に、本実施の形態に係る処理機能が示されている。また、図４に示したクライアント２０のネットワーク制御部２２やＮＡＳファイラ１００のネットワーク制御部１１０などは、単に処理要求の伝送を仲介するものであるため、図７では省略している。
【００６１】
ファイルシステム情報管理部１２２は、親ディレクトリ情報格納処理部１２２ａと親ディレクトリ情報参照処理部１２２ｂとを有している。
親ディレクトリ情報格納処理部１２２ａは、ディレクトリやファイルの管理情報の１つとして、親ディレクトリ情報を格納する。
【００６２】
親ディレクトリ情報参照処理部１２２ｂは、親ディレクトリ取得要求に応じて、ディレクトリやファイルの管理情報内の親ディレクトリ情報を参照し、親ディレクトリの識別情報を返送する。たとえば、属性設定管理部１２３の上位ディレクトリ探索処理部１２３ｂからの親ディレクトリ取得要求に応じて、ディレクトリやファイルの管理情報内の親ディレクトリ情報を参照し、親ディレクトリに関する情報を上位ディレクトリ探索処理部１２３ｂに渡す。
【００６３】
属性設定管理部１２３は、ディレクトリ属性設定処理部１２３ａ、上位ディレクトリ探索処理部１２３ｂ、およびディレクトリ属性値返却部１２３ｃを有している。
ディレクトリ属性設定処理部１２３ａは、クライアント２０のアプリケーション部２１からの属性値設定要求に応じて、ディレクトリの管理情報に対して属性値を設定する。
【００６４】
上位ディレクトリ探索処理部１２３ｂは、クライアント２０のアプリケーション部２１からの経路探索要求に応じて、指定されたファイルの所在を示すパスを探索する。パスの探索の際には、ファイルシステム情報管理部１２２の親ディレクトリ情報参照処理部１２２ｂに、ファイルやディレクトリの親ディレクトリ情報取得要求を渡す。親ディレクトリの情報を繰り返し取得することで、指定されたファイルまでのルートディレクトリからのパスを探索することができる。
【００６５】
ディレクトリ属性値返却部１２３ｃは、アプリケーション部２１からのディレクトリ属性値の取得依頼に応じて、指定されたディレクトリに設定されている属性値を応答する。
アプリケーション部２１からファイルシステム制御部１２０へは、ファイル作成、ファイル移動、ファイル削除、ハードリンク作成、親ディレクトリ情報取得、親ディレクトリ情報順序設定、および属性設定などの処理要求が出される。たとえば、ファイル作成、ファイル移動などのファイル操作時には、アプリケーション部２１からファイルシステム制御部１２０に対して、ファイル操作要求が発行される。ファイルシステム制御部１２０では、ファイルシステムインタフェース処理部１２１が、ファイル操作部１２４に対して、ファイル操作要求に応じたファイル操作を指示する。
【００６６】
さらに、ファイルシステムインタフェース処理部１２１は、ファイルシステム情報管理部１２２に対して、ファイル情報の更新を依頼する。このファイル更新依頼では、従来と異なり、親ディレクトリ情報の更新指示も出される。ファイル情報の更新依頼を受けたファイルシステム情報管理部１２２は、ファイルの更新日時を設定するなどの一般的なファイルの情報を設定すると共に、親ディレクトリ情報格納処理部１２２ａに対して、親ディレクトリ情報の格納を指示する。
【００６７】
すると、親ディレクトリ情報格納処理部１２２ａが、操作対象となったファイルの管理情報に対して、そのファイルの親ディレクトリの識別情報を設定する。具体的には、親ディレクトリ情報格納処理部１２２ａからディスク管理部１２５に対して、操作対象となったファイルの管理情報が格納されている領域に対して、親ディレクトリの識別情報の書き込みを要求する。ディスク管理部１２５は、要求に応じて、データ記憶部１４０を構成するＨＤＤ１０３，１０３ａ，１０３ｂ，・・・に、親ディレクトリの識別情報を書き込む。
【００６８】
このようにして、ファイルが作成されたり、ファイルが移動されたりすると、作成または移動されたファイルの管理情報に、親ディレクトリの識別情報が設定される。なお、ディレクトリの作成および移動の処理においても同様に、作成または移動されたディレクトリの管理情報に、親ディレクトリの識別情報が設定される。
【００６９】
クライアント２０において、ファイルのパスを探索する場合、アプリケーション部２１から、ファイルを指定した親ディレクトリ情報取得要求がファイルシステム制御部１２０に出される。すると、ファイルシステム制御部１２０では、ファイルシステムインタフェース処理部１２１からファイルシステム情報管理部１２２に対して、親ディレクトリ情報取得要求が出される。親ディレクトリ取得要求を受け取ったファイルシステム情報管理部１２２では、親ディレクトリ情報参照処理部１２２ｂが、ディスク管理部１２５を介して、指定されたファイルの管理情報内の親ディレクトリ情報を参照する。そして、親ディレクトリ情報参照処理部１２２ｂは、指定された親ディレクトリの情報を返却する。
【００７０】
このような、親ディレクトリ情報の獲得処理を繰り返し実行することにより、アプリケーション部２１において、ファイルのパス名を探索することができる。
図８は、パス名探索処理の手順を示すフローチャートである。以下、図８に示す処理をステップ番号に沿って説明する。なお、以下の処理では、ディレクトリもファイルの１つとして取り扱われる。すなわち、ディレクトリ名は、ファイル名でもある。
【００７１】
［ステップＳ１０１］アプリケーション部２１は、パス名を探索すべきファイルの存在するファイルシステムの、ルートディレクトリの識別情報を取得する。
［ステップＳ１０２］アプリケーション部２１は、パス名を探索すべきファイルを対象ファイルとする。
【００７２】
［ステップＳ１０３］アプリケーション部２１は、対象ファイルの識別情報が、ファイルシステムのルートディレクトリの識別情報と一致するか否かを判断する。識別情報が一致した場合には、処理がステップＳ１０９に進められる。識別情報が一致しなかった場合には、処理がステップＳ１０４に進められる。
【００７３】
［ステップＳ１０４］アプリケーション部２１は、ファイルシステム制御部１２０に対して親ディレクトリ情報の獲得要求を出力し、対象ファイルの親ディレクトリ情報を獲得する。ここで獲得する親ディレクトリ情報には、親ディレクトリの識別情報が含まれる。
【００７４】
［ステップＳ１０５］アプリケーション部２１は、ファイルシステム制御部１２０に対して、親ディレクトリ内のファイルの一覧獲得要求を出力し、親ディレクトリ内のファイル（子ファイル）の一覧（ファイル名と識別情報とを含む）を取得する。
【００７５】
［ステップＳ１０６］アプリケーション部２１は、対象ファイルの識別情報と一致する識別情報の子ファイルを検索する。
［ステップＳ１０７］アプリケーション部２１は、対象ファイルと識別情報が一致した子ファイルのファイル名を記憶する。
【００７６】
［ステップＳ１０８］アプリケーション部２１は、現在の親ディレクトリを対象ファイルとして、処理をステップＳ１０３に進める。
これにより、親ディレクトリがルートディレクトリになるまで、ディレクトリ構造の下位から上位に向かって、ファイル名の取得が行われていく。
【００７７】
［ステップＳ１０９］ステップＳ１０３において、対象ファイルの識別情報がルートディレクトリの識別情報と一致すると判断されると、アプリケーション部２１は、ステップＳ１０７で記憶したファイル名を、記憶した順に連結して、パス名を生成し、処理を終了する。
【００７８】
このようにして、アプリケーション部２１は、任意のファイルのパス名を容易に取得することができる。その結果、ファイルからファイルパス名の高速な生成が実現できる。
なお、図８の説明では、パス名探索処理の全体的な制御をアプリケーション部２１が行うように説明しているが、図８においてアプリケーション部２１が行っていた処理を、ファイルシステム制御部１２０内で行うこともできる。たとえば、アプリケーション部２１からのパス名探索要求を受けたファイルシステムインタフェース処理部１２１が図８の説明におけるアプリケーション部２１と同様の処理を行う。そして、ファイルシステムインタフェース処理部１２１は、ステップＳ１０９で生成されたパス名をアプリケーション部２１に送信する。
【００７９】
［ハードリンクを含むパス名探索］
次に、ハードリンクが行われる場合について説明する。
ハードリンクが行われる場合、ディレクトリやファイルの管理情報に設定された親ディレクトリ情報が使用される。ファイル作成処理は、ハードリンクが行われない場合と同様である。
【００８０】
ハードリンクが行われる場合には、アプリケーション部２１からの要求に従って、親ディレクトリ情報格納処理部１２２ａにおいて複数の親ディレクトリ情報が管理される。ファイルの移動時には、同じく親ディレクトリ情報格納処理部１２２ａが、元の親ディレクトリの情報を親ディレクトリ情報格納域から削除し、新たな親ディレクトリ情報を追加する。親ディレクトリ情報格納処理部１２２ａは、同一の親ディレクトリから複数のリンク情報が存在する場合には、リンク数に合わせて重複した親ディレクトリ情報を保持する。ファイル移動時の元ディレクトリが重複していた場合には、親ディレクトリ情報格納処理部１２２ａは、いずれか一つの親ディレクトリエントリを削除することで、リンク数と一致させる。リンクの削除時においては、親ディレクトリ情報格納処理部１２２ａは、該当する親ディレクトリのエントリ情報を一つ管理域から削除する。
【００８１】
図９は、ハードリンクにおける親ディレクトリ情報格納領域の状態遷移を示す図である。図９には、識別情報がＫのファイルの親ディレクトリ情報格納領域の状態遷移を示している。
【００８２】
親ディレクトリ情報格納領域５１には、ハードリンクの個数情報５１ａと、親ディレクトリ識別情報列５１ｂとが格納されている。ハードリンク追加前の状態では、個数情報５１ａにはｎ（ｎは自然数）個と設定されており、親ディレクトリ識別情報列５１ｂには、ｎ個の識別情報Ｍ１，Ｍ２，・・・，Ｍｎが設定されている。
【００８３】
ここで、識別情報がＬのディレクトリへのハードリンクが追加されると、個数情報５１ａには、１が加算される。また、親ディレクトリ識別情報列５１ｂには、識別情報Ｌが追加される。
【００８４】
これにより、ハードリンク追加後の親ディレクトリ情報格納領域５２の個数情報５２ａにはｎ＋１が設定され、親ディレクトリ識別情報列５１ｂには、ｎ＋１個の識別情報Ｍ１，Ｍ２，・・・，Ｍｎ，Ｌが設定される。
【００８５】
アプリケーション部２１から親ディレクトリ情報取得要求が来た場合、ファイルシステム制御部１２０は、親ディレクトリ情報参照処理部１２２ｂにより、指定された親ディレクトリ情報として、親ディレクトリ情報の個数と個々の親ディレクトリ情報を返却する。
【００８６】
アプリケーションでファイルのパス名を求める場合の手順は以下のようになる。
図１０は、ハードリンクを含むファイルシステムにおけるパス名探索手順を示すフローチャートの前半である。以下に、図１０に示す処理をステップ番号に沿って説明する。
【００８７】
［ステップＳ１１１］アプリケーション部２１は、ファイルシステム制御部１２０から、パス名を探索すべきファイルの存在するファイルシステムのルートディレクトリの識別情報を取得する。
【００８８】
［ステップＳ１１２］アプリケーション部２１は、パス名を探索すべきファイルを対象ファイルとして設定する。
［ステップＳ１１３］アプリケーション部２１は、対象ファイルの識別情報が、ファイルシステムのルートディレクトリの識別情報と一致するか否かを判断する。識別情報が一致した場合には、処理が終了する。識別情報が一致しなかった場合には、処理がステップＳ１１４に進められる。
【００８９】
［ステップＳ１１４］アプリケーション部２１は、ファイルシステム制御部１２０に対して親ディレクトリ情報の獲得要求を出力し、対象ファイルの親ディレクトリ情報を獲得する。ここで獲得する親ディレクトリ情報には、親ディレクトリの識別情報が含まれる。その後、端子Ａを介して、図１１に示すステップＳ１１５に処理が進められる。
【００９０】
図１１は、ハードリンクを含むファイルシステムにおけるパス名探索手順を示すフローチャートの後半である。以下に、図１１に示す処理をステップ番号に沿って説明する。
［ステップＳ１１５］アプリケーション部２１は、現在の親ディレクトリの中の未処理の親ディレクトリを選択し、ファイルシステム制御部１２０に対して選択した親ディレクトリ内のファイルの一覧獲得要求を出力し、親ディレクトリ内のファイル（子ファイル）の一覧（ファイル名と識別情報とを含む）を取得する。
【００９１】
［ステップＳ１１６］アプリケーション部２１は、対象ファイルの識別情報と一致する識別情報の子ファイルを検索する。
［ステップＳ１１７］アプリケーション部２１は、対象ファイルと識別情報が一致した子ファイルのファイル名を記憶する。
【００９２】
［ステップＳ１１８］アプリケーション部２１は、現在の親ディレクトリの識別情報が、ファイルシステムのルートディレクトリの識別情報と一致するか否かを判断する。識別情報が一致した場合には、処理がステップＳ１２１に進められる。識別情報が一致しなかった場合には、処理がステップＳ１１９に進められる。
【００９３】
［ステップＳ１１９］アプリケーション部２１は、現在の親ディレクトリを対象ファイルとする。
［ステップＳ１２０］アプリケーション部２１は、ファイルシステム制御部１２０に対して親ディレクトリ情報の獲得要求を出力し、ステップＳ１１９で対象ファイルとされたディレクトリの親ディレクトリ情報を獲得する。その後、処理がステップＳ１１５に進められる。
【００９４】
［ステップＳ１２１］アプリケーション部２１は、ステップＳ１１７で記憶したファイル名を、記憶した順に連結して、パス名を生成する。
［ステップＳ１２２］アプリケーション部２１は、生成したパス名を記憶する。このとき、ステップＳ１１７で記憶したファイル名を消去する。
【００９５】
［ステップＳ１２３］アプリケーション部２１は、パス名を探索すべきファイルの全ての親ディレクトリ情報に対して、ステップＳ１１５からステップＳ１２２の処理を実行したか否かを判断する。親ディレクトリ情報に対して処理を実行した場合には、処理がステップＳ１２４に進められる。未処理の親ディレクトリがある場合には、処理がステップＳ１１５に進められる。
【００９６】
［ステップＳ１２４］アプリケーション部２１は、ステップＳ１２２で記憶したパス名のリストを生成する。
これにより、ハードリンクを有する場合には、パス名を探索するファイルの親ディレクトリの数に応じたパス名のリストを生成することができる。その結果、ファイルに対応する全てのパス名の高速な生成が実現できる。
【００９７】
なお、図１０と図１１の説明では、パス名探索処理の全体的な制御をアプリケーション部２１が行うように説明しているが、図１０と図１１とにおいてアプリケーション部２１が行っていた処理を、ファイルシステム制御部１２０内で行うこともできる。たとえば、アプリケーション部２１からのパス名探索要求を受けたファイルシステムインタフェース処理部１２１が図１０と図１１とにおけるアプリケーション部２１と同様の処理を行う。そして、ファイルシステムインタフェース処理部１２１は、ステップＳ１２４で生成されたパス名をアプリケーション部２１に送信する。
【００９８】
［親ディレクトリの優先順の設定］
ファイルシステムがハードリンク機能を有する場合、任意のファイルのリンク元の親ディレクトリの優先順を設定することができる。この場合、ディレクトリの管理情報に含まれる親ディレクトリ情報、ファイルの管理情報に含まれる親ディレクトリ情報が利用される。
【００９９】
親ディレクトリの優先順を設定する場合、まず、アプリケーション部２１がファイルシステム制御部１２０に対して親ディレクトリ情報の順序設定要求を出力する。
ファイルシステム制御部１２０は、アプリケーション部２１から親ディレクトリ情報の順序設定要求が来た場合、親ディレクトリ情報格納処理部１２２ａに、親ディレクトリの順序設定処理を依頼する。親ディレクトリ情報格納処理部１２２ａでは、依頼内容において親ディレクトリ情報の不足のないこと、設定を変更する権利の妥当性を確認した上で、親ディレクトリの順序を入れ替える。
【０１００】
アプリケーション部２１から親ディレクトリ情報取得要求が来た場合、ファイルシステム制御部１２０は、親ディレクトリ情報参照処理部１２２ｂにより、指定された親ディレクトリの情報として、個数と個々の親ディレクトリ情報を、優先順に沿って、優先順位の高い親ディレクトリ情報から順に出力する。
【０１０１】
たとえば、図９に示すように、親ディレクトリ情報格納領域５１には、ハードリンクの個数情報５１ａと、親ディレクトリ識別情報列５１ｂとが格納されている。このとき、親ディレクトリ識別情報列５１ｂの図中左側ほど優先順位を高く、右側ほど優先順位を低く定義する。この場合、親ディレクトリ情報格納処理部１２２ａは、アプリケーション部２１からの指示に従い、優先順位の高い親ディレクトリの識別情報から順に、親ディレクトリ識別情報列５１ｂの左から並べ直す。また、親ディレクトリ情報参照処理部１２２ｂは、親ディレクトリ識別情報を出力する際には、親ディレクトリ識別情報列５１ｂの左から順に出力する。
【０１０２】
これにより、ハードリンク情報に順序性を持たせることが可能になり、後述するファイルの属性制御時にハードリンクファイルの属性優先度制御を実現できる。たとえば、ハードリンクされた２つのディレクトリに相反する属性が設定されていた場合、優先順位の高い親ディレクトリの属性のみを反映させることができる。すなわち、優先順位の高い親ディレクトリに「配下のファイルを圧縮する」という属性が設定され、優先順位の低い親ディレクトリに「配下のファイルを圧縮しない」という属性が設定されていた場合、これらの２つのディレクトリからハードリンクされたファイルは、圧縮される。
【０１０３】
このように、複数の親ディレクトリの間に優先順を設定したことにより、管理情報と実際のファイルとの整合性を保つことができる。すなわち、複数の親ディレクトリに相反する属性が設定されていた場合でも、常に優先順位の高い親ディレクトリの属性が反映される。したがって、ファイルの属性が不確定になることがなく、運用時の監視コストが軽減できる。
【０１０４】
［ディレクトリへの属性設定］
次に、ディレクトリへの属性設定について説明する。本実施の形態では、あるディレクトリに設定した属性を、その配下（子孫）のディレクトリに伝搬させることができる。ディレクトリの属性の伝搬には、ディレクトリやファイルに設定されている親ディレクトリ情報と、ディレクトリに設定されている属性情報が用いられる。
【０１０５】
アプリケーション部２１からファイルシステム制御部１２０に対して、ディレクトリに対する属性設定要求が来た場合、ファイルシステム制御部１２０は、属性設定管理部１２３内のディレクトリ属性設定処理部１２３ａに処理を依頼する。ディレクトリ属性設定処理部１２３ａは、設定の内容、設定する権利の妥当性を確認した上で、ディレクトリに対して属性の設定を行う。
【０１０６】
ファイルに対して操作を行う場合、属性設定管理部１２３は、ディレクトリとファイルとの親ディレクトリ情報を元に、ファイルシステムのルートディレクトリに辿りつくまでの親を順に探索し、先祖のディレクトリの中で属性の設定されているディレクトリを探索する。ルートディレクトリまでの全てのディレクトリに属性の設定がなく、途中にハードリンクが存在した場合、属性設定管理部１２３は、２番目以降の親ディレクトリについて、同様に属性情報を探索する。属性設定管理部１２３は、属性情報がみつかった場合には探索を中断し、その都度、見つかった属性情報に従って処理を実行する。これにより、上位のディレクトリに設定された属性を、ファイルあるいはディレクトリに反映させることができる。
【０１０７】
属性反映処理手順は以下のようになる。
図１２は、属性反映処理の手順を示すフローチャートの前半である。以下に、図１２に示す処理をステップ番号に沿って説明する。この処理は、ファイル操作部１２４から属性設定管理部１２３に対して、属性値取得要求が出された場合に実行される処理である。なお、ファイル操作部１２４は、アプリケーション部２１などからファイル操作の指示（ファイル作成やファイル移動などの指示）が出された場合に、操作対象のファイルに対する処理内容を決定するために、属性設定管理部１２３に対して、属性値取得要求を出す。
【０１０８】
［ステップＳ１３１］ファイル操作部１２４から属性値取得要求を受け取った属性設定管理部１２３では、上位ディレクトリ探索処理部１２３ｂが、ファイルシステム制御部１２０から、属性を反映すべきファイルの存在するファイルシステムのルートディレクトリの識別情報を取得する。
【０１０９】
［ステップＳ１３２］ディレクトリ属性値返却部１２３ｃは、属性を反映すべきファイルを対象ファイルとして設定する。
［ステップＳ１３３］ディレクトリ属性値返却部１２３ｃは、対象ファイルの識別情報が、ファイルシステムのルートディレクトリの識別情報と一致するか否かを判断する。識別情報が一致した場合には、端子Ｂを介して、処理が図１３に示すステップＳ１４１に進められる。識別情報が一致しなかった場合には、処理がステップＳ１３４に進められる。
【０１１０】
［ステップＳ１３４］上位ディレクトリ探索処理部１２３ｂは、ファイルシステム制御部１２０に対して親ディレクトリ情報の獲得要求を出力し、対象ファイルの親ディレクトリ情報を獲得する。ここで獲得する親ディレクトリ情報には、親ディレクトリの識別情報が含まれる。その後、端子Ｃを介して図１３に示すステップＳ１３５に処理が進められる。
【０１１１】
図１３は、属性反映処理の手順を示すフローチャートの後半である。以下に、図１３に示す処理をステップ番号に沿って説明する。
［ステップＳ１３５］ディレクトリ属性値返却部１２３ｃは、現在の親ディレクトリの中から未処理の親ディレクトリの１つを選択し、その親ディレクトリに属性情報が設定されているか否かを判断する。属性情報が設定されている場合には、処理がステップＳ１３６に進められる。属性情報が設定されていない場合には、処理がステップＳ１３７に進められる。
【０１１２】
［ステップＳ１３６］ディレクトリ属性値返却部１２３ｃは、現在の親ディレクトリの属性情報を取得する。その後、処理がステップＳ１４３に進められる。
［ステップＳ１３７］ディレクトリ属性値返却部１２３ｃは、現在の親ディレクトリの識別情報がファイルシステムのルートディレクトリの識別情報と一致するか否かを判断する。識別情報が一致した場合には、処理がステップＳ１４０に進められ、識別情報が一致しなかった場合には、処理がステップＳ１３８に進められる。
【０１１３】
［ステップＳ１３８］ディレクトリ属性値返却部１２３ｃは、現在の親ディレクトリを対象ファイルとする。
［ステップＳ１３９］ディレクトリ属性値返却部１２３ｃは、ファイルシステム制御部１２０に対して親ディレクトリ情報の獲得要求を出力し、ステップＳ１３８で対象ファイルとされたディレクトリの親ディレクトリ情報を獲得する。その後、処理がステップＳ１３５に進められる。
【０１１４】
［ステップＳ１４０］ディレクトリ属性値返却部１２３ｃは、属性を探索すべきファイルの全ての親ディレクトリ情報に対して、ステップＳ１３５〜ステップＳ１３９の処理を行ったか否かを判断する。全ての親ディレクトリに対して処理が完了していれば、処理がステップＳ１４１に進められる。未処理の親ディレクトリがあれば、処理がステップＳ１３５に進められる。
【０１１５】
［ステップＳ１４１］ディレクトリ属性値返却部１２３ｃは、ルートディレクトリに属性情報が設定されているか否かを判断する。属性情報が設定されている場合には、処理がステップＳ１４２に進められる。属性情報が設定されていない場合には、処理がステップＳ１４３に進められる。
【０１１６】
［ステップＳ１４２］ディレクトリ属性値返却部１２３ｃは、ルートディレクトリの属性情報を取得する。
［ステップＳ１４３］ディレクトリ属性値返却部１２３ｃは、ステップＳ１３６またはステップＳ１４２で取得した属性情報を、ファイル操作部１２４またはアプリケーション部２１に対して出力する。すると、ファイル操作部１２４またはアプリケーション部２１において、属性を反映すべきファイルに対して、属性情報に従った処理が実行される。
【０１１７】
このようにして、ディレクトリ毎に設定された属性に従った処理を、そのディレクトリの配下のディレクトリに対して実行させることができる。たとえば、ディレクトリに対して、ファイルを圧縮して格納すべき旨の属性が設定されていれば、そのディレクトリの配下にファイルが作成される場合には、そのファイルには圧縮処理が施される。
【０１１８】
その結果、従来は、即時反映が困難だったディレクトリ配下への一括の属性設定を、リアルタイムに設定可能とし、かつ、ファイルの移動時にも移動先に設定された属性が即時に設定できる。
【０１１９】
また、以上の処理を複数システムからアクセス可能なＮＡＳファイラで実現したことにより、複数のクライアントに共通の属性を設定することが容易に可能となる。また、共通のファイルシステムの一部に特定ノードにのみ作用する属性を設定することも可能である。
【０１２０】
［使用量管理］
次に、ディレクトリ毎の属性情報を用いたファイルシステム制御の例として、ディレクトリ毎の使用量管理を行う場合について説明する。
【０１２１】
まず、ディレクトリ毎の使用量管理処理の基本概念について説明する。
従来のファイルシステムの中には、ファイルシステム中のファイル数やファイルデータの使用量とその制限値をユーザ毎およびグループ毎に保持することができるものがある。このようなファイルシステムでは、ファイル数やファイルデータの使用量とその制限値を参照し、ユーザ毎およびグループ毎に使用量を制限することができる。
【０１２２】
しかし、従来は、特定のディレクトリ配下のファイル数およびファイルデータの使用量について制限をかける機能を持つファイルシステムは存在しなかった。
そこで、以下の例では、前述のディレクトリの属性情報の中に、ファイル数の制限値とデータ使用量の制限値とを設けて、特定のディレクトリ配下のファイル数およびファイルデータの使用量について制限をかけるようにする。
【０１２３】
図１４は、使用制限を行うときのディレクトリの属性情報のデータ構造の一例を示す図である。図１４の例では、ディレクトリの属性情報６０内に、制限有無情報６１、直近の制限ディレクトリ情報６２、および制限値リスト６３を含んでいる。
【０１２４】
制限有無情報６１は、一般の制限、ユーザ毎の制限、グループ毎の制限のそれぞれについて、制限値が設定されているか否かを示すフラグである。
直近の制限ディレクトリ情報６２は、制限がかけられている最も近い先祖（上位）のディレクトリの情報（たとえば、inode番号）である。
【０１２５】
制限値リスト６３は、現在の使用量と制限値とが設定された情報である。制限値リスト６３には、一般制限値情報６３ａ、ユーザ毎に設けられたユーザ制限値情報６３ｂ，６３ｃ、およびグループ毎に設けられたグループ制限値情報６３ｄ，６３ｅが含まれている。
【０１２６】
一般制限値情報６３ａには、ユーザやグループに拘わらない制限値と、現在の使用量とを示す情報が含まれている。図１４の例では、一般制限値情報６３ａに、容量制限値(hard limit of blocks)６３ａａ、使用容量(current blocks)６３ａｂ、ファイル数制限値(hard limit of files)６３ａｃ、およびファイル数(current files)６３ａｄが含まれている。
【０１２７】
容量制限値６３ａａは、使用可能記憶容量を示している。たとえば、ハードディスクを複数のブロックに分けている場合に、使用可能なブロック数が設定される。
使用容量６３ａｂは、現在使用されている記憶容量である。これは、属性情報６０が設定されているディレクトリの配下（サブディレクトリ以下）の全てのファイルの容量の総計である。
【０１２８】
ファイル数制限値６３ａｃは、使用可能なファイル数の上限値である。
ファイル数６３ａｄは、現在存在するファイル数である。これは、属性情報６０が設定されているディレクトリの配下（サブディレクトリ以下）の全てのファイルの総数である。
【０１２９】
ユーザ制限値情報６３ｂ，６３ｃも、一般制限値情報６３ａと同様の情報を含んでいる。ただし、使用容量とファイル数に関しては、対象となるユーザが所有者（オーナ）となっているファイルのみ集計対象となる。なお、ユーザ制限値情報６３ｂ，６３ｃは、ユーザ毎に使用量の制限がある場合にのみ、属性情報６０に含まれていればよい。
【０１３０】
グループ制限値情報６３ｄ，６３ｅも、一般制限値情報６３ａと同様の情報を含んでいる。ただし、使用容量とファイル数に関しては、対象となるグループに属するユーザが所有者（オーナ）となっているファイルのみ集計対象となる。なお、グループ制限値情報６３ｄ，６３ｅは、グループ毎に使用量の制限がある場合にのみ、属性情報６０に含まれていればよい。
【０１３１】
図１５は、使用制限を行うときのファイルの管理情報のデータ構造例を示す図である。図１５（Ａ）は、ハードリンクがない場合のファイルの管理情報７１を示している。図１５（Ｂ）は、ハードリンクがある場合のファイルの管理情報７２を示している。
【０１３２】
ハードリンクがない場合には、ファイルの管理情報７１に、制限のかかっている一番近い祖先のディレクトリを示す直近の制限ディレクトリ情報７１ａが含まれる。
また、ハードリンクがある場合には、ファイルの管理情報７２に、制限のかかっている一番近い祖先のディレクトリの集合を示す直近の制限ディレクトリリスト７２ａが含まれる。
【０１３３】
すなわち、全てのファイルとディレクトリとには、そのファイルまたはディレクトリより上の階層にあり、かつ使用量の制限が設定された一番近い階層のディレクトリの情報が設定される。そのようなディレクトリがない場合は、ファイルとディレクトリとに対して、使用量の制限が設定されたディレクトリがないという情報を有する。このディレクトリを順にたどっていくことによりそのディレクトリより上の階層にありかつ使用量の制限が設定されたすべてのディレクトリの一覧を得ることができる。
【０１３４】
また、ファイルが複数のディレクトリに所属するハードリンクである場合には、その全ての系列の先祖ディレクトリに関して、直近の制限ディレクトリ情報を持つこととなる。
なお、図１４に示した属性情報６０は、ファイル作成／削除およびブロック割付け／解放などのファイルシステム更新時に、現在の使用量の値が更新される。また、ファイル作成前またはブロック割付け前に制限値が参照され、ファイルの作成などにより制限値を超える場合は、その処理が制限される。
【０１３５】
また、ユーザ毎に使用量の制限がある場合、ファイル操作が行われたときに、ファイル操作を指示したユーザの現在の使用量が更新される。また、ファイル作成前またはブロック割付け前にユーザ毎の制限値が参照され、ファイルの作成などにより制限値を超える場合は、その処理が制限される。
【０１３６】
同様に、グループ毎に使用量の制限がある場合、ファイル操作が行われたときに、ファイル操作を指示したユーザが属するグループの現在の使用量が更新される。また、ファイル作成前またはブロック割付け前にグループ毎の制限値を参照され、ファイルの作成などのより制限値を超える場合は、その処理が制限される。
【０１３７】
使用量の更新、制限値の参照を行うべきディレクトリは、直近の制限ディレクトリ情報を参照して、制限の設けられた上位のディレクトリをリストアップすることができる。
図１６は、使用量更新、制限値参照ディレクトリ決定の処理手順を示すフローチャートである。以下に、図１６に示す処理をステップ番号に沿って説明する。
【０１３８】
［ステップＳ２０１］ファイルシステム制御部１２０は、処理対象の起点となるファイルまたはディレクトリを決定する。ファイル作成／削除時には、対象となるファイルの親ディレクトリが起点となる。ブロック割付け／解放時には、対象となるファイル自身が起点となる。起点となるファイルまたはディレクトリが、処理対象とされる。なお、処理対象の起点がディレクトリの場合には、そのディレクトリの属性情報が参照される。
【０１３９】
［ステップＳ２０２］ファイルシステム制御部１２０は、処理対象とされたファイルまたはディレクトリの直近の制限ディレクトリ情報を参照し、上位のディレクトリの中で制限のかけられているディレクトリが存在するか否かを判断する。制限のかけられているディレクトリが存在する場合には、処理がステップＳ２０３に進められ、存在しない場合には処理が終了する。
【０１４０】
［ステップＳ２０３］ファイルシステム制御部１２０は、ステップＳ２０２で参照した直近の制限ディレクトリ情報で示されているディレクトリを処理対象とする。
［ステップＳ２０４］ファイルシステム制御部１２０は、処理対象のディレクトリの属性情報を参照する。その後、処理がステップＳ２０２に進められる。
【０１４１】
このようにして、起点となるファイルまたはディレクトリから順に直近の制限ディレクトリ（制限のかかっている一番近いディレクトリ）で指し示されたディレクトリを辿りながら、祖先のディレクトリの中で使用制限が課されている全てのディレクトリの属性情報を参照することができる。
【０１４２】
なお、ファイルが複数のディレクトリに所属するハードリンクである場合には、直近の制限ディレクトリが複数存在する。この場合には、各ハードリンク毎に、参照ディレクトリの決定処理が行われることになる。
【０１４３】
次に、使用量の制限を設けた処理の具体的な適用例について説明する。
図１７は、使用制限を設ける場合の機能構成を示す機能ブロック図である。なお、図中の矢印はデータの流れを表すものではなく、制御の流れ（制御依存）を示す。
【０１４４】
使用制限に関係する処理として、アプリケーション部２１からファイルシステム制御部１２０に、ファイル作成、ファイル削除、ファイル移動、ブロック割付け、ブロック解放、使用量制限値設定／解除などの要求が出される。これらの要求は、ファイルシステム制御部１２０のファイルシステムインタフェース処理部１２１で受け取られ、ファイル操作部１２４や使用量制御部１５０に送られる。
【０１４５】
使用量制御部１５０は、ディレクトリ毎に使用量の制限値や、ファイル数の制限値に基づいて、ファイルシステムのファイル操作を管理する。使用量制御部１５０は、使用量制限値判定処理部１５１、使用量現在値更新処理部１５２、および使用量制限値設定処理部１５３を有している。
【０１４６】
使用量制限値判定処理部１５１は、アプリケーション部２１からファイル作成などのファイル操作要求が出されると、使用予定量を計算し、使用量制限値と使用予定量とを比較する。使用量制限値を超えてなければ、使用量制限値判定処理部１５１は、ファイル操作部１２４に対してファイル操作を許可する。使用量制限値を超えてしまうようであれば、使用量制限値判定処理部１５１は、ファイル操作部１２４に対して、ファイル操作を禁止する。
【０１４７】
使用量現在値更新処理部１５２は、アプリケーション部２１からファイル作成などのファイル操作要求が出され、ファイル操作部１２４によりファイル操作が行われると、そのファイルの上位の各ディレクトリの使用量の現在値を更新する。
【０１４８】
使用量制限値設定処理部１５３は、アプリケーション部２１から使用量制限値設定や解除の要求が出されると、その要求に従って、使用量の制限値を設定または解除する。
なお、使用量制御部１５０は、図４に示した属性設定管理部１２３の一機能である。すなわち、属性の１つとして、使用量の制限（使用可能な記憶容量やファイル数）を設定可能とした場合に、属性設定管理部１２３が有すべき機能である。なお、使用量制御部１５０の機能の一部（たとえば、直近の制限ディレクトリの探索）を、ファイルシステム情報管理部１２２に含ませることもできる。
【０１４９】
図１７に示したような構成によれば、たとえば、ファイル作成またはブロック割付け等の使用量が増えるファイルシステム更新要求があった場合、ファイルシステムインタフェース処理部１２１は使用量制限値判定処理部１５１に制御を渡す（ステップＳ２１１）。使用量制限値判定処理部１５１は、使用予定量と制限値とを比較し、使用量の制限値を超えるかどうかを判定する。ここで、制限値を超えないと判断した場合は、使用量制限値判定処理部１５１は、制御をファイルシステムインタフェース処理部１２１に戻す（ステップＳ２１２）。
【０１５０】
すると、ファイルシステムインタフェース処理部１２１から、ファイルの更新要求がファイル操作部１２４に出される（ステップＳ２１３）。ファイル操作部１２４は、ディスク管理部１２５を経由してファイルシステム更新を行う。このとき、同時に、ファイルシステムインタフェース処理部１２１から、使用量現在値更新要求が、使用量現在値更新処理部１５２に出される（ステップＳ２１４）。使用量現在値更新処理部１５２は、ファイル操作部１２４、ディスク管理部１２５を経由して現在値の更新を行う。
【０１５１】
また、あるディレクトリに対して制限値を設定／解除する場合、ファイルシステムインタフェース処理部１２１は制御を使用量制限値設定処理部１５３に渡す（ステップＳ２１５）。すると、使用量制限値設定処理部１５３は、制限値の設定／解除を行う。
【０１５２】
次に、使用量制限処理を行うためのデータ構造について説明する。
図１８は、使用量制限処理を行うためのディレクトリのデータ構造の一例を示す図である。なお、図１８には、ディレクトリの管理情報のうち、使用量制限処理に関係するデータのみを示している。
【０１５３】
ディレクトリの管理情報２１０には、一般制限フラグ２１１、ユーザ制限フラグ２１２、グループ制限フラグ２１３、制限ディレクトリinode番号２１４、および制限値リストinode番号２１５が含まれている。
【０１５４】
一般制限フラグ２１１は、ディレクトリ配下のファイルについてファイル数およびファイルデータについての使用量の制限の有無を示すフラグである。一般制限フラグ２１１には、１ビットのフィールドがあればよい。ディレクトリ配下のファイルについて制限がある場合には、一般制限フラグ２１１がたてられる（１が設定される）。
【０１５５】
ユーザ制限フラグ２１２は、ディレクトリ配下のファイルについてファイル数およびファイルデータについてのユーザ毎の使用量の制限の有無を示すフラグである。ユーザ制限フラグ２１２には、１ビットのフィールドがあればよい。ディレクトリ配下のファイルについてユーザ毎の制限がある場合には、ユーザ制限フラグ２１２がたてられる（１が設定される）。
【０１５６】
グループ制限フラグ２１３は、ディレクトリ配下のファイルについてファイル数およびファイルデータについてのグループ毎の使用量の制限の有無を示すフラグである。グループ制限フラグ２１３には、１ビットのフィールドがあればよい。ディレクトリ配下のファイルについてグループ毎の制限がある場合には、グループ制限フラグ２１３がたてられる（１が設定される）。
【０１５７】
制限ディレクトリinode番号２１４は、ディレクトリの管理情報２１０に対応するディレクトリより上の階層にあるディレクトリで、かつ制限がかかっていて、かつこのディレクトリに一番近い階層のディレクトリのinode番号である。ディレクトリの管理情報２１０に対応するディレクトリより上の全てのディレクトリに制限がかけられてない場合は、制限がかかっている先祖ディレクトリはないという意味で、制限ディレクトリinode番号２１４には０が入る。
【０１５８】
制限値リストinode番号２１５は、使用量と制限値のリストを格納した内部ファイル２２０のinode番号である。一般制限フラグ２１１、ユーザ制限フラグ２１２、およびグループ制限フラグ２１３のいずれかのビットに１が設定され、ディレクトリの管理情報２１０に対応するディレクトリ配下のファイルに制限がかけられている場合、制限値リストinode番号２１５にその使用量と制限値のリストを格納した内部ファイル２２０のinode番号が入る。一般制限フラグ２１１、ユーザ制限フラグ２１２、およびグループ制限フラグ２１３のすべてにビットが設定されておらず、制限がかけられていない場合、設定されていないという意味で、制限値リストinode番号２１５に０が入る。
【０１５９】
なお、この内部ファイル２２０は一般のディレクトリや通常ファイルと異なりどのディレクトリにもエントリされておらず、ＵＮＩＸにおけるls等の一般コマンドでは参照できない。
【０１６０】
内部ファイル２２０には、一般制限情報２２１、ユーザ制限情報２２２、およびグループ制限情報２２３が含まれている。
一般制限情報２２１は、ディレクトリの管理情報２１０に対応するディレクトリ配下のファイル数とファイルデータ量に関する現在の値と、制限値である。一般制限情報２２１には、ブロック数の制限値２２１ａ、現在の使用ブロック数２２１ｂ、ファイル数の制限値２２１ｃ、および現在のファイル数２２１ｄが設定されている。ブロック数の制限値２２１ａは、ディレクトリの管理情報２１０に対応するディレクトリの配下のファイルで使用可能なブロック数である。現在の使用ブロック数２２１ｂは、ディレクトリの管理情報２１０に対応するディレクトリの配下のファイルで現在使用しているブロック数である。ファイル数の制限値２２１ｃは、ディレクトリの管理情報２１０に対応するディレクトリの配下のファイル数の制限値である。現在のファイル数２２１ｄは、ディレクトリの管理情報２１０に対応するディレクトリの配下の現在のファイル数である。
【０１６１】
このように、ファイル数とファイルデータの使用量と制限値に関する情報は、特定の情報を持つ構造体により管理される。以下、ブロック数の制限値、現在の使用ブロック数、ファイル数の制限値、および現在のファイル数で構成されるデータ構造をdqblk構造体と呼ぶことにする。
【０１６２】
ユーザ制限情報２２２は、ユーザ毎に設けられている。ユーザ制限情報２２２の内容は、一般制限情報２２１と同様のdqblk構造体である。ただし、ユーザ制限情報２２２における現在のブロック数や現在のファイル数は、ユーザ制限情報２２２に対応するユーザの所有するファイルのみが集計される。
【０１６３】
グループ制限情報２２３は、グループ毎に設けられている。グループ制限情報２２３の内容は、一般制限情報２２１と同様のdqblk構造体である。ただし、グループ制限情報２２３の現在のブロック数や現在のファイル数は、グループ制限情報２２３に対応するグループに属するユーザの所有するファイルのみが集計される。
【０１６４】
一般制限情報２２１は、内部ファイル２２０の先頭のオフセット位置に記録される。ユーザ制限情報２２２は、内部ファイル２２０の (uid + 1) × sizeof(dqblk構造体) のオフセット位置に記録される。グループ制限情報２２３は、内部ファイル２２０の (gid + (uidの最大値 + 1) + 1) × sizeof(dqblk構造体) のオフセット位置に記録される。なお、uidとは、ユーザの識別子であり、各ユーザに対して１から昇順に自然数が割り当てられる。gidとは、グループの識別子であり、各グループに対して１から昇順に自然数が割り当てられる。sizeof(dqblk構造体)とは、dqblk構造体のデータ容量である。
【０１６５】
従ってuidやgidから即座にその情報が格納されている位置を決定できる。
なお、ユーザ毎、グループ毎の使用量を設定する場合、使用量の制限値が設定されているユーザやグループの使用量の値のみを更新するようにすることができる。また、内部ファイル２２０に対して、使用量および制限値が設定されているユーザ、グループのdqblk構造体のみを割付けるようにしてもよい。
【０１６６】
図１９は、使用量制限処理を行うためのファイルのデータ構造の一例を示す図である。なお、図１９には、ファイルの管理情報のうち、使用量制限処理に関係するデータのみを示している。ファイルの管理情報３１０には、制限ディレクトリinode番号３１１と制限ディレクトリinode番号リストへのポインタ３１２が含まれている。
【０１６７】
制限ディレクトリinode番号３１１は、制限のかかっている一番近い上位のディレクトリのinode番号である。制限ディレクトリinode番号３１１には、ファイルの管理情報３１０に対応するファイルより上の階層にあるディレクトリで、かつ制限がかかっていて、かつこのファイルに一番近い階層のディレクトリのinode番号が入る。ファイルの管理情報３１０に対応するファイルより上の全てのディレクトリに制限がかけられていない場合は、制限がかかっている先祖ディレクトリはないという意味で０が入る。
【０１６８】
制限ディレクトリinode番号リストへのポインタ３１２は、制限のかかっている一番近い上位のディレクトリのinode番号のリストが格納されたファイル（制限ディレクトリinode番号リスト３２０）へのポインタである。制限ディレクトリinode番号リストへのポインタ３１２は、ファイルの管理情報３１０に対応するファイルが複数のディレクトリに所属するハードリンクの場合にのみ設定される。
【０１６９】
制限ディレクトリinode番号リスト３２０には、制限のかかっている一番近い上位のディレクトリのinode番号の配列またはリストが格納される。したがって、制限ディレクトリinode番号リスト３２０には、各ハードリンクに応じた系列の先祖ディレクトリのinode番号が、ハードリンクの数だけ設定される。
【０１７０】
次に、ディレクトリやファイルの制限ディレクトリinode番号の設定例について説明する。
図２０は、ディレクトリツリーの一例を示す図である。図２０には、複数のディレクトリ４１１〜４１５とファイル４２１，４２２とからなる木構造が示されている。木構造上、図中左側が上位である。使用量の制限が設定されているディレクトリ４１１，４１３，４１４，４１５は、二重線の四角で表されている。使用量の制限が設定されていないディレクトリとファイルは、一重線の四角で表されている。四角を結ぶ線はそれらのファイルまたはディレクトリ間の親子関係を表し、左側が親、右側が子という関係を表している。
【０１７１】
ディレクトリ４１１〜４１５やファイル４２１，４２２の四角内には、そのディレクトリまたはファイルのinode番号が示されている。ディレクトリ４１１〜４１５やファイル４２１，４２２の四角の下の数字は、制限ディレクトリinode番号（制限のかかっている一番近い上位のディレクトリのinode番号）を示している。
【０１７２】
なお、このようなディレクトリツリーの定義は、後述する図２６〜図２９に関しても同様である。
図２０の例では、ディレクトリ４１１がルートディレクトリである。ディレクトリ４１１には使用量の制限が設定されている。ディレクトリ４１１のinode番号は２であり、制限ディレクトリinode番号は０である。制限ディレクトリinode番号に０が設定されていることは、これより上位の階層のディレクトリには制限値が設定されていないことを表している。
【０１７３】
ディレクトリ４１１の直下に、２つのディレクトリ４１２，４１３が設けられている。ディレクトリ４１２には、使用量の制限が設定されていない。ディレクトリ４１２のinode番号は３であり、制限ディレクトリinode番号は２である。ディレクトリ４１３には、使用量の制限が設定されている。ディレクトリ４１３のinode番号は４であり、制限ディレクトリinode番号は２である。
【０１７４】
ディレクトリ４１２の直下に、２つのディレクトリ４１４，４１５が設けられている。ディレクトリ４１４には、使用量の制限が設定されている。ディレクトリ４１４のinode番号は５であり、制限ディレクトリinode番号は２である。ディレクトリ４１５には、使用量の制限が設定されている。ディレクトリ４１５のinode番号は６であり、制限ディレクトリinode番号は２である。
【０１７５】
ディレクトリ４１４の直下には、ファイル４２１が設けられている。ファイル４２１のinode番号は７であり、制限ディレクトリinode番号は５である。
ディレクトリ４１５の直下には、ファイル４２２が設けられている。ファイル４２２は、ディレクトリ４１３に対するハードリンクが設定されている。したがって、ファイル４２２は、ディレクトリ４１３の直下のファイルでもある。ファイル４２２のinode番号は８であり、制限ディレクトリinode番号は６，４である。
【０１７６】
このような構造に基づいて、各ファイル４２１，４２２の先祖ディレクトリの中で、使用量の制限が設定されているディレクトリ一覧を検出することができる。
たとえば、ファイル４２１の制限ディレクトリinode番号を参照し、ディレクトリ４１４のinode番号５を得る。すると、ディレクトリ４１４の制限ディレクトリinode番号を参照し、ディレクトリ４１１のinode番号２を得る。次に、ディレクトリ４１１の制限ディレクトリinode番号を参照し、inode番号０を得る。inode番号０は、上位の階層のディレクトリに制限値が設定されていないことを示すため、ファイル４２１の操作に影響を及ぼすディレクトリのinode番号の一覧は、｛5,2｝となる。
【０１７７】
ファイル４２２は、２つのディレクトリ４１５，４１３から参照されているリンク数２のファイルであるため、制限ディレクトリinode番号６，４のそれぞれの系列において、制限値の設定された先祖ディレクトリの一覧はこの両方のリストを辿る。すると、ファイル４２２の操作に影響を及ぼすディレクトリのinode番号の一覧として｛6, 2｝, ｛4, 2｝が得られる。
【０１７８】
なお、上記の説明では、使用量が設定された上位のディレクトリの探索において、制限ディレクトリinode番号が０のディレクトリに達したことで探索を終了しているが、ルートディレクトリのinode番号２に達したことをもって、探索を終了させてもよい。
【０１７９】
次に、現在の使用量更新処理について説明する。
ファイル作成／削除またはブロック割付け／解放等のファイルシステム更新により使用量が変更された場合、必要に応じて使用量を管理しているディレクトリの情報を更新する必要がある。
【０１８０】
図２１は、使用量更新処理の手順を示すフローチャートの前半である。以下、図２１に示す処理をステップ番号に沿って説明する。以下の処理は、ファイルの作成／削除、ブロックの割付け／解放の操作が行われた際に、実行される処理である。
【０１８１】
［ステップＳ２１１］使用量現在値更新処理部１５２は、ファイル操作がファイル作成／削除か否かを判断する。ファイル作成／削除の場合には処理がステップＳ２１２に進められる。ファイル作成／削除ではない場合は、ブロックの割付け／解放の操作が行われたものと判断し、処理がステップＳ２１３に進められる。
【０１８２】
［ステップＳ２１２］ファイル作成／削除時は、使用量現在値更新処理部１５２は、current＿inoにその親ディレクトリのinode番号を設定する。その後、処理がステップＳ２１６に進められる。
【０１８３】
［ステップＳ２１３］ブロック割付け／解放時は、使用量現在値更新処理部１５２は、current＿inoにそのファイル自身のinode番号を設定する。
［ステップＳ２１４］使用量現在値更新処理部１５２は、current＿inoのinode番号に該当するディレクトリの制限ディレクトリinode番号を参照し、そのinode番号が０か否かを判断する。制限ディレクトリinode番号が０であれば、処理を終了する。制限ディレクトリinode番号が０でなければ処理がステップＳ２１５に進められる。
【０１８４】
［ステップＳ２１５］使用量現在値更新処理部１５２は、ステップＳ２１４で参照した制限ディレクトリinode番号をcurrent＿inoに設定する。
［ステップＳ２１６］使用量現在値更新処理部１５２は、current＿inoのinode番号に対応するディレクトリに一般制限フラグが設定されているか否かを判断する。一般制限フラグが設定されている場合には、処理がステップＳ２１７に進められる。一般制限フラグが設定されていない場合には、端子Ｄを介して処理が図２２のステップＳ２２０に進められる。
【０１８５】
［ステップＳ２１７］使用量現在値更新処理部１５２は、実行されたファイル操作がファイル作成／削除処理か否かを判断する。ファイル作成／削除である場合には、処理がステップＳ２１８に進められる。ファイル作成／削除でない場合には、処理がステップＳ２１９に進められる。
【０１８６】
［ステップＳ２１８］使用量現在値更新処理部１５２は、current＿inoに設定されているinode番号に該当するディレクトリの一般制限情報における現在のファイル数を更新する。ファイル数の更新とは、ファイルの作成であれば現在のファイル数に１を加算する処理であり、ファイルの削除であれば現在のファイル数から１を減算する処理である。その後、端子Ｄを介して処理が図２２のステップＳ２２０に進められる。
【０１８７】
［ステップＳ２１９］使用量現在値更新処理部１５２は、current＿inoに設定されているinode番号に該当するディレクトリの一般制限情報における現在の使用ブロック数を更新する。ブロック数の更新とは、ブロックの割り当てであれば現在の現在の使用ブロック数に、割り当てたブロック数を加算する処理であり、ブロックの解放であれば、現在のブロック数から、解放したブロック数を減算する処理である。その後、端子Ｄを介して処理が図２２のステップＳ２２０に進められる。
【０１８８】
図２２は、使用量制限処理の手順を示すフローチャートの後半である。以下、図２２に示す処理をステップ番号に沿って説明する。
［ステップＳ２２０］使用量現在値更新処理部１５２は、current＿inoのinode番号に対応するディレクトリにユーザ制限フラグが設定されているか否かを判断する。ユーザ制限フラグが設定されている場合には、処理がステップＳ２２１に進められる。ユーザ制限フラグが設定されていない場合には、処理がステップＳ２２４に進められる。
【０１８９】
［ステップＳ２２１］使用量現在値更新処理部１５２は、実行されたファイル操作がファイル作成／削除処理か否かを判断する。ファイル作成／削除である場合には、処理がステップＳ２２２に進められる。ファイル作成／削除でない場合には、処理がステップＳ２２３に進められる。
【０１９０】
［ステップＳ２２２］使用量現在値更新処理部１５２は、current＿inoに設定されているinode番号に該当するディレクトリのユーザ制限情報（ファイル操作を指示したユーザに対応するもの）における現在のファイル数を更新する。その後、処理がステップＳ２２４に進められる。
【０１９１】
［ステップＳ２２３］使用量現在値更新処理部１５２は、current＿inoに設定されているinode番号に該当するディレクトリのユーザ制限情報（ファイル操作を指示したユーザに対応するもの）における現在の使用ブロック数を更新する。その後、処理がステップＳ２２４に進められる。
【０１９２】
［ステップＳ２２４］使用量現在値更新処理部１５２は、current＿inoのinode番号に対応するディレクトリにグループ制限フラグが設定されているか否かを判断する。グループ制限フラグが設定されている場合には、処理がステップＳ２２５に進められる。グループ制限フラグが設定されていない場合には、端子Ｅを介して処理が図２１に示すステップＳ２１４に進められる。
【０１９３】
［ステップＳ２２５］使用量現在値更新処理部１５２は、実行されたファイル操作がファイル作成／削除処理か否かを判断する。ファイル作成／削除である場合には、処理がステップＳ２２６に進められる。ファイル作成／削除でない場合には、処理がステップＳ２２７に進められる。
【０１９４】
［ステップＳ２２６］使用量現在値更新処理部１５２は、current＿inoに設定されているinode番号に該当するディレクトリのグループ制限情報（ファイル操作を指示したユーザが属するグループに対応するもの）における現在のファイル数を更新する。その後、端子Ｅを介して処理が図２１に示すステップＳ２１４に進められる。
【０１９５】
［ステップＳ２２７］使用量現在値更新処理部１５２は、current＿inoに設定されているinode番号に該当するディレクトリのグループ制限情報（ファイル操作を指示したユーザが属するグループに対応するもの）における現在の使用ブロック数を更新する。その後、端子Ｅを介して処理が図２１に示すステップＳ２１４に進められる。
【０１９６】
以上のようにして、ファイル操作が行われる度に、使用量の更新が行われる。なお、対象ファイルがハードリンクであり、制限ディレクトリinode番号が複数ある場合、そのすべてについて図２１、図２２の処理が行われる。
【０１９７】
次に、使用量制限処理について説明する。
ファイル作成またはブロック割付け等のファイルシステム更新により使用量が増えるような変更がある場合、制限がかかっているディレクトリの管理情報が検査される。そして、制限値を超える場合、ファイルシステムのオペレーションをエラー復帰させ、ファイル作成などを制限する。
【０１９８】
図２３は、使用量制限処理の手順を示すフローチャートの前半である。以下、図２３に示す処理をステップ番号に沿って説明する。なお、この処理は、ファイル作成、ブロック割付けなどの、使用量の増加を伴うファイル操作要求が出された際に実行される。
【０１９９】
［ステップＳ２３１］使用量制限値判定処理部１５１は、ファイル操作要求が、ファイルの作成要求か否かを判断する。ファイルの作成要求の場合には処理がステップＳ２３２に進められる。ファイルの作成要求でない場合には、ブロックの割付け要求と判断し、処理がステップＳ２３３に進められる。
【０２００】
［ステップＳ２３２］使用量制限値判定処理部１５１は、current＿inoにその親ディレクトリのinode番号を設定する。その後、処理がステップＳ２３６に進められる。
［ステップＳ２３３］使用量制限値判定処理部１５１は、current＿inoにそのファイル自身のinode番号を設定する。
【０２０１】
［ステップＳ２３４］使用量制限値判定処理部１５１は、current＿inoのinode番号に該当するディレクトリの制限ディレクトリinode番号を参照し、そのinode番号が０か否かを判断する。制限ディレクトリinode番号が０であれば、処理を終了する。制限ディレクトリinode番号が０でなければ処理がステップＳ２３５に進められる。
【０２０２】
［ステップＳ２３５］使用量制限値判定処理部１５１は、ステップＳ２３４で参照した制限ディレクトリinode番号をcurrent＿inoに設定する。
［ステップＳ２３６］使用量制限値判定処理部１５１は、current＿inoのinode番号に対応するディレクトリに一般制限フラグが設定されているか否かを判断する。一般制限フラグが設定されている場合には、処理がステップＳ２３７に進められる。一般制限フラグが設定されていない場合には、端子Ｆを介して処理が図２４のステップＳ２４１に進められる。
【０２０３】
［ステップＳ２３７］使用量制限値判定処理部１５１は、要求されたファイル操作がファイル作成か否かを判断する。ファイル作成である場合には、処理がステップＳ２３８に進められる。ファイル作成でない場合（ブロック割付けの場合）には、処理がステップＳ２３９に進められる。
【０２０４】
［ステップＳ２３８］使用量制限値判定処理部１５１は、current＿inoに設定されているinode番号に該当するディレクトリの一般制限情報における現在のファイル数に１を加算した場合に、ファイル数の制限値を超えるか否かを判断する。ファイル数の制限値を超える場合には、処理がステップＳ２４０に進められる。ファイル数の制限値を超えない場合には、端子Ｆを介して処理がステップＳ２４１に進められる。
【０２０５】
［ステップＳ２３９］使用量制限値判定処理部１５１は、current＿inoに設定されているinode番号に該当するディレクトリの一般制限情報における現在の使用ブロック数に、操作要求で示されているブロック数を加算した場合に、ブロック数の制限値を超えるか否かを判断する。ブロック数の制限値を超える場合には、処理がステップＳ２４０に進められる。ブロック数の制限値を超えない場合には、端子Ｆを介して処理が図２４のステップＳ２４１に進められる。
【０２０６】
［ステップＳ２４０］使用量制限値判定処理部１５１は、エラー処理を行う。たとえば、使用量制限値判定処理部１５１は、ファイル操作部１２４に対してエラーメッセージを出力し、ファイル操作を禁止する。その後、処理が終了する。
【０２０７】
図２４は、使用量制限処理の手順を示すフローチャートの後半である。以下、図２４に示す処理をステップ番号に沿って説明する。
［ステップＳ２４１］使用量制限値判定処理部１５１は、current＿inoのinode番号に対応するディレクトリにユーザ制限フラグが設定されているか否かを判断する。ユーザ制限フラグが設定されている場合には、処理がステップＳ２４２に進められる。ユーザ制限フラグが設定されていない場合には、処理がステップＳ２４５に進められる。
【０２０８】
［ステップＳ２４２］使用量制限値判定処理部１５１は、要求されたファイル操作がファイル作成か否かを判断する。ファイル作成である場合には、処理がステップＳ２４３に進められる。ファイル作成でない場合（ブロック割付けの場合）には、処理がステップＳ２４４に進められる。
【０２０９】
［ステップＳ２４３］使用量制限値判定処理部１５１は、current＿inoに設定されているinode番号に該当するディレクトリのユーザ制限情報（ファイル操作を指示したユーザに対応するもの）における現在のファイル数に１を加算した場合に、ファイル数の制限値を超えるか否かを判断する。ファイル数の制限値を超える場合には、端子Ｈを介して処理がステップＳ２４０に進められる。ファイル数の制限値を超えない場合には、処理がステップＳ２４５に進められる。
【０２１０】
［ステップＳ２４４］使用量制限値判定処理部１５１は、current＿inoに設定されているinode番号に該当するディレクトリのユーザ制限情報（ファイル操作を指示したユーザに対応するもの）における現在の使用ブロック数に、操作要求で示されているブロック数を加算した場合に、ブロック数の制限値を超えるか否かを判断する。ブロック数の制限値を超える場合には、端子Ｈを介して処理がステップＳ２４０に進められる。ブロック数の制限値を超えない場合には、処理がステップＳ２４５に進められる。
【０２１１】
［ステップＳ２４５］使用量制限値判定処理部１５１は、current＿inoのinode番号に対応するディレクトリにグループ制限フラグが設定されているか否かを判断する。グループ制限フラグが設定されている場合には、処理がステップＳ２４６に進められる。グループ制限フラグが設定されていない場合には、端子Ｇを介して処理が図２３のステップＳ２３４に進められる。
【０２１２】
［ステップＳ２４６］使用量制限値判定処理部１５１は、要求されたファイル操作がファイル作成か否かを判断する。ファイル作成である場合には、処理がステップＳ２４７に進められる。ファイル作成でない場合（ブロック割付けの場合）には、処理がステップＳ２４８に進められる。
【０２１３】
［ステップＳ２４７］使用量制限値判定処理部１５１は、current＿inoに設定されているinode番号に該当するディレクトリのグループ制限情報（ファイル操作を指示したユーザが属するグループに対応するもの）における現在のファイル数に１を加算した場合に、ファイル数の制限値を超えるか否かを判断する。ファイル数の制限値を超える場合には、端子Ｈを介して処理が図２３のステップＳ２４０に進められる。ファイル数の制限値を超えない場合には、端子Ｇを介して処理が図２３のステップＳ２３４に進められる。
【０２１４】
［ステップＳ２４８］使用量制限値判定処理部１５１は、current＿inoに設定されているinode番号に該当するディレクトリのグループ制限情報（ファイル操作を指示したユーザが属するグループに対応するもの）における現在の使用ブロック数に、操作要求で示されているブロック数を加算した場合に、ブロック数の制限値を超えるか否かを判断する。ブロック数の制限値を超える場合には、端子Ｈを介して処理が図２３のステップＳ２４０に進められる。ブロック数の制限値を超えない場合には、端子Ｇを介して処理が図２３のステップＳ２３４に進められる。
【０２１５】
以上のようにして、ファイル操作要求の際に、使用量制限値を超えるかどうかの判定が行われる。図２３、図２４に示した処理がエラーなしに終了したことが確認されると、ファイル操作部１２４において、ファイル操作要求に応じた処理が行われる。なお、対象ファイルがハードリンクであり、制限ディレクトリinode番号が複数ある場合、そのすべてについて図２３、図２４の処理が行われる。
【０２１６】
次に、ファイル、ディレクトリ移動時の処理について説明する。
あるファイルまたはディレクトリを別のディレクトリに移動させる場合、使用量の再計算および移動先の使用量制限値のチェックを行う必要がある。
【０２１７】
図２５は、移動処理の手順を示すフローチャートである。以下に、図２５に示す処理をステップ番号に沿って説明する。
［ステップＳ２５１］使用量制限値判定処理部１５１は、移動元ディレクトリ配下のすべてのファイルを調べ、総ファイル数とファイルデータの使用量（総ブロック数）を求める。使用量制限値判定処理部１５１は、総ファイル数をsrc＿filesに設定し、総ブロック数をsrc＿blocksに設定する。
【０２１８】
［ステップＳ２５２］使用量制限値判定処理部１５１は、移動先ディレクトリの管理情報における現在のファイル数と使用ブロック数、およびファイル数とブロック数との制限値を参照する。
【０２１９】
［ステップＳ２５３］使用量制限値判定処理部１５１は、src＿filesとsrc＿blocksとに基づいて、ディレクトリまたはファイルを移動させた場合に、移動先ディレクトリの制限値を超えるか否かを判断する。制限値を超える場合には、処理がステップＳ２５４に進められる。制限値を超えない場合には、処理がステップＳ２５５に進められる。
【０２２０】
［ステップＳ２５４］使用量制限値判定処理部１５１は、エラー処理を行う。たとえば、使用量制限値判定処理部１５１は、ファイル操作部１２４に対してエラーメッセージを出力し、ファイル操作を禁止する。その後、処理が終了する。
【０２２１】
［ステップＳ２５５］使用量現在値更新処理部１５２は、移動先ディレクトリのファイル数に、src＿filesの値を加算する。また、使用量現在値更新処理部１５２は、移動先ディレクトリの使用ブロック数にsrc＿blocksの値を加算する。
【０２２２】
［ステップＳ２５６］使用量制限値判定処理部１５１は、使用量制限値の判定がエラー無く終了したことをファイル操作部１２４に伝える。すると、ファイル操作部１２４は、ファイルの移送要求に応じて、ファイルの移動処理を実行する。
【０２２３】
［ステップＳ２５７］使用量現在値更新処理部１５２は、移動元ディレクトリのファイル数から、src＿filesの値を減算する。また、使用量現在値更新処理部１５２は、移動先ディレクトリの使用ブロック数から、src＿blocksの値を減算する。
【０２２４】
以下の処理では、使用量制限値の更新処理を行う。すなわち、あるファイルを別のディレクトリに移動した場合、そのファイルの制限ディレクトリinode番号を更新する必要が生じる。そこで、以下のような使用量制限値の更新処理が行われる。
【０２２５】
［ステップＳ２５８］使用量制限値設定処理部１５３は、移動先のディレクトリに制限値が設定されているか否かを判断する。制限値が設定されている場合には、処理がステップＳ２５９に進められる。制限値が設定されていない場合には処理がステップＳ２６０に進められる。
【０２２６】
［ステップＳ２５９］使用量制限値設定処理部１５３は、移動先のディレクトリに制限値が設定されている場合、その移動先のディレクトリのinode番号をset＿inoに設定する。その後、処理がステップＳ２６１に進められる。
【０２２７】
［ステップＳ２６０］使用量制限値設定処理部１５３は、移動先のディレクトリに制限値が設定されていない場合、その移動先のディレクトリの制限ディレクトリinode番号をset＿inoに設定する。
【０２２８】
［ステップＳ２６１］使用量制限値設定処理部１５３は、移動対象のディレクトリ配下のファイルのうち、制限ディレクトリinode番号に、移動対象のディレクトリより上の階層のディレクトリ番号または０が設定されているファイルについて、制限ディレクトリinode番号をset＿inoに書き換える。
【０２２９】
以上のようにして、ディレクトリやファイルを移動することができる。なお、対象ファイルがハードリンクであり、制限ディレクトリinode番号が複数ある場合、そのすべてについてステップＳ２５８〜ステップＳ２６１に示した処理が行われる。
【０２３０】
なお、制限値が設定されているディレクトリより下の階層のファイルについては検索しなくてよい。たとえば、移動対象のディレクトリに制限値が設定されている場合は、書き換える必要があるのは移動対象のディレクトリのみである。
【０２３１】
ここで、ディレクトリの移動に伴う制限ディレクトリinode番号の書き換え処理について、具体例を用いて説明する。
図２６は、ディレクトリ移動前のデータ構造の一例を示す図である。図２６の例では、ディレクトリ５１１〜５１４とファイル５２１，５２２とが示されている。
【０２３２】
ディレクトリ５１１はルートディレクトリであり、制限値が設定されている。ディレクトリ５１１のinode番号は２であり、制限ディレクトリinode番号は０である。
ディレクトリ５１１の直下に２つのディレクトリ５１２，５１３が配置されている。ディレクトリ５１２は制限値が設定されておらず、inode番号が３、制限ディレクトリinode番号が２である。ディレクトリ５１３は制限値が設定されており、inode番号が４、制限ディレクトリinode番号が２である。ディレクトリ５１２の直下にディレクトリ５１４が配置されている。ディレクトリ５１４は制限値が設定されており、inode番号が５、制限ディレクトリinode番号が２である。
【０２３３】
ディレクトリ５１４の直下に２つのファイル５２１，５２２が配置されている。ファイル５２１のinode番号は９であり、制限ディレクトリinode番号は５である。ファイル５２２のinode番号は６であり、制限ディレクトリinode番号は５である。
【０２３４】
このような構造のデータにおいて、inode番号５のディレクトリ５１４をinode番号４のディレクトリ５１３の直下に移動した場合を考える。
図２７は、ディレクトリを移動後のデータ構造の一例を示す図である。図２６と比較すると、inode番号５のディレクトリ５１４が、ディレクトリ５１３の直下に配置されている。また、ディレクトリ５１４の制限ディレクトリinode番号は、２から４に変更されている。なお、ディレクトリ５１４の配下のファイル５２１，５２２の制限ディレクトリinode番号に変更はない。
【０２３５】
次に、制限値設定処理について説明する。
あるディレクトリ（設定対象ディレクトリ）に対して制限値を設定する場合は、以下の処理を行う。
【０２３６】
まず、使用量制限値設定処理部１５３は、設定対象ディレクトリの配下のファイルのうち、制限ディレクトリinode番号に、設定対象ディレクトリより上の階層のディレクトリのinode番号または０が設定されているファイルについて、制限ディレクトリinode番号を、設定対象ディレクトリのinode番号に書き換える。このとき、制限値が設定されているディレクトリより下の階層のファイルについては、検索しなくてもよい。
【０２３７】
次に、使用量現在値更新処理部１５２は、設定対象ディレクトリ配下のすべてのファイルを調べ、ファイル数とファイルデータの使用量を集計する。集計した値に基づいて、設定対象ディレクトリのファイル数と使用ブロック数とを設定する。
【０２３８】
図２８は、制限値設定前のデータ構造の一例を示す図である。図２８の例では、ディレクトリ６１１〜６１４とファイル６２１〜６２４とが示されている。
ディレクトリ６１１はルートディレクトリであり、制限値が設定されている。ディレクトリ６１１のinode番号は２であり、制限ディレクトリinode番号は０である。
【０２３９】
ディレクトリ６１１の直下に２つのディレクトリ６１２，６１３が配置されている。ディレクトリ６１２は制限値が設定されておらず、inode番号が３、制限ディレクトリinode番号が２である。ディレクトリ６１３は制限値が設定されておらず、inode番号が４、制限ディレクトリinode番号が２である。
【０２４０】
ディレクトリ６１２の直下に、ディレクトリ６１４とファイル６２２とが配置されている。ディレクトリ６１４は、制限値が設定されているディレクトリであり、inode番号が５、制限ディレクトリinode番号が２である。ファイル６２２は、inode番号が６、制限ディレクトリ番号が２である。ディレクトリ６１４の直下には、ファイル６２１が配置されている。ファイル６２１は、inode番号が９、制限ディレクトリ番号が５である。
【０２４１】
ディレクトリ６１３の直下に２つのファイル６２３，６２４が配置されている。ファイル６２３のinode番号は７であり、制限ディレクトリinode番号は２である。ファイル６２４のinode番号は８であり、制限ディレクトリinode番号は２である。
【０２４２】
このようなデータ構造において、ディレクトリ６１２に制限値を設定する場合を考える。
図２９は、制限値設定後のデータ構造の一例を示す図である。図２８と異なる点は、まず、ディレクトリ６１２に制限値が設定されている。そして、ディレクトリ６１４の制限ディレクトリinode番号が２から３に変更されている。同様に、ファイル６２２の制限ディレクトリinode番号が２から３に変更されている。
【０２４３】
以上説明したように、ディレクトリ単位でファイル数およびファイルデータの使用量についてファイルシステムが定常的に管理する機能をＮＡＳファイラ１００で実現することができる。これによりより細かい使用量制限の設定ができるようになり、ファイルシステムの利便性が向上する。
【０２４４】
たとえば、従来、ディレクトリ毎に使用量の制限をかけるには、たとえば、使用量の制限をかけたいディレクトリ毎にファイルシステムを分ける方法があった。しかし、この方法では、制限値がそれぞれのファイルシステムのサイズに制限され、制限値を大きくしたい場合はファイルシステム再構築を伴うため利便性に欠けていた。
【０２４５】
本実施の形態に示したように各ディレクトリに使用量の制限値を設定し、ファイル操作時にその制限値を参照し、使用量が制限値を超えないようにすることで、ディレクトリ単位に使用量の管理を行うことができる。これにより、たとえば、ワークグループ毎に、作成したデータを格納するディレクトリを定めておき、そのディレクトリに対して使用制限を設定することができる。これにより、たとえば、あるワークグループのデータ量が膨大となり、他のワークグループにおける作業領域が枯渇するようなことがなくなる。しかも、ワークグループ毎に使用量の制限値が決められていれば、各グループで無駄なファイルを整理する努力が払われるようになり、システム全体の記憶容量の効率化が図れる。
【０２４６】
しかも、ユーザ毎またはグループ毎の使用量を制限を行うことができるため、よりきめの細かいファイルシステムの管理が可能となる。
また、各ファイルの管理情報として、使用量を制限しているディレクトリのinode番号を保持することで、ファイル作成／削除やブロック割付け／解放等のファイルシステム更新の性能劣化を最小限にとどめることができる。
【０２４７】
さらに、本実施の形態によれば、使用量を制限するディレクトリを保持する上で、それぞれのファイルでは使用量を制限しているディレクトリのうちで一番近い階層のディレクトリについてのみ記録している。これにより、ディレクトリ移動などのファイルシステム構造変更の際の情報更新による性能劣化を最小限にとどめることができる。
【０２４８】
また、ファイルが複数のディレクトリに所属するハードリンクの場合であっても、その所属するすべてのディレクトリから使用量を制限できることができる。これにより、ハードリンクを利用可能なファイルシステムにも適用することができ、高い汎用性を得ることができる。
【０２４９】
なお、上記の制限値の説明では、使用量の制限を１段階でおこなっていたが、ディレクトリ毎の使用量の制限を多段階に設けることができる。たとえば、使用量の制限の１段目として、ソフトリミットを設定し、ソフトリミットに付随してタイムリミットを設定する。使用量の制限の２段目として、ソフトリミットよりも緩やかな制限値（ソフトリミットより制限値のファイル数やブロック数が多い）のハードリミットを設定する。このハードリミットは、上記実施の形態における制限値（ファイル数の制限値やブロック数の制限値）である。
【０２５０】
ファイルシステムでは、使用量がソフトリミットを超えたときに、時間計測を開始する。このとき、使用量がソフトリミットを超えたことを示すメッセージを、利用者の使用している表示装置に表示させてもよい。ファイルシステムは、使用量がソフトリミットを超えてからタイムリミットの時間以上経過すると、該当するディレクトリ配下へのファイルの作成またはブロック割り当て操作を禁止する。
【０２５１】
このように多段階に制限値を設けることで、制限値（ハードリミット）ぎりぎりまで既に使用しているのを利用者が気づかずに作業を行い、その結果、新たに作成した重要なファイルを保存できなくなるような事態を回避することができる。
【０２５２】
なお、ソフトリミットとして、ファイル数の制限値とブロック数の制限値を設定した場合、ファイル数のタイムリミットと、ブロック数のタイムリミットとを個別に設定してもよい。
【０２５３】
なお、上記の説明では、ファイルサーバの１つであるＮＡＳファイラ１００に本発明に係るファイルシステム（ファイルシステム制御部１２０）を実装し、ネットワークを介して接続されたクライアント２０のアプリケーション部２１からファイルシステムに対する操作を行う場合について説明したが、ファイルシステム制御部１２０とアプリケーション部２１が、１つの装置内に実装されていてもよい。たとえば、クライアント２０内にファイルシステム制御部１２０の機能を実装し、クライアント２０の記憶装置を管理させることもできる。
【０２５４】
また、上記の処理機能は、サーバコンピュータとクライアントコンピュータとに、ファイル管理プログラムを実行させることで実現することができる。その場合、ＮＡＳファイラなどのサーバコンピュータが有すべき機能の処理内容を記述したサーバプログラム、およびクライアントコンピュータが有すべき機能の処理内容を記述したクライアントプログラムが提供される。サーバプログラムをサーバコンピュータで実行することにより、上記本実施の形態の処理機能がサーバコンピュータ上で実現される。また、クライアントプログラムをクライアントコンピュータで実行することにより、上記本実施の形態の処理機能がクライアントコンピュータ上で実現される。
【０２５５】
処理内容を記述したサーバプログラムやクライアントプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ(Digital Versatile Disc)、ＤＶＤ−ＲＡＭ(Random Access Memory)、ＣＤ−ＲＯＭ(Compact Disc Read Only Memory)、ＣＤ−Ｒ(Recordable)／ＲＷ(ReWritable)などがある。光磁気記録媒体には、ＭＯ(Magneto-Optical disc)などがある。
【０２５６】
サーバプログラムやクライアントプログラムを流通させる場合には、たとえば、各プログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、クライアントプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータからクライアントコンピュータにクライアントプログラムを転送することもできる。
【０２５７】
サーバプログラムを実行するサーバコンピュータは、たとえば、可搬型記録媒体に記録されたサーバプログラムを、自己の記憶装置に格納する。そして、サーバコンピュータは、自己の記憶装置からサーバプログラムを読み取り、サーバプログラムに従った処理を実行する。なお、サーバコンピュータは、可搬型記録媒体から直接サーバプログラムを読み取り、そのサーバプログラムに従った処理を実行することもできる。
【０２５８】
クライアントプログラムを実行するクライアントコンピュータは、たとえば、可搬型記録媒体に記録されたクライアントプログラムもしくはサーバコンピュータから転送されたクライアントプログラムを、自己の記憶装置に格納する。そして、クライアントコンピュータは、自己の記憶装置からクライアントプログラムを読み取り、クライアントプログラムに従った処理を実行する。なお、クライアントコンピュータは、可搬型記録媒体から直接クライアントプログラムを読み取り、そのクライアントプログラムに従った処理を実行することもできる。また、クライアントコンピュータは、サーバコンピュータからクライアントプログラムが転送される毎に、逐次、受け取ったクライアントプログラムに従った処理を実行することもできる。
【０２５９】
（付記１）  識別情報を有するディレクトリを用いてファイルを管理するためのファイル管理プログラムにおいて、
コンピュータを、
ファイル操作要求に応答して、前記ファイルを任意のディレクトリの下に配置するファイル操作手段と、
前記ファイル操作手段により前記ファイルが配置されると、前記ファイルの親ディレクトリ情報として、前記任意のディレクトリの識別情報を設定する親ディレクトリ情報設定手段と、
前記ファイルを指定した親ディレクトリ情報取得要求に応答して、前記ファイルの親ディレクトリ情報を参照し、前記任意のディレクトリの識別情報を出力する親ディレクトリ情報提供手段と、
として機能させることを特徴とするファイル管理プログラム。
【０２６０】
（付記２）  前記親ディレクトリ情報設定手段は、前記任意のディレクトリが複数の場合には、前記ファイルの親ディレクトリ情報として、複数の前記任意のディレクトリそれぞれの識別情報を設定することを特徴とする付記１記載のファイル管理プログラム。
【０２６１】
（付記３）  前記ファイルの親ディレクトリ情報として設定された複数の識別情報それぞれに対して優先順を設定する優先順設定手段をさらに有し、
前記親ディレクトリ情報提供手段は、前記複数の識別情報を出力する際に、優先順に沿った順番で前記複数の識別情報を出力することを特徴とする付記２記載のファイル管理プログラム。
【０２６２】
（付記４）  前記ファイル操作手段は、ファイル操作要求に応答して、上位ディレクトリの下に下位ディレクトリを配置し、
前記親ディレクトリ情報設定手段は、前記ファイル操作手段により前記下位ディレクトリが配置されると、配置された前記下位ディレクトリの親ディレクトリ情報として、前記上位ディレクトリの識別情報を設定し、
前記ファイルの経路探索要求に応答して、前記ファイルの親ディレクトリ情報に示されている前記任意のディレクトリの識別情報で示されるディレクトリから順に、各ディレクトリの親ディレクトリ情報に設定されている識別情報で示されるディレクトリを辿り、最上位のディレクトリまでの経路を探索する探索手段をさらに有する、
ことを特徴とする付記１記載のファイル管理プログラム。
【０２６３】
（付記５）  前記親ディレクトリ情報設定手段は、前記任意のディレクトリが複数の場合には、前記ファイルの親ディレクトリ情報として、複数の前記任意のディレクトリそれぞれの識別情報を設定し、
前記探索手段は、前記ファイルの親ディレクトリとして設定されている複数の前記識別情報毎に、前記最上位のディレクトリまでの経路を探索することを特徴とする付記４記載のファイル管理プログラム。
【０２６４】
（付記６）  所定のファイル管理規則を示す属性情報を、ディレクトリに設定する属性情報設定手段と、
前記ファイルの経路探索要求を前記探索手段に出力して前記探索手段から探索結果の経路を受け取り、前記探索結果の経路上の各ディレクトリに設定されている属性情報に対応するファイル管理規則を、前記ファイルに適用することを特徴とする付記４記載のファイル管理プログラム。
【０２６５】
（付記７）  識別情報を有するディレクトリを用いてファイルを管理するためのファイル管理プログラムにおいて、
コンピュータを、
ディレクトリ毎に、記憶領域の使用量の制限値を設定する制限値設定手段と、
ファイル操作要求があると、ファイル操作を実行した場合の各ディレクトリの記憶領域の使用予定量を計算し、前記各ディレクトリにおいて、前記制限値設定手段で設定された制限値と使用予定量とを比較する比較手段と、
前記比較手段で比較された結果、使用予定量が制限値を超えるディレクトリが存在しない場合に、前記ファイル操作要求に応答してファイル操作を実行するファイル操作手段と、
として機能させることを特徴とするファイル管理プログラム。
【０２６６】
（付記８）  前記制限値設定手段は、前記記憶領域の使用量の制限値として、前記ディレクトリ配下に配置可能なファイル数を設定することを特徴とする付記７記載のファイル管理プログラム。
【０２６７】
（付記９）  前記制限値設定手段は、前記記憶領域の使用量の制限値として、前記ディレクトリ配下に配置されたファイルで使用可能な記憶容量を設定することを特徴とする付記７記載のファイル管理プログラム。
【０２６８】
（付記１０）  前記制限値設定手段は、各ディレクトリに対して、ユーザ毎に前記記憶領域の使用量の制限値を設定し、
前記比較手段は、前記ファイル操作要求を出したユーザの使用量と、当該ユーザの使用量の制限値とを比較することを特徴とする付記７記載のファイル管理プログラム。
【０２６９】
（付記１１）  前記制限値設定手段は、各ディレクトリに対して、グループ毎に前記記憶領域の使用量の制限値を設定し、
前記比較手段は、前記ファイル操作要求を出したユーザの属するグループの使用量と、当該グループの使用量の制限値とを比較することを特徴とする付記７記載のファイル管理プログラム。
【０２７０】
（付記１２）  識別情報を有するディレクトリを用いてファイルを管理するためのファイル管理装置において、
ファイル操作要求に応答して、前記ファイルを任意のディレクトリの下に配置するファイル操作手段と、
前記ファイル操作手段により前記ファイルが配置されると、前記ファイルの親ディレクトリ情報として、前記任意のディレクトリの識別情報を設定する親ディレクトリ情報設定手段と、
前記ファイルを指定した親ディレクトリ情報取得要求に応答して、前記ファイルの親ディレクトリ情報を参照し、前記任意のディレクトリの識別情報を出力する親ディレクトリ情報提供手段と、
を有することを特徴とするファイル管理装置。
【０２７１】
（付記１３）  前記親ディレクトリ情報設定手段は、前記任意のディレクトリが複数の場合には、前記ファイルの親ディレクトリ情報として、複数の前記任意のディレクトリそれぞれの識別情報を設定することを特徴とする付記１２記載のファイル管理装置。
【０２７２】
（付記１４）  前記ファイルの親ディレクトリ情報として設定された複数の識別情報それぞれに対して優先順を設定する優先順設定手段をさらに有し、
前記親ディレクトリ情報提供手段は、前記複数の識別情報を出力する際に、優先順に沿った順番で前記複数の識別情報を出力することを特徴とする付記１３記載のファイル管理装置。
【０２７３】
（付記１５）  前記ファイル操作手段は、ファイル操作要求に応答して、上位ディレクトリの下に下位ディレクトリを配置し、
前記親ディレクトリ情報設定手段は、前記ファイル操作手段により前記下位ディレクトリが配置されると、配置された前記下位ディレクトリの親ディレクトリ情報として、前記上位ディレクトリの識別情報を設定し、
前記ファイルの経路探索要求に応答して、前記ファイルの親ディレクトリ情報に示されている前記任意のディレクトリの識別情報で示されるディレクトリから順に、各ディレクトリの親ディレクトリ情報に設定されている識別情報で示されるディレクトリを辿り、最上位のディレクトリまでの経路を探索する探索手段をさらに有する、
ことを特徴とする付記１２記載のファイル管理装置。
【０２７４】
（付記１６）  前記親ディレクトリ情報設定手段は、前記任意のディレクトリが複数の場合には、前記ファイルの親ディレクトリ情報として、複数の前記任意のディレクトリそれぞれの識別情報を設定し、
前記探索手段は、前記ファイルの親ディレクトリとして設定されている複数の前記識別情報毎に、前記最上位のディレクトリまでの経路を探索することを特徴とする付記１５記載のファイル管理装置。
【０２７５】
（付記１７）  所定のファイル管理規則を示す属性情報を、ディレクトリに設定する属性情報設定手段と、
前記ファイルの経路探索要求を前記探索手段に出力して前記探索手段から探索結果の経路を受け取り、前記探索結果の経路上の各ディレクトリに設定されている属性情報に対応するファイル管理規則を、前記ファイルに適用することを特徴とする付記１５記載のファイル管理装置。
【０２７６】
（付記１８）  識別情報を有するディレクトリを用いてファイルを管理するためのファイル管理装置において、
ディレクトリ毎に、記憶領域の使用量の制限値を設定する制限値設定手段と、
ファイル操作要求があると、ファイル操作を実行した場合の各ディレクトリの記憶領域の使用予定量を計算し、前記各ディレクトリにおいて、前記制限値設定手段で設定された制限値と使用予定量とを比較する比較手段と、
前記比較手段で比較された結果、使用予定量が制限値を超えるディレクトリが存在しない場合に、前記ファイル操作要求に応答してファイル操作を実行するファイル操作手段と、
を有することを特徴とするファイル管理装置。
【０２７７】
（付記１９）  前記制限値設定手段は、前記記憶領域の使用量の制限値として、前記ディレクトリ配下に配置可能なファイル数を設定することを特徴とする付記１８記載のファイル管理装置。
【０２７８】
（付記２０）  前記制限値設定手段は、前記記憶領域の使用量の制限値として、前記ディレクトリ配下に配置されたファイルで使用可能な記憶容量を設定することを特徴とする付記１８記載のファイル管理装置。
【０２７９】
（付記２１）  前記制限値設定手段は、各ディレクトリに対して、ユーザ毎に前記記憶領域の使用量の制限値を設定し、
前記比較手段は、前記ファイル操作要求を出したユーザの使用量と、当該ユーザの使用量の制限値とを比較することを特徴とする付記１８記載のファイル管理装置。
【０２８０】
（付記２２）  前記制限値設定手段は、各ディレクトリに対して、グループ毎に前記記憶領域の使用量の制限値を設定し、
前記比較手段は、前記ファイル操作要求を出したユーザの属するグループの使用量と、当該グループの使用量の制限値とを比較することを特徴とする付記１８記載のファイル管理装置。
【０２８１】
（付記２３）  識別情報を有するディレクトリを用いてファイルを管理するためのファイル管理プログラムを記録したコンピュータ読み取り可能な記録媒体において、
前記コンピュータを、
ファイル操作要求に応答して、前記ファイルを任意のディレクトリの下に配置するファイル操作手段と、
前記ファイル操作手段により前記ファイルが配置されると、前記ファイルの親ディレクトリ情報として、前記任意のディレクトリの識別情報を設定する親ディレクトリ情報設定手段と、
前記ファイルを指定した親ディレクトリ情報取得要求に応答して、前記ファイルの親ディレクトリ情報を参照し、前記任意のディレクトリの識別情報を出力する親ディレクトリ情報提供手段と、
として機能させることを特徴とする記録媒体。
【０２８２】
（付記２４）  識別情報を有するディレクトリを用いてファイルを管理するためのファイル管理プログラムを記録したコンピュータ読み取り可能な記録媒体において、
前記コンピュータを、
ディレクトリ毎に、記憶領域の使用量の制限値を設定する制限値設定手段と、
ファイル操作要求があると、ファイル操作を実行した場合の各ディレクトリの記憶領域の使用予定量を計算し、前記各ディレクトリにおいて、前記制限値設定手段で設定された制限値と使用予定量とを比較する比較手段と、
前記比較手段で比較された結果、使用予定量が制限値を超えるディレクトリが存在しない場合に、前記ファイル操作要求に応答してファイル操作を実行するファイル操作手段と、
として機能させることを特徴とする記録媒体。
【図面の簡単な説明】
【０２８３】
【図１】関連技術の原理構成図である。
【図２】本発明のシステム構成例を示す図である。
【図３】ＮＡＳファイラのハードウェア構成例を示す図である。
【図４】本実施の形態のシステムにおける処理機能を示す機能ブロック図である。
【図５】本実施の形態におけるファイルシステム構造の一例を示す図である。
【図６】ファイルシステム構造の定義例を示す図である。
【図７】ファイルシステム処理における指示の流れを示す図である。
【図８】パス名探索処理の手順を示すフローチャートである。
【図９】ハードリンクにおける親ディレクトリ情報格納領域の状態遷移を示す図である。
【図１０】ハードリンクを含むファイルシステムにおけるパス名探索手順を示すフローチャートの前半である。
【図１１】ハードリンクを含むファイルシステムにおけるパス名探索手順を示すフローチャートの後半である。
【図１２】属性反映処理の手順を示すフローチャートの前半である。
【図１３】属性反映処理の手順を示すフローチャートの後半である。
【図１４】使用制限を行うときのディレクトリの属性情報のデータ構造の一例を示す図である。
【図１５】使用制限を行うときのファイルの管理情報のデータ構造例を示す図である。図１５（Ａ）は、ハードリンクがない場合のファイルの管理情報を示している。図１５（Ｂ）は、ハードリンクがある場合のファイルの管理情報を示している。
【図１６】使用量更新、制限値参照ディレクトリ決定処理の手順を示すフローチャートである。
【図１７】使用制限を設ける場合の機能構成を示す機能ブロック図である。
【図１８】使用量制限処理を行うためのディレクトリのデータ構造の一例を示す図である。
【図１９】使用量制限処理を行うためのファイルのデータ構造の一例を示す図である。
【図２０】ディレクトリツリーの一例を示す図である。
【図２１】使用量更新処理の手順を示すフローチャートの前半である。
【図２２】使用量更新処理の手順を示すフローチャートの後半である。
【図２３】使用量制限処理の手順を示すフローチャートの前半である。
【図２４】使用量制限処理の手順を示すフローチャートの後半である。
【図２５】移動処理の手順を示すフローチャートである。
【図２６】ディレクトリ移動前のデータ構造の一例を示す図である。
【図２７】ディレクトリを移動後のデータ構造の一例を示す図である。
【図２８】制限値設定前のデータ構造の一例を示す図である。
【図２９】制限値設定後のデータ構造の一例を示す図である。
【符号の説明】
【０２８４】
１  記憶領域
１ａ〜１ｃ  ディレクトリ
１ｄ  ファイル
２  管理情報
２ａ〜２ｄ  親ディレクトリ情報
３  ファイル操作手段
４  親ディレクトリ情報設定手段
５  親ディレクトリ情報提供手段
６  探索手段
１０  ネットワーク
２０，２０ａ〜２０ｃ  クライアント
１００  ＮＡＳファイラ
【図１】
2008123542.tif 000003
【図２】
2008123542.tif 000004
【図３】
2008123542.tif 000005
【図４】
2008123542.tif 000006
【図５】
2008123542.tif 000007
【図６】
2008123542.tif 000008
【図７】
2008123542.tif 000009
【図８】
2008123542.tif 000010
【図９】
2008123542.tif 000011
【図１０】
2008123542.tif 000012
【図１１】
2008123542.tif 000013
【図１２】
2008123542.tif 000014
【図１３】
2008123542.tif 000015
【図１４】
2008123542.tif 000016
【図１５】
2008123542.tif 000017
【図１６】
2008123542.tif 000018
【図１７】
2008123542.tif 000019
【図１８】
2008123542.tif 000020
【図１９】
2008123542.tif 000021
【図２０】
2008123542.tif 000022
【図２１】
2008123542.tif 000023
【図２２】
2008123542.tif 000024
【図２３】
2008123542.tif 000025
【図２４】
2008123542.tif 000026
【図２５】
2008123542.tif 000027
【図２６】
2008123542.tif 000028
【図２７】
2008123542.tif 000029
【図２８】
2008123542.tif 000030
【図２９】
2008123542.tif 000031