(57)【要約】      （修正有）【課題】ストレージ装置から上位装置への応答時間を短縮する。【解決手段】１または複数のストレージ１９に対するデータ書き込み制御を少なくとも行う複数の制御装置５を有するストレージ装置３であって、複数の制御装置５はそれぞれ、データを送受信するインタフェース部７と、１または複数のストレージ１９への書き込みデータに付与された第１のチェック用情報と、計算によって得られた書き込みデータに対応する第２のチェック用情報とを比較し、比較結果が不一致の場合にインタフェース部７を介してエラーを報告する制御部９と、をそなえる。【選択図】図１
2014032573.tif 000002
【特許請求の範囲】
【請求項１】
１または複数のストレージに対するデータ書き込み制御を少なくとも行う複数の制御装置を有するストレージ装置であって、
前記複数の制御装置はそれぞれ、
データを送受信するインタフェース部と、
前記１または複数のストレージへの書き込みデータに付与された第１のチェック用情報と、計算によって得られた前記書き込みデータに対応する第２のチェック用情報とを比較し、比較結果が不一致の場合に前記インタフェース部を介してエラーを報告する制御部と、
をそなえることを特徴とするストレージ装置。
【請求項２】
前記制御部は、
前記書き込みデータのコピーを他の制御装置に転送し、
前記比較結果が不一致の場合に、前記書き込みデータと、転送先の制御装置の前記書き込みデータのコピーを消去することを特徴とする請求項１記載のストレージ装置。
【請求項３】
前記第２のチェック用情報の計算は、前記複数の制御装置の少なくとも２つを用いて分散して行なわれることを特徴とする請求項１又は２記載のストレージ装置。
【請求項４】
前記第２のチェック用情報の計算は、前記複数の制御装置の少なくとも２つを用いて順番に行なわれることを特徴とする請求項１〜３のいずれか１項に記載のストレージ装置。
【請求項５】
前記第２のチェック用情報の前記計算は、前記複数の制御装置の前記少なくとも２つを用いてそれぞれの制御装置の負荷に応じて振り分けられることを特徴とする請求項１〜３のいずれか１項に記載のストレージ装置。
【請求項６】
１または複数のストレージに対するデータ書き込み制御を少なくとも行う複数の制御装置を有するストレージ装置の管理方法であって、
前記複数の制御装置のそれぞれにおいて、
前記１または複数のストレージへの書き込みデータに付与された第１のチェック用情報と、計算によって得られた前記書き込みデータに対応する第２のチェック用情報とを比較し、
比較結果が不一致の場合に前記インタフェース部を介してエラーを報告する
ことを特徴とするストレージ装置の管理方法。
【請求項７】
１または複数のストレージに対するデータ書き込み制御を少なくとも行う複数の制御装置を有するストレージ装置の管理プログラムであって、
前記複数の制御装置のいずれかによって実行された場合に、当該制御装置に、
前記１または複数のストレージへの書き込みデータに付与された第１のチェック用情報と、計算によって得られた前記書き込みデータに対応する第２のチェック用情報を比較させ、
比較結果が不一致の場合にエラーを報告させる
ことを特徴とするストレージ装置の管理プログラム。
【請求項８】
１または複数のストレージに対するデータ書き込み制御を少なくとも行う複数の制御装置を有するストレージ装置の管理プログラムを記憶する記憶媒体であって、前記管理プログラムは、
前記複数の制御装置のいずれかによって実行された場合に、当該制御装置に、
前記１または複数のストレージへの書き込みデータに付与された第１のチェック用情報と、計算によって得られた前記書き込みデータに対応する第２のチェック用情報を比較させ、
比較結果が不一致の場合にエラーを報告させる
ことを特徴とする記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置、ストレージ装置の管理方法、ストレージ装置の管理プログラム及び同プログラムを記憶する記憶媒体に関する。
【背景技術】
【０００２】
一部のストレージ装置においては、ストレージ装置のChannel Adaptor（ＣＡ）がホスト装置からデータを受信し、ＣＡが、データの整合性のチェックに使用されるBlock Check Code（ＢＣＣ）を計算することが行なわれる。
ここで、ＢＣＣとは、所定サイズのデータブロックごとに、データ整合性のチェックのため追加される領域である。
【０００３】
例えば、５１２バイトのデータブロック毎に８バイトのＢＣＣが付与される。
例えば、図８に示す構造のデータが追加される。
図８は、データブロックのデータ構造１００を示す模式図である。
図８において、データ構造１００は、５１２バイトのデータ部１０３と、８バイトのＢＣＣ部１０５とを有する。
【０００４】
データ部１０３は、ホスト装置とストレージ装置との間でやり取りされるデータ本体であり、データ形式は、データブロック形式である。
ＢＣＣ部１０５は、データ部１０３のデータの整合性をチェックするために用いられるＢＣＣであり、データ形式は、ＢＣＣ形式である。
図８に示す例では、例えば、１６ビットのブロックＣＲＣ１０７、１ビットのバッドフラグ１１１、１ビットのパリティビット１１３、６ビットのＳＬＵ（Secondary Logical Unit）番号１１５、８ビットのＩＤ部１１７、及び３２ビットのカウンタ１１９を有する。
【０００５】
また、複数のＣＭ（Controller Module）を装備しているストレージ装置では、一般に、ＣＭがＣＡ経由で受信したデータを、他ＣＭに送信し、複数のＣＭでミラーデータを保持することが行なわれる。
次に、図９を参照して、ホスト装置からストレージ装置にデータが送信された場合の処理を説明する。
【０００６】
図９は、ホスト装置からストレージ装置にデータが送信された場合の処理のフローチャートである。
図９のステップＳ１０１において、ＣＡがホスト装置からデータを含む書き込み（ライト）コマンドを受信する。
ステップＳ１０３において、ＣＡは、ホスト装置から受信したデータを５１２バイト毎のブロックに分割し、８バイトのＢＣＣを作成して５２０バイトのデータブロックを作成し、自ＣＭ（以降、ミラー元ＣＭとも呼ぶ）に送信する。
【０００７】
ステップＳ１０５において、ＣＭが、ホスト装置から受信を完了したデータブロック数を示すデータカウンタをゼロにセットする。
ステップＳ１０７において、ミラー元ＣＭはＣＡから５２０バイトのデータブロックを受信する。ミラー元ＣＭに渡されるデータブロックには、ＣＡが計算したブロックのＣＲＣ（以下に、単にＣＲＣと呼ぶ）１０７を含むＢＣＣが付与されている。
【０００８】
ステップＳ１０９において、ミラー元ＣＭは、データをミラーする先のＣＭ（以降、ミラー先ＣＭと呼ぶ）にデータブロックを送信し、データブロックをミラー先ＣＭにコピーさせる。
ステップＳ１１１において、ミラー元ＣＭは、ミラー先ＣＭでデータが正常に処理されたかどうかを判定する。
【０００９】
ミラー先ＣＭでデータが正常に処理された場合（ステップＳ１１１のＹＥＳルート参照）、ミラー元ＣＭは、ステップＳ１１３においてデータカウンタを１インクリメントする。
データカウンタがブロック数と等しい場合（ステップＳ１１５のＹＥＳルート参照）、ステップＳ１１７において、ＣＡがホスト装置にデータ受信完了を応答する。
【００１０】
一方、データカウンタがブロック数と等しくない場合（ステップＳ１１５のＮＯルート参照）、未処理のデータブロックが存在するため、ミラー元ＣＭはステップＳ１０７に戻り、上記ステップＳ１０７〜Ｓ１１５の処理を繰り返す。
また、ステップＳ１１１において、ミラー先でデータが正常に処理されていない場合（ステップＳ１１１のＮＯルート参照）、ステップＳ１１９において、ＣＡがホスト装置にデータ受信失敗を応答する。
【００１１】
このため、ストレージ装置からホスト装置への応答時間を短縮することが求められている。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２００２−２３９６６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
上記課題に鑑みて、１つの側面では、本発明は、ストレージ装置から上位装置への応答時間を短縮することを目的とする。
なお、前記目的に限らず、後述する発明を実施するための形態に示す各構成により導かれる作用効果であって、従来の技術によっては得られない作用効果を奏することも本発明の他の目的の１つとして位置付けることができる。
【課題を解決するための手段】
【００１４】
一態様では、１または複数のストレージに対するデータ書き込み制御を少なくとも行う複数の制御装置を有するストレージ装置であって、前記複数の制御装置はそれぞれ、データを送受信するインタフェース部と、前記１または複数のストレージへの書き込みデータに付与された第１のチェック用情報と、計算によって得られた前記書き込みデータに対応する第２のチェック用情報とを比較し、比較結果が不一致の場合に前記インタフェース部を介してエラーを報告する制御部と、をそなえるストレージ装置が提供される。
【００１５】
他の態様では、１または複数のストレージに対するデータ書き込み制御を少なくとも行う複数の制御装置を有するストレージ装置の管理方法であって、前記複数の制御装置のそれぞれにおいて、前記１または複数のストレージへの書き込みデータに付与された第１のチェック用情報と、計算によって得られた前記書き込みデータに対応する第２のチェック用情報とを比較し、比較結果が不一致の場合に前記インタフェース部を介してエラーを報告するストレージ装置の管理方法が提供される。
【００１６】
他の態様では、１または複数のストレージに対するデータ書き込み制御を少なくとも行う複数の制御装置を有するストレージ装置の管理プログラムであって、前記複数の制御装置のいずれかによって実行された場合に、当該制御装置に、前記１または複数のストレージへの書き込みデータに付与された第１のチェック用情報と、計算によって得られた前記書き込みデータに対応する第２のチェック用情報を比較させ、比較結果が不一致の場合にエラーを報告させるストレージ装置の管理プログラムが提供される。
【００１７】
他の態様では、１または複数のストレージに対するデータ書き込み制御を少なくとも行う複数の制御装置を有するストレージ装置の管理プログラムを記憶する記憶媒体であって、前記管理プログラムは、前記複数の制御装置のいずれかによって実行された場合に、当該制御装置に、前記１または複数のストレージへの書き込みデータに付与された第１のチェック用情報と、計算によって得られた前記書き込みデータに対応する第２のチェック用情報を比較させ、比較結果が不一致の場合にエラーを報告させる記憶媒体が提供される。
【発明の効果】
【００１８】
本発明によれば、ストレージ装置から上位装置への応答時間を短縮することができる。
【図面の簡単な説明】
【００１９】
【図１】実施形態の一例としてのストレージシステムのハードウェア構成を示す模式図である。
【図２】第１実施形態の一例としてのＣＭの機能構成を示すブロック図である。
【図３】第１実施形態の一例としてのストレージ装置におけるミラー元ＣＭにおける処理を示すフローチャートである。
【図４】第１実施形態の一例としてのストレージ装置におけるミラー先ＣＭの処理を示すフローチャートである。
【図５】第１実施形態の一例としてのストレージ装置におけるミラー先ＣＭのミラーデータの消去処理を示すフローチャートである。
【図６】第２実施形態の一例としてのＣＭの機能構成を示すブロック図である。
【図７】第２実施形態の一例としてのストレージ装置におけるミラー元ＣＭの処理を示すフローチャートである。
【図８】ストレージ装置におけるデータブロックのフォーマットを示す図である。
【図９】従来のストレージ装置における処理を示すフローチャートである。
【図１０】ストレージ装置における処理を示すフローチャートである。
【発明を実施するための形態】
【００２０】
以下、図面を参照して本ストレージ装置、制御装置及び制御方法に係る実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形（実施形態及び各変形例を組み合わせる等）して実施することができる。
【００２１】
（Ａ）第１実施形態
図１は、第１実施形態の一例としてのストレージシステム１のハードウェア構成を示す模式図である。
ストレージシステム１は、ストレージ装置３とホスト装置２１とを備える。
ストレージ装置３は、ホスト装置２１に対して記憶領域を提供するものであり、通信ネットワーク２５を介して相互に通信可能に接続されている。
【００２２】
ストレージ装置３は、図１に示すように、ＣＭ（制御装置）５−１，５−２及びドライブエンクロージャ１７−１，１７−２をそなえる。
ＣＭ５−１，ＣＭ５−２は、ストレージ装置３内の動作を制御するコントローラであり、ホスト装置２１からのリード／ライト等のコマンドを受け取り、種々の制御を行なう。
ＣＭ５−１は、ＣＡ（インタフェース部）７−１、Central Processing Unit（ＣＰＵ；制御部）９−１、メモリ１１−１、アダプタ１３−１、ＦＣ１５−１，１５−２を有する。
【００２３】
また、ＣＭ５−２は、ＣＡ７−２、９−２、メモリ１１−２、アダプタ１３−２、ＦＣ１５−３、１５−４を有する。
ドライブエンクロージャ１７−１，１７−２は、複数台のHard Disk Drive（ＨＤＤ；ストレージ）１９ａ−１〜ｎ，１９ｂ−１〜ｎ（ｎは１以上の整数）をそなえる。
ＣＭ５−１はＣＡ７−１を介して、又、ＣＭ５−２はＣＡ７−２を介して、それぞれネットワーク経由でホスト装置２１に接続されている。そして、これらのＣＭ５−１，５−２は、ホスト装置２１から送信されるリード／ライト等のコマンドを受信し、不図示のエキスパンダ等を介してＨＤＤ１９ａ−１〜ｎ，１９ｂ−１〜ｎの制御を行なう。又、ＣＭ５−１，５−２は互いにほぼ同様の構成を有している。
【００２４】
ホスト装置２１は、例えば、サーバ機能をそなえたコンピュータ（情報処理）などの上位装置であり、ストレージ装置３との間において、ＳＣＳＩコマンドやレスポンス等の各種データをＴＣＰ／ＩＰを用いて送受信する。このホスト装置２１は、ストレージ装置３に対してリード／ライト等のディスクアクセスコマンドを送信することにより、ストレージ装置３が提供する記憶領域にデータの書き込みや読み出しを行なう。
【００２５】
ＨＤＤ１９ａ−１〜ｎ，１９ｂ−１〜ｎは、データを読み書き可能に格納する記憶装置であり、ホスト装置２１から受信したデータを記憶可能な記憶部として機能する。そして、ストレージ装置３は、これらの複数のＨＤＤ１９ａ−１〜ｎ，１９ｂ−１〜ｎを組み合わせて、冗長化された１つのストレージとして管理する、Redundant Arrays of Inexpensive Disks（ＲＡＩＤ）装置であってもよい。
【００２６】
以下、ＣＭを示す符号としては、複数のＣＭのうち１つを特定する必要があるときには符号５−１，５−２を用いるが、任意のＣＭを指すときには符号５を用いる。
更に、以下、ＣＡを示す符号としては、複数のＣＡのうち１つを特定する必要があるときには符号７−１，７−２を用いるが、任意のＣＡを指すときには符号７を用いる。
更に、以下、ＣＰＵを示す符号としては、複数のＣＰＵのうち１つを特定する必要があるときには符号９−１，９−２を用いるが、任意のＣＰＵを指すときには符号９を用いる。
【００２７】
更に、以下、メモリを示す符号としては、複数のメモリのうち１つを特定する必要があるときには符号１１−１，１１−２を用いるが、任意のメモリを指すときには符号１１を用いる。
更に、以下、アダプタを示す符号としては、複数のアダプタのうち１つを特定する必要があるときには符号１３−１，１３−２を用いるが、任意のアダプタを指すときには符号１５を用いる。
【００２８】
更に、以下、ＦＣを示す符号としては、複数のＦＣのうち１つを特定する必要があるときには符号１５−１〜１５−４を用いるが、任意のＦＣを指すときには符号１５を用いる。
更に、以下、ドライブエンクロージャを示す符号としては、複数のドライブエンクロージャのうち１つを特定する必要があるときには符号１７−１，１７−２を用いるが、任意のドライブエンクロージャを指すときには符号１７を用いる。
【００２９】
更に、以下、ＨＤＤを示す符号としては、複数のＨＤＤのうち１つを特定する必要があるときには符号１９ａ−１〜ｎ，１９ｂ−１を用いるが、任意のＨＤＤ指すときには符号１９を用いる。
ＣＡ７は、ホスト装置２１等と通信可能に接続するインタフェースコントローラ（通信アダプタ）である。ＣＡ７は、ホスト装置２１等から送信されたデータを受信したり、ＣＭ５から出力するデータをホスト装置２１等に送信する。すなわち、ＣＡ７は、ホスト装置２１等の外部装置との間でのデータの入出力（Input/Output；Ｉ／Ｏ）を制御する。
【００３０】
ホスト装置２１からデータを受信すると、ＣＡ７は、受信したデータを所定のサイズのデータブロック（例えば、５１２バイトのデータブロック）に分割し、各データブロックについてＣＲＣを計算してＢＣＣを付加し、後述するＣＭ７に送信する。なお、受信したデータにＣＲＣがついている場合ＣＲＣの計算は行わなくても良い。
メモリ１１は、ＣＰＵ９が実行するプログラムや種々のデータを格納する記憶装置であり、ＲＯＭやＲＡＭである。
【００３１】
アダプタ１３は、ＣＭ５間を通信可能に接続するためのインタフェースである。
ＦＣ１５は、ＣＭ５とドライブエンクロージャ等とを通信可能に接続するためのインタフェースであり、デバイスアダプタ等をそなえる。ＣＭ５は、このＦＣ１５を介して、ＨＤＤ１９に対するデータの書き込みや読み出しを行なう。
ＣＰＵ９は、種々の制御や演算を行なう処理装置であり、メモリ１１に格納されたプログラムを実行することにより、種々の機能を実現する。例えば、ＣＰＵ９は、ＲＡＩＤの実現やホスト装置２１からのホストＩ／Ｏに応じたＨＤＤ１９へのアクセス制御等、既知のディスクコントローラとしての種々の機能を実現する。
【００３２】
図１に図示したストレージシステム３には２つのＣＭ５がそなえられているが、３以上のＣＭがそなえられていてもよい。
ここで、ストレージ装置３内でのデータ化けを検出するためには、ストレージ装置３がホスト装置２１からデータを受信してから、できる限り早いタイミングでＣＲＣ１０７を付与することが望ましい。このため、前述のようにデータの受信直後にＣＡ５でＣＲＣ１０７を付与している。
【００３３】
更に、本実施形態の一例としてのストレージ装置３においては、ストレージ装置３内部のＣＡ５以外のモジュールにおいても、データブロックからＣＲＣを計算し、ＣＡ５が付与したＣＲＣ１０７と一致するかどうかをチェックしている。
前述のように、従来、ホスト装置２１へのデータ受信完了応答は、ミラーデータの保持が完了した後にストレージ装置３によって報告される。
【００３４】
しかし、従来の手法では、ＣＡ７の障害で正しいＣＲＣが計算されない等の原因で、正しくないＣＲＣ（エラーＣＲＣ）が付与された場合が問題となる。
データとエラーＣＲＣとがミラー先ＣＭ５−２に引き渡されて、ミラー先ＣＭ５−２がミラーデータを保持してしまうと、ホスト装置２１に対してはデータ受信完了応答が報告されているが、ストレージ装置３ではエラーデータを保持することになる。ストレージ装置３がＣＲＣを検査してエラーを検出した場合、このデータは異常として扱われるが、既にホスト装置２１にデータ受信完了を応答してしまっているため、データロスが発生してしまう。
【００３５】
このような事態を回避するため、本実施形態では、あるＣＭ５がＣＡ７を介してデータを受信した直後に、自ＣＭ５の他の内部回路、および他のＣＭ５でもＣＲＣ（第２のチェック用情報）を再計算する。そして、データを受信したＣＡ７が付与したＣＲＣ（第１のチェック用情報）と比較し、エラーの有無をチェックする。その際、複数のＣＭ５間でＣＲＣの再計算処理を分散させることで、ホスト装置２１に対する応答時間を短縮させることができる。
【００３６】
第１実施形態の一例としてのこのような機能を備えたＣＭ５（例えば、図１のＣＭ５−１，５−２）の機能を説明する。
図２は、第１実施形態の一例としてのＣＭ５の機能構成を示すブロック図である。
図２に示すように、ＣＭ５は、処理部３１を有する。
ＣＰＵ９（図１参照）は、図２に示すように、処理部３１の受信部３３、コピー部３５、再計算部（計算部）３７、比較部３９、及び消去部４１として機能する。
【００３７】
また、メモリ１１（図１参照）は、データカウンタ４３、総ブロック数保持部４５、及びＣＲＣ再計算フラグ４７として機能する。
受信部３３は、自ＣＭ５のＣＡ７から、ホスト装置２１から送信されたデータを受信する。
コピー部３５は、受信部３３が受信したデータブロックのコピーを、他のＣＭ５に転送して他ＣＭ５にミラーデータとして保持させる。
【００３８】
再計算部３７は、ホスト装置２１から受信したデータブロックのＣＲＣ１０７を計算（以下、再計算部３７による計算を再計算と呼ぶ）し、計算したＣＲＣ１０７をメモリ１１に格納する。
比較部３９は、ＣＡ７が付加したＢＣＣ１０５内のＣＲＣ（第１のチェック用情報）１０７と、再計算部３７が計算したＣＲＣ（第２のチェック用情報）１０７とを比較する。
【００３９】
消去部４１は、比較部３９による比較の結果、ＣＡ７が付加したＢＣＣ１０５内のＣＲＣ１０７と、再計算部３７が計算したＣＲＣ１０７とが一致しない場合、そのデータを消去する。
詳細には、ミラー元ＣＭ５の消去部４１は、ＣＲＣが不一致（ＣＲＣエラー）の場合にミラー先ＣＭ５に対し、ミラー無効処理を通知し、ミラー先ＣＭ５にミラーデータを削除させる。また、ミラー先ＣＭ５の消去部４１は、コピー元ＣＭ５からミラー無効処理を通知された場合、ミラーデータを消去する。
【００４０】
データカウンタ４３は、ホスト装置２１から受信したデータブロック用のカウンタであり、ホスト装置２１から受信が完了したデーブロック数を示す。
総ブロック数保持部４５は、ホスト装置２１から送信されるデータブロックの総数を示す数値を保持する。
ＣＲＣ再計算フラグ４７は、自ＣＭ５の再計算部３７によるＣＲＣ１０７の再計算を行なうかどうかを示すフラグである。例えば、ＣＲＣ再計算フラグ４７の値がオフ（例えば“０”）の場合、再計算部３７はＣＲＣ１０７の再計算を行なわず、ＣＲＣ再計算フラグ４７の値がオン（例えば“１”）の場合、再計算部３７はＣＲＣ１０７の再計算を行なう。
【００４１】
なお、後述するように、コピー先ＣＭ５は、コピー元ＣＭ５のＣＲＣ再計算フラグ４７を参照することにより、ＣＲＣの再計算処理を、コピー元、コピー先のいずれのＣＭ５で行なうのかを判定する。
上述の如く構成された、第１実施形態の一例としてのストレージ装置３における処理を、図３を参照しながら説明する。
【００４２】
ここでは、図１のＣＭ５−１が、ホスト装置２１からＣＡ７−１経由で書き込みデータを受信し、ＣＭ５−２にデータをミラーリングする場合を考える。この場合、ＣＭ５−１をミラー元ＣＭ、ＣＭ５−２をミラー先ＣＭと呼ぶ。
図３は、第１実施形態の一例としてのストレージ装置３におけるミラー元ＣＭ５−１の処理を示すフローチャートである。
【００４３】
図３のステップＳ１において、ミラー元ＣＭ５−１のＣＡ７−１が、ホスト装置２１から、データを含む書き込みコマンドを受信する。このとき、ＣＡ７−１は、データの総ブロック数を受信し、その値を、総ブロック数保持部４５に格納する。
ステップＳ３において、ＣＡ７−１は、ホスト装置２１から受信したデータを５１２バイト毎のブロックに分割し、８バイトのＢＣＣを作成して５２０バイトのデータブロックを作成する。
【００４４】
ステップＳ５において、ＣＡ７−１は、データカウンタ４３をゼロにリセットする。
ステップＳ７において、ミラー元ＣＭ５−１の受信部３３は、ＣＡ７−１から５２０バイトのデータブロックを受信する。ミラー元ＣＭに渡されるデータブロックには、ＣＡ７−１が計算したＣＲＣ１０７を含むＢＣＣ１０５が付与されている。
ステップＳ９において、ミラー元ＣＭ５−１の受信部３３は、ＣＲＣ再計算フラグ４７をオフに設定する。
【００４５】
ステップＳ１１において、ミラー元ＣＭ５−１の受信部３３は、データカウンタ４３が奇数かどうかを判定する。
データカウンタ４３が奇数の場合（ステップＳ１１のＹＥＳルート参照）、後述するステップＳ１５に移行する。
一方、データカウンタ４３が偶数の場合（ステップＳ１１のＮＯルート参照）、ステップＳ１３において、ミラー元ＣＭ５−１のコピー部３５はＣＲＣ再計算フラグ４７をオンに設定し、ステップＳ１５に移行する。
【００４６】
ステップＳ１５において、ミラー元ＣＭ５−１のコピー部３５は、ミラー先ＣＭ５−２が正常であるかどうかを判定する。この判定は、例えば、ＣＭ間通信によって行なう。
ミラー先ＣＭ５−２が正常である場合（ステップＳ１５のＹＥＳルート参照）、後述するステップＳ１９に移行する。
一方、ミラー先ＣＭ５−２で異常が検出された場合（ステップＳ１５のＮＯルート参照）、ステップＳ１７において、ミラー元ＣＭ５−１のコピー部３５はＣＲＣ再計算フラグ４７をオンに設定し、ステップＳ１９に移行する。
【００４７】
ステップＳ１９において、ミラー元ＣＭ５−１のコピー部３５は、ミラー先ＣＭ５−２にデータブロックのコピーを送信し、データブロックをミラー先ＣＭ５−２に保持（格納）させる。
ステップＳ２１において、ミラー元ＣＭ５−１の再計算部３５は、ＣＲＣ再計算フラグ４７がオンかどうかを判定する。
【００４８】
ＣＲＣ再計算フラグ４７がオンの場合（ステップＳ２１のＹＥＳルート参照）、ステップＳ２３において、ミラー元ＣＭ５−１の再計算部３７は、ＣＡ７−１から受信したデータブロックのＣＲＣ１０７を再計算する。
ステップＳ２５において、ミラー元ＣＭ５−１の比較部３９は、ステップＳ２３で再計算したＣＲＣ１０７と、ＣＡ７−１から受信したデータに含まれるＣＲＣ１０７とを比較し、両者が一致するかどうかを判定する。
【００４９】
ＣＲＣ１０７が一致する場合（ステップＳ２５のＹＥＳルート参照）、ステップＳ２７において、ミラー元ＣＭ５−１の比較部３９は、データカウンタ４３を１インクリメントする。
一方、ＣＲＣ１０７が一致しない場合（ステップＳ２５のＮＯルート参照）、後述するステップＳ３５に移行する。
【００５０】
次に、ステップＳ２９において、ミラー元ＣＭ５−１の比較部３９は、データカウンタ４３の値が総ブロック数保持部４５の値と等しいかどうかを判定する。
データカウンタ４３の値が総ブロック数保持部４５の値と等しくない場合（ステップＳ２９のＮＯルート参照）、未受信のデータブロックが存在するため、前述したステップＳ７に戻り、残りのデータブロックの受信を続行する。
【００５１】
一方、データカウンタ４３の値が総ブロック数保持部４５の値と等しい場合（ステップＳ２９のＹＥＳルート参照）、全データブロックの受信を完了したので、ステップＳ３１において、ＣＡ７−１がホスト装置２１にデータ受信完了を応答する。
なお、ステップＳ２１においてＣＲＣ再計算フラグ４７がオフの場合（ステップＳ２１のＮＯルート参照）、ＣＲＣ１０７の再計算をミラー先ＣＭ５−２の再計算部３７が行なう。
【００５２】
ステップＳ３３において、ミラー元ＣＭ５−１の再計算部３７は、ミラー先ＣＭ５−２において再計算されたＣＲＣ１０７が、ＣＡ７−１が付加したＣＲＣ１０７と一致したかどうかを判定する。
ミラー先ＣＭ５−２において再計算されたＣＲＣ１０７が、ＣＡ７−１が付加したＣＲＣ１０７と一致した場合（ステップＳ３３のＹＥＳルート参照）、処理が前述のステップＳ２７に移行する。
【００５３】
一方、ミラー先ＣＭ５−２において再計算されたＣＲＣ１０７が、ＣＡ７−１が付加したＣＲＣ１０７と一致しなかった場合（ステップＳ３３のＮＯルート参照）、処理が後述するステップＳ３９に移行する。
また、ステップＳ２５においてＣＲＣ１０７が一致しない場合（ステップＳ２５のＮＯルート参照）、ステップＳ３５において、ミラー元ＣＭ５−１の消去部４１は、ミラー先ＣＭ５−２にミラー無効処理を通知する。
【００５４】
次に、ステップＳ３７において、ミラー元ＣＭ５−１は、ミラー先ＣＭ５−２の処理が終了したかどうかを判定する。
ミラー先ＣＭ５−２の処理が終了していない場合（ステップＳ３７のＮＯルート参照）、ステップＳ３７に戻る。
一方、ミラー先ＣＭ５−２の処理が終了している場合（ステップＳ３７のＹＥＳルート参照）、ステップＳ３９において、ＣＡ７は、ホスト装置２１にデータ受信失敗を応答する。
【００５５】
次に、図３のストレージ装置３におけるミラー先ＣＭ５−２の処理を、図４を参照しながら説明する。
図４は、第１実施形態の一例としてのストレージ装置３におけるミラー先ＣＭ５−２の処理を示すフローチャートである。
ステップＳ５１において、ミラー先ＣＭ５−３の受信部３３は、ミラー元ＣＭ５−１から５２０バイトのデータブロックを受信する。ミラー先ＣＭに渡されるデータブロックには、ミラー元ＣＭ５−１のＣＡ７−１が計算したＣＲＣ１０７を含むＢＣＣ１０５が付与されている。
【００５６】
ステップＳ５３において、ミラー先ＣＭ５−２の再計算部３５は、ミラー先ＣＭ５−１のＣＲＣ再計算フラグ４７を参照して、ＣＲＣ再計算フラグ４７がオンかどうかを判定する。
ミラー先ＣＭ５−１のＣＲＣ再計算フラグ４７がオフの場合（ステップＳ５３のＮＯルート参照）、処理が後述するステップＳ６１に移行する。
【００５７】
一方、ミラー先ＣＭ５−１のＣＲＣ再計算フラグ４７がオンの場合（ステップＳ５３のＹＥＳルート参照）、ステップＳ５５において、ミラー先ＣＭ５−２の再計算部３７は、ミラー元ＣＭ５−１から受信したデータのＣＲＣ１０７を再計算する。
ステップＳ５７において、ミラー元ＣＭ５−１の比較部３９は、ステップＳ５５で再計算したＣＲＣ１０７と、ミラー元ＣＭ５−１から受信したデータに含まれるＣＲＣ１０７とを比較し、両者が一致するかどうかを判定する。
【００５８】
ＣＲＣ１０７が一致する場合（ステップＳ５７のＹＥＳルート参照）、ステップＳ５９において、ミラー先ＣＭ５−２の比較部３９は、ＣＲＣ再計算フラグ４７をオンにする。
次に、ステップＳ６１において、ミラー先ＣＭ５−２は、データミラーを作成する。
次に、ステップＳ６３において、ミラー先ＣＭ５−２はミラー元ＣＭ５−１に対し、データ受信完了を応答する。
【００５９】
一方、ステップＳ５７において、ＣＲＣ１０７が一致しない場合（ステップＳ５７のＮＯルート参照）、ステップＳ６５において、ミラー先ＣＭ５−２の比較部３９は、ミラー元ＣＭ５−１にデータ受信失敗を応答する。
次に、図３のストレージ装置３のミラー先ＣＭ５−２におけるミラーデータの削除処理を、図５を参照しながら説明する。
【００６０】
図５は、第１実施形態の一例としてのストレージ装置３におけるミラー先ＣＭ５−２のミラーデータの削除処理を示すフローチャートである。
ステップＳ６７において、ミラー先ＣＭ５−２は、ミラー元ＣＭ５−１からミラーデータ消去指示を受信する。
ステップＳ６９において、ミラー先ＣＭ５−２の消去部４１は、ミラーデータを消去する。
【００６１】
次に、ステップＳ７１において、ミラー先ＣＭ５−２の消去部４１は、ミラー元ＣＭ５−１に対して、ミラー消去完了を応答する。
第１実施形態の一例によれば、ＣＲＣの再計算を複数のＣＭ５間で分散して行なうので、ストレージ装置３からホスト装置２１への応答時間を短縮することができる。
ここで、比較のために、図１０を参照して、ＣＲＣの再計算を、ミラー元ＣＭ５−１のＣＰＵ９−１で一元的に行なう場合を考える。
【００６２】
図１０は、ホスト装置２１からストレージ装置３にデータが送信された場合の処理のフローチャートである。
図１０のステップＳ１０１において、ＣＡ７−１がホスト装置２１からデータを含む書き込みコマンドを受信する。
ステップＳ１０３において、ＣＡ７−１は、ホスト装置２１から受信したデータを５１２バイト毎のブロックに分割し、８バイトのＢＣＣを作成して５２０バイトのデータブロックを作成する。
【００６３】
ステップＳ１０５において、ミラー元ＣＭ５−１が、ホスト装置２１から受信を完了したデータブロック数を示すデータカウンタをゼロにセットする。
ステップＳ１０７において、ミラー元ＣＭ５−１のＣＰＵ９−１はＣＡ７−１から５２０バイトのデータブロックを受信する。ミラー元ＣＭ５−１のＣＰＵ９−１に渡されるデータブロックには、ＣＡ７−１が計算したＣＲＣ１０７を含むＢＣＣ１０５が付与されている。
【００６４】
ステップＳ１２１において、ミラー元ＣＭ５−１のＣＰＵ９−１はＣＡ７−１から受信したデータのＣＲＣ１０７を再計算する。
ステップＳ１２３において、ミラー元ＣＭ５−１のＣＰＵ９−１は、ステップＳ１２１で再計算したＣＲＣ１０７と、ＣＡ７−１から受信したデータに含まれるＣＲＣ１０７とを比較する。
【００６５】
ＣＲＣ１０７が一致しない場合（ステップＳ１２３のＮＯルート参照）、ステップＳ１１９において、ＣＡ７−１がホスト装置２１にデータ受信失敗を応答する。
一方、ＣＲＣ１０７が一致する場合（ステップＳ１２３のＹＥＳルート参照）、ステップＳ１０９において、ミラー元ＣＭ５−１のＣＰＵ９−１は、ミラー元ＣＭ５−２にデータブロックを送信し、データブロックをミラー元ＣＭ５−２にコピーさせる。
【００６６】
ステップＳ１１１において、ミラー元ＣＭ５−１のＣＰＵ９−１は、ミラー先でデータが正常に処理されたかどうかを判定する。
また、ステップＳ１１１において、ミラー先でデータが正常に処理されていない場合（ステップＳ１１１のＮＯルート参照）、ステップＳ１１９において、ＣＡ７−１がホスト装置２１にデータ受信失敗を応答する。
【００６７】
ミラー先でデータが正常に処理された場合（ステップＳ１１１のＹＥＳルート参照）、ミラー元ＣＭ５−１のＣＰＵ９−１は、ステップＳ１１３においてデータカウンタを１インクリメントする。なお、このデータカウンタは、ステップＳ１０５において、ＣＡ７−１からデータの受信を開始する前にゼロに初期化されている。
データカウンタがブロック数と等しい場合（ステップＳ１１５のＹＥＳルート参照）、ステップＳ１１７において、ＣＡ７−１がホスト装置２１にデータ受信完了を応答する。
【００６８】
一方、データカウンタがブロック数と等しくない場合（ステップＳ１１５のＮＯルート参照）、未処理のデータブロックが存在するため、ミラー元ＣＭ５−１のＣＰＵ９−１はステップＳ１０７に戻り、上記ステップＳ１０７〜Ｓ１１５の処理を繰り返す。
また、ステップＳ１１１において、ミラー先でデータが正常に処理されていない場合（ステップＳ１１１のＮＯルート参照）、ステップＳ１１９において、ＣＡ７−１がホスト装置２１にデータ受信失敗を応答する。
【００６９】
図１０の手法では、データを受信した全てのミラー元ＣＭ５−１のＣＰＵ９−１においてＣＲＣの再計算を行なうので、ミラー元ＣＭ５−１のＣＰＵ９−１の負荷が高くなり、処理状況によってはホスト装置２１への応答が遅延する場合がある。詳細には、ミラー元ＣＭ５−１のＣＰＵ９−１は、ＣＲＣの再計算を行ない、チェックを完了した後にデータ転送完了をホスト装置２１に応答するので、処理状況によっては応答時間が増大してしまう場合がある。
【００７０】
これに対して、第１実施形態の一例としてのストレージ装置３においては、ＣＲＣの再計算を複数のＣＭ５間で分散して行なうので、ストレージ装置３からホスト装置２１への応答時間を短縮することができる。
更に、ＣＡ７から受信したデータブロックのＣＲＣの計算をＣＭ７で再度行なうので、データの信頼性を向上させるという効果も奏する。
【００７１】
更に、消去部４１により、ＣＲＣエラーの発生時に、ミラー元、ミラー先の両方のＣＭ５のデータを消去するので、データの整合性を保証することができる
（Ｂ）第２実施形態
前述した第１実施形態の一例としてのストレージ装置３においては、ＣＲＣの再計算を複数のＣＭ５間で順番に行なっていたが、第２実施形態の一例においては、ＣＭ５の負荷に応じて、負荷の低いＣＭ５がＣＲＣを再計算してもよい。
【００７２】
図６は、第２実施形態の一例としてのＣＭ５の機能構成を示すブロック図である。
なお、図６中、図２と同一の符号は同一もしくは略同一の部分を示しているので、その詳細な説明は省略する。
図６に示すように、図６に示すＣＭ５は、図２に示した構成要素に加えて、負荷比較部４９、ミラー元負荷カウンタ５１、及びミラー先負荷カウンタ５３を有する。
【００７３】
負荷比較部４９は、ミラー元ＣＭ５−１及びミラー先ＣＭ５−２における処理負荷をモニタ及び比較する。例えば、負荷比較部４９は、ミラー元ＣＭ５−１及びミラー先ＣＭ５−２で実行中のプロセス数をモニタする。例えば、負荷比較部４９は、ミラー元ＣＭ５−１のＣＰＵ９−１により実行中のプロセス数を後述するミラー元負荷カウンタ５１に格納する。また、ミラー先ＣＭ５−２のＣＰＵ９−２により実行中のプロセス数を後述するミラー先負荷カウンタ５３に格納する。更に、負荷比較部４９は、後述するミラー元負荷カウンタ５１の値とミラー先負荷カウンタ５３の値とを比較する。
【００７４】
この負荷比較部４９の機能は、ＣＰＵ９（図１参照）によって実現される。
ミラー元負荷カウンタ５１は、ミラー元ＣＭ５−１の負荷を示すカウンタであり、メモリ１１（図１参照）によって実現される。
ミラー先負荷カウンタ５３は、ミラー先ＣＭ５−２の負荷を示すカウンタであり、メモリ１１（図１参照）によって実現される。
【００７５】
ミラー元負荷カウンタ５１は、ミラー元ＣＭ５−１の起動時にゼロにリセットされる。
また、ミラー先負荷カウンタ５３も同様に、ミラー先ＣＭ５−２の起動時にゼロにリセットされる。
上述の如く構成された、第２実施形態の一例としてのストレージ装置３における処理を、図７を参照しながら説明する。
【００７６】
ここでは、第１実施形態と同様に、ミラー元ＣＭ５−１が、ホスト装置２１からＣＡ７−１経由で書き込みデータを受信し、ミラー先ＣＭ５−２にデータをミラーリングする場合を考える。
図７は、第２実施形態の一例としてのストレージ装置３におけるミラー元ＣＭ５−１の処理を示すフローチャートである。
【００７７】
図７のステップＳ１において、ミラー元ＣＭ５−１のＣＡ７−１が、ホスト装置２１から、データを含む書き込みコマンドを受信する。このとき、ＣＡ７−１は、データの総ブロック数を受信し、その値を、総ブロック数保持部４５に格納する。
ステップＳ３において、ＣＡ７−１は、ホスト装置２１から受信したデータを５１２バイト毎のブロックに分割し、８バイトのＢＣＣを作成して５２０バイトのデータブロックを作成する。
【００７８】
ステップＳ５において、ＣＡ７−１は、データカウンタ４３をゼロにリセットする。
ステップＳ７において、ミラー元ＣＭ５−１の受信部３３は、ＣＡ７−１から５２０バイトのデータブロックを受信する。ミラー元ＣＭに渡されるデータブロックには、ＣＡ７−１が計算したＣＲＣ１０７を含むＢＣＣ１０５が付与されている。
ステップＳ９において、ミラー元ＣＭ５−１の受信部３３は、ＣＲＣ再計算フラグ４７をオフに設定する。
【００７９】
ステップＳ４１において、ミラー元ＣＭ５−１の負荷比較部４９は、ミラー先負荷カウンタ５３の値が、ミラー元負荷カウンタ５１の値以上であるかどうかを判定する。
ミラー先負荷カウンタ５３の値が、ミラー元負荷カウンタ５１の値未満の場合（ステップＳ４１のＮＯルート参照）、後述するステップＳ１９に移行する。
一方、ミラー先負荷カウンタ５３の値が。ミラー元負荷カウンタ５１の値以上である場合（ステップＳ４１のＹＥＳルート参照）、ステップＳ１３において、ミラー元ＣＭ５−１のコピー部３５はＣＲＣ再計算フラグ４７をオンに設定し、ステップＳ１９に移行する。
【００８０】
ステップＳ１９において、ミラー元ＣＭ５−１のコピー部３５は、ミラー先ＣＭ５−２にデータブロックのコピーを送信し、データブロックをミラー先ＣＭ５−２に保持（格納）させる。
ステップＳ２１において、ミラー元ＣＭ５−１の再計算部３５は、ＣＲＣ再計算フラグ４７がオンかどうかを判定する。
【００８１】
ＣＲＣ再計算フラグ４７がオンの場合（ステップＳ２１のＹＥＳルート参照）、ステップＳ４５において、ミラー元ＣＭ５−１の再計算部３５は、ミラー元負荷カウンタ５１を１インクリメントする。
次に、ステップＳ４７において、ミラー元ＣＭ５−１の再計算部３７は、ＣＡ７−１から受信したデータブロックのＣＲＣ１０７を再計算する。
【００８２】
ＣＲＣの再計算が終了すると、ステップＳ４９において、ミラー元ＣＭ５−１の再計算部３５は、ミラー元負荷カウンタ５１を１デクリメントする。
ステップＳ２５において、ミラー元ＣＭ５−１の比較部３９は、ステップＳ２３で再計算したＣＲＣ１０７と、ＣＡ７−１から受信したデータに含まれるＣＲＣ１０７とを比較し、両者が一致するかどうかを判定する。
【００８３】
ＣＲＣ１０７が一致する場合（ステップＳ２５のＹＥＳルート参照）、ステップＳ２７において、ミラー元ＣＭ５−１の比較部３９は、データカウンタ４３を１インクリメントする。
一方、ＣＲＣ１０７が一致しない場合（ステップＳ２５のＮＯルート参照）、処理が後述するステップＳ３５に移行する。
【００８４】
次に、ステップＳ２９において、ミラー元ＣＭ５−１の比較部３９は、データカウンタ４３の値が総ブロック数保持部４５の値と等しいかどうかを判定する。
データカウンタ４３の値が総ブロック数保持部４５の値と等しくない場合（ステップＳ２９のＮＯルート参照）、未受信のデータブロックが存在するため、前述したステップＳ７に戻り、残りのデータブロックの受信を続行する。
【００８５】
一方、データカウンタ４３の値が総ブロック数保持部４５の値と等しい場合（ステップＳ２９のＹＥＳルート参照）、全データブロックの受信を完了したので、ステップＳ３１において、ＣＡ７−１がホスト装置２１にデータ受信完了を応答する。
なお、ステップＳ２１においてＣＲＣ再計算フラグ４７がオフの場合（ステップＳ２１のＮＯルート参照）、ＣＲＣ１０７の再計算をミラー先ＣＭ５−２の再計算部３７が行なう。
【００８６】
ステップＳ３３において、ミラー元ＣＭ５−１の再計算部３７は、ミラー先ＣＭ５−２において再計算されたＣＲＣ１０７が、ＣＡ７−１が付加したＣＲＣ１０７と一致したかどうかを判定する。
ミラー先ＣＭ５−２において再計算されたＣＲＣ１０７が、ＣＡ７−１が付加したＣＲＣ１０７と一致した場合（ステップＳ３３のＹＥＳルート参照）、処理が前述のステップＳ２５に移行する。
【００８７】
一方、ミラー先ＣＭ５−２において再計算されたＣＲＣ１０７が、ＣＡ７−１が付加したＣＲＣ１０７と一致しなかった場合（ステップＳ３３のＮＯルート参照）、処理が後述するステップＳ３５に移行する。
また、ステップＳ２５においてＣＲＣ１０７が一致しない場合（ステップＳ２５のＮＯルート参照）、ステップＳ３５において、ミラー元ＣＭ５−１の消去部４１は、ミラー先ＣＭ５−２にミラー無効処理を通知する。
【００８８】
次に、ステップＳ３９において、ＣＡ７は、ホスト装置２１にデータ受信失敗を応答する。
第２実施形態の一例としてのストレージ装置３におけるミラー先ＣＭ５−２の処理は、ミラー先ＣＭ５−２におけるＣＲＣ再計算時の前後にミラー先負荷カウンタ５３を増減させる点を除き、図４，５に示した第１実施形態の一例の処理と同様である。このため、ミラー先ＣＭ５−２の処理の図示並びに説明を省略する。
【００８９】
第２実施形態の一例によれば、上記第１実施形態の一例の利点に加えて、複数のＣＭ５のそれぞれの負荷に応じて、ＣＲＣの再計算処理をＣＭ５間で分散させることができるという効果を奏する。
これにより、ストレージ装置３からホスト装置２１への応答時間を更に短縮することができる。
【００９０】
（Ｃ）その他
なお、上述した実施形態に関わらず、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。
上記の第１及び第２実施形態では、２つのＣＭ５でＣＲＣの再計算を行なっているが、ミラー元ＣＭ５−１の負荷を軽減させるため、３以上のＣＭ５が搭載されている場合には、３以上のＣＭ５でＣＲＣの再計算を実行させてもよい。
【００９１】
また、上記の第１及び第２実施形態では、ミラー元ＣＭ５−１、ミラー先ＣＭ５−２のＣＲＣ再計算の分担割合は１：１であるが、ミラー先ＣＭ５が、更に他ＣＭ５に分散させるなどにより、負担が１：ＮとなるようＣＲＣの再計算処理を分散させてもよい。
また、上記の第２実施形態では、ＣＭ５のＣＰＵ９によって実行中のプロセス数によりＣＭ５によるＣＲＣ再計算処理を振り分けているが、これに限定されない。例えば、ミラー元ＣＭ５−１のＣＰＵ９−１の使用率が負荷分散開始のしきい値を超えた場合に、ミラー先ＣＭ５−２にＣＲＣ再計算処理を振り分け、ミラー元ＣＭ５−１のＣＰＵ９−１の使用率が負荷分散開始のしきい値を下回った場合に、ミラー元ＣＭ５−１でＣＲＣ再計算処理を行なってもよい。
【００９２】
また、ＣＲＣ再計算処理の実行回数を減らすため、ストレージ装置３の導入当初は全データについてＣＲＣ再計算処理を実行するが、チェックが一定回数以上成功した場合は、ＣＲＣ再計算を行なう頻度を徐々に減少させてもよい。
なお、上記の処理部３１、受信部３３、コピー部３５、再計算部３７、比較部３９、消去部４１、及び負荷比較部４９としての機能を実現するためのプログラム（管理プログラム）は、例えばフレキシブルディスク、ＣＤ（ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−ＲＷ等），ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−ＲＡＭ，ＤＶＤ−Ｒ，ＤＶＤ＋Ｒ，ＤＶＤ−ＲＷ，ＤＶＤ＋ＲＷ，ＨＤ  ＤＶＤ等），ブルーレイディスク，磁気ディスク，光ディスク，光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供される。そして、コンピュータはその記録媒体からプログラムを読み取って内部記憶装置又は外部記憶装置に転送し格納して用いる。又、そのプログラムを、例えば磁気ディスク，光ディスク，光磁気ディスク等の記憶装置（記録媒体）に記録しておき、その記憶装置から通信経路を介してコンピュータに提供するようにしてもよい。
【００９３】
また、処理部３１、受信部３３、コピー部３５、再計算部３７、比較部３９、消去部４１、及び負荷比較部４９としての機能を実現する際には、内部記憶装置（本実施形態ではＣＭ５のメモリ１１）に格納されたプログラムがコンピュータのマイクロプロセッサ（本実施形態ではＣＭ５のＣＰＵ９）によって実行される。このとき、記録媒体に記録されたプログラムをコンピュータが読み取って実行するようにしてもよい。
【００９４】
また、本実施形態ではＣＭ５のメモリ１１が、データカウンタ４３、総ブロック数保持部４５、ＣＲＣ再計算フラグ４７、ミラー元負荷カウンタ５１、及びミラー先負荷カウンタ５３として機能する。
なお、本実施形態において、コンピュータとは、ハードウェアとオペレーティングシステムとを含む概念であり、オペレーティングシステムの制御の下で動作するハードウェアを意味している。又、オペレーティングシステムが不要でアプリケーションプログラム単独でハードウェアを動作させるような場合には、そのハードウェア自体がコンピュータに相当する。ハードウェアは、少なくとも、ＣＰＵ等のマイクロプロセッサと、記録媒体に記録されたコンピュータプログラムを読み取るための手段とをそなえており、本実施形態においては、ＣＭ５がコンピュータとしての機能を有しているのである。
【００９５】
（Ｄ）付記
上記第１及び第２実施形態に関して、下記の付記を記載する。
（付記１）
１または複数のストレージに対するデータ書き込み制御を少なくとも行う複数の制御装置を有するストレージ装置であって、
前記複数の制御装置はそれぞれ、
データを送受信するインタフェース部と、
前記１または複数のストレージへの書き込みデータに付与された第１のチェック用情報と、計算によって得られた前記書き込みデータに対応する第２のチェック用情報とを比較し、比較結果が不一致の場合に前記インタフェース部を介してエラーを報告する制御部と、
をそなえることを特徴とするストレージ装置。
【００９６】
（付記２）
前記制御部は、
前記書き込みデータのコピーを他の制御装置に転送し、
前記比較結果が不一致の場合に、前記書き込みデータと、転送先の制御装置の前記書き込みデータのコピーを消去することを特徴とする付記１記載のストレージ装置。
【００９７】
（付記３）
前記第２のチェック用情報の計算は、前記複数の制御装置の少なくとも２つを用いて分散して行なわれることを特徴とする付記１又は２記載のストレージ装置。
（付記４）
前記第２のチェック用情報の計算は、前記複数の制御装置の少なくとも２つを用いて順番に行なわれることを特徴とする付記１〜３のいずれか１項に記載のストレージ装置。
【００９８】
（付記５）
前記第２のチェック用情報の前記計算は、前記複数の制御装置の前記少なくとも２つを用いてそれぞれの制御装置の負荷に応じて振り分けられることを特徴とする付記１〜３のいずれか１項に記載のストレージ装置。
（付記６）
前記第１のチェック用情報の前記計算は前記インタフェース部によって行なわれ、前記第２のチェック用情報の前記計算は前記制御部によって行なわれることを特徴とする付記１〜５のいずれか１項に記載のストレージ装置。
【００９９】
（付記７）
１または複数のストレージに対するデータ書き込み制御を少なくとも行う複数の制御装置を有するストレージ装置の管理方法であって、
前記複数の制御装置のそれぞれにおいて、
前記１または複数のストレージへの書き込みデータに付与された第１のチェック用情報と、計算によって得られた前記書き込みデータに対応する第２のチェック用情報とを比較し、
比較結果が不一致の場合に前記インタフェース部を介してエラーを報告する
ことを特徴とするストレージ装置の管理方法。
【０１００】
（付記８）
前記制御部は、
前記書き込みデータのコピーを他の制御装置に転送し、
前記比較結果が不一致の場合に、前記書き込みデータと、転送先の制御装置の前記書き込みデータのコピーを消去することを特徴とする付記７記載のストレージ装置の管理方法。
【０１０１】
（付記９）
前記第２のチェック用情報の計算は、前記複数の制御装置の少なくとも２つを用いて分散して行なわれることを特徴とする付記７又は８記載のストレージ装置の管理方法。
（付記１０）
前記第２のチェック用情報の計算は、前記複数の制御装置の少なくとも２つを用いて順番に行なわれることを特徴とする付記７〜９のいずれか１項に記載のストレージ装置の管理方法。
【０１０２】
（付記１１）
前記第２のチェック用情報の前記計算は、前記複数の制御装置の前記少なくとも２つを用いてそれぞれの制御装置の負荷に応じて振り分けられることを特徴とする付記７〜９のいずれか１項に記載のストレージ装置の管理方法。
（付記１２）
１または複数のストレージに対するデータ書き込み制御を少なくとも行う複数の制御装置を有するストレージ装置の管理プログラムであって、
前記複数の制御装置のいずれかによって実行された場合に、当該制御装置に、
前記１または複数のストレージへの書き込みデータに付与された第１のチェック用情報と、計算によって得られた前記書き込みデータに対応する第２のチェック用情報とを比較させ、
比較結果が不一致の場合にエラーを報告させる
ことを特徴とするストレージ装置の管理プログラム。
【０１０３】
（付記１３）
前記管理プログラムは、前記制御部に、
前記書き込みデータのコピーを他の制御装置に転送させ、
前記比較結果が不一致の場合に、前記書き込みデータと、転送先の制御装置の前記書き込みデータのコピーを消去させることを特徴とする付記１２記載のストレージ装置の管理プログラム。
【０１０４】
（付記１４）
前記第２のチェック用情報の計算は、前記複数の制御装置の少なくとも２つを用いて分散して行なわれることを特徴とする付記１２又は１３記載のストレージ装置の管理プログラム。
（付記１５）
前記第２のチェック用情報の計算は、前記複数の制御装置の少なくとも２つを用いて順番に行なわれることを特徴とする付記１２〜１４のいずれか１項に記載のストレージ装置の管理プログラム。
【０１０５】
（付記１６）
前記第２のチェック用情報の前記計算は、前記複数の制御装置の前記少なくとも２つを用いてそれぞれの制御装置の負荷に応じて振り分けられることを特徴とする付記１２〜１４のいずれか１項に記載のストレージ装置の管理プログラム。
（付記１７）
１または複数のストレージに対するデータ書き込み制御を少なくとも行う複数の制御装置を有するストレージ装置の管理プログラムを記憶する記憶媒体であって、前記管理プログラムは、
前記複数の制御装置のいずれかによって実行された場合に、当該制御装置に、
前記１または複数のストレージへの書き込みデータに付与された第１のチェック用情報と、計算によって得られた前記書き込みデータに対応する第２のチェック用情報とを比較させ、
比較結果が不一致の場合にエラーを報告させる
ことを特徴とする記憶媒体。
【０１０６】
（付記１８）
前記管理プログラムは、前記制御部に、
前記書き込みデータのコピーを他の制御装置に転送させ、
前記比較結果が不一致の場合に、前記書き込みデータと、転送先の制御装置の前記書き込みデータのコピーを消去させることを特徴とする付記１７記載の記憶媒体。
【０１０７】
（付記１９）
前記第２のチェック用情報の計算は、前記複数の制御装置の少なくとも２つを用いて分散して行なわれることを特徴とする付記１７又は１８記載の記憶媒体。
（付記２０）
前記第２のチェック用情報の計算は、前記複数の制御装置の少なくとも２つを用いて順番に行なわれることを特徴とする付記１７〜１９のいずれか１項に記載の記憶媒体。
【０１０８】
（付記２１）
前記第２のチェック用情報の前記計算は、前記複数の制御装置の前記少なくとも２つを用いてそれぞれの制御装置の負荷に応じて振り分けられることを特徴とする付記１７〜１９のいずれか１項に記載の記憶媒体。
【符号の説明】
【０１０９】
１０７                  ＣＲＣ（第１及び２のチェック用情報）
１１                    メモリ
２１                    ホスト装置
３                      ストレージ装置
３５                    コピー部
３７                    再計算部（計算部）
３９                    比較部
４１                    消去部
５，５−１，５−２      ＣＭ（制御装置）
７，７−１，７−２      ＣＡ（インタフェース部）
９                      ＣＰＵ（制御部）
【図１】
2014032573.tif 000003
【図２】
2014032573.tif 000004
【図３】
2014032573.tif 000005
【図４】
2014032573.tif 000006
【図５】
2014032573.tif 000007
【図６】
2014032573.tif 000008
【図７】
2014032573.tif 000009
【図８】
2014032573.tif 000010
【図９】
2014032573.tif 000011
【図１０】
2014032573.tif 000012