(57)【特許請求の範囲】
【請求項１】
制御装置を有するストレージデバイス上の第１のデータ位置へのアクセスを管理するための方法であって、前記方法は、
ストレージデバイス上の第１のデータ位置にアクセスする要求を前記制御装置においてリクエスタから受取るステップを含み、前記要求は、前記第１のデータ位置を識別するよう適合された第１の情報の組と、前記第１のデータ位置にあると予想されるデータを識別するよう適合された第２の情報の組とを含み、前記第２の情報の組は、第３の情報の組と比較されるよう適合され、前記第３の情報の組は、前記第１のデータ位置に記憶されるデータを識別するよう適合されており、前記第３の情報の組は、前記ストレージデバイスに関連付けられ、前記第３の情報の組はアクセス情報を含み、前記方法はさらに、
前記制御装置を用いて前記第２の情報の組を前記第３の情報の組と比較するステップと、
前記第２の情報の組が前記第３の情報の組と一致する場合、前記制御装置を用いて前記第１のデータ位置への前記リクエスタのアクセスを認可するステップと、
前記第２の情報の組が前記第３の情報の組と一致しない場合、前記制御装置を用いて前記第１のデータ位置への前記リクエスタのアクセスを拒否するステップと、
前記第２の情報の組が前記第３の情報の組と一致しない場合、前記第２の情報の組が前記第３の情報の組と一致しないことを、前記制御装置を用いて前記リクエスタに通知するステップとを含む、方法。
【請求項２】
前記リクエスタは第１のプロセスであり、前記第１のデータ位置には第２のプロセスのアクセス権を識別するよう適合された情報が格納される、請求項１に記載の方法。
【請求項３】
前記第１のデータ位置に含まれる前記情報は、前記第２のプロセスが第２のデータ位置にアクセスするのを禁止するよう変更可能である、請求項２に記載の方法。
【請求項４】
前記制御装置を用いて前記リクエスタに第２のデータ位置を通知するステップをさらに含み、前記第２のデータ位置には前記第１のデータ位置にあると予想されるデータが格納される、請求項１に記載の方法。
【請求項５】
前記制御装置を用いて、前記第３の情報の組にマスクを適用することにより、前記第３の情報の組の一部を無視するステップをさらに含む、請求項１に記載の方法。
【請求項６】
前記制御装置を用いて、前記第３の情報の組にマスクを適用することにより、前記第３の情報の組の一部を変更するステップをさらに含む、請求項１に記載の方法。
【請求項７】
前記第３の情報の組は持続性がある、請求項１に記載の方法。
【請求項８】
前記ストレージデバイスは第１のストレージデバイスであり、前記第３の情報の組は第２のストレージデバイスに記憶される、請求項１に記載の方法。
【請求項９】
前記第２のストレージデバイスはメモリである、請求項８に記載の方法。
【請求項１０】
前記第１のデータ位置にアクセスする前記要求は、データ入力要求、データ出力要求またはデータ移動要求である、請求項１に記載の方法。
【請求項１１】
複数のコンピュータ命令を含むコンピュータプログラムであって、前記複数のコンピュータ命令は、プロセッサによって実行される場合、ストレージデバイス上の第１のデータ位置へのアクセスを管理するためのプロセスを前記プロセッサに実行させ、前記プロセスは請求項１から１０のいずれかに記載の方法を含む、コンピュータプログラム。
【請求項１２】
ストレージデバイス上の第１のデータ位置へのアクセスを管理するためのシステムであって、前記システムは、
リクエスタからアクセス要求を受取るよう適合されたアクセス要求レシーバを含み、前記アクセス要求は、ストレージデバイス上の第１のデータ位置を識別するよう適合された第１の情報の組と、前記第１のデータ位置にあると予想されるデータを識別するよう適合された第２の情報の組とを含み、前記第２の情報の組は、第３の情報の組と比較されるよう適合され、前記第３の情報の組は、前記第１のデータ位置に記憶されるデータのアクセス権を識別するよう適合されており、前記第３の情報の組は前記ストレージデバイスに関連付けられ、前記第３の情報の組はアクセス情報を含み、前記第２の情報の組が前記第３の情報の組と一致しない場合、前記第２の情報の組が前記第３の情報の組と一致しないことを、前記リクエスタに通知し、前記システムはさらに、
前記第３の情報の組を配置および検索するよう適合されたキーフェッチャと、
前記第２の情報の組を前記第３の情報の組と比較し、前記第２の情報の組が前記第３の情報の組と一致する場合に比較成功を生成し、前記第２の情報の組が前記第３の情報の組と一致しない場合に比較失敗を生成するよう適合されたキー比較器と、
前記比較成功に応答して成功動作を取るよう適合された比較成功プロセッサと、
前記比較失敗に応答して失敗動作を取るよう適合された比較失敗プロセッサとを含む、システム。
【請求項１３】
前記成功動作は、前記第１のデータ位置への前記リクエスタのアクセスを認可するステップを含む、請求項１２に記載のシステム。
【請求項１４】
前記失敗動作は、前記第１のデータ位置への前記リクエスタのアクセスを拒否するステップを含む、請求項１２に記載のシステム。
【請求項１５】
前記失敗動作は、前記第２の情報の組が前記第３の情報の組と一致しないことを前記リクエスタに通知するステップを含む、請求項１２に記載のシステム。
【請求項１６】
前記システムは、マスクアプライヤをさらに含み、前記マスクアプライヤは、前記第３の情報の組にマスクを適用することで、前記第３の情報の組の一部を変更する、請求項１２に記載のシステム。
【請求項１７】
前記マスクアプライヤは、前記第３の情報の組の一部を破棄および／または変更するよう適合される、請求項１６に記載のシステム。
【請求項１８】
前記第３の情報の組は持続性がある、請求項１２に記載のシステム。
【請求項１９】
前記ストレージデバイスは第１のストレージデバイスであり、前記第３の情報の組は第２のストレージデバイスに記憶される、請求項１２に記載のシステム。
【請求項２０】
前記第２のストレージデバイスはメモリである、請求項１９に記載のシステム。
【請求項２１】
前記第１のデータ位置にアクセスする前記要求は、データ入力要求、データ出力要求またはデータ移動要求である、請求項１２に記載のシステム。
【請求項２２】
前記リクエスタは第１のプロセスであり、前記第１のデータ位置は第２のプロセスのアクセス権を識別するよう適合された情報を含む、請求項１２に記載のシステム。
【請求項２３】
前記第１のデータ位置に含まれる前記情報は、前記第２のプロセスが第２のデータ位置にアクセスするのを禁止するよう変更可能である、請求項２２に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
この発明は、コンピュータシステムに関し、より特定的には、ストレージシステムと通信し、かつ、このストレージシステムへのアクセスを調整するための方法に関する。
【背景技術】
【０００２】
背景
ファイルシステム、オペレーティングシステム、分散ファイルシステムまたはデータベース（以後、便宜上、総称して「ファイルシステム」と称される）を実現するための或る方策においては、メタデータを用いることにより、ファイルと論理ボリュームと他のこのようなオブジェクト（以後、便宜上、総称して「ファイル」と称される）とを含み、ファイルシステムに関連付けられるストレージシステムに記憶される、データオブジェクトのためのネーム空間の状態を表わすことができる。ストレージシステムは、制御装置を備えたストレージデバイスの集合である。このメタデータは、ストレージシステムを含むストレージデバイスに記憶されるように、データオブジェクトのさまざまな部分をそれらの部分の物理的位置にマッピングするマッピング情報を含み得る。多くのファイルシステムは複数の分散ノードを含み、各ノードは、ストレージシステムと相互作用する個別のサブシステムである。
【０００３】
各ファイルはメタデータと関連付けられ、このメタデータは、どのストレージデバイスおよびストレージデバイス上のどの位置がファイルのさまざまな部分を含むのか、ならびに、ファイルの部分がこのデバイス上でどこに位置するのかを識別する。このメタデータは典型的にはストレージシステム上に記憶される。ファイルシステムノードは、しばしば、メタデータによって指されるデータにアクセスする。より効率的にデータにアクセスするために、これらのノードはメタデータのローカルコピーをキャッシュする。しかしながら、ストレージデータがストレージシステム内の１つの位置から別の位置へ移動する際に問題が生じる。メタデータのキャッシュされたコピーすべては、データへの適切なアクセスを可能にするために、データの新しい位置で更新されなければならない。メタデータへの変更をファイルシステムノードに知らせるための一方策には、メタデータのコピーを有するすべてのノード間に送られるメッセージが必要とされる。このメッセージは、ストレージシステムにおけるデータの新しい位置でファイルシステムノードを更新するか、または、キャッシュされたメタデータによって指されるデータがもはや有効ではないことをノードに単に知らせるだけである。後者の場合、ノードは、データに関連付けられるプライマリメタデータからのキャッシュされたメタデータの更新を担う。
【０００４】
残念なことに、メタデータ位置のキャッシュされたコピーを更新／通知するためのメッセージを用いると、比較的費用が高くなり、かつ、ファイルシステムの最適な性能の達成が妨げられる。多数のノードを備えたファイルシステムにおいて伝送されるメッセージの量が、性能全体に著しく影響を及ぼすのに十分なほどに直ちに大きくなる。再配置もしくは削除されたデータを指すメタデータのキャッシュされたコピーを含むすべてのノード、または、いくつかのシステムにおいてはクラスタ内のすべてのノードが、更新される。したがって、多くの不必要なメッセージがノードに送り出され、更新されたメタデータが使用前に破棄されることとなる。さらに、メッセージが送り出された後、しかしプライマリメタデータを更新して新しい位置を反映する前に、新しいノードが移動プロセス中に起動する場合、メッセージが見落とされるおそれがある。
【０００５】
分散ファイルシステムにおける別の一般的な問題は、「スプリット・ブレーン・シンド
ローム」と称される。スプリット・ブレーン・シンドロームとは、ストレージデバイスを共有するノードのクラスタにおける１つ以上のノード間の通信を失わせるエラー状態に起因する状態のことである。クラスタにおける動作可能なノードはいずれも、これと通信することのできないノードが破損しているか、または依然として動作しているかどうかを簡単には判断できない。この状態が生じる場合、ノードがファイルシステムメタデータ更新を順番に並べるための確実な方法はない。というのも、グローバルメッセージング能力が失われるからである。したがって、２つのプロセスが特定の割当ユニットに関連付けられるメタデータを同時に更新しようと試みることにより、データの破損が引起こされるおそれがある。ノードによりデバイスへのアクセスの禁止を可能にする、ストレージデバイスへのさまざまなハードウェア拡張が提案されている。しかしながら、これらの機構は、クラスタにおける故障したアプリケーションに関するプロセスだけでなく、故障しているノード上で動作するすべてのプロセスからの、デバイスへのアクセスすべてを制限する。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
発明の概要
この発明は、ストレージシステムと通信し、かつ、このストレージシステム上に記憶されるデータへのアクセスを調整する方法を目的とする。
【課題を解決するための手段】
【０００７】
この発明の一実施例の一局面では、メタデータ更新の通知は、プロセスレベルのＩ／Ｏ処理要求と組合される。
【０００８】
この発明の一実施例の別の局面では、データアクセス制限は、プロセスレベルのＩ／Ｏ処理要求と組合される。
【０００９】
この発明の一実施例の別の局面では、Ｉ／Ｏ要求を行なうプロセスについての情報は、データストレージシステムに伝送される。
【００１０】
この発明の一実施例の別の局面では、データアクセス制限は、個々のプロセスに切離される。
【００１１】
この発明の一実施例の別の局面では、メタデータ更新通知は、個々のプロセスに切離される。
【発明を実施するための最良の形態】
【００１２】
好ましい実施例の詳細な説明
一実施例では、分散ファイルシステムは、複数のファイルに編成されるストレージシステムを含む。各ファイルは、複数の物理的なストレージデバイスの中に分散され得る、割当てられたストレージの１つ以上の領域を含む。「エクステントマップ」に記憶される、ファイルの部分の位置についての情報を含むメタデータは、ファイルシステムに関連付けられる。エクステントマップは、エクステントを見付けることのできるストレージシステムにおけるファイルおよび位置のための、割当てられたストレージ空間、たとえばエクステント、のリスティング（listing）である。
【００１３】
たとえば、図１には、ファイルシステムのためのプライマリメタデータを含む単純なファイルシステム５０が示され、このファイルシステム５０には、ファイルディレクトリ、エクステントマップおよび割当ユニットが含まれる。このファイルシステム５０は、ファイルのリストを含むファイルディレクトリ６０を含む。ファイルディレクトリ６０における各ファイルは、そのファイルに関連付けられるエクステントマップへのポインタを有す
る。各ファイルは、個別のユニットとして表わされるデータの集合であるが、ただし、この集合のメンバは、ストレージシステム１３０において別々の位置に位置し得る。ファイル識別子９０を用いて、割当てられたストレージの特定の組に関連付けられるファイルを識別する。このファイルは、エクステントマップポインタ１０２によってエクステントマップ１０５に関連付けられる。エクステントマップ１０５はファイルのエクステントのリストであり、物理的なストレージブロックへのポインタを備え、この物理的なストレージブロックは、この明細書中では「割当ユニット」と称され、ストレージデバイス上にエクステントを見出すことができる。ファイルのエクステントにアクセスすることを望むプロセスは、エクステントマップ１０５を読出して、ファイルの所望のエクステントを含む割当ユニットを見付け出し、次いで、その位置にあるデータにアクセスする。割当ユニットは、ファイルのエクステントを構成するデータを含む、ストレージデバイス１４０および１４５上の空間のブロックである。このファイルに関連付けられる割当ユニットは、異なったストレージデバイス上に存在し得るか、または、同じストレージデバイス上に存在し得る。簡潔にするために、図１の各ストレージデバイス１４０および１４５に対して単一の割当ユニットのみが示される。しかしながら、この発明の一実施例に従ったストレージデバイスは、通し番号が付けられた複数の割当ユニットを含む。
【００１４】
ストレージアクセスキー
図２では、ストレージアクセスキーは、ストレージデバイス１４０におけるストレージのさまざまなユニット、たとえばエクステント、に関連付けられる。一実施例では、各ストレージアクセスキーは割当ユニットに関連付けられる。別の実施例では、各ストレージアクセスキーは割当ユニットの範囲に関連付けられる。別の実施例では、複数のストレージアクセスキーは同じ割当ユニットに関連付けられる。所与の割当ユニットはいずれも、それに関連付けられる１つ以上のストレージアクセスキーを有し得る。ファイルシステムは、アプリケーションが用いるストレージアクセスキーの初期設定と、ストレージアクセスキーと割当ユニットとの間の特定のマッピングの決定とを担う。各ストレージアクセスキーに関連付けられるストレージデバイスの特定の部分は、当業者にとっては設計上の選択であり、この発明には重要ではない。
【００１５】
一実施例におけるストレージアクセスキーがアレイとして記憶される。ストレージアクセスキーは、アレイ内のこれらの位置により、ゼロ（０）から始めて列挙される。こうして、キー０はアレイにおいて第１の位置にあり、キー１は第２の位置に、などとされる。好ましい実施例では、ストレージアクセスキーはストレージデバイス１４０上に記憶される。別の実施例では、ストレージアクセスキーは、図１における、ストレージシステム１３０のための制御装置（図示せず）のメモリに記憶される。一実施例では、ストレージアクセスキーは、これらが関連付けられる特定のストレージデバイスがたとえ非活性化されても、持続性がある。別の実施例では、ストレージアクセスキーは、ストレージデバイスが再活性化されると、ストレージデバイス上に記憶されるデータから再構成される。この実施例では、ストレージキーの初期値は、ストレージデバイスが活性化される際に、デフォルト値を有する。
【００１６】
各ストレージアクセスキーは複数のフィールドを含む。これらのフィールドには、ファイル番号（ＦＩＬＥ  ＮＢＲ）フィールドが含まれる。ファイル番号フィールドは、ストレージアクセスキーにリンクされる割当ユニットにおけるデータに関連付けられるファイルを識別する情報を含む。ストレージアクセスキーにリンクされる割当ユニットにおけるデータに関連付けられるファイルにおける特定のエクステントを識別するエクステント（ＥＸＴ）フィールドもまた含まれる。ストレージアクセスキーに含まれる他のフィールドは、エクステントにおけるデータが有効であるかどうかを示す有効フラグ（Ｖ）と、他のプロセスがストレージアクセスキーに関連付けられるエクステントからデータを読出すことが可能かどうかを示す読出フラグ（Ｒ）と、他のプロセスがストレージアクセスキーに
関連付けられるエクステントにデータを書込むことが可能かどうかを示す書込フラグ（Ｗ）と、ストレージアクセスキーに関連付けられるエクステントに記憶されるエクステントのスナップショットコピーがあるか否かを示すスナップショットマスクフィールド（ＳＮＡＰＳＨＯＴ  ＭＡＳＫ）とを含む。
【００１７】
一実施例では、スナップショットマスクフィールドの上位ビットのみがセットされる場合、そのエクステントは専用であり、共有されない。別のビットがセットされる場合、そのエクステントはスナップショットコピーである。スナップショットマスクの２つ以上のビットがセットされる場合、そのエクステントは共有され、書込の前にコピーされなければならない。ストレージアクセスキーは、上述に列挙されるフィールドには制限されず、他のフィールドも含むことができる。
【００１８】
図２の例では、ファイルエクステントとストレージアクセスキーとの間に１対１の関係が存在する。割当ユニットとストレージアクセスキーとの間にも１対１の関係が存在する。エクステントマップ２００は、ファイル番号０Ｘ２００が付いているファイルを構成するエクステントを含む。第１のストレージアクセスキー１５２は第１の割当ユニット（図示せず）に関連付けられる。第２のストレージアクセスキー１５７は第２の割当ユニット１４２に関連付けられる。第３のストレージアクセスキー１６０は、第３の割当ユニット（図示せず）に関連付けられる。特定の関連付けは、アプリケーション開発者にとっては設計上の選択であり、この発明には重要ではない。
【００１９】
第１のストレージアクセスキー１５２は、値「０Ｘ２００」を含むファイル番号フィールドと、値「０Ｘ０」を含むエクステントフィールドとを有し、これにより、ファイルに関連付けられる第１の割当ユニット（図示せず）が、ファイル識別子１０７および第１のエクステントエントリ１０８によって識別されるように、ファイル０Ｘ２００のエクステント♯１を含むことが示される。第２のストレージアクセスキーは、値「０Ｘ２００」を含むファイル番号フィールドと、値「０Ｘ１」を含むエクステントフィールドとを有し、これにより、ファイルに関連付けられる第２の割当ユニット１４２が、ファイル識別子１０７および第２のエクステントエントリ１０９によって識別されるように、ファイル０Ｘ２００のエクステント♯２を含むことが示される。第３のストレージアクセスキー１６０は、値「０Ｘ２００」を含むファイル番号フィールドと、値「０Ｘ２」を含むエクステントフィールドとを有し、これにより、ファイルに関連付けられる第３の割当ユニット（図示せず）が、ファイル識別子１０７および第３のエクステントエントリ１１０によって識別されるように、ファイル０Ｘ２００のエクステント♯３を含むことが示される。第４のストレージアクセスキー１６３は、この段階では、値が不確定である。
【００２０】
ファイルシステムの動作中に、ファイルに対するエクステントマップ２００のキャッシュされたコピー１７１および１７３が、ノード１７０および１７２上でのプロセスによって作成される。さまざまな条件により、ノードのメモリにおけるエクステントマップ２００のコピーの作成を促進することができる。たとえば、エクステントマップ２００がストレージデバイス１４０上に記憶される場合、ノード上のプロセスがファイルにアクセスする際に、ノードがエクステントマップ２００のキャッシュされたコピーを作成する。別の例では、第１のノードがエクステントマップ２００を含む場合、第１のノードから離れた第２のノードがファイルにアクセスし、離れたノードのメモリにおいてエクステントマップ２００のキャッシュされたコピーを作成させる。別の例では、エクステントマップ２００のコピーは、ファイルが最初に作成されると、すべてのノード上で作られる。
【００２１】
ストレージシステムの動作におけるある時点で、ファイルシステムは、さまざまな割当ユニットに含まれるデータを、ストレージシステム内で１つの位置から別の位置へ移動させ得る。これは、同じストレージデバイス内の位置の間での移動であってもよく、または
、ストレージデバイス間にわたる移動であってもよい。簡潔にするために、この明細書中で説明される具体的な実施例では、同じストレージデバイス内の位置間での移動と想定される。データ移動は動的になされるが、データは、ファイルシステムにアクセスするノード上で実行するプロセスによって依然としてアクセス可能である。さまざまな事象が誘因となって、データの移動をファイルシステムに決定させる可能性がある。
【００２２】
新しいストレージデバイスがストレージシステムに加えられる場合、そのストレージデバイスを埋めるようデータを移動させ得る。ストレージシステムから既存のストレージデバイスを取除くようスケジュールされる場合、取除くべきストレージデバイスからデータを移動させ得る。特定のストレージデバイスが過度に利用される場合、この過度に利用されたストレージデバイスからデータを移動させ得る。特定のストレージデバイスが十分に利用されない場合、この十分に利用されないストレージデバイス上にデータを移動させ得る。ファイルの論理コピーに変更が加えられる場合、異なる内容を含むファイルまたはファイルの部分の新しい物理コピーが作られ得る。データ移動を促進する理由は、当業者にとっては設計上の選択であり、この発明には重要ではない。
【００２３】
図２の具体的な実施例では、第２のノード１７２が、第２の割当ユニット１４２に含まれるデータを第４の割当ユニット２１５に移動させる。この移動は図３の方法の後に続く。ステップ３００では、第２のノード１７２が、第２の割当ユニット１４２の内容をそのローカルメモリ１７４に読込み、同時に、第２のストレージアクセスキー１５７に含まれる書込フラグをゼロ（０）に更新する。これにより、他のノードによる第２の割当ユニット１４２の更新が妨げられるが、その内容は再配置されている。ストレージアクセスキーにおける書込フラグの更新は、第２の割当ユニット１４２の内容を読出す同じ動作の一環として実行され、追加のＩ／Ｏ動作を必要としない。
【００２４】
次いで、ステップ３１０では、第２のノード１７２は、そのローカルメモリ１７４から移動すべきデータを第４の割当ユニット２１５に書込み、同時に、第４の割当ユニット２１５の新しい内容を示す値で第４のストレージアクセスキー１６３を更新する。また、ストレージアクセスキー更新は、Ｉ／Ｏ動作の一環として行なわれ、追加のＩ／Ｏ動作を必要としない。
【００２５】
最後に、ステップ３２０では、第２ノード１７２は、ストレージデバイス１４０上のエクステントマップ２００および第２のノード１７２上に記憶されるキャッシュされたエクステントマップコピー１７３を、データの新しい位置で更新し、第２のストレージアクセスキー１５７の有効フラグにゼロ（０）を書込むことにより第２のストレージアクセスキー１５７を無効にする。一実施例では、ステップ３２０では、第２のストレージアクセスキー１５７のエクステントフィールドをデータの新しい位置を示す値に変更することにより、データの新しい位置についてのヒントが第２のストレージアクセスキー１５７に残される。データ移動が発生しても、他のどのエクステントマップもそのデータ移動によっては変更されず、どのノードにもそのデータ移動が通知されない。
【００２６】
第２の割当ユニット１４２に含まれるデータを移動すると、第１のノード１７０上で実行するプロセスは、その後、第１のノード１７０上に記憶されるエクステントマップ２００のキャッシュされたエクステントマップコピー１７１を用いて、第２のエクステントエントリ１０９にアクセスしようと試み得る。このプロセスは、Ｉ／Ｏ要求をストレージデバイス１４０に送ることにより、第２のエクステントエントリ１０９にアクセスしようと試み得る。Ｉ／Ｏ要求の例が以下の表１に示される。
【００２７】
【表１】
0004721639.tif 000002
【００２８】
この実施例では、Ｉ／Ｏ要求は２つの部分を含む。すなわち、実行されるべき特定のＩ／Ｏ動作に関する情報を有するＩ／Ｏ部分（１）と、実行されるべきデータ検証動作に関する情報を有するアクセスキー部分（２）とである。Ｉ／Ｏ部分は、１）Ｉ／Ｏ要求タイプを識別する情報、２）ストレージシステム内の、Ｉ／Ｏ要求がアクセスする特定のストレージデバイスを識別する情報、３）割当ユニット番号として表わされる、ストレージデバイスへのオフセット、および４）動作されるべきデータの範囲を含む。
【００２９】
Ｉ／Ｏ要求のアクセスキー部分は、１）Ｉ／Ｏ要求が比較されるストレージアクセスキーを識別するキー番号、２）Ｉ／Ｏ要求がストレージアクセスキーと比較するのに用いる予期されるキー値、３）キー値との比較前にストレージアクセスキーに適用するキーマスク、４）一致が成功した後にストレージアクセスキーとの論理積がとられるべき値を含むキー−ＡＮＤフィールド、および５）一致が成功した後にストレージアクセスキーとの論理和がとられるべき値を含むキー−ＯＲフィールドを含む。予期されるキー値は、Ｉ／Ｏ要求がアクセスを求める割当ユニットにおいてＩ／Ｏ要求が見付けると予想するファイルおよびエクステントを識別する情報を含む。予期されるキー値はまた、Ｉ／Ｏ動作が読出動作または書込動作であるかを示すフラグ、どのプロセスがＩ／Ｏ要求を行なうかを示す値、スナップショットマスクなどの追加の情報、または他のこのような情報を含む。
【００３０】
キーマスクを用いて、実行されている比較に関連がないストレージアクセスキーの部分を無視する。ストレージアクセスキーとのキーマスクの論理積をとってから、ストレージアクセスキーを第１のＩ／Ｏ要求からの予期されるキー値と比較する。この予期されるキー値がストレージアクセスキーと一致する場合、キー−ＡＮＤフィールドを用いることにより、ストレージアクセスキーの部分が、ゼロ値とのこれらの部分の論理積をとることによってクリアされる。予期されるキー値がストレージアクセスキーと一致する場合、キー−ＯＲフィールドを用いることにより、ストレージアクセスキーの部分が、このキー−ＯＲフィールドとのストレージアクセスキーの論理和をとることによってセットされる。たとえば、新しいファイルおよびエクステント値は、最初に、ゼロ値との、このファイルおよびエクステント値を含むストレージアクセスキーの部分の論理和をとり、次いで、第１のＩ／Ｏ要求によってアクセスされる割当ユニットに記憶されるデータの新しいファイルおよびエクステントを識別する値との、ストレージアクセスキーのクリアされた部分の論理和をとることにより、ストレージアクセスキーに記憶され得る。
【００３１】
図４は、図２に関連して具体的に説明されるフローチャートである。第１のノード１７０上のプロセスは、ストレージデバイス１４０に記憶され、ファイルの第２のエクステントエントリ１０９によって指されるデータにアクセスすることを求める。ステップ４０２
では、このプロセスは、エクステントマップ２００のキャッシュされたエクステントマップコピー１７１を用いて、表１に示されるＩ／Ｏ要求を生成する。ステップ４０４では、このＩ／Ｏ要求がストレージデバイス１４０に送られ、ここで、Ｉ／Ｏ要求が第２の割当ユニット１４２へのアクセスを求めることが決定される。Ｉ／Ｏ要求をルーティングする方法は当業者には周知であり、この発明には重要ではない。Ｉ／Ｏ要求を受取ると、予期されるキー値は、第２のストレージアクセスキー１５７と比較されて、第２の割当ユニット１４２に含まれるとＩ／Ｏ要求が予想するデータを第２の割当ユニット１４２が含むか否かを判断する。
【００３２】
ステップ４０６では、第２のストレージアクセスキー１５７の関連のない部分が、Ｉ／Ｏ要求のキーマスクフィールドにおける値との第２のストレージアクセスキー１５７の論理積をとることによりマスクされていることによって、最初に破棄される。この例では、Ｉ／Ｏ要求は「読出」要求であるので、エクステントを共有するスナップショットコピーが存在するかどうかは関係がなく、このため、スナップショットマスク自体がマスクされる。しかしながら、マスクされるべき正確な情報は、当業者にとっては設計上の選択であり、この発明には重要ではない。
【００３３】
ステップ４０８では、第２のストレージアクセスキー１５７の関連する部分が、Ｉ／Ｏ要求の予期されるキー値フィールドに含まれる値と比較される。好ましい実施例では、この比較は、マスクされた第２のストレージアクセスキー１５７のビットの各々の、Ｉ／Ｏ要求の予期されるキー値フィールドにおける対応するビットとのブール比較によって行なわれる。上述のデータ移動の後、第２のストレージアクセスキー１５７の有効フラグはゼロ（０）の値を含み、Ｉ／Ｏ要求の予期されるキー値フィールドの有効フラグは１の値を含むので、一致するものが無く、この比較は失敗する。第２のストレージアクセスキー１５７が別のプロセスによって再使用された場合、第２のストレージアクセスキー１５７の有効フラグは１にセットされ、したがって、予期されるキー値情報と一致し得ることに留意されたい。しかしながら、ファイル番号フィールドおよび／またはエクステントフィールドは、予期されるキー値情報と一致せず、この比較は依然として失敗するだろう。
【００３４】
比較が失敗すると、ステップ４１０では、ストレージアクセスキー障害が生成され、Ｉ／Ｏ要求は第２の割当ユニット１４２へのアクセスを拒否される。メッセージがストレージデバイス１４０から第１のノード１７０に送り返されて、キャッシュされたエクステントマップコピー１７１が古い情報を含むことを、Ｉ／Ｏ要求を行なう第１のノード１７０のプロセスに通知する。次いで、ステップ４１２では、このプロセスは新しいエクステントマップを要求する。このプロセスが通知されると、次に取られるべきアクションは、Ｉ／Ｏ要求を開始したアプリケーションのプログラマによってなされる特定の実施判断次第となる。
【００３５】
ステップ４１４では、ファイルシステムのプログラマが実現し得る具体的な動作は、古い情報の更新されたコピーのために、ストレージデバイス１４０上のエクステントマップ２００または第２のノード１７２上の第２のキャッシュされたエクステントマップコピー１７３を第１のノード１７０に読出させるステップを含む。一実施例では、キャッシュされたエクステントマップコピー１７１全体がリフレッシュされる。別の実施例では、第２のエクステントエントリ１０９だけがリフレッシュされる。別の実施例では、ストレージデバイス１４０から第１のノード１７０に送り返される通知メッセージは、要求されたデータに対する新しい位置を含む。
【００３６】
Ｉ／Ｏ要求を用いて、ストレージアクセスキーの値を変更することができる。図２に関連して例示的に説明される図４では、Ｉ／Ｏ要求を用いて、第２のストレージアクセスキー１５７を変更する。上述のデータ移動動作の後、第２の割当ユニット１４２は、有効（
Ｖ）フィールドにおいて値「０」で示されるように、有効なデータを含まず、使用が可能である。ステップ４０２では、プロセスは、第２の割当ユニット１４２にデータを書込むことを求めるＩ／Ｏ要求を生成する。以下の表２の例示的なＩ／Ｏ要求は、「１」のキー番号と、すべてゼロである予期されるキー値と、有効フラグが「１」であり、他はすべてゼロであるキーマスクと、すべてゼロであるキー−ＡＮＤと、第２の割当ユニット１４２に書込まれるべき新しいデータのためのファイルおよびエクステント情報を含むキー−ＯＲとを含む。
【００３７】
【表２】
0004721639.tif 000003
【００３８】
ステップ４０６では、第２のストレージアクセスキー１５７の関連のない部分が、Ｉ／Ｏ要求のキーマスク値によって破棄される。この例では、有効フラグ以外はすべて破棄される。ステップ４０８では、第２のストレージアクセスキー１５７の関連のある部分が、Ｉ／Ｏ要求の予期されるキー値と比較される。第２のストレージアクセスキー１５７の関連のある部分は、Ｉ／Ｏ要求の予期されるキー値フィールドと同様に、「０」であるので、一致が成功する。ステップ４１８では、Ｉ／Ｏ要求のキー−ＡＮＤフィールドが第２のストレージアクセスキー１５７に適用され、これをクリアする。次いで、ステップ４２０では、Ｉ／Ｏ要求のキー−ＯＲフィールドが第２のストレージアクセスキー１５７に適用される。次いで、ステップ４２２では、Ｉ／Ｏ要求が、第２の割当ユニット１４２に新しいデータを書込む。
【００３９】
キー−ＯＲフィールドは、新しく書込まれたデータのファイルおよびエクステントを識別する情報を含む。キー−ＯＲフィールドは他の情報も含み得る。この例では、これは書込動作であるので、キー−ＯＲフィールドは、ファイル０ｘ３００およびエクステント０ｘ４からのデータが第２の割当ユニット１４２に書込まれていることを示すのに用いられる情報を含む。
【００４０】
この発明の別の実施例に従って、コピーオンライト機能が、ストレージアクセスキーを用いてイネーブルされる。コピーオンライトの機能性は、アプリケーションプログラマまたはファイルシステムプログラマがストレージアクセスキー概念を用いて特定のプログラミングの問題を解決し得る方法のうちの一例である。コピーオンライトの機能性を用いて、単一のオリジナルのファイルのスナップショットコピーとして始まる個別の論理ファイルを効率的に管理する。ファイルのコピーを作る場合、データストレージシステムの第２の位置にデータ自体を物理的にコピーすることは非効率的であり、かつストレージ空間が無駄になる。新しい論理ファイルのために単に別のエクステントマップを作成し、古いエクステントマップと同じ位置への新しいエクステントマップポイントを有する方がより効率的である。
【００４１】
図５では、第１のファイル５００には０Ｘ１００のファイル番号が付される。スナップショットコピーのない第１のファイル５００は、第１のエクステントマップ５１０に３つのエクステントエントリを有する。第１のエクステントエントリ５１２は第１の割当ユニット５２２を指す。第２のエクステントエントリ５１４は第２の割当ユニット５２４を指す。第３のエクステントエントリ５１６は第３の割当ユニット５２６を指す。割当ユニット５２２、５２４および５２６は、ストレージデバイス１４０上に含まれる。各割当ユニットは、それに関連付けられるストレージアクセスキー５３２、５３４および５３６を有する。第１のストレージアクセスキー５３２は第１の割当ユニット５２２に関連付けられる。第２のストレージアクセスキー５３４は第２の割当ユニット５２４に関連付けられる。第３のストレージアクセスキー５３６は第３の割当ユニット５２６に関連付けられる。有効（Valid）（Ｖ）、読出（Read）（Ｒ）および書込（Write）（Ｗ）フラグは、各ストレージアクセスキーに対して１にセットされて、割当ユニットが有効であり、読出可能であり、かつ書込可能であることを示す。ストレージアクセスキーは各々、ファイル番号（File Number）（ＦＩＬＥ  ＮＢＲ）およびエクステント（Extent）（ＥＸＴ）が、エクステントマップから得られる対応する値にセットされており、ファイルのどのエクステントが各ストレージアクセスキーに関連付けられる割当ユニットに記憶されるかが示される。ストレージアクセスキーはまた、各々が、マスクの上位ビット（０Ｘ８０００）に１を含むスナップショットマスク（Snapshot Mask）（ＳＳ  ＭＡＳＫ）を有しており、これらの割当ユニットがプライマリファイルに対応することが示される。使用されていないストレージアクセスキーはそれらの有効フラグがクリアされており、これらが有効なデータを含まないことが示される。
【００４２】
第２の割当ユニット５２４への書込Ｉ／Ｏ動作を実行するプロセスは、以下の表３のＩ／Ｏ要求を用い得る。
【００４３】
【表３】
0004721639.tif 000004
【００４４】
Ｉ／Ｏ要求におけるキー番号は、第２のストレージアクセスキー５２４に対応する２にセットされる。このキーは、第２の割当ユニットがファイルのエクステントマップ５１０に第２のエクステントエントリ５１４を含むことを示す。すべてのキーマスクビットは、Ｉ／Ｏ動作が対象としているファイルのコピーに対応するスナップショットビット以外は、１にセットされる。この例では、書込Ｉ／Ｏ動作は、スナップショットマスクにおける最上位ビット（０Ｘ８０００）によって表わされるプライマリファイル（非スナップショットコピー）を対象としている。したがって、ストレージデバイスは、上位スナップショットマスクビットを除いて、予期されるキー値フィールドにおけるすべてのフィールドを比較するだろう。この例では、この比較は成功し、Ｉ／Ｏ要求が可能となる。
【００４５】
図５の第１のファイル５００のスナップショットコピーが作られた後、図６に示されるように、ファイルシステムには、ともにストレージデバイス１４０上の同じ位置を指す２つのファイルが存在する。第２のファイル６００はファイルディレクトリにおいて作成される。第２のファイル６００は第２のエクステントマップ６１０を指す。第２のエクステントマップ６１０は３つのエクステントエントリを含む。これらのエクステントエントリは、第１のエクステントマップ５１０のエクステントエントリが指すのと同じ割当ユニットを指す。第４のエクステントエントリ６１２は第１の割当ユニット５２２を指す。第５のエクステントエントリ６１４は第２の割当ユニット５２４を指す。第６のエクステントエントリ６１６は第３の割当ユニット５２６を指す。スナップショットコピー６００は新しいファイル番号（０Ｘ１０１）を割当てられるが、ストレージアクセスキーにおけるファイル番号フィールドはプライマリファイル番号（０Ｘ１００）のままである。プロセスは、スナップショットコピー６００へのＩ／Ｏ要求を開始する際、オリジナルのファイル５００のファイル番号を用いる。スナップショットコピーに対応するストレージアクセスキー５３２、５３４および５３６のスナップショットマスクフィールドにおけるビットは、１にセットされている。この例では、これは作成された第１のスナップショットであるので、次の最上位ビットが１にセットされている。
【００４６】
スナップショットコピーが作成されると、プライマリファイル５００またはスナップショットコピー６００のどちらかへの書込Ｉ／Ｏ動作により、「コピーオンライト」ストレージキー障害が生じる。たとえば、第２の割当ユニット５２４に記憶される、スナップショットコピー６００の第２のエクステントへの書込Ｉ／Ｏ動作を実行するプロセスは、以下の表４のＩ／Ｏ要求を用いることとなる。
【００４７】
【表４】
0004721639.tif 000005
【００４８】
スナップショットコピー６００はプライマリファイル５００のコピーであるので、スナップショットコピー自体のファイル名（０Ｘ１０１）ではなく、プライマリファイル５００に関連付けられるファイル名（０Ｘ１００）を用いる。第２のストレージアクセスキー５３４におけるスナップショットマスクは０ＸＣ０００であり、０ＸＢＦＦＦのＩ／Ｏ要求におけるスナップショットマスクの適用後では、マスクされた値は０Ｘ８０００である。このマスクされた値は、ストレージアクセスキーに対する予期されるキー値において、ゼロ（０）であるスナップショットマスク値と一致せず、したがって、一致するものが無く、ストレージデバイスはストレージキー障害でもって書込Ｉ／Ｏをトラップする。
【００４９】
ストレージキー障害により、書込動作が禁止され、ファイルシステムが書込アルゴリズム上でそのコピーを生じさせることとなる。一実施例では、書込アルゴリズム上のコピー
は、１つの割当ユニットから別の割当ユニットへデータを移動させるための上述と類似の方法を用いて、目標とする割当ユニットのコピーを作成する。コピーオンライトアルゴリズムの詳細は、アプリケーションまたはファイルシステムプログラマにとっては設計上の選択であり、この発明には重要ではない。ファイルシステムがファイルシステムメタデータを更新した後、ファイルシステムは、データの新しく作られたコピー上で再び書込動作を試み、この実行は成功する。
【００５０】
書込動作の第２の試み後のファイルシステムメタデータが図７に示される。図７では、第４の割当ユニット７２４が割当てられており、第２の割当ユニット５２４からのデータは、第４の割当ユニット７２４にコピーされている。第４のストレージアクセスキー７３４は、第４の割当ユニット７２４に割当てられている。第４のストレージアクセスキー７３４は、第５のエクステントエントリ６１４のファイル番号およびエクステント番号を割当てられている。第４のストレージアクセスキー７３４のスナップショットマスクは、その次の最上位スナップショットマスクビットを１にセットされており、したがって、スナップショットマスクが０Ｘ４０００と読出す。これは、第４の割当ユニット７２４がプライマリファイル５００の第１のスナップショットコピー６００に対応することを示す。第２の割当ユニット５２４がもはや共有されないので、第２のストレージアクセスキー５３４の第１のスナップショットマスクビットがクリアされる。第２のストレージアクセスキー５３４のスナップショットマスクフィールドがここで０Ｘ８０００を読出す。
【００５１】
フェンスキー
フェンスキーは、上述のように、プロセスファミリ内のメタデータ更新がスプリットブレーン状態に直面しても、確実に継続し得るメカニズムである。図８では、一実施例において、ファイルシステム８００は、ノード８１０、８２０、８３０および８４０を含む。一実施例では、各ノード８１０、８２０、８３０および８４０は、別個のＣＰＵおよび関連した回路であり、ストレージシステム１３０に関連付けられる。別の実施例では、ノード８１０、８２０、８３０および８４０は各々、複数のＣＰＵを含む。第１のノード８１０は、第１のノード８１０上で実行しているプロセス８１２、８１４および８１６を含む。第２のノード８２０は、第２のノード８２０上で実行しているプロセス８２２および８２４を含む。各プロセス８１２、８１４、８１６、８２２および８２４は、その通常の動作中に、矢印で示されるように、ストレージシステム１３０にＩ／Ｏ要求を伝送する。
【００５２】
一実施例では、ストレージシステムに送られる各Ｉ／Ｏ要求は、Ｉ／Ｏ要求を行なっているプロセスを識別する情報を含む。別の実施例では、Ｉ／Ｏ要求は、Ｉ／Ｏ要求を行なっているアプリケーションを識別する情報を含み、１つのアプリケーションには複数のプロセスが含まれる。ファイルシステムのノード内では、Ｉ／Ｏ要求エンティティを作るエンティティの正確な性質は、当業者にとっては設計上の選択であり、この発明には重要ではない。
【００５３】
Ｉ／Ｏ要求がストレージシステムに送られると、この要求を実行するプロセスは、ストレージシステム上のデータにアクセスすることが可能であるプロセスの集合と照らし合わせてチェックされる。要求プロセスが、可能であるプロセスの集合内にある場合、この要求プロセスはデータにアクセスすることが可能となる。要求プロセスが、データにアクセスすることが可能であるプロセスの集合内にない場合、この要求プロセスはデータへのアクセスを拒否される。
【００５４】
図９では、一実施例において、フェンスキー９１０の集合がストレージデバイス１４０の内部にある。フェンスキーは０からＮ−１まで番号が付けられ、Ｎは集合におけるフェンスキーの番号である。各フェンスキーはノード上のプロセスに対応する。フェンス値の内容は、ストレージデバイス１４０を共有するプロセスのファミリによって用いられる通
信相互接続９２０を介して交換されるメッセージを介して、始動時に取決められる。プロセスによるストレージデバイスへのアクセスは、アクセスを求めているＩ／Ｏ要求において特定される値と、このプロセスに関連付けられるフェンスキーエントリを比較することにより、許可される。
【００５５】
一実施例では、フェンスキーはストレージデバイス１４０上に記憶される。別の実施例では、フェンスキーは、ストレージデバイス１４０を含むストレージシステムのための制御装置（図示せず）のメモリに記憶される。一実施例では、フェンスキーは、関連付けられる特定のストレージデバイスがたとえ非活性化されても、持続性がある。別の実施例では、フェンスキーは、ストレージデバイス１４０が再活性化されると、ストレージデバイス１４０上に記憶されるデータから再構成される。
【００５６】
図９の具体的な実施例では、ストレージデバイス１４０は、第１のノード９５０上で実行する第１のプロセス９５５と、第２のノード９６０上で実行する第２のプロセス９６５とによって共有されている。ノード９５０および９６０は、分かりやすくするために省かれる他のプロセスも含む。第１のフェンスキー９３０は、ストレージデバイス１４０上で初期設定され、第１のノード９５０上で実行する第１のプロセス９５５に関連付けられる。第２のフェンスキー９４０は、ストレージデバイス１４０上で初期設定され、第２のノード９６０上で実行する第２のプロセス９６５に関連付けられる。
【００５７】
一実施例では、各プロセスは関連付けられるフェンスキーを有する。代替的には、プロセスの集合はフェンスキーに関連付けることができる。フェンスキーは、プロセス９５５および９６５が初期設定される際に割当てられる。代替的には、プロセス９５５および９６５が最初にストレージデバイス１４０にアクセスしようと試みる際に、フェンスキーが割当てられ得る。第１のプロセス９５５および第２のプロセス９６５は異なるノード上に位置する。代替的には、第１のプロセス９５５は、第２のプロセス９６５と同じノード上に位置し得る。各ストレージデバイスは、好ましくは、各プロセスに対する個別のフェンスキーを含む。
【００５８】
第１のプロセス９５５が初期設定されると、第１のフェンスキー９３０にフェンス値が割当てられる。第２のプロセス９６５が初期設定されると、第２のフェンスキー９４０にフェンス値が割当てられる。これらフェンス値は、好ましくは、固有の、繰返さない値であり、特定のプロセスを識別するのに役立つ。たとえば、フェンスキー値は、予め規定された基準時間から、フェンスキーに関連付けられるプロセスが作成される時間までに経た時間の間隔に基づく可能性がある。
【００５９】
動作ノード上のプロセスと別のノード上のプロセスとの間の通信が失われる場合、および、動作ノード上のプロセスがファイルシステムメタデータを更新する必要がある場合、動作プロセスは、通信が失われたプロセスに関連付けられるフェンスキーのフェンスキー値を変更する。これにより、他のプロセスが、ストレージデバイスへのさらに他のアクセスからロックアウトされる。他のプロセスは、回復し、通信を再確立した後、新しいフェンスキー値について動作ノードに問合せ、再び通常の動作を始める。
【００６０】
一実施例のフェンスキーの動作の実際的な例として、第１のプロセス９５５がストレージデバイス１４０にアクセスすることを求めると想定する。図１０のフローチャートでは、図９に関連して、ステップ１００２で、第１のプロセス９５５が、ストレージデバイス１４０にアクセスを要求するＩ／Ｏ要求を生成する。一実施例では、Ｉ／Ｏ要求は、以下の表５に示されるとおりである。
【００６１】
【表５】
0004721639.tif 000006
【００６２】
別の実施例では、Ｉ／Ｏ要求は、表６に示されるように、ストレージアクセスキー情報とフェンスキー情報との両方を含む。
【００６３】
【表６】
0004721639.tif 000007
【００６４】
表６のＩ／Ｏ要求は３つの部分を含む。すなわち、上述のＩ／Ｏ部分（１）と、オプションで、上述のストレージアクセスキー部分（２）と、フェンスキー部分（３）とである。フェンスキー部分は、Ｉ／Ｏ要求と比較されるフェンスキーを識別するフェンスキー番号と、Ｉ／Ｏ要求がフェンスキーと比較するのに用いる予期されるフェンス値とを含む。
【００６５】
ステップ１００４では、Ｉ／Ｏ要求が第１のストレージデバイス１４０に送られる。ストレージデバイス１４０は、Ｉ／Ｏ要求内にフェンスキー番号（０）を配置し、第１のフェンスキー９３０がＩ／Ｏ要求と比較すべき適切なフェンスキーであることを判断する。ステップ１００６では、ストレージデバイス１４０は、第１のフェンスキー９３０に含まれるフェンス値（０Ｘ２００）を、Ｉ／Ｏ要求に含まれる予期されるフェンス値（０Ｘ２００）と比較する。一実施例では、この比較は、予期されるフェンス値のビットの各々の、第１のフェンスキー９３０に含まれるフェンス値の対応するビットとのブール比較によって行なわれる。２つの値を比較する正確な方法は、当業者にとっては設計上の選択であり、この発明には重要ではない。
【００６６】
この場合の実施例では、予期されるフェンス値と第１のフェンスキー９３０に含まれるフェンス値とが同じであるので、この比較は成功する。ステップ１０１２では、キー変更要求はない。Ｉ／Ｏ要求がフェンスキー部分とストレージアクセスキー部分との両方を含む場合、ステップ１０１８では、ストレージデバイス１４０が、上述の方法を用いて、Ｉ／Ｏ要求のストレージアクセスキー部分を処理する。代替的には、ストレージデバイス１
４０は、最初にＩ／Ｏ要求のストレージアクセスキー部分を処理し、次いで、フェンスキー部分を処理し、両方のキーが一致する場合、Ｉ／Ｏ要求が完了する。これらの部分の処理の順序付けは、当業者にとっては設計上の選択であり、この発明には重要ではない。
【００６７】
しばしば、第２のプロセス９６５がストレージデバイス１４０にアクセスするのを拒否されることが望まれる。第２のプロセス９６５がストレージデバイス１４０にアクセスするのを拒否される必要があるのには、さまざまな理由がある。第２のプロセス９６５が誤動作する可能性があるか、または、第２のプロセス９６５が、第１のプロセス９５５またはストレージデバイス１４０などのオブザーバには誤動作しているように見える可能性がある。というのも、たとえば、第２のプロセス９６５がオブザーバとの通信を停止してしまうからである。第２のプロセス９６５のストレージデバイス１４０へのアクセスを拒否するさまざまな理由は、当業者にとっては設計上の選択であり、この発明には重要ではない。
【００６８】
プロセスがストレージデバイス１４０にアクセスするのをフェンスキーがいかに阻止するかを示す実際的な例が、図１１のシステムに関連して、図１０のフローチャートを用いて示される。図１１では、通信相互接続９２０は中断されている。第１のプロセス９５５がこれを検出し、ステップ１００２で、第１のプロセス９５５が、ストレージデバイス１４０にアクセス阻止要求を送って、第２のプロセス９６５がストレージデバイス１４０にアクセスするのを阻止するようストレージデバイス１４０に要求する。ファイルシステムにおける通信障害を検出する方法は、当業者にとっては周知であり、この発明には重要ではない。一実施例では、第１のプロセス９５５は、ストレージシステムにおけるストレージデバイスのすべてに第２のプロセス９６５がアクセスするのを阻止することを求める。別の実施例では、第１のプロセス９５５は、ストレージシステムにおけるストレージデバイスのうちのいくつかまたは１つのみに第２のプロセス９６５がアクセスするのを阻止することを求める。
【００６９】
アクセス阻止要求の例が以下の表７に示される。
【００７０】
【表７】
0004721639.tif 000008
【００７１】
アクセス阻止要求は３つの部分を含む。第１の部分（１）は、なされている要求の種類を識別し、かつ、アクセスされているストレージデバイスを識別する情報、すなわち、アクセス阻止要求が変更を求めるフェンスキーの番号である１のターゲットフェンスキー番号と、ターゲットとするフェンスキーをそれに変更するよう阻止要求が求める値である０
Ｘ２０２の新しいフェンスキー値とを含む。第２の部分（２）は、オプションであり、ストレージアクセスキー情報を含む。この場合、ストレージアクセスキーは含まれず、このため、キーマスクがすべて０にセットされて、ストレージアクセスキー障害から守られる。第３の部分（３）は、上述のように、アクセス阻止要求を行なうプロセスのフェンスキー番号と予期されるフェンス値とを含む。この情報が含まれるのは、別のプロセスのアクセス権の変更を求めるプロセス自体に、最初に、ストレージシステムへのアクセスが認可されなければならないからである。
【００７２】
具体的な実施例では、ステップ１００４で、アクセス阻止要求が、第１のプロセス９５５によってストレージデバイス１４０に送られる。ステップ１００６では、ストレージデバイス１４０は上述の方法を用いて、第１のプロセス９５５自体がストレージデバイス１４０にアクセス可能であることを確認する。この具体的な実施例では、第１のプロセス９５５はアクセステストに通り、アクセス阻止要求が受取られる。別の実施例においては、ステップ１００８では、第１のプロセス９５５自体が第２のプロセス９６５またはストレージデバイス１４０などの別のエンティティによって阻止されているので、第１のプロセス９５５はアクセステストに失敗し、アクセス阻止要求が拒否される。
【００７３】
アクセス阻止要求がアクセステストに通り、ストレージデバイス１４０によって受取られると、ステップ１０１２では、この要求がフェンスキーを変更するよう求めることに留意されたい。ステップ１０１４では、ターゲットフェンスキー番号がアクセス阻止要求から読出される。この場合、ターゲットフェンスキー番号は１であり、第２のプロセス９６５に関連付けられる第２のフェンスキー９４０を参照する。次いで、ステップ１０１６では、新しいフェンス値である０Ｘ２０２がアクセス阻止要求から読出され、新しいフェンス値が第２のフェンスキー９４０に書込まれる。新しいフェンス値は、予め規定された阻止値である。一実施例では、次いで、アクセス阻止要求が、同様の態様で、ストレージシステムにおけるストレージデバイスのすべてに対して適用される。別の実施例では、アクセス阻止要求は、ストレージシステムにおけるどのストレージデバイスに対してアクセス阻止要求が適用されるのかを示す追加の情報を含む。
【００７４】
上述のセットされたフェンスキー動作は、この発明の一実施例のフェンスキーおよびストレージアクセスキーを用いて実現することのできる１つの動作の一例である。他の動作もまた、この発明の一実施例に従ったフェンスキーおよびストレージアクセスキーを用いて実現することができる。具体的な動作は、フェンスキーを検索する動作、ストレージアクセスキーをセットする動作、および／またはストレージアクセスキーを検索する動作を含む。
【００７５】
別の実施例では、アクセス阻止要求が第２のフェンスキー９４０に記憶されるフェンスキー値を変更すると、第２のプロセス９６５はストレージデバイス１４０にアクセスしようと試み得る。第２のプロセス９６５は、フェンスキー番号の「１」および予期されるフェンス値の「Ｏｘ２０１」を用いて、上述のようにＩ／Ｏ要求を生成する。第２のフェンスキー９４０はＩ／Ｏ要求と比較される。ステップ１００６では、予期されるフェンス値が、第２のフェンスキー９４０の新しく変更されたフェンスキー値と比較される。この場合、予期されるフェンス値は０Ｘ２０１であり、第２のフェンスキー９４０のフェンス値は０Ｘ２０２であるので、２つの値は異なり、比較が失敗し、フェンスキー障害が引起こされ、ステップ１００８で、第２のプロセスはストレージデバイス１４０へのアクセスを拒否される。ステップ１００９では、新しいフェンス値が、Ｉ／Ｏ要求を行なうプロセスに戻される。
【００７６】
フェンスキー障害は、第２のプロセス９６５が回復処置を開始すべきことを示す。一実施例では、これらの回復処置は、１）そのエクステントマップのキャッシュされたコピー
すべてを無効にし、２）ファイルシステムにおける他のノードでもってそのキー値を再度取決め、３）第１のノード９５０との通信を回復する、第２のプロセスを含み得る。第２のフェンスキー９４０に記憶される予め規定された阻止値はまた、フェンシングを行なったのがどのノードであったのかを示すポインタとして用いることもできる。これらの処置の詳細は、アプリケーションのプログラマまたはファイルシステムのプログラマにとっては設計上の選択であり、この発明には重要ではない。
【００７７】
システムアーキテクチャ概要
図１２では、一実施例において、コンピュータシステム１２２０は、複数の個々のユーザステーション１２２４に接続されるホストコンピュータ１２２２を含む。一実施例では、ユーザステーション１２２４は各々、１つ以上のアプリケーション、すなわちプログラムを記憶し得、かつ独立して実行し得る好適なデータ端末、たとえば、但し以下に限定されないが、パーソナルコンピュータ、携帯用のラップトップコンピュータまたは携帯情報端末（「ＰＤＡ」）を含む。例示のために、ユーザステーション１２２４のいくつかは、ローカルエリアネットワーク（「ＬＡＮ」）１２２５を介してホストコンピュータ１２２２に接続される。他のユーザステーション１２２４は、公衆電話交換回線網（「ＰＳＴＮ」）１２２８および／またはワイヤレスネットワーク１２３０を介して、ホストコンピュータ１２２２に遠隔接続される。
【００７８】
一実施例では、ホストコンピュータ１２２２は、データストレージシステム１２３１に関連して動作し、このデータストレージシステム１２３１は、ホストコンピュータ１２２２によって容易にアクセスできるデータベース１２３２を含む。
【００７９】
代替的な実施例では、データベース１２３２は、たとえば、ホストコンピュータのＲＯＭ、ＰＲＯＭ、ＥＰＲＯＭ、もしくは他のメモリチップ、および／またはそのハードディスクに記憶されて、ホストコンピュータ上に常駐し得る。さらに代替的な実施例では、データベース１２３２は、１つ以上のフロッピー（Ｒ）ディスク、フレキシブルディスク、磁気テープ、他のいずれかの磁気媒体、ＣＤ−ＲＯＭ、他のいずれかの光学媒体、パンチカード、紙テープ、もしくは孔のパターンを備えた他のいずれかの物理的な媒体、またはコンピュータがそこから読出すことのできる他のいずれかの媒体から、ホストコンピュータ１２２２によって読出され得る。
【００８０】
代替的な実施例では、ホストコンピュータ１２２２は、上述のように、種々の媒体に記憶される２つ以上のデータベース１２３２にアクセスすることができる。
【００８１】
図１３では、一実施例において、各ユーザステーション１２２４およびホストコンピュータ１２２２は、各々が一般的に処理ユニットと称され、汎用のアーキテクチャ１３０２を具体化する。処理ユニットは、命令、メッセージおよびデータ、集約的には情報、を通信するためのバス１３０３または他の通信機構、および、バス１３０３と結合される、情報を処理するための１つ以上のプロセッサ１３０４を含む。処理ユニットはまた、プロセッサ１３０４によって実行される動的データおよび命令を記憶するための、バス１３０３に結合されるランダムアクセスメモリ（ＲＡＭ）または他の動的ストレージデバイスなどのメインメモリ１３０８を含む。このメインメモリ１３０８はまた、プロセッサ１３０４による命令の実行中に、一時データ、すなわち変数、または他の中間情報を記憶するために用いられてもよい。
【００８２】
処理ユニットはさらに、プロセッサ１３０４に対する静的データおよび命令を記憶するための、バス１３０３に結合される読出専用メモリ（ＲＯＭ）１３０９または他の静的ストレージデバイスを含み得る。磁気ディスクまたは光ディスクなどのストレージデバイス１３１０はまた、プロセッサ１３０４に対するデータおよび命令を記憶するために設けら
れ、バス１３０３に結合される。
【００８３】
処理ユニットは、以下に限定されないが、陰極線管（ＣＲＴ）などの表示装置１３１１にバス１３０３を介して結合されて、ユーザに情報を表示し得る。英数字キーおよび他のキーを含む入力装置１３１２はバス１３０３に結合されて、情報およびコマンド選択をプロセッサ１３０４に伝達する。別の種類のユーザ入力装置は、以下に限定されないが、マウス、トラックボール、フィンガーパッド、またはカーソル方向キーなどのカーソル制御１３１３を含み、方向情報およびコマンド選択をプロセッサ１３０４に伝達し得、表示装置１３１１上のカーソル移動を制御し得る。
【００８４】
この発明の一実施例に従って、個々の処理ユニットは、メインメモリ１３０８に含まれる１つ以上の命令の１つ以上のシーケンスを実行するそれぞれのプロセッサ１３０４により特定の動作を実行する。このような命令は、ＲＯＭ１３０９またはストレージデバイス１３１０などの別のコンピュータ読出可能媒体からメインメモリ１３０８に読込まれ得る。メインメモリ１３０８に含まれる命令のシーケンスの実行により、プロセッサ１３０４がこの明細書中に記載されるプロセスを実行する。代替的な実施例では、ソフトウェア命令の代わりに、またはこのソフトウェア命令と組合わせてハードワイヤード回路を用いて、この発明を実現することができる。したがって、この発明の実施例は、ハードウェア回路および／またはソフトウェアの特定の組合せのいずれにも限定されない。
【００８５】
この明細書中で用いられる用語「コンピュータ読出可能媒体」は、情報を提供するか、またはプロセッサ１３０４によって読出可能であるいずれの媒体をも指す。このような媒体は、不揮発性媒体、揮発性媒体、および伝送媒体を含むが、これらに限定されない多くの形を取り得る。不揮発性媒体、すなわち、電力のない状態で情報を保存することのできる媒体には、ＲＯＭ１３０９が含まれる。揮発性媒体、すなわち、電力のない状態で情報を保存することのできない媒体には、メインメモリ１３０８が含まれる。伝送媒体には、バス１３０３を含むワイヤを含む、同軸ケーブル、銅ワイヤおよび光ファイバが含まれる。伝送媒体は、搬送波の形、すなわち、周波数、振幅または位相におけるのと同様に変調されて情報信号を伝送し得る電磁波の形を取ることもできる。加えて、伝送媒体は、電波および赤外線データ通信中に生成されるような音波または光波の形を取り得る。
【００８６】
コンピュータ読出可能媒体の一般的な形は、たとえば、フロッピー（Ｒ）ディスク、フレキシブルディスク、ハードディスク、磁気テープ、他のいずれかの磁気媒体、ＣＤ−ＲＯＭ、他のいずれかの光学媒体、パンチカード、紙テープ、孔のパターンを備えた他のいずれかの物理的媒体、ＲＡＭ、ＲＯＭ、ＰＲＯＭ（すなわち、プログラム可能な読出専用メモリ）、ＦＬＡＳＨ−ＥＰＲＯＭ、他のいずれかのメモリチップもしくはカートリッジを含むＥＰＲＯＭ（すなわち、消去可能プログラム可能読出専用メモリ）、搬送波、またはプロセッサ１３０４がそこから情報を検索することのできる他のいずれかの媒体を含む。
【００８７】
実行のためにプロセッサ１３０４に１つ以上の命令の１つ以上のシーケンスを提供するには、コンピュータ読出可能媒体のさまざまな形が必要とされる場合がある。たとえば、命令は、最初に、リモートコンピュータ（図示せず）の磁気ディスク上に提供され得る。このリモートコンピュータは、その動的メモリに命令をロードし、次いで、モデムを用いて電話線を介してこれらを伝送し得る。処理ユニットにとってローカルなモデムは、電話線上の命令を受信し得、赤外線送信機を用いて、電話線を介して伝送された命令信号を対応する赤外線信号に変換し得る。バス１３０３に結合される赤外線検出器（図示せず）は、この赤外線信号を受信し得、そこでバス１３０３上に命令を配置し得る。バス１３０３はメインメモリ１３０８へ命令を伝え得、そこからプロセッサ１３０４が、その後、命令を検索し実行する。メインメモリ１３０８が受取る命令は、プロセッサ１３０４によるそ
の実行の前または後に、ストレージデバイス１３１０上に随意に記憶され得る。
【００８８】
各処理ユニットはまた、バス１３０３に結合される通信インターフェイス１３１４を含み得る。この通信インターフェイス１３１４は、それぞれのユーザステーション１２２４とホストコンピュータ１２２２との間に双方向通信を提供する。それぞれの処理ユニットの通信インターフェイス１３１４は、命令、メッセージおよびデータを含む、さまざまな種類の情報を表わすデータストリームを含む電気信号、電磁信号または光信号を送受信する。
【００８９】
通信リンク１３１５は、それぞれのユーザステーション１２２４とホストコンピュータ１２２２とをリンクする。通信リンク１３１５はＬＡＮ１２２５であってもよく、この場合、通信インターフェイス１３１４はＬＡＮカードであってもよい。代替的には、通信リンク１３１５はＰＳＴＮ１２２８であってもよく、この場合、通信インターフェイス１３１４は、統合サービスデジタル通信網（ＩＳＤＮ）カードまたはモデムであってもよい。同様に、さらに他の代替例として、通信リンク１３１５はワイヤレスネットワーク１２３０であってもよい。
【００９０】
処理ユニットは、そのそれぞれの通信リンク１３１５および通信インターフェイス１３１４を介して、プログラム、すなわちアプリケーション、コードを含む、メッセージ、データおよび命令を送受信し得る。受信されたプログラムコードは、それが受信されると、それぞれのプロセッサ１３０４によって実行され得、および／または、後の実行のために、ストレージデバイス１３１０または他の関連する不揮発性媒体に記憶され得る。この態様では、処理ユニットは、搬送波の形でメッセージ、データおよび／またはプログラムコードを受信し得る。
【００９１】
上述の明細書では、この発明を、その特定の実施例に関連して記載してきた。しかしながら、この発明のより広範な精神および範囲から逸脱することなく、さまざまな変形および変更が可能であることは明らかである。たとえば、この明細書中に記載されるプロセスのフローチャートに示されるプロセス動作の特定の順序付けおよび組合せが単に例示的なものであり、異なったもしくは追加のプロセス動作、またはプロセス動作の異なった組合せもしくは順序付けを用いてこの発明を実行し得ることを、読者は理解すべきである。したがって、明細書および図面は、限定的な意味ではなく例示的な意味で理解されるべきであり、この発明は、添付の特許請求の範囲およびそれらの法的な同等物に従う以外は、制限または限定されるべきではない。
【図面の簡単な説明】
【００９２】
【図１】例示的なファイルシステムファイルのためのプライマリメタデータを示す図である。
【図２】この発明の一実施例に従った、ストレージアクセスキーを用いていかにファイルへのアクセスを管理するかを示す、ストレージデバイス上に記憶されるファイルを示す図である。
【図３】この発明の一実施例に従った、ストレージアクセスキーを用いてデータを再配置するための方法を示すフローチャートである。
【図４】この発明の一実施例に従った、ストレージアクセスキーを用いるための方法を示すフローチャートである。
【図５】この発明の一実施例に従った、ファイルのスナップショットコピーの作成前にメタデータがいかに現われるかを示す、ストレージデバイス上に記憶されるファイルを示す図である。
【図６】この発明の一実施例に従った、ファイルのスナップショットコピーの作成後にメタデータがいかに現われるかを示す、ストレージデバイス上に記憶されるファイルを示す図である。
【図７】この発明の一実施例に従った、ファイルのスナップショットコピーの作成後、およびコピーオンライト障害がエクステント再配置を引起こした後に、メタデータがいかに現われるかを示す、ストレージデバイス上に記憶されるファイルを示す図である。
【図８】この発明の一実施例に従った、ファイルシステムおよび関連するストレージシステムを示すハイレベルの図である。
【図９】この発明の一実施例に従った、フェンスキーを用いる２つのプロセスを示す図である。
【図１０】この発明の一実施例に従った、フェンスキーを用いるための方法を示すフローチャートである。
【図１１】この発明の一実施例に従った、プロセスがストレージデバイスにアクセスするのを阻止するためのフェンスキーの使用を示す図である。
【図１２】この発明の一実施例に従ったコンピュータシステムを示す図である。
【図１３】この発明の一実施例に従った処理ユニットを示す図である。
【図１】
0004721639.tif 000009
【図２】
0004721639.tif 000010
【図３】
0004721639.tif 000011
【図４】
0004721639.tif 000012
【図５】
0004721639.tif 000013
【図６】
0004721639.tif 000014
【図７】
0004721639.tif 000015
【図８】
0004721639.tif 000016
【図９】
0004721639.tif 000017
【図１０】
0004721639.tif 000018
【図１１】
0004721639.tif 000019
【図１２】
0004721639.tif 000020
【図１３】
0004721639.tif 000021