(57)【要約】      （修正有）【課題】サーバ内に複数の仮想サーバを作成、及び維持する。【解決手段】仮想ファイラー(vfiler)等の仮想サーハ゛の複数のインスタンスをファイラー等の1つのサーハ゛内に作成及び維持するための能力を提供するアーキテクチャ。vfilerは、マルチフ゜ロトコルサーハ゛のインスタンスを確立するための、ファイラーフ゜ラットフォームのネットワークリソース及びストレーシ゛リソースの論理的分割である。割り当てられたリソース及び共有リソースに対するアクセス制御を保証するため、各vfilerには各々のアクセスフ゜ロトコルについて独自のセキュリティト゛メインがさらに割り当てられる。ファイルシステムによってvfiler境界チェックが実施され、要求のあったファイラーフ゜ラットフォーム上に格納されたファイルについてカレントvfilerが特定のストレーシ゛リソースへのアクセスが可能であるか判定される。【選択図】図４
2010092475.tif 000002
【特許請求の範囲】
【請求項１】
サーバ内に複数の仮想サーバを作成及び維持する方法であって、
サーバのリソースを分割し、各仮想サーバのインスタンスを確立するステップと、
前記サーバ内のリソースの論理境界チェック及びセキュリティ解釈を用いて、リソースへのアクセス制御を可能にするステップと
からなる方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はサーバアーキテクチャに関し、詳しくは１つの物理サーバプラットフォーム内で複数の論理サーバのインスタンス化を可能にするアーキテクチャに関する。
【背景技術】
【０００２】
ファイルサーバとは、メモリ、テープ、ディスク等の書き込み可能な持続性記憶装置上での情報の編成に関するファイルサービスを提供するコンピュータである。ファイルサーバまたはファイラーは、情報をディレクトリ及びファイルの階層構造として例えばディスク上に論理的に編成するためのファイルシステムを実施するストレージオペレーティングシステムを含むストレージシステムとして実現される。「ディスク上」の各ファイルは、ファイルの実際のデータ等の情報を記憶するように構成された例えばディスクブロック等のデータ構造の集まりとして実施される。一方、ディレクトリは、他のファイルまたはディレクトリに関する情報を記憶する特別なフォーマットのファイルとして実施される。
【０００３】
更に、ストレージシステムはクライアント／サーバ形態の情報配送に従って動作するように構成され、これにより多数のクライアントがファイルサーバ等のサーバによって実行されているアプリケーションサービスにアクセスできる。この形態の場合、クライアントは、インターネット等の公衆網を介して実施されるポイント・ツー・ポイント接続、共有ローカルエリア・ネットワーク、ワイドエリアネットワーク、または、仮想私設網（ＶＰＮ）等のコンピュータネットワークを介してファイルサーバに「接続」するためのアプリケーションをコンピュータ上で実行している場合がある。各クライアントは、これらのネットワークを介してファイルシステムプロトコルメッセージを（パケットの形で）サーバへ発行することにより、ファイルサーバに対してファイルシステムのサービスを要求することができる。しかしながら、ファイルサーバは（例えばクライアントまたは「ホスト」）コンピュータに直接取り付けられた複数の記憶装置の集まりとして動作するように構成される場合もある。この場合、ユーザはそれらの記憶装置に対してアクセス（すなわち、読み出しまたは書き込み）するためのファイルシステムのサービスを要求する場合もある。
【０００４】
ディスク上でデータを上書きしないファイルシステムの１種は、write-anywhereファイルシステムである。ディスク上のあるデータブロックがディスクからメモリに取得され、新たなデータで「汚される」場合、そのデータブロックはディスク上の新たな位置に記憶され（書き込まれ）、これによって書き込み性能を最適化している。write-anywhereファイルシステムは、データがディスク上に実質的に連続的に配置された最適なレイアウトを最初に仮定する。この最適なディスクレイアウトによって効率的なアクセス動作になり、特にディスクに対するシーケンシャルリード動作について効率的なアクセス動作になる。ファイラー等のストレージシステム上で動作するように構成されたwrite-anywhereファイルシステムの一例は、カリフォルニア州サニーベールにあるネットワークアプライアンス社から入手できるＷｒｉｔｅ  Ａｎｙｗｈｅｒｅ  Ｆｉｌｅ  Ｌａｙｏｕｔ（ＷＡＦＬ（登録商標））である。ＷＡＦＬファイルシステムは、ファイラー及び関連ディスクストレージのプロトコルスタック全体の中で、マイクロカーネルとして実施される。
【０００５】
通常、ディスクストレージは一群の物理的な記憶装置（ディスク）を含む１以上の「ボリューム」として実施され、ディスク空間の全体的な論理的配置を定義している。通常、各ボリュームはそのボリューム独自のファイルシステムに関連している。ＷＡＦＬファイルシステムの場合、物理ボリュームの名前空間の中に、論理サブボリュームの性質を持つ「ｑｔｒｅｅ」と呼ばれる特別なディレクトリが作成される。各ファイルシステムオブジェクト（ファイルまたはディレクトリ）は唯１つのｑｔｒｅｅ及び複数のｑｕｏｔａに関連しており、セキュリティプロパティ及びその他の事項はｑｔｒｅｅ毎に割り当てることができる。各ボリュームはそのボリューム独自のファイルシステム識別子（ＩＤ）を有しており、ボリューム内の各ｑｔｒｅｅはそのｑｔｒｅｅ独自のｑｔｒｅｅＩＤを有している。
【０００６】
ファイラーは通常、多数（数千）のユーザを支える大量の記憶装置（例えば６テラバイト等）を有している。この種のストレージシステムは、多くの用途即ち「目的」について一般的に大きすぎ、高価すぎることが多い。１ボリューム（または１ファイルシステム）の典型的な最小記憶容量でさえ約１５０ギガバイト（ＧＢ）もの大きさがあり、ほとんどの目的について一般的に大きすぎるものである。
【０００７】
ユーザは、１つのファイラーを利用するのではなく、特定の目的に適合した複数の小型サーバを購入することも可能である。しかしながら、上述のように１ボリュームの典型的な最小記憶容量は約１５０ＧＢであるから、記憶装置の細分性に関する問題は依然として存在する。また、多数の小型サーバの入手は１つのファイラーの購入よりもコストがかかる場合もある。さらに、多数の小型サーバを維持及び管理するコストは通常、１つのファイラーを維持及び管理するコストよりも実質的に大きいものである。従って、多数のサーバを１つのファイラープラットフォーム内に統合し、それらのサーバを論理的に実現することが望まれている。従って、サーバ統合とは、複数の論理サーバあるいは仮想サーバを１つの物理サーバプラットフォーム内に設ける能力として定義される。１つのプラットフォーム内に実現可能な仮想サーバの例としては、ウェブサーバ、データベースサーバ、メールサーバ、及び、ネームサーバが挙げられる。
【０００８】
従来のサーバ統合ソリューションは、１つのプラットフォーム内に実質的に「まとめてラックに納められた」複数の独立したサーバを提供するものである。このソリューションの一例は、ＥＭＣ社から入手可能なＣｅｌｅｒｒａアーキテクチャである。Ｃｅｌｅｒｒａアーキテクチャは、データムーバまたはファイルサーバのインスタンスの概念を利用しており、様々な他のデータムーバに対して論理的に配分および割り当て可能なストレージリソースを有するＳｙｍｍｅｔｒｉｘストレージデバイスのフロントエンドとして機能する。各データムーバは、そのデータムーバ独自のネットワークハードウェアの集合と、そのデータムーバ独自のオペレーティングシステムのコピーを動作させるためのそのデータムーバ独自のプロセッサとを有している。
【０００９】
他の統合サーバソリューションは、サーバの複数のインスタンスを１つの物理プラットフォーム上で実行するように構成される。例えばＩＢＭ社の仮想マシン（ＶＭ）オペレーティングシステムは、メインフレームコンピュータシステム上で動作し、サーバの複数のインスタンスをそのコンピュータシステム上で実行できるようにする。各ＶＭは、独自のファイルシステム及びストレージリソースを有する１つのオペレーティングシステム全体を完全にインスタンス化したものである。従って、メインフレーム上で動作しているＶＭ間でファイルシステムやストレージリソースを共有することはない。そうではなく、コンピュータシステムのストレージリソースは、そのコンピュータ上に実現されたＶＭのインスタンスに配分され、専用のものになる。
【００１０】
サーバプロセスの複数のインスタンスの実行に対応したサーバ統合ソリューションの他の例としては、Ｓａｍｂａがある。Ｓａｍｂａは、ＵＮＩＸオペレーティングシステムプラットフォーム上で動作するオープンソースのＷｉｎｄｏｗｓ互換サーバである。Ｓａｍｂａサーバは、システムのアプリケーション層で実行され、ＵＮＩＸプラットフォーム上で動作するＷｉｎｄｏｗｓ互換サーバの複数のインスタンスを提供する。Ｓａｍｂａは、１つの物理プラットフォーム上で複数のサーバを実行するための、比較的一般的な「サーバプロセス複製」に基くアプローチの一例である。
【００１１】
最後に、サーバ統合を実施する最も簡単な方法は、統合されている全てのサービス（即ちファイルサーバ用のストレージ）ユニットをリネームして各々のサービスユニットがそれらの間で一意に定まるようにし、全てのサービス（ストレージ）ユニットのサービスを提供する１インスタンスの統合サーバを構成することである。本明細書では、以後この方法を「サーババンドリング」と呼ぶ。
【００１２】
プロセス・ベースの、及びサーババンドリング・ベースのサーバ統合ソリューションは通常、プラットフォーム上で動作しているサーバインスタンスの各々について異なるセキュリティ特性を提供しない。例えば、Ｓａｍｂａは、Ｗｉｎｄｏｗｓ互換（例えばＮＴ）サーバの全てのインスタンスについて、Ｓａｍｂａのプラットフォームインフラストラクチャの非複製部分に関する１セットのセキュリティ特性（即ちセキュリティドメイン）しか持たない。セキュリティドメインの一例は、Ｗｉｎｄｏｗｓ  ＮＴ（登録商標）ドメインセキュリティである。ＮＴドメインセキュリティは、あるドメインの全てのユーザ及びサーバが権限を有するユーザ識別子及びグループ識別子（「セキュリティオブジェクト」）並びにオペレーティングシステムのリソースなどを含む同じセキュリティ情報を共有することによる抽象概念である。
【００１３】
概して、このセキュリティ情報は、Ｗｉｎｄｏｗｓ  ＮＴで保護されたサブシステムによって、セキュリティアカウントマネージャ（ＳＡＭ）データベースに保持される。ＳＡＭデータベースは、ＵＮＩＸサーバ上の/etc/passwdデータベース及び/etc/groupデータベースの組み合わせと同等のものであり、そのサーバにローカルなユーザ及びグループだけを保持している。この/etc/passwd、/etc/groupといった表記は、ＵＮＩＸプラットフォーム上で使用されるパスワードファイル及びグループファイルへのパスを指す設定ディレクトリを示している。あるセキュリティドメインにアカウントを有するユーザは、そのドメイン内の任意のサーバから自分のアカウントにログオンしてアクセスすることが可能である。通常、１つのサーバは、（各アクセスプロトコルについて）一度に１つのセキュリティドメインにしか属することができない。マルチプロトコルサーバーは、各アクセスプロトコルについて１セキュリティドメインと同程度の数のセキュリティドメインに属することが可能である。例えばマルチプロトコルファイラーは、ＣＩＦＳ（Common Internet File System）アクセスのためにＮＴドメインに属するとともに、ＮＦＳ（Network File System)アクセスのためにＮＩＳ（Network Information System）ドメインにも属する場合がある。上記のように、ＵＮＩＸ環境も異なるサーバについて異なるセキュリティオブジェクトを有する場合がある。
【００１４】
Ｗｉｎｄｏｗｓ（登録商標）  ｎｅｔｗｏｒｋｉｎｇの一態様は、ユーザがサーバ上の１単位のストレージを参照するための方法を定義したＵＮＣ（Uniform Naming convertion）パスの概念である。ＵＮＣパスは、先頭に「＼＼」の文字列を付けて、ネットワーク上のリソース名を指し示すものである。例えば、ＵＮＣパスは、サーバ名、共有名及びパス記述子を含み、シェア等の１単位のストレージをまとめて参照する。シェアとは、ファイルシステム上のディレクトリ等の共有ストレージリソースである。
【００１５】
複数のセキュリティドメインに対応するために用いられる複数の独立サーバを有する環境の場合、すべてのシェア（及び共有名）は異なるものでなければならない。しかしながら、それらの複数のサーバをサーバに対するエイリアス名を用いて１つのサーバプラットフォームに統合した場合（Ｓａｍｂａやサーババンドリング等のサーバプロセス複製により）、何らかのエイリアスサーバ名を介してアクセスしたときにすべての共有リソースが見えてしまう場合があるので、シェアに対するＵＮＣパスの中のサーバ名を変更しなければならない場合がある。言い換えると、各サーバがサーバ独自のシェアの集合を有していても、ユーザは自分のデータにアクセスするためにそれらのシェアのＵＮＣパス定義を変更しなければならない場合がある。
【００１６】
例えば、第１のＮＴサーバ（ＮＴ１）及びそのクライアントがセキュリティドメイン１に関連し、第２及び第３のＮＴサーバ（ＮＴ２、ＮＴ３）及びそれらのクライアントがセキュリティドメイン２に関連しているような３つ（３）のＮＴサーバを編成するものと仮定する。即ち、ＮＴ２及びＮＴ３のクライアント（ユーザ）はセキュリティドメイン２内の同じセキュリティデータベースを共有するものとする。セキュリティドメイン２のユーザがＮＴ３上のあるシェア（ｐｒｏｊ１）を参照する場合、そのユーザは認証のためにまずセキュリティドメイン２に加入し、その後、そのサーバに接続し、そのサーバを共有する。ユーザによって指定されるこのＵＮＣパスの表記の例は、
＼＼ＮＴ３＼ｄａｔａ＼ｐｒｏｊ１
というようなものになる。
【００１７】
次に、サーバＮＴ１〜３及びそれらに取り付けられたリソースの１つをサーバプラットフォームに統合するものと仮定する。この場合、特定ドメインのクライアントが自分のデータを参照する方法に関して問題が生じる。すなわち、各クライアントがｐｒｏｊ１と呼ばれるシェアを有し、それらのシェア全てが１つのプラットフォーム内に統合された場合、それらのシェアを区別する方法が存在しなければならない。サーバのストレージリソースに対するデータのマイグレーション（移行）や再構成はクライアントシステムに対して透過的ではなく、実際には、この問題を解決するために、クライアントシステムは自分のデータに対するパス記述子を変更しなければならない場合も多い。こうしたアプローチは、クライアントシステムに代わるアクションが必要になるので、一般的に望ましくない。さらに、ストレージリソースを１以上のサーバに統合した場合、ユーザがそれらのサーバのリソースにアクセスするときにそれらのサーバが同じセキュリティドメインに存在しないこともあり得る。
【００１８】
ＶＭサーバ及びデータムーバサーバによるサーバ統合技術は、物理的システムリソースの分割、及びオペレーティングシステムオブジェクトの複製に基くものであり、複数のセキュリティドメインからサーバを統合することができないことや、サービス（ストレージ）ユニットのリネームが必要になることといった上記２つの制限の影響を受けることはない。しかしながら、これらの技術には他の制限がある。通常、このようなサーバ統合ソリューションのオペレーティングシステムは、ネットワークインタフェースカード等の物理的ハードウェアデバイスや、ハードウェアデバイスをうまく定義した集まり等を表すソフトウェアオブジェクトを含む。ハードウェアデバイスの集まりを表すソフトウェアオブジェクトの一例は、オペレーティングシステム上で動作しているアプリケーションによって利用可能な記憶ディスクの集合に対して空間の割り当てを行なうファイルシステムである。
【００１９】
ＶＭタイプまたはデータムーバタイプのシステムの場合、通常これらのハードウェアを表すソフトウェアオブジェクトの静的割り当ては、システムのハードウェアリソースのサブセットをＶＭ／データムーバ（仮想サーバ）の１つのインスタンスに関連付けることにより実施される。各仮想サーバに対するリソースの割り当てにより、ハードウェアリソースを表すソフトウェアオブジェクトが仮想サーバに直接割り当てられるので、ハードウェアリソースは特定の仮想サーバに直接関連付けられている。この直接割り当て方法はリソース管理の柔軟性を制限するものであり、特に仮想サーバ間でのリソースの「論理的」割り当てに関して柔軟性を制限する。また、この方法は、すべての分割及びサイズ決定を統合時に行なわなければならず、統合サーバの発展に応じて後から容易にそれらを変更することができないので、サーバ統合の革新的成長を妨げるものである。
【００２０】
サーバ統合は、ストレージサーバプロバイダ（ＳＳＰ）の場合に特に有用である。ＳＳＰは、１つの物理的なプラットフォーム、即ち「データセンター」を用いて、データストレージアプリケーションのサービスを複数のユーザまたはクライアントに提供（「ホスティング」する。このデータセンターは主としてＳＳＰによって保守され、安全で信頼性の高いストレージサービスをクライアントに提供する。典型的な構成の場合、データセンターは、独立した私設の内部ネットワーク（「イントラネット」）を有する複数の異なるクライアント環境に接続される。各イントラネットは異なるクライアント又はクライアントの部署に関連している場合があるので、物理的プラットフォーム内でデータトラフィックを個別に保持しなければならない。
【００２１】
従って、本発明は、複数のセキュアな仮想サーバを１つの物理的ファイラープラットフォーム内にインスタンス化することを可能にし、柔軟性の高い物理リソースの分割を可能にするアーキテクチャに関するものである。
【００２２】
さらに本発明は、複数のセキュアな仮想サーバを１つの物理的ファイラープラットフォーム内にインスタンス化することを可能にし、ＳＳＰ環境での使用に適し、高レベルのセキュリティをユーザに提供するアーキテクチャに関するものである。
【００２３】
さらに本発明は、災害復旧、データマイグレーションまたはロードバランシング等に使用するため、異なる物理プラットフォーム上のサーバの効率的なマイグレーション及び再インスタンス化を可能にする形態で記憶されたデータ及びすべての設定情報を有するサーバのカプセル化を可能にするアーキテクチャにも関連する。
【発明の概要】
【課題を解決するための手段】
【００２４】
本発明は、仮想ファイラー（ｖｆｉｌｅｒ）等の仮想サーバの複数のインスタンスをファイラープラットフォーム等の１つのサーバ内に十分な柔軟性及び細分性で作成及び維持するための能力を提供するアーキテクチャに関する。ｖｆｉｌｅｒは、マルチプロトコルサーバのインスタンスを確立するための、ファイラーのネットワーク及びストレージリソースの論理的分割である。各ｖｆｉｌｅｒは、プラットフォーム上の他のｖｆｉｌｔｅｒから独立して維持及び実行される。ストレージユニットやネットワークインタフェースのネットワークアドレス等の専用ファイラーリソースをグループ化及び分割し、ファイラー内にセキュリティドメインを確立することができる。さらに、ストレージオペレーティングシステム及びファイルシステム等の共通ファイラーリソースをｖｆｉｌｅｒ間で共有することができる。
【００２５】
具体的には、各ｖｆｉｌｅｒには、ボリュームやｑｔｒｅｅ等の専用の個別単位のストレージリソースと、インターネットプロトコルアドレス等のネットワークアドレスとが割り当てられる。また、各ｖｆｉｌｅｒは、そのクライアントシステムに代わって共通ファイルシステムに共用アクセスすることが可能である。従って、例えばクライアントの共有ファイルシステムへのアクセスに関するセキュリティオブジェクトの解釈は、ｖｆｉｌｅｒによって異なる場合がある。これに対処するため、各ｖｆｉｌｅｒに、特にｖｆｉｌｅｒに一意の個別のセキュリティドメインに関する情報を含むｖｆｉｌｅｒコンテクストデータ構造を設け（サポートされているアクセスプロトコル毎に）、これによってｖｆｉｌｅｒに割り当てられた共有リソースに対するアクセスの制御を可能にする。
【００２６】
本発明の一態様によると、ストレージオペレーティングシステムのファイルシステムによってｖｆｉｌｅｒ境界チェックが実施され、ファイラー上で実行されている現在のｖｆｉｌｅｒが要求されたプラットフォーム上のファイルの特定のストレージリソースにアクセス可能であることが検証される。このｖｆｉｌｅｒ境界チェックは、要求されたファイルのｉノードから得た、そのファイルに関する記憶単位（ｑｔｒｅｅまたはボリューム）などの設定情報に基いて行なわれる。具体的には、複数ステージの検証手順に従ってファイルシステム識別子及びｑｔｒｅｅ識別子を確認し、それらの識別子が現在のｖｆｉｌｅｒに割り当てられたストレージリソースの要素であることを確認する。一単位のストレージのアクセスの要求がある毎に、これらの識別子を用いてｖｆｉｌｅｒ境界チェックが実施され、要求を行なっているｖｆｉｌｅｒがそのストレージリソースに対するアクセスを許可されているか否かが判定される。このチェックにより、要求を行なっているｖｆｉｌｅｒが要求したストレージリソースに対するアクセスを許可されていないことが判明した場合、その要求は直ちに拒否される。そうでない場合には、その要求は許可され、ファイルシステムはその要求を処理するための処理を行う。
【００２７】
有利なことに、この新規なｖｆｉｌｅｒアーキテクチャによると、仮想サーバ及びそれらの各々のデータアプリケーションの１つのファイラ上への統合だけでなく、すべてのサーバネットワーク及びストレージリソースのカプセル化も容易になる。サーバ統合は、各々がセキュリティドメインに関連付けられたｖｆｉｌｅｒの作成（サポートされているアクセスプロトコルの各々について１つ）によって行なわれる。これらのセキュリティドメイン間には共通の要素がまったくなく、これによって個別の独立したｖｆｉｌｅｒが同じファイラープラットフォーム内に提供される。本発明のこの態様は、ファイラ上で複数のクライアント組織のデータアプリケーションを扱うストレージサービスプロバイダの場合、特に有用である。各クライアント組織は、自分のｖｆｉｌｅｒだけにしかアクセスすることができず、他の組織と同じ物理ファイラーを共有していることにはまったく気づかない。従って、この新規なアーキテクチャによると、各クライアント組織について専用のファイラーは不要になる。
【００２８】
さらに、ストレージリソースがｖｆｉｌｅｒ毎に割り当てられるため、ｖｆｉｌｅｒ間でのストレージリソースのマイグレーションがユーザに対して透過的になる。これによって、クライアントはデータを参照するための方法（例えばパス記述子）を変更する必要もなくなる。さらに、基礎とするファイルシステムを共有しているため、ｖｆｉｌｅｒに対するストレージユニットの割り当てを柔軟にすることができ、優れた細分性にすることができる。即ち、１つのボリュームを複数のｖｆｉｌｅｒで共有することができ、さらに、１つのファイラは任意の複数のボリューム上に１以上のボリューム及び／又は１以上のｑｔｒｅｅを有することができる。
【００２９】
本発明の上記の利点及び更なる利点は添付の図面とともに下記の説明を参照することによってさらによく理解することができ、図面中で似たような符合は全く同じ要素あるいは機能的に類似した要素を指している。
【図面の簡単な説明】
【００３０】
【図１】複数のクライアント及び１つのサーバを含む本発明に有利に用いられるコンピュータネットワークを示す略ブロック図である。
【図２】本発明に有利に用いられるネットワークストレージアプライアンスまたはファイラー等のサーバを示す略ブロック図である。
【図３】本発明に有利に用いられるストレージオペレーティングシステムを示す略ブロック図である。
【図４】複数の仮想ファイラー（ｖｆｉｌｅｒ）を有する本発明によるファイラーの一実施形態を示す略図である。
【図５】本発明によるｖｆｉｌｅｒコンテクストデータ構造を示す略ブロック図である。
【図６】本発明に有利に用いられるソフトウェアデータオブジェクト構造を示す略ブロック図である。
【図７】本発明によるｖｆｉｌｅｒ境界チェックを実施するために使用される様々なデータ構造を示す略ブロック図である。
【図８】本発明の境界チェックに関する複数ステージの検証手順に含まれるステップの流れを示すフロー図である。
【発明を実施するための形態】
【００３１】
図１は、複数のクライアント１１０と、ネットワークストレージアプライアンス等のファイルサーバとを含む本発明に有効に使用されるコンピュータネットワーク１００の略ブロック図である。ファイルサーバまたはファイラー２００は、ディスク等のストレージデバイス上の情報の編成に関するファイルサービスを提供するコンピュータである。クライアント１００は、従来のＣＩＦＳ（Common Internet File System）やＮＦＳ（Network File System）プロトコル等のファイルシステムプロトコルを有するアプリケーションを実行するように構成された汎用コンピュータでよい。さらにクライアント１１０は、クライアント／サーバモデルの情報配送に従ってファイラー２００と対話することができる。即ち、ネットワーク１００を介して例えばＣＩＦＳ及びＮＦＳプロトコルフォーマットにカプセル化されたパケット１２０を交換することにより、各クライアントはファイラーのサービスを要求することができ、ファイラーはクライアントから要求されたサービスの結果を返すことができる。当業者であれば、本明細書で説明する新しい技術は、サーバ上のサーバアプリケーションと通信するクライアント上で実行されている様々なアプリケーションに従って任意のクライアントにサービスを提供する任意のサーバに適用することが可能であることが分かるであろう。
【００３２】
ファイラー２００は、複数の物理リンク１８０を介してルータやスイッチなどの中間ネットワークノード１５０に接続される。この物理リンクには、例えばギガビットイーサネットリンク、１００ＢＡＳＥ−Ｔイーサネットリンク、１０ＢＡＳＥ−Ｔイーサネットリンクまたはその他同様のリンク等が含まれる。スイッチ１５０は更に、例えばローカルエリアネットワーク（ＬＡＮ）や仮想ＬＡＮ（ＶＬＡＮ）として構成されたネットワーククラウド１３０を介してクライアント１１０に接続される。あるいは、ファイラーはポイント・ツー・ポイント接続やＬＡＮ等の共有媒体からなる通信リンク１４０を介して１以上のクライアントに直接接続することもできる。
【００３３】
図２は、従来のＰＣＩ（Peripheral Computer Inter Connect）バス等のシステムバス２１０によって相互接続されたプロセッサ２０２、メモリ２０４、ストレージアダプタ２０６及び１以上のネットワークアダプタ２０８を含むファイラー２００を示す略ブロック図である。このファイラーは、ストレージアダプタ２０６に接続されたディスク２１６上で情報をディレクトリ及びファイルの階層構造として論理的に編成するためのファイルシステムを実行するストレージオペレーティングシステム３００をさらに含む。本明細書で説明する例示的実施形態の場合、ストレージオペレーティングシステム３００は、好ましくはネットワークアプライアンス社から入手できるＮｅｔＡｐｐ  Ｄａｔａ  ＯＮＴＡＰ（登録商標）であり、ＦＡＦＬ（Ｗｒｉｔｅ  Ａｎｙｗｈｅｒｅ  Ｆｉｌｅ  Ｌａｙｏｕｔ）ファイルシステムを実施する。
【００３４】
メモリ２０４は様々なセクションに分配することができ、そのうちの１つはストレージオペレーティングシステム３００のネットワークドライバによって使用するために複数のデータバッファ２２２として編成されたバッファプール２２０である。本明細書で説明されるように、各ネットワークドライバはバッファ２２２のリストに割り当てられ、ネットワークアダプタ２０８のインタフェース２１８で受信されたデータ要求をロードするために使用される。メモリの他のセクションは、本発明に関するソフトウェアプログラムコード及びデータ構造を記憶するため、プロセッサ及びアダプタによってアドレス指定可能な記憶場所として編成することができる。従って、プロセッサ及びアダプタは、そのソフトウェアコードを実行し、データ構造にアクセスするように構成された処理要素及び／又は論理回路を含む。ストレージオペレーティングシステム３００は、その一部が通常メモリ内に存在し、処理要素によって実行され、特にファイラー２００によって実施されるサービスを支えるストレージ及びネットワーク操作を呼び出すことにより、そのファイラーを機能的に編成する。当業者であれば、本明細書で説明する新しい技術に関するプログラム命令の記憶及び実行には、様々なコンピュータ読取可能媒体を含めて他の処理手段及び記憶手段も利用できることが分かるであろう。
【００３５】
ネットワークアダプタ２０８は、物理リンク１８０を介してファイラー２００をスイッチ１５０に接続するのに必要な機械的回路、電気回路及び信号回路を有するネットワークインタフェースカード（ＮＩＣ）を含む場合がある。一実施形態では、この物理リンク及びインタフェースは、集合インタフェースまたは仮想インタフェース（ＶＩＦ）１９０として編成される。各ＮＩＣは１つのインタフェース２１８を有し、４リンクのＶＩＦの場合、ファイラーは４個のＮＩＣ２０８を有する。あるいは、各ＮＩＣ２０８が４個の「４分の１ポート」インタフェース２１８を有し、各々の４分の１ポートインタフェースがＶＩＦ１９０のリンク１８０に接続されるようにすることもできる。他の実施形態では、物理リンク及びインタフェースを集合インタフェースまたはＶＬＡＮではないように構成することもできる。各インタフェース２１８には、１つのＭＡＣ（Media Access Control）アドレスと共に１以上のＩＰ（Internet Protocol）アドレスを割り当てることができる。しかしながら、物理インタフェース２１８及びそれらに関連するリンク１８０を１つの仮想インタフェース１９０に一体化した場合、全ての物理インタフェースがただ１つのＭＡＣアドレスに応答してしまう。即ち、物理インタフェース２１８は、共通のＭＡＣアドレスが割り当てられた１つの論理インタフェースを有する１つの仮想的な「パイプ」に編成される。
【００３６】
ストレージアダプタ２０６はファイラー上で実行されているストレージオペレーティングシステム３００と協働してクライアントから要求された情報にアクセスすることができ、この情報はディスク等の何らかの記憶媒体上に記憶されている。ストレージアダプタは、従来の高性能ファイバーチャネルシリアルリンクトポロジー等のＩ／Ｏ相互接続構成を介してディスクに接続された入出力（Ｉ／Ｏ）インタフェース回路を含む。情報はストレージアダプタによって取得され、必要であればシステムバス２１０を介してネットワークアダプタ２０８へ転送する前にプロセッサ２０２（又はアダプタ２０６自体）によって処理を施し、その情報をパケット１２０にフォーマットしてクライアント１１０へ返す。
【００３７】
ファイラーに対する情報の記憶は物理的ストレージディスク２１６の集まりを含む１以上のストレージ「ボリューム」として実施し、ディスク空間の全体的な論理的構成を定義することが好ましい。各ボリュームは通常、そのボリューム独自のファイルシステムに関連している。ディスク２１６に対するアクセスを容易にするため、ストレージオペレーティングシステム３００は、ディスク上で情報をファイル及びディレクトリの階層構造として論理的に編成するファイルシステムを実施する。「ディスク上」の各ファイルはデータ等の情報を記憶するように構成されたディスクブロックの集合として実施されるのに対し、ディレクトリは他のファイル及びディレクトリに関する情報を格納した特別なフォーマットのファイルとして実施される。前述のように、ストレージオペレーティングシステムは、ＷＡＦＬファイルシステムを実施するＤａｔａ  ＯＮＴＡＰオペレーティングシステムであることが好ましい。しかしながら、任意の適当なファイルシステムを用いることが可能であることは明らかであるから、「ＷＡＦＬ」という用語を使用した場合でも、この用語は本発明の教示に適合可能な任意のファイルシステムを広く意味するものと解釈すべきである。
【００３８】
図３は、本発明に有利に用いられるＤａｔａ  ＯＮＴＡＰオペレーティングシステム３００を示す略ブロック図である。このストレージオペレーティングシステムは、ネットワークドライバ（例えばギガビットイーサネットドライバ等）のメディアアクセス層３１０を含む一連のソフトウェア層から構成される。このオペレーティングシステムは更に、ＩＰ層３１２等のネットワークプロトコル層と、その補助的なトランスポート機構であるトランスポートコントロールプロトコル（ＴＣＰ）層３１４及びユーザデータグラムプロトコル（ＵＤＰ）層３１６を含む。ファイルシステムプロトコル層はマルチプロトコルデータアクセスを提供するため、ＣＩＦＳプロトコル３１８、ＮＦＳプロトコル３２０及びハイパーテキストトランスファープロトコル（ＨＴＴＰ）３２２をサポートする。また、ストレージオペレーティングシステム３００は更に、ＲＡＩＤ（Redundant Array of Independent Disks）プロトコル等のディスクストレージプロトコルを実施するディスクストレージ層３２４と、ＳＣＳＩ（Small Computer Systems Interface）プロトコル等のディスクアクセスプロトコルを実施するディスクドライバ層３２６とを含む。
【００３９】
これらのディスクソフトウェア層とネットワークプロトコル層／ファイルシステムプロトコル層との橋渡しをするのはＷＡＦＬ層３３０であり、好ましくはＷＡＦＬファイルシステムを実施する。ＷＡＦＬファイルシステムのディスク上のフォーマットは、例えば４キロバイト（ｋＢ）のブロックを用いたブロックベースのフォーマットであり、ファイルを表すのにｉｎｏｄｅを使用している。ｉｎｏｄｅとはファイルに関するメタデータ等の情報を記憶するために使用されるデータ構造であり、例えば１２８バイトのデータ構造である。ｉｎｏｄｅに保持されるメタデータには、例えばそのファイルの所有者、ファイルのパーミッション、ファイルのサイズ、ファイルの種類、ファイルに関する記憶単位、及び、そのファイルのディスク上の位置等が含まれる。ＷＡＦＬファイルシステムは、ファイルハンドル、すなわちｉｎｏｄｅ番号を含む識別子を用いてディスクからｉｎｏｄｅを検索する。また、ＷＡＦＬ層３３０は、そのファイルシステムのレイアウトを記述するメタデータを記憶するためにファイルも使用する。これらのメタファイルには、特にｉｎｏｄｅファイルが含まれる。
【００４０】
動作時には、クライアント１１０からの要求は、例えばコンピュータネットワーク１００を介して従来のＣＩＦＳまたはＮＦＳプロトコルのパケット１２０としてファイラー２００のネットワークアダプタ２０８に転送される。メディアアクセス層３１０のネットワークドライバは、ネットワークアダプタと協働してその要求パケットをデータバッファ２２２にロードし、その入ってきた要求パケットを受信したファイラーの物理インタフェース２１８の名前を用いてそのバッファにマークを付ける。各バッファ２２２はヘッダ部分２２４及びデータ部分２２６からなり、入ってきたパケットはデータ部分にロードされる。ヘッダの内容には（１）バッファの種類、（２）様々なフラグ、及び（３）ファイラーによってマークが付けられた着信インタフェースが含まれ、これらがファイラーによって維持される。入ってきたパケットがロードされた後、バッファ２２２はネットワークプロトコルスタックが実質的に繰り上げられ、例えばファイラーのディスク上に記憶されたデータをフェッチすることによりその要求をサービスする、適当なアプリケーションへ配送される。
【００４１】
具体的には、ネットワークドライバ３１０は、そのバッファをＷＡＦＬ層３３０へ転送する前にさらなる処理を行なうため、ネットワークプロトコル層３１２〜３１４またはＣＩＦＳまたはＮＦＳ層３１８、３２０上へ渡す。ＷＡＦＬファイルシステムは、要求されたデータ（及びｉｎｏｄｅ）が「コア」内、即ちメモリ２０４内に存在しなければ、要求されたデータ（及びｉｎｏｄｅ）をディスク２１６からロード（検索）するための処理を行なう。その情報がメモリ内に存在しない場合、ＷＦＡＬ層３３０は、ｉｎｏｄｅ番号を用いてｉｎｏｄｅファイル内に索引付けして適当なエントリにアクセスし、論理ボリュームブロック番号（ＶＢＮ）を取得する。次いでＷＡＦＬ層はその論理ＶＢＮをディスクストレージ（ＲＡＩＤ）層３２４に渡し、ディスクストレージ（ＲＡＩＤ）層３２４がその論理番号をディスクブロック番号にマッピングし、ディスクブロック番号をディスクドライバ層３２６の適当なドライバ（例えばＳＣＳＩドライバ等）へ送信する。ディスクドライバは、ディスク２１６のそのディスクブロック番号にアクセスし、要求されたデータブロックをファイラーで処理するためメモリ２０４にロードする。要求をサービスする際、ＣＩＦＳまたはＮＦＳ層３１８、３２０は、フェッチされたデータに対してバッファプールの中から別の（応答）バッファ２２２を割り当て、更にその応答を最初の要求に関連付ける。即ち、ＣＩＦＳまたはＮＦＳ層は、入ってきた要求に関連する物理インタフェースを用いてその応答バッファにマークを付ける。
【００４２】
前述のように、ファイラー２００は複数のクライアント１１０に対してファイルサービスを提供するように構成されているため、通常、クライアントから発行された要求に応答してデータを返す。この応答性を向上させるため、本ファイラーは、クライアントから要求を受信するのに使用された物理インタフェース２１８と同じ物理インタフェースを介して実質的に応答を返すという「高速パス」技術を実施する。高速パス技術を実施するためには、ＣＩＦＳまたはＮＦＳ層３１８でバッファヘッダー２２４内に高速パスフラグをアサートし、次いでそのバッファをプロトコルスタック「下方」のＩＰ層３１２へ渡し、ＩＰ層でそのフラグの状態を検査する。高速パスフラグのアサートにより、その特定の応答についてはルート計算を実施する必要のないことがＩＰ層に通知される。従って、その応答バッファを受信する宛先となるファイラー内のインタフェースは、その要求を受信した着信インタフェース２１８である。応答バッファがそのインタフェースへ転送され、要求されたデータがネットワーク１００を介してクライアント１１０へ返される。
【００４３】
ファイラーで受信されたクライアント要求についてデータストレージアクセスを実施するのに必要な上記ストレージオペレーティングシステム層中を通るソフトウェア「パス」は、代替としてハードウェアで実施することも可能である。即ち、本発明の代替の実施形態では、ストレージアクセス要求データパス３５０は、ＦＰＧＡ（Field Programmable Gate Array）またはＡＣＩＣ（Application Specific integrated circuit）内に論理回路として実施することもできる。この種のハードウェアによる実施は、クライアント１１０から発行されたファイルシステム要求パケット１２０に応答してファイラー２００によって提供されるファイルサービスの性能を向上させることができる。さらに本発明の他の実施形態では、プロセッサ２０２からパケット処理及びストレージアクセス処理の負荷のいくらかまたはすべてを軽減させるようにアダプタ２０６、２０６の処理要素を構成し、これによってファイラーによって提供されるファイルサービスの性能を向上させることもできる。本明細書で説明する様々な処理、アーキテクチャ、及び手順は、ハードウェアでもファームウェアでも、あるいはソフトウェアでも実施することができるということは明らかである。
【００４４】
本明細書で使用する場合、「ストレージオペレーティングシステム」という用語は、ストレージシステムにおいてストレージ機能を実施することが可能なコンピュータ実行可能コードを一般的に意味し、例えばファイルシステムセマンティック及びデータアクセス管理を実施するコンピュータ実行可能コードを意味している。この意味において、ＯＮＴＡＰソフトウェアは、マイクロカーネルとして実施され、ＷＡＦＬファイルシステムセマンティックを実施してデータアクセスを管理するためのＷＡＦＬ層を含むこのようなストレージオペレーティングシステムの一例である。このストレージオペレーティングシステムは、ＵＮＩＸ、Ｗｉｎｄｏｗｓ  ＮＴ等の汎用オペレーティングシステム上で動作するアプリケーションプログラムとして実施することもできるし、本明細書で説明するストレージアプリケーションあるいは本明細書で説明するような設定可能な機能を有する汎用オペレーティングシステムとして実施することもできる。
【００４５】
さらに当業者であれば、本明細書で説明する本発明の技術は、ストレージシステムとして実施されるスタンドアロンのコンピュータあるいはその一部、または、ストレージシステムを含むスタンドアロンのコンピュータあるいはその一部を含めて、任意の種類の特別な用途（例えばファイルサービスアプライアンス等）のコンピュータにも汎用コンピュータにも適用可能であることが分かるであろう。サーバは１以上のクライアントにアプリケーションサービスを提供するコンピュータとして定義され、このコンテクストにおいて、仮想サーバはクライアントに提供されるアプリケーションサービスのインスタンスである。また、本発明の教示は、これらに限定はしないが、ネットワークに取り付けられたストレージ環境、ストレージエリアネットワーク、及び、クライアントやホストコンピュータに直接取り付けられたディスクアセンブリ等を含む様々なストレージシステムアーキテクチャに適合させることができる。従って、「ストレージシステム」という用語は、ストレージ機能を実施するように構成された任意のサブシステム及びその他の装置またはシステムに関連する任意のサブシステムだけでなく、それらの構成も含むように広い意味で解釈すべきである。
【００４６】
Ｖｆｉｌｅｒ
本発明は、複数の仮想ファイラ（ｖｆｉｌｅｒ）等の仮想サーバを１つのファイラ等のサーバ内に作成及び維持するための能力を提供するアーキテクチャを含む。ｖｆｉｌｅｒは、マルチプロトコルサーバのインスタンスを確立するための、ファイラープラットフォームのネットワーク及びストレージリソースの論理的分割である。各ｖｆｉｌｅｒは、プラットフォーム上の他のファイラーとは完全に独立して維持及び実行される。そのため、ストレージの記憶単位及びネットワークインタフェースのネットワークアドレス等の専用ファイラーリソースを自由にグループ分けして「ハード」パーティションに分割することにより、ファイラー内にセキュリティドメインを確立することができる。さらに、ストレージオペレーティングシステム及びファイルシステム等の共通ファイラーリソースは、ｖｆｉｌｅｒ間で共有することができる。
【００４７】
具体的には、各ｖｆｉｌｅｒには、特定量の専用の個別の単位のストレージリソース（即ちサブセット）が割り当てられるとともに、１以上の専用の個別のネットワークアドレスが割り当てられる。また、各ｖｆｉｌｅｒは、そのクライアントに代わって共通ファイルシステムに共用アクセスすることも許可されている。従って、例えば共通ファイルシステムにアクセスするクライアントに関するセキュリティオブジェクトの解釈はｖｆｉｌｅｒ間で異なる場合がある。これを解決するため、各ｖｆｉｌｅｒには、特にそのｖｆｉｌｅｒに一意で個別のセキュリティドメインに関する情報を含むｖｆｉｌｅｒコンテクストデータ構造（以下「ｖｆｉｌｅｒコンテクスト」と呼ぶ）が設けられ、これによってｖｆｉｌｅｒに割り当てられた共有リソースに対するアクセスを制御できるようにしている。
【００４８】
例えば、第１のｖｆｉｌｅｒのｖｆｉｌｅｒコンテクストにより、第１のセキュリティドメインのユーザまたはクライアントは、ファイラ上のストレージリソースの第１のサブセットにアクセスするための要求を発行するときに、発信元ネットワークアドレス及び宛先ネットワークアドレスの第１の組を確実に使用できるようになる。同様に、第２のｖｆｉｌｅｒのｖｆｉｌｅｒコンテクストにより、第２のセキュリティドメインのユーザまたはクライアントは、発信元ネットワークアドレス及び宛先ネットワークアドレスの第２の組を使用してストレージリソースの第２のサブセットにアクセスできることが保証される。注目して欲しいのは、各セキュリティドメインのクライアントはファイラー上でお互いの存在に気づくことがなく、また、お互いのストレージリソースにアクセスすることもできない点である。さらに、ｖｆｉｌｅｒ間にデータフローは存在しない。
【００４９】
図４は、本発明による複数のｖｆｉｌｅｒを有するファイラープラットフォーム４００の一実施形態を示す概略図である。各ファイラーは、例えばＣＩＦＳサーバ等のサーバとして実施され、例えばＶＦ１〜ＶＦ３等の論理名で図示されている。クライアントから見ると、各ｖｆｉｌｅｒは他のｖｆｉｌｅｒから個別で独立したものに見える。各ｖｆｉｌｅｒ  ＶＦ１〜ＶＦ３は、１以上のネットワークインタフェース４０８ａ〜ｃに割り当てられた１以上のインターネットプロトコル（ＩＰ）アドレスを有するように構成される。このコンテクストにおいて、「ネットワークインタフェース」という用語はＩＰアドレスを割り振ることが可能なインタフェースを意味しており、「物理的」ＮＩＣ、及び、ＶＩＦ、ＶＬＡＮ、エミュレーテッドＬＡＮ（ＥＬＡＮ）等の「ソフトウェア」ＮＩＣも含まれる。注意して欲しいのは、一枚のＮＩＣは複数のＩＰアドレスをサポートすることができ、必要であれば、このような構成を用いることにより、複数のｖｆｉｌｅｒが１つのＮＩＣを有効に共有することも可能である点である。
【００５０】
更に、ファイラーの各インタフェースにはインタフェースをＩＰ空間に「バインド」するＩＰ空間識別子（ＩＤ）４０６ａ〜ｃが割り当てられる。ＩＰ空間とは、ファイラー及びそのストレージオペレーティングシステムが参加している個別のＩＰアドレス空間を意味している。１つのファイラーは複数のＩＰ空間をサポートすることができる。各ｖｆｉｌｅｒは１つのＩＰアドレス空間に関連しており、従って、各ｖｆｉｌｅｒは１つのＩＰ空間に属している。各ＩＰ空間内のＩＰアドレスは一意なものでなければならない。ＩＰ空間については、「Technique for Enabling Multiple Virtual Filers on a Single Filer to Participate in Multiple Address Spaces with Overlapping Network Addresses」と題した同時継続の米国特許出願第１１２０５６−００２３号にさらに詳しい説明がある。
【００５１】
各ｖｆｉｌｅｒに割り当てられるストレージリソースの単位には、ボリュームまたはサブボリューム（ｑｔｒｅｅ）が含まれる。ボリューム（Ｖ）４１０は、ファイルシステムすなわちディレクトリ及びファイルの階層構造からなるストレージの単位である。ｑｔｒｅｅ  ＱＴ１〜３  ４２０は、小型ボリューム（小型ファイルシステム）またはボリュームの細分割に類似した特別なディレクトリであり、例えばファイルのｉｎｏｄｅ内に記憶されたｑｔｒｅｅ識別子（ｑｔｒｅｅｉｄ）等を用いて、ファイルシステム内で自身を識別することができるという性質を有する。ｖｆｉｌｅｒアーキテクチャは、ｖｆｉｌｅｒまたはｖｆｉｌｅｒ間に、ストレージリソースの作成、割り当て及びマッピングを含むこれらのストレージリソースの有効な利用及び管理を提供する。例えば、仮想サーバ（ｖｆｉｌｅｒ等）及びそれに関連するストレージリソース（ｑｔｒｅｅ等）をあるサーバ（ファイラー等）へ移動させ、同様に名前付けされたリソースを有する他の仮想サーバ（ｖｆｉｌｅｒ等）と統合させることができる。ストレージリソースがｖｆｉｌｅｒ毎に割り当てられるため、クライアントがデータを参照するための方法には変更がないので、サーバ統合及びストレージ統合がクライアントに対して透過的なものになる。
【００５２】
カプセル化
ｖｆｉｌｅｒの各インスタンスは「外部」設定及び「内部」設定によって記述される。外部設定は、ｖｆｉｌｅｒに割り当てられたリソース（例えば、１以上のＩＰアドレスと、１ボリューム全体または１ボリューム上のｑｔｒｅｅ等の１以上の記憶単位等）及びｖｆｉｌｅｒが利用可能な能力（例えばそのｖｆｉｌｅｒ上で実行可能なプロトコル等）を記述するものである。内部設定（即ちｖｆｉｌｅｒの内部）は、そのｖｆｉｌｅｒに関連する様々なプロトコルモジュールまたは「ｖｆｉｌｅｒオプション」の動作を制御するものである。こうしたオプションの例としては、ｖｆｉｌｅｒと共にネットワークインフォメーション（ＮＩＳ）サーバを使用するか否か、及び、ＮＦＳ等の特定のプロトコルが基礎とするトランスポートとしてＴＣＰやＵＰＤＰを使用するか否かが含まれる。
【００５３】
ディスク上の表現
上記の外部設定情報は物理ファイラーのグローバルレジストリ（通常ファイラーのルートボリュームに格納されている）に記憶し、一方、内部設定情報はそのｖｆｉｌｅｒに割り当てられたストレージのプライベートレジストリに記憶することが好ましい。ｖｆｉｌｅｒの分割構成が与えられたとき、ｖｆｉｌｅｒに属するディスク等のストレージデバイスをある物理ファイラーから他の物理ファイラーへ移動させた場合、新たな「ヘッド」上にｖｆｉｌｅｒを作成するのに必要なすべての情報を得ることは通常できない。注意して欲しいのは、「ヘッド」がディスクシェルフを除いたファイラーの全ての部分として定義される点である。内部設定は入手することが可能であるが、外部設定は古いファイラー上でしか入手することができない。
【００５４】
本発明の一実施形態では、外部設定情報はｖｆｉｌｅｒの移動されたディスク上に冗長的に記憶することができる。しかしながら、この情報は、そのｖｆｉｌｅｒの管理者がアクセスできないような（変更不能な）方法で記憶しなければならない。外部設定情報は、移動されたディスクのすべてのファイルシステム単位（例えばボリューム）のメタデータ部分に記憶することが好ましい。ディスクシェルフの移動されたディスクがファイラープラットフォームに取り付けられると、ストレージオペレーティングシステムのディスクソフトウェア層が取り付けられたストレージユニットの外部設定情報を探し、「見つかった」ｖｆｉｌｅｒをインスタンス化する。これにより、ある物理ファイラーヘッドからそのストレージディスクを保持するディスクシェルフを取り除き、それらを別の物理ファイラーヘッドに取り付けるだけで、あるいは、外部設定情報を暗号化された形態で複製または移動可能なデータに記憶するだけで、ｖｆｉｌｅｒの移動が可能になる。
【００５５】
本発明の一態様によると、ｖｆｉｌｅｒは、オペレーティングシステムに関するユーザインタフェースの下記のコマンドラインインタフェース（ＣＬＩ）コマンドにより作成される。
vfiler create [xyz] [-s IPspace-name] [-i IP address(s)] [/vol/vol2] [/vol/vol3/qt1]
ただし、ｘｙｚは作成するｖｆｉｌｅｒの名前を、−ｓ  ＩＰｓｐａｃｅ−ｎａｍｅはそのｖｆｉｌｅｒが属するＩＰ空間の名前を、−ｉ  ＩＰａｄｄｒｅｓｓ（ｓ）はそのｖｆｉｌｅｒの特定のＩＰアドレスまたは一連のＩＰアドレスを記述するものである。また、／ｖｏｌ／ｖｏｌ２という記述は第１のストレージユニットを指すパス記述子であり、／ｖｏｌ／ｖｏｌ３／ｑｔ１という記述は第２のストレージユニットを指すパス記述子である。デフォルトｖｆｉｌｅｒはｖｆｉｌｅｒ０（ＶＦ０）であり、物理ファイラーがブートする際の初期化時に作成される。他にｖｆｉｌｅｒが作成されていなければ、ファイラー内に実現されるｖｆｉｌｅｒはＶＦ０だけである。デフォルトＶＦ０は物理ファイラープラットフォームに関連しており、例えばファイラー上のすべてのｖｆｉｌｅｒについてリソース割り当てが完了した後、割り当てられていないファイラーリソースに対してアクセスすることができる。ｖｆｉｌｅｒが何も定義されていない場合、ＶＦ０はそのファイラーのすべてのリソースを含む。
【００５６】
コア表現
特に、ｖｆｉｌｅｒは各ｖｆｉｌｅｒについてｖｆｉｌｅｒコンテクスト５００ａ〜ｃを作成するＣＬＩコマンドを作成する。ｖｆｉｌｅｒコンテクストがファイラーの初期化時にＶＦ０について作成される点に注意して欲しい。図５は、マルチプロトコルサーバのインスタンスを確立するために必要な設定情報または「状態」を保持するｖｆｉｌｅｒコンテクスト５００のコア表現を示す略ブロック図である。これらのコンテクストの複数のインスタンスが本ｖｆｉｌｅｒアーキテクチャの基礎を提供する。ｖｆｉｌｅｒコンテクスト５００は、そのｖｆｉｌｅｒの名前５０２及びＵＵＩＤ５０４（Universally Unique Identifier）を保持するフィールドを有し、これらはｖｆｉｌｅｒコンテクストと共に作成される。ＵＵＩＤには、例えば現在時刻及びそのｖｆｉｌｅｒに関するメディアアクセスコントロール（ＭＡＣ）アドレスが含まれる。ｖｆｉｌｅｒリストフィールド５０６はそのファイラープラットフォーム上のｖｆｉｌｅｒのリストを保持し、ＩＰ識別子（ＩＤ）フィールド５０８はそのｖｆｉｌｅｒのＩＰ空間ＩＤを保持する。
【００５７】
リソースマッピング
本ｖｆｉｌｅｒアーキテクチャによると、ストレージデバイス及びネットワークデバイス等のハードウェアリソースはｖｆｉｌｅｒに直接割り当てられるのではない。そうではなく、これらのハードウェアデバイスの能力のうちの一部だけを表現したソフトウェアオブジェクトがｖｆｉｌｅｒに割り当てられる。これらのソフトウェア（「ソフト」）オブジェクトは、ハードウェアリソースのうちの「動的調節可能」な部分にのみ対応している。ｖｆｉｌｅｒへの割り当てにソフトウェアオブジェクトを使用することの利点は、物理ファイラー上のｖｆｉｌｅｒ間でハードウェアリソースの全部または一部を割り当て、追加、移動及び除去する際の総合的な柔軟性である。これらの操作は、ＶＭまたはデータムーバ等の仮想サーバに基くハードウェア分割の際のハードウェアオブジェクトの再構成または複製による複雑で実行時間の長い手順とは対照的に、例えば実行時間の短いコンソールコマンドを用いて極めて迅速に行なうことが可能である。
【００５８】
従ってｖｆｉｌｅｒコンテクスト構造５００の他のフィールドは、仮想フィルターストレージ（ｖｆｓｔｏｒｅ）構造（ソフトオブジェクト）のリスト５１０、及び、ソフトオブジェクトの仮想ファイラーネットワーク（ｖｆｎｅｔ）のリスト５１２を保持する。図６は、本発明に有利に使用することが可能なソフトオブジェクトデータ構造を示す略ブロック図である。詳しくは、ｖｆｓｔｏｒｅリスト５１０はｖｆｓｔｏｒｅソフトオブジェクト６１０へのポインタを含み、ｖｆｓｔｏｒｅソフトオブジェクト６１０の各々はそのｖｆｉｌｅｒに割り当てられたｑｔｒｅｅまたはボリューム等、一単位のストレージリソースへのパスを指すポインタ６１２を有している。これにより、例えば複数のｑｔｒｅｅからなるボリュームをｖｆｉｌｅｒ間で有効に共有することが可能になる。また、各ｑｔｒｅｅまたはボリュームをｖｆｉｌｅｒコンテクスト５００（及び従ってｖｆｓｔｏｒｅ６１０）へ「マッピング」して戻すハッシュテーブル（図示せず）も設けられる。
【００５９】
ｖｆｎｅｔリスト５１２はｖｆｎｅｔソフトオブジェクト６２０に対するポインタを含み、各々のソフトオブジェクト６２０はそのｖｆｉｌｅｒに割り当てられたＩＰアドレスを表すインタフェースアドレス（ｉｆａｄｄｒ）データ構造６４０を参照するポインタを有する。各ｖｆｎｅｔオブジェクト６２０は、任意のネットワークインタフェース（例えばＩＰアドレスをＮＩＣに割り当てる場合はＮＩＣ）に割り当てることができる「流動的」能力を表している。複数のＩＰアドレスをＮＩＣに割り当てる場合、ＮＩＣのその能力は複数のｖｆｎｅｔオブジェクト６２０間（即ち異なる場合もあるｖｆｉｌｅｒ間）で有効に共有される。１つのインタフェースに１つのＩＰアドレスしか関連していない場合（インタフェースネットワーク（ｉｆｎｅｔ）データ構造６３０によって表現されるように）、１つのｖｆｎｅｔオブジェクト６２０だけが、即ち１つのｖｆｉｌｅｒだけがそのＮＩＣの能力を使用する。
【００６０】
本発明の他の態様によると、リソースマッピングとは、ｑｔｒｅｅ／ボリューム等のハードウェアリソースの一部に割り当てられたｖｆｉｌｅｒのリソース（ｖｆｓｔｏｒｅ及びｖｆｎｅｔオブジェクト）を表すソフトオブジェクトとｉｆｎｅｔ構造との間のマッピングとして定義される。従って、ｖｆｓｔｏｒｅ及びｖｆｎｅｔソフトオブジェクトは、これらのハードウェアリソースの能力のうちの動的調節可能な部分を表すあるレベルの間接参照を提供する。即ち、これらのソフトオブジェクトはハードウェアリソースを表す他のソフトオブジェクト（データ構造）に「リンク」され、これらのネットワーク及びストレージリソースを「論理的」に再割り当てするときに、例えばオブジェクトのポインタを変更すること等の方法により柔軟性を与える。こうした柔軟性によってファイルシステムレベルでのｖｆｉｌｅｒ構成変更の論理的確立が可能になり、手動でネットワーク及びストレージハードウェアリソースを再構成する等による物理的確立とは対照的なものになる。
【００６１】
例えば、ｉｆｎｅｔ構造６３０は、ネットワークインタフェースに割り当てられたＩＰアドレスのリストを保持するＩＰリストフィールド６３２を有する。さらにこのＩＰリストは、それらのＩＰアドレスに関連する適当なｉｆａｄｄｒデータ構造６４０を参照するポインタを含む。前述のように、各ｖｆｎｅｔオブジェクト６２０はｉｆａｄｄｒ構造６４０へのポインタ６２２（対応するＩＰアドレスがｉｆｎｅｔ構造６３０上に設定されている場合）、または、ヌル値（対応するＩＰアドレスが設定されていない場合）を含む。また、各ｉｆａｄｄｒ構造６４０はｖｆｉｌｅｒコンテクスト５００への（従って対応するｖｆｎｅｔオブジェクト６２０への）バックリンクポインタ６４２を保持する。
【００６２】
同様に、ストレージリソースがオンラインの場合、各ｖｆｓｔｏｒｅオブジェクト６１０は記憶単位のパスへのポインタ６１２を有する。例示的実施形態では、ＷＡＦＬファイルシステム３３３は、ｑｔｒｅｅやボリューム等の記憶単位の利用可能性及び範囲に関する情報を保持している。共に問い合わせのためにパスを伴うシステムコールをファイルシステムに供給し、応答として、そのパスが属するボリューム及びｑｔｒｅｅを示すストレージ識別子タプル（例えばｆｓｉｄ、ｑｔｒｅｅｉｄ等）を受信する。
【００６３】
本ｖｆｉｌｅｒアーキテクチャのリソースマッピングは更に、例えばｖｆｉｌｅｒ間でのネットワークリソース及びストレージリソースの移動（割り当て）に関して、効率的なネットワーク及びストレージの管理を可能にする。一群のデータ構造を参照したネットワーク管理、及び、動的変化に応じてｖｆｉｌｅｒとそれらのネットワークリソースとの間のリソースマッピングを維持するアルゴリズムが、プラットフォーム上でのこれらのリソースの割り当て及びその他の変更に対してなされる。一方、一群のデータ構造を参照したストレージ管理、及び、動的変化に応じてｖｆｉｌｅｒとそれらのストレージリソースとの間のリソースマッピングを維持するアルゴリズムが、プラットフォーム上でのこれらのリソースの割り当て及びその他の変更に対してなされる。割り当て変更には、ｖｆｉｌｅｒ間でのリソースの追加、移動、及び除去が含まれる。他のシステム変更には、新たなＮＩＣ（ＶＩＦ、ＶＬＡＮ、または新たなデバイス）の作成、または、ストレージボリュームの追加／始動／停止が含まれる。
【００６４】
ネットワーク及びストレージ管理には、ｖｆｉｌｅｒ間のリソースの割り当てに変更がなされたときにネットワークオブジェクト及びストレージオブジェクトに対して実施されるタスクも含まれる。例えば、ｖｆｉｌｅｒに対するＩＰアドレスの割り当てが変更された場合、ＩＰアドレスに関するＴＣＰ／ＩＰ接続及びルーティングは再初期化しなければならない。同様に、ｖｆｉｌｅｒに対するストレージユニットの割り当てが変更された場合、ｑｔｒｅｅやボリューム上で行なわれているディスク入出力操作も中止し、再初期化しなければならない。
【００６５】
セキュリティ
本発明の他の態様は、セキュリティに関し、ファイラープラットフォーム４００上でのセキュリティドメインの作成に関するものである。ストレージオペレーティングシステム３００及びそのＷＡＦＬファイルシステム３３０は、すべてのファイルが例えばＵＮＩＸスタイルまたはＮＴ（ＮＴＦＳ）スタイルのネイティブセキュリティの形態を有するマルチプロトコルセキュリティの概念を実施する。ファイルのネイティブセキュリティスタイルは、そのファイルのｉｎｏｄｅに含まれるセキュリティ情報から入手することができる。ＮＦＳファイルの場合、ｉｎｏｄｅに保持されるＵＮＩＸスタイルのセキュリティ情報には、（１）ファイルの所有者、（２）ユーザＩＤ及びプライマリグループＩＤ（「セキュリティオブジェクト」）、及び（３）ユーザ及びグループについてのパーミッション／権限が含まれる。ＮＴスタイルセキュリティのファイルの場合、ｉｎｏｄｅには、ファイルの所有者、セキュリティオブジェクト及びパーミッション／権限情報を含むセキュリティ記述子を参照するポインタが含まれる。
【００６６】
本ｖｆｉｌｅｒアーキテクチャの特徴は、各ｖｆｉｌｅｒがクライアントから見たときに一意の個別のセキュリティドメインに関連していることである。さらに、各ｖｆｉｌｅｒが共通ファイルシステム（例えばＷＡＦＬファイルシステム）に対するアクセスを共用することである。従って、各ｖｆｉｌｅｒが独自のセキュリティドメインに関連しているので、例えばクライアントによる共通ファイルシステムへのアクセスに関するセキュリティオブジェクトの解釈はｖｆｉｌｅｒ間で異なる場合がある。これを解決するため、各ｖｆｉｌｅｒコンテクストはそのｖｆｉｌｅｒのセキュリティドメインに関する情報をさらに含み、これによってｖｆｉｌｅｒに割り当てられた共有リソースへのアクセス制御を可能にしている。具体的には、各ｖｆｉｌｅｒコンテクスト５００は、各ユーザパスワードに関するユーザＩＤ及びグループＩＤを保持する／ｅｔｃ／ｐａｓｓｗｄ、ｇｒｏｕｐファイル５１６へのポインタを有する。さらに本明細書で説明するように、各ｖｆｉｌｅｒコンテクストは、Ｗｉｎｄｏｗｓ環境での認証に必要なネットワーク接続及びその他の機構とともに、ローカルなＷｉｎｄｏｗｓユーザ及びグループについてそのｖｆｉｌｅｒ独自の集合を有する。
【００６７】
ストレージオペレーティングシステムのマルチプロトコルな性質の理由から、ＮＴユーザ（Ｗｉｎｄｏｗｓクライアント）がＵＮＩＸスタイルのセキュリティを有するファイルにアクセスを試みる状況（あるいは逆の状況、即ちＵＮＩＸユーザ／クライアントがＮＴスタイルのセキュリティを有するファイルにアクセスする場合）も発生し得る。本ｖｆｉｌｅｒアーキテクチャは、異なる種類のセキュリティを有する複数の異なるクライアントをサポートするとともに、それらの異なるクライアントのセキュリティの種類をファイラーの異なるｖｆｉｌｅｒにマッピングする能力を有するというマルチプロトコルな特徴をさらに有している。特にＷＡＦＬファイルシステム３３０は、マルチプロトコルマッピング手順を実施してクライアントが要求されたリソース／ファイルにアクセスできるか否かを判定する。このマッピング手順は通常、そのリソースのセキュリティスタイルに関するセキュリティコントローラを使用してセキュリティデータベース内に検索動作を実施することにより、そのクライアント／ユーザの識別を解決している。新規のｖｆｉｌｅｒコンテクスト構造５００は、あるプロトコルから別のプロトコルへ（例えばＮＦＳからＮＴセキュリティへ）パーミッション検査属性の変換を可能にするマルチプロトコルマッピングライブラリファイル５１８を参照するポインタを設けることにより、この特徴を実現している。
【００６８】
おおまかに説明すると、あるクライアントがＮＦＳ要求をファイラー４００に転送してＮＴスタイルのセキュリティを有するファイルにアクセスするものと仮定する。この要求には、ＵＮＩＸスタイルのユーザＩＤを有するCredentialの集合が含まれる。従って、ファイルシステム３３０がそのユーザの「ＮＴ」ＩＤを判定するためには、そのＵＮＩＸユーザＩＤをＮＴユーザＩＤに変換しなければならない。ファイルシステム３３０は、ＵＮＩＸユーザＩＤを／ｅｔｃ／ｐａｓｓｗｄファイル５１６の中から探してそのユーザＩＤのＵＮＩＸユーザ名を識別し、次いでそのユーザ名をマッピングライブラリファイル５１８を用いてＮＴユーザ名に変換する。次いでこのファイルシステムはコントローラ、例えばＮＴドメインコントローラにアクセスし、そのＮＴユーザ名のＮＴスタイルのセキュリティＩＤ（Credentialによって明らかになる）を提供する。ドメインコントローラはそのCredentialをファイルシステムに返し、ファイルシステムはそのCredentialで指定されたアクセス権と要求されたファイルのｉｎｏｄｅに関するアクセスコントロールリスト（ＡＣＬ）とを比較する。本発明に有利に使用できるマルチプロトコルマッピング手順の一例は、１９９８年３月３日に出願された「File Access Control in a Multi-Protocol File Server」と題したＨｉｔｚ他による米国特許出願第０９／０３５，２３４号明細書に記載されている。
【００６９】
各ｖｆｉｌｅｒコンテクスト５００は、特定のプロトコルまたはサブシステムのインスタンスについて必要なすべての情報（グローバル変数等）を含む複数の「モジュール」データ構造をさらに含む。例えば、ＣＩＦＳモジュールデータ構造５２０は、ドメインコントローラ５２２との接続、ＣＩＦＳプロトコルのアクティブなセッション５２４、及び、ＣＩＦＳプロトコルに関する様々なコントロールブロック５２５に関する情報を含む、ＣＩＦＳプロトコルのインスタンスについて必要な全ての情報を保持する。ドメインコントローラは、ログイン要求を受け付けてそれらの認証を開始するネットワークサーバである。ＣＩＦＳ要求に対してＮＴタイプのセキュリティを可能にするため、セキュリティドメイン５２６に関する情報も供給される。このセキュリティ情報には、ドメイン部分とそれに関連するＩＤ（ＲＩＤ）部分とから構成されるセキュリティＩＤが含まれ、後者のＲＩＤはＵＮＩＸセキュリティのユーザＩＤに類似したものである。Ｗｉｎｄｏｗｓドメインセキュリティの場合、このセキュリティ情報にはドメインコントローラとのトラストリレーションシップも含まれる。このトラストリレーションシップは、ｖｆｉｌｅｒの能力を通知し、ユーザの認証をｖｆｉｌｅｒの代わりにドメインコントローラに「委ねる」ためのものである。各ＣＩＦＳモジュール５２０にはＣＩＦＳ認証プロセスのプロセスＩＤ（ＰＩＤ５２８）も含まれ、ＣＩＦＳ層が認証要求を正しいＣＩＦＳ認証プロセスへ送信できるようになっている。
【００７０】
限定はしないが、ＮＦＳプロトコル５３０、リモートシェル（ＲＳＨ）プロトコル５４０、テルネットプロトコル５５０、ＮＩＳサブシステム５６０、ドメインネームサービス（ＤＮＳ）サブシステム５７０、及びレジストリ５８０を含むｖｆｉｌｅｒに関連するプロトコル及びサブシステムの各々について、同様の「モジュール毎」のデータ構造が存在する。ＮＩＳサブシステムすなわち「イエローページ」は、ＮＩＳプロトコルのサービス探知機であり、各ユーザパスワードに関連するユーザＩＤ及びグループＩＤなどのセキュリティ情報を格納する分散データベースとして実施される。ＮＩＳサブシステムモジュール５６０は、分散セキュリティデータベースにアクセスする必要が生じたときにＮＩＳコントローラに接続するための情報を有している（例えばファイル５１６に格納された／ｅｔｃ／ｐａｓｓｗｄ，ｇｒｏｕｐの情報を用いる）。ＤＮＳサブシステムは、ＤＮＳ名を対応するＩＰアドレスに解決する働きがある。レジストリは、ハードウェア、ソフトウェア及びそのファイラー（及び各ｖｆｉｌｅｒ）ユーザに関する設定情報のレポジトリである。
【００７１】
境界チェック
本発明のさらに他の態様は、要求を行なっているｖｆｉｌｅｒがファイラープラットフォーム上の特定のストレージリソースにアクセス可能であることを検証するため、ストレージオペレーティングシステム３００のファイルシステム（即ちＷＡＦＬ層３３０）によって実施されるｖｆｉｌｅｒ境界チェックに関する。ｖｆｉｌｅｒ境界チェックは、要求されたファイルのｉｎｏｄｅから取得したそのファイルに関連する記憶単位（ｑｔｒｅｅやボリューム）等の情報に基いて行なわれる。記憶単位へのアクセスの要求がある毎に毎回この情報を用いて境界チェックが実施され、要求を行なっているｖｆｉｌｅｒがそのストレージリソースに対してアクセスを許可されている否かが判定される。境界チェックによってそのｖｆｉｌｅｒが要求されたストレージリソースに対するアクセスを許可されていないことが判明した場合、その要求は直ちに拒否される。そうでなければ、その要求は許可され、ＷＡＦＬファイルシステムがその要求を処理するための処理を行なう。
【００７２】
複数のＮＦＳクライアントＵ１〜Ｕ３が共通のＮＦＳサーバにアクセスするものと仮定する。各ＮＦＳクライアントはＮＦＳサーバによってエクスポートされたリソースの集合を「見る」ことができる。従って、各クライアントは、そのサーバの実質的にすべてのリソースにアクセスすることができる。これに対して、ＮＦＳサーバがファイラー４００（図４）として構成された場合、そのサーバは仮想サーバＶＦ０〜ＶＦ３に実質的に分割される（として実現される）。各ｖｆｉｌｅｒは独自のｖｆｉｌｅｒコンテクスト及びセキュリティドメインを有する。さらに、クライアントＵ１がＶＦ１のリソースに対するアクセスを許可され、クライアントＵ２がＶＦ２のリソースに対するアクセスを許可され、クライアントＵ３がＶＦ３のリソースに対するアクセスを許可されているものと仮定する。Ｕ１がＶＦ２のリソースにアクセスを試みた場合、Ｕ１はファイルシステムによって実施される新規のバウンダリチェックに失敗する。この「論理的」な境界チェックは、ＮＦＳハンドルの「スヌーピング」を試みるハッカーを含むすべてのクライアントについて、ｖｆｉｌｅｒドメイン内のセキュリティ（シェアに対するアクセス）を実施する。ハッカーが使用するようなツールを用いると、ストレージがクライアントにエクスポートされていなくても、サーバ上の任意のｉｎｏｄｅに有効にアクセスすることが可能である。従って、本ｖｆｉｌｅｒアーキテクチャの他のセキュリティ態様は、物理ファイラー上のストレージリソースに対するアクセスを判定するための境界チェックの利用（及びそれらに関連するデータ構造）を含む。
【００７３】
図７は、ｖｆｉｌｅｒ境界チェックを実施するために使用される様々なデータ構造を示す略ブロック図である。第１のデータ構造、例えばｆｓｉｄハッシュテーブル７００は複数のエントリ７１０を有し、各々のエントリ７１０がｖｆｉｌｅｒに関連し、そのテーブル内へのキーとして機能するボリューム（ファイルシステム）識別子（ｆｓｉｄ）によってアクセスされる。ｆｓｉｄテーブルの各ｖｆｉｌｅｒエントリは、例えばＶＦ１、ＶＦ２、ＶＦ３のようにｖｆｉｌｅｒを意味し、ｖｆｉｌｅｒはそのｆｓｉｄによって識別されるボリュームを明確に（完全に）所有する。適当なｉｎｏｄｅから取得したｆｓｉｄを用いることにより、あるｖｆｉｌｅｒがそのｆｓｉｄに関連するボリュームを完全に所有しているか否かを判定することができる。第２のｑｔｒｅｅハッシュテーブル７５０は複数のエントリ７６０を有し、各々のエントリ７６０がｖｆｉｌｅｒに関連し、ｆｓｉｄ及びｑｔｒｅｅｉｄから構成されるキーによってアクセスされる。後者のｑｔｒｅｅｉｄもｉｎｏｄｅから取得される。ｑｔｒｅｅテーブルの各ｖｆｉｌｅｒエントリは、ｑｔｒｅｅｉｄによって識別されるｑｔｒｅｅを所有するｖｆｉｌｅｒを意味している。従って、ｆｓｉｄ及びｑｔｒｅｅｉｄを用いることにより、そのｖｆｉｌｅｒがあるボリューム（ファイルシステム）のｑｔｒｅｅを完全に所有しているか否かを判定することができる。
【００７４】
ｖｆｉｌｅｒ境界チェックは、ファイラーのストレージリソースにアクセスするための複数ステージの検証手順に関連して行なわれることが好ましい。図８は、本発明の複数ステージの検証手順を含むステップの流れを示すフロー図である。このシーケンスは、ステップ８００から開始してステップ８０２へ進み、ここでファイラーのネットワークインタフェース４０８で着信した要求（ＮＦＳ、ＣＩＦＳ、ＨＴＴＰ、または、ＴＥＬＮＥＴパケット）を受信し、ステップ８０４でその要求をその要求の宛先ＩＰアドレス及びインタフェースのＩＰ空間ＩＤに基いて適当なｖｆｉｌｅｒへ送信する。例えば、メディアアクセス層３１０のドライバが特定のファイルハンドルを有するファイルにアクセスするためのＣＩＦＳ要求を受信するものと仮定する。上記のように、ネットワークインタフェースはＩＰ空間に関連している。ネットワークドライバはその要求をＩＰ層３１２へ渡し、ＩＰ層でその要求の宛先ＩＰアドレス及びＩＰ空間ＩＤ４０６をＩＰ空間データベースに格納された設定情報と比較することにより、その要求を所有するｖｆｉｌｅｒコンテクスト、例えば仮想フィルタ２（ＶＦ２）を選択する。その結果、ＶＦ２のｖｆｉｌｅｒコンテクスト５００ｂがその要求に関連付けられる。着信した要求を処理するためのｖｆｉｌｅｒコンテクストの選択については、「Technique for Enabling Multiple Virtual Filers on a Single Filer to Participate in Multiple Address Spaces with Overlapping Network Addresses.」と題した継続特許出願に完全に記載されている。
【００７５】
着信した要求をｖｆｉｌｅｒコンテクストに関連付けた後、ＩＰ層３１２はシステムコールを発行してそのｖｆｉｌｅｒコンテクスト５００をそのファイラー上で実行されているカレントプロセスに設定する（ステップ８０６）。ストレージオペレーティングシステムの内部は、ファイラー上で実行されている制御のプロセスまたはスレッドの概念である。プロセスブロックデータ構造は、その実行中のプロセススレッドのコンテクストを表している。プロセスブロックデータ構造には、ｖｆｉｌｅｒコンテクストで動作しているスレッドの概念が含まれる。そのため、プロセスブロックデータ構造には、そのファイラー上で実行されているカレントｖｆｉｌｅｒを参照するポインタが含まれる。ファイラー上にｖｆｉｌｅｒが何も作成／定義されていなければ、プロセスはデフォルトｖｆｉｌｅｒ  ＶＦ０のコンテクストで動作する。
【００７６】
ステップ８０８で、ＩＰ層コード３１２がその要求を適当なトランスポートプロトコル（例えばＴＣＰ）層へ渡し、トランスポートプロトコル層はその要求が特定のポート、例えばＣＩＦＳ層に宛てられたものであることを判定する。即ち、ＴＣＰ層コード３１４はそのプロトコル制御ブロック（ＰＣＢ）テーブルを検査して、その要求に含まれるポート番号に対してオープンされた「ソケット」が存在するか否かを判定する。このポート番号は、ファイルシステムプロトコル層、例えばＣＩＦＳ層プロトコルの特定のプロトコルサーバを識別するのに使用される。ｖｆｉｌｅｒ及びＩＰ空間ＩＤによってＰＣＢテーブルに条件がつけられ、これによってＴＣＰ層３１４はカレントｖｆｉｌｅｒコンテクストがオープンソケットを有するか否かを判定できるようになる。オープンソケットを有する場合、ＴＣＰ層３１４は、ＴＣＰ（ＮＢＴ）層（図３の符号３１５に示す）を介してＮｅｔＢＩＯＳを呼び出し、ＣＩＦＳプロトコルの組み立てを実施する。ＮＢＴ層３１５は、要求全体を受け取った後、ＣＩＦＳプロトコル層３１８を呼び出す。
【００７７】
ステップ８１０において、プロトコルサーバ（ＣＩＦＳコード）は、カレントｖｆｉｌｅｒコンテクストのコンテクストで特にＣＩＦＳモジュールを実行する。変数を参照する場合には、カレントｖｆｉｌｅｒコンテクスト５００のＣＩＦＳモジュール５２０の中から適当な変数を取得する。例えば、ＣＩＦＳ層の実行コードが例えばドメインコントローラとの接続を指定するものである場合、そのコードはカレントｖｆｉｌｅｒコンテクスト内のＣＩＦＳプロトコルのモジュールごとのインスタンスを参照してドメインコントローラ接続情報５２２を得る。このように、ｖｆｉｌｅｒに関する全ての状態はモジュールごとのデータ構造に記憶される。また、ｖｆｉｌｅｒを初期化する場合には、一群の初期化ルーチンを実行することにより、メモリロケーションを割り当て、変数を既知の値に設定し、適当なｖｆｉｌｅｒＩＤでプロセスを作成する。
【００７８】
ＣＩＦＳプロトコルは、要求に関するアクセス（読み出し）の種類、及び、特定のファイル（ファイルハンドル）を判定する。ステップ８１２でＣＩＦＳプロトコルサーバは、要求に関連するメッセージ（ＷＡＦＬメッセージ）をフォーマットし、そのメッセージをＷＡＦＬファイルシステムへ渡す。ＷＡＦＬメッセージは、要求をＷＡＦＬ層３３０へ転送して特定の機能に従って処理を行なうために用いられる仕組みである。ＷＡＦＬメッセージの１フィールドには、カレントｖｆｉｌｅｒコンテクストのＩＤが保持される。ＷＡＦＬファイルシステムは、要求に対する返答などの機能について、そのｖｆｉｌｅｒコンテクストを使用する。具体的には、ＷＡＦＬメッセージには、ＷＡＦＬ層コードによる後続の処理についてｖｆｉｌｅｒコンテクストを設定するためのｖｆｉｌｅｒポインタが含まれる。「仮想化」されたコンテクストに関する全てのコード、例えばプロトコルや管理機能を実行するのに必要なコードは、それらが動作しているカレントｖｆｉｌｅｒコンテクストと、そのカレントコンテクストに基いて有する能力とを「認識」している。
【００７９】
要求されたファイルがメモリに存在しない場合、ＷＡＦＬ層は、ファイルハンドルを用いてそのファイルのｉｎｏｄｅをコアへロードする。ファイルハンドルとは、ファイルシステム内部で使用されるｉｎｏｄｅデータ構造に対する参照である。ファイルハンドルは通常、ファイルＩＤ（ｉｎｏｄｅ番号）を含む複数の構成要素からなる。ステップ８１４でＷＡＦＬ層コードは、要求されたファイルのｉｎｏｄｅからｆｓｉｄ及びｑｔｒｅｅｉｄを取り出し、その要求を処理（サービス）する前に、新規の境界チェックに関する複数ステージの検証手順を実行する。
【００８０】
具体的には、この検証手順の最初のステージで、ｆｓｉｄをｆｓｉｄテーブル７００への索引として用い（ステップ８１６）、要求を行なっているｖｆｉｌｅｒ（ＶＦ２）が、例えばｆｓｉｄによって指定されたボリューム等の記憶単位全体を明らかに「所有」しているか否かを判定する（ステップ８１８）。所有している場合、ステップ８２０でＶＦ２はそのストレージリソースにアクセスすることができる。所有していない場合、この手順の２番目のステージで、そのボリュームが他のｖｆｉｌｅｒによって完全に所有されているか否かを判定する（ステップ８２２）。所有されている場合、ステップ８２４でその要求は直ちに拒否され、手順はステップ８４０で終了する。そのボリュームが他のｖｆｉｌｅｒによって明らかに所有されていない場合、この手順の３番目のステージで、ｆｓｄｉ及びｑｔｒｅｅｉｄをｑｔｒｅｅテーブル７５０への索引として用い（ステップ８２６）、そのｑｔｒｅｅｉｄによって識別されるｑｔｒｅｅ等のボリュームの一部をＶＦ２が所有しているか否かを判定する（ステップ８２８）。所有している場合、ステップ８３０でＶＦ２はそのストレージリソースにアクセスすることができる。所有していない場合、ステップ８３２でその要求は直ちに拒否され、この手順はステップ８４０で終了する。
【００８１】
この検証手順の境界チェックが満足されたものと仮定すると、ステップ８３４でＷＡＦＬ層３３０がその要求をサービスし、ＣＩＦＳ層３１８を呼び出す。前述のように、ＣＩＦＳ層によって生成されたＷＡＦＬメッセージにはカレントｖｆｉｌｅｒコンテクストが含まれる。次いでステップ８３６でＣＩＦＳプロトコルは応答を生成し、ステップ８３８でそれをネットワークプロトコル層へ転送し、ネットワークを介してその要求を発行したクライアントへ転送する。そしてこの手順はステップ８４０で終了する。
【００８２】
次に、着信した要求が認証要求であるものと仮定する。認証はＣＩＦＳ層３１８で行なわれる。ＣＩＦＳプロトコルは、認証のために例えばＫｅｒｂｅｒｏｓサーバ等の外部サーバに接続する必要があるか否かを判定する。従って、ＣＩＦＳ認証プロセスは、ｖｆｉｌｅｒ（コンテクスト）のコンテクストで作成（生成）される。ＣＩＦＳ層は、カレントｖｆｉｌｅｒのＣＩＦＳ認証プロセスへメッセージを送信する。前述のように、各ＣＩＦＳモジュール５２０はＣＩＦＳ認証プロセスのＰＩＤ５２８を保持しているので、ＣＩＦＳ層はそのメッセージを正しいＣＩＦＳ認証プロセスへ送信することが可能である。ＣＩＦＳ認証プロセスは、ドメインコントローラに接続し、例えばその要求を認証したという受領確認を受信した後、応答を生成してそれをネットワークプロトコル層へ送信する。
【００８３】
本発明のアーキテクチャによると、すべてのｖｆｉｌｅｒは、例えばＷＡＦＬメッセージのインジケータに基いて自分のｖｆｉｌｅｒを設定するためのＷＡＦＬスレッド等、いくつかのオペレーティングシステム機能について同じプロセスを「共有」することができる。他の場合としては、ｖｆｉｌｅｒの各インスタンスについて個別のプロセスが作成され、特にドメインコントローラに接続するまで待機してしまう等の「ブロッキング」の可能性がある操作について個別のプロセスが作成される場合もある。後者の場合、ドメインコントローラに接続するまでに要する時間に他のｖｆｉｌｅｒが「停止」することは望ましくない。
【００８４】
加えて、この新規のｖｆｉｌｅｒアーキテクチャによると、１つのファイラー上での仮想サーバとそれらの各々のデータアプリケーションとの統合が容易になるだけでなく、すべてのサーバリソースのカプセル化も容易になる。サーバ統合は、各々のｖｆｉｌｅｒがセキュリティドメインに関連付けられたｖｆｉｌｅｒの作成によってなされる。これらのセキュリティドメイン同士は完全に無関係のものであるため、同一のファイラープラットフォーム内に個別の独立したｖｆｉｌｅｒが設けられる。本発明のこの態様は、ファイラー上で複数のクライアント組織のデータアプリケーションを取り扱うストレージサービスプロバイダの場合に特に有用である。各クライアント組織は、自分のｖｆｉｌｅｒにのみアクセスすることができ、同じ物理ファイラーを他のクライアント組織と共用していることに気づくことはない。従って、この新規のアーキテクチャによると、各クライアント組織について専用に１つのファイラーを用意する必要がなくなる。
【００８５】
さらに、本ｖｆｉｌｅｒアーキテクチャによると、ｖｆｉｌｅｒが１つのサーバに関するすべてのリソースをカプセル化するので、ストレージリソースの統合に関する管理が容易になる。すなわち、ストレージリソースがｖｆｉｌｅｒごとに割り当てられるので、ファイラー間でのストレージ移動がクライアントに対して透過的になる。これによってｖｆｉｌｅｒが他の物理ファイラーへ移動または複製された場合でも、クライアントはデータを参照するための方法（例えばパス記述子）を変更する必要がなくなる。さらに、個々のハードウェアプラットフォームについて、ｖｆｉｌｅｒのインスタンスを設けるために必要なハードウェアリソース及びソフトウェアのコストも低減される。
【００８６】
前述のように、従来のシステムはサーバの複数のインスタンスを動作させるように構成されている。例えば、ＩＢＭ社の仮想マシン（ＶＭ）オペレーティングシステムはサーバの複数のインスタンスを１つのハードウェアプラットフォーム上で実行することを可能にするものである。しかしながら、ＶＭの各インスタンスは、それ独自のファイルシステムを所有するとともに、それ独自のネットワーク及びストレージリソースを所有している。すなわち、ハードウェアプラットフォームのネットワーク及びストレージリソースは、プラットフォーム上に実現されたＶＭのインスタンスに分配され、予め割り当てられる。これに対して、本ｖｆｉｌｅｒアーキテクチャは、例えば本明細書で説明したデータ構造の変更などの方法により、ネットワーク及びストレージリソースの「論理的」な再割り当てに関して柔軟性を保ちつつすべてのｖｆｉｌｅｒで共有された１つのファイルシステムを採用している。従って、ｖｆｉｌｅｒ構成の変更はファイルシステムレベルで実施され、ネットワークリソース及びストレージリソースの物理的再構成や、ファイルシステムの再フォーマット等とは対照的なものになっている。
【００８７】
他の従来のシステムとしては、ＵＮＩＸオペレーティングシステムプラットフォーム上で動作するＳａｍｂａ等のオープンソースのＷｉｎｄｏｗｓサーバがある。Ｓａｍｂａアーキテクチャはアプリケーション層で実施され、ＮＴサーバの複数のインスタンスをＵＮＩＸプラットフォーム上に提供する。サーバインスタンスを物理ネットワークインタフェース及びセキュリティドメインに「結び付ける」ことによって、例えばセキュリティ、及び、サーバインスタンス間のセキュリティドメインの多様性を保証するためには、このような実施形態は、基礎とするＵＮＩＸオペレーティングシステムのネットワークインフラストラクチャの変更を強いられる場合がある。これに対して、本ｖｆｉｌｅｒアーキテクチャの境界チェック手段は、各ｖｆｉｌｅｒインスタンスについてＩＰアドレスを設定するのに使用されるストレージオペレーティングシステムのネットワークコードの中の一関数である。（アクセスプロトコルごとに）独立したセキュリティドメインを有する能力は、本ｖｆｉｌｅｒアーキテクチャの最もすぐれた特性である。
【００８８】
更に、ＥＭＣ社から入手可能なＣｅｌｅｒｒａアーキテクチャは、ファイラーのインスタンスに相当するデータムーバの概念を利用している。データムーバは、様々な他のデータムーバに論理的に配分および割り当て可能なストレージリソースを有するＳｙｍｍｅｔｒｉｘストレージデバイスの「フロントエンド」として機能する。各データムーバは、それ独自のネットワークハードウェアの集合を有する。しかしながら、各データムーバは、オペレーティングシステムの独自のコピーを動作させるため、更に独自のプロセッサを有している。これは、複数の独立した「物理」サーバプラットフォームを「まとめてラックに納める」ことに等しい。これに対して本ｖｆｉｌｅｒアーキテクチャは、１つのファイラープラットフォーム内にｖｆｉｌｅｒの多数の「論理的」インスタンスをサポートすることができ、これによってアーキテクチャのスケーラビリティを向上させている。また、この新規のアーキテクチャは、すべての仮想ファイラーで共有する１つのファイルシステムを採用しているため、ファイルシステムレベルでのストレージリソースの論理的再割り当てに柔軟性がある。プロセッサ、メモリ、ネットワークインタフェース、及び、オペレーティングシステムリソース等の共通の物理ファイラー属性を共有することにより、本ｖｆｉｌｅｒアーキテクチャの方法は、従来の解決法よりもさらに経済性に優れたものとなっている。
【００８９】
具体的には、ｖｆｉｌｅｒアーキテクチャによると、リソースの共有が容易になり、特に例えばフェイルオーバ状況の故障の際に必要となる予備リソースの共有が容易になる。従来のシステムでは、例えば予備のリソースが同じ物理的マシンに取り付けられていないといった理由から同じアドレス空間を共有することができないので、このようなリソース共有は不可能である。そのため、プラットフォーム上でリソースを動的に再構成することができない。これに対して、新規のｖｆｉｌｅｒアーキテクチャは、ネットワークリソース及びストレージリソース（ＮＩＣ及びディスクドライブ等）の共有「予備」の貯えを維持することができ、それらをファイラーに動的に割り当てることが可能である。この文脈で、動的割り当てとは、リソースの「動作中」論理的割り当てを意味しており、様々なプラットフォーム間でのデバイス／ハードウェアの物理的な再配置とは対照的な意味である。
【００９０】
ここまでｖｆｉｌｅｒの複数のインスタンスを１つのファイラー内に作成及び維持する能力を提供するアーキテクチャの例示的実施形態について図示及び説明してきたが、本発明の思想及び範囲内で様々な他の応用及び変更が可能であると考えられる。例えば、代替の実施形態として、新規のｖｆｉｌｅｒアーキテクチャは複数のｖｆｉｌｅｒによるセキュリティドメインの共有を妨げないようにすることもできる。即ち、各ｖｆｉｌｅｒが独自のボリューム及びｑｔｒｅｅリソースを有するが、それでも他のｖｆｉｌｅｒと情報（例えばＮＩＳドメイン内の）を共有できるようにすることも可能である。さらに、様々なｖｆｉｌｅｒが独自の記憶単位（例えばボリューム）を有するように構成し、物理ファイラーの管理者の判断で特定のｖｆｉｌｅｒ（例えばデフォルトｖｆｉｌｅｒ）がプラットフォーム上の他の任意のｖｆｉｌｅｒに関連する任意のストレージにアクセスできるようにすることもできる。
【００９１】
上記の説明は本発明の特定の実施形態に関して行なっている。しかしながら、それらの利点のうちの一部または全部を保ちつつ説明した実施形態に対して様々な変更及び修正を施すことが可能であることは明らかである。従って、こうした変更及び修正が本発明の真の思想及び範囲内に含まれるようにカバーすることが付記した特許請求の範囲の目的である。
【００９２】
本発明の例示的実施形態を以下に列挙する。
１．サーバ内に複数の仮想サーバを作成及び維持するための方法であって、
各仮想サーバのインスタンスを確立するためにサーバのリソースを分割するステップと、前記サーバ内のリソースの論理境界チェック及びセキュリティ解釈を用いて、リソースへのアクセス制御を可能にするステップと、
からなる方法。
２．前記分割するステップは、
前記サーバの専用リソースを前記仮想サーバの各インスタンスに割り当てるステップと、
すべての前記仮想サーバ間で前記サーバの共用リソースを共有するステップと
を含む、１の方法。
３．前記専用リソースが、記憶単位、及び前記サーバのネットワークインタフェースのネットワークアドレスである、２の方法。
４．前記共用リソースが、前記サーバのオペレーティングシステム及びファイルシステムである、３の方法。
５．前記サーバがファイラーであり、前記仮想サーバが仮想ファイラー（ｖｆｉｌｅｒ）である、４の方法。
６．前記可能にするステップは、前記ｖｆｉｌｅｒのセキュリティドメインに関する情報を含むｖｆｉｌｅｒコンテクスト構造を設けるステップを含む、５の方法。
７．前記割り当てるステップは、ｖｆｓｔｏｒｅソフトオブジェクトへのポインタからなる前記ｖｆｉｌｅｒコンテクスト構造のｖｆｓｔｏｒｅ  ｌｉｓｔを設けるステップを含み、該ｖｆｓｔｏｒｅソフトオブジェクトの各々が前記ｖｆｉｌｅｒに割り当てられた記憶単位へのパスを参照するポインタを有する、６の方法。
８．前記割り当てるステップは、ｖｆｎｅｔソフトオブジェクトへのポインタからなる前記ｖｆｉｌｅｒコンテクスト構造のｖｆｎｅｔ  ｌｉｓｔを設けるステップをさらに含み、該ｖｆｎｅｔソフトオブジェクトの各々が前記ｖｆｉｌｅｒに割り当てられたネットワークアドレスを表すインタフェースアドレスデータ構造を参照するポインタを有する、７の方法。
９．前記可能にするステップは、ｖｆｉｌｅｒが前記ｆｉｌｅｒの特定のストレージリソースに対するアクセスを許可されていることを検証するためのｖｆｉｌｅｒ境界チェックを実施するステップをさらに含む、８の方法。
１０．前記実施するステップは、前記記憶単位に関連するファイルシステム識別子及びｑｔｒｅｅ識別子を確認するステップを含む、９の方法。
１１．前記実施するステップは、
記憶単位にアクセスするための要求の各々について、前記識別子を用いて前記ｖｆｉｌｅｒが該記憶単位にアクセスする権限を有しているか否かを判定するステップと、
前記ｖｆｉｌｅｒが要求された記憶単位にアクセスする権限を有していない場合、その要求を直ちに拒否するステップと、
そうでなければ前記要求を許可し、前記要求を処理するためのファイルシステム処理を行なうステップと
をさらに含む、１０の方法。
１２．サーバ内に複数の仮想サーバを作成及び維持するシステムであって、
前記仮想サーバの各々に割り当てられたストレージリソースの単位に従って情報を記憶するように構成された記憶媒体と、
前記仮想サーバの各々に割り当てられた１以上のネットワークアドレスリソースが割り当てられたネットワークインタフェースと、
要求が前記ストレージ媒体上のストレージリソースの特定のユニットに対するアクセスを許可されていることを検証するための境界チェックを実施するファイルシステムリソースを有するオペレーティングシステムであって、各仮想サーバが該ファイルシステムに対して共用アクセス可能になっている、オペレーティングシステムと、
前記ネットワークインタフェース及び前記記憶媒体に接続され、オペレーティングシステム及びファイルシステムを実行し、これによって、前記ファイルシステムの境界チェックの結果に従ってネットワーク及びストレージアクセス操作を呼び出すように構成された処理要素と、
からなるシステム。
１３．各仮想サーバに設けられたコンテクストデータ構造をさらに含み、該コンテクストデータ構造が仮想サーバのセキュリティドメインに関する情報を含み、割り当てられた共有リソースへのアクセス制御を実施する、１２のシステム。
１４．前記ストレージリソースの単位がボリューム及びｑｔｒｅｅである、１３のシステム。
１５．前記境界チェックを実施するために前記処理要素によってアクセスされる複数のテーブルデータ構造をさらに含み、該テーブルデータ構造が複数の第１のエントリを有する第１のテーブルを含み、該第１のエントリの各々が仮想サーバに関連し、該テーブル内への第１のキーとして機能するファイルシステム識別子（ｆｓｉｄ）を用いてアクセスされ、前記第１のテーブルの第１のエントリの各々は前記ｆｓｉｄによって識別されるボリュームを完全に所有する仮想サーバを示している、１４のシステム。
１６．前記テーブルデータ構造は複数の第２のエントリを有する第２のテーブルをさらに含み、該第２のエントリの各々が仮想サーバに関連し、ｆｓｉｄ及びｑｔｒｅｅ識別子（ｑｔｒｅｅｉｄ）からなる第２のキーを用いてアクセスされ、前記第２のテーブルの第２のエントリの各々は前記ｆｓｉｄ及びｑｔｒｅｅｉｄによって識別されるｑｔｒｅｅを完全に所有する仮想サーバを示している、１５のシステム。
１７．前記サーバがファイラーであり、前記仮想サーバが仮想ファイラーである、１６のシステム。
１８．ファイラー内に複数の仮想ファイラー（ｖｆｉｌｅｒ）を作成及び維持する装置であって、
ファイラーの専用リソースを各ｖｆｉｌｅｒに割り当てるための手段と、
前記ファイラーの共用リソースを全ての前記ｖｆｉｌｅｒ間で共有するための手段と、
前記サーバ内のリソースの論理境界チェック及びセキュリティ解釈を用いて前記専用リソース及び共有リソースへのアクセス制御を可能にするための手段と、
からなる装置。
１９．前記可能にする手段は、ｖｆｉｌｅｒが前記ファイラーの特定の専用リソースに対するアクセスを許可されていることを検証するためのｖｆｉｌｅｒ境界チェックを実施する手段を含む、１８の装置。
２０．前記可能にする手段は、前記ｖｆｉｌｅｒのセキュリティドメインに関する情報を含むｖｆｉｌｅｒコンテクスト構造を設けるための手段を含む、１８の装置。
２１．ファイラー内に複数の仮想ファイラー（ｖｆｉｌｅｒ）を作成及び維持するための実行可能プログラム命令を保持するコンピュータ読取可能媒体であって、該実行可能プログラム命令が、
ファイラーの専用リソースを各ｖｆｉｌｅｒに割り当てるためのプログラム命令と、
前記ファイラーの共用リソースを全ての前記ｖｆｉｌｅｒ間で共有するためのプログラム命令と、
前記サーバの前記専用リソース及び前記共有リソースの論理境界チェック及びセキュリティ解釈を用いてそれらのリソースに対するアクセスを実施するためのプログラム命令と
からなる、コンピュータ読取可能媒体。
２２．前記可能にするためのプログラム命令は、ｖｆｉｌｅｒが前記ファイラーの特定の専用リソースに対するアクセスを許可されていることを検証するｖｆｉｌｅｒ境界チェックを実施するためのプログラム命令を含む、２１のコンピュータ読取可能媒体。
２３．前記可能にするためのプログラム命令は、前記ｖｆｉｌｅｒのセキュリティドメインに関する情報を含むｖｆｉｌｅｒコンテクスト構造を設けるためのプログラム命令を含む、２１のコンピュータ読取可能媒体。
【図１】
2010092475.tif 000003
【図２】
2010092475.tif 000004
【図３】
2010092475.tif 000005
【図４】
2010092475.tif 000006
【図５】
2010092475.tif 000007
【図６】
2010092475.tif 000008
【図７】
2010092475.tif 000009
【図８】
2010092475.tif 000010