(57)【要約】【課題】パスワードを使用することなく安全にファイルを不可視化する。【解決手段】不可視化するファイルツリーの管理情報をシーケンシャルなデータとして格納する直列ディレクトリ管理ファイルと、直列ディレクトリ管理ファイルに管理情報を書き込む際のインデックス情報を格納するインデックスファイルとを記憶する記憶領域を備えた記憶装置。【選択図】図１Ａ
2016189104.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置に記録される、不可視化の対象となるディレクトリの配下のファイルの管理情報を逐次読み出す読み出し部と、
読み出した前記管理情報毎に、当該管理情報を直列ディレクトリ管理ファイルに逐次追記する管理ファイル記録部と、
読み出した前記管理情報毎に、前記直列ディレクトリ管理ファイルにおける当該管理情報の書き込み位置をインデックスファイルに逐次追記するインデックス記録部と、
読み出した前記管理情報を前記記憶装置から削除する削除部と
を備えるファイル管理装置。
【請求項２】
前記直列ディレクトリ管理ファイルを、不可視化の対象となる前記ディレクトリが格納される親ディレクトリの配下に生成する管理ファイル生成部と、
前記インデックスファイルを、不可視化の対象となる前記ディレクトリが格納される親ディレクトリの配下に生成するインデックス生成部と
をさらに備える請求項１に記載のファイル管理装置。
【請求項３】
前記インデックスファイルを他の記憶装置に記録して前記記憶装置から削除するインデックス移動部をさらに備える請求項１または請求項２に記載のファイル管理装置。
【請求項４】
前記インデックスファイルと前記直列ディレクトリ管理ファイルとに基づいて前記管理情報を復元する復元部をさらに備える請求項１から請求項３の何れか１項に記載のファイル管理装置。
【請求項５】
不可視化するディレクトリの配下のファイルの管理情報をシーケンシャルなデータとして格納する直列ディレクトリ管理ファイルと、
前記直列ディレクトリ管理ファイルにおける前記管理情報の書き込み位置を格納するインデックスファイルと
を記憶する記憶領域を備える記憶装置。
【請求項６】
前記記憶領域が、データをブロック単位で記憶するデータブロック領域であり、
前記管理情報がディレクトリの管理情報又はファイルの管理情報であって、
前記管理情報がファイルの管理情報である場合に、前記直列ディレクトリ管理ファイルが、当該ファイルのデータの前記データブロック領域内の記憶位置を表す情報を格納する
請求項５に記載の記憶装置。
【請求項７】
記憶装置に記録される、不可視化の対象となるディレクトリの配下のファイルの管理情報を逐次読み出すステップと、
読み出した前記管理情報毎に、当該管理情報を直列ディレクトリ管理ファイルに逐次追記するステップと、
読み出した前記管理情報毎に、前記直列ディレクトリ管理ファイルにおける当該管理情報の書き込み位置をインデックスファイルに逐次追記するステップと、
読み出した前記管理情報を前記記憶装置から削除するステップと
を有するファイル管理方法。
【請求項８】
記憶装置に記録される、不可視化の対象となるディレクトリの配下のファイルの管理情報を逐次読み出すステップと、
読み出した前記管理情報毎に、当該管理情報を直列ディレクトリ管理ファイルに逐次追記するステップと、
読み出した前記管理情報毎に、前記直列ディレクトリ管理ファイルにおける当該管理情報の書き込み位置をインデックスファイルに逐次追記するステップと、
読み出した前記管理情報を前記記憶装置から削除するステップと
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファイル管理装置、記憶装置、ファイル管理方法及びプログラムに関する。
【背景技術】
【０００２】
特許文献１には、ファイルシステム上の特定のディレクトリ配下のファイルツリー構造（すなわち、ディレクトリ、ファイルなど）を、第三者から不可視化するための技術の一例が記載されている。特許文献１に記載されている技術では、ＵＤＦ（ユニバーサルディスクフォーマット）ディスクにおいて簡易的に特定のディレクトリ配下のファイルが隠ぺいされる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００３−２２２０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１に記載されている技術では、隠ぺいしたファイルの読み出しにはパスワードが使用されている。例えば、パスワードが第三者に洩れたり、なりすましログインされた場合は、容易に第三者がファイルにアクセス可能になるという課題がある。
【０００５】
本発明の目的は、上記の課題を解決するファイル管理装置、記憶装置、ファイル管理方法及びプログラムを提供することにある。
【課題を解決するための手段】
【０００６】
上記課題を解決するため、本発明の一態様に係るファイル管理装置は、記憶装置に記録される、不可視化の対象となるディレクトリの配下のファイルの管理情報を逐次読み出す読み出し部と、読み出した前記管理情報毎に、当該管理情報を直列ディレクトリ管理ファイルに逐次追記する管理ファイル記録部と、読み出した前記管理情報毎に、前記直列ディレクトリ管理ファイルにおける当該管理情報の書き込み位置をインデックスファイルに逐次追記するインデックス記録部と、読み出した前記管理情報を前記記憶装置から削除する削除部とを備える。
【０００７】
また、本発明の一態様に係る記憶装置は、不可視化するディレクトリの配下のファイルの管理情報をシーケンシャルなデータとして格納する直列ディレクトリ管理ファイルと、前記直列ディレクトリ管理ファイルにおける前記管理情報の書き込み位置を格納するインデックスファイルとを記憶する記憶領域を備える。
【０００８】
また、本発明の一態様に係るファイル管理方法は、記憶装置に記録される、不可視化の対象となるディレクトリの配下のファイルの管理情報を逐次読み出すステップと、読み出した前記管理情報毎に、当該管理情報を直列ディレクトリ管理ファイルに逐次追記するステップと、読み出した前記管理情報毎に、前記直列ディレクトリ管理ファイルにおける当該管理情報の書き込み位置をインデックスファイルに逐次追記するステップと、読み出した前記管理情報を前記記憶装置から削除するステップとを有する。
【０００９】
また、本発明の一態様に係るプログラムは、記憶装置に記録される、不可視化の対象となるディレクトリの配下のファイルの管理情報を逐次読み出すステップと、読み出した前記管理情報毎に、当該管理情報を直列ディレクトリ管理ファイルに逐次追記するステップと、読み出した前記管理情報毎に、前記直列ディレクトリ管理ファイルにおける当該管理情報の書き込み位置をインデックスファイルに逐次追記するステップと、読み出した前記管理情報を前記記憶装置から削除するステップとをコンピュータに実行させる。
【発明の効果】
【００１０】
上述した少なくとも一つの態様によれば、ファイル管理装置は、管理情報に代えて直列ディレクトリ管理ファイルとインデックスファイルとを記憶装置に記憶させることで、パスワードを使用しなくてもファイルツリーを容易に不可視化することができる。
【図面の簡単な説明】
【００１１】
【図１Ａ】本発明の実施形態に係るファイルシステムの構成例を示したブロック図である。
【図１Ｂ】図１Ａのファイルシステム（１−１）の動作例を説明する際に用いるファイルツリーの一例を示した説明図である。
【図１Ｃ】図１Ａのファイルシステム（１−１）が用いるｉノードの構成例を示した説説明図である。
【図１Ｄ】図１Ａのファイルシステム（１−１）が用いるｉノードの構成例を示した説説明図である。
【図２】図１Ａのファイルシステム（１−１）の動作例を説明するための説明図である。
【図３】図１Ａのファイルシステム（１−１）におけるファイルツリー不可視化要求（１−４４）に対する処理の一例を示したフローチャートである。
【図４】図３に示した先頭ディレクトリ不可視化処理（ステップＡ３−１）を説明するためのフローチャートである。
【図５】図３に示した全ファイルツリー不可視化処理（ステップＡ３−２）を説明するためのフローチャートである。
【図６】図３に示した不可視化するファイルツリーのｉノード解放処理（ステップＡ３−３）を説明するためのフローチャートである。
【図７Ａ】図１Ａに示したｉノードブロック領域（１−１８）及びデータブロック領域（１−１９）の記憶内容の変化を説明するための説明図である。
【図７Ｂ】図１Ａのファイルシステム（１−１）におけるファイルツリーの構成の変化を説明するための説明図である。
【図８】図１Ａに示したｉノードブロック領域（１−１８）及びデータブロック領域（１−１９）の記憶内容の変化を説明するための説明図である。
【図９】図１Ａに示したｉノードブロック領域（１−１８）及びデータブロック領域（１−１９）の記憶内容の変化を説明するための説明図である。
【図１０】図１Ａに示したｉノードブロック領域（１−１８）及びデータブロック領域（１−１９）の記憶内容の変化を説明するための説明図である。
【図１１】図１Ａに示したｉノードブロック領域（１−１８）及びデータブロック領域（１−１９）の記憶内容の変化を説明するための説明図である。
【図１２Ａ】図１Ａに示したｉノードブロック領域（１−１８）及びデータブロック領域（１−１９）の記憶内容の変化を説明するための説明図である。
【図１２Ｂ】図１Ａのファイルシステム（１−１）におけるファイルツリーの構成の変化を説明するための説明図である。
【図１３Ａ】図１Ａに示したｉノードアクセス部（１−１２）とｉノードデータブロック情報付替部（１−１３）とｉノード取得・解放部（１−４８）との動作例を説明するための説明図である。
【図１３Ｂ】図１Ａに示したｉノードアクセス部（１−１２）とｉノードデータブロック情報付替部（１−１３）とｉノード取得・解放部（１−４８）との動作例を説明するための説明図である。
【図１３Ｃ】図１Ａに示したｉノードアクセス部（１−１２）とｉノードデータブロック情報付替部（１−１３）とｉノード取得・解放部（１−４８）との動作例を説明するための説明図である。
【図１４Ａ】図１ＢのインデックスファイルＹＹ（１−２９Ａ）が記憶するインデックス情報を説明するための説明図である。
【図１４Ｂ】図１ＢのインデックスファイルＹＹ（１−２９Ａ）が記憶するインデックス情報を説明するための説明図である。
【図１５】図１Ａのファイルシステム（１−１）におけるファイルツリー構造復元要求（１−４５）に対する処理の一例を示したフローチャートである。
【図１６】図１５に示した先頭ディレクトリ復元処理（ステップＥ３−１）を説明するためのフローチャートである。
【図１７】図１５に示した全ファイルツリー構造化復元処理（ステップＥ３−２）を説明するためのフローチャートである。
【図１８】図１Ａに示したｉノードブロック領域（１−１８）及びデータブロック領域（１−１９）の記憶内容の変化を説明するための説明図である。
【図１９】図１Ａに示したｉノードブロック領域（１−１８）及びデータブロック領域（１−１９）の記憶内容の変化を説明するための説明図である。
【図２０】図１Ａのファイルシステム（１−１）の動作例を説明する際に用いるファイルツリーの一例を示した説明図である。
【図２１Ａ】図１Ａに示したｉノードブロック領域（１−１８）及びデータブロック領域（１−１９）の記憶内容の変化を説明するための説明図である。
【図２１Ｂ】図１Ａのファイルシステム（１−１）におけるファイルツリーの構成の変化を説明するための説明図である。
【図２２Ａ】図１Ａに示したｉノードブロック領域（１−１８）及びデータブロック領域（１−１９）の記憶内容の変化を説明するための説明図である。
【図２２Ｂ】図１Ａのファイルシステム（１−１）におけるファイルツリーの構成の変化を説明するための説明図である。
【図２３】本発明の実施形態に係る記憶装置の基本構成を示したブロック図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照して本発明の実施形態について説明する。図１Ａは、本発明の実施形態に係るファイルシステム（１−１）の構成例を説明するための概略ブロック図である。図１Ａに示したファイルシステム（１−１）は、ユーザアクセス空間（１−２）、カーネル空間（１−３）、及びディスク領域（１−４）を有する。ファイルシステム（１−１）は、記憶装置に記録するデータを管理する装置であり、記憶装置とデータ管理用のプログラムを実行するコンピュータとの組み合わせから、あるいは、データ管理用のプログラムを実行するコンピュータから構成することができる。
【００１３】
ユーザアクセス空間（１−２）は、ユーザがファイルシステム（１−１）に対して、ファイルツリー上のディレクトリやファイルを操作するためのアドレス空間である。ユーザアクセス空間（１−２）には、コマンドやＡＰＩ（Application Programming Interface）などのプロセスが展開される。本構成では、ユーザアクセス空間（１−２）には、ファイルツリー不可視化コマンド（１−５）と、ファイルツリー構造復元コマンド（１−６）と、ファイルコピーコマンド（１−７）と、ファイルアクセスＡＰＩ（１−８）とが展開される。ファイルツリー不可視化コマンド（１−５）は、ユーザからのファイルツリー不可視化要求（１−４４）を実行するためのコマンドである。ファイルツリー不可視化要求（１−４４）は、ファイルツリーを、通常の手順では読み出すことができないようにする要求である。ファイルツリーは、ディレクトリあるいはフォルダ、ファイル等からなるデータの記憶領域を階層的に表す情報である。ファイルツリー構造復元コマンド（１−６）は、ユーザからのファイルツリー構造復元要求（１−４５）を実行するコマンドである。ファイルツリー構造復元要求（１−４５）は、不可視化したファイルツリーを復元する要求である。
【００１４】
また、ファイルコピーコマンド（１−７）は、通常のファイルシステムで一般的な操作であるファイルをコピーするためのコマンドである。ファイルアクセスＡＰＩ（１−８）は、ファイルの作成・削除、リード・ライトを行うためのＡＰＩである。
【００１５】
本実施形態では、不可視化したファイルツリーを表す情報を、直列ディレクトリ管理ファイルＸＸ（１−２８）と、インデックスファイルＹＹ（１−２９）との２つの管理ファイルに分けて記憶する。そして、例えば、ユーザは、インデックスファイルをＵＳＢ（Universal Serial Bus；登録商標）メモリ等の着脱可能な記憶媒体に移動することで、保管場所を分けることができる。不可視化したファイルツリーのインデックス情報を持ち出す際は、ユーザは、インデックスファイル持ち出し・戻し要求（１−４６）を発行する。
【００１６】
ユーザからのインデックスファイル持ち出し・戻し要求（１−４６）に対しては、ファイルコピーコマンド（１−７）が、インデックスファイルＹＹ（１−２９）をＵＳＢ機器（１−４７）などの外部記憶装置にコピーする処理を実行する。また、ファイルツリー不可視化コマンド（１−５）及びファイルツリー構造復元コマンド（１−６）は、直列ディレクトリ管理ファイルＸＸ（１−２８）及びインデックスファイルＹＹ（１−２９）を、作成・削除するために、ファイルアクセスＡＰＩ（１−８）を使用する。
【００１７】
一方、カーネル空間（１−３）は、オペーレーティングシステムの基幹部分（カーネルプロセス）が展開されるアドレス空間である。カーネル空間（１−３）には、ディレクトリ構造直列化部（１−９）と、ディレクトリ内検索部（１−１０）と、ディレクトリ構造復元部（１−１１）と、ｉノードアクセス部（１−１２）と、ｉノードデータブロック情報付替部（１−１３）と、直列ディレクトリ管理ファイルアクセス部（１−１４）と、通常ファイルアクセス部（１−１５）と、ｉノード取得・解放部（１−４８）とが展開される。なお、ｉノードは、ディレクトリおよびファイルごとに存在する当該ディレクトリまたはファイルの管理情報（メタデータ）である。ｉノードのデータ構造については後述する。
【００１８】
ディレクトリ構造直列化部（１−９）は、所定のディレクトリの配下のファイルツリー構造を不可視化するための処理を実行する。ディレクトリ内検索部（１−１０）は、指定されたディレクトリを検索するための処理を実行する。ディレクトリ構造復元部（１−１１）は、ファイルツリー構造を復元するための処理を実行する。ディレクトリ構造復元部（１−１１）は、復元部の一例である。ｉノードアクセス部（１−１２）は、ｉノードブロック領域（１−１８）上の各ｉノード（詳しくは後述する）にアクセスするための処理を実行する。ｉノードアクセス部（１−１２）は、読み出し部の一例である。ｉノードデータブロック情報付替部（１−１３）は、ｉノードが持つデータブロック情報を他のｉノードのデータブロック情報に付け替える処理を実行する。
【００１９】
直列ディレクトリ管理ファイルアクセス部（１−１４）は、次の２つの処理を実行する。すなわち、直列ディレクトリ管理ファイルアクセス部（１−１４）は、不可視化するファイルツリーの管理情報を、シーケンシャルに直列ディレクトリ管理ファイルＸＸ（１−２８）のデータＸＸ（１−４２）に書き込むための処理を実行する。また、直列ディレクトリ管理ファイルアクセス部（１−１４）は、直列ディレクトリ管理ファイルＸＸ（１−２８）に対する書き込み処理の際にインデックス情報をインデックスファイルＹＹ（１−２９）に対して書き込むための処理とを実行する。直列ディレクトリ管理ファイルアクセス部（１−１４）は、管理ファイル生成部、インデックス生成部、管理ファイル記録部およびインデックス記録部の一例である。
【００２０】
通常ファイルアクセス部（１−１５）は、一般的なファイルシステム操作でユーザが要求する、ファイルの作成、削除やファイルのリード・ライトを行う機能を持ち、ディスク領域（１−４）上を実際に操作する処理を実行する。通常ファイルアクセス部（１−１５）は、インデックス移動部の一例である。ｉノード取得・解放部（１−４８）は、新規ｉノードを取得したり、ｉノードを解放したりするための処理を実行する。ｉノード取得・解放部（１−４８）は、削除部の一例である。
【００２１】
また、ディスク領域（１−４）は、ファイルツリーを構成するディレクトリやファイルの実体である管理情報やデータが、ディスク装置等の記憶装置上に物理的に記録されている領域である。ディスク領域（１−４）は、全体管理情報領域（１−１６）、論理ブロックマップ領域（１−１７）、ｉノードブロック領域（１−１８）、及びデータブロック領域（１−１９）の各領域を有する。
【００２２】
全体管理情報領域（１−１６）は、一般的なファイルシステムで、スーパーブロックと呼ばれ、ファイルシステム全体の情報を管理して記録する領域である。ここで、ファイルシステム全体の情報は、例えば、ファイルの使用容量、ファイルシステムの空き容量、ファイルシステムが使用されているかいないかのフラグなどである。
【００２３】
論理ブロックマップ領域（１−１７）は、ファイルシステムとして使用しているディスク領域（１−４）上で、物理ブロックが使用されているかいないかを判断するために管理されているマップ情報が記録される領域である。論理ブロックマップ領域（１−１７）は、一般的なファイルシステムでは、０と１で物理ブロックの使用状況を表す論理的なビットマップ情報を格納する。
【００２４】
ｉノードブロック領域（１−１８）は、ｉノードが記録されているディスク領域（１−４）内の領域である。ｉノードとは、ファイルツリーのディレクトリやファイル自体を管理するための構造である。ファイルツリー上のディレクトリやファイルには個々にｉノードが割り当てられている。
【００２５】
データブロック領域（１−１９）は、データをブロック単位で記憶する領域である。
【００２６】
図１Ｃ及び図１Ｄは、ｉノードの構造を示した図である。ｉノードの基本構造（１−ｂ−１）は、ｉノード番号とｉノードタイプと属性情報とから構成されている。ｉノード番号はｉノードの識別するための番号である。ｉノードタイプはｉノードの種類を示す情報である。本実施形態において、ｉノードタイプは、ディレクトリとファイルとの２種類である。そして、属性情報は、ｉノードタイプによって異なる構造で属性を表す情報である。ｉノード番号及びｉノードタイプは、ｉノードを管理するための管理情報であり、ｉノードタイプによらない共通な情報である。
【００２７】
図１Ｃに示したように、ｉノードタイプがディレクトリを示すｉノード（１−ｂ−２）の場合、ｉノード（１−ｂ−２）は、属性情報として、１又は複数のエントリ情報（１−ｂ−３）を有している。エントリ情報（１−ｂ−３）は、ディレクトリのエントリ情報、すなわち、ディレクトリ配下直に存在するディレクトリとファイルについての情報である。エントリ情報（１−ｂ−３）には、ディレクトリ配下のファイルディレクトリのｉノード番号、エントリ名、エントリ長が格納されている。
【００２８】
一方、図１Ｄに示したように、ｉノードタイプがファイルを示すｉノード（１−ｂ−４）の場合、ｉノード（１−ｂ−４）は、属性情報として、ファイルアクセス権、ファイルサイズ、ファイルのデータブロック情報などの情報を持つ。ｉノード（１−ｂ−４）の属性情報には、他に、ユーザＩＤ（ユーザ識別情報）、グループＩＤ、リンク数、作成時刻、アクセス時刻などの情報を含めることができる。ファイルのデータブロック情報は、ブロックアドレス及びブロックサイズを示す情報である。このブロックサイズとは、ファイルシステムで一意に決まっている論理ブロックサイズ単位の数である。また、ｉノード（１−ｂ−４）が持つデータブロック情報は、複数のデータブロック情報を持つことができる。つまり、ファイルが１つであってもそのデータは、データブロック領域（１−１９）上の複数の記憶領域に分けて格納することができる。図１Ｄに示した例では、１つのファイルが３つのデータＡＡ、ＢＢ及びＣＣに分割され、分散してデータブロック領域（１−１９）に格納されている。
【００２９】
図１Ｂは、ファイルシステム（１−１）にユーザがアクセスした場合に、ユーザから見えるファイルツリー（１−２０）の一例である。ユーザから見えるファイルツリー（１−２０）は、ユーザがファイルシステム（１−１）を使用する際に、ユーザアクセス空間（１−２）にアクセスしてディレクトリやファイルを操作するときにユーザが認識することができる情報である。ユーザから見えるファイルツリー（１−２０）は、ディレクトリやファイルの論理的なファイルツリーである。ユーザから見えるファイルツリー（１−２０）の実体は、ディスク領域（１−４）上の各領域である。ユーザから見えるファイルツリー（１−２０）は、カーネル空間（１−３）の動作によって、ｉノードブロック領域（１−１８）の各ｉノードと、ｉノードが持つデータブロック情報から、データブロック領域（１−１９）上のデータを読み込み、ユーザに見せている情報である。
【００３０】
図１Ｄで例示したようにｉノードが持つデータブロック情報が複数ある場合、ファイルシステム（１−１）は、その複数のデータを１つのファイルとして見せている。以下では、図１Ｂに示したユーザから見えるファイルツリー（１−２０）を例にしてファイルシステム（１−１）の構成及び動作について説明する。図１Ｂに示したユーザから見えるファイルツリー（１−２０）は、ディレクトリＡ（１−２１）の配下にディレクトリＢ（１−２２）とディレクトリＣ（１−２３）とを持つ。ユーザから見えるファイルツリー（１−２０）は、さらに、ディレクトリＢ（１−２２）の配下にディレクトリＤ（１−２４）とファイルＥ（１−２５）とを持ち、ディレクトリＤ（１−２４）の配下にファイルＦ（１−２６）とファイルＧ（１−２７）とを持つ。
【００３１】
ユーザから見えるファイルツリー（１−２０）上のすべてのディレクトリ、ファイルである、ディレクトリＡ（１−２１）、ディレクトリＢ（１−２２）、ディレクトリＣ（１−２３）、ディレクトリＤ（１−２４）、ファイルＥ（１−２５）、ファイルＦ（１−２６）、及びファイルＧ（１−２７）には、当該ディレクトリ又はファイルの管理情報としてそれぞれ対応するｉノードが存在する。すなわち、ディスク領域（１−４）上の、ｉノードブロック領域（１−１８）にそれぞれ以下のｉノードがある。
【００３２】
ディレクトリＡ（１−２１）に対応する管理情報として、ディレクトリＡのｉノード（１−３０）が存在する。ディレクトリＢ（１−２２）に対応する管理情報として、ディレクトリＢのｉノード（１−３１）が存在する。ディレクトリＣに対応する管理情報として、ディレクトリＣのｉノード（１−３２）が存在する。ディレクトリＤ（１−２４）に対応する管理情報として、ディレクトリＤのｉノード（１−３３）が存在する。ファイルＥ（１−２５）に対応する管理情報として、ファイルＥのｉノード（１−３４）が存在する。ファイルＦ（１−２６）に対応する管理情報として、ファイルＦのｉノード（１−３５）が存在する。そして、ファイルＧ（１−２７）に対応する管理情報として、ファイルＧのｉノード（１−３６）が存在する。
【００３３】
ファイルツリー上のディレクトリは、その配下にディレクトリやファイルが格納される場合、実体としては、図１Ｃに示したように、ディレクトリのｉノードの中にエントリ情報を持っている。例えば、ディレクトリＡのｉノード（１−３０）の中に、ディレクトリＢ（１−２２）とディレクトリＣ（１−２３）のエントリ情報（ディレクトリ名など）を持っている。
【００３４】
また、ファイルツリー上のファイルは、ディスク領域（１−４）上では、データブロック領域（１−１９）上にデータブロックを持つ。そして、そのファイルのｉノードブロック領域（１−１８）上のｉノードの中に、ファイルの管理情報とそのデータブロック領域の内容のデータブロック情報（ブロック位置とサイズ）を持っている。例えば、ファイルＥ（１−２５）のデータがデータＡＡ（１−３９）だとすると、データブロック領域（１−１９）上にデータＡＡ（１−３９）が存在し、このデータブロック情報は、ファイルＥのｉノード（１−３４）の中に存在する。同様に、ファイルＦ（１−２６）のデータＢＢ（１−４０）のデータブロック情報は、ファイルＦのｉノード（１−３５）に存在する。また、ファイルＧ（１−２７）のデータＣＣ（１−４１）のデータブロック情報は、ファイルＧのｉノード（１−３６）に存在する。
【００３５】
本実施形態では、ファイルツリーの不可視化を実施する際に、ファイルツリー不可視化要求（１−４４）からファイルツリー不可視化コマンド（１−５）が実行される。ファイルツリー不可視化コマンド（１−５）が実行された場合、ディレクトリ構造直列化部（１−９）が、直列ディレクトリ管理ファイルアクセス部（１−１４）を用いて、直列ディレクトリ管理ファイルＸＸ（１−２８）と、インデックスファイルＹＹ（１−２９）とを作成する。直列ディレクトリ管理ファイルＸＸ（１−２８）は、不可視化するファイルツリーの管理情報をシーケンシャルなデータとして格納するためのファイルである。インデックスファイルＹＹ（１−２９）は、直列ディレクトリ管理ファイルＸＸ（１−２８）に書き込む際のインデックス情報を書き込むファイルである。
【００３６】
直列ディレクトリ管理ファイルＸＸ（１−２８）も、インデックスファイルＹＹ（１−２９）も、ファイルなので、ファイルが作成されると、ディスク領域（１−４）上では、ｉノードブロック領域（１−１８）に次のファイルが作成される。すなわち、ｉノードブロック領域（１−１８）に、直列ディレクトリ管理ファイルＸＸのｉノード（１−３７）と、インデックスファイルＹＹのｉノード（１−３８）とが格納される。直列ディレクトリ管理ファイルＸＸ（１−２８）は、データブロック領域（１−１９）に格納される内容として、データブロック領域（１−１９）上にデータＸＸ（１−４２）を有することになる。また、インデックスファイルＹＹ（１−２９）は、データブロック領域（１−１９）に格納される内容として、データブロック領域（１−１９）上にデータＹＹ（１−４３）を有することになる。
【００３７】
次に、図１Ａから図１Ｄを参照して説明したファイルシステム（１−１）の動作例について説明する。図２は、本実施形態のファイルシステム（１−１）の動作例を説明するための概要図である。ユーザＡ（２−１）は、サーバ（２−２）にログインし、ファイルシステム（１−１）を使用する。ユーザが使用するファイルシステムの例としては、図１Ｂのユーザから見えるファイルツリー（１−２０）と同じ構成である、ユーザから見えるファイルツリー（２−４）の構成とする。ここで、ユーザＡ（２−１）が、ディレクトリＢの配下すべてを不可視化するファイルツリー部分（２−３）として、ファイルツリーの不可視化要求（２−５）を実施したとする。これに対し、ファイルシステム（１−１）は、直列ディレクトリ管理ファイルＸＸ（２−７）とインデックスファイルＹＹ（２−８）を作成する。ファイルシステム（１−１）は、ディレクトリＢ配下のすべてのディレクトリやファイルの管理情報を、直列ディレクトリ管理ファイルＸＸ（２−７）のデータとしてシーケンシャルに書き込む。さらに、ファイルシステム（１−１）は、その書き込みの際のインデックス情報を、インデックスファイルＹＹ（２−８）に書き込む。
【００３８】
インデックス情報とは、ファイルツリーの管理情報を直列ディレクトリ管理ファイルＸＸ（２−７）にコピーした時の情報であり、コピーデータのオフセット値を持つ。インデックス情報の詳細は後で説明する。
【００３９】
不可視化実行後は、別のユーザＢ（２−１０）が同じサーバ（２−２）にログインし、同じファイルシステム（１−１）を使用しても、不可視化するファイルツリー部分（２−３）は既に見えない。ファイルシステム（１−１）では、残ったファイルツリーと直列ディレクトリ管理ファイルＸＸ（２−７）とインデックスファイルＹＹ（２−８）とが存在する、不可視化実行後のファイルツリー（２−１１）が見えるだけである。ファイルシステム（１−１）では、第三者にディレクトリＢ配下の不可視化するファイルツリー部分（２−３）は認識されなくなる。
【００４０】
さらに、ユーザＡ（２−１）が、不可視化実行後にインデックスファイル持ち出し要求（２−６）を実施すれば、ＵＳＢ機器（２−９）などに、インデックスファイルＹＹ（２−８）を持ち出すことができる。これにより、万一、第三者が直列ディレクトリ管理ファイルＸＸ（２−７）から、不可視化するファイルツリー（２−３）を認識しようと試みても、容易には認識できないため、ファイルツリーの不可視化を確実にすることができる。
【００４１】
次に、不可視化動作について詳細に説明する。図２の動作例の詳細動作として、図１Ａの全体構成図と、図１Ｂ〜図１Ｄと図３以降の図を使って、ユーザが見えるファイルツリー（１−２０）の、ディレクトリＢ（１−２２）配下を不可視化する動作について詳細に説明する。
【００４２】
図３は、ユーザが図１ＢのディレクトリＢ（１−２２）配下のファイルツリーを不可視化する場合の全体フロー図である。図４は、図３のステップＡ３−１の詳細フローである。図５は、図３のステップＡ３−２の詳細フローである。そして、図６は、ステップＡ３−３の詳細フローである。
【００４３】
図７Ａから図１２Ｂは、ｉノードブロック領域（１−１８）とデータブロック領域（１−１９）、ユーザが見えるファイルツリー（１−２０）の状態遷移がわかるようにした図である。さらに、図７Ａでは、直列ディレクトリ管理ファイルＸＸ（１−２８）のファイルデータを、直列ディレクトリ管理ファイルＸＸのファイルデータ（７−１）として示す。また、図７Ａでは、インデックスファイルＹＹ（１−２９）のファイルデータを、インデックスファイルＹＹのファイルデータ（７−２）として示す。このファイルデータとは、いずれも、ユーザから見えるファイルツリー（１−２０）（図７Ｂ）上で、ユーザがファイル内容を見た時に見えるデータ内容である。
【００４４】
図３において、ユーザがディレクトリＢ（１−２２）配下のファイルツリーを不可視化する場合、ファイルツリー不可視化要求（１−４４）が、ファイルツリー不可視化コマンド（１−５）を実行する（ステップＡ１）。ファイルツリー不可視化コマンド（１−５）は、ファイルアクセスＡＰＩ（１−８）により、通常ファイルアクセス部（１−１５）を用いて、直接直列ディレクトリ管理ファイルＸＸ（１−２８）とインデックスファイルＹＹ（１−２９）を作成する（ステップＡ２）。このステップＡ２時点の状態遷移図が、図７Ａ及び図７Ｂである。ディレクトリＡ配下に、直列ディレクトリ管理ファイルＸＸ（１−２８）とインデックスファイルＹＹ（１−２９）があるだけで、これらのファイルのｉノードのデータブロック領域（１−１９）の内容には何も書かれていない状態である。図７Ａでは、これらの内容を、直接直列ディレクトリ管理ファイルＸＸのファイルデータ７−１及びインデックスファイルＹＹのファイルデータ７−２として示した。また、ｉノードブロック領域（１−１８）には、例えば、ディレクトリＡをエントリ情報として持つルートディレクトリのｉノードが格納されている。また、ｉノードブロック領域（１−１８）には、例えば、ディレクトリＢとディレクトリＣとファイルＸＸとファイルＹＹとをエントリ情報として持つディレクトリＡのｉノードが格納されている。
【００４５】
図３に戻り、ファイルツリー不可視化コマンド（１−５）は、その後に、ディレクトリ構造直列化部（１−９）によって不可視化処理を開始する（ステップＡ３）。ディレクトリ構造直列化部（１−９）は、先頭ディレクトリ不可視化処理（ステップＡ３−１）、全ファイルツリー不可視化処理（ステップＡ３−２）、及び不可視化するファイルツリーのｉノード削除処理（ステップＡ３−３）をこの順に行う。
【００４６】
図４で、ステップＡ３−１の説明をする。ディレクトリ構造直列化部（１−９）は、まず不可視化の対象となる先頭ディレクトリであるディレクトリＢ（１−２２）の絶対パス名から、その親ディレクトリ名、すなわち、ディレクトリＡ（１−２１）を取得する（ステップＢ１−１）。そしてディレクトリ構造直列化部（１−９）は、親ディレクトリ名をからディレクトリ内検索部（１−１０）により、そのｉノードである、ディレクトリＡ（１−２１）のｉノード（１−３０）を、ｉノードブロック領域（１−１８）から検索する（ステップＢ１−２）。同様に、ディレクトリ構造直列化部（１−９）は、ディレクトリ内検索部（１−１０）により、ディレクトリＢのディレクトリ名からディレクトリＢのｉノード（１−３１）を、ｉノードブロック領域（１−１８）から検索する（ステップＢ１−３）。
【００４７】
ディレクトリ内検索部（１−１０）は、一般的なファイルシステムが持っているディレクトリ内検索機能であり、ディレクトリ名やファイル名から、該当するディレクトリやファイルのｉノードを検索する機能である。
【００４８】
次に、ディレクトリ構造直列化部（１−９）は、直列ディレクトリ管理ファイルアクセス部（１−１４）によって、インデックスファイルＹＹ（１−２９）に、不可視化する先頭ディレクトリ名を書き込む（ステップＢ２）。
【００４９】
そして、ディレクトリ構造直列化部（１−９）は、ステップＢ１で検索したディレクトリＢのｉノード（１−３１）をｉノードアクセス部（１−１２）により読み込む（ステップＢ３）。ディレクトリ構造直列化部（１−９）は、直列ディレクトリ管理ファイルアクセス部（１−１４）によって、ディレクトリＢのｉノード（１−３１）を直列ディレクトリ管理ファイルＸＸ（１−２８）に追記する（ステップＢ４−１）。かつ、ディレクトリ構造直列化部（１−９）は、直列ディレクトリ管理ファイルアクセス部（１−１４）によって、追記後のインデックス情報Ｂをインデックスファイル（１−２９）に書き込む（ステップＢ４−２）。
【００５０】
このステップＢ４時点の状態遷移図が、図８である。直列ディレクトリ管理ファイルＸＸのファイルデータ（８−１）は、ディレクトリＢのｉノードが入っている状態である。インデックスファイルＹＹのファイルデータ（８−２）は、先頭ディレクトリ名と、インデックス情報Ｂが入っている状態である。なお、直列ディレクトリ管理ファイルＸＸのファイルデータ（８−１）は、図７Ａの直列ディレクトリ管理ファイルＸＸのファイルデータ（７−１）に対応する。また、インデックスファイルＹＹのファイルデータ（８−２）は、図７ＡのインデックスファイルＹＹのファイルデータ（７−２）に対応する。
【００５１】
次に、図５で、図３のステップＡ３−２の説明をする。まず、ディレクトリ構造直列化部（１−９）は、変数ｍ、Ｎ及びｉを０に初期化するとともに、ディレクトリ名を格納する配列Ｍをブランクに初期化する（ステップＣ０−１）。次にディレクトリ構造直列化部（１−９）は、配列Ｍの先頭要素にＭ［０］に先頭ディレクトリ名をコピーする（ステップＣ０−２）。次にディレクトリ構造直列化部（１−９）は、変数ｉと変数ｍを比較し（ステップＣ０−３）、変数ｉ＞変数ｍの場合（ステップＣ０−３で「Ｙｅｓ」の場合）は、ステップＡ３−２の処理を終了する。一方、変数ｉ＞変数ｍでない場合（ステップＣ０−３で「Ｎｏ」の場合）、ディレクトリ構造直列化部（１−９）は、配列Ｍの要素Ｍ［ｉ］に格納されているディレクトリの配下にエントリがあるか否かを判定する（ステップＣ０−４）。ディレクトリ構造直列化部（１−９）は、ディレクトリの配下にエントリがない場合（ステップＣ０−４で「Ｎｏ」の場合）、変数ｉを１だけ増分して（ステップＣ０−５）、ステップＣ０−４へ戻る。他方、Ｍ［ｉ］のディレクトリの配下にエントリがある場合（ステップＣ０−４で「Ｙｅｓ」の場合）、ディレクトリ構造直列化部（１−９）は、エントリを読み込み、変数Ｎにエントリ数を格納する（ステップＣ１）。次にディレクトリ構造直列化部（１−９）は、変数Ｎが０以外であるか否かを判定する（ステップＣ０−６）。ディレクトリ構造直列化部（１−９）は、変数Ｎが０以外でない場合（ステップＣ０−６で「Ｎｏ」の場合）、変数ｉを１だけ増分して（ステップＣ０−５）、ステップＣ０−４へ戻る。他方、変数Ｎが０以外の場合（ステップＣ０−６で「Ｙｅｓ」の場合）、ディレクトリ構造直列化部（１−９）は、ディレクトリ内検索部（１−１０）によって、該当エントリのｉノードを検索する（ステップＣ２）。次に、ディレクトリ構造直列化部（１−９）は、ｉノードアクセス部（１−１２）によって、該当エントリのｉノードを読み込む（ステップＣ３）。つまり、ｉノードアクセス部（１−１２）は、不可視化の対象となるディレクトリの配下のファイルの管理情報を逐次読み出す。次に、ディレクトリ構造直列化部（１−９）は、直列ディレクトリ管理ファイルアクセス部（１−１４）によって、直列ディレクトリ管理ファイルＸＸ（１−２８）に該当エントリのｉノードをコピーする（ステップＣ４、ステップＣ４−１）。つまり、直列ディレクトリ管理ファイルアクセス部（１−１４）は、ステップＣ３で読み込んだｉノード毎に、当該ｉノードを直列ディレクトリ管理ファイルＸＸ（１−２８）にに逐次追記する。次に、ディレクトリ構造直列化部（１−９）は、直列ディレクトリ管理ファイルアクセス部（１−１４）によって、インデックスファイルＹＹ（１−２９）にインデックス情報を書き込む（ステップＣ４、ステップＣ４−２）。
つまり、直列ディレクトリ管理ファイルアクセス部（１−１４）は、ステップＣ３で読み込んだｉノード毎に、直列ディレクトリ管理ファイルＸＸ（１−２８）における当該ｉノードの書き込み位置を、インデックスファイルＹＹ（１−２９）に逐次追記する。次にディレクトリ構造直列化部（１−９）は、該当エントリがファイルか否かを判定する（ステップＣ０−７）。ディレクトリ構造直列化部（１−９）は、該当エントリがファイルの場合（ステップＣ０−７で「Ｙｅｓ」の場合）、次の処理を実行する。すなわち、ディレクトリ構造直列化部（１−９）は、ノードデータブロック情報付替部（１−１３）により該当エントリのｉノードのデータブロック情報を、直列ディレクトリ管理ファイルのｉノード（１−３７）のデータブロック情報に付け替える（ステップＣ５）。ステップＣ５の後、ディレクトリ構造直列化部（１−９）は、変数Ｎを１だけ減分して（ステップＣ０−８）、ステップＣ０−６へ戻る。他方、該当エントリがファイルでない場合（ステップＣ０−７で「Ｎｏ」の場合）、ディレクトリ構造直列化部（１−９）は、変数ｍを１だけ増分し、要素Ｍ［ｍ］にディレクトリ名をコピーする（ステップＣ０−９）。そして、ステップＣ０−９の後、ディレクトリ構造直列化部（１−９）は、変数Ｎを１だけ減分して（ステップＣ０−８）、ステップＣ０−６へ戻る。
【００５２】
図１Ｂに示したファイルツリーの例では、ディレクトリ構造直列化部（１−９）は、まず、要素Ｍ［０］にディレクトリＢのディレクトリ名をコピーする（ステップＣ０−１）。その後、ディレクトリ構造直列化部（１−９）は、ディレクトリＢのｉノード（１−３１）のエントリ情報を読み込み、配下のエントリ数を確認する（ステップＣ１）。この場合、ディレクトリ構造直列化部（１−９）は、ディレクトリＢ（１−２２）の配下にディレクトリＤ（１−２４）とファイルＥ（１−２５）とが存在することを認識する（ステップＣ１）。したがって、ディレクトリ構造直列化部（１−９）は、ディレクトリ内検索部（１−１０）によって、ディレクトリＤのｉノード（１−３３）を検索する（ステップＣ２）。続いてディレクトリ構造直列化部（１−９）は、ディレクトリＤのｉノード（１−３３）をｉノードアクセス部（１−１２）によって読み込む（ステップＣ３）。ディレクトリ構造直列化部（１−９）は、直列ディレクトリ管理ファイルアクセス部（１−１４）によって、読み込んだｉノードの情報を直列ディレクトリ管理ファイルＸＸ（１−２８）に追記する（ステップＣ４−１）。次にディレクトリ構造直列化部（１−９）は、直列ディレクトリ管理ファイルアクセス部（１−１４）によって、直列ディレクトリ管理ファイルＸＸ（１−２８）に追記した時（ステップＣ４−１）のインデックス情報をインデックスファイル（１−２９）に追記する（ステップＣ４−２）。ディレクトリ構造直列化部（１−９）は、同様に、ファイルＥ（１−２５）に対してもステップＣ２からステップＣ４の処理を実行する。
【００５３】
この時点の状態遷移図が、図９である。直列ディレクトリ管理ファイルＸＸのファイルデータ（９−１）には、ディレクトリＢのｉノード、ディレクトリＤのｉノード、ファイルＥのｉノードの内容がシーケンシャルにライトされた状態である。インデックスファイルＹＹのファイルデータ（９−２）は、先頭ディレクトリ名と、インデックス情報Ｂと、インデックス情報Ｄと、インデックス情報Ｅとを格納している状態である。
【００５４】
図５に戻り、ここで、ファイルＥ（１−２５）は、ファイルであり、データブロック領域（１−１９）にデータＡＡ（１−３９）を持っている。このため、ディレクトリ構造直列化部（１−９）は、ｉノードデータブロック情報付替部（１−１３）により、ファイルＥのｉノード（１−３４）に格納されているデータＡＡ（１−３９）のデータブロック情報（ブロックアドレス、サイズ）を、直列ディレクトリ管理ファイルＸＸのｉノード（１−３７）のデータブロック情報内にコピーし追加する（ステップＣ５）。このように、ディレクトリ構造直列化部（１−９）は、このｉノードデータブロック情報付替部（１−１３）を使って、不可視化するファイルツリー上にファイルがあった場合は、次の処理を実行する。すなわち、ディレクトリ構造直列化部（１−９）は、この場合、そのファイルのｉノードのデータブロック情報を、直列ディレクトリ管理ファイルＸＸのｉノード（１−３７）のデータブロック情報内にコピーし追加する。これにより、直列ディレクトリ管理ファイルＸＸのｉノード（１−３７）のデータブロック情報は、データＸＸ（１−４２）と、データＡＡ（１−３９）とのデータブロック情報を持つことになる。この時点の状態遷移図が、図１０である。直列ディレクトリ管理ファイルＸＸのファイルデータ（１０−１）には、ディレクトリＢのｉノード、ディレクトリＤのｉノード、及びファイルＥのｉノードがシーケンシャルにコピーされた状態に加え、その後にデータＡＡが入った状態になる。直列ディレクトリ管理ファイルのｉノード（１０−３）のデータブロック情報には、データＸＸに加え、データＡＡのデータブロック情報が存在する状態になる。
【００５５】
図５に戻り、ディレクトリ構造直列化部（１−９）は、同様にして、不可視化するファイルツリー上のすべてのディレクトリ、ファイルについて、浅い階層のディレクトリ、ファイルから深い階層のディレクトリ、ファイルへ順に上記の処理を実行する。図１Ｂに示したように、ディレクトリＤ（１−２４）配下にはエントリがあるため、ディレクトリ構造直列化部（１−９）は、ディレクトリＤ（１−２４）配下のディレクトリエントリを読み込む。
この場合、読み込んだエントリはファイルＦ（１−２６）とファイルＧ（１−２７）のものであるため、ディレクトリ構造直列化部（１−９）は、それぞれ、ステップＣ２からステップＣ５を実行する。ディレクトリ構造直列化部（１−９）は、ファイルＦのｉノード（１−３５）を、図１Ｂに示した直列ディレクトリ管理ファイルＸＸ（１−２８）にコピーする。ディレクトリ構造直列化部（１−９）は、さらに、ファイルＦのｉノード（１−３５）が持つデータブロック情報を直列ディレクトリ管理ファイルＸＸのｉノード（１−３７）のデータブロック情報内にコピーし追加する。
【００５６】
また、ディレクトリ構造直列化部（１−９）は、ファイルＧのｉノード（１−３６）も、直列ディレクトリ管理ファイルＸＸ（１−２８）にコピーする。ディレクトリ構造直列化部（１−９）は、さらに、ファイルＧのｉノード（１−３６）が持つデータブロック情報も直列ディレクトリ管理ファイルＸＸのｉノード（１−３７）のデータブロック情報内にコピーし追加する。これにより、直列ディレクトリ管理ファイルＸＸのｉノード（１−３７）のデータブロック情報は、データＸＸ（１−４２）と、データＡＡ（１−３９）とデータＢＢ（１−４０）とデータＣＣ（１−４１）とのデータブロック情報を持つことになる。この時点の状態遷移図が、図１１である。直列ディレクトリ管理ファイルのｉノードのデータブロック情報には、データＸＸに加え、データＡＡ、データＢＢ、データＣＣのデータブロック情報が存在する状態（１１−５）になる。また、直列ディレクトリ管理ファイルＸＸのファイルデータ（１１−１）には、ディレクトリＢのｉノード、ディレクトリＤのｉノード、ファイルＥのｉノード、ファイルＦのｉノード、及びファイルＧのｉノードがシーケンシャルにコピーされた状態になる。それに加え、直列ディレクトリ管理ファイルＸＸのファイルデータ（１１−１）には、その後にデータＡＡ、データＢＢ、及びデータＣＣが入った状態となる。また、インデックスファイルＹＹのファイルデータ（１１−２）は、先頭ディレクトリ名と、インデックス情報Ｂ、インデックス情報Ｄ、インデックス情報Ｅ、インデックス情報Ｆ、及びインデックス情報Ｇとが入っている状態である。
【００５７】
上記のように不可視化するディレクトリのファイル、ディレクトリの処理がすべて終了したら、ディレクトリ構造直列化部（１−９）は、図１４Ａに示したように、インデックスファイルＹＹ（１４−１）に終端を示す「−１」をライトする。
【００５８】
次に、図６を参照して、図３のステップＡ３−３の説明をする。ディレクトリ構造直列化部（１−９）は、ディレクトリＢ（１−２２）の親ディレクトリＡ（１−２１）のｉノード、つまり、ディレクトリＡ（１−２１）のｉノード（１−３０）のエントリ情報から、ディレクトリＢのエントリ情報を、ｉノードアクセス部（１−１２）によって削除する（ステップＤ１）。このディレクトリＢ（１−２２）は、図３のステップＡ３−１で検索した、不可視化する先頭ディレクトリである。その後、ディレクトリ構造直列化部（１−９）は、不可視化のために直接直列ディレクトリ管理ファイルＸＸ（１−２８）にｉノードの情報をコピーした元のｉノードをｉノード取得・解放部（１−４８）により全て解放する（ステップＤ２）。つまり、ｉノード取得・解放部（１−４８）は、ステップＣ３で読み出したｉノードをディスク領域（１−４）から削除する。図１２Ａ及び図１２Ｂは、ファイルツリーの不可視化が終了した時点の状態遷移図である。
【００５９】
図１２Ａに示したように、ディレクトリＢ配下のファイルツリーすべてのディレクトリ及びファイルのｉノードが、直列ディレクトリ管理ファイルＸＸ（１−２８）のデータＸＸ（１２−２）にシーケンシャルコピーされる。さらに、ディレクトリＢ配下のファイルツリー上のファイルのｉノードが持っていたデータブロック情報は、すべて、直列ディレクトリ管理ファイルＸＸ（１−２８）のｉノード（１２−４）のデータブロック情報として格納される。
【００６０】
また、図１２Ｂに示したように、ユーザから見えるファイルツリー（１２−１）としては、ディレクトリＡ配下に、直列ディレクトリ管理ファイルＸＸ（１−２８）とインデックスファイルＹＹ（１−２９）が見えるだけで、ディレクトリＢ配下のファイルツリーが、第三者には見えなくなる。
【００６１】
さらに、ｉノードアクセス部（１−１２）とｉノードデータブロック情報付替部（１−１３）とｉノード取得・解放部（１−４８）とは、既存ファイル間のデータコピー操作に有効となる。図１３Ａ〜図１３Ｃを使ってその有効性を示す。
【００６２】
図１３Ａでは、ユーザから見えるファイルツリー（１３−１）としてディレクトリＤ（１３−２）配下にファイルＡ（１３−３）とファイルＢ（１３−４）とがある。この時、ファイルシステム（１−１）のｉノードブロック領域（１３−７）には、ファイルＡ（１３−３）とファイルＢ（１３−４）のエントリ情報（１３−９）を持つディレクトリＤのｉノード（１３−８）と、ファイルＡのｉノード（１３−１０）とファイルＢのｉノード（１３−１２）とがある。
【００６３】
ファイルＡ（１３−３）のデータブロック領域の内容をデータＡＡ（１３−１５）とした場合、ファイルシステム（１−１）上でファイルＡ（１３−３）のデータは、データブロック領域（１３−１４）上のデータＡＡ（１３−１５）となる。この場合、ファイルＡのｉノード（１３−１０）のデータブロック情報（１３−１１）に、データＡＡ（１３−１５）のデータブロック情報が格納される。ファイルＢのデータブロック領域の内容をデータＢＢ（１３−１６）とした場合、ファイルＢ（１３−４）のデータは、データブロック領域（１３−１４）上のデータＢＢ（１３−１６）となる。この場合、ファイルＢのｉノード（１３−１２）に、データＢＢ（１３−１６）のデータブロック情報（１３−１２）が格納される。
【００６４】
ｉノードデータブロック情報付替部（１−１３）は、ｉノードが持つデータブロック情報を他のｉノードのデータブロック情報のデータブロック情報にコピーし追加する。したがって、データブロック領域上のデータブロックのアドレス（位置）を動かさずに、ファイルのデータを他のファイルに移動することができる。これを使って、ファイルＡのｉノード（１３−１０）が持つデータブロック情報（１３−１１）のデータＡＡを、ファイルＢのｉノード（１３−１２）のデータブロック情報（１３−１３）に追加書き込みする例について説明する。この場合、ファイルＢのｉノード（１３−１２）のデータブロック情報（１３−１３）は、データＢＢとデータＡＡのデータブロック情報を持つことになる。ただし、データブロック領域（１３−１４）上のデータＡＡ（１３−１５）とデータＢＢ（１３−１６）は動いていない（図１３Ｂ）。
【００６５】
さらに、データブロック情報を付け替えたファイルＡのｉノード（１３−１０）をｉノード取得・解放部（１−４８）により解放し、ｉノードアクセス部（１−１２）によりディレクトリＤのｉノード（１３−８）のエントリ情報（１３−９）から、ファイルＡのエントリ情報を削除する。この処理によって、ファイルシステム上の整合性も正しくなる。ユーザから見えるファイルツリー（１３−１）は、ディレクトリＤ（１３−２）配下にファイルＢ（１３−４）だけが存在し、ファイルＢの内容（１３−６）は、データＢＢ（１３−１６）とデータＡＡ（１３−１５）とが連続した内容になる（図１３Ｃ）。
【００６６】
つまり、以上の処理の結果は、ファイルＢ（１３−４）にファイルＡ（１３−３）を追加コピーして、ファイルＡ（１３−３）を削除したファイルシステム操作と同じ結果になる。ただし、データブロック領域（１３−１４）のデータを全く動かさない。つまり、データコピーのためのメモリやデータブロック領域を必要とせず、データブロックにアクセスする必要も無く、データブロックのコピーも発生しない。このため、ｉノードデータブロック情報付替部（１−１３）は、既存ファイル間のデータコピー操作のために、メモリやディスクのリソースを新たに必要としないという特徴と、処理が早い、という特徴を持つ。また、ｉノードデータブロック情報付替部（１−１３）は、ｉノードを直接操作してデータブロック情報を付け替えるが、データブロック情報を付け替えたｉノードを削除することで、ファイルシステムの整合性を保つことができる。つまり、ｉノードデータブロック情報付替部（１−１３）による処理結果は、ｉノード情報やブロック情報がファイルシステムとして矛盾していなく、すなわち、ファイルツリー上も正常な状態を保つことができる、という特長を持つ。
【００６７】
次に、インデックス情報について説明する。上述したように、インデックス情報は、インデックスファイルＹＹ（１−２９）に書き込まれる情報であり、かつ、ファイルツリーの管理情報を直列ディレクトリ管理ファイルＸＸ（１−２８）にコピーした時の情報であって、コピーデータのオフセット値を持つ。
【００６８】
図１２Ａ及び図１２Ｂに示した状態において、通常この状態で、第三者が不可視化したファイルツリー構造を即時に認識し、不可視化したツリー上のファイルが認識される可能性は無い。しかし、本実施形態では、さらに次の処理を実行することができる。すなわち、インデックスファイル持ち出し・戻し要求（１−４６）によって、ファイルコピーコマンド（１−７）を実行する。次に、通常ファイルアクセス部（１−１５）によって、インデックスファイルＹＹ（１−２９）をＵＳＢ機器（１−４７）などの持ち出し可能な媒体にコピーし持ち出す。なお、通常ファイルアクセス部（１−１５）は、インデックスファイルＹＹ（１−２９）を持ち出し可能な媒体にコピーすると、インデックスファイルＹＹ（１−２９）をディスク領域（１−４）から削除する。これによってより一層、不可視化したファイルツリー上のファイルを保護することが可能になる。
【００６９】
その際、直列ディレクトリ管理ファイルＸＸ（１−２８）だけがファイルツリー上に残ることになる。ただし、万一、直列ディレクトリ管理ファイルＸＸ（１−２８）のデータＸＸ（１−４２）を見られたとしても、そのファイル内容を見ただけで元のファイルツリー構造を認識することはできない。また、元のファイルツリー構造をインデックスファイルＹＹ（１−２９）無しで戻すことはできない。
【００７０】
インデックスファイルＹＹ（１−２９）は、直列ディレクトリ管理ファイルＸＸ（１−２８）内に、不可視化するファイルツリーのｉノードを追記した際に、その書き込み位置を記録するファイルである。その内容は、まず先頭には、不可視化の開始時に、図４のステップＢ２で不可視化するファイルツリーの先頭ディレクトリ名、本例では「ディレクトリＢ」が、書き込まれる。その後は、ファイルツリーのｉノードの情報を追記した後のインデックス情報であり、そのインデックス情報とは、直列ディレクトリ管理ファイルＸＸ（１−２８）内に追記する際の、オフセット位置である。すなわち、インデックスファイルＹＹ（１−２９）の形式（１４−１）は、図１４Ａのようになる。この場合、インデックスファイルＹＹは、先頭ディレクトリ名と、１又は複数のインデックス情報とを格納する。
【００７１】
直列ディレクトリ管理ファイルアクセス部（１−１４）は、ディレクトリやファイルの各ｉノードの情報を直列ディレクトリ管理ファイルＸＸ（１−２８）に対して追記した後に、インデックス情報をインデックスファイルＹＹ（１−２９）に書き込む。インデックス情報は、図１４Ｂに示した直列ディレクトリ管理ファイルＸＸのデータＸＸが持つ内容（１４−２）においては、各ｉノードの格納位置を示すオフセットａ〜ｅである。
【００７２】
直列ディレクトリ管理ファイルＸＸ（１−２８）内の先頭からの位置をオフセットとすると、ディレクトリＢのｉノードの情報を追記した時は、オフセット０である。ディレクトリＤのｉノードの情報を追記した時は、オフセットａである。ファイルＥのｉノードの情報を追記した時はオフセットｂである。ファイルＦのｉノードの情報を追記した時はオフセットｃである。そして、ファイルＧのｉノードの情報を追記した時はオフセットｅになる。
【００７３】
このインデックスファイルＹＹ（１−２９）により、直列ディレクトリ管理ファイルＸＸ（１−２８）に、ｉノードをコピーした際の、コピー時のオフセット位置を知ることができる。このため、インデックスファイルＹＹ（１−２９）と直列ディレクトリ管理ファイルＸＸ（１−２８）を合わせて使うことで、直列ディレクトリ管理ファイルＸＸ（１−２８）からｉノードを正しく読み出すことができる。このインデックスファイルＹＹ（１−２９）に格納されたインデックス情報と、不可視化で直列ディレクトリ管理ファイルＸＸ（１−２８）コピーしたｉノードとにより、ファイルツリー構造復元要求（１−４５）に応じて元のファイルツリー構造に戻すことが可能になる。
【００７４】
次に、ファイルシステム（１−１）において、不可視化したものを元のファイルツリー構造に戻す動作について説明する。図１Ａの全体構成図と、図１Ｂ〜図１Ｄと図１５以降の図を使って、次の動作について説明する。すなわち、図１Ｂに示したユーザが見えるファイルツリー（１−２０）上で、ディレクトリＢ配下のファイルツリーの不可視化が終了した状態から、元のファイルツリーに戻す場合の動作について詳細に説明する。
【００７５】
図１５は、不可視化したファイルツリーを復元する場合の全体フロー図である。図１６は、図１５のステップＥ３−１の詳細フローである。図１７は、図１５のステップＥ３−２の詳細フローである。図１８、図１９、図２１Ａ及び図２２Ａは、不可視化時に作成された直列ディレクトリ管理ファイルＸＸ（１−２８）とインデックスファイルＹＹ（１−２９）のファイルデータと、ｉノードブロック領域（１−１８）とデータブロック領域（１−１９）の状態遷移を示した図である。図２０、図２１Ｂ及び図２２Ｂは、ユーザが見えるファイルツリー（１−２０）の状態遷移がわかるようにした図である。
【００７６】
図１８は、ディレクトリＢ配下のファイルツリーの不可視化が終了した状態である。また、この場合のユーザが見えるファイルツリー（１−２０）の状態は、図１２Ｂに示したユーザが見えるファイルツリー（１２−１）である。ユーザから見えるファイルツリー（１２−１）は、ディレクトリＡ配下に、ディレクトリＣと、直列ディレクトリ管理ファイルＸＸとインデックスファイルＹＹが見える状態である。
【００７７】
図１８において、直列ディレクトリ管理ファイルＸＸのファイルデータ（１９−２）は、不可視化の際に書き込まれた次の情報を有している。すなわち、直列ディレクトリ管理ファイルＸＸのファイルデータ（１９−２）は、ディレクトリＢのｉノード、ディレクトリＤのｉノード、ファイルＥのｉノード、ファイルＦのｉノード、ファイルＧのｉノードとの各情報を有している。これらのｉノードを示す情報は、データブロック領域（１−１９）にデータブロックＸＸとして格納されている。さらに、直列ディレクトリ管理ファイルＸＸのファイルデータ（１９−２）は、直列ディレクトリ管理ファイルＸＸのｉノード（１−３７）のデータブロック情報内に各々のデータブロック情報を追加されたデータＡＡ、データＢＢ、データＣＣを持っている。
【００７８】
また、インデックスファイルＹＹのファイルデータ（１９−３）には、先頭ディレクトリ名であるディレクトリＢの後に、不可視化の際に各ｉノードを直列ディレクトリ管理ファイルＸＸにコピーした際のインデックス情報である、オフセット値が順番に入っている。
【００７９】
図１５において、ユーザが、不可視化したディレクトリＢ（１−２２）配下のファイルツリー構造を復元しようとする場合、どのディレクトリ配下に復元するか指定して、ファイルツリー構造復元要求（１−４５）を発行する。その際、通常は不可視化したパスと同じパスになるように指定するが、それ以外のディレクトリを指定することも可能である。
【００８０】
ファイルツリー構造復元要求（１−４５）は、ファイルツリー構造復元コマンド（１−６）を実行する（ステップＥ１）。次にファイルツリー構造復元コマンド（１−６）は、ファイルアクセスＡＰＩ（１−８）により、通常ファイルアクセス部（１−１５）を用いて、直接直列ディレクトリ管理ファイルＸＸ（１−２８）とインデックスファイルＹＹ（１−２９）を読み込む（ステップＥ２）。
【００８１】
ファイルツリー構造復元コマンド（１−６）は、その後に、ディレクトリ構造復元部（１−１１）によって復元処理を開始する（ステップＥ３）。ディレクトリ構造復元部（１−１１）は、復元処理を、先頭ディレクトリ復元処理（ステップＥ３−１）、及び全ファイルツリー構造復元処理（ステップＥ３−２）の順に行う。
【００８２】
図１６を参照して、ステップＥ３−１について説明する。まず、ディレクトリ構造復元部（１−１１）は、インデックスファイルＹＹ（１−２９）から、先頭ディレクトリ名を取得する（ステップＦ１）。先頭ディレクトリのｉノードの情報は直列ディレクトリ管理ファイルＸＸ（１−２８）の先頭（オフセット０）にかかれている。そのため、ディレクトリ構造復元部（１−１１）は、直列ディレクトリ管理ファイルＸＸ（１−２８）のオフセット０からｉノード情報を取得する（ステップＦ２）。この時、インデックスファイルからＹＹ（１−２９）取得した先頭ディレクトリ名は「ディレクトリＢ」であり、そのｉノード情報が直列ディレクトリ管理ファイルＸＸ（１−２８）のオフセット０から取得したｉノード情報となる。
【００８３】
次に、ディレクトリ構造復元部（１−１１）は、ｉノード取得・解放部（１−４８）により、ｉノードブロック領域（１−１８）から、新規ｉノードを取得する（ステップＦ３）。そして、ディレクトリ構造復元部（１−１１）は、ｉノードアクセス部（１−１２）により、直列ディレクトリ管理ファイルＸＸ（１−２８）から取得したディレクトリＢのｉノード情報を使用して、新しいディレクトリＢのｉノードの値を更新する。その際、新規ｉノードのｉノード固有の情報（ｉノード番号）は、残したまま、それ以外の直列ディレクトリ管理ファイルＸＸ（１−２８）から取得したディレクトリＢのｉノード情報を新規ｉノードに全てコピーする（ステップＦ４）。これが、復元したディレクトリＢのｉノードになる。ただし、内容はこの後の処理でも順次変更される。
【００８４】
さらに、ディレクトリ構造復元部（１−１１）は、ディレクトリ内検索部（１−１０）によって、新規に作成しているディレクトリＢの親ディレクトリ名を求める（ステップＦ５）。親ディレクトリはファイルツリー構造復元要求（１−４５）を発行した際のディレクトリとなる。この場合、その親のディレクトリ名はディレクトリＡとなる。ディレクトリ構造復元部（１−１１）は、親ディレクトリ名からディレクトリ内検索部（１−１０）により、先頭ディレクトリ（ディレクトリＢ）の親ディレクトリ、すなわち、ディレクトリＡのｉノードを検索する（ステップＦ５）。
【００８５】
次にディレクトリ構造復元部（１−１１）は、ｉノードアクセス部（１−１２）によって、親ディレクトリ、すなわち、ディレクトリＡのｉノードのエントリ情報に、先頭ディレクトリである、ディレクトリＢのエントリ情報を新たに追加する（ステップＦ６）。これで、ディレクトリＡの配下に、ディレクトリＢが復元されたことになる。
【００８６】
図１９は、先頭ディレクトリＢを復元した時点の状態遷移図である。図２０は、先頭ディレクトリＢを復元した時点のユーザから見えるファイルツリー（２０−１）を示す。ユーザから見えるファイルツリー（２０−１）上は、ディレクトリＡ配下に、ディレクトリＢが復元している。また、ｉノードブロック領域（２０−２）上では、ディレクトリＡのｉノード（２０−３）のエントリ情報にディレクトリＢのエントリ情報が追加され、また、ディレクトリＢのｉノード（２０−４）が追加された状態である。
【００８７】
次に、図１７を参照して、ステップＥ３−２について説明をする。まず、ディレクトリ構造復元部（１−１１）は、各変数ｏｆｆｎｕｍ、ｏｆｆｓｅｔ、ｏｌｄｉｎｕｍ、ｎｅｗｉｎｕｍ、ｆｉｌｅｎｕｍ、及びｍａｘｏｆｆと、配列Ｔ及び配列Ｓとを初期化する（ステップＧ０−１）。ここで、配列Ｔは読み込んだｉノード情報を入れておく配列であり、配列Ｔ［０］は先頭ディレクトリＢのｉノード情報をセットする。また、配列Ｓは新しく作成したｉノードのアドレスを要素とする。初期値は全て０である。次に、ディレクトリ構造復元部（１−１１）は、変数ｏｆｆｎｕｍと変数ｍａｘｏｆｆとを１だけ増分する（ステップＧ０−２。
【００８８】
次にディレクトリ構造復元部（１−１１）は、インデックスファイルＹＹ（１−２９）のｏｆｆｎｕｍ番目のオフセット値を変数ｏｆｆｓｅｔにセットする（ステップＧ１）。次にディレクトリ構造復元部（１−１１）は、変数ｏｆｆｓｅｔ＝１か否かを判定する（ステップＧ０−３）。ｏｆｆｓｅｔ＝１でない場合（ステップＧ０−３で「Ｎｏ」の場合）、ディレクトリ構造復元部（１−１１）は、次の処理を実行する。すなわち、ディレクトリ構造復元部（１−１１）は、直列ディレクトリ管理ファイルＸＸ（１−２８）内のオフセット位置ｏｆｆｓｅｔのｉノードを読み込み、配列Ｔ［ｏｆｆｎｕｍ］に読み込んだｉノードをセットする（ステップＧ２）。ディレクトリ構造復元部（１−１１）は、ステップＧ２の後、ステップＧ０−２の処理へ戻る。一方、ｏｆｆｓｅｔ＝１の場合（ステップＧ０−３で「Ｙｅｓ」の場合）、ディレクトリ構造復元部（１−１１）は、ｏｆｆｎｕｍに１を格納する（ステップＧ０−４）。次にディレクトリ構造復元部（１−１１）は、ｏｆｆｎｕｍ＜ｍａｘｏｆｆであるか否かを判定する（ステップＧ０−５）。
【００８９】
ｏｆｆｎｕｍ＜ｍａｘｏｆｆでない場合（ステップＧ０−５で「Ｎｏ」の場合）、ディレクトリ構造復元部（１−１１）は、ステップＥ３−２の処理を終了する。一方、ｏｆｆｎｕｍ＜ｍａｘｏｆｆの場合（ステップＧ０−５で「Ｙｅｓ」の場合）、ディレクトリ構造復元部（１−１１）は、ｉノード取得・解放部（１−４８）によって、ｉノードブロック領域（１−１８）から、新規ｉノード取得する（ステップＧ３）。また、ディレクトリ構造復元部（１−１１）は、配列Ｓの要素Ｓ［ｏｆｆｎｕｍ］に取得したｉノードアドレスを格納する（ステップＧ３）。
【００９０】
ステップＧ３に続いて、ディレクトリ構造復元部（１−１１）は、変数ｏｌｄｎｕｍに配列Ｔ［ｏｆｆｓｅｔ］のノード番号を格納するとともに、変数ｎｅｗｉｎｕｍに新規ノード番号を格納する（ステップＧ４）。さらに、ディレクトリ構造復元部（１−１１）は、ｉノードアクセス部（１−１２）によって、新規ｉノードに配列Ｔ［ｏｆｆｎｕｍ］をコピーする（ステップＧ４）。次に、ディレクトリ構造復元部（１−１１）は、親ディレクトリのエントリ情報更新処理を実行する（ステップＧ５）。
【００９１】
ステップＧ５に続いて、ディレクトリ構造復元部（１−１１）は、配列Ｔ［ｏｆｆｎｕｍ］がファイルのｉノード情報か否かを判定する（ステップＧ０−６）。配列Ｔ［ｏｆｆｎｕｍ］がファイルのｉノード情報の場合（ステップＧ０−６で「Ｙｅｓ」の場合）、ディレクトリ構造復元部（１−１１）は、変数ｆｉｌｅｎｕｍを１だけ増分する（ステップＧ０−７）。次に、ディレクトリ構造復元部（１−１１）は、ファイルデータ復元処理を実行する（ステップＧ６）。次に、ディレクトリ構造復元部（１−１１）は、変数ｏｆｆｎｕｍを１だけ増分する（ステップＧ０−８）。一方、配列Ｔ［ｏｆｆｎｕｍ］がファイルのｉノード情報でない場合（ステップＧ０−６で「Ｎｏ」の場合）、ディレクトリ構造復元部（１−１１）は、ステップＧ０−６の後、ステップＧ０−８の処理へ進む。
【００９２】
本動作例では、ディレクトリ構造復元部（１−１１）は、インデックスファイルＹＹ（１−２９）に書かれている、直列ディレクトリ管理ファイルＸＸ（１−２８）にｉノード情報を書き込んだ際のオフセット値を読み込む（ステップＧ１）。その後、ディレクトリ構造復元部（１−１１）は、直列ディレクトリ管理ファイルＸＸ（１−２８）のオフセット位置からｉノード情報を読み込み、配列Ｔに読み込んだ情報をセットする（ステップＧ２）。この配列Ｔは、“直列ディレクトリ管理ファイルＸＸ（１−２８）から取得したｉノード情報の配列”である。ディレクトリ構造復元部（１−１１）は、これを、インデックスファイルＹＹ（１−２９）内に書かれているオフセット値が無くなるまで繰り返し実行する。すなわち、ディレクトリ構造復元部（１−１１）は、オフセット値が終端を示す−１となるまで、直列ディレクトリ管理ファイルＸＸ（１−２８）のオフセット位置からｉノード情報を読み込み、配列Ｔにセットする。
【００９３】
次に、ディレクトリ構造復元部（１−１１）は、ｉノード取得・解放部（１−４８）により、ｉノードブロック領域（１−１８）から、新規ｉノードを取得する。また、取得したｉノードのアドレスを格納する配列Ｓ（以後、取得したｉノードのアドレス配列）を用意し、その配列のｎ番目の要素に格納する。（ステップＧ３）。この新規ｉノードに書かれている内容を、配列Ｔのｎ番目の要素の内容で更新する。更新する情報は、ｉノード固有の情報（ｉノード番号）以外の内容全てである。その際、ディレクトリ構造復元部（１−１１）は、ｉ新規ｉノードのｉノード番号、ｉノード情報の配列のｎ番目の要素に入っているｉノード番号はそれぞれ変数に格納する（ステップＧ４）。
【００９４】
さらに、ディレクトリ構造復元部（１−１１）は、ステップＧ４で変数に格納した配列Ｔのｎ番目の要素に入っていたｉノード番号をキーとして、これをエントリ情報に持つｉノード情報を配列Ｔの中から検索する。次にディレクトリ構造復元部（１−１１）は、検索された配列の要素と同じ添え字をもつ“取得したｉノードのアドレス配列”Ｓの要素から、親ディレクトリのアドレスを決定する。そして、ディレクトリ構造復元部（１−１１）は、ｉノードアクセス部（１−１２）を使用して、親ディレクトリのｉノードのエントリ情報に格納されているエントリ情報から、配列Ｔのｎ番目の要素に入っているｉノード番号と同じｉノード番号を探し、そのｉノード番号を新規ｉノードのｉノード番号に書き変える（ステップＧ５）。
【００９５】
さらに、ディレクトリ構造復元部（１−１１）は、配列Ｔのｎ番目の要素であるｉノード情報がファイルのｉノードの場合は、ファイルデータ復元処理を実行し、ファイルのデータブロック情報を更新する（ステップＧ６）。データブロック情報を更新するということは、ｉノード情報の配列ｎ番目のデータブロック情報で示されるデータが現在データブロック領域上のどこに格納されているか調べ、ステップＧ３で新規に取得したｉノードのデータブロック情報を、そのデータブロック情報の情報で更新することである。配列Ｔのｎ番目のデータブロック情報は、ファイル不可視化要求実行時に、直列ディレクトリ管理ファイルＸＸのｉノード（１−３７）のデータブロック情報に追加されている。配列Ｔのｎ番目のデータブロック情報は、ファイル不可視化要求実行時にデータブロックは動かさずに、直列ディレクトリ管理ファイルＸＸの全体データの一部の形として格納されている。しかしファイルツリーを不可視化してからファイルツリー構造復元要求が実行されるまでの間に、次のような場合が考えられる。すなわち、ファイルシステムのデフラグメント処理により、データブロック領域上のデータが異なる領域に移動されている場合である。このファイルシステムのデフラグメント処理とは、ファイルシステムの空きブロックを効率化して大きくする処理である。この場合には、直列ディレクトリ管理ファイルのｉノードのデータブロック情報が変更されていることがある。ただし、デフラグメント処理は、論理ブロックサイズ単位での移動、かつ、論理データの連続性は変わらないように移動するので、この点を考慮して、移動状況に応じてファイルのデータブロック情報を更新すればよい。
【００９６】
以下、“直列ディレクトリ管理ファイルＸＸ（１−２８）から取得したｉノード情報の配列”である配列Ｔのｎ番目の要素のｉノード情報上のデータブロック情報を検索し格納する手順を説明する。
【００９７】
前提としてｉノードの中のデータブロック情報は、ブロックアドレスとサイズの組み合わせでデータブロック領域のデータの位置を示しており、その組み合わせを複数もつことができる。直列ディレクトリ管理ファイルＸＸのｉノード（１−３７）の中のデータブロック情報も、ブロックアドレスとサイズの組み合わせでデータブロック領域のデータの位置を示しており、その組み合わせを複数もつことができる。そのため、直列ディレクトリ管理ファイルＸＸのｉノード（１−３７）の情報の中にあるブロックアドレスとサイズの組み合わせを要素とする“データブロック情報配列”を作成しておく。
【００９８】
また、処理をする“データブロック情報配列”の要素を示す「処理データブロック」、と”処理中データブロック”が示すデータブロック領域のどの位置の処理をするか示すため、”処理データブロック”のブロックアドレスからのオフセットを示す「処理ブロック位置」を用意する。
【００９９】
“データブロック情報配列”の１番目の要素は、直列ディレクトリ管理ファイルＸＸ（１−２８）にファイルツリーのディレクトリやｉノードの管理情報をコピーした際のデータブロックのデータブロック情報である。そのため“データブロック情報配列”の２番目以降の要素に、配列Ｔのｎ番目の要素のｉノード情報上のデータブロック情報が順番に入っていることとなる。そのため、「処理データブロック」の初期値はデータブロック情報配列の２番目の要素、処理ブロック位置の初期値は０としてセットする。なお、これらは図１７のフローの最初に作成しておく。
【０１００】
新規に取得したｉノードのデータブロック情報のデータブロック総数は、配列Ｔのｎ番目の要素であるｉノード情報に含まれるデータブロック情報で示されるデータのサイズであり、配列Ｔのｎ番目の要素であるｉノード情報に含まれるデータブロック情報に含まれるサイズの総和数となる。そのため、この総和数を「ｉノードｎ番目のブロック総和数」として計算する。
【０１０１】
また、新規に取得したｉノードのデータブロック情報の中の更新すべきブロックアドレスとサイズの位置を“更新ブロック位置”、“更新サイズ位置”とし新規に取得したｉノードのデータブロック領域の先頭にセットする。
【０１０２】
以下、処理Ａ〜処理Ｃの処理を繰り返す。
【０１０３】
新規に取得したｉノードのデータブロック情報のブロックアドレスに格納する値は、「処理データブロック」内のブロックアドレスに「処理ブロック位置」を足したものとなるため、その値を更新ブロック位置に格納する。また、更新ブロック位置は更新ブロック位置に、更新ブロック位置＋（“ブロックアドレス＋サイズ”のサイズ）とする（処理Ａ）。
【０１０４】
ｉノードｎ番目のブロック総和数−（処理データブロック内のサイズ−処理ブロック位置）の値を求める。この値が０以上の場合、（処理データブロック内のサイズ−処理ブロック位置）の値を更新サイズ位置に格納する。また、処理データブロックは“データブロック情報配列”処理の次の要素に更新する。また、処理ブロック位置は０に更新する。また、ｉノードｎ番目のブロック総和数は、ｉノードｎ番目のブロック総和数−（処理データブロック内のサイズ−処理ブロック位置）に更新する。この値が負の値の場合、“処理データブロック”内のサイズを“更新サイズ位置”に格納しする。また“処理データブロック”は更新しない。また、“処理ブロック位置”は、（“処理データブロック”内のサイズ−“処理ブロック位置”）−“ｉノードｎ番目のブロック総和数”に更新するとともに処理Ａ〜処理Ｂの処理を抜ける（処理Ｂ）。
【０１０５】
次に、ｉノードｎ番目のブロック総和数は、“ｉノードｎ番目のブロック総和数”−（“処理データブロック”内のサイズ−“処理ブロック位置”に更新する。ｉノードｎ番目のブロック総和数が０以下になれば、処理Ａ〜処理Ｃの処理を抜ける（処理Ｃ）。
【０１０６】
処理Ａから処理Ｃの処理を抜けた場合、新規に取得したｉノードのデータブロック情報が正しく更新される。このステップＧ３からステップＧ６までの処理を、インデックスファイルＹＹ（１−２９）に書き込まれているオフセットの数分同様に実行することで、不可視化したファイルツリーを元に復元した状態になる。
【０１０７】
図２１Ａ及び図２１Ｂは、全ファイルツリー構造復元処理（ステップＥ３−２）が終了した時点の状態遷移図である。ユーザから見えるファイルツリー（２１−１）上は、ディレクトリＢ配下にディレクトリＤとファイルＥが復元され、ディレクトリＤ配下には、ファイルＦとファイルＧが復元され、不可視化実行前のファイルツリーに復元された状態である。ｉノードブロック領域（２１−２）上では、ディレクトリＤのｉノード（２１−３）、ファイルＥのｉノード（２１−４）、ファイルＦのｉノード（２１−５）、ファイルＧのｉノード（２１−６）が追加された状態である。また、ファイルＥのｉノード（２１−４）はデータブロック領域（２１−７）上のデータＡＡ（２１−８）を有している。また、ファイルＦのｉノード（２１−５）はデータＢＢ（２１−９）を有している。そして、ファイルＧのｉノード（２１−６）は、データＣＣ（２１−１０）を持っている状態である。
【０１０８】
最後に、ファイルツリー構造復元要求（１−４５）は、ファイルアクセスＡＰＩ（１−８）により、通常ファイルアクセス部（１−１５）を用いて、直列ディレクトリ管理ファイルＸＸ（１−２８）とインデックスファイルＹＹ（１−２９）を削除する。
【０１０９】
このようにして、不可視化したファイルシステムを、元のファイルツリー構造に復元する。図２２Ａ及び図２２Ｂが、その状態遷移図である。ユーザから見えるファイルツリー（２２−２）は、元のファイルツリーに戻った状態である。この場合、直列ディレクトリ管理ファイルＸＸとインデックスファイルＹＹを削除されている。そのため、ｉノードブロック領域（２２−２）では、ディレクトリＡのｉノード（２２−３）から、直列ディレクトリ管理ファイルＸＸとインデックスファイルＹＹのエントリ情報とが削除されている。また、直列ディレクトリ管理ファイルＸＸのｉノード（２２−４）とインデックスファイルＹＹのｉノード（２２−５）も解放されている。したがって、ファイルシステムとして整合性を保った状態で、かつ、元のファイルツリー構造を持つファイルシステムに復元したことになる。
【０１１０】
以上のように、本実施形態のファイルシステム（１−１）は、特定のディレクトリ配下のファイルツリー構造（ディレクトリ、ファイル）の管理情報すべてを、シーケンシャルなデータブロック領域の内容として、１つの管理ファイルとそのインデックスファイルに変換する。また、ファイルツリー上に存在するデータブロック領域の内容を、ファイルの管理情報が持つデータブロック情報から、その管理ファイルの管理情報のデータブロック情報にそのまま付け替えることで、シーケンシャル化した管理ファイルを作成する。本実施形態のファイルシステム（１−１）は、シーケンシャル化した管理ファイルを作成することで、ファイルシステムの整合性を保ちながら、部分的にファイルツリーを不可視化する。これにより、通常のファイルシステムアクセスでは、そのファイルツリー上にあった、ディレクトリ、ファイルは見えなくなり、アクセスできなくなる。また、ファイルツリー構造の管理情報をシーケンシャル化した管理ファイルと、そのインデックスファイルは、通常ファイルとしては存在が見えるものの、元のファイルツリー構造はそのままでは認識できない。さらに、インデックスファイルを外部に持ち出すことで、管理ファイルだけでは不可視化したファイルツリー構造を容易には認識できなくなる。これにより、属性によるアクセス制限やパスワード制限、暗号化を必要としなくとも、ファイルシステムアクセスでの、不可視化したファイルツリー構造、そのファイルツリー上のファイルの存在を第三者に認識できなくすることができる。また、データブロック領域の内容を保護できる。また、ファイルシステム上の特定のファイルツリーだけを不可視化するので、それ以外のファイルツリーには影響が無く、ファイルシステムとしての整合性も取れたまま、ファイルシステムを使用できる。
【０１１１】
また、本実施形態によれば、次の（１）〜（７）の効果が得られる。
【０１１２】
（１）本実施形態と異なり、ファイルツリー上のファイルを不可視化を、アクセス権限の強化や暗号化などの認証で行う場合、次の点が課題となる。すなわち、パスワードや暗号化キーが破られれば、簡単にファイルにアクセスされるという課題がある。これに対し、本実施形態によれば、不可視化するファイルツリーの管理情報を２つのファイルにし、管理情報を削除することで、認証によらずにファイルのアクセス保護を確実にすることができる。
【０１１３】
（２）本実施形態と異なり、セキュリティ保護のために、別領域にファイルをコピー、保存して、その領域をアクセスするには認証を必要とする方式には次の課題がある。すなわち、データブロック領域の内容の移動やコピーが発生するため、不可視化する際の実行時間が遅く、新たに使用するディスク領域が比較的多くなるという課題がある。これに対し、本実施形態によれば、ファイルシステムの管理情報だけを動かすので、次の効果が得られる。すなわち、本実施形態によれば、データブロック領域の内容の移動やコピーが発生せず、不可視化する際の実行時間が早く、新たに使用するディスク領域も少なくて済む。
【０１１４】
（３）本実施形態と異なり、管理情報自体を持ち出すことでファイルシステム認識不可にする方法では、その間はファイルシステムを使用できなくなるという課題があった。これに対し、本実施形態によれば、一部のファイルツリーの不可視化を行った状態でも、ファイルシステム全体の整合性には影響を与えないため、通常のファイルシステムとしてそのまま使用継続可能である。
【０１１５】
（４）本実施形態と異なり、ファイルツリーを別領域にアーカイブしてアーカイブファイルを作成する方法では、アーカイブするファイルはデータコピーする必要があった。これに対し、本実施形態によれば、ファイルシステムの一部ファイルツリーを、一時的なアーカイブファイル化する目的で使用する場合、新たに使用する領域は、ファイルシステムの管理情報をコピーする部分だけである。また、データブロック領域の内容は移動せずそのまま使用するので、アーカイブ用に使用する新たなデータ領域が少なく、実行時間も早くて済む。
【０１１６】
（５）本実施形態と異なり、バックアップするファイルをファイルツリーから検索して読み込みバックアップする方法では、ディレクトリ検索に時間が掛かるという課題がある。これに対し、本実施形態によれば、不可視化したファイルツリーのファイルが、すべて直接直列ディレクトリ管理ファイル１つに固まっている。このため、不可視化したファイルツリーのファイル群をバックアップする場合に、この直接直列ディレクトリ管理ファイルだけをバックアップすればよい。また、この場合、通常バックアップ時にはファイル探すために時間がかかるディレクトリ検索をほとんど必要としない。したがって、ファイルバックアップの時間を短縮化することができる。
【０１１７】
（６）本実施形態と異なり、ファイル間でデータ連結を行う場合、一旦別領域のメモリやディスクにファイルデータをリード・ライトしてからデータ連結行うファイル操作が必要となる。これに対して、本実施形態によれば、ｉノードデータブロック情報付替部が、ファイルのデータブロック内容を付け替えることができるので、ｉノードデータブロック情報付替部をシステムコールやライブラリとして用意しておけば、次の効果が得られる。すなわち、本実施形態によれば、ファイルシステム上で複数データブロック領域の内容を１つのファイルに連結してまとめるというファイル操作処理が、ファイルコピーを行わず、また、大量のディスク領域を使うことなく、早い時間で実行することができる。
【０１１８】
（７）また、本実施形態は、上述したようなパスワードやアクセス権限、暗号化の技術と合わせて使用することが可能なので、合わせて使用した場合、第三者にファイルをアクセスされる可能性がより小さい、より強固なセキュリティのファイルシステムを構成できる。
【０１１９】
次に、本発明に係る実施形態の基本構成について説明する。図２３は、本発明に係る記憶装置の基本構成を示す概略ブロック図である。本発明に係る記憶装置の基本構成は、図２３に示すとおりである。すなわち、記憶装置（１００）は、記憶領域（１０１）を基本構成とする。そして、記憶領域（１０１）は、直列ディレクトリ管理ファイル（１０２）とインデックスファイル（１０３）とを記憶する。直列ディレクトリ管理ファイル（１０２）は、不可視化するファイルツリーの管理情報をシーケンシャルなデータとして格納する。インデックスファイル（１０３）は、直列ディレクトリ管理ファイル（１０２）に管理情報を書き込む際のインデックス情報を格納する。この構成によれば、直列ディレクトリ管理ファイル（１０２）と、インデックスファイル（１０３）とを格納することで、認証によらずにファイルツリーを容易に不可視化することができる。
【０１２０】
なお、図２３に示した構成と、図１Ａ等に示した構成との対応関係は次の通りである。図２３の記憶装置（１００）は、図１Ａのディスク領域（１−４）に対応する。図２３の記憶領域（１０１）は、図１Ａのデータブロック領域（１−１９）に対応する。図２３の直列ディレクトリ管理ファイル（１０２）は、図１ＡのデータＸＸ（１−４２）及び図１Ｂの直列ディレクトリ管理ファイルＸＸ（１−２８）に対応する。図２３のインデックスファイル（１０３）は、図１ＡのデータＹＹ（１−４３）及び図１ＢのインデックスファイルＹＹ（１−４３）に対応する。また、管理情報は、図１Ａの各ｉノード（１−３０）〜（１−３６）に対応する。
【０１２１】
また、本発明に係るファイル管理装置の基本構成は、記憶装置に記録される、不可視化の対象となるディレクトリの配下のファイルの管理情報を逐次読み出す読み出し部と、読み出した前記管理情報毎に、当該管理情報を直列ディレクトリ管理ファイルに逐次追記する管理ファイル生成部と、読み出した前記管理情報毎に、前記直列ディレクトリ管理ファイルにおける当該管理情報の書き込み位置をインデックスファイルに逐次追記するインデックス生成部と、読み出した前記管理情報を前記記憶装置から削除する削除部とを基本構成とする。これにより、管理情報に代えて、直列ディレクトリ管理ファイルと、インデックスファイルとを記憶装置に記憶させることで、認証によらずにファイルツリーを容易に不可視化することができる。
【０１２２】
なお、本発明の実施の形態は上記のものに限定されない。例えば図１Ａに示した各構成要素を、適宜、統合したり、分割したりすることができる。また、記憶装置（１００）あるいはディスク領域（１−４）は、ネットワークを介して複数に分散された記憶領域を含むことができる。また、ファイルシステム（１−１）を構成するプログラムは、一部又は全部をコンピュータ読取可能な記録媒体や通信回線を介して頒布することができる。
【符号の説明】
【０１２３】
１−１  ファイルシステム
１−４  ディスク領域
１−１８  ｉノードブロック領域
１−１９  データブロック領域
１−３０〜１−３２  ディレクトリのｉノード
１−３３〜１−３６  ファイルのｉノード
１−３７  直列ディレクトリ管理ファイルＸＸのｉノード
１−３８  インデックスファイルＹＹのｉノード
１００  記憶装置
１０１  記憶領域
１０２  直列ディレクトリ管理ファイル
１０３  インデックスファイル
【図１Ａ】
2016189104.tif 000003
【図１Ｂ】
2016189104.tif 000004
【図１Ｃ】
2016189104.tif 000005
【図１Ｄ】
2016189104.tif 000006
【図２】
2016189104.tif 000007
【図３】
2016189104.tif 000008
【図４】
2016189104.tif 000009
【図５】
2016189104.tif 000010
【図６】
2016189104.tif 000011
【図７Ａ】
2016189104.tif 000012
【図７Ｂ】
2016189104.tif 000013
【図８】
2016189104.tif 000014
【図９】
2016189104.tif 000015
【図１０】
2016189104.tif 000016
【図１１】
2016189104.tif 000017
【図１２Ａ】
2016189104.tif 000018
【図１２Ｂ】
2016189104.tif 000019
【図１３Ａ】
2016189104.tif 000020
【図１３Ｂ】
2016189104.tif 000021
【図１３Ｃ】
2016189104.tif 000022
【図１４Ａ】
2016189104.tif 000023
【図１４Ｂ】
2016189104.tif 000024
【図１５】
2016189104.tif 000025
【図１６】
2016189104.tif 000026
【図１７】
2016189104.tif 000027
【図１８】
2016189104.tif 000028
【図１９】
2016189104.tif 000029
【図２０】
2016189104.tif 000030
【図２１Ａ】
2016189104.tif 000031
【図２１Ｂ】
2016189104.tif 000032
【図２２Ａ】
2016189104.tif 000033
【図２２Ｂ】
2016189104.tif 000034
【図２３】
2016189104.tif 000035