(57)【要約】【課題】  セクタ長拡張不能なシリアルＡＴＡ等のＨＤＤを使用した場合でも、ユーザデータに対し冗長コードを用いてデータアクセスにおけるアドレッシングの正当性の検証を行ってデータ信頼性を向上できるディスクアレイ装置を提供する。【解決手段】  コントローラ１０は、対象データについてＨＤＤ３０にライトする際に、その一部抽出データｄ１について、管理エリア１７側に格納すると共に、計算により生成したチェックコードｄ２をＸＯＲ演算する。そして演算結果データ（ＣＣ埋込データ）ｄ３を、対象データに戻してＨＤＤ３０にライトする。また、コントローラ１０は、対象データについてＨＤＤ３０からリードする際に、前記ＣＣ埋込データｄ３を取り出し、チェックコードｄ２を作用させるＸＯＲ演算を行うと共に、その演算結果データと管理エリア１７の一部抽出データｄ１とを比較・照合してアドレッシングの正当性をチェックし、ユーザデータを復元する。【選択図】  図８
2006079380.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置とコントローラとを有し、ＲＡＩＤ制御の機能を有するディスクアレイ装置であって、
前記記憶装置に対して格納される対象データについて、前記記憶装置に対するアクセスのアドレッシングの正当性を検証するチェック手段を有し、前記チェック手段は、
前記記憶装置への対象データのライト処理時に、前記対象データから一部抽出した第１のデータに対してチェックコードを埋め込む演算を行い、前記第１のデータを前記記憶装置とは別の管理エリア側に記憶し、前記チェックコードが埋め込まれた第２のデータを前記対象データ内に戻して前記記憶装置側に記憶する第１の処理と、
前記記憶装置からの前記対象データのリード処理時に、前記記憶装置から前記対象データとしてリードしたデータについて、前記第２のデータ相当のデータを取り出して前記ライト処理時と同一のチェックコードを作用させる演算を行って、その演算結果データと前記管理エリア側の第１のデータの値を比較することで前記正当性をチェックする第２の処理とを行うことを特徴とするディスクアレイ装置。
【請求項２】
請求項１記載のディスクアレイ装置において、
前記チェック手段は、
前記第１の処理では、前記第１のデータに前記チェックコードを埋め込む排他的論理和演算を行い、
前記第２の処理では、前記第２のデータに前記チェックコードを作用させる排他的論理和演算を行い、前記演算結果データと前記第１のデータの値を比較して値が一致する場合は前記対象データについてのアドレッシングが正常であると判断し、値が一致しない場合は前記対象データについてのアドレッシングが異常であると判断することを特徴とするディスクアレイ装置。
【請求項３】
請求項１記載のディスクアレイ装置において、
前記コントローラは、前記第１及び第２の処理時、前記記憶装置に対する前記対象データについてのアクセスのアドレス情報をもとに計算により前記チェックコードを生成することを特徴とするディスクアレイ装置。
【請求項４】
請求項１記載のディスクアレイ装置において、
前記チェック手段は、
前記ライト処理の際、前記対象データについて、前記記憶装置で扱う処理データ単位と対応した所定サイズのブロックごとに前記第１の処理を行い、
前記リード処理の際、前記記憶装置からリードした対象データについて、前記ブロックごとに前記第２の処理を行うことを特徴とするディスクアレイ装置。
【請求項５】
請求項１記載のディスクアレイ装置において、
前記管理エリアは、前記コントローラ内に有するメモリ上に設けられ、
前記メモリは、前記コントローラ内の前記第１及び第２の処理を実行する処理部から直接にアクセス可能で、前記処理部から前記メモリへのアクセスのパスは前記記憶装置へのアクセスのパスとは別となる構成であることを特徴とするディスクアレイ装置。
【請求項６】
請求項１記載のディスクアレイ装置において、
前記対象データが格納される記憶装置は、セクタ長が固定の形式のハードディスクドライブであることを特徴とするディスクアレイ装置。
【請求項７】
請求項１記載のディスクアレイ装置において、
前記コントローラから前記記憶装置とは別のパスでアクセス可能に接続される不揮発性の第２のメモリを有し、
前記チェック手段は、前記管理エリアに対して記憶するデータについて、前記第２のメモリ上の領域に対してセーブ／ロードする処理を行うことを特徴とするディスクアレイ装置。
【請求項８】
請求項１記載のディスクアレイ装置において、
前記チェック手段は、前記管理エリアに対して記憶するデータについて、前記記憶装置上のシステム領域に対して設けられた領域にセーブ／ロードする処理を行うことを特徴とするディスクアレイ装置。
【請求項９】
請求項１記載のディスクアレイ装置において、
前記チェック手段は、前記第１の処理時に、前記対象データにおける処理データ単位において、データ更新領域を含んだ複数箇所からデータを一部抽出して、前記チェックコードを埋め込む演算を行い、
前記第２の処理時に、前記対象データにおける処理データ単位において、前記複数箇所に対応したデータを用いて前記チェックを行うことを特徴とするディスクアレイ装置。
【請求項１０】
請求項１記載のディスクアレイ装置において、
前記ＲＡＩＤ制御として前記記憶装置のグループに対して前記対象データをストライピング及びパリティ処理してデータとパリティを入出力する処理を行い、
前記チェック手段は、前記ストライピングされたデータとパリティのすべてを対象に前記第１及び第２の処理を行うことを特徴とするディスクアレイ装置。
【請求項１１】
請求項１記載のディスクアレイ装置において、
前記ＲＡＩＤ制御として前記記憶装置のグループに対して前記対象データをストライピング及びパリティ処理してデータとパリティを入出力する処理を行い、
前記チェック手段は、前記ストライピングされたデータとパリティのうちパリティのみを対象に前記第１及び第２の処理を行い、
前記パリティ処理として、前記第２の処理により前記正当性がチェックされたパリティを用いて前記データについてのパリティチェックを行うことを特徴とするディスクアレイ装置。
【請求項１２】
請求項１記載のディスクアレイ装置において、
前記ＲＡＩＤ制御として前記記憶装置のグループに対して前記対象データをミラーリングして同一データを入出力する処理を行い、
前記チェック手段は、前記ミラーリングされたデータの一方のみを対象に前記第１及び第２の処理を行うことを特徴とするディスクアレイ装置。
【請求項１３】
請求項１記載のディスクアレイ装置において、
前記チェック手段は、前記対象データについて、前記記憶装置で扱う処理データ単位と対応した所定サイズの複数のブロックをまとめて１つの単位として管理し、
前記第１の処理時に、前記対象データにおける複数のブロックのうち一部ブロックから一部抽出した第１のデータに対してチェックコードを埋め込む演算を行い、前記チェックコードが埋め込まれた第２のデータを前記対象データ内に戻して前記記憶装置側に記憶し、前記管理エリア側に、前記第１のデータと、前記一部ブロックにおける抽出位置と対応した前記複数のブロックにおける他のブロックの一部データについてＸＯＲ演算した結果のデータとを記憶し、
前記第２の処理時に、前記記憶装置から前記対象データとしてリードしたデータについて、前記第２のデータ相当のデータを取り出して、前記チェックコードを作用させる演算を行った結果のデータと、前記管理エリア側の第１のデータ及び前記他のブロックの一部データについてＸＯＲ演算した結果のデータとを用いて、前記複数のブロックにおける前記正当性をチェックすることを特徴とするディスクアレイ装置。
【請求項１４】
請求項１記載のディスクアレイ装置において、
前記ＲＡＩＤ制御として前記記憶装置のグループに対して前記対象データをストライピング及びパリティ処理してデータとパリティを入出力する処理を行い、
前記チェック手段は、前記ＲＡＩＤ制御による前記記憶装置に記憶されているデータからのサンプリングによるパリティチェックの実行と同タイミングで、前記第２の処理を実行することを特徴とするディスクアレイ装置。
【請求項１５】
請求項１記載のディスクアレイ装置において、
前記チェック手段は、
前記リード処理時の前記第２の処理で、前記記憶装置から前記対象データとしてリードしたデータについて、前記第２のデータ相当のデータを取り出して前記管理エリア側の第１のデータを作用させる演算を行って、その演算結果データと前記ライト処理時と同一のチェックコードの値を比較することで前記正当性をチェックする処理を行うことを特徴とするディスクアレイ装置。
【請求項１６】
請求項１記載のディスクアレイ装置において、
前記ＲＡＩＤ制御による処理と前記チェック手段による前記第２の処理の実行によって前記アドレッシングの正当性のチェック結果としてエラーが検出された際に、ディスクアレイ装置における異常の状態に応じた対応処理を行うエラー処理手段を有し、
前記エラー処理手段は、異常のタイプを判断する処理と、異常と判断された部分を閉塞する処理と、異常と判断された部分に記憶されているデータについて冗長記憶装置を用いて回復する処理とを行うことを特徴とするディスクアレイ装置。
【請求項１７】
請求項１記載のディスクアレイ装置において、
前記記憶装置へ格納するデータに対して、計算で得られる規則的なコードを埋め込む処理を行うことで特定のデータパターンを回避するデータ変換手段を有し、
前記ライト処理の際、前記チェック手段により対象データに対して前記第１の処理を行うと共に、前記データ変換手段により前記対象データにおいて前記第１の処理の対象となる領域以外の領域を対象として、前記規則的なコードを埋め込むＸＯＲ演算を行ってライトパターンを生成し、前記記憶装置にライトする処理を行い、
前記リード処理の際、前記記憶装置からリードしたデータについて前記データ変換手段により前記ライト処理の際と逆の演算を行うことで元データへ復元すると共に、前記チェック手段により前記第２の処理を行って前記正当性をチェックすることを特徴とするディスクアレイ装置。
【請求項１８】
記憶装置とコントローラとを有し、ＲＡＩＤ制御の機能を有するディスクアレイ装置であって、
前記記憶装置に対して格納される対象データについて、前記記憶装置に対するアクセスのアドレッシングの正当性を検証するチェック手段を有し、前記チェック手段は、
前記記憶装置への対象データのライト処理時に、前記対象データから一部抽出した第１のデータに対してチェックコードを埋め込む演算を行い、前記チェックコードが埋め込まれた第２のデータを前記記憶装置とは別の管理エリア側に記憶し、前記第１のデータが含まれる前記対象データを前記記憶装置側に記憶する第１の処理と、
前記記憶装置からの前記対象データのリード処理時に、前記記憶装置から前記対象データとしてリードしたデータについて、前記第１のデータ相当のデータを取り出して前記ライト処理時と同一のチェックコードを作用させる演算を行って、その演算結果データと前記管理エリア側の第２のデータの値を比較することで前記正当性をチェックする第２の処理とを行うことを特徴とするディスクアレイ装置。
【請求項１９】
請求項１８記載のディスクアレイ装置において、
前記チェック手段は、
前記リード処理時の前記第２の処理で、前記記憶装置から前記対象データとしてリードしたデータについて、前記第１のデータ相当のデータを取り出して前記管理エリア側の第２のデータを作用させる演算を行って、その演算結果データと前記ライト処理時と同一のチェックコードの値を比較することで前記正当性をチェックする処理を行うことを特徴とするディスクアレイ装置。
【請求項２０】
請求項１８記載のディスクアレイ装置において、
前記チェック手段は、前記対象データのデータパターンに応じて、前記第１、第２のデータの格納先を、前記記憶装置側、管理エリア側とで逆側に変更する機能を有し、
前記記憶装置のフォーマット処理時に、前記変更を実行して前記管理エリア側に前記第１のデータ、前記記憶装置側に前記第２のデータを記憶することを特徴とするディスクアレイ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置にデータを記憶する制御を行うディスクアレイ装置（ストレージ装置）に関し、特に、ディスクアレイ装置におけるデータ信頼性を確保するためのデータ検証の技術に関するものである。
【背景技術】
【０００２】
近年、ディスクアレイ装置における記憶容量の増大に伴い、情報処理システムにおける重要性が益々高まってきている。そこで、ディスクアレイ装置において、ユーザデータの信頼性を確保するために、ホストとなる情報処理装置等からのデータ入出力要求に対して、要求された位置に正しくデータの書き込みを行うこと、及び、要求に応じて読み出したデータが正しくない場合にはそれを検出することが重要である。
【０００３】
ディスクアレイ装置でデータ信頼性を確保するための技術としては、ＨＤＤ（ハードディスクドライブ）等の記憶装置に記憶するデータに冗長コード（チェックコード）を付加して記憶し、当該データのリード時に前記付加されている冗長コードを用いてデータアクセスにおけるアドレッシングの正当性を検証する方法がある。
【０００４】
従来のＳＣＳＩ（Small Computer System Interface）やファイバチャネル（ＦＣ）に対応のＨＤＤにおいては、セクタ長を拡張してその拡張部分に前記冗長コードを記録する方式が用いられている。
【０００５】
また特許文献１には、ＡＴＡ（AT Attachment）を用いたディスクアレイ装置について記載されている。ＡＴＡでは、セクタ長が固定であり拡張不能な形式である。
【特許文献１】米国特許出願公開第２００３／０１３５５７７号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ディスクアレイ装置においては、使用される記憶装置として、ＦＣに対応したＨＤＤに加えて、シリアルＡＴＡやパラレルＡＴＡ等の規格に対応したＨＤＤなども利用され始めている。これは、シリアルＡＴＡ等に対応のＨＤＤが、ＦＣ等に対応のＨＤＤと比較して信頼性は劣るが安価であるためである。そこで、このようにＡＴＡ等の規格に対応のＨＤＤを使用して構成するディスクアレイ装置においても、ユーザデータの信頼性を高めることが求められる。
【０００７】
従来のディスクアレイ装置において、ＲＡＩＤグループを構成するＨＤＤ上にストライピングされたデータにライトアクセスする際に、データ信頼性を高めるために、ユーザデータと共に、システムで使用される前記冗長コードを、記憶領域に記録している。この際、ＨＤＤで扱う記憶領域単位であるセクタ（ブロック）に対して前記冗長コードが付加される。前記冗長コードとしては、対象データの論理アドレスやＨＤＤ位置情報などが用いられる。また前記ＨＤＤ上から前記ストライピングされたデータをリードアクセスする際に、読み出したデータと前記冗長コードを比較して、そのアドレッシングが正当で正しいデータであるかどうかがチェックされる。
【０００８】
前記ＳＣＳＩやＦＣに対応のＨＤＤにおいては、セクタ長拡張部分に冗長コードを記録して検証を行う方式が用いられているが、ＡＴＡ（ＩＤＥ）やシリアルＡＴＡ等におけるセクタ長は拡張不能のため、前記セクタ長拡張部分に冗長コードを記録する方式は使用できない。従ってＡＴＡ等のセクタ長固定のＨＤＤを採用するディスクアレイ装置及びコンピュータシステムでは、前記アドレッシングの正当性に関して、ＳＣＳＩやＦＣに対応のＨＤＤを採用するシステムに比べ、単純比較で同等の信頼性が確保できていない。
【０００９】
本発明は以上のような問題に鑑みてなされたものであり、その目的は、ディスクアレイ装置で、データ単位長の拡張によって冗長コード用の領域を確保することができないＡＴＡ等に対応した記憶装置を使用した場合であっても、ユーザデータに対応した冗長コードを用いてデータアクセスにおけるアドレッシングの正当性の検証を行うことでデータ信頼性を向上できる技術を提供することである。
【００１０】
また本発明の他の目的は、上記に関連して、ディスクアレイ装置のハードウェア特性におけるデータパターン依存性を軽減してデータバス変動を軽減し、データ信頼性を向上できる技術を提供することである。
【課題を解決するための手段】
【００１１】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、次の（１）〜（６）に示すとおりである。
【００１２】
（１）前記目的を達成するために、本発明のディスクアレイ装置は、１つ以上のＨＤＤ等の記憶装置と、記憶装置へデータを記憶する制御を行うコントローラ（制御装置）とを有し、コントローラに対して接続される複数の記憶装置に対するＲＡＩＤ制御の機能を有する装置であって、以下のような技術的手段を有することを特徴とする。
【００１３】
本発明のディスクアレイ装置は、データ信頼性確保の対象となるデータ、すなわちホストとなる情報処理装置がディスクアレイ装置に対して入出力するユーザデータを含むデータについて、記憶装置におけるデータアクセスのアドレッシングの正当性を、システムが使用するチェックコード（冗長コード）を用いて検証するチェック手段を有する。
【００１４】
前記チェック手段によるチェック方式では、第１の処理（チェックコード埋め込み処理）として、記憶装置への対象データのライト処理時（以下、単にライト処理とも称する）に、対象データの一部を抽出し、抽出データに対して前記チェックコードを埋め込む演算を行うことで、前記正当性のチェックの際に使用する関連した２つのデータ（以下、チェック用データと称する）である、前記内容は元のままの一部抽出データである第１のデータと、前記チェックコードが埋め込まれたデータ（以下、ＣＣ埋込データと称する）である第２のデータとを作成し、一方を対象データの元の位置（前記抽出位置）に戻して記憶装置側に、他方をシステム内で記憶装置とは別の管理エリア側に記憶して管理する。前記管理エリアは、コントローラが処理制御用にアクセスする領域である。
【００１５】
また、前記チェック手段は、第２の処理（チェック処理）として、記憶装置からの前記対象データのリード処理時（以下、単にリード処理とも称する）に、記憶装置から前記対象データとしてリードしたデータ（正常な場合は前記対象データと一致）について、前記チェック用データ（第１及び第２のデータ）に相当するデータを取り出し、前記記憶装置側からチェック用データとしてリードしたデータ（正常な場合は前記第２のデータと一致）に対して、前記埋め込み時と同一のチェックコードを作用させる演算を行い、その演算結果と、前記管理エリア側に記憶しておいたチェック用データ（第１のデータ）の値を比較・照合することで、当該対象データについてのアドレッシング正当性をチェックし、正常の場合は、前記比較・照合したデータ（元の一部抽出データと一致）を前記第１のデータ（元の一部抽出データ）の位置に戻して、ユーザデータを復元したのち、ホストへ転送する。
【００１６】
また前記チェック手段は、前記１の処理では、ライト処理の際に、前記第１のデータに対してチェックコードを埋め込む演算としてＸＯＲ（排他的論理和）演算を行う。また前記チェック手段は、前記第２の処理では、リード処理の際に、記憶装置側からリードしたチェック用データにチェックコードを作用させる演算としてＸＯＲ演算を行って、管理エリア側のチェック用データと値を比較することで前記正当性をチェックする。前記チェック手段は、前記比較で値が一致する場合は対象データについてアドレッシングが正常であると判断し、値が一致しない場合は対象データについてアドレッシングが異常（エラー）であると判断する。
【００１７】
また前記チェックコードは、対象データについて、ライト処理時における前記第１の処理の際とリード処理時における前記第２の処理の際とで同一値となるデータであり、記憶装置に対する対象データについてのアクセス対象のアドレス情報などをもとに、アクセスの都度、コントローラで計算により生成される。また、前記第１の処理として、対象データからの一部抽出データに対し、チェックコードとして、アドレス情報と制御コードとをそれぞれ割り当てて、埋め込みを行うようにしてもよい。
【００１８】
また前記チェック手段は、ライト処理の際、対象データについて、記憶装置で扱う処理データ単位と対応した所定サイズのブロックごとに前記第１の処理を行い、リード処理の際、記憶装置からリードしたデータについて、ブロックごとに前記第２の処理を行う。また前記チェック手段による処理データ単位（ブロック）及び前記管理エリアにチェック用データとして保存するデータ単位（前記対象データからの抽出位置や抽出バイト数など）について、記憶装置のセクタ単位、ディスクアレイ装置のＯＳ等におけるクラスタ単位、ＲＡＩＤ方式におけるストライプ単位などに応じて設定する。例えばプログラム等により任意に設定可能とする。
【００１９】
また前記管理エリアは、例えばコントローラ内に有するメモリ（第１のメモリとする）上に設けられ、コントローラ内の前記第１及び第２の処理を実行する処理部から直接にアクセス可能で、前記処理部から前記第１のメモリへのアクセスのパスは前記記憶装置へのアクセスのパスとは別となる構成である。
【００２０】
またコントローラは、例えば、ＣＰＵ、メモリ、データコントローラ、キャッシュメモリ、チャネル制御部、ディスク制御部などにより構成される。ＣＰＵやデータコントローラやディスク制御部などの処理部により、前記チェック手段による第１の処理や第２の処理を実行する。データコントローラは、コントローラ内の各部間での制御情報やデータの転送などを処理する。キャッシュメモリには対象データなどが一時的に格納される。チャネル制御部はホストとなる情報処理装置との対象データの入出力を含む通信処理を行う。ディスク制御部は、記憶装置に対するデータの入出力を含む通信処理を行う。
【００２１】
また本発明の各ディスクアレイ装置で使用する記憶装置としては、扱うセクタやブロック等のデータ単位長が固定（拡張不能）の形式であるＡＴＡやシリアルＡＴＡ等に対応のＨＤＤや、またそれに限らず、扱うデータ単位長が拡張可能な形式であるＳＣＳＩやＦＣ等に対応のＨＤＤなどが可能である。記憶装置は、コントローラから転送された対象データをディスクへライトし、またディスクから対象データをリードしてコントローラに転送する。
【００２２】
また、本発明の他のディスクアレイ装置では、前記第１のメモリとは別の、コントローラから記憶装置とは別に直接に高速アクセス可能に接続される不揮発性の第２のメモリ（フラッシュメモリストレージ）を有し、前記チェック手段は、前記第１のメモリ上の管理エリア（第１の管理エリアとする）に対して記憶するデータ（チェック用データ）について、前記第２のメモリ上の領域（第２の管理エリアとする）に対してセーブ／ロードする処理を行う。コントローラは、必要に応じて第２の管理エリアに対して前記チェック用データを記憶し、また第１の管理エリアのデータを第２の管理エリアへ転送して記憶したり、第２の管理エリアのデータを第１の管理エリアへ転送して記憶したりする。例えば、通常は前記第１のメモリ上の第１の管理エリアを使用し、その容量に余裕がなくなってきた場合などに、前記第２のメモリ上の第２の管理エリアを使用する。
【００２３】
また、本発明の他のディスクアレイ装置では、前記チェック手段は、前記第１の管理エリアに記憶するデータ（チェック用データ）を、前記記憶装置上に設けられるシステム領域内の領域（第３の管理エリアとする）に対してセーブ／ロードする処理を行う。例えば、通常は前記第１のメモリ上の第１の管理エリアを使用し、対象データのアドレスが、前記チェック用データがカバーするアドレスの範囲から外れた場合などに、前記記憶装置上のシステム領域における第３の管理エリアの当該位置に前記チェック用データをセーブし、新たに前記対象データのアドレスをカバーするチェック用データを前記第１のメモリ上の第１の管理エリアにロードして処理を継続する。また、本構成で前記チェック用データを前記第３の管理エリアに対してセーブ／ロードする場合に、前記第３の管理エリアに記憶されるチェック用データに対しては、ユーザデータに付加するチェックコードよりも強力な、例えばサムチェックやＥＣＣ等のチェックコードの付加や、チェック用データの多重書き等の、より信頼性の高い処理を行うことで、ＣＣ埋込データの信頼性を高めることができる。
【００２４】
また本発明の他のディスクアレイ装置では、前記チェック手段は、前記対象データにおける処理データ単位において、データ更新領域を含む複数箇所からの一部抽出データを前記チェック用データとして使用する。例えば二箇所からの一部抽出データを使用する。前記チェック手段は、前記ライト処理時における第１の処理において、対象データにおける第１の抽出位置からの第１の一部抽出データと、この抽出領域以外のデータ更新領域における第２の抽出位置からの第２の一部抽出データと、前記第２の抽出位置を示す情報とをセットで、チェック用データとして管理エリア側に記憶する。対象データにおける前記第１の一部抽出データの位置にはチェックコードとの演算により作成されたＣＣ埋込データが戻され、前記第２の一部抽出データの位置のデータには何の操作も行わない。そして、前記リード処理時における第２の処理では、第１の一部抽出データの位置には前記埋め込み時と同一のチェックコードを作用させる演算により作成されたデータと前記チェック用データにおける第１の一部抽出データとの比較・照合を行い、また前記第２の抽出位置を示し情報により特定された前記第２の一部抽出データの位置のデータと前記チェック用データにおける第２の一部抽出データとを比較・照合することによるチェック処理を行う。
【００２５】
また、この場合は、前記２つの抽出データ長を、システムが演算により生成するチェックコードの半分とし、第１の一部抽出データの位置のデータに前記チェックコードの前半部分を、第２の一部場合データの位置のデータに前記チェックコードの後半部分を作用させて、それぞれの位置に埋め戻し、そして、前記リード処理時における第２の処理では、リードした前記二箇所の抽出位置に対応したチェック用データを用いてチェック処理を行うようにしてもよい。
【００２６】
また本発明のディスクアレイ装置は、ＲＡＩＤ制御の機能として特に、ＲＡＩＤ方式に応じてＲＡＩＤグループを構成する記憶装置グループに対する対象データのストライピング及びパリティ処理を行って、記憶装置グループに対してデータ（非パリティ）とパリティを並列的に入出力する処理を行うと共に、前記記憶装置グループにおけるすべてまたは一部の記憶装置（または記憶領域）を対象として、前記チェック手段による第１、第２の処理も実行する。パリティ処理を行う場合、ライト処理時に対象データのストライピングとパリティ生成・付加を行い、データをデータ格納先の記憶装置（データディスク）へ、パリティをパリティ格納先の記憶装置（パリティディスク）へライトする。またリード処理時に、パリティディスクからのパリティを用いてデータディスクからのデータについてのパリティチェックを行うことができる。
【００２７】
本発明のディスクアレイ装置は、特に、前記チェック手段が、記憶装置グループにおけるストライピングされたデータとパリティのすべてを対象に前記第１及び第２の処理を行う。本装置では、前記パリティを用いたＲＡＩＤ制御の処理と共に、前記チェック手段により、ライト処理時にストライピングデータに対して前記第１の処理を行う。
【００２８】
また本発明の他のディスクアレイ装置は、特に、前記チェック手段が、記憶装置グループにおけるストライピングされたデータとパリティのうちパリティのみを対象に前記第１及び第２の処理を行う。本装置では、前記パリティを用いたＲＡＩＤ制御の処理と共に、前記チェック手段により、ライト処理時にパリティに対して前記第１の処理を行い、またリード処理時にパリティディスクからリードしたパリティを、前記第２の処理により正当性をチェックし、正当性がチェックされたパリティを用いて、データディスクからリードしたデータについてのチェック（パリティチェック）を行う。
【００２９】
また、本発明の他のディスクアレイ装置は、ＲＡＩＤ制御の機能として特に、ＲＡＩＤ方式に応じてＲＡＩＤグループを構成する記憶装置グループに対する対象データのミラーリング処理を行って、ミラーを構成する記憶装置グループに対して同一データを入出力する処理を行うと共に、前記ミラーを構成する一方の記憶装置（または記憶領域）を対象として、前記チェック手段による第１、第２の処理も実行する。本装置は、例えば、ミラーを構成する２台の記憶装置に対する対象データの二重書き処理、すなわちメインディスクとミラーディスクに対して同一データを入出力する処理を行うと共に、例えばメインディスクを対象として、前記チェック手段による第１、第２の処理を実行する。本装置では、前記ミラーリングを行うＲＡＩＤ制御の処理と共に、前記チェック手段により、ライト処理時にミラーのうち一方のデータに対して前記第１の処理を行い、またリード処理時に前記第１の処理を施した一方からリードしたデータを用いて前記第２の処理を行い、当該正当性がチェックされたデータを用いてミラーのうち他方のデータについてのチェックを行う。
【００３０】
また本発明の他のディスクアレイ装置では、前記チェック手段は、前記対象データについて、記憶装置で扱う処理データ単位と対応した所定サイズの複数の処理データ単位（ブロック）をまとめて１つの単位として管理して、前記第１、第２の処理を行うことで、管理エリアで必要となる容量を縮小する。前記チェック手段は、前記ライト処理時に、対象データにおける複数のブロックのうち一部ブロックから一部抽出した第１のデータに対してチェックコードを埋め込む演算を行い、チェックコードが埋め込まれた第２のデータを前記対象データ内に戻して記憶装置側に記憶し、管理エリア側に、前記第１のデータと、前記一部ブロックにおける抽出位置と対応した前記複数のブロックにおける他のブロックの一部データについてＸＯＲ演算した結果のデータとをセットで記憶する。そして、前記リード処理時に、記憶装置から前記対象データとしてリードしたデータについて、前記第２のデータ相当のデータを取り出して、前記チェックコードを作用させる演算を行って、その演算結果データと、管理エリア側の第１のデータ及び前記他のブロックの一部データについてＸＯＲ演算した結果のデータを用いて、前記複数のブロックにおける前記正当性をチェックする。
【００３１】
また、本発明の他のディスクアレイ装置では、ＲＡＩＤ制御としてデータとパリティを記憶装置に格納している構成において、通常のリード処理時には前記第２の処理を行わず、前記記憶装置に記憶されているデータ（データとパリティ）からのサンプリングによるパリティチェックの実行と同タイミングで前記第２の処理を実行して正当性をチェックする。
【００３２】
（２）また本発明の他のディスクアレイ装置は、前記（１）とは別の方式で前記アドレッシングの正当性を検証するチェック手段（第２のチェック手段）を有する。前記第１、第２のデータの格納先が異なる。第２のチェック手段によるチェック方式では、第１の処理として、ライト処理時に、対象データから一部抽出した第１のデータに対してチェックコードを埋め込むＸＯＲ演算を行い、前記チェックコードが埋め込まれた第２のデータの方を前記記憶装置とは別の管理エリア側に記憶し、前記第１のデータの方は元のままの対象データを前記記憶装置側に記憶する。また第２の処理として、リード処理時に、記憶装置から前記対象データとしてリードしたデータについて、前記記憶装置側から前記第１のデータとして取り出したデータに対して前記チェックコードを作用させるＸＯＲ演算を行って、その演算結果データと前記管理エリア側に記憶しておいた第２のデータの値を比較することで前記正当性をチェックする。
【００３３】
本構成の場合も、前記（１）の構成と同様に、ＲＡＩＤ制御を行う場合に記憶装置グループにおける前記第１、第２の処理の対象を、すべての記憶装置としてもよいし、一部例えばパリティディスクのみとしてもよい。
【００３４】
（３）また本発明のディスクアレイ装置は、前記（１）とは別の方式で前記アドレッシングの正当性を検証するチェック手段（第３のチェック手段）を有する。前記第２の処理時における各データを用いたチェックの手順が異なる。第３のチェック手段によるチェック方式では、第１の処理として、前記（１）と同様に、ライト処理時に、対象データから一部抽出した第１のデータに対してチェックコードを埋め込むＸＯＲ演算を行い、前記第１のデータの方を前記記憶装置とは別の管理エリア側に記憶し、前記チェックコードが埋め込まれた第２のデータの方を前記対象データ内に戻して前記記憶装置側に記憶する。そして、第２の処理として、前記（１）とは異なり、リード処理時に、記憶装置から前記対象データとしてリードしたデータについて、前記記憶装置側から前記第２のデータとして取り出したデータに対して、前記管理エリア側に記憶しておいた第１のデータを作用させるＸＯＲ演算を行って、その演算結果データと前記チェックコードの値を比較することで前記正当性をチェックする。
【００３５】
本構成の場合も、前記（１）の構成と同様に、ＲＡＩＤ制御を行う場合に記憶装置グループにおける前記第１、第２の処理の対象を、すべての記憶装置としてもよいし、一部例えばパリティディスクのみとしてもよい。
【００３６】
（４）また本発明のディスクアレイ装置は、前記（２）とは別の方式で前記アドレッシングの正当性を検証するチェック手段（第４のチェック手段とする）を有する。前記第２の処理時における各データを用いたチェックの手順が異なる。第４のチェック手段によるチェック方式では、第１の処理として、ライト処理時に、前記（２）と同様に、対象データから一部抽出した第１のデータに対してチェックコードを埋め込むＸＯＲ演算を行い、前記チェックコードが埋め込まれた第２のデータの方を前記記憶装置とは別の管理エリア側に記憶し、前記第１のデータの方は元のままの対象データを前記記憶装置側に記憶する。また第２の処理として、前記（２）とは異なり、リード処理時に、記憶装置から前記対象データとしてリードしたデータについて、前記記憶装置側から前記第１のデータとして取り出したデータに対して、前記管理エリア側に記憶しておいた第２のデータを作用させるＸＯＲ演算を行って、その演算結果データと前記チェックコードの値を比較することで前記正当性をチェックする。
【００３７】
本構成の場合も、前記（１）の構成と同様に、ＲＡＩＤ制御を行う場合に記憶装置グループにおける前記第１、第２の処理の対象を、すべての記憶装置としてもよいし、一部例えばパリティディスクのみとしてもよい。
【００３８】
また、本発明の他のディスクアレイ装置は、特に前記（２）の構成に対応して、前記チェック手段は、前記対象データのデータパターンに応じて、前記第１、第２のデータの格納先を、前記記憶装置側、管理エリア側のいずれかでそれぞれ逆側に変更する特殊処理を行う機能を有する。例えば、前記記憶装置のフォーマット処理時に、前記（２）のチェック方式から前記（１）のチェック方式へと変更する処理（フォーマット特殊処理）を行う。すなわち、前記対象データとして特定のデータパターン例えばすべて「０」のデータとなる場合に、前記第１のデータ（すべて「０」）を管理エリア側に、第２のデータ（ＣＣ埋込データ）を記憶装置側に記憶するようにする。
【００３９】
（５）また本発明の他のディスクアレイ装置は、上記のようなチェック手段を有する構成に加え、前記ＲＡＩＤ制御と前記アドレッシングの正当性についてのチェック処理の実行によってアドレッシングエラーが検出された際に、ディスクアレイ装置における異常の状態に応じた対応処理（エラー処理）を行うエラー処理手段を有する。前記チェック手段によるチェック処理の結果に基づきエラーを検出した場合に、例えばコントローラの処理部に対してエラー通知を行い、通知に基づきコントローラの処理部がエラー処理を行う。記憶装置グループにおけるすべての記憶装置を対象に前記第１の処理を行う場合に対応したエラー処理（Ｐ１）と、パリティを格納する記憶装置のみ対象に前記第１の処理を行う場合に対応したエラー処理（Ｐ２）とがある。
【００４０】
前記エラー処理手段は、パリティチェックやミラーリング等の冗長記憶装置（パリティディスクやミラーディスク）を有するＲＡＩＤ制御による処理と、前記チェック手段によるチェック処理とに基づき、１台の記憶装置のみ、制御系、記憶装置グループアクセス系などの異常のタイプを判断する処理と、異常と判断された部分を閉塞する処理と、異常と判断された部分に記憶されているデータについて冗長記憶装置を用いて回復する処理とを行う。
【００４１】
（６）また本発明の他のディスクアレイ装置は、前記（１）等における構成に加え、記憶装置への格納対象となるデータに対して、計算で得られる規則的なコード（マスクパターン）を埋め込む処理（データ変換処理）を行うことで特定のデータパターンを回避するデータ変換手段を有する。本装置は、ライト処理の際は、前記チェック手段により対象データに対して前記第１の処理を行うと共に、前記データ変換手段により前記第１の処理の対象となる領域以外の領域を対象として、前記マスクパターンを埋め込むＸＯＲ演算を行ってライトパターンを生成し、記憶装置にライトする。そして、リード処理の際は、前記データ変換手段により前記ライト処理の際と逆のデータ変換処理を行うことで元データへ復元すると共に、前記チェック手段により前記第２の処理を行って前記正当性をチェックする。
【発明の効果】
【００４２】
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば以下のとおりである。
【００４３】
本発明によれば、データ単位長の拡張によって冗長コード用の領域を確保することができないシリアルＡＴＡ等に対応の記憶装置を使用した場合であっても、ユーザデータに対応した冗長コードを用いてデータアクセスにおけるアドレッシングの正当性の検証を行うことでデータ信頼性を向上できるディスクアレイ装置を提供できる。
【００４４】
また特に、前記課題を解決するための手段に示した（１）〜（４）の構成によれば、記憶装置に対するリード／ライトのアクセスの正当性を確認できると共に、記憶装置に対するＩ／Ｏ性能を損なうことなくデータ信頼性確保が可能である。
【００４５】
また特に、前記課題を解決するための手段に示した（５）の構成によれば、前記正当性のチェック結果に基づきエラーを検出して異常の状態に応じた適切な処置を施すことでデータ保全性を高めることができる。
【００４６】
また特に、前記課題を解決するための手段に示した（６）の構成によれば、ディスクアレイ装置のハードウェア特性におけるデータパターン依存性を軽減してデータバス変動を軽減し、ハードウェア信頼性低下要因に対する改善効果が得られるので、データ信頼性を向上できる。
【発明を実施するための最良の形態】
【００４７】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一部には原則として同一符号を付し、その繰り返しの説明は省略する。
【００４８】
（実施の形態１）
図１〜１４は、本発明の実施の形態１におけるディスクアレイ装置の構成及び処理を示す。実施の形態１のディスクアレイ装置では、チェック方式として、コントローラ（１０）は、ＨＤＤ（３０）にライトするユーザデータを対象として、その一部を抽出し、抽出データに対してアクセス位置に応じたチェックコードを埋め込むＸＯＲ演算を行い、チェックコードが埋め込まれたデータの方を元のユーザデータの位置に戻してＨＤＤ（３０）側に記憶させ、元の内容のままである一部抽出データの方をコントローラ（１０）のメモリ（１２）上の管理エリア（１７）側に記憶する。そして、当該ユーザデータをＨＤＤ（３０）からリードする際は、前記チェックコードが埋め込まれたデータを取り出して、再び生成したチェックコードと作用させるＸＯＲ演算を行い、演算結果データを前記管理エリア（１７）に記憶しておいた一部抽出データと比較して当該データアクセスのアドレッシング正当性をチェックする。また、実施の形態１では、ＨＤＤグループにおける全ディスクを対象に上記処理を行う。これによりＨＤＤグループのアドレッシング異常を検出可能である。
【００４９】
＜ハードウェア構成＞
まず、本発明の各実施の形態で共通となるディスクアレイ装置（１００）のハードウェア構成について説明する。その後、各実施の形態で特徴的な処理について説明する。
【００５０】
図１（ａ），（ｂ）は、本発明の各実施の形態のディスクアレイ装置で共通となるディスクアレイ装置のハードウェア構成においてその外観構成を示す図である。（ａ）は装置正面を、（ｂ）は装置背面を示す。本ディスクアレイ装置１００は、ラックフレーム１１１をベースとして、ラックフレーム１１１の内側の上下方向に複数段にわたってマウントフレーム１１２が形成されており、マウントフレーム１１２に沿って基本筐体１２０（ディスクアレイ制御筐体）及び増設筐体１３０（ＨＤＤ筐体）が引き出し式に装着される構成である。本装置１００では、下段に１つの基本筐体１２０が装着され、上段に複数の増設筐体１３０が装着可能となっている。各筐体には、本装置１００の各種機能を提供するボード（回路基板）やユニットが装備される。基本筐体１２０は、ディスクアレイ装置のコントローラ１０を構成するコントローラボード５９等を収容する筐体である。増設筐体１３０は、ＨＤＤ３０を収容する筐体であり、必要に応じて増設が可能となっている。
【００５１】
装置正面では、基本筐体１２０及び増設筐体１３０において、ＨＤＤ３０が装填されたユニットが複数台並べて装着可能な領域が配されている。各装着位置において、ＨＤＤ３０の装着／取り外しが可能となっている。また基本筐体正面では、バックアップ電源として機能するバッテリーユニット、装置状態を表示する表示パネル、プログラムロード用のフレキシブルディスクドライブ等が配置されている。
【００５２】
装置背面では、基本筐体１２０及び増設筐体１３０において電源コントローラボード５６や電源ユニット等が配置されている。また基本筐体背面においてコントローラボード５９や冷却ファンユニット等が配置されている。
【００５３】
各筐体内には各部間を接続するバックボードが設けられており、バックボードに対して各ボードやユニットや複数のＨＤＤ３０などが接続される。バックボードでの配線を通じて各部が通信する。
【００５４】
コントローラボード５９は、ホストとなる情報処理装置３００からの命令に基づきＨＤＤ３０に対するデータの記憶の制御を行う。コントローラボード５９には、ホストとの通信インタフェース、キャッシュメモリ、共有メモリ、ＨＤＤ３０との通信インタフェース、例えばＲＡＩＤ方式による制御や、ＨＤＤ３０の状態監視などの機能を有する回路などが実装されている。なお通信インタフェースやキャッシュメモリ等の各機能をコントローラボードとは別のボードとして実装する形態としてもよい。なお、基本筐体１２０のＨＤＤ３０の制御に関するセキュリティを確保するために、２枚のコントローラボード５９を冗長に装着させる形態である。
【００５５】
コントローラ１０の有するホストとの通信インタフェースには、ホストと接続するための外部コネクタとして、ファイバチャネルプロトコルで構築されたＳＡＮ（Storage Area Network）や、Ｅｔｈｅｒｎｅｔ（登録商標）などのプロトコルで構築されたＬＡＮ（Local Area Network）、あるいはＳＣＳＩなどの所定の規格に準拠したものが設けられている。ディスクアレイ装置は、この外部コネクタに接続される通信ケーブル９２を介して情報処理装置３００と接続される。
【００５６】
電源コントローラボード５６は、各筐体間を接続し、筐体間での電源供給等のシステム制御やＨＤＤ３０に対する制御等を行う。電源コントローラボード５６の有するコネクタに通信ケーブル９１が接続され、電源コントローラボード５６間が通信ケーブル９１を通じて接続される。電源コントローラボード５６は、各筐体における複数のＨＤＤ３０と、ＳＡＴＡ等のプロトコルで通信を行う通信経路によって、通信可能に接続される。電源コントローラボード５６は、ＨＤＤ３０に対する制御を行うディスク制御部の他に、ＡＣ／ＤＣ電源の状態監視やＨＤＤ３０の状態監視、ＨＤＤ３０への電源供給の制御などを行う回路が実装されている。なお、電源コントローラボード５６の有する各機能をコントローラボード５６側に有する形態としてもよい。
【００５７】
電源ユニットは、ＡＣ／ＤＣ電源等を備え、ＨＤＤ３０やボード等の筐体内各部にＤＣ電源を供給する。電源ユニットは、電源コントローラボード５６と接続され、電源コントローラボード５６からの信号により各ＨＤＤ３０に対し電源を供給する。なお、各筐体の電源供給に関するセキュリティを確保するために、各筐体に対し電源コントローラボード５６と電源ユニットとを各２台ずつ冗長に装着させる形態である。
【００５８】
ＨＤＤ３０は、例えば、コンタクト・スタート・ストップ（ＣＳＳ：Contact Start Stop）方式の３．５インチサイズの磁気ディスクや、ロード／アンロード方式の２．５インチサイズの磁気ディスクなどを備える記憶装置である。３．５インチサイズの磁気ディスクは、例えば、ＳＣＳＩ１、ＳＣＳＩ２、ＳＣＳＩ３、ＦＣ−ＡＬ（Fibre Channel - Arbitrated Loop）、パラレルＡＴＡ、シリアルＡＴＡなどの通信インタフェースを有している。同様に、２．５インチサイズの磁気ディスクは、例えば、パラレルＡＴＡ、シリアルＡＴＡなどの通信インタフェースを有している。筐体に装着・接続されるＨＤＤ３０として、２．５インチサイズの磁気ディスクと３．５インチサイズの磁気ディスクとは、通信インタフェースが異なるだけではなく、Ｉ／Ｏ性能、消費電力、寿命の点などで異なっている。２．５インチサイズの磁気ディスクは、３．５インチサイズの磁気ディスクに比べ、Ｉ／Ｏ性能が優れておらず寿命が短いが、消費電力が少ないという点で優れている。
【００５９】
本実施の形態の場合、ＨＤＤ３０は、特にシリアルＡＴＡに対応したＨＤＤであるものとし、セクタ長が固定で拡張不能の形式である。これに限らず所定の規格のＨＤＤ３０を使用可能である。
【００６０】
＜システム構成＞
図２は、ディスクアレイ装置１００に関するシステム構成についての全体の機能ブロック図である。ディスクアレイ装置１００を含んで構成される全体のコンピュータシステムは、ディスクアレイ装置１００とそのホストとなる情報処理装置３００とが、ＳＡＮ（ストレージ・エリア・ネットワーク）２００及び通信ケーブル９２等を介してＦＣインタフェースで接続される構成である。なおホスト側との接続はＳＡＮ２００及びＦＣに限らず可能である。
【００６１】
ディスクアレイ装置１００は、コントローラ１０、ＨＤＤ３０、及びこれらを接続するバス（通信ライン）やポート等の接続部分を有する。基本筐体１２０においてコントローラ＃０、＃１の２つが接続される。各コントローラ１０及び各部は、情報処理装置３００−コントローラ１０−ＨＤＤ３０の間の接続で冗長性を持つように接続される。
【００６２】
本構成は、コントローラ１０やＨＤＤ３０等、ホストとなる情報処理装置３００からＨＤＤ３０までのデータパス上の各部を二重化した構成である。一方のパス上で障害が発生した場合等においても他方のパスに切り替えて処理を継続するフェイルオーバや、負荷分散などが可能である。二重化される各部の構成は略同等である。なおこのような二重化構成に限らない冗長構成でディスクアレイ装置を構成できる。
【００６３】
情報処理装置３００は、ユーザの使用するパーソナルコンピュータ、ワークステーション、メインフレームコンピュータなどである。情報処理装置３００は、ディスクアレイ装置１００を利用するためのプログラムやＦＣに対応してディスクアレイ装置１００と通信する通信インタフェース等を備える。情報処理装置３００は、ディスクアレイ装置１００に対し、ＨＤＤ３０が提供する記憶領域に対するデータのリードやライト等を行うための命令（入出力要求）を発行する。ディスクアレイ装置１００は、情報処理装置３００からの命令の受領に基づきデータのリードやライト等を処理する。
【００６４】
各コントローラ１０は、ＣＰＵ１１、メモリ１２、チャネル制御部１３、データコントローラ１４、キャッシュ（キャッシュメモリ）１５、ディスク制御部１６を有し、前述のコントローラボード５９に実装されている。チャネル制御部１３やディスク制御部１６が二重化された構成である。各コントローラ１０は２つのチャネル制御部１３でＳＡＮ２００に接続される。また各コントローラ１０は２つのディスク制御部１６でバスを通じて２系統のＨＤＤ３０のグループと接続される。例えば一方のコントローラ１０における一方のディスク制御部１６は、通信ライン（バス）４１を通じて一方の系統のＨＤＤ３０に接続され、他方のディスク制御部１６は、別の通信ライン（バス）４２を通じて他方の系統のＨＤＤ３０に接続される。各ＨＤＤ３０のグループは、両方のコントローラ１０（ディスク制御部１６）に対して接続される。一方の通信経路での接続が不良な場合でも他方での接続に切り替えて継続可能である。通信ライン４１，４２において筐体間の接続は前記通信ケーブル９１に対応している。
【００６５】
ＣＰＵ１１は、メモリ１２を用いてコントローラ１０における制御のためのプログラムを実行し、コントローラ１０の各種機能を実現する。メモリ１２は、各種プログラムやデータが格納される他、後述の管理エリアが設けられる。
【００６６】
チャネル制御部１３は、ＳＡＮ２００に対して接続され、ＦＣプロトコルに従った通信機能を提供する通信処理部である。チャネル制御部１３は、ホスト側の通信処理部や他のディスクアレイ装置などとの間で通信を行う。またチャネル制御部１３は、データコントローラ１４に接続され、キャッシュ（キャッシュメモリ）１５に対してデータをリード／ライトする。
【００６７】
データコントローラ１４は、ＣＰＵ１１、チャネル制御部１３、キャッシュ１５、ディスク制御部１６に接続され、各部間でのデータ通信及びデータ処理を行うＬＳＩである。データコントローラ１４は、キャッシュ１５に対して処理データ、特にホストとの転送データのリード／ライトを行う。
【００６８】
キャッシュ１５は、処理データを記憶するのに使用され、特にアドレッシング正当性のチェックの対象データが一時的に保持される。例えば、通常アクセス時には、ホストからのリードやライトなどのデータ入出力要求に対応して、チャネル制御部１３によりデータコントローラ１４を介してキャッシュメモリ１５にライトデータ等が格納される。ディスク制御部１６は、ＣＰＵ１１からの指示でデータコントローラ１４を介してキャッシュメモリ１５にコマンドに対応した入出力処理を実行する。
【００６９】
ディスク制御部１６は、データコントローラ１４にバスで接続され、ＨＤＤ３０に対するデータの入出力を処理する。またディスク制御部１６は、データコントローラ１４を介してキャッシュメモリ１５に対してデータをリード／ライトする。ディスク制御部１６は、ＨＤＤ３０との間の通信接続においてシリアルＡＴＡに従った通信を行う機能を有する。各コントローラ１０には、ディスク制御部１６及び通信ライン４１，４２を通じて複数のＨＤＤ３０すべてが接続される。
【００７０】
＜コントローラとシリアルＡＴＡ−ＨＤＤの接続構成＞
図３は、ディスクアレイ装置１００の構成として、特にコントローラ１０とシリアルＡＴＡ（ＳＡＴＡ）に対応のＨＤＤ３０との接続構成について示す図である。また各部間の接続におけるデータパスについても矢印で示している。本図では、前記図２に示す二重化構成などを省略した場合の構成を示している。
【００７１】
コントローラ１０では、メモリ１２上には管理エリア１７が設けられている。ホストからのリード／ライト等の要求に対応したデータは、矢印で示すようにキャッシュメモリ１５に格納される。
【００７２】
各筐体内に装着・接続される各ＨＤＤ３０は、例えばループ状であるＦＣ−ＡＬの方式（トポロジー）に対応した通信ライン４３により、ディスク制御部１６と通信可能に接続されている。
【００７３】
コントローラ１０のディスク制御部１６は、各ＨＤＤ３０に対して、通信ライン４３、スイッチ３１、コンバータ３２、ＰＢＣ３３などを介して接続される。通信ライン４３は、前記筐体間を接続する通信ケーブル９１と対応している。
【００７４】
増設筐体１３０において、ＰＢＣ（ポートバイパス回路）３３は、その切り替えにより通信ライン４１において各筐体に対応したポートをバイパスさせる。ＳＡＴＡ−ＨＤＤ３０は、ＳＡＴＡに対応した通信機能を有する。コンバータ３２は、ＦＣとＳＡＴＡとの変換処理を行う部分である。コンバータ３２と各ＳＡＴＡ−ＨＤＤ３０は、スイッチ３１を介して接続される。スイッチ３１での切り替えによりＨＤＤ３０の接続を切り離し可能である。
【００７５】
図中の矢印で示すように、コントローラ１０とＨＤＤ３０との接続における、ＣＰＵ１１やデータコントローラ１４やディスク制御部１６等の処理部とＨＤＤ３０とのパスと、コントローラ１０の前記処理部とメモリ１２上の管理エリアとの接続におけるパスとは、独立している。例えば本図ではディスク制御部１６を中心とした前記２つのパスを示す。前記パスが独立しているため、例えばデータコントローラ１０−ＨＤＤ３０のパスが障害等により使用不能になった場合でも、データコントローラ１０−管理エリアのパスで管理エリアにアクセスして前記抽出データなどを利用可能である。
【００７６】
図４は、前記図２のような二重化構成の場合に対応したコントローラ１０とシリアルＡＴＡに対応のＨＤＤ３０との接続構成について示す図である。二重化構成の場合、コントローラ１０の有する２つのディスク制御部１６は、それぞれ通信ライン４１，４２、ＰＢＣ３３、コンバータ３２を通じて各ＳＡＴＡ−ＨＤＤ３０のスイッチ３１に接続される。
【００７７】
＜プログラム及びデータの配置構成＞
図５は、ディスクアレイ装置１００で、コントローラ１０とＨＤＤ３０との間における、プログラム及びデータの格納位置及び処理の流れを示す説明図である。実線矢印は、主にユーザデータ７１とその処理の流れを示す。破線矢印は、主に管理エリアデータ７２などを含むシステムが使用する情報・データ（システムデータ）とその処理の流れを示す。本図では特にディスク制御部１６がメモリ１２やＨＤＤ３０に対して処理のためのアクセスを行う場合について示している。
【００７８】
コントローラ１０において、メモリ１２には、ＣＰＵ１１等が実行するマイクロプログラム１８や管理エリア１７が配置される。また、メモリ１２には、データライト処理２１やデータリード処理２２などの各種処理に対応したプログラムやデータが配置される。
【００７９】
マイクロプログラム１８は、アドレッシング正当性チェックに係わる処理を制御するためのプログラムである。データライト処理２１は、ホストからのライト要求に対応したＨＤＤ３０へのライト処理である。データリード処理２２は、ホストからのリード要求に対応したＨＤＤ３０からのリード処理である。管理エリア１７には管理エリアデータ７２が格納される。管理エリアデータ７２は、本チェック方式で管理するチェック用データとしての一部抽出データやチェックコード埋込データなどのデータである。
【００８０】
ホスト側からのユーザデータ７１は、チャネル制御部１３で受信され、データコントローラ１４を介してキャッシュメモリ１５に格納される。またＨＤＤ３０側からのユーザデータは、ディスク制御部１６で受信され、データコントローラ１４を介してキャッシュメモリ１５に格納される。
【００８１】
ＨＤＤ３０の記憶領域には、システムデータが格納される領域であるシステム領域３５や、ユーザデータ７１が格納される領域であるユーザデータ領域３６が必要に応じて確保される。ユーザデータ７１は、本チェック方式によりデータ信頼性を確保する対象となるデータである。
【００８２】
ディスク制御部１６は、データライト処理２１時、ＨＤＤ３０のユーザデータ領域３６に対してキャッシュメモリ１５等からユーザデータ７１を転送してライトさせる処理を行う。また、データリード処理２２時、ＨＤＤ３０のユーザデータ領域３５からユーザデータ７１をリードさせてキャッシュメモリ１５等に転送する処理を行う。リード／ライト処理の際は、ディスク制御部１６等において、対象データについてアドレス変換により、アクセス対象となるＨＤＤ３０内位置の物理的なアドレス（ＬＢＡ）が求められる。
【００８３】
また、メモリ１２の管理エリア１７は、ＣＰＵ１１、データコントローラ１４、ディスク制御部１６等の処理部からバスを通じてアクセスされ、管理エリアデータ７２のリード／ライトがなされる。管理エリア１７は、ディスク制御部１６等からＨＤＤ３０側よりも高速でアクセス可能な領域である。
【００８４】
また、後述するように、ＨＤＤ３０のシステム領域３５に管理エリア１７用の領域を設けてもよい。ディスク制御部１６は、システム領域３５に管理エリア１７を有する場合に、この領域に対して同様に管理エリアデータ７２をリード／ライトする。
【００８５】
＜ＲＡＩＤ制御例＞
図６は、ディスクアレイ装置１００でのＲＡＩＤ制御例として、ＲＡＩＤグループを構成するＨＤＤ３０にデータが格納されている状態の例を示す図である。ディスクアレイ装置１００は、ＲＡＩＤ制御として、上位からのユーザデータをストライピングかつパリティ処理してＨＤＤ３０に入出力するＲＡＩＤ５の制御を行う機能を有する。例として、ディスクアレイ装置１００に接続されている状態の、ＨＤＤ＃０〜＃４の５台の物理的なＨＤＤ３０があるとする。ＨＤＤ＃０〜＃４のグループでＲＡＩＤグループが構成されている。このＲＡＩＤグループ上に、ＲＡＩＤ制御に対応した論理的なデータのユニット（ＬＵ）、例えばＬＵ０，ＬＵ１が設定される。例として、ＲＡＩＤ５に対応したＲＡＩＤグループ及びＬＵが設定されている。このＬＵは、ＲＡＩＤ５の制御に対応した１つの処理データ単位である。ＬＵ０は、データ｛Ａ，Ｂ，Ｃ，Ｄ，Ｐ（Ａ−Ｄ）｝からなる。データＡ〜Ｄ，Ｐはそれぞれ所定サイズのストライピングデータである。特にＰ（Ａ−Ｄ）は、データＡ〜Ｄについてのパリティ（パリティデータ）を表わす。この場合、データＡ〜Ｄを格納するＨＤＤ＃０〜＃３はデータディスクであり、パリティデータＰを格納するＨＤＤ＃４はパリティディスクである。同様に、ＬＵ１は、データ｛Ｅ，Ｆ，Ｇ，Ｐ（Ｅ−Ｈ），Ｈ｝からなり、パリティ格納位置がＬＵ０における格納位置からシフトされたデータである。コントローラ１０（特にディスク制御部１６）は、ＲＡＩＤ５の制御において、ホストからのユーザデータについて、ストライピング（分割）処理及びパリティ生成・付加処理してから、ＨＤＤ３０のグループに対してデータ（非パリティ）及びパリティ並列的にライトする。また、コントローラ１０（特にディスク制御部１６）は、ＨＤＤ３０のグループ上のＬＵについて、データ（非パリティ）及びパリティを並列的にリードし、パリティを用いてデータが正常かどうかをチェック（パリティチェック）して、正常な復元データをホストに返す。
【００８６】
ＲＡＩＤ制御によるデータのストライピング等の処理と本チェック方式での処理とは独立した処理であるので、どちらを先に行っても構わない。本実施の形態の場合、ライト処理時、ストライピング及びパリティ処理等を行ってから、ストライピングデータを選択的に対象として、本チェック方式での処理を施す。
【００８７】
実施の形態１でのチェック方式では、特に複数のＨＤＤ３０における全ディスク、すなわちＲＡＩＤグループにおける各ストライピングデータ（データ及びパリティ）などを対象に、アドレッシング正当性チェックのための処理を行う。また、後述する実施の形態６でのチェック方式では、特に複数のＨＤＤ３０における一部ディスク、すなわちＲＡＩＤグループにおける各ストライピングデータのうちの一部データ、例えばパリティのみを対象に、アドレッシング正当性チェックのための処理を行う。
【００８８】
＜処理データ単位＞
また、図７は、前記図６に示す構成に対応して、１台のＨＤＤ３０に対して本チェック方式での処理における処理データ単位であるブロックが格納されている状態を示す図である。本実施の形態で処理データ単位となるブロック８１は、ＳＡＴＡ−ＨＤＤ３０での記憶領域単位である１セクタ（５１２バイト）に対応している。
【００８９】
前記ＨＤＤ＃０に、前記ストライピングデータＡ，Ｅが記憶されている。ストライピングデータＡは、更に、複数のブロック８１に分割して管理されている。例として、データＡは、複数のブロック８１｛Ｓ＃００１，Ｓ＃００２，……｝からなる。また同様に、データＥは、複数のブロック８１｛Ｓ＃０１０，Ｓ＃０１１，……｝からなる。
【００９０】
１つのブロック８１について図中下側に示す。ＳＣＳＩやＦＣに対応のＨＤＤを使用した場合と、ＳＡＴＡ−ＨＤＤ３０を使用した場合とについて示す。ＳＣＳＩやＦＣに対応のＨＤＤでのセクタの場合、セクタ長（ブロック長）は拡張可能な形式である。セクタ長を拡張した場合のデータフォーマットにおいて、当該拡張セクタは、拡張前のセクタ長（５１２バイト）に、拡張部分（αバイト）が付属する。ユーザデータに冗長コードを付加してチェックを行う方式の場合、例えばユーザデータ部分（５１２バイト）に対して、拡張部分に冗長コード（αバイト）を記録する。一方、ＳＡＴＡ−ＨＤＤ３０でのセクタの場合、セクタ長は変更不能で固定となる形式である。当該固定セクタは、固定セクタ長（５１２バイト）となる。コントローラ１０からＨＤＤ３０へのアクセスにおいて、ＨＤＤ３０では、セクタ単位でデータの読み書きが行われる。
【００９１】
本チェック方式では、従来技術とは異なり、セクタ長が変更不能なシリアルＡＴＡ等に対応のＨＤＤ３０の場合でも、データに対して冗長コード（チェックコード）を関連付け（埋め込み等）してアドレッシング正当性チェックを実現する。本チェック方式は、セクタ長が変更可能／不能に係わらず実行可能である。
【００９２】
＜チェック方式＞
図８は、実施の形態１のディスクアレイ装置でのチェック方式における処理概要を示す説明図である。コントローラ１０は、対象のユーザデータについてＨＤＤ３０にライトする際に、その一部を抽出し、一部抽出データｄ１について、管理エリア１７側に格納すると共に、アクセス対象のアドレス情報などから計算により生成したチェックコード（ＣＣ）ｄ２をＸＯＲ演算する。そして、演算結果であるＣＣ埋込データｄ３を、対象のユーザデータの抽出位置に戻して、ＨＤＤ３０にライトする。また、コントローラ１０は、対象のユーザデータについてＨＤＤ３０からリードする際に、その内の前記ＣＣ埋込データｄ３の部分を取り出し、アクセス対象のアドレス情報などから計算により生成したチェックコード（ＣＣ）ｄ２を作用させるＸＯＲ演算を行うと共に、演算結果データと管理エリア１７に格納しておいた前記一部抽出データｄ１とを比較・照合してアドレッシングの正当性をチェックする。正当であった場合は前記演算結果データは管理エリア１７側の一部抽出データｄ１と一致する。正常な一部抽出データｄ１を元の位置に戻すことでユーザデータが復元される。
【００９３】
図９、図１０は、実施の形態１のディスクアレイ装置でのチェック方式におけるライト処理時／リード処理時における各処理のモデルを示す説明図である。図９は、ディスクへのデータライト処理時に行うチェックコード埋め込み処理を、図１０は、ディスクからのデータリード処理時に行うチェック処理を示す。特に、ホストからのデータ入出力要求の受領に基づいてディスクアレイ装置でユーザデータを対象データとして主にデータコントローラ１４を主体で処理を行う場合について示す。
【００９４】
本チェック方式では、ＨＤＤ３０に対するデータアクセスのアドレッシングの正当性についてのチェックのための処理を行う。本チェック方式では、第１の処理として、ＨＤＤ３０へのライト処理時に、対象データの一部に対してチェックコード（ＣＣ）を埋め込み、前記一部データとチェックコードが埋め込まれたデータとを、リード処理時にチェックされる対象となるチェック用データとして、別領域に格納する処理（チェックコード埋め込み処理）が行われる。また、第２の処理として、ＨＤＤ３０からのリード処理時に、対象データについて、前記チェックコードが埋め込まれたデータと前記一部データとを取り出してチェックコードを作用させて比較・照合することでアドレッシング正当性をチェックする処理（チェック処理）が行われる。
【００９５】
図９で、ライト処理時に、コントローラ１０は、ＨＤＤ３０にライトする対象データについてチェックコード埋め込み処理を行う。まず、コントローラ１０のキャッシュメモリ１５には、ホストからライト要求に対応して受領したライトデータ（ＨＤＤ３０に格納する対象となるデータ）であるユーザデータが一時的に格納される。チャネル制御部１３によりホストからライトデータを受信してキャッシュメモリ１５に格納される。
【００９６】
データコントローラ１４は、チェックコード埋め込み処理のプログラムにより、ユーザデータについて、５１２バイトのサイズのブロック８１ごとに処理を施す。当該処理については、ＣＰＵ１１やデータコントローラ１４やディスク制御部１６等の処理部がマイクロプログラム１８を実行することで処理する形態としてもよいし、専用に設けた回路などにより処理する形態としてもよい。
【００９７】
チェックコード埋め込み処理において、データコントローラ１４は、ユーザデータのブロック８１から、チェックコード埋め込み対象となる一部のデータを抽出する。ここでは８バイトのデータを対象として一部抽出データｄ１とする。ブロック８１からチェックコード埋め込み処理対象となる一部データを抽出する位置や抽出サイズについては、任意に設定可能である。例えば、マイクロプログラム１８等による設定に基づき決定する。例えば、ブロック８１において前記抽出位置を先頭とし、抽出サイズを８バイトとする。
【００９８】
また、データコントローラ１４は、ブロック８１からの一部抽出データｄ１を、メモリ１２上の管理エリア１７内に前記管理エリアデータ７２として格納する。前記第１、第２のチェック用データは、例えばＨＤＤ３０におけるデータ格納位置を示すアドレス情報によって関連付けされている。
【００９９】
また、データコントローラ１４またはＣＰＵ１１は、所定の手法でチェックコード（ＣＣ）ｄ２を生成する。例えばＣＰＵ１１がチェックコードｄ２を生成するものとする。ＣＰＵ１１は、対象データについてのＨＤＤ３０におけるアクセス位置（ライトアクセス位置）を示すアドレス情報などから計算によりチェックコードｄ２を生成する。本実施の形態では、チェックコードｄ２として、対象ブロック８１についてのＨＤＤ３０におけるアドレス情報を用いる。アドレス情報として、例えば、１６ビットのＨＤＤ位置情報（ＲＯＷ，ＣＯＬＵＭＮ）と、４８ビットのＬＢＡとからなる８バイトのデータを用いる。前記ＨＤＤ位置情報は、装置内に接続される複数のＨＤＤ３０のＲＡＩＤ構成に対応した配置におけるアクセス対象ＨＤＤを識別する情報である。前記ＬＢＡは、アクセス対象ＨＤＤ３０内におけるアクセス対象の記憶領域（セクタ）を識別する情報である。チェックコードｄ２を生成するために用いる情報及び生成されるチェックコードｄ２は、対象データのライト時とリード時とで同一でありユニークに定まることが条件であり、上記アドレス情報に限定されない。なおチェックコードは、パリティとは別の情報であることに注意しておく。
【０１００】
なお、ここでいうＬＢＡは、ＳＣＳＩ系で用いられる情報で、ＨＤＤでの記憶領域単位（セクタ）の位置を識別する値（例えば４８ビット）である。ＬＢＡは、ディスクアレイ装置でプログラム上のアドレスカウンタなどにより参照可能である。前記チェックコードの生成のためのデータあるいはチェックコード自体として、ＬＢＡに限らずディスクアレイ装置でのアドレスや識別情報の体系に応じた情報を使用する。
【０１０１】
データコントローラ１４は、前記ブロック８１からの一部抽出データｄ１に対し、前記生成したチェックコードｄ２を埋め込むためのＸＯＲ演算を行う。そして、一部抽出データｄ１とチェックコードｄ２のＸＯＲ演算により生成された演算結果のデータｄ３を、元のブロック８１における抽出位置に戻す。演算結果のデータ（ＣＣ埋込データと称する）ｄ３がブロック８１に戻されてブロック８１ｂの状態となる。これにより、ユーザデータのブロック８１に対してチェックコードｄ２が埋め込まれたことになる。
【０１０２】
ＣＣ埋込データｄ３は、一部抽出データｄ１と共に、リード処理時にチェック処理される対象となるデータ（チェック用データと称する）である。特に、ＨＤＤ３０側に格納されるチェック用データを第１のチェック用データと称し、管理エリア１７側に格納されるチェック用データを第２のチェック用データと称することとする。本実施の形態の場合、第１のチェック用データは前記ＣＣ埋込データｄ３で、第２のチェック用データは前記一部抽出データｄ１である。以上の処理が１ブロック８１についてのチェックコード埋め込み処理である。
【０１０３】
コントローラ１０は、上記チェック用データ作成後の複数のブロック８１ｂをまとめ、処理済みのユーザデータとしてアクセス対象のＨＤＤ３０に対してライトする。すなわち、ディスク制御部１６により、ユーザデータを対象ＨＤＤ３０に転送して、ＨＤＤ３０で対象のＬＢＡに対してライトさせる。また、コントローラ１０は、前記ストライピング及びパリティ処理のようなＲＡＩＤ制御を行う場合は、ＲＡＩＤグループを構成する各ＨＤＤ３０に対してストライピングデータを転送して記憶領域にライトさせる。
【０１０４】
図１０で、リード処理時には、コントローラ１０は、ＨＤＤ３０からリードする対象データについて、チェック処理（アドレッシング正当性チェック処理）を行う。前記ライト処理により、ＨＤＤ３０には、第１のチェック用データ（ＣＣ埋込データｄ３）を含んだブロック８１ｂからなるユーザデータが格納されている。また、メモリ１２上の管理エリア１７には、各ブロック８１ｂに対応して第２のチェック用データ（一部抽出データｄ１）が格納されている。
【０１０５】
コントローラ１０は、チェック処理のプログラムにより、対象データについて、前記ブロック８１ｂごとにチェック処理を行う。当該処理についても、ＣＰＵ１１等によるマイクロプログラム１８の実行により処理する形態としてもよいし、専用に設けた回路などにより処理する形態としてもよい。
【０１０６】
チェック処理において、データコントローラ１４は、ＨＤＤ３０からディスク制御部１６によりリードされたブロック８１ｂについて、前記チェックコードｄ２が埋め込まれている部分すなわち前記ＣＣ埋込データｄ３（第１のチェック用データ）を取り出す。
【０１０７】
また、データコントローラ１４は、メモリ１２上の管理エリア１７内に格納されている管理エリアデータ７２中から、対象ブロック８１ｂに対応する前記一部抽出データｄ１（第２のチェック用データ）を取り出す。
【０１０８】
また、データコントローラ１４またはＣＰＵ１１は、所定の手法でチェックコード（ＣＣ）ｄ２を生成する。例えばＣＰＵ１１がチェックコードｄ２を生成するものとする。ＣＰＵ１１は、対象データについてのＨＤＤ３０におけるアクセス位置（リードアクセス位置）を示すアドレス情報などから計算によりチェックコードｄ２を生成する。当該アドレス情報は、前記ライト処理時に用いたアドレス情報と同一の情報である。
【０１０９】
データコントローラ１４は、前記ＣＣ埋込データｄ３（第１のチェック用データ）に対し、前記生成したチェックコードｄ２を作用させるＸＯＲ演算を行う。そして、ＣＣ埋込データｄ３とチェックコードｄ２のＸＯＲ演算により生成された演算結果のデータｄ４を、管理エリア１７の前記一部抽出データｄ１（第２のチェック用データ）と比較・照合する。データコントローラ１４は、前記２つのデータｄ３，ｄ２についての値の比較により、アドレッシング正当性チェックの結果を認識する。すなわち、前記値が一致する場合、前記演算結果のデータｄ４は、前記一部抽出データｄ１（第２のチェック用データ）と同一であり、対象データについてのアドレッシングが正当であることが確認される。前記値が不一致する場合、前記演算結果のデータｄ４は、前記一部抽出データｄ１（第２のチェック用データ）と異なり、対象データについてのアドレッシングが異常であることが確認される。
【０１１０】
データコントローラ１４は、前記アドレッシングが正当であることを確認すると、当該正常なリードデータを元のブロック８１ｂにおける取り出し位置に戻すことで、前記ブロック８１の状態に復元する。またコントローラ１４は、前記アドレッシングが異常であることを確認した場合は、ＣＰＵ１１へのアドレッシングエラーの通知などの対応処理を行う。以上の処理が、１ブロック８１についてのチェック処理である。
【０１１１】
コントローラ１０は、上記チェック処理後の複数のブロック８１をまとめ、処理済みのユーザデータとしてキャッシュメモリ１５に対して格納する。すなわち、ディスク制御部１６により、ユーザデータをキャッシュメモリ１５に転送させる。キャッシュメモリ１５には、ホストからのリード要求に対する応答となるリードデータである前記処理済みのユーザデータが一時的に格納される。チャネル制御部１３によりキャッシュメモリ１５から前記リードデータがリードされ、ホストに対して送信される。
【０１１２】
以上の処理により、ＨＤＤ３０で扱うセクタの形式に係わらずチェックコードを用いたチェックが可能なので、セクタ長固定でユーザデータに対し単純に冗長コードを付加させる方式が使用できないＳＡＴＡ等に対応のＨＤＤ３０を使用した場合であっても、ＳＣＳＩやＦＣに対応のＨＤＤを使用した場合と同等のデータ信頼性が確保できる。
【０１１３】
前記処理データ単位（ブロック８１）及び前記管理エリア１７に保存するデータ（チェック用データ）等については、ＨＤＤ３０におけるセクタ（ブロック）単位、ディスクアレイ装置１００のＯＳ等におけるクラスタ単位、ＲＡＩＤ方式におけるストライプ単位など、必要なデータ単位に応じて設定すれば良い。
【０１１４】
また、前記チェックコードｄ２に関する処理例として、対象データからの一部抽出データｄ１に対し、チェックコードｄ２として、アドレス情報と、制御コード（本チェック方式による処理の制御のための情報）とをそれぞれ割り当てて埋め込みを行うようにしてもよい。例えば、一部抽出データｄ１として８バイトを抽出した場合に、アドレス情報に４バイト、制御コードに４バイトをそれぞれ割り当てて埋め込む処理を行う。
【０１１５】
図１１は、実施の形態１でＲＡＩＤ５の制御に対応して対象データのストライピング及びパリティ処理とチェックコード埋め込み処理とを行う場合における、各処理データの関係についてまとめた説明図である。前記図６に対応したＲＡＩＤグループの構成で、ストライピング及びパリティ処理後のユーザデータについてチェックコード埋め込み処理を施す場合について示す。図中のＳは１つのブロック８１を示す。コントローラ１０で、ユーザデータについてストライピング及びパリティ処理が行われ、１つのＬＵを構成する各ストライピングデータ｛Ａ，Ｂ，Ｃ，Ｄ，Ｐ｝が作成される。Ｐはパリティである。コントローラ１０は、各ストライピングデータを構成するブロック８１（Ｓ）ごとに、前述したようなチェックコード埋め込み処理を施す。処理後のブロック８１ｂ（Ｓ）により、各ストライピングデータが再構成される。コントローラ１０により、処理後のブロックを含んだストライピングデータが、対応するＨＤＤ３０のグループ＃０〜＃４に対してライト処理される。
【０１１６】
図１２は、実施の形態１でのアドレッシング正当性チェックに関する原理について示す説明図である。図中では、データが正常（データアクセスのアドレッシングが正当）の場合におけるＸＯＲ演算に関する式の変形を示している。まず、ライト処理時（チェックコード埋め込み処理時）において、ユーザデータのブロック８１からの一部抽出データｄ１（データＡ）と、生成したチェックコードｄ２（データＢ）とをＸＯＲ演算して、その演算結果であるＣＣ埋込データｄ３（データＣ）が作成される。一部抽出データｄ１（データＡ）とＣＣ埋込データｄ３（データＣ）が、チェック用データとして、一方のＣＣ埋込データｄ３は第１のチェック用データとしてＨＤＤ３０側に、他方の一部抽出データｄ１は第２のチェック用データとしてＨＤＤ３０と別の領域であるメモリ１２上の管理エリア１７側に格納される。チェックコード埋め込みの際のＸＯＲ演算は下記式（１）のようになる。
【０１１７】
Ｃ  ＝  Ａ  ＸＯＲ  Ｂ      ・・・（１）
一方、リード処理時（チェック処理時）において、ＨＤＤ３０からリードしたユーザデータのブロック８１ｂから第１のチェック用データが取り出される。また管理エリア１７側から第２のチェック用データである一部抽出データｄ１（データＡ）が取り出される。この時点では正当性が未チェックなのでデータ内容が正しいかはわからない。第１のチェック用データとしてリードしたデータ（正常な場合はデータＣ）と、生成したチェックコードｄ２（データＢ）とをＸＯＲ演算し、その演算結果であるデータ（正常な場合はデータＡ）が作成される。
【０１１８】
リード処理時におけるデータが正常の場合のＸＯＲ演算は、下記式（２）のようになる。式（２）は、式（１）の変形である。
【０１１９】
Ｃ  ＸＯＲ  Ｂ  ＝  Ａ  ＸＯＲ  Ｂ  ＸＯＲ  Ｂ  ＝  Ａ  ＸＯＲ  ０  ＝  Ａ      ・・・（２）
式（２）に示すように、リードアクセスのアドレッシングが正当であった場合、チェック処理におけるＸＯＲ演算の結果は、データＡになる。従って、演算結果のデータを、管理エリア１７に格納しておいた第２のチェック用データであるデータＡと比較してその値が一致すれば、アドレッシングが正当すなわち正しいデータであることが確認される。
【０１２０】
図１３は、実施の形態１でのチェック方式に関する具体的な演算例を示す説明図である。まず、ライト処理時におけるチェックコード埋め込み処理において、ユーザデータのブロック８１からの一部抽出データｄ１とチェックコードｄ２のＸＯＲ演算により、ＣＣ埋込データｄ３が作成される。例として、一部抽出データｄ１を４バイト、「ＡＡＡＡＡＡＡＡ」（１６進数）とし、チェックコードｄ２が「０００００００１」となる場合について示す。両データのＸＯＲ演算により演算結果のＣＣ埋込データｄ３が「ＡＡＡＡＡＡＡＢ」となる。ＣＣ埋め込みデータｄ３が第１のチェック用データとしてＨＤＤ３０側へ、一部抽出データｄ１が第２のチェック用データとして管理エリア１７側へ格納される。
【０１２１】
リード処理時におけるチェック処理において、ＨＤＤ３０からのリードデータから取り出した第１のチェック用データ（ＣＣ埋込データｄ３）について、チェックコードｄ２とＸＯＲ演算して、演算結果のデータｄ４が管理エリア１７の第２のチェック用データ（一部抽出データｄ１）と比較される。図中では、前記ライト処理時と同一の一部抽出データｄ１に関するチェック処理を示している。リードデータから第１のチェック用データとして取り出したデータは、アドレッシングが正当であった場合は前記ＣＣ埋込データｄ３である。この場合、チェックコードｄ２とのＸＯＲ演算により、演算結果のデータｄ４は「ＡＡＡＡＡＡＡＡ」となり、管理エリア１７に格納しておいた一部抽出データｄ１と値が一致する。一方、第１のチェック用データとして取り出したデータが、アドレッシングが異常であったために例えば「ＡＢＡＡＡＡＡＡ」である場合、チェックコードｄ２とのＸＯＲ演算により、演算結果のデータｄ４は「ＡＢＡＡＡＡＡＢ」となり、管理エリア１７に格納しておいた一部抽出データｄ１と値が不一致する。
【０１２２】
＜全体のフロー＞
図１４（ａ），（ｂ）は、実施の形態１のディスクアレイ装置でのチェック方式における、コントローラ１０による処理のフロー図を示す。実施の形態１では、複数のＨＤＤ３０における全ディスクを対象に、前記第１、第２の処理を行う。本図ではコントローラ１０において特にデータコントローラ１４が主な処理主体である場合の処理を示す。左側（ａ）は、ディスクライト時の処理（前記第１の処理を含む）を、右側（ｂ）は、ディスクリード時の処理（前記第２の処理を含む）を示す。なおＣＰＵ１１やディスク制御部１６などが処理主体で以下の処理を同様に実行する形態とすることも可能である。
【０１２３】
（ａ）で、ディスクライト時において、まず、コントローラ１０は、ホストよりライトデータを受領する（Ｓ１０１）。チャネル制御部１３によりライトデータを受信してキャッシュメモリ１５に格納する。コントローラ１０は、ライトデータについて、ブロック８１ごとに、データの一部を抽出し、一部抽出データｄ１を第２のチェック用データとして、メモリ１２上の管理エリア１７内に格納する（Ｓ１０２）。
【０１２４】
コントローラ１０は、ライトデータについて、アドレス情報すなわちアクセス対象のＨＤＤ位置とＬＢＡの情報をもとに、チェックコードｄ２を生成する（Ｓ１０３）。コントローラ１０は、前記一部抽出データｄ１と、前記生成したチェックコードｄ２とをＸＯＲ演算し、演算結果であるＣＣ埋込データｄ３を、第１のチェック用データとして、ブロック８１における元の位置（抽出位置）へ戻す（Ｓ１０４）。
【０１２５】
コントローラ１０は、対象のライトデータにおける全ブロック８１について上記処理（チェックコード埋め込み処理）が終了したかどうか判断しながら、各ブロック８１について処理を繰り返す（Ｓ１０５）。全ブロック８１について処理終了後、コントローラ１０は、ライト対象となるＨＤＤ３０、例えばＲＡＩＤグループに対応する各ＨＤＤ３０に対して、上記処理済みのライトデータを転送してライトさせるデータライト処理を行う（Ｓ１０６）。
【０１２６】
（ｂ）で、ディスクリード時において、まず、コントローラ１０は、ホストよりリード要求を受領する（Ｓ２０１）。コントローラ１０は、リード対象となるＨＤＤ３０、例えばＲＡＩＤグループに対応する各ＨＤＤ３０に対して、対象のユーザデータ７１についてのデータリード処理を行う（Ｓ２０２）。データリード処理によりＨＤＤ３０からユーザデータ７１がリードされ、リードデータが所定の作業用メモリに格納される。当該メモリは、コントローラ１０内に有するいずれかの記憶領域である。
【０１２７】
コントローラ１０は、リードデータについて、ブロック８１ｂごとに、ＣＣ埋込データｄ３（第１のチェック用データ）を取り出す（Ｓ２０３）。コントローラ１０は、アクセス対象のＨＤＤ位置とＬＢＡの情報をもとに、チェックコードｄ２を生成する（Ｓ２０４）。コントローラ１０は、前記取り出したＣＣ埋込データｄ３と、前記生成したチェックコードｄ２とをＸＯＲ演算し、演算結果のデータ（復元データ）ｄ４を、ブロック８１ｂにおける元の位置へ戻す（Ｓ２０５）。アドレッシングが正当であった場合では、復元データｄ４は正常な元のユーザデータ（一部抽出データｄ１）である。
【０１２８】
コントローラ１０は、復元データｄ４が正常なデータであることを確認するために、復元データｄ４と、メモリ１２上の管理エリア１７内から取り出した前記一部抽出データｄ１（第２のチェック用データ）とを比較・照合する（Ｓ２０６）。比較により値が一致する場合は、アドレッシングが正当であることが確認される。値が不一致する場合は、アドレッシングが正当でないことが確認されるので、ＣＰＵ１１へその旨を示すアドレッシングエラーを通知するなどの対応処理を行う（Ｓ２０７）。
【０１２９】
コントローラ１０は、対象のリードデータにおける全ブロック８１ｂについて上記処理（チェック処理）が終了したかどうか判断しながら、各ブロック８１ｂについて処理を繰り返す（Ｓ２０８）。全ブロック８１ｂについて処理終了後、コントローラ１０は、ホストに対して処理後のリードデータを転送する（Ｓ２０９）。チャネル制御部１３によりキャッシュメモリ１５からリードデータをホストに送信する。
【０１３０】
＜データ信頼性＞
実施の形態１のディスクアレイ装置におけるデータ信頼性の保証に関して説明する。前記図３や図５に示すように、コントローラ１０による管理エリア１７へのアクセスはメモリアクセスであり、ＨＤＤ３０へのアクセスとは別のパスになっている。コントローラ１０、特にＣＰＵ１１、データコントローラ１４、ディスク制御部１６などの処理部による前記第１、第２のチェック用データへのアクセスのパスは、それぞれ別のパスとなっている。各データへのパスにおいてデータコントローラ１４やディスク制御部１６やＨＤＤ３０などのいずれかの部位の障害等により正しくアクセスされなかった場合は、前記チェック処理での照合の結果が不一致となることで異常の検出がなされる。
【０１３１】
また、仮に管理エリア１７に障害が発生して管理エリアデータ７２すなわち一部抽出データｄ１が参照できない場合でも、チェックコードｄ２はその都度の計算により生成される情報であるため、生成したチェックコードｄ２を用いてユーザデータ（一部抽出データｄ１）の復元が可能である。すなわち、前記式（２）により、ＨＤＤ３０からリードしたＣＣ埋込データｄ３（データＣ）に対して、生成したチェックコードｄ２（データＢ）を作用させるＸＯＲ演算を行うことで、ユーザデータである一部抽出データｄ１（データＡ）が復元される。但し、上記管理エリアデータ７２がエラーで参照できない場合はアドレッシング異常についてのチェックは行えない。また更にＨＤＤ３０に対しパリティを格納するＲＡＩＤ５等の制御を行っている場合、前記ユーザデータの復元後にパリティを用いたデータ検証及び回復を行うことも可能である。
【０１３２】
なおデータアクセスにおけるアドレッシング正当性の検証に関して、冗長コードをユーザデータに付加して記録する方式以外では、データとパリティを記録するＲＡＩＤ方式（ＲＡＩＤ５等）でパリティチェックを行うことにより部分的に代用可能である。しかしながら、パリティチェックではアドレッシング異常を検出不能な場合が存在する。すなわちＨＤＤグループがアドレッシング異常の場合（コントローラ不良などの場合）でパリティチェックによりデータとパリティの演算値が一致になった場合は当該異常についての検出は不可能である。このようにパリティチェックのみでは完全ではないため、冗長コードをユーザデータに付加して記録する方式が有効である。
【０１３３】
本チェック方式の使用により、ＨＤＤ３０に対するリード／ライトのアクセスの正当性を確認でき、セクタ長固定のＳＡＴＡ−ＨＤＤ３０を使用する場合でもデータ信頼性を確保できる。またＲＡＩＤ制御を行う場合にＨＤＤグループのアドレッシング異常を検出可能である。また他のデータに依存しないためデータ復元が可能であり、チェックによりアドレッシングエラーを検出した場合にもデータ復元により正常データをアクセス可能である。また本方式を使用した場合にシステムに与える負荷は設計サイドで自由に選択でき、それほど負荷が大きくないため、ＨＤＤ３０に対するＩ／Ｏ性能を損なうことなくデータ信頼性確保が可能であり、高信頼性と低コストの双方の利点がある。
【０１３４】
また、従来技術である、セクタ拡張部分にチェックコードを付加して記録する方式では、ユーザデータとそのチェックコードのセットの単体ではエラー検出不能の場合がある。検出不能なエラーとして、例えば、ＨＤＤの対象領域が所定要因によりコントローラからライト不能状態（新ライトデータが対象領域にライトされない状態）で、リード処理により当該領域からライト済みの旧データが読み出しされてしまうエラーがある。当該ライト不能状態でリード処理によりリードされる旧データが新ライトデータと同一になるような場合に関しては、旧データのチェックコードは正しいため、前記セットの単体ではエラー検出不能である。一方、本チェック方式では、前記チェック用データとして抽出されるユーザデータ（一部抽出データｄ１）の値が異なれば、上記ライト不能状態及び旧データが読み出しされるエラーについてのチェックも可能である。
【０１３５】
（実施の形態２）
次に、実施の形態２のディスクアレイ装置について説明する。図１５は、実施の形態２のディスクアレイ装置で、コントローラ１０とＨＤＤ３０との間における、プログラム及びデータの格納位置及び処理の流れを示す説明図である。実施の形態２では、より高いデータ信頼性を保証するために、コントローラ１０による管理エリア１７へのアクセスとして、ユーザデータアクセスとは異なる形態で設けたフラッシュメモリストレージ１９に対して行う。管理エリア１７を設けるメモリとして、ユーザデータアクセス（ＨＤＤアクセス）とは異なる形態となる、高速アクセス可能な不揮発性のフラッシュメモリストレージ１９を使用する。
【０１３６】
コントローラ１０に、フラッシュメモリストレージ１９が接続される。フラッシュメモリストレージ１９をシステムデータや処理データの格納に用いる。本図では、特に、コントローラ１０内において、ＣＰＵ１１やデータコントローラ１４やディスク制御部１６から高速アクセスが可能なフラッシュメモリストレージ１９を設ける構成である。フラッシュメモリストレージ１９内に、管理エリア１７用の領域（第２の管理エリア）を確保し、実施の形態１と同様にアドレッシング正当性チェックに関する処理で用いる。また、データコントローラ１４等の指示に基づきメモリ１２とフラッシュメモリストレージ１９の間で管理エリアデータ７２の転送が行われる。フラッシュメモリストレージ１９は、コントローラ１０により高速にアクセス可能であればディスクアレイ装置１００内のいずれの場所に設置されてもよい。
【０１３７】
処理形態としては例えば、通常はメモリ１２上の管理エリア１７をメインに使用して処理を行い、メモリ１２の容量の制限などによりメモリ１２上の管理エリア１７で空き領域が少なくなった場合に、フラッシュメモリストレージ１９内の領域に管理エリアデータ７２を転送してセーブする。また必要に応じてフラッシュメモリストレージ１９内の領域に保存されている管理エリアデータ７２をメモリ１２上の管理エリア１７にロードして使用する。あるいは、メモリ１２上ではなくフラッシュメモリストレージ１９上に管理エリア１７用の領域を設けて使用する。
【０１３８】
また他の処理形態として、メモリ１２の容量の制限などにより、メモリ１２上の管理エリア１７に格納される管理エリアデータ７２をＨＤＤ３０の記憶領域に対して転送してロード／セーブする。例えば、メモリ１２上の管理エリア１７の空き領域が少なくなった際に、ディスク制御部１６により、ＨＤＤ３０のシステム領域３５で、管理エリア１７用として設定した領域に対し、管理エリアデータ７２を転送してセーブする。また、ディスク制御部１６により、必要に応じて、前記ＨＤＤ３０上の管理エリア１７用の領域から前記セーブされた管理エリアデータ７２をメモリ１２上の管理エリア１７へとロードして使用する。
【０１３９】
前記ＨＤＤ３０の管理エリア１７用の領域に対するアクセスはＨＤＤアクセスとなるが、この場合でも、システム内で使用する管理エリアデータ７２に対して識別フラグや冗長コードを付加してＨＤＤ３０の領域に格納することで、管理エリアデータ７２についてのアドレッシング正当性がチェック可能である。そのため、このような管理エリアデータ７２に関して通常のユーザデータアクセスの場合とは異なるデータ信頼性保証のメカニズムにより、ハードウェア障害時に誤ったデータを正常と誤判定する可能性を非常に小さくできる。
【０１４０】
（実施の形態３）
次に、実施の形態３のディスクアレイ装置について説明する。図１６は、実施の形態３でのチェック方式による処理例について示す説明図である。実施の形態３では、ユーザデータについての処理データ単位（ブロック８１）において、複数箇所からデータを一部抽出してその複数の抽出データをセットでチェック用データとして用いる。実施の形態３では、特に、ユーザデータのブロック８１内の二箇所を対象としてデータを一部抽出し、アドレッシング正当性チェックに関する処理を行う。
【０１４１】
前記ライト不能状態について説明したように、ユーザデータにおけるチェック処理対象となる一部抽出データｄ１がライト処理により正常に更新されておらず、チェック用データと値が異なっていないと、エラー検出不能となってしまう。実施の形態３では、ユーザデータのブロック８１で、一部抽出データｄ１の抽出位置とは別に、データ更新のある他の部分のデータを抽出してチェック用データとして使用し、チェック処理を行う。
【０１４２】
ライト処理時におけるチェックコード埋め込み処理において、コントローラ１０は、前記実施の形態１でのチェックコード埋め込み処理に従って、ユーザデータのブロック８１における抽出位置（例えば先頭８バイト）の一部抽出データｄ１（第１の抽出データａ１）を前記第２のチェック用データとして管理エリア１７に記憶する。それに加えて、コントローラ１０は、同ブロック８１における前記第１の抽出データａ１以外の領域でデータ更新により値が変更された更新領域がある場合に、その更新データ位置及び当該更新領域からの一部抽出データ（第２の抽出データａ２）を、前記第１の抽出データａ１と一緒に第２のチェック用データとして管理エリア１７に記憶する。ブロック８１における少なくともどちらか一方の抽出位置（前記ａ１またはａ２に対応する部分）には、前記実施の形態１と同様に作成された前記ＣＣ埋込データが前記第１のチェック用データとして戻される。例えば、第１の抽出データａ１の位置にはチェックコードとの演算により作成されたＣＣ埋込データが戻され、第２の抽出データａ２の位置のデータには何の操作も行わない。
【０１４３】
リード処理時におけるチェック処理では、コントローラ１０は、リードしたブロック８１ｂにおける前記二箇所の抽出位置に対応したチェック用データを用いてチェック処理を行う。例えば、ブロック８１における第１の抽出データａ１の位置に前記埋め込み時と同一のチェックコードを作用させる演算により作成されたデータと、前記チェック用データにおける第１の抽出データａ１との比較・照合を行い、また前記更新データ位置の情報により特定された前記第２の抽出データａ２の位置のデータと前記チェック用データにおける第２の抽出データａ２とを比較・照合することによるチェック処理を行う。仮に前記第１の抽出データａ１の値がライト処理により変更されていない場合でも、それとセットで記憶されている前記更新領域に対応した第２の抽出データａ２を用いることにより、前記ライト不能状態及び旧データが読み出されるエラーについてもチェック可能である。前記ブロック８１でデータ値の更新がある場合としては、例えばパリティを更新ライトする際に、旧データをリードして新データと計算する時などがある。コントローラ１０は、データ更新に基づき、前記ブロック８１の二箇所を対象としたチェック用データの作成を行ってもよいし、どちらか一方でチェック用データを作成して他方は同一かどうかの比較に用いるようにしてもよい。また処理形態として例えば、管理エリア１７の容量に余裕がある場合などに本チェック方式で複数箇所を対象として処理を行うようにしてもよい。このように、実施の形態３の場合では、前記ライト不能状態などの場合に対してのデータ信頼性も確保できる。
【０１４４】
（実施の形態４）
次に、本発明の実施の形態４でのチェック方式では、実施の形態１のチェック方式とは異なり、前記ＣＣ埋込データｄ３をＨＤＤ３０側でなく管理エリア１７側に記憶し、前記一部抽出データｄ１を管理エリア１７側でなくＨＤＤ３０側に記憶する。
【０１４５】
図１７は、実施の形態４のディスクアレイ装置でのチェック方式の処理を示す説明図である。ブロック８１からの１つの抽出部分に対する処理のみを示す。コントローラ１０は、対象のユーザデータについてＨＤＤ３０にライトする際に、その一部を抽出し、一部抽出データｄ１について、アクセス対象のアドレス情報などから計算により生成したチェックコード（ＣＣ）ｄ２をＸＯＲ演算する。そして、演算結果であるＣＣ埋込データｄ３を、管理エリア１７側に格納すると共に、前記一部抽出データｄ１を対象のユーザデータの抽出位置に戻して、ＨＤＤ３０にライトする。また、コントローラ１０は、対象のユーザデータについてＨＤＤ３０からリードする際に、その内の前記一部抽出データｄ１の部分を取り出し、アクセス対象のアドレス情報などから計算により生成したチェックコード（ＣＣ）ｄ２を作用させるＸＯＲ演算を行うと共に、演算結果データと管理エリア１７に格納しておいた前記ＣＣ埋込データｄ３とを比較・照合してアドレッシングの正当性をチェックする。正当であった場合は前記演算結果データは管理エリア１７側のＣＣ埋込データｄ３と一致する。
【０１４６】
実施の形態４のチェック方式の場合は、ＨＤＤ３０に記録されるユーザデータの加工を行わないため、既存システムのレイアウトを大きく変更せずに対応が可能である。またＨＤＤ３０に対するリード／ライト処理時に前記ユーザデータの加工のためのデータ変換が不要であるため、処理に対する負荷が小さい。この方式の場合は、ユーザデータ側は単純に一部抽出データとの比較と同レベルのチェックとなるが、管理エリア１７側の管理エリアデータ７２を正しくアクセスしているかチェック可能である。但し、この場合ではユーザデータが同一パターンのデータである場合にはチェック不能となるデメリットがあるため、フォーマット時（データをすべて“０”にする処理）のようなＨＤＤ３０のデータが同一データパターンになりやすい場合には、逆にＨＤＤ３０側にＣＣ埋込データｄ３を記憶して管理エリア１７側にはすべて“０”のデータを記憶する処理（フォーマット特殊処理）などによる工夫を行う。同様に、通常の使用においてもホストから連続した同一データパターンがＨＤＤ３０に対し書き込まれるような場合は、当該データ部分ではエラー検出能力が、ＨＤＤ３０側に加工したユーザデータ（ＣＣ埋込データ）を記憶した場合に比べて低下する場合があるので、パリティチェック等を併用するのが望ましい。
【０１４７】
（実施の形態５）
次に、本発明の実施の形態５でのチェック方式では、実施の形態１のチェック方式とは異なり、リード処理時におけるチェック処理において、ＨＤＤ３０からリードしたユーザデータのブロック８１ｂから取り出した第１のチェック用データ（前記ＣＣ埋込データｄ３）を、チェックコードｄ２とＸＯＲ演算するのではなく管理エリア１７の第２のチェック用データ（前記一部抽出データｄ１）とＸＯＲ演算し、演算結果データをチェックコードｄ２と比較・照合してアドレッシング正当性をチェックする。
【０１４８】
図１８は、実施の形態５のディスクアレイ装置でのチェック方式の処理を示す説明図である。ブロック８１からの１つの抽出部分に対する処理のみを示す。コントローラ１０は、対象のユーザデータについてＨＤＤ３０にライトする際に、実施の形態１と同様に、チェック用データの作成を行う。すなわち、ＨＤＤ３０側にＣＣ埋込データｄ３が格納され、管理エリア１７側に一部抽出データｄ１が格納される。また、コントローラ１０は、対象のユーザデータについてＨＤＤ３０からリードする際に、その内の前記ＣＣ埋込データｄ３の部分を取り出し、管理エリア１７に格納しておいた前記一部抽出データｄ１を作用させるＸＯＲ演算を行い、演算結果データと、アクセス対象のアドレス情報などから計算により生成したチェックコード（ＣＣ）ｄ２とを比較・照合してアドレッシングの正当性をチェックする。正当であった場合は、前記演算結果データは前記チェックコードｄ２と一致する。正常な一部抽出データｄ１を元の位置に戻すことでユーザデータが復元される。本チェック方式では、チェック対象の元ユーザデータとしてたとえ同一データが連続していた場合（例「ＡＡＡＡＡＡＡＡ」）でもチェック可能である。
【０１４９】
また他の実施の形態として、前記実施の形態４の場合（前記ＣＣ埋込データｄ３の格納位置が管理エリア１７側となる構成）についても同様に本チェック方式を適用可能である。すなわち、実施の形態４のチェック方式に従ってチェックコード埋め込み処理を行うと共に、リード処理時におけるチェック処理において、ＨＤＤ３０からリードしたユーザデータのブロック８１ｂから取り出した第１のチェック用データ（前記一部抽出データｄ１）を、チェックコードｄ２とＸＯＲ演算するのではなく管理エリア１７の第２のチェック用データ（前記ＣＣ埋込データｄ３）とＸＯＲ演算し、演算結果データをチェックコードｄ２と比較・照合してアドレッシング正当性をチェックする。
【０１５０】
（実施の形態６）
次に、実施の形態６のディスクアレイ装置について説明する。実施の形態６でのチェック方式では、複数のＨＤＤ３０における一部ディスク、特にＲＡＩＤグループにおけるパリティディスクのみを対象に、前記アドレッシング正当性チェックに関する処理を行う。ＲＡＩＤ−４／５（６）のようにパリティディスクを有する構成において、パリティディスクに対してのみチェックコードを埋め込む処理を行い、これに対応したチェック処理と、データについてのパリティチェックとを併用する。ハードウェア構成や、ブロックごとの処理の概要は実施の形態１などと同様である。
【０１５１】
図１９は、実施の形態６でのパリティチェックと併用したチェック方式の処理を示す説明図である。ブロック８１からの抽出部分に対する処理のみを示す。コントローラ１０は、前記図６に例示したように、ＲＡＩＤ５等の構成に応じてユーザデータをストライピングする。ディスクライト時における各ストライピングデータに対応したブロック８１の一部抽出データを例えばデータ｛Ａ，Ｂ，Ｃ｝とする。これらデータについてのパリティとなるブロック８１をパリティデータＰとする。コントローラ１０は、ユーザデータにおいてパリティディスクに格納されるパリティデータＰに対してのみ、実施の形態１などでの処理と同様にチェックコード埋め込み処理を行う。コントローラ１０は、パリティからの一部抽出データであるパリティデータＰを第２のチェック用データとして管理エリア１７に格納すると共に、パリティデータＰとチェックコードｄ２をＸＯＲ演算してその結果のＣＣ埋込データｄ３を第１のチェック用データとしてパリティディスク（ＨＤＤ３０）に格納する。またデータ｛Ａ，Ｂ，Ｃ｝の方はデータディスク（ＨＤＤ３０）に格納する。
【０１５２】
ディスクリード時には、コントローラ１０は、前記パリティディスクに対してのみチェック処理を行う。コントローラ１０は、パリティディスクからリードしたデータから取り出した前記ＣＣ埋込データｄ３と、生成したチェックコードｄ２とをＸＯＲ演算し、その演算結果のデータ（正常の場合はパリティデータＰ）を管理エリア１７に保存しておいたパリティデータＰと比較する。アドレッシングが正当であった場合は値が一致し、パリティディスクからリードしたパリティが正常であることが確認される。コントローラ１０は、パリティを用いて、各データディスクからリードしたデータ｛Ａ，Ｂ，Ｃ｝に対応するデータについてパリティチェックを行って元のユーザデータを得る。データディスクからのデータにエラーがある場合は、パリティを用いたＸＯＲ演算により当該データについての回復が可能である。
【０１５３】
管理エリア１７側にＣＣ埋込データｄ３を記憶する構成では、パリティを対象にチェックを行う場合、パリティディスクの障害等によりパリティのリードがエラーの場合でも、データディスクの各データから再生成したパリティを用いて、管理エリア１７に記憶されているデータと照合することで、パリティ正常時と同様にアドレッシング正当性のチェックが可能である。
【０１５４】
図２０（ａ），（ｂ）は、実施の形態６のディスクアレイ装置でのチェック方式における、コントローラ１０による処理のフロー図を示す。本図ではコントローラ１０において特にデータコントローラ１４が主な処理主体である場合の処理を示す。左側（ａ）は、ディスクライト時の処理（前記第１の処理を含む）を、右側（ｂ）は、ディスクリード時の処理（前記第２の処理を含む）を示す。なおＣＰＵ１１やディスク制御部１６などが処理主体で以下の処理を同様に実行する形態とすることも可能である。
【０１５５】
（ａ）で、ディスクライト時において、コントローラ１０は、ホストよりライトデータを受領する（Ｓ３０１）。コントローラ１０は、ライトデータについて、ライト対象のＨＤＤ３０（ディスク領域）に格納されるデータのタイプがデータ（非パリティ）であるかパリティかを確認する（Ｓ３０２）。データタイプがデータである場合は、当該データに対して前記チェックコード埋め込み処理は行わない。データタイプがパリティである場合は、当該パリティデータに対してチェックコード埋め込み処理を行う。
【０１５６】
コントローラ１０は、パリティデータについてブロック８１ごとに、実施の形態１と同様に処理を行う（Ｓ３０３〜Ｓ３０６）。コントローラ１０は、対象のライトデータ（パリティデータ）における全ブロック８１について処理（チェックコード埋め込み処理）が終了したかどうか判断しながら、各ブロック８１について処理を繰り返す（Ｓ３０６）。パリティデータの全ブロック８１について処理終了後、コントローラ１０は、データライト対象となる各ＨＤＤ３０（ＲＡＩＤグループに対応する各ＨＤＤ）に対して、上記処理済みのライトデータ（データ及びパリティ）を転送してライトさせるライト処理を行う（Ｓ３０７）。
【０１５７】
（ｂ）で、ディスクリード時において、コントローラ１０は、ホストよりリード要求を受領する（Ｓ４０１）。コントローラ１０は、データリード対象となる各ＨＤＤ（ＲＡＩＤグループに対応する各ＨＤＤ３０）に対して、対象データのリード処理を行う（Ｓ４０２）。リード処理により各ＨＤＤ３０から対象データ（データ及びパリティ）がリードされる。
【０１５８】
コントローラ１０は、リードデータのうちパリティディスクのデータについて、ブロック８１ｂごとに、実施の形態１と同様に処理を行う（Ｓ４０３〜Ｓ４０７、Ｓ４０９）。
【０１５９】
またコントローラ１０は、ＸＯＲ演算による復元データｄ４について、管理エリア１７の対応するデータと比較してアドレッシング正当性をチェックして正常データであると確認した後（Ｓ４０６−ＹＥＳ）、復元データｄ４すなわちパリティデータと、ディスクディスクからリードしたデータ（非パリティ）とでパリティチェックを行う。コントローラ１０は、前記復元データｄ４すなわちパリティデータと、データから再生成したパリティとを比較する（Ｓ４０８）。比較により値が一致する場合は、データのアドレッシングが正当であると確認される。比較により値が不一致する場合は、データのアドレッシングが正当でないと確認されるので、ＣＰＵ１１へエラーを通知するなどの対応処理を行う（Ｓ４０７）。
【０１６０】
コントローラ１０は、対象のリードデータにおける全ブロック８１ｂについて上記処理（チェック処理）が終了したかどうか判断しながら、各ブロック８１ｂについて処理を繰り返す（Ｓ４０９）。パリティデータの全ブロック８１ｂについて処理終了後、コントローラ１０は、ホストに対して処理後のリードデータを転送する（Ｓ４１０）。チャネル制御部１３によりキャッシュメモリ１５からリードデータをホストに送信する。
【０１６１】
本チェック方式では、パリティディスクに対してのアドレッシング正当性チェックに関する処理と、正当性チェックされたパリティを用いた、データについてのパリティチェックの処理とを併用することで、全ディスクに対して処理を施す実施の形態１に比べて、パリティのみを対象とした処理で済むので、その分管理エリア１７として必要な記憶容量および処理負荷の低減が可能である。
【０１６２】
管理エリア１７として必要な記憶容量は、例えばＲＡＩＤ５における「４Ｄ＋１Ｐ（データディスク×４＋パリティディスク×１）」構成の場合で、ブロック（５１２バイト）単位で４バイトの抽出かつパリティのみ処理対象とした場合において、何もしない場合の記憶容量と比較すると、４／（４×５１２）の減少（最大容量比９９．８％、必要容量０．２％）となる。またこれら管理エリア１７に必要な容量はデータディスク数や処理データ単位の拡大などによっても更に低減する事が可能である。例えば「８Ｄ＋１Ｐ，６４ＫＢストライプサイズ単位」の構成では必要容量０．０００７６３％と計算される。なお管理エリア１７として必要な記憶容量の算出式は、パリティディスク１個の構成で、処理データ単位（ブロック８１）からの抽出バイト数＝ｘ、処理データ単位のバイト数＝ｍ、データディスク数＝ｎとした場合、「管理エリア容量＝（ｘ÷（ｍ×ｎ））×ディスク１個当りの最大容量」である。
【０１６３】
（実施の形態７）
次に、実施の形態７のディスクアレイ装置について説明する。実施の形態７でのチェック方式では、ＲＡＩＤ制御としてＲＡＩＤ−１／０＋１のようにミラーリングが行われミラーディスクを有する構成において、実施の形態６と同様にアドレッシング正当性チェックとの併用を行う。ミラー／メインのＲＡＩＤグループにおける一方のディスクに対してのみチェックコードを埋め込む処理を行い、これに対応したチェック処理と、ミラーデータによるデータ復元とを併用する。ハードウェア構成や、ブロックごとの処理の概要は実施の形態１などと同様である。
【０１６４】
図２１は、実施の形態７でのミラーリングと併用したチェック方式の処理を示す説明図である。ブロック８１からの抽出部分に対する処理のみを示す。コントローラ１０は、ＲＡＩＤ１等の構成に応じてユーザデータをミラーリング（二重書き）する。ディスクライト時におけるミラーを構成する複数のディスクに格納される各データ（メイン／ミラー）に対応したブロック８１の一部抽出データを例えばデータＡとする。コントローラ１０は、ミラーを構成するディスクにおける一方のディスク（例えばメイン側のＨＤＤ３０）に格納されるデータＡに対してのみ、実施の形態１などでの処理と同様にチェックコード埋め込み処理を行う。コントローラ１０は、データＡを第２のチェック用データとして管理エリア１７に格納すると共に、データＡとチェックコードｄ２をＸＯＲ演算してその結果のＣＣ埋込データｄ３を第１のチェック用データとして前記一方のディスク（メイン側）に格納する。また他方のデータＡの方は他方のディスク（ミラー側のＨＤＤ３０）に格納する。
【０１６５】
ディスクリード時には、コントローラ１０は、前記ディスクライト時の処理と対応して、前記ミラーを構成するディスクの一方のディスクに対してのみチェック処理を行う。コントローラ１０は、一方のディスク（メイン側）からリードしたデータから取り出した前記ＣＣ埋込データｄ３と、生成したチェックコードｄ２とをＸＯＲ演算し、その演算結果のデータ（正常の場合はデータＡ）を管理エリア１７に保存しておいたデータＡと比較する。アドレッシングが正当であった場合は値が一致し、前記一方のディスク（メイン側）からリードしたデータが正常であることが確認される。コントローラ１０は、この正常なデータを用いて、他方のディスク（ミラー側）からリードしたデータについて比較してチェックする。これにより他方のディスク（ミラー側）のデータについての正当性もチェックされる。他方のディスク（ミラー側）からのデータにエラーがある場合は、正常なデータを用いて回復がなされる。
【０１６６】
本チェック方式の場合、ミラー／メインの両方のディスクにチェックコードを埋め込んでチェックする場合に比べて管理エリア１７の容量および処理負荷の低減が可能である。ミラーを構成する複数のディスクにおけるチェックコード埋め込み処理対象でないディスクのデータ分に対応して管理エリア１７の容量の削減が可能である。
【０１６７】
また本チェック方式において、チェックコードとして前記ＬＢＡのみを用いて、管理エリア１７を、ミラーを構成する複数のディスクで共用する形態とすることも可能である。
【０１６８】
（実施の形態８）
次に、本発明の実施の形態８のディスクアレイ装置でのチェック方式として、実施の形態１などと同様にチェックに関する処理を行うと共に、ユーザデータにおける複数のブロック８１をまとめて管理することで、管理エリア１７で必要な記憶容量を縮小することが可能である。
【０１６９】
図２２は、実施の形態８で、ユーザデータにおける複数のブロック８１をまとめて１つの単位として管理して前記チェックに関する処理を行う場合についての説明図である。本図では、複数のブロック８１として例えば１６ブロック（８ＫＢ）を１つの管理単位とする例を示す。ＨＤＤ３０におけるＬＢＡとして例えば００００から０００Ｆまでがあり、各ＬＢＡの領域で１ブロック（５１２バイト）のデータが格納される。例として各ブロック８１の先頭８バイトの抽出位置に対してデータＤ（００００）〜Ｄ（０００Ｆ）が格納されている様子を示す。
【０１７０】
チェックコード埋め込み処理及びチェック処理において、１６ブロックのデータをまとめて１つの管理単位とする。コントローラ１０は、対象データの１６ブロックにおいて、例えば最初の１ブロックを前記チェックコード埋め込みのためのデータ抽出対象のブロックとする。そして、最初の１ブロックのユーザデータから一部データ（例えば先頭８バイト）を抽出して、その一部抽出データを管理エリア１７に第２のチェック用データとして格納する。例えば管理エリア１７に、ＬＢＡが「００００」のブロックから抽出した抽出データＤ（００００）（８バイト）を記憶する。そして、前記最初の１ブロックにおける一部抽出データの抽出位置に対して、前記一部抽出データとチェックコードとのＸＯＲ演算により作成したＣＣ埋込データＣ（００００）を戻してＨＤＤ３０側に記憶する。そして、管理エリア１７に、前記抽出データＤ（００００）とセットで、当該１ブロックの一部抽出データの抽出位置と対応する、他の１５ブロックの一部データ（Ｄ（０００１）〜Ｄ（０００Ｆ））に関するＸＯＲ演算の結果のデータＣ（１−Ｆ）を記憶する。データＣ（１−Ｆ）は、Ｄ（０００１）からＤ（０００Ｆ）までをＸＯＲ演算したものである。また、リード処理時には、上記ＨＤＤ３０側のＣＣ埋込データＣ（００００）、上記管理エリア１７側のチェック用データＤ（００００）及びＣ（１−Ｆ）を使用して、１６ブロックに対応したチェック処理を行う。このように管理単位となるデータサイズを拡大することで、管理エリア１７の容量を更に縮小することが可能である。
【０１７１】
また他の実施の形態として、ＲＡＩＤ制御を行う構成でパリティチェックをサンプリングで行う場合、すなわち通常リード時にはパリティを用いたチェックはしておらず、コントローラ１０からのサンプリング実行時のＨＤＤ３０からのサンプリングデータ（データとパリティ）を用いてパリティチェックを行う場合に、その実行と同タイミングで前記チェック処理を実行する処理形態とすることも可能である。
【０１７２】
図２３は、前述したチェック方式の組み合わせの特長についてまとめた表である。管理エリア１７の容量は、表に示す方式以外にも、抽出データのサイズ及び管理対象データ単位（ブロック単位、ＯＳ等のクラスタ（複数のブロック）単位、ＲＡＩＤグループのデータストライプ単位など）により可変である。表に示すように、チェックコード埋め込み処理を行う対象となるディスク（ＨＤＤ３０）に関して、複数のＨＤＤ３０における、前記全ディスクを対象とする場合（実施の形態１）、前記ミラーディスクにおけるミラー／メインの一方側のみの場合（実施の形態７）、前記パリティディスクのみの場合（実施の形態６）がある。また、チェックコードを埋め込んだデータ（ＣＣ埋込データｄ３）の格納先として、ＨＤＤ３０側の場合（実施の形態１）と管理エリア１７側の場合（実施の形態４）がある。これらに加え、フラッシュメモリストレージ１９やシステム領域３５を使用する処理（実施の形態２）、ブロック８１の複数箇所から抽出してチェック用データとする処理（実施の形態３）、ＨＤＤ３０からのリードデータから取り出したチェック用データについて管理エリアデータ７２とＸＯＲ演算してからチェックコードｄ２と比較する処理（実施の形態５）などを組み合わせた各形態が可能である。
【０１７３】
適用可能なＲＡＩＤレベルとしては｛０，１，０＋１，４，５（６）｝がある。全ディスク対象の場合、これら各ＲＡＩＤレベルに適用可能である。ミラー／メイン対象の場合、ＲＡＩＤ−１，０＋１に適用可能である。パリティディスク対象の場合、ＲＡＩＤ−４，５（６）に適用可能である。なお、管理エリア１７側にＣＣ埋込データｄ３を格納する場合（実施の形態４）では、パリティチェック／ミラーデータとの比較併用の処理により信頼性の向上が可能である。なお、ＲＡＩＤ３については図中に示していないが、ＲＡＩＤ４の場合と同等である。
【０１７４】
また、前述したように、必要な管理エリア１７の容量に違いがある。特にパリティディスク対象の場合、管理エリア１７の容量を小さくできる。また、前記パリティ／ミラー比較併用を行うことができる。また、ＨＤＤ３０に対するユーザデータ変換処理とその負荷に違いがある。管理エリア１７側にＣＣ埋込データｄ３を格納する場合は、ユーザデータ変換処理が不要である。特にパリティディスク対象の場合はその負荷が小さくなる。また、ＨＤＤ３０へ格納されるユーザデータとして同一データパターンが連続した場合の信頼性の違いがある。ＨＤＤ３０側にＣＣ埋込データｄ３を格納する場合は、同一データが連続している場合でもチェック可能である。管理エリア１７側にＣＣ埋込データｄ３を格納する場合は、同一データが連続しても対応可能とするために前記フォーマット特殊処理などの工夫を行う。
【０１７５】
（実施の形態９）
次に、実施の形態１などでのチェック処理によってアドレッシング異常（エラー）が検出された際に行う処置について説明する。実施の形態９のディスクアレイ装置では、前述した実施の形態でのチェック方式の処理に加えて、前記チェック処理によってエラーが検出された際に、エラーに応じた対応処理（エラー処理）を行う。図２４、図２５は、実施の形態９でのエラー処理としてコントローラ１０のＣＰＵ１１が実行する処理についてのフロー図である。本図に示すエラー処理は、データアクセスについてのリトライの結果がＮＧだった場合に行う処理である。図２４は、ＨＤＤグループにおける全ディスク対象にチェックコード埋め込み処理を行う場合（実施の形態１）に対応したエラー処理（Ｐ１）を、図２５は、パリティディスクのみ対象にチェックコード埋め込み処理を行う場合（実施の形態６）に対応したエラー処理（Ｐ２）を示す。
【０１７６】
Ｐ１：  まず、全ディスク対象の場合、処置は以下のようになる。この場合において、以下に示す、１台のＨＤＤ３０のみ異常を検出した場合の処理（Ｐ１−１）と、全ＨＤＤ３０で異常を検出した場合の処理（Ｐ１−２）がある。
【０１７７】
Ｐ１−１：  １台のＨＤＤ３０のみアドレッシング異常を検出した場合は、当該１台のＨＤＤ３０における異常であると判断される。この場合、ディスクアレイ装置は、当該ＨＤＤ３０に対してデータリード処理をリトライして再度ＮＧの場合等において、当該ＨＤＤ３０を閉塞し、ＲＡＩＤ０の場合を除いて冗長ディスクをもとにデータ回復を行う。
【０１７８】
Ｐ１−２：  全ＨＤＤ３０で異常を検出した場合は、ＨＤＤ３０側ではなく制御系の異常であると判断される。この場合、当該ＨＤＤ３０に対してデータリード処理をリトライして再度ＮＧの場合等において、ディスクアレイ装置は、当該ＨＤＤ３０に対する制御を担当しているコントローラ１０を閉塞する。コントローラ１０に関して冗長構成である場合は他のコントローラ１０へ該当ＨＤＤ３０の制御の担当が移される。
【０１７９】
全ＨＤＤ３０で異常を検出した場合で、更に、パリティ有りの場合、ディスクアレイ装置は、データＨＤＤ（データ（非パリティ）を格納しているＨＤＤ３０）のデータからパリティを生成する。その後、以下の三通りの処理がある。
【０１８０】
Ｐ１−２−１：  データＨＤＤが偶数である場合は以下となる。前記データＨＤＤから生成したパリティにチェックコードが含まれないため、パリティＰ（管理エリア１７側）とＸＯＲ演算した結果がチェックコードとなるので、そのチェックコードの示す位置の管理エリア１７が生成したパリティと一致する場合は、ＨＤＤグループアクセス系の障害であると判断される。
【０１８１】
Ｐ１−２−２：  データＨＤＤが奇数である場合は以下となる。前記データＨＤＤから生成したパリティがパリティＰ（管理エリアデータ７２）と一致する場合は、ＨＤＤグループアクセス系の障害であると判断される。
【０１８２】
Ｐ１−２−３：  上記以外の場合は、メモリの部分的な障害などであると判断される。なおメモリの部分的な障害についてはシステム内で診断可能である。以上よりも障害の程度が大きい場合は、一般的に動作不能である。
【０１８３】
Ｐ２：  次にパリティディスクのみ対象の場合、処置は以下の各場合のようになる。
【０１８４】
Ｐ２−１：  チェック処理の結果が異常であるが、データＨＤＤから生成したパリティと管理エリア１７に格納されているパリティＰが一致する場合、パリティＨＤＤの異常であると判断される。この場合、ディスクアレイ装置は、データリード処理をリトライして再度ＮＧの場合等において、当該パリティＨＤＤを閉塞する。
【０１８５】
Ｐ２−２：  チェック処理の結果が異常であり、かつ、データＨＤＤから生成したパリティと管理エリア１７に格納されているパリティＰが不一致する場合、制御系の異常であると判断される。この場合、ディスクアレイ装置は、データリード処理をリトライして再度ＮＧの場合等において、当該ＨＤＤ３０に対する制御を担当しているコントローラ１０を閉塞する。
【０１８６】
Ｐ２−３：  チェック処理の結果は正常であるが、データＨＤＤから生成したパリティと管理エリア１７に格納されているパリティＰが不一致する場合、データＨＤＤの異常であると判断される。この場合、ディスクアレイ装置は、データリード処理をリトライして再度ＮＧの場合等において、異常なデータＨＤＤの位置が不特定となるので、特定データパターンが書き込み済みの診断エリア等を使用した自己診断の処理が必要となる。診断により異常なデータＨＤＤが特定される。
【０１８７】
図２４において、コントローラ１０のＣＰＵ１１は、あるＨＤＤ３０のデータについてのエラー検出に基づき以下の処理を行う。ＣＰＵ１１は、メモリ１２上の管理エリアデータ７２（チェック用データ）が正しいかどうか診断する（Ｓ５０１）。ＣＰＵ１１は、管理エリア１７にエラーがある場合は（Ｓ５０１−ＮＯ）、「管理エリアデータ揮発（ロスト）」などの警告表示等の出力処理を管理装置や管理プログラム等に対して行い（Ｓ５０２）、管理エリアデータ７２の再構築を行って（Ｓ５０３）、メインプログラムへ戻る。
【０１８８】
管理エリアデータ７２が正しい場合（Ｓ５０１−ＹＥＳ）、次に、ＣＰＵ１１は、エラー検出が当該ＨＤＤ３０のみかどうかを判断する（Ｓ５０４）。当該ＨＤＤ３０のみのエラー検出である場合は、「ＨＤＤ異常」と判断して当該ＨＤＤ３０を閉塞する処理を行う（Ｓ５０５）。そして、ＣＰＵ１１は、ＲＡＩＤグループに冗長ディスク（パリティディスク等）がある場合（Ｓ５０６−ＹＥＳ）、データコントローラ１４に対し冗長ディスクを用いたデータ回復を指示する（Ｓ５０７）。指示を受けたデータコントローラ１４は、冗長ディスクからデータをリードして前記閉塞したＨＤＤ３０についてのデータ回復を実行する（Ｓ５０８）。データ回復後、メインプログラムへ戻る。ＲＡＩＤグループに冗長ディスクがない場合（Ｓ５０６−ＮＯ）、ユーザデータ揮発によりデータ回復不能であり（Ｓ５０９）、メインプログラムへ戻る。
【０１８９】
前記エラー検出が当該ＨＤＤ３０以外のＨＤＤ３０にもある場合（Ｓ５０４−ＮＯ）、ＣＰＵ１１は、ＲＡＩＤグループに冗長ディスクがない場合（Ｓ５１０−ＮＯ）、「グループアドレッシング異常」または「メモリ異常」と判断して自コントローラ１０の基板を閉塞する処理を行い（Ｓ５１１）、メインプログラムへ戻る。
【０１９０】
ＣＰＵ１１は、ＲＡＩＤグループに冗長ディスクがある場合（Ｓ５１０−ＹＥＳ）、冗長ディスク等からデータを生成する（Ｓ５１２）。すなわち、パリティ生成やミラーデータによりデータ生成を行う。そして、ＣＰＵ１１は、生成データと当該データは一致するかどうか判断する（Ｓ５１３）。前記生成データと当該データが一致する場合、「グループアドレッシング異常」と判断して、自コントローラ１０の基板を閉塞する処理を行い（Ｓ５１４）、メインプログラムへ戻る。前記生成データと当該データが一致しない場合、「メモリ異常」と判断して、自コントローラ１０の基板を閉塞する処理を行い（Ｓ５１５）、メインプログラムへ戻る。
【０１９１】
図２５において、コントローラ１０のＣＰＵ１１は、パリティディスクについてのエラー検出に基づき以下の処理を行う。ＣＰＵ１１は、メモリ１２上の管理エリアデータ７２が正しいかどうか診断する（Ｓ６０１）。ＣＰＵ１１は、管理エリア１７にエラーがある場合は（Ｓ６０１−ＮＯ）、前記処理（Ｐ１）の場合と同様に警告表示等の出力処理を行い（Ｓ６０２）、管理エリアデータ７２の再構築を行って（Ｓ６０３）、メインプログラムへ戻る。
【０１９２】
管理エリアデータ７２が正しい場合（Ｓ６０１−ＹＥＳ）、次に、ＣＰＵ１１は、データディスクのデータから再生成したパリティが、復元したパリティディスクのパリティデータと一致するかどうか比較して判断する（Ｓ６０４）。パリティディスクのデータと一致する場合、ＣＰＵ１１は、「グループアドレッシング異常」または「メモリ異常」と判断して、自コントローラ１０の基板を閉塞する処理を行い（Ｓ６０５）、メインプログラムへ戻る。
【０１９３】
前記パリティディスクのデータと一致しない場合（Ｓ６０５−ＮＯ）、ＣＰＵ１１は、前記データから再生成したパリティを対応する管理エリアデータ７２（パリティ）と一致するか比較して判断する（Ｓ６０６）。管理エリアデータ７２と一致する場合、「パリティＨＤＤ異常」であると判断してパリティＨＤＤを閉塞する処理を行う（Ｓ６０７）。
【０１９４】
前記管理エリアデータ７２と一致しない場合（Ｓ６０６−ＮＯ）、ＣＰＵ１１は、「データＨＤＤ異常」、すなわち同一ＲＡＩＤグループ内のデータディスクが異常であると判断する（Ｓ６０８）。そして、ＣＰＵ１１は、異常のあるデータＨＤＤ位置を特定して正常なデータＨＤＤと分けるための診断を実行する（Ｓ６０９）。ＣＰＵ１１は、前記診断に基づき特定されたデータＨＤＤを「データＨＤＤ異常」として閉塞する処理を行う（Ｓ６１０）。そして、ＣＰＵ１１は、データコントローラ１４に対し、当該閉塞したデータＨＤＤについてのデータ回復を指示する（Ｓ６１１）。データコントローラ１４は、指示に基づき、同一ＲＡＩＤグループ内の残りディスクのデータからデータ回復を実行する（Ｓ６１２）。データ回復後、メインプログラムへ戻る。
【０１９５】
以上のようにチェック処理の結果に基づいて適切な処置（エラー処理）がディスクアレイ装置で行われる。
【０１９６】
（実施の形態１０）
次に、本発明の他の実施の形態として、実施の形態１０のディスクアレイ装置では、前述した実施の形態での処理に加えて更に、ＨＤＤ３０への格納対象であるユーザデータに対して、計算で得られる規則的なコード（マスクパターン）を埋め込む処理（データ変換処理）を行うことで、信号品質に悪影響を与えやすいデータパターンを回避してデータ信頼性を高める。ハードウェア構成等は前記実施の形態と同様である。
【０１９７】
シリアル転送を行うストレージ（ディスクアレイ装置やＨＤＤ）においては、信号に同期させるためのＰＬＬ回路を使用するのが一般的である。しかしながら、データパターンによって周波数が変化するため、同一データパターンの繰り返し転送や、データの組み合わせによって信号の品質に悪影響を生じやすいデータパターンが存在する。このようなデータパターンの発生を避けるための手段として、本実施の形態では、計算により得られた規則パターンとユーザデータとをＸＯＲ演算してＨＤＤ３０に書き込む。これにより上記悪影響が回避可能となる。
【０１９８】
図２６は、実施の形態１０でのデータ変換処理の例についての説明図である。コントローラ１０は、ライト処理時、ユーザデータについて、ブロック８１ごとに、前記チェックコードの埋め込み対象となる抽出位置（ＣＣ埋込部）に対してチェックコードを埋め込んでチェック用データを作成する処理を行うと共に、前記ＣＣ埋込部以外の領域（変換対象領域）に対して、計算で生成したマスクパターンを埋め込む演算を行う。当該演算は、前記変換対象領域とマスクパターンとのＸＯＲ演算である。変換により生成されたデータパターンを、ＨＤＤ３０に対するライトパターンとする。またコントローラ１０は、リード処理時に、ＨＤＤ３０から前記ライトパターンをリードすると、マスクパターンを取り除く演算を行って、前記チェック用データを用いたチェック処理を行う。
【０１９９】
図２６に示すように、ＨＤＤ３０へのライト及びデータ変換前の元ユーザデータを、例として同一データ「Ｃ０」（１６進数）の連続するデータ列｛Ｃ０，Ｃ０，Ｃ０，……｝とする。また、マスクパターンを、例としてデータ列｛００，０１，０２，……，ＦＦ｝（１６進数）のようなインクリメンタルデータの繰り返しによるパターンとする。
【０２００】
ライト処理時、コントローラ１０は、所定の計算により例のようなマスクパターンを生成する。マスクパターンとしては、計算で一意に定まるならランダムのデータ列となるパターンを用いてもよい。コントローラ１０は、データ変換としてユーザデータ（前記変換対象領域）とマスクパターンをＸＯＲ演算する。変換により生成されるライトパターンは、データ列｛Ｃ０，Ｃ１，Ｃ２，……｝のようになる。そしてコントローラ１０はライトパターンを対象ＨＤＤ３０にライトする。当該データ変換によりユーザデータは信号レベルが変化するデータに変わっているので、前記悪影響を避けることが可能となる。リード処理時、コントローラ１０は、ＨＤＤ３０からのリードデータに対して再度前記マスクパターンとのＸＯＲ演算によるデータ変換を行うことで元ユーザデータを復元する。
【０２０１】
図２７は、コントローラ１０における上記データ変換処理を行う場合の処理のフロー図を示す。本図では特にデータコントローラ１４が主な処理主体である場合で、複数のＨＤＤ３０で全ディスク対象に処理を行う場合について示す。左側（ａ）は、ディスクライト時の処理を、右側（ｂ）は、ディスクリード時の処理を示す。なお、ＣＰＵ１１などがプログラムにより以下の処理を同様に実行する形態でも構わない。
【０２０２】
（ａ）で、ディスクライト時において、コントローラ１０は、ホストよりライトデータを受領する（Ｓ７０１）。ライトデータがキャッシュメモリ１５に格納される。コントローラ１０は、ライトデータについて、ブロック８１ごとに、データの一部を抽出し、一部抽出データｄ１を第２のチェック用データとしてメモリ１２上の管理エリア１７内に格納する（Ｓ７０２）。コントローラ１０は、ライトデータについて、アドレス情報に基づきチェックコードｄ２を生成する（Ｓ０３）。
【０２０３】
データコントローラ１４は、ライトデータのブロック８１において、ＣＣ埋込部を除いたデータ部分（前記変換対象領域）用のマスクデータを計算により生成する（Ｓ７０４）。そして、データコントローラ１４は、ライトデータに対するチェックコード埋め込み処理を行い、かつマスクパターンによるデータ変換を行う。すなわち、ライトデータにおいて、前記一部抽出データｄ１と生成したチェックコードｄ２とをＸＯＲ演算して演算結果のＣＣ埋込データｄ３を戻すと共に、前記変換対象領域と生成したマスクデータとをＸＯＲ演算して演算結果をライトデータにおける元の位置へ戻す（Ｓ７０５）。これによりユーザデータに対しチェックコードｄ２が埋め込まれ、かつデータパターンが変換されたこととなる。変換後のブロック８１ｃがＨＤＤ３０に格納される。
【０２０４】
コントローラ１０は、対象ライトデータにおける全ブロック８１について上記処理が終了したかどうか判断しながら、各ブロック８１について処理を繰り返す（Ｓ７０６）。全ブロック８１について処理終了後、コントローラ１０は、ライト対象となる各ＨＤＤ３０に対して、上記処理済みのライトデータをデータライト処理する（Ｓ７０７）。
【０２０５】
（ｂ）で、ディスクリード時において、コントローラ１０は、ホストよりリード要求を受領する（Ｓ８０１）。コントローラ１０は、データリード対象となる各ＨＤＤ３０に対してデータリード処理を行う（Ｓ８０２）。リード処理により各ＨＤＤ３０から対象データがリードされ、リードデータが作業用メモリに格納される。コントローラ１０は、リードデータについて、ブロック８１ｃごとに、ＣＣ埋込データｄ３を取り出す（Ｓ８０３）。コントローラ１０は、リードデータについて、アドレス情報に基づきチェックコードｄ２を生成する（Ｓ８０４）。
【０２０６】
データコントローラ１４は、リードデータのブロック８１において、前記ＣＣ埋込部を除いたデータ部分（前記変換対象領域）用のマスクデータを計算により生成する（Ｓ８０５）。そして、データコントローラ１４は、リードデータに対するマスクパターンを取り除くデータ変換とユーザデータの復元を行う。すなわち、データコントローラ１４は、リードデータにおいて、前記ＣＣ埋込データｄ３とチェックコードｄ２とをＸＯＲ演算すると共に、前記変換対象領域と前記マスクデータとをＸＯＲ演算し、演算結果をリードデータにおける元の位置へ戻す（Ｓ８０６）。
【０２０７】
コントローラ１０は、前記ＣＣ埋込部の復元データ（正常の場合は前記ＣＣ埋込データｄ３）と、メモリ１２上の管理エリア１７内の前記一部抽出データｄ１とを比較・照合する（Ｓ８０７）。比較により値が一致する場合は、アドレッシングが正当であると確認される。比較により値が不一致する場合は、アドレッシングが異常であると確認されるので、ＣＰＵ１１へその旨を示すエラーを通知するなどの対応処理を行う（Ｓ８０８）。コントローラ１０は、リードデータにおける全ブロック８１ｃについて上記処理が終了したかどうか判断し、各ブロック８１ｃについて処理を繰り返す（Ｓ８０９）。全ブロック８１ｃについて処理終了後、コントローラ１０は、ホストに対してリードデータを転送する（Ｓ８１０）。
【０２０８】
また、図２８に、電源変動要因の大きいデータパターン（３２ビットバスで、全ビットＯＮ／ＯＦＦ）時における本実施の形態でのデータ変換処理を行った場合と行わない場合とにおけるビット変動の比較について示す。左側は、元ユーザデータを、右側は、図中に示すマスクパターンにより変換後のデータ（ライトパターン）について示す。例えば元データのバスデータが「００００００００」や「ＦＦＦＦＦＦＦＦ」のように電力変動及び信号変動が大きいパターンである。マスクパターンは例として「００，０１，０２，０３，……」のようなインクリメンタルデータである。変換後データはバスデータの値が変化するパターンとなり、電力変動及び信号変動が小さくなっている。なお電力変動の平均値は各変動分の絶対値の平均である。単純比較で、表下側の平均値で示すように、信号ラインの変化率は非変換時に比べ７７％に低減され、電力変動率については同様に２８％と大きく低減できる。
【０２０９】
データパターンと関連する主な品質低下要因は、周波数共振、電圧変動、クロストークである。データパターンの具体例として、同一データパターンの繰り返しの場合、周波数共振の要因となる。また例えば前記のような「ＦＦ」と「００」の繰り返しの場合、電圧変動の要因となる。本データ変換処理によれば、周波数共振に関して、異なる周波数のコードに変換されるため、共振／位相ロックを回避可能である。また、電圧変動に関して、すべての信号線が一斉にスイッチを繰り返すことを回避可能である。
【０２１０】
本データ変換処理により、コントローラ１０とＨＤＤ３０のデータ転送において、信号への追従性を確保し、特定周波数を避け、繰り返しパターンの送出による周波数共振や電圧変動等の悪影響を排除できる。従ってハードウェア上の信頼性向上（エラーレート低減）を図ることができる。
【０２１１】
前述した各実施の形態で示したチェック方式は、セクタ長固定の形式のＳＡＴＡ−ＨＤＤ等に限らず、ＳＣＳＩやＦＣ等のセクタ長拡張可能な形式に対応のＨＤＤでも使用可能であり、その場合、通常（非拡張）の５１２バイトのセクタのフォーマットで本実施の形態と同様に使用可能である。
【０２１２】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
【産業上の利用可能性】
【０２１３】
本発明のディスクアレイ装置は、ＨＤＤなどの記憶装置に対するデータの記憶を制御するコンピュータシステムなどに利用可能である。
【図面の簡単な説明】
【０２１４】
【図１】本発明の一実施の形態であるディスクアレイ装置の全体のハードウェア外観構成を示す図であり、（ａ）は正面、（ｂ）は背面を示す。
【図２】本発明の一実施の形態であるディスクアレイ装置に関するシステム構成についての全体の機能ブロック図である。
【図３】本発明の一実施の形態であるディスクアレイ装置の構成として、特にコントローラとシリアルＡＴＡに対応のＨＤＤとの接続構成及び各部間の接続におけるデータパスについて示す図である。
【図４】本発明の一実施の形態であるディスクアレイ装置の構成として、二重化構成の場合に対応したコントローラとシリアルＡＴＡに対応のＨＤＤとの接続構成について示す図である。
【図５】本発明の一実施の形態であるディスクアレイ装置で、コントローラとＨＤＤとの間における、プログラム及びデータの格納位置及び処理の流れを示す説明図である。
【図６】本発明の一実施の形態であるディスクアレイ装置でのＲＡＩＤ制御例として、ＲＡＩＤグループを構成するＨＤＤにデータが格納されている状態の例を示す図である。
【図７】本発明の一実施の形態であるディスクアレイ装置で、１台のＨＤＤに対して本チェック方式での処理における処理データ単位であるブロックが格納されている状態を示す図である。
【図８】本発明の実施の形態１のディスクアレイ装置でのチェック方式における処理概要を示す説明図である。
【図９】本発明の実施の形態１のディスクアレイ装置でのチェック方式におけるディスクへのデータライト処理時に行うチェックコード埋め込み処理のモデルを示す説明図である。
【図１０】本発明の実施の形態１のディスクアレイ装置でのチェック方式におけるディスクからのデータリード処理時に行うチェック処理のモデルを示す説明図である。
【図１１】本発明の実施の形態１のディスクアレイ装置でＲＡＩＤ５の制御に対応して対象データのストライピング及びパリティ処理とチェックコード埋め込み処理とを行う場合における、各処理データの関係についてまとめた説明図である。
【図１２】本発明の実施の形態１のディスクアレイ装置でのアドレッシング正当性チェックに関する原理について示す説明図である。
【図１３】本発明の実施の形態１のディスクアレイ装置でのチェック方式に関する具体的な演算例を示す説明図である。
【図１４】（ａ），（ｂ）は、本発明の実施の形態１のディスクアレイ装置でのチェック方式における、コントローラによる処理のフロー図を示す。
【図１５】本発明の実施の形態２のディスクアレイ装置で、コントローラとＨＤＤとの間における、プログラム及びデータの格納位置及び処理の流れを示す説明図である。
【図１６】本発明の実施の形態３のディスクアレイでのチェック方式による処理例について示す説明図である。
【図１７】本発明の実施の形態４のディスクアレイ装置でのチェック方式の処理を示す説明図である。
【図１８】本発明の実施の形態５のディスクアレイ装置でのチェック方式の処理を示す説明図である。
【図１９】本発明の実施の形態６のディスクアレイ装置でのパリティチェックと併用したチェック方式の処理を示す説明図である。
【図２０】（ａ），（ｂ）は、本発明の実施の形態６のディスクアレイ装置でのチェック方式における、コントローラによる処理のフロー図を示す。
【図２１】本発明の実施の形態７のディスクアレイ装置でのミラーリングと併用したチェック方式の処理を示す説明図である。
【図２２】本発明の実施の形態８のディスクアレイ装置で、ユーザデータにおける複数のブロックをまとめて１つの単位として管理してチェックに関する処理を行う場合についての説明図である。
【図２３】本発明の各実施の形態のディスクアレイ装置でのチェック方式の組み合わせの特長についてまとめた表である。
【図２４】本発明の実施の形態９のディスクアレイ装置でのエラー処理として、コントローラのＣＰＵが実行する、ＨＤＤグループにおける全ディスク対象にチェックコード埋め込み処理を行う場合に対応したエラー処理についてのフロー図である。
【図２５】本発明の実施の形態９のディスクアレイ装置でのエラー処理として、コントローラのＣＰＵが実行する、ＨＤＤグループにおけるパリティディスクのみ対象にチェックコード埋め込み処理を行う場合に対応したエラー処理についてのフロー図である。
【図２６】本発明の実施の形態１０のディスクアレイ装置でのデータ変換処理の例についての説明図である。
【図２７】本発明の実施の形態１０のディスクアレイ装置でのコントローラにおけるデータ変換処理で、複数のＨＤＤにおける全ディスク対象に処理を行う場合のフロー図を示す。
【図２８】本発明の実施の形態１０のディスクアレイ装置で電源変動要因の大きいデータパターン時におけるデータ変換処理を行った場合と行わない場合とにおけるビット変動の比較について示す表である。
【符号の説明】
【０２１５】
１０…コントローラ、１１…ＣＰＵ、１２…メモリ、１３…チャネル制御部、１４…データコントローラ、１５…キャッシュメモリ、１６…ディスク制御部、１７…管理エリア、１８…マイクロプログラム、１９…フラッシュメモリストレージ、２１…データライト処理、２２…データリード処理、３０…ハードディスクドライブ、３１…スイッチ、３２…コンバータ、３３…ＰＢＣ、３５…システム領域、３６…ユーザデータ領域、４１，４２，４３…通信ライン、５６…電源コントローラボード、５９…コントローラボード、７１…ユーザデータ、７２…管理エリアデータ、８１，８１ｂ，８１ｃ…ブロック、９１，９２…通信ケーブル、１００…ディスクアレイ装置、１１１…ラックフレーム、１１２…マウントフレーム、１２０…基本筐体、１３０…増設筐体、２００…ＳＡＮ、３００…情報処理装置、ｄ１…一部抽出データ、ｄ２…チェックコード、ｄ３…チェックコード埋め込みデータ。
【図１】
2006079380.tif 000003
【図２】
2006079380.tif 000004
【図３】
2006079380.tif 000005
【図４】
2006079380.tif 000006
【図５】
2006079380.tif 000007
【図６】
2006079380.tif 000008
【図７】
2006079380.tif 000009
【図８】
2006079380.tif 000010
【図９】
2006079380.tif 000011
【図１０】
2006079380.tif 000012
【図１１】
2006079380.tif 000013
【図１２】
2006079380.tif 000014
【図１３】
2006079380.tif 000015
【図１４】
2006079380.tif 000016
【図１５】
2006079380.tif 000017
【図１６】
2006079380.tif 000018
【図１７】
2006079380.tif 000019
【図１８】
2006079380.tif 000020
【図１９】
2006079380.tif 000021
【図２０】
2006079380.tif 000022
【図２１】
2006079380.tif 000023
【図２２】
2006079380.tif 000024
【図２３】
2006079380.tif 000025
【図２４】
2006079380.tif 000026
【図２５】
2006079380.tif 000027
【図２６】
2006079380.tif 000028
【図２７】
2006079380.tif 000029
【図２８】
2006079380.tif 000030