(57)【要約】【課題】データセットにおける読み出せなくなった二つの要素をリストアすることと、消費記憶容量を節約することとの両方を可能にする。【解決手段】複数の記憶装置で構成されたストレージグループが、複数のストレージサブグループで構成され、各ストレージサブグループが、二以上の記憶装置で構成される。各ストレージサブグループの記憶領域であるサブグループ記憶領域が、複数のサブ記憶領域列で構成される。データ単位を構成する複数のデータ要素と、そのデータ単位を基に生成された第二の冗長コードとで構成されるデータセットを、サブ記憶領域列に書込み、二以上のストレージサブグループにおける二以上のデータ単位に基づいてそれぞれ生成された二以上の第一の冗長コードを基に圧縮冗長コードを生成し、その圧縮冗長コードを、上記二以上のストレージサブグループとは異なる不揮発性の記憶領域に書込む。【選択図】図１６
2009187139.tif 000002
【特許請求の範囲】
【請求項１】
複数の記憶装置で構成されたストレージグループと、
前記ストレージグループに対する書込みを制御する書込み制御部と、
を備え、
前記ストレージグループが、複数のストレージサブグループで構成されており、
各ストレージサブグループが、前記複数の記憶装置のうちの二以上の記憶装置で構成されており、
前記複数のストレージサブグループは、複数の第一種のストレージサブグループと、複数の第二種のストレージサブグループとで構成され、
各第二種のストレージサブグループを構成する二以上の記憶装置は、前記複数の第一種のストレージサブグループのそれぞれの構成要素となっている記憶装置であり、故に、前記ストレージグループを構成する各記憶装置は、複数の第一種のストレージサブグループのいずれかと、複数の第二種のストレージサブグループのいずれかとの両方の構成要素となっており、
前記各第一種のストレージサブグループの各記憶領域である各第一種のサブグループ記憶領域が、複数の第一種のサブ記憶領域列で構成されており、
前記第一種のサブ記憶領域列は、前記第一種のストレージサブグループを構成する前記二以上の記憶装置に跨り、それら二以上の記憶装置に対応する二以上の第一種のサブ記憶領域で構成され、
前記各第二種のストレージサブグループの各記憶領域である各第二種のサブグループ記憶領域が、複数の第二種のサブ記憶領域列で構成されており、
前記第二種のサブ記憶領域列は、前記第二種のストレージサブグループを構成する前記二以上の記憶装置に跨り、それら二以上の記憶装置に対応する二以上の第二種のサブ記憶領域で構成されている、
ストレージシステム。
【請求項２】
所定サイズのデータであり複数の要素から成るデータ単位として、第一種のデータ単位と、第二種のデータ単位とがあり、
前記第一種のデータ単位は、複数のデータ要素で構成され、
前記第二種のデータ単位は、複数の第一種のデータ単位のそれぞれの一データ要素で構成され、
前記書込み制御部が、
（Ｗ１）前記第一種のデータ単位を構成する複数のデータ要素と、前記複数のデータ要素を基に生成される第一の冗長コードとを含んだデータセットを、前記第一種のサブ記憶領域列に書込み、
（Ｗ２）第二種のサブ記憶領域列に存在する前記第二種のデータ単位を基に生成される第二の冗長コードを、その第二種のサブ記憶領域列における空きの第二種のサブ記憶領域に書込む、
請求項１記載のストレージシステム。
【請求項３】
前記ストレージグループへのリストアを制御するリストア制御部を更に備え、
前記ストレージグループに、読出し不可能な第一及び第二の要素を含んだデータセットである多重障害データセットが存在する場合、前記リストア制御部が、
（Ｒ１）前記第一の要素を含んだ第二のデータ単位における、前記第一の要素以外のデータ要素と、その第二のデータ単位を基に生成された第二の冗長コードとに基づいて、前記第一の要素をリストアし、
（Ｒ２）前記第二の要素を含んだ第二のデータ単位における、前記第二の要素以外のデータ要素と、その第二のデータ単位を基に生成された第二の冗長コードとに基づいて、又は、リストアされた第一の要素と、前記データセットにおける前記第一の要素以外の要素とに基づいて、前記第二の要素をリストアし、
前記第一及び第二の要素は、二つの前記データ要素、又は一つの前記データ要素と前記第一の冗長コードである、
請求項２記載のストレージシステム。
【請求項４】
前記各第二種のストレージサブグループが、ＲＡＩＤ４に対応したＲＡＩＤグループである、
請求項１乃至３のうちのいずれか１項に記載のストレージシステム。
【請求項５】
前記各第二種のストレージサブグループが、ＲＡＩＤ５に対応したＲＡＩＤグループである、
請求項１乃至３のうちのいずれか１項に記載のストレージシステム。
【請求項６】
前記各第一種のストレージサブグループが、ＲＡＩＤ５に対応したＲＡＩＤグループである、
請求項４又は５記載のストレージシステム。
【請求項７】
前記書込み制御部が、或る第一のデータ単位におけるデータ要素やそれに伴って前記或る第一のデータ単位に対応した第一の冗長コードが更新されたタイミングと非同期で、更新されたデータ要素を含んだ第二のデータ単位に対応する第二の冗長コード、及び／又は、更新された第一の冗長コードを含んだ第二のデータ単位に対応する第二の冗長コードを更新する、
請求項２乃至６のうちのいずれか１項に記載のストレージシステム。
【請求項８】
Ｋ番目の第一種のストレージサブグループ内のＰ番目の第一種のサブ記憶領域列を構成する二以上の第一種のサブ記憶領域にそれぞれ対応した二以上の論理的なアドレスと、Ｋ＋１番目の第一種のストレージサブグループ内のＰ番目の第一種のサブ記憶領域列を構成する二以上の第一種のサブ記憶領域にそれぞれ対応した二以上の論理的なアドレスとが連続している（Ｋ及びＰは０以上の整数）、
請求項４乃至７のうちのいずれか１項に記載のストレージシステム。
【請求項９】
複数の記憶装置で構成されたストレージグループに対する記憶制御の方法であって、
前記ストレージグループが、複数のストレージサブグループで構成されており、
各ストレージサブグループが、前記複数の記憶装置のうちの二以上の記憶装置で構成されており、
前記複数のストレージサブグループは、複数の第一種のストレージサブグループと、複数の第二種のストレージサブグループとで構成され、
各第二種のストレージサブグループを構成する二以上の記憶装置は、前記複数の第一種のストレージサブグループのそれぞれの構成要素となっている記憶装置であり、故に、前記ストレージグループを構成する各記憶装置は、複数の第一種のストレージサブグループのいずれかと、複数の第二種のストレージサブグループのいずれかとの両方の構成要素となっており、
前記各第一種のストレージサブグループの各記憶領域である各第一種のサブグループ記憶領域が、複数の第一種のサブ記憶領域列で構成されており、
前記第一種のサブ記憶領域列は、前記第一種のストレージサブグループを構成する前記二以上の記憶装置に跨り、それら二以上の記憶装置に対応する二以上の第一種のサブ記憶領域で構成され、
前記各第二種のストレージサブグループの各記憶領域である各第二種のサブグループ記憶領域が、複数の第二種のサブ記憶領域列で構成されており、
前記第二種のサブ記憶領域列は、前記第二種のストレージサブグループを構成する前記二以上の記憶装置に跨り、それら二以上の記憶装置に対応する二以上の第二種のサブ記憶領域で構成されており、
所定サイズのデータであり複数の要素から成るデータ単位として、第一種のデータ単位と、第二種のデータ単位とがあり、
前記第一種のデータ単位は、複数のデータ要素で構成され、
前記第二種のデータ単位は、複数の第一種のデータ単位のそれぞれの一データ要素で構成され、又は、複数の第一の冗長コードで構成され、
前記記憶制御方法が、
（Ｗ１）前記第一種のデータ単位を構成する複数のデータ要素と、前記複数のデータ要素を基に生成される第一の冗長コードとを含んだデータセットを、前記第一種のサブ記憶領域列に書込み、
（Ｗ２）第二種のサブ記憶領域列に存在する前記第二種のデータ単位を基に生成される第二の冗長コードを、その第二種のサブ記憶領域列における空きの第二種のサブ記憶領域に書込む、
記憶制御方法。
【請求項１０】
複数の記憶装置で構成されたストレージグループに対する記憶制御を実行する制御装置であって、
前記ストレージグループが、複数のストレージサブグループで構成されており、
各ストレージサブグループが、前記複数の記憶装置のうちの二以上の記憶装置で構成されており、
前記複数のストレージサブグループは、複数の第一種のストレージサブグループと、複数の第二種のストレージサブグループとで構成され、
各第二種のストレージサブグループを構成する二以上の記憶装置は、前記複数の第一種のストレージサブグループのそれぞれの構成要素となっている記憶装置であり、故に、前記ストレージグループを構成する各記憶装置は、複数の第一種のストレージサブグループのいずれかと、複数の第二種のストレージサブグループのいずれかとの両方の構成要素となっており、
前記各第一種のストレージサブグループの各記憶領域である各第一種のサブグループ記憶領域が、複数の第一種のサブ記憶領域列で構成されており、
前記第一種のサブ記憶領域列は、前記第一種のストレージサブグループを構成する前記二以上の記憶装置に跨り、それら二以上の記憶装置に対応する二以上の第一種のサブ記憶領域で構成され、
前記各第二種のストレージサブグループの各記憶領域である各第二種のサブグループ記憶領域が、複数の第二種のサブ記憶領域列で構成されており、
前記第二種のサブ記憶領域列は、前記第二種のストレージサブグループを構成する前記二以上の記憶装置に跨り、それら二以上の記憶装置に対応する二以上の第二種のサブ記憶領域で構成されており、
所定サイズのデータであり複数の要素から成るデータ単位として、第一種のデータ単位と、第二種のデータ単位とがあり、
前記第一種のデータ単位は、複数のデータ要素で構成され、
前記第二種のデータ単位は、複数の第一種のデータ単位のそれぞれの一データ要素で構成され、又は、複数の第一の冗長コードで構成され、
前記制御装置が、前記ストレージグループに対する書込みを制御する書込み制御部を備え、
前記書込み制御部が、
（Ｗ１）前記第一種のデータ単位を構成する複数のデータ要素と、前記複数のデータ要素を基に生成される第一の冗長コードとを含んだデータセットを、前記第一種のサブ記憶領域列に書込み、
（Ｗ２）第二種のサブ記憶領域列に存在する前記第二種のデータ単位を基に生成される第二の冗長コードを、その第二種のサブ記憶領域列における空きの第二種のサブ記憶領域に書込む、
制御装置。
【請求項１１】
複数の記憶装置で構成されたストレージグループと、
所定サイズのデータであるデータ単位を前記ストレージグループに書込む書込み制御部と
を備え、
前記ストレージグループが、複数のストレージサブグループで構成されており、
各ストレージサブグループが、前記複数の記憶装置のうちの二以上の記憶装置で構成されており、
前記各ストレージサブグループの記憶領域であるサブグループ記憶領域が、複数のサブ記憶領域列で構成されており、
各サブ記憶領域列は、前記二以上の記憶装置に跨り、前記複数の記憶装置に対応する複数のサブ記憶領域で構成され、
前記書込み制御部が、
（Ｗ１）データ単位を構成する複数のデータ要素と、前記データ単位を基に生成された第二の冗長コードとで構成されるデータセットを、サブ記憶領域列に書込み、
（Ｗ２）前記複数のストレージサブグループのうちの二以上のストレージサブグループにおける二以上のデータ単位に基づいてそれぞれ生成された二以上の第一の冗長コードを基に、前記二以上の第一の冗長コードのトータルサイズよりも小さいサイズの一つのコードである圧縮冗長コードを生成し、
（Ｗ３）前記二以上のストレージサブグループとは異なる不揮発性の記憶領域に、前記生成された圧縮冗長コードを書込む、
ストレージシステム。
【請求項１２】
前記ストレージグループに記憶されているデータ単位を構成するデータ要素をリストアするリストア制御部を更に備え、
前記ストレージグループに、読出し不可能な第一及び第二の要素を含んだデータセットである多重障害データセットが存在する場合、前記リストア制御部が、
（Ｒ１）前記圧縮冗長コードを前記不揮発性の記憶領域から読出し、前記読み出された圧縮冗長コードと、前記多重障害データセット以外の一又は複数のデータセットにおける一又は複数のデータ単位を基に生成される、前記圧縮冗長コードの基になった一又は複数の第一の冗長コードとに基づいて、前記多重障害データにおけるデータ単位を基に生成される第一の冗長コードをリストアし、
（Ｒ２）前記リストアされた第一の冗長コードと、前記多重障害データセットにおける前記第一及び第二の要素以外の要素とを基に、前記第一及び第二の要素をリストアし、
前記第一及び第二の要素は、二つの前記データ要素、又は一つの前記データ要素と前記第二の冗長コードである、
請求項１１記載のストレージシステム。
【請求項１３】
前記二以上のストレージサブグループについて、ｋ番目のストレージサブグループにおけるｐ番目のサブ記憶領域列を構成する二以上のサブ記憶領域にそれぞれ対応した二以上の論理的なアドレスと、ｋ＋１番目のストレージサブグループにおけるｐ番目のサブ記憶領域列を構成する二以上のサブ記憶領域にそれぞれ対応した二以上の論理的なアドレスとが連続している（ｋ及びｐは０以上の整数）、
請求項１１又は１２記載のストレージシステム。
【請求項１４】
前記不揮発性の記憶領域は、前記複数のストレージサブグループのうちの前記二以上のストレージサブグループとは異なるストレージサブグループ内のサブ記憶領域である、
請求項１１乃至１３のうちのいずれか１項に記載のストレージシステム。
【請求項１５】
複数の記憶装置で構成されたストレージグループに対する記憶制御の方法であって、
前記ストレージグループが、複数のストレージサブグループで構成されており、
各ストレージサブグループが、前記複数の記憶装置のうちの二以上の記憶装置で構成されており、
前記各ストレージサブグループの記憶領域であるサブグループ記憶領域が、複数のサブ記憶領域列で構成されており、
各サブ記憶領域列は、前記二以上の記憶装置に跨り、前記複数の記憶装置に対応する複数のサブ記憶領域で構成され、
前記記憶制御方法が、
（Ｗ１）データ単位を構成する複数のデータ要素と、前記データ単位を基に生成された第二の冗長コードとで構成されるデータセットを、サブ記憶領域列に書込み、
（Ｗ２）前記複数のストレージサブグループのうちの二以上のストレージサブグループにおける二以上のデータ単位に基づいてそれぞれ生成された二以上の第一の冗長コードを基に、前記二以上の第一の冗長コードのトータルサイズよりも小さいサイズの一つのコードである圧縮冗長コードを生成し、
（Ｗ３）前記二以上のストレージサブグループとは異なる不揮発性の記憶領域に、前記生成された圧縮冗長コードを書込む、
記憶制御方法。
【請求項１６】
複数の記憶装置で構成されたストレージグループに関する記憶制御を実行する制御装置であって、
所定サイズのデータであるデータ単位を前記ストレージグループに書込む書込み制御部を備え、
前記ストレージグループが、複数のストレージサブグループで構成されており、
各ストレージサブグループが、前記複数の記憶装置のうちの二以上の記憶装置で構成されており、
前記各ストレージサブグループの記憶領域であるサブグループ記憶領域が、複数のサブ記憶領域列で構成されており、
各サブ記憶領域列は、前記二以上の記憶装置に跨り、前記複数の記憶装置に対応する複数のサブ記憶領域で構成され、
前記書込み制御部が、
（Ｗ１）データ単位を構成する複数のデータ要素と、前記データ単位を基に生成された第二の冗長コードとで構成されるデータセットを、サブ記憶領域列に書込み、
（Ｗ２）前記複数のストレージサブグループのうちの二以上のストレージサブグループにおける二以上のデータ単位に基づいてそれぞれ生成された二以上の第一の冗長コードを基に、前記二以上の第一の冗長コードのトータルサイズよりも小さいサイズの一つのコードである圧縮冗長コードを生成し、
（Ｗ３）前記二以上のストレージサブグループとは異なる不揮発性の記憶領域に、前記生成された圧縮冗長コードを書込む、
制御装置。
【請求項１７】
複数の記憶装置で構成されたストレージグループと、
所定サイズのデータであるデータ単位とそのデータ単位を基に生成される冗長コードとを前記ストレージグループに書込む書込み制御部と、
前記ストレージグループへのリストアを制御するリストア制御部と
を備え、
前記ストレージグループが、複数のストレージサブグループで構成されており、
各ストレージサブグループが、前記複数の記憶装置のうちの二以上の記憶装置で構成されており、
前記書込み制御部が、データ単位とそのデータ単位を基に生成される冗長コードとを含んだデータセットを或るストレージサブグループに書込んだ場合、そのデータ単位に関わる別種の冗長コードを、そのストレージサブグループとは別のストレージサブグループに書込み、
前記リストア制御部が、読出し不可能な第一及び第二の要素を含んだデータセットである多重障害データセットが前記或るストレージサブグループに存在する場合、前記別のストレージサブグループに存在する前記別種の冗長コードを利用して、前記第一及び第二の要素をリストアする、
ストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムに関する。
【背景技術】
【０００２】
一般に、ＲＡＩＤ（Redundant Arrays of Independent （or Inexpensive） Disks）と呼ばれる技術が採用されているストレージシステムには、複数の記憶装置で構成されたＲＡＩＤグループが備えられている。ＲＡＩＤグループの記憶領域は、複数のサブ記憶領域列で構成されている。各サブ記憶領域列は、ＲＡＩＤグループを構成する複数の記憶装置に跨っており、複数の記憶装置に対応した複数のサブ記憶領域で構成されている。以下、一つのサブ記憶領域を、「ストライプ」と呼び、複数のストライプで構成された一列を、「ストライプ列」と呼ぶ。連続したストライプ列によって、ＲＡＩＤグループの記憶領域が構成されている。
【０００３】
ＲＡＩＤには、いくつかのレベル（以下、「ＲＡＩＤレベル）という）があることが知られている。
【０００４】
例えば、ＲＡＩＤ５がある。ＲＡＩＤ５では、データが、ＲＡＩＤ５に対応したＲＡＩＤグループを構成する複数の記憶装置（例えば、ハードディスクドライブ（ＨＤＤ））に分散して書き込まれる。具体的には、例えば、ＲＡＩＤ５に対応したホストコンピュータから指定されたライト対象のデータは、所定サイズのデータ（以下、便宜上「データ単位」と言う）に分割されて、各データ単位が、複数のデータ要素に分割され、複数のデータ要素が、複数のストライプに書き込まれる。また、ＲＡＩＤ５では、記憶装置に障害が発生したことによりその記憶装置から読み出せなくなったデータ要素をリストアするために、一つのデータ単位につき、“パリティ”と呼ばれる冗長な情報（以下、「冗長コード」）が生成され、その冗長コードも、ストライプに書き込まれる。具体的には、例えば、ＲＡＩＤグループを構成する記憶装置の数が４である場合は、そのうちの３つの記憶装置に対応する３つのストライプに、データ単位を構成する３つのデータ要素が書き込まれ、残りの一つの記憶装置に対応するストライプに、冗長コードが書き込まれる。もし、ＲＡＩＤグループを構成する４つの記憶装置のうちの一つの記憶装置に障害が発生した場合、読み出せなくなったデータ要素は、その読み出せなくなったデータ要素を含んだデータ単位を構成する残りの二つのデータ要素と、そのデータ単位に対応した冗長コードとを用いてリストアされる。
【０００５】
ＲＡＩＤ５の問題点としては、いわゆる二重障害に耐えられない点である。具体的には、ＲＡＩＤグループを構成する複数の記憶装置のうちの二つの記憶装置に障害が発生した等の理由により、データ単位と冗長コードとで構成されたデータセットにおける二つの要素（二つのデータ要素、又は、一つのデータ要素と冗長コード）を読み出すことができない場合は、それら二つの要素をリストアすることはできない。なぜなら、データ単位ごとに生成される冗長コードの数は、１であるからである。
【０００６】
このような二重障害に耐えられるＲＡＩＤレベルとして、ＲＡＩＤ６がある。ＲＡＩＤ６では、一つのストライプ列ごとに二つの（２種類の）冗長コードが生成される（非特許文献１）。
【０００７】
【非特許文献１】Intelligent RAID6 Theory Overview and Implementation ((http://www.intel.com/design/storage/papers/308122.htm,http://www.intel.com/design/storage/intelligent_raid.htm)
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、ＲＡＩＤ６には、二重障害に耐えられるというメリットがある一方で、一つのデータ単位につきＲＡＩＤ５よりも多くの記憶容量が必要になってしまうというデメリットがある。なぜなら、一つのデータ単位につきＲＡＩＤ５よりも多くの冗長コードが書き込まれるためである。
【０００９】
そこで、本発明の目的は、一つのデータセットにおける読み出せなくなった二つの要素をリストア可能にすることと、消費記憶容量を節約することとの両方を可能にすることにある。
【課題を解決するための手段】
【００１０】
第一の観点では、複数の記憶装置で構成されたストレージグループが、複数のストレージサブグループで構成され、各ストレージサブグループが、複数の記憶装置のうちの二以上の記憶装置で構成される。複数のストレージサブグループは、複数の第一種のストレージサブグループと、複数の第二種のストレージサブグループとで構成される。各第二種のストレージサブグループを構成する二以上の記憶装置は、複数の第一種のストレージサブグループのそれぞれの構成要素となっている記憶装置であり、故に、ストレージグループを構成する各記憶装置は、複数の第一種のストレージサブグループのいずれかと、複数の第二種のストレージサブグループのいずれかとの両方の構成要素となっている。各第一種のストレージサブグループの各記憶領域である各第一種のサブグループ記憶領域が、複数の第一種のサブ記憶領域列で構成される。第一種のサブ記憶領域列は、第一種のストレージサブグループを構成する二以上の記憶装置に跨り、それら二以上の記憶装置に対応する二以上の第一種のサブ記憶領域で構成される。各第二種のストレージサブグループの各記憶領域である各第二種のサブグループ記憶領域が、複数の第二種のサブ記憶領域列で構成される。第二種のサブ記憶領域列は、第二種のストレージサブグループを構成する二以上の記憶装置に跨り、それら二以上の記憶装置に対応する二以上の第二種のサブ記憶領域で構成される。
【００１１】
第二の観点では、複数の記憶装置で構成されたストレージグループが、複数のストレージサブグループで構成されており、各ストレージサブグループが、複数の記憶装置のうちの二以上の記憶装置で構成される。各ストレージサブグループの記憶領域であるサブグループ記憶領域が、複数のサブ記憶領域列で構成される。各サブ記憶領域列は、前記二以上の記憶装置に跨り、前記複数の記憶装置に対応する複数のサブ記憶領域で構成される。この構成において、データ単位を構成する複数のデータ要素と、前記データ単位を基に生成された第二の冗長コードとで構成されるデータセットを、サブ記憶領域列に書込み、複数のストレージサブグループのうちの二以上のストレージサブグループにおける二以上のデータ単位に基づいてそれぞれ生成された二以上の第一の冗長コードを基に、二以上の第一の冗長コードのトータルサイズよりも小さいサイズの一つのコードである圧縮冗長コードを生成し、その圧縮冗長コードを、上記二以上のストレージサブグループとは異なる不揮発性の記憶領域に書込む。
【００１２】
第三の観点では、複数の記憶装置で構成されたストレージグループを、複数のストレージサブグループで構成する。各ストレージサブグループが、複数の記憶装置のうちの二以上の記憶装置で構成される。データ単位とそのデータ単位を基に生成される冗長コードとを含んだデータセットが或るストレージサブグループに書込まれた場合、そのデータ単位に関わる別種の冗長コードが、そのストレージサブグループとは別のストレージサブグループに書き込まれる。読出し不可能な第一及び第二の要素を含んだデータセットである多重障害データセットが上記或るストレージサブグループに存在する場合、上記別のストレージサブグループに存在する上記別種の冗長コードを利用して、第一及び第二の要素をリストアする。
【発明を実施するための最良の形態】
【００１３】
実施形態１では、ストレージシステムが、複数の記憶装置で構成されたストレージグループと、前記ストレージグループに対する書込みを制御する書込み制御部とを備える。前記ストレージグループが、複数のストレージサブグループで構成されている。各ストレージサブグループが、前記複数の記憶装置のうちの二以上の記憶装置で構成されている。前記複数のストレージサブグループは、複数の第一種のストレージサブグループと、複数の第二種のストレージサブグループとで構成される。各第二種のストレージサブグループを構成する二以上の記憶装置は、前記複数の第一種のストレージサブグループのそれぞれの構成要素となっている記憶装置であり、故に、前記ストレージグループを構成する各記憶装置は、複数の第一種のストレージサブグループのいずれかと、複数の第二種のストレージサブグループのいずれかとの両方の構成要素となっている。前記各第一種のストレージサブグループの各記憶領域である各第一種のサブグループ記憶領域が、複数の第一種のサブ記憶領域列で構成されている。前記第一種のサブ記憶領域列は、前記第一種のストレージサブグループを構成する前記二以上の記憶装置に跨り、それら二以上の記憶装置に対応する二以上の第一種のサブ記憶領域で構成される。前記各第二種のストレージサブグループの各記憶領域である各第二種のサブグループ記憶領域が、複数の第二種のサブ記憶領域列で構成されている。前記第二種のサブ記憶領域列は、前記第二種のストレージサブグループを構成する前記二以上の記憶装置に跨り、それら二以上の記憶装置に対応する二以上の第二種のサブ記憶領域で構成されている。
【００１４】
実施形態１では、例えば、ストレージグループは、後述の全体ＲＡＩＤグループであり、第一種のストレージサブグループは、後述の水平ＲＡＩＤグループであり、第一種のサブ記憶領域列は、後述の水平ストライプ列であり、第一の冗長コードは、後述の水平パリティであり、第二種のストレージサブグループは、後述の垂直ＲＡＩＤグループであり、第二種のサブ記憶領域列は、後述の垂直ストライプ列であり、第二の冗長コードは、後述の垂直パリティである。
【００１５】
実施形態２では、実施形態１において、所定サイズのデータであり複数の要素から成るデータ単位として、第一種のデータ単位と、第二種のデータ単位とがある。前記第一種のデータ単位は、複数のデータ要素で構成される。前記第二種のデータ単位は、複数の第一種のデータ単位のそれぞれの一データ要素で構成され、又は、複数の第一の冗長コードで構成される。前記書込み制御部が、
（Ｗ１）前記第一種のデータ単位を構成する複数のデータ要素と、前記複数のデータ要素を基に生成される第一の冗長コードとを含んだデータセットを、前記第一種のサブ記憶領域列に書込み、
（Ｗ２）第二種のサブ記憶領域列に存在する前記第二種のデータ単位を基に生成される第二の冗長コードを、その第二種のサブ記憶領域列における空きの第二種のサブ記憶領域に書込む。
【００１６】
実施形態３では、実施形態２において、前記ストレージグループへのリストアを制御するリストア制御部が更に備えられる。前記ストレージグループに、読出し不可能な第一及び第二の要素を含んだデータセットである多重障害データセットが存在する場合、前記リストア制御部が、
（Ｒ１）前記第一の要素を含んだ第二のデータ単位における、前記第一の要素以外のデータ要素と、その第二のデータ単位を基に生成された第二の冗長コードとに基づいて、前記第一の要素をリストアし、
（Ｒ２）前記第二の要素を含んだ第二のデータ単位における、前記第二の要素以外のデータ要素と、その第二のデータ単位を基に生成された第二の冗長コードとに基づいて、又は、リストアされた第一の要素と、前記データセットにおける前記第一の要素以外の要素とに基づいて、前記第二の要素をリストアする。
【００１７】
前記第一及び第二の要素は、二つの前記データ要素、又は一つの前記データ要素と前記第一の冗長コードである。
【００１８】
実施形態４では、実施形態１乃至３のうちのいずれかにおいて、前記各第二種のストレージサブグループが、ＲＡＩＤ４に対応したＲＡＩＤグループである。
【００１９】
実施形態５では、実施形態１乃至３のうちのいずれかにおいて、前記各第二種のストレージサブグループが、ＲＡＩＤ５に対応したＲＡＩＤグループである。
【００２０】
実施形態６では、実施形態４又は５において、前記各第一種のストレージサブグループが、ＲＡＩＤ５に対応したＲＡＩＤグループである。
【００２１】
実施形態７では、実施形態２乃至６のうちのいずれかにおいて、前記書込み制御部が、或る第一のデータ単位におけるデータ要素やそれに伴って前記或る第一のデータ単位に対応した第一の冗長コードが更新されたタイミングと非同期で、更新されたデータ要素を含んだ第二のデータ単位に対応する第二の冗長コード、及び／又は、更新された第一の冗長コードを含んだ第二のデータ単位に対応する第二の冗長コードを更新する。
【００２２】
実施形態８では、実施形態４乃至７のうちのいずれかにおいて、Ｋ番目の第一種のストレージサブグループ内のＰ番目の第一種のサブ記憶領域列を構成する二以上の第一種のサブ記憶領域にそれぞれ対応した二以上の論理的なアドレスと、Ｋ＋１番目の第一種のストレージサブグループ内のＰ番目の第一種のサブ記憶領域列を構成する二以上の第一種のサブ記憶領域にそれぞれ対応した二以上の論理的なアドレスとが連続している（Ｋ及びＰは０以上の整数）。
【００２３】
実施形態８では、ストレージシステムが、複数の記憶装置で構成されたストレージグループと、所定サイズのデータであるデータ単位を前記ストレージグループに書込む書込み制御部とを備える。前記ストレージグループが、複数のストレージサブグループで構成されている。各ストレージサブグループが、前記複数の記憶装置のうちの二以上の記憶装置で構成されている。前記各ストレージサブグループの記憶領域であるサブグループ記憶領域が、複数のサブ記憶領域列で構成されている。各サブ記憶領域列は、前記二以上の記憶装置に跨り、前記複数の記憶装置に対応する複数のサブ記憶領域で構成されている。前記書込み制御部が、
（Ｗ１）データ単位を構成する複数のデータ要素と、前記データ単位を基に生成された第二の冗長コードとで構成されるデータセットを、サブ記憶領域列に書込み、
（Ｗ２）前記複数のストレージサブグループのうちの二以上のストレージサブグループにおける二以上のデータ単位に基づいてそれぞれ生成された二以上の第一の冗長コードを基に、前記二以上の第一の冗長コードのトータルサイズよりも小さいサイズの一つのコードである圧縮冗長コードを生成し、
（Ｗ３）前記二以上のストレージサブグループとは異なる不揮発性の記憶領域に、前記生成された圧縮冗長コードを書込む。
【００２４】
実施形態８では、例えば、ストレージグループは、後述の全体ＲＡＩＤグループであり、ストレージサブグループは、後述の部分ＲＡＩＤグループであり、第一の冗長コードは、後述のＰパリティであり、第二の冗長コードは、後述のＱパリティである。
【００２５】
実施形態９では、前記ストレージグループに記憶されているデータ単位を構成するデータ要素をリストアするリストア制御部が更に備えられる。前記ストレージグループに、読出し不可能な第一及び第二の要素を含んだデータセットである多重障害データセットが存在する場合、前記リストア制御部が、
（Ｒ１）前記圧縮冗長コードを前記不揮発性の記憶領域から読出し、前記読み出された圧縮冗長コードと、前記多重障害データセット以外の一又は複数のデータセットにおける一又は複数のデータ単位を基に生成される、前記圧縮冗長コードの基になった一又は複数の第一の冗長コードとに基づいて、前記多重障害データにおけるデータ単位を基に生成される第一の冗長コードをリストアし、
（Ｒ２）前記リストアされた第一の冗長コードと、前記多重障害データセットにおける前記第一及び第二の要素以外の要素とを基に、前記第一及び第二の要素をリストアし、
前記第一及び第二の要素は、二つの前記データ要素、又は一つの前記データ要素と前記第二の冗長コードである。
【００２６】
実施形態１０では、実施形態８又は９において、前記二以上のストレージサブグループについて、ｋ番目のストレージサブグループにおけるｐ番目のサブ記憶領域列を構成する二以上のサブ記憶領域にそれぞれ対応した二以上の論理的なアドレスと、ｋ＋１番目のストレージサブグループにおけるｐ番目のサブ記憶領域列を構成する二以上のサブ記憶領域にそれぞれ対応した二以上の論理的なアドレスとが連続している（ｋ及びｐは０以上の整数）。
【００２７】
実施形態１１では、実施形態８乃至１０のうちのいずれかにおいて、前記不揮発性の記憶領域は、前記複数のストレージサブグループのうちの前記二以上のストレージサブグループとは異なるストレージサブグループ内のサブ記憶領域である。
【００２８】
実施形態１２では、ストレージシステムが、複数の記憶装置で構成されたストレージグループと、所定サイズのデータであるデータ単位とそのデータ単位を基に生成される冗長コードとを前記ストレージグループに書込む書込み制御部と、前記ストレージグループへのリストアを制御するリストア制御部とを備える。前記ストレージグループが、複数のストレージサブグループで構成されている。各ストレージサブグループが、前記複数の記憶装置のうちの二以上の記憶装置で構成されている。前記書込み制御部が、データ単位とそのデータ単位を基に生成される冗長コードとを含んだデータセットを或るストレージサブグループに書込んだ場合、そのデータ単位に関わる別種の冗長コードを、そのストレージサブグループとは別のストレージサブグループに書込む。前記リストア制御部が、読出し不可能な第一及び第二の要素を含んだデータセットである多重障害データセットが前記或るストレージサブグループに存在する場合、前記別のストレージサブグループに存在する前記別種の冗長コードを利用して、前記第一及び第二の要素をリストアする。
【００２９】
実施形態１２では、例えば、ストレージグループは、後述の全体ＲＡＩＤグループであり、ストレージサブグループは、後述の水平ＲＡＩＤグループ又は垂直ＲＡＩＤグループであり、サブ記憶領域列は、後述の水平ストライプ列や後述の垂直ストライプ列であってよい。或いは、例えば、ストレージグループは、後述の全体ＲＡＩＤグループであり、ストレージサブグループは、後述の部分ＲＡＩＤグループであり、第一の冗長コードは、後述のＰパリティであってよい。
【００３０】
上述した書込み制御部及びリストア制御部のうちの少なくとも一つは、ハードウェア（例えば回路）、コンピュータプログラム又はそれらの組み合わせ（例えば一部をコンピュータプログラムにより実現し残りをハードウェアで実現すること）により構築することができる。コンピュータプログラムは、所定のプロセッサに読み込まれて実行される。また、コンピュータプログラムがプロセッサに読み込まれて行われる情報処理の際、適宜に、メモリ等のハードウェア資源上に存在する記憶域が使用されてもよい。また、コンピュータプログラムは、ＣＤ−ＲＯＭ等の記録媒体から計算機にインストールされてもよいし、通信ネットワークを介して計算機にダウンロードされてもよい。
【００３１】
以下、図面を参照しながら本発明の一実施形態について詳細に説明する。なお、以下の説明では、冗長コードを生成するために必要となる所定サイズの各データを「データ単位」と言い、データ単位の構成要素であり一ストライプに記憶されるデータを「データ要素」と言う。また、以下の説明では、ストレージグループを「ＲＡＩＤグループ」と呼び、ＲＡＩＤグループを構成する各記憶装置が、ＨＤＤ（ハードディスクドライブ）であるとする。
【００３２】
図１は、本発明の一実施形態に係るストレージシステム１の物理的な構成を示す図である。
【００３３】
一以上のホスト計算機（以下、ホスト）４とストレージシステム１とが、ＦＣ（Fibre Channel）スイッチ５を介して接続される。同図では、ホスト４とストレージシステム１とが、一つのＦＣスイッチ５を介して接続されているが、複数のＦＣスイッチ５を介して接続されてもよい。尚、一以上のＦＣスイッチ５により、ＳＡＮ（Storage Area Network）が構築される。ＦＣスイッチ５とホスト４間、及び、ＦＣスイッチ５とストレージシステム１のホストアダプタ１１間は、それぞれファイバチャネルケーブルにより接続される。ホスト４は、ＦＣスイッチ５を経由して、ストレージシステム１に対してデータのＩ／Ｏ要求（例えば、リード要求やライト要求）を送信することができる。
【００３４】
ストレージシステム１は、例えば、アレイ状に配列された多数のＨＤＤ（ハードディスクドライブ）１６を備えるＲＡＩＤシステムとすることができる。ストレージシステム１は、そのコントローラとして、例えば、ＣＨＡ（チャネルアダプタ）１１と、ＤＫＡ（ディスクアダプタ）１３と、キャッシュ／制御メモリ１４と、内部スイッチ１５とを備える。ストレージシステム１のコントローラによって、ＨＤＤ１６へのアクセスが制御される。尚、例えば、ＣＨＡ１１やＤＫＡ１３や内部スイッチ１５の機能がＦＣスイッチ５に搭載され、ＦＣスイッチ５と複数のＨＤＤ１６の組み合わせによりストレージシステム１が実現されてもよい。
【００３５】
ＣＨＡ１１は、外部の装置（例えば、ホスト或いは他のストレージシステム）と通信可能に接続される一又は複数のＩ／Ｆ（例えば、通信ポート或いは通信ポートを備えた通信制御回路）１１３を有し、外部の装置との間のデータ通信を行うものである。ＣＨＡ１１は、ＣＰＵ１１１やメモリ１１２等を備えたマイクロコンピュータシステム（例えば、回路基盤）として構成されている。ＣＨＡ１１は、例えば、ホスト４からのライト要求があった場合、ライト対象のデータをキャッシュ／制御メモリ１４のキャッシュ領域に書込む。また、ＣＨＡ１１は、ホスト４からのリード要求があった場合、ＤＫＡ１３がＨＤＤ１６から読み出してキャッシュ／制御メモリ１４のキャッシュ領域に書き込んだリード対象のデータをホスト４に送信する。
【００３６】
ＤＫＡ１３は、各ＨＤＤ１６と通信可能に接続される一又は複数のドライブＩ／Ｆ（例えば、通信ポート或いは通信ポートを備えた通信制御回路）１３３を有し、ＨＤＤ１６との間のデータ通信を行うものである。ＤＫＡ１３は、ＣＰＵ１３１やメモリ１３２等を備えたマイクロコンピュータシステム（例えば、回路基盤）として構成されている。ＤＫＡ１３は、例えば、ＣＨＡ１１からキャッシュ／制御メモリ１４のキャッシュ領域に書かれたライト対象のデータをＨＤＤ１６に書込んだり、ＨＤＤ１６から読み出したリード対象のデータをキャッシュ領域に書込んだりする。
【００３７】
また、ＤＫＡ１３は、ＨＤＤに障害が発生した際にその障害により読み出せなくなったデータ要素をリストアするための冗長コード（以下、パリティ）を生成するパリティ生成部１３４を備える。本実施形態では、パリティ生成部１３４は、パリティを生成するためのハードウェア回路であるが、コンピュータプログラムに組み込まれた機能であっても良い。パリティ生成部１３４は、例えば、データ単位を構成する複数のデータ要素の排他的論理和をとることによって（或いは、データ単位を構成する複数のデータ要素に所定の係数を掛けた後でそれぞれのデータの排他的論理和をとることによって）、パリティを生成する。また、パリティ生成部１３４は、複数のパリティを基づく一つのパリティ（以下、「圧縮パリティ」と呼ぶ）を生成することができる。本実施形態では、後述するように、書込み先のＶＤＥＶ（ＶＤＥＶについては後述する）が第一乃至第四のデータ保護方式のうちのいずれのデータ保護方式で保護されるかによって、パリティの生成の仕方も異なる。第一のデータ保護方式では、ＨＤＤごとに、一つの圧縮パリティが生成される。具体的には、ＨＤＤごとに、ＨＤＤを構成する複数のストライプに記憶されている複数のデータ要素及び複数の第一のパリティ（以下、Ｐパリティ）を基に、一つの圧縮パリティが生成される。第四のデータ保護方式では、複数のデータ単位に対応した複数のＰパリティを基に一つの圧縮パリティが生成される。
【００３８】
キャッシュ／制御メモリ１４は、例えば、揮発性又は不揮発性のメモリである。キャッシュ／制御メモリ１４は、キャッシュ領域と制御領域とを有したメモリである。キャッシュ／制御メモリ１４は、キャッシュ領域を有したメモリと制御領域を有したメモリとの二つのメモリから構成されてもよい。キャッシュ領域には、外部の装置（ホスト４等）から受信したデータや、ＨＤＤ１６から読み出されたデータが一時的に格納される。制御領域には、ストレージシステム１の制御に関する情報（以下、制御情報）が格納される。制御情報としては、例えば、後述する各種テーブルがある。
【００３９】
内部スイッチ１５は、例えばクロスバスイッチであり、ＣＨＡ１１、ＤＫＡ１３、キャッシュ／制御メモリ１４を相互に接続させる装置である。内部スイッチ１５に代えて、バスなどの他種の接続部が採用されてもよい。
【００４０】
内部スイッチ１５には、例えば管理端末６が接続される。管理端末６は、ストレージシステム１を管理するための計算機である。管理端末６は、例えば、キャッシュ／制御メモリ１４の制御領域に、後述する各種テーブルを格納することができる。尚、管理端末６が行う機能は、ホスト４に搭載されてもよい。即ち、ホスト４から、後述する各種テーブルを格納してもよい。
【００４１】
以上が、本実施形態に係るストレージシステムの物理的な構成例の説明である。尚、上記の説明は一例であり、このストレージシステムの構成に限定する必要は無い。例えば、コントローラは、もっと簡易な構成、例えば、一つの回路基盤にＣＰＵとメモリを備えた構成（ＣＨＡ１１とＤＫＡ１３の機能が一つの回路基板によって実現される構成）とされてもよい。
【００４２】
図２は、本実施形態に係るストレージシステム１の論理的な構成例を示す図である。
【００４３】
ＣＨＡ１１には、ＣＰＵ１１１に実行されるコンピュータプログラムとして、例えば、コマンド処理部２０１が、例えば、メモリ１１２に記憶される。ＤＫＡ１３には、ＣＰＵ１３１に実行されるコンピュータプログラムとして、例えば、ディスクＩ／Ｏ処理部２０２と、論理物理変換部２０３とが、例えば、メモリ１３２に記憶される。以下、コンピュータプログラムを主語として記述している説明文は、実際にはそのコンピュータプログラムを実行するＣＰＵによって処理が行われることを意味するものとして記述する。
【００４４】
コマンド処理部２０１は、ホスト４から受信したＩ／Ｏ要求を処理する。例えば、Ｉ／Ｏ要求がライト要求の場合、コマンド処理部２０１は、ライト要求に伴うライト対象のデータをキャッシュ領域に書き込む。
【００４５】
論理物理変換部２０３は、論理アドレスを物理アドレスに変換する。論理アドレスとは、例えば、ＬＤＥＶの識別子やそのＬＤＥＶにおけるＬＢＡ（論理ブロックアドレス）である。物理アドレスとは、ＨＤＤ１６内で各ディスクブロックの位置を特定するために用いられるＬＢＡ、あるいは、「シリンダ番号、トラック番号、セクタ番号の組 (CC, HH, SS)」などである。
【００４６】
ディスクＩ／Ｏ処理部２０２は、ＨＤＤ１６に対するデータの入出力を制御する。具体的には、例えば、ディスクＩ／Ｏ処理部２０２は、キャッシュ領域に記憶されているライト対象のデータを、複数のデータ単位に分割し、各データ単位をＲＡＩＤグループに書き込む。その際、ディスクＩ／Ｏ処理部２０２は、論理物理変換部２０３を利用して、アクセス先の論理アドレスを物理アドレスに変換し、物理アドレスを指定したＩ／Ｏ要求をＨＤＤ１６に送信する。それにより、その物理アドレスに対応した記憶領域にデータ要素やパリティを書き込んだり、その物理アドレスに対応した記憶領域からデータ要素をやパリティを読み出したりすることができる。
【００４７】
図３は、複数のＨＤＤ１６と論理ボリュームとの関係性の一例を示す図である。
【００４８】
複数（例えば４台）のＨＤＤ１６−１、１６−２、１６−３及び１６−４により一つのＲＡＩＤグループが構成される。例えば、ＲＡＩＤレベルがＲＡＩＤ５である場合は、同図のように、データ単位を構成する３つのデータ要素が３つのＨＤＤ１６に格納され、それら３つのデータを基に生成されたＰパリティが、他の一つのＨＤＤ１６に格納される。
【００４９】
この１または複数のＲＡＩＤグループにより提供される記憶領域（複数のＨＤＤ１６の記憶領域の集合）を、本実施形態では、Virtual Deviceを略して「ＶＤＥＶ」と呼ぶ。この例では一つのＲＡＩＤグループに対して一つのＶＤＥＶを対応付けている。このＶＤＥＶを区切ることにより得られた各ＶＤＥＶ部分が、本実施形態で言う論理ボリュームである。論理ボリュームは、ホスト４から指定され、ストレージシステム１内部でも識別される。そこで、以下、ホスト４から指定される論理ボリュームを、「ＬＵ」（Logical Unit）と称し、ストレージシステム１内部で識別される論理ボリュームを、「ＬＤＥＶ」（Logical Device）と呼ぶ場合がある。この図の例では、一つのＶＤＥＶから３つのＬＤＥＶが形成されているが、ＬＤＥＶの数は、それより多くても少なくてもよい（例えば、一つのＶＤＥＶに一つのＬＤＥＶでもよい）。
【００５０】
ＶＤＥＶは、複数のストライプ列で構成されている。各ストライプ列は、４台のＨＤＤ１６−１、１６−２、１６−３及び１６−４に対応した４つのストライプで構成されている。ＨＤＤ１６の記憶領域は、複数の所定サイズのサブ記憶領域（つまりストライプ）に区分けられている。ストライプを一つの単位として、データ要素やパリティの書込みが行われる。
【００５１】
図３１は、複数のＨＤＤ１６と論理ボリュームの関係性を説明する別の例を示す図である。図３で説明した例では一つのＲＡＩＤグループに対して一つのＶＤＥＶを対応付けていたのに対して、本例では複数のＲＡＩＤグループに対して一つのＶＤＥＶを対応付けている。
【００５２】
同図において、複数（例えば４台）のＨＤＤ１６−０−０、１６−０−１、１６−０−２及び１６−０−３により一つのＲＡＩＤグループ０が構成される。ＲＡＩＤグループ１、ＲＡＩＤグループ２についても同様である。この例では、複数（例えば３つ）のＲＡＩＤグループに対して一つのＶＤＥＶを対応付けている。図３の例と同様に、このＶＤＥＶを区切ることにより得られた各ＶＤＥＶ部分が、ＬＤＥＶである。図３１に示す例によれば、各ＬＤＥＶは、複数（例えば３つ）のＲＡＩＤグループに跨っている。
【００５３】
同図において、ＨＤＤ１６内の記号（０、１、２、・・・、および、Ｐ０、Ｐ１、Ｐ２，・・・）は、ＶＤＥＶ内でデータ要素やパリティを一意に識別する識別子である。一つのＬＤＥＶには、これらの連続するデータ要素が格納される。図３の例と異なり、本例においては、複数のＲＡＩＤグループから一つのＶＤＥＶが構成されているために、論理的に連続しているデータ要素を複数のＲＡＩＤグループに跨って配置することが可能である。このように配置することにより、一つのＬＤＥＶに対するアクセスを複数のＲＡＩＤグループに分散させることによりアクセス性能を向上させることが可能である。
【００５４】
以下、図４〜図９を参照して、キャッシュ／制御メモリ１４に格納される制御情報に含まれる種々のテーブルを説明する。
【００５５】
図４は、ＲＡＩＤ構成テーブル４００の構成例を示す図である。
【００５６】
ＲＡＩＤ構成テーブル４００は、各ＶＤＥＶのＲＡＩＤ構成を管理するためのテーブルである。具体的には、例えば、このテーブル４００には、ＶＤＥＶの識別番号が書かれるカラム４０１と、ＨＤＤの識別番号が書かれるカラム４０２と、ＲＡＩＤレベルが書かれるカラム４０３と、ストライプサイズ（ストライプの記憶容量）が書かれるカラム４０４とがある。即ち、このテーブル４００には、ＶＤＥＶ毎に、ＶＤＥＶの識別番号と、該ＶＤＥＶを構成する複数のＨＤＤの識別番号と、該ＶＤＥＶのＲＡＩＤレベルと、ストライプサイズとが書かれる。
【００５７】
図５は、ＶＤＥＶ構成テーブル５００の構成例を示す図である。
【００５８】
ＶＤＥＶ構成テーブル５００は、ＶＤＥＶの構成を管理するためのテーブルである。具体的には、例えば、このテーブル５００には、ＶＤＥＶの識別番号が書かれるカラム５０１と、ＬＤＥＶの識別番号が書かれるカラム５０２と、ＬＤＥＶのＶＤＥＶにおける論理アドレス範囲の先頭アドレスが書かれるカラム５０３と、ＬＤＥＶのＶＤＥＶにおける論理アドレス範囲の終端アドレスが書かれるカラム５０４とがある。即ち、このテーブル５００には、どのＶＤＥＶのどの論理アドレス範囲にどんな識別番号のＬＤＥＶが存在するかが書かれる。
【００５９】
図６は、ＬＵ構成テーブル６００の構成例を示す図である。
【００６０】
ＬＵ構成テーブル６００は、各ＬＵの構成を管理するためのテーブルである。具体的には、例えば、このテーブル６００には、ＬＤＥＶの識別番号が書かれるカラム６０１と、ＷＷＮ（World Wide Name）が書かれるカラム６０２と、ＬＵＮ（Logical Unit Number）が書かれるカラム６０３と、ＬＤＥＶの記憶容量が書かれるカラム６０４とがある。即ち、このテーブル６００には、各ＬＵ毎に、ＬＤＥＶの識別番号と、該ＬＤＥＶに対応付けられたＷＷＮ及びＬＵＮと、そのＬＤＥＶの記憶容量とが書かれる。
【００６１】
この実施形態では、前述したように、ホスト４から指定される論理ボリュームを「ＬＵ」と言うが、具体的には、例えば、Fibre ChannelプロトコルでのWWN及びＬＵＮが対応付けられた論理ボリュームをＬＵと言う。尚、例えば、メインフレームでは、ＷＷＮ及びＬＵＮのカラム６０２及び６０３は設けられなくてもよい。
【００６２】
図７はＤｉｓｋ  Ｇｒｏｕｐ構成テーブル７００の構成例を示す図である。
【００６３】
Ｄｉｓｋ  Ｇｒｏｕｐ構成テーブル７００は、ＲＡＩＤ構成テーブル４００のカラム４０２で指定されたＨＤＤを複数のグループに分けて管理する場合に用いられる。具体的には、例えば、このテーブルには、ＶＤＥＶの識別番号が書かれるカラム７０１と、ＶＤＥＶ内でグループを一意に識別する番号が書かれるカラム７０２と、各グループを構成するＨＤＤの識別番号が書かれるカラム７０３と、当該グループのＲＡＩＤレベルとが書かれるカラム７０４とがある。即ち、このテーブル７００には、どのＶＤＥＶのどのグループがどのＨＤＤから構成され、当該グループがどんなＲＡＩＤレベルを持つかが書かれる。
【００６４】
本実施形態では、ＲＡＩＤ構成テーブル４００とＤｉｓｋ  Ｇｒｏｕｐ構成テーブル７００の二つのテーブルにＲＡＩＤレベルを示すカラムが存在することから、或るＲＡＩＤグループ内に他の複数のＲＡＩＤグループを内包する特殊なＲＡＩＤレベルを表現することが可能である。尚、Ｄｉｓｋ  Ｇｒｏｕｐ構成テーブル７００に設定されるデータの具体例については後述する。
【００６５】
図８は、ＨＤＤ障害チェックテーブル８００の構成例を示す図である。
【００６６】
ＨＤＤ障害チェックテーブル８００は、障害の発生したＨＤＤ１６をチェックするためのテーブルである。具体的には、例えば、このテーブル８００には、ＨＤＤの識別番号が書かれるカラム８０１と、障害が発生しているか否かを識別するためのフラグが書かれるカラム８０２とがある。即ち、このテーブル８００には、どのＨＤＤ１６に障害が発生しているかが書かれる。
【００６７】
図９は、ストライプ障害チェックテーブル９００の構成例を示す図である。
【００６８】
ストライプ障害チェックテーブル９００は、障害の発生したＨＤＤ１６に含まれるストライプのうち、データ要素を読み出すことができないストライプ（説明の便宜上、「障害ストライプ」と表記する）をチェックするためのテーブルである。このテーブル９００は、ＲＡＩＤグループを構成する全てのＨＤＤ１６の各々について作成される。具体的には、例えば、このテーブル９００には、ストライプの識別番号が書かれるカラム９０１と、障害が発生しているか否かを識別するためのフラグが書かれるカラム９０２とがある。即ち、このテーブル８００には、どのストライプが障害ストライプであるかが書かれる。尚、同図では、ＨＤＤ１６ごとにそのＨＤＤ１６に含まれるストライプを一意に特定するために付与された識別番号が、カラム９０１に書かれているが、図３において付された識別番号のように、ＲＡＩＤ内に含まれるストライプを一意に特定するために付与された識別番号が、カラム９０１に書かれてもよい。
【００６９】
以上が、各種テーブルについての説明である。
【００７０】
本実施形態に係るストレージシステム１は、ＲＡＩＤ５やＲＡＩＤ６と同様に、ＲＡＩＤグループを構成する複数のＨＤＤ１６に分散してデータを書込むストライピングを採用するが、パリティの生成や書き込みについては、ＲＡＩＤ５やＲＡＩＤ６とは異なる方法を採用する。以下では、データ要素及びパリティの配置やその配置に基づいて行われるリストアを「データ保護方式」と呼ぶ。本実施形態に係るストレージシステム１は、四種類のデータ保護方式を採用することができる。
【００７１】
それら四種類のデータ保護方式のいずれにおいても、二重障害の生じたデータセットをリストアすることが可能である。具体的には、例えば、どのストライプからもデータ要素を読み出すことのできないＨＤＤ（以下、完全障害ＨＤＤ）と、データ要素を読み出せるストライプと読み出せないストライプの両方を有するＨＤＤ（以下、一部障害ＨＤＤ）とが一つのＲＡＩＤグループに存在するが故に、読出し不可能な二つの要素を含んだデータセット（データ単位と冗長コードとのセット）である二重障害データが存在する場合、それら二つの要素をリストアすることが可能である。なお、第二及び第三のデータ保護方式においては、一つの水平ＲＡＩＤグループ（後述）に完全障害ＨＤＤが二つある場合であっても、それらの完全障害ＨＤＤ内のデータをリストアすることができる。また、第四のデータ保護方式においては、一つの部分ＲＡＩＤグループ（後述）に完全障害ＨＤＤが二つある場合であっても、それらの完全障害ＨＤＤ内のデータをリストアすることができる。
【００７２】
第一及び第四のデータ保護方式では、複数のデータ単位に対応した複数のパリティを基にそのトータルサイズよりも小さいサイズの圧縮パリティを生成して格納することで、一つのデータ単位について必ず二つのパリティが生成されるＲＡＩＤ６に比べて、消費記憶容量が少なくて済む。第二及び第三のデータ保護方式においては、複数（十分大きな数である必要があるがその数については後述する）の水平ＲＡＩＤグループ（後述）のデータ単位内のデータ要素を基にパリティを生成して格納することで、一つのデータ単位について必ず二つのパリティが生成されるＲＡＩＤ６に比べて、消費記憶容量が少なくて済む。
【００７３】
以下、それら四種類のデータ保護方式について具体的に説明する。尚、ＨＤＤ１６へのデータ及びパリティの書込みは、ＤＫＡ１３のＣＰＵ１３１によって実行されるディスクＩ／Ｏ処理部２０２が行う。また、第一及び第四のデータ保護方式のいずれでも、圧縮パリティが格納されるストライプを、便宜上「特定ストライプ」と言う。一方、データ要素やパリティの書込み先となるストライプを「通常ストライプ」と言う。データ要素或いはパリティの読み出しが不可能になった通常ストライプが、前述した「障害ストライプ」である。
【００７４】
図１０は、第一のデータ保護方式での書込みの説明図である。
【００７５】
まず、第一のデータ保護方式において、データ要素及びパリティが、ＨＤＤ１５にどのように配置されるかについて説明する。
【００７６】
第一のデータ保護方式では、ＨＤＤ１６ごとに、ＨＤＤ１６に含まれる全てのストライプのデータ要素及びＰパリティから生成された圧縮パリティが書き込まれる。その圧縮パリティは、ＨＤＤ１６に対応する全ての通常ストライプに格納されるデータ要素及びＰパリティの排他的論理和を算出することによって（或いは、それらのデータ要素及びＰパリティに所定の係数を掛けた後でそれらの排他的論理和を算出することによって）、生成される。圧縮パリティが書き込まれるストライプ（つまり特定ストライプ）の位置は、例えば、同図のように、それぞれのＨＤＤ１６の最後尾とすることができる。別の言い方をすれば、ＶＤＥＶの最後尾のストライプ列が、４個の特定ストライプで構成された特定ストライプ列である。尚、特定ストライプは、ＨＤＤ１６の最後尾以外のストライプであっても良い。
【００７７】
本実施形態では、４つのＨＤＤ１６−１乃至１６−４にそれぞれ対応した４つの圧縮パリティが、キャッシュ／制御メモリ１４のキャッシュ領域に常駐し、適時に、キャッシュ領域から特定ストライプに書き込まれる。例えば、ライト要求を受けた際のデータの書込みにより圧縮パリティが更新された場合、その更新された圧縮パリティは、その更新されたときに、ＨＤＤ１６とキャッシュ領域との両方に書き込まれてもよいし、ＨＤＤ１６には書き込まれずにキャッシュ領域にだけ書き込まれてもよい。後者の場合は、その後の所定のタイミングで、キャッシュ領域に書き込まれている４つの圧縮パリティのうちの少なくとも一つ（例えば、全て、或いは、更新された圧縮パリティのみ）が、ＨＤＤ１６における特定ストライプにコピーされる。このようにすることで、ライト要求を受けた際のデータの書込みを行う度に、ＨＤＤ１６上の圧縮パリティが書き込まれているストライプへのアクセスが行われなくなるので、書込みに要する時間が短縮される。ＨＤＤ１６−１を例に採り説明すると、ＨＤＤ１６−１における通常ストライプに書き込まれるデータ要素及びＰパリティ（データ要素“０”、
“３”及び“６”とＰパリティ“Ｐ３”など）を基に、ＨＤＤ１６−１に対応する圧縮パリティ“ＲＰ０”が生成され、それが、キャッシュ領域とＨＤＤ１６−１に書き込まれる。他のＨＤＤ１６−２〜１６−４における圧縮パリティ“ＲＰ１”〜“ＲＰ３”の生成及び書き込みについても、ＨＤＤ１６−１における圧縮パリティ“ＲＰ０”の場合と同様である。
【００７８】
第一のデータ保護方式は、圧縮パリティが書き込まれる点を除いては、ＲＡＩＤ５におけるデータ保護方式と実質的に同じである。従って、同図のように、ＲＡＩＤグループを構成するＨＤＤ１６の総数が４つである場合は、そのうちの３つのＨＤＤ１６に、データ単位を構成する３つのデータ要素（例えば、データ要素“０”、“１”及び“２”）が書き込まれ、残りの一つのＨＤＤに、そのデータ単位に基づく一つのＰパリティ（例えば、Ｐパリティ“Ｐ０”）が書き込まれる。つまり、ＲＡＩＤグループを構成するＨＤＤ１６の個数をＮ（Ｎは３以上の整数）とすると、Ｎ−１個のＨＤＤ１６それぞれに1個の、即ちＮ−１個のＨＤＤ１６に対して合計Ｎ−１個のデータ要素が書き込まれ、残りの１個のＨＤＤ１６に、それらＮ−１個のデータ要素を基に生成された一つのＰパリティが書き込まれる。Ｐパリティは、４つのＨＤＤ１６−１〜１６−４に分散して書き込まれる。言い換えれば、Ｐパリティの書込み先となるＨＤＤ１６は、データ単位毎にシフトする。
【００７９】
次に、第一のデータ保護方式に従う、データ単位及びＰパリティの更新について説明する。なお、以下の説明では、更新前のデータ要素を、「旧データ要素」と言い、更新後のデータ要素を、「新データ要素」と言う（Ｐパリティ及び圧縮パリティについても同様）。
【００８０】
例えば、１番目のデータ単位を構成する３つのデータ要素のうちデータ要素“１”が更新されるとする。この場合、Ｐパリティ“Ｐ０”及び圧縮パリティ“ＲＰ１”を更新する必要がある。なぜなら、Ｐパリティ“Ｐ０”も圧縮パリティ“ＲＰ１”も、旧データ要素“１”を基に生成されたパリティであって、データ要素“１”が更新されれば、Ｐパリティ“Ｐ０”及び圧縮パリティ“ＲＰ１”の値が変わるためである。
【００８１】
そこで、ディスクＩ／Ｏ処理部２０２は、まず、Ｐパリティ“Ｐ０”の生成に必要となる旧データ要素“１”及び旧Pパリティ“P０”を、ＨＤＤ１６−２及び１６−４から読み出す。そして、ディスクＩ／Ｏ処理部２０２は、新データ要素“１”と、旧データ要素“１”及び旧Ｐパリティ“Ｐ０”とを基に、新Ｐパリティ“Ｐ０”を生成することができる（或いは、更新されないデータ要素“０”及び“２”と、新データ要素“１”とから、新Ｐパリティ“Ｐ０”を生成してもよい）。また、ディスクＩ／Ｏ処理部２０２は、新Ｐパリティ“Ｐ０”の生成と同じような方法で、新圧縮パリティ“ＲＰ１”の生成も行う。即ち、ディスクＩ／Ｏ処理部２０２は、ＨＤＤ１６−２に対応した旧圧縮パリティ“ＲＰ１”と、旧データ要素“１”、新データ要素“１”とを基に、新圧縮パリティ“ＲＰ１”を生成することができる（或いはディスクＩ／Ｏ処理部２０２は、ＨＤＤ１６−２から、旧データ要素“１”以外のデータ要素とＰパリティを読出し、読み出したデータ要素及びＰパリティと、新データ要素“１”とを基に、新圧縮パリティ“ＲＰ１”を生成しても良い）。その後、ディスクＩ／Ｏ処理部２０２は、新データ要素“１”を、旧データ要素“１”が記憶されている通常ストライプに書き込み、新Ｐパリティ“Ｐ０”を、旧Ｐパリティ“Ｐ０”が記憶されている通常ストライプに書き込む。また、ディスクＩ／Ｏ処理部２０２は、新圧縮パリティ“ＲＰ１”を、キャッシュ領域に書込み、所定のタイミングで、キャッシュ領域上の新圧縮パリティ“ＲＰ１”を、旧圧縮パリティ“ＲＰ１”が記憶されている特定ストライプに書き込む。
【００８２】
図１１は、第一のデータ保護方式でのリストアの説明図である。なお、以下の説明では、読出し不可能なデータ要素が一つだけであるデータ単位であって、二重障害データ（前述した通り、読出し不可能なデータ要素を二つ含んだデータ単位）ではないデータ単位のことを、「一重障害データ」と言う。
【００８３】
同図では、ＨＤＤ１６−１が、完全障害ＨＤＤであり、ＨＤＤ１６−２が、一部障害ＨＤＤである。その一部障害ＨＤＤ１６−２では、データ要素“１３”を記憶した通常ストライプが障害ストライプである。
【００８４】
一重障害データを構成するデータ要素のリストアの手順は、通常のＲＡＩＤ５と同様である。すなわち、完全障害ＨＤＤ１６−１の障害ストライプに記憶されている、一重障害データを構成するデータ要素は、その一重障害データを構成する他の全てのデータ要素と、その一重障害データに対応したＰパリティとを用いて（言い換えれば、その障害ストライプを含んだストライプ列における他の全てのストライプにあるデータ要素及びＰパリティを用いて）、リストアされる。
【００８５】
一方、二重障害データを構成する読み出し不可能な二つのデータ要素は、通常のＲＡＩＤ５と同様の手順でリストアすることはできない。二重障害データに対応するパリティは一つだけだからである。本例の場合では、データ要素“１２”と“１３”の両方を、残りのデータ要素“１４”とＰパリティ“Ｐ４”とからだけでは、リストアすることはできない。
【００８６】
そこで、これら二つのデータ要素のリストアは、圧縮パリティを利用して、次のようにして行われる。
【００８７】
まず、一部障害ＨＤＤ１６−２における障害ストライプに記憶されているデータ要素“１３”がリストアされる。具体的には、一部障害ＨＤＤ１６−２における、障害ストライプ以外の全ての通常ストライプに記憶されているデータ要素及びＰパリティと、その一部障害ＨＤＤ１６−２に対応した圧縮パリティ“ＲＰ１”（キャッシュ領域又は特定ストライプに記憶されている圧縮パリティ“ＲＰ１”）との排他的論理和により、データ要素“１３”がリストアされる（同図の（ａ））。
【００８８】
次に、そのデータ要素“１３”と、そのデータ要素“１３”を含んだデータ単位における他のデータ要素“１４”及びそのデータ単位に対応したＰパリティ“Ｐ４”を基に、完全障害ＨＤＤ１６−１の障害ストライプに記憶されている、データ要素“１２”がリストアされる。これにより、二重障害データにおけるデータ要素“１２”及び“１３”の両方がリストアされたことになる。
【００８９】
最後に、完全障害ＨＤＤ１６−１の特定ストライプに記憶される、圧縮パリティがリストアされる。具体的には、完全障害ＨＤＤ１６−１の障害ストライプに記憶されている、二重障害データにおけるリストアされたデータ要素“１２”や、ＲＡＩＤ５と同様にリストアされた他のデータ要素やＰパリティを基に、圧縮パリティ“ＲＰ１”がリストアされる。
【００９０】
以上が、第一のデータ保護方式についての説明である。
【００９１】
なお、上記の処理において、一部障害ＨＤＤの障害ストライプに、データ要素ではなくＰパリティが記憶されている場合には、その一部障害ＨＤＤに対応した圧縮パリティや、その一部障害ＨＤＤの障害ストライプ以外の通常ストライプに記憶されているデータ要素及びＰパリティを基に、その障害ストライプに記憶されているＰパリティがリストアされる。そして、そのリストアされたＰパリティを用いて、通常のＲＡＩＤ５と同様の方法で、完全障害ＨＤＤの障害ストライプに記憶されているデータ要素がリストアされる。
【００９２】
また、上記の説明によれば、第一のデータ保護方式では、完全障害ＨＤＤ以外の全てのＨＤＤが、一部障害ＨＤＤであっても良い。但し、一部障害ＨＤＤに記憶されているデータ要素をリストアするためには、一部障害ＨＤＤに存在する障害ストライプは一つだけである必要がある。
【００９３】
また、第一のデータ保護方式では、一つのデータ単位及びそれに対応するＰパリティのトータルサイズと、一つのストライプ列のサイズとが同一である。具体的には、一つのデータ単位及びそれに対応するＰパリティは、一つのストライプ列に収まり、複数のストライプ列に跨ることは無い。しかし、それに限らず、例えば、一つのデータ単位及びそれに対応するＰパリティのトータルサイズは、一つのストライプ列のサイズより小さくても良い。
【００９４】
図１２、は第二のデータ保護方式での書込みの説明図である。
【００９５】
まず、第二のデータ保護方式におけるＲＡＩＤ構成について説明する。
【００９６】
第二のデータ保護方式においては、図１２に示すように、ＨＤＤ１６を論理的に２次元状に配置し、水平方向および垂直方向のそれぞれでグループ化し、ＲＡＩＤグループを構成する。本実施形態においては、水平方向のＲＡＩＤグループを「水平ＲＡＩＤグループ」と呼び、垂直方向のＲＡＩＤグループを「垂直ＲＡＩＤグループ」と呼び、全ての水平ＲＡＩＤグループ及び全ての垂直ＲＡＩＤグループから構成されるＲＡＩＤグループを「全体ＲＡＩＤグループ」と呼ぶ。また、水平ＲＡＩＤグループ内で作成されるパリティを「水平パリティ」と呼び、垂直ＲＡＩＤグループ内で作成されるパリティを「垂直パリティ」と呼ぶ。
【００９７】
図１２によれば、ＶＤＥＶを構成する各ＨＤＤ１６は、或る一つの水平ＲＡＩＤグループのメンバでもあるし、或る一つの垂直ＲＡＩＤグループのメンバでもある。
【００９８】
図１２では、例えば、水平ＲＡＩＤグループに関してはＲＡＩＤ５を構成し、垂直ＲＡＩＤグループに関してはＲＡＩＤ４を構成している（すなわち、水平ＲＡＩＤグループは、ＲＡＩＤ５に対応したＲＡＩＤグループであり、垂直ＲＡＩＤグループは、ＲＡＩＤ４に対応したＲＡＩＤグループである）。ここで、ＲＡＩＤ４は、ＲＡＩＤ５に類似したＲＡＩＤレベルであるが、ＲＡＩＤ５のように冗長コードを複数のＨＤＤに分散して配置するのではなく、冗長コードを所定の一つのＨＤＤに配置する点が、ＲＡＩＤ５と異なる。ＲＡＩＤ構成に関して具体的に説明すると、図１２の例においては、例えば、ＨＤＤ１６−ｉ−０、１６−ｉ−１、１６−ｉ−２（ｉ＝０、１、２、３）はＲＡＩＤ５に基づいた水平ＲＡＩＤグループｉを構成し、ＨＤＤ１６−０−ｉ、１６−１−ｊ、１６−２−ｊ、１６−３−ｊ、１６−４−ｊ（ｊ＝０、１、２）はＲＡＩＤ４に基づいた垂直ＲＡＩＤグループｊを構成している。
【００９９】
次に、第二のデータ保護方式において、データ要素、水平パリティ及び垂直パリティが、ＨＤＤ１６にどのように配置されるかについて説明する。
【０１００】
ＲＡＩＤ５の水平ＲＡＩＤグループ内の水平パリティは、その水平ＲＡＩＤグループ内の複数のＨＤＤ１６に分散されて配置される。一方、ＲＡＩＤ４の垂直ＲＡＩＤグループｊ内の垂直パリティは、所定の一つのＨＤＤ１６（図１２の例においてはＨＤＤ１６−４−ｊ）に配置される。
【０１０１】
同図において、ＨＤＤ１６を構成するセルは、ストライプを表す。各セルの左半分には、各ＨＤＤ１６内でストライプを一意に識別するための識別子（０、１、２、・・・）が示してある。各セルの右半分には、当該セルに対応する水平ＲＡＩＤグループ内で水平パリティを一意に識別する識別子（ＨＰ０、ＨＰ１、ＨＰ２、・・・）、あるいは、当該セルに対応する垂直ＲＡＩＤグループ内で垂直パリティを一意に識別する識別子（ＶＰ０、ＶＰ１、ＶＰ２、・・・）が示してある。セルの右半分が空白のセルはデータ要素が格納されることを示している。
【０１０２】
同図の例においては、例えば、ＨＤＤ１６−０−０および１６−０−１内のストライプ０に対応する水平ＲＡＩＤグループ０内の水平パリティは、ＨＤＤ１６−０−２内のストライプ０（水平パリティＨＰ０）に格納される。また、ＨＤＤ１６−０−０、１６−１−０、１６−２−０および１６−３−０のストライプ０に対応する垂直ＲＡＩＤグループ０内の垂直パリティは、ＨＤＤ１６−４−０内のストライプ０（垂直パリティＶＰ０）に格納される。以後、或る垂直ＲＡＩＤグループ内の複数のＨＤＤ１６内のストライプのうち、同じ位置の（同一識別子を持つ）複数のストライプの組を、「垂直ストライプ列」と呼ぶ。それに対し、水平ＲＡＩＤグループ内の水平方向のストライプの組を、「水平ストライプ列」と呼ぶ。一つ垂直ストライプ列には、複数のデータ要素と、それらの複数のデータ要素から生成される垂直パリティとが格納される。
【０１０３】
なお、ＨＤＤ１６−０−０、１６−１−０、１６−２−０および１６−３−０のストライプ２には、水平パリティが格納されるが、これらの水平パリティから作成することができる垂直パリティＶＰ２は作成しない（作成してもよい）。何故なら、データ要素の値が更新される度に、水平パリティは更新されるが、水平パリティから水平パリティに対応する垂直パリティを作成する場合、データ要素の値の更新に伴い、水平パリティに対応する垂直パリティを更新しなければならず、ＨＤＤ１６に対するアクセス回数が多くなるからである、また、水平パリティに対応する垂直パリティを作成しない場合でも、二重障害データをリストアすることが可能であるためである。
【０１０４】
次に、第二のデータ保護方式において、Ｄｉｓｋ  Ｇｒｏｕｐ構成テーブル７００に設定されるデータの具体例について説明する。
【０１０５】
図７において、ＶＤＥＶ２のＤｉｓｋ  Ｇｒｏｕｐ０のＤｉｓｋ１６、１７、１８は、それぞれ、図１２のＨＤＤ１６−０−０、１６−０−１及び１６−０−２に対応する。これらのＤｉｓｋは、ＲＡＩＤレベルがＲＡＩＤ５である水平ＲＡＩＤグループを構成するため、図７における、ＶＤＥＶ２のＤｉｓｋ  Ｇｒｏｕｐ０に対応するＲＡＩＤ  ｌｅｖｅｌのカラム７０４には“ＲＡＩＤ５”が設定される。
【０１０６】
また、図７において、ＶＤＥＶ２のＤｉｓｋ  Ｇｒｏｕｐ５のＤｉｓｋ１６、１９、２２、２５及び２８は、それぞれ図１２のＨＤＤ１６−０−０、１６−１−０、１６−２−０、１６−３−０及び１６−４−０に対応する。これらのＤｉｓｋはＲＡＩＤレベルがＲＡＩＤ４である垂直ＲＡＩＤグループを構成するため、図７における、ＶＤＥＶ２のＤｉｓｋ  Ｇｒｏｕｐ５に対応するＲＡＩＤ  ｌｅｖｅｌのカラム７０４には“ＲＡＩＤ４”が設定される。
【０１０７】
次に、第二のデータ保護方式における消費記憶容量について説明する。
【０１０８】
まず、或るＲＡＩＤグループの「データ容量比率」を次のように定義する。即ち、「ＲＡＩＤグループのデータ容量比率」＝「ＲＡＩＤグループに含まれる冗長コード以外のデータのトータル容量」／「ＲＡＩＤグループを構成する全ＨＤＤのトータル容量」である。データ容量比率が大きければ大きいほど、ＨＤＤの消費記憶容量が節約できていることを意味する。
【０１０９】
ここで、例えば、Ａ＝「ＲＡＩＤグループを構成する全ＨＤＤのトータル容量」、Ｂ＝「ＲＡＩＤグループに含まれる冗長コード以外のデータのトータル容量」、Ｃ＝「ＲＡＩＤグループのデータ容量比率」＝Ｂ／Ａとし、且つ、全てのＨＤＤ１６の記憶容量が同一であるとした場合、ＲＡＩＤ６のＣをＣ０とすると、Ａ０及びＢ０は、ＨＤＤの数であり、Ａ０＝Ｎ＋２、Ｂ０＝Ｎ、Ｃ０＝Ｂ０／Ａ０＝Ｎ／（Ｎ＋２）、という関係が成り立つ（図３２Ａ参照、図３２Ａにおいて、Ｎは、データ要素が格納されるＨＤＤの数であり、Ｎ＋２の２は、パリティが格納されるＨＤＤの数である。なお、図３２はＡ及びＢの容量を算出するために用いる便宜的な図であり、実際には冗長コードは複数のＨＤＤに分散して格納されている）。
【０１１０】
簡単な例として、水平ＲＡＩＤグループも垂直ＲＡＩＤグループもＲＡＩＤ４に対応したＲＡＩＤグループであることを考える。この場合、ＨＤＤは、例えば、（１）データ要素が格納されるＨＤＤ、（２）水平パリティが格納されるＨＤＤ、（３）垂直パリティが格納されるＨＤＤ、（４）水平パリティの垂直パリティ（又は垂直パリティの水平パリティ）が格納されるＨＤＤ、の４種類のＨＤＤに分類可能である。（４）のＨＤＤが無くても、水平ＲＡＩＤグループ内で二重障害が発生しても、データセットをリストアすることが可能である。従って、（４）のＨＤＤを、「ＲＡＩＤグループを構成する全ＨＤＤのトータル容量」に算入するか否かの場合分けが発生する。
【０１１１】
（４）のＨＤＤを、「ＲＡＩＤグループを構成する全ＨＤＤのトータル容量」に算入する場合（ケース１）、以下の関係式、
A1=(N+1)(K+1)
B1=N・K
C1=B1/A1=N・K/((N+1)(K+1))
が成り立つ。A1，B1，C1は、それぞれ、ケース１の場合のＡ，Ｂ，Ｃである。ケース１において、RAID6よりデータ容量効率が高いためには、
C1>C0、即ち、
N・K / ((N+1)(K+1))>N / (N+2)・・・・(W)
を満たす必要がある。(W)を変形すると、
K > N + 1 ・・・(W)’
となる。
【０１１２】
一方、（４）のＨＤＤを、「ＲＡＩＤグループを構成する全ＨＤＤのトータル容量」に算入しない場合（ケース２）、以下の関係式、
A2=(N+1)(K+1)-1
B2=N・K
C2=B1/A1=N・K/((N+1)(K+1)-1)
が成り立つ。A2，B2，C2は、それぞれ、ケース２の場合のＡ，Ｂ，Ｃである。ケース２において、RAID6よりデータ容量効率が高いためには、
C1>C0、即ち、
N・K / ((N+1)(K+1)-1)>N / (N+2)・・・・(w)
を満たす必要がある。(w)を変形すると
K > N ・・・(w)’
となる。
【０１１３】
ケース２は、構成上、水平ＲＡＩＤグループと垂直ＲＡＩＤグループの両方がRAID4に対応したＲＡＩＤグループでないと不可能であると考えられる。従って、水平ＲＡＩＤグループと垂直ＲＡＩＤグループの一方がＲＡＩＤ５であり他方がＲＡＩＤ４である場合、又は、水平ＲＡＩＤグループと垂直ＲＡＩＤグループの双方がＲＡＩＤ５である場合は、ケース１と同等の考え方になると考えられる。
【０１１４】
従って、第二のデータ保護方式（及び後述の第三のデータ保護方式）では、ケース１のデータ容量効率の考え方を用いるのがよいと考えられる。
【０１１５】
次に、第二のデータ保護方式に従う、データ単位、水平パリティ、垂直パリティの更新について説明する。なお、以下の説明では、更新前のデータ要素を、「旧データ要素」と言い、更新後のデータ要素を、「新データ要素」と言う（水平パリティ及び垂直パリティについても同様である）。
【０１１６】
例えば、ＨＤＤ１６−０−０内のストライプ０を更新する場合を考える。ここで、説明のために、ＨＤＤ１６−０−０、１６−０−２及び１６−４−０内のストライプ０内のデータをそれぞれデータ要素“０”、水平パリティ“ＨＰ０”、垂直パリティ“ＶＰ０”と呼ぶ。データ要素“０”を更新する場合、水平パリティ“ＨＰ０”、垂直パリティ“ＶＰ０”を更新する必要がある。何故なら、水平パリティ“ＨＰ０”及び垂直パリティ“ＶＰ０”の値はそれぞれデータ要素“０”に依存した値であって、データ要素“０”の値が更新されれば、水平パリティ“ＨＰ０”及び垂直パリティ“ＶＰ０”の値が変わるためである。
【０１１７】
そこで、ディスクＩ／Ｏ処理部２０２は、まず、新水平パリティ“ＨＰ０”の生成に必要となる旧データ要素“０”及び旧水平パリティ“ＨＰ０”を、ＨＤＤ１６−０−０及び１６−０−２から読み出す。そして、ディスクＩ／Ｏ処理部２０２は、新データ要素“０”と、旧データ要素“０”及び旧水平パリティ“ＨＰ０”とを基に、新水平パリティ“ＨＰ０”を生成することができる（或いは、更新されないデータ要素であるＨＤＤ１６−０−１内のストライプ０内のデータ要素と、新データ要素“０”とから、新水平パリティ“ＨＰ０”を生成してもよい）。また、ディスクＩ／Ｏ処理部２０２は、新水平パリティ“ＨＰ０”の生成と同じような方法で、新垂直パリティ“ＶＰ０”の生成も行う。即ち、ディスクＩ／Ｏ処理部２０２は、旧垂直パリティ“ＶＰ０”と、旧データ要素“０”、新データ要素“０”とを基に、新垂直パリティ“ＶＰ０”を生成することができる（或いはディスクＩ／Ｏ処理部２０２は、ＨＤＤ１６−１−０、１６−２−０及び１６−３−０内のストライプ０のデータを読み出し、読み出したデータと新データ要素“０”を基に、新垂直パリティ“ＶＰ０”を生成してもよい）。その後、ディスクＩ／Ｏ処理部２０２は、新データ要素“０”を、旧データ要素“０”が記憶されているストライプに書き込み、新水平パリティ“ＨＰ０”を、旧水平パリティ“ＨＰ０”が記憶されているストライプに書き込み、新垂直パリティ“ＶＰ０”を、旧垂直パリティ“ＶＰ０”が記憶されているストライプに書き込む。
【０１１８】
第二のデータ保護方式においては、いずれのデータ要素が更新されても垂直パリティが更新されるために、垂直パリティを格納するＨＤＤ１６に対してリード／ライトアクセスが発生する。このため、垂直パリティを格納するＨＤＤ１６がストレージシステム１のＩ／Ｏ性能のボトルネックとなる場合がある。そこで、この性能ボトルネックを解消するために、データ単位の更新と垂直パリティの更新を非同期に行ってもよい。具体的には、まず、データ単位が更新される際に、データ単位が更新されたかどうかを記憶する、キャッシュ／制御メモリ１４上に格納されたテーブル内の当該データ単位に対応するビットをオンにする。このとき、垂直パリティの更新は行わない。次に、データ単位の更新とは非同期なタイミングで（例えば、一定時間おきに、あるいは、ストレージシステム１に対するＩ／Ｏの負荷が低いときに）、前記テーブルを参照することにより、垂直パリティの更新が必要なデータ単位（前記テーブルにおいてビットがオンであるデータ単位）を選び、当該データ単位に対応する垂直パリティに対応する垂直ストライプ列のデータ要素に基づき、新垂直パリティ生成し、垂直パリティを更新する。
【０１１９】
次に、第二のデータ保護方式における論理アドレスと物理アドレスのマッピングについて説明する。第二のデータ保護方式においては、例えば、連続する論理アドレスを複数の水平ＲＡＩＤグループに跨るように論理アドレスと物理アドレスをマッピングすることができる。言い換えれば、例えば、Ｘ番目の水平ＲＡＩＤグループ内のＰ番目の水平ストライプ列を構成する二以上のストライプにそれぞれ対応した二以上の論理的なアドレスと、Ｘ＋１番目の水平ＲＡＩＤグループ内のＰ番目の水平ストライプ列を構成する二以上のストライプにそれぞれ対応した二以上の論理的なアドレスとが連続している（Ｘ及びＰは０以上の整数）。
【０１２０】
図１２の例で言えば、例えば、ＨＤＤ１６−０−０、１６−０−１、１６−１−０、１６−１−１、１６−２−０、１６−２−１、１６−３−０及び１６−３−１のストライプ０を連続する論理アドレスとなるように論理アドレスと物理アドレスのマッピングを行う。このようにマッピングを行うことにより、論理アドレスが連続する長いデータをライトする際に、その長いデータ内のデータ要素の排他的論理和を求めることにより垂直パリティを生成可能である確率が大きくなる。先の図１２の例で言えば、ＨＤＤ１６−０−０、１６−１−０、１６−２−０及び１６−３−０のストライプ０の排他的論理和を算出することによりＨＤＤ１６−４−０内の垂直パリティＶＰ０を生成することができる。このように垂直パリティを生成することにより、長データをライトする際に、旧垂直パリティをＨＤＤ１６から読み出す必要がなくなり、ライト時の効率を上げることが可能である。
【０１２１】
図１３は、第二のデータ保護方式でのリストアの説明図である。第二のデータ保護方式においても、一重障害データにおける読み出し不可能な一つのデータ要素及び二重障害データにおける読み出し不可能な二つのデータ要素をリストアすることができる。
【０１２２】
図１３では、ＨＤＤ１６−０−０が完全障害ＨＤＤであり、ＨＤＤ１６−０−１が一部障害ＨＤＤである。その一部障害ＨＤＤ１６−０−１ではストライプ０乃至３が障害ストライプである。
【０１２３】
一重障害データを構成するデータ要素のリストアの手順は、通常のＲＡＩＤ５と同様である。すなわち、完全障害ＨＤＤ１６−０−０の障害ストライプに記憶されている、一重障害を構成するデータ要素は、その一重障害データを構成する他の全てのデータ要素と、その一重障害データに対応した水平パリティとを用いて（言い換えれば、その障害ストライプを含んだストライプ列における他の全てのストライプにあるデータ要素及び水平パリティを用いて）、リストアされる。
【０１２４】
一方、二重障害データを構成する読み出し不可能な二つのデータ要素は、通常のＲＡＩＤ５と同様の手順でリストアすることはできない。
【０１２５】
そこで、これらの二つのデータ要素のリストアは、垂直パリティを利用して、次のようにして行われる。即ち、読み出し不可能なデータ要素である障害ストライプを含んだ（先に定義した）垂直ストライプ列における他の全てのストライプにあるデータ要素及び垂直パリティを用いて、ＲＡＩＤ４と同様の方法でリストアされる。図１３では、例えば、ＨＤＤ１６−１−０、１６−２−０、１６−３−０、１６−４−０内のストライプ０に対応するデータ要素及び垂直パリティからＨＤＤ１６−０−０内のストライプ０に対応するデータ要素がリストアされる。このようにすることにより、二重障害データを構成する読み出し不可能な二つのデータ要素を両方とも垂直パリティを用いてリストアすることができる。なお、二重障害データを構成する二つのデータ要素のうち一つのデータ要素が垂直パリティを利用してリストアされた後は、当該二重障害データは一重障害データとなるため、以後のリストアの手順は一重障害データのリストアの手順と同様とすることもできる。
【０１２６】
以上のようにして一重障害データ及び二重障害データのリストアを行うことができる。
【０１２７】
なお、上の説明ではＨＤＤ１６−０−１が一部障害ＨＤＤであるとしたが、ＨＤＤ１６−０−１が完全障害ＨＤＤであっても同様にリストアすることが可能である。また、上の説明ではＨＤＤ１６−０−０が完全障害ＨＤＤであるとしたが、ＨＤＤ１６−０−０が一部障害ＨＤＤであっても同様にリストアすることができる。
【０１２８】
また、以上の説明においては、水平ＲＡＩＤグループを構成するＨＤＤ１６が完全障害ＨＤＤとなった場合について説明したが、垂直ＲＡＩＤグループの垂直パリティを格納しているＨＤＤ（例えば、図１３のＨＤＤ１６−４−０）が完全障害ＨＤＤとなった場合には、当該垂直ＲＡＩＤグループの他のＨＤＤからＲＡＩＤ４におけるパリティ生成方法に従って垂直パリティを生成し、完全障害ＨＤＤを回復する。
【０１２９】
以上が第二のデータ保護方式についての説明である。
【０１３０】
図１４は、第三のデータ保護方式での書込みの説明図である。
【０１３１】
第三のデータ保護方式は第二のデータ保護方式に類似した形式である。以下では、第三のデータ保護方式と第二のデータ保護方式との類似点と相違点に着目して、第三のデータ保護方式について説明する。
【０１３２】
まず、第三のデータ保護方式におけるＲＡＩＤ構成について説明する。
【０１３３】
第三のデータ保護方式においては、第二のデータ保護方式と同様に水平ＲＡＩＤグループ及び垂直ＲＡＩＤグループを構成するが、第二のデータ保護方式と異なり、垂直ＲＡＩＤグループに関してＲＡＩＤ４ではなくＲＡＩＤ５を構成する。全て水平ＲＡＩＤグループ及び垂直ＲＡＩＤグループから構成されるＲＡＩＤグループを全体ＲＡＩＤグループと呼ぶのは第二のデータ保護方式と同様である。ＲＡＩＤ構成に関して具体的に説明すると、図１４の例においては、例えば、ＨＤＤ１６−ｉ−０、１６−ｉ−１、１６−ｉ−２（ｉ＝０、１、２、３、４）はＲＡＩＤ５に基づいた水平ＲＡＩＤグループｉを構成し、ＨＤＤ１６−０−ｉ、１６−１−ｊ、１６−２−ｊ、１６−３−ｊ、１６−４−ｊ（ｊ＝０、１、２）はＲＡＩＤ５に基づいた垂直ＲＡＩＤグループｊを構成している。
【０１３４】
次に、第三のデータ保護方式において、データ要素、水平パリティ及び垂直パリティが、ＨＤＤ１６にどのように配置されるかについて説明する。
【０１３５】
ＲＡＩＤ５の水平ＲＡＩＤグループ内の水平パリティは当該水平ＲＡＩＤグループ内の複数のＨＤＤ１６に分散されて配置される点は、第二のデータ保護方式と同様である。一方、第二のデータ保護方式と異なり、ＲＡＩＤ５の垂直ＲＡＩＤグループｊ内の垂直パリティは当該垂直ＲＡＩＤグループ内の複数のＨＤＤ１６に分散されて配置される。言い換えれば、垂直パリティの配置先となるＨＤＤ１６は、垂直ストライプ列毎にシフトする。なお、ここで言う垂直ストライプ列の定義は、第二のデータ保護方式と同様である。
【０１３６】
図１４における、ＨＤＤ１６を構成するセルの意味は第二のデータ保護方式と同様である。
【０１３７】
図１４の例においては、例えば、ＨＤＤ１６−０−０および１６−０−１内のストライプ０に対応する水平ＲＡＩＤグループ０内の水平パリティはＨＤＤ１６−０−２内のストライプ０（水平パリティＨＰ０）である。また、ＨＤＤ１６−０−０、１６−１−０、１６−２−０および１６−３−０のストライプ０に対応する垂直ＲＡＩＤグループ０内の垂直パリティは、ＨＤＤ１６−４−０内のストライプ０（垂直パリティＶＰ０）に格納される。
【０１３８】
次に、第三のデータ保護方式において、Ｄｉｓｋ  Ｇｒｏｕｐ構成テーブル７００に設定されるデータの具体例については、第二のデータ保護方式で説明したものとほぼ同様であるため詳細な説明は行わない。第三のデータ保護方式においては、第二のデータ保護方式と異なり、垂直ＲＡＩＤグループのＲＡＩＤレベルがＲＡＩＤ５であるために、カラム７０４の要素のうち、垂直ＲＡＩＤグループのＲＡＩＤレベルが設定される要素には“ＲＡＩＤ４”に代えて“ＲＡＩＤ５”が設定される点が異なる。
【０１３９】
次に、第三のデータ保護方式における論理アドレスと物理アドレスのマッピングについて説明する。第三のデータ保護方式においても、第二のデータ保護方式と同様に、連続する論理アドレスを複数の水平ＲＡＩＤグループに跨るように論理アドレスと物理アドレスをマッピングすることができる。具体的な例は、第二のデータ保護方式で説明したものとほぼ同様である。このようにマッピングを行うことにより、第二のデータ保護方式と同様に、長データをライトする際に、旧垂直パリティをＨＤＤ１６から読み出す必要がなくなり、ライト時の効率を上げることが可能である。
【０１４０】
次に、第三のデータ保護方式に従う、データ単位、水平パリティ、垂直パリティの更新の方法については、垂直パリティが垂直ＲＡＩＤグループ内の複数のＨＤＤに分散されて書き込まれる点を除いては、第二のデータ保護方式における方法と同様であるため説明を省略する。
【０１４１】
図１５は、第三のデータ保護方式でのリストアの説明図である。
【０１４２】
第三のデータ保護方式においても、第二のデータ保護方式と同様に、一重障害データにおける読み出し不可能な一つのデータ要素及び二重障害データにおける読み出し不可能な二つのデータ要素をリストアすることができる。
【０１４３】
図１５では、ＨＤＤ１６−０−０が完全障害ＨＤＤであり、ＨＤＤ１６−０−１が一部障害ＨＤＤである。その一部障害ＨＤＤ１６−０−１ではストライプ０乃至３が障害ストライプである。
【０１４４】
一重障害データを構成するデータ要素のリストアの手順は、通常のＲＡＩＤ５と同様であり、第二のデータ保護方式で説明したものと同様であるため、説明を省略する。
【０１４５】
一方、二重障害データを構成する読み出し不可能な二つのデータ要素は、通常のＲＡＩＤ５と同様の手順でリストアすることはできない。
【０１４６】
そこで、これらの二つのデータ要素のリストアは、第二のデータ保護方式と同様に、垂直パリティを利用して行われるが、第三のデータ保護方式においては、垂直ＲＡＩＤグループがＲＡＩＤ５により構成されるため、第二のデータ保護方式と異なり、読み出し不可能なデータ要素である障害ストライプを含んだ（先に定義した）垂直ストライプ列における他の全てのストライプにあるデータ要素及び垂直パリティを用いて、ＲＡＩＤ５と同様の方法でリストアされる。図１５では、例えば、ＨＤＤ１６−１−０、１６−２−０、１６−３−０、１６−４−０内のストライプ０に対応するデータ要素及び垂直パリティからＨＤＤ１６−０−０内のストライプ０に対応するデータ要素がリストアされる。このようにして、二重障害データを構成する読み出し不可能な二つのデータ要素を両方とも垂直パリティを用いてリストアすることができる。なお、二重障害データを構成する二つのデータ要素のうち一つのデータ要素が垂直パリティを利用してリストアされた後は、当該二重障害データは一重障害データとなるため、以後のリストアの手順は一重障害データのリストアの手順と同様とすることができる。
【０１４７】
以上のようにして、一重障害データ及び二重障害データのリストアを行うことができる。
【０１４８】
なお、上の説明では、ＨＤＤ１６−０−１が一部障害ＨＤＤであるとしたが、ＨＤＤ１６−０−１が完全障害ＨＤＤであっても同様にリストアすることが可能である。また、上の説明ではＨＤＤ１６−０−０が完全障害ＨＤＤであるとしたが、ＨＤＤ１６−０−０が一部障害ＨＤＤであっても同様にリストアすることができる。また、垂直パリティが障害ストライプとなった場合には、当該垂直パリティを含む垂直ストライプ列の他のデータ要素からＲＡＩＤ５のリストア方法に従って、当該垂直パリティをリストアすることができる。
【０１４９】
以上が第三のデータ保護方式についての説明である。
【０１５０】
図１６は、第四のデータ保護方式での書込みの説明図である。
【０１５１】
まず、第四のデータ保護方式におけるＲＡＩＤ構成について説明する。
【０１５２】
第四のデータ保護方式においては、図１６に示すように、複数のＨＤＤ１６をグループ化してＲＡＩＤグループを構成し（このＲＡＩＤグループを説明の都合上、「部分ＲＡＩＤグループ」と呼ぶ）、それらのＲＡＩＤグループをさらにグループ化してＲＡＩＤグループを構成する（このＲＡＩＤグループを説明の都合上、「全体ＲＡＩＤグループ」と呼ぶ）。全体ＲＡＩＤグループにより、ＶＤＥＶが構成される。図１６においては、例えば、ＨＤＤ１６−０−０、１６−０−１、１６−０−２、１６−０−３により、部分ＲＡＩＤグループ０が構成され、部分ＲＡＩＤグループ０、１、２により、全体ＲＡＩＤグループが構成される。
【０１５３】
次に、第四のデータ保護方式において、データ要素及び冗長データが、ＨＤＤ１６にどのように配置されるかについて説明する。第四のデータ保護方式においては、データ単位は、部分ＲＡＩＤグループのストライプ列に格納される。第四のデータ保護方式においては、これまでのデータ保護方式と異なり、ＲＡＩＤ６と同様にＰパリティのみならずＱパリティ（第二の冗長コード）も生成される。しかし、Ｑパリティはデータ単位毎に部分ＲＡＩＤグループに書き込まれるのに対して、Ｐパリティはデータ単位毎に書き込まれない。Ｐパリティに関して言えば、複数の部分ＲＡＩＤグループ内のデータ単位に対応した複数のＰパリティが一つの圧縮パリティに圧縮されて、全体ＲＡＩＤグループに書き込まれる。これにより、二重障害データにおける二つのデータ要素のリストアを可能にしつつ、全体ＲＡＩＤグループの消費記憶容量の節約も可能にする。
【０１５４】
第四のデータ保護方式における圧縮パリティについて説明する前に、図１６におけるＨＤＤ１６を構成するセルについて説明する。図１６におけるＨＤＤ１６（例えば、ＨＤＤ１６−０−０）内のセルはストライプを表す。各セル内には、当該セルに対応するストライプが属するＨＤＤ１６内でデータ要素を一意に識別する識別子、又は、当該セルに対応するストライプが属する部分ＲＡＩＤグループ内でＱパリティを一意に識別する識別子、又は、当該セルに対応するストライプが属する全体ＲＡＩＤグループ内で圧縮パリティを一意に識別する識別子が書かれている。セル内に数字（１、２、３、・・・）が書かれたセルにはデータ要素が書き込まれる。セル内に
“Ｑｉ”（ｉ＝１、２、３、・・・）が書かれたセルに対応するストライプには、当該ストライプが属する部分ＲＡＩＤグループ内のデータ要素のうちｉに対応する複数のデータ要素から生成されるＱパリティが書き込まれる。セル内に“ＣＰｉ”（ｉ＝１、２、３、・・・）が書かれたセルに対応するストライプには、当該ストライプが属する全体ＲＡＩＤグループ内のデータ要素のうちｉに対応する複数のデータ要素から生成される圧縮パリティが書き込まれる。
【０１５５】
第四のデータ保護方式では、特定ストライプに書き込まれる圧縮パリティは、複数のデータ単位に対応する複数のＰパリティを一つの圧縮したコード、具体的には、それら複数のＰパリティの排他的論理和をとることによって生成される。本実施形態では、例えば、２つのデータ単位に対応する２つのＰパリティを基に一つの圧縮コードが生成される。具体的には、例えば、第一のデータ単位に対応した第一のＰパリティ（ＨＤＤ１６−０−１、１６−０−２及び１６−０−３内のデータ要素“１”の排他的論理和である“Ｐ１−０”）と、第二のデータ単位に対応した第二のＰパリティ（ＨＤＤ１６−１−１、１６−１−２及び１６−１−３内のデータ要素“１”の排他的論理和である“Ｐ１−１”）との排他的論理和を算出することにより、圧縮パリティ“ＣＰ１”が生成される。
第四のデータ保護方式では、一つのＨＤＤ１６に複数の特定ストライプが存在する。このため、部分ＲＡＩＤグループには複数の特定ストライプ列が存在することになる。複数の特定ストライプ列は、部分ＲＡＩＤグループに分散していても良いが、図示のように、部分ＲＡＩＤグループの末尾側に、連続した特定ストライプ列として存在しても良い。
【０１５６】
本実施形態における第四のデータ保護方式では、以下の規則が遵守される。即ち、複数の部分ＲＡＩＤグループ内のデータ単位に対応した複数のＰパリティから生成された一つの圧縮パリティは、全体ＲＡＩＤグループを構成する複数の部分ＲＡＩＤグループのうち、当該圧縮パリティの生成に使用された部分ＲＡＩＤグループ以外の部分ＲＡＩＤグループに書き込まれるという規則である。これは、ＨＤＤ１６の障害の発生により、圧縮パリティと、それに対応する各データ単位におけるデータ要素又は各データ単位に対応するＱパリティとが、同時に読み出せなくなることを避けるためである。例えば、圧縮パリティ“ＣＰ１”について説明すると、圧縮パリティ“ＣＰ１”に対応した二つのデータ単位を構成する六つのデータ要素がＨＤＤ１６−０−１、１６−０−２、１６−０−３、１６−１−１、１６−１−２、１６−１−３に書き込まれ、それら二つのデータ単位に対応するＱパリティがＨＤＤ１６−０−０及び１６−１−０に書き込まれるため、圧縮パリティ“ＣＰ１”は、これらのＨＤＤ１６から構成される部分ＲＡＩＤグループである部分ＲＡＩＤグループ０及び１以外の部分ＲＡＩＤグループ（この例では部分ＲＡＩＤグループ２）に書き込まれる。別の言い方をすれば、部分ＲＡＩＤグループ２に書き込まれる圧縮パリティの基にすべき複数のＰパリティに対応する複数のデータ単位は、部分ＲＡＩＤグループ０及び部分ＲＡＩＤグループ１に書き込まれるデータ単位とするべきである。
【０１５７】
次に、第四のデータ保護方式において、Ｄｉｓｋ  Ｇｒｏｕｐ構成テーブル７００に設定されるデータの具体例について説明する。
【０１５８】
図７において、ＶＤＥＶ４のＤｉｓｋ  Ｇｒｏｕｐ０のＤｉｓｋ４３、４４、４５及び４６は、それぞれ図１６のＨＤＤ１６−０−０、１６−０−１、１６−０−２、１６−０−２に対応する。これらのＤｉｓｋは部分ＲＡＩＤグループを構成するため、図７における、ＶＤＥＶ４のＤｉｓｋ  Ｇｒｏｕｐ０に対応するＲＡＩＤ  ｌｅｖｅｌのカラム７０４には部分ＲＡＩＤグループを表す“ＰＡＲＴＩＡＬ”が設定される。
【０１５９】
次に、第四のデータ保護方式に従う、データ単位、Ｑパリティ、圧縮パリティの更新について説明する。なお、以下の説明では、更新前のデータ要素を、「旧データ要素」と言い、更新後のデータ要素を、「新データ要素」と言う（Ｑパリティ及び圧縮パリティについても同様である）。
【０１６０】
例えば、ＨＤＤ１６−０−１内のストライプ１を更新する場合を考える。ここで、説明のために、ＨＤＤ１６−０−１内のストライプ１内のデータをデータ要素“１”、ＨＤＤ１６−０−０内のストライプＱ１内のデータをＱパリティ“Ｑ１”、ＨＤＤ１６−２−０内のストライプＣＰ１内のデータを圧縮パリティ“ＣＰ１”、と呼ぶ。データ要素“１”を更新する場合、Ｑパリティ“Ｑ１”、圧縮パリティ“ＣＰ１”を更新する必要がある。何故なら、Ｑパリティ“Ｑ１”及び圧縮パリティ“ＣＰ１”の値はそれぞれデータ要素“１”に依存した値であって、データ要素“１”の値が更新されれば、Ｑパリティ“Ｑ１”及び圧縮パリティ“ＣＰ１”の値が変わるためである。
【０１６１】
そこで、ディスクＩ／Ｏ処理部２０２は、まず、新Ｑパリティ“Ｑ１”の生成に必要となる旧データ要素“１”及び旧Ｑパリティ“Ｑ１”を、ＨＤＤ１６−０−１及び１６−０−０から読み出す。そして、ディスクＩ／Ｏ処理部２０２は、新データ要素“１”と、旧データ要素“１”及び旧Ｑパリティ“Ｑ１”とを基に、新Ｑパリティ“Ｑ１”を生成することができる（或いは、更新されないデータ要素であるＨＤＤ１６−０−２及び１６−０−３内のストライプ１内のデータ要素と、新データ要素“１”とから、新Ｑパリティ“Ｑ１”を生成してもよい）。なお、Ｑパリティの生成はＲＡＩＤ６におけるＱパリティの生成方法に順ずる。次に、ディスクＩ／Ｏ処理部２０２は、新Ｑパリティ“Ｑ１”の生成と同じような方法で、新圧縮パリティ“ＣＰ１”の生成も行う。即ち、ディスクＩ／Ｏ処理部２０２は、旧圧縮パリティ“ＣＰ１”と、旧データ要素“１”、新データ要素“１”とを基に、新圧縮パリティ“ＣＰ１”を生成することができる（或いはディスクＩ／Ｏ処理部２０２は、ＨＤＤ１６−０−２、１６−０−３、１６−１−１、１６−１−２、１６−１−３内のストライプ１のデータを読み出し、読み出したデータと新データ要素“１”を基に、新圧縮パリティ“ＣＰ１”を生成してもよい）。ただし、圧縮パリティの生成はＲＡＩＤ６におけるＰパリティの生成方法に順ずる。その後、ディスクＩ／Ｏ処理部２０２は、新データ要素“１”を、旧データ要素“１”が記憶されているストライプに書き込み、新Ｑパリティ“Ｑ１”を、旧Ｑパリティ“Ｑ１”が記憶されているストライプに書き込み、新圧縮パリティ“ＣＰ１”を、旧圧縮パリティ“ＣＰ１”が記憶されているストライプに書き込む。
【０１６２】
次に、第四のデータ保護方式における論理アドレスと物理アドレスのマッピングについて説明する。第四のデータ保護方式においては、例えば、連続する論理アドレスを複数の部分ＲＡＩＤグループに跨るように論理アドレスと物理アドレスをマッピングすることができる。言い換えれば、例えば、ｘ番目の部分ＲＡＩＤグループ（例えば部分ＲＡＩＤグループ０）におけるｐ番目のストライプ列を構成する二以上のストライプにそれぞれ対応した二以上の論理的なアドレスと、ｘ＋１番目の部分ＲＡＩＤグループ（例えば部分ＲＡＩＤグループ１）におけるｐ番目のストライプ列を構成する二以上のストライプにそれぞれ対応した二以上の論理的なアドレスとが連続している（ｘ及びｐは０以上の自然数）。
【０１６３】
図１６の例で言えば、例えば、ＨＤＤ１６−０−１、１６−０−２、１６−０−３、１６−１−１、１６−１−２及び１６−１−３のストライプ１を連続する論理アドレスとなるように論理アドレスと物理アドレスのマッピングを行う。このようにマッピングを行うことにより、論理アドレスが連続する長データをライトする際に、その長データ内のデータ要素のＰパリティを求めることにより圧縮パリティを生成可能である確率が大きくなる。先の図１６の例で言えば、ＨＤＤ１６−０−１、１６−０−２、１６−０−３、１６−１−１、１６−１−２及び１６−１−３のストライプ１のデータ要素を用いてＨＤＤ１６−２−０内の圧縮パリティＣＰ１を生成することができる。このように圧縮パリティを生成することにより、長データをライトする際に、旧圧縮パリティをＨＤＤ１６から読み出す必要がなくなり、ライト時の効率を上げることが可能である。
【０１６４】
図１７は、第四のデータ保護方式でのリストアの説明図である。第四のデータ保護方式においても、一重障害データにおける読み出し不可能な一つのデータ要素及び二重障害データにおける読み出し不可能な二つのデータ要素をリストアすることができる。
【０１６５】
同図では、ＨＤＤ１６−０−１が完全障害ＨＤＤであり、ＨＤＤ１６−０−２が一部障害ＨＤＤである。その一部障害ＨＤＤ１６−０−２ではストライプ１、２及びＱ４が障害ストライプである。
【０１６６】
一重障害データを構成するデータ要素のリストアの手順は、通常のＲＡＩＤ６の考え方を用いることができる。すなわち、完全障害ＨＤＤ１６−０−０の障害ストライプに記憶されている、一重障害を構成するデータ要素は、その一重障害データを構成する他の全てのデータ要素と、その一重障害データに対応したＱパリティとを用いて（言い換えれば、その障害ストライプを含んだストライプ列における他の全てのストライプにあるデータ要素及びＱパリティを用いて）、リストアされる。ただし、この手順が適用されるのは、障害ストライプに対応するＱパリティが読み出し可能な場合のみである。
【０１６７】
一方、二重障害データを構成する読み出し不可能な二つのデータ要素は、通常のＲＡＩＤ６と同様の手順でリストアすることはできない（例えば、読み出し不可能な二つのデータ要素が同図のＨＤＤ１６−０−１、１６−０−２のストライプ１であるとき）。また、一重障害データの障害ストライプに対応するＱパリティが読み出し不可能な場合、通常のＲＡＩＤ６と同様の手順でリストアすることはできない（例えば、読み出し不可能なデータ要素が同図のＨＤＤ１６−０−２のストライプ２であり、読み出し不可能なＱパリティが同図のＨＤＤ１６−０−１のストライプＱ２であるとき）。
【０１６８】
そこで、二重障害データを構成する読み出し不可能な二つのデータ要素のリストア、あるいは、一重障害データを構成する読み出し不可能な一つのデータ要素と読み出し不可能なＱパリティのリストアは、圧縮パリティを利用して、次のようにして行われる。
【０１６９】
まず、二重障害データあるいは一重障害データに対応するＰパリティが生成される（同図（ａ））。具体的には、例えば、圧縮パリティ“ＣＰ１”と、それの基になった、障害ストライプが属する部分ＲＡＩＤグループ０を除く部分ＲＡＩＤグループに対応するＰパリティ“Ｐ１−１”を基に、それらの排他的論理和を算出することにより、圧縮パリティ“ＣＰ１”の基になった、障害ストライプが属する部分ＲＡＩＤグループ０に対応するＰパリティ“Ｐ１−０”が生成される。
【０１７０】
その後、ＲＡＩＤ６と同様の手法により、二重障害データを構成する読み出し不可能な二つのデータ要素、あるいは、一重障害データを構成する読み出し不可能な一つのデータ要素と読み出し不可能なＱパリティがリストアされる（同図（ｂ））。具体的には、例えば、生成されたＰパリティ“Ｐ１−０”と、障害ストライプが属する部分ＲＡＩＤグループ０のストライプ列の二つの障害ストライプ以外の（読み出し可能な）ストライプのデータ要素又はＱパリティ（この例では、ＨＤＤ１６−０−０のストライプＱ１及びＨＤＤ１６−０−３のストライプ１）とを基に、二つの障害ストライプのデータ要素又はＱパリティ（この例では、ＨＤＤ１６−０−１及び１６−０−２のストライプ１）がリストアされる。
【０１７１】
最後に、完全障害ＨＤＤ１６−０−１の各特定ストライプに記憶されている各圧縮パリティがリストアされる（同図（ｃ））。具体的には、これまでに説明した一重障害データ及び二重障害データのリストアにより、すべての一重障害データ及び二重障害データがリストアされたので、リストアされたデータ単位を基にＰパリティを生成し、生成したＰパリティと、そのデータ単位が対応する圧縮パリティに対応する他のデータ単位に対応するＰパリティとを基に、完全障害ＨＤＤ１６−０−１に記憶されている圧縮パリティ“ＣＰ６”、“ＣＰ１８”などがリストアされる。
【０１７２】
以上が第四のデータ保護方式についての説明である。
【０１７３】
なお、本説明では、Ｐ＋Ｑ方式として知られるＲＡＩＤ６をベースとしたＲＡＩＤ構成を用いたが、それに代えて２次元ＸＯＲ方式として知られるＲＡＩＤ６をベースとしたＲＡＩＤ構成を用いてもよい。２次元ＸＯＲ方式を用いる場合は、複数の部分ＲＡＩＤグループにて２次元ＸＯＲ方式の対角パリティを作成し、それら対角パリティの排他的論理和を算出することにより、圧縮パリティを生成し、別の部分ＲＡＩＤグループに格納する。
また、上の説明ではＨＤＤ１６−０−１が一部障害ＨＤＤであるとしたが、ＨＤＤ１６−０−１が完全障害ＨＤＤであっても同様にリストアすることが可能である。また、上の説明ではＨＤＤ１６−０−０が完全障害ＨＤＤであるとしたが、ＨＤＤ１６−０−０が一部障害ＨＤＤであっても同様にリストアすることができる。
【０１７４】
以上が、第一乃至第四のデータ保護方式についての説明である。なお、いずれのデータ保護方式においても、完全障害ＨＤＤや一部障害ＨＤＤについて、一重障害データや二重障害データにおける読出し不可能なデータ要素は、所定の記憶資源、例えばスペアのＨＤＤにリストアされる。
【０１７５】
以下、本実施形態で行われる種々の処理の流れを説明する。
【０１７６】
図１８は、ストレージシステム１がホスト４からＩ／Ｏ要求を受信した場合にコマンド処理部２０１が行う処理のフローチャートである。
【０１７７】
ホスト４は、ＬＵにアクセスする際、ＬＵに付与されているＷＷＮとＬＵＮ、そして、リード乃至ライト対象のアドレス（ＬＢＡ：Logical Block Address）を指定したＩ／Ｏ要求を、ストレージシステム１に対して発行する。コマンド処理部２０１は、そのＩ／Ｏ要求を受けたことに応答して、ＬＵ構成テーブル６００を参照し、ＬＵＮとＷＷＮに対応するＬＤＥＶの識別番号（ＬＤＥＶ番号）を割り出す（Ｓ１０１）。続いて、コマンド処理部２０１は、ホスト４からのＩ／Ｏ要求がライト要求であるか否かを判定する（Ｓ１０２）。ライト要求の場合には（Ｓ１０２：ＹＥＳ）、本処理はＳ１０３に移行し、そうでない場合（リード要求）には（Ｓ１０２：ＮＯ）、本処理はＳ１０５へと移行する。
【０１７８】
Ｓ１０３では、コマンド処理部２０１は、キャッシュ／制御メモリ１４のキャッシュ領域の未使用領域にライトデータ（Ｉ／Ｏ要求に従うライト対象のデータ）を格納し、Ｓ１０４で、ホスト４に対して、当該ライト処理が完了したことを通知する。Ｓ１０４の処理は、これよりも後、例えばＳ１０５の後に行ってもよい。Ｓ１０４の時点ではＨＤＤ１６へのデータ書き込みは完了していないが、キャッシュ領域にライトデータが格納された時点で、ホスト４に対して処理完了を通知することで、ライト処理の応答時間を高速化することが出来る。
【０１７９】
Ｓ１０５では、コマンド処理部２０１は、ＲＡＩＤ構成テーブル４００及びＶＤＥＶ構成テーブル５００を参照し、Ｓ１０１で割り出したＬＤＥＶ番号の付与されたＬＤＥＶを含むＶＤＥＶのＲＡＩＤレベルを判定する。
【０１８０】
ＲＡＩＤレベルの値が「０ｘ０ａ」の場合は（Ｓ１０５：０ｘ０ａ）、コマンド処理部２０１は、第一のデータ保護方式に基づいて、Ｓ１０１で割り出したＬＤＥＶ番号の付与されたＬＤＥＶに対するリード乃至ライト処理を実施する（Ｓ１０６）。この処理については、図１９で詳述する。
【０１８１】
次に、ＲＡＩＤレベルの値が「０ｘ０ｂ」である場合は（Ｓ１０５：０ｘ０ｂ）、コマンド処理部２０１は、第二のデータ保護方式に基づいて、Ｓ１０１で割り出したＬＤＥＶ番号の付与されたＬＤＥＶに対するリード乃至ライト処理を実施する（Ｓ１０７）。この処理については、図２２、２３で詳述する。
【０１８２】
次に、ＲＡＩＤレベルの値が「０ｘ０ｃ」である場合は（Ｓ１０５：０ｘ０ｃ）、コマンド処理部２０１は、第三のデータ保護方式に基づいて、Ｓ１０１で割り出したＬＤＥＶ番号の付与されたＬＤＥＶに対するリード乃至ライト処理を実施する（Ｓ１０８）。この処理については、図２２、２３で詳述する。
【０１８３】
最後に、ＲＡＩＤレベルの値が「０ｘ０ｄ」である場合は（Ｓ１０５：０ｘ０ｄ）、コマンド処理部２０１は、第四のデータ保護方式に基づいて、Ｓ１０１で割り出したＬＤＥＶ番号の付与されたＬＤＥＶに対するリード乃至ライト処理を実施する（Ｓ１０９）。この処理については、図２７、２８で詳述する。
【０１８４】
Ｓ１１０で、コマンド処理部２０１は、受信したＩ／Ｏ要求がリード要求であるかを判定する。当該要求がリード要求である場合（Ｓ１１０：ＹＥＳ）、前述のＳ１０６、Ｓ１０７、Ｓ１０８又はＳ１０９の処理によって、ＨＤＤ１６からのリード対象のデータがキャッシュ領域に格納されているので、コマンド処理部２０１は、キャッシュ領域上のリード対象のデータをホスト４に対して返送する（Ｓ１１１）。Ｓ１１０で、当該要求がリード要求ではないと判断された場合には（Ｓ１１０：ＮＯ）、本処理は終了する。
【０１８５】
図１９は、第一のデータ保護方式に基づいたＩ／Ｏ処理のフローチャートである。
【０１８６】
図１９の説明では、Ｉ／Ｏ要求の対象とされたＬＤＥＶを「対象ＬＤＥＶ」と言い、対象ＬＤＥＶを含むＶＤＥＶに属する各ＨＤＤを「対象ＨＤＤ」と言い、ホスト４からのＩ／Ｏ要求で指定されているＬＢＡで特定されるボリューム領域が対応付けられるＨＤＤ上のアドレスを「対象物理アドレス」と呼ぶ。
【０１８７】
Ｓ２０１では、ホスト４からのＩ／Ｏ要求で指定されているＬＢＡが対象物理アドレスに変換される。具体的には、例えば、コマンド処理部２０１が、ＤＫＡ１３に、ホスト４からのＩ／Ｏ要求で指定されているＬＢＡを含んだＩ／Ｏ要求を出し、ＤＫＡ１３内のディスクＩ／Ｏ処理部２０２が、そのＩ／Ｏ要求を受ける。そのＩ／Ｏ要求は、キャッシュ／制御メモリ１４の制御領域に書かれてもよいし、内部スイッチ１５を介してＤＫＡ１３に送信されてもよい。Ｉ／Ｏ要求を受けるＤＫＡ１３は、各対象ＨＤＤ１６に接続されたＤＫＡ１３である。当該ＤＫＡ１３のディスクＩ／Ｏ処理部２０２が、受けたＩ／Ｏ要求中のＬＢＡを対象物理アドレスに変換する。
【０１８８】
Ｓ２０２では、ディスクＩ／Ｏ処理部２０２が、受けたＩ／Ｏ要求が、ライト要求であるかリード要求であるかを判断する。ライト要求である場合には（Ｓ２０２：ＹＥＳ）、本処理はＳ２０３に移行し、リード要求である場合には（Ｓ２０２：ＮＯ）、本処理はＳ２０８に移行する。尚、このＳ２０２の処理は、Ｓ２０１の処理が終了する前に完了されてもよい。
【０１８９】
Ｓ２０３では、ディスクＩ／Ｏ処理部２０２が、キャッシュ領域上に置かれたライト対象のデータの書込みに関係するストライプ（例えば、ライト対象のデータから分割される各データ単位、各データ単位に関連するＰパリティ、或いは、更新される圧縮パリティが書き込まれるストライプ）を、他からアクセスできないようにロックする。ストレージシステム1においては、ホスト４から同時に複数のアクセス要求を扱うため、ライト対象のデータの書込みに関係するストライプへの更新が同時に複数発生する可能性がある。もしPパリティの生成処理途中(S203からS207の間)で他のアクセス処理により、Pパリティの生成に必要なストライプの更新が発生すると、Pパリティの内容が矛盾のあるものになるため、それを抑止するためにロック処理を行う。
【０１９０】
Ｓ２０４では、ディスクＩ／Ｏ処理部２０２が、データ単位における新データ要素と、新データ要素に対応する旧データ要素と、新Ｐパリティとから、新Ｐパリティを生成し、その生成した新Ｐパリティをキャッシュ領域に書き込む。尚、この処理が行われる前に、旧データ要素と旧Ｐパリティとがキャッシュ領域に格納されていない場合には、ＨＤＤ１６から読み出される。
【０１９１】
Ｓ２０５では、ディスクＩ／Ｏ処理部２０２が、新データ要素と、旧データ要素と、旧圧縮パリティとから、新圧縮パリティを生成し、その生成した新圧縮パリティをキャッシュ領域に書き込む。尚、この処理が行われる前に、旧圧縮パリティがキャッシュ領域に格納されていない場合、ＨＤＤ１６から読み出される。
【０１９２】
Ｓ２０６では、ディスクＩ／Ｏ処理部２０２が、対象物理アドレスを指定した、新データ要素及び新Ｐパリティのライト要求を、各対象ＨＤＤ１６に送信することにより、新データ要素及び新Ｐパリティを書込む。
【０１９３】
Ｓ２０７では、ディスクＩ／Ｏ処理部２０２が、対象物理アドレスを指定した、新圧縮パリティのライト要求を、各対象ＨＤＤ１６に送信することにより、新圧縮パリティを書き込み、S２０３でロックしたストライプについてロックの解除を行う。尚、ディスクＩ／Ｏ処理部２０２は、このＳ２０７の処理を行わずに、例えば、所定のタイミングで、キャッシュ領域に書き込まれている更新後の全ての圧縮パリティを同時に、ＨＤＤ１６に書き込むようにしてもよい。
【０１９４】
Ｓ２０８では、ディスクＩ／Ｏ処理部２０２が、各対象ＨＤＤ１６からリード対象のデータを読み出し、その読み出したリード対象のデータをキャッシュ領域に格納する。
【０１９５】
図２０は、第一のデータ保護方式でのリストアの処理のフローチャートである。
【０１９６】
リストアの処理は、ディスクＩ／Ｏ処理部２０２が行う。図２０の説明では、ＲＡＩＤグループに一つの完全障害ＨＤＤがあるとする。図２０の処理において、ディスクＩ／Ｏ処理部２０２は、完全障害ＨＤＤにある全ストライプのデータ要素、Ｐパリティ及び圧縮パリティをリストアする。また、そのリストアの際に、他の一つのＨＤＤのストライプからデータ要素又はＰパリティの読み出しに失敗した場合には（つまり、完全障害ＨＤＤ以外に少なくとも一つの障害ストライプがある場合には）、図２１の処理に移行して、その完全障害ＨＤＤ１６以外のＨＤＤ１６に含まれるデータ要素又はＰパリティのリストアが行われる。
【０１９７】
ディスクＩ／Ｏ処理部２０２は、HDDの先頭から何番目のストライプ列であるかを表すカウント値（以下、「カウント値Ａ」と記載）と、本リストア処理の最中に適宜に更新される圧縮パリティ（以下、「仮圧縮パリティＲＤ」と記載）を、キャッシュ／制御メモリ１４に記録する。
【０１９８】
Ｓ３０１では、ディスクＩ／Ｏ処理部２０２が、カウント値A及び仮圧縮パリティＲＤの初期値としてそれぞれ０をセットする。
【０１９９】
Ｓ３０２では、ディスクＩ／Ｏ処理部２０２が、カウント値Ａから特定されるストライプ列(先頭からA番目のストライプ)における、完全障害ＨＤＤの障害ストライプ（以下、完全障害ストライプ）以外の全てのストライプから、データ要素及びＰパリティ（Ｐパリティは含まない場合もある）を読み出す。即ち、完全障害ＨＤＤ以外のHDD16について、先頭からA番目のストライプを読み出す。
【０２００】
Ｓ３０３では、ディスクＩ／Ｏ処理部２０２が、Ｓ３０２における読み出しが成功したかどうかを判断する。その読み出しが成功した場合は（Ｓ３０３：ＹＥＳ）、本処理はＳ３０６に移行し、その読み出しに失敗した場合は（Ｓ３０３：ＮＯ）、本処理はＳ３０４に移行する。
【０２０１】
Ｓ３０４では、ディスクＩ／Ｏ処理部２０２が、Ｓ３０２の処理にて読み出しに失敗したデータ要素及び／又はＰパリティのリストアを行う。この処理は、後に図２１を参照して詳述する。
【０２０２】
Ｓ３０５では、ディスクＩ／Ｏ処理部２０２が、Ｓ３０４におけるリストアが成功したか否かを判断する。リストアが成功した場合は（Ｓ３０４：ＹＥＳ）、本処理はＳ３０６に移行し、リストアに失敗した場合は（Ｓ３０４：ＮＯ）、本処理は終了する。
【０２０３】
Ｓ３０６では、ディスクＩ／Ｏ処理部２０２が、Ｓ３０３にて読み出した或いはＳ３０４にてリストアされたデータ要素及びＰパリティから、それらの排他的論理和を算出することによって、カウント値Aに対応する完全障害ストライプのデータ要素又はＰパリティを生成し、生成されたデータ要素又はＰパリティ（以下、「リストア要素ＮＤ」と記載）をキャッシュ領域に書き込む。
【０２０４】
Ｓ３０７では、ディスクＩ／Ｏ処理部２０２が、キャッシュ領域に記憶されている仮圧縮パリティＲＤとリストア要素ＮＤとの排他的論理和を算出し、算出された値を、仮圧縮ＲＤとする。つまり、仮圧縮パリティＲＤが、リストアされたそのリストア要素ＮＤに基づく最新の仮圧縮パリティＲＤに更新される。
【０２０５】
Ｓ３０８では、ディスクＩ／Ｏ処理部２０２が、リストア要素ＮＤを、スペアＨＤＤにおける、完全障害ＨＤＤ１６における対象ストライプの位置と同じ位置にあるストライプに書き込む。なお、スペアＨＤＤとは、ストレージシステム１に搭載されており、このリストア処理が正常に終了した後、完全障害ＨＤＤ１６と交替で稼働が開始されるＨＤＤ、言い換えれば、完全障害ＨＤＤに代わってＲＡＩＤグループのメンバとなるＨＤＤである。
【０２０６】
Ｓ３０９では、ディスクＩ／Ｏ処理部２０２が、カウント値Ａに１を加える。
【０２０７】
Ｓ３１０では、ディスクＩ／Ｏ処理部２０２が、Ｓ３０９による更新後のカウント値Ａが、通常ストライプ列の数と同じか否かを判断する。カウント値Ａが通常ストライプ列数となっている場合は（Ｓ３１０：ＹＥＳ）、本処理はＳ３１１に移行し、カウント値Ａがストライプ列数未満である場合は（Ｓ３１０：ＮＯ）、本処理はＳ３０２に移行する。カウント値Ａが通常ストライプ列数ということは、完全障害ＨＤＤにおける全ての通常ストライプのリストアが済んでいるということを意味する。Ｓ３１１に移行するということは、仮圧縮パリティＲＤは、完全障害ＨＤＤにおける全ての通常ストライプに対応したデータ要素及びＰパリティに基づく完成した圧縮パリティである。
【０２０８】
Ｓ３１１では、ディスクＩ／Ｏ処理部２０２が、仮圧縮パリティＲＤ（つまり完成した圧縮パリティ）を、スペアのＨＤＤ１６における、完全障害ＨＤＤ１６における特定ストライプと同じ位置にあるストライプに書き込む。
【０２０９】
以上の一連の流れにより、スペアＨＤＤに、完全障害ＨＤＤに記憶されていた全てのデータ要素、Ｐパリティ及び圧縮パリティがリストアされる。
【０２１０】
図２１は、図２０におけるＳ３０４に相当する処理のフローチャートである。
【０２１１】
図２０におけるＳ３０４では、本処理が実施される。本処理において、ディスクＩ／Ｏ処理部２０２は、図２０におけるＳ３０３にて読み出しに失敗したデータ要素又はＰパリティのリストアを行う。本処理は、図２０におけるＳ３０３にて読み出しに失敗したデータ要素又はＰパリティを記憶している障害ストライプを有するＨＤＤ１６、つまり一部障害ＨＤＤについて行われる。図２１では、その障害ストライプに記憶されているデータ要素又はPパリティがリストア対象であるため、以下、その障害ストライプを、「一部障害ストライプ」という。
【０２１２】
まず、ディスクＩ／Ｏ処理部２０２は、ＨＤDの先頭から何番目のストライプ列であるかを表すカウント値（以下、「カウント値Ｂ」と記載）と、一部障害ストライプに記憶されているデータ要素又はPパリティを算出するまでの途中の一時的な値（以下、「仮リストア要素ＮＤＢ」と記載）とを、キャッシュ領域に書き込む。
【０２１３】
Ｓ４０１では、ディスクＩ／Ｏ処理部２０２が、カウント値Ｂ及び仮リストア要素ＮＤBの初期値としてそれぞれ０をセットする。
【０２１４】
Ｓ４０２では、ディスクＩ／Ｏ処理部２０２が、カウント値Ｂがカウント値Ａと同じかどうかを判断する。カウント値Ｂとカウント値Aが同じである場合は（Ｓ４０２：ＹＥＳ）、本処理はＳ４０６に移行し、カウント値Ｂとカウント値Ａとが異なる場合は（Ｓ４０２：ＮＯ）、本処理はＳ４０３に移行する。
【０２１５】
Ｓ４０３では、ディスクＩ／Ｏ処理部２０２が、カウント値Ｂから特定されるストライプからデータ要素又はPパリティを読み出す。
【０２１６】
Ｓ４０４では、ディスクＩ／Ｏ処理部２０２が、Ｓ４０３における読み出しが成功したかどうかを判断する。その読み出しが成功した場合は（Ｓ４０４：ＹＥＳ）、本処理はＳ４０５に移行し、その読み出しに失敗した場合は（Ｓ４０４：ＮＯ）、本処理はエラー終了となる。そうすると、図２０のＳ３０５でＮＯとなって、リストア処理がエラー終了となる。つまり、一部障害ＨＤＤに障害ストライプが二つ存在すると、第一のデータ保護方式についてリストア処理はエラー終了となる。
【０２１７】
Ｓ４０５では、ディスクＩ／Ｏ処理部２０２が、Ｓ４０３にて読み出したデータ要素又はＰパリティと、既にキャッシュ領域に記憶されている仮リストア要素ＮＤＢとの排他的論理和を算出し、算出された値を、仮リストア要素ＮＤＢとする。つまり、仮リストア要素ＮＤＢが、最新の値に更新される。
【０２１８】
Ｓ４０６では、ディスクＩ／Ｏ処理部２０２が、カウント値Ｂに１を加える。
【０２１９】
Ｓ４０７では、ディスクＩ／Ｏ処理部２０２が、カウント値Ｂと通常ストライプ列数とが同じか否かを判断する。同じであれば（Ｓ４０７：ＹＥＳ）、本処理はＳ４０８に移行し、違っていれば（Ｓ４０７：ＮＯ）、本処理はＳ４０２に移行する。同じであるということは、一部障害ＨＤＤにおける一つの障害ストライプ以外の全ての通常ストライプに記憶されているデータ要素及びＰパリティを基に生成された仮リストア要素ＮＤＢは、その障害ストライプに記憶されているデータ要素又はＰパリティとなっている。言い換えれば、障害ストライプに記憶されているデータ要素又はＰパリティが、キャッシュ領域にリストアされていることになる。
【０２２０】
Ｓ４０８では、ディスクＩ／Ｏ処理部２０２が、仮リストア要素ＮＤＢ、つまり、キャッシュ領域にリストアされている、障害ストライプに記憶されているデータ要素又はＰパリティを、一部障害ＨＤＤ１６内の交換セクタに書き込む。交換セクタとは、ＨＤＤに設けられている予備的なストライプである。以後は、障害ストライプの代わりに、その予備的なストライプを、当該HDDにおけるA番目のストライプとすることができる。
【０２２１】
図２２は、第二及び第三のデータ保護方式に基づいたＩ／Ｏ処理のフローチャートである。
【０２２２】
図１９の説明と同様に、図２２，２３の説明では、Ｉ／Ｏ要求の対象とされたＬＤＥＶを「対象ＬＤＥＶ」と言い、対象ＬＤＥＶを含むＶＤＥＶに属する各ＨＤＤを「対象ＨＤＤ」と言い、ホスト４からのＩ／Ｏ要求で指定されているＬＢＡで特定されるボリューム領域が対応付けられるＨＤＤ上のアドレスを「対象物理アドレス」と呼ぶ。
【０２２３】
Ｓ２２０１の処理は、図１９におけるＳ２０１と同じ処理である。即ち、Ｓ２２０１では、ホスト４からのＩ／Ｏ要求で指定されているＬＢＡが対象物理アドレスに変換される。
【０２２４】
Ｓ２２０２では、図１９におけるＳ２０２の処理と同様に、ディスクＩ／Ｏ処理部２０２が、受けたＩ／Ｏ要求が、ライト要求であるかリード要求であるかを判断する。ライト要求である場合には（Ｓ２２０２：ＹＥＳ）、本処理はＳ２２０３に移行し、リード要求である場合には（Ｓ２２０２：ＮＯ）、本処理はＳ２２０９に移行する。
【０２２５】
Ｓ２２０３では、ディスクＩ／Ｏ処理部２０２が、キャッシュ領域上に置かれたライト対象のデータの書込みに関係するストライプ（例えば、ライト対象のデータが分割されたデータ単位、それに対応する水平パリティ及び垂直パリティ等の書込み先のストライプ）を、他からアクセスできないようにロックする。
【０２２６】
Ｓ２２０４では、ディスクＩ／Ｏ処理部２０２が、ライト対象データのサイズが、データ単位のサイズ以上であるか否かを判定する。ライト対象データのサイズがデータ単位のサイズよりも小さい場合は（Ｓ２２０４：ＮＯ）、本処理はＳ２２０５に移行し、ライト対象データのサイズがデータ単位のサイズ以上である場合は（Ｓ２２０４：ＹＥＳ）、本処理はＳ２２０８に移行する。
【０２２７】
Ｓ２２０５では、ディスクＩ／Ｏ処理部２０２が、データ単位における新データ要素と、その新データ要素に対応する旧データ要素と、旧水平パリティとから、それらの排他的論理和をとることによって、新水平パリティを生成し、その生成した新水平パリティをキャッシュ領域に書き込む。尚、この処理が行われる前に、旧データ要素と旧水平パリティとがキャッシュ領域に格納されていない場合、ＨＤＤ１６から読み出される。
【０２２８】
Ｓ２２０６では、ディスクＩ／Ｏ処理部２０２が、新データ要素と、旧データ要素と、旧垂直パリティとから、新垂直パリティを生成し、その生成した新垂直パリティをキャッシュ領域に書き込む。尚、この処理が行われる前に、旧垂直パリティがキャッシュ領域に格納されていない場合、ＨＤＤ１６から読み出される。
【０２２９】
Ｓ２２０７では、ディスクＩ／Ｏ処理部２０２が、対象物理アドレスを指定した、新データ要素、新水平パリティ及び新垂直パリティのライト要求を、各対象ＨＤＤ１６に送信することにより、新データ要素、新水平パリティ及び新垂直パリティを書込む。尚、ディスクＩ／Ｏ処理部２０２は、このＳ２２０７の処理を行わずに、例えば、所定のタイミングで、キャッシュ領域に書き込まれている更新後の新データ要素、新水平パリティ及び新垂直パリティをそれぞれ全て同時に、ＨＤＤ１６に書き込むようにしてもよい。
【０２３０】
Ｓ２２０８では、ディスクＩ／Ｏ処理部２０２が、ライト対象のデータがデータ単位以上の場合のライト処理を行う。この処理については、後に図２３を参照して詳述する。
【０２３１】
Ｓ２２０９では、図１９におけるＳ２０８の処理と同様に、ディスクＩ／Ｏ処理部２０２が、各対象ＨＤＤ１６からリード対象のデータを読み出し、その読み出したリード対象のデータをキャッシュ領域に格納する。
【０２３２】
図２３は、図２２におけるＳ２２０８に相当する処理のフローチャートである。
【０２３３】
図２２におけるＳ２２０８では、本処理が実施される。
【０２３４】
Ｓ２３０１では、ディスクＩ／Ｏ処理部２０２が、キャッシュ領域上に置かれたライト対象のデータに対応した各データ単位を用いて、新水平パリティを生成し、その生成した新水平パリティをキャッシュ領域に書き込む。尚、データ単位の構成によっては（例えば、一つのデータ要素しか更新されないといった場合には）、図２２におけるＳ２２０５の処理と同様の処理によって、新水平パリティが生成されてもよい。
【０２３５】
Ｓ２３０２では、ディスクＩ／Ｏ処理部２０２が、キャッシュ領域に記憶されているデータ単位の数が、所定数（一つの垂直パリティに対応するデータ単位数）以上か否かを判定する。所定数以上のデータ単位がキャッシュ領域上に置かれている場合は（Ｓ２３０２：ＹＥＳ）、本処理はＳ２３０３に移行し、所定数以上のデータ単位がキャッシュ領域上に置かれていない場合は（Ｓ２３０２：ＮＯ）、本処理はＳ２３０５に移行する。
【０２３６】
Ｓ２３０３では、ディスクＩ／Ｏ処理部２０２が、キャッシュ領域に記憶されている複数のデータ単位に含まれるデータ要素を基に新垂直パリティを生成し、キャッシュ領域に書き込む。なお、もし、データ単位の数が、一つの垂直パリティに対応するデータ単位の数で割り切れない場合（余りが生じる場合）、余りの分のデータ単位については、Ｓ２３０５、Ｓ２３０６で示された処理によって新垂直パリティを生成する。あるいは今後新たに書き込まれるデータ単位或いは既存のデータ単位等を利用して、新垂直パリティが生成されても良い。
【０２３７】
Ｓ２３０５では、ディスクＩ／Ｏ処理部２０２が、旧データ要素と、旧垂直パリティとをＨＤＤ１６から読み出す。
【０２３８】
Ｓ２３０６では、図２２におけるＳ２２０６の処理と同様に、ディスクＩ／Ｏ処理部２０２が、新データ要素と、旧データ要素と、旧垂直パリティとから、それらの排他的論理和をとることによって、新垂直パリティを生成し、その生成した新垂直パリティをキャッシュ領域に書き込む。
【０２３９】
Ｓ２３０７では、図２２におけるＳ２２０７の処理と同様に、ディスクＩ／Ｏ処理部２０２が、対象物理アドレスを指定した、新データ要素、新水平パリティ及び新垂直パリティのライト要求を、各対象ＨＤＤ１６に送信することにより、新データ要素、新水平パリティ及び新垂直パリティを書込む。
【０２４０】
図２４は、第二及び第三のデータ保護方式でのリストアの処理のフローチャートである。
【０２４１】
図２４の説明では、図２０の場合と同様に、ＲＡＩＤグループに一つの完全障害ＨＤＤがあるとする。図２４の処理において、ディスクＩ／Ｏ処理部２０２は、完全障害ＨＤＤにある全ストライプのデータ要素及び水平パリティをリストアする。
【０２４２】
ディスクＩ／Ｏ処理部２０２は、ＨＤDの先頭から何番目のストライプ列であるかを表すカウント値（以下、「カウント値Ａ」と記載）を、キャッシュ／制御メモリ１４に記録する。
【０２４３】
Ｓ２４０１では、ディスクＩ／Ｏ処理部２０２が、カウント値Aを０にセットする。
【０２４４】
Ｓ２４０２では、ディスクＩ／Ｏ処理部２０２が、カウント値Ａから特定されるストライプ列における完全障害ストライプ以外の全てのストライプから、データ要素及び水平パリティ（水平パリティは含まない場合もある）を読み出す。
【０２４５】
Ｓ２４０３では、ディスクＩ／Ｏ処理部２０２が、Ｓ２４０２における読み出しが成功したか（すべて読み出せたか）どうかを判断する。その読み出しが成功した場合は（Ｓ２４０３：ＹＥＳ）、本処理はＳ２４０５に移行し、その読み出しに失敗した場合は（Ｓ２４０３：ＮＯ）、本処理はＳ２４０７に移行する。読み出しが失敗した場合は、対象ストライプ列に障害ストライプが二つ以上あることを意味する。
【０２４６】
Ｓ２４０４では、ディスクＩ／Ｏ処理部２０２が、Ｓ２４０２にて読み出したデータ要素及び水平パリティを用いて、完全障害ストライプのデータ要素又は水平パリティを生成し、そのデータ要素又は水平パリティを、スペアのＨＤＤ１６における、完全障害ＨＤＤ１６における、カウント値Ａに対応した完全障害ストライプの位置と同じ位置にあるストライプに書き込む。
【０２４７】
Ｓ２４０５では、ディスクＩ／Ｏ処理部２０２が、カウント値Ａに１を加える。
【０２４８】
Ｓ２４０６では、ディスクＩ／Ｏ処理部２０２が、カウント値Ａが、ＨDD内のストライプ列数と等しくなっているか否かを判断する。カウント値Ａがストライプ列数となっている場合は（Ｓ２４０６：ＹＥＳ）、本処理はＳ２４０９に終了し、カウント値Ａがストライプ列数となっていない場合は（Ｓ２４０６：ＮＯ）、本処理はＳ２４０２に移行する。
【０２４９】
Ｓ２４０７では、ディスクＩ／Ｏ処理部２０２が、対象ストライプ列の障害ストライプのうちリストアされていないものをひとつ選択する。
【０２５０】
Ｓ２４０８では、ディスクＩ／Ｏ処理部２０２が、選択された障害ストライプに対応するデータ要素又は水平パリティをリストアする。この処理については、後に図２５を参照して説明する。なお、対象ストライプ列における障害ストライプの数がひとつであれば、本処理に代えて、Ｓ２４０５における処理により当該障害ストライプに対応するデータ要素又は水平パリティをリストアしてもよい。
【０２５１】
Ｓ２４０９では、ディスクＩ／Ｏ処理部２０２が、対象ストライプ列の障害ストライプが全てリストアされたか判断する。全てリストアされていれば（Ｓ２４０９：ＹＥＳ）、本処理はＳ２４０５に移行する。全てリストアされていなければ（Ｓ２４０９：ＮＯ）、本処理はＳ２４０７に移行する。
【０２５２】
図２５は、図２４におけるＳ２４０８に相当するフローチャートである。
【０２５３】
図２４におけるＳ２４０８では、本処理が実施される。
【０２５４】
Ｓ２５０１では、ディスクＩ／Ｏ処理部２０２が、対象ストライプ（Ｓ２４０２において実施した読み出しにおいて読み出しに失敗したデータ要素又は水平パリティに対応する障害ストライプ、あるいは、完全障害ストライプ）に対応するデータ要素及び水平パリティをリストアするために必要な全てのデータ要素及び垂直パリティを対応するストライプから読み出す。
【０２５５】
Ｓ２５０２では、ディスクＩ／Ｏ処理部２０２が、Ｓ２５０１における読み出しが成功したかどうかを判断する。その読み出しが成功した場合は（Ｓ２５０２：ＹＥＳ）、本処理はＳ２５０３に移行し、その読み出しに失敗した場合は（Ｓ２５０２：ＮＯ）、本処理はエラー終了する。
【０２５６】
Ｓ２５０３では、ディスクＩ／Ｏ処理部２０２が、Ｓ２５０２にて読み出したデータ要素及び垂直パリティを用いて、データ要素及び水平パリティを生成する。そして、生成したデータ要素又は水平パリティが、完全障害ＨＤＤ内のデータ要素又は水平パリティであれば、生成したデータ要素又は水平パリティを、スペアのＨＤＤ１６における、カウント値Ａに対応した完全障害ストライプの位置と同じ位置になるストライプに書き込む。生成したデータ要素又は水平パリティが、完全障害ＨＤＤ内のデータ要素又は水平パリティでなければ、当該データ要素又は水平パリティが属するＨＤＤ１６の交替セクタに書き込む。
【０２５７】
図２６は、第二のデータ保護方式での垂直パリティが格納されたＨＤＤのリストアの処理のフローチャートである。
【０２５８】
図２６の説明では、垂直ＲＡＩＤグループを構成するＨＤＤ１６のうち、垂直パリティを格納するＨＤＤ１６が完全障害ＨＤＤになったと仮定する。図２６の処理において、ディスクＩ／Ｏ処理部２０２が、完全障害ＨＤＤにある全ストライプの垂直パリティをリストアする。
【０２５９】
ディスクＩ／Ｏ処理部２０２は、HDDの先頭から何番目のストライプ列であるかを表すカウント値（以下、「カウント値Ａ」と記載）を、キャッシュ／制御メモリ１４に記録する。
【０２６０】
Ｓ２６０１では、ディスクＩ／Ｏ処理部２０２が、カウント値Ａを０にセットする。
【０２６１】
Ｓ２６０２では、カウント値Ａに対応するストライプ列の垂直パリティをリストアするために必要となる、当該垂直パリティが属する垂直ＲＡＩＤグループ内の全てのデータ要素を読み出す。
【０２６２】
Ｓ２６０３では、ディスクＩ／Ｏ処理部２０２が、Ｓ２６０２における読み出しが成功したかどうかを判断する。その読み出しが成功した場合は（Ｓ２６０３：ＹＥＳ）、本処理はＳ２６０４に移行し、その読み出しに失敗した場合は（Ｓ２６０３：ＮＯ）、本処理はエラー終了する。
【０２６３】
Ｓ２６０４では、Ｓ２６０２で読み出した全データ要素から垂直パリティを生成し、生成した垂直パリティを、スペアのＨＤＤ１６における、カウント値Ａに対応したストライプに書き込む。
【０２６４】
Ｓ２６０５では、ディスクＩ／Ｏ処理部２０２が、カウント値Ａに１を加える。
【０２６５】
Ｓ２６０６では、ディスクＩ／Ｏ処理部２０２が、カウント値Ａが、ＨDD内のストライプ列数と等しくなっているか否かを判断する。カウント値Ａがストライプ列数となっている場合は（Ｓ２６０６：ＹＥＳ）、本処理は終了し、カウント値Ａがストライプ列数となっていない場合は（Ｓ２６０６：ＮＯ）、本処理はＳ２６０１に移行する。
【０２６６】
図２７は、第四のデータ保護方式に基づいたＩ／Ｏ処理のフローチャートである。
【０２６７】
図１９の説明と同様に、図２７，２８の説明では、Ｉ／Ｏ要求の対象とされたＬＤＥＶを「対象ＬＤＥＶ」と言い、対象ＬＤＥＶを含むＶＤＥＶに属する各ＨＤＤを「対象ＨＤＤ」と言い、ホスト４からのＩ／Ｏ要求で指定されているＬＢＡで特定されるボリューム領域が対応付けられるＨＤＤ上のアドレスを「対象物理アドレス」と呼ぶ。
【０２６８】
Ｓ２７０１の処理は、図１９におけるＳ２０１と同じ処理である。即ち、Ｓ２７０１では、ホスト４からのＩ／Ｏ要求で指定されているＬＢＡが対象物理アドレスに変換される。
【０２６９】
Ｓ２７０２では、図１９におけるＳ２０２の処理と同様に、ディスクＩ／Ｏ処理部２０２が、受けたＩ／Ｏ要求が、ライト要求であるかリード要求であるかを判断する。ライト要求である場合には（Ｓ２７０２：ＹＥＳ）、本処理はＳ２７０３に移行し、リード要求である場合には（Ｓ２７０２：ＮＯ）、本処理はＳ２７０９に移行する。
【０２７０】
Ｓ２７０３では、ディスクＩ／Ｏ処理部２０２が、キャッシュ領域上に置かれたライト対象のデータの書込みに関係するストライプ（例えば、ライト対象のデータが分割されたデータ単位、それに対応するＱパリティや圧縮パリティ等の書込み先のストライプ）を、他からアクセスできないようにロックする。
【０２７１】
Ｓ２７０４では、ディスクＩ／Ｏ処理部２０２が、ライト対象データのサイズが、データ単位のサイズ以上であるか否かを判定する。ライト対象データのサイズがデータ単位のサイズよりも小さい場合は（Ｓ２７０４：ＮＯ）、本処理はＳ２７０５に移行し、ライト対象データのサイズがデータ単位のサイズ以上である場合は（Ｓ２７０４：ＹＥＳ）、本処理はＳ２７０８に移行する。
【０２７２】
Ｓ２７０５では、ディスクＩ／Ｏ処理部２０２が、データ単位における新データ要素と、その新データ要素に対応する旧データ要素と、旧Ｑパリティとから、新Ｑパリティを生成し、その生成した新Ｑパリティをキャッシュ領域に書き込む。尚、この処理が行われる前に、旧データ要素と旧Ｑパリティとがキャッシュ領域に格納されていない場合、ＨＤＤ１６から読み出される。
【０２７３】
Ｓ２７０６では、ディスクＩ／Ｏ処理部２０２が、新データ要素と、旧データ要素と、旧圧縮パリティとから、新圧縮パリティを生成し、その生成した新圧縮パリティをキャッシュ領域に書き込む。尚、この処理が行われる前に、旧圧縮パリティがキャッシュ領域に格納されていない場合、ＨＤＤ１６から読み出される。
【０２７４】
Ｓ２７０７では、ディスクＩ／Ｏ処理部２０２が、対象物理アドレスを指定した、新データ要素、新Ｑパリティ及び新圧縮パリティのライト要求を、各対象ＨＤＤ１６に送信することにより、新データ要素、新Ｑパリティ及び新圧縮パリティを書込む。尚、ディスクＩ／Ｏ処理部２０２は、このＳ２７０７の処理を行わずに、例えば、所定のタイミングで、キャッシュ領域に書き込まれている更新後の全ての新データ要素、新Ｑパリティ及び新圧縮パリティを同時に、ＨＤＤ１６に書き込むようにしてもよい。
【０２７５】
Ｓ２７０８では、ディスクＩ／Ｏ処理部２０２が、ライト対象のデータがデータ単位以上の場合のライト処理を行う。この処理については、後に図２８を参照して詳述する。
【０２７６】
Ｓ２７０９では、図１９におけるＳ２０８の処理と同様に、ディスクＩ／Ｏ処理部２０２が、各対象ＨＤＤ１６からリード対象のデータを読み出し、その読み出したリード対象のデータをキャッシュ領域に格納する。
【０２７７】
図２８は、図２７におけるＳ２７０８に相当する処理のフローチャートである。
【０２７８】
図２７におけるＳ２７０８では、本処理が実施される。
【０２７９】
Ｓ２８０１では、ディスクＩ／Ｏ処理部２０２が、キャッシュ領域上に置かれたライト対象のデータに対応した各データ単位を用いて、新Ｑパリティを生成し、その生成した新Ｑパリティをキャッシュ領域に書き込む。尚、データ単位の構成によっては（例えば、一つのデータ要素しか更新されないといった場合には）、図２７におけるＳ２７０５の処理と同様の処理によって、新Ｑパリティが生成されてもよい。
【０２８０】
Ｓ２８０２では、ディスクＩ／Ｏ処理部２０２が、キャッシュ領域に記憶されているデータ単位の数が、所定数（一つの圧縮パリティに対応するデータ単位数）以上か否かを判定する。所定数以上のデータ単位がキャッシュ領域上に置かれている場合は（Ｓ２８０２：ＹＥＳ）、本処理はＳ２８０３に移行し、所定数以上のデータ単位がキャッシュ領域上に置かれていない場合は（Ｓ２８０２：ＮＯ）、本処理はＳ２８０４に移行する。
【０２８１】
Ｓ２８０３では、ディスクＩ／Ｏ処理部２０２が、キャッシュ領域に記憶されている複数のデータ単位に対応した複数のＰパリティを生成し、生成した複数のＰパリティを一つに圧縮した新圧縮パリティを生成し、キャッシュ領域に書き込む。なお、もし、データ単位の数が、一つの圧縮パリティに対応するデータ単位の数で割り切れない場合（余りが生じる場合）、余りの分のデータ単位については、Ｓ２８０５、Ｓ２８０６で示された処理によって新圧縮パリティを生成する。あるいは今後新たに書き込まれるデータ単位或いは既存のデータ単位等を利用して、新圧縮パリティが生成されても良い。
【０２８２】
Ｓ２８０４では、ディスクＩ／Ｏ処理部２０２が、旧データ要素と、旧圧縮パリティとをＨＤＤ１６から読み出す。
【０２８３】
Ｓ２８０５では、図２７におけるＳ２７０６の処理と同様に、ディスクＩ／Ｏ処理部２０２が、新データ要素と、旧データ要素と、旧圧縮パリティとから、それらの排他的論理和をとることによって、新圧縮パリティを生成し、その生成した新圧縮パリティをキャッシュ領域に書き込む。
【０２８４】
Ｓ２８０６では、図２７におけるＳ２７０７の処理と同様に、ディスクＩ／Ｏ処理部２０２が、対象物理アドレスを指定した、新データ要素、新Ｑパリティ及び新圧縮パリティのライト要求を、各対象ＨＤＤ１６に送信することにより、新データ要素、新Ｑパリティ及び新圧縮パリティを書込む。
【０２８５】
図２９は、第四のデータ保護方式でのリストアの処理のフローチャートである。
【０２８６】
図２９の説明では、図２０の場合と同様に、ＲＡＩＤグループに一つの完全障害ＨＤＤがあるとする。図２９の処理において、ディスクＩ／Ｏ処理部２０２は、完全障害ＨＤＤにある全ストライプのデータ要素、Ｑパリティ及び圧縮パリティをリストアする。
【０２８７】
ディスクＩ／Ｏ処理部２０２は、ＨＤDの先頭から何番目のストライプ列であるかを表すカウント値（以下、「カウント値Ａ」と記載）を、キャッシュ／制御メモリ１４に記録する。
【０２８８】
Ｓ２９０１では、ディスクＩ／Ｏ処理部２０２が、カウント値Aを０にセットする。
【０２８９】
Ｓ２９０２では、ディスクＩ／Ｏ処理部２０２は、カウント値Ａから特定されるストライプ列における、完全障害ＨＤＤの障害ストライプ（以下、完全障害ストライプ）が、圧縮パリティが書き込まれる特定ストライプであるか否かを判定する。カウント値Ａに対応した完全障害ストライプが、特定ストライプである場合は（Ｓ２９０２：ＹＥＳ）、本処理はＳ２９１０に移行する。カウント値Ａに対応した完全障害ストライプが、特定ストライプでない場合は（Ｓ２９０２：ＮＯ）、本処理はＳ２９０３に移行する。
【０２９０】
Ｓ２９０３では、ディスクＩ／Ｏ処理部２０２が、カウント値Ａから特定されるストライプ列における完全障害ストライプ以外の全てのストライプから、データ要素及びＱパリティ（Ｑパリティは含まない場合もある）を読み出す。
【０２９１】
Ｓ２９０４では、ディスクＩ／Ｏ処理部２０２が、Ｓ２９０３における読み出しが成功したか（すべて読み出せたか）どうかを判断する。その読み出しが成功した場合は（Ｓ２９０４：ＹＥＳ）、本処理はＳ２９０５に移行し、その読み出しに失敗した場合は（Ｓ２９０４：ＮＯ）、本処理はＳ２９０８に移行する。
【０２９２】
Ｓ２９０５では、ディスクＩ／Ｏ処理部２０２が、Ｓ２９０３にて読み出したデータ要素及びＱパリティを用いて、完全障害ストライプのデータ要素又はＱパリティを生成し、そのデータ要素又はＱパリティを、スペアのＨＤＤ１６における、完全障害ＨＤＤ１６における、カウント値Ａに対応した完全障害ストライプの位置と同じ位置にあるストライプに書き込む。
【０２９３】
Ｓ２９０６では、ディスクＩ／Ｏ処理部２０２が、カウント値Ａに１を加える。
【０２９４】
Ｓ２９０７では、ディスクＩ／Ｏ処理部２０２が、カウント値Ａが、ＨDD内のストライプ列数と等しくなっているか否かを判断する。カウント値Ａがストライプ列数となっている場合は（Ｓ２９０７：ＹＥＳ）、本処理は終了し、カウント値Ａがストライプ列数となっていない場合は（Ｓ２９０７：ＮＯ）、本処理はＳ２９０２に移行する。
【０２９５】
Ｓ２９０８では、ディスクＩ／Ｏ処理部２０２が、Ｓ２９０３で行った読み出しのうち、失敗した読み出しの個数が一個かどうかを判定する。一個であれば、Ｓ２９０９に移行し、一個より多ければエラー終了する。
【０２９６】
Ｓ２９０９では、ディスクＩ／Ｏ処理部２０２が、完全障害ストライプ、及び、Ｓ２９０３で読み出しに失敗したデータ要素又はＱパリティに対応するストライプのデータをリストアする。この処理については、後に図３０を参照して詳述する。
【０２９７】
Ｓ２９１０では、ディスクＩ／Ｏ処理部２０２が、カウント値Ａに対応するストライプの圧縮パリティを生成するために必要な全てのデータ要素をリードし、圧縮パリティを生成する。
【０２９８】
Ｓ２９１１では、ディスクＩ／Ｏ処理部２０２が、生成された圧縮パリティをスペアのＨＤＤ１６の、カウント値Ａに対応するストライプと同じ位置のストライプに格納する。
【０２９９】
図３０は、第四のデータ保護方式における、図２９のＳ２９０９に相当する処理のフローチャートである。
【０３００】
第四のデータ保護方式における、図２９のＳ２９０９では、本処理が実施される。
【０３０１】
Ｓ３００１では、ディスクＩ／Ｏ処理部２０２が、対象ストライプ列が属するデータ単位に対応したＰパリティを生成するために必要なデータ単位及び圧縮パリティを読み出す。
【０３０２】
Ｓ３００２では、ディスクＩ／Ｏ処理部２０２が、Ｓ３００１における読み出しが成功したかどうかを判定する。その読み出しが成功した場合は（Ｓ３００２：ＹＥＳ）、本処理はＳ３００３に移行し、その読み出しが失敗した場合は（Ｓ３００２：ＮＯ）、本処理はエラー終了する。
【０３０３】
Ｓ３００３では、ディスクＩ／Ｏ処理部２０２が、Ｓ３００１にて読み出したデータ単位及び圧縮パリティから、それらの排他的論理和をとることによって、対象ストライプが属するデータ単位に対応したＰパリティを生成する。
【０３０４】
Ｓ３００４では、ディスクＩ／Ｏ処理部２０２が、Ｓ２９０３にて読み出したデータ要素及びＱパリティと、Ｓ３００３にて生成したＰパリティとから、ＲＡＩＤ６と同様の手法で、二つの障害ストライプにおける二つのデータ要素をリストアする。
【０３０５】
Ｓ３００５では、ディスクＩ／Ｏ処理部２０２が、Ｓ３００４にてリストアされたデータ要素又はＱパリティを、スペアのＨＤＤ１６上の、完全障害ＨＤＤ１６における完全障害ストライプの位置と同じ位置にあるストライプと、別のスペアＨＤＤ１６上の、一部障害ＨＤＤ１６における一部障害ストライプの位置と同じ位置にあるストライプとに、それぞれ書き込む。なお、Ｓ３００４にてリストアされたデータ要素又はＱパリティが一部障害HDD16にあったものである場合、リストアされたデータ要素またはQパリティの書込み先は、スペアＨＤＤに代えて、一部障害ＨＤＤの交替セクタであっても良い。
【０３０６】
上述した本発明の実施形態は、本発明の説明のための例示であり、本発明の範囲をその実施形態にのみ限定する趣旨ではない。本発明は、その要旨を逸脱することなく、その他の様々な態様でも実施することができる。例えば、上記の例では、一ストライプ列を構成するストライプがＨＤＤと１対１に対応しているが、一ストライプ列を構成する各二以上のストライプが一つのＨＤＤに対応しても良い。また、第四のデータ保護方式では、Ｑパリティに代えて、Ｐパリティが、データ単位毎に記録され、複数のＰパリティに代えて、複数のＱパリティが、一つの圧縮パリティに圧縮されてＲＡＩＤグループに書き込まれても良い。
【図面の簡単な説明】
【０３０７】
【図１】本発明の一実施形態に係るストレージシステムの物理的な構成を示す図である。
【図２】本実施形態に係るストレージシステム１の論理的な構成例を示す図である。
【図３】ＲＡＩＤグループを構成する複数のＨＤＤと論理ボリュームとの関係性の一例を示す図である。
【図４】ＲＡＩＤ構成テーブルの構成例を示す図である。
【図５】ＶＤＥＶ構成テーブルの構成例を示す図である。
【図６】ＬＵ構成テーブルの構成例を示す図である。
【図７】Ｄｉｓｋ  Ｇｒｏｕｐ構成テーブルの構成例を示す図である。
【図８】ＨＤＤ障害チェックテーブルの構成例を示す図である。
【図９】ストライプ障害チェックテーブルの構成例を示す図である。
【図１０】第一のデータ保護方式での書込みの説明図である。
【図１１】第一のデータ保護方式でのリストアの説明図である。
【図１２】第二のデータ保護方式での書込みの説明図である。
【図１３】第二のデータ保護方式でのリストアの説明図である。
【図１４】第三のデータ保護方式での書込みの説明図である。
【図１５】第三のデータ保護方式でのリストアの説明図である。
【図１６】第四のデータ保護方式での書込みの説明図である。
【図１７】第四のデータ保護方式でのリストアの説明図である。
【図１８】ストレージシステムがホストからＩ／Ｏ要求を受信した場合にコマンド処理部が行う処理のフローチャートである。
【図１９】第一のデータ保護方式に基づいたＩ／Ｏ処理のフローチャートである。
【図２０】第一のデータ保護方式でのリストアの処理のフローチャートである。
【図２１】図２０におけるＳ３０４に相当する処理のフローチャートである。
【図２２】第二及び第三のデータ保護方式に基づいたＩ／Ｏ処理のフローチャートである。
【図２３】図２２におけるＳ２２０８に相当する処理のフローチャートである。
【図２４】第二及び第三のデータ保護方式でのリストアの処理のフローチャートである。
【図２５】図２４におけるＳ２４０７に相当する処理のフローチャートである。
【図２６】第二のデータ保護方式での垂直パリティが格納されたＨＤＤのリストアの処理のフローチャートである。
【図２７】第四のデータ保護方式に基づいたＩ／Ｏ処理のフローチャートである。
【図２８】図２７におけるＳ２７０８に相当する処理のフローチャートである。
【図２９】第四のデータ保護方式でのリストアの処理のフローチャートである。
【図３０】図２９におけるＳ２９０９に相当する処理のフローチャートである。
【図３１】ＲＡＩＤグループを構成する複数のＨＤＤと論理ボリュームとの関係性の別の例を示す図である。
【図３２】図３２Ａは、ＲＡＩＤ６でのＲＡＩＤグループに含まれるデータの容量に関する説明図である。図３２Ｂは、水平ＲＡＩＤグループ及び垂直ＲＡＩＤグループの両方がＲＡＩＤ４に対応したＲＡＩＤグループの場合のＨＤＤの種類を示す。
【符号の説明】
【０３０８】
１…ストレージシステム、４…ホストコンピュータ、５…ＦＣスイッチ、６…管理端末、１１…ＣＨＡ、１３…ＤＫＡ、１４…キャッシュ／制御メモリ、１５…内部スイッチ、１６…ＨＤＤ、２０１…コマンド処理部、２０２…ディスクＩ／Ｏ処理部、２０３…論理物理変換部
【図１】
2009187139.tif 000003
【図２】
2009187139.tif 000004
【図３】
2009187139.tif 000005
【図４】
2009187139.tif 000006
【図５】
2009187139.tif 000007
【図６】
2009187139.tif 000008
【図７】
2009187139.tif 000009
【図８】
2009187139.tif 000010
【図９】
2009187139.tif 000011
【図１０】
2009187139.tif 000012
【図１１】
2009187139.tif 000013
【図１２】
2009187139.tif 000014
【図１３】
2009187139.tif 000015
【図１４】
2009187139.tif 000016
【図１５】
2009187139.tif 000017
【図１６】
2009187139.tif 000018
【図１７】
2009187139.tif 000019
【図１８】
2009187139.tif 000020
【図１９】
2009187139.tif 000021
【図２０】
2009187139.tif 000022
【図２１】
2009187139.tif 000023
【図２２】
2009187139.tif 000024
【図２３】
2009187139.tif 000025
【図２４】
2009187139.tif 000026
【図２５】
2009187139.tif 000027
【図２６】
2009187139.tif 000028
【図２７】
2009187139.tif 000029
【図２８】
2009187139.tif 000030
【図２９】
2009187139.tif 000031
【図３０】
2009187139.tif 000032
【図３１】
2009187139.tif 000033
【図３２】
2009187139.tif 000034