図面 (/)

技術 ディスクアレイ装置、データ分散管理方法、およびデータ分散管理プログラム

出願人 富士通株式会社
発明者 野口泰生荻原一隆田村雅寿土屋芳浩丸山哲太郎渡辺高志熊野達夫大江和一
出願日 2009年2月5日 (11年2ヶ月経過) 出願番号 2009-024951
公開日 2010年8月19日 (9年8ヶ月経過) 公開番号 2010-182087
状態 特許登録済
技術分野 外部記憶装置との入出力 エラーの検出訂正
主要キーワード 不整合箇所 比較対象情報 割当関係 単位記憶領域 読み込み元 修復対象 内ブロック データ書き込み対象
関連する未来課題
重要な関連分野

この項目の情報は公開日時点(2010年8月19日)のものです。
また、この項目は機械的に抽出しているため、正しく解析できていない場合があります

図面 (20)

課題

論理ブロック内のデータ更新時に1つの物理ブロック内のデータが更新される場合であっても、データの読み込み時に書き込み抜けの検出を可能とする。

解決手段

書き込み要求に応じて、読み込み手段1が、既存データ、およびパリティデータを読み込む。次に、パリティデータ生成手段2が、新たなパリティデータを生成する。さらに、時系列情報生成手段3が、同じ記憶領域への直前の書き込み要求と、今回の書き込み要求とを識別可能な時系列情報を生成する。生成された時系列情報は、時系列情報付与手段4により、更新データとパリティデータとに付与される。そして、書き込み手段5により、証明用時系列情報が付与された更新データと比較用時系列情報が付与されたパリティデータとを、異なるストレージ装置に書き込まれる。

概要

背景

コンピュータには、大容量の記憶装置としてハードディスク装置(HDD:Hard Disk Drive)が利用される。HDDには用途に応じて様々なデータが格納され、高い信頼性が求められる。複数のHDDが実装されたディスクアレイ装置では、各種の信頼性向上技術が利用されている。

例えば、HDDの信頼性を高める技術として、RAID(Redundant Arrays of Inexpensive Disks)がある。RAIDは、複数のHDDをまとめて1台のハードディスクとして機能させ、データ入出力高速化や信頼性の向上を図る技術である。RAIDを用いたディスクアレイ装置はRAID装置と呼ばれる。

RAIDを用いた信頼性向上技術には、様々な応用技術が考えられている。例えば、ディスク故障時にデータ不正箇所を特定する技術として、異なるHDD内の複数の記録領域へのデータ書き込み時に、同一のアクセス履歴情報を格納する技術がある。このアクセス履歴情報を用いることで、RAID6におけるHDD故障時のデータ不整合箇所の特定が可能となる。

RAIDを用いると、HDDの故障に限らず、個々のデータアクセスの異常についても異常の検出および訂正が可能である。HDDにおけるデータアクセスの異常には、データが装置内で変化する異常、データがディスク装置上の間違った場所に書かれる異常、データが書かれずに正常に書かれたとして応答する異常(書き込み抜け)がある。

RAID装置では、データアクセス異常に対処するため、データにECC(Error Correcting Code)を付加して書き込みを行う。そしてRAID装置は、読み込み時にECCを用いて異常を検出する。もし、書き込まれたデータが変化していれば、ECCによるチェックエラーが検出される。異常が検出されると、RAID装置は、パリティデータなどを用いてデータを訂正する。これにより、装置内でデータが変化する異常に関して、異常の検出・訂正が可能となる。

なお、データを間違った場所に書く異常に関しては、ECCでは検出できない。そこでRAID装置は、例えばデータにアドレス情報を付加して書き込みを行う。RAID装置は、データの読み込み時に、データの付加されていたアドレスをチェックする。読み込み対象領域のアドレスと、データに付加されていたアドレスとが異なっていれば、データが誤った場所に書き込まれたことが判断できる。すなわち、データを間違った場所に書く異常を検出できる。このような異常が検出された場合、RAID装置は、パリティデータを用いて元のデータの再構成修復を行う。

このようにRAID装置は、装置内でデータが変化した場合や、データが間違った場所に書き込まれた場合については、データ読み込み時に異常を検出し、元のデータを修復することができる。

ただし、RAID装置であっても、書き込み抜けに関しては、そのデータ読み込み時に異常を検出することができない。なぜならば書き込み抜けの場合、該当ブロックには以前に書かれた正しいデータが存在しているためである。そのため、データ読み込み時にECCをチェックしても正常と判定され、アドレスをチェックしても正常と判定される。その結果、ECCやアドレスのチェックでは、データ読み込み時に異常を検出することはできない。

そこで従来のRAID装置では、データ書き込み直後に書き込んだデータを読み取り、書き込んだデータと読み取ったデータとを比較する。なお、ここで言うデータ書き込み直後とは、データ書き込み処理完了応答ホストコンピュータ通知する前である。データ書き込み処理の完了前であれば、書き込み対象のデータをRAID装置のコントローラが保持しており、読み込んだデータとの比較が可能である。このようなデータ書き込み処理完了前のデータ比較により書き込みが正しく実行されたことを確認できる。

ただし、この方法では書き込み処理一貫として、データのHDDへの書き込みと読み込みとを行うことが前提のため、ライトキャッシュを使用することができない。またデータの書き込み直後に該当ブロックからデータを読み出すには、ディスクが1回転する分の回転待ちが生じる。そのため、書き込み時のホストコンピュータへの応答時間が長期化する。その結果、書き込み性能が低下してしまう。

なお、RAID3でデータを管理するRAID装置であれば、各物理ブロックにデータと同時にタイムスタンプを記録することにより、読み込み時にタイムスタンプを比較することで書き込み抜けを検出することができる。RAID3は1つの論理ブロックが複数のHDDの物理ブロックに分散格納される。すなわち、RAID3では、複数のHDDそれぞれの複数の物理ブロックによって、1つの論理ブロックが構成される。そのため、論理ブロックのデータの書き込みがあると、常に複数の物理ブロックに同時にデータ書き込みが行われる。そこで、RAID装置は、論理ブロックを構成する各物理ブロックへのデータ書き込みと同時に、同一のタイムスタンプを、書き込み対象のすべての物理ブロックに同時に書き込む。そして、RAID装置は、データの読み込み時にはすべての物理ブロックから同時にタイムスタンプを読み込み、それらを比較する。このときタイムスタンプの異なる物理ブロックが存在すれば、書き込み抜けがあったことが分かる。

概要

論理ブロック内のデータ更新時に1つの物理ブロック内のデータが更新される場合であっても、データの読み込み時に書き込み抜けの検出を可能とする。書き込み要求に応じて、読み込み手段1が、既存データ、およびパリティデータを読み込む。次に、パリティデータ生成手段2が、新たなパリティデータを生成する。さらに、時系列情報生成手段3が、同じ記憶領域への直前の書き込み要求と、今回の書き込み要求とを識別可能な時系列情報を生成する。生成された時系列情報は、時系列情報付与手段4により、更新データとパリティデータとに付与される。そして、書き込み手段5により、証明用時系列情報が付与された更新データと比較用時系列情報が付与されたパリティデータとを、異なるストレージ装置に書き込まれる。

目的

本発明はこのような点に鑑みてなされたものであり、論理ブロック内のデータ更新時に1つの物理ブロック内のデータが更新される場合であっても、データの読み込み時に書き込み抜けの検出が可能なディスクアレイ装置、データ分散管理方法、およびデータ分散管理プログラムを提供する

効果

実績

技術文献被引用数
0件
牽制数
2件

この技術が所属する分野

ライセンス契約や譲渡などの可能性がある特許掲載中! 開放特許随時追加・更新中 詳しくはこちら

請求項1

複数のストレージ装置内の記憶領域を複数の単位記憶領域に分割し、複数のデータと前記複数のデータに基づいて生成されるパリティデータとをパリティグループとし、同一パリティグループ内の前記データと前記パリティデータとを前記複数のストレージ装置内の単位記憶領域に分散格納するディスクアレイ装置において、更新データを含む書き込み要求に応じて、前記更新データが属するパリティグループの更新後パリティデータを生成するパリティデータ生成手段と、前記更新データを書き込むべき単位記憶領域に格納されている既存データと、前記更新データとの間の書き込み時の前後関係を示す時系列情報を生成する時系列情報生成手段と、前記書き込み要求に応じて生成された前記時系列情報を証明用時系列情報として前記更新データに付与すると共に、前記証明用時系列情報と同じ値の比較用時系列情報を前記更新データに関連付けて前記更新後パリティデータに付与する時系列情報付与手段と、前記証明用時系列情報が付与された前記更新データと前記比較用時系列情報が付与された前記更新後パリティデータとを、前記複数のストレージ装置に分散して書き込む書き込み手段と、を有することを特徴とするディスクアレイ装置。

請求項2

さらに、前記更新データを指定した読み込み要求に応じて、前記証明用時系列情報付きの前記更新データと、前記更新データに関連付けられた前記比較用時系列情報付きの前記更新後パリティデータとを、前記複数のストレージ装置から読み込む読み込み手段と、前記更新データの前記証明用時系列情報と、前記更新データに関連付けられた前記比較用時系列情報とを比較する比較手段と、前記証明用時系列情報と前記比較用時系列情報とが一致した場合、前記更新データを出力するデータ出力手段と、を有することを特徴とする請求項1記載のディスクアレイ装置。

請求項3

前記時系列情報生成手段は、前記時系列情報として、前記書き込み要求の入力順が後である程大きな値を生成し、さらに、前記比較手段の比較の結果、前記証明用時系列情報の値が、前記更新データに関連付けられた前記比較用時系列情報より小さい場合、前記更新データが属するパリティグループ内の他のデータを前記複数のストレージ装置から読み込み、前記他のデータと前記更新後パリティデータとを用いて前記更新データを修復する修復手段を有し、前記データ出力手段は、前記更新データの修復が行われた場合、修復後の前記更新データを出力することを特徴とする請求項2記載のディスクアレイ装置。

請求項4

さらに、前記書き込み要求が1つの単位記憶領域への書き込みを指示するブロック書き込み要求の場合、前記書き込み要求に応じて、前記更新データを書き込むべき単位記憶領域に格納された前記既存データと、前記更新データと同じパリティグループに属する既存パリティデータとを、前記複数のストレージ装置から読み込む読み込み手段を有し、前記パリティデータ生成手段は、前記既存データ、前記更新データ、および前記既存パリティデータを用いて、前記更新後パリティデータを生成することを特徴とする請求項1記載のディスクアレイ装置。

請求項5

前記時系列情報生成手段は、前記書き込み要求が前記ブロック書き込み要求の場合、前記時系列情報として、前記書き込み要求の入力順が後である程大きな値の第1の時系列情報と、前記既存データに付与されていた前記証明用時系列情報の値をカウントアップした値の第2の時系列情報とを生成し、前記書き込み要求が1以上のパリティグループ内のすべてのデータの書き込みを指示するストライプ書き込み要求の場合、前記時系列情報として前記第1の時系列情報と、所定の初期値の前記第2の時系列情報とを生成し、前記時系列情報付与手段は、前記書き込み要求が前記ブロック書き込み要求の場合、前記第1の時系列情報と前記第2の時系列情報とを含む前記証明用時系列情報と、前記第2の時系列情報が比較対象であることを示す第1のフラグとを前記更新データに付与すると共に、前記第2の時系列情報を含む前記比較用時系列情報と前記第1のフラグとを前記更新データに関連付けて前記更新後パリティデータに付与し、前記書き込み要求が前記ストライプ書き込み要求の場合、前記第1の時系列情報が比較対象であることを示す第2のフラグ、前記第1の時系列情報、および前記第2の時系列情報を含む前記証明用時系列情報を前記更新データに付与すると共に、前記更新データに関連付けられた前記第2のフラグと前記第2の時系列情報との組み、および前記第1の時系列情報を含む前記証明用時系列情報を前記更新後パリティデータに付与することを特徴とする請求項4記載のディスクアレイ装置。

請求項6

複数のストレージ装置内の記憶領域を複数の単位記憶領域に分割し、複数のデータと前記複数のデータに基づいて生成されるパリティデータとをパリティグループとし、同一パリティグループ内の前記データと前記パリティデータとを前記複数のストレージ装置内の単位記憶領域に分散格納するデータ分散管理方法において、更新データを含む書き込み要求に応じて、前記更新データが属するパリティグループの更新後パリティデータを生成し、前記更新データを書き込むべき単位記憶領域に格納されている既存データと、前記更新データとの間の書き込み時の前後関係を示す時系列情報を生成し、前記書き込み要求に応じて生成された前記時系列情報を証明用時系列情報として前記更新データに付与すると共に、前記証明用時系列情報と同じ値の比較用時系列情報を前記更新データに関連付けて前記更新後パリティデータに付与し、前記証明用時系列情報が付与された前記更新データと前記比較用時系列情報が付与された前記更新後パリティデータとを、前記複数のストレージ装置に分散して書き込む、ことを特徴とするデータ分散管理方法。

請求項7

複数のストレージ装置内の記憶領域を複数の単位記憶領域に分割し、複数のデータと前記複数のデータに基づいて生成されるパリティデータとをパリティグループとし、同一パリティグループ内の前記データと前記パリティデータとを前記複数のストレージ装置内の単位記憶領域に分散格納するデータ分散管理を、コンピュータに実行させるためのデータ分散管理プログラムにおいて、前記コンピュータに、更新データを含む書き込み要求に応じて、前記更新データが属するパリティグループの更新後パリティデータを生成し、前記更新データを書き込むべき単位記憶領域に格納されている既存データと、前記更新データとの間の書き込み時の前後関係を示す時系列情報を生成し、前記書き込み要求に応じて生成された前記時系列情報を証明用時系列情報として前記更新データに付与すると共に、前記証明用時系列情報と同じ値の比較用時系列情報を前記更新データに関連付けて前記更新後パリティデータに付与し、前記証明用時系列情報が付与された前記更新データと前記比較用時系列情報が付与された前記更新後パリティデータとを、前記複数のストレージ装置に分散して書き込む、処理を実行させることを特徴とするデータ分散管理プログラム。

技術分野

0001

本発明はパリティグループ内のデータとパリティデータとを複数のストレージ装置内のブロックに分散格納するディスクアレイ装置、データ分散管理方法、およびデータ分散管理プログラムに関する。

背景技術

0002

コンピュータには、大容量の記憶装置としてハードディスク装置(HDD:Hard Disk Drive)が利用される。HDDには用途に応じて様々なデータが格納され、高い信頼性が求められる。複数のHDDが実装されたディスクアレイ装置では、各種の信頼性向上技術が利用されている。

0003

例えば、HDDの信頼性を高める技術として、RAID(Redundant Arrays of Inexpensive Disks)がある。RAIDは、複数のHDDをまとめて1台のハードディスクとして機能させ、データ入出力高速化や信頼性の向上を図る技術である。RAIDを用いたディスクアレイ装置はRAID装置と呼ばれる。

0004

RAIDを用いた信頼性向上技術には、様々な応用技術が考えられている。例えば、ディスク故障時にデータ不正箇所を特定する技術として、異なるHDD内の複数の記録領域へのデータ書き込み時に、同一のアクセス履歴情報を格納する技術がある。このアクセス履歴情報を用いることで、RAID6におけるHDD故障時のデータ不整合箇所の特定が可能となる。

0005

RAIDを用いると、HDDの故障に限らず、個々のデータアクセスの異常についても異常の検出および訂正が可能である。HDDにおけるデータアクセスの異常には、データが装置内で変化する異常、データがディスク装置上の間違った場所に書かれる異常、データが書かれずに正常に書かれたとして応答する異常(書き込み抜け)がある。

0006

RAID装置では、データアクセス異常に対処するため、データにECC(Error Correcting Code)を付加して書き込みを行う。そしてRAID装置は、読み込み時にECCを用いて異常を検出する。もし、書き込まれたデータが変化していれば、ECCによるチェックエラーが検出される。異常が検出されると、RAID装置は、パリティデータなどを用いてデータを訂正する。これにより、装置内でデータが変化する異常に関して、異常の検出・訂正が可能となる。

0007

なお、データを間違った場所に書く異常に関しては、ECCでは検出できない。そこでRAID装置は、例えばデータにアドレス情報を付加して書き込みを行う。RAID装置は、データの読み込み時に、データの付加されていたアドレスをチェックする。読み込み対象領域のアドレスと、データに付加されていたアドレスとが異なっていれば、データが誤った場所に書き込まれたことが判断できる。すなわち、データを間違った場所に書く異常を検出できる。このような異常が検出された場合、RAID装置は、パリティデータを用いて元のデータの再構成修復を行う。

0008

このようにRAID装置は、装置内でデータが変化した場合や、データが間違った場所に書き込まれた場合については、データ読み込み時に異常を検出し、元のデータを修復することができる。

0009

ただし、RAID装置であっても、書き込み抜けに関しては、そのデータ読み込み時に異常を検出することができない。なぜならば書き込み抜けの場合、該当ブロックには以前に書かれた正しいデータが存在しているためである。そのため、データ読み込み時にECCをチェックしても正常と判定され、アドレスをチェックしても正常と判定される。その結果、ECCやアドレスのチェックでは、データ読み込み時に異常を検出することはできない。

