(57)【要約】【課題】  不正なデータがホストに読み出されるのを未然に防止し、信頼性を高める。【解決手段】  ディスクアレイサブシステムを制御するコントローラ５は、例えば、各ディスク１〜３にデータを分散させて記憶し、パリティデータを算出してディスク４に記憶させる。あるブロック（D12）への更新が失敗し、データが書き込まれなかった場合、アンコレクタブルエラーとなる。このブロック（D12）のデータは、他のディスクに記憶されているデータ及びパリティデータに基づいて回復される。コントローラ５は、ブロック（D12）に続く他のブロック（D13）についても、関連する他のデータ及びパリティデータに基づいて回復させる。これにより、万が一、アンコレクタブルエラーではないブロック（D13）が、古いデータを記憶している場合でも、正しいデータを作り直してホスト７に提供することができる。【選択図】        図１
2006268673.tif 000002
【特許請求の範囲】
【請求項１】
上位装置及び複数の記憶デバイスにそれぞれ接続された記憶制御装置であって、
前記上位装置との間で通信を行うための上位通信部と、
前記各記憶デバイスとの間でそれぞれ通信を行うための下位通信部と、
前記各記憶デバイスによって冗長記憶領域を構成させ、前記上位通信部を介して受信された前記上位装置からの指示に基づき、前記下位通信部を介して前記冗長記憶領域にデータを入出力する制御部と、を備え、
前記制御部は、
前記各記憶デバイスのいずれかに所定のエラーが発生したか否かを検出し、
前記所定のエラーを検出した場合には、前記所定のエラーが検出された記憶デバイスの有する複数の単位記憶領域のうち、少なくとも前記所定のエラーが検出されたエラー単位記憶領域に続く所定範囲の単位記憶領域について、前記所定のエラーに関する所定の処理をそれぞれ実行する、ようになっている記憶制御装置。
【請求項２】
前記冗長記憶領域は、前記上位装置から受信したデータを前記各記憶デバイスのうち少なくとも一部の複数の記憶デバイスに分散させてそれぞれ記憶させ、前記データに基づいて得られるパリティデータを前記各記憶デバイスのうち少なくとも一つの記憶デバイスに記憶させることにより、構成されている請求項１に記載の記憶制御装置。
【請求項３】
前記所定のエラーは、前記エラー単位記憶領域に記憶されているデータを正常に読み出すことができないエラーである請求項１に記載の記憶制御装置。
【請求項４】
前記所定のエラーは、前記エラー単位記憶領域に記憶されたデータに関連する他のデータ及びパリティデータに基づいて、前記エラー単位記憶領域に記憶されたデータの回復が必要なエラーである請求項２に記載の記憶制御装置。
【請求項５】
前記所定の処理は、前記所定範囲の単位記憶領域に記憶されているデータを回復する処理である請求項１に記載の記憶制御装置。
【請求項６】
前記所定の処理は、前記エラー単位記憶領域及び前記所定範囲の単位記憶領域にそれぞれ記憶されているデータを、これらのデータにそれぞれ関連する他のデータ及びパリティデータに基づいてそれぞれ回復させる処理である請求項２に記載の記憶制御装置。
【請求項７】
さらに、前記制御部は、前記所定の処理を実行した場合に、前記回復された各データを他の正常な各単位記憶領域にそれぞれ記憶させる請求項６に記載の記憶制御装置。
【請求項８】
前記所定の処理は、前記所定範囲の単位記憶領域に記憶されているデータの信頼性を検査する処理である請求項１に記載の記憶制御装置。
【請求項９】
前記所定の処理は、前記所定範囲の単位記憶領域に記憶されているデータを当該データに関連する他のデータ及びパリティデータに基づいて回復し、この回復されたデータから得られる新たなパリティデータと既に記憶されているパリティデータとを比較することにより、両パリティデータが一致するか否かを検査する処理である請求項２に記載の記憶制御装置。
【請求項１０】
前記所定の処理には、前記エラー単位記憶領域及び前記所定範囲の単位記憶領域にそれぞれ記憶されているデータを回復するデータ回復処理と、前記所定範囲の単位記憶領域に記憶されているデータの信頼性を検査する信頼性検査処理とが含まれている請求項１に記載の記憶制御装置。
【請求項１１】
さらに、前記制御部は、前記所定の処理を実行した場合に、前記所定のエラーが発生した記憶デバイスを閉塞させる請求項１に記載の記憶制御装置。
【請求項１２】
前記所定範囲は、前記上位通信部を介して前記上位装置に転送可能な単位記憶領域の最大数として決定される請求項１に記載の記憶制御装置。
【請求項１３】
前記所定範囲は、前記上位装置から指示された範囲に基づいて決定される請求項１に記載の記憶制御装置。
【請求項１４】
前記所定範囲は、前記データ回復処理と前記信頼性検査処理とでそれぞれ異なる請求項１０に記載の記憶制御装置。
【請求項１５】
前記制御部は、前記上位装置からのリード要求が前記上位通信部によって受信された場合に、前記各記憶デバイスのいずれかに所定のエラーが発生したか否かを検出する請求項１に記載の記憶制御装置。
【請求項１６】
さらに、前記制御部は、前記各記憶デバイスが正常に動作するか否かの診断を周期的または非周期的に検査することができ、この診断を行う場合に、前記各記憶デバイスのいずれかに所定のエラーが発生したか否かを検出する請求項１に記載の記憶制御装置。
【請求項１７】
さらに、前記制御部は、前記所定のエラーと異なる種類の他のエラーが前記各記憶デバイスのいずれかに発生したか否かを監視し、前記他のエラーの発生状態に基づいて、前記各記憶デバイスがそれぞれ有する各単位記憶領域にそれぞれ記憶されているデータの信頼性を検査する請求項１に記載の記憶制御装置。
【請求項１８】
パリティデータを用いて構成される冗長記憶領域を上位装置に提供する複数の記憶デバイスに所定のエラーが発生した場合のエラー制御方法であって、
予め設定されている所定のタイミングが到来したか否かを判定するステップと、
前記所定のタイミングが到来したと判定された場合は、前記各記憶デバイスのいずれかに前記所定のエラーが発生したか否かを検出するステップと、
前記所定のエラーが検出された場合は、前記所定のエラーが検出された記憶デバイスの有する複数の単位記憶領域のうち、少なくとも前記所定のエラーが検出されたエラー単位記憶領域に続く所定範囲の単位記憶領域について、前記所定のエラーに関する所定の処理を実行するステップと、
を含む記憶デバイスのエラー制御方法。
【請求項１９】
前記所定の処理を実行するステップには、
前記エラー単位記憶領域及び前記所定範囲の単位記憶領域にそれぞれ記憶されているデータを、これらのデータにそれぞれ関連する他のデータ及びパリティデータに基づいてそれぞれ回復させるステップと、
前記所定範囲の単位記憶領域に関して回復されたデータから得られる新たなパリティデータと既に記憶されているパリティデータとを比較することにより、両パリティデータが一致するか否かを検査するステップとが含まれている請求項１８に記載の記憶デバイスのエラー制御方法。
【請求項２０】
上位装置及び複数の記憶デバイスにそれぞれ接続された記憶制御装置であって、
前記上位装置との間で通信を行うための上位通信部と、
前記各記憶デバイスとの間でそれぞれ通信を行うための下位通信部と、
前記各記憶デバイスによってパリティデータを利用する冗長記憶領域を構成させ、前記上位通信部を介して受信された前記上位装置からの指示に基づき、前記下位通信部を介して前記冗長記憶領域にデータを入出力する制御部と、
この制御部により使用されるメモリと、
を備え、
前記制御部は、
前記上位装置からデータのリード要求が発行されたか否かを判定するステップと、
前記上位装置から前記リード要求が発行された場合は、この要求されたデータを記憶する記憶デバイスの各ブロックからデータを順番に読出して前記メモリにそれぞれ記憶させるステップと、
前記各ブロックのうち、前記データを正常に読み出すことができなかったエラーブロックを検出するステップと、
前記エラーブロックから前記リード要求で指定された読出し範囲の末尾に対応するブロックまでの各ブロックにそれぞれ記憶されているデータを、これらのデータにそれぞれ関連する他のデータ及びパリティデータに基づいてそれぞれ回復させ、これら回復した各データを前記メモリに記憶させるステップと、
前記読出し範囲に含まれる全てのデータが前記メモリに記憶された場合は、これらのデータを前記上位装置に転送させるステップと、
前記エラーブロックの次に位置するブロックから前記読出し範囲の末尾に対応するブロックまでの所定の各ブロックに関してそれぞれ回復されたデータに基づいて、新たなパリティデータをそれぞれ生成するステップと、
前記所定の各ブロックにそれぞれ記憶されているデータに関して既に記憶されている各旧パリティデータと前記新たに生成された各新パリティデータとが一致するか否かを判定するステップと、
前記各旧パリティデータと前記各新パリティデータとの組がいずれか一つでも一致しない場合には、前記エラーブロックを有する記憶デバイスを閉塞させるステップと、
をそれぞれ実行する記憶制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶制御装置及び記憶デバイスのエラー制御方法に関する。
【背景技術】
【０００２】
例えば、政府、官公庁、地方自治体、企業、教育機関等では、多種多量のデータを取り扱うために、比較的大規模な記憶制御装置を用いてデータを管理する。この記憶制御装置は、冗長情報を利用して冗長性を備えた記憶領域（RAID：Redundant Array of Independent Disks）を構成し、この記憶領域にデータを記憶させる（特許文献１）。
【０００３】
このような記憶装置では、データを所定サイズに分割して、複数の記憶デバイスにそれぞれ分散して記憶させると共に、分割された各データからパリティデータを算出してこれを記憶する。これにより、いずれか一つのデータが失われた場合でも、他のデータ及びパリティデータに基づいて、失われたデータを再生（回復）させることができる。
【特許文献１】特開平１０−１４９２６２号
【発明の開示】
【発明が解決しようとする課題】
【０００４】
例えば、ハードディスクドライブの場合、一連のデータが複数のセクタにそれぞれ書き込まれる。もしも、あるブロックへのデータ書込みが失敗し、書込み処理が中断した場合は、その中断されたブロック以降の各ブロックには、予定されたデータが書き込まれないことになる。この場合、データが書き込まれなかった全てのブロックについて、その書込みの失敗が検出されるべきである。
【０００５】
しかし、ハードディスクドライブの故障モードによっては、書込みに失敗したブロックが発生し、このブロックに続く他のブロックが未書込み状態であるにもかかわらず、ハードディスクドライブが正常応答するという現象が稀に発生し得ることが発見された。
【０００６】
そこで、本発明の目的は、信頼性を改善できるようにした記憶制御装置及び記憶デバイスのエラー制御方法を提供することにある。本発明の他の目的は、記憶デバイスにエラーが検出された場合に、当該エラーの検出された範囲以外の信頼性を確認ないし回復できるようにした記憶制御装置及び記憶デバイスのエラー制御方法を提供することにある。本発明の更なる目的は、後述する実施の形態の記載から明らかになるであろう。
【課題を解決するための手段】
【０００７】
上記課題を解決すべく、本発明に従う記憶制御装置は、上位装置及び複数の記憶デバイスにそれぞれ接続された記憶制御装置であって、上位装置との間で通信を行うための上位通信部と、各記憶デバイスとの間でそれぞれ通信を行うための下位通信部と、各記憶デバイスによって冗長記憶領域を構成させ、上位通信部を介して受信された上位装置からの指示に基づき、下位通信部を介して冗長記憶領域にデータを入出力する制御部と、を備えている。そして、制御部は、各記憶デバイスのいずれかに所定のエラーが発生したか否かを検出し、所定のエラーを検出した場合には、所定のエラーが検出された記憶デバイスの有する複数の単位記憶領域のうち、少なくとも所定のエラーが検出されたエラー単位記憶領域に続く所定範囲の単位記憶領域について、所定のエラーに関する所定の処理をそれぞれ実行する、ようになっている。
【０００８】
冗長記憶領域は、上位装置から受信したデータを各記憶デバイスのうち少なくとも一部の複数の記憶デバイスに分散させてそれぞれ記憶させ、データに基づいて得られるパリティデータを各記憶デバイスのうち少なくとも一つの記憶デバイスに記憶させることにより、構成することができる。例えば、制御部は、RAID３，RAID４，RAID５として知られているように、データを複数の記憶デバイスに分散させてそれぞれ記憶させ、これら分散されたデータから生成されるパリティデータを、特定の、または、複数の記憶デバイスに記憶させる。データＤ１，Ｄ２，Ｄ３の３つのデータと一つのパリティデータＰとを例に挙げると、パリティデータＰは、各データＤ１〜Ｄ３の排他的論理和を求めることにより得られる（P=D1 xor D2 xor D3）。
【０００９】
ここで、所定のエラーは、例えば、エラー単位記憶領域に記憶されているデータを正常に読み出すことができないエラーである。例えば、所定のエラーは、エラー単位記憶領域に記憶されたデータに関連する他のデータ及びパリティデータに基づいて、エラー単位記憶領域に記憶されたデータの回復が必要なエラーである。例えば、単位記憶領域に書き込まれるデータに、ECC（Error Correcting Code）等のエラー検出及びエラー回復用の冗長情報が付加される場合、このデータと一体化された冗長情報によって検出されるが回復不能なエラーを、所定のエラーとして挙げることもできる。
【００１０】
ここで、所定の処理としては、例えば、所定範囲の単位記憶領域に記憶されているデータを回復する処理を挙げることができる。例えば、制御部は、エラー単位記憶領域及び所定範囲の単位記憶領域にそれぞれ記憶されているデータを、これらのデータにそれぞれ関連する他のデータ及びパリティデータに基づいてそれぞれ回復させることができる。つまり、失われたデータと同一のパリティグループに属する他のデータ及びパリティデータに基づいて、その失われたデータを算出することができる。前記の例で言えば、もしもＤ１を読み出すことができない場合、他のデータＤ２，Ｄ３及びパリティデータＰに基づいて、Ｄ１を算出することができる（D1=D2 xor D3 xor P）。
【００１１】
さらに、制御部は、所定の処理を実行した場合に、回復された各データを他の正常な各単位記憶領域にそれぞれ記憶させることもできる。制御部は、例えば、所定の処理を実行した後で、回復された各データを、元の記憶デバイスまたは別の記憶デバイスに退避させることができる。
【００１２】
制御部は、所定の処理として、所定範囲の単位記憶領域に記憶されているデータの信頼性を検査することもできる。例えば、制御部は、所定範囲の単位記憶領域に記憶されているデータを当該データに関連する他のデータ及びパリティデータに基づいて回復し、この回復されたデータから得られる新たなパリティデータと既に記憶されているパリティデータとを比較することにより、両パリティデータが一致するか否かを検査する。両パリティデータが一致する場合、制御部は、所定範囲の各単位記憶領域にそれぞれ記憶されているデータが正しく更新されていると判定することができる。
【００１３】
制御部は、エラー単位記憶領域及び所定範囲の単位記憶領域にそれぞれ記憶されているデータを回復するデータ回復処理と、所定範囲の単位記憶領域に記憶されているデータの信頼性を検査する信頼性検査処理との両方を実行することもできる。
【００１４】
そして、この場合、所定範囲は、データ回復処理と信頼性検査処理とでそれぞれ異なるように設定することができる。例えば、データ回復処理の適用される範囲（その開始位置及び終了位置）と信頼性検査処理の適用される範囲（その開始位置及び終了位置）とは、互いに別々の独立した値として設定することができる。例えば、データ回復処理は、エラー単位記憶領域を開始位置とし、上位装置からのリード要求で示された読出し範囲の末尾に位置する単位記憶領域を終了位置とすることができる。これに対し、信頼性検査処理は、エラー単位記憶領域の次の単位記憶領域を開始位置とし、この開始位置から所定数の単位記憶領域までを所定範囲として行うことができる。
【００１５】
さらに、制御部は、所定の処理を実行した場合に、所定のエラーが発生した記憶デバイスを閉塞させることもできる。例えば、制御部は、所定のエラーが生じた記憶デバイスの使用を禁止する。
【００１６】
また、所定範囲は、上位通信部を介して上位装置に転送可能な単位記憶領域の最大数として決定することができる。例えば、一回のリード要求またはライト要求で転送可能な最大の単位記憶領域数だけ、所定範囲内の各単位記憶領域について所定の処理をそれぞれ行うことができる。または、所定範囲は、上位装置から指示された範囲に基づいて決定することもできる。例えば、上位装置からのリード要求によって読出し範囲が指定されるが、この場合、エラー単位記憶領域の次に位置する単位記憶領域から読出し範囲の末尾に位置する単位記憶領域までを所定範囲とし、所定の処理を行うことができる。あるいは、エラー単位記憶領域から読出し範囲の末尾に位置する単位記憶領域までを所定範囲とすることもできる。さらに、所定範囲は、可変に設定することもできる。例えば、エラー単位記憶領域に続く各単位記憶領域について、１つまたは複数ずつそれぞれ所定の処理を行うことができる。
【００１７】
制御部は、上位装置からのリード要求が上位通信部によって受信された場合に、各記憶デバイスのいずれかに所定のエラーが発生したか否かを検出することができる。即ち、エラー検出のトリガとして、上位装置からのリード要求を用いることができる。
【００１８】
さらに、制御部は、各記憶デバイスが正常に動作するか否かの診断を周期的または非周期的に検査することができる。この診断を行う場合に、各記憶デバイスのいずれかに所定のエラーが発生したか否かを検出することもできる。即ち、既に設けられている診断処理と一緒にエラー検出を行うことができる。
【００１９】
さらに、制御部は、所定のエラーと異なる種類の他のエラーが各記憶デバイスのいずれかに発生したか否かを監視し、他のエラーの発生状態に基づいて、各記憶デバイスがそれぞれ有する各単位記憶領域にそれぞれ記憶されているデータの信頼性を検査することもできる。例えば、制御部と各記憶デバイスとを接続する通信インターフェースにおいてエラーが所定値以上生じた場合には、所定のエラーが発生する可能性が高いと推測し、各単位記憶領域に記憶されているデータの信頼性をそれぞれ検査することができる。
【００２０】
本発明の他の側面に従う記憶デバイスのエラー制御方法は、パリティデータを用いて構成される冗長記憶領域を上位装置に提供する複数の記憶デバイスのいずれかに所定のエラーが発生した場合のエラーの検出及び制御方法である。この方法には、予め設定されている所定のタイミングが到来したか否かを判定するステップと、所定のタイミングが到来したと判定された場合は、各記憶デバイスのいずれかに所定のエラーが発生したか否かを検出するステップと、所定のエラーが検出された場合は、所定のエラーが検出された記憶デバイスの有する複数の単位記憶領域のうち、少なくとも所定のエラーが検出されたエラー単位記憶領域に続く所定範囲の単位記憶領域について、所定のエラーに関する所定の処理を実行するステップと、を含むことができる。
【００２１】
そして、所定の処理を実行するステップには、エラー単位記憶領域及び所定範囲の単位記憶領域にそれぞれ記憶されているデータを、これらのデータにそれぞれ関連する他のデータ及びパリティデータに基づいてそれぞれ回復させるステップと、所定範囲の単位記憶領域に関して回復されたデータから得られる新たなパリティデータと既に記憶されているパリティデータとを比較することにより、両パリティデータが一致するか否かを検査するステップとを含めることができる。
【００２２】
本発明の手段、機能、ステップの全部または一部は、コンピュータシステムにより実行されるコンピュータプログラムとして構成可能な場合がある。本発明の構成の全部または一部がコンピュータプログラムから構成された場合、このコンピュータプログラムは、例えば、各種記憶媒体に固定して配布等することができ、あるいは、通信ネットワークを介して送信することもできる。
【発明を実施するための最良の形態】
【００２３】
図１は、本発明の実施形態の全体概要を示す構成説明図である。本実施形態では、後述のように、アンコレクタブルエラーが発生した場合に、このエラーの生じたブロック（エラーブロック）に続く所定範囲内の各ブロックについて、データの回復または／及びデータの信頼性確認を行うようになっている。即ち、本発明は、アンコレクタブルエラーが検出された場合には、アンコレクタブルエラーが検出されていない他のブロックについて、予め所定の処理を行い、不正なデータの転送を回避または防止する。
【００２４】
本実施形態の記憶制御装置は、ホスト（７）及び複数の記憶デバイス（１〜４）にそれぞれ接続されている。この記憶制御装置は、ホスト（７）との間で通信を行うための上位通信部と、各記憶デバイス（１〜４）との間でそれぞれ通信を行うための下位通信部と、各記憶デバイスによってパリティデータを利用する冗長記憶領域を構成させ、上位通信部を介して受信されたホスト（７）からの指示に基づき、下位通信部を介して冗長記憶領域にデータを入出力する制御部（５）と、この制御部（５）により使用されるメモリ（６）と、を備えている。
【００２５】
そして、制御部（５）は、ホスト（７）からデータのリード要求が発行されたか否かを判定するステップと、ホスト（７）からリード要求が発行された場合は、この要求されたデータを記憶する記憶デバイス（１）〜（３）の各ブロック（Ｄ１１〜Ｄ１３，Ｄ２１〜Ｄ２３，Ｄ３１〜Ｄ３３）からデータを順番に読出してメモリ（６）にそれぞれ記憶させるステップと、各ブロック（Ｄ１１〜Ｄ１３）のうち、データを正常に読み出すことができなかったエラーブロック（Ｄ１２）を検出するステップと、エラーブロック（Ｄ１２）からリード要求で指定された読出し範囲の末尾に対応するブロック（Ｄ１３）までの各ブロックにそれぞれ記憶されているデータを、これらのデータにそれぞれ関連する他のデータ（Ｄ２２，Ｄ２３，Ｄ３２，Ｄ３３）及びパリティデータ（Ｐ２，Ｐ３）に基づいてそれぞれ回復させ、これら回復した各データをメモリ（６）に記憶させるステップと、読出し範囲に含まれる全てのデータがメモリ（６）に記憶された場合は、これらのデータをホスト（７）に転送させるステップと、エラーブロック（Ｄ１２）の次に位置するブロック（Ｄ１３）から読出し範囲の末尾に対応するブロック（図１中ではＤ１３だが、もしもＤ１３の次にＤ１４が存在し、Ｄ１４が末尾ならばＤ１４となる）までの所定の各ブロックに関してそれぞれ回復されたデータに基づいて、新たなパリティデータをそれぞれ生成するステップと、所定の各ブロック（Ｄ１３）に記憶されているデータに関して既に記憶されている各旧パリティデータと新たに生成された各新パリティデータとが一致するか否かを判定するステップと、各旧パリティデータと各新パリティデータとの組がいずれか一つでも一致しない場合には、エラーブロック（Ｄ１２）を有する記憶デバイス（１）を閉塞させるステップと、をそれぞれ実行する。
【００２６】
コントローラ５は、複数の記憶デバイス１〜４とそれぞれ接続されている。コントローラ５は、メモリ６及びCPU（不図示）を備えたコンピュータシステムとして構成することができる。コントローラ５は、ホスト７からのコマンドに応じて、各記憶デバイス１〜４へのデータ入出力をそれぞれ制御する。ホスト７は、例えば、サーバマシンやメインフレームマシン等として構成することができる。
【００２７】
各記憶デバイス１〜４は、例えば、ハードディスクドライブとして構成される。各記憶デバイス１〜４をハードディスクドライブとして構成する場合、各記憶デバイス１〜４は、例えば、１つまたは複数のディスクと、各ディスクをそれぞれ回転させるための回転機構と、各ディスクへの読み書きをそれぞれ行うための磁気ヘッドと、この磁気ヘッドを移動させるためのヘッド駆動機構とを備えて構成される。各ディスクには、複数のトラックが同心円状にそれぞれ形成されており、これら各トラックをディスクの中心から放射状に区切ることにより、各トラックは複数のセクタに分割されている。このセクタが、ハードディスクドライブの最小の記憶単位となる。
【００２８】
コントローラ５は、各記憶デバイス１〜４がそれぞれ有する物理的な記憶領域に基づいて、論理的な記憶領域を生成する。この論理的な記憶領域は、例えば、RAID３，RAID４，RAID５のような冗長構造を備えている。図に示す例では、記憶デバイス１〜３にデータが格納され、記憶デバイス４にはパリティデータが記憶される。記憶デバイス１〜３をデータディスク、記憶デバイス４をパリティディスクとも呼ぶ。但し、パリティデータを特定の記憶デバイス４のみに記憶させる必要はなく、各記憶デバイス１〜４にそれぞれ分散させて記憶させてもよい。
【００２９】
コントローラ５は、ホスト７からライト要求が発行された場合は、ホスト７から受信したライトデータを分割し、各記憶デバイス１〜４の各セクタにそれぞれ分散させて記憶させる。例えば、コントローラ５は、ホスト７から受信されたライトデータを、各セクタ（ブロック）毎のデータＤ１１，Ｄ１２，Ｄ１３，Ｄ２１，Ｄ２２，Ｄ２３，Ｄ３１，Ｄ３２，Ｄ３３として分割し、これら分割されたデータを各記憶デバイス１〜３に分散して記憶させる。図示の例では、第１記憶デバイス１にはＤ１１〜Ｄ１３が記憶され、第２記憶デバイス２にはＤ２１〜Ｄ２３が記憶され、第３記憶デバイス３にはＤ３１〜Ｄ３３が記憶される。
【００３０】
また、コントローラ５は、各データＤ１１〜Ｄ３３からパリティデータＰ１〜Ｐ３をそれぞれ生成し、このパリティデータを第４記憶デバイス４に記憶させる。ここで、パリティデータＰ１はデータＤ１１，Ｄ２１，Ｄ３１に基づいて生成され、パリティデータＰ２はデータＤ１２，Ｄ２２，Ｄ３２に基づいて生成され、パリティデータＰ３はデータＤ１３，Ｄ２３，Ｄ３３に基づいて生成される。共通のパリティデータを有する一組のデータ群の中でいずれか一つのデータが失われた場合でも、他のデータ及びパリティデータに基づいて、その失われたデータを回復することができる。
【００３１】
さて、通常の場合、記憶デバイス１〜４は、各ブロックにデータを正常に書き込むと、正常に書込みが行われた旨をコントローラ５に通知する。もしも、データをブロックに書き込んでいる途中で、何らかの原因により、その書込み処理が中断された場合、記憶デバイスは、書込みが失敗した旨をコントローラ５に通知する。図１（ａ）では、Ｄ１２への書込みが失敗した様子を示している。Ｄ１２への書込みが失敗した場合、これに続くＤ１３への書込み処理（更新処理）も行われない。従って、Ｄ１３の内容は、更新前の古いデータのままとなっている。
【００３２】
しかし、Ｄ１２へのデータ書込みに失敗し、Ｄ１２に続くＤ１３への書込みが行われていないにも係わらず、書込み失敗が検出できないケースも稀にあることが判明した。この場合、図１（ｂ）に示すように、ホスト７がＤ１１〜Ｄ１３の読出しを要求すると、正常に更新されたＤ１１はそのまま記憶デバイス１から読み出すことができる。次に、書込みが失敗したＤ１２は、ECC等によってデータの誤りを復元することができないため、他のデータＤ２２，Ｄ３２，Ｐ２に基づいて復元される。ECCのビット数にもよるが、ECCでは、ブロック中の一部のビットのみを修復可能である。
【００３３】
Ｄ１３は全く更新されていないため、Ｄ１３に関連づけられるECCでは、更新されたか否かを検出することはできない。従って、コントローラ５からは、Ｄ１３の記憶内容が正しいかのように見える。しかし、上述した稀なケースでは、Ｄ１３の内容は更新されていないため、古いデータのままである。従って、ホスト７がＤ１３のデータをそのまま読出して利用すると、更新前の古いデータ（不正データ）に基づいて業務処理が行われることになる。
【００３４】
そこで、本実施形態では、Ｄ１２を読み出す際に、Ｄ１２にアンコレクタブルエラーが発生していることを検出した場合は、Ｄ１２に続く所定範囲のブロック（図示の場合はＤ１３）についても、実際にエラーが生じているか否かを問わずに、他のデータＤ２３，Ｄ３３，Ｐ３に基づいて回復することとした。従って、コントローラ５のデータ回復処理８は、アンコレクタブルエラーを生じたＤ１２及びＤ１２に続くＤ１３のそれぞれについて実施される。
【００３５】
なお、Ｄ１３を先にメモリ６上に読出した後で、このＤ１３の記憶内容が正しいか否かを検証することも可能である。記憶内容が正しいか否かの検証は、そのデータに関連して記憶されているパリティデータ（旧パリティデータ）と、改めて生成し直したデータについて再度算出されるパリティデータ（新パリティデータ）との比較により、行うことができる。このパリティデータの照合処理を、例えば、パリティ整合性チェックと呼ぶことができる。このパリティ整合性チェックは、XOR演算によるデータの回復処理が前提となるため、先にデータを回復してホスト７に転送し、後からパリティ整合性チェックを行う方が、コントローラ５の応答性能は高くなる。
【００３６】
このように、本実施形態によれば、アンコレクタブルエラーが検出された場合に、このアンコレクタブルエラーの検出されたブロック以外の他のブロックについても、パリティデータ等に基づいてデータを回復する構成とした。従って、万一、アンコレクタブルエラーの生じたブロックに続く他のブロックが正しく更新されていない場合でも、更新前のデータがホスト７に提供されるのを未然に防止することができ、信頼性を改善することができる。以下、本実施形態をより詳細に説明する。
【実施例１】
【００３７】
図２は、本実施例によるストレージシステムの全体構成を示すブロック図である。このストレージシステムは、それぞれ後述するように、例えば、ホスト１０と、管理端末２０と、ディスクアレイサブシステム１００とから構成することができる。
【００３８】
ホスト１０は、例えば、CPU（Central Processing Unit）やメモリ等の情報処理資源を備えたコンピュータ装置であり、例えば、パーソナルコンピュータ、ワークステーション、メインフレーム等として構成される。ホスト１０は、例えば、アプリケーションプログラム１１と、通信ネットワークCN１を介してディスクアレイサブシステム１００にアクセスするためのHBA（Host Bus Adapter）１２とを備えている。
【００３９】
通信ネットワークCN１としては、例えば、LAN（Local Area Network）、SAN（Storage Area Network）、インターネット、専用回線、公衆回線等を、場合に応じて適宜用いることができる。LANを介するデータ通信は、例えば、TCP/IPプロトコルに従って行われる。ホスト１０がLANを介してディスクアレイサブシステム１００に接続される場合、ホスト１０は、ファイル名を指定してファイル単位でのデータ入出力を要求する。
【００４０】
ホスト１０がSANを介してディスクアレイサブシステム１００に接続される場合、ホスト１０は、ファイバチャネルプロトコルに従って、複数のディスクドライブにより提供される記憶領域のデータ管理単位であるブロックを単位として、データ入出力を要求する。通信ネットワークCN１がLANである場合、なお、HBA１１は、例えばLAN対応のネットワークカードである。通信ネットワークCN１がSANの場合、HBA１１は、例えばホストバスアダプタである。
【００４１】
なお、ホスト１０がメインフレームとして構成される場合、ホスト１０は、例えば、FICON（Fibre Connection：登録商標）、ESCON（Enterprise System Connection：登録商標）、ACONARC（Advanced Connection Architecture：登録商標）、FIBARC（Fibre Connection Architecture：登録商標）等の通信プロトコルに従ってデータ転送を行う。
【００４２】
管理端末２０は、ストレージシステムの構成等を管理するためのコンピュータ装置であり、例えば、システム管理者等のユーザにより操作される。管理端末２０は、通信ネットワークCN４を介して、ディスクアレイサブシステム１００に接続されている。管理端末２０は、例えば、ストレージ管理部２１と、通信ネットワークCN４に接続するためのLANポート２２とを備えて構成することができる。ストレージ管理部２１は、例えば、ソフトウェアとして構成され、ディスクアレイサブシステム１００に各種の指示を与える。この指示によって、ディスクアレイサブシステム１００内の制御情報やテーブル等を書き換えることができる。また、管理端末２０は、ディスクアレイサブシステム１００から各種の情報を取得し、これを端末画面に表示させることもできる。
【００４３】
ディスクアレイサブシステム１００は、複数のコントローラ２００と、ストレージ部３００とに大別することができる。各コントローラ２００は、ホスト１０からのコマンドを処理し、ストレージ部３００へのデータ入出力を行う。各コントローラ２００は、二重化されており、それぞれ同一の構成を備える。
【００４４】
そこで一方のコントローラ２００について説明する。コントローラ２００は、例えば、制御部２１０と、データ処理回路２２０と、上位通信部２３０と、下位通信部２４０と、キャッシュメモリ２５０と、システムメモリ２６０と、フラッシュメモリ２７０とを備えて構成することができる。
【００４５】
制御部２１０は、例えばCPUとして構成される。制御部２１０は、フラッシュメモリ２７０に記憶されているプログラムコードを読出して実行することにより、コントローラ２００の全体動作を制御する。制御部２１０は、プログラムコードの実行に際して、システムメモリ２６０を利用することができる。
【００４６】
データ処理回路２２０は、ホスト１０からのユーザデータの入出力を制御するハードウェア回路である。データ処理回路２２０は、ホスト１０から受信したライトデータをストレージ部３００に記憶させたり、ホスト１０から要求されたリードデータをストレージ部３００またはキャッシュメモリ２５０から読出してホスト１０に送信する。制御部２１０とデータ処理回路２２０とは接続されており、制御部２１０は、データ処理回路２２０を介してキャッシュメモリ２５０等に接続することができる。また、一方のコントローラ２００のデータ処理回路２２０と他方のコントローラ２００のデータ処理回路２２０とは、互いに接続されており、これにより各コントローラ２００間で連携動作を行うことができるようになっている。
【００４７】
上位通信部２３０は、ホスト１０との間で通信を行うためのものである。上位通信部２３０は、複数のホスト１０にそれぞれ接続することができ、それぞれのホスト１０との間の通信を独立して行うことができる。下位通信部２４０は、ストレージ部３００との間で通信を行うためのものである。下位通信部２４０は、複数の経路CN２を介して、複数のディスクアレイとそれぞれ接続されている。上位通信部２３０がホスト１０から受信したライトデータは、キャッシュメモリ２５０に記憶された後、下位通信部２４０を介して所定のディスクドライブ３１０に書き込まれる。下位通信部２４０が所定のディスクドライブ３１０から読出したデータは、キャッシュメモリ２５０に記憶された後、上位通信部２３０によりホスト１０に送信される。
【００４８】
なお、各コントローラ２００の制御部２１０は、LAN等の通信ネットワークCN３によってLANポート１１０に接続されている。LANポート１１０は、管理端末２０との間で通信を行うためのものである。各制御部２１０は、通信ネットワークCN３を介して、互いに通信を行うことができる。また、管理端末２０は、通信ネットワークCN３を介して、各コントローラ２００から情報をそれぞれ収集したり、各コントローラ２００に必要な指示をそれぞれ与えることができる。
【００４９】
ストレージ部３００は、複数のディスクドライブ３１０を備えている。ディスクドライブ３１０としては、例えば、ハードディスクドライブ、フレキシブルディスクドライブ、磁気テープドライブ、半導体メモリドライブ、光ディスクドライブ、ホログラフィックメモリドライブ等のような各種の記憶デバイス及びこれらの均等物を使用可能である。また、例えば、FC（Fibre Channel）ディスクやSATA（Serial AT Attachment）ディスク等のように、異なる種類のディスクドライブをストレージ部３００内に混在させることも可能である。本実施例では、ディスクドライブ３１０がハードディスクドライブである場合を例に挙げて説明する。
【００５０】
各ディスクドライブ３１０は、それぞれ制御回路３１１を備えている。制御回路３１１は、例えば、磁気ディスクの回転や磁気ヘッドの駆動等を制御する。制御回路３１１は、下位通信部２４０から入力されたコマンドに基づいて、磁気ディスクへのデータの書込み及び磁気ディスクからのデータの読出しを行う。各ディスクドライブ３１０は、それぞれ異なる経路CN２により、各コントローラ２００とそれぞれ接続されている。従って、もしも、いずれか一方のコントローラ２００または経路CN２に障害が生じた場合でも、他方のコントローラ２００及び経路CN２を介してデータの入出力を行うことができる。
【００５１】
図３は、コントローラ２００の制御構造の概略を示すブロック図である。カーネル４００は、通信処理４１０を介して、ホスト１０からデータやコマンドを受信する。カーネル４００は、ジョブ群４２０に登録されている各ジョブをそれぞれ所定のタイミングで実行する。
【００５２】
ジョブ群４２０には、例えば、コマンド処理４２１と、オンラインベリファイ処理４２２と、パリティ回復処理４２３とが含まれている。コマンド処理４２１は、ホスト１０から受信されたコマンドに基づいて生成される。オンラインベリファイ処理４２２は、ディスクドライブ３１０の診断を行うための処理である。後述の実施例では、オンラインベリファイ処理を実行する際に、所定範囲のディスクドライブ３１０についてパリティチェックを行うようになっている。パリティ回復処理４２３は、パリティデータ及び他のデータに基づいて、データを回復（再生）させる処理である。
【００５３】
I/O（Input/Output）スケジューラ４３０は、ディスクドライブ３１０へのデータ入出力タイミングを制御する。I/O処理４４０は、ディスクドライブ３１０にデータを読み書きするための処理である。パリティ生成処理４５０は、複数のデータでXOR演算を行うことにより、パリティデータを生成するための処理である。なお、図示した処理以外に、例えば、計画停止を行うための処理や、ディスクドライブ３１０からキャッシュメモリ２５０にデータを記憶させるステージング処理、リストア制御処理等をジョブ群４２０に含めることができる。
【００５４】
制御処理群４６０には、例えば、キャッシュ制御処理４６１と、RAID制御処理４６２とを含めることができる。キャッシュ制御処理４６１は、キャッシュスケジューラ４７０からの指示に基づいて、キャッシュメモリ２５０へのデータ入出力等を制御する。キャッシュ制御処理４６１は、例えば、ディステージ処理前のライトデータ（ダーティデータ）を各コントローラ２００のキャッシュメモリ２５０でそれぞれ保持させるように、各キャッシュメモリ２５０を管理する。RAID制御処理４６２は、所定数のディスクドライブ３１０によってRAIDグループ（パリティグループ）を構成し、冗長記憶領域を生成するための処理である。なお、制御処理群４６０には、図示した処理以外に、例えば、コントローラ間通信処理や資源管理処理等を含めることができる。
【００５５】
図４は、冗長記憶領域の構成及びデータ入出力方法を示す説明図である。この実施例では、説明の便宜上、３個のディスクドライブ３１０をデータディスクとして使用し、１個のディスクドライブ３１０をパリティディスクとして使用する場合を例に挙げる。しかし、これに限らず、RAID５として知られているように、データ及びパリティデータを各ディスクドライブ３１０にそれぞれ分散させて記憶させてもよい。また、一つのパリティグループを構成するディスクドライブ３１０の数は、３個に限定されない。
【００５６】
図４に示すように、ディスクドライブ３１０（Ｄ１）〜ディスクドライブ３１０（Ｄ３）は、それぞれデータディスクとして使用されており、ディスクドライブ３１０（Ｐ）はパリティディスクとして使用されている。以下、データを記憶するディスクドライブ３１０をデータディスクと、パリティデータを記憶するディスクドライブ３１０をパリティディスクと、それぞれ呼ぶ場合がある。
【００５７】
ホスト１０からライトコマンドが発行され、コントローラ２００がライトデータを受信すると、このライトデータはＤ１１,Ｄ２１,Ｄ３１に分割され、各データディスク３１０（Ｄ１）〜３１０（Ｄ３）の所定セクタにそれぞれ格納される（Ｓ１）。コントローラ２００は、データＤ１１，Ｄ２１，Ｄ３１を記憶させる際に、これらのデータからパリティデータＰ１を算出する（Ｓ２：P1=D11 xor D21 xor D31）。コントローラ２００は、算出されたパリティデータＰ１をパリティディスク３１０（Ｐ）に記憶させる（Ｓ３）。
【００５８】
ホスト１０がデータＤ１１の更新を要求する場合、ホスト１０は、新たなデータＤ１１ｎをコントローラ２００に送信する（Ｓ４）。コントローラ２００は、データＤ１１ｎを所定のデータディスク３１０（Ｄ１）に記憶させる前に、旧データＤ１１をデータディスク３１０（Ｄ１）から読み出すと共に（Ｓ５）、旧パリティデータＰ１をパリティディスク３１０（Ｐ）から読み出す（Ｓ６）。
【００５９】
コントローラ２００は、旧データＤ１１と新データＤ１１ｎと旧パリティデータＰ１とから、新たなパリティデータＰ１ｎを算出する（Ｓ７：P1n=D11n xor D11 xor P1）。この算出方法に代えて、新たなパリティデータＰ１ｎを、Ｄ１１ｎとＤ２１及びＤ２３から算出することもできる。但し、後者の算出方法では、旧データを全て読み出すため、データディスクの数が多い場合は、算出時間が長くなる。前者の方法では、データディスクの数と無関係に、新パリティデータを得ることができる。
【００６０】
コントローラ２００は、新たなパリティデータＰ１ｎをパリティディスク３１０（Ｐ）に記憶させる（Ｓ８）。そして、コントローラ２００は、新たなデータＤ１１ｎで旧データＤ１１を上書きする（Ｓ９）。このように、関連するデータ（Ｄ１１，Ｄ２１，Ｄ３１）の一部が更新される場合は、改めてパリティデータが算出され、更新される。
【００６１】
図５は、パリティデータを用いてデータを再生する様子を示す説明図である。例えば、何らかの原因により、図４で更新されたはずのデータＤ１１ｎの書込み処理が実は失敗していたとする。
【００６２】
データＤ１１ｎには、所定ビットのECCが付加されているため、僅かなビットエラーは自動的に修復することができる。しかし、ECCの修復能力を超えてビットエラーが発生した場合は、データＤ１１ｎをデータディスク３１０（Ｄ１）から正常に読み出すことができない（Ｓ１０）。このような読出しエラーをアンコレクタブルエラーと呼ぶ。
【００６３】
そこで、コントローラ２００は、この読出しに失敗したデータＤ１１ｎに関連する他のデータＤ２１，Ｄ３１及びパリティデータＰ１ｎをそれぞれ読出し（Ｓ１１）、データＤ１１ｎを算出する（Ｓ１２：D11n=D21 xor D31 xor P1n）。これにより回復されたデータＤ１１ｎは、ホスト１０に転送される。このように、一組のデータ及びパリティデータ群の中で、いずれか一つのデータまたはパリティデータが失われた場合でも、残された他のデータによって、その失われたデータを回復することができる。
【００６４】
図６は、一つの観点から見た本実施例の主要な機能を示す構成説明図である。ここで、ホスト１０からの更新要求（ライト要求）により、データディスク３１０（Ｄ１）のブロック領域Ｂａには正常にデータが書き込まれ、次のブロック領域Ｂｂにはアンコレクタブルエラーが発生したとする。最後のブロック領域Ｂｃは、正常に更新されたか否か不明な領域である。例えば、ブロック領域Ｂａは「正常領域」と、ブロック領域Ｂｂは「エラー領域」と、ブロック領域Ｂｃは「要確認領域」または「未確認領域」と、それぞれ呼ぶことができる。各ブロック領域Ｂａ，Ｂｂ，Ｂｃは、それぞれ少なくとも一つ以上のブロック（セクタ）から構成されている。但し、Ｂａ及びＢｃは、それぞれ０個である場合もある（Ｂａ＝Ｂｃ＝０）。
【００６５】
ホスト１０は、データの読出しを要求する場合、その読出し範囲を指定してコントローラ２００にリードコマンドを発行する。ここでは、データディスク３１０（Ｄ１）の各ブロック領域Ｂａ，Ｂｂ，Ｂｃが、読出し範囲として指定されたものとする。
【００６６】
最初のブロック領域Ｂａでは正常にデータ更新が行われているため、このブロック領域Ｂａからは、そのまま正常にデータを読み出すことができる。ブロック領域Ｂａから読み出されたデータは、キャッシュメモリ２５０に記憶される。
【００６７】
次のブロック領域Ｂｂでは、アンコレクタブルエラーが発生しているため、データを読み出すことができない。従って、ブロック領域Ｂｂに記憶されるべきであったデータは、データ回復処理２２１により、このデータに対応する他のデータ及びパリティデータに基づいて回復される。即ち、他のデータディスク３１０（Ｄ２），３１０（Ｄ３）及びパリティディスク３１０（Ｐ）の対応する各ブロック領域Ｂｂからデータまたはパリティデータがそれぞれ読み出され、XOR演算が行われる。これにより、データディスク３１０（Ｄ１）のブロック領域Ｂｂのデータを回復させることができる。なお、データ回復処理２２１及び後述のパリティ生成処理２２２及びパリティ整合性チェック処理２２３は、例えば、それぞれデータ処理回路２２０により実行される。
【００６８】
さらに、データ回復処理２２１は、アンコレクタブルエラーの発生したブロック領域Ｂｂ以外に、このブロック領域Ｂｂに続くブロック領域Ｂｃについても、前記同様のデータ回復を行う。
【００６９】
つまり、アンコレクタブルエラーが検出された場合、データ回復処理２２１は、そのアンコレクタブルエラーの生じた位置からホスト１０から指定された読出し範囲の終了位置までの各ブロックにそれぞれ記憶されている各データを、これら各データにそれぞれ対応するパリティデータ及び他のデータに基づいてそれぞれ回復する。データ回復処理２２１は、アンコレクタブルエラーの検出されたブロックに続く他の連続した各ブロックにそれぞれ記憶されているデータが正しいか否かを問わずに、各データをそれぞれ回復する。データ回復処理２２１は、ブロック領域Ｂｃに含まれる各ブロックのデータをそれぞれ回復し、この回復された各データをキャッシュメモリ２５０に記憶させる。
【００７０】
これにより、キャッシュメモリ２５０上には、ホスト１０から要求された範囲の全データが揃うため、コントローラ２００は、キャッシュメモリ２５０上に読み出されたデータをホスト１０に転送する。
【００７１】
なお、上記の説明は、一回の転送で送信可能な最大のデータサイズ（最大転送サイズ）で、ホスト１０とコントローラ２００とが通信を行う場合である。ホスト１０は、最大のデータサイズで読出し範囲を指定可能である。コントローラ２００は、指定された範囲のデータが揃ってからホスト１０に転送する。最大のデータサイズで通信を行うことにより、ホスト１０とコントローラ２００との間の通信回数を低減して、ホスト１０及びコントローラ２００の負荷をそれぞれ少なくすることができる。但し、これに限らず、読出し範囲内の全データが揃うのを待たず、キャッシュメモリ２５０上に読み出されたデータから順番にホスト１０に転送する構成でもよい。例えば、ホスト１０から指定された範囲のデータを、複数回に分けてホスト１０に転送することも可能である。
【００７２】
コントローラ２００は、ホスト１０からのリード要求を処理した後、あるいは、そのリード要求を処理しながら、パリティ整合性のチェックを行う。データ処理回路２２０により実行されるパリティ生成処理２２２は、各データディスク３１０（Ｄ１）〜３１０（Ｄ３）のブロック領域Ｂｃにそれぞれ記憶されているデータに基づいて、改めてパリティデータをそれぞれ生成する。データ処理回路２２０により実行されるパリティ整合性チェック処理２２３は、改めて算出されたそれらの各パリティデータと、パリティディスク３１０（Ｐ）に既に記憶されているブロック領域Ｂｃに関する各パリティデータとをそれぞれ比較する。
【００７３】
算出し直された各パリティデータと、既に記憶されていた各パリティデータとが、それぞれ一致する場合、アンコレクタブルエラーの検出されたデータディスク３１０（Ｄ１）のブロック領域Ｂｃは、正常であると判断することができる。正常とは、ブロック領域Ｂｃに含まれる各ブロックには、前回の更新時にそれぞれ正しくデータが書き込まれていることを意味する。
【００７４】
従って、そのデータディスク３１０（Ｄ１）は、アンコレクタブルエラーの発生が検出されたが、そのまま継続して使用可能である。データディスク３１０（Ｄ１）を継続して使用する場合、エラーの生じたブロック領域Ｂｂについて回復された各データは、予備のブロック領域または同一のブロック領域Ｂｂに記憶させることができる。各ディスク（ディスクドライブ）３１０は、それぞれ予備のブロックを複数ずつ備えており、障害の発生したブロックに代えて、その予備のブロックを使用できるようになっている。
【００７５】
逆に、ブロック領域Ｂｃに関して、各データディスク３１０（Ｄ１）〜３１０（Ｄ３）に記憶されている各データに基づいて算出し直された各パリティデータと、パリティディスク３１０（Ｐ）に記憶されている各パリティデータとが、一部でも一致しない場合、データディスク３１０（Ｄ１）の信頼性は、低下する。
【００７６】
明示的にエラーが検出されたブロック領域Ｂｂよりも、エラーを潜在させたブロック領域Ｂｃの方が、データディスク３１０（Ｄ１）の信頼性に打撃を与える。データディスク３１０（Ｄ１）のブロック領域Ｂｃは、前回のライト要求時にデータが更新されなかったにも拘わらず、正常に更新されたかのように振る舞ったことになる。そこで、コントローラ２００は、データディスク３１０（Ｄ１）の使用禁止を決定し、そのデータディスク３１０（Ｄ１）の閉塞処理を行う。この閉塞処理では、データディスク３１０（Ｄ１）をディスクアレイサブシステムから切り離し、データディスク３１０（Ｄ１）の代わりに予備のデータディスクを使用する。データディスク３１０（Ｄ１）に記憶されていたデータは、パリティデータ等に基づいて回復され、その予備のデータディスクに記憶される。
【００７７】
図７は、リード要求の処理を示すフローチャートである。以下の各フローチャートでも同様であるが、各フローチャートは、処理の概略をそれぞれ示しており、実際のプログラムとは相違する。
【００７８】
コントローラ２００が、ホスト１０からのリードコマンドを受信すると、本処理は開始される。コントローラ２００は、リードコマンドを解析して、読出しを開始するブロックのアドレス（LBA：Logical Block Address）及びブロック数を把握する。コントローラ２００は、読出しを要求された範囲について、その開始ブロックから順番にデータをそれぞれ読出し、キャッシュメモリ２５０に記憶させる（Ｓ２１）。
【００７９】
コントローラ２００は、ホスト１０から要求された全データ（あるいは、一回の転送で送信可能な分のデータ）を、キャッシュメモリ２５０上に読出したか否かを判定する（Ｓ２２）。リード要求に関する各ディスクドライブ３１０に異常がなく、要求された全てのデータを正常にキャッシュメモリ２５０上に読み出せた場合（S22：YES）、コントローラ２００は、キャッシュメモリ２５０上のデータをホスト１０に転送する（Ｓ２３）。これにより、本処理は正常に終了する。
【００８０】
一方、ホスト１０から要求されたデータを一部でも読み出すことができなかった場合（S22：NO）、コントローラ２００は、読出しを要求された範囲内でアンコレクタブルエラーが発生したか否かを判定する（Ｓ２４）。
【００８１】
アンコレクタブルエラーが発生していない場合（S24：NO）、コントローラ２００は、読み出せなかったブロックから再度のデータ読出しを試みる（Ｓ２５）。そして、コントローラ２００は、全てのデータをキャッシュメモリ２５０上に読み出せたか否かを再び判定する（Ｓ２２）。全てのデータを読み出せた場合（S22：YES）、そのデータをホスト１０に転送する（Ｓ２３）。なお、所定回数リトライしてもデータを読み出せなかった場合は、エラーとして処理を終了することができる（不図示）。
【００８２】
アンコレクタブルエラーの発生が検出された場合（S24：YES）、そのアンコレクタブルエラーの生じたブロックから、読出し範囲の末尾に対応するブロックまでの各ブロックについて、それぞれデータを回復する（Ｓ２６）。
【００８３】
次に、コントローラ２００は、アンコレクタブルエラーの検出されたブロック（エラーブロック）の次に位置するブロックから、読出し要求範囲の末尾に位置するブロックまでの各ブロックについて、それぞれパリティデータを算出し直す（Ｓ２７）。そして、コントローラ２００は、パリティディスクから読出した各パリティデータ（旧パリティデータ）と改めて算出された各パリティデータ（新パリティデータ）とを比較し、両者が全て一致するか否かを判定する（Ｓ２８）。
【００８４】
各旧パリティデータと各新パリティデータとが全て一致する場合（S28：YES）、コントローラ２００は、アンコレクタブルエラーの検出されたブロックについて、修復処理を実行する（Ｓ２９）。修復処理では、エラーブロックに対し予備の交替ブロックを割当て、エラーブロックに関して回復されたデータを交替ブロックに書き込む。
【００８５】
これに対し、各旧パリティデータと各新パリティデータとが一部でも一致しない場合（S28：NO）、コントローラ２００は、エラーブロックを有するディスクドライブ３１０の閉塞処理を実行する（Ｓ３０）。閉塞処理では、例えば、アンコレクタブルエラーの検出されたディスクドライブ３１０をストレージ部３００から論理的に切り離して使用を禁止し、このディスクドライブ３１０に記憶されていたデータを予備のディスクドライブに退避させる。
【００８６】
図８は、管理端末２０の端末画面に表示される警告例を示す説明図である。コントローラ２００からの情報に基づいて、管理端末２０のストレージ管理部２１は、図８に示すような警告画面を生成し、システム管理者等のユーザに提供する。
【００８７】
警告画面には、例えば、イベント発生時刻を示す領域Ｇ１，Ｇ４と、イベントの内容を示す領域Ｇ２，Ｇ５と、イベントの詳細を示す領域Ｇ３とを含めることができる。本実施例に関するイベント内容としては、例えば、「ディスクドライブの閉塞」（Ｇ２）と、「新旧のパリティに不整合発生」（Ｇ５）とを挙げることができる。イベントの詳細情報としては、例えば、閉塞処理されたディスクドライブ３１０を特定する識別情報（ドライブ番号等）を挙げることができる。
【００８８】
このように構成される本実施例では、以下の効果を奏する。本実施例では、アンコレクタブルエラーの発生が検出された場合、エラーブロックのデータを回復させると共に、エラーブロックに続く所定範囲の各ブロック（未確認領域の各ブロック）について、パリティデータを用いたデータ回復処理２２１及びパリティ整合性チェック処理２２３をそれぞれ行う構成とした。従って、更新されていない誤ったデータがホスト１０に読み出される可能性を低減することができ、さらに、ディスクドライブ３１０の信頼性を確認してから継続使用するか否かを判断することができる。これにより、ディスクアレイサブシステム１００の信頼性を向上させることができる。
【００８９】
本実施例では、未確認領域の各ブロックについてパリティ整合性チェックの結果、新旧のパリティデータに不整合が検出された場合は、エラーブロックを有するディスクドライブ３１０を閉塞処理する構成とした。これにより、信頼性の低いディスクドライブ３１０の継続使用を未然に防止することができ、ディスクアレイサブシステム１００の信頼性が向上する。
【００９０】
本実施例では、ホスト１０からデータの読出しが要求された場合に、アンコレクタブルエラーが生じたか否かを検出し、アンコレクタブルエラーの発生を検出した場合には、データ回復処理２２１及びパリティ整合性チェック処理２２３を行う構成とした。従って、必要に応じてディスクドライブ３１０の信頼性を確認することができる。一方、例えば、ライト要求時に、ディスクドライブ３１０に書き込んだデータを読出して、キャッシュメモリ２５０上に残っているライトデータと比較する方法も考えられる。しかし、この場合は、データをディスクドライブ３１０に書き込むたびに、それを読み出す必要があるため、書込み処理速度が大幅に低下し、コントローラ２００の負荷も増大する。これに対し、本実施例では、リード要求時にパリティ整合性チェックを行うため、ライト要求時に確認しながらデータを書き込む場合に比べて、処理負担を軽減することができる。
【００９１】
本実施例では、アンコレクタブルエラーが検出された場合に、最初にデータ回復処理２２１を行って、ホスト１０から要求されたデータをホスト１０に転送し、次に、パリティ整合性チェック処理２２３を行って、未確認領域の各ブロックのデータが正常であるか否かを確認する構成とした。従って、応答性の大幅な低下を防止し、信頼性を改善することができる。
【実施例２】
【００９２】
図９に基づいて第２実施例を説明する。本実施例を含む以下の各実施例は、第１実施例の変形例に相当する。本実施例では、エラーブロックに続く所定範囲の各ブロックの信頼性を一つずつ確認する。
【００９３】
図９は、リード処理の要部を示すフローチャートである。このフローチャートは、図７中のＳ２４から続く。アンコレクタブルエラーが検出されると（S24：YES）、コントローラ２００は、エラーブロックの次のブロックにポインタを移動させる（Ｓ４０）。
【００９４】
コントローラ２００は、そのブロックについてパリティデータを算出し直し（Ｓ４１）、この改めて算出された新パリティデータとパリティディスクに記憶済の旧パリティデータとが一致するか否かを判定する（Ｓ４２）。両パリティデータが一致する場合（S42：YES）、そのブロックに記憶されているデータは正しいと判断される。続いて、コントローラ２００は、エラーブロックに続く所定範囲の各ブロックについて信頼性を検査したか否かを判定する（Ｓ４３）。未検査のブロックが一つでも残っている場合（S43：NO）、コントローラ２００は、次のブロックにポインタを移動させ（Ｓ４４）、上述したＳ４１，Ｓ４２の処理をそれぞれ繰り返す。
【００９５】
所定範囲内の全てのブロックについて、そこに記憶されているデータの信頼性を検査した場合（S43：YES）、即ち、エラーブロックに続く所定数の各ブロックの信頼性が確認された場合、コントローラ２００は、エラーブロックに予備の交替ブロックを割当て、回復されたデータを交替ブロックに書き込んで（Ｓ４５）、本処理を終了する。
【００９６】
これに対し、もしも、そのブロックについて算出し直された新パリティデータと既に記憶されている旧パリティデータとが一致しない場合（S42：NO）、コントローラ２００は、未検査のブロックの有無を問わずに、エラーブロックを有するディスクドライブ３１０を閉塞処理させる（Ｓ４６）。
【００９７】
このように構成される本実施例でも第１実施例と同様の効果を得ることができる。これに加えて、本実施例では、エラーブロックに続く所定数の各ブロックの信頼性を一つずつ確認し、不正なデータを記憶するブロックが検出された時点で、ディスクドライブ３１０を直ちに閉塞させる構成とした。
【００９８】
従って、エラーブロックに続く近傍のブロックに不正なデータが記憶されている場合、短時間でパリティ整合性チェック処理２２３を完了させることができる。即ち、更新されていないにも拘わらず正常に更新されたかのように振る舞うブロックがエラーブロックの直後に位置するような場合、コントローラ２００は、不正データを記憶するブロックを直ちに検出して、ディスクドライブ３１０の閉塞処理を行うことができる。
【実施例３】
【００９９】
図１０に基づいて第３実施例を説明する。本実施例では、ディスクドライブ３１０を閉塞させずに交替ブロックを用いて修復させる。
【０１００】
図１０は、リード処理を示すフローチャートである。このフローチャートは、図７と共に述べたＳ２１〜Ｓ２９を全て備えている。同一ステップの説明は省略して、本実施例に特徴的な部分を説明する。
【０１０１】
未確認領域の各ブロックのいずれか一つ、即ち所定範囲内の各ブロックのうちいずれか一つでも、そのブロックに関する新旧のパリティデータが一致しない場合（S28：NO）、コントローラ２００は、その不正なデータを記憶するブロックを修復する（Ｓ５０）。コントローラ２００は、そのブロックに予備の交替ブロックを割当て、そのブロックについて回復されたデータを交替ブロックに書き込む。
【０１０２】
このように構成される本実施例でも第１実施例と同様の効果を得ることができる。これに加えて、本実施例では、ディスクドライブ３１０を閉塞処理することなく、ブロックを修復して継続使用するため、信頼性を改善しつつ運用コストを低減できる。なお、例えば、修復されるブロック数が所定の値を超えた場合は、そのディスクドライブ３１０を閉塞処理することができる。また、ブロックを修復した場合、管理端末２０を介して、新規の予備ドライブの追加をユーザに促す構成でもよい。
【実施例４】
【０１０３】
図１１に基づいて第４実施例を説明する。本実施例では、定期的または不定期に実施される診断時に、パリティ整合性チェック処理２２３を行う。
【０１０４】
図１１は、改良されたHDD診断処理を示すフローチャートである。HDD診断処理とは、ディスクアレイサブシステム１００が備える自己診断プログラムの一つである。本処理は、例えば、ディスクアレイサブシステム１００のI/O負荷が少ない休日や平日の夜間等に、行うことができる。
【０１０５】
コントローラ２００は、診断対象のディスクドライブ３１０（図１１中では「HDD」と表示）にベリファイ要求を発行する（Ｓ６０）。このベリファイ要求を受けたディスクドライブ３１０は、例えば、ECC等に基づいて自己診断を行う。コントローラ２００は、ベリファイが正常に終了したか否かを判定する（Ｓ６１）。正常に終了した場合（S61：YES）、結合子１を介してＳ６８に移動する。
【０１０６】
コントローラ２００は、診断すべき全てのディスクドライブ３１０を診断したか否かを判定する（Ｓ６８）。未診断のディスクドライブ３１０が残っている場合（S68：NO）、コントローラ２００は、次のディスクドライブ３１０を診断対象として選定し（Ｓ６９）、このディスクドライブ３１０が正常か否かを診断する（Ｓ６０，Ｓ６１）。全てのディスクドライブ３１０について診断を完了した場合（S68：YES）、本処理は終了する。
【０１０７】
これに対し、ベリファイが正常に終了しなかった場合（S61：NO）、コントローラ２００は、アンコレクタブルエラーが発生したか否かを判定する（Ｓ６２）。アンコレクタブルエラーが発生していない場合（S62：NO）、コントローラ２００は、ベリファイ処理を再び行わせる（Ｓ６３）。所定回数以上繰り返してもベリファイが正常に行われない場合は、本処理を終了させることもできる（不図示）。
【０１０８】
ベリファイが正常に終了しない原因がアンコレクタブルエラーにある場合（S62：YES）、コントローラ２００は、エラーブロックに続く所定範囲内の各ブロックについてパリティデータをそれぞれ算出し直す（Ｓ６４）。コントローラ２００は、これら算出された各新パリティデータと各旧パリティデータとが一致するか否かを判定する（Ｓ６５）。
【０１０９】
所定範囲内の各ブロックについて新旧の各パリティデータが全て一致する場合（S65：YES）、コントローラ２００は、前記実施例で述べたように、エラーブロックの修復処理（リカバリ処理）を行う（Ｓ６７）。そして、コントローラ２００は、診断すべき全てのディスクドライブ３１０について診断したか否かを判定し（Ｓ６８）、未診断のディスクドライブ３１０が残っている場合は（S68：NO）、次のディスクドライブ３１０に移動して（Ｓ６９）、そのディスクドライブ３１０にベリファイ要求を発行する（Ｓ６０）。
【０１１０】
これに対し、所定範囲内の各ブロックについて新旧のパリティデータが一つでも一致しない場合（S65：NO）、コントローラ２００は、いま診断しているディスクドライブ３１０について閉塞処理を行う（Ｓ６６）。
【０１１１】
このように、コントローラ２００は、診断すべき全てのディスクドライブ３１０を診断しながら、アンコレクタブルエラーの有無を検査し、アンコレクタブルエラーを検出した場合は、未確認領域の各ブロックについてデータの信頼性をチェックする。そして、予定された全てのディスクドライブ３１０について診断を完了した場合（S68：YES）、本処理は終了する。
【０１１２】
このように構成される本実施例も第１実施例と同様の効果を奏する。これに加えて、本実施例では、HDD診断時にパリティ整合性チェックを併せて実行するため、不正なデータを記憶しているおそれのあるブロックの検出率を高めることができ、より一層信頼性を改善することができる。また、HDD診断処理は、ディスクアレイサブシステム１００の負荷が少ない時間帯に実行可能であるため、ストレージシステムの性能をあまり低下させずに信頼性を確認し回復させることができる。
【実施例５】
【０１１３】
図１２に基づいて第５実施例を説明する。本実施例では、アンコレクタブルエラーが検出された場合、エラーブロックに続くブロックが所定値Ｃｔ以上正常である場合は、以後のパリティ整合性チェックを中止する。
【０１１４】
図１２は、リード要求処理を示すフローチャートである。コントローラ２００は、ホスト１０からのリードコマンドに基づいて、要求された読出し範囲の先頭に位置するブロックを選択する（Ｓ７０）。
【０１１５】
コントローラ２００は、先頭ブロックからデータを読出し、キャッシュメモリ２５０に記憶させる（Ｓ７１）。コントローラ２００は、先頭ブロックからデータを読み出せたか否かを判定する（Ｓ７２）。
【０１１６】
正常に読み出せた場合（S72：YES）、コントローラ２００は、要求された全てのデータ（あるいは一回の転送で送信可能なサイズ分のデータ）を、キャッシュメモリ２５０上に読み出すことができたか否かを判定する（Ｓ７３）。データが揃っていない場合（S73：NO）、コントローラ２００は、次のブロックに移動し（Ｓ７４）、そのブロックからデータを読出してキャッシュメモリ２５０に記憶させる（Ｓ７１）。そして、要求されたデータがキャッシュメモリ２５０に記憶されると（S73：YES）、コントローラ２００は、このデータをホスト１０に転送する（Ｓ７５）。
【０１１７】
以上のＳ７０〜Ｓ７５は、ディスクドライブ３１０から問題なくデータを読み出すことができた場合に実行される。これに対し、あるブロックからデータを正常に読み出すことができない場合（S72：NO）、コントローラ２００は、その読み出せなかったデータをパリティデータ等に基づいて復元し、キャッシュメモリ２５０に記憶させる（Ｓ７６）。そして、コントローラ２００は、そのエラーブロックの修復処理を行い、回復させたデータを交替ブロックに書き込む（Ｓ７７）。
【０１１８】
コントローラ２００は、エラーブロックの次のブロックに移動する（Ｓ７８）。コントローラ２００は、そのブロックのデータの信頼性を問わずに、そのブロックのデータをパリティデータ等から回復させ、回復させたデータをキャッシュメモリ２５０に記憶させる（Ｓ７９）。
【０１１９】
次に、コントローラ２００は、そのブロックについてのパリティデータを改めて算出し（Ｓ８０）、そのブロックに関して既に記憶されているパリティデータと一致するか否かを判定する（Ｓ８１）。もしも、そのブロックに関する新旧のパリティデータが一致しない場合（S81：YES）、コントローラ２００は、パリティエラーをカウントするためのカウンタＣｅの値を、１つインクリメントさせる（Ｓ８２）。
【０１２０】
コントローラ２００は、パリティエラーカウンタＣｅの値が、予め設定されている所定の第１閾値Ｃ１以上か否かを判定する（Ｓ８３）。閾値Ｃ１は、０に設定可能である。パリティエラーカウンタＣｅの値が閾値Ｃ１以上になった場合（S83：YES）、コントローラ２００は、そのディスクドライブ３１０について閉塞処理を行う（Ｓ８４）。なお、図中では、省略しているが、パリティの不整合が検出された場合（S81：YES）、そのブロックに予備の交替ブロックを割り当てて修復することができる。
【０１２１】
パリティエラーカウンタＣｅの値が閾値Ｃ１未満の場合（S83：NO）、コントローラ２００は、さらに次のブロックに移動し（Ｓ７８）、そのブロックのデータを回復させてから（Ｓ７９）、パリティ整合性をチェックする（Ｓ８０，Ｓ８１）。
【０１２２】
新旧のパリティデータが一致する場合（S81：NO）、コントローラ２００は、パリティ整合性チェックに合格したブロック数をカウントするための正常ブロック数カウンタＣｔの値を、１つ増加させる（Ｓ８５）。コントローラ２００は、正常ブロック数カウンタＣｔの値が、予め設定された第２閾値Ｃ２以上になったか否かを判定する（Ｓ８６）。この閾値Ｃ２は、例えば、０以上の整数に設定可能である。
【０１２３】
パリティ整合性チェックをパスしたブロック数ＣｔがＣ２以上になった場合（S86：YES）、コントローラ２００は、以後の各ブロックは正常であると判断し、パリティ整合性チェック処理を終了して、Ｓ７４に移る。ＣｔがＣ２未満の場合（S86：NO）、コントローラ２００は、次のブロックに移動して（Ｓ７８）、そのブロックについてデータを回復させると共に（Ｓ７９）、パリティ整合性をチェックする（Ｓ８０，Ｓ８１）。
【０１２４】
なお、パリティ不整合が検出された場合（S81：YES）、正常ブロック数カウンタＣｔの値をリセットする構成でもよい。
【０１２５】
このように構成される本実施例も第１実施例と同様の効果を得ることができる。これに加えて、本実施例では、パリティ整合性チェック（Ｓ８０，Ｓ８１）に合格したブロック数Ｃｔが所定の閾値Ｃ２以上になった場合は、パリティ整合性チェックを終了させる構成とした。従って、エラーブロック以外の他のブロックに異常が無いような場合は、無駄なパリティ整合性チェックが行われるのを防止でき、ディスクアレイサブシステムの処理負担を軽減することができる。換言すれば、確認が必要な範囲だけパリティ整合性チェックを行うことができ、処理負荷を軽減しつつ信頼性を改善することができる。
【０１２６】
本実施例では、所定数Ｃ１以上のパリティ不整合が検出されたディスクドライブ３１０を閉塞処理させる構成とした。従って、信頼性を改善しながら、運用コストを低下させることができる。
【実施例６】
【０１２７】
図１３，図１４に基づいて第６実施例を説明する。本実施例では、ディスクドライブ３１０のドライブ種別に応じて、パリティ整合性をチェックする範囲を決定する。
【０１２８】
図１３は、リード処理を示すフローチャートである。このフローチャートは、図７中に示されているステップに対応するステップを備えている。Ｓ９１〜Ｓ９５は、図７中のＳ２１〜Ｓ２５にそれぞれ対応し、同一の処理を行うので説明を省略する。
【０１２９】
アンコレクタブルエラーが検出された場合（S94：YES）、コントローラ２００は、おパリティチェックブロック数管理テーブルＴ１を参照し、ディスクドライブ３１０の種別に応じたチェックブロック数ＢＮを取得する（Ｓ９５）。
【０１３０】
この管理テーブルＴ１の構成例を図１４に示す。管理テーブルＴ１には、ディスクドライブ３１０の種別毎に、それぞれパリティ整合性チェックを行うブロック数ＢＮが予め登録されている。コントローラ２００は、エラーブロックに続く所定数ＢＮだけの各ブロックについて、それぞれデータを回復させ（Ｓ９７）、所定数ＢＮの各ブロックについてパリティ整合性チェックをそれぞれ行う（Ｓ９８，Ｓ９９）。
【０１３１】
前記第１実施例と同様に、新旧のパリティデータが一致する場合（S99：YES）、コントローラ２００は、エラーブロックを修復し（Ｓ１００）、Ｓ９２に戻る。新旧のパリティデータが一致しない場合（S99：NO）、コントローラ２００は、そのディスクドライブ３１０を閉塞させる（Ｓ１０１）。
【０１３２】
本実施例はこのように構成されるので、前記第１実施例と同様の効果を奏する。これに加えて、本実施例では、ディスクドライブ３１０の種別に応じて、パリティ整合性チェックを行うべきブロック数ＢＮを決定するため、ディスクドライブ３１０の種別に応じて、各ブロックの信頼性を確認することができる。
【０１３３】
本実施例では、エラーブロックに後続する各ブロックのうち、所定数ＢＮだけパリティ整合性チェックを行う構成とした。従って、もしも、この所定数ＢＮが、そのディスクドライブ３１０から一回の転送で送信可能な最大のブロック数に設定されている場合、ホスト１０から要求された読出し範囲を超えて、パリティ整合性チェック（パリティチェック）が行われる。なお、所定数ＢＮだけデータの回復及びパリティチェックを行う場合を示したが、これに代えて、データを回復させるブロック数とパリティチェックを行うブロック数とを違える構成でもよい。例えば、エラーブロックから読出し範囲の末尾のブロックまでをデータ回復範囲とし、エラーブロックの次のブロックから最大転送ブロック数までをパリティチェック範囲とすることもできる。
【実施例７】
【０１３４】
図１５に基づいて第７実施例を説明する。本実施例では、アンコレクタブルエラー以外の他のエラーの検出に基づいて、アンコレクタブルエラーに起因する所定の処理（データの回復及び不正データの検出）を行う。
【０１３５】
コントローラ２００は、各ディスクドライブ３１０毎に、アンコレクタブルエラーを含むエラーが発生したか否かをそれぞれ監視している（Ｓ１１０）。ここで、アンコレクタブルエラー以外のエラーとしては、例えば、インターフェースエラー等を挙げることができる。
【０１３６】
コントローラ２００は、エラー発生を検出すると（S110：YES）、この検出されたエラーがアンコレクタブルエラーであるか否かを判定する（Ｓ１１１）。アンコレクタブルエラーである場合（S111：YES）、コントローラ２００は、そのエラーブロックに続く所定範囲の各ブロックについて、それぞれパリティデータを算出し直し（Ｓ１１２）、パリティ整合性チェックを行う（Ｓ１１３）。新旧のパリティデータが一致する場合（S113：YES）、コントローラ２００は、エラーブロックの修復処理を行う（Ｓ１１４）。新旧のパリティデータが不一致の場合（S113：NO）、コントローラ２００は、そのディスクドライブ３１０について閉塞処理を行う（Ｓ１１５）。
【０１３７】
一方、アンコレクタブルエラー以外のエラーが検出された場合（S111：NO）、コントローラ２００は、エラーの発生回数をカウントするためのエラーカウンタＣｅ２の値を１つ増加させる（Ｓ１１６）。コントローラ２００は、エラーカウンタＣｅ２の値が第３閾値Ｃ３以上になったか否かを判定する（Ｓ１１７）。Ｃｅ２がＣ３未満の場合（S117：NO）、リトライ処理を行った後で、Ｓ１１０に戻る。
【０１３８】
エラーカウンタＣｅ２が閾値Ｃ３以上になった場合（S117：YES）、コントローラ２００は、そのディスクドライブ３１０について、各ブロックのパリティ整合性をそれぞれチェックする（Ｓ１１８）。パリティの不整合が検出された場合（S119：YES）、コントローラ２００は、そのディスクドライブ３１０について閉塞処理を行う（Ｓ１２０）。
【０１３９】
このように構成される本実施例も第１実施例と同様の効果を得ることができる。これに加えて、本実施例では、各ブロックのパリティ整合性チェックを、他のエラーの発生回数をトリガとして実行する。従って、エラーが所定数Ｃ３以上発生したディスクドライブ３１０について、その信頼性を予め確認することができる。
【実施例８】
【０１４０】
図１６に基づいて第８実施例を説明する。本実施例では、信頼性を維持するためのモードを複数種類用意しておき、各ディスクドライブ３１０毎にそれぞれ異なるモードを設定できるようにしている。
【０１４１】
上述した各実施例のように、パリティ整合性チェックを開始するタイミング（トリガの種類）や、パリティ不整合が発見された場合の措置（閉塞処理か修復処理か）等のような属性の組合せにより、複数種類の信頼性維持モードを構成し得る。
【０１４２】
一方、ディスクドライブ３１０は、例えば、ドライブ種別や、そこに記憶されるデータの価値等の属性の組合せにより、複数種類に分類することができる。データの価値とは、例えば、そのデータの利用価値、即ち、アクセス頻度の大小等を意味する。一般に、アプリケーションプログラム１１によって生成された直後のデータはアクセス頻度が高く、時間の経過につれてアクセス頻度は低下していく。
【０１４３】
本実施例では、各ディスクドライブ３１０の特性に応じて、適切な信頼性維持モードをそれぞれ設定できるようにしている。モードの設定は、ユーザが手動で行うこともできるし、予め設定されたポリシーに従って自動的に行うことも可能である。さらに、ポリシーに従って自動的に設定されたモードを、ユーザが手動で変更することもできる。
【０１４４】
本実施例では、ユーザが管理端末２０を用いてモードを設定する場合を例に挙げる。コントローラ２００は、管理端末２０からモード設定の指示が発行されたか否かを判定する（Ｓ１３０）。
【０１４５】
コントローラ２００は、管理端末２０から指定されたディスクドライブ３１０を選択し（Ｓ１３１）、そのディスクドライブ３１０の重要度を取得する（Ｓ１３２）。
【０１４６】
ここで、ディスクドライブ３１０の重要度とは、そのディスクドライブ３１０のディスクアレイサブシステム１００における位置づけを意味する。例えば、オンラインボリュームに使用されているディスクドライブ３１０は、重要度が高い。これに対し、例えば、アーカイブボリュームに使用されているディスクドライブ３１０は、オンラインボリュームに使用されるドライブに比べると重要度が相対的に低くなる可能性がある。また、例えば、そのディスクドライブ３１０に記憶されているデータの種類によって、ディスクドライブ３１０の重要度は変化しうる。また、例えば、FCディスク等のような高性能のディスクドライブ３１０は、ATAディスク等のような低性能のディスクドライブ３１０よりも重要度が高い場合もある。
【０１４７】
本実施例では、ディスクドライブ３１０の重要度は、ユーザによって明示的に指示されるが、上述のように、ドライブ種別やデータ種別、ボリューム種別等に基づいて、自動的に重要度を算出する構成でもよい。
【０１４８】
コントローラ２００は、選択されたディスクドライブ３１０の重要度を取得すると、このディスクドライブ３１０が重要なドライブであるか否かを判定する（Ｓ１３３）。重要なドライブである場合（S133：YES）、コントローラ２００は、そのディスクドライブ３１０について、高い信頼性を有するモードを適用する（Ｓ１３４，Ｓ１３５）。
【０１４９】
即ち、重要なディスクドライブ３１０については、ホスト１０からリード要求が発行された場合にパリティ整合性チェックを行い、パリティ不整合が検出されたときは閉塞処理を行う（Ｓ１３４）。また、これに加えて、重要なディスクドライブ３１０については、HDD診断処理を行う際にもパリティ整合性チェックを行い、パリティ不整合が検出されたときは閉塞処理を行う（Ｓ１３５）。
【０１５０】
これとは逆に、重要ではないディスクドライブ３１０の場合（S133：NO）、コントローラ２００は、そのディスクドライブ３１０に信頼性の低いモードを適用する。例えば、コントローラ２００は、ホスト１０からリード要求が発行された場合にのみ、パリティ整合性チェックを行う（Ｓ１３６）。また、コントローラ２００は、不正データを記憶するブロックに交替ブロックを割り当てて、修復処理を行う（Ｓ１３６）。
【０１５１】
なお、モードの具体的内容は、上述の例に限らず、種々のものを採用できる。また、「ディスクドライブの重要度」に代えて、「ディスクドライブの信頼性」に基づいて、適用モードを制御する構成でもよい。例えば、推奨品以外のディスクドライブがストレージ部３００に装着されたような場合、その信頼性の低いディスクドライブには高信頼性モードを適用して、不正データの発生について監視を強めることができる。あるいは、SATAディスクのようなFCディスクに比べて信頼性の低いドライブについては、複数種類のパリティ整合性チェック（Ｓ１３４，Ｓ１３５）を行い、FCディスクのような高信頼性ディスクについては、原則としてパリティ整合性チェックを行わない構成でもよい。
【０１５２】
なお、本発明は、上述した各実施例に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。
【図面の簡単な説明】
【０１５３】
【図１】本発明の実施例に係わる記憶制御装置の全体概要を示す説明図である。
【図２】ストレージシステムのブロック図である。
【図３】記憶制御装置の制御構造を示す説明図である。
【図４】パリティデータを用いて冗長記憶構造を構成する様子を示す説明図である。
【図５】パリティデータ等に基づいてデータを回復させる様子を示す説明図である。
【図６】一つの観点から見た記憶制御装置の主要な機能を示す説明図である。
【図７】リード要求を受信した場合の処理を示すフローチャートである。
【図８】不正データ発見時の警告画面の例を示す説明図である。
【図９】第２実施例に係る記憶制御装置により実行されるリード要求処理の要部を示すフローチャートである。
【図１０】第３実施例に係る記憶制御装置により実行されるリード要求処理を示すフローチャートである。
【図１１】第４実施例に係る記憶制御装置により実行されるドライブ診断処理を示すフローチャートである。
【図１２】第５実施例に係る記憶制御装置により実行されるリード要求処理を示すフローチャートである。
【図１３】第６実施例に係る記憶制御装置により実行されるリード要求処理を示すフローチャートである。
【図１４】パリティチェックを行うブロック数を管理するテーブルを示す説明図である。
【図１５】第７実施例に係る記憶制御装置により実行されるパリティチェック処理を示すフローチャートである。
【図１６】第８実施例に係る記憶制御装置により実行される信頼性維持モードの決定処理を示すフローチャートである。
【符号の説明】
【０１５４】
１〜４…記憶デバイス、５…コントローラ、６…メモリ、７…ホスト、８…データ回復処理、１０…ホスト、１１…アプリケーションプログラム、２０…管理端末、２１…ストレージ管理部、２２…LANポート、CN１〜CN４…通信ネットワーク、１００…ディスクアレイサブシステム、１１０…LANポート、２００…コントローラ、２１０…制御部、２２０…データ処理回路、２２１…データ回復処理、２２２…パリティ生成処理、２２３…パリティ整合性チェック処理、２３０…上位通信部、２４０…下位通信部、２５０…キャッシュメモリ、２６０…システムメモリ、２７０…フラッシュメモリ、３００…ストレージ部、３１０…ディスクドライブ、３１０（Ｄ１）〜（Ｄ３）…データディスク、３１０（Ｐ）…パリティディスク、３１１…制御回路、４００…カーネル、４１０…通信処理、４２０…ジョブ群、４２１…コマンド処理、４２２…オンラインベリファイ処理、４２３…パリティ回復処理、４３０…I/Oスケジューラ、４４０…I/O処理、４５０…パリティ生成処理、４６０…制御処理群、４６１…キャッシュ制御処理、４６２…RAID制御処理、４７０…キャッシュスケジューラ、Ｂａ，Ｂｂ，Ｂｃ…ブロック領域
【図１】
2006268673.tif 000003
【図２】
2006268673.tif 000004
【図３】
2006268673.tif 000005
【図４】
2006268673.tif 000006
【図５】
2006268673.tif 000007
【図６】
2006268673.tif 000008
【図７】
2006268673.tif 000009
【図８】
2006268673.tif 000010
【図９】
2006268673.tif 000011
【図１０】
2006268673.tif 000012
【図１１】
2006268673.tif 000013
【図１２】
2006268673.tif 000014
【図１３】
2006268673.tif 000015
【図１４】
2006268673.tif 000016
【図１５】
2006268673.tif 000017
【図１６】
2006268673.tif 000018