(57)【特許請求の範囲】
【請求項１】
クライアント計算機と、
前記クライアント計算機に接続され、第一の記憶装置を有する、第一のストレージ装置と、
前記第一のストレージ装置に接続され、第二の記憶装置を有する、第二のストレージ装置と、
を備える階層化ストレージシステムであって、
前記第一の記憶装置は、前記第一の記憶装置から移動され、前記第二の記憶装置に格納されたファイルの格納場所を示す情報を有する、スタブファイルを格納し、
前記第一のストレージ装置は、
前記クライアント計算機から、前記スタブファイルへのアクセス要求を受信した場合、
前記第二の記憶装置に格納されているファイルを前記第一の記憶装置にコピーし、前記第一の記憶装置にコピーされたファイルに対して前記クライアント計算機からのアクセス要求を処理し、前記クライアント計算機に応答し、
前記第一のストレージ装置は、
前記クライアント計算機から、前記スタブファイルに対応する、前記第二の記憶装置に格納されているファイルの前記第一の記憶装置へのコピーを抑止する指示を受信し、
前記クライアント計算機から、前記コピー抑止指示を受けたスタブファイルへのアクセス要求を受信した場合、前記スタブファイルに対応する、前記第二の記憶装置に格納されているファイルに対して前記クライアント計算機からのアクセス要求を処理し、前記クライアント計算機に応答することを特徴とする階層化ストレージシステム。
【請求項２】
前記第一のストレージ装置は、前記クライアント計算機からのアクセス要求の対象が、
前記ファイルか、前記スタブファイルかを判定することを特徴とする請求項１記載の階層化ストレージシステム。
【請求項３】
前記第一のストレージ装置は、
前記クライアント計算機から、ライト要求を受信した場合、
前記第二の記憶装置に格納されているファイルを前記第一の記憶装置にコピーし、前記第一の記憶装置にコピーされたファイルに対して、前記ライト要求を処理し、前記クライアント計算機に応答し、
前記クライアント計算機から、前記コピー抑止指示を受けているスタブファイルへのライト要求を受信した場合、
前記第二の記憶装置に格納されているファイルに対して、前記ライト要求を処理し、前記クライアント計算機に応答する、
ことを特徴とする請求項２記載の階層化ストレージシステム。
【請求項４】
前記第一のストレージ装置は、
前記クライアント計算機から、リード要求を受信した場合、
前記第二の記憶装置に格納されているファイルを前記第一の記憶装置にコピーし、前記第一の記憶装置にコピーされたファイルに対して、前記リード要求を処理し、前記クライアント計算機に応答し、
前記クライアント計算機から、前記コピー抑止指示を受けているスタブファイルへの前記リード要求を受信した場合、
前記第二の記憶装置に格納されているファイルに対して、前記リード要求を処理し、前記クライアント計算機に応答する、
することを特徴とする請求項３記載の階層化ストレージシステム。
【請求項５】
前記クライアント計算機から、前記コピー抑止指示を受けたスタブファイルへのアクセス要求が、所定の回数以上である場合、
前記第一のストレージ装置は、前記スタブファイルに対応する、前記第二の記憶装置に格納されているファイルを、前記第一の記憶装置にコピーすることを特徴とする請求項４記載の階層化ストレージシステム。
【請求項６】
前記第一のストレージ装置は、前記クライアント計算機から、前記コピー抑止を解除する指示を受信した場合に、前記クライアント計算機から、前記スタブファイルへのアクセス要求を受信すると、前記スタブファイルに対応する、前記第二の記憶装置に格納されているファイルを、前記第一の記憶装置にコピーし、前記クライアント計算機に応答することを特徴とする請求項５記載の階層化ストレージシステム。
【請求項７】
前記第一のストレージ装置は、前記第二の記憶装置に格納されているファイルまたは前記スタブファイル毎に、前記第二の記憶装置に格納されているファイルまたは前記スタブファイルへの、前記コピー抑止指示日時と、前記コピー抑止解除日時と、前記クライアント計算機からのアクセス日時と、を記録することを特徴とする、請求項６記載の階層化ストレージシステム。
【請求項８】
前記第一のストレージ装置は、画面表示装置を有し、
前記画面表示装置に、前記第二の記憶装置に格納されているファイルまたは前記スタブファイル毎に、前記第二の記憶装置に格納されているファイルまたは前記スタブファイルへの、前記コピー抑止指示日時と、前記コピー抑止解除日時と、前記クライアント計算機か
らのアクセス日時と、を表示することを特徴とする請求項７記載の階層化ストレージシステム。
【請求項９】
前記第一の記憶装置は、記憶容量は少ないがアクセスが高速なストレージ装置であり、
前記第二の記憶装置は、記憶容量が大きいがアクセスが低速なストレージ装置であることを特徴とする請求項８記載の階層化ストレージシステム。
【請求項１０】
クライアント計算機と、
前記クライアント計算機に接続され、第一の記憶装置を有する、第一のストレージ装置
と、
前記第一のストレージ装置に接続され、第二の記憶装置を有する、第二のストレージ装置と、
を備える階層化ストレージシステムであって、
前記第一の記憶装置は、前記第一の記憶装置から移動され、前記第二の記憶装置に格納されているファイルの格納場所を示す情報を有する、スタブファイルを格納し、
前記第一のストレージ装置は、
前記クライアント計算機から、前記スタブファイルへのアクセス要求を受信した場合、
前記第二の記憶装置に格納されているファイルを前記第一の記憶装置にコピーし、前記第一の記憶装置にコピーされたファイルに対して前記クライアント計算機からのアクセス要求を処理し、前記クライアント計算機に応答し、
前記第一のストレージ装置は、
前記クライアント計算機から、前記スタブファイルに対応する、前記第二の記憶装置に格納されているファイルの前記第一の記憶装置へのコピーを抑止する指示を受信し、
前記クライアント計算機から、前記コピー抑止指示を受けたスタブファイルへのアクセス要求を受信した場合、前記スタブファイルに対応する、前記第二の記憶装置に格納されているファイルに対して前記クライアント計算機からのアクセス要求を処理し、前記クライアント計算機に応答することを特徴とする階層化ストレージシステムにおけるファイルのコピー制御方法。
【請求項１１】
前記第一のストレージ装置は、前記クライアント計算機からのアクセス要求の対象が、
前記ファイルか、前記スタブファイルかを判定することを特徴とする請求項１０記載の階層化ストレージシステムにおけるファイルのコピー制御方法。
【請求項１２】
前記第一のストレージ装置は、
前記クライアント計算機から、ライト要求を受信した場合、
前記第二の記憶装置に格納されているファイルを前記第一の記憶装置にコピーし、前記第一の記憶装置にコピーされたファイルに対して、前記ライト要求を処理し、前記クライアント計算機に応答し、
前記クライアント計算機から、前記コピー抑止指示を受けているスタブファイルへのライト要求を受信した場合、
前記第二の記憶装置に格納されているファイルに対して、前記ライト要求を処理し、前記クライアント計算機に応答する、
ことを特徴とする請求項１１記載の階層化ストレージシステムにおけるファイルのコピー制御方法。
【請求項１３】
前記第一のストレージ装置は、
前記クライアント計算機から、リード要求を受信した場合、
前記第二の記憶装置に格納されているファイルを前記第一の記憶装置にコピーし、前記第一の記憶装置にコピーされたファイルに対して、前記リード要求を処理し、前記クライアント計算機に応答し、
前記クライアント計算機から、前記コピー抑止指示を受けているスタブファイルへの前記リード要求を受信した場合、
前記第二の記憶装置に格納されているファイルに対して、前記リード要求を処理し、前記クライアント計算機に応答する、
することを特徴とする請求項１２記載の階層化ストレージシステムにおけるファイルのコピー制御方法。
【請求項１４】
前記クライアント計算機から、前記コピー抑止指示を受けたスタブファイルへのアクセス要求が、所定の回数以上である場合、
前記第一のストレージ装置は、前記スタブファイルに対応する、前記第二の記憶装置に格納されているファイルを、前記第一の記憶装置にコピーすることを特徴とする請求項１３記載の階層化ストレージシステムにおけるファイルのコピー制御方法。
【請求項１５】
前記第一のストレージ装置は、前記クライアント計算機から、前記コピー抑止を解除する指示を受信した場合に、前記クライアント計算機から、前記スタブファイルへのアクセス要求を受信すると、前記スタブファイルに対応する、前記第二の記憶装置に格納されているファイルを、前記第一の記憶装置にコピーし、前記クライアント計算機に応答することを特徴とする請求項１４記載の階層化ストレージシステムにおけるファイルのコピー制御方法。
【請求項１６】
前記第一のストレージ装置は、前記第二の記憶装置に格納されているファイルまたは前記スタブファイル毎に、前記第二の記憶装置に格納されているファイルまたは前記スタブファイルへの、前記コピー抑止指示日時と、前記コピー抑止解除日時と、前記クライアント計算機からのアクセス日時と、を記録することを特徴とする、請求項１５記載の階層化ストレージシステムにおけるファイルのコピー制御方法。
【請求項１７】
前記第一のストレージ装置は、画面表示装置を有し、
前記画面表示装置に、前記第二の記憶装置に格納されているファイルまたは前記スタブファイル毎に、前記第二の記憶装置に格納されているファイルまたは前記スタブファイルへの、前記コピー抑止指示日時と、前記コピー抑止解除日時と、前記クライアント計算機からのアクセス日時と、を表示することを特徴とする請求項１６記載の階層化ストレージシステムにおけるファイルのコピー制御方法。
【請求項１８】
前記第一の記憶装置は、記憶容量は少ないがアクセスが高速なストレージ装置であり、
前記第二の記憶装置は、記憶容量が大きいがアクセスが低速なストレージ装置であることを特徴とする請求項１７記載の階層化ストレージシステムにおけるファイルのコピー制御方法。
【請求項１９】
クライアント計算機と、
前記クライアント計算機に接続され、第一の記憶装置を有する、第一のストレージ装置と、
前記第一のストレージ装置に接続され、第二の記憶装置を有する、第二のストレージ装置と、
を備える階層化ストレージシステムであって、
前記第一の記憶装置は、記憶容量は少ないがアクセスが高速であり、
前記第二の記憶装置は、記憶容量が大きいがアクセスが低速であり、
前記第一の記憶装置は、前記第一の記憶装置から移動され、前記第二の記憶装置に格納されているファイルの格納場所を示す情報を有する、スタブファイルを格納し、
前記第一のストレージ装置は、前記クライアント計算機からのアクセス要求の対象が、
前記第二の記憶装置に格納されているファイルか、前記第一の記憶装置に格納されているスタブファイルかを判定し、
前記第一のストレージ装置は、
前記クライアント計算機から、前記スタブファイルへのアクセス要求を受信した場合、前記第二の記憶装置に格納されているファイルを前記第一の記憶装置にコピーし、前記第一の記憶装置にコピーされたファイルに対して前記クライアント計算機からのアクセス要求を処理し、前記クライアント計算機に応答し、
前記第一のストレージ装置は、
前記クライアント計算機から、前記スタブファイルに対応する、前記第二の記憶装置に格納されているファイルの前記第一の記憶装置へのコピーを抑止する指示を受信し、
前記クライアント計算機から、前記コピー抑止指示を受けたスタブファイルへのアクセス要求を受信した場合、前記スタブファイルに対応する、前記第二の記憶装置に格納されているファイルに対して前記クライアント計算機からのアクセス要求を処理し、前記クライアント計算機に応答し、
前記第一のストレージ装置は、前記クライアント計算機から、前記第一の記憶装置に格納されているファイルへのアクセス要求を受信した場合、前記第一の記憶装置に格納されているファイルに対して前記クライアント計算機からのアクセス要求を処理し、前記クライアント計算機に応答し、
前記クライアント計算機から、前記コピー抑止指示を受けたスタブファイルへのアクセス要求が、所定の回数以上である場合、前記第一のストレージ装置は、前記スタブファイルに対応する、前記第二の記憶装置に格納されているファイルを、前記第一の記憶装置にコピーすることを特徴とする階層化ストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションが利用する、階層化されたストレージ装置のストレージ装置間でのファイルのリコールを制御するシステム、方法に関する。
【背景技術】
【０００２】
大容量かつ高速なストレージ装置を低コストで構築するための技術として階層化ストレージ管理技術（HSM）が提案されている。HSMでは、格納されたファイルに高速にアクセス可能だが容量の小さいプライマリストレージと、アクセス速度は遅いが大容量なセカンダリストレージを階層化して、１つのストレージ装置とする。頻繁に参照されるファイルをプライマリストレージに格納し、参照回数の少ないデータをセカンダリストレージに格納することで、大容量かつ高速なストレージ装置を低コストで実現する。ファイルサーバを利用するクライアントは各階層のストレージ装置に格納されているファイルに、透過的にアクセスすることができる。
【０００３】
特許文献１では、異なる特徴をもつ複数のストレージ装置を階層化して、１つのストレージ装置とする技術が公開されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許７２２５２１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来の技術ではプライマリストレージに格納されているファイルに対して、一定期間、ファイルサーバを利用するクライアントからアクセスがなかった場合、そのファイルをセカンダリストレージに移動する。セカンダリストレージに移動されたファイルにアクセスがあった場合、そのファイルは以後、複数回アクセスされる可能性が高いため、HSMはそのファイルを、高速にアクセス可能なプライマリストレージにコピーバック（以後、リコールと記述する）する。このように、クライアントから暫くアクセスされなくなったファイルはセカンダリストレージに移動し、次のアクセスの際に高速なプライマリストレージにリコールすることで、ファイルへの高速アクセスと大容量化を低コストで実現する。 
しかし、従来の階層化ストレージにおいて、セカンダリストレージに移動されたファイルに対してアクセスがあったとき、アクセスがあった全てのファイルをリコールするのが適切ではない場合がある。全てのファイルをリコールすると、再度アクセスされる可能性が低いファイルが、容量の限られたプライマリストレージに格納される場合がある。また、プライマリストレージにリコールする必要がないファイルのコピーが発生することで、ストレージ装置の性能が低下する。
【課題を解決するための手段】
【０００６】
本発明では、階層化ストレージを利用するクライアント上のアプリケーションが、ファイルのリコールを抑止するためのインタフェースを提供する。即ち、ファイルのリコールが不要であることを階層化ストレージに通知する手段をアプリケーションに対して提供する。そして、そのアプリケーションからの通知を受け取り、ファイルのリコールを抑止する機能を階層化ストレージに提供する。
【０００７】
階層化ストレージを利用するアプリケーションが、ファイルにアクセスする際、そのファイルのリコールを抑止することを、階層化ストレージに通知する。
【発明の効果】
【０００８】
本発明によって、階層化ストレージを利用するアプリケーションが、セカンダリストレージに格納されたファイルへアクセスする際に、ファイルのリコールを抑止することができる。その結果、ファイルの不要なコピーと再アクセスされる可能性の低いファイルがプライマリストレージに格納されるのを防止することができる。
【図面の簡単な説明】
【０００９】
【図１】本発明の概要を示す図である。
【図２】本発明の実施例のハードウェア構成を示す図である。
【図３】プライマリファイルストレージのソフトウェア構成を示す図である。
【図４】セカンダリファイルストレージのソフトウェア構成を示す図である。
【図５】クライアントのソフトウェア構成を示す図である。
【図６】inodeの構造及びinodeの格納領域を示す図である。
【図７】スタブと通常ファイルを示す図である。
【図８】ディレクトリファイルの構造を示す図である。
【図９】ファイルマイグレーション処理のフローチャートである。
【図１０】アプリケーションがプライマリファイルサーバ上のファイルに通常のファイル操作を行う際の処理概要を示す図である。
【図１１】アプリケーションがプライマリファイルサーバ上のファイルにリコール制御を行う際の処理概要を示す図である。
【図１２】リコール抑止リストの構造を示す図である。
【図１３】リコール抑止リストへの登録処理のフローチャートである。
【図１４】リコール処理のフローチャートである。
【図１５】ファイルへのリード/ライト処理のフローチャートである。
【図１６】レポーティングログの例である。
【図１７】レポーティング情報を管理者に提示するGUI図である。
【図１８】レポーティング情報を表示するファイルを選択するためのGUI図である。
【発明を実施するための形態】
【００１０】
以下に、本発明の実施形態を説明する。
【００１１】
図１は本発明が想定する階層化ストレージの概要を説明する模式図である。
【００１２】
プライマリファイルサーバ１０はセカンダリファイルサーバ２０と連携し、階層化ストレージを構築する。プライマリファイルサーバ１０が持つプライマリストレージ１１には、クライアント３０上のアプリケーション３１が頻繁にアクセスするファイルが格納され、セカンダリファイルサーバ２０が持つセカンダリストレージ２１には、アプリケーション３１が一定時間アクセスしなくなったファイルが格納される。ファイルサーバ１０とファイルサーバ２０はファイル共有サービス２２を用いて、ファイルのマイグレーションとリコールを行う。
【００１３】
マイグレーション制御部１３はプライマリストレージ１１に保存されたファイルのマイグレーションを制御する。マイグレーション制御部１３はプライマリストレージ１１に保存されたファイルの最終アクセス時刻を定期的に監視する。マイグレーション制御部１３は現在時刻とファイルの最終アクセス時刻を比較し、一定時間当該ファイルにアクセスがなかった場合、そのファイルを、ファイルサーバ２０の提供するファイル共有サービス２２を用いて、セカンダリストレージ２１にコピーする。マイグレーション制御部１３はマイグレーション終了後、当該ファイルをプライマリストレージ１１から削除する。セカンダリストレージ２１に移動されたファイルに、クライアント３０上のアプリケーション３１がアクセスする手段を提供するため、マイグレーション制御部１３は当該ファイルに対応するスタブを作成する。スタブは、アプリケーション３１がセカンダリストレージ２１に移動されたファイルにアクセスするための情報を有する特別なファイルである。スタブには、移動されたファイルのセカンダリファイルサーバ２０上でのパスが記録される。以後、アプリケーション３１は、スタブをセカンダリストレージ２１に移動されたファイルと認識する。上述した一連の処理をマイグレーション処理と定義する。
【００１４】
リコール制御部１４はファイルのリコールを制御する。リコール制御部１４は、ファイル共有サービス１２を通じて、アプリケーション３１からプライマリストレージ１１に格納されているスタブにアクセスがあった場合、対応するファイルをセカンダリストレージ２１からリコールする。リコールの際、スタブに記録されたパスを用いて、ファイルのセカンダリファイルサーバ２１上での格納場所を認識する。また、リコール制御部１４はアプリケーション３１からファイルのリコールを抑止するように、通知があった場合はそのファイルのリコールを行わない。アプリケーション３１から通知があったかどうかはリコール抑止リスト１５を参照して判断する。
【００１５】
ファイル共有サービス１２はアプリケーション３１からのプライマリストレージ上のファイルに対するリード/ライト、作成/削除、属性の変更/確認等の操作を処理する。また、アプリケーション３１からリコールの抑止指示を受領し、リコール抑止リストを更新する。
【００１６】
レポーティング制御部１６はクライアントごとに、ファイルへのアクセス時刻、リコールの抑止開始時刻、リコール抑止解除時刻をログとして記録し、レポーティング情報に加工して管理者に提示する。また、ログに基づいて、リコール抑止の強制解除を実行する。
【００１７】
図１では１台のクライアントがプライマリファイルサーバに接続しているが、複数台のクライアントが接続する形をとってもよい。
【００１８】
図２は本発明の階層化ストレージのハードウェア構成図を示す。
【００１９】
プライマリファイルサーバ１００はCPU（Central Processing Unit）１０１とメモリ１０２、記憶装置１０３とNIC（Network Interface Card）１０４、１０５から構成される。それぞれの構成部位は内部バス又は内部ネットワークにて接続される。CPU、メモリ、NIC、記憶装置の数は図中に示す個数に限定されるものではない。また、プライマリファイルサーバ１００は、画面表示装置を備える。画面表示装置には、後述するレポーティング情報等が表示される。
【００２０】
CPU１０１はメモリ１０２に格納されたプログラムを実行する。例えば、CPU１０１はファイル共有サービスを提供するプログラムを実行し、記憶装置１０３に格納されたファイルをクライアント計算機３００へ提供する。以下、プログラムが処理を行うと記載している場合は、実際にはＣＰＵ１０１が実行していることを意味するものとする。
【００２１】
メモリ１０２は、例えば半導体メモリであり、CPU１０１が実行するプログラムやプログラムが参照するデータが格納される主記憶装置である。
【００２２】
NIC１０４はプライマリファイルサーバ１００がセカンダリファイルサーバ２００とデータの送受信を行うために用いる。また、NIC１０５はプライマリファイルサーバ１００が、LAN（Local Area Network）４００を介して、クライアント計算機３００とデータを送受信するために用いる。
【００２３】
記憶装置１０３はプライマリファイルサーバ１００が使用するプログラムやファイルを格納するための二次記憶装置である。プライマリファイルサーバは、SSD（Solid State Drive）、HDD（Hard Disk Drive）、テープ装置等を二次記憶装置として、利用することができる。記憶装置１０３は図中では内部バスによって、他の構成部位と接続しているが、 RAID（Redundant Array of Independent Disks）コントローラのようなストレージコントローラを介して、他の構成部位と接続してもよい。また、FC（Fiber Channel） HBA（Host Bus Adaptor）を介して、SAN（Storage Area Network）上の記憶装置１０３と他の構成部位が接続してもよい。
【００２４】
セカンダリファイルサーバ２００はCPU２０１とメモリ２０２、記憶装置２０３とNIC２０４から構成される。それぞれの構成部位は内部バス又は内部ネットワークにて接続される。CPU、メモリ、記憶措置、NIC、の数は図中に示す個数に限定されるものではない。
【００２５】
CPU２０１はメモリ２０２に格納されたプログラムを実行する。例えば、CPU２０１はファイル共有サービスを提供するプログラムを実行し、記憶装置２０３に格納されたファイルをプライマリファイルサーバ１００へ提供する。
【００２６】
メモリ２０２は、例えば半導体メモリであり、CPU２０１が実行するプログラムやプログラムが参照するデータが格納される主記憶装置である。
【００２７】
NIC２０４はセカンダリファイルサーバ２００がプライマリファイルサーバ１００とデータの送受信を行うために用いる。
【００２８】
記憶装置２０３はセカンダリファイルサーバ２００が使用するプログラムやファイルを格納するための二次記憶装置である。セカンダリファイサーバはSSD、HDD、テープ装置等を二次記憶装置として、利用することができる。記憶装置２０３は図中では内部バスによって、他の構成部位と接続しているが、RAIDコントローラのようなストレージコントローラを介して、他の構成部位と接続してもよい。また、FC HBAを介して、SAN上の記憶装置と１０３と他の構成部位が接続してもよい。
【００２９】
階層化ストレージを構築するため、プライマリファイルサーバの１００記憶装置１０３とセカンダリファイルサーバ２００の記憶装置２０３には異なる特徴を持ったデバイスを用いる。例えば、記憶装置１０３には高速にデータの読み書きが可能だが、１ビット当たりの単価が高いSSDを用い、記憶装置２０３にはビット単価は低いが、読み書きの性能が低いHDDやテープ装置を用いる。また、記憶装置２０３に、記憶装置１０３よりも大容量のデバイスを用いるか、複数のデバイスを１つの記憶装置とすることで、記憶装置２０３のファイル格納領域を記憶装置１０３よりも大きくする。
【００３０】
クライアント計算機３００はCPU３０１とメモリ３０２、記憶装置３０３とNIC３０４から構成される。それぞれの構成部位は内部バス又は内部ネットワークにて接続される。CPU、メモリ、記憶装置、NIC、の数は図中に示す個数に限定されるものではない。
【００３１】
CPU３０１はメモリ３０２に格納されたプログラムを実行する。例えば、CPU３０１はファイル共有サービスを提供するプログラムを実行し、プライマリファイルサーバ１００の記憶装置１０３に格納されているファイルにアクセスする。
【００３２】
メモリ３０２は、例えば半導体メモリであり、CPU３０１が実行するプログラムやプログラムが参照するデータが格納される主記憶装置である。
【００３３】
NIC３０４はクライアント計算機３００が、LAN４００を介して、プライマリファイルサーバとデータの送受信を行うために用いる。
【００３４】
記憶装置３０３はクライアント計算機３００が使用するプログラムやファイルを格納するための二次記憶装置である。クライアント計算機３００はSSD、HDD、テープ装置等を二次記憶装置として、用いることができる。記憶装置３０３は図中では内部バスによって、他の構成部位と接続しているが、RAIDコントローラのようなストレージコントローラを介して、他の構成部位と接続してもよい。また、FC HBAを介して、SAN上の記憶装置１０３と他の構成部位が接続してもよい。
【００３５】
NIC１０４とNIC２０４の通信路４０１には、例えばEthernet（登録商標）を用いることが考えられるが、通信可能であればこれ以外の媒体でも良い。
【００３６】
NIC１０５とLAN４００の通信路４０２には、例えばEthernet（登録商標）を用いることが考えられるが、通信可能であればこれ以外の媒体でも良い。
【００３７】
NIC３０４とLAN４００の通信路４０３には、例えばEthernet（登録商標）を用いることが考えられるが、通信可能であればこれ以外の媒体でも良い。
【００３８】
なお、クライアントは図中では１台であるが、複数台のクライアントがプライマリファイルサーバに接続することを制限するものではない。
【００３９】
図３は、プライマリファイルサーバ１００のメモリ１０２に格納されているプログラムおよび、プログラムが参照するデータの構成を示す。
【００４０】
ファイル共有クライアントプログラム１００２は、プライマリファイルサーバ１００が、ファイル共有サーバプログラム２００１を実行しているセカンダリファイルサーバ２００上のファイルにファイル操作を行うために用いるプログラムである。ファイル操作とは、リード/ライト処理や属性の確認/変更等である。
【００４１】
ファイル共有サーバプログラム１００３は、クライアント３００が、プライマリファイルサーバ１００上のファイルにファイル操作を行う手段を提供するためのプログラムである。また、ファイル共有サーバプログラム１００３は、クライアント計算機３００上のアプリケーション３００１が、プライマリファイルサーバ１００上のファイルに行うリコール制御操作を処理する。
【００４２】
一般的に、ファイル共有プログラムには、クライアントプログラムとサーバプログラムがある。クライアントプログラムを実行しているローカルサーバは、サーバプログラムを実行しているリモートサーバ上のファイルシステムを、クライアントプログラムを実行しているローカルサーバ上のファイルシステムとして扱うことができる。即ち、クライアントプログラムを実行しているローカルサーバは、サーバプログラムを実行しているリモートサーバのファイルシステムに対して、ファイルのリード/ライト、作成/削除、属性の確認/変更等のファイル操作を実行することができる。
【００４３】
実施形態ではNFS（Network File System）、CIFS（Common Internet File System）をファイル共有プログラムとして想定している。
【００４４】
HSMプログラム１００５は階層化ファイルストレージを構築するために、プライマリファイルサーバ１００上で動作するプログラムである。ファイルのマイグレーションを制御するマイグレーション制御プログラム１００６、ファイルのリコールを制御するリコール制御プログラム１００７、記憶装置１０３に格納されたファイルへのアクセス時刻、ファイルのリコール抑止開始時刻等のレポーティング情報を階層化ストレージの管理者に提示するレポーティングプログラム１００８を含む。また、HSMプログラム１００５にはリコール制御プログラム１００７が参照するリコール抑止リスト１００９と、レポーティングプログラム１００８が参照するレポーティングログ領域１０１０が含まれる。
【００４５】
マイグレーション制御プログラム１００６はマイグレーション対象のファイルを記憶装置１０３から検索し、当該ファイルをセカンダリファイルサーバ２００上の記憶装置２０３にマイグレーションする。
【００４６】
リコール制御プログラム１００７はファイルのリコールを制御する。クライアント計算機３００上のアプリケーション３００１から記憶装置１０３に格納されているファイルへのアクセスがあった場合、ファイルをセカンダリファイルサーバ２００からリコールする。リコールの際、リコール抑止リスト１００９を参照し、リコール対象のファイルに対するリコールが抑止されていた場合、そのファイルのリコールは行わない。
【００４７】
レポーティングプログラム１００８は、レポーティングログ１０１０の情報を加工し、階層化ストレージの管理者にレポーティング情報を表示する。レポーティングログ１０１０にはファイルへのアクセス時刻、ファイルへのリコール抑止開始時刻、リコール抑止解除時刻が記録されている。また、レポーティングプログラム１００８はレポーティングログに基づき、リコール抑止の強制解除を行う。
【００４８】
ファイルシステムプログラム１０１１は、ファイル共有サーバプログラム１００３とHSMプログラム１００５が、記憶装置１０３に格納されたファイルへ行う操作（リード/ライト、作成/削除、属性の変更/確認等）を処理するプログラムである。
【００４９】
図４はセカンダリファイルサーバ２００のメモリ２０２に格納されているプログラム構成を示す。
【００５０】
ファイル共有サーバプログラム２００１は、ファイル共有クライアントプログラム１００２を実行しているプライマリファイルサーバ１００が、セカンダリファイルサーバ２００上のファイルにファイル操作を行う手段を提供する。
【００５１】
ファイルシステムプログラム２００２は、ファイル共有サーバプログラム２００１が記憶装置１０３に格納されたファイルへ行う操作（リード/ライト、作成/削除、属性の変更/確認等）を処理するプログラムである。
【００５２】
図５は、クライアント３００のメモリ３０２に格納されているプログラム構成を示す。
【００５３】
アプリケーション３００１はプライマリファイルサーバ１００上のファイルにアクセスする業務アプリケーションである。例えば、階層化ストレージに保存されたファイルのウイルス検知を行うアンチウイルスソフトや階層化ストレージに保存されたファイルのバックアップを行うバックアップソフト等がこれにあたる。
【００５４】
ファイルシステムプログラム３００２はアプリケーション３００１からの、プライマリファイルサーバ１００へのファイル操作要求（リード/ライト、作成/削除、属性の変更/確認要求等）を、プライマリファイルサーバ１００に送信するよう、ファイル共有クライアントプログラム３００３に指示する。
【００５５】
ファイル共有クライアントプログラム３００３は、アプリケーション３００１がファイルシステムプログラム３００２に要求した操作を、ファイル共有サーバプログラム１００３に送信する。ファイル共有クライアントプログラム３００３を用いることで、クライアント３００は、プライマリファイルサーバ１００上のファイルにファイル操作を行う。
【００５６】
ここで、ファイルシステムプログラム１０１１が記憶装置１０３に格納されたファイルを管理する方法について説明する。
【００５７】
ファイルシステムプログラム１０１１はinodeによってファイルのデータや属性を管理している。inodeは各ファイルに対し１つ存在し、そのファイルのメタデータが格納されている。
【００５８】
図６は、inodeの構造及びinodeの格納領域を示す。inode構造体４０のblock_numberエントリ４１にはファイルのデータが格納されているブロックのブロック番号が格納される。is_stubエントリ４２はファイルがスタブかどうかを示すフラグである。atimeエントリ４３にはファイルへの最終アクセス時刻が格納されている。そのほかにもinodeにはファイルのアクセス権限や最終更新時刻を格納するエントリ等が存在する。inodeは記憶装置１０３の特別な領域（スーパーブロック５１）に記録されている。ファイルシステムプログラム１０１１はinodeを参照することで、各ファイルの属性や記憶装置１０３上での格納場所を取得することができる。
【００５９】
ファイルがスタブの場合、block_numberエントリ４１が示すブロックには、スタブに対応するファイルのセカンダリファイルサーバ上でのパスが記録される。
【００６０】
図７は、ファイルがスタブである場合とない場合で、inodeに記録される情報が違うことを示す。ここで、ファイルとは、スタブと実体のデータを有するファイルとを含む。inode a（構造体８０）ではis_stubエントリ８２の値が0である（つまりファイルがスタブではない）。この場合、block_numberエントリ８１の示すブロック８３（ブロックナンバー１００）にはファイルのデータが保存されている。それに対し、inode b（構造体９０）ではis_stubエントリ９２の値が１である（つまりファイルがスタブである）。この場合、block_numberエントリ９１の示すのブロック９３（ブロックナンバー５５）には、スタブに対応するファイルのセカンダリファイルサーバ上でのパスの情報が保存されている。
【００６１】
各ファイルに対応するinodeの記憶装置上の位置は各inodeに割り振られているinode番号から計算することができる。各ファイルに対応するinode番号はディレクトリファイルという、特殊なファイルに保存されている。ディレクトリファイルはファイルシステムのディレクトリ１つごとに１つ存在する。
【００６２】
図８は、ディレクトリファイルの例を示す。ディレクトリファイル70は/home/user1/docディレクトリのディレクトリファイルである。/home/user1/docディレクトリにはaaa.txtとbbb.docというファイルが保存されている。各ファイルにはそれぞれ、102と500がinode番号として割り振られていることを、エントリ７１とエントリ７２から知ることが出来る。
【００６３】
ファイルシステムプログラム１０１１は、検索対象のファイルが格納されているディレクトリを、ルートディレクトリのディレクトリファイルからたどっていく事で、検索対象のファイルに対応するinode番号を得ることができる。ルートディレクトのディレクトリファイルは記憶装置１０３の所定の位置に記録される。
【００６４】
ファイル共有サーバプログラム１００３とHSMプログラム１００５は、ファイルシステムプログラム１０１１によって、記憶装置１０３に格納されたファイルに対して、ファイル操作（リード/ライト、作成/削除、属性の変更/確認等）を行うことができる。
【００６５】
図９は、マイグレーション制御プログラム１００６による、ファイルのマイグレーション処理のフローチャートを示す。
【００６６】
前述したとおり、ファイルのマイグレーション処理はマイグレーション制御プログラム１００６が行う。マイグレーション制御プログラム１００６は、プライマリファイルサーバ１００の記憶装置１０３に格納されているファイルを定期的に検索し、マイグレーション対象のファイルを抽出する。マイグレーション対象のファイルを抽出する際、マイグレーション制御プログラム１００６はファイルシステムプログラム１０１１を利用し、ファイルの属性を確認する。ファイルの属性とは、例えば最終アクセス時刻である。
【００６７】
マイグレーション制御プログラム１００６はファイルシステムプログラム１０１１を利用し、記憶装置１０３に格納されている各ファイルの最終アクセス時刻（atime）を取得する。マイグレーション制御プログラム１００６は現在時刻と最終アクセス時刻を比較し、一定時間ファイルにアクセスがなかった場合、ファイルをセカンダリファイルサーバ２００の記憶装置２０３に移動する。ファイルの移動はファイル共有クライアントプログラム１００２が行う。
【００６８】
ステップ５０１０において、マイグレーション制御プログラム１００６は、ファイルシステムプログラム１０１１を用いて、記憶装置１０３に格納されたファイルの最終アクセス時刻を確認し、マイグレーション対象のファイルを抽出する。このとき、全ファイルの最終アクセス時刻を確認しても良いし、プライマリファイルサーバ１００の管理者が指定したファイルの最終アクセス時刻を確認する形をとっても良い。マイグレーションするファイルの抽出には、最終アクセス時刻以外の属性情報を利用してもよい。
【００６９】
マイグレーション対象のファイルがなかった場合（ステップ５０２０：NO）、マイグレーション制御プログラム１００６はファイルのマイグレーション処理を終了する。
【００７０】
マイグレーション対象のファイルが存在する場合（ステップ５０２０：YES）、マイグレーション制御プログラム１００６はファイル共有クライアントプログラム１００２を用いて、当該ファイルをセカンダリファイルサーバの記憶装置２０３に移動する（ステップ５０３０）。ファイルの移動後、マイグレーション制御プログラム１００６は、ステップ５０４０において、当該ファイルのスタブの作成をファイルシステムプログラム１０１１に指示する。具体的には、ファイルシステムプログラム１０１１は、当該ファイルのinodeのis_stubエントリの値を１にし、block_numberが示すブロックに、スタブに対応するファイルのセカンダリファイサーバ上でのパスを記録する。その後、マイグレーション制御プログラム１００６は、ファイルマイグレーション処理を終了する。
【００７１】
アプリケーション３００１は、プライマリファイルサーバ上のファイルに対し、ファイル操作処理を行う。ファイル操作処理には2種類ある。１つは通常のファイル操作（リード/ライト、作成/削除、属性の変更/確認等）であり、もう１つはファイルのリコールを制御する処理である。
【００７２】
アプリケーションがリコールの制御処理を実行する例を以下に挙げる。
【００７３】
例えば、アプリケーションがアンチウイルスソフトであり、ファイルの全スキャンを行う場合が例として挙げられる。このとき、アプリケーションはファイルをスキャンする前に、スキャン対象のファイルのリコールの抑止を開始する。そして、スキャン終了後、ファイルのリコールの抑止を解除する。
【００７４】
その他にも、アプリケーションが、サイズの大きいファイルにアクセスする前に、リコールの抑止を開始し、アクセス終了後にリコールの抑止を解除する場合等が例として挙げられる。
【００７５】
図１０はアプリケーション３００１が、プライマリファイルサーバ１００上のファイルに通常のファイル操作を行った場合の処理の概要を示す。
【００７６】
まず、アプリケーション３００１がファイルシステムプログラム３００２に対して、ファイルへのリード/ライト、作成/削除、属性の確認/変更等のファイル操作を要求する（操作４０１０）。ファイルシステムプログラム３００２は当該ファイルがリモートサーバ（プライマリファイルサーバ１００）上のファイルであった場合、ファイル共有クライアントプログラム３００３にコマンドの発行を依頼する（操作４０２０）。ファイル共有クライアントはアプリケーションから要求された処理（ファイルへのリード/ライト、作成/削除、属性の確認/変更等）をコマンドに変換し、ファイル共有サーバプログラム１００３に送信する（操作４０３０）。ファイル共有サーバプログラム１００３は、ファイル共有クライアントプログラム３００３が送信したコマンドを受領し（操作４０４０）、コマンドに対応するファイル操作をファイルシステムプログラム１０１１に要求する（操作４０５０）。その後、ファイルシステムプログラム４０５０は、クライアント３００に処理結果を返答する。具体的には、ファイルシステムプログラム１０１１は、ファイル共有サーバプログラム１００３に処理結果を返答する。そして、ファイル共有サーバプログラム１００３は、その処理結果をファイル共有クライアントプログラム３００３に送信する。次に、ファイル共有クライアントプログラム３００３は、ファイルシステムプログラム３００２に処理結果を返答し、その後アプリケーション３００１がファイル操作に対する処理結果を受信する。
【００７７】
図１１は、実施形態において、アプリケーション３００１がプライマリファイルサーバ１００上のファイルに対して、リコール制御処理を行った場合の処理の概要を示す。
【００７８】
まず、リコール制御処理の概要を説明する。
【００７９】
実施形態では、通常のファイル操作と同様に、既存のファイル共有プログラム（NFS、CIFSプルグラム等）のプロトコルを利用し、アプリケーション３００１が、プライマリファイルサーバ１００上のファイルに対し、リコールの制御処理を行う。
【００８０】
実施形態におけるリコール制御方式の一実施例を以下に説明する。
【００８１】
アプリケーション３００１はあるファイルのリコール抑止を開始したい場合、"<file_name>.norc"というファイル（パス）名のファイルの作成をファイルシステムプログラム３００２に要求する。"<file_name>"は、リコールを抑止したいファイルのファイル（パス）名である。例えば、／ｔｍｐ／ｂｂｂ．ｄｏｃのリコールを抑止したい場合、／ｔｍｐ／ｂｂｂ．ｄｏｃ.norcという名前のファイルを作成するように、ファイルシステムプログラム３００２に要求する。ファイルシステムプログラム３００２はファイル共有クライアントプログラム３００３にコマンドの作成を依頼する。ファイル共有クライアントプログラム３００３は／ｔｍｐ／ｂｂｂ．ｄｏｃ.norcの作成を依頼するコマンドを作成し、ファイル共有サーバプログラム１００３に送信する.／ｔｍｐ／ｂｂｂ．ｄｏｃ.norcの作成を依頼するコマンドを受信したファイル共有サーバプログラム１００３はそのコマンドが、／ｔｍｐ／ｂｂｂ．ｄｏｃのリコール抑止開始を通知するメッセージだと解釈し、リコール抑止リスト１００９への登録処理を行う。ファイル共有サーバプログラム１００３は実際には／ｔｍｐ／ｂｂｂ．ｄｏｃ.norcの作成は行わない。
【００８２】
アプリケーション３００１はあるファイルのリコール抑止を解除したい場合、"<file_name>.norc"というファイルの削除をファイルシステムプログラム３００２に要求する。"<file_name>"は、リコール抑止を解除したいファイルのファイル（パス）名である。例えば、／ｔｍｐ／ｂｂｂ．ｄｏｃのリコール抑止を解除したい場合、／ｔｍｐ／ｂｂｂ．ｄｏｃ.norcという名前のファイルの作成をファイルシステムプログラム３００２に要求する。ファイルシステムプログラム３００２はファイル共有クライアントプログラム１００２にコマンドの作成を依頼する。ファイル共有クライアントプログラム３００３は／ｔｍｐ／ｂｂｂ．ｄｏｃ.norcの削除を依頼するコマンドを作成し、ファイル共有サーバプログラム１００３に送信する。／ｔｍｐ／ｂｂｂ．ｄｏｃ.norcの削除を依頼するコマンドを受信したファイル共有サーバ３００３はそのコマンドを、／ｔｍｐ／ｂｂｂ．ｄｏｃのリコール抑止解除を通知するメッセージだと解釈し、リコール抑止リスト１００９からの削除処理を行う。
【００８３】
以下、リコール制御処理のフローチャートを説明する。まず、アプリケーション３００１がファイルシステムプログラム３００２に対して、リコール制御処理の実行を要求する（操作６０１０）。上記の実施例では、"<file_name>.norc"ファイルの作成または削除処理の要求が、リコールを制御するための処理である。
【００８４】
ファイルシステムプログラム３００２はファイル共有クライアントプログラム３００３に、コマンドの発行を依頼する（操作６０２０）。ファイル共有クライアントはアプリケーションから要求された処理（"<file_name>.norc"の作成/削除）をコマンドに変換し、ファイル共有サーバプログラム１００３に送信する（操作６０３０）。ファイル共有サーバプログラム１００３は、ファイル共有クライアントプログラム３００３が送信したコマンドを受領（操作６０４０）し、リコール抑止リスト１００９への登録/削除処理を実行する（操作６０５０）。
【００８５】
上記の実施例では"<file_name>.norc"の、作成/削除をリコール制御処理としたが、他の特定の処理をリコール制御処理としてもよい。他の特定の処理については、第２の実施例及び第３の実施例で説明する。
【００８６】
アプリケーションは、クライアント計算機が、実施形態で示す階層化ストレージ以外のファイルサーバに接続する場合、リコール抑止制御処理を行わないようにする必要がある。上記の実施例では、アプリケーション３００１が、実施形態で示す階層化ストレージ以外のファイルサーバに接続し、リコール制御処理を実行した場合、”＜ｆｉｌｅ＿ｎａｍｅ＞．ｎｏｒｃ”というファイル（パス）名のファイルが当該ファイルサーバ上に作成されるためである。以下の方法により、リコール制御処理の実行を防止することができる。
【００８７】
実施形態では、階層化ストレージの管理者が、ファイルを、アプリケーション３００１によるリコール制御の対象にするかどうかを設定可能にする。アプリケーション３００１はファイルのリコール制御を実行する前に、当該ファイルが格納されているディレクトリに”．ｒｅｃａｌｌ＿ｃｏｎｔｒｏｌ”というファイル名のファイルが存在するかどうかを確認する。もし、存在していた場合、アプリケーション３００１は当該ファイルがリコールの制御対象だと判断し、リコール制御処理を実行する。もし、存在しなかった場合、アプリケーション３００１は当該ファイルがリコール制御の対象外だと判断し、リコール制御処理を中断する。実施形態における階層化ストレージにディレクトリを作成した場合、”．ｒｅｃａｌｌ＿ｃｏｎｔｒｏｌ”ファイルは自動的に作成される。ファイルをリコールの制御対象外としたい場合、管理者はこのファイルを削除する。また、この機能は、アプリケーション３００１が、実施形態における階層化ストレージ以外のファイルサーバに対して、リコール制御処理を実行するのを防止する。この機能を用いれば、”．ｒｅｃａｌｌ＿ｃｏｎｔｒｏｌ”というファイルをユーザまたは管理者が、作成しない限り、アプリケーション３００１が、実施形態で示す階層化ストレージ以外のファイルサーバにリコール制御処理を実行することはない。
【００８８】
図１２は、リコール抑止リスト１００９の概要を示す。前述したとおり、リコール制御処理のコマンドを受領したファイル共有サーバプログラム１００３は、リコール制御対象のファイルをリコール抑止リスト１００９へ登録/削除する。リコール抑止リスト１００９は、リコール制御プログラム１００７がリコール処理を行う際、リコール対象のファイルがリコール抑止の対象になっているかどうかを判定するために参照するリストである。
【００８９】
リコール抑止リスト１００９のエントリはリコール抑止対象のファイル（パス）名とリコール抑止制御を依頼したクライアント名のセットからなる。例えば、エントリ５１０はclient 1が/home/user1/aaa.txtのリコールを抑止していることを示し、エントリ５２０はclient 3が／ｔｍｐ／ｂｂｂ．ｄｏｃのリコールを抑止していることを示す。ワイルドカードを用いて、一度に複数のファイルのリコールの抑止を設定することも出来る。例えば、アプリケーション３００１がリコールの抑止を開始する際に、リコール抑止対象のファイル（パス）名を、"／ｔｍｐ/*"と指定すると、／ｔｍｐディレクトリ以下に存在する全てのファイルのリコールが抑止される。
【００９０】
リコール抑止制御処理のコマンドを受領したファイル共有サーバプログラム１００３は、メッセージがリコール抑止の開始を指示していた場合、抑止対象のファイル名と、メッセージを送信したクライアントのクライアント名をセットにし、リコール抑止リスト１００９に登録する。例えば、client 1が/home/user1/aaa.txtのリコール抑止の開始を指示して来た場合、エントリ５１０がリコール抑止リスト１００９に追加される。
【００９１】
もし、リコール抑止制御処理のコマンドがファイルのリコール抑止解除を指示していた場合、ファイル共有サーバプログラム１００３はリコール抑止リストから該当するエントリを削除する。例えば、client 1が/home/user1/aaa.txtのリコール抑止の解除を指示して来た場合、エントリ５１０がリコール抑止リスト１００９から削除される。
【００９２】
図１３は、ファイル共有サーバプログラム１００３が、リコール抑止リスト１００９へ、リコール制御対象のファイルを登録する処理のフローチャートである。ファイル共有サーバプログラム１００３が、ファイル共有プログラム３００３からのコマンドを受信したタイミングで、このフローチャートは開始される。
【００９３】
ステップ７０１０において、ファイル共有サーバプログラム１００３は、ファイル共有クライアントプログラム３００３から、コマンドを受領する。
【００９４】
ステップ７０２０において、ファイル共有サーバプログラム１００３は、受信したコマンドがリコール制御処理のコマンドか、通常のファイル操作（リード/ライト、作成/削除、属性の変更/確認等）のコマンドかを判定する。
【００９５】
もし、ファイル共有サーバプログラム１００３が受領したコマンドが、リコール制御処理のコマンドではなかった場合（ステップ７０２０：NO）、コマンドの要求する処理を実行し、リコール抑止リスト１００９への登録処理を終了する。
【００９６】
もし、ファイル共有サーバプログラム１００３が受領したコマンドが、リコール制御処理のコマンドであった場合（ステップ７０２０：YES）、ファイル共有サーバプログラム１００３は、リコール制御処理のコマンドがリコール抑止の開始を通知するものか否かを判定する（ステップ：７０３０）。
【００９７】
もし、ステップ７０３０において、リコール制御処理のコマンドが、リコール抑止開始の通知でなかった場合（ステップ７０３０：NO）、ファイル共有サーバプログラム１００３は、リコール抑止リスト１００９から、リコール制御対象のファイルと、リコール制御処理のコマンドを送信したクライアント名のエントリを検索し、そのエントリを削除する（ステップ：７０３５）。そして、レポーティングログ１０１０に、当該ファイルのリコール抑止を解除したことを記録し（ステップ７０６０）、リコール抑止リスト１００９への登録処理を終了する。
【００９８】
もし、ステップ７０３０において、リコール制御処理のコマンドが、リコール抑止の開始通知であった場合（ステップ：７０３０：YES）、ファイル共有サーバプログラム１００３は、リコール抑止対象のファイルが、スタブであるかどうかを判定する（ステップ７０４０）。
【００９９】
もし、ステップ７０４０において、リコール抑止対象のファイルが、スタブでなかった場合（ステップ７０４０：NO）、ファイル共有サーバプログラム１００３は、リコール抑止リスト１００９への登録処理を終了する。
【０１００】
もし、ステップ７０４０において、リコール抑止対象のファイルが、スタブであった場合（ステップ７０４０：YES）、ファイル共有サーバプログラム１００３は、リコール抑止リスト１００９にエントリを追加する（ステップ７０５０）。そして、ファイル共有サーバプログラム１００３は、レポーティングログ１０１０に当該ファイルのリコールの抑止を開始したことを記録（ステップ７０６０）した後、リコール抑止リスト１００９への登録処理を終了する。
【０１０１】
図１４は、リコール制御プログラム１００７が、リコール処理を行う際のフローチャートを示す。
【０１０２】
前述したとおり、リコール制御プログラム１００７はファイルのリコール処理を制御する。リコール制御プログラム１００７がリコール処理を実行する手順/方法を以下に述べる。
【０１０３】
ファイル共有サーバプログラム１００３はクライアント計算機３００からファイルへのアクセスがあった場合、当該ファイルのファイル（パス）名とアクセスを要求したクライアントのクライアント名をリコール制御プログラム１００７に通知する。実施形態では、ファイル共有サーバプログラム１００３がファイルのオープンをファイルシステムプログラム１０１１に要求する際に、リコールプラグラム１００７への通知を行う。通知のタイミングはファイル共有サーバプログラム１００３がファイルシステムプログラムにファイルのリード/ライトを要求するときでも良い。
【０１０４】
通知を受け取ったリコール制御プログラム１００７は、当該ファイルのファイル名と、当該クライアントのクライアント名がリコール抑止リスト１００９のエントリに登録されていないかをチェックする。もし、エントリに登録されていなかった場合、リコール制御プログラム１００７はファイル共有クライアント１００３を用いて、セカンダリファイルサーバ２００からファイルをリコールする。もし、エントリに登録されていた場合は、ファイルのリコールを行わない。
【０１０５】
以下、リコール処理のフローチャートを説明する。
【０１０６】
ステップ８０１０において、リコール制御プログラム１００７は、ファイル共有サーバプログラム１００３から、ファイルアクセスの通知を受領する。通知にはファイルにアクセスしてきたクライアントのクライアント名とアクセス対象のファイル名が含まれる。
【０１０７】
ステップ８０２０において、リコール制御プログラム１００７は、リコール抑止リスト１００９をチェックし、リコール抑止リスト１００９にアクセス対象のファイルとアクセスを要求したクライアントがエントリに登録されているかを確認する。
【０１０８】
もし、リコール抑止リストに登録されていた場合（ステップ８０２０：YES）、レポーティングログ１０１０にファイルアクセスがあったことを記録し（ステップ８０６０）、リコール処理を終了する。
【０１０９】
もし、リコール抑止リストに登録されていなかった場合（ステップ８０２０：NO）、当該ファイルがスタブかどうかを判定する（ステップ８０３０）。
【０１１０】
もし、スタブでなかった場合（ステップ８０３０：NO）、レポーティングログ１０１０にファイルアクセスがあったことを記録し（ステップ８０６０）、リコール処理を終了する。
【０１１１】
もし、当該ファイルがスタブであった場合（ステップ８０３０：YES）、リコール制御プログラム１００７は、スタブに対応するファイルのデータをセカンダリファイルサーバ２００から取得し（ステップ８０４０）、当該ファイルのスタブを通常のファイルに戻す（具体的には、ファイルシステムプログラム１０１１を用いて、is_stubエントリの値を0にし、block_numberエントリが示すブロックに、セカンダリファイルサーバ２００から取得したファイルのデータを書き込む）。（ステップ８０５０）。そして、レポーティングログ１０１０にファイルアクセスがあったことを記録し（ステップ８０６０）、リコール処理を終了する。
【０１１２】
図１５は、ファイルシステムプログラム１０１１が、ファイルに対するリード/ライト要求を処理する際のフローチャートを示す。
【０１１３】
ステップ９０１０において、ファイルシステムプログラム１０１１はファイル共有サーバプログラム１００３からリード/ライト要求を受領する。
【０１１４】
ステップ９０２０において、ファイルシステムプログラムは、リード/ライトを要求されたファイルがスタブかどうかを判定する。
【０１１５】
ファイルがスタブでなかった場合（ステップ９０２０：NO）、ファイルシステムプログラム１０１１は、そのファイルに対して、リード/ライト処理を実行し（ステップ９０３５）、処理の結果をファイル共有サーバプログラム１００３に返す（ステップ９０５０）。
【０１１６】
ファイルがスタブであった場合（ステップ９０２０：YES）、ファイルシステムプログラム１０１１は、スタブがリコール抑止リストに登録されているかを判断する。
【０１１７】
スタブがリコール抑止リストに登録されている場合（ステップ９０２５：YES）、inodeのblock_numberエントリが示すブロックから、スタブに対応するファイルが格納されているセカンダリファイルサーバ２００上でのパスを得る（ステップ９０３０）。そして、そのパスのファイルに対して、ファイル共有クライアントプログラム１００２によって、リード/ライト処理を実行（ステップ９０４０）する。セカンダリファイルサーバ２００に格納されたファイルへのリード／ライト処理は次のようにして行う。ファイルシステムプログラム１０１１はリード/ライトの処理をそのファイルに対して行う。例えば、スタブ化した/home/user1/aaa.txtに対応するファイルがセカンダリファイルサーバ２００の/export/archive/home/user1/aaa.txtに保存されていた場合、ファイルシステムプログラム１０１１は、ファイル共有クライアントプログラム１００２を用いて、/export/archive/home/user1/aaa.txtに対して、リード/ライト処理を行う。
そして、ファイルシステムプログラム１０１１は、処理の結果をファイル共有サーバプログラム１００３に返す（ステップ９０５０）。その後、ファイル共有サーバプログラム１００３は、当該処理の結果をクライアント計算機３００に返答する。この場合、セカンダリファイルサーバ２００から、ファイルをクライアント計算機に転送する際に、プライマリファイルサーバ１００のメモリ１０２に当該ファイルを格納し、クライアント計算機３００に返答する。これにより、リコールが抑止されているファイルをプライマリファイルサーバ１００に格納することなく、クライアント計算機３００に返答することができる。
【０１１８】
スタブがリコール抑止リストに登録されていない場合（ステップ９０２５：NO）、セカンダリファイルサーバ２００に格納されたファイルを、プライマリファイルサーバ１００にリコールする（ステップ９０６０）。リコール処理は、図１４にて説明したものと同様である。そして、リコールしたファイルに対して、リード/ライト処理を実行する（ステップ９０７０）。その後、クライアント計算機３００に返答する。
【０１１９】
レポーティングプログラム１００８は、レポーティングログ１０１０に保存されている情報をレポーティング情報に加工し、管理者に提示する。管理者はレポーティング情報から、ファイルへのアクセスパターンを把握し、アプリケーションが期待通りにファイルのリコール抑止を行っているかを確認することができる。
【０１２０】
図１６は、レポーティングログ１０１０のフォーマットを示す。
【０１２１】
"action"（カラム９３０）にはクライアントが行った操作が記録される。ファイルへのアクセスであった場合は「アクセス」、ファイルへのリコール抑止開始処理であった場合は「リコール抑止開始」、ファイルへのリコール抑止解除処理であった場合は「リコール抑止解除」が記録される。"host name"（カラム９１０）には操作をおこなったクライアントのクライアント名が保存される。"file name"（カラム９２０）には操作対象のファイルのファイル名が保存される。"time"（カラム９４０）には操作を行った時刻が保存される。レポートログ１０１０は図１３のステップ７０６０、図１４のステップ８０６０のタイミングで、ファイル共有サーバプログラム１００３、リコール制御プログラム１００７によって更新される。
【０１２２】
図１７は、レポーティングプログラム１００８がプライマリファイルサーバ１００の管理者に提示するレポーティング情報の例である。
【０１２３】
レポーティングプログラム１００８は、レポーティングログ１０１０を解析し、グラフ７０５を、プライマリファイルサーバ１００の管理者に提示する。グラフ７０５は記憶装置１０３に保存されているファイルごとに作成される。
【０１２４】
グラフの横軸７１０は時間経過を表す。タイムチャート７１５がクライアント毎に作成され、クライアントが各操作を行った時刻を確認することができる。グラフに表示する時刻は時刻入力フィールド７４０にして指定することができる。OKボタン７５０を押すと、時刻入力フィールドに入力した時刻のグラフが表示される。閉区間７２０はクライアントがファイルのリコールを抑止している期間、即ち、リコールの抑止を開始してから終了するまでの期間を表す。ポイント７３０はクライアントがファイルにアクセスした時刻を表す。タイムチャートは図に示すようにクライアント毎に表示する。グラフを表示するウインドウ７００はcloseボタン７６０かボタン７７０をクリック押下することで、閉じることができる。
【０１２５】
グラフは、LAN４００に接続する管理計算機（図２には示していない）またはプライマリファイルサーバ１００の画面出力装置（図２には示していない）に表示する。
【０１２６】
図１８は、グラフを表示するファイルを選択するためのGUIウインドウの例である。
【０１２７】
グラフを表示するファイルはウインドウ８００から選択することが出来る。グラフを表示したいファイルのチェックボックス８０５をチェックし、showボタン８１０を押下することで、図１７に示すようなグラフを表示する。closeボタン８２０かボタン８３０を押すことで、ウインドウ８００を閉じることができる。
【０１２８】
プライマリファイルサーバ１００の管理者は図１７に示すタイムチャートを確認することで、プライマリファイルサーバ１００に接続するアプリケーションの挙動を監視することが出来る。例えば、リコールの抑止期間に同クライアントから何回もファイルアクセスがあった場合、アプリケーションは期待通りの動作をしていないと、判定することができる。
【０１２９】
また、レポーティングプログラム１００８はレポーティング情報に基づき、リコール抑止の解除を行うことができる。レポーティングプログラム１００８は、レポーティングログ１０１０を定期的に解析する。あるクライアントがあるファイルのリコールを抑止している期間に、当該クライアント計算機３００から一定回数以上、当該ファイルにアクセスがあった場合、当該ファイルはプライマリストレージ１００にリコールするのが適切である。この場合、アプリケーション３００１が適切にリコールを制御していないと判定し、リコール抑止リスト１００９から、当該ファイルと当該クライアントのエントリを削除する。そして、当該ファイルをセカンダリファイルサーバ２００から、プライマリファイルサーバ１００へリコールする。クライアント計算機３００から、リコール抑止されているファイルへのアクセスが一定回数以上になったことを契機に、リコール抑止の解除を行ってもよい。また、管理者が強制的にリコール抑止の解除を行うこともできる。
【０１３０】
１つのクライアント計算機３００上で複数のアプリケーション３００１が動作している場合、１つのアプリケーション３００１がファイルのリコール抑止を行っていても、他のアプリケーション３００１から当該ファイルにアクセスがあれば、リコール抑止の解除が行われる。
【０１３１】
これにより、リコールが抑止されているファイルであっても、再アクセスされるファイルはリコールされ、適切なリコール制御ができる。
【０１３２】
第１の実施例では、リコールを制御する処理として、"<file_name>.norc"（<file_name>はリコールを抑止するファイルのファイル（パス）名）の作成/削除処理を挙げたが、他の特定の処理をリコール制御処理としてもよい。他の実施例を以下に述べる。
【０１３３】
第２の実施例ではACL（Access Control List）へのACE（Access Control Entry）の追加/削除処理をリコール制御処理とする。
【０１３４】
ACLはファイルに対する各ユーザのアクセス権限を管理するリストであり、ACEをエントリとして持つ。ACEには各ユーザのファイルに対するアクセス権限が定義されている。サーバは、ACLによって、各ユーザのファイルに対するアクセス権限を管理することが出来る。NFS、CIFSのプロトコルは、リモートサーバからのACEの追加をサポートしている。
【０１３５】
第２の実施例では特定のuidのユーザに対するACEへの追加/削除処理を、リコール抑止の開始/終了処理とする。uidはサーバを利用するユーザにユニークに割り振られるidであり、サーバはuidによって、ユーザを識別する。ここで用いる特定のuidには固定の値を用いてもいいし、プライマリファイルサーバ１００の管理者が設定できるようにしても良い。ただし、接続するプライマリファイルサーバ１００に実際には存在しないユーザのuidを用いることとする。ここでは仮に、uid＝１０００として説明する。
【０１３６】
アプリケーション３００１はあるファイルのリコール抑止を開始したい場合、uid＝１０００に対するACEを作成し、そのファイルのACLに追加する。ACEに登録するアクセス権限の内容は、特に限定しない。例えば、／ｔｍｐ／ｂｂｂ．ｄｏｃというファイルのリコール抑止を開始したい場合、アプリケーション３００１はuid＝１０００に対するACEを作成し、／ｔｍｐ／ｂｂｂ．ｄｏｃのACLに追加する処理をファイルシステムプログラム３００２に要求する。ファイルシステムプログラム３００２はファイル共有クライアントプログラム３００３にコマンドの作成を依頼する。ファイル共有クライアントプログラム３００３はACEの追加を依頼するコマンドを作成し、ファイル共有サーバプログラム１００３に送信する。ACEの追加を依頼するコマンドを受信したファイル共有サーバプログラム１００３はそのコマンドが、／ｔｍｐ／ｂｂｂ．ｄｏｃのリコール抑止開始を通知するメッセージだと解釈し、リコール抑止リスト１００９への登録処理を行う。ファイル共有サーバは実際にはACLへの登録は行わない。
【０１３７】
アプリケーション３００１はあるファイルのリコール抑止を解除したい場合、uid＝１０００に対するACEを削除する処理をファイルシステムプログラム３００２に要求する。  例えば、／ｔｍｐ／ｂｂｂ．ｄｏｃのリコール抑止を解除したい場合、アプリケーション３００１は、uid＝１０００に対するACEを／ｔｍｐ／ｂｂｂ．ｄｏｃのACLから削除する処理をファイルシステムプログラム３００２に要求する。ファイルシステムプログラム３００２はファイル共有クライアントプログラム３００３にコマンドの作成を依頼する。ファイル共有クライアントプログラム３００３はACEの削除を依頼するコマンドを作成し、ファイル共有サーバプログラム１００３に送信する。ACEの削除を依頼するコマンドを受信したファイル共有サーバ３００３はそのコマンドを、／ｔｍｐ／ｂｂｂ．ｄｏｃのリコール抑止解除を通知するメッセージだと解釈し、リコール抑止リスト１００９への削除処理を行う。
【０１３８】
第３の実施例ではファイルのatimeを変更する処理をリコール制御処理とする。atimeを現在時刻より１年後に変更するコマンドをリコール抑止の開始通知とし、１年前に変更するコマンドをリコール抑止の解除通知とする。
【０１３９】
アプリケーション３００１はあるファイルのリコール抑止を開始したい場合、そのファイルのatimeを現在時刻より１年後に設定する処理を行う。例えば、／ｔｍｐ／ｂｂｂ．ｄｏｃというファイルのリコール抑止を開始したい場合、アプリケーション３００１は／ｔｍｐ／ｂｂｂ．ｄｏｃのatimeを現在時刻から１年後に変更する処理をファイルシステムプログラム３００２に要求する。ファイルシステムプログラム３００２はファイル共有クライアントプログラム３００３にコマンドの作成を依頼する。ファイル共有クライアントプログラム３００３は／ｔｍｐ／ｂｂｂ．ｄｏｃのatimeを１年後に変更するコマンドを作成し、ファイル共有サーバプログラム１００３に送信する。atimeを１年後に変更するコマンドを受信したファイル共有サーバプログラム１００３はそのコマンドが、／ｔｍｐ／ｂｂｂ．ｄｏｃのリコール抑止開始を通知するメッセージだと解釈し、リコール抑止リスト１００９への登録処理を行う。ファイル共有サーバは実際には、atimeの変更を行わない。
【０１４０】
アプリケーション３００１はあるファイルのリコール抑止を解除したい場合、そのファイルのatimeを現在時刻から、1年前に変更する処理を行う。例えば、／ｔｍｐ／ｂｂｂ．ｄｏｃのリコール抑止を解除したい場合、アプリケーション３００１は、／ｔｍｐ／ｂｂｂ．ｄｏｃのatimeを１年前に変更する処理をファイルシステムプログラム３００２に要求する。ファイルシステムプログラム３００２はファイル共有クライアントプログラム３００３にコマンドの作成を依頼する。ファイル共有クライアントプログラム３００３は／ｔｍｐ／ｂｂｂ．ｄｏｃのatimeを１年前に変更するコマンドを作成し、ファイル共有サーバプログラム１００３に送信する。atimeを１年前に変更するコマンドを受信したファイル共有サーバ３００３はそのコマンドを、／ｔｍｐ／ｂｂｂ．ｄｏｃのリコール抑止解除を通知するメッセージだと解釈し、リコール抑止リスト１００９への削除処理を行う。
【０１４１】
以上にあげた実施例では、NFS、CIFSプログラムを、クライアント計算機３００とプライマリサーバ１００のファイル共有プログラムとして想定しているが、他のファイル共有プログラムのプロトコルを用いて、アプリケーション３００１が、プライマリファイルサーバ１００上のファイルに、リコール制御処理を行っても良い。
【０１４２】
また、これまで述べてきた発明の実施形態では、２台のファイルサーバを用いて階層化ストレージを構築していたが、１台のファイルサーバに異なる特徴を持つ記憶装置を混在させる形態をとっても良い。例えば、SSDとテープ装置を一台のファイルサーバに搭載し、アクセス回数の少ないファイルをSSDからテープ装置にマイグレーションするという形態をとる階層化ストレージにも本発明は適用可能である。
【０１４３】
また、これまで述べてきた発明の実施形態では階層化ストレージを構築するストレージシステムは２台であったが、２台以上のストレージシステムを用いた階層化ストレージにも本発明は適用可能である。
【０１４４】
以上、本発明の実施形態によれば、クライアント３００上のアプリケーション３００１が、セカンダリファイルサーバ２００上のファイルにアクセスする際に、アクセス対象のファイルのリコールを抑止し、ファイルがプライマリファイルサーバ１００にリコールされるのを防止することができる。
【０１４５】
例えば、アプリケーション３００１がアンチウイルスソフトであり、プライマリファイルサーバ１００上の全ファイルのスキャンを行う場合、アンチウイルスソフトが、事前にスキャン対象のファイルのリコールを抑止することで、ファイルが大量にリコールされるのを防ぐことができる。さらに、リコールを抑止したファイルに一定回数以上のアクセスがあった場合、リコールを行う。これにより、より適切にファイルを配置することができる。
【０１４６】
このように、本発明を用いることで、階層化ストレージにおけるプライマリストレージの容量の効率的な利用、ファイルの不要なコピー削減という効果を得ることが出来る。
【符号の説明】
【０１４７】
１０：プライマリファイルサーバ
１１：プライマリストレージ
１２：ファイル共有サービス提供部
１３：マイグレーション制御部
１４：リコール制御部
１５：リコール抑止リスト
１６：レポーティング機能提供部
２０：セカンダリファイルサーバ
２１：セカンダリストレージ
２２：ファイル共有サービス提供部
３０：クライアント
３１：アプリケーション
１００２：ファイル共有クライアントプログラム
１００３：ファイル共有サーバプログラム 
１００５：HSMプログラム
１００６：マイグレーション制御プログラム
１００７：リコール制御プログラム
１００８：レポーティングプログラム
１００９：リコール抑止リスト
１０１０：レポーティングログ
１０１１：ファイルシステムプログラム 
２００１：ファイル共有サーバプログラム
２００２：ファイルシステムプログラム
３００１：アプリケーション
３００２：ファイルシステムプログラム
３００３：ファイル共有クライアントプログラム
【図１】
0005586892.tif 000002
【図２】
0005586892.tif 000003
【図３】
0005586892.tif 000004
【図４】
0005586892.tif 000005
【図５】
0005586892.tif 000006
【図６】
0005586892.tif 000007
【図７】
0005586892.tif 000008
【図８】
0005586892.tif 000009
【図９】
0005586892.tif 000010
【図１０】
0005586892.tif 000011
【図１１】
0005586892.tif 000012
【図１２】
0005586892.tif 000013
【図１３】
0005586892.tif 000014
【図１４】
0005586892.tif 000015
【図１５】
0005586892.tif 000016
【図１６】
0005586892.tif 000017
【図１７】
0005586892.tif 000018
【図１８】
0005586892.tif 000019