(57)【要約】【課題】  ディレクトリ、ファイルシステムといったグループ単位で、一つのトランザクションとしてファイルのＷＯＲＭ化などを行えるファイルシステムを提供することが課題である。【解決手段】  ＷＯＲＭ化にも対応できるコマンドファイル３１を備えて、ファイルシステム２０への書き込みによってコマンドファイル３１に登録されたファイルのＷＯＲＭ化コマンドを常駐するコマンドデーモンプロセス部１８が解釈し、ファイルのＷＯＲＭ化を行う。そして、１つのトランザクションとして複数ファイルならびにディレクトリ配下のファイルを対象としたＷＯＲＭ化処理を行う。加えて、コマンドファイル３１をファイルシステムの標準インタフェースで読み書き可能にする機構を設ける。そして、これらの機構によって実行したＷＯＲＭ化の操作結果をレポジトリファイル３２に登録する。【選択図】      図３
2006228056.tif 000002
【特許請求の範囲】
【請求項１】
計算機が、演算手段とプログラム及び処理対象データを記憶する手段と外部記憶装置にアクセスする手段とファイルシステムを制御する手段とネットワークと通信を行う手段とを少なくとも備えることによって構成されるファイルシステム制御装置であって、
前記ファイルシステムを制御する手段が、
標準的プロトコルによるファイルシステムへの命令の処理要求を取り次ぐためのファイルであるコマンドファイルを備え、
前記演算手段、前記プログラム及び処理対象データを記憶する手段並びに前記ネットワークと通信を行う手段を用いて、標準的なプロトコルによる前記コマンドファイルへの命令書き込みを受け付けて、
前記命令書き込みを契機としてファイルシステムへの命令の処理を開始すること
を特徴とするファイルシステム制御装置。
【請求項２】
前記ファイルシステムを制御する手段が、指定された保管期間内にはファイルに対する書き込み及び内容の更新を禁止してファイルの保存を行うＷＯＲＭ化機構を更に備えること
を特徴とする請求項１に記載のファイルシステム制御装置。
【請求項３】
前記ファイルシステムを制御する手段が、前記コマンドファイルへの命令書き込みを受理してファイルシステムへの命令を実行するために常駐するデーモンプログラムを更に備え、
前記デーモンプログラムが、所定時間ごとに非同期的に前記ファイルシステムへの命令を実行すること
を特徴とする請求項２に記載のファイルシステム制御装置。
【請求項４】
前記ファイルシステムを制御する手段が、前記コマンドファイルへの命令書き込みを受理して、
前記受理と同期的に前記ファイルシステムへの命令を実行開始すること
を特徴とする請求項２に記載のファイルシステム制御装置。
【請求項５】
前記ファイルシステムを制御する手段が、命令の実行結果を登録するためのレポジトリファイル及びレポジトリファイルへの登録手段を更に備え、
前記コマンドファイルへの命令書き込みを受理して、前記命令を実行した後、レポジトリファイルへの登録手段が実行結果を前記レポジトリファイルに登録すること
を特徴とする請求項３に記載のファイルシステム制御装置。
【請求項６】
前記ファイルシステムを制御する手段が、前記コマンドファイルへの命令書き込みを受理して、前記命令を実行した後、実行結果を返り値として要求を出した端末に返却すること
を特徴とする請求項４に記載のファイルシステム制御装置。
【請求項７】
前記ファイルシステムを制御する手段が、前記保管期間を経過していないファイルを削除命令の対象とする場合には、前記削除命令の実行を失敗させてエラー処理を行うこと
を特徴とする請求項２に記載のファイルシステム制御装置。
【請求項８】
前記ファイルシステムを制御する手段が、保管期間が設定されたことがあるファイルをファイル内容更新命令の対象とする場合には、前記ファイル内容更新命令の実行を失敗させてエラー処理を行うこと
を特徴とする請求項２に記載のファイルシステム制御装置。
【請求項９】
前記ファイルシステムを制御する手段が、
前記保管期間を経過していないファイルを削除命令の対象とする場合には、前記削除命令の実行を失敗させてエラー処理を行い、
保管期間が設定されたことがあるファイルを前記ファイル内容更新命令の対象とする場合には、前記ファイル内容更新命令の実行を失敗させてエラー処理を行うこと
を特徴とする請求項５に記載のファイルシステム制御装置。
【請求項１０】
演算手段とプログラム及び処理対象データを記憶する手段と外部記憶装置にアクセスする手段とファイルシステムを制御する手段とネットワークと通信を行う手段とを少なくとも備える計算機が実行するファイルシステム制御方法であって、
前記ファイルシステムを制御する手段が、
標準的なプロトコルによるファイルシステムへの命令の処理要求を取り次ぐためのファイルであるコマンドファイルを備えて機能させるステップと、
前記演算手段、前記プログラム及び処理対象データを記憶する手段並びに前記ネットワークと通信を行う手段を用いて、標準的なプロトコルによる前記コマンドファイルへの命令書き込みを受け付けるステップと、
前記命令書き込みを契機としてファイルシステムへの命令の処理を開始するステップを含むこと
を特徴とするファイルシステム制御方法。
【請求項１１】
前記ファイルシステムを制御する手段が、指定された保管期間内にはファイルに対する書き込み及び内容の更新を禁止してファイルの保存を行うＷＯＲＭ化のステップを更に備えること
を特徴とする請求項１０に記載のファイルシステム制御方法。
【請求項１２】
前記ファイルシステムを制御する手段が、前記コマンドファイルへの命令書き込みを受理してファイルシステムへの命令を実行するために常駐するデーモンプログラムを更に備えて機能させるステップと、
前記デーモンプログラムが、所定時間ごとに非同期的に前記ファイルシステムへの命令を実行するステップを更に備えること
を特徴とする請求項１１に記載のファイルシステム制御方法。
【請求項１３】
前記ファイルシステムを制御する手段が、前記コマンドファイルへの命令書き込みを受理した後に、
前記受理と同期的に前記ファイルシステムへの命令を実行開始するステップを更に備えること
を特徴とする請求項１１に記載のファイルシステム制御方法。
【請求項１４】
前記ファイルシステムを制御する手段が、実行結果を登録するためのレポジトリファイル及びレポジトリファイルへの登録手段を更に備え、
前記コマンドファイルへの命令書き込みを受理して、前記命令を実行した後、
レポジトリファイルへの登録手段が命令の実行結果を前記レポジトリファイルに登録するステップを更に備えること
を特徴とする請求項１２に記載のファイルシステム制御方法。
【請求項１５】
前記ファイルシステムを制御する手段が、前記コマンドファイルへの命令書き込みを受理して、前記命令を実行した後、
実行結果を返り値として要求を出した端末に返却するステップを更に備えること
を特徴とする請求項１３に記載のファイルシステム制御方法。
【請求項１６】
前記ファイルシステムを制御する手段が、前記保管期間を経過していないファイルを削除命令の対象とする場合には、前記削除命令の実行を失敗させてエラー処理を行うステップを更に備えること
を特徴とする請求項１１に記載のファイルシステム制御方法。
【請求項１７】
前記ファイルシステムを制御する手段が、保管期間が設定されたことがあるファイルを前記ファイル内容更新命令の対象とする場合には、前記ファイル内容更新命令の実行を失敗させてエラー処理を行うステップを更に備えること
を特徴とする請求項１１に記載のファイルシステム制御方法。
【請求項１８】
前記ファイルシステムを制御する手段が、
前記保管期間を経過していないファイルを削除命令の対象とする場合には、前記削除命令の実行を失敗させてエラー処理を行うステップと、
保管期間が設定されたことがあるファイルを前記ファイル内容更新命令の対象とする場合には、前記ファイル内容更新命令の実行を失敗させてエラー処理を行うステップを更に備えること
を特徴とする請求項１４に記載のファイルシステム制御方法。
【請求項１９】
演算手段とプログラム及び処理対象データを記憶する手段と外部記憶装置にアクセスする手段とファイルシステムを制御する手段とネットワークと通信を行う手段とを少なくとも備える計算機が実行するファイルシステム制御プログラムを記録した記憶媒体であって、
前記ファイルシステムを制御する手段が、
標準的なプロトコルによるファイルシステムへの命令の処理要求を取り次ぐためのファイルであるコマンドファイルを備えて機能させるステップと、
前記演算手段、前記プログラム及び処理対象データを記憶する手段並びに前記ネットワークと通信を行う手段を用いて、標準的なプロトコルによる前記コマンドファイルへの命令書き込みを受け付けるステップと、
前記命令書き込みを契機としてファイルシステムへの命令の処理を開始するステップを含むこと
を特徴とするファイルシステム制御プログラムを記録した記憶媒体。
【請求項２０】
前記ファイルシステムを制御する手段が、指定された保管期間内にはファイルに対する書き込み及び内容の更新を禁止してファイルの保存を行うＷＯＲＭ化のステップを更に備えること
を特徴とする請求項１９に記載のファイルシステム制御プログラムを記録した記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファイルシステム制御装置（ファイルサーバ）、ファイルシステム制御方法及びファイルシステム制御プログラムを含む記憶媒体に関する。
【背景技術】
【０００２】
従来から、ハードディスク装置やＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）装置に対して所定の期間は一旦書いたファイルなどを読むことはできても消したり修正したりすることができないように保護するＷＯＲＭ（Ｗｒｉｔｅ  Ｏｎｃｅ  Ｒｅａｄ  Ｍａｎｙ）機能は提供されていた。例えば、特許文献１による従来のファイルレベルのＷＯＲＭ化方式では、ＷＯＲＭ化対象ファイルの属性変更操作を契機として、ファイルのＷＯＲＭ化を行う。具体的には、対象ファイルのアクセス権をＲｅａｄ  Ｏｎｌｙ化する操作を契機としてＷＯＲＭ化を行う。ここでのＲｅａｄ  Ｏｎｌｙ化操作は、ファイルのアクセス権変更操作（例えばＵＮＩＸ（登録商標）の場合はCHMODコマンド操作）により実現可能である。
【特許文献１】米国特許第US2004-016858(A1)号明細書、“Write-Once-Read-Many Storage System and Method for Implementing the same”、William P. McGovern et al.、2004/9/23公開
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、従来方式では、ファイル単位のＷＯＲＭ化を一括して行えない。すなわち、ディレクトリ、ファイルシステムといったグループ単位で、１つのトランザクションとしてファイルのＷＯＲＭ化を行うことが困難である。そこで、本発明では、１つのトランザクションとしての一括処理、すなわち１つのコマンドで複数ファイル若しくはあるディレクトリ配下のファイルを対象にＷＯＲＭ化処理を可能にし、更に各種処理を１つのトランザクションとして実行することが可能なインタフェースを与えるファイルシステム制御装置、ファイルシステム制御方法及びファイルシステム制御プログラムを提供することを課題とする。
【課題を解決するための手段】
【０００４】
前記課題を解決するため、本発明では、ファイルシステムを制御する手段が、標準的なプロトコルから扱えるファイルシステムへの処理要求を取り次ぐためのファイルであるコマンドファイルを備える。ファイルシステムを制御する手段は、演算手段、記憶手段及びネットワークと通信を行う手段を用いて、前記標準的なプロトコルによる前記コマンドファイルへの命令書き込みを受け付けて、前記命令書き込みを契機としてファイルシステムへの命令の処理を開始する。
【０００５】
この構成によれば、ファイルシステムの標準的なプロトコルから利用可能なコマンドファイルを解釈することによって、１つのトランザクションで複数のファイルやディレクトリのＷＯＲＭ化を行うことができる。
【発明の効果】
【０００６】
本発明によれば、ファイルシステムの利用者は、ファイルシステムをコマンドファイルによって操作し、複数のファイル及びディレクトリを１つのトランザクションとしてＷＯＲＭ化することが可能になり、コマンドファイルを書き込み及び解釈を行う機構によって、標準的なプロトコルで前記のＷＯＲＭ化の機構を利用することができるようになる。
【発明を実施するための最良の形態】
【０００７】
これより、図を参照して本発明を実施するための最良の形態を説明する。まず、第１の実施形態として、非同期方式によるＷＯＲＭ化処理を行う実施形態を説明する。次に、第２の実施形態として、同期方式によるＷＯＲＭ化処理を行う実施形態を説明する。この際に第１の実施形態との違いを中心に説明する。最後に、その他の実施形態について補足説明する。
【０００８】
<<第１の実施形態>>（非同期方式による基本的実施形態）
第１の実施形態は、コマンドファイルに登録されたファイルＷＯＲＭ化コマンドを実行する際に、必要な処理を行うデーモンプロセス（ｄａｅｍｏｎ  ｐｒｏｃｅｓｓ、単にデーモンと記述することもある）を用いて非同期方式による処理を行うことを基本とする実施形態である。
【０００９】
〔装置の構成〕
図１を参照して、第１の実施形態についての装置の構成を説明する。図１はファイルシステム制御装置の構成を説明する図である。ファイルシステム制御装置１は、プロセッサ２、メモリ３、外部記憶Ｉ／Ｆ（インタフェース、以下、Ｉ／Ｆと表記）４及びネットワークＩ／Ｆ６を含んで構成される。図１に示す構成例においては、外部記憶装置７をファイルシステム制御装置１に含まない構成例を示しているが、外部記憶装置７を含む構成にしてもよい。
【００１０】
メモリ３には、外部記憶Ｉ／Ｆ制御部１１、ネットワークＩ／Ｆ制御部１２、ＮＦＳ（Ｎｅｔｗｏｒｋ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）制御部１３、ＣＩＦＳ（Ｃｏｍｍｏｎ  Ｉｎｔｅｒｎｅｔ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）制御部１４及びファイルシステム制御部５を含む。ファイルシステム制御部５は、ＷＯＲＭ制御部１５、コマンドファイル制御部１６、レポジトリファイル制御部１７及びコマンドデーモンプロセス部１８を含む。また、外部記憶装置７には、ファイルシステム２０を含む構成とする。
【００１１】
プロセッサ２は、例えば通常の演算処理機能を持つ中央演算装置によって構成することができる。メモリ３は、前記のプロセッサ２とバスラインを介して接続可能なメモリであればよい。外部記憶Ｉ／Ｆ４は、外部記憶装置と接続する機能があればよく、例えばｕｌｔｒａ２−ＳＣＳＩ（ｕｌｔｒａ２−Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）やＡＴＡ−４（ＡＴ  Ａｔｔａｃｈｍｅｎｔ−４）やファイバーチャネル（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）などの規格に対応するものでもよく、特定の規格に限られない。
【００１２】
ファイルシステム制御部５は、ファイルシステムを制御する機能を有する。具体的には、後記するファイルやディレクトリのＷＯＲＭ化の処理を制御するＷＯＲＭ制御部１５、ＷＯＲＭ化のためのコマンドを含むコマンドファイル３１（図２参照）を処理するためのコマンドファイル制御部１６、ＷＯＲＭ化の実行結果を保存するレポジトリファイル３２（図２参照）の管理を行うレポジトリファイル制御部１７及びＷＯＲＭ化の処理に関するデーモンであるコマンドデーモンプロセス部１８の機能を少なくとも含む。コマンドデーモンプロセス部１８は、適宜、ＷＯＲＭ制御部１５を呼び出して要求されたＷＯＲＭ化処理を行う。
【００１３】
外部記憶Ｉ／Ｆ制御部１１は、前記した外部記憶Ｉ／Ｆ４の動作を制御するプログラムであり、同様にネットワークＩ／Ｆ制御部１２は、後記するネットワークＩ／Ｆ６を駆動及び制御するプログラムである。ＮＦＳ制御部１３及びＣＩＦＳ制御部１４は、ネットワークＩ／Ｆ６を介してのファイルシステム２０へのアクセスを制御するためのプログラムである。ＮＦＳ制御部１３は、ＵＮＩＸ（登録商標）などのオペレーティングシステムにおけるＮＦＳ（ネットワークファイルシステム）のプロトコルでのアクセスに対応し、ＣＩＦＳ制御部１４は、ＷＩＮＤＯＷＳ（登録商標）やＵＮＩＸ（登録商標）におけるＳＭＢ（Ｓｅｒｖｅｒ  Ｍｅｓｓａｇｅ  Ｂｌｏｃｋ）などのプロトコルでのアクセスに対応する。
【００１４】
ネットワークＩ／Ｆ６は、計算機のネットワークを接続するためのハードウェアであるが、例えば通常のイーサネット（登録商標）に対応したＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）を用いて構成することができる。ただし、ネットワークの通信プロトコルについては、一般的な通信プロトコルを網羅できることが望ましく、特定の通信プロトコルに限定されない。
【００１５】
外部記憶装置７は、通常のハードディスク装置でもよいし、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）装置に代表されるようなディスクアレイ装置でもよい。ディスクアレイ装置を用いる場合も、これをファイルシステム制御装置１に含めない構成にしてもよいし、含める構成にしてもよい。また、外部記憶Ｉ／Ｆ４の説明において前記したように外部記憶装置を接続する規格は特定の規格に限定されず、同様の機能を持つものならばどのような記憶装置を用いてもよい。
【００１６】
前記の構成要素を含むファイルシステム制御装置１と外部記憶装置７を合わせると、ファイルサーバとしての機能を持つ１台の計算機が構成される。
【００１７】
［ＷＯＲＭ化処理の概略］
図２及び図３は、ＷＯＲＭ化処理の概略を示すための図である。図２は、ＷＯＲＭ化処理を行う際にコマンドファイル方式を提供するファイルシステム制御装置を含む計算機システムの概観を示す図である。
【００１８】
本発明におけるコマンドファイルとは、通常のコマンドを実行するためのファイルとは異なり、ファイルシステム制御部５が提供する機構によってファイルシステムへのアクセス操作を行うためのインタフェースとなるものを指す。コマンドファイルの実体は、ファイルシステム２０の上に存在するファイルである。コマンドファイルに対しては、他のファイルと同様に、通常のファイル操作による書き込みのアクセスが可能であり、コマンドファイルに書き込まれた内容は単にファイルシステムに保存されるだけではなく、その内容はファイルシステムへのアクセスの命令としてファイルシステム制御部５に解釈され、実行される。ＵＮＩＸ（登録商標）のシェルスクリプトなどの通常のファイルシステム上のコマンドを記述したファイルは、通常のファイルとして書き込んでから、利用者によって改めて通常のファイルとして実行を指示する必要があるが、コマンドファイルはファイルへの書き込みを行った時点でそのまま実行に直結する。また、コマンドファイルの記述自体が、ファイルシステムへのコマンドという性格をもつため、ファイルシステムにおける記述は、コマンドの種類や書式の拡張にもつながるので、将来のインタフェースの仕様などの変更や拡大にも利用できる。
【００１９】
図２に示すように、ファイルシステム制御装置１は、ネットワーク１０を介して標準的なプロトコルであるＮＦＳやＣＩＦＳのプロトコルで接続するクライアントからのアクセスを受ける。具体的には、ＮＦＳクライアント４１とＣＩＦＳクライアント４２は、ネットワーク１０及びネットワークＩ／Ｆ６を介してファイルシステム制御装置１に接続し、それぞれＮＦＳ制御部１３とＣＩＦＳ制御部１４によりアクセスを制御される。ＮＦＳ制御部１３及びＣＩＦＳ制御部１４は、コマンドデーモンプロセス部１８を介してＷＯＲＭ制御部１５の機能を用いてＷＯＲＭ化に関する機能を呼び出す。
【００２０】
クライアントからのアクセスの依頼を受けたファイルシステム制御部５が、外部記憶装置７の中に構築されているファイルシステム２０にアクセスを行い、コマンドファイル３１、レポジトリファイル３２及び通常ファイル３３を必要に応じて読み書きする。なお、図２において、コマンドファイル３１及びレポジトリファイル３２はＷＯＲＭ化の対象となっていないが、錠のしるしを付してある通常ファイルはＷＯＲＭ化の対象である。
【００２１】
図２には、ＮＦＳ制御部１３及びＣＩＦＳ制御部１４以外にその他のＩ／Ｆ制御部１９がネットワークからのアクセスを受けるように記載されている。これは、実際には、１つのプログラムではなく、ＮＦＳやＣＩＦＳ以外の様々な標準的なプロトコルに対応するデーモンプロセスにあたるものを想定している。具体的には、ＦＴＰ（Ｆｉｌｅ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）やＨＴＴＰ（Ｈｙｐｅｒ  Ｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）やＳＭＴＰ（Ｓｉｍｐｌｅ  Ｍａｉｌ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）などの標準的なプロトコルによるアクセスを扱うデーモンプロセスを用意すれば、これらのプロトコルからファイルシステム２０へのアクセスが可能になる。
【００２２】
例えば、ＦＴＰのデーモンを介してファイルのファイルシステム２０側に送り込む命令であるＰＵＴやファイルシステム制御側のファイルを読み出すための命令であるＧＥＴを用いれば、ＦＴＰのプロトコルを用いて、ファイルシステム２０にアクセスができる。
【００２３】
ＨＴＴＰのプロトコルを利用する場合においては、ＦＴＰ同様のＰＵＴ命令を用いるのに好都合になるように拡張されたＷｅｂＤＡＶ（Distributed Authoring and Versioning protocol for the World Wide Web）のプロトコルを用いてもよい。この場合もＦＴＰの場合と同様にファイルシステム２０へのアクセスをＨＴＴＰ（ＷｅｂＤＡＶ）のプロトコルで行うことができる。
【００２４】
ＳＭＴＰについても同様にメールの送受信のプロトコルを借りて、ファイルシステム２０にアクセスできるような（既存のメールの送受信のデーモンとは異なる）デーモンを新たに作れば、メールのプロトコルでもファイルシステム２０にアクセスすることができるようになる。なお、ここまでに列挙した標準的なプロトコルは、ＮＦＳ，ＣＩＦＳ，ＦＴＰ，ＨＴＴＰ（ＷｅｂＤＡＶ），ＳＭＴＰだけであるが、同様にファイルシステム２０にアクセスしてコマンドファイル３１や通常ファイル３３をやり取りできるデーモンであれば同様の処理が可能であり、これらのプロトコルに限定されない。
【００２５】
また、前記のＮＦＳやＣＩＦＳなどのプロトコルに対応するデーモンについては、少なくとも以下の２通りの構成が考えられる。まず、図２に示すように通常のＷＯＲＭ化機能に対応していないデーモンを流用した上で、これとは別にＷＯＲＭに対応するデーモンを用意する構成を取ることもできる（図２の符号１８を参照）。本実施形態及び第２の実施形態は、この構成をとっている。そのほかに、ＮＦＳやＣＩＦＳなどのデーモンをＷＯＲＭ化に対応したデーモンにする構成をとることもできる。いずれの構成をとっても同様の機能を実現することができ、一方の構成に限定されない。
【００２６】
図３は、ＮＦＳクライアントからファイルシステム制御装置へのアクセスを例にとって、コマンドファイルを利用したコマンド処理の流れを説明する図である。
【００２７】
まず、ＮＦＳクライアント４１は、ネットワーク１０を介して、ファイルシステム制御装置１のＮＦＳ制御部１３及びファイルシステム制御部５を利用することによって、コマンドファイル３１に書き込みを行う（Ｓ１０１）。
【００２８】
この書き込みに対応して、コマンドデーモンプロセス部１８からファイルシステム制御部５のＷＯＲＭ制御部１５（図１参照）を呼び出して、書き込まれたコマンドファイル３１の内容について、処理の実行時の権限などの欠落の有無などを確認する（Ｓ１０２）。この確認の結果は、レポジトリファイル３２に書き込む（Ｓ１０３）。
【００２９】
そして、実行時の権限の欠落がないことが確認された場合には、コマンドデーモンプロセス部１８は、対象の通常ファイル３３をＷＯＲＭ化する（Ｓ１０４）。このＷＯＲＭ化処理の実行結果は、ステップＳ１０３と同じレポジトリファイル３２に書き込む（Ｓ１０５）。
【００３０】
図３の例は、ＷＯＲＭ化のコマンドを伴うコマンドファイルの処理例になっているが、コマンドファイル３１に含まれるコマンドにはＷＯＲＭ化のコマンドが含まれていなくてもよい。処理内容についてのより詳細な説明は、後記する。
【００３１】
図４は、ＷＯＲＭ化処理におけるファイルの状態遷移を説明する図である。図４の上部には本実施形態におけるＷＯＲＭ状態に関する状態遷移図が示されており、その下に各状態における操作の事項可能性の一覧表と遷移操作の一覧の表が示されている。
【００３２】
図４に示すように、本実施形態では、２つの非ＷＯＲＭ状態(１)及び（２）と２つのＷＯＲＭ状態（３）及び（４）が定義されていて、それらの状態間で状態遷移が起きる。非ＷＯＲＭ状態は、ファイルの初期状態であり、通常ファイルであることを表している状態である。非ＷＯＲＭ／保管期間設定状態は、過渡的な性格を持った状態であり、通常ファイルの状態でありながら、ＷＯＲＭ状態で設定されているのと同じ保管期間が設定されている状態である。これらの２つの状態は、通常ファイルの状態であるので、ファイルに対する不可能な操作は特になく、全てのファイル操作が可能である。
【００３３】
ＷＯＲＭ／Ｕｎ−Ｗｒｉｔａｂｌｅ状態は、そのファイルがＷＯＲＭ化されていることを表す状態であり、読むことはできても書き込んだり消去したりすることはできない状態である。この状態では、基本的には参照操作ができるだけであるが、当該ファイルの保管期間切れ後には、再Ｗｒｉｔｅｂｌｅ化が可能になる。なお、ここでの再Ｗｒｉｔｅｂｌｅ化とは、通常ファイルへの変換を意味するのではなく、ＷＯＲＭ／Ｗｒｉｔａｂｌｅ状態への変換を意味する。そして、ＷＯＲＭ／Ｕｎ−Ｗｒｉｔａｂｌｅ状態では、更新操作、削除操作及び保管期間の延長及び短縮の操作は実行できない。ＷＯＲＭ／Ｕｎ−Ｗｒｉｔａｂｌｅ状態が、ＷＯＲＭ状態における基本的な状態であり、特に限定せずにＷＯＲＭ化と記述する場合には、この状態に遷移させることを指す。
【００３４】
ＷＯＲＭ／Ｗｒｉｔａｂｌｅ状態は、前記のＷＯＲＭ／Ｕｎ−Ｗｒｉｔａｂｌｅ状態と同様にそのファイルがＷＯＲＭ化されていることを示す状態である。この状態では、参照操作の他に、保管期間延長操作、削除操作、再ＷＯＲＭ化操作が可能である。ここで、再ＷＯＲＭ化とは、基本的な状態であるＷＯＲＭ／Ｕｎ−Ｗｒｉｔａｂｌｅ状態への変換を意味していて、ＷＯＲＭ／Ｗｒｉｔａｂｌｅ状態への変換は想定していない。この状態でも、ＷＯＲＭ／Ｕｎ−Ｗｒｉｔａｂｌｅ状態と同様に更新操作と保管期間短縮操作は禁止されている。ただし、一旦当該ファイルを削除した後に、更新した後と同じ内容のファイルを作成したり、短い保管期間のファイルを作成し直したりすることはできるが、これは本来の趣旨とは異なる使い方になる。
【００３５】
前記の４つの状態の間の変換に該当する状態遷移は図４の遷移操作の一覧に示されているように５種類ある。
【００３６】
まず、遷移（Ａ）として示されている遷移は、保管期間設定の操作に対応するもので、これにより非ＷＯＲＭ状態から非ＷＯＲＭ／保管期間設定状態へ状態遷移が起きる。
【００３７】
次に、遷移（Ｂ）として示されている遷移は、ＷＯＲＭ化の操作に対応するもので、これにより非ＷＯＲＭ状態からＷＯＲＭ／Ｕｎ−Ｗｒｉｔａｂｌｅ状態への状態遷移が起きる。
【００３８】
遷移（Ｃ）として示されている遷移も、遷移（Ｂ）として示されている遷移と同様にＷＯＲＭ化の操作に対応するものである。ただし、この遷移では、非ＷＯＲＭ状態からではなく、非ＷＯＲＭ／保管期間設定状態からＷＯＲＭ／Ｕｎ−Ｗｒｉｔａｂｌｅ状態への状態遷移が起きる。
【００３９】
遷移（Ｄ）として示されている遷移は、他の遷移と異なり、当該ファイルの保管期間切れの後にのみ可能な遷移である。この遷移は、前記した再Ｗｒｉｔａｂｌｅ化に対応していて、この遷移においては、ＷＯＲＭ／Ｕｎ−Ｗｒｉｔａｂｌｅ状態からＷＯＲＭ／Ｗｒｉｔａｂｌｅ状態への状態遷移が起きる。
【００４０】
遷移（Ｅ）として示されている遷移は、前記した再ＷＯＲＭ化に対応するもので、これにより、遷移（Ｄ）として示されている遷移とは逆のＷＯＲＭ／Ｗｒｉｔａｂｌｅ状態からＷＯＲＭ／Ｕｎ−Ｗｒｉｔａｂｌｅ状態への状態遷移が起きる。
【００４１】
図４に示したように、ＷＯＲＭ状態の相互間の遷移は可能であるが、通常ファイルからの遷移は、最終的にはＷＯＲＭ状態へと向かう遷移しか許されておらず、ＷＯＲＭ状態から通常ファイルの状態に戻ることはない。
【００４２】
図５、図６及び図７は、コマンドファイルで利用可能なコマンドの具体例を説明するための図である。まず、図５は、説明に用いるファイルとディレクトリの構成及び各ファイルの属性情報を示す図である。図５にはファイルＦ１０からファイルＦ７０までのファイル及びディレクトリＤ１０からディレクトリＤ６０までのディレクトリが示されている。各ファイルには、図５に示されているようなファイルの所有者とファイルの作成日の情報が定義されているとする。
【００４３】
図６は、図５において説明したファイル及びディレクトリを対象としたコマンドの例を示す図である。図６においては、コマンドＣ１０からコマンドＣ９０までの９つのコマンドの例を示している。
【００４４】
コマンドＣ１０の例は、最も単純なファイル１つを対象とした例であり、図５で示したファイルＦ１０を対象として、保管期間を「２０１０／０１／０１」の日付までとする保管期間情報（ＲＴ）を設定するＷＯＲＭ化の例である。この処理の要求者は「＃１０」であり、ファイルＦ１０の所有者と一致しているので、実行時の権限の問題は生じない。また、デリミタの欄に示されている「＊」は、コマンドファイルの終了を示すための文字で、この文字が出現した時点で、コマンドデーモンプロセス部１８は、それまでに記述されていた処理を実行する。
【００４５】
コマンドＣ２０の例は、複数のファイルを対象とする例である。この例では、図５におけるファイルＦ２０とファイルＦ３０を１つのコマンドでまとめてデフォルトの保管期間でＷＯＲＭ化する処理を行うコマンドの例である。例えば、デフォルトの期間が３年であれば、この処理の日から３年後を保管期間情報として設定する。この例では、ファイルＦ２０を対象とするコマンドとファイルＦ３０を対象とするコマンドという２つのコマンドが含まれている。
【００４６】
コマンドＣ３０の例は、図５のディレクトリＤ３０のディレクトリ直下を対象としてデフォルトの保管期間でＷＯＲＭ化する処理を行うコマンドファイルの例である。コマンドＣ４０の例は、図５のディレクトリＤ５０を対象としてデフォルトの保管期間でＷＯＲＭ化する処理を行うコマンドの例であるが、この例では、ＷＯＲＭ化の対象が指定されたディレクトリ直下だけではなく、サブディレクトリに含まれるものを再帰的に探索したもの全てを対象としてＷＯＲＭ化を行う。
【００４７】
コマンドＣ５０は、３つのコマンドからなるコマンドの例である。第１のコマンドは、コマンドＣ４０と同様のデフォルトの保管期間でＷＯＲＭ化する処理を行うコマンドであり、対象ディレクトリは、Ｄ１０である。同様に、第２のコマンドは「＃１０」が所有者になっている全てのファイルを対象とし、第３のコマンドは「２００４／＊＊／＊＊」の日付に作成された全てのファイルを対象としてＷＯＲＭ化処理を行うコマンドである。コマンドＣ５０は、この３つのコマンド処理を一括で行う。
【００４８】
コマンドＣ６０は、既にＷＯＲＭ化されているファイルの保管期間を延長するコマンドの例である。コマンドＣ６０は、ファイルＦ１０を対象として保管期間情報を「２０２０／１２／３１」の日付まで延長する例である。
【００４９】
コマンドＣ７０は、ディレクトリＤ５０を対象として、デフォルトの期間だけ保管期間情報を延長するコマンドの例である。この例におけるディレクトリは、コマンドＣ４０の例と同様に指定されたディレクトリ直下だけではなく、サブディレクトリに含まれるものを再帰的に探索したもの全てを対象とする。
【００５０】
コマンドＣ８０は、単一のファイルを削除するためのコマンドファイルの例であり、コマンドＣ９０は、指定されたディレクトリ直下だけではなく、サブディレクトリに含まれるものを再帰的に探索したもの全てを削除する。ただし、この命令を実行するには、削除に先立って保管期間情報を調べて、保管期間が切れている場合に、削除が可能になる。なお、削除のためのコマンドは、必ずしも新しいコマンドを備える必要はなく、従来のファイルシステムのコマンドを流用できる場合は、これを用いてもよい。
【００５１】
なお、本実施形態では、キー指定の例として、ファイルの所有者、ファイル作成の日付及びディレクトリの再帰検索を挙げたが、指定される項目はこれに限定されない。例えば、キーとして特定のキーワードを含むようなファイルを指定してもよい。
【００５２】
図７は、図６のコマンドファイルＣ５０と同じ内容についてＸＭＬ（ｅＸｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）の形式に従って作成したコマンドファイルの例を示す図である。図７の例は、単純に図６のコマンドファイルＣ５０をＸＭＬの形式に変換しただけではなく、ＸＭＬ宣言と文書定義の部分を含んでいる形になっている。この例は、ＸＭＬに基づく形式になっているが、ＣＳＶ（Ｃｏｍｍａ  Ｓｅｐａｒａｔｅｄ  Ｖａｌｕｅｓ）やＨＴＭＬ（ＨｙｐｅｒＴｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）などの他形式あるいは他言語で記述してもよく、コマンドファイルを記述する形式はＸＭＬに限定されない。
【００５３】
図８は、図２のレポジトリファイル３２に登録するコマンドの確認（受理）及び実行の結果の記録を示す例を示す図である。図８の例に示すように、レポジトリファイルには、コマンド種別、処理対象及びキー指定を少なくとも含む登録コマンド内容と対応する処理状況及び登録日時を記録する。図８の例のように備考の項目を設けて、エラーが起きた場合のエラー内容を記録するようにしてもよい。
【００５４】
図８に示されている結果の記録は、図６のコマンドの例が実行された場合に生じる可能性がある結果の記録例になっている。例えば、記録Ｌ１０は、図６のコマンドＣ１０の実行結果の例になっており、コマンドＣ１０を実行して「２０００／１０／０１の１０：００：００」という時刻に正常終了したことを示している。同様に、記録Ｌ２０は図６のコマンドＣ２０に、記録Ｌ３０はコマンドＣ３０に、記録Ｌ４０はコマンドＣ４０に、記録Ｌ５０はコマンドＣ５０に、記録Ｌ６０はコマンドＣ６０に、記録Ｌ７０はコマンドＣ７０に、それぞれ対応する例となっている。
【００５５】
図９は、ＷＯＲＭ化に対応するためにファイルシステムがファイルごとに持つファイル属性情報を説明する図である。図９に示すように、ＷＯＲＭ化に対応する場合でも、ファイル識別情報、ファイルサイズ、ファイル所有者及びファイルアクセス権情報をはじめとする従来と同様のファイル属性情報も利用する。その上で、ＷＯＲＭ属性及び保管期間情報（ＲＴ）の属性情報を少なくとも新規追加する必要がある。
【００５６】
この新規追加分の属性情報を保管する方法として、少なくとも２つの方法がある。まず、第１の方法としては、従来からのファイルシステムの属性情報のテーブルを拡張して新規追加分の属性情報を保管する方法である。この方法では、属性情報のテーブルの拡大に対処するように属性情報のテーブルにアクセスできるようにアクセス方法を修正する。
【００５７】
第２の方法としては、新規追加分の属性情報は属性専用のレポジトリファイルなどに保管して、ファイルシステムが持っている従来からの属性情報のテーブルもそのまま利用して、両者の情報をあわせて用いる方法である。この方法では、ファイルシステムの属性情報のテーブルへのアクセス方法は変更する必要がなく、新規追加分の属性情報へのアクセスについての対応を追加する。
【００５８】
本実施形態は、いずれの方法を用いても実現することができ、ファイルシステムの属性情報を保管する方法には限定されない。例えば、全てのファイルの属性情報を属性専用のレポジトリファイルに保管するという方法を用いてもよい。
【００５９】
［ＷＯＲＭ化処理の動作］
図１０は、非同期方式におけるＷＯＲＭ化処理実行の流れを説明する図である。図１０では、クライアント（例えば、ＮＦＳクライアント４１やＣＩＦＳクライアント４２など）からＷＯＲＭコマンドを書き込んで実行結果をクライアントから読み出すまでの全体的な処理が説明されている。
【００６０】
まず、クライアントは、ＷＯＲＭコマンドの書き込みをコマンドファイル３１に対して行い（Ｓ１１１）、コマンドファイル３１をファイルシステム２０に対して登録する。そして、コマンドデーモンプロセス部１８がＷＯＲＭコマンドを取得する（Ｓ１１２）。その後、コマンドデーモンプロセス部１８は、このＷＯＲＭコマンドを受理して（Ｓ１１３）、その旨をレポジトリファイル３２に登録する。
【００６１】
コマンドデーモンプロセス部１８は、受理したコマンドの内容確認を行って（Ｓ１１４）、実行に必要な権限があるか否かなどを調べる。この結果に問題がない場合には、引き続きＷＯＲＭ化を実行し（Ｓ１１５）、この実行結果を前記したレポジトリファイル３２に書き込む（Ｓ１１６）。
【００６２】
最後に、クライアントは、こうしてレポジトリファイルに書き込まれた実行結果を読み出す（Ｓ１１７）。それぞれのステップのより詳細な処理については、後記する。
【００６３】
図１１は、コマンドファイルへのコマンド登録処理の流れを説明する図である。この図において説明する処理は、図１０におけるステップＳ１１１に該当する。
【００６４】
まず、クライアントは、ファイルシステム２０にアクセスして、コマンドファイルのパス名を取得する（Ｓ２０１）。その後、取得したパス名を用いて、ファイルのＯｐｅｎの操作により、対象となっているコマンドファイル３１を開く（Ｓ２０２）。その後、対象となっているコマンドファイル３１に登録するコマンドをファイルのＷｒｉｔｅ操作で書き込む（Ｓ２０３）。その後、ファイルのＣｌｏｓｅ操作により対象となっているコマンドファイル３１を閉じる（Ｓ２０４）。この一連の処理によって、コマンドファイル３１の最後尾に登録するコマンドが付け加わり、これを後記するコマンドデーモンプロセス部１８による処理の対象とする。
【００６５】
図１２は、コマンドデーモンプロセス部によるコマンド処理における３種類の方式を説明する図である。図１２では、上部に示されているコマンドファイル１とコマンドファイル２がコマンドファイル１、コマンドファイル２の順で登録されて、コマンドデーモンプロセス部１８の処理対象となった場合に、３種類の方式では、それぞれどのような順序で処理が進行するかを示している。
【００６６】
まず、第１の方式は、コマンド逐次受理方式である。この方式においては、単純に出現するコマンドを１つずつについて、取得、受理登録、実行、結果登録を行って、順次処理を行う方式である。この方式では、コマンドを個別に順次処理していくので、他の２つの方式よりもアトミック性が高く、応答がよい。
【００６７】
第２の方式は、コマンドファイル単位折衷方式である。この方式では、登録されたコマンドファイルの順にコマンドファイルごとにまとめて処理を行う。図１２の例では、コマンドファイル１の中に含まれるコマンドＡとコマンドＢをまとめて、取得、受理登録及び連続して行われる実行と結果登録の処理について、それぞれ２つずつのコマンドの処理を行っている。コマンドファイル２についても同様にコマンドＣとコマンドＤをまとめて同様に処理している。この方式は、前記したコマンド逐次受理方式と後記するコマンド一括受理方式を折衷した方式という見方もできる。
【００６８】
第３の方式は、コマンド一括受理方式である。この方式においては、登録された複数のコマンドファイルに含まれるコマンドをコマンドファイルの区別なく出現した順に一括して、取得、受理登録及び連続して行われる実行と結果登録の処理を行う。この方式では、全体としての処理の効率は向上する。
【００６９】
本実施形態では、非同期処理を行っているので、図１２に示した３つの方式とも利用可能であり、受理方式は限定されない。
【００７０】
図１３は、図１２におけるコマンド逐次受理方式による処理を説明する図である。非同期処理を前提とする本実施形態においては、クライアントからのコマンドの登録を契機として処理を始めるのではなく、例えばタイマーを用いて割り込みを生じさせることにより、公知の方法で、所定時間間隔で以下に記述する処理の実行を開始する（Ｓ２１１）。
【００７１】
処理が開始されたら、まず、対象となるファイルシステム２０上に存在するコマンドファイル３１のパス名リストを取得する（Ｓ２１２）。このパス名リストを参照して、未確認コマンドファイル３１がまだあるのか否かを調べる（Ｓ２１３）。未確認のコマンドファイル３１がない場合には（Ｓ２１３のＮｏ）、処理を終了する。
【００７２】
未確認のコマンドファイル３１が残っている場合（Ｓ２１３のＹｅｓ）、対象となるコマンドファイル３１からその中に含まれる登録データ（すなわち、登録コマンドの列を表す文字列）を取得する（Ｓ２１４）。その後、取得データは、コマンドデリミタの出現を基に、登録コマンドを一つ取得するまで、もしくはデータ終端に到達するまで文字列を解析する（Ｓ２１５）。
【００７３】
次に、登録コマンドを取得したのか否かを調べて（Ｓ２１６）、登録コマンドを取得していない場合は（Ｓ２１６のＮｏ）、ステップＳ２１３から処理を繰り返す。登録コマンドを取得した場合には（Ｓ２１６のＹｅｓ）、その登録コマンドのコマンド受理をレポジトリファイル３２に登録する（Ｓ２１７）。その後、実行権限の有無などの観点からその受理コマンドを確認する（Ｓ２１８）。
【００７４】
この確認の結果、コマンド実行がＯＫか否かを調べて（Ｓ２１９）、コマンド実行がＯＫではない場合（Ｓ２１９のＮｏ）、コマンドを実行せずにステップＳ２２１の処理に進む。コマンド実行がＯＫの場合（Ｓ２１９のＹｅｓ）、そのコマンドを実行する（Ｓ２２０）。
【００７５】
コマンド確認結果及びコマンド実行結果は、レポジトリファイル３２に登録し（Ｓ２２１）、ステップＳ２１５から処理を繰り返す。
【００７６】
図１４は、図１２に示したコマンドファイル単位折衷方式による処理を説明する図である。図１４に示されている処理は、図１３を用いて説明したコマンド逐次受理方式の場合の処理と共通するステップがあるので、共通するステップには、同じ符号を付して、説明を省略する。まず、最初のステップ２１１からステップＳ２１４については、図１３における処理と全く同じなのでそれらのステップの説明を省略し、ステップＳ２３５から説明を行う。
【００７７】
ステップＳ２１４において取得された文字列からなる取得データについて、先頭からコマンドデリミタ（本実施形態で示す例では「＊」という文字）の出現を基に、コマンドファイル３１のデータ終端に到達するまで文字列を解析し、コマンドファイル３１中の全登録コマンドを取得する（Ｓ２３５）。
【００７８】
次に、登録コマンドはあるのか否かを調べて（Ｓ２３６）、登録コマンドを取得していない場合は（Ｓ２３６のＮｏ）、ステップＳ２１３から処理を繰り返す。登録コマンドを取得した場合には（Ｓ２３６のＹｅｓ）、その登録コマンドのコマンド受理をレポジトリファイル３２に登録する（Ｓ２３７）。その後、他に登録コマンドがあるのか否かを調べて（Ｓ２３８）、登録コマンドが残っている場合は（Ｓ２３８のＹｅｓ）、ステップＳ２３７に戻って登録コマンドの受理をレポジトリファイル３２に登録する。これを全ての登録コマンドについて行う。他に登録コマンドが残っていない場合は（Ｓ２３８のＮｏ）、実行権限の有無などの観点からその受理コマンドを確認する（Ｓ２３９）。
【００７９】
ステップＳ２３９における確認の結果、コマンド実行がＯＫか否かを調べて（Ｓ２４０）、コマンド実行がＯＫではない場合（Ｓ２４０のＮｏ）、コマンドを実行せずにステップＳ２４２の処理に進む。コマンド実行がＯＫの場合（Ｓ２４０のＹｅｓ）、そのコマンドを実行する（Ｓ２４１）。
【００８０】
コマンド実行の後、コマンド確認結果及びコマンド実行結果をレポジトリファイル３２に登録する（Ｓ２４２）。その後、他に受理コマンドはあるのか否かを調べて（Ｓ２４３）、他に受理コマンドがある場合は（Ｓ２４３のＹｅｓ）、ステップＳ２３９から受理コマンドの処理を繰り返す。他には受理コマンドがない場合は、ステップＳ２１３から処理を繰り返して新しいコマンドファイル３１の処理を行う。
【００８１】
図１５は、図１２に示したコマンド一括受理方式による処理を説明する図である。図１５に示されている処理は、図１３及び図１４を用いて説明した処理と共通するステップがあるので、共通するステップには、同じ符号を付して、説明を省略する。まず、最初のステップ２１１からステップＳ２１４については、図１３におけるステップＳ２１１からステップＳ２１４までの処理と全く同じであり、ステップＳ２３５も図１４におけるステップＳ２３５と同じ処理であるため、これらのステップの説明を省略する。ここでは、ステップＳ２３５の処理が終了した時点から説明を行う。
【００８２】
ステップＳ２１１で実行が開始された後、ステップＳ２１２からステップＳ２３５における処理では、コマンドファイルを読み出すための処理を行っていて、１回目にステップＳ２３５までの処理を終了すると、１つのコマンドファイル３１が読み出されてその中に含まれていたコマンドが取得された状態になっている。ステップＳ２３５の処理が終了した後は、ステップＳ２１３に戻って処理を続行する。ステップＳ２１３以降ステップＳ２３５までの処理を繰り返すことにより、全てのコマンドファイル３１に含まれる全てのコマンドを取得すると、ステップＳ２１３においてＮｏ側に分岐して、以下のステップＳ２５６以降の処理が行われる。
【００８３】
ここまでに取得されたコマンドに対して、未受理のコマンドはあるのか否かを調べる（Ｓ２５６）。未受理のコマンドがあった場合は（Ｓ２５６のＹｅｓ）、コマンドを受理して、コマンド受理をレポジトリファイル３２に登録する（Ｓ２５７）。以降、ステップＳ２５６からの処理を繰り返す。
【００８４】
ステップＳ２５６で未受理コマンドを調べた結果、未受理コマンドが残っていない場合には（Ｓ２５６のＮｏ）、次のステップに処理を進める。
【００８５】
受理されたコマンドを受け取って、まず、このコマンドの中に未実行コマンドがあるのか否かを調べる（Ｓ２５８）。調べた結果、未実行コマンドが残っていない場合には（Ｓ２５８のＮｏ）、処理を終了する。未実行コマンドが残っている場合には（Ｓ２５８のＹｅｓ）、実行権限の有無などの観点から対象となっている受理コマンドを確認する（Ｓ２５９）。
【００８６】
その確認の結果、そのコマンド実行がＯＫか否かを調べる（Ｓ２６０）。コマンド実行がＯＫではない場合（Ｓ２６０のＮｏ）、コマンドを実行せずにステップＳ２６２の処理に進む。コマンド実行がＯＫの場合（Ｓ２６０のＹｅｓ）、そのコマンドを実行する（Ｓ２６１）。
【００８７】
コマンド実行の後、コマンド確認結果及びコマンド実行結果をレポジトリファイル３２に登録する（Ｓ２６２）。以降、ステップＳ２５８から処理を繰り返して新しいコマンドの処理を行う。
【００８８】
図１６は、レポジトリファイルからのレポジトリ情報取得の処理を説明する図である。この処理は、通常のファイルを読み出す処理とほとんど同じ処理である。この処理では、まず、ファイルシステム２０にアクセスして、レポジトリファイル名を取得する（Ｓ２７１）。その後、取得したファイル名を用いて、ファイルＯｐｅｎ操作により、対象となるレポジトリファイル３２を開く（Ｓ２７２）。対象となるレポジトリファイル３２から登録情報をファイルＲｅａｄ操作で取得する（Ｓ２７３）。必要な登録情報を読み出し終わったら、ファイルＣｌｏｓｅ操作により、対象となるレポジトリファイル３２を閉じて（Ｓ２７４）、処理を終了する。
【００８９】
図１７は、対象がファイルの場合のコマンド実行処理を説明する図である。ここでのコマンドには、ＷＯＲＭコマンドを含むが、ＷＯＲＭコマンドに限られない。この処理では、まず、コマンド実行対象のファイルの中で、コマンドを未実行のファイルはあるのか否かを調べる（Ｓ２８１）。未実行のファイルがあった場合は（Ｓ２８１のＹｅｓ）、コマンドで指定された操作を対象ファイルに対して実行し（Ｓ２８２）、結果の保存方法の指定によって必要ならば、当該ファイルに対するコマンド実行結果をレポジトリファイル３２に登録し（Ｓ２８３）、ステップＳ２８１から次の対象となるファイルの処理を繰り返す。未実行のファイルが残っていない場合には（Ｓ２８１のＮｏ）、処理を終了する。
【００９０】
ファイルを対象とするコマンド実行処理においては、２通りの実施形態の変形例がある。第１の変形例では、実行対象のファイルに対して排他制御を行う方法であり、コマンドの実行前に対象となるファイルにロックをかけて他のコマンドの実行を排除し、コマンドを実行し、コマンド実行終了後にそのロックを解除するという処理を行う。図１７の例では、ステップＳ２８２がコマンド実行のステップにあたり、ステップＳ２８２の前に対象となるファイルにロックをかけて、ステップＳ２８２の実行後にロックを解除するという処理になる。
【００９１】
そして、第２の変形例では、ファイルを対象とした一連のコマンドが途中で失敗した場合にそれ以後の処理を行うのをやめる。図１７の例では、ステップＳ２８３でレポジトリファイル３２に実行結果を登録した後に、当該コマンドの実行が失敗に終わっている場合には、それ以後のコマンドの処理を行わずに処理を終了するという処理になる。
【００９２】
なお、排他処理を加える変形及び途中でのコマンド失敗でそれ以後の実施をやめる変形の両者を組み合わせてもよい。ただし、これらの変形例を採用する場合には、ディレクトリを対象とした処理でも対応する同様の処理を行う変形例を採用する必要がある。
【００９３】
図１８は、対象がディレクトリの場合のコマンド実行処理を説明する図である。ディレクトリが対象の場合には、ディレクトリの直下のファイルまでが指定の対象となる場合と、対象となるディレクトリに含まれるサブディレクトリも再帰的に指定の対象となる場合がある。図１８で示す処理は、その両方の場合に対応している。この処理では、対象となるディレクトリを１つだけ指定することもできるが、同時に複数のディレクトリを指定して一度にまとめて処理することもできる。
【００９４】
まず、コマンド実行の対象となる１つ又は複数のディレクトリの中で、コマンドを未実行のディレクトリはあるのか否かを調べる（Ｓ２９１）。なお、ここで対象となるディレクトリには、コマンドの処理の対象として指定された１つあるいは複数のディレクトリだけを含み、コマンドで指定されたディレクトリの中を再帰的に探索して得られるディレクトリは含まれない。
【００９５】
コマンドを未実行のディレクトリがある場合には（Ｓ２９１のＹｅｓ）、当該ディレクトリに対してコマンドを実行し、その中のファイルとサブディレクトリの一覧を取得し（Ｓ２９２）、ステップＳ２９１からコマンドを未実行のディレクトリに対する処理を繰り返す。
【００９６】
コマンド実行の対象となる１つ又は複数のディレクトリの中にコマンドを未実行のディレクトリが残っていない場合には（Ｓ２９１のＮｏ）、以下に説明する各ディレクトリに含まれるファイル及びディレクトリに対するコマンド実行の処理に移る。
【００９７】
この処理では、まず、コマンドから直接的に処理の対象に指定されているディレクトリ１つ１つを対象として、当該ディレクトリ内にコマンド未実行のファイルもしくはサブディレクトリがあるのかを調べる（Ｓ２９３）。既に全てのファイルやディレクトリに対してコマンドが実行されている場合には（Ｓ２９３のＮｏ）、処理を終了する。コマンドを未実行のファイルもしくはディレクトリがある場合には（Ｓ２９３のＹｅｓ）、コマンド実行による操作対象はファイルなのかディレクトリなのかを調べる（Ｓ２９４）。
【００９８】
コマンド実行による操作の対象がファイルだった場合（Ｓ２９４の「ファイル」）、対象ファイルは、指定キーの条件を満たすのか否かを調べる（Ｓ２９５）。このステップでの指定キーとは、例えば、所有者やファイルの作成時刻（タイムスタンプ）のことであり、このステップでは、これらの条件に合致しているか否かを調べる。具体的には、キー指定された所有者と一致しているか否かなどの条件を調べることになる。
【００９９】
指定キーの条件を満たしていない場合（Ｓ２９５のＮｏ）、コマンドを実行せずにステップＳ２９３から処理を繰り返す。指定キーの条件を満たしている場合（Ｓ２９５のＹｅｓ）、コマンドで指定された操作を対象ファイルに対して実行し（Ｓ２９６）、当該ファイルに対するコマンドの実行結果をレポジトリファイル３２に登録する（Ｓ２９７）。そして、ステップＳ２９３から処理を繰り返す。なお、ステップＳ２９７は省略してもよく、指定されたコマンド実行結果の保存形式において必要なときに実行するようにしてもよい。
【０１００】
コマンド実行による操作の対象がディレクトリだった場合（Ｓ２９４の「ディレクトリ」）、まず、サブディレクトリへの再帰操作が指定されているのか否かを調べる（Ｓ２９８）。再帰操作が指定されていない場合（Ｓ２９８のＮｏ）、そのままステップＳ２９３から処理を繰り返す。再帰処理が指定されている場合（Ｓ２９８のＹｅｓ）、当該ディレクトリを操作対象として再帰的にコマンド実行処理を行う（Ｓ２９９）。すなわち、サブディレクトリがそれ以上出現しないところまでステップＳ２９３からステップＳ２９９までの処理を繰り返して、最終的には対象となる全てのファイルとディレクトリに対してコマンドを実行する。
【０１０１】
図１８の例には、図１７を用いて説明したファイルを対象とする変形例と同様の２つの実施形態の変形例がある。まず、第１の変形例は、実行対象のディレクトリに含まれるファイルに対して排他制御を行う方法であり、コマンドの実行前に対象となるディレクトリに含まれるファイルにロックをかけて、コマンドを実行し、コマンド実行終了後にそのロックを解除するという処理をする。図１８の例では、ステップＳ２９６がコマンド実行のステップにあたり、ステップＳ２９６の前に対象となるファイルにロックをかけて、ステップＳ２９６の実行後にロックを解除するという処理になる。
【０１０２】
そして、第２の変形例では、ファイルを対象とした一連のコマンドが途中で失敗した場合にそれ以後の処理を行うのをやめる。図１８の例では、ステップＳ２９７でレポジトリファイル３２に実行結果を登録した後に、当該コマンドの実行が失敗に終わっている場合には、それ以後のコマンドの処理を行わずに処理を終了するという処理になる。
【０１０３】
なお、排他処理及び途中でのコマンド失敗でそれ以後の実施をやめる変形の両者を組み合わせてもよい。ただし、これらの変形例を採用する場合には、対応するファイルを対象とした処理でも同様の変形例を採用する必要がある。
【０１０４】
図１９は、ＷＯＲＭ化されたファイルの保管期間設定及び保管期間延長の処理を説明する図である。この処理では、まず、対象ファイルのＷＯＲＭ属性は有効か否かを調べる（Ｓ３０１）。その結果、対象ファイルのＷＯＲＭ属性が無効の場合（Ｓ３０１のＮｏ）、前記のステップＳ３０２は実行せずに、ステップＳ３０３に進む。ＷＯＲＭ属性が有効の場合（Ｓ３０１のＹｅｓ）、対象ファイルのＷｒｉｔｅアクセス権は有効か否かを調べる（Ｓ３０２）。この結果、Ｗｒｉｔｅアクセス権が無効の場合（Ｓ３０２のＮｏ）、エラーであることをレポジトリファイルに記録するなどのエラー処理を行って（Ｓ３０６）、処理を終了する。Ｗｒｉｔｅアクセス権が有効の場合（Ｓ３０２のＹｅｓ）、ステップＳ３０３の処理に進む。
【０１０５】
ステップＳ３０３においては、対象ファイルの保管期間情報属性に、既に保管期間が設定されているか否かを調べる（Ｓ３０３）。その結果、保管期間が未設定の場合（Ｓ３０３のＮｏ）、ステップＳ３０４の処理を行わずにステップＳ３０５の処理に進む。保管期間が設定されている場合（Ｓ３０３のＹｅｓ）、さらに本操作で設定しようとする保管期間は、既に設定されている保管期間の延長になるか否かを調べる（Ｓ３０４）。その結果、保管期間の延長にならない場合（Ｓ３０４のＮｏ）、エラーであることをレポジトリファイル３２に記録するなどのエラー処理を行って（Ｓ３０６）、処理を終了する。保管期間の延長になっている場合（Ｓ３０４のＹｅｓ）、後記するステップＳ３０５の処理を行う。
【０１０６】
ステップＳ３０５では、対象ファイルの保管期間情報属性に、本操作で指定された保管期間を設定し、処理を終了する。なお、このとき、記録保持の設定上、必要であれば、エラーの場合と同様に処理が成功したことをレポジトリファイル３２に記録する。
【０１０７】
図２０は、ファイルのＷＯＲＭ化処理を説明する図である。なお、図２０の一部のステップは、図１９の一部のステップと同じであるため、図１９のステップと同一の符号を付して説明を省略する。
【０１０８】
まず、最初のステップＳ３０１、ステップＳ３０２及びステップＳ３０６は、図１９と同一の処理なので説明を省略する。対象ファイルのＷＯＲＭ属性が有効ではない場合か（Ｓ３０１のＮｏ）、又は、ＷＯＲＭ属性が有効でもＷｒｉｔｅアクセス権が有効な場合には（Ｓ３０２のＹｅｓ）、メモリ上にバッファリングされている可能性がある対象ファイルに対して外部記憶装置７への更新反映を完了させる（Ｓ３１１）。
【０１０９】
次に、対象ファイルのＷＯＲＭ属性は有効か否かを調べて（Ｓ３１２）、ＷＯＲＭ属性が有効でない場合は（Ｓ３１２のＮｏ）、対象ファイルのＷＯＲＭ属性を有効にする処理を行い（Ｓ３１３）、ＷＯＲＭ属性が有効である場合はそのまま終了する。
【０１１０】
図２１は、ファイルの再Ｗｒｉｔａｂｌｅ化の処理を説明する図である。この図においても、図１９のステップと同一の処理内容のステップがあるので、図１９と同じ符号を付して、一部の説明を省略する。具体的には、ステップＳ３０１とステップＳ３０６は、図１９と同一の処理を行うステップである。
【０１１１】
まず、対象ファイルのＷＯＲＭ属性が有効か否かを調べて（Ｓ３０１）、ＷＯＲＭ属性が有効でない場合（Ｓ３０１のＮｏ）、再Ｗｒｉｔａｂｌｅ化の対象ではないことになるので、通常ファイルに対するアクセス権変更処理を行う（Ｓ３２３）。
【０１１２】
ＷＯＲＭ属性が有効である場合（Ｓ３０１のＹｅｓ）、対象ファイルの保管期間が切れているか否かを調べる（Ｓ３２１）。保管期間が切れていない場合（Ｓ３２１のＮｏ）には、再Ｗｒｉｔａｂｌｅ化はできないので、エラー処理を行って（Ｓ３０６）、この処理を終了する。保管期間が切れている場合には（Ｓ３２１のＹｅｓ）、対象ファイルのＷｒｉｔｅアクセス権を有効にして（Ｓ３２２）、この処理を終了する。
【０１１３】
図２２は、ＷＯＲＭ化されたファイルの削除処理を説明する図である。図２２においても、図１９のステップと同一の処理内容のステップがあるので、図１９と同じ符号を付して、そのステップの処理の説明を省略する。図２２に示すように、ファイルの削除処理では、削除できるか否かを調べて、削除可能な場合には（Ｓ３０１のＮｏ又はＳ３０２のＹｅｓ）、削除を行い（Ｓ３３１）、削除不能な場合には（Ｓ３０２のＮｏ）、エラー処理を行って（Ｓ３０６）、この処理を終了する。
【０１１４】
図２３は、ＷＯＲＭ化されたファイルに対する改竄防止処理を説明する図である。言い換えると、図２３は、ＷＯＲＭ化されたファイルに対するアクセスを適正に処理する方法を説明している図であるということもできる。なお、図２３のステップＳ３０６は、図１９におけるステップＳ３０６と同じ処理を行うので、同じ符号を付して処理内容の説明を省略する。
【０１１５】
まず、ＷＯＲＭ化されたファイルに対してのアクセスにおいて、対象操作はＷｒｉｔｅアクセス権が必要な操作か否かについて調べる（Ｓ３４１）。Ｗｒｉｔｅアクセス権が必要ではない場合には（Ｓ３４１のＮｏ）、ステップＳ３４３の処理に進む。Ｗｒｉｔｅアクセス権が必要な場合には（Ｓ３４１のＹｅｓ）、対象ファイルのＷＯＲＭ属性は有効か否かを調べる（Ｓ３４２）。この結果、ＷＯＲＭ属性が有効である場合には（Ｓ３４２のＹｅｓ）、対象操作を行うための権限がないので、エラー処理を行い（Ｓ３０６）、処理を終了する。ＷＯＲＭ属性が有効ではない場合には（Ｓ３４２のＮｏ）、ステップＳ３４３の処理に進む。
【０１１６】
ステップＳ３４３では、対象ファイルに対する通常アクセス権を行い、その結果アクセス可能か否かを調べる（Ｓ３４３）。アクセスが不能な場合は（Ｓ３４３のＮｏ）、エラー処理を行い（Ｓ３０６）、処理を終了する。アクセスが可能な場合には（Ｓ３４３のＹｅｓ）、対象ファイルに対する操作を実行し（Ｓ３４４）、処理を終了する。
【０１１７】
図２４は、所定の時間ごとに処理を起動するプロセス（ＵＮＩＸ（登録商標）ではクーロン（ＣＲＯＮ）プロセス）によるデーモンプロセス監視処理を説明する図である。
【０１１８】
デーモンプロセス監視処理は、所定時間間隔で実行を開始する（Ｓ３５０）。これは、例えば、計算機のタイマーからの信号に基づく割り込み処理などの公知技術で実現できる。実行が開始されたら、監視対象のデーモンプロセスのリストを取得する（Ｓ３５１）。この処理は、例えば、特定のファイルにリストを保存しておいて、これを読み出すようにすればよい。次に、このリストに掲載されている監視対象となる各デーモンプロセスの状態を確認する（Ｓ３５２）。この確認の結果、異常なデーモンプロセスがあるか否かを調べて（Ｓ３５３）、異常なデーモンプロセスがない場合には（Ｓ３５３のＮｏ）、そのまま処理を終了する。異常な処理がある場合には（Ｓ３５３のＹｅｓ）、異常が見つかった当該デーモンプロセスを再起動して（Ｓ３５４）、処理を終了する。
【０１１９】
ここまで、デーモンプロセスを用いた非同期処理によるＷＯＲＭ化についての処理を説明してきたが、既にここまでの説明に記述した例を含めて様々な変形の実施形態がある。ここでは、図２５を用いて、コマンドデーモンプロセス部１８とほぼ同様のデーモンプロセスを用いたまま、同期処理によるＷＯＲＭ化に変化させた変形例について説明する。
【０１２０】
図２５は、コマンドデーモンプロセス部を用いた同期処理を説明する図である。図２５は、図１０と類似した図であり、一部のステップを除いて、図２５のステップの処理は図１０におけるステップの処理と共通であり、同じ符号を付して説明を省略する。以降、図１０における処理と異なる部分だけ説明する。
図２５において、図１０と異なっているのは、ステップＳ３６１とステップＳ３６２の処理が加わったことである。
【０１２１】
ステップＳ３６１は、コマンドファイル３１が書き込まれた際にコマンドデーモンプロセス部１８に対して同時に通知を行う処理である（Ｓ３６１）。この通知を受けたコマンドデーモンプロセス部１８は、コマンドファイル３１の書き込みによって取得したＷＯＲＭコマンドを即時に実行することができる（Ｓ３６２）。これによって、コマンドデーモンプロセス部１８が通知に対応して処理の実行を開始する以外は、非同期処理の場合とほとんど同じ構成のままで、同期処理を行うことができる。なお、デーモンプロセス部１８の存在を前提としない同期処理については、第２の実施形態の説明の中において後記する。
【０１２２】
<<第２の実施形態>>（同期方式による基本的実施形態）
本発明の第１の実施形態は、コマンドデーモンプロセス部１８の存在を前提として非同期処理を行う実施形態であったが、本発明の実施形態はこの形態には限られない。本発明の第２の実施形態としては、デーモンプロセスの存在を前提とせず、同期処理を行う実施形態が挙げられる。第２の実施形態においては、状態遷移のあり方などは、処理の都合で若干異なる部分がありうる以外は、基本的に第１の実施形態と同じ前提に立つ。第２の実施形態は、第１の実施形態において説明した図１の構成からコマンドデーモンプロセス部１８を除いた構成と同じ構成で実施される。以下、第２の実施形態について説明する。
【０１２３】
図２６は、デーモンプロセス部の存在を前提としない同期方式におけるＷＯＲＭ化処理実行の流れを説明する図である。図２６では、図１０と同様にクライアント（例えば、ＮＦＳクライアント４１やＣＩＦＳクライアント４２など）からＷＯＲＭコマンドを書き込んで実行結果をクライアントに返却するまでの全体的な処理が説明されている。図２６における処理ステップは、図１０における処理ステップと共通しているので、同一の処理内容のステップには、同一の符号を付して、処理内容の説明を省略する。
【０１２４】
まず、クライアントにおけるＷＯＲＭコマンド書き込み（Ｓ１１１）からＷＯＲＭコマンド取得（Ｓ１１２）までは、同一の処理なので、説明を省略する。なお、処理内容は同一であるが、動作の主体は、コマンドデーモンプロセス部１８ではなく、ファイルシステム制御部５である。つまり、同期処理を行う場合は、第１の実施形態の非同期処理においてコマンドデーモンプロセス部１８が行っていた処理を他のプログラムで肩代わりする必要があるが、第２の実施形態では、これをファイルシステム制御部５が処理し、ファイルシステム制御部５がＷＯＲＭ制御部１５の機能を呼び出す。
【０１２５】
この後、ファイルシステム制御部５は、非同期方式では行っていたステップＳ１１３の処理を行わずに、受理したコマンドの内容確認を行って、実行に必要な権限があるか否かなどを調べる（Ｓ１１４）。この結果に問題がない場合には、引き続きＷＯＲＭ化を実行し（Ｓ１１５）、この実行結果をクライアントに返却する（Ｓ４０１）。
【０１２６】
図２７は、同期処理（第２の実施形態）におけるファイルアクセス時の登録コマンド処理などの処理を説明する図である。なお、ここでいうファイルアクセスとは、コマンドファイル３１への読み出し及び書き込みだけでなく、通常ファイル３３のアクセス処理を含む。
【０１２７】
この処理は、まず、ファイルアクセス要求で実行が開始される（Ｓ４１１）。次に、このファイルアクセスがコマンドファイル３１を対象にしたファイルアクセス要求か否かを調べる（Ｓ４１２）。この判断は、ファイルの属性がコマンドファイル固有のものであるか又はファイル名の付け方がコマンドファイル固有のものであるかを調べることによって行う。その結果、コマンドファイル３１が対象ではなかった場合は（Ｓ４１２のＮｏ）、通常ファイル３３のアクセス処理を行い（Ｓ４２１）、処理を終了する。
【０１２８】
コマンドファイル３１を対象にしたファイルアクセス要求であった場合には（Ｓ４１２のＹｅｓ）、コマンドファイル３１へのファイルＷｒｉｔｅ操作（コマンド登録）要求か否かを調べる（Ｓ４１３）。そして、コマンドファイル３１へのファイルＷｒｉｔｅ操作ではなかった場合には（Ｓ４１３のＮｏ）、通常ファイル３３のアクセス処理を行い（Ｓ４２１）、処理を終了する。コマンドファイル３１へのファイルＷｒｉｔｅ操作であった場合には（Ｓ４１３のＹｅｓ）、Ｗｒｉｔｅデータの内容をコマンドデリミタを基にして解析し、コマンドを取得する（Ｓ４１４）。
【０１２９】
この解析により、コマンドが取得できたか否かを調べる（Ｓ４１５）。その結果、コマンドを取得できていない場合には（Ｓ４１５のＮｏ）、失敗した旨を含むコマンド確認結果及びコマンド実行結果をファイルＷｒｉｔｅ操作の戻り値として返却し（Ｓ４２０）、処理を終了する。コマンドを取得できた場合には（Ｓ４１５のＹｅｓ）、その取得コマンドを実行権限の有無などの観点から確認する（Ｓ４１６）。その確認の結果、コマンド実行ＯＫか否かを調べる（Ｓ４１７）。その結果、実行ＯＫであった場合には（Ｓ４１７のＹｅｓ）、当該コマンドを実行して（Ｓ４１８）、ステップＳ４１９に進み、実行がＯＫではなかった場合には（Ｓ４１７のＮｏ）、そのままステップＳ４１９に進む。
【０１３０】
次に、他に未実行コマンドはあるか否かを調べる（Ｓ４１９）。未実行コマンドがある場合には（Ｓ４１９のＹｅｓ）、ステップＳ４１６から次のコマンド実行を繰り返す。未実行コマンドが残っていない場合には（Ｓ４１９のＮｏ）、成功又は失敗した旨を含むコマンド確認結果及びコマンド実行結果をファイルＷｒｉｔｅ操作の戻り値として返却し（Ｓ４２０）、処理を終了する。
【０１３１】
図２８は、同期処理（第２の実施形態）におけるファイルを対象としたコマンドの実行処理を説明する図である。図２８は、図１７に示した非同期処理（第１の実施形態）の場合のコマンド実行処理と同一の処理をするステップを含むので、これらのステップには同一の符号を付して、説明を省略する。
【０１３２】
図２８に示されているように同期処理（第２の実施形態）におけるコマンドの実行処理と図１７に示した非同期処理（第１の実施形態）の場合のコマンド実行処理で異なるのは、実行結果を扱うステップＳ４３１だけであり、他は同一の処理である。このステップＳ４３１では、当該ファイルに対するコマンド実行結果を、そのコマンドを入力したクライアントに返却する（Ｓ４３１）。なお、非同期処理の場合には、コマンド実行結果をレポジトリファイル３２に書き込む点が異なるだけなので、動作を行う主体が、コマンドデーモンプロセス部１８からファイルシステム制御部５に変化した以外は大きな変化はない。
【０１３３】
図２９は、同期処理（第２の実施形態）におけるディレクトリを対象としたコマンドの実行処理を説明する図である。図２９は、図１８に示した非同期処理（第１の実施形態）の場合のコマンド実行処理と同一の処理をするステップを含むので、これらのステップには同一の符号を付して、説明を省略する。この場合にも、図２８を用いて説明した同期処理（第２の実施形態）におけるファイルを対象としたコマンドの実行処理の場合と同様に、実行結果を扱うステップＳ４４１だけが異なり、他は同一の処理である。このステップＳ４４１では、当該ファイルに対するコマンド実行結果を、そのコマンドを入力したクライアントに返却する（Ｓ４４１）。この場合も、動作を行う主体は、コマンドデーモンプロセス部１８ではなく、ファイルシステム制御部５である。
【０１３４】
ここまで説明してきたように、第２の実施形態であるコマンドデーモンプロセス部１８の存在を前提としない同期処理による実施形態においても、本質的な部分は、第１の実施形態として説明したコマンドデーモンプロセス部１８の存在を前提とした非同期処理による実施形態とほぼ同じである。また、前記したように同期処理による実施形態においても、デーモンプロセス部１８を前提とした実施形態もあり、いずれの実施形態にも限定されない。
【０１３５】
<<その他の実施形態>>
本発明を実施するに当たっては、第１の実施形態及び第２の実施形態以外にも様々な実施形態がありうるが、第１の実施形態と第２の実施形態の比較でも明らかなように、本質的には同等な実施形態である。以下では、本発明で想定される実施形態の変形例を説明する。
【０１３６】
[ＷＯＲＭ状態に関する変形例]
まず、ファイルやディレクトリのＷＯＲＭ状態に関する変形例を説明する。第１の実施形態及び第２の実施形態においては、図４に示したような４つの状態、５つの状態遷移及び図４の各状態における操作の実行可能性の表に示した各状態での可能操作ならびに不可能操作を前提としていた。図３０から図３２までの図は、このような状態の取り方やその状態での可能操作および不可能操作に関する前提の変形例を示す図である。
【０１３７】
図３０は、ＷＯＲＭ状態に関する一変形例を示す図である。図３０の例では、ＷＯＲＭ状態における実行可能な操作が一部異なり、第１の実施形態と異なる部分が楕円で囲んで示されている。図３０の例では、ＷＯＲＭ／Ｕｎ−Ｗｒｉｔａｂｌｅ状態における不可能操作から保管期間延長操作を削除して、可能操作に加えた。これにより、保管期間が切れていない状態でも、予め保管期間が延長できるようになる。なお、各状態における可能操作及び不可能操作の与え方は、この例に限定されない。例えば、ＷＯＲＭ／Ｗｒｉｔａｂｌｅ状態においては更新操作を可能にしてもよい。
【０１３８】
図３１は、ＷＯＲＭ状態に関する別の一変形例を示す図である。図３１の例では、第１の実施形態及び第２の実施形態においてＷＯＲＭ／Ｕｎ−Ｗｒｉｔａｂｌｅ状態とＷＯＲＭ／Ｗｒｉｔａｂｌｅ状態に区別していたものを１種類のＷＯＲＭ状態にまとめて扱っている。この例では、状態の数が４から３に減少したのに伴って、状態遷移の操作の種類も３種類に減っており、ＷＯＲＭ状態における可能操作と不可能操作の与え方も変化している。図３１の例の場合、保管期間切れ後にその状態のまま保管期間延長操作と削除操作を行えるように可能操作が追加されている。なお、状態の取り方は、この例に限定されない。例えば、非ＷＯＲＭ状態とＷＯＲＭ状態の２状態だけにしてもよいし、非ＷＯＲＭ／保管期間設定状態をなくして、非ＷＯＲＭ状態、ＷＯＲＭ／Ｕｎ−Ｗｒｉｔａｂｌｅ状態及びＷＯＲＭ／Ｗｒｉｔａｂｌｅ状態の３状態にしてもよい。
【０１３９】
図３２は、図３１に示したＷＯＲＭ状態に関する変形例から、さらに、ＷＯＲＭ状態における可能操作と不可能操作の与え方を変化させた例である。この例では、図３２の各状態における操作の実行可能性のところに示すように楕円で囲んで示している保管期間延長操作について、図４に示した例とは操作が可能になる条件が異なる。図３１の例では、保管期間延長の操作は、保管期間切れ後のみ可能であったが、図３２に示す例では、さらに保管期間切れに関する条件を問わないようにしている。保管期間切れ後の削除操作は図３１の例と同様なので、説明を省略する。なお、前記したように、各状態における可能操作及び不可能操作の与え方は、この例に限定されない。
【０１４０】
[コマンド入力と結果出力に関する変形例]
図３３から図３６は、コマンド入力と結果出力に関する変形例を説明する図である。ここでは、登録結果、コマンドの実行結果及びレポジトリファイル３２の利用の有無などで変形例が分かれる。
【０１４１】
図３３の例では、レポジトリファイル３２を用いてコマンド実行結果を与えている。この例では、まず、クライアントからコマンドファイル３１への書き込みを通じてコマンド登録を行い（Ｓ５０１）、それに伴って登録結果がクライアントに返却される（Ｓ５０２）。コマンドファイル３１がファイルシステム２０のファイルシステム制御部５に取得され、実行された後（Ｓ５０３）、レポジトリファイル３２に対して、コマンド実行結果が登録される（Ｓ５０４）。その後、実行結果はクライアントから取得できるようになる（Ｓ５０５）。
【０１４２】
図３４の例では、レポジトリファイル３２を用いずに、コマンド実行結果をクライアントに返却する例を示している。図３４におけるステップＳ５０１とステップＳ５０３は、図３３におけるステップＳ５０１とステップＳ５０３と同一の処理を行うものであるので、説明を省略する。図３４の例では、ステップＳ５０２の登録結果のクライアントへの返却やステップＳ５０４及びステップＳ５０５のレポジトリファイル３２に関する処理がなく、ステップＳ５０４及びステップＳ５０５の代わりに、ファイルシステム２０のファイルシステム制御部５がクライアントに対して直接コマンド実行結果を返却する（Ｓ５１１）。
【０１４３】
図３５の例では、レポジトリファイル３２を利用し、ファイルシステム２０のファイルシステム制御部５が登録終了通知を行う。図３５のステップＳ５２１以外のステップは、図３３における各ステップと同一のものであるので、同一の符号を付して、説明を省略する。図３５の例では、図３３の例におけるコマンドファイル３１の登録結果の返却のステップＳ５０２がない代わりに、ファイルシステム２０のファイルシステム制御部５が、コマンドの取得及び実行を終了して実行結果をレポジトリファイル３２に登録した後に、クライアントに対して登録終了通知を行う。このような構成をとれば、レポジトリファイル３２の実行結果を取得してからコマンドの実行終了を行う場合よりも実行終了を知るまでの時間的な遅れが少なくて済む。
【０１４４】
図３６の例では、図３５の例と異なり、レポジトリファイル３２のファイル名がコマンド実行の前にはわかっていない状態であることが前提の処理となっている。図３６のステップＳ５３１以外のステップは、図３３における各ステップと同一のものであるので、同一の符号を付して、説明を省略する。図３６の例は、図３５に類似した例であるので、図３５の例と比較すると、レポジトリファイル３２のファイル名がコマンド実行の前にはわかっていないという前提とファイルシステム２０のファイルシステム制御部５からクライアントへの通知のステップが異なる。図３６のステップＳ５３１では、ファイルシステム２０のファイルシステム制御部５が、コマンドの登録終了以外にファイルシステム２０のファイルシステム制御部５が実行結果を登録するレポジトリファイル３２のファイル名を通知する。そして、クライアントがコマンド実行結果を取得するときには、このファイル名のレポジトリファイル３２から実行結果を取得する（Ｓ５３１）。なお、この例では、コマンド実行前には、レポジトリファイル名は未知であるという前提になっていたが、コマンド登録時にレポジトリファイル名を指定することにしてもよい。この場合には、ファイルシステム２０のファイルシステム制御部５は、クライアントに対してコマンドの登録終了だけを通知すればよい。
【０１４５】
図１０及び図２５を再び参照して、２つ変形例を説明する。図１０は第１の実施形態においてコマンドファイル３１への書き込みを契機とする非同期処理を説明する図であった。図２５に示した変形例は、コマンドファイル３１への書き込みを契機として、同期的に命令の処理が開始される変形例であった。しかし、命令の処理を開始する契機となるのは、コマンドファイル３１への書き込みに限定されない。ここで説明する２つの変形例では、コマンドファイル３１を書き込んだだけでは処理が開始されず、コマンドファイル３１に対する例えばＲｅａｄ  Ｏｎｌｙ化などの属性変更を契機として処理が開始される。このコマンドファイル３１に対する属性変更命令などの処理を開始する契機となる操作（以下、トリガ操作と記述）によって命令の処理が開始された後に、同期的に処理されるか非同期的に処理されるかによってここで説明する変形例は２つに分かれる。
【０１４６】
同期方式の変形例では、トリガ操作の扱いを除くと、図２５に示した例とほぼ同様の処理が行われる。トリガ操作が行われた後に、まず、コマンドデーモンプロセス部１８が起動される。その後、コマンドデーモンプロセス部１８は、コマンドファイル３１からＷＯＲＭコマンドの取得、コマンドの内容確認及び実行を行い、その処理経過と処理結果をレポジトリファイル３２に対して登録する。そして、処理経過と処理結果を取得するときは、レポジトリファイル３２から取得する。
なお、トリガ操作であるコマンドファイル３１への属性変更操作は、必ずしも、実際にコマンドファイル３１の属性を変更する必要はなく、専らコマンドデーモンプロセス部１８を起動するための契機として用いてもよい。また、トリガ操作は、コマンドファイル３１へのＲｅａｄ  Ｏｎｌｙ化などの属性変更に限定されず、処理の契機とできる操作であれば何でもよい。
【０１４７】
非同期方式の変形例では、トリガ操作の扱い以外は、図１０に示した第１の実施形態におけるコマンドファイル３１の書き込みを契機とする処理とほぼ同様の非同期的処理を行う。すなわち、第１の実施形態と同様に、コマンドデーモンプロセス部１８は、トリガ操作が行われる前に既に常駐しており、所定の時間間隔で命令の処理が開始されるが、このときに、たとえコマンドファイル３１への書き込みがされていても、トリガ操作が行われていなければ、コマンドデーモンプロセス部１８の処理の対象とならず、トリガ操作を伴った処理の命令だけがコマンドデーモンプロセス部１８によって処理される。
なお、この変形例でも、トリガ操作であるコマンドファイル３１への属性変更操作は、必ずしも、実際にコマンドファイル３１の属性を変更する必要はなく、専ら処理を開始するための契機として用いてもよい。また、トリガ操作は、コマンドファイル３１へのＲｅａｄ  Ｏｎｌｙ化などの属性変更に限定されず、処理の契機とできる操作であれば何でもよい。
【０１４８】
ここまで、本発明に関する各実施形態及びその変形例を説明してきたが、本発明はこれらの実施形態や変形例に限定されず、本発明の趣旨を変更しない範囲で変更が可能である。例えば、このような処理を複数の計算機で協調して実現するようにしてもよい。
【０１４９】
本発明のいずれの実施形態をとった場合でも、本発明によれば、コマンドファイルを用いてファイルシステムに対する操作を行うことができ、このコマンドファイルに登録されたＷＯＲＭ化要求コマンドを１つの操作単位（トランザクション）として、複数のファイル及びディレクトリに対するＷＯＲＭ化操作を行うことができる。
【０１５０】
なお、本発明のいずれの実施形態も計算機を制御する計算機プログラムにより演算手段（プロセッサ）を用いて実現されており、この計算機プログラムをＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などの記録媒体に記録しておき、演算手段を備えた計算機に読み込むことで所定の処理が可能な装置を実現するようにしてもよい。
【図面の簡単な説明】
【０１５１】
【図１】ファイルシステム制御装置の構成を説明する図である。
【図２】ＷＯＲＭ化処理を行う際にコマンドファイル方式を提供するファイルシステム制御装置を含む計算機システムの概観を示す図である。
【図３】コマンドファイルを利用したコマンド処理の流れの例を説明する図である。
【図４】ＷＯＲＭ化処理におけるファイルの状態遷移を説明する図である。
【図５】説明に用いるファイルとディレクトリの構成及び各ファイルの属性情報を示す図である。
【図６】コマンドファイルの例を示す図である。
【図７】ＸＭＬの形式に従って作成したコマンドファイルの例を示す図である。
【図８】レポジトリファイルに登録するコマンドの確認（受理）及び実行の結果の記録を示す例を示すである。
【図９】ＷＯＲＭ化に対応するためにファイルシステムが持つファイル属性情報を説明する図である。
【図１０】非同期方式におけるＷＯＲＭ化処理実行の流れを説明する図である。
【図１１】コマンドファイルへのコマンド登録処理の流れを説明する図である。
【図１２】デーモンプロセスによるコマンド処理における３種類の方式を説明する図である。
【図１３】コマンド逐次受理方式による処理を説明する図である。
【図１４】コマンドファイル単位折衷方式による処理を説明する図である。
【図１５】コマンド一括受理方式による処理を説明する図である。
【図１６】レポジトリファイルからのレポジトリ情報取得の処理を説明する図である。
【図１７】対象がファイルの場合のコマンド実行処理を説明する図である。
【図１８】対象がディレクトリの場合のコマンド実行処理を説明する図である。
【図１９】ＷＯＲＭ化されたファイルの保管期間設定及び保管期間延長の処理を説明する図である。
【図２０】ファイルのＷＯＲＭ化処理を説明する図である。
【図２１】ファイルの再Ｗｒｉｔａｂｌｅ化の処理を説明する図である。
【図２２】ＷＯＲＭ化されたファイルの削除処理を説明する図である。
【図２３】ＷＯＲＭ化されたファイルに対する改竄防止処理（アクセス処理）を説明する図である。
【図２４】所定の時間ごとに処理を起動するプロセスによるデーモンプロセス監視処理を説明する図である。
【図２５】デーモンプロセスを用いた同期処理を説明する図である。
【図２６】デーモンプロセスの存在を前提としない同期方式におけるＷＯＲＭ化処理実行の流れを説明する図である。
【図２７】同期処理（第２の実施形態）におけるファイルアクセス時の登録コマンド処理などの処理を説明する図である。
【図２８】同期処理（第２の実施形態）におけるファイルを対象としたコマンドの実行処理を説明する図である。
【図２９】同期処理（第２の実施形態）におけるディレクトリを対象としたコマンドの実行処理を説明する図である。
【図３０】ＷＯＲＭ状態に関する一変形例を示す図である。
【図３１】ＷＯＲＭ状態に関する一変形例を示す図である。
【図３２】ＷＯＲＭ状態に関する一変形例を示す図である。
【図３３】コマンド入力と結果出力に関する変形例を説明する図である。
【図３４】コマンド入力と結果出力に関する変形例を説明する図である。
【図３５】コマンド入力と結果出力に関する変形例を説明する図である。
【図３６】コマンド入力と結果出力に関する変形例を説明する図である。
【符号の説明】
【０１５２】
１      ファイルシステム制御装置
２      プロセッサ
３      メモリ
４      外部記憶Ｉ／Ｆ
５      ファイルシステム制御部
６      ネットワークＩ／Ｆ
７      外部記憶装置
１１    外部記憶Ｉ／Ｆ制御部
１２    ネットワークＩ／Ｆ制御部
１３    ＮＦＳ制御部
１４    ＣＩＦＳ制御部
１５    ＷＯＲＭ制御部
１６    コマンドファイル制御部
１７    レポジトリファイル制御部
１８    コマンドデーモンプロセス部
【図１】
2006228056.tif 000003
【図２】
2006228056.tif 000004
【図３】
2006228056.tif 000005
【図４】
2006228056.tif 000006
【図５】
2006228056.tif 000007
【図６】
2006228056.tif 000008
【図７】
2006228056.tif 000009
【図８】
2006228056.tif 000010
【図９】
2006228056.tif 000011
【図１０】
2006228056.tif 000012
【図１１】
2006228056.tif 000013
【図１２】
2006228056.tif 000014
【図１３】
2006228056.tif 000015
【図１４】
2006228056.tif 000016
【図１５】
2006228056.tif 000017
【図１６】
2006228056.tif 000018
【図１７】
2006228056.tif 000019
【図１８】
2006228056.tif 000020
【図１９】
2006228056.tif 000021
【図２０】
2006228056.tif 000022
【図２１】
2006228056.tif 000023
【図２２】
2006228056.tif 000024
【図２３】
2006228056.tif 000025
【図２４】
2006228056.tif 000026
【図２５】
2006228056.tif 000027
【図２６】
2006228056.tif 000028
【図２７】
2006228056.tif 000029
【図２８】
2006228056.tif 000030
【図２９】
2006228056.tif 000031
【図３０】
2006228056.tif 000032
【図３１】
2006228056.tif 000033
【図３２】
2006228056.tif 000034
【図３３】
2006228056.tif 000035
【図３４】
2006228056.tif 000036
【図３５】
2006228056.tif 000037
【図３６】
2006228056.tif 000038