(57)【要約】【課題】論理ブロック内のデータ更新時に１つの物理ブロック内のデータが更新される場合であっても、データの読み込み時に書き込み抜けの検出を可能とする。【解決手段】書き込み要求に応じて、読み込み手段１が、既存データ、およびパリティデータを読み込む。次に、パリティデータ生成手段２が、新たなパリティデータを生成する。さらに、時系列情報生成手段３が、同じ記憶領域への直前の書き込み要求と、今回の書き込み要求とを識別可能な時系列情報を生成する。生成された時系列情報は、時系列情報付与手段４により、更新データとパリティデータとに付与される。そして、書き込み手段５により、証明用時系列情報が付与された更新データと比較用時系列情報が付与されたパリティデータとを、異なるストレージ装置に書き込まれる。【選択図】図１
2010182087.tif 000002
【特許請求の範囲】
【請求項１】
複数のストレージ装置内の記憶領域を複数の単位記憶領域に分割し、複数のデータと前記複数のデータに基づいて生成されるパリティデータとをパリティグループとし、同一パリティグループ内の前記データと前記パリティデータとを前記複数のストレージ装置内の単位記憶領域に分散格納するディスクアレイ装置において、
更新データを含む書き込み要求に応じて、前記更新データが属するパリティグループの更新後パリティデータを生成するパリティデータ生成手段と、
前記更新データを書き込むべき単位記憶領域に格納されている既存データと、前記更新データとの間の書き込み時の前後関係を示す時系列情報を生成する時系列情報生成手段と、
前記書き込み要求に応じて生成された前記時系列情報を証明用時系列情報として前記更新データに付与すると共に、前記証明用時系列情報と同じ値の比較用時系列情報を前記更新データに関連付けて前記更新後パリティデータに付与する時系列情報付与手段と、
前記証明用時系列情報が付与された前記更新データと前記比較用時系列情報が付与された前記更新後パリティデータとを、前記複数のストレージ装置に分散して書き込む書き込み手段と、
を有することを特徴とするディスクアレイ装置。
【請求項２】
さらに、
前記更新データを指定した読み込み要求に応じて、前記証明用時系列情報付きの前記更新データと、前記更新データに関連付けられた前記比較用時系列情報付きの前記更新後パリティデータとを、前記複数のストレージ装置から読み込む読み込み手段と、
前記更新データの前記証明用時系列情報と、前記更新データに関連付けられた前記比較用時系列情報とを比較する比較手段と、
前記証明用時系列情報と前記比較用時系列情報とが一致した場合、前記更新データを出力するデータ出力手段と、
を有することを特徴とする請求項１記載のディスクアレイ装置。
【請求項３】
前記時系列情報生成手段は、前記時系列情報として、前記書き込み要求の入力順が後である程大きな値を生成し、
さらに、
前記比較手段の比較の結果、前記証明用時系列情報の値が、前記更新データに関連付けられた前記比較用時系列情報より小さい場合、前記更新データが属するパリティグループ内の他のデータを前記複数のストレージ装置から読み込み、前記他のデータと前記更新後パリティデータとを用いて前記更新データを修復する修復手段を有し、
前記データ出力手段は、前記更新データの修復が行われた場合、修復後の前記更新データを出力することを特徴とする請求項２記載のディスクアレイ装置。
【請求項４】
さらに、
前記書き込み要求が１つの単位記憶領域への書き込みを指示するブロック書き込み要求の場合、前記書き込み要求に応じて、前記更新データを書き込むべき単位記憶領域に格納された前記既存データと、前記更新データと同じパリティグループに属する既存パリティデータとを、前記複数のストレージ装置から読み込む読み込み手段を有し、
前記パリティデータ生成手段は、前記既存データ、前記更新データ、および前記既存パリティデータを用いて、前記更新後パリティデータを生成することを特徴とする請求項１記載のディスクアレイ装置。
【請求項５】
前記時系列情報生成手段は、
前記書き込み要求が前記ブロック書き込み要求の場合、前記時系列情報として、前記書き込み要求の入力順が後である程大きな値の第１の時系列情報と、前記既存データに付与されていた前記証明用時系列情報の値をカウントアップした値の第２の時系列情報とを生成し、
前記書き込み要求が１以上のパリティグループ内のすべてのデータの書き込みを指示するストライプ書き込み要求の場合、前記時系列情報として前記第１の時系列情報と、所定の初期値の前記第２の時系列情報とを生成し、
前記時系列情報付与手段は、
前記書き込み要求が前記ブロック書き込み要求の場合、前記第１の時系列情報と前記第２の時系列情報とを含む前記証明用時系列情報と、前記第２の時系列情報が比較対象であることを示す第１のフラグとを前記更新データに付与すると共に、前記第２の時系列情報を含む前記比較用時系列情報と前記第１のフラグとを前記更新データに関連付けて前記更新後パリティデータに付与し、
前記書き込み要求が前記ストライプ書き込み要求の場合、前記第１の時系列情報が比較対象であることを示す第２のフラグ、前記第１の時系列情報、および前記第２の時系列情報を含む前記証明用時系列情報を前記更新データに付与すると共に、前記更新データに関連付けられた前記第２のフラグと前記第２の時系列情報との組み、および前記第１の時系列情報を含む前記証明用時系列情報を前記更新後パリティデータに付与することを特徴とする請求項４記載のディスクアレイ装置。
【請求項６】
複数のストレージ装置内の記憶領域を複数の単位記憶領域に分割し、複数のデータと前記複数のデータに基づいて生成されるパリティデータとをパリティグループとし、同一パリティグループ内の前記データと前記パリティデータとを前記複数のストレージ装置内の単位記憶領域に分散格納するデータ分散管理方法において、
更新データを含む書き込み要求に応じて、前記更新データが属するパリティグループの更新後パリティデータを生成し、
前記更新データを書き込むべき単位記憶領域に格納されている既存データと、前記更新データとの間の書き込み時の前後関係を示す時系列情報を生成し、
前記書き込み要求に応じて生成された前記時系列情報を証明用時系列情報として前記更新データに付与すると共に、前記証明用時系列情報と同じ値の比較用時系列情報を前記更新データに関連付けて前記更新後パリティデータに付与し、
前記証明用時系列情報が付与された前記更新データと前記比較用時系列情報が付与された前記更新後パリティデータとを、前記複数のストレージ装置に分散して書き込む、
ことを特徴とするデータ分散管理方法。
【請求項７】
複数のストレージ装置内の記憶領域を複数の単位記憶領域に分割し、複数のデータと前記複数のデータに基づいて生成されるパリティデータとをパリティグループとし、同一パリティグループ内の前記データと前記パリティデータとを前記複数のストレージ装置内の単位記憶領域に分散格納するデータ分散管理を、コンピュータに実行させるためのデータ分散管理プログラムにおいて、
前記コンピュータに、
更新データを含む書き込み要求に応じて、前記更新データが属するパリティグループの更新後パリティデータを生成し、
前記更新データを書き込むべき単位記憶領域に格納されている既存データと、前記更新データとの間の書き込み時の前後関係を示す時系列情報を生成し、
前記書き込み要求に応じて生成された前記時系列情報を証明用時系列情報として前記更新データに付与すると共に、前記証明用時系列情報と同じ値の比較用時系列情報を前記更新データに関連付けて前記更新後パリティデータに付与し、
前記証明用時系列情報が付与された前記更新データと前記比較用時系列情報が付与された前記更新後パリティデータとを、前記複数のストレージ装置に分散して書き込む、
処理を実行させることを特徴とするデータ分散管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はパリティグループ内のデータとパリティデータとを複数のストレージ装置内のブロックに分散格納するディスクアレイ装置、データ分散管理方法、およびデータ分散管理プログラムに関する。
【背景技術】
【０００２】
コンピュータには、大容量の記憶装置としてハードディスク装置（ＨＤＤ:Hard Disk Drive）が利用される。ＨＤＤには用途に応じて様々なデータが格納され、高い信頼性が求められる。複数のＨＤＤが実装されたディスクアレイ装置では、各種の信頼性向上技術が利用されている。
【０００３】
例えば、ＨＤＤの信頼性を高める技術として、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）がある。ＲＡＩＤは、複数のＨＤＤをまとめて１台のハードディスクとして機能させ、データ入出力の高速化や信頼性の向上を図る技術である。ＲＡＩＤを用いたディスクアレイ装置はＲＡＩＤ装置と呼ばれる。
【０００４】
ＲＡＩＤを用いた信頼性向上技術には、様々な応用技術が考えられている。例えば、ディスク故障時にデータ不正箇所を特定する技術として、異なるＨＤＤ内の複数の記録領域へのデータ書き込み時に、同一のアクセス履歴情報を格納する技術がある。このアクセス履歴情報を用いることで、ＲＡＩＤ６におけるＨＤＤ故障時のデータ不整合箇所の特定が可能となる。
【０００５】
ＲＡＩＤを用いると、ＨＤＤの故障に限らず、個々のデータアクセスの異常についても異常の検出および訂正が可能である。ＨＤＤにおけるデータアクセスの異常には、データが装置内で変化する異常、データがディスク装置上の間違った場所に書かれる異常、データが書かれずに正常に書かれたとして応答する異常（書き込み抜け）がある。
【０００６】
ＲＡＩＤ装置では、データアクセス異常に対処するため、データにＥＣＣ（Error Correcting Code）を付加して書き込みを行う。そしてＲＡＩＤ装置は、読み込み時にＥＣＣを用いて異常を検出する。もし、書き込まれたデータが変化していれば、ＥＣＣによるチェックでエラーが検出される。異常が検出されると、ＲＡＩＤ装置は、パリティデータなどを用いてデータを訂正する。これにより、装置内でデータが変化する異常に関して、異常の検出・訂正が可能となる。
【０００７】
なお、データを間違った場所に書く異常に関しては、ＥＣＣでは検出できない。そこでＲＡＩＤ装置は、例えばデータにアドレス情報を付加して書き込みを行う。ＲＡＩＤ装置は、データの読み込み時に、データの付加されていたアドレスをチェックする。読み込み対象領域のアドレスと、データに付加されていたアドレスとが異なっていれば、データが誤った場所に書き込まれたことが判断できる。すなわち、データを間違った場所に書く異常を検出できる。このような異常が検出された場合、ＲＡＩＤ装置は、パリティデータを用いて元のデータの再構成と修復を行う。
【０００８】
このようにＲＡＩＤ装置は、装置内でデータが変化した場合や、データが間違った場所に書き込まれた場合については、データ読み込み時に異常を検出し、元のデータを修復することができる。
【０００９】
ただし、ＲＡＩＤ装置であっても、書き込み抜けに関しては、そのデータ読み込み時に異常を検出することができない。なぜならば書き込み抜けの場合、該当ブロックには以前に書かれた正しいデータが存在しているためである。そのため、データ読み込み時にＥＣＣをチェックしても正常と判定され、アドレスをチェックしても正常と判定される。その結果、ＥＣＣやアドレスのチェックでは、データ読み込み時に異常を検出することはできない。
【００１０】
そこで従来のＲＡＩＤ装置では、データ書き込み直後に書き込んだデータを読み取り、書き込んだデータと読み取ったデータとを比較する。なお、ここで言うデータ書き込み直後とは、データ書き込み処理の完了応答をホストコンピュータに通知する前である。データ書き込み処理の完了前であれば、書き込み対象のデータをＲＡＩＤ装置のコントローラが保持しており、読み込んだデータとの比較が可能である。このようなデータ書き込み処理完了前のデータ比較により書き込みが正しく実行されたことを確認できる。
【００１１】
ただし、この方法では書き込み処理の一貫として、データのＨＤＤへの書き込みと読み込みとを行うことが前提のため、ライトキャッシュを使用することができない。またデータの書き込み直後に該当ブロックからデータを読み出すには、ディスクが１回転する分の回転待ちが生じる。そのため、書き込み時のホストコンピュータへの応答時間が長期化する。その結果、書き込み性能が低下してしまう。
【００１２】
なお、ＲＡＩＤ３でデータを管理するＲＡＩＤ装置であれば、各物理ブロックにデータと同時にタイムスタンプを記録することにより、読み込み時にタイムスタンプを比較することで書き込み抜けを検出することができる。ＲＡＩＤ３は１つの論理ブロックが複数のＨＤＤの物理ブロックに分散格納される。すなわち、ＲＡＩＤ３では、複数のＨＤＤそれぞれの複数の物理ブロックによって、１つの論理ブロックが構成される。そのため、論理ブロックのデータの書き込みがあると、常に複数の物理ブロックに同時にデータ書き込みが行われる。そこで、ＲＡＩＤ装置は、論理ブロックを構成する各物理ブロックへのデータ書き込みと同時に、同一のタイムスタンプを、書き込み対象のすべての物理ブロックに同時に書き込む。そして、ＲＡＩＤ装置は、データの読み込み時にはすべての物理ブロックから同時にタイムスタンプを読み込み、それらを比較する。このときタイムスタンプの異なる物理ブロックが存在すれば、書き込み抜けがあったことが分かる。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２００８−７１２９７号公報
【特許文献２】特開平９−３０５３２８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
しかし、ＲＡＩＤ５のＲＡＩＤ装置の場合、ＲＡＩＤ３と同じ方法では、データの読み込み時に書き込み抜けを検出することができないという問題点がある。すなわち、ＲＡＩＤ５は論理ブロックと物理ブロックが１対１で対応しており、それぞれの物理ブロックは個別に更新される。そのためＲＡＩＤ３のように、論理ブロックへのデータ書き込み時に、データを書き込むべき物理ブロックが１つしか存在せず、複数の物理ブロックに共通なタイムスタンプを書き込むという処理ができない。
【００１５】
このような問題は、ＲＡＩＤ５を用いたＲＡＩＤ装置に限らず、１つの論理ブロックのデータが１つの物理ブロックにしか書き込まれないようなデータ書き込み制御を行うディスクアレイ装置に共通の問題である。
【００１６】
本発明はこのような点に鑑みてなされたものであり、論理ブロック内のデータ更新時に１つの物理ブロック内のデータが更新される場合であっても、データの読み込み時に書き込み抜けの検出が可能なディスクアレイ装置、データ分散管理方法、およびデータ分散管理プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１７】
上記課題を解決するために、以下のようなディスクアレイ装置が提供される。
ディスクアレイ装置は、複数のストレージ装置内の記憶領域を複数の単位記憶領域に分割し、複数のデータと複数のデータに基づいて生成されるパリティデータとをパリティグループとし、同一パリティグループ内のデータとパリティデータとを複数のストレージ装置内の単位記憶領域に分散格納するものである。このディスクアレイ装置は、パリティデータ生成手段、時系列情報生成手段、時系列情報付与手段、および書き込み手段を有する。パリティデータ生成手段は、更新データを含む書き込み要求に応じて、更新データが属するパリティグループの更新後パリティデータを生成する。時系列情報生成手段は、更新データを書き込むべき単位記憶領域に格納されている既存データと、更新データとの間の書き込み時の前後関係を示す時系列情報を生成する。時系列情報付与手段は、書き込み要求に応じて生成された時系列情報を証明用時系列情報として更新データに付与すると共に、証明用時系列情報と同じ値の比較用時系列情報を更新データに関連付けて更新後パリティデータに付与する。書き込み手段は、証明用時系列情報が付与された更新データと比較用時系列情報が付与された更新後パリティデータとを、複数のストレージ装置に分散して書き込む。
【発明の効果】
【００１８】
上記ストレージ装置によれば、書き込み抜けの検出をデータの読み込み時に行うことが可能となる。
【図面の簡単な説明】
【００１９】
【図１】実施の形態の概要を示す図である。
【図２】本実施の形態のシステム構成例を示す図である。
【図３】ＨＤＤのフォーマットを示す図である。
【図４】ＲＡＩＤ５におけるパリティグループの論理ブロックと物理ブロックとの関係を示す図である。
【図５】データおよびパリティデータに設定されるタイムスタンプの例を示す図である。
【図６】データの書き込み処理手順を示すシーケンス図である。
【図７】データの読み込み処理手順を示すシーケンス図である。
【図８】ＲＡＩＤ５における論理ブロックのＨＤＤへの割当例を示す図である。
【図９】コントローラの機能を示すブロック図である。
【図１０】ブロック書き込み処理手順を示すフローチャートである。
【図１１】処理対象データテーブルのデータ構造例を示す図である。
【図１２】データ更新後の処理対象データテーブルの例を示す図である。
【図１３】ストライプ書き込み処理の手順を示すフローチャートである。
【図１４】ストライプ書き込み時の処理対象データテーブルの例を示す図である。
【図１５】ブロック読み込み処理の手順を示すフローチャートである。
【図１６】処理対象データテーブルのデータ構造例を示す図である。
【図１７】パリティデータ書き込み抜け修復処理の手順を示すフローチャートである。
【図１８】パリティ書き込み抜け修復時の処理対象データテーブルの例を示す図である。
【図１９】パリティデータ修復後の処理対象データテーブルの例を示す図である。
【図２０】データ書き込み抜け修復および応答処理の手順を示すフローチャートである。
【図２１】データ修復後の処理対象データテーブルを示す図である。
【図２２】データを修復できないときの処理対象データテーブルを示す図である。
【図２３】ストライプ読み込み処理の手順を示すフローチャートである。
【図２４】ストライプ読み込み時の処理対象データテーブルの例を示す図である。
【図２５】ストライプ修復および応答処理の手順を示すフローチャートである。
【図２６】書き込み抜けが発生したパリティデータを生成後の処理対象データテーブルを示す図である。
【図２７】ストライプ中データ修復および応答処理の手順を示すフローチャートである。
【図２８】データ修復時の処理対象データテーブルの例を示す図である。
【図２９】２つ以上のデータで書き込み抜けがあった場合の処理対象データテーブルの例を示す図である。
【図３０】第２の実施の形態におけるＨＤＤ内のカウンタ値格納例を示す図である。
【図３１】第２の実施の形態のコントローラの機能を示す図である。
【図３２】カウンタ値比較結果に基づく書き込み抜け判定基準を示す図である。
【図３３】第３の実施の形態における処理対象データテーブルのデータ構造例を示す図である。
【図３４】第３の実施の形態のコントローラの機能を示す図である。
【図３５】第３の実施の形態におけるブロック書き込み処理手順を示すフローチャートである。
【図３６】書き込み要求時の処理対象データテーブルの例を示す図である。
【図３７】更新後の処理対象データテーブルの例を示す図である。
【図３８】第３の実施の形態におけるスライス書き込み処理の手順を示すフローチャートである。
【図３９】ストライプ書き込み時に生成される処理対象データテーブルの例を示す図である。
【図４０】ブロック読み込み処理の手順を示すフローチャートである。
【図４１】初期化されたアクセス管理テーブルの例を示す図である。
【図４２】ブロック書き込みが連続する場合の時系列情報発生パタンを示す図である。
【図４３】ストライプ書き込みが連続する場合の時系列情報発生パタンを示す図である。
【図４４】ストライプ書き込み後にブロック書き込みが行われた場合の時系列情報発生パタンを示す図である。
【図４５】ブロック書き込み後にストライプ書き込みが行われた場合の時系列情報発生パタンを示す図である。
【図４６】データとパリティデータとの比較処理手順を示すフローチャートである。
【図４７】第１のカウンタ値比較処理の手順を示すフローチャートである。
【図４８】第１のカウンタ値比較処理実施後のアクセス管理テーブルを示す図である。
【図４９】第１のタイムスタンプ比較処理の手順を示すフローチャートである。
【図５０】第２のタイムスタンプ比較処理の手順を示すフローチャートである。
【図５１】第２のカウンタ値比較処理の手順を示す図である。
【図５２】パリティグループ修復処理の手順を示すフローチャートである。
【図５３】パリティグループ比較処理の手順を示すフローチャートである。
【図５４】パリティグループ再計算処理の手順を示すフローチャートである。
【図５５】パリティグループ修復処理が実行されたときのアクセス管理テーブルの状態遷移例を示す図である。
【図５６】ストライプ読み込み処理の手順を示すフローチャートである。
【図５７】ストライプ読み込み時に初期化されたアクセス管理テーブルの例を示す図である。
【図５８】全データとパリティデータとの比較処理の手順を示すフローチャートである。
【図５９】全パリティグループ修復処理の手順を示すフローチャートである。
【図６０】ＲＡＩＤ４における論理ブロックのＨＤＤへの割当例を示す図である。
【図６１】本実施の形態に用いるコンピュータのハードウェア構成例を示す図である。
【発明を実施するための形態】
【００２０】
以下、本実施の形態を図面を参照して説明する。
図１は、実施の形態の概要を示す図である。図１には、ディスクアレイ装置が有する機能を示している。ディスクアレイ装置は、複数のストレージ装置１１〜１４内の記憶領域を複数の単位記憶領域（ブロック）に分割して管理する。また、ディスクアレイ装置は、複数のデータと複数のデータに基づいて生成されるパリティデータとをパリティグループとする。そして、ディスクアレイ装置は、パリティグループ内のデータとパリティデータとを複数のストレージ装置１１〜１４内のブロックに分散格納する。
【００２１】
ここで、データおよびパリティデータを格納するとき、書き込み抜けが発生する可能性がある。書き込み抜けを検出する方法として、書き込み直後に書き込んだデータおよびパリティデータを読み出し、正しく書き込まれていることを確認する方法がある。しかし、このような方法を採ると、書き込み処理に時間がかかる。そこで、ディスクアレイ装置には、以下の機能を有する読み込み手段１、パリティデータ生成手段２、時系列情報生成手段３、時系列情報付与手段４、書き込み手段５、比較手段６、修復手段７、およびデータ出力手段８が設けられる。
【００２２】
読み込み手段１は、書き込み要求に応じて、書き込み要求で指定された更新データを書き込むべきブロック内の既存データと、更新データと同じパリティグループに属するパリティデータとを複数のストレージ装置から読み込む。
【００２３】
また、読み込み手段１は、書き込み要求に応じて書き込まれた更新データを指定した読み込み要求に応じて、更新データを時系列情報（証明用時系列情報）付きで複数のストレージ装置から読み込む。さらに、読み込み手段１は、読み込み要求に応じて、更新データが属するパリティグループ内の、複数の時系列情報（比較用時系列情報）付きのパリティデータを読み込む。パリティデータに付与されている複数の比較用時系列情報は、それぞれ、同じパリティグループ内の各データに関連付けられている。
【００２４】
パリティデータ生成手段２は、既存データ、更新データ、および読み込まれたパリティデータを用いて、更新データに応じた新たなパリティデータ（更新後パリティデータ）を生成する。
【００２５】
時系列情報生成手段３は、書き込み要求があるごとに、更新データを書き込むべき単位記憶領域に格納されている既存データと更新データとの間の書き込み時の前後関係を示す時系列情報を生成する。例えば、時系列情報生成手段３は、時系列情報として、書き込み要求の入力順が後である程大きな値を生成する。このような時系列情報としては、タイムスタンプや、カウンタにより書き込み要求ごとにカウントアップされるカウンタ値がある。
【００２６】
時系列情報付与手段４は、書き込み要求に応じて生成された時系列情報を証明用時系列情報として更新データに付与する。また、時系列情報付与手段４は、証明用時系列情報と同じ値の比較用時系列情報を更新データに関連付けて、更新後パリティデータに付与する。
【００２７】
書き込み手段５は、証明用時系列情報が付与された更新データと比較用時系列情報が付与された更新後パリティデータとを、異なるストレージ装置に書き込む。
比較手段６は、読み込み要求に応じて読み込まれた更新データの証明用時系列情報と、更新データに関連付けて更新後パリティデータに付与された比較用時系列情報とを比較する。
【００２８】
修復手段７は、比較手段６の比較結果に基づいて、更新データまたは更新後パリティデータの書き込み時の書き込み抜けの有無を判断する。例えば、更新データの証明用時系列情報の値が、更新データに関連付けて更新後パリティデータに付与された比較用時系列情報より小さい場合がある。この場合、修復手段７は、更新データの書き込み時に、書き込み抜けが発生していたと判断する。修復手段７は、更新データの書き込み抜けを検出すると、読み込み手段１に、更新データが属するパリティグループ内の他のデータを複数のストレージ装置から読み込ませる。そして、修復手段７は、更新データ以外のデータと更新後パリティデータとを用いて読み込み対象データを修復する。
【００２９】
データ出力手段８は、証明用時系列情報と比較用時系列情報とが一致した場合、読み込み要求の応答として、更新データを出力する。また、データ出力手段８は、更新データの修復が行われた場合、修復後の更新データを出力する。
【００３０】
このような機能を有するディスクアレイ装置によって、ＲＡＩＤ５のように論理ブロック内のデータが１つの物理ブロックに書き込まれるようなシステムであっても、データの書き込み抜けを該当データの読み出し時に検出可能となる。
【００３１】
例えば、３つのデータ「Ａold」、「Ｂold」、「Ｃold」と１つのパリティデータ「Ｐold」とを有するパリティグループを想定する。このパリティグループ内のデータとパリティデータは、ストレージ装置１１〜１４に分散格納されている。すなわち、データ「Ａold」はストレージ装置１１内のブロック１１ａに格納されている。データ「Ｂold」はストレージ装置１２内のブロック１２ａに格納されている。データ「Ｃold」はストレージ装置１３内のブロック１３ａに格納されている。パリティデータ「Ｐold」はストレージ装置１４内のブロック１４ａに格納されている。
【００３２】
ここで、データ「Ａold」の更新データ「Ａnew」、データ「Ｂold」の更新データ「Ｂnew」、データ「Ｃold」の更新データ「Ｃnew」のそれぞれ書き込み要求９ａ，９ｂ，９ｃが順次入力されたものとする。
【００３３】
更新データ「Ａnew」の書き込み要求９ａがあると、読み込み手段１により既存データ「Ａold」と既存パリティデータ「Ｐold」とが読み込まれる。次に、パリティデータ生成手段２により、更新後パリティデータが生成される。例えば、パリティデータとしては、パリティグループ内の各データのビットごとの排他的論理和演算を用いることができる。このようなパリティデータの場合、データ「Ａold」、パリティデータ「Ｐold」、および更新データ「Ａnew」のビットごとの排他的論理和演算によって、更新後パリティデータを生成できる。
【００３４】
また、更新データ「Ａnew」の書き込み要求に応じて、時系列情報生成手段３により時系列情報が生成される。時系列情報は、少なくとも既存データ「Ａold」の書き込み要求と更新データ「Ａnew」の書き込み要求との時間的な前後関係を識別可能な情報である。例えば、タイムスタンプを時系列情報とすることができる。ここで、更新データ「Ａnew」の書き込み要求に応じて生成された時系列情報を「ｔ（Ａnew）」とする。時系列情報生成手段３で生成された時系列情報は、更新データ「Ａnew」と、パリティデータ生成手段２で生成された更新後パリティデータとに付与される。
【００３５】
なお、更新後パリティデータに付与される時系列情報は、更新データ「Ａnew」と関連付けられている。例えば、更新後パリティデータに設定された複数の時系列情報記憶領域が、ストレージ装置１１〜１４のそれぞれに対応付けられている。そして、更新データ「Ａnew」の書き込み時に生成された時系列情報は、更新後タイムスタンプの複数の時系列情報記憶領域のうち、更新データ「Ａnew」が格納されるストレージ装置１１に関連付けられた時系列情報記憶領域に格納される。これにより、時系列情報「ｔ（Ａnew）」が、更新データ「Ａnew」との関連性を保ったままパリティデータに付与される。
【００３６】
時系列情報「ｔ（Ａnew）」が付与された更新データ「Ａnew」は、書き込み手段５によって、ストレージ装置１１内のブロック１１ａに上書きで書き込まれる。この際、更新データ「Ａnew」に付与された時系列情報「ｔ（Ａnew）」もストレージ装置１１に書き込まれる。
【００３７】
以後、更新データ「Ｂnew」と更新データ「Ｃnew」との書き込み要求９ｂ，９ｃに応じて、書き込み処理が行われる。ここで、更新データ「Ｂnew」の書き込みは正常に実行されたが、更新データ「Ｃnew」の書き込み処理において書き込み抜けが発生したものとする。また、各書き込み要求実行時の更新後パリティデータの書き込みは正常に実行されたものとする。
【００３８】
このような場合、書き込み要求９ａ，９ｂ，９ｃの実行により、ストレージ装置１１のブロック１１ａには、更新データ「Ａnew」と時系列情報「ｔ（Ａnew）」とが格納される。ストレージ装置１２のブロック１２ａには、更新データ「Ｂnew」と時系列情報「ｔ（Ｂnew）」とが格納される。ところが、ストレージ装置１３のブロック１３ａには、依然として、更新前の既存データ「Ｃold」と、そのデータの書き込み時に生成された時系列情報「ｔ（Ｃold）」とが格納されている。ストレージ装置１４のブロック１４ａには、更新データ「Ａnew」、「Ｂnew」、「Ｃnew」に基づいて生成された更新後パリティデータ「Ｐnew」と、時系列情報「ｔ（Ａnew）」、「ｔ（Ｂnew）」、「ｔ（Ｃnew）」とが格納されている。時系列情報「ｔ（Ａnew）」、「ｔ（Ｂnew）」、「ｔ（Ｃnew）」は。それぞれ更新データ「Ａnew」、「Ｂnew」、「Ｃnew」に関連付けられている。
【００３９】
その後、更新データ「Ａnew」、「Ｂnew」、「Ｃnew」の読み込み要求が順次入力されたものとする。まず、更新データ「Ａnew」の読み込み要求が入力されると、読み込み手段１によって更新データ「Ａnew」と、パリティデータ「Ｐnew」との読み込みが行われる。この際、更新データ「Ａnew」やパリティデータ「Ｐnew」に付与された時系列情報も同時に読み込まれる。
【００４０】
次に、比較手段６により、パリティデータ「Ｐnew」に付与されていた時系列情報のうち、更新データ「Ａnew」に関連付けられた時系列情報「ｔ（Ａnew）」が抽出される。そして、比較手段６により、抽出された時系列情報「ｔ（Ａnew）」と、更新データ「Ａnew」に付与されていた時系列情報「ｔ（Ａnew）」とが比較される。この場合、値が一致するため、書き込み抜けは発生していないと判断される。書き込み抜けが発生していなければ、データ出力手段８によって、読み込まれた更新データ「Ａnew」が出力される。
【００４１】
更新データ「Ｂnew」の読み込み要求においても、更新データ「Ａnew」の読み込みと同様の処理が行われる。ここで、更新データ「Ｂnew」に付与された時系列情報「ｔ（Ｂnew）」は、更新後パリティデータ「Ｐnew」に付与されていた時系列情報のうち、更新データ「Ｂnew」に関連付けられた時系列情報「ｔ（Ｂnew）」と同じ値である。従って、更新データ「Ｂnew」の書き込み時にも書き込み抜けは発生していないと判断され、データ出力手段８によって、読み込まれた更新データ「Ａnew」が出力される。
【００４２】
さらに、更新データ「Ｃnew」の読み込み要求においても、更新データ「Ａnew」の読み込みと同様の処理が行われる。更新データ「Ｃnew」が格納されているべきブロック１３ａには、既存データ「Ｃold」が格納されている。また、既存データ「Ｃold」に付与されている時系列情報「ｔ（Ｃold）」は、パリティデータ「Ｐnew」に付与されていた時系列情報のうち、更新データ「Ｃnew」に関連付けられた時系列情報「ｔ（Ｃnew）」と異なる。時系列情報がタイムスタンプであれば、「ｔ（Ｃold）」は「ｔ（Ｃnew）」よりも小さな値である。すると、比較手段６は、読み込み対象のデータに付与されている「ｔ（Ｃold）」が更新後パリティデータに付与されている「ｔ（Ｃnew）」よりも小さいことから、読み込み対象の単位記憶領域への書き込み時に書き込み抜けが発生したと判断する。
【００４３】
書き込み抜けが検出された場合、読み込み手段１によって、同じパリティグループ内の他の更新データ「Ａnew」、「Ｂnew」が読み込まれる。次に、修復手段７によって、更新データ「Ａnew」、「Ｂnew」とパリティデータ「Ｐnew」とを用いて、更新データ「Ｃnew」が修復される。例えば、更新データ「Ａnew」、「Ｂnew」とパリティデータ「Ｐnew」とのビットごとの排他的論理和演算の結果が、更新データ「Ｃnew」となる。そして、データ出力手段８により、修復された更新データ「Ｃnew」が出力される。
【００４４】
このように、タイムスタンプに対して、他のデータそれぞれに関連付けた時系列情報を格納するようにしたことで、ブロック単位のデータ書き込み時に、データとパリティデータとのそれぞれに対して同じ時系列情報を付与しておくことができる。同じ時系列情報を付与しておけば、読み込み要求があったときに、時系列情報の同一性を判断することで、書き込み抜けを検出することができる。
【００４５】
なお、時系列情報として、タイムスタンプのように時系列に沿って大きくなる値を用いることで、データの書き込み抜けがあったのか、パリティデータの書き込み抜けがあったのかを判定できる。時系列に沿って大きくなる値としては、書き込み要求が入力されるごとにカウントアップされるカウンタ値を用いることもできる。
【００４６】
次に、実施の形態の詳細を説明する。以下に説明する実施の形態では、仮想ディスク内の論理ブロックを指定したアクセスに応じて、その論理ブロックに対応する物理ブロックに書き込みを行うものとする。ここで、論理ブロックといった場合、データブロックとパリティブロックとを含むものとする。データブロックは、仮想ディスク内のデータを格納する仮想的な記憶領域である。パリティブロックは、複数のデータブロック内のデータに基づいて生成されるパリティデータを格納する仮想的な記憶領域である。論理ブロックに格納されるデータまたはパリティデータは、実際には、その論理ブロックに対応付けられたＨＤＤ内の物理ブロックに格納される。
【００４７】
また、時系列情報が付与されたデータおよびパリティデータは、時系列情報を付与した後にＥＣＣが計算され、そのＥＣＣが付与される。そして、データの読み込み時にＥＣＣによるエラー検出が行われるものとする。従って、時系列情報とデータの書き込み処理、時系列情報とパリティデータの書き込み処理は、それぞれアトミック（一体の処理）であることがＥＣＣによって保証される。すなわち、時系列情報の一部のみが書き込まれ、データまたはパリティデータの書き込み抜けが発生するような状況はＥＣＣチェックでエラーが検出される。従って、以下の実施の形態では、ブロックごとの書き込み処理がアトミックであることをＥＣＣによって保証したうえで、書き込み抜けの検出処理を行うものとする。
【００４８】
なお、以下の説明において、データまたはパリティデータのＨＤＤへの書き込みといった場合、特に説明しなくても、データまたはパリティデータに付与された時系列情報（タイムスタンプ、カウンタ値、フラグ）も同時に書き込むものとする。同様に、データまたはパリティデータのＨＤＤからの読み込みといった場合、特に説明しなくても、データまたはパリティデータに付与された時系列情報（タイムスタンプ、カウンタ値、フラグ）も同時に読み込むものとする。
【００４９】
［第１の実施の形態］
図２は、本実施の形態のシステム構成例を示す図である。ＲＡＩＤ装置１００は、ホストインタフェース１１０を介してホストコンピュータ１０に接続されている。ホストコンピュータ１０は、ユーザからの操作入力などに応答して、ＲＡＩＤ装置１００に対してデータの入出力を行う。また、ＲＡＩＤ装置１００は、ディスクインタフェース１２０を介して複数のＨＤＤ２１０，２２０，２３０，２４０，２５０に接続されている。各ＨＤＤ２１０，２２０，２３０，２４０，２５０は、データの記憶領域が複数の物理ブロックに分割されている。
【００５０】
ＲＡＩＤ装置１００内では、コントローラ１３０が全体を制御している。コントローラ１３０は、ＮＶＲＡＭ（Non Volatile Random Access Memory）１３１やＲＡＭ（Random Access Memory）１３２を有している。ＮＶＲＡＭ１３１には、コントローラ１３０に実行させる処理が技術されたファームウェアのプログラムや、その他の管理情報などが格納される。ＮＶＲＡＭ１３１としては、例えば、フラッシュメモリが使用できる。ＲＡＭ１３２は、コントローラ１３０が実行する処理に必要なデータを一時的に記憶する。
【００５１】
ホストインタフェース１１０を介してホストコンピュータ１０からの書き込み要求や読み込み要求を受け取る。そして、コントローラ１３０は、受け取った要求に従って、ディスクインタフェース１２０を介してＨＤＤ２１０，２２０，２３０，２４０，２５０へのデータの入出力を行う。
【００５２】
例えば、ホストコンピュータ１０から論理ブロックを指定した書き込み要求が入力された場合、コントローラ１３０は書き込み対象の物理ブロックを判断し、該当する物理ブロックが属するＨＤＤにデータの書き込み指示を出力する。また、ホストコンピュータ１０から論理ブロックを指定した読み込み要求が入力された場合、コントローラ１３０は読み込み対象の物理ブロックを判断し、該当する物理ブロックが属するＨＤＤからデータを読み出す。図１に示した読み込み手段１、パリティデータ生成手段２、時系列情報生成手段３、時系列情報付与手段４、書き込み手段５、比較手段６、修復手段７、およびデータ出力手段８は、コントローラ１３０が有する機能である。
【００５３】
なお、コントローラ１３０は、ＲＡＩＤによるデータ管理機能を有している。例えば、コントローラ１３０は、ＲＡＩＤ４やＲＡＩＤ５によるＨＤＤ２１０，２２０，２３０，２４０，２５０へのデータの入出力が可能である。以下の説明では、コントローラ１３０は、ＲＡＩＤ５によりデータを管理するものとする。
【００５４】
ＨＤＤ２１０，２２０，２３０，２４０，２５０は、所定のデータ長のブロック単位に物理フォーマットが施されている。また、ＨＤＤ２１０，２２０，２３０，２４０，２５０はディスクキャッシュ用のキャッシュメモリを有している。ＨＤＤ２１０，２２０，２３０，２４０，２５０は、書き込み対象のデータを一旦キャッシュメモリに格納し、その後の処理の空き時間などを利用して、キャッシュメモリ内のデータをディスクに書き込む。
【００５５】
図３は、ＨＤＤのフォーマットを示す図である。ＨＤＤ２１０内の記憶領域には、複数の物理ブロック２１１が設けられている。物理ブロック２１１内はデータ領域２１１ａとタイムスタンプ領域２１１ｂとに分けられる。データ領域２１１ａには、割り当てられている論理ブロックのデータが格納される。タイムスタンプ領域２２１ｂには、複数のタイムスタンプ（タイムスタンプ群）が格納される。タイムスタンプ領域２２１ｂは、少なくともＲＡＩＤ５におけるパリティグループ内の論理ブロック数に相当するタイムスタンプを書き込み可能な記憶容量を有している。
【００５６】
ここで、ＲＡＩＤ５のＲＡＩＤシステムに使用するＨＤＤの台数がｎ（ｎは自然数）、各ＨＤＤの物理ブロック数がｘ（ｘは自然数）の場合を想定し、ＨＤＤ内のデータを詳細に説明する。
【００５７】
図４は、ＲＡＩＤ５におけるパリティグループの論理ブロックと物理ブロックとの関係を示す図である。パリティグループ２０は、複数の論理ブロックを有している。論理ブロックには、複数のデータブロック２１，２２，・・・，２ｍと１つのパリティブロック２ｎとがある。
【００５８】
データブロック２１，２２，・・・，２ｍは、それぞれ所定データ長のデータｄ１，ｄ２，・・・，ｄｍを記憶する論理的な記憶領域である。パリティブロック２ｎは、データブロック２１，２２，・・・，２ｍ内のデータｄ１，ｄ２，・・・，ｄｍに基づいて生成されたパリティデータｄｎを記憶する論理的な記憶領域である。パリティデータｄｎは、データｄ１，ｄ２，・・・，ｄｍの誤り訂正符号として用いられるデータである。例えば、パリティデータｄｎは、データブロック２１，２２，・・・，２ｍ内の各データの排他的論理和演算によって生成される。
【００５９】
パリティグループ２０内のブロック数は、ＲＡＩＤ５のために使用されるＨＤＤ数と等しい。図４の例では、ｎ台のＨＤＤ３１，３２，・・・，３ｍ，３ｎがある。そのためパリティグループ２０は、ｎ−１個のデータブロック２１，２２，・・・，２ｍと１つのパリティブロック２ｎとを有することとなる。なお、ＨＤＤ３１，３２，・・・，３ｍ，３ｎには、それぞれ１からｎまでのディスク番号（DISK＃に続く数字）が割り当てられている。
【００６０】
各ＨＤＤ３１，３２，・・・，３ｍ，３ｎ内のｘ個の物理ブロックには、それぞれ物理ブロック番号（block#に続く数字）が設定されている。そして、各物理ブロックは、データとタイムスタンプ群との記憶領域を有している。図４の例では、物理ブロック番号「ｉ」（ｉは１以上ｘ以下の整数）に格納されたデータを、ｄ（ｉ）と表している。
【００６１】
タイムスタンプ群の記憶領域には、ＨＤＤの台数分のタイムスタンプを格納できる。タイムスタンプ群の記憶領域は、ＨＤＤのディスク番号に対応付けられたタイムスタンプ領域に分けられている。各タイムスタンプ領域はそれぞれＨＤＤ３１，３２，・・・，３ｍ，３ｎに対応付けられている。図４の例では、物理ブロック番号「ｉ」におけるディスク番号「ｊ」（ｊは１以上ｎ以下の整数）に対応するタイムスタンプをｔ（ｉ，ｊ）と表している。
【００６２】
パリティグループ２０内のデータブロック２１，２２，・・・，２ｍとパリティブロック２ｎとのデータは、個別のＨＤＤ３１，３２，・・・，３ｍ，３ｎに格納される。すなわちＲＡＩＤ装置１００のコントローラ１３０によって、データブロック２１，２２，・・・，２ｍとパリティブロック２ｎとに対応する物理ブロックが、それぞれ異なるＨＤＤから選択される。図４の例では、データブロック２１に対してＨＤＤ３１の先頭の物理ブロックが対応付けられている。データブロック２２に対してＨＤＤ３２の先頭の物理ブロックが対応付けられている。データブロック２ｍに対してＨＤＤ３ｎの先頭の物理ブロックが対応付けられている。パリティブロック２ｎに対してＨＤＤ３ｍの先頭の物理ブロックが対応付けられている。
【００６３】
ＲＡＩＤ装置１００のコントローラ１３０は、ホストコンピュータ１０からの要求に応じてデータブロックのデータを、対応する物理ブロックに格納する。その際、コントローラ１３０はデータブロックのデータおよびパリティデータにタイムスタンプを付与する。
【００６４】
図５は、データおよびパリティデータに設定されるタイムスタンプの例を示す図である。図５の例では、データブロック２１のデータの書き込み時刻を「Ｔ１」、データブロック２２のデータの書き込み時刻を「Ｔ２」、データブロック２ｍのデータの書き込み時刻を「Ｔｍ」としている。各データブロック２１，２２，・・・，２ｍのデータには、そのデータを書き込むＨＤＤに対応する部分領域に、書き込み時刻を示すタイムスタンプが設定される。パリティブロック２ｎのパリティデータには、同じパリティグループに属する他のデータの書き込み時に設定されたタイムスタンプが、そのデータが書き込まれたＨＤＤに対応するタイムスタンプ領域に設定されている。
【００６５】
各データブロックのデータが更新される場合、更新されたデータに付与されたタイムスタンプも更新される。また、パリティグループ内のデータが更新されると、パリティデータも更新される。その際、パリティデータに付与されている複数のタイムスタンプのうち、更新されたデータのタイムスタンプが更新される。すなわち、パリティデータに付与されている各タイムスタンプは、対応するデータに付与されているタイムスタンプとの同一性が保たれる。
【００６６】
次に、図２に示した様にＨＤＤが５台の場合におけるデータの書き込み処理と読み込み処理について説明する。
図６は、データの書き込み処理手順を示すシーケンス図である。以下、図６に示す処理をステップ番号に沿って説明する。
【００６７】
［ステップＳ１１］ホストコンピュータ１０は、ユーザからの操作入力などに応答して、ＲＡＩＤ装置１００に対し、更新するデータの内容と、そのデータが属するデータブロックとを指定した書き込み要求を送信する。書き込み要求は、ＲＡＩＤ装置１００のホストインタフェース１１０を介してコントローラ１３０に入力される。この例では、書き込み対象のデータブロックは、ＨＤＤ２１０内の物理ブロックに対応付けられているものとする。また、書き込み対象のデータブロックが属するパリティグループのパリティブロックには、ＨＤＤ２５０内の物理ブロックが対応付けられているものとする。
【００６８】
［ステップＳ１２］コントローラ１３０は、書き込み要求を受け取ると、書き込み対象のデータブロックに対応する物理ブロック内のデータの読み込み指示を、ＨＤＤ２１０に対して出力する。
【００６９】
［ステップＳ１３］コントローラ１３０はＨＤＤ２１０への読み込み指示と同時に、パリティブロックに対応する物理ブロック内のデータの読み込み指示を、ＨＤＤ２５０に対して出力する。
【００７０】
［ステップＳ１４］ＨＤＤ２１０は、読み込み指示に応答して、指定された物理ブロック内のデータを読み出す。この際、データに付与されているタイムスタンプ群も読み出される。
【００７１】
［ステップＳ１５］ＨＤＤ２５０は、読み込み指示に応答して、指定された物理ブロック内のパリティデータを読み出す。この際、パリティデータに付与されているタイムスタンプ群も読み出される。
【００７２】
［ステップＳ１６］ＨＤＤ２１０は、タイムスタンプ付きのデータをコントローラ１３０に送信する。
［ステップＳ１７］ＨＤＤ２５０は、タイムスタンプ付きのパリティデータをコントローラ１３０に送信する。
【００７３】
［ステップＳ１８］コントローラ１３０は、タイムスタンプを生成する。具体的には、コントローラ１３０は、ＲＡＩＤ装置１００内部の時計機能から現在の時刻を取得し、その時刻をタイムスタンプとする。
【００７４】
［ステップＳ１９］コントローラ１３０は、書き込み要求に従って、ＨＤＤ２１０から読み込んだデータの内容を更新する。さらにコントローラ１３０は、更新後のデータにステップＳ１８で生成したタイムスタンプを付与する。そして、コントローラ１３０は、ＨＤＤ２１０に対して、書き込み対象のデータブロックに対応する物理ブロックへの更新後のデータの書き込み指示を出力する。
【００７５】
［ステップＳ２０］コントローラ１３０は、ＨＤＤ２１０から読み込んだデータの更新内容に基づいて、ＨＤＤ２５０から読み込んだパリティデータを更新する。さらにコントローラ１３０は、更新後のパリティデータにステップＳ１８で生成したタイムスタンプを付与する。そして、コントローラ１３０は、ＨＤＤ２５０に対して、パリティブロックに対応する物理ブロックへの更新後のパリティデータの書き込み指示を送信する。
【００７６】
［ステップＳ２１］ＨＤＤ２１０は、書き込み指示に含まれるタイムスタンプ付きのデータをキャッシュメモリに格納し、「ＯＫ」の応答をコントローラ１３０に送信する。
［ステップＳ２２］ＨＤＤ２５０は、書き込み指示に含まれるタイムスタンプ付きのパリティデータをキャッシュメモリに格納し、書き込みを実行したことを示す「ＯＫ」の応答をコントローラ１３０に送信する。
【００７７】
［ステップＳ２３］コントローラ１３０は、ＨＤＤ２１０，２５０から「ＯＫ」の応答を受け取ると、書き込み完了の応答をホストコンピュータ１０に送信する。
［ステップＳ２４］ＨＤＤ２１０は、「ＯＫ」応答後の所定のタイミングで、キャッシュメモリ内のタイムスタンプ付きのデータを、物理ブロックに書き込む。
【００７８】
［ステップＳ２５］ＨＤＤ２１０は、「ＯＫ」応答後の所定のタイミングで、キャッシュメモリ内のタイムスタンプ付きのパリティデータを、物理ブロックに書き込む。
このようにして、データの書き込みの際に、そのデータを格納する物理ブロックと、そのデータのパリティデータを格納する物理ブロックとに、同じタイムスタンプが書き込まれる。
【００７９】
次に、データの読み込み処理について説明する。
図７は、データの読み込み処理手順を示すシーケンス図である。以下、図７に示す処理をステップ番号に沿って説明する。
【００８０】
［ステップＳ３１］ホストコンピュータ１０は、ユーザからの操作入力などに応答して、ＲＡＩＤ装置１００に対し、読み込み対象データが属するデータブロックを指定した読み込み要求を送信する。読み込み要求は、ＲＡＩＤ装置１００のホストインタフェース１１０を介してコントローラ１３０に入力される。この例では、読み込み対象のデータブロックは、ＨＤＤ２１０内の物理ブロックに対応付けられているものとする。また、読み込み対象のデータブロックが属するパリティグループのパリティブロックには、ＨＤＤ２５０内の物理ブロックが対応付けられているものとする。
【００８１】
［ステップＳ３２］コントローラ１３０は、読み込み要求を受け取ると、読み込み対象のデータブロックに対応する物理ブロック内のデータの読み込み指示を、ＨＤＤ２１０に対して出力する。
【００８２】
［ステップＳ３３］コントローラ１３０はＨＤＤ２１０への読み込み指示と同時に、パリティブロックに対応する物理ブロック内のデータの読み込み指示を、ＨＤＤ２５０に対して出力する。
【００８３】
［ステップＳ３４］ＨＤＤ２１０は、読み込み指示に応答して、指定された物理ブロック内のデータを読み出す。この際、データに付与されているタイムスタンプも読み出される。
【００８４】
［ステップＳ３５］ＨＤＤ２５０は、読み込み指示に応答して、指定された物理ブロック内のパリティデータを読み出す。この際、パリティデータに付与されているタイムスタンプも読み出される。
【００８５】
［ステップＳ３６］ＨＤＤ２１０は、タイムスタンプ付きのデータをコントローラ１３０に送信する。
［ステップＳ３７］ＨＤＤ２５０は、タイムスタンプ付きのパリティデータをコントローラ１３０に送信する。
【００８６】
［ステップＳ３８］コントローラ１３０は、タイムスタンプを比較する。具体的には、コントローラ１３０は、パリティデータに付与されているタイムスタンプ群から、読み込み対象のデータに対応するタイムスタンプを抽出する。そして、コントローラ１３０は、抽出したタイムスタンプと、読み込み対象のデータに付与されていたタイムスタンプとを比較する。タイムスタンプの値が一致した場合、コントローラ１３０は、該当データの書き込み時に書き込み抜けが発生していないと判定する。
【００８７】
［ステップＳ３９］コントローラ１３０は、書き込み抜けが発生していなければ、ＨＤＤ２１０から読み込んだデータをホストコンピュータ１０に送信する。
このように、データ書き込み時に、書き込み対象のデータと、パリティデータとに同一のタイムスタンプを付与し、読み込み時にそれらのタイムスタンプを比較することで、データの書き込み抜けを検出することができる。すなわち、データの書き込み抜けの検出をデータの読み込み時に行うことが可能となる。
【００８８】
データの読み込み時に書き込み抜けを検出可能であれば、データ書き込み時に書き込み抜けの検出処理を行わずに済む。すなわち、従来であれば、データ書き込み時に書き込み抜けの検出する必要があった。そのため、データの書き込み直後に、そのデータの読み込み処理を実行し、書き込み抜けが発生していないこと（所望のデータが書き込まれたこと）を確認していた。その結果、従来は、データ書き込み直後に該当データの読み込み処理が余計に発生していた。本実施の形態では、図６に示したように、データの書き込み直後に、そのデータの読み込みを行う必要はない。
【００８９】
また、従来は、データ書き込み直後に該当データの読み込み処理を行うため、ディスクキャッシュ処理を行うことができなかった。他方、本実施の形態では、書き込み抜けの検出処理をデータの読み込み時に行うことができる。そのため、データの書き込み時にはディスクキャッシュ処理を行うことができ、書き込み要求に対する応答時間を短縮することができる。
【００９０】
ところで、ＲＡＩＤ５では、連続する複数の論理ブロックを同じＨＤＤに格納することができる。
図８は、ＲＡＩＤ５における論理ブロックのＨＤＤへの割当例を示す図である。図８ではデータが格納されるデータブロックの論理ブロック番号を、文字「Ｄ」と数字との結合で表している。また、パリティデータが格納されるパリティブロックの論理ブロック番号を、文字「Ｐ」と数字との結合で表している。割当表４０には、ディスク番号とブロック番号との交差する位置に、ディスク番号とブロック番号とで特定される物理ブロックに割り当てられた論理ブロックの論理ブロック番号が設定されている。
【００９１】
図８の例では、パリティグループ数が「５」、チャンク内ブロック数が「４」である。割当表４０の横に並んだブロック、例えば論理ブロック番号「Ｄ１」、「Ｄ５」、「Ｄ９」、「Ｄ１３」、「Ｐ１」が１つのパリティグループである。パリティブロック「Ｐ１」内のパリティデータは、論理ブロック「Ｄ１」、「Ｄ５」、「Ｄ９」、「Ｄ１３」の各データの排他論理和である。
【００９２】
このようにチャンク内ブロック数が４の場合、論理ブロックにおける連続する４ブロックが、同じＨＤＤに格納される。この４ブロックずつのブロックの集合がチャンクである。「Ｄ１」〜「Ｄ１６」、「Ｐ１」〜「Ｐ４」のようにチャンクをパリティグループ数だけ集めたものがストライプ４１〜４４である。図８では、ストライプ４１〜４４を太線の枠で囲っている。各ストライプ４１〜４４では、そのストライプに含まれるパリティブロックに対応する物理ブロックは、共通のＨＤＤに属している。
【００９３】
このようにチャンク単位で論理ブロックの振り分けを行う場合、ＨＤＤへのアクセス処理は物理ブロック単位で行う方法と、ストライプ単位で行う方法とがある。そこで、以下の説明では、タイムスタンプの制御方法についても、物理ブロック単位のデータアクセスの場合と、ストライプ単位のデータアクセスの場合とにわけて説明することとする。
【００９４】
まず、ＲＡＩＤ装置１００内のコントローラ１３０が有する処理機能について詳細に説明する。
図９は、コントローラの機能を示すブロック図である。コントローラ１３０は、データ入出力部１３３、ＲＡＩＤ制御部１３４、ＨＤＤアクセス部１３５、タイムスタンプ生成部１３６、およびタイムスタンプ比較部１３７を有している。
【００９５】
データ入出力部１３３は、ホストコンピュータ１０からのアクセス要求を受け付ける。アクセス要求には、書き込み要求と読み込み要求とがある。データ入出力部１３３は、受け付けたアクセス要求をＲＡＩＤ制御部１３４に渡す。その後、データ入出力部１３３は、ＲＡＩＤ制御部１３４からアクセス要求の結果を受け取り、ホストコンピュータ１０に対して送信する。
【００９６】
ＲＡＩＤ制御部１３４は、アクセス要求に応じて、ＲＡＩＤ技術を用いたＨＤＤ２１０，２２０，２３０，２４０，２５０へのアクセス制御を行う。本実施の形態では、ＲＡＩＤ制御部１３４は、ＲＡＩＤ５のアクセス制御を行うものとする。ＲＡＩＤ制御部１３４は、ＲＡＩＤ５のアクセス制御を行うために、図８に示したような論理ブロックと物理ブロックとの対応関係を管理している。そして、ＲＡＩＤ制御部１３４は、アクセス要求で指定された論理ブロックに対応する物理ブロック、およびその物理ブロックを有するＨＤＤを特定し、アクセス要求に応じたアクセス指示をＨＤＤアクセス部１３５に対して出力する。
【００９７】
ＲＡＩＤ制御部１３４は、アクセス要求が書き込み要求の場合、タイムスタンプ生成部１３６からタイムスタンプを取得する。そして、取得したタイムスタンプを書き込み対象のデータと、更新されたパリティデータとに付与する。そして、ＲＡＩＤ制御部１３４は、タイムスタンプ付きのデータとパリティデータとのＨＤＤへの書き込み指示を行う。
【００９８】
また、ＲＡＩＤ制御部１３４は、アクセス要求が読み込み要求の場合、読み込んだデータおよびそのデータが属するパリティグループのパリティデータそれぞれに付与されたタイムスタンプ群から、読み込んだデータに対応するタイムスタンプを抽出する。そして、ＲＡＩＤ制御部１３４は、抽出した２つのタイムスタンプをタイムスタンプ比較部１３７に渡す。ＲＡＩＤ制御部１３４は、タイムスタンプ比較部１３７からタイムスタンプの比較結果を受け取り、その比較結果に基づいて書き込み抜けの有無を判定する。ＲＡＩＤ制御部１３４は、書き込み抜けがなければ、読み込んだデータを読み込み要求への応答としてデータ入出力部１３３に渡す。
【００９９】
なお、ＲＡＩＤ制御部１３４は、書き込み抜けがあると判定した場合、データの復旧処理を行う。そして、ＲＡＩＤ制御部１３４は、復旧したデータを読み込み要求への応答としてデータ入出力部１３３に渡す。
【０１００】
ＨＤＤアクセス部１３５は、ＲＡＩＤ制御部１３４からの指示に従って、ＨＤＤ２１０，２２０，２３０，２４０，２５０に対して物理ブロック単位のデータの書き込み指示、または読み込み指示を行う。ＨＤＤアクセス部１３５は、ＨＤＤへのデータの書き込み指示を行った場合、書き込み対象ＨＤＤからの「ＯＫ」の応答を受け取ると、その応答をＲＡＩＤ制御部１３４に渡す。また、ＨＤＤアクセス部１３５は、データの読み込み指示を行った場合、読み込み対象ＨＤＤからデータを受け取り、ＲＡＩＤ制御部１３４に渡す。
【０１０１】
なお、ＨＤＤアクセス部１３５は、データまたはパリティデータをＨＤＤ２１０，２２０，２３０，２４０，２５０に書き込む場合、タイムスタンプ付与後のデータまたはパリティデータのＥＣＣを生成し、データまたはパリティデータに付与する。また、ＨＤＤアクセス部１３５は、データまたはパリティデータをＨＤＤ２１０，２２０，２３０，２４０，２５０にから読み込む場合、ＥＣＣによるエラー検出処理を行う。
【０１０２】
タイムスタンプ生成部１３６は、ＲＡＩＤ制御部１３４からの要求に応じてタイムスタンプを生成する。具体的には、タイムスタンプ生成部１３６は、ＲＡＩＤ装置１００の内部時計が示す時刻を取得し、タイムスタンプとする。
【０１０３】
タイムスタンプ比較部１３７は、ＲＡＩＤ制御部１３４からの要求に応じてタイムスタンプを比較する。
次に、コントローラ１３０における書き込み処理、読み込み処理について、ブロック単位およびストライプ単位で実行する場合に分けて詳細に説明する。なお、以下の説明では、データの書き込みおよび読み込みのアドレス制御やＥＣＣ制御については省略している。
【０１０４】
まず、ブロック単位の書き込み処理について説明する。
図１０は、ブロック書き込み処理手順を示すフローチャートである。以下、図１０に示す処理をステップ番号に沿って説明する。この処理は、ホストコンピュータ１０からブロック単位でのデータの書き込み要求が入力されたときに実行される。なお、データの書き込み要求には、書き込み対象のデータ（更新データ）と、その更新データが属するデータブロックの論理ブロック番号が含まれている。
【０１０５】
［ステップＳ４１］ＲＡＩＤ制御部１３４は、書き込み要求に応じたデータ書き込み対象の物理ブロック内のデータの読み込み指示を、ＨＤＤアクセス部１３５に対して出力する。具体的には、ＲＡＩＤ制御部１３４は、まず、書き込み要求で指定された論理ブロック番号に対応する物理ブロックを特定する。そして、該当する物理ブロックが属するＨＤＤのディスク番号と、該当する物理ブロックの物理ブロック番号を判断する。これらの判断は、図８に示した割当関係に基づいて行われる。そして、ＲＡＩＤ制御部１３４は、データ書き込み対象の物理ブロックを指定して、その物理ブロック内のデータの読み込み指示をＨＤＤアクセス部１３５に対して出力する。すると、ＨＤＤアクセス部１３５によって、指定された物理ブロック内のデータの読み込みが行われる。
【０１０６】
［ステップＳ４２］ＲＡＩＤ制御部１３４は、パリティブロックに対応する物理ブロック内のパリティデータの読み込み指示を、ＨＤＤアクセス部１３５に対して出力する。具体的には、ＲＡＩＤ制御部１３４は、まず、書き込み要求で指定された論理ブロック番号と同じパリティグループ内のパリティブロックに対応する物理ブロックを特定する。そして、該当する物理ブロックが属するＨＤＤのディスク番号と、該当する物理ブロックの物理ブロック番号を判断する。これらの判断は、図８に示した割当関係に基づいて行われる。そして、ＲＡＩＤ制御部１３４は、パリティブロックに対応する物理ブロックを指定して、その物理ブロック内のパリティブロックの読み込み指示をＨＤＤアクセス部１３５に対して出力する。すると、ＨＤＤアクセス部１３５によって、指定された物理ブロック内のパリティデータの読み込みが行われる。
【０１０７】
［ステップＳ４３］ＲＡＩＤ制御部１３４は、データの読み込みが完了したか否かを判断する。具体的には、ＲＡＩＤ制御部１３４は、データの読み込み指示を出力したＨＤＤからデータが応答された場合、データ読み込み完了と判断する。データ読み込みが完了した場合、処理がステップＳ４４に進められる。データ読み込みが完了していなければステップＳ４３の処理が繰り返され、ＲＡＩＤ制御部１３４は読み込み待ち状態となる。
【０１０８】
［ステップＳ４４］ＲＡＩＤ制御部１３４は、パリティデータの読み込みが完了したか否かを判断する。具体的には、ＲＡＩＤ制御部１３４は、パリティデータの読み込み指示を出力したＨＤＤからパリティデータが応答された場合、パリティデータ読み込み完了と判断する。パリティデータの読み込みが完了した場合、処理がステップＳ４５に進められる。パリティデータ読み込みが完了していなければステップＳ４４の処理が繰り返され、ＲＡＩＤ制御部１３４は読み込み待ち状態となる。
【０１０９】
ＲＡＩＤ制御部１３４はデータとパリティデータとの読み込みが完了すると、ＲＡＭ１３２内に処理対象データテーブルを作成し、読み込んだデータをその処理対象データテーブルに格納する。
【０１１０】
［ステップＳ４５］ＲＡＩＤ制御部１３４は、パリティデータを計算する。具体的には、ＲＡＩＤ制御部１３４は、ＨＤＤから読み込んだパリティデータ、ＨＤＤから読み込んだデータ、および更新データの排他的論理和演算を行う。その演算結果が、更新後のパリティデータとなる。
【０１１１】
［ステップＳ４６］タイムスタンプ生成部１３６は、タイムスタンプを取得する。具体的には、ＲＡＩＤ制御部１３４からタイムスタンプ生成部１３６へ、タイムスタンプの生成要求が出される。その生成要求に応じて、タイムスタンプ生成部１３６がタイムスタンプを生成する。生成されたタイムスタンプは、タイムスタンプ生成部１３６からＲＡＩＤ制御部１３４に渡される。
【０１１２】
［ステップＳ４７］ＲＡＩＤ制御部１３４は、データブロックの書き込み指示をＨＤＤアクセス部１３５に対して出力する。具体的には、ＲＡＩＤ制御部１３４は、書き込み要求で指定された更新データにタイムスタンプを付与する。そして、ＲＡＩＤ制御部１３４は、更新データが属するデータブロックに対応する物理ブロックのディスク番号と物理ブロック番号とを指定して、タイムスタンプ付きの更新データの書き込み指示をＨＤＤアクセス部１３５に対して出力する。すると、ＨＤＤアクセス部１３５によって、ディスク番号に対応するＨＤＤに対して、タイムスタンプ付きの更新データの書き込みが行われる。
【０１１３】
［ステップＳ４８］ＲＡＩＤ制御部１３４は、パリティデータの書き込み指示をＨＤＤアクセス部１３５に対して出力する。具体的には、ＲＡＩＤ制御部１３４は、書き込み要求で指定された更新データと同じパリティグループ内のパリティデータにタイムスタンプを付与する。付与されるパリティデータは、パリティデータ群内の更新データが格納されるＨＤＤに対応付けられたタイムスタンプ領域に設定される。そして、ＲＡＩＤ制御部１３４は、パリティブロックに対応する物理ブロックのディスク番号と物理ブロック番号とを指定して、タイムスタンプ付きのパリティデータの書き込み指示をＨＤＤアクセス部１３５に対して出力する。すると、ＨＤＤアクセス部１３５によって、ディスク番号に対応するＨＤＤに対して、タイムスタンプ付きのパリティデータの書き込みが行われる。
【０１１４】
［ステップＳ４９］ＲＡＩＤ制御部１３４は、データの書き込みが完了したか否かを判断する。具体的には、ＲＡＩＤ制御部１３４は、データの書き込み指示を出力したＨＤＤから「ＯＫ」の応答が返信されると、データ書き込み完了と判断する。データ書き込みが完了した場合、処理がステップＳ５０に進められる。データ書き込みが未完了であれば、ステップＳ４９の処理が繰り返され、ＲＡＩＤ制御部１３４はデータ書き込み完了待ち状態となる。
【０１１５】
［ステップＳ５０］ＲＡＩＤ制御部１３４は、パリティデータの書き込みが完了したか否かを判断する。具体的には、ＲＡＩＤ制御部１３４は、パリティデータの書き込み指示を出力したＨＤＤから「ＯＫ」の応答が返信されると、パリティデータ書き込み完了と判断する。パリティデータ書き込みが完了した場合、処理が終了する。パリティデータ書き込みが未完了であれば、ステップＳ５０の処理が繰り返され、ＲＡＩＤ制御部１３４はパリティデータ書き込み完了待ち状態となる。
【０１１６】
このようにして、ホストコンピュータ１０からのブロック単位のデータ書き込み要求に応答して、データブロックとパリティブロックとのそれぞれに対応する物理ブロック内のデータが更新される。
【０１１７】
以下、図１１，図１２を参照して、論理ブロック番号「Ｄ１」のデータを更新する書き込み要求が出された場合を例に採り、データブロックとパリティブロックとタイムスタンプの更新内容を説明する。
【０１１８】
ホストコンピュータ１０から論理ブロック番号「Ｄ１」内のデータの書き込み要求が入力されると、まず、そのデータブロックに対応する物理ブロック内のデータがＨＤＤから読み出される（図１０のステップＳ４１〜Ｓ４４）。図８を参照すると、論理ブロック番号「Ｄ１」に対応する物理ブロックは、ディスク番号が「DISK＃1」のＨＤＤ２１０の物理ブロック番号「block#1」の物理ブロックである。そこで、ＨＤＤ２１０の物理ブロック番号「block#1」の物理ブロック内のデータが読み出される。
【０１１９】
また、論理ブロック番号「Ｄ１」と同じパリティグループに属するのは、論理ブロック番号「Ｐ１」のパリティブロックである。論理ブロック番号「Ｐ１」に対応する物理ブロックは、ディスク番号が「DISK＃5」のＨＤＤ２５０の物理ブロック番号「block#1」の物理ブロックである。そこで、ＨＤＤ２５０の物理ブロック番号「block#1」内のパリティデータが読み出される。
【０１２０】
読み出されたデータおよびパリティデータは、処理対象データテーブルに設定される。
図１１は、処理対象データテーブルのデータ構造例を示す図である。処理対象データテーブル１３２ａは、図１０のステップＳ４４終了後に、ＲＡＩＤ制御部１３４によってＲＡＭ１３２内に生成される。処理対象データテーブル１３２ａには、論理ブロック番号、ディスク番号、物理ブロック番号、データ、およびタイムスタンプの欄が設けられている。
【０１２１】
論理ブロック番号の欄には、読み出されたデータまたはパリティデータの論理ブロックを示す論理ブロック番号が設定される。
ディスク番号の欄には、論理ブロック番号で示される論理ブロックに対応する物理ブロックが属するＨＤＤのディスク番号が設定される。
【０１２２】
物理ブロック番号の欄には、論理ブロック番号で示される論理ブロックに対応する物理ブロックの物理ブロック番号が設定される。
データの欄には、読み出されたデータまたはパリティデータが設定される。
【０１２３】
タイムスタンプの欄には、読み出されたデータまたはパリティデータに付与されていたパリティデータが設定される。パリティデータは、複数のＨＤＤ２１０，２２０，２３０，２４０，２５０それぞれに対応付けられている。
【０１２４】
図１１の例では、論理ブロック番号「Ｄ１」の論理ブロックは、データブロックである。このデータブロックのデータ「ｄ１」には、ディスク番号「DISK＃1」のＨＤＤ２１０に対応するタイムスタンプ「ｔ１１」が設定されている。また、論理ブロック番号「Ｐ１」の論理ブロックは、パリティブロックである。このパリティブロックのパリティデータ「ｐ１」には、同じパリティグループ内のデータブロックのデータそれぞれ対応するタイムスタンプ「ｔ２１」、「ｔ２２」、「ｔ２３」、「ｔ２４」が設定されている。
【０１２５】
このような処理対象データテーブル１３２ａ内のデータが、書き込み要求に示される更新データに基づいて更新される。
図１２は、データ更新後の処理対象データテーブルの例を示す図である。図１２に示すように、データ更新後の処理対象データテーブル１３２ａでは、論理ブロック番号「Ｄ１」のデータ「ｄ１」は、更新データ「ｄ１＿１」に変更されている。論理ブロック番号「Ｐ１」のパリティデータ「ｐ１」は、更新後のパリティデータ「ｐ１＿１」に変更されている。なお更新後のパリティデータ「ｐ１＿１」は以下の式で計算される。
「ｐ１＿１」＝「ｐ１」＾「ｄ１」＾「ｄ１＿１」
ここで、「＾」は排他的論理和を表している（以後の他の式においても同様）。
【０１２６】
データ更新後の処理対象データテーブル１３２ａでは、論理ブロック番号「Ｄ１」のデータ「ｄ１＿１」におけるディスク番号「DISK＃1」に対応するタイムスタンプ「ｔ１１」が、更新時のタイムスタンプ「ｔ１１＿１」に変更されている。同様に、論理ブロック番号「Ｐ１」のパリティデータ「ｐ１＿１」におけるディスク番号「DISK＃1」に対応するタイムスタンプ「ｔ１１」が、更新時のタイムスタンプ「ｔ１１＿１」に変更されている。
【０１２７】
データ更新後の処理対象データテーブル１３２ａ内のタイムスタンプ付きのデータおよびパリティデータが、元の物理ブロックに書き戻される。その結果、データの更新と共に、パリティデータの更新、およびデータとパリティデータとに付与されたタイムスタンプの更新が行われる。すなわち、更新時刻「ｔ１１＿１」が、データブロックのデータを格納するＨＤＤと、パリティブロックのパリティデータを格納するＨＤＤとに、２重で格納される。
【０１２８】
次に、ストライプ単位の書き込み処理について説明する。
図１３は、ストライプ書き込み処理の手順を示すフローチャートである。以下、図１３に示す処理をステップ番号に沿って説明する。この処理は、ホストコンピュータ１０からストライプ単位でのデータの書き込み要求が入力されたときに実行される。なお、データの書き込み要求には、書き込み対象のデータ（更新データ）と、その更新データが属するストライプの指定（論理ブロック番号によるデータブロックの範囲指定）とが含まれている。
【０１２９】
［ステップＳ６１］ＲＡＩＤ制御部１３４は、パリティデータを計算する。具体的には、ＲＡＩＤ制御部１３４は、ストライプ内のデータを、各データが属する論理ブロックに応じてパリティグループに分ける。さらに、ＲＡＩＤ制御部１３４は、パリティグループごとに、そのパリティグループに属するデータブロック内のデータの排他的論理和演算を行い、パリティグループごとのパリティデータを生成する。そして、ＲＡＩＤ制御部１３４は、生成されたパリティデータを有する論理ブロックを、パリティデータの生成元となったデータブロックと同じパリティグループのパリティブロックとする。
【０１３０】
［ステップＳ６２］ＲＡＩＤ制御部１３４は、タイムスタンプを取得する。タイムスタンプ取得処理の詳細は、図１０のステップＳ４６の処理と同様である。
［ステップＳ６３］ＲＡＩＤ制御部１３４は、ストライプ内の全論理ブロックのデータおよびパリティデータの書き込み指示を、ＨＤＤアクセス部１３５に対して出力する。具体的には、ＲＡＩＤ制御部１３４は、書き込み要求で指定されたストライプ内のブロック単位の各更新データにタイムスタンプを付与する。また、ＲＡＩＤ制御部１３４は、書き込み要求で指定されたストライプ内の各パリティブロックに、同じパリティグループ内の各更新データに対応するタイムスタンプを付与する。そして、ＲＡＩＤ制御部１３４は、複数の更新データと、複数のパリティデータとの書き込み指示をＨＤＤアクセス部１３５に対して出力する。更新データの書き込み指示には、更新データが属するデータブロックに対応する物理ブロックのディスク番号と物理ブロック番号とが指定される。パリティデータの書き込み指示には、パリティデータが属するパリティブロックに対応する物理ブロックのディスク番号と物理ブロック番号とが指定される。するとＨＤＤアクセス部１３５によって、タイムスタンプ付きの更新データとパリティデータとが、それぞれについて指定されたＨＤＤ内の指定された物理ブロックに書き込まれる。
【０１３１】
［ステップＳ６４］ＲＡＩＤ制御部１３４は、全データおよびパリティデータの書き込みが完了したか否かを判断する。具体的には、ＲＡＩＤ制御部１３４は、すべてのＨＤＤから「ＯＫ」の応答を受け取った場合、書き込み完了と判断する。全データの書き込みが完了すると、ＲＡＩＤ制御部１３４は処理を終了する。少なくとも１つのＨＤＤにおける書き込みが完了していなければ、ステップＳ６４の処理が繰り返され、ＲＡＩＤ制御部１３４は書き込み待ち状態となる。
【０１３２】
このようにして、ホストコンピュータ１０からのストライプ単位のデータ書き込み要求に応答して、データブロックとパリティブロックとのそれぞれに対応する物理ブロック内のデータが更新される。
【０１３３】
以下、図１４を参照して、論理ブロック番号「Ｄ１」〜「Ｄ１６」のストライプ書き込み要求が出された場合を例に採り、タイムスタンプの更新内容を説明する。
ホストコンピュータ１０から論理ブロック番号「Ｄ１」〜「Ｄ１６」のストライプ書き込み要求が入力されると、ＲＡＩＤ制御部１３４によって、ＲＡＭ１３２内に処理対象データテーブルが生成される。
【０１３４】
図１４は、ストライプ書き込み時の処理対象データテーブルの例を示す図である。ストライプ書き込み時の処理対象データテーブル１３２ｂのテーブル構造は図１１，図１２に示したブロック書き込み時の処理対象データテーブル１３２ａと同様である。ただし、ストライプ書き込み時の処理対象データテーブル１３２ｂには、ストライプに属するすべての論理ブロックに対応する情報が登録される。
【０１３５】
図１４の例では、図８に示したストライプ４１の先頭のパリティグループに関する更新データの情報が示されている。このパリティグループは、論理ブロック番号「Ｄ１」、「Ｄ５」、「Ｄ９」、「Ｄ１３」の各データブロックと、論理ブロック番号「Ｐ１」のパリティブロックとを有する。なお、図１４では省略しているが、ストライプ４１に含まれる他の３つのパリティグループの情報も、処理対象データテーブル１３２ｂに登録される。他の３つのパリティグループには、論理ブロック番号が「Ｐ２」、「Ｐ３」、「Ｐ４」のパリティブロックが含まれる（図８参照）。
【０１３６】
論理ブロック番号「Ｄ１」〜「Ｄ１６」それぞれのデータを「ｄ１」〜「ｄ１６」と表したとき、論理ブロック番号「Ｐ１」〜「Ｐ４」の各パリティブロックのパリティデータ「ｐ１」〜「ｐ４」は、それぞれ以下の式で計算できる。
「ｐ１」＝「ｄ１」＾「ｄ５」＾「ｄ９」＾「ｄ１３」
「ｐ２」＝「ｄ２」＾「ｄ６」＾「ｄ１０」＾「ｄ１４」
「ｐ３」＝「ｄ３」＾「ｄ７」＾「ｄ１１」＾「ｄ１５」
「ｐ４」＝「ｄ４」＾「ｄ８」＾「ｄ１２」＾「ｄ１６」
ここで、図１４に示した各データ「ｄ１」、「ｄ５」、「ｄ９」、「ｄ１３」に付与されるタイムスタンプは、同じ値「ｔ１」である。個々のタイムスタンプの格納領域は、データが格納されるＨＤＤに対応する領域である。データ「ｄ１」、「ｄ５」、「ｄ９」、「ｄ１３」は、それぞれ格納されるＨＤＤが異なるため、タイムスタンプの格納領域も異なっている。
【０１３７】
パリティデータ「ｐ１」には、データ「ｄ１」、「ｄ５」、「ｄ９」、「ｄ１３」それぞれに対応する４つのタイムスタンプが付与される。パリティデータ「ｐ１」に付与される各タイムスタンプの値は、すべて「ｔ１」である。
【０１３８】
このようにして、処理対象データテーブル１３２ｂを用いて、ストライプに含まれるデータとパリティデータとに対してタイムスタンプが付与される。そして、タイムスタンプが付与されたデータおよびパリティデータが、ＲＡＩＤ５のストライプ書き込みより、対応付けられた物理ブロックに書き込まれる。その結果、各データに付与したタイムスタンプ「ｔ１」は、データを格納したＨＤＤとパリティデータを格納したＨＤＤとに２重で格納される。
【０１３９】
次に、データ読み込み処理について説明する。まず、ブロック単位の読み込み処理について説明する。
図１５は、ブロック読み込み処理の手順を示すフローチャートである。以下、図１５に示す処理をステップ番号に沿って説明する。この処理は、ホストコンピュータ１０からブロック単位でのデータの読み込み要求が入力されたときに実行される。なお、データの読み込み要求には、読み込み対象のデータが属するデータブロックの論理ブロック番号が含まれている。
【０１４０】
［ステップＳ７１］ＲＡＩＤ制御部１３４は、読み込み要求で指定されたデータブロックに対応する物理ブロックのデータの読み込み指示をＨＤＤアクセス部１３５に対して出力する。すると、ＨＤＤアクセス部１３５により、指定された物理ブロックが属するＨＤＤから、指定された物理ブロック内のデータが読み出される。
【０１４１】
［ステップＳ７２］ＲＡＩＤ制御部１３４は、パリティブロックに対応する物理ブロックのパリティデータの読み込み指示を、ＨＤＤアクセス部１３５に対して出力する。すると、ＨＤＤアクセス部１３５により、指定された物理ブロックが属するＨＤＤから、指定された物理ブロック内のデータが読み出される。
【０１４２】
［ステップＳ７３］ＲＡＩＤ制御部１３４は、データの読み込みが完了したか否かを判断する。具体的には、ＲＡＩＤ制御部１３４は、データの読み込み指示を出力したＨＤＤからデータが応答された場合、データ読み込み完了と判断する。データ読み込みが完了した場合、処理がステップＳ７４に進められる。データ読み込みが完了していなければステップＳ７３の処理が繰り返され、ＲＡＩＤ制御部１３４は読み込み待ち状態となる。
【０１４３】
［ステップＳ７４］ＲＡＩＤ制御部１３４は、パリティデータの読み込みが完了したか否かを判断する。具体的には、ＲＡＩＤ制御部１３４は、パリティデータの読み込み指示を出力したＨＤＤからパリティデータが応答された場合、パリティデータ読み込み完了と判断する。パリティデータの読み込みが完了した場合、処理がステップＳ７５に進められる。パリティデータ読み込みが完了していなければステップＳ７４の処理が繰り返され、ＲＡＩＤ制御部１３４は読み込み待ち状態となる。
【０１４４】
ＲＡＩＤ制御部１３４はデータとパリティデータとの読み込みが完了すると、ＲＡＭ１３２内に処理対象データテーブルを作成し、読み込んだデータをそのデータ管理テーブルに格納する。
【０１４５】
［ステップＳ７５］タイムスタンプ比較部１３７は、パリティデータに付与された複数のタイムスタンプのうちの読み込み対象のデータに対応するタイムスタンプと、読み込み対象のデータに付与されたタイムスタンプとを比較する。読み込み対象のデータに付与されたタイムスタンプの値が、パリティデータに付与されたタイムスタンプの値以上の場合、処理がステップＳ７６に進められる。そうでなければ、処理がステップＳ７９に進められる。
【０１４６】
［ステップＳ７６］読み込み対象のデータのタイムスタンプが、パリティデータのタイムスタンプ以上の場合、ＲＡＩＤ制御部１３４は、読み込んだデータをホストコンピュータ１０に応答する。
【０１４７】
［ステップＳ７７］タイムスタンプ比較部１３７は、パリティデータに付与された読み込み対象のデータに対応するタイムスタンプと、読み込み対象のデータに付与されたタイムスタンプとを比較する。読み込み対象のデータに付与されたタイムスタンプの値が、パリティデータに付与されたタイムスタンプの値より大きければ、処理がステップＳ７８に進められる。読み込み対象のデータに付与されたタイムスタンプの値と、パリティデータに付与されたタイムスタンプの値とが等しければ、処理が終了する。
【０１４８】
［ステップＳ７８］読み込み対象のデータに付与されたタイムスタンプの値が、パリティデータに付与されたタイムスタンプの値より大きい場合、ＲＡＩＤ制御部１３４は、パリティ書き込み抜けの修復を行う。パリティ書き込み抜け修復処理の詳細は後述する（図１７参照）。その後、処理が終了する。
【０１４９】
［ステップＳ７９］読み込み対象のデータのタイムスタンプが、パリティデータのタイムスタンプより小さい場合、ＲＡＩＤ制御部１３４は、データ書き込み抜けの修復を行う。データ書き込み抜けの修復および応答処理の詳細は後述する（図２０参照）。そして、ＲＡＩＤ制御部１３４は、ホストコンピュータ１０に対して、修復したデータを応答する。その後、処理が終了する。
【０１５０】
このようにして、ブロック単位の読み込み処理が行われる。例えば、論理ブロック番号「Ｄ１」のデータブロックのデータ「ｄ１」を読み出す場合について説明する。この場合、まず、データ「ｄ１」を格納する物理ブロックからそのデータ「ｄ１」が読み出される。また、論理ブロック番号「Ｄ１」のデータブロックと同じパリティグループに属するパリティブロック「Ｐ１」のパリティデータ「ｐ１」を格納する物理ブロックから、パリティデータ「ｐ１」が読み出される。そして、ＲＡＩＤ制御部１３４によって、処理対象データテーブルが生成される。
【０１５１】
図１６は、処理対象データテーブルのデータ構造例を示す図である。処理対象データテーブル１３２ｃは、図１５のステップＳ７４終了後に、ＲＡＩＤ制御部１３４によってＲＡＭ１３２内に生成される。処理対象データテーブル１３２ｃには、論理ブロック番号、ディスク番号、物理ブロック番号、データ、およびタイムスタンプの欄が設けられている。各欄には、図１１に示した処理対象データテーブル１３２ａの同名の欄と同種の情報が設定される。
【０１５２】
図１６の例では、処理対象データテーブル１３２ｃに、データ「ｄ１」とパリティデータ「ｐ１」との情報が登録されている。データ「ｄ１」は、論理ブロック番号「Ｄ１」のデータブロックのデータである。「ｐ１」は、論理ブロック番号「Ｄ１」のデータブロックと同じパリティグループ内のパリティブロック（論理ブロック番号「Ｐ１」）のパリティデータである。
【０１５３】
ここで、データ「ｄ１」に付与されていたタイムスタンプを「ｔ１１」とする。タイムスタンプ「ｔ１１」は、ディスク番号「DISK＃1」のＨＤＤ２１０に対応付けられている。また、パリティデータ「ｐ１」に付与されていたタイムスタンプを「ｔ２１」、「ｔ２２」、「ｔ２３」、「ｔ２４」とする。タイムスタンプ「ｔ２１」、「ｔ２２」、「ｔ２３」、「ｔ２４」は、それぞれディスク番号「DISK＃1」、「DISK＃2」、「DISK＃3」、「DISK＃4」のＨＤＤ２１０，２２０，２３０，２４０に対応付けられている。
【０１５４】
タイムスタンプ比較部１３７は、データ「ｄ１」に付与されていたタイムスタンプ「ｔ１」と、データ「ｄ１」の読み込み元のＨＤＤ２１０に対応付けてタイムスタンプに付与されていたタイムスタンプ「ｔ２１」とを比較する。ここで「ｔ２１」＞「ｔ１１」の場合、タイムスタンプ比較部１３７は、データの書き込み抜けがあると判断する。他方、タイムスタンプ比較部１３７は、「ｔ２１」≦「ｔ１１」であれば、データの書き込み抜けは発生していないと判断する。ただし、「ｔ２１」＜「ｔ１１」の場合、タイムスタンプ比較部１３７は、パリティデータの書き込み抜けが発生していると判断する。
【０１５５】
ＲＡＩＤ制御部１３４は、データの書き込み抜けが検出されなければ、読み込んだデータ「ｄ１」をホストコンピュータ１０に応答する。パリティデータの書き込み抜けが検出された場合には、ＲＡＩＤ制御部１３４は、パリティデータ書き込み抜け修復処理を行う。データの書き込み抜けが検出された場合には、ＲＡＩＤ制御部１３４は、データ書き込み抜け修復および応答処理を行う。
【０１５６】
次に、パリティデータ書き込み抜け修復処理について説明する。
図１７は、パリティデータ書き込み抜け修復処理の手順を示すフローチャートである。以下、図１７に示す処理をステップ番号に沿って説明する。
【０１５７】
［ステップＳ８１］ＲＡＩＤ制御部１３４は、残りのデータの読み込み指示をＨＤＤアクセス部１３５に出力する。すると、ＨＤＤアクセス部１３５により残りのデータがＨＤＤから読み出される。ここで残りのデータとは、読み込み要求で指定された論理ブロック番号のデータブロックと同じパリティグループに属する他のデータブロックそれぞれに対応する物理ブロックに格納されたデータである。
【０１５８】
［ステップＳ８２］ＲＡＩＤ制御部１３４は、ステップＳ８１で読み込み指示を出した全データの読み込みが完了したか否かを判断する。すべてのデータの読み込みが完了していれば、処理がステップＳ８３に進められる。読み込みが未完了のデータがあれば、ステップＳ８２の処理が繰り返され、ＲＡＩＤ制御部１３４は、読み込み待ちの状態となる。
【０１５９】
読み込み要求で指定されたデータブロックのデータとパリティブロックのデータとは、既にステップＳ７１，７２の処理で読み出されている。従って、ステップＳ８１で残りの全データが読み出されることにより、読み込み要求で指定された論理ブロックが属するパリティグループ内のすべてのデータとパリティデータとが読み出されたこととなる。
【０１６０】
［ステップＳ８３］タイムスタンプ比較部１３７は、パリティデータに付与された各タイムスタンプと、新たに読み出された各データに付与されたタイムスタンプとを比較する。具体的には、タイムスタンプ比較部１３７は、パリティデータの付与された各タイムスタンプの格納場所に基づいて、そのタイムスタンプに対応するＨＤＤを判断する。そして、タイムスタンプ比較部１３７は、パリティデータに付与された各タイムスタンプと、そのタイムスタンプに対応するＨＤＤから読み出されたデータに付与されたタイムスタンプとを比較する。各タイムスタンプの比較の結果、すべてのデータについて、パリティデータに付与されたタイムスタンプ以上の値のタイムスタンプが付与されていた場合、処理がステップＳ８５に進められる。他方、パリティデータに付与されたタイムスタンプよりも小さい値のタイムスタンプが付与されたデータが少なくとも１つある場合、処理がステップＳ８４に進められる。
【０１６１】
［ステップＳ８４］ＲＡＩＤ制御部１３４は、パリティデータよりも古いタイムスタンプが付与されたデータが格納されていた物理ブロックを特定する。そして、ＲＡＩＤ制御部１３４は、特定した物理ブロックに対応する論理ブロックをバッドブロックとして記録する。すなわち、パリティデータよりも古いタイムスタンプが付与されたデータが格納されていた物理ブロックでは、データの書き込み抜けが発生している。また、パリティデータ書き込み抜け修復処理が実行される場合には、既にパリティデータの書き込み抜けが発生していることが分かっている。すなわち、同一のパリティグループにおいて複数の物理ブロックで書き込み抜けが発生していることとなる。
【０１６２】
複数の物理ブロックで書き込み抜けが発生した場合、データを修復することができない。そこで、ＲＡＩＤ制御部１３４は、書き込み抜けが発生した物理ブロックに対応する論理ブロックのデータが損失したことを示すため、その論理ブロックの属性をバッドブロックとする。以後、バッドブロックとして登録された論理ブロックのデータ読み込み要求があると、ＲＡＩＤ制御部１３４はエラーを応答する。
【０１６３】
［ステップＳ８５］ＲＡＩＤ制御部１３４は、読み出されているデータに基づいてパリティ計算を行い、パリティデータを生成する。具体的には、ＲＡＩＤ制御部１３４は、読み込んだデータの排他的論理和演算を行い、演算結果をパリティデータとする。この際、ＲＡＩＤ制御部１３４は、生成したパリティデータに、各データのタイムスタンプと同じ値のタイムスタンプを付与する。
【０１６４】
［ステップＳ８６］ＲＡＩＤ制御部１３４は、パリティブロックに対応する物理ブロックへのタイムスタンプ付きのパリティデータの書き込み指示をＨＤＤアクセス部１３５に対して出力する。すると、ＨＤＤアクセス部１３５により、修復されたパリティデータがＨＤＤ内の指定された論理ブロックに書き込まれる。
【０１６５】
［ステップＳ８７］ＲＡＩＤ制御部１３４は、パリティデータの書き込みが完了したか否かを判断する。書き込みが完了した場合、処理が終了する。書き込みが完了していなければ、ステップＳ８７の処理が繰り返され、ＲＡＩＤ制御部１３４は書き込み完了待ちの状態となる。
【０１６６】
このようにして、パリティデータの書き込み抜けがあった場合、パリティデータを修復することができる。
例えば、論理ブロック番号「Ｄ１」のデータブロック内のデータの読み込み処理において、パリティデータの書き込み抜けが検出された場合を想定する。この場合、論理ブロック「Ｄ１」と同じパリティグループに属する他のデータブロックのデータが読み出される。すなわち論理ブロック番号「Ｄ５」、「Ｄ９」、「Ｄ１３」のデータブロックに対応する物理ブロックからデータ「ｄ５」、「ｄ９」、「ｄ１３」が読み出される。読み出されたデータは、図１６に示した処理対象データテーブル１３２ｃに追加登録される。
【０１６７】
図１８は、パリティ書き込み抜け修復時の処理対象データテーブルの例を示す図である。処理対象データテーブル１３２ｃには、データ「ｄ５」、「ｄ９」、「ｄ１３」に関する情報が追加登録されている。
【０１６８】
タイムスタンプ比較部１３７は、新たに読み出されたデータ「ｄ５」、「ｄ９」、「ｄ１３」に付与されているタイムスタンプと、パリティデータ「ｐ１」に付与されているタイムスタンプとを比較する。すなわち、「ｔ１２」と「ｔ２２」とが比較され、「ｔ１３」と「ｔ２３」とが比較され、「ｔ１４」と「ｔ２４」とが比較される。比較の結果、以下の条件が成立するか否かが判断される。
（ｔ１２≧ｔ２２）ＡＮＤ（ｔ１３≧ｔ２３）ＡＮＤ（ｔ１４≧ｔ２４）
ここで「ＡＮＤ」は論理積を示している。この条件が成立するとき、タイムスタンプ比較部１３７は、論理ブロック番号「Ｄ５」、「Ｄ９」、「Ｄ１３」に対応する物理ブロックに書き込み抜けはないと判断する。上記条件が成立しない場合、タイムスタンプ比較部１３７は、パリティデータに付与されたタイムスタンプより小さいタイムスタンプを有する物理ブロックにおいて書き込み抜けが発生したと判断する。この場合、ＲＡＩＤ制御部１３４は、該当する論理ディスクのブロックをデータ損失したバッドブロックとして登録する。
【０１６９】
ＲＡＩＤ制御部１３４は、バッドブロックがない場合、各データブロックのデータ「ｄ１」、「ｄ５」、「ｄ９」、「ｄ１３」を用いてパリティデータを計算する。新たに生成されるパリティデータを「ｐ１＿１」とすると、以下の計算が行われる。
「ｐ１＿１」＝「ｄ１」＾「ｄ５」＾「ｄ９」＾「ｄ１３」
そして、新たに生成されたパリティデータ「ｐ１＿１」に、他のデータと同じタイムスタンプが付与される。
【０１７０】
図１９は、パリティデータ修復後の処理対象データテーブルの例を示す図である。図１９に示すように、新たに生成されたパリティデータ「ｐ１＿１」には、他のデータ「ｄ１」、「ｄ５」、「ｄ９」、「ｄ１３」と同じタイムスタンプ「ｔ１１」、「ｔ１２」「ｔ１３」、「ｔ１４」が付与されている。
【０１７１】
そして、タイムスタンプ付きのパリティデータ「ｐ１＿１」が、論理ブロック番号「Ｐ１」に対応する物理ブロックに書き込まれる。その結果、書き込み抜けによって損失していたパリティデータが修復される。
【０１７２】
次に、データ書き込み抜け修復および応答処理について説明する。
図２０は、データ書き込み抜け修復および応答処理の手順を示すフローチャートである。以下、図２０に示す処理をステップ番号に沿って説明する。
【０１７３】
［ステップＳ９１］ＲＡＩＤ制御部１３４は、残りのデータの読み込み指示をＨＤＤアクセス部１３５に対して出力する。すると、ＨＤＤアクセス部１３５により、読み込み要求で指定されたデータ以外の残りのデータがＨＤＤから読み出される。
【０１７４】
［ステップＳ９２］ＲＡＩＤ制御部１３４は、ステップＳ９１で読み込み指示を出した全データの読み込みが完了したか否かを判断する。すべてのデータの読み込みが完了していれば、処理がステップＳ９３に進められる。読み込みが未完了のデータがあれば、ステップＳ９２の処理が繰り返され、ＲＡＩＤ制御部１３４は、読み込み待ちの状態となる。
【０１７５】
［ステップＳ９３］タイムスタンプ比較部１３７は、パリティデータに付与された各タイムスタンプと、新たに読み出された各データに付与されたタイムスタンプとを比較する。具体的には、タイムスタンプ比較部１３７は、パリティデータに付与された各タイムスタンプの格納場所に基づいて、そのタイムスタンプに対応するＨＤＤを判断する。そして、タイムスタンプ比較部１３７は、パリティデータに付与された各タイムスタンプと、そのタイムスタンプに対応するＨＤＤから読み出されたデータに付与されたタイムスタンプとを比較する。各タイムスタンプの比較の結果、すべてのデータについて、パリティデータと同じ値のタイムスタンプが付与されていた場合、処理がステップＳ９４に進められる。他方、パリティデータに付与されたタイムスタンプと異なるタイムスタンプが付与されたデータが少なくとも１つある場合、処理がステップＳ９８に進められる。
【０１７６】
［ステップＳ９４］ＲＡＩＤ制御部１３４は、新たに読み込んだすべてのデータについて、パリティデータと同じ値のタイムスタンプが付与されていた場合、それらのデータの書き込み抜けは発生していないと判断する。そこで、ＲＡＩＤ制御部１３４は、書き込み抜けが発生していないデータとパリティデータとに基づいて、データを修復する。具体的には、ＲＡＩＤ制御部１３４は、書き込み抜けがあったデータ以外の各データとパリティデータとの排他的論理和演算を行い、演算結果を修復後のデータとする。
【０１７７】
［ステップＳ９５］ＲＡＩＤ制御部１３４は、読み込み要求に対応する応答として、ホストコンピュータ１０にステップＳ９４で修復したデータを送信する。
［ステップＳ９６］ＲＡＩＤ制御部１３４は、ステップＳ７１（図１５参照）における読み込み対象の物理ブロックへのステップＳ９４で修復したデータの書き込み指示を、ＨＤＤアクセス部１３５に対して出力する。この際、書き込まれるデータには、パリティデータに付与されていたタイムスタンプ（該当データの書き込み先のＨＤＤに対応するタイムスタンプ）が付与される。すると、ＨＤＤアクセス部１３５により、修復されたタイムスタンプ付きのデータがＨＤＤ内の指定された論理ブロックに書き込まれる。
【０１７８】
［ステップＳ９７］ＲＡＩＤ制御部１３４は、データの書き込みが完了したか否かを判断する。データの書き込みが完了していれば、処理が終了する。データの書き込みが完了していなければ、ステップＳ９７の処理が繰り返され、ＲＡＩＤ制御部１３４は書き込み完了待ちの状態となる。
【０１７９】
［ステップＳ９８］ＲＡＩＤ制御部１３４は、パリティデータより古いタイムスタンプが付与されていたデータの論理ブロックを、バッドブロックとして記録する。
［ステップＳ９９］ＲＡＩＤ制御部１３４は、ホストコンピュータ１０に対してエラー応答を行う。
【０１８０】
［ステップＳ１００］ＲＡＩＤ制御部１３４は、読み出されているデータのうち、バッドブロック化されていない論理ブロックのデータ（正常に読み出された）に基づいてパリティ計算を行い、パリティデータを生成する。具体的には、ＲＡＩＤ制御部１３４は、正常に読み出されたデータの排他的論理和演算を行い、演算結果をパリティデータとする。この際、ＲＡＩＤ制御部１３４は、生成したパリティデータに生成元となった各データのタイムスタンプと同じ値のタイムスタンプを付与する。
【０１８１】
［ステップＳ１０１］ＲＡＩＤ制御部１３４は、パリティデータの書き込み指示をＨＤＤアクセス部１３５に対して出力する。すると、ＨＤＤアクセス部１３５により、タイムスタンプ付きのパリティデータがＨＤＤに書き込まれる。
【０１８２】
［ステップＳ１０２］ＲＡＩＤ制御部１３４は、パリティデータの書き込みが完了したか否かを判断する。パリティデータの書き込みが完了した場合、処理が終了する。パリティデータの書き込みが完了していなければ、ステップＳ１０２の処理が繰り返され、ＲＡＩＤ制御部１３４は書き込み待ち状態となる。
【０１８３】
このようにして、データの書き込み抜けがあった場合、データの修復および修復したデータのホストコンピュータ１０への応答ができる。
例えば、論理ブロック番号「Ｄ１」のデータブロック内のデータ「ｄ１」の読み込み処理において、データの書き込み抜けが検出された場合を想定する。この場合、論理ブロック番号「Ｄ１」と同じパリティグループに属する他のデータブロックのデータが読み出される。すなわち論理ブロック番号「Ｄ５」、「Ｄ９」、「Ｄ１３」のデータブロックに対応する物理ブロックからデータ「ｄ５」、「ｄ９」、「ｄ１３」が読み出される。読み出されたデータは、図１６に示した処理対象データテーブル１３２ｃに追加登録される。その結果、ＲＡＩＤ制御部１３４によって図１８に示した処理対象データテーブル１３２ｃが生成される。このとき、論理ブロック番号「Ｄ１」のデータ「ｄ１」に付与されたタイムスタンプ「ｔ１１」は、パリティデータ「ｐ１」に付与されたタイムスタンプ「ｔ２１」より小さいことが分かっている。
【０１８４】
そこで、ＲＡＩＤ制御部１３４は、データ「ｄ５」、「ｄ９」、「ｄ１３」それぞれのタイムスタンプ「ｔ１２」、「ｔ１３」、「ｔ１４」と、パリティデータ「ｐ１」のタイムスタンプ「ｔ２２」、「ｔ２３」、「ｔ２４」とを比較する。すなわち、「ｔ１２」と「ｔ２２」とが比較され、「ｔ１３」と「ｔ２３」とが比較され、「ｔ１４」と「ｔ２４」とが比較される。比較の結果、以下の条件が成立するか否かが判断される。
（ｔ１２＝ｔ２２）ＡＮＤ（ｔ１３＝ｔ２３）ＡＮＤ（ｔ１４＝ｔ２４）
この条件が成立するとき、データ「ｄ５」、「ｄ９」、「ｄ１３」と、パリティデータ「ｐ１」とに書き込み抜けはないと判断される。
【０１８５】
論理ブロック番号「Ｄ１」のデータ「ｄ１」以外に書き込み抜けがない場合、ＲＡＩＤ制御部１３４は、論理ブロック番号「Ｄ１」のデータの修復を行う。修復されるデータを「ｄ１＿１」とすると、以下の計算が行われる。
「ｄ１＿１」＝「ｄ５」＾「ｄ９」＾「ｄ１３」＾「ｐ１」
ＲＡＩＤ制御部１３４は、修復したデータ「ｄ１＿１」に、パリティデータに付与されていたタイムスタンプ「ｔ２１」を付与する。そして、ＲＡＩＤ制御部１３４は、処理対象データテーブル１３２ｃ内の論理ブロック番号「Ｄ１」のデータとタイムスタンプとを更新する。
【０１８６】
図２１は、データ修復後の処理対象データテーブルを示す図である。図１８と比較すると、処理対象データテーブル１３２ｃの論理ブロック番号「Ｄ１」のデータが「ｄ１」から「ｄ１＿１」に変更されている。また、論理ブロック番号「Ｄ１」のタイムスタンプが「ｔ１１」から「ｔ２１」に変更されている。
【０１８７】
その後、ＲＡＩＤ制御部１３４は、タイムスタンプ「ｔ２１」が付与されたデータ「ｔ１＿１」の、ディスク番号「DISK＃1」のＨＤＤ２１０の物理ブロック番号「block#1」への書き込み指示を行う。これにより、ＨＤＤ２１０内のデータが更新される。
【０１８８】
なお、（ｔ１２＝ｔ２２）ＡＮＤ（ｔ１３＝ｔ２３）ＡＮＤ（ｔ１４＝ｔ２４）の条件が成立しない場合、タイムスタンプの小さい方のデータまたはパリティデータに書き込み抜けがある。データのタイムスタンプがパリティデータのタイムスタンプより小さい場合、データに書き込み抜けがあるが、多重故障にためデータの修復はできない。従ってデータのタイムスタンプがパリティより小さいデータを含む論理ブロックは、論理ブロック番号「Ｄ１」の論理ブロックを含めてすべてバッドブロックとして記録される。この場合、読み込み要求で指定された論理ブロック番号「Ｄ１」のデータを修復できないため、ホストコンピュータ１０へはエラー応答が送信される。
【０１８９】
修復ができない場合であっても読み込んだデータの排他的論理和演算によりパリティデータが生成される。新たなパリティデータを「ｐ１＿２」とすると以下の計算が行われる。
「ｐ１＿２」＝「ｄ１」＾「ｄ５」＾「ｄ９」＾「ｄ１３」
生成されたタイムスタンプ「ｐ１＿２」には、生成元となった各データのタイムスタンプが付与される。そして、ＲＡＩＤ制御部１３４は、処理対象データテーブル１３２ｃ内の論理ブロック番号「Ｐ１」のパリティデータとタイムスタンプとを更新する。
【０１９０】
図２２は、データを修復できないときの処理対象データテーブルを示す図である。図１８と比較すると、処理対象データテーブル１３２ｃの論理ブロック番号「Ｐ１」のパリティデータが「ｐ１」から「ｐ１＿２」に変更されている。また、論理ブロック番号「Ｐ１」のタイムスタンプは、「ｔ１１」、「ｔ１２」、「ｔ１３」、「ｔ１４」に変更されている。
【０１９１】
その後、ＲＡＩＤ制御部１３４は、タイムスタンプは「ｔ１１」、「ｔ１２」、「ｔ１３」、「ｔ１４」が付与されたパリティデータ「ｐ１＿２」の、ディスク番号「DISK＃5」のＨＤＤ２５０の物理ブロック番号「block#1」への書き込み指示を行う。これにより、ＨＤＤ２５０内のパリティデータが更新される。
【０１９２】
以上のように、ＲＡＩＤ５のＲＡＩＤ装置１００は、ブロック読み込み時にデータとパリティの物理ブロックを同時に読み込んでタイムスタンプを比較することで、書き込み抜きの検出と修正を行うことができる。
【０１９３】
次に、ストライプ単位読み込み処理について説明する。
図２３は、ストライプ読み込み処理の手順を示すフローチャートである。以下、図２３に示す処理をステップ番号に沿って説明する。この処理は、ストライプを指定した読み込み要求に応じて実行される。
【０１９４】
［ステップＳ１１１］ＲＡＩＤ制御部１３４は、指定されたストライプを構成するすべての論理ブロックそれぞれに対応する物理ブロック内のデータの読み込み指示を、ＨＤＤアクセス部１３５に対して出力する。すると、ＨＤＤアクセス部１３５により、すべてのデータおよびパリティデータがＨＤＤから読み出される。
【０１９５】
［ステップＳ１１２］ＲＡＩＤ制御部１３４は、すべてのデータとパリティデータとの読み込みが完了したか否かを判断する。すべてのデータおよびパリティデータの読み込みが完了していれば処理がステップＳ１１３に進められる。未読み込みのデータまたはパリティデータがあれば、ステップＳ１１２の処理が繰り返され、ＲＡＩＤ制御部１３４は読み込み待ちの状態となる。
【０１９６】
［ステップＳ１１３］タイムスタンプ比較部１３７は、パリティデータに付与された各タイムスタンプと、新たに読み出された各データに付与されたタイムスタンプとを比較する。各タイムスタンプの比較の結果、すべてのデータについて、パリティデータと同じ値のタイムスタンプが付与されていた場合、処理がステップＳ１１４に進められる。他方、パリティデータに付与されたタイムスタンプと異なるタイムスタンプが付与されたデータが少なくとも１つある場合、処理がステップＳ１１５に進められる。
【０１９７】
［ステップＳ１１４］ＲＡＩＤ制御部１３４は、ステップＳ１１１で読み込んだストライプのデータをホストコンピュータ１０に応答する。その後、処理が終了する。
［ステップＳ１１５］ＲＡＩＤ制御部１３４は、ストライプ修復および応答処理を行う。その後、処理が終了する。
【０１９８】
このようにして、ストライプ単位のデータ読み込みが行われる。例えば、論理ブロック番号「Ｄ１」から「Ｄ１６」までのデータブロック、およびそのデータブロックに対応するパリティブロックを含むストライプの読み込み要求が行われた場合を想定する。この場合、ストライプに含まれるすべての論理ブロックに対応する物理ブロックからデータおよびパリティデータが読み出される。ＲＡＩＤ制御部１３４は、ＲＡＭ１３２内に処理対象データテーブルを生成し、読み込んだデータを格納する。
【０１９９】
図２４は、ストライプ読み込み時の処理対象データテーブルの例を示す図である。図２４に示す処理対象データテーブル１３２ｄでは、ストライプ内のパリティグループを太線で囲んでいる。このように、ストライプを指定した読み込み要求が行われた場合、指定されたストライプに含まれるすべての論理ブロックに対応する物理ブロックからデータおよびパリティデータが読み出され、処理対象データテーブル１３２ｄに格納される。
【０２００】
ここで、タイムスタンプ比較部１３７により、処理対象データテーブル１３２ｄ内のすべてのデータブロックのタイムスタンプと、パリティブロック内のタイムスタンプとが比較される。すべての比較結果が一致した場合、該当するストライプの書き込み抜けはないと判断される。その場合、読み出されたすべてのデータが、ホストコンピュータ１０に送信される。
【０２０１】
他方、一致しないタイムスタンプがある場合は、ＲＡＩＤ制御部１３４によりストライプ修復および応答処理が開始される。
図２５は、ストライプ修復および応答処理の手順を示すフローチャートである。以下、図２５に示す処理をステップ番号に沿って説明する。
【０２０２】
［ステップＳ１２１］ＲＡＩＤ制御部１３４は、タイムスタンプ比較部１３７による比較結果が、すべてのデータにおいて、データに付与されたタイムスタンプがパリティデータに付与されたタイムスタンプ以上の値であるか否かを判断する。すべてのデータのタイムスタンプが、パリティデータのタイムスタンプ以上の値であれば、処理がステップＳ１２３に進められる。少なくとも１つのデータにおいて、パリティデータより小さな値のタイムスタンプが付与されていれば、処理がステップＳ１２２に進められる。
【０２０３】
［ステップＳ１２２］ＲＡＩＤ制御部１３４は、パリティデータより古いタイムスタンプが付与されたデータがある場合、そのデータの書き込み時に書き込み抜けが発生したものと判断する。そこで、ＲＡＩＤ制御部１３４は、データの修復および応答処理を行う。その後、処理が終了する。
【０２０４】
［ステップＳ１２３］ＲＡＩＤ制御部１３４は、すべてのデータにおいて、データに付与されたタイムスタンプがパリティデータに付与されたタイムスタンプ以上の値である場合、パリティデータの書き込み時に書き込み抜けが発生したものと判断する。その場合、データについては書き込み抜けは発生していないと判断し、ＲＡＩＤ制御部１３４は、読み込んだデータをホストコンピュータ１０に応答する。
【０２０５】
［ステップＳ１２４］ＲＡＩＤ制御部１３４は、タイムスタンプが不整合なままのパリティグループがあるか否かを判断する。すなわち、ＲＡＩＤ制御部１３４は、タイムスタンプの不一致が存在するパリティグループのうち、ステップＳ１２５〜Ｓ１２８の処理をまだ実行していないパリティグループがあるか否かを判断する。タイムスタンプが不整合のパリティグループがある場合、処理がステップＳ１２５に進められる。タイムスタンプが不整合のパリティグループがない場合、処理が終了する。
【０２０６】
［ステップＳ１２５］ＲＡＩＤ制御部１３４は、タイムスタンプが不整合なままのパリティグループを１つ選択する。
［ステップＳ１２６］ＲＡＩＤ制御部１３４は、読み出されているデータに基づいてパリティ計算を行い、パリティデータを生成する。具体的には、ＲＡＩＤ制御部１３４は、正常に読み出されたデータの排他的論理和演算を行い、演算結果をパリティデータとする。この際、ＲＡＩＤ制御部１３４は、生成したパリティデータに生成元となった各データのタイムスタンプと同じ値のタイムスタンプを付与する。
【０２０７】
［ステップＳ１２７］ＲＡＩＤ制御部１３４は、ＨＤＤアクセス部１３５に対してパリティブロックに対応する物理ブロックへのパリティデータの書き込みを指示する。すると、ＨＤＤアクセス部１３５によって指定された物理ブロックへのパリティデータの書き込みが行われる。
【０２０８】
［ステップＳ１２８］ＲＡＩＤ制御部１３４は、パリティデータの書き込みが完了したか否かを判断する。パリティデータの書き込みが完了した場合、処理がステップＳ１２４に進められる。パリティデータの書き込みが完了していなければ、ステップＳ１２８の処理が繰り返され、ＲＡＩＤ制御部１３４は書き込み完了待ち状態となる。
【０２０９】
このようにして、ストライプ修復および応答処理が行われる。例えば、図２４に示したストライプの各データに関し、論理ブロック番号「Ｄ１４」のデータブロックのデータ「ｄ１４」のタイムスタンプと、論理ブロック番号「Ｐ２」のパリティブロックのパリティデータ「ｐ２」のタイムスタンプとが不一致の場合を想定する。この例では、データ「ｄ１４」のタイムスタンプ「ｔ１８」と、パリティデータ「ｐ２」の「ＤＩＳＫ＃４」に対応するタイムスタンプ「ｔ２８」とが、「ｔ１８」＞「ｔ２８」という関係であるものとする。
【０２１０】
この場合、パリティデータに付与されたタイムスタンプの方が小さいため、パリティデータの書き込み時に書き込み抜けが発生したものと考えられる。そこで、ＲＡＩＤ制御部１３４は、パリティ計算を行い、パリティデータを生成する。生成されたパリティデータは処理対象データテーブル１３２ｄに格納される。
【０２１１】
図２６は、書き込み抜けが発生したパリティデータを生成後の処理対象データテーブルを示す図である。図２６に示すように、論理ブロック番号「Ｐ２」のパリティデータ「ｐ２」は、「ｐ２＿１」に更新されている。パリティデータ「ｐ２＿１」を式で表すと以下の通りである。
「ｐ２＿１」＝「ｄ２」＾「ｄ６」＾「ｄ１０」＾「ｄ１４」
生成されたパリティデータ「ｐ２＿１」には、同じパリティグループ内の各データのタイムスタンプ「ｔ１５」、「ｔ１６」、「ｔ１７」、「ｔ１８」が付与される。生成されたパリティデータ「ｐ２＿１」とタイムスタンプとは、処理対象データテーブル１３２ｄに記憶される。そして、タイムスタンプ付きのパリティデータ「ｐ２＿１」が、ディスク番号「ＤＩＳＫ＃５」のＨＤＤ２５０の物理ブロック番号「block#2」の物理ブロックに書き込まれる。
【０２１２】
次に、ストライプ中データ修復および応答処理について詳細に説明する。
図２７は、ストライプ中データ修復および応答処理の手順を示すフローチャートである。以下、図２７に示す処理をステップ番号に沿って説明する。
【０２１３】
［ステップＳ１３１］ＲＡＩＤ制御部１３４は、タイムスタンプが不整合なパリティグループがあるか否かを判断する。不整合なパリティグループがあれば、処理がステップＳ１３２に進められる。不整合なパリティグループがなければ処理がステップＳ１４２に進められる。
【０２１４】
［ステップＳ１３２］ＲＡＩＤ制御部１３４は、タイムスタンプが不整合なパリティグループを１つ選択する。
［ステップＳ１３３］ＲＡＩＤ制御部１３４は、タイムスタンプ比較部１３７による比較結果において、パリティデータのタイムスタンプより小さな値のタイムスタンプが付与されたデータが格納されたデータブロックがあるか否かを判断する。該当するデータブロックが少なくとも１つあれば処理がステップＳ１３４に進められる。該当するデータブロックがなければ処理がステップＳ１３９に進められる。
【０２１５】
［ステップＳ１３４］ＲＡＩＤ制御部１３４は、パリティデータのタイムスタンプより小さな値のタイムスタンプが付与されたデータが格納されたデータブロックが１つだけか否かを判断する。該当するデータブロックが１つだけであれば、処理がステップＳ１３５に進められる。該当するデータブロックが２つ以上あれば、処理がステップＳ１３８に進められる。
【０２１６】
［ステップＳ１３５］ＲＡＩＤ制御部１３４は、データを修復する。具体的には、ＲＡＩＤ制御部１３４は、パリティグループ内の他のデータおよびパリティデータの排他的論理和演算を行い、演算結果を修復後のデータとする。この際、ＲＡＩＤ制御部１３４は、生成したデータに、パリティデータのタイムスタンプ（該当データの書き込み先のＨＤＤに対応するタイムスタンプ）と同じ値のタイムスタンプを付与する。
【０２１７】
［ステップＳ１３６］ＲＡＩＤ制御部１３４は、ＨＤＤアクセス部１３５に対して、書き込み抜けがあったデータブロックに対応する物理ブロックへのデータの書き込みを指示する。すると、ＨＤＤアクセス部１３５によって指定された物理ブロックへのデータの書き込みが行われる。
【０２１８】
［ステップＳ１３７］ＲＡＩＤ制御部１３４は、データの書き込みが完了したか否かを判断する。データの書き込みが完了した場合、処理がステップＳ１３１に進められる。データの書き込みが完了していなければ、ステップＳ１３７の処理が繰り返され、ＲＡＩＤ制御部１３４は書き込み完了待ち状態となる。
【０２１９】
［ステップＳ１３８］ＲＡＩＤ制御部１３４は、ステップＳ１３４で該当データブロックが複数あると判断された場合、そのデータブロックをバッドブロックとして記録する。
［ステップＳ１３９］ＲＡＩＤ制御部１３４は、読み出されているデータに基づいてパリティ計算を行い、パリティデータを生成する。具体的には、ＲＡＩＤ制御部１３４は、読み込んだデータの排他的論理和演算を行い、演算結果をパリティデータとする。この際、ＲＡＩＤ制御部１３４は、生成したパリティデータに、各データのタイムスタンプと同じ値のタイムスタンプを付与する。
【０２２０】
［ステップＳ１４０］ＲＡＩＤ制御部１３４は、ＨＤＤアクセス部１３５に対してパリティブロックに対応する物理ブロックへのパリティデータの書き込みを指示する。すると、ＨＤＤアクセス部１３５によって指定された物理ブロックへのパリティデータの書き込みが行われる。
【０２２１】
［ステップＳ１４１］ＲＡＩＤ制御部１３４は、パリティデータの書き込みが完了したか否かを判断する。パリティデータの書き込みが完了した場合、処理がステップＳ１３１に進められる。パリティデータの書き込みが完了していなければ、ステップＳ１４１の処理が繰り返され、ＲＡＩＤ制御部１３４は書き込み完了待ち状態となる。
【０２２２】
［ステップＳ１４２］ＲＡＩＤ制御部１３４は、ステップＳ１３１の判断においてタイムスタンプが不整合なパリティグループがないと判断された場合、バッドブロックとして記録された論理ブロックがあるか否かを判断する。バッドブロックがあれば、処理がステップＳ１４３に進められる。バッドブロックがなければ、処理がステップＳ１４４に進められる。
【０２２３】
［ステップＳ１４３］ＲＡＩＤ制御部１３４は、ホストコンピュータ１０に対してエラー応答を行う。その後、処理が終了する。
［ステップＳ１４４］ＲＡＩＤ制御部１３４は、正常応答として、ホストコンピュータ１０に対して修復されたデータを含むストライプのデータを送信する。その後、処理が終了する。
【０２２４】
このようにして、ストライプ中のデータ修復および応答処理が行われる。例えば、論理ブロック番号「Ｄ１４」のデータブロックで書き込み抜けが発生した場合を想定する。
図２８は、データ修復時の処理対象データテーブルの例を示す図である。この場合、論理ブロック番号「Ｄ１４」のデータブロックのデータ「ｄ１４」に付与されていたタイムスタンプ「ｔ１８」と、論理ブロック番号「Ｐ２」のパリティブロックのパリティデータに付与されていたタイムスタンプ「ｔ２８」とが不整合となる。すなわち、比較の結果、「ｔ１８」＜「ｔ２８」であることが判明する。
【０２２５】
すると、ＲＡＩＤ制御部１３４によって、タイムスタンプに不整合のあるパリティグループとして、論理ブロック番号「Ｄ２」、「Ｄ６」、「Ｄ１０」、「Ｄ１４」、「Ｐ２」を有するパリティグループが選択される。ここで、パリティデータよりも小さい値のタイムスタンプが付与されたデータが１つだけであれば、そのデータの書き込み抜けが発生したものと判断される。書き込み抜けが発生したデータが１つだけであれば、そのデータの修復が可能である。そこで、該当データの修復処理が行われる。
【０２２６】
図２８に示すように、書き込み抜けが発生したデータが１つだけであれば、該当データが修復される。修復されたデータを「ｄ１４＿１」とすると、以下の計算が実行される。
「ｄ１４＿１」＝「ｄ２」＾「ｄ６」＾「ｄ１０」＾「ｐ２」
修復されたデータ「ｄ１４＿１」には、パリティデータに付与されていたタイムスタンプ「ｔ２８」が付与される。さらに、修復されたデータが処理対象データテーブル１３２ｄに格納される。そして、タイムスタンプ付きのデータ「ｄ１４＿１」が、ディスク番号「ＤＩＳＫ＃４」のＨＤＤ２４０の物理ブロック番号「block#2」の物理ブロックに書き込まれる。
【０２２７】
このように、データが修復できた場合には、修復されたデータを含むストライプがホストコンピュータ１０に応答される。
なお、書き込み抜けが２個以上のデータで発生した場合、ＲＡＩＤ５ではデータの修復ができない。この場合、ＲＡＩＤ制御部１３４は、書き込み抜けが発生したデータの論理ブロックをバッドブロックとする。そして、読み出されたデータとパリティデータとの不整合を是正するため、パリティデータが再計算される。
【０２２８】
図２９は、２つ以上のデータで書き込み抜けがあった場合の処理対象データテーブルの例を示す図である。図２９の例では、論理ブロック番号「Ｄ６」、「Ｄ１４」の２つのデータブロックのデータの書き込み時に書き込み抜けが発生したものとする。この場合、論理ブロック番号「Ｄ６」のデータブロックのデータ「ｄ６」と、論理ブロック番号「Ｄ１４」のデータブロックのデータ「ｄ１４」のタイムスタンプについて不整合が検出される。すなわち、比較の結果、「ｔ１６」＜「ｔ２６」であり、かつ「ｔ１８」＜「ｔ２８」であることが判明する。
【０２２９】
このように２つのデータで書き込み抜けがある場合、該当データに対応する論理ブロックがバッドブロックとして記憶される。そして、読み出されているデータに基づいてパリティデータが計算され、新たなパリティデータが生成される。生成されたパリティデータを「ｐ２＿２」とすると、以下の計算が実行される。
「ｄ２＿２」＝「ｄ２」＾「ｄ６」＾「ｄ１０」＾「ｐ１４」
生成されたパリティデータ「ｐ２＿１」には、同じパリティグループ内の各データのタイムスタンプ「ｔ１５」、「ｔ１６」、「ｔ１７」、「ｔ１８」が付与される。生成されたパリティデータ「ｐ２＿２」とタイムスタンプとは、処理対象データテーブル１３２ｄに記憶される。そして、タイムスタンプ付きのパリティデータ「ｐ２＿２」が、ディスク番号「ＤＩＳＫ＃５」のＨＤＤ２５０の物理ブロック番号「block#2」の物理ブロックに書き込まれる。
【０２３０】
このように、データが修復できずストライプ内にバッドブロックが発生した場合、ホストコンピュータ１０にエラー応答が返される。
以上のように第１の実施の形態では、ＲＡＩＤ５によるストライプ読み込み時に、データとパリティの物理ブロックを同時に読み込んでタイムスタンプを比較することで、書き込み抜きの検出と修正を行うことができる。すなわち、データの書き込み処理が正常終了したにも拘わらずデータが書き込まれていないという異常を、書き込み直後の読み込み処理を行うことなく検出可能となる。これにより、データの書き込み時に書き込み抜けの有無をチェックする必要がなくなり、データの書き込み処理の効率化が図れる。
【０２３１】
しかも、読み込み要求が出されたときに書き込み抜けを検出した場合、パリティデータなどを用いてデータを修復することができる。従って、高い信頼性を維持することができる。
【０２３２】
なお、ストライプ単位でデータの読み込みが行われる場合、書き込み抜けを検出した際のデータの修復を迅速に行うことができる。すなわち、データの修復には、同じパリティグループ内の他のデータとパリティデータとが用いられる。ストライプ単位での読み込みであれば、データの書き込み抜けを検出した時点で、修復に必要なデータおよびパリティデータも処理対象データテーブルに格納されている。そのため、迅速にデータの修復を行いホストコンピュータ１０にストライプの全データを応答することができる。
【０２３３】
また、データやパリティデータを修復した場合には、修復後のデータまたはパリティデータが、ＨＤＤに書き戻される。これにより、書き込み抜けによって発生していたパリティグループ内での不整合を、読み込み要求時に修正することができる。すなわち、データの読み込み要求の処理と、書き込み抜けのチェックおよび修復が同時に行われ、データ異常の修復を効率よく行うことができる。
【０２３４】
［第２の実施の形態］
次に第２の実施の形態について説明する。第２の実施の形態は、第１の実施の形態におけるタイムスタンプに代えて、カウンタ値を用いたものである。
【０２３５】
第２の実施の形態におけるシステムを構成する要素は、図２に示した第１の実施の形態と同じである。ただし、コントローラ１３０の機能とＨＤＤ２１０，２２０，２３０，２４０，２５０のデータフォーマットとが異なる。すなわち、ＨＤＤのデータフォーマットにおいて、第１の実施の形態ではタイムスタンプ領域２１１ｂとされていた記憶領域（図３参照）が、第２の実施の形態では複数のカウンタ値（カウンタ値群）を格納するカウンタ領域となる。ただし、第２の実施の形態では、１つのカウンタ値を２ビットで表すものとする。そのため、カウンタ領域は、第１の実施の形態におけるタイムスタンプ領域２１１ｂよりも記憶容量が少なくて済む。
【０２３６】
図３０は、第２の実施の形態におけるＨＤＤ内のカウンタ値格納例を示す図である。ＨＤＤ３１ａ内のｘ個の物理ブロックには、それぞれ物理ブロック番号（block#に続く数字）が設定されている。そして、各物理ブロックは、データとカウンタ値群との記憶領域を有している。カウンタ値群の記憶領域には、ＨＤＤの台数分のタイムスタンプを格納できる。カウンタ値群の記憶領域は、ＨＤＤのディスク番号に対応付けられたカウンタ値領域に分けられている。各カウンタ値領域はそれぞれ、ＲＡＩＤ５に含まれる各ＨＤＤに対応付けられている。図４の例では、物理ブロック番号「ｉ」におけるディスク番号「ｊ」に対応するカウンタ値をｃ（ｉ，ｊ）と表している。このようなカウンタ値格納領域が、ＲＡＩＤ５に含まれる各ＨＤＤ内に設けられる。
【０２３７】
次に、第２の実施の形態におけるコントローラの機能について説明する。
図３１は、第２の実施の形態のコントローラの機能を示す図である。コントローラ１３０ａは、データ入出力部１３３ａ、ＲＡＩＤ制御部１３４ａ，ＨＤＤアクセス部１３５ａ、カウンタ１３６ａ、およびカウンタ値比較部１３７ａを有している。ここで、データ入出力部１３３ａとＨＤＤアクセス部１３５ａとの機能は、図９に示した第１の実施の形態における同名の要素の機能と同様である。
【０２３８】
ＲＡＩＤ制御部１３４ａは、アクセス要求に応じて、ＲＡＩＤ技術を用いたＨＤＤ２１０ａ，２２０ａ，２３０ａ，２４０ａ，２５０ａへのアクセス制御を行う。本実施の形態では、ＲＡＩＤ制御部１３４ａは、ＲＡＩＤ５のアクセス制御を行うものとする。ＲＡＩＤ制御部１３４ａは、ＲＡＩＤ５のアクセス制御を行うために、図８に示したような論理ブロックと物理ブロックとの対応関係を管理している。そして、ＲＡＩＤ制御部１３４ａは、アクセス要求で指定された論理ブロックに対応する物理ブロック、およびその物理ブロックを有するＨＤＤを特定し、アクセス要求に応じたアクセス指示をＨＤＤアクセス部１３５ａに対して出力する。
【０２３９】
なお、ＲＡＩＤ制御部１３４ａは、新たに論理ディスクを生成する場合、その論理ディスクの論理ブロックに対応付けられる物理ブロックのカウンタ値記憶領域内のカウンタ値を「０」に初期化する。
【０２４０】
また、ＲＡＩＤ制御部１３４ａは、アクセス要求が書き込み要求の場合、カウンタ１３６ａからカウンタ値を取得する。具体的には、ＲＡＩＤ制御部１３４ａは、書き込み要求があると、書き込み対象のデータブロックに対応する物理ブロック内のデータと、そのデータブロックと同じパリティグループ内のパリティブロックに対応する物理ブロック内のパリティデータとを読み出す。そしてＲＡＩＤ制御部１３４ａは、読み込んだデータに付与されていたカウンタ値をカウンタ１３６ａに渡す。すると、カウンタ１３６ａから更新されたカウンタ値が返される。ＲＡＩＤ制御部１３４ａは、取得したカウンタ値を書き込み対象のデータと、対応するパリティデータとに付与する。
【０２４１】
また、ＲＡＩＤ制御部１３４ａは、アクセス要求が読み込み要求の場合、読み込んだデータおよびそのデータが属するパリティグループのパリティデータそれぞれに付与されたカウンタ値群から、読み込んだデータに対応するカウンタ値を抽出する。そして、ＲＡＩＤ制御部１３４ａは、抽出した２つのカウンタ値をカウンタ値比較部１３７ａに渡す。ＲＡＩＤ制御部１３４ａは、カウンタ値比較部１３７ａからカウンタ値の比較結果を受け取り、その比較結果に基づいて書き込み抜けの有無を判定する。ＲＡＩＤ制御部１３４ａは、書き込み抜けがなければ、読み込んだデータを読み込み要求への応答としてデータ入出力部１３３ａに渡す。
【０２４２】
なお、ＲＡＩＤ制御部１３４ａは、書き込み抜けがあると判定した場合、データの復旧処理を行う。そして、ＲＡＩＤ制御部１３４ａは、復旧したデータを読み込み要求への応答としてデータ入出力部１３３ａに渡す。
【０２４３】
カウンタ１３６ａは、ＲＡＩＤ制御部１３４ａからの要求に応じてカウンタ値を生成する。具体的には、カウンタ１３６ａは、ＲＡＩＤ制御部１３４ａから現在のカウンタ値を受け取ると、そのカウンタ値をカウントアップする。カウンタ値は２ビットで表されるため、「０」から「３」までのカウンタアップが行われる。現在のカウンタ値が「３」であれば、カウントアップによりカウンタ値は「０」に変更される。
【０２４４】
カウンタ値比較部１３７ａは、ＲＡＩＤ制御部１３４ａからの要求に応じてカウンタ値を比較する。カウンタ値の比較により、カウンタ値が同じか、いずれか一方のカウンタ値が「１」だけ進んでいるか、カウンタ値のずれが「２」であるかの比較結果が得られる。カウンタ値比較部１３７ａは、比較結果をＲＡＩＤ制御部１３４ａに渡す。
【０２４５】
ＲＡＩＤ制御部１３４ａは、カウンタ値比較部１３７ａからの比較結果に基づいて、書き込み抜けの有無を判定することができる。
図３２は、カウンタ値比較結果に基づく書き込み抜け判定基準を示す図である。図３２では、物理ブロック「Ｕ」から読み出されたデータのカウンタ値を「ｕ」としている。また、物理ブロック「Ｖ」から読み出されたパリティデータに付与された複数のカウンタ値のうち、物理ブロック「Ｕ」を有するＨＤＤに対応するカウンタ値を「ｖ」としている。
【０２４６】
カウンタ値「ｕ」とカウンタ値「ｖ」の値が同じであれば、書き込み抜けがないと判定される。カウンタ値「ｕ」の値よりもカウンタ値「ｖ」の値が「１」だけ進んでいれば、物理ブロック「Ｕ」に書き込み抜けがあると判定される。カウンタ値「ｖ」の値よりもカウンタ値「ｕ」の値が「１」だけ進んでいれば、物理ブロック「Ｖ」に書き込み抜けがあると判定される。すなわち、カウンタ値が「１」だけ遅れている方の物理ブロックに書き込み抜けが発生していると判定される。
【０２４７】
カウンタ値「ｕ」とカウンタ値「ｖ」との差が「２」の場合、どちらのカウンタ値が進んでいるのかが不明となる。その場合、書き込み抜けの判定は不能となる。判定不能となった場合は、ＲＡＩＤ制御部１３４ａは、論理ブロック「Ｕ」内のデータを損失したとして、バッドブロックとして登録する。次にＲＡＩＤ制御部１３４ａは、パリティグループのパリティデータを再度計算し、パリティデータのカウンタ値「ｖ」をデータのカウンタ値「ｕ」にセットする。そしてＲＡＩＤ制御部１３４ａは、データブロックに対応する物理ブロック「Ｕ」のカウンタ値を更新すると共に、パリティブロックに対応する物理ブロック「Ｖ」のパリティデータを更新する。
【０２４８】
なお、ＲＡＩＤ制御部１３４ａは、ストライプ書き込みを行う場合、すべてのデータおよびパリティデータのカウンタ値を更新する。具体的には、ＲＡＩＤ制御部１３４ａは、ストライプ書き込み要求があると、ストライプに含まれるすべての論理ブロックに対応する物理ブロックから、データおよびパリティデータを読み出す。さらにＲＡＩＤ制御部１３４ａは、すべてのデータのカウンタ値をカウンタ１３６ａに渡して更新させる。その後、ＲＡＩＤ制御部１３４ａは、書き込み対象のデータ、およびパリティデータに更新後のカウンタ値を付与して、ＨＤＤアクセス部１３５ａに対して物理ブロックへの書き込み指示を行う。
【０２４９】
このようにして、カウンタ値を用いて書き込み抜けの検出が可能である。カウンタ値記憶領域はタイムスタンプ記憶領域よりも少ない記憶容量で済むため、カウンタ値を用いることで、ＨＤＤ内の記憶領域の利用効率を高めることができる。
【０２５０】
なお、第２の実施の形態では、カウンタ値を２ビットで表している。この場合、カウンタ値「３」をカウントアップさせた場合、カウンタ値が「０」となる。このようにすることで、少ないビット数のカウンタ値を用いて、時系列上の前後関係が表現可能となる。例えば、カウンタ値「３」が付与されたデータより、カウンタ値「０」が付与されたパリティデータの方が遅い時刻に書き込まれたと判断することができる。その結果、カウンタ値「３」が付与されたデータについては、書き込み抜けが発生していると判断できる。
【０２５１】
［第３の実施の形態］
第３の実施の形態は、タイムスタンプとカウンタ値とを併用して書き込み抜けを検出するものである。
【０２５２】
第２の実施の形態に示したように、カウンタ値を用いた場合、カウンタ値のカウントアップをするために、ストライプ書き込みのときに事前読み込みを行うこととなる。そこで、ストライプ書き込み時の事前読み込みを行わずに済ませるため、タイムスタンプとカウンタを併用する。具体的には、各データおよびパリティデータにタイムスタンプが１つだけ付与される。また、データとパリティデータとには、ＲＡＩＤ５のＨＤＤ数分のカウンタ値が設定されると共に、各カウンタ値に対して、タイムスタンプとカウンタ値とのどちらを使用しているか判別するためのフラグが設定される。
【０２５３】
第３の実施の形態では、データとパリティデータとのそれぞれに付与されたタイムスタンプ、フラグ、およびカウンタ値を比較することで、書き込み抜けの有無が判断される。そこで、以下、タイムスタンプ、フラグ、およびカウンタ値をまとめて、比較対象情報と呼ぶこととする。
【０２５４】
タイムスタンプとカウンタ値とを記憶するため、ＨＤＤ内には、第１の実施の形態におけるタイムスタンプ記憶領域に代えて、比較対象情報記憶領域が物理ブロックごとに設けられる。比較対象情報記憶領域には、１つのタイムスタンプ、複数のカウンタ値、および複数のフラグが格納される。ＲＡＩＤ装置が物理ブロック内のデータまたはパリティデータを読み込む際には、比較対象情報記憶領域内の情報も同時に読み込まれる。
【０２５５】
図３３は、第３の実施の形態における処理対象データテーブルのデータ構造例を示す図である。ＲＡＩＤ装置は、１ストライプ分のデータの読み込みを行うと、ＲＡＭ内に図３３に示すようなデータ構造の処理対象データテーブル１３２ｅを生成する。
【０２５６】
処理対象データテーブル１３２ｅは、論理ブロック、ディスク番号、物理ブロック、データ、タイムスタンプ、複数のフラグ、および複数のカウンタ値の欄が設けられている。
論理ブロックの欄には、ストライプに含まれる論理ブロックの論理ブロック番号が設定される。ディスク番号の欄には、論理ブロックに対応する物理ブロックを有するＨＤＤのディスク番号が設定される。物理ブロックの欄には、論理ブロックに対応する物理ブロックの物理ブロック番号が設定される。データの欄には、物理ブロックから読み込まれたデータまたはパリティデータが設定される。
【０２５７】
タイムスタンプの欄には、データの書き込み時刻を示すタイムスタンプが設定される。なお、パリティデータのタイムスタンプは、ストライプ書き込みを行ったときに更新される。
【０２５８】
フラグの欄には、書き込み抜けの検査においてタイムスタンプを比較するのかカウンタ値を比較するのかを示すフラグが設定される。具体的には、比較対象のデータに付与されたフラグと、比較対象のパリティデータに付与されたフラグのうち比較対象のデータに対応するフラグとによって、書き込み抜けの比較対象が判断される。データのフラグとパリティデータのフラグが共に「０」であれば、カウンタ値が比較される。データのフラグとパリティデータのフラグが共に「１」であれば、タイムスタンプが比較される。データのフラグが「０」であり、パリティデータのフラグが「１」であれば、タイムスタンプが比較される。データのフラグが「１」であり、パリティデータのフラグが「０」であれば、カウンタ値が比較される。
【０２５９】
図３４は、第３の実施の形態のコントローラの機能を示す図である。コントローラ１３０ｂは、データ入出力部１３３ｂ、ＲＡＩＤ制御部１３４ｂ、ＨＤＤアクセス部１３５ｂ、タイムスタンプ生成部１３６ｂ、タイムスタンプ比較部１３７ｂ、カウンタ１３８ｂ、およびカウンタ値比較部１３９ｂを有している。ここで、データ入出力部１３３ｂ、ＨＤＤアクセス部１３５ｂ、タイムスタンプ生成部１３６ｂ、タイムスタンプ比較部１３７ｂの機能は、図９に示した第１の実施の形態における同名の要素の機能と同様である。また、カウンタ１３８ｂとカウンタ値比較部１３９ｂとの機能は、図３１に示した第２の実施の形態における同名の要素の機能と同様である。
【０２６０】
ＲＡＩＤ制御部１３４ｂは、アクセス要求に応じて、ＲＡＩＤ技術を用いたＨＤＤ２１０ｂ，２２０ｂ，２３０ｂ，２４０ｂ，２５０ｂへのアクセス制御を行う。本実施の形態では、ＲＡＩＤ制御部１３４ｂは、ＲＡＩＤ５のアクセス制御を行うものとする。ＲＡＩＤ制御部１３４ｂは、ＲＡＩＤ５のアクセス制御を行うために、図８に示したような論理ブロックと物理ブロックとの対応関係を管理している。そして、ＲＡＩＤ制御部１３４ｂは、アクセス要求で指定された論理ブロックに対応する物理ブロック、およびその物理ブロックを有するＨＤＤを特定し、アクセス要求に応じたアクセス指示をＨＤＤアクセス部１３５ｂに対して出力する。
【０２６１】
なお、ＲＡＩＤ制御部１３４ｂは、新たに論理ディスクを生成する場合、その論理ディスクの論理ブロックに対応付けられる物理ブロックの比較対象情報記憶領域内の初期化を行う。初期化処理では、すべてのフラグを「０」に設定され、すべてのカウンタ値が「０」に設定され、すべてのタイムスタンプが「０」に設定される。ＲＡＩＤ制御部１３４ｂは、全ＨＤＤ２１０ｂ，２２０ｂ，２３０ｂ，２４０ｂ，２５０ｂ内の比較対象情報記憶領域の初期化後に、その領域の読み込みを行い確実に書き込んでいることを保証する。
【０２６２】
ＲＡＩＤ制御部１３４ｂは、アクセス要求が書き込み要求の場合、カウンタ１３８ｂから比較対象情報を取得する。具体的には、ＲＡＩＤ制御部１３４ｂは、書き込み要求があると、書き込み対象のデータブロックに対応する物理ブロック内のデータを比較対象情報と共に読み出す。また、ＲＡＩＤ制御部１３４ｂは、読み出し対象のデータブロックと同じパリティグループ内のパリティブロックに対応する物理ブロック内のパリティデータを、比較対象情報と共に読み出す。そしてＲＡＩＤ制御部１３４ｂは、読み込んだデータに付与されていた比較対象情報内のカウンタ値をカウンタ１３８ｂに渡す。すると、カウンタ１３８ｂから更新されたカウンタ値が返される。ＲＡＩＤ制御部１３４ｂは、取得したカウンタ値のフラグを「０」にして、フラグとカウンタ値とを、書き込み対象のデータと対応するパリティデータとに付与する。さらに、ＲＡＩＤ制御部１３４ｂは、アクセス要求が書き込み要求の場合、タイムスタンプ生成部１３６ｂからタイムスタンプを取得する。そして、取得したタイムスタンプを書き込み対象のデータに付与する。この際、パリティデータのタイムスタンプは更新されない。
【０２６３】
また、ＲＡＩＤ制御部１３４ｂは、アクセス要求が読み込み要求の場合、読み込んだデータおよびそのデータが属するパリティグループのパリティデータそれぞれに付与された比較対象情報からフラグを抽出する。ＲＡＩＤ制御部１３４ｂは、読み込んだデータとパリティデータとのフラグに基づいて、書き込み抜けの検査に用いる情報を判定する。そして、ＲＡＩＤ制御部１３４ｂは、タイムスタンプまたはカウンタ値のいずれか一方を用いて、書き込み抜けの有無を判定を行う。ＲＡＩＤ制御部１３４ｂは、書き込み抜けがなければ、読み込んだデータを読み込み要求への応答としてデータ入出力部１３３ｂに渡す。
【０２６４】
なお、ＲＡＩＤ制御部１３４ｂは、書き込み抜けがあると判定した場合、データの復旧処理を行う。そして、ＲＡＩＤ制御部１３４ｂは、復旧したデータを読み込み要求への応答としてデータ入出力部１３３ｂに渡す。
【０２６５】
以下、ホストコンピュータ１０からの書き込み要求および読み出し要求に応じたコントローラ１３０ｂの処理を詳細に説明する。なお、第３の実施の形態においても、ブロック単位のアクセスとストライプ単位のアクセスとが可能であるものとする。そこで、ブロック単位のアクセスとストライプ単位のアクセスとのそれぞれについて、書き込み要求および読み出し要求時の処理を説明する。
【０２６６】
図３５は、第３の実施の形態におけるブロック書き込み処理手順を示すフローチャートである。以下、図３５に示す処理をステップ番号に沿って説明する。この処理は、ホストコンピュータ１０からブロック単位でのデータの書き込み要求が入力されたときに実行される。
【０２６７】
［ステップＳ１５１］ＲＡＩＤ制御部１３４ｂは、書き込み要求に対応するデータの読み込み指示を、ＨＤＤアクセス部１３５ｂに対して出力する。すると、ＨＤＤアクセス部１３５ｂによって、指定された物理ブロック内のデータの読み込みが行われる。
【０２６８】
［ステップＳ１５２］ＲＡＩＤ制御部１３４ｂは、書き込み要求に対応するパリティデータの読み込み指示を、ＨＤＤアクセス部１３５ｂに対して出力する。すると、ＨＤＤアクセス部１３５ｂによって、指定された物理ブロック内のパリティデータの読み込みが行われる。
【０２６９】
［ステップＳ１５３］ＲＡＩＤ制御部１３４ｂは、データの読み込みが完了したか否かを判断する。データ読み込みが完了した場合、処理がステップＳ１５４に進められる。データ読み込みが完了していなければステップＳ１５３の処理が繰り返され、ＲＡＩＤ制御部１３４ｂは読み込み待ち状態となる。
【０２７０】
［ステップＳ１５４］ＲＡＩＤ制御部１３４ｂは、パリティデータの読み込みが完了したか否かを判断する。パリティデータ読み込みが完了した場合、処理がステップＳ１５５に進められる。パリティデータ読み込みが完了していなければステップＳ１５４の処理が繰り返され、ＲＡＩＤ制御部１３４ｂは読み込み待ち状態となる。
【０２７１】
ＲＡＩＤ制御部１３４ｂは、ステップＳ１５３，Ｓ１５４におけるデータとパリティデータとの読み込みが完了すると、ＲＡＭ内に処理対象データテーブルを作成し、読み込んだデータをその処理対象データテーブルに格納する。
【０２７２】
［ステップＳ１５５］ＲＡＩＤ制御部１３４ｂは、パリティデータを計算する。
［ステップＳ１５６］ＲＡＩＤ制御部１３４ｂは、データのカウンタ値をカウントアップする。具体的には、ＲＡＩＤ制御部１３４ｂは、ステップＳ１５１で取得したデータに付与された比較対象情報からカウンタ値を抽出し、そのカウンタ値をカウンタ１３８ｂに渡す。すると、カウンタ１３８ｂがカウンタ値に１を加算する。なお、カウンタ値は、第２の実施の形態と同様に２ビットで表されている。読み出したデータのカウンタ値が「３」の場合、カウントアップによりカウンタ値が「０」に更新される。カウンタ１３８ｂは、カウントアップしたカウンタ値をＲＡＩＤ制御部１３４ｂに返す。ＲＡＩＤ制御部１３４ｂは、取得したカウンタ値のフラグに「０」を設定する。
【０２７３】
［ステップＳ１５７］ＲＡＩＤ制御部１３４ｂは、パリティデータのカウンタ値をカウントアップする。具体的には、ＲＡＩＤ制御部１３４ｂは、ステップＳ１５２で取得したパリティデータに付与された比較対象情報から、ステップＳ１５１で読み出したデータに対応するカウンタ値を抽出し、そのカウンタ値をカウンタ１３８ｂに渡す。すると、カウンタ１３８ｂによってカウンタ値がカウントアップされ、結果がＲＡＩＤ制御部１３４ｂに返される。ＲＡＩＤ制御部１３４ｂは、取得したカウンタ値のフラグに「０」を設定する。
【０２７４】
［ステップＳ１５８］タイムスタンプ生成部１３６ｂは、タイムスタンプを取得する。具体的には、ＲＡＩＤ制御部１３４ｂからタイムスタンプ生成部１３６ｂへ、タイムスタンプの生成要求が出される。その生成要求に応じて、タイムスタンプ生成部１３６ｂがタイムスタンプを生成する。生成されたタイムスタンプは、タイムスタンプ生成部１３６ｂからＲＡＩＤ制御部１３４ｂに渡される。
【０２７５】
［ステップＳ１５９］ＲＡＩＤ制御部１３４ｂは、データブロックの書き込み指示をＨＤＤアクセス部１３５ｂに対して出力する。具体的には、ＲＡＩＤ制御部１３４ｂは、書き込み要求で指定された更新データに比較対象情報を付与する。付与される比較対象情報には、ステップＳ１５６で更新されたカウンタ値と、ステップＳ１５８で取得されたタイムスタンプとが含まれている。そして、ＲＡＩＤ制御部１３４ｂは、更新データが属するデータブロックに対応する物理ブロックのディスク番号と物理ブロック番号とを指定して、タイムスタンプ付きの更新データの書き込み指示をＨＤＤアクセス部１３５ｂに対して出力する。すると、ＨＤＤアクセス部１３５ｂによって、ディスク番号に対応するＨＤＤに対して、タイムスタンプ付きの更新データの書き込みが行われる。
【０２７６】
［ステップＳ１６０］ＲＡＩＤ制御部１３４ｂは、パリティデータの書き込み指示をＨＤＤアクセス部１３５ｂに対して出力する。具体的には、ＲＡＩＤ制御部１３４ｂは、パリティブロックに対応する物理ブロックのディスク番号と物理ブロック番号とを指定して、比較対象情報付きのパリティデータの書き込み指示をＨＤＤアクセス部１３５ｂに対して出力する。このこき付与される比較対象情報は、パリティデータ読み込み時の比較対象情報に対してカウンタ値のカウントアップを行ったものである。ＨＤＤアクセス部１３５ｂは、パリティデータの書き込み指示に応じて、指定されたディスク番号に対応するＨＤＤに対して、タイムスタンプ付きのパリティデータの書き込みを行う。
【０２７７】
［ステップＳ１６１］ＲＡＩＤ制御部１３４ｂは、データの書き込みが完了したか否かを判断する。データ書き込みが完了した場合、処理がステップＳ１６２に進められる。データ書き込みが未完了であれば、ステップＳ１６１の処理が繰り返され、ＲＡＩＤ制御部１３４ｂはデータ書き込み完了待ち状態となる。
【０２７８】
［ステップＳ１６２］ＲＡＩＤ制御部１３４ｂは、パリティデータの書き込みが完了したか否かを判断する。パリティデータ書き込みが完了した場合、処理が終了する。パリティデータ書き込みが未完了であれば、ステップＳ１６２の処理が繰り返され、ＲＡＩＤ制御部１３４ｂはパリティデータ書き込み完了待ち状態となる。
【０２７９】
このようにして、ブロック単位でのデータの書き込みが行われる。例えば、図３３に示したストライプ内の論理ブロック番号「Ｄ１」のデータブロックへの書き込み要求があった場合を想定する。この場合、論理ブロック番号「Ｄ１」のデータブロックに対応する物理ブロックとからデータが読み込まれ、論理ブロック番号「Ｐ１」のパリティブロックに対応する物理ブロックからパリティデータが読み込まれる。読み込まれたデータとパリティデータとは、処理対象データテーブルに格納される。
【０２８０】
図３６は、書き込み要求時の処理対象データテーブルの例を示す図である。データとパリティデータとの読み込みが行われると、ＲＡＭ内に図３６に示すような処理対象データテーブル１３２ｆが生成される。処理対象データテーブル１３２ｆ内の情報は、書き込み要求に応じて更新される。
【０２８１】
図３７は、更新後の処理対象データテーブルの例を示す図である。図３７に示すように、処理対象データテーブル１３２ｆにおいて、論理ブロック番号「Ｄ１」のデータブロック内のデータ「ｄ１」は、書き込み要求で指定されたデータ「ｄ１＿１」に更新される。また、データ「ｄ１＿１」に基づいて新たなパリティデータ「ｐ１＿１」が算出される。パリティデータ「ｐ１＿１」は、更新前のデータ「ｄ１」、更新前のパリティデータ「ｐ１」、および書き込み対象のデータ「ｐ１＿１」の排他的論理和で計算される。
【０２８２】
また、データ「ｄ１」に付与されていたカウンタ値「ｃ１」はカウントアップされる。カウントアップ後のカウンタ値を「ｃ１＿１」とする。カウンタ値「ｃ１＿１」は、「ｃ１＋１」であるが、「ｃ１」が「３」の場合にはカウンタ値「ｃ１＿１」は「０」となる。
【０２８３】
パリティデータ「ｐ１」に付与されていた複数のカウンタ値のうち、データ「ｄ１」が格納されていたＨＤＤに対応する「ｃ１１」もカウントアップされる。カウントアップ後のカウンタ値を「ｃ１１＿１」とする。カウンタ値「ｃ１１＿１」は、「ｃ１１＋１」であるが、「ｃ１１」が「３」の場合にはカウンタ値「ｃ１１＿１」は「０」となる。
【０２８４】
さらに、更新されたカウンタ値「ｃ１＿１」、「Ｃ１１＿１」それぞれに対応するフラグには、共に「０」が設定される。ここで、両方のフラグを「０」に設定することは、書き込み抜け検査時の比較対象がカウンタ値であることを意味している。すなわち、データとパリティデータとの書き込みが正しく（書き込み抜けが発生せずに）実行された場合、読み込み時に両方のフラグが「０」であることから、カウンタ値が比較対象であると判断される。
【０２８５】
このような処理対象データテーブル１３２ｆ内のデータとパリティデータとが、対応する物理ブロックに書き込まれる。
次に、スライス単位の書き込み要求の処理について説明する。
【０２８６】
図３８は、第３の実施の形態におけるスライス書き込み処理の手順を示すフローチャートである。以下、図３８に示す処理をステップ番号に沿って説明する。この処理は、ホストコンピュータ１０からストライプ単位でのデータの書き込み要求が入力されたときに実行される。
【０２８７】
［ステップＳ１７１］ＲＡＩＤ制御部１３４ｂは、パリティグループごとのパリティデータを計算する。そして、ＲＡＩＤ制御部１３４ｂは、生成されたパリティデータを有する論理ブロックを、パリティデータの生成元となったデータブロックと同じパリティグループのパリティブロックとする。
【０２８８】
［ステップＳ１７２］ＲＡＩＤ制御部１３４ｂは、タイムスタンプ生成部１３６ｂからタイムスタンプを取得する。
［ステップＳ１７３］ＲＡＩＤ制御部１３４ｂは、ストライプのすべてのフラグを「１」に設定する。
【０２８９】
［ステップＳ１７４］ＲＡＩＤ制御部１３４ｂは、ストライプのすべてのカウンタ値を「０」（初期値）に設定する。
［ステップＳ１７５］ＲＡＩＤ制御部１３４ｂは、ストライプ内の全論理ブロックのデータおよびパリティデータの書き込み指示を、ＨＤＤアクセス部１３５ｂに対して出力する。するとＨＤＤアクセス部１３５ｂによって、タイムスタンプ付きの更新データとパリティデータとが、それぞれについて指定されたＨＤＤ内の指定された物理ブロックに書き込まれる。
【０２９０】
［ステップＳ１７６］ＲＡＩＤ制御部１３４ｂは、全データおよびパリティデータの書き込みが完了したか否かを判断する。全データおよびパリティデータの書き込みが完了すると、ＲＡＩＤ制御部１３４ｂは処理を終了する。少なくとも１つのＨＤＤにおける書き込みが完了していなければ、ステップＳ１３６の処理が繰り返され、ＲＡＩＤ制御部１３４ｂは書き込み待ち状態となる。
【０２９１】
このようにして、ストライプ単位でのデータの書き込み処理が行われる。書き込み処理を行う場合、ＲＡＩＤ制御部１３４ｂは、ＲＡＭ内に処理対象データテーブルを生成し、その処理対象データテーブル内でタイムススタンプ、フラグ、およびカウンタ値の設定を行う。
【０２９２】
図３９は、ストライプ書き込み時に生成される処理対象データテーブルの例を示す図である。ストライプ書き込み時に生成される処理対象データテーブル１３２ｇでは、すべてのデータおよびパリティデータに対して、同じ値のタイムスタンプ「ｔ１＿２」が設定されている。また、すべてのカウンタ値のフラグに「１」が設定されている。ここで、すべてのフラグを「１」に設定することは、書き込み抜け検査時の比較対象がタイムスタンプであることを意味している。すなわち、データとパリティデータとの書き込みが正しく（書き込み抜けが発生せずに）実行された場合、読み込み時に両方のフラグが「１」であることから、タイムスタンプが比較対象であると判断される。なお、すべてのカウンタ値には、初期値「０」が設定されている。
【０２９３】
次に、読み込み処理について詳細に説明する。
図４０は、ブロック読み込み処理の手順を示すフローチャートである。以下、図４０に示す処理をステップ番号に沿って説明する。この処理は、ホストコンピュータ１０からブロック単位でのデータの読み込み要求が入力されたときに実行される。
【０２９４】
［ステップＳ１８１］ＲＡＩＤ制御部１３４ｂは、アクセス対象の論理ブロックが属するパリティグループ用のアクセス管理テーブルを初期化する。アクセス管理テーブルは、論理ブロックごとのデータの書き込み抜けの有無を登録するための、データテーブルである。アクセス管理テーブルの初期化処理では、パリティグループに属する各論理ブロックの書き込み抜けの有無を示す情報として、「不明（ｎｕｌｌ）」が設定される。
【０２９５】
［ステップＳ１８２］ＲＡＩＤ制御部１３４ｂは、書き込み要求に応じたデータ書き込み対象の物理ブロック内のデータの読み込み指示を、ＨＤＤアクセス部１３５ｂに対して出力する。すると、ＨＤＤアクセス部１３５ｂによって、指定された物理ブロック内のデータの読み込みが行われる。
【０２９６】
［ステップＳ１８３］ＲＡＩＤ制御部１３４ｂは、パリティブロックに対応する物理ブロック内のパリティデータの読み込み指示を、ＨＤＤアクセス部１３５ｂに対して出力する。すると、ＨＤＤアクセス部１３５ｂによって、指定された物理ブロック内のパリティデータの読み込みが行われる。
【０２９７】
［ステップＳ１８４］ＲＡＩＤ制御部１３４ｂは、データの読み込みが完了したか否かを判断する。データ読み込みが完了した場合、処理がステップＳ１８５に進められる。データ読み込みが完了していなければステップＳ１８４の処理が繰り返され、ＲＡＩＤ制御部１３４ｂは読み込み待ち状態となる。
【０２９８】
［ステップＳ１８５］ＲＡＩＤ制御部１３４ｂは、パリティデータの読み込みが完了したか否かを判断する。パリティデータの読み込みが完了した場合、処理がステップＳ１８６に進められる。パリティデータ読み込みが完了していなければステップＳ１８５の処理が繰り返され、ＲＡＩＤ制御部１３４ｂは読み込み待ち状態となる。
【０２９９】
ＲＡＩＤ制御部１３４ｂはデータとパリティデータとの読み込みが完了すると、ＲＡＭ１３２内に処理対象データテーブルを作成し、読み込んだデータをその処理対象データテーブルに格納する。
【０３００】
［ステップＳ１８６］ＲＡＩＤ制御部１３４ｂは、データとパリティデータとの比較処理を行う。比較処理によって、異常の有無が判定される。この比較処理の詳細は後述する（図４６参照）。
【０３０１】
［ステップＳ１８７］ＲＡＩＤ制御部１３４ｂは、ステップＳ１８６における比較処理の結果、異常がなかったか否かを判断する。異常がない場合、処理がステップＳ１９１に進められる。異常がある場合、処理がステップＳ１８８に進められる。
【０３０２】
［ステップＳ１８８］ＲＡＩＤ制御部１３４ｂは、データとパリティデータとの比較により異常が検出された場合、パリティグループ修復処理を行う。修復処理の結果は、アクセス管理テーブルに反映される。すなわち、アクセス管理テーブルを参照することで、修復の成功の有無が判断できる。この処理の詳細は後述する（図４８参照）。
【０３０３】
［ステップＳ１８９］ＲＡＩＤ制御部１３４ｂは、パリティグループの修復が成功したか否かを判断する。ＲＡＩＤ制御部１３４ｂは、少なくとも１つのデータの修復が失敗していれば、パリティデータの修復が失敗したと判断する。修復に成功した場合、処理がステップＳ１９１に進められる。修復に失敗した場合、処理がステップＳ１９０に進められる。
【０３０４】
［ステップＳ１９０］ＲＡＩＤ制御部１３４ｂは、パリティグループの修復に失敗した場合、ホストコンピュータ１０にエラー応答を返す。その後、処理が終了する。
［ステップＳ１９１］ＲＡＩＤ制御部１３４ｂは、パリティグループ内のデータをホストコンピュータ１０に応答する。その後、処理が終了する。
【０３０５】
このようにして、ブロック読み込み処理が行われる。ここで、図３９に示したようなストライプにおける論理ブロック番号「Ｄ１」の論理ブロックを指定したデータの読み込み要求があったものとする。その場合、論理ブロック番号「Ｄ１」の論理ブロックが属するパリティグループに対応するアクセス管理テーブルが初期化される。
【０３０６】
図４１は、初期化されたアクセス管理テーブルの例を示す図である。アクセス管理テーブル１３２ｈには、論理ブロック番号と状態との欄が設けられている。論理ブロック番号の欄には、処理対象となるパリティグループに属する論理ブロックの論理ブロック番号が設定される。
【０３０７】
状態の欄には、各論理ブロックの状態が設定される。状態には、「ｎｕｌｌ」、「ＯＫ」、「ＮＧ」、および「修復」がある。状態「ｎｕｌｌ」は、書き込み抜けの検査を行っていないことを示している。状態「ＯＫ」は、書き込み抜けの検査により書き込み抜けなしと判定されたことを示している。状態「ＮＧ」は、書き込み抜けの検査により書き込み抜けありと判定されたことを示している。状態「修復」は、書き込み抜けを修復したことを示している。
【０３０８】
論理ブロック番号「Ｄ１」の論理ブロックが属するパリティグループには、それ以外に、論理ブロック番号「Ｄ５」、「Ｄ９」、「Ｄ１３」、「Ｐ１」の各論理ブロックが含まれる。そこで、アクセス管理テーブル１３２ｈの状態の欄には、各論理ブロックの論理ブロック番号が設定される。また、アクセス管理テーブル１３２ｈは、初期化によってすべての論理ブロックの状態に「ｎｕｌｌ」が設定される。
【０３０９】
その後、読み込み要求に応じたデータと、そのデータに対応するパリティデータとが宇読み込まれ、処理対象データテーブルに登録される。このときの処理対象データテーブルの内容は、図３６に示した通りである。その後、読み出されたデータとパリティデータとの比較処理が行われる。
【０３１０】
ここで、比較処理の手順を説明する前に、書き込み方式の違いによる時系列情報（フラグ、カウンタ値、タイムスタンプ）の発生パタンについて、図４２〜図４５を参照して説明する。以下の例では、１つのパリティグループに含まれる任意のデータブロックと、パリティブロックとに着目する。そして、同じ書き込み方式による書き込みが連続する場合、および書き込み方式が切り替わる場合それぞれについて、どのようなパタンの時系列情報が生じうるかについて説明する。
【０３１１】
なお、各物理ブロックへの書き込みは、ＥＣＣによりアトミックである（処理が一体である）ことが確認できる。すなわち、データ、フラグ、カウンタ値、タイムスタンプの一部のみが書き込まれ、他の情報に書き込み抜けが発生した場合、ＨＤＤアクセス部１３５ｂによるＥＣＣチェックにより排除される。従って、書き込み抜けは、時系列情報とデータの組み、時系列情報とパリティデータの組み、それぞれ一体で発生する。換言すると、フラグだけの書き込み抜けや、カウンタ値だけの書き込み抜けといった部分的な書き込み抜けは考慮しない。
【０３１２】
また、書き込み抜けはまれな現象である。そのため、想定する書き込み抜け以前の書き込みはすべて正常に行われているものとする。例えば、定期的に論理ブロックの読み込みを行うように運用することで、書き込み抜けが発生した論理ブロックに対して繰り返して書き込み抜けが発生する可能性を極めて小さくすることができる。さらに、書き込み抜けはまれな現象であることから、書き込み抜けは、１つの書き込み要求で実行されるデータブロックとパリティブロックとのいずれか一方でのみ発生するものとする。
【０３１３】
このようなことから、時系列情報発生パタンは、ほとんどの場合、図４２〜図４５に示す１２個のパタンのいずれかに該当するものと考えられる。
図４２は、ブロック書き込みが連続する場合の時系列情報発生パタンを示す図である。図４２には、ブロック書き込みが正常に実行された後、さらにブロック書き込みが行われた場合に発生し得る時系列情報発生パタンが示されている。なお、図４２に示すパリティブロックに付与されたフラグとカウンタ値のうち、書き込みが行われたデータブロックに対応するフラグとカウンタ値のみが示されている（図４３〜図４５においても同様）。
【０３１４】
先のブロック書き込みが正常に行われた場合、データブロック（論理ブロック「Ｄ」）のフラグとパリティブロック（論理ブロック「Ｐ」）のフラグは、共に「０」である。データブロックとパリティブロックとのカウンタ値は、同じ値である。図４２の例では、カウンタ値は共に「１」であるものとしている。データブロックのタイムスタンプには、ブロック書き込み時を示す時刻「Ｔ１」が設定される。他方、パリティブロックのタイムスタンプには、ストライプ書き込みを最後に行った時刻「Ｔｘ」がそのまま設定されている。
【０３１５】
図４２では、正常に（書き込み抜けが発生することなく）実行された論理ブロックの状態を「正常」と表し、書き込み抜けが発生した論理ブロックの状態を「書き込み抜け」と表している（図４３〜図４５においても同様）。
【０３１６】
正常にブロック書き込みが実行された論理ブロックに対し、別のブロック書き込み要求が発生した場合、パタン「１」〜「３」の時系列情報パタンが生じうる。
パタン「１」は、データブロック、パリティブロック共に正常に書き込みが行われた場合のパタンである。この場合、両方の論理ブロックのカウンタ値がカウントアップされる。図４２の例では、カウンタ値が共に「２」に更新されている。また、データブロックのタイムスタンプが、後のブロック書き込み時刻「Ｔ２」に更新されている。このような場合、書き込み抜けの検出処理として、後述する第１のカウンタ値比較処理が行われる。
【０３１７】
パタン「２」は、パリティブロックは正常に書き込みが行われているが、データブロックに書き込み抜けが発生した場合のパタンである。この場合、パリティブロックのカウンタ値のみがカウントアップされる。図４２の例では、パリティブロックのカウンタ値が「２」に更新されているが、データブロックのカウンタ値は「１」のままである。また、データブロック、パリティブロック共に、タイムスタンプは変更されない。このような場合、書き込み抜けの検出処理として、後述する第１のカウンタ値比較処理が行われる。
【０３１８】
パタン「３」は、データブロックは正常に書き込みが行われているが、パリティブロックに書き込み抜けが発生した場合のパタンである。この場合、データブロックのカウンタ値のみがカウントアップされる。図４２の例では、データブロックのカウンタ値が「２」に更新されているが、パリティブロックのカウンタ値は「１」のままである。また、データブロックのタイムスタンプが、後のブロック書き込み時刻「Ｔ２」に更新されている。このような場合、書き込み抜けの検出処理として、後述する第１のカウンタ値比較処理が行われる。
【０３１９】
このように、パタン「１」〜「３」では、カウンタ値の比較によって書き込み抜けの検出が可能である。
図４３は、ストライプ書き込みが連続する場合の時系列情報発生パタンを示す図である。図４３には、ストライプ書き込みが正常に実行された後、さらにストライプ書き込みが行われた場合に発生し得る時系列情報発生パタンが示されている。
【０３２０】
先のストライプ書き込みが正常に行われた場合、データブロックのフラグとパリティブロックのフラグは、共に「１」である。データブロックとパリティブロックとのカウンタ値は共に「０」である。データブロックとパリティブロックとのタイムスタンプには、共にストライプ書き込みを行った時刻「Ｔ３」が設定される。
【０３２１】
正常にストライプ書き込みが実行された論理ブロックに対し、別のストライプ書き込み要求が発生した場合、パタン「４」〜「６」の時系列情報パタンが生じ得る。
パタン「４」は、データブロック、パリティブロック共に正常に書き込みが行われた場合のパタンである。この場合、両方の論理ブロックのタイムスタンプが、後のストライプ書き込み時刻「Ｔ４」に更新される。このような場合、書き込み抜けの検出処理として、後述する第１のタイムスタンプ比較処理が行われる。
【０３２２】
パタン「５」は、パリティブロックは正常に書き込みが行われているが、データブロックに書き込み抜けが発生した場合のパタンである。この場合、パリティブロックのタイムスタンプのみが、後のストライプ書き込み時刻「Ｔ４」に更新される。このような場合、書き込み抜けの検出処理として、後述する第１のタイムスタンプ比較処理が行われる。
【０３２３】
パタン「６」は、データブロックは正常に書き込みが行われているが、パリティブロックに書き込み抜けが発生した場合のパタンである。この場合、データブロックのタイムスタンプのみが後のストライプ書き込み時刻「Ｔ４」に更新される。このような場合、書き込み抜けの検出処理として、後述する第１のタイムスタンプ比較処理が行われる。
【０３２４】
このように、パタン「４」〜「６」では、タイムスタンプの比較によって書き込み抜けの検出が可能である。
図４４は、ストライプ書き込み後にブロック書き込みが行われた場合の時系列情報発生パタンを示す図である。図４４には、ストライプ書き込みが正常に実行された後、さらにブロック書き込みが行われた場合に発生し得る時系列情報発生パタンが示されている。先のストライプ書き込み後の状態は、図４３と同様である。
【０３２５】
正常にストライプ書き込みが実行された論理ブロックに対し、別のブロック書き込み要求が発生した場合、パタン「７」〜「９」の時系列情報パタンが生じ得る。
パタン「７」は、データブロック、パリティブロック共に正常に書き込みが行われた場合のパタンである。この場合、両方の論理ブロックのフラグが「０」に変更される。また、両方の論理ブロックのカウンタ値がカウントアップされる。図４４の例では、カウンタ値が共に「１」に更新されている。また、データブロックのタイムスタンプが、後のブロック書き込み時刻「Ｔ５」に更新されている。このような場合、書き込み抜けの検出処理として、後述する第１のカウンタ値比較処理が行われる。
【０３２６】
パタン「８」は、パリティブロックは正常に書き込みが行われているが、データブロックに書き込み抜けが発生した場合のパタンである。この場合、パリティブロックのフラグが「１」に変更される。また、パリティブロックのカウンタ値のみがカウントアップされる。図４４の例では、パリティブロックのカウンタ値が「１」に更新されているが、データブロックのカウンタ値は「０」のままである。また、データブロック、パリティブロック共に、タイムスタンプは変更されない。このような場合、書き込み抜けの検出処理として、後述する第２のタイムスタンプ比較処理と第２のカウンタ値比較処理とが行われる。
【０３２７】
パタン「９」は、データブロックは正常に書き込みが行われているが、パリティブロックに書き込み抜けが発生した場合のパタンである。この場合、データブロックのカウンタ値のみがカウントアップされる。図４４の例では、データブロックのカウンタ値が「１」に更新されているが、パリティブロックのカウンタ値は「０」のままである。また、データブロックのタイムスタンプが、後のブロック書き込み時刻「Ｔ５」に更新されている。このような場合、書き込み抜けの検出処理として、後述する第２のタイムスタンプ比較処理が行われる。
【０３２８】
このように、パタン「８」、「９」では、フラグが一致しない。この場合、まずタイムスタンプを比較することで、パタン「９」のような書き込み抜けが検出できる。また、フラグとタイムスタンプとが一致した場合にはカウンタ値を比較することによって、パタン「８」のような書き込み抜けが検出できる。
【０３２９】
図４５は、ブロック書き込み後にストライプ書き込みが行われた場合の時系列情報発生パタンを示す図である。図４５には、ブロック書き込みが正常に実行された後、さらにストライプ書き込みが行われた場合に発生し得る時系列情報発生パタンが示されている。先のブロック書き込み後の状態は、図４２と同様である。
【０３３０】
正常にブロック書き込みが実行された論理ブロックに対し、別のストライプ書き込み要求が発生した場合、パタン「１０」〜「１２」の時系列情報パタンが生じ得る。
パタン「１０」は、データブロック、パリティブロック共に正常に書き込みが行われた場合のパタンである。この場合、両方の論理ブロックのフラグが「１」に変更され、カウンタ値は「０」に初期化される。また、両方の論理ブロックのタイムスタンプは、後のストライプ書き込み時刻「Ｔ６」に更新される。このような場合、書き込み抜けの検出処理として、後述する第１のタイムスタンプ比較処理が行われる。
【０３３１】
パタン「１１」は、パリティブロックは正常に書き込みが行われているが、データブロックに書き込み抜けが発生した場合のパタンである。この場合、パリティブロックのフラグが「１」に変更され、カウンタ値が「０」に初期化される。また、パリティブロックのタイムスタンプのみが、後のストライプ書き込み時刻「Ｔ６」に更新される。このような場合、書き込み抜けの検出処理として、後述する第２のタイムスタンプ比較処理が行われる。
【０３３２】
パタン「１２」は、データブロックは正常に書き込みが行われているが、パリティブロックに書き込み抜けが発生した場合のパタンである。この場合、データブロックのフラグが「１」に変更され、カウンタ値が「０」に初期化される。また、データブロックのタイムスタンプのみが後のストライプ書き込み時刻「Ｔ６」に更新される。このような場合、書き込み抜けの検出処理として、後述する第２のタイムスタンプ比較処理が行われる。
【０３３３】
このように、パタン「１１」、「１２」では、フラグが一致しない。この場合、まずタイムスタンプを比較することで、書き込み抜けが検出できる。
次に、図４２〜図４５に示したような各パタンの書き込み抜けを検出するための処理手順を詳細に説明する。
【０３３４】
図４６は、データとパリティデータとの比較処理手順を示すフローチャートである。以下、図４６に示す処理をステップ番号に沿って説明する。
［ステップＳ２０１］ＲＡＩＤ制御部１３４ｂは、データとパリティデータとのフラグを検査する。具体的には、ＲＡＩＤ制御部１３４ｂは、処理対象データテーブル１３２ｆのデータ「ｄ１」に付与されているカウンタ値＃１「ｃ１」のフラグ「ｆ１」と、パリティデータ「ｐ１」に付与されているカウンタ値＃１「ｃ１１」のフラグ「ｆ１１」とを取得する。そして、ＲＡＩＤ制御部１３４ｂは、各フラグの値に応じて処理を分岐させる。データのフラグが「０」、パリティデータのフラグが「０」であれば、処理がステップＳ２０２に進められる。データのフラグが「１」、パリティデータのフラグが「１」であれば、処理がステップＳ２０３に進められる。データのフラグが「１」、パリティデータのフラグが「０」の場合、およびデータのフラグが「０」、パリティデータのフラグが「１」の場合には、処理がステップＳ２０４に進められる。
【０３３５】
［ステップＳ２０２］カウンタ値比較部１３９ｂは、データとパリティデータとのフラグが共に「０」の場合、第１のカウンタ比較処理を実行する。データとパリティデータとのフラグが共に「０」となるのは、パタン「１」、「２」、「３」、「７」である。この処理の詳細は後述する（図４７参照）。その後、処理が終了する。
【０３３６】
［ステップＳ２０３］タイムスタンプ比較部１３７ｂは、データとパリティデータとのフラグが共に「１」の場合、第１のタイムスタンプ比較処理を実行する。データとパリティデータとのフラグが共に「１」となるのは、パタン「４」、「５」、「６」、「１０」である。この処理の詳細は後述する（図４９参照）。その後、処理が終了する。
【０３３７】
［ステップＳ２０４］タイムスタンプ比較部１３７ｂは、データのフラグとパリティデータとのフラグが不一致の場合、第２のタイムスタンプ比較処理を実行する。データのフラグとパリティデータとのフラグが不一致となるのは、パタン「８」、「９」、「１１」、「１２」である。この処理の詳細は後述する（図５０参照）。その後、処理が終了する。
【０３３８】
次に、各比較処理の詳細について説明する。
図４７は、第１のカウンタ値比較処理の手順を示すフローチャートである。以下、図４７に示す処理をステップ番号に沿って説明する。
【０３３９】
［ステップＳ２１１］カウンタ値比較部１３９ｂは、データとパリティデータとのカウンタ値を比較する。カウンタ値比較部１３９ｂは、カウンタ値が一致すれば書き込み抜けがないと判断し、処理をステップＳ２１２に進める。カウンタ値が一致するのは、パタン「１」、「７」である。
【０３４０】
カウンタ値比較部１３９ｂは、パリティデータのカウンタ値の方が１だけ進んでいればデータに書き込み抜けが発生していると判断し、処理をステップＳ２１３に進める。パリティデータのカウンタ値の方が進んでいるのは、パタン「２」である。カウンタ値比較部１３９ｂは、データのカウンタ値の方が１だけ進んでいればパリティデータに書き込み抜けが発生していると判断し、処理をステップＳ２１４に進める。データのカウンタ値の方が進んでいるのは、パタン「３」である。
【０３４１】
カウンタ値比較部１３９ｂは、カウンタ値の差が「２」であれば判定不能と判断し、処理をステップＳ２１５に進める。図４２〜図４５に示したパタンでは、同じ論理ブロックで書き込み抜けが繰り返し発生することを想定していない。そのため、パタン「１」〜「１２」には、カウンタ値の差が「２」となるパタンは含まれていない。
【０３４２】
［ステップＳ２１２］カウンタ値比較部１３９ｂは、アクセス管理テーブル１３２ｈにおいて、比較したデータに対応するデータブロックの状態を「ＯＫ」に変更する。また、カウンタ値比較部１３９ｂは、比較したパリティデータに対応するパリティブロックの状態を「ＯＫ」に変更する。その後、処理が終了する。
【０３４３】
［ステップＳ２１３］カウンタ値比較部１３９ｂは、アクセス管理テーブル１３２ｈにおいて、比較したデータに対応するデータブロックの状態を「ＮＧ」に変更する。また、カウンタ値比較部１３９ｂは、比較したパリティデータに対応するパリティブロックの状態を「ＯＫ」に変更する。その後、処理が終了する。
【０３４４】
［ステップＳ２１４］カウンタ値比較部１３９ｂは、アクセス管理テーブル１３２ｈにおいて、比較したデータに対応するデータブロックの状態を「ＯＫ」に変更する。また、カウンタ値比較部１３９ｂは、比較したパリティデータに対応するパリティブロックの状態を「ＮＧ」に変更する。その後、処理が終了する。
【０３４５】
［ステップＳ２１５］カウンタ値比較部１３９ｂは、アクセス管理テーブル１３２ｈにおいて、比較したデータに対応するデータブロックの状態を「ＮＧ」に変更する。また、カウンタ値比較部１３９ｂは、比較したパリティデータに対応するパリティブロックの状態を「ＮＧ」に変更する。その後、処理が終了する。
【０３４６】
このようにして、カウンタ値の比較結果に応じて、アクセス管理テーブル１３２ｈの内容が更新される。
図４８は、第１のカウンタ値比較処理実施後のアクセス管理テーブルを示す図である。図４８では、論理ブロック番号「Ｄ１」のデータブロックと、論理ブロック番号「Ｐ１」のパリティブロック「Ｐ１」との状態が更新されている。
【０３４７】
（Ａ）は、カウンタ値一致時のアクセス管理テーブル１３２ｈの内容を示す図である。カウンタ値が一致したことで、データブロックとパリティブロックとの両方の状態が「ＯＫ」となる。（Ｂ）は、データ書き込み抜け検出時のアクセス管理テーブル１３２ｈの内容を示す図である。データ書き込み抜けが検出されたことで、データブロックの状態が「ＮＧ」となり、パリティブロックの状態が「ＯＫ」となる。（Ｃ）は、パリティデータ書き込み抜け検出時のアクセス管理テーブル１３２ｈの内容を示す図である。パリティデータ書き込み抜けが検出されたことで、データブロックの状態が「ＯＫ」となり、パリティブロックの状態が「ＮＧ」となる。（Ｄ）は、判定不能の場合のアクセス管理テーブル１３２ｈの内容を示す図である。判定不能であるため、データブロックとパリティブロックとの両方の状態が「ＮＧ」となる。
【０３４８】
図４９は、第１のタイムスタンプ比較処理の手順を示すフローチャートである。以下、図４９に示す処理をステップ番号に沿って説明する。
［ステップＳ２２１］タイムスタンプ比較部１３７ｂは、データとパリティデータとのタイムスタンプを比較する。タイムスタンプ比較部１３７ｂは、タイムスタンプが一致すれば書き込み抜けがないと判断し、処理をステップＳ２２２に進める。タイムスタンプが一致するのは、パタン「４」、「１０」である。
【０３４９】
タイムスタンプ比較部１３７ｂは、パリティデータのタイムスタンプの方が大きければデータに書き込み抜けが発生していると判断し、処理をステップＳ２２３に進める。パリティデータのタイムスタンプの方が大きいのは、パタン「５」である。タイムスタンプ比較部１３７ｂは、データのタイムスタンプの方が大きければパリティデータに書き込み抜けが発生していると判断し、処理をステップＳ２２４に進める。データのタイムスタンプの方が大きいのは、パタン「６」である。
【０３５０】
［ステップＳ２２２］タイムスタンプ比較部１３７ｂは、アクセス管理テーブル１３２ｈにおいて、比較したデータに対応するデータブロックの状態を「ＯＫ」に変更する。また、タイムスタンプ比較部１３７ｂは、比較したパリティデータに対応するパリティブロックの状態を「ＯＫ」に変更する。その後、処理が終了する。
【０３５１】
［ステップＳ２２３］タイムスタンプ比較部１３７ｂは、アクセス管理テーブル１３２ｈにおいて、比較したデータに対応するデータブロックの状態を「ＮＧ」に変更する。また、タイムスタンプ比較部１３７ｂは、比較したパリティデータに対応するパリティブロックの状態を「ＯＫ」に変更する。その後、処理が終了する。
【０３５２】
［ステップＳ２２４］タイムスタンプ比較部１３７ｂは、アクセス管理テーブル１３２ｈにおいて、比較したデータに対応するデータブロックの状態を「ＯＫ」に変更する。また、タイムスタンプ比較部１３７ｂは、比較したパリティデータに対応するパリティブロックの状態を「ＮＧ」に変更する。その後、処理が終了する。
【０３５３】
図５０は、第２のタイムスタンプ比較処理の手順を示すフローチャートである。以下、図５０に示す処理をステップ番号に沿って説明する。
［ステップＳ２３１］タイムスタンプ比較部１３７ｂは、データとパリティデータとのタイムスタンプを比較する。タイムスタンプ比較部１３７ｂは、タイムスタンプが一致すれば書き込み抜けがないと判断し、処理をステップＳ２３２に進める。タイムスタンプが一致するのは、パタン「８」である。タイムスタンプ比較部１３７ｂは、パリティデータのタイムスタンプの方が大きければデータに書き込み抜けが発生していると判断し、処理をステップＳ２３３に進める。パリティデータのタイムスタンプの方が大きいのは、パタン「１１」である。タイムスタンプ比較部１３７ｂは、データのタイムスタンプの方が大きければパリティデータに書き込み抜けが発生していると判断し、処理をステップＳ２３４に進める。データのタイムスタンプの方が大きいのは、パタン「９」、「１２」である。
【０３５４】
［ステップＳ２３２］カウンタ値比較部１３９ｂは、第２のカウンタ値比較処理を実行する。この処理の詳細は後述する（図５１参照）。その後、処理が終了する。
［ステップＳ２３３］タイムスタンプ比較部１３７ｂは、アクセス管理テーブル１３２ｈにおいて、比較したデータに対応するデータブロックの状態を「ＮＧ」に変更する。また、タイムスタンプ比較部１３７ｂは、比較したパリティデータに対応するパリティブロックの状態を「ＯＫ」に変更する。その後、処理が終了する。
【０３５５】
［ステップＳ２３４］タイムスタンプ比較部１３７ｂは、アクセス管理テーブル１３２ｈにおいて、比較したデータに対応するデータブロックの状態を「ＯＫ」に変更する。また、タイムスタンプ比較部１３７ｂは、比較したパリティデータに対応するパリティブロックの状態を「ＮＧ」に変更する。その後、処理が終了する。
【０３５６】
図５１は、第２のカウンタ値比較処理の手順を示す図である。以下、図５１に示す処理をステップ番号に沿って説明する。
［ステップＳ２４１］カウンタ値比較部１３９ｂは、データとパリティデータとのカウンタ値を比較する。カウンタ値比較部１３９ｂは、カウンタ値が一致すれば書き込み抜けがないと判断し、処理をステップＳ２４２に進める。なお、ステップＳ２４１においてカウンタ値が一致するパタンは、図４２〜図４５に例示したパタンの中にはない。
【０３５７】
カウンタ値比較部１３９ｂは、パリティデータのカウンタ値の方が１だけ進んでいればデータに書き込み抜けが発生していると判断し、処理をステップＳ２４３に進める。ステップＳ２４１においてパリティデータのカウンタ値の方が１だけ進んでいると判断されるのは、パタン「８」である。
【０３５８】
カウンタ値比較部１３９ｂは、データのカウンタ値の方が１だけ進んでいればパリティデータに書き込み抜けが発生していると判断し、処理をステップＳ２４４に進める。なお、ステップＳ２４１においてカウンタ値が一致するパタンは、図４２〜図４５に例示したパタンの中にはない。
【０３５９】
カウンタ値比較部１３９ｂは、カウンタ値の差が２であれば、判定不要と判断し、処理をステップＳ２４５に進める。なお、ステップＳ２４１においてカウンタ値の差が２となるパタンは、図４２〜図４５に例示したパタンの中にはない。
【０３６０】
［ステップＳ２４２］カウンタ値比較部１３９ｂは、アクセス管理テーブル１３２ｈにおいて、比較したデータに対応するデータブロックの状態を「ＮＧ」に変更する。また、カウンタ値比較部１３９ｂは、比較したパリティデータに対応するパリティブロックの状態を「ＮＧ」に変更する。その後、処理が終了する。
【０３６１】
［ステップＳ２４３］カウンタ値比較部１３９ｂは、アクセス管理テーブル１３２ｈにおいて、比較したデータに対応するデータブロックの状態を「ＮＧ」に変更する。また、カウンタ値比較部１３９ｂは、比較したパリティデータに対応するパリティブロックの状態を「ＯＫ」に変更する。その後、処理が終了する。
【０３６２】
［ステップＳ２４４］カウンタ値比較部１３９ｂは、アクセス管理テーブル１３２ｈにおいて、比較したデータに対応するデータブロックの状態を「ＮＧ」に変更する。また、カウンタ値比較部１３９ｂは、比較したパリティデータに対応するパリティブロックの状態を「ＮＧ」に変更する。その後、処理が終了する。
【０３６３】
［ステップＳ２４５］カウンタ値比較部１３９ｂは、アクセス管理テーブル１３２ｈにおいて、比較したデータに対応するデータブロックの状態を「ＮＧ」に変更する。また、カウンタ値比較部１３９ｂは、比較したパリティデータに対応するパリティブロックの状態を「ＮＧ」に変更する。その後、処理が終了する。
【０３６４】
このようにして、書き込み抜けの検査処理が行われ、その結果がアクセス管理テーブル１３２ｈに反映される。アクセス管理テーブル１３２ｈにおいて状態が「ＮＧ」の論理ブロックがある場合、ＲＡＩＤ制御部１３４ｂによってパリティグループ修復処理が行われる。以下、パリティグループ修復処理を詳細に説明する。
【０３６５】
図５２は、パリティグループ修復処理の手順を示すフローチャートである。以下、図５２に示す処理をステップ番号に沿って説明する。
［ステップＳ２５１］ＲＡＩＤ制御部１３４ｂは、パリティグループ内の未読の論理ブロックのデータを、対応する物理ブロックから読み込む。すなわち、読み込み要求に応じて、図４０に示すブロック読み込み処理におけるステップＳ１８２，Ｓ１８３において、１つのデータとパリティデータとが読み込まれている。この読み込み時に書き込み抜けが検出された場合、ステップＳ１８２で読み込んだデータと同じパリティグループに属する他のデータの読み込み指示が、ＨＤＤアクセス部１３５ｂに出される。その結果、ＨＤＤアクセス部１３５ｂによって他のデータがＨＤＤから読み込まれる。
【０３６６】
［ステップＳ２５２］ＲＡＩＤ制御部１３４ｂは、修復すべきパリティグループ内のすべての論理ブロックのデータの読み込みが完了したか否かを判断する。すべての論理ブロックのデータの読み込みが完了した場合、処理がステップＳ２５３に進められる。読み込まれていないデータがある場合、ステップＳ２５２の処理が繰り返され、ＲＡＩＤ制御部１３４ｂは読み込み待ち状態となる。
【０３６７】
［ステップＳ２５３］ＲＡＩＤ制御部１３４ｂは、パリティグループ比較処理を行う。パリティグループ比較処理では、ステップＳ２５１で読み出したデータに関しても、書き込み抜けの検査が行われる。その結果、パリティグループに属するすべてのデータおよびパリティデータについて書き込み抜けの有無が検査され、検査結果がアクセス管理テーブル１３２ｈに反映される。なお、パリティグループ比較処理の詳細は後述する（図５３参照）。
【０３６８】
［ステップＳ２５４］ＲＡＩＤ制御部１３４ｂは、パリティグループ再計算処理を実行する。パリティグループ再計算処理は、アクセス管理テーブル１３２ｈにおいて「ＮＧ」とされている論理ブロックのデータまたはパリティデータを再計算する処理である。なお、パリティグループ再計算処理の詳細は後述する（図５４参照）。
【０３６９】
［ステップＳ２５５］ＲＡＩＤ制御部１３４ｂは、修復した論理ブロックのデータまたはパリティデータを、その論理ブロックに対応する物理ブロックに書き込む。
［ステップＳ２５６］ＲＡＩＤ制御部１３４ｂは、ステップＳ２５５における書き込み処理が完了したか否かを判断する。書き込みが完了した場合、処理がステップＳ２５７に進められる。書き込みが完了していなければステップＳ２５６の処理が繰り返され、ＲＡＩＤ制御部１３４ｂは書き込み待ち状態となる。
【０３７０】
［ステップＳ２５７］ＲＡＩＤ制御部１３４ｂは、ＨＤＤ２１０ｂ，２２０ｂ，２３０ｂ，２４０ｂ，２５０ｂにおけるディスクキャッシュを無効化する。これは、ステップＳ２５８における読み込み処理においてキャッシュされたデータが読み込まれたのでは、書き込みが正しく実行できたか否かの検証ができないためである。
【０３７１】
［ステップＳ２５８］ＲＡＩＤ制御部１３４ｂは、修復した論理ブロックのデータまたはパリティデータを書き込んだ物理ブロックから、データまたはパリティデータを読み込む。
【０３７２】
［ステップＳ２５９］ＲＡＩＤ制御部１３４ｂは、ステップＳ２５８による読み込みが完了したか否かを判断する。読み込みが完了した場合、処理がステップＳ２６０に進められる。読み込みが完了していなければ、ＲＡＩＤ制御部１３４ｂは、ステップＳ２５９の処理を繰り返し、読み込み待ち状態となる。
【０３７３】
［ステップＳ２６０］ＲＡＩＤ制御部１３４ｂは、ステップＳ２５５における書き込みが正常に行われたか否かを判断する。具体的には、ＲＡＩＤ制御部１３４ｂは、ステップＳ２５５で書き込んだデータまたはパリティデータと、ステップＳ２５８で読み込んだデータまたはパリティデータとを比較する。比較の結果、データまたはパリティデータの内容が一致すれば、書き込みは正常に行われたと判断される。比較の結果、データまたはパリティデータの内容が不一致であれば、書き込みは正常に行われていないと判断される。
【０３７４】
書き込みが正常に行われなかった場合、処理がステップＳ２５５に進められ、再度書き込みが行われる。書き込みが正常に行われた場合、処理が終了する。
次に、パリティグループ比較処理の詳細について説明する。
【０３７５】
図５３は、パリティグループ比較処理の手順を示すフローチャートである。以下、図５３に示す処理をステップ番号に沿って説明する。
［ステップＳ２７１］ＲＡＩＤ制御部１３４ｂは、処理対象のパリティグループのアクセス管理テーブル１３２ｈに示されている論理ブロックの中に、ステップＳ２７３の処理を実行していない未比較のデータブロックがあるか否かを判断する。アクセス管理テーブル１３２ｈにおいて状態が「ｎｕｌｌ」となっているデータブロックが、未選択のデータブロックである。未比較のデータブロックがある場合、処理がステップＳ２７２に進められる。未比較のデータブロックがない場合、処理が終了する。
【０３７６】
［ステップＳ２７２］ＲＡＩＤ制御部１３４ｂは、アクセス管理テーブル１３２ｈから未比較のデータブロックを１つ選択する。
［ステップＳ２７３］ＲＡＩＤ制御部１３４ｂは、ステップＳ２７２で選択したデータブロックのデータと、パリティブロックのパリティデータとの比較処理を実行する。この処理の詳細は、図４６〜図５１に示した通りである。パリティブロックのパリティデータとの比較処理の結果、アクセス管理テーブル１３２ｈにおいて、選択したデータブロックに対して「ＯＫ」または「ＮＧ」の状態が設定される。その後、処理がステップＳ２７１に進められる。
【０３７７】
次に、パリティグループ再計算処理の詳細について説明する。
図５４は、パリティグループ再計算処理の手順を示すフローチャートである。以下、図５４に示す処理をステップ番号に沿って説明する。
【０３７８】
［ステップＳ２８１］ＲＡＩＤ制御部１３４ｂは、アクセス管理テーブルを検査し、状態が「ＮＧ」となっている論理ブロック数を数える。「ＮＧ」の論理ブロックが１個のみであれば、処理がステップＳ２８２に進められる。「ＮＧ」の論理ブロックが２個以上あれば、処理がステップＳ２８４に進められる。
【０３７９】
［ステップＳ２８２］ＲＡＩＤ制御部１３４ｂは、「ＮＧ」の論理ブロックが１個のみであれば、「ＮＧ」の論理ブロックのデータまたはパリティデータを修復する。具体的には、ＲＡＩＤ制御部１３４ｂは、正常な他のデータおよびパリティデータのビットごとの排他的論理和演算を行い、演算結果を修復後のデータまたはパリティデータとする。ＲＡＩＤ制御部１３４ｂは、修復したデータまたはパリティデータを、修復対象の論理ブロックに対応する物理ブロックに書き込む。
【０３８０】
［ステップＳ２８３］ＲＡＩＤ制御部１３４ｂは、アクセス管理テーブル１３２ｈにおいて、データまたはパリティデータを修復した論理ブロックの状態を「修復」に更新する。その後、処理が終了する。
【０３８１】
［ステップＳ２８４］ＲＡＩＤ制御部１３４ｂは、「ＮＧ」の論理ブロックが２個以上であれば、「ＮＧ」の論理ブロックの論理ブロック番号をバッドブロックリストに追加する。
【０３８２】
［ステップＳ２８５］ＲＡＩＤ制御部１３４ｂは、パリティブロックのパリティデータを修復する。具体的には、ＲＡＩＤ制御部１３４ｂは、各データブロックのデータのビットごとの排他的論理和演算を行い、演算結果をパリティデータとする。そして、ＲＡＩＤ制御部１３４ｂは、修復したパリティデータを、パリティブロックに対応する物理ブロックに書き込む。
【０３８３】
［ステップＳ２８６］ＲＡＩＤ制御部１３４ｂは、アクセス管理テーブル１３２ｈにおいて、パリティブロックの状態を「修復」に更新する。その後、処理が終了する。
このようにして、書き込み抜けが発生した論理ブロックのデータまたはパリティデータが修復される。
【０３８４】
図５５は、パリティグループ修復処理が実行されたときのアクセス管理テーブルの状態遷移例を示す図である。図５５では、読み込み要求の対象となったデータブロックで書き込み抜けが検出され、同じパリティグループ内の他の論理ブロックは正常であった場合の例である。
【０３８５】
第１の状態（ＳＴ１）は、読み込み要求に応じて読み出されたデータとパリティデータとの書き込み抜け検証後のアクセス管理テーブル１３２ｈの状態を示している。図５５の例では、論理ブロック番号「Ｄ１」のデータブロックに書き込み抜けが検出され、状態が「ＮＧ」となっている。パリティブロックは書き込み抜けが検出されず、状態が「ＯＫ」となっている。
【０３８６】
書き込み抜けが検出されると、ＲＡＩＤ制御部１３４ｂは修復処理の実行を開始し、まず、他のデータブロックのデータの書き込み抜けを検証する。
第２の状態（ＳＴ２）は、修復処理における書き込み抜け検証後のアクセス管理テーブル１３２ｈの状態を示している。各データブロックの書き込み抜け検証により、書き込み抜けがないことが確認されている。そこで、論理ブロック番号「Ｄ２」、「Ｄ３」、「Ｄ４」の各データブロックの状態が「ＯＫ」となっている。
【０３８７】
その後、ＲＡＩＤ制御部１３４ｂは修復処理を続行し、書き込み抜けが発生した論理ブロックのデータを修復する。
第３の状態（ＳＴ３）は、データ修復後のアクセス管理テーブル１３２ｈの状態を示している。書き込み抜けが発生した論理ブロック番号「Ｄ１」のデータブロックのデータが修復されたことにより、そのデータブロックの状態が「修復」に変更されている。
【０３８８】
以上のようにして、ブロック読み込み時の書き込み抜け検出、および修復が行われる。
次に、ストライプ読み込み処理について説明する。
図５６は、ストライプ読み込み処理の手順を示すフローチャートである。以下、図５６に示す処理をステップ番号に沿って説明する。
【０３８９】
［ステップＳ２９１］ＲＡＩＤ制御部１３４ｂは、アクセス対象のストライプに含まれる各パリティグループ用のアクセス管理テーブルを初期化する。初期化されたアクセス管理テーブルには、対応するパリティグループに属する各論理ブロックの状態として「不明（ｎｕｌｌ）」が設定される。
【０３９０】
図５７は、ストライプ読み込み時に初期化されたアクセス管理テーブルの例を示す図である。この例では、図３９に示すストライプの読み込み要求が入力された場合を想定している。図３９のストライプや、４つのパリティグループを含んでいる。従って、各パリティグループに対応する４つのアクセス管理テーブル１３２ｈ，１３２ｉ，１３２ｊ，１３２ｋが生成される。各アクセス管理テーブル１３２ｈ，１３２ｉ，１３２ｊ，１３２ｋは、対応するパリティグループに含まれる論理ブロックの論理ブロック番号が設定されている。また、各論理ブロック番号に対応付けて、論理ブロックの状態が設定されている。論理ブロックの状態は、初期化によってすべて「ｎｕｌｌ」となっている。
【０３９１】
以下、図５６の説明に戻る。
［ステップＳ２９２］ＲＡＩＤ制御部１３４ｂは、ストライプに含まれるパリティグループに属するすべての論理ブロックのデータおよびパリティデータを、各論理ブロックに対応する物理ブロックから読み込む。
【０３９２】
［ステップＳ２９３］ＲＡＩＤ制御部１３４ｂは、すべてのデータとパリティデータとの読み込みが完了したか否かを判断する。読み込みが完了した場合、処理がステップＳ２９４に進められる。読み込みが完了していない場合、ステップＳ２９３の処理が繰り返され、ＲＡＩＤ制御部１３４ｂは読み込み待ち状態となる。
【０３９３】
［ステップＳ２９４］ＲＡＩＤ制御部１３４ｂは、すべてのデータとパリティデータとの比較処理を行う。この比較処理により、すべての論理ブロックについての書き込み抜けの有無が検証される。なお、この処理の詳細は後述する（図５８参照）。
【０３９４】
［ステップＳ２９５］ＲＡＩＤ制御部１３４ｂは、ステップＳ２９４における比較処理の結果、異常がなかったか否かを判断する。異常がない場合、処理がステップＳ２９９に進められる。異常がある場合、処理がステップＳ２９６に進められる。
【０３９５】
［ステップＳ２９６］ＲＡＩＤ制御部１３４ｂは、データとパリティデータとの比較により異常が検出された場合、すべてのパリティグループ修復処理を行う。修復処理の結果は、アクセス管理テーブルに反映される。この処理の詳細は後述する（図５９参照）。
【０３９６】
［ステップＳ２９７］ＲＡＩＤ制御部１３４ｂは、すべてのデータブロックにおいて異常がないか否かを判断する。少なくとも１つのバッドブロックが検出された場合、異常ありと判断される。異常がない場合、処理がステップＳ２９９に進められる。異常がある場合、処理がステップＳ２９８に進められる。
【０３９７】
［ステップＳ２９８］ＲＡＩＤ制御部１３４ｂは、パリティグループの修復に失敗した場合、ホストコンピュータ１０にエラー応答を返す。その後、処理が終了する。
［ステップＳ２９９］ＲＡＩＤ制御部１３４ｂは、ストライプ内のデータをホストコンピュータ１０に応答する。その後、処理が終了する。
【０３９８】
このようにして、ストライプ読み込み時には、ストライプ内のすべてのデータおよびパリティデータの書き込み抜けが検査される。
次に、全データとパリティデータとの比較処理について詳細に説明する。
【０３９９】
図５８は、全データとパリティデータとの比較処理の手順を示すフローチャートである。以下、図５８に示す処理をステップ番号に沿って説明する。
［ステップＳ３０１］ＲＡＩＤ制御部１３４ｂは、アクセス管理テーブル１３２ｈ，１３２ｉ，１３２ｊ，１３２ｋに示されている論理ブロックの中に、ステップＳ３０３の処理を実行していない未比較のデータブロックがあるか否かを判断する。アクセス管理テーブル１３２ｈにおいて状態が「ｎｕｌｌ」となっているデータブロックが、未選択のデータブロックである。未比較のデータブロックがある場合、処理がステップＳ３０２に進められる。未比較のデータブロックがない場合、処理が終了する。
【０４００】
［ステップＳ３０２］ＲＡＩＤ制御部１３４ｂは、アクセス管理テーブル１３２ｈ，１３２ｉ，１３２ｊ，１３２ｋから未比較のデータブロックを１つ選択する。
［ステップＳ３０３］ＲＡＩＤ制御部１３４ｂは、ステップＳ３０２で選択したデータブロックのデータと、パリティブロックのパリティデータとの比較処理を実行する。この処理の詳細は、図４６〜図５１に示した通りである。パリティブロックのパリティデータとの比較処理の結果、アクセス管理テーブル１３２ｈ，１３２ｉ，１３２ｊ，１３２ｋにおいて、選択したデータブロックに対して「ＯＫ」または「ＮＧ」の状態が設定される。その後、処理がステップＳ３０１に進められる。
【０４０１】
次に、全パリティグループの修復処理について説明する。
図５９は、全パリティグループ修復処理の手順を示すフローチャートである。以下、図５９に示す処理をステップ番号に沿って説明する。
【０４０２】
［ステップＳ３１１］ＲＡＩＤ制御部１３４ｂは、すべてのパリティグループについて、パリティグループ再計算処理が完了したか否かを判断する。すべてのパリティグループについてパリティグループ再計算処理が完了していれば、処理がステップＳ３１４に進められる。未処理のパリティグループがあれば処理がステップＳ３１２に進められる。
【０４０３】
［ステップＳ３１２］ＲＡＩＤ制御部１３４ｂは、パリティグループ再計算を行っていないパリティグループを１つ選択する。
［ステップＳ３１３］ＲＡＩＤ制御部１３４ｂは、パリティグループ再計算処理を行う。この処理の詳細は、図５４に示した通りである。その後、処理がステップＳ３１１に進められる。
【０４０４】
［ステップＳ３１４］ＲＡＩＤ制御部１３４ｂは、処理対象のストライプに含まれる全論理ブロックのデータまたはパリティデータを、その論理ブロックに対応する物理ブロックに書き込む。
【０４０５】
［ステップＳ３１５］ＲＡＩＤ制御部１３４ｂは、ステップＳ３１４における書き込み処理が完了したか否かを判断する。書き込みが完了した場合、処理がステップＳ３１６に進められる。書き込みが完了していなければステップＳ３１５の処理が繰り返され、ＲＡＩＤ制御部１３４ｂは書き込み待ち状態となる。
【０４０６】
［ステップＳ３１６］ＲＡＩＤ制御部１３４ｂは、ＨＤＤ２１０ｂ，２２０ｂ，２３０ｂ，２４０ｂ，２５０ｂにおけるディスクキャッシュを無効化する。
［ステップＳ３１７］ＲＡＩＤ制御部１３４ｂは、処理対象のストライプに含まれるすべての論理ブロックに対応する物理ブロックから、データまたはパリティデータを読み込む。
【０４０７】
［ステップＳ３１８］ＲＡＩＤ制御部１３４ｂは、ステップＳ３１７による読み込みが完了したか否かを判断する。読み込みが完了した場合、処理がステップＳ３１９に進められる。読み込みが完了していなければ、ＲＡＩＤ制御部１３４ｂは、ステップＳ３１８の処理を繰り返し、読み込み待ち状態となる。
【０４０８】
［ステップＳ３１９］ＲＡＩＤ制御部１３４ｂは、ステップＳ３１４における書き込みが正常に行われたか否かを判断する。具体的には、ＲＡＩＤ制御部１３４ｂは、ステップＳ３１４で書き込んだデータまたはパリティデータと、ステップＳ３１７で読み込んだデータまたはパリティデータとを比較する。比較の結果、データまたはパリティデータの内容が一致すれば、書き込みは正常に行われたと判断される。比較の結果、データまたはパリティデータの内容が不一致であれば、書き込みは正常に行われていないと判断される。
【０４０９】
書き込みが正常に行われなかった場合、処理がステップＳ３１４に進められ、再度書き込みが行われる。書き込みが正常に行われた場合、処理が終了する。
以上のように、タイムスタンプとカウンタとを併用することにより、ストライプ書き込み時の事前読み込みを行わずに済ませることができる。しかも、タイムスタンプのみを用いる場合に比べ、時系列情報（タイムスタンプ、フラグ、カウンタ値）の格納領域を小さくできる。すなわち、書き込み抜け検査のための付加的な情報の記憶領域をできる限り小さくし、かつ、ストライプ書き込み時の全データの読み込みを不要とすることができる。
【０４１０】
［その他の応用例］
上記の実施の形態はＲＡＩＤ５の例を用いて処理の詳細を説明したが、ＲＡＩＤ４にも同様に適用できる。
【０４１１】
図６０は、ＲＡＩＤ４における論理ブロックのＨＤＤへの割当例を示す図である。図６０ではデータが格納されるデータブロックの論理ブロック番号を、文字「Ｄ」と数字との結合で表している。また、パリティデータが格納されるパリティブロックの論理ブロック番号を、文字「Ｐ」と数字との結合で表している。割当表７０には、ディスク番号とブロック番号との交差する位置に、ディスク番号とブロック番号とで特定される物理ブロックに割り当てられた論理ブロックの論理ブロック番号が設定されている。図６０の例では、パリティグループ数が「５」、チャンク内ブロック数が「４」である。割当表７０の横に並んだブロック、が１つのパリティグループであるチャンクをパリティグループ数だけ集めたものがストライプ７１〜７４である。図６０では、ストライプ７１〜７４を太線の枠で囲っている。ＲＡＩＤ４では、各パリティグループにおけるパリティブロックは、すべて１つのＨＤＤに格納されている。
【０４１２】
このようにＲＡＩＤ４では、図８に示したＲＡＩＤ５のデータ割当と比較し、パリティブロックに割り当てる物理ブロックの所在が、１つのＨＤＤに統一されていることのみが異なる。すると、上記の第１〜第３の実施の形態の処理はそのままＲＡＩＤ４に適用することができる。
【０４１３】
また、上記の処理機能は、コンピュータによって実現することができる。
図６１は、本実施の形態に用いるコンピュータのハードウェア構成例を示す図である。コンピュータ３００は、ＣＰＵ（Central Processing Unit）３０１によって装置全体が制御されている。ＣＰＵ３０１には、バス３０９を介してＲＡＭ３０２と複数の周辺機器が接続されている。
【０４１４】
ＲＡＭ３０２は、コンピュータ３００の主記憶装置として使用される。ＲＡＭ３０２には、ＣＰＵ３０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ３０２には、ＣＰＵ３０１による処理に必要な各種データが格納される。
【０４１５】
バス３０９に接続されている周辺機器としては、ＨＤＤ３０３、グラフィック処理装置３０４、入力インタフェース３０５、光学ドライブ３０６、通信インタフェース３０７、およびディスクインタフェース３０８がある。
【０４１６】
ＨＤＤ３０３は、内蔵したディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ３０３は、コンピュータ３００の二次記憶装置として使用される。ＨＤＤ３０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、二次記憶装置としては、フラッシュメモリなどの半導体記憶装置を使用することもできる。
【０４１７】
グラフィック処理装置３０４には、モニタ８１が接続されている。グラフィック処理装置３０４は、ＣＰＵ３０１からの命令に従って、画像をモニタ８１の画面に表示させる。モニタ８１としては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置などがある。
【０４１８】
入力インタフェース３０５には、キーボード８２とマウス８３とが接続されている。入力インタフェース３０５は、キーボード８２やマウス８３から送られてくる信号をＣＰＵ３０１に送信する。なお、マウス８３は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【０４１９】
光学ドライブ３０６は、レーザ光などを利用して、光ディスク８４に記録されたデータの読み取りを行う。光ディスク８４は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク８４には、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。
【０４２０】
通信インタフェース３０７は、ネットワーク９０に接続されている。通信インタフェース３０７は、ネットワーク９０を介して、サーバ９１などの他のコンピュータとの間でデータの送受信を行う。
【０４２１】
ディスクインタフェース３０８は、ＲＡＩＤ５を実現するための複数のＨＤＤ２１０，２２０，２３０，２４０が接続されている。ディスクインタフェース３０８は、ＨＤＤ２１０，２２０，２３０，２４０へのデータの入出力を制御する。
【０４２２】
この場合、ＲＩＡＩＤ装置が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。その場合、図１に示した読み込み手段１、パリティデータ生成手段２、時系列情報生成手段３、時系列情報付与手段４、書き込み手段５、比較手段６、修復手段７、およびデータ出力手段８は、コンピュータ３００が有することとなる。
【０４２３】
処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／ＲＷなどがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disc）などがある。
【０４２４】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０４２５】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０４２６】
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の２以上の構成を組み合わせたものであってもよい。
【０４２７】
以上説明した実施の形態の主な技術的特徴は、以下の付記の通りである。
（付記１）  複数のストレージ装置内の記憶領域を複数の単位記憶領域に分割し、複数のデータと前記複数のデータに基づいて生成されるパリティデータとをパリティグループとし、同一パリティグループ内の前記データと前記パリティデータとを前記複数のストレージ装置内の単位記憶領域に分散格納するディスクアレイ装置において、
更新データを含む書き込み要求に応じて、前記更新データが属するパリティグループの更新後パリティデータを生成するパリティデータ生成手段と、
前記更新データを書き込むべき単位記憶領域に格納されている既存データと、前記更新データとの間の書き込み時の前後関係を示す時系列情報を生成する時系列情報生成手段と、
前記書き込み要求に応じて生成された前記時系列情報を証明用時系列情報として前記更新データに付与すると共に、前記証明用時系列情報と同じ値の比較用時系列情報を前記更新データに関連付けて前記更新後パリティデータに付与する時系列情報付与手段と、
前記証明用時系列情報が付与された前記更新データと前記比較用時系列情報が付与された前記更新後パリティデータとを、前記複数のストレージ装置に分散して書き込む書き込み手段と、
を有することを特徴とするディスクアレイ装置。
【０４２８】
（付記２）  さらに、
前記更新データを指定した読み込み要求に応じて、前記証明用時系列情報付きの前記更新データと、前記更新データに関連付けられた前記比較用時系列情報付きの前記更新後パリティデータとを、前記複数のストレージ装置から読み込む読み込み手段と、
前記更新データの前記証明用時系列情報と、前記更新データに関連付けられた前記比較用時系列情報とを比較する比較手段と、
前記証明用時系列情報と前記比較用時系列情報とが一致した場合、前記更新データを出力するデータ出力手段と、
を有することを特徴とする付記１記載のディスクアレイ装置。
【０４２９】
（付記３）  前記時系列情報生成手段は、前記時系列情報として、前記書き込み要求の入力順が後である程大きな値を生成し、
さらに、
前記比較手段の比較の結果、前記証明用時系列情報の値が、前記更新データに関連付けられた前記比較用時系列情報より小さい場合、前記更新データが属するパリティグループ内の他のデータを前記複数のストレージ装置から読み込み、前記他のデータと前記更新後パリティデータとを用いて前記更新データを修復する修復手段を有し、
前記データ出力手段は、前記更新データの修復が行われた場合、修復後の前記更新データを出力することを特徴とする付記２記載のディスクアレイ装置。
【０４３０】
（付記４）  前記時系列情報付与手段は、前記更新データが修復された場合、前記更新データに関連付けて前記更新後パリティデータに付与された前記比較用時系列情報を、修復後の前記更新データに付与し、
前記書き込み手段は、前記比較用時系列情報が付与された修復後の前記更新データを、前記複数のストレージ装置内の読み込み元の単位記憶領域に書き戻すことを特徴とする付記３記載のディスクアレイ装置。
【０４３１】
（付記５）  さらに、
前記読み込み手段は、前記更新データの前記証明用時系列情報の値が、前記更新データに関連付けて前記更新後パリティデータに付与された前記比較用時系列情報より大きい場合、前記更新データが属するパリティグループ内の他のデータを、前記他のデータの書き込み時に生成された前記証明用時系列情報付きで前記複数のストレージ装置から読み込み、
前記修復手段は、前記他のデータと前記更新データとを用いて前記更新後パリティデータを修復し、
前記時系列情報付与手段は、前記更新後パリティデータが修復された場合、前記更新データが属するパリティグループ内の複数のデータそれぞれの前記証明用時系列情報と同じ値の前記比較用時系列情報を、修復された前記更新後パリティデータに付与し、
前記書き込み手段は、前記更新後パリティデータが修復された場合、複数の前記比較用時系列情報が付与された修復後の前記更新後パリティデータを、前記複数のストレージ装置内の読み込み元の単位記憶領域に書き戻すことを特徴とする付記３記載のディスクアレイ装置。
【０４３２】
（付記６）  前記時系列情報生成手段は、前記時系列情報として、前記書き込み要求の入力時刻を示すタイムスタンプを生成することを特徴とする付記３記載のディスクアレイ装置。
【０４３３】
（付記７）  前記パリティデータ生成手段は、前記書き込み要求が１以上のパリティグループ内のすべてのデータの書き込みを指示するストライプ書き込み要求の場合、前記書き込み要求で指定された複数の更新データに基づいて前記更新後パリティデータを生成し、
前記時系列情報付与手段は、前記書き込み要求が前記ストライプ書き込み要求の場合、前記複数の更新データそれぞれに対して同じ値の前記証明用時系列情報を付与し、生成された前記更新後パリティデータに対して、前記更新後パリティデータと同じパリティグループ内の前記複数の更新データそれぞれに対応する前記比較用時系列情報を付与することを特徴とする付記１記載のディスクアレイ装置。
【０４３４】
（付記８）  さらに、
前記書き込み要求が１つの単位記憶領域への書き込みを指示するブロック書き込み要求の場合、前記書き込み要求に応じて、前記更新データを書き込むべき単位記憶領域に格納された前記既存データと、前記更新データと同じパリティグループに属する既存パリティデータとを、前記複数のストレージ装置から読み込む読み込み手段を有し、
前記パリティデータ生成手段は、前記既存データ、前記更新データ、および前記既存パリティデータを用いて、前記更新後パリティデータを生成することを特徴とする付記１記載のディスクアレイ装置。
【０４３５】
（付記９）  前記時系列情報生成手段は、前記時系列情報として、前記既存データに付与されていた前記証明用時系列情報の値をカウントアップした値を生成することを特徴とする付記８記載のディスクアレイ装置。
【０４３６】
（付記１０）  前記時系列情報生成手段は、前記既存データに付与されていた前記証明用時系列情報の値が所定の最大値の場合、所定の初期値を前記時系列情報とすることを特徴とする付記９記載のディスクアレイ装置。
【０４３７】
（付記１１）  前記読み込み手段は、前記更新データを指定した読み込み要求に応じて、前記証明用時系列情報付きの前記更新データと、前記更新データに関連付けられた前記比較用時系列情報付きの前記更新後パリティデータとを、前記複数のストレージ装置から読み込み、
さらに、
前記更新データの前記証明用時系列情報と、前記更新データに関連付けられた前記比較用時系列情報とを比較する比較手段と、
前記比較手段による比較の結果、前記更新データの前記証明用時系列情報の値が、前記更新データに関連付けて前記更新後パリティデータに付与された前記比較用時系列情報のカウントアップ前の値である場合、前記更新データが属するパリティグループ内の他のデータを前記複数のストレージ装置から読み込み、前記他のデータと前記更新後パリティデータとを用いて前記更新データを修復する修復手段と、
前記証明用時系列情報と前記比較用時系列情報とが一致した場合、前記複数のストレージ装置から読み込んだ前記更新データを出力し、前記更新データの修復が行われた場合、修復後の前記更新データを出力するデータ出力手段とを有することを特徴とする付記１０記載のディスクアレイ装置。
【０４３８】
（付記１２）  前記読み込み手段は、前記読み込み要求に応じて読み込んだ前記更新データの前記証明用時系列情報の値が、前記更新データに関連付けて前記更新後パリティデータに付与された前記比較用時系列情報のカウントアップ後の値の場合、前記更新データが属するパリティグループ内の他のデータを前記証明用時系列情報付きで前記複数のストレージ装置から読み込み、
前記修復手段は、前記他のデータと前記更新データとを用いて前記更新後パリティデータを修復し、
前記時系列情報付与手段は、前記更新後パリティデータが修復された場合、前記更新データと前記他のデータとのそれぞれに付与された複数の前記証明用時系列情報と同じ値の前記比較用時系列情報を、修復された前記更新後パリティデータに付与し、
前記書き込み手段は、前記更新後パリティデータが修復された場合、複数の前記比較用時系列情報が付与された修復後の前記更新後パリティデータを、前記複数のストレージ装置内の読み込み元の単位記憶領域に書き戻すことを特徴とする付記１１記載のディスクアレイ装置。
【０４３９】
（付記１３）  前記時系列情報生成手段は、
前記書き込み要求が前記ブロック書き込み要求の場合、前記時系列情報として、前記書き込み要求の入力順が後である程大きな値の第１の時系列情報と、前記既存データに付与されていた前記証明用時系列情報の値をカウントアップした値の第２の時系列情報とを生成し、
前記書き込み要求が１以上のパリティグループ内のすべてのデータの書き込みを指示するストライプ書き込み要求の場合、前記時系列情報として前記第１の時系列情報と、所定の初期値の前記第２の時系列情報とを生成し、
前記時系列情報付与手段は、
前記書き込み要求が前記ブロック書き込み要求の場合、前記第１の時系列情報と前記第２の時系列情報とを含む前記証明用時系列情報と、前記第２の時系列情報が比較対象であることを示す第１のフラグとを前記更新データに付与すると共に、前記第２の時系列情報を含む前記比較用時系列情報と前記第１のフラグとを前記更新データに関連付けて前記更新後パリティデータに付与し、
前記書き込み要求が前記ストライプ書き込み要求の場合、前記第１の時系列情報が比較対象であることを示す第２のフラグ、前記第１の時系列情報、および前記第２の時系列情報を含む前記証明用時系列情報を前記更新データに付与すると共に、前記更新データに関連付けられた前記第２のフラグと前記第２の時系列情報との組み、および前記第１の時系列情報を含む前記証明用時系列情報を前記更新後パリティデータに付与することを特徴とする付記８記載のディスクアレイ装置。
【０４４０】
（付記１４）  前記読み込み手段は、前記更新データを指定した読み込み要求に応じて、前記証明用時系列情報付きの前記更新データと、前記更新データに関連付けられた前記比較用時系列情報付きの前記更新後パリティデータとを、前記複数のストレージ装置から読み込み、
さらに、
前記更新データの前記証明用時系列情報と、前記更新データに関連付けて前記更新後パリティデータに付与された前記比較用時系列情報とが共に前記第１のフラグを有する場合、前記証明用時系列情報と前記比較用時系列情報とのそれぞれの前記第２の時系列情報を比較し、前記更新データの前記証明用時系列情報と、前記更新データに関連付けて前記更新後パリティデータに付与された前記比較用時系列情報とが共に前記第２のフラグを有する場合、前記証明用時系列情報と前記比較用時系列情報とのそれぞれの前記第１の時系列情報を比較する比較手段と、
比較の結果、値が一致した場合、前記更新データを出力するデータ出力手段と、
を有することを特徴とする付記１３記載のディスクアレイ装置。
【０４４１】
（付記１５）  複数のストレージ装置内の記憶領域を複数の単位記憶領域に分割し、複数のデータと前記複数のデータに基づいて生成されるパリティデータとをパリティグループとし、同一パリティグループ内の前記データと前記パリティデータとを前記複数のストレージ装置内の単位記憶領域に分散格納するデータ分散管理方法において、
更新データを含む書き込み要求に応じて、前記更新データが属するパリティグループの更新後パリティデータを生成し、
前記更新データを書き込むべき単位記憶領域に格納されている既存データと、前記更新データとの間の書き込み時の前後関係を示す時系列情報を生成し、
前記書き込み要求に応じて生成された前記時系列情報を証明用時系列情報として前記更新データに付与すると共に、前記証明用時系列情報と同じ値の比較用時系列情報を前記更新データに関連付けて前記更新後パリティデータに付与し、
前記証明用時系列情報が付与された前記更新データと前記比較用時系列情報が付与された前記更新後パリティデータとを、前記複数のストレージ装置に分散して書き込む、
ことを特徴とするデータ分散管理方法。
【０４４２】
（付記１６）  複数のストレージ装置内の記憶領域を複数の単位記憶領域に分割し、複数のデータと前記複数のデータに基づいて生成されるパリティデータとをパリティグループとし、同一パリティグループ内の前記データと前記パリティデータとを前記複数のストレージ装置内の単位記憶領域に分散格納するデータ分散管理を、コンピュータに実行させるためのデータ分散管理プログラムにおいて、
前記コンピュータに、
更新データを含む書き込み要求に応じて、前記更新データが属するパリティグループの更新後パリティデータを生成し、
前記更新データを書き込むべき単位記憶領域に格納されている既存データと、前記更新データとの間の書き込み時の前後関係を示す時系列情報を生成し、
前記書き込み要求に応じて生成された前記時系列情報を証明用時系列情報として前記更新データに付与すると共に、前記証明用時系列情報と同じ値の比較用時系列情報を前記更新データに関連付けて前記更新後パリティデータに付与し、
前記証明用時系列情報が付与された前記更新データと前記比較用時系列情報が付与された前記更新後パリティデータとを、前記複数のストレージ装置に分散して書き込む、
処理を実行させることを特徴とするデータ分散管理プログラム。
【符号の説明】
【０４４３】
１  読み込み手段
２  パリティデータ生成手段
３  時系列情報生成手段
４  時系列情報付与手段
５  書き込み手段
６  比較手段
７  修復手段
８  データ出力手段
９ａ，９ｂ，９ｃ  書き込み要求
１１〜１４  ストレージ装置
１１ａ，１２ａ，１３ａ，１４ａ  ブロック
【図１】
2010182087.tif 000003
【図２】
2010182087.tif 000004
【図３】
2010182087.tif 000005
【図４】
2010182087.tif 000006
【図５】
2010182087.tif 000007
【図６】
2010182087.tif 000008
【図７】
2010182087.tif 000009
【図８】
2010182087.tif 000010
【図９】
2010182087.tif 000011
【図１０】
2010182087.tif 000012
【図１１】
2010182087.tif 000013
【図１２】
2010182087.tif 000014
【図１３】
2010182087.tif 000015
【図１４】
2010182087.tif 000016
【図１５】
2010182087.tif 000017
【図１６】
2010182087.tif 000018
【図１７】
2010182087.tif 000019
【図１８】
2010182087.tif 000020
【図１９】
2010182087.tif 000021
【図２０】
2010182087.tif 000022
【図２１】
2010182087.tif 000023
【図２２】
2010182087.tif 000024
【図２３】
2010182087.tif 000025
【図２４】
2010182087.tif 000026
【図２５】
2010182087.tif 000027
【図２６】
2010182087.tif 000028
【図２７】
2010182087.tif 000029
【図２８】
2010182087.tif 000030
【図２９】
2010182087.tif 000031
【図３０】
2010182087.tif 000032
【図３１】
2010182087.tif 000033
【図３２】
2010182087.tif 000034
【図３３】
2010182087.tif 000035
【図３４】
2010182087.tif 000036
【図３５】
2010182087.tif 000037
【図３６】
2010182087.tif 000038
【図３７】
2010182087.tif 000039
【図３８】
2010182087.tif 000040
【図３９】
2010182087.tif 000041
【図４０】
2010182087.tif 000042
【図４１】
2010182087.tif 000043
【図４２】
2010182087.tif 000044
【図４３】
2010182087.tif 000045
【図４４】
2010182087.tif 000046
【図４５】
2010182087.tif 000047
【図４６】
2010182087.tif 000048
【図４７】
2010182087.tif 000049
【図４８】
2010182087.tif 000050
【図４９】
2010182087.tif 000051
【図５０】
2010182087.tif 000052
【図５１】
2010182087.tif 000053
【図５２】
2010182087.tif 000054
【図５３】
2010182087.tif 000055
【図５４】
2010182087.tif 000056
【図５５】
2010182087.tif 000057
【図５６】
2010182087.tif 000058
【図５７】
2010182087.tif 000059
【図５８】
2010182087.tif 000060
【図５９】
2010182087.tif 000061
【図６０】
2010182087.tif 000062
【図６１】
2010182087.tif 000063