(57)【特許請求の範囲】
【請求項１】
物理的記憶空間を定義する記憶ディスクを複数持つ階層ディスクアレーを備えたデータ記憶装置の記憶容量を拡大する方法であって、
（ａ）前記ディスクアレーのすべてのディスクにわたって延び、前記ディスクアレーの個々の記憶ディスクからの記憶空間の１つまたは複数のセグメントを含み、第１のＲＡＩＤレベルにしたがってデータを記憶する第１ＲＡＩＤ区域、および第２のＲＡＩＤレベルにしたがってデータを記憶する第２ＲＡＩＤ区域を含む複数のＲＡＩＤ区域として前記物理的記憶空間を表す第１の仮想記憶空間に、前記物理的記憶空間をマッピングするステップと、
（ｂ）記憶空間を複数の仮想ブロックとして表す第２の仮想記憶空間に、前記第１の仮想記憶空間をマッピングするステップと、
（ｃ）前記階層ディスクアレーに少なくとも１つの追加記憶ディスクを加えて、前記データ記憶装置の物理的記憶空間を拡大するステップと、
（ｄ）前記第２の仮想記憶空間の使用可能な容量を修正して、前記新たに追加された記憶ディスクを加えることよって生じる新しい記憶空間を反映させるステップと、
（ｅ）ステップ（ａ）でＲＡＩＤ区域にマッピングされていなかった未使用記憶空間を拡大して前記追加記憶ディスク上の空間を含むようにするステップと、
（ｆ）ＲＡＩＤ区域を選択するステップと、
（ｇ）選択したＲＡＩＤ区域から前記階層ディスクアレーの別の場所にデータを移すステップと、
（ｈ）前記第２の仮想記憶空間から前記第１の仮想記憶空間へのマッピングを更新して、前記階層ディスクアレー内のデータ移動を反映させるステップと、
（ｉ）前記すべての記憶ディスクと前記新たに追加された記憶ディスクにわたり、前記個々の記憶ディスクおよび前記新たに追加された記憶ディスクからの１つまたは複数のセグメントを含む少なくとも１つの拡大されたＲＡＩＤ区域に、前記選択したＲＡＩＤ区域に対応する物理的記憶空間をマッピングしなおすステップと、
（ｊ）前記階層ディスクアレーのすべてのＲＡＩＤ区域が前記新たに追加された記憶ディスクのセグメントを含むように拡大されるまで、前記ステップ（ｆ）〜（ｉ）を繰り返すステップと、
を有するデータ記憶装置の記憶容量を拡大する方法。
【請求項２】
前記選択したＲＡＩＤ区域内のデータへのアクセスとそのデータ移動との間で起こる衝突を解決するステップをさらに有する請求項１に記載のデータ記憶装置の記憶容量を拡大する方法。
【請求項３】
ＲＡＩＤ区域に記憶されているのと同じデータ量を保持するのに十分な大きさがある少なくとも１つの区域を確保するステップをさらに有する請求項１に記載のデータ記憶装置の記憶容量を拡大する方法。
【請求項４】
未使用の記憶空間を探すステップと、
前記未使用の記憶空間を少なくとも１つの拡大されたＲＡＩＤ区域にマッピングするステップと、
をさらに有する請求項１に記載のデータ記憶装置の記憶容量を拡大する方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、階層ディスクアレー・データ記憶装置のようなデータ記憶装置、および、そのような装置にディスクを追加する方法に関する。
【０００２】
【従来の技術】
コンピュータ・システムは、速度、信頼性、および処理能力の点で絶え間なく改良が続いている。その結果、コンピュータはより複雑で高度なアプリケーションが処理できる。コンピュータが改良されるのに応じて、大容量記憶装置および入出力装置に対する性能要求が増大している。発展するコンピュータ・システムに性能面で歩調がとれる大容量記憶装置を設計することが常に求められている。
【０００３】
本発明は、ディスクアレー型の大容量記憶装置に関する。ディスクアレー・データ記憶装置は、単一の大容量記憶装置を形成するように配列され調整された複数のディスク駆動装置を持つ。大容量記憶装置には、コスト、性能、可用性の３つの主要な設計基準がある。メガバイトあたりの低いコスト、高い入出力性能、および、高いデータ可用性を持つ記憶装置を作ることが望ましい。"可用性"（availability）とは、記憶装置に記憶されているデータをアクセスする能力、および、ある程度の故障が起きても動作が続けられることを保証できる能力のことである。典型的には、データの可用性は、複数の場所に記憶されたデータまたはデータ間の関係を持つ冗長度の使用を通して提供される。
【０００４】
冗長データを記憶するには２つの一般的な方法がある。第１の方法すなわち"ミラー"（鏡像：mirror）方法では、データが複製され、記憶装置の２つの別々の区域に記憶される。たとえば、ディスクアレーでは、同一のデータがディスクアレーの２つの別々のディスクの上に提供される。ミラー方法は、二重に記憶する手法により、高性能および高データ可用性の利点がある。しかし、ミラー方法は、データを記憶するコストが実質的に２倍になるので、相対的に費用の高いものになる。
【０００５】
第２の方法すなわち"パリティ"（奇偶：parity）方法では、記憶区域の一部を冗長データを記憶するのに使うが、冗長データを記憶する区域は、元のデータを記憶するのに使う記憶空間より小さい。たとえば、５台のディスクを持つディスクアレーでは、４台をデータを記憶するのに使い、５台目をもっぱら冗長データを記憶するのに使う。パリティ方法の利点は、ミラー方法より低費用であることであるが、ミラー方法にくらべると、性能および可用性が低いという特徴がある。
【０００６】
ディスクアレー・データ記憶装置の設計で遭遇する１つの問題は、ディスクアレーの記憶容量を増やすためにディスク駆動装置を足す仕事に関係する。従来のディスクアレーでは、次のような長々しい処理が必要である。先ず、いまディスクアレー上に記憶されているデータを（リールからリールのテープ装置のような）全く別の記憶装置にコピーする。次に、新しい記憶ディスクをディスクアレーに足す。次に、新しい記憶ディスクを組み込むためにディスクアレー全体を再構成する。最後に、データを、別の記憶装置から新しく構成されたディスクアレーにコピーして戻す。この処理の間、ディスクアレーにアクセスすることができず、別のバックアップ装置に一時的に移されたデータは利用することができない。
【０００７】
【発明が解決しようとする課題】
本発明の目的は、データの可用性を維持しながら、記憶ディスクを追加することによって、データ記憶装置の記憶容量を拡大する方法を提供することである。
【０００８】
【課題を解決するための手段】
本発明の１つの方法では、予定のデータ量を記憶するために、ディスクアレーの物理的な記憶空間を複数のストライプ（stripe）に構成する。ストライプはディスクアレーの複数の記憶ディスクにわたって延び、ディスクアレーの記憶ディスクの各々からの１つまたは複数の同じ大きさのセグメントで構成される。記憶ディスクが足されるとき、データが１つのストライプから、物理的記憶空間のもう１つの部分に移される。次に、ストライプを含む物理的記憶空間が、データを記憶するために拡大されたストライプに再構成される。この拡大されたストライプは、新たに加えられた記憶ディスクを含めた全ての記憶ディスクにわたって延びる。これにより、拡大されたストライプが、新しいデータを受け取る準備が整う。この処理は、全てのストライプが新しいディスクを含むように構成されるまで、ストライプごとに続けられる。ストライプが拡げられている間、データ記憶装置は選択されたストライプ内のどの仮想ブロックも割り当てない。
【０００９】
データ記憶装置の記憶容量を拡大するもう１つの方法では、物理的記憶空間のストライプ構成のプリマップ（pre-map）が先ず作られる。１台または複数の記憶ディスクがディスクアレーに加えられると、物理的記憶空間の新しい構成を表すポストマップ（post-map）が作られる。このポストマップが追加された記憶ディスクを考慮に入れる。次に、グループＡのセグメントが、個々の記憶ディスクからのセグメントおよび新しく追加された記憶ディスクからのセグメントを持つ、少なくとも１つの拡大されたストライプを含むように定義される。グループＢのセグメントは、グループＡに入っていないセグメントを含むように定義される。
【００１０】
グループＡのセグメントの中のデータは、プリマップにしたがった第１のデータ配列からポストマップにしたがった第２のデータ配列に再編成される。この再編成の後、グループＡのセグメントは、少なくとも１台のディスクを加えたことで増えた記憶区域によって、少なくとも１つの空のセグメントを持っている。したがって、グループＡの空のセグメントを満たすために、データが、グループＢの少なくとも１つのセグメントから移動される。この処理は、全てのストライプが新しいディスクを含むように構成されるまで、ステップごとに続けられる。この処理中に起こる、ユーザおよび移行中のデータ移動によるグループＡおよびＢへのデータアクセスに関する競合は解決され、データは常に使用可能である。
【００１１】
本発明は、また、冗長度の異なるレベル、または、ＲＡＩＤ（Redundant Array of Independent Disks）レベルにしたがってデータを記憶する階層ディスクアレー・データ記憶装置に使用できるように調整することができる。この方法は、先ず、物理的記憶空間を、複数のＲＡＩＤ区域を持つ第１の仮想記憶空間にマッピングすることを含む。各ＲＡＩＤ区域は、第１または第２のＲＡＩＤ区域の型（タイプ）として構成できる。第１のＲＡＩＤ区域型は、第１のＲＡＩＤレベル（たとえば、ＲＡＩＤレベル１すなわちミラー冗長性）にしたがってデータを保持し、第２のＲＡＩＤ区域型は、第２のＲＡＩＤレベル（たとえば、ＲＡＩＤレベル５すなわちパリティ冗長性）にしたがってデータを保持する。ＲＡＩＤ区域はディスクアレーの複数の記憶ディスクにわたって延び、各記憶ディスクからの同じ大きさの記憶領域を含む。次に、第１の仮想記憶空間は複数の仮想ブロックを持つ第２の仮想記憶空間にマッピングされる。この第２の仮想記憶空間は、ユーザまたはホストによって定義され、ユーザまたはホストに提示される記憶の見え方（ビュー：view）である。
【００１２】
この場合、１台または複数の記憶ディスクが階層ディスクアレーに追加されると、選択されたＲＡＩＤ区域に記憶されたデータは、該ＲＡＩＤ区域以上の記憶容量を持つ別の区域に移される。第１の仮想記憶空間から第２の仮想記憶空間へのマッピングは、このデータ移動を反映するように更新される。次に、選択されたＲＡＩＤ区域に対応する物理的記憶空間は、新しいディスクを含む全ての記憶ディスクにわたってひろがる拡大されたＲＡＩＤ区域にマッピングしなおされる。この処理は、階層ディスクアレーの全てのＲＡＩＤ区域が新しい記憶ディスク上の領域を含むように拡大されるまで、繰り返される。第２仮想記憶空間の第１仮想記憶空間へのマッピングは、仮想記憶空間内のＲＡＩＤ区域の拡大を反映するように絶えず修正される。
【００１３】
新しいディスクを同化するこの容量拡大処理の間、データは使用可能である。
データはディスクアレー上に存在しアクセス可能であり続け、別の記憶装置に移されない。移動の結果としてマッピングしなおす処理の間のデータはアクセスできなくなるが、これは束の間のことである。したがって、本発明の方法は、データがユーザに常に使用可能であることを実質的に確実にする。
【００１４】
【発明の実施の形態】
図１に、本発明にしたがって構成されたデータ記憶装置１０を示す。データ記憶装置１０は、複数の記憶ディスク１２を持つ階層ディスクアレー１１、記憶ディスク１２への、および記憶ディスク１２からのデータ転送を調整するためにディスクアレー１１に結合されたディスクアレー制御装置１４、およびＲＡＩＤ管理装置１６を含む、ディスクアレー・データ記憶装置であることが望ましい。
【００１５】
本明細書の説明の目的のために、"ディスク"とは、不揮発性で、ランダム・アクセスが可能で、自身の記憶故障を検出する能力のある、書き換え可能な大容量記憶装置を指す。それは、回転する磁気および光ディスク、並びに、固体ディスク、または不揮発性の電子的記憶要素、たとえばＰＲＯＭ、ＥＰＲＯＭ、およびＥＥＰＲＯＭを含む。"ディスクアレー"という用語は、複数のディスク、ディスクを１つまたは複数のホスト・コンピュータに接続するのに必要なハードウェア、および物理的ディスクの動作を制御し、物理的ディスクをホストの動作環境に１つまたは複数の仮想ディスクとして提示するのに使われる管理ソフトウェアの集まりを指す。"仮想ディスク"とは、管理ソフトウェアによってディスクアレーの中に実現される抽象的実体である。
【００１６】
"ＲＡＩＤ"（Random Array of Independent Disks）と言う用語は、記憶容量の残りの部分に記憶されたユーザデータについての冗長情報を記憶するために、その物理的記憶容量の１部が使用されているディスクアレーを意味する。冗長情報は、ディスクアレーを構成するディスクの１つ、または、そのディスクへのアクセス経路が故障したときにユーザデータの再生を可能にする。ＲＡＩＤ装置に関する詳しい記述は、「ＲＡＩＤ手法の資料集」（The RAIDBook: A Source Book for RAID Technology, published June 6, 1993, by the RAID Advisory Board, Lino Lakes, Minnesota）を参照されたい。
【００１７】
ディスクアレー制御装置１４は、たとえばＳＣＳＩ（small computer system interface）のような１つまたは複数のインターフェース・バス１３を介してディスクアレー１１に結合されている。ＲＡＩＤ管理装置１６は、インターフェース・プロトコル１５を介して、ディスクアレー制御装置１４を動作させるために結合されている。データ記憶装置１０はホスト・コンピュータ（図示せず）にも入出力インターフェース・バス１７を介して結合されている。ＲＡＩＤ管理装置１６は、ディスクの記憶および信頼性レベルを制御し、多様な信頼性記憶レベル間のデータ転送を行うためのデータマネージャ手段を提供するために、別個の装置要素として具体化してもよいし、ディスクアレー制御装置１４内またはホスト・コンピュータ内に構成してもよい。これらの信頼性記憶レベルは、以下に述べるように、ミラーまたはパリティ冗長レベルであることが望ましいが、全く冗長性を持たない信頼性記憶レベルを含むこともできる。
【００１８】
ディスクアレー制御装置１４は、ディスクアレー制御装置Ａ １４ａ、およびディスクアレー制御装置Ｂ １４ｂからなる二重の制御装置として具体化することが望ましい。二重制御装置１４ａおよび１４ｂは、どちらか１つが動作できなくなった場合にも、継続したバックアップおよび冗長性を提供することによって信頼性を向上させる。しかし、本発明による方法は、１台の制御装置またはその他の構成でも実施することができる。
【００１９】
階層ディスクアレー１１は、物理的記憶空間および１つまたは複数の仮想記憶空間を含む異なる記憶空間として特徴づけられる。記憶に関するこれらの多様なビューはマッピング手法に関連している。たとえば、ディスクアレーの物理的記憶空間は、多様なデータ信頼性レベルにしたがって記憶区域を描く仮想記憶空間にマッピングすることができる。仮想記憶空間内のある区域を第１信頼性記憶レベル（たとえば、ミラーすなわちＲＡＩＤレベル１）のために割り当て、その他の区域を第２信頼性記憶レベル（たとえば、パリティすなわちＲＡＩＤレベル５）のために割り当てることができる。ＲＡＩＤレベルに関しての多様なマッピング手法および仮想空間については以下に詳しく述べる。
【００２０】
データ記憶装置１０は、異なる記憶空間を互いにマッピングするために用いる仮想マッピング情報を持続的に記憶するメモリマップ記憶装置２１を含む。メモリマップ記憶装置はディスクアレーの外にあり、ディスクアレー制御装置１４内にあることが望ましい。メモリマップ情報は、異なるビューの中で多様なマッピング構成が変わるにしたがい、制御装置またはＲＡＩＤ管理装置によって絶えずまたは定期的に更新される。
【００２１】
メモリマップ記憶装置２１は、それぞれ、制御装置１４ａおよび１４ｂに置かれる２つの不揮発性ＲＡＭ（Random Access Memory）２１ａおよび２１ｂとして具体化されるのが望ましい。不揮発性ＲＡＭ（non-volatile RAM: NVRAM）の１つの例は、バッテリ付きのＲＡＭである。バッテリ付きＲＡＭは、データをメモリに維持するために、データ記憶装置１０への電源が切られたときに独立したバッテリ電源からのエネルギーを使う。１つの望ましい構成は、自身でリフレッシュできるバッテリ付きＤＲＡＭ（Dynamic RAM）である。
【００２２】
二重のＮＶＲＡＭ２１ａおよび２１ｂは、メモリマップ情報の冗長記憶を供給する。仮想マッピング情報はミラー冗長方法にしたがって複製され、ＮＶＲＡＭ２１ａおよび２１ｂの両方に記憶される。このようにして、ＮＶＲＡＭ２１ａはもっぱら元のマッピング情報を記憶するのに用い、ＮＶＲＡＭ２１ｂはもっぱら冗長マッピング情報を記憶するのに用いることができる。別の構成として、データを二重に記憶するための十分な空間を備えた１つの不揮発性ＲＡＭを用いて、ミラーにしたメモリマップ記憶装置を構成することもできる。
【００２３】
図１に示すように、ディスクアレー１１は複数のディスク駆動装置１２を持つ。これらの記憶ディスクの大きさの例は、１ないし３ギガバイトである。記憶ディスクは、ＳＣＳＩバス１３とのインターフェースを提供する機械的ベイに、それぞれ独立して接続したりはずしたりできる。１つの具体化では、データ記憶装置は、作動する機械的ベイを１２個持つように設計される。これらのベイをディスクアレー制御装置１４にインターフェースさせるために４つのＳＣＳＩバス（すなわち、３つの機械的ベイに対して１つのバス）が使われる。これらのベイがいっぱいになるまでロードされた場合、データ記憶装置は全体で、たとえば、１２ないし３６ギガバイトの容量を持つ。ディスクアレー制御装置１４は、記憶ディスク１２がどのベイに差し込まれていても、認識することができる。データ記憶装置１０は、ディスクアレーの動作中に、ディスクアレーの使用可能なベイに追加のディスクを差し込む（"ホットプラグ"：hot plug）ことができるように設計されている。新しいディスク装置の追加については、以下に、図５ないし１３を参照して詳しく述べる。
【００２４】
本発明の説明の目的として、ディスクアレー１１の記憶ディスク１２は、複数のディスク２０を持つミラー・グループ１８、および、複数のディスク２４を持つパリティ・グループ２２に配列されたものとして概念化することができる。ミラー・グループ１８は、第１のレベルすなわちミラー冗長レベルにしたがってデータを記憶するディスクアレーの第１の記憶位置すなわちＲＡＩＤ区域を表す。
このミラー冗長レベルは、またＲＡＩＤレベル１と考えることができる。ＲＡＩＤレベル１、すなわちディスクのミラー化は、データの各ビットが複製されてデータ記憶装置内に記憶されるという意味で１対１の保護を提供することにより、最高の信頼性を提供する。ミラー冗長は、図１で、３対のディスク２０で表されている。元のデータは第１の組のディスク２６に記憶され、複製された冗長データは、対になった第２の組のディスク２８に記憶される。
【００２５】
図２に、ＲＡＩＤレベル１にしたがったデータの記憶をより詳しく示す。垂直の列は個々のディスク０、１、２、３を表す。４個のディスクからなるこのディスクアレーに含まれる物理的記憶空間は、水平の行で表される複数のストライプに構成される。１つの"ストライプ"は複数の記憶ディスクにわたって延び、多数の同じ大きさの記憶空間のセグメントで構成され、１つのセグメントはアレーの中の各ディスクに関連している。すなわち、１つのセグメントは１つのディスクの上に存在する１つのストライプの部分である。各ストライプは、記憶ディスク全体に分配されているデータの予定の量を保持する。ストライプのうちのあるセグメントは元のデータのために使われ、その他のセグメントは冗長データのために使われる。
【００２６】
ミラー冗長（ＲＡＩＤレベル１）のこの例では、ディスク０上のストライプ０のセグメント０に記憶されているデータは、複製されて、ディスク１上のストライプ０のセグメント０'に記憶される。同様に、ディスク２のストライプ２のセグメント５に記憶されているデータは、ディスク３のストライプ２のセグメント５'に記憶される。このようにして、各データは複製されディスク上に記憶される。図２の冗長のレイアウトは説明の目的で図示したものである。冗長データを同じストライプに、図示したように、きちんと並べる必要はない。たとえば、ディスク０のストライプ１のセグメント２のデータは複製されて、ディスク３のストライプＳのセグメントＴ'に置くことができる。
【００２７】
図１を再び参照すると、ディスク２４のパリティ・グループ２２は、第２の記憶位置すなわちＲＡＩＤ区域を表し、データは第２の冗長レベル、たとえばＲＡＩＤレベル５にしたがって記憶される。図に例として示した６個のディスクでは、元のデータは５個のディスク３０に記憶され、冗長"パリティ"データは６番目のディスク３２に記憶される。
【００２８】
図３にパリティＲＡＩＤ区域のレイアウトを詳しく示す。図２のミラーＲＡＩＤ区域のレイアウトと同様に、ディスク０、１、２、３の物理的記憶空間は、複数の同じ大きさのストライプに構成される。例として示したこの図では、データはＲＡＩＤレベル５にしたがって記憶され、冗長データはＰで表したセグメントに記憶される。冗長Ｐセグメントは、ストライプの中のその他のセグメントのパリティを記憶する。たとえば、ストライプ０において、ディスク３上の冗長Ｐセグメントは、ディスク０、１、２のパリティを記憶する。各ストライプのパリティは、たとえば、排他的ＯＲ関数のような、ある関数によって計算される。最初の４つのストライプのパリティは次のように表され、下付き数字は対応するストライプを表す。
【００２９】
【数１】
0003699165.tif 000002
パリティ冗長は、ディスクの１つで使用不可能になったデータの再生を可能にする。たとえば、セグメント５のデータが使用できなくなったとき、その内容は、セグメント３および４、および、セグメントＰのパリティ・データから確かめることができる。パリティ記憶はミラー記憶よりも費用はかからないが、信頼性はより低く性能も低い。
【００３０】
図１に示したディスク配列は概念を示す目的のものである。実際には、ディスクアレー１１は、ミラーおよびパリティ冗長にしたがってデータを記憶することができる複数のディスク１２を単に持つだけである。全てのディスク１２によって提供される使用可能な記憶空間のうち、その記憶空間の１部がミラー冗長に割り当てられ、別の１部がパリティ冗長に割り当てられる。ディスク１２は複数の同じ大きさの記憶領域（図４の番号３５で表すような）を含むように構成され、個々の領域が複数のセグメントを持つようにするのが望ましい。領域は、記憶空間の１つの仮想ビューの中にＲＡＩＤ区域を形成するようにまとめられる。さらに、ＲＡＩＤ区域およびデータ冗長記憶手法がユーザまたはホストに透明（トランスペアレント：transparent）になるように、記憶空間の別の（ホストによって定義された）ビューがユーザまたはホストに提示される。これらの特徴については、図４を参照して以下に詳しく述べる。
【００３１】
データ記憶装置１０は、ミラー記憶方法およびパリティ記憶方法の間のデータの"移行"（migration）を管理する。両タイプの冗長性の管理はＲＡＩＤ管理装置１６（図１）によって調整される。ＲＡＩＤ管理装置１６は、ディスクアレーの中の２つの異なった型のＲＡＩＤ区域を、ミラーＲＡＩＤ区域がパリティＲＡＩＤ区域に対してキャッシュとしてはたらくのと同様なメモリ階層として管理する。ＲＡＩＤ管理装置１６は、定義された性能プロトコルにしたがって、ミラーＲＡＩＤ区域とパリティＲＡＩＤ区域との間のデータをシフトし、組織し、その他の方法で管理する。ミラーＲＡＩＤ区域とパリティＲＡＩＤ区域との間のデータ移動の処理は"移行"と呼ばれる。
【００３２】
データ記憶装置１０は、最高の性能および信頼性がもたらされるように、性能により厳しいデータをミラーＲＡＩＤ区域に置くように努める。ＲＡＩＤ管理装置１６によって具体化される性能プロトコルは、２つの望ましい移行方針のうちのどちらかを含む。第１の移行方針は"アクセス頻度"と呼ばれ、この方針にしたがって、階層ディスクアレー上の最も頻繁にアクセスされるデータがミラーＲＡＩＤ区域１８に維持される。アクセス頻度の低いデータはパリティＲＡＩＤ区域２２に維持される。"アクセスの最近性"と呼ばれる第２の移行方針にしたがって、最も最近にアクセスされたデータはミラーＲＡＩＤ区域１８に維持され、アクセスの最近性の低いデータはパリティＲＡＩＤ区域２２に記憶される。この他の性能プロトコルを使用することもできる。そのようなプロトコルは、具体的なコンピュータ・アプリケーション、およびユーザのニーズに基づいて定義することが理想的である。
【００３３】
さらに、ＲＡＩＤ管理装置１６は、２つのパラメータの関数、すなわち物理的記憶容量の大きさ、およびデータ記憶装置に記憶されているユーザデータの現在量にしたがって、データ記憶装置の記憶資源を自動的に"調整"する。最初は全てのデータがミラーＲＡＩＤ区域に記憶される。これによって最高の性能および信頼性が得られるからである。より多くのデータがデータ記憶装置に加えられるにつれて、性能および信頼性を最適化するために、ミラーＲＡＩＤ区域とパリティＲＡＩＤ区域との間でデータの移行が行われる。データ記憶装置が満杯に近づくにしたがい、冗長性を通して信頼性を提供しながらユーザの要求をすべて満たすようにするために、いっそう多くのデータがパリティＲＡＩＤ区域に移行される。したがって、本発明によるデータ記憶装置は最大の融通性と適応をもたらす。
この装置は、特定の記憶方法をユーザが選択する必要はないが、ユーザからのどんな要求をも満たすように適応できる。
【００３４】
図４に、データ記憶装置１０の使用可能な記憶空間のメモリ・マッピングを、マッピングされた仮想記憶空間の複数の層として示す。図の垂直に延びた矩形のそれぞれは、物理的記憶空間のビューを表す。この図において、物理的記憶空間３４は２つの仮想記憶ビュー４０および５０で参照されている。物理的記憶空間３４は４個のディスク（図１のディスク１２のような）で表され、数字０、１、２、３で参照される。これらのディスクに関連している４つの矩形は物理的記憶空間のビューを表し、ディスク１、２、３は大体同じ記憶容量を持っているが、ディスク０はやや少ない記憶容量を持っている。これらのディスクの記憶容量の例は、１ないし３ギガバイトである。記憶空間３４は区域Ａ０、Ａ１、Ａ２等に分割されている。個々の区域は、たとえば区域Ａ０の中のストライプ０〜Ｑのように、多くのストライプを持つ。個々の区域には、また、多くの領域３５がある。領域３５は、それぞれの領域が全ディスクアレーにわたって同じ大きさになるように、各記憶ディスク上で、均一な大きさの、ある選択された数のセグメントで構成されるのが望ましい。１つの領域３５の大きさの例は１メガバイトである。
【００３５】
ディスクの記憶空間は、物理的記憶空間３４の第１の中間的な、ＲＡＩＤレベル仮想ビュー４０にマッピングされる。この第１仮想ビューは、概念的には、連続的にアドレス可能な記憶空間を表す第２のアプリケーション・ビューにマッピングすることができる１組のＲＡＩＤ区域である。記憶空間の物理的な構成およびＲＡＩＤビューはアプリケーション・ビューからは隠れている。
【００３６】
ＲＡＩＤ区域の記憶空間４０は、ミラーおよびパリティ記憶空間を区別する記憶のビューである。たとえば、ＲＡＩＤ区域４２はＭ個の割り当てブロック４３を持つミラーＲＡＩＤ区域を表し、ＲＡＩＤ区域４４はＮ個の割り当て区域４５を持つパリティＲＡＩＤ区域を表す。割り当てブロック４３および４５は同じ大きさ（たとえば６４ｋバイト）であることが望ましい。これらのＲＡＩＤ区域は、物理的記憶空間３４上の対応する物理的区域Ａ０、Ａ１、Ａ２等に関連する。
たとえば、ＲＡＩＤ仮想ビューの１６個の６４ｋ割り当てブロック４３または４５は、１個の１Ｍ（メガ）領域３５の上にマッピングすることができる。
【００３７】
ミラーおよびパリティＲＡＩＤ区域は、ディスクアレーの記憶空間３４の全体を使いきる場合とそうでない場合とがある。したがって、あるアプリケーションの間、特定のＲＡＩＤ区域に対応しない、未使用で未指定の記憶空間がある場合がある。しかし、そのような記憶空間は、ミラーまたはパリティＲＡＩＤ区域のどちらにも変換することができる。また、ＲＡＩＤ区域は、ディスクアレー上の連続した区域にマッピングされ、ＲＡＩＤ区域に関連する領域のそれぞれは各記憶ディスク上の同じ物理アドレスに置かれるものとして図示してあることに留意されたい。代替方法として、ＲＡＩＤ区域はディスクアレー上の不連続な区域にマッピングすることもできる。
【００３８】
ＲＡＩＤ区域で使用可能な記憶空間は、ユーザまたはホスト・アプリケーション・プログラムによって定義され、ユーザまたはホスト・アプリケーション・プログラムに提示される記憶のビューである第２の前面のアプリケーション・レベルの仮想ビュー５０にマッピングされる。ユーザまたはホスト・アプリケーション・プログラムから見た場合、アプリケーション・レベルの仮想ビュー５０は、記憶ディスク１２上で使用可能な記憶空間を示す１つの大きな記憶容量を表す。
仮想記憶空間５０は、それぞれが、０、１、２、.....、Ｊ−１、Ｊ、Ｊ＋１、.....、Ｌ−１、Ｌ、Ｌ＋１、.....、等として参照される同じ大きさの記憶仮想ブロック５２および５３からなる、線形の１組のビューを提示する。仮想ブロック５２および５３は、ＲＡＩＤ区域４０の割り当てブロックと同じ大きさ（たとえば６４ｋバイト）であることが望ましい。仮想ブロック記憶空間５０は、ＲＡＩＤ区域４０で提示されているビューの割り当てブロックを指す参照テーブルまたはポインタ（たとえば図４の矢印５４で示す）によって表される。したがって、アプリケーション仮想ビュー５０の仮想ブロック５２および５３は、仮想ブロック・テーブルで維持されているポインタを介して、ＲＡＩＤ仮想ビュー４０の割り当てブロック４３および４５に関連づけられている。仮想ブロック・テーブルから参照できるＲＡＩＤ区域の型には少なくとも２つ（すなわちミラーおよびパリティ）の型がある。
【００３９】
ＲＡＩＤ管理装置１６は、物理的記憶空間全面にわたるＲＡＩＤ区域の構成を動的に変更できる。各型のＲＡＩＤ区域の数は、装置に記憶されつつあるユーザデータの量および物理的なディスク記憶空間の大きさに応じて増減される。その結果、ＲＡＩＤレベル仮想ビュー４０の中のＲＡＩＤ区域のディスク上へのマッピング、および、前面仮想ビュー５０のＲＡＩＤビュー４０へのマッピングは常にその状態が変化している。ＮＶＲＡＭ２１ａおよび２１ｂ（図１）のメモリマップ記憶装置は、ＲＡＩＤ管理装置１６がＲＡＩＤ区域をディスク上にマッピングするために使う最新のマッピング情報、および、２つの仮想ビュー間のマッピングに用いられる情報を維持している。ＲＡＩＤ管理装置は、ＲＡＩＤレベルのマッピングを動的に変更するのに応じて、その変更を反映するためにメモリマップ記憶装置のマッピング情報も更新する。
【００４０】
図１ないし４を参照して、データ記憶装置１０の移行動作について以下に述べる。
【００４１】
説明を続ける目的のために、アプリケーション・レベル仮想記憶空間５０の仮想ブロック５３は、物理的記憶空間３４の区域Ａ１に記憶されているパリティＲＡＩＤ区域４４の中の関連する割り当てブロック４５を参照する。そのような仮想ブロック５３は"パリティ仮想ブロック"と呼ばれ、関連する割り当てブロック４５は"パリティ割り当てブロック"と呼ばれる。同様に、仮想ブロック５２は、物理的記憶空間３４の区域Ａ０に記憶されているミラーＲＡＩＤ区域４２の中の関連する割り当てブロック４３を参照する。そのような仮想ブロック５２は、"ミラー仮想ブロック"と呼ばれ、関連する割り当てブロック４３は"ミラー割り当てブロック"と呼ばれる。
【００４２】
一般的に、データを１つのＲＡＩＤ区域から別のＲＡＩＤ区域に移行するためには、第１のＲＡＩＤレベル型（たとえば、ミラーすなわちレベル１）の割り当てブロックに関連した仮想ブロックが選択される。次に、第２のＲＡＩＤレベル型（たとえば、パリティすなわちレベル５）を表す、未使用の割り当てブロックが探される。未使用の割り当てブロックが見つからなければ、割り当てブロックが作られる。次に、データが、選択された仮想ブロックに以前関連していた割り当てブロックから、未使用の割り当てブロックに転送され、データは冗長レベルの変更を受ける。たとえば、以前ミラー冗長にしたがって記憶されていたデータは、あらたにパリティ冗長にしたがって（またはその逆）記憶される。最後のステップとして、アプリケーション・レベル仮想記憶空間５０のＲＡＩＤレベル仮想記憶空間４０へのマッピング５４は、データのシフトを反映するために修正され更新される。第１のＲＡＩＤレベル型の割り当てブロックに以前関連していた選択された仮想ブロックは、こんどは、更新されたポインタを介して、移行されたデータを含む第２のＲＡＩＤレベル型の割り当てブロックを参照する。この処理中に起こるマッピング変更はメモリマップ記憶装置２１の中で更新される。
【００４３】
以下に、本発明の方法およびシーケンスにしたがった、ミラーおよびパリティ記憶区域の間のデータの移行について説明する。パリティ記憶区域からミラー記憶区域へデータを移行するために、次のシーケンスが使われる。
１.  ＲＡＩＤ管理装置が、ミラーＲＡＩＤ区域４２の中に未使用のミラー割り当てブロック４３を探す。
２.  見つからなければ、ＲＡＩＤ管理装置はミラー割り当てブロックを作る（以下に述べる）。
３.  ＲＡＩＤ管理装置は、移行される仮想ブロックへの新しい記憶要求を中断する。
４.  ＲＡＩＤ管理装置は、その仮想ブロックに対する実行中のデータ記憶要求がすべて完了するまで待つ。
５.  仮想ブロック５３に関連しているパリティ割り当てブロック４５からのデータが臨時のメモリバッファに読み込まれる。
６.  データが、ステップ２で選ばれたミラー割り当てブロック４３に書かれる。
７.  仮想ブロック・テーブルが、ミラー割り当てブロック４３にあるデータの新しい位置を参照するように修正される。
８.  中断された記憶要求が再開される。
上述の手続きにより、アプリケーション・レベル仮想ビュー５０の仮想ブロック５３は、パリティからミラー記憶に移行する。中間的仮想ビュー４０に関しては、データは、パリティＲＡＩＤ区域４４のパリティ割り当てブロック４５からミラーＲＡＩＤ区域４２のミラー割り当てブロック４３に移行されている。物理的記憶空間では、データは区域Ａ１から区域Ａ０に移動している。
【００４４】
未使用のミラー割り当てブロックが見つからなかった場合（上記のステップ１）、ＲＡＩＤ管理装置は、３つの手法からなる次のシーケンスを試みる。先ず、ＲＡＩＤ管理装置は、未使用（したがって未指定）のＲＡＩＤ区域を見つけることを試みる。このＲＡＩＤ区域は、移行が常に進行できることを保証するのに必要な未使用のＲＡＩＤレベル記憶のシステムしきい値を犯すことなく、ミラーＲＡＩＤ区域に変換できるものである。これが失敗し、装置が未使用のＲＡＩＤレベル記憶の予備量以上を持っている場合、装置は、未使用のパリティ割り当てブロックを未使用のＲＡＩＤ区域に集めるために、パリティ記憶内のデータを移行する。この移行により、上記のようにミラーＲＡＩＤ区域に変換できる未使用のＲＡＩＤ区域が生じる場合、装置は未使用のＲＡＩＤ区域をミラーＲＡＩＤ区域に変換する。そうでない場合、代替方法として、未使用のミラー割り当てブロックを求めるため、または、未使用のＲＡＩＤ区域をミラーＲＡＩＤ区域に変換するのに十分な未使用のＲＡＩＤレベル記憶を増やすまで、装置はデータをミラーからパリティ記憶に移行し、ミラー記憶を詰め、未使用のＲＡＩＤレベル記憶をパリティに変換する。ミラー割り当てブロックはパリティ割り当てブロックよりも多くの物理的記憶空間を占めるので、この最後の方法は、未使用のＲＡＩＤレベル記憶装置の純増につながる。
【００４５】
未使用のミラー割り当てブロックを求めて確立するために使われる作成／変換のプロトコルは、ユーザデータの量および物理的記憶空間の大きさに応じて、ＲＡＩＤ管理装置がパリティ区域とミラー区域との間のメモリ割り当てを選択的に調節できるので、利点がある。ＲＡＩＤ管理装置は、データ使用および記憶容量が変化するにしたがい、ミラー記憶に保持されるデータ量が最大になるように、上記の１つまたは複数の手法を用いる。
【００４６】
ＲＡＩＤ管理装置は、空き時間（アイドルタイム）中に未使用のＲＡＩＤ区域を作ることにより、空間作成シーケンスが未使用のミラー割り当てブロックを生じる間、記憶要求が待たなければならない状況を避けるように試みる。しかし、ある状況においては、空間作成シーケンスの間、記憶要求が中断される場合がある。ＲＡＩＤ管理装置は、仮想空間がＲＡＩＤビューより小さくなるような方法で仮想ブロック記憶空間を構成する。これにより、少なくとも１つのＲＡＩＤ区域に等しい空き空間が、移行またはその他の目的のためにとって置かれることが保証される。このようにして、この手法のシーケンスにより未使用のミラー割り当てブロックが常に生じる。
【００４７】
ミラーからパリティ記憶にデータを移行するために、次のシーケンスが使われる。
１.  ＲＡＩＤ管理装置は、アクセス最近性またはアクセス頻度のような移行方針にしたがってミラーからパリティ記憶に移行するために、５２から仮想ブロックを選ぶ。
２.  ＲＡＩＤ管理装置は、パリティＲＡＩＤ区域４４の中に未使用のパリティ割り当てブロック４５を探す。
３.  そのようなブロックが見つからなかった場合、上述の作成方法にしたがって、移行のために確保しておいた空間がパリティＲＡＩＤ区域に変換される。
４.  移行される仮想ブロックに対する新しい記憶要求が中断される。
５.  ＲＡＩＤ管理装置は、その仮想ブロックへの実行中の記憶要求がすべて完了するまで待つ。
６.  データが、仮想ブロック５２に関連しているミラー割り当てブロック４３から臨時のメモリバッファに読み込まれる。
７.  データが、選ばれたパリティ割り当てブロック４５に書かれる。
８.  仮想ブロック・テーブルが、パリティ割り当てブロック４５の中のデータの新しい位置を参照するために修正される。
９.  仮想ブロックへのデータ要求が再開される。
上述の９ステップからなる２つのシーケンスは、２つの異なる冗長レベルの間のデータの移行を行うために、本発明による記憶装置がどのように動作するかの例を提供している。
【００４８】
図１に再び戻ると、データ記憶装置１０はさらに予備の記憶ディスク３３の組３１を持っている。データ記憶装置１０は、ディスクアレーが動作中に、ディスクアレーの使用可能な機械的ベイに追加ディスクを"ホットプラグ"できるように設計されている。このとき、データ記憶装置の電源は切られない。データ記憶装置の記憶容量を拡大するために、１つまたは複数の予備ディスク３３が、ＳＣＳＩバス１３とインターフェースするように、使用可能なベイに単に差し込まれる。制御装置１４は新しいディスクを認識し、追加された記憶空間を使用できるＲＡＩＤ区域に同化するために、本発明の処理を開始する。
【００４９】
図５ないし１３を参照して、以下に、１つまたは複数の記憶ディスクをホットプラグすることによって記憶容量を拡大する方法を述べる。この方法は、データ記憶装置の空き時間にバックグラウンドで実行されることが望ましい。
【００５０】
図５および６に、新しい記憶ディスクを組み込むために全ＲＡＩＤ区域を一時に１つずつ再構成する、本発明による１つの方法を示す。図５で、数字４で参照される新しい追加ディスクがディスクアレーに加えられる。複数の記憶ディスクを加えることができるが、説明を単純にするために、この例では１つのディスクを加える。新しいディスクは初めは空である。新しいディスクは、ディスクアレーにある既存の記憶ディスクと同じかまたは異なる容量を持つことができる。
【００５１】
図６を参照すると、最初のステップ１００で、現在構成されているディスクアレー上に記憶空間を確保する。この目的およびその他の目的のために、ディスクアレーには常にいくらかの記憶空間があることが望ましい。たとえば、ＲＡＩＤ管理装置１６は、図４を参照して上述したように、ＲＡＩＤ区域間でデータを移行する目的のために、１つまたは複数のＲＡＩＤ区域に等しい空間を確保する。確保された空間の大きさは、装置が記憶区域間でデータを移動するための空間を持てるのを確実にするために、ユーザデータに使える容量の１部としては計算されない。これは、データ移動または移行の目的以外に、確保された空間の使用を禁止または妨げるしきい値条件を制御装置に設定することによって行うことができる。
【００５２】
新しい記憶ディスクを追加する処理の間に使用するために確保した空間は、ＲＡＩＤ管理装置１６、または制御装置１４、またはその他の方法での通常の仕事の１部として管理することができる。確保された空間は、既存の１つのＲＡＩＤ区域以上の容量を持つ。このようにして、確保された空間は、１つのＲＡＩＤ区域に記憶されたデータと少なくとも同じ量のデータを保持するのに十分な大きさを持つ。空間の確保は、第１すなわちＲＡＩＤ仮想ビュー、第２すなわちユーザ仮想ビュー、またはその両者のビューの中で表すことができる。
【００５３】
ステップ１０２で、図５のディスク４のような、１つまたは複数の記憶ディスクがディスクアレーに加えられる。ステップ１０３で、記憶ディスクの追加によって生じた新しい記憶空間を反映するために、第２の仮想記憶空間５０が修正される。したがって、ホストは、追加の空間がデータ記憶装置に加えられたことを直ちに認識する。しかし、ホストは、次のＲＡＩＤ区域拡大手法を通してホストの要求を収容する十分な空間が組み込まれるまで、新しいディスク空間への最初のアクセスから遅延を経験する場合がある。
【００５４】
ステップ１０４で、１つの既存のＲＡＩＤ区域が選択される。既存のＲＡＩＤ区域とは、現在データを持っているが、新しいディスク４の空間を組み込むようにまだ構成されていない区域である。ステップ１０６で、選択されたＲＡＩＤ区域に含まれるデータのすべてが、次の２つの場所、すなわち（１）新しいディスク空間を含むすでに拡大されたＲＡＩＤ区域、または（２）ステップ１００で確保された空間を含むディスクアレー上の他の空間、のどちらかに移動される。図５に、選択された区域Ａ１（ＲＡＩＤ仮想ビューのＲＡＩＤ区域４２に対応する。図４を参照）から区域ＡＶの中に確保された空間へのデータの移動を示す。説明の目的のために、確保された記憶空間は、１つの連続したＲＡＩＤ区域にマッピングされた連続した物理的区域ＡＶに含まれているものとして示されている。
しかし、典型的には、確保された記憶空間は、非連続的なかたちでディスクアレー全体に分配され、複数のＲＡＩＤ区域にマッピングされる。
【００５５】
次に、選択された区域Ａ１に対応する物理的記憶空間は、新しい記憶ディスク４を組み込むためにマッピングしなおされる、即ち再構成される（ステップ１０８）。このマッピングしなおしによって、複数の記憶ディスク０ないし３、および新しく追加された記憶ディスク４にわたる拡大されたＲＡＩＤ区域が作られる。拡大されたＲＡＩＤ区域は、新しいディスク（すなわち領域３５ｅ）を含む、アレーの中の各ディスク（領域３５ａないし３５ｄ）からの同じ大きさの領域（複数の同じ大きさのセグメントで構成される）を含む。既存のＲＡＩＤ区域を拡大されたＲＡＩＤ区域にマッピングしなおす処理（ステップ１０４ないし１０８）は、データ記憶装置の空き時間のバックグラウンド処理で行うことができる。
【００５６】
ＲＡＩＤ方法でまだ指定されていない記憶空間は、新しいディスク容量を含むように自動的に成長する。この空間は必要に応じてＲＡＩＤ区域に変換される。
ユーザの記憶要求を容易にするために拡大されたＲＡＩＤ区域がさらに必要な場合、使われていない記憶空間が探され、新しいディスク空間を含む拡大されたＲＡＩＤ区域にマッピングされる。この新しく拡大されたＲＡＩＤ区域は、ステップ１０６により、既存のＲＡＩＤ区域からデータを受け取るために使うことができることに留意されたい。
【００５７】
このデータ移動が完了すると、階層ディスクアレー内のデータ移動およびＲＡＩＤ区域の拡大を反映するために、第１および第２の仮想記憶空間に対するメモリマップ記憶装置２１のメモリマップ情報が更新される（ステップ１１４）。より具体的には、拡大処理中に各仮想ブロックの中のデータが移動するたびに、メモリマップ情報が更新される。この処理は、全てのＲＡＩＤ区域が新しいディスク空間を含むように拡大されるまで、ディスクアレー記憶装置を通して一時に１つのＲＡＩＤ区域をインデックスするために続けられる（ステップ１１６）。本発明のこの方法により、データはユーザに常に使用可能である。
【００５８】
ＲＡＩＤ管理装置１６は、この処理中に第２の仮想記憶空間層５０で起こるいかなる競合も解決する。具体的には、ＲＡＩＤ管理装置１６は、仮想ブロックに対するデータアクセス要求と仮想ブロックの移動との間の競合を解決する。競合を解決することにより、データはいつでも使用可能である。ＲＡＩＤ管理装置は、多様な手法を通して競合を管理する。手法の１つの例は、選択されたＲＡＩＤ区域に関連する仮想ブロックへのアクセスを一時的に中断することである。"先取りなし"（non-preemption）と呼ばれるもう１つの手法は、競合し合う活動を避けるために、装置の資源を中断なしで使う。資源が１度にもっぱら１つの仕事に使われるので、競合が起こるのが防げる。もう１つの手法は、移動中のデータをアクセスしようとすることから起こる競合活動をログし、データが移動し終わったときにその競合を解決する方法である。
【００５９】
この方法は、ＲＡＩＤでない環境に一般化することができる。ディスクアレーの物理的記憶空間は、ＲＡＩＤ区域の代わりに、図３および４のストライプ０ないしＱのような複数のストライプに構成される。ストライプは、ディスクのすべてにわたって延び、ディスクあたり２つ以上のセグメントを持つストライプも可能ではあるが、典型的には、各ディスクから１つのセグメントを含む。ストライプに保持されているデータを一時的に記憶するために、物理的空間の１部を確保してもよいし、しなくてもよい。確保する場合は、その空間部分は、１つのストライプに記憶されるデータ量以上の量を記憶するのに十分な大きさのものである。
【００６０】
ストライプは拡大のために選択され、そのストライプの中の割り当ては禁止される。選択されたストライプの中のデータはすべて、ディスクアレーの別の記憶場所に移動される。次に、そのストライプを含む物理的記憶空間は、データを記憶するために、新しい記憶ディスクの上のセグメントを含む拡大されたストライプに再構成される。このようにして、拡大されたストライプは、新しく追加された記憶ディスクを含む全ての記憶ディスクにまたがる。次に、拡大されたストライプの中の割り当てが再開される。この処理は、新しいディスクを含むようにすべてのストライプが構成され終わるまで、ストライプごとに続けられる。この処理中、選択されなかった全てのストライプへのデータ可用性は維持される。
【００６１】
図７ないし１３に、再構成の処理中に、ストライプ内でセグメントが再編成され詰められる、本発明によるもう１つの方法を示す。上述した方法と異なり、データは、最初に、選択されたストライプの外の新しい場所にではなく、選択されたストライプ内で移動される。さらに、この方法を使えば、既存の記憶アレー上に空間を確保せずに、オンラインで再構成を実行することができる。
【００６２】
図７ないし１２に、はじめ４個のディスク０ないし３からなるディスクアレー上の処理を示す。ディスクアレーの物理的記憶空間は、予定のデータ量を記憶するための複数のストライプに構成される（図１３のステップ２００）。各ストライプは記憶ディスク０ないし３のそれぞれに延び、ディスク０〜３それぞれからのセグメントを含む。各ストライプはデータおよび冗長パリティ情報Ｐを含む。
【００６３】
ストライプ構成すなわち物理的記憶空間のメモリ・レイアウトおよびそこに記憶されているデータを表すプリマップが、データ記憶装置によって生成され維持される（ステップ２０２）。プリマップは、ディスクアレー制御装置１４（図１）のメモリマップ記憶装置２１の中で維持され更新されるテーブルとして具体化することができる。代替方法として、プリマップは、ＲＡＩＤ管理装置１６に組み込まれた１組の方程式であってもよい。これらの方程式は、ディスクアレーの記憶ディスクの数に基づいてマッピング情報を導き出す。
【００６４】
次に、新しい追加ディスク４がディスクアレーに加えられる（ステップ２０４）。新しいディスクははじめは空である。ＲＡＩＤ管理装置１６は、新しいストライプ構成、すなわち、追加記憶ディスク４を組み込んだ後のディスクアレーの物理的記憶空間のメモリ・レイアウトを表すポストマップを作る（ステップ２０６）。このポストマップは、同様に、テーブルとして、メモリマップ記憶装置２１に保持される。代替方法として、ポストマップは、ディスクアレーに新たに構成されたディスクの新しい数をパラメータとする方程式によって生成することもできる。
【００６５】
ステップ２０８で、グループＡのセグメントが定義される。グループＡは、新しく追加された記憶ディスクを含む各記憶ディスクからのセグメントを持つ１つの拡大されたストライプからなるのが望ましい。図７で、グループＡは、セグメント０、１、２、Ｐ、および、ディスク４の新しいセグメントＮからなる。次に、グループＢのセグメントが定義される（ステップ２１０）。グループＢは、グループＡにないセグメントを含む。グループＢは、１つの拡大されたストライプを満たすのに十分なセグメントからなることが望ましい。図７ないし１２の例では、グループＢは、最初は、グループＡと同じ大きさで、１つの拡大されたストライプからのセグメントを含んでいる。しかし、処理の後の方で、グループＢは、２つの拡大されたストライプからのセグメントを含むために大きくされる。したがって、グループＢのセグメントは、物理的に同じストライプにある場合もない場合もある。グループＡおよびＢが定義された後、ＲＡＩＤ管理装置は、拡大処理中に起こり得る競合にそなえて管理を行い始める。
【００６６】
処理の始めに、グループＡのセグメントの中のデータは、プリマップにしたがったセグメントの第１のデータ配列から、ポストマップにしたがったセグメントの第２のデータ配列に再編成する必要がある場合がある（ステップ２１３）。すなわち、プリマップにしたがって配列されたデータはポストマップに対して評価され、拡大処理の後、データが同じ場所に残るか、または再編成する必要があるかどうかが判断される。しかし、何回か処理を繰り返した後、グループＡは空のセグメントだけになり、したがって、再編成すべきデータがなくなる。
【００６７】
したがって、判断ステップ２１１で、グループＡのセグメントがすべて空であるかどうかが判断される。そうである場合、再編成ステップは実行されず、データは単にグループＢのセグメントからグループＡの空のセグメントに移される。
逆に、セグメントが空でない場合、次の判断ステップ２１２で、ポストマップ構成から見てデータがいま適切な順序にあるかどうかが判断される。そうである場合、再編成ステップは再び避けられる。他方、データが適切な順序でないならば、再編成ステップ２１３が実行される。これらのステップについては、図７ないし１２に示した例を参照して、次に詳しく述べる。
【００６８】
この例では、プリマップは、図７に示したような、ディスク０〜３上のデータ構成を示していると仮定する。さらに、ポストマップは、図１１に示したような、新しいディスク４を組み入れた記憶構成を持つと仮定する。
【００６９】
図７に示したグループＡのセグメントのデータは、すでに所望の順序になっていることに留意されたい。再編成は必要ない。代わりに、データは、グループＢのセグメント３から、以前パリティ情報を持っていたグループＡのセグメントＰを満たすために、単に移される。図１３の流れ図に沿って説明すると、判断ステップ２１１は、グループＡのセグメントは空でないことを示す"ＮＯ"を返し、判断ステップ２１２は、データが適切な順序になっていることを示す"ＹＥＳ"を返す。したがって、再編成ステップ２１３はバイパスされ、流れはステップ２１４に直接進み、データはグループＢのセグメントからグループＡの空のセグメントを満たすように移される。ステップ２１６で、グループＡのセグメントのデータに対するパリティ情報が再び生成され、新しいディスク４の上の新しいセグメントＮに置かれる。次に、グループＡおよびＢのセグメントに関連する仮想ブロックに関してこの処理中に起こった競合が解決される。
【００７０】
図８に示すように、グループＡは、空になったセグメントＶ、データセグメント４、パリティ・セグメントＰ、データ・セグメント５、および新しいセグメントＮを、それぞれディスク０ないし４の上に含むように再定義される（ステップ２０８）。グループＢも、セグメント６、Ｐ、７、８、Ｎをそれぞれディスク０ないし４の上に含むように再定義される。グループＡのセグメントのデータは適切な順序でなく、したがって、ステップ２１３で再編成されることに留意されたい。セグメント４のデータが、ディスク１からディスク０の空になったセグメントＶに移され、その後、セグメント５のデータが、ディスク３からディスク１のいま空になったセグメントに移される。
【００７１】
再編成中に、データが、グループＡ内のディスク４上の新しいセグメントＮにシフトされてもよいことに留意されたい。たとえば、ポストマップがそのように指示した場合、データは、グループＡのセグメント４から、新しく追加された記憶ディスク４の未使用の新しいセグメントＮに移すことができる。
【００７２】
ステップ２１３でデータがグループＡ内で再編成された後、データは空のセグメントを満たすようにグループＢから移される。ここで使われている"空の"セグメントという意味は、空にされたセグメント（Ｖで示す）、以前にパリティ情報を記憶していたセグメント（Ｐで示す）、および、新しいディスクによって提供された新しいセグメント（Ｎで示す）を意味する。図８で、ディスク０のセグメント６のデータは、ディスク２の空のセグメントＰを満たすために移される。また、ディスク２のセグメント７のデータは、ディスク４の新しいセグメントＮを満たすために移される。パリティ情報が再び生成され、ディスク３の空にされたセグメントに置かれる。再び、グループＡおよびＢのセグメントに関連した仮想ブロックに関する競合は解決される。
【００７３】
図９は、図１３の流れ図を通して行われる３回目の繰返しを示し、グループＡおよびＢが、それぞれ、第３および第４のストライプをカバーするために再定義される。この繰返しは、グループＡ内のデータの再編成、および、データの詰めすなわちグループＢから提供されたデータによる充填の組合せを再び使う。新しいデータの組に対してパリティ情報が再び生成され、ディスク２のセグメントに記憶される。
【００７４】
図１０は、４回目の繰返しを示す。グループＡが、第４のストライプのセグメントをカバーするために再定義される。グループＡはいま全て空のセグメントを持っていることに留意されたい。グループＡ内には再編成すべきデータがない。
したがって、図１３の流れ図のステップ２１１により、再編成ステップ２１３はバイパスされ、充填ステップ２１４に直接進む。したがって、再編成のサブ処理は、始めに実行されるだけで、数回の繰返しの後に急速に止む。実際には、Ｎを新しいディスクを足す前のアレーの中の記憶ディスクの数とするとき、再編成ステップはＮ−１の繰返しの後に終わる。この例ではＮは４に等しく、したがって、再編成サブ処理は３回目の繰返しの後に止まる。
【００７５】
グループＢは、第５および第６のストライプのセグメントをカバーするために再定義され拡大される。この拡大が起こるのは、グループＡの全ての空のセグメントを満たすのに１つのストライプに収まる量のデータよりも多くのデータが使われるからである。
【００７６】
図１１は、７回目の繰返しを示す。この繰返しにおいて、グループＡとＢとの間に、未使用のセグメントのギャップの形成が始まる。このギャップは、データがグループＢおよびその下のより小さい記憶空間からグループＡの上のより大きな拡大された空間に移されるにしたがい、発展する。このギャップは、Ｎを新しいディスクを足す前のアレーの中の記憶ディスクの数とするとき、２Ｎ−１の繰返しのときに形成し始める。処理が続くにしたがいギャップは大きくなる。
【００７７】
この処理は、グループＢがディスクアレー記憶空間の底に到達したときに終わる。その時点で、ギャップはその最大の大きさに成長して、すべて、使用可能な未使用のセグメントを含む。さらに、すべての未使用のセグメントは、ディスクアレーの中の使用されているセグメントの下に置かれる。この処理は、方程式（マッピングのために具体化されている場合）に、ディスクアレーのディスクの新しい数をロードすることができ、方程式の使用を容易にするので、利点が多い。
【００７８】
図１２は、多くの繰返しの後の、処理の一般的なケースを示す。ディスク４上の新しい記憶空間を含めるために、データがグループＡの上のセグメントＧ、Ｇ−１、Ｇ−２、Ｇ−３等に詰められている。他方、グループＢの中および下のデータは、新しいディスクを加える前に存在していたままに、セグメントＨ、Ｈ＋１、Ｈ＋２等に残っている。新しいディスク４の上のセグメントは空である。グループＡは全て空のセグメントからなる。グループＢは、グループＡを満たすべきデータからなる。グループＡとＢとの間のギャップには、多くの空のセグメントＥがある。
【００７９】
処理は、新しいディスク空間を含むようにすべてのストライプが拡大されるまで、ストライプごとに続けられる。その後、新しいディスクを加えた結果の拡大を反映するために、ホストが使用できる最大空間が増やされる。上述の方法は、種々のＲＡＩＤ区域を持つ階層ディスクアレーにも使うことができる。この場合、ＲＡＩＤ区域内の領域が選択されたＲＡＩＤ区域内で再編成され、その後、上記の方法にしたがって、選択されたＲＡＩＤ区域の外の領域からのデータで詰められる。そのような領域を全体として扱うこともできるが、図１０を参照して述べた方法でＲＡＩＤ区域全体が完了するまで、各ＲＡＩＤ区域内のストライプがストライプごとに拡大できるように、複数のストライプに分けて処理することが望ましい。
【００８０】
本発明による方法は、データの可用性を維持しながら、記憶容量を大きくするために追加の記憶ディスクをホットプラグすることができるので、利点が多い。
新しい空間を区域ごとに再編成することにより、データは、ディスクアレー上に存在しアクセス可能であり続け、従来技術で行われたように別の記憶装置に移す必要がない。
【００８１】
本発明には、例として次のような実施態様が含まれる。
（１）物理的記憶空間を定義する記憶ディスク（１２）を複数持つディスクアレー（１１）を備えたデータ記憶装置の記憶容量を拡大する方法であって、
（ａ）予定のデータ量を記憶させるために、前記ディスクアレー（１１）の物理的記憶空間（３４）を、それぞれが前記ディスクアレー（１１）の複数の記憶ディスク（０〜３）にわたって延び、前記ディスクアレーの個々の記憶ディスクからのセグメントを含む複数のストライプに構成するステップと、
（ｂ）前記ディスクアレー（１１）に少なくとも１つの追加記憶ディスク（４）を加えるステップと、
（ｃ）ストライプを選択するステップと、
（ｄ）前記選択されたストライプの少なくとも１つのセグメントから前記ディスクアレー上の別の場所にデータを移すステップと、
（ｅ）データを記憶させるために、前記選択されたストライプを持つ前記物理的記憶空間（３４）を、前記複数の記憶ディスク（０〜３）および前記追加記憶ディスク（４）にわたる、前記個々の記憶ディスクからのセグメントおよび前記追加記憶ディスクからのセグメントを含む拡大されたストライプに再構成するステップと、
を有する方法。
【００８２】
（２）前記方法が、
少なくとも各ストライプに記憶されている量のデータを記憶するのに十分な大きさの、前記ディスクアレー（１１）の物理的記憶空間（３４）の部分を確保するステップと、
前記選択されたストライプから前記確保された部分に全てのセグメントを移すステップと、
をさらに有する、上記（１）に記載の方法。
（３）データを移す前記ステップ（ｄ）が、１つのセグメントから（１）前記選択されたストライプ内の別のセグメント、または（２）前記ストライプに含まれる前記追加ディスクからのセグメントのどちらかにデータを移すことによって、前記ストライプ内のセグメントを再編成するステップをさらに有する、上記（１）に記載の方法。
【００８３】
（４）物理的記憶空間を定義する記憶ディスク（１２）を複数持つディスクアレー（１１）を備えたデータ記憶装置の記憶容量を拡大する方法であって、
（ａ）予定のデータ量を記憶するために、前記ディスクアレー（１１）の物理的記憶空間（３４）を、それぞれが前記ディスクアレーの複数の記憶ディスク（０〜３）にわたって延び、前記ディスクアレーの個々の記憶ディスクからのセグメントを含む複数のストライプに構成するステップと、
（ｂ）前記ディスクアレーの前記物理的記憶空間（３４）の構成を示すプリマップを提供するステップと、
（ｃ）前記ディスクアレー（１１）に少なくとも１つの追加記憶ディスク（４）を加えるステップと、
（ｄ）前記追加記憶ディスクを組み込んだ後の前記ディスクアレーの物理的記憶空間の新しい構成を示すポストマップを作るステップと、
（ｅ）前記個々の記憶ディスク（０〜３）からのセグメントおよび前記追加記憶ディスク（４）からのセグメントを含む、少なくとも１つの拡大されたストライプを含むようにグループＡのセグメントを定義するステップと、
（ｆ）グループＡにないセグメントを含むためにグループＢのセグメントを定義するステップと、
（ｇ）少なくとも１つの空のセグメントを持つグループＡのセグメントの中のデータを、前記プリマップにしたがったセグメントの中の第１のデータ配列から、前記ポストマップにしたがったセグメントの中の第２のデータ配列に再編成するステップと、
（ｈ）グループＢの少なくとも１つのセグメントから、グループＡの前記少なくとも１つの空のセグメントへデータを移すステップと、
を有する方法。
【００８４】
（５）前記方法が追加ステップとして、（ｉ）前記ステップ（ｈ）の後、グループＡの前記セグメントに含まれるデータに基づいてパリティを再び生成するステップをさらに有する、上記（４）に記載の方法。
（６）前記方法が、前記ステップ（ｅ）〜（ｈ）を繰り返すステップをさらに有し、前記ステップ（ｅ）〜（ｈ）をある回数繰り返した後で前記再編成するステップ（ｇ）が停止する、上記（４）に記載の方法。
（７）前記グループＡおよびＢのセグメントの中のデータへのアクセスと、そのデータの移動との間の競合を解決するステップをさらに有する、上記（４）に記載の方法。
【００８５】
（８）物理的記憶空間を定義する記憶ディスク（１２）を複数持つ階層ディスクアレー（１１）を備えたデータ記憶装置の記憶容量を拡大する方法であって、
（ａ）物理的記憶空間（３４）を、前記ディスクアレーの複数の記憶ディスク（０〜３）にわたって延び、前記ディスクアレーの個々の記憶ディスクからの記憶空間の１つまたは複数のセグメントを含み、第１のＲＡＩＤレベルにしたがってデータを記憶する第１ＲＡＩＤ区域、および第２のＲＡＩＤレベルにしたがってデータを記憶する第２ＲＡＩＤ区域を含む複数のＲＡＩＤ区域として物理的記憶空間を提示する第１の仮想記憶空間（４０）にマッピングするステップと、
（ｂ）前記第１の仮想記憶空間を、記憶空間を複数の仮想ブロックとして提示する第２の仮想記憶空間（５０）にマッピングするステップと、
（ｃ）前記データ記憶装置の物理的記憶空間を拡大するために、少なくとも１つの追加記憶ディスク（４）を前記階層ディスクアレーに加えるステップと、
（ｄ）前記追加記憶ディスク（４）を加えることによって生じる新しい記憶空間を反映するために前記第２の仮想記憶空間（５０）の使用可能な容量を修正するステップと、
（ｅ）ＲＡＩＤ区域を選択するステップと、
（ｆ）前記選択されたＲＡＩＤ区域から前記階層ディスクアレー上の別の場所にデータを移すステップと、
（ｇ）前記階層ディスクアレー内のデータ移動を反映するために、前記第２の仮想記憶空間（５０）の前記第１の仮想記憶空間（４０）へのマッピングを更新するステップと、
（ｈ）前記選択されたＲＡＩＤ区域に対応する物理的記憶空間を、前記複数の記憶ディスクおよび前記追加記憶ディスクにわたる、個々の記憶ディスク（０〜３）および追加記憶ディスク（４）からの１つまたは複数のセグメントを含む、少なくとも１つの拡大されたＲＡＩＤ区域にマッピングしなおすステップと、
（ｉ）前記階層ディスクアレーのすべてのＲＡＩＤ区域が追加記憶ディスク上のセグメントを含むように拡大されるまで、前記ステップ（ｅ）〜（ｈ）を繰り返すステップと、
を有する方法。
【００８６】
（９）前記方法が、ＲＡＩＤ区域に記憶されているのと同じデータ量を保持するのに十分な大きさの少なくとも１つの区域を確保するステップをさらに有し、データを移す前記ステップ（ｆ）が前記選択されたＲＡＩＤ区域から前記確保された区域にデータを移すステップを有する、上記（８）に記載の方法。
【００８７】
（１０）物理的記憶空間を定義する記憶ディスク（１２）を複数持つ階層ディスクアレー（１１）を備えたデータ記憶装置の記憶容量を拡大する方法であって、
（ａ）物理的記憶空間（３４）を、前記ディスクアレーの複数の記憶ディスク（０〜３）にわたって延び、前記ディスクアレーの個々の記憶ディスクからの記憶空間の１つまたは複数のセグメントを含み、第１のＲＡＩＤレベルにしたがってデータを記憶する第１のＲＡＩＤ区域、および第２のＲＡＩＤレベルにしたがってデータを記憶する第２のＲＡＩＤ区域を含む複数のＲＡＩＤ区域として物理的記憶空間を提示する第１の仮想記憶空間（４０）にマッピングするステップと、
（ｂ)前記第１の仮想記憶空間（４０）を、記憶空間を複数の仮想ブロックとして提示する第２の仮想記憶空間（５０）にマッピングするステップと、
（ｃ）前記データ記憶装置の物理的記憶空間（３４）を拡大するために、少なくとも１つの追加記憶ディスク（４）を前記階層ディスクアレーに加えるステップと、
（ｄ）使われていない記憶空間を探すステップと、
（ｅ）前記使われていない記憶空間を、前記複数の記憶ディスクおよび前記追加記憶ディスクにわたる、個々の記憶ディスクおよび追加記憶ディスクからの１つまたは複数のセグメントを含む、少なくとも１つの拡大されたＲＡＩＤ区域にマッピングするステップと、
（ｆ）関連するＲＡＩＤレベルにしたがってデータを現在保持している既存のＲＡＩＤ区域を探すステップと、
（ｇ）前記既存のＲＡＩＤ区域から前記拡大されたＲＡＩＤ区域へデータを移すステップと、
（ｈ）前記既存のＲＡＩＤ区域に対応する物理的記憶空間を、前記複数の記憶ディスクおよび前記追加記憶ディスクにわたる少なくとも１つの拡大されたＲＡＩＤ区域にマッピングしなおすステップと、
を有する方法。
【００８８】
【発明の効果】
本発明の方法により、データの可用性を維持しながら、複数の記憶ディスクを持つディスクアレーに新しく記憶ディスクを追加して、データ記憶装置の記憶容量を拡大することができる。
【図面の簡単な説明】
【図１】本発明によるディスクアレー・データ記憶装置を示すブロック図。
【図２】複数の記憶ディスク上の記憶空間、および、ＲＡＩＤレベル１によるデータ記憶を示す図。
【図３】複数の記憶ディスク上の記憶空間、および、ＲＡＩＤレベル５によるデータ記憶を示す図。
【図４】１つの物理的記憶空間に関して２つの仮想記憶空間がマッピングされている、本発明によるメモリマップ配列を示す図。
【図５】複数の記憶ディスク上の記憶空間を示し、元のＲＡＩＤ区域が新しいディスク上の空間を含むために拡張できるように、１つのＲＡＩＤ区域全体から別の記憶空間へのデータ移動を示す図。
【図６】本発明の１つの具体化による、データの可用性を維持しながら、新しいディスクを追加して記憶容量を増やす処理ステップを示す流れ図。
【図７】複数の記憶ディスク上の記憶空間を示し、新しい追加記憶ディスクの新しいセグメントを含めるために、ストライプ内部のデータを再編成して詰め込み同時にストライプを拡大する、本発明の別の具体化の最初のステップを示す図。
【図８】図７の記憶空間を示し、図７に続くステップを示す図。
【図９】図７の記憶空間を示し、図８に続くステップを示す図。
【図１０】図７の記憶空間を示し、図９に続くステップを示す図。
【図１１】図７の記憶空間を示し、図１０に続くステップを示す図。
【図１２】図７の記憶空間を示し、図１１に示したステップの後に続いてとられるステップの一般的なフォーマットを示す図。
【図１３】図７ないし１２に示したように、ディスクを追加することによって記憶容量を拡大するステップを示す流れ図。
【符号の説明】
１０            データ記憶装置
１１            階層ディスクアレー
１２            記憶ディスクまたはディスク駆動装置
１３            インターフェース・バス（ＳＣＳＩバス）
１４、14a、14b  ディスクアレー制御装置
１５            インターフェース・プロトコル
１６            ＲＡＩＤ管理装置
１７            入出力インターフェース・バス
１８            ミラー・グループ
２１            メモリマップ記憶装置
２１ａ、２１ｂ  不揮発性ＲＡＭ
２２            パリティ・グループ
２６            ディスクの第１の組
２８            ディスクの第２の組
３０            ５個のディスク
３２            ６番目のディスク
【図１】
0003699165.tif 000003
【図２】
0003699165.tif 000004
【図３】
0003699165.tif 000005
【図４】
0003699165.tif 000006
【図５】
0003699165.tif 000007
【図６】
0003699165.tif 000008
【図７】
0003699165.tif 000009
【図８】
0003699165.tif 000010
【図９】
0003699165.tif 000011
【図１０】
0003699165.tif 000012
【図１１】
0003699165.tif 000013
【図１２】
0003699165.tif 000014
【図１３】
0003699165.tif 000015