(57)【要約】      （修正有）【課題】データ信頼度を維持し、故障したディスクの論理的な削除を可能にし、データの移動または復元またはパリティの再計算を実行するため、計算とディスクへのアクセスを最小限にする方法およびシステムを提供する。【解決手段】ディスクの故障時(210)、記憶システムは、割り当てられたデータを含むディスクブロックのみを移動し、可能なとき、未割り当てのディスクブロックを論理的に０として扱う。予備ディスクが無いとき、ソースディスクブロックは論理的に０に設定され、ソースディスクブロックに関係するRAIDストライプに対してパリティを再計算する(223)。予備があるとき、予備上の未割り当てのブロックは移動時に論理的又は物理的に０に設定される(222)。故障ディスクへの書き込み動作は他の非故障ディスクに再指示され、使用ディスクでのその記録はこれらの他の非故障ディスクへ移動され維持される。【選択図】図２
2008269638.tif 000002
【特許請求の範囲】
【請求項１】
ディスクアレイシステムの操作方法で、前記ディスクアレイシステムが複数のディスク間にストライプ状にデータを記憶し、各ストライプが複数のデータブロックから成る、方法であって、
故障したディスクに記憶されているデータブロックに対して該データブロックを含むストライプに記憶されている冗長情報を用い、データをディスクアレイシステムにより復元すること、
復元されたデータを故障していないディスク上のデータブロックへディスクアレイシステムにより移動すること、
復元されたデータが移動されたことを示すためにストライプマップにエントリをディスクアレイシステムによりマークすることであって、ストライプマップが故障したディスク上のデータブロックを有する各ストライプに対するエントリから成り、ストライプマップの各エントリがマークされている場合に故障したディスクをディスクアレイから論理的に削除すること、及び
復元されたデータが移動されたので故障したディスクのデータブロックが論理的にクリアされたということを示すために、ゼロマップにエントリをディスクアレイシステムによりマークすることであって、ゼロマップが故障したディスク上の各データブロックに対するエントリから成り、データブロックに対してゼロマップのエントリがマークされている場合にデータブロックが復元時に排除されること
から成る方法。
【請求項２】
更に、
データブロックが使用に割り当てられたことを示すためにブロックマップにディスクアレイシステムによりマークすること、
故障したディスク上の割り当てされていないデータブロックに対してデータを復元する替わりに故障していないディスク上のデータブロックに０をディスクアレイシステムにより書き込むこと、及び
前記割り当てされていないデータブロックに対してゼロマップにエントリをディスクアレイシステムによりマークすること
から成る請求項１記載の方法。
【請求項３】
更に、
ストライプのデータブロックに対してゼロマップのエントリに基づきストライプに対するパリティ情報をどのように再計算するかをディスクアレイシステムにより決定すること
から成る請求項１記載の方法。
【請求項４】
ディスクアレイに結合され、前記ディスクアレイが複数のディスク間にストライプとしてデータを記憶し、各ストライプが複数のデータブロックから成る、装置であって、
バスを介してメモリに接続されたプロセッサであって、故障したディスクに記憶されているデータブロックに対して該データブロックを含むストライプに記憶されている冗長情報を用いデータを復元するように動作し、更に復元されたデータを故障していないディスク上のデータブロックへ移動するように動作するプロセッサ、
メモリに記憶され故障したディスク上のデータブロックを有する各ストライプに対するエントリから成るストライプマップであって、プロセッサが復元されたデータの移動されたことを示すためにストライプマップのデータブロックに対してエントリをマークし、ストライプマップの各エントリがマークされている場合に故障したディスクをディスクアレイから論理的に削除するもの、
メモリに記憶され、故障したディスク上の各データブロックに対するエントリから成るゼロマップであって、復元されたデータが移動されたので故障したディスクのデータブロックのデータが論理的にクリアされたということを示すために、データブロックに対してエントリをプロセッサがマークし、データブロックに対してゼロマップのエントリがマークされている場合にデータブロックが復元時に排除されるもの
から成る装置。
【請求項５】
更に、
メモリに記憶され、データブロックが使用に割り当てられたことを示すためにプロセッサによりエントリがマークされるブロックマップであって、故障したディスク上の割り当てされていないデータブロックに対してデータを復元する替わりに故障していないディスク上のデータブロックに０を書き込み、かつ前記割り当てされていないブロックに対してゼロマップにエントリをマークするようにプロセッサが動作するもの
から成る請求項４記載の装置。
【請求項６】
更に、
ストライプのデータブロックに対してゼロマップのエントリに基づきストライプに対するパリティ情報をどのように再計算するかを決定するようにプロセッサが動作する
請求項４記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の背景
[発明の分野]
この発明は、RAIDデータの復元および移動におけるファイルシステム情報を使用することに関する。
【０００２】
[関連する技術]
コンピューターシステムで大量記憶装置を維持する既知の１つの方法はRAID(「安価なディスクによる冗長アレイ」)と呼ばれる。RAID記憶装置はディスクのグループを含み、それの少なくとも一部は、データを記憶するために用いられ、それの少なくとも一部は、前記データに関係するパリティ情報を記憶するために用いられ、そのデータおよびパリティは、複数のディスクにわたって分配される。これは、ディスクブロック(それらはデータまたはパリティを記憶する)のうちの１つが故障した場合、あるいは全ディスクが故障した場合。RAID記憶システムがオリジナルのデータを(記憶されたデータの残りから、およびパリティ情報から)復元することを可能にする。データとパリティは、RAIDストライプと呼ばれるディスクブロックの組で互いに関係している。
【０００３】
RAID記憶に関する既知の１つの問題は、駆動が失敗した場合、RAID記憶システムは、もはや同じ程度の冗長を持っておらず、同じ程度の冗長を維持することが望まれるなら、調整されなければならないということである。すなわち、RAID記憶システムは、データの損失なしに後の第２のディスク失敗を許可するが望ましい。しかし、RAIDストライプで２つの別個に失敗したディスクに対してデータを復元することは可能ではない。同じ程度の冗長を維持するために、RAID記憶システムは、故障したディスクからのデータを修復する予備のディスクを持つか、あるいは(適切な利用可能なスペースがある場合)、故障したディスクから他のディスクへデータを移動する。後の場合では、各RAIDストライプに関連したパリティは、割り当てられたデータの移動に応じて調節されなければならない。しかしながら、データの復元およびパリティの再計算は、ディスクドライブに対して実質的にリードおよびライトの動作を含んでおり、また、ディスクへのアクセス数および、ディスクと残りのコンピューターシステムとの間でやりとりされる転送データの容量を最小限にすることが有利になる。
【０００４】
従って、データ信頼度を維持し、故障したディスクの論理的な削除を可能にし、又、データ移動か復元、あるいはパリティ調節を実行するために、計算とディスクへのアクセスの容量を最小限にする記憶システム(それはRAID記憶システムあるいは別のタイプの記憶システムであってもよい)を提供することが有利である。これらの利点および他のものは、ファイルシステムによって維持された情報(どのディスクブロックが実際に、記録している記憶データを使用中であるかの情報を含む)が、データの復元および移動およびパリティの再計算で使用される、この発明の実施例で提供される。計算およびディスク・アクセスを最小限にする、この発明の利点も、ソースから目標記憶システムへ全体の記憶容量を反映すると共に、記憶システムの正常な動作で使用することができる。
【０００５】
[発明の概要]
この発明は、データ信頼度を維持し、故障したディスクの論理的な削除を可能にし、データの移動または復元またはパリティの再計算を実行するため、計算とディスクへのアクセスを最小限にする、方法およびシステムを提供する。好ましい実施例では、データの復元および移動、およびパリティの再計算を実行する場合、この記憶システムは、本質的に単に割り当てられたディスクブロックに関する情報を用い、前もって定義した値(例えば０)にセットされた未割り当てのディスクブロックを無視する。ディスクの故障においては、この記憶システムは、故障したディスク上のそれらのディスクブロックのみを移動し、割り当てられていないディスクブロックを、可能な場合、論理上０であるとして扱う。
【０００６】
この発明の態様では、ファイルシステムによって維持された情報が、どのディスクブロックが故障したディスクに実際に割り当てられているか識別する。RAIDグループ中のディスクは、予備のディスクがある場合、あるいは予備のディスクがない場合のどちらかで故障するかもしれない。ディスクブロックが故障したディスクから移動されることになっているが、予備のディスクが無い場合、それらのディスクブロックは、故障したディスクからRAIDグループ中の他の故障の無いディスクへ移動され、その結果、RAIDグループ中のディスクの数を低減する。それらのディスクブロックが移動された時(すなわち、データが復元され、目標ディスクブロックへコピーされる)、ソースのディスクブロックは、論理的に０にセットされ、そして、ソースのディスクブロックに関連したRAIDストライプのために再計算される。一旦故障したディスクからの割り当てられたディスクブロックがすべて移動されると、故障したディスクは論理的にRAIDグループから取り除くことができる。ディスクブロックが、故障したディスクから予備のディスクに移動されることになっている場合、予備のディスク上の未割り当てのブロックが、移動時に論理的あるいは物理的に選択された値(０)へセットされることを除き、これらのディスクブロックは、同様に移動される。
【０００７】
この発明の態様では、他の非故障のディスクへの書き込み動作(これは故障したディスク上のディスクブロックのために意図されている)を再指示することにより、ファイルシステムが積極的にRAID記憶システムを支援する。このファイルシステムは、使用のディスクブロックが、他の故障の無いディスクに、このように"移動"された記録をも維持し、その結果、故障したディスク上で本来維持されていた、記憶データがいつ完全に移動されたかの指標を提供する。ディスクへの書き込み時、書き込み時のみならず、後の回の書き込み時の双方で、パリティ再計算の容量を最小限にするために、ファイルシステムは率先して、未使用のディスクブロックを選択された値(０)にセットする。好ましい実施例では、ファイルシステムは、少なくとも次の場合に未使用のディスクブロックを０にセットする：
(１) 新しいディスクがRAIDグループに加えられる場合
(２) 未使用のディスクブロックを含んでいるRAIDストライプが書き込まれる場合
好ましい実施例では、ファイルシステムが「一貫性ポイント」を維持し、そのポイントでは、記憶データは、自己矛盾の無いことが保証され、ディスクに一貫性ポイントをライトする場合
【０００８】
この発明の態様では、RAID記憶システムは、(RAIDレベル5のような)技術(パリティブロックが異なるディスク上で見つけられる)を使用してもよい。それらのディスクのうちの１つが故障した場合、ファイルシステムは故障したディスクについてのパリティ情報に関連したRAIDストライプを識別し、そして、ディスクブロックの全セットを、それらのストライプから他のディスクへ移動し、それにより、故障のないディスク上でそれらの全ストライプのためのパリティ情報を維持する。
【０００９】
この発明の態様では、記憶システムは、RAID記憶システムによって実行された動作を改善するために、割り当てられたディスクブロックに関する情報を用いる。記憶システムは、１つのいずれかのRAIDストライプをいつ書き込むか、また、どのディスクブロックが割り当てられるかに応答して、減算により、または再計算により、パリティを計算することがより効率的であるかを決定する。
【００１０】
この発明の態様では、記憶ボリュームの目標ミラーコピーは、割り当てられたディスクブロックに関するファイルシステム情報を用い、割り当てられたデータを含むブロック、およびパリティを含むブロックをコピー(ミラーコピーに)することにより、および、あらゆる割り当てられたデータあるいはパリティを含まないブロックを(ミラーコピーで)取り除くことにより、作成することができる。その目標記憶ボリュームは、このようにどんなパリティ再計算も要求せずに、ソース記憶ボリュームに応じて構築することができる。
【００１１】
この発明は、データが多数のデバイス上で維持され、また、少なくとも、これらの多数のデバイスに記録された少なくともいくつかの情報(例えば、ファイルシステムの一部でなく、又は、キャッシュから立ち退かせることができるキャッシュ化のオブジェクト)を放棄できる、ファイルシステムおよび記憶システムに対して一般的な適用可能性を持つ。これらの適用のいずれも、一貫性ポイントを維持するファイルシステムに特に制限されず、また、それらがRAID記憶システムに特に制限されず、それらがそうでなければ、ここに示された特定の適用に関係するシステムに制限される、ということもない。
【００１２】
[好ましい実施例の詳細な説明]
この記述では、好ましいプロセス・ステップおよびデータ構造を含む、この発明の好ましい実施例が記述される。当業者なら、この明細書の熟読後に、不適当な実験または別の発明を用いることなくこの発明の実施例が、特に記述していない様々な他の技術を使用して実行でき、また、そのような他の技術もこの発明の範囲または本旨内にあることが理解されるであろう。
【００１３】
[用語集]
次の用語はこの発明あるいはその実施例の態様に関するか、参照する。これらの用語の各々の一般的な意味は、例示されるために意図されたものであり、全く限定するものではない。
【００１４】
・一貫性ポイント(consistency point)：一般に、これは、自己矛盾がなく、したがって一貫性ポイント内のデータへの参照がファイルシステム・エラーに帰着するだろうという心配のないディスク上に保存することができるファイルシステムによって維持されたデータの確認可能なセットに関する。そのフレーズ「一貫性ポイント」は、原子的に自己矛盾がないものと同様に、最近の変化に対して専門誌への記述によって保証された首尾一貫を有する、ファイルシステムを十分に広くカバーするよう意図される。
・ディスクブロック(disk block)：一般に、これは、データを記憶することができる大量記憶システムの割り当て可能部分を指す。そのフレーズ「ディスクブロック」は、量子化されているか、否かのディスク上の割り当て可能なスペースを十分に広くカバーするように意図されている。
・ファイルシステム(file system)：一般に、これは、大量記憶に維持された、名前付けスキーマおよびファイルデータの間の関係を維持するシステムを含む、記憶システム上でディスクブロックを直接管理するすべての適用を指す。このフレーズ「ファイルシステム」は、ディスクに直接読み書きするシステム、および異なるサブシステムあるいはオペレーティング・システムの他の部分がディスクに読み書きすることを可能にするシステムの両方を含む、ファイルシステムの変形を広くカバーするに十分なように意図される。
・記憶システム(storage system)：一般に、データを記憶するためのシステムは、例えば、RAIDアレイで整えられた１セットの１枚以上のディスクである。この記憶システムは、１つ以上のボリュームに分配でき、その各々は記憶システムのように作用する。このフレーズ「記憶システム」および「ボリューム」あるいは、「記憶ボリューム」は取り替えて用いることができる。
・ディスクブロックの移動(migration of disk blocks)：一般に、これは、失われたディスクブロックからのデータを、故障の無い(それ故、利用可能な)ディスクのような大量記憶システムへコピーするか復元するためのいずれかの技術を指す。
・パリティ再計算(parity recalculation)：一般に、これは、他の冗長情報と結合するか、しないかに拘わりなく、喪失後に記憶されたデータに応じて、パリティ情報あるいは他の冗長情報を回復するために任意の技術を指す。
・RAID グループ：一般に、これは、RAID記憶システムに含まれ、データの冗長を維持するためにRAID記憶システムによって用いられるディスクの組みを指す。いくつかのシステムは、それらのディスクを１つ以上のRAIDグループに分けるRAID記憶システムを含むことがある。
・RAID 記憶システム：一般に、これは、冗長情報の組み(恐らくパリティ情報、ハミングコード、あるいは、実際のデータのコピーのような他のある形式の冗長のごときもの)を含み、そして喪失に応じてデータ復元の可能性を提供する、大量記憶システム上でデータを維持するための任意の技術を指す。
・RAID ストライプ：一般に、これは、ディスクブロックと、冗長情報(喪失後に少なくともいくらかを回復することができるようにディスクブロックおよび余剰情報は相互依存する)の間の任意の関連を指す。
・復元(reconstruction)：一般に、これは、他の記憶されたデータと結合していてもしなくても、冗長情報に応じて、喪失後にデータを復元するために任意の技術を指す。
・ゼロマップ(zeromap)：一般に、これは、どのディスクブロックが論理的にあるいは物理的に０に設定されたかを示す登録部の組みを有するテーブルを指す。
・ストライプマップ(stripemap)：一般に、これは、どのRAIDストライプが故障したディスクから移動されたのかを示す登録部の組みを有するテーブルを指す。
【００１５】
この発明の範囲および趣旨は、これらのいずれの定義に対して、およびここで述べる特定の実施例に対して限定されず、これらおよび他の用語によって具体化された最も一般的な概念を含むように意図される。
【００１６】
[システムの要素]
図１は、RAIDデータの復元でファイルシステム情報を用いることを含むファイルシステムおよびRAID記憶システムのブロック図を示す。
【００１７】
システム100はファイルシステム120、記憶システム140およびこれらの２つの間の通信リンク160を含む。そのシステムは、さらにファイルシステム120の実行のためにプロセッサー(示されていない)とプログラム及びデータのメモリ(示されていない)を含む。
【００１８】
このファイルシステム120は、記憶システム140内にディスクブロック(個別かそれのグループ)に関する情報を示す組みのファイルシステム情報テーブル121を含む。記憶システム140によってデータが失われた場合であっても、それらのファイルシステム情報テーブル121が、ファイルシステム120にアクセス可能である限り、ファイルシステム情報テーブル121は、メモリに記録されることができるか、あるいは記憶システム140の選択された部分に記録されることができ、あるいはそれ以外(不揮発性のメモリあるいは他の補助記憶装置のごとく)に記憶できる。ファイルシステム情報テーブル121中の特別の情報はさらに下に記述される。
【００１９】
その記憶システム140は、ディスク141の組みを含み、それらの各々は、(少なくともいくつかのでティスク・ブロック142に記憶された)データを含むディスクブロック142の組みを含み、そのティスク・ブロック142は、(少なくともいくつかのディスクブロック142に記憶された)少なくともいくつかの冗長情報を含むRAIDストライプのセットに配置される。任意の個々のディスク141上の任意の個々のディスクブロック142上の情報が、他のディスク141上の他のディスクブロック142上の情報に関係するように、RAIDストライプ143が配置される。これは、任意のディスクブロック142あるいは全ディスク141の損失であっても、任意の個々のディスクブロック142についての情報が復元されるか再計算されることを可能にする。RAID記憶システムは大量記憶システムの分野で周知である。
【００２０】
通信リンク160はファイルシステム120および記憶システム140を連結し、ファイルシステム120および記憶システム140が、ディスクブロック142のために、およびシステム100の動作のために、情報を交換することができるすべての技術を含む。好ましい実施例では、通信リンク160は、ファイルシステム120および記憶システム140につながれたバスを含む。
【００２１】
ファイルシステム情報テーブル121は、セットのブロックマップ登録部123を有し、割り当てられたファイルシステム・データにより、どのディスクブロック142が使用中かを示す、ブロックマップテーブル121を含む。したがって、ブロックマップテーブル122は、各ディスク141上の各ディスクブロック142に対し、そのディスクブロック142がファイルシステム120により使用されているか(例えば論理値"1"が示されているか)、あるいはファイルシステム120により使用されていないか(例えば論理値"０"が示されているか)を示す。この記述の中で用いられたように、「割り当てられたファイルシステム・データ」は、ファイルシステム120によって維持されるかもしれないすべての一時的データ構造から区別され、その一時的データ構造は、恐らくオンのディスク要素を含んでいるかもしれない。割り当てられたファイルシステム・データも、好ましい「WAFL」ファイルシステム120に関する開示に記述されたような「スナップ写真」データのごとき、ファイルシステム120によって維持されるかもしれない、ファイルシステム・データのバックアップのコピーと区別される。
【００２２】
ファイルシステム情報テーブル121は、セットのゼロマップの登録部125を有し、どのディスクブロック142が論理的に又は物理的に０に設定されているかを示す、ゼロマップテーブル124を含む。
【００２３】
ファイルシステム情報テーブル121は、組みのストライプマップ登録部127を有し、どのRAIDストライプ143が故障したディスクから移動したかを示す、ストライプマップテーブル126を含む。RAIDストライプ143が故障したディスクについてのパリティ情報を含んでいた場合に、そのRAIDストライプ143が移動される、この発明の態様において、各ストライプマップの登録部127は、RAIDストライプ143全体からディスクブロック142が、移動されたかを示す(パリティ情報はそれ自身が移動されないため)。
【００２４】
[割り当てられたデータの移動]
ディスクブロック142中のデータが失われた(例えば、ディスクブロック142が感染した)場合、あるいは、ディスク141上のすべてのデータが失われた(例えば、ディスクが故障した)場合、記憶システム140は失われたデータを復元することができる。どんな割り当てられたデータも持たないようにブロックマップテーブル122で示されていた、ディスクブロック142が失われたとき、そのディスクブロック142に対してデータを復元する必要はない。したがって、個々のディスクブロック142のために、使用していない時にもし失われれば、記憶システム140は、いずれのデータも復元する必要がない。全ディスク141に対しては、もし失われれば、記憶システム140は単に、その時に使用されていたこれらのディスクブロック142に対してデータを復元しなければならない。
【００２５】
予備のディスクが無い場合、そのファイルシステム120は、割り当てられたディスクブロック142に対するデータを復元するように(つまり、ブロックマップテーブル122によって割り当てられるためにディスクブロック142が示される)、そして、ディスクに改造されたデータをコピーすることは、記憶システム140内の同じRAIDグループ中の他の故障の無いディスク141上のディスクブロック142に復元されたデータをコピーするように、記憶システム140に命令を出す。代替の実施例では、復元されたデータは記憶システム140における異なるRAIDグループで他の故障のないディスク141にコピーされてもよい。次に、ディスクブロック142は、その故障したディスク141に対して、もはや書き込まれず、そのため、ファイルシステム120は利用可能なVBN(仮想のブロック番号)スペース内の「穴」としてそれらを扱う。例えば、故障したディスクがディスク#1、#2、#3、#4、および#5(パリティ)の内のディスク#3であるなら、ディスク#1、#2、および#4に対するVBNsは、まだ有効であるが、ディスク#3に対するVBNsは無効になる。故障したディスク141からのデータのすべてを取り除いたとき、故障したディスク141をRAIDグループから論理的か物理的に取り除き、その結果、RAIDグループにおけるディスク141の数を１つ低減する。
【００２６】
当業者は、この明細書の熟読後に、データ復元の量を減少させるブロックマップテーブル122の使用は、同じ程度の故障の許容を維持する一方、記憶システム140が、仕事の量を最小にするということを認識するであろう。また、当業者は、この出願の熟読後に、過度の実験や新発明をすることなく、この技術を、既にRAIDおよび、コーベットまたは"EVENODD"のものなどのような複数の故障を許容するRAIDに似たシステムに適用できることを認めるであろう。また、より一般に、当業者はまた、この出願の熟読の後に、この技術を、過度の実験や新発明することなく、データかメタデータが配置されるべき固定された固定の位置を持っていないすべての記憶システムに適用できるということが認められるであろう。
【００２７】
故障したディスク141上のディスクブロック142に対するデータが移動された時、記憶システム140は、前記ディスクブロック142に対するデータを論理的にクリア(ゼロに設定)する。そのファイルシステム120は、対応するRAIDストライプ143のためのゼロマップの登録部125を設定する。その記憶システム140は、対応するRAIDストライプのためのパリティを再計算し、そして、再計算されたパリティを、対応するRAIDストライプ143内のパリティディスク141に書き込む。
【００２８】
予備ディスクがある場合、ファイルシステム120は、同様に、割り当てられたディスクブロック142からデータ移動するように記憶システム140に命令する。割り当てのないディスクブロック142に対して、記憶システム140は、別の故障の無いディスク141上の対応するディスクブロック142に書き込むが、割り当てられていないディスクブロック142からデータを復元することを試みない。好ましくは、記憶システム140は、非割り当てのディスクブロック142のための移動目標であるディスクブロック142を物理的にクリア(ゼロに設定)する。好ましい実施例では、ファイルシステム120は、ディスクが移動目標であるディスクブロック142を持つディスク141を指示するために、SCSI「同一に書き込む」コマンドを使用するように記憶システム140に命令する。これは、ディスク141による活動に対して、および、ファイルシステム120と記憶システム140の間の帯域幅について節約する。
【００２９】
そのストライプマップテーブル126は、それぞれのRAIDストライプ143のためのストライプマップ登録部127を含み、そのRAIDストライプ143に対して、RAIDストライプ143内の(故障ディスク141からの)ディスクブロック142が別の故障の無いディスク141に移動したどうかを示す。特定のディスクブロック142が故障ディスク141から故障のないディスク141に移動したことを、その対応するストライプマップ登録部127が示した時、記憶システム140は、以降のパリティ再計算の間の考察から、その特定のディスクブロック142を取り除くことができる。より正確には、その記憶システム140は、前記特定のストライプに、示されたディスクブロック142が一様に０である推定を書き込み時に、パリティを再計算する。すべてのディスクブロック142が故障ディスク141から他の故障のないディスク141に移動したことを、ストライプマップテーブル126が示した時、ファイルシステム120および記憶システム140は、故障したディスク141を全体で論理的に削除することができる。
【００３０】
[アクセス要求の再指示]
そのファイルシステム120は、故障したディスク141上のディスクブロック142にアクセスするための要求を再指示するに際して記憶システム140を支援する。好ましい実施例では、そのファイルシステム120は、(故障ディスク141ではない、いずれかのディスク141上の)ディスクブロック142へのすべての書き込み動作が、書き込み動作の目標である、ディスクブロック142からデータをコピーすることにより、そして、新たに変更されたコピーを指示するために、目標ディスクブロック142へのポインタを調整することにより実行される、コピー・オン・ライト技術を含む。好ましい実施例では、記憶ボリュームの一貫性ポイントを発生させるとき、これらの変更は一緒にグループ化される。 しかしながら、そのようなグループ化のためのどんな特定の要件もない。
【００３１】
ディスク141の故障、またはディスクブロック142が不正になった場合、ファイルシステム120は、失われた各ディスクブロック142が不正とマークされることを示すために、(不正ブロック登録部を持つ不正ブロックテーブルを含む)そのファイルシステム情報テーブルをマークする。最初の結果は、不正ディスクブロック142への書き込みのどんな試みも、コピー・オン・ライトの動作が実行されるべきことを生じさせる。２番目の結果は、次の一貫性ポイントまでに、ファイルシステム120がディスクに一貫性ポイントの書き込みの一部としてディスクブロック142のコピーを生成するということである。
【００３２】
失われたディスクブロック142に対するユーザーの要求が再指示されるので、また、ファイルシステム120が、次の一貫性ポイントまでに、ディスクブロック142のコピーを生成するので、記憶システム140は、ファイルシステム120からの命令を待つことができ、失われたディスクブロック142を積極的に復元することによって応答するね必要はない。
【００３３】
[ディスクブロックの事前のゼロ化]
ある場合には、ファイルシステム120は、記憶システム140に、ディスクブロック142全体を０に設定するように先を見越して命令を出し、 その結果、そのディスクブロック142を含むストライプに関連しているパリティ情報の簡単な「再計算」(または、「再計算」なし)を許容する。好ましい実施例では、上で説明したように、ファイルシステム120は、SCSIの「同一様に書き込む」コマンドを使用するように記憶システム140に命令する。
【００３４】
そのファイルシステム120は少なくとも以下の場合で全体のディスクブロックを０に設定する。
・新しいディスク141がRAIDグループに追加されるとき、それぞれのRAIDストライプ143は、その結果、１個のディスクのブロック142により広くされ、そして、そのような各ストライプのためのパリティは、その結果、新しいディスクブロック142のデータに応答する。いずれかのパリティ情報を再計算するよりも、むしろ、ファイルシステム120は、先を見越して、新しいディスクブロック141内のすべてのディスクブロック142を０に設定するよう、記憶システム140に命令し、その結果、パリティ情報が変化しないようにさせる。
パリティは好ましくは、RAIDストライプ143内のディスクブロック142内のすべてのデータの排他的論理和("XOR")としても知られている、サム・モジューロ２(sum modulo 2)として計算される。したがって、すべてゼロである新しいディスクブロック142を挿入することは、RAIDストライプ143内でパリティは変化しない。
【００３５】
・未割り当てのディスクブロック142(すなわち、ファイルシステム120によって「使用中であること」がマークされていないディスクブロック142)を含むRAIDストライプが書き込まれた時、ファイルシステム120は、それらのディスクブロックのデータを０に設定するように記憶システム140に先を見越して命令する。これは、ファイルシステム120、又は記憶システム140、又は、フライ・バイ XOR サブシステムのような、システム100のある他の要素のいずれかに対して、実行に依存して、未使用のディスクブロック142を読み出すことなく、前記ストライプに対するパリティ情報を計算することを許可する。未使用のディスクを読む必要性のないことは、記憶システム140によって実行される読み込み動作の数を減らし、また、ファイルシステム120と記憶システム140の間で使用される通信帯域幅の量を減少させる。
【００３６】
・ファイルシステム120が一貫性ポイントをディスクに書く準備ができたとき、一般に、それはディスク141上の比較的多数のディスクブロック142に書き込む。ファイルシステム120が、それらのディスクブロック142を全体のRAIDストライプ143にグループ化することを試み、そのため、書き込み動作は、可能な限りに効率的にでき、また、パリティ計算は、最小にできる(割り当てられたデータのブロック142に対するオーバヘッド操作として見たとき)。RAIDストライプ143に書き込むとき、ファイルシステム120は、一貫性ポイントの一部でない(また、従ってファイルシステム120によって未割り当てであるとマークされる)RAIDストライプ内のそれらのディスクブロック142をクリアにするように記憶システム140に命令する。これは、それらのディスクブロック142を読むことなく、パリティ計算を進めることができる。
【００３７】
[パリティの効率的な計算] 
この発明の態様では、ディスクブロック142により実行された動作は、目標のRAIDストライプ143内のディスクブロック142に対するゼロマップテーブル125に応答する。それらにゼロマップテーブル125に応答して、ファイルシステム120は目標のRAIDストライプ143内の０でないディスクブロックの個数を計数できる。このことは、ファイルシステム120か記憶システム140が、いずれかのRAIDストライプ143にいつ書き込むか、引き算でパリティを計算するか、または再計算でパリティを計算するのが、より効率的であるかを決定することを可能にする。
【００３８】
その記憶システム140は引き算でパリティを計算することができ、すなわち、ディスクブロック142をディスク141に書き込むとき、記憶システム140は、(そのRAIDストライプ143のために)関連したパリティからディスクブロック142内の古いデータを引き算することができ、そして、そのディスクブロック142に書き込まれるべき新しいデータを、関連するパリティに加算することができる。引き算と足し算の両方は、操作法２(bitwise modulo two)が実行される。引き算でパリティを計算することは、RAID記憶システムの分野で周知である。代わりに、そのRAIDストライプ143のためのすべてのディスクブロック142を加えることによって(modulo two)、記憶システム140はパリティ情報について再計算することができる。
【００３９】
組のディスクブロック142をディスク141に書き込むとき、そのファイルシステム120は、引き算でパリティを計算するのが、より少ないディスク動作を必要とするだろうかどうか、または全体のRAIDストライプ143からパリティを再計算するのが、より少ないディスク動作を必要とするかどうかを決定する。ファイルシステム120はゼロマップテーブル124からそれを決定することができ、それは、RAIDストライプ内の十分なディスクブロックがゼロであるかどうか決定することができて、したがって、パリティ情報全体を計算することから免除されることができる。RAIDシステムが(ゼロマップで示されるように)以前に０でないなら、RAIDシステムは、単にストライプ143内の０が割り当てられていないブロックである。これは、おそらくストライプ内の割り当てられていない、非WAFLファイルシステムに対して特に有用である。
【００４０】
[喪失パリティへの移動]
RAIDレベル4システムでは、パリティは、記憶システム140内の単一のディスク141上に保持される。つまり、すべてのRAIDストライプは、「パリティディスク」と参照される、同じディスク141上にそれらのパリティを持つ。RAIDレベル5システムでは、パリティは、記憶システム140内の複数のディスク141を横切って分配される。つまり、それぞれのRAIDストライプは、異なったディスク141上にそのパリティを持ち、そのため、単一のいかなる「パリティディスク」も存在しない。
【００４１】
RAIDレベル5システムのディスク141が故障したなら、故障ディスク141を使用しているこれらのRAIDストライプは、それらのパリティに対して、パリティブロックを持たず、したがって、それらの残っているディスクブロック142の１つ以上がデータを失うなら、情報を喪失する結果となる。ファイルシステム120は、それらのRAIDストライプに対するディスクブロック142が「不正」とマークし、一貫性ポイントがディスクに書かれる次回、それらのディスクブロック142は、有効なパリティブロックを持つRAIDストライプ143内の同一、または、他のディスク上で異なった位置に書かれる。結果、RAIDストライプ143内のパリティが失われたディスクブロック142は、他のRAIDストライプ143(必ずしもすべてが同じRAIDストライプ143ではない)内の、利用できるパリティブロックを持つディスクブロック142に書き込まれる。
【００４２】
[実施方法]
図２は、RAIDデータ復元にファイルシステム情報を使用することを含む方法に関するプロセスフローチャートを示す。
【００４３】
方法200はシステム1OOによって実行される。 その方法200は、順次説明されるが、その方法200のフローポイントとステップは、別々の要素により、同期か非同期によって、連係して、または平行に、パイプライン方法またはそれ以外で実行される。この方法200は、特に示した点を除き、この記述リストのフローまたはステップと同じ順序で実行しなければならないという特定の要求はない。
【００４４】
[割り当てられたデータの移動]
フローのポイント210では、システム100は故障したディスク141を検出する。
【００４５】
ステップ211にて、ファイルシステム120は、いずれかのRAIDストライプ143からのディスクブロック142が故障ディスク141からまだ移動していないことを示すストライプマップテーブル126をマークする。また、ファイルシステム120は、故障したディスク141の上のすべてのディスクブロック142が不正ブロックとして扱われるのを示すために不正ブロックテーブルをマークする。この方法200では、第１のRAIDストライプ143は故障したディスク141の上のRAIDストライプを参照する。第２のRAIDストライプ143は、予備上のまたは、他の故障のないディスクの上のRAIDストライプを参照する。
【００４６】
ステップ212では、ファイルシステム120は、故障したディスク141上のディスクブロック142の１つにアクセスするユーザーの要求を受け取る。ユーザーの要求がファイルデータかメタデータのどちらかを含む割り当てられたデータに単に適用できるので、この方法200は、フローのポイント220でディスクブロック142からデータを復元する。
【００４７】
フローのポイント220では、この方法200は故障したディスク141上のディスクブロック142からデータを復元する準備ができている。
【００４８】
ステップ221では、記憶システム140は、予備ディスク141があるかどうか決定する。ある場合、この方法200は、ステップ222へ進む。そうでない場合、この方法200は、ステップ223へ進む。
【００４９】
(予備ディスク141がある場合) ステップ222にて、記憶システム140は、ディスクブロック142に関係する第１のRAIDストライプ143を、予備ディスク141に移動させ、そして、この方法は、フローのポイント230に対して進む。このステップを実行するため、この記憶システム140は、次のサブステップを実行する。
【００５０】
・サブステップ222aにて、記憶システム140はディスクブロック142からデータを復元する。その記憶システム140は、第１のRAIDストライプ143から、他のディスクブロック142、およびパリティブロックを使用する。しかしながら、記憶システム140は、第１のRAIDストライプ143内のこれらのディスクブロック142を無視でき、そのディスクブロック142対して、関連するゼロマップ登録部125は、ディスクブロック142が一様に０であることを示す。
【００５１】
・サブステップ222bでは、記憶システム140は、RAIDストライプ143からのデータを、予備ディスク141上の第２の目標のRAIDストライプ143にコピーする。 しかしながら、記憶システム140は、どれかを決定するために、関連したブロックマップ登録部123を用いて、割り当てられていないそれらのディスクブロック142をコピーしない。記憶システム140は、SCSI「同様に書き込む」コマンドを使用して、第２の目標のRAIDストライプ143内のそれらの未割り当てのブロックマップ登録部123のために、これらのディスクブロック142を先を見越してクリアする。その記憶システム140は、それらのディスクブロック142の先を見越したクリア化に応答してパリティを再計算する。
【００５２】
・サブステップ222cでは、ファイルシステム120は、第１のRAIDストライプ143が全体的に予備ディスク141へ移動したことを示すために、対応するストライプマップ登録部127をマークする。
【００５３】
(予備ディスク141が無い場合) ステップ223にて、記憶システム140は、ディスクブロック142内のデータを、故障したディスク141から別の非故障のディスク141へ移動し、そして、この方法200は、フローのポイント213に対して進む。このステップを実行するために、記憶システム140は以下のサブステップを実行する。
【００５４】
・サブステップ223aにて、記憶システム140はディスクブロック142からデータを復元する。その記憶システム140は、他のディスクブロック142からのデータ、および第１のRAIDストライプ143からのパリティブロックを使用する。しかしながら、記憶システム140は、第１のRAIDストライプ143内のそれらのディスクブロック142を無視することができ、そのディスクブロック142に対して、関係するゼロマップ登録部125は、ディスクブロック142が一様に０であることを示す。
【００５５】
・サブステップ223bでは、記憶システム140は新たに割り当てられたディスクブロック142にデータをコピーする。故障したディスクブロック142が現在、論理的に０であると推定して、記憶システム140は、元の第１のRAIDストライプ143に対してパリティを再計算する。
【００５６】
・サブステップ223cにて、ディスクブロック142からのデータが非故障のディスク141に移動したことを示すために、ファイルシステム120は、ディスクブロック142に関係する第１のRAIDストライプ143に対する対応するストライプマップ登録部127をマークする。そのディスクブロック142が現在論理的に０であることを示すために、そのファイルシステム120は、故障したディスクブロック142のために、対応するゼロマップ登録部125をマークする。
【００５７】
フローのポイント230では、故障したディスクブロック142または全体の最初のRAIDストライプ143の移動が完了する。故障したディスク141からのすべての割り当てられたディスクブロック142が、予備ディスク141、または、他の非故障のディスク141に移動されるまで移動を繰り返す。
【００５８】
[パリティの再計算無しのミラーリング]
図３はパリティについて再計算しないでミラーリング(反映化)ができるシステムのブロックダイアグラムを示す。
【００５９】
記憶ボリューム(「ボリューム」は「システム」と同義語として時々ここで使用される)のミラーコピーを再確立(または最初に確立)するとき、上で説明されたように、目標の記憶ボリューム(ミラー記憶ボリュームとも呼ばれる)は、これらの割り当てられていないブロックが書き込まれたとき、目標の記憶ボリュームでの未割り当てのブロックがゼロに設定されるのを保証することによって、ソース記憶ボリュームから計算されたパリティを使用することができる。
【００６０】
パリティを再演算することなく、ミラーリングできるシステム300は、図１に関連して述べたシステム100および記憶システム140に似たソース記憶システム305を含むソースシステム301と、また図１に関連にて述べたシステム100およびシステム140を含む目標(又はミラー)システム310を含む。 ソースス記憶システム305は、ディスクブロック331を含むソースRAIDストライプ330の組みを含み、目標記憶システム320は同様にディスクブロック341を含む目標RAIDストライプ340を含む。そのRAIDストライプ340は、ソースRAIDストライプ330に似るか、好ましくは論理的に同じである。
【００６１】
ソースシステム301と目標システム310は、通信リンク350を使用することで結合される。都合のよい実施例では、通信リンク350はファイバーチャンネルかSAN(ストレージ・エリア・ネットワーク)を含む。他の実施例では、通信リンク350は、LAN(ローカル・エリア・ネットワーク)、WAN(広域ネットワーク)、またはインターネット接続などのように、それらの何らかの組み合わせを含むことができる。当業者は、通信リンク350はデータをソースシステム301から目標システム310に送るためのどんなテクニックも含んでもよく、そして、ここで述べた特定の実施例による何らかの方法に限定されないことを認識するであろう。
【００６２】
そのソースRAIDストライプ330は、割り当てられたブロック334の組み、少なくとも１つの未割り当てのブロック332およびパリティブロック333の組みを含む。
【００６３】
ソース記憶システム305と目標記憶システム320とのミラーの関係を再確立(又は最初に確立)するとき、そのソースシステム301は、目標システム310へ送出するためにソースRAIDストライプ330からの割り当てられたブロック334の組みを選択する。都合のよい実施例では、これらの割り当てられたブロック334は、ソースシステム301でのファイルシステム情報から得られ、また、割り当てられるべきソースシステム301にて、ファイルシステムによって示された、これらのディスクブロックのみを含む。
【００６４】
ソースシステム301は、選択された、割り当てられたブロック334を、それらのRAIDストライプ330に関連づけられたパリティブロック333と共に、目標システム310に送出する。 さらには、ソースシステム301は、予め既に０に設定されていない、いずれの未割り当てのブロック332をゼロにする。目標システム31Oは、これらの割り当てられたブロック334からデータを受信して、割り当てられたブロック344に対し、対応する位置に目標RAIDストライプ340にそれらを記憶する。同様に、目標システム31Oは、関連したパリティブロック333を受け取り、パリティブロック343に対し、対応する位置に目標RAIDストライプ340にそれらを記憶する。
【００６５】
目標システム31Oが、ソースRAIDストライプ330と論理的に同じ目標RAIDストライプ340を有するので、その目標システム31Oは、それ自身の未割り当てのすべてのブロック342がソース記憶システム305で未割り当てにされるのを決定することができる。したがって、目標記憶システム320は、SCSI「同じに書き込む」コマンドを使用して、それらのすべての未割り当てのブロックを０値に設定することができる。
【００６６】
その結果、目標ストレージシステム320は、ディスクブロックが送出され、受け取られ、そして保存された後、実質的にソースストレージシステム305と同じになり、したがって、ソース記憶システム305と目標記憶システム320との間のミラーの関係が確立されるであろう。
【００６７】
[ミラーリング法]
図４は、パリティを再計算することなく、ミラーリングの方法に関するプロセスフローチャートを示す。
【００６８】
メソッド400はソースシステム301と目標(小さい方の)システムによって実行される。そのソースシステムは、ファイルシステム120に似るソース記憶システム305とソースファイルシステム(図示せず)を含む。目標システムは、目標システム31Oと同様である。方法200と同様に、この方法400は、連続的に説明されているが、方法400のフローポイントおよびステップは、個別の要素により、結合して、平行に、非同期か同時であることにかかわらず、パイプライン方法または同様にして実行できる。また、方法200と同様であるので、特に指示された箇所を除き、方法400は、この記述のリストフローのポイントまたはステップと同じ順で実行されなくてはならないという特定の要求はない。
【００６９】
フローポイント410では、ソースシステム301と目標システムは、ミラーの関係を再確立させる準備ができている。都合のよい実施例では、ソースシステム301と目標システムは、ミラーの関係が回復しようとしている状態に到着するように通信する。さらには、都合のよい実施例では、ソースシステム301と目標システムは、ミラーの再確立を達成するために、ソースシステム301から目標システムに送られるべきディスクブロックの最小の組みを決定する。ディスクブロックの最小の組みを決定するための方法は、2002年4月11日公開のWO02/29572A(ネットワークAppliance Inc.)の"Recovery of File System Data in File Servers Mirrored File System Volumes"に述べられている。
【００７０】
ステップ41lでは、ソースシステム301は、目標システムに送られるべき１組の情報を選択する。上で説明したように、割り当てられたディスクブロックのみが送出されるべきである。このステップでは、送出されるべき選択された情報は、(a)ストライピング情報、および(b)パリティ情報を含む。ストライピング情報は、送られるディスクブロックが、いかにしてRAIDストライプに組織化されるかを示す。パリティ情報は、それらのRAIDストライプに対する計算されたパリティを含む。 定義されたRAIDストライプ内でどのブロックが未割り当てのブロックであるかの情報に関しては、ソースシステム301が明示的にその情報を送るか、あるいは目標システムが、前記ストライプ情報および、それを受け取るこれらのディスクブロックの識別に対応してその情報を決定する。
【００７１】
ステップ412では、ソースシステム301は、割り当てられたディスクブロック、ステップ411で説明したストライピング情報、およびステップ411で説明したパリティを送出し、(目標システムはそれらを受け取る。このステップでは、ソースシステム301はまた、既に前もって０にされていないRAIDストライプ内の未割り当てのブロックを０にすることができる。
【００７２】
ステップ413では、目標システムは、割り当てられたディスクブロックからのデータを、指定されたディスクドライブおよび、その記憶ボリュームの指定されたRAIDストライプ上の指示された箇所にデータを書き込む。
【００７３】
ステップ414では、目標システムは、パリティ情報からのデータを、その記憶ボリュームの指定されたRAIDストライプへ書き込む。
【００７４】
ステップ415では、目標システムは、その記憶ボリュームの指定されたRAIDストライプ内の未割り当てのブロックにゼロ値を書き込む。都合のよい実施例では、目標システムは、同じデータバイト(つまり０)のコピーを、各々の未割り当てのブロックに書き込むためのSCSI「同じ状態に書き込む」コマンドを使用する。上述したように、これは、ゼロ値の実際のディスクブロックを書き込むより迅速であり、ファイルシステムと記憶ボリュームの間で、より少ない通信帯域幅となる。
【００７５】
これらの未割り当てのブロックがゼロであると推定されるとき、ソースシステム301で未割り当てのブロックが物理的にまたは論理的に０なので、ソースシステム301が目標システムへ送出したパリティ情報は、正しい。したがって、同じパリティ情報を用いるが、そのパリティを再演算することなく、目標システムは、それらの未割り当てのブロックに実際に０に安全に設定できる。
【００７６】
フローポイント420では、目標システムは、ソースシステム301の物理的で論理的なコピーである。ソースシステム301と目標システムの間のどんな簿記操作も完了し、そして、両者間のミラーの関係が復元される。
【００７７】
等価なRAIDストライプが、ソース記憶ボリュームと目標記憶ボリュームの両方で使用される限り、ソース記憶ボリュームと目標記憶ボリュームの間のミラー関係を、再確立するとき、または最初に確立するときに、この方法400はいつでも実行できる。
【００７８】
[発明の一般性]
この発明は、データが複数のデバイスで維持され、そして、それらの複数のデバイスに記録された少なくともいくつかの情報を破棄てきる(例えば、ファイルシステムの部分ではないか、またはキャッシュから退去できるキャッシュ目的)ファイルシステムと記憶システムに一般的な適用性を持つ。これらの用途のいずれもが、一貫性ポイントを維持するファイルシステムに特に限定されず、また、特にRAID記憶システムにも限定されず、そして、ここで述べた特定の適用に必ずしも関係しない。
【００７９】
この発明の最も一般的な形態における、他のおよび別の用途は、この明細書の熟読後に当業者に明確となるであろう。過度の実験やさらなる発明なしで、この発明は、そのような他の、および、別の用途に適用可能である。好ましい実施例をここで述べたが、この発明の概念、範囲、および趣旨内で多くの変形が可能である。これらの変形はこの明細書の熟読後に当業者に明確となるであろう。
【００８０】
この発明は、データとメタデータが大容量記憶装置上の固定位置に割り当てられないどんな記憶システムにも適用され、それには、ファイルサーバー、データベース、ネットワークキャッシュまたは別のタイプの記憶装置を含む。都合のよい実施例では、この発明は、RAID記憶システムを用いたファイルサーバーに主としてを使用されているが、それに加えてこの発明の適用性を限定する特別な要求は全くない。
【００８１】
この発明は、冗長情報からデータを復元されることができるどんなシステムにも適用され、それには、記憶システム、または少なくとも何らかの冗長情報を用いる通信系さえも含むいずれのタイプをも含む。都合のよい実施例では、この発明は、主として複数のディスクドライブとパリティを用いた記憶システムに使用されるが、それに加えてこの発明の適用性を限定するという特定の要求は全くない。
【００８２】
「ディスクブロック」という用語は、この開示全体にわたって用いられたが、この発明は、磁気テープ、光学ドライブ、その他のためのデータブロックなどの大容量記憶システムの他のタイプにも同様に適用できる。当業者は、この明細書の熟読後にこれらの別の実施例は例示的なもので、限定するものでないと認識されるであろう。
【図面の簡単な説明】
【００８３】
【図１】RAIDデータの復元でファイルシステム情報を用いることを含むファイルシステムおよびRAID記憶システムのブロック図を示す。
【図２】RAIDデータの復元でファイルシステム情報を用いることを含む方法のプロセスフローチャートを示す。
【図３】パリティを再計算することなく、ミラー化できるシステムのブロック図を示す。
【図４】パリティを再計算することなく、ミラー化の方法のプロセスフローチャートを示す。
【符号の説明】
【００８４】
100  システム
120  ファイルシステム
121  情報テーブル
126  ストライブマップテーブル
127  ストライブマップテーブル
140  記憶システム
141  ディスク
142  ディスクブロック
142  RAIDストライプ
160  通信リンク
【図１】
2008269638.tif 000003
【図２】
2008269638.tif 000004
【図３】
2008269638.tif 000005
【図４】
2008269638.tif 000006