以下、本発明の実施の形態を図面を参照して説明する。
図1は、関連技術の原理構成図である。本発明のファイル管理プログラムを実行するコンピュータは、記憶領域1、管理情報2、ファイル操作手段3、親ディレクトリ情報設定手段4、親ディレクトリ情報提供手段5および探索手段6を有する。
記憶領域1は、特定のファイルシステムで管理される記憶領域である。たとえば、ハードディスク装置などのストレージデバイス内の記憶領域である。図1の例では、記憶領域1内に、ディレクトリ1a,1b,1cとファイル1dとが格納されている。記憶領域1内のデータは、ディレクトリ1aを最上位とした木構造を形成している。
たとえば、図1の例では、ディレクトリ1aの下にディレクトリ1bが配置され、ディレクトリ1bの下にディレクトリ1cが配置され、ディレクトリ1bとディレクトリ1cとの下にファイル1dが配置されている。なお、ディレクトリ1a,1b,1cとファイル1dとには、それぞれ識別情報a〜dが予め設定されている。
管理情報2は、記憶領域1内のディレクトリ1a,1b,1cとファイル1dとのそれぞれに対応する親ディレクトリ情報2a〜2dを有している。
ファイル操作手段3は、ファイル操作要求に応答して、記憶領域1内において、ファイルを任意のディレクトリの下に配置する。たとえば、ファイル操作手段3は、ファイル1dをディレクトリ1bとディレクトリ1cとの下に配置する。また、ファイル操作手段3は、ファイル操作要求に応答して、上位ディレクトリの下に下位ディレクトリを配置する。
親ディレクトリ情報設定手段4は、ファイル操作手段3によりファイルが配置されると、配置されたファイルの親ディレクトリ情報として、ファイルを配置したディレクトリの識別情報を設定する。親ディレクトリ情報設定手段4は、ファイルが複数のディレクトリの下に配置された場合には、配置されたファイルの親ディレクトリ情報として、複数のディレクトリそれぞれの識別情報を設定する。
たとえば、親ディレクトリ情報設定手段4は、ファイル1dがディレクトリ1bとディレクトリ1cとの下に配置されると、ファイル1dの親ディレクトリ情報2dとして、ディレクトリ1bの識別情報bとディレクトリ1cの識別情報cとを設定する。また、親ディレクトリ情報設定手段4は、ファイル操作手段3により、上位ディレクトリの下に下位ディレクトリが配置されると、配置された下位ディレクトリの親ディレクトリ情報として、上位ディレクトリの識別情報を設定する。
親ディレクトリ情報提供手段5は、ファイル(あるいはディレクトリ)を指定した親ディレクトリ情報取得要求に応答して、ファイル(あるいはディレクトリ)の親ディレクトリ情報を参照し、ディレクトリの識別情報を出力する。たとえば、親ディレクトリ情報提供手段5は、ファイル1dに関する親ディレクトリ取得要求を受け取ると、ディレクトリ1bの識別情報bと、ディレクトリ1cの識別情報cとを出力する。
探索手段6は、ファイルの経路探索要求に応答して、ファイルの親ディレクトリ情報に示されているディレクトリの識別情報から順に、各ディレクトリの親ディレクトリ情報に設定されている識別情報で示されるディレクトリを辿り、最上位のディレクトリまでの経路を探索する。そして、探索手段6は、探索結果として、ファイルから最上位のディレクトリまでの経路を出力する。
図1の例では、探索手段6は、親ディレクトリ情報提供手段5に親ディレクトリ取得要求を出すことにより、ファイルやディレクトリの親ディレクトリ情報として設定されている識別情報を取得する。
このような構成のファイル管理装置によれば、ファイル作成のファイル操作要求が出されると、ファイル操作手段3によって、ファイルが作成される。すると、親ディレクトリ情報設定手段4によって、作成されたファイルに対応する親ディレクトリ情報として、そのファイルが配置されたディレクトリの識別情報が設定される。
その後、経路探索要求が出されると、探索手段6から親ディレクトリ情報提供手段5に親ディレクトリ取得要求が出される。たとえば、ファイル1dの識別情報dを指定した経路探索要求であれば、探索手段6から親ディレクトリ情報提供手段5へ、ファイル1d(識別情報d)の親ディレクトリ取得要求が出される。
親ディレクトリ取得要求を受けた親ディレクトリ情報提供手段5により、指定されたファイルまたはディレクトリの親ディレクトリ情報に設定されている識別情報が、探索手段6に出力される。たとえば、ファイル1dの親ディレクトリ取得要求を受け取ったのであれば、ファイル1dに対応する親ディレクトリ情報2dに設定されている識別情報b,cが探索手段6に対して出力される。
すると、探索手段6により、受け取った識別情報が最上位のディレクトリに達するまで、受け取った識別情報を指定した親ディレクトリ取得要求が、繰り返し親ディレクトリ情報提供手段5に出力される。その結果、親ディレクトリ情報提供手段5から探索手段6へ、最初に指定したファイルから最上位のディレクトリに達するまでの経路上の各ディレクトリの識別情報が、順次出力される。たとえば、ファイル1dの経路探索要求であれば、ファイル1dの親ディレクトリ情報として2つの識別情報が設定されているため、「d→c→b→a」と「d→b→a」との2つ経路の識別情報の列が、親ディレクトリ情報提供手段5から探索手段6へ出力される。
最後に、探索手段6により、探索結果の経路情報が出力される。たとえば、親ディレクトリ情報提供手段5から出力された識別情報が、後に出力されたものから順に並べられ、最上位のディレクトリからファイルに至るまでの経路として、探索手段6から出力される。ファイル1dの経路探索要求であれば、「a→b→c→d」と「a→b→d」とが探索結果として出力される。
このようにして、ファイルを指定して、順に親ディレクトリを探索することが可能となる。たとえば、ファイルシステムのルートのディレクトリ情報を事前に保持することで、ルートのディレクトリまでのファイルからの逆探索を行い、各ディレクトリから子ファイル(ディレクトリを含む)へのパス名が生成できる。
しかも、各ファイルが複数の親ディレクトリ情報を保持できるため、複数のディレクトリの下に配置されたファイルについても全てのパス名が生成できる。
なお、図1に示したファイル管理装置の機能を、各種コンピュータに対して、ファイルシステムの一部として実装することができる。たとえば、UNIX(登録商標)系のOS(Operating System)で動作するコンピュータ、WINDOWS(登録商標)系のOSで動作するコンピュータのいずれのコンピュータにも実装可能である。また、ファイルサーバに実装することで、既存のファイルシステムを有するコンピュータであっても、ネットワーク経由で本発明のファイルシステムによる機能を利用することが可能である。
[ファイルサーバによる本発明の実施の形態]
以下に、ファイルサーバの1つであるNAS(Network Attached Storage)ファイラに本発明に係るファイルシステムを実装する場合を例に採り、本発明の実施の形態を説明する。
図2は、本発明のシステム構成例を示す図である。図2に示すように、NASファイラ100には、ネットワーク10を介して複数のクライアントコンピュータ(以下、単にクライアントと呼ぶ)20、20a,20b,20c,・・・が接続されている。ネットワーク10は、たとえば、LAN(Local Area Network)である。クライアント20、20a,20b,20c,・・・は、たとえば、UNIXなどのマルチユーザに対応したOSで動作するコンピュータである。
図3は、NASファイラのハードウェア構成例を示す図である。NASファイラ100は、CPU(Central Processing Unit)101によって装置全体が制御されている。CPU101には、バス107を介してRAM(Random Access Memory)102、複数のハードディスクドライブ(HDD:Hard Disk Drive)103,103a,103b,・・・、グラフィック処理装置104、入力インタフェース105、および通信インタフェース106が接続されている。
RAM102には、CPU101に実行させるOS(Operating System)のプログラムやアプリケーション部の少なくとも一部が一時的に格納される。また、RAM102には、CPU101による処理に必要な各種データが格納される。HDD103,103a,103b,・・・には、OSやアプリケーション部が格納される。HDD103,103a,103b,・・・は、たとえばRAID(Redundant Array of Independent Disks)により管理され、高速で信頼性の高いファイル管理が行われる。
グラフィック処理装置104には、モニタ11が接続されている。グラフィック処理装置104は、CPU101からの命令に従って、画像をモニタ11の画面に表示させる。入力インタフェース105には、キーボード12とマウス13とが接続されている。入力インタフェース105は、キーボード12やマウス13から送られてくる信号を、バス107を介してCPU101に送信する。
通信インタフェース106は、ネットワーク10に接続されている。通信インタフェース106は、ネットワーク10を介して、他のコンピュータとの間でデータの送受信を行う。
なお、図3には、NASファイラ100のハードウェア構成例を示したが、クライアント20,20a,20b,20c,・・・のハードウェア構成もほぼ同様である。ただし、クライアント20,20a,20b,20c,・・・は、HDDを複数有している必要はない。
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。
図4は、本実施の形態のシステムにおける処理機能を示す機能ブロック図である。クライアント20は、アプリケーション部21とネットワーク制御部22とを有している。アプリケーション部21は、ユーザの操作入力などによる命令に応じて処理を実行する。
アプリケーション部21が実行する処理の中には、ファイル操作に関する処理要求の出力も含まれる。ファイル操作に関する処理とは、たとえば、ファイルの作成、ファイル移動、ファイル削除、ハードリンク作成である。
ハードリンクとは、あるファイル実体に対して、その本来の名前に加えて、別のパスによるアクセスも可能にする機能である。通常のファイルシステムでは、0個以上のファイルまたはディレクトリを子にもつディレクトリを節、ファイルを葉とする木構造を持つ。しかし、UNIX系のOSのファイルシステムにおいては、同一のファイルを子とする複数のディレクトリの存在を認めており、複数のディレクトリを親に持つファイルはハードリンクと呼ばれている。ハードリンクを持つファイルシステムは純粋な木構造とはならない。
また、アプリケーション部21は、NASファイラ100のファイルシステムに対して、ディレクトリに対する属性の設定要求を出したり、ファイルを特定して、そのファイルのパスの取得要求を出したりすることもできる。
ネットワーク制御部22は、アプリケーション部21からの要求に応じて、所定のネットワークプロトコルにより、NASファイラ100と通信を行うことができる。ネットワーク制御部22がNASファイラ100と通信することで、アプリケーション部21は、NASファイラ100内のファイルシステムを利用することができる。
NASファイラ100は、ネットワーク制御部110、ファイルシステム制御部120、入出力ドライバ部130、およびデータ記憶部140を有している。
ネットワーク制御部110は、ネットワーク10を介したクライアント20,20a,20b,20c,・・・との間の通信を制御する。ネットワーク制御部110は、クライアント20,20a,20b,20c,・・・からの要求をファイルシステム制御部120に渡したり、要求に対するファイルシステム制御部120からの応答を、ネットワーク10を介してクライアント20,20a,20b,20c,・・・に送信したりする。
ファイルシステム制御部120は、ファイルシステムインタフェース処理部121、ファイルシステム情報管理部122、属性設定管理部123、ファイル操作部124およびディスク管理部125を有している。
ファイルシステムインタフェース処理部121は、ネットワーク制御部110を介して、アプリケーション部21からの要求を受け取り、その要求の内容に応じた処理の命令を、ファイルシステム情報管理部122、属性設定管理部123およびファイル操作部124に渡す。また、ファイルシステムインタフェース処理部121は、ファイルシステム情報管理部122、属性設定管理部123およびファイル操作部124から処理結果を受け取り、処理結果を示す応答をネットワーク制御部110を介してアプリケーション部21に送る。
ファイルシステム情報管理部122は、ファイルシステムのディレクトリやファイルに関する情報を管理している。たとえば、ファイルシステム情報管理部122は、ディレクトリやファイルの親ディレクトリの情報を格納したり、ディレクトリやファイルの親ディレクトリの情報を参照して、ディレクトリパスを下位から上位へと辿ったりすることができる。
属性設定管理部123は、ディレクトリやファイルの属性を管理している。ここでいう属性は、ディレクトリやファイルに対して、所定の規則を与えるものである。たとえば、属性を設定することで、「ファイルへのアクセスが発生してもアクセス時刻情報を更新しない」という規則や、「ディレクトリ配下のディスク使用量が予め設定した制限値を超えない」という規則が与えられる。
ファイル操作部124は、データ記憶部140に格納されているファイルを操作する。ファイルの操作としては、ファイルの作成、ファイルの移動、ファイルの削除、ハードリンクの作成などがある。
ディスク管理部125は、RAID機構などを用いて、データ記憶部140を構成するHDD103,103a,103b,・・・に対するデータの入出力を管理する。
入出力ドライバ部130は、データ記憶部140に含まれるHDD103,103a,103b,・・・それぞれの動作を制御する。また、入出力ドライバ部130は、HDD103,103a,103b,・・・へのデータの書き込みや、データの読み出しを行う。
データ記憶部140は、複数のHDD103,103a,103b,・・・によりデータを記憶する。
次に、上記のような構成のシステムにおいて提供されるファイルシステムの構造について説明する。
図5は、本実施の形態におけるファイルシステム構造の一例を示す図である。たとえば、図5に示すファイルシステムでは、複数のディレクトリ31〜35と複数のファイル41〜44とを有している。ディレクトリ31はルートディレクトリであり、木構造における最上位の位置に配置されている。
ディレクトリ31の直接の子として、2つのディレクトリ32,33が配置されている。ディレクトリ32の直接の子として、ディレクトリ34と2つのファイル41,42とが配置されている。ディレクトリ33の直接の子としてディレクトリ35とファイル43とが配置されている。ディレクトリ34の直接の子として、2つのファイル42,43が配置されている。ディレクトリ35の直接の子として、ファイル44が配置されている。
このように、ディレクトリ31〜35とファイル41〜44とは、木構造に構造化されている。ただし、ハードリンクを用いると、ファイル42やファイル43のように、複数のディレクトリの子として配置することができる。すなわち、ファイル42は、ディレクトリ32の子であると共にディレクトリ34の子でもある。
ここで、ハードリンクを用いたファイルシステムの構造が、ディレクトリやファイルの管理情報として、どのように定義されているのかについて説明する。
図6は、ファイルシステム構造の定義例を示す図である。図6の例は、ファイルシステム全体の管理情報の中から、図5に示したディレクトリ32,34の管理情報32a,34aと、ファイル41,42の管理情報41a,42aとの記述部分を抜き出したものである。
ディレクトリ32,34の管理情報32a,34aには、直接の子ファイルの一覧、親ディレクトリ情報、および属性情報が設定されている。
直接の子ファイルの一覧には、そのディレクトリの直下に配置されたディレクトリとファイルとの名称(ディレクトリ名とファイル名)、およびそのディレクトリやファイルを特定する情報(識別情報)が設定されている。
親ディレクトリ情報には、そのディレクトリの直接上のディレクトリの識別情報が設定されている。属性情報には、そのディレクトリに対する属性情報が設定されている。
ファイル41,42の管理情報41a,42aには、直接の親のディレクトリ情報として、親ディレクトリの識別情報が設定されている。特にファイル42には、親ディレクトリが複数存在するため、ファイル42の管理情報42aには、直接の親ディレクトリ情報のリスト(識別情報の配列)が設定されている。
このように、ファイル41,42に対して、直接の親ディレクトリの管理情報41a,42aを設定したことで、ファイル41,42からそのファイルのパスを探索することが可能となる。その結果、ファイルからファイルパス名の高速な生成が実現できる。
また、各ディレクトリ32,34に属性情報を設定したことにより、所定のディレクトリ配下の全てのファイルおよびディレクトリをグループ化して、属性設定することが可能となる。
なお、各ファイル情報は識別情報で参照可能なデータ構造を取る。識別情報はUNIXファイルシステムの場合、inode番号が使用される。
次に、本発明のファイルシステムにおける処理内容を説明する。
[ハードリンクを含まないパス名探索]
まず、ハードリンクを含まない場合のパス名の探索方法について説明する。
図7は、ファイルシステム処理における指示の流れを示す図である。図7に示す矢印は、指示を出す側から指示(処理要求)を受ける側に対して向いている。なお、図7では、ファイルシステム情報管理部122と属性設定管理部123との中に、本実施の形態に係る処理機能が示されている。また、図4に示したクライアント20のネットワーク制御部22やNASファイラ100のネットワーク制御部110などは、単に処理要求の伝送を仲介するものであるため、図7では省略している。
ファイルシステム情報管理部122は、親ディレクトリ情報格納処理部122aと親ディレクトリ情報参照処理部122bとを有している。
親ディレクトリ情報格納処理部122aは、ディレクトリやファイルの管理情報の1つとして、親ディレクトリ情報を格納する。
親ディレクトリ情報参照処理部122bは、親ディレクトリ取得要求に応じて、ディレクトリやファイルの管理情報内の親ディレクトリ情報を参照し、親ディレクトリの識別情報を返送する。たとえば、属性設定管理部123の上位ディレクトリ探索処理部123bからの親ディレクトリ取得要求に応じて、ディレクトリやファイルの管理情報内の親ディレクトリ情報を参照し、親ディレクトリに関する情報を上位ディレクトリ探索処理部123bに渡す。
属性設定管理部123は、ディレクトリ属性設定処理部123a、上位ディレクトリ探索処理部123b、およびディレクトリ属性値返却部123cを有している。
ディレクトリ属性設定処理部123aは、クライアント20のアプリケーション部21からの属性値設定要求に応じて、ディレクトリの管理情報に対して属性値を設定する。
上位ディレクトリ探索処理部123bは、クライアント20のアプリケーション部21からの経路探索要求に応じて、指定されたファイルの所在を示すパスを探索する。パスの探索の際には、ファイルシステム情報管理部122の親ディレクトリ情報参照処理部122bに、ファイルやディレクトリの親ディレクトリ情報取得要求を渡す。親ディレクトリの情報を繰り返し取得することで、指定されたファイルまでのルートディレクトリからのパスを探索することができる。
ディレクトリ属性値返却部123cは、アプリケーション部21からのディレクトリ属性値の取得依頼に応じて、指定されたディレクトリに設定されている属性値を応答する。
アプリケーション部21からファイルシステム制御部120へは、ファイル作成、ファイル移動、ファイル削除、ハードリンク作成、親ディレクトリ情報取得、親ディレクトリ情報順序設定、および属性設定などの処理要求が出される。たとえば、ファイル作成、ファイル移動などのファイル操作時には、アプリケーション部21からファイルシステム制御部120に対して、ファイル操作要求が発行される。ファイルシステム制御部120では、ファイルシステムインタフェース処理部121が、ファイル操作部124に対して、ファイル操作要求に応じたファイル操作を指示する。
さらに、ファイルシステムインタフェース処理部121は、ファイルシステム情報管理部122に対して、ファイル情報の更新を依頼する。このファイル更新依頼では、従来と異なり、親ディレクトリ情報の更新指示も出される。ファイル情報の更新依頼を受けたファイルシステム情報管理部122は、ファイルの更新日時を設定するなどの一般的なファイルの情報を設定すると共に、親ディレクトリ情報格納処理部122aに対して、親ディレクトリ情報の格納を指示する。
すると、親ディレクトリ情報格納処理部122aが、操作対象となったファイルの管理情報に対して、そのファイルの親ディレクトリの識別情報を設定する。具体的には、親ディレクトリ情報格納処理部122aからディスク管理部125に対して、操作対象となったファイルの管理情報が格納されている領域に対して、親ディレクトリの識別情報の書き込みを要求する。ディスク管理部125は、要求に応じて、データ記憶部140を構成するHDD103,103a,103b,・・・に、親ディレクトリの識別情報を書き込む。
このようにして、ファイルが作成されたり、ファイルが移動されたりすると、作成または移動されたファイルの管理情報に、親ディレクトリの識別情報が設定される。なお、ディレクトリの作成および移動の処理においても同様に、作成または移動されたディレクトリの管理情報に、親ディレクトリの識別情報が設定される。
クライアント20において、ファイルのパスを探索する場合、アプリケーション部21から、ファイルを指定した親ディレクトリ情報取得要求がファイルシステム制御部120に出される。すると、ファイルシステム制御部120では、ファイルシステムインタフェース処理部121からファイルシステム情報管理部122に対して、親ディレクトリ情報取得要求が出される。親ディレクトリ取得要求を受け取ったファイルシステム情報管理部122では、親ディレクトリ情報参照処理部122bが、ディスク管理部125を介して、指定されたファイルの管理情報内の親ディレクトリ情報を参照する。そして、親ディレクトリ情報参照処理部122bは、指定された親ディレクトリの情報を返却する。
このような、親ディレクトリ情報の獲得処理を繰り返し実行することにより、アプリケーション部21において、ファイルのパス名を探索することができる。
図8は、パス名探索処理の手順を示すフローチャートである。以下、図8に示す処理をステップ番号に沿って説明する。なお、以下の処理では、ディレクトリもファイルの1つとして取り扱われる。すなわち、ディレクトリ名は、ファイル名でもある。
[ステップS101]アプリケーション部21は、パス名を探索すべきファイルの存在するファイルシステムの、ルートディレクトリの識別情報を取得する。
[ステップS102]アプリケーション部21は、パス名を探索すべきファイルを対象ファイルとする。
[ステップS103]アプリケーション部21は、対象ファイルの識別情報が、ファイルシステムのルートディレクトリの識別情報と一致するか否かを判断する。識別情報が一致した場合には、処理がステップS109に進められる。識別情報が一致しなかった場合には、処理がステップS104に進められる。
[ステップS104]アプリケーション部21は、ファイルシステム制御部120に対して親ディレクトリ情報の獲得要求を出力し、対象ファイルの親ディレクトリ情報を獲得する。ここで獲得する親ディレクトリ情報には、親ディレクトリの識別情報が含まれる。
[ステップS105]アプリケーション部21は、ファイルシステム制御部120に対して、親ディレクトリ内のファイルの一覧獲得要求を出力し、親ディレクトリ内のファイル(子ファイル)の一覧(ファイル名と識別情報とを含む)を取得する。
[ステップS106]アプリケーション部21は、対象ファイルの識別情報と一致する識別情報の子ファイルを検索する。
[ステップS107]アプリケーション部21は、対象ファイルと識別情報が一致した子ファイルのファイル名を記憶する。
[ステップS108]アプリケーション部21は、現在の親ディレクトリを対象ファイルとして、処理をステップS103に進める。
これにより、親ディレクトリがルートディレクトリになるまで、ディレクトリ構造の下位から上位に向かって、ファイル名の取得が行われていく。
[ステップS109]ステップS103において、対象ファイルの識別情報がルートディレクトリの識別情報と一致すると判断されると、アプリケーション部21は、ステップS107で記憶したファイル名を、記憶した順に連結して、パス名を生成し、処理を終了する。
このようにして、アプリケーション部21は、任意のファイルのパス名を容易に取得することができる。その結果、ファイルからファイルパス名の高速な生成が実現できる。
なお、図8の説明では、パス名探索処理の全体的な制御をアプリケーション部21が行うように説明しているが、図8においてアプリケーション部21が行っていた処理を、ファイルシステム制御部120内で行うこともできる。たとえば、アプリケーション部21からのパス名探索要求を受けたファイルシステムインタフェース処理部121が図8の説明におけるアプリケーション部21と同様の処理を行う。そして、ファイルシステムインタフェース処理部121は、ステップS109で生成されたパス名をアプリケーション部21に送信する。
[ハードリンクを含むパス名探索]
次に、ハードリンクが行われる場合について説明する。
ハードリンクが行われる場合、ディレクトリやファイルの管理情報に設定された親ディレクトリ情報が使用される。ファイル作成処理は、ハードリンクが行われない場合と同様である。
ハードリンクが行われる場合には、アプリケーション部21からの要求に従って、親ディレクトリ情報格納処理部122aにおいて複数の親ディレクトリ情報が管理される。ファイルの移動時には、同じく親ディレクトリ情報格納処理部122aが、元の親ディレクトリの情報を親ディレクトリ情報格納域から削除し、新たな親ディレクトリ情報を追加する。親ディレクトリ情報格納処理部122aは、同一の親ディレクトリから複数のリンク情報が存在する場合には、リンク数に合わせて重複した親ディレクトリ情報を保持する。ファイル移動時の元ディレクトリが重複していた場合には、親ディレクトリ情報格納処理部122aは、いずれか一つの親ディレクトリエントリを削除することで、リンク数と一致させる。リンクの削除時においては、親ディレクトリ情報格納処理部122aは、該当する親ディレクトリのエントリ情報を一つ管理域から削除する。
図9は、ハードリンクにおける親ディレクトリ情報格納領域の状態遷移を示す図である。図9には、識別情報がKのファイルの親ディレクトリ情報格納領域の状態遷移を示している。
親ディレクトリ情報格納領域51には、ハードリンクの個数情報51aと、親ディレクトリ識別情報列51bとが格納されている。ハードリンク追加前の状態では、個数情報51aにはn(nは自然数)個と設定されており、親ディレクトリ識別情報列51bには、n個の識別情報M1,M2,・・・,Mnが設定されている。
ここで、識別情報がLのディレクトリへのハードリンクが追加されると、個数情報51aには、1が加算される。また、親ディレクトリ識別情報列51bには、識別情報Lが追加される。
これにより、ハードリンク追加後の親ディレクトリ情報格納領域52の個数情報52aにはn+1が設定され、親ディレクトリ識別情報列51bには、n+1個の識別情報M1,M2,・・・,Mn,Lが設定される。
アプリケーション部21から親ディレクトリ情報取得要求が来た場合、ファイルシステム制御部120は、親ディレクトリ情報参照処理部122bにより、指定された親ディレクトリ情報として、親ディレクトリ情報の個数と個々の親ディレクトリ情報を返却する。
アプリケーションでファイルのパス名を求める場合の手順は以下のようになる。
図10は、ハードリンクを含むファイルシステムにおけるパス名探索手順を示すフローチャートの前半である。以下に、図10に示す処理をステップ番号に沿って説明する。
[ステップS111]アプリケーション部21は、ファイルシステム制御部120から、パス名を探索すべきファイルの存在するファイルシステムのルートディレクトリの識別情報を取得する。
[ステップS112]アプリケーション部21は、パス名を探索すべきファイルを対象ファイルとして設定する。
[ステップS113]アプリケーション部21は、対象ファイルの識別情報が、ファイルシステムのルートディレクトリの識別情報と一致するか否かを判断する。識別情報が一致した場合には、処理が終了する。識別情報が一致しなかった場合には、処理がステップS114に進められる。
[ステップS114]アプリケーション部21は、ファイルシステム制御部120に対して親ディレクトリ情報の獲得要求を出力し、対象ファイルの親ディレクトリ情報を獲得する。ここで獲得する親ディレクトリ情報には、親ディレクトリの識別情報が含まれる。その後、端子Aを介して、図11に示すステップS115に処理が進められる。
図11は、ハードリンクを含むファイルシステムにおけるパス名探索手順を示すフローチャートの後半である。以下に、図11に示す処理をステップ番号に沿って説明する。
[ステップS115]アプリケーション部21は、現在の親ディレクトリの中の未処理の親ディレクトリを選択し、ファイルシステム制御部120に対して選択した親ディレクトリ内のファイルの一覧獲得要求を出力し、親ディレクトリ内のファイル(子ファイル)の一覧(ファイル名と識別情報とを含む)を取得する。
[ステップS116]アプリケーション部21は、対象ファイルの識別情報と一致する識別情報の子ファイルを検索する。
[ステップS117]アプリケーション部21は、対象ファイルと識別情報が一致した子ファイルのファイル名を記憶する。
[ステップS118]アプリケーション部21は、現在の親ディレクトリの識別情報が、ファイルシステムのルートディレクトリの識別情報と一致するか否かを判断する。識別情報が一致した場合には、処理がステップS121に進められる。識別情報が一致しなかった場合には、処理がステップS119に進められる。
[ステップS119]アプリケーション部21は、現在の親ディレクトリを対象ファイルとする。
[ステップS120]アプリケーション部21は、ファイルシステム制御部120に対して親ディレクトリ情報の獲得要求を出力し、ステップS119で対象ファイルとされたディレクトリの親ディレクトリ情報を獲得する。その後、処理がステップS115に進められる。
[ステップS121]アプリケーション部21は、ステップS117で記憶したファイル名を、記憶した順に連結して、パス名を生成する。
[ステップS122]アプリケーション部21は、生成したパス名を記憶する。このとき、ステップS117で記憶したファイル名を消去する。
[ステップS123]アプリケーション部21は、パス名を探索すべきファイルの全ての親ディレクトリ情報に対して、ステップS115からステップS122の処理を実行したか否かを判断する。親ディレクトリ情報に対して処理を実行した場合には、処理がステップS124に進められる。未処理の親ディレクトリがある場合には、処理がステップS115に進められる。
[ステップS124]アプリケーション部21は、ステップS122で記憶したパス名のリストを生成する。
これにより、ハードリンクを有する場合には、パス名を探索するファイルの親ディレクトリの数に応じたパス名のリストを生成することができる。その結果、ファイルに対応する全てのパス名の高速な生成が実現できる。
なお、図10と図11の説明では、パス名探索処理の全体的な制御をアプリケーション部21が行うように説明しているが、図10と図11とにおいてアプリケーション部21が行っていた処理を、ファイルシステム制御部120内で行うこともできる。たとえば、アプリケーション部21からのパス名探索要求を受けたファイルシステムインタフェース処理部121が図10と図11とにおけるアプリケーション部21と同様の処理を行う。そして、ファイルシステムインタフェース処理部121は、ステップS124で生成されたパス名をアプリケーション部21に送信する。
[親ディレクトリの優先順の設定]
ファイルシステムがハードリンク機能を有する場合、任意のファイルのリンク元の親ディレクトリの優先順を設定することができる。この場合、ディレクトリの管理情報に含まれる親ディレクトリ情報、ファイルの管理情報に含まれる親ディレクトリ情報が利用される。
親ディレクトリの優先順を設定する場合、まず、アプリケーション部21がファイルシステム制御部120に対して親ディレクトリ情報の順序設定要求を出力する。
ファイルシステム制御部120は、アプリケーション部21から親ディレクトリ情報の順序設定要求が来た場合、親ディレクトリ情報格納処理部122aに、親ディレクトリの順序設定処理を依頼する。親ディレクトリ情報格納処理部122aでは、依頼内容において親ディレクトリ情報の不足のないこと、設定を変更する権利の妥当性を確認した上で、親ディレクトリの順序を入れ替える。
アプリケーション部21から親ディレクトリ情報取得要求が来た場合、ファイルシステム制御部120は、親ディレクトリ情報参照処理部122bにより、指定された親ディレクトリの情報として、個数と個々の親ディレクトリ情報を、優先順に沿って、優先順位の高い親ディレクトリ情報から順に出力する。
たとえば、図9に示すように、親ディレクトリ情報格納領域51には、ハードリンクの個数情報51aと、親ディレクトリ識別情報列51bとが格納されている。このとき、親ディレクトリ識別情報列51bの図中左側ほど優先順位を高く、右側ほど優先順位を低く定義する。この場合、親ディレクトリ情報格納処理部122aは、アプリケーション部21からの指示に従い、優先順位の高い親ディレクトリの識別情報から順に、親ディレクトリ識別情報列51bの左から並べ直す。また、親ディレクトリ情報参照処理部122bは、親ディレクトリ識別情報を出力する際には、親ディレクトリ識別情報列51bの左から順に出力する。
これにより、ハードリンク情報に順序性を持たせることが可能になり、後述するファイルの属性制御時にハードリンクファイルの属性優先度制御を実現できる。たとえば、ハードリンクされた2つのディレクトリに相反する属性が設定されていた場合、優先順位の高い親ディレクトリの属性のみを反映させることができる。すなわち、優先順位の高い親ディレクトリに「配下のファイルを圧縮する」という属性が設定され、優先順位の低い親ディレクトリに「配下のファイルを圧縮しない」という属性が設定されていた場合、これらの2つのディレクトリからハードリンクされたファイルは、圧縮される。
このように、複数の親ディレクトリの間に優先順を設定したことにより、管理情報と実際のファイルとの整合性を保つことができる。すなわち、複数の親ディレクトリに相反する属性が設定されていた場合でも、常に優先順位の高い親ディレクトリの属性が反映される。したがって、ファイルの属性が不確定になることがなく、運用時の監視コストが軽減できる。
[ディレクトリへの属性設定]
次に、ディレクトリへの属性設定について説明する。本実施の形態では、あるディレクトリに設定した属性を、その配下(子孫)のディレクトリに伝搬させることができる。ディレクトリの属性の伝搬には、ディレクトリやファイルに設定されている親ディレクトリ情報と、ディレクトリに設定されている属性情報が用いられる。
アプリケーション部21からファイルシステム制御部120に対して、ディレクトリに対する属性設定要求が来た場合、ファイルシステム制御部120は、属性設定管理部123内のディレクトリ属性設定処理部123aに処理を依頼する。ディレクトリ属性設定処理部123aは、設定の内容、設定する権利の妥当性を確認した上で、ディレクトリに対して属性の設定を行う。
ファイルに対して操作を行う場合、属性設定管理部123は、ディレクトリとファイルとの親ディレクトリ情報を元に、ファイルシステムのルートディレクトリに辿りつくまでの親を順に探索し、先祖のディレクトリの中で属性の設定されているディレクトリを探索する。ルートディレクトリまでの全てのディレクトリに属性の設定がなく、途中にハードリンクが存在した場合、属性設定管理部123は、2番目以降の親ディレクトリについて、同様に属性情報を探索する。属性設定管理部123は、属性情報がみつかった場合には探索を中断し、その都度、見つかった属性情報に従って処理を実行する。これにより、上位のディレクトリに設定された属性を、ファイルあるいはディレクトリに反映させることができる。
属性反映処理手順は以下のようになる。
図12は、属性反映処理の手順を示すフローチャートの前半である。以下に、図12に示す処理をステップ番号に沿って説明する。この処理は、ファイル操作部124から属性設定管理部123に対して、属性値取得要求が出された場合に実行される処理である。なお、ファイル操作部124は、アプリケーション部21などからファイル操作の指示(ファイル作成やファイル移動などの指示)が出された場合に、操作対象のファイルに対する処理内容を決定するために、属性設定管理部123に対して、属性値取得要求を出す。
[ステップS131]ファイル操作部124から属性値取得要求を受け取った属性設定管理部123では、上位ディレクトリ探索処理部123bが、ファイルシステム制御部120から、属性を反映すべきファイルの存在するファイルシステムのルートディレクトリの識別情報を取得する。
[ステップS132]ディレクトリ属性値返却部123cは、属性を反映すべきファイルを対象ファイルとして設定する。
[ステップS133]ディレクトリ属性値返却部123cは、対象ファイルの識別情報が、ファイルシステムのルートディレクトリの識別情報と一致するか否かを判断する。識別情報が一致した場合には、端子Bを介して、処理が図13に示すステップS141に進められる。識別情報が一致しなかった場合には、処理がステップS134に進められる。
[ステップS134]上位ディレクトリ探索処理部123bは、ファイルシステム制御部120に対して親ディレクトリ情報の獲得要求を出力し、対象ファイルの親ディレクトリ情報を獲得する。ここで獲得する親ディレクトリ情報には、親ディレクトリの識別情報が含まれる。その後、端子Cを介して図13に示すステップS135に処理が進められる。
図13は、属性反映処理の手順を示すフローチャートの後半である。以下に、図13に示す処理をステップ番号に沿って説明する。
[ステップS135]ディレクトリ属性値返却部123cは、現在の親ディレクトリの中から未処理の親ディレクトリの1つを選択し、その親ディレクトリに属性情報が設定されているか否かを判断する。属性情報が設定されている場合には、処理がステップS136に進められる。属性情報が設定されていない場合には、処理がステップS137に進められる。
[ステップS136]ディレクトリ属性値返却部123cは、現在の親ディレクトリの属性情報を取得する。その後、処理がステップS143に進められる。
[ステップS137]ディレクトリ属性値返却部123cは、現在の親ディレクトリの識別情報がファイルシステムのルートディレクトリの識別情報と一致するか否かを判断する。識別情報が一致した場合には、処理がステップS140に進められ、識別情報が一致しなかった場合には、処理がステップS138に進められる。
[ステップS138]ディレクトリ属性値返却部123cは、現在の親ディレクトリを対象ファイルとする。
[ステップS139]ディレクトリ属性値返却部123cは、ファイルシステム制御部120に対して親ディレクトリ情報の獲得要求を出力し、ステップS138で対象ファイルとされたディレクトリの親ディレクトリ情報を獲得する。その後、処理がステップS135に進められる。
[ステップS140]ディレクトリ属性値返却部123cは、属性を探索すべきファイルの全ての親ディレクトリ情報に対して、ステップS135〜ステップS139の処理を行ったか否かを判断する。全ての親ディレクトリに対して処理が完了していれば、処理がステップS141に進められる。未処理の親ディレクトリがあれば、処理がステップS135に進められる。
[ステップS141]ディレクトリ属性値返却部123cは、ルートディレクトリに属性情報が設定されているか否かを判断する。属性情報が設定されている場合には、処理がステップS142に進められる。属性情報が設定されていない場合には、処理がステップS143に進められる。
[ステップS142]ディレクトリ属性値返却部123cは、ルートディレクトリの属性情報を取得する。
[ステップS143]ディレクトリ属性値返却部123cは、ステップS136またはステップS142で取得した属性情報を、ファイル操作部124またはアプリケーション部21に対して出力する。すると、ファイル操作部124またはアプリケーション部21において、属性を反映すべきファイルに対して、属性情報に従った処理が実行される。
このようにして、ディレクトリ毎に設定された属性に従った処理を、そのディレクトリの配下のディレクトリに対して実行させることができる。たとえば、ディレクトリに対して、ファイルを圧縮して格納すべき旨の属性が設定されていれば、そのディレクトリの配下にファイルが作成される場合には、そのファイルには圧縮処理が施される。
その結果、従来は、即時反映が困難だったディレクトリ配下への一括の属性設定を、リアルタイムに設定可能とし、かつ、ファイルの移動時にも移動先に設定された属性が即時に設定できる。
また、以上の処理を複数システムからアクセス可能なNASファイラで実現したことにより、複数のクライアントに共通の属性を設定することが容易に可能となる。また、共通のファイルシステムの一部に特定ノードにのみ作用する属性を設定することも可能である。
[使用量管理]
次に、ディレクトリ毎の属性情報を用いたファイルシステム制御の例として、ディレクトリ毎の使用量管理を行う場合について説明する。
まず、ディレクトリ毎の使用量管理処理の基本概念について説明する。
従来のファイルシステムの中には、ファイルシステム中のファイル数やファイルデータの使用量とその制限値をユーザ毎およびグループ毎に保持することができるものがある。このようなファイルシステムでは、ファイル数やファイルデータの使用量とその制限値を参照し、ユーザ毎およびグループ毎に使用量を制限することができる。
しかし、従来は、特定のディレクトリ配下のファイル数およびファイルデータの使用量について制限をかける機能を持つファイルシステムは存在しなかった。
そこで、以下の例では、前述のディレクトリの属性情報の中に、ファイル数の制限値とデータ使用量の制限値とを設けて、特定のディレクトリ配下のファイル数およびファイルデータの使用量について制限をかけるようにする。
図14は、使用制限を行うときのディレクトリの属性情報のデータ構造の一例を示す図である。図14の例では、ディレクトリの属性情報60内に、制限有無情報61、直近の制限ディレクトリ情報62、および制限値リスト63を含んでいる。
制限有無情報61は、一般の制限、ユーザ毎の制限、グループ毎の制限のそれぞれについて、制限値が設定されているか否かを示すフラグである。
直近の制限ディレクトリ情報62は、制限がかけられている最も近い先祖(上位)のディレクトリの情報(たとえば、inode番号)である。
制限値リスト63は、現在の使用量と制限値とが設定された情報である。制限値リスト63には、一般制限値情報63a、ユーザ毎に設けられたユーザ制限値情報63b,63c、およびグループ毎に設けられたグループ制限値情報63d,63eが含まれている。
一般制限値情報63aには、ユーザやグループに拘わらない制限値と、現在の使用量とを示す情報が含まれている。図14の例では、一般制限値情報63aに、容量制限値(hard limit of blocks)63aa、使用容量(current blocks)63ab、ファイル数制限値(hard limit of files)63ac、およびファイル数(current files)63adが含まれている。
容量制限値63aaは、使用可能記憶容量を示している。たとえば、ハードディスクを複数のブロックに分けている場合に、使用可能なブロック数が設定される。
使用容量63abは、現在使用されている記憶容量である。これは、属性情報60が設定されているディレクトリの配下(サブディレクトリ以下)の全てのファイルの容量の総計である。
ファイル数制限値63acは、使用可能なファイル数の上限値である。
ファイル数63adは、現在存在するファイル数である。これは、属性情報60が設定されているディレクトリの配下(サブディレクトリ以下)の全てのファイルの総数である。
ユーザ制限値情報63b,63cも、一般制限値情報63aと同様の情報を含んでいる。ただし、使用容量とファイル数に関しては、対象となるユーザが所有者(オーナ)となっているファイルのみ集計対象となる。なお、ユーザ制限値情報63b,63cは、ユーザ毎に使用量の制限がある場合にのみ、属性情報60に含まれていればよい。
グループ制限値情報63d,63eも、一般制限値情報63aと同様の情報を含んでいる。ただし、使用容量とファイル数に関しては、対象となるグループに属するユーザが所有者(オーナ)となっているファイルのみ集計対象となる。なお、グループ制限値情報63d,63eは、グループ毎に使用量の制限がある場合にのみ、属性情報60に含まれていればよい。
図15は、使用制限を行うときのファイルの管理情報のデータ構造例を示す図である。図15(A)は、ハードリンクがない場合のファイルの管理情報71を示している。図15(B)は、ハードリンクがある場合のファイルの管理情報72を示している。
ハードリンクがない場合には、ファイルの管理情報71に、制限のかかっている一番近い祖先のディレクトリを示す直近の制限ディレクトリ情報71aが含まれる。
また、ハードリンクがある場合には、ファイルの管理情報72に、制限のかかっている一番近い祖先のディレクトリの集合を示す直近の制限ディレクトリリスト72aが含まれる。
すなわち、全てのファイルとディレクトリとには、そのファイルまたはディレクトリより上の階層にあり、かつ使用量の制限が設定された一番近い階層のディレクトリの情報が設定される。そのようなディレクトリがない場合は、ファイルとディレクトリとに対して、使用量の制限が設定されたディレクトリがないという情報を有する。このディレクトリを順にたどっていくことによりそのディレクトリより上の階層にありかつ使用量の制限が設定されたすべてのディレクトリの一覧を得ることができる。
また、ファイルが複数のディレクトリに所属するハードリンクである場合には、その全ての系列の先祖ディレクトリに関して、直近の制限ディレクトリ情報を持つこととなる。
なお、図14に示した属性情報60は、ファイル作成/削除およびブロック割付け/解放などのファイルシステム更新時に、現在の使用量の値が更新される。また、ファイル作成前またはブロック割付け前に制限値が参照され、ファイルの作成などにより制限値を超える場合は、その処理が制限される。
また、ユーザ毎に使用量の制限がある場合、ファイル操作が行われたときに、ファイル操作を指示したユーザの現在の使用量が更新される。また、ファイル作成前またはブロック割付け前にユーザ毎の制限値が参照され、ファイルの作成などにより制限値を超える場合は、その処理が制限される。
同様に、グループ毎に使用量の制限がある場合、ファイル操作が行われたときに、ファイル操作を指示したユーザが属するグループの現在の使用量が更新される。また、ファイル作成前またはブロック割付け前にグループ毎の制限値を参照され、ファイルの作成などのより制限値を超える場合は、その処理が制限される。
使用量の更新、制限値の参照を行うべきディレクトリは、直近の制限ディレクトリ情報を参照して、制限の設けられた上位のディレクトリをリストアップすることができる。
図16は、使用量更新、制限値参照ディレクトリ決定の処理手順を示すフローチャートである。以下に、図16に示す処理をステップ番号に沿って説明する。
[ステップS201]ファイルシステム制御部120は、処理対象の起点となるファイルまたはディレクトリを決定する。ファイル作成/削除時には、対象となるファイルの親ディレクトリが起点となる。ブロック割付け/解放時には、対象となるファイル自身が起点となる。起点となるファイルまたはディレクトリが、処理対象とされる。なお、処理対象の起点がディレクトリの場合には、そのディレクトリの属性情報が参照される。
[ステップS202]ファイルシステム制御部120は、処理対象とされたファイルまたはディレクトリの直近の制限ディレクトリ情報を参照し、上位のディレクトリの中で制限のかけられているディレクトリが存在するか否かを判断する。制限のかけられているディレクトリが存在する場合には、処理がステップS203に進められ、存在しない場合には処理が終了する。
[ステップS203]ファイルシステム制御部120は、ステップS202で参照した直近の制限ディレクトリ情報で示されているディレクトリを処理対象とする。
[ステップS204]ファイルシステム制御部120は、処理対象のディレクトリの属性情報を参照する。その後、処理がステップS202に進められる。
このようにして、起点となるファイルまたはディレクトリから順に直近の制限ディレクトリ(制限のかかっている一番近いディレクトリ)で指し示されたディレクトリを辿りながら、祖先のディレクトリの中で使用制限が課されている全てのディレクトリの属性情報を参照することができる。
なお、ファイルが複数のディレクトリに所属するハードリンクである場合には、直近の制限ディレクトリが複数存在する。この場合には、各ハードリンク毎に、参照ディレクトリの決定処理が行われることになる。
次に、使用量の制限を設けた処理の具体的な適用例について説明する。
図17は、使用制限を設ける場合の機能構成を示す機能ブロック図である。なお、図中の矢印はデータの流れを表すものではなく、制御の流れ(制御依存)を示す。
使用制限に関係する処理として、アプリケーション部21からファイルシステム制御部120に、ファイル作成、ファイル削除、ファイル移動、ブロック割付け、ブロック解放、使用量制限値設定/解除などの要求が出される。これらの要求は、ファイルシステム制御部120のファイルシステムインタフェース処理部121で受け取られ、ファイル操作部124や使用量制御部150に送られる。
使用量制御部150は、ディレクトリ毎に使用量の制限値や、ファイル数の制限値に基づいて、ファイルシステムのファイル操作を管理する。使用量制御部150は、使用量制限値判定処理部151、使用量現在値更新処理部152、および使用量制限値設定処理部153を有している。
使用量制限値判定処理部151は、アプリケーション部21からファイル作成などのファイル操作要求が出されると、使用予定量を計算し、使用量制限値と使用予定量とを比較する。使用量制限値を超えてなければ、使用量制限値判定処理部151は、ファイル操作部124に対してファイル操作を許可する。使用量制限値を超えてしまうようであれば、使用量制限値判定処理部151は、ファイル操作部124に対して、ファイル操作を禁止する。
使用量現在値更新処理部152は、アプリケーション部21からファイル作成などのファイル操作要求が出され、ファイル操作部124によりファイル操作が行われると、そのファイルの上位の各ディレクトリの使用量の現在値を更新する。
使用量制限値設定処理部153は、アプリケーション部21から使用量制限値設定や解除の要求が出されると、その要求に従って、使用量の制限値を設定または解除する。
なお、使用量制御部150は、図4に示した属性設定管理部123の一機能である。すなわち、属性の1つとして、使用量の制限(使用可能な記憶容量やファイル数)を設定可能とした場合に、属性設定管理部123が有すべき機能である。なお、使用量制御部150の機能の一部(たとえば、直近の制限ディレクトリの探索)を、ファイルシステム情報管理部122に含ませることもできる。
図17に示したような構成によれば、たとえば、ファイル作成またはブロック割付け等の使用量が増えるファイルシステム更新要求があった場合、ファイルシステムインタフェース処理部121は使用量制限値判定処理部151に制御を渡す(ステップS211)。使用量制限値判定処理部151は、使用予定量と制限値とを比較し、使用量の制限値を超えるかどうかを判定する。ここで、制限値を超えないと判断した場合は、使用量制限値判定処理部151は、制御をファイルシステムインタフェース処理部121に戻す(ステップS212)。
すると、ファイルシステムインタフェース処理部121から、ファイルの更新要求がファイル操作部124に出される(ステップS213)。ファイル操作部124は、ディスク管理部125を経由してファイルシステム更新を行う。このとき、同時に、ファイルシステムインタフェース処理部121から、使用量現在値更新要求が、使用量現在値更新処理部152に出される(ステップS214)。使用量現在値更新処理部152は、ファイル操作部124、ディスク管理部125を経由して現在値の更新を行う。
また、あるディレクトリに対して制限値を設定/解除する場合、ファイルシステムインタフェース処理部121は制御を使用量制限値設定処理部153に渡す(ステップS215)。すると、使用量制限値設定処理部153は、制限値の設定/解除を行う。
次に、使用量制限処理を行うためのデータ構造について説明する。
図18は、使用量制限処理を行うためのディレクトリのデータ構造の一例を示す図である。なお、図18には、ディレクトリの管理情報のうち、使用量制限処理に関係するデータのみを示している。
ディレクトリの管理情報210には、一般制限フラグ211、ユーザ制限フラグ212、グループ制限フラグ213、制限ディレクトリinode番号214、および制限値リストinode番号215が含まれている。
一般制限フラグ211は、ディレクトリ配下のファイルについてファイル数およびファイルデータについての使用量の制限の有無を示すフラグである。一般制限フラグ211には、1ビットのフィールドがあればよい。ディレクトリ配下のファイルについて制限がある場合には、一般制限フラグ211がたてられる(1が設定される)。
ユーザ制限フラグ212は、ディレクトリ配下のファイルについてファイル数およびファイルデータについてのユーザ毎の使用量の制限の有無を示すフラグである。ユーザ制限フラグ212には、1ビットのフィールドがあればよい。ディレクトリ配下のファイルについてユーザ毎の制限がある場合には、ユーザ制限フラグ212がたてられる(1が設定される)。
グループ制限フラグ213は、ディレクトリ配下のファイルについてファイル数およびファイルデータについてのグループ毎の使用量の制限の有無を示すフラグである。グループ制限フラグ213には、1ビットのフィールドがあればよい。ディレクトリ配下のファイルについてグループ毎の制限がある場合には、グループ制限フラグ213がたてられる(1が設定される)。
制限ディレクトリinode番号214は、ディレクトリの管理情報210に対応するディレクトリより上の階層にあるディレクトリで、かつ制限がかかっていて、かつこのディレクトリに一番近い階層のディレクトリのinode番号である。ディレクトリの管理情報210に対応するディレクトリより上の全てのディレクトリに制限がかけられてない場合は、制限がかかっている先祖ディレクトリはないという意味で、制限ディレクトリinode番号214には0が入る。
制限値リストinode番号215は、使用量と制限値のリストを格納した内部ファイル220のinode番号である。一般制限フラグ211、ユーザ制限フラグ212、およびグループ制限フラグ213のいずれかのビットに1が設定され、ディレクトリの管理情報210に対応するディレクトリ配下のファイルに制限がかけられている場合、制限値リストinode番号215にその使用量と制限値のリストを格納した内部ファイル220のinode番号が入る。一般制限フラグ211、ユーザ制限フラグ212、およびグループ制限フラグ213のすべてにビットが設定されておらず、制限がかけられていない場合、設定されていないという意味で、制限値リストinode番号215に0が入る。
なお、この内部ファイル220は一般のディレクトリや通常ファイルと異なりどのディレクトリにもエントリされておらず、UNIXにおけるls等の一般コマンドでは参照できない。
内部ファイル220には、一般制限情報221、ユーザ制限情報222、およびグループ制限情報223が含まれている。
一般制限情報221は、ディレクトリの管理情報210に対応するディレクトリ配下のファイル数とファイルデータ量に関する現在の値と、制限値である。一般制限情報221には、ブロック数の制限値221a、現在の使用ブロック数221b、ファイル数の制限値221c、および現在のファイル数221dが設定されている。ブロック数の制限値221aは、ディレクトリの管理情報210に対応するディレクトリの配下のファイルで使用可能なブロック数である。現在の使用ブロック数221bは、ディレクトリの管理情報210に対応するディレクトリの配下のファイルで現在使用しているブロック数である。ファイル数の制限値221cは、ディレクトリの管理情報210に対応するディレクトリの配下のファイル数の制限値である。現在のファイル数221dは、ディレクトリの管理情報210に対応するディレクトリの配下の現在のファイル数である。
このように、ファイル数とファイルデータの使用量と制限値に関する情報は、特定の情報を持つ構造体により管理される。以下、ブロック数の制限値、現在の使用ブロック数、ファイル数の制限値、および現在のファイル数で構成されるデータ構造をdqblk構造体と呼ぶことにする。
ユーザ制限情報222は、ユーザ毎に設けられている。ユーザ制限情報222の内容は、一般制限情報221と同様のdqblk構造体である。ただし、ユーザ制限情報222における現在のブロック数や現在のファイル数は、ユーザ制限情報222に対応するユーザの所有するファイルのみが集計される。
グループ制限情報223は、グループ毎に設けられている。グループ制限情報223の内容は、一般制限情報221と同様のdqblk構造体である。ただし、グループ制限情報223の現在のブロック数や現在のファイル数は、グループ制限情報223に対応するグループに属するユーザの所有するファイルのみが集計される。
一般制限情報221は、内部ファイル220の先頭のオフセット位置に記録される。ユーザ制限情報222は、内部ファイル220の (uid + 1) × sizeof(dqblk構造体) のオフセット位置に記録される。グループ制限情報223は、内部ファイル220の (gid + (uidの最大値 + 1) + 1) × sizeof(dqblk構造体) のオフセット位置に記録される。なお、uidとは、ユーザの識別子であり、各ユーザに対して1から昇順に自然数が割り当てられる。gidとは、グループの識別子であり、各グループに対して1から昇順に自然数が割り当てられる。sizeof(dqblk構造体)とは、dqblk構造体のデータ容量である。
従ってuidやgidから即座にその情報が格納されている位置を決定できる。
なお、ユーザ毎、グループ毎の使用量を設定する場合、使用量の制限値が設定されているユーザやグループの使用量の値のみを更新するようにすることができる。また、内部ファイル220に対して、使用量および制限値が設定されているユーザ、グループのdqblk構造体のみを割付けるようにしてもよい。
図19は、使用量制限処理を行うためのファイルのデータ構造の一例を示す図である。なお、図19には、ファイルの管理情報のうち、使用量制限処理に関係するデータのみを示している。ファイルの管理情報310には、制限ディレクトリinode番号311と制限ディレクトリinode番号リストへのポインタ312が含まれている。
制限ディレクトリinode番号311は、制限のかかっている一番近い上位のディレクトリのinode番号である。制限ディレクトリinode番号311には、ファイルの管理情報310に対応するファイルより上の階層にあるディレクトリで、かつ制限がかかっていて、かつこのファイルに一番近い階層のディレクトリのinode番号が入る。ファイルの管理情報310に対応するファイルより上の全てのディレクトリに制限がかけられていない場合は、制限がかかっている先祖ディレクトリはないという意味で0が入る。
制限ディレクトリinode番号リストへのポインタ312は、制限のかかっている一番近い上位のディレクトリのinode番号のリストが格納されたファイル(制限ディレクトリinode番号リスト320)へのポインタである。制限ディレクトリinode番号リストへのポインタ312は、ファイルの管理情報310に対応するファイルが複数のディレクトリに所属するハードリンクの場合にのみ設定される。
制限ディレクトリinode番号リスト320には、制限のかかっている一番近い上位のディレクトリのinode番号の配列またはリストが格納される。したがって、制限ディレクトリinode番号リスト320には、各ハードリンクに応じた系列の先祖ディレクトリのinode番号が、ハードリンクの数だけ設定される。
次に、ディレクトリやファイルの制限ディレクトリinode番号の設定例について説明する。
図20は、ディレクトリツリーの一例を示す図である。図20には、複数のディレクトリ411〜415とファイル421,422とからなる木構造が示されている。木構造上、図中左側が上位である。使用量の制限が設定されているディレクトリ411,413,414,415は、二重線の四角で表されている。使用量の制限が設定されていないディレクトリとファイルは、一重線の四角で表されている。四角を結ぶ線はそれらのファイルまたはディレクトリ間の親子関係を表し、左側が親、右側が子という関係を表している。
ディレクトリ411〜415やファイル421,422の四角内には、そのディレクトリまたはファイルのinode番号が示されている。ディレクトリ411〜415やファイル421,422の四角の下の数字は、制限ディレクトリinode番号(制限のかかっている一番近い上位のディレクトリのinode番号)を示している。
なお、このようなディレクトリツリーの定義は、後述する図26〜図29に関しても同様である。
図20の例では、ディレクトリ411がルートディレクトリである。ディレクトリ411には使用量の制限が設定されている。ディレクトリ411のinode番号は2であり、制限ディレクトリinode番号は0である。制限ディレクトリinode番号に0が設定されていることは、これより上位の階層のディレクトリには制限値が設定されていないことを表している。
ディレクトリ411の直下に、2つのディレクトリ412,413が設けられている。ディレクトリ412には、使用量の制限が設定されていない。ディレクトリ412のinode番号は3であり、制限ディレクトリinode番号は2である。ディレクトリ413には、使用量の制限が設定されている。ディレクトリ413のinode番号は4であり、制限ディレクトリinode番号は2である。
ディレクトリ412の直下に、2つのディレクトリ414,415が設けられている。ディレクトリ414には、使用量の制限が設定されている。ディレクトリ414のinode番号は5であり、制限ディレクトリinode番号は2である。ディレクトリ415には、使用量の制限が設定されている。ディレクトリ415のinode番号は6であり、制限ディレクトリinode番号は2である。
ディレクトリ414の直下には、ファイル421が設けられている。ファイル421のinode番号は7であり、制限ディレクトリinode番号は5である。
ディレクトリ415の直下には、ファイル422が設けられている。ファイル422は、ディレクトリ413に対するハードリンクが設定されている。したがって、ファイル422は、ディレクトリ413の直下のファイルでもある。ファイル422のinode番号は8であり、制限ディレクトリinode番号は6,4である。
このような構造に基づいて、各ファイル421,422の先祖ディレクトリの中で、使用量の制限が設定されているディレクトリ一覧を検出することができる。
たとえば、ファイル421の制限ディレクトリinode番号を参照し、ディレクトリ414のinode番号5を得る。すると、ディレクトリ414の制限ディレクトリinode番号を参照し、ディレクトリ411のinode番号2を得る。次に、ディレクトリ411の制限ディレクトリinode番号を参照し、inode番号0を得る。inode番号0は、上位の階層のディレクトリに制限値が設定されていないことを示すため、ファイル421の操作に影響を及ぼすディレクトリのinode番号の一覧は、{5,2}となる。
ファイル422は、2つのディレクトリ415,413から参照されているリンク数2のファイルであるため、制限ディレクトリinode番号6,4のそれぞれの系列において、制限値の設定された先祖ディレクトリの一覧はこの両方のリストを辿る。すると、ファイル422の操作に影響を及ぼすディレクトリのinode番号の一覧として{6, 2}, {4, 2}が得られる。
なお、上記の説明では、使用量が設定された上位のディレクトリの探索において、制限ディレクトリinode番号が0のディレクトリに達したことで探索を終了しているが、ルートディレクトリのinode番号2に達したことをもって、探索を終了させてもよい。
次に、現在の使用量更新処理について説明する。
ファイル作成/削除またはブロック割付け/解放等のファイルシステム更新により使用量が変更された場合、必要に応じて使用量を管理しているディレクトリの情報を更新する必要がある。
図21は、使用量更新処理の手順を示すフローチャートの前半である。以下、図21に示す処理をステップ番号に沿って説明する。以下の処理は、ファイルの作成/削除、ブロックの割付け/解放の操作が行われた際に、実行される処理である。
[ステップS211]使用量現在値更新処理部152は、ファイル操作がファイル作成/削除か否かを判断する。ファイル作成/削除の場合には処理がステップS212に進められる。ファイル作成/削除ではない場合は、ブロックの割付け/解放の操作が行われたものと判断し、処理がステップS213に進められる。
[ステップS212]ファイル作成/削除時は、使用量現在値更新処理部152は、current_inoにその親ディレクトリのinode番号を設定する。その後、処理がステップS216に進められる。
[ステップS213]ブロック割付け/解放時は、使用量現在値更新処理部152は、current_inoにそのファイル自身のinode番号を設定する。
[ステップS214]使用量現在値更新処理部152は、current_inoのinode番号に該当するディレクトリの制限ディレクトリinode番号を参照し、そのinode番号が0か否かを判断する。制限ディレクトリinode番号が0であれば、処理を終了する。制限ディレクトリinode番号が0でなければ処理がステップS215に進められる。
[ステップS215]使用量現在値更新処理部152は、ステップS214で参照した制限ディレクトリinode番号をcurrent_inoに設定する。
[ステップS216]使用量現在値更新処理部152は、current_inoのinode番号に対応するディレクトリに一般制限フラグが設定されているか否かを判断する。一般制限フラグが設定されている場合には、処理がステップS217に進められる。一般制限フラグが設定されていない場合には、端子Dを介して処理が図22のステップS220に進められる。
[ステップS217]使用量現在値更新処理部152は、実行されたファイル操作がファイル作成/削除処理か否かを判断する。ファイル作成/削除である場合には、処理がステップS218に進められる。ファイル作成/削除でない場合には、処理がステップS219に進められる。
[ステップS218]使用量現在値更新処理部152は、current_inoに設定されているinode番号に該当するディレクトリの一般制限情報における現在のファイル数を更新する。ファイル数の更新とは、ファイルの作成であれば現在のファイル数に1を加算する処理であり、ファイルの削除であれば現在のファイル数から1を減算する処理である。その後、端子Dを介して処理が図22のステップS220に進められる。
[ステップS219]使用量現在値更新処理部152は、current_inoに設定されているinode番号に該当するディレクトリの一般制限情報における現在の使用ブロック数を更新する。ブロック数の更新とは、ブロックの割り当てであれば現在の現在の使用ブロック数に、割り当てたブロック数を加算する処理であり、ブロックの解放であれば、現在のブロック数から、解放したブロック数を減算する処理である。その後、端子Dを介して処理が図22のステップS220に進められる。
図22は、使用量制限処理の手順を示すフローチャートの後半である。以下、図22に示す処理をステップ番号に沿って説明する。
[ステップS220]使用量現在値更新処理部152は、current_inoのinode番号に対応するディレクトリにユーザ制限フラグが設定されているか否かを判断する。ユーザ制限フラグが設定されている場合には、処理がステップS221に進められる。ユーザ制限フラグが設定されていない場合には、処理がステップS224に進められる。
[ステップS221]使用量現在値更新処理部152は、実行されたファイル操作がファイル作成/削除処理か否かを判断する。ファイル作成/削除である場合には、処理がステップS222に進められる。ファイル作成/削除でない場合には、処理がステップS223に進められる。
[ステップS222]使用量現在値更新処理部152は、current_inoに設定されているinode番号に該当するディレクトリのユーザ制限情報(ファイル操作を指示したユーザに対応するもの)における現在のファイル数を更新する。その後、処理がステップS224に進められる。
[ステップS223]使用量現在値更新処理部152は、current_inoに設定されているinode番号に該当するディレクトリのユーザ制限情報(ファイル操作を指示したユーザに対応するもの)における現在の使用ブロック数を更新する。その後、処理がステップS224に進められる。
[ステップS224]使用量現在値更新処理部152は、current_inoのinode番号に対応するディレクトリにグループ制限フラグが設定されているか否かを判断する。グループ制限フラグが設定されている場合には、処理がステップS225に進められる。グループ制限フラグが設定されていない場合には、端子Eを介して処理が図21に示すステップS214に進められる。
[ステップS225]使用量現在値更新処理部152は、実行されたファイル操作がファイル作成/削除処理か否かを判断する。ファイル作成/削除である場合には、処理がステップS226に進められる。ファイル作成/削除でない場合には、処理がステップS227に進められる。
[ステップS226]使用量現在値更新処理部152は、current_inoに設定されているinode番号に該当するディレクトリのグループ制限情報(ファイル操作を指示したユーザが属するグループに対応するもの)における現在のファイル数を更新する。その後、端子Eを介して処理が図21に示すステップS214に進められる。
[ステップS227]使用量現在値更新処理部152は、current_inoに設定されているinode番号に該当するディレクトリのグループ制限情報(ファイル操作を指示したユーザが属するグループに対応するもの)における現在の使用ブロック数を更新する。その後、端子Eを介して処理が図21に示すステップS214に進められる。
以上のようにして、ファイル操作が行われる度に、使用量の更新が行われる。なお、対象ファイルがハードリンクであり、制限ディレクトリinode番号が複数ある場合、そのすべてについて図21、図22の処理が行われる。
次に、使用量制限処理について説明する。
ファイル作成またはブロック割付け等のファイルシステム更新により使用量が増えるような変更がある場合、制限がかかっているディレクトリの管理情報が検査される。そして、制限値を超える場合、ファイルシステムのオペレーションをエラー復帰させ、ファイル作成などを制限する。
図23は、使用量制限処理の手順を示すフローチャートの前半である。以下、図23に示す処理をステップ番号に沿って説明する。なお、この処理は、ファイル作成、ブロック割付けなどの、使用量の増加を伴うファイル操作要求が出された際に実行される。
[ステップS231]使用量制限値判定処理部151は、ファイル操作要求が、ファイルの作成要求か否かを判断する。ファイルの作成要求の場合には処理がステップS232に進められる。ファイルの作成要求でない場合には、ブロックの割付け要求と判断し、処理がステップS233に進められる。
[ステップS232]使用量制限値判定処理部151は、current_inoにその親ディレクトリのinode番号を設定する。その後、処理がステップS236に進められる。
[ステップS233]使用量制限値判定処理部151は、current_inoにそのファイル自身のinode番号を設定する。
[ステップS234]使用量制限値判定処理部151は、current_inoのinode番号に該当するディレクトリの制限ディレクトリinode番号を参照し、そのinode番号が0か否かを判断する。制限ディレクトリinode番号が0であれば、処理を終了する。制限ディレクトリinode番号が0でなければ処理がステップS235に進められる。
[ステップS235]使用量制限値判定処理部151は、ステップS234で参照した制限ディレクトリinode番号をcurrent_inoに設定する。
[ステップS236]使用量制限値判定処理部151は、current_inoのinode番号に対応するディレクトリに一般制限フラグが設定されているか否かを判断する。一般制限フラグが設定されている場合には、処理がステップS237に進められる。一般制限フラグが設定されていない場合には、端子Fを介して処理が図24のステップS241に進められる。
[ステップS237]使用量制限値判定処理部151は、要求されたファイル操作がファイル作成か否かを判断する。ファイル作成である場合には、処理がステップS238に進められる。ファイル作成でない場合(ブロック割付けの場合)には、処理がステップS239に進められる。
[ステップS238]使用量制限値判定処理部151は、current_inoに設定されているinode番号に該当するディレクトリの一般制限情報における現在のファイル数に1を加算した場合に、ファイル数の制限値を超えるか否かを判断する。ファイル数の制限値を超える場合には、処理がステップS240に進められる。ファイル数の制限値を超えない場合には、端子Fを介して処理がステップS241に進められる。
[ステップS239]使用量制限値判定処理部151は、current_inoに設定されているinode番号に該当するディレクトリの一般制限情報における現在の使用ブロック数に、操作要求で示されているブロック数を加算した場合に、ブロック数の制限値を超えるか否かを判断する。ブロック数の制限値を超える場合には、処理がステップS240に進められる。ブロック数の制限値を超えない場合には、端子Fを介して処理が図24のステップS241に進められる。
[ステップS240]使用量制限値判定処理部151は、エラー処理を行う。たとえば、使用量制限値判定処理部151は、ファイル操作部124に対してエラーメッセージを出力し、ファイル操作を禁止する。その後、処理が終了する。
図24は、使用量制限処理の手順を示すフローチャートの後半である。以下、図24に示す処理をステップ番号に沿って説明する。
[ステップS241]使用量制限値判定処理部151は、current_inoのinode番号に対応するディレクトリにユーザ制限フラグが設定されているか否かを判断する。ユーザ制限フラグが設定されている場合には、処理がステップS242に進められる。ユーザ制限フラグが設定されていない場合には、処理がステップS245に進められる。
[ステップS242]使用量制限値判定処理部151は、要求されたファイル操作がファイル作成か否かを判断する。ファイル作成である場合には、処理がステップS243に進められる。ファイル作成でない場合(ブロック割付けの場合)には、処理がステップS244に進められる。
[ステップS243]使用量制限値判定処理部151は、current_inoに設定されているinode番号に該当するディレクトリのユーザ制限情報(ファイル操作を指示したユーザに対応するもの)における現在のファイル数に1を加算した場合に、ファイル数の制限値を超えるか否かを判断する。ファイル数の制限値を超える場合には、端子Hを介して処理がステップS240に進められる。ファイル数の制限値を超えない場合には、処理がステップS245に進められる。
[ステップS244]使用量制限値判定処理部151は、current_inoに設定されているinode番号に該当するディレクトリのユーザ制限情報(ファイル操作を指示したユーザに対応するもの)における現在の使用ブロック数に、操作要求で示されているブロック数を加算した場合に、ブロック数の制限値を超えるか否かを判断する。ブロック数の制限値を超える場合には、端子Hを介して処理がステップS240に進められる。ブロック数の制限値を超えない場合には、処理がステップS245に進められる。
[ステップS245]使用量制限値判定処理部151は、current_inoのinode番号に対応するディレクトリにグループ制限フラグが設定されているか否かを判断する。グループ制限フラグが設定されている場合には、処理がステップS246に進められる。グループ制限フラグが設定されていない場合には、端子Gを介して処理が図23のステップS234に進められる。
[ステップS246]使用量制限値判定処理部151は、要求されたファイル操作がファイル作成か否かを判断する。ファイル作成である場合には、処理がステップS247に進められる。ファイル作成でない場合(ブロック割付けの場合)には、処理がステップS248に進められる。
[ステップS247]使用量制限値判定処理部151は、current_inoに設定されているinode番号に該当するディレクトリのグループ制限情報(ファイル操作を指示したユーザが属するグループに対応するもの)における現在のファイル数に1を加算した場合に、ファイル数の制限値を超えるか否かを判断する。ファイル数の制限値を超える場合には、端子Hを介して処理が図23のステップS240に進められる。ファイル数の制限値を超えない場合には、端子Gを介して処理が図23のステップS234に進められる。
[ステップS248]使用量制限値判定処理部151は、current_inoに設定されているinode番号に該当するディレクトリのグループ制限情報(ファイル操作を指示したユーザが属するグループに対応するもの)における現在の使用ブロック数に、操作要求で示されているブロック数を加算した場合に、ブロック数の制限値を超えるか否かを判断する。ブロック数の制限値を超える場合には、端子Hを介して処理が図23のステップS240に進められる。ブロック数の制限値を超えない場合には、端子Gを介して処理が図23のステップS234に進められる。
以上のようにして、ファイル操作要求の際に、使用量制限値を超えるかどうかの判定が行われる。図23、図24に示した処理がエラーなしに終了したことが確認されると、ファイル操作部124において、ファイル操作要求に応じた処理が行われる。なお、対象ファイルがハードリンクであり、制限ディレクトリinode番号が複数ある場合、そのすべてについて図23、図24の処理が行われる。
次に、ファイル、ディレクトリ移動時の処理について説明する。
あるファイルまたはディレクトリを別のディレクトリに移動させる場合、使用量の再計算および移動先の使用量制限値のチェックを行う必要がある。
図25は、移動処理の手順を示すフローチャートである。以下に、図25に示す処理をステップ番号に沿って説明する。
[ステップS251]使用量制限値判定処理部151は、移動元ディレクトリ配下のすべてのファイルを調べ、総ファイル数とファイルデータの使用量(総ブロック数)を求める。使用量制限値判定処理部151は、総ファイル数をsrc_filesに設定し、総ブロック数をsrc_blocksに設定する。
[ステップS252]使用量制限値判定処理部151は、移動先ディレクトリの管理情報における現在のファイル数と使用ブロック数、およびファイル数とブロック数との制限値を参照する。
[ステップS253]使用量制限値判定処理部151は、src_filesとsrc_blocksとに基づいて、ディレクトリまたはファイルを移動させた場合に、移動先ディレクトリの制限値を超えるか否かを判断する。制限値を超える場合には、処理がステップS254に進められる。制限値を超えない場合には、処理がステップS255に進められる。
[ステップS254]使用量制限値判定処理部151は、エラー処理を行う。たとえば、使用量制限値判定処理部151は、ファイル操作部124に対してエラーメッセージを出力し、ファイル操作を禁止する。その後、処理が終了する。
[ステップS255]使用量現在値更新処理部152は、移動先ディレクトリのファイル数に、src_filesの値を加算する。また、使用量現在値更新処理部152は、移動先ディレクトリの使用ブロック数にsrc_blocksの値を加算する。
[ステップS256]使用量制限値判定処理部151は、使用量制限値の判定がエラー無く終了したことをファイル操作部124に伝える。すると、ファイル操作部124は、ファイルの移送要求に応じて、ファイルの移動処理を実行する。
[ステップS257]使用量現在値更新処理部152は、移動元ディレクトリのファイル数から、src_filesの値を減算する。また、使用量現在値更新処理部152は、移動先ディレクトリの使用ブロック数から、src_blocksの値を減算する。
以下の処理では、使用量制限値の更新処理を行う。すなわち、あるファイルを別のディレクトリに移動した場合、そのファイルの制限ディレクトリinode番号を更新する必要が生じる。そこで、以下のような使用量制限値の更新処理が行われる。
[ステップS258]使用量制限値設定処理部153は、移動先のディレクトリに制限値が設定されているか否かを判断する。制限値が設定されている場合には、処理がステップS259に進められる。制限値が設定されていない場合には処理がステップS260に進められる。
[ステップS259]使用量制限値設定処理部153は、移動先のディレクトリに制限値が設定されている場合、その移動先のディレクトリのinode番号をset_inoに設定する。その後、処理がステップS261に進められる。
[ステップS260]使用量制限値設定処理部153は、移動先のディレクトリに制限値が設定されていない場合、その移動先のディレクトリの制限ディレクトリinode番号をset_inoに設定する。
[ステップS261]使用量制限値設定処理部153は、移動対象のディレクトリ配下のファイルのうち、制限ディレクトリinode番号に、移動対象のディレクトリより上の階層のディレクトリ番号または0が設定されているファイルについて、制限ディレクトリinode番号をset_inoに書き換える。
以上のようにして、ディレクトリやファイルを移動することができる。なお、対象ファイルがハードリンクであり、制限ディレクトリinode番号が複数ある場合、そのすべてについてステップS258〜ステップS261に示した処理が行われる。
なお、制限値が設定されているディレクトリより下の階層のファイルについては検索しなくてよい。たとえば、移動対象のディレクトリに制限値が設定されている場合は、書き換える必要があるのは移動対象のディレクトリのみである。
ここで、ディレクトリの移動に伴う制限ディレクトリinode番号の書き換え処理について、具体例を用いて説明する。
図26は、ディレクトリ移動前のデータ構造の一例を示す図である。図26の例では、ディレクトリ511〜514とファイル521,522とが示されている。
ディレクトリ511はルートディレクトリであり、制限値が設定されている。ディレクトリ511のinode番号は2であり、制限ディレクトリinode番号は0である。
ディレクトリ511の直下に2つのディレクトリ512,513が配置されている。ディレクトリ512は制限値が設定されておらず、inode番号が3、制限ディレクトリinode番号が2である。ディレクトリ513は制限値が設定されており、inode番号が4、制限ディレクトリinode番号が2である。ディレクトリ512の直下にディレクトリ514が配置されている。ディレクトリ514は制限値が設定されており、inode番号が5、制限ディレクトリinode番号が2である。
ディレクトリ514の直下に2つのファイル521,522が配置されている。ファイル521のinode番号は9であり、制限ディレクトリinode番号は5である。ファイル522のinode番号は6であり、制限ディレクトリinode番号は5である。
このような構造のデータにおいて、inode番号5のディレクトリ514をinode番号4のディレクトリ513の直下に移動した場合を考える。
図27は、ディレクトリを移動後のデータ構造の一例を示す図である。図26と比較すると、inode番号5のディレクトリ514が、ディレクトリ513の直下に配置されている。また、ディレクトリ514の制限ディレクトリinode番号は、2から4に変更されている。なお、ディレクトリ514の配下のファイル521,522の制限ディレクトリinode番号に変更はない。
次に、制限値設定処理について説明する。
あるディレクトリ(設定対象ディレクトリ)に対して制限値を設定する場合は、以下の処理を行う。
まず、使用量制限値設定処理部153は、設定対象ディレクトリの配下のファイルのうち、制限ディレクトリinode番号に、設定対象ディレクトリより上の階層のディレクトリのinode番号または0が設定されているファイルについて、制限ディレクトリinode番号を、設定対象ディレクトリのinode番号に書き換える。このとき、制限値が設定されているディレクトリより下の階層のファイルについては、検索しなくてもよい。
次に、使用量現在値更新処理部152は、設定対象ディレクトリ配下のすべてのファイルを調べ、ファイル数とファイルデータの使用量を集計する。集計した値に基づいて、設定対象ディレクトリのファイル数と使用ブロック数とを設定する。
図28は、制限値設定前のデータ構造の一例を示す図である。図28の例では、ディレクトリ611〜614とファイル621〜624とが示されている。
ディレクトリ611はルートディレクトリであり、制限値が設定されている。ディレクトリ611のinode番号は2であり、制限ディレクトリinode番号は0である。
ディレクトリ611の直下に2つのディレクトリ612,613が配置されている。ディレクトリ612は制限値が設定されておらず、inode番号が3、制限ディレクトリinode番号が2である。ディレクトリ613は制限値が設定されておらず、inode番号が4、制限ディレクトリinode番号が2である。
ディレクトリ612の直下に、ディレクトリ614とファイル622とが配置されている。ディレクトリ614は、制限値が設定されているディレクトリであり、inode番号が5、制限ディレクトリinode番号が2である。ファイル622は、inode番号が6、制限ディレクトリ番号が2である。ディレクトリ614の直下には、ファイル621が配置されている。ファイル621は、inode番号が9、制限ディレクトリ番号が5である。
ディレクトリ613の直下に2つのファイル623,624が配置されている。ファイル623のinode番号は7であり、制限ディレクトリinode番号は2である。ファイル624のinode番号は8であり、制限ディレクトリinode番号は2である。
このようなデータ構造において、ディレクトリ612に制限値を設定する場合を考える。
図29は、制限値設定後のデータ構造の一例を示す図である。図28と異なる点は、まず、ディレクトリ612に制限値が設定されている。そして、ディレクトリ614の制限ディレクトリinode番号が2から3に変更されている。同様に、ファイル622の制限ディレクトリinode番号が2から3に変更されている。
以上説明したように、ディレクトリ単位でファイル数およびファイルデータの使用量についてファイルシステムが定常的に管理する機能をNASファイラ100で実現することができる。これによりより細かい使用量制限の設定ができるようになり、ファイルシステムの利便性が向上する。
たとえば、従来、ディレクトリ毎に使用量の制限をかけるには、たとえば、使用量の制限をかけたいディレクトリ毎にファイルシステムを分ける方法があった。しかし、この方法では、制限値がそれぞれのファイルシステムのサイズに制限され、制限値を大きくしたい場合はファイルシステム再構築を伴うため利便性に欠けていた。
本実施の形態に示したように各ディレクトリに使用量の制限値を設定し、ファイル操作時にその制限値を参照し、使用量が制限値を超えないようにすることで、ディレクトリ単位に使用量の管理を行うことができる。これにより、たとえば、ワークグループ毎に、作成したデータを格納するディレクトリを定めておき、そのディレクトリに対して使用制限を設定することができる。これにより、たとえば、あるワークグループのデータ量が膨大となり、他のワークグループにおける作業領域が枯渇するようなことがなくなる。しかも、ワークグループ毎に使用量の制限値が決められていれば、各グループで無駄なファイルを整理する努力が払われるようになり、システム全体の記憶容量の効率化が図れる。
しかも、ユーザ毎またはグループ毎の使用量を制限を行うことができるため、よりきめの細かいファイルシステムの管理が可能となる。
また、各ファイルの管理情報として、使用量を制限しているディレクトリのinode番号を保持することで、ファイル作成/削除やブロック割付け/解放等のファイルシステム更新の性能劣化を最小限にとどめることができる。
さらに、本実施の形態によれば、使用量を制限するディレクトリを保持する上で、それぞれのファイルでは使用量を制限しているディレクトリのうちで一番近い階層のディレクトリについてのみ記録している。これにより、ディレクトリ移動などのファイルシステム構造変更の際の情報更新による性能劣化を最小限にとどめることができる。
また、ファイルが複数のディレクトリに所属するハードリンクの場合であっても、その所属するすべてのディレクトリから使用量を制限できることができる。これにより、ハードリンクを利用可能なファイルシステムにも適用することができ、高い汎用性を得ることができる。
なお、上記の制限値の説明では、使用量の制限を1段階でおこなっていたが、ディレクトリ毎の使用量の制限を多段階に設けることができる。たとえば、使用量の制限の1段目として、ソフトリミットを設定し、ソフトリミットに付随してタイムリミットを設定する。使用量の制限の2段目として、ソフトリミットよりも緩やかな制限値(ソフトリミットより制限値のファイル数やブロック数が多い)のハードリミットを設定する。このハードリミットは、上記実施の形態における制限値(ファイル数の制限値やブロック数の制限値)である。
ファイルシステムでは、使用量がソフトリミットを超えたときに、時間計測を開始する。このとき、使用量がソフトリミットを超えたことを示すメッセージを、利用者の使用している表示装置に表示させてもよい。ファイルシステムは、使用量がソフトリミットを超えてからタイムリミットの時間以上経過すると、該当するディレクトリ配下へのファイルの作成またはブロック割り当て操作を禁止する。
このように多段階に制限値を設けることで、制限値(ハードリミット)ぎりぎりまで既に使用しているのを利用者が気づかずに作業を行い、その結果、新たに作成した重要なファイルを保存できなくなるような事態を回避することができる。
なお、ソフトリミットとして、ファイル数の制限値とブロック数の制限値を設定した場合、ファイル数のタイムリミットと、ブロック数のタイムリミットとを個別に設定してもよい。
なお、上記の説明では、ファイルサーバの1つであるNASファイラ100に本発明に係るファイルシステム(ファイルシステム制御部120)を実装し、ネットワークを介して接続されたクライアント20のアプリケーション部21からファイルシステムに対する操作を行う場合について説明したが、ファイルシステム制御部120とアプリケーション部21が、1つの装置内に実装されていてもよい。たとえば、クライアント20内にファイルシステム制御部120の機能を実装し、クライアント20の記憶装置を管理させることもできる。
また、上記の処理機能は、サーバコンピュータとクライアントコンピュータとに、ファイル管理プログラムを実行させることで実現することができる。その場合、NASファイラなどのサーバコンピュータが有すべき機能の処理内容を記述したサーバプログラム、およびクライアントコンピュータが有すべき機能の処理内容を記述したクライアントプログラムが提供される。サーバプログラムをサーバコンピュータで実行することにより、上記本実施の形態の処理機能がサーバコンピュータ上で実現される。また、クライアントプログラムをクライアントコンピュータで実行することにより、上記本実施の形態の処理機能がクライアントコンピュータ上で実現される。
処理内容を記述したサーバプログラムやクライアントプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置(HDD)、フレキシブルディスク(FD)、磁気テープなどがある。光ディスクには、DVD(Digital Versatile Disc)、DVD−RAM(Random Access Memory)、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。光磁気記録媒体には、MO(Magneto-Optical disc)などがある。
サーバプログラムやクライアントプログラムを流通させる場合には、たとえば、各プログラムが記録されたDVD、CD−ROMなどの可搬型記録媒体が販売される。また、クライアントプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータからクライアントコンピュータにクライアントプログラムを転送することもできる。
サーバプログラムを実行するサーバコンピュータは、たとえば、可搬型記録媒体に記録されたサーバプログラムを、自己の記憶装置に格納する。そして、サーバコンピュータは、自己の記憶装置からサーバプログラムを読み取り、サーバプログラムに従った処理を実行する。なお、サーバコンピュータは、可搬型記録媒体から直接サーバプログラムを読み取り、そのサーバプログラムに従った処理を実行することもできる。
クライアントプログラムを実行するクライアントコンピュータは、たとえば、可搬型記録媒体に記録されたクライアントプログラムもしくはサーバコンピュータから転送されたクライアントプログラムを、自己の記憶装置に格納する。そして、クライアントコンピュータは、自己の記憶装置からクライアントプログラムを読み取り、クライアントプログラムに従った処理を実行する。なお、クライアントコンピュータは、可搬型記録媒体から直接クライアントプログラムを読み取り、そのクライアントプログラムに従った処理を実行することもできる。また、クライアントコンピュータは、サーバコンピュータからクライアントプログラムが転送される毎に、逐次、受け取ったクライアントプログラムに従った処理を実行することもできる。
(付記1) 識別情報を有するディレクトリを用いてファイルを管理するためのファイル管理プログラムにおいて、
コンピュータを、
ファイル操作要求に応答して、前記ファイルを任意のディレクトリの下に配置するファイル操作手段と、
前記ファイル操作手段により前記ファイルが配置されると、前記ファイルの親ディレクトリ情報として、前記任意のディレクトリの識別情報を設定する親ディレクトリ情報設定手段と、
前記ファイルを指定した親ディレクトリ情報取得要求に応答して、前記ファイルの親ディレクトリ情報を参照し、前記任意のディレクトリの識別情報を出力する親ディレクトリ情報提供手段と、
として機能させることを特徴とするファイル管理プログラム。
(付記2) 前記親ディレクトリ情報設定手段は、前記任意のディレクトリが複数の場合には、前記ファイルの親ディレクトリ情報として、複数の前記任意のディレクトリそれぞれの識別情報を設定することを特徴とする付記1記載のファイル管理プログラム。
(付記3) 前記ファイルの親ディレクトリ情報として設定された複数の識別情報それぞれに対して優先順を設定する優先順設定手段をさらに有し、
前記親ディレクトリ情報提供手段は、前記複数の識別情報を出力する際に、優先順に沿った順番で前記複数の識別情報を出力することを特徴とする付記2記載のファイル管理プログラム。
(付記4) 前記ファイル操作手段は、ファイル操作要求に応答して、上位ディレクトリの下に下位ディレクトリを配置し、
前記親ディレクトリ情報設定手段は、前記ファイル操作手段により前記下位ディレクトリが配置されると、配置された前記下位ディレクトリの親ディレクトリ情報として、前記上位ディレクトリの識別情報を設定し、
前記ファイルの経路探索要求に応答して、前記ファイルの親ディレクトリ情報に示されている前記任意のディレクトリの識別情報で示されるディレクトリから順に、各ディレクトリの親ディレクトリ情報に設定されている識別情報で示されるディレクトリを辿り、最上位のディレクトリまでの経路を探索する探索手段をさらに有する、
ことを特徴とする付記1記載のファイル管理プログラム。
(付記5) 前記親ディレクトリ情報設定手段は、前記任意のディレクトリが複数の場合には、前記ファイルの親ディレクトリ情報として、複数の前記任意のディレクトリそれぞれの識別情報を設定し、
前記探索手段は、前記ファイルの親ディレクトリとして設定されている複数の前記識別情報毎に、前記最上位のディレクトリまでの経路を探索することを特徴とする付記4記載のファイル管理プログラム。
(付記6) 所定のファイル管理規則を示す属性情報を、ディレクトリに設定する属性情報設定手段と、
前記ファイルの経路探索要求を前記探索手段に出力して前記探索手段から探索結果の経路を受け取り、前記探索結果の経路上の各ディレクトリに設定されている属性情報に対応するファイル管理規則を、前記ファイルに適用することを特徴とする付記4記載のファイル管理プログラム。
(付記7) 識別情報を有するディレクトリを用いてファイルを管理するためのファイル管理プログラムにおいて、
コンピュータを、
ディレクトリ毎に、記憶領域の使用量の制限値を設定する制限値設定手段と、
ファイル操作要求があると、ファイル操作を実行した場合の各ディレクトリの記憶領域の使用予定量を計算し、前記各ディレクトリにおいて、前記制限値設定手段で設定された制限値と使用予定量とを比較する比較手段と、
前記比較手段で比較された結果、使用予定量が制限値を超えるディレクトリが存在しない場合に、前記ファイル操作要求に応答してファイル操作を実行するファイル操作手段と、
として機能させることを特徴とするファイル管理プログラム。
(付記8) 前記制限値設定手段は、前記記憶領域の使用量の制限値として、前記ディレクトリ配下に配置可能なファイル数を設定することを特徴とする付記7記載のファイル管理プログラム。
(付記9) 前記制限値設定手段は、前記記憶領域の使用量の制限値として、前記ディレクトリ配下に配置されたファイルで使用可能な記憶容量を設定することを特徴とする付記7記載のファイル管理プログラム。
(付記10) 前記制限値設定手段は、各ディレクトリに対して、ユーザ毎に前記記憶領域の使用量の制限値を設定し、
前記比較手段は、前記ファイル操作要求を出したユーザの使用量と、当該ユーザの使用量の制限値とを比較することを特徴とする付記7記載のファイル管理プログラム。
(付記11) 前記制限値設定手段は、各ディレクトリに対して、グループ毎に前記記憶領域の使用量の制限値を設定し、
前記比較手段は、前記ファイル操作要求を出したユーザの属するグループの使用量と、当該グループの使用量の制限値とを比較することを特徴とする付記7記載のファイル管理プログラム。
(付記12) 識別情報を有するディレクトリを用いてファイルを管理するためのファイル管理装置において、
ファイル操作要求に応答して、前記ファイルを任意のディレクトリの下に配置するファイル操作手段と、
前記ファイル操作手段により前記ファイルが配置されると、前記ファイルの親ディレクトリ情報として、前記任意のディレクトリの識別情報を設定する親ディレクトリ情報設定手段と、
前記ファイルを指定した親ディレクトリ情報取得要求に応答して、前記ファイルの親ディレクトリ情報を参照し、前記任意のディレクトリの識別情報を出力する親ディレクトリ情報提供手段と、
を有することを特徴とするファイル管理装置。
(付記13) 前記親ディレクトリ情報設定手段は、前記任意のディレクトリが複数の場合には、前記ファイルの親ディレクトリ情報として、複数の前記任意のディレクトリそれぞれの識別情報を設定することを特徴とする付記12記載のファイル管理装置。
(付記14) 前記ファイルの親ディレクトリ情報として設定された複数の識別情報それぞれに対して優先順を設定する優先順設定手段をさらに有し、
前記親ディレクトリ情報提供手段は、前記複数の識別情報を出力する際に、優先順に沿った順番で前記複数の識別情報を出力することを特徴とする付記13記載のファイル管理装置。
(付記15) 前記ファイル操作手段は、ファイル操作要求に応答して、上位ディレクトリの下に下位ディレクトリを配置し、
前記親ディレクトリ情報設定手段は、前記ファイル操作手段により前記下位ディレクトリが配置されると、配置された前記下位ディレクトリの親ディレクトリ情報として、前記上位ディレクトリの識別情報を設定し、
前記ファイルの経路探索要求に応答して、前記ファイルの親ディレクトリ情報に示されている前記任意のディレクトリの識別情報で示されるディレクトリから順に、各ディレクトリの親ディレクトリ情報に設定されている識別情報で示されるディレクトリを辿り、最上位のディレクトリまでの経路を探索する探索手段をさらに有する、
ことを特徴とする付記12記載のファイル管理装置。
(付記16) 前記親ディレクトリ情報設定手段は、前記任意のディレクトリが複数の場合には、前記ファイルの親ディレクトリ情報として、複数の前記任意のディレクトリそれぞれの識別情報を設定し、
前記探索手段は、前記ファイルの親ディレクトリとして設定されている複数の前記識別情報毎に、前記最上位のディレクトリまでの経路を探索することを特徴とする付記15記載のファイル管理装置。
(付記17) 所定のファイル管理規則を示す属性情報を、ディレクトリに設定する属性情報設定手段と、
前記ファイルの経路探索要求を前記探索手段に出力して前記探索手段から探索結果の経路を受け取り、前記探索結果の経路上の各ディレクトリに設定されている属性情報に対応するファイル管理規則を、前記ファイルに適用することを特徴とする付記15記載のファイル管理装置。
(付記18) 識別情報を有するディレクトリを用いてファイルを管理するためのファイル管理装置において、
ディレクトリ毎に、記憶領域の使用量の制限値を設定する制限値設定手段と、
ファイル操作要求があると、ファイル操作を実行した場合の各ディレクトリの記憶領域の使用予定量を計算し、前記各ディレクトリにおいて、前記制限値設定手段で設定された制限値と使用予定量とを比較する比較手段と、
前記比較手段で比較された結果、使用予定量が制限値を超えるディレクトリが存在しない場合に、前記ファイル操作要求に応答してファイル操作を実行するファイル操作手段と、
を有することを特徴とするファイル管理装置。
(付記19) 前記制限値設定手段は、前記記憶領域の使用量の制限値として、前記ディレクトリ配下に配置可能なファイル数を設定することを特徴とする付記18記載のファイル管理装置。
(付記20) 前記制限値設定手段は、前記記憶領域の使用量の制限値として、前記ディレクトリ配下に配置されたファイルで使用可能な記憶容量を設定することを特徴とする付記18記載のファイル管理装置。
(付記21) 前記制限値設定手段は、各ディレクトリに対して、ユーザ毎に前記記憶領域の使用量の制限値を設定し、
前記比較手段は、前記ファイル操作要求を出したユーザの使用量と、当該ユーザの使用量の制限値とを比較することを特徴とする付記18記載のファイル管理装置。
(付記22) 前記制限値設定手段は、各ディレクトリに対して、グループ毎に前記記憶領域の使用量の制限値を設定し、
前記比較手段は、前記ファイル操作要求を出したユーザの属するグループの使用量と、当該グループの使用量の制限値とを比較することを特徴とする付記18記載のファイル管理装置。
(付記23) 識別情報を有するディレクトリを用いてファイルを管理するためのファイル管理プログラムを記録したコンピュータ読み取り可能な記録媒体において、
前記コンピュータを、
ファイル操作要求に応答して、前記ファイルを任意のディレクトリの下に配置するファイル操作手段と、
前記ファイル操作手段により前記ファイルが配置されると、前記ファイルの親ディレクトリ情報として、前記任意のディレクトリの識別情報を設定する親ディレクトリ情報設定手段と、
前記ファイルを指定した親ディレクトリ情報取得要求に応答して、前記ファイルの親ディレクトリ情報を参照し、前記任意のディレクトリの識別情報を出力する親ディレクトリ情報提供手段と、
として機能させることを特徴とする記録媒体。
(付記24) 識別情報を有するディレクトリを用いてファイルを管理するためのファイル管理プログラムを記録したコンピュータ読み取り可能な記録媒体において、
前記コンピュータを、
ディレクトリ毎に、記憶領域の使用量の制限値を設定する制限値設定手段と、
ファイル操作要求があると、ファイル操作を実行した場合の各ディレクトリの記憶領域の使用予定量を計算し、前記各ディレクトリにおいて、前記制限値設定手段で設定された制限値と使用予定量とを比較する比較手段と、
前記比較手段で比較された結果、使用予定量が制限値を超えるディレクトリが存在しない場合に、前記ファイル操作要求に応答してファイル操作を実行するファイル操作手段と、
として機能させることを特徴とする記録媒体。