(57)【要約】【課題】本発明は、無駄なコピーが行われるのを抑制して、効率的にエラードライブを回復させる。【解決手段】ディスクドライブ（＃１）のエラー回数が第１閾値以上になると、ドライブコピー部５Ａによって、そのディスクドライブ（＃１）に記憶されているデータがスペアドライブ２Ａにコピーされる。ドライブコピーが完了する前に、ディスクドライブ（＃１）のエラー回数が第２閾値以上になると、ディスクドライブ（＃１）は閉塞処理され、ドライブコピーに代わって、コレクションコピー部５Ｃによるコレクションコピーが開始される。コレクションコピー部５Ｃは、コピー進捗状況管理部５Ｂによって管理されているドライブコピーの完了位置（コピー中断位置）を引き継ぐことにより、ドライブコピーが中断された位置から、コレクションコピーを開始する。【選択図】図１
2007233903.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つ以上の予備の記憶デバイスを含む複数の記憶デバイスを備えた記憶制御装置であって、
前記各記憶デバイスのエラー状況を検出するエラー状況検出部と、
前記エラー状況検出部によりエラーが検出された場合に、このエラーの検出された記憶デバイスに対する上位装置からの入出力要求を制御する入出力要求制御部と、
前記エラー状況検出部により検出されたエラー状況が予め設定された閾値を超える場合に、エラーの検出された回復対象の記憶デバイスの記憶内容を前記予備の記憶デバイス内に回復させる回復制御部と、
を備え、
前記回復制御部は、
前記回復対象の記憶デバイスからデータを読み出して、この読み出したデータを前記予備の記憶デバイスにコピーさせる第１コピーモードと、
前記回復対象の記憶デバイスと同一のRAIDグループに属する他の記憶デバイスから読み出されたデータに基づいて、前記回復対象の記憶デバイスに記憶されているデータを復元し、この復元されたデータを前記予備の記憶デバイスにコピーさせる第２コピーモードと、を備えており、かつ、
前記回復制御部は、前記第１コピーモードから前記第２コピーモードに移行する場合、前記第１コピーモードによるコピー中断位置から前記第２コピーモードを開始させる記憶制御装置。
【請求項２】
前記回復制御部は、
前記エラー状況検出部により検出されたエラー状況が、第１閾値以上であって第２閾値未満の場合に、前記第１コピーモードを実行して、前記回復対象の記憶デバイスの記憶内容を回復させ、
前記エラー状況検出部により検出されたエラー状況が、前記第２閾値以上の場合に、前記第１コピーモードから前記第２コピーモードに移行することにより、前記回復対象の記憶デバイスの記憶内容を、引き続いて回復させる請求項１に記載の記憶制御装置。
【請求項３】
前記回復制御部は、前記第１コピーモードから前記第２コピーモードへ移行する場合、前記第１コピーモードで使用されていた前記予備の記憶デバイスを確保し、この確保された予備の記憶デバイスを使用して前記第２コピーモードを開始する請求項１に記載の記憶制御装置。
【請求項４】
前記回復制御部は、前記第１コピーモードと前記第２モードとを一つの処理として連続的に実行する請求項１に記載の記憶制御装置。
【請求項５】
前記エラー状況検出部により検出されたエラー状況が、第１閾値以上であって第２閾値未満の場合に、前記回復対象の記憶デバイスには、第１コピーモードを選択するための第１ステータスが設定され、
前記エラー状況検出部により検出されたエラー状況が、前記第２閾値以上の場合に、前記回復対象の記憶デバイスには、前記第２コピーモードを選択するための第２ステータスが設定され、
前記回復制御部は、
前記回復対象の記憶デバイスに前記第１ステータスが設定された場合に、前記第１コピーモードを開始して、前記回復対象の記憶デバイスから前記予備の記憶デバイスへ所定量ずつデータをコピーし、
この所定量ずつのデータコピーが完了するごとに、コピー完了位置を管理するためのコピー位置管理情報を更新し、
前記コピー位置管理情報を更新する度に、前記回復対象の記憶デバイスのステータスを確認し、
前記回復対象の記憶デバイスのステータスが前記第１ステータスから前記第２ステータスへ変更された場合は、前記コピー位置管理情報を引き続き使用して、前記第１コピーモードから前記第２コピーモードに移行する請求項１に記載の記憶制御装置。
【請求項６】
前記入出力要求制御部は、前記上位装置による前記予備の記憶デバイスへの更新状況を更新管理情報に記憶して管理しており、
前記回復制御部は、前記更新された記憶領域以外の記憶領域について、前記第１コピーモードまたは前記第２コピーモードを実行させる請求項１に記載の記憶制御装置。
【請求項７】
入出力要求制御部は、前記更新管理情報に基づいて、前記上位装置からの入出力要求を処理するために使用する記憶デバイスを特定する請求項６に記載の記憶制御装置。
【請求項８】
前記回復制御部は、同一のRAIDグループ内で前記第２コピーモードが複数起動された場合に、処理の先行している第２コピーモードにより回復されたデータを、この先行している第２コピーモードに係る予備の記憶デバイス及び処理の遅れている第２コピーモードに係る予備の記憶デバイスのそれぞれに記憶させる請求項１に記載の記憶制御装置。
【請求項９】
複数の記憶デバイスから構成されるRAIDグループを備える記憶制御装置に記憶されているデータを回復させるための方法であって、
前記RAIDグループ内の各記憶デバイスに関するエラー状況を検出するステップと、
前記検出されたエラー状況が、第１閾値以上であって第２閾値未満の場合に、前記エラーの検出された回復対象の記憶デバイスに、第１コピーモードを選択するための第１ステータスを設定するステップと、
前記検出されたエラー状況が、前記第２閾値以上の場合に、前記回復対象の記憶デバイスに、第２コピーモードを選択するための第２ステータスを設定するステップと、
前記回復対象の記憶デバイスに前記第１ステータスが設定された場合に、前記第１コピーモードを開始して、前記回復対象の記憶デバイスから前記予備の記憶デバイスへ所定量ずつデータをコピーするステップと、
前記所定量ずつのデータコピーが完了するごとに、コピー完了位置を管理するためのコピー位置管理情報を更新するステップと、
前記コピー位置管理情報を更新する度に、前記回復対象の記憶デバイスのステータスを確認するステップと、
前記回復対象の記憶デバイスのステータスが前記第１ステータスから前記第２ステータスへ変更された場合には、前記コピー位置管理情報を引き続き使用して、前記第１コピーモードから前記第２コピーモードに移行し、前記回復対象の記憶デバイスと同一のRAIDグループに属する他の記憶デバイスから読み出されたデータに基づいて、前記回復対象の記憶デバイスに記憶されているデータを復元するステップと、
前記復元されたデータを前記予備の記憶デバイスにコピーさせるステップと、
を実行する記憶制御装置のデータ回復方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶制御装置及び記憶制御装置のデータ回復方法に関する。
【背景技術】
【０００２】
記憶制御装置は、例えば、ハードディスクドライブのような複数のディスクドライブを用いて、RAID（Redundant Array of Independent Disks）に基づく冗長化された記憶領域を生成し、この記憶領域をホストコンピュータ（以下、「ホスト」）に提供する。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５よりも耐障害性に優れている。
【００２５】
I/O（input/output）要求処理部３は、「入出力要求制御部」に対応する。I/O要求処理部３は、ホスト７から発行されたリード要求及びライト要求を処理する。ホスト７からリード要求が発行された場合、I/O要求処理部３は、要求されたデータがキャッシュメモリに記憶されているか否かを判断し、キャッシュメモリに記憶されていない場合、ディスクドライブ２からデータを読み出す。I/O要求処理部３は、読み出したデータをキャッシュメモリに保存した後、ホスト７に送信する。ホスト７からライト要求が発行された場合、I/O要求処理部３は、ライトデータをキャッシュメモリに記憶させた後、ホスト７に処理完了を通知し、その後に、ライトデータをディスクドライブ２に書き込む。さらに、後述のように、ディスクドライブ２のデータ回復作業が行われている場合、I/O要求処理部３は、所定の障害リカバリ処理を行う。障害リカバリ処理としては、例えば、ホスト７から要求されたデータを、障害の発生していない他のディスクドライブ２から読み出したデータ及びパリティによって復元する処理（コレクションリード処理）や、ホスト７から受信したライトデータをキャッシュメモリに保存する処理等が挙げられる。
【００２６】
エラー状況検出部４は、各ディスクドライブ２の応答状態に基づいて、各ディスクドライブ２のエラーの状況をそれぞれ監視する。エラーの種類としては、例えば、メディアエラー、メカニカルエラー、インターフェースエラー等を挙げることができる。
【００２７】
ドライブ回復制御部５は、「回復制御部」に該当する。ドライブ回復制御部５は、所定値以上のエラーの検出されたディスクドライブ２について、そのディスクドライブ２に記憶されている記憶内容を、スペアドライブ２Ａ内に復元させる。
【００２８】
ドライブ回復制御部５は、ドライブコピー部５Ａと、コピー進捗状況管理部５Ｂと、コレクションコピー部５Ｃとを備えている。ドライブコピー部５Ａは、「第１コピーモード」としてのドライブコピーを行う。ドライブ回復制御部５は、ディスクドライブ２に障害発生の予兆を検出すると、ドライブコピーを開始して障害の発生に備える。ドライブコピーは、予防的措置である。そして、実際にディスクドライブ２に障害が生じた場合、ドライブ回復制御部５は、コレクションコピーを開始し、障害の生じたディスクドライブ２に記憶されているはずのデータを復元し、スペアドライブ２Ａにコピーする。スペアドライブ２Ａと障害の発生したディスクドライブ２の管理上の番号を入れ替えることにより、障害の発生したディスクドライブ２が回復することになる。
【００２９】
ドライブコピーとは、ディスクドライブ２の記憶内容をスペアドライブ２Ａにコピーするモードである。ドライブコピーは、初期コピー段階と二重書き段階とに分けて考えることができる。初期コピー段階では、コピー元のディスクドライブ２に記憶されているデータを、スペアドライブ２Ａに全てコピーする。二重書き段階では、ホスト７から受信したライトデータを、コピー元のディスクドライブ２及びスペアドライブ２Ａに、それぞれ書き込む。従って、ドライブコピーは、ミラーリングと呼ぶこともできる。ドライブコピーは、ディスクドライブ２に生じたエラー回数が第１閾値以上であって、かつ第２閾値未満の場合に、実行される。従って、第１閾値の値を適切に設定することにより、ディスクドライブ２が使用不能となる前に、ドライブコピーを開始させて、ディスクドライブ２の記憶内容をスペアドライブ２Ａに退避させておくことができる。
【００３０】
コピー進捗状況管理部５Ｂは、例えば、コピー完了位置を示すコピーポインタ等により、ドライブコピーの進捗状況を管理するものである。ドライブコピー部５Ａによりコピーが完了した位置の情報は、コレクションコピー部５Ｃに引き継がれる。コレクションコピー部５Ｃは、「第２コピーモード」としてのコレクションコピーを行う。コレクションコピーとは、障害の生じていない他のディスクドライブ２に分散して記憶されているデータ及びパリティに基づいて、障害の発生したディスクドライブ２内のデータを復元し、この復元されたデータをスペアドライブ２Ａにコピーさせるモードである。コレクションコピーは、ディスクドライブ２のエラー回数が第２閾値以上の場合に、実行される。
【００３１】
例えば、ディスクドライブ２（＃１）のエラー回数が第１閾値以上になると、ドライブコピー部５Ａによって、そのディスクドライブ２（＃１）に記憶されているデータがスペアドライブ２Ａにコピーされる。ドライブコピーが正常に完了した後で、コピー元のディスクドライブ２（＃１）に障害が発生した場合、スペアドライブ２Ａを用いて、運用を続けることができる。
【００３２】
これに対し、ドライブコピーが完了する前に、ディスクドライブ２（＃１）のエラー回数が第２閾値以上になると、ディスクドライブ２（＃１）は閉塞処理され、ドライブコピーに代わって、コレクションコピー部５Ｃによるコレクションコピーが開始される。
【００３３】
コレクションコピー部５Ｃは、コピー進捗状況管理部５Ｂによって管理されているドライブコピーの完了位置（コピー中断位置）を引き継ぐことにより、ドライブコピーが中断された位置から、コレクションコピーを開始する。即ち、コレクションコピー部５Ｃは、他のディスクドライブ２（＃０，＃２，＃３）からデータ及びパリティを読出して、ディスクドライブ２（＃１）内のデータを復元し、復元したデータを、スペアドライブ２Ａに記憶させる。
【００３４】
従って、この場合、スペアドライブ２Ａの先頭からドライブコピーの中断位置までの第１領域には、ドライブコピーによってコピーされたデータが記憶される。ドライブコピー中断位置からスペアドライブ２Ａの終端までの第２領域には、コレクションコピーによって復元されたデータが記憶される。第１領域と第２領域との間に隙間は無く、両者は連続している。
【００３５】
ドライブコピーとコレクションコピーとは、ドライブコピーの進捗状況に関する情報（コピーポインタ等）を共有し、同一のスペアドライブ２Ａを使用する。ここで、ドライブコピーを実行するジョブの中で、コレクションコピーも実行可能に構成することにより、ドライブコピーとコレクションコピーとを比較的簡単に同期させることができる。
【００３６】
スペアドライブ２Ａにディスクドライブ２（＃１）の記憶内容が復元されると、スペアドライブ２Ａは、障害で閉塞されたディスクドライブ２（＃１）に代わって、ディスクドライブ（＃１）として使用される。実際のディスクドライブを識別する情報（実ドライブ番号）と、RAIDグループ６を構成する各ディスクドライブを識別する情報（仮想ドライブ番号）との対応関係を変えることにより、スペアドライブ２Ａをディスクドライブ（＃１）として、直ちに使用することができる。
【００３７】
ドライブコピーまたはコレクションコピーが行われている回復期間中に、ホスト７からのアクセス要求を停止させる必要はない。この回復期間中にホスト７からリード要求またはライト要求が発行された場合、I/O要求処理部３は、所定の処理を行う。所定の処理の詳細は、後述の実施例で説明するが、先に簡単に説明する。
【００３８】
例えば、前記の例において、ドライブコピー中に、ホスト７からディスクドライブ２（＃１）を対象とするリード要求が発行された場合、I/O要求処理部３は、コピー元であるディスクドライブ２（＃１）からデータを読み出して、ホスト７に送信する。ドライブコピー中に、ホスト７からライト要求が発行された場合、I/O要求処理部３は、ディスクドライブ２（＃１）及びスペアドライブ２Ａの両方にライトデータをそれぞれ書き込む。
【００３９】
コレクションコピー中に、ホスト７からディスクドライブ２（＃１）を対象とするリード要求が発行された場合、I/O要求処理部３は、その要求されたデータのアドレスが、移行済の記憶領域（回復済みの記憶領域）に位置するか否かを判定する。要求されたデータが既にスペアドライブ２Ａに移行されている場合、I/O要求処理部３は、スペアドライブ２Ａからデータを読み出して、ホスト７に送信する。要求されたデータが未だスペアドライブ２Ａに移行されていない場合、I/O要求処理部３は、他のディスクドライブ２（＃０，＃２，＃３）から読み出されたデータ及びパリティに基づいてデータを復元し、この復元したデータをホスト７に送信する。
【００４０】
コレクションコピー中に、ホスト７からディスクドライブ２（＃１）を対象とするライト要求が発行された場合、I/O要求処理部３は、他のディスクドライブ２（＃０，＃２，＃３）から旧データ及び旧パリティを読出す。I/O要求処理部３は、旧データと旧パリティ及び新ライトデータに基づいて、新パリティを生成し、この新パリティをパリティドライブ（パリティを記憶すべきドライブ）に記憶させる。
【００４１】
なお、コレクションコピーが実行された場合、コピー元のディスクドライブ２（＃１）は閉塞され、縮退ドライブとなる。即ち、このディスクドライブ２（＃１）は、コレクションコピーの完了後に、記憶制御装置１から取り外される。そして、保守要員により、別の新たなスペアドライブが記憶制御装置１に取り付けられる。
【００４２】
本実施形態は上述のように構成されるので、以下の効果を奏する。本実施形態では、ドライブコピーからコレクションコピーに移行する際に、ドライブコピーの中断位置からコレクションコピーを開始させる構成とした。従って、ドライブコピーとコレクションコピーとを調和させて実行させることができ、ドライブ回復時間を短縮して、使い勝手及び信頼性を高めることができる。
【００４３】
つまり、本実施形態では、ドライブコピーが完了している領域への無駄なコピーが行われるのを防止でき、ディスクドライブ２に記憶されているデータを比較的短時間で回復させることができる。回復時間を低減できるため、冗長性の低下する期間を短縮でき、信頼性の低下を抑制することができる。また、回復時間を低減できるため、記憶制御装置１の応答性能の低下を抑制することができ、使い勝手も向上する。
【００４４】
また、ドライブコピーの完了した範囲については、コレクションコピーを行わない構成のため、スペアドライブ２Ａにコピーされたデータを有効に活用することができ、ディスクドライブの二重障害に対する耐久性を高めることもできる。
【００４５】
ディスクドライブ２（＃１）に関するコレクションコピーを行っている期間中に、他のディスクドライブ２（＃０）で続けて障害が生じた場合を考える。RAID５では、いずれか１つのドライブ障害に打ち勝つことができるが、同時に複数のディスクドライブに障害が発生した場合は、データを回復させることができない。従って、通常の場合、ディスクドライブ２（＃０，＃１）の両方に同時に障害が発生した場合（二重障害の発生時）、データを回復させることはできず、そのデータは消失する。しかし、本実施形態では、ドライブコピーによってスペアドライブ２Ａにコピーされているデータを、コレクションコピーで上書きしないため、スペアドライブ２Ａにコピーされたデータを有効に利用することができる。従って、ドライブの二重障害が発生した場合でも、スペアドライブ２Ａにコピー済みのデータを利用可能な範囲内で、データを回復させることができ、データを消失する機会を低減することができる。以下、本実施形態を詳細に説明する。
【実施例１】
【００４６】
図２は、本実施例による記憶制御装置１０を含むストレージシステムの全体構成を示す説明図である。ストレージシステムは、例えば、記憶制御装置１０と、ホスト１３と、管理端末１４及び管理サーバ１５を備えて構成することができる。図１との関連を述べると、記憶制御装置１０は図１中の記憶制御装置１に、ホスト１３は図１中のホスト７に、ディスクドライブ２１０は図１中のディスクドライブ２に、RAIDグループ２１２は図１中のRAIDグループ６に、それぞれ対応する。
【００４７】
まず、記憶制御装置１０の周辺構成について説明し、次に、記憶制御装置１０の構成を説明する。ホスト１３は、例えば、パーソナルコンピュータ、サーバコンピュータ、メインフレーム、エンジニアリングワークステーション等のようなコンピュータ装置として構成される。ホスト１３は、例えば、LAN（Local Area Network）やSAN（Storage Area Network）等の通信ネットワークCN１を介して、記憶制御装置１０に接続される。ホスト１３がいわゆるオープン系のサーバである場合、ホスト１３と記憶制御装置１０とは、例えば、TCP/IP（Transmission Control Protocol/Internet Protocol）やFCP（Fibre Channel Protocol）等のプロトコルに従って、データ通信を行う。ホスト１３がメインフレームマシンである場合、ホスト１３と記憶制御装置１０とは、例えば、FICON（Fibre Connection：登録商標）、ESCON（Enterprise System Connection：登録商標）、ACONARC（Advanced Connection Architecture：登録商標）、FIBARC（Fibre Connection Architecture：登録商標）等のプロトコルに従って、データ通信を行う。
【００４８】
管理端末１４は、記憶制御装置１０の構成等を管理するものである。管理端末１４は、例えば、LAN等の通信ネットワークCN２を介して、記憶制御装置１０内のサービスプロセッサ（以下、SVP）１６０に接続されている。また、管理端末１４は、例えば、インターネット等の他の通信ネットワークCN５を介して、管理サーバ１５に接続することもできる。管理サーバ１５は、例えば、記憶制御装置１０のベンダ等に設置されており、複数の管理端末１４を管理できるようになっている。
【００４９】
次に、記憶制御装置１０の構成を説明する。記憶制御装置１０は、記憶部２０と、コントローラ３０とに大別可能である。記憶部２０は、例えば、複数のディスクドライブ２１０をアレイ状に配設することにより構成される。
【００５０】
ディスクドライブ２１０としては、例えば、ハードディスクドライブ、半導体メモリドライブ、光ディスクドライブ、光磁気ディスクドライブ、磁気テープドライブ等の種々の記憶デバイスを用いることができる。また、ハードディスクドライブを使用する場合、例えば、FC（Fibre Channel）ディスク、SATA（Serial AT Attachment）ディスク、SCSI（Small Computer System Interface）ディスクのように、種々の種類のハードディスクドライブを利用可能である。また、記憶部２０内に、異なる種類の記憶デバイスを混在させることもできる。
【００５１】
RAIDレベル等によっても相違するが、所定数のディスクドライブ２１０によってRAIDグループ２１２が構成されている。例えば、３個のデータディスクと１個のパリティディスクとから、RAID５の構成を得ることができる（３Ｄ＋１Ｐ）。あるいは、例えば、４個のデータディスクと２個のパリティディスクとから、RAID６の構成を得ることもできる（４Ｄ＋２Ｐ）。さらに、１個の正ディスクと１個の副ディスクとから、RAID１の構成を得ることもできる。
【００５２】
RAIDグループ２１２は、冗長化された物理的な記憶領域であり、物理的な記憶デバイスと呼ぶこともできる。このRAIDグループ２１２の提供する物理的な記憶領域上に、論理的な記憶領域２１３を１つまたは複数設定することができる。論理的な記憶領域２１３は、例えば、論理ボリューム（図中「LU」と表示）と呼ばれる。この論理ボリューム２１３は、ホスト１３のアクセス対象となる。ホスト１３と論理ボリューム２１３との間に通信パスが設定されると、ホスト１３は、論理ボリューム２１３にデータを書き込んだり、論理ボリューム２１３からデータを読み出すことができる。
【００５３】
コントローラ３０は、記憶制御装置１０の動作を制御するものである。コントローラ３０は、例えば、チャネルアダプタ（以下、CHA）１１０と、ディスクアダプタ（以下、DKA）１２０と、キャッシュメモリ１３０と、共有メモリ１４０と、接続制御部１５０と、SVP１６０とを備えて構成可能である。
【００５４】
各CHA１１０は、各ホスト１３との間のデータ転送を制御するもので、複数の通信ポート１１１を備えている。記憶制御装置１０には、複数のCHA１１０を設けることができる。CHA１１０は、例えば、オープン系サーバ用CHA、メインフレーム系用CHA等のように、ホスト１３の種類に応じて用意される。各CHA１１０は、それぞれに接続されたホスト１３から、データの読み書きを要求するコマンドを受信し、ホスト１３から受信したコマンドに従って動作する。
【００５５】
各DKA１２０は、記憶制御装置１０内に複数個設けることができる。各DKA１２０は、各ディスクドライブ２１０との間のデータ通信を制御する。各DKA１２０と各ディスクドライブ２１０とは、例えば、SAN等の通信ネットワークCN４を介して接続されており、ファイバチャネルプロトコルに従ってブロック単位のデータ転送を行う。各DKA１２０は、ディスクドライブ２１０の状態を随時監視しており、この監視結果は、内部ネットワークCN３を介して、SVP１６０に送信される。各CHA１１０及び各DKA１２０をそれぞれ別々の制御回路基板として構成することもできるし、一つの制御回路基板にCHA機能及びDKA機能をそれぞれ設けることもできる。
【００５６】
キャッシュメモリ１３０は、例えば、ユーザデータ等を記憶する。キャッシュメモリ１３０は、例えば、不揮発メモリから構成可能であるが、揮発メモリから構成することもできる。キャッシュメモリ１３０が揮発メモリから構成される場合、キャッシュメモリ１３０はバッテリによってバックアップされる。
【００５７】
共有メモリ（あるいは制御メモリ）１４０は、記憶制御装置１０の作動を制御するための各種制御情報や管理情報等が記憶される。共有メモリ１４０は、例えば、不揮発メモリから構成される。制御情報等は、複数の共有メモリ１４０によって多重管理することができる。
【００５８】
なお、キャッシュメモリ１３０と共有メモリ１４０とを別々のメモリ回路基板として構成してもよいし、一つのメモリ回路基板内にキャッシュメモリ１３０及び共有メモリ１４０を実装してもよい。また、キャッシュメモリの一部を制御情報を格納するための制御領域として使用し、他の部分をデータを記憶するためのキャッシュ領域として使用する構成でもよい。
【００５９】
接続制御部１５０は、各CHA１１０と、各DKA１２０と、キャッシュメモリ１３０と、共有メモリ１４０とをそれぞれ接続するものである。接続制御部１５０により、全てのCHA１１０，DKA１２０は、キャッシュメモリ１３０及び共有メモリ１４０にそれぞれアクセス可能である。接続制御部１５０は、例えば、クロスバスイッチ等として構成される。
【００６０】
SVP１６０は、LAN等の内部ネットワークCN３を介して、各CHA１１０及び各DKA１２０とそれぞれ接続されている。あるいは、SVP１６０は、通信ネットワークCN３を介して、各CHA１１０にのみ接続することもできる。SVP１６０は、通信ネットワークCN２を介して、管理端末１４に接続されており、記憶制御装置１０内の各種状態を収集して、管理端末１４に提供する。また、管理端末１４あるいは管理サーバ１５は、SVP１６０を介して、記憶制御装置１０の構成等を変更することもできる。
【００６１】
以上のように、コントローラ３０は、複数種類の基板（CHA１１０，DKA１２０等）をコントローラ筐体に実装することにより、構成することができる。これに限らず、単一の制御基板上に、上述した各機能（ホスト１３との通信機能、ディスクドライブ２１０との通信機能、データ処理機能等）を実装する構成でもよい。この場合、複数の制御基板を設けて冗長構成とするのが、記憶制御装置１０の信頼性向上の観点からは好ましい。
【００６２】
図３は、コントローラ３０のプログラム構成の一部を模式的に示す説明図である。コントローラ３０は、エラー状況検出処理３１と、障害リカバリ処理３２と、ドライブコピー処理３３及びコレクションコピー３４を、それぞれ実現させる。これらの処理３１〜３４は、例えば、コンピュータプログラムとして構成されている。各処理の詳細は後述するが、エラー状況検出処理３１は、各ディスクドライブ２１０の応答等に基づいて、各ディスクドライブ２１０で発生したエラーの状況を監視するための処理である。
【００６３】
障害リカバリ処理３２は、エラーの検出されたディスクドライブ（以下、エラードライブまたは障害ドライブあるいは回復元ドライブとも呼ぶ）２１０についてデータの回復が行われている期間中に、ホスト１３からのアクセス要求を処理する。
【００６４】
ドライブコピー処理３３は、エラードライブからスペアドライブへのデータコピーを制御するものである。コレクションコピー処理３４は、エラードライブと同一RAIDグループ２１２に属する他のディスクドライブ２１０に記憶されているデータ及びパリティに基づいて、エラードライブに記憶されているデータを復元し、復元されたデータをスペアドライブにコピーさせるものである。
【００６５】
上述の各処理３１〜３４は、それぞれ複数のテーブルＴ１１〜Ｔ１４を利用して、それぞれの機能を実現する。各テーブルＴ１１〜Ｔ１４は、共有メモリ１４０にそれぞれ記憶されている。各テーブルＴ１１〜Ｔ１４の詳細は別の図と共に後述するが、先に簡単に説明する。
【００６６】
エラー管理テーブルＴ１２は、各ディスクドライブ２１０毎に、それぞれディスクドライブ２１０で生じたエラーの回数を、エラータイプ毎に分類して管理するためのテーブルである。閾値管理テーブルＴ１３は、各エラータイプ毎にそれぞれ予め設定されている第１閾値Ｔｈ１及び第２閾値Ｔｈ２を管理するためのテーブルである。
【００６７】
エラー状況検出処理３１は、これらのテーブルＴ１２及びＴ１３を用いて、各ディスクドライブ２１０にどのような種類のエラーがどの程度発生したかを監視する。エラー状況検出処理３１により検出されたエラー状況に基づいて、障害リカバリ処理３２，ドライブコピー処理３３及びコレクションコピー処理３４が、それぞれ起動される。例えば、あるディスクドライブ２１０において、エラーが検出された場合、このエラードライブ２１０に関しては、障害リカバリ処理３２が行われる。
【００６８】
エラー回数が第１閾値Ｔｈ１以上第２閾値Ｔｈ２未満の場合、そのエラードライブ２１０について、ドライブコピー処理３３が開始される。さらに、エラー回数が第２閾値Ｔｈ２以上になると、そのエラードライブ２１０について、コレクションコピー処理３４が行われる。ここで、ドライブコピー処理３３からコレクションコピー処理３４に移行する場合は、ドライブコピー処理３３によってコピーが完了した位置を示すコピーポインタ３５が、コレクションコピー処理３４に受け継がれる。コピーポインタ３５には、次にコピーすべき位置、即ち、次に回復されるべきデータを格納している格納先のアドレス情報が、論理ブロックアドレス（LBA）の形式で示されている。
【００６９】
ドライブ番号管理テーブルＴ１１は、各ディスクドライブ２１０がそれぞれ有する実ドライブ番号と仮想ドライブ番号との対応関係を管理するためのものである。ドライブステータス管理テーブルＴ１４は、各ディスクドライブ２１０のステータスを管理するためのものである。このドライブステータスは、例えば、ドライブアクセスレベルと呼び変えることもできる。
【００７０】
詳細は後述するが、コントローラ３０は、複数のテーブルセットＴ１，Ｔ２（図８参照）を切り替えて使用可能となっている。各テーブルセットＴ１，Ｔ２には、それぞれドライブ番号管理テーブルテーブルＴ１１及びドライブステータス管理テーブルＴ１４が含まれている。コントローラ３０は、ドライブコピー処理３３からコレクションコピー処理３４へ移行する際に、データ回復先のディスクドライブ（スペアドライブ）の同一性を維持するために、待機しているテーブルセット中の各テーブルＴ１１，Ｔ１４の内容を予め書き換えておく。そして、コントローラ３０は、書換が完了すると、書き換えられたテーブルセットに切り替えて、制御を続行する。
【００７１】
図４は、ドライブ番号管理テーブルＴ１１の一例を示す説明図である。上述のように、ドライブ番号管理テーブルＴ１１は、実ドライブ番号と仮想ドライブ番号とを対応付けて管理している。
【００７２】
実ドライブ番号とは、現実の各ディスクドライブ２１０をそれぞれ一意に特定するための識別情報である。図中では、説明の便宜上、数字に”ｒ”を添えて表現している。仮想ドライブ番号とは、RAIDグループ２１２を構成する各ディスクドライブ２１０の番号が連続した値となるように設定された仮想的な識別情報である。図中では、数字に”ｖ”を添えて表現している。
【００７３】
このように、実ドライブ番号と仮想ドライブ番号とを分けて管理することにより、ディスクドライブ２１０の実装位置を変えることなく、RAIDグループ２１２の構成を柔軟に変更することができる。
【００７４】
図４の上側には、ドライブ番号の対応関係を変更する前の様子が示されている。エラードライブの回復を行う前の状態、即ち、各ディスクドライブ２１０が正常に稼働している状態では、スペアドライブ（１００ｒ）には、”１００ｖ”という仮想ドライブ番号が割り当てられているとする。
【００７５】
図４の下側には、ドライブ番号の対応関係を変更した後の様子が示されている。エラードライブ（１ｒ）の回復が開始されると、スペアドライブ（１００ｒ）には仮想ドライブ番号”１ｖ”が割り当てられ、エラードライブ（１ｒ）には仮想ドライブ番号”１００ｖ”は割り当てられる。これにより、スペアドライブ（１００ｒ）は、実際の位置を移動することなく、RAIDグループ２１２に参加する。
【００７６】
図５は、上述の様子を模式的に示す説明図である。図５（ａ）は通常の場合を示し、図５（ｂ）はエラードライブを回復させる場合を示す。通常の場合では、各ディスクドライブ２１０（１）〜２１０（４）には、連続する仮想ドライブ番号”０ｖ”〜”３ｖ”が割り当てられている。スペアドライブ２１０（ＳＰ）には、仮想ドライブ番号”１００ｖ”が割り当てられている。
【００７７】
図５（ｂ）に示すように、ディスクドライブ２１０（２）に第２閾値Ｔｈ２以上のエラーが発生し、ディスクドライブ２１０（２）が閉塞されたとする。このエラードライブ２１０（２）に記憶されているデータは、他のディスクドライブ２１０（１），２１０（３），２１０（４）に分散して記憶されているデータ及びパリティに基づいて、論理的に復元することができる。
【００７８】
ここで、スペアドライブ２１０（ＳＰ）の仮想ドライブ番号を”１ｖ”とし、エラードライブ２１０（２）の仮想ドライブ番号を”１００ｖ”とすることにより、データの復元されたスペアドライブ２１０（ＳＰ）をエラードライブ２１０（２）の代わりにRAIDグループ２１２に組み込むことができる。
【００７９】
図６は、エラー管理テーブルＴ１２及び閾値管理テーブルＴ１３の一例をそれぞれ示す説明図である。図６の上側に示すエラー管理テーブルＴ１２は、例えば、実ドライブ番号と、エラータイプと、エラーカウント値とを対応付けることにより構成される。即ち、エラー管理テーブルＴ１２は、各実ドライブ番号毎に、それぞれのディスクドライブ２１０で生じたエラーの回数を、エラータイプ別に分類して集計している。
【００８０】
図６の下側に示す閾値管理テーブルＴ１３は、各エラータイプ毎に、第１閾値Ｔｈ１及び第２閾値Ｔｈ２をそれぞれ対応付けて管理している。各閾値Ｔｈ１，Ｔｈ２は、例えば、管理端末１４や管理サーバ１５から、SVP１６０を介して、変更可能である。
【００８１】
エラータイプとしては、例えば、メディアエラー、メカニカルエラー、インターフェースエラー等を挙げることができる。メディアエラーとは、ハードディスクに関するエラーを意味する。メカニカルエラーとは、ディスクドライブ２１０内の機構に関するエラーを意味する。インターフェースエラーとは、ディスクドライブ２１０とDKA１２０との間のインターフェースに関するエラーを意味する。各エラータイプ毎に、それぞれ第１閾値Ｔｈ１及び第２閾値Ｔｈ２をそれぞれ設定可能である。
【００８２】
第１閾値Ｔｈ１は、ドライブコピーを開始するための閾値である。第２閾値Ｔｈ２は、コレクションコピーを開始するための閾値である。いずれかのエラータイプにおいて、エラーカウント値ＥＣが第１閾値Ｔｈ１以上になると、ドライブコピーが開始される。エラーカウント値ＥＣがさらに上昇して第２閾値Ｔｈ２に達すると、ドライブコピーに代えて、コレクションコピーが引き続き実行される。
【００８３】
図７は、ドライブステータス管理テーブルＴ１４の一例を示す説明図である。ドライブステータス管理テーブルＴ１４は、例えば、各仮想ドライブ番号毎に、ドライブステータスをそれぞれ管理している。ドライブステータスとしては、例えば、”通常”、”ドライブコピー中”、”コレクションコピー中”及び”コレクションアクセス”を挙げることができる。
【００８４】
”通常”ステータスは、そのディスクドライブ２１０が正常であることを示す。”ドライブコピー中”ステータスは、そのディスクドライブ２１０について、ドライブコピーが行われてることを示す。”コレクションコピー中”ステータスは、そのディスクドライブ２１０について、コレクションコピーが行われていることを示す。”コレクションアクセス”は、そのディスクドライブ２１０と同一のRAIDグループ２１２に属する他の各ディスクドライブ２１０を利用することにより、ホスト１３からのアクセス要求が処理されていることを示す。
【００８５】
図７の最上部には、各ディスクドライブ２１０がそれぞれ正常に稼働している場合が示されている。もしも、”１ｖ”の仮想ドライブ番号を有するディスクドライブ２１０のエラーカウント値ＥＣが第１閾値Ｔｈ１以上になった場合、このエラードライブ”１ｖ”のステータスは、”通常”から”ドライブコピー中”に遷移し、スペアドライブへのデータコピーが開始される。
【００８６】
図８は、コントローラ３０がテーブルセットＴ１，Ｔ２を切り替えて使用する様子を模式的に示す説明図である。カレントテーブルポインタ３６は、現在使用中のテーブルセットを示すものである。
【００８７】
ここで、ドライブコピーからコレクションコピーに移行する場合、複数の状態変更が行われる。第１の状態変更として、図７に示すドライブステータス管理テーブルＴ１４に示すように、仮想ドライブ番号「１ｖ」のドライブステータスは、”ドライブコピー中”から”コレクションコピー中”に変更される。
第２の状態変更として、図４に示すドライブ番号管理テーブルＴ１１に示すように、ドライブ番号１ｒ，１００ｒが入れ替えられる。
【００８８】
もしも、第１の状態変更が行われた後、第２の状態変更が行われるまでの間に、時間的な隙間が生じると、ドライブ１ｒに対して、コレクションコピーが実施されてしまう。正しくは、ドライブ１００ｒに対してコレクションコピーが行われなければならない。このように、ドライブステータスとドライブ番号とは、互いに密接に関連する。
従って、両者の内容がほんの一瞬でも適合しない場合、例えば、コピー先ドライブを間違える等のような誤った動作が行われる可能性がある。本実施例の記憶制御装置は、マルチプロセッサ処理を行うため、あるプロセッサによる処理の隙間で、別のプロセッサの処理が動作する可能性がある。
そこで、図８（ａ）に示すように、現在使用されていない方のテーブルセットＴ２において、ドライブコピーからコレクションコピーへ移行させるために、互いに密接に関連するドライブ番号管理テーブルＴ１１及びドライブステータス管理テーブルＴ１４を、予め書き換えておく。
【００８９】
そして、図８（ｂ）に示すように、各テーブルＴ１１，Ｔ１４の書き換えが完了した後で、カレントテーブルポインタ３６をテーブルセットＴ１からテーブルセットＴ２に切り替えることにより、ドライブ番号の対応付けとドライブステータスの変更とを同時に行うことができる。従って、ドライブコピーで使用されていたコピー先ドライブをそのまま使用して、コレクションコピーを行うことができる。コピー先ドライブとは、スペアドライブとして記憶部２０に実装されていたドライブであり、以下の説明では、回復先ドライブと呼ぶ場合もある。
【００９０】
図９は、記憶制御装置１０の通常の動作を示すフローチャートである。以下の説明では、ステップを「Ｓ」と略記する。また、各フローチャートは、本発明の理解及び実施に必要な程度で開示されており、実際のプログラムとは相違する。
【００９１】
コントローラ３０は、ホスト１３からアクセス要求が発行されたか否かを監視している（Ｓ１１）。ホスト１３からのアクセス要求が発行された場合（S11:YES）、コントローラ３０は、このアクセス要求のコマンドタイプを判別する（Ｓ１２）。
【００９２】
ホスト１３からリードコマンドが発行された場合、コントローラ３０は、ホスト１３から要求されたデータがキャッシュメモリ１３０に記憶されているか否かを判定する（Ｓ１３）。要求されたデータがキャッシュメモリ１３０に記憶されている場合（S13:YES）、コントローラ３０は、そのデータをキャッシュメモリ１３０から読み出して、ホスト１３に送信する（Ｓ１５）。ホスト１３から要求されたデータがキャッシュメモリ１３０に記憶されていない場合（S13:NO）、コントローラ３０は、要求されたデータをディスクドライブ２１０から読出して、キャッシュメモリ１３０に記憶させる（Ｓ１４）。そして、コントローラ３０は、ディスクドライブ２１０から読み出されたデータを、ホスト１３に送信する（Ｓ１５）。
【００９３】
ホスト１３からライトコマンドが発行された場合、コントローラ３０は、ホスト１３から受信したライトデータを、キャッシュメモリ１３０に記憶させる（Ｓ１６）。コントローラ３０は、ライトデータをキャッシュメモリ１３０に記憶させた時点で、ホスト１３にライトコマンドの処理が完了した旨を通知する（Ｓ１７）。その後、コントローラ３０は、適当なタイミングを見計らって、キャッシュメモリ１３０に記憶されたライトデータを、所定のディスクドライブ２１０に書き込む（Ｓ１８）。
【００９４】
所定のディスクドライブ２１０とは、ホスト１３により指定された書込み先の論理ボリューム２１３を構成するディスクドライブ２１０である。なお、例えば、RAID５やRAID６等のように、パリティデータを生成する場合、コントローラ３０は、パリティデータを算出して記憶させる。パリティデータは、所定のパリティドライブに格納される。
【００９５】
ライトデータをディスクドライブ２１０に書き込む処理をディステージ処理と呼ぶ。ディステージされたライトデータのステータスは、ダーティステータスからクリーンステータスに変化する。コントローラ３０は、ディステージ処理を終えると、ライトデータのステータスを更新させる。なお、ライトデータをキャッシュメモリ１３０に記憶させた時点で、ホスト１３に処理完了を通知する方式をライトアフター方式または非同期書込み方式と呼ぶが、これに限らず、ライトデータをディスクドライブ２１０に書き込んでからホスト１３に処理完了を通知する構成でもよい。
【００９６】
ホスト１３から発行されたコマンドがリードコマンドでもライトコマンドでもない場合、コントローラ３０は、その他のコマンド処理を実行する（Ｓ１９）。その他のコマンドとしては、例えば、論理ボリューム２１３の空き容量やステータスを問い合わせる照会コマンド等を挙げることができる。
【００９７】
図１０は、エラー状況検出処理３１の詳細を示すフローチャートである。コントローラ３０（詳しくは、DKA１２０内のプロセッサ）は、ディスクドライブ２１０へリードコマンドまたはライトコマンドを発行する（Ｓ２１）。
【００９８】
コントローラ３０は、例えば、ディスクドライブ２１０の応答状態に基づいて、エラーが発生したか否かを判定する（Ｓ２２）。予め登録されているエラータイプのいずれかに該当するエラーが検出された場合（S22:YES）、コントローラ３０は、そのエラーの検出されたディスクドライブ２１０について、検出されたエラーパターンのエラーカウント値ＥＣを１つ増加させる（Ｓ２３）。
【００９９】
コントローラ３０は、エラーカウント値ＥＣが第１閾値Ｔｈ１に達したか否かを判定する（Ｓ２４）。エラーカウント値ＥＣが第１閾値Ｔｈ１に達していない場合（S24:NO）、コントローラ３０は、障害リカバリ処理３２を起動させる（Ｓ５０）。エラーに応じたアクセス要求処理を行うためである。
【０１００】
エラーカウント値ＥＣが第１閾値Ｔｈ１に達した場合（S24:YES）、コントローラ３０は、エラーカウント値ＥＣが第２閾値に達したか否かを判定する（Ｓ２５）。エラーカウント値ＥＣが第２閾値Ｔｈ２に達していない場合（S25:NO）、コントローラ３０は、エラーの検出されたディスクドライブ（エラードライブ）について、ドライブコピー処理３３を起動させる（Ｓ３０）。エラードライブに回復不能な障害が発生して閉塞されるよりも前に、そのエラードライブに記憶されているデータを、スペアドライブに予め移行させておくためである。ドライブコピーを起動させる処理については後述する。
【０１０１】
もしも、そのエラードライブのエラーカウント値ＥＣが第２閾値Ｔｈ２に達した場合（S25:YES）、コントローラ３０は、そのエラードライブを閉塞させて、コレクションコピー処理３４を開始させる（Ｓ４０）。コレクションコピーの起動処理については、さらに後述する。
【０１０２】
図１１は、図１０中のＳ３０で示したドライブコピー起動処理の詳細を示すフローチャートである。ドライブコピー起動処理は、ドライブコピー処理３３を起動させるための処理である。
【０１０３】
コントローラ３０は、記憶部２０に実装されているスペアドライブを検索し（Ｓ３１）、使用可能なスペアドライブが存在するか否かを判定する（Ｓ３２）。使用可能なスペアドライブとは、未使用のディスクドライブ２１０であって、コピー元であるエラードライブと同一サイズ以上の記憶容量を有するディスクドライブである。
【０１０４】
ドライブコピーに使用可能なスペアドライブが発見できない場合（S32:NO）、ドライブコピーを行うことができないため、コントローラ３０は、障害リカバリ処理３２を実行し、ホスト１３からのアクセス要求を処理する（Ｓ５０）。
【０１０５】
ドライブコピーに使用可能なスペアドライブを発見した場合（S32:YES）、コントローラ３０は、そのスペアドライブを回復先ドライブとして確保し、また、回復元であるエラードライブ（回復元ドライブとも呼ぶ）のドライブステータスを”ドライブコピー中”に変更させる（Ｓ３３）。そして、コントローラ３０は、ドライブコピー処理３３を起動させる（Ｓ３４）。
【０１０６】
より詳しくは、図１０，図１１に示す各フローチャート及び後述するフローチャートは、DKA１２０内のマイクロプロセッサによって実行される。各ディスクドライブ２１０は、それぞれ個別に動作可能である。あるディスクドライブ２１０のエラーカウント値が第２閾値Ｔｈ２以上になったことを検出したDKA１２０は、共有メモリ１４０に、ドライブコピー処理の起動を指示するための起動メッセージを書き込む。このメッセージには、ドライブコピーの対象となるディスクドライブ２１０を特定するための情報（例えば、仮想ドライブ番号）が含まれている。
【０１０７】
共有メモリ１４０に置かれたメッセージを別のDKA１２０が発見すると、このDKA１２０は、ドライブコピー処理３３を開始させる。上述したＳ３４では、起動メッセージを共有メモリ１４０に書き込むことを示している。このように、ドライブコピー処理３３の起動を指示するDKA１２０と、ドライブコピー処理３３を実行するDKA１２０とは、それぞれ異なる場合がある。結果的に、同一のDKA１２０が、ドライブコピーの起動指示とドライブコピーの実行の両方を担当する場合もある。
【０１０８】
図１２は、ドライブコピー処理３３の詳細を示すフローチャートである。まず最初に、コントローラ３０は、回復対象のアドレス（図中、「回復対象LBA」）を０にリセットする（Ｓ３０１）。回復対象のアドレスとは、コピーすべきデータのアドレスである。回復対象のアドレスをリセットすることにより、回復元ドライブ（エラードライブ）のデータ領域の先頭アドレスから順番に、ドライブコピーが開始されることになる。
【０１０９】
コントローラ３０は、ドライブステータス管理テーブルＴ１４を参照して、回復元ドライブのステータスを確認する（Ｓ３０２）。回復元ドライブのステータスが”ドライブコピー中”である場合、Ｓ３０４〜Ｓ３０７によるドライブコピーが実行される。図１１と共に述べたように、Ｓ３３において、回復元ドライブのステータスは”ドライブコピー中”に変更されているため、Ｓ３０４に移る。
【０１１０】
コントローラ３０は、回復元ドライブの回復対象アドレスから、所定サイズＳＢ分のデータを読み出して、キャッシュメモリ１３０に記憶させる（Ｓ３０４）。Ｓ３０１で、回復対象アドレスはリセットされているため、回復元ドライブのデータ領域の先頭からサイズＳＢ分のデータが読み出されることになる。
【０１１１】
ここで、所定サイズＳＢは、例えば、８スロット分のデータサイズとして設定することができる。スロットとは、キャッシュメモリ１３０に記憶されているデータを管理するための最小単位である。１つのスロットは、例えば、９６個のブロックから構成することができる。従って、ＳＢは、例えば、８×９６＝７６８個のブロック数として設定することができる。この数値は、一例であって、本発明はこれに限定されない。
【０１１２】
コントローラ３０は、キャッシュメモリ１３０に記憶させたサイズＳＢ分のデータを、回復先のディスクドライブのデータ領域の先頭から書き込む（Ｓ３０５）。回復先のディスクドライブとは、確保されたスペアドライブである。サイズＳＢ分のデータは、回復元ドライブにおける記憶位置と同一の記憶位置で、回復先ディスクドライブのデータ領域に格納される。
【０１１３】
コントローラ３０は、回復対象のアドレスをＳＢだけ増加させ（Ｓ３０６）、回復元ドライブの全てのデータを読み出したか否かを判定する（Ｓ３０７）。即ち、コントローラ３０は、回復対象アドレスと回復元ドライブの終端アドレスとを比較し、回復対象アドレスが終端アドレスを超えたか否かを判定する。未だコピーされていないデータが残っている場合（S307:NO）、コントローラ３０は、Ｓ３０２に戻り、上述のステップＳ３０２〜Ｓ３０７を繰り返す。これにより、回復元ドライブに記憶されたデータは、サイズＳＢずつ読み出されて、回復先ドライブに書き込まれていく。回復元ドライブの全データを回復先ドライブにコピーし終わった場合（S307:YES）、コントローラ３０は、ドライブコピー処理を終了する。
【０１１４】
ところで、Ｓ３０２〜Ｓ３０７のドライブコピーを繰り返す度に、回復元ドライブのステータスが検査される（Ｓ３０３）。従って、もしも、ドライブコピー中に、回復元ドライブのステータスが”ドライブコピー中”から”コレクションコピー中”に変更された場合は、ドライブコピーが直ちに中断されて、コレクションコピー（Ｓ３０８〜Ｓ３１０）に移行する。
【０１１５】
回復元ドライブのステータスは、図１０中と共に述べたコレクションコピー起動処理（Ｓ４０）の中で、”コレクションコピー中”に変更される。回復元ドライブにおいて検出されたエラーカウント値ＥＣが第２閾値Ｔｈ２に達した場合、コレクションコピー起動処理が開始され、この処理の中で、回復元ドライブのステータスは、”コレクションコピー中”に変更される。詳細は、図１３と共に後述する。
【０１１６】
図１２に戻って、コレクションコピーの動作を説明する。回復元ドライブのステータスが”ドライブコピー中”から”コレクションコピー中”に変更されると、コントローラ３０は、Ｓ３０８を実行する。
【０１１７】
コントローラ３０は、回復元ドライブの属するRAIDグループ２１２と同一のRAIDグループ２１２に属する他のディスクドライブ２１０から、データ及びパリティをそれぞれ読み出して、読み出したデータをキャッシュメモリ１３０に記憶させる（Ｓ３０８）。
【０１１８】
より詳しくは、コントローラ３０は、同一RAIDグループ２１２内の他の各ディスクドライブ２１０のデータ領域にアクセスし、回復対象アドレスからサイズＳＢ分のブロックデータをそれぞれ読み出す。
【０１１９】
コントローラ３０は、キャッシュメモリ１３０に記憶された各データ及びパリティに基づいて、回復元ドライブに記憶されていたデータを復元させ（Ｓ３０９）、復元されたデータを回復先ドライブの所定位置に書き込む（Ｓ３１０）。所定位置とは、回復対象アドレスで示された格納場所である。
【０１２０】
ここで、留意すべき点は、第１に、ドライブコピー（Ｓ３０４〜Ｓ３０６）とコレクションコピー（Ｓ３０８〜Ｓ３１０，Ｓ３０６）とは、回復対象アドレスの管理（Ｓ３０６）を共有している点である。従って、ドライブコピーを中断してコレクションコピーに移行した場合でも、ドライブコピーが完了した次の記憶領域（回復対象アドレス）から、重複なく、かつ、隙間無く、コレクションコピーを開始することができる。
【０１２１】
第２に、ドライブコピー処理の中で、コレクションコピーが行われている点に留意しなければならない。即ち、ドライブコピーとコレクションコピーとは、それぞれ別々のプログラム（ジョブ）として構成されているのではなく、ドライブコピー処理の中に、コレクションコピー機能が一体的に設けられている。従って、コピーの整合性を維持しながら、ドライブコピーからコレクションコピーに直ちに移行させることができる。
【０１２２】
第３に、ドライブコピーとコレクションコピーとの切り替えは、回復元ドライブのステータスで定まり、回復元ドライブのステータスは、ドライブコピー処理とは別の処理（図１０，図１１，図１３参照）によって設定される点に留意しなければならない。従って、回復元ドライブに生じるエラー状況の監視と、回復元ドライブから回復先ドライブへのデータ移行とを、それぞれ別々のプロセスとして並列的に実行させることができる。
【０１２３】
特に、本実施例のコントローラ３０は、複数のプロセッサ（各DKA１２０内のプロセッサ）を備えるため、エラー状況の監視処理及びコピー処理が特定のプロセッサ（DKA１２０）に集中するのを防止して、各DKA１２０間で負荷を分散させることができる。
【０１２４】
さらに、各DKA１２０は、それぞれ個別に動作するため、ディスクドライブ２１０とのデータ入出力を行うDKA１２０が、そのときのデータ入出力に対するディスクドライブ２１０の応答状態に基づいて、ディスクドライブ２１０のエラー状況を検出し、ドライブコピー起動処理やコレクションコピー起動処理を開始させる。そして、別のタイミングで、別のDKA１２０が、共有メモリ１４０に残されたメッセージを確認して、ドライブコピー処理を実行する。このように、本実施例では、それぞれ独立して動作する複数のDKA１２０を連携させて、ディスクドライブ２１０のエラー状況の監視処理とコピー処理（ドライブ回復処理）とを並列動作させる。
【０１２５】
なお、Ｓ３０３で、回復元ドライブのステータスが”ドライブコピー中”でも”コレクションコピー中”でも無い場合、ドライブコピー処理を終了する。
【０１２６】
図１３は、図１０中にＳ４０で示されたコレクションコピー起動処理を示すフローチャートである。図１０で述べたように、ディスクドライブ２１０のエラーカウント値ＥＣが第２閾値Ｔｈ２に達すると、コレクションコピー起動処理（Ｓ４０）が開始される。
【０１２７】
コントローラ３０は、ドライブステータス管理テーブルＴ１４を参照し、エラーの検出されたディスクドライブ（回復元ドライブ）のステータスを確認する（Ｓ４０１）。コントローラ３０は、回復元ドライブのステータスが”ドライブコピー中”に設定されているか否かを判定する（Ｓ４０２）。
【０１２８】
回復元ドライブのステータスが”ドライブコピー中”である場合（S402:YES）、コントローラ３０は、回復元ドライブのステータスを”コレクションコピー中”に変更させ（Ｓ４０３）、このステータス変更と同時に、ドライブ番号管理テーブルＴ１１の内容を書き換える（Ｓ４０４）。Ｓ４０４では、図５と共に述べたように、エラーの検出されたエラードライブとスペアドライブとの仮想ドライブ番号を入れ替える。そして、コントローラ３０は、障害リカバリ処理（Ｓ５０）を実行する。
【０１２９】
図８と共に述べたように、カレントテーブルポインタ３６を切り替えることにより、ドライブステータスの変更（Ｓ４０３）及びドライブ番号の変更（Ｓ４０４）は、同時に行われる。これにより、上述のように、コピー先ドライブを間違える等の不当な動作が発生するのを防止している。
【０１３０】
ここで、図１２を参照する。回復元ドライブのステータスが図１３中のＳ４０３で”コレクションコピー中”に変更されると、図１２中のＳ３０３でコレクションコピーの開始指示があったと判断される。従って、コントローラ３０は、ドライブコピーを中断し、Ｓ３０８→Ｓ３０９→Ｓ３１０→Ｓ３０６→Ｓ３０７→Ｓ３０２→Ｓ３０３→Ｓ３０８の順番で各ステップを繰り返すことにより、コレクションコピーを実行する。
【０１３１】
図１３に戻る。回復元ドライブのステータスが”ドライブコピー中”ではない場合（S402:NO）、コントローラ３０は、回復元ドライブのステータスを”コレクションアクセス”に変更する（Ｓ４０５）。即ち、ドライブコピー処理が実行されていない場合、回復元ドライブのステータスを”コレクションアクセス”に変更する。（Ｓ４０５）
【０１３２】
コントローラ３０は、スペアドライブを検索し（Ｓ４０６）、使用可能なスペアドライブが存在するか否かを判定する（Ｓ４０７）。使用可能なスペアドライブが発見された場合（S407:YES）、コントローラ３０は、回復元ドライブのステータスを”コレクションコピー中”に変更し（Ｓ４０８）、これと同時に、回復元ドライブとスペアドライブとの間で仮想ドライブ番号を入れ替える（Ｓ４０９）。コレクションコピーの実行準備が整えた後、コントローラ３０は、コレクションコピーの実行を指示し（Ｓ４１０）、障害リカバリ処理（Ｓ５０）を実行する。上述のように、コントローラ３０は、例えば、共有メモリ１４０に所定のメッセージを書き込むことにより、指示を与える。
【０１３３】
ここで、Ｓ４１０で実行が指示されるコレクションコピー処理は、図１２と共に述べたコレクションコピーとは異なる。図１２中のコレクションコピーは、ドライブコピー処理の一部として構成されているが、Ｓ４１０で指示されるコレクションコピー処理は、ドライブコピー処理から分離されている。
【０１３４】
図１４は、図１３中のＳ４１０で指示されるコレクションコピー処理の詳細を示すフローチャートである。このコレクションコピー処理は、図１２で述べたコレクションコピーと同様に動作する。
【０１３５】
コントローラ３０は、回復対象アドレスを初期化した後（Ｓ４１１０）、ドライブステータス管理テーブルＴ１４を用いて回復元ドライブのステータスを参照し（Ｓ４１１１）、回復元ドライブのステータスが”コレクションコピー中”であるか否かを判定する（Ｓ４１１２）。
【０１３６】
図１３中のＳ４０８において、回復元ドライブのステータスは”コレクションコピー中”に変更されているため、Ｓ４１１２では「YES」と判定されて、Ｓ４１１３に移る。コントローラ３０は、回復元ドライブの属するRAIDグループ内の他のディスクドライブ２１０からサイズＳＢ分のデータ及びパリティをそれぞれ読出し、読み出したデータ及びパリティをキャッシュメモリ１３０に記憶させる（Ｓ４１１３）。
【０１３７】
コントローラ３０は、キャッシュメモリ１３０に記憶されたデータ及びパリティに基づいて、回復元ドライブ内のデータを復元し（Ｓ４１１４）、この復元されたデータを回復先ドライブの所定位置に書き込む（Ｓ４１１５）。コントローラ３０は、回復対象アドレスをＳＢだけ増加させた後（Ｓ４１１６）、回復元ドライブの全データを読み出したか否か（全データを復元したか否か）を判定する（Ｓ４１１７）。回復元ドライブに記憶されていたはずの全データを復元して、回復先ドライブにコピーするまでの間、Ｓ４１１１〜Ｓ４１１７のステップが繰り返される。即ち、回復元ドライブ内に記憶されているはずのデータは、ブロック数ＳＢ分ずつ復元されて、回復先ドライブに書き込まれる。
【０１３８】
図１５，図１６に基づいて、障害リカバリ処理の詳細を説明する。図１０，図１１，図１３でも示したように、ディスクドライブ２１０にエラーが検出されると、このエラーを回避してデータの入出力を行うために、障害リカバリ処理が実行される。
【０１３９】
図１５は、エラーが検出されている期間中に、ホスト１３から発行されたリードコマンドを処理するためのフローチャートである。コントローラ３０は、ホスト１３からのリードコマンドを受信すると（Ｓ５０１）、リードコマンド内のアドレスを「仮想ドライブ番号＋論理ブロックアドレス」の形式に変換する（Ｓ５０２）。
【０１４０】
コントローラ３０は、ドライブステータス管理テーブルＴ１４を参照して、リード対象のディスクドライブ２１０（以下、「リード対象ドライブ」）のステータスを判定する（Ｓ５０３）。
【０１４１】
リード対象ドライブのステータスが”コレクションコピー中”である場合、コントローラ３０は、リード対象のアドレス（図中、「リード対象LBA」）が、回復対象アドレスよりも小さいか否かを判定する（Ｓ５０４）。上述のように、ドライブのデータ領域の先頭アドレスから順番にサイズＳＢ分ずつデータが回復されていく。従って、リード対象アドレスが回復対象アドレスよりも小さい場合とは、回復済みのデータのリード要求であることを意味する。逆に、リード対象アドレスが回復対象アドレスよりも大きい場合とは、未だ回復されていないデータのリード要求であることを意味する。
【０１４２】
リード対象アドレスが回復対象アドレスよりも大きい場合（S504:NO）、コントローラ３０は、ドライブ番号管理テーブルＴ１１を参照することにより、リード対象ドライブと同一のRAIDグループ２１２に属する他の各ディスクドライブ２１０の実ドライブ番号を特定する（Ｓ５０５）。そして、コントローラ３０は、特定された各ディスクドライブ２１０から、リード要求されたデータに対応する他のデータ及びパリティをそれぞれ読出し（Ｓ５０６）、リード要求されたデータを復元する（Ｓ５０７）。コントローラ３０は、復元されたデータをキャッシュメモリ１３０に記憶させた後（Ｓ５０８）、この復元されたデータをホスト１３に送信する（Ｓ５０９）。
【０１４３】
Ｓ５０３において、リード対象ドライブのステータスが”コレクションアクセス”であると判定された場合は、Ｓ５０４をスキップして、Ｓ５０５に移る。コントローラ３０は、上述したデータの復元を行って（Ｓ５０５〜Ｓ５０８）、ホスト１３にデータを送信する（Ｓ５０９）。
【０１４４】
Ｓ５０３において、リード対象ドライブのステータスが”通常”または”ドライブコピー中”のいずれかに設定されている場合は、Ｓ５１０に移る。また、リード対象ドライブのステータスが”コレクションコピー中”の場合、リード対象アドレスが回復対象アドレスよりも小さいときは（S504:YES）、Ｓ５１０に移る。
【０１４５】
コントローラ３０は、リード対象ドライブの実ドライブ番号を特定し（Ｓ５１０）、特定されたディスクドライブ２１０からリード対象のデータを読み出す（Ｓ５１１）。コントローラ３０は、読み出したデータをキャッシュメモリ１３０に記憶させてから（Ｓ５１２）、ホスト１３に送信する（Ｓ５１３）。
【０１４６】
より詳しくは、ホスト１３からのコマンド受信は、CHA１１０によって行われる。CHA１１０は、受信したリードコマンドを共有メモリ１４０に書き込む。各DKA１２０は、共有メモリ１４０を随時参照しており、リードコマンドを発見すると、要求されたデータをディスクドライブ２１０から読み出してキャッシュメモリ１３０に記憶させる。DKA１２０は、要求されたデータがキャッシュメモリ１３０に記憶された旨のメッセージを、共有メモリ１４０に書き込む。各CHA１１０は、共有メモリ１４０を随時参照しており、DKA１２０からのメッセージを発見すると、キャッシュメモリ１３０に記憶されたデータを読み出して、ホスト１３に送信する。
【０１４７】
図１６は、エラーが検出されている期間中に、ホスト１３から発行されたライトコマンドを処理するためのフローチャートである。コントローラ３０は、ホスト１３からライトコマンドを受信すると（Ｓ５２１）、ライトコマンド内のアドレスを「仮想ドライブ番号＋論理ブロックアドレス」の形式に変換する（Ｓ５２２）。
なお、より詳しくは、図９で述べたように、コントローラ３０は、ホスト１３からのコマンドを受信し（Ｓ５２１）、ライトデータをキャッシュメモリ１３０に記憶させた時点で、ホスト１３に書込み完了を報告する（ライトアフター方式）。その後、コントローラ３０は、Ｓ５２２以下のステップを実行する。但し、キャッシュメモリ１３０に障害が生じている場合には、ディステージ処理（ドライブへのライトデータ書込み処理）を完了した後で、ホスト１３に書込み完了を報告する。
【０１４８】
Ｓ５２２に続いて、コントローラ３０は、ライトデータに関する旧パリティのアドレス（仮想ドライブ番号＋論理ブロックアドレス）を算出する（Ｓ５２３）。RAID５の場合、パリティを記憶するドライブは固定されておらず、所定の順序で、各ディスクドライブ２１０にパリティがそれぞれ記憶されていく。従って、ライト対象アドレスに基づいて、旧パリティの格納先アドレスを求めることができる。
【０１４９】
コントローラ３０は、ドライブステータス管理テーブルＴ１４を参照して、ライト対象ドライブのステータスを判定する（Ｓ５２４）。ライト対象ドライブのステータスが”コレクションコピー中”である場合、コントローラ３０は、リード対象アドレスが回復対象アドレスよりも小さいか否かを判定する（Ｓ５２５）。RAID５の場合、ライトデータを書き込む前に、旧データ読み出して新パリティを算出する必要があるためである。
【０１５０】
リード対象アドレスが回復対象アドレスよりも大きい場合（S525:NO）、コントローラ３０は、ライト対象ドライブと同一RAIDグループ２１２に属する他の各ディスクドライブ２１０の実ドライブ番号をそれぞれ特定する（Ｓ５２６）。
【０１５１】
コントローラ３０は、特定された各ディスクドライブ２１０から旧データをそれぞれ読み出し（Ｓ５２７）、読み出された旧データとライトデータ（新データ）とに基づいて、新パリティを算出する（Ｓ５２８）。以後の処理は、結合子１を介して、図１７のフローチャートで行われる。
【０１５２】
ライト対象ドライブのステータスが”コレクションアクセス”の場合、コントローラ３０は、Ｓ５２５をスキップして、Ｓ５２６に移り、新パリティを算出する（Ｓ５２６〜Ｓ５２８）。
【０１５３】
Ｓ５２４において、ライト対象ドライブのステータスが”通常”または”ドライブコピー中”のいずれかであると判定された場合、Ｓ５２９に移る。また、ライト対象ドライブのステータスが”コレクションコピー中”であって、リード対象アドレスが回復対象アドレスよりも小さい場合（S525:YES）、Ｓ５２９に移る。
【０１５４】
コントローラ３０は、ライトデータに関するパリティ、即ち、更新対象のデータに関して生成されている旧パリティを記憶しているディスクドライブ２１０のステータスを判定する（Ｓ５２９）。
【０１５５】
RAID５の場合、特定の固定されたパリティドライブが存在するわけではないが、説明の便宜上、処理対象のパリティを記憶するディスクドライブ２１０をパリティドライブと呼ぶこととする。また、図中では、紙面の都合上、”コレクションアクセス”をＣＡと、”コレクションコピー中”をＣＣと、”通常”をＮと、”ドライブコピー中”をＤＣと、それぞれ略記する。
【０１５６】
パリティドライブのステータスが”コレクションアクセス（ＣＡ）”である場合、以後のステップをそれぞれスキップして、結合子１に移る。パリティドライブのステータスが”コレクションコピー中”の場合、コントローラ３０は、リード対象アドレスが回復対象アドレスよりも小さいか否かを判定する（Ｓ５３０）。リード対象アドレスが回復対象アドレスよりも大きい場合（S530:NO）、旧パリティは未だ回復されていないため、Ｓ５２６に移り、他のディスクドライブ２１０から読み出したデータに基づいて、新パリティを算出する（Ｓ５２６〜Ｓ５２８）。
【０１５７】
パリティドライブのステータスが”通常”または”ドライブコピー中”のいずれかである場合、コントローラ３０は、Ｓ５３０をスキップして、Ｓ５３１に移り、ライト対象ドライブ及びパリティドライブの実ドライブ番号をそれぞれ特定する（Ｓ５３１）。
【０１５８】
コントローラ３０は、ライト対象ドライブから旧データを（Ｓ５３２）、パリティドライブから旧パリティをそれぞれ読み出す（Ｓ５３３）。コントローラ３０は、ライトデータと旧データ及び旧パリティに基づいて、新パリティを算出する（Ｓ５３４）。
【０１５９】
図１７は、図１６に続くフローチャートである。図１７に示すフローチャートでは、ライトデータのライト対象ドライブへの書込み（ライトデータのディステージ処理）と、新パリティのパリティドライブへの書込み（パリティのディステージ処理）とを、それぞれ実行する。
【０１６０】
コントローラ３０は、ライト対象ドライブのステータスを再度判定する（Ｓ５３５）。ライト対象ドライブのステータスが”通常”、”ドライブコピー”、”コレクションコピー中”のいずれかである場合、コントローラ３０は、ライト対象ドライブに、ホスト１３から受信したライトデータを書き込む（Ｓ５３６）。
より詳しくは、Ｓ５３６では、”ドライブコピー”の場合、回復元ドライブへライトデータが書き込まれる。”ドライブコピー”の場合、回復先ドライブへのライトデータの書込みは、Ｓ５３８で行われる。
”コレクションコピー中”の場合、Ｓ５３６では、回復先ドライブ（スペアドライブ）へライトデータが書き込まれる。つまり、”コレクションコピー中”の場合、ライト対象ドライブは回復先ドライブとなる。
【０１６１】
続いて、コントローラ３０は、ライト対象ドライブのステータスが”ドライブコピー中”であるか否かを判定する（Ｓ５３７）。ライト対象ドライブのステータスが”ドライブコピー中”の場合、コントローラ３０は、回復先ドライブにもライトデータを書き込む（Ｓ５３８）。即ち、コントローラ３０は、回復元ドライブ及び回復先ドライブの両方に、ライトデータをそれぞれ記憶させる。コントローラ３０は、回復先ドライブにライトデータを書き込んだ後、キャッシュメモリ１３０に記憶されているライトデータを破棄する（Ｓ５３９）。ディスクドライブ２１０への書込み（ディステージ処理）が完了し、キャッシュメモリ１３０にライトデータを保存しておく必要がないからである。
【０１６２】
Ｓ５３７において、ライト対象ドライブのステータスが”ドライブコピー中”ではないと判定された場合（S537:NO）、コントローラ３０は、Ｓ５３８をスキップし、Ｓ５３９に移って、キャッシュメモリ１３０上のライトデータを破棄する。ライト対象ドライブが”通常”または”コレクションコピー中”のいずれかである場合、Ｓ５３６でディステージ処理が完了するため、ライトデータを保存し続ける必要がない。
【０１６３】
続いて、コントローラ３０は、パリティのディステージ処理を行う。コントローラ３０は、パリティドライブのステータスを判定する（Ｓ５４０）。パリティドライブのステータスが”通常”、”ドライブコピー”、”コレクションコピー中”のいずれかである場合、コントローラ３０は、パリティドライブに新パリティを書き込む（Ｓ５４１）。そして、コントローラ３０は、パリティドライブのステータスが”ドライブコピー中”であるか否かを判定する（Ｓ５４２）。
【０１６４】
パリティドライブのステータスが”ドライブコピー中”の場合（S542:YES）、コントローラ３０は、回復先ドライブに新パリティを書き込んだ後（Ｓ５４３）、キャッシュメモリ１３０上の新パリティを破棄する（Ｓ５４４）。パリティドライブのステータスが”ドライブコピー中”ではない場合（S542:NO）、コントローラ３０は、Ｓ５４３をスキップして、Ｓ５４４に移り、キャッシュメモリ１３０上の新パリティを破棄する。また、Ｓ５４０において、パリティドライブのステータスが”コレクションアクセス”であると判定された場合、コントローラ３０は、Ｓ５４１〜Ｓ５４３をスキップして、新パリティを破棄する（Ｓ５４４）。
【０１６５】
以上、パリティを使用するRAIDを代表してRAID５を例に挙げて、ライトコマンド及びリードコマンドの処理方法を説明した。RAID５以外に、RAID３やRAID６等のように、パリティを用いて冗長記憶を実現する方式が知られている。これらRAID３，RAID６等においても、基本的にRAID５と同様に処理可能であることは、当業者であれば容易に理解でき、実施可能である。そこで、パリティを用いる場合については、これ以上の説明を省略し、RAID１の場合の一例を説明する。
【０１６６】
図１８は、RAID１の場合のライトコマンド処理を示すフローチャートである。コントローラ３０は、ホスト１３からライトコマンドを受信すると（Ｓ５５１）、ライトコマンド内のライト対象アドレスを、「仮想ドライブ番号＋論理ブロックアドレス」の形式に変換する（Ｓ５５２）。コントローラ３０は、ドライブ番号管理テーブルＴ１１を用いて、正ドライブ及び副ドライブの実ドライブ番号をそれぞれ特定する（Ｓ５５３）。正ドライブと副ドライブとは、ミラーリングのペアを構成しており、それぞれ同一の記憶内容を保持している。
【０１６７】
コントローラ３０は、正ドライブのステータスを確認する（Ｓ５５４）。正ドライブのステータスが”通常”、”ドライブコピー”、”コレクションコピー中”のいずれかである場合、コントローラ３０は、正ドライブにライトデータを書き込む（Ｓ５５５）。
【０１６８】
コントローラ３０は、正ドライブのステータスが”ドライブコピー中”であるか否かを判定し（Ｓ５５６）、”ドライブコピー中”の場合には（S556:YES）、回復先ドライブにもライトデータを書き込む（Ｓ５５７）。なお、Ｓ５５４において、正ドライブのステータスが”コレクションアクセス”であると判定された場合、Ｓ５５５〜Ｓ５５７はスキップされ、Ｓ５５８に移る。
【０１６９】
次に、コントローラ３０は、副ドライブのステータスを判定する（Ｓ５５８）。正ドライブの場合と同様に、副ドライブのステータスが”通常”、”ドライブコピー”、”コレクションコピー中”のいずれかである場合、コントローラ３０は、副ドライブにライトデータを書き込む（Ｓ５５９）。
【０１７０】
コントローラ３０は、副ドライブのステータスが”ドライブコピー中”である場合（S560:YES）、回復先ドライブにもライトデータを書き込んだ後（Ｓ５６１）、キャッシュメモリ１３０上のライトデータを破棄する（Ｓ５６２）。
【０１７１】
副ドライブのステータスが”通常”または”コレクションコピー中”のいずれかである場合、コントローラ３０は、Ｓ５６１をスキップして、キャッシュメモリ１３０に記憶されているライトデータを破棄する（Ｓ５６２）。なお、Ｓ５５８において、副ドライブのステータスが”コレクションアクセス”であると判定された場合、Ｓ５５９〜Ｓ５６１はスキップされ、キャッシュメモリ１３０上のライトデータが破棄される（Ｓ５６２）。
【０１７２】
本実施例は上述のように構成されるので、以下の効果を奏する。本実施例では、ドライブコピーからコレクションコピーに移行する際に、ドライブコピーで使用したコピーポインタ（回復対象アドレス）を引き継ぐことにより、ドライブコピーの中断位置からコレクションコピーを行うことができる。従って、コピー済みの範囲に無駄な上書きが行われるのを防止して、ドライブの回復時間を短縮することができる。これにより、本実施例では、ドライブ回復中の応答性能低下を抑制し、使い勝手及び信頼性を改善できる。
【０１７３】
本実施例では、処理対象のデータが、回復済みであるか否かを判定し、回復済みの場合には、その回復済みのデータを用いて、リードコマンドやライトコマンドを処理する構成とした（図１５中のＳ５０４，図１６中のＳ５２５参照）。従って、既に回復されたデータを有効に利用することができ、ディスクドライブの二重障害に対する耐久性を高めることができる。
【０１７４】
特に、例えば、大容量のディスクドライブ２１０において、ドライブコピーが完了間近の時点で、コレクションコピーに移行する場合、本実施例は優れた効果を奏する。もしも、大容量のディスクドライブ２１０の先頭アドレスからコレクションコピーを行う場合、ドライブコピーによってコピーされた範囲が無駄に上書きされるため、コレクションコピー完了までに長時間を必要とする。これに対し、本実施例では、ドライブコピーの中断位置からコレクションコピーを開始するため、ドライブコピーによりコピーされた範囲をそのまま活かして、無駄なコピーが行われるのを防止できる。従って、コレクションコピーが完了するまでの時間を大幅に短縮することができる。また、ドライブコピーの完了間近でコレクションコピーに移行する場合、ドライブコピーによって大部分のデータが回復先ドライブにコピーされている。従って、別のディスクドライブ２１０に障害が生じた場合でも、ドライブコピーによるコピー済みデータを用いて、ホスト１３からのアクセス要求を処理することができ、ディスクドライブの二重障害に対する耐久性を高め、記憶制御装置１０の信頼性を向上させることができる。
【０１７５】
本実施例では、第１テーブルセットＴ１と第２テーブルセットＴ２とを切り替えることにより、回復元ドライブとスペアドライブとの間の仮想ドライブ番号の入れ替え及びドライブステータスの変更を一括して同時に行う構成とした。従って、ドライブコピーからコレクションコピーへ状態を遷移させる場合でも、同一のスペアドライブを確保して、ドライブコピーとコレクションコピーとの間の整合性を維持することができる。
【０１７６】
本実施例では、ドライブコピー処理の中で、コレクションコピーを行う構成とした。即ち、本実施例では、ドライブコピーとコレクションコピーとを一体化して、１つのジョブに構成した。従って、ドライブコピーからコレクションコピーへ円滑に移行させることができる。
【実施例２】
【０１７７】
図１９〜図２１に基づいて、第２実施例を説明する。本実施例を含む以下の各実施例は、第１実施例の変形例に該当する。以下の各実施例では、上述した構成と重複する構成の説明を割愛し、特徴部分を中心に説明する。本実施例では、ホスト１３によって回復先ドライブが更新された場合、更新された部分をビットマップによって管理する。そして、ビットマップに基づいて、処理対象のデータが回復済みであるか否かを判定する。
【０１７８】
図１９は、エラー発生期間中にホスト１３からライトコマンドを受信した場合のフローチャートの一部である。このフローチャートは、図１７に示すフローチャートと対応しており、図１６に示すフローチャートから続くものである。
【０１７９】
従って、図１９のフローチャートは、図１７のフローチャートと共通のステップ（Ｓ５３５〜Ｓ５４４）を備えている。本実施例に特徴的なステップを中心に説明すると、本実施例では、回復先ドライブにライトデータが書き込まれた後（Ｓ５３８）、コントローラ３０は、回復先ドライブへの書込みが行われたか否かを判定する（Ｓ５７１）。
ここで、Ｓ５７１では、”コレクションコピー中”における回復先ドライブ、または、”ドライブコピー”における回復先ドライブに、ライトデータが書き込まれたか否かをチェックする。そして、コントローラ３０は、回復先ドライブへの書込み（つまり、データの更新）を検出すると（S571:YES）、図２０に示すビットマップＴ１５を更新させる（Ｓ５７２）。
【０１８０】
同様に、コントローラ３０は、回復先ドライブに新パリティを書き込んだ場合（Ｓ５４３）、回復先ドライブに新パリティが書き込まれた位置をビットマップＴ１５に記憶させる（Ｓ５７３，Ｓ５７４）。
【０１８１】
図２０は、更新位置を管理するためのビットマップＴ１５の一例を示す。このビットマップＴ１５は、例えば、各実ドライブ番号毎に、各ブロックが更新されたか否かを示すビットデータ（更新フラグ）を対応付けている。即ち、各ビットはディスクドライブ２１０内の各ブロックにそれぞれ対応する。ビット”０”は、そのブロックが更新されていないことを示し、ビット”１”は、そのブロックが更新されたことを示す。
【０１８２】
図２１は、本実施例によるドライブコピー処理を示すフローチャートである。このフローチャートは、図１２に示すフローチャートに対応しており、共通のステップ（Ｓ３０１〜Ｓ３１０）を備えている。
【０１８３】
本実施例では、コントローラ３０は、回復対象アドレスを初期化した後（Ｓ３０１）、回復元ドライブのステータスを確認する前に（Ｓ３０２）、回復先ドライブに関するビットマップＴ１５を参照する（Ｓ５８０）。そして、コントローラ３０は、回復対象アドレスからサイズＳＢ内の全ブロックの更新フラグが”１”にセットされているか否かを判定する（Ｓ５８１）。
【０１８４】
回復対象アドレスからサイズＳＢ分の全ブロックについて更新フラグが”１”にセットされている場合（S581:YES）、これから回復先ドライブにコピーしようとする範囲が、既にホスト１３によって更新されていることを意味する。つまり、回復元ドライブから回復先ドライブにＳＢ分のブロックデータをコピーする必要がない。そこで、コントローラ３０は、ドライブコピー及びコレクションコピーを行うことなく、Ｓ３０６に移る。
【０１８５】
これに対し、回復対象アドレスからサイズＳＢ分の全ブロックのうち、いずれか１つのブロックの更新フラグに”０”がセットされている場合（S581:NO）、コントローラ３０は、図１２で述べたと同様に、ドライブコピーまたはコレクションコピーを実行する。
【０１８６】
なお、サイズＳＢ分のブロックデータを回復先ドライブにコピーした後（Ｓ３０５，Ｓ３１０）、コントローラ３０は、回復先ドライブのビットマップＴ１５を更新させる（Ｓ５８２，Ｓ５８３）。これは、回復先ドライブへの書込みを全て管理するためであり、本実施例において、Ｓ５８２，Ｓ５８３は必ずしも必要ではない。但し、後述の実施例では、Ｓ５８２，Ｓ５８３で更新されるビットマップＴ１５は、有効に利用される。
【０１８７】
このように構成される本実施例も、第１実施例と同様の作用効果を奏する。これに加えて、本実施例では、ホスト１３による回復先ドライブへの更新状況をビットマップＴ１５で管理し、コピーの必要性があるか否かを判定する（Ｓ５８１）。そして、本実施例では、コピーの必要性があると判定された場合のみ、ドライブコピーまたはコレクションコピーを行う構成とした。従って、ドライブコピー等が無駄に行われる可能性を抑制して、より効率的にドライブを回復させることができる。
【実施例３】
【０１８８】
図２２に基づいて第３実施例を説明する。本実施例は、第２実施例をさらに改良したもので、処理対象のデータが回復済みであるか否かを、ビットマップＴ１５に基づいて判断する。図２２は、結合子１を介して、図１９に示すフローチャートに続いている。
【０１８９】
図２２は、ライトコマンドを処理するフローチャートである。このフローチャートは、図１６に示すフローチャートに対応しており、Ｓ５２５及びＳ５３０以外のステップが共通である。即ち、本実施例では、Ｓ５２５，Ｓ５３０に代えて、Ｓ５９０，Ｓ５９１を採用する。Ｓ５９０，Ｓ５９１では、論理ブロックアドレスを比較するのではなく、リード対象アドレスの更新フラグに基づいて、回復済みのデータであるか否かを判定する。
【０１９０】
つまり、コントローラ３０は、ビットマップＴ１５を参照することにより、リード要求されたブロックデータに関する全ての更新フラグが”１”にセットされているか否かを判定する（Ｓ５９０，Ｓ５９１）。リード対象の全ブロックについて、更新フラグが”１”にセットされている場合、そのブロックデータは回復済みであると判断される。なお、リードコマンドの場合も、上記同様に構成される。即ち、図１５中のＳ５０４を、図２２中のＳ５９０（Ｓ５９１）に置き換えればよい。
【０１９１】
本実施例も第１実施例及び第２実施例と同様の作用効果を奏する。これに加えて、本実施例では、ホスト１３からのコマンド処理時にも、ビットマップＴ１５を有効に利用することができる。
【実施例４】
【０１９２】
図２３〜図２５に基づいて、第４実施例を説明する。本実施例では、例えば、RAID６のように、同一RAIDグループ２１２内で、複数のコレクションコピーが起動する場合を説明する。本実施例では、処理の先行しているコレクションコピーによって、処理の遅れているコレクションコピーの担当する範囲のコピーも一緒に行う。本実施例では、第２実施例と同様に、ビットマップＴ１５によって、回復先ドライブの更新状況が管理されているものとする。
【０１９３】
図２３は、RAID６によるドライブ回復の様子を模式的に示す説明図である。図２３（ａ）に示すように、複数のディスクドライブ２１０（＃０〜＃５）によって、RAID６の冗長記憶領域が形成されている。各ディスクドライブ２１０のうち、２つは、それぞれ異なる種類のパリティを記憶するために使用され、残りのディスクドライブ２１０には、データが記憶される。図２３の説明では、ディスクドライブ２１０（＃４，＃５）に、それぞれパリティが記憶されているものとする。
【０１９４】
図２３（ｂ）に示すように、もしも、ディスクドライブ２１０（＃１）に第１閾値Ｔｈ１以上のエラーが検出されると、将来の障害発生に備えて、このディスクドライブ（第１エラードライブ（＃１））から第１スペアドライブ（＃１００）へ第１ドライブコピーが開始される。
【０１９５】
図２３（ｃ）に示すように、もしも、第１エラードライブ（＃１）に第２閾値Ｔｈ２以上のエラーが発生すると、第１スペアドライブ（＃１００）を用いて、第１ドライブコピーの中断位置ＣＰ１から、第１コレクションコピーが開始される。即ち、コントローラ３０は、他のディスクドライブ２１０（＃０，＃２〜＃４）からデータ及びパリティを読み出して、第１エラードライブ（＃１）内のデータを復元する。復元したデータは、第１スペアドライブ（＃１００）に記憶される。なお、ここでは、２種類のパリティのうち、いずれか一方のパリティのみを使用する。
【０１９６】
図２３（ｄ）に示すように、別のディスクドライブ２１０（＃２）において、第１閾値Ｔｈ１以上のエラーが検出されると、このディスクドライブ（第２エラードライブ（＃２））から第２スペアドライブ（＃１０１）への第２ドライブコピーが開始される。
【０１９７】
図２３（ｅ）に示すように、もしも、第２エラードライブ（＃２）に第２閾値Ｔｈ２以上のエラーが検出されると、第２スペアドライブ（＃１０１）を用いて、第２ドライブコピーの中断位置から、第２コレクションコピーが開始される。この第２コレクションコピーでは、２種類のパリティの両方をそれぞれ使用する。
【０１９８】
ここで、第１コレクションコピーの方が、第２コレクションコピーよりも処理が先行している場合、第１コレクションコピーは、第２コレクションコピーの担当部分も一緒に処理する。これにより、第１コレクションコピーによって復元されたデータを有効に利用することができ、重複したデータ復元処理を省略して、第２コレクションコピーの処理負荷を軽減することができる。
【０１９９】
図２４，図２５は、本実施例によるドライブコピー処理のフローチャートである。まず、コントローラ３０は、回復対象のアドレスを初期化し（Ｓ６０１）、回復先ドライブに関するビットマップＴ１５を参照する（Ｓ６０２）。
【０２００】
コントローラ３０は、回復対象アドレスからサイズＳＢ分の全ブロックについて、更新フラグが”１”にセットされているか否かを判定する（Ｓ６０３）。これからコピーしようとする範囲ＳＢ内の全ブロックが、ホスト１３によって更新されている場合（S603:YES）、これらのブロックデータをコピーする必要がないため、Ｓ６０９に移る。
【０２０１】
回復対象アドレスからサイズＳＢ分の全ブロックのうち、いずれか１つ以上のブロックについて更新フラグに”０”がセットされている場合（S603:NO）、図１２で述べたと同様に、ドライブコピーを開始する。
【０２０２】
コントローラ３０は、回復元ドライブのステータスを確認し（Ｓ６０４）、回復元ドライブのステータスが”ドライブコピー中”の場合（Ｓ６０５）、回復元ドライブからサイズＳＢ分のデータを読出し、キャッシュメモリ１３０に記憶させる（Ｓ６０６）。
【０２０３】
コントローラ３０は、キャッシュメモリ１３０に記憶されたデータを、回復先ドライブに書込み（Ｓ６０７）、ビットマップＴ１５を更新させる（Ｓ６０８）。そして、コントローラ３０は、回復対象アドレスをＳＢだけ増加させ（Ｓ６０９）、回復元ドライブの全データをコピーしたか否かを判定する（Ｓ６１０）。回復元ドライブの全データを回復先ドライブにコピーするまで、Ｓ６０４〜Ｓ６１０のステップを繰り返す。
【０２０４】
Ｓ６０５において、回復元ドライブのステータスが”コレクションコピー中”であると判定された場合、図２５に移る。コントローラ３０は、回復元ドライブと同一のRAIDグループ２１２内において、別のコレクションコピーが行われているか否かを判定する（Ｓ６１１）。以下、別のコレクションコピーを第２コレクションコピーと呼び、第２コレクションコピーで使用されている回復先ドライブを第２回復先ドライブと呼ぶ。
【０２０５】
第２コレクションコピーが行われている場合（S611:YES）、コントローラ３０は、他の各ディスクドライブ２１０からデータ及びパリティを読出して、キャッシュメモリ１３０に記憶させる（Ｓ６１２）。コントローラ３０は、第２回復先ドライブにおけるコピー処理よりも第１回復先ドライブにおけるコピー処理の方が、進んでいるか否かを判定する（Ｓ６１３）。
【０２０６】
第１回復先ドライブにおけるコレクションコピーの方が、第２回復先ドライブにおけるコレクションコピーよりも進んでいる場合（S613:YES）、コントローラ３０は、キャッシュメモリ１３０に記憶されたデータ及びパリティに基づいて、処理対象のデータを復元しする（Ｓ６１４）。そして、コントローラ３０は、復元されたデータを、第１回復先ドライブ及び第２回復先ドライブの両方にそれぞれ書込み（Ｓ６１５）、各回復先ドライブ用のビットマップＴ１５をそれぞれ更新させる（Ｓ６１６）。ビットマップＴ１５は、各ディスクドライブ毎にそれぞれ用意されている。
【０２０７】
コントローラ３０は、両方の回復先ドライブにデータを書き込んだ後、図２４中のＳ６０９に移り、回復対象アドレスをＳＢだけ増加させる。
【０２０８】
Ｓ６１３において、第１回復先ドライブにおけるコレクションコピーが、第２回復先ドライブにおけるコレクションコピーよりも進んでいないと判定された場合（S613:NO）、コントローラ３０は、キャッシュメモリ１３０に記憶されたデータ及びパリティに基づいて、処理対象のデータを復元する（Ｓ６１７）。そして、コントローラ３０は、この復元されたデータを、第１回復先ドライブにのみ書込み（Ｓ６１８）、第１回復先ドライブ用のビットマップＴ１５を更新させる（Ｓ６１９）。
【０２０９】
同一RAIDグループ２１２内において、第２コレクションコピーが起動されていない場合（S611:NO）、図１２で述べたと同様に、コントローラ３０は、他の各ディスクドライブ２１０からデータ及びパリティを読み出して、キャッシュメモリ１３０に記憶させ（Ｓ６２０）、データを復元する（Ｓ６２１）。
【０２１０】
このように構成される本実施例でも前記各実施例と同様の作用効果を奏する。これに加えて、本実施例では、同一のRAIDグループ２１２内で複数のコレクションコピーが起動された場合に、いずれか処理の先行しているコレクションコピーによって復元されたデータを、複数の回復先ドライブにそれぞれ書き込む構成とした。従って、重複したデータ復元処理が行われるのを防止して、効率的にコレクションコピーを行うことができる。
【実施例５】
【０２１１】
図２６，図２７に基づいて第５実施例を説明する。本実施例では、エラー管理の方法に関する複数の変形例を説明する。図２６に示すように、エラー管理テーブルＴ１２Ａの管理項目に「RAIDレベル」を追加してもよい。そして、閾値管理テーブルＴ１３Ａは、各RAIDレベル毎に、それぞれ用意することができる。
【０２１２】
これにより、各RAIDレベル毎に、それぞれ異なる閾値Ｔｈ１，Ｔｈ２を設定することができるため、RAIDの種類に応じたエラー監視及びドライブ回復を行うことができる。
【０２１３】
図２７に示すように、エラー管理テーブルＴ１２Ｂの管理項目に、「ドライブタイプ」を追加することもできる。閾値管理テーブルＴ１３Ｂは、各ドライブタイプ毎にそれぞれ用意される。ドライブタイプとは、ディスクドライブ２１０の種別を示す情報であり、例えば、FCディスク、ATAディスク等を挙げることができる。
【０２１４】
これにより、各ドライブタイプ毎に、それぞれ異なる閾値Ｔｈ１，Ｔｈ２を設定することができ、ドライブタイプに応じたエラー監視及びドライブ回復が可能となる。
【０２１５】
このように構成される本実施例も前記各実施例と同様の作用効果を奏する。これに加えて、本実施例では、RAIDレベルやドライブタイプに応じて、閾値Ｔｈ１，Ｔｈ２をそれぞれ設定可能なため、RAIDレベルやドライブタイプに起因する信頼性等に応じて、適切なエラー監視及びドライブ回復を行うことができる。例えば、信頼性の低いディスクドライブやRAIDグループについては、閾値を低めに設定することにより、障害の予兆を速やかに検出して、予防措置としてのドライブコピーを実行することができる。
【０２１６】
なお、本発明は、上述した各実施例に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。
【図面の簡単な説明】
【０２１７】
【図１】本発明の実施形態の全体概念を示す説明図である。
【図２】記憶制御装置の構成を示す説明図である。
【図３】各処理と各テーブルとの関係を模式的に示す説明図である。
【図４】ドライブ番号管理テーブルの構成を示す説明図であり、（ａ）は仮想ドライブ番号を交換する前の状態を、（ｂ）は仮想ドライブ番号を交換した後の状態をそれぞれ示す。
【図５】仮想ドライブ番号を交換することにより、スペアドライブをRAIDグループに組み込む様子を示す説明図である。
【図６】エラー管理テーブル及び閾値管理テーブルの構成を示す説明図である。
【図７】ドライブステータス管理テーブルの構成を示す説明図である。
【図８】ドライブステータス管理テーブル及びドライブ番号管理テーブルを一括して切り替える様子を模式的に示す説明図であって、（ａ）はテーブルセットを切り替える前の状態を、（ｂ）はテーブルセットを切り替えた後の状態をそれぞれ示す。
【図９】ホストからのコマンドを処理するためのフローチャートである。
【図１０】ディスクドライブのエラー状況を検出する処理を示すフローチャートである。
【図１１】ドライブコピー処理を起動させるための処理を示すフローチャートである。
【図１２】ドライブコピー処理を示すフローチャートである。
【図１３】コレクションコピー処理を起動させるための処理を示すフローチャートである。
【図１４】コレクションコピー処理を示すフローチャートである。
【図１５】リードコマンドの処理を示すフローチャートである。
【図１６】ライトコマンドの処理を示すフローチャートである。
【図１７】図１６に続くフローチャートである。
【図１８】RAID１の場合のライトコマンド処理を示すフローチャートである。
【図１９】第２実施例に係る記憶制御装置で実行されるライトコマンド処理の要部を示すフローチャートである。
【図２０】回復先ドライブの更新状況を管理するためのビットマップを示す説明図である。
【図２１】ドライブコピー処理を示すフローチャートである。
【図２２】第３実施例に係る記憶制御装置で実行されるライトコマンド処理の要部を示すフローチャートである。
【図２３】第４実施例に係る記憶制御装置において、複数のコレクションコピーが実行される様子を模式的に示す説明図である。
【図２４】ドライブコピー処理のフローチャートである。
【図２５】図２４に続くフローチャートである。
【図２６】第５実施例に係る記憶制御装置において使用されるエラー管理テーブル及び閾値管理テーブルの構成を示す説明図である。
【図２７】エラー管理テーブル及び閾値管理テーブルのさらに別の構成を示す説明図である。
【符号の説明】
【０２１８】
１…記憶制御装置、２…ディスクドライブ、２Ａ…スペアドライブ、３…I/O要求処理部、４…エラー状況検出部、５…ドライブ回復制御部、５Ａ…ドライブコピー部、５Ｂ…コピー進捗状況管理部、５Ｃ…コレクションコピー部、６…RAIDグループ、７…ホスト、１０…記憶制御装置、１３…ホスト、１４…管理端末、１５…管理サーバ、２０…記憶部、３０… コントローラ、３１…エラー状況検出処理、３２…障害リカバリ処理、３３…ドライブコピー処理、３４…コレクションコピー処理、３５…コピーポインタ、３６…カレントテーブルポインタ、１１０…チャネルアダプタ（CHA）、１１１…通信ポート、１２０…ディスクアダプタ（DKA）、１３０…キャッシュメモリ、１４０…キャッシュメモリ、１５０…接続制御部、２１０…ディスクドライブ、２１２…RAIDグループ、２１３…論理ボリューム
【図１】
2007233903.tif 000003
【図２】
2007233903.tif 000004
【図３】
2007233903.tif 000005
【図４】
2007233903.tif 000006
【図５】
2007233903.tif 000007
【図６】
2007233903.tif 000008
【図７】
2007233903.tif 000009
【図８】
2007233903.tif 000010
【図９】
2007233903.tif 000011
【図１０】
2007233903.tif 000012
【図１１】
2007233903.tif 000013
【図１２】
2007233903.tif 000014
【図１３】
2007233903.tif 000015
【図１４】
2007233903.tif 000016
【図１５】
2007233903.tif 000017
【図１６】
2007233903.tif 000018
【図１７】
2007233903.tif 000019
【図１８】
2007233903.tif 000020
【図１９】
2007233903.tif 000021
【図２０】
2007233903.tif 000022
【図２１】
2007233903.tif 000023
【図２２】
2007233903.tif 000024
【図２３】
2007233903.tif 000025
【図２４】
2007233903.tif 000026
【図２５】
2007233903.tif 000027
【図２６】
2007233903.tif 000028
【図２７】
2007233903.tif 000029