(57)【特許請求の範囲】
【請求項１】
物理記憶スペースを規定する複数の記憶ディスクを含む階層的なデータ記憶システムにおいて、不使用の記憶スペース（U）を使用する方法であって、
第１のRAIDレベルに従ってデータを格納する第１の割当てブロックを有する複数の第１のRAID領域と、同量のデータを格納するのに該第１のRAID領域より小さい記憶スペースを使う第２のRAIDレベルに従ってデータを格納する第２の割当てブロックを有する複数の第２のRAID領域と、を備えるRAIDレベルの仮想記憶スペースに、前記物理記憶スペースをマップするステップと、
複数の仮想ブロックを有するアプリケーション・レベルの仮想記憶スペースに前記RAIDレベルの仮想記憶スペースをマップするステップと、
前記第１のRAIDレベルに従って格納されたデータを前記第２のRAIDレベルに従って格納されるように、第１の割当てブロックから部分的にデータで満たされた第２の割当てブロックにデータを移行するステップと、
前記移行するステップを繰り返すことにより生成された前記複数の記憶ディスクに分布するデータを含まない複数の割り当てブロックからデータを含まない不使用のRAID領域を形成するステップと、
を含む方法。
【請求項２】
物理記憶スペースを規定する複数の記憶ディスクを含む階層的なデータ記憶システムにおいて、不使用の記憶スペース（U）を使用する方法であって、
ミラー冗長に従ってデータを格納するミラー割当てブロックを有するミラーRAID領域と、パリティ冗長に従ってデータを格納するパリティ割当てブロックを有するパリティRAID領域と、データを含まない不使用のRAID領域とを有するRAIDレベルの仮想記憶スペースに前記物理記憶スペースをマップするステップと、
複数の仮想ブロックを有するアプリケーション・レベルの仮想記憶スペースに前記RAIDレベルの仮想記憶スペースをマップするステップと、
使用可能なミラー割当てブロックを見つけようと試みるステップと、
使用可能なミラー割当てブロックが見つけられる場合、該ミラー割当てブロックにデータを書き込むステップと、
使用可能なミラー割当てブロックが見つけられない場合、データを受け取るために以下のステップ
(１)不使用のRAID領域を見つけ、それを使用可能なミラー割当てブロックを含むミラーRAID領域に変換するステップ、
(２)部分的に満たされた一つのパリティRAID領域から他の一つまたは複数のパリティRAID領域にデータを移して、データを含まない不使用のRAID領域を生成するステップ、
(３)ミラー割当てブロックからパリティ割当てブロックにデータを移行してミラー冗長からパリティ冗長に変換して記憶し、こうして生じたデータを含まないミラー割当てブロックを集めてデータを含まない不使用のRAID領域とするステップ、
の１つまたは複数をさらに行うことによって、使用可能なミラー割当てブロックを生成するステップと、
を含む方法。
【請求項３】
前記(３)のステップは、
(ａ)ミラー割当てブロックからパリティ割当てブロックにデータを移行してミラー割当てブロックを空にするステップおよび(ｂ)前記空のミラー割当てブロックを集めるステップを、不使用のRAID領域が生成されるまで交互に実行し、
(ｃ)その後に、前記不使用のRAID領域を変換してパリティRAID領域にすることを含み、
ミラーRAID領域に変換できる不使用のRAID領域が生成されるまで、前記(ａ)から(ｃ)を繰り返すことを含む、請求項２に記載の方法。
【請求項４】
物理記憶スペースを規定する複数の記憶ディスクを含む階層的なデータ記憶システムにおいて、不使用の記憶スペース（U）を使用する方法であって、
第１のRAIDレベルに従ってデータを格納する第１の割当てブロックを有する複数の第１のRAID領域と、第２のRAIDレベルに従ってデータを格納する第２の割当てブロックを有する複数の第２のRAID領域と、を備えるRAIDレベルの仮想記憶スペースに、前記物理記憶領域をマップするステップと、
複数の仮想ブロックを有するアプリケーション・レベルの仮想記憶スペースに前記RAIDレベルの仮想記憶スペースをマップするステップと、
前記第１又は第２のRAIDレベルの一方に従って格納されたデータを前記第１又は第２のRAIDレベルの他方に従って格納されるように、前記第１の割当てブロックと前記第２の割当てブロックの間でデータを移行するステップと、
部分的にデータで満たされた第１又は第２のRAID領域を見つけるステップと、
前記見つけられたRAID領域から前記複数の記憶ディスクに分布することのできるデータを含まない割当てブロックにデータを移すことによって、前記見つけられたRAID領域を空にし、少なくとも１つのデータを含まない不使用のRAID領域を形成するステップと、
を含む方法。
【請求項５】
前記RAID領域を見つけるステップは、最小のデータ量を含む第１又は第２のRAID領域を見つけることを含む、請求項４に記載の方法。
【請求項６】
前記空にされたRAID領域をミラーRAID領域又はパリティRAID領域に変換するステップをさらに含む、請求項４に記載の方法。
【請求項７】
前記見つけられたRAID領域を空にするステップは、前記第１のRAIDレベルの第１のRAID領域及び前記第２のRAIDレベルの第２のRAID領域の両方において、見つけられたRAID領域からデータを含まない割当てブロックにデータを移すことを含む、請求項４に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、階層的なディスク・アレイ・データ記憶システムのようなデータ記憶システム、及びそのようなシステム内でのデータの移行のために保留された記憶スペースの使用方法に関する。
【０００２】
コンピュータ・システムは、速度、信頼性および処理能力の観点から絶えずよくなっている。その結果、コンピュータはより複雑で洗練されたアプリケーションを扱うことができる。コンピュータがよくなるにつれて、大容量記憶および入出力（I/O）装置に課せられるパフォーマンスの要求が増加する。パフォーマ ンスの面で、発展するコンピュータ・システムとペースを保つ大容量記憶システムを設計する必要性がある。
【０００３】
この発明は、特にディスク・アレイ型の大容量記憶システムにかかわる。ディスク・アレイ・データ記憶システムは、一つの大容量記憶システムを形づくるよう構成され調整された複数の記憶ディスク・ドライブ装置を持つ。大容量記憶システムのための3つの主要な設計基準がある。それは、費用、パフォーマンスお よび可用性である。メガバイト当たりのコストが低く、高い入出力パフォーマンスおよび高いデータ可用性を持つ記憶装置を生産することが望まれる。「可用性」は、データを記憶装置の中でアクセスする能力であり、なんらかの故障があっても連続した操作を保証する能力である。典型的には、データ可用性は、データ、またはデータ間の関係が複数のロケーションに格納される冗長性の使用を通して提供される。
【０００４】
【従来の技術】
冗長データを格納するには2つの一般的な方法がある。第１の方法、すなわち「ミラー」法によると、データは、複製され、その記憶装置の2つの別々の領域に 格納される。例えば、ディスク・アレイにおいて、同じデータがディスク・アレイの2つの別々のディスクに提供される。ミラー法は、二重記憶技術によって高 いパフォーマンスおよび高いデータ可用性の利点を持っている。しかし、ミラー法は、データを格納する費用を実質的に２倍にするので比較的高価である。
【０００５】
第２の方法、すなわち「パリティ」法では、記憶領域の一部分が、冗長データを格納するために使われるが、冗長な記憶領域のサイズは、オリジナルのデータを格納するのに使われた残りの記憶スペースより小さい。例えば、5つのディス クを持つディスク・アレイにおいて、4つのディスクが、データを格納するのに 使われ、5番目のディスクが冗長データを格納するのに使われる。パリティ法は 、ミラー法より低コストだという利点があるが、ミラー法に比べるとパフォーマンスおよび可用性特性において劣る。
【０００６】
【発明が解決しようとする課題】
本発明は、パフォーマンスおよび信頼性を最適化するために異なる冗長技術に従ってデータを格納する階層的なデータ記憶システムを提供することを目的とする。
【０００７】
【課題を解決するための手段】
データ記憶システムは、複数の記憶ディスクを有するディスク・アレイと、ディスクへ、またはディスクからのデータの移行を調整するディスク・アレイ・コントローラを含む。記憶ディスクは、物理記憶スペースを規定する。また、データ記憶システムは、記憶ディスクの物理記憶スペースに２つの仮想記憶スペースをマッピングするために、ディスク・アレイ・コントローラと機能的に結合したRAID管理システムを含む。第１の、すなわちRAIDレベルの仮想記憶スペースは、物理記憶スペースを複数のミラー及びパリティRAID領域として提示する。ミラーRAID領域は、RAIDレベル１（ミラー冗長）に従ってデータを格納するミラー割当てブロックを含み、パリティRAID領域は、RAIDレベル５（パリティ冗長）に従ってデータを格納するパリティ割当てブロックを含む。第２の、すなわちアプリケーション・レベルの仮想記憶スペースは、物理記憶スペースを多重仮想ブロックとして提示する。
【０００８】
RAID管理システムは、データが、RAIDレベル１（すなわちミラー冗長）とRAIDレベル５（すなわちパリティ冗長）の間で、パフォーマンス及び信頼性を最適化する態様で冗長性の変化を受けるように、データをミラー割当てブロック及びパリティ割当てブロックの間で移行させる。移行を容易にするために、RAID管理システムは、移行の間に一時的にデータ移動のターゲットになりうるRAIDレベル仮想記憶スペース内に、ある量の不使用の記憶スペースを保留する。不使用の記憶スペースは、サイズにおいて１つのRAID領域と同じであることが好ましい。しかしながら、不使用の記憶スペースは、１つのRAID領域または他の１つの物理ロケーションの中に存在せず、複数の記憶ディスクにわたる不連続な態様で、多数のRAID領域にまたがって分布していてよい。
【０００９】
本発明の１つの方法によると、RAID管理システムは、ミラー割当てブロックの生成を助けるために不連続の不使用のスペースを用いる。その方法は、不使用のスペースを使用するいくつかの可能な技法を含む。その手段は、少なくとも１つのミラー割当てブロックが生成されるまで連続して試行される。第１の技法は、不使用のRAID領域を見つけだし、それを少なくとも１つの使用可能なミラー割当てブロックを含むミラーRAID領域に変換するものである。第２の技法は、不使用のRAID領域に空のパリティ割当てブロックを集めて、そのRAID領域を少なくとも１つの使用可能なミラー割当てブロックを含むミラーRAID領域に変換するものである。第３の技法は、不使用のRAID領域が生成されるまで、以下のステップ(a)及び(b)を交互に実行し、それからステップ(c)を実行するものである。(a)データをミラー割当てブロックからパリティ割当てブロックに移行させ、ミラー割当てブロックを空にする。(b)空のミラー割当てブロックを不使用のRAID領域に集める。(c)不使用のRAID領域をパリティRAID領域に変換する。第３の手段のステップ(a)ないし(c)は、不使用のRAID領域が生成されるまで繰り返され、それは保留された最小限の不使用の記憶スペースを侵すことなくミラーRAID領域に変換することができる。
【００１０】
本発明の他の方法によると、RAID管理システムは、タスクの再生成や新たな記憶ディスクの追加など、サイズのあったデータの移動オペレーションに使用するために全RAID領域を空にする。RAID管理システムは、最初に、データが部分的にのみ満たされるRAID領域（ミラー又はパリティ）を見つける。そして、データは、RAID領域から不使用の記憶スペースへ移される。これで、RAID領域は空になり、ミラーまたはパリティRAID領域への変換の準備が整う。
【００１１】
【発明の実施の形態】
図１は、この発明に従ってつくられたデータ記憶システム10を示す。データ記憶システム10は、複数の記憶ディスク12を有する階層的なディスク・アレイ11、記憶ディスク12から又は記憶ディスク12へのデータ移動を調整するディスク・アレイ・コントローラ14、およびRAID管理システム16を備える、ディスク・アレイ・データ記憶システムであるのが好ましい。
【００１２】
説明上、「ディスク」は、それ自身の記憶装置故障を発見する能力を持つ、不揮発性でランダムにアクセス可能な、再書き込み可能な大容量記憶装置である。それは、回転する磁気ディスクおよび光ディスク、ならびにソリッドステートのディスクまたは不揮発性電子記憶素子（PROM、EPROMとEEPROMのような）を含む。「ディスク・アレイ」という用語は、ディスクの集合をいい、それらを一つまたは複数のホスト・コンピュータに接続するために必要なハードウェア、および物理的なディスクの操作を制御するために使われ、ホスト操作環境へそれらを一つまたは複数の仮想ディスクとして提供する管理ソフトウェアを含んでいる。「仮想ディスク」とは、管理ソフトウェアによってディスク・アレイの中で実現される抽象的な構成要素である。
【００１３】
用語「RAID」(Redundant Array of Independent Disks)は、記憶容量の残りの部分に格納されたユーザ・データに関する冗長情報を格納するために、物理的な記憶容量の一部分が使われるディスク・アレイを意味する。そのアレイの構成ディスクの一つが故障するかそれへのアクセス経路が故障した場合、冗長情報がユーザ・データの再生を可能にする。RAIDシステムのより詳細な説明は、The RAID Book: A Source Book for RAID Technology, the RAID Advisory Board, Lino Lakes, Minnesota、1993 年6月9日、に記載されている。
【００１４】
ディスク・アレイ・コントローラ14は、小型コンピュータ・システム・インターフェース（SCSI）のような１つまたは複数のインターフェース・バス13を通してディスク・アレイ11に結合されている。RAID管理システム16は、インターフェース・プロトコル15を通して動作的にディスク・アレイ・コントローラ14に結合されている。また、データ・メモリ・システム10は、I/Oインターフェース・バ ス17を通してホスト・コンピュータ（図示しない）に結合される。RAID管理システム16は、ディスク記憶および信頼性のレベルを制御するため、およびいろいろな信頼性記憶レベルの間でデータを転送するためにデータ・マネージャー手段を提供するよう、別々のコンポーネントとして具体化されることも、ディスク・アレイ・コントローラ14内で、あるいはホスト・コンピュータ内で構成されることもできる。これらの信頼性記憶レベルは、後述するようにミラーまたはパリティ冗長レベルであるのが好ましいが、全く冗長性なしの信頼性記憶レベルを含むことができる。
【００１５】
ディスク・アレイ・コントローラ14は、ディスク・アレイ・コントローラA、14aとディスク・アレイ・コントローラB、14bから成る二重のコントローラとして実施するのが好ましい。二重のコントローラ14aと14bは、連続的なバックアップと冗長性を提供することによって、一つのコントローラが動作不能になるときの信頼性を高める。しかし、この発明は、一つのコントローラその他のアーキテクチャーでも実施することができる。
【００１６】
階層的なディスク・アレイ11は、その物理的な記憶スペースおよび１つまたは複数の仮想記憶スペースを含めて、異なる記憶スペースとして特徴づけることができる。記憶装置のこれらのいろいろな見方は、マッピング技法を通して関係づけられる。例えば、そのディスク・アレイの物理的な記憶スペースは、いろいろなデータの信頼度レベルに従って記憶領域を画定する仮想記憶スペースにマップすることができる。仮想記憶スペース内のいくつかの領域が、ミラーまたはRAIDレベル１のような第１の信頼性記憶レベルのために割り当てられ、他の領域がパリティまたはRAIDレベル５のような第２の信頼性記憶レベルのために割り当てられることができる。いろいろなマッピング技術およびRAIDレベルに関する仮想スペースについて、以下に詳細を説明する。
【００１７】
データ記憶システム10は、異なる記憶スペースを互いにマップするために使われる仮想マッピング情報を持続的に記憶するためのメモリ・マップ・ストア21を含む。メモリ・マップ・ストアは、ディスク・アレイに対して外部にあり、ディスク・アレイ・コントローラ14に常駐するのが好ましい。異なるビューの間でいろいろなマッピング構成が変わるにつれて、メモリ・マッピング情報がコントローラまたはRAID管理システムによって連続的に、あるいは定期的に更新されることができる。
【００１８】
メモリ・マップ・ストア21は、それぞれのコントローラ14aと14bに位置する２つの不揮発性RAM (Random Access Memory) 21aおよび21bとして具体化されるの が好ましい。不揮発性RAM（NVRAM）の一例は、バッテリで支援されたRAMである。バッテリ支援RAMは、データ記憶システム10への電力供給が損なわれた場合、 ある時間の間メモリの中のデータを維持するために独立のバッテリ源からのエネルギーを使う。一つの好ましい構造は、自己リフレッシュ型のバッテリ支援DRAM（Dynamic RAM）である。
【００１９】
二重のNVRAM 21aおよび21bが、メモリ・マッピング情報の冗長な記憶を行う。仮想マッピング情報が、ミラー冗長技術に従って複製され、両方のNVRAM 21aお よび21bに格納される。このように、NVRAM 21aが、オリジナルのマッピング情報を格納することに専用され、NVRAM 21bが冗長なマッピング情報を格納すること に専用されることができる。代替構造において、ミラーされたメモリ・マップ・ストアは、そのデータを二重に記憶するに十分なスペースを持つ単一の不揮発性RAMを使って構成することができる。
【００２０】
図１に示されるように、ディスク・アレイ11は、複数の記憶ディスク・ドライブ装置12を持っている。これらの記憶ディスクのサイズの例は、１ないし３ギガバイトである。記憶ディスクは、SCSIバス13とのインターフェイスを提供する機械的ベイに、独立に接続されたり切り離したりされることができる。一つの実施例において、データ記憶システムは、１２の機械的ベイを持つよう設計される。4つのSCSIバスが、これらのベイとディスク・アレイ・コントローラ14とをインターフェイスするのに使われる（すなわち、3つの機械的ベイにつき一つのバス）。活動ベイがいっぱいにロードされるならば、データ記憶システムは、１２ないし３６ギガバイトの結合された容量を持つ例になる。ディスク・アレイ・コントローラ14は、どのベイに接続されたかとは関係なく記憶ディスク12を認識する。データ記憶システム10は、ディスク・アレイが運転中である間に、ディスク・アレイの利用可能な機械的ベイに付加的ディスクを「ホットプラグ」（稼働中にプラグ接続する）することができるよう設計されている。
【００２１】
ディスク・アレイ11の中の記憶装置ディスク12は、説明の目的のために、複数のディスク20のミラー・グループ18および複数のディスク24のパリティ・グループ22に配列されているものと観念することができる。ミラー・グループ18は、データを第１の、すなわちミラー冗長レベルに従って格納する、ディスク・アレイの第１の記憶ロケーションすなわちRAID領域を表わす。また、このミラー冗長レベルは、RAIDレベル１と考えられる。RAIDレベル１、すなわちディスク・ミラーリングは、データのあらゆるビットがデータ記憶システム内で複製され記憶される点で１対１の保護を与え、最も高いデータ信頼性を提供する。ミラー冗長性は、図１において３対のディスク20によって表わされている。オリジナルのデータが、第１組のディスク26に格納されることができ、重複して冗長データが、対になった第２組のディスク28に格納される。
【００２２】
図２は、RAIDレベル１に従ったデータの記憶をより詳細に図示する。垂直な列は、個々のディスク（ディスク0、1、2および3が図示される）を表現する。4つのディスクの ディスク・アレイに含まれる物理的な記憶スペースは、水平な行によって表現されるように、複数のストライプに構成することができる。「ストライプ」は、記憶ディスクを横切って広がり、一つのセグメントがそのアレイの中のそれぞれのディスクと関連する、多数の等しい大きさの記憶スペースのセグメントを含む。すなわち、セグメントは、一つのディスク上にあるストライプの部分である。各ストライプは、記憶ディスクを横切って分配されるあらかじめ決められた量のデータを持つ。ストライプのセグメントのいくつかは、オリジナルのデータのために使われ、他のセグメントが冗長データのために使われる。
【００２３】
ミラー冗長性（RAIDレベル1）のこの例において、ディスク0上でストライプ0 のセグメント0に格納されたデータは、複製され、ディスク1上でストライプ0の セグメント0'に格納される。同様に、ディスク2上でストライプ2のセグメント5 に格納されたデータは、ディスク3上でストライプ2のセグメント5'にミラー（複製）される。このように、データの各部分は、複製されてディスク上に格納される。図２の冗長性レイアウトは、説明の目的で用意されている。冗長データは、図示しているように同一のストライプにきちんと置かれる必要はない。例えば、ディスク0上でストライプ1の中のセグメント2に格納されたデータは、複製されて、ディスク3上でストライプSのセグメントT'に置かれてもよい。
【００２４】
再び図１を参照すると、ディスク24のパリティ・グループ22は、データがRAIDレベル５のような第２の冗長レベルに従って格納される第２の記憶ロケーションすなわちRAID領域を表わす。６つのディスクを用いた説明的なイラストにおいて、オリジナルのデータは、５つのディスク30に格納され、冗長な「パリティ」データが６番目のディスク32に格納される。
【００２５】
図３は、パリティRAID領域のレイアウトをより詳しく示す。図２のミラーRAID領域レイアウトと同様に、ディスク0、1、2、3の物理的な記憶スペースは、複数の等しい大きさのストライプに構成されることができる。図の例において、データがRAIDレベル５に従って格納され、セグメントに格納された冗長データは、文字Pによって参照される。冗長なPセグメントは、他のセグメントのパリティをそのストライプに格納する。たとえば、ストライプ0において、ディスク3上の冗長なPセグメントは、ディスク0、1および2のパリティを格納する。各ストライプのためのパリティが、次の式の中の記号によって表わされる排他的ＯＲ機能のようななんらかの機能によって計算される。第１の４つのストライプのためのパリティ（下付き添字数字が対応するストライプを表わす）は、次のようである：
【００２６】
【数１】
0003778980.tif 000002
パリティ冗長性は、ディスクの一つで利用できなくなるデータの再生を可能にする。例えば、セグメント5のデータが利用できなくなったならば、その内容は 、セグメント3および4ならびにセグメントPの中のパリティ・データから確かめ ることができる。パリティ記憶は、ミラー記憶より経済的であるが、相対的に信頼性が低く、パフォーマンスが低い。
【００２７】
図１のディスク構成は、概念上の目的で用意されている。実際上、ディスク・アレイ11は、データをミラーおよびパリティ冗長性に従って格納することができる単に複数のディスク12を持っていてよい。すべてのディスク12によって提供される利用可能な記憶スペースの中で、その記憶スペースの一部がミラー冗長性のために割り当てられ、他の部分がパリティ冗長のために割り当てられる。ディスク12は、個々の区域が複数のセグメントを持つ、複数の等しい大きさに作られた記憶区域（図４において数字35で参照される）を含むよう構成されるのが好ましい。その区域は、記憶スペースの一つの仮想ビューにおいて、RAID領域を形成するようグループ化される。さらに、記憶スペースのもう一つの（ホストで規定される）ビューがユーザまたはホストに提示されるので、RAID領域およびデータ冗長性記憶技術はユーザまたはホストに透明である。これらの機構は、図４を参照してより詳しく説明する。
【００２８】
データ記憶システム10は、ミラーおよびパリティ記憶法の間でデータの「移行」を管理する。両方の型の冗長の管理は、RAID管理システム16（図１）で協調される。RAID管理システム16は、ディスク・アレイの２つの異なる型のRAID領域を、ミラーRAID領域がパリティRAID領域のためのキャッシュに似た動作をするメモリ・ハイアラーキとして管理する。RAID管理システム16は、規定されたパフォーマンス・プロトコルに従って、ミラーおよびパリティRAID領域の間でデータをシフトし、組織するなど管理する。ミラーおよびパリティRAID領域の間でデータを動かすプロセスは、「移行」と呼ばれる。
【００２９】
データ記憶システム10は、ミラー冗長性が最も高いパフォーマンスと信頼性の余裕を持っているから、よりパフォーマンスに厳格なデータをミラーRAID領域に置こうとする。RAID管理システムによって実行されるパフォーマンス・プロトコルは、２つの好ましい移行方針の一つを含む。「アクセス頻度」として知られる第１の移行方針によると、階層的なディスク・アレイ上の最も頻繁にアクセスされるデータがミラーRAID領域18に維持される。アクセスされる頻度の小さいデータは、パリティRAID領域22に維持される。「アクセスの最近度」として知られている第２の移行方針によると、最も最近アクセスされたデータがミラーRAID領域18に維持され、アクセス最近度の低いデータがパリティRAID領域22に格納される。他のパフォーマンス・プロトコルを使うこともできる。理想的には、そのようなプロトコルは、特定のコンピュータ・アプリケーションおよびユーザのニーズに基づいて規定される。
【００３０】
さらに、RAID管理システム16は、2つのパラメーターの関数に従って、データ 記憶システムの記憶資源を自動的に「調整する」。この２つのパラメータは、物理的な記憶容量のサイズ、およびデータ記憶システムに格納つつあるユーザ・データの現在量のサイズである。最初は、最も高いパフォーマンスおよび信頼性を持つので、すべてのデータがミラーRAID領域に格納される。より多くのデータがデータ記憶システムに加えられるにつれて、データは、パフォーマンスおよび信頼性を最適化するために、ミラーRAID領域およびパリティRAID領域の間で移行される。データ記憶システムが容量いっぱいに近づくと、冗長性を通しての信頼性を提供しながらユーザのすべての要求に応ずるために、より多くのデータがパリティRAID領域に移行される。それゆえに、この発明のデータ記憶システムは、最大の融通性と順応性を持つ。この発明の記憶システムは、ユーザに特定の記憶体制を選ぶことを要求せず、ユーザの要求に適応することができる。
【００３１】
図４は、データ記憶システム10の利用可能な記憶スペースのメモリ・マッピングを、マップされた仮想記憶スペースの複数の段として図示する。図の中の垂直に伸びたそれぞれの長方形は、物理的な記憶スペースのビューを表現する。この図の中で、物理的記憶スペース34が２つの仮想記憶装置のビュー40および50で参照される。物理的記憶スペース34は、数字0、1、2、および3で参照される４つのディスク（図１の中のディスク12のような）によって表現される。そのディスクに関連した４つの長方形は、ディスク1、2および3がほぼ等しい記憶容量を持ち、ディスク0がわずかに小さい記憶容量を持つ物理的な記憶スペースのビューを表わす。そのようなディスクの例としての記憶容量は、１ないし３ギガバイトである。記憶スペース34は、領域A0、A1、A2、その他に区分される。個々の領域は、領域A0にストライプ0ないしQのような多数のストライプを含む。個々の領域はまた、多数の区域35を含む。区域35は、区域が全ディスク・アレイにわたって同じ大きさであるように、あらゆる記憶ディスク上で選ばれた数の均一な大きさのセグメントから成るのが好ましい。区域35の例としてのサイズは、１メガバイトである。
【００３２】
ディスクの記憶スペースは、物理的な記憶スペース34の第１の、中間の、RAIDレベルの仮想ビュー40にマップされる。この第１の仮想ビューは、観念的には、連続してアドレス可能な記憶スペースを表現する第２のアプリケーション・ビューにマップされることができる一組のRAID領域である。記憶スペースの物理的構成およびRAIDビューは、アプリケーション・ビューから隠されている。
【００３３】
RAID領域記憶スペース40は、ミラーおよびパリティ記憶スペースを識別する記憶装置のビューである。たとえば、RAID領域42が、M割当てブロック43のミラーRAID領域を表現し、RAID領域44がN割当てブロック45のパリティRAID領域を表現してもよい。割当てブロック43および45は、同じ大きさであるのが好ましい。例としての大きさは、64キロバイトである。これらのRAID領域は、物理的な記憶スペース34上の対応する物理的な領域A0、A1、A2などに関連する。例として、RAID仮想ビューにおける16の64K割当てブロック43または45は、一つの1M区域35の上へマップすることができる。
【００３４】
ミラーおよびパリティRAID領域は、ディスク・アレイの全記憶スペース34を消費するかもしれず、消費しないかもしれない。したがって、ある種のアプリケーションの間、特定のRAID領域に対応しない、不使用の指定されていない記憶スペースがあることがある。しかし、そのような記憶スペースは、ミラーまたはパリティRAID領域に変換されることができる。また、RAID領域は、ディスク・アレイ上で連続する領域にマップされ、各RAID領域に関連したそれぞれの区域が各記憶ディスクの同じ物理アドレスに位置するものとして示されている点に注意されたい。代わりに、RAID領域は、ディスク・アレイ上の連続しない領域にマップされてもよい。
【００３５】
RAID領域で利用可能な記憶スペースは、ユーザまたはホスト・アプリケーション・プログラムによって規定され、それらに提示される記憶装置のビューである、第２の、フロントエンドの、アプリケーション・レベルの仮想ビュー50にマップされる。ユーザまたはホスト・アプリケーション・プログラムから見るとき、アプリケーション・レベルの仮想ビュー50は、記憶ディスク12上の利用可能な記憶スペースを示す一つの大きい記憶容量を表わすことができる。仮想記憶スペース50は、個別に0、1、2、...、J-1、J、J+1、...、Lー1、L、L+1、...、などとして参照される等しい大きさの記憶仮想ブロック52および53の線形セットのビューを提示する。仮想ブロック52および53は、RAID領域40における割当てブロックと同じサイズであることが好ましい。サイズの例は、64キロバイトである。仮想ブロック記憶スペース50は、RAID領域40で表されるビューの割当てブロックへの参照すなわちポインタ（矢印54によって表現されるように）のテーブルによって表わされる。したがって、アプリケーション仮想ビュー50における仮想ブロック52および53は、仮想ブロック・テーブルに維持されるポインタを通してRAID仮想ビュー40における割当てブロック43および45と関連する。仮想ブロック・テーブルから参照することができる少くとも２つ型のRAID領域、ミラーおよびパリティ がある。
【００３６】
RAID管理システム16は、物理的な記憶スペースにわたって動的にRAID領域の構成を変えることができる。それぞれの型についてRAID領域の数が、システムで格納されるユーザ・データの量および物理的なディスク記憶スペースのサイズに依存して増やされまたは減少されうる。この結果、RAIDレベルの仮想ビュー40におけるRAID領域のディスクへのマッピング、およびフロントエンドの仮想ビュー50のRAIDビュー40へのマッピングは、概して変化状態にある。NVRAM 21aおよび21b（図１）におけるメモリ・マップ・ストアは、RAID領域をディスクへマップするためにRAID管理システム16によって使われる現在のマッピング情報を、2つの仮想ビューの間でマップするために使われる情報と同様に維持する。RAID管理システムは、動的にRAIDレベルのマッピングを変えるにつれて、その変更を反映するために、メモリ・マップ・ストアのマッピング情報を更新する。
【００３７】
メモリ・システム10の移行操作を図１および４を参照して説明する。
【００３８】
説明を続ける目的で、アプリケーション・レベルの仮想記憶スペース50の仮想ブロック53は、物理的記憶スペース34の領域A1に格納されたパリティRAID領域44における関連した割当てブロック45を参照する。そのような仮想ブロック53は、「パリティ仮想ブロック」と呼ぶことができ、関連した割当てブロック45は、「パリティ割当てブロック」と呼ぶことができる。同様に、仮想ブロック52は、物理的記憶スペース34の領域AOに格納されたミラーRAID領域42における関連した割当てブロック43を参照する。そのような仮想ブロック52は、「ミラー仮想ブロック」と呼ばれ、関連した割当てブロック43が「ミラー割当てブロック」と呼ばれる。
【００３９】
一般に、一つのRAID領域から別の領域にデータを移行するために、第１のRAIDレベル型（ミラーすなわちレベル1のような）の割当てブロックに関連した仮想ブロックが選ばれる。次いで、第２のRAIDレベル型（パリティすなわちレベル５のような）を表す不使用の割当てブロックが見つけられる。不使用の割当てブロックを見つけることができないならば、一つが作成される。データは、選ばれた仮想ブロックと関連する割当てブロックから不使用の割当てブロックに移され、データは冗長レベルを変更される。例えば、ミラー冗長性に従って格納されていたデータは、パリティ冗長性に従って格納され、また、その逆が行われる。最終的なステップとして、RAIDレベルの仮想記憶スペース40へのアプリケーション・レベルの仮想記憶スペース50のマッピング54は、データのシフトを反映するために修正され、更新される。以前に第１のRAIDレベル型の割当てブロックと関連していた、選ばれた仮想ブロックが、更新されたポインタを介して、移行されたデータを含む第２のRAIDレベル型の割当てブロックを参照する。この処理の間に生じるマッピング変化は、メモリ・マップ・ストア21において更新される。
【００４０】
この発明の好ましい方法と順序に従って、ミラーおよびパリティ記憶領域の間を移行するデータのより詳細な説明を続ける。データをパリティ記憶からミラー記憶に移行するために、次のシーケンスが使われる。
1.  RAID管理システムは、ミラーRAID領域42における、不使用のミラー割当てブロック43を見つける。
2.  何も見つけられることができなければ、RAID管理システムは、ミラー割当てブロック（下で説明する）を作り出す。
3.  RAID管理システムは、移行すべき仮想ブロックへの新しい記憶要求を中断する。
4.  RAID管理システムは、仮想ブロックへのすべての有効なデータ記憶要求が完了されるまで待つ。
5.  仮想ブロック53に関連したパリティ割当てブロック45からのデータが、一時記憶バッファに読み込まれる。
6.  データは、次いで、ステップ２において選ばれたミラー割当てブロック43に書 き込まれる。
7.  仮想ブロック・テーブルは、ミラー割当てブロック43におけるそのデータの新しいロケーションを参照するよう修正される。
8.  中断されていた記憶要求が、再開される。
上記の手順によると、アプリケーション・レベルの仮想ビュー50における仮想ブロック53は、パリティ記憶からミラー記憶に移行した。中間の仮想ビュー40に関し、データは、パリティRAID領域44におけるパリティ割当てブロック45からミラーRAID領域42におけるミラー割当てブロック43に移行されている。物理的な記憶スペースにおいて、データは領域A1から領域A0に動いている。
【００４１】
データをミラー記憶からパリティ記憶へ移行させるために、以下の順序が使われる：
1．RAID管理システムは、アクセス最近度またはアクセス頻度のような移行方針に従ってミラー記憶からパリティ記憶へ移行させるために仮想ブロックを52から選ぶ。
2.  RAID管理システムは、パリティRAID領域44に不使用のパリティ割当てブロック45を見つける。
3．そのようなブロックが見つけられないならば、移行用に保留されたスペース が上述の創設技法に従ってパリティRAID領域に変換される。
4.  移行されるべき仮想ブロックへの新しい記憶装置要求が中断される。
5.  RAID管理システムは、仮想ブロックへのすべての有効な記憶装置要求が完了するまで待つ。
6.  データは、仮想ブロック52に関連したミラー割当てブロック43から一時記憶バッファに読込まれる。
7.  そのデータは、選ばれたパリティ割当てブロック45に書込まれる。
8.  仮想ブロック・テーブルが、パリティ割当てブロック45におけるデータの新しいロケーションを参照するよう修正される。
9.  仮想ブロックへのデータ要求が再開される。
【００４２】
上述の２つの挙げられたシーケンスは、この発明のメモリ・システムが異なる２つの冗長性レベルの間でデータを移行する方法の例を提供する。
【００４３】
本発明のデータ記憶システムは、データの移動や他のオペレーション（例えば、上記ミラーからパリティへの移動プロセスのステップ３）のために、ある量の不使用の記憶スペースを保留する。けれども、ミラー冗長が最高のパフォーマンス及び信頼性を提供することから、このシステムのもう一つの目的は、ユーザ・データをミラー仮想ブロックにできるだけ多く保有することである。しかし、ディスク・アレイには限られた量の物理記憶スペースしかない。はじめは、物理記憶スペースは使われない。データがディスク・アレイに格納されるときに、ミラー割当てブロックが物理容量を使い始める。「物理容量」とは、ユーザ・データや冗長データを格納することができる記憶容量をさす。ユーザ・データが物理容量の１／２を使うときに、ミラー記憶はディスク・アレイを効果的にふさぐ。ここで、物理容量の１／２がユーザ・データを格納するのに使われ、物理容量の残りの１／２が冗長データを格納するのに使われる。
【００４４】
さらにここで、すべての使用された仮想ブロックは、ミラー記憶に保持される。もしミラー記憶が多くの物理記憶スペースを消費して、不使用のRAIDスペースの量が一つのRAID領域の量よりも少なくなるとすれば、もはやデータ記憶システムは、たった一つのミラー割当てブロックのパリティRAID領域への移動さえも保証できなくなる。不使用のスペースの量が一つのRAID領域の量よりも小さく、ミラー記憶から一つの割当てブロックを移すためパリティ記憶に変換することができないので、前に不使用であった割当てブロックを使用するという次のデータの要求は失敗する。この状況は、回避しなければならない。
【００４５】
RAID管理システム16は、データ移動のための十分な量の不使用の記憶スペースを保留し、この不使用の記憶しきい値が侵されない保証をするための様々なプロセスを管理する。図５は、本発明の概略的な手順を示す。ステップ60において、RAID管理システム16は、ディスク・アレイ12によって供給された物理記憶スペースを第１のまたはRAIDレベルの仮想記憶スペース40（図４）にマップする。RAIDレベルの仮想記憶スペースは、物理記憶スペースをミラー及びパリティRAID領域として表す。ミラーRAID領域は、ミラー冗長又はRAIDレベル１にしたがってデータを格納するミラー割当てブロックを含む。パリティRAID領域は、パリティ冗長又はRAIDレベル５にしたがってデータを格納するパリティ割当てブロックを含む。ステップ６２において、RAID管理システムは、RAIDレベルの仮想記憶スペース40に不使用の記憶スペースを保留する。保留する不使用の記憶スペースの量は１つのRAID領域の記憶スペースの量に等しい。不使用の記憶スペースは、あらかじめ選択された連続のRAID領域で保留される必要はない。そのかわりとして、本発明の方法では、２以上のRAID領域にまたがって不連続に分布する不使用の記憶スペースを用いる。
【００４６】
図６は、スペースの保留方法を示す。例としての不均一なディスク・アレイ68は、変化する容量である５つのディスク0ないし4を含むように示されている。不使用の記憶スペース（ラベルＵで表される）は、不連続な状態で複数の記憶ディスクにわたって分布する。保留した記憶スペースは、１つのRAID領域に論理上等しい。すなわち、ディスクをまたがって分布された不使用の記憶スペースＵが蓄積すると仮定すると、少なくとも１つの連続するRAID領域（保留スペースＵ０ないしＵ４）が満たされる。
【００４７】
不使用の記憶スペースの量は１つの最大のパリティRAID領域の量と等しいことに注意されたい。不均一なディスク・アレイでは、最大でないRAID領域が全ディスクのうち一部のディスクにだけわたり、最大のRAID領域がディスク・アレイの全ディスクにわたる。すべてのディスクが同じ大きさである均一なディスク・アレイでは、すべてのRAID領域がすべての記憶ディスクにわたる。こうして、各RAID領域を最大と考えることができる。
【００４８】
ステップ64では、RAID管理システムは、RAIDレベルの仮想スペースを、物理記憶スペースを複数の仮想ブロックとして表す第２の又はアプリケーション・レベルの仮想記憶スペース50へマップする。アプリケーション・レベルの仮想記憶スペースは、保留した記憶スペースによって提供される容量には見えない。図４を参照して論じた２つの列挙されたプロセスにおいて述べたように、図５のステップ66では、RAID管理システム16は、不使用の記憶スペースを使ってミラー及びパリティRAID領域間でデータを移行する。このデータ移行は、データ記憶システムが、不使用の記憶スペースの１つのパリティRAID領域のしきい値が侵されないようミラー記憶に過多なデータを置かないことの保証を助ける。
【００４９】
不使用のスペースは異なったRAID領域にまたがり、また複数の記憶ディスクにまたがって不連続に分布することができるので、本発明の不使用の記憶スペースを保留する方法は有用である。連続した保留記憶スペースが保証されねばならない要求はない。結果として、物理記憶スペースの特定の構成を保証するネスティング・トランザクションのように難しく複雑なオペレーションなしで、システムを設計することができる。
【００５０】
不連続な不使用の記憶スペースは、オペレーションの進行によって異なった方法で、集められ、または使用される。一般に、保留した量は、ユーザの記憶、または必要に応じてミラーあるいはパリティRAID領域に変換することができる不使用のRAID領域のために使用可能な割当てブロックを生成するのに使われる。特に興味深い２つのオペレーションは、(1)単一の仮想ブロックをミラーされた記憶領域に書くこと、および(2)全RAID領域を書き換えること、に関係する。第１のオペレーションでは、単一の仮想ブロックを書き込む方法は、「ガーベジ・コレクション（ごみ集め）」と呼ばれる技法とミラーからパリティへのデータの移行を介して、不使用の記憶スペースを集める手順を含む。ガーベジ・コレクション／移行の手段は、図７ないし９を参照してより詳細に説明される。第２のオペレーションでは、全RAID領域を書き換える方法は、「ブートストラッピング」と呼ばれる技法を介して、空のRAID領域を必要に応じてミラー又はパリティRAID領域に変換するために、部分的に満たされたRAID領域を空にすることに関する。ブートストラッピング方法は、図１０及び１１を参照してより詳細に説明される。
【００５１】
図７は、データをミラー記憶のミラー仮想ブロックに書き込む方法を示す。はじめの３つのステップ70、72、74は、基本的に、図５を参照して上述されたステップ60、62、64に一致している。これら３つのステップは、１つのRAID領域と大きさが等しいRAIDレベルの仮想記憶スペース内で不使用の記憶スペースを保留する一方で、図４を参照して詳細に述べた仮想記憶スペースの２つのレベルを生成する。ステップ70でマップされたRAIDレベルの仮想記憶スペースは、ミラー又はパリティRAID領域として指定されておらず、それゆえどちらにも使用することができる不使用のRAID領域を含む。
【００５２】
データを単一の仮想ブロックに書き込む場合、RAID管理システム16は、まず、単一の仮想ブロックと関連付けさせることができるRAIDレベルの仮想記憶スペースに、使用可能なミラー割当てブロックを見つけようと試みる（ステップ76）。移行のために保留された不使用の記憶スペースの１つのRAID領域のしきい値を侵すことなく使用できる使用可能なミラー割当てブロックがあるならば（すなわち、判断ステップ78で「ＹＥＳ」ならば）、データは単に、見つけられたミラー割当てブロックに書き込まれる（ステップ80）。一方、使用可能なミラー割当てブロックが見つからなければ（すなわち、判断ステップ78で「ＮＯ」ならば）、RAID管理システムは、少なくとも１つの使用可能なミラー割当てブロックを生成する（ステップ82）。その後、データは、生成されたミラー割当てブロックに書き込まれる。
【００５３】
図８は、ステップ82で使用可能なミラー割当てブロックを生成する好ましい方法を示す。この方法は、図に示すように少なくとも１つの使用可能なミラー割当てブロックが生成されるまで連続的な順で行われることが好ましい。ステップ90で、不使用の記憶スペースのための１つのRAID領域のしきい値を侵すことなくミラーRAID領域に変換できる不使用のRAID領域があるかどうか判断される。この判断は、不使用の記憶スペースのための１つのRAID領域のしきい値が侵されるという点で、不使用のRAID領域のミラーRAID領域への変換が、有効な記憶スペースを狭めるかもしれないという理由でなされる。しきい値は、最大のパリティRAID領域の大きさに等しいと仮定する。Ｎ個のディスクのディスク・アレイに関して、パリティRAID領域は、ユーザ・データの記憶と冗長データ用の割当てブロックのためのN-1のｍ倍の割当てブロックを有する。これに対して、ミラー割当てブロックは、ユーザ・データの記憶と冗長データ用のN/2の割当てブロックのためにN/2の倍数の割当てブロックを有する。不使用のRAID領域からミラー又はパリティRAID領域への変換は、N/2-(N-1)の倍数によって効果的に記憶スペースを減少させる。こうして、変換は、不使用の記憶のために１つのRAID領域を侵す。
【００５４】
不使用のしきい値を侵さずにミラーRAID領域へ変換できる不使用のRAID領域があるならば（すなわち、ステップ90からの分岐が「ＹＥＳ」であれば）、RAID管理システムは、不使用のRAID領域をミラーRAID領域に変換する（ステップ100）。成功ならば、この方法は、少なくとも１つのミラー割当てブロックを生成する。それから、データが新しいミラーRAID領域内の使用可能なミラー割当てブロックに書き込まれる。その後、このプロセスは停止する。
【００５５】
ミラー記憶に変換できる不使用のRAID領域がなければ（すなわち、ステップ90からの分岐が「ＮＯ」であれば）、次にRAID管理システムは、記憶システムが不使用の記憶の保留されたしきい値よりも多い不使用の割当てブロックを有するかを判断する。有するならば、RAID管理システムは、不使用のRAID領域をつくる目的でパリティ記憶をパックする第２のスペース管理方法を行う（ステップ94）。
【００５６】
パリティ記憶パッキングは、図９に示されたガーベジ・コレクション・プロセスを使って行われる。図９は、４つの記憶ディスク０ないし３を含むディスク・アレイの一部分を示す。便宜上、RAIDレベル仮想記憶スペースのRAID領域は、領域ＡG-1、ＡG、ＡG+1、・・・、ＡH-1、ＡH、ＡH+1、・・・等の上に連続的にマップされると仮定する。領域ＡG-1、ＡG、ＡG+1は、ミラー記憶として使用され、領域ＡH-1、ＡH、ＡH+1はパリティ記憶に関連する。ミラーRAID領域内の部分は、データD0ないしD5で満たされた割当てブロック及びミラー冗長R0ないしR5を与える割当てブロックを含む。パリティRAID領域内の部分はデータD100ないしD107を保有する割当てブロックおよびパリティ冗長Ｐのために与えられる割当てブロックを含む。見出しラベルＵを有する箱は、保留された不使用の記憶スペースを示す。
【００５７】
不使用のパリティ割当てブロックを不使用のRAID領域に集めるために（すなわち、図８のパリティ・パッキングのステップ94）、データは、選択されたパリティRAID領域から他のパリティRAID領域の不使用の記憶スペースＵに移される。図９で、物理領域ＡH-1に関連するパリティRAID領域が選択されたと仮定する。データD100は、RAID領域ＡH+1に見つけられた不使用の記憶スペースＵに移される。同様に、データD101は、RAID領域ＡHに移される。このデータの移動は、RAID領域ＡH+1をよりいっぱいにして、パリティRAID領域の「穴」を満たす。同時に、データの移動は、不使用の記憶スペースを同一のRAID領域に集める。ここで、選択されたパリティ領域ＡH-1は、完全に空になった。従って、不使用のRAID領域として分類することができる。
【００５８】
アプリケーション・レベルの仮想記憶スペースでは、仮想ブロック・テーブルのポインターがデータ移動を反映して更新される。これは、不使用の割当てブロックを不使用のRAID領域（すなわち、物理領域ＡH-1に関連する空になったパリティRAID領域）に効果的に集める。
【００５９】
図８のステップ96で、RAID管理システムは、このパッキング・ステップが、保留された記憶スペースのために１つのRAID領域のしきい値を侵すことなくミラーRAID領域に変換できる不使用のRAID領域を生成したかを判断する。不使用のRAID領域が生成された（すなわち、ステップ96の分岐が「ＹＥＳ」）ならば、生成された不使用のRAID領域は、データを書き込める少なくとも１つのミラー割当てブロックを含むミラーRAID領域に変換される（ステップ100）。図９に関して、データは物理領域ＡH-1に、ミラー冗長方法に従って格納することができ、ミラーRAID領域としてその領域に再び関連づけされる。
【００６０】
一方、パッキング・ステップで、ミラー記憶領域に変換できる不使用のRAID領域を生成することができなかった（すなわち、ステップ96の分岐が「ＮＯ」）ならば、RAID管理システムは、ミラー割当てブロックからパリティ割当てブロックへデータを移行し、不使用のRAID領域を生成するためにミラー記憶を集める第３の方法を実行する（ステップ98）。このステップ98の移行／収集方法は、ステップ92の分岐が「ＮＯ」である、つまり記憶システムが、保留されるしきい値以上の不使用の割当てブロックを有していないことによって達せられる。
【００６１】
ステップ98のサブプロセスに従って、ミラー割当てブロックから、不使用のパリティ割当てブロックを用いて又は不使用のRAID領域をパリティに変換して、パリティ割当てブロックにデータを移行する。その後、ミラー記憶は、不使用のRAID領域を生成する目的のためにパックされる。
【００６２】
不使用のミラー割当てブロックの収集もまた、図９に示す。例えば、物理領域AG+1に関連するミラー領域のように選択されたミラー領域から、他のミラー記憶領域の不使用の記憶スペースＵに、データが移されると仮定する。データD4は、RAID領域AG-1とAGに位置する不使用の記憶スペースＵに移される。同様に、データD5は、RAID領域AG-1の不使用スペースＵに移される。データの移動によって、ミラーRAID領域の「穴」が満たされ、同時に、同一のRAID領域に不使用の記憶スペースが集められる。選択されたミラー領域AG+1は、完全に空になり、不使用のRAID領域として分類することができる。
【００６３】
上記の場合、アプリケーション・レベルの仮想記憶領域では、データの移動を反映して、仮想記憶ブロック・テーブルのポインターが更新される。これは、不使用の割当てブロックを不使用のRAID領域（すなわち、物理領域AG+1に関連する空になったミラーRAID領域）に効果的に集める。
【００６４】
移行およびパッキングのステップは、不使用のRAID領域が生成されるまで、繰り返し実行される。ユーザ・データをミラー記憶に格納することは、同じユーザ・データをパリティ記憶するのに比べてより多くの物理記憶スペースを占有するので、ミラー割当てブロックからパリティRAID領域への移行は、不使用の記憶を最終的に増加させることになる。不使用のRAID領域は、いったん生成されると、付加な移行のためにパリティRAID領域に変換される（ステップ99）。ステップ98及び99は、ステップ96によって保留された不使用の記憶しきい値が侵されることなくミラーRAID領域に変換できる不使用のRAID領域が存在するまで繰り返し実行される。保留された不使用の記憶の大きさのために、このプロセスは、ミラーRAID領域をパリティRAID領域に変換できるように空にする保証をする。つまり、ディスク・アレイ・データ・システムは、ユーザ・データのために委ねられた容量を満足するのに必要とされるほどの多くのミラー記憶を狭める。
【００６５】
それぞれ上述したステップが、時間及び資源の観点から使用可能なミラー割当て領域を生成するのに低コストであるので、図８で述べた方法は、図に示したように好ましい順序で行われる。しかしながら、他の数少ない好ましい具体例では、使用可能なミラー割当てブロックを生成する方法は、他の順序で行うことができる。
【００６６】
不使用のミラー割当てブロックを生成するのに使われるプロトコルは、ユーザ・データの量や物理記憶スペースの大きさに従って、RAID管理システムに、パリティ及びミラー領域間のメモリ割当てを択一的に調整させるので、有用である。データの使用と記憶容量が変化するとき、RAID管理システムはミラー記憶に保有するデータ量を最大にする。こうして、最近のまたは最も頻繁に使われるデータは、ミラー記憶に維持され、パフォーマンス及び信頼性を最適化する。
【００６７】
RAID管理システムは、アイドル時間に不使用のRAID領域を生成することによって不使用のミラー割当てブロックを生成するスペース生成の順序を待たなければならない状況を回避しようとする。しかし、ある状況では、記憶要求がスペース生成の順序の間に作られる時に、競合が起きるかもしれない。RAID管理システムは、スペース生成手順が完了する際のあらゆる競合を解決する。
【００６８】
図１０は、「ブートストラッピング」方法を使って、RAID領域全体を書き換える方法を示す。はじめのステップ120、122、および124は図４に関連して上述された２層のマッピング構造を生成し、その一方で、１つのRAID領域と等しい不使用の記憶スペースを保留する
ステップ126は、RAID管理システムが、ユーザ・データで部分的に満たされたミラー又はパリティRAID領域を見つける。１つの好ましい実施では、RAID管理システムは、最も少なく満たされたミラーまたはパリティRAID領域を探す。そして、RAID管理システムは、残存するデータをディスク・アレイ内の不使用の記憶スペースに移して、部分的に満たされたRAID領域を空にする（ステップ128）。データは、ミラー又はパリティ記憶のいずれかのいかなる不使用の記憶スペースに移すことができる。
【００６９】
空になったRAID領域は、必要に応じてミラー又はパリティRAID領域に変換することができる（ステップ130）。例えば、将来のパフォーマンス及び効率性から、大規模のデータの移動が望まれる様々なオペレーションを容易にするために、もう１つのRAID領域（ミラー又はパリティ）からのデータは、この空になったRAID領域に移されるか、書き換えられる。例えば、再構築オペレーション（ディスクの故障の後に、データ冗長がリストアされる）または平衡オペレーション（１つ以上の付加的記憶スペースを加えることによって生成される新たな記憶スペースを組み入れるために、RAID領域が１つずつ拡張される）の間に、全RAID領域を混ぜることが望まれる。
【００７０】
図１１は、図１０のブートストラッピング方法を図で示す。図１１は、５つの記憶ディスク0ないし4を含むディスク・アレイ140の一部分を示す。便宜上、RAIDレベル仮想記憶スペースは、領域APF-4からAPF+2に連続的にマップされている。個別のディスク上のそれぞれのRAID領域の部分は、データD0-D15、ミラー冗長R0-R7、及びパリティ冗長Pのための割当てブロック、及び四角で囲われた「U」によって示される不使用の割当てブロックを含む。保留されたしきい値により、不使用の割当てブロックの数は、Ｎ-ディスク・アレイの最大の可能なパリティRAID領域の割当てブロックの数よりも多いか、又は等しい。
【００７１】
この例では、RAID管理システムが、部分的に満たされたRAID領域として識別されたRAID領域APFを有すると仮定する。選択された部分的に満たされたRAID領域APFに存在するデータは、他のRAID領域の不使用の記憶スペースに移される。データD8は、ミラーRAID領域APF-4及びAPF-2の不使用の記憶スペースＵに移され、データD9は,ミラーRAID領域APF-1及びパリティRAID領域APF+1及びAPF+2の不使用の記憶スペースＵに移される。データは、記憶のレベルにかかわらず、ディスク・アレイの至る所のRAID領域の保留された記憶スペースに移される。このプロセスは、選択されたRAID領域がデータを含まないように、そのRAID領域を空にする。それから、選択されたRAID領域APFは、ミラー又はパリティRAID領域に変換される。
【００７２】
ブートストラッピング・プロセスは、データがはじめにミラーあるいはパリティRAID領域にあったかにかかわらず、データがいかなる記憶スペースの「穴」をも満たすことができる点で上記ガーベジ・コレクションプロセスとは異なる。そのプロセスは、ミラー記憶で最も最近又は最も頻繁に使われたデータの保全を完全には維持しないが、ディスク・アレイでデータを多量に書き換えるのに役立つ。ブートストラッピング・プロセスは、上記のガーベジ・コレクションプロセスよりも簡単で速い。本発明の方法は、多くの利点を有する。第１に、記憶スペースは、それがRAIDレベル仮想記憶スペースのどこにあろうとも移行やRAID領域への変換に用いることができる。それ故、記憶のタイプ間の移行のために保留されるスペースの特定の位置付けや構成を保証するネスト構造のトランザクションを支持するように、データ記憶システムを設計する必要がない。第２に、この方法は、均一又は不均一のディスク・アレイに容易に採用することによって、記憶のタイプの大きさに最大限の融通性を与える。第３に、この方法は、ミラー記憶に可能な限り多くのデータを保有することによって、パフォーマンス及び信頼性を最適化することに努める。
【００７３】
本発明は例として次の実施態様を含む。
（１）物理記憶スペースを規定する複数の記憶ディスクを含む階層的なデータ記憶システムにおいて、保留された量の不使用の記憶スペースを使用する方法であって、
第１のRAIDレベルに従ってデータを格納する第１の割当てブロックを有する複数の第１のRAID領域及び第２のRAIDレベルに従ってデータを格納する第２の割当てブロックを有する複数の第２のRAID領域を有するRAIDレベルの仮想記憶スペースに、上記記憶スペースをマップするステップと、
上記RAIDレベルの仮想記憶スペース内で,保留された量の不使用の記憶スペースを用意するステップと、
複数の仮想ブロックを有するアプリケーション・レベルの仮想記憶スペースに上記RAIDレベルの仮想記憶スペースをマップするステップと、
上記第１又は第２のRAIDレベルの一つに従って格納されたデータを、上記第１又は第２のRAIDレベルの他方に従って格納するために、第１の使用された割当てブロックから第２の使用された割当てブロックにデータを移行するステップと、
データ記憶システムにおいて、Ｎ個の記憶ディスクを提供するステップと、
複数のN-1の最大の可能なRAID領域に格納される少なくとも１つの仮想ブロックに等しい保留された不使用の記憶スペースを提供するステップと、
を含み、上記移行によって、上記第２の割当てブロックが使用され、上記第１の割当てブロックが不使用になり、不使用の記憶スペースが保存される上記方法。
【００７４】
（２）物理記憶スペースを規定する複数の記憶ディスクを含む階層的なデータ記憶システムで、保留された記憶スペースを使用する方法であって、
ミラー冗長に従ってデータを格納するミラー割当てブロックを有するミラーRAID領域、パリティ冗長に従ってデータを格納するパリティ割当てブロックを有するパリティRAID領域及びデータを含まない不使用のRAID領域を有するRAIDレベルの仮想記憶スペースに上記物理記憶スペースをマップするステップと、
記憶ディスクを横切って分布することができる、RAIDレベルの仮想記憶スペース内の保留された最小限の量の不使用の記憶スペースを提供するステップと、
複数の仮想ブロックを有するアプリケーション・レベルの仮想記憶スペースにRAIDレベルの仮想記憶スペースをマップするステップと、
使用可能なミラー割当てブロックを見つけようと試みるステップと、
使用可能なミラー割当てブロックが見つけられている場合、データをミラー割当てブロックに書き込むステップと、
使用可能なミラー割当てブロックが見つけられていない場合、データを受け取るために以下の付加的なステップ：
ａ．不使用のRAID領域を見つけ、それを使用可能なミラー割当てブロックを含むミラーRAID領域に変換するステップ；
ｂ．空のミラー割当てブロックやパリティ割当てブロックをミラーRAID領域を生成するために使われる不使用RAID領域に集めるステップと；
ｃ．ミラー割当てブロックからパリティ割当てブロックにデータを移行し、不使用のRAID領域にミラー割当てブロックを集めるステップ；
の少なくとも１つを行うことによって、使用可能なミラー割当てブロックを生成するステップと、
を含む上記方法。
【００７５】
（３）上記（２）の方法において、使用可能なミラー割当てブロックを生成する上記ステップが、使用可能なミラー割当てブロックが生成されるまで以下のステップ：
ａ．不使用のRAID領域を見つけ、それを使用可能なミラー割当てブロックを含むミラーRAID領域に変換するステップ；
ｂ．空のパリティ割当てブロックを不使用のRAID領域に集めて、不使用のRAID領域を、使用可能なミラー割当てブロックを含むミラーRAID領域に変換するステップ：
ｃ．不使用のRAID領域が生成されるまで、以下のステップ（ａ）及び（ｂ）を実行し、その後ステップ（ｃ）を実行するステップ：
（ａ）ミラー割当てブロックを空にするために、ミラー割当てブロックからパリティ割当てブロックにデータを変換するステップ；
（ｂ）空のミラー割当てブロックを不使用のRAID領域に集めるステップ；
（ｃ）上記（ａ）及び上記（ｂ）の後に、不使用のRAID領域をパリティRAID領域に変換するステップ；
保留された不使用の記憶スペースの量を侵すことなくミラーRAID領域に変換できる不使用のRAID領域が生成されるまで、上記ｃ（ａ）からｃ（ｃ）を繰り返す；
を連続した順に含む方法。
【００７６】
（４）物理記憶スペースを規定する複数の記憶スペースを含む階層的なデータ記憶システムにおいて、不使用の保留された記憶スペースの保留された量を使用する方法であって、
第１のRAIDレベルに従ってデータを格納する第１の割当てブロックを有する複数の第１のRAID領域及び第２のRAIDレベルに従ってデータを格納する第２の割当てブロックを有する第２のRAID領域を備えたRAIDレベルの仮想記憶スペースに物理記憶領域をマップするステップと、
記憶ディスクを横切って分布できるRAIDレベル仮想記憶スペース内で、最小限の不使用の割当てブロックの数を提供するステップと、
複数の仮想ブロックを有するアプリケーション・レベルの仮想記憶スペースにRAIDレベルの仮想記憶スペースをマップするステップと、
第１又は第２のRAIDレベルの一つに従って格納されたデータが、第１又は第２のRAIDレベルの他方に従って格納されるように、第１及び第２の割当てブロック間でデータを移行させるステップと、
部分的にデータで満たされた第１又は第２のRAIDレベルを見つけるステップと、
上記見つけられたRAID領域から不使用の割当てブロックにデータを移すことによって、上記見つけられたRAID領域を空にするステップと、
を含む上記方法。
【００７７】
（５）上記（４）の方法において、さらに、
データ記憶システムでＮ個の記憶ディスクを準備するステップと、
N-1重の最大の可能なRAID領域に格納できる少なくともいくらかの仮想ブロックと同量の保留された不使用の記憶スペースを準備するステップと、
を含む上記方法。
（６）上記（４）の方法において、上記RAID領域を見つけるステップが、少なくともそこに格納されたデータ量を含む第１又は第２のRAID領域を見つけることを含む、上記方法。
（７）上記（４）の方法において、さらに、全RAID領域から空になったRAID領域にデータを書き換える付加的なステップを含む、上記方法。
（８）上記（４）の方法において、さらに、空になったRAID領域をミラー又はパリティRAID領域の１つに変換する付加的なステップを含む、上記方法。
（９）上記（４）の方法において、上記最小限の不使用の割当てブロックを準備するステップが、上記第１及び第２のRAID領域の両方に不使用の割当てブロックを準備することを含み、上記見つけられたRAID領域を空にするステップが、上記第１のRAIDレベルの第１のRAID領域と上記第２のRAIDレベルの第２のRAID領域の両方で、見つけられたRAID領域から不使用の割当てブロックにデータを移動させることを含む、上記方法。
【００７８】
【発明の効果】
本発明によると、冗長性をもつ階層的なデータ記憶システムにおいて、保留された不連続な不使用の記憶スペースを使用することができる。
【図面の簡単な説明】
【図１】本発明によるディスク・アレイ・データ記憶システムの図表のブロック図である。
【図２】複数の記憶ディスク上の記憶スペースを示す図表で、RAIDレベル1によ るデータ記憶を示す。
【図３】複数の記憶ディスク上の記憶スペースを示す図表で、RAIDレベル５によるデータ記憶を示す。
【図４】2つの仮想記憶スペースが物理的な記憶スペースの上へマップされてい る、この発明のメモリーマッピング取り決めの図表である。
【図５】本発明の概括的な好ましい方法の流れ図である。
【図６】複数の記憶ディスク上の記憶スペースを示す図であり、不連続な不使用の記憶スペースが１以上のRAID領域の大きさと如何に同等であるかを説明している。
【図７】ミラー割当てブロックを生成するための、保留された量の不使用の記憶スペースを使用するためのもう１つの好ましい方法の流れ図である。
【図８】ミラー割当てブロックを生成するために用いられる特定の技法の流れ図であり、ガーベジ・コレクション技法を含んでいる。
【図９】複数の記憶ディスク上の記憶スペースを示す図であり、図８のガーベジ・コレクション技法を説明している。
【図１０】部分的に満たされたRAID領域を空にするブートストラッピング技法で、保留された量の不使用の記憶スペースを使用するもう１つの好ましい方法の流れ図である。
【図１１】複数の記憶ディスク上の記憶スペースを示す図であり、図１０のブートストラッピング技法を説明している。
【符号の説明】
１０        データ記憶システム
１１        ディスク・アレイ
１２        記憶ディスク
１３        インターフェイス・バス
１４        ディスク・アレイ・コントローラ
１８        ミラー・グループ
２２        パリティ・グループ
【図１】
0003778980.tif 000003
【図２】
0003778980.tif 000004
【図３】
0003778980.tif 000005
【図４】
0003778980.tif 000006
【図５】
0003778980.tif 000007
【図６】
0003778980.tif 000008
【図７】
0003778980.tif 000009
【図８】
0003778980.tif 000010
【図９】
0003778980.tif 000011
【図１０】
0003778980.tif 000012
【図１１】
0003778980.tif 000013