(57)【特許請求の範囲】
【請求項１】
複数のディスク装置と、前記各ディスク装置を並列的に動作させることでデータの書き込み／読み出し制御を行うディスクアレイ制御装置を備え、前記ディスクアレイ制御装置により入力したホストデータを分割し、その分割データからパリティデータを作成して、前記分割データを複数のデータ用ディスク装置に書き込むと共に、前記パリティデータを１つのパリティ用ディスク装置に書き込むＲＡＩＤレベル３のディスクアレイ装置において、
前記ディスクアレイ制御装置は、前記ホストデータに巡回冗長検査情報（ＣＲＣ情報）を付加し、この巡回冗長検査情報付きホストデータを分割し、この分割データからパリティデータを作成して前記各ディスク装置への書き込み制御を行うデータ書き込み制御手段と、
前記ディスク装置から読み出した分割データからパリティデータを作成し、このパリティデータを前記パリティ用ディスク装置から読み出したパリティデータと比較してパリティチェックを行うパリティチェック手段と、
前記パリティチェック手段によるパリティチェックで整合性に矛盾が有る場合、前記複数のデータ用ディスク装置及びパリティ用ディスク装置を１つずつ順番に誤ったデータが格納されているものと仮定し、この仮定の元で前記誤ったデータが格納されているものと仮定したディスク装置を除く他のディスク装置のデータより巡回冗長検査情報付きホストデータを順次再構築するホストデータ再構築手段と、
前記ホストデータ再構築手段で再構築した巡回冗長検査情報付きホストデータに対して巡回冗長検査情報チェックを行って整合性がとれなかった場合、前記ホストデータ再構築手段で、誤ったデータが格納されていると仮定したディスク装置を別のディスク装置と仮定し、再びこの仮定の元で再構築された巡回冗長検査情報付きホストデータに対し巡回冗長検査情報チェックを行う処理を、整合性がとれるまで繰り返して行い、整合性がとれた場合、そのホストデータを正しいホストデータとする巡回冗長検査情報チェック手段を備えていることを特徴としたディスクアレイ装置。
【請求項２】
分割データを格納するための複数のデータ用記憶装置と、チェック用の第２冗長情報を格納するための１つの第２冗長情報用記憶装置と、前記各記憶装置を並列的に動作させることでデータの書き込み／読み出し制御を行うディスクアレイ制御装置を備え、
前記ディスクアレイ制御装置は、
入力したホストデータに巡回冗長検査情報として第１冗長情報を付加し、この第１冗長情報付きホストデータを分割し、この分割データからチェック用の第２冗長情報を作成し、前記分割データを前記複数のデータ用記憶装置へ書き込み、前記第２冗長情報を前記１つの第２冗長情報用記憶装置に書き込む制御を行う制御手段を備えると共に、
前記複数のデータ用記憶装置から読み出した分割データからチェック用の第２冗長情報を作成し、この第２冗長情報を前記第２冗長情報用記憶装置から読み出した第２冗長情報と比較して第２冗長情報のチェックを行う第２冗長情報チェック手段と、
前記第２冗長情報チェック手段によるチェックで整合性に矛盾が有る場合、前記複数のデータ用記憶装置及び第２冗長情報用記憶装置を１つずつ順番に誤ったデータが格納されているものと仮定し、この仮定の元で前記誤ったデータが格納されているものと仮定した記憶装置を除く他の記憶装置のデータより第１冗長情報付きホストデータを順次再構築するホストデータ再構築手段と、
前記ホストデータ再構築手段で再構築した第１冗長情報付きホストデータに対して第１冗長情報のチェックを行って整合性がとれなかった場合、前記ホストデータ再構築手段で、誤ったデータが格納されていると仮定した記憶装置を別の記憶装置と仮定し、再びこの仮定の元で再構築された第１冗長情報付きホストデータに対し第１冗長情報のチェックを行う処理を、整合性がとれるまで繰り返して行い、整合性がとれた場合、そのホストデータを正しいホストデータとする第１冗長情報チェック手段を備えていることを特徴としたディスクアレイ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のディスク装置と前記ディスク装置を並列的に動作させてデータの読み出し／書き込み制御を行うディスクアレイ制御装置を備えたディスクアレイ装置に関する。
【背景技術】
【０００２】
以下、図面に基づいて従来例を説明する。
【０００３】
§１：ディスクアレイ装置の説明・・・図１４参照
図１４は従来のディスクアレイ装置の説明図である。ディスクアレイ装置は内蔵した複数の磁気ディスク装置（ハードディスク装置）を並列動作させることで、データの読み出し／書き込み速度の高速化を図り、かつ冗長構成の導入によって信頼性を向上させた外部記憶装置、或いは補助記憶装置である。なお、以下の説明では、前記磁気ディスク装置（又はハードディスク装置）を単に「ディスク装置」と記す。
【０００４】
図示のように、ディスクアレイ装置は、ホスト１に接続されたディスクアレイ制御装置２と、複数のＲＡＩＤ（詳細は後述する）を構成するディスク装置６−１、６−２、６−３・・・６−ｍ、６−ｎ（ｎ＝ｍ＋１）で構成されている。また、前記ディスクアレイ制御装置２には、ホストアダプタ３と、ディスクアレイコントローラ４と、複数のデバイスアダプタ（ＤＡ）５−１、５−２、５−３・・・５−ｍ、５−ｎが設けてある。そして、前記デバイスアダプタ５−１〜５−ｎには、それぞれ前記各ディスク装置６−１〜６−ｎが接続されている。
【０００５】
前記のように、ディスクアレイ装置は、ホスト１に接続されて運用されるが、この場合、ホスト１とディスクアレイ制御装置２のホストアダプタ３間をインターフェースケーブル（例えば、ＳＣＳＩ−２用ケーブル）により接続する。ホストアダプタ３はホスト１に対するインターフェース制御を行うものであり、ディスクアレイコントローラ４は、データのリード／ライト時の各種制御等を行うものである。前記デバイスアダプタ（ＤＡ）５−１〜５−ｎは、データのリード／ライト時にディスクアレイコントローラ４の指示によりディスク装置６−１〜６−ｎに対する制御を行うものである。
【０００６】
前記ディスクアレイ装置はホスト１から見ると１台のディスク装置に見える。このディスクアレイ装置では、例えば、ホストアダプタ３がホスト１から送られたデータを受信すると、そのデータをディスクアレイコントローラ４へ送る。そして、ディスクアレイコントローラ４は、例えば、前記データを複数のデータに分割し、デバイスアダプタ５−１〜５−ｍを介して複数のディスク装置６−１〜６−ｍ（データ用ディスク装置）に格納すると共に、前記データに対するパリティデータを作成し、デバイスアダプタ５−ｎを介して残りの１台のディスク装置６−ｎ（パリティ用ディスク装置）に格納する。
【０００７】
このようにディスクアレイ装置は、大きなサイズのデータを複数のディスク装置に同時に書き込んだり、或いは複数のディスク装置から同時に読み出したりすることで１台のディスク装置よりもリード／ライトの高速化を実現し、かつデータの信頼性を向上させることができる。従って、装置の高性能化を図ることができるものである。
【０００８】
§２：ＲＡＩＤの説明
前記ディスクアレイ装置は、複数のディスク装置（ハードディスク装置）を使用することにより、単独のディスク装置よりも高い信頼性と性能を実現する方式である。これは、１９８７年に米国のカリフォルニア大学バークレイ校のデビッド．Ａ．パターソン(David.A.Patterson) 教授らが提唱したＲＡＩＤ（Redundant Arrays of Inexpensive Disks ）と呼ばれるものである。すなわち、前記ＲＡＩＤは前記デビッド．Ａ．パターソン教授らの論文に由来する呼び方である。
【０００９】
前記のように、高速に大量のデータを多くのディスク装置にアクセスし、ディスク故障時におけるデータの冗長性を実現するディスクアレイ方式ＲＡＩＤは、１から５までのレベル（以下、前記レベルをＲＡＩＤ１、ＲＡＩＤ２、ＲＡＩＤ３、ＲＡＩＤ４、ＲＡＩＤ５とも記す）に分類されており、レベル３からレベル５（ＲＡＩＤ３、ＲＡＩＤ４、ＲＡＩＤ５）には、ディスク装置の故障時にデータを回復させるためのパリティデータを保持する。
【００１０】
前記ＲＡＩＤのレベルの中でも、レベル４（ＲＡＩＤ４）、レベル５（ＲＡＩＤ５）では、複数の同時読み出しが可能であり、更に、レベル５（ＲＡＩＤ５）においては、パリティを格納するディスク装置を固定しないことで、複数の同時書き込みをも可能としており、大量のトランザクション処理において効果を発揮する。
【００１１】
§３：ＲＡＩＤのレベルの説明・・・図１５参照
図１５はＲＡＩＤのレベル説明図であり、(a) 図はＲＡＩＤ３のデータ転送（書き込み）、(b) 図はＲＡＩＤ５のデータ転送（書き込み）を示した図である。なお、図１５において、３はホストアダプタ、４はディスクアレイコントローラ、Ａ、Ｂ、Ｃ、Ｄ、Ｅはそれぞれデバイスアダプタ（ＤＡ）、６−１〜６−５はディスク装置である。
【００１２】
(1) ：ＲＡＩＤ１の説明
ＲＡＩＤ１は、ディスク装置を二重化した、いわゆるミラードディスク構成である。すなわち、２つのディスク装置に同じデータが書かれる。ディスク装置のコストが２倍かかるが、最もシンプルで実績もある。性能に関しては、データの書き込み時は、２つのディスク装置への書き込み完了を待つために実行時間が少し延びるが、データの読み取り時は、２つのディスク装置のどちらかが空いていれば原理上は実行可能なので、性能向上となる。
【００１３】
(2) ：ＲＡＩＤ２の説明
ＲＡＩＤ２は、入力データを分割し（ストライピング）、インターリーブをかけて複数のディスク装置に分散して格納するものである。この場合、前記分割したデータに対するエラー訂正符号を格納するディスク装置を冗長ディスク装置とし、前記冗長ディスク装置のデータをハミングコードとしたものである。
【００１４】
ＲＡＩＤ２では、例えば、データ格納用のディスク装置が４台の場合、エラー訂正符号用のディスク装置は３台必要である。ディスク装置の特徴としては、複数のディスク装置障害でもデータが失われないことである。そのために、前記のように、複数の冗長ディスク装置を必要とし、正味のデータ量が少なくなるという欠点がある。
【００１５】
(3) ：ＲＡＩＤ３の説明・・・図１５の(a) 図参照
ＲＡＩＤ３は、入力データを分割し（ストライピング）、インターリーブをかけて分割したデータを複数のディスク装置に分散して格納するものである。この場合、前記分割したデータに対するエラー訂正符号を格納するディスク装置を冗長ディスク装置とし、前記冗長ディスク装置のデータをパリティデータとしたものである。このため、ＲＡＩＤ３ではデータ用のディスク装置の数に関わらず、前記冗長ディスク装置（パリティデータ用ディスク装置）の台数は１台で済む。
【００１６】
例えば、ＲＡＩＤ３では、図１５の(a) 図に示したように、データを複数のディスク装置６−１〜６−４に対して並列的にリード／ライトするもので、１台のパリティ用ディスク装置６−５を持つことを特徴としている。データ転送速度は、並列度によりＮ倍（Ｎ：並列動作させるデータ用ディスク装置の台数）となる。また、１台のディスク装置に障害が発生しても、性能低下はなく、原理的にはデータ転送中に障害が発生しても、そのまま動作することも可能である。
【００１７】
(4) ：ＲＡＩＤ４の説明
ＲＡＩＤ４はＲＡＩＤ３におけるストライピングユニット（分割単位）をセクタ単位（１又は数セクタ）としたものである。すなわち、前記ＲＡＩＤ３では、複数のディスク装置を束ねてアクセスするため、ある程度大きな単位でアクセスする時は性能上の効果が見られるが、小さなデータ量のアクセスでは、個々のディスク装置にアクセスを分散させた方が性能上有利である。このことから、ＲＡＩＤ４では、データは各ディスク装置に独立に書くが、パリティディスク装置を持ち、各ディスク装置の対応するビットから生成されたパリティを格納する。
【００１８】
そのため、１台のディスク装置の障害でも、データが失われない。欠点は、データ更新時に、必ずデータディスク装置とパリティディスク装置の両方をアクセスしなければならないことで、この場合のパリティディスク装置がボトルネックに成りやすい。
【００１９】
(5) ：ＲＡＩＤ５の説明・・・図１５の(b) 図参照
ＲＡＩＤ５は、ＲＡＩＤ４の欠点であったパリティディスク装置へのアクセス集中を解消するために、パリティデータを各ディスク装置６−１〜６−５に分散させたものである。しかし、依然としてデータの更新時には２つのディスクアレイ装置をアクセスしなければならないし、パリティデータは、原理上、旧データとの差分をとらなければ生成できないので、リード（読み出し）、データ生成、ライト（書き込み）というプロセスを取る必要がある。
【００２０】
更に、パリティデータによって、データ喪失は事実上なくなったと言えるが、１台のディスクアレイ装置が故障した場合は、少なくとも元の装置性能を維持することができない。故障したディスクアレイ装置のデータを作り出すのに、残ったディスクアレイ装置のデータを総動員するからである。従って、ノンストップシステムのように、ディスクアレイ装置の障害でシステムを止めたくないものには向かない。
【００２１】
前記ＲＡＩＤ５のデータ転送（書き込み）の１例は図１５の(b) 図に示した通りである。(b) 図において、Ｐ０、Ｐ１、Ｐ２、Ｐ３はパリティであり、パリティ生成のセクタグループ毎にパリティを格納するディスク装置を異ならせている。なお、ＲＡＩＤ５でもＲＡＩＤ４と同様にストライピングユニットはセクタ単位（１又は数セクタ）である。
【発明の開示】
【発明が解決しようとする課題】
【００２２】
(1) ：従来のディスクアレイ装置において、ＲＡＩＤ３やＲＡＩＤ５のレベルでは、データのリード時にパリティデータを使用せず、パリティ用ディスク装置を除く他のディスク装置からリードしたデータからホストデータを再構築（復元）し、そのままホストへ転送していた。このようなディスクアレイ装置では、リード時のパリティチェックをしていないので、仮にリードデータにデータ化けやデータ消失等があってもこれを検出することができず、データの信頼性が低下していた。
【００２３】
(2) ：従来のディスクアレイ装置において、１台のデータ用ディスク装置が故障した場合、そのディスク装置を除いて、他のディスク装置から読み出したデータからホストデータを再構築（復元）することも知られていた。この場合、ＲＡＩＤにおけるパリティを使ったデータの再構築（復元）は、ＲＡＩＤ３やＲＡＩＤ５においては、故障したディスク装置の再構築を正常なディスク装置の各データの排他的論理和を取ることで行っていた。      
【００２４】
また、最近のディスクアレイ装置では、前記排他的論理和機能を利用し、データリード時に、データとパリティの整合性がとれているか調査する機能（リードパリティチェック機能）が加えられているものが多くなってきている。しかし、前記リードパリティチェック機能を備えた装置において、リード時のパリティチェックを行い、その結果、データの整合性がとれたリードデータについは問題はないが、データの整合性が取れなかったリードデータについては、ホストにリードデータの整合性がとれなかったということを通知するだけに留まっていた。この場合、ホストへデータが送れなくなるので、データの消失が発生することになり、データの信頼性が低下する。
【００２５】
本発明は、このような従来の課題を解決し、データの読み出し時にリードデータのパリティチェックを行い、その結果、整合性に矛盾が発生した場合でも、正しいホストデータを再構築して、ホストに対し常に正しいデータの転送ができるようにすることを目的とする。
【課題を解決するための手段】
【００２６】
本発明は前記の目的を達成するため、次のように構成した。
【００２７】
(1) ：複数のディスク装置６−１〜６−ｎと、各ディスク装置６−１〜６−ｎを並列的に動作させることでデータの書き込み／読み出し制御を行うディスクアレイ制御装置２を備え、ディスクアレイ制御装置２により、ホスト１から転送されたホストデータを分割し、その分割データからパリティデータを作成して、前記分割データを複数のデータ用ディスク装置６−１〜６−ｍに書き込むと共に、前記パリティデータを１つのパリティ用ディスク装置６−ｎに書き込むＲＡＩＤレベル３のディスクアレイ装置において、
ディスクアレイ制御装置２は、前記ホストデータに巡回冗長検査情報（以下単に「ＣＲＣ」とも記す）を付加し、このＣＲＣ付きホストデータを分割し、この分割データからパリティデータを作成して前記各ディスク装置６−１〜６−ｎへの書き込み制御を行うデータ書き込み制御手段（ホストアダプタ３、ディスクアレイコントローラ４、及びデバイスアダプタ５−１〜５−ｎの一部）と、
前記ディスク装置６−１〜６−ｍから読み出した分割データからパリティデータを作成し、このパリティデータを前記パリティ用ディスク装置６−ｎから読み出したパリティデータと比較してパリティチェックを行うパリティチェック手段（パリティ処理部１９の一部）と、
前記パリティチェック手段によるパリティチェックで整合性に矛盾が有る場合、前記複数のデータ用ディスク装置６−１〜６−ｍ及びパリティ用ディスク装置６−ｎを１つずつ順番に誤ったデータが格納されているものと仮定し、この仮定の元で前記誤ったデータが格納されているものと仮定したディスク装置を除く他のディスク装置のデータより巡回冗長検査情報付きホストデータを順次再構築（復元）するホストデータ再構築手段（ディスクアレイコントローラ４の一部）と、
前記ホストデータ再構築手段で再構築した巡回冗長検査情報付きホストデータに対してＣＲＣチェック（巡回冗長検査情報チェック）を行って整合性がとれなかった場合、前記ホストデータ再構築手段で、誤ったデータが格納されていると仮定したディスク装置を別のディスク装置と仮定し、再びこの仮定の元で再構築された巡回冗長検査情報付きホストデータに対し巡回冗長検査情報チェックを行う処理を、整合性がとれるまで繰り返して行い、整合性がとれた場合、そのホストデータを正しいホストデータとする巡回冗長検査情報チェック手段（ＣＲＣチェック部２０）を備えている。
【００２８】
(2) ：分割データを格納するための複数のデータ用記憶装置と、チェック用の第２冗長情報を格納するための１つの第２冗長情報用記憶装置と、前記各記憶装置を並列的に動作させることでデータの書き込み／読み出し制御を行うディスクアレイ制御装置を備え、前記ディスクアレイ制御装置は、入力したホストデータに巡回冗長検査情報として第１冗長情報を付加し、この第１冗長情報付きホストデータを分割し、この分割データからチェック用の第２冗長情報を作成し、前記分割データを前記複数のデータ用記憶装置へ書き込み、前記第２冗長情報を前記１つの第２冗長情報用記憶装置に書き込む制御を行う制御手段を備えると共に、前記複数のデータ用記憶装置から読み出した分割データからチェック用の第２冗長情報を作成し、この第２冗長情報を前記第２冗長情報用記憶装置から読み出した第２冗長情報と比較して第２冗長情報のチェックを行う第２冗長情報チェック手段と、前記第２冗長情報チェック手段によるチェックで整合性に矛盾が有る場合、前記複数のデータ用記憶装置及び第２冗長情報用記憶装置を１つずつ順番に誤ったデータが格納されているものと仮定し、この仮定の元で前記誤ったデータが格納されているものと仮定した記憶装置を除く他の記憶装置のデータより第１冗長情報付きホストデータを順次再構築するホストデータ再構築手段と、前記ホストデータ再構築手段で再構築した第１冗長情報付きホストデータに対して第１冗長情報のチェックを行って整合性がとれなかった場合、前記ホストデータ再構築手段で、誤ったデータが格納されていると仮定した記憶装置を別の記憶装置と仮定し、再びこの仮定の元で再構築された第１冗長情報付きホストデータに対し第１冗長情報のチェックを行う処理を、整合性がとれるまで繰り返して行い、整合性がとれた場合、そのホストデータを正しいホストデータとする第１冗長情報チェック手段を備えている。
【００３０】
（作用）
図１は本発明の原理説明図である。以下、図１に基づいて前記各構成の作用を説明する。
【００３１】
(a) ：前記(1) の作用
ＲＡＩＤレベル３のディスクアレイ装置において、データの書き込み時にデータ書き込み手段がホスト１から転送されたホストデータにＣＲＣを付加し、このＣＲＣ付きホストデータを分割しこの分割データからパリティデータを作成する。そして、前記分割データをディスク装置６−１〜６−ｍへ書き込み、パリティデータをディスク装置６−ｎに書き込む。
【００３２】
次に、データ読み出し時には、パリティチェック手段は、ディスク装置６−１〜６−ｍから読み出した分割データからリードパリティデータを作成し、このリードパリティデータを前記パリティ用ディスク装置６−ｎから読み出したパリティデータと比較してリードパリティチェックを行う。
【００３３】
パリティチェック手段によるリードパリティチェックで整合性に矛盾が有る場合、ホストデータ再構築手段は、全てのディスク装置６−１〜６−ｎを１つずつ順番に誤ったデータが格納されているものと仮定し、この仮定の元で、誤ったデータが格納されているものと仮定したディスク装置を除く他の全てのディスク装置のデータより巡回冗長検査情報付きホストデータを順次再構築する。
【００３４】
そして、巡回冗長検査情報チェック手段は、ホストデータ再構築手段で再構築した巡回冗長検査情報付きホストデータに対してＣＲＣチェックを行い、その結果整合性がとれなかった場合、前記ホストデータ再構築手段で誤ったデータが格納されたと仮定したディスク装置を別のディスク装置と仮定し、この仮定の元で、再び再構築された巡回冗長検査情報付きホストデータに対しＣＲＣチェックを行う処理を前記整合性がとれるまで繰り返して行い、前記チェックで整合性がとれた場合、そのホストデータを正しいホストデータとする。その後、このホストデータはホストアダプタ３を介してホスト１へ転送する。
【００３５】
前記のようにすれば、ＲＡＩＤレベル３のディスクアレイ装置において、リードパリティチェックで整合性がとれなかった場合でも、ＣＲＣチェックにより、常に正しいホストデータを再構築してホスト１へ転送することができる。従って、データの信頼性が向上する。
【００３６】
(b) ：前記(2) の作用
ディスクアレイ制御装置では、制御手段が、入力したホストデータに巡回冗長検査情報として第１冗長情報を付加し、この第１冗長情報付きホストデータを分割し、この分割データからチェック用の第２冗長情報を作成し、前記分割データを前記複数のデータ用記憶装置へ書き込み、前記第２冗長情報を前記１つの第２冗長情報用記憶装置に書き込む制御を行う。
また、第２冗長情報チェック手段が、前記複数のデータ用記憶装置から読み出した分割データからチェック用の第２冗長情報を作成し、この第２冗長情報を前記第２冗長情報用記憶装置から読み出した第２冗長情報と比較して第２冗長情報のチェックを行う。
また、ホストデータ再構築手段が、前記第２冗長情報チェック手段によるチェックで整合性に矛盾が有る場合、前記複数のデータ用記憶装置及び第２冗長情報用記憶装置を１つずつ順番に誤ったデータが格納されているものと仮定し、この仮定の元で前記誤ったデータが格納されているものと仮定した記憶装置を除く他の記憶装置のデータより第１冗長情報付きホストデータを順次再構築する。
また、第１冗長情報チェック手段が、前記ホストデータ再構築手段で再構築した第１冗長情報付きホストデータに対して第１冗長情報のチェックを行って整合性がとれなかった場合、前記ホストデータ再構築手段で、誤ったデータが格納されていると仮定した記憶装置を別の記憶装置と仮定し、再びこの仮定の元で再構築された第１冗長情報付きホストデータに対し第１冗長情報のチェックを行う処理を、整合性がとれるまで繰り返して行い、整合性がとれた場合、そのホストデータを正しいホストデータとする。
【００３９】
前記のように、前記制御手段は、前記ホストデータ再構築手段で再構築したホストデータに対して整合性を判定し、その結果整合性がとれなかった場合、前記再構築手段で誤ったデータが格納されたと仮定した記憶装置を別の記憶装置と仮定し、この仮定の元で、再び再構築されたホストデータに対し第２の冗長情報によるチェックを行う処理を前記整合性がとれるまで繰り返して行い、前記チェックで整合性がとれた場合、そのホストデータを正しいホストデータとする。その後、このホストデータはホストアダプタ３を介してホスト１へ転送する。
【００４０】
前記のようにすれば、ディスクアレイ装置において、第２の冗長情報によるチェックで整合性がとれなかった場合でも、常に正しいホストデータを再構築してホスト１へ転送することができる。従って、データの信頼性が向上する。
【発明の効果】
【００４１】
本発明は、前記構成により次のような効果がある。
【００４２】
(1) ：従来のリードパリティチェック機能を備えていないディスクアレイ装置において、ＲＡＩＤ３やＲＡＩＤ５のレベルでは、データのリード時にパリティデータを使用せず、パリティ用ディスク装置を除く他のディスク装置からリードしたデータからホストデータを再構築し、そのままホストへ転送していたので、リードデータにデータ化けやデータ消失等があってもこれを検出することができず、データの信頼性が低下していた。
【００４３】
これに対して本願発明は、ディスク装置からのデータリード時にリードパリティチェックを行い、その結果、整合性に矛盾が有れば、正しいホストデータを再構築してホストへ転送することができる。従って、リード時にホストデータをホストヘ転送できない事態もなくなりデータの消失もなくなる。その結果、データの信頼性、及びディスクアレイ装置の信頼性が更に向上する。
【００４４】
(2) ：従来のリードパリティチェック機能を備えた装置では、リード時のパリティチェックを行い、その結果、データの整合性がとれたリードデータについては問題はないが、データの整合性が取れなかったものについては、ホストにリードデータの整合性がとれなかったということを通知するだけに留まっていた。この場合、ホストへデータが送れなくなるので、データの消失が発生することになり、データの信頼性が低下していた。
【００４５】
これに対して本願発明は、データの読み出し時にリードデータのパリティチェックを行い、その結果、整合性に矛盾が発生したら、ＣＲＣチェックや時刻データのチェック、或いは更新カウンタのカウンタ値のチェック等により、正しいホストデータを再構築してホストへ転送することができる。従って、データの消失等の事態も回避され、データの信頼性、及びディスクアレイ装置の信頼性が更に向上する。
【００４６】
前記効果の外、各請求項に対応して次のような効果がある。
【００４７】
(3) ：請求項１では、ＲＡＩＤレベル３のディスクアレイ装置において、ディスクアレイ制御装置は、ホストデータに巡回冗長検査情報（ＣＲＣ情報）を付加して分割し、パリティデータを作成して各ディスク装置への書き込み制御を行うデータ書き込み制御手段と、ディスク装置から読み出した分割データからパリティデータを作成し、このパリティデータをパリティ用ディスク装置から読み出したパリティデータと比較してパリティチェックを行うパリティチェック手段と、パリティチェックで整合性に矛盾が有る場合、データ用ディスク装置及びパリティ用ディスク装置を１つずつ順番に誤ったデータが格納されているものと仮定し、誤ったデータが格納されているものと仮定したディスク装置を除く他のディスク装置のデータよりホストデータを順次再構築するホストデータ再構築手段と、前記再構築したホストデータに対して巡回冗長検査情報チェックを行って整合性がとれなかった場合、ホストデータ再構築手段で、誤ったデータが格納されていると仮定したディスク装置を別のディスク装置と仮定し、再びこの仮定の元で再構築されたホストデータに対し巡回冗長検査情報チェックを行う処理を、整合性がとれるまで繰り返して行い、整合性がとれた場合、そのホストデータを正しいホストデータとする巡回冗長検査情報チェック手段を備えている。
【００４８】
従って、ＲＡＩＤレベル３のディスクアレイ装置において、リードパリティチェックで整合性がとれなかった場合でも、巡回冗長検査情報チェックにより、常に正しいホストデータを再構築してホストへ転送することができる。このため、データの信頼性が向上する。
【００４９】
(4) ：請求項２では、分割データを格納するための複数のデータ用記憶装置と、チェック用の第２冗長情報を格納するための１つの第２冗長情報用記憶装置と、前記各記憶装置を並列的に動作させることでデータの書き込み／読み出し制御を行うディスクアレイ制御装置を備え、前記ディスクアレイ制御装置は、入力したホストデータに巡回冗長検査情報として第１冗長情報を付加し、この第１冗長情報付きホストデータを分割し、この分割データからチェック用の第２冗長情報を作成し、前記分割データを前記複数のデータ用記憶装置へ書き込み、前記第２冗長情報を前記１つの第２冗長情報用記憶装置に書き込む制御を行う制御手段を備えると共に、前記複数のデータ用記憶装置から読み出した分割データからチェック用の第２冗長情報を作成し、この第２冗長情報を前記第２冗長情報用記憶装置から読み出した第２冗長情報と比較して第２冗長情報のチェックを行う第２冗長情報チェック手段と、前記第２冗長情報チェック手段によるチェックで整合性に矛盾が有る場合、前記複数のデータ用記憶装置及び第２冗長情報用記憶装置を１つずつ順番に誤ったデータが格納されているものと仮定し、この仮定の元で前記誤ったデータが格納されているものと仮定した記憶装置を除く他の記憶装置のデータより第１冗長情報付きホストデータを順次再構築するホストデータ再構築手段と、前記ホストデータ再構築手段で再構築した第１冗長情報付きホストデータに対して第１冗長情報のチェックを行って整合性がとれなかった場合、前記ホストデータ再構築手段で、誤ったデータが格納されていると仮定した記憶装置を別の記憶装置と仮定し、再びこの仮定の元で再構築された第１冗長情報付きホストデータに対し第１冗長情報のチェックを行う処理を、整合性がとれるまで繰り返して行い、整合性がとれた場合、そのホストデータを正しいホストデータとする第１冗長情報チェック手段を備えている。
【００５０】
従って、ディスクアレイ装置において、第２の冗長情報によるチェックで整合性がとれなかった場合でも、常に正しいホストデータを再構築してホスト１へ転送することができる。従って、データの信頼性が向上する。
【発明を実施するための最良の形態】
【００５１】
（各実施の形態に共通の説明）
前記ディスクアレイ装置において、リードパリティチェック時に不整合が生じるのは、ＲＡＩＤを構成しているディスク装置内の１台が何らかの原因で正しいデータを返せない場合が殆どである。特に、ライトコマンドがディスク装置に送られた時に、ライトデータが実際にディスク装置の記憶媒体に書かれずにディスク装置が正常終了を返す場合がある。このような場合、ディスク装置側はリードコマンドに対して前回ライトコマンドで書き損じたデータを何も問題なく転送してくるようになってしまう。このようなデータをディスクアレイコントローラに転送し、パリティチェックを行うと整合性がとれない。
【００５２】
ここで、ＲＡＩＤ本来の特徴である「故障した１台のディスク装置の場所が分かればデータを復元できる」ということを用いることによりデータを復元（以下「再構築」とも記す）すれば良いのであるが、どれが誤ったデータが書かれているディスク装置なのかは、ディスクアレイコントローラ４は理解できない。
【００５３】
従って、後述する実施の形態１〜５の処理を用いることにより、どのディスク装置に誤ったデータが書かれていたかを特定し、その特定されたディスク装置のデータを不良（誤ったデータ）としてＲＡＩＤのデータ再構築機能を利用して他のデータからホストデータを再構築する。
【００５４】
以下、各例について詳細に説明する。なお、以下に説明する「ＣＲＣ」（Cyclic Redundancy Check ）は、巡回冗長検査のことであり、前記巡回冗長検査のために付加する検査情報を単に「ＣＲＣ」と記す。また、ホストからディスクアレイ装置側へ転送されるデータ（書き込みデータ）を「ホストデータ」、ディスク装置側に記憶されたデータ（分割データ）を「ディスクデータ」、ディスク装置から読み出したデータから再構築され、ホストへ転送されるデータを「再構築されたホストデータ」、或いは単に「ホストデータ」とも記す。
【００５５】
（実施の形態１の説明）
§１：実施の形態１の装置の説明・・・図２参照
図２は実施の形態１の装置構成図である。図示のように、ディスクアレイ装置は、ホスト１に接続されたディスクアレイ制御装置２と、前記ディスクアレイ制御装置２に接続された複数のディスク装置（磁気ディスク装置、或いはハードディスク装置）６−１〜６−ｎ（ｎ：ディスク装置の台数）によって構成されている。
【００５６】
また、ディスクアレイ制御装置２には、ホストアダプタ３とディスクアレイコントローラ４と、複数のデバイスアダプタ５−１〜５−ｎが設けてある。そして、ホストアダプタ３には、メモリ１０とＣＲＣ付加処理部１１が設けてあり、ディスクアレイコントローラ４にはパリティ処理部１９とＣＲＣチェック部２０が設けてあり、デバイスアダプタ５−１から５−ｎにはそれぞれメモリ１２−１から１２−ｎが設けてある。前記各部の機能等は次の通りである。
【００５７】
(1) ：ディスクアレイ制御装置２は、ディスクアレイ装置の各種制御を行うものである。
【００５８】
(2) ：ディスク装置６−１〜６−ｎは、内部にそれぞれ記憶媒体（磁気ディスク）を備え、デバイスアダプタ５−１〜５−ｎを介して送られたコマンドによりデータのリード／ライト等を行うものである。
【００５９】
(3) ：ホストアダプタ３は、ホスト１に対するインターフェース制御を行うものである。例えば、コマンドの受信、ホストデータの送受信等を行うものである。
【００６０】
(4) ：ディスクアレイコントローラ４は、データのリード／ライト時の各種制御や処理を行うものである。
【００６１】
(5) ：デバイスアダプタ５−１〜５−ｎは、ディスクアレイコントローラ４の指示により各ディスク装置６−１〜６−ｎを制御するものである。
【００６２】
(6) ：メモリ１０は、ホストアダプタ３がアクセスし、ワーク用として使用するメモリである。
【００６３】
(7) ：ＣＲＣ付加処理部１１は、ホストデータにＣＲＣを付加する処理を行うものである。
【００６４】
(8) ：パリティ処理部１９は、パリティデータの作成、パリティチェック処理等を行うものである。
【００６５】
(9) ：ＣＲＣチェック部２０は、リードデータから再構築したホストデータに対するＣＲＣチェックを行うものである。
【００６６】
(10)：メモリ１２−１〜１２−ｎは、各デバイスアダプタ５−１〜５−ｎがそれぞれアクセスし、ワーク用として使用するメモリである。
【００６７】
§２：処理概要の説明
実施の形態１はＲＡＩＤ３のレベルでの処理において特に効果のある処理である。従って、この例では、図２に示した構成のＲＡＩＤ３のディスクアレイ装置により処理を行う。データの書き込み時には、ホスト１から受信したホストデータにＣＲＣを付加し、このＣＲＣ付きホストデータを複数のデータに分割し、これら分割データからパリティデータを作成する。
【００６８】
そして、前記分割データとパリティデータをディスクアレイコントローラ４、デバイスアダプタ５−１〜５−ｎを介してディスク装置６−１〜６−ｎへ送り、前記ディスク装置の記録媒体に書き込む。この場合、分割データはディスク装置６−１〜６−ｍに書き込み、前記パリティデータはディスク装置６−ｎに書き込む。
【００６９】
また、ディスク装置６−１〜６−ｎからのデータのリード時には、ＲＡＩＤ３でのリードパリティチェックを行い、その結果整合性がとれなかった場合、ホストＣＲＣを用いてホストデータのＲＡＩＤ３での再構築（復元）を行う。すなわち、ディスクアレイコントローラ４では、リードパリティの不整合時に、端のディスク装置から格納されているデータが誤っているのではないかと仮定を立てて、ホストデータを再構築してみる。そして、正しいホストＣＲＣが計算されたものを本来の正しいホストデータとしてホスト１へ転送する。
【００７０】
§３：処理の説明・・・図３参照
図３は実施の形態１の処理説明図である。以下、図３に基づいて実施の形態１の処理を説明する。
【００７１】
(1) ：ＲＡＩＤ３でのライト時の処理
ＲＡＩＤ３でのデータライト（書き込み）時の処理は次の通りである。この場合ディスク装置６−１〜６−ｍを分割データ格納用とし、ディスク装置６−ｎをパリティデータ格納用として、データのリード／ライト時の処理を次のようにして行う。
【００７２】
先ず、ホストアダプタ３は、ホスト１よりライトコマンドと共に書き込み要求のあったホストデータを受信すると、そのホストデータをメモリ１０に一時格納する（ａ参照）。そして、ＣＲＣ付加処理部１１は前記メモリ１０に格納されたホストデータからホストＣＲＣ（ＣＲＣ検査情報）を作成し、前記ホストデータに付加する（ｂ参照）。
【００７３】
次に、ホストアダプタ３は、前記ＣＲＣ付きのホストデータをディスクアレイコントローラ４へ転送する。ディスクアレイコントローラ４は前記ＣＲＣ付きホストデータを受け取ると、ＲＡＩＤ３に基づき、前記ＣＲＣ付きホストデータをｍ個のデータに分割して（ＣＲＣも含めたホストデータを分割する）、各ディスク装置６−１〜６−ｍに割り振るデータを作成する。また、パリティ処理部１９は、前記ｍ個の分割された各データの排他的論理和を計算してパリティデータを作成する。
【００７４】
すなわち、前記ＣＲＣ付きホストデータを分割した分割データをｄ1 、ｄ2 、ｄ3 ・・・ｄm 、パリティデータをＰとすると、前記パリティデータＰは、前記分割データｄ1 、ｄ2 、ｄ3 ・・・ｄm の各排他的論理和となる（ｄ参照）。
【００７５】
次にディスクアレイコントローラ４は、ディスク装置６−１〜６−ｎに対してライトコマンドを発行すると共に、前記作成した各ディスク装置毎の分割データをデバイスアダプタ５−１〜５−ｍへ転送する。これと同時に、デバイスアダプタ５−ｎには、前記パリティデータを転送する。これらのデータはデバイスアダプタ内でそれぞれメモリ１２−１〜１２−ｎに一時格納される。
【００７６】
その後、デバイスアダプタ５−１〜５−ｍは、各々接続されているディスク装置６−１〜６−ｍに前記ライトコマンドを送ると共に、前記分割データを転送する。そして、ディスク装置６−１〜６−ｍは記憶媒体に前記分割データを書き込む（ディスクデータの書き込み）。また、デバイスアダプタ５−ｎは、接続されているディスク装置６−ｎにライトコマンドを送ると共に、前記パリティデータを転送し、ディスク装置６−ｎは記憶媒体にパリティデータを書き込む（ｃ参照）。
【００７７】
(2) ：ＲＡＩＤ３でのリード処理において、パリティの整合性に矛盾が無かった場合の処理説明
ＲＡＩＤ３でのリード処理時に、パリティの整合性に矛盾がなかった場合の処理は次の通りである。先ず、ホスト１の発行したリードコマンドをホストアダプタ３が受信すると、ホストアダプタ３は、そのコマンドをディスクアレイコントローラ４へ通知する。この通知を受け取ったディスクアレイコントローラ４は、ホスト１より要求のあったアドレスで各ディスク装置６−１〜６−ｎに対してリードコマンドを発行する。
【００７８】
デバイスアダプタ５−１〜５−ｎを介して前記リードコマンドを受信したディスク装置６−１〜６−ｎは、指定されたアドレスのデータをリードする。そして、ディスク装置６−１〜６−ｎからリードしたデータは、ディスク装置６−１〜６−ｎに接続されている各デバイスアダプタ５−１〜５−ｎに転送され、それぞれメモリ１２−１〜１２−ｎに格納される。
【００７９】
この状態で、メモリ１２−１〜１２−ｍにはリードされた分割データが格納され、メモリ１２−ｎにはリードされたパリティデータが格納される。その後、ディスクアレイコントローラ４は、前記メモリ１２−１〜１２−ｍに格納されている分割データを用いて、ホストデータを再構築（復元）する。
【００８０】
この時、ディスクアレイコントローラ４のパリティ処理部１９は、前記メモリ１２−１〜１２−ｍに格納されている各分割データの排他的論理和を計算してリードパリティとし、このリードパリティを前記メモリ１２−ｎに格納されているパリティと比較することでリードパリティチェックを行う。この場合、前記メモリ１２−１〜１２−ｍに格納されている分割データをｄ1 、ｄ2 、ｄ3 ・・・ｄm 、メモリ１２−ｎに格納されているパリティデータをＰ、前記分割データｄ1 、ｄ2 、ｄ3 ・・・ｄm から計算したリードパリティデータをＲＰとすると、前記リードパリティデータＲＰは、前記各分割データｄ1 、ｄ2 、ｄ3 ・・・ｄm の排他的論理和となる。
【００８１】
そして前記リードパリティチェックでＲＰ＝Ｐとなれば、整合性に矛盾無しと判断する（ｅ参照）。すなわち、前記リードパリティチェックの結果、両者が一致すれば（ＲＰ＝Ｐ）、リードパリティチェックが正常であり、リードデータの整合性に矛盾が無かったとして、前記再構築したデータをホストアダプタ３へ転送する。その後、ホストアダプタ３は前記データをホスト１へ転送する。
【００８２】
(3) ：ＲＡＩＤ３でのリード処理において、パリティの整合性に矛盾が有った場合の処理説明
前記のように、ディスク装置からのデータリード時に、デバイスアダプタ５−１〜５−ｍのメモリ１２−１〜１２−ｍに格納されている各分割データの排他的論理和から計算したリードパリティＲＰと、デバイスアダプタ５−ｎのメモリ１２−ｎに格納されているパリティデータＰとの比較において不一致であった場合、従来の装置ではホストデータの再構築ができないため、パリティ不一致ということをホスト１へ通知するに止まっていた。      
【００８３】
しかし、本実施の形態１では、ホストデータに付加されていたホストＣＲＣデータを用いてデータの再構築を行う。この場合、原則として、パリティ不一致が起きた場合、どれか１つのデバイスアダプタのメモリに誤ったデータが格納されている可能性が多く、２つ以上のデバイスアダプタのメモリに誤ったデータが格納されている場合は、確率的にも少なく、また、こうなってしまった場合、本実施の形態１でも救済することはできない。
【００８４】
そこで、実施の形態１では、前記のようにパリティが不一致と分かった時点で以下のようなデータリカバリ処理を実施する。先ず、ディスクアレイコントローラ４は、端のデバイスアダプタ５−１のメモリ１２−１に誤ったデータが入ってしまったと仮定する。この仮定の元でＲＡＩＤ３のリカバリ方法によりホストデータを再構築（復元）してみる（故障した１台のディスク装置の場所が分かればホストデータを復元できる）。
【００８５】
この場合、メモリ１２−１に格納された分割データｄ1 が誤ったデータであると仮定するので、この分割データｄ1 を除いて他の全てのデータｄ2 、ｄ3 ・・・ｄm 、及びパリティデータＰの各排他的論理和を計算すれば、前記データｄ1 が復元できる。従って、前記復元したデータｄ1 を含めた全ての分割データｄ1 、ｄ2 、ｄ3 ・・・ｄm からホストデータが再構築できる。
【００８６】
その後、前記再構築されたホストデータが正しいものか否かを、ＣＲＣチェック部２０が再構築されたホストＣＲＣデータをチェックすることで決定する。前記ＣＲＣチェック部２０によるホストＣＲＣチェックで整合性がとれた場合、ディスクアレイコントローラ４は、前記再構築したホストデータを正しいホストデータとし、デバイスアダプタ５−１のメモリ１２−１に誤ったデータが入っていたものと断定する。
【００８７】
もし、前記ホストＣＲＣチェックで整合性がとれない場合は、このデバイスアダプタ５−１以外の他のデバイスアダプタ５−２〜５−ｎのメモリ１２−２〜１２−ｎに誤ったデータが入っているに違いないとする。このため、ディスクアレイコントローラ４は、誤ったデータが入っていると仮定するデバイスアダプタのメモリを隣のデバイスアダプタ５−２のメモリ１２−２とし、かつデバイスアダプタ５−１のメモリ１２−１を正確なデータが入っているものと仮定して、この仮定の元で、再度、ホストデータを再構築し、ＣＲＣチェック部２０が前記のホストＣＲＣチェックを行う。
【００８８】
これを全てのデバイスアダプタのメモリに格納されているデータについて、ホストＣＲＣの整合性がとれるまで繰り返して行う。前記のようにして、ＣＲＣチェック部２０によるホストＣＲＣチェックで整合性がとれた場合、そのホストデータは正しいとする。そして、ディスクアレイコントローラ４は、その再構築したホストデータをホストアダプタ３へ転送する。ホストアダプタ３は前記データを受け取ると、そのホストデータをホスト１へ転送する。
【００８９】
§４：フローチャートによる処理の説明・・・図４参照
図４は実施の形態１の処理フローチャートである。以下、図４に基づいて実施の形態１の処理を説明する。なお、Ｓ１〜Ｓ１３は各処理ステップを示す。
【００９０】
処理が開始され、ホストアダプタ３がホスト１の発行したコマンドを受信すると（Ｓ１）、ホストアダプタ３は前記コマンドをメモリ１０に一時格納すると共に、そのコマンドを解析し内容を判断する（Ｓ２）。その結果、前記コマンドがライトコマンドであれば、ＲＡＩＤ３でのデータライト（書き込み）時の処理を次のようにして行う。
【００９１】
ホストアダプタ３は、ホスト１よりライトコマンドと共に書き込み要求のあったホストデータを受信すると、そのホストデータをメモリ１０に一時格納する。そして、ＣＲＣ付加処理部１１は前記メモリ１０に格納されたホストデータからホストＣＲＣを作成し、ホストデータに付加してＣＲＣ付きホストデータとする。その後ホストアダプタ３は、前記ＣＲＣ付きのホストデータをディスクアレイコントローラ４へ転送する（Ｓ３）。
【００９２】
ディスクアレイコントローラ４は前記ＣＲＣ付きのホストデータを受け取ると、ＲＡＩＤ３により、前記ＣＲＣ付きのホストデータをｍ個のデータに分割して、各ディスク装置６−１〜６−ｍに割り振るデータを作成する。また、パリティ処理部１９は前記ｍ個のデータの排他的論理和を計算してパリティデータを作成する。
【００９３】
次にディスクアレイコントローラ４は、ディスク装置６−１〜６−ｎに対してライト命令を発行すると共に、前記作成した各ディスク装置毎のデータ（分割データ）をデバイスアダプタ５−１〜５−ｍへ転送する。これと同時に、デバイスアダプタ５−ｎには、前記作成したパリティデータを転送する（Ｓ４）。
【００９４】
その後、デバイスアダプタ５−１〜５−ｍは、各々接続されているディスク装置６−１〜６−ｍに前記ライトコマンドを送ると共に分割データを転送する。そして、ディスク装置６−１〜６−ｍは記憶媒体に前記分割データを書き込む（ディスクデータの書き込み）。また、デバイスアダプタ５−ｎは、接続されているディスク装置６−ｎにライトコマンドを送ると共に、前記パリティデータを転送し、ディスク装置６−ｎは記憶媒体にパリティデータを書き込み（Ｓ５）、前記ライト処理を終了する。
【００９５】
また、前記Ｓ２の処理で、受信したコマンドがリードコマンドであった場合、ホストアダプタ３は、そのコマンドの内容をディスクアレイコントローラ４へ通知する。この通知を受け取ったディスクアレイコントローラ４は、ホスト１より要求のあったアドレスで各ディスク装置６−１〜６−ｎに対してリードコマンドを発行する（Ｓ６）。
【００９６】
ディスク装置６−１〜６−ｎは、デバイスアダプタ５−１〜５−ｎを介して前記リードコマンドを受信すると、前記コマンドで指定されたアドレスのデータをリードする。そして、ディスク装置６−１〜６−ｎは、リードしたデータを、ディスク装置６−１〜６−ｎに接続されている各デバイスアダプタ５−１〜５−ｎへ転送する。各デバイスアダプタ５−１〜５−ｎは、前記データをそれぞれ内部のメモリ１２−１〜１２−ｎに格納する（Ｓ７）。
【００９７】
その後、ディスクアレイコントローラ４は、デバイスアダプタ５−１〜５−ｍのメモリ１２−１〜１２−ｍに格納されている分割データからホストデータを再構築（復元）する。この場合、ディスクアレイコントローラ４のパリティ処理部１９は、前記メモリ１２−１〜１２−ｍに格納されている各データの排他的論理和を計算してリードパリティデータとし、このリードパリティデータを前記メモリ１２−ｎに格納されているパリティデータと比較することでリードパリティチェックを行う（Ｓ８）。
【００９８】
その結果、両者が一致すれば、リードパリティチェックが正常であり、整合性に矛盾が無かったとして、前記再構築（復元）したホストデータをホストアダプタ３へ転送する（Ｓ１３）。その後、ホストアダプタ３は前記ホストデータをホスト１へ転送する（Ｓ１２）。しかし、前記Ｓ８のリードパリティチェックで不一致の場合、パリティの整合性に矛盾が有ったとする。
【００９９】
すなわち、ディスクアレイコントローラ４は前記のようにパリティが不一致と分かった時点で以下のようなデータリカバリ処理を実施する。先ず、ディスクアレイコントローラ４は、端のデバイスアダプタ５−１のメモリ１２−１に誤ったデータが入ってしまったと仮定する。この仮定の元で、前記ＲＡＩＤ３のリカバリ方法によりホストデータを再構築してみる（Ｓ９）。
【０１００】
そしてこの再構築されたホストデータが正しいものか否かを、ＣＲＣチェック部２０がホストＣＲＣデータをチェックすることにより決定する（Ｓ１０）。前記ＣＲＣチェック部２０によるホストＣＲＣチェックで整合性がとれた場合、そのホストデータは正しいとする。そして、ディスクアレイコントローラ４は、デバイスアダプタ５−１のメモリ１２−１に誤ったデータが入っていたものと断定する。
【０１０１】
もし、前記ホストＣＲＣチェックで整合性がとれない場合は、このデバイスアダプタ５−１以外の他のデバイスアダプタ５−２〜５−ｎのメモリ１２−２〜１２−ｎに誤ったデータが入っているに違いないとする。このため、ディスクアレイコントローラ４は、誤ったデータが入っていると仮定するデバイスアダプタのメモリを隣のデバイスアダプタ５−２のメモリ１２−２とし、かつデバイスアダプタ５−１のメモリ１２−１を正確なデータが入っているものと仮定し、この仮定の元で、再度、ホストデータを再構築し、そのホストデータについてＣＲＣチェック部２０が前記ホストＣＲＣチェックを行う。
【０１０２】
これを全てのデバイスアダプタに対してホストＣＲＣの整合性がとれるまで前記Ｓ９の処理から繰り返して行う。前記のようにして、ホストＣＲＣチェックで整合性がとれた場合、このホストデータは正しいとする。そして、ディスクアレイコントローラ４は、その再構築したホストデータをホストアダプタ３へ転送する（Ｓ１１）。ホストアダプタ３は前記データを受け取ると、そのデータをホスト１へ転送する（Ｓ１２）。
【０１０３】
（実施の形態２の説明）
§１：実施の形態２の装置の説明・・・図５参照
図５は実施の形態２の装置構成図である。以下、図５に基づいて実施の形態２の装置の構成を説明する。図示のように、ディスクアレイ装置は、ホスト１に接続されたディスクアレイ制御装置２と、前記ディスクアレイ制御装置２に接続された複数のディスク装置６−１〜６−ｎ（ｎ：ディスク装置の台数）によって構成されている。
【０１０４】
また、ディスクアレイ制御装置２には、ホストアダプタ３と、ディスクアレイコントローラ４と、複数のデバイスアダプタ５−１〜５−ｎが設けてある。そして、ホストアダプタ３には、メモリ１０が設けてあり、ディスクアレイコントローラ４にはパリティ処理部１９と時刻データ処理部１３と時計１４が設けてあり、デバイスアダプタ５−１から５−ｎにはそれぞれメモリ１２−１から１２−ｎが設けてある。
【０１０５】
前記パリティ処理部１９はパリティデータの作成処理、チェック処理等を行うものである。時計１４は時刻を計時するものであり、時刻データ処理部１３は時計１４の時刻を検出してその時刻データの処理を行うものである。なお、他の構成は前記実施の形態１と同じである。
【０１０６】
§２：実施の形態２の処理概要の説明
実施の形態２は、ＲＡＩＤ３のディスクアレイ装置の例である。この例では、図５に示したＲＡＩＤ３のディスクアレイ装置により、次のような処理を行う。データの書き込み時には、ホスト１から受信したホストデータを複数のデータに分割し、これら分割データからパリティデータを計算する。そして前記分割データとパリティデータに対し、現在時刻の時刻データを付加する。
【０１０７】
その後、時刻データ付き分割データとパリティデータをディスク装置６−１〜６−ｎへ送り、前記ディスク装置の記録媒体に書き込む。この場合、時刻データ付き分割データはディスク装置６−１〜６−ｍに書き込み、前記時刻データ付きパリティデータはディスク装置６−ｎに書き込む。
【０１０８】
また、ディスク装置からのデータリード時には、ＲＡＩＤ３でのパリティチェックで整合性がとれなかった場合、各ディスク装置に書かれている時刻を比較し、一番古いものを誤ったデータとして、ＲＡＩＤ３でのホストデータの再構築を行う。
【０１０９】
すなわち、ディスク装置からのデータのリード時に、パリティチェックを行い、そのパリティチェックで不整合となった場合は、各ディスク装置に書かれている時刻データを参照し、古いものがあればそれを誤ったデータの入ったディスク装置であるとして、ＲＡＩＤ３のリカバリ方法により正しいホストデータを再構築する。
【０１１０】
§３：処理の説明・・・図６参照
図６は実施の形態２の処理説明図である。以下、図６に基づいて実施の形態２の処理を説明する。
【０１１１】
(1) ：ＲＡＩＤ３でのライト時の処理
ＲＡＩＤ３でのデータライト（書き込み）時の処理は次の通りである。この場合ディスク装置６−１〜６−ｍを分割データの格納用（データ用ディスク装置）とし、ディスク装置６−ｎをパリティデータの格納用（パリティ用ディスク装置）として、データのリード／ライト時の処理を次のようにして行う。
【０１１２】
先ず、ホストアダプタ３は、ホスト１よりライトコマンドと共に書き込み要求のあったホストデータを受信すると、そのホストデータをメモリ１０に一時格納する（ａ参照）。次に、ホストアダプタ３は、前記ホストデータをディスクアレイコントローラ４へ転送する（ｂ参照）。
【０１１３】
ディスクアレイコントローラ４はホストデータを受け取ると、ＲＡＩＤ３に基づき、ホストデータをｍ個のデータに分割して、各ディスク装置６−１〜６−ｍに割り振るデータ（分割データ）を作成する。また、パリティ処理部１９は、前記ｍ個の分割データの排他的論理和を計算してパリティデータを作成する。
【０１１４】
すなわち、前記ホストデータを分割した分割データをｄ1 、ｄ2 、ｄ3 ・・・ｄm 、パリティデータをＰとすると、前記パリティデータＰは、前記分割データｄ1 、ｄ2 、ｄ3 ・・・ｄm の各排他的論理和となる（ｄ参照）。そして、時刻データ処理部１３は時計１４から現在時刻を読み取り、その時刻データを前記各分割データ、及びパリティデータに付加する。
【０１１５】
次にディスクアレイコントローラ４は、ディスク装置６−１〜６−ｎに対してライトコマンドを発行すると共に、前記各時刻データ付き分割データをデバイスアダプタ５−１〜５−ｍへ転送する。これと同時に、デバイスアダプタ５−ｎには、前記時刻データ付きパリティデータを転送する。
【０１１６】
その後、デバイスアダプタ５−１〜５−ｍは、各々接続されているディスク装置６−１〜６−ｍに前記ライトコマンドを送ると共に、前記時刻データ付き分割データを転送する。そして、ディスク装置６−１〜６−ｍは記憶媒体に前記時刻付き分割データを書き込む（ディスクデータの書き込み）。また、デバイスアダプタ５−ｎは、接続されているディスク装置６−ｎにライトコマンドを送ると共に、前記時刻データ付きパリティデータを転送し、ディスク装置６−ｎは記憶媒体に時刻付きパリティデータを書き込む（ｃ参照）。      
【０１１７】
(2) ：ＲＡＩＤ３でのリード処理において、パリティの整合性に矛盾が無かった場合の処理説明
ＲＡＩＤ３でのリード処理時に、パリティの整合性に矛盾がなかった場合の処理は次の通りである。先ず、ホスト１の発行したリードコマンドをホストアダプタ３が受信すると、ホストアダプタ３は、そのコマンドの内容をディスクアレイコントローラ４へ通知する。この通知を受け取ったディスクアレイコントローラ４は、ホスト１より要求のあったアドレスで各ディスク装置６−１〜６−ｎに対してリードコマンドを発行する。
【０１１８】
デバイスアダプタ５−１〜５−ｎを介して前記リードコマンドを受信したディスク装置６−１〜６−ｎは、指定されたアドレスのデータをリードする。そして、ディスク装置６−１〜６−ｎからリードしたデータは、ディスク装置６−１〜６−ｎに接続されている各デバイスアダプタ５−１〜５−ｎに転送され、それぞれメモリ１２−１〜１２−ｎに格納される。
【０１１９】
その後、ディスクアレイコントローラ４は、デバイスアダプタ５−１〜５−ｍのメモリ１２−１〜１２−ｍに格納されている分割データからＲＡＩＤ３に基づきホストデータを再構築（復元）する。この時、パリティ処理部１９は、前記メモリ１２−１〜１２−ｍに格納されている各分割データの排他的論理和を計算してリードパリティとし、このリードパリティを前記メモリ１２−ｎに格納されているパリティと比較することでリードパリティチェックを行う。
【０１２０】
この場合、前記メモリ１２−１〜１２−ｍに格納されている分割データをｄ1 、ｄ2 、ｄ3 ・・・ｄm 、メモリ１２−ｎに格納されているパリティデータをＰ、前記分割データｄ1 、ｄ2 、ｄ3 ・・・ｄm から計算したリードパリティデータをＲＰとすると、前記リードパリティデータＲＰは、前記各分割データｄ1 、ｄ2 、ｄ3 ・・・ｄm の排他的論理和となる。
【０１２１】
そして前記リードパリティチェックでＲＰ＝Ｐとなれば、整合性に矛盾無しと判断する（ｅ参照）。すなわち、前記リードパリティチェックの結果、両者が一致すれば（ＲＰ＝Ｐ）、リードパリティチェックが正常であり、リードデータの整合性に矛盾が無かったとして、前記再構築したデータをホストアダプタ３へ転送する。その後、ホストアダプタ３は前記データをホスト１へ転送する。
【０１２２】
(3) ：ＲＡＩＤ３でのリード処理において、パリティの整合性に矛盾が有った場合の処理説明
前記のように、ディスク装置からのデータリード時に、デバイスアダプタ５−１〜５−ｍのメモリ１２−１〜１２−ｍに格納されている各分割データの排他的論理和を計算して求めたリードパリティデータＲＰと、デバイスアダプタ５−ｎのメモリ１２−ｎに格納されているパリティデータＰとの値が不一致（ＲＰ≠Ｐ）であった場合、整合性に矛盾が有るとして次の処理を行う。
【０１２３】
この場合、時刻データ処理部１３は、各デバイスアダプタ５−１〜５−ｍのメモリ１２−１〜１２−ｍに格納されているデータの時刻を調べ、ディスクアレイコントローラ４はこの時刻が一番古いものを誤ったデータとして決定する。そして、ディスクアレイコントローラ４は、最古の時刻データを持つ誤ったデータを除いて、他のデバイスアダプタのメモリに格納されているデータからＲＡＩＤ３のデータリカバリ方法に基づき、ホストデータを再構築する。前記再構築されたホストデータは、正しいデータとしてホストアダプタ３へ転送される。ホストアダプタ３は前記データを受け取ると、そのデータをホスト１へ転送する。
【０１２４】
§４：フローチャートによる処理の説明・・・図７参照
図７は実施の形態２の処理フローチャートである。以下、図７に基づいて実施の形態２の処理を説明する。なお、Ｓ２１〜Ｓ３２は各処理ステップを示す。
【０１２５】
処理が開始され、ホストアダプタ３がホスト１の発行したコマンドを受信すると（Ｓ２１）、ホストアダプタ３は前記コマンドをメモリ１０に一時格納し、そのコマンドを解析して内容を判断する（Ｓ２２）。その結果、前記コマンドがライトコマンドであれば、ＲＡＩＤ３でのデータライト（書き込み）時の処理を次のようにして行う。
【０１２６】
前記のように、ホストアダプタ３は、ホスト１よりライトコマンドと共に書き込み要求のあったホストデータを受信すると、そのホストデータをメモリ１０に一時格納する。そして、ホストアダプタ３は前記ホストデータをディスクアレイコントローラ４へ転送する（Ｓ２３）。
【０１２７】
ディスクアレイコントローラ４はホストデータを受け取ると、ＲＡＩＤ３に基づき、ホストデータをｍ個のデータに分割して各ディスク装置６−１〜６−ｍに割り振る分割データを作成する。また、パリティ処理部１９は前記ｍ個の分割データの排他的論理和を計算してパリティデータを作成する。そして、時刻データ処理部１３は時計１４から現在時刻を読み取り、その時刻データを前記各分割データ及びパリティデータに付加する（Ｓ２４）。
【０１２８】
次にディスクアレイコントローラ４はディスク装置６−１〜６−ｎに対してライトコマンドを発行すると共に、前記時刻データ付き分割データをデバイスアダプタ５−１〜５−ｍへ転送する。これと同時に、デバイスアダプタ５−ｎには、前記時刻データ付きパリティデータを転送する。
【０１２９】
その後、デバイスアダプタ５−１〜５−ｍは、各々接続されているディスク装置６−１〜６−ｍに前記ライトコマンドを送ると共に、前記時刻データ付き分割データを転送する。そして、ディスク装置６−１〜６−ｍは記憶媒体に前記時刻付き分割データを書き込む（ディスクデータの書き込み）。また、デバイスアダプタ５−ｎは、接続されているディスク装置６−ｎにライトコマンドを送ると共に、前記時刻データ付きパリティデータを転送し、ディスク装置６−ｎは記憶媒体に時刻付きパリティデータを書き込み（Ｓ２５）ライト処理を終了する。
【０１３０】
また、前記Ｓ２２の処理で、受信したコマンドがリードコマンドであった場合、ホストアダプタ３は、そのコマンドの内容をディスクアレイコントローラ４へ通知する。この通知を受け取ったディスクアレイコントローラ４は、ホスト１より要求のあったアドレスで各ディスク装置６−１〜６−ｎに対してリードコマンドを発行する（Ｓ２６）。
【０１３１】
デバイスアダプタ５−１〜５−ｎを介して前記リードコマンドを受信したディスク装置６−１〜６−ｎは、指定されたアドレスのデータをリードする。そして、ディスク装置６−１〜６−ｎからリードした時刻付きデータは、ディスク装置６−１〜６−ｎに接続されている各デバイスアダプタ５−１〜５−ｎに転送され、それぞれメモリ１２−１〜１２−ｎに格納される（Ｓ２７）。
【０１３２】
その後、ディスクアレイコントローラ４は、デバイスアダプタ５−１〜５−ｍのメモリ１２−１〜１２−ｍに格納されている分割データを用いてホストデータを再構築する。また、この時、パリティ処理部１９は、デバイスアダプタ５−１〜５−ｍに格納されている分割データの排他的論理和を計算してリードパリティを作成し、前記リードパリティをデバイスアダプタ５−ｎのメモリ１２−ｎに格納されているパリティデータと比較することでリードパリティチェックを行う（Ｓ２８）。
【０１３３】
その結果、両者が一致すれば、リードパリティチェックが正常であり、整合性に矛盾が無かったとして、前記再構築（復元）したホストデータをホストアダプタ３へ転送する（Ｓ３２）。その後、ホストアダプタ３は前記ホストデータをホスト１へ転送する（Ｓ３１）。
【０１３４】
しかし、前記Ｓ２８のリードパリティチェックで、不一致の場合、整合性に矛盾が有ったとする。すなわち、前記のようにパリティが不一致と分かった時点で以下のようなデータリカバリ処理を実施する。この場合、ディスクアレイコントローラ４は、各デバイスアダプタ５−１〜５−ｎのメモリ１２−１〜１２−ｎに格納されているデータの時刻を調べ、この時刻が一番古いもの（最古の時刻を持ったデータ）を誤ったデータと決定する。そして、最古の時刻データを持つ誤ったデータを除いて、他のデバイスアダプタのメモリに格納されているデータから前記ＲＡＩＤ３のデータリカバリ処理に基づき、ホストデータを再構築する（Ｓ２９）。前記再構築されたホストデータは、正しいデータとしてホストアダプタ３へ転送される（Ｓ３０）。ホストアダプタ３は前記データを受け取ると、そのデータをホスト１へ転送する（Ｓ３１）。
【０１３５】
（実施の形態３の説明）
§１：実施の形態３の装置の説明・・・図８参照
図８は実施の形態３の装置構成図である。以下、図８に基づいて実施の形態３の装置を説明する。図示のように、ディスクアレイ装置は、ホスト１に接続されたディスクアレイ制御装置２と、前記ディスクアレイ制御装置２に接続された複数のディスク装置６−１〜６−ｎ（ｎ：ディスク装置の台数）によって構成されている。
【０１３６】
また、ディスクアレイ制御装置２には、ホストアダプタ３と、ディスクアレイコントローラ４と、複数のデバイスアダプタ５−１〜５−ｎが設けてある。そして、ホストアダプタ３には、メモリ１０が設けてあり、ディスクアレイコントローラ４にはパリティ処理部１９と時刻データ処理部１３と時計１４が設けてあり、デバイスアダプタ５−１から５−ｎにはそれぞれメモリ１２−１から１２−ｎが設けてある。
【０１３７】
この場合、ＲＡＩＤ５での処理を行うため、ディスク装置６−１〜６−ｎの全てに巡回的にパリティデータを分散して格納するものである。すなわち、パリティデータを特定のディスク装置ではなく、各ディスク装置に巡回的に分散して格納する。なお、他の構成は前記実施の形態２と同じである。
【０１３８】
§２：実施の形態３の処理概要の説明
実施の形態３は、ＲＡＩＤ５のディスクアレイ装置の例であり、次のように処理を行う。前記ＲＡＩＤ５のディスクアレイ装置によるデータリード処理において、大量のデータを転送する場合、前記ＲＡＩＤ３のように、全ディスク装置へのアクセスが行われればデータのパリティチェックを行うことは可能である。
【０１３９】
そこで、前記実施の形態２と同様な処理により各ディスク装置に時刻付きデータを格納しておき、リード時には、各ディスク装置に書かれている時刻を比較し、一番古いものを誤ったディスクデータとして、ホストデータのＲＡＩＤ５のデータリカバリ方法によりホストデータの再構築を行う。
【０１４０】
すなわち、ＲＡＩＤ５では、リード時に大量のデータを転送する場合、ＲＡＩＤ３のように、全ディスク装置へのアクセスが行われると、パリティチェックを行うことが可能である。この場合、実施の形態２と同じ処理によりホストデータを再構築する。
【０１４１】
§３：処理の説明・・・図８参照
以下、図８に基づいて実施の形態３の処理を説明する。なお、以下に説明する処理は、全ディスク装置へのアクセスが行われる場合の例である。
【０１４２】
(1) ：ＲＡＩＤ５でのライト時の処理
ＲＡＩＤ５でのデータライト（書き込み）時の処理は次の通りである。この場合、ディスク装置６−１〜６−ｎの全てを分割データ及びパリティデータの格納用として、データのリード／ライト時の処理を次のようにして行う。
【０１４３】
先ず、ホストアダプタ３は、ホスト１よりライトコマンドと共に書き込み要求のあったホストデータを受信すると、そのホストデータをメモリ１０に一時格納する。次に、ホストアダプタ３は、前記ホストデータをディスクアレイコントローラ４へ転送する。
【０１４４】
ディスクアレイコントローラ４はホストデータを受け取ると、ＲＡＩＤ５に基づき、ホストデータをセクタ単位でｍ（ｍ＝ｎ−１）個のデータに分割して、パリティデータ格納用の１つのディスク装置を除く他の各ディスク装置に割り振る分割データを作成する。また、パリティ処理部１９は、前記ｍ個の分割データの排他的論理和を計算してパリティデータを作成する。そして、時刻データ処理部１３は時計１４から現在時刻を読み取り、その時刻データを前記各分割データ、及びパリティデータに付加する。
【０１４５】
次にディスクアレイコントローラ４は、ディスク装置６−１〜６−ｎに対してライトコマンドを発行すると共に、前記時刻データ付き分割データをデバイスアダプタ５−１〜５−ｎの内の該当するｍ個のデバイスアダプタへ転送する。これと同時に、残りの１つのデバイスアダプタには、前記時刻データ付きパリティデータを転送する。
【０１４６】
その後、前記時刻付き分割データを格納しているデバイスアダプタは、各々接続されているディスク装置に前記ライトコマンドを送ると共に、前記時刻データ付き分割データを転送する。そして、前記時刻付き分割データを受信したディスク装置は記憶媒体に前記時刻付き分割データを書き込む。また、時刻付きパリティデータを格納しているデバイスアダプタは、接続されているディスク装置にライトコマンドを送ると共に、前記時刻データ付きパリティデータを転送し、そのディスク装置は記憶媒体に時刻付きパリティデータを書き込む。
【０１４７】
(2) ：ＲＡＩＤ５でのリード処理において、パリティの整合性に矛盾が無かった場合の処理説明
ＲＡＩＤ５でのリード処理時に、パリティの整合性に矛盾がなかった場合の処理は次の通りである。先ず、ホスト１の発行したリードコマンドをホストアダプタ３が受信すると、ホストアダプタ３は、そのコマンドの内容をディスクアレイコントローラ４へ通知する。この通知を受け取ったディスクアレイコントローラ４は、ホスト１より要求のあったアドレスで各ディスク装置６−１〜６−ｎに対してリードコマンドを発行する。
【０１４８】
デバイスアダプタ５−１〜５−ｎを介して前記リードコマンドを受信したディスク装置６−１〜６−ｎは、指定されたアドレスのデータをリードする。そして、ディスク装置６−１〜６−ｎからリードしたデータは、ディスク装置６−１〜６−ｎに接続されている各デバイスアダプタ５−１〜５−ｎに転送され、それぞれメモリ１２−１〜１２−ｎに格納される。
【０１４９】
その後、ディスクアレイコントローラ４は、デバイスアダプタのメモリに格納されている分割データからＲＡＩＤ５に基づきホストデータを再構築（復元）する。この時、パリティ処理部１９は、前記メモリに格納されている各分割データの排他的論理和を計算してリードパリティとし、このリードパリティを前記いずれか１つのメモリに格納されているパリティデータと比較する。
【０１５０】
その結果、両者が一致すれば、リードパリティチェックが正常であり、整合性に矛盾が無かったとして、前記再構築した（復元）データをホストアダプタ３へ転送する。その後、ホストアダプタ３は前記データをホスト１へ転送する。
【０１５１】
(3) ：ＲＡＩＤ５でのリード処理において、パリティの整合性に矛盾が有った場合の処理説明
前記のように、ディスク装置からのデータリード時に、デバイスアダプタのメモリに格納されている各分割データの排他的論理和を計算して求めたリードパリティデータと、いずれか１つのデバイスアダプタのメモリに格納されているパリティデータとの値が不一致であった場合、整合性に矛盾が有るとして次の処理を行う。
【０１５２】
この場合、時刻データ処理部１３は、各デバイスアダプタ５−１〜５−ｎのメモリ１２−１〜１２−ｎに格納されているデータの時刻を調べ、この時刻が一番古いものを誤ったデータとして決定する。そして、ディスクアレイコントローラ４は、最古の時刻データを持つ誤ったデータを除いて、他のデバイスアダプタのメモリに格納されているデータからＲＡＩＤ５のデータリカバリ方法に基づき、ホストデータを再構築する。前記再構築されたホストデータは、正しいデータとしてホストアダプタ３へ転送される。ホストアダプタ３は前記データを受け取ると、そのデータをホスト１へ転送する。
【０１５３】
§４：フローチャートによる処理の説明・・・図９参照
図９は実施の形態３の処理フローチャートである。以下、図９に基づいて実施の形態３の処理を説明する。なお、Ｓ４１〜Ｓ５２は各処理ステップを示す。
【０１５４】
処理が開始され、ホストアダプタ３がホスト１の発行したコマンドを受信すると（Ｓ４１）、ホストアダプタ３は前記コマンドをメモリ１０に一時格納し、そのコマンドを解析して内容を判断する（Ｓ４２）。その結果、前記コマンドがライトコマンドであれば、ＲＡＩＤ５でのデータライト（書き込み）時の処理を次のようにして行う。
【０１５５】
前記のように、ホストアダプタ３は、ホスト１よりライトコマンドと共に書き込み要求のあったホストデータを受信すると、そのホストデータをメモリ１０に一時格納する。そして、ホストアダプタ３は前記ホストデータをディスクアレイコントローラ４へ転送する（Ｓ４３）。
【０１５６】
ディスクアレイコントローラ４は前記ホストデータを受け取ると、ＲＡＩＤ５に基づき、ホストデータをセクタ単位でｍ個のデータに分割して各ディスク装置に割り振る分割データを作成する。また、パリティ処理部１９は前記ｍ個の分割データの排他的論理和を計算してパリティデータを作成する。そして、時刻データ処理部１３は時計１４から現在時刻を読み取り、その時刻データを前記分割データ及びパリティデータに付加する。
【０１５７】
そして、ディスクアレイコントローラ４は、ディスク装置６−１〜６−ｎに対してライトコマンドを発行すると共に、前記時刻データ付き分割データと１個の時刻データ付きパリティデータをデバイスアダプタ５−１〜５−ｎへ転送する（Ｓ４４）。
【０１５８】
その後、デバイスアダプタ５−１〜５−ｎは、各々接続されているディスク装置６−１〜６−ｎに前記ライトコマンドを送ると共に、前記時刻データ付き分割データ、及び時刻付きパリティデータを転送する。そして、ディスク装置６−１〜６−ｎは記憶媒体に前記時刻付きデータを書き込む（Ｓ４５）。この場合、いずれか１つのディスク装置に時刻付きパリティデータを格納し、他の複数のディスク装置に時刻付き分割データを格納する。前記処理が完了すると、ライト処理を終了する。
【０１５９】
また、前記Ｓ４２の処理で、受信したコマンドがリードコマンドであった場合、ホストアダプタ３は、そのリードコマンドの内容をディスクアレイコントローラ４へ通知する。この通知を受け取ったディスクアレイコントローラ４は、ホスト１より要求のあったアドレスで、各ディスク装置６−１〜６−ｎに対してリードコマンドを発行する（Ｓ４６）。      
【０１６０】
デバイスアダプタ５−１〜５−ｎを介して前記リードコマンドを受信したディスク装置６−１〜６−ｎは、指定されたアドレスのデータをリードする。そして、ディスク装置６−１〜６−ｎからリードした時刻付きデータは、ディスク装置６−１〜６−ｎに接続されている各デバイスアダプタ５−１〜５−ｎに転送され、それぞれメモリ１２−１〜１２−ｎに格納される（Ｓ４７）。
【０１６１】
その後、ディスクアレイコントローラ４は、デバイスアダプタ５−１〜５−ｎのメモリ１２−１〜１２−ｎに格納されている分割データを用いてホストデータを再構築する。また、パリティ処理部１９は、前記データの再構築と同時に、デバイスアダプタ５−１〜５−ｎのメモリ１２−１〜１２−ｎのデータ内、パリティデータを除く、他のｍ個の分割データの排他的論理和を計算してリードパリティを作成し、このリードパリティを、前記メモリ１２−１〜１２−ｎのいずれか１つのメモリに格納されているパリティデータ（書き込み時に作成したパリティデータ）と比較することでリードパリティチェックを行う（Ｓ４８）。
【０１６２】
その結果、両者が一致すれば、リードパリティチェックが正常であり、整合性に矛盾が無かったとして、前記再構築（復元）したホストデータをホストアダプタ３へ転送する（Ｓ５２）。その後、ホストアダプタ３は前記ホストデータをホスト１へ転送する（Ｓ５１）。
【０１６３】
しかし、前記Ｓ４８のリードパリティチェック処理で不一致の場合、整合性に矛盾が有ったとする。すなわち、前記のようにパリティが不一致と分かった時点で以下のようなデータリカバリ処理を実施する。この場合、ディスクアレイコントローラ４は、各デバイスアダプタ５−１〜５−ｎのメモリ１２−１〜１２−ｎに格納されているデータの時刻を調べ、この時刻が一番古いもの（最古の時刻を持ったデータ）を誤ったデータと決定する。      
【０１６４】
そして、最古の時刻データを持つ誤ったデータを除いて、他のデバイスアダプタのメモリに格納されているデータから前記ＲＡＩＤ５のデータリカバリ方法に基づき、ホストデータを再構築する（Ｓ４９）。前記再構築されたホストデータは、正しいデータとしてホストアダプタ３へ転送される（Ｓ５０）。ホストアダプタ３は前記データを受け取ると、そのデータをホスト１へ転送する（Ｓ５１）。
【０１６５】
（実施の形態４の説明）
§１：実施の形態４の装置の説明・・・図１０参照
図１０は実施の形態４の装置構成図である。以下、図１０に基づいて実施の形態４の装置の構成を説明する。図示のように、ディスクアレイ装置は、ホスト１に接続されたディスクアレイ制御装置２と、前記ディスクアレイ制御装置２に接続された２つのディスク装置６−１、６−２によって構成されている（ミラードディスク構成）。
【０１６６】
また、ディスクアレイ制御装置２には、ホストアダプタ３と、ディスクアレイコントローラ４と、２つのデバイスアダプタ（ＤＡ）５−１、５−２が設けてある。そして、ホストアダプタ３には、メモリ１０が設けてあり、ディスクアレイコントローラ４には時刻データ処理部１３と時計１４が設けてあり、デバイスアダプタ（ＤＡ）５−１、５−２にはそれぞれメモリ１２−１、１２−２が設けてある。
【０１６７】
§２：実施の形態４の処理概要の説明
実施の形態４は、ＲＡＩＤ１のディスクアレイ装置の例である。この例では、前記ディスクアレイ装置により次のようにして処理を行う。すなわち、前記ディスクアレイ装置により、ディスク装置６−１、６−２に格納されたミラーデータ相互の比較で結果が等しくなかった場合（データ不一致の場合）、各ディスク装置６−１、６−２に書かれている時刻を比較し、最新の時刻が書かれていた方のデータを正しいホストデータとして用いるものである。
【０１６８】
§３：処理の説明・・・図１０参照
以下、図１０に基づいて実施の形態４の処理を説明する。
【０１６９】
(1) ：ＲＡＩＤ１でのライト時の処理
ＲＡＩＤ１でのデータのリード／ライト時の処理を次のようにして行う。先ず、ホストアダプタ３は、ホスト１よりライトコマンドと共に書き込み要求のあったホストデータを受信すると、そのホストデータをメモリ１０に一時格納する。次に、ホストアダプタ３は、前記ホストデータをディスクアレイコントローラ４へ転送する。
【０１７０】
ディスクアレイコントローラ４が前記ホストデータを受け取ると、時刻データ処理部１３は時計１４から現在時刻を読み取り、その時刻データを前記ホストデータに付加する。次にディスクアレイコントローラ４は、ディスク装置６−１、６−２に対してライトコマンドを発行すると共に、前記時刻データ付きデータをデバイスアダプタ５−１、５−２へ転送する。
【０１７１】
その後、デバイスアダプタ５−１、５−２は、各々接続されているディスク装置６−１、６−２に前記ライトコマンドを送ると共に、前記時刻データ付きデータを転送する。そして、ディスク装置６−１、６−２は記憶媒体に前記時刻付きホストデータを書き込む。このようにしてディスク装置６−１と６−２には同一の時刻データ付きホストデータ（ミラーデータ）が書き込まれる。
【０１７２】
(2) ：ＲＡＩＤ１でのリード処理において、ミラーデータ相互の比較処理で結果が等しかった場合の処理説明
ＲＡＩＤ１でのリード処理時に、ミラーデータ相互の比較処理で結果が等しかった場合の処理は次の通りである。先ず、ホスト１の発行したリードコマンドをホストアダプタ３が受信すると、ホストアダプタ３は、そのコマンドの内容をディスクアレイコントローラ４へ通知する。この通知を受け取ったディスクアレイコントローラ４は、ホスト１より要求のあったアドレスで各ディスク装置６−１、６−２に対してリードコマンドを発行する。
【０１７３】
デバイスアダプタ５−１、５−２を介して前記リードコマンドを受信したディスク装置６−１、６−２は、指定されたアドレスのデータをリードする。そして、ディスク装置６−１、６−２からリードしたデータは、ディスク装置６−１、６−２に接続されている各デバイスアダプタ５−１、５−２に転送され、それぞれメモリ１２−１、１２−２に格納される。
【０１７４】
その後、ディスクアレイコントローラ４は、デバイスアダプタ５−１のメモリ１２−１に格納されているデータと、デバイスアダプタ５−２のメモリ１２−２に格納されているデータとの比較を行う（ミラーデータの比較）。その結果、両者が一致すれば、いずれか一方のデータ（例えば、メモリ１２−１に格納されているデータ）を正しいホストデータであるとしてホストアダプタ３へ転送する。その後、ホストアダプタ３は前記データをホスト１へ転送する。
【０１７５】
(3) ：ＲＡＩＤ１でのリード処理において、ミラーデータ相互の比較処理で結果が等しくなかった場合の処理説明
前記のように、ディスク装置からのデータのリード時に、デバイスアダプタ５−１、５−２のメモリ１２−１、１２−２に格納されているデータの比較で、両者が不一致であった場合、時刻データ処理部１３は、各デバイスアダプタ５−１、５−２のメモリ１２−１、１２−２に格納されているデータの時刻を調べ、この時刻が古いものを誤ったデータとして決定する。
【０１７６】
そして、ディスクアレイコントローラ４は、最新の時刻が書かれていた方のデータを正しいホストデータとして用いる。すなわち、古い時刻データを持つ誤ったデータを除いて、他のデバイスアダプタのメモリに格納されているデータを正しいホストデータとしてホストアダプタ３へ転送する。ホストアダプタ３は前記データを受け取ると、そのデータをホスト１へ転送する。
【０１７７】
§４：フローチャートによる処理の説明・・・図１１参照
図１１は実施の形態４の処理フローチャートである。以下、図１１に基づいて実施の形態４の処理を説明する。なお、Ｓ６１〜Ｓ７２は各処理ステップを示す。
【０１７８】
処理が開始され、ホストアダプタ３がホスト１の発行したコマンドを受信すると（Ｓ６１）、ホストアダプタ３は前記コマンドをメモリ１０に一時格納し、そのコマンドを解析して内容を判断する（Ｓ６２）。その結果、前記コマンドがライトコマンドであれば、ＲＡＩＤ１でのデータライト（書き込み）時の処理を次のようにして行う。
【０１７９】
前記のように、ホストアダプタ３は、ホスト１よりライトコマンドと共に書き込み要求のあったホストデータを受信すると、そのホストデータをメモリ１０に一時格納する。そして、ホストアダプタ３は前記ホストデータをディスクアレイコントローラ４へ転送する（Ｓ６３）。
【０１８０】
ディスクアレイコントローラ４はホストデータを受け取ると、ＲＡＩＤ１に基づき処理を行う。この場合、時刻データ処理部１３は時計１４から現在時刻を読み取り、その時刻データを前記ホストデータに付加する。次にディスクアレイコントローラ４はディスク装置６−１、６−２に対してライトコマンドを発行すると共に、前記時刻データ付きデータをデバイスアダプタ５−１、５−２へ転送する（Ｓ６４）。
【０１８１】
その後、デバイスアダプタ５−１、５−２は、各々接続されているディスク装置６−１、６−２に前記ライトコマンドを送ると共に、前記時刻データ付きデータを転送する。そして、ディスク装置６−１、６−２は記憶媒体に前記時刻付きデータを書き込み（Ｓ６５）ライト処理を終了する。
【０１８２】
また、前記Ｓ６２の処理で、受信したコマンドがリードコマンドであった場合、ホストアダプタ３は、そのコマンドの内容をディスクアレイコントローラ４へ通知する。この通知を受け取ったディスクアレイコントローラ４は、ホスト１より要求のあったアドレスで、各ディスク装置６−１、６−２に対してリードコマンドを発行する（Ｓ６６）。
【０１８３】
デバイスアダプタ５−１、５−２を介して前記リードコマンドを受信したディスク装置６−１、６−２は、指定されたアドレスのデータをリードする。そして、ディスク装置６−１、６−２からリードした時刻付きデータは、ディスク装置６−１、６−２に接続されている各デバイスアダプタ５−１、５−２に転送され、それぞれメモリ１２−１、１２−２に格納される（Ｓ６７）。
【０１８４】
その後、ディスクアレイコントローラ４は、デバイスアダプタ５−１のメモリ１２−１に格納されているデータと、デバイスアダプタ５−２のメモリ１２−２に格納されているデータとの比較を行う。すなわちミラーデータを比較する（Ｓ６８）。その結果、両者が一致すれば、前記メモリ１２−１、または１２−２のいずれかのデータ（両者は同じデータなのでどちらのデータでも良い）を正しいホストデータとしてホストアダプタ３へ転送する（Ｓ７２）。その後、ホストアダプタ３は前記ホストデータをホスト１へ転送する（Ｓ７１）。
【０１８５】
しかし、前記Ｓ６８の処理で、両者が不一致の場合、すなわち、ミラーデータが一致しなかった場合、その時点で以下のようなデータリカバリ処理を実施する。この場合、ディスクアレイコントローラ４は、各デバイスアダプタ５−１、５−２のメモリ１２−１、１２−２に格納されているデータの時刻を調べ、この時刻が古いものを誤ったデータとし、最新の時刻を持つデータを正しいデータとして決定する（Ｓ６９）。
【０１８６】
そして、前記決定した正しいデータ（ホストデータ）をホストアダプタ３へ転送する（Ｓ７０）。その後、ホストアダプタ３は前記データを受け取ると、そのデータをホスト１へ転送する（Ｓ７１）。
【０１８７】
（実施の形態５の説明）
§１：実施の形態５の装置の説明・・・図１２参照
図１２は実施の形態５の装置構成図である。以下、図１２に基づいて実施の形態５の装置の構成を説明する。図示のように、ディスクアレイ装置は、ホスト１に接続されたディスクアレイ制御装置２と、前記ディスクアレイ制御装置２に接続された複数のディスク装置６−１〜６−ｎ（ｎ：ディスク装置の台数）によって構成されている。
【０１８８】
また、前記ディスクアレイ制御装置２には、ホストアダプタ３とディスクアレイコントローラ４と、複数のデバイスアダプタ５−１〜５−ｎが設けてある。そして、ホストアダプタ３には、メモリ１０が設けてあり、ディスクアレイコントローラ４には、パリティ処理部１９と更新カウンタ２２とカウンタデータ処理部２１が設けてあり、デバイスアダプタ５−１から５−ｎにはそれぞれメモリ１２−１から１２−ｎが設けてある。
【０１８９】
前記更新カウンタ１６は、ディスクアレイコントローラ４により逐次カウンタ値が更新制御されるカウンタである。例えば、データのライト（書き込み）が行われる度にカウンタ値をインクリメントされるカウンタを使用する。また、カウンタデータ処理部２１は、更新カウンタ２２のカウンタ値を読み取り、書き込みデータに付加したり、或いはディスク装置からリードしたデータに付加されている更新カウンタのカウンタ値のチェックを行うものである。なお、他の構成は前記図２の装置と同じである。
【０１９０】
§２：実施の形態５の処理の説明
実施の形態５は、前記実施の形態２の処理における時刻データの代わりとして前記更新カウンタのカウンタ値を用いた例である。この例ではＲＡＩＤ３により次のようにして処理を行う。
【０１９１】
(1) ：ＲＡＩＤ３でのライト時の処理
ＲＡＩＤ３でのデータライト（書き込み）時の処理は次の通りである。この場合ディスク装置６−１〜６−ｍを分割したデータの格納用とし、ディスク装置６−ｎをパリティデータの格納用として、データのリード／ライト時の処理を次のようにして行う。
【０１９２】
先ず、ホストアダプタ３は、ホスト１よりライトコマンドと共に書き込み要求のあったホストデータを受信すると、そのホストデータをメモリ１０に一時格納する。次に、ホストアダプタ３は、前記ホストデータをディスクアレイコントローラ４へ転送する。
【０１９３】
ディスクアレイコントローラ４はホストデータを受け取ると、ＲＡＩＤ３に基づき、ホストデータをｍ個のデータに分割して、各ディスク装置６−１〜６−ｍに割り振る分割データを作成する。また、パリティ処理部１９は、前記ｍ個の分割データの排他的論理和を計算してパリティデータを作成する。そして、カウンタデータ処理部２１は更新カウンタ２２から現在のカウンタ値を読み取り、そのカウンタ値を前記各分割データ、及びパリティデータに付加する。
【０１９４】
次にディスクアレイコントローラ４は、ディスク装置６−１〜６−ｎに対してライト命令を発行すると共に、前記カウンタ値付き分割データをデバイスアダプタ５−１〜５−ｍへ転送する。これと同時に、デバイスアダプタ５−ｎには、前記カウンタ値付きパリティデータを転送する。
【０１９５】
その後、デバイスアダプタ５−１〜５−ｍは、各々接続されているディスク装置６−１〜６−ｍに前記ライトコマンドを送ると共に、前記カウンタ値付き分割データを転送する。そして、ディスク装置６−１〜６−ｍは記憶媒体に前記カウンタ値付き分割データを書き込む。また、デバイスアダプタ５−ｎは、接続されているディスク装置６−ｎにライトコマンドを送ると共に、前記カウンタ値付きパリティデータを転送し、ディスク装置６−ｎは記憶媒体にカウンタ値付きパリティデータを書き込む。
【０１９６】
(2) ：ＲＡＩＤ３でのリード処理において、パリティの整合性に矛盾が無かった場合の処理説明
ＲＡＩＤ３でのリード処理時に、パリティの整合性に矛盾がなかった場合の処理は次の通りである。先ず、ホスト１の発行したリードコマンドをホストアダプタ３が受信すると、ホストアダプタ３は、そのコマンドの内容をディスクアレイコントローラ４へ通知する。この通知を受け取ったディスクアレイコントローラ４は、ホスト１より要求のあったアドレスで、各ディスク装置６−１〜６−ｎに対してリードコマンドを発行する。
【０１９７】
デバイスアダプタ５−１〜５−ｎを介して前記リードコマンドを受信したディスク装置６−１〜６−ｎは、指定されたアドレスのデータをリードする。そして、ディスク装置６−１〜６−ｎからリードしたデータは、ディスク装置６−１〜６−ｎに接続されている各デバイスアダプタ５−１〜５−ｎに転送され、それぞれメモリ１２−１〜１２−ｎに格納される。
【０１９８】
その後、ディスクアレイコントローラ４は、デバイスアダプタ５−１〜５−ｍのメモリ１２−１〜１２−ｍに格納されている分割データからＲＡＩＤ３に基づきホストデータを再構築（復元）する。この時、パリティ処理部１９は、前記メモリ１２−１〜１２−ｍに格納されている各分割データの排他的論理和を計算してリードパリティとし、このリードパリティを前記メモリ１２−ｎに格納されているパリティデータと比較する。その結果、両者が一致すれば、リードパリティチェックが正常であり、整合性に矛盾が無かったとして、前記再構築（復元）したホストデータをホストアダプタ３へ転送する。その後、ホストアダプタ３は前記データをホスト１へ転送する。
【０１９９】
(3) ：ＲＡＩＤ３でのリード処理において、パリティの整合性に矛盾が有った場合の処理説明
前記のように、ディスク装置からのデータのリード時に、デバイスアダプタ５−１〜５−ｍのメモリ１２−１〜１２−ｍに格納されている各データの排他的論理和を計算して求めたリードパリティデータと、デバイスアダプタ５−ｎのメモリ１２−ｎに格納されているパリティデータとの値が不一致であった場合、整合性に矛盾が有るとして次の処理を行う。
【０２００】
この場合、カウンタデータ処理部２１は、各デバイスアダプタ５−１〜５−ｎのメモリ１２−１〜１２−ｎに格納されているデータのカウンタ値を調べる。そして、ディスクアレイコントローラ４は最も古いカウンタ値を持つデータを誤ったデータとして決定する。      
【０２０１】
そして、ディスクアレイコントローラ４は、最古のカウンタ値を持つ誤ったデータを除いて、他のデバイスアダプタのメモリに格納されているデータからＲＡＩＤ３のデータリカバリ方法に基づき、ホストデータを再構築する。前記再構築されたホストデータは、正しいデータとしてホストアダプタ３へ転送される。ホストアダプタ３は前記データを受け取ると、そのデータをホスト１へ転送する。
【０２０２】
§４：フローチャートによる処理の説明・・・図１３参照
図１３は実施の形態５の処理フローチャートである。以下、図１３に基づいて実施の形態５の処理を説明する。なお、Ｓ８１〜Ｓ９２は各処理ステップを示す。
【０２０３】
処理が開始され、ホストアダプタ３がホスト１の発行したコマンドを受信すると（Ｓ８１）、ホストアダプタ３は前記コマンドをメモリ１０に一時格納し、そのコマンドを解析して内容を判断する（Ｓ８２）。その結果、前記コマンドがライトコマンドであれば、ＲＡＩＤ３でのデータライト（書き込み）時の処理を次のようにして行う。
【０２０４】
前記のように、ホストアダプタ３は、ホスト１よりライトコマンドと共に書き込み要求のあったホストデータを受信すると、そのホストデータをメモリ１０に一時格納する。そして、ホストアダプタ３は前記ホストデータをディスクアレイコントローラ４へ転送する（Ｓ８３）。
【０２０５】
ディスクアレイコントローラ４はホストデータを受け取ると、ＲＡＩＤ３に基づき、ホストデータをｍ個のデータに分割して各ディスク装置６−１〜６−ｍに割り振る分割データを作成する。また、パリティ処理部１９は前記ｍ個の分割データの排他的論理和を計算してパリティデータを作成する。そして、カウンタデータ処理部２１は更新カウンタ２２から現在のカウンタ値を読み取り、そのカウンタ値を前記各分割データ及びパリティデータに付加する。
【０２０６】
次にディスクアレイコントローラ４はディスク装置６−１〜６−ｎに対してライトコマンドを発行すると共に、前記作成した各ディスク装置毎のカウンタ値付き分割データをデバイスアダプタ５−１〜５−ｍへ転送する。これと同時に、デバイスアダプタ５−ｎには、前記カウンタ値付きパリティデータを転送する（Ｓ８４）。
【０２０７】
その後、デバイスアダプタ５−１〜５−ｍは、各々接続されているディスク装置６−１〜６−ｍに前記ライトコマンドを送ると共に、前記カウンタ値付き分割データを転送する。そして、ディスク装置６−１〜６−ｍは記憶媒体に前記カウンタ値付き分割データを書き込む。また、デバイスアダプタ５−ｎは、接続されているディスク装置６−ｎにライトコマンドを送ると共に、前記カウンタ値付きパリティデータを転送し、ディスク装置６−ｎは記憶媒体にカウンタ値付きパリティデータを書き込み（Ｓ８５）ライト処理を終了する。
【０２０８】
また、前記Ｓ８２の処理で、受信したコマンドがリードコマンドであった場合、ホストアダプタ３は、そのコマンドの内容をディスクアレイコントローラ４へ通知する。この通知を受け取ったディスクアレイコントローラ４は、ホスト１より要求のあったアドレスで各ディスク装置６−１〜６−ｎに対してリードコマンドを発行する（Ｓ８６）。
【０２０９】
デバイスアダプタ５−１〜５−ｎを介して前記リードコマンドを受信したディスク装置６−１〜６−ｎは、指定されたアドレスのデータをリードする。そして、ディスク装置６−１〜６−ｎからリードしたカウンタ値付きデータは、ディスク装置６−１〜６−ｎに接続されている各デバイスアダプタ５−１〜５−ｎに転送され、それぞれメモリ１２−１〜１２−ｎに格納される（Ｓ８７）。
【０２１０】
その後、ディスクアレイコントローラ４は、デバイスアダプタ５−１〜５−ｍのメモリ１２−１〜１２−ｍに格納されている分割データからホストデータを再構築する。また、パリティ処理部１９は、前記ホストデータの再構築と同時にデバイスアダプタ５−１〜５−ｍに格納されているデータの排他的論理和を計算してリードパリティを作成し、前記リードパリティをデバイスアダプタ５−ｎのメモリ１２−ｎに格納されているパリティと比較することでリードパリティチェックを行う（Ｓ２８）。
【０２１１】
その結果、両者が一致すれば、リードパリティチェックが正常であり、整合性に矛盾が無かったとして、前記再構築したホストデータをホストアダプタ３へ転送する（Ｓ９２）。その後、ホストアダプタ３は前記ホストデータをホスト１へ転送する（Ｓ９１）。
【０２１２】
しかし、前記Ｓ２８のリードパリティチェック処理で、不一致の場合、整合性に矛盾が有ったとする。すなわち、前記のようにパリティが不一致と分かった時点で以下のようなデータリカバリ処理を実施する。この場合、ディスクアレイコントローラ４は、各デバイスアダプタ５−１〜５−ｎのメモリ１２−１〜１２−ｎに格納されているデータのカウンタ値を調べ、このカウンタ値が一番古いもの（最古のカウンタ値を持ったデータ）を誤ったデータと決定する。
【０２１３】
そして、最古のカウンタ値を持つ誤ったデータを除いて、他のデバイスアダプタのメモリに格納されているデータからＲＡＩＤ３のデータリカバリ処理に基づき、ホストデータを再構築する（Ｓ８９）。前記再構築されたホストデータは、正しいデータとしてホストアダプタ３へ転送される（Ｓ９０）。ホストアダプタ３は前記データを受け取ると、そのデータをホスト１へ転送する（Ｓ９１）。
【０２１４】
（実施の形態６の説明）
§１：実施の形態６の処理の説明・・・図１２参照
実施の形態６は、実施の形態３の処理における時刻データの代わりとして前記更新カウンタのカウンタ値を用いた例である。なお、実施の形態６のディスクアレイ装置は前記実施の形態５の装置をＲＡＩＤ５の装置としたものなので、図１２を援用して説明する。この例ではＲＡＩＤ５により次のようにして処理を行う。この場合、以下に説明する処理は、全ディスク装置へのアクセスが行われる場合の例である。
【０２１５】
(1) ：ＲＡＩＤ５でのライト時の処理
ＲＡＩＤ５でのデータライト時の処理は次の通りである。この場合、ディスク装置６−１〜６−ｎの全てを分割データ及びパリティデータの格納用として、データのリード／ライト時の処理を次のようにして行う。
【０２１６】
先ず、ホストアダプタ３は、ホスト１よりライトコマンドと共に書き込み要求のあったホストデータを受信すると、そのホストデータをメモリ１０に一時格納する。次に、ホストアダプタ３は、前記ホストデータをディスクアレイコントローラ４へ転送する。
【０２１７】
ディスクアレイコントローラ４はホストデータを受け取ると、ＲＡＩＤ５に基づき、ホストデータをセクタ単位でｍ個のデータに分割して、パリティデータ格納用の１つのディスク装置を除く他の各ディスク装置に割り振る分割データを作成する。また、パリティ処理部１９は、前記ｍ個の分割データの排他的論理和を計算してパリティデータを作成する。そして、カウンタデータ処理部２１は更新カウンタ２２から現在のカウンタ値を読み取り、そのカウンタ値を前記各分割データ、及びパリティデータに付加する。
【０２１８】
次にディスクアレイコントローラ４は、ディスク装置６−１〜６−ｎに対してライトコマンドを発行すると共に、前記カウンタ値付き分割データをデバイスアダプタ５−１〜５−ｎの内の該当するｍ個のデバイスアダプタへ転送する。これと同時に、残りの１つのデバイスアダプタには、前記カウンタ値付きパリティデータを転送する。
【０２１９】
その後、前記カウンタ値付き分割データを格納しているデバイスアダプタは、各々接続されているディスク装置に前記ライトコマンドを送ると共に、前記カウンタ値付き分割データを転送する。そして、前記カウンタ値付き分割データを受信したディスク装置は記憶媒体に前記カウンタ値付き分割データを書き込む。また、カウンタ値付きパリティデータを格納しているデバイスアダプタは、接続されているディスク装置にライトコマンドを送ると共に、前記カウンタ値付きパリティデータを転送し、そのディスク装置は記憶媒体にカウンタ値付きパリティデータを書き込む。
【０２２０】
(2) ：ＲＡＩＤ５でのリード処理において、パリティの整合性に矛盾が無かった場合の処理説明
ＲＡＩＤ５でのリード処理時に、パリティの整合性に矛盾がなかった場合の処理は次の通りである。先ず、ホスト１の発行したリードコマンドをホストアダプタ３が受信すると、ホストアダプタ３は、そのコマンドの内容をディスクアレイコントローラ４へ通知する。この通知を受け取ったディスクアレイコントローラ４は、ホスト１より要求のあったアドレスで各ディスク装置６−１〜６−ｎに対してリードコマンドを発行する。
【０２２１】
デバイスアダプタ５−１〜５−ｎを介して前記リードコマンドを受信したディスク装置６−１〜６−ｎは、指定されたアドレスのデータをリードする。そして、ディスク装置６−１〜６−ｎからリードしたデータは、ディスク装置６−１〜６−ｎに接続されている各デバイスアダプタ５−１〜５−ｎに転送され、それぞれメモリ１２−１〜１２−ｎに格納される。
【０２２２】
その後、ディスクアレイコントローラ４は、デバイスアダプタのメモリに格納されている分割データからＲＡＩＤ５に基づきホストデータを再構築（復元）する。この時、パリティ処理部１９は、前記メモリに格納されている各分割データの排他的論理和を計算してリードパリティとし、このリードパリティを前記いずれか１つのメモリに格納されているパリティデータと比較する。
【０２２３】
その結果、両者が一致すれば、リードパリティチェックが正常であり、整合性に矛盾が無かったとして、前記再構築した（復元）データをホストアダプタ３へ転送する。その後、ホストアダプタ３は前記データをホスト１へ転送する。
【０２２４】
(3) ：ＲＡＩＤ５でのリード処理において、パリティの整合性に矛盾が有った場合の処理説明
前記のように、ディスク装置からのデータリード時に、デバイスアダプタのメモリに格納されている各分割データの排他的論理和を計算して求めたリードパリティデータと、いずれか１つのデバイスアダプタのメモリに格納されているパリティデータとの値が不一致であった場合、整合性に矛盾が有るとして次の処理を行う。
【０２２５】
この場合、時刻データ処理部１３は、各デバイスアダプタ５−１〜５−ｎのメモリ１２−１〜１２−ｎに格納されているデータのカウンタ値を調べ、このカウンタ値が一番古いものを誤ったデータとして決定する。そして、ディスクアレイコントローラ４は、最古のカウンタ値を持つ誤ったデータを除いて、他のデバイスアダプタのメモリに格納されているデータからＲＡＩＤ５のデータリカバリ方法に基づき、ホストデータを再構築する。前記再構築されたホストデータは、正しいデータとしてホストアダプタ３へ転送される。ホストアダプタ３は前記データを受け取ると、そのデータをホスト１へ転送する。
【０２２６】
（実施の形態７の説明）
§１：実施の形態７の処理の説明・・・図１２参照
実施の形態７は、実施の形態４の処理における時刻データの代わりとして前記更新カウンタのカウンタ値を用いた例である。なお、実施の形態７のディスクアレイ装置は前記実施の形態５の装置をＲＡＩＤ４の装置としたものなので、図１２を援用して説明する。この例ではＲＡＩＤ４により次のようにして処理を行う。
【０２２７】
(1) ：ＲＡＩＤ１でのライト時の処理
ＲＡＩＤ１でのデータのリード／ライト時の処理を次のようにして行う。先ず、ホストアダプタ３は、ホスト１よりライトコマンドと共に書き込み要求のあったホストデータを受信すると、そのホストデータをメモリ１０に一時格納する。次に、ホストアダプタ３は、前記ホストデータをディスクアレイコントローラ４へ転送する。
【０２２８】
ディスクアレイコントローラ４が前記ホストデータを受け取ると、カウンタデータ処理部２１は更新カウンタ２２から現在のカウンタ値を読み取り、そのカウンタ値を前記ホストデータに付加する。次にディスクアレイコントローラ４は、ディスク装置６−１、６−２に対してライトコマンドを発行すると共に、前記カウンタ値付きデータをデバイスアダプタ５−１、５−２へ転送する。
【０２２９】
その後、デバイスアダプタ５−１、５−２は、各々接続されているディスク装置６−１、６−２に前記ライトコマンドを送ると共に、前記カウンタ値付きデータを転送する。そして、ディスク装置６−１、６−２は記憶媒体に前記カウンタ値付きホストデータを書き込む。このようにしてディスク装置６−１と６−２には同一のカウンタ値付きホストデータ（ミラーデータ）が書き込まれる。
【０２３０】
(2) ：ＲＡＩＤ１でのリード処理において、ミラーデータ相互の比較処理で結果が等しかった場合の処理説明
ＲＡＩＤ１でのリード処理時に、ミラーデータ相互の比較処理で結果が等しかった場合の処理は次の通りである。先ず、ホスト１の発行したリードコマンドをホストアダプタ３が受信すると、ホストアダプタ３は、そのコマンドの内容をディスクアレイコントローラ４へ通知する。この通知を受け取ったディスクアレイコントローラ４は、ホスト１より要求のあったアドレスで各ディスク装置６−１、６−２に対してリードコマンドを発行する。
【０２３１】
デバイスアダプタ５−１、５−２を介して前記リードコマンドを受信したディスク装置６−１、６−２は、指定されたアドレスのデータをリードする。そして、ディスク装置６−１、６−２からリードしたデータは、ディスク装置６−１、６−２に接続されている各デバイスアダプタ５−１、５−２に転送され、それぞれメモリ１２−１、１２−２に格納される。
【０２３２】
その後、ディスクアレイコントローラ４は、デバイスアダプタ５−１のメモリ１２−１に格納されているデータと、デバイスアダプタ５−２のメモリ１２−２に格納されているデータとの比較を行う（ミラーデータの比較）。その結果、両者が一致すれば、いずれか一方のデータ（例えば、メモリ１２−１に格納されているデータ）を正しいホストデータであるとしてホストアダプタ３へ転送する。その後、ホストアダプタ３は前記データをホスト１へ転送する。
【０２３３】
(3) ：ＲＡＩＤ１でのリード処理において、ミラーデータ相互の比較処理で結果が等しくなかった場合の処理説明
前記のように、ディスク装置からのデータのリード時に、デバイスアダプタ５−１、５−２のメモリ１２−１、１２−２に格納されているデータの比較で、両者が不一致であった場合、カウンタデータ処理部２１は、各デバイスアダプタ５−１、５−２のメモリ１２−１、１２−２に格納されているデータのカウンタ値を調べ、このカウンタ値が古いものを誤ったデータとして決定する。
【０２３４】
そして、ディスクアレイコントローラ４は、最新のカウンタ値が書かれていた方のデータを正しいホストデータとして用いる。すなわち、古いカウンタ値を持つ誤ったデータを除いて、他のデバイスアダプタのメモリに格納されているデータを正しいホストデータとしてホストアダプタ３へ転送する。ホストアダプタ３は前記データを受け取ると、そのデータをホスト１へ転送する。
【０２３５】
（他の実施の形態）
以上実施の形態について説明したが、本発明は次のようにしても実施可能である。
【０２３６】
(1) ：前記時計の代わりにタイマを使用しても実現可能である。この場合、前記分割データ及びパリティデータに現在のタイマ値を付加してディスク装置に書き込み、データの読み出し時のパリティチェックで整合性に矛盾が有った場合は、前記タイマ値の比較により最古のタイマ値を持つデータを誤ったデータであるとして、ホストデータの再構築を行う。
【０２３７】
(2) ：前記更新カウンタは、データの書き込みが行われる度にカウンタ値が更新されるものでも良いが、このような例に限らず、例えば、一定時間毎にカウンタ値が更新されるものでも実現可能である。
【図面の簡単な説明】
【０２３８】
【図１】本発明の説明図である。
【図２】実施の形態１の装置構成図である。
【図３】実施の形態１の処理説明図である。
【図４】実施の形態１の処理フローチャートである。
【図５】実施の形態２の装置構成図である。
【図６】実施の形態２の処理説明図である。
【図７】実施の形態２の処理フローチャートである。
【図８】実施の形態３の装置説明図である。
【図９】実施の形態３の処理フローチャートである。
【図１０】実施の形態４の装置構成図である。
【図１１】実施の形態４の処理フローチャートである。
【図１２】実施の形態５の装置構成図である。
【図１３】実施の形態５の処理フローチャートである。
【図１４】従来のディスクアレイ装置の説明図である。
【図１５】ＲＡＩＤのレベル説明図である。
【符号の説明】
【０２３９】
１  ホスト（ホスト装置）
２  ディスクアレイ制御装置
３  ホストアダプタ
４  ディスクアレイコントローラ
５−１〜５−ｎ  デバイスアダプタ
６−１〜６−ｎ  ディスク装置
１０、１２−１〜１２−ｎ  メモリ
１１  ＣＲＣ付加処理部
１３  時刻データ処理部
１４  時計
１９  パリティ処理部
２０  ＣＲＣチェック部
２１  カウンタデータ処理部
２２  更新カウンタ
【図１】
0003676793.tif 000002
【図２】
0003676793.tif 000003
【図３】
0003676793.tif 000004
【図４】
0003676793.tif 000005
【図５】
0003676793.tif 000006
【図６】
0003676793.tif 000007
【図７】
0003676793.tif 000008
【図８】
0003676793.tif 000009
【図９】
0003676793.tif 000010
【図１０】
0003676793.tif 000011
【図１１】
0003676793.tif 000012
【図１２】
0003676793.tif 000013
【図１３】
0003676793.tif 000014
【図１４】
0003676793.tif 000015
【図１５】
0003676793.tif 000016