(57)【要約】【課題】サブシステムによって管理されたデータスクラビングにおいて、システム性能の低下を抑えるようスクラビングプロセスを管理および実行すること。【解決手段】複数のハードディスクドライブを有するＲＡＩＤサブシステムは、ＲＡＩＤコントローラにデータスクラビングの実行を要求する代わりに、各ディスク上でデータスクラビングを自主的に実行するディスクコントローラをディスクごとに備えている。データスクラビングは、ＲＡＩＤコントローラからＩ／Ｏ要求を受け取り次第中断される。または、データスクラビングは、保証されたスクラブレートが達成されていなければ続行される場合がある。データは、同心データトラックの大きなバンドに格納される。バンドは、バンドを読み取る頻度またはバンドに新たに書き込んだことに基づいて、スクラビング対象として優先的に選択される。【選択図】図１
2005050346.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのストレージディスクと、ディスクからのデータの読み取りおよびディスクへのデータの書き込みを行う少なくとも１つのドライブコントローラとを有するハードディスクドライブであって、
前記ドライブコントローラは、少なくとも１つのデータユニットを読み取り、前記データユニット内にエラーが存在するかどうかを判定して、エラーが存在する場合、エラーの記録とエラーの報告の少なくとも一方に着手し、更にその後のデータユニットについての読み取りおよび判定ロジックを行うスクラブサイクルを実行すること、および
データの読み取りおよびデータの書き込みの少なくとも１つについてのユーザ要求を受け取った場合、前記スクラブサイクルを中断して前記ユーザ要求を実行した後、前記スクラブサイクルを再開することを含むロジックを実行することを特徴とするハードディスクドライブ。
【請求項２】
ＲＡＩＤシステムと組み合わせてなり、前記ドライブコントローラはＲＡＩＤコントローラから前記ユーザ要求を受け取ることを特徴とする請求項１に記載のディスクドライブ。
【請求項３】
ユーザ要求キュー内のすべてのユーザ要求を実行した後、前記スクラブサイクルを再開する前に遅延期間だけ待つことを特徴とする請求項２に記載のディスクドライブ。
【請求項４】
前記遅延期間は、前記ＲＡＩＤコントローラから受け取ったユーザ要求の頻度および要求数の少なくとも１つに依存する適応的遅延期間であることを特徴とする請求項３に記載のディスクドライブ。
【請求項５】
前記ディスクドライブは複数のデータバンドに分割されており、前記ドライブコントローラは少なくとも各バンドに対する最近のアクセスを示すテーブルを維持管理することを特徴とする請求項１に記載のディスクドライブ。
【請求項６】
要求の実行の一部として、ディスク上の、ユーザ要求に供されるデータのすぐ隣のデータに対して前記スクラブサイクルを実行することを特徴とする請求項１に記載のディスクドライブ。
【請求項７】
第２のデータよりも後に書き込まれた第１のデータに対して前記スクラブサイクルを実行してから、前記第２のデータをスクラブすることを特徴とする請求項１に記載のディスクドライブ。
【請求項８】
他の使用頻度のより低いエリアよりも頻繁にアクセスされたディスクエリア上で前記スクラブサイクルを実行してから、前記使用頻度のより低いエリアをスクラブすることを特徴とする請求項１に記載のディスクドライブ。
【請求項９】
少なくとも１つのストレージディスクと、ディスクからのデータの読み取りおよびディスクへのデータの書き込みを行う少なくとも１つのドライブコントローラとを有するハードディスクドライブであって、
前記ドライブコントローラは、少なくとも１つのデータユニットを読み取り、前記データユニット内にエラーが存在するかどうかを判定して、エラーが存在する場合、エラーの記録とエラーの報告の少なくとも一方に着手し、更にその後のデータユニットについての読み取りおよび判定ロジックを行うスクラブサイクルを実行すること、および、
データの読み取りおよびデータの書き込みの少なくとも１つについてのユーザ要求を受け取った場合、かつ現在のスクラブレートがしきい値レートを超えた場合、前記スクラブサイクルを中断して前記ユーザ要求を実行した後、前記スクラブサイクルを再開し、それ以外の場合は、少なくとも前記スクラブサイクルの現在のスクラブ読み取りは中断しないことを含むロジックを実行することを特徴とするハードディスクドライブ。
【請求項１０】
ＲＡＩＤシステムと組み合わせてなり、前記ドライブコントローラはＲＡＩＤコントローラから前記ユーザ要求を受け取ることを特徴とする請求項９に記載のディスクドライブ。
【請求項１１】
ユーザ要求キュー内のすべてのユーザ要求を実行した後、前記スクラブサイクルを再開する前に遅延期間だけ待つことを特徴とする請求項１０に記載のディスクドライブ。
【請求項１２】
前記遅延期間は、前記ＲＡＩＤコントローラから受け取ったユーザ要求の頻度および要求数の少なくとも１つに依存する適応的遅延期間であることを特徴とする請求項１１に記載のディスクドライブ。
【請求項１３】
前記ディスクドライブは複数のデータバンドに分割されており、前記ドライブコントローラは少なくとも各バンドに対する最近のアクセスを示すテーブルを維持管理することを特徴とする請求項９に記載のディスクドライブ。
【請求項１４】
要求の実行の一部として、ディスク上の、ユーザ要求に供されるデータのすぐ隣のデータに対して前記スクラブサイクルを実行することを特徴とする請求項９に記載のディスクドライブ。
【請求項１５】
第２のデータよりも後に書き込まれた第１のデータに対して前記スクラブサイクルを実行してから、前記第２のデータをスクラブすることを特徴とする請求項９に記載のディスクドライブ。
【請求項１６】
他の使用頻度のより低いエリアよりも頻繁にアクセスされたディスクエリア上で前記スクラブサイクルを実行してから、前記使用頻度のより低いエリアをスクラブすることを特徴とする請求項９に記載のディスクドライブ。
【請求項１７】
少なくとも１つのストレージディスクと、ディスクからのデータの読み取りおよびディスクへのデータの書き込みを行う少なくとも１つのドライブコントローラとを有するハードディスクドライブであって、
前記ドライブコントローラは、少なくとも１つのデータユニットを読み取り、前記データユニット内にエラーが存在するかどうかを判定して、エラーが存在する場合、エラーの記録とエラーの報告の少なくとも一方に着手し、更にその後のデータユニットについての読み取りおよび判定ロジックを行うスクラブサイクルを実行し、この場合、前記スクラブサイクルを、第２のデータよりも後に書き込まれた第１のデータに対して実行した後で、前記第２のデータに対して実行することを含むロジックを実行することを特徴とするハードディスクドライブ。
【請求項１８】
データの読み取りおよびデータの書き込みの少なくとも１つについてのユーザ要求を受け取った場合、前記スクラブサイクルを中断して前記ユーザ要求を実行した後、前記スクラブサイクルを再開することを特徴とする請求項１７に記載のハードディスクドライブ。
【請求項１９】
ＲＡＩＤシステムと組み合わせてなり、前記ドライブコントローラはＲＡＩＤコントローラから前記ユーザ要求を受け取ることを特徴とする請求項１８に記載のディスクドライブ。
【請求項２０】
データの読み取りおよびデータの書き込みの少なくとも１つに対するユーザ要求を受け取った場合、かつ現在のスクラブレートがしきい値レートを超えた場合、前記スクラブサイクルを中断して前記ユーザ要求を実行した後、前記スクラブサイクルを再開し、それ以外の場合は、少なくとも前記スクラブサイクルの現在のスクラブ読み取りは中断しないことを特徴とする請求項１７に記載のハードディスクドライブ。
【請求項２１】
少なくとも１つのストレージディスクと、ディスクからのデータの読み取りおよびディスクへのデータの書き込みを行う少なくとも１つのドライブコントローラとを有するハードディスクドライブであって、
前記ドライブコントローラは、少なくとも１つのデータユニットを読み取り、ここで前記データユニットは、それがディスク上のユーザ要求に供されたデータのすぐ隣にある場合、スクラブ対象として優先的に選択され、前記データユニット内にエラーが存在するかどうかを判定して、エラーが存在する場合、エラーの記録とエラーの報告の少なくとも一方に着手し、更にその後のデータユニットについての読み取りおよび判定ロジックを行うスクラブサイクルを実行することを含むロジックを実行することを特徴とするハードディスクドライブ。
【請求項２２】
データの読み取りおよびデータの書き込みの少なくとも１つについてのユーザ要求を受け取った場合、前記スクラブサイクルを中断して前記要求を実行した後、前記スクラブサイクルを再開することを特徴とする請求項２１に記載のハードディスクドライブ。
【請求項２３】
ＲＡＩＤシステムと組み合わせてなり、前記ドライブコントローラはＲＡＩＤコントローラから前記ユーザ要求を受け取ることを特徴とする請求項２２に記載のディスクドライブ。
【請求項２４】
データの読み取りおよびデータの書き込みの少なくとも１つに対するユーザ要求を受け取った場合、かつ現在のスクラブレートがしきい値レートを超えた場合、前記スクラブサイクルを中断して前記ユーザ要求を実行した後、前記スクラブサイクルを再開し、それ以外の場合は、少なくとも前記スクラブサイクルの現在のスクラブ読み取りは中断しないことを特徴とする請求項２１に記載のハードディスクドライブ。
【請求項２５】
少なくとも１つのストレージディスクと、ディスクからのデータの読み取りおよびディスクへのデータの書き込みを行う少なくとも１つのドライブコントローラとを有するハードディスクドライブであって、
前記ドライブコントローラは、少なくとも１つのデータユニットを読み取り、前記データユニット内にエラーが存在するかどうかを判定して、エラーが存在する場合、エラーの記録とエラーの報告の少なくとも一方に着手し、更にその後のデータユニットについての読み取りおよび判定ロジックを行うスクラブサイクルを実行し、この場合、前記スクラブサイクルは、他の使用頻度のより低いエリアよりも頻繁にアクセスされたディスクエリア上で実行された後で、前記使用頻度のより低いエリア上で実行されることを特徴とするハードディスクドライブ。
【請求項２６】
データの読み取りおよびデータの書き込みの少なくとも１つに対するユーザ要求を受け取った場合、前記スクラブサイクルを中断して前記ユーザ要求を実行した後、前記スクラブサイクルを再開することを特徴とする請求項２５に記載のハードディスクドライブ。
【請求項２７】
ＲＡＩＤシステムと組み合わせてなり、前記ドライブコントローラはＲＡＩＤコントローラから前記ユーザ要求を受け取ることを特徴とする請求項２６に記載のディスクドライブ。
【請求項２８】
データの読み取りおよびデータの書き込みの少なくとも１つについてのユーザ要求を受け取った場合、かつ現在のスクラブレートがしきい値レートを超えた場合、前記スクラブサイクルを中断して前記ユーザ要求を実行した後、前記スクラブサイクルを再開し、それ以外の場合は、少なくとも前記スクラブサイクルの現在のスクラブ読み取りは中断しないことを特徴とする請求項２５に記載のハードディスクドライブ。
【請求項２９】
ＲＡＩＤコントローラと複数のハードディスクドライブとを有し、各ディスクドライブが、少なくとも１つのストレージディスクと、ディスクからのデータの読み取りおよびディスクへのデータの書き込みを行う少なくとも１つのドライブコントローラとを有する、独立した複数のディスクの冗長アレイ（ＲＡＩＤ）システムにおいて、
各ディスクドライブの前記ドライブコントローラは前記ＲＡＩＤコントローラに接続されており、各ドライブの前記ドライブコントローラは、そのディスク上でスクラブサイクルを自主的に実行するとともに、データの読み取りおよびデータの書き込みの少なくとも１つについてのユーザ要求を受け取った場合、前記スクラブサイクルを中断して前記ユーザ要求を実行した後、前記スクラブサイクルを再開することを特徴とする独立した複数のディスクの冗長アレイ（ＲＡＩＤ）システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にハードディスクドライブに関し、特に独立した複数のディスクの冗長アレイ（ＲＡＩＤ＝Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）システムにおけるハードディスクドライブに関する（ただし、これに限定されるものではない）。
【背景技術】
【０００２】
数多くのデータストレージサブシステムにとって、データの保全性は最も重要な考慮事項である。これらのサブシステムでは、種々のＲＡＩＤ技術を使用してデータの冗長性を確保する。その結果、ディスクドライブの１つでデータが利用できない場合、そのデータはＲＡＩＤサブシステム内の他のドライブから回復することができる。マルチフォールトトレランスは高いコストを要するため、大部分のサブシステムではシングルフォールトトレランスのみが提供される。あいにく、ハードエラーとしても知られる回復不能な読み取りエラーが、ディスクドライブで発生する。このエラーは、ドライブのエラー回復手順（ＥＲＰ）におけるすべてのステップを実行しつくした後でも、セクタの読み取りができないときに発生する故障の状況である。そのようなステップには、装備されたすべてのレベルの誤り訂正制御（ＥＣＣ）を呼び出すこと、および異なるヘッドオフセットを使用してリトライすることなどが含まれる。ＲＡＩＤ内の他のすべてのドライブにアクセスできる状態で回復不能な読み取りエラーに遭遇したとき、そのセクタはそれらのドライブから再構築することができる。しかし、ＲＡＩＤ内のドライブの１つがすでに故障した状態でハードエラーに遭遇した場合、ハードエラーの発生したセクタと、それに対応する、前記故障したドライブ内のセクタの両方とも回復可能ではない。その結果、データが消失した状況になる。
【０００３】
ドライブの故障後にハードエラーに遭遇する確率を減少させるために、一部のストレージサブシステムでは、ある種のデータスクラビングルーチンを装備することによって、データが実際に必要になる前にそのようなエラーを除去するようにしている。そのような方式においては、ＲＡＩＤコントローラは、各ドライブコントローラに定期的に検査読み取りコマンドを発行して（すなわち、キャッシュから読み取るのではなく、ディスクメディアから読み取る）、各ドライブ内のすべてのアドレスを循環して検査する。回復不能なエラーに遭遇してドライブコントローラの１つによってそのエラーが報告されたとき、ＲＡＩＤコントローラはＲＡＩＤ冗長性を使用して他のドライブからそのデータを再構築する。一部のサブシステムでは自動再割り当てをディスクドライブ内で有効にして、ハードエラーを含むセクタを予備のロケーションに自動的に再割り当てする。他のサブシステムでは自動再割り当てを無効にして、最初にデータを元のロケーションに再書き込みすることによって問題が解決されたかどうかを確認して、問題が解決されない場合（例えば、メディアの傷などによって）のみ再割り当てを試みるかどうかをＲＡＩＤコントローラが決定することができるようにしている。いずれの場合でも、ＲＡＩＤコントローラは回復不能エラーの統計情報をログに記録する。そのようなエラーがあらかじめ決められたしきい値を超えた場合、そのドライブは交換されることになる。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上記のサブシステムによって管理されたデータスクラビングには、２つの不利点がある。第１の不利点は、スクラビングプロセスを管理および実行するために、ＲＡＩＤシステムコントローラの手段が必要となることである。第２の不利点は、コントローラが実際にはデータを必要としない場合でも、ドライブからデータが返されることである。その結果、バス上で不必要なトラフィックが発生することになり、場合によってはシステム性能の低下を招く可能性がある。そのような制約があるため、データスクラブサイクルを延長することが望ましい。
【課題を解決するための手段】
【０００５】
ハードディスクドライブは、少なくとも１つのストレージディスクと、ディスクからのデータの読み取りおよびディスクへのデータの書き込みを行うドライブコントローラとを有する。前記ドライブコントローラは、少なくとも１つのデータユニットを読み取ることを課したスクラブサイクルを実行すること、およびデータユニット内にエラーが存在するかどうかを確認することを含むロジックを実行する。データユニット内にエラーが存在する場合、エラーの記録および／または報告を行う。エラー検出ロジックは、その後のデータユニットに対して実行される。データ読み取りまたはデータ書き込みのユーザ要求を受け取った場合、スクラブサイクルを中断してその要求を実行した後、スクラブサイクルを再開する。
【０００６】
好適な実施例においては、ディスクドライブはＲＡＩＤシステムと組み合わせて使用され、ドライブコントローラはＲＡＩＤコントローラからユーザ要求を受け取る。
【０００７】
限定を意図しない一実施例においては、ドライブコントローラのロジックには、ユーザ要求キュー内のすべてのユーザ要求を実行した後、スクラブサイクルを再開する前に遅延期間待つことが含まれる。遅延期間は、ＲＡＩＤコントローラから受け取るユーザ要求の頻度および／または要求数に依存する適応的遅延期間である。
【０００８】
ディスクドライブは、複数のデータバンドに分割される。ドライブコントローラは、望ましくは、例えば各バンドに対する最近のアクセスを示すテーブルを維持管理する。
【０００９】
要求の実行と同時に、スクラブは、ディスク上のユーザ要求に供されるデータのすぐ隣にあるデータに対して優先的に実行される。さらに、スクラブは、他のデータよりも新たに書き込まれたデータに対しても、および／または他のエリアよりも頻繁にアクセスされたディスクエリアに対しても優先的に実行される。
【００１０】
別の態様においては、ハードディスクドライブは、少なくとも１つのストレージディスクと、ディスクからのデータの読み取りおよびディスクへのデータの書き込みを行うドライブコントローラとを有する。前記ドライブコントローラは、少なくとも１つのデータユニットを読み取ることを課したスクラブサイクルを実行すること、およびデータユニット内にエラーが存在するかどうかを確認することを含むロジックを実行する。データユニット内にエラーが存在する場合、エラーの記録および／または報告を行う。エラー検出ロジックは、その後のデータユニットに対して実行される。データ読み取りまたはデータ書き込みのユーザ要求を受け取った場合、かつ現在のスクラブレートがしきい値レートを超えた場合、スクラブサイクルを中断してその要求を実行した後、スクラブサイクルを再開する。それ以外の場合は、スクラブサイクルの現在のスクラブ読み取りは中止されない。
【００１１】
さらに別の態様においては、ハードディスクドライブは、少なくとも１つのストレージディスクと、ディスクからのデータの読み取りおよびディスクへのデータの書き込みを行うドライブコントローラとを有する。前記ドライブコントローラは、少なくとも１つのデータユニットを読み取ることを課したスクラブサイクルを実行すること、およびデータユニット内にエラーが存在するかどうかを確認することを含むロジックを実行する。データユニット内にエラーが存在する場合、エラーの記録および／または報告を行う。エラー検出ロジックは、その後のデータユニットに対して実行される。スクラブサイクルは、第２のデータよりも新たに書き込まれた第１のデータに対して実行することができ、その後、第２のデータに対して実行することができる。または、スクラブサイクルは、頻繁にアクセスされるディスクエリア上で優先的に実行することができる。
【発明の効果】
【００１２】
本発明で認識されることは、上記の課題は、回復不能エラーに遭遇しない限りＲＡＩＤコントローラによる何の作業も必要としないディスクドライブコントローラレベルにてデータスクラビングを実施することによって改善できることである。
【発明を実施するための最良の形態】
【００１３】
本発明の詳細は、その構造および動作の両方に関して、添付図面を参照することによって最もよく理解することができる。添付図面においては、同様の参照符号は同様の部品を表す。
【００１４】
最初に、図１を参照すると、ＲＡＩＤシステムが示される。このＲＡＩＤシステムは、一般に参照番号１０で指定され、ＲＡＩＤコントローラ１２を備えている。ＲＡＩＤコントローラ１２は、１つ以上のクライアントプロセッサ１４と通信を行い、複数のハードディスクドライブ（ＨＤＤ）１６上でデータの格納、検索を行う。図２は、本発明のハードディスクドライブ１６にドライブコントローラ１８が含まれることを示す。ドライブコントローラ１８は、ＲＡＩＤコントローラ１２からの要求に応じて、１つ以上のデータストレージディスク２０上でデータの読み取りおよび書き込みを行う。各ＨＤＤ１６には、当該技術で知られるＨＤＤ原理に従って示されるような、ソリッドステートデータキャッシュ２２が含まれる場合もある。本原理によると、ＲＡＩＤシステム１０の各ＨＤＤコントローラ１８は、下記のスクラビングロジックを自主的に実行する。すなわち、各ドライブコントローラ１８は、そのディスク上で、ＲＡＩＤコントローラ１２からは独立してデータスクラビングに独自に着手する。
【００１５】
図３は、本スクラブループのロジックを示す。本スクラブループは、望ましくは、ドライブコントローラ１８によって無期限に繰り返される。スクラブループのロジックは起動状態２４で開始する。図５を参照して以下にさらに詳細に説明されるように、保証されたスクラブレートが実行されると、このロジックはブロック２６に進み、スクラブサイクルの開始時間が記録される。
【００１６】
ブロック２６から、または保証スクラブレートが実行されていない起動状態２４から、ロジックはブロック２８に進み、図６を参照して以下で議論されるように、または以下で論じる他の基準を使用して、スクラブする次のデータユニットを選択する。限定を意図しない実施例においては、データはディスク２０上の「バンド」内に格納されるが、各バンドは、ディスク上で利用可能なデータ空間の論理的分割によって形成される。例えば、１００ＧＢのドライブは、各々１ＧＢを有する１００個のバンド、または各々１００ＭＢを有する１０００個のバンドなどに分割される。一つのデータユニットは、比較的多数のセクタ（例えば、５１２）に対応する。または、実際にはトラック全体に対応することもある。トラック全体を読み取る場合、ゼロ待ち時間読み取り技術（すなわち、ヘッドがトラック上に到着すると同時に読み取りを開始する）を、スクラブ読み取りの実行に容易に適用することができる。その結果、回転待ち時間の消費をなくすことができる。以下さらに詳細に述べられているように、スクラブデータユニットに対応したビットマップを使用して、スクラブ済みのユニットを追跡することができるが、その他の方法を使用することもできる。各スクラブサイクルの開始時に、ビットマップはリセットされる。
【００１７】
ブロック３０では、スクラブするデータユニットが特定されると、データユニットが読み取られる。判断ブロック３２では、ドライブコントローラ１８は、データユニット内に訂正不能エラーが存在するかどうか確認する。エラーが検出された場合、ブロック３４で、エラーのロケーション（アドレス）を記録する。このステップで、ＲＡＩＤコントローラ１２に直ちにエラーを通知してもよい。その後、ブロック３６で、ドライブコントローラ１８は、スクラブ済みのデータユニットのリスト（または、ビットマップ）を更新する。保証されたスクラブレートが使用される場合、ロジックはブロック３８にも進む。ブロック３８では、例えば、ブロック３６で記録されたようなスクラブ済みのデータ量を、ブロック２６で記録されたようなスクラブサイクルの開始からの総経過時間で除算することによってスクラブレートが求められる。最後に、判断ブロック４０では、ディスク全体がスクラブされたかどうかを確認し、「Ｎｏ」の場合、ロジックはブロック２８に戻る。それ以外の場合は、ロジックは開始状態２４から別のスクラブサイクルを開始する。
【００１８】
図４は、保証されたスクラブレートが呼び出されない場合にドライブコントローラ１８が実行することができるロジックを示す。図３に示されるスクラブループが継続して実行されていると仮定すると、状態４２では、ディスク２０に対する読み取りまたは書き込みのユーザ要求が（例えば、ＲＡＩＤコントローラ１２から）受け取られる。判断ブロック４４では、ドライブコントローラ１８はスクラブ読み取りが進行中であるかどうか確認する。「Ｙｅｓ」の場合、ブロック４６でスクラブ読み取りは中止または一時停止される。図４の点線は、多角形４８によって指示される図３のスクラブループサブルーチンが通知または一時停止されることを示す。
【００１９】
ブロック４６から、またはスクラブ読み取りが進行中でない場合は判断ブロック４４から、ロジックはブロック５０に進んで、Ｉ／Ｏ要求を要求のキューに追加する。判断ブロック５２に進んで、未実行の要求がキューに存在するかどうか調べる。存在する場合、ブロック５４で要求が処理される。キュー内の次に処理する要求を選択するスケジューリングアルゴリズムとしては、先着順、最短時間優先など、任意のアルゴリズムを使用することができる。
【００２０】
加えて、ブロック５４のロジックの一部として、スクラブループは、ディスク上の、要求の実行中にユーザ要求に供されるデータのすぐ隣にあるデータに対して便宜的に実行してもよい。これは、１つ以上の隣接データスクラブユニットを含むように要求を拡張することによって達成することができる。例えば、読み取り要求は、アドレス５０２０からアドレス５１４７までの１２８セクタを読み取ることになる。便宜的スクラビングが起動されるとき、ドライブコントローラ１８は、要求されたセクタを含むスクラブユニット全体（アドレス５０００から５９９９まで）を読み取り、それを行っている間にユニット全体をスクラブする。
【００２１】
必要に応じて、すべてのユーザＩ／Ｏ要求が実行されると、ロジックはブロック５６に進み、図３のスクラブループを再開する前に、遅延期間を待つ。遅延期間は、固定にしたりまたは適応的可変にすることができる。さらに、遅延期間は、例えば、受け取るユーザ要求の頻度に依存する（例えば、要求が多ければ多いほど、遅延期間もさらに長くなる）、および／または、ＲＡＩＤコントローラから受け取るユーザ要求の数に依存する。例えば、要求数が多ければ多いほど遅延期間も長くなる。遅延期間は、新たな要求が近い将来到着しそうにない確率、すなわち、ＨＤＤがアイドル期間に入っている確率を増加させる。遅延期間の間に新たな要求が到着した場合、ロジックは、開始状態４２に戻るか、または状態４８でスクラブループに再び入る。
【００２２】
適応的遅延期間を決定する際、ドライブコントローラ１８は、状態４２で記録された最後のユーザ要求が到着してからの経過時間を計算することができる。本例では、実行すべき遅延は、この経過時間を使用して計算される。そのような計算の一例としては、遅延＝ｋ／経過時間である（ここで、ｋは定数である）。このように、経過時間が短ければ遅延は長くなる。なぜならば、別の要求が間もなく到着する可能性が高いためである。一方、経過時間が長ければ遅延は短くなる。これは延長期間中にＨＤＤに対して何の作業も行われておらず、そのため、さらに頻繁にスクラビングしてもパフォーマンスに影響を及ぼす可能性が低いためである。上記から示唆されるように、他の適応的な方法または計算式を使用することもできる。
【００２３】
図５に示すロジックは、スクラビングが、少なくとも、ユーザによって定義可能なあるしきい値レートで発生することが望まれるときに使用することができる。図３に示されるスクラブループが継続して実行されていると仮定し、状態５８では、ディスク２０に対する読み取りまたは書き込みのユーザ要求が（例えば、ＲＡＩＤコントローラ１２から）受け取られる。判断ブロック６０では、スクラブ読み取りが進行中であるかどうかを確認する。「Ｙｅｓ」の場合、ロジックは判断ブロック６２に進み、現在のスクラブレート（図３のブロック３８で求められた）がしきい値レートを下回っているかどうかを確認する。「Ｎｏ」の場合、ロジックはブロック６４に進み、そこでスクラブ読み取りは中止または一時停止される。点線は、多角形６６によって指示される図３のスクラブループサブルーチンが通知または一時停止されることを示す。
【００２４】
対照的に、判断ブロック６２でスクラブレートが不十分である（すなわち、低すぎる）ことが判明した場合、ロジックはブロック６８に進み、他のユーザ要求を処理する前に現在のスクラブ読み取りを完結する。スクラブ読み取りが進行中でないときは判断ブロック６０から、または、読み取りが進行中でスクラブレートに依存して処理されているときはブロック６４および６８から、ロジックはブロック７０に進み、ユーザ要求を要求のキューに追加する。
【００２５】
判断ブロック７２に進んで、未実行の要求がキューに存在するかどうか確認する。存在する場合、ブロック７４で要求が処理される。必要に応じて、図４のロジックの場合と同様に、ブロック７４のロジックの一部として、スクラブループは、要求の実行と同時に、ディスク上のユーザ要求に供されるデータのすぐ隣にあるデータに対して便宜的に実行してもよい。
【００２６】
ドライブコントローラ１８のロジックは、ブロック７４からブロック７６に進み、新しいスクラブレートを計算する。その後、判断ブロック７８に進んで、スクラブレートが低すぎないかどうか確認する。「Ｙｅｓ」の場合、ロジックは、多角形６６に示されるような図３のスクラブループに再び入り、スクラブレートがユーザ定義のしきい値と等しくなるまで状態６６と状態７８の間のループに留まる。スクラブレートがユーザ定義のしきい値と等しくなったとき、ロジックは判断ブロック７２に戻る。図５に示すように、判断ブロック７２で確認された通りにキュー内のすべてのユーザ要求が実行されたとき、ロジックは必要に応じブロック８０に進み、状態６６でスクラブループに再び入る前に前記の遅延期間を呼び出す。
【００２７】
すでに開示したように、現在、好適な実施例は、物理トラックまたはその部分をデータスクラブユニットとして使用する。スクラブすべきデータユニットをスケジューリングするとき、最初から最後まで順を追って進む代わりに、次のスクラブ読み取りを、ディスクドライブ１６のヘッドの現在位置に最も近接した場所で行われるようにスケジューリングしてもよい。そのためには、限定を意図しない一実施例においては、図３のブロック２８で実行されるロジックを図６に示されるロジックによって実行してもよい。
【００２８】
ブロック８２で開始すると、ヘッドの現在位置の物理シリンダ番号「Ｃ」が記録される。判断ブロック８４では、ドライブコントローラ１８は、シリンダＣにあるすべてのトラックがスクラブ済みであるかどうか確認する。少なくとも１つのトラックがまだスクラブされていない場合、ロジックはブロック８６に進み、そのシリンダからスクラブされていないトラックを選択する。その後、ロジックは図３のブロック３０に進む。
【００２９】
判断ブロック８４でシリンダ「Ｃ」にあるすべてのトラックがスクラブ済みであることが判明した場合、ロジックはブロック８８に進み、そこでインデックス変数「ｉ」を１に初期化する。判断ブロック９０に進んで、シリンダＣ＋ｉ内のすべてのトラックがスクラブ済みであるかどうか確認する。「Ｎｏ」の場合、ロジックはブロック８６に進む。「Ｙｅｓ」の場合、ロジックは判断ブロック９２に進み、そこにおいてシリンダＣ−ｉ内のすべてのトラックがスクラブ済みであるかどうか確認する。シリンダＣ−ｉ内で少なくとも１トラックがスクラブ済みでない場合、ロジックはブロック８６に進む。一方、判断ブロック９２における判断結果が「Ｙｅｓ」の場合、ロジックはブロック９４に進み、インデックス変数「ｉ」を１だけ増加させる。
【００３０】
判断ブロック９６に進み、インデックス変数「ｉ」がしきい値を超えたかどうか確認する。「Ｎｏ」の場合、ロジックは判断ブロック９０に戻る。しきい値を超えた場合、ブロック９８に入り、そこで異なるアルゴリズムを使用して次のスクラブユニットを選択することができる。これによって、検索は妥当な時間に制限され、またパフォーマンス上の利点が失われるほど「ｉ」が大きくなりすぎれば、その後異なる選択方法に切り替わる。
【００３１】
スクラビング対象のデータユニットの選択に使用可能な異なる選択方法に関する限定を意図しない例として、他のデータよりも新たに書き込まれたデータを、他のデータをスクラブする前のスクラビング対象として選択してもよい。または、より頻繁にアクセスされたディスクのエリアを、その他の使用頻度がそれよりも低いエリアをスクラブする前にスクラブしてもよい。
【００３２】
さらに具体的に説明すると、本発明では、一部の回復不能エラーは書き込み不良によって引き起こされることを認識している。そのようなエラーをより速やかに発見するには、図７に示されるように、ドライブコントローラ１８は、最近書き込まれたトラックおよび隣接トラックをスクラブするようにスケジューリングすることができる。それぞれ図４、５のブロック５４、７４と関連した上記の開示によると、要求の処理には、ブロック１００における要求された読み取りコマンドまたは書き込みコマンドの実行、およびその後の判断ブロック１０２におけるちょうど完了したコマンドが書き込みコマンドであるかどうかを確認する処理が含まれる。ちょうど完了したコマンドが書き込みコマンドである場合、ブロック１０４で、ドライブコントローラ１８は、書き込みコマンドによって影響を受けるスクラブユニットを、それらがこのサイクルでスクラブされたかどうかにかかわらず「スクラブ未了」として印を付ける。ビットマップを使用してスクラブ済みユニットを追跡する好適な実施例においては、それらのユニットに対応するビットはリセットされる。このように、それらのユニットは、次のスクラブサイクルでスクラビングのためのスケジューリングが行われるまで待つ必要はなく、すぐにスクラブすることができる。その上、これらのデータユニットは、図６のスケジューリングポリシーが使用されるとき、おそらく速やかにスケジューリングされる。スクラブユニットが物理トラックである好適な実施例においては、影響を受けるスクラブユニットは、ちょうど書き込まれたデータを含むトラックと、同じ表面上にあるその隣接トラックである。
【００３３】
前述したように、ディスク２０は、必ずしも大きさが等しいとは限らない複数のデータバンドに論理的に分割してもよい。これらのバンドと関連付けられているのが図８に示されるテーブル１０６であり、各項目は１つのバンドに対応している。各項目にはカウントフィールドが含まれ、第１カラムによって示される。これらの項目には、望ましくは、カウントが減少する順番に編成されたダブルリンクリストが設けられている。従って、第２カラムおよび第３カラムによって示されるように、各項目にはこのリンクリストのための正方向ポインタと逆方向ポインタが含まれる。バンドテーブルに加えて、ＨＤＤはこのリンクリストの先頭（最高カウントを有する項目）を指すポインタを維持管理する。
【００３４】
この限定を意図しない実施例において、ここで図９を参照すると、図９の状態１０８でＨＤＤ１６が新しいユーザＩ／Ｏ要求を受け取るたびに、ブロック１１０において、ドライブコントローラ１８はこの要求を入れるバンドを決定する。ブロック１１２では、そのバンドに対するカウントがインクリメントされる。判断ブロック１１４に進み、結果として得られたカウントが、カウントフィールドによって保持可能な最大値を超えたかどうかを確認する。例えば、カウントフィールドに対して１６ビットを使用する場合、最大カウントは６５５３５である。得られたカウントが最大カウントよりも大きい場合、ロジックはブロック１１６に進み、テーブル内のすべての項目のカウントフィールドを２で割る。
【００３５】
ブロック１１６から、または判断ブロック１１４における判断結果が「Ｎｏ」の場合は判断ブロック１１４から判断ブロック１１８に進んで、ドライブコントローラ１８は、現時点で新しいカウントが、現在のバンドと関連付けられた逆方向ポインタによって指し示される項目（すなわち、順番に編成されたリンクリストにおける次に高いカウントの項目）のカウントよりも大きいかどうか確認する。現時点で新しいカウントの方が大きい場合、ロジックはブロック１２０に進み、そこでリンクリスト内のこれらの２つの項目の位置を入れ替える。その後、ループは判断ブロック１１８に戻り、リンクリストの順序が適切に並べ替えられるまでこのループが繰り返される。
【００３６】
最後に、図１０は選択アルゴリズムを示す。この選択アルゴリズムは、図８および図９に示される上記のテーブル実施例に対して状態１２２で開始される。ブロック１２４では、リンクリスト内の先頭項目（最高カウント値を有する項目）が選択される。判断ブロック１２６に進んで、このバンド内のすべてのスクラブユニットがスクラブ済みであるかどうか確認する。すべてのユニットがスクラブ済みである場合、ロジックはブロック１２８に進み、リンクリスト内の次のバンドが選択される。その後、判断ブロック１２６に戻る。判断ブロック１２６で、すべてのデータユニットがスクラブ済みになっているとは限らないバンドが見つかった場合、ブロック１３０に進み、このバンドからスクラブユニットを選択する。
【００３７】
エラー回復手順（ＥＲＰ）を使用することによって回復可能なエラーに対しては、ドライブコントローラ１８は、データを元のロケーションにもう一度書き込んでからそのデータを読み取り、そのデータに再びエラーが含まれるかどうかを確認することができる。エラーが含まれる場合、物理的ロケーションに損傷があることを示す。このオプションは、新しいモードページパラメータによって制御することができる。ユーザがそのモードページに自動再割り当てを指定した場合、コントローラ１８は回復したデータを新しいロケーションに書き込む。自動再割り当てが指定されておらず、元のロケーションに対する再書き込みも指定されていない場合、回復されたデータは保護領域に保存することができる。この保護領域は、その後の回復不能なエラーの場合にチェックすることが可能であり、それによって、消失したデータがこの保護区域内に存在するかどうかを調べることができる。
【００３８】
ここで詳細に説明したハードディスクドライブにおいて自主的データスクラビングを行うための特定のシステムおよび方法によって、本発明の上記の目的を十分に達成することができる。当然のことながら、これは現在のところ本発明の好ましい実施例であり、そのため本発明によって広範囲に検討される主題を代表するものであり、本発明の適用範囲には当業者にとって明らかなその他の実施例が全面的に含まれており、従って、本発明の適用範囲は、添付の特許請求の範囲以外によって限定されることはない。ここで、単数の要素の参照は、特に明記されていない限り「１つおよび唯一」を意味することを意図してはおらず、むしろ「１つ以上」を意味する。装置または方法においては、本発明によって解決するように求められた問題の一つ一つに取り組むことは必要ではなく、また本特許請求の範囲によって包括される必要はない。その上、本開示における要素、構成部分、または方法ステップは、これら要素、構成部分、または方法ステップが特許請求の範囲に明示的に列挙されているかどうかにかかわらず、公衆に開放されることを意図してはいない。ここで明白な定義が行われていない場合、特許請求の範囲の用語には、本明細書およびファイル履歴と矛盾することのないすべての通常の使い慣れた意味が与えられる。
【図面の簡単な説明】
【００３９】
【図１】クライアントのプロセッサと連携したＲＡＩＤシステムを示すブロック図である。
【図２】図１に示されるシステムのハードディスクドライブ（ＨＤＤ）の１つを示すブロック図である。
【図３】データスクラブプロセスのフローチャートであり、保証されたスクラブレートをサポートするためのオプションのロジックを示す。
【図４】図３に示されるスクラブプロセスを中断するプロセスのフローチャートであり、スクラブの再開を一定のまたは適応的期間だけ遅延させるためのオプションのロジック、および便宜的データスクラビングのオプションのロジックを示す。
【図５】図３のスクラブプロセスを使用して、保証されたスクラブレートを確定するプロセスを示すフローチャートである。
【図６】図３のスクラブプロセスの間にスクラブすべき次のデータユニットを選択するための好ましいプロセスを示すフローチャートである。
【図７】図４のスクラブ中断ロジックの間に、ユーザによって要求された読み取りまたは書き込みを実行するための好ましいプロセスを示すフローチャートである。
【図８】好ましいデータバンドテーブルを示す。
【図９】図８のテーブルを維持管理するための好ましいプロセスを示すフローチャートである。
【図１０】スクラブすべきユニットを選択するための好ましいプロセスを示すフローチャートである。
【符号の説明】
【００４０】
１０…ＲＡＩＤシステム、１２…ＲＡＩＤコントローラ、１４…クライアントプロセッサ、１６…ハードディスクドライブ（ＨＤＤ）、１８…ドライブコントローラ、２０…データストレージディスク、２２…ソリッドステートデータキャッシュ。
【図１】
2005050346.tif 000003
【図２】
2005050346.tif 000004
【図３】
2005050346.tif 000005
【図４】
2005050346.tif 000006
【図５】
2005050346.tif 000007
【図６】
2005050346.tif 000008
【図７】
2005050346.tif 000009
【図８】
2005050346.tif 000010
【図９】
2005050346.tif 000011
【図１０】
2005050346.tif 000012