0010

そこで従来のRAID装置では、データ書き込み直後に書き込んだデータを読み取り、書き込んだデータと読み取ったデータとを比較する。なお、ここで言うデータ書き込み直後とは、データ書き込み処理完了応答ホストコンピュータ通知する前である。データ書き込み処理の完了前であれば、書き込み対象のデータをRAID装置のコントローラが保持しており、読み込んだデータとの比較が可能である。このようなデータ書き込み処理完了前のデータ比較により書き込みが正しく実行されたことを確認できる。

0011

ただし、この方法では書き込み処理一貫として、データのHDDへの書き込みと読み込みとを行うことが前提のため、ライトキャッシュを使用することができない。またデータの書き込み直後に該当ブロックからデータを読み出すには、ディスクが1回転する分の回転待ちが生じる。そのため、書き込み時のホストコンピュータへの応答時間が長期化する。その結果、書き込み性能が低下してしまう。

0012

なお、RAID3でデータを管理するRAID装置であれば、各物理ブロックにデータと同時にタイムスタンプを記録することにより、読み込み時にタイムスタンプを比較することで書き込み抜けを検出することができる。RAID3は1つの論理ブロックが複数のHDDの物理ブロックに分散格納される。すなわち、RAID3では、複数のHDDそれぞれの複数の物理ブロックによって、1つの論理ブロックが構成される。そのため、論理ブロックのデータの書き込みがあると、常に複数の物理ブロックに同時にデータ書き込みが行われる。そこで、RAID装置は、論理ブロックを構成する各物理ブロックへのデータ書き込みと同時に、同一のタイムスタンプを、書き込み対象のすべての物理ブロックに同時に書き込む。そして、RAID装置は、データの読み込み時にはすべての物理ブロックから同時にタイムスタンプを読み込み、それらを比較する。このときタイムスタンプの異なる物理ブロックが存在すれば、書き込み抜けがあったことが分かる。

先行技術

0013

特開2008−71297号公報
特開平9−305328号公報

発明が解決しようとする課題

0014

しかし、RAID5のRAID装置の場合、RAID3と同じ方法では、データの読み込み時に書き込み抜けを検出することができないという問題点がある。すなわち、RAID5は論理ブロックと物理ブロックが1対1で対応しており、それぞれの物理ブロックは個別に更新される。そのためRAID3のように、論理ブロックへのデータ書き込み時に、データを書き込むべき物理ブロックが1つしか存在せず、複数の物理ブロックに共通なタイムスタンプを書き込むという処理ができない。

0015

このような問題は、RAID5を用いたRAID装置に限らず、1つの論理ブロックのデータが1つの物理ブロックにしか書き込まれないようなデータ書き込み制御を行うディスクアレイ装置に共通の問題である。

0016

本発明はこのような点に鑑みてなされたものであり、論理ブロック内のデータ更新時に1つの物理ブロック内のデータが更新される場合であっても、データの読み込み時に書き込み抜けの検出が可能なディスクアレイ装置、データ分散管理方法、およびデータ分散管理プログラムを提供することを目的とする。

課題を解決するための手段

0017

上記課題を解決するために、以下のようなディスクアレイ装置が提供される。
ディスクアレイ装置は、複数のストレージ装置内の記憶領域を複数の単位記憶領域に分割し、複数のデータと複数のデータに基づいて生成されるパリティデータとをパリティグループとし、同一パリティグループ内のデータとパリティデータとを複数のストレージ装置内の単位記憶領域に分散格納するものである。このディスクアレイ装置は、パリティデータ生成手段、時系列情報生成手段、時系列情報付与手段、および書き込み手段を有する。パリティデータ生成手段は、更新データを含む書き込み要求に応じて、更新データが属するパリティグループの更新後パリティデータを生成する。時系列情報生成手段は、更新データを書き込むべき単位記憶領域に格納されている既存データと、更新データとの間の書き込み時の前後関係を示す時系列情報を生成する。時系列情報付与手段は、書き込み要求に応じて生成された時系列情報を証明用時系列情報として更新データに付与すると共に、証明用時系列情報と同じ値の比較用時系列情報を更新データに関連付けて更新後パリティデータに付与する。書き込み手段は、証明用時系列情報が付与された更新データと比較用時系列情報が付与された更新後パリティデータとを、複数のストレージ装置に分散して書き込む。

発明の効果

0018

上記ストレージ装置によれば、書き込み抜けの検出をデータの読み込み時に行うことが可能となる。

図面の簡単な説明

0019

実施の形態の概要を示す図である。
本実施の形態のシステム構成例を示す図である。
HDDのフォーマットを示す図である。
RAID5におけるパリティグループの論理ブロックと物理ブロックとの関係を示す図である。
データおよびパリティデータに設定されるタイムスタンプの例を示す図である。
データの書き込み処理手順を示すシーケンス図である。
データの読み込み処理手順を示すシーケンス図である。
RAID5における論理ブロックのHDDへの割当例を示す図である。
コントローラの機能を示すブロック図である。
ブロック書き込み処理手順を示すフローチャートである。
処理対象データテーブルデータ構造例を示す図である。
データ更新後の処理対象データテーブルの例を示す図である。
ストライプ書き込み処理の手順を示すフローチャートである。
ストライプ書き込み時の処理対象データテーブルの例を示す図である。
ブロック読み込み処理の手順を示すフローチャートである。
処理対象データテーブルのデータ構造例を示す図である。
パリティデータ書き込み抜け修復処理の手順を示すフローチャートである。
パリティ書き込み抜け修復時の処理対象データテーブルの例を示す図である。
パリティデータ修復後の処理対象データテーブルの例を示す図である。
データ書き込み抜け修復および応答処理の手順を示すフローチャートである。
データ修復後の処理対象データテーブルを示す図である。
データを修復できないときの処理対象データテーブルを示す図である。
ストライプ読み込み処理の手順を示すフローチャートである。
ストライプ読み込み時の処理対象データテーブルの例を示す図である。
ストライプ修復および応答処理の手順を示すフローチャートである。
書き込み抜けが発生したパリティデータを生成後の処理対象データテーブルを示す図である。
ストライプ中データ修復および応答処理の手順を示すフローチャートである。
データ修復時の処理対象データテーブルの例を示す図である。
2つ以上のデータで書き込み抜けがあった場合の処理対象データテーブルの例を示す図である。
第2の実施の形態におけるHDD内のカウンタ値格納例を示す図である。
第2の実施の形態のコントローラの機能を示す図である。
カウンタ値比較結果に基づく書き込み抜け判定基準を示す図である。
第3の実施の形態における処理対象データテーブルのデータ構造例を示す図である。
第3の実施の形態のコントローラの機能を示す図である。
第3の実施の形態におけるブロック書き込み処理手順を示すフローチャートである。
書き込み要求時の処理対象データテーブルの例を示す図である。
更新後の処理対象データテーブルの例を示す図である。
第3の実施の形態におけるスライス書き込み処理の手順を示すフローチャートである。
ストライプ書き込み時に生成される処理対象データテーブルの例を示す図である。
ブロック読み込み処理の手順を示すフローチャートである。
初期化されたアクセス管理テーブルの例を示す図である。
ブロック書き込みが連続する場合の時系列情報発生パタンを示す図である。
ストライプ書き込みが連続する場合の時系列情報発生パタンを示す図である。
ストライプ書き込み後にブロック書き込みが行われた場合の時系列情報発生パタンを示す図である。
ブロック書き込み後にストライプ書き込みが行われた場合の時系列情報発生パタンを示す図である。
データとパリティデータとの比較処理手順を示すフローチャートである。
第1のカウンタ値比較処理の手順を示すフローチャートである。
第1のカウンタ値比較処理実施後のアクセス管理テーブルを示す図である。
第1のタイムスタンプ比較処理の手順を示すフローチャートである。
第2のタイムスタンプ比較処理の手順を示すフローチャートである。
第2のカウンタ値比較処理の手順を示す図である。
パリティグループ修復処理の手順を示すフローチャートである。
パリティグループ比較処理の手順を示すフローチャートである。
パリティグループ再計算処理の手順を示すフローチャートである。
パリティグループ修復処理が実行されたときのアクセス管理テーブルの状態遷移例を示す図である。
ストライプ読み込み処理の手順を示すフローチャートである。
ストライプ読み込み時に初期化されたアクセス管理テーブルの例を示す図である。
全データとパリティデータとの比較処理の手順を示すフローチャートである。
全パリティグループ修復処理の手順を示すフローチャートである。
RAID4における論理ブロックのHDDへの割当例を示す図である。
本実施の形態に用いるコンピュータのハードウェア構成例を示す図である。

実施例

0020

以下、本実施の形態を図面を参照して説明する。
図1は、実施の形態の概要を示す図である。図1には、ディスクアレイ装置が有する機能を示している。ディスクアレイ装置は、複数のストレージ装置11〜14内の記憶領域を複数の単位記憶領域(ブロック)に分割して管理する。また、ディスクアレイ装置は、複数のデータと複数のデータに基づいて生成されるパリティデータとをパリティグループとする。そして、ディスクアレイ装置は、パリティグループ内のデータとパリティデータとを複数のストレージ装置11〜14内のブロックに分散格納する。

0021

ここで、データおよびパリティデータを格納するとき、書き込み抜けが発生する可能性がある。書き込み抜けを検出する方法として、書き込み直後に書き込んだデータおよびパリティデータを読み出し、正しく書き込まれていることを確認する方法がある。しかし、このような方法を採ると、書き込み処理に時間がかかる。そこで、ディスクアレイ装置には、以下の機能を有する読み込み手段1、パリティデータ生成手段2、時系列情報生成手段3、時系列情報付与手段4、書き込み手段5、比較手段6、修復手段7、およびデータ出力手段8が設けられる。

0022

読み込み手段1は、書き込み要求に応じて、書き込み要求で指定された更新データを書き込むべきブロック内の既存データと、更新データと同じパリティグループに属するパリティデータとを複数のストレージ装置から読み込む。

0023

また、読み込み手段1は、書き込み要求に応じて書き込まれた更新データを指定した読み込み要求に応じて、更新データを時系列情報(証明用時系列情報)付きで複数のストレージ装置から読み込む。さらに、読み込み手段1は、読み込み要求に応じて、更新データが属するパリティグループ内の、複数の時系列情報(比較用時系列情報)付きのパリティデータを読み込む。パリティデータに付与されている複数の比較用時系列情報は、それぞれ、同じパリティグループ内の各データに関連付けられている。

0024

パリティデータ生成手段2は、既存データ、更新データ、および読み込まれたパリティデータを用いて、更新データに応じた新たなパリティデータ(更新後パリティデータ)を生成する。

0025

時系列情報生成手段3は、書き込み要求があるごとに、更新データを書き込むべき単位記憶領域に格納されている既存データと更新データとの間の書き込み時の前後関係を示す時系列情報を生成する。例えば、時系列情報生成手段3は、時系列情報として、書き込み要求の入力順が後である程大きな値を生成する。このような時系列情報としては、タイムスタンプや、カウンタにより書き込み要求ごとにカウントアップされるカウンタ値がある。

0026

時系列情報付与手段4は、書き込み要求に応じて生成された時系列情報を証明用時系列情報として更新データに付与する。また、時系列情報付与手段4は、証明用時系列情報と同じ値の比較用時系列情報を更新データに関連付けて、更新後パリティデータに付与する。

0027

書き込み手段5は、証明用時系列情報が付与された更新データと比較用時系列情報が付与された更新後パリティデータとを、異なるストレージ装置に書き込む。
比較手段6は、読み込み要求に応じて読み込まれた更新データの証明用時系列情報と、更新データに関連付けて更新後パリティデータに付与された比較用時系列情報とを比較する。

0028

修復手段7は、比較手段6の比較結果に基づいて、更新データまたは更新後パリティデータの書き込み時の書き込み抜けの有無を判断する。例えば、更新データの証明用時系列情報の値が、更新データに関連付けて更新後パリティデータに付与された比較用時系列情報より小さい場合がある。この場合、修復手段7は、更新データの書き込み時に、書き込み抜けが発生していたと判断する。修復手段7は、更新データの書き込み抜けを検出すると、読み込み手段1に、更新データが属するパリティグループ内の他のデータを複数のストレージ装置から読み込ませる。そして、修復手段7は、更新データ以外のデータと更新後パリティデータとを用いて読み込み対象データを修復する。

0029

データ出力手段8は、証明用時系列情報と比較用時系列情報とが一致した場合、読み込み要求の応答として、更新データを出力する。また、データ出力手段8は、更新データの修復が行われた場合、修復後の更新データを出力する。

0030

このような機能を有するディスクアレイ装置によって、RAID5のように論理ブロック内のデータが1つの物理ブロックに書き込まれるようなシステムであっても、データの書き込み抜けを該当データの読み出し時に検出可能となる。

0031

例えば、3つのデータ「Aold」、「Bold」、「Cold」と1つのパリティデータ「Pold」とを有するパリティグループを想定する。このパリティグループ内のデータとパリティデータは、ストレージ装置11〜14に分散格納されている。すなわち、データ「Aold」はストレージ装置11内のブロック11aに格納されている。データ「Bold」はストレージ装置12内のブロック12aに格納されている。データ「Cold」はストレージ装置13内のブロック13aに格納されている。パリティデータ「Pold」はストレージ装置14内のブロック14aに格納されている。

0032

ここで、データ「Aold」の更新データ「Anew」、データ「Bold」の更新データ「Bnew」、データ「Cold」の更新データ「Cnew」のそれぞれ書き込み要求9a,9b,9cが順次入力されたものとする。

0033

更新データ「Anew」の書き込み要求9aがあると、読み込み手段1により既存データ「Aold」と既存パリティデータ「Pold」とが読み込まれる。次に、パリティデータ生成手段2により、更新後パリティデータが生成される。例えば、パリティデータとしては、パリティグループ内の各データのビットごとの排他的論理和演算を用いることができる。このようなパリティデータの場合、データ「Aold」、パリティデータ「Pold」、および更新データ「Anew」のビットごとの排他的論理和演算によって、更新後パリティデータを生成できる。

0034

また、更新データ「Anew」の書き込み要求に応じて、時系列情報生成手段3により時系列情報が生成される。時系列情報は、少なくとも既存データ「Aold」の書き込み要求と更新データ「Anew」の書き込み要求との時間的な前後関係を識別可能な情報である。例えば、タイムスタンプを時系列情報とすることができる。ここで、更新データ「Anew」の書き込み要求に応じて生成された時系列情報を「t(Anew)」とする。時系列情報生成手段3で生成された時系列情報は、更新データ「Anew」と、パリティデータ生成手段2で生成された更新後パリティデータとに付与される。

0035

なお、更新後パリティデータに付与される時系列情報は、更新データ「Anew」と関連付けられている。例えば、更新後パリティデータに設定された複数の時系列情報記憶領域が、ストレージ装置11〜14のそれぞれに対応付けられている。そして、更新データ「Anew」の書き込み時に生成された時系列情報は、更新後タイムスタンプの複数の時系列情報記憶領域のうち、更新データ「Anew」が格納されるストレージ装置11に関連付けられた時系列情報記憶領域に格納される。これにより、時系列情報「t(Anew)」が、更新データ「Anew」との関連性を保ったままパリティデータに付与される。

0036

時系列情報「t(Anew)」が付与された更新データ「Anew」は、書き込み手段5によって、ストレージ装置11内のブロック11aに上書きで書き込まれる。この際、更新データ「Anew」に付与された時系列情報「t(Anew)」もストレージ装置11に書き込まれる。

0037

以後、更新データ「Bnew」と更新データ「Cnew」との書き込み要求9b,9cに応じて、書き込み処理が行われる。ここで、更新データ「Bnew」の書き込みは正常に実行されたが、更新データ「Cnew」の書き込み処理において書き込み抜けが発生したものとする。また、各書き込み要求実行時の更新後パリティデータの書き込みは正常に実行されたものとする。

0038

このような場合、書き込み要求9a,9b,9cの実行により、ストレージ装置11のブロック11aには、更新データ「Anew」と時系列情報「t(Anew)」とが格納される。ストレージ装置12のブロック12aには、更新データ「Bnew」と時系列情報「t(Bnew)」とが格納される。ところが、ストレージ装置13のブロック13aには、依然として、更新前の既存データ「Cold」と、そのデータの書き込み時に生成された時系列情報「t(Cold)」とが格納されている。ストレージ装置14のブロック14aには、更新データ「Anew」、「Bnew」、「Cnew」に基づいて生成された更新後パリティデータ「Pnew」と、時系列情報「t(Anew)」、「t(Bnew)」、「t(Cnew)」とが格納されている。時系列情報「t(Anew)」、「t(Bnew)」、「t(Cnew)」は。それぞれ更新データ「Anew」、「Bnew」、「Cnew」に関連付けられている。

0039

