(57)【要約】論理ネットワーク接続（好ましくはＴＣＰ／ＩＰソケット）を介して１つまたはそれ以上のホストコンピュータ（１０２）に接続されてディスクストレージを提供する、１つまたはそれ以上のブロックレベルストレージサーバ（１０４）を有するネットワークベースのストレージシステム。一実施形態では、各ホスト（１０２）は１つまたはそれ以上の各ストレージサーバ（１０４）へのソケット接続（４００）を維持することができ、その接続を介して複数のＩ／Ｏ動作が非ブロック化方式で同時に実行可能である。ストレージサーバ（１０４）の物理的ストレージが選択的に複数のパーティションに分割されてもよく、各パーティションは特定のホスト（１０２）あるいはホストのグループに独立に割り付けられてもよい。ホストドライバソフトウェア（２０４）はこれらのパーティションをユーザレベルプロセスに１つまたは複数の局所ディスクドライブとして提供する。一実施形態でホスト（１０２）が最初にストレージサーバ（１０４）に接続すると、ストレージサーバ（１０４）は、まずホストを認証し、その後、ホスト（１０２）に対し、データ接続を確立するために使用できるポート、及びホスト（１０２）に割り付けられたパーティションについて知らせる。
2004506980.tif 000002
【特許請求の範囲】
【請求項１】
共有ブロックレベルネットワークストレージシステムであって、
ディスクドライブからなるアレイを備え、デバイスドライバを実行するプロセッサを備えて、ディスクドライブからなるアレイに記憶されたデータへのブロックレベルアクセスを提供するストレージサーバと、
少なくとも１つのコンピュータネットワークによってストレージサーバに結合されるホストコンピュータと、を備え、
ホストコンピュータとストレージサーバとが、少なくとも１つのコンピュータネットワークを介して、複数の並行な論理コネクションを用いて入力／出力（Ｉ／Ｏ）動作を実行し、それによって、第１のＩ／Ｏ動作が、第１の論理コネクションを介して実行され、第２のＩ／Ｏ動作が、第２の論理コネクションを介して実行される、
共有ブロックレベルネットワークストレージシステム。
【請求項２】
前記論理コネクションのそれぞれが、ソケットコネクションである請求項１に記載のネットワークストレージシステム。
【請求項３】
前記ソケットコネクションのそれぞれが、ＴＣＰ／ＩＰソケットコネクションである請求項２に記載のネットワークストレージシステム。
【請求項４】
前記論理コネクションのそれぞれが、該論理コネクションを介して実行される複数のＩ／Ｏ動作が終わるまで常駐したままである請求項１に記載のネットワークストレージシステム。
【請求項５】
前記ホストコンピュータが、１つのＩ／Ｏ動作を複数の単位Ｉ／Ｏ動作に分割するようにプログラムされ、かつ、前記複数の並行な論理コネクションのそれぞれの論理コネクションを介して、複数の単位Ｉ／Ｏ動作を並行して実行するようにプログラムされた請求項１に記載のネットワークストレージシステム。
【請求項６】
前記ストレージサーバが、仮想ブロックレベルストレージアクセスをホストコンピュータに提供し、それによって、ホストコンピュータで実行されているユーザレベルプロセスにとっては、ブロックサーバが、局所的なディスクドライブストレージのように見える請求項１に記載のネットワークストレージシステム。
【請求項７】
前記ストレージサーバが、複数のストレージパーティションを提供するように構成され、それらのストレージパーティションのそれぞれが、異なるホストコンピュータに割り付けられる請求項１に記載のネットワークストレージシステム。
【請求項８】
前記ストレージサーバが、１つのホストコンピュータだけに割り当てられた第１のストレージパーティションを有し、それによって、そのホストコンピュータで実行されているユーザレベルプロセスにとっては、第１のストレージパーティションが、専用の局所的ディスクドライブのように見える請求項１に記載のネットワークストレージシステム。
【請求項９】
前記ストレージサーバが、第２のホストコンピュータだけに割り当てられた第２のストレージパーティションをさらに有する請求項８に記載のネットワークストレージシステム。
【請求項１０】
前記ストレージサーバが、複数のホストコンピュータによって共有される第２のストレージパーティションをさらに有する請求項８に記載のネットワークストレージシステム。
【請求項１１】
前記ホストコンピュータにＩ／Ｏ動作を実行させる前に、ストレージサーバがホストコンピュータを認証する認証プロトコルを、ホストコンピュータとストレージサーバとが実行する請求項１に記載のネットワークストレージシステム。
【請求項１２】
前記ストレージサーバがホストコンピュータに割り当てられているパーティションをそのホストコンピュータに通知する発見プロトコルを、ホストコンピュータとストレージサーバとが実行する請求項１に記載のネットワークストレージシステム。
【請求項１３】
前記論理コネクションの少なくとも１つが、汎用コンピュータネットワークを介したものである請求項１に記載のネットワークストレージシステム。
【請求項１４】
前記論理コネクションの少なくとも１つが、イーサネット（登録商標）ネットワークを介したものである請求項１に記載のネットワークストレージシステム。
【請求項１５】
前記第１および第２の論理コネクションが、独立するコンピュータネットワークを介して存在する請求項１に記載のネットワークストレージシステム。
【請求項１６】
前記論理コネクションのそれぞれが、各リーダ／ライターペアの間に存在する請求項１に記載のネットワークストレージシステム。
【請求項１７】
前記ホストコンピュータと前記ストレージサーバとが、少なくとも１つのスイッチによってお互いに接続される請求項１に記載のネットワークストレージシステム。
【請求項１８】
前記ホストコンピュータおよび前記ストレージサーバが、それぞれ、ホストコンピュータとストレージサーバとの間に冗長なネットワーク接続を提供する２つのネットワークインタフェースを含む請求項１に記載のネットワークストレージシステム。
【請求項１９】
ホストコンピュータのためのデータを記憶するシステムであって、
ネットワークに接続された複数のストレージサーバであり、該ストレージサーバのそれぞれは、ディスクドライブからなるアレイと、アレイコントローラと、プロセッサとを備えた、前記複数のストレージサーバと、
前記ネットワークに接続され、かつ、前記ストレージサーバにデータを記憶するようにプログラムされた複数のホストコンピュータと、
前記複数のストレージサーバを前記複数のホストコンピュータにお互いに接続する少なくとも１つのスイッチと、を備え、
各ホストコンピュータが、並行なＩ／Ｏ動作を実行するために、ネットワークを介してストレージサーバへの複数の並行なソケットを開くようにプログラムされた、前記システム。
【請求項２０】
ソケットが、ＴＣＰ／ＩＰソケットである請求項１９に記載のシステム。
【請求項２１】
複数のストレージサーバのそれぞれが、仮想ブロックレベルストレージアクセスをホストコンピュータに提供し、それによって、ホストコンピュータで実行されているユーザレベルプロセスにとっては、ブロックサーバが、局所的なディスクドライブストレージのように見える請求項１９に記載のシステム。
【請求項２２】
前記複数のホストコンピュータの少なくとも第１のホストコンピュータが、１つのＩ／Ｏ動作を複数の単位Ｉ／Ｏ動作に分割するようにプログラムされ、かつ、第１のホストコンピュータとターゲットストレージサーバとの間のそれぞれの論理ソケットコネクションを介して、複数の単位Ｉ／Ｏ動作を並行して実行するようにプログラムされた請求項１９に記載のシステム。
【請求項２３】
前記複数のストレージサーバのうちの第１のストレージサーバが、複数の可変サイズのパーティションを提供するように構成され、それらのパーティションのそれぞれが、複数のホストコンピュータの異なるホストコンピュータに割り付けらる請求項１９に記載のシステム。
【請求項２４】
前記複数のストレージサーバのうちの第１のストレージサーバが、複数のホストコンピュータの第１のホストコンピュータだけに割り当てられた第１のパーティションを有し、それによって、第１のホストコンピュータにとっては、第１のパーティションが局所的なディスクドライブのように見える請求項１９に記載のシステム。
【請求項２５】
前記第１のストレージサーバが、複数のホストコンピュータの第２のホストコンピュータだけに割り当てられた第２のパーティションをさらに有する請求項２４に記載のシステム。
【請求項２６】
前記ホストコンピュータにＩ／Ｏ動作を実行させる前に、ストレージサーバがホストコンピュータを認証する認証プロトコルを、ホストコンピュータとストレージサーバとが実行する請求項１９に記載のシステム。
【請求項２７】
前記ストレージサーバがホストコンピュータに割り当てられているパーティションをそのホストコンピュータに通知する発見プロトコルを、ホストコンピュータとストレージサーバとが実行する請求項１９に記載のシステム。
【請求項２８】
Ｉ／Ｏ動作を実行する方法であって、
１つかまたはそれ以上のコンピュータネットワークを介して、ホストコンピュータとブロックレベルストレージサーバとの間に第１および第２のＴＣＰ／ＩＰコネクションを確立し、
前記第１のＴＣＰ／ＩＰコネクションを介して第１のＩ／Ｏ動作を実行し、前記第２のＴＣＰ／ＩＰコネクションを介して第２のＩ／Ｏ動作を実行し、前記Ｉ／Ｏ動作のそれぞれが、ホストコンピュータとストレージサーバとの間でＩ／Ｏデータを転送することからなり、
前記第１および第２のＴＣＰ／ＩＰコネクションが常駐状態に維持され、それによって、それぞれのＴＣＰ／ＩＰコネクションが、さらなるＩ／Ｏ動作を実行するのに使用される、前記方法。
【請求項２９】
前記第１および第２のＴＣＰ／ＩＰコネクションが、独立したコンピュータネットワークを介して確立される請求項２８に記載の方法。
【請求項３０】
前記第１のＩ／Ｏ動作が、ホストコンピュータで実行されている第１のアプリケーションから発行された第１のＩ／Ｏ要求であり、前記第２のＩ／Ｏ動作が、ホストコンピュータで実行されている第２のアプリケーションから発行された第２のＩ／Ｏ要求である請求項２８に記載の方法。
【請求項３１】
前記第１および第２のＩ／Ｏ動作が、ホストコンピュータで実行されているプロセスによって発行されたＩ／Ｏ要求の単位Ｉ／Ｏ動作であり、それによって、Ｉ／Ｏ要求が、複数のＴＣＰ／ＩＰコネクションを介して、並行して実行される請求項２８に記載の方法。
【請求項３２】
前記ホストコンピュータとストレージサーバとの間に第３のＴＣＰ／ＩＰコネクションを確立し、ストレージサーバがホストコンピュータを認証する認証手順を実行するために、第３のＴＣＰ／ＩＰコネクションを使用することをさらに備えた請求項２８に記載の方法。
【請求項３３】
前記ストレージサーバから第３のＴＣＰ／ＩＰコネクションを介してホストコンピュータへアクセス情報を通知することをさらに備え、前記アクセス情報が、前記ホストコンピュータだけに割り当てられたアクセス特権を指定する請求項３２に記載の方法。
【請求項３４】
ホストコンピュータで実行されているユーザレベルプロセスから受信した入力／出力（Ｉ／Ｏ）要求を実行する方法であって、
ホストコンピュータにおいて、Ｉ／Ｏ要求を複数の単位Ｉ／Ｏ動作に分割し、
ホストコンピュータとターゲットストレージサーバとの間の複数の論理ネットワーク接続のそれぞれを介して、複数の単位Ｉ／Ｏ動作を並行して実行し、それによって、Ｉ／Ｏデータが、前記論理ネットワーク接続のそれぞれを介して、ホストコンピュータとストレージサーバとの間で転送される、
ことからなる方法。
【請求項３５】
前記論理ネットワーク接続のそれぞれが、ソケットコネクションである請求項３４に記載の方法。
【請求項３６】
前記論理ネットワーク接続のそれぞれが、ＴＣＰ／ＩＰソケットコネクションである請求項３４に記載の方法。
【請求項３７】
前記論理ネットワーク接続の少なくとも１つが、汎用コンピュータネットワークを介したものである請求項３４に記載の方法。
【請求項３８】
ブロックレベルストレージをコンピュータネットワークを介してホストコンピュータに提供するストレージサーバシステムであって、
プロセッサと、コントローラに結合されたディスクドライブからなるアレイと、ストレージサーバをコンピュータネットワークに接続するネットワークインタフェースとを備えたストレージサーバと、
ディスクドライブからなるアレイの記憶空間を複数のストレージパーティションに細分化する機能を提供し、かつ、１つのパーティションをネットワーク上の１つのホストコンピュータに割り付ける機能を提供し、それによって、ストレージサーバが、複数のホストコンピュータによって共有され、かつ、パーティションが、ホストコンピュータに割り付けられると、そのホストコンピュータのユーザレベルプロセスにとっては、そのパーティションが、局所的なディスクドライブに見えるソフトウェアシステムと、
を備えたストレージサーバシステム。
【請求項３９】
前記ソフトウェアシステムが、ホストコンピュータで実行されるホストドライバコンポーネントを備え、かつ、ストレージサーバのプロセッサによって実行されるサーバドライバコンポーネントを備え、ホストドライバコンポーネントとサーバドライバコンポーネントとが、ＴＣＰ／ＩＰコネクションによってコンピュータネットワークを介して通信する請求項３８に記載のストレージサーバシステム。
【請求項４０】
前記ソフトウェアシステムが、コンフィギュレーションおよびマネージメントプログラムをさらに備え、そのコンフィギュレーションおよびマネージメントプログラムは、ストレージサーバで実行され、かつ、パーティションを生成し、ウェブブラウザを使用して、コンピュータネットワークを介して、ホストに割り当てる機能を提供する請求項３８に記載のストレージサーバシステム。
【請求項４１】
前記ソフトウェアシステムが、パーティションを共有するのを可能にするために、１つのパーティションを複数のホストコンピュータに割り付ける機能をさらに提供する請求項３８に記載のストレージサーバシステム。
【請求項４２】
前記パーティションが、ユーザが定義することのできるサイズを有する請求項３８に記載のストレージサーバシステム。
【請求項４３】
前記ソフトウェアシステムが、ストレージサーバへの複数のそれぞれのＴＣＰ／ＩＰコネクションを介して、複数の入力／動作をホストコンピュータが並行して実行できる能力をサポートする請求項３８に記載のストレージサーバシステム。
【請求項４４】
チャレンジレスポンスプロトコルを使用してストレージサーバがホストコンピュータを認証する認証プロトコルを、ソフトウェアシステムが実行する請求項３８に記載のストレージサーバシステム。
【請求項４５】
前記ストレージサーバがホストコンピュータに割り当てられているストレージパーティションをそのホストコンピュータに通知する発見プロトコルを、ソフトウェアシステムが実行する請求項３８に記載のストレージサーバシステム。
【請求項４６】
コンピュータネットワークを介してストレージアクセスを提供する方法であって、
コンピュータネットワークを介して、ホストコンピュータとストレージサーバとの間に論理コネクションを確立し、
論理コネクションを介して認証手順を実行し、それによって、ストレージサーバが、ホストコンピュータを認証し、
認証手順が失敗した場合には、論理コネクションを終了し、かつ、ホストコンピュータがストレージサーバの記憶リソースにアクセスするのを拒否し、
認証手順が成功した場合には、ストレージサーバから論理コネクションを介してホストコンピュータへアクセス情報を提供し、ホストコンピュータが記憶リソースにアクセスするのを可能にし、少なくともなんらかのアクセス情報は、そのホストコンピュータに固有のものである、
ことからなる前記方法。
【請求項４７】
前記論理コネクションが、ＴＣＰ／ＩＰコネクションである請求項４６に記載の方法。
【請求項４８】
前記認証手順が、ストレージサーバがランダム化チャレンジをホストコンピュータに送信し、その後に、ランダム化チャレンジに対するホストの応答が期待された応答と一致するかどうかを判定することからなる請求項４６に記載の方法。
【請求項４９】
前記認証手順が、ストレージサーバとホストコンピュータとに共通するソフトウェアバージョンを選択し、選択されたソフトウェアバージョンに対応する認証方法を選択することをさらに備えた請求項４６に記載の方法。
【請求項５０】
前記アクセス情報が、ホストコンピュータがＩ／Ｏ動作を実行するために接続してもよい一組の動的ポートを指定する請求項４６に記載の方法。
【請求項５１】
前記アクセス情報が、ホストコンピュータによって確立されてもよいストレージサーバへの論理コネクションの最大数を指定する請求項４６に記載の方法。
【請求項５２】
前記アクセス情報が、ホストコンピュータに割り付けられたストレージパーティションの数と、それらのストレージパーティションのサイズとを指定する請求項４６に記載の方法。
【発明の詳細な説明】
【０００１】
本明細書は、本発明を実施する市販ソフトウェアの詳細な説明を記載した添付書類Ａ〜Ｄを含む。これらの添付書類は、説明のために提供されたものであり、本発明の範囲を規定または限定するものではない。
【０００２】
【発明の属する技術分野】
本発明は、コンピュータネットワークのためのストレージ（記憶）システムに関し、より詳細には、ネットワーク上の記憶リソース（記憶資源）にブロックレベルでアクセスするためのソフトウェアアーキテクチャに関する。
【０００３】
【従来の技術】
ホストコンピュータがネットワーク上のハードディスクドライブおよびその他の記憶リソースを共有するのを可能にする様々な種類のアーキテクチャが、存在する。１つの良く知られている種類のアーキテクチャは、中央ファイルマネージャを使用することである。このアーキテクチャの１つの問題は、中央ファイルマネージャの不具合が、システム全体を動作不能にする場合があることである。もう１つの問題は、多くのソフトウェアアプリケーションは、中央ファイルマネージャを使用するようには設計されていないことである。
【０００４】
ストレージアーキテクチャの中には、中央ファイルマネージャを使用せずに、ホストコンピュータがネットワークを介して記憶リソースに直接にアクセスするのを可能にすることによって、これらの欠陥を克服したものもある。典型的には、これらのアーキテクチャは、ホストが、ネットワーク接続（コネクション）を介して、（ファイルレベルとは対照的に）ブロックレベルで記憶リソースにアクセスするのを可能にする。この種のアーキテクチャの１つの問題は、Ｉ／Ｏ要求の障害が、同一ホストからのその他の未処理の要求を遅延させる場合があることである。もう１つの問題は、このアーキテクチャが、ネットワーク障害にきわめて弱いことである。
【０００５】
【課題を解決するための手段】
本発明は、中央ファイルマネージャを必要とせずに、ディスクアレイのような記憶リソースにコンピュータネットワークを介してブロックレベルでアクセスするためのシステムアーキテクチャを備える。このアーキテクチャは、単独でまたは組み合わせて実施されてもよい様々な進歩性のある特徴を含む。
【０００６】
アーキテクチャの１つの特徴は、同一のホストコンピュータ（「ホスト」）からの並行な入力／出力（Ｉ／Ｏ）要求が、別個の論理ネットワーク接続またはソケット（好ましくは、ＴＣＰ／ＩＰソケット）を介して処理されることである。例えば、好ましい実施形態においては、与えられたホストは、与えられたブロックレベルストレージサーバとの２つのソケットコネクション（接続）を確立し、一方のＩ／Ｏ要求を実行するのに一方のソケットを使用し、他方のＩ／Ｏ要求を実行するのに他方のソケットを使用することができる。その結果として、一方のＩ／Ｏ要求の障害または遅延が、他方のＩ／Ｏ要求を遮りあるいは妨害することがない。
【０００７】
アーキテクチャのもう１つの特徴は、異なる種類および異なる帯域幅のネットワークも含めて複数のネットワークを介してソケットを確立することができ、大きなフォールトトレランスを提供することである。例えば、与えられたホストコンピュータとストレージサーバとは、ＴＣＰ／ＩＰプロトコルをサポートする２つのネットワークによって接続されてもよく、２つのネットワークの一方は、他方よりもきわめて遅い転送速度を提供してもよい。それらのネットワークの一方が、適切に機能している限りは、ホストは、ブロックサーバへの論理コネクション（接続）を確立し、Ｉ／Ｏ要求を実行することができる。
【０００８】
一実施形態においては、アーキテクチャは、ホストコンピュータ上で実行されるホスト側デバイスドライバおよびホスト側リーダ／ライタコンポーネント（構成要素）を含む。さらに、アーキテクチャは、ブロックレベルストレージサーバ上で実行されるサーバ側デバイスドライバおよびサーバ側リーダ／ライタコンポーネントを含む。リーダ／ライタコンポーネントは、好ましくは、ペア（対、１つのホスト側リーダ／ライタプロセスおよび１つのサーバ側リーダ／ライタプロセス）で確立され独立したプロセスとして実行され、それぞれのペアは、ネットワークを介して、それぞれのソケットだけのために使用される。例えば、２つの論理コネクションが、与えられたホストコンピュータと与えられたストレージサーバとの間に確立されると、それぞれのそのようなソケットは、リーダ／ライタプロセスの異なるペアによって管理される。リーダ／ライタプロセスおよびソケットは、好ましくは、複数のＩ／Ｏ要求を通して常駐したままである。デバイスドライバおよびリーダ／ライタプロセスは、ストレージサーバのブロックレベルアクセスインタフェースをホストコンピュータにエクスポートするように動作し、それによって、ホストコンピュータにとっては、ブロックサーバのディスクドライブが、局所的な記憶リソースのように見える。
【０００９】
アーキテクチャの進歩性のある１つの特徴によれば、ホストプロセスからのＩ／Ｏ要求が、データ量のしきい値を超える転送を必要とする場合、ホストのデバイスドライバは、Ｉ／Ｏ要求を２つかまたはそれ以上の単位Ｉ／Ｏ動作に分割する。それぞれのそのような動作は、ターゲットストレージサーバとのそれぞれ異なるソケットコネクションに割り当てられ、それによって、単位Ｉ／Ｏ動作は、ネットワークを介して並行して実行され、関係するＩ／Ｏデータが転送されてもよい。アーキテクチャのこの特徴は、比較的に大きなネットワーク帯域幅を比較的に大きなＩ／Ｏ要求に割り付けるのを可能にする。
【００１０】
アーキテクチャのさらなる特徴は、ブロックレベルストレージサーバの物理記憶空間またはユニットを複数のパーティションに分割し、それらのパーティションをお互いに無関係にホストに割り付ける技法である。好ましい実施形態においては、１つのパーティションは、１つの特定のホストだけに割り付けられてもよく、あるいは、選択されたホストからなるグループに割り付けられてもよい（この場合には、異なるホストは、そのパーティションに対する異なるアクセス特権を有してもよい）。１つの特定のホストに割り当てられた１つのパーティションまたは複数のパーティションは、１つかまたはそれ以上の局所的なディスクドライブのように見え、かつ、そのように管理されてもよい。
【００１１】
アーキテクチャの進歩性のあるさらなる特徴は、認証および発見プロトコルであり、そのプロトコルによって、ストレージサーバが、ホストを認証し、その後に、ホストに記憶リソースへのアクセスを許す前に、アクセス情報をそのホストに提供する。好ましい実施形態においては、ホストが、立ち上げられたとき、ホストは、まず最初に、ストレージサーバへのコンフィギュレーションソケットコネクションを確立する。このコンフィギュレーションソケットを使用して、ストレージサーバは、好ましくは、ドライバソフトウェアのバージョンに基づいたチャレンジレスポンス法を使用して、ホストを認証する。認証が成功すれば、ストレージサーバは、ストレージサーバへのデータコネクションのためにホストによって使用されるであろう動的ポートの識別子のようなアクセス情報と、そのホストに割り当てられたストレージサーバのパーティションに関する情報とをホストに提供する。アーキテクチャのこの特徴は、許可されないアクセスを防止する高い安全性を提供し、ストレージパーティションを個々のホストに確実に割り当てることができる。
【００１２】
【発明の実施の形態】
以下、説明のためのものであり本発明の範囲を限定するものではない本発明の特定の実施形態の図面を参照して、これらの特徴およびその他の特徴を説明する。
【００１３】
本セクションおよび添付書類に記載されるシステムアーキテクチャは、単独でまたは組み合わせて使用されてもよい本発明の様々な特徴を含む。いくつかのこれらの特徴は、他の特徴を備えずに実施されてもよく、および／または、特許請求の範囲に規定された本発明の範囲から逸脱することなく、ここに記載されたものとは異なって実施されてもよい。
【００１４】
Ｉ．概論
本発明は、１つかまたはそれ以上のコンピュータネットワークを介してブロックレベルストレージアクセスを提供するシステムアーキテクチャからなる。このアーキテクチャは、１つのネットワークまたは組み合わせられたネットワークを介して通信するホストコンピュータとブロックレベルストレージサーバとをいくつでも組み込めるように設計される。一実施形態においては、アーキテクチャは、ＴＣＰ／ＩＰコネクションを介して、仮想ストレージブロックをエクスポートする。好ましい実施形態において、ＴＣＰ／ＩＰは、ホストコンピュータとブロックレベルストレージサーバとの間の通信に使用されるので、与えられたシステムのホストコンピュータとブロックサーバとをお互いに接続するのに様々なネットワークトポロジーを使用してもよい。例えば、比較的に小さなシステムの場合、ホストコンピュータとストレージサーバとは、ハブによってお互いに接続されてもよく、より大きなシステムの場合には、ハブは、スイッチに取り替えられてもよい。
【００１５】
図１には、本発明を具体化した典型的なシステムのハードウェアコンポーネントが示される。システムは、１０／１００／１０００Ｂａｓｅ−Ｔまたは１０００Ｂａｓｅ−ＳＸギガビットイーサネット（登録商標）カードのようなそれぞれのネットワークインタフェースカード１０６を介して、ネットワーク１００によってお互いに接続されたホストコンピュータ１０２（「ホスト」）およびブロックレベルＩＰストレージサーバ１０４（「ブロックサーバ」）を含む。ホストコンピュータ１０２は、サーバまたはユーザコンピュータとして動作するように構成された標準的なＰＣまたはワークステーションであってもよい。ブロックサーバ１０４は、ブロックレベルデータストレージサービスをネットワーク１００上のホストコンピュータ１０２に提供するネットワーク結合ＩＰストレージボックスまたはネットワーク結合ＩＰストレージデバイスであってもよい。
【００１６】
図示された実施形態においては、ブロックサーバ１０４は、ディスクドライブ１１２からなるアレイを制御するディスクアレイコントローラ１１０を含む。このために、米国特許第６，０９８，１１４号に記載された種類のディスクアレイコントローラ１１０が使用されてもよく、その場合には、ディスクドライブ１１２は、ＡＴＡ／ＩＤＥドライブであってもよい。ディスクアレイコントローラは、ＲＡＩＤ０、ＲＡＩＤ５、ＲＡＩＤ１０、および、ＪＢＯＤなどの様々なディスクアレイ構造をサポートしてもよく、また、好ましくは、複数のＩ／Ｏ要求を並行して処理することができるものである。さらに、ブロックサーバ１０４は、デバイスドライバおよび関係するソフトウェアを実行するためのＣＰＵボードおよびプロセッサ１０８を含む。また、ブロックサーバは、Ｉ／Ｏデータをキャッシュするための揮発性ＲＡＭ（図示しない）を含んでもよく、また、コンフィギュレーション情報（図８参照）を記憶するためのフラッシュメモリーまたはその他の不揮発性半導体メモリーを含んでもよい。
【００１７】
一実施形態においては、ネットワーク１００は、ＴＣＰ／ＩＰソケットをサポートするどのような種類のネットワークまたはどのような組み合わせのネットワークであってもよく、限定はしないが、ローカルエリアネットワーク（ＬＡＮ）、無線ＬＡＮ（例えば、８０２．１１　ＷＬＡＮ）、広域ネットワーク（ＷＡＮ）、インターネット、および、直接接続などが含まれる。１つの一般的な構成は、イーサネット（登録商標）ネットワークによって、ホスト１０２とブロックサーバ１０４とを局所的にお互いに接続して、イーサネット（登録商標）ベースＳＡＮ（ストレージエリアネットワーク）を生成することである。図１において破線で示されるように、ホスト１０２とブロックサーバ１０４とは、第２の組のネットワークカード１０６’を使用して、第２のネットワーク１００’によってお互いに接続され、フォールトトレランスを増大させてもよい（以下で説明するように）。２つのネットワーク１００、１００’は、異なるメディアを使用しまた異なる転送速度を提供する異なる種類のネットワークであってもよい。様々なネットワークオプションのいくつかが、図３を参照して以下でより詳細に説明される。
【００１８】
アーキテクチャのソフトウェアコンポーネント（構成要素）が、図２に示される。ホスト側１０２のソフトウェアアーキテクチャは、Ｕｎｉｘ（登録商標）、Ｗｉｎｄｏｗｓ（登録商標）　ＮＴ、または、Ｌｉｎｕｘのようなオペレーティングシステム（Ｏ／Ｓ）２０２と、オペレーティングシステム２０２と通信するホスト側デバイスドライバ２０４（「ホストドライバ」）と、ホストドライバ２０４と通信するリーダ／ライタ（ＲＷ）コンポーネント２００ａ（「エージェント」とも呼ばれる）とを含む。ストレージ側１０４のソフトウェアアーキテクチャは、リーダ／ライタ（ＲＷ）コンポーネント２００ｂと、ストレージ側のデバイスドライバ２０６（「サーバドライバ」）とを含み、それらは、ＣＰＵボードのプロセッサ１０８（図１）によって実行される。サーバドライバ２０６は、サーバ側のＲＷコンポーネント２００ｂから受信したＩ／Ｏ要求に応じて、ディスク操作を開始する。
【００１９】
ＲＷコンポーネント２００ａ、２００ｂは、好ましくは、２つで一組（１つのホスト側ＲＷプロセスおよび１つのサーバ側ＲＷプロセス）として確立された独立したプロセスとして実行され、それぞれのペアは、ネットワーク１００を介して、それぞれのＴＣＰ／ＩＰソケットだけのために使用される。ホストＲＷ２００ａは、一般的には、ホストドライバ２０４からＩ／Ｏ要求を「読み込む」ことによって、そして、それらの要求をネットワーク１００へ「書き込む」ことによって動作する。同様に、ストレージＲＷ２００ｂは、一般的には、ネットワーク１００からＩ／Ｏ要求を読み込むことによって、そして、これらの要求をサーバドライバ２０６に書き込むことによって動作する。このプロセスは、その他のＲＷペアによる転送と同時に発生してもよく、また、ネットワーク１００を介してどのような方向に発生してもよい。また、ＲＷコンポーネント２００は、好ましくは、転送されたＩ／Ｏデータのエラーチェックを実行する。
【００２０】
それぞれのＲＷプロセス（および、それらの対応するソケット）は、好ましくは、それらのマシン１０２、１０４それぞれに常駐したままであり、コネクションに障害が発生し、あるいは、コネクションを終了するまでは、Ｉ／Ｏ要求を先入れ先出し方式で１つずつ処理する。ホストコンピュータ１０２は、専用コンフィギュレーションソケットを介して、関係するブロックサーバ１０４にサービス要求を送信することによって、ソケットを確立する。ソケットコネクションが、ＲＷペア２００ａと２００ｂとの間に確立されると、ソケットは、ホストコンピュータ１０２とブロックサーバ１０４との間の双方向トラフィックを制御する。
【００２１】
図示された実施形態において、ＲＷコンポーネント２００は、それぞれ、ホストドライバ２０４およびサーバドライバ２０６から独立したプロセスとして動作する。あるいは、ホスト側のＲＷ２００ａおよびストレージ側のＲＷ２００ｂは、例えば、以下に述べるものの１つかまたはそれ以上として実施されてもよい。すなわち、（ａ）（それぞれが）ホストドライバ２０４およびサーバドライバ２０６の一部、（ｂ）（それぞれが）独立したデバイスドライバ２０４、２０６、（ｃ）独立したカーネルスレッド、（ｄ）１つのプロセス内の複数のスレッド、（ｅ）複数のプロセス内の複数のスレッド、（ｆ）１つのスレッド内の複数のプロセス。
【００２２】
ホストコンピュータ１０２は、与えられた１つのブロックサーバ１０４への複数の論理コネクション（ソケット）を確立してもよく、および／または、以下で説明するように、複数の異なるブロックサーバ１０４へのソケットを確立してもよい。この特徴の大きな利点は、それによって、同一ホストからの複数のＩ／Ｏ要求を遮ることなく並行して処理できることであり（それぞれが、別個のソケットを介して）、１つのソケットに障害が発生した場合、その他のソケットを介して実行されるＩ／Ｏ要求は、その影響を受けない。それぞれのソケットは、それぞれのＲＷペアによって管理される。
【００２３】
ホストドライバ２０４の重要な役割は、ブロックサーバ２０４によって提供されるストレージを仮想化することであり、それによって、オペレーティングシステムおよびその他のユーザレベルプロセスのようなホスト上のより高いレベルのすべてのソフトウェアプロセスは、ブロックサーバストレージを、１つかまたはそれ以上の局所的な物理ディスクドライブとみなすことができる。この役割を実現するために、ホストドライバは、そのようなコネクションの存在またはその他のネットワークの詳細をなにもユーザレベルプロセスに通知することなく、Ｉ／Ｏ要求をＴＣＰ／ＩＰソケットコネクションに動的に割り当てる。ブロックサーバ１０４は、好ましくは、ホストのユーザレベルプロセスにとっては、ＳＣＳＩデバイスのように見え、従来のボリュームマネージャを使用することができる。
【００２４】
以下の第ＩＩＩのセクションで説明するように、アーキテクチャの一実施形態は、ブロックサーバ１０４の物理ストレージを複数の可変サイズのパーティションに分割するのを可能にする。そのようなパーティションのそれぞれは、１つかまたはそれ以上のホストに独立して割り当てられてもよく、また、それらのパーティションが独立した物理ディスクドライブとみなされて管理されるように構成されてもよい。別の実施形態においては、パーティションに分割することなく、ブロックレベルアクセスが、ホストに提供されてもよい。
【００２５】
図３は、与えられたシステムのホスト１０２とブロックサーバ１０４とをお互いに接続するのに使用される様々なネットワーク１００およびネットワークコンポーネントのいくつかを示す。これらには、ハブ３０２（ＬＡＮセグメントを接続するのに一般的に使用される）、インターネット３０４、ルータ３０６（ヘッダー情報に基づいてパケットを送出するコンピュータ）、スイッチ３０８（ＬＡＮセグメント間でパケットをフィルタリングおよび送出するデバイス）、および、ゲートウェイ３１０（２つの異なる種類のネットワークをお互いに接続するコンピュータ）が含まれる。このシステムアーキテクチャによれば、これらのネットワークオプションのどのような組み合わせでも、与えられたホストコンピュータ１０２とブロックサーバ１０４とをお互いに接続するのに使用することができる。
【００２６】
このアーキテクチャの大きな特徴は、ネットワーク１００のトラフィックが氾濫したときに、ネットワーク１００のアドミニストレータが、ネットワーク１００の能力をオンザフライで増大させることができ、あるいは、データをなんら消失させることなく、ネットワーク１００のハードウェアを変更することができることである。ホスト側１０２およびストレージ側１０４のソフトウェアコンポーネントは、従来の方法を用いて、新しいネットワーク１００コネクションが利用可能になったときにそれらのコネクションを検出および使用するように、また、コネクションが確立されるまで、動作を再試行するように構成される。例えば、ネットワーク１００のアドミニストレータは、まず最初に、ネットワークハブ３０２を用いて、３０台のホストコンピュータ１０２を少数のブロックサーバ１０４に接続してもよい。コンピュータの数が、ネットワークハブ３０２がもはや適切なものではない段階に達したとき、ネットワーク１００をオフラインにすることなく、１０００ポートのスイッチが、ネットワーク１００に追加され、ハブ３０２は、取り除かれる。アーキテクチャは、このような役割をなす。なぜなら、ホストＲＷ２００ａは、新しい物理的コネクションが利用可能になると、ストレージＲＷ２００ｂへの新しいソケットコネクションを自動的に生成するからである。
【００２７】
アーキテクチャおよびそれに関連するストレージ制御プロトコルは、ブロック単位（例えば、５１２バイトのブロック）でアクセスすることのできる論理的に連続するバイトアレイとして、記憶リソースをホストコンピュータ１０２に提供する。実施形態の論理データストラクチャは、バイトレベルアクセスをサポートするが、ディスクドライブは、典型的には、所定のバイト数からなるブロックをエクスポートする。したがって、与えられたブロックにアクセスするために、ブロックアドレス（セクター番号）およびブロック（セクター）数が、提供される。一実施形態においては、プロトコルは、６４ビットの論理ブロックアドレス（ＬＢＡ）および６４ビットのセクター数をエクスポートする。書き込み動作時には、ホスト側１０２において、Ｉ／Ｏ書き込みデータ要求が、ブロックストラクチャの中に入れられる。ブロック要求およびデータが、ホストＲＷプロセス２００ａによって管理される１つかまたはそれ以上のソケットコネクションを介して、ブロックサーバ１０４に送信される。さらに、アーキテクチャは、順次にではなくデータを記憶するのを可能にし、記憶媒体が、その空間を効率的に分割され、使用されていないセグメントを再利用するのを可能にする。
【００２８】
図４に示されるのは、ネットワーク１００を介して接続されたＲＷペア２００によって生成された例としてのソケットコネクション４００であり、ホストコンピュータ１０２をブロックサーバ１０４にリンクする。上述したように、ネットワーク１００は、実際には、複数のネットワーク１００からなり、まったく冗長なネットワーク１００を含んでもよい。それぞれのホストコンピュータ１０２は、Ｉ／Ｏ要求を処理するのに必要であれば、１つかまたはそれ以上のいずれかのブロックサーバ１０４への１つかまたはそれ以上のソケットコネクション４００を開くことができる（対応するＲＷペアを使用して）。例えば、ネットワーク１００の長い応答時間、ソケットコネクション４００における障害の発生、新しい物理的コネクションの使用可能性、および、Ｉ／Ｏ要求の増加に応じて、新しいソケットコネクション４００を開いてもよい。例えば、ホストコンピュータ１０２は、まず最初に、第１のブロックサーバ１０４への２つのソケット４００を開き、さらなる記憶リソースが必要になれば、その後に、もう１つのブロックサーバ１０４への２つのさらなるソケット４００を開いてもよい。図示されるように、もう１つのホストコンピュータ１０２が、同じ組のブロックサーバ１０４へのソケットコネクション４００を開いていてもよい。上述したように、それぞれのソケット４００は、Ｉ／Ｏ要求を処理する独立したパイプラインとして動作し、エラーが発生するかまたはホスト１０２がソケットコネクション４００を終了するまで、開かれたままである。
【００２９】
ＩＩ．Ｉ／Ｏ要求の処理
図５および図６は、ソケットコネクション４００を介したホストコンピュータ１０２とブロックサーバ１０４との間のＩ／Ｏ読み込み動作および書き込み動作（それぞれ）に使用されてもよいネットワークストレージプロトコルを示す。図５および図６において、垂直線の上部に配置されているのは、以下のコンポーネントを表現する略語である。
【００３０】
ＯＳ＝オペレーティングシステム
ＨＤ＝ホストドライバ２０４
ＨＲＷ＝ホストコンピュータのリーダ／ライタ２００ａ
Ｎ＝ネットワーク
ＳＲＷ＝（ブロックサーバの）サーバリーダ／ライタ２００ｂ
ＳＤ＝（ブロックサーバの）サーバドライバ２０６
時間は、一定の縮尺率で示されてはいないが、これらの図面において上から下に行くにしたがって増加する。一方の垂直線から他方の垂直線への矢印は、一般的には、コンポーネント間のメッセージまたはデータの流れを表現する。同じコンポーネント（垂直線）において開始および終了する矢印は、そのコンポーネントが実行する動作を表現する。図における小さな円は、集合イベント（ランデブーイベント）を表現する。
【００３１】
一実施形態においては、図５に示されるように、ホストリーダ／ライタ（ＨＲＷ）は、まず最初に、Ｉ／Ｏコマンドパケットとして、要求１Ｈをホストドライバ（ＨＤ）に送信し、ソケットが利用可能であることを通知する。このステップは、「そちらになすべき業務があれば、こちらに回して下さい」というメッセージとみなすことができる。図示されるように、ホストドライバは、その結果として、Ｉ／Ｏ要求を指定したコマンドパケットを戻すことによって、この要求に応答する。符号２Ｈを付された矢印によって表現されるように、ホストリーダ／ライタ（ＨＲＷ）は、コマンドパケットをネットワーク汎用命令に翻訳する。このステップは、様々なクロスプラットフォームのコンピュータ言語が共通のネットワーク１００上で機能するのを可能にする。ホストコマンドパケットすなわちホスト言語からネットワークコマンドパケットすなわちネットワーク言語への局所的な計算変換は、アーキテクチャに固有のものである。
【００３２】
この時点において、ホストリーダ／ライタ（ＨＲＷ）は、２つのネットワークイベント３Ｈおよび４Ｈを生成する。メッセージ４Ｈは、３Ｈから、ネットワーク１００を介して受信ネットワーク応答パケットを送ることを表現し、以下で説明される。メッセージ３Ｈは、ネットワーク汎用コマンドパケットが、既存の「ピン留めされた」ＴＣＰ／ＩＰコネクションを介して書き込まれることを表現する。好ましい実施形態においてこの転送が発生するためには、１Ｓによってランデブーが実施されなければならず、これは、ネットワーク１００がコマンドパケットを受信するように要求することを表現する。この要求１Ｓは、なすべき「業務」がなければ、無限に待つ能力を有する。ネットワーク１００とのランデブーが、達成されると、コマンドパケットが、ブロックサーバのリーダ／ライタ（ＳＲＷ）によって受信され、ステップ２Ｓにおいて、ＳＲＷによってサーバ側の言語に再翻訳される。ステップ２Ｓは、２Ｈで示されるホストコマンドパケットからネットワークコマンドパケットへの翻訳に類似する。
【００３３】
図５にさらに示されるように、メッセージ３Ｓは、サーバ側リーダ／ライタが、コマンドパケットをサーバドライバ（ＳＤ）２０６に送ることを表現する。コマンドパケットに含まれるものには、次のものがある。Ｉ／Ｏユニット番号（あらゆる種類のストレージディスクに存在するディスクドライブパーティションの論理識別子である小さな整数）、コマンド（読み込み動作または書き込み動作などのコマンドの種類を指示する小さな整数）、論理ブロック開始アドレス（Ｉ／Ｏ動作のための開始ブロックまたは開始セクターを指示する整数）、および、ブロック数（Ｉ／Ｏ動作のためのブロック数またはセクター数を指示する整数）。
【００３４】
コマンドパケットが、サーバデバイスドライバ（ＳＤ）に配信された後、応答がサーバ側リーダ／ライタ（ＳＲＷ）に送り返される。４Ｓによって示されるように、サーバ側リーダ／ライタは、ステップ４Ｓにおいて、この応答パケットをストレージ側命令からネットワーク命令に変換する。それに続いて、５Ｓおよび６Ｓによって示されるように、応答パケットのネットワーク書き込み（５Ｓ）と、読み込みによるＩ／Ｏデータのネットワーク書き込み（６Ｓ）とが、同時に発生する。
【００３５】
その後、ランデブーが、応答パケット（５Ｓ）とネットワーク読み込み要求（４Ｈ）との間で発生し、ネットワーク読み込み要求が達成されたことを表す。このステップは、次の２つの理由のために実行される。（１）ネットワーク応答パケットがエラーを検査された後、そのネットワーク応答パケットが完了ステータスを含むかどうかを判定する。そして、（２）読み込み動作が失敗である場合、要求されたデータがホスト１０２に戻されるのを防止する。それらが満足されると、５Ｈにおいて、ネットワーク応答パケットが、ホスト応答パケット言語に翻訳される。
【００３６】
次に、Ｉ／Ｏ（読み込み）データのために、ネットワーク読み込み要求６Ｈが、存在する。この要求６ＨはＩ／Ｏ読み込みデータのネットワーク書き込み６Ｓによって達成され、Ｉ／Ｏ読み込みデータがホストコンピュータへ転送される。最後に、７Ｈにおいて、ホストリーダ／ライタはＩ／Ｏ動作が完了したことをホストドライバに通知し、ホストドライバはオペレーティングシステムに通知する。
【００３７】
図６に示される書き込み動作に関しては、ステップは、３Ｓまで読み込み動作とまったく同様である。以下の記述は、残るＩ／Ｏデータ転送およびネットワーク１００の動作に関して、残りのステップを説明する。
【００３８】
このＩ／Ｏ動作に対応する書き込みデータは、ネットワーク１００によって受信され、ステップ３Ｓにおいて、受信動作が、ブロックサーバ１０４によってネットワーク１００に送られる。このネットワーク読み込みは、ステップ２Ｓにおいてネットワークコマンドパケットをストレージシステム言語に翻訳した後に発生する。これは、ネットワークコマンドパケットのエラー検査の後、ネットワーク読み込み動作が適切な長さで送られるのを保証するものである。ステップ４Ｓにおいて、ブロックサーバ１０４はストレージシステムコマンドパケットをサーバドライバ（ＳＤ）に送信する。このコマンドパケットは、読み込みの場合に説明したものと同じ種類の情報を含む。ＳＤは、指定された書き込み動作が論理的に（または、物理的に）完了した後、応答パケットを戻し、それに続いて、ステップ５Ｓにおいて、その応答パケットは、ネットワーク命令に変換される。このネットワーク応答パケットは、ステップ６Ｓにおいてネットワークにコマンドを送信することによって、ホストコンピュータ１０２に送信される。このネットワーク応答パケットは、ホストコンピュータ１０２によって受信され、ステップ６Ｈにおいてホスト応答パケットに翻訳される。それに続いて、ホストコンピュータ１０２は、Ｉ／Ｏ動作を完了するためにコマンドをＨＤに送信する。ステップ６Ｈおよび７Ｈは、図５に示される読み込み動作のステップに類似しており、ホストリーダ／ライタは、Ｉ／Ｏ動作が完了したことをホストドライバに通知し、ホストドライバはオペレーティングシステムに通知する。
【００３９】
添付書類ＡおよびＢは、本発明の一実施形態によるホスト側およびサーバ側の論理をより詳細に説明するものである。さらに、添付書類Ｃは、ホスト１０２とブロックサーバ１０４とが通信するプロトコルの一実施形態を詳細に説明するものである。これらの添付書類のいくつかの箇所は、いくつかのシステム機能しか動作することのできない試作段階の実施形態に対応している。
【００４０】
図７は、ユーザレベルアプリケーションからのＩ／Ｏ要求が、それらのアプリケーションに透過的に、すなわち、アプリケーションとソケットとの間の固定されたマッピングを必要とせずに、ＴＣＰ／ＩＰソケットコネクションにどのようにして動的に割り当てられるかを示す。さらに、図７は、一実施形態において、Ｉ／Ｏ要求を複数のソケットコネクションを介して並行して発行および実行することのできるより小さいＩ／Ｏ動作にどのようにして細分化することができるかを示す。この図においては、ホスト側のＲＷコンポーネント２００ａは、「エージェント」と呼ばれる。
【００４１】
この例において、ホスト１０２で実行されている複数のアプリケーション（ＡＰＰ１〜ＡＰＰ３）からのＩ／Ｏ要求は、複数のＴＣＰ／ＩＰコネクションを介して、並行して処理される。具体的には、それぞれのアプリケーションは、それぞれのＩ／Ｏ要求Ｒ１〜Ｒ３を要求キュー７３０に登録している。Ｉ／Ｏ要求が要求キュー７３０に登録されると、関連するブロックサーバへのコネクションを有する次の利用可能なエージェント２００ａが、キューから要求を取り出し、その要求の処理を開始することによって応答する。この例においては、第１のエージェントであるエージェント１が、要求Ｒ１を取り出し、そのエージェント自身のソケットコネクションを介して、Ｒ１の処理を開始する。同様に、要求Ｒ３は、エージェント５によって取り出され、そのエージェント５は、要求を処理し、そのエージェント５自身のソケットを介して、その要求を完了する。しかしながら、ＡＰＰ２からのＩ／Ｏ要求Ｒ２は、より大きなデータ転送を必要とする。したがって、ホストドライバは、Ｒ２を３つの単位Ｉ／Ｏ要求または動作に分解し、それらのＩ／Ｏ要求または動作のそれぞれは、それぞれのエージェント（エージェント２、３、および、４）によって、それぞれのソケットコネクションを介して、通常のＩ／Ｏ要求と同じように処理される。したがって、Ｉ／Ｏ要求Ｒ２のそれらの下位要求は、複数のコネクションを介して並行して処理され、効率を増大させることができる。
【００４２】
一実施形態においては、６４ｋバイトを超えるデータ転送を必要とするＩ／Ｏ要求は、６４ｋバイトかまたはそれ以下のブロックのＩ／Ｏ要求に細分化される。それぞれの単位Ｉ／Ｏ要求は、そのＩ／Ｏ要求に対応する元々のアプリケーションレベルＩ／Ｏ要求の識別子を備えたタグを適切に付けられる。単位Ｉ／Ｏ要求のすべてが、完了すると、ホストドライバは、アプリケーションレベルＩ／Ｏ要求の完了を報告する。この特徴の大きな利点は、それぞれのＩ／Ｏ要求に割り当てられるネットワーク帯域幅の大きさが、一般的には、転送されるＩ／Ｏデータの量に比例することである。
【００４３】
ＩＩＩ．ホストへのパーティションの割り付け
アーキテクチャに取り込まれてもよい１つの特徴は、それぞれのブロックサーバ１０４の物理記憶空間をより小さなユニットに効率的に分割し、それらのユニットを個々のホスト１０２に効率的に割り付けまたは割り当てるための技法である。この特徴を使用すると、複数のホスト１０２が、ブロックサーバを共有することができ、ホスト１０２のそれぞれは、自分専用のディスクドライブまたは自分専用のディスクドライブの組を「認識」することができる。この特徴の一実施形態が、図８に示される。
【００４４】
図８に示されるように、それぞれのブロックサーバ１０４のディスク空間全体が、複数の可変サイズのデータストレージユニットすなわち「パーティション」にセグメント化または細分化されてもよく、それぞれのパーティションは、他のパーティションとは無関係にアクセス特権を有してもよい。これらのストレージパーティションは、好ましくは、ネットワークアドミニストレータによって、ブロックサーバ１０４で実行されているコンフィギュレーションおよびマネージメントプログラム８２０に接続するための標準的なウェブブラウザ８１０を用いて、またはブロックサーバ１０４で実行されているコマンドシェルインタプリタに直接に接続するコマンドラインインタフェースユーティリティを用いて（図示しない）、生成されかつ割り付けられる。
【００４５】
それぞれのパーティションは、サイズ、「読み込み専用」、「読み書き」、または、アクセス前のゼロデータなどの属性によって、および許可されたホスト１０２のリストによって、独立して構成されてよい。例えば、パーティション＃１は、「２０ＧＢ、ホストＡからは読み込み専用、ホストＢおよびＣからは読み書き」であるように構成されてもよく、パーティション＃２は、「４０ＧＢ、ホストＡだけから読み書き」として構成されてもよい。さらに、それぞれのパーティションは、ホストのユーザレベルソフトウェアプロセスがパーティションを独立した物理ディスクドライブとみなして管理できるような形で、個々のホストコンピュータ１０２に確実にエクスポートされることが可能である。
【００４６】
好ましい実施形態においては、パーティションのそれぞれは複数のディスクドライブ１１２の記憶空間を含んでもよく、さらに、いずれかの与えられたディスクドライブ１１２の記憶空間はパーティションを生成するために細分化されてもよい。ブロックサーバ１０４内に現時点で定義されている１つかまたはそれ以上のパーティションごとに、コンフィギュレーション／マネージメントプログラム８２０は、それぞれのパーティションテーブル８３０を、ブロックサーバ１０４のフラッシュメモリーまたはその他の不揮発性メモリー８４０内に維持する。このテーブル８３０は、パーティション内に含まれるディスクドライブ（または、いくつかのディスクドライブ）およびセクターを指定するコンフィギュレーションデータ、そのパーティションを使用するのを許可された１つかまたはそれ以上のホスト１０２のＩＰアドレス（または、いくつかのＩＰアドレス）、および、それに関係するアクセス特権を含む。さらに、不揮発性メモリー８４０内に記憶されたパーティションテーブル８３０または別のコンフィギュレーションストラクチャは、好ましくは、そのブロックサーバとのＩ／Ｏ動作のためにそれぞれのホストによって確立されてもよいソケットコネクションの最大数を指示するデフォルト値またはアドミニストレータ指定データを含む。次のセクションで説明するように、好ましくは、立ち上げ中にホスト１０２は当該ホストが探し出したそれぞれのブロックサーバ１０４への専用コンフィギュレーションソケットコネクション４００を確立し、そのホストに割り当てられたパーティションのリスト（もしあれば）とそれらのパーティションのサイズとを得るために、このコンフィギュレーションコネクションを使用する。
【００４７】
一実施形態においては、１つのブロックサーバ１０４につき最大１００までのパーティションが生成されてもよく、また与えられた１つのホスト１０２につき最大１６までのパーティションが割り当てられてもよい。それぞれのホスト１０２は、論理ブロックアドレス（ＬＢＡ）０から始まるそのホストのそれぞれのパーティションを認識する。ブロックサーバ１０４は、それぞれのＩ／Ｏ要求で送信された（ＩＰアドレス、パーティション番号、ＬＢＡ）の組をＩ／Ｏ要求のたびに「物理ＬＢＡ」にマッピングする。パーティションへのアクセスは、好ましくは要求したホスト１０２のＩＰアドレスに基づいて、ブロックサーバ１０４によって認可または拒否される。
【００４８】
アーキテクチャのこの特徴を使用すれば、ネットワークアドミニストレータは、ホストで実行されているアプリケーションレベルソフトウェアに透過的に、ブロックサーバ記憶リソースをホスト１０４に柔軟にかつ動的に割り付けることができる。図８に示される例においては、ブロックサーバ１０４は、５つのセグメントまたはパーティションを有し、それぞれのパーティションは、可変のサイズを有する。パーティション０は、ブロックサーバで利用可能な割り当てられていないすなわち「空き」のディスク空間を表現し、そのパーティション０はさらなるパーティションを生成するのに使用されてもよく、および／または、すでに割り付けられているパーティションのサイズを増加させるのに使用されてもよい。この例においては、まず最初にパーティション１、２、および３が生成され、それぞれ、ホスト１、２、および３に割り当てられた。その後に、ホスト１のストレージ需要の増大に対処するために、新しいパーティションであるパーティション４が生成され、ホスト１に割り当てられた。ホスト１だけに割り付けられた２つのパーティション（１および４）は、ホスト１コンピュータ１０２に直接に設置されたディスクドライブの単一ドライブセグメントかまたは２つの別個の独立したディスクドライブのように見えるように構成されてもよい。図８においては、１つのパーティションが、１つのホスト１０２に割り当てられるように示されているが、１つのパーティションが、２つかまたはそれ以上のホスト１０２からなるグループに割り当てられてもよい。
【００４９】
コンフィギュレーション／マネージメントプログラム８２０は、好ましくは、アドミニストレータがパーティションを生成および管理するのを可能にする様々なコマンドおよび機能をサポートする。上述したこれらの役割に加えて、プログラム８２０は、パーティションを削除し、またパーティションの所有権を変更する機能を提供する。削除されたパーティションから得られる空間は、好ましくは、再利用され、「最適適合」アルゴリズムを用いて再び割り付けられる。
【００５０】
ＩＶ．認証および発見
アーキテクチャに取り込まれてもよいその他の特徴は、ブロックサーバ１０４がホスト１０２を認証するのを可能にするプロトコルである。具体的には、Ｉ／Ｏをすぐに開始させるのではなく、むしろ、それぞれのブロックサーバ１０４は、新しいホスト１０２にＩ／Ｏ動作を実行させる前に、その新しいホスト１０２を認証するように設計されてもよい。好ましい実施形態においては、認証プロセスは、ホスト側ドライバ２０４およびサーバ側ドライバ２０６内に含まれる「認証および発見」プロトコルの一部として実行される。
【００５１】
具体的には、好ましい実施形態においては、ホスト１０２は、立ち上げ時に、次の２つの方法の１つを使用して利用可能なブロックサーバ１０４を探し出す。すなわち、（１）アドミニストレータによって予め設定されたホスト側コンフィギュレーションファイルを使用し、あるいは、（２）そのホスト１０２のサブネット上のすべてのブロックサーバ１０４を発見するために、ブロードキャストパケットを使用する。（２）の方法によれば、それぞれのブロックサーバ１０４は、好ましくは、そのサーバ１０４を探し出し、ネットワークを介してそのサーバ１０４を遠隔から構成するのを可能にするデーモンプロセスを含むが、ＩＰアドレスは使用しない。そして、探し出されたブロックサーバ１０４ごとに、ホストは、認証および発見の段階に入り、その好ましい実施形態が図８に示されるが、エラー状態は示されていない。
【００５２】
図９に状態９１０によって示されるように、ホスト１０２は、まず最初にコネクション要求を探し出したブロックサーバ１０４に送信し、状態９１５において、ブロックサーバ１０４はその要求を受け入れることによって応答する。状態９２０において、ブロックサーバ１０４は、ブロックサーバ１０４によってサポートされるソフトウェアバージョンのリストとともに、認証「チャレンジ」の役割をなすブロックサーバによって生成された乱数を戻す。状態９２５において、ホスト１０２は、リストから適切なバージョンを選択し、ブロックサーバ１０４に応答する。また、ホスト１０２は、予め定められた一組の数学演算をブロックサーバ１０４から受信された乱数に対して実行する。これらの演算は、好ましくは、プロトコルのバージョンごとに異なり、ただ単に新しいバージョンを追加するだけで、セキュリティアーキテクチャを容易に強固なものにすることができる。バージョンによって指定された数学演算の結果として、ブロックサーバ１０４によって送信された乱数「チャレンジ」から得られた値は、チャレンジに対するホストの「応答」として、ブロックサーバ１０４に送り返される。そして、状態９３０において、ブロックサーバ１０４は、（ホストに送信されたチャレンジおよび選択されたバージョンを与えて）予想応答を計算し、この予想応答をホスト１０２からの実際の応答と比較することによって、ホスト１０２を認証する。その応答が予想応答と一致しなければ、アクセスは拒否され、ホスト１０２とブロックサーバ１０４との間のすべてのソケットが閉じられる（図示しない）。一致すれば、状態９３５において、ブロックサーバ１０４は認証に成功したことを通知する肯定応答をホスト１０２に送り返す。
【００５３】
状態９４０において、ホスト１０２は、与えられたブロックサーバ１０４においてホストに割り付けられる利用可能な容量を計算するようにとの要求を送信する。状態９４５において、ブロックサーバ１０４は、そのホストに割り当てられるパーティションの数およびそれらのパーティションのサイズを指定するデータによって、ホスト１０２に応答する。また、ブロックサーバ１０４は、Ｉ／Ｏトラフィックのためにホスト１０２とブロックサーバ１０４との間で確立されてもよいデータコネクションの最大数を指定し、かつ、それらのコネクションを確立するのに使用されてもよい動的ポートを指定するデータを戻す。状態９５０において、ブロックサーバ１０４は、許可されたホスト１０２から発生するトラフィックのために「リッスン（Ｌｉｓｔｅｎ）」ソケットを確立する。その後、ホストは、ブロックサーバによって指定されたデータコネクションの最大数まで、これらのソケットへのコネクションを確立してもよい。
【００５４】
したがって、ホスト１０２と特定のブロックサーバ１０４との間の認証および発見の段階が完了すれば、ホスト１０２は、ブロックサーバに関する次の情報を通知されている。すなわち、（１）ホストは、データのためにどの動的ポートに接続できるか、（２）ホストに割り当てられたパーティションの数、（３）それらのパーティションのサイズ、である。
【００５５】
認証および発見の段階を実施する市販ソフトウェアのさらなる詳細な説明が、添付資料Ｄに提供される。「ネットワークストレージユニット」または「ＮＳＵ」という用語は、添付資料Ｄの全体を通して、ブロックサーバ１０４を実施する市販ソフトウェアを参照するのに使用される。
【００５６】
特定の好ましい実施形態によって本発明を説明したが、この分野で通常の知識を有する者が考えだすことのできる異なる実施形態は、ここで説明した特徴および利点のすべてを提供しない実施形態も含めて、本発明の範囲内にある。したがって、本発明の範囲は、添付の特許請求の範囲に記載される。
【００５７】
添付資料Ａ
2004506980.tif 000003
2004506980.tif 000004
【００５８】
添付資料Ｂ
2004506980.tif 000005
2004506980.tif 000006
【００５９】
添付資料Ｃ
この資料は、ブロックサーバと通信するために、クライアントホストコンピュータが使用するストレージ制御プロトコル（ＳＣＰ）を説明するものである。
【００６０】
ストレージ制御プロトコルは、現在、ＴＣＰ／ＩＰを介して実行され、様々なプラットフォームで利用することができる。サポートされるオペレーティングシステムのいくつかの例としては、Ｗｉｎｄｏｗｓ（登録商標）　ＮＴ、Ｌｉｎｕｘ、ＭａｃＯＳ、Ｗｉｎｄｏｗｓ（登録商標）　２Ｋ、ＦｒｅｅＢＳＤ、および、Ｓｏｌａｒｉｓなどがある。この資料は、主として、クライアントホストコンピュータの観点から書かれたものである。
【００６１】
読み込みコマンドまたは書き込みコマンドは、１２８キロバイト（１２８ＫＢ）のデータしか要求することができない。
コネクション
現在、ブロックサーバとのＩ／Ｏを実行するために要求されるのは、ただ１つのＴＣＰ／ＩＰコネクションだけである。ブロックサーバプロセスは、良く知られているポートを介して、入力コネクションを受け入れる。ホストは、冗長性およびより大きなスループットのために、１つのブロックサーバへの複数のＴＣＰ／ＩＰコネクションを使用してもよい。
【００６２】
認証および発見のために、補助的なコンフィギュレーションコネクションまたは「制御チャンネル」が、使用される（添付資料Ｄ参照）。認証および発見プロセスは、ホストに以下の情報を提供する。
−ブロックサーバに接続するために、ホストは、どの動的ポートを使用できるか、
−ブロックサーバが特定のホストに割り付けたパーティションの数、
−パーティションのサイズ。
ブロックサーバへのホストコネクションの確立およびＩ／Ｏの実行
ブロックサーバに接続するためには、ホストは、２つの情報が必要である。すなわち、
（１）ブロックサーバの名前またはＩＰアドレス、
（２）ブロックサーバが入力コネクションを受け入れる良く知られているポート番号。
【００６３】
ホストは、標準Ｂｅｒｋｅｌｅｙソケットｃｏｎｎｅｃｔ（）コールを使用して接続してもよい。ブロックサーバは、良く知られているポートに対してａｃｃｅｐｔ（）を実行することに注意されたい。
Ｉ／Ｏプロトコル
ホストは、まず最初に、ネットワーク命令内にある５１２バイトの要求ストラクチャをブロックサーバに送信することによって、読み込みまたは書き込みを開始する。その後、データが、読み込まれまたは書き込まれる。要求ストラクチャ（ｚｎｒｅｑ＿ｔ）は、応答ストラクチャ（ｚｎｒｅｓ＿ｔ）と同じものである。これらのストラクチャは、以下で定義される。ホストのための疑似コードは、次の通りである。
１．データポートのブロックサーバに接続する。
２．ループ。
【００６４】
２ａ．適切なフィールドに詰めることによって、ｚｎｒｅｑ＿ｔを満たし、すべてをネットワークバイト命令に変換する。
【００６５】
２ｂ．ブロックサーバにｚｎｒｅｑ＿ｔストラクチャを送信する。
例えば、５１２バイトの要求ストラクチャをネットワークを介して書き込むために、ｓｅｎｄ（）コールを使用する。
【００６６】
２ｃ．書き込みの場合、すべてのデータを送信する。
例えば、６４Ｋバイトを書き込む場合、６４Ｋバイト全部を書き込むまで、１回かまたはそれ以上の回数だけｓｅｎｄ（）をコールする。
ネットワークバイト命令への変換は、なされない。
【００６７】
２ｄ．ｚｎｒｅｓ＿ｔストラクチャ（ｚｎｒｅｑ＿ｔストラクチャと同じ）をブロックサーバから読み込む。ネットワークバイト命令からホスト命令に変換する。例えば、ｒｅｃｖ（）をコールすることによって、５１２バイトを読み込む。
【００６８】
２ｅ．読み込みコマンドの場合、ブロックサーバからすべてのデータを読み込む。例えば、３２Ｋバイトを読み込む場合、３２Ｋバイト全部を読み込むまで、１回かまたはそれ以上の回数だけｒｅｃｖ（）をコールする。
データ構造
ただ１つのネットワーク要求データ構造が定義される。それは、５１２バイトの長さである。遠隔のマシンに送信される前に、すべてのフィールドは、ネットワーク命令に個々に変換される。これは、ｈｔｏｎｌ（）またはｎｔｏｈｌ（）のような標準的な機能を使用することによって実施されてもよい。Ｃ言語による実施形態は、次の通りである。
2004506980.tif 000007
2004506980.tif 000008
2004506980.tif 000009
2004506980.tif 000010
【００６９】
添付資料Ｄ−ネットワークストレージユニット（ＮＳＵ）コンフィギュレーションプロトコル
ＮＳＵ上には、／ｅｔｃ／ｎｓｕ．ｃｏｎｆと呼ばれるコンフィギュレーションファイルが存在する。とりわけ、このファイルは、ホストごとのユニット定義および割り付け機能を構成および管理するのに使用されるデータを含む。このファイルは、３ＤＭユーティリティーによってのみ編集することができる。「ＨＯＳＴ」エントリーのシンタックスおよびセマンティックスが、以下に示される。
2004506980.tif 000011
【００７０】
上述の補足説明：
−「ホスト１」は、構成されているホスト側インタフェースのためのＩＰアドレスを含む。
−ＤＡＴＡ＿ＰＯＲＴフィールドは、ＮＳＵ側ＩＰアドレスおよびポート番号を表現し、制御プロセスは、そのリモートＩＰアドレスからの要求に対して、データコネクションが確立されるのを待つ。
−ポート番号の後の（１０）および（１２）は、ＮＳＵがそのポートに確立するコネクションの最大数を表現する。これは、並行して実行することのできるＩＰアドレスごとのＩ／Ｏ動作の数を効率的に制限する。ＮＳＵによって使用されるストレージ抽象化は、ストレージをＩＰアドレスにマッピングすることに注意されたい。したがって、アドレス寿命の短いＤＨＣＰクライアントのような、それらのＩＰアドレスを頻繁に変更するホストは、このアーキテクチャにおいては、うまく機能しない。
−ｔｗｅｄ＊フィールドは、リモートユニットがマッピングするローカル（ＮＳＵ側）ユニットを表現する。（ｔｗｅｄという用語は、ＮＳＵのディスクである３ｗａｒｅ　Ｅｓｃａｌａｄｅ　Ｄｉｓｋを意味する）
−（ｘ，ｙ）は、ＮＳＵがその特定のリモートユニットに割り付けたｌｂａ範囲である。
コンセプト：
（１）どのようなクライアントも、複数のＩＰ／ポートの組み合わせで、複数のデータコネクションを有することができる。
（２）どのようなクライアントも、複数のユニットを有することができ、ユニットは、ブロックサーバの特定の物理ユニット上のＬＢＡ範囲として定義される。
（３）このプロトコルのこの例においては、ＮＳＵは、１００ユニット以上に分割されることはない。
プロトコル（すべての数値は、ネットワーク命令で送信される）：
（１）（必須要件）ホストは、ＮＳＵコンフィギュレーションポート（デフォルト値として、ポート１０００１）に接続する。このコネクションは、１０２４以下のポート番号を備えたＴＣＰ／ＩＰ「特権ポート」から発行されなければならない。（いくつかのオペレーティングシステムは、１０２４以下の番号を有するポートを「予約ポート」と呼ぶ）
（２）ＮＳＵは、コネクション要求を受け入れ、それが１０２４以下のポート番号から入力していることを確認し（もしそうでなければ、ＮＳＵは、コネクションを閉じる）、タイプｚｎｒｅｑ＿ｔのメッセージを送信することによって、ホストに応答し、演算コードは、Ｚ＿ＧＥＴ＿ＶＥＲＳＩＯＮ（０×１００５）にセットされ、ＮＳＵプロトコルバージョンのビットマスク（現在、０×０１）が、ｚｎ＿ｖｅｒｓｉｏｎフィールドにセットされ、３２ビットの疑似乱数が、ｚｎ＿ｒｅｑｓｚ＿ｌｏフィールドに詰められる。
（３）（必須要件）ホストは、ＮＳＵからＺ＿ＧＥＴ＿ＶＥＲＳＩＯＮ要求を受信し、サポートされたバージョン番号のホスト自身のビットマスクとＮＳＵによって供給されたバージョン番号との間で論理積演算を実行する。これらのバージョン番号は、ＮＳＵ側およびホスト側において共通形式で表現される。論理積演算の結果が、０であれば、一致するバージョンが存在せず、ホストは、コネクションを閉じなければならず、バージョン不一致エラーをローカルオペレーティングシステムに通知する。論理積演算の結果が０でない値であれば一致しており、ホストは、ホストおよびＮＳＵによってサポートされるどのバージョンを選択してもよい。この値は、ＮＳＵに送り返されるｚｎｒｅｑ＿ｔストラクチャのｚｎ＿ｖｅｒｓｉｏｎフィールドに詰められる。実際には、ｚｎ＿ｖｅｒｓｉｏｎフィールドは、ホストおよびＮＳＵの両方がサポートしていることを示す「一致する最も大きな値」にセットされることを推奨する。さらに、ホストは、要求のｚｎ＿ｒｅｑｓｚ＿ｌｏフィールドから得られる３２ビットの疑似乱数の１の補数を計算して、その値をｚｎｒｅｑ＿ｔリターンストラクチャのｚｎ＿ｒｅｑｓｚ＿ｌｏフィールド内に詰めなければならない。このストラクチャ内にあるその他のすべてのフィールドは、未定義である。そして、このｚｎｒｅｑ＿ｔストラクチャは、ＮＳＵに送り返される。（通常の場合、ＮＳＵによって送信された疑似乱数は、その後に、プロトコルのステップ（１４）において使用されることにも注意されたい。）
（４）ＮＳＵが、そのＮＳＵがステップ（２）において送信したＺ＿ＧＥＴ＿ＶＥＲＳＩＯＮ要求に対する応答を５秒以内に受信しなければ、ＮＳＵは、コネクションを閉じ、そのＮＳＵの「受け入れ」状態に戻る。
（５）ＮＳＵが、ホストからの応答を割り当てられた時間の５秒以内に受信した場合、ＮＳＵは、ｚｎ＿ｒｅｑｓｚ＿ｌｏフィールド内にある値を検査して、その値が、実際に、ＮＳＵが送信した疑似乱数の３２ビットの１の補数であるかどうかを確認する。そして、ＮＳＵは、応答をホストに送り返し、ｚｎ＿ｒｅｑｓｚ＿ｌｏフィールドが、期待値を含んでいれば、ｚｎ＿ｓｔａｔｕｓフィールドは、０にセットされ、期待値を含んでいなければ、−１にセットされる。期待値でない場合、応答メッセージを送信した後、ＮＳＵは、コネクションを閉じる。
（６）（選択要件）成功した場合、ホストは、Ｚ＿ＧＥＴ＿ＳＴＡＲＴＴＩＭＥという演算コードを備えたｚｎｒｅｑ＿ｔをＮＳＵに送信してもよい。この要求ストラクチャ内にあるその他のすべてのフィールドは、無視される。
（７）（選択要件）Ｚ＿ＧＥＴ＿ＳＴＡＲＴＴＩＭＥ命令に応答して、ＮＳＵは、ｚｎｒｅｑ＿ｔ応答を送り返し、ｚｎ＿ｒｅｑｓｚ＿ｌｏフィールドは、／ｅｔｃ／ｎｓｕ．ｃｏｎｆファイルが最後に変更された時間を表現する不透明な「クッキー」を詰められる。これは、クライアントドライバが、ＮＳＵコンフィギュレーションチャンネルへのそれのコネクションを消失した場合、そのクライアントドライバが、再接続されたときに、わかっているそれの最後の状態がまだ有効かどうかを判定するためになされる。クッキーフィールドの実際の値は、アプリケーションからは不透明である。ドライバは、クッキーの古い値と新しい値とが等しいかどうかをテストするだけでよい。クッキーに対するその他の操作は、定義されていない。この応答ストラクチャ内にあるその他のすべてのフィールドは、未定義である。
（８）（必須要件）ホストは、演算コードＺ＿ＧＥＴ＿ＣＡＰＡＣＩＴＩＥＳを備えたｚｎｒｅｑ＿ｔをＮＳＵに送信しなければならない。この要求内にあるその他のすべてのフィールドは、無視される。
（９）Ｚ＿ＧＥＴ＿ＣＡＰＡＣＩＴＩＥＳ要求に応答して、ＮＳＵは、ｚｎｒｅｑ＿ｔ応答を送り返し、そのストラクチャのｚｎ＿ｒｅｑｓｚ＿ｌｏフィールドは、そのホストが利用できるユニットの数、それに続いて、そのユニットの数だけのｕｎｉｔ６４＿ｔを詰められ、そのｕｎｉｔ６４＿ｔは、ユニットごとの容量を指定する。これらの容量は、単位がバイトで指定される。ｚｎ＿ｒｅｑｓｚ＿ｌｏフィールドが、０を含んでいれば、これは、ＮＳＵが、それのいずれかのストレージへのアクセスを、要求を送信したホストに提供するようにはまだ構成されていないことを意味する。応答ストラクチャ内にあるその他のすべてのフィールドは、未定義である。
（１０）（必須要件）ホストは、演算コードＺ＿ＧＥＴ＿ＤＡＴＡＰＯＲＴを備えたｚｎｒｅｑ＿ｔをＮＳＵに送信する。この要求ストラクチャ内にあるその他のすべてのフィールドは、無視される。
（１１）ホストからのＺ＿ＧＥＴ＿ＤＡＴＡＰＯＲＴ要求に応答して、ＮＳＵは、ｚｎｒｅｑ＿ｔ応答を送り返し、ｚｎ＿ｒｅｑｓｚ＿ｌｏフィールドは、開くのを許可されるデータＩＰ／ポートコネクションの数、それに続いて、そのデータＩＰ／ポートコネクションの数だけの以下のストラクチャを詰められる。
2004506980.tif 000012
【００７１】
応答ストラクチャ内にあるその他のすべてのフィールドは、未定義である。
（１２）ＮＳＵは、適切な数のデータチャンネルに「リッスン」ソケットを確立し、ホストからのコネクションを待つ。
（１３）ホストは、それが選択した数だけ、上述したホストごとのＤＡＴＡＰＯＲＴコンフィギュレーションセクションのｍａｘ＿ｃｏｎｎｅｃｔｉｏｎｓフィールドに指定された最大数まで、それらのソケットに接続する。（ｍａｘ＿ｃｏｎｎｅｃｔｉｏｎｓを超えてさらなるデータコネクションを生成しようとすれば、「拒絶されたコネクション」として失敗する。）
（１４）そして、ホストは、ｚｎｒｅｑ＿ｔメッセージをそれぞれのデータソケットに送信し、そのホストがステップ（２）においてＮＳＵから受信した疑似乱数が、ストラクチャのｚｎ＿ｒｅｑｓｚ＿ｌｏフィールドに入れられる。このストラクチャ内にあるその他のすべてのフィールドは、未定義である。
（１５）ＮＳＵは、ｚｎｒｅｑ＿ｔメッセージによって、ステップ（１４）において送信されたメッセージに応答し、ｚｎ＿ｓｔａｔｕｓフィールドは、成功した場合には０に、失敗した場合には１にセットされる。
（１６）この時点において、コンフィギュレーションおよび認証プロトコルが、完了し、ホストからのデータ転送要求が、ＮＳＵによって受け付けられる。
実施にあたっての一般的注意事項：
（１）ＮＳＵボックス上のそれぞれのデータポートは、どのようなユニットに対してもＩ／Ｏ要求を処理することができる。
（２）ＮＳＵが、コンフィギュレーションソケットが閉じられていることを検出することがあれば、ＮＳＵは、そのホストに関係するすべてのデータポートコネクションを閉じ、ホストが、再接続し、かつ、コンフィギュレーションプロトコルを再実行するのを待つ。したがって、コンフィギュレーションが完了したとき、ホスト側は、コンフィギュレーションソケットを閉じないことが重要である。なぜなら、シャットダウンおよび新しいユニットの追加などのイベントをホストに通知するのに使用されるのはそのソケットであるからである。ホストが、混乱状態でコネクションを整頓するのに敢えて使用できる１つの方法は、コンフィギュレーションソケットを閉じることである。ホストとＮＳＵとの間にネットワークコネクティビティが存在する場合には、ＮＳＵは、閉じたことを検出し、コンフィギュレーションソケットに関係するすべてのデータソケットを閉じる。
（３）ＮＳＵが、／ｅｔｃ／ｎｓｕ．ｃｏｎｆファイルを再び読み込むことがあれば（ＮＳＵコンフィギュレーションをアドミニストレータが更新したために）、ＮＳＵは、それらのユニット情報を変更されたすべてのホストに対するコンフィギュレーションソケットを閉じ、それらのホストが、再接続し、コンフィギュレーションプロトコルを再実行し、そして、新しいコンフィギュレーションデータを取り込むのを待つ。したがって、ホストドライバは、ＮＳＵコンフィギュレーションポートへのコネクションを開いたままにしておく必要があり、ＮＳＵによってそれが閉じられたことを、コンフィギュレーションプロトコルを再実行してユニットおよびデータポートのコンフィギュレーションを再確立するための信号として使用しなければならない。
【図面の簡単な説明】
【図１】本発明を実施してもよいシステムの主要なハードウェアコンポーネントを例として示す図であり、ホストコンピュータおよびブロックサーバを含む。
【図２】図１に示されるシステムのソフトウェアアーキテクチャを示す図であり、本発明に基づいて動作するホスト側およびサーバ側のデバイスドライバおよびリーダ／ライタ（ＲＷ）コンポーネントを含む。
【図３】ホストとブロックサーバとをお互いに接続するのに使用することのできるネットワークおよびネットワークコンポーネントの種類の例を示す図である。
【図４】並行ソケットコネクションが、リーダ／ライタコンポーネントのペアの間でどのようにして確立されるかを例として示す図である。
【図５】ホストコンピュータがブロックサーバから読み込みを実行した場合のコンポーネント間における情報の流れを示す図である。
【図６】ホストコンピュータがブロックサーバへ書き込みを実行した場合のコンポーネント間における情報の流れを示す図である。
【図７】Ｉ／Ｏ要求が、ユーザレベルアプリケーションに透過的に、ソケットコネクションにどのようにして割り当てられるかを示す図であり、また、複数のＴＣＰ／ＩＰコネクションを介して処理するために、Ｉ／Ｏ要求をどのようにして細分化することができるかを示す図である。
【図８】ブロックサーバの物理ストレージを複数のパーティションにどのようにして分割することができるかを示す図であり、それぞれのパーティションは、１つかまたはそれ以上のホストコンピュータに独立して割り付けられてもよい。
【図９】認証および発見プロトコルを示す図であり、このプロトコルによって、ホストコンピュータは、ブロックサーバによって認証され、その後に、ブロックサーバにアクセスするための情報を得る。
【図１】
2004506980.tif 000013
【図２】
2004506980.tif 000014
【図３】
2004506980.tif 000015
【図４】
2004506980.tif 000016
【図５】
2004506980.tif 000017
【図６】
2004506980.tif 000018
【図７】
2004506980.tif 000019
【図８】
2004506980.tif 000020
【図９】
2004506980.tif 000021
【国際公開パンフレット】
2004506980.tif 000022
2004506980.tif 000023
2004506980.tif 000024
2004506980.tif 000025
2004506980.tif 000026
2004506980.tif 000027
2004506980.tif 000028
2004506980.tif 000029
2004506980.tif 000030
2004506980.tif 000031
2004506980.tif 000032
2004506980.tif 000033
2004506980.tif 000034
2004506980.tif 000035
2004506980.tif 000036
2004506980.tif 000037
2004506980.tif 000038
2004506980.tif 000039
2004506980.tif 000040
2004506980.tif 000041
2004506980.tif 000042
2004506980.tif 000043
2004506980.tif 000044
2004506980.tif 000045
2004506980.tif 000046
2004506980.tif 000047
2004506980.tif 000048
2004506980.tif 000049
2004506980.tif 000050
2004506980.tif 000051
2004506980.tif 000052
2004506980.tif 000053
2004506980.tif 000054
2004506980.tif 000055
2004506980.tif 000056
2004506980.tif 000057
2004506980.tif 000058
2004506980.tif 000059
【国際調査報告】
2004506980.tif 000060