(57)【要約】【課題】ネットワークストレージシステムで、障害に強くＮＦＳなどの標準プロトコルを用いてアクセス可能であり、しかも、クライアントからするとどのネットワークストレージで処理がおこなわれてもインタフェース上一切意識することなくアクセスできるようにする。【解決手段】クライアントが第一のネットワークストレージにアクセス要求を発したときに（Ａ０１）、第一のネットワークストレージはファイル管理情報を保存しているディレクトリサーバに受信した要求を転送する（Ａ０２）。ディレクトリサーバでは要求を処理する第二のネットワークストレージを選択して、その要求を第二のネットワークストレージに転送する（Ａ０３）。第二のネットワークストレージではその要求を処理し応答結果として、第一のネットワークストレージで処理がおこなわれたかのように見えるパケットをクライアントに送信する（Ａ０４）。【選択図】        図２
2004240803.tif 000002
【特許請求の範囲】
【請求項１】
クライアントからのファイルデータを保存するネットワークストレージにアクセスするためのネットワークストレージ仮想化方法において、
ファイル管理情報を保存するディレクトリサーバを設け、
前記クライアントから前記ネットワークストレージにアクセス要求があったときに、
（１）前記クライアントからの要求を第一のネットワークストレージが受信するステップ、
（２）前記第一のネットワークストレージが前記受信した要求を前記ディレクトリサーバに転送するステップ、
（３）前記ディレクトリサーバが、前記ファイル管理情報を基に前記要求を処理するネットワークストレージとして第二のネットワークストレージを選択するステップ、
（４）前記ディレクトリサーバが、選択した第二のネットワークストレージに前記要求を転送するステップ、
（５）前記第二のネットワークストレージが、前記要求を処理するステップ、
（６）前記第二のネットワークストレージが、前記要求を処理した結果を前記要求の応答として前記クライアントに送信するステップ
を有することを特徴とするネットワークストレージ仮想化方法。
【請求項２】
前記ディレクトリサーバが複数あって、前記（２）のステップにおいて、受信した要求を転送するためのディレクトリサーバを選択するための処理を含むことを特徴とする請求項１記載のネットワークストレージ仮想化方法。
【請求項３】
さらに、前記（３）のステップの結果として、前記要求を処理するネットワークストレージとして前記第二のネットワークストレージを選択したことを、前記ディレクトリサーバが前記第一のネットワークストレージに通知するステップを含むことを特徴とする請求項１および請求項２記載のいずれかのネットワークストレージ仮想化方法。
【請求項４】
前記ディレクトリサーバの前記通知内容を前記第一のネットワークストレージが一時記憶用領域に保存することを特徴とする請求項３記載のネットワークストレージ仮想化方法。
【請求項５】
前記一時記憶領域への保存内容として、前記要求が含むファイル識別子と前記要求を処理するネットワークストレージの識別子との対応を含むことを特徴とする請求項４記載のネットワークストレージ仮想化方法。
【請求項６】
前記クライアントが前記第一のネットワークストレージに別のアクセス要求として第二の要求をしたときに、
（１０１）前記クライアントからの第二の要求を第一のネットワークストレージが受信するステップ、
（１０２）前記第一のネットワークストレージが受信した第二の要求が含むファイル識別子を前記一時記憶領域内で検索するステップ、
（１０３）前記検索により前記ファイル識別子を発見した場合、前記第一のネットワークストレージが、前記第二の要求を前記ファイル識別子に対応した前記ネットワークストレージに対して転送するステップ
を含むことを特徴とする請求項５記載のネットワークストレージ仮想化方法。
【請求項７】
クライアントからのファイルデータを保存するネットワークストレージにアクセスするためのネットワークストレージ仮想化方法において、
ファイル管理情報を保存するディレクトリサーバを設け、
前記ディレクトリサーバの有するファイル管理情報を分割して前記複数のネットワークストレージにも保存して、
前記クライアントから前記ネットワークストレージにアクセス要求があったときに、
（１０）前記クライアントからの要求を第一のネットワークストレージが受信するステップ、
（１１）前記第一のネットワークストレージが、前記要求を転送する前記ディレクトリサーバまたは第二のネットワークストレージを選択するステップ、
（１２）選択された前記ディレクトリサーバまたは前記第二のネットワークストレージに、前記第一のネットワークストレージが前記要求を転送するステップ、
（１３）前記ディレクトリサーバが選択された場合には、前記ファイル管理情報を基に前記要求を処理する第三のネットワークストレージを前記ディレクトリサーバが選択し、
前記第二のネットワークストレージが選択された場合には、分割して保存された前記ファイル管理情報を基に前記要求を処理する前記第三のネットワークストレージを前記第二のネットワークストレージが選択するステップ、
（１４）選択された前記ディレクトリサーバまたは前記第二のネットワークストレージが、前記要求を選択した第三のネットワークストレージに転送するステップ、
（１５）前記第三のネットワークストレージが前記要求を処理するステップ、
（１６）前記第三のネットワークストレージが前記要求を処理した結果を前記要求の応答として前記クライアントに送信するステップ
を有することを特徴とするネットワークストレージ仮想化方法。
【請求項８】
前記（１３）のステップの結果として、前記ディレクトリサーバまたは前記第二のネットワークストレージが、前記要求を処理するネットワークストレージとして前記第三のネットワークストレージを選択したことを前記第一のネットワークストレージに通知するステップを含むことを特徴とする請求項７記載のネットワークストレージ仮想化方法。
【請求項９】
前記第一のネットワークストレージが、前記ディレクトリサーバまたは前記第二のネットワークストレージの前記通知内容を一時記憶用領域に保存することを特徴とする請求項８記載のネットワークストレージ仮想化方法。
【請求項１０】
前記一時記憶領域への保存内容として、前記要求が含むファイル識別子と前記要求を処理するネットワークストレージの識別子との対応を含むことを特徴とする請求項９記載のネットワークストレージ仮想化方法。
【請求項１１】
前記クライアントが前記第一のネットワークストレージに別のアクセス要求として第二の要求をしたときに、
（２０１）前記クライアントからの第二の要求を第一のネットワークストレージが受信するステップ、
（２０２）前記第一のネットワークストレージが受信した第二の要求が含むファイル識別子を前記一時記憶領域内で検索するステップ、
（２０３）前記検索により前記ファイル識別子を発見した場合、前記第一のネットワークストレージが、前記第二の要求を前記ファイル識別子に対応した前記ネットワークストレージに対して転送するステップ、
を含むことを特徴とする請求項１０記載のネットワークストレージ仮想化方法。
【請求項１２】
クライアントからのファイルデータを保存するネットワークストレージにアクセスするためのネットワークストレージ仮想化方法において、
ファイル管理情報を保存するディレクトリサーバを設け、
前記クライアントから前記ネットワークストレージにアクセス要求があったときに、
（２０）前記クライアントからの要求を第一のネットワークストレージが受信するステップ、
（２１）前記第一のネットワークストレージが、前記ディレクトリサーバに対して前記受信した要求を処理するネットワークストレージを問い合わせるステップ、
（２２）前記ディレクトリサーバが、前記ファイル管理情報を基に前記要求を処理するネットワークストレージとして第二のネットワークストレージを選択するステップ、
（２３）前記第二のネットワークストレージが選択されたことを、前記ディレクトリサーバが前記第一のネットワークストレージに通知するステップ、
（２４）前記第一のネットワークストレージが、その通知を基にして、選択された前記第二のネットワークストレージに前記要求を転送するステップ、
（２５）前記第二のネットワークストレージが前記要求を処理するステップ、
（２６）前記第二のネットワークストレージが前記要求を処理した結果を前記要求の応答として前記クライアントに送信するステップ
を有することを特徴とするネットワークストレージ仮想化方法。
【請求項１３】
前記ディレクトリサーバの前記通知内容を前記第一のネットワークストレージが一時記憶用領域に保存することを特徴とする請求項１２記載のネットワークストレージ仮想化方法。
【請求項１４】
前記一時記憶領域への保存内容として、前記要求が含むファイル識別子と前記要求を処理するネットワークストレージの識別子との対応を含むことを特徴とする請求項１３記載のネットワークストレージ仮想化方法。
【請求項１５】
前記クライアントが前記第一のネットワークストレージに別のアクセス要求として第二の要求をしたときに、
（３０１）前記クライアントからの第二の要求を第一のネットワークストレージが受信するステップ、
（３０２）前記第一のネットワークストレージが受信した第二の要求が含むファイル識別子を前記一時記憶領域内で検索するステップ、
（３０３）前記検索により前記ファイル識別子を発見した場合、前記第一のネットワークストレージが前記第二の要求を、前記ファイル識別子に対応した前記ネットワークストレージに対して転送するステップ
を含むことを特徴とする請求項１４記載のネットワークストレージ仮想化方法。
【請求項１６】
クライアントからのファイルデータを保存するネットワークストレージにアクセスするためのネットワークストレージ仮想化方法において、
ファイル管理情報を保存するディレクトリサーバを設け、
前記ディレクトリサーバの有するファイル管理情報を分割して前記複数のネットワークストレージにも保存して
前記クライアントから前記ネットワークストレージにアクセス要求があったときに、
（３０）前記クライアントからの要求を第一のネットワークストレージが受信するステップ、
（３１）前記第一のネットワークストレージが、前記要求を転送する前記ディレクトリサーバまたは第二のネットワークストレージを選択するステップ、
（３２）前記ディレクトリサーバまたは前記第二のネットワークストレージに前記第一のネットワークストレージが前記要求を転送するステップと、
（３３）前記ディレクトリサーバを選択した場合には、前記ファイル管理情報を基に前記要求を処理する第三のネットワークストレージを前記ディレクトリサーバが選択し、
前記第二のネットワークストレージを選択した場合には、分割して保存された前記ファイル管理情報を基に前記要求を処理する前記第三のネットワークストレージを前記第二のディレクトリサーバが選択するステップ、
（３４）前記第三のネットワークストレージを選択したことを、前記ディレクトリサーバまたは前記第二のネットワークストレージが前記第一のネットワークストレージに通知するステップと、
（３５）前記第一のネットワークストレージが、その通知を基にして、選択された前記第三のネットワークストレージに前記要求を転送するステップ、
（３６）前記第三のネットワークストレージが前記要求を処理するステップ、
（３７）前記第三のネットワークストレージが前記要求を処理した結果を前記要求の応答として前記クライアントに送信するステップ、
を有することを特徴とするネットワークストレージ仮想化方法。
【請求項１７】
クライアントからのファイルデータを保存するネットワークストレージにアクセスするためのネットワークストレージシステムにおいて、
ファイル管理情報を保存するディレクトリサーバを設け、
前記クライアントが、第一のネットワークストレージにアクセス要求を発したときに、
前記第一のネットワークストレージは、前記ディレクトリサーバに受信した要求を転送して、
前記ディレクトリサーバは、前記要求を処理する第二のネットワークストレージを選択して、その要求を第二のネットワークストレージに転送して、
前記第二のネットワークストレージは、前記要求を処理して、その要求を処理した結果を前記クライアントに送信することを特徴とするネットワークストレージシステム。
【請求項１８】
前記第二のネットワークストレージは、要求を処理したのは、前記第一のネットワークストレージであるように見せかけた応答を処理結果に含むことを特徴とする請求項１７記載のネットワークストレージシステム。
【請求項１９】
前記第二のネットワークストレージが受け取るパケットには、前記第一のネットワークストレージの識別子が含まれていて、
前記第二のネットワークストレージにおいて、前記要求を処理したのは前記第一のネットワークストレージであると前記クライアントが認識するように、処理結果の応答パケットに、前記第一のネットワークストレージの識別子を含ませて組立てることを特徴とする請求項１８記載のネットワークストレージシステム。
【請求項２０】
前記ディレクトリサーバが複数あり、前記第一のネットワークストレージは、前記複数のディレクトリサーバから選択して前記要求を転送することを特徴とする請求項１７記載のネットワークストレージシステム。
【請求項２１】
前記ディレクトリサーバに格納されているファイル管理情報が、互いに整合性を維持して格納されていることを特徴とする請求項２０記載のネットワークストレージシステム。
【請求項２２】
前記ディレクトリサーバは、前記受信した要求の中のファイル識別子を評価関数により評価し、前記第二のネットワークストレージの識別子を得ることを特徴とする請求項１７記載のネットワークストレージシステム。
【請求項２３】
前記ディレクトリサーバは、新規ファイルを作成する際には、複数のネットワークストレージの負荷を評価し、負荷の低いネットワークストレージを前記第二のネットワークストレージとして選択することを特徴とする請求項１７記載のネットワークストレージシステム。
【請求項２４】
クライアントからファイルデータを保存するネットワークストレージにアクセスするためのネットワークストレージシステムにおいて、
ファイル管理情報を保存するディレクトリサーバを設け、
前記ディレクトリサーバの有するファイル管理情報を分割して前記複数のネットワークストレージにも保存して
前記クライアントから前記ネットワークストレージにアクセス要求があったときに、
前記要求を受信した第一のネットワークストレージは、前記要求を転送する前記ディレクトリサーバまたは第二のネットワークストレージを選択して、いずれかにその要求を転送し、
前記要求を受信した前記ディレクトリサーバおよび前記第二のネットワークストレージは、前記ファイル管理情報を基に前記要求を処理する第三のネットワークストレージを前記ディレクトリサーバが選択して、第三のネットワークストレージに転送し、
前記第三のネットワークストレージが前記要求を処理して、前記要求を処理した結果を前記要求の応答として前記クライアントに送信することを特徴とするネットワークストレージシステム。
【請求項２５】
前記複数のネットワークストレージに格納されるファイル管理情報が、前記ディレクトリサーバに格納されているファイル管理情報に対して、整合性を維持して格納されていることを特徴とする請求項２４記載のネットワークストレージシステム。
【請求項２６】
前記ディレクトリサーバの有するファイル管理情報を分割して前記複数のネットワークストレージにも保存するに際して、
ファイル識別子を評価してネットワークストレージ識別子を返す評価関数により、前記ディレクトリサーバが保存する個々のファイル管理情報の中のファイル識別子を評価して、
その評価の結果により、前記複数のネットワークストレージに前記ファイル管理情報を分割することを特徴とする請求項２４記載のネットワークストレージシステム。
【請求項２７】
新規ファイルの管理情報を追加する際には、
前記ディレクトリサーバに前記新規ファイルの管理情報を追加して、
しかる後に、前記ディレクトリサーバが前記複数のネットワークストレージの少なくとも一つのネットワークストレージに前記新規ファイルの管理情報を追加することを特徴とする請求項２４記載のネットワークストレージシステム。
【請求項２８】
前記ファイル管理情報の更新の際には、
そのファイル管理情報を保存している前記ネットワークストレージが、そのファイル管理情報を更新し、
しかる後に、前記ネットワークストレージは、前記更新したファイル管理情報を保存している前記ディレクトリサーバにそのファイル管理情報の更新を依頼することを特徴とする請求項２４記載のネットワークストレージシステム。
【請求項２９】
前記ネットワークストレージが、前記ファイル管理情報の更新内容を蓄積して、
前記ネットワークストレージは、前記更新したファイル管理情報を保存している前記ディレクトリサーバに前記蓄積した更新内容の更新を前記ディレクトリサーバに依頼することを特徴とする請求項２８記載のネットワークストレージシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ネットワークストレージ仮想化システムに係り、ネットワークに直付けされるネットワークストレージを仮想化することにより、クライアントからのネットワークストレージのアクセスを容易にして、システムの構築、運用を柔軟におこなうことのできるネットワークストレージ仮想化システムに関する。
【０００２】
【従来の技術】
従来の情報処理システムでは、計算機システムに直接接続したハードディスクドライブなどのストレージに情報を格納していた。ストレージに格納した情報は、ストレージを直接接続した計算機からのみアクセス可能なため、他の計算機システムから情報にアクセスするためには、ストレージを直接接続した計算機を経由する必要があった。
【０００３】
しかしながら、近年のネットワーク技術の発達と格納すべき情報量の飛躍的な増大により、情報を処理する計算機システムと情報を格納するストレージシステムの分離の動きが進んでいる。その結果、ネットワークに接続し複数の計算機システム間で情報を共有できるストレージシステムが出現してきた。このようなネットワークに接続するストレージをネットワークストレージと呼ぶ。
【０００４】
このようなネットワークストレージの例として、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）で接続してブロックアクセスを提供するＳＡＮストレージ、ＩＰネットワークやＩｎｆｉｎｉｂａｎｄなどで接続してファイルアクセスを提供するＮＡＳ（Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）、ＷｅｂアクセスのインタフェースであるＨＴＴＰプロトコルやそれを拡張したプロトコルでのアクセス形態を提供するＷｅｂストレージなどがある。
【０００５】
ネットワークストレージの普及につれ、システム管理者は、ネットワークに接続した複数のネットワークストレージを管理する必要が生じてきた。例えば、格納すべきデータ量が既存のネットワークストレージの最大値を越えるような場合には、新たなネットワークストレージを追加し、データの再分配などのシステム再構築が必要になる。ストレージ容量に対する需要の急激な伸びは、度重なるシステム再構築を強いるためシステム管理コストを膨張させてきた。
【０００６】
システム管理コストの抑制には、複数のネットワークストレージを計算機システムからは仮想的に一つに見せ、新たな装置の追加を行なってもシステム全体に影響が及ばないようにするストレージ仮想化技術が必須となっている。このようなストレージ仮想化技術に関しては各種方式が開発され提案されている。
【０００７】
例えば、１９９５年にＨａｒｔｍａｎらが発表したＺｅｂｒａ（例えば、非特許文献１参照）では、一つのファイルをストライピングして複数のネットワークストレージに分散格納する方式を提案している。この方式では、ファイルを一定の長さごとに分割し、ネットワークストレージにラウンド・ロビン方式で順次格納する。Ｚｅｂｒａでは、ファイルがどのストレージにどのような順番で分散格納しているか集中管理するサーバがあり、ファイルアクセス処理時にはこの管理サーバにファイルの格納位置に関する情報を問い合わせてからファイルの本体データにアクセスするという特徴がある。すなわち、Ｚｅｂｒａでは、ファイルを複数のサーバに分散格納させて一つのサーバで集中管理することにより、複数のネットワークストレージを仮想的に一つの大きいネットワークストレージに見せている。
【０００８】
また、特許文献１では、Ａｌｅｘａｎｄｅｒ  Ｈ．  Ｆｒｅｙらは、Ｚｅｂｒａの集中管理サーバ方式と異なる非集中管理サーバ方式によりファイルのストライピングを行なう方式を提案している。この方式では、ファイルのストライピング情報が格納されているスタータノード情報をファイル識別子に埋め込むことで、Ｚｅｂｒａで集中管理していたストライピング情報を複数のネットワークストレージで分散管理している。ファイル識別子にスタータノードを格納するため、クライアントがファイルアクセスする際には、まずスタータノードへアクセスをおこない、そこでファイルの格納位置を決定し、必要があればアクセスすべきファイルの断片（ブロック）を格納しているサーバへアクセス要求を転送して処理することになる。このため、クライアントからの当該ファイルについてのアクセスは、スタータノードへ要求を発行するだけで良く、ファイルのストライピングによる格納位置を考慮する必要がないという利点がある。
【０００９】
また、特許文献２の「分散ファイル管理装置及び分散ファイル管理システム」では、複数のサーバ計算機に状態管理部を設け、負荷情報を保持して負荷を管理し、記憶装置に、分散ファイルの一部または全部を構成する部分ファイルを記憶して、分散ファイルの部分ファイルを特定し、状態管理部で管理する負荷情報に基づき部分ファイルを処理するサーバ計算機を決定するようにする。これにより特定のサーバへの負荷の集中を防ぐことができる。
【００１０】
【非特許文献１】
Ｔｈｅ  Ｚｅｂｒａ  Ｓｔｒｉｐｅｄ  Ｎｅｔｗｏｒｋ  Ｆｉｌｅ  Ｓｙｓｔｅｍ，  Ｈａｒｔｍａｎ  ｅｔ．  ａｌ．，  ＡＣＭ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  ＣｏｍｐｕｔｅｒＳｙｓｔｅｍ，  Ｖｏｌ．  １３，  Ｎｏ．  ３，  １９９５，  ｐｐ．  ２７４−３１０．
【特許文献１】
米国特許第６，０２９，１６８号明細書
【特許文献２】
特開２０００―２０７３７０号公報
【００１１】
【発明が解決しようとする課題】
上記従来技術のＺｅｂｒａでは、ファイルを分散していても、ユーザはそれらの詳細情報を保持していなくてもアクセスできる利点がある。しかしながら、前記Ｚｅｂｒａでは、アクセスするファイルの断片を格納するネットワークストレージを決定する際に、集中管理サーバに問い合わせる必要があり、特にファイルの更新ではネットワークストレージ上のデータの他に集中管理サーバ上のデータも更新する必要がある。このため、ネットワークストレージの台数が増加すると集中管理サーバがボトルネックとなり、システムのスケーラビリティを阻害する要因となっている。さらに、Ｚｅｂｒａでは専用のクライアントが必要となるため、ＮＦＳなどの標準プロトコルに適用できない問題がある。
【００１２】
また、特許文献１の非集中管理サーバ方式では、管理サーバが複数のサーバに分散されている点では、集中管理サーバがボトルネックになるというＺｅｂｒａの問題点を解決している。しかしながら、このシステムではファイルアクセスする際にファイルを一意に特定するファイル名あるいはディレクトリ名とスタータノードが埋め込まれているファイル識別子との変換を分散ディレクトリ等のサーバがおこなうことが前提となっており、ファイルの格納場所を管理するサーバとファイル名との対応を管理する情報が別途必要となっている。特許文献１の実施例ではそのような情報を格納する手段としてａ  ″ｗｅｌｌ−ｋｎｏｗｎ″  ｄｉｓｔｒｉｂｕｔｅｄ  ｄｉｒｅｃｔｏｒｙ  ｆｉｌｅを利用すると述べている。また、ファイル識別子にスタータノードの位置を直接埋め込むため、新しいネットワークストレージを追加して既存のファイルのスタータノードを新しいネットワークストレージに移動する際には、分散ディレクトリに格納されているファイル名とファイル識別子との対応情報を書き換える必要がある。このため、新規ネットワークストレージ増設の際の管理コストが増大する問題がある。
【００１３】
また、特許文献２に記載の発明では、複数サーバ間での負荷、特にディスクやネットワークへの負荷の分散に主眼を置いているが、分散ファイル管理手段の冗長化を考慮していないため、障害発生時にアクセスが不能になる問題がある。
【００１４】
本発明は、上記問題点を解決するためになされもので、その第一の目的は、ＮＦＳなどの標準プロトコルを用いてアクセス可能なネットワークストレージ仮想化方法を提供することである。
【００１５】
また、本発明の第二の目的は、ネットワークストレージの増設や減設の際の管理コストが小さいネットワークストレージ仮想化方法を提供することである。
【００１６】
また、本発明の第三の目的は、ファイル管理情報を冗長化することで障害発生時にも継続して運用可能なネットワークストレージ仮想化方法を提供することである。
【００１７】
さらに、本発明の第四の目的は、クライアントからの要求を受信するネットワークストレージと、要求の処理をおこないクライアントに応答を返すネットワークストレージとが異なる場合でも、クライアントでは、そのことを意識せずとも、ネットワークストレージへの要求をおこなうことのできるネットワークストレージ仮想化システムを提供することである。
【００１８】
【課題を解決するための手段】
本発明のネットワークストレージ仮想化方法は、上記目的を達成するため以下のようにする。
【００１９】
ネットワークストレージ仮想化システムにファイル管理情報を保存するディレクトリサーバを設け、クライアントからネットワークストレージにアクセス要求があったときに、クライアントからの要求を第一のネットワークストレージが受信し、第一のネットワークストレージが受信した要求をディレクトリサーバに転送する。そして、ディレクトリサーバは、ファイル管理情報を基に要求を処理するネットワークストレージとして第二のネットワークストレージを選択して、その第二のネットワークストレージに要求を転送する。
【００２０】
第二のネットワークストレージでは、要求を処理して、要求を処理した結果を要求の応答としてクライアントに送信するようにする。
【００２１】
また、ディレクトリサーバが複数あるときには、受信した要求を転送するためのディレクトリサーバを選択するようにする。
【００２２】
このときに、第二のネットワークストレージは、要求を処理したのは、第一のネットワークストレージであるように見せかけた応答を処理結果に含ませて返すようにする。したがって、クライアントでは、どのネットワークストレージが処理をおこなったかを意識せずともよい。
【００２３】
また、前記ディレクトリサーバが要求を処理するネットワークストレージとして第二のネットワークストレージを選択したことを、第一のネットワークストレージに通知するようにしてもよい。このようにして、第一のネットワークストレージに通知内容を保存しておけば、二回目に第一のネットワークストレージに同じファイルにアクセスがあったときに、直接、その要求を第二のネットワークストレージに転送することができる。
【００２４】
また、ディレクトリサーバの有するファイル管理情報を分割して複数のネットワークストレージにも保存するようにして、クライアントからネットワークストレージにアクセス要求があったときに、クライアントからの要求を受信した第一のネットワークストレージでは、要求を転送するディレクトリサーバまたは第二のネットワークストレージを選択して、選択したディレクトリサーバまたは前記第二のネットワークストレージに、要求を転送するようにする。
【００２５】
選択されたディレクトリサーバまたは第二のネットワークストレージでは、要求を処理する第三のネットワークストレージに要求を転送して、第三のネットワークストレージに処理をおこなわせる。
【００２６】
ディレクトリサーバとネットワークストレージに分割して保存されるファイル管理情報は、整合性を維持して保存しておく必要がある。
【００２７】
このようにすれば、ファイル管理情報が分散して管理されるため、冗長度が増し、システムの安全度を高めることができる。
【００２８】
また、クライアントからネットワークストレージにアクセス要求があったときに、要求を受信したネットワークストレージで、ディレクトリサーバに対して前記受信した要求を処理するネットワークストレージを問い合わせて、通知させ、要求を受信したネットワークストレージで、要求を処理するネットワークストレージに転送するようにしてもよい。
【００２９】
このネットワークストレージ仮想化方法では、標準のプロトコルでシステムを構築することができ、クライアントに特別なプロトコルや仕様を意識させることはない。また、ファイルの容量増加したときなどのシステムの増設などもネットワークストレージを追加することにより簡単におこなうことができる。
【００３０】
さらに、ファイル管理情報を分散管理されているために、システムの安全性が高まっており、一部のディレクトリサーバやネットワークストレージに障害がおこっても継続運転することが可能である。
【００３１】
【発明の実施の形態】
以下、本発明に係る各実施形態を、図１ないし図８を用いて説明する。
【００３２】
〔本発明のネットワークストレージシステムのシステム構成〕
先ず、図１を用いて本発明のネットワークストレージシステムのシステム構成について説明する。
図１は、本発明のネットワークストレージシステムのシステム構成図である。
【００３３】
本発明のネットワークストレージは、クライアントＫ００と、ネットワークストレージＮ０１〜Ｎ０４およびディレクトリサーバＤ０１、Ｄ０２とをＬＡＮ１００により接続する。
【００３４】
クライアントＫ００は、サーバに対してファイルの読み書き、ファイル管理情報取得などのファイルアクセス要求をおこなう。
【００３５】
ネットワークストレージＮ０１〜Ｎ０４は、ネットワークに直接接続されているストレージデバイスであり、ファイルの本体データを格納する。
【００３６】
ディレクトリサーバＤ０１、Ｄ０２は、ファイル属性やファイル本体データを格納しているネットワークストレージの情報などからなるファイルの管理情報を格納する。
【００３７】
なお、この図１の例では、ネットワークストレージが三台、ディレクトリサーバが二台であるが、ネットワークストレージは、システムの規模に応じて何台でも増設してもよいし、ディレクトリサーバは、ファイル管理情報の容量、サーバの性能などに従って適切な台数を設けることができる。
【００３８】
〔実施形態１〕
次に、図２ないし図５を用いて本発明に係る第一の実施形態について説明する。
図２は、本発明に係る第一の実施形態の処理の流れを示す模式図である。
図３は、クライアントからＲＥＡＤ／ＷＲＩＴＥ要求がされたときの処理を示すＰＡＤ（Ｐｒｏｂｌｅｍ  Ａｎａｌｙｓｉｓ  Ｄｉａｇｒａｍ）図である。
図４は、クライアントからＣＲＥＡＴＥ要求がされたときの処理を示すＰＡＤ図である。
図５は、クライアントからＬＯＯＫＵＰ要求がされたときの処理を示すＰＡＤ図である。
【００３９】
本実施形態では、ＲＦＣ１８１３（ＮＦＳ  Ｖｅｒｓｉｏｎ３  Ｐｒｏｔｏｃｏｌ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ）に記載のＮＦＳのプロトコルを使いクライアントＫ００が通信する場合のネットワークストレージの仮想化方法について説明する。ＮＦＳ（Ｎｅｔｗｏｒｋ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）は、ＴＣＰ／ＩＰ環境下で標準的に使用される分散分散ファイルシステムである。以下では、ＮＦＳの代表的なプロトコルであるＲＥＡＤ、ＷＲＩＴＥ、ＣＲＥＡＴＥ、ＬＯＯＫＵＰを例にしてネットワーク仮想化方法の動作を説明するが、その他のＮＦＳのプロトコルについても、同様に考えることができる。
（Ｉ）ネットワークストレージ仮想化方法の処理の概要
先ず、図２により本発明のネットワークストレージ仮想化方法の処理の概要について説明する。
【００４０】
図２（ａ）は、クライアントからの要求がファイル本体とファイル管理情報の両方にアクセスする場合であり、ＲＥＡＤ、ＷＲＩＴＥ、ＣＲＥＡＴＥなどのプロトコルがこれに該当する。
【００４１】
この処理では、先ず、クライアントＫ００からネットワークストレージＮ０１（第一のネットワークストレージ）にＬＡＮ経由でファイルアクセス要求を発する（Ａ０１）。ファイルの管理情報は、ディレクトリサーバに格納されているため、ネットワークストレージＮ０１では、そのファイルのファイル管理情報を格納されているディレクトリサーバＤ０１を選択して、その要求を転送する（Ａ０２）。
【００４２】
このときに、ネットワークストレージＮ０１は、転送されてきたクライアントと第一のネットワークストレージＮ０１のＩＰアドレス、送受信のポート番号、ＲＥＡＤ／ＷＲＩＴＥ要求のトランザクションＩＤなどの情報を転送する。
【００４３】
ディレクトリサーバＤ０１は、そのファイルの格納されているネットワークストレージを検索して、転送されてきたクライアントと第一のネットワークストレージＮ０１のＩＰアドレスなどの情報と共に、該当するネットワークストレージＮ０３（第二のネットワークストレージ）に要求を転送する（Ａ０３）。
【００４４】
ネットワークストレージＮ０３では、受信した要求を処理して、クライアントＫ００に応答を返す（Ａ０４）。このとき、ファイルアクセス時刻などのファイル管理情報の更新処理などのために、ディレクトリサーバＤ０１に対してファイル管理情報の読み出しや更新をおこなう（Ａ０５）。
【００４５】
ここで重要なことは、処理をおこなう第二のネットワークストレージＮ０３は、要求を処理したのは、第一のネットワークストレージＮ０１であるように見せかけるようにすることである。すなわち、第二のネットワークストレージＮ０３に、クライアントと第一のネットワークストレージＮ０１のＩＰアドレスなどの情報が転送されるので、第二のネットワークストレージＮ０３の応答パケットに第一のネットワークストレージＮ０１のＩＰアドレスを含めて、クライアントＫ００でファイルアクセスの要求を出したセッションを引き継げるようにする。
【００４６】
このようにすれば、クライアントＫ００からみると、どのネットワークストレージが要求を処理するかを意識せずともよい。
【００４７】
図２（ｂ）は、クライアントからの要求がファイル管理情報のみにアクセスする場合であり、例えば、ＬＯＯＫＵＰなどのプロトコルがこれに該当する。
【００４８】
この処理では、先ず、クライアントＫ００は、システム上の任意のネットワークストレージＮ０１にＬＡＮ経由でファイルアクセス要求を発する（Ａ０１）。ファイルの管理情報は、ディレクトリサーバに格納されているため、ネットワークストレージＮ０１では、そのファイルのファイル管理情報を格納しているディレクトリサーバＤ０１を選択して、その要求を転送する（Ａ０２）。
【００４９】
ディレクトリサーバＤ０１は、受信した要求を処理して、クライアントＫ００に応答を返す（Ａ０４）。
【００５０】
このタイプの要求は、ファイル管理情報のみのアクセスであるため、ディレクトリサーバだけで処理することができる。
（ＩＩ）ネットワークストレージ仮想化方法の処理の詳細
次に、図３ないし図５を用いて各プロトコル毎に本発明のネットワークストレージ仮想化方法の処理の詳細について説明する。
（ａ）ＲＥＡＤ／ＷＲＩＴＥプロトコル
ＮＦＳのＲＥＡＤ／ＷＲＩＴＥ要求は、ファイルに対して読み書きをおこなうプロトコルである。また、ファイルハンドルｆｉｌｅで指定するファイルについて、ファイルに対して読み書きをおこなって、ファイルの属性を返すインタフェースを持つ。
【００５１】
なお、ファイルハンドルとは、ＮＦＳでファイルに対する情報を取り扱うための識別子である。
【００５２】
先ず、クライアントＫ００がネットワークストレージＮ０１に対して、ファイルハンドルｆｉｌｅに対するＲＥＡＤ／ＷＲＩＴＥ要求を発行する（図２（ａ）Ａ０１）。
【００５３】
ネットワークストレージＮ０１は、クライアントＫ００からのＲＥＡＤ／ＷＲＩＴＥ要求を受信する（Ｓ３０１）。ＮＦＳではファイルハンドルは最大６４バイトの可変長の値である。
【００５４】
ディレクトリサーバは、このシステムでは二台あるので、このファイルハンドルを基にディレクトリサーバＤ０１、Ｄ０２のどちらに処理を依頼するかを決定する必要がある。この決定の方法には、例えば、ラウンドロビンでディレクトリサーバを交互に切り替える方法や、ファイルハンドルの２の剰余でディレクトリサーバを決定する方法がある。以降では、剰余によりディレクトリサーバを決定するものとして説明する。剰余が０（ファイルハンドルの最下位ビットが０）の場合ディレクトリサーバＤ０１を選択し、剰余が１（ファイルハンドルの最下位ビットが１）の場合ディレクトリサーバＤ０２を選択する。ここでは仮にディレクトリサーバＤ０１を選択したとする（Ｓ３０２）。
【００５５】
剰余によってディレクトリサーバを選択することにより、例えば、ファイル属性を変更する場合には、特定のファイルハンドルを処理するディレクトリサーバを一意に指定できるため、二つのディレクトリサーバで同一のファイルハンドルについてファイル属性を変更し、データの整合性が取れなくなる事態を回避することができる。
【００５６】
もちろん、このようなディレクトリサーバの選択にファイルハンドルの剰余を用いる方法のほかに、ファイルハンドルとディレクトリサーバを一対一に結びつける任意の手段を用いることができる。
【００５７】
次に、ネットワークストレージＮ０１がディレクトリサーバＤ０１に対して受信したＲＥＡＤ／ＷＲＩＴＥ要求を転送する（Ｓ３０３、図２（ａ）Ａ０２）。ここで、クライアントＫ００のＩＰアドレス、ネットワークストレージＮ０１のＩＰアドレス、ＴＣＰやＵＤＰの送受信のポート番号、ＲＰＣのトランザクションＩＤ（ＸＩＤ）、ＲＰＣのプログラム番号、ＲＰＣのバージョン番号、ＲＰＣのプロシージャ番号、ＲＰＣの認証情報と検証情報など、応答メッセージを作成するのに必要な情報の全てを転送する。
【００５８】
転送した要求を受信したディレクトリサーバＤ０１では、ファイルハンドルｆｉｌｅを検索し（Ｓ３０４）、実際に存在するファイルハンドルであるか否かを確認する。ｆｉｌｅが見つかった場合には、Ｓ３１１に進み、見つからなかった場合には、Ｓ３２１に進む。
【００５９】
ｆｉｌｅが見つかった場合には、先ず、ｆｉｌｅに対応したファイルの本体データを保持するネットワークストレージを検索する（Ｓ３１１）。ここではネットワークストレージＮ０３がファイルの本体データを保持しているとする。このネットワークストレージＮ０３にＲＥＡＤ／ＷＲＩＴＥ要求を転送する（Ｓ３１２、図２（ａ）Ａ０３）。
【００６０】
ここでも先ほどと同様にクライアントＫ００やネットワークストレージＮ０１のＩＰアドレスなどの情報も同時に転送する。
【００６１】
この要求を受けたネットワークストレージＮ０３では、ｆｉｌｅに対応したファイルの本体データをＲＥＡＤ／ＷＲＩＴＥする（Ｓ３１３）。
【００６２】
ファイルをＲＥＡＤ／ＷＲＩＴＥするとアクセス時刻などのファイルの属性を更新する必要がある。そこで、ディレクトリサーバＤ０１にｆｉｌｅのファイル属性の更新と、必要なファイル属性情報の読み出しを依頼する（Ｓ３１４、図２（ａ）Ａ０５）。そして、応答メッセージを組み立てる（Ｓ３１５）。ここで、要求を転送した際に一緒に転送したクライアントＫ００やネットワークストレージＮ０１のＩＰアドレスなどの情報を用いて、クライアントＫ００がネットワークストレージＮ０１からの応答だと認識するように、ネットワークストレージＮ０３が応答メッセージを組み立てる。最後に、組み立てた応答メッセージをクライアントＫ００に送信する（Ｓ３１６、図２（ａ）Ａ０４）。
【００６３】
ｆｉｌｅが見つからなかった場合には、ｆｉｌｅのファイル属性を読み出し（Ｓ３２１）、エラーメッセージを組み立てる（Ｓ３２２）。ここでｆｉｌｅが見つかった場合と同様に、要求を転送した際に一緒に転送したクライアントＫ００やネットワークストレージＮ０１のＩＰアドレスなどの情報を用いて、クライアントＫ００がネットワークストレージＮ０１からのエラーメッセージだと認識するように、ディレクトリサーバＤ０１がエラーメッセージを組み立てる。最後に、組み立てたエラーメッセージをクライアントＫ００に送信する（Ｓ３２３、図２（ａ）Ａ０４）。
【００６４】
このＲＥＡＤ／ＷＲＩＴＥ要求の処理では、Ｓ３０２で要求を転送するディレクトリサーバを選択して要求を転送していることにより、ディレクトリサーバの負荷分散をおこなうことができる。さらに、Ｓ３０３で要求を転送する際にクライアントＫ００やネットワークストレージＮ０１のＩＰアドレスなどの情報も転送して、Ｓ３１５やＳ３２２であたかもネットワークストレージＮ０１がメッセージを組み立てたかのようにクライアントＫ００に応答するため、クライアントＫ００ではどのネットワークストレージで処理がおこなわれたのかを意識せずともよい。
【００６５】
また、ファイルハンドルごとにファイル属性を処理するディレクトリサーバが一意に決まるため、ファイル属性更新時に、二つのディレクトリサーバでのデータ整合性を確保することができる。
【００６６】
さらに、複数のネットワークストレージにＲＥＡＤ／ＷＲＩＴＥ要求を転送することにより、ネットワークストレージの負荷分散をおこなうことができる。
（ｂ）ＣＲＥＡＴＥプロトコル
ＮＦＳのＣＲＥＡＴＥ要求は、指定されたディレクトリにファイルを生成するプロトコルである。このＣＲＥＡＴＥ要求は、ファイルハンドルｄｉｒで指定するディレクトリ上にファイル名ｎａｍｅのファイルを新規作成し、作成したファイルのファイルハンドルｏｂｊ＿ｆｈとファイルとディレクトリの属性を返すインターフェースを持つ。
【００６７】
先ず、クライアントＫ００がネットワークストレージＮ０１に対して、ファイルハンドルｄｉｒ上にファイル名ｎａｍｅのファイルを新規作成するＣＲＥＡＴＥ要求を発行する（図２（ａ）Ａ０１）。
【００６８】
ネットワークストレージＮ０１は、このクライアントＫ００からのＣＲＥＡＴＥ要求を受信する（Ｓ４０１）。ＮＦＳでは、既に述べたようにファイルハンドルは最大６４バイトの可変長の値である。
【００６９】
ネットワークストレージＮ０１では、このファイルハンドルを基にディレクトリサーバＤ０１、Ｄ０２のどちらに処理を依頼するかを決定する（Ｓ４０２）。
【００７０】
ここでもＲＥＡＤ／ＷＲＩＴＥの場合と同様に、ファイルハンドルの剰余で処理を依頼するディレクトリサーバを決定する。剰余によってディレクトリサーバを選択することにより、二つのディレクトリサーバが同一ディレクトリ上に同一ファイル名を同時に作成し、データ整合性が取れなくなる事態を回避できる。ここでは仮にディレクトリサーバＤ０１を選択したとする。
【００７１】
ネットワークストレージＮ０１が、選択したディレクトリサーバＤ０１に受信したＣＲＥＡＴＥ要求を転送する（Ｓ４０３、図２（ａ）Ａ０２）。ここで、クライアントＫ００のＩＰアドレス、ネットワークストレージＮ０１のＩＰアドレス、ＴＣＰやＵＤＰの送受信のポート番号、ＲＰＣのトランザクションＩＤ（ＸＩＤ）、ＲＰＣのプログラム番号、ＲＰＣのバージョン番号、ＲＰＣのプロシージャ番号、ＲＰＣの認証情報と検証情報などの応答メッセージを作成するのに必要な情報の全てを転送する。
【００７２】
転送した要求を受信したディレクトリサーバＤ０１では、ファイルハンドルｄｉｒを検索し（Ｓ４０４）、実際に存在するディレクトリのファイルハンドルであるかどうかを確認する。ｄｉｒが見つかった場合には、Ｓ４１１に進み、見つからなかった場合には、Ｓ４２１に進む。
【００７３】
ｄｉｒが見つかった場合には、ファイル名ｎａｍｅの新規ファイルを作成するネットワークストレージを選択する（Ｓ４１１）。ネットワークストレージの選択の際には、以下の手法により最も負荷の低いネットワークストレージを選択すればよい。先ず、各ネットワークストレージのディスク使用率Ｕ％を求める。次に、各ネットワークストレージのネットワーク帯域使用率Ｂ％を求める。そして、別途定めるディスク容量とネットワーク帯域のどちらを優先して評価するかを定めるパラメータα、βを用いて、評価式α＊Ｕ＋β＊Ｂにより各ネットワークストレージを評価する。ただし、ここでα、βは正数とする。評価式の値が大きいほどネットワークストレージのディスクまたはネットワークの負荷が大きいことを意味する。したがって、この評価式の値の小さいネットワークストレージを選択するようにするのが合理的である。
【００７４】
ここでは、仮にネットワークストレージＮ０３を選択したとする。このときネットワークストレージＮ０３にＣＲＥＡＴＥ要求を転送する（Ｓ４１２、図２（ａ）Ａ０３）。ここでも先程と同様にクライアントＫ００やネットワークストレージＮ０１のＩＰアドレスなどの情報も同時に転送する。
【００７５】
ネットワークストレージＮ０３では、ファイル名ｎａｍｅのファイル本体データのエントリとファイルハンドルｏｂｊ＿ｆｈを作成する（Ｓ４１３）。そして、ＲＥＡＤ／ＷＲＩＴＥのところで述べた手法で、ｏｂｊ＿ｆｈの剰余からディレクトリサーバを選択する。ここでは、ディレクトリサーバＤ０１が選択されたものとする。ネットワークストレージＮ０３は、そのディレクトリサーバＤ０１に対して、ｏｂｊ＿ｆｈのファイル属性の作成と、必要なファイル属性情報の読み出しを依頼する（Ｓ４１４、図２（ａ）Ａ０５）。
【００７６】
次に、ネットワークストレージＮ０３は、ディレクトリサーバＤ０１にｄｉｒに対応したディレクトリのファイル属性の更新と必要なファイル属性情報の読み出しを依頼する（Ｓ４１５、図２（ａ）Ａ０５）。そして、応答メッセージを組み立てる（Ｓ４１６）。ここで、要求を転送した際に一緒に転送したクライアントＫ００やネットワークストレージＮ０１のＩＰアドレスなどの情報を用いて、クライアントＫ００がネットワークストレージＮ０１からの応答だと認識するように、ネットワークストレージＮ０３が応答メッセージを組み立て、最後に、Ｓ４１７で組み立てた応答メッセージをクライアントＫ００に送信する（Ｓ４１７、図２（ａ）Ａ０４）。
【００７７】
ｄｉｒが見つからなかった場合には、ｄｉｒのディレクトリのファイル属性を読み出し（Ｓ４２１）、ディレクトリサーバＤ０１がエラーメッセージを組み立てる（Ｓ４２２）。ここで、要求を転送した際に一緒に転送したクライアントＫ００やネットワークストレージＮ０１のＩＰアドレスなどの情報を用いて、クライアントＫ００がネットワークストレージＮ０１からの応答だと認識するように、ディレクトリサーバＤ０１が応答メッセージを組み立てる。最後に、組み立てたエラーメッセージをクライアントＫ００に送信する（Ｓ４２３、図２（ａ）Ａ０４）。
このＣＲＥＴＥ要求の処理では、このＲＥＡＤ／ＷＲＩＴＥ要求の処理の場合と同様に、Ｓ４０２で要求を転送するディレクトリサーバを判定することにより、ディレクトリサーバの負荷分散をおこなうことができる。
【００７８】
さらに、Ｓ４０３で要求を転送する際にクライアントＫ００やネットワークストレージＮ０１のＩＰアドレスなどの情報も転送して、Ｓ４１６やＳ４２２であたかもネットワークストレージＮ０１がメッセージを組み立てたかのようにクライアントＫ００に応答するため、クライアントＫ００ではどのネットワークストレージで処理がおこなわれたのかを意識せずともよい。
【００７９】
また、ディレクトリのファイルハンドルごとにファイルの作成やファイル属性を処理するディレクトリサーバが一意に定まるため、ファイル作成やファイル属性更新時に、二つのディレクトリサーバでのデータ整合性を確保することができる。さらに、負荷のかかっていないネットワークストレージを選択してＣＲＥＡＴＥ要求を転送することにより、理想的なネットワークストレージの負荷分散をおこなうことができる。
（ｃ）ＬＯＯＫＵＰプロトコル
ＮＦＳのＬＯＯＫＵＰ要求は、指定したファイル名に対して、そのファイルに関連した情報を返すプロトコルである。すなわち、ファイルハンドルｄｉｒで指定するディレクトリ上に存在するファイル名ｆｎａｍｅのファイルについて、ファイルのファイルハンドルｏｂｊ＿ｆｈ、ファイルの属性ｏｂｊ＿ａｔｔｒ、ディレクトリの属性ｄｉｒ＿ａｔｔｒを返すインターフェースを持つ。
【００８０】
ＬＯＯＫＵＰ要求では、クライアントＫ００がネットワークストレージＮ０１に対して、ファイルハンドルｄｉｒ上にあるファイル名ｆｎａｍｅのファイルについてＬＯＯＫＵＰ要求を発行する（図２（ｂ）Ａ０１）。
【００８１】
ネットワークストレージＮ０１は、このクライアントＫ００からのＬＯＯＫＵＰ要求を受信する（Ｓ５０１、図２（ｂ）Ａ０１）。
【００８２】
このファイルハンドルを基にディレクトリサーバＤ０１、Ｄ０２のどちらに処理を依頼するかを決定する（Ｓ５０２）。この決定の方法は、ＲＥＡＤ／ＷＲＩＴＥのところで述べたのと同様の手法を用いることができる。ここでは、仮にディレクトリサーバＤ０１を選択したとする。
【００８３】
そして、ネットワークストレージＮ０１が、そのディレクトリサーバＤ０１に受信したＬＯＯＫＵＰ要求を転送する（Ｓ５０３、図２（ｂ）Ａ０２）。ここで、クライアントＫ００のＩＰアドレス、ネットワークストレージＮ０１のＩＰアドレス、ＴＣＰやＵＤＰの送受信のポート番号、ＲＰＣのトランザクションＩＤ（ＸＩＤ）、ＲＰＣのプログラム番号、ＲＰＣのバージョン番号、ＲＰＣのプロシージャ番号、ＲＰＣの認証情報と検証情報など、応答メッセージを作成するのに必要な情報の全てを転送する。
【００８４】
転送した要求を受信したディレクトリサーバＤ０１では、ファイルハンドルｄｉｒのエントリ上でファイル名ｆｎａｍｅのファイルが持つファイルハンドルｏｂｊ＿ｆｈを検索する（Ｓ５０４）。ｏｂｊ＿ｆｈが見つかった場合には、Ｓ５１１に進み、見つからなかった場合には、Ｓ５２１に進む。
【００８５】
ｏｂｊ＿ｆｈが見つかった場合には、ｏｂｊ＿ｆｈのファイル属性を読み出し（Ｓ５１１）、ｄｉｒのディレクトリ属性を読み出す（Ｓ５１２）。そして、ディレクトリサーバＤ０１では、これらの情報を使い応答メッセージを組み立てる（Ｓ５１３）。ここで、要求を転送した際に一緒に転送したクライアントＫ００やネットワークストレージＮ０１のＩＰアドレスなどの情報を用いて、クライアントＫ００がネットワークストレージＮ０１からの応答だと認識するように、ディレクトリサーバＤ０１が応答メッセージを組み立てるようにする。最後に、組み立てた応答メッセージをクライアントＫ００に送信する（Ｓ５１４、図２（ｂ）Ｂ０１）。
【００８６】
ｏｂｊ＿ｆｈが見つからなかった場合には、ｄｉｒのディレクトリ属性を読み出し（Ｓ５２１）、エラーメッセージを組み立てる（Ｓ５２２）。ここでｏｂｊ＿ｆｈが見つかった場合と同様に、要求を転送した際に一緒に転送したクライアントＫ００やネットワークストレージＮ０１のＩＰアドレスなどの情報を用いて、クライアントＫ００がネットワークストレージＮ０１からのエラーメッセージだと認識するように、ディレクトリサーバＤ０１がエラーメッセージを組み立てるようにする。最後に、組み立てた応答メッセージをクライアントＫ００に送信する（Ｓ５２３、図２（ｂ）Ｂ０１）。
【００８７】
この要求処理では、処理をおこなうのがディレクトリサーバであり、ネットワークストレージを介さないことに注意する。
【００８８】
ＬＯＯＫＵＰ要求の処理では、Ｓ５０２で要求を転送するサーバを判定することにより、ディレクトリサーバの負荷分散をおこなうことができる。さらに、Ｓ５０３で要求を転送する際にクライアントＫ００やネットワークストレージＮ０１のＩＰアドレスなどの情報も転送して、Ｓ５１３やＳ５２２であたかもネットワークストレージＮ０１がメッセージを組み立てたかのようにクライアントＫ００が認識できるようにしたため、クライアントＫ００は、どのディレクトリサーバが応答を返してくるのかを意識せずともよい。
（ＩＩＩ）ディレクトリサーバの二重化およびファイル本体とファイル管理情報の格納形態について
これまでの説明では、ディレクトリサーバが二台あり、いずれのディレクトリサーバを使うのかを、ファイルハンドラに従って選択するようにした。本発明のネットワークストレージ仮想化方法では、ディレクトリサーバが一台でも構築することができる。しかしながら、ディレクトリサーバを複数台にすることにより、ファイル管理情報に関する処理について負荷を分散することができる。
【００８９】
また、各々のディレクトリサーバに別々のファイル管理情報を格納しておき、それをファイルハンドラによって、選択する方法をとると、効率的にディレクトリサーバにファイル管理情報を格納することができる。
【００９０】
しかしながら、信頼性を向上するためには、ファイル管理情報を複数のディレクトリサーバに多重化して格納しておくことが望ましい。ファイル管理情報をディレクトリサーバで保持するようにしたときには、あるディレクトリサーバのファイル管理情報が更新されたときには、適切なタイミングで他のディレクトリサーバに連絡をとり、同期をとって更新してファイル管理情報の整合性を維持しておく必要がある。
【００９１】
ここで、ファイル本体のデータについても信頼性を向上させるために、一つのファイルについて多重化して、複数のネットワークストレージに冗長保持することが望ましい。この場合に、あるファイルハンドラに対するファイル管理情報を格納するディレクトリサーバを複数用意して、それぞれのディレクトリサーバでファイル本体を格納している冗長保持している複数のネットワークストレージを管理させるようにすれば、ファイル本体のデータを多重化した場合のファイル管理についても容易に実現することができる。
【００９２】
さらに、本実施形態では、ファイルハンドルとそのファイルハンドルに対応した管理情報をペアで管理するようにした。しかしながら、本発明のネットワークストレージは、ファイルハンドルとファイルハンドルに対応した管理情報とファイルのオフセット情報を一組で管理することにより、一つのファイルを複数のネットワークストレージに分散して格納する方法にも容易に適用することができる。この方法によって、一つのファイルを複数のネットワークストレージに分割して保存することにより、このシステムのデータ格納方法として、  ＺｅｂｒａファイルシステムのようなファイルのストライプやＲＡＩＤ５のようなデータ冗長化手段も採用することができる。
【００９３】
上記のように、複数のディレクトリサーバおよびネットワークストレージを用意して、ファイル管理情報とファイル本体データを冗長化して格納しておけば、あるディレクトリサーバやネットワークストレージに障害が発生したときでも、他方のディレクトリサーバやネットワークストレージを用いることで、容易にフェールオーバを実現することができる。
（ＩＶ）通信形態について
本実施形態では、クライアントはＮＦＳプロトコルによりネットワークストレージの一台に要求を送信して、最終的な応答が要求を受信したネットワークストレージとは異なるネットワークストレージから返る場合であっても、最初に要求を受信したネットワークストレージからの応答のように応答メッセージを作成して、クライアントに返すようにした。すなわち、クライアントは、ＮＦＳのような標準プロトコルを用いて、仮想化されたネットワークストレージにアクセスすることができ、特別のプロトコルやソフトウェアを要しない。
【００９４】
もちろん、クライアントとの通信にＮＦＳ以外のプロトコルを用いても、本発明のネットワークストレージ仮想化方法は、容易に実現することができる。
【００９５】
また、本発明のネットワークストレージ仮想化方法では、ネットワークストレージとディレクトリサーバ間の通信は、クライアント側に見せる必要がないため、クライアントを接続したＬＡＮとは、別のＬＡＮを構築して、そのＬＡＮを用いて通信することにより、クライアントを接続したＬＡＮの通信帯域を節約することができる。
（Ｖ）システムの拡張性について
本発明のネットワークストレージ仮想化方法では、ネットワークストレージがファイルの本体データの保存をおこない、ディレクトリサーバがファイルの管理情報を保存する。このためシステム全体のディスク容量を増設するには、新しいネットワークストレージをネットワークに接続するだけで良く、ファイル管理情報の配置を変更する必要がないので、変更のための手間がかからず、ネットワークストレージの増設の際の管理コストが小さくすることができる。また、減設の場合も同様にファイル管理情報の配置を変更する必要がないので、ネットワークストレージの減設の際の管理コストを小さくすることかできる。
【００９６】
〔実施形態２〕
次に、図６を用いて本発明に係る第二の実施形態について説明する。
図６は、本発明に係る第二の実施形態の処理の流れを示す模式図である。
【００９７】
本実施形態は、第一の実施形態の機能を拡張して、クライアントからネットワークストレージにファイルアクセスの要求処理を出すときに、同じファイルを二回目にアクセスするときに、処理性能を上げようとするものである。
【００９８】
図６（ａ）は、クライアントＫ００からネットワークストレージＮ０１（第一のネットワークストレージ）に一回目の処理の依頼がきたときの流れ図であり、Ａ０１〜Ａ０４までの処理については、第一の実施形態と同様である。
【００９９】
異なるのは、ディレクトリサーバＤ０１は、ファイルの格納されているネットワークストレージＮ０３（第二のネットワークストレージ）に要求を転送（Ａ０３）するのと同時にネットワークストレージＮ０１に、ファイルがネットワークストレージＮ０３に格納されていることを、例えば、ファイル識別子とネットワークストレージ識別子の対という形態で通知することである（Ｇ０１）。
【０１００】
このときに、ネットワークストレージＮ０１とネットワークストレージＮ０３は、並列に動作しているので、システムとして、それほど処理性能が低下することもない。
【０１０１】
ネットワークストレージＮ０１では、そのファイル識別子とネットワークストレージ識別子の対応を、キャッシュファイルとして一時記憶用領域に保存しておく。
【０１０２】
この状態にあるとき、図６（ｂ）に示されるようにクライアントＫ００から同じファイルに対してファイルアクセスの要求がネットワークストレージＮ０１に発せられたとする。
【０１０３】
このときに、ネットワークストレージＮ０１は、先ず、そのファイルに対応しているファイル識別子とネットワークストレージ識別子の対応が一時記憶用領域の中にないかを検索する。そして、見つかったときには、ネットワークストレージＮ０２に直接要求を転送する（Ｈ０２）。そのあと、ネットワークストレージＮ０２で、要求を処理してクライアントに応答する（Ａ０４）ことは、第一の実施形態と同様である。見つからなかったときには、図６（ａ）の場合と同様に、該当するディレクトリサーバＤ０１を選択して、それに要求を転送する（Ａ０２）。
【０１０４】
この実施形態によれば、一時記憶用領域の中に既にアクセスしたファイルの関連情報が記憶されているときには、ディレクトリサーバＤ０１を経由せずに、ネットワークストレージＮ０２に直接要求を転送することができるので、処理性能を大幅に向上させることができる。
【０１０５】
〔実施形態３〕
次に、図７を用いて本発明に係る第三の実施形態について説明する。
図７は、本発明に係る第三の実施形態の処理の流れを示す模式図である。
【０１０６】
第一の実施形態では、ファイル管理情報は、もっぱらディレクトリサーバが管理していた。ディレクトリサーバの数が少なく、かつ、多くのＲＥＡＤ／ＷＲＩＴＥ要求が発生して、一時に大量のファイル管理情報を更新しなければならなくなったときに、ディレクトリサーバに負荷がかかり、システムの性能のボトルネックになるおそれがある。
【０１０７】
本実施形態では、そのような事態を防止できるように、個々のネットワークストレージに対して、ファイル管理もおこなえるように、ディレクトリサーバ機能を持たせたものである。ディレクトリサーバは、第一の実施形態と同様に、ファイル管理情報を全て保持する。そして、各ネットワークストレージに、ファイル管理情報を分割して、コピーする。分割するときの手法としては、ファイルハンドルを用いて、ネットワークストレージと対応付ける評価関数を用いることができる。例えば、ファイルハンドルのバイト表現の剰余を計算する評価関数がある。この評価関数を用いた場合には、Ｎ台のネットワークストレージがあるとすると、各ネットワークストレージに０からＮ−１までの識別子を割り振り、ファイルハンドルのＮの剰余を計算し、剰余の値に対応した識別子を持つネットワークストレージにそのファイルハンドルに対応するファイル管理情報を格納する。
【０１０８】
このように分類したファイル管理情報を対応するネットワークストレージにコピーすることで、ファイル管理情報を重複することなく各ネットワークストレージの記憶装置に分割してコピーすることができる。
【０１０９】
この処理では、先ず、クライアントＫ００からネットワークストレージＮ０１（第一のネットワークストレージ）にＬＡＮ経由で、ＲＥＡＤ／ＷＲＩＴＥ要求のファイルアクセス要求を発する（Ａ０１）。
【０１１０】
本実施形態では、各々のネットワークストレージにディレクトリサーバ機能が付加されているために、ディレクトリサーバとネットワークストレージの両方がファイル管理情報に対する処理をおこなうことができる。
【０１１１】
第一の実施形態では、要求を転送するのは、ディレクトリサーバのみであったが、本実施形態では、要求を転送する候補として、ディレクトリサーバとネットワークストレージの二通りがあることに注意する必要がある。
【０１１２】
図７（ａ）は、ネットワークストレージＮ０２（第二のネットワークストレージが選択されたものとする。ＲＥＡＤ／ＷＲＩＴＥプロトコルのときには、例えば、上記のようにファイルハンドルの剰余を求めることにより、ネットワークストレージＮ０２を選択することができる。
【０１１３】
そして、ネットワークストレージＮ０１は、ネットワークストレージＮ０２に受信した要求を転送する（Ｃ０２）。
【０１１４】
このときに、ネットワークストレージＮ０１は、クライアントと第一のネットワークストレージＮ０１のＩＰアドレス、送受信のポート番号、ＲＥＡＤ／ＷＲＩＴＥ要求のトランザクションＩＤなどの情報も同時に転送する。
【０１１５】
ネットワークストレージＮ０２では、転送された要求に含まれているファイルハンドルからファイル管理情報を検索して、ファイル管理情報の示すファイル本体データを格納しているネットワークストレージＮ０３（第三のネットワークストレージ）に転送する（Ｃ０３）。このときにも、クライアントと第一のネットワークストレージＮ０１のＩＰアドレスなども転送するのは、Ｃ０２のときと同様である。
【０１１６】
ネットワークストレージＮ０３では、転送された要求に含まれるファイルハンドルに対応するファイル本体データに対して要求された処理をおこない、結果をクライアントＫ００に応答する（Ａ０４）。
【０１１７】
応答を返すとき、ネットワークストレージＮ０３は、転送されてきたクライアントと第一のネットワークストレージＮ０１のＩＰアドレス、送受信のポート番号、ＲＥＡＤ／ＷＲＩＴＥ要求のトランザクションＩＤなどの情報を用い、あたかも、ネットワークストレージＮ０１が要求を処理したようなパケットを組み立てる。クライアントＫ００側では、どのネットワークストレージが処理をしたのかを一切意識する必要がないのは、第一の実施形態と同様である。
【０１１８】
そして、最後に、ファイルのアクセス時刻の更新などファイル管理情報が更新されるので、この情報をディレクトリサーバＤ０１とネットワークストレージＮ０２に送信して（Ａ０５）、ディレクトリサーバＤ０１とネットワークストレージＮ０２上のファイル管理情報を書き換える。
【０１１９】
これにより、ネットワークストレージ上のファイル管理情報とディレクトリサーバ上のファイル管理情報とは、整合性が保たれる。
【０１２０】
またこのとき、多数のファイルにＲＥＡＤ／ＷＲＩＴＥ要求が発生する場合や同一のファイルに対して頻繁にＲＥＡＤ／ＷＲＩＴＥ要求が発生する場合には、上記の手法では、毎回ディレクトリサーバが多数のファイル管理情報の更新要求パケットを受信することになるため、ディレクトリサーバに負荷がかかりすぎるおそれがある。
【０１２１】
そのために、ネットワークストレージ上で、ディレクトリサーバに送信すべきファイル管理情報を蓄積しておき、適切な時期に、まとめてディレクトリサーバ上のファイル管理情報を更新するようにすればよい。すなわち、複数のファイル管理情報の更新要求パケットをまとめて、一つの更新要求パケットにすることにより通信量を減らし、しかも、同一ファイルのファイル管理情報を頻繁に更新する場合には、最終結果のみが更新要求パケットとして送られるので、ディレクトリサーバのファイル管理情報の更新処理を減らすことができる。
【０１２２】
図７（ａ）に示した処理では、クライアントＫ００の要求がＲＥＡＤ／ＷＲＩＴＥ要求のように、要求のインタフェースにファイルハンドルを含んでいて、それにより、ファイル管理情報を格納している第二のネットワークストレージＮ０２を選択した。
【０１２３】
次に、ＣＲＥＡＴＥ要求のように、クライアントＫ００の要求がインタフェースにファイルハンドルを含んでいない処理が発せられたものとする。
【０１２４】
この処理では、図７（ｂ）に示されるように、先ず、クライアントＫ００からネットワークストレージＮ０１（第一のネットワークストレージ）にＬＡＮ経由で、ＣＲＥＡＴＥ要求を発する（Ａ０１）。
【０１２５】
このときに、ネットワークストレージＮ０１は、ネットワークストレージではなく、必ずディレクトリサーバを選択することになる。そして、ディレクトリサーバＤ０１に要求を転送する（Ｅ０２）。また、ネットワークストレージＮ０１が、クライアントと第一のネットワークストレージＮ０１のＩＰアドレス、送受信のポート番号、ＲＥＡＤ／ＷＲＩＴＥ要求のトランザクションＩＤなどの情報も同時に転送するのは、図７（ａ）のときと同様である。
【０１２６】
要求を受信したディレクトリサーバＤ０１は、新規ファイルハンドルと新規ファイル管理情報を作成し、例えば、ファイルハンドルの剰余から新規ファイル管理情報をコピーするネットワークストレージＮ０３（第三のネットワークストレージ）を求めて、それに対して新規ファイルの作成要求とファイル管理情報の格納要求を送信する（Ｅ０３）。なお、新規ファイルの作成要求はネットワークストレージＮ０３以外の任意のネットワークストレージに対して送信してよい。
【０１２７】
ネットワークストレージＮ０３は、要求に応じて、新規ファイルを作成して、ファイル管理情報を格納した後に、クライアントＫ００に要求の応答を返す（Ａ０４）。また、応答を返すとき、ネットワークストレージＮ０３は、転送されてきたクライアントと第一のネットワークストレージＮ０１のＩＰアドレス、送受信のポート番号、ＲＥＡＤ／ＷＲＩＴＥ要求のトランザクションＩＤなどの情報を用い、あたかも、ネットワークストレージＮ０１が要求を処理したようなパケットを組み立てるのは、図７（ａ）の場合と同様である。
【０１２８】
そして、ネットワークストレージＮ０３上のファイル管理情報を更新し、この情報をディレクトリサーバＤ０１上に送信して（Ａ０５）、ディレクトリサーバＤ０１上のファイル管理情報を書き換えて、ネットワークストレージ上のファイル管理情報とディレクトリサーバ上のファイル管理情報との整合性が保つようにする。
【０１２９】
なお、図７に示したようなシステム形態で、新規にネットワークストレージを増設する際には、ディレクトリサーバのファイル管理情報のデータ更新が終了した後に、新規ネットワークストレージを含めてネットワークストレージに識別子を割り当て、ファイル管理情報の分割とネットワークストレージへのコピーを再びおこなうようにする。
【０１３０】
本実施形態では、上記のように、ネットワークストレージにディレクトリサーバ機能を持たせることにより、ファイル管理情報に関する処理の負荷を分散させ、処理の並列性を増すことにより、より高いスループットを達成することができる。また、ファイル管理情報がネットワークストレージにディレクトリサーバとに、二重化して保持されているために、システムの信頼性が高まり、いずれかのネットワークストレージやディレクトリサーバに障害がおこったときであっても、ファイル管理情報を喪失するのを防ぐことができ、継続してシステム運用をおこなえるという特徴がある。
【０１３１】
〔実施形態４〕
次に、図８を用いて本発明に係る第四の実施形態について説明する。
図８は、本発明に係る第四の実施形態の処理の流れを示す模式図である。
【０１３２】
第一の実施形態は、第一のネットワークストレージがクライアントから要求を受信して、その要求をディレクトリサーバに転送した。しかしながら、ＷＲＩＴＥ要求などで書き換える容量が大きいときには、そのパケットも大きくなり、ディレクトリサーバに転送すると、ディレクトリサーバに負荷がかかり、ネットワーク帯域も圧迫する恐れがある。
【０１３３】
本実施形態では、第一のネットワークストレージは、ディレクトリサーバに対して、ファイルアクセスの要求を転送すべきネットワークストレージを問い合わせて、その返答にしたがって、その要求を転送するものである。通常、問い合わせパケットは、ＷＲＩＴＥ要求のパケットに比べて、小さいので、ディレクトリサーバに負担がかからず、ネットワーク上に流れるパケット量を少なくすることができる。
【０１３４】
この処理では、先ず、クライアントＫ００からネットワークストレージＮ０１（第一のネットワークストレージ）にＬＡＮ経由でファイルアクセス要求を発する（Ａ０１）。
【０１３５】
ネットワークストレージＮ０１は、そのファイルのファイル管理情報を格納されているディレクトリサーバＤ０１を選択して、それに対してファイル本体の格納されているネットワークストレージの問い合わせ要求をおこなう（Ｆ０１）。
【０１３６】
ディレクトリサーバＤ０１は、問い合わせ要求の中に含まれるファイルハンドルからそのファイルの格納されているネットワークストレージを検索して、該当するネットワークストレージは、ネットワークストレージＮ０３（第二のネットワークストレージ）であることを返答する（Ｆ０２）。
【０１３７】
ネットワークストレージＮ０１は、これを受信して、ネットワークストレージＮ０３に要求を転送する（Ｆ０３）。
【０１３８】
ネットワークストレージＮ０３では、要求を処理して応答をクライアントＫ００に返し（Ａ０４）、ディレクトリサーバのファイル管理情報を更新する（Ａ０５）ことは、第一の実施形態と同様である。
【０１３９】
問い合わせの結果は、ファイル識別子とネットワークストレージの識別子の対応として、第一のネットワークストレージＮ０１のキャッシュファイルなどの一時記憶領域に格納しておく。そして、おなじファイルに対してアクセス要求があったときには、一時記憶領域の情報を検索して、見つかったときには、ただちに、そのファイルの格納されているネットワークストレージに要求を転送する。この流れは、図６（ｂ）で示したものと同様である。
【０１４０】
【発明の効果】
本発明によれば、ＮＦＳなどの標準プロトコルを用いてアクセス可能なネットワークストレージ仮想化方法を提供することができる。
【０１４１】
また、ネットワークストレージの増設や減設の際の管理コストが小さいネットワークストレージ仮想化方法を提供することができる。
【０１４２】
また、ファイル管理情報を冗長化することで障害発生時にも継続して運用可能なネットワークストレージ仮想化方法を提供することである。
【０１４３】
さらに、クライアントからの要求を受信するネットワークストレージと、要求の処理をおこないクライアントに応答を返すネットワークストレージとが異なる場合でも、クライアントでは、そのことを意識せずとも、ネットワークストレージへの要求をおこなうことのできるネットワークストレージ仮想化システムを提供することができる。
【図面の簡単な説明】
【図１】本発明のネットワークストレージシステムのシステム構成図である。
【図２】本発明に係る第一の実施形態の処理の流れを示す模式図である。
【図３】クライアントからＲＥＡＤ／ＷＲＩＴＥ要求がされたときの処理を示すＰＡＤ（Ｐｒｏｂｌｅｍ  Ａｎａｌｙｓｉｓ  Ｄｉａｇｒａｍ）図である。
【図４】クライアントからＣＲＥＡＴＥ要求がされたときの処理を示すＰＡＤ図である。
【図５】クライアントからＬＯＯＫＵＰ要求がされたときの処理を示すＰＡＤ図である。
【図６】本発明に係る第二の実施形態の処理の流れを示す模式図である。
【図７】本発明に係る第三の実施形態の処理の流れを示す模式図である。
【図８】本発明に係る第四の実施形態の処理の流れを示す模式図である。
【符号の説明】
Ｋ００…クライアント
１００…ＬＡＮ
Ｎ０１〜Ｎ０４…ネットワークストレージ
Ｄ０１，Ｄ０２…ディレクトリサーバ
【図１】
2004240803.tif 000003
【図２】
2004240803.tif 000004
【図３】
2004240803.tif 000005
【図４】
2004240803.tif 000006
【図５】
2004240803.tif 000007
【図６】
2004240803.tif 000008
【図７】
2004240803.tif 000009
【図８】
2004240803.tif 000010