(57)【特許請求の範囲】
【請求項１】
ファイルセグメントをアクセスするための少なくとも１つのｉノードを使用するオペレーティングシステムを有するメモリストレージデバイスにおいて、前記ｉノードは、
複数の行と、
データブロックを指し示すエクステントであって、それぞれのエクステントは、前記エクステントが間接エクステントあるいは直接エクステントのどちらであるのかを示すフィールドを有する、そのようなエクステントを記憶する行の部分と、を有することを特徴とするメモリストレージデバイス。
【請求項２】
データファイルをメモリストレージシステム中に記憶させる自動化された方法において、
記憶されるデータファイルにｉノードを割り当てるステップと、
複数のエクステントであって、それぞれのエクステントは前記データファイルのセグメントを記憶させるための１以上のデータブロックのストリングを指し示し、前記エクステントは間接エクステント及び直接エクステントの中の１つであることを指示するためのフィールドを有する、そのようなエクステントを前記ｉノード中に書き込むステップと、を有することを特徴とする方法。
【請求項３】
データファイルを記憶させる方法において、
複数のエクステントをｉノードに書き込むステップと、
前記ファイルの第１及び第２のデータセグメントを第１及び第２の物理データブロックに書き込むステップであって、第１及び第２のエクステントは、第１及び第２の物理データブロックを指し示している、そのようなステップと、
前記ｉノード中の前記エクステントの少なくとも１つを、少なくとも１つの空の行を有する前記ｉノードに応答して、前記第１及び第２のエクステントの間にスペースを残すようにシフトさせるステップと、
前記第１及び第２のエクステントの間に空の行を有する前記ｉノードに応答して、前記スペース中に第３の直接エクステントを挿入するステップであって、前記直接エクステントは、前記ファイルの新しいデータセグメントを記憶するための第３のデータブロックを指し示す、そのようなステップと、を有することを特徴とする方法。
【請求項４】
データファイルを記憶させる方法のためのインストラクションを有するオペレーティングシステムを使用するメモリストレージデバイス中での前記方法において、
複数のエクステントをファイルに割り当てられたｉノードに書き込むステップと、
データを第１及び第２のデータブロックに書き込むステップであって、第１及び第２の前記エクステントは前記第１及び第２の物理データブロックを指し示す、そのようなステップと、
第３の物理データブロックを指し示す間接エクステントを前記ｉノード中の前記第１と第２のエクステントの間に挿入するステップと、
少なくとも１つのエクステントを前記第３の物理データブロックに書き込むステップであって、前記１つのエクステントは前記ファイルのセグメントを記憶する物理データブロックを指し示す、そのようなステップと、を有することを特徴とする方法。
【請求項５】
それぞれのエクステントに、当該エクステントに指し示された連続するデータブロックの数を定めるレングスフィールドを書き込むステップを更に有する請求項４に記載の方法。
【請求項６】
グローバルキャッシュメモリと、
前記グローバルキャッシュメモリに結合した複数のプロセッサであって、それぞれのプロセッサはオペレーティングシステムを記憶するためのローカルメモリを有する、そのようなプロセッサと、
前記グローバルキャッシュメモリに結合した複数のデータストレージデバイスとを有し、
前記デバイス及びプロセッサは、前記キャッシュメモリ中でお互いにメッセージを供給することにより通信することが可能であり、
前記デバイスのそれぞれは、プロセッサ及びオペレーティングシステムを記憶するローカルメモリを有し、
それぞれのオペレーティングシステムは、前記ストレージデバイス中の物理データブロックにファイル名を抽象するためのエクステント・ベース・ファイルシステムを含み、該エクステント・ベース・ファイルシステムは、エクステントが記憶されたｉノードを含むことを特徴とする分散ストレージシステム。
【請求項７】
データファイルのセグメントを記録し及び見つけるために少なくとも１つのｉノードを使用するオペレーティングシステムを有するメモリストレージデバイスにおいて、前記ｉノードは、
複数の行を有し、
前記行の一部は、ファイルセグメントの部分を記憶するデータブロックを指し示す直接エクステントが書き込まれており、
データブロックを指し示す前記エクステントの少なくとも２つは、異なる論理ボリューム中にアドレスを有することを特徴とするメモリストレージデバイス。
【請求項８】
ファイルセグメントにアクセスするために少なくとも１つのｉノードを使用するオペレーティングシステムを有するメモリストレージデバイスにおいて、前記ｉノードは、
複数の行と、
データブロックを指し示すエクステントを記憶する前記行の一部と、を有し、
それぞれのエクステントは、前記エクステントは間接エクステントあるいは直接エクステントのどちらであるのかを示すフィールドを有し、
前記ｉノードのそれぞれの直接エクステントは、論理ボリュームポインタのためのフィールドを更に含むことを特徴とするメモリストレージデバイス。
【請求項９】
メモリストレージシステム中でデータファイルを記憶させるための自動化された方法において、
データファイルへｉノードを割り当てるステップと、
前記ｉノード中に複数のエクステントを書き込むステップと、を有し、
それぞれのエクステントは、前記データファイルのセグメントを記憶するための１以上のデータブロックのシーケンスを指し示し、
前記エクステントの少なくとも２つは、異なる論理ボリュームを指し示すことを特徴とする自動化された方法。
【請求項１０】
メモリストレージシステム中でデータファイルを記憶させるための自動化された方法において、
記憶されるデータファイルにｉノードを割り当てるステップと、
前記ｉノード中に複数のエクステントを書き込むステップとを有し、
それぞれのエクステントは、前記データファイルのセグメントを記憶するための１以上のデータブロックのストリングを指し示し、及び前記エクステントは間接エクステント又は直接エクステントの内の１つであることを指示するためのフィールドを有し、
書き込む前記ステップは、それぞれのエクステント中にアドレスポインタを書き込むステップを含み、
前記アドレスポインタは、論理ボリューム及び前記論理ボリューム中のデータブロックのオフセットを指示することを特徴とする自動化された方法。
【請求項１１】
データファイルを記憶させる方法のためのインストラクションを有するオペレーティングシステムを使用するメモリストレージデバイス中での前記方法において、
異なる論理デバイスを指し示す少なくとも２つの複数のエクステントを、ファイルに割り当てられたｉノードに書き込むステップと、
データを第１及び第２のデータブロックに書き込むステップであって、第１及び第２の前記エクステントは前記第１及び第２の物理データブロックを指し示す、そのようなステップと、
第３の物理データブロックを指し示す間接エクステントを前記ｉノード中の前記第１と第２のエクステントの間に挿入するステップと、
少なくとも１つのエクステントを前記第３の物理データブロックに書き込むステップであって、前記１つのエクステントは前記ファイルのセグメントを記憶する物理データブロックを指し示す、そのようなステップと、を有することを特徴とする方法。
【請求項１２】
論理ボリューム部分へのポインタ及び前記論理ボリューム中のデータブロックへのポインタを含むスタートアドレスフィールドをそれぞれのエクステントに書き込むステップと、
それぞれのエクステントに、当該エクステントに指し示された連続するデータブロックの数を定めるレングスフィールドを書き込むステップと、を更に有する請求項１１に記載の方法。
【請求項１３】
前記エクステント・ベース・ファイルシステムは、それぞれのファイルにｉノードを割り当てることによって前記ストレージデバイス中の物理データブロックにファイル名を抽象し、
それぞれのｉノードは、論理ボリュームを指し示すポインタを有するエクステントを記憶するように整えられている、請求項６に記載の分散ストレージシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本出願は、一般的にファイルシステムに関連し、より詳しくは、エクステント・ベース・ファイルシステム(extent-based file system)に関連する。
【０００２】
【従来の技術】
コンピュータシステムは、ファイルセグメントのシーケンスをしばしば含むデータファイルを処理し、記憶する。それぞれのファイルセグメントは、物理ストレージブロックの連続したシーケンスを使用する。しかし、異なるファイルセグメントを、広く分離した物理ストレージ位置に記憶させることができる。
【０００３】
ファイルシステムは、データファイルのデータストレージの詳細を、ソフトウェアアプリケーションプログラムのために、より簡単にする。ファイルシステムは、高レベルのアプリケーションが、実際の物理ストレージアドレスを通じてではなく、ディレクトリ名、ファイル名、及びオフセットのような抽象的な概念を通じて、記憶されたデータにアドレシングすることを可能にする。データストレージをアドレシングするためのこのシステムは、ソフトウェアアプリケーションが、どのようにデータが物理的に記憶されるかにより依存しないようにし、その結果、アプリケーションは、物理ストレージシステムにより束縛されず、よりポータブルになる。
【０００４】
図１は、ＵＮＩＸベースのシステムが、抽象的なファイル名と物理ストレージアドレスとの間の転換をする(translate)ために使用するファイルシステムを説明する。ファイルシステムは、データストレージデバイス１０上に記憶される２つのタイプの構造の助けにより、転換を実行する。第１のタイプの構造は、抽象的なディレクトリ名及びファイル名を、それぞれ他のディレクトリ１３及びインデックスノード(index node, inode, 以下ｉノードと称する)１５、１６にマッピングするディレクトリ１２である。第２のタイプの構造は、抽象的なファイルセグメントを、当該セグメントを記憶する物理データブロック１７〜１９にマッピングするｉノード１５、１６である。
【０００５】
ｉノード１５、１６は、エクステント２１〜２７のリストを含む。定義によると、それぞれのｉノード１５の連続するエクステント２１〜２４は連続するファイルセグメントに対応し、アドレスポインタ及びレングスによりセグメントのストレージアドレスを指示する。アドレスポインタは、例えばファイルセグメントを記憶するブロック５５、５８、５のような、第１のデータブロックの物理アドレスを指示する。レングスは、セグメントを記憶するために割り当てられた連続するデータブロックの数を示す。例えば、データブロック５５のアドレスを指し示すエクステント２１は、３つのデータブロック５５〜５７を含む。
【０００６】
それぞれのｉノード１５、１６は、そのｉノード１５、１６の特別な位置、すなわちエクステントのためのｉノード中に配置された最後の行に記憶された１以上の特別なエクステント２４、２７も含むことができる。特別なエクステント２４、２７は、追加のエクステントを記憶するデータブロックを指し示す。例えば、特別なエクステント２４は、追加のエクステント１８〜２０、２８を記憶するデータブロック９７を指し示す。追加のエクステント１８〜２０は、セグメントを記憶するデータブロック９５のストリングを指し示し、ファイルの終端を拡張して関連するファイルサイズを増大させることができる。データブロック９５の最後のエクステント２８は、それによりファイルの終端を更に拡張する特別なエクステントとすることもできる。
【０００７】
いくつかのファイルシステムは、大きいファイルと物理ストレージとの間の転換をする。図２は、抽象的ファイル３１を複数の物理ディスク３２、３３上に記憶されるデータブロックに転換することができるファイルシステム３０を説明する。大きいファイル３１のための十分なストレージスペースを提供するために、ファイルシステム３４は、中間抽象層(intermediate abstraction layer)、すなわち別個の物理ディスク３２〜３３中の物理スペース３６〜３７を単一の仮想スペース(virtual space)３８中に転換する仮想論理ボリューム(virtual logical volume)３５と対話(interact)する。次に、ファイル３１にアクセスするソフトウェアアプリケーション３９は、単一の大きい仮想ボリューム３５を見ることになり、別個のデバイス３２〜３３には気づくことはない。
【０００８】
【発明が解決しようとする課題】
本発明の１つの目的は、既存のファイルを拡張するためのより柔軟な方法を与えるファイルシステムを提供することである。
【０００９】
本発明の他の目的は、大きいファイルを記憶することに適合したファイルシステムを提供することである。
【００１０】
【課題を解決するための手段】
第１の態様では、本発明は、ストレージデバイス中のファイルセグメントにアクセスするため少なくとも１つのｉノードを使用する、メモリストレージデバイスを提供する。それぞれのｉノードは、複数の行を有する。その行の一部は、データブロックを指し示すエクステントを記憶する。それぞれのエクステントは、そのエクステントが間接エクステントなのか直接エクステントなのかを指示するためのフィールドを有する。
【００１１】
第２の態様では、本発明は、メモリデバイス中に記憶されたオペレーティングシステムにより実行される、データファイルを記憶するための方法を提供する。その方法は、ファイルに割り当てられたｉノードへのエクステントに書き込むステップと、第１及び第２のデータブロックへデータを書き込むステップと、ｉノード中の間接エクステントを第１と第２のエクステントの間に挿入するステップと、第３のデータブロックへ第３のエクステントを書き込むステップとを含む。第１及び第２のエクステントは、第１及び第２のデータブロックを指し示す。間接エクステントは、第３のデータブロックを指し示す。第３のエクステントは、ファイルのセグメントを記憶するデータブロックを指し示す。
【００１２】
第３の態様では、本発明は、分散ストレージシステムを提供する。ストレージシステムは、グローバルキャッシュメモリ、グローバルキャッシュメモリに結合した複数のプロセッサ、及びグローバルキャッシュメモリに結合した複数のデータストレージデバイスを含む。それぞれのプロセッサは、オペレーティングシステムを記憶するためのローカルメモリを有する。デバイス及びプロセッサは、キャッシュメモリ中でメッセージをお互いに供給することにより通信することができる。デバイスのそれぞれは、プロセッサ、及びオペレーティングシステムを記憶するローカルメモリを有する。それぞれのオペレーティングシステムは、ストレージデバイス中の物理データブロックへのファイル名を抽象(abstract)するためのエクステント・ベース・ファイルシステムを含む。
【００１３】
第４の態様では、本発明は、データファイルのセグメントを記録して見つけるために１つのｉノードを使用する、オペレーティングシステムを有するメモリストレージデバイスを提供する。それぞれのｉノードは、複数の行を有する。行の部分は、ファイルセグメントの部分を記憶しているデータブロックを指し示す、直接エクステントにより書き込まれる。そのエクステントの少なくとも２つは、アドレスが異なる論理ボリューム(logical volume)中にあるデータブロックを指し示す。
【００１４】
第５の態様では、本発明は、ストレージデバイス中のファイルセグメントにアクセスするため少なくとも１つのｉノードを使用する、メモリストレージデバイスを提供する。それぞれのｉノードは、複数の行を有する。行の一部は、データブロックを指し示すエクステントを記憶する。それぞれのエクステントは、そのエクステントが間接エクステントなのか直接エクステントなのかを示すためのフィールド、及び論理ボリュームポインタ(logical volume pointer)のためのフィールドを有する。
【００１５】
第６の態様では、本発明は、メモリデバイス中に記憶されたオペレーティングシステムにより実行される、データファイルを記憶させるための方法を提供する。その方法は、ファイルに割り当てられたｉノードへエクステントを書き込むステップと、第１及び第２のデータブロックにデータを書き込むステップと、間接エクステントを第１と第２のエクステントの間のｉノード中に挿入するステップと、第３のエクステントを第３のデータブロックに書き込むステップとを含む。第１及び第２のエクステントは、第１及び第２のデータブロックを指し示す。間接エクステントは、第３のデータブロックを指し示す。第３のエクステントは、ファイルのセグメントを記憶するデータブロックを指し示す。  第７の態様では、本発明は、分散ストレージシステムを提供する。ストレージシステムは、グローバルキャッシュメモリ、グローバルキャッシュメモリに結合した複数のプロセッサ、及びグローバルキャッシュメモリに結合した複数のデータストレージデバイスを含む。それぞれのプロセッサは、オペレーティングシステムを記憶するためのローカルメモリを有する。デバイス及びプロセッサは、キャッシュメモリ中でメッセージをお互いに供給することにより通信することができる。デバイスのそれぞれは、プロセッサ、及びオペレーティングシステムを記憶するローカルメモリを有する。それぞれのオペレーティングシステムは、それぞれのファイルにｉノードを割り当てることにより、ストレージデバイス中の物理データブロックへのファイル名を抽象するためのエクステント・ベース・ファイルシステムを含む。それぞれのｉノードは、論理ボリュームを指し示しているフィールドを有するエクステントを記憶するように適合させられている。
【００１６】
【発明の実施の形態】
本発明の他の目的、特徴、及び利点は、図面と共に以下の説明から明らかになるであろう。
【００１７】
図３は、グローバルキャッシュメモリ４２が、複数のプロセッサ４４、４５及びストレージデバイスドライバ４７〜４９に結合する分散ストレージシステム４０を図示する。それぞれのプロセッサ４４、４５及びドライバ４７〜４９は、グローバルキャッシュメモリ４２により入力／出力（Ｉ／Ｏ）を制御する中央処理ユニット（ＣＰＵ）と、例えばＲＯＭ又はＥＰＲＯＭのような、マイクロコードを記憶する永久メモリとを有する。マイクロコードは、ファイルシステムと共にオペレーティングシステム（ＯＳ）を含む。種々のデバイスドライバ４７〜４９は、例えばＲＡＩＤ形態に整えられた複数のストレージディスクを有することができる。
【００１８】
グローバルキャッシュメモリ４２は、プロセッサ４４、４５及びドライバ４７〜４９の間の通信のための対称的な環境を提供する。プロセッサ４４、４５及びドライバ４７〜４９は、グローバルキャッシュメモリ４２の所定の位置にメッセージを書き込むことにより、異なるプロセッサ４４、４５及びドライバ４７〜４９へリクエストを送り、また、そこからのリクエストに応答する。そのメッセージは、物理アドレスにより意図する受取先(recipient)を識別する。その受取先は、グローバルキャッシュメモリ４２中に供給されたメッセージを認識して読み出す。このようにして、グローバルキャッシュメモリ４２は、お互いを別個の論理デバイスとして認識するプロセッサ４４、４５及びドライバ４７〜４９がお互いへメッセージを書き込む黒板のように動作する。
【００１９】
図４は、どのようにして、図３のそれぞれのプロセッサ４４、４５及びドライバ４７〜４９上で、ファイルシステム５０は、１つのファイルのファイルセグメントを異なる論理デバイス及びボリュームにマッピングできるかを図示する。例えば、ファイルシステム５０は、ファイル５１の異なるセグメントを、ドライバ４７〜４８の異なるものへマッピングする。ファイルシステム５０は、ファイル５１のための抽象的なファイル名及びオフセットを、図２に示すファイルシステム３４とは異なり、仮想ボリュームを作り出すことなしに異なるドライバ４７〜４８上に記憶された物理セグメント５２、５３に直接転換する。ファイルシステムは、それぞれのセグメント５２、５３を記憶するドライバ４７〜４８を識別するので、プロセッサ４４〜４５及びドライバ４７〜４９は、ファイル５１のセグメントを直接操作するために、これらのドライバ４７〜４８にアドレシングする。
【００２０】
図５は、図３のファイルシステムが、抽象的ファイルと物理データブロックとの間で転換するために使用する物理構造を図示する。物理構造は、ディレクトリ６１、６２及びｉノード６３、６４を含む。それぞれのディレクトリ６１は、抽象的なファイル名及びディレクトリ名を、それぞれ、ｉノード６３、６４及びディレクトリ６２の物理アドレスに転換する。それぞれのｉノード６３、６４は、連続するファイルセグメントを物理データブロック８０〜８２、８３〜８４、９２〜９４のストリングにマッピングする、エクステント６５〜６６のリストを記憶する。
【００２１】
物理ディレクトリ６１、６２及びｉノード６３、６４は、グローバルキャッシュメモリ４２中に記憶される。関係のあるディレクトリ６１、６２及び／又はｉノード６３、６４のコピーも、プロセッサ４４、４５及びドライバ４７〜４９の揮発性メモリに局所的に(locally)記憶される。局所的に記憶されたコピーは、種々の局所的なオペレーティングシステムによりＩ／Ｏを高速化する。
【００２２】
それぞれのデータブロック８０〜８４、９２〜９４は、例えば４Ｋバイトの同じサイズを有する。それにも関わらず、エクステント６５〜６６は、異なるサイズのファイルセグメントを物理ストレージ位置にマッピングすることができる。異なるサイズのファイルセグメントを扱うために、それぞれのエクステントは、関連するファイルセグメントを記憶するデータブロックのストリング中のデータブロックの数を指示するレングスフィールド(length field)を有する。
【００２３】
それぞれのｉノード６３、６４の種々のエクステント６５、６６は、異なる論理ボリュームＬＶ１、ＬＶ２のデータブロック８０〜８４、９２〜９４にマッピングすることができる。例えば、ｉノード６３のエクステント１及び２は、第１の論理ボリュームＬＶ１中のデータブロック８０〜８３にマッピングし、同じｉノード６３のエクステント３は、第２の論理ボリュームＬＶ２中のデータブロック９２〜９３へマッピングする。異なるエクステント６５、６６は、単一の抽象的ファイルの異なるセグメントを、ドライバ４７〜４９の異なるものへ、及び異なる物理ディスク及びその中のパーティションへマッピングすることができる。
【００２４】
図６Ａ及び６Ｂは、図５のｉノード６３、６４中のエクステントのフォーマットを図示する。図示された実施形態のそれぞれのエクステントは、アドレスポインタフィールド、レングスフィールド、及びフラグフィールドを含む３つのフィールドを有する。
【００２５】
アドレスポインタフィールドは、論理ボリューム及びその論理ボリューム中のデータブロックの物理オフセットの両方を指示する。１つの実施形態では、論理ボリュームのためのポインタフィールド及びその中のデータブロックは、それぞれ、２バイト及び４バイトのレングスである。このフィールドの大きさ及び３２キロバイトのデータブロックについては、エクステントフィールドは、約６４Ｋの異なる論理ボリュームのそれぞれの中の約１４０×１０12バイトのデータを識別することができる。このようにして、分散ストレージシステム４０のファイルシステムは、非常に大きいファイルを扱うことができる。
【００２６】
レングスフィールドは、ファイルセグメントに割り当てられたストリング中の連続するデータブロックの数を指示する。上述の実施形態では、レングスフィールドは、４バイト長であり、このようにして、ストリングのレングスの広い範囲を識別する。もし、レングスフィールドの値が、関連するストリング中のデータブロックの数に等しいなら、ストリングは、１つのデータブロックから約４×１０9のデータブロックを含むことができる。
【００２７】
上述の実施形態では、フラグフィールドは、エクステントにより指し示されたデータブロックのタイプを記述するために２バイトを使用する。フラグフィールドの第１の部分は、データブロックはロック状態か非ロック状態か、すなわち利用できるか利用できないかを指示する。ロック状態の指示(locked designation)は、データブロックへのアクセスは制限されていることを示す。プロセッサ４４〜４５及びドライバ４７〜４９は、関連するデータブロック中のデータを操作している間、エクステントのフラグフィールドをロック状態の指示に変更することができ、そのため他のデバイスは同時にそのデータブロックをアクセスしない。フラグフィールドの第２の部分は、空のデータブロックが消去されたかどうかを指示する。未消去の指示(not zeroed designation)を使用することによって、ファイルシステムは、予めブロックを消去すること無しに、データブロックをファイルに配置することができる。もし後続のアクセスが、全体のデータブロックに書き込むなら、処理時間を節約するため、そのブロックを消去する必要はないであろう。フラグフィールドの第３の部分は、データブロック中に記憶されたデータタイプを、３つのタイプの中の１つに、すなわち、リアルファイルデータ、ノンデータ、又はエクステントに分類する。
【００２８】
図７は、フラグフィールドの第３の部分と、エクステントにより指し示されたデータブロックのデータタイプとの間の関係を図示する。もし、データブロック１００が、関連するファイルのためのリアルデータを有するなら、フラグフィールドの第３の部分は、関連するエクステント１０１は直接エクステントであることを指示する。もしデータブロック１０２がまだ割り当てられていないなら、フラグフィールドの第３の部分は、関連するエクステント１０３はホールエクステント(hole extent)であることを指示する。ホールエクステントは、ファイルのオフセットの範囲を、オフセットをバックアップするためのディスクのスペースを消費することなく保存するために有用である。最後に、もしデータブロック、例えばデータブロック１０５がより多くのエクステントを記憶するなら、フラグフィールドの第３の部分は、エクステント、ここではエクステント１０６は間接エクステントであることを指示する。
【００２９】
図８Ａ及び８Ｂは、どのようにして、オペレーティングシステムが、ファイルの中部を大きくするために間接エクステントを使用するかを示す。図８Ａは、ファイルに割り当てられたｉノード１１０を示す。ｉノード１１０は、元は連続していたファイルのセグメントを記憶するデータブロック１１４、２１５、３３０を指し示す、連続する直接エクステント１１１、１１３、１１９を有する。図８Ｂは、間接エクステント１１２が２つの元の直接エクステント１１１、１１９の間に挿入された最後のファイルを示す。間接エクステント１１２は、データブロック１１６中に記憶された、より多くのエクステントを指し示す。これらのエクステントは、今度は、新しいデータブロック１１７及び元のデータブロック２１５を指し示す。間接エクステント１１２は、物理的に、２つの元のエクステント１１１、１１９の間に位置するので、（間接的に指し示された）ブロック１１７、２１５中に記憶されたセグメントは、ブロック１１４、３３０中に記憶された元のセグメントの間に論理的に位置する。間接エクステント１１２を挿入することは、データブロック１１４と２１５の中の元は連続していたセグメントの間に、新しいデータブロック１１７中のセグメントを論理的に挿入することによって、関連するファイルの中部を大きくした。
【００３０】
フラグフィールドはそれぞれのエクステントのタイプを指示するため、図５〜８Ｂに図示されたファイルシステムは、ｉノードの任意のエクステントが間接になることを許す。ｉノード内での間接エクステントのこの自由な配置により、オペレーティングシステムは、物理的にデータブロックを移動することなしに、ファイルの任意の２つの選択されたデータセグメントの間に新しいデータセグメントを論理的に挿入することが可能になる。新しいデータセグメントを挿入するために、システムは、選択されたデータセグメントに対する２つのエクステントの間のファイルのｉノード中に、間接エクステントを挿入する。そして、システムは、間接エクステントに、今度は新しいデータセグメントの連続する部分を指し示す、新しい直接エクステントを記憶するデータブロックを指し示させる。新しい直接エクステントは、新しい間接エクステントが挿入されたところの点でｉノード中に、論理的に位置させられる。
【００３１】
新しいセグメントの挿入は、前に記憶されたファイルセグメントを移動させることを含まないため、このファイルシステムによると、先行技術のファイルシステムより、ファイル拡張は、より短時間であり、より便利である。ファイルデータのデータブロックを移動させることによって、又はファイルの終了部にファイルデータを追加することによってのいずれかでファイルを拡張させた先行技術のファイルシステムは、前に記憶されたデータを移動させるために、しばしば相当な時間を必要としていた。
【００３２】
図８Ｃは、新しいファイルセグメントを２つの隣接するファイルセグメントの間に挿入する方法１３０を示すフローチャートである。新しいファイルセグメントを挿入するために、オペレーティングシステムは、少なくとも１つの空の行がファイルのｉノード、例えば図８Ａのｉノード１１０に新しいエクステントを書き込むために残っているかどうかを最初に決定する（ステップ１３２）。図８Ａでは、オペレーティングシステムは、ｉノード１１０は空の行を有していないと判断するであろう。
【００３３】
もし、ｉノードが空の行を有していれば、オペレーティングシステムは、ｉノード中で１つの行だけ挿入されるセグメントに続くことになるセグメントに対応する元のエクステントを下にシフトさせる（ステップ１３４）。それからオペレーティングシステムは、新しい直接エクステントを、新しく空になったｉノードの行に挿入する（ステップ１３６）。最後に、オペレーティングシステムは、新しいファイルセグメントを、新しい直接エクステントによって指し示される新しいデータブロックへ書き込む（ステップ１３８）。
【００３４】
一方、もしｉノードが空の行を持たないなら、例えば図８Ａの場合、オペレーティングシステムは、新しい、利用可能なデータブロックを、間接ブロックとして使用するために選択する（ステップ１４０）。図８Ａでは、新しい間接ブロックはブロック１１６である。次に、オペレーティングシステムは、新しい間接ブロックの第２の行へ、挿入点に続くエクステントを書き込む（ステップ１４２）。図８Ｂでは、オペレーティングシステムは、データブロック１１６の第２の行へエクステント１１３を書き込む。次に、オペレーティングシステムは、間接ブロックの第１の行中に新しい直接エクステントを書き込む（ステップ１４４）。図８Ｂでは、オペレーティングシステムは、間接ブロック１１６中のエクステントのための第１の行へ新しいエクステントを書き込む。
【００３５】
次に、オペレーティングシステムは、間接ブロックの第２の行中に今あるエクステントが前に占めていたｉノードの行中に、間接エクステントを挿入する（ステップ１４６）。新しい間接エクステントは、新しい間接ブロックを指し示し、間接ブロック中の両方のエクステントのレングスの合計に等しいレングスを有する。図８Ｂでは、オペレーティングシステムは、データブロック１１６を指し示すエクステント１１２をｉノード１１０に書き込む。最後に、オペレーティングシステムは、新しいファイルセグメントを、新しい直接エクステントによって指し示される新しいデータブロック中に書き込む（ステップ１４８）。図８では、新しいファイルセグメントは、データブロック１１７に書き込まれる。
【００３６】
図９は、ファイルシステムが間接エクステントにネストする場合の例を図示する。この例では、ｉノード１１０は、データブロック１２１を指し示す間接エクステント１２０を含む。今度は、ブロック１２１は、データブロック１２３を指し示す間接エクステント１２２を含み、ブロック１２３は、ブロック１２５を指し示す間接エクステント１２４を含む。
【００３７】
間接エクステントのネストにより、サイズの制限なく、任意の２つの元のファイルセグメントの間でファイルを大きくすることができる。ネストはまた、アクセスの間の余分なコストを引き起こす。ネストされた間接エクステントに指し示されたファイルセグメントへのそれぞれのアクセスは、余分のルックアップ及び追加のルックアップ時間がかかる。
【００３８】
図１０は、データブロックを、例えば図５に示したボリュームＬＶ１、ＬＶ２のような複数の論理ボリュームから、ファイルへ配置する方法１５０を示すフローチャートである。オペレーティングシステムは、ｉノードアドレス及びファイル名をディレクトリ中の行に書き込むことにより、ｉノードをファイルに割り当てる（ステップ１５２）。図５のおいて、オペレーティングシステムは、ｉノード６３のためのｉノードアドレスを、ファイル名Ａのためのルートディレクトリ６１のエントリ中に書き込む。オペレーティングシステムは、利用できるデータブロックの平均の隣接する領域より大きい領域を有する論理ボリュームを選択する（ステップ１５４）。オペレーティングシステムは、それぞれの論理ボリューム中の利用可能な隣接するブロックの最大数を、そのボリュームのヘッダ中のデータから又は全体のストレージシステムに広がるスーパーブロック中の情報から、決定する。オペレーティングシステムは、データブロックのストリングを、そのストリングを指し示すエクステントをそのファイルに割り当てられたｉノードの第１の行中に書き込むことにより、選択されたボリュームの隣接する領域からファイルに割り当てる（ステップ１５６）。そのエクステントは、論理ボリューム及び選択された論理ボリューム内でのブロックのストリングの第１のデータブロックのオフセットの両方を示す。
【００３９】
その後、ソフトウェアアプリケーションからのファイルに対するより多くのデータブロックのリクエストが、オペレーティングシステムにより受け取られる（ステップ１５７）。リクエストに応答して、オペレーティングシステムは、ファイルの以前のセグメントの物理的位置に隣接する領域がより多くの利用可能なデータブロックを有しているかどうかを決定する（ステップ１５８）。もし領域がより多くの利用可能なブロックを有していれば、オペレーティングシステムは、以前のセグメントの物理的位置に直ちに続く、すなわち以前のセグメントに隣接するブロックの新しいストリングを配置する（ステップ１６０）。次に、オペレーティングシステムは、その領域のための以前のエクステントのレングスフィールド中に記憶されたレングスの値を、新しいストリング中のブロックの数だけ増加させる（ステップ１６１）。以前のセグメントに隣接するブロックが利用できないなら、オペレーティングシステムは、より大きい利用できるデータブロックの平均の隣接する領域を有する論理ボリュームを探す（ステップ１６２）。新しく見つかった論理ボリュームは異なる論理ボリュームでよい。このようにして、データブロックの新しいストリングが、異なる論理ボリュームからファイルに配置される。
【００４０】
いくつかの実施形態では、より多くのｉノードの配置は、動的であり、潜在的な必要性により刺激される。この動的な配置により、使用されていないｉノードによるストレージスペースの無駄が少なくなる。動的な配置は、ｉノードの物理アドレスが予め決められていないことも暗示する。物理アドレスは予め決められていないので、システムの故障時にオペレーティングシステムにより使用するために、別個の構造がそれぞれのｉノードのアドレスを記録する。
【００４１】
図１１は、図５のｉノード６３、６４の１つの実施形態のヘッダ１７０を図示する。ヘッダ１７０は、それぞれのｉノードのアドレスを記録するために使用される別個の構造を提供する。それぞれのヘッダ１７０は、それぞれ、配置される予定の次にｉノードの、及び以前に配置されたｉノードのアドレスのためのエントリ１７２、１７４を有する。これらのエントリは、関連するｉノードが最初に配置されるときに、ヘッダ１７０に書き込まれる。
【００４２】
それぞれのｉノードのヘッダ１７０のエントリ１７２、１７４上のシリアルチェーンサーチ(serial chain search)を実行することにより、オペレーティングシステムは、最初に配置されたｉノードのための所定のアドレスを使用することにより、それぞれのｉノードのアドレスを見つけることができる。シリアルチェーンサーチは、見つかったｉノードから見つかったｉノードにジャンプすることにより、ｉノードを順番に見つける。システムの故障の後、シリアルチェーンサーチは、ファイルシステムの制御データ構造の順次的な再構成を可能にする。
【００４３】
図１１は、ｉノードヘッダ１７０のエントリ１７６も図示する。エントリ１７６は、２進値であり、ｉノードがデータファイルかそれともエクステントのリストのどちらを記憶しているのかを指示する。エントリ１７６の１つの２進値は、ｉノードが関連するデータファイルのためのエクステントのリストを記憶していることを示し、また他の２進値は、ｉノードがデータファイルそのものを記憶していることを示す。このようにして、それぞれのｉノードは、エクステントのリスト又は小さいデータファイルのいずれかを記憶することができる。
【００４４】
オペレーティングシステムは、関連するｉノードが最初に作り出されるとき、データファイルのストレージを指示するために第３のエントリ１７６へ２進値を書き込む。次に、オペレーティングシステムは、関連するデータファイルを記憶させるためにｉノードを使用する。データファイルのサイズが、ｉノード中の限られた利用可能なスペースを超えるとき、オペレーティングシステムは、そのｉノードを、エクステントのリストのストレージのためのｉノードに変換する。
【００４５】
変換を実行するため、オペレーティングシステムは、ｉノード中に既に記憶された任意のデータをデータブロックに移動し、そのデータブロックを指し示すためにそのｉノード中にエクステントを書き込み、及びエクステントのストレージを指示するようにエントリ１７６を変更する。関連するデータファイルのより多くのデータを記憶するために、オペレーティングシステムは、より多くのエクステントを順次的にｉノードに書き込み、その新しいエクステントが指し示すデータブロック中に新しいデータセグメントを記憶させる。
【００４６】
【発明の効果】
小さいデータファイルをｉノード中に記憶させることは、データのアクセス時間を直接減少させる。そのようなファイルからのデータ検索は、ｉノード及びデータブロックのための別個のサーチを必要としない。このようにして、使用されていないｉノードを小さいデータファイルを記憶するために使用することは、ルックアップのために必要な時間の量を減少させる。エクステントのリスト又はデータファイルのいずれかを記憶することができるｉノードを構成することのコストは小さい。コストは、ｉノードのヘッダ１７０中の１つの追加のエントリである。
【００４７】
説明した実施形態についての、他の追加、削除、及び変更は、当業者に明らかであろう。
【図面の簡単な説明】
【図１】図１は、先行技術ファイルシステムにより、データストレージを抽象するために使用される物理構造を図示する。
【図２】図２は、大きいファイルを抽象するための先行技術の方法を概略的に図示する。
【図３】図３は、グローバルキャッシュメモリを有する分散ストレージシステムを図示する。
【図４】図４は、図３の分散ストレージシステムのファイルシステムが、どのようにして、大きいファイルを物理ストレージボリュームに転換するかを図示する。
【図５】図５は、図３及び４のファイルシステムにより使用される物理構造を図示する。
【図６Ａ】図６Ａは、図５のｉノード中のエクステントのフォーマットを図示する。
【図６Ｂ】図６Ｂは、図５のｉノード中のエクステントのフォーマットを図示する。
【図７】図７は、図３、５、６Ａ及び６Ｂのファイルシステムによる、直接、ホール(hole)、及び間接のエクステントの使用を図示する。
【図８Ａ】図８Ａは、どのようにして、間接エクステントが中間点においてファイルの拡張を可能にするかを図示する。
【図８Ｂ】図８Ｂは、どのようにして、間接エクステントが中間点においてファイルの拡張を可能にするかを図示する。
【図８Ｃ】図８Ｃは、間接エクステントによりファイルを拡張する方法を図示するフローチャートである。
【図９】図９は、間接エクステントのネスティングの概略図である。
【図１０】図１０は、ファイルを複数の論理ボリューム中に記憶させる方法を図示するフローチャートである。
【図１１】図１１は、ｉノードのヘッダの１つの実施形態を図示する。
【符号の説明】
１０  データストレージデバイス
１２  ディレクトリ
１３  ディレクトリ
１５  インデックスノード（ｉノード）
１６  インデックスノード（ｉノード）
１７  物理データブロック
１８  物理データブロック
１９  物理データブロック
２０  エクステント
２１  エクステント
２２  エクステント
２３  エクステント
２４  エクステント
２５  エクステント
２６  エクステント
２７  エクステント
２８  エクステント
３０  ファイルシステム
３１  抽象的ファイル
３２  物理ディスク
３３  物理ディスク
３４  ファイルシステム
３５  仮想論理ボリューム
３６  物理スペース
３７  物理スペース
３８  仮想スペース
３９  ソフトウェアアプリケーション
４０  分散ストレージシステム
４２  グローバルキャッシュメモリ
４４  プロセッサ
４５  プロセッサ
４７  ドライバ
４８  ドライバ
４９  ドライバ
５０  ファイルシステム
５１  ファイル
５２  物理セグメント
５３  物理セグメント
５５  データブロック
５６  データブロック
５７  データブロック
５８  データブロック
６１  ディレクトリ
６２  ディレクトリ
６３  ｉノード
６４  ｉノード
６４  エクステント
６５  エクステント
６６  エクステント
８０  物理データブロック
８１  物理データブロック
８２  物理データブロック
８３  物理データブロック
８４  物理データブロック
９２  物理データブロック
９３  物理データブロック
９４  物理データブロック
１００  データブロック
１０１  エクステント
１０２  データブロック
１０３  エクステント
１０５  データブロック
１０６  エクステント
１１０  ｉノード
１１１  直接エクステント
１１２  間接エクステント
１１３  直接エクステント
１１４  データブロック
１１６  データブロック
１１７  データブロック
１１９  直接エクステント
１１６  間接エクステント
１２０  エクステント
１２１  データブロック
１２２  間接エクステント
１２３  データブロック
１２４  間接エクステント
１２５  データブロック
１７０  ヘッダ
１７２  エントリ
１７４  エントリ
１７６  エントリ
２１５  データブロック
３３０  データブロック
【図１】
0003796391.tif 000002
【図２】
0003796391.tif 000003
【図３】
0003796391.tif 000004
【図４】
0003796391.tif 000005
【図５】
0003796391.tif 000006
【図６Ａ】
0003796391.tif 000007
【図６Ｂ】
0003796391.tif 000008
【図７】
0003796391.tif 000009
【図８Ａ】
0003796391.tif 000010
【図８Ｂ】
0003796391.tif 000011
【図８Ｃ】
0003796391.tif 000012
【図９】
0003796391.tif 000013
【図１０】
0003796391.tif 000014
【図１１】
0003796391.tif 000015