(57)【特許請求の範囲】
【請求項１】
一つ以上のクライアント計算機と、前記クライアント計算機とネットワークを介して接続されるストレージシステムと、を備える計算機システムにおいて、
前記ストレージシステムは、第１サーバ及び複数の第２サーバを含む複数のサーバと、前記複数のサーバと接続される一つ以上のディスクサブシステムと、を備え、
前記ディスクサブシステムは、前記クライアント計算機によって書き込まれたデータを格納する一つ以上の論理デバイスを備え、
前記各サーバは、前記ネットワークに接続されるインターフェースと、前記インターフェースに接続されるプロセッサと、前記プロセッサに接続されるメモリと、を備え、
前記第１サーバは、前記論理デバイスに格納されたデータを一つ以上のファイルシステムとして管理し、
前記各第２サーバは、前記第１サーバが管理する一つのファイルシステムの一部又は全部に相当する第１ディレクトリツリーの複製である第２ディレクトリツリーを管理し、
前記プロセッサは、
前記クライアント計算機から前記インターフェースを介して前記第１ディレクトリツリー及び前記第２ディレクトリツリーに属するファイルを対象とするアクセス要求を受信すると、前記受信したアクセス要求が、新たな前記第２ディレクトリツリーが作成されてから所定の時間内に受信したものであるか否かを判定し、
前記受信したアクセス要求が、新たな前記第２ディレクトリツリーが作成されてから所定の時間内に受信したものである場合、前記アクセス要求を発行したクライアント計算機が更新要求を発行するか否かを判定し、
前記クライアント計算機が更新要求を発行すると判定された場合、前記第１ディレクトリツリーを選択し、
前記クライアント計算機が更新要求を発行しないと判定された場合、前記複数の第２サーバによって管理される複数の前記第２ディレクトリツリーの一つを選択し、
前記選択されたディレクトリツリーが前記アクセス要求を受信したサーバによって管理されている場合、前記選択されたディレクトリツリーを対象として前記要求されたアクセスを実行し、
前記選択されたディレクトリツリーが前記アクセス要求を受信したサーバによって管理されていない場合、前記選択されたディレクトリツリーを管理するサーバを識別する情報を、前記アクセス要求を発行した前記クライアント計算機に前記インターフェースを介して送信し、
前記アクセス要求を発行した前記クライアント計算機は、前記選択されたディレクトリツリーを管理するサーバを識別する情報を受信すると、前記選択されたディレクトリツリーを管理するサーバに対して前記アクセス要求を送信することを特徴とする計算機システム。
【請求項２】
前記各サーバは、前記各クライアント計算機によって設定されたパラメータを保持し、
前記プロセッサは、
前記受信したアクセス要求を発行したクライアント計算機によって設定された前記パラメータを参照し、
前記参照されたパラメータが、そのパラメータを設定したクライアント計算機が更新要求を発行することを示す値である場合、前記クライアント計算機が更新要求を発行すると判定し、
前記参照されたパラメータが、そのパラメータを設定したクライアント計算機が更新要求を発行しないことを示す値である場合、前記クライアント計算機が更新要求を発行しないと判定することを特徴とする請求項１に記載の計算機システム。
【請求項３】
前記各サーバは、前記クライアント計算機のうち、更新要求を発行するクライアント計算機又は更新要求を発行しないクライアント計算機のいずれか一方を識別する情報を保持し、
前記プロセッサは、
前記保持された情報を参照して、前記アクセス要求を発行したクライアント計算機が更新要求を発行するか否かを判定することを特徴とする請求項１に記載の計算機システム。
【請求項４】
一つ以上のクライアント計算機とネットワークを介して接続されるストレージシステムにおいて、
前記ストレージシステムは、第１サーバ及び複数の第２サーバを含む複数のサーバと、前記複数のサーバと接続される一つ以上のディスクサブシステムと、を備え、
前記ディスクサブシステムは、前記クライアント計算機によって書き込まれたデータを格納する一つ以上の論理デバイスを備え、
前記各サーバは、前記ネットワークに接続されるインターフェースと、前記インターフェースに接続されるプロセッサと、前記プロセッサに接続されるメモリと、を備え、
前記第１サーバは、前記論理デバイスに格納されたデータを一つ以上のファイルシステムとして管理し、
前記各第２サーバは、前記第１サーバが管理する一つのファイルシステムの一部又は全部に相当する第１ディレクトリツリーの複製である第２ディレクトリツリーを管理し、
前記プロセッサは、
前記クライアント計算機から前記インターフェースを介して前記第１ディレクトリツリー及び前記第２ディレクトリツリーに属するファイルを対象とするアクセス要求を受信すると、前記受信したアクセス要求が、新たな前記第２ディレクトリツリーが作成されてから所定の時間内に受信したものであるか否かを判定し、
前記受信したアクセス要求が、新たな前記第２ディレクトリツリーが作成されてから所定の時間内に受信したものである場合、前記アクセス要求を発行したクライアント計算機が更新要求を発行するか否かを判定し、
前記クライアント計算機が更新要求を発行すると判定された場合、前記第１ディレクトリツリーを選択し、
前記クライアント計算機が更新要求を発行しないと判定された場合、前記複数の第２サーバによって管理される複数の前記第２ディレクトリツリーの一つを選択し、
前記選択されたディレクトリツリーが前記アクセス要求を受信したサーバによって管理されている場合、前記選択されたディレクトリツリーを対象として前記要求されたアクセスを実行し、
前記選択されたディレクトリツリーが前記アクセス要求を受信したサーバによって管理されていない場合、前記選択されたディレクトリツリーを管理するサーバを識別する情報を、前記アクセス要求を発行したクライアント計算機に前記インターフェースを介して送信することを特徴とするストレージシステム。
【請求項５】
前記各サーバは、前記各クライアント計算機によって設定されたパラメータを保持し、
前記プロセッサは、
前記受信したアクセス要求を発行したクライアント計算機によって設定された前記パラメータを参照し、
前記参照されたパラメータが、そのパラメータを設定したクライアント計算機が更新要求を発行することを示す値である場合、前記クライアント計算機が更新要求を発行すると判定し、
前記参照されたパラメータが、そのパラメータを設定したクライアント計算機が更新要求を発行しないことを示す値である場合、前記クライアント計算機が更新要求を発行しないと判定することを特徴とする請求項４に記載のストレージシステム。
【請求項６】
前記各サーバは、前記クライアント計算機のうち、更新要求を発行するクライアント計算機又は更新要求を発行しないクライアント計算機のいずれか一方を識別する情報を保持し、
前記プロセッサは、
前記保持された情報を参照して、前記アクセス要求を発行したクライアント計算機が更新要求を発行するか否かを判定することを特徴とする請求項４に記載のストレージシステム。
【請求項７】
一つ以上のクライアント計算機と、前記クライアント計算機とネットワークを介して接続されるストレージシステムと、を備える計算機システムの制御方法において、
前記ストレージシステムは、第１サーバ及び複数の第２サーバを含む複数のサーバと、前記複数のサーバと接続される一つ以上のディスクサブシステムと、を備え、
前記ディスクサブシステムは、前記クライアント計算機によって書き込まれたデータを格納する一つ以上の論理デバイスを備え、
前記各サーバは、前記ネットワークに接続されるインターフェースと、前記インターフェースに接続されるプロセッサと、前記プロセッサに接続されるメモリと、を備え、
前記第１サーバは、前記論理デバイスに格納されたデータを一つ以上のファイルシステムとして管理し、
前記各第２サーバは、前記第１サーバが管理する一つのファイルシステムの一部又は全部に相当する第１ディレクトリツリーの複製である第２ディレクトリツリーを管理し、
前記プロセッサは、
前記クライアント計算機から前記インターフェースを介して前記第１ディレクトリツリー及び前記第２ディレクトリツリーに属するファイルを対象とするアクセス要求を受信すると、前記受信したアクセス要求が、新たな前記第２ディレクトリツリーが作成されてから所定の時間内に受信したものであるか否かを判定し、
前記受信したアクセス要求が、新たな前記第２ディレクトリツリーが作成されてから所定の時間内に受信したものである場合、前記アクセス要求を発行したクライアント計算機が更新要求を発行するか否かを判定し、
前記クライアント計算機が更新要求を発行すると判定された場合、前記第１ディレクトリツリーを選択し、
前記クライアント計算機が更新要求を発行しないと判定された場合、前記複数の第２サーバによって管理される複数の前記第２ディレクトリツリーの一つを選択し、
前記選択されたディレクトリツリーが前記アクセス要求を受信したサーバによって管理されている場合、前記選択されたディレクトリツリーを対象として前記要求されたアクセスを実行し、
前記選択されたディレクトリツリーが前記アクセス要求を受信したサーバによって管理されていない場合、前記選択されたディレクトリツリーを管理するサーバを識別する情報を、前記アクセス要求を発行した前記クライアント計算機に前記インターフェースを介して送信し、
前記アクセス要求を発行した前記クライアント計算機は、前記選択されたディレクトリツリーを管理するサーバを識別する情報を受信すると、前記選択されたディレクトリツリーを管理するサーバに対して前記アクセス要求を送信することを特徴とする方法。
【請求項８】
前記各サーバは、前記各クライアント計算機によって設定されたパラメータを保持し、
前記プロセッサは、
前記受信したアクセス要求を発行したクライアント計算機によって設定された前記パラメータを参照し、
前記参照されたパラメータが、そのパラメータを設定したクライアント計算機が更新要求を発行することを示す値である場合、前記クライアント計算機が更新要求を発行すると判定し、
前記参照されたパラメータが、そのパラメータを設定したクライアント計算機が更新要求を発行しないことを示す値である場合、前記クライアント計算機が更新要求を発行しないと判定することを特徴とする請求項７に記載の方法。
【請求項９】
前記各サーバは、前記クライアント計算機のうち、更新要求を発行するクライアント計算機又は更新要求を発行しないクライアント計算機のいずれか一方を識別する情報を保持し、
前記プロセッサは、
前記保持された情報を参照して、前記アクセス要求を発行したクライアント計算機が更新要求を発行するか否かを判定することを特徴とする請求項７に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークを介してクライアントと接続され、クライアントが用いるデータを記憶する、ファイルサーバ又はネットワークアタッチドストレージ（Network Attached Storage、ＮＡＳ）において、複数のサーバに負荷を分散するための技術に関する。
【背景技術】
【０００２】
ネットワークに接続されたストレージシステムが、そのネットワークに接続された計算機の共有ディスクとして使用される、ネットワークアタッチドストレージ（Network Attached Storage、ＮＡＳ）が提案されている。ＮＡＳは、ネットワークインターフェース等を含むサーバと、データを格納するディスクドライブとによって構成される。
【０００３】
例えば、特許文献１には、複数のサーバを備え、各サーバがネットワークに接続されるクラスタ構成のＮＡＳが開示されている。特許文献１に記載されたシステムにおいて、ネットワークエレメント、スイッチングエレメント及びディスクエレメントが、ＮＡＳのサーバに相当する。特許文献１に記載されたシステムは、ネットワークエレメントを複数備え、それらのネットワークエレメントがファイルシステムを共有することができる。また、ディスクエレメントを複数備えることによって、ディスク単位でマイグレーションすることができる。さらに、各ネットワークエレメントからディスクエレメントの持つ全てのファイルシステムに対してアクセスすることができる。ディスクエレメント間で、ファイルシステムを格納しているディスクのマイグレーションが実行された場合も、各ネットワークエレメントからは、マイグレーションによる影響を受けることなく、全てのファイルシステムに対してアクセスすることができる。
【０００４】
一方、ネットワーク上に分散して存在するファイルにアクセスするためのファイルシステムの一つとして、ネットワークファイルシステム（ＮＦＳ）が提案されている。ＮＦＳの現時点の最新版であるＮＦＳｖ４（ＲＦＣ３５３０）（非特許文献１参照）によれば、ファイルシステムがサーバ間でマイグレーションされた場合、サーバは、クライアントからの当該ファイルシステムへのアクセスに対して、マイグレーション先の位置の情報を通知する。この通知を受けたクライアントは、通知された位置情報に従って、マイグレーション先のファイルシステムにアクセスすることができる。さらに、マイグレーションと類似の手順によって実現されるレプリケーション機能によって、クライアントは、あるファイルシステムの複製（ミラー）を持つ複数のサーバのリストを得ることができる。
【特許文献１】米国特許第６６７１７７３号明細書
【非特許文献１】RFC3530，NFS  version4，P．58−61，IETF  Home  Page、［online］、［平成１８年１月１０日検索］、インターネット＜URL:http://www.ietf.org/home.html＞
【発明の開示】
【発明が解決しようとする課題】
【０００５】
複数のサーバを持つクラスタ構成のＮＡＳにおいて、ファイルシステム又はその一部のミラーが作成され、それぞれのミラーが別々のサーバによって管理される。そして、あるファイルシステム又はその一部に対するクライアントからのアクセスが、レプリケーション等によって、ミラーを管理するサーバに振り分けられる。その結果、クライアントからのアクセスを複数のサーバに分散させることができる。しかし、クライアントからの要求が、上記ミラーに振り分けられるため、全ミラーのデータは、内容が一致している必要がある。このため、ミラーによる負荷分散は、参照専用で用いる必要があり、それらの内容を更新する方法については開示されていなかった。
【課題を解決するための手段】
【０００６】
本願で開示する代表的な発明は、一つ以上のクライアント計算機と、前記クライアント計算機とネットワークを介して接続されるストレージシステムと、を備える計算機システムにおいて、前記ストレージシステムは、第１サーバ及び複数の第２サーバを含む複数のサーバと、前記複数のサーバと接続される一つ以上のディスクサブシステムと、を備え、前記ディスクサブシステムは、前記クライアント計算機によって書き込まれたデータを格納する一つ以上の論理デバイスを備え、前記各サーバは、前記ネットワークに接続されるインターフェースと、前記インターフェースに接続されるプロセッサと、前記プロセッサに接続されるメモリと、を備え、前記第１サーバは、前記論理デバイスに格納されたデータを一つ以上のファイルシステムとして管理し、前記各第２サーバは、前記第１サーバが管理する一つのファイルシステムの一部又は全部に相当する第１ディレクトリツリーの複製である第２ディレクトリツリーを管理し、前記プロセッサは、前記クライアント計算機から前記インターフェースを介して前記第１ディレクトリツリー及び前記第２ディレクトリツリーに属するファイルを対象とするアクセス要求を受信すると、前記受信したアクセス要求が、新たな前記第２ディレクトリツリーが作成されてから所定の時間内に受信したものであるか否かを判定し、前記受信したアクセス要求が、新たな前記第２ディレクトリツリーが作成されてから所定の時間内に受信したものである場合、前記アクセス要求を発行したクライアント計算機が更新要求を発行するか否かを判定し、前記クライアント計算機が更新要求を発行すると判定された場合、前記第１ディレクトリツリーを選択し、前記クライアント計算機が更新要求を発行しないと判定された場合、前記複数の第２サーバによって管理される複数の前記第２ディレクトリツリーの一つを選択し、前記選択されたディレクトリツリーが前記アクセス要求を受信したサーバによって管理されている場合、前記選択されたディレクトリツリーを対象として前記要求されたアクセスを実行し、前記選択されたディレクトリツリーが前記アクセス要求を受信したサーバによって管理されていない場合、前記選択されたディレクトリツリーを管理するサーバを識別する情報を、前記アクセス要求を発行した前記クライアント計算機に前記インターフェースを介して送信し、前記アクセス要求を発行した前記クライアント計算機は、前記選択されたディレクトリツリーを管理するサーバを識別する情報を受信すると、前記選択されたディレクトリツリーを管理するサーバに対して前記アクセス要求を送信することを特徴とする。
【発明の効果】
【０００７】
本発明の一形態によれば、複数のサーバを備えるストレージシステムにおいて、ファイルシステムの全体又はその一部であるディレクトリツリーのミラーを作成することによって、複数のサーバに参照負荷を分散することができる。さらに、クライアントからのアクセス種別を判別し、更新要求を含むアクセスをマスタに対してのみ振り分けることによって、複数のサーバ間で更新の順序保証及びロック制御等を行なうことなく、複数のミラーを持つディレクトリツリーに対する更新を行なうことができる。さらに、マスタに対する更新をミラーに反映することによって、ミラーを参照するクライアントに対しても、更新されたデータの内容を参照することを可能とする。
【発明を実施するための最良の形態】
【０００８】
図１は、本発明の実施の形態の計算機システムの構成を示すブロック図である。
【０００９】
実施の形態の計算機システムは、ストレージシステム１００、管理計算機１４０、クライアント１５０Ａ、クライアント１５０Ｂ及びこれらを相互に接続するＬＡＮ１６０を備える。
【００１０】
管理計算機１４０は、例えば、ストレージシステム１００内のファイルシステムの作成、ファイルシステムのマウント及びミラー作成等をサーバ１１０に指示し、あるいは、ディスクサブシステム１２０又はスイッチ１３０に設定変更を指示する計算機である。
【００１１】
以下の説明において、ミラーとは、ファイルシステム又はその一部であるディレクトリツリーの複製である。ミラーの作成とは、ディレクトリツリーに属する全データの複製を作成し、その複製をいずれかの論理デバイス（後述）に格納することである。なお、複製元のディレクトリツリー等は、マスタと記載される。
【００１２】
クライアント１５０Ａ及び１５０Ｂは、ストレージシステム１００のファイルにアクセスする計算機である。具体的には、クライアント１５０Ａ及び１５０Ｂは、ストレージシステム１００にファイルを書き込み、又は、ストレージシステム１００からファイルを読み出す。このとき、ストレージシステム１００が管理するファイルシステムが使用される。クライアント１５０Ａ及び１５０Ｂは、少なくとも、ファイルアクセスを実行するプログラムを格納するメモリ（図示省略）、及び、メモリに格納されたプログラムを実行するプロセッサ（図示省略）を備える。
【００１３】
図１には、二つのクライアント（１５０Ａ及び１５０Ｂ）を示すが、任意の数のクライアントがＬＡＮ１６０に接続され、ストレージシステム１００にアクセスすることができる。以下の説明において、二つのクライアントを特に区別する必要がない場合、これらを総称してクライアント１５０と記載する。
【００１４】
ＬＡＮ１６０は、例えば、ＴＣＰ／ＩＰ等のプロトコルで通信するネットワークである。
【００１５】
ストレージシステム１００は、いわゆるネットワークアタッチドストレージ（Network Attached Storage、ＮＡＳ）である。ストレージシステム１００は、サーバ１１０Ａ、サーバ１１０Ｂ、ディスクサブシステム１２０及びこれらを相互に接続するスイッチ１３０によって構成される。
【００１６】
スイッチ１３０は、例えば、ファイバーチャネル（ＦＣ）のスイッチである。ストレージシステム１００は、複数のスイッチ１３０を備えてもよい。一つ以上のスイッチ１３０は、ストレージエリアネットワーク（ＳＡＮ）を構成していてもよい。あるいは、スイッチ１３０は、ＬＡＮのスイッチ又はストレージシステム専用のスイッチであってもよい。
【００１７】
サーバ１１０Ａ及び１１０Ｂは、クライアント１５０からのアクセス要求に従ってディスクサブシステム１２０にアクセスする。
【００１８】
ストレージシステム１００は、複数のサーバ１１０Ａ等を備える。以下の説明において、サーバ１１０Ａ及び１１０Ｂを特に区別する必要がない場合、これらを総称してサーバ１１０と記載する。図１には、二つのサーバ１１０Ａ及び１１０Ｂを示すが、ストレージシステム１００は、さらに多くのサーバ１１０を備えてもよい。サーバ１１０は、ＮＡＳヘッド又はＮＡＳノードとも呼ばれる。なお、複数のサーバ１１０がクラスタ構成されても良い。
【００１９】
サーバ１１０Ａは、相互に接続されたネットワークインターフェース１１１Ａ、ＣＰＵ１１２Ａ、ローカルメモリ１１３Ａ及びアダプタ１１６Ａを備える。
【００２０】
ネットワークインターフェース１１１Ａは、ＬＡＮ１６０に接続され、管理計算機１４０及びクライアント１５０と通信するインターフェースである。
【００２１】
ＣＰＵ１１２Ａは、サーバ１１０Ａの動作を制御するプロセッサである。具体的には、ＣＰＵ１１２Ａは、ローカルメモリ１１３Ａに格納されたプログラムを実行する。
【００２２】
ローカルメモリ１１３Ａは、例えば、半導体メモリであり、ＣＰＵ１１２Ａが実行するプログラム及びＣＰＵ１１２Ａによって参照されるデータを格納する。具体的には、ローカルメモリ１１３Ａには、プログラムであるサーバソフトウェア２００（図２参照）の他、後述するマウントポイント管理テーブル４００、ディレクトリツリー管理テーブル５００、ミラー管理テーブル６００、ファイルシステム管理テーブル７００、マウントパラメータテーブル１５００及び更新クライアントテーブル１６００等が格納される。
【００２３】
アダプタ１１６Ａは、スイッチ１３０に接続され、ディスクサブシステム１２０と通信するインターフェースである。
【００２４】
サーバ１１０Ｂは、サーバ１１０Ａと同様、ネットワークインターフェース１１１Ｂ、ＣＰＵ１１２Ｂ、ローカルメモリ１１３Ｂ及びアダプタ１１６Ｂを備える。これらは、それぞれ、ネットワークインターフェース１１１Ａ、ＣＰＵ１１２Ａ、ローカルメモリ１１３Ａ及びアダプタ１１６Ａと同様であるため、説明を省略する。
【００２５】
さらに多くのサーバ１１０が設けられる場合も、各サーバ１１０の構成は、サーバ１１０Ａと同様である。
【００２６】
ストレージシステム１００が複数のサーバ１１０を備える場合、これらのサーバ１１０は、サーバ間通信路１３５によって相互に接続される。サーバ１１０は、サーバ間通信路１３５を経由して相互に通信することができる。具体的には、一つのサーバ１１０のマウントポイント管理テーブル４００又はミラー管理テーブル６００等の内容が更新された場合、その更新の内容がサーバ間通信路１３５を経由して他のサーバ１１０に送信される。送信先のサーバ１１０は、受信した更新の内容をそのサーバ１１０内のマウントポイント管理テーブル４００又はミラー管理テーブル６００等に反映する。
【００２７】
なお、本実施の形態では、図１に示すように、スイッチ１３０及びＬＡＮ１６０と独立したサーバ間通信路１３５が設けられる。しかし、サーバ１１０は、スイッチ１３０又はＬＡＮ１６０を経由して相互に通信してもよい。あるいは、サーバ１１０は、ディスクサブシステム１２０のディスクキャッシュ１２２を使用して相互に通信してもよい。すなわち、一つのサーバ１１０のマウントポイント管理テーブル４００等が更新されると、そのサーバ１１０は、更新の内容をディスクキャッシュ１２２に書き込む。他のサーバ１１０は、ディスクキャッシュ１２２に書き込まれた更新の内容を読み出し、各々のマウントポイント管理テーブル４００等を更新する。サーバ１１０が上記のいずれの経路で通信しても、本発明を実施することができる。
【００２８】
ディスクサブシステム１２０は、相互に接続されたディスクコントローラ１２１Ａ、ディスクコントローラ１２１Ｂ、ディスクキャッシュ１２２及びディスクドライブ１２３を備える。ディスクコントローラ１２１Ａは、スイッチ１３０に接続されるポート１２５Ａ及び１２５Ｂを備える。ディスクコントローラ１２１Ｂは、スイッチ１３０に接続されるポート１２５Ｃ及び１２５Ｄを備える。以下の説明において、ディスクコントローラ１２１Ａ及び１２１Ｂを特に区別する必要がない場合、これらを総称してディスクコントローラ１２１と記載する。また、ポート１２５Ａから１２５Ｃを特に区別する必要がない場合、これらを総称してポート１２５と記載する。ディスクサブシステム１２０は、一つ又は三つ以上のディスクコントローラ１２１を備えてもよい。各ディスクコントローラ１２１は、一つ又は三つ以上のポート１２５を備えてもよい。
【００２９】
ディスクコントローラ１２１は、ポート１２５及びスイッチ１３０を介してサーバ１１０と通信し、ディスクサブシステム１２０を制御する。具体的には、ディスクコントローラ１２１は、サーバ１１０からの要求に従って、ディスクドライブ１２３にデータを書き込み、又は、ディスクドライブ１２３からデータを読み出す。
【００３０】
ディスクキャッシュ１２２は、例えば、半導体メモリであり、ディスクドライブ１２３に書き込まれるデータ又はディスクドライブ１２３から読み出されたデータを一時的に格納する。
【００３１】
ディスクドライブ１２３Ａから１２３Ｄは、データを格納するハードディスクドライブである。ディスクサブシステムは、任意の数のディスクドライブ１２３Ａ等を備える。以下の説明において、ディスクドライブ１２３Ａから１２３Ｄを特に区別する必要がない場合、これらを総称してディスクドライブ１２３と記載する。これらのディスクドライブ１２３は、Redundant Arrays of Inexpensive Disks（ＲＡＩＤ）を構成してもよい。
【００３２】
ディスクドライブ１２３の記憶領域は、任意の数の論理デバイス（ＬＤＥＶ）に分割される。図１には、例として、４個のＬＤＥＶ１２４Ａから１２４Ｄを示す。以下の説明において、ＬＤＥＶ１２４Ａから１２４Ｄを特に区別する必要がない場合、これらを総称してＬＤＥＶ１２４と記載する。ＬＤＥＶ１２４は、ディスクコントローラ１２１によって論理的なディスクドライブとして扱われる領域である。ディスクドライブ１２３がＲＡＩＤを構成する場合、図１に示すように、一つのＬＤＥＶ１２４は、複数のディスクドライブ１２３の記憶領域によって構成されてもよい。各ＬＤＥＶ１２４の大きさは任意である。
【００３３】
各ＬＤＥＶには、ＬＤＥＶ識別子（ＩＤ）が付与される。図１の例において、ＬＤＥＶ１２４ＡからＬＤＥＶ１２４ＤのＩＤは、それぞれ、Ｌ０からＬ３である。
【００３４】
ストレージシステム１００は、複数のディスクサブシステム１２０を備えてもよい。その場合、あるサーバ１１０は、スイッチ１３０を経由して、特定のディスクサブシステム１２０又は特定のディスクサブシステムの集合にのみアクセスできても良い。あるいは、各サーバ１１０が、全てのディスクサブシステム１２０にアクセスすることができても良い。
【００３５】
スイッチ１３０及びディスクサブシステム１２０は、それぞれ、ＬＡＮ１６０に接続される管理用ポート１３１及び１２６を備える。管理計算機１４０は、ＬＡＮ１６０及びこれらの管理用ポート１３１又は１２６を経由して、スイッチ１３０又はディスクサブシステム１２０の設定を参照又は更新することができる。
【００３６】
図１３は、本発明の実施の形態の管理計算機１４０の構成を示すブロック図である。
【００３７】
管理計算機１４０は、少なくとも、相互に接続された入力装置１３０１、管理画面１３０２、ディスク１３０３、ＣＰＵ１３１０、ローカルメモリ１３１１及びネットワークインターフェース１３１２を備える。管理計算機１４０は、ＣＰＵ１３１０、ローカルメモリ１３１１及びネットワークインターフェース１３１２を備える筐体（図示省略）の外部に入力装置１３０１、管理画面１３０２及びディスク１３０３が接続された構造であってもよい。
【００３８】
入力装置１３０１は、例えば、システム管理者によって使用されるキーボード又はポインティングデバイスである。管理画面１３０２は、例えば、システム管理者に情報を表示する画像表示装置である。管理画面１３０２に表示される内容及びポインティングデバイスによる操作については、後で詳細に説明する（図１１及び図１２参照）。
【００３９】
ディスク１３０３には、サーバ１１０等と通信を行なうためのプログラム、及び、ディスクサブシステムを管理するためのプログラム等が格納される。これらのプログラム等は、必要に応じてローカルメモリ１３１１上に読み出され、ＣＰＵ１３１０によって実行される。ネットワークインターフェース１３１２は、サーバ１１０及びディスクサブシステム１２０との通信に使用される。
【００４０】
図２は、本発明の実施の形態のサーバソフトウェア２００の構成の説明図である。
【００４１】
サーバソフトウェア２００は、ＣＰＵ１１２によって実行されるプログラムであるネットワーク処理部２０１、ファイルシステム処理部２０２、ディスクアクセス部２０３、サーバ管理処理部２０５、サーバ間通信処理部２０６、マイグレーション処理部２０７及びミラー制御部２０８からなる。
【００４２】
ネットワーク処理部２０１は、ＬＡＮ１６０を介した管理計算機１４０及びクライアント１５０との通信を制御するプログラムである。
【００４３】
ファイルシステム処理部２０２は、クライアント１５０からファイルシステム２０２内のファイルへのアクセス要求を処理するプログラムである。具体的には、例えば、管理計算機１４０からの指示に従って、ファイルシステムを新規作成する。また、例えば、クライアント１５０からディレクトリ名又はファイル名を指定したファイルハンドル取得要求を受けると、ファイルシステム処理部２０２は、名前解決をして、ファイルハンドルを返す。ここで、ファイルハンドルとは、ファイルの識別子である。また、例えば、クライアント１５０から受けたディレクトリ名又はファイル名が、他のサーバ１１０が管理するディレクトリツリーに属する場合、ファイルシステム処理部２０２は、そのディレクトリツリーを管理するサーバ１１０のＩＤ等の位置情報をクライアントに返す。
【００４４】
ディスクアクセス部２０３は、クライアント１５０からのアクセス要求に従って、ファイルシステム２０２内のデータへのアクセスを実行するプログラムである。
【００４５】
サーバ管理処理部２０５は、管理計算機１４０と通信し、ＮＡＳの設定をするプログラムである。例えば、サーバ管理処理部２０５は、管理計算機１４０からファイルシステムの新規作成の指示を受けると、その指示をファイルシステム処理部２０２に伝え、ファイルシステムの新規作成を実行させる。管理計算機１４０からマイグレーションの指示を受けると、サーバ管理処理部２０５は、その指示をマイグレーション処理部２０７に伝え、マイグレーションを実行させる。また、管理計算機１４０からあるディレクトリツリーのミラー作成の指示を受けると、サーバ管理処理部２０５は、その指示をミラー制御部２０７に伝え、ミラーの作成を実行させる。
【００４６】
サーバ間通信処理部２０６は、サーバ間通信路１３５を経由したサーバ１１０間の通信を制御するプログラムである。例えば、サーバ間通信処理部２０６は、マウントポイント管理テーブル４００の内容が更新されたとき、その更新された内容を他のサーバ１１０に送信する。
【００４７】
マイグレーション処理部２０７は、マイグレーションを実行するプログラムである。マイグレーションは、あるディレクトリツリーを、現在管理しているサーバ１１０から、別の指定されたサーバ１１０の管理下に移動する処理のことである。
【００４８】
後述のディレクトリツリー管理テーブル５００に示すように、各ディレクトリツリーは、サーバＩＤ５０３で識別される一つのサーバ１１０によって管理される。クライアント１５０があるディレクトリツリー内のファイルにアクセスする場合、アクセス要求は、そのディレクトリツリーを管理するサーバ１１０によって処理される。マイグレーションによって、ディレクトリツリーを管理するサーバ１１０が変更される結果、各サーバ１１０にかかる負荷を均衡し、ストレージシステム１００全体の性能を向上することができる。
【００４９】
ミラー制御部２０８は、あるディレクトリツリーの複製であるミラーの作成及び更新処理を実行するプログラムである。詳細については、後述する（図９参照）。
【００５０】
図３は、本発明の実施の形態においてクライアント１５０に提供される名前空間（グローバルネームスペース）の説明図である。
【００５１】
図３には、説明のために必要な最小限のディレクトリ及びファイルを示すが、各ファイルシステム２０２は、さらに多くのディレクトリ及びファイルを含んでもよい。また、図３には、３０１から３０５までの５つのディレクトリツリーを示してあるが、更に多くのディレクトリツリーを含んでもよい。
【００５２】
図３において、ルートディレクトリ「/」及びディレクトリ「dirc」等を含むディレクトリツリーは、他のディレクトリツリー３０２から３０５をマウントして共通の名前空間（グローバルネームスペース）をクライアントに提供するために設けられる。このディレクトリツリーを、ルートツリー３０１と呼ぶ。ここで、「ディレクトリツリーをマウントする」とは、そのディレクトリツリーを別のディレクトリツリーに接続することを意味する。
【００５３】
ディレクトリツリー３０２から３０５は、それぞれ、ファイルシステム全体又はその一部に相当するディレクトリツリーを表す。ｄｔ０１及びｄｔ１０等は、各ディレクトリツリーの識別子（ＩＤ）である。以下の説明において、識別子がｄｔ０１であるディレクトリツリーを単にｄｔ０１と記載する。他のディレクトリツリーについても同様である。
【００５４】
図３の例では、ｄｔ０１は、最上位ディレクトリの下にディレクトリ「df11」及び「df12」を含み、ディレクトリ「df11」の下にファイル「file1」を含む。また、ｄｔ０１は、ディレクトリ「/dira」の下にマウントされている。したがって、ｄｔ０１の最上位ディレクトリは、ディレクトリ「/」（ルートディレクトリ）の下のディレクトリ「dira」である。このとき、ファイル「file1」のパスは、「/dira/df11/file1」である。
【００５５】
同様にして、ｄｔ１０は、最上位ディレクトリの下にディレクトリ「df21」及び「df22」を含み、ディレクトリ「df21」の下にファイル「file2」を含む。ｄｔ１０は、「/dirb」の下にマウントされている（図４参照）。したがって、ｄｔ１０の最上位ディレクトリは、ルートディレクトリの下のディレクトリ「dirb」である。このとき、ファイル「file2」のパスは、「/dirb/df21/file2」である。
【００５６】
ｄｔ２１は、最上位ディレクトリの下にディレクトリ「df31」及び「df32」を含む。ｄｔ２１は、「/dirc/subdir1」の下にマウントされている。したがって、ｄｔ２１の最上位ディレクトリは、ルートディレクトリの下のディレクトリ「dirc」のさらに下のディレクトリ「subdir1」である。
【００５７】
ｄｔ２２は、最上位ディレクトリの下にディレクトリ「df41」を含む。ｄｔ２２は、「/dirc/subdir2」の下にマウントされている。したがって、ｄｔ２２の最上位ディレクトリは、ルートディレクトリの下のディレクトリ「dirc」のさらに下のディレクトリ「subdir2」である。
【００５８】
各サーバ１１０のマウントポイント管理テーブル４００（図４参照）の内容を一致させることによって、各サーバ１１０は、同一の名前空間（図３）をクライアント１５０に提供する。各サーバ１１０は、ルートファイルシステム内のマウントポイントまでの名前解決と、そのサーバ１１０が管理するディレクトリツリー内の名前解決をすることができる。
【００５９】
例えば、サーバ１１０Ａがｄｔ０１を管理し、サーバ１１０Ｂがｄｔ１０を管理する場合において、サーバ１１０Ｂが「/dira/df11/file1」へのアクセス要求を受けたとき、サーバ１１０Ｂは、ルートディレクトリの名前解決をすることはできるが、ディレクトリ「dira」の名前解決をすることはできない。このとき、サーバ１１０Ｂは、マウントポイント管理テーブル４００とディレクトリツリー管理テーブル５００を参照して、ディレクトリ「dira」がサーバ１１０Ａの管理下にあると判定する。そして、アクセス要求を発行したクライアント１５０に位置情報（すなわち、そのディレクトリを管理しているサーバ１１０Ａを識別する情報と、必要に応じて、そのサーバ内のローカルパスを示す情報）を通知する。通知を受けたクライアント１５０は、サーバ１１０Ａにアクセス要求を発行することによって、「/dira/df11/file1」へアクセスすることが可能となる。
【００６０】
上記の例において、サーバＢは、サーバ１１０Ｂが管理するディレクトリツリー以外のファイルに対する名前解決要求をクライアント１５０から受け付けたとき、そのディレクトリツリーを管理するサーバ１１０Ａをクライアント１５０に通知した。しかし、通知する代わりに、サーバ１１０ＢがサーバＡにクライアント１５０から受け付けた名前解決要求を転送し、サーバ１１０Ａが名前解決を実行してもよい。
【００６１】
また、上記の例では、あるディレクトリツリーは一つのサーバ１１０のみによって管理されたが、複数のサーバ１１０が一つのディレクトリツリーを共有して管理してもよい。この場合、そのディレクトリツリーの更新を実行する前に、更新を実行するサーバ１１０が、ディレクトリツリーのロックを取得する操作を実行することによって、更新が正しく実行されることを保証しなければならない。
【００６２】
図４は、本発明の実施の形態のマウントポイント管理テーブル４００の説明図である。
【００６３】
マウントポイント管理テーブル４００は、ディスクサブシステム１２０に含まれるファイルシステム、又は、ファイルシステムの一部であるディレクトリツリーのグローバルネームスペースへのマウント状況を管理するテーブルである。マウントポイント管理テーブル４００の一つのエントリ（行）が、一つのマウントポイントに対応する。
【００６４】
マウントポイント管理テーブル４００は、グローバルパス４０１とＤ−ｔｒｅｅ名４０２を含む。グローバルパス４０１は、各サーバ１１０が、クライアント１５０に提供するグローバルネームスペース内のパスであり、各ディレクトリツリーのマウントポイントを示す。ここで、マウントポイントとは、各ディレクトリツリーがルートツリー３０１に接続されるディレクトリを意味する。Ｄ−ｔｒｅｅ名４０２は、グローバルパス４０１にマウントされているディレクトリツリーのＩＤである。
【００６５】
図４の例では、４個のディレクトリツリー（ｄｔ１０〜ｄｔ２２）が、それぞれ、グローバルパス４０１で示されるディレクトリにマウントされている。具体的には、ｄｔ０１は、「/dira」の下にマウントされている。同様にして、ｄｔ１０、ｄｔ２１及びｄｔ２２は、それぞれ、「/dirb」、「/dirc/subdir1」及び「/dirc/subdir2」の下にマウントされている。その結果、図３に示した名前空間がクライアント１５０に提供される。
【００６６】
図５は、本発明の実施の形態のディレクトリツリー管理テーブル５００の説明図である。
【００６７】
ディレクトリツリー管理テーブル５００は、ストレージシステム１００内の全ディレクトリツリーを管理するためのテーブルであり、一つのエントリ（行）が、一つのディレクトリツリーを示す。
【００６８】
Ｄ−ｔｒｅｅ名５０１は、ディレクトリツリーの識別子（ＩＤ）であり、このＩＤは、マウントポイント管理テーブル４００のＤ−ｔｒｅｅ名４０２、及び、後述のミラー管理テーブル６００のＤ−ｔｒｅｅ名６０１として、ディレクトリツリーを特定するために使われる。
【００６９】
ＦＳ名５０２は、Ｄ−ｔｒｅｅ名５０１で示されるディレクトリツリーが含まれるファイルシステムを示す識別子である。ＦＳ名５０２を参照することによって、各ディレクトリツリーが、ファイルシステム管理テーブル７００で示されるファイルシステムの内、どのファイルシステムに含まれているかを判定することができる。
【００７０】
サーバＩＤ５０３は、各ディレクトリツリーを管理するサーバ１１０の一意な識別子である。各サーバ１１０は、そのサーバ１１０が管理するディレクトリツリーのみにアクセスすることができる。すなわち、クライアント１５０は、ファイルにアクセスする場合、そのファイルを含むディレクトリツリーを管理するサーバ１１０にアクセス要求を発行する必要がある。
【００７１】
図５の例において、「ｓｉｄ１」は、サーバ１１０ＡのＩＤであり、「ｓｉｄ２」は、サーバ１１０ＢのＩＤである。この場合、ｄｔ０１及びｄｔ１０がサーバ１１０Ａに管理され、ｄｔ２１及びｄｔ２２がサーバ１１０Ｂに管理されている。「ｓｉｄ３」は、例えば、図１に示さないサーバ１１０ＣのＩＤであってもよい。
【００７２】
前述のように、あるディレクトリツリーが複数のサーバ１１０によって共有されている場合、サーバＩＤ５０３は複数のサーバ１１０のＩＤを含むこととなる。この場合、後述のディレクトリツリー選択処理において、複数のサーバが共有するディレクトリツリーが選択された場合、クライアントに返す位置情報として、複数のサーバＩＤ５０３から一つを選んで使用することができる。これによって、例えばランダムアクセスが中心に行なわれる場合のように、ディスクへのアクセスより、サーバ１１０内での処理がボトルネックとなる場合に、サーバ１１０の負荷を、そのディレクトリツリーを共有しているサーバ１１０間で分散させることができる。
【００７３】
ディレクトリツリーをマイグレーションすると、サーバＩＤ５０３の内容が更新される。例えば、ｄｔ０１をサーバ１１０Ａからサーバ１１０Ｂにマイグレーションすると、ｄｔ０１のサーバＩＤ５０３は、「ｓｉｄ１」から「ｓｉｄ２」に更新される。さらに、更新された内容が、サーバ間通信路１３５を経由して、ストレージシステム１００内の全てのサーバ１１０に通知される。この通知を受けたサーバ１１０は、通知に従って、ディレクトリツリー管理テーブル５００を更新する。その結果、全てのサーバ１１０のディレクトリツリー管理テーブル５００の内容が同一になる。
【００７４】
属性５０４は、ディレクトリツリーの属性を示す値が格納される。“ｍｉｒｒｏｒ”は、そのディレクトリツリーがミラーであることを示す。“ｒｗ”（ｒｅａｄ−ｗｒｉｔｅ）は、そのディレクトリツリー内のファイルの参照と更新が可能であることを示す。“ｒｏ”（ｒｅａｄ  ｏｎｌｙ）は、そのディレクトリツリー内のファイルの参照のみが可能であることを意味する。
【００７５】
マスタのみで更新が実行される場合、マスタの属性５０４は“ｒｗ”であり、ミラーの属性５０４は“ｒｏ”である。
【００７６】
属性５０４を参照することによって、あるディレクトリツリーがマスタであるかミラーであるかを判定することができる。しかし、ディレクトリツリーがマスタかミラーかの判定は、そのディレクトリツリーのＩＤが後述のミラー管理テーブル６００のミラー名６０２に登録されているか否かを判定することによって行うこともできる。このため、属性５０４に“ｍｉｒｒｏｒ”は登録されなくともよい。
【００７７】
ローカルパス５０５は、Ｄ−ｔｒｅｅ名５０１に対応するディレクトリツリーの実体が存在するサーバ１１０内のローカルな名前空間内のパスを示す。例えば、図４のマウントポイント管理テーブル及び図５のディレクトリツリー管理テーブルによって作成されるグローバルネームスペースにおいて、「/dirb/df21/file2」で表されるファイルは、「ｓｉｄ１」で示されるサーバ１１０であるサーバ１１０Ａが管理する、パスが「/mnt/fs1/df21/file2」であるファイルである。
【００７８】
前述の例では、グローバルネームスペース内のパスと、サーバ１１０内のローカルパスが異なる場合を示したが、両者が一致している場合には、ローカルパス５０５は、特に必要ない。例えば、ｄｔ０１のｓｉｄ１のサーバ１１０内のローカルパスが「/dira」である場合、このローカルパスはグローバルネームスペース内のパスと一致する。この場合、クライアント１５０に通知する位置情報にローカルパスが含まれる必要もない。
【００７９】
図６は、本発明の実施の形態のミラー管理テーブル６００の説明図である。
【００８０】
ミラー管理テーブル６００は、あるディレクトリツリーの複製であるミラーとそのミラーの元となったディレクトリツリーであるマスタの対応関係を示すテーブルであり、一つのエントリ（行）が、一つのミラーを示す。ミラーは、マスタと同一のデータを持つディレクトリツリーである。ミラーに含まれるデータの参照は許可されるが、更新は禁止される。
【００８１】
Ｄ−ｔｒｅｅ名６０１は、マスタのディレクトリツリーのＩＤである。ミラー名６０２は、ミラーのディレクトリツリーのＩＤである。
【００８２】
あるマスタに対して、複数のミラーが存在する場合、ミラー管理テーブル６００内には、Ｄ−ｔｒｅｅ名６０１が一致するエントリが複数存在する。あるマスタに対するミラーを検索しやすいよう、ミラー管理テーブル６００の各エントリは、Ｄ−ｔｒｅｅ名６０１をキーとしてソートされていることが望ましい。
【００８３】
図６の例では、Ｄ−ｔｒｅｅ名６０１の値「ｄｔ１０」、「ｄｔ１０」及び「ｄｔ２１」に対応するミラー名６０２として、それぞれ、「ｄｔ１００」、「ｄｔ１１０」及び「ｄｔ２０１」が登録されている。これは、ｄｔ１００及びｄｔ１１０が共にｄｔ１０のミラーであり、ｄｔ２０１がｄｔ２１のミラーであることを示す。
【００８４】
図７は、本発明の実施の形態のファイルシステム管理テーブル７００の説明図である。
【００８５】
ファイルシステム管理テーブル７００は、ストレージシステム１００に含まれるファイルシステムを管理するテーブルであり、各ファイルシステムが格納されるディスクサブシステム１２０の論理デバイス（ＬＤＥＶ）１２４を示す。各エントリ（行）は、一つのＬＤＥＶ１２４に対応している。
【００８６】
ＦＳ名７０１は、ファイルシステムのＩＤである。ＤＳ名７０２は、ＦＳ名７０１が示すＩＤのファイルシステムを格納しているＬＤＥＶ１２４を含むディスクサブシステム１２０のＩＤを示す。デバイス名７０３は、ＦＳ名７０１が示すＩＤのファイルシステムを格納しているＬＤＥＶ１２４をディスクサブシステム１２０内で識別するＩＤを示す。
【００８７】
一つのファイルシステムは、複数のＬＤＥＶ１２４に格納することが可能である。この場合、ファイルシステム管理テーブル７００内には、ＦＳ名７０１が一致するエントリが複数存在する。あるファイルシステムを格納するＬＤＥＶ１２４の集合を検索しやすいよう、ファイルシステム管理テーブル７００の各エントリは、ＦＳ名７０１をキーとしてソートされていることが望ましい。
【００８８】
例えば、図７において、ＦＳ名７０１として二つの「ｆｓ０」が登録され、それぞれに対応するＤＳ名７０２として二つの「０」が登録されている。そして、一方の「ｆｓ０」に対応するデバイス名７０３として「Ｌ０」が、他方の「ｆｓ０」に対応するデバイス名７０３として「Ｌ１」が登録されている。これは、ファイルシステム「ｆｓ０」が、ＤＳ名「０」のディスクサブシステム１２０に格納された、デバイス名Ｌ０及びＬ１なる二つのＬＤＥＶ１２４に格納されていることを示す。
【００８９】
図８は、本発明の実施の形態におけるミラーの状態を示す説明図である。
【００９０】
図８は、図５のディレクトリツリー管理テーブル５００及び図６のミラー管理テーブル６００の例で示されるディレクトリツリーとミラーの関係を例として示している。
【００９１】
この例において、ｄｔ１０をマスタとする二つのミラー（ｄｔ１００、ｄｔ１１０）が存在し、ｄｔ２１をマスタとする一つのミラー（ｄｔ２０１）が存在する。マスタ及びそのマスタに対するそれぞれのミラーは、異なるサーバ１１０によって管理されている。
【００９２】
このように、あるディレクトリツリー（マスタ）のミラーを作成し、複数のサーバ１１０にマスタと同一のデータを持つミラーを配置することによって、マスタに対するアクセスを、ミラーを持つサーバ１１０に振り分け、複数のサーバ１１０間に負荷を分散することができる。
【００９３】
ミラーは、管理計算機１４０から指示を受信したサーバソフトウェア２００のミラー制御部２０８によって作成される（図９参照）。
【００９４】
なお、上記では、マスタとそのマスタに対するミラーがそれぞれ異なるサーバ１１０で管理される場合を示したが、それらのいくつかが同じサーバ１１０で管理されてもよい。これは、あるディレクトリツリーに対する負荷が高いために、そのディレクトリツリーを格納しているＬＤＥＶ１２４が性能のボトルネックとなっている場合に有効である。具体的には、あるディレクトリツリーに対する負荷を複数のＬＤＥＶ１２４に分散させることによって性能を向上させることができる。
【００９５】
この場合、グローバルパスとローカルパスを異なるパスとし、同じサーバ１１０が管理するそれぞれのミラーのローカルパスを異なるパスとする必要がある。
【００９６】
次に、サーバソフトウェア２００に含まれるプログラムが実行する処理について、フローチャートを参照して説明する。なお、サーバソフトウェア２００はローカルメモリ１１３に格納され、サーバソフトウェア２００に含まれる各プログラムはＣＰＵ１１２によって実行される。このため、以下の説明において各プログラムが実行する処理は、実際にはＣＰＵ１１２によって実行される。
【００９７】
図９は、本発明の実施の形態のミラー制御部２０８が実行するミラー作成処理のフローチャートである。
【００９８】
ミラー作成処理は、管理計算機１４０からの指示を受信したときに開始される。
【００９９】
ミラー制御部２０８は、まず、ミラーへのコピー動作９０１を実行する。具体的には、ミラー制御部２０８は、マスタのディレクトリツリー内の全データを複製する。
【０１００】
ディスクコントローラ１２５がデータのコピー機能を備えている場合、ミラー制御部２０８は、ディスクアクセス部２０３を通して、ディスクコントローラ１２５にコピー実行の指示を送信する。
【０１０１】
ディスクコントローラ１２５は、指示を受信すると、順次データのコピーを実行する。コピーの実行中に、コピー対象のデータが更新された場合、ディスクコントローラ１２５は、コピー元とコピー先の両方のデータを更新する二重書きを実行する。その結果、コピー元のデータとコピー先のデータが一致する。二重書きの処理は、順次実行されるデータコピーの終了後も、サーバ１１０から切り離しの指示を受信するまで続けられる。
【０１０２】
ディスクコントローラ１２５は、コピー先のディレクトリツリー（すなわち、ミラー）を格納するＬＤＥＶ１２４が、コピー元のディレクトリツリー（すなわち、マスタ）を格納するＬＤＥＶ１２４と異なるディスクサブシステム１２０に属する場合、スイッチ１３０を経由してコピー先のＬＤＥＶ１２４を管理するディスクコントローラ１２５にデータを送信することによって、コピーを実行する。
【０１０３】
ディスクコントローラ１２５は、データコピー終了後、必要に応じて、ミラーのマスタからの切り離しと、ミラーを含むファイルシステムのサーバ１１０へのマウント（すなわち、サーバ１１０のローカルパスへのファイルシステムの接続処理）を実行する。
【０１０４】
ミラーへのコピー動作９０１は、ディスクコントローラ１２５がデータのコピー機能を備えていない場合等には、サーバ１１０によって実行されてもよい。この場合、ミラー制御部２０８は、ファイルシステム処理部２０２にコピーの実行を指示する。ファイルシステム処理部２０２は、必要な場合、まずコピー先となるディレクトリツリーを含むファイルシステムをマウントする。その後、ファイルシステム処理部２０２は、順次データのコピーを実行する。さらに、コピー対象のデータが更新された場合、ファイルシステム処理部２０２は、ディクスコントローラ１２５と同様の二重書きを実行する。その結果、コピー元とコピー先のデータが一致する。二重書きの処理は、順次実行されるデータコピーの終了後も、サーバ１１０から切り離しの指示を受信するまで続けられる。
【０１０５】
コピー先が他のサーバ１１０によって管理されるディレクトリツリーであった場合、ＬＡＮ１６０又はサーバ間通信路１３５を通して、コピー先のディレクトリツリーを管理するサーバ１１０にデータを送信することによって、コピーが実行される。
【０１０６】
ディスクコントローラ１２５がミラーを作成するときに、マスタとなるディレクトリツリーの構成に制約がある場合がある。ディスクコントローラ１２５のコピー機能は、通常、ＬＤＥＶ１２４単位でコピーを管理する。このため、一つのＬＤＥＶ１２４内に複数のディレクトリツリーがある場合、ディスクコントローラ１２５は一つのディレクトリツリーのみをコピーすることができない。このため、ディスクコントローラ１２５は、あるＬＤＥＶ１２４の集合とファイルシステムとディレクトリツリーとを１対１対１に関係付け、そのＬＤＥＶ１２４の集合のミラーを作成する。あるいは、あるＬＤＥＶ１２４の集合に複数のディレクトリツリーが存在することが許可され、その一つのディレクトリツリーのミラーを作成する場合、ＬＤＥＶ１２４の集合に含まれる複数のディレクトリツリー全てのミラーが作成されてもよい。
【０１０７】
一方、サーバ１１０がミラーを作成する場合、マスタのディレクトリツリーと、ファイルシステム又はＬＤＥＶ１２４との関係には制約がないため、指定されたディレクトリツリーのみのミラーを作成することが可能である。例えば、サーバ１１０は、一つのファイルシステム内の複数のディレクトリツリーのミラーを、それぞれ異なるファイルシステム内に作成することができる。あるいは、サーバ１１０は、異なるファイルシステム内の複数のディレクトリツリーのミラーを、一つのファイルシステム内に作成することもできる。
【０１０８】
ミラーへのコピー動作９０１の終了後、ミラー制御部２０８は、ミラー登録９０２を実行する。ミラー登録９０２によって、ディレクトリツリー管理テーブル５００とミラー管理テーブル６００にエントリが追加される。例えば、ｄｔ１０のミラーとしてｄｔ１００が作成された場合、ディレクトリツリー管理テーブル５００には、Ｄ−ｔｒｅｅ名５０１がｄｔ１００であるエントリが追加される（図５参照）。また、ミラー管理テーブル６００には、Ｄ−ｔｒｅｅ名６０１がｄｔ１０で、ミラー名６０２がｄｔ１００であるエントリが追加される（図６参照）。
【０１０９】
ミラー登録９０２終了後、ミラー制御部２０８は、必要に応じて、ミラー同期登録９０３を実行する。ミラー同期登録９０３は、マスタに対する更新の内容をミラーに反映させるため、ミラー同期処理のスケジュールを、ディスクコントローラ１２５又はファイルシステム処理部２０２に対して設定する。
【０１１０】
ミラー制御部２０８は、例えば、５秒毎にミラー同期処理が実行されるように設定してもよい。ミラー同期処理は、前回のミラー同期処理実行後に行なわれたデータの更新内容を差分情報としてミラーに書き込むことによって、マスタとミラーの内容を一致させる処理である。また、ディスクコントローラ１２５のコピー機能によってミラー同期処理が実行され、かつ、サーバ１１０がそのローカルメモリ１１３内に一度読み出したデータの内容をキャッシュとして持っている場合、ＬＤＥＶ１２４に反映された更新内容をサーバ１１０が参照するように、サーバ１１０がキャッシュをクリアする必要がある。この場合、ミラー制御部２０８は、サーバ１１０のファイルシステム処理部２０２に、ミラー同期処理としてキャッシュのクリアを実行させる。
【０１１１】
ディレクトリツリーに対する一連の更新の切れ目においてミラー同期処理を実行する必要がある場合がある。例えば、クライアント１５０上のアプリケーションがディレクトリツリー上のあるファイルを更新する場合、あるいは、複数の要求からなる更新が完了してから同期を実行する場合等である。
【０１１２】
このため、例えば、スナップショット採取のタイミングでミラー同期処理を実行してもよい。ここで、スナップショット採取とは、バックアップ等の目的のために、ある時点のファイルシステムの内容を保存する処理である。また、マスタのファイルシステムをコピーする代わりに、マスタのスナップショットをコピーすることによってミラーを作成してもよい。この場合、サーバ１１０等がスナップショットを他のサーバ上にコピーするためのコピー機能等を備えていれば、その機能を使用してミラーへのコピー動作９０１を実行することができる。
【０１１３】
ミラー同期登録９０３は、マスタとミラーが常に同期している場合は不要である。つまり、ミラーへのコピー動作９０１において、順次のデータコピー終了後にマスタとミラーを切り離さずに、更新の二重書きを常に実行している場合、ミラー同期登録９０３は不要である。
【０１１４】
但し、ディスクコントローラが二重書きを実行し、かつ、サーバ１１０がキャッシュを備える場合、サーバ１１０のファイルシステム処理２０２にキャッシュをクリアさせる処理は必要である。したがって、キャッシュを定期的にクリアさせるために、ミラー同期登録９０３を実行する必要がある。
【０１１５】
後述のディレクトリツリー選択処理（図１４）によって、更新要求は、マスタのみに対して実行され、ミラーに対しては参照要求のみが実行される。すなわち、更新は常に最新の情報を持つマスタのみに対して実行されるため、常に更新順序が保証される。したがって、マスタの更新内容をすぐに各ミラーに反映させる必要がなく、マスタの更新から遅れて（例えば、定期的に）その更新をミラーに反映させることができる。
【０１１６】
マスタへの更新データをすぐにミラーに反映せず、ミラー同期処理を用いて更新データを反映させることによって、マスタの更新時にロックを取得する必要も、ミラーへの更新完了を待つ必要もない。このため、マスタ更新の処理を高速に実行することができる。
【０１１７】
ミラー同期登録９０３終了後、ミラー制御部２０８は、サーバ管理処理部２０５を通して、管理計算機１４０に処理の終了を通知する。
【０１１８】
ミラー作成後は、クライアント１５０からのアクセス要求受信時に、ファイルシステム処理部２０２が、マスタ又は一つ以上のミラーのうち一つのディレクトリツリーを選択し、そのディレクトリツリーにアクセス要求を振り分ける。
【０１１９】
図１０は、本発明の実施の形態のファイルシステム処理部２０２がアクセス要求を振り分けるために実行する処理のフローチャートである。
【０１２０】
アクセス要求の振り分けは、要求毎に実行してもよいが、振り分けによるオーバヘッドが大きくなるため、アクセスするクライアント１５０毎に実行することが望ましい。この場合、一度振り分けを実行した後、再度振り分けが実行されるまで、各クライアント１５０は選択されたディレクトリツリーに対してアクセス要求を発行する。
【０１２１】
ファイルシステム処理部２０２は、ネットワーク処理部２０１を経由して、クライアント１５０からファイルへのアクセス要求を受信する（ステップ１００１）。
【０１２２】
次に、ファイルシステム処理部２０２は、受信した要求の内容がディレクトリツリーの先頭に対する名前解決であるか否かを判定する（ステップ１００２）。
【０１２３】
ステップ１００２において、受信した要求の内容がディレクトリツリーの先頭に対する名前解決であると判定された場合、ファイルシステム処理部２０２は、ディレクトリツリー選択処理を呼び出す（ステップ１００３）。その後、処理はステップ１００６に進む。
【０１２４】
ステップ１００２において、受信した要求の内容がディレクトリツリーの先頭に対する名前解決でないと判定された場合、ファイルシステム処理部２０２は、ディレクトリツリーの再選択が必要か否かを判定する（ステップ１００４）。
【０１２５】
ステップ１００４において、ディレクトリツリーの再選択が必要と判定された場合、ファイルシステム処理部２０２は、ディレクトリツリー選択処理を呼び出す（ステップ１００５）。
【０１２６】
ディレクトリツリーの再選択が必要な場合とは、例えば、新たにミラーが作成された後にアクセス要求を受信した場合である。この場合、新たに作成されたミラーにアクセスを分散させるため、再選択が実行される。また別の例は、クライアント１５０からのアクセスパターンが変化し、あるマスタ又はミラーにアクセス要求が偏る場合である。この場合、マスタや各ミラーへの負荷を均衡させるため、再選択が実行される。
【０１２７】
上記のような場合、例えば、あるディレクトリツリーに所定の時間の間に行われるアクセスに対してディレクトリツリーの再選択が実行される。このために、上記イベント発生時にディレクトリツリー毎にフラグ（図示せず）を設定し、そのフラグが設定されている間は、ファイルシステム処理部２０２がステップ１００４で再選択要と判断する。上記フラグは、所定の時間経過後クリアされる。
【０１２８】
再選択要と判断される別の例は、ミラーへの更新要求があった場合である。後述するディレクトリツリー選択処理によって実行される選択方法の一つに、クライアント１５０から更新要求を受信するまでミラーを選択するという方法がある。この場合、選択後に受信したアクセス要求が更新要求であった場合、再選択が実行され、マスタが選択される。
【０１２９】
ファイルシステム処理部２０２は、要求されたアクセス先が自サーバ１１０（すなわち、ステップ１００６を実行しているＣＰＵ１１２が属するサーバ１１０）の管理するディレクトリツリーであるか否かを判定する（ステップ１００６）。ステップ１００３又はステップ１００５が実行された場合、ステップ１００６における「要求されたアクセス先」は、ステップ１００３又はステップ１００５において選択されたディレクトリツリーである。
【０１３０】
ステップ１００６において、要求されたアクセス先が自サーバ１１０の管理するディレクトリツリーでないと判定された場合、ファイルシステム処理部２０２は、クライアント１５０にディレクトリツリーの位置情報を通知して（ステップ１００７）、処理を終了する。この位置情報は、アクセス対象のディレクトリツリーを管理するサーバ１１０の識別子を含む。位置情報の通知を受信したクライアント１５０は、受信した位置情報によって指定されたサーバ１１０が管理する指定されたディレクトリツリーに対して、再びアクセス要求を発行する。
【０１３１】
ステップ１００６において、要求されたアクセス先が自サーバ１１０の管理するディレクトリツリーであると判定された場合、ファイルシステム処理部２０２は、ファイルへのアクセス処理を実行（ステップ１００８）し、その結果である応答情報をクライアント１５０に返し（ステップ１００９）、処理を終了する。
【０１３２】
図１４は、本発明の実施の形態のファイルシステム処理部２０２が実行するディレクトリツリー選択処理のフローチャートである。
【０１３３】
ディレクトリツリー選択処理は、図１０のステップ１００３及びステップ１００５から呼び出される。
【０１３４】
ファイルシステム処理部２０２は、ディレクトリツリー管理テーブル５００及びミラー管理テーブル６００を参照して、ディレクトリツリー選択処理を実行する。
【０１３５】
最初に、ファイルシステム処理部２０２は、クライアントのアクセス要求先のディレクトリツリーのミラーが存在するか否かを判定する（ステップ１４０１）。具体的には、アクセス要求先のディレクトリツリーがそもそもミラーである場合、又は、アクセス要求先のディレクトリツリーがマスタであり、かつ、ミラー管理テーブル６００のＤ−ｔｒｅｅ名６０１にそのディレクトリツリーのＩＤが登録されている場合には、ミラーが存在すると判定される。アクセス要求先のディレクトリツリーがミラーであるか否かは、ディレクトリツリー管理テーブル５００の属性５０４を参照して判定することもできる。
【０１３６】
ステップ１４０１においてミラーが存在しないと判定された場合、ファイルシステム処理部２０２は、マスタを選択し（ステップ１４０２）、処理を終了する。
【０１３７】
一方、ステップ１４０１においてミラーが存在すると判定された場合、ファイルシステム処理部２０２は、アクセス種別を判定する（ステップ１４０３）。具体的には、ファイルシステム処理部２０２は、アクセス要求を発行したクライアント１５０が更新要求を発行するか否かを判定する。
【０１３８】
ステップ１４０３の判定の結果に基づいて、処理が分岐する（ステップ１４０４）。具体的には、ステップ１４０３において、クライアント１５０が更新要求を発行すると判定された場合、ファイルシステム処理部２０２は、マスタのディレクトリツリーを選択して（ステップ１４０５）、処理を終了する。一方、ステップ１４０３において、クライアント１５０が更新要求を発行しないと判定された場合、ファイルシステム処理部２０２は、ミラーのディレクトリツリーを選択して（ステップ１４０６）、処理を終了する。
【０１３９】
ミラーが複数存在する場合、ミラー管理テーブル６００においてＤ−ｔｒｅｅ名６０１が等しいエントリが複数存在する。この場合、それらの複数のエントリのうちいずれか一つが選択される。この選択は、種々の方法によって実行することができる。例えば、ラウンドロビンで選択してもよいし、選択の時点の負荷を参照し、負荷の軽いミラーを選択してもよい。
【０１４０】
上記の例では、ミラーが更新されない場合を示した。しかし、更新が頻発し、マスタのみでは処理しきれない場合等には、一部のミラーの更新を許可することもできる。この場合、ディレクトリツリー管理テーブル５００において、更新を許可されるミラーの属性５０４は、ミラーであっても「ｒｗ」となる。そして、ステップ１４０３において、クライアント１５０が更新要求を発行すると判定された場合、ステップ１４０５において、マスタ、又は、属性５０４が「ｒｗ」であるミラーのいずれか一つが選択される。
【０１４１】
ミラーの更新を許可する場合、そのミラーのデータは常にマスタと一致している必要がある。このため、マスタの更新に同期させてミラーを更新する必要がある。例えば、更新を許可されたミラーに対しては、前述の二重書き処理を常に実行してもよい。また、マスタとミラーにおいて異なる更新が同時に実行されないように、マスタと更新を許可されたミラーに対し、ロック等の制御を実行する必要がある。この場合でも、更新を許可されない（すなわち参照専用の）ミラーに対しては、更新の同期又はロック制御等は不要である。
【０１４２】
アクセス種別の判定（ステップ１４０３）は、具体的には、クライアント１５０からのアクセス要求に更新要求が含まれるか否かの判定である。アクセス種別の判定方法には、いくつかの方法があり、その内の一つまたはいくつかの組み合わせによって判定されてもよい。以下、代表的な四つの判定方法について説明するが、他の方法によって判定されてもよい。
【０１４３】
ステップ１４０３における第１の判定方法として、クライアント１５０から実際に更新が行われるまでは、クライアント１５０が更新要求を発行しないと判定する方法がある。言い換えると、サーバ１１０がクライアント１５０からディレクトリツリーに対するアクセス要求を最初に受信したとき、そのクライアント１５０が更新要求を発行しないと判定され、その後、同じクライアント１５０から同じディレクトリツリーに対する更新要求を受信したとき、そのクライアント１５０が更新要求を発行すると判定される。受信したアクセス要求ごとに、アクセス要求の種類が参照され、その種類に基づいて判定されてもよい。この場合、ステップ１４０３において、ファイルシステム処理部２０２は、受信したアクセス要求が更新であるか否かを判定する。アクセス要求が更新でない（例えば、参照である）場合、クライアント１５０が更新要求を発行しないと判定され、ミラーが選択される。その後、クライアント１５０から更新要求が発行された場合、ステップ１００４で再選択要と判断され、ディレクトリ選択処理が呼び出される。この場合、ファイルシステム処理部２０２は、クライアント１５０が更新要求を発行すると判定し（ステップ１４０３）、マスタを選択する（ステップ１４０５）。
【０１４４】
ステップ１４０３における第２の判定方法は、クライアント１５０が設定したパラメータに基づいて判定する方法である。具体的には、例えば、クライアント１５０がマウントを実行するとき（すなわち、クライアント１５０がグローバルネームスペースに最初にアクセスする時）等に、そのクライアント１５０が更新要求を発行するか否かを示すマウントパラメータ（後述）を設定する。設定されたマウントパラメータは、ローカルメモリ１１３に格納されたマウントパラメータテーブル１５００に登録される（図１５参照）。例えば、クライアント１５０のユーザがマウントパラメータを指定し、クライアント１５０がその指定されたマウントパラメータを設定してもよい。
【０１４５】
この場合、ファイルシステム処理部２０２は、ステップ１４０３においてマウントパラメータを参照する。そして、マウントパラメータが更新要求を発行しないことを示す値（例えば、参照要求のみを発行することを示す値）である場合、ファイルシステム処理部２０２は、クライアント１５０が更新要求を発行しないと判定し、ミラーを選択する（ステップ１４０６）。一方、マウントパラメータが更新要求を発行することを示す値である場合、ファイルシステム処理部２０２は、クライアント１５０が更新要求を発行すると判定し、マスタを選択する（ステップ１４０５）。
【０１４６】
図１５は、本発明の実施の形態のマウントパラメータテーブル１５００の説明図である。
【０１４７】
マウントパラメータテーブル１５００は、ローカルメモリ１１３に格納され、ファイルシステム処理部２０２によって参照される。マウントパラメータテーブル１５００は、クライアントＩＤ１５０１及びマウントパラメータ１５０２からなる。
【０１４８】
クライアントＩＤ１５０１は、マウントを実行したクライアント１５０の識別子（ＩＤ）である。例えば、クライアント１５０のホスト名又はＩＰアドレスがクライアントＩＤ１５０１として登録されてもよい。
【０１４９】
マウントパラメータ１５０２は、マウントが実行されたときにクライアント１５０によって設定されたパラメータである。具体的には、マウントパラメータ１５０２には、各クライアント１５０が発行するアクセス要求の種類を示すパラメータが登録される。例えば、クライアント１５０が更新要求及び参照要求のいずれも発行する場合、そのクライアント１５０のクライアントＩＤ１５０１に対応するマウントパラメータ１５０２には、「ｒｗ」が登録される。一方、クライアント１５０が参照要求のみを発行する場合、そのクライアント１５０のクライアントＩＤ１５０１に対応するマウントパラメータ１５０２には、「ｒｏ」が登録される。
【０１５０】
例として、図１のクライアント１５０ＡのクライアントＩＤ１５０１が「ｃｉｄ１」であり、クライアント１５０ＢのクライアントＩＤ１５０１が「ｃｉｄ２」である場合について説明する。クライアント１５０Ａからアクセス要求を受けたとき、ファイルシステム処理部２０２は、「ｃｉｄ１」に対応するマウントパラメータ１５０２の値が「ｒｗ」であるため、クライアント１５０Ａが更新要求を発行すると判定する（ステップ１４０３）。一方、クライアント１５０Ｂからアクセス要求を受けたとき、ファイルシステム処理部２０２は、「ｃｉｄ２」に対応するマウントパラメータ１５０２の値が「ｒｏ」であるため、クライアント１５０Ｂが更新要求を発行しないと判定する（ステップ１４０３）。
【０１５１】
図１４のステップ１４０３における第３の判定方法は、更新要求を発行する可能性のあるクライアント１５０を登録する方法である。具体的には、例えば、システム管理者又はクライアント１５０のユーザが、更新要求を発行する可能性のあるクライアント１５０を、ローカルメモリ１１３に格納された更新クライアントテーブル１６００に登録する（図１６参照）。
【０１５２】
この場合、ファイルシステム処理部２０２は、ステップ１４０３において更新クライアントテーブル１６００を参照する。そして、受信したアクセス要求の発行元が更新クライアントテーブル１６００に登録されているクライアント１５０である場合、ファイルシステム処理部２０２は、そのクライアント１５０が更新要求を発行する判定し、マスタを選択する（ステップ１４０５）。一方、受信したアクセス要求の発行元が更新クライアントテーブル１６００に登録されていないクライアント１５０である場合、ファイルシステム処理部２０２は、そのクライアント１５０が更新要求を発行しないと判定し、ミラーを選択する（ステップ１４０６）。
【０１５３】
なお、上記の例では、更新要求を発行する可能性があるクライアント１５０が更新クライアントテーブル１６００に登録されたが、逆に、更新要求を発行する可能性がないクライアント１５０が登録されてもよい。この場合、ステップ１４０３において、発行元のクライアント１５０が登録されている場合に、そのクライアント１５０が更新要求を発行しないと判定される。
【０１５４】
図１６は、本発明の実施の形態の更新クライアントテーブル１６００の説明図である。
【０１５５】
クライアントテーブル１６００は、ローカルメモリ１１３に格納され、ファイルシステム処理部２０２によって参照される。クライアントテーブル１６００は、クライアントＩＤ１６０１からなる。
【０１５６】
クライアントＩＤ１６０１は、システム管理者等によって登録されたクライアント１５０の識別子（ＩＤ）である。例えば、クライアント１５０のホスト名又はＩＰアドレスがクライアントＩＤ１６０１として登録されてもよい。システム管理者等は、更新要求を発行する可能性のあるクライアント１５０をクライアントＩＤ１６０１に登録する。
【０１５７】
例として、図１のクライアント１５０ＡのクライアントＩＤが「ｃｉｄ１」であり、クライアント１５０ＢのクライアントＩＤが「ｃｉｄ２」である場合について説明する。クライアント１５０Ａからアクセス要求を受けたとき、ファイルシステム処理部２０２は、「ｃｉｄ１」がクライアントＩＤ１６０１として登録されているため、クライアント１５０Ａが更新要求を発行すると判定する（ステップ１４０３）。一方、クライアント１５０Ｂからアクセス要求を受けたとき、ファイルシステム処理部２０２は、「ｃｉｄ２」がクライアントＩＤ１６０１として登録されていないため、クライアント１５０Ｂが更新要求を発行しないと判定する（ステップ１４０３）。
【０１５８】
図１４のステップ１４０３における第４の判定方法は、グローバルネームスペース上のパスを分けておく方法である。クライアント１５０は、同じファイルにアクセスする場合であっても、更新要求を発行する場合には参照要求を発行する場合と異なるパスを使用する。例えば、ディレクトリ「/dirb」（図３のディレクトリツリー３０３参照）に対し、「/dirb.w」というディレクトリを用意する。具体的には、対象のディレクトリツリー（すなわち、更新要求を発行するために用意されたディレクトリツリー）は、マウントポイント管理テーブル４００に登録される場合、元のディレクトリ名に「.w」を付加したディレクトリ名（例えば、「/dir.w」等）で登録される。この場合、クライアントに提供される名前空間には、「.w」が付加されたディレクトリと付加されていないディレクトリの二つが存在する。例えば、「/dirb.w」のエントリが追加された場合、クライアントに提供される名前空間には、「/dirb」及び「/dirb.w」の二つが存在する（図１７及び１８参照）。
【０１５９】
上記の二つのディレクトリ名が登録されている場合、クライアント１５０は、ユーザに対してこれらの二つのディレクトリの選択画面を表示する。例えば、ユーザは、「/dirb」の下のファイル「file2」を更新するときは「/dirb.w」を、参照するときは「/dirb」を選択してクライアント１５０に入力する。その結果、クライアント１５０は、ディレクトリ「/dirb」の下の「file2」に対する参照要求を発行する場合、パス「/dirb/file2」を使用する。一方、同じファイルに対する更新要求を発行する場合、クライアント１５０は、「/dirb.w/file2」を使用する。ファイルシステム処理部２０２は、クライアント１５０から受信したアクセス要求において使用されているパスを参照する（ステップ１４０３）。その結果、前者のパスが使用されている場合、ファイルシステム処理部２０２は、クライアント１５０が更新要求を発行しないと判定し、ミラーを選択する（ステップ１４０６）。一方、後者のパスが使用されている場合、ファイルシステム処理部２０２は、クライアント１５０が更新要求を発行すると判定し、マスタを選択する（ステップ１４０５）。
【０１６０】
図１７は、本発明の実施の形態において、パス名に基づいて更新要求の有無が判定される場合に、クライアント１５０に提供される名前空間の説明図である。
【０１６１】
図１７に示すルートツリー３０１、ディレクトリツリー３０２、３０４及び３０５は、図３に示したものと同じであるため、説明を省略する。図１７の例では、さらに、ルートディレクトリ「/」の下に、ディレクトリツリー１７０１及び１７０２が存在する。
【０１６２】
ディレクトリツリー１７０１の最上位ディレクトリは、ルートディレクトリの下の「dirb」である。ディレクトリ「dirb」の下に、ファイル「file2」及びディレクトリ「df22」がある。
【０１６３】
ディレクトリツリー１７０２の最上位ディレクトリは、ルートディレクトリの下の「dirb.w」である。ディレクトリ「dirb.w」の下のファイル及びディレクトリは、ディレクトリツリー１７０１と同様である。
【０１６４】
また、ディレクトリツリー１７０１及び１７０２の識別子は、同じ「ｄｔ１０」である。
【０１６５】
図１８は、本発明の実施の形態において、パス名に基づいて更新要求の有無が判定される場合のマウントポイント管理テーブル４００の説明図である。
【０１６６】
図１８は、名前空間が図１７に示す通りである場合のマウントポイント管理テーブル４００の例である。図１８において、図４と同様の部分については、説明を省略する。
【０１６７】
図１８のグローバルパス４０１には、「/dirb」に加えて「/dirb.w」が登録される。これらに対応するＤ−ｔｒｅｅ名４０２は、いずれも「ｄｔ１０」である。その他のエントリは、図４と同様である。
【０１６８】
なお、上記のように、クライアント１５０は、ユーザに「/dirb」又は「/dirb.w」のいずれかを選択させるための画面を表示する。このため、図１４のステップ１４０３において上記第４の方法が選択される場合、マウントポイント管理テーブル４００は、クライアント１５０のメモリ（図示省略）にも格納される。
【０１６９】
次に、本発明の実施の形態のストレージシステム１００を管理するためのインターフェースについて説明する。このインターフェースは、管理計算機１４０によってストレージシステム１００の管理者に提供される。
【０１７０】
図１１は、本発明の実施の形態の管理画面１３０２に表示されるディレクトリツリーリスト表示画面の説明図である。
【０１７１】
ディレクトリツリーリスト表示画面には、ディレクトリツリーリスト１１００、作成ボタン１１０７、削除ボタン１１０８及びミラー作成ボタン１１０９等が含まれる。
【０１７２】
ディレクトリツリーリスト１１００は、名称１１０１、ＦＳ名１１０２、サーバ１１０３、属性１１０４及びグローバルパス１１０５からなる。
【０１７３】
名称１１０１は、ディレクトリツリーの名称である。図１１の例では、図３と同様のディレクトリツリーが表示されている。
【０１７４】
ＦＳ名１１０２は、各ディレクトリツリーを含むファイルシステムの名称である。
【０１７５】
サーバ１１０３は、各ディレクトリツリーを管理するサーバ１１０の識別子である。図１１の例において、各ディレクトリツリーと、それを管理するサーバ１１０との関係は、図５と同様である。したがって、サーバ１１０３には、図５のサーバＩＤ５０３と同じ値が表示される。
【０１７６】
属性１１０４には、各ディレクトリツリーに対する属性情報が表示される。この値は、ディレクトリツリー管理テーブル５００の属性５０４と同等である。
【０１７７】
グローバルパス１１０５は、各ディレクトリツリーのグローバルネームスペース上のマウントポイントである。図１１の例では、図４のグローバルパス４０１と同様のマウントポイントが設定されている。
【０１７８】
作成ボタン１１０７は、ディレクトリツリーを新規作成するときに使用される。
【０１７９】
削除ボタン１１０８は、ディレクトリツリーを削除するときに使用される。例えば、管理者が削除しようとするディレクトリツリーを選択し、削除ボタン１１０８を操作すると、選択されたディレクトリツリーが削除される。ここで、ディレクトリツリーの選択は、図１１の名称１１０１の欄の左側にある丸印１１０６をポインティングデバイス（図示省略）で操作（例えば、マウスクリック）することによって実行されてもよい。削除ボタン１１０８の操作も同様である。
【０１８０】
ミラー作成ボタン１１０９は、ディレクトリツリーのミラーを作成するときに使用される。例えば、管理者があるディレクトリツリーを選択し、ミラーボタン１１０９を操作すると、別の画面（図１２参照）が表示され、ミラーを作成することができる。この時選択されるディレクトリツリーはマスタのディレクトリツリーである。
【０１８１】
図１２は、本発明の実施の形態の管理画面１３０２に表示されるミラー作成操作画面１２００の説明図である。
【０１８２】
ミラー作成操作画面１２００は、管理者がディレクトリツリーリスト表示画面（図１１）においてマスタとなるディレクトリツリーを選択し、ミラー作成ボタン１１０９を操作したときに表示される。図１１は、例として、管理者がディレクトリツリーリスト表示画面においてｄｔ１０を選択した場合のミラー作成操作画面１２００を示す。
【０１８３】
ミラー作成操作画面１２００は、マスタ名称表示欄１２０１、ミラー名称入力欄１２０２、ＦＳ名称入力欄１２０３、ＦＳ内パス入力欄１２０４、サーバ入力欄１２０５、ＬＤＥＶ入力欄１２０２、実行ボタン１２０７及び取り消しボタン１２０７を含む。
【０１８４】
名称表示欄１２０１には、管理者が選択したディレクトリツリーの名称が表示される。図１２の例では、ｄｔ１０が表示される。ミラー名称入力欄１２０２には、管理者が、新規に作成するミラーの名称を入力する。図１２の例では、「ｄｔ１１０」が入力されている。ＦＳ名称入力欄１２０３には、管理者が、新規に作成するミラーを格納するＦＳの名称を入力する。図１２の例では、「ｆｓ１１」が入力されている。ＦＳ内パス入力欄１２０４には、管理者が、新規に作成するミラーのＦＳ内での先頭のディレクトリのパス名を入力する。図１２の例では、「/」が入力されている。つまりｆｓ１１全体をｄｔ１１０のディレクトリツリーとすることを意味している。サーバ入力欄１２０５には、管理者が、ミラーを管理するサーバ１１０名称を入力する。図１２の例では、「ｓｉｄ３」が入力されている。ＬＤＥＶ入力欄１２０６には、管理者が、ミラーを格納するＬＤＥＶ名称を入力する。複数のＬＤＥＶを使用する場合には、複数のＬＤＥＶ名称を例えばコンマ“，”で区切って入力する。図１２の例では、「Ｌ１０１」が入力されている。
【０１８５】
図１２の例にある入力によって、図５のディレクトリツリー管理テーブル５００のｄｔ１１０のエントリに対応するディレクトリツリーが作成される。
【０１８６】
ミラー作成操作画面１２００の各入力欄（１２０２から１２０６）の全てに入力が必要というわけではない。例えば、既存のファイルシステムの一部に新たにミラーのディレクトリツリーを作成する場合、ＦＳ名称によってディレクトリツリーを管理するサーバ１１０及び格納するＬＤＥＶ１２４は決まるので、サーバ入力欄１２０５及びＬＤＥＶ入力欄１２０６には入力する必要がない（入力しても無視される）。また、ＦＳ全体のミラーを作成する場合、ＦＳ内パスはマスタのディレクトリツリーの構造によって決まるので、ＦＳ内パス入力欄１２０４には入力する必要がない。
【０１８７】
実行ボタン１２０７は、ミラー作成を実行するときに使用される。管理者が実行ボタン１２０７を操作すると、ｄｔ１０のミラーをｓｉｄ３のサーバ１１０に作成する処理が開始される。取り消しボタン１２０８は、ミラー作成操作を中止するときに使用される。管理者が取り消しボタン１２０８を操作すると、ミラー作成操作画面１２００は閉じられ、ディレクトリツリーリスト表示画面が再び表示される。
【０１８８】
以上、本実施の形態によれば、複数のサーバ１１０を備えるストレージシステム１００において、ファイルシステムの全体またはその一部であるディレクトリツリーのミラーを作成することによって、複数のサーバ１１０に参照負荷を分散することができる。さらに、クライアント１５０からのアクセス種別を判別し、更新のあるアクセスをマスタに対してのみ振り分けることによって、複数のサーバ１１０間で更新の順序保証及びロック制御等を実行せずに、複数のミラーを持つディレクトリツリーに対する更新を実行することが可能となる。さらに、マスタに対する更新をミラーに反映することによって、ミラーに参照を行なうクライアント１５０に対しても、更新されたデータの内容を参照することを可能とする。
【図面の簡単な説明】
【０１８９】
【図１】本発明の実施の形態の計算機システムの構成を示すブロック図である。
【図２】本発明の実施の形態のサーバソフトウェアの構成の説明図である。
【図３】本発明の実施の形態においてクライアントに提供される名前空間（グローバルネームスペース）の説明図である。
【図４】本発明の実施の形態のマウントポイント管理テーブルの説明図である。
【図５】本発明の実施の形態のディレクトリツリー管理テーブルの説明図である。
【図６】本発明の実施の形態のミラー管理テーブルの説明図である。
【図７】本発明の実施の形態のファイルシステム管理テーブルの説明図である。
【図８】本発明の実施の形態におけるミラーの状態を示す説明図である。
【図９】本発明の実施の形態のミラー制御部が実行するミラー作成処理のフローチャートである。
【図１０】本発明の実施の形態のファイルシステム処理部がアクセス要求を振り分けるために実行する処理のフローチャートである。
【図１１】本発明の実施の形態の管理画面に表示されるディレクトリツリーリスト表示画面の説明図である。
【図１２】本発明の実施の形態の管理画面に表示されるミラー作成操作画面の説明図である。
【図１３】本発明の実施の形態の管理計算機の構成を示すブロック図である。
【図１４】本発明の実施の形態のファイルシステム処理部が実行するディレクトリツリー選択処理のフローチャートである。
【図１５】本発明の実施の形態のマウントパラメータテーブルの説明図である。
【図１６】本発明の実施の形態の更新クライアントテーブルの説明図である。
【図１７】本発明の実施の形態において、パス名に基づいて更新要求の有無が判定される場合に、クライアントに提供される名前空間の説明図である。
【図１８】本発明の実施の形態において、パス名に基づいて更新要求の有無が判定される場合のマウントポイント管理テーブルの説明図である。
【符号の説明】
【０１９０】
１００  ストレージシステム
１１０  サーバ
１１１、１３１２  ネットワークインターフェース
１１２、１３１０  ＣＰＵ
１１３、１３１１  ローカルメモリ
１１６  アダプタ
１２０  ディスクサブシステム
１２１  ディスクコントローラ
１２２  ディスクキャッシュ
１２３  ディスクドライブ
１２４  論理デバイス（ＬＤＥＶ）
１２５  ポート
１２６  管理用ポート
１３０  スイッチ
１３１  管理用ポート
１３５  サーバ間通信路
１４０  管理計算機
１５０  クライアント
１６０  ＬＡＮ
２００  サーバソフトウェア
２０１  ネットワーク処理部
２０２  ファイルシステム処理部
２０３  ディスクアクセス部
２０５  サーバ管理処理部
２０６  サーバ間通信処理部
２０７  マイグレーション処理部
２０８  ミラー制御部
３０１  ルートツリー
４００  マウントポイント管理テーブル
５００  ディレクトリツリー管理テーブル
６００  ミラー管理テーブル
７００  ファイルシステム管理テーブル
１１００  ディレクトリツリーリスト
１２００  ミラー作成操作画面
１３０１  入力装置
１３０２  管理画面
１３０３  ディスク
１５００  マウントパラメータテーブル
１６００  更新クライアントテーブル
【図１】
0004806572.tif 000002
【図２】
0004806572.tif 000003
【図３】
0004806572.tif 000004
【図４】
0004806572.tif 000005
【図５】
0004806572.tif 000006
【図６】
0004806572.tif 000007
【図７】
0004806572.tif 000008
【図８】
0004806572.tif 000009
【図９】
0004806572.tif 000010
【図１０】
0004806572.tif 000011
【図１１】
0004806572.tif 000012
【図１２】
0004806572.tif 000013
【図１３】
0004806572.tif 000014
【図１４】
0004806572.tif 000015
【図１５】
0004806572.tif 000016
【図１６】
0004806572.tif 000017
【図１７】
0004806572.tif 000018
【図１８】
0004806572.tif 000019