(57)【要約】【課題】本発明の記憶制御装置は、ディスクドライブの障害発生頻度を低減させる。【解決手段】エラー管理部２Ｂは、各ディスクドライブ３Ａについて、エラーの発生回数を管理する。エラーの発生回数が閾値以上のディスクドライブは、再起動対象のディスクドライブとして選択される。再起動制御部２Ｃは、再起動対象のディスクドライブ３Ａ（３）を再起動させる前に、差分管理を開始させる。差分管理部２Ｄは、差分ビットマップ２Ｅを用いて、パリティグループ３Ｂに関する更新箇所を管理する。差分管理の開始後、再起動制御部２Ｃは、エラーの検出されたディスクドライブ３Ａ（３）を再起動させる。これにより、ファームウェアのハングアップ等が原因のエラーを解消できる。【選択図】        図１
2008052547.tif 000002
【特許請求の範囲】
【請求項１】
複数の記憶デバイスと、各記憶デバイスを制御するコントローラとを備える記憶制御装置であって、
前記コントローラは、
上位装置から受信したコマンドを処理し、処理結果を前記上位装置に送信するコマンド処理部と、
前記各記憶デバイスに生じたエラーをそれぞれ管理し、前記エラーの発生状態に基づいて再起動対象の所定の記憶デバイスを検出するエラー管理部と、
前記エラー管理部により検出された前記所定の記憶デバイスを再起動させる再起動制御部と、
前記所定の記憶デバイスが再起動するための期間を含む所定の差分管理期間内に、前記所定の記憶デバイスの属するパリティグループに関するライトコマンドを前記コマンド処理部が処理する場合には、前記ライトコマンドによる更新箇所を管理する差分管理部と、を備え、
前記再起動制御部は、前記差分管理期間の終了後に、前記パリティグループ内の前記所定の記憶デバイス以外の各記憶デバイスにそれぞれ記憶されているデータに基づいて、前記更新箇所のデータを復元し、この復元されたデータを前記所定の記憶デバイスに書き込む記憶制御装置。
【請求項２】
前記コマンド処理部は、
（１）前記差分管理期間内に、前記パリティグループに関するライトコマンドを前記上位装置から受信した場合には、前記パリティグループ内の前記所定の記憶デバイス以外の各記憶デバイスにデータをそれぞれ書込み、
（２）前記差分期間内に、前記パリティグループに関するリードコマンドを前記上位装置から受信した場合には、前記パリティグループ内の前記所定の記憶デバイス以外の各記憶デバイスにそれぞれ記憶されているデータに基づいて、前記上位装置から要求されたリードデータを復元し、この復元されたリードデータを前記上位装置に送信する請求項１に記載の記憶制御装置。
【請求項３】
前記エラー管理部は、前記各記憶デバイスのうち、予め設定された所定のエラーの発生回数が予め設定された所定の閾値に達した記憶デバイスを、前記所定の記憶デバイスとして検出する請求項１に記載の記憶制御装置。
【請求項４】
前記差分管理期間の開始時は、前記再起動制御部によって前記所定の記憶デバイスの電源がオフされる時点よりも前に設定されており、前記差分管理期間の終了時は、前記所定の記憶デバイスの電源がオンされた時点よりも後に設定されている請求項１に記載の記憶制御装置。
【請求項５】
前記差分管理期間の開始時は、前記再起動制御部によって前記所定の記憶デバイスの電源がオフされる時点よりも前の時点に設定されており、前記差分管理期間の終了時は、前記所定の記憶デバイスが正常に再起動した時点、または、前記所定の記憶デバイスが正常に再起動した時点よりも後の時点いずれか一つの時点に設定されている請求項１に記載の記憶制御装置。
【請求項６】
前記再起動制御部は、前記パリティグループに属する各記憶デバイスがそれぞれ作動している場合にのみ、前記所定の記憶デバイスを再起動させる請求項１に記載の記憶制御装置。
【請求項７】
前記複数の記憶デバイスには、少なくとも一つ以上の予備の記憶デバイスが含まれており、
前記再起動制御部は、前記所定の記憶デバイスが正常に再起動しない場合、前記所定の記憶デバイスの代わりに前記予備の記憶デバイスを選択し、前記パリティグループ内の前記所定の記憶デバイス以外の各記憶デバイスにそれぞれ記憶されている全データに基づいて、正常に再起動しない前記所定の記憶デバイスに記憶されるべきデータを全て復元し、この復元された全データを前記予備の記憶デバイスに記憶させる請求項１に記載の記憶制御装置。
【請求項８】
前記複数の記憶デバイスは、筐体内に交換不能に取り付けられている請求項１に記載の記憶制御装置。
【請求項９】
複数の記憶デバイスと、各記憶デバイスを制御するコントローラとを備える記憶制御装置の障害を回復させるための方法であって、
前記各記憶デバイスに生じたエラーをそれぞれ管理し、前記エラーの発生状態に基づいて、再起動対象の所定の記憶デバイスを検出するステップと、
前記所定の記憶デバイスの属するパリティグループに関する差分管理を開始するステップと、
前記所定の記憶デバイスを再起動させるステップと、
前記所定の記憶デバイスが正常に再起動したか否かを確認するステップと、
前記所定の記憶デバイスが正常に再起動した場合には、前記差分管理を停止させるステップと、
前記パリティグループ内の前記所定の記憶デバイス以外の各記憶デバイスにそれぞれ記憶されているデータに基づいて、前記差分管理されたデータを復元し、この復元されたデータを前記所定の記憶デバイスに書き込むステップと、
をそれぞれ実行する記憶制御装置の障害回復方法。
【請求項１０】
前記所定の記憶デバイスが正常に再起動しなかった場合には、予め用意されている予備の記憶デバイスを選択し、前記パリティグループ内の前記所定の記憶デバイス以外の各記憶デバイスにそれぞれ記憶されている全データに基づいて、正常に再起動しない前記所定の記憶デバイスに記憶されるべきデータを全て復元し、この復元された全データを前記予備の記憶デバイスに記憶させるステップを、さらに備える請求項９に記載の記憶制御装置の障害回復方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶制御装置及び記憶制御装置の障害回復方法に関する。
【背景技術】
【０００２】
例えば、政府、官公庁、地方自治体、企業、教育機関等では、多種多量のデータを取り扱うために、比較的大規模な記憶制御装置を用いてデータを管理する。この記憶制御装置は、冗長情報を利用して冗長性を備えた記憶領域（RAID：Redundant Array of Independent Disks）を構成し、この記憶領域にデータを記憶させる（特許文献１）。
【０００３】
このような記憶制御装置では、データを所定サイズに分割して、複数の記憶デバイスにそれぞれ分散して記憶させる。そして、分割された各データに基づいてパリティを算出し、このパリティを記憶デバイスに記憶させる。これにより、いずれか一つのデータが失われた場合でも、他のデータ及びパリティに基づいて、失われたデータを再生（回復）させることができる。
【０００４】
例えば、記憶デバイスに障害が発生し、データの読み書きを行うことができなくなった場合には、コレクションコピーが実行される。コレクションコピーとは、パリティグループ（ECC（Error Correcting Code）グループ、または、RAIDグループとも呼ばれる）内の正常な記憶デバイスに記憶されているデータ及びパリティに基づいて、障害の生じた記憶デバイスに記憶されている全データを復元させ、この復元させた全データを予備の記憶デバイスに記憶させる技術である（特許文献２）。
【０００５】
なお、ユーザが予め指定したポリシーに基づいて、ストレージシステムの各種の機器の設定を自動的に行うことができるようにした技術も知られている（特許文献３）。
【特許文献１】特開平１０−１４９２６２号公報
【特許文献２】特開平１１−１９１０３７号公報
【特許文献３】特開２００３−３０３０５２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
従来技術では、記憶デバイスに障害が発生してデータの読み書きを行うことができなくなった場合、コレクションコピーを実行することにより、障害の発生した記憶デバイスに記憶されているデータを予備の記憶デバイスに移し替える。コレクションコピーが完了すると、予備の記憶デバイスは、障害の発生した記憶デバイスの代わりに使用される。そして、障害の発生した記憶デバイスは、記憶制御装置から取り外されて、保守工場等に返却される。
【０００７】
従来は、記憶デバイスに障害が検出された場合、障害の生じた記憶デバイスは、記憶制御装置から直ちに切り離され、代わりに予備の記憶デバイスが使用される。しかし、記憶デバイスの障害には、物理的障害や論理的障害のように種々の種類があり、記憶デバイスを単に再起動させるだけで正常状態に回復する場合もある。例えば、記憶デバイス内のファームウェアがハングアップした場合は、記憶デバイスを再起動（リスタート）させるだけで、正常状態に回復することも多い。
【０００８】
記憶デバイスを再起動するだけで回復可能な障害の場合にも、この障害の生じた記憶デバイスを閉塞して、代わりに予備の記憶デバイスを使用するのでは、障害回復までに時間がかかる。障害の発生した記憶デバイスに記憶されている全てのデータを、コレクションコピーによって復元し、この復元されたデータを予備の記憶デバイスに記憶させる必要があるためである。
【０００９】
コレクションコピーでは、パリティグループ内の正常な記憶デバイスからデータ及びパリティをそれぞれ所定量ずつ読出し、この読み出されたデータ及びパリティに基づいて論理演算を行うことにより、障害の発生した記憶デバイスに記憶されているデータを復元させる。そして、この復元されたデータを予備の記憶デバイスに書き込む。このようなデータ及びパリティの読出しと、論理演算と、予備の記憶デバイスへの書込みという処理を、障害の生じた記憶デバイスに記憶されている全データについて、繰り返し実行する必要がある。従って、障害回復までに時間がかかり、記憶制御装置の負荷も増大する。
【００１０】
また、記憶デバイスを再起動するだけで回復可能な障害が発生するたびに、予備の記憶デバイスを使用するのでは、記憶デバイスの交換頻度が増大し、記憶制御装置の運用コスト及び保守コストが増加する。
【００１１】
そこで、本発明の目的は、記憶デバイスの交換頻度を低減できるようにした記憶制御装置及び記憶制御装置の障害回復方法を提供することにある。本発明の他の目的は、記憶デバイスの再起動による障害回復を短時間で行うことができ、かつ、記憶デバイスの再起動だけでは回復不能な障害が生じた場合にのみ予備の記憶デバイスを使用することにより、記憶デバイスの交換頻度を低減できるようにした記憶制御装置及び記憶制御装置の障害回復方法を提供することにある。本発明の更なる目的は、後述する実施形態の記載から明らかになるであろう。
【課題を解決するための手段】
【００１２】
上記課題を解決すべく、本発明に従う記憶制御装置は、複数の記憶デバイスと、各記憶デバイスを制御するコントローラとを備え、コントローラは、上位装置から受信したコマンドを処理し、処理結果を上位装置に送信するコマンド処理部と、各記憶デバイスに生じたエラーをそれぞれ管理し、エラーの発生状態に基づいて再起動対象の所定の記憶デバイスを検出するエラー管理部と、エラー管理部により検出された所定の記憶デバイスを再起動させる再起動制御部と、所定の記憶デバイスが再起動するための期間を含む所定の差分管理期間内に、所定の記憶デバイスの属するパリティグループに関するライトコマンドをコマンド処理部が処理する場合には、ライトコマンドによる更新箇所を管理する差分管理部と、を備え、再起動制御部は、差分管理期間の終了後に、パリティグループ内の所定の記憶デバイス以外の各記憶デバイスにそれぞれ記憶されているデータに基づいて、更新箇所のデータを復元し、この復元されたデータを所定の記憶デバイスに書き込む。
【００１３】
本発明の一態様では、コマンド処理部は、（１）差分管理期間内に、パリティグループに関するライトコマンドを上位装置から受信した場合には、パリティグループ内の所定の記憶デバイス以外の各記憶デバイスにデータをそれぞれ書込み、（２）差分期間内に、パリティグループに関するリードコマンドを上位装置から受信した場合には、パリティグループ内の所定の記憶デバイス以外の各記憶デバイスにそれぞれ記憶されているデータに基づいて、上位装置から要求されたリードデータを復元し、この復元されたリードデータを上位装置に送信する。
【００１４】
本発明の一態様では、エラー管理部は、各記憶デバイスのうち、予め設定された所定のエラーの発生回数が予め設定された所定の閾値に達した記憶デバイスを、所定の記憶デバイスとして検出する。
【００１５】
本発明の一態様では、差分管理期間の開始時は、再起動制御部によって所定の記憶デバイスの電源がオフされる時点よりも前に設定されており、差分管理期間の終了時は、所定の記憶デバイスの電源がオンされた時点よりも後に設定されている。
【００１６】
本発明の一態様では、差分管理期間の開始時は、再起動制御部によって所定の記憶デバイスの電源がオフされる時点よりも前の時点に設定されており、差分管理期間の終了時は、所定の記憶デバイスが正常に再起動した時点、または、所定の記憶デバイスが正常に再起動した時点よりも後の時点いずれか一つの時点に設定されている。
【００１７】
本発明の一態様では、再起動制御部は、パリティグループに属する各記憶デバイスがそれぞれ作動している場合にのみ、所定の記憶デバイスを再起動させる。
【００１８】
本発明の一態様では、複数の記憶デバイスには、少なくとも一つ以上の予備の記憶デバイスが含まれており、再起動制御部は、所定の記憶デバイスが正常に再起動しない場合、所定の記憶デバイスの代わりに予備の記憶デバイスを選択し、パリティグループ内の所定の記憶デバイス以外の各記憶デバイスにそれぞれ記憶されている全データに基づいて、正常に再起動しない所定の記憶デバイスに記憶されるべきデータを全て復元し、この復元された全データを予備の記憶デバイスに記憶させる。
【００１９】
本発明の一態様では、複数の記憶デバイスは、筐体内に交換不能に取り付けられる。
【００２０】
本発明の他の観点に従う記憶制御装置の障害回復方法は、複数の記憶デバイスと、各記憶デバイスを制御するコントローラとを備える記憶制御装置の障害を回復させるための方法であって、各記憶デバイスに生じたエラーをそれぞれ管理し、エラーの発生状態に基づいて、再起動対象の所定の記憶デバイスを検出するステップと、所定の記憶デバイスの属するパリティグループに関する差分管理を開始するステップと、所定の記憶デバイスを再起動させるステップと、所定の記憶デバイスが正常に再起動したか否かを確認するステップと、所定の記憶デバイスが正常に再起動した場合には、差分管理を停止させるステップと、パリティグループ内の所定の記憶デバイス以外の各記憶デバイスにそれぞれ記憶されているデータに基づいて、差分管理されたデータを復元し、この復元されたデータを所定の記憶デバイスに書き込むステップと、をそれぞれ実行する。
【００２１】
所定の記憶デバイスが正常に再起動しなかった場合には、予め用意されている予備の記憶デバイスを選択し、パリティグループ内の所定の記憶デバイス以外の各記憶デバイスにそれぞれ記憶されている全データに基づいて、正常に再起動しない所定の記憶デバイスに記憶されるべきデータを全て復元し、この復元された全データを予備の記憶デバイスに記憶させるステップを、さらに備えることもできる。
【００２２】
本発明の手段、機能、ステップの全部または一部は、コンピュータシステムにより実行されるコンピュータプログラムとして構成可能な場合がある。本発明の構成の全部または一部がコンピュータプログラムから構成された場合、このコンピュータプログラムは、例えば、各種記憶媒体に固定して配布等することができ、あるいは、通信ネットワークを介して送信することもできる。
【発明を実施するための最良の形態】
【００２３】
図１は、本発明の実施形態の全体概要を示す構成説明図である。本実施形態では、後述のように、ディスクドライブ３Ａ（３）に障害が検出された場合、障害の検出されたディスクドライブ３Ａ（３）を直ちに停止させて予備のディスクドライブに交換するのではなく、まず最初に、ディスクドライブ３Ａ（３）を再起動させる。例えば、ディスクドライブ３Ａ（３）内のファームウェアがハングアップしている場合等には、再起動させただけでも、ディスクドライブ３Ａ（３）が正常に作動する可能性が高いためである。
【００２４】
障害の発生したディスクドライブ３Ａ（３）を再起動させる場合には、ディスクドライブ３Ａ（３）の属するパリティグループ３Ｂについて、差分ビットマップ２Ｅを用いた差分管理を行う。ディスクドライブ３Ａ（３）の再起動が正常に完了した後、再起動期間中に発生した差分データを復元し、この差分データをディスクドライブ３Ａ（３）に記憶させる。
【００２５】
図１に示す記憶制御装置１の構成を説明する。記憶制御装置１は、例えば、コントローラ２と、記憶部３とを備えて構成される。コントローラ２は、ホスト４及び記憶部３とそれぞれ接続されている。コントローラ２は、ホスト４から受信したコマンドに応じて、記憶部３にアクセスし、データの入出力処理等を実行する。
【００２６】
記憶部３は、複数のディスクドライブ３Ａ（１）〜３Ａ（４）及び予備のディスクドライブ３Ａ（ＳＰ）を備えている。以下の説明では、特に区別する場合を除いて、ディスクドライブ３Ａと呼ぶ。各ディスクドライブ３Ａは、「記憶デバイス」に相当する。ディスクドライブ３Ａとしては、例えば、ハードディスクドライブ、半導体メモリ装置（フラッシュメモリ装置）、光ディスクドライブ、光磁気ディスクドライブ、フレキシブルディスクドライブ、磁気テープドライブ等のような種々のデバイスを用いることができる。以下の説明では、ハードディスクドライブの場合を例に挙げて説明する。
【００２７】
複数のディスクドライブ３Ａから一つのパリティグループ３Ｂが構成されている。パリティグループ３Ｂは、RAID５やRAID６等として知られているように、データの冗長性を維持するものである。例えば、３Ｄ＋１Ｐのパリティグループ３Ｂの場合、３個のディスクドライブ３Ａがデータを記憶するためのデータディスクとして、１個のディスクドライブ３Ａがパリティを記憶するためのパリティディスクとして、それぞれ使用される。なお、RAID５の場合、パリティは、各ディスクドライブ３Ａに順番に書き込まれる。
【００２８】
説明の便宜上、３Ｄ＋１Ｐの場合を例に挙げて説明する。ホスト４から受信されたライトデータは、３個のデータに分割され、これら分割された各データは、データディスクとして使用される各ディスクドライブ３Ａのセクタにそれぞれ書き込まれる。コントローラ２は、各データを各ディスクドライブ３Ａに書き込む際に、各データの排他的論理和を求めることにより、パリティを算出する。算出されたパリティは、パリティディスクとして使用されるディスクドライブ３Ａに書き込まれる。
【００２９】
ディスクドライブ３Ａに記憶されているデータを更新する場合、コントローラ２は、更新対象の旧データ及び旧パリティをディスクドライブ３Ａからそれぞれ読出し、新たなパリティを算出する。新パリティは、旧パリティと更新対象の旧データ及び新データの排他的論理和を求めることにより、算出される。あるいは、新パリティは、更新対象のデータ以外の他のデータ群と新データとの排他的論理和から算出することもできる。但し、この算出方法では、旧データを全て読み出すため、データディスクの数が多い場合は、新パリティを算出するための時間が長くなる。これに対し、旧パリティと旧データ及び新データから新パリティを算出する場合は、データディスクの数と無関係に、新パリティを得ることができる。
【００３０】
新パリティの算出後、コントローラ２は、新データで旧データを上書きすると共に、新パリティを記憶させる。ここで、各ディスクドライブ３Ａに記憶される各データには、所定ビットのECCが付加されているため、僅かなビットエラーは自動的に修復することができる。しかし、ECCによる修復能力を超えてビットエラーが発生した場合は、ディスクドライブ３Ａからデータを正常に読み出すことができない。
【００３１】
このようなエラーは、アンコレクタブルエラーと呼ばれる。アンコレクタブルエラーが発生した場合、コントローラ２は、読み出しに失敗したデータに関連する他のデータ及びパリティをそれぞれ読み出す。コントローラ２は、正常な各ディスクドライブ３Ａから読み出された各データ及びパリティの排他的論理和を求めることにより、読出しに失敗したデータを再現させる。正常なディスクドライブ３Ａから読み出されるデータ及びパリティに基づいて、データを復元する処理をコレクションコピーと呼ぶ。
【００３２】
上述のように、RAID５の場合は、パリティグループ３Ｂを構成する各ディスクドライブ３Ａのうち、いずれか一つのディスクドライブ３Ａに障害が発生した場合でも、他のディスクドライブ３Ａに記憶されているデータ及びパリティによって、障害の発生したディスクドライブ３Ａに記憶されているデータを復元できる。
【００３３】
次に、コントローラ２の機能構成を説明する。コントローラ２は、例えば、コマンド処理部２Ａと、エラー管理部２Ｂと、ドライブ再起動制御部２Ｃと、ドライブ再起動中の差分管理部（以下、差分管理部）２Ｄ及び差分ビットマップ２Ｅとを備える。
【００３４】
コマンド処理部２Ａは、「上位装置」としてのホスト４から受信したコマンドを処理し、その処理結果をホスト４に送信する。コマンドとしては、例えば、ライトコマンドやリードコマンド等を挙げることができる。
【００３５】
エラー管理部２Ｂは、各ディスクドライブ３Ａで生じるエラーをそれぞれ管理するものである。エラー管理部２Ｂは、エラーの発生状態に基づいて、再起動対象のディスクドライブ３Ａを決定する。エラー管理部２Ｂは、予め設定されている複数種類のエラーのそれぞれについて、その発生回数を各ディスクドライブ３Ａ毎にそれぞれ管理する。そして、いずれか一つの種類のエラーの発生回数が、予め設定された所定の閾値に達した場合、エラー管理部２Ｂは、そのディスクドライブ３Ａを再起動対象のディスクドライブとして検出する。エラーの発生回数が閾値に達したディスクドライブ３Ａは、いずれ障害が発生して使用不能になる可能性があるためである。そこで、エラー管理部２Ｂは、エラーの発生回数に基づいて障害の予兆を検出し、再起動させるべきディスクドライブ３Ａを選択するようになっている。図１に示す例では、ディスクドライブ３Ａ（３）のエラー発生回数が閾値に達した場合、このディスクドライブ３Ａ（３）が再起動対象のディスクドライブとして検出される。
【００３６】
ドライブ再起動制御部（以下、再起動制御部）２Ｃは、エラー管理部２Ｂによって選択された再起動対象のディスクドライブ３Ａ（３）を再起動させる。ディスクドライブ３Ａの再起動とは、例えば、そのディスクドライブ３Ａの電源をオフした後、そのディスクドライブ３Ａの電源をオンにする操作を意味する。これに限らず、ディスクドライブ３Ａがリセット信号の入力端子を備えているような場合には、ディスクドライブ３Ａにリセット信号を入力することにより、ディスクドライブ３Ａを再起動させることもできる。
【００３７】
差分管理部２Ｄは、所定の差分管理期間内に発生した差分データを、差分ビットマップ２Ｅによって管理する。差分ビットマップ２Ｅは、例えば、ブロック単位やトラック単位等のような所定の管理単位毎に、更新の有無をそれぞれ管理する。差分管理部２Ｄは、差分管理期間内に、パリティグループ３Ｂに属する各ディスクドライブ３Ａ（１），３Ａ（２），３Ａ（４）のデータが書き換えられた場合、どの箇所のデータが書き換えられたのかを差分ビットマップ２Ｅに記憶させる。
【００３８】
ここで、差分管理期間の開始時を再起動の開始前に、差分管理期間の終了時を再起動の完了後に、それぞれ設定することができる。ディスクドライブ３Ａ（３）を再起動させるよりも前に差分管理を開始するのは、より安全にデータを管理するためである。ディスクドライブ３Ａ（３）の再起動と差分管理とを同時に実行すれば、理論上、ディスクドライブ３Ａ（３）に関してデータの消失は発生しない。しかし、もしも僅かなタイミングのずれが発生すると、ディスクドライブ３Ａ（３）の再起動後に差分管理が開始される可能性がある。この場合、ディスクドライブ３Ａ（３）の再起動開始時から差分管理の開始時までの間に、コマンド処理部２Ａが受け付けたライトデータについて、パリティの不整合が発生する。データが更新されたにもかかわらず、更新されたデータに関するパリティが生成されないためである。
【００３９】
そこで、本実施形態では、ディスクドライブ３Ａ（３）を再起動させるよりも前に、パリティグループ３Ｂに関する差分管理を開始させる。なお、再起動前に差分管理を開始させると、差分管理の開始時から再起動開始時までの期間内では、無駄に差分管理が行われることになる。従って、差分管理の開始時と再起動の開始時との間の遅延時間を、短く設定するのが好ましい。
【００４０】
例えば、ディスクドライブ３Ａ（３）のファームウェアがハングアップしたために、ディスクドライブ３Ａ（３）のエラー発生回数が閾値に達したような場合、ディスクドライブ３Ａ（３）を再起動することにより、ディスクドライブ３Ａ（３）は正常状態に復帰する可能性が高い。再起動によって、ハングアップ状態が解消し、ファームウェアが正常に作動する可能性が高いためである。
【００４１】
ディスクドライブ３Ａ（３）が正常状態に復帰した場合、再起動制御部２Ｃは、差分管理部２Ｄによって管理されている差分データを、コレクションコピーによってディスクドライブ３Ａ（３）に書き込む。即ち、再起動制御部２Ｃは、再起動期間中の差分データのみをコレクションコピーによって復元し、この復元されたデータをディスクドライブ３Ａ（３）の所定位置に書き込む。
【００４２】
もしも、ディスクドライブ３Ａ（３）を再起動させても正常状態にならない場合、再起動制御部２Ｃは、予備のディスクドライブ３Ａ（ＳＰ）を使用する。再起動制御部２Ｃは、障害の生じたディスクドライブ３Ａ（３）以外のディスクドライブ３Ａ（１），３Ａ（２），３Ａ（４）に記憶されている全データ及び全パリティに基づいて、ディスクドライブ３Ａ（３）に記憶されている全データを復元させる。そして、再起動制御部２Ｃは、復元された全データを予備のディスクドライブ３Ａ（ＳＰ）に記憶させる。その後、予備のディスクドライブ３Ａ（ＳＰ）は、ディスクドライブ３Ａ（３）として使用される。
【００４３】
このように、本実施形態によれば、ディスクドライブ３Ａ（３）に閾値以上のエラーが検出された場合に、まず最初に、ディスクドライブ３Ａ（３）を再起動させて、正常状態に復帰するか否かを確認する。そして、ディスクドライブ３Ａ（３）の再起動期間中の差分データを管理しておき、ディスクドライブ３Ａ（３）が正常状態に復帰した場合には、コレクションコピーによって、差分データのみをディスクドライブ３Ａ（３）に記憶させるようになっている。
【００４４】
従って、本実施形態では、ディスクドライブ３Ａ（３）に閾値以上のエラーが検出された場合でも、このディスクドライブ３Ａ（３）を直ちに閉塞させて、予備のディスクドライブ３Ａ（ＳＰ）に交換する必要がない。これにより、本実施形態では、ディスクドライブ３Ａの交換頻度を低減させることができる。換言すれば、本実施形態では、従来、障害ディスクとして単純に扱われていたものを、再起動による回復を試みることで、結果的に障害の発生頻度を低減させる。
【００４５】
本実施形態では、再起動によって正常状態に復帰したディスクドライブ３Ａ（３）に、再起動期間中の差分データのみを書き込む構成のため、ディスクドライブ３Ａ（３）の復旧時間を短縮することができ、記憶制御装置１の負荷を低減できる。
【００４６】
本実施形態では、閾値以上のエラーが検出されたディスクドライブ３Ａ（３）を再起動しても正常状態に復帰しない場合にのみ、予備のディスクドライブ３Ａ（ＳＰ）を使用する構成とした。従って、予備のディスクドライブ３Ａ（ＳＰ）の使用数を低減することができる。これにより、記憶制御装置１に多くの予備のディスクドライブ３Ａ（ＳＰ）を予め搭載しておく必要がない。エラー検出時の交換頻度が少ないため、予備のディスクドライブ３Ａ（ＳＰ）の搭載数が少ない場合でも、ディスク障害に耐えることができる。
【００４７】
特に、例えば、記憶制御装置１の構造上、ディスクドライブ３Ａのユーザによる交換が困難または不能になっている場合でも、ディスクドライブ３Ａの交換頻度が少ないため、予備のディスクドライブ３Ａ（ＳＰ）を全て使用するまでの時間を長くすることができ、記憶制御装置１の寿命を長くして使い勝手を高めることができる。以下、本実施形態をより詳細に説明する。
【実施例１】
【００４８】
図２は、本実施例による記憶制御装置１００を模式的に示す正面図である。記憶制御装置１００の筐体１０１には、複数のコントローラ２００と、多数のディスクドライブ３１０とがそれぞれ設けられている。ここで、記憶制御装置１００は図１中の記憶制御装置１に、コントローラ２００は図１中のコントローラ２に、ディスクドライブ３１０は図１中のディスクドライブ３Ａに、それぞれ対応する。
【００４９】
例えば、筐体１０１の上部には、複数のコントローラ２００が設けられている。各コントローラ２００の構成は後述する。記憶制御装置１００は、複数のコントローラ２００によって、制御構造を冗長化している。
【００５０】
コントローラ２００の下側には、多数のディスクドライブ３１０が設けられている。そして、例えば、所定数のディスクドライブ３１０毎に、予備のディスクドライブ３１０（ＳＰ）が設けられている。なお、上述のコントローラ２００及びディスクドライブ３１０の配置に関する説明は一例であって、本発明はこれに限定されない。記憶制御装置１００は、少なくとも一つ以上のコントローラ２００と、複数のディスクドライブ３１０及び少なくとも一つ以上の予備のディスクドライブ３１０（ＳＰ）を備えていればよい。
【００５１】
図３は、記憶制御装置１００のハードウェア構成を示す説明図である。記憶制御装置１００には、ホスト１０及び管理端末２０がそれぞれ接続されている。
【００５２】
ホスト１０は、図１中のホスト４に対応する。ホスト１０は、例えば、CPU（Central Processing Unit）やメモリ等の情報処理資源を備えたコンピュータ装置であり、例えば、パーソナルコンピュータ、ワークステーション、メインフレームコンピュータ等として構成される。ホスト１０は、例えば、アプリケーションプログラム１１と、通信ネットワークCN１を介して記憶制御装置１００にアクセスするためのHBA（Host Bus Adapter）１２とを備えている。
【００５３】
通信ネットワークCN１としては、例えば、LAN（Local Area Network）、SAN（Storage Area Network）、インターネット、専用回線、公衆回線等を、場合に応じて適宜用いることができる。通信ネットワーク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２を介してデータの入出力を行うことができる。
【００６５】
なお、記憶制御装置１００の構成は図３に示すものに限定されない。例えば、ホスト１０との通信を担当するチャネルアダプタと、ディスクドライブ３１０との通信を担当するディスクアダプタと、キャッシュメモリと、共有メモリと、接続制御部とを備えて構成することもできる。接続制御部とは、チャネルアダプタ及びディスクアダプタを、キャッシュメモリ及び共有メモリにそれぞれ接続させるための回路である。また、記憶制御装置１００は、コントローラ２００を１台のみ備える構成でもよい。
【００６６】
図４は、冗長記憶領域の構成を示す説明図である。例えば、４個のディスクドライブ３１０で一つのパリティグループ３１２を構成することができる。パリティグループ３１２は、各ディスクドライブ３１０の有する物理的な記憶領域の集合体であり、物理的な記憶デバイスである。このパリティグループ３１２には、一つまたは複数の論理ボリューム３１３を設けることができる。論理ボリューム３１３は、物理的な記憶領域を仮想化して形成されたもので、論理的な記憶デバイスである。
【００６７】
ホスト１０は、論理ボリューム３１３を指定してデータの読み書きを行う。ホスト１０からのライトコマンドやリードコマンドには、アクセス対象の論理ボリュームを特定するための情報と、データの読出し先アドレスまたは書込み先アドレスを示す論理アドレス（LBA：Logical Block Address）等が含まれている。
【００６８】
パリティグループ３１２がRAID５の構成を備えている場合、コントローラ２００は、ライトデータを分割して複数のディスクドライブ３１０（データディスク）にそれぞれ書き込む。また、コントローラ２００は、算出されたパリティを一つのディスクドライブ３１０（パリティディスク）に書き込む。パリティは、各ディスクドライブ３１０に順番に記憶されていく。パリティを用いてデータを管理するため、いずれか一つのディスクドライブ３１０に障害が発生した場合でも、パリティグループ３１２内の他のディスクドライブ３１０から読み出したデータ及びパリティに基づいて、障害の発生したディスクドライブ３１０の記憶内容を復元させることができる。
【００６９】
図５は、差分ビットマップＴ１の構成を模式的に示す説明図である。差分ビットマップＴ１は、パリティグループ３１２内の各論理ボリューム３１３について、差分を管理するためのものである。差分とは、所定の基準時における記憶内容と最新の記憶内容との差分を意味する。所定の基準時とは、差分管理の開始時である。
【００７０】
差分ビットマップＴ１は、例えば、キャッシュメモリ２５０内に構築される。これに限らず、差分ビットマップＴ１をフラッシュメモリ２７０内に設けてもよい。あるいは、特定の論理ボリューム３１３内に差分ビットマップＴ１を設ける構成でもよい。
【００７１】
差分ビットマップＴ１は、論理ボリューム３１３内のどの箇所が更新されたかの情報を管理する。差分ビットマップＴ１は、例えば、ブロック単位やトラック単位等のような所定の管理単位毎に、更新の有無を示す更新フラグを設定する。更新フラグの設定された管理単位は、更新されたことを意味する。図５中では、更新箇所を黒い四角形で示す。
【００７２】
図６は、パリティグループ３１２を管理するためのテーブルＴ２の一例を示す説明図である。このパリティグループ管理テーブルＴ２は、例えば、フラッシュメモリ２７０内に設けることができる。パリティグループＴ２は、例えば、パリティグループ番号と、RAIDレベルと、空き容量と、合計サイズと、論理ボリューム番号（ＬＵ＃）と、ドライブリストとを対応付けることにより、構成される。例えば、アクセス制御情報やドライブ種別等のような項目を追加することもできる。
【００７３】
パリティグループ番号とは、記憶制御装置１００内において、各パリティグループ３１２をそれぞれ識別するための情報である。RAIDレベルとは、RAID１〜RAID６等のようなRAIDの種類を示す情報である。空き容量とは、パリティグループ内の未使用の記憶領域の大きさを示す情報である。論理ボリューム番号とは、記憶制御装置１００内において、各論理ボリューム３１３をそれぞれ識別するための情報である。ドライブリストとは、記憶制御装置１００内において、パリティグループ３１２を構成するディスクドライブ３１０をそれぞれ識別するための情報である。このように構成されるパリティグループ管理テーブルＴ２を用いることにより、どの論理ボリューム３１３がどのディスクドライブ３１０から構成されているか等を調べることができる。
【００７４】
図７は、各ディスクドライブ３１０に生じたエラーを管理するためのテーブルの一例を示す説明図である。このエラー管理テーブルＴ３は、例えば、フラッシュメモリ２７０内に設けることができる。エラー管理テーブルＴ３は、各ディスクドライブ３１０毎に、予め設定されている複数種類のエラーの発生頻度を管理する。
【００７５】
エラー管理テーブルＴ３は、例えば、ドライブ番号と、エラー検出回数とを対応付けることにより構成される。エラー検出回数は、各エラータイプ毎に、エラーの発生回数が記憶される。ドライブ番号とは、記憶制御装置１００内において、各ディスクドライブ３１０をそれぞれ識別するための情報である。このように構成されるエラー管理テーブルＴ３を用いることにより、どのディスクドライブ３１０において、どのような種類のエラーがどれだけ発生しているのかを調べることができる。
【００７６】
なお、エラー管理テーブルＴ３では、障害発生の予兆となるようなエラーの発生を管理する。障害とは、データの読み書きが不能となる状態を意味する。エラー管理テーブルＴ３は、障害の発生を管理することもできるが、障害発生の予兆となるエラーの発生を管理している。従って、後述のように、閾値以上のエラーが発生して、エラードライブであると判定された場合でも、そのディスクドライブ３１０に対してデータを全く読み書きできなくなるわけではない。
【００７７】
図７の下側には、閾値管理テーブルＴ４が示されている。閾値管理テーブルＴ４は、例えば、フラッシュメモリ２７０内に設けることができる。閾値管理テーブルＴ４は、例えば、各エラータイプ毎に予め設定された閾値をそれぞれ管理する。コントローラ２００は、各エラータイプのうちいずれか一つのエラータイプのエラーが、その閾値に達した場合、ディスクドライブ３１０にエラーが発生したものと判断する。
【００７８】
図６は、記憶制御装置１００の障害回復方法の全体の流れを示す説明図である。動作の詳細は別のフローチャートと共に詳述する。まず、コントローラ２００は、エラー発生回数が閾値に達したディスクドライブ３１０を検出する（Ｓ１）。上述のように、各ディスクドライブ３１０は、複数のエラータイプのそれぞれについてエラー発生回数がそれぞれ監視されている。なお、以下の説明では、閾値以上のエラー発生回数が検出されたディスクドライブ３１０を、便宜上、エラードライブと呼ぶ場合がある。
【００７９】
コントローラ２００は、エラードライブが検出されると、このエラードライブの再起動を決定する（Ｓ２）。そして、コントローラ２００は、エラードライブの属するパリティグループ３１２について差分管理を開始する（Ｓ３）。この差分管理には、上述の差分ビットマップＴ１が使用される。
【００８０】
コントローラ２００は、差分管理を開始した後、エラードライブを再起動させる。例えば、コントローラ２００は、エラードライブの電源をオフにし（Ｓ４）、その後、エラードライブの電源をオンにする（Ｓ５）。これにより、エラードライブの制御回路３１１は、ファームウェアを再び読み込んで起動する。なお、電源のオンオフによってエラードライブを再起動させる場合を述べたが、これに限らず、電源をオンオフさせずに制御回路３１１をリセットする構成でもよい。
【００８１】
次に、コントローラ２００は、再起動されたドライブが正常に動作するか否かを確認する（Ｓ６）。正常に動作する場合、このディスクドライブ３１０は、もはや「エラードライブ」ではないため、ここでは、「再起動されたドライブ」と呼ぶ。コントローラ２００は、再起動されたドライブが正常に動作することを確認した後、Ｓ３で開始した差分管理を終了させる（Ｓ７）。
【００８２】
最後に、コントローラ２００は、差分ビットマップＴ１に管理されている差分を、再起動されたドライブに反映させる（Ｓ８）。より具体的に説明する。エラードライブが再起動するまでには数十秒程度の時間を必要とする。この再起動期間内に、エラードライブの属するパリティグループ３１２に関してホスト１０からライトコマンドが発行された場合、再起動中のエラードライブにライトデータを書き込むことはできない。そこで、本実施例では、再起動期間内に発生した更新部分を差分ビットマップＴ１で管理する。
【００８３】
そして、コントローラ２００は、再起動の完了後に、パリティグループ３１２内の他のディスクドライブ３１０に記憶されているデータ及びパリティに基づいて、再起動されたディスクドライブ３１０に記憶されるべきデータを復元する。コントローラ２００は、復元されたデータを、再起動されたドライブに書き込む。再起動期間内（正確には、差分管理期間内）に生じた差分データを再起動されたドライブに書き込むことを、「再起動されたドライブへの差分データの反映」と表現する場合がある。
【００８４】
ここで、留意すべき点は、全データを復元して、再起動されたドライブに書き込むのではなく、差分データのみを復元して、再起動されたドライブに書き込む点である。従って、再起動されたドライブがパリティグループ３１２に復帰するまでの時間を大幅に短縮することができ、障害からの回復に要する時間を短くすることができる。
【００８５】
図９は、ホスト１０から発行されたライトコマンドを処理する場合のフローチャートを示す。なお、以下に述べる各フローチャートは、処理の概要を示しており、実際のプログラムとは相違する場合がある。本処理は、コントローラ２００によって実行される。
【００８６】
コントローラ２００は、ホスト１０から発行されたライトコマンドを、上位通信部２３０を介して受信する（Ｓ１０）。コントローラ２００は、ライトコマンドを解析することにより、書込み先の論理ボリューム３１３を特定し（Ｓ１１）、ホスト１０から受信したライトデータをキャッシュメモリ２５０に記憶させる（Ｓ１２）。
【００８７】
そして、コントローラ２００は、ライトコマンドの処理が完了した旨をホスト１０に報告する（Ｓ１３）。即ち、コントローラ２００は、書込み先の論理ボリューム３１３を構成する各ディスクドライブ３１０にライトデータを書き込むよりも前に、ホスト１０にライトコマンドの処理完了を報告することができる。これにより、ホスト１０はライトコマンドの処理から早期に解放される。
【００８８】
コントローラ２００は、書込み先の論理ボリューム３１３の属するパリティグループ３１２内に、電源がオフされているディスクドライブ３１０が存在するか否かを判定する（Ｓ１４）。
【００８９】
電源がオフされているディスクドライブ３１０が存在する場合（S14:YES）、コントローラ２００は、Ｓ１２で記憶させたライトデータに対応する箇所を差分ビットマップＴ１に記憶させる（Ｓ１５）。コントローラ２００は、パリティグループ３１２内で正常に動作している他のディスクドライブ３１０に、ライトデータ及びパリティ（以下、データ等と呼ぶ場合がある）をそれぞれ書き込む（Ｓ１６）。
【００９０】
コントローラ２００は、電源がオフされていない正常な各ディスクドライブ３１０からの通知に基づいて、正常な各ディスクドライブ３１０にデータ等が正常に書き込まれたか否かを判定する（Ｓ１７）。書込みが正常に終了した場合（S17:YES）、コントローラ２００は、本処理を終了する。正常な各ディスクドライブ３１０への書込みが失敗した場合（S17:NO）、コントローラ２００は、エラー処理を行う（Ｓ１８）。このエラー処理では、二重障害が発生した旨を管理者やユーザに通知する。
【００９１】
二重障害とは、一つのパリティグループ３１２内において、複数のディスクドライブ３１０への書込みに失敗した場合である。Ｓ１７で「NO」と判定される場合とは、一つのディスクドライブ（エラードライブ）３１０は電源がオフされており（S14:YES）、かつ、他の一つのディスクドライブ３１０に何らかの原因によってデータ等を書き込むことができなかった場合である。そこで、コントローラ２００は、二重障害の発生を管理端末２０やホスト１０に通知する。
【００９２】
閾値以上のエラーが検出された場合、上述のＳ１５〜Ｓ１７のステップが実行され、再起動中のディスクドライブ３１０の属するパリティグループ３１２について、差分データが管理される（Ｓ１５）。
【００９３】
一方、書込み先の論理ボリューム３１３の属するパリティグループ３１２内に、電源のオフされているディスクドライブ３１０が存在しない場合（S14:NO）、コントローラ２００は、通常のライト処理を実行する（Ｓ１９）。即ち、コントローラ２００は、書込み先の論理ボリューム３１３を構成する各ディスクドライブ３１０に、データ等を書込み（Ｓ２０）、正常に書込みが完了したか否かを判定する（Ｓ２１）。各ディスクドライブ３１０への書込みがそれぞれ正常に行われた場合（S21:YES）、コントローラ２００は、本処理を終了する。これに対し、各ディスクドライブ３１０のうちいずれかのディスクドライブ３１０で、エラーが発生して、正常な書込みが行われなかった場合（S20:NO）、コントローラ２００は、エラー管理テーブルＴ３を更新させる（Ｓ２１）。このように、通常のライト処理では、ディスクドライブ３１０へデータ等を書き込む際に、エラーの有無を監視し、その監視結果をエラー管理テーブルＴ３に記憶させる。
【００９４】
図１０は、リードコマンドを処理する場合のフローチャートを示す。コントローラ２００は、ホスト１０からリードコマンドを受信すると（Ｓ３０）、読出し先の論理ボリューム３１３を特定する（Ｓ３１）。
【００９５】
コントローラ２００は、ホスト１０から要求されたデータがキャッシュメモリ２５０に記憶されているか否かを判定する（Ｓ３２）。ホスト１０から要求されたデータがキャッシュメモリ２５０に記憶されている場合（S32:YES）、コントローラ２００は、そのデータをキャッシュメモリ２５０から読み出して、ホスト１０に送信する（Ｓ３３）。
【００９６】
ホスト１０から要求されたデータがキャッシュメモリ２５０に記憶されていない場合（S32:NO）、コントローラ２００は、読出し先の論理ボリューム３１３の属するパリティグループ３１２内に、電源のオフされているディスクドライブ３１０が存在するか否かを判定する（Ｓ３４）。
【００９７】
電源のオフされているディスクドライブ３１０が存在する場合（S34:YES）とは、即ち、エラーを解消するために再起動中のディスクドライブ３１０が存在する場合である。コントローラ２００は、パリティグループ３１２内の正常な各ディスクドライブ３１０からデータ等を読み出し、コレクションコピーによって、ホスト１０から要求されたデータを復元させる（Ｓ３５）。コントローラ２００は、復元されたデータをキャッシュメモリ２５０に記憶させた後（Ｓ３６）、このデータをホスト１０に送信する（Ｓ３７）。つまり、読出し先の論理ボリューム３１３の属するパリティグループ３１２内に、再起動中のディスクドライブ３１０が含まれている場合は、ホスト１０から要求されたデータをコレクションコピーによって生成する。
【００９８】
読出し先の論理ボリューム３１３の属するパリティグループ３１２内に、電源のオフされているディスクドライブ３１０が存在しない場合（S34:NO）、コントローラ２００は、通常のリード処理を行う。即ち、コントローラ２００は、そのパリティグループ３１２内の各ディスクドライブ３１０からデータをそれぞれ読出す（Ｓ３８）。コントローラ２００は、各ディスクドライブ３１０から読み出したデータを合体させてキャッシュメモリ２５０に記憶させた後（Ｓ３９）、このデータをホスト１０に送信する（Ｓ４０）。
【００９９】
図１１は、エラードライブを検出する処理を示すフローチャートである。コントローラ２００は、エラー管理テーブルＴ３を参照し（Ｓ５０）、エラーの検出回数が所定の閾値に達しているディスクドライブ３１０が存在するか否かを判定する（Ｓ５１）。
【０１００】
コントローラ２００は、エラー発生回数が閾値以上のディスクドライブ３１０を発見すると（S51:YES）、そのディスクドライブ（エラードライブとも呼ぶ）３１０を再起動させるための処理を起動させる（Ｓ５２）。
【０１０１】
図１２は、エラードライブを再起動させるための処理を示すフローチャートである。まず、コントローラ２００は、再起動対象のエラードライブを再起動させる前に、そのエラードライブの属するパリティグループ３１２内に、電源のオフにされているディスクドライブ３１０が存在するか否かを判定する（Ｓ６０）。
【０１０２】
もしも、いずれかのディスクドライブ３１０の電源が先にオフにされている場合、エラードライブの再起動を行うと、上述した二重障害が発生するためである。従って、既にいずれかのディスクドライブ３１０の電源が既にオフされている場合（S60:YES）、コントローラ２００は、エラードライブを再起動させずに、本処理を終了させる。
【０１０３】
上述の通り、エラードライブであると判定された場合でも、エラードライブに対するデータの読み書きが直ちにできなくなるわけではない。従って、先に電源がオフにされているディスクドライブ３１０が正常に起動するまで待ってから、エラードライブを再起動させればよい。換言すれば、Ｓ６０を設けることにより、同一のパリティグループ３１２内に複数のエラードライブ（障害発生の予兆が検出されたディスクドライブ）が存在する場合に、順番にエラードライブを再起動させることができる。
【０１０４】
エラードライブの属するパリティグループ３１２内に、電源のオフされているディスクドライブ３１０が存在しない場合（S60:NO）、コントローラ２００は、エラードライブに関する差分管理を開始させる（Ｓ６１）。即ち、コントローラ２００は、エラードライブの属するパリティグループ３１２について、ホスト１０により更新された箇所を差分ビットマップＴ１で管理する。
【０１０５】
差分管理を開始させてから、コントローラ２００は、エラードライブの電源をオフに設定する（Ｓ６２）。続いて、コントローラ２００は、エラードライブの電源をオンに変更させる（Ｓ６３）。これにより、エラードライブは再起動する。
【０１０６】
そして、コントローラ２００は、エラードライブが正常に起動したか否かを判定する（Ｓ６４）。例えば、コントローラ２００は、再起動されたディスクドライブ（再起動前のエラードライブである）からの状態通知に基づいて、正常に起動したか否かを判定することができる。あるいは、コントローラ２００は、再起動されたディスクドライブにテストデータを読み書きすることにより、正常に動作しているか否かを判定可能である。
【０１０７】
再起動されたディスクドライブが正常状態である場合（S64:YES）、コントローラ２００は、差分管理を停止させる（Ｓ６５）。そして、コントローラ２００は、差分管理されたデータを、パリティグループ３１２内の正常な各ディスクドライブ３１０から読み出されたデータ及びパリティに基づいて復元する。コントローラ２００は、この復元された差分データを、再起動されたディスクドライブ３１０に書き込む（Ｓ６６）。差分データが全て書き込まれると、その再起動されたディスクドライブ３１０の記憶内容は最新の状態となる。この後、再起動されたディスクドライブ３１０は、パリティグループ３１２に復帰する。
【０１０８】
これに対し、エラードライブを再起動させても正常状態にならない場合（S64:NO）、コントローラ２００は、エラードライブの閉塞処理を実行する（Ｓ６７）。閉塞処理とは、エラードライブへのアクセスを禁止し、エラードライブを記憶部３００から切り離して、エラードライブの電源を停止させる処理である。
【０１０９】
次に、コントローラ２００は、記憶部３００内に未使用のスペアドライブが存在するか否かを検索する（Ｓ６８）。スペアドライブとは、予備のディスクドライブ３１０を意味する。コントローラ２００は、エラードライブと同一以上の記憶容量を有するスペアドライブを検索する。
【０１１０】
未使用のスペアドライブが発見された場合（S69:YES）、コントローラ２００は、そのスペアドライブをエラードライブの代わりとして選択し、コレクションコピーによって、エラードライブに記憶されるべきデータをスペアドライブに記憶させる（Ｓ７０）。即ち、コントローラ２００は、エラードライブの属するパリティグループ３１２内の正常な各ディスクドライブ３１０から全てのデータ及びパリティを読み出して、エラードライブに記憶されるべきデータを復元し、この復元されたデータをスペアドライブに書き込む。
【０１１１】
全てのデータがスペアドライブに書き込まれた後、コントローラ２００は、そのスペアドライブをエラードライブの代わりとして使用する（Ｓ７１）。即ち、スペアドライブのドライブのドライブ番号とエラードライブのドライブ番号とを入れ替えることにより、スペアドライブは、パリティグループ３１２に参加する。
【０１１２】
未使用のスペアドライブを発見できなかった場合（S69:NO）、コントローラ２００は、エラー処理を行う（Ｓ７２）。このエラー処理では、例えば、回復不能なドライブ障害が発生している旨のメッセージや、スペアドライブが不足している旨のメッセージ等を、管理端末２０やホスト１０に送信する。
【０１１３】
このように構成される本実施例では、以下の効果を奏する。本実施例では、ディスクドライブ３１０に障害発生または障害発生の予兆を示すエラーが検出された場合に、そのディスクドライブ３１０（エラードライブ）を直ちに障害ドライブとして扱うのではなく、そのエラードライブをいったん再起動させる構成とした。従って、例えば、ディスクドライブ３１０のファームウェアがハングアップ等しているだけの場合は、ディスクドライブ３１０の再起動によってエラーを解消させることができる。従って、障害として取り扱われる件数を低減させることができる。即ち、本実施例では、記憶制御装置１００内において、エラーの解消を試みることにより、障害発生件数を低減して信頼性や使い勝手を向上させる。
【０１１４】
本実施例では、エラードライブを再起動させる場合に差分管理を行い、再起動されたディスクドライブ３１０に差分データのみを書き込む構成とした。従って、再起動されたディスクドライブ３１０の記憶内容を速やかに最新状態にすることができ、障害の回復に要する時間を短くして、使い勝手を高めることができる。さらに、障害回復時間を短くできるため、コレクションコピーによって記憶制御装置１００の負荷が増大するのを抑制することができる。
【０１１５】
本実施例では、上述のように、記憶制御装置１００内でディスクドライブを再起動させることにより、記憶制御装置１００の外部から認識される障害の発生件数を低減させることができる。従って、スペアドライブの使用数を低減させることができる。これにより、記憶制御装置１００に予め多数のスペアドライブを搭載しておく必要がなく、記憶制御装置１００の導入コストや運用コストを低減させることができる。
【０１１６】
特に、記憶制御装置１００において、ユーザによるディスクドライブ３１０の交換や追加が禁止されている場合も考えられるが、この場合は、全てのスペアドライブを使い切ってしまうと、それ以後に生じるドライブ障害に対応できない。即ち、スペアドライブを全て使い終わった時が、記憶制御装置１００の寿命となる。このような場合でも、本実施例では、障害発生件数を低減して、スペアドライブの消費量を節約することができるため、記憶制御装置１００の寿命を長くすることができる。
【０１１７】
本実施例では、エラードライブを再起動させる前に差分管理を開始し、エラードライブが正常に動作することを確認した後で差分管理を停止させる。これにより、再起動期間中のデータの消失を防止することができ、信頼性を維持することができる。
【０１１８】
なお、本発明は、上述した各実施例に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。
【図面の簡単な説明】
【０１１９】
【図１】本発明の全体概念を模式的に示す説明図である。
【図２】記憶制御装置の正面を模式的に示す説明図である。
【図３】記憶制御装置のハードウェア構成を示すブロック図である。
【図４】ディスクドライブとパリティグループ及び論理ボリュームの関係を模式的に示す示す説明図である。
【図５】差分ビットマップによって差分を管理する様子を示す説明図である。
【図６】パリティグループを管理するテーブルの構成を示す説明図である。
【図７】エラーを管理するテーブル及び各エラータイプ毎の閾値を管理するテーブルをそれぞれ示す説明図である。
【図８】障害回復方法の全体の流れを示す説明図である。
【図９】ライト処理を示すフローチャートである。
【図１０】リード処理を示すフローチャートである。
【図１１】エラードライブを検出する処理を示すフローチャートである。
【図１２】エラードライブを再起動させる処理を示すフローチャートである。
【符号の説明】
【０１２０】
１…記憶制御装置、２…コントローラ、２Ａ…コマンド処理部、２Ｂ…エラー管理部、２Ｃ…ドライブ再起動制御部、２Ｄ…差分管理部、２Ｅ…差分ビットマップ、３…記憶部、３Ａ…ディスクドライブ、３Ｂ…パリティグループ、４…ホスト、１０…ホスト、１１…アプリケーションプログラム、２０…管理端末、２１…ストレージ管理部、１００…記憶制御装置、１０１…筐体、１１０…LANポート、２００…コントローラ、２１０…制御部、２２０…データ処理回路、２３０…上位通信部、２４０…下位通信部、２５０…キャッシュメモリ、２６０…システムメモリ、２７０…フラッシュメモリ、３００…記憶部、３１０…ディスクドライブ、３１１…制御回路、３１２…パリティグループ、３１３…論理ボリューム、Ｔ１…差分ビットマップ、Ｔ２…パリティグループ管理テーブル、Ｔ３…エラー管理テーブル、Ｔ４…閾値管理テーブル
【図１】
2008052547.tif 000003
【図２】
2008052547.tif 000004
【図３】
2008052547.tif 000005
【図４】
2008052547.tif 000006
【図５】
2008052547.tif 000007
【図６】
2008052547.tif 000008
【図７】
2008052547.tif 000009
【図８】
2008052547.tif 000010
【図９】
2008052547.tif 000011
【図１０】
2008052547.tif 000012
【図１１】
2008052547.tif 000013
【図１２】
2008052547.tif 000014