(57)【要約】  パリティ付きストライプセットにおけるパリティの算出に要する時間を短縮できるディスクアレイ制御装置を提供する。ディスクアレイ制御装置１０は、制御対象となっているパリティ付きストライプセットの或るストライプに関するパリティの算出時に、その算出に必要とされるデータのうち、“０”が状況値として状況管理テーブル１６に記憶されている各データブロックのデータについては、各データブロックを有するディスク５０にアクセスすることなく、各データブロックのデータがＡＬＬ０データであるとしてパリティを算出する。
2014010077.tif 000002
【特許請求の範囲】
【請求項１】
Ｍ（≧３）台の記憶装置をパリティ付きストライプセットとして動作させるための制御部と、
前記パリティ付きストライプセットの各ストライプに含まれる複数のデータブロックのそれぞれについて、状況値を記憶可能な状況値記憶部と、
を含み、
前記制御部は、
前記パリティ付きストライプセットの或るデータブロックにＡＬＬ０データを書き込むべきときに、当該データブロックにＡＬＬ０データを書き込むことなく、前記状況値記憶部に、当該データブロックの状況値として第１所定値を記憶させ、
前記パリティ付きストライプセットの或るストライプに関するパリティの算出時に、その算出に必要とされるデータのうち、前記第１所定値が前記状況値として前記状況値記憶部に記憶されている各データブロックのデータについては、各データブロックを有する記憶装置にアクセスすることなく、各データブロックのデータがＡＬＬ０データであるとして前記ストライプに関するパリティを算出する
ことを特徴とするディスクアレイ制御装置。
【請求項２】
前記制御部は、
前記パリティ付きストライプセットの或るデータブロックにデータを書き込むときに、前記状況値記憶部に、当該データブロックの状況値として第２所定値を記憶させ、
前記パリティ付きストライプセットの或るデータブロック上のデータの破棄が指示されたときに、当該データブロックを有する記憶装置にアクセスすることなく、前記状況値記憶部に、当該データブロックの前記状況値として前記第１所定値を記憶させる
ことを特徴とする請求項１に記載のディスクアレイ制御装置。
【請求項３】
前記制御部は、
或るデータブロックのデータに対する読み出し要求を受信したときに、当該データブロックを有する記憶装置が故障しており、且つ、当該データブロックと同じストライプの他のデータブロックの中に前記第１所定値が前記状況値として前記状況値記憶部に記憶されている幾つかのデータブロックがあった場合、前記第１所定値が前記状況値として前記状況値記憶部に記憶されている各データがＡＬＬ０データであるとして前記データブロックのデータの生成し、生成したデータを前記読み出し要求の送信元に返送する
ことを特徴とする請求項１に記載のディスクアレイ制御装置。
【請求項４】
前記制御部は、
複数のストライプのそれぞれについて、そのストライプのデータに一貫性があるか否かのチェックを実行すべきことが指示された場合に、前記状況値記憶部に記憶されている全データブロックの前記状況値が前記第１所定値となっている各ストライプについては、前記チェックを省略する
ことを特徴とする請求項１に記載のディスクアレイ制御装置。
【請求項５】
前記制御部は、
前記Ｍ台の記憶装置の中の１台が新記憶装置に交換されてから前記パリティ付きストライプセットのリビルドが指示された場合、前記状況値記憶部に記憶されている全データブロックの前記状況値が前記第１所定値となっている各ストライプについては、前記新記憶装置に対する復旧処理を省略する
ことを特徴とする請求項１に記載のディスクアレイ制御装置。
【請求項６】
Ｍ（≧３）台の記憶装置をパリティ付きストライプセットとして動作させるためのディスクアレイ制御方法であって、
コンピュータが、
前記パリティ付きストライプセットの各ストライプに含まれる複数のデータブロックのそれぞれについて、状況値を記憶可能なテーブルをメモリ上に用意し、
前記パリティ付きストライプセットの或るデータブロックにＡＬＬ０データを書き込むべきときに、当該データブロックにＡＬＬ０データを書き込むことなく、前記テーブルに、当該データブロックの状況値として第１所定値を記憶させ、
前記パリティ付きストライプセットの或るストライプのパリティブロックへ書き込むパリティの算出時に、その算出に必要とされるデータのうち、前記第１所定値が前記状況値として前記テーブルに記憶されている各データブロックのデータについては、各データブロックを有する記憶装置にアクセスすることなく、各データブロックのデータがＡＬＬ０データであるとして前記ストライプに関するパリティを算出する
ことを特徴とするディスクアレイ制御方法。
【請求項７】
前記コンピュータが、
前記パリティ付きストライプセットの或るデータブロックにデータを書き込むときに、前記テーブルに、当該データブロックの状況値として第２所定値を記憶させ、
前記パリティ付きストライプセットの或るデータブロック上のデータの破棄が指示されたときに、当該データブロックを有する記憶装置にアクセスすることなく、前記テーブルに、当該データブロックの前記状況値として前記第１所定値を記憶させる
ことを特徴とする請求項６に記載のディスクアレイ制御方法。
【請求項８】
前記コンピュータが、
或るデータブロックのデータに対する読み出し要求を受信したときに、当該データブロックを有する記憶装置が故障しており、且つ、当該データブロックと同じストライプの他のデータブロックの中に前記第１所定値が前記状況値として前記テーブルに記憶されている幾つかのデータブロックがあった場合、前記第１所定値が前記状況値として前記テーブルに記憶されている各データがＡＬＬ０データであるとして前記データブロックのデータの生成し、生成したデータを前記読み出し要求の送信元に返送する
ことを特徴とする請求項６に記載のディスクアレイ制御方法。
【請求項９】
前記コンピュータが、
複数のストライプのそれぞれについて、そのストライプのデータに一貫性があるか否かのチェックを実行すべきことが指示された場合に、前記テーブルに記憶されている全データブロックの前記状況値が前記第１所定値となっている各ストライプについては、前記チェックを省略する
ことを特徴とする請求項６に記載のディスクアレイ制御方法。
【請求項１０】
前記コンピュータが、
前記Ｍ台の記憶装置の中の１台が新記憶装置に交換されてから前記パリティ付きストライプセットのリビルドが指示された場合、前記テーブルに記憶されている全データブロックの前記状況値が前記第１所定値となっている各ストライプについては、前記新記憶装置に対する復旧処理を省略する
ことを特徴とする請求項６に記載のディスクアレイ制御方法。
【請求項１１】
コンピュータを、
Ｍ（≧３）台の記憶装置をパリティ付きストライプセットとして動作させるための制御部と、
前記パリティ付きストライプセットの各ストライプに含まれる複数のデータブロックのそれぞれについて、状況値を記憶可能な状況値記憶部と、
を含む装置であって、
前記制御部が、
前記パリティ付きストライプセットの或るデータブロックにＡＬＬ０データを書き込むべきときに、当該データブロックにＡＬＬ０データを書き込むことなく、前記状況値記憶部に、当該データブロックの状況値として第１所定値を記憶させ、
前記パリティ付きストライプセットの或るストライプに関するパリティの算出時に、その算出に必要とされるデータのうち、前記第１所定値が前記状況値として前記状況値記憶部に記憶されている各データブロックのデータについては、各データブロックを有する記憶装置にアクセスすることなく、各データブロックのデータがＡＬＬ０データであるとして前記ストライプに関するパリティを算出する
装置として動作させる
ことを特徴とするディスクアレイ制御プログラム。
【請求項１２】
前記制御部は、
前記パリティ付きストライプセットの或るデータブロックにデータを書き込むときに、前記状況値記憶部に、当該データブロックの状況値として第２所定値を記憶させ、
前記パリティ付きストライプセットの或るデータブロック上のデータの破棄が指示されたときに、当該データブロックを有する記憶装置にアクセスすることなく、前記状況値記憶部に、当該データブロックの前記状況値として前記第１所定値を記憶させる
ことを特徴とする請求項１１に記載のディスクアレイ制御プログラム。
【請求項１３】
前記制御部は、
或るデータブロックのデータに対する読み出し要求を受信したときに、当該データブロックを有する記憶装置が故障しており、且つ、当該データブロックと同じストライプの他のデータブロックの中に前記第１所定値が前記状況値として前記状況値記憶部に記憶されている幾つかのデータブロックがあった場合、前記第１所定値が前記状況値として前記状況値記憶部に記憶されている各データがＡＬＬ０データであるとして前記データブロックのデータの生成し、生成したデータを前記読み出し要求の送信元に返送する
ことを特徴とする請求項１１に記載のディスクアレイ制御プログラム。
【請求項１４】
前記制御部は、
複数のストライプのそれぞれについて、そのストライプのデータに一貫性があるか否かのチェックを実行すべきことが指示された場合に、前記状況値記憶部に記憶されている全データブロックの前記状況値が前記第１所定値となっている各ストライプについては、前記チェックを省略する
ことを特徴とする請求項１１に記載のディスクアレイ制御プログラム。
【請求項１５】
前記制御部は、
前記Ｍ台の記憶装置の中の１台が新記憶装置に交換されてから前記パリティ付きストライプセットのリビルドが指示された場合、前記状況値記憶部に記憶されている全データブロックの前記状況値が前記第１所定値となっている各ストライプについては、前記新記憶装置に対する復旧処理を省略する
ことを特徴とする請求項１１に記載のディスクアレイ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ディスクアレイ制御装置、ディスクアレイ制御方法及びディスクアレイ制御プログラムに関する。
【背景技術】
【０００２】
ディスクアレイとして、ＲＡＩＤ５ボリュームやＲＡＩＤ４ボリュームと呼ばれているものが存在している。【０００３】
ＲＡＩＤ５ボリュームは、耐障害性の向上と高速化、大容量化のすべてを実現できるという利点を有している。ただし、ＲＡＩＤ５ボリューム及びＲＡＩＤ４ボリュームでは、データをディスクに記録する際、パリティ生成のためのデータをディスクから読み出し、パリティを算出（生成）してディスクに書き込む処理が行われる。そのため、ＲＡＩＤ５ボリューム及びＲＡＩＤ４ボリューム（以下、パリティ付きストライプセットと表記する）は、データライト時のオーバーヘッドが比較的に大きなもの（書き込み性能が高くないもの）となっている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−３４８７７号公報
【特許文献２】特開２００２−１５７１４９号公報
【特許文献３】特許第４８３６７３２号公報
【特許文献４】特開２００９−１１６８０９号公報
【特許文献５】特開２００５−１１３１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
開示の技術の課題は、パリティ付きストライプセットにおけるパリティの算出に要する時間を短縮できる技術を提供することにある。
【課題を解決するための手段】
【０００６】
開示の技術の一態様のディスクアレイ制御装置は、
Ｍ（≧３）台の記憶装置をパリティ付きストライプセットとして動作させるための制御部と、
前記パリティ付きストライプセットの各ストライプに含まれる複数のデータブロックのそれぞれについて、状況値を記憶可能な状況値記憶部と、
を含み、
前記制御部は、
前記パリティ付きストライプセットの或るデータブロックにＡＬＬ０データを書き込むべきときに、当該データブロックにＡＬＬ０データを書き込むことなく、前記状況値記憶部に、当該データブロックの状況値として第１所定値を記憶させ、
前記パリティ付きストライプセットの或るストライプに関するパリティの算出時に、その算出に必要とされるデータのうち、前記第１所定値が前記状況値として前記状況値記憶部に記憶されている各データブロックのデータについては、各データブロックを有する記憶装置にアクセスすることなく、各データブロックのデータがＡＬＬ０データであるとして前記ストライプに関するパリティを算出する。【０００７】
また、開示の技術の一態様のディスクアレイ制御方法は、
Ｍ（≧３）台の記憶装置をパリティ付きストライプセットとして動作させるための方法であって、
コンピュータが、
前記パリティ付きストライプセットの各ストライプに含まれる複数のデータブロックのそれぞれについて、状況値を記憶可能なテーブルをメモリ上に用意し、
前記パリティ付きストライプセットの或るデータブロックにＡＬＬ０データを書き込むべきときに、当該データブロックにＡＬＬ０データを書き込むことなく、前記テーブルに、当該データブロックの状況値として第１所定値を記憶させ、
前記パリティ付きストライプセットの或るストライプのパリティブロックへ書き込むパリティの算出時に、その算出に必要とされるデータのうち、前記第１所定値が前記状況値として前記テーブルに記憶されている各データブロックのデータについては、各データブロックを有する記憶装置にアクセスすることなく、各データブロックのデータがＡＬＬ０データであるとして前記ストライプに関するパリティを算出する。【０００８】
また、開示の技術の一態様のディスクアレイ制御プログラムは、
コンピュータを、
Ｍ（≧３）台の記憶装置をパリティ付きストライプセットとして動作させるための制御部と、
前記パリティ付きストライプセットの各ストライプに含まれる複数のデータブロックのそれぞれについて、状況値を記憶可能な状況値記憶部と、
を含む装置であって、
前記制御部が、
前記パリティ付きストライプセットの或るデータブロックにＡＬＬ０データを書き込むべきときに、当該データブロックにＡＬＬ０データを書き込むことなく、前記状況値記憶部に、当該データブロックの状況値として第１所定値を記憶させ、
前記パリティ付きストライプセットの或るストライプに関するパリティの算出時に、その算出に必要とされるデータのうち、前記第１所定値が前記状況値として前記状況値記憶部に記憶されている各データブロックのデータについては、各データブロックを有する記憶装置にアクセスすることなく、各データブロックのデータがＡＬＬ０データであるとして前記ストライプに関するパリティを算出する
装置として動作させる。【０００９】
尚、開示の技術の一態様のディスクアレイ制御プログラムは、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、Ｆｌａｓｈメモリ等のコンピュータ可読媒体に記録して配布することが出来る。
【発明の効果】
【００１０】
開示の技術によれば、パリティ付きストライプセットにおけるパリティの算出に要する時間を短縮することが出来る。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施形態に係るディスクアレイ制御装置の構成及び使用形態の説明図である。
【図２】図２は、実施形態に係るディスクアレイ制御装置内のコントローラが実行するデータライト処理の流れ図である。
【図３】図３は、コントローラが実行するデータリード処理の流れ図である。
【図４】図４は、コントローラが実行するデータ破棄処理の流れ図である。
【図５】図５は、コントローラが実行するリビルド処理の流れ図である。
【図６】図６は、コントローラが実行する一貫性チェック処理の流れ図である。
【発明を実施するための形態】
【００１２】
以下、本発明を実施するための形態について、図面を参照して詳細に説明する。
【００１３】
まず、図１を用いて、本発明の一実施形態に係るディスクアレイ制御装置１０の構成及び使用形態を説明する。
【００１４】
図１に示してあるように、本実施形態に係るディスクアレイ制御装置１０は、コントローラ１１及びＦｌａｓｈメモリ１５を備えた装置である。また、ディスクアレイ制御装置１０は、１台以上（図１では、１台）のホスト６０と複数台（図１では、３台）のハードディスクドライブ５０（以下、ディスク５０とも表記する）とに接続されて使用される装置となっている。
【００１５】
Ｆｌａｓｈメモリ１５は、その記憶領域の一部が、状況管理テーブル１６（詳細は後述）として使用される書き換え可能な不揮発性メモリである。
【００１６】
コントローラ１１は、制御プログラム１３を記憶したＦｌａｓｈメモリ１２、制御プログラム１３を実行するプロセッサ（図示略）等を内蔵したＲＡＩＤ（Redundant Arrays of Inexpensive Disks）コントローラチップである。このコントローラ１１は、既存のＲＡＩＤコントローラチップのファームウェアを制御プログラム１３に変えたものであるため、コントローラ１１の具体的な回路構成の説明は省略する。
【００１７】
以下、本実施形態に係るディスクアレイ制御装置１０の動作を説明する。
【００１８】
ディスクアレイ制御装置１０は、接続されている複数台のディスク５０の中からオペレータにより選択された複数台のディスク５０を、各種ＲＡＩＤレベルのディスクアレイ（論理ボリューム）として機能させることが出来る装置である。ただし、ディスクアレイ制御装置１０は、複数台のディスク５０を、パリティ付きストライプセット（ＲＡＩＤ５ボリューム又はＲＡＩＤ４ボリューム）として機能させる際の動作内容に特に特徴があるものとなっている。そして、ＲＡＩＤ５ボリュームの方がＲＡＩＤ４ボリュームよりも高性能なので、以下では、複数台のディスク５０をＲＡＩＤ５ボリュームとして機能させる際の動作内容を中心に、ディスクアレイ制御装置１０の動作を説明することにする。
【００１９】
ＲＡＩＤ５ボリューム（又はＲＡＩＤ４ボリューム）を実現／構築するためには、少なくとも３台のディスク５０が必要である。従って、ディスクアレイ制御装置１０を用いてＲＡＩＤ５ボリュームを実現／構築する場合には、ディスクアレイ制御装置１０に３台以上のディスク５０が接続される。その後、オペレータにより、ホスト６０（又は他のコンピュータ）を用いて、ディスクアレイ制御装置１０に対して、少なくとも３台のディスク５０を指定してＲＡＩＤ５ボリュームの作成を指示する作業が行われる。
【００２０】
ＲＡＩＤ５ボリュームの作成が指示されると、コントローラ１１は、Ｆｌａｓｈメモリ１５上に、当該ボリュームに関する状況管理テーブル１６を作成する。
【００２１】
図１に示してあるように、状況管理テーブル１６は、ＲＡＩＤ５ボリューム化が指示された複数台（図１では、３台）のディスク５０のそれぞれのブロック（所定サイズの記憶領域）毎に、そのブロックについての状況値を記憶可能なテーブルである。
【００２２】
以下、ＲＡＩＤ５ボリューム化が指示されたＭ台のディスク５０、それらの中の１台のディスク５０ことを、それぞれ、単に、Ｍ台のディスク５０、ディスク５０と表記する。また、各ディスク５０の、データが記憶されるブロックのことをデータブロックと表記し、各ディスク５０の、パリティが記憶されるブロックのことをパリティブロックと表記する。さらに、それらに記憶されているデータからパリティが算出されるＭ−１個のデータブロックと、算出されたパリティが記憶されるパリティブロックとからなる総計Ｍ個のブロックのことを、ストライプと表記する。
【００２３】
状況管理テーブル１６（図１）に記憶される状況値としては、３種の状況値“０”、“１”及び“Ｐ”がある。
【００２４】
状況値“１”は、データブロックについての状況値としてのみ使用される、データブロックが有効なデータを保持していることを示す情報である。状況値“Ｐ”は、パリティブロックについての状況値としてのみ使用される、パリティブロックが有効なパリティを保持していることを示す情報である。状況値“０”は、データブロック、パリティブロックのいずれについての状況値としても使用される、データ／パリティブロックが、本来、ＡＬＬ０データ（全ビットが“０”のデータ）を保持しているべきブロックであることを示す情報である。尚、各状況値としては、例えば、「状況値“０”＝００ｂ、状況値“１”＝０１ｂ、状況値“Ｐ”＝１１ｂ」といったように、通常、２ビットのデータが使用される。
【００２５】
ＲＡＩＤ５ボリュームの作成が指示された場合、コントローラ１１は、Ｍ（≧３）台のディスク５０の各ブロック（データ／パリティブロック）について状況値を記憶可能な、空の状況管理テーブル１６を作成する。そして、コントローラ１１は、ディスクアレイの作成完了をホスト６０に通知する。
【００２６】
その後、オペレータによりホスト６０に対して所定の操作がなされ、その結果として、ホスト６０からコントローラ１１（ディスクアレイ制御装置１０）に、作成したＲＡＩＤ５ボリューム（ディスクアレイ）の初期化を指示する初期化コマンドが送信される。
【００２７】
初期化コマンドを受信した場合、コントローラ１１は、各ディスク５０を実際に初期化する（各ディスク５０内の各ブロックにＡＬＬ０データを書き込む）ことなく、状況管理テーブル１６上の各ブロックに関する状況値を“０”に初期化する。そして、コントローラ１１は、初期化の完了をホスト６０に通知してから、ホスト６０からの各種コマンドに応答できる状態となる。
【００２８】
コントローラ１１がホスト６０から受信するコマンドには、ライトコマンド、リードコマンド、データ破棄コマンド、リビルドコマンド、一貫性チェックコマンド等がある。
【００２９】
以下、各コマンドに対するコントローラ１１の動作を順に説明する。
【００３０】
《ライトコマンドに対するコントローラ１１の動作》
コントローラ１１がホスト６０から受信するライトコマンドは、ＲＡＩＤ５ボリュームのブロックサイズの整数倍のサイズの、書き込み開始位置が或るブロックの先頭位置と一致しているデータの書き込みを要求するコマンドである。コントローラ１１は、全ディスク５０が正常に機能している場合にのみ、ライトコマンドを受け付ける（受信したライトコマンドに応答する）。換言すれば、ディスクアレイ制御装置１０は、ＲＡＩＤ５ボリューム（Ｍ台のディスク５０）がストレージとして機能し得る場合であっても、ＲＡＩＤ５ボリュームの冗長性が失われている場合には、ライトコマンドを受け付けない装置となっている。
【００３１】
ライトコマンドを受信した場合、コントローラ１１は、受信したライトコマンドを、１データブロックへのデータの書き込みを要求する幾つかのライト要求に分割する。そして、コントローラ１１は、各ライト要求について、図２に示した手順のデータライト処理を行う。尚、図２及び図２に関する以下の説明において、ライトデータとは、データライト処理の処理対象となっているライト要求が書き込みを要求している１ブロックサイズ分のデータのことである。また、注目データブロックとは、ライトデータが書き込まれるべきデータブロックのことであり、注目ストライプとは、注目データブロックを含むストライプのことである。
【００３２】
すなわち、或るライト要求に対するデータライト処理を開始したコントローラ１１は、まず、状況管理テーブル１６から、注目ストライプの各データブロックに関する状況値を読み出す（ステップＳ１０１）。
【００３３】
次いで、コントローラ１１は、ライトデータを注目データブロックに書き込む（ステップＳ１０２）。
【００３４】
その後、コントローラ１１は、パリティ算出処理（ステップＳ１０３）を行うことにより、注目ストライプに関するパリティ（注目ストライプのパリティブロックに書き込むべきパリティ）を算出する。
【００３５】
具体的には、このパリティ算出処理時、コントローラ１１は、まず、ステップＳ１０１の処理で読み出した状況値が“１”となっている、注目データブロック以外の各データブロックから、各データブロック上の全データ（１ブロックサイズ分のデータ）を読み出す。そして、コントローラ１１は、そのようなデータの読み出しにより、パリティの算出に必要とされるデータ（ライトデータ以外のＭ−２個のデータ）が揃った場合には、それらのデータとライトデータの排他的論理和（つまり、注目ストライプに関するパリティ）を算出して、パリティ算出処理を終了する。
【００３６】
一方、パリティの算出に必要とされるデータが揃わなかった場合、コントローラ１１は、不足している各データとして、１ブロックサイズ分のＡＬＬ０データを用いて、注目ストライプに関するパリティを算出する。
【００３７】
すなわち、上記のようなデータの読み出しにより、パリティの算出に必要とされるデータ（ライトデータ以外のＭ−２個のデータ）が揃わないのは、状況値が“０”となっている幾つかのデータブロックが存在している場合である。状況値の具体的な更新手順については順次説明していくが、既に説明したように、状況管理テーブル１６上の状況値“０”は、データ／パリティブロックが、本来、ＡＬＬ０データを保持しているべきブロックであることを示す情報となっている。従って、不足している各データとしてＡＬＬ０データを用いることにより、注目ストライプに関するパリティが算出できることになる。
【００３８】
幾つかのＡＬＬ０データを用いて注目ストライプに関するパリティを算出したコントローラ１１は、パリティ算出処理（ステップＳ１０３）を終了する。
【００３９】
パリティ算出処理を終えた（ＡＬＬ０データを用いて又はＡＬＬ０データを用いずにパリティを算出した）コントローラ１１は、算出したパリティを、注目ストライプのパリティブロックに書き込む（ステップＳ１０４）。次いで、コントローラ１１は、状況管理テーブル１６上の、今回、情報（データ／パリティ）を書き込んだデータブロック（注目データブロック）、パリティブロックに関する状況値を、それぞれ、“１”、“Ｐ”に更新する（ステップＳ１０５）。尚、このステップＳ１０５の処理は、いずれか一方の状況値の値、又は双方の状況値の値が、変わらない場合もある処理である。
【００４０】
ステップＳ１０５の処理を終えたコントローラ１１は、このデータライト処理（図２の処理）を終了する。
【００４１】
そして、コントローラ１１は、受信したライトコマンドの分割により得られた全ライト要求に対するデータライト処理が完了したときに、ホスト６０にデータの書込が完了したことを通知してから、受信したライトコマンドに対する処理を終了する。
【００４２】
《リードコマンドに対するコントローラ１１の動作》
コントローラ１１がホスト６０から受信するリードコマンドは、ＲＡＩＤ５ボリュームのブロックサイズの整数倍のサイズの、読み出し開始位置が或るブロックの先頭位置と一致しているデータの読み出しを要求するコマンドである。尚、コントローラ１１は、Ｍ台のディスク５０が全て正常に機能している場合と、Ｍ−１台のディスク５０が正常に機能している場合とに、リードコマンドを受け付ける。
【００４３】
リードコマンドを受信した場合、コントローラ１１は、受信したリードコマンドを、１データブロックのデータの読み出しを要求する幾つかのリード要求に分割する。そして、コントローラ１１は、各リード要求について、図３に示した手順のデータリード処理を行う。尚、図３及び図３に関する以下の説明において、リードデータとは、データリード処理の処理対象となっているリード要求が読み出しを要求している１データブロック上のデータのことである。注目データブロックとは、リードデータが格納されているデータブロックのことである。また、注目ストライプとは、注目データブロックを含むストライプのことであり、リード対象ディスクとは、注目データブロックを有するディスク５０のことである。
【００４４】
図３に示してあるように、或るリード要求に対するデータリード処理を開始したコントローラ１１は、まず、状況管理テーブル１６から、注目ストライプの各ブロック（データ／パリティブロック）に関する状況値を読み出す（ステップＳ２０１）。
【００４５】
そして、コントローラ１１は、状況管理テーブル１６から読み出した注目データブロックについての状況値が“０”であるか否かを判断する（ステップＳ２０２）。
【００４６】
注目データブロックに関する状況値が“０”であった場合（ステップＳ２０２；ＹＥＳ）、コントローラ１１は、何れのディスク５０にもアクセスすることなく、処理中のリード要求に対する応答データとしてＡＬＬ０データを記憶する（ステップＳ２０３）。そして、コントローラ１１は、このデータリード処理を終了する。
【００４７】
一方、注目データブロックに関する状況値が“１”であった場合（ステップＳ２０２；ＮＯ）、コントローラ１１は、リード対象ディスク（注目データブロックを有するディスク５０）が故障中であるか否かを判断する（ステップＳ２０４）。
【００４８】
リード対象ディスクが故障中ではなかった場合（ステップＳ２０４；ＮＯ）、コントローラ１１は、リード対象ディスクの注目データブロックからリードデータを読み出して、処理中のリード要求に対する応答データとして記憶する（ステップＳ２０５）。
【００４９】
また、リード対象ディスクが故障中であった場合（ステップＳ２０４；ＹＥＳ）、コントローラ１１は、ステップＳ２０５にて、他のＭ−１台のディスク５０内のデータから、リードデータを生成（復旧）するデータ生成処理を行う。このデータ生成処理時、コントローラ１１は、ステップＳ２０１の処理で読み出した状況値が“１”となっている、注目データブロック以外の各ブロックから、データ／パリティを読み出す。そして、コントローラ１１は、各ブロックからのデータの読み出しによりリードデータを生成するのに必要なデータが揃った場合には、それらのデータからリードデータを生成して、データ生成処理を終了する。
【００５０】
一方、上記データの読み出しでは、リードデータを生成するのに必要なデータが揃わなかった場合、コントローラ１１は、不足している各データとしてＡＬＬ０データを用いてリードデータを生成する。そして、コントローラ１１は、データ生成処理を終了する。
【００５１】
上記内容のデータ生成処理によりリードデータを生成したコントローラ１１は、生成したリードデータを処理中のリード要求に対する応答データとして記憶する。そして、コントローラ１１は、ステップＳ２０６の処理及びデータリード処理（図２の処理）を終了する。
【００５２】
コントローラ１１は、リードコマンドを分割した全リード要求に対するデータリード処理が完了したときに、各リード要求に対する応答データとして記憶しているデータを繋げたデータをホスト６０に送信する。そして、コントローラ１１は、受信したリードコマンドに対する処理を終了する。
【００５３】
《データ破棄コマンドに対するコントローラ１１の動作》
データ破棄コマンドは、或るアドレス範囲内のデータの破棄（“０”クリア）を指示するためにホスト６０が送信するコマンド（アドレス範囲の指定情報を含むコマンド）である。
【００５４】
このデータ破棄コマンドを受信した場合、コントローラ１１は、図４に示した手順のデータ破棄処理を実行する。
【００５５】
すなわち、データ破棄コマンドを受信したコントローラ１１は、まず、状況管理テーブル１６上の情報に基づき、指定破棄範囲に、全領域が含まれる各データブロックと一部の領域が含まれる各データブロックとを特定する（ステップＳ３０１）。ここで、指定破棄範囲とは、受信したデータ破棄コマンドにてデータを破棄することが指示されているアドレス範囲のことである。
【００５６】
次いで、コントローラ１１は、全領域が指定破棄範囲に含まれる１つ以上のデータブロックを特定できたか否かを判断する（ステップＳ３０２）。全領域が指定破棄範囲に含まれる１つ以上のデータブロックを特定できた場合（ステップＳ３０２；ＹＥＳ）、コントローラ１１は、当該１つ以上のデータブロックを実際に“０”クリアすることなく、状況管理テーブル１６上の、当該１つ以上のデータブロックのそれぞれについての状況値を“０”に変更する（ステップＳ３０３）。
【００５７】
その後、コントローラ１１は、一部の領域が指定破棄範囲に含まれる１つ以上のデータブロックを特定できたか否かを判断する（ステップＳ３０４）。尚、全領域が指定破棄範囲に含まれるデータブロックが全く特定できなかった場合（ステップＳ３０２；ＮＯ）、ステップＳ３０３の処理を行うことになく、ステップＳ３０４の処理（判断）を行う。
【００５８】
一部の領域が指定破棄範囲に含まれるデータブロックが１つも特定できなかった場合（ステップＳ３０４；ＮＯ）、コントローラ１１は、このデータ破棄処理（図４の処理）を終了する。一方、一部の領域が指定破棄範囲に含まれる１つ又は２つのデータブロックが特定できた場合（ステップＳ３０４；ＹＥＳ）、コントローラ１１は、各データブロックの指定破棄範囲内の部分を“０”クリアする（ステップＳ３０５）。その後、コントローラ１１は、このデータ破棄処理を終了する。
【００５９】
《リビルドコマンドに対するコントローラ１１の動作》
リビルドコマンドは、或るディスク５０が故障した場合に、そのディスク５０を正常な新ディスク５０に交換してから、コントローラ１１に対して送信されるコマンドである。
【００６０】
リビルドコマンドを受信した場合、コントローラ１１は、図５に示した手順のリビルド処理を実行する。尚、図５及び以下の説明において、復旧対象ブロックとは、新ディスク５０の或るデータ／パリティブロックのことであり、正常ディスク５０とは、元からあったディスク５０（新ディスク５０ではないディスク５０）のことである。有効データブロック、無効データブロックとは、それぞれ、状況管理テーブル１６上の状況値が“１”、“０”となっている正常ディスク５０内のデータブロックのことである。
【００６１】
図５に示してあるように、リビルドコマンドの受信によりこのリビルド処理を開始したコントローラ１１は、まず、ＲＡＩＤ５ボリュームの最初のストライプを処理対象ストライプとして選択する（ステップＳ４０１）。次いで、コントローラ１１は、処理対象ストライプの各ブロック（データ／パリティブロック）に関する状況値を状況管理テーブル１６から読み出す（ステップＳ４０２）。そして、コントローラ１１は、読み出した状況値に基づき、処理対象ストライプに有効データブロックが含まれているか否かを判断する（ステップＳ４０３）。
【００６２】
処理対象ストライプに有効データブロックが含まれていた場合（ステップＳ４０３；ＹＥＳ）、コントローラ１１は、読み出してある状況値に基づき、さらに、処理対象ストライプに無効データブロックが含まれているか否かを判断する（ステップＳ４０４）。
【００６３】
尚、或るデータブロックに関する状況値が“１”である場合（或るデータブロックが有効データブロックである場合）、常に、そのデータブロックと同じストライプに含まれるパリティブロックに関する状況値は、“Ｐ”となっている（図２、図４参照）。従って、ステップＳ４０３でＹＥＳ側への分岐が行われる場合、処理対象ストライプのパリティブロックが正常ディスク５０内に存在しているのであれば、当該パリティブロックにも有効なデータが記憶されていることになる。
【００６４】
コントローラ１１は、処理対象ストライプに無効データブロックが含まれていなかった場合（ステップＳ４０４；ＮＯ）、通常復旧処理（ステップＳ４０５）を行う。ここで、通常復旧処理とは、Ｍ−１台の正常ディスク５０のそれぞれから、処理対象ストライプに関するデータ／パリティブロック上の情報を読み出し、読み出したＭ−１個の情報から、復旧対象ブロック用のデータ／パリティを生成し、生成したデータ／パリティを復旧対象ブロックに書き込む処理のことである。
【００６５】
一方、処理対象ストライプに無効データブロックが含まれていた場合（ステップＳ４０４；ＹＥＳ）、コントローラ１１は、ステップＳ４０６にて、以下の内容の特殊復旧処理を行う。
【００６６】
特殊復旧処理を開始したコントローラ１１は、処理対象ストライプの各正常ディスク５０内の有効データブロック（又は、パリティブロック）に記憶されている情報を、各正常ディスク５０から読み出す。その後、コントローラ１１は、復旧対象データを復旧するのに必要とされる他の各データとしてＡＬＬ０データを使用して、復旧対象ブロック用のデータ／パリティを生成する。そして、コントローラ１１は、生成したデータ／パリティを復旧対象ブロックに書き込んでから、特殊復旧処理を終了する。
【００６７】
特殊復旧処理又は通常復旧処理を終えたコントローラ１１は、未処理ストライプが残っているか否かを判断する（ステップＳ４０７）。
【００６８】
未処理ストライプが残っていた場合（ステップＳ４０７；ＹＥＳ）、コントローラ１１は、次ストライプを処理対象ストライプとして選択（ステップＳ４０８）してから、ステップＳ４０２以降の処理を再び開始する。
【００６９】
また、コントローラ１１は、処理対象ストライプに有効データブロックが含まれていなかった場合（ステップＳ４０３；ＮＯ）には、特殊復旧処理／通常復旧処理を行うことなく、ステップＳ４０７の判断を行う。
【００７０】
すなわち、処理対象ストライプに有効データブロックが含まれていないのは、処理対象ストライプの全データブロックの状況値とパリティブロックの状況値とが全て“０”である場合、及び、処理対象ストライプの全データブロックの状況値が“０”であり、パリティブロックの状況値が“Ｐ”である場合（図４参照）である。そして、これらの場合は、いずれも、復旧対象ブロック上の情報（データ／パリティ）を復旧する必要がない場合である。そのため、コントローラ１１は、処理対象ストライプに有効データブロックが含まれていなかった場合（ステップＳ４０３；ＮＯ）、復旧処理（特殊復旧処理又は通常復旧処理）をスキップ／省略して、未処理ストライプが残っているか否かを判断する（ステップＳ４０７）。
【００７１】
そして、コントローラ１１は、全てのストライプに対する処理が終わったときに（ステップＳ４０７；ＮＯ）、このリビルド処理を終了する。
【００７２】
《一貫性チェックコマンドに対するコントローラ１１の動作》
一貫性チェックコマンドは、各ストライプ内のデータに一貫性があるか否かをチェックすることを要求するコマンドである。尚、「或るストライプ内のデータに一貫性がある」とは、「或るストライプの各データブロック上のデータから算出したパリティと当該ストライプのパリティブロック上のパリティとが一致する」ということである。
【００７３】
一貫性チェックコマンドを受信した場合、コントローラ１１は、図６に示した手順の一貫性チェック処理を実行する。
【００７４】
すなわち、一貫性チェックコマンドを受信したコントローラ１１は、まず、最初のストライプを処理対象ストライプとして選択する（ステップＳ５０１）。次いで、コントローラ１１は、処理対象ストライプの各ブロック（データ／パリティブロック）に関する状況値を状況管理テーブル１６から読み出す（ステップＳ５０２）。
【００７５】
その後、コントローラ１１は、読み出した状況値に基づき、処理対象ストライプに有効データブロックが含まれているか否かを判断する（ステップＳ５０３）。ここで、有効データブロックとは、状況管理テーブル１６上の状況値が“１”となっているデータブロックのことである。
【００７６】
処理対象ストライプに有効データブロックが含まれていた場合（ステップＳ５０３；ＹＥＳ）、コントローラ１１は、読み出してある状況値に基づき、さらに、処理対象ストライプに、無効データブロック（状況値が“０”となっているデータブロック）が含まれているか否かを判断する（ステップＳ５０４）。
【００７７】
コントローラ１１は、処理対象ストライプに無効データブロックが含まれていなかった場合（ステップＳ５０４；ＮＯ）、ステップＳ５０５にて、以下の内容の通常一貫性チェック処理を行う。
【００７８】
通常一貫性チェック処理を開始したコントローラ１１は、まず、各ディスク５０から処理対象ストライプのデータブロック又はパリティブロック上の情報（データ／パリティ）を読み出す。その後、コントローラ１１は、読み出したＭ−１個のデータのパリティを算出し、算出結果がパリティブロックから読み出してあるパリティと一致しているか否かをチェックする。そして、コントローラ１１は、チェック結果を記憶してから通常一貫性チェック処理を終了する。
【００７９】
一方、処理対象ストライプに無効データブロックが含まれていた場合（ステップＳ５０４；ＹＥＳ）、コントローラ１１は、ステップＳ５０６にて、以下の内容の特殊一貫性チェック処理を行う。
【００８０】
特殊一貫性チェック処理を開始したコントローラ１１は、処理対象ストライプの全有効データブロック及びパリティブロックのそれぞれに記憶されている情報を、各ブロックを備えたディスク５０から読み出す。その後、コントローラ１１は、処理対象ストライプに関するパリティの算出に必要な残りの各データとしてＡＬＬ０データを使用して、パリティを算出する。そして、コントローラ１１は、生成したパリティが、処理対象ストライプのパリティブロックから読み出してあるパリティと一致しているか否かをチェックし、チェック結果を記憶してから特殊一貫性チェック処理を終了する。
【００８１】
通常／特殊一貫性チェック処理（ステップＳ５０５又はＳ５０６）を終えたコントローラ１１は、未処理ストライプが残っているか否かを判断する（ステップＳ５０７）。
【００８２】
未処理ストライプが残っていた場合（ステップＳ５０７；ＹＥＳ）、コントローラ１１は、次ストライプを処理対象ストライプとして選択（ステップＳ５０８）してから、ステップＳ５０２以降の処理を再び開始する。
【００８３】
また、処理対象ストライプに有効データブロックが含まれていなかった場合（ステップＳ５０３；ＮＯ）、コントローラ１１は、通常／特殊一貫性チェック処理を行うことなく、ステップＳ５０７の判断を行う。
【００８４】
コントローラ１１は、全ストライプに対する処理が終わった場合（ステップＳ５０７；ＮＯ）には、各通常／特殊一貫性チェック処理のチェック結果を纏めた情報をホスト６０に対して送信する（ステップＳ５０９）。そして、コントローラ１１は、この一貫性チェック処理を終了する。
【００８５】
以上、説明したように、本実施形態に係るディスクアレイ制御装置１０は、制御対象となっているパリティ付きストライプセットの或るストライプに関するパリティの算出時に、その算出に必要とされるデータのうち、“０”が状況値として状況管理テーブル１６に記憶されている各データブロックのデータについては、各データブロックを有するディスク５０にアクセスすることなく、各データブロックのデータがＡＬＬ０データであるとしてパリティを算出する（図２参照）機能を有している。
【００８６】
すなわち、ディスクアレイ制御装置１０は、通常のディスクアレイ制御装置よりもパリティの算出時にディスク５０から読み出すデータの数が少ない場合がある装置となっている。そして、ディスク５０から読み出すデータの数が減れば、パリティの算出に要する手間／時間が減るのであるから、ディスクアレイ制御装置１０は、既存のディスクアレイ制御装置よりも、パリティの生成に要する時間（平均時間）が短い装置となっていると言うことが出来る。さらに、パリティの生成に要する時間が短ければ、データの書き込みに要する時間も短くなる。従って、本実施形態に係るディスクアレイ制御装置１０によれば、既存のディスクアレイ制御装置よりも、データの書き込み速度が速いパリティ付きストライプセットを実現できることになる。
【００８７】
また、ディスクアレイ制御装置１０は、或るデータブロック上のデータの破棄が指示された場合に、当該データブロックに関する状況値を“０”に戻す機能（図４参照）を有している。従って、本ディスクアレイ制御装置１０を用いておけば、或るデータブロック上のデータがファイルシステム上では削除されているのも拘わらず、そのデータブロックの状況値が“１”となっているが故に、当該データブロックからのデータの読み出しが省略されないといったことが生ずるのを抑止できることにもなる。
【００８８】
ディスクアレイ制御装置１０は、或るデータブロックからデータを読み出すべきときに、当該データブロックを有するディスク５０が故障しており、且つ、当該データブロックと同じストライプの他のデータブロックの中に、状況値“０”が状況管理テーブル１６に記憶されているＫ個のデータブロックがあった場合、Ｋ台のディスク５０からデータを読み出すことなく、当該データブロックのデータを生成する機能（図３参照）も有している。従って、ディスクアレイ制御装置１０は、１台のディスク５０が故障している場合におけるデータの平均的な読み出し速度が速い装置となっていることにもなる。
【００８９】
さらに、ディスクアレイ制御装置１０は、リビルド／一貫性チェック時に、状況管理テーブル１６上の情報に基づき、実際に処理が必要なストライプのみを処理する機能（図５，図６参照）を有してる。従って、ディスクアレイ制御装置１０によれば、パリティ付きストライプセット（ＲＡＩＤ５ボリューム等）のリビルド、一貫性チェックの双方が高速に行えることにもなる。
【００９０】
《変形形態》
上記したディスクアレイ制御装置１０は、各種の変形を行えるものである。例えば、ディスクアレイ制御装置１０を、ハードディスクドライブ５０ではない記憶装置（ＳＳＤ（Solid State Drive）等）をパリティ付きストライプセットとして機能させる装置に変形することが出来る。また、制御プログラム１３をパーソナルコンピュータ用のものにプログラミングしなおすことにより、ディスクアレイ制御装置１０が行っているものと同様の制御をパーソナルコンピュータに行わせることも出来る。
【００９１】
さらに、ディスクアレイ制御装置１０から幾つかの機能を取り除いておいても良いことや、ディスク５０等の記憶装置に対する具体的な制御手順を上記したものとは異なるものとしておいても良いことなどは、当然のことである。
【産業上の利用可能性】
【００９２】
本発明は、各種情報を記憶するためのストレージ（パリティ付きストライプセット）を実現するために利用することができる。
【符号の説明】
【００９３】
１０    ディスクアレイ制御装置
１１    コントローラ
１２、１５    Ｆｌａｓｈメモリ
１３    制御プログラム
１６  状況管理テーブル
５０  ハードディスクドライブ
６０  ホスト
【図１】
2014010077.tif 000003
【図２】
2014010077.tif 000004
【図３】
2014010077.tif 000005
【図４】
2014010077.tif 000006
【図５】
2014010077.tif 000007
【図６】
2014010077.tif 000008
【国際調査報告】
2014010077.tif 000009
2014010077.tif 000010