(57)【特許請求の範囲】
【請求項１】
ホストプロセッサからの入出力要求を処理する複数のディスク記憶装置を有し、複数のデータとそれらに対する誤り訂正データとからそれぞれなる複数の誤り訂正データグループを上記複数のディスク記憶装置に記憶し、いずれかのディスク記憶装置に障害が発生したときには、当該障害が発生したディスク記憶装置以外の他の複数のディスク記憶装置に保持された複数のデータおよび誤り訂正符号とに基づいて上記障害が発生したディスク記憶装置に格納されたデータを回復し、回復されたデータを上記障害が発生したディスク記憶装置に代えて使用する正常なディスク記憶装置に記憶するディスクアレイにおいて、
複数のディスク記憶装置に横断的に存在する、該ホストプロセッサの領域管理単位として定義された論理的な領域である複数のボリウムに対応して、該ボリウムに保持されたデータに対する外部装置からの入出力要求の発生数を計測し、上記複数のディスク記憶装置のいずれか一つに障害が発生したとき、そのディスク記憶装置の上記複数のボリウムに対してそれまでに計測された上記入出力要求の発生数に基づいて、それらのボリウムを順次選択し、上記障害が発生したディスク記憶装置に保持されたデータを、上記複数のボリウムの各々に属するデータに区分して、かつ、それらのボリウムが選択される順に従って順次回復するディスクアレイにおけるデータ回復方法。
【請求項２】
上記ボリウムの選択は、各ボリウムに対する入出力要求の発生頻度に依存して行う請求項１記載のディスクアレイにおけるデータ回復方法。
【請求項３】
上記各ボリウムに対する入出力要求の発生頻度は、各ボリウムに対して発生した入出力要求の総数とそのボリウムの経過時間との比である請求項２記載のディスクアレイにおけるデータ回復方法。
【請求項４】
各ボリウムの前記経過時間は、前記ディスクアレイの電源投入後そのボリウムに対する最初の入出力要求が外部装置から発行されてから上記一つのドライブに障害が発生するまでの経過時間である請求項３記載のディスクアレイにおけるデータ回復方法。
【請求項５】
上記ディスクアレイは外部装置から要求され、上記複数のディスク記憶装置のいずれかから読み出されたデータおよび上記外部装置から要求され、当該外部装置から供給された上記複数のディスク記憶装置に書き込むべきデータとを一時的に保持するディスクキャッシュを有し、上記各ボリウムに対する入出力要求の発生数の計測に当たっては、そのボリウムに対して発生した入力要求の内、上記ディスクキャッシュにヒットした入力要求は計測しない請求項１から４のいずれか一つに記載のディスクアレイにおけるデータ回復方法。
【請求項６】
上記障害が発生したドライブのいずれかの部分データを回復中に外部装置から上記障害が発生したドライブに保持されたいずれかのデータに対する入出力要求が発行されたときに、その入出力要求が指定するデータが上記交代用のディスク記憶装置に回復済みであるか否かを判別し、その指定されたデータが回復済みであるときには、上記交代用のディスク記憶装置に対して上記入出力要求を実行し、その指定されたデータが回復済みでないときには、その指定されたデータが属する部分のデータの全体が回復されるのを待たないで、その指定されたデータを上記障害が発生したディスク記憶装置以外の他の複数のディスク記憶装置に保持された複数のデータおよび誤り訂正符号とに基づいて回復するステップをさらに有する請求項１から５のいずれか一つに記載のディスクアレイにおけるデータ回復方法。
【請求項７】
上記計測では、前記複数のディスク記憶装置により構成される記憶領域をそれぞれ上記複数のディスク記憶装置の各々に属する部分を有するように分割して得られる、複数の横断的なボリウムの各々に対して、その横断的なボリウムに保持されたデータに対する外部装置からの入出力要求の発生数を計測し、上記障害が発生したディスク記憶装置の記憶領域の内、各横断的なボリウムに属するボリウムに対する入出力要求の発生数として、その横断的なボリウムに対して計測された入出力要求の発生数に比例する値を使用する請求項１から６のいずれか一つに記載のディスクアレイにおけるデータ回復方法。
【請求項８】
上記少なくとも一つのボリウムは更に複数のディスク記憶装置に横断的に分割された複数の部分領域を有し、上記入出力要求の発生数は該部分領域に対応して計測され、該部分領域に対する入出力要求の頻度に基いてデータ回復の順序を決める請求項１記載のディスクアレイにおけるデータ回復方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はディスクアレイの障害が発生したディスク記憶装置に保持されたデータを回復する方法に関する。
【０００２】
【従来の技術】
計算機のデータを記憶する装置として、コストパフォーマンスが高い磁気ディスク記憶装置が一般的に使用される。磁気ディスクは２．５インチや３．５インチ程度の複数の磁気円盤と、各磁気円盤の両面に設けられた磁気ヘッドとを有し、後者によりデータが読み書きされる。磁気ディスク記憶装置の容量を増加するためには、磁気円盤の枚数を増やす方法と、各磁気円盤の記録密度を増加させる方法とがある。この２つの大容量化方法の相乗効果により、単体磁気ディスク記憶装置の容量は飛躍的に増加している。
【０００３】
しかし、磁気ヘッドの移動や磁気円盤の回転はメカ的な動作であり、磁気ディスク記憶装置の性能の伸びは容量の伸びほど大きくない。この性能を高めるために、複数の磁気ディスク記憶装置を並列に動作させるディスクアレイと呼ばれる技術がある。ディスクアレイは、複数の磁気ディスク記憶装置に対し並列にデータを読み書きすることで性能を向上させることができる。例えば、単体磁気ディスク記憶装置のデータ転送性能が４Ｍバイト／秒の場合、４台の磁気ディスク記憶装置から並列にデータを読み書きすることで１６Ｍバイト／秒の転送性能を得ることができる。
【０００４】
また、ディスクアレイのもう一つの特徴は、単体磁気ディスク記憶装置よりも高い信頼性である。複数の磁気ディスク記憶装置を並列に動作させることで性能を向上させるが、それだけでは信頼性が低下してしまう欠点がある。つまり、単一のデータを複数の磁気ディスク記憶装置に格納しているため、磁気ディスク記憶装置のいずれかが障害を起こしただけで、データに欠損が生じてしまう。そこでディスクアレイではデータの格納時に誤り訂正符号と呼ばれる冗長データを磁気ディスク記憶装置のいずれかに格納する。誤り訂正符号として多くの場合にパリティが使用される。パリティを保持することで、磁気ディスク記憶装置のいずれかに障害が発生しても、欠損したデータ部分を回復することができる。例えば、４台の磁気ディスク記憶装置１，２，３，４のそれぞれに、次のような２進数のデータが格納されているとする。
【０００５】
【数１】
磁気ディスク記憶装置１＝（１００１  １１００  １０１０  ０００１）
磁気ディスク記憶装置２＝（１１１１  ０１００  １０１１  １０００）
磁気ディスク記憶装置３＝（０１０１  １０００  １１１０  １１１１）（１）
磁気ディスク記憶装置４＝（１１１０  １００１  ０１１０  ００１１）
パリティは、異なるディスク上の対応する４つのビットの排他的論理和を算出することで得られる。例えば、上の例では以下のパリティが得られる。
【０００６】
【数２】
磁気ディスク記憶装置５＝（１１０１  １００１  １００１０１０１）  （２）
このように異なる磁気ディスク記憶装置に記憶され誤り訂正符号を作るのに使用されるデータおよび生成された誤り訂正符号とのグループを誤り訂正データグループという。誤り訂正符号がパリティであるときには、そのグループはパリティグループと呼ばれる。例えば、上記の例では、ディスク記憶装置１から５上の同じアドレスのデータが同一のパリティグループに属することになる。例えば磁気ディスク記憶装置３が障害を起こした場合は、以下のように磁気ディスク記憶装置１，２，４という３台のディスク記憶装置上のそれぞれデータと磁気ディスク記憶装置５に保持されたパリティとの排他的論理和を演算することにより、その障害を起こした磁気ディスク記憶装置３に記憶されていたデータを回復できる。
【０００７】
ディスクアレイの障害回復方法としては、特開平７−１５２４９５には、ディスク記憶装置（以下、ドライブと呼ぶ）に障害状況の統計値を保持しておき、完全な障害が起こる前にドライブ交換を行うことでスペアドライブを不要にする方法も述べられている。しかし、通常はいずれかのドライブに障害が発生してから障害ドライブが正常なドライブに交換されている。
【０００８】
一般に障害の管理単位は、ドライブである。障害が発生したドライブを正常なドライブにより交換した後、その障害が発生したドライブに記録されていたデータが他の複数のドライブに保持されているデータから回復される。回復されたデータは、障害が発生したドライブを置換した正常なドライブあるいはディスクアレイに予め設けられたスペアドライブに格納される。障害ドライブのデータの回復は、通常ある領域を単位にして行われる。典型的には、トラック単位に行われる。障害回復プログラムは障害ドライブの複数のトラックのそれぞれに対応して、対応するトラックのデータを回復するためのタスクを発行する。各タスクが実行されると、そのタスクは、他の複数のドライブの対応するトラックからデータおよびパリティを読み出し、それらを用いて回復対象のトラックのデータを回復し、正常なドライブあるいはスペアドライブの対応するトラックに書き込む。異なるトラックに対応するタスクが順次実行されるごとに、それぞれのトラックに対する回復動作が実行される。
【０００９】
通常、一つのドライブは一つの領域として管理され、その領域内のデータが回復される順番は、データのドライブ内アドレスが小さい順である。一つのドライブを複数の領域（ボリウム）に分け、ボリウム別にデータを管理することも行われている。一つのドライブの容量が大きい場合にはこの管理が採用されている。そのドライブ内のデータを回復する場合でも、それぞれのボリウムごとにデータの回復が管理される。このように一つのドライブが複数のボリウムに分かれている場合でも、ドライブ内アドレスが小さいボリウム順にそれらのボリウムのデータが回復されている。
【００１０】
全トラックのデータが回復されていないときにホストからいずれかのドライブに保持されたデータに対する入出力要求が発行されると、データ読み込みプログラムが新たにタスクとして障害回復のための複数のタスクの実行の合間に実行される。そのデータ読み込みプログラムでは、要求されたデータが正常なドライブに保持されている場合には、そのドライブからそのデータが読み出され、ホストに転送される。そのデータが障害が発生したドライブに保持されているときには、ディスクアレイは要求されたデータが回復済みか否か、すなわち、そのデータが属するトラックが既に回復済みか否かを判断する。要求されたデータが回復済みであれば、スペアドライブまたは交換ドライブからそのデータが読み出され、ホストに転送される。しかし、要求されたデータが回復されていない場合は、前述の障害回復処理と同じようにして要求されたデータが回復される。すなわち、障害が発生したドライブを除く複数のドライブから、要求されたデータと同じ誤り訂正グループに属するデータが読み出され、それらのデータに対して排他的論理和演算が行われ、要求されたデータが回復される。そのデータはホストに転送される。
【００１１】
【発明が解決しようとする課題】
このような従来の障害回復方法では、障害の回復が完了していない段階でも、ホストからの入出力要求は実行されるようになっている。しかし、障害が発生したドライブに保持されたデータの内、まだ回復されていないデータを要求する入出力要求の処理時間は、回復済みのデータを要求する入出力要求の処理時間より遅くなる。各ドライブの容量が増加した場合に、そのドライブの回復時間が増大する。このため、上記問題はより顕著に現れる。このことは、ディスクアレイが複数のボリウムに分割されているときでも同じである。
【００１２】
本発明の目的は、障害ドライブのデータを回復中に発生する、障害ドライブに保持されていたデータを要求する入出力要求の処理時間を実効的に短縮するディスクアレイのデータ回復方法を提供することである。
【００１３】
【課題を解決するための手段】
上記問題を解決するために、本発明では、各ディスク記憶装置の複数の部分領域の各々に対応して、その部分領域に保持されたデータに対する外部装置からの入出力要求の発生数を計測し、上記複数のディスク記憶装置のいずれか一つに障害が発生したとき、そのディスク記憶装置の上記複数の部分領域に対してそれまでに計測された上記入出力要求の発生数に基づいて、それらの部分領域を順次選択する。
【００１４】
上記障害が発生したディスク記憶装置に保持されたデータを回復するときには、上記複数の部分領域の各々に属する部分データに区分して、かつ、それらの部分領域が選択される順に従って順次回復する。
【００１５】
これにより、入出力要求の発生頻度が大きい部分領域に属する障害ドライブのデータが優先的に回復される。この結果、これらの入出力要求の処理時間が増大するケースが減少する。
【００１６】
より具体的には、上記計測では、前記複数のディスク記憶装置により構成される記憶領域をそれぞれ上記複数のディスク記憶装置の各々に属する部分を有するように分割して得られる、複数の横断的な部分領域の各々に対して、その横断的な部分領域に保持されたデータに対する外部装置からの入出力要求の発生数を計測し、上記障害が発生したディスク記憶装置の記憶領域の内、各横断的な部分領域に属する部分領域に対する入出力要求の発生数として、その横断的な部分領域に対して計測された入出力要求の発生数に比例する値を使用する。この横断的な部分領域としては、複数のボリウム領域の一つあるいは少なくとも一つのボリウム領域を分割して得られる複数の横断的な部分領域の一つが使用される。
【００１７】
【発明の実施の形態】
以下、本発明に係るディスクアレイ障害回復方法を図面に示したいくつかの実施の形態を参照してさらに詳細に説明する。なお、以下においては、同じ参照番号は同じものもしくは類似のものを表すものとする。また、発明の第２の実施の形態以降においては、発明の第１の実施の形態との相違点を主に説明するに止める。
【００１８】
＜発明の実施の形態１＞図１は、本発明によるディスクアレイ障害回復方法を適用する計算機システムの概略構成図を示したものである。１０１はホストプロセッサ（以下、ホストと呼ぶことがある）であり、１２２はディスクアレイ制御装置である。１１７〜１２１はドライブであり、ディスクアレイ制御装置１２２に接続される。ホスト１０１から入出力要求がディスクアレイ制御装置１２２に発行されると、ディスクアレイ制御装置１２２はその入出力要求を解釈し、ドライブ１１７〜１２１のいずれかに対し入出力動作を行う。ここでは５つのドライブ１１７〜１２１をドライブの例として示すのみであり、これらのドライブの数は適宜変更可能である。ドライブ１２１はスペアドライブである。スペアドライブ１２１には、ドライブ１１７〜１２０のいずれかのドライブが障害を起こし使用できなくなった場合に、障害を起こしたドライブのデータとして回復されたデータが書き込まれ、そのスペアドライブ１２１がその障害が発生したドライブの代わりに使用される。
【００１９】
ディスクアレイ制御装置１２２は、ホスト制御部１０３、制御プロセッサ１０４、メモリ１０５、ドライブ制御部１１２〜１１６、およびこれらを接続するバス１１１から構成される。ホスト制御部１０３はホスト１０１から発行された入出力要求の受け付けや、処理終了をホストへ知らせる制御を行う。ドライブ制御部１１２〜１１６は、ドライブ１１７〜１２１に対応して設けられ、それぞれに対するデータの入出力制御を行う。ホスト制御部１０３とドライブ制御部１１２〜１１６は、制御プロセッサ１０４から起動／終了指示あるいはデータ転送指示が発行されときに動作する。制御プロセッサ１０４の動作は、メモリ１０８内に格納されたプログラムやテーブルにより制御される。
【００２０】
障害管理プログラム１３１は、ドライブでの障害の発生を検出するプログラムで、公知の方法によりドライブでの障害の発生を検出する。例えば、上記読み込みプログラム１０６あるいは書き込みプログラムが発行するディスクアクセスコマンドとそれに対する応答を監視し、そのディスクアクセスコマンドに対する応答がアクセス先のドライブより所定の時間内に転送されて来たか否かを検出する。その応答がその時間内に転送されなかったときいには、ドライブに障害が発生したと判別し、メモリ内に設けられたドライブ管理テーブル（図示せず）にそのドライブでの障害発生を記憶する。障害回復プログラム１０９により障害ドライブのデータが全て回復され、スペアドライブ１２１に書き込まれたときに、スペアドライブを障害ドライブの代わりに使用する正常なドライブとしてそのドライブ管理テーブル（図示せず）に登録する。
【００２１】
障害回復プログラム１０９は、常時起動され、ドライブ１１７〜１２０のいずれかに障害が発生したか否かを上記ドライブ管理テーブル（図示せず）を監視する。もしあるドライブに障害が発生したときには、そのドライブのデータを回復し、スペアドライブ１２１に書き込む。
【００２２】
キャッシュ管理プログラム１３２はキャッシュ領域１０８へのアクセスを制御するプログラムである。キャッシュ領域１０８は、ドライブ１１７〜１２１から読み込まれたデータあるいはホスト１０１から書き込まれたデータを一時的に格納しておく領域である。ホスト１０１から要求され、いずれかのドライブから読み出されたブロックがキャッシュ領域１０８に保持されている状態で、同じデータの読み込みが再度ホスト１０１から要求された場合に、キャッシュ領域１０８からホスト１０１へそのデータを返送する。このことにより、入出力レスポンスを高速化することが可能となる。また、ホスト１０１から転送された書き込みデータは、一時的にこのキャッシュ領域に書き込まれ、その書き込みが完了した時点で、ホスト１０１に書き込み完了が通知され、その通知と並行してその要求されたデータがいずれかのドライブに書き込まれる。
【００２３】
ディスクアレイ読み込みプログラム１０６は、ホスト１０１から発行された入力要求を制御し、ディスクアレイ書き込みプログラム１０７はホスト１０１から発行された出力要求を制御する制御プログラムである。
【００２４】
複数のドライブにより構成される記憶領域は、それらを横断して存在する複数の領域、ここではボリウムに区分されている。頻度テーブル１１０は、各ボリウムごとにそのボリウムに対する入出力要求の発生数およびキャッシュリードヒット回数等の情報を記録する。本実施の形態では、いずれかのドライブに障害が発生した場合に、障害回復プログラム１０９が、その頻度テーブル１１０を参照して、その障害ドライブ内の複数のボリウムのデータを回復する順序を決定するところに特徴がある。
【００２５】
図２に示すように、これらのドライブの互いに対応する位置には、同一誤り訂正データグループ、ここでは具体的にはパリティグループに属するデータあるいはパリティを保持する。各ドライブには、ブロックという一定の大きさのデータを単位として記憶される。図において、各ボリウム内に示された番号０，１，２およびＰ１等は、一つのブロックを示す。図では、ドライブ１１７〜１２０内のブロック０、１，２がデータブロックであり、ブロックＰ１はそれらから生成されたパリティを保持するブロックである。ブロック３，４，５とＰ２も同様である。本実施例ではこれらのドライブはレベルＲＡＩＤ５のディスクアレイを構成するように、ディスクアレイ制御装置１２２が動作する。パリティを保持する複数のブロックＰ１、Ｐ２、Ｐ３、Ｐ４、、、は、これらのドライブに分散して記憶されている。
【００２６】
ホスト１０１は、ドライブ１１７〜１２０の領域を、ボリウム１（２１３）、ボリウム２（２１４）、ボリウム３（２１５）という３つの領域に分割して管理している。ボリウム２１３〜２１５は複数のドライブ１１７〜１２０に横断して定義される領域で、各ボリウムは、それぞれドライブ１１７〜１２０に属する領域を有する。これらの複数のドライブは、同一の誤り訂正データグループに属するデータを保持するドライブであり、論理グループとも呼ばれる。各ボリウムは、ホスト１０１の領域管理単位であり、本実施の形態では、見かけ上３つのドライブがホスト１０１に接続されていることになる。ここのボリウムの数３は一例であり、適宜変更可能である。ホスト１０１はボリウム２１３〜２１５を、異なるアプリケーションプログラム（図示せず）毎に割り当てたり、異なるユーザ毎に割り当てて使用する。それによりホスト１０１による領域管理が簡単になる。また複数のボリウムを使用することにより、アプリケーションプログラムやユーザ間の干渉をなくすことができるため、誤ってデータを上書きするような問題を回避することができる。本実施の形態では各ボリウムの容量は同一と仮定する。
【００２７】
ホスト制御部１０３が入出力コマンドを受け取ると、制御プロセッサ１０４はそのコマンドが入力コマンドであるときには、ディスクアレイ読み込みプログラム１０６を起動し、そのコマンドが出力コマンドであるときには、ディスクアレイ書き込みプログラム１０７を起動する。また、制御プロセッサ１０４は、装置の起動時に障害回復プログラム１０９を起動する。
【００２８】
ホスト１０１からディスクアレイ制御装置１２２に対して発行される入出力要求は、入出力コマンド２００の形でホスト制御部１０３に与えられる。このコマンド内には、入出力対象となるボリウム（２０２）、入出力命令（２０３）、入出力位置（２０４）、入出力長（２０５）が格納されている。図２では、入出力コマンド２００として、ボリウム３（２１３）のブロック２から１ブロック入力（ＲＥＡＤ）するための入力コマンドが示されている。ホスト１０１が発行する他のコマンドは、いずれかのドライブにデータを書き込む出力コマンドである。この出力コマンドの場合には、書き込むべきデータがホスト１０１からホスト制御部１０３に供給される。ホスト１０１は、複数のブロックの入出力を要求することができる。
【００２９】
頻度テーブル１１０は、メモリ１０５上にあらかじめ作成され、適宜更新される。図３において、５０１はボリウム名であり、５０６は、各ボリュームごとに計測を開始した時刻である。計測開始時間５０６は入出力要求の発生頻度を求めるときの時間情報として使用される。５０２は、ホスト１０１より発行された各ボリュームに対するリード要求（入力要求）の数であり、５０３は、ホスト１０１より発行された各ボリュームに対するライト要求（出力要求）の数であり、５０４は、リード要求５０２の内で、キャッシュ領域１０８がヒットしたリード要求の数（ディスクキャッシュリードヒット回数）である。５０５は実効的な要求数である。これらのデータ５０２，５０３，５０４、５０５はキャッシュ管理プログラム１３２により更新される。このように、本実施の形態では、障害ドライブのデータを回復するときの回復順番として、複数のドライブにまたがるボリウムに対する入出力要求の発行数を計測している。これは、障害ドライブに対する入出力要求でなくても、同じボリウムの他のデータに対する入出力要求も、同じ障害ドライブに含まれた同じボリウムのデータの回復と衝突するので、同じボリウムに対する入出力要求の処理がそのボリウムのデータの回復処理の影響を受けるからである。
【００３０】
実効的要求数５０５は、以下の算出式によってキャッシュ管理プログラム１３２により決定される。
【００３１】
【数３】
実効的な要求数５０５＝リード要求数５０２＋ライト要求数５０３−ディスクキャッシュリードヒット回数５０４  （３）
リード要求数５０２とライト要求数５０３の和がホスト１０１からディスクアレイ制御装置１２２に発行されたリード要求、ライト要求の総数である。それらの要求の内で、リード要求に対してキャッシュ領域１０８がヒットしたときには、そのリード要求が要求するブロックはそのキャッシュ領域１０８からホスト１０１に供給されるために、いずれのドライブもアクセスされることはない。したがって、このようなアクセスは、ドライブに対する負荷にはならない。一方、ライト要求に対してキャッシュ領域１０８がヒットしたときには、そのライト要求が要求するブロックはそのキャッシュ領域１０８に一度書き込まれた後に、そのライト要求が指定するドライブに書き込まれる。したがって、キャッシュ領域１０８がヒットしたライト要求はドライブにとって負荷となる。したがって、上記実効的な要求数は、ホスト１０１からの総要求数の内で、ドライブに負荷となる要求の総数を表すことになる。ドライブ障害時に性能の問題が発生するのは、ホストが発行した入出力要求に対してドライブまでアクセスが至った場合であり、ホストのアクセスが局所的でキャッシュ領域１０８にヒットするケースが多い場合は大きな性能劣化にはならない。従って、回復の優先順位による効果をより的確にするために、ディスクキャッシュリードヒットの回数は、優先順位の決定に入れないほうがよい。
【００３２】
計測開始時間５０６は、入出力要求の発生頻度を求めるときの時間情報として使用される。ボリウム毎に計測開始時間を設ける理由は、より正確にアクセス頻度を求めるためである。全ボリウムは必ずしもディスクアレイ制御装置１２２の電源が入ると同時に使用され始めるわけではない。電源が入ってからしばらくして使用され始めるボリウムの場合、電源が入ってから計測を開始すると頻度が小さく見えてしまう。そのため、計測開始の契機としてボリウム毎に、ディスクアレイ制御装置１２２の電源が入ってから初めて入出力要求を受け付けたとき等が適切である。したがって、計測開始時間５０６は、ディスクアレイ読み込みプログラム１０６あるいはディスクアレイ書き込みプログラム１０７により、各ボリウムに対する入出力要求を最初に処理するときにセットされる。なお、ディスクアレイ制御装置１２２の電源が入ると同時に全てのボリウムが使用される場合には、ディスクアレイ制御装置１２２の電源が入れられたと同時に計測を開始する方法も考えられる。この場合には、初期化プログラムが電源オン時にこの計測開始時間５０６をセットすればよい。
【００３３】
ボリウム回復済みフラグ５０７は、障害ドライブ内の、各ボリウムのデータが回復済みであるか否かを示すフラグである。さらに、トラック回復済みフラグ５０８は、回復が未済みのボリウムの中で各トラックが回復済みであるか否かを示すフラグである。以下に説明するように、障害ドライブ内のあるボリウムのデータを回復するときに、各回復処理実行単位領域、具体的には各トラックのデータを回復する処理が順次異なるトラックに対して実行される。フラグ５０７，５０８は障害回復プログラム１０９により更新される。
【００３４】
以下に説明するように、本実施の形態では障害が発生したドライブ内のデータの回復順序を、それらのデータに対するそれまでの入出力要求の発生数、より具体的には入出力要求の発生頻度に基づいて決める。すなわち、入出力要求の発生頻度が高かったデータを先に回復する。このためには、頻度テーブルとしては、本来的には、各ボリウムに対する入出力要求の発生数等の情報を、各ボリウム別、各ドライブ別に計測することが望ましいし、そのようにすることが可能である。
【００３５】
しかし、一般には、同じボリウム内のデータに対する入出力要求の発生数等の情報はドライブによっては大きくは変わらないことが期待される。すなわち、あるボリウムのあるデータに対する入出力要求が多いときには、一般にはそのデータの近傍のデータに対する入出力要求も多いことになる。その結果、同じボリウムに属するデータに対する入出力要求の発生数は、ドライブによっては大きくは異ならないことが予想される。したがって、本実施の形態では、頻度テーブル１１０にて管理するデータを少なくするための一つの方法として、各ボリウムに対する入出力要求等の情報を計測し、そのボリウムのデータを保持する複数のドライブに対する入出力要求の発生数は、こうして計測された入出力要求の発生数に比例していると仮定し、後に説明する、データの回復順を決定するときには、あるボリウムに対してこうして計測された発生数を、そのボリウムに属する、障害が発生したドライブに保持されていたデータに対するそれまでの入出力要求の発生数として使用する。同様に、他の情報、例えば、計測開始時間もドライブに依らないで同じであるとして、同一のボリウムに対して計測されたデータを使用する。
【００３６】
図４は、障害回復プログラム１０９のフローを示している。本処理は、ホストから要求される入出力要求の処理とは独立に実行される。実行の契機は、前述の通り、障害管理プログラム１３１によりドライブの障害が検知された時である。ステップ６０１では、ドライブに障害が発生したかどうかを判断する。この判断は、障害管理プログラム１３１が障害を検出したときに、メモリ１０５に設けられたドライブ管理テーブル（図示せず）に書き込む障害発生情報を監視して行う。その結果、ドライブ障害が発生していない場合は回復処理を行わず処理を終了する。障害が発生している場合はステップ６０２に移る。ステップ６０２では、頻度テーブル１１０（図３）を参照し、回復が完了していないボリウムの中から、入出力要求の発生頻度が最も高いボリウムを選択する。回復が完了していないボリウムは頻度テーブル１１０のボリウム回復済みフラグ５０７を参照することで選択可能である。また要求発生頻度は、頻度テーブル１１０の内容から、ボリウム毎に以下の算出式によって求める。
【００３７】
【数４】
入出力要求頻度＝実効的な要求数５０５／（現時刻−計測開始時刻５０６）（４）
ステップ６０３ではステップ６０２で選択されたボリウムの障害回復を行う。回復の方法は、障害が発生していない他の複数のドライブのデータ（パリティを含む）を読み込み、同一ドライブアドレス毎に排他的論理和を演算することにより、障害ドライブのデータを回復する。回復されたデータをスペアドライブの同一ドライブアドレスに書き込む処理を、当該ボリウムの領域に対して実行する。この際、障害回復プログラム１０９は、それ自体公知のように、回復対象のボリウムを複数の回復実行単位領域に分け、それらの単位領域のデータの回復を順次実行する。単位領域のデータを回復する処理は、タスクとして制御プロセッサ１０４により実行される。ただし、この時トラック回復済みフラグ５０８を参照し、当該トラックが回復済みである場合は、当該トラックの回復処理は行われない。これは、障害回復プログラム１０９がデータを回復していない領域に対してホストプロセッサ１０１から書き込みまたは読み込み要求が発生した場合は、後で述べるディスクアレイ読込みプログラム１０６またはディスクアレイ書き込みプログラム１０７により当該ボリウムが部分的に回復されるためである。ホストプロセッサは、その単位領域のデータの回復が終了したときには、次の単位領域のデータに対する回復処理を実行する新たなタスクとして起動される。本実施の形態では、通常そうであるように、トラックが障害回復処理の実行の単位領域とする。また、一つの単位領域のデータを回復したときには、頻度テーブル１１０内の、その単位領域に対する回復済みフラグ５０８をセットする。こうして、そのボリウムの全てのトラックのデータを回復したときには、ステップ６０４において、頻度テーブル１１０内の、そのボリウムに対するボリウム回復済みフラグ５０７をセットする。
【００３８】
ステップ６０５では、障害ドライブ内の全てのボリウムに属するデータを回復したかどうかを判定する。未回復のボリウムがある場合はステップ６０２に戻り、未回復のボリウムに対して以上の処理を繰り返す。全てのボリウムが回復されたときには、障害回復プログラム１０９を終了する。
【００３９】
以上の処理により、ホストからの入出力要求の発生頻度が高い順番にボリウムを回復することができる。前述のように、ディスクアレイは、回復が完了した領域へのアクセスは速いが、回復が完了していない領域へのアクセス時には単一入出力要求のために全てのドライブが占有されてしまう問題があり、ディスクアレイの処理性能が劣化する。本処理では、よくアクセスする領域のデータを優先して回復することで、この問題を最小限に抑えることができるようになる。この効果は、ドライブの容量が大きくなるほど大きくなる。これは、ドライブ容量が大きくなると回復時間も増加するため性能劣化の問題となる時間が増すためである。
【００４０】
図５は、ディスクアレイ読み込みプログラム１０６の処理フローを示している。ステップ７０１では、ホストから転送された入力コマンド要求が要求するデータを保持するドライブを選択する。具体的には、入力コマンドが指定するボリウム番号２０２とブロック番号２０４、ブロック数２０５とから、これらで指定されるブロックが保持されているドライブを選択する。この選択はそれ自体公知の方法により実行される。例えば、各ボリウムごとにそれに属する各ブロックがどのドライブに保持されているかを示すメモリ１０５に保持されるアドレス管理テーブル（図示せず）その他の情報が使用される。入力要求により複数のブロックが要求されたときには、それぞれのブロックごとに、それが属するドライブが判断され、それらのブロックが異なるドライブに属すると判断されたときには、以下の処理はそれらのドライブの各々に対して実行される。なお、この入力コマンドがそれが指定するボリウムに対する最初の入出力要求であるときには、ディスクアレイ読み込みプログラム１０６は、頻度テーブル１１０中のそのボリウムに対する計測開始時間５０６をセットする。
【００４１】
入力ステップ７０２では、当該ドライブが障害を起こしているかどうかを判断する。すでに述べたように、障害が発生しているか否かは、障害管理プログラム１３１により検出され、このプログラムが管理している、メモリ１０５内に設けられたドライブ管理テーブル（図示せず）に反映されている。ステップ７０２では、このテーブルを見て、上記ドライブに障害が発生ししているか否かを判別できる。上記ドライブに発生していない場合にはステップ７０６に移り、選択されたドライブからデータを読み込む。具体的には、ホスト１０１から要求されたブロックを当該ドライブから読み出すディスクアクセスコマンドをキャッシュ管理プログラム１３２に対して発行する。キャッシュ管理プログラム１３２は、このコマンドに応答してキャッシュ領域１０８にそのブロックが保持されているかをチェックする。
【００４２】
このキャッシュ領域１０８がヒットしたときには、ヒットしたブロックをキャッシュ領域１０８から読み出し、ディスクアレイ読み込みプログラム１０６に渡す。このとき、キャッシュ管理プログラム１３２は、頻度テーブル１１０内のリード要求数５０２，キャッシュリードヒット数５０４を更新する。この場合には実効的要求数５０５は変更を要しない。また、キャッシュ管理プログラム１３２上記ディスクアクセスコマンドをドライブ制御部、例えば１１２には発行しない。しかし、キャッシュ領域１０８がミスヒットしたときには、上記ディスクアクセスコマンドをドライブ制御部、例えば、１１２に対して発行し、要求されたブロックを読み出し、ディスクアレイ読み込みプログラム１０６に渡す。このデータはキャッシュ領域１０８にも記憶する。このときに、キャッシュ管理プログラム１３２は、頻度テーブル１１０内のリード要求数５０２、実効的要求数５０５を更新する。こうして、ステップ７０６が終了し、次のステップ７０５にて、読み込みプログラム１０６は、当該ブロックをホスト制御部１０３を介してホスト１０１へ転送する。ホスト１０１はこのデータを入力バッファ２０６に書き込む。
【００４３】
ステップ７０２において、要求されたデータを保持するドライブに障害が発生していると判断された場合は、ステップ７０３に移り、要求されたブロックがスペアドライブに回復されているかどうか判断する。この判断は、頻度テーブル１１０内のトラック回復済みフラグ５０８に基づいて行われる。すなわち、そのブロックが属するトラックのデータが回復済みであるかを、そのトラックに対するフラグ５０８により判断する。すでに説明したように、障害が発生したドライブのデータの回復は、そのドライブの各ボリウムのデータを、トラックを単位として行われる。
【００４４】
ステップ７０３において、要求されたブロックがスペアドライブに回復されていないと判定された場合は、ステップ７０７に移る。ステップ７０７では、選択されたドライブの当該ブロックを回復する。この回復のためには、スペアドライブと障害が発生しているドライブを除く他の複数のドライブから、当該ブロックと同じパリティグループに属する複数のデータブロックと一つのパリティブロックを読み出し、それらの排他的論理和を取る。これらのブロックの読み出しのために、障害が発生したドライブとスペアドライブ以外のドライブの各々に対して、ディスクアクセスコマンドが発行される。具体的には、図６に示すように、ドライブ１１９に障害が発生している状態で、ブロック２に対して入力コマンド２００がホスト１０１から発行され、かつ、そのブロックがスペアドライブ１２１にまだ回復されていない場合、ドライブ１１７，１１８、１２０から、ブロック２と同じパリティグループに属するブロック０，１，およびパリティブロックＰ５を読み出し、それらのブロックの対応するビットの排他的論理和により、ブロック２の対応するビットが回復される。先に延べた通り、回復の単位はトラックであり、実際には当該ブロックが含まれるトラックが回復される。回復されたトラックは障害回復プログラム１０９で述べた通りスペアドライブに書き込まれると共に、当該トラックのトラック回復済みフラグがセットされる。回復されたトラックの中から当該ブロックのみ抽出し、ステップ７０５により先に述べたのと同じ方法でホスト１０１に転送される。これらのディスクアクセスコマンドの各々の実行時には、先にステップ７０６に関して述べたように、キャッシュ管理プログラム１３２が介在する。
【００４５】
もし、ステップ７０３において、そのトラックのデータが回復済みであると判断された場合には、ステップ７０４に移り、スペアドライブ１２１から該当ブロック、今の例では２を、図７に示すように読み出す。この読み出しのためにはディスクアクセスコマンドが発行されることには変わりはない。こうして読み出されたブロックは、ステップ７０５によりホスト１０１に転送される。以上によりディスクアレイ読み込みプログラム１０６による入力コマンド２００の処理が終了する。
【００４６】
図８は、ディスクアレイ書き込みプログラム１０７の処理フローを示している。ステップ８０１では、ホストから転送された出力要求が指定する、更新されるべきブロック（旧データ）を保持しているドライブとそのブロックに対する更新前のパリティ（旧パリティ）を保持しているドライブを選択する。なお、この出力コマンドがそれが指定するボリウムに対する最初の入出力要求であるときには、ディスクアレイ書き込みプログラム１０７は、頻度テーブル１１０中のそのボリウムに対する計測開始時間５０６をセットする。
【００４７】
ステップ８０２では、これらのドライブのいずれかに障害を起こしているかどうかをディスクアレイ読み込みプログラム１０６が実行したのと同様な方法で判断する。ここでは簡単化のためにパリティ用のドライブには障害が発生していないと仮定する。上記旧データ用のブロックに障害が発生していない場合にはステップ８０８に移り、出力要求が指定する更新前のブロック（旧データ）を読み出す。この読み出しは先にディスクアレイ読み込みプログラム１０６に関して述べたと同じごとくにキャッシュ管理プログラム１３２を介在して行われる。但し、この書き込みプログラム１０７の実行時には、キャッシュ管理プログラム１３２は、頻度テーブル１１０内のライト要求数５０３、実効的要求数５０６を更新する。その後ステップ８０５に移る。ステップ８０５では、要求されたブロックに対する旧パリティを読み出す。ステップ８０６では、旧データと旧パリティとホストから転送された書き込みすべきデータ（新データ）との排他的論理和を演算することにより、新パリティを生成する。ステップ８０７では新パリティと、ホストから転送されたデータとをそれぞれ所定のドライブに書き込む。
【００４８】
ステップ８０２において、旧データ用のドライブに障害が発生していると判断された場合には、ステップ８０３に移り、要求されたブロックがスペアドライブに回復されているかどうか判断する。この判別は、入力要求における処理７０３（図５）と同様に行われる。そのブロックが回復済みであればステップ８０４に移り、スペアドライブから該当ブロックの旧データを読み出した後、ステップ８０５に移る。その後の処理は、すでに述べたのと同じである。
【００４９】
ステップ８０３において、要求されたブロックのデータがスペアドライブに回復されていないと判断された場合は、ステップ８０９に移る。ステップ８０９では、旧データ用のドライブの当該ブロックを回復する。この回復も入力要求に対する回復処理７０７（図５）と同じである。その後、ステップ８０５から８０７がすでに述べたように実行される。
【００５０】
なお、図８では、旧パリティ用のドライブには障害がないと仮定したが実際にはこのドライブに障害があるか否かを判別し、そのドライブに障害があるときには、旧パリティを回復する処理を実行するように、図８を変形する必要がある。
【００５１】
＜発明の実施の形態２＞
実施の形態１では、ディスクアレイが複数のボリウムに分割されている場合に障害回復を実行するボリウムの順をホストからの入出力要求の発生頻度に応じて実行することを示した。本実施の形態では、ディスクアレイが大容量のボリウムから構成されている場合に、ボリウムを複数の部分領域に分け、それらのデータの回復順序をそれらの領域へのホストからの入出力要求の発生頻度に依存して変更する。
【００５２】
図９は本実施の形態におけるディスクアレイのボリウムの割り当てを示している。本実施の形態では、ボリウム９０１が実施の形態１のボリウム２１３等よりも容量が大きいと仮定する。図１０に示すように、頻度テーブル１１０は、ボリウム９０１内を複数の部分領域に分割し、それぞれの部分領域に対して実施の形態１と同じ情報を有する。ここでは、ボリウム９０１は、ブロック０〜５とそれらに対するパリティを保持するのに使用されている領域と、ブロック６〜１１とそれらに対するパリティを保持するのに使用されている領域と、ブロック１２〜１７とそれらに対するパリティを保持するのに使用されている領域に区分されている。これらの部分領域の大きさは同じと仮定する。
【００５３】
障害が発生したドライブのデータの回復を行う場合に、一つのボリウムをその先頭から実行するのではなく、これらの部分領域に対する、入出力要求の発生頻度に基づいて、これらの部分領域のデータ回復順序を決めることができる。
【００５４】
＜変形例＞
本発明は以上の実施の形態に限定されるのではなく、以下に例示する変形例を含めいろいろの変形例により実現可能である。
【００５５】
（１）実施の形態２において、ディスクアレイ内に上記の大きなボリウムが複数ある場合にも、各ボリウムを部分領域に分割し、それらの複数のボリウムに対して得られた複数の部分領域について、実施の形態２と同様にしてデータ回復順序を決定することができる。
【００５６】
（２）上記実施の形態１では各ボリウムは互いに同じ大きさであると仮定した。実施の形態２でも各部分領域は同じ大きさであると仮定した。しかい、いずれの実施の形態においても、このような大きさと異なる複数のボリウムあるいは部分領域が存在する場合にもそれぞれの実施の形態は適用できる。
【００５７】
（３）上記実施の形態１，２においてはいずれもディスクアレイ内にスペアドライブを有していた。しかし、本発明は、スペアドライブを有しないで、障害が生じたドライブを他の正常なドライブにより交換する形式のディスクアレイにも適用できる。
【００５８】
（４）本発明は、ＲＡＩＤ５以外のディスクアレイにも適用できる。
【００５９】
【発明の効果】
本発明によれば、障害を起こしたドライブのデータの回復中に発行される入出力要求の処理時間が従来より実効的に短縮される。
【図面の簡単な説明】
【図１】本発明によるデータ回復方法を適用するディスクアレイの全体構成図。
【図２】図１の装置におけるディスクアレイのボリウム構造とホストプロセッサからのコマンドの例を示す図。
【図３】図１の装置に使用する頻度テーブルの構成を示す図。
【図４】図１の装置における障害回復プログラムのフローチャート。
【図５】図１の装置におけるディスクアレイ読み込みプログラムのフローチャート。
【図６】図１の装置における入力コマンドの第１の処理態様を説明する図。
【図７】図１の装置における入力コマンドの第２の処理態様を説明する図。
【図８】図１の装置におけるディスクアレイ書き込みプログラムのフローチャート。
【図９】本発明によるデータ回復方法を適用する他のディスクアレイでのボリウム構成を示す図。
【図１０】図９の装置に使用する頻度テーブルの構成を示す図。
【符号の説明】
１１７〜１２１：ドライブ
【図１】
0003573599.tif 000002
【図２】
0003573599.tif 000003
【図３】
0003573599.tif 000004
【図４】
0003573599.tif 000005
【図５】
0003573599.tif 000006
【図６】
0003573599.tif 000007
【図７】
0003573599.tif 000008
【図８】
0003573599.tif 000009
【図９】
0003573599.tif 000010
【図１０】
0003573599.tif 000011