その後、更新データ「Anew」、「Bnew」、「Cnew」の読み込み要求が順次入力されたものとする。まず、更新データ「Anew」の読み込み要求が入力されると、読み込み手段1によって更新データ「Anew」と、パリティデータ「Pnew」との読み込みが行われる。この際、更新データ「Anew」やパリティデータ「Pnew」に付与された時系列情報も同時に読み込まれる。

0040

次に、比較手段6により、パリティデータ「Pnew」に付与されていた時系列情報のうち、更新データ「Anew」に関連付けられた時系列情報「t(Anew)」が抽出される。そして、比較手段6により、抽出された時系列情報「t(Anew)」と、更新データ「Anew」に付与されていた時系列情報「t(Anew)」とが比較される。この場合、値が一致するため、書き込み抜けは発生していないと判断される。書き込み抜けが発生していなければ、データ出力手段8によって、読み込まれた更新データ「Anew」が出力される。

0041

更新データ「Bnew」の読み込み要求においても、更新データ「Anew」の読み込みと同様の処理が行われる。ここで、更新データ「Bnew」に付与された時系列情報「t(Bnew)」は、更新後パリティデータ「Pnew」に付与されていた時系列情報のうち、更新データ「Bnew」に関連付けられた時系列情報「t(Bnew)」と同じ値である。従って、更新データ「Bnew」の書き込み時にも書き込み抜けは発生していないと判断され、データ出力手段8によって、読み込まれた更新データ「Anew」が出力される。

0042

さらに、更新データ「Cnew」の読み込み要求においても、更新データ「Anew」の読み込みと同様の処理が行われる。更新データ「Cnew」が格納されているべきブロック13aには、既存データ「Cold」が格納されている。また、既存データ「Cold」に付与されている時系列情報「t(Cold)」は、パリティデータ「Pnew」に付与されていた時系列情報のうち、更新データ「Cnew」に関連付けられた時系列情報「t(Cnew)」と異なる。時系列情報がタイムスタンプであれば、「t(Cold)」は「t(Cnew)」よりも小さな値である。すると、比較手段6は、読み込み対象のデータに付与されている「t(Cold)」が更新後パリティデータに付与されている「t(Cnew)」よりも小さいことから、読み込み対象の単位記憶領域への書き込み時に書き込み抜けが発生したと判断する。

0043

書き込み抜けが検出された場合、読み込み手段1によって、同じパリティグループ内の他の更新データ「Anew」、「Bnew」が読み込まれる。次に、修復手段7によって、更新データ「Anew」、「Bnew」とパリティデータ「Pnew」とを用いて、更新データ「Cnew」が修復される。例えば、更新データ「Anew」、「Bnew」とパリティデータ「Pnew」とのビットごとの排他的論理和演算の結果が、更新データ「Cnew」となる。そして、データ出力手段8により、修復された更新データ「Cnew」が出力される。

0044

このように、タイムスタンプに対して、他のデータそれぞれに関連付けた時系列情報を格納するようにしたことで、ブロック単位のデータ書き込み時に、データとパリティデータとのそれぞれに対して同じ時系列情報を付与しておくことができる。同じ時系列情報を付与しておけば、読み込み要求があったときに、時系列情報の同一性を判断することで、書き込み抜けを検出することができる。

0045

なお、時系列情報として、タイムスタンプのように時系列に沿って大きくなる値を用いることで、データの書き込み抜けがあったのか、パリティデータの書き込み抜けがあったのかを判定できる。時系列に沿って大きくなる値としては、書き込み要求が入力されるごとにカウントアップされるカウンタ値を用いることもできる。

0046

次に、実施の形態の詳細を説明する。以下に説明する実施の形態では、仮想ディスク内の論理ブロックを指定したアクセスに応じて、その論理ブロックに対応する物理ブロックに書き込みを行うものとする。ここで、論理ブロックといった場合、データブロックパリティブロックとを含むものとする。データブロックは、仮想ディスク内のデータを格納する仮想的な記憶領域である。パリティブロックは、複数のデータブロック内のデータに基づいて生成されるパリティデータを格納する仮想的な記憶領域である。論理ブロックに格納されるデータまたはパリティデータは、実際には、その論理ブロックに対応付けられたHDD内の物理ブロックに格納される。

0047

また、時系列情報が付与されたデータおよびパリティデータは、時系列情報を付与した後にECCが計算され、そのECCが付与される。そして、データの読み込み時にECCによるエラー検出が行われるものとする。従って、時系列情報とデータの書き込み処理、時系列情報とパリティデータの書き込み処理は、それぞれアトミック(一体の処理)であることがECCによって保証される。すなわち、時系列情報の一部のみが書き込まれ、データまたはパリティデータの書き込み抜けが発生するような状況はECCチェックでエラーが検出される。従って、以下の実施の形態では、ブロックごとの書き込み処理がアトミックであることをECCによって保証したうえで、書き込み抜けの検出処理を行うものとする。

0048

なお、以下の説明において、データまたはパリティデータのHDDへの書き込みといった場合、特に説明しなくても、データまたはパリティデータに付与された時系列情報(タイムスタンプ、カウンタ値、フラグ)も同時に書き込むものとする。同様に、データまたはパリティデータのHDDからの読み込みといった場合、特に説明しなくても、データまたはパリティデータに付与された時系列情報(タイムスタンプ、カウンタ値、フラグ)も同時に読み込むものとする。

0049

[第1の実施の形態]
図2は、本実施の形態のシステム構成例を示す図である。RAID装置100は、ホストインタフェース110を介してホストコンピュータ10に接続されている。ホストコンピュータ10は、ユーザからの操作入力などに応答して、RAID装置100に対してデータの入出力を行う。また、RAID装置100は、ディスクインタフェース120を介して複数のHDD210,220,230,240,250に接続されている。各HDD210,220,230,240,250は、データの記憶領域が複数の物理ブロックに分割されている。

0050

RAID装置100内では、コントローラ130が全体を制御している。コントローラ130は、NVRAM(Non Volatile Random Access Memory)131やRAM(Random Access Memory)132を有している。NVRAM131には、コントローラ130に実行させる処理が技術されたファームウェアプログラムや、その他の管理情報などが格納される。NVRAM131としては、例えば、フラッシュメモリが使用できる。RAM132は、コントローラ130が実行する処理に必要なデータを一時的に記憶する。

0051

ホストインタフェース110を介してホストコンピュータ10からの書き込み要求や読み込み要求を受け取る。そして、コントローラ130は、受け取った要求に従って、ディスクインタフェース120を介してHDD210,220,230,240,250へのデータの入出力を行う。

0052

例えば、ホストコンピュータ10から論理ブロックを指定した書き込み要求が入力された場合、コントローラ130は書き込み対象の物理ブロックを判断し、該当する物理ブロックが属するHDDにデータの書き込み指示を出力する。また、ホストコンピュータ10から論理ブロックを指定した読み込み要求が入力された場合、コントローラ130は読み込み対象の物理ブロックを判断し、該当する物理ブロックが属するHDDからデータを読み出す。図1に示した読み込み手段1、パリティデータ生成手段2、時系列情報生成手段3、時系列情報付与手段4、書き込み手段5、比較手段6、修復手段7、およびデータ出力手段8は、コントローラ130が有する機能である。

0053

なお、コントローラ130は、RAIDによるデータ管理機能を有している。例えば、コントローラ130は、RAID4やRAID5によるHDD210,220,230,240,250へのデータの入出力が可能である。以下の説明では、コントローラ130は、RAID5によりデータを管理するものとする。

0054

HDD210,220,230,240,250は、所定のデータ長のブロック単位に物理フォーマットが施されている。また、HDD210,220,230,240,250はディスクキャッシュ用のキャッシュメモリを有している。HDD210,220,230,240,250は、書き込み対象のデータを一旦キャッシュメモリに格納し、その後の処理の空き時間などを利用して、キャッシュメモリ内のデータをディスクに書き込む。

0055

図3は、HDDのフォーマットを示す図である。HDD210内の記憶領域には、複数の物理ブロック211が設けられている。物理ブロック211内はデータ領域211aとタイムスタンプ領域211bとに分けられる。データ領域211aには、割り当てられている論理ブロックのデータが格納される。タイムスタンプ領域221bには、複数のタイムスタンプ(タイムスタンプ群)が格納される。タイムスタンプ領域221bは、少なくともRAID5におけるパリティグループ内の論理ブロック数に相当するタイムスタンプを書き込み可能な記憶容量を有している。

0056

ここで、RAID5のRAIDシステムに使用するHDDの台数がn(nは自然数)、各HDDの物理ブロック数がx(xは自然数)の場合を想定し、HDD内のデータを詳細に説明する。

0057

図4は、RAID5におけるパリティグループの論理ブロックと物理ブロックとの関係を示す図である。パリティグループ20は、複数の論理ブロックを有している。論理ブロックには、複数のデータブロック21,22,・・・,2mと1つのパリティブロック2nとがある。

0058

データブロック21,22,・・・,2mは、それぞれ所定データ長のデータd1,d2,・・・,dmを記憶する論理的な記憶領域である。パリティブロック2nは、データブロック21,22,・・・,2m内のデータd1,d2,・・・,dmに基づいて生成されたパリティデータdnを記憶する論理的な記憶領域である。パリティデータdnは、データd1,d2,・・・,dmの誤り訂正符号として用いられるデータである。例えば、パリティデータdnは、データブロック21,22,・・・,2m内の各データの排他的論理和演算によって生成される。

0059

