(57)【特許請求の範囲】
【請求項１】
ＲＡＩＤ構成のストレージ装置上のボリュームに対する書込要求に応じて、書込対象データのサイズとデータストレージ数とに基づいて、前記書込対象データを各データストレージに分散して書き込む際のストライプデプスとパディングデータのサイズとを算出し、
前記書込対象データの書込要求範囲に基づいて、前記ストレージ装置の記憶領域を規定サイズで区切って分割した各領域に配置される管理用のメタデータ群から使用するメタデータを決定し、決定した前記メタデータに、前記書込要求範囲の情報と前記ストライプデプスとを設定し、
算出した前記ストライプデプスと前記パディングデータのサイズとに基づいて、前記書込対象データの書き込みを行い、
前記書込要求範囲の少なくとも一部を含む他の書込要求範囲の書込要求を受け付けたことに応じて、前記他の書込要求範囲の書込要求を受け付けた回数を示す境界不一致情報を前記メタデータに設定する、
制御部を有することを特徴とするストレージ制御装置。
【請求項２】
前記制御部は、
前記境界不一致情報が示す回数が規定値以上となった場合、前記メタデータを初期化し、前記他の書込要求範囲に書込済みのデータを書込対象データとして、当該書込対象データを各データストレージに分散して書き込む際のストライプデプスとパディングデータのサイズとを算出することを特徴とする請求項１に記載のストレージ制御装置。
【請求項３】
前記制御部は、
前記ボリュームに対する読込要求を受け付けたことに応じて、読込対象データの読込要求範囲に基づいて、前記メタデータ群から使用するメタデータを決定し、決定した前記メタデータに基づいて、前記読込対象データの読み込みを行う、
ことを特徴とする請求項１または２に記載のストレージ制御装置。
【請求項４】
コンピュータが、
ＲＡＩＤ構成のストレージ装置上のボリュームに対する書込要求を受け付け、
受け付けた前記書込要求に応じて、書込対象データの書込要求範囲に基づいて、前記ストレージ装置の記憶領域を規定サイズで区切って分割した各領域に配置される管理用のメタデータ群から使用するメタデータを決定し、
前記書込対象データのサイズとデータストレージ数とに基づいて、前記書込対象データを各データストレージに分散して書き込む際のストライプデプスとパディングデータのサイズとを算出し、
決定した前記メタデータに、前記書込要求範囲の情報と前記ストライプデプスとを設定し、
算出した前記ストライプデプスと前記パディングデータのサイズとに基づいて、前記書込対象データの書き込みを行い、
前記書込要求範囲の少なくとも一部を含む他の書込要求範囲の書込要求を受け付けたことに応じて、前記他の書込要求範囲の書込要求を受け付けた回数を示す境界不一致情報を前記メタデータに設定する、
処理を実行することを特徴とする制御方法。
【請求項５】
コンピュータに、
ＲＡＩＤ構成のストレージ装置上のボリュームに対する書込要求を受け付け、
受け付けた前記書込要求に応じて、書込対象データの書込要求範囲に基づいて、前記ストレージ装置の記憶領域を規定サイズで区切って分割した各領域に配置される管理用のメタデータ群から使用するメタデータを決定し、
前記書込対象データのサイズとデータストレージ数とに基づいて、前記書込対象データを各データストレージに分散して書き込む際のストライプデプスとパディングデータのサイズとを算出し、
決定した前記メタデータに、前記書込要求範囲の情報と前記ストライプデプスとを設定し、
算出した前記ストライプデプスと前記パディングデータのサイズとに基づいて、前記書込対象データの書き込みを行い、
前記書込要求範囲の少なくとも一部を含む他の書込要求範囲の書込要求を受け付けたことに応じて、前記他の書込要求範囲の書込要求を受け付けた回数を示す境界不一致情報を前記メタデータに設定する、
処理を実行させることを特徴とする制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置、制御方法、および制御プログラムに関する。
【背景技術】
【０００２】
近年、画像、音声、動画などのサイズの大きいファイルをディスクアレイ装置に大量に格納するような用途が増えている。このような用途では、ディスク容量の効率的な使用に対するニーズが高く、容量効率が５０％であるＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）１よりも、ＲＡＩＤ５，６のようなパリティを用いたＲＡＩＤレベルが好まれる。一方で、パリティを用いたＲＡＩＤレベルの場合、ディスクへの書き込みのサイズがストライプサイズに合わないと、パリティの生成のために、ライトペナルティ（ＷＰ：Ｗｒｉｔｅ  Ｐｅｎａｌｔｙ）と呼ばれるディスクからの読み出しが発生してしまう。
【０００３】
関連する先行技術としては、例えば、専用の不揮発性メモリを使用しないで、主メモリとディスク装置を用いて、ディスク上のストライプに連続的にデータを書き込む技術がある。また、ホストから順次送られてくる複数のコマンドが１つの連続領域のアクセス要求であるとき、複数のコマンドをグループ化して１つのコマンドとし、この１つのコマンドを各ディスク装置へのコマンドに変換する技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００２−２０７５７２号公報
【特許文献２】特開平５−２８９８１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術によれば、パリティを用いたＲＡＩＤレベルの場合に、シーケンシャルＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）が頻繁に要求されるようなボリュームに対する書き込みの際に発生するライトペナルティにより書込性能が低下してしまう。
【０００６】
一つの側面では、本発明は、ライトペナルティを削減して書込性能の低下を抑制するストレージ制御装置、制御方法、および制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、ＲＡＩＤ構成のストレージ装置上のボリュームに対する書込要求に応じて、書込対象データのサイズとデータストレージ数とに基づいて、前記書込対象データを各データストレージに分散して書き込む際のストライプデプスとパディングデータのサイズとを算出し、算出した前記ストライプデプスと前記パディングデータのサイズとに基づいて、前記書込対象データの書き込みを行う、ストレージ制御装置、制御方法、および制御プログラムが提案される。
【発明の効果】
【０００８】
本発明の一態様によれば、ライトペナルティを削減して書込性能の低下を抑制することができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施の形態にかかる制御方法の一実施例を示す説明図である。
【図２】図２は、ストレージシステム２００のハードウェア構成を示すブロック図である。
【図３】図３は、ＲＡＩＤグループ２２０の物理ディスク上のレイアウト例を示す説明図である。
【図４】図４は、メタデータエントリ＃ｊのデータ構造例を示す説明図である。
【図５】図５は、ストレージ制御装置１０１の機能的構成例を示すブロック図である。
【図６】図６は、ライト要求に対する第１の処理例を示す説明図である。
【図７】図７は、メタデータエントリ＃ｊの設定例を示す説明図（その１）である。
【図８】図８は、ＨＤＤ１〜ＨＤＤ６のディスクイメージの一例を示す説明図である。
【図９】図９は、ライト要求に対する第２の処理例を示す説明図である。
【図１０】図１０は、メタデータエントリ＃ｊの設定例を示す説明図（その２）である。
【図１１】図１１は、ＨＤＤ１〜ＨＤＤ６のディスクイメージの一例を示す説明図である。
【図１２】図１２は、メタデータエントリ＃ｊの設定例を示す説明図（その３）である。
【図１３】図１３は、ライト要求に対する第３の処理例を示す説明図である。
【図１４】図１４は、メタデータエントリ＃ｊの設定例を示す説明図（その４）である。
【図１５】図１５は、メタデータエントリ＃ｊの設定例を示す説明図（その５）である。
【図１６】図１６は、物理アドレスと論理アドレスとの対応を示す説明図である。
【図１７】図１７は、メタデータエントリ＃ｊの設定例を示す説明図（その６）である。
【図１８】図１８は、ストレージ制御装置１０１の書込処理手順の一例を示すフローチャート（その１）である。
【図１９】図１９は、ストレージ制御装置１０１の書込処理手順の一例を示すフローチャート（その２）である。
【図２０】図２０は、ストレージ制御装置１０１の書込処理手順の一例を示すフローチャート（その３）である。
【図２１】図２１は、ストレージ制御装置１０１の読込処理手順の一例を示すフローチャートである。
【図２２】図２２は、ストレージ制御装置１０１のストライプデプス再調整処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に図面を参照して、本発明にかかるストレージ制御装置、制御方法、および制御プログラムの実施の形態を詳細に説明する。
【００１１】
（制御方法の一実施例）
図１は、実施の形態にかかる制御方法の一実施例を示す説明図である。図１において、ストレージシステム１００は、ストレージ制御装置１０１とストレージ装置Ｓ１〜Ｓ４と、を含む構成である。ストレージ制御装置１０１は、ストレージ装置Ｓ１〜Ｓ４を制御するコンピュータである。ストレージ装置Ｓ１〜Ｓ４は、データを記憶する記憶装置である。ストレージ装置Ｓ１〜Ｓ４は、例えば、ハードディスク、光ディスク、フラッシュメモリ等の記憶媒体を含む。
【００１２】
ストレージ装置Ｓ１〜Ｓ４は、ＲＡＩＤ５，６等のデータを冗長化して記憶するＲＡＩＤ構成のストレージ装置である。ストレージ装置Ｓ１〜Ｓ４上に作成されるボリュームは、例えば、シーケンシャルＩ／Ｏが頻繁に要求されるようなボリュームである。ボリュームには、例えば、画像、音声、動画などのブロックサイズの比較的大きいデータが格納される。
【００１３】
ここで、ＲＡＩＤ５，６のようなパリティを用いたＲＡＩＤレベルの場合、ディスクへの書き込みのサイズがストライプサイズに合わないと、パリティの生成のために、ライトペナルティと呼ばれるディスクからの読み出しが発生する。ストライプサイズは、ストライプセットからパリティを除いた容量を表す。
【００１４】
ストライプセットは、ストライピングにより各データディスクに分散して読み書きされるデータの全構成である。すなわち、ボリュームへの書き込みの際にライトペナルティが行われると、パリティの生成のためにディスクからの読み出しが発生して、シーケンシャルＩ／Ｏに対する書込性能の低下を招いてしまう。
【００１５】
そこで、本実施の形態では、シーケンシャルＩ／Ｏが頻繁に要求されるようなボリュームについて、パリティを用いたＲＡＩＤレベルのボリュームに対する書き込みの際に発生するライトペナルティを削減して書込性能の低下を抑制する制御方法について説明する。以下、ストレージ制御装置１０１の処理例について説明する。ここでは、ストレージ装置Ｓ１〜Ｓ４により、ＲＡＩＤ５（３＋１）のストレージ装置を構築した場合を想定する。
【００１６】
（１）ストレージ制御装置１０１は、ＲＡＩＤ構成のストレージ装置Ｓ１〜Ｓ４上のボリュームに対する書込要求を受け付ける。具体的には、例えば、ストレージ制御装置１０１は、業務サーバなどの上位装置から、ボリュームに対する書込要求を受け付ける。
【００１７】
書込要求には、例えば、書込対象データ、当該書込対象データの書込先となる書込要求範囲の情報（例えば、書込要求範囲の開始論理アドレス、書込対象データのサイズ）などが含まれる。図１の例では、サイズが「５９［ＫＢ］」の書込対象データの書込要求１１０を受け付けた場合を想定する。
【００１８】
（２）ストレージ制御装置１０１は、書込対象データのサイズとデータストレージ数とに基づいて、書込対象データを各データストレージに分散して書き込む際のストライプデプスとパディングデータのサイズとを算出する。ここで、データストレージとは、パリティの生成元となるデータを記憶する記憶媒体である。データストレージとしては、例えば、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）やＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などを用いることができる。ここでは、データストレージとして、ＨＤＤなどのデータディスクを用いる場合を例に挙げて説明する。
【００１９】
ストライプデプス（ストライプの深さ）とは、ストライピングにより各データディスクに分散して書き込まれる各データのサイズであり、１ストライプのうちの１ディスク当たりのデータを記憶する領域（ストリップ）のサイズである。すなわち、ストライプデプスは、ストリップサイズ（ストリップ内のブロック数）に相当する。ストライプ内では、すべてのストリップが同じ数のブロックを持つ。
【００２０】
また、パディングデータとは、書き込みのサイズをストライプバウンダリ（ストライプサイズ）に合わせるために、書込対象データに付与する調整用のダミーデータである。具体的には、例えば、ストレージ制御装置１０１は、「書込対象データのサイズ＋パディングデータのサイズ」が「データディスク数×ストライプデプス」と一致するように、ストライプデプスとパディングデータのサイズとを算出する。
【００２１】
図１の例では、まず、ストレージ制御装置１０１は、書込対象データのサイズ「５９［ＫＢ］」をデータディスク数「３」で割った余りを算出する。ここでは、余りは「２［ＫＢ］」となる。つぎに、ストレージ制御装置１０１は、算出した余り「２［ＫＢ］」をデータディスク数「３」から引くことにより、パディングデータのサイズ「１［ＫＢ］」を算出する。
【００２２】
そして、ストレージ制御装置１０１は、書込対象データのサイズ「５９［ＫＢ］」にパディングデータのサイズ「１［ＫＢ］」を足した値「６０［ＫＢ］」をデータディスク数「３」で割ることにより、ストライプデプス「２０［ＫＢ］」を算出する。なお、余りが「０」の場合は、書込対象データに調整用のダミーデータを付与する必要がない。このため、余りが「０」の場合のパディングデータのサイズは「０」となる。
【００２３】
（３）ストレージ制御装置１０１は、算出したストライプデプスとパディングデータのサイズとに基づいて、書込対象データの書き込みを行う。具体的には、例えば、まず、ストレージ制御装置１０１は、算出したサイズ「１［ＫＢ］」分のパディングデータｐｄを、書込対象データの末尾に付与する。
【００２４】
つぎに、ストレージ制御装置１０１は、パディングデータｐｄを付与した書込対象データを、算出したストライプデプス「２０［ＫＢ］」単位で分割し、分割したデータ群Ｄ１〜Ｄ３からパリティデータＰを生成する。そして、ストレージ制御装置１０１は、分割したデータ群Ｄ１〜Ｄ３と生成したパリティデータＰとを、各ストレージ装置Ｓ１〜Ｓ４に分散して書き込む。
【００２５】
このように、ストレージ制御装置１０１によれば、パリティを用いたＲＡＩＤレベルのボリュームに対する書込要求に応じて、書込対象データのサイズとデータディスク数とに基づいて、ストライプデプスとパディングデータのサイズとを算出することができる。また、ストレージ制御装置１０１によれば、算出したストライプデプスとパディングデータのサイズとに基づいて、書込対象データの書き込みを行うことができる。
【００２６】
これにより、書込要求されたデータ（書込対象データ）をストライプ単位で管理することができ、ライトペナルティを削減してシーケンシャルＩ／Ｏの書込性能を向上させることができる。すなわち、書込対象データのサイズに応じて１ディスクへの書込量を変えることで、毎Ｉ／Ｏがストライプバウンダリに合うように調整してライトペナルティを削減することができる。
【００２７】
なお、各ストレージ装置Ｓ１〜Ｓ４に分散して書き込んだデータへのアクセスを制御するための管理用の情報（例えば、後述するメタデータエントリ）は、ストレージ装置Ｓ１〜Ｓ４に記憶することにしてもよく、また、ストレージ制御装置１０１のメモリなどに記憶することにしてもよい。
【００２８】
（ストレージシステム２００のハードウェア構成例）
つぎに、実施の形態にかかるストレージ制御装置１０１をＲＡＩＤ５（５＋１）のストレージシステム２００に適用した場合を例に挙げて、ストレージシステム２００のハードウェア構成例について説明する。
【００２９】
図２は、ストレージシステム２００のハードウェア構成を示すブロック図である。図２において、ストレージシステム２００は、ストレージ制御装置１０１と、ＨＤＤ１〜ＨＤＤ６と、ホスト装置２０１と、を含む。
【００３０】
ここで、ストレージ制御装置１０１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２１１と、メモリ２１２と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２１３と、ＲＡＩＤコントローラ２１４と、を有する。また、各構成部はバス２１０によってそれぞれ接続されている。
【００３１】
ＣＰＵ２１１は、ストレージ制御装置１０１の全体の制御を司る。メモリ２１２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）およびフラッシュＲＯＭなどを有する。より具体的には、例えば、フラッシュＲＯＭがＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）やファームウェアなどのプログラムを記憶し、ＲＯＭがアプリケーションプログラムを記憶し、ＲＡＭがＣＰＵ２１１のワークエリアとして使用される。メモリ２１２に記憶されているプログラムは、ＣＰＵ２１１にロードされることで、コーディングされている処理をＣＰＵ２１１に実行させることになる。
【００３２】
Ｉ／Ｆ２１３は、他の装置（例えば、ホスト装置２０１）からのデータの入出力を制御する。具体的には、例えば、Ｉ／Ｆ２１３は、通信回線を通じてＦＣ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークに接続され、ネットワークを介して他の装置に接続される。そして、Ｉ／Ｆ２１３は、ネットワークと内部のインターフェースを司り、他の装置からのデータの入出力を制御する。
【００３３】
ＲＡＩＤコントローラ２１４は、ＣＰＵ２１１の制御にしたがって、ＨＤＤ１〜ＨＤＤ６に対するアクセスを行う。ＨＤＤ１〜ＨＤＤ６は、磁性体を塗布した円盤（ハードディスク）を高速回転させることで、磁気ヘッドがデータの読み出し／書き込みを行う記憶装置である。
【００３４】
図２の例では、ＨＤＤ１〜ＨＤＤ６を１つにまとめることにより、ＲＡＩＤグループ２２０が形成されている。ＨＤＤ１〜ＨＤＤ６は、例えば、図１に示したストレージ装置Ｓ１〜Ｓ４に相当する。なお、ＨＤＤの代わりにＳＳＤを用いることにしてもよい。また、以下の説明では、ＨＤＤやＳＳＤをデータストレージとして単に「ディスク」と表記する場合がある。
【００３５】
ホスト装置２０１は、ＲＡＩＤグループ２２０上に作成される論理ボリュームに対するデータのリード／ライトを要求するコンピュータである。具体的には、例えば、ホスト装置２０１は、業務サーバや、ストレージシステム２００を利用するユーザのＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）などである。
【００３６】
なお、図２の例では、ストレージシステム２００内のＨＤＤの台数が、ＨＤＤ１〜ＨＤＤ６の６台の場合を例に挙げて説明したが、これに限らない。例えば、ストレージシステム２００に含まれるＨＤＤの台数は、１台のパリティドライブを含む３台以上であれば任意の台数を採用することができる。また、図２の例では、ストレージ制御装置１０１およびホスト装置２０１をそれぞれ１台のみ表記したが、ストレージシステム２００に複数のストレージ制御装置１０１やホスト装置２０１が含まれることにしてもよい。
【００３７】
（ＲＡＩＤグループ２２０の物理ディスク上のレイアウト例）
つぎに、図２に示したＨＤＤ１〜ＨＤＤ６により形成されるＲＡＩＤグループ２２０の物理ディスク上のレイアウト例について説明する。
【００３８】
図３は、ＲＡＩＤグループ２２０の物理ディスク上のレイアウト例を示す説明図である。図３において、ＲＡＩＤグループ２２０は、ＨＤＤ１〜ＨＤＤ６を１つにまとめたものであり、予め設定されたサイズで区切られて、複数のアドレスユニット（図３の例では、アドレスユニット＃０〜＃２）に分割されている。
【００３９】
各アドレスユニット＃０〜＃２は、先頭からメタデータエントリ領域３０１とユーザデータ領域３０２とに区分けされている。メタデータエントリ領域３０１には、複数のメタデータエントリが配置される。メタデータエントリは、管理用のメタデータである。また、各アドレスユニット＃０〜＃２の先頭では、論理アドレスと物理アドレスとがレイアウトとして一意にマッピングされる。
【００４０】
なお、メタデータエントリのデータ構造については、図４を用いて後述する。
【００４１】
ユーザデータ領域３０２は、ＲＡＩＤグループ２２０上に作成される各論理ボリュームに適宜割り当てられて使用され、各論理ボリュームのデータ（ユーザデータ）を記憶する。ここでは、ＲＡＩＤグループ２２０上に作成される論理ボリュームとして、シーケンシャルＩ／Ｏが要求されるボリュームを想定する。
【００４２】
また、各アドレスユニット＃０〜＃２内のメタデータエントリ数を「２５６個」とし、各メタデータエントリのサイズを「２４ｂｙｔｅ」とする。さらに、期待するＩ／Ｏサイズの最小サイズを「１２８ＫＢ」とする。なお、期待するＩ／Ｏサイズの最小サイズは、例えば、ホスト装置２０１のＯＳやアプリケーションに応じて適宜設定される（例えば、数１０ＫＢ〜数ＭＢ）。
【００４３】
この場合、各メタデータエントリが管理する物理領域のマージンは、「４セクタ（＝２ＫＢ＝５１２ｂｙｔｅ×（５−１）＝２，０４８ｂｙｔｅ）」となる。ただし、１セクタを５１２ｂｙｔｅとする。また、各メタデータエントリが管理する物理領域の基準となるサイズは、「２６０セクタ（＝１３０ＫＢ＝１２８ＫＢ＋２ＫＢ）」となる。
【００４４】
また、各アドレスユニット＃０〜＃２のユーザデータ領域３０２のサイズは、「６６，５６０セクタ（＝３３，２８０ＫＢ＝１３０ＫＢ×２５６＋α）」となる。ただし、αは、ユーザデータサイズをストライプサイズに合わせるための調整領域である。ここでは、αは、「α＝０ＫＢ」となる。
【００４５】
これらのことから、各アドレスユニット＃０〜＃２のサイズは、「６６，５７０セクタ（＝３３２８７．５ＫＢ＝２４ｂｙｔｅ×２５６＋β＋３３２８０ＫＢ）」となる。ただし、βは、メタデータエントリ領域３０１とユーザデータ領域３０２との間のパディングのデータサイズである。ここでは、βは、「β＝１．５ＫＢ」とする。各アドレスユニット＃０〜＃２のメタデータエントリ領域３０１のサイズは、「１５セクタ（＝２４ｂｙｔｅ×２５６＋１．５ＫＢ）」である。
【００４６】
ここで、各ライトチャンクは、ホスト装置２０１からのライト要求のサイズに応じてサイズが動的に変更されるため、ディスクへの書き込みをストライプバウンダリに合わせるための容量マージンが必要となる。ライトチャンクとは、１回のライト要求でディスクに書き込んだ１ストライプである。
【００４７】
本実施の形態のターゲットは、シーケンシャルＩ／Ｏである。このため、ＲＡＩＤグループ２２０を定義する際に、上述したように、期待するＩ／Ｏサイズの最小サイズを規定して、アドレスユニット内のライトチャンクの最大数および必要な容量マージンを得ることで、ディスク上のレイアウトを決定することができる。
【００４８】
以下の説明では、アドレスユニット＃０のメタデータエントリ領域３０１内の２５６個のメタデータエントリを「メタデータエントリ＃１〜＃２５６」と表記する場合がある。また、アドレスユニット＃１のメタデータエントリ領域３０１内の２５６個のメタデータエントリを「メタデータエントリ＃２５７〜＃５１２」と表記する場合がある。また、アドレスユニット＃２のメタデータエントリ領域３０１内の２５６個のメタデータエントリを「メタデータエントリ＃５１３〜＃７６８」と表記する場合がある。
【００４９】
さらに、アドレスユニット＃０〜＃２のメタデータエントリ領域３０１内のメタデータエントリ＃１〜＃７６８のうちの任意のメタデータエントリを「メタデータエントリ＃ｊ」と表記する場合がある（ｊ＝１，２，…，７６８）。
【００５０】
（メタデータエントリ＃ｊのデータ構造例）
つぎに、メタデータエントリ＃ｊのデータ構造例について説明する。
【００５１】
図４は、メタデータエントリ＃ｊのデータ構造例を示す説明図である。図４において、メタデータエントリ＃ｊは、開始物理アドレスと、開始論理アドレスと、ブロック数と、ストライプデプスと、境界不一致回数と、境界不一致前後エントリフラグと、境界不一致ＢＣと、を有する。なお、図４中、メタデータエントリ＃ｊの各メンバ名に続くカッコ内の数値は、各メンバのサイズを表している。
【００５２】
ここで、開始物理アドレス（８ｂｙｔｅ）は、ライトチャンクの先頭の物理アドレスである。開始論理アドレス（８ｂｙｔｅ）は、ライトチャンクに格納されるデータの先頭の論理アドレスである。ブロック数（２ｂｙｔｅ）は、ライトチャンクに格納されるデータのブロック数である。ストライプデプス（２ｂｙｔｅ）は、ライトチャンクのストライプデプスである。
【００５３】
境界不一致回数（１ｂｙｔｅ）は、ライトチャンクへの上書き時に、境界不一致となった回数である。境界不一致前後エントリフラグ（１ｂｙｔｅ）は、境界不一致のライト要求が、前後のライトチャンクに跨っているか否かを示すフラグである。境界不一致ＢＣ（２ｂｙｔｅ）は、ライトチャンク内でライト要求が分割された場合のアドレスオフセットである。
【００５４】
なお、初期状態では、各メンバの値として初期値（例えば、オールＦ）が設定される。
【００５５】
（ストレージ制御装置１０１の機能的構成例）
図５は、ストレージ制御装置１０１の機能的構成例を示すブロック図である。図５において、ストレージ制御装置１０１は、受付部５０１と、特定部５０２と、判断部５０３と、決定部５０４と、算出部５０５と、設定部５０６と、書込部５０７と、読込部５０８と、を含む構成である。受付部５０１〜読込部５０８は制御部となる機能であり、具体的には、例えば、図２に示したメモリ２１２に記憶されたプログラムをＣＰＵ２１１に実行させることにより、または、Ｉ／Ｆ２１３、ＲＡＩＤコントローラ２１４により、その機能を実現する。また、各機能部の処理結果は、例えば、メモリ２１２に記憶される。
【００５６】
受付部５０１は、ホスト装置２０１からのライト要求（書込要求）を受け付ける。ここで、ライト要求は、ＲＡＩＤグループ２２０上に作成された論理ボリュームに対してデータの書き込みを要求するものである。ライト要求には、例えば、ライト要求データ（書込対象データ）と、ライト要求範囲（書込要求範囲）を特定する情報が含まれる。ライト要求範囲を特定する情報は、例えば、ライト要求範囲の開始論理アドレスや、ライト要求データのブロック数などである。
【００５７】
特定部５０２は、受け付けたライト要求のライト要求範囲に基づいて、ＲＡＩＤグループ２２０のアドレスユニット＃０〜＃２から、今回使用するアドレスユニット＃ｉを特定する（ｉ＝０，１，２）。ここで、各アドレスユニット＃０〜＃２の先頭では、論理アドレスと物理アドレスとがレイアウトとして一意にマッピングされる。
【００５８】
このため、特定部５０２は、例えば、ライト要求範囲の論理アドレスを、アドレスユニット内に配置可能なユーザデータの総ブロック数ｂTotalで除算することにより、今回使用するアドレスユニット＃ｉを特定することができる（ただし、１ブロック＝１セクタ＝５１２ｂｙｔｅ）。総ブロック数ｂTotalは、例えば、期待するＩ／Ｏサイズの最小サイズに、アドレスユニット内のメタデータエントリ数を乗算することにより求めることができる。
【００５９】
より詳細に説明すると、特定部５０２は、例えば、ライト要求範囲の先頭の論理アドレスを総ブロック数ｂTotalで除算して得られる商の値を、今回使用するアドレスユニット＃ｉのユニット番号「ｉ」として特定する。ただし、ライト要求範囲がアドレスユニットを跨ぐ場合は、ライト要求範囲をアドレスユニットごとに分割することになる。
【００６０】
判断部５０３は、今回使用するアドレスユニット＃ｉ内のメタデータエントリ群を参照して、ライト要求範囲を含む使用中のメタデータエントリが存在するか否かを判断する。ここで、ライト要求範囲を含む使用中のメタデータエントリとは、管理する範囲（ライト要求範囲）の少なくとも一部が、今回のライト要求範囲に含まれるメタデータエントリである。
【００６１】
より具体的には、ライト要求範囲を含む使用中のメタデータエントリは、今回のライト要求範囲内のいずれかのアドレスが開始論理アドレスとして設定されたメタデータエントリである。すなわち、ライト要求範囲を含む使用中のメタデータエントリが存在するということは、今回のライト要求範囲の少なくとも一部の範囲に、既に書き込み済みのデータがあることを意味する。
【００６２】
具体的には、例えば、判断部５０３は、今回使用するアドレスユニット＃ｉ内のメタデータエントリ群を、各ＨＤＤ１〜ＨＤＤ６から読み出す。そして、判断部５０３は、読み出したメタデータエントリ群を参照して、ライト要求範囲を含む使用中のメタデータエントリが存在するか否かを判断する。
【００６３】
なお、読出対象のメタデータエントリ群がメモリ２１２上にキャッシュされている場合は、判断部５０３は、メモリ２１２上のメタデータエントリ群を使用する。
【００６４】
決定部５０４は、ライト要求範囲を含む使用中のメタデータエントリが存在しない場合に、今回使用するアドレスユニット＃ｉ内のメタデータエントリ群から、今回使用するメタデータエントリ＃ｊを決定する。具体的には、例えば、まず、決定部５０４は、ライト要求範囲の先頭の論理アドレスを総ブロック数ｂTotalで割った余りを、今回使用するアドレスユニット＃ｉ内のオフセット値として算出する。
【００６５】
つぎに、決定部５０４は、算出したオフセット値を、期待するＩ／Ｏサイズの最小サイズで割ることにより、今回使用するメタデータエントリ候補のアドレスユニット＃ｉ内でのエントリ番号を算出する。そして、決定部５０４は、算出したエントリ番号のメタデータエントリ候補が未使用の場合、当該メタデータエントリ候補を、今回使用するメタデータエントリ＃ｊに決定する。
【００６６】
一方、メタデータエントリ候補が使用中の場合には、決定部５０４は、メタデータエントリ候補の先頭側または末尾側の未使用のメタデータエントリを、今回使用するメタデータエントリ＃ｊに決定する。なお、メタデータエントリ候補が使用中の場合の決定例については、図１３を用いて後述する。
【００６７】
算出部５０５は、ライト要求サイズとデータディスク数とに基づいて、バウンダリ調整値とストライプデプスとを算出する。ここで、ライト要求サイズは、ライト要求されたデータ（書込対象データ）のサイズである。また、バウンダリ調整値は、書き込みのサイズをストライプバウンダリ（ストライプサイズ）に合わせるために、ライト要求データに追加するパディングデータのサイズである。また、ストライプデプスは、ストライピングにより各データディスクに分散して書き込まれる各データのサイズであり、１ストライプのうちの１ディスク当たりのデータを記憶する領域（ストリップ）のサイズである。
【００６８】
具体的には、例えば、算出部５０５は、「ライト要求サイズ＋バウンダリ調整値」が「データディスク数×ストライプデプス」と一致するように、バウンダリ調整値とストライプデプスとを算出する。より具体的には、例えば、算出部５０５は、ライト要求サイズをデータディスク数で割った余りを算出する。つぎに、算出部５０５は、算出した余りをデータディスク数から引くことにより、バウンダリ調整値を算出する。そして、算出部５０５は、ライト要求サイズにバウンダリ調整値を足した値をデータディスク数で割ることにより、ストライプデプスを算出する。
【００６９】
設定部５０６は、算出されたストライプデプスとともに、開始物理アドレス、開始論理アドレスおよびブロック数を、今回使用するメタデータエントリ＃ｊに設定する。なお、今回使用するメタデータエントリ＃ｊの設定例については、図７等を用いて後述する。
【００７０】
書込部５０７は、算出されたバウンダリ調整値とストライプデプスとに基づいて、ライト要求データの書き込みを行う。具体的には、例えば、書込部５０７は、ライト要求データの末尾に、バウンダリ調整値分のパディングデータ（ダミーデータ）を付与して、ストライプデプス単位で分割する。そして、書込部５０７は、分割したデータ群からパリティデータを生成し、分割したデータ群とパリティデータを各ＨＤＤ１〜ＨＤＤ６に分散して書き込む。
【００７１】
また、設定部５０６は、ライト要求範囲を含む使用中のメタデータエントリが存在する場合、使用中のメタデータエントリを更新する。ただし、使用中のメタデータエントリが管理する範囲と、今回のライト要求範囲とが一致する場合は、設定部５０６は、使用中のメタデータエントリの更新は行わなくてもよい。
【００７２】
具体的には、例えば、設定部５０６は、使用中のメタデータエントリに、今回のライト要求範囲の書込要求を受け付けた回数を示す境界不一致情報を設定する。ここで、境界不一致情報は、例えば、図４に示した境界不一致回数、境界不一致前後エントリフラグおよび境界不一致ＢＣである。
【００７３】
より具体的には、例えば、設定部５０６は、使用中のメタデータエントリが管理する範囲に従って、今回のライト要求範囲を分割する。そして、設定部５０６は、今回のライト要求範囲を分割したことに応じて、使用中のメタデータエントリに境界不一致回数、境界不一致前後エントリフラグおよび境界不一致ＢＣを設定する。
【００７４】
境界不一致回数は、上述したように、ライトチャンクへの上書き時に、境界不一致となった回数を示す情報である。すなわち、境界不一致回数によれば、使用中のメタデータエントリが管理する範囲と境界が一致しないライト要求範囲へのライト要求が発生した回数を特定することができる。
【００７５】
また、境界不一致前後エントリフラグおよび境界不一致ＢＣは、境界不一致回数により発生した回数を管理しているライト要求のライト要求範囲（以下、「上書き範囲Ｘ」と表記する場合がある）を特定するための情報である。なお、使用中のメタデータエントリの更新例については、図１５を用いて後述する。
【００７６】
また、判断部５０３は、使用中のメタデータエントリの境界不一致情報が示す回数が規定値以上となったか否かを判断する。規定値は、任意に設定可能である。具体的には、例えば、判断部５０３は、使用中のメタデータエントリの境界不一致回数が規定値以上となったか否かを判断する。
【００７７】
ここで、境界不一致回数が規定値以上となった場合、算出部５０５は、境界不一致前後エントリフラグおよび境界不一致ＢＣから特定される上書き範囲Ｘに書き込み済みのデータをライト要求データとして、バウンダリ調整値とストライプデプスとを再計算する。また、設定部５０６は、境界不一致回数が規定値以上となった使用中のメタデータエントリを初期化する。
【００７８】
また、決定部５０４は、上述したように、新たに使用するメタデータエントリ＃ｊを決定する。そして、設定部５０６は、算出されたストライプデプスとともに、開始物理アドレス、開始論理アドレスおよびブロック数を、新たに使用するメタデータエントリ＃ｊに設定する。
【００７９】
さらに、算出部５０５は、境界不一致回数が規定値以上となった使用中のメタデータエントリが管理する範囲のうち上書き範囲Ｘ以外の範囲に書き込み済みのデータについても、ライト要求データとしてバウンダリ調整値とストライプデプスとを再計算する。そして、決定部５０４が、新たに使用するメタデータエントリ＃ｊを決定し、設定部５０６が、新たに使用するメタデータエントリ＃ｊに各種情報を設定する。
【００８０】
これにより、ストライプバウンダリに合致しないようなライト要求が頻繁に発生した場合に、ストライプデプスを再調整することができる。なお、ストライプデプスの再調整例については、図１５〜図１７を用いて後述する。
【００８１】
また、受付部５０１は、ホスト装置２０１からのリード要求（読込要求）を受け付ける。ここで、リード要求は、ＲＡＩＤグループ２２０上に作成された論理ボリュームからのデータの読み込みを要求するものである。リード要求には、例えば、リード要求範囲（読込要求範囲）を特定する情報が含まれる。リード要求範囲を特定する情報は、例えば、リード要求範囲の開始論理アドレスや、リード要求データのブロック数などである。
【００８２】
また、特定部５０２は、受け付けたリード要求のリード要求範囲に基づいて、ＲＡＩＤグループ２２０のアドレスユニット＃０〜＃２から、今回使用するアドレスユニット＃ｉを特定する。なお、今回使用するアドレスユニット＃ｉを特定する具体的な処理内容は、ライト要求の場合と同様のため説明を省略する。
【００８３】
また、決定部５０４は、今回使用するアドレスユニット＃ｉ内のメタデータエントリ群から、今回使用するメタデータエントリ＃ｊを決定する。具体的には、例えば、決定部５０４は、今回使用するアドレスユニット＃ｉ内のメタデータエントリ群から、リード要求範囲を含む使用中のメタデータエントリを検索する。
【００８４】
ここで、リード要求範囲を含む使用中のメタデータエントリとは、管理する範囲の少なくとも一部が、今回のリード要求範囲に含まれるメタデータエントリである。すなわち、各メタデータエントリの開始論理アドレスとブロック数から、今回のリード要求範囲を包含するだけのライトチャンクを見つけ出す。そして、決定部５０４は、検索した使用中のメタデータエントリを、今回使用するメタデータエントリ＃ｊに決定する。
【００８５】
読込部５０８は、決定された今回使用するメタデータエントリ＃ｊに基づいて、リード要求データ（読込対象データ）の読み込みを行う。具体的には、例えば、読込部５０８は、今回使用するメタデータエントリ＃ｊの開始物理アドレスとストライプデプスに従って、各ディスクから読み出す対象を決定する。そして、読込部５０８は、決定した読み出す対象を各ディスクから読み込む。なお、読込部５０８は、データ未格納領域に対するリード要求については、０データを応答する。
【００８６】
また、期待するＩ／Ｏサイズの最小サイズよりも小サイズのライト要求が頻繁に発生した場合、管理用のメタデータエントリが足りなくなる場合がある。この場合は、ストレージ制御装置１０１は、例えば、バウンダリ調整値やストライプデプスを算出することなく、ライト要求データの書き込みを行う。
【００８７】
（ライト要求に対する第１の処理例）
つぎに、図６〜図８を用いて、ホスト装置２０１から受け付けたライト要求に対する第１の処理例について説明する。
【００８８】
図６は、ライト要求に対する第１の処理例を示す説明図である。ここでは、論理セクタ「８５，２００〜８７，３２２」の範囲の２，１２３セクタ分についてのライト要求を受け付けた場合を想定する。
【００８９】
まず、特定部５０２は、今回使用するアドレスユニット＃ｉを特定する。具体的には、例えば、特定部５０２は、論理セクタ「８５，２００」を総ブロック数ｂTotalで除算して得られる商の値を、今回使用するアドレスユニット＃ｉのユニット番号「ｉ」として特定する。
【００９０】
総ブロック数ｂTotalは、「２５６セクタ×２５６エントリ」である。このため、特定部５０２は、論理セクタ「８５，２００」を総ブロック数ｂTotal「２５６セクタ×２５６エントリ」で除算して得られる商の値「１」を、今回使用するアドレスユニット＃ｉのユニット番号「ｉ＝１」として特定する。これにより、今回使用するアドレスユニット＃１を特定することができる。
【００９１】
つぎに、判断部５０３は、アドレスユニット＃１内のメタデータエントリ＃２５７〜＃５１２を参照して、ライト要求範囲を含む使用中のメタデータエントリが存在するか否かを判断する。
【００９２】
具体的には、例えば、まず、判断部５０３は、メタデータエントリ＃２５７〜＃５１２がキャッシュミスした場合、各ＨＤＤ１〜ＨＤＤ６からメタデータエントリ＃２５７〜＃５１２を読み出す。ここで、各ＨＤＤ１〜ＨＤＤ６の読み出し開始位置は、セクタ１３，３１４（＝アドレスユニットのサイズ×ユニット番号÷データディスク数＝６６，５７０×１÷５）である。また、読み出しサイズは、３セクタ（＝７．５ＫＢ＝｛２４ｂｙｔｅ×２５６＋α｝÷５）である。
【００９３】
このため、判断部５０３は、各ＨＤＤ１〜ＨＤＤ６に対して、セクタ１３，３１４から３セクタずつ読み出すことにより、メタデータエントリ＃２５７〜＃５１２を得ることができる。ここでは、メタデータエントリ＃２５７〜＃５１２に、ライト要求範囲「８５，２００〜８７，３２２」を含む使用中のメタデータエントリが存在しない場合を想定する。
【００９４】
つぎに、決定部５０４は、今回使用するアドレスユニット＃１内のメタデータエントリ＃２５７〜＃５１２から、今回使用するメタデータエントリ＃ｊを決定する。
【００９５】
具体的には、例えば、まず、決定部５０４は、論理セクタ「８５，２００」を総ブロック数ｂTotal「２５６セクタ×２５６エントリ」で割った余りを、アドレスユニット＃１内のオフセット値として算出する。ここでは、アドレスユニット＃１内のオフセット値は、「１９，６６４（＝８５，２００％（２５６セクタ×２５６エントリ））」となる。
【００９６】
つぎに、決定部５０４は、オフセット値「１９，６６４」を、期待するＩ／Ｏサイズの最小サイズ「２５６セクタ」で割ることにより、今回使用するメタデータエントリ候補のアドレスユニット＃１内でのエントリ番号「７６」を算出する。これにより、今回使用するメタデータエントリ候補＃３３２（７６番目のメタデータエントリ）を特定することができる。
【００９７】
ここでは、メタデータエントリ候補＃３３２が未使用である場合を想定する。この場合、決定部５０４は、メタデータエントリ候補＃３３２を、今回使用するメタデータエントリ＃３３２に決定する。
【００９８】
つぎに、算出部５０５は、「ライト要求サイズ＋バウンダリ調整値」が「データディスク数×ストライプデプス」と一致するように、バウンダリ調整値とストライプデプスとを算出する。
【００９９】
具体的には、例えば、算出部５０５は、ライト要求サイズ「２，１２３セクタ」をデータディスク数「５」で割った余り「３」を算出する。つぎに、算出部５０５は、算出した余り「３」をデータディスク数「５」から引くことにより、バウンダリ調整値「２セクタ」を算出する。そして、算出部５０５は、ライト要求サイズにバウンダリ調整値を足した値「２，１２５セクタ」をデータディスク数「５」で割ることにより、ストライプデプス「４２５セクタ」を算出する。
【０１００】
つぎに、設定部５０６は、開始物理アドレス、開始論理アドレス、ブロック数およびストライプデプスを、メタデータエントリ＃３３２に設定する。開始物理アドレス（ディスクアドレス）は、例えば、下記式（１）を用いて求めることができる。
【０１０１】
開始物理アドレス＝（アドレスユニットのサイズ×ユニット番号＋メタデータ領域のサイズ＋アドレスユニット内のオフセット値÷メタデータエントリ数×各メタデータエントリが管理する物理領域の基準となるサイズ）÷データディスク数  ・・・（１）
【０１０２】
このため、開始物理アドレスは、「１７，３１１セクタ（＝（６６，５７０×１＋１５＋１９，６６４÷２５６×２６０）÷５）」となる。また、開始論理アドレスは、「８５，２００セクタ」である。また、ブロック数は、「２，１２３セクタ」である。また、ストライプデプスは、「４２５セクタ」である。
【０１０３】
なお、設定部５０６は、前後の使用中のメタデータエントリをチェックし、今回書き込みしようとする領域が既に使用中であるかを確認し、使用中であった場合には、開始物理アドレスを調整する。
【０１０４】
図７は、メタデータエントリ＃ｊの設定例を示す説明図（その１）である。図７において、メタデータエントリ＃３３２に、開始物理アドレス「１７，３１１［セクタ］」、開始論理アドレス「８５，２００［セクタ］」、ブロック数「２，１２３［セクタ］」およびストライプデプス「４２５［セクタ］」が設定されている。また、メタデータエントリ＃３３２に、境界不一致回数「０」、境界不一致前後エントリフラグ「初期値」および境界不一致ＢＣ「０」が初期値として設定されている。
【０１０５】
ここで、上記ライト要求が完了した状態のＨＤＤ１〜ＨＤＤ６のディスクイメージについて説明する。
【０１０６】
図８は、ＨＤＤ１〜ＨＤＤ６のディスクイメージの一例を示す説明図である。図８に示すように、メタデータエントリ＃３３２への設定が完了すると、書込部５０７は、パリティデータを生成して、ライト要求データのライト処理を行う。なお、パリティデータは、ＲＡＩＤグループ２２０内の各ディスクに分散することが好ましい。パリティ分散に関するロジックは周知技術のため説明を省略する。
【０１０７】
（ライト要求に対する第２の処理例）
つぎに、図９〜図１１を用いて、ホスト装置２０１から受け付けたライト要求に対する第２の処理例について説明する。
【０１０８】
図９は、ライト要求に対する第２の処理例を示す説明図である。ここでは、図６〜図８を用いて説明したライト要求が完了した状態から、論理セクタ「８７，３２３〜８９，４４５」の範囲の２１２３セクタ分についてのライト要求を受け付けた場合を想定する。
【０１０９】
まず、特定部５０２は、今回使用するアドレスユニット＃ｉを特定する。具体的には、例えば、特定部５０２は、論理セクタ「８７，３２３」を総ブロック数ｂTotalで除算して得られる商の値「１」を、今回使用するアドレスユニット＃ｉのユニット番号「ｉ＝１」として特定する。
【０１１０】
つぎに、判断部５０３は、アドレスユニット＃１内のメタデータエントリ＃２５７〜＃５１２を参照して、ライト要求範囲を含む使用中のメタデータエントリが存在するか否かを判断する。ここでは、メタデータエントリ＃２５７〜＃５１２に、ライト要求範囲「８７，３２３〜８９，４４５」を含む使用中のメタデータエントリが存在しない場合を想定する。
【０１１１】
つぎに、決定部５０４は、アドレスユニット＃１内のメタデータエントリ＃２５７〜＃５１２から、今回使用するメタデータエントリ＃ｊを決定する。
【０１１２】
具体的には、例えば、まず、決定部５０４は、論理セクタ「８７，３２３」を総ブロック数ｂTotal「２５６セクタ×２５６エントリ」で割った余りを、アドレスユニット＃１内のオフセット値として算出する。ここでは、アドレスユニット＃１内のオフセット値は、「２１，７８７」となる。
【０１１３】
つぎに、決定部５０４は、オフセット値「２１，７８７」を、期待するＩ／Ｏサイズの最小サイズ「２５６セクタ」で割ることにより、今回使用するメタデータエントリ候補のアドレスユニット＃１内でのエントリ番号「８５」を算出する。これにより、今回使用するメタデータエントリ候補＃３４１（８５番目のメタデータエントリ）を特定することができる。
【０１１４】
ここでは、メタデータエントリ候補＃３４１が未使用である場合を想定する。この場合、決定部５０４は、メタデータエントリ候補＃３４１を、今回使用するメタデータエントリ＃３４１に決定する。
【０１１５】
つぎに、算出部５０５は、「ライト要求サイズ＋バウンダリ調整値」が「データディスク数×ストライプデプス」と一致するように、バウンダリ調整値とストライプデプスとを算出する。ここでは、バウンダリ調整値は「２セクタ」となり、ストライプデプスは「４２５セクタ」となる。
【０１１６】
つぎに、設定部５０６は、開始物理アドレス、開始論理アドレス、ブロック数およびストライプデプスを、メタデータエントリ＃３４１に設定する。開始物理アドレスは、上記式（１）から「１７，７４２セクタ」となる。また、開始論理アドレスは、「８７，３２３セクタ」である。また、ブロック数は、「２，１２３セクタ」である。また、ストライプデプスは、「４２５セクタ」である。
【０１１７】
図１０は、メタデータエントリ＃ｊの設定例を示す説明図（その２）である。図１０において、メタデータエントリ＃３４１に、開始物理アドレス「１７，７４２［セクタ］」、開始論理アドレス「８７，３２３［セクタ］」、ブロック数「２，１２３［セクタ］」およびストライプデプス「４２５［セクタ］」が設定されている。また、メタデータエントリ＃３４１に、境界不一致回数「０」、境界不一致前後エントリフラグ「初期値」および境界不一致ＢＣ「０」が初期値として設定されている。
【０１１８】
ここで、上記ライト要求が完了した状態のＨＤＤ１〜ＨＤＤ６のディスクイメージについて説明する。
【０１１９】
図１１は、ＨＤＤ１〜ＨＤＤ６のディスクイメージの一例を示す説明図である。図１１に示すように、メタデータエントリ＃３４１への設定が完了すると、書込部５０７は、パリティデータを生成して、ライト要求データのライト処理を行う。
【０１２０】
（ライト要求に対する第３の処理例）
つぎに、図１２〜図１４を用いて、ホスト装置２０１から受け付けたライト要求に対する第３の処理例について説明する。
【０１２１】
ここでは、論理セクタ「８５，２００〜８７，３２１」の範囲の２，１２２セクタ分、および、論理セクタ「８７，３６４〜８９，４４５」の範囲の２，０８２セクタ分について、既にライト要求されている場合を想定する。
【０１２２】
この場合、上記ライト要求で使用されるメタデータエントリは、７６番目のメタデータエントリ候補＃３３２、および、８５番目のメタデータエントリ候補＃３４１である。また、メタデータエントリ候補＃３３２（７６番目）およびメタデータエントリ候補＃３４１（８５番目）の設定内容は図７および図１０に示す通りである。
【０１２３】
図１２は、メタデータエントリ＃ｊの設定例を示す説明図（その３）である。図１２において、メタデータエントリ＃３３２に、開始物理アドレス「１７，３１１［セクタ］」、開始論理アドレス「８５，２００［セクタ］」、ブロック数「２，１２２［セクタ］」およびストライプデプス「４２５［セクタ］」が設定されている。
【０１２４】
また、メタデータエントリ＃３４１に、開始物理アドレス「１７，７５０［セクタ］」、開始論理アドレス「８７，３６４［セクタ］」、ブロック数「２，０８２［セクタ］」およびストライプデプス「４１７［セクタ］」が設定されている。
【０１２５】
図１３は、ライト要求に対する第３の処理例を示す説明図である。ここでは、上記ライト要求が完了した状態で、論理セクタ「８７，３２２〜８７，３６３」の範囲の４２セクタ分についてのライト要求（ショートブロック）を受け付けた場合を想定する。
【０１２６】
まず、特定部５０２は、今回使用するアドレスユニット＃ｉを特定する。具体的には、例えば、特定部５０２は、論理セクタ「８７，３２２」を総ブロック数ｂTotalで除算して得られる商の値「１」を、今回使用するアドレスユニット＃ｉのユニット番号「ｉ＝１」として特定する。
【０１２７】
つぎに、判断部５０３は、アドレスユニット＃１内のメタデータエントリ＃２５７〜＃５１２を参照して、ライト要求範囲を含む使用中のメタデータエントリが存在するか否かを判断する。ここでは、メタデータエントリ＃２５７〜＃５１２に、ライト要求範囲「８７，３２２〜８７，３６３」を含む使用中のメタデータエントリが存在しない場合を想定する。
【０１２８】
つぎに、決定部５０４は、アドレスユニット＃１内のメタデータエントリ＃２５７〜＃５１２から、今回使用するメタデータエントリ＃ｊを決定する。
【０１２９】
具体的には、例えば、まず、決定部５０４は、論理セクタ「８７，３２２」を総ブロック数ｂTotal「２５６セクタ×２５６エントリ」で割った余りを、アドレスユニット＃１内のオフセット値として算出する。ここでは、アドレスユニット＃１内のオフセット値は、「２１，７８６」となる。
【０１３０】
つぎに、決定部５０４は、オフセット値「２１，７８６」を、期待するＩ／Ｏサイズの最小サイズ「２５６セクタ」で割ることにより、今回使用するメタデータエントリ候補のアドレスユニット＃１内でのエントリ番号「８５」を算出する。ここでは、８５番目のメタデータエントリ＃３４１は、論理セクタ「８７，３６４〜８９，４４５」の管理のために使用中である。
【０１３１】
この場合、メタデータエントリ候補＃３４１の先頭側または末尾側の未使用のメタデータエントリを、今回使用するメタデータエントリ＃ｊに決定する。ここで、今回のライト要求範囲は、論理セクタ「８７，３６４」よりも小さい。このため、決定部５０４は、メタデータエントリ候補＃３４１の先頭側の未使用のメタデータエントリを検索する。
【０１３２】
ここでは、８４番目のメタデータエントリ＃３４０が未使用である。この場合、決定部５０４は、検索したメタデータエントリ＃３４０を、今回使用するメタデータエントリに決定する。なお、８４番目のメタデータエントリ＃３４０が使用中の場合は、決定部５０４は、使用中の各メタデータエントリを必要に応じて先頭側にスライドさせて、今回使用するメタデータエントリを確保する。
【０１３３】
例えば、８３番目のメタデータエントリ＃３３９が未使用であれば、決定部５０４は、８４番目のメタデータエントリ＃３４０の設定内容を、８３番目のメタデータエントリ＃３３９にコピーする。そして、決定部５０４は、８４番目のメタデータエントリ＃３４０を、今回使用するメタデータエントリに決定する。ただし、各メタデータエントリが管理する開始アドレスは昇順となるように制御される。
【０１３４】
つぎに、算出部５０５は、「ライト要求サイズ＋バウンダリ調整値」が「データディスク数×ストライプデプス」と一致するように、バウンダリ調整値とストライプデプスとを算出する。ここでは、バウンダリ調整値は「３セクタ」となり、ストライプデプスは「９セクタ」となる。
【０１３５】
つぎに、設定部５０６は、開始物理アドレス、開始論理アドレス、ブロック数およびストライプデプスを、メタデータエントリ＃３４０に設定する。開始物理アドレスは、上記式（１）から「１７，７４２セクタ」となる。また、開始論理アドレスは、「８７，３２２セクタ」である。また、ブロック数は、「４２セクタ」である。また、ストライプデプスは、「９セクタ」である。
【０１３６】
図１４は、メタデータエントリ＃ｊの設定例を示す説明図（その４）である。図１４において、メタデータエントリ＃３４０に、開始物理アドレス「１７，７４２［セクタ］」、開始論理アドレス「８７，３２２［セクタ］」、ブロック数「４２［セクタ］」およびストライプデプス「９［セクタ］」が設定されている。
【０１３７】
また、書込部５０７は、メタデータエントリ＃３４０への設定が完了すると、パリティデータを生成して、ライト要求データのライト処理を行う。
【０１３８】
（ストライプデプスの再調整）
つぎに、図１５〜図１７を用いて、ストライプデプスの再調整について説明する。
【０１３９】
ここでは、上述した第３の処理例が完了した状態から、ストライプデプスの再調整が発生する場合を想定する。完了した状態の７６番目のメタデータエントリ候補＃３３２、８４番目のメタデータエントリ候補＃３４０、および８５番目のメタデータエントリ候補＃３４１の設定内容は、図１２および図１４に示した通りである。
【０１４０】
ここで、論理セクタ「８６，７００〜８８，１９９」の範囲の１，５００セクタ分についてのライト要求（上書き）を受け付けた場合を想定する。
【０１４１】
まず、特定部５０２は、今回使用するアドレスユニット＃ｉを特定する。具体的には、例えば、特定部５０２は、論理セクタ「８６，７００」を総ブロック数ｂTotalで除算して得られる商の値「１」を、今回使用するアドレスユニット＃ｉのユニット番号「ｉ＝１」として特定する。
【０１４２】
つぎに、判断部５０３は、アドレスユニット＃１内のメタデータエントリ＃２５７〜＃５１２を参照して、ライト要求範囲を含む使用中のメタデータエントリが存在するか否かを判断する。ここでは、メタデータエントリ＃２５７〜＃５１２に、ライト要求範囲「８６，７００〜８８，１９９」を含む使用中のメタデータエントリ＃３３２，＃３４０，＃３４１が存在する。
【０１４３】
この場合、設定部５０６は、使用中のメタデータエントリ＃３３２，＃３４０，＃３４１を更新する。具体的には、例えば、設定部５０６は、使用中のメタデータエントリ＃３３２，＃３４０，＃３４１が管理する範囲に従って、ライト要求範囲「８６，７００〜８８，１９９」を分割する。具体的には、例えば、設定部５０６は、ライト要求範囲「８６，７００〜８８，１９９」を、第１、第２および第３の分割範囲に分割する。
【０１４４】
ここで、第１の分割範囲は、論理セクタ「８６，７００〜８７，３２１」の６２２セクタ分の範囲である。第２の分割範囲は、論理セクタ「８７，３２２〜８７，３６３」の４２セクタ分の範囲である。第３の分割範囲は、論理セクタ「８７，３６４〜８８，１９９」の８３６セクタ分の範囲である。
【０１４５】
そして、設定部５０６は、ライト要求範囲「８６，７００〜８８，１９９」を分割したことに応じて、使用中のメタデータエントリ＃３３２，＃３４０，＃３４１に境界不一致回数、境界不一致前後エントリフラグおよび境界不一致ＢＣを設定する。
【０１４６】
図１５は、メタデータエントリ＃ｊの設定例を示す説明図（その５）である。図１５において、メタデータエントリ＃３３２について、設定部５０６は、境界不一致回数をインクリメントする。また、今回のライト要求（境界不一致のライト要求）が、後ろのライトチャンクに跨っているため、設定部５０６は、境界不一致前後エントリフラグに「後」を設定する。また、設定部５０６は、メタデータエントリ＃３３２が管理する領域「８５，２００〜８７，３２１」のうち分割された箇所を示すアドレスオフセット「１，５００（＝８６，７００−８５，２００）」を算出する。そして、設定部５０６は、境界不一致ＢＣに「１，５００」を設定する。
【０１４７】
同様に、メタデータエントリ＃３４０について、設定部５０６は、境界不一致回数をインクリメントする。また、今回のライト要求（境界不一致のライト要求）が、前後のライトチャンクに跨っているため、設定部５０６は、境界不一致前後エントリフラグに「前後」を設定する。なお、メタデータエントリ＃３４０が管理する領域「８７，３２２〜８７，３６３」のうち分割された箇所は存在しない。この場合、設定部５０６は、境界不一致ＢＣに「０」を設定する。
【０１４８】
同様に、メタデータエントリ＃３４１について、設定部５０６は、境界不一致回数をインクリメントする。また、今回のライト要求（境界不一致のライト要求）が、前のライトチャンクに跨っているため、設定部５０６は、境界不一致前後エントリフラグに「前」を設定する。また、設定部５０６は、メタデータエントリ＃３４１が管理する領域「８７，３６４〜８９，４４５」のうち分割された箇所を示すアドレスオフセット「８３６（＝８８，１９９＋１−８７，３６４）を算出する。そして、設定部５０６は、境界不一致ＢＣに「８３６」を設定する。
【０１４９】
ここで、メタデータエントリ＃３３２，＃３４１が管理する領域については、ディスクリードの後にパリティデータの生成を行ってディスクライトすることになるため、ライトペナルティが発生する。メタデータエントリ＃３４０が管理する領域については、ライトペナルティは発生しない。
【０１５０】
なお、物理アドレスと論理アドレスとの対応について、７６番目のメタデータエントリ＃３３２を例に挙げると、図１６に示すようになる。
【０１５１】
図１６は、物理アドレスと論理アドレスとの対応を示す説明図である。図１６において、領域１６０１は、今回のライト対象範囲である。また、領域１６０２は、書き込みのためにディスクリードが必要な領域である。また、領域１６０３は、ストライプバウンダリ調整領域である。
【０１５２】
ただし、領域１６０２は、ストライプ上のデータをすべて揃えて新しいパリティデータを生成する方式で書き込みを行う場合に必要なディスクリード対象範囲を表す。
【０１５３】
以下、各メタデータエントリの境界不一致回数が規定値以上となった場合のストライプデプスの再調整の動作例について説明する。
【０１５４】
判断部５０３は、メタデータエントリを先頭から順次参照して、境界不一致回数が規定値以上となったか否かを判断することにより、ストライプデプスの再調整の要否を判断する。ここでは、７６番目のメタデータエントリ＃３３２の境界不一致回数が規定値以上となった場合を例に挙げて説明する。
【０１５５】
この場合、判断部５０３は、メタデータエントリ＃３３２の境界不一致前後エントリフラグを参照して、連結対象となるメタデータエントリを判断する。ここでは、メタデータエントリ＃３３２の境界不一致前後エントリフラグに「後」が設定されている（例えば、図１５参照）。
【０１５６】
この場合、判断部５０３は、メタデータエントリ＃３３２の次の使用中のメタデータエントリを検索する。ここでは、８４番目のメタデータエントリ＃３４０が検索される。
【０１５７】
この場合、判断部５０３は、メタデータエントリ＃３４０の境界不一致前後エントリフラグを参照して、連結対象となるメタデータエントリを判断する。ここでは、メタデータエントリ＃３４０の境界不一致前後エントリフラグに「前後」が設定されている（例えば、図１５参照）。
【０１５８】
この場合、判断部５０３は、メタデータエントリ＃３４０の次の使用中のメタデータエントリを検索する。ここでは、８５番目のメタデータエントリ＃３４１が検索される。
【０１５９】
この場合、判断部５０３は、メタデータエントリ＃３４１の境界不一致前後エントリフラグを参照して、連結対象となるメタデータエントリを判断する。ここでは、メタデータエントリ＃３４１の境界不一致前後エントリフラグに「前」が設定されている（例えば、図１５参照）。
【０１６０】
この場合、判断部５０３は、メタデータエントリ＃３４１までが連結対象であると判断する。これにより、連結対象となるメタデータエントリ＃３３２，＃３４０，＃３４１を特定することができる。そして、７６番目、８４番目、８５番目のメタデータエントリ＃３３２，＃３４０，＃３４１が管理する論理セクタ「８５，２００〜８９，４４５」のユーザデータをディスクから読み出してメモリ２１２上に展開する。
【０１６１】
そして、ストレージ制御装置１０１は、各メタデータエントリ＃３３２，＃３４０，＃３４１の境界不一致ＢＣから、以下の新規ライト要求を受け付けたものとして、ライト処理を行う（ライトチャンクの再設定）。
【０１６２】
・論理セクタ「８５，２００〜８６，６９９」の１，５００セクタ分
・論理セクタ「８６，７００〜８８，１９９」の１，５００セクタ分
・論理セクタ「８８，２００〜８９，４４５」の１，２４６セクタ分
【０１６３】
この場合、ストレージ制御装置１０１は、７６番目、８４番目、８５番目の各メタデータエントリ＃３３２，＃３４０，＃３４１の設定内容を一旦初期化し、上述したように、各ライト要求についてメタデータエントリの決定および設定を行う（メタデータエントリの再設定）。
【０１６４】
ここでは、各新規ライト要求（再設定されたライトチャンク）について使用されるメタデータエントリは、７６番目、８２番目、８８番目の各メタデータエントリ＃３３２，＃３３７，＃３４３となる。この後、ストレージ制御装置１０１は、パリティデータの生成およびディスクライトを実施する。
【０１６５】
ここで、図１７を用いて、ストライプデプスを再調整後の７６番目、８２番目、８８番目の各メタデータエントリ＃３３２，＃３３７，＃３４３の設定内容について説明する。
【０１６６】
図１７は、メタデータエントリ＃ｊの設定例を示す説明図（その６）である。図１７において、メタデータエントリ＃３３２に、開始物理アドレス「１７，３１１［セクタ］」、開始論理アドレス「８５，２００［セクタ］」、ブロック数「１，５００［セクタ］」およびストライプデプス「３００［セクタ］」が設定されている。また、初期値として、メタデータエントリ＃３３２に、境界不一致回数「０」、境界不一致前後エントリフラグ「初期値」および境界不一致ＢＣ「０」が設定されている。
【０１６７】
また、メタデータエントリ＃３３７に、開始物理アドレス「１７，６１５［セクタ］」、開始論理アドレス「８６，７００［セクタ］」、ブロック数「１，５００［セクタ］」およびストライプデプス「３００［セクタ］」が設定されている。また、初期値として、メタデータエントリ＃３３７に、境界不一致回数「０」、境界不一致前後エントリフラグ「初期値」および境界不一致ＢＣ「０」が設定されている。
【０１６８】
また、メタデータエントリ＃３４３に、開始物理アドレス「１７，９２０［セクタ］」、開始論理アドレス「８８，２００［セクタ］」、ブロック数「１，２４６［セクタ］」およびストライプデプス「２５０［セクタ］」が設定されている。また、初期値として、メタデータエントリ＃３４３に、境界不一致回数「０」、境界不一致前後エントリフラグ「初期値」および境界不一致ＢＣ「０」が設定されている。
【０１６９】
（ストレージ制御装置１０１の各種処理手順）
つぎに、ストレージ制御装置１０１の各種処理手順について説明する。ここでは、まず、ストレージ制御装置１０１の書込処理手順について説明する。
【０１７０】
＜書込処理手順＞
図１８〜図２０は、ストレージ制御装置１０１の書込処理手順の一例を示すフローチャートである。図１８のフローチャートにおいて、まず、ストレージ制御装置１０１は、ホスト装置２０１からのライト要求を受け付けたか否かを判断する（ステップＳ１８０１）。ここで、ストレージ制御装置１０１は、ライト要求を受け付けるのを待つ（ステップＳ１８０１：Ｎｏ）。
【０１７１】
そして、ストレージ制御装置１０１は、ライト要求を受け付けた場合（ステップＳ１８０１：Ｙｅｓ）、ライト要求のライト要求範囲に基づいて、ＲＡＩＤグループ２２０のアドレスユニット＃０〜＃２から、今回使用するアドレスユニット＃ｉを特定する（ステップＳ１８０２）。
【０１７２】
つぎに、ストレージ制御装置１０１は、今回使用するアドレスユニット＃ｉ内のメタデータエントリ群がキャッシュミスしたか否かを判断する（ステップＳ１８０３）。ここで、メタデータエントリ群がキャッシュヒットした場合（ステップＳ１８０３：Ｎｏ）、ストレージ制御装置１０１は、ステップＳ１８０５に移行する。
【０１７３】
一方、メタデータエントリ群がキャッシュミスした場合（ステップＳ１８０３：Ｙｅｓ）、ストレージ制御装置１０１は、今回使用するアドレスユニット＃ｉ内のメタデータエントリ群を、ディスク（ＨＤＤ１〜ＨＤＤ６）から読み出す（ステップＳ１８０４）。
【０１７４】
そして、ストレージ制御装置１０１は、今回使用するアドレスユニット＃ｉ内のメタデータエントリ群を参照して、ライト要求範囲を含む使用中のメタデータエントリが存在するか否かを判断する（ステップＳ１８０５）。
【０１７５】
ここで、使用中のメタデータエントリが存在しない場合（ステップＳ１８０５：Ｎｏ）、ストレージ制御装置１０１は、図１９に示すステップＳ１９０１に移行する。一方、使用中のメタデータエントリが存在する場合（ステップＳ１８０５：Ｙｅｓ）、ストレージ制御装置１０１は、図２０に示すステップＳ２００１に移行する。
【０１７６】
図１９のフローチャートにおいて、まず、ストレージ制御装置１０１は、今回使用するアドレスユニット＃ｉ内のメタデータエントリ群から、今回使用するメタデータエントリ候補を特定する（ステップＳ１９０１）。そして、ストレージ制御装置１０１は、メタデータエントリ候補が使用中であるか否かを判断する（ステップＳ１９０２）。
【０１７７】
ここで、メタデータエントリ候補が未使用の場合（ステップＳ１９０２：Ｎｏ）、ストレージ制御装置１０１は、ステップＳ１９０８に移行して、メタデータエントリ候補を、今回使用するメタデータエントリ＃ｊに決定する（ステップＳ１９０８）。
【０１７８】
一方、メタデータエントリ候補が使用中の場合（ステップＳ１９０２：Ｙｅｓ）、ストレージ制御装置１０１は、メタデータエントリ候補が管理する範囲が、今回のライト要求範囲より小さいか否かを判断する（ステップＳ１９０３）。そして、今回のライト要求範囲より小さい場合（ステップＳ１９０３：Ｙｅｓ）、ストレージ制御装置１０１は、メタデータエントリ候補の末尾側に未使用のメタデータエントリがあるか否かを判断する（ステップＳ１９０４）。
【０１７９】
ここで、未使用のメタデータエントリがある場合（ステップＳ１９０４：Ｙｅｓ）、ストレージ制御装置１０１は、ステップＳ１９０８に移行し、末尾側の未使用のメタデータエントリを、今回使用するメタデータエントリ＃ｊに決定する（ステップＳ１９０８）。
【０１８０】
一方、未使用のメタデータエントリがない場合（ステップＳ１９０４：Ｎｏ）、ストレージ制御装置１０１は、使用中の各メタデータエントリを必要に応じて末尾側にスライドさせて、今回使用するメタデータエントリを確保する（ステップＳ１９０５）。そして、ストレージ制御装置１０１は、確保したメタデータエントリを、今回使用するメタデータエントリ＃ｊに決定する（ステップＳ１９０８）。
【０１８１】
また、ステップＳ１９０３において、今回のライト要求範囲より大きい場合（ステップＳ１９０３：Ｎｏ）、ストレージ制御装置１０１は、メタデータエントリ候補の先頭側に未使用のメタデータエントリがあるか否かを判断する（ステップＳ１９０６）。
【０１８２】
ここで、未使用のメタデータエントリがある場合（ステップＳ１９０６：Ｙｅｓ）、ストレージ制御装置１０１は、ステップＳ１９０８に移行し、先頭側の未使用のメタデータエントリを、今回使用するメタデータエントリ＃ｊに決定する（ステップＳ１９０８）。
【０１８３】
一方、未使用のメタデータエントリがない場合（ステップＳ１９０６：Ｎｏ）、ストレージ制御装置１０１は、使用中の各メタデータエントリを必要に応じて先頭側にスライドさせて、今回使用するメタデータエントリを確保する（ステップＳ１９０７）。そして、ストレージ制御装置１０１は、確保したメタデータエントリを、今回使用するメタデータエントリ＃ｊに決定する（ステップＳ１９０８）。
【０１８４】
つぎに、ストレージ制御装置１０１は、ライト要求サイズとデータディスク数とに基づいて、バウンダリ調整値とストライプデプスとを算出する（ステップＳ１９０９）。そして、ストレージ制御装置１０１は、算出したストライプデプスとともに、開始物理アドレス、開始論理アドレスおよびブロック数を、今回使用するメタデータエントリ＃ｊに設定する（ステップＳ１９１０）。
【０１８５】
つぎに、ストレージ制御装置１０１は、ライト要求データの末尾に、バウンダリ調整値分のパディングデータを付与する（ステップＳ１９１１）。そして、ストレージ制御装置１０１は、パディングデータを付与したライト要求データのライト処理を実行して（ステップＳ１９１２）、本フローチャートによる一連の処理を終了する。
【０１８６】
図２０のフローチャートにおいて、まず、ストレージ制御装置１０１は、ライト要求範囲を、ライト要求範囲を含む使用中のメタデータエントリが管理する範囲の境界で分割する（ステップＳ２００１）。そして、ストレージ制御装置１０１は、ライト要求範囲から分割された分割範囲のうちの未選択の分割範囲を選択する（ステップＳ２００２）。
【０１８７】
つぎに、ストレージ制御装置１０１は、選択した分割範囲が、ライト要求範囲を含む使用中のメタデータエントリが管理する範囲に含まれるか否かを判断する（ステップＳ２００３）。
【０１８８】
ここで、使用中のメタデータエントリが管理する範囲に含まれる場合（ステップＳ２００３：Ｙｅｓ）、ストレージ制御装置１０１は、今回の上書き範囲が、前回の上書き範囲と同じであるか否かを判断する（ステップＳ２００４）。なお、前回の上書き範囲は、使用中のメタデータエントリの境界不一致前後エントリフラグおよび境界不一致ＢＣから特定される。
【０１８９】
ここで、前回の上書き範囲と同じ場合（ステップＳ２００４：Ｙｅｓ）、ストレージ制御装置１０１は、使用中のメタデータエントリの境界不一致回数をインクリメントし（ステップＳ２００５）、ステップＳ２００７に移行する。一方、前回の上書き範囲と異なる場合（ステップＳ２００４：Ｎｏ）、ストレージ制御装置１０１は、今回の上書き範囲に基づいて、使用中のメタデータエントリの境界不一致前後エントリフラグおよび境界不一致ＢＣを更新する（ステップＳ２００６）。
【０１９０】
そして、ストレージ制御装置１０１は、ライト要求範囲から分割された分割範囲のうち選択されていない未選択の分割範囲があるか否かを判断する（ステップＳ２００７）。ここで、未選択の分割範囲がある場合（ステップＳ２００７：Ｙｅｓ）、ストレージ制御装置１０１は、ステップＳ２００２に戻る。
【０１９１】
一方、未選択の分割範囲がない場合（ステップＳ２００７：Ｎｏ）、ストレージ制御装置１０１は、ライト要求データのライト処理を実行して（ステップＳ２００８）、本フローチャートによる一連の処理を終了する。
【０１９２】
また、ステップＳ２００３において、使用中のメタデータエントリが管理する範囲に含まれない場合（ステップＳ２００３：Ｎｏ）、ストレージ制御装置１０１は、選択した分割範囲について、新規メタデータエントリを決定して各パラメータを設定し（ステップＳ２００９）、ステップＳ２００７に移行する。なお、ステップＳ２００９の具体的な処理内容は、例えば、図１９に示したステップＳ１９０１〜Ｓ１９１０と同様のため説明を省略する。
【０１９３】
これにより、ライト要求データのサイズに応じて１ディスクへの書込量を変えることで、ライトペナルティを発生させないように、ライト要求データの書き込みを行うことができる。また、各ディスク（ＨＤＤ１〜ＨＤＤ６）に分散して書き込んだデータへのアクセスを制御するための管理用のメタデータエントリをディスク上に格納することができる。
【０１９４】
＜読込処理手順＞
つぎに、ストレージ制御装置１０１の読込処理手順について説明する。
【０１９５】
図２１は、ストレージ制御装置１０１の読込処理手順の一例を示すフローチャートである。図２１のフローチャートにおいて、まず、ストレージ制御装置１０１は、ホスト装置２０１からのリード要求を受け付けたか否かを判断する（ステップＳ２１０１）。ここで、ストレージ制御装置１０１は、リード要求を受け付けるのを待つ（ステップＳ２１０１：Ｎｏ）。
【０１９６】
そして、ストレージ制御装置１０１は、リード要求を受け付けた場合（ステップＳ２１０１：Ｙｅｓ）、リード要求のリード要求範囲に基づいて、ＲＡＩＤグループ２２０のアドレスユニット＃０〜＃２から、今回使用するアドレスユニット＃ｉを特定する（ステップＳ２１０２）。
【０１９７】
つぎに、ストレージ制御装置１０１は、今回使用するアドレスユニット＃ｉ内のメタデータエントリ群がキャッシュミスしたか否かを判断する（ステップＳ２１０３）。ここで、メタデータエントリ群がキャッシュヒットした場合（ステップＳ２１０３：Ｎｏ）、ストレージ制御装置１０１は、ステップＳ２１０５に移行する。
【０１９８】
一方、メタデータエントリ群がキャッシュミスした場合（ステップＳ２１０３：Ｙｅｓ）、ストレージ制御装置１０１は、今回使用するアドレスユニット＃ｉ内のメタデータエントリ群を、ディスク（ＨＤＤ１〜ＨＤＤ６）から読み出す（ステップＳ２１０４）。
【０１９９】
そして、ストレージ制御装置１０１は、今回使用するアドレスユニット＃ｉ内のメタデータエントリ群から、リード要求範囲を含む使用中のメタデータエントリを検索する（ステップＳ２１０５）。そして、ストレージ制御装置１０１は、リード要求範囲を、リード要求範囲を含む使用中のメタデータエントリが管理する範囲の境界で分割する（ステップＳ２１０６）。
【０２００】
つぎに、ストレージ制御装置１０１は、リード要求範囲から分割された分割範囲のうちの未選択の分割範囲を選択する（ステップＳ２１０７）。そして、ストレージ制御装置１０１は、選択した分割範囲が、リード要求範囲を含む使用中のメタデータエントリが管理する範囲に含まれるか否かを判断する（ステップＳ２１０８）。
【０２０１】
ここで、使用中のメタデータエントリが管理する範囲に含まれる場合（ステップＳ２１０８：Ｙｅｓ）、ストレージ制御装置１０１は、選択した分割範囲をリード範囲として設定し（ステップＳ２１０９）、ステップＳ２１１１に移行する。一方、使用中のメタデータエントリが管理する範囲に含まれない場合（ステップＳ２１０８：Ｎｏ）、ストレージ制御装置１０１は、選択した分割範囲をゼロデータ領域（データ未格納領域）として設定する（ステップＳ２１１０）。
【０２０２】
そして、ストレージ制御装置１０１は、リード要求範囲から分割された分割範囲のうち選択されていない未選択の分割範囲があるか否かを判断する（ステップＳ２１１１）。ここで、未選択の分割範囲がある場合（ステップＳ２１１１：Ｙｅｓ）、ストレージ制御装置１０１は、ステップＳ２１０７に戻る。
【０２０３】
一方、未選択の分割範囲がない場合（ステップＳ２１１１：Ｎｏ）、ストレージ制御装置１０１は、リード要求データのリード処理を実行して（ステップＳ２１１２）、本フローチャートによる一連の処理を終了する。具体的には、例えば、ストレージ制御装置１０１は、設定したリード範囲をリードし、ゼロデータ領域については０データを用意して応答する。
【０２０４】
これにより、ライト要求データのサイズに応じて変化するストライプサイズで書き込まれたデータに対して適切にアクセスして、リード要求データを読み込むことができる。
【０２０５】
＜ストライプデプス再調整処理手順＞
つぎに、ストレージ制御装置１０１のストライプデプス再調整処理手順について説明する。
【０２０６】
図２２は、ストレージ制御装置１０１のストライプデプス再調整処理手順の一例を示すフローチャートである。図２２のフローチャートにおいて、まず、ストレージ制御装置１０１は、タイマを起動する（ステップＳ２２０１）。
【０２０７】
そして、ストレージ制御装置１０１は、タイマを起動してから規定時間が経過してタイムアウトしたか否かを判断する（ステップＳ２２０２）。なお、規定時間は、任意に設定可能であり、例えば、数時間〜数日程度の時間が設定される。ここで、ストレージ制御装置１０１は、タイムアウトするのを待つ（ステップＳ２２０２：Ｎｏ）。
【０２０８】
そして、ストレージ制御装置１０１は、タイムアウトした場合（ステップＳ２２０２：Ｙｅｓ）、アドレスユニット＃０〜＃２内のメタデータエントリ群＃１〜＃７６８の先頭から未選択のメタデータエントリ＃ｊを選択する（ステップＳ２２０３）。そして、ストレージ制御装置１０１は、選択したメタデータエントリ＃ｊの境界不一致回数が規定値以上であるか否かを判断する（ステップＳ２２０４）。
【０２０９】
ここで、境界不一致回数が規定値未満の場合（ステップＳ２２０４：Ｎｏ）、ストレージ制御装置１０１は、ステップＳ２２１０に移行する。一方、境界不一致回数が規定値以上の場合（ステップＳ２２０４：Ｙｅｓ）、ストレージ制御装置１０１は、メタデータエントリ＃ｊの境界不一致前後エントリフラグを参照して、連結対象となるメタデータエントリを特定する（ステップＳ２２０５）。
【０２１０】
つぎに、ストレージ制御装置１０１は、連結対象となるメタデータエントリが管理する範囲を読み込む（ステップＳ２２０６）。そして、ストレージ制御装置１０１は、連結対象となるメタデータエントリの境界不一致ＢＣに従って、ライトチャンクを再設定する（ステップＳ２２０７）。
【０２１１】
つぎに、ストレージ制御装置１０１は、再設定したライトチャンクに応じて、連結対象となるメタデータエントリを初期化して、メタデータエントリを再設定する（ステップＳ２２０８）。なお、メタデータエントリを再設定する具体的な処理内容は、例えば、図１９に示したステップＳ１９０１〜Ｓ１９１０と同様のため説明を省略する。
【０２１２】
そして、ストレージ制御装置１０１は、再設定したメタデータエントリに従って、再設定したライトチャンクについてライト処理を実行する（ステップＳ２２０９）。つぎに、ストレージ制御装置１０１は、メタデータエントリ群＃１〜＃７６８から選択されていない未選択のメタデータエントリがあるか否かを判断する（ステップＳ２２１０）。
【０２１３】
ここで、未選択のメタデータエントリがある場合（ステップＳ２２１０：Ｙｅｓ）、ストレージ制御装置１０１は、ステップＳ２２０３に戻る。一方、未選択のメタデータエントリがない場合（ステップＳ２２１０：Ｎｏ）、ストレージ制御装置１０１は、本フローチャートによる一連の処理を終了する。
【０２１４】
これにより、使用中のメタデータエントリが管理する範囲と境界が一致しないライト要求範囲への上書きが頻繁に発生した際に、新規ライト要求データのサイズに合わせて、ストライプサイズを動的に変更することができる。
【０２１５】
なお、ステップＳ２２０５において、連結対象となるメタデータエントリを特定できなかった場合は、ストレージ制御装置１０１は、ステップＳ２２０６〜Ｓ２２０９の処理をスキップする。また、ステップＳ２２１０において、未選択のメタデータエントリがない場合（ステップＳ２２１０：Ｎｏ）、ストレージ制御装置１０１は、ステップＳ２２０１に戻って、本フローチャートによる一連の処理を繰り返すことにしてもよい。
【０２１６】
以上説明したように、実施の形態にかかるストレージ制御装置１０１によれば、ＲＡＩＤグループ２２０上のボリュームに対するライト要求に応じて、ライト要求サイズとデータディスク数とに基づいて、バウンダリ調整値とストライプデプスとを算出することができる。また、ストレージ制御装置１０１によれば、算出したバウンダリ調整値とストライプデプスとに基づいて、ライト要求データの書き込みを行うことができる。
【０２１７】
これにより、ライト要求されたデータ（ライト要求データ）をストライプ単位で管理することができ、ライトペナルティを削減してシーケンシャルＩ／Ｏの書込性能を向上させることができる。
【０２１８】
また、ストレージ制御装置１０１によれば、ライト要求範囲に基づいて、ＲＡＩＤグループ２２０のアドレスユニット＃０〜＃２から、今回使用するアドレスユニット＃ｉを特定することができる。さらに、ストレージ制御装置１０１によれば、今回使用するアドレスユニット＃ｉ内のメタデータエントリ群から、今回使用するメタデータエントリ＃ｊを決定することができる。そして、ストレージ制御装置１０１によれば、算出したストライプデプスとともに、開始物理アドレス、開始論理アドレスおよびブロック数を、今回使用するメタデータエントリ＃ｊに設定することができる。
【０２１９】
これにより、各ディスク（ＨＤＤ１〜ＨＤＤ６）に分散して書き込んだデータへのアクセスを制御するための管理用のメタデータエントリをディスク上に格納することができる。この際、ユーザデータの近傍に、当該ユーザデータを管理するためのメタデータエントリを配置することができる。
【０２２０】
また、管理用のメタデータエントリをディスク上に配置することで、大規模なメモリ容量を必要としない。また、シーケンシャルＩ／Ｏの場合、連続した近傍アドレスへのＩ／Ｏ要求がなされる。このため、アドレスユニットごとの管理用のメタデータエントリ群を１度読み込んで、近傍アドレスへのＩ／Ｏ要求完了までメモリ２１２上に展開しておくことで、管理用のメタデータエントリへのアクセスのためのオーバーヘッドを回避することができる。さらに、ユーザデータの近傍に管理用のメタデータエントリを配置することで、管理用のメタデータエントリへのアクセスの際のディスクシークを低減することができる。
【０２２１】
また、ストレージ制御装置１０１によれば、ＲＡＩＤグループ２２０上のボリュームに対するリード要求に応じて、リード要求範囲に基づいて、メタデータエントリ群から今回使用するメタデータエントリ＃ｊを決定することができる。そして、ストレージ制御装置１０１によれば、決定したメタデータエントリ＃ｊに基づいて、リード要求データの読み込みを行うことができる。これにより、ライト要求データのサイズに応じて変化するストライプサイズで書き込まれたデータに対して適切にアクセスすることができる。
【０２２２】
また、ストレージ制御装置１０１によれば、ライト要求範囲の少なくとも一部を含む他のライト要求範囲のライト要求を受け付けたことに応じて、当該他のライト要求範囲のライト要求を受け付けた回数を示す境界不一致情報をメタデータエントリに設定することができる。具体的には、例えば、ストレージ制御装置１０１によれば、ライト要求範囲を含む使用中の各メタデータエントリが管理する範囲に従って、今回のライト要求範囲を分割し、使用中の各メタデータエントリに境界不一致回数、境界不一致前後エントリフラグおよび境界不一致ＢＣを設定することができる。
【０２２３】
これにより、ライトチャンクへの上書き時に境界不一致となった回数を計数することができ、使用中のメタデータエントリが管理する範囲と境界が一致しないライト要求範囲へのライト要求が発生した回数を特定することができる。
【０２２４】
また、ストレージ制御装置１０１によれば、使用中のメタデータエントリの境界不一致回数規定値以上となった場合に、新規ライト要求データのサイズ（上書き範囲Ｘ）に合致するように、バウンダリ調整値とストライプデプスとを再計算することができる。これにより、使用中のメタデータエントリが管理する範囲と境界が一致しないライト要求範囲への上書きが頻繁に発生した際に、新規ライト要求データのサイズに合わせて、ストライプサイズを動的に変更することができる。
【０２２５】
なお、本実施の形態で説明した制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【０２２６】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０２２７】
（付記１）ＲＡＩＤ構成のストレージ装置上のボリュームに対する書込要求に応じて、書込対象データのサイズとデータストレージ数とに基づいて、前記書込対象データを各データストレージに分散して書き込む際のストライプデプスとパディングデータのサイズとを算出し、
算出した前記ストライプデプスと前記パディングデータのサイズとに基づいて、前記書込対象データの書き込みを行う、
制御部を有することを特徴とするストレージ制御装置。
【０２２８】
（付記２）前記制御部は、
前記書込対象データの書込要求範囲に基づいて、前記ストレージ装置の記憶領域を規定サイズで区切って分割した各領域に配置される管理用のメタデータ群から使用するメタデータを決定し、決定した前記メタデータに、前記書込要求範囲の情報と前記ストライプデプスとを設定する、
ことを特徴とする付記１に記載のストレージ制御装置。
【０２２９】
（付記３）前記制御部は、
前記書込要求範囲の少なくとも一部を含む他の書込要求範囲の書込要求を受け付けたことに応じて、前記他の書込要求範囲の書込要求を受け付けた回数を示す境界不一致情報を前記メタデータに設定することを特徴とする付記２に記載のストレージ制御装置。
【０２３０】
（付記４）前記制御部は、
前記境界不一致情報が示す回数が規定値以上となった場合、前記メタデータを初期化し、前記他の書込要求範囲に書込済みのデータを書込対象データとして、当該書込対象データを各データストレージに分散して書き込む際のストライプデプスとパディングデータのサイズとを算出することを特徴とする付記３に記載のストレージ制御装置。
【０２３１】
（付記５）前記制御部は、
さらに、前記書込要求範囲のうち前記一部以外の範囲に書込済みのデータを書込対象データとして、当該書込対象データを各データストレージに分散して書き込む際のストライプデプスとパディングデータのサイズとを算出することを特徴とする付記４に記載のストレージ制御装置。
【０２３２】
（付記６）前記制御部は、
前記ボリュームに対する読込要求を受け付けたことに応じて、読込対象データの読込要求範囲に基づいて、前記メタデータ群から使用するメタデータを決定し、決定した前記メタデータに基づいて、前記読込対象データの読み込みを行う、
ことを特徴とする付記２〜５のいずれか一つに記載のストレージ制御装置。
【０２３３】
（付記７）コンピュータが、
ＲＡＩＤ構成のストレージ装置上のボリュームに対する書込要求を受け付け、
受け付けた前記書込要求に応じて、書込対象データのサイズとデータストレージ数とに基づいて、前記書込対象データを各データストレージに分散して書き込む際のストライプデプスとパディングデータのサイズとを算出し、
算出した前記ストライプデプスと前記パディングデータのサイズとに基づいて、前記書込対象データの書き込みを行う、
処理を実行することを特徴とする制御方法。
【０２３４】
（付記８）コンピュータに、
ＲＡＩＤ構成のストレージ装置上のボリュームに対する書込要求を受け付け、
受け付けた前記書込要求に応じて、書込対象データのサイズとデータストレージ数とに基づいて、前記書込対象データを各データストレージに分散して書き込む際のストライプデプスとパディングデータのサイズとを算出し、
算出した前記ストライプデプスと前記パディングデータのサイズとに基づいて、前記書込対象データの書き込みを行う、
処理を実行させることを特徴とする制御プログラム。
【符号の説明】
【０２３５】
１００，２００  ストレージシステム
１０１  ストレージ制御装置
２０１  ホスト装置
２２０  ＲＡＩＤグループ
３０１  メタデータエントリ領域
３０２  ユーザデータ領域
５０１  受付部
５０２  特定部
５０３  判断部
５０４  決定部
５０５  算出部
５０６  設定部
５０７  書込部
５０８  読込部
Ｓ１〜Ｓ４  ストレージ装置
＃０〜＃２，＃ｉ  アドレスユニット
＃１〜＃７６８，＃ｊ  メタデータエントリ
【図１】
0006477025.tif 000002
【図２】
0006477025.tif 000003
【図３】
0006477025.tif 000004
【図４】
0006477025.tif 000005
【図５】
0006477025.tif 000006
【図６】
0006477025.tif 000007
【図７】
0006477025.tif 000008
【図８】
0006477025.tif 000009
【図９】
0006477025.tif 000010
【図１０】
0006477025.tif 000011
【図１１】
0006477025.tif 000012
【図１２】
0006477025.tif 000013
【図１３】
0006477025.tif 000014
【図１４】
0006477025.tif 000015
【図１５】
0006477025.tif 000016
【図１６】
0006477025.tif 000017
【図１７】
0006477025.tif 000018
【図１８】
0006477025.tif 000019
【図１９】
0006477025.tif 000020
【図２０】
0006477025.tif 000021
【図２１】
0006477025.tif 000022
【図２２】
0006477025.tif 000023