(57)【要約】【課題】記憶装置上の広範囲に及ぶ障害発生領域に関するリカバリ処理を早期に実行させること。【解決手段】ストレージ制御装置１は、記憶部１ａと制御部１ｂを有する。制御部１ｂは、記憶装置２へのアクセス時にエラーが検出された場合、アクセス先の論理アドレスに割り当てられている物理アドレスを、記憶部１ａが記憶するエラー管理情報１ａ１に登録し、エラー管理情報１ａ１に基づいて、物理記憶領域を異なる分割条件を用いて分割することで生成される複数の分割領域毎に、エラー検出回数を集計し、所定の基準に基づいてエラー検出回数が多いと特定されたリカバリ対象領域に対して、リカバリ対象領域の分割時に用いられた分割条件に対応するリカバリ方法を選択し、リカバリ対象領域に対応する論理記憶領域上の論理アドレスに対するリカバリ処理を、選択されたリカバリ方法を用いて記憶装置２に実行させる。【選択図】図１
2019003506.tif 000002
【特許請求の範囲】
【請求項１】
エラー管理情報を記憶する記憶部と、制御部とを有し、
前記制御部は、
記憶装置に対応する論理記憶領域における論理アドレスを指定することで前記記憶装置にアクセスし、
前記記憶装置へのアクセス時にエラーが検出された場合、アクセス先の論理アドレスに割り当てられている、前記記憶装置の物理記憶領域における物理アドレスを前記エラー管理情報に登録し、
前記エラー管理情報に基づいて、前記物理記憶領域を異なる分割条件を用いて分割することで生成される複数の分割領域毎に、エラー検出回数を集計し、
前記複数の分割領域の中から、所定の基準に基づいて前記エラー検出回数が多いと特定されたリカバリ対象領域に対して、複数のリカバリ方法の中から、前記リカバリ対象領域の分割時に用いられた前記分割条件に対応するリカバリ方法を選択し、
前記リカバリ対象領域に対応する前記論理記憶領域上のリカバリ対象論理アドレスに対するリカバリ処理を、選択されたリカバリ方法を用いて前記記憶装置に実行させる、
ストレージ制御装置。
【請求項２】
前記リカバリ処理を実行させる処理では、
前記複数のリカバリ方法のうち第１のリカバリ方法が選択された場合、前記リカバリ対象論理アドレスに割り当てられている前記物理記憶領域上の物理アドレスを変更するように前記記憶装置に要求し、
前記複数のリカバリ方法のうち第２のリカバリ方法が選択された場合、前記リカバリ対象領域における障害を復旧させる処理の実行を前記記憶装置に要求する、
請求項１記載のストレージ制御装置。
【請求項３】
前記記憶装置は、複数のディスク状記録媒体を有し、
前記複数の分割領域は、前記複数のディスク状記録媒体が有する複数の記録面のそれぞれを分割した複数の第１の分割領域と、前記複数の記録面にそれぞれ対応する複数の第２の分割領域とを含み、
前記選択では、前記リカバリ対象領域として前記複数の第１の分割領域の１つが検出された場合、前記第１のリカバリ方法を選択し、前記リカバリ対象領域として前記複数の第２の分割領域の１つが検出された場合、前記第２のリカバリ方法を選択する、
請求項２記載のストレージ制御装置。
【請求項４】
前記リカバリ処理を実行させる処理では、前記第２のリカバリ方法が選択された場合、前記複数のディスク状記録媒体を読み書きするヘッドをアンロードし、その後に再度ロードするように前記記憶装置に要求する、
請求項３記載のストレージ制御装置。
【請求項５】
前記複数の第１の分割領域は、前記複数の記録面のそれぞれを中心から放射状の線によって分割した複数の第３の分割領域と、前記複数の記録面に形成された各トラックに対応する複数の第４の分割領域とを含む、
請求項３または４記載のストレージ制御装置。
【請求項６】
前記第１のリカバリ方法が選択された場合、前記リカバリ処理を実行させる処理は、
前記リカバリ対象論理アドレスに格納されていたデータを、他の記憶装置に格納されている、前記データに対応する冗長データを用いて復元し、
復元された前記データを前記リカバリ対象論理アドレスに書き込むように前記記憶装置に要求する、
処理をさらに含む、
請求項２乃至５のいずれか１つに記載のストレージ制御装置。
【請求項７】
コンピュータが、
記憶装置に対応する論理記憶領域における論理アドレスを指定することで前記記憶装置にアクセスし、
前記記憶装置へのアクセス時にエラーが検出された場合、アクセス先の論理アドレスに割り当てられている、前記記憶装置の物理記憶領域における物理アドレスをエラー管理情報に登録し、
前記エラー管理情報に基づいて、前記物理記憶領域を異なる分割条件を用いて分割することで生成される複数の分割領域毎に、エラー検出回数を集計し、
前記複数の分割領域の中から、所定の基準に基づいて前記エラー検出回数が多いと特定されたリカバリ対象領域に対して、複数のリカバリ方法の中から、前記リカバリ対象領域の分割時に用いられた前記分割条件に対応するリカバリ方法を選択し、
前記リカバリ対象領域に対応する前記論理記憶領域上のリカバリ対象論理アドレスに対するリカバリ処理を、選択されたリカバリ方法を用いて前記記憶装置に実行させる、
ストレージ制御方法。
【請求項８】
コンピュータに、
記憶装置に対応する論理記憶領域における論理アドレスを指定することで前記記憶装置にアクセスし、
前記記憶装置へのアクセス時にエラーが検出された場合、アクセス先の論理アドレスに割り当てられている、前記記憶装置の物理記憶領域における物理アドレスをエラー管理情報に登録し、
前記エラー管理情報に基づいて、前記物理記憶領域を異なる分割条件を用いて分割することで生成される複数の分割領域毎に、エラー検出回数を集計し、
前記複数の分割領域の中から、所定の基準に基づいて前記エラー検出回数が多いと特定されたリカバリ対象領域に対して、複数のリカバリ方法の中から、前記リカバリ対象領域の分割時に用いられた前記分割条件に対応するリカバリ方法を選択し、
前記リカバリ対象領域に対応する前記論理記憶領域上のリカバリ対象論理アドレスに対するリカバリ処理を、選択されたリカバリ方法を用いて前記記憶装置に実行させる、
処理を実行させるストレージ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はストレージ制御装置、ストレージ制御方法およびストレージ制御プログラムに関する。
【背景技術】
【０００２】
記憶装置に対するアクセス時にエラーが発生した場合に、エラーが発生しないようにする何らかのリカバリ処理を記憶装置に実行させることがある。例えば、近年のＨＤＤ（Hard Disk Drive）は、ＨＤＤ内の物理記憶領域の物理アドレスではなく、論理アドレスが指定されてアクセスを受け付けるようになっている。このようなＨＤＤに制御装置がアクセスした際にエラーが発生した場合、制御装置は、アクセス先の論理アドレスに対する物理アドレスの割り当てを変更するようにＨＤＤに要求できる。これにより、同じ論理アドレスに対するその後のアクセス時にエラーが発生しないようになり、制御装置は、ＨＤＤを継続して使用できる。なお、ＳＣＳＩ（Small Computer System Interface）規格では、上記のように物理アドレスの割り当て変更を要求するためのＲｅａｓｓｉｇｎ  Ｂｌｏｃｋｓコマンドが規定されている。
【０００３】
また、エラーの発生に伴って実行される処理に関して、次のような技術が提案されている。例えば、同一のヘッド番号とシリンダ番号で特定されるセクタのアクセスエラーに対して、同一のエラーリカバリログを使用してエラーリカバリステップの実行順序を決定するデータ記憶装置が提案されている。また、データの読み取りエラーが発生した位置を示すエラー位置情報を基にエラーの周期性が検出されたとき、ディスク装置の故障予測を通知するディスク故障予測装置が提案されている。さらに、リードエラーが発生したとき、リードリトライ処理の結果に基づいて、リードエラーの発生要因をＭＲ（Magnetoresistive）ヘッドのサーマルアスペリティ現象であることを推定するディスク記録再生装置が提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−３３８７３４号公報
【特許文献２】国際公開第２００８／１１４３５９号
【特許文献３】特開平９−２５１７２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、記憶装置では、記録媒体上に比較的広範囲に及ぶ障害が発生することがある。例えば、記録媒体に傷が発生する場合がある。
障害の発生は、例えば、ホスト装置からの要求に応じて制御装置が記憶装置にアクセスしたときに、エラーが発生することで検出される。しかし、この検出方法では、広範囲に及ぶ障害発生領域の全体がアクセスされるとは限らないので、その領域全体を検出することは難しい。
【０００６】
そこで、例えば、記憶装置全体を少しずつスキャンしながら正常な読み出しが可能かをチェックするパトロールを実行する方法がある。この方法により、広範囲に及ぶ障害発生領域の全体を検出できる可能性は高まる。しかし、大容量の記憶装置では、パトロールによって記憶装置の全体をチェックするのに長い時間がかかる。そのため、広範囲に及ぶ障害発生領域の全体が検出されるまでに長い時間がかかる可能性がある。その結果、広範囲に及ぶ障害発生領域に関するリカバリ処理を早期に実行させることが難しいという問題がある。
【０００７】
１つの側面では、本発明では、記憶装置上の広範囲に及ぶ障害発生領域に関するリカバリ処理を早期に実行させることが可能なストレージ制御装置、ストレージ制御方法およびストレージ制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
１つの態様では、ストレージ制御装置が提供される。このストレージ制御装置は、記憶部と制御部とを有する。記憶部は、エラー管理情報を記憶する。制御部は、記憶装置に対応する論理記憶領域における論理アドレスを指定することで記憶装置にアクセスし、記憶装置へのアクセス時にエラーが検出された場合、アクセス先の論理アドレスに割り当てられている、記憶装置の物理記憶領域における物理アドレスをエラー管理情報に登録し、エラー管理情報に基づいて、物理記憶領域を異なる分割条件を用いて分割することで生成される複数の分割領域毎に、エラー検出回数を集計し、複数の分割領域の中から、所定の基準に基づいてエラー検出回数が多いと特定されたリカバリ対象領域に対して、複数のリカバリ方法の中から、リカバリ対象領域の分割時に用いられた分割条件に対応するリカバリ方法を選択し、リカバリ対象領域に対応する論理記憶領域上のリカバリ対象論理アドレスに対するリカバリ処理を、選択されたリカバリ方法を用いて記憶装置に実行させる。
【０００９】
また、１つの態様では、ストレージ制御方法が提供される。このストレージ制御方法は、コンピュータが、記憶装置に対応する論理記憶領域における論理アドレスを指定することで記憶装置にアクセスし、記憶装置へのアクセス時にエラーが検出された場合、アクセス先の論理アドレスに割り当てられている、記憶装置の物理記憶領域における物理アドレスをエラー管理情報に登録し、エラー管理情報に基づいて、物理記憶領域を異なる分割条件を用いて分割することで生成される複数の分割領域毎に、エラー検出回数を集計し、複数の分割領域の中から、所定の基準に基づいてエラー検出回数が多いと特定されたリカバリ対象領域に対して、複数のリカバリ方法の中から、リカバリ対象領域の分割時に用いられた分割条件に対応するリカバリ方法を選択し、リカバリ対象領域に対応する論理記憶領域上のリカバリ対象論理アドレスに対するリカバリ処理を、選択されたリカバリ方法を用いて記憶装置に実行させる。
【００１０】
また、１つの態様では、ストレージ制御プログラムが提供される。このストレージ制御プログラムは、コンピュータに、記憶装置に対応する論理記憶領域における論理アドレスを指定することで記憶装置にアクセスし、記憶装置へのアクセス時にエラーが検出された場合、アクセス先の論理アドレスに割り当てられている、記憶装置の物理記憶領域における物理アドレスをエラー管理情報に登録し、エラー管理情報に基づいて、物理記憶領域を異なる分割条件を用いて分割することで生成される複数の分割領域毎に、エラー検出回数を集計し、複数の分割領域の中から、所定の基準に基づいてエラー検出回数が多いと特定されたリカバリ対象領域に対して、複数のリカバリ方法の中から、リカバリ対象領域の分割時に用いられた分割条件に対応するリカバリ方法を選択し、リカバリ対象領域に対応する論理記憶領域上のリカバリ対象論理アドレスに対するリカバリ処理を、選択されたリカバリ方法を用いて記憶装置に実行させる、処理を実行させる。
【発明の効果】
【００１１】
１つの側面では、記憶装置上の広範囲に及ぶ障害発生領域に関するリカバリ処理を早期に実行させることができる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態のストレージ制御装置の一例を示す図である。
【図２】第２の実施の形態のストレージシステムの一例を示す図である。
【図３】ＣＭのハードウェアの一例を示す図である。
【図４】ＣＭの機能の一例を示す図である。
【図５】エラー管理テーブルの一例を示す図である。
【図６】セクタ管理テーブルの一例を示す図である。
【図７】トラック管理テーブルの一例を示す図である。
【図８】磁気ディスク面に傷が存在する場合のイメージ図である。
【図９】ＨＤＤが有するヘッドとランプとの関係を示す図である。
【図１０】ヘッド管理テーブルの一例を示す図である。
【図１１】エラー発生時の処理の一例を示すフローチャートである。
【図１２】分割領域単位での障害発生判定処理の一例を示すフローチャートである。
【図１３】セクタ範囲のリカバリ処理の一例を示すフローチャートである。
【図１４】トラックのリカバリ処理の一例を示すフローチャートである。
【図１５】磁気ディスク面のリカバリ処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、実施の形態について図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態のストレージ制御装置の一例を示す図である。ストレージ制御装置１は、記憶装置２に接続されている。記憶装置２は、例えば、ＨＤＤである。
【００１４】
ストレージ制御装置１は、記憶部１ａおよび制御部１ｂを有する。記憶部１ａは、ＲＡＭ（Random Access Memory）などの揮発性記憶装置でもよいし、ＨＤＤやフラッシュメモリなどの不揮発性記憶装置でもよい。制御部１ｂは、例えば、プロセッサである。プロセッサには、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。また、制御部１ｂは、マルチプロセッサであってもよい。
【００１５】
記憶部１ａは、エラー管理情報１ａ１を記憶する。エラー管理情報１ａ１には、記憶装置２の物理記憶領域のうち、ストレージ制御装置１からのアクセス時にエラーが発生した領域の物理アドレスが登録される。
【００１６】
制御部１ｂは、記憶装置２に対応する論理記憶領域における論理アドレスを指定することで、記憶装置２にアクセスする。また、制御部１ｂは、記憶装置２へのアクセス時にエラーが検出された場合、アクセス先の論理アドレスに割り当てられている、記憶装置２の物理記憶領域における物理アドレスを、エラー管理情報１ａ１に登録する。
【００１７】
制御部１ｂは、記憶装置２の物理記憶領域を複数種類の分割条件を用いて分割し、複数の分割領域を生成して管理を行う。そして、制御部１ｂは、複数の分割領域毎にエラー管理情報１ａ１に基づいて、エラー検出回数を集計する。例えば、記憶装置２が、磁気ディスク２ａ〜２ｄを有するＨＤＤであるとする。なお、ここでは説明を簡単にするため、磁気ディスク２ａ〜２ｄのそれぞれの一方の面にのみデータが記録されるとする。このような記憶装置２では、例えば、次のように分割領域を生成できる。
【００１８】
例えば、磁気ディスク２ａ〜２ｄのそれぞれを分割する、という第１の分割条件を用いて分割領域が生成される。図１の例では、磁気ディスク２ａ〜２ｄのそれぞれが６つに等分割されている。これにより、例えば、磁気ディスク２ａ上には分割領域２ａ１，２ａ２，２ａ３，・・・が生成されている。分割方法としては、例えば、磁気ディスク２ａ〜２ｄのそれぞれを、中心から放射状に延びる線に沿って分割する方法がある。あるいは、磁気ディスク２ａ〜２ｄの各トラックを、分割領域とする方法もある。
【００１９】
また、磁気ディスクを単位として分割する、という第２の分割条件を用いて分割領域が生成される。この場合、磁気ディスク２ａ〜２ｄのそれぞれが分割領域となる。
なお、本実施の形態の分割条件は、記憶装置２の内部での物理記憶領域と論理記憶領域との間の割り当て管理とは独立して、ストレージ制御装置１の制御部１ｂが独自の基準により記憶装置２の物理記憶領域を管理するためのものである。
【００２０】
このようにして生成された分割領域毎にエラー検出回数が集計されると、制御部１ｂは、これらの分割領域の中から、所定の基準に基づいてエラー検出回数が多い分割領域（以下、「リカバリ対象領域」と呼ぶ）を特定する。制御部１ｂは、リカバリ対象領域が特定された場合、あらかじめ決められた複数のリカバリ方法の中から、リカバリ対象領域の分割時に用いられた分割条件に対応するリカバリ方法を選択する。そして、制御部１ｂは、リカバリ対象領域に対応する論理記憶領域上の論理アドレスに対するリカバリ処理を、選択されたリカバリ方法を用いて記憶装置２に実行させる。
【００２１】
例えば、分割領域２ａ３をリカバリ対象領域として検出した場合、制御部１ｂは、上記の第１の条件に対応するリカバリ方法を選択する。この場合に選択されるリカバリ方法の例としては、論理アドレスに割り当てられている物理アドレスを変更する、という方法がある。この方法を用いた場合、制御部１ｂは、例えば、リカバリ対象領域である分割領域２ａ３に対応する論理記憶領域上の論理アドレスを特定し、特定された各論理アドレスについて、物理アドレスの割り当てを変更するように記憶装置２に要求する。記憶装置２は、特定された各論理アドレスに割り当てられていた物理アドレス（すなわち、分割領域２ａ３の物理アドレス）を、未使用の他の分割領域２ｄ１の物理アドレスに変更する。
【００２２】
分割領域２ａ３のように磁気ディスクを分割した領域においてエラーが多数発生した場合、その領域に傷などの局所的な障害が発生している可能性がある。そこで、分割領域２ａ３の代わりに分割領域２ｄ１を使用するように物理アドレスの割り当てを変更することで、制御部１ｂは、分割領域２ａ３の物理アドレスに対応付けられていた論理アドレスに対して、正常にアクセスできるようになる。
【００２３】
また、例えば、磁気ディスク２ａをリカバリ対象領域として検出した場合、制御部１ｂは、上記の第２の条件に対応するリカバリ方法を選択する。この場合に選択されるリカバリ方法の例としては、磁気ヘッドをアンロードさせて、磁気ヘッドに付着した汚れを除去する、という方法がある。この方法を用いた場合、制御部１ｂは、磁気ヘッドをアンロードするように記憶装置２に要求する。記憶装置２は、磁気ヘッドを磁気ディスク２ａから退避させてランプに接触させる。これにより、磁気ヘッドに付着した汚れが除去される。その後、制御部１ｂは、磁気ヘッドを再度ロードするように記憶装置２に要求し、記憶装置２は、磁気ヘッドをロードする。
【００２４】
磁気ディスク２ａでエラーが多数発生した場合、そのエラー要因は、磁気ディスク２ａ上の局所的な障害より、磁気ディスク２ａ全体に関連する障害である可能性が高い。その一例として、磁気ヘッドに汚れが付着している可能性がある。そこで、磁気ヘッドのアンロードが行われて磁気ヘッドの汚れが除去されることで、制御部１ｂは、磁気ディスク２ａの物理アドレスに対応付けられていた論理アドレスに対して、正常にアクセスできるようになる。
【００２５】
以上の処理によれば、制御部１ｂは、ある分割領域がエラー検出回数が多いリカバリ対象領域と特定された場合、そのリカバリ対象領域内の広範囲に及ぶ障害が発生したと推定し、そのリカバリ対象領域に関するリカバリ処理を記憶装置２に実行させる。これにより、制御部１ｂからのアクセスに伴うエラーの発生によって障害発生領域の全体が検出されるより前に、障害発生領域の全体の存在位置が検出され、リカバリ処理が実行される。このため、広範囲に及ぶ障害発生領域を早期に検出できるようになり、その結果、その障害発生領域に関するリカバリ処理を早期に開始できる。
【００２６】
このように障害発生領域に関するリカバリ処理が早期に実行されることで、制御部１ｂによる記憶装置２に対するその後のアクセス時に、エラーが発生する回数が減少する。その結果、ストレージ制御装置１から記憶装置２に対するアクセス性能が向上する。また、早期にリカバリ処理が実行されることで、記憶装置２の延命を図ることもできる。
【００２７】
さらに、上記処理では、複数のリカバリ方法の中から、リカバリ対象領域の分割時に用いられた分割条件に対応するリカバリ方法が選択される。これにより、制御部１ｂは、リカバリ対象領域の性質に応じた適切なリカバリ方法を用いて、リカバリ処理を記憶装置２に実行させることができる。
【００２８】
［第２の実施の形態］
図２は、第２の実施の形態のストレージシステムの一例を示す図である。図２に示すストレージシステムは、ストレージ装置１００およびホスト装置４００を含む。ストレージ装置１００とホスト装置４００とは、例えば、ファイバチャネル（ＦＣ：Fibre Channel）やｉＳＣＳＩ（Internet Small Computer System Interface）などを用いたＳＡＮ（Storage Area Network）を介して接続される。
【００２９】
ストレージ装置１００は、ＣＭ（Controller Module）２００およびＤＥ（Device Enclosure）３００を有する。ＣＭ２００は、ホスト装置４００からのアクセス要求に応じて、ＤＥ３００に搭載されたＨＤＤ３０１，３０２，・・・に対するデータの読み書きを行う。ＣＭ２００は、ＤＥ３００内の複数のＨＤＤによって実現される記憶領域をＲＡＩＤによって管理し、これらの記憶領域に対するアクセスを制御する。ＤＥ３００は、ホスト装置４００からの要求に応じたアクセス制御の対象となるＨＤＤ３０１，３０２，・・・が搭載されたディスクアレイ装置である。
【００３０】
図３は、ＣＭのハードウェアの一例を示す図である。ＣＭ２００は、プロセッサ２０１、ＲＡＭ２０２、ＳＳＤ２０３、ＣＡ（Channel Adapter）２０４およびＤＡ（Disk Adapter）２０５を有する。
【００３１】
プロセッサ２０１は、ＣＭ２００の情報処理を制御する。プロセッサ２０１は、複数のプロセッシング要素を含むマルチプロセッサであってもよい。
ＲＡＭ２０２は、ＣＭ２００の主記憶装置である。ＲＡＭ２０２は、プロセッサ２０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ２０２は、プロセッサ２０１による処理に用いる各種データを記憶する。
【００３２】
ＳＳＤ２０３は、ＣＭ２００の補助記憶装置である。ＳＳＤ２０３は、不揮発性の半導体メモリである。ＳＳＤ２０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、ＣＭ２００は、補助記憶装置として、ＳＳＤ２０３の代わりにＨＤＤを備えていてもよい。
【００３３】
ＣＡ２０４は、ホスト装置４００と通信するためのインタフェースである。ＤＡ２０５は、ＤＥ３００と通信するためのインタフェースである。
図４は、ＣＭの機能の一例を示す図である。ＣＭ２００は、記憶部２１０、Ｉ／Ｏ（Input /Output）制御部２２０およびＲＡＩＤ制御部２３０を有する。
【００３４】
記憶部２１０は、ＲＡＭ２０２またはＳＳＤ２０３に確保した記憶領域として実装される。記憶部２１０は、エラーカウンタテーブル２１１、エラー管理テーブル２１２、セクタ管理テーブル２１３、トラック管理テーブル２１４およびヘッド管理テーブル２１５を記憶する。
【００３５】
エラーカウンタテーブル２１１は、ＤＥ３００内のＨＤＤ３０１，３０２，・・・のそれぞれにおいて検出されたエラーの数を保持する。一方、エラー管理テーブル２１２、セクタ管理テーブル２１３、トラック管理テーブル２１４およびヘッド管理テーブル２１５は、ＤＥ３００内のＨＤＤ３０１，３０２，・・・のそれぞれについて個別に生成され、記憶部２１０に記憶される。
【００３６】
エラー管理テーブル２１２は、エラーが発生した箇所の情報を保持する。セクタ管理テーブル２１３は、ＨＤＤ上のセクタ領域単位で発生したエラー数を保持する。セクタ領域とは、磁気ディスクの記録面を放射状に等間隔で分割して得られる分割領域である。トラック管理テーブル２１４は、トラック単位でエラーが発生したエラー数を管理する。ヘッド管理テーブル２１５は、ヘッド番号が示す磁気ディスクの記録面単位でエラーが発生したエラー数を管理する。
【００３７】
Ｉ／Ｏ制御部２２０およびＲＡＩＤ制御部２３０は、例えば、プロセッサ２０１が実行するプログラムのモジュールとして実装される。
ＣＭ２００には、ホスト装置４００からのアクセス対象となる論理ボリュームが設定されている。Ｉ／Ｏ制御部２２０は、ホスト装置４００から論理ボリュームに対するアクセス要求を受け付ける。また、ＣＭ２００には、ＤＥ３００内の複数のＨＤＤによって実現されるＲＡＩＤグループが設定されている。ＲＡＩＤグループとは、複数のＨＤＤによって実現され、所定のＲＡＩＤレベルにしたがって読み書きが制御される論理記憶領域である。ＲＡＩＤ制御部２３０は、ＲＡＩＤグループに対するアクセスを制御する。
【００３８】
１つのＲＡＩＤグループに対しては、１以上の論理ボリュームを割り当て可能である。以下、説明を簡単にするために、１つのＲＡＩＤグループに対して１つの論理ボリュームが割り当てられるものとする。この場合、Ｉ／Ｏ制御部２２０は、ホスト装置４００から論理ボリューム上のアクセス先を示す論理アドレスを受信し、受信した論理アドレスをそのままＲＡＩＤ制御部２３０に指定することで、論理アドレスに対応するデータのＩ／Ｏ処理を実行させる。データの読み出しを要求した場合、Ｉ／Ｏ制御部２２０は、読み出されたデータをＲＡＩＤ制御部２３０から受信し、そのデータをホスト装置４００に送信する。また、データの書き込みを要求した場合、Ｉ／Ｏ制御部２２０は、ＲＡＩＤ制御部２３０から書き込み完了通知を受信すると、ホスト装置４００に対して書き込み完了を示す応答を行う。
【００３９】
なお、１つのＲＡＩＤグループに対して複数の論理ボリュームが割り当てられる場合、Ｉ／Ｏ制御部２２０は、ホスト装置４００から受信した論理アドレスを、ＲＡＩＤグループに対応する論理記憶領域（ＲＬＵ：RAID Logical Unit）上の論理アドレスに変換する。Ｉ／Ｏ制御部２２０は、変換後の論理アドレスをＲＡＩＤ制御部２３０に出力する。
【００４０】
ＲＡＩＤ制御部２３０は、Ｉ／Ｏ制御部２２０から指定された論理アドレスに基づいて、ＤＥ３００内のＨＤＤ３０１，３０２，・・・の中からアクセス対象とする１以上のＨＤＤを特定し、特定したＨＤＤに対してアクセスする。例えば、ＲＡＩＤ制御部２３０は、Ｉ／Ｏ制御部２２０からデータの書き込みが要求されると、そのデータが複数のＨＤＤに冗長化されるように書き込み制御を行う。
【００４１】
具体的な例として、６台のＨＤＤによってＲＡＩＤ−５で制御されるＲＡＩＤグループが設定されているとする。この場合、ＲＡＩＤ制御部２３０は、Ｉ／Ｏ制御部２２０から書き込みが要求されたデータを分割し、連続する５個の分割データとそれらに基づくパリティとを、６台のＨＤＤにおける同一ストライプ番号の領域に分散させて書き込む。
【００４２】
さらに、ＲＡＩＤ制御部２３０は、ＨＤＤに対するアクセス時に発生したエラー発生回数をエラーカウンタテーブル２１１に登録し、登録されたエラー発生回数を基にＨＤＤの故障を判定する統計加点機能を有する。本実施の形態では、エラーカウンタテーブル２１１には、ＨＤＤに対する読み出し要求時に発生したエラー発生回数を示すカウント値が、ＨＤＤ毎に登録される。
【００４３】
例えば、ＲＡＩＤ制御部２３０は、Ｉ／Ｏ制御部２２０からの要求に応じてあるＨＤＤに読み出しを要求したときにエラーを検出した場合、エラーカウンタテーブル２１１に登録された、読み出し要求先のＨＤＤに対応するカウント値をインクリメントする。また、ＲＡＩＤ制御部２３０は、ＨＤＤからデータを正常に読み出せるかを試すパトロール処理を定期的に実行する。パトロール処理では、一定時間間隔で、ＨＤＤ上のシーケンシャルなアドレスが付与された所定数のブロックからデータが読み出される。データの読み出し時にエラーが発生した場合、ＲＡＩＤ制御部２３０は、エラーカウンタテーブル２１１に登録された、読み出し要求先のＨＤＤに対応するカウント値をインクリメントする。そして、ＲＡＩＤ制御部２３０は、あるＨＤＤについてのエラーのカウント値が所定の閾値を超えた場合、そのＨＤＤが故障したと判定して、そのＨＤＤを切り離す。
【００４４】
ところで、ＤＥ３００に搭載されたＨＤＤ３０１，３０２，・・・のそれぞれは、記録媒体として複数の磁気ディスクを備える。ここで、ＨＤＤ３０１，３０２，・・・のそれぞれがＣＭ２００に認識させている記憶容量は、実際にＨＤＤ３０１，３０２，・・・のそれぞれが備える磁気ディスクの物理記憶容量より小さい。
【００４５】
例えば、ＤＥ３００内のあるＨＤＤは、１００ＧＢの記憶容量をＣＭ２００に認識させているが、実際には１５０ＧＢの物理記憶容量を有するとする。この場合、ＣＭ２００は、ＨＤＤを１００ＧＢの論理記憶領域として認識しており、その論理記憶領域上の論理ブロックアドレス（ＬＢＡ：Logical Block Address）を指定することでＨＤＤにアクセスする。一方、ＨＤＤに内蔵されたコントローラは、ＬＢＡと、磁気ディスクによる物理記憶領域上の物理アドレスとを対応付けて管理する。ＬＢＡには、１５０ＧＢの物理記憶領域のうち１００ＧＢの領域のみが対応付けられる。
【００４６】
初期状態では、１５０ＧＢの物理記憶領域のうち残りの５０ＧＢは、未使用の交代領域として用意されている。そして、ＨＤＤのコントローラは、ＣＭ２００からの要求に応じて、あるＬＢＡに対応付けられている物理アドレスを、交代領域の物理アドレスに付け替えることができる。以下、このようにＨＤＤのＬＢＡに対応する物理アドレスを付け替える処理を「交代処理」と記載する場合がある。
【００４７】
例えば、ＣＭ２００のＲＡＩＤ制御部２３０は、ＨＤＤのあるＬＢＡに対する読み出しを要求したときにエラーが発生した場合、そのＬＢＡについての交代処理の実行をＨＤＤに指示する。なお、このエラー発生は、Ｉ／Ｏ制御部２２０からの要求に応じたＨＤＤへの読み出し要求時と、パトロール処理におけるＨＤＤへの読み出し要求時のいずれのケースも含まれる。
【００４８】
実行指示を受信したＨＤＤのコントローラは、そのＬＢＡに対応する物理アドレスを交代領域の物理アドレスに付け替える。続いて、ＲＡＩＤ制御部２３０は、そのＨＤＤと同一のＲＡＩＤグループに属する他のＨＤＤに記録されたデータを用いて、読み出しに失敗したデータを復元する。そして、ＲＡＩＤ制御部２３０は、ＨＤＤに対して、読み出しエラーが発生したＬＢＡを指定して、復元されたデータの書き込みを要求する。すると、ＨＤＤのコントローラは、書き込みが要求されたデータを、交代後の物理アドレスが示す物理記憶領域に書き込む。
【００４９】
このような処理により、読み出しエラーが発生したＬＢＡがリカバリされるので、ＲＡＩＤ制御部２３０はそれ以後、リカバリされたＬＢＡからのデータ読み出しを正常に実行できるようになる。すなわち、ＲＡＩＤ制御部２３０は、上記のように交代処理とデータ復元とを組み合わせることで、ＨＤＤからの読み出しエラーが発生した場合でも、最長で交代領域のすべてが使用済みになるまでの間、ＨＤＤを交換せずにそのまま使用し続けることができる。
【００５０】
ここで、以上の処理では、ＨＤＤ上の障害発生領域に対して実際に読み出しが要求され、読み出しエラーが検出されることで、障害発生領域が検出される。そして、読み出しエラーが検出されたＬＢＡについての交代処理が実行されることで、その後には同じＬＢＡに対する読み出しを、エラーを検出することなく正常に実行できるようになる。
【００５１】
しかし、このような障害発生領域の検出方法では、例えば磁気ディスク上の傷のようなある程度広範囲に及ぶ障害がＨＤＤ上で発生した場合に、その障害発生領域全体を早期に検出することが難しいという問題がある。例えば、定期的にパトロール処理が実行されることで、より広範囲の障害発生領域を検出できる可能性は高まる。しかし、大容量のＨＤＤでは、パトロール処理によってＨＤＤの記憶領域全体をスキャンするには非常に長い時間がかかる。例えば、パトロール処理により１秒間隔で２ＭＢずつ読み出しを行ったとしても、１０ＴＢのＨＤＤの記憶領域全体をスキャンするのに約２ヶ月かかってしまう。
【００５２】
広範囲に及ぶ障害発生領域を早期に検出できないと、リカバリ機能を備えているにもかかわらず、今後に読み出しエラーが発生し得るＬＢＡが多数残ってしまうので、全体として読み出しエラーの発生回数が増加してしまう。その結果、ＨＤＤの読み出し性能が低下する。特に、Ｉ／Ｏ制御部２２０がホスト装置４００からの要求に応じてＲＡＩＤ制御部２３０にＨＤＤからの読み出しを要求した際の応答性能が低下する。その結果、ホスト装置４００からのアクセス要求に対する応答性能が低下してしまうという問題がある。
【００５３】
さらに、前述の統計加点機能が併用されて、読み出しエラーが発生するとエラーカウンタテーブル２１１の対応するカウント値がカウントアップされる仕様では、次のような問題がある。
【００５４】
統計加点機能が用いられた場合には、ある１つのＨＤＤにおける読み出しエラーの発生回数が多いほど、そのＨＤＤが故障と判定されるまでの時間が短くなる。このため、磁気ディスク上の広範囲で障害が発生し、読み出しエラーの発生回数が多くなると、交代領域のすべてが使用済みになるよりずっと前に、エラーカウンタテーブル２１１のカウント値に基づいてＨＤＤが故障と判定されてしまう可能性が高まる。
【００５５】
そこで、本実施の形態のＲＡＩＤ制御部２３０は、ＨＤＤの物理記憶領域における障害発生領域を、障害発生領域全体からのデータ読み出しを要求する前に推定し、推定された障害発生領域についての交代処理を実行させる。これにより、広範囲に及ぶ障害発生領域を早期に検出してリカバリすることができる。その結果、データ読み出しの要求時にエラーが検出される回数が減少するので、障害の発生によるＨＤＤの読み出し性能の低下を抑制できる。また、エラー検出回数の減少により、交代領域をできるだけ多く使用しながら、エラーカウンタテーブル２１１のカウント値に基づいてＨＤＤが故障と判定されるまでの時間を延長することができる。
【００５６】
具体的には、ＲＡＩＤ制御部２３０は、ＨＤＤからの読み出し要求時にエラーが発生したＬＢＡに対応付けられていた物理アドレスを、エラー管理テーブル２１２に登録する。ＲＡＩＤ制御部２３０は、セクタ管理テーブル２１３、トラック管理テーブル２１４およびヘッド管理テーブル２１５を用いて、ＨＤＤの物理記憶領域をそれぞれ異なる分割条件で分割した分割領域毎に、エラー発生回数を集計する。そして、ＲＡＩＤ制御部２３０は、エラー発生回数が所定の閾値を超えた分割領域について、その分割領域の広範囲において障害が発生していると推定し、その分割領域についての交代処理をＨＤＤに実行させる。
【００５７】
図５は、エラー管理テーブルの一例を示す図である。エラー管理テーブル２１２は、ＤＥ３００に搭載されたＨＤＤディスク毎に作成されて、記憶部２１０に格納される。エラー管理テーブル２１２は、ＬＢＡ、トラック番号、ヘッド番号、セクタ番号の項目を含む。
【００５８】
エラー管理テーブル２１２には、対応するＨＤＤのＬＢＡに対する読み出し要求時にエラーが検出されると、そのＬＢＡに対応するレコードが追加される。ＬＢＡの項目は、読み出しエラーが検出されたＬＢＡを示す。トラック番号、ヘッド番号およびセクタ番号の各項目は、エラー検出時にＬＢＡに対応付けられていた物理記憶領域の物理アドレスを示す。トラック番号の項目は、トラック（シリンダ）の識別番号を示す。ヘッド番号の項目は、ヘッドの識別番号を示す。ＨＤＤに複数の磁気ディスク（プラッタ）が搭載され、各磁気ディスクの両面にデータが記録されるとすると、ヘッドの識別番号は磁気ディスクの記録面（以下、「磁気ディスク面」と記載する）を識別する。セクタ番号の項目は、トラック番号が示すトラック上のセクタの識別番号を示す。
【００５９】
図６は、セクタ管理テーブルの一例を示す図である。セクタ管理テーブル２１３は、同じＨＤＤに対応するエラー管理テーブル２１２に基づいてＲＡＩＤ制御部２３０によって作成されて、記憶部２１０に格納される。セクタ管理テーブル２１３は、セクタ範囲、エラー数、エラー数閾値の項目を含む。
【００６０】
セクタ管理テーブル２１３には、あらかじめＨＤＤ上のセクタ範囲毎にレコードが登録される。セクタ範囲とは、ある磁気ディスク面を放射状に等分割して得られる分割領域である。セクタ範囲の項目は、セクタ範囲を示す物理アドレスを示す。各トラックにおけるセクタ数が同じ場合、セクタ範囲は、ヘッド番号と、所定数のセクタ番号との組み合わせによって表される。一方、各トラックにおけるセクタ数が異なる場合、セクタ範囲は、１つのヘッド番号に対して、各トラックのトラック番号と、トラック毎に設定された１以上のセクタ番号とを組み合わせることによって表される。
【００６１】
エラー数の項目は、セクタ範囲において検出されたエラーの合計数を示す。具体的には、エラー数の項目には、エラー管理テーブル２１２に登録されたレコードのうち、セクタ範囲に属する物理アドレスが登録されたレコードの合計数が登録される。エラー数閾値は、交代処理を実行するか否かを判断するための閾値である。基本的に、各セクタ範囲の容量が同じであれば、セクタ範囲毎のエラー数閾値も同じでよいが、セクタ範囲毎にエラー数閾値を変更することもできる。
【００６２】
以上のセクタ管理テーブル２１３を用いることで、ＨＤＤの物理記憶領域を分割した「セクタ範囲」という分割領域毎に、エラー発生回数が集計される。
図７は、トラック管理テーブルの一例を示す図である。トラック管理テーブル２１４は、同じＨＤＤに対応するエラー管理テーブル２１２に基づいてＲＡＩＤ制御部２３０によって作成されて、記憶部２１０に格納される。トラック管理テーブル２１４は、ヘッド番号、トラック番号、エラー数、エラー数閾値の項目を含む。
【００６３】
トラック管理テーブル２１４には、あらかじめＨＤＤ上のトラック毎にレコードが登録される。ヘッド番号の項目には、トラックが位置する磁気ディスク面を示すヘッド番号が登録される。トラック番号の項目は、トラック（シリンダ）の識別番号を示す。ヘッド番号とトラック番号とによって、１つの磁気ディスク面上の１つのトラックが識別される。
【００６４】
エラー数の項目は、トラックにおいて検出されたエラーの合計数を示す。具体的には、エラー数の項目には、エラー管理テーブル２１２に登録されたレコードのうち、該当トラックに属する物理アドレスが登録されたレコードの合計数が登録される。エラー数閾値は、交代処理を実行するか否かを判断するための閾値である。例えば、トラック毎にセクタ数が異なる場合、セクタ数が多いトラックほどエラー数閾値の値が大きく設定される。このとき、基本的には、トラック上のセクタ数とエラー数閾値との比率が、トラック毎に一定であることが望ましい。
【００６５】
以上のトラック管理テーブル２１４を用いることで、ＨＤＤの物理記憶領域を分割した「トラック」という分割領域毎に、エラー発生回数が集計される。
ここで、ＨＤＤ上の磁気ディスク面の障害として、磁気ディスク面に傷が存在する場合について説明する。
【００６６】
図８は、磁気ディスク面に傷が存在する場合のイメージ図である。図８（Ａ）は、磁気ディスク面５００上に傷５０１が存在している状態を示している。傷５０１は、磁気ディスク面５００のトラックを横切るように付いている。このように、トラックを横切るように付いた傷を「縦方向の傷」と表現する場合がある。
【００６７】
一般的に、ＨＤＤのＬＢＡに対しては、トラックに沿った方向に物理記憶領域（セクタ）が順次割り当てられるので、磁気ディスク面５００においてはトラックに沿った方向に対する読み出しアクセスが多い。このため、図８（Ａ）のようにトラックを横切るように付いた傷５０１の全体が読み出しアクセスによって検出されるまでには時間がかかる。
【００６８】
これに対して、傷５０１が放射状の点線で囲まれたセクタ範囲５０２に含まれている場合、セクタ管理テーブル２１３におけるセクタ範囲５０２に対応するレコードでは、エラー数がエラー数閾値を超える可能性が高い。したがって、ＲＡＩＤ制御部２３０は、傷５０１の全体の読み出しアクセスを行う前に、セクタ管理テーブル２１３に基づいてセクタ範囲５０２に傷５０１が存在することを推定できる。そして、ＲＡＩＤ制御部２３０は、セクタ範囲５０２全体についての交代処理を実行させることで、セクタ範囲５０２に割り当てられていたＬＢＡに対するアクセスを継続することができる。
【００６９】
一方、図８（Ｂ）は、磁気ディスク面５１０のトラック５１１に沿って傷５１２が存在している状態を示している。前述のパトロール処理では、一定時間間隔で、例えば数ＭＢといった一定の大きさの連続するＬＢＡの範囲から読み出しが行われる。このため、このようなトラック５１１に沿って付いた傷５１２は、パトロール処理によって発見しやすい。しかし、パトロール処理によって傷５１２の大部分が短時間で読み出され、エラーカウンタテーブル２１１のカウント値が急激に増加してしまうので、ＨＤＤが故障と判定されやすくなってしまう。
【００７０】
これに対して、トラック管理テーブル２１４におけるトラック５１１に対応するレコードでは、傷５１２の大部分が読み出される前に、エラー数がエラー数閾値を超える可能性が高い。したがって、ＲＡＩＤ制御部２３０は、傷５１２の大部分の読み出しアクセスを行う前に、トラック管理テーブル２１４に基づいてトラック５１１に傷５１２が存在することを推定できる。そして、ＲＡＩＤ制御部２３０は、トラック５１１全体についての交代処理を実行させることで、トラック５１１に割り当てられていたＬＢＡに対するアクセスを継続できる。
【００７１】
ところで、ＨＤＤで発生する障害の中には、交代処理を行わずに回復可能な障害がある。このような障害の発生が推定されるときにＨＤＤに交代処理を実行させてしまうと、ＨＤＤ上の交代領域が浪費されてしまい、その結果、ＨＤＤを継続して使用できる期間が短くなってしまう。そこで、ＲＡＩＤ制御部２３０は、このような回復可能な障害が発生したと推定すると、交代処理ではなく、障害を回復させるような別のリカバリ処理をＨＤＤに実行させる。
【００７２】
このような回復可能な障害の例として、ヘッドに埃やオイルなどの汚れが付着するケースがある。このケースでは、ＲＡＩＤ制御部２３０は、ヘッドのアンロードをＨＤＤに要求することで、障害を回復させることができる可能性がある。
【００７３】
図９は、ＨＤＤが有するヘッドとランプとの関係を示す図である。図９（Ａ）は、ヘッド６００のロードとアンロードについて示している。ＨＤＤの筐体の内部においては、磁気ディスク面５２０の外側にランプ６１０が配置されている。ヘッド６００が磁気ディスク面５２０の上にロードされている状態からアンロードされると、ヘッド６００はランプ６１０に挿入される。
【００７４】
図９（Ｂ）は、ランプ６１０の断面図である。ランプ６１０の内側には、凹凸部６１１が設けられている。アンロードされたヘッド６００がランプ６１０に挿入されると、ヘッド６００が凹凸部６１１に接触することで、ヘッド６００に付着していた埃やオイルが除去される。これにより、ヘッド６００を再度磁気ディスク面５２０にロードさせた場合、読み出しエラーが発生する可能性を下げることができる。
【００７５】
図１０は、ヘッド管理テーブルの一例を示す図である。ヘッド管理テーブル２１５は、同じＨＤＤに対応するエラー管理テーブル２１２に基づいてＲＡＩＤ制御部２３０によって作成されて、記憶部２１０に格納される。ヘッド管理テーブル２１５は、ヘッド番号、エラー数、エラー数閾値の項目を含む。
【００７６】
ヘッド管理テーブル２１５には、あらかじめＨＤＤ上の磁気ディスク面毎にレコードが登録される。ヘッド番号の項目は、磁気ディスク面を識別可能なヘッド番号を示す。エラー数の項目は、ヘッド番号に対応する磁気ディスク面において検出されたエラーの合計数を示す。具体的には、エラー数の項目には、エラー管理テーブル２１２に登録されたレコードのうち、磁気ディスク面に属する物理アドレスが登録されたレコードの合計数が登録される。エラー数閾値は、交代処理を実行するか否かを判断するための閾値である。基本的に、各磁気ディスク面の記憶容量が同じであれば、磁気ディスク面毎のエラー数閾値も同じでよいが、磁気ディスク面毎にエラー数閾値を変更することもできる。
【００７７】
以上のヘッド管理テーブル２１５を用いることで、ＨＤＤの物理記憶領域を分割した「磁気ディスク面」という分割領域毎に、エラー発生回数が集計される。
ＲＡＩＤ制御部２３０は、ヘッド管理テーブル２１５のレコードのうち、ある磁気ディスク面に対応するレコードにおいてエラー数がエラー数閾値を超えた場合、その磁気ディスク面の全体において障害が発生していると推定する。このとき、ＲＡＩＤ制御部２３０はまず、障害の原因として磁気ディスク面に対応するヘッドに汚れが付着していることを疑う。ＲＡＩＤ制御部２３０は、この障害を回復させるために、ＨＤＤに対してヘッドのアンロードを実行させ、その後にヘッドを再度ロードさせる。ＲＡＩＤ制御部２３０は、障害の発生が推定された磁気ディスク面からデータを読み出すことができるかを確認し、読み出し可能な場合には、交代処理を実行させることなくＨＤＤへのアクセスを継続する。これにより、新たな交代領域を使用することなく、障害をリカバリし、ＨＤＤの使用を継続できる。
【００７８】
以上のように、ＲＡＩＤ制御部２３０は、セクタ範囲単位、トラック単位、磁気ディスク面単位で、エラーが多く発生し、障害が発生したと推定される領域を特定する。ＲＡＩＤ制御部２３０は、特定された領域の種類（セクタ範囲、トラック、磁気ディスク面のいずれか）に応じた適切な方法を用いて、特定された領域についてのリカバリ処理を実行する。これにより、交代領域を効率よく使用しながら、ＨＤＤを長期間継続的に使用できるようになる。
【００７９】
また、セクタ範囲またはトラックを単位としたリカバリ処理によれば、傷などの障害が発生した領域の多くの部分からの読み出しが要求される前に、障害発生領域の代わりに交代領域が使用されるような交代処理が実行される。これにより、障害発生領域からの読み出しが行われて読み出しエラーが発生する回数を減少させることができる。その結果、エラーカウンタテーブル２１１のカウント値に基づいてＨＤＤが故障したと判定されるまでの時間を延長させ、ＨＤＤの使用を長時間継続できるようになる。
【００８０】
一方、磁気ディスク面を単位としたリカバリ処理によれば、障害が発生した磁気ディスク面の多くの部分からの読み出しが要求される前に、障害の発生要因が除去され、磁気ディスク面からの読み出しを正常に実行できるようにすることができる。これにより、障害が発生した状態の磁気ディスク面からの読み出しが行われて読み出しエラーが発生する回数を減少させることができる。その結果、エラーカウンタテーブル２１１のカウント値に基づいてＨＤＤが故障したと判定されるまでの時間を延長させ、ＨＤＤの使用を長時間継続できるようになる。
【００８１】
また、いずれのリカバリ処理でも、読み出し要求時のエラー発生回数が減少することで、ＨＤＤの読み出し性能を改善できる。特に、Ｉ／Ｏ制御部２２０がホスト装置４００からの要求に応じてＲＡＩＤ制御部２３０にＨＤＤからの読み出しを要求した際の応答性能を改善できる。その結果、ホスト装置４００からのアクセス要求に対する応答性能が、ＨＤＤの障害発生に伴って低下することを抑制し、その応答性能を改善できる。
【００８２】
次に、ＣＭ２００が実行する処理について、フローチャートを用いて説明する。
図１１は、エラー発生時の処理の一例を示すフローチャートである。図１１の処理は、ＲＡＩＤ制御部２３０がリード要求をＨＤＤに送信することで開始される。例えば、ＲＡＩＤ制御部２３０は、Ｉ／Ｏ制御部２２０がホスト装置４００からリード要求を受信し、その受信に応じてＩ／Ｏ制御部２２０から対応するデータのリード要求が出力されたことに応じて、ＨＤＤにリード要求を送信する。あるいは、ＲＡＩＤ制御部２３０は、パトロール処理の実行によりＨＤＤにリード要求を送信する。
【００８３】
ここでは例として、ＨＤＤ３０１に対してリード要求が送信されるものとする。リード要求には、読み出し元アドレスとしてＬＢＡが含まれている。以下、図１１に示す処理をステップ番号に沿って説明する。
【００８４】
（Ｓ１１）ＲＡＩＤ制御部２３０は、リード要求の送信に応じてエラーが発生した場合、処理をステップＳ１２に進める。また、ＲＡＩＤ制御部２３０は、リード要求の送信に応じてリードデータを正常に取得できた場合、処理を終了する。なお、Ｉ／Ｏ制御部２２０からのリード要求に応じてリードデータを正常に取得した場合、ＲＡＩＤ制御部２３０は、リードデータをＩ／Ｏ制御部２２０に出力する。
【００８５】
（Ｓ１２）ＲＡＩＤ制御部２３０は、リード要求に含まれていたＬＢＡに対応する物理アドレスを取得するためのコマンドを、ＨＤＤ３０１に送信する。
ＨＤＤ３０１のコントローラは、ＬＢＡと物理アドレスとが対応付けられたテーブルを参照し、コマンドにより指定されたＬＢＡに対応する物理アドレス（トラック番号、ヘッド番号、セクタ番号）を特定する。コントローラは、特定された物理アドレスをＣＭ２００に送信する。ＲＡＩＤ制御部２３０は、物理アドレスを受信する。
【００８６】
ＲＡＩＤ制御部２３０は、ＨＤＤ３０１に対応するエラー管理テーブル２１２を特定し、特定したエラー管理テーブル２１２に新たなレコードを作成する。ＲＡＩＤ制御部２３０は、作成したレコードに、リード要求に含まれていたＬＢＡと、ＨＤＤ３０１から受信したトラック番号、ヘッド番号、セクタ番号を登録する。
【００８７】
（Ｓ１３）ＲＡＩＤ制御部２３０は、ＨＤＤ３０１に対応するセクタ管理テーブル２１３を特定する。ＲＡＩＤ制御部２３０は、特定したセクタ管理テーブル２１３から、ステップＳ１２でエラー管理テーブル２１２に登録したヘッド番号およびセクタ番号が属するセクタ範囲が登録されたレコードを特定する。ＲＡＩＤ制御部２３０は、特定したレコードのエラー数に１を加算する。
【００８８】
（Ｓ１４）ＲＡＩＤ制御部２３０は、ＨＤＤ３０１に対応するトラック管理テーブル２１４を特定する。ＲＡＩＤ制御部２３０は、特定したトラック管理テーブル２１４を参照し、ステップＳ１２でエラー管理テーブル２１２に登録したヘッド番号およびトラック番号に対応付けられたエラー数に１を加算する。
【００８９】
（Ｓ１５）ＲＡＩＤ制御部２３０は、ＨＤＤ３０１に対応するヘッド管理テーブル２１５を特定する。ＲＡＩＤ制御部２３０は、特定したヘッド管理テーブル２１５を参照し、ステップＳ１２でエラー管理テーブル２１２に登録したヘッド番号に対応付けられたエラー数に１を加算する。
【００９０】
（Ｓ１６）ＲＡＩＤ制御部２３０は、リード要求に含まれていたＬＢＡについての交代処理を実行させるコマンドを、ＨＤＤ３０１に送信する。ＨＤＤ３０１のコントローラは、コマンドにより指定されたＬＢＡに割り当てられている物理アドレスを、交代領域内の未使用領域の物理アドレスに変更する。
【００９１】
（Ｓ１７）ＲＡＩＤ制御部２３０は、ＨＤＤ３０１と同じＲＡＩＤグループに属する他のＨＤＤに記録されたデータを用いて、リード要求に含まれていたＬＢＡに格納されていたデータを復元する。なお、データの復元方法は、ＲＡＩＤグループに設定されたＲＡＩＤレベルや、ＲＡＩＤグループに属するＨＤＤの数などに応じて決まる。
【００９２】
（Ｓ１８）ＲＡＩＤ制御部２３０は、Ｗｒｉｔｅ＆Ｖｅｒｉｆｙコマンドを、復元されたデータとともにＨＤＤ３０１に送信する。これにより、ＨＤＤ３０１のコントローラは、ステップＳ１７で復元されたデータを、ステップＳ１６で割り当てを変更した後の領域に書き込む。また、コントローラは、そのデータが正しく書き込まれたか否かを確認する。例えば、コントローラは、ＲＡＩＤ制御部３０１から受信したデータと、書き込み先領域から読み出したデータとを比較し、同一であるかを確認する。データが正しく書き込まれたことが確認された場合、その旨がＣＭ２００に通知される。ＲＡＩＤ制御部２３０は、この通知を受信すると、処理をステップＳ１９に進める。
【００９３】
（Ｓ１９）ＲＡＩＤ制御部２３０は、エラーカウンタテーブル２１１を参照し、ＨＤＤ３０１に対応するエラーのカウント値を１つ加算する。
（Ｓ２０）ＲＡＩＤ制御部２３０は、ステップＳ１９で加算されたカウント値が所定の故障判定閾値を超えたか否かを判定する。なお、故障判定閾値は、記憶部２１０に格納されている。
【００９４】
故障判定閾値を超えた場合、ＲＡＩＤ制御部２３０は、処理をステップＳ２１に進める。故障判定閾値を超えていない場合、ＲＡＩＤ制御部２３０は、処理を終了する。
（Ｓ２１）ＲＡＩＤ制御部２３０は、ＨＤＤ３０１を故障ディスクと判定し、例えば、ＨＤＤ３０１を切り離す。そして、ＲＡＩＤ制御部２３０は、処理を終了する。
【００９５】
図１２は、分割領域単位での障害発生判定処理の一例を示すフローチャートである。例えば、図１２の処理は、図１１の処理に続いて、または所定間隔で実行される。なお、ここでは例としてＨＤＤ３０１に関する障害発生判定処理について説明するが、実際には、ＤＥ３００に搭載された各ＨＤＤについて図１２の処理が実行される。以下、図１２に示す処理をステップ番号に沿って説明する。
【００９６】
（Ｓ３１）ＲＡＩＤ制御部２３０は、ＨＤＤ３０１に対応するセクタ管理テーブル２１３を参照し、エラー数がエラー数閾値を超えたセクタ範囲が存在するか否かを判定する。エラー数がエラー数閾値を超えたセクタ範囲が存在する場合、ＲＡＩＤ制御部２３０は、処理をステップＳ３２に進める。エラー数がエラー数閾値を超えたセクタ範囲が存在しない場合、ＲＡＩＤ制御部２３０は、処理をステップＳ３３に進める。
【００９７】
（Ｓ３２）ＲＡＩＤ制御部２３０は、セクタ範囲のリカバリ処理を実行する。
（Ｓ３３）ＲＡＩＤ制御部２３０は、トラック管理テーブル２１４を参照し、エラー数がエラー数閾値を超えたトラックが存在するか否かを判定する。エラー数がエラー数閾値を超えたトラックが存在する場合、ＲＡＩＤ制御部２３０は、処理をステップＳ３４に進める。エラー数がエラー数閾値を超えたトラックが存在しない場合、ＲＡＩＤ制御部２３０は、処理をステップＳ３５に進める。
【００９８】
（Ｓ３４）ＲＡＩＤ制御部２３０は、トラックのリカバリ処理を実行する。
（Ｓ３５）ＲＡＩＤ制御部２３０は、ヘッド管理テーブル２１５を参照し、エラー数がエラー数閾値を超えたヘッド番号が存在するか否かを判定する。エラー数がエラー数閾値を超えたヘッド番号が存在する場合、ＲＡＩＤ制御部２３０は、処理をステップＳ３６に進める。エラー数がエラー数閾値を超えたヘッド番号が存在しない場合、ＲＡＩＤ制御部２３０は、処理を終了する。
【００９９】
（Ｓ３６）ＲＡＩＤ制御部２３０は、エラー数がエラー数閾値を超えたヘッドに対応する磁気ディスク面のリカバリ処理を実行する。
図１３は、セクタ範囲のリカバリ処理の一例を示すフローチャートである。図１３に示す処理は、ステップＳ３２の処理に対応する。ステップＳ３２では、ステップＳ３１でエラー数がエラー数閾値を超えたと判定されたセクタ範囲のそれぞれについて、図１３の処理が実行される。以下、図１３に示す処理をステップ番号に沿って説明する。
【０１００】
（Ｓ４１）ここでは、磁気ディスク面上の各セクタの大きさと、ＬＢＡが示す論理ブロックの大きさとが同じであるものとする。ＲＡＩＤ制御部２３０は、エラー数がエラー数閾値を超えたセクタ範囲に属する各セクタに対応付けられているＬＢＡを取得するためのコマンドを、ＨＤＤ３０１に送信する。送信されるコマンドには、各セクタを示す物理アドレス（トラック番号、ヘッド番号、セクタ番号）が含まれる。これらの物理アドレスは、セクタ管理テーブル２１３のセクタ範囲の項目に登録された、該当セクタ範囲の物理アドレス情報に基づいて判別される。
【０１０１】
ＨＤＤ３０１のコントローラは、ＬＢＡと物理アドレスとが対応付けられたテーブルを参照し、コマンドで指定された各物理アドレスに対応付けられたＬＢＡをＣＭ２００に送信する。ＲＡＩＤ制御部２３０は、コントローラから送信されたＬＢＡを受信する。
【０１０２】
次に、ＲＡＩＤ制御部２３０は、受信したＬＢＡのそれぞれについてステップＳ４２〜Ｓ４５の処理を実行する。
（Ｓ４２）ＲＡＩＤ制御部２３０は、該当するＬＢＡについての交代処理を実行させるためのコマンドを、ＨＤＤ３０１に送信する。ＨＤＤ３０１のコントローラは、コマンドにより指定されたＬＢＡに割り当てられている物理アドレスを、交代領域内の未使用領域の物理アドレスに変更する。
【０１０３】
（Ｓ４３）ＲＡＩＤ制御部２３０は、ＨＤＤ３０１と同じＲＡＩＤグループに属する他のＨＤＤに記録されたデータを用いて、ステップＳ４２で交代処理を実行させたＬＢＡに格納されていたデータを復元する。
【０１０４】
（Ｓ４４）ＲＡＩＤ制御部２３０は、Ｗｒｉｔｅ＆Ｖｅｒｉｆｙコマンドを、復元されたデータとともにＨＤＤ３０１に送信する。これにより、ＨＤＤ３０１のコントローラは、ステップＳ４３で復元されたデータを、ステップＳ４２で割り当てを変更した後の領域に書き込む。また、コントローラは、そのデータが正しく書き込まれたか否かを確認し、正しく書き込まれたことが確認された場合、その旨をＣＭ２００に通知する。ＲＡＩＤ制御部２３０は、この通知を受信すると、処理をステップＳ４５に進める。
【０１０５】
（Ｓ４５）ＲＡＩＤ制御部２３０は、エラー管理テーブル２１２を参照し、ステップＳ４２で交代処理を実行させたＬＢＡが含まれるレコードを削除する。また、ステップＳ４２〜Ｓ４４の処理が、ステップＳ４１で受信したすべてのＬＢＡについて実行された場合、ＲＡＩＤ制御部２３０は、セクタ管理テーブル２１３を参照し、処理対象のセクタ範囲に対応するレコードのエラー数を「０」にリセットする。
【０１０６】
このように、ＲＡＩＤ制御部２３０は、セクタ範囲に対応するエラー数がエラー閾値を超えた場合、セクタ範囲に縦方向の傷が存在していると推測する。ＲＡＩＤ制御部２３０は、縦方向の傷に対応する記憶領域にアクセスしないようにするため、ＨＤＤに交代処理を実行させる。これにより、ＲＡＩＤ制御部２３０がＨＤＤに読み出しを要求した場合のエラー検出回数が抑制される。その結果、エラーカウンタテーブル２１１のカウント値に基づいてＨＤＤが故障したと判定されるまでの時間を延長させ、ＨＤＤの使用を長時間継続できるようになる。また、エラー検出回数が抑制されることで、傷の発生によるＨＤＤの読み出し性能の低下を抑制できる。
【０１０７】
図１４は、トラックのリカバリ処理の一例を示すフローチャートである。図１４に示す処理は、ステップＳ３４の処理に対応する。ステップＳ３４では、ステップＳ３３でエラー数がエラー数閾値を超えたと判定されたトラックのそれぞれについて、図１４の処理が実行される。以下、図１４に示す処理をステップ番号に沿って説明する。
【０１０８】
（Ｓ５１）ＲＡＩＤ制御部２３０は、エラー数がエラー数閾値を超えたトラックに属する各セクタに対応付けられているＬＢＡを取得するためのコマンドを、ＨＤＤ３０１に送信する。送信されるコマンドには、該当トラックを示す物理アドレス（ヘッド番号、トラック番号）が含まれる。これらの物理アドレスは、トラック管理テーブル２１４のヘッド番号およびトラック番号の項目に登録された物理アドレス情報に基づいて判別される。
【０１０９】
ＨＤＤ３０１のコントローラは、ＬＢＡと物理アドレスとが対応付けられたテーブルを参照し、コマンドで指定された各物理アドレスに対応付けられたＬＢＡをＣＭ２００に送信する。ＲＡＩＤ制御部２３０は、コントローラから送信されたＬＢＡを取得する。
【０１１０】
次に、ＲＡＩＤ制御部２３０は、受信したＬＢＡのそれぞれについてステップＳ５２〜Ｓ５５の処理を実行する。
（Ｓ５２）ＲＡＩＤ制御部２３０は、該当するＬＢＡについての交代処理を実行させるためのコマンドを、ＨＤＤ３０１に送信する。ＨＤＤ３０１のコントローラは、コマンドにより指定されたＬＢＡに割り当てられている物理アドレスを、交代領域内の未使用領域の物理アドレスに変更する。
【０１１１】
（Ｓ５３）ＲＡＩＤ制御部２３０は、ＨＤＤ３０１と同じＲＡＩＤグループに属する他のＨＤＤに記録されたデータを用いて、ステップＳ５２で交代処理を実行させたＬＢＡに格納されていたデータを復元する。
【０１１２】
（Ｓ５４）ＲＡＩＤ制御部２３０は、Ｗｒｉｔｅ＆Ｖｅｒｉｆｙコマンドを、復元されたデータとともにＨＤＤ３０１に送信する。これにより、ＨＤＤ３０１のコントローラは、ステップＳ５３で復元されたデータを、ステップＳ５２で割り当てを変更した後の領域に書き込む。また、コントローラは、そのデータが正しく書き込まれたか否かを確認し、正しく書き込まれたことが確認された場合、その旨をＣＭ２００に通知する。ＲＡＩＤ制御部２３０は、この通知を受信すると、処理をステップＳ５５に進める。
【０１１３】
（Ｓ５５）ＲＡＩＤ制御部２３０は、エラー管理テーブル２１２を参照し、ステップＳ５２で交代処理を実行させたＬＢＡが含まれるレコードを削除する。また、ステップＳ５２〜Ｓ５４の処理が、ステップＳ５１で受信したすべてのＬＢＡについて実行された場合、ＲＡＩＤ制御部２３０は、トラック管理テーブル２１４を参照し、処理対象のトラックに対応するレコードのエラー数を「０」にリセットする。
【０１１４】
このように、ＲＡＩＤ制御部２３０は、トラックに対応するエラー数がエラー閾値を超えた場合、当該トラックに沿った方向に傷が存在していると推測する。ＲＡＩＤ制御部２３０は、当該トラックにアクセスしないようにするため、ＨＤＤに交代処理を実行させる。これにより、ＲＡＩＤ制御部２３０がＨＤＤに読み出しを要求した場合のエラー検出回数が抑制される。その結果、エラーカウンタテーブル２１１のカウント値に基づいてＨＤＤが故障したと判定されるまでの時間を延長させ、ＨＤＤの使用を長時間継続できるようになる。また、エラー検出回数が抑制されることで、傷の発生によるＨＤＤの読み出し性能の低下を抑制できる。
【０１１５】
図１５は、磁気ディスク面のリカバリ処理の一例を示すフローチャートである。図１５に示す処理は、ステップＳ３６の処理に対応する。以下、図１５に示す処理をステップ番号に沿って説明する。
【０１１６】
（Ｓ６１）ＲＡＩＤ制御部２３０は、ヘッドのアンロードを指示するためのコマンドをＨＤＤ３０１に送信する。これにより、ＨＤＤ３０１に搭載されたすべてのヘッドがアンロードされる。このとき、ヘッドに付着している埃やオイルが、ランプ６１０で除去される。ＲＡＩＤ制御部２３０は続いて、ヘッドのロードを指示するためのコマンドをＨＤＤ３０１に送信する。
【０１１７】
次に、ＲＡＩＤ制御部２３０は、ステップＳ３５でエラー数がエラー数閾値を超えたと判定された磁気ディスク面のそれぞれについて、ステップＳ６２〜Ｓ６９の処理を実行する。
【０１１８】
（Ｓ６２）ＲＡＩＤ制御部２３０は、処理対象の磁気ディスク面（すなわち、ヘッド）に属する各セクタに対応付けられているＬＢＡを取得するためのコマンドを、ＨＤＤ３０１に送信する。送信されるコマンドには、少なくとも、処理対象の磁気ディスク面を示すヘッド番号が含まれる。また、この処理で取得されるＬＢＡは、次のステップＳ６３でＶｅｒｉｆｙの対象とされるが、Ｖｅｒｉｆｙは磁気ディスク面の全体から行われなくてもよい。そこで、ＲＡＩＤ制御部２３０は、例えば、所定間隔で所定個数のセクタ番号を選択し、上記のヘッド番号と、選択された各セクタ番号とを指定したコマンドをＨＤＤ３０１に送信する。これにより、ＨＤＤ３０１のコントローラからは、選択されたセクタ番号が示すセクタに対応付けられたＬＢＡが送信される。
【０１１９】
（Ｓ６３）ＲＡＩＤ制御部２３０は、ステップＳ６２で取得された各ＬＢＡを指定したＶｅｒｉｆｙコマンドを、ＨＤＤ３０１に送信する。ＨＤＤ３０１のコントローラは、指定された各ＬＢＡに対応する物理アドレス（すなわち、処理対象の磁気ディスク面上の物理アドレス）からデータを正常に読み出すことが可能かを確認し、確認の結果をＣＭ２００に送信する。
【０１２０】
（Ｓ６４）ＲＡＩＤ制御部２３０は、ステップＳ６３の処理で、少なくとも１つのＬＢＡからの読み出し時にエラーが発生したか否かを判定する。全ＬＢＡについて正常な読み出しが行われた場合、ＲＡＩＤ制御部２３０は、処理をステップＳ６９に進める。一方、エラーが発生した場合、ＲＡＩＤ制御部２３０は、エラーが発生したＬＢＡのそれぞれについて、ステップＳ６５〜Ｓ６８の処理を実行する。
【０１２１】
（Ｓ６５）ＲＡＩＤ制御部２３０は、処理対象のＬＢＡについての交代処理を実行させるコマンドを、ＨＤＤ３０１に送信する。ＨＤＤ３０１のコントローラは、コマンドにより指定されたＬＢＡに割り当てられている物理アドレスを、交代領域内の未使用領域の物理アドレスに変更する。
【０１２２】
（Ｓ６６）ＲＡＩＤ制御部２３０は、ＨＤＤ３０１と同じＲＡＩＤグループに属する他のＨＤＤに記録されたデータを用いて、リード要求に含まれていたＬＢＡに格納されていたデータを復元する。
【０１２３】
（Ｓ６７）ＲＡＩＤ制御部２３０は、Ｗｒｉｔｅ＆Ｖｅｒｉｆｙコマンドを、復元されたデータとともにＨＤＤ３０１に送信する。これにより、ＨＤＤ３０１のコントローラは、ステップＳ１７で復元されたデータを、ステップＳ６５で割り当てを変更した後の領域に書き込む。また、コントローラは、そのデータが正しく書き込まれたか否かを確認する。データが正しく書き込まれたことが確認された場合、その旨がＣＭ２００に通知される。ＲＡＩＤ制御部２３０は、この通知を受信すると、処理をステップＳ６８に進める。
【０１２４】
（Ｓ６８）ＲＡＩＤ制御部２３０は、エラーカウンタテーブル２１１を参照し、ＨＤＤ３０１に対応するエラーのカウント値を１つ加算する。なお、図示を省略するが、ＲＡＩＤ制御部２３０は、加算後のカウント値が故障判定閾値を超えた場合、ＨＤＤ３０１を故障ディスクと判定し、ＨＤＤ３０１を切り離す。
【０１２５】
（Ｓ６９）ＲＡＩＤ制御部２３０は、エラー管理テーブル２１２から、処理対象の磁気ディスク面を示すヘッド番号が登録されたレコードを削除する。また、ステップＳ６２以降の処理が、ステップＳ３５でエラー数がエラー数閾値を超えたと判定されたすべての磁気ディスク面について実行された場合、ＲＡＩＤ制御部２３０は、ヘッド管理テーブル２１５を参照する。ＲＡＩＤ制御部２３０は、これらの磁気ディスク面を示すヘッド番号に対応するレコードのエラー数を「０」にリセットし、処理を終了する。
【０１２６】
以上の図１５の処理では、ＲＡＩＤ制御部２３０は、磁気ディスク面に対応するエラー数がエラー閾値を超えた場合、磁気ディスク面に対応するヘッドに汚れが付着していると推測する。ＲＡＩＤ制御部２３０は、ステップＳ６２で、ヘッドのアンロードを実行させることで、ヘッドに付着していた汚れを除去し、磁気ディスク面からの読み出しを正常にできるようにする。このようなリカバリが磁気ディスク面の大部分からの読み出しが行われる前に予防的に実行されることで、ＲＡＩＤ制御部２３０がＨＤＤに読み出しを要求した場合のエラー検出回数が抑制される。その結果、エラーカウンタテーブル２１１のカウント値に基づいてＨＤＤが故障したと判定されるまでの時間を延長させ、ＨＤＤの使用を長時間継続できるようになる。また、エラー検出回数が抑制されることで、ヘッドの汚れによるＨＤＤの読み出し性能の低下を抑制できる。
【０１２７】
なお、上記の第１の実施の形態の情報処理は、ストレージ制御装置１に用いられるプロセッサに、プログラムを実行させることで実現できる。また、上記の第２の実施の形態の情報処理は、プロセッサ２０１にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体に記録できる。
【０１２８】
例えば、プログラムを記録した記録媒体は、プログラムを流通させることで配布することができる。また、Ｉ／Ｏ制御部２２０およびＲＡＩＤ制御部２３０に相当する機能を実現するプログラムは、別個のプログラムとして各プログラムを別個に配布することができる。Ｉ／Ｏ制御部２２０およびＲＡＩＤ制御部２３０の機能は、別個のコンピュータにより実現されてもよい。コンピュータは、例えば、記録媒体に記録されたプログラムを、ＲＡＭ２０２やＳＳＤ２０３に格納し（インストールし）、記憶装置からプログラムを読み込んで実行してもよい。
【０１２９】
以上の各実施の形態に関し、さらに以下の付記を開示する。
（付記１）  エラー管理情報を記憶する記憶部と、制御部とを有し、
前記制御部は、
記憶装置に対応する論理記憶領域における論理アドレスを指定することで前記記憶装置にアクセスし、
前記記憶装置へのアクセス時にエラーが検出された場合、アクセス先の論理アドレスに割り当てられている、前記記憶装置の物理記憶領域における物理アドレスを前記エラー管理情報に登録し、
前記エラー管理情報に基づいて、前記物理記憶領域を異なる分割条件を用いて分割することで生成される複数の分割領域毎に、エラー検出回数を集計し、
前記複数の分割領域の中から、所定の基準に基づいて前記エラー検出回数が多いと特定されたリカバリ対象領域に対して、複数のリカバリ方法の中から、前記リカバリ対象領域の分割時に用いられた前記分割条件に対応するリカバリ方法を選択し、
前記リカバリ対象領域に対応する前記論理記憶領域上のリカバリ対象論理アドレスに対するリカバリ処理を、選択されたリカバリ方法を用いて前記記憶装置に実行させる、
ストレージ制御装置。
【０１３０】
（付記２）  前記リカバリ処理を実行させる処理では、
前記複数のリカバリ方法のうち第１のリカバリ方法が選択された場合、前記リカバリ対象論理アドレスに割り当てられている前記物理記憶領域上の物理アドレスを変更するように前記記憶装置に要求し、
前記複数のリカバリ方法のうち第２のリカバリ方法が選択された場合、前記リカバリ対象領域における障害を復旧させる処理の実行を前記記憶装置に要求する、
付記１記載のストレージ制御装置。
【０１３１】
（付記３）  前記記憶装置は、複数のディスク状記録媒体を有し、
前記複数の分割領域は、前記複数のディスク状記録媒体が有する複数の記録面のそれぞれを分割した複数の第１の分割領域と、前記複数の記録面にそれぞれ対応する複数の第２の分割領域とを含み、
前記選択では、前記リカバリ対象領域として前記複数の第１の分割領域の１つが検出された場合、前記第１のリカバリ方法を選択し、前記リカバリ対象領域として前記複数の第２の分割領域の１つが検出された場合、前記第２のリカバリ方法を選択する、
付記２記載のストレージ制御装置。
【０１３２】
（付記４）  前記リカバリ処理を実行させる処理では、前記第２のリカバリ方法が選択された場合、前記複数のディスク状記録媒体を読み書きするヘッドをアンロードし、その後に再度ロードするように前記記憶装置に要求する、
付記３記載のストレージ制御装置。
【０１３３】
（付記５）  前記複数の第１の分割領域は、前記複数の記録面のそれぞれを中心から放射状の線によって分割した複数の第３の分割領域と、前記複数の記録面に形成された各トラックに対応する複数の第４の分割領域とを含む、
付記３または４記載のストレージ制御装置。
【０１３４】
（付記６）  前記第１のリカバリ方法が選択された場合、前記リカバリ処理を実行させる処理は、
前記リカバリ対象論理アドレスに格納されていたデータを、他の記憶装置に格納されている、前記データに対応する冗長データを用いて復元し、
復元された前記データを前記リカバリ対象論理アドレスに書き込むように前記記憶装置に要求する、
処理をさらに含む、
付記２乃至５のいずれか１つに記載のストレージ制御装置。
【０１３５】
（付記７）  前記制御部は、さらに、
前記記憶装置へのアクセス時にエラーが検出されるたびに、前記記憶部に記憶されたエラー回数をカウントアップし、
前記エラー回数が所定の閾値を超えた場合、前記記憶装置を故障と判定する、
付記１乃至６のいずれか１つに記載のストレージ制御装置。
【０１３６】
（付記８）  コンピュータが、
記憶装置に対応する論理記憶領域における論理アドレスを指定することで前記記憶装置にアクセスし、
前記記憶装置へのアクセス時にエラーが検出された場合、アクセス先の論理アドレスに割り当てられている、前記記憶装置の物理記憶領域における物理アドレスをエラー管理情報に登録し、
前記エラー管理情報に基づいて、前記物理記憶領域を異なる分割条件を用いて分割することで生成される複数の分割領域毎に、エラー検出回数を集計し、
前記複数の分割領域の中から、所定の基準に基づいて前記エラー検出回数が多いと特定されたリカバリ対象領域に対して、複数のリカバリ方法の中から、前記リカバリ対象領域の分割時に用いられた前記分割条件に対応するリカバリ方法を選択し、
前記リカバリ対象領域に対応する前記論理記憶領域上のリカバリ対象論理アドレスに対するリカバリ処理を、選択されたリカバリ方法を用いて前記記憶装置に実行させる、
ストレージ制御方法。
【０１３７】
（付記９）  前記リカバリ処理を実行させる処理では、
前記複数のリカバリ方法のうち第１のリカバリ方法が選択された場合、前記リカバリ対象論理アドレスに割り当てられている前記物理記憶領域上の物理アドレスを変更するように前記記憶装置に要求し、
前記複数のリカバリ方法のうち第２のリカバリ方法が選択された場合、前記リカバリ対象領域における障害を復旧させる処理の実行を前記記憶装置に要求する、
付記８記載のストレージ制御方法。
【０１３８】
（付記１０）  前記記憶装置は、複数のディスク状記録媒体を有し、
前記複数の分割領域は、前記複数のディスク状記録媒体が有する複数の記録面のそれぞれを分割した複数の第１の分割領域と、前記複数の記録面にそれぞれ対応する複数の第２の分割領域とを含み、
前記選択では、前記リカバリ対象領域として前記複数の第１の分割領域の１つが検出された場合、前記第１のリカバリ方法を選択し、前記リカバリ対象領域として前記複数の第２の分割領域の１つが検出された場合、前記第２のリカバリ方法を選択する、
付記９記載のストレージ制御方法。
【０１３９】
（付記１１）  前記リカバリ処理を実行させる処理では、前記第２のリカバリ方法が選択された場合、前記複数のディスク状記録媒体を読み書きするヘッドをアンロードし、その後に再度ロードするように前記記憶装置に要求する、
付記１０記載のストレージ制御方法。
【０１４０】
（付記１２）  前記複数の第１の分割領域は、前記複数の記録面のそれぞれを中心から放射状の線によって分割した複数の第３の分割領域と、前記複数の記録面に形成された各トラックに対応する複数の第４の分割領域とを含む、
付記１０または１１記載のストレージ制御方法。
【０１４１】
（付記１３）  前記第１のリカバリ方法が選択された場合、前記リカバリ処理を実行させる処理は、
前記リカバリ対象論理アドレスに格納されていたデータを、他の記憶装置に格納されている、前記データに対応する冗長データを用いて復元し、
復元された前記データを前記リカバリ対象論理アドレスに書き込むように前記記憶装置に要求する、
処理をさらに含む、
付記９乃至１２のいずれか１つに記載のストレージ制御方法。
【０１４２】
（付記１４）  前記コンピュータは、さらに、
前記記憶装置へのアクセス時にエラーが検出されるたびに、前記記憶部に記憶されたエラー回数をカウントアップし、
前記エラー回数が所定の閾値を超えた場合、前記記憶装置を故障と判定する、
付記８乃至１３のいずれか１つに記載のストレージ制御方法。
【０１４３】
（付記１５）  コンピュータに、
記憶装置に対応する論理記憶領域における論理アドレスを指定することで前記記憶装置にアクセスし、
前記記憶装置へのアクセス時にエラーが検出された場合、アクセス先の論理アドレスに割り当てられている、前記記憶装置の物理記憶領域における物理アドレスをエラー管理情報に登録し、
前記エラー管理情報に基づいて、前記物理記憶領域を異なる分割条件を用いて分割することで生成される複数の分割領域毎に、エラー検出回数を集計し、
前記複数の分割領域の中から、所定の基準に基づいて前記エラー検出回数が多いと特定されたリカバリ対象領域に対して、複数のリカバリ方法の中から、前記リカバリ対象領域の分割時に用いられた前記分割条件に対応するリカバリ方法を選択し、
前記リカバリ対象領域に対応する前記論理記憶領域上のリカバリ対象論理アドレスに対するリカバリ処理を、選択されたリカバリ方法を用いて前記記憶装置に実行させる、
処理を実行させるストレージ制御プログラム。
【符号の説明】
【０１４４】
１  ストレージ制御装置
１ａ  記憶部
１ａ１  エラー管理情報
１ｂ  制御部
２  記憶装置
２ａ，２ｂ，２ｃ，２ｄ  磁気ディスク
２ａ１，２ａ２，２ａ３，２ｄ１  分割領域
【図１】
2019003506.tif 000003
【図２】
2019003506.tif 000004
【図３】
2019003506.tif 000005
【図４】
2019003506.tif 000006
【図５】
2019003506.tif 000007
【図６】
2019003506.tif 000008
【図７】
2019003506.tif 000009
【図８】
2019003506.tif 000010
【図９】
2019003506.tif 000011
【図１０】
2019003506.tif 000012
【図１１】
2019003506.tif 000013
【図１２】
2019003506.tif 000014
【図１３】
2019003506.tif 000015
【図１４】
2019003506.tif 000016
【図１５】
2019003506.tif 000017