(57)【要約】【課題】格納装置群にデータが分散配置されたストレージシステムにて、データの再構築処理を複数実行する場合での再構築処理の高速化を図る技術を提供する。【解決手段】ストレージ制御装置は、冗長化データを構成する各構成データが並列して格納装置群の各格納装置に格納される単位であるストライプ単位で構成データが分散して格納される格納装置群のうち、いずれかの格納装置を除く対象格納装置群から取得した複数のストライプのそれぞれについて、構成データの復元を行なう再構築処理を複数起動させ、再構築処理毎に、対象格納装置群の各格納装置へのアクセス負荷に応じて、次に再構築処理を行うストライプを決定し、再構築処理毎に、対象格納装置群から、決定したストライプに対応する構成データを取得し、再構築処理を実行して、取得した構成データから、除かれた格納装置に格納された構成データを復元することにより、上記課題の解決を図る。【選択図】図１
2015191594.tif 000002
【特許請求の範囲】
【請求項１】
冗長化されたデータを構成する構成データが並列して格納装置群の各格納装置に格納される単位であるストライプ単位で該構成データを分散して格納する該格納装置群のうち、いずれかの格納装置を除く対象格納装置群から取得した複数のストライプのそれぞれについて、該構成データの復元を行なう再構築処理を複数起動させる起動部と、
再構築処理毎に、前記対象格納装置群の各格納装置へのアクセス負荷に応じて、次に該再構築処理を行うストライプを決定する決定部と、
前記再構築処理毎に、前記対象格納装置群から、決定した該ストライプに対応する構成データを取得し、前記再構築処理を実行して、取得した該構成データから、除かれた前記格納装置に格納された構成データを復元する実行部と、
を備えることを特徴とするストレージ制御装置。
【請求項２】
前記決定部は、前記再構築処理毎に、前記対象格納装置群の各格納装置へのアクセス数に基づいて算出した該各格納装置へのアクセス負荷に応じて、次に該再構築処理を行うストライプを決定する
ことを特徴とする請求項１に記載のストレージ制御装置。
【請求項３】
前記決定部は、再構築処理毎に、前記対象格納装置群に含まれる各格納装置に対するアクセス数に基づいて、前記対象格納装置群に対するアクセス数の分散値または標準偏差を算出し、該分散値または該標準偏差に応じて次に該再構築処理を行うストライプを決定する
ことを特徴とする請求項２に記載のストレージ制御装置。
【請求項４】
前記各格納装置は、前記ストライプに対応する前記構成データを格納する第１領域、または、前記ストライプに対応する、該冗長化データの復元の際に用いる第２領域を含み、
前記第１領域と前記第２領域は、前記ストライプと前記格納装置との論理的な組み合わせから、実際に格納する格納装置を特定する格納先特定情報に基づいて、ストライプ毎に分散されて、前記格納装置群の各格納装置に保持されている
ことを特徴とする請求項１〜３のうちいずれか１項に記載のストレージ制御装置。
【請求項５】
前記格納先特定情報は、ガロア理論またはガロア拡大理論に基づいて作成されている
ことを特徴とする請求項４に記載のストレージ制御装置。
【請求項６】
コンピュータに、
冗長化されたデータを構成する各構成データが並列して格納装置群の各格納装置に格納される単位であるストライプ単位で該構成データを分散して格納する該格納装置群のうち、いずれかの格納装置を除く対象格納装置群から取得した複数のストライプのそれぞれについて、該構成データの復元を行なう再構築処理を複数起動し、
再構築処理毎に、前記対象格納装置群の各格納装置へのアクセス負荷に応じて、次に該再構築処理を行うストライプを決定し、
前記再構築処理毎に、前記対象格納装置群から、決定した該ストライプに対応する構成データを取得し、前記再構築処理を実行して、取得した該構成データから、除かれた前記格納装置に格納された構成データを復元する
処理を実行させることを特徴とするストレージ制御プログラム。
【請求項７】
コンピュータが、
冗長化されたデータを構成する各構成データが並列して格納装置群の各格納装置に格納される単位であるストライプ単位で該構成データを分散して格納する該格納装置群のうち、いずれかの格納装置を除く対象格納装置群から取得した複数のストライプのそれぞれについて、該構成データの復元を行なう再構築処理を複数起動し、
再構築処理毎に、前記対象格納装置群の各格納装置へのアクセス負荷に応じて、次に該再構築処理を行うストライプを決定し、
前記再構築処理毎に、前記対象格納装置群から、決定した該ストライプに対応する構成データを取得し、前記再構築処理を実行して、取得した該構成データから、除かれた前記格納装置に格納された構成データを復元する
ことを特徴とするストレージ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置に関する。
【背景技術】
【０００２】
ストレージ装置では、データを複数のハードディスク（磁気ディスク装置）に分散することで、性能と耐障害性を確保するＲＡＩＤ（Redundant Array of Inexpensive Disks）技術が用いられている。ストレージ装置は、ＲＡＩＤコントローラにより、ディスクへのデータ配置や、データの冗長化（多重化）等のＲＡＩＤ技術を実現する。
【０００３】
ＲＡＩＤグループに属するディスクが故障した場合、冗長化されたデータの冗長性を利用して故障したディスク上のデータを復元するリビルド（rebuild）という復旧技術がある。このようなリビルド技術には、例えば、以下の技術がある。
【０００４】
第１の技術として、次の技術がある（例えば、特許文献１）。負荷計測手段が、各ディスク装置のそれぞれのビジー率を計測する。負荷制御手段が、このビジー率に基づいて復旧処理の開始および中止を指令する。復旧処理手段は、復旧元または復旧先のホスト装置による使用頻度が高いときには復旧処理を中止し、また、ホスト装置からのアクセスが一定頻度を下回ったときに復旧処理を再開する。その結果、ホストの入出力（Ｉ／Ｏ）の速度を低下させずに復旧処理を行うことができる。
【０００５】
第２の技術として、次の技術がある（例えば、特許文献２）。２種類のパリティデータと複数のデータ復旧方式と有するディスクアレイ装置で、単一磁気ディスク障害の場合、縮退した磁気ディスクと最大負荷の磁気ディスクとをデータ復旧処理への使用から外しえるデータ復旧方式を選択する。これにより、ディスクアレイ装置上の磁気ディスクに障害が発生した場合、他の磁気ディスクに対するアクセス負荷によるデータ復旧処理の遅延を少なくすることができる。
【０００６】
第３の技術として、２パリティ構成を有するディスクアレイ装置において、１ＨＤＤ障害時のコレクションリード時に復元元の使用パリティ及びデータをローテーションする技術がある（例えば、特許文献３）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０００−２７６３０５号公報
【特許文献２】特開２００５−３８２７１号公報
【特許文献３】特開２００６−２６０４４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ストレージシステムは、ＲＡＩＤを形成するディスクを集合であるＲＡＩＤグループを含む。ＲＡＩＤグループの各ディスクに、ある単位の長さごとにデータを振り分けて読み書きすることをストライピングという、また、ストライピングによって、各ディスクに振り分けられたデータブロックは、一度に読み書きする対象となり、そのようなＲＡＩＤグループの各ディスクから並列して読み書きされるデータブロックの集合をストライプという。
【０００９】
近年、ディスク装置（以下、「ディスク」と称する）の大容量化が進んでおり、リビルドにより１ディスクのデータの復元が完了するまでの時間が著しく増加している。そのため、リビルドの高速化に対する要求が高まっている。
【００１０】
リビルドの高速化の１つとして、ストライプ毎に、冗長化されたデータ及びホットスペア（ＨＳ）領域を分散させることが考えられる。
【００１１】
ＲＡＩＤグループのいずれかのディスクが故障した場合、リビルドを実行すると、他のディスクのデータを読み出して、その故障したディスクが保有していたデータを復元し、復元したデータをＨＳ領域に書き込む。したがって、リビルドの際には、各ディスクに、ＲＥＡＤアクセスまたはＷＲＩＴＥアクセスのアクセス負荷がかかることになる。
【００１２】
ところが、ストライプ毎に冗長化されたデータ及びＨＳ領域を分散させても、複数のストライプについて同時にリビルド処理を行うと、いずれかのディスクへアクセス負荷が偏ってしまう場合がある。その結果、そのアクセス負荷が高いディスクがネックとなってリビルドのスループットが低下するおそれがある。
【００１３】
本発明は、一側面として、格納装置群にデータが分散配置されたストレージシステムにて、データの再構築処理を複数実行する場合での再構築処理の高速化を図る技術を提供する。
【課題を解決するための手段】
【００１４】
ストレージ制御装置は、起動部、決定部、実行部を含む。起動部は、ストライプ単位で該構成データが分散して格納される格納装置群のうち、いずれかの格納装置を除く対象格納装置群から取得した複数のストライプのそれぞれについて、構成データの復元を行なう再構築処理を複数起動させる。ストライプは、冗長化されたデータを構成する各構成データが並列して格納装置群の各格納装置に格納される単位である。決定部は、再構築処理毎に、対象格納装置群の各格納装置へのアクセス負荷に応じて、次に再構築処理を行うストライプを決定する。実行部は、再構築処理毎に、対象格納装置群から、決定したストライプに対応する構成データを取得し、再構築処理を実行して、取得した構成データから、除かれた格納装置に格納された構成データを復元する。
【発明の効果】
【００１５】
本発明の一側面によれば、格納装置群にデータが分散配置されたストレージシステムにて、データの再構築処理を複数実行する場合での再構築処理の高速化を図ることができる。
【図面の簡単な説明】
【００１６】
【図１】本実施形態におけるストレージシステムのブロック図の一例である。
【図２】リビルド技術の一例を示す。
【図３】高速リビルド技術の一例である。
【図４】ＲＡＩＤグループに対して、冗長セット＃０，＃１をそれぞれ、ディスク#０〜ディスク＃２またはディスク＃３〜ディスク＃５に偏重させて格納する場合のデータ配置例を示す。
【図５】ＲＡＩＤグループに対して、ストライプ単位で、冗長セット及びＨＳ領域を分散配置させる場合のデータ配置例を示す。
【図６】本実施形態における変換テーブルの一例を示す。
【図７】複数のストライプを同時にリビルドする場合における各ディスクのアクセスセグメント数の偏りを説明するための図である。
【図８】本実施形態におけるストレージシステムの一例を示す。
【図９】本実施形態における冗長セットの構成、及び冗長セットとＨＳ領域の配置の一例を示す。
【図１０】本実施形態における変換テーブルによりＲＥＡＤするディスクを決定することを説明するための図である。
【図１１】本実施形態における変換テーブルによりＷＲＩＴＥするディスクを決定することを説明するための図である。
【図１２】本実施形態におけるリビルド起動処理フローを示す。
【図１３】本実施形態におけるリビルド個別処理（Ｓ３）のフローを示す。
【図１４】本実施形態における、復元のためのＲＥＡＤの場合に変換テーブルによりＲＥＡＤするディスクを決定することを説明するための図である。
【図１５】本実施形態における対象ストライプ決定処理（Ｓ１１）のフローを示す。
【図１６】本実施形態における作業用ストライプのディスク負荷判定を説明するための図である。
【図１７】本実施形態におけるガロア体による分散配置を説明するための図（その１）である。
【図１８】本実施形態におけるガロア体による分散配置を説明するための図（その２）である。
【図１９】本実施形態におけるガロア体による分散配置を説明するための図（その３）である。
【図２０】本実施形態におけるガロア体による分散配置を説明するための図（その４）である。
【図２１】本実施形態におけるガロア拡大体による分散配置を説明するための図（その１）である。
【図２２】本実施形態におけるガロア拡大体による分散配置を説明するための図（その２）である。
【発明を実施するための形態】
【００１７】
図１は、本実施形態におけるストレージシステムのブロック図の一例である。ストレージシステム１は、ストレージ制御装置２、格納装置群６を含む。ストレージ制御装置２は、起動部３、決定部４、実行部５を含む。ストレージ制御装置２の一例として、ＣＭ１２が挙げられる。
【００１８】
起動部３は、ストライプ単位で該構成データが分散して格納される格納装置群６のうち、いずれかの格納装置６ｂを除く対象格納装置群６ｃから取得した複数のストライプのそれぞれについて、構成データの復元を行なう再構築処理を複数起動させる。ストライプは、冗長化されたデータを構成する各構成データが並列して格納装置群６の各格納装置６ａ，６ｂに格納される単位である。起動部３の一例として、リビルド制御部１６として機能するＣＰＵ１４が挙げられる。
【００１９】
決定部４は、再構築処理毎に、対象格納装置群６ｃの各格納装置６ａへのアクセス負荷に応じて、次に再構築処理を行うストライプを決定する。決定部４の一例として、リビルド制御部１６として機能するＣＰＵ１４が挙げられる。
【００２０】
実行部５は、再構築処理毎に、対象格納装置群６ｃから、決定したストライプに対応する構成データを取得し、再構築処理を実行して、取得した構成データから、除かれた格納装置６ｂに格納された構成データを復元する。
【００２１】
このように構成することにより、格納装置群にデータが分散配置されたストレージシステムにて、データの再構築処理を複数実行する場合での再構築処理の高速化を図ることができる。すなわち、ストレージシステムでのリビルドの際の各ディスクへのアクセス負荷を平準化して、リビルドの高速化を図ることができる。
【００２２】
決定部４は、再構築処理毎に、対象格納装置群６ｃの各格納装置６ａへのアクセス数に基づいて算出した該各格納装置６ａへのアクセス負荷に応じて、次に該再構築処理を行うストライプを決定する。例えば、決定部４は、再構築処理毎に、対象格納装置群６ｃに含まれる各格納装置６ａに対するアクセス数に基づいて、対象格納装置群６ｃに対するアクセス数の分散値または標準偏差を算出する。決定部４は、再構築処理毎に、算出した分散値または標準偏差に応じて次に再構築処理を行うストライプを決定する。
【００２３】
このように構成することにより、各リビルド処理においてディスクへのアクセス負荷が均等となるように動的に次回のリビルド処理の対象となるストライプを決定することができる。
【００２４】
また、各格納装置６ａ，６ｂは、ストライプに対応する構成データを格納する第１領域、または、ストライプに対応する、冗長化データの復元の際に用いる第２領域を含む。第１領域と第２領域は、格納先特定情報に基づいて、ストライプ毎に分散されて、格納装置群６の各格納装置６ａ，６ｂに保持されている。格納先特定情報は、ストライプと格納装置６ａ，６ｂとの論理的な組み合わせから、実際に格納する格納装置６ａ，６ｂを特定する情報である。例えば、格納先特定情報は、ガロア理論またはガロア拡大理論に基づいて作成されている。格納先特定情報の一例としては、変換テーブル１０が挙げられる。
【００２５】
このように構成することにより、ＲＡＩＤグループを構成する各ディスクにデータを効率的に分散して配置することができる。
【００２６】
以下では、より具体的な例を用いて、本実施形態について説明する。
リビルド技術の一例として、図２に示すリビルド技術がある。図２（Ａ）は、ＲＡＩＤ１において、ミラーリングされた２つのディスクの１つが故障した場合のリビルドを説明するための図である。図２（Ｂ）は、ＲＡＩＤ５において、いずれかのディスクが故障した場合のリビルドを説明するための図である。
【００２７】
しかしながら、図２のリビルド技術では、原理上、１ディスク装置のスループット以上の性能は見込めない。例えば、図２（Ａ）に示すように、ＲＡＩＤ１のリビルドの場合はディスクに対するＲＥＡＤ及びＷＲＩＴＥが共にボトルネックとなる。１ディスクからデータをＲＥＡＤして１ディスクにそのデータをＷＲＩＴＥするので、ＲＥＡＤ及びＷＲＩＴＥ共に１ディスクのスループット以上の性能向上は見込めない。
【００２８】
また、図２（Ｂ）に示すように、ＲＡＩＤ５の場合は、データをＷＲＩＴＥするディスクが１ディスクのため、ＷＲＩＴＥがボトルネックとなる。また、図２（Ｂ）において、ＲＥＡＤするディスクは３台のディスクから並列にＲＥＡＤできるように見えるが、１００ＭＢ（MegaByte）のデータを復元するために３台のディスクから１００ＭＢずつ、計３００ＭＢのデータをＲＥＡＤする必要がある。そのため、１００ＭＢ／ｓでＷＲＩＴＥするためには、各ディスク単位で見ると１００ＭＢ／ｓでＲＥＡＤする必要がある。
【００２９】
前述のようにディスクのスループットが劇的に向上することはないという前提において、上記のリビルドの制御の延長では、１ディスクのスループットの壁を超えることができないため、そのスループット以上の性能向上は見込めない。
【００３０】
図２のリビルドと比べて数倍のリビルド時間の短縮を計るためには、リビルドの制御におけるＲＥＡＤ／ＷＲＩＴＥを複数のディスクから並列に行う必要がある。そこで、図３に示すように、リビルドを高速化する手法が考えられる。データが分散配置されていない場合の各ディスクのＲＥＡＤ性能及びＷＲＩＴＥ性能は１００ＭＢ／ｓであるとする。
【００３１】
図３は、高速リビルド技術の一例である。図３のリビルド技術は、多数のディスクに、複数のＲＡＩＤグループ上のデータ及びホットスペア（ＨＳ）領域を所定の単位サイズで分散させる技術である。所定の単位サイズのデータを、以下では、「データセグメント」または「セグメント」と称する。
【００３２】
ＨＳ領域は、故障したディスクに格納されたデータセグメントを復元した場合に、その復元したデータセグメントを格納する領域である。このようにデータセグメント及びＨＳ領域の分散を行うことにより、１ディスク故障時にリビルドのＲＥＡＤ／ＷＲＩＴＥに関与するディスクを増やすことができる。
【００３３】
図３では、ＲＡＩＤ５（２＋１）を７ディスクに分散させる例が示されている。ここで、ＲＡＩＤ５（２＋１）という表記は、ＲＡＩＤ５において、分散させた２つのデータセグメントに対して、１つのパリティが存在するデータ構成（以下、冗長データセットまたは冗長セットと称する）を示す。なお、データが分散配置されていない場合の各ディスクのＲＥＡＤ性能及びＷＲＩＴＥ性能は１００ＭＢ／ｓであるとする。
【００３４】
ＲＡＩＤ５（２＋１）の冗長セットを均等に、ＲＡＩＤグループを形成する複数のディスクに分散させた場合、各ディスクについて、「データ領域：ＨＳ領域＝２：１」となる。この場合、２つのデータセグメントを読み出して欠損したデータを復元（リビルド）し、その復元データを１つのＨＳ領域に書き込むから、「ＲＥＡＤ性能：ＷＲＩＴＥ性能＝２：１」となる。したがって、各ディスクのＲＥＡＤ性能は、１００×（２／３）≒６６ＭＢ／ｓ、ＷＲＩＴＥ性能は１００×（１／３）≒３３ＭＢ／ｓとなる。よって、７台のディスクのうちの１台が故障し、リビルドを実行する場合、ＲＥＡＤ及びＷＲＩＴＥのうち、ＷＲＩＴＥがボトルネックとなるので、各ディスクのＲＥＡＤ及びＷＲＩＴＥ性能は３３ＭＢ／ｓとみなすことができる。この場合、ＲＡＩＤ５グループ全体のリビルド性能は、３３ＭＢ／ｓ×６（ディスク数）≒２００ＭＢ／ｓとなる。
【００３５】
このように、ＲＡＩＤを構成するディスク数が増えると、リビルドの高速化が可能になる。例えば、１９ディスクでは、リビルド性能は６００ＭＢ／ｓとなる。したがって、リビルド性能の向上にあたり、ＲＡＩＤを構成するディスクへのデータ配置は重要な要素と考えられる。そこで、図４及び図５を例に、ＲＡＩＤグループに対するデータ配置について検討する。
【００３６】
図４は、ＲＡＩＤグループに対して、冗長セット＃０，＃１をそれぞれ、ディスク#０〜ディスク＃２またはディスク＃３〜ディスク＃５に偏重させて格納する場合のデータ配置例を示す。
【００３７】
図４において、ディスク#０〜ディスク＃２（冗長セット＃０）、ディスク＃３〜ディスク＃５（冗長セット＃１）はそれぞれＲＡＩＤ５（２＋１）を構成している。ディスク＃６は、冗長セット＃０及び冗長セット＃１のためのホットスペアディスクである。
【００３８】
図４において、各セグメントに記載された数字がデータの振分順を表す。Ｐｘ（ｘ：整数）は、同一ストライプにおけるＰｘの直近の２つデータの整合性を保証するためのパリティである。また、図４の各セグメントは１２８ＬＢＡ（Logical Block Addressing）のサイズで構成されている。
【００３９】
図５は、ＲＡＩＤグループに対して、ストライプ単位で、冗長セット及びＨＳ領域を分散配置させる場合のデータ配置例を示す。図５では、図４に示すデータ配置を、ストライプ単位で分散配置させている。これにより、高速リビルドのためのデータ配置を構成することができる。
【００４０】
また、図４のデータ配置から図５のデータ分散配置への変換は、図６に示す変換テーブルに従って行う。なお、図５では、ストライプ毎の冗長セットを構成するセグメントは隣接するディスク間で連続して配置されているが、これに限定されない。すなわち、ストライプ毎の冗長セットを構成するセグメントは隣接するディスク間で連続して配置されていなくてもよい。すなわち、ストライプ毎の冗長セットを構成するセグメントはそれぞれ、ストライプ内において、変換テーブルに従って、または任意で分散されていてもよい。
【００４１】
図６は、本実施形態における変換テーブルの一例を示す。図４のＲＡＩＤ配置におけるディスクＮｏ．が、変換テーブル１０の列（ディスク＃）に対応し、ストライプＮｏ．が変換テーブル１０の行（ストライプ＃）に対応する。その列と行が交差するセルに格納された値が図５の同一ストライプにおけるディスクＮｏ．に対応する。したがって、図４のディスク＃１、ストライプ＃０は、変換テーブル１０により、図５に示すように、同一のストライプ＃０におけるディスク＃５に変換される。
【００４２】
変換テーブル１０は、後述するように、ガロア拡大体の理論によって事前に作成されるテーブルである。変換テーブル１０は、ガロア拡大体の理論によって、どのディスクが故障してもリビルドのための各ディスクの負荷は規定のストライプ数の範囲内において同一となるように作成されている。規定のストライプ数はＲＡＩＤグループを構成するディスク数によって決まる。例えば、ＲＡＩＤ５（２＋１）×２とＨＳ×１を７ディスクに分散させる場合には、４２ストライプとなる。
【００４３】
リビルド高速化のためのデータ分散配置においては、規定のストライプ（例えば、７ディスクの構成では４２ストライプ）の範囲では、ディスク故障によるリビルド実施時の各ディスクのＲＥＡＤ／ＷＲＩＴＥ負荷が均等となるようなデータ配置をしている。
【００４４】
リビルドの実動作においては４２ストライプを同時に復元するわけではなく、ディスクへの負荷を考慮して、実際には数ストライプずつ処理していくことなる。例えば、リビルドの動作として、先頭のストライプから数ストライプずつ、順番に処理することが考えられる。
【００４５】
しかしながら、リビルドの実動作において、処理中のストライプの組み合わせによってはディスク負荷が偏ってしまっている。これについて、図７を用いて説明する。
【００４６】
図７は、複数のストライプを同時にリビルドする場合における各ディスクのアクセスセグメント数の偏りを説明するための図である。例えば、図７において、故障ディスクがディスク＃０の場合に、５ストライプ（ストライプ＃０〜＃４）を現在リビルド処理中とすると、各ＲＥＡＤ／ＷＲＩＴＥアクセスされるセグメントは図７の太枠の部分になる。
【００４７】
リビルド時の各ストライプでは、復元対象のセグメントが属する冗長セットのデータ及びパリティはＲＥＡＤされ、復元されたデータは、格納先のＨＳ領域へＷＲＩＴＥされる。その為、復元対象のセグメントと同一の冗長セットのデータ、パリティのセグメントはＲＥＡＤ対象となる。ＨＳのセグメントはＷＲＩＴＥ対象となる。これに従って各ディスクのアクセスセグメント数を計算すると、各ディスクのアクセスセグメント数は、ディスク＃１は５回、ディスク＃２は３回、ディスク＃３は２回、ディスク＃４は１回、ディスク＃５は２回、ディスク＃６は３回となる。このように、ディスク＃１〜＃６において、１セグメントアクセス〜５セグメントアクセスと、ディスクアクセス回数に偏りがある。
【００４８】
したがって、リビルド高速化の為のデータ分散配置において、リビルドの実動作を想定して数ストライプずつ先頭からデータ復元を実施した場合、各数ストライプの処理におけるディスクアクセス負荷は偏ってしまう。その結果、アクセス負荷が高いディスクがネックとなってリビルドのスループットが低下する。
【００４９】
そこで、本実施形態では、冗長セットとＨＳ領域がＲＡＩＤグループを構成する各ディスクに分散配置されたＲＡＩＤ構成にて、複数ストライプのリビルド処理を同時に行う場合、各リビルド処理において、次の処理が実行される。すなわち、あるストライプのリビルド処理にて、他のストライプのリビルド処理を考慮して、現時点での各ディスクの負荷量が計算され、各ディスクの負荷がバランスするような未処理のストライプが次の処理対象のストライプとして選択され、リビルドが実行される。
【００５０】
これにより、リビルドの処理において動的に各ディスクの負荷を分散させる。ディスクの負荷が分散することによって、効率よく各ディスクのスループットを活かすことができ、リビルドの処理速度が向上する。 
【００５１】
本実施形態について、さらに、より詳細に説明する。
図８は、本実施形態におけるストレージシステムの一例を示す。ストレージシステム１１は、複数のディスク２２を搭載したディスク記憶システムである。ホストコンピュータ（以下、ホストと称する）２４からディスク２２へのアクセスに関して、冗長化のために、各ディスク２２に対して、２本のアクセスパスが存在している。またデータ自体についても、ＲＡＩＤ技術を用いて複数台のディスクにデータが分散されて、冗長化した状態で保存されている。
【００５２】
ストレージシステム１１は、ホストコンピュータ（以下、ホストと称する）２４、２つのコントローラモジュール（ＣＭ）１２、ドライブエンクロージャ（ＤＥ）２１を含む。ストレージシステム１１は、ＤＥ２１と、ホスト２４とが、ＣＭ１２を介して接続されている。
【００５３】
ホスト２４は、ＣＭ１２と通信をして、ＤＥ２１が有するディスク２２からデータを読み出したり、ディスク２２にデータを書き込んだりする。なお、図８では、１つのホスト２４を図示しているが、複数のホスト２４が、各ＣＭ１２に接続されていてもよい。
【００５４】
各ＣＭ１２は、ディスク２２の動作制御を行う。各ＣＭ１２は、ストレージ制御装置として機能する。ストレージシステム１１は、ＣＭ１２を２以上有することで、ストレージ制御装置の冗長性を確保する。
【００５５】
ＣＭ１２は、アクセス指示情報として入出力（Ｉ／Ｏ）コマンドをＤＥ２１に送信し、ディスク２２の記憶領域に対するデータの入出力指令を行う。また、入出力指令からアクセス監視時間が経過しても応答が得られないときは、ＣＭ１２は、このＩ／Ｏ処理を中断するアボート指示コマンドをＤＥ２１に送信する。
【００５６】
ＣＭ１２は、チャネルアダプタ（ＣＡ）１３、中央演算装置（ＣＰＵ：Central Processing Unit）１４、記憶部１８、デバイスアダプタ（ＤＡ）１９を含む。ＣＡ１３、ＣＰＵ１４、記憶部１８、ＤＡ１９は、内部バスを介して接続されている。
【００５７】
ＣＡ１３は、ホスト２４とのインターフェース（Ｉ／Ｆ）である各ＳＣＳＩ（Small Computer System Interface）ポートを制御するコンポーネントである。ＣＰＵ１４は、ＣＭ１２全体を制御する。
【００５８】
記憶部１８は、例えば、キャッシュメモリ、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）等の情報を記録するデバイスである。記憶部１８には、ＣＭ１２を動作させるために用いるデータ、及び本実施形態に係るプログラム、変換テーブル１０及び本実施形態で用いるデータ等が格納される。
【００５９】
変換テーブル１０は、図６で説明したガロア拡大体を利用した変換テーブルであるが、これに限定されない。すなわち、変換テーブルは、ストライプ毎に、データセグメント及びＨＳ領域をＲＡＩＤグループの各ディスクに分散させるために、論理的なセグメント配置と物理的なセグメント配置とが対応付けられたテーブルであればよい。例えば、変換テーブル１０は、論理的なストライプ＃とディスク＃とから、実際にセグメントを配置する先となるストライプ＃とディスク＃が一意に決定できる仕組みを有するものであればよい。
【００６０】
ＤＡ１９は、ＤＥ２１と接続するためのインターフェースであり、二重化されてＤＥ２１と接続されている。ＣＰＵ１４は、ＤＡ１９を介してＤＥ２１との間でデータの送受信を行う。
【００６１】
ルート（ＲＴ）２０は、ＣＭ１２間通信の経路である。
ＤＥ２１は、複数のディスク２２を格納するコンポーネントであり、冗長性を考慮したＲＡＩＤ構成を有する。なお、ディスク２２は、ハードディスクドライブ（ＨＤＤ）に限らず、例えばＳＳＤ（Solid State Drive）や、光磁気ディスク等であってもよい。また、本実施形態では、記憶装置の一例として、ディスク２２を用いたが、これに限定されず、ランダムアクセス及びシーケンシャルアクセスのいずれのアクセス方法も可能な記憶装置であればよい。
【００６２】
ＲＡＩＤグループ２３は、高速なリビルドを実現する為のデータ配置を行うディスク２２の集合である。高速リビルドのためのデータ配置として、ＲＡＩＤグループをまたがってストライピングした冗長データ（ＲＡＩＤ５であれば、ＲＡＩＤ５＋０）と、１台のホットスペアに対応するＨＳ領域を、ＲＡＩＤグループを構成する各ディスク２２に分散して配置する。
【００６３】
ＣＰＵ１４は、データ復元部１５、リビルド制御部１６、コマンド発行制御部１７として機能する。データ復元部１５は、リビルドの各処理において複数のディスク２２からＲＥＡＤされたデータの排他的論理和（ＸＯＲ）を算出することにより、データ復元を行う。リビルド制御部１６は、リビルドの開始、終了、またはリビルドの次の処理の処理範囲を決定する。コマンド発行制御部１７は、各ディスク２２へのコマンドの発行を制御する。また、コマンド発行制御部１７は、各ディスク２２へ発行したＲＥＡＤコマンドの回数及びＷＲＩＴＥコマンドの回数（ＲＥＡＤ／ＷＲＩＴＥアクセス回数）を計測し、その計測数を記憶部１８に格納する。
【００６４】
次に、ＣＭ１２の具体的な動作について説明する。
ユーザの指示に基づいて、ＲＡＩＤ作成、ボリューム作成の順に操作がなされると、高速リビルドが可能なデータ配置が作成され、ホストＩ／Ｏが受付可能となる。その後、ＲＡＩＤを構成しているディスクのうちの１つが故障すると、リビルド動作が開始される。
【００６５】
（１）ＲＡＩＤ作成
高速リビルドが可能なデータ分散配置を行うＲＡＩＤは、新規ＲＡＩＤ種として定義する。新規ＲＡＩＤ種をＲＡＩＤ５−ＦＲ（ＦＲ：Ｆａｓｔ  Ｒｅｂｕｉｌｄ）と呼称する。ユーザが、ＲＡＩＤ種としてＲＡＩＤ５−ＦＲを指定し、ＲＡＩＤグループを構成するディスクを選択して作成指示することで、高速リビルドが可能なＲＡＩＤグループが作成される。
【００６６】
ＲＡＩＤグループ作成の時点では、ＣＭ１２は、新規ＲＡＩＤ種とＲＡＩＤグループを構成するディスクとを結びつけ、記憶部１８上にＲＡＩＤについての構成データのテーブルを作成する。なお、この時点では、ディスク２２上に図５のデータ配置はまだされていない。
【００６７】
（２）ボリューム作成
ユーザが、上記（１）で作成したＲＡＩＤグループに対して、ボリュームサイズを指定した上でボリューム作成指示を出すと、ＣＭ１２において、指定したボリュームサイズに基づいて、ボリュームフォーマットが実行される。
【００６８】
ボリュームフォーマットの動作としては、各ＬＢＡにチェックコードが付加され、図５のデータ配置に基づいて、各データ用セグメントに０データが書かれる。ここでチェックコードはＬＢＡのデータの正当性を保証するための情報である。
【００６９】
パリティ用セグメントは、そのパリティ用セグメントが属するストライプで、かつそのパリティ用セグメントが属する冗長セット上のデータ用セグメントを排他的論理和（ＸＯＲ）することにより生成される。ここで、図９を用いて、冗長セットの構成を説明する。
【００７０】
図９は、本実施形態における冗長セットの構成、及び冗長セットとＨＳ領域の配置の一例を示す。例えば、図９のストライプ＃０について、パリティ用セグメントＰ０は、そのパリティ用セグメントが属するストライプでかつそのパリティ用セグメントが属する冗長セット上のデータ用セグメント０，１を排他的論理和（ＸＯＲ）することで生成される。同様に、パリティ用セグメントＰ１は、そのパリティ用セグメントが属するストライプでかつそのパリティ用セグメントが属する冗長セット上のデータ用セグメント２，３を排他的論理和（ＸＯＲ）することで生成される。
【００７１】
ＨＳ用セグメントについては、ボリュームフォーマットの時点では何も書かれない。図９の場合、ＨＳ０，ＨＳ１にはこの時点では何も書かれない。
【００７２】
（３）ホスト  Ｉ／Ｏ
ボリューム作成により、高速リビルドの為のデータ分散配置が行われると、ＣＭ１２は、ディスク２２に対する、ホスト２４からの入力出（Ｉ／Ｏ）アクセスを受け付けることができる。
【００７３】
ホスト２４からのＲＥＡＤ／ＷＲＩＴＥアクセスに関しては、ＣＭ１２は、次を行う。ＣＭ１２は、まずホスト２４からの入力出アクセスのアクセス先の論理ＬＢＡから、アクセス先のストライプ範囲を計算し、各ストライプの論理的なデータ配置におけるＲＥＡＤ／ＷＲＩＴＥするセグメントを決定する。ここで、論理的なデータ配置とは、変換テーブル１０に基づいて物理的にＲＡＩＤに配置する前の、論理的なデータ配置であり、例えば、図４に示すような、冗長セットを偏重させて並列させたデータ配置を論理的に形成したものに相当する。
【００７４】
ＣＭ１２は、各ストライプの論理的なデータ配置上でＲＥＡＤ／ＷＲＩＴＥするセグメントに基づいて、変換テーブル１０に従って実際にＲＥＡＤ／ＷＲＩＴＥするディスク２２を決定し、その決定したディスク２２にデータセグメントをＲＥＡＤ／ＷＲＩＴＥする。
【００７５】
図１０は、本実施形態における変換テーブルによりＲＥＡＤするディスクを決定することを説明するための図である。図１０（Ａ）は、変換テーブル１０により変換する前のストライプ単位の論理的なデータ配置例を示す。図１０（Ｂ）は、変換テーブル１０による変換後のストライプ単位の物理的なデータ配置例を示す。この例では、ホスト２４からのＲＥＡＤアクセスの範囲は０〜５１２ＬＢＡ、ＲＥＡＤされるセグメントは、セグメント０，１，２，３とする。
【００７６】
ＣＭ１２は、まずホスト２４からの入力出の論理ＬＢＡ（０〜５１２ＬＢＡ）からストライプ範囲を計算し、図１０（Ａ）に示すように、各ストライプの論理的なデータ配置上にてＲＥＡＤするセグメントを決定する。
【００７７】
次に、ＣＭ１２は、各ストライプの論理的なデータ配置上でＲＥＡＤするセグメント０，１，２，３に基づいて、図６の変換テーブル１０に従って実際にＲＥＡＤするディスクを決定する。図１０（Ａ）において、セグメント０は、（ストライプ＃０，ディスク＃０）で示されるので、ＣＭ１２は、変換テーブル１０の（ストライプ＃０，ディスク＃０）を参照すると、（ストライプ＃０，ディスク＃０）＝ディスク＃０である。この場合、ＣＭ１２は、ストライプ＃０にあるセグメント０へアクセスするためにＲＥＡＤするディスクを、図１０（Ｂ）に示すように、同じストライプ＃０のディスク＃０に決定する。
【００７８】
また、図１０（Ａ）において、セグメント１は、（ストライプ＃０，ディスク＃１）で示されるので、ＣＭ１２は、図６の変換テーブル１０の（ストライプ＃０，ディスク＃１）を参照すると、（ストライプ＃０，ディスク＃１）＝ディスク＃６である。この場合、ＣＭ１２は、ストライプ＃０にあるセグメント１へアクセスするためにＲＥＡＤするディスクを、図１０（Ｂ）に示すように、同じストライプ＃０のディスク＃６に決定する。セグメント２，３についても、同様にして、ＲＥＡＤするディスクを決定する。
【００７９】
図１１は、本実施形態における変換テーブルによりＷＲＩＴＥするディスクを決定することを説明するための図である。図１１（Ａ）は、変換テーブル１０により変換する前のストライプ単位の論理的なデータ配置例を示す。図１１（Ｂ）は、変換テーブル１０による変換後のストライプ単位の物理的なデータ配置例を示す。ホスト２４からのＲＥＡＤアクセスの範囲は０〜５１２ＬＢＡ、ＷＲＩＴＥされるセグメントは、セグメント０，１，Ｐ０，２，３，Ｐ１とする。
【００８０】
ＣＭ１２は、まずホスト２４からの入力出の論理ＬＢＡ（０〜５１２ＬＢＡ）からストライプ範囲を計算し、図１１（Ａ）に示すように、各ストライプの論理的なデータ配置上にてＷＲＩＴＥするセグメントを決定する。
【００８１】
次に、ＣＭ１２は、各ストライプの論理的なデータ配置上でＷＲＩＴＥするセグメント０，１，Ｐ０，２，３，Ｐ１に基づいて、図６の変換テーブル１０に従って実際にＷＲＩＴＥするディスクを決定する。なお、ＷＲＩＴＥの場合はパリティもＷＲＩＴＥ対象になる。
【００８２】
図１１（Ａ）において、セグメント０は、（ストライプ＃０，ディスク＃０）で示されるので、ＣＭ１２は、図６の変換テーブル１０の（ストライプ＃０，ディスク＃０）を参照すると、（ストライプ＃０，ディスク＃０）＝ディスク＃０である。この場合、ＣＭ１２は、セグメント０についてのＲＥＡＤするディスクを、図１１（Ｂ）に示すように、同じストライプ＃０のディスク＃０に決定する。
【００８３】
また、図１１（Ａ）において、セグメント１は、（ストライプ＃０，ディスク＃１）で示されるので、ＣＭ１２は、変換テーブル１０の（ストライプ＃０，ディスク＃１）を参照すると、（ストライプ＃０，ディスク＃１）＝ディスク＃６である。この場合、ＣＭ１２は、セグメント１についてのＲＥＡＤするディスクを、図１１（Ｂ）に示すように、同じストライプ＃０のディスク＃６に決定する。
【００８４】
また、図１１（Ａ）において、セグメントＰ０は、（ストライプ＃０，ディスク＃２）で示されるので、ＣＭ１２は、変換テーブル１０の（ストライプ＃０，ディスク＃２）を参照すると、（ストライプ＃０，ディスク＃２）＝ディスク＃５である。この場合、ＣＭ１２は、セグメントＰ０についてのＲＥＡＤするディスクを、図１１（Ｂ）に示すように、同じストライプ＃０のディスク＃５に決定する。
【００８５】
次に、ＣＭ１２による本実施形態に係る処理について説明する。
図１２は、本実施形態におけるリビルド起動処理フローを示す。ＲＡＩＤ５−ＦＲを形成するディスクのうち、１つのディスクの故障が発生し、リビルド制御部１６がその故障によるエラー情報を検出すると、リビルド制御部１６はリビルドを開始する。リビルドの起動処理としては、図１２のフローで各ストライプにおける故障ディスク上のデータの復元を行うリビルド個別処理が並列で起動させる。
【００８６】
まず、リビルド制御部１６は、ＣＭ１２の記憶部１８から、パラメータである同時処理ストライプ数Ｔを読み出す（Ｓ１）。ここで、同時処理ストライプ数Ｔは、１度に並列で処理するストライプ数であり、ＣＭ１２の記憶部１８に予め設定されている。
【００８７】
リビルド制御部１６は、同時処理ストライプ数Ｔの数分、リビルド個別処理を呼び出し（Ｓ２）、ビルド個別処理のそれぞれを起動させる（Ｓ３）。Ｓ３の処理については、図１３〜図１５で詳述する。
【００８８】
このように、リビルド制御部１６により、Ｔ個のリビルド個別処理はそれぞれ独立して、ストライプ単位でリビルドを順次行う。例えば、リビルド対象のストライプ数の４２で、Ｔ＝４の場合には、４つのリビルド個別処理により、４２ストライプの全てが処理されるまで、並列で４ストライプずつリビルド個別処理が行われる。
【００８９】
図１３は、本実施形態におけるリビルド個別処理（Ｓ３）のフローを示す。リビルド個別処理（Ｓ３）では、以下のフローでデータ復元が行われる。
【００９０】
リビルド制御部１６は、リビルド対象のストライプに関して、現時点での各ディスク２２の負荷量を計算し、各ディスクの負荷がバランスする１つのストライプを実際にリビルド対象のストライプ（対象ストライプ）として決定する（Ｓ１１）。Ｓ１１の処理については、図１５で詳述する。
【００９１】
コマンド発行制御部１７は、その対象ストライプについて、欠損したデータセグメントを復元するために、欠損したデータセグメントが属する冗長セットに含まれる他のデータセグメントが格納されたディスクにＲＥＡＤコマンドを発行する。ここで、欠損したデータセグメントとは、故障したディスクに格納されていたデータセグメントを表す。その結果、コマンド発行制御部１７は、その対象ストライプについて、欠損したデータセグメントが属する冗長セットに含まれる他のデータセグメントを読み出す（Ｓ１２）。
【００９２】
データ復元部１５は、読み出されたデータセグメント同士の排他的論理和（ＸＯＲ）を計算して、対象ストライプに関する、復元対象となるデータを生成する（欠損したデータを復元する）（Ｓ１３）。
【００９３】
コマンド発行制御部１７は、対象ストライプにおける復元したデータの書き込み先のセグメント（ＨＳ領域）を有するディスクにＷＲＩＴＥコマンドを発行し、復元したデータをそのＨＳ領域にＷＲＩＴＥする（Ｓ１４）。
【００９４】
リビルド制御部１６は、復元が完了したＬＢＡを更新する（Ｓ１５）。
ディスクグループ２３の末尾まで復元が完了するまで、Ｓ１１〜Ｓ１５の処理が繰り返される（Ｓ１６）。
【００９５】
Ｓ１２〜Ｓ１４において、復元のためのＲＥＡＤ／ＷＲＩＴＥ処理については、リビルド制御部１６は、フォーマットやＩ／Ｏと同じように変換テーブル１０に従ってＲＥＡＤ／ＷＲＩＴＥ先のセグメントを決定する。このＲＥＡＤ／ＷＲＩＴＥ先のセグメントの決定について、図１４を用いて説明する。
【００９６】
図１４は、本実施形態における、復元のためのＲＥＡＤの場合に変換テーブルによりＲＥＡＤするディスクを決定することを説明するための図である。図１４（Ａ）は、変換テーブル１０により変換する前のストライプ単位の論理的なデータ配置例を示す。図１４（Ｂ）は、変換テーブル１０により変換する前のストライプ単位の論理的なデータ配置例を示す。
【００９７】
図１４（Ｂ）において、ディスク＃０が故障した場合、その故障ディスク＃０に保持されていたデータを復元する必要がある。図１４（Ｂ）において、ディスク＃０にはセグメント０，５が保持されていたので、セグメント０，５のデータを復元することが必要である。
【００９８】
対象ストライプがストライプ＃０の場合、セグメント０、セグメント１、セグメントＰ０は同一の冗長セットに含まれるから、セグメント０のデータは、セグメント１のデータとセグメントＰ０のデータの排他的論理和（ＸＯＲ）により生成される。そこで、ＣＭ１２は、ストライプ＃０の論理的なデータ配置上でＲＥＡＤするセグメント１，Ｐ０に対して、図６の変換テーブル１０に従って実際にＲＥＡＤするディスクを決定する。
【００９９】
図１４（Ａ）において、（ストライプ＃０，ディスク＃１）で示されるセグメント１は、図６の変換テーブル１０に従えば、（ストライプ＃０，ディスク＃１）＝ディスク＃６である。また、（ストライプ＃０，ディスク＃２）で示さるセグメントＰ０は、変換テーブル１０に従えば、（ストライプ＃０，ディスク＃２）＝ディスク＃５である。この場合、ＣＭ１２は、ストライプ＃０に関して、セグメント１，Ｐ０についてのＲＥＡＤするディスクを、図１４（Ｂ）に示すように、同じストライプ＃０のディスク＃６及びディスク＃５に決定する。
【０１００】
ＣＭ１２は、ストライプ＃０に関して、実際のディスク＃５，＃６からセグメント１、Ｐ０を読み出し、セグメント１のデータとセグメントＰ０のデータの排他的論理和（ＸＯＲ）を計算することによりセグメント０のデータを復元する。
【０１０１】
次に、ＣＭ１２は、復元したセグメント０のデータをＨＳ領域に書き込む。図１４（Ａ）において、（ストライプ＃０，ディスク＃６）で示さるＨＳ領域（ＨＳ０）は、変換テーブルｑ０に従えば、（ストライプ＃０，ディスク＃６）＝ディスク＃１である。この場合、ＣＭ１２は、復元したデータを書き込むディスクを、図１４（Ｂ）に示すように、同じストライプであるストライプ＃０のディスク＃１に決定する。
【０１０２】
図１５は、本実施形態における対象ストライプ決定処理（Ｓ１１）のフローを示す。ＣＭ１２は、対象ストライプを、以下のように決定する。ＣＭ１２は、未処理ストライプの先頭から、処理対象とするストライプを順次検索する。ＣＭ１２は、その検索したストライプに関してアクセスする場合の各ディスクの負荷と、現在処理中の他のリビルド処理における各ディスクの負荷を総合して、ディスクの負荷の分散度合いに関する評価値を算出する。ＣＭ１２は、末尾のストライプまで検索して最も評価値が低いストライプをリビルド対象のストライプ（対象ストライプ）とする。なお、本実施形態では、評価値は、後述するように、小さいほど優れているものとする。図１５について詳述する。
【０１０３】
まず、リビルド制御部１６は、未処理の先頭ストライプを、作業用ストライプとして定義する（Ｓ２１）。
【０１０４】
リビルド制御部１６は、作業用ストライプについて評価値を算出する（Ｓ２２）。Ｓ２２の処理の詳細については、図１６で説明する。
【０１０５】
Ｓ２２で算出した作業用ストライプの評価値が、それより前に計算したストライプの評価値よりも低い場合（Ｓ２３）、リビルド制御部１６は、作業用ストライプを候補ストライプとし（Ｓ２４）、Ｓ２５の処理へ進む。Ｓ２２で算出した作業用ストライプの評価値が、それより前に計算したストライプの評価値以上である場合（Ｓ２３で「Ｎｏ」）、Ｓ２５の処理へ進む。
【０１０６】
末尾のストラップまで処理が完了していない場合（Ｓ２５で「Ｎｏ」）、リビルド制御部１６は、現在の作業用ストライプの次のストライプを、作業用ストライプとし（Ｓ２６）、Ｓ２２の処理を行う。末尾のストラップまで処理が完了するまで、リビルド制御部１６は、Ｓ２２〜Ｓ２５を繰り返す。
【０１０７】
末尾のストラップまで処理が完了すると、リビルド制御部１６は、候補ストライプを、リビルド対象ストラップに決定する（Ｓ２７）。
【０１０８】
図１６は、本実施形態における作業用ストライプのディスク負荷判定を説明するための図である。各ディスクの負荷の分散度合いを表す評価値は、以下のようにして計算される。ストライプ毎のセグメントは、図１６のように分散配置されているとする。なお、図１６において、セグメントＮｏ．とディスクＮｏ．で特定されるセルがセグメントを表し、そのセル内の番号はセグメントを特定する番号である。セグメント０〜２、セグメント３〜５、セグメント１６４，１６７，Ｐ８２、セグメント１６５，１６６，Ｐ８３はそれぞれ冗長セットを示す。セグメント６，ＨＳ４１はＨＳ領域を示す。
【０１０９】
リビルド制御部１６は、他のリビルド個別処理にて処理されたストライプ（太枠）、評価対象のストライプ（破線枠）について、故障ディスク＃０を除いて、ディスク＃１〜＃６の各ディスクに対するＲＥＡＤ／ＷＲＩＴＥアクセス回数をカウントする。上述したように、各ディスクに対するＲＥＡＤ／ＷＲＩＴＥアクセス回数は、コマンド発行制御部１７によって計測され、記憶部１８に格納されている。
【０１１０】
次に、リビルド制御部１６は、以下の式を用いて、故障ディスクを除く全ディスクで、カウントしたアクセス回数の平均を算出する。
【０１１１】
【数１】
2015191594.tif 000003
【０１１２】
リビルド制御部１６は、算出した平均に基づいて、以下の式を用いて、故障ディスクを除く全ディスクに対するＲＥＡＤ／ＷＲＩＴＥアクセス回数の分散を算出し、その算出した分散値を評価値とする。
【０１１３】
【数２】
2015191594.tif 000004
【０１１４】
分散値は、その値が小さいほど、よりアクセス負荷のバランスが取れているといえる。
なお、ここでは、分散値を評価値としたが、これに限定されず、標準偏差等の他の統計的方法を用いて算出した値を評価値としてもよい。
【０１１５】
ＨＳ領域のセグメントにリビルドしたデータの書き込み完了後、故障したディスクが交換される。すると、リビルド制御部１６は、交換されたディスクに対して、ＨＳ領域のセグメントから交換されたディスクの所定のセグメントにデータを書き戻す処理（Ｃｏｐｙ  ｂａｃｋ）を行う。
【０１１６】
上述の通り、リビルド制御部１６は、複数のリビルド処理を並列で行う際、リビルド処理毎に、各格納装置へのアクセス負荷に応じて次にリビルド処理を行うストライプを決める。これにより、各格納装置へのアクセス負荷が均等化され、リビルドを高速化することができる。
【０１１７】
＜ガロア拡大体による分散配置＞
次に、ガロア拡大体の理論によって事前に作成される変換テーブル１０について説明する。例えば、ｋ（ｋ：整数）本のディスクの集合（ディスクプール）にｌ（ｌ：整数）本のメンバディスクで構成されるＲＡＩＤグループをｍ（ｍ：整数）個と、ＨＳをｎ（ｎ：整数）本分散させることを考える。
【０１１８】
ｋを素数のべき乗に限定することにより、ディスクプールを構成するディスク数は限られてしまう。しかしながら、「ガロア拡大体」の理論に基いてデータ配置することで、（ｌ−１）×（ｌ×ｍ＋ｎ）ストライプという少ないパターン数でＲＡＩＤグループのディスクへのデータ分散配置を実現する。
【０１１９】
（ｉ）ガロア体（ｋが素数の場合）
ＲＡＩＤグループのディスク数が素数の場合は、ガロア体に基づいてデータ配置方法を決定することで、少ないストライプのパターン数で分散配置が可能である。整数を素数（例えば５）で除算した余りの集合φ∈｛０，１，２，３，４｝は、要素が有限で四則演算が閉じた集合（ガロア体）となっている。
例えば、
４＋４＝  ８  ｍｏｄ  ５＝３∈ φ
４×３＝１２  ｍｏｄ  ５＝２∈ φ
図１７（Ａ）にｍｏｄ（５）加算の表、図１７（Ｂ）にｍｏｄ（５）積算の表を示す。ここで、図１７（Ａ）のｍｏｄ（５）加算の表に注目する。シフト＃ｎと表記した列が各ストライプのデータ配置に相当し、行が物理ディスクに相当する。各物理ディスクに着目して見ると、どの行についても各ストライプのデータ配置ｍｏｄ（５）はかぶらないことがわかる。つまり、どのシフト（ストライプ）間でも、データ配置がかぶることはない。
【０１２０】
次に、図１７（Ｂ）のｍｏｄ（５）積算の表に着目する。図１７（Ｂ）の表の各値は、シフト＃ｎに相当している。パターン＃ｍは４ストライプ分のシフト＃ｎの組み合わせを表している。各行はパターン＃ｍ内のストライプに相当している。“０”の行を除いて各行の値を見てみると、どの行も値が重複していないことがわかる。つまりパターン＃ｎと表記した各列は、”０”の行を除外すると、どのパターン同士の組み合わせにおいても、同一ストライプでは別のシフトとなっている。
【０１２１】
別のシフト同士ではデータ配置がかぶることはないので、どのパターン同士の組み合わせにおいても、パターン中のどのストライプのデータ配置も、他のパターンとかぶることはない。
【０１２２】
ｍｏｄ（５）の加算の表の各ストライプのデータ配置を、ｍｏｄ（５）の乗算の表に基づいて組み合わせることによって、ストライプ毎にデータ配置が互いにかぶらない排他なパターンが５個できることがわかる。
【０１２３】
このパターンの中からＲＡＩＤグループのメンバディスク数と、ＨＳのディスク数だけ異なるパターンを取り出してＲＡＩＤグループのデータ配置とすることで、どのディスクが死んでもリビルドによるデータ構築においてＲＥＡＤ／ＷＲＩＴＥアクセスが分散される。
【０１２４】
例えば、ｍｏｄ（５）の加算・積算の表に基づいて、ＲＡＩＤ５（３＋１）と、ＨＳディスク１本とを分散させたＲＡＩＤグループの場合には、図１８の表となる。図１８において、同一の数字が表すのはＲＡＩＤ５の同一ストライプのデータ、あるいはストライプ上のデータが故障した場合にＷＲＩＴＥするＨＳ領域を表している。
【０１２５】
ディスク＃０が故障した場合に、どのＲＡＩＤ５のストライプ、故障データのＷＲＩＴＥ先も同一ディスクに偏らず分散している事がわかる。
【０１２６】
図１９は、図１８の表をデータ順に表記した表である。例として、データ＃０〜＃３ が冗長をとる単位であり、故障によりデータセグメント＃０〜＃３のいずれかが破損した場合の復元のための領域（ＨＳ領域）は、ストライプ＃１６のディスク＃１となる。ディスク＃０が故障した想定だと、ＨＳ領域に復元されるデータは＃０となる。
【０１２７】
このままでもデータ分散としては問題ないが、冗長を取る単位のデータが同じストライプ上に並んでいない為、ストライプ単位でデータ復元を行うリビルドの制御上、都合が悪い。そのため、データを縦方向に並び替え、冗長を取る単位のデータを同じストライプ上に持って来る。なお、縦方向にデータを並び替えても各ディスクへの各データの分散の状況は変わらない。
【０１２８】
図２０は、データを縦方向に並べ替えた結果の表である。
以上、５本のディスクに対してデータ配置の表を作成する手順を説明した。また、整数を任意の素数（ｋ）で除算した余りの集合φ∈｛０，１，２，３，ｋ−１｝についても同じように加算、乗算の表を作成し、ストライプのパターンとシフトを組み合わせてディスクの分散配置のテーブルを作成することができる。
【０１２９】
（ｉｉ）ガロア拡大体
上記ではガロア体を用いたデータ分散について記述したが、この方式は素数のディスク数のディスクプールにしか適用できない。その欠点を補うため、「ガロア拡大体」によるデータ配置を行うことで、素数のべき乗のディスク数のディスクプールにおいてもデータ分散を実現する。
【０１３０】
ディスクプールにおいて、αという元（要素）を加えた集合｛０，１，α，α2，・・・，αm-2｝（∈ ＧＦ（ｑm）  ｑ：素数  ｍ：自然数）に基づいて、加算・積算の表を作成し、この表に基づいてデータ分散を決定する。
【０１３１】
原始多項式ｆ（α）＝０が成立すると、各元（要素）の値は周期ｍで巡回する値をとり、加算・積算についてガロア体と同じ性質を持っている。例として、４（＝２2）台のディスクのディスクプールにおいて、αという元を加えた集合｛０，１，α，α2（＝α＋１）｝を使用し、図２１（Ａ）に示すように加算及び図２１（Ｂ）に示すように積算を行う。
原始多項式：ｆ（α）=α2 +α +１
上記に基づいて、データ配置を求めると、図２２（Ａ）に示すように加算の表及び図２２（Ｂ）に示すように積算の表が得られる。
【０１３２】
素数のべき乗についても加算・乗算の表を用いてストライプのパターン及びシフトの組み合わせによってデータの分散配置のテーブルを作成し、更に冗長を取るデータを同一ストライプに並べ替える。これにより、素数の場合と同様にＲＡＩＤグループにおけるデータの分散配置のテーブルを作成することが可能になる。
【０１３３】
上記の例では４（＝２2）台のディスクのケースを取り上げたが、素数のべき乗であれば、適当な原始多項式に対して加算・乗算のテーブル、ディスクの分散配置のテーブルを作成することができる。
【０１３４】
本実施形態によれば、ストライプ毎に、１以上の冗長セット（ＲＡＩＤ）と、ＨＳ領域をＲＡＩＤグループに対して分散させる。これにより、１ディスクのスループットを超えたリビルドのスループットを実現することで、リビルド時間が短縮する。
【０１３５】
また、冗長セット、ＨＳ領域の分散の際にリビルドによるデータ復元時の各ディスクのアクセス負荷が均等となるようなデータ分散配置とすることができる。これにより、各ディスクのスループットを効率的に利用することが可能になり、リビルド時間が短縮する。
【０１３６】
また、上記データ分散配置において、各リビルド処理において、ディスクアクセス負荷が均等となるように動的に次回リビルド処理を行うストライプを決定することができる。これにより、ディスクのスループットを向上させて各ディスクを効率的に利用することができるので、リビルド時間が短縮する。
【０１３７】
なお、本実施形態は、以上に述べた実施の形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で種々の構成または実施形態を取ることができる。
【符号の説明】
【０１３８】
１      ストレージシステム
２      ストレージ制御装置
３      起動部
４      決定部
５      実行部
６      格納装置群
６ａ，６ｂ  格納装置
６ｃ    対象格納装置群
１０    変換テーブル
１１    ストレージシステム
１２    ＣＭ
１３    ＣＡ
１４    ＣＰＵ
１５    データ復元部
１６    リビルド制御部
１７    コマンド発行制御部
１８    記憶部
１９    ＤＡ
２０    ＲＴ
２１    ＤＥ
２２    ディスク
２３    ＲＡＩＤグループ
２４    ホスト
【図１】
2015191594.tif 000005
【図２】
2015191594.tif 000006
【図３】
2015191594.tif 000007
【図６】
2015191594.tif 000008
【図８】
2015191594.tif 000009
【図１２】
2015191594.tif 000010
【図１３】
2015191594.tif 000011
【図１５】
2015191594.tif 000012
【図１７】
2015191594.tif 000013
【図１８】
2015191594.tif 000014
【図１９】
2015191594.tif 000015
【図２０】
2015191594.tif 000016
【図２１】
2015191594.tif 000017
【図２２】
2015191594.tif 000018
【図４】
2015191594.tif 000019
【図５】
2015191594.tif 000020
【図７】
2015191594.tif 000021
【図９】
2015191594.tif 000022
【図１０】
2015191594.tif 000023
【図１１】
2015191594.tif 000024
【図１４】
2015191594.tif 000025
【図１６】
2015191594.tif 000026