パリティグループ20内のブロック数は、RAID5のために使用されるHDD数と等しい。図4の例では、n台のHDD31,32,・・・,3m,3nがある。そのためパリティグループ20は、n−1個のデータブロック21,22,・・・,2mと1つのパリティブロック2nとを有することとなる。なお、HDD31,32,・・・,3m,3nには、それぞれ1からnまでのディスク番号(DISK#に続く数字)が割り当てられている。

0060

各HDD31,32,・・・,3m,3n内のx個の物理ブロックには、それぞれ物理ブロック番号(block#に続く数字)が設定されている。そして、各物理ブロックは、データとタイムスタンプ群との記憶領域を有している。図4の例では、物理ブロック番号「i」(iは1以上x以下の整数)に格納されたデータを、d(i)と表している。

0061

タイムスタンプ群の記憶領域には、HDDの台数分のタイムスタンプを格納できる。タイムスタンプ群の記憶領域は、HDDのディスク番号に対応付けられたタイムスタンプ領域に分けられている。各タイムスタンプ領域はそれぞれHDD31,32,・・・,3m,3nに対応付けられている。図4の例では、物理ブロック番号「i」におけるディスク番号「j」(jは1以上n以下の整数)に対応するタイムスタンプをt(i,j)と表している。

0062

パリティグループ20内のデータブロック21,22,・・・,2mとパリティブロック2nとのデータは、個別のHDD31,32,・・・,3m,3nに格納される。すなわちRAID装置100のコントローラ130によって、データブロック21,22,・・・,2mとパリティブロック2nとに対応する物理ブロックが、それぞれ異なるHDDから選択される。図4の例では、データブロック21に対してHDD31の先頭の物理ブロックが対応付けられている。データブロック22に対してHDD32の先頭の物理ブロックが対応付けられている。データブロック2mに対してHDD3nの先頭の物理ブロックが対応付けられている。パリティブロック2nに対してHDD3mの先頭の物理ブロックが対応付けられている。

0063

RAID装置100のコントローラ130は、ホストコンピュータ10からの要求に応じてデータブロックのデータを、対応する物理ブロックに格納する。その際、コントローラ130はデータブロックのデータおよびパリティデータにタイムスタンプを付与する。

0064

図5は、データおよびパリティデータに設定されるタイムスタンプの例を示す図である。図5の例では、データブロック21のデータの書き込み時刻を「T1」、データブロック22のデータの書き込み時刻を「T2」、データブロック2mのデータの書き込み時刻を「Tm」としている。各データブロック21,22,・・・,2mのデータには、そのデータを書き込むHDDに対応する部分領域に、書き込み時刻を示すタイムスタンプが設定される。パリティブロック2nのパリティデータには、同じパリティグループに属する他のデータの書き込み時に設定されたタイムスタンプが、そのデータが書き込まれたHDDに対応するタイムスタンプ領域に設定されている。

0065

各データブロックのデータが更新される場合、更新されたデータに付与されたタイムスタンプも更新される。また、パリティグループ内のデータが更新されると、パリティデータも更新される。その際、パリティデータに付与されている複数のタイムスタンプのうち、更新されたデータのタイムスタンプが更新される。すなわち、パリティデータに付与されている各タイムスタンプは、対応するデータに付与されているタイムスタンプとの同一性が保たれる。

0066

次に、図2に示した様にHDDが5台の場合におけるデータの書き込み処理と読み込み処理について説明する。
図6は、データの書き込み処理手順を示すシーケンス図である。以下、図6に示す処理をステップ番号に沿って説明する。

0067

[ステップS11]ホストコンピュータ10は、ユーザからの操作入力などに応答して、RAID装置100に対し、更新するデータの内容と、そのデータが属するデータブロックとを指定した書き込み要求を送信する。書き込み要求は、RAID装置100のホストインタフェース110を介してコントローラ130に入力される。この例では、書き込み対象のデータブロックは、HDD210内の物理ブロックに対応付けられているものとする。また、書き込み対象のデータブロックが属するパリティグループのパリティブロックには、HDD250内の物理ブロックが対応付けられているものとする。

0068

[ステップS12]コントローラ130は、書き込み要求を受け取ると、書き込み対象のデータブロックに対応する物理ブロック内のデータの読み込み指示を、HDD210に対して出力する。

0069

[ステップS13]コントローラ130はHDD210への読み込み指示と同時に、パリティブロックに対応する物理ブロック内のデータの読み込み指示を、HDD250に対して出力する。

0070

[ステップS14]HDD210は、読み込み指示に応答して、指定された物理ブロック内のデータを読み出す。この際、データに付与されているタイムスタンプ群も読み出される。

0071

[ステップS15]HDD250は、読み込み指示に応答して、指定された物理ブロック内のパリティデータを読み出す。この際、パリティデータに付与されているタイムスタンプ群も読み出される。

0072

[ステップS16]HDD210は、タイムスタンプ付きのデータをコントローラ130に送信する。
[ステップS17]HDD250は、タイムスタンプ付きのパリティデータをコントローラ130に送信する。

0073

[ステップS18]コントローラ130は、タイムスタンプを生成する。具体的には、コントローラ130は、RAID装置100内部の時計機能から現在の時刻を取得し、その時刻をタイムスタンプとする。

0074

[ステップS19]コントローラ130は、書き込み要求に従って、HDD210から読み込んだデータの内容を更新する。さらにコントローラ130は、更新後のデータにステップS18で生成したタイムスタンプを付与する。そして、コントローラ130は、HDD210に対して、書き込み対象のデータブロックに対応する物理ブロックへの更新後のデータの書き込み指示を出力する。

0075

[ステップS20]コントローラ130は、HDD210から読み込んだデータの更新内容に基づいて、HDD250から読み込んだパリティデータを更新する。さらにコントローラ130は、更新後のパリティデータにステップS18で生成したタイムスタンプを付与する。そして、コントローラ130は、HDD250に対して、パリティブロックに対応する物理ブロックへの更新後のパリティデータの書き込み指示を送信する。

0076

[ステップS21]HDD210は、書き込み指示に含まれるタイムスタンプ付きのデータをキャッシュメモリに格納し、「OK」の応答をコントローラ130に送信する。
[ステップS22]HDD250は、書き込み指示に含まれるタイムスタンプ付きのパリティデータをキャッシュメモリに格納し、書き込みを実行したことを示す「OK」の応答をコントローラ130に送信する。

0077

[ステップS23]コントローラ130は、HDD210,250から「OK」の応答を受け取ると、書き込み完了の応答をホストコンピュータ10に送信する。
[ステップS24]HDD210は、「OK」応答後の所定のタイミングで、キャッシュメモリ内のタイムスタンプ付きのデータを、物理ブロックに書き込む。

0078

[ステップS25]HDD210は、「OK」応答後の所定のタイミングで、キャッシュメモリ内のタイムスタンプ付きのパリティデータを、物理ブロックに書き込む。
このようにして、データの書き込みの際に、そのデータを格納する物理ブロックと、そのデータのパリティデータを格納する物理ブロックとに、同じタイムスタンプが書き込まれる。

0079

次に、データの読み込み処理について説明する。
図7は、データの読み込み処理手順を示すシーケンス図である。以下、図7に示す処理をステップ番号に沿って説明する。

0080

[ステップS31]ホストコンピュータ10は、ユーザからの操作入力などに応答して、RAID装置100に対し、読み込み対象データが属するデータブロックを指定した読み込み要求を送信する。読み込み要求は、RAID装置100のホストインタフェース110を介してコントローラ130に入力される。この例では、読み込み対象のデータブロックは、HDD210内の物理ブロックに対応付けられているものとする。また、読み込み対象のデータブロックが属するパリティグループのパリティブロックには、HDD250内の物理ブロックが対応付けられているものとする。

0081

[ステップS32]コントローラ130は、読み込み要求を受け取ると、読み込み対象のデータブロックに対応する物理ブロック内のデータの読み込み指示を、HDD210に対して出力する。

0082

[ステップS33]コントローラ130はHDD210への読み込み指示と同時に、パリティブロックに対応する物理ブロック内のデータの読み込み指示を、HDD250に対して出力する。

0083

[ステップS34]HDD210は、読み込み指示に応答して、指定された物理ブロック内のデータを読み出す。この際、データに付与されているタイムスタンプも読み出される。

0084

[ステップS35]HDD250は、読み込み指示に応答して、指定された物理ブロック内のパリティデータを読み出す。この際、パリティデータに付与されているタイムスタンプも読み出される。

0085

[ステップS36]HDD210は、タイムスタンプ付きのデータをコントローラ130に送信する。
[ステップS37]HDD250は、タイムスタンプ付きのパリティデータをコントローラ130に送信する。

0086

[ステップS38]コントローラ130は、タイムスタンプを比較する。具体的には、コントローラ130は、パリティデータに付与されているタイムスタンプ群から、読み込み対象のデータに対応するタイムスタンプを抽出する。そして、コントローラ130は、抽出したタイムスタンプと、読み込み対象のデータに付与されていたタイムスタンプとを比較する。タイムスタンプの値が一致した場合、コントローラ130は、該当データの書き込み時に書き込み抜けが発生していないと判定する。

0087

[ステップS39]コントローラ130は、書き込み抜けが発生していなければ、HDD210から読み込んだデータをホストコンピュータ10に送信する。
このように、データ書き込み時に、書き込み対象のデータと、パリティデータとに同一のタイムスタンプを付与し、読み込み時にそれらのタイムスタンプを比較することで、データの書き込み抜けを検出することができる。すなわち、データの書き込み抜けの検出をデータの読み込み時に行うことが可能となる。

0088

データの読み込み時に書き込み抜けを検出可能であれば、データ書き込み時に書き込み抜けの検出処理を行わずに済む。すなわち、従来であれば、データ書き込み時に書き込み抜けの検出する必要があった。そのため、データの書き込み直後に、そのデータの読み込み処理を実行し、書き込み抜けが発生していないこと(所望のデータが書き込まれたこと)を確認していた。その結果、従来は、データ書き込み直後に該当データの読み込み処理が余計に発生していた。本実施の形態では、図6に示したように、データの書き込み直後に、そのデータの読み込みを行う必要はない。

0089

また、従来は、データ書き込み直後に該当データの読み込み処理を行うため、ディスクキャッシュ処理を行うことができなかった。他方、本実施の形態では、書き込み抜けの検出処理をデータの読み込み時に行うことができる。そのため、データの書き込み時にはディスクキャッシュ処理を行うことができ、書き込み要求に対する応答時間を短縮することができる。

0090

ところで、RAID5では、連続する複数の論理ブロックを同じHDDに格納することができる。
図8は、RAID5における論理ブロックのHDDへの割当例を示す図である。図8ではデータが格納されるデータブロックの論理ブロック番号を、文字「D」と数字との結合で表している。また、パリティデータが格納されるパリティブロックの論理ブロック番号を、文字「P」と数字との結合で表している。割当表40には、ディスク番号とブロック番号との交差する位置に、ディスク番号とブロック番号とで特定される物理ブロックに割り当てられた論理ブロックの論理ブロック番号が設定されている。

0091

図8の例では、パリティグループ数が「5」、チャンク内ブロック数が「4」である。割当表40の横に並んだブロック、例えば論理ブロック番号「D1」、「D5」、「D9」、「D13」、「P1」が1つのパリティグループである。パリティブロック「P1」内のパリティデータは、論理ブロック「D1」、「D5」、「D9」、「D13」の各データの排他論理和である。

0092

このようにチャンク内ブロック数が4の場合、論理ブロックにおける連続する4ブロックが、同じHDDに格納される。この4ブロックずつのブロックの集合がチャンクである。「D1」〜「D16」、「P1」〜「P4」のようにチャンクをパリティグループ数だけ集めたものがストライプ41〜44である。図8では、ストライプ41〜44を太線の枠で囲っている。各ストライプ41〜44では、そのストライプに含まれるパリティブロックに対応する物理ブロックは、共通のHDDに属している。

0093

このようにチャンク単位で論理ブロックの振り分けを行う場合、HDDへのアクセス処理は物理ブロック単位で行う方法と、ストライプ単位で行う方法とがある。そこで、以下の説明では、タイムスタンプの制御方法についても、物理ブロック単位のデータアクセスの場合と、ストライプ単位のデータアクセスの場合とにわけて説明することとする。

0094

まず、RAID装置100内のコントローラ130が有する処理機能について詳細に説明する。
図9は、コントローラの機能を示すブロック図である。コントローラ130は、データ入出力部133、RAID制御部134、HDDアクセス部135、タイムスタンプ生成部136、およびタイムスタンプ比較部137を有している。

0095

データ入出力部133は、ホストコンピュータ10からのアクセス要求受け付ける。アクセス要求には、書き込み要求と読み込み要求とがある。データ入出力部133は、受け付けたアクセス要求をRAID制御部134に渡す。その後、データ入出力部133は、RAID制御部134からアクセス要求の結果を受け取り、ホストコンピュータ10に対して送信する。

0096

RAID制御部134は、アクセス要求に応じて、RAID技術を用いたHDD210,220,230,240,250へのアクセス制御を行う。本実施の形態では、RAID制御部134は、RAID5のアクセス制御を行うものとする。RAID制御部134は、RAID5のアクセス制御を行うために、図8に示したような論理ブロックと物理ブロックとの対応関係を管理している。そして、RAID制御部134は、アクセス要求で指定された論理ブロックに対応する物理ブロック、およびその物理ブロックを有するHDDを特定し、アクセス要求に応じたアクセス指示をHDDアクセス部135に対して出力する。

0097

RAID制御部134は、アクセス要求が書き込み要求の場合、タイムスタンプ生成部136からタイムスタンプを取得する。そして、取得したタイムスタンプを書き込み対象のデータと、更新されたパリティデータとに付与する。そして、RAID制御部134は、タイムスタンプ付きのデータとパリティデータとのHDDへの書き込み指示を行う。

0098

また、RAID制御部134は、アクセス要求が読み込み要求の場合、読み込んだデータおよびそのデータが属するパリティグループのパリティデータそれぞれに付与されたタイムスタンプ群から、読み込んだデータに対応するタイムスタンプを抽出する。そして、RAID制御部134は、抽出した2つのタイムスタンプをタイムスタンプ比較部137に渡す。RAID制御部134は、タイムスタンプ比較部137からタイムスタンプの比較結果を受け取り、その比較結果に基づいて書き込み抜けの有無を判定する。RAID制御部134は、書き込み抜けがなければ、読み込んだデータを読み込み要求への応答としてデータ入出力部133に渡す。

0099

なお、RAID制御部134は、書き込み抜けがあると判定した場合、データの復旧処理を行う。そして、RAID制御部134は、復旧したデータを読み込み要求への応答としてデータ入出力部133に渡す。

0100

HDDアクセス部135は、RAID制御部134からの指示に従って、HDD210,220,230,240,250に対して物理ブロック単位のデータの書き込み指示、または読み込み指示を行う。HDDアクセス部135は、HDDへのデータの書き込み指示を行った場合、書き込み対象HDDからの「OK」の応答を受け取ると、その応答をRAID制御部134に渡す。また、HDDアクセス部135は、データの読み込み指示を行った場合、読み込み対象HDDからデータを受け取り、RAID制御部134に渡す。

0101

なお、HDDアクセス部135は、データまたはパリティデータをHDD210,220,230,240,250に書き込む場合、タイムスタンプ付与後のデータまたはパリティデータのECCを生成し、データまたはパリティデータに付与する。また、HDDアクセス部135は、データまたはパリティデータをHDD210,220,230,240,250にから読み込む場合、ECCによるエラー検出処理を行う。

0102

タイムスタンプ生成部136は、RAID制御部134からの要求に応じてタイムスタンプを生成する。具体的には、タイムスタンプ生成部136は、RAID装置100の内部時計が示す時刻を取得し、タイムスタンプとする。

0103

タイムスタンプ比較部137は、RAID制御部134からの要求に応じてタイムスタンプを比較する。
次に、コントローラ130における書き込み処理、読み込み処理について、ブロック単位およびストライプ単位で実行する場合に分けて詳細に説明する。なお、以下の説明では、データの書き込みおよび読み込みのアドレス制御やECC制御については省略している。

0104

まず、ブロック単位の書き込み処理について説明する。
図10は、ブロック書き込み処理手順を示すフローチャートである。以下、図10に示す処理をステップ番号に沿って説明する。この処理は、ホストコンピュータ10からブロック単位でのデータの書き込み要求が入力されたときに実行される。なお、データの書き込み要求には、書き込み対象のデータ(更新データ)と、その更新データが属するデータブロックの論理ブロック番号が含まれている。

0105

[ステップS41]RAID制御部134は、書き込み要求に応じたデータ書き込み対象の物理ブロック内のデータの読み込み指示を、HDDアクセス部135に対して出力する。具体的には、RAID制御部134は、まず、書き込み要求で指定された論理ブロック番号に対応する物理ブロックを特定する。そして、該当する物理ブロックが属するHDDのディスク番号と、該当する物理ブロックの物理ブロック番号を判断する。これらの判断は、図8に示した割当関係に基づいて行われる。そして、RAID制御部134は、データ書き込み対象の物理ブロックを指定して、その物理ブロック内のデータの読み込み指示をHDDアクセス部135に対して出力する。すると、HDDアクセス部135によって、指定された物理ブロック内のデータの読み込みが行われる。

0106

[ステップS42]RAID制御部134は、パリティブロックに対応する物理ブロック内のパリティデータの読み込み指示を、HDDアクセス部135に対して出力する。具体的には、RAID制御部134は、まず、書き込み要求で指定された論理ブロック番号と同じパリティグループ内のパリティブロックに対応する物理ブロックを特定する。そして、該当する物理ブロックが属するHDDのディスク番号と、該当する物理ブロックの物理ブロック番号を判断する。これらの判断は、図8に示した割当関係に基づいて行われる。そして、RAID制御部134は、パリティブロックに対応する物理ブロックを指定して、その物理ブロック内のパリティブロックの読み込み指示をHDDアクセス部135に対して出力する。すると、HDDアクセス部135によって、指定された物理ブロック内のパリティデータの読み込みが行われる。

0107

[ステップS43]RAID制御部134は、データの読み込みが完了したか否かを判断する。具体的には、RAID制御部134は、データの読み込み指示を出力したHDDからデータが応答された場合、データ読み込み完了と判断する。データ読み込みが完了した場合、処理がステップS44に進められる。データ読み込みが完了していなければステップS43の処理が繰り返され、RAID制御部134は読み込み待ち状態となる。

0108

[ステップS44]RAID制御部134は、パリティデータの読み込みが完了したか否かを判断する。具体的には、RAID制御部134は、パリティデータの読み込み指示を出力したHDDからパリティデータが応答された場合、パリティデータ読み込み完了と判断する。パリティデータの読み込みが完了した場合、処理がステップS45に進められる。パリティデータ読み込みが完了していなければステップS44の処理が繰り返され、RAID制御部134は読み込み待ち状態となる。

0109

RAID制御部134はデータとパリティデータとの読み込みが完了すると、RAM132内に処理対象データテーブルを作成し、読み込んだデータをその処理対象データテーブルに格納する。

0110

[ステップS45]RAID制御部134は、パリティデータを計算する。具体的には、RAID制御部134は、HDDから読み込んだパリティデータ、HDDから読み込んだデータ、および更新データの排他的論理和演算を行う。その演算結果が、更新後のパリティデータとなる。

0111

[ステップS46]タイムスタンプ生成部136は、タイムスタンプを取得する。具体的には、RAID制御部134からタイムスタンプ生成部136へ、タイムスタンプの生成要求が出される。その生成要求に応じて、タイムスタンプ生成部136がタイムスタンプを生成する。生成されたタイムスタンプは、タイムスタンプ生成部136からRAID制御部134に渡される。

0112

[ステップS47]RAID制御部134は、データブロックの書き込み指示をHDDアクセス部135に対して出力する。具体的には、RAID制御部134は、書き込み要求で指定された更新データにタイムスタンプを付与する。そして、RAID制御部134は、更新データが属するデータブロックに対応する物理ブロックのディスク番号と物理ブロック番号とを指定して、タイムスタンプ付きの更新データの書き込み指示をHDDアクセス部135に対して出力する。すると、HDDアクセス部135によって、ディスク番号に対応するHDDに対して、タイムスタンプ付きの更新データの書き込みが行われる。

0113

[ステップS48]RAID制御部134は、パリティデータの書き込み指示をHDDアクセス部135に対して出力する。具体的には、RAID制御部134は、書き込み要求で指定された更新データと同じパリティグループ内のパリティデータにタイムスタンプを付与する。付与されるパリティデータは、パリティデータ群内の更新データが格納されるHDDに対応付けられたタイムスタンプ領域に設定される。そして、RAID制御部134は、パリティブロックに対応する物理ブロックのディスク番号と物理ブロック番号とを指定して、タイムスタンプ付きのパリティデータの書き込み指示をHDDアクセス部135に対して出力する。すると、HDDアクセス部135によって、ディスク番号に対応するHDDに対して、タイムスタンプ付きのパリティデータの書き込みが行われる。

0114

[ステップS49]RAID制御部134は、データの書き込みが完了したか否かを判断する。具体的には、RAID制御部134は、データの書き込み指示を出力したHDDから「OK」の応答が返信されると、データ書き込み完了と判断する。データ書き込みが完了した場合、処理がステップS50に進められる。データ書き込みが未完了であれば、ステップS49の処理が繰り返され、RAID制御部134はデータ書き込み完了待ち状態となる。

0115

[ステップS50]RAID制御部134は、パリティデータの書き込みが完了したか否かを判断する。具体的には、RAID制御部134は、パリティデータの書き込み指示を出力したHDDから「OK」の応答が返信されると、パリティデータ書き込み完了と判断する。パリティデータ書き込みが完了した場合、処理が終了する。パリティデータ書き込みが未完了であれば、ステップS50の処理が繰り返され、RAID制御部134はパリティデータ書き込み完了待ち状態となる。

0116

このようにして、ホストコンピュータ10からのブロック単位のデータ書き込み要求に応答して、データブロックとパリティブロックとのそれぞれに対応する物理ブロック内のデータが更新される。

0117

以下、図11図12を参照して、論理ブロック番号「D1」のデータを更新する書き込み要求が出された場合を例に採り、データブロックとパリティブロックとタイムスタンプの更新内容を説明する。

0118

ホストコンピュータ10から論理ブロック番号「D1」内のデータの書き込み要求が入力されると、まず、そのデータブロックに対応する物理ブロック内のデータがHDDから読み出される(図10のステップS41〜S44)。図8を参照すると、論理ブロック番号「D1」に対応する物理ブロックは、ディスク番号が「DISK#1」のHDD210の物理ブロック番号「block#1」の物理ブロックである。そこで、HDD210の物理ブロック番号「block#1」の物理ブロック内のデータが読み出される。

0119

また、論理ブロック番号「D1」と同じパリティグループに属するのは、論理ブロック番号「P1」のパリティブロックである。論理ブロック番号「P1」に対応する物理ブロックは、ディスク番号が「DISK#5」のHDD250の物理ブロック番号「block#1」の物理ブロックである。そこで、HDD250の物理ブロック番号「block#1」内のパリティデータが読み出される。

0120

読み出されたデータおよびパリティデータは、処理対象データテーブルに設定される。
図11は、処理対象データテーブルのデータ構造例を示す図である。処理対象データテーブル132aは、図10のステップS44終了後に、RAID制御部134によってRAM132内に生成される。処理対象データテーブル132aには、論理ブロック番号、ディスク番号、物理ブロック番号、データ、およびタイムスタンプの欄が設けられている。

0121

論理ブロック番号の欄には、読み出されたデータまたはパリティデータの論理ブロックを示す論理ブロック番号が設定される。
ディスク番号の欄には、論理ブロック番号で示される論理ブロックに対応する物理ブロックが属するHDDのディスク番号が設定される。

0122

物理ブロック番号の欄には、論理ブロック番号で示される論理ブロックに対応する物理ブロックの物理ブロック番号が設定される。
データの欄には、読み出されたデータまたはパリティデータが設定される。

0123

タイムスタンプの欄には、読み出されたデータまたはパリティデータに付与されていたパリティデータが設定される。パリティデータは、複数のHDD210,220,230,240,250それぞれに対応付けられている。

0124

図11の例では、論理ブロック番号「D1」の論理ブロックは、データブロックである。このデータブロックのデータ「d1」には、ディスク番号「DISK#1」のHDD210に対応するタイムスタンプ「t11」が設定されている。また、論理ブロック番号「P1」の論理ブロックは、パリティブロックである。このパリティブロックのパリティデータ「p1」には、同じパリティグループ内のデータブロックのデータそれぞれ対応するタイムスタンプ「t21」、「t22」、「t23」、「t24」が設定されている。

0125

このような処理対象データテーブル132a内のデータが、書き込み要求に示される更新データに基づいて更新される。
図12は、データ更新後の処理対象データテーブルの例を示す図である。図12に示すように、データ更新後の処理対象データテーブル132aでは、論理ブロック番号「D1」のデータ「d1」は、更新データ「d1_1」に変更されている。論理ブロック番号「P1」のパリティデータ「p1」は、更新後のパリティデータ「p1_1」に変更されている。なお更新後のパリティデータ「p1_1」は以下の式で計算される。
「p1_1」=「p1」^「d1」^「d1_1」
ここで、「^」は排他的論理和を表している(以後の他の式においても同様)。

0126

データ更新後の処理対象データテーブル132aでは、論理ブロック番号「D1」のデータ「d1_1」におけるディスク番号「DISK#1」に対応するタイムスタンプ「t11」が、更新時のタイムスタンプ「t11_1」に変更されている。同様に、論理ブロック番号「P1」のパリティデータ「p1_1」におけるディスク番号「DISK#1」に対応するタイムスタンプ「t11」が、更新時のタイムスタンプ「t11_1」に変更されている。

0127

データ更新後の処理対象データテーブル132a内のタイムスタンプ付きのデータおよびパリティデータが、元の物理ブロックに書き戻される。その結果、データの更新と共に、パリティデータの更新、およびデータとパリティデータとに付与されたタイムスタンプの更新が行われる。すなわち、更新時刻「t11_1」が、データブロックのデータを格納するHDDと、パリティブロックのパリティデータを格納するHDDとに、2重で格納される。

0128

次に、ストライプ単位の書き込み処理について説明する。
図13は、ストライプ書き込み処理の手順を示すフローチャートである。以下、図13に示す処理をステップ番号に沿って説明する。この処理は、ホストコンピュータ10からストライプ単位でのデータの書き込み要求が入力されたときに実行される。なお、データの書き込み要求には、書き込み対象のデータ(更新データ)と、その更新データが属するストライプの指定(論理ブロック番号によるデータブロックの範囲指定)とが含まれている。

0129

[ステップS61]RAID制御部134は、パリティデータを計算する。具体的には、RAID制御部134は、ストライプ内のデータを、各データが属する論理ブロックに応じてパリティグループに分ける。さらに、RAID制御部134は、パリティグループごとに、そのパリティグループに属するデータブロック内のデータの排他的論理和演算を行い、パリティグループごとのパリティデータを生成する。そして、RAID制御部134は、生成されたパリティデータを有する論理ブロックを、パリティデータの生成元となったデータブロックと同じパリティグループのパリティブロックとする。

0130

[ステップS62]RAID制御部134は、タイムスタンプを取得する。タイムスタンプ取得処理の詳細は、図10のステップS46の処理と同様である。
[ステップS63]RAID制御部134は、ストライプ内の全論理ブロックのデータおよびパリティデータの書き込み指示を、HDDアクセス部135に対して出力する。具体的には、RAID制御部134は、書き込み要求で指定されたストライプ内のブロック単位の各更新データにタイムスタンプを付与する。また、RAID制御部134は、書き込み要求で指定されたストライプ内の各パリティブロックに、同じパリティグループ内の各更新データに対応するタイムスタンプを付与する。そして、RAID制御部134は、複数の更新データと、複数のパリティデータとの書き込み指示をHDDアクセス部135に対して出力する。更新データの書き込み指示には、更新データが属するデータブロックに対応する物理ブロックのディスク番号と物理ブロック番号とが指定される。パリティデータの書き込み指示には、パリティデータが属するパリティブロックに対応する物理ブロックのディスク番号と物理ブロック番号とが指定される。するとHDDアクセス部135によって、タイムスタンプ付きの更新データとパリティデータとが、それぞれについて指定されたHDD内の指定された物理ブロックに書き込まれる。

0131

[ステップS64]RAID制御部134は、全データおよびパリティデータの書き込みが完了したか否かを判断する。具体的には、RAID制御部134は、すべてのHDDから「OK」の応答を受け取った場合、書き込み完了と判断する。全データの書き込みが完了すると、RAID制御部134は処理を終了する。少なくとも1つのHDDにおける書き込みが完了していなければ、ステップS64の処理が繰り返され、RAID制御部134は書き込み待ち状態となる。

0132

このようにして、ホストコンピュータ10からのストライプ単位のデータ書き込み要求に応答して、データブロックとパリティブロックとのそれぞれに対応する物理ブロック内のデータが更新される。

0133

以下、図14を参照して、論理ブロック番号「D1」〜「D16」のストライプ書き込み要求が出された場合を例に採り、タイムスタンプの更新内容を説明する。
ホストコンピュータ10から論理ブロック番号「D1」〜「D16」のストライプ書き込み要求が入力されると、RAID制御部134によって、RAM132内に処理対象データテーブルが生成される。

0134

図14は、ストライプ書き込み時の処理対象データテーブルの例を示す図である。ストライプ書き込み時の処理対象データテーブル132bのテーブル構造図11図12に示したブロック書き込み時の処理対象データテーブル132aと同様である。ただし、ストライプ書き込み時の処理対象データテーブル132bには、ストライプに属するすべての論理ブロックに対応する情報が登録される。

0135

図14の例では、図8に示したストライプ41の先頭のパリティグループに関する更新データの情報が示されている。このパリティグループは、論理ブロック番号「D1」、「D5」、「D9」、「D13」の各データブロックと、論理ブロック番号「P1」のパリティブロックとを有する。なお、図14では省略しているが、ストライプ41に含まれる他の3つのパリティグループの情報も、処理対象データテーブル132bに登録される。他の3つのパリティグループには、論理ブロック番号が「P2」、「P3」、「P4」のパリティブロックが含まれる(図8参照)。

0136

論理ブロック番号「D1」〜「D16」それぞれのデータを「d1」〜「d16」と表したとき、論理ブロック番号「P1」〜「P4」の各パリティブロックのパリティデータ「p1」〜「p4」は、それぞれ以下の式で計算できる。
「p1」=「d1」^「d5」^「d9」^「d13」
「p2」=「d2」^「d6」^「d10」^「d14」
「p3」=「d3」^「d7」^「d11」^「d15」
「p4」=「d4」^「d8」^「d12」^「d16」
ここで、図14に示した各データ「d1」、「d5」、「d9」、「d13」に付与されるタイムスタンプは、同じ値「t1」である。個々のタイムスタンプの格納領域は、データが格納されるHDDに対応する領域である。データ「d1」、「d5」、「d9」、「d13」は、それぞれ格納されるHDDが異なるため、タイムスタンプの格納領域も異なっている。

0137

パリティデータ「p1」には、データ「d1」、「d5」、「d9」、「d13」それぞれに対応する4つのタイムスタンプが付与される。パリティデータ「p1」に付与される各タイムスタンプの値は、すべて「t1」である。

0138

このようにして、処理対象データテーブル132bを用いて、ストライプに含まれるデータとパリティデータとに対してタイムスタンプが付与される。そして、タイムスタンプが付与されたデータおよびパリティデータが、RAID5のストライプ書き込みより、対応付けられた物理ブロックに書き込まれる。その結果、各データに付与したタイムスタンプ「t1」は、データを格納したHDDとパリティデータを格納したHDDとに2重で格納される。

0139

次に、データ読み込み処理について説明する。まず、ブロック単位の読み込み処理について説明する。
図15は、ブロック読み込み処理の手順を示すフローチャートである。以下、図15に示す処理をステップ番号に沿って説明する。この処理は、ホストコンピュータ10からブロック単位でのデータの読み込み要求が入力されたときに実行される。なお、データの読み込み要求には、読み込み対象のデータが属するデータブロックの論理ブロック番号が含まれている。

0140

[ステップS71]RAID制御部134は、読み込み要求で指定されたデータブロックに対応する物理ブロックのデータの読み込み指示をHDDアクセス部135に対して出力する。すると、HDDアクセス部135により、指定された物理ブロックが属するHDDから、指定された物理ブロック内のデータが読み出される。

0141

[ステップS72]RAID制御部134は、パリティブロックに対応する物理ブロックのパリティデータの読み込み指示を、HDDアクセス部135に対して出力する。すると、HDDアクセス部135により、指定された物理ブロックが属するHDDから、指定された物理ブロック内のデータが読み出される。

0142

[ステップS73]RAID制御部134は、データの読み込みが完了したか否かを判断する。具体的には、RAID制御部134は、データの読み込み指示を出力したHDDからデータが応答された場合、データ読み込み完了と判断する。データ読み込みが完了した場合、処理がステップS74に進められる。データ読み込みが完了していなければステップS73の処理が繰り返され、RAID制御部134は読み込み待ち状態となる。

0143

[ステップS74]RAID制御部134は、パリティデータの読み込みが完了したか否かを判断する。具体的には、RAID制御部134は、パリティデータの読み込み指示を出力したHDDからパリティデータが応答された場合、パリティデータ読み込み完了と判断する。パリティデータの読み込みが完了した場合、処理がステップS75に進められる。パリティデータ読み込みが完了していなければステップS74の処理が繰り返され、RAID制御部134は読み込み待ち状態となる。

0144

RAID制御部134はデータとパリティデータとの読み込みが完了すると、RAM132内に処理対象データテーブルを作成し、読み込んだデータをそのデータ管理テーブルに格納する。

0145

[ステップS75]タイムスタンプ比較部137は、パリティデータに付与された複数のタイムスタンプのうちの読み込み対象のデータに対応するタイムスタンプと、読み込み対象のデータに付与されたタイムスタンプとを比較する。読み込み対象のデータに付与されたタイムスタンプの値が、パリティデータに付与されたタイムスタンプの値以上の場合、処理がステップS76に進められる。そうでなければ、処理がステップS79に進められる。

0146

[ステップS76]読み込み対象のデータのタイムスタンプが、パリティデータのタイムスタンプ以上の場合、RAID制御部134は、読み込んだデータをホストコンピュータ10に応答する。

0147

[ステップS77]タイムスタンプ比較部137は、パリティデータに付与された読み込み対象のデータに対応するタイムスタンプと、読み込み対象のデータに付与されたタイムスタンプとを比較する。読み込み対象のデータに付与されたタイムスタンプの値が、パリティデータに付与されたタイムスタンプの値より大きければ、処理がステップS78に進められる。読み込み対象のデータに付与されたタイムスタンプの値と、パリティデータに付与されたタイムスタンプの値とが等しければ、処理が終了する。

0148

[ステップS78]読み込み対象のデータに付与されたタイムスタンプの値が、パリティデータに付与されたタイムスタンプの値より大きい場合、RAID制御部134は、パリティ書き込み抜けの修復を行う。パリティ書き込み抜け修復処理の詳細は後述する(図17参照)。その後、処理が終了する。

0149

[ステップS79]読み込み対象のデータのタイムスタンプが、パリティデータのタイムスタンプより小さい場合、RAID制御部134は、データ書き込み抜けの修復を行う。データ書き込み抜けの修復および応答処理の詳細は後述する(図20参照)。そして、RAID制御部134は、ホストコンピュータ10に対して、修復したデータを応答する。その後、処理が終了する。

0150

このようにして、ブロック単位の読み込み処理が行われる。例えば、論理ブロック番号「D1」のデータブロックのデータ「d1」を読み出す場合について説明する。この場合、まず、データ「d1」を格納する物理ブロックからそのデータ「d1」が読み出される。また、論理ブロック番号「D1」のデータブロックと同じパリティグループに属するパリティブロック「P1」のパリティデータ「p1」を格納する物理ブロックから、パリティデータ「p1」が読み出される。そして、RAID制御部134によって、処理対象データテーブルが生成される。

0151

図16は、処理対象データテーブルのデータ構造例を示す図である。処理対象データテーブル132cは、図15のステップS74終了後に、RAID制御部134によってRAM132内に生成される。処理対象データテーブル132cには、論理ブロック番号、ディスク番号、物理ブロック番号、データ、およびタイムスタンプの欄が設けられている。各欄には、図11に示した処理対象データテーブル132aの同名の欄と同種の情報が設定される。

0152

図16の例では、処理対象データテーブル132cに、データ「d1」とパリティデータ「p1」との情報が登録されている。データ「d1」は、論理ブロック番号「D1」のデータブロックのデータである。「p1」は、論理ブロック番号「D1」のデータブロックと同じパリティグループ内のパリティブロック(論理ブロック番号「P1」)のパリティデータである。

0153

ここで、データ「d1」に付与されていたタイムスタンプを「t11」とする。タイムスタンプ「t11」は、ディスク番号「DISK#1」のHDD210に対応付けられている。また、パリティデータ「p1」に付与されていたタイムスタンプを「t21」、「t22」、「t23」、「t24」とする。タイムスタンプ「t21」、「t22」、「t23」、「t24」は、それぞれディスク番号「DISK#1」、「DISK#2」、「DISK#3」、「DISK#4」のHDD210,220,230,240に対応付けられている。

0154

タイムスタンプ比較部137は、データ「d1」に付与されていたタイムスタンプ「t1」と、データ「d1」の読み込み元のHDD210に対応付けてタイムスタンプに付与されていたタイムスタンプ「t21」とを比較する。ここで「t21」>「t11」の場合、タイムスタンプ比較部137は、データの書き込み抜けがあると判断する。他方、タイムスタンプ比較部137は、「t21」≦「t11」であれば、データの書き込み抜けは発生していないと判断する。ただし、「t21」<「t11」の場合、タイムスタンプ比較部137は、パリティデータの書き込み抜けが発生していると判断する。

0155

RAID制御部134は、データの書き込み抜けが検出されなければ、読み込んだデータ「d1」をホストコンピュータ10に応答する。パリティデータの書き込み抜けが検出された場合には、RAID制御部134は、パリティデータ書き込み抜け修復処理を行う。データの書き込み抜けが検出された場合には、RAID制御部134は、データ書き込み抜け修復および応答処理を行う。

0156

次に、パリティデータ書き込み抜け修復処理について説明する。
図17は、パリティデータ書き込み抜け修復処理の手順を示すフローチャートである。以下、図17に示す処理をステップ番号に沿って説明する。

0157

[ステップS81]RAID制御部134は、残りのデータの読み込み指示をHDDアクセス部135に出力する。すると、HDDアクセス部135により残りのデータがHDDから読み出される。ここで残りのデータとは、読み込み要求で指定された論理ブロック番号のデータブロックと同じパリティグループに属する他のデータブロックそれぞれに対応する物理ブロックに格納されたデータである。

0158

[ステップS82]RAID制御部134は、ステップS81で読み込み指示を出した全データの読み込みが完了したか否かを判断する。すべてのデータの読み込みが完了していれば、処理がステップS83に進められる。読み込みが未完了のデータがあれば、ステップS82の処理が繰り返され、RAID制御部134は、読み込み待ちの状態となる。

0159

読み込み要求で指定されたデータブロックのデータとパリティブロックのデータとは、既にステップS71,72の処理で読み出されている。従って、ステップS81で残りの全データが読み出されることにより、読み込み要求で指定された論理ブロックが属するパリティグループ内のすべてのデータとパリティデータとが読み出されたこととなる。

0160

[ステップS83]タイムスタンプ比較部137は、パリティデータに付与された各タイムスタンプと、新たに読み出された各データに付与されたタイムスタンプとを比較する。具体的には、タイムスタンプ比較部137は、パリティデータの付与された各タイムスタンプの格納場所に基づいて、そのタイムスタンプに対応するHDDを判断する。そして、タイムスタンプ比較部137は、パリティデータに付与された各タイムスタンプと、そのタイムスタンプに対応するHDDから読み出されたデータに付与されたタイムスタンプとを比較する。各タイムスタンプの比較の結果、すべてのデータについて、パリティデータに付与されたタイムスタンプ以上の値のタイムスタンプが付与されていた場合、処理がステップS85に進められる。他方、パリティデータに付与されたタイムスタンプよりも小さい値のタイムスタンプが付与されたデータが少なくとも1つある場合、処理がステップS84に進められる。

0161

[ステップS84]RAID制御部134は、パリティデータよりも古いタイムスタンプが付与されたデータが格納されていた物理ブロックを特定する。そして、RAID制御部134は、特定した物理ブロックに対応する論理ブロックをバッドブロックとして記録する。すなわち、パリティデータよりも古いタイムスタンプが付与されたデータが格納されていた物理ブロックでは、データの書き込み抜けが発生している。また、パリティデータ書き込み抜け修復処理が実行される場合には、既にパリティデータの書き込み抜けが発生していることが分かっている。すなわち、同一のパリティグループにおいて複数の物理ブロックで書き込み抜けが発生していることとなる。

0162

複数の物理ブロックで書き込み抜けが発生した場合、データを修復することができない。そこで、RAID制御部134は、書き込み抜けが発生した物理ブロックに対応する論理ブロックのデータが損失したことを示すため、その論理ブロックの属性をバッドブロックとする。以後、バッドブロックとして登録された論理ブロックのデータ読み込み要求があると、RAID制御部134はエラーを応答する。

0163

[ステップS85]RAID制御部134は、読み出されているデータに基づいてパリティ計算を行い、パリティデータを生成する。具体的には、RAID制御部134は、読み込んだデータの排他的論理和演算を行い、演算結果をパリティデータとする。この際、RAID制御部134は、生成したパリティデータに、各データのタイムスタンプと同じ値のタイムスタンプを付与する。

0164

[ステップS86]RAID制御部134は、パリティブロックに対応する物理ブロックへのタイムスタンプ付きのパリティデータの書き込み指示をHDDアクセス部135に対して出力する。すると、HDDアクセス部135により、修復されたパリティデータがHDD内の指定された論理ブロックに書き込まれる。

0165

[ステップS87]RAID制御部134は、パリティデータの書き込みが完了したか否かを判断する。書き込みが完了した場合、処理が終了する。書き込みが完了していなければ、ステップS87の処理が繰り返され、RAID制御部134は書き込み完了待ちの状態となる。

0166

このようにして、パリティデータの書き込み抜けがあった場合、パリティデータを修復することができる。
例えば、論理ブロック番号「D1」のデータブロック内のデータの読み込み処理において、パリティデータの書き込み抜けが検出された場合を想定する。この場合、論理ブロック「D1」と同じパリティグループに属する他のデータブロックのデータが読み出される。すなわち論理ブロック番号「D5」、「D9」、「D13」のデータブロックに対応する物理ブロックからデータ「d5」、「d9」、「d13」が読み出される。読み出されたデータは、図16に示した処理対象データテーブル132cに追加登録される。

0167

図18は、パリティ書き込み抜け修復時の処理対象データテーブルの例を示す図である。処理対象データテーブル132cには、データ「d5」、「d9」、「d13」に関する情報が追加登録されている。

0168

タイムスタンプ比較部137は、新たに読み出されたデータ「d5」、「d9」、「d13」に付与されているタイムスタンプと、パリティデータ「p1」に付与されているタイムスタンプとを比較する。すなわち、「t12」と「t22」とが比較され、「t13」と「t23」とが比較され、「t14」と「t24」とが比較される。比較の結果、以下の条件が成立するか否かが判断される。
(t12≧t22)AND(t13≧t23)AND(t14≧t24)
ここで「AND」は論理積を示している。この条件が成立するとき、タイムスタンプ比較部137は、論理ブロック番号「D5」、「D9」、「D13」に対応する物理ブロックに書き込み抜けはないと判断する。上記条件が成立しない場合、タイムスタンプ比較部137は、パリティデータに付与されたタイムスタンプより小さいタイムスタンプを有する物理ブロックにおいて書き込み抜けが発生したと判断する。この場合、RAID制御部134は、該当する論理ディスクのブロックをデータ損失したバッドブロックとして登録する。

0169

RAID制御部134は、バッドブロックがない場合、各データブロックのデータ「d1」、「d5」、「d9」、「d13」を用いてパリティデータを計算する。新たに生成されるパリティデータを「p1_1」とすると、以下の計算が行われる。
「p1_1」=「d1」^「d5」^「d9」^「d13」
そして、新たに生成されたパリティデータ「p1_1」に、他のデータと同じタイムスタンプが付与される。

0170

図19は、パリティデータ修復後の処理対象データテーブルの例を示す図である。図19に示すように、新たに生成されたパリティデータ「p1_1」には、他のデータ「d1」、「d5」、「d9」、「d13」と同じタイムスタンプ「t11」、「t12」「t13」、「t14」が付与されている。

0171

そして、タイムスタンプ付きのパリティデータ「p1_1」が、論理ブロック番号「P1」に対応する物理ブロックに書き込まれる。その結果、書き込み抜けによって損失していたパリティデータが修復される。

0172

次に、データ書き込み抜け修復および応答処理について説明する。
図20は、データ書き込み抜け修復および応答処理の手順を示すフローチャートである。以下、図20に示す処理をステップ番号に沿って説明する。

0173

[ステップS91]RAID制御部134は、残りのデータの読み込み指示をHDDアクセス部135に対して出力する。すると、HDDアクセス部135により、読み込み要求で指定されたデータ以外の残りのデータがHDDから読み出される。

0174

[ステップS92]RAID制御部134は、ステップS91で読み込み指示を出した全データの読み込みが完了したか否かを判断する。すべてのデータの読み込みが完了していれば、処理がステップS93に進められる。読み込みが未完了のデータがあれば、ステップS92の処理が繰り返され、RAID制御部134は、読み込み待ちの状態となる。

0175

[ステップS93]タイムスタンプ比較部137は、パリティデータに付与された各タイムスタンプと、新たに読み出された各データに付与されたタイムスタンプとを比較する。具体的には、タイムスタンプ比較部137は、パリティデータに付与された各タイムスタンプの格納場所に基づいて、そのタイムスタンプに対応するHDDを判断する。そして、タイムスタンプ比較部137は、パリティデータに付与された各タイムスタンプと、そのタイムスタンプに対応するHDDから読み出されたデータに付与されたタイムスタンプとを比較する。各タイムスタンプの比較の結果、すべてのデータについて、パリティデータと同じ値のタイムスタンプが付与されていた場合、処理がステップS94に進められる。他方、パリティデータに付与されたタイムスタンプと異なるタイムスタンプが付与されたデータが少なくとも1つある場合、処理がステップS98に進められる。

0176

[ステップS94]RAID制御部134は、新たに読み込んだすべてのデータについて、パリティデータと同じ値のタイムスタンプが付与されていた場合、それらのデータの書き込み抜けは発生していないと判断する。そこで、RAID制御部134は、書き込み抜けが発生していないデータとパリティデータとに基づいて、データを修復する。具体的には、RAID制御部134は、書き込み抜けがあったデータ以外の各データとパリティデータとの排他的論理和演算を行い、演算結果を修復後のデータとする。

0177

[ステップS95]RAID制御部134は、読み込み要求に対応する応答として、ホストコンピュータ10にステップS94で修復したデータを送信する。
[ステップS96]RAID制御部134は、ステップS71(図15参照)における読み込み対象の物理ブロックへのステップS94で修復したデータの書き込み指示を、HDDアクセス部135に対して出力する。この際、書き込まれるデータには、パリティデータに付与されていたタイムスタンプ(該当データの書き込み先のHDDに対応するタイムスタンプ)が付与される。すると、HDDアクセス部135により、修復されたタイムスタンプ付きのデータがHDD内の指定された論理ブロックに書き込まれる。

0178

[ステップS97]RAID制御部134は、データの書き込みが完了したか否かを判断する。データの書き込みが完了していれば、処理が終了する。データの書き込みが完了していなければ、ステップS97の処理が繰り返され、RAID制御部134は書き込み完了待ちの状態となる。

0179

[ステップS98]RAID制御部134は、パリティデータより古いタイムスタンプが付与されていたデータの論理ブロックを、バッドブロックとして記録する。
[ステップS99]RAID制御部134は、ホストコンピュータ10に対してエラー応答を行う。

0180

[ステップS100]RAID制御部134は、読み出されているデータのうち、バッドブロック化されていない論理ブロックのデータ(正常に読み出された)に基づいてパリティ計算を行い、パリティデータを生成する。具体的には、RAID制御部134は、正常に読み出されたデータの排他的論理和演算を行い、演算結果をパリティデータとする。この際、RAID制御部134は、生成したパリティデータに生成元となった各データのタイムスタンプと同じ値のタイムスタンプを付与する。

0181

[ステップS101]RAID制御部134は、パリティデータの書き込み指示をHDDアクセス部135に対して出力する。すると、HDDアクセス部135により、タイムスタンプ付きのパリティデータがHDDに書き込まれる。

0182

[ステップS102]RAID制御部134は、パリティデータの書き込みが完了したか否かを判断する。パリティデータの書き込みが完了した場合、処理が終了する。パリティデータの書き込みが完了していなければ、ステップS102の処理が繰り返され、RAID制御部134は書き込み待ち状態となる。

0183

このようにして、データの書き込み抜けがあった場合、データの修復および修復したデータのホストコンピュータ10への応答ができる。
例えば、論理ブロック番号「D1」のデータブロック内のデータ「d1」の読み込み処理において、データの書き込み抜けが検出された場合を想定する。この場合、論理ブロック番号「D1」と同じパリティグループに属する他のデータブロックのデータが読み出される。すなわち論理ブロック番号「D5」、「D9」、「D13」のデータブロックに対応する物理ブロックからデータ「d5」、「d9」、「d13」が読み出される。読み出されたデータは、図16に示した処理対象データテーブル132cに追加登録される。その結果、RAID制御部134によって図18に示した処理対象データテーブル132cが生成される。このとき、論理ブロック番号「D1」のデータ「d1」に付与されたタイムスタンプ「t11」は、パリティデータ「p1」に付与されたタイムスタンプ「t21」より小さいことが分かっている。

0184

そこで、RAID制御部134は、データ「d5」、「d9」、「d13」それぞれのタイムスタンプ「t12」、「t13」、「t14」と、パリティデータ「p1」のタイムスタンプ「t22」、「t23」、「t24」とを比較する。すなわち、「t12」と「t22」とが比較され、「t13」と「t23」とが比較され、「t14」と「t24」とが比較される。比較の結果、以下の条件が成立するか否かが判断される。
(t12=t22)AND(t13=t23)AND(t14=t24)
この条件が成立するとき、データ「d5」、「d9」、「d13」と、パリティデータ「p1」とに書き込み抜けはないと判断される。

0185

論理ブロック番号「D1」のデータ「d1」以外に書き込み抜けがない場合、RAID制御部134は、論理ブロック番号「D1」のデータの修復を行う。修復されるデータを「d1_1」とすると、以下の計算が行われる。
「d1_1」=「d5」^「d9」^「d13」^「p1」
RAID制御部134は、修復したデータ「d1_1」に、パリティデータに付与されていたタイムスタンプ「t21」を付与する。そして、RAID制御部134は、処理対象データテーブル132c内の論理ブロック番号「D1」のデータとタイムスタンプとを更新する。

0186

図21は、データ修復後の処理対象データテーブルを示す図である。図18と比較すると、処理対象データテーブル132cの論理ブロック番号「D1」のデータが「d1」から「d1_1」に変更されている。また、論理ブロック番号「D1」のタイムスタンプが「t11」から「t21」に変更されている。

0187

その後、RAID制御部134は、タイムスタンプ「t21」が付与されたデータ「t1_1」の、ディスク番号「DISK#1」のHDD210の物理ブロック番号「block#1」への書き込み指示を行う。これにより、HDD210内のデータが更新される。

0188

なお、(t12=t22)AND(t13=t23)AND(t14=t24)の条件が成立しない場合、タイムスタンプの小さい方のデータまたはパリティデータに書き込み抜けがある。データのタイムスタンプがパリティデータのタイムスタンプより小さい場合、データに書き込み抜けがあるが、多重故障にためデータの修復はできない。従ってデータのタイムスタンプがパリティより小さいデータを含む論理ブロックは、論理ブロック番号「D1」の論理ブロックを含めてすべてバッドブロックとして記録される。この場合、読み込み要求で指定された論理ブロック番号「D1」のデータを修復できないため、ホストコンピュータ10へはエラー応答が送信される。

0189

修復ができない場合であっても読み込んだデータの排他的論理和演算によりパリティデータが生成される。新たなパリティデータを「p1_2」とすると以下の計算が行われる。
「p1_2」=「d1」^「d5」^「d9」^「d13」
生成されたタイムスタンプ「p1_2」には、生成元となった各データのタイムスタンプが付与される。そして、RAID制御部134は、処理対象データテーブル132c内の論理ブロック番号「P1」のパリティデータとタイムスタンプとを更新する。

0190

図22は、データを修復できないときの処理対象データテーブルを示す図である。図18と比較すると、処理対象データテーブル132cの論理ブロック番号「P1」のパリティデータが「p1」から「p1_2」に変更されている。また、論理ブロック番号「P1」のタイムスタンプは、「t11」、「t12」、「t13」、「t14」に変更されている。

0191

その後、RAID制御部134は、タイムスタンプは「t11」、「t12」、「t13」、「t14」が付与されたパリティデータ「p1_2」の、ディスク番号「DISK#5」のHDD250の物理ブロック番号「block#1」への書き込み指示を行う。これにより、HDD250内のパリティデータが更新される。

0192

以上のように、RAID5のRAID装置100は、ブロック読み込み時にデータとパリティの物理ブロックを同時に読み込んでタイムスタンプを比較することで、書き込み抜きの検出と修正を行うことができる。

0193

次に、ストライプ単位読み込み処理について説明する。
図23は、ストライプ読み込み処理の手順を示すフローチャートである。以下、図23に示す処理をステップ番号に沿って説明する。この処理は、ストライプを指定した読み込み要求に応じて実行される。

0194

[ステップS111]RAID制御部134は、指定されたストライプを構成するすべての論理ブロックそれぞれに対応する物理ブロック内のデータの読み込み指示を、HDDアクセス部135に対して出力する。すると、HDDアクセス部135により、すべてのデータおよびパリティデータがHDDから読み出される。

0195

[ステップS112]RAID制御部134は、すべてのデータとパリティデータとの読み込みが完了したか否かを判断する。すべてのデータおよびパリティデータの読み込みが完了していれば処理がステップS113に進められる。未読み込みのデータまたはパリティデータがあれば、ステップS112の処理が繰り返され、RAID制御部134は読み込み待ちの状態となる。

0196

[ステップS113]タイムスタンプ比較部137は、パリティデータに付与された各タイムスタンプと、新たに読み出された各データに付与されたタイムスタンプとを比較する。各タイムスタンプの比較の結果、すべてのデータについて、パリティデータと同じ値のタイムスタンプが付与されていた場合、処理がステップS114に進められる。他方、パリティデータに付与されたタイムスタンプと異なるタイムスタンプが付与されたデータが少なくとも1つある場合、処理がステップS115に進められる。

0197

[ステップS114]RAID制御部134は、ステップS111で読み込んだストライプのデータをホストコンピュータ10に応答する。その後、処理が終了する。
[ステップS115]RAID制御部134は、ストライプ修復および応答処理を行う。その後、処理が終了する。

0198

このようにして、ストライプ単位のデータ読み込みが行われる。例えば、論理ブロック番号「D1」から「D16」までのデータブロック、およびそのデータブロックに対応するパリティブロックを含むストライプの読み込み要求が行われた場合を想定する。この場合、ストライプに含まれるすべての論理ブロックに対応する物理ブロックからデータおよびパリティデータが読み出される。RAID制御部134は、RAM132内に処理対象データテーブルを生成し、読み込んだデータを格納する。

0199

図24は、ストライプ読み込み時の処理対象データテーブルの例を示す図である。図24に示す処理対象データテーブル132dでは、ストライプ内のパリティグループを太線で囲んでいる。このように、ストライプを指定した読み込み要求が行われた場合、指定されたストライプに含まれるすべての論理ブロックに対応する物理ブロックからデータおよびパリティデータが読み出され、処理対象データテーブル132dに格納される。

0200

ここで、タイムスタンプ比較部137により、処理対象データテーブル132d内のすべてのデータブロックのタイムスタンプと、パリティブロック内のタイムスタンプとが比較される。すべての比較結果が一致した場合、該当するストライプの書き込み抜けはないと判断される。その場合、読み出されたすべてのデータが、ホストコンピュータ10に送信される。

0201

他方、一致しないタイムスタンプがある場合は、RAID制御部134によりストライプ修復および応答処理が開始される。
図25は、ストライプ修復および応答処理の手順を示すフローチャートである。以下、図25に示す処理をステップ番号に沿って説明する。

0202

[ステップS121]RAID制御部134は、タイムスタンプ比較部137による比較結果が、すべてのデータにおいて、データに付与されたタイムスタンプがパリティデータに付与されたタイムスタンプ以上の値であるか否かを判断する。すべてのデータのタイムスタンプが、パリティデータのタイムスタンプ以上の値であれば、処理がステップS123に進められる。少なくとも1つのデータにおいて、パリティデータより小さな値のタイムスタンプが付与されていれば、処理がステップS122に進められる。

0203

[ステップS122]RAID制御部134は、パリティデータより古いタイムスタンプが付与されたデータがある場合、そのデータの書き込み時に書き込み抜けが発生したものと判断する。そこで、RAID制御部134は、データの修復および応答処理を行う。その後、処理が終了する。

0204

[ステップS123]RAID制御部134は、すべてのデータにおいて、データに付与されたタイムスタンプがパリティデータに付与されたタイムスタンプ以上の値である場合、パリティデータの書き込み時に書き込み抜けが発生したものと判断する。その場合、データについては書き込み抜けは発生していないと判断し、RAID制御部134は、読み込んだデータをホストコンピュータ10に応答する。

0205

[ステップS124]RAID制御部134は、タイムスタンプが不整合なままのパリティグループがあるか否かを判断する。すなわち、RAID制御部134は、タイムスタンプの不一致が存在するパリティグループのうち、ステップS125〜S128の処理をまだ実行していないパリティグループがあるか否かを判断する。タイムスタンプが不整合のパリティグループがある場合、処理がステップS125に進められる。タイムスタンプが不整合のパリティグループがない場合、処理が終了する。

0206

[ステップS125]RAID制御部134は、タイムスタンプが不整合なままのパリティグループを1つ選択する。
[ステップS126]RAID制御部134は、読み出されているデータに基づいてパリティ計算を行い、パリティデータを生成する。具体的には、RAID制御部134は、正常に読み出されたデータの排他的論理和演算を行い、演算結果をパリティデータとする。この際、RAID制御部134は、生成したパリティデータに生成元となった各データのタイムスタンプと同じ値のタイムスタンプを付与する。

0207

[ステップS127]RAID制御部134は、HDDアクセス部135に対してパリティブロックに対応する物理ブロックへのパリティデータの書き込みを指示する。すると、HDDアクセス部135によって指定された物理ブロックへのパリティデータの書き込みが行われる。

0208

[ステップS128]RAID制御部134は、パリティデータの書き込みが完了したか否かを判断する。パリティデータの書き込みが完了した場合、処理がステップS124に進められる。パリティデータの書き込みが完了していなければ、ステップS128の処理が繰り返され、RAID制御部134は書き込み完了待ち状態となる。

0209

このようにして、ストライプ修復および応答処理が行われる。例えば、図24に示したストライプの各データに関し、論理ブロック番号「D14」のデータブロックのデータ「d14」のタイムスタンプと、論理ブロック番号「P2」のパリティブロックのパリティデータ「p2」のタイムスタンプとが不一致の場合を想定する。この例では、データ「d14」のタイムスタンプ「t18」と、パリティデータ「p2」の「DISK#4」に対応するタイムスタンプ「t28」とが、「t18」>「t28」という関係であるものとする。

0210

この場合、パリティデータに付与されたタイムスタンプの方が小さいため、パリティデータの書き込み時に書き込み抜けが発生したものと考えられる。そこで、RAID制御部134は、パリティ計算を行い、パリティデータを生成する。生成されたパリティデータは処理対象データテーブル132dに格納される。

0211

図26は、書き込み抜けが発生したパリティデータを生成後の処理対象データテーブルを示す図である。図26に示すように、論理ブロック番号「P2」のパリティデータ「p2」は、「p2_1」に更新されている。パリティデータ「p2_1」を式で表すと以下の通りである。
「p2_1」=「d2」^「d6」^「d10」^「d14」
生成されたパリティデータ「p2_1」には、同じパリティグループ内の各データのタイムスタンプ「t15」、「t16」、「t17」、「t18」が付与される。生成されたパリティデータ「p2_1」とタイムスタンプとは、処理対象データテーブル132dに記憶される。そして、タイムスタンプ付きのパリティデータ「p2_1」が、ディスク番号「DISK#5」のHDD250の物理ブロック番号「block#2」の物理ブロックに書き込まれる。

0212

次に、ストライプ中データ修復および応答処理について詳細に説明する。
図27は、ストライプ中データ修復および応答処理の手順を示すフローチャートである。以下、図27に示す処理をステップ番号に沿って説明する。

0213

[ステップS131]RAID制御部134は、タイムスタンプが不整合なパリティグループがあるか否かを判断する。不整合なパリティグループがあれば、処理がステップS132に進められる。不整合なパリティグループがなければ処理がステップS142に進められる。

0214

[ステップS132]RAID制御部134は、タイムスタンプが不整合なパリティグループを1つ選択する。
[ステップS133]RAID制御部134は、タイムスタンプ比較部137による比較結果において、パリティデータのタイムスタンプより小さな値のタイムスタンプが付与されたデータが格納されたデータブロックがあるか否かを判断する。該当するデータブロックが少なくとも1つあれば処理がステップS134に進められる。該当するデータブロックがなければ処理がステップS139に進められる。

0215

[ステップS134]RAID制御部134は、パリティデータのタイムスタンプより小さな値のタイムスタンプが付与されたデータが格納されたデータブロックが1つだけか否かを判断する。該当するデータブロックが1つだけであれば、処理がステップS135に進められる。該当するデータブロックが2つ以上あれば、処理がステップS138に進められる。

0216

[ステップS135]RAID制御部134は、データを修復する。具体的には、RAID制御部134は、パリティグループ内の他のデータおよびパリティデータの排他的論理和演算を行い、演算結果を修復後のデータとする。この際、RAID制御部134は、生成したデータに、パリティデータのタイムスタンプ(該当データの書き込み先のHDDに対応するタイムスタンプ)と同じ値のタイムスタンプを付与する。

0217

[ステップS136]RAID制御部134は、HDDアクセス部135に対して、書き込み抜けがあったデータブロックに対応する物理ブロックへのデータの書き込みを指示する。すると、HDDアクセス部135によって指定された物理ブロックへのデータの書き込みが行われる。

0218

[ステップS137]RAID制御部134は、データの書き込みが完了したか否かを判断する。データの書き込みが完了した場合、処理がステップS131に進められる。データの書き込みが完了していなければ、ステップS137の処理が繰り返され、RAID制御部134は書き込み完了待ち状態となる。

0219

[ステップS138]RAID制御部134は、ステップS134で該当データブロックが複数あると判断された場合、そのデータブロックをバッドブロックとして記録する。
[ステップS139]RAID制御部134は、読み出されているデータに基づいてパリティ計算を行い、パリティデータを生成する。具体的には、RAID制御部134は、読み込んだデータの排他的論理和演算を行い、演算結果をパリティデータとする。この際、RAID制御部134は、生成したパリティデータに、各データのタイムスタンプと同じ値のタイムスタンプを付与する。

0220

[ステップS140]RAID制御部134は、HDDアクセス部135に対してパリティブロックに対応する物理ブロックへのパリティデータの書き込みを指示する。すると、HDDアクセス部135によって指定された物理ブロックへのパリティデータの書き込みが行われる。

0221

[ステップS141]RAID制御部134は、パリティデータの書き込みが完了したか否かを判断する。パリティデータの書き込みが完了した場合、処理がステップS131に進められる。パリティデータの書き込みが完了していなければ、ステップS141の処理が繰り返され、RAID制御部134は書き込み完了待ち状態となる。

0222

[ステップS142]RAID制御部134は、ステップS131の判断においてタイムスタンプが不整合なパリティグループがないと判断された場合、バッドブロックとして記録された論理ブロックがあるか否かを判断する。バッドブロックがあれば、処理がステップS143に進められる。バッドブロックがなければ、処理がステップS144に進められる。

0223

[ステップS143]RAID制御部134は、ホストコンピュータ10に対してエラー応答を行う。その後、処理が終了する。
[ステップS144]RAID制御部134は、正常応答として、ホストコンピュータ10に対して修復されたデータを含むストライプのデータを送信する。その後、処理が終了する。

0224

このようにして、ストライプ中のデータ修復および応答処理が行われる。例えば、論理ブロック番号「D14」のデータブロックで書き込み抜けが発生した場合を想定する。
図28は、データ修復時の処理対象データテーブルの例を示す図である。この場合、論理ブロック番号「D14」のデータブロックのデータ「d14」に付与されていたタイムスタンプ「t18」と、論理ブロック番号「P2」のパリティブロックのパリティデータに付与されていたタイムスタンプ「t28」とが不整合となる。すなわち、比較の結果、「t18」<「t28」であることが判明する。

0225

すると、RAID制御部134によって、タイムスタンプに不整合のあるパリティグループとして、論理ブロック番号「D2」、「D6」、「D10」、「D14」、「P2」を有するパリティグループが選択される。ここで、パリティデータよりも小さい値のタイムスタンプが付与されたデータが1つだけであれば、そのデータの書き込み抜けが発生したものと判断される。書き込み抜けが発生したデータが1つだけであれば、そのデータの修復が可能である。そこで、該当データの修復処理が行われる。

0226

図28に示すように、書き込み抜けが発生したデータが1つだけであれば、該当データが修復される。修復されたデータを「d14_1」とすると、以下の計算が実行される。
「d14_1」=「d2」^「d6」^「d10」^「p2」
修復されたデータ「d14_1」には、パリティデータに付与されていたタイムスタンプ「t28」が付与される。さらに、修復されたデータが処理対象データテーブル132dに格納される。そして、タイムスタンプ付きのデータ「d14_1」が、ディスク番号「DISK#4」のHDD240の物理ブロック番号「block#2」の物理ブロックに書き込まれる。

0227

このように、データが修復できた場合には、修復されたデータを含むストライプがホストコンピュータ10に応答される。
なお、書き込み抜けが2個以上のデータで発生した場合、RAID5ではデータの修復ができない。この場合、RAID制御部134は、書き込み抜けが発生したデータの論理ブロックをバッドブロックとする。そして、読み出されたデータとパリティデータとの不整合を是正するため、パリティデータが再計算される。

0228

図29は、2つ以上のデータで書き込み抜けがあった場合の処理対象データテーブルの例を示す図である。図29の例では、論理ブロック番号「D6」、「D14」の2つのデータブロックのデータの書き込み時に書き込み抜けが発生したものとする。この場合、論理ブロック番号「D6」のデータブロックのデータ「d6」と、論理ブロック番号「D14」のデータブロックのデータ「d14」のタイムスタンプについて不整合が検出される。すなわち、比較の結果、「t16」<「t26」であり、かつ「t18」<「t28」であることが判明する。

0229

このように2つのデータで書き込み抜けがある場合、該当データに対応する論理ブロックがバッドブロックとして記憶される。そして、読み出されているデータに基づいてパリティデータが計算され、新たなパリティデータが生成される。生成されたパリティデータを「p2_2」とすると、以下の計算が実行される。
「d2_2」=「d2」^「d6」^「d10」^「p14」
生成されたパリティデータ「p2_1」には、同じパリティグループ内の各データのタイムスタンプ「t15」、「t16」、「t17」、「t18」が付与される。生成されたパリティデータ「p2_2」とタイムスタンプとは、処理対象データテーブル132dに記憶される。そして、タイムスタンプ付きのパリティデータ「p2_2」が、ディスク番号「DISK#5」のHDD250の物理ブロック番号「block#2」の物理ブロックに書き込まれる。

0230

このように、データが修復できずストライプ内にバッドブロックが発生した場合、ホストコンピュータ10にエラー応答が返される。
以上のように第1の実施の形態では、RAID5によるストライプ読み込み時に、データとパリティの物理ブロックを同時に読み込んでタイムスタンプを比較することで、書き込み抜きの検出と修正を行うことができる。すなわち、データの書き込み処理が正常終了したにも拘わらずデータが書き込まれていないという異常を、書き込み直後の読み込み処理を行うことなく検出可能となる。これにより、データの書き込み時に書き込み抜けの有無をチェックする必要がなくなり、データの書き込み処理の効率化が図れる。

0231

しかも、読み込み要求が出されたときに書き込み抜けを検出した場合、パリティデータなどを用いてデータを修復することができる。従って、高い信頼性を維持することができる。

0232

なお、ストライプ単位でデータの読み込みが行われる場合、書き込み抜けを検出した際のデータの修復を迅速に行うことができる。すなわち、データの修復には、同じパリティグループ内の他のデータとパリティデータとが用いられる。ストライプ単位での読み込みであれば、データの書き込み抜けを検出した時点で、修復に必要なデータおよびパリティデータも処理対象データテーブルに格納されている。そのため、迅速にデータの修復を行いホストコンピュータ10にストライプの全データを応答することができる。

0233

また、データやパリティデータを修復した場合には、修復後のデータまたはパリティデータが、HDDに書き戻される。これにより、書き込み抜けによって発生していたパリティグループ内での不整合を、読み込み要求時に修正することができる。すなわち、データの読み込み要求の処理と、書き込み抜けのチェックおよび修復が同時に行われ、データ異常の修復を効率よく行うことができる。

0234

[第2の実施の形態]
次に第2の実施の形態について説明する。第2の実施の形態は、第1の実施の形態におけるタイムスタンプに代えて、カウンタ値を用いたものである。

0235

第2の実施の形態におけるシステムを構成する要素は、図2に示した第1の実施の形態と同じである。ただし、コントローラ130の機能とHDD210,220,230,240,250のデータフォーマットとが異なる。すなわち、HDDのデータフォーマットにおいて、第1の実施の形態ではタイムスタンプ領域211bとされていた記憶領域(図3参照)が、第2の実施の形態では複数のカウンタ値(カウンタ値群)を格納するカウンタ領域となる。ただし、第2の実施の形態では、1つのカウンタ値を2ビットで表すものとする。そのため、カウンタ領域は、第1の実施の形態におけるタイムスタンプ領域211bよりも記憶容量が少なくて済む。

0236

図30は、第2の実施の形態におけるHDD内のカウンタ値格納例を示す図である。HDD31a内のx個の物理ブロックには、それぞれ物理ブロック番号(block#に続く数字)が設定されている。そして、各物理ブロックは、データとカウンタ値群との記憶領域を有している。カウンタ値群の記憶領域には、HDDの台数分のタイムスタンプを格納できる。カウンタ値群の記憶領域は、HDDのディスク番号に対応付けられたカウンタ値領域に分けられている。各カウンタ値領域はそれぞれ、RAID5に含まれる各HDDに対応付けられている。図4の例では、物理ブロック番号「i」におけるディスク番号「j」に対応するカウンタ値をc(i,j)と表している。このようなカウンタ値格納領域が、RAID5に含まれる各HDD内に設けられる。

0237

次に、第2の実施の形態におけるコントローラの機能について説明する。
図31は、第2の実施の形態のコントローラの機能を示す図である。コントローラ130aは、データ入出力部133a、RAID制御部134a,HDDアクセス部135a、カウンタ136a、およびカウンタ値比較部137aを有している。ここで、データ入出力部133aとHDDアクセス部135aとの機能は、図9に示した第1の実施の形態における同名の要素の機能と同様である。

0238

RAID制御部134aは、アクセス要求に応じて、RAID技術を用いたHDD210a,220a,230a,240a,250aへのアクセス制御を行う。本実施の形態では、RAID制御部134aは、RAID5のアクセス制御を行うものとする。RAID制御部134aは、RAID5のアクセス制御を行うために、図8に示したような論理ブロックと物理ブロックとの対応関係を管理している。そして、RAID制御部134aは、アクセス要求で指定された論理ブロックに対応する物理ブロック、およびその物理ブロックを有するHDDを特定し、アクセス要求に応じたアクセス指示をHDDアクセス部135aに対して出力する。

0239

なお、RAID制御部134aは、新たに論理ディスクを生成する場合、その論理ディスクの論理ブロックに対応付けられる物理ブロックのカウンタ値記憶領域内のカウンタ値を「0」に初期化する。

0240

また、RAID制御部134aは、アクセス要求が書き込み要求の場合、カウンタ136aからカウンタ値を取得する。具体的には、RAID制御部134aは、書き込み要求があると、書き込み対象のデータブロックに対応する物理ブロック内のデータと、そのデータブロックと同じパリティグループ内のパリティブロックに対応する物理ブロック内のパリティデータとを読み出す。そしてRAID制御部134aは、読み込んだデータに付与されていたカウンタ値をカウンタ136aに渡す。すると、カウンタ136aから更新されたカウンタ値が返される。RAID制御部134aは、取得したカウンタ値を書き込み対象のデータと、対応するパリティデータとに付与する。

0241

また、RAID制御部134aは、アクセス要求が読み込み要求の場合、読み込んだデータおよびそのデータが属するパリティグループのパリティデータそれぞれに付与されたカウンタ値群から、読み込んだデータに対応するカウンタ値を抽出する。そして、RAID制御部134aは、抽出した2つのカウンタ値をカウンタ値比較部137aに渡す。RAID制御部134aは、カウンタ値比較部137aからカウンタ値の比較結果を受け取り、その比較結果に基づいて書き込み抜けの有無を判定する。RAID制御部134aは、書き込み抜けがなければ、読み込んだデータを読み込み要求への応答としてデータ入出力部133aに渡す。

0242

なお、RAID制御部134aは、書き込み抜けがあると判定した場合、データの復旧処理を行う。そして、RAID制御部134aは、復旧したデータを読み込み要求への応答としてデータ入出力部133aに渡す。

0243

カウンタ136aは、RAID制御部134aからの要求に応じてカウンタ値を生成する。具体的には、カウンタ136aは、RAID制御部134aから現在のカウンタ値を受け取ると、そのカウンタ値をカウントアップする。カウンタ値は2ビットで表されるため、「0」から「3」までのカウンタアップが行われる。現在のカウンタ値が「3」であれば、カウントアップによりカウンタ値は「0」に変更される。

0244

カウンタ値比較部137aは、RAID制御部134aからの要求に応じてカウンタ値を比較する。カウンタ値の比較により、カウンタ値が同じか、いずれか一方のカウンタ値が「1」だけ進んでいるか、カウンタ値のずれが「2」であるかの比較結果が得られる。カウンタ値比較部137aは、比較結果をRAID制御部134aに渡す。

0245

RAID制御部134aは、カウンタ値比較部137aからの比較結果に基づいて、書き込み抜けの有無を判定することができる。
図32は、カウンタ値比較結果に基づく書き込み抜け判定基準を示す図である。図32では、物理ブロック「U」から読み出されたデータのカウンタ値を「u」としている。また、物理ブロック「V」から読み出されたパリティデータに付与された複数のカウンタ値のうち、物理ブロック「U」を有するHDDに対応するカウンタ値を「v」としている。

0246

カウンタ値「u」とカウンタ値「v」の値が同じであれば、書き込み抜けがないと判定される。カウンタ値「u」の値よりもカウンタ値「v」の値が「1」だけ進んでいれば、物理ブロック「U」に書き込み抜けがあると判定される。カウンタ値「v」の値よりもカウンタ値「u」の値が「1」だけ進んでいれば、物理ブロック「V」に書き込み抜けがあると判定される。すなわち、カウンタ値が「1」だけ遅れている方の物理ブロックに書き込み抜けが発生していると判定される。

0247

カウンタ値「u」とカウンタ値「v」との差が「2」の場合、どちらのカウンタ値が進んでいるのかが不明となる。その場合、書き込み抜けの判定は不能となる。判定不能となった場合は、RAID制御部134aは、論理ブロック「U」内のデータを損失したとして、バッドブロックとして登録する。次にRAID制御部134aは、パリティグループのパリティデータを再度計算し、パリティデータのカウンタ値「v」をデータのカウンタ値「u」にセットする。そしてRAID制御部134aは、データブロックに対応する物理ブロック「U」のカウンタ値を更新すると共に、パリティブロックに対応する物理ブロック「V」のパリティデータを更新する。

0248

なお、RAID制御部134aは、ストライプ書き込みを行う場合、すべてのデータおよびパリティデータのカウンタ値を更新する。具体的には、RAID制御部134aは、ストライプ書き込み要求があると、ストライプに含まれるすべての論理ブロックに対応する物理ブロックから、データおよびパリティデータを読み出す。さらにRAID制御部134aは、すべてのデータのカウンタ値をカウンタ136aに渡して更新させる。その後、RAID制御部134aは、書き込み対象のデータ、およびパリティデータに更新後のカウンタ値を付与して、HDDアクセス部135aに対して物理ブロックへの書き込み指示を行う。

0249

このようにして、カウンタ値を用いて書き込み抜けの検出が可能である。カウンタ値記憶領域はタイムスタンプ記憶領域よりも少ない記憶容量で済むため、カウンタ値を用いることで、HDD内の記憶領域の利用効率を高めることができる。

0250

なお、第2の実施の形態では、カウンタ値を2ビットで表している。この場合、カウンタ値「3」をカウントアップさせた場合、カウンタ値が「0」となる。このようにすることで、少ないビット数のカウンタ値を用いて、時系列上の前後関係が表現可能となる。例えば、カウンタ値「3」が付与されたデータより、カウンタ値「0」が付与されたパリティデータの方が遅い時刻に書き込まれたと判断することができる。その結果、カウンタ値「3」が付与されたデータについては、書き込み抜けが発生していると判断できる。

0251

[第3の実施の形態]
第3の実施の形態は、タイムスタンプとカウンタ値とを併用して書き込み抜けを検出するものである。

0252

第2の実施の形態に示したように、カウンタ値を用いた場合、カウンタ値のカウントアップをするために、ストライプ書き込みのときに事前読み込みを行うこととなる。そこで、ストライプ書き込み時の事前読み込みを行わずに済ませるため、タイムスタンプとカウンタを併用する。具体的には、各データおよびパリティデータにタイムスタンプが1つだけ付与される。また、データとパリティデータとには、RAID5のHDD数分のカウンタ値が設定されると共に、各カウンタ値に対して、タイムスタンプとカウンタ値とのどちらを使用しているか判別するためのフラグが設定される。

0253

第3の実施の形態では、データとパリティデータとのそれぞれに付与されたタイムスタンプ、フラグ、およびカウンタ値を比較することで、書き込み抜けの有無が判断される。そこで、以下、タイムスタンプ、フラグ、およびカウンタ値をまとめて、比較対象情報と呼ぶこととする。

0254

タイムスタンプとカウンタ値とを記憶するため、HDD内には、第1の実施の形態におけるタイムスタンプ記憶領域に代えて、比較対象情報記憶領域が物理ブロックごとに設けられる。比較対象情報記憶領域には、1つのタイムスタンプ、複数のカウンタ値、および複数のフラグが格納される。RAID装置が物理ブロック内のデータまたはパリティデータを読み込む際には、比較対象情報記憶領域内の情報も同時に読み込まれる。

0255

図33は、第3の実施の形態における処理対象データテーブルのデータ構造例を示す図である。RAID装置は、1ストライプ分のデータの読み込みを行うと、RAM内図33に示すようなデータ構造の処理対象データテーブル132eを生成する。

0256

処理対象データテーブル132eは、論理ブロック、ディスク番号、物理ブロック、データ、タイムスタンプ、複数のフラグ、および複数のカウンタ値の欄が設けられている。
論理ブロックの欄には、ストライプに含まれる論理ブロックの論理ブロック番号が設定される。ディスク番号の欄には、論理ブロックに対応する物理ブロックを有するHDDのディスク番号が設定される。物理ブロックの欄には、論理ブロックに対応する物理ブロックの物理ブロック番号が設定される。データの欄には、物理ブロックから読み込まれたデータまたはパリティデータが設定される。

0257

タイムスタンプの欄には、データの書き込み時刻を示すタイムスタンプが設定される。なお、パリティデータのタイムスタンプは、ストライプ書き込みを行ったときに更新される。

0258

フラグの欄には、書き込み抜けの検査においてタイムスタンプを比較するのかカウンタ値を比較するのかを示すフラグが設定される。具体的には、比較対象のデータに付与されたフラグと、比較対象のパリティデータに付与されたフラグのうち比較対象のデータに対応するフラグとによって、書き込み抜けの比較対象が判断される。データのフラグとパリティデータのフラグが共に「0」であれば、カウンタ値が比較される。データのフラグとパリティデータのフラグが共に「1」であれば、タイムスタンプが比較される。データのフラグが「0」であり、パリティデータのフラグが「1」であれば、タイムスタンプが比較される。データのフラグが「1」であり、パリティデータのフラグが「0」であれば、カウンタ値が比較される。

0259

図34は、第3の実施の形態のコントローラの機能を示す図である。コントローラ130bは、データ入出力部133b、RAID制御部134b、HDDアクセス部135b、タイムスタンプ生成部136b、タイムスタンプ比較部137b、カウンタ138b、およびカウンタ値比較部139bを有している。ここで、データ入出力部133b、HDDアクセス部135b、タイムスタンプ生成部136b、タイムスタンプ比較部137bの機能は、図9に示した第1の実施の形態における同名の要素の機能と同様である。また、カウンタ138bとカウンタ値比較部139bとの機能は、図31に示した第2の実施の形態における同名の要素の機能と同様である。

0260

RAID制御部134bは、アクセス要求に応じて、RAID技術を用いたHDD210b,220b,230b,240b,250bへのアクセス制御を行う。本実施の形態では、RAID制御部134bは、RAID5のアクセス制御を行うものとする。RAID制御部134bは、RAID5のアクセス制御を行うために、図8に示したような論理ブロックと物理ブロックとの対応関係を管理している。そして、RAID制御部134bは、アクセス要求で指定された論理ブロックに対応する物理ブロック、およびその物理ブロックを有するHDDを特定し、アクセス要求に応じたアクセス指示をHDDアクセス部135bに対して出力する。

0261

なお、RAID制御部134bは、新たに論理ディスクを生成する場合、その論理ディスクの論理ブロックに対応付けられる物理ブロックの比較対象情報記憶領域内の初期化を行う。初期化処理では、すべてのフラグを「0」に設定され、すべてのカウンタ値が「0」に設定され、すべてのタイムスタンプが「0」に設定される。RAID制御部134bは、全HDD210b,220b,230b,240b,250b内の比較対象情報記憶領域の初期化後に、その領域の読み込みを行い確実に書き込んでいることを保証する。

0262

RAID制御部134bは、アクセス要求が書き込み要求の場合、カウンタ138bから比較対象情報を取得する。具体的には、RAID制御部134bは、書き込み要求があると、書き込み対象のデータブロックに対応する物理ブロック内のデータを比較対象情報と共に読み出す。また、RAID制御部134bは、読み出し対象のデータブロックと同じパリティグループ内のパリティブロックに対応する物理ブロック内のパリティデータを、比較対象情報と共に読み出す。そしてRAID制御部134bは、読み込んだデータに付与されていた比較対象情報内のカウンタ値をカウンタ138bに渡す。すると、カウンタ138bから更新されたカウンタ値が返される。RAID制御部134bは、取得したカウンタ値のフラグを「0」にして、フラグとカウンタ値とを、書き込み対象のデータと対応するパリティデータとに付与する。さらに、RAID制御部134bは、アクセス要求が書き込み要求の場合、タイムスタンプ生成部136bからタイムスタンプを取得する。そして、取得したタイムスタンプを書き込み対象のデータに付与する。この際、パリティデータのタイムスタンプは更新されない。

0263

また、RAID制御部134bは、アクセス要求が読み込み要求の場合、読み込んだデータおよびそのデータが属するパリティグループのパリティデータそれぞれに付与された比較対象情報からフラグを抽出する。RAID制御部134bは、読み込んだデータとパリティデータとのフラグに基づいて、書き込み抜けの検査に用いる情報を判定する。そして、RAID制御部134bは、タイムスタンプまたはカウンタ値のいずれか一方を用いて、書き込み抜けの有無を判定を行う。RAID制御部134bは、書き込み抜けがなければ、読み込んだデータを読み込み要求への応答としてデータ入出力部133bに渡す。

0264

なお、RAID制御部134bは、書き込み抜けがあると判定した場合、データの復旧処理を行う。そして、RAID制御部134bは、復旧したデータを読み込み要求への応答としてデータ入出力部133bに渡す。

0265

以下、ホストコンピュータ10からの書き込み要求および読み出し要求に応じたコントローラ130bの処理を詳細に説明する。なお、第3の実施の形態においても、ブロック単位のアクセスとストライプ単位のアクセスとが可能であるものとする。そこで、ブロック単位のアクセスとストライプ単位のアクセスとのそれぞれについて、書き込み要求および読み出し要求時の処理を説明する。

0266

図35は、第3の実施の形態におけるブロック書き込み処理手順を示すフローチャートである。以下、図35に示す処理をステップ番号に沿って説明する。この処理は、ホストコンピュータ10からブロック単位でのデータの書き込み要求が入力されたときに実行される。

0267

[ステップS151]RAID制御部134bは、書き込み要求に対応するデータの読み込み指示を、HDDアクセス部135bに対して出力する。すると、HDDアクセス部135bによって、指定された物理ブロック内のデータの読み込みが行われる。

0268

[ステップS152]RAID制御部134bは、書き込み要求に対応するパリティデータの読み込み指示を、HDDアクセス部135bに対して出力する。すると、HDDアクセス部135bによって、指定された物理ブロック内のパリティデータの読み込みが行われる。

0269

[ステップS153]RAID制御部134bは、データの読み込みが完了したか否かを判断する。データ読み込みが完了した場合、処理がステップS154に進められる。データ読み込みが完了していなければステップS153の処理が繰り返され、RAID制御部134bは読み込み待ち状態となる。

0270

[ステップS154]RAID制御部134bは、パリティデータの読み込みが完了したか否かを判断する。パリティデータ読み込みが完了した場合、処理がステップS155に進められる。パリティデータ読み込みが完了していなければステップS154の処理が繰り返され、RAID制御部134bは読み込み待ち状態となる。

0271

RAID制御部134bは、ステップS153,S154におけるデータとパリティデータとの読み込みが完了すると、RAM内に処理対象データテーブルを作成し、読み込んだデータをその処理対象データテーブルに格納する。

0272

[ステップS155]RAID制御部134bは、パリティデータを計算する。
[ステップS156]RAID制御部134bは、データのカウンタ値をカウントアップする。具体的には、RAID制御部134bは、ステップS151で取得したデータに付与された比較対象情報からカウンタ値を抽出し、そのカウンタ値をカウンタ138bに渡す。すると、カウンタ138bがカウンタ値に1を加算する。なお、カウンタ値は、第2の実施の形態と同様に2ビットで表されている。読み出したデータのカウンタ値が「3」の場合、カウントアップによりカウンタ値が「0」に更新される。カウンタ138bは、カウントアップしたカウンタ値をRAID制御部134bに返す。RAID制御部134bは、取得したカウンタ値のフラグに「0」を設定する。

0273

[ステップS157]RAID制御部134bは、パリティデータのカウンタ値をカウントアップする。具体的には、RAID制御部134bは、ステップS152で取得したパリティデータに付与された比較対象情報から、ステップS151で読み出したデータに対応するカウンタ値を抽出し、そのカウンタ値をカウンタ138bに渡す。すると、カウンタ138bによってカウンタ値がカウントアップされ、結果がRAID制御部134bに返される。RAID制御部134bは、取得したカウンタ値のフラグに「0」を設定する。

0274

[ステップS158]タイムスタンプ生成部136bは、タイムスタンプを取得する。具体的には、RAID制御部134bからタイムスタンプ生成部136bへ、タイムスタンプの生成要求が出される。その生成要求に応じて、タイムスタンプ生成部136bがタイムスタンプを生成する。生成されたタイムスタンプは、タイムスタンプ生成部136bからRAID制御部134bに渡される。

0275

[ステップS159]RAID制御部134bは、データブロックの書き込み指示をHDDアクセス部135bに対して出力する。具体的には、RAID制御部134bは、書き込み要求で指定された更新データに比較対象情報を付与する。付与される比較対象情報には、ステップS156で更新されたカウンタ値と、ステップS158で取得されたタイムスタンプとが含まれている。そして、RAID制御部134bは、更新データが属するデータブロックに対応する物理ブロックのディスク番号と物理ブロック番号とを指定して、タイムスタンプ付きの更新データの書き込み指示をHDDアクセス部135bに対して出力する。すると、HDDアクセス部135bによって、ディスク番号に対応するHDDに対して、タイムスタンプ付きの更新データの書き込みが行われる。

0276

[ステップS160]RAID制御部134bは、パリティデータの書き込み指示をHDDアクセス部135bに対して出力する。具体的には、RAID制御部134bは、パリティブロックに対応する物理ブロックのディスク番号と物理ブロック番号とを指定して、比較対象情報付きのパリティデータの書き込み指示をHDDアクセス部135bに対して出力する。このこき付与される比較対象情報は、パリティデータ読み込み時の比較対象情報に対してカウンタ値のカウントアップを行ったものである。HDDアクセス部135bは、パリティデータの書き込み指示に応じて、指定されたディスク番号に対応するHDDに対して、タイムスタンプ付きのパリティデータの書き込みを行う。

0277

[ステップS161]RAID制御部134bは、データの書き込みが完了したか否かを判断する。データ書き込みが完了した場合、処理がステップS162に進められる。データ書き込みが未完了であれば、ステップS161の処理が繰り返され、RAID制御部134bはデータ書き込み完了待ち状態となる。

ページトップへ

この技術を出願した法人

この技術を発明した人物

ページトップへ

関連する挑戦したい社会課題

該当するデータがありません

関連する公募課題

該当するデータがありません

ページトップへ

技術視点だけで見ていませんか?

この技術の活用可能性がある分野

分野別動向を把握したい方- 事業化視点で見る -

ページトップへ

おススメ サービス

おススメ astavisionコンテンツ

新着 最近 公開された関連が強い技術

  • キヤノン株式会社の「 情報処理装置」が 公開されました。( 2020/02/06)

    【課題】すべての書き込み処理でWriteVerifyを実行する場合には、WeakWriteによる使用できないセクタの増加を抑制することが可能であり、HDDの寿命を延ばすことが可能である。しかしながら、... 詳細

  • 富士通株式会社の「 ストレージ管理装置、ストレージシステムおよびプログラム」が 公開されました。( 2020/02/06)

    【課題】負荷集中の抑制を図る。【解決手段】ストレージ管理装置1は、制御部1aと記憶部1bを含む。制御部1aは、ストレージに対するデータのI/O処理を行う複数のノードに接続して、複数のノードn1、・・・... 詳細

  • 東芝メモリ株式会社の「 情報処理システム」が 公開されました。( 2020/02/06)

    【課題】書き込み性能を改善することができる情報処理システムを実現する。【解決手段】ストレージ制御部は、複数のストレージデバイス内の第1のストレージデバイスの除去が決定され且つ追加のストレージデバイスが... 詳細

この 技術と関連性が強い人物

関連性が強い人物一覧

この 技術と関連する社会課題

該当するデータがありません

この 技術と関連する公募課題

該当するデータがありません

astavision 新着記事

サイト情報について

本サービスは、国が公開している情報(公開特許公報、特許整理標準化データ等)を元に構成されています。出典元のデータには一部間違いやノイズがあり、情報の正確さについては保証致しかねます。また一時的に、各データの収録範囲や更新周期によって、一部の情報が正しく表示されないことがございます。当サイトの情報を元にした諸問題、不利益等について当方は何ら責任を負いかねることを予めご承知おきのほど宜しくお願い申し上げます。

主たる情報の出典

特許情報…特許整理標準化データ(XML編)、公開特許公報、特許公報、審決公報、Patent Map Guidance System データ