(57)【要約】ディスクの故障時(210)、記憶システムは、割り当てられたデータを含むディスクブロックのみを移動し、可能なとき、未割り当てのディスクブロックを論理的に０として扱う。予備ディスクが無いとき、ソースティスクブロックは論理的に０に設定され、ソースディスクブロックに関係するRAIDストライプに対してパリティを再計算する(223)。予備があるとき、予備上の未割り当てのブロックは移動時に論理的又は物理的に０に設定される(222)。故障ディスクへの書き込み動作は他の非故障ディスクに再指示され、使用ディスクでのその記録はこれらの他の非故障ディスクへ移動され維持される。未使用ディスクブロックは予め０に設定される。目標ミラーコピーは、割り当てられたディスクブロックに関する情報を用い、割り当てられたデータまたはパリティを含むこれらのブロックをコピーすることにより及び、いずれも未割り当てを含むこれらのブロックのミラー化時にクリアすることでなされる。
2005531071.tif 000002
【特許請求の範囲】
【請求項１】
第１のグループのデータブロックを識別すること;
前記第１のグループ内に故障したデータブロックが存在するかを決定すること;
前記決定操作の結果に応答して、故障したデータブロックからデータを復元し、そして、前記データを、第２のグループに関係するデータブロックに送出するか否かを決定すること;
前記第１のグループ内の前記故障したデータブロックを、選択された値に論理的に設定することを含み、
前記第１のグループは、前記データブロックに関係する冗長情報を維持できるブロックを含み、前記第２のグループは、少なくとも１つの故障していないデータブロックを有し、これにより、前記第１のグループに対する前記冗長データの後での計算が、前記データを復元することなく、進行できることを特徴とする方法。
【請求項２】
前記故障したデータブロックについての情報に応答して、前記故障したデータブロックからのデータを前記第２のグループに送出しないで、替わりに、前記第２のグループ内の目標データブロックを前記選択された値に設定するか否かを決定することを含む請求項１記載の方法。
【請求項３】
第１のディスク上の前記故障したデータブロックの組についての情報を維持すること、
すべての前記故障したデータブロックが実質的に１つ以上の第２のディスクに移動した時、記憶システムから前記第１のディスクを論理的に除去することとを含み、又、前記情報は、前記故障したデータブロックが１つ以上の第２のディスクへ移動したか否かを含む請求項１記載の方法。
【請求項４】
前記故障したデータブロックにアクセスするための試みを識別すること、
前記アクセスの試みに応答して、目標のデータブロックに対する復元操作を実行すること、
前記目標のデータブロックに対してアクセスするために前記試みを再指示することとを含む請求項１記載の方法。
【請求項５】
前記故障したデータブロックをアクセスするための試みが再指示されるべきであるという指示で、前記故障したデータブロックをマークすること、前記指示に応答して、前記操作を再指示することを実行することとを含む請求項４記載の方法。
【請求項６】
第１のグループのデータブロックを識別するための手段と;
前記第１のグループ内に故障したデータブロックが存在するかを決定する手段と;
前記決定操作の結果に応答して、故障したデータブロックからデータを復元する手段と;
前記データを、第２のグループに関係するデータブロックに送出する手段と;
前記第１のグループ内の前記故障したデータブロックを、選択された値に論理的に設定する手段と；
を含み、前記第１のグループは、前記データブロックに関係する冗長情報を維持できるブロックを含み、更に前記第２のグループは、少なくとも１つの故障していないデータブロックを有し、これにより、前記第１のグループに対する前記冗長データの後での計算が、前記データを復元することなく、進行できることを特徴とする装置。
【請求項７】
前記故障したデータブロックについての情報に応答して、前記故障したデータブロックからデータを前記第２のグループに送出することを出来る限りしないで、替わりに、前記第２のグループ内の目標データブロックを前記選択された値に設定する手段とを含む請求項６記載の装置。
【請求項８】
第１のディスク上の前記故障したデータブロックの組についての情報を維持するための手段と;
すべての前記故障したデータブロックが実質的に１つ以上の第２のディスクに移動した時、記憶システムから前記第１のディスクを論理的に除去するための手段と;
を含み、又、前記情報は、前記故障したデータブロックが１つ以上の第２のディスクへ移動したか否かを含む請求項６記載の装置。
【請求項９】
前記故障したデータブロックにアクセスすることの試みを識別するための手段と、
前記アクセスの試みに応答して、目標のデータブロックに対する前記復元操作を実行するための手段と、
前記目標のデータブロックに対してアクセスするために前記試みを再指示するための手段とを含む請求項６記載の装置。
【請求項１０】
前記故障したデータブロックを、前記故障したデータブロックをアクセスするための試みが再指示されるべきである指示でマークする手段と、
前記指示に応答して、前記操作を再指示することを実行する手段とを含む請求項９記載の装置。
【請求項１１】
命令を含むメモリ又は大容量記憶装置であって、前記命令は、１つ以上の演算デバイスにより、実行されることができ、
前記命令は、前記１つ以上の演算デバイスに対して、
データブロックの第１のグループを識別すること;
前記第１のグループ内に故障したデータブロックが存在するかを決定すること;
決定するための前記命令の結果に応答して、前記故障したデータブロックからデータを復元し、そして、前記データを第２のグループに関係したデータブロックに送出すること;
前記故障したデータブロックを選択された値に論理的に設定することとを指示し、
前記第１のグループは、前記データブロックに関係する冗長情報を維持できるブロックを含み、更に前記第２のグループは、１つの故障していないデータブロックを有し、これにより、前記第１のグループに対する前記冗長情報の後での計算が、前記データを復元することなく、進行されることを特徴とするメモリ又は大容量記憶装置。
【請求項１２】
前記故障したデータブロックについての情報に応答して、前記故障したデータブロックからデータを前記第２のグループに送出することを出来る限りしないで、替わりに、前記第２のグループ内の目標データブロックを前記選択された値に設定する命令を含む請求項１１記載のメモリ又は大容量記憶装置。
【請求項１３】
第１のディスク上の前記故障したデータブロックの組についての情報を維持することと、
すべての前記故障したデータブロックが実質的に１つ以上の第２のディスクに移動した時、記憶システムから前記第１のディスクを論理的に除去することを行う命令を含み、又、前記情報は、前記故障したデータブロックが１つ以上の第２のディスクへ移動したか否かを含む請求項１１記載のメモリ又は大容量記憶装置。
【請求項１４】
前記故障したデータブロックにアクセスするための試みを識別することと、
前記アクセスの試みに応答して、目標のデータブロックに対して復元するための前記命令を実行することと、
前記目標のデータブロックに対してアクセスするための前記試みを再指示することとを行う命令を含む請求項１１記載のメモリ又は大容量記憶装置。
【請求項１５】
前記故障したデータブロックを、前記故障したデータブロックをアクセスするための試みが再指示されるべきである指示でマークすることと、
前記指示に応答して、前記操作を再指示することを実行することとを行う命令を含む請求項１４記載のメモリ又は大容量記憶装置。
【請求項１６】
記憶システムの操作方法であり、選択されたデータブロックを、前記記憶システムによるパリティ再計算の量が最小となる、選択された値に設定することを含む方法。
【請求項１７】
前記設定操作は、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グループに加えられる場合
(２) 未使用のディスクブロックを含んでいる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  通信リンク
【図１】
2005531071.tif 000003
【図２】
2005531071.tif 000004
【図３】
2005531071.tif 000005
【図４】
2005531071.tif 000006
【国際調査報告】
2005531071.tif 000007