(57)【特許請求の範囲】
【請求項１】
コンピュータに、
複数の記憶装置にそれぞれ格納される複数のデータのうち一部の連続するデータを補償するパリティを複数設定するとき、補償範囲を前記パリティ毎に可変とし、前記複数のデータの各々について該データを補償範囲に含む前記パリティの数が所定数となるように前記各パリティの補償範囲を設定し、
前記各パリティの補償範囲の設定では、前記複数のデータを、設定する前記パリティの数と同じ数のグループに分割し、前記所定数と同じ数の該グループに属する前記データが補償の対象となるように前記各パリティの補償範囲を設定する
処理を実行させる、ストレージプログラム。
【請求項２】
前記コンピュータに、
隣接する２つの前記補償範囲の始点間距離と、他の隣接する２つの前記補償範囲の始点間距離との差が１以下となるように前記補償範囲を設定する
処理を実行させる、請求項１に記載のストレージプログラム。
【請求項３】
複数のデータ及び複数のパリティがそれぞれ格納される複数の記憶装置と、前記複数のデータのうち一部の連続するデータを補償する前記パリティを複数設定する制御部を有するストレージ装置と、を含み、
前記制御部は、補償範囲を前記パリティ毎に可変とし、前記複数のデータの各々について該データを補償範囲に含む前記パリティの数が所定数となるように前記各パリティの補償範囲を設定し、
前記制御部は、前記各パリティの補償範囲の設定では、前記複数のデータを、設定する前記パリティの数と同じ数のグループに分割し、前記所定数と同じ数の該グループに属する前記データが補償の対象となるように前記各パリティの補償範囲を設定する
ストレージシステム。
【請求項４】
コンピュータが、
複数の記憶装置にそれぞれ格納される複数のデータのうち一部の連続するデータを補償するパリティを複数設定するとき、補償範囲を前記パリティ毎に可変とし、前記複数のデータの各々について該データを補償範囲に含む前記パリティの数が所定数となるように前記各パリティの補償範囲を設定し、
前記各パリティの補償範囲の設定では、前記複数のデータを、設定する前記パリティの数と同じ数のグループに分割し、前記所定数と同じ数の該グループに属する前記データが補償の対象となるように前記各パリティの補償範囲を設定する
ストレージ方法。
【請求項５】
複数の記憶装置にそれぞれ格納される複数のデータのうち一部の連続するデータを補償するパリティを複数設定するとき、補償範囲を前記パリティ毎に可変とし、前記複数のデータの各々について該データを補償範囲に含む前記パリティの数が所定数となるように前記各パリティの補償範囲を設定する制御部を有し、
前記制御部は、前記各パリティの補償範囲の設定では、前記複数のデータを、設定する前記パリティの数と同じ数のグループに分割し、前記所定数と同じ数の該グループに属する前記データが補償の対象となるように前記各パリティの補償範囲を設定する
ストレージ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージプログラム、ストレージシステム、ストレージ方法、及びストレージ装置に関する。
【背景技術】
【０００２】
分散ストレージの分野では、データを複製することによりディスク故障・ブロック故障によるデータロスを回避するレプリケーション技術が広く普及している。近年、データを効率的に符号化して最小限の冗長性を持たせることにより、更なる信頼性、容量効率の向上を実現する消失訂正符号の技術が盛んに研究開発されている。
【０００３】
消失訂正符号の１つにＲＳ（Reed Solomon）符号がある。ＲＳ符号を採用した従来のＲＡＩＤ（Redundant Arrays of Inexpensive Disks）では、冗長化する全てのディスクからパリティが計算される。そのため、ディスクの障害発生時に消失したデータを復元する際、復元に用いるデータやパリティが多くのディスクから読み出される。
【０００４】
復元に用いるデータやパリティが読み出されるディスク数が多くなると、読み出し処理にかかる処理負担が大きくなる。ディスクを有する複数のノードをネットワークで接続した分散ストレージではノード間のデータ転送量が大きくなる。こうした処理負担やデータ転送量の大きさはリカバリ速度の低下要因となる。
【０００５】
なお、データの復元に関する技術として、ｎウェイディスク故障に対する保護を提供するようにエンコードされたストレージアレイのパリティグループにおける最大ｎ個までの記憶装置故障の復元を可能にするｎウェイパリティ保護技術が提案されている。
【０００６】
また、ｎ行×ｍ列のマトリックス状に複数のデータディスクを配置し、各列に対応した冗長ディスクのパリティ、及び、各行に対応した冗長ディスクのパリティを利用して多重障害発生時にデータディスクのデータを復元する技術が提案されている。また、データ、該データのコピー、及びパリティをディスクアレイ上の異なるディスクに分配して配置する技術が提案されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特表２０１３−５０６１９１号公報
【特許文献２】特開２０００−１４８４０９号公報
【特許文献３】特表２００６−５０５０３５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
冗長化する全てのディスクからパリティが計算されるＲＡＩＤの場合、パリティの数と同じ数のデータを復元することができる。一方、リカバリ速度に改善の余地がある。
データが格納された複数のディスクのうち一部のディスクのデータを用いてパリティを計算し、複数のパリティを利用してデータ全体を補償すれば、リカバリ速度を改善できる可能性がある。しかし、各パリティが補償するデータ範囲（補償範囲）の設定によっては多重障害の発生時に復元できないデータが生じるリスクがある。
【０００９】
なお、補償とは、消失したデータを含む補償範囲にある残りのデータと該補償範囲に対応するパリティとを利用して、消失したデータを復元できることを言う。
リカバリ速度と信頼性（上記リスクの低さ）とはトレードオフの関係にある。上記のように一部のディスクのデータを用いてパリティを計算する場合、パリティの数を増やせば信頼性の向上を見込めるが、信頼性の改善と引き替えにリカバリ速度が低下する。逆に言えば、パリティの数を増加させずに上記リスクを低減できれば、リカバリ速度の低下を抑制しながら信頼性を改善することが可能になる。
【００１０】
１つの側面によれば、本発明の目的は、信頼性を高めたストレージプログラム、ストレージシステム、ストレージ方法、及びストレージ装置を提供することにある。
【課題を解決するための手段】
【００１１】
本開示の１つの側面によれば、複数の記憶装置にそれぞれ格納される複数のデータのうち一部の連続するデータを補償するパリティを複数設定するとき、補償範囲をパリティ毎に可変とし、複数のデータの各々について該データを補償範囲に含むパリティの数が所定数となるように各パリティの補償範囲を設定する制御部を有するストレージ装置が提供される。制御部は、各パリティの補償範囲の設定では、複数のデータを、設定するパリティの数と同じ数のグループに分割し、所定数と同じ数の該グループに属するデータが補償の対象となるように各パリティの補償範囲を設定する。
【発明の効果】
【００１２】
本発明によれば、信頼性を高めることができる。
【図面の簡単な説明】
【００１３】
【図１】第１実施形態に係るストレージシステムの一例を示した図である。
【図２】第２実施形態に係るストレージシステムの一例を示した図である。
【図３】第２実施形態に係るクライアント装置のハードウェアの一例を示した図である。
【図４】第２実施形態に係るストレージ装置が有する機能の一例を示したブロック図である。
【図５】第２実施形態に係る管理情報（場所情報）の一例を示した図である。
【図６】第２実施形態に係る管理情報（補償範囲）の一例を示した図である。
【図７】第２実施形態に係る補償範囲の設定例及び比較例を示した図である。
【図８】第２実施形態に係るパリティチャンクの計算処理の一例を示した図である。
【図９】第２実施形態に係る補償範囲の設定方法の一例を示した図である。
【図１０】第２実施形態に係る復元方法の一例を示した図である。
【発明を実施するための形態】
【００１４】
以下に添付図面を参照しながら、本発明の実施形態について説明する。なお、本明細書及び図面において実質的に同一の機能を有する要素については、同一の符号を付することにより重複説明を省略する場合がある。
【００１５】
＜１．第１実施形態＞
図１を参照しながら、第１実施形態について説明する。図１は、第１実施形態に係るストレージシステムの一例を示した図である。
【００１６】
第１実施形態に係るストレージシステムは、複数の記憶装置２０、２１、２２、２３、２４、３０、３１、３２、及びストレージ装置１０を含む。なお、該ストレージシステムに含まれるストレージ装置１０及び記憶装置の数は図１の例に限定されない。
【００１７】
記憶装置２０、２１、２２、２３、２４、３０、３１、３２は、例えば、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）などである。ストレージ装置１０は、例えば、サーバ装置などのコンピュータである。
【００１８】
ストレージ装置１０は、記憶装置２０、２１、２２、２３、２４、３０、３１、３２に接続されている。接続方法は、例えば、ＳＡＳ（Serial Attached SCSI）などのインターフェースを介して直接的に接続する方法であってもよいし、分散ストレージのようにネットワークを介して接続する方法であってもよい。
【００１９】
ストレージ装置１０は、記憶部１１及び制御部１２を有する。
記憶部１１は、ＲＡＭ（Random Access Memory）などの揮発性記憶装置、或いは、ＨＤＤやフラッシュメモリなどの不揮発性記憶装置である。制御部１２は、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などのプロセッサである。但し、制御部１２は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの電子回路であってもよい。制御部１２は、例えば、記憶部１１又は他のメモリに記憶されたプログラムを実行する。
【００２０】
記憶装置２０には、データＤ０が格納されている。記憶装置２１にはデータＤ１、記憶装置２２にはデータＤ２、記憶装置２３にはデータＤ３、記憶装置２４にはデータＤ４が格納されている。また、記憶装置３０には、パリティＰ０が格納されている。記憶装置３１にはパリティＰ１、記憶装置３２にはパリティＰ２が格納されている。
【００２１】
制御部１２は、データＤ０、Ｄ１、Ｄ２、Ｄ３、Ｄ４のうち一部の連続するデータを補償するパリティを複数設定する。以下、１つのパリティが補償するデータの範囲を補償範囲と称する場合がある。図１（Ａ）は、データＤ０、Ｄ１、Ｄ２、Ｄ３、Ｄ４と、パリティＰ０、Ｐ１、Ｐ２と、パリティＰ０、Ｐ１、Ｐ２にそれぞれ対応する補償範囲４０、４１、４２との関係を示している。例えば、パリティＰ０は、補償範囲４０に含まれるデータＤ０、Ｄ１、Ｄ２を補償する。
【００２２】
パリティＰ０がデータＤ０を補償するとは、パリティＰ０を利用してデータＤ０を復元可能であることを言う。パリティＰ０は、対応する補償範囲４０に含まれるデータＤ０、Ｄ１、Ｄ２を利用して計算される。そのため、データＤ０が消失した場合、データＤ１、Ｄ２及びパリティＰ０を利用してデータＤ０を復元することができる。同様に、パリティＰ０を利用することで、データＤ１、Ｄ２を復元することができる。パリティＰ０は、例えば、ＲＳ符号などの消失訂正符号である。
【００２３】
図１（Ａ）の例において、制御部１２は、パリティＰ０、Ｐ１、Ｐ２を設定する。このとき、制御部１２は、補償範囲４０、４１、４２をパリティ毎に可変とし、データＤ０、Ｄ１、Ｄ２、Ｄ３、Ｄ４の各々について該データを補償範囲に含むパリティの数が所定数（この例では２）となるように各パリティの補償範囲４０、４１、４２を設定する。なお、データＤ４の次がデータＤ０であるとして範囲の連続性を考える。
【００２４】
例えば、パリティＰ０に対応する補償範囲４０は、３つのデータＤ０、Ｄ１、Ｄ２を含む（範囲長が３）。一方、パリティＰ１に対応する補償範囲４１は、４つのデータＤ１、Ｄ２、Ｄ３、Ｄ４を含む（範囲長が４）。パリティＰ２に対応する補償範囲４２は、３つのデータＤ３、Ｄ４、Ｄ０を含む（範囲長が３）。このように範囲長をパリティ毎に可変とすることで、各データを補償するパリティの数が２となるように補償範囲を設定することが可能になる。
【００２５】
例えば、制御部１２は、データＤ０、Ｄ１、Ｄ２、Ｄ３、Ｄ４をパリティの数（この例では３）と同じ数のグループ（＃１、＃２、＃３）に分割する。このとき、制御部１２は、グループに属するデータの数（区間長）が、グループ間で高々１の違いに収まるように各グループを設定する。図１（Ａ）の例では、グループ＃１の区間長が１、グループ＃２、＃３の区間長が２であり、区間長の差が高々１に収まっている。
【００２６】
グループの設定後、制御部１２は、上述した所定数（この例では２）のグループを含む補償範囲を設定する。例えば、補償範囲４０は、２つのグループ＃１、＃２を含むように設定されている。同様に、補償範囲４１は２つのグループ＃２、＃３を含み、補償範囲４２は２つのグループ＃３、＃１を含むように設定されている。このように補償範囲４０、４１、４２を設定することで、各データを補償範囲に含むパリティの数が２となる。
【００２７】
補償範囲を上記のように設定することで、上述した所定数と同じ数の記憶装置に障害が生じても、全てのデータを復元することができる。例えば、記憶装置２４、３２が故障し、データＤ４及びパリティＰ２が消失した場合、データＤ３、Ｄ０及びパリティＰ１を用いてデータＤ４を復元することが可能である。図１（Ａ）の例では、任意の２台の記憶装置が故障した場合について、データＤ０、Ｄ１、Ｄ２、Ｄ３、Ｄ４を全て復元できることが保証される。
【００２８】
比較のために、図１（Ａ）において、補償範囲４１にデータＤ１、Ｄ２、Ｄ３だけが含まれていたと仮定すると（つまり、全パリティの範囲長を３に固定すると）、記憶装置２４、３２が故障した場合、データＤ４を復元することができなくなる。このような状況は、第１実施形態に係るストレージシステムにおいては生じない。
【００２９】
第１実施形態によれば、故障した記憶装置の組み合わせによらず、上述した所定数と同じ数の記憶装置の故障に対してデータの復元が保証される。つまり、同じパリティ数であっても、全パリティで範囲長が固定された場合に比べて高い信頼性が得られる。
【００３０】
以上、第１実施形態について説明した。
＜２．第２実施形態＞
次に、第２実施形態について説明する。
【００３１】
第２実施形態は、ＨＤＤなどの記憶装置を複数搭載したＲＡＩＤ装置や複数のＲＡＩＤ装置をネットワークで接続したストレージシステムにおけるパリティの設定方法に関する。第２実施形態は、補償の対象となる複数の記憶装置のうち一部の記憶装置に格納されたデータを補償するパリティを複数設定し、複数のパリティを利用して該複数の記憶装置に格納されたデータを補償する技術を提供する。そして、第２実施形態は、各パリティが補償するデータの範囲（補償範囲）をパリティ毎に設定する方法を提供する。
【００３２】
第２実施形態に係る技術によれば、複数の記憶装置の全てに格納されたデータを補償するパリティを利用する場合に比べ、消失したデータの復元に用いるデータを記憶装置から取得する時間を短縮でき、リカバリ速度が高速化される。また、各パリティの補償範囲を可変とすることで、故障した記憶装置の組み合わせによらず復元可能なデータの数が一定となるようにパリティを設定できるようになり、信頼性の向上に寄与する。
【００３３】
［２−１．システム］
第２実施形態に係るストレージシステムについて説明する。図２は、第２実施形態に係るストレージシステムの一例を示した図である。図２に例示したストレージシステム１００は、第２実施形態に係るストレージシステムの一例である。
【００３４】
図２に示すように、ストレージシステム１００は、クライアント装置１１０、及び複数のストレージ装置１２０、１３０を含む。クライアント装置１１０は、ストレージ装置１２０、１３０とネットワークを介して接続される。
【００３５】
ストレージ装置１２０は、記憶装置１４１、…、１４４に接続されている。記憶装置１４１、…、１４４に対するデータの入出力は、ストレージ装置１２０を介して行われる。また、ストレージ装置１３０は、複数の記憶装置１４５、…、１４８に接続されている。記憶装置１４５、…、１４８に対するデータの入出力は、ストレージ装置１３０を介して行われる。
【００３６】
クライアント装置１１０は、ストレージ装置１２０、１３０を介して、記憶装置１４１、…、１４８に対するデータの書き込み処理や、記憶装置１４１、…、１４８に格納されたデータの読み出し処理を実行する。例えば、クライアント装置１１０は、記憶装置１４１への書き込みデータをストレージ装置１２０に送信する。該書き込みデータを受信したストレージ装置１２０は、該書き込みデータを記憶装置１４１に格納する。
【００３７】
記憶装置１４１、…、１４８の集合はディスクアレイとして動作する。ディスクアレイに格納されるデータは、複数の分割データ（データチャンク）に分けられ、記憶装置１４１、…、１４８のいずれかに分散して格納される。例えば、５つのデータチャンクがそれぞれ記憶装置１４１、１４２、１４３、１４５、１４６に分散して格納される。
【００３８】
また、複数のデータチャンクから計算されたパリティ（パリティチャンク）が、記憶装置１４１、…、１４８のうちデータチャンクが格納されていない記憶装置に格納される。例えば、記憶装置１４１、１４２、１４３、１４５、１４６に格納された５つのデータチャンクを利用して計算された補償範囲の異なる３つのパリティチャンクがそれぞれ記憶装置１４４、１４７、１４８に分散して格納される。
【００３９】
パリティチャンクは、例えば、ＲＳ符号などの消失訂正符号である。１つのパリティチャンクは、複数のデータチャンクから計算される。例えば、３つのデータチャンクから１つのパリティチャンクが計算される。この場合、計算に用いた３つのデータチャンクが、計算されたパリティチャンクの補償範囲となる。つまり、計算に用いたデータチャンクの１つが消失した場合、残りのデータチャンクとパリティチャンクとを利用して、消失したデータチャンクを復元することができる。
【００４０】
パリティチャンクの補償範囲は、パリティチャンク毎に異なるように設定される。補償範囲の設定に際し、補償範囲の大きさ（範囲長）はパリティチャンク毎に可変とする。但し、データチャンクの数ｋ、パリティチャンクの数ｍ、及び１つ１つのデータチャンクを補償するパリティチャンクの数ｃは予め固定値（補償数）に設定される。例えば、ｋが５、ｍが３、ｃが２に設定される。補償範囲の設定及びパリティチャンクの計算は、ストレージ装置１２０が実行する。但し、ストレージ装置１３０が実行するようにしてもよい。
【００４１】
記憶装置１４１、１４２、１４３、１４５、１４６の一部が故障してデータチャンクが消失した場合、ストレージ装置１２０は、消失したデータチャンクを補償範囲に含むパリティチャンクを利用して、消失したデータチャンクを復元する。このとき、ストレージ装置１２０は、該補償範囲に含まれるデータチャンクを利用する。復元後、ストレージ装置１２０は、予め用意された代替用の記憶装置に復元したデータチャンクを格納する。
【００４２】
上記のように、一部のデータチャンクを補償するように補償範囲を設定することで、消失したデータチャンクの復元時に一部のデータチャンクを読み出せばよくなる。その結果、全てのデータチャンクを読み出す場合に比べてリカバリ速度が速くなる。
【００４３】
また、パリティチャンク毎に補償範囲の範囲長を可変とすることで、補償範囲の設定を柔軟に行うことが可能になる。補償範囲の設定方法については後述するが、同じパリティチャンクの数で、より信頼性が高くなるような補償範囲の設定を実現できるようになる。
【００４４】
以上、第２実施形態に係るストレージシステムについて説明した。以下では、説明の都合上、図２に例示したストレージシステム１００を想定するが、第２実施形態に係る技術の適用範囲はこれに限定されない。例えば、ストレージ装置や記憶装置の数は任意に設定可能であるし、ＲＡＩＤ装置単体に第２実施形態に係る技術を適用することもできる。こうした変形についても当然に第２実施形態の技術範囲に属する。
【００４５】
［２−２．ハードウェア］
ここで、クライアント装置１１０のハードウェアについて説明する。
図３は、第２実施形態に係るクライアント装置のハードウェアの一例を示した図である。クライアント装置１１０が有する機能は、例えば、図３に示す情報処理装置のハードウェア資源を用いて実現することが可能である。つまり、クライアント装置１１０が有する機能は、コンピュータプログラムを用いて図３に示すハードウェアを制御することにより実現される。
【００４６】
図３に示すように、このハードウェアは、主に、ＣＰＵ９０２と、ＲＯＭ（Read Only Memory）９０４と、ＲＡＭ９０６と、ホストバス９０８と、ブリッジ９１０とを有する。さらに、このハードウェアは、外部バス９１２と、インターフェース９１４と、入力部９１６と、出力部９１８と、記憶部９２０と、ドライブ９２２と、接続ポート９２４と、通信部９２６とを有する。
【００４７】
ＣＰＵ９０２は、例えば、演算処理装置又は制御装置として機能し、ＲＯＭ９０４、ＲＡＭ９０６、記憶部９２０、又はリムーバブル記録媒体９２８に記録された各種プログラムに基づいて各構成要素の動作全般又はその一部を制御する。ＲＯＭ９０４は、ＣＰＵ９０２に読み込まれるプログラムや演算に用いるデータなどを格納する記憶装置の一例である。ＲＡＭ９０６には、例えば、ＣＰＵ９０２に読み込まれるプログラムや、そのプログラムを実行する際に変化する各種パラメータなどが一時的又は永続的に格納される。
【００４８】
これらの要素は、例えば、高速なデータ伝送が可能なホストバス９０８を介して相互に接続される。一方、ホストバス９０８は、例えば、ブリッジ９１０を介して比較的データ伝送速度が低速な外部バス９１２に接続される。また、入力部９１６としては、例えば、マウス、キーボード、タッチパネル、タッチパッド、ボタン、スイッチ、及びレバーなどが用いられる。さらに、入力部９１６としては、赤外線やその他の電波を利用して制御信号を送信することが可能なリモートコントローラが用いられることもある。
【００４９】
出力部９１８としては、例えば、ＣＲＴ（Cathode Ray Tube）、ＬＣＤ（Liquid Crystal Display）、ＰＤＰ（Plasma Display Panel）、又はＥＬＤ（Electro-Luminescence Display）などのディスプレイ装置が用いられる。また、出力部９１８として、スピーカやヘッドホンなどのオーディオ出力装置、又はプリンタなどが用いられることもある。つまり、出力部９１８は、情報を視覚的又は聴覚的に出力することが可能な装置である。
【００５０】
記憶部９２０は、各種のデータを格納するための装置である。記憶部９２０としては、例えば、ＨＤＤなどの磁気記憶デバイスが用いられる。また、記憶部９２０として、ＳＳＤ（Solid State Drive）やＲＡＭディスクなどの半導体記憶デバイス、光記憶デバイス、又は光磁気記憶デバイスなどが用いられてもよい。
【００５１】
ドライブ９２２は、着脱可能な記録媒体であるリムーバブル記録媒体９２８に記録された情報を読み出し、又はリムーバブル記録媒体９２８に情報を書き込む装置である。リムーバブル記録媒体９２８としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、又は半導体メモリなどが用いられる。
【００５２】
接続ポート９２４は、例えば、ＵＳＢ（Universal Serial Bus）ポート、ＩＥＥＥ１３９４ポート、ＳＣＳＩ（Small Computer System Interface）、ＲＳ−２３２Ｃポート、又は光オーディオ端子など、外部接続機器９３０を接続するためのポートである。外部接続機器９３０としては、例えば、プリンタなどが用いられる。
【００５３】
通信部９２６は、ネットワーク９３２に接続するための通信デバイスである。通信部９２６としては、例えば、有線又は無線ＬＡＮ（Local Area Network）用の通信回路、ＷＵＳＢ（Wireless USB）用の通信回路、光通信用の通信回路やルータ、ＡＤＳＬ（Asymmetric Digital Subscriber Line）用の通信回路やルータ、携帯電話ネットワーク用の通信回路などが用いられる。通信部９２６に接続されるネットワーク９３２は、有線又は無線により接続されたネットワークであり、例えば、インターネット、ＬＡＮ、放送網、衛星通信回線などを含む。
【００５４】
以上、クライアント装置１１０のハードウェアの一例について説明したが、ストレージ装置１２０、１３０の機能も図３に例示したハードウェアを利用して実現可能である。そのため、ストレージ装置１２０、１３０のハードウェアについての説明は省略する。
【００５５】
［２−３．ストレージ装置の機能］
次に、ストレージ装置１２０の機能について説明する。図４は、第２実施形態に係るストレージ装置が有する機能の一例を示したブロック図である。
【００５６】
図４に示すように、ストレージ装置１２０は、記憶部１２１、及び制御部１２２を有する。なお、記憶部１２１の機能は、上述したＲＡＭ９０６や記憶部９２０などを用いて実現できる。制御部１２２の機能は、上述したＣＰＵ９０２などを用いて実現できる。
【００５７】
記憶部１２１には、管理情報１２１ａが格納される。また、記憶部１２１には、データチャンク数ｋの情報１２１ｂ、パリティチャンク数ｍの情報１２１ｃ、及び補償数ｃの情報１２１ｄが格納される。補償数ｃは、１つデータチャンクを補償するパリティチャンクの数を示す。後述するように、補償数ｃと同じ数の記憶装置が故障しても、故障した記憶装置の組み合わせによらず全てのデータチャンクを復元できることが保証され、信頼性の向上に寄与する。以下、説明の都合上、ｋ＝５、ｍ＝３、ｃ＝２とする。
【００５８】
制御部１２２は、範囲設定部１２２ａ、パリティ計算部１２２ｂ、及びデータ復元部１２２ｃを有する。範囲設定部１２２ａは、パリティチャンクの補償範囲を設定する。パリティ計算部１２２ｂは、範囲設定部１２２ａが設定した補償範囲のデータチャンクを利用してパリティチャンクを計算する。データ復元部１２２ｃは、記憶装置が故障し、データチャンクが消失した場合に、パリティチャンク及び残存するデータチャンクを利用して、消失したデータチャンクを復元する。
【００５９】
ここで、図５及び図６を参照しながら、管理情報１２１ａについて説明する。
図５は、第２実施形態に係る管理情報（場所情報）の一例を示した図である。
図５の例は、管理情報１２１ａのうち、データチャンク及びパリティチャンクを格納する記憶装置（場所）に関する場所情報を示している。図５（Ａ）は、データチャンクと、該データチャンクを格納する記憶装置とを対応付ける情報の例である。また、図５（Ｂ）は、パリティチャンクと、該パリティチャンクを格納する記憶装置とを対応付ける情報の例である。ｉｄ＿ｄは、各データチャンクを識別するための識別情報（ＩＤ）である。ｉｄ＿ｐは、各パリティチャンクを識別するための識別情報（ＩＤ）である。
【００６０】
この例において、ｉｄ＿ｄが０のデータチャンクは、記憶装置１４１に対応付けられている。同様に、ｉｄ＿ｄが１、２、３、４のデータチャンクは、それぞれ記憶装置１４２、１４３、１４５、１４６に対応付けられている。また、ｉｄ＿ｐが０のパリティチャンクは、記憶装置１４４に対応付けられている。同様に、ｉｄ＿ｐが１、２のパリティチャンクは、それぞれ記憶装置１４７、１４８に対応付けられている。制御部１２２は、これらの場所情報を参照し、データチャンク及びパリティチャンクの格納場所を認識する。
【００６１】
図６は、第２実施形態に係る管理情報（補償範囲）の一例を示した図である。
図６の例は、管理情報１２１ａのうち、各パリティチャンクが補償するデータチャンクの範囲（補償範囲）に関する情報を示している。図６の例において、「データチャンク（ｉｄ＿ｄ）」と表記された欄の数字はデータチャンクのＩＤを表し、「パリティチャンク（ｉｄ＿ｐ）」と表記された欄の数字はパリティチャンクのＩＤを表す。また、符号２０１、２０２、２０３を付した矢印は補償範囲を表す。また、補償範囲２０１、２０２、２０３の端部にそれぞれ付された黒丸は、補償範囲２０１、２０２、２０３の始点を表す。
【００６２】
例えば、補償範囲２０１は、ｉｄ＿ｐが０のパリティチャンクが補償するデータチャンクの範囲を表す。図６の例では、補償範囲２０１は、ｉｄ＿ｄが０、１、２のデータチャンクを含む。つまり、補償範囲２０１は、ｉｄ＿ｐが０のパリティチャンクが、ｉｄ＿ｄが０、１、２のデータチャンクを補償することを示している。
【００６３】
同様に、ｉｄ＿ｐが１のパリティチャンクに対応する補償範囲２０２は、該パリティチャンクが、ｉｄ＿ｄが１、２、３、４のデータチャンクを補償することを示している。また、ｉｄ＿ｐが２のパリティチャンクに対応する補償範囲２０３は、該パリティチャンクが、ｉｄ＿ｄが３、４、０のデータチャンクを補償することを示している。
【００６４】
図６に示すように、補償範囲２０１、２０２、２０３は、それぞれＩＤが連続するデータチャンクを含むように設定される。但し、ｉｄ＿ｄ＝４の次はｉｄ＿ｄ＝０とする（ｍｏｄｕｌｏの世界）。また、補償範囲２０１、２０２、２０３は、それぞれ範囲長（補償範囲の大きさ）が異なっていてもよい。例えば、補償範囲２０１、２０３の範囲長は３（３つのデータチャンク）であるが、補償範囲２０２の範囲長は２である。
【００６５】
補償範囲２０１、２０２、２０３の設定方法について説明する。なお、補償範囲２０１、２０２、２０３の設定処理は、範囲設定部１２２ａが実行する。
補償範囲２０１、２０２、２０３の設定ルールは、（条件１）ｉｄ＿ｄが連続する複数のデータチャンクを補償すること、（条件２）始点を高々１の差を持たせて均等に配置すること、（条件３）補償数がｃ（この例では２）となるようにすることの３点である。図６の例ではｉｄ＿ｐに０からの通し番号が振られているため、範囲設定部１２２ａは、下記の式（１）に基づいて始点を決定し、下記の式（２）に基づいて終点を決定できる。なお、上記の式（１）及び式（２）で用いられている床関数（floor(x)）は、実数ｘに対してｘ以下の最大の整数を表す。
【００６６】
【数１】
0006369298.tif 000002
【００６７】
【数２】
0006369298.tif 000003
【００６８】
上記の式（１）及び式（２）を用いると、ｉｄ＿ｐが０のパリティチャンクに対応する補償範囲２０１の始点は、ｉｄ＿ｄが０のデータチャンクになる。一方、補償範囲２０１の終点は、ｉｄ＿ｄが２のデータチャンクになる。同様に、範囲設定部１２２ａは、補償範囲２０２、２０３の始点及び終点を決定することができる。
【００６９】
上記の方法によると、図６に示すように、補償範囲２０１、２０２の始点間距離Ｗ０１は１となる。また、補償範囲２０２、２０３の始点間距離Ｗ１２は２、補償範囲２０３、２０１の始点間距離Ｗ２０は２となる。よって、｜Ｗ０１−Ｗ１２｜が１、｜Ｗ１２−Ｗ２０｜が０、｜Ｗ２０−Ｗ０１｜が１となって上記（条件２）を満たす（｜…｜は絶対値）。また、ｉｄ＿ｄが０、１、２、３、４のいずれも、補償範囲２０１、２０２、２０３のうちの２つに含まれるから、上記（条件３）も満たす。上記（条件１）は計算の前提としているから、上記（条件１）から（条件３）の全てが満たされることになる。
【００７０】
図６のように補償範囲２０１、２０２、２０３が設定されると、いかなる２つ（補償数ｃと同じ数）の記憶装置が故障しても、全てのデータチャンクを復元することができ、最大で３つ（パリティチャンクの数ｍと同じ数）の記憶装置が故障した時に全てのデータチャンクを復元できる可能性がある。データチャンクの復元処理は、データ復元部１２２ｃが実行する。
【００７１】
例えば、記憶装置１４１、１４２が故障すると、ｉｄ＿ｄが０、１のデータチャンクが消失する（図５を参照）。この場合、データ復元部１２２ｃは、ｉｄ＿ｄが３、４のデータチャンクと、補償範囲２０２に対応するｉｄ＿ｐが２のパリティチャンクとを利用してｉｄ＿ｄが０のデータチャンクを復元できる。
【００７２】
また、データ復元部１２２ｃは、ｉｄ＿ｄが２、３、４のデータチャンクと、補償範囲２０３に対応するｉｄ＿ｐが１のパリティチャンクとを利用してｉｄ＿ｄが１のデータチャンクを復元できる。このとき、データ復元部１２２ｃは、先に復元したｉｄ＿ｄが０のデータチャンクを利用し、ｉｄ＿ｄが０、２のデータチャンクと、補償範囲２０１に対応するｉｄ＿ｐが０のパリティチャンクとを利用してｉｄ＿ｄが１のデータチャンクを復元することもできる。
【００７３】
また、記憶装置１４６、１４８が故障すると、ｉｄ＿ｄが４のデータチャンクと、ｉｄ＿ｐが２のパリティチャンクが消失する（図５を参照）。この場合、データ復元部１２２ｃは、ｉｄ＿ｄが１、２、３のデータチャンクと、補償範囲２０２に対応するｉｄ＿ｐが２のパリティチャンクとを利用してｉｄ＿ｄが４のデータチャンクを復元できる。ｉｄ＿ｄが４のデータチャンクが復元されれば、ｉｄ＿ｐが２のパリティチャンクは、ｉｄ＿ｄが３、４、０のデータチャンクを利用して計算することができる。
【００７４】
上記の例に限らず、記憶装置の任意の組み合わせについて、データ復元部１２２ｃは、最大２つの記憶装置が故障した場合に全てのデータチャンクを復元することができる。図６の例は補償数ｃを２に設定した場合であるが、補償数が３に設定されていれば、最大３つの記憶装置が故障した場合でも全てのデータチャンクを復元することができる。このように、上述した補償範囲の設定方法によれば、故障した記憶装置の組み合わせによらず補償数ｃまでの故障に対する耐性が保証され、信頼性の高いシステムが実現できる。
【００７５】
（リカバリ速度と信頼性について）
ここで、リカバリ速度と上述した信頼性について説明を補足する。図７は、第２実施形態に係る補償範囲の設定例及び比較例を示した図である。
【００７６】
図７（Ａ）は、全てのデータチャンクを補償範囲とする方法を示した比較例（比較例＃１）である。比較例＃１の場合、全てのデータチャンクを補償するパリティチャンクが２つ設定されているから、２つの記憶装置が故障しても全てのデータチャンクを復元することができる。しかし、１つのデータチャンクを復元するために、残り全てのデータチャンクを読み出すことになるため、読み出しにかかる時間が長くかかる。
【００７７】
比較例＃１の読み出し時間を短縮してリカバリ速度を改善した方法が、図７（Ｂ）に示した比較例＃２である。比較例＃２は、補償範囲の範囲長をデータチャンクの総数より少ない固定数にしているため、復元時に読み出すデータチャンクの数が少なくて済む。その結果、比較例＃１よりも読み出し時間を短くでき、リカバリ速度が改善する。しかし、図７（Ｂ）に符号Ｘで示した部分は、信頼性を低下させる要素を含む。
【００７８】
符号Ｘの部分では、ｉｄ＿ｄが４のデータチャンクを補償するパリティチャンクが１つ（ｉｄ＿ｐが２のパリティチャンク）しかない。そのため、ｉｄ＿ｄが４のデータチャンクと共にｉｄ＿ｐが２のパリティチャンクが消失すると、消失したデータチャンクを復元することができなくなる。つまり、故障する記憶装置の組み合わせ（消失するチャンクの組み合わせ）によっては２つの記憶装置が故障すると復元できない場合が生じうる。
【００７９】
なお、比較例＃２のように範囲長を固定したとしても、上記の符号Ｘのような信頼性低下要因が生じるとは限らない。しかし、このような要因が生じるリスクを排除することで、ユーザが安心して利用できる信頼性の高いシステムが実現できる。このようなリスク排除を実現したのが、図７（Ｃ）に示した第２実施形態に係る補償範囲の設定例（図６の再掲）である。該設定例は、比較例＃２と同じパリティチャンク数で、故障した記憶装置の組み合わせによらず、補償数ｃと同じ数の記憶装置の故障に対して全てのデータチャンクの復元を保証する。
【００８０】
上記のように、リカバリ速度と信頼性とはトレードオフの関係にあるが、第２実施形態に係る補償範囲の設定方法を適用すれば、好適なリカバリ速度を実現しつつ、信頼性を高めることが可能になる。
【００８１】
以上、ストレージ装置１２０の機能について説明した。なお、ストレージ装置１３０が補償範囲の設定及びパリティチャンクの計算を実行する仕組みにする場合、ストレージ装置１３０は上述したストレージ装置１２０と同じ機能を有する。
【００８２】
［２−４．ストレージ装置の動作］
次に、ストレージ装置１２０の動作のうち、パリティチャンクの計算及びデータチャンクの復元に係る処理の流れについて説明する。
【００８３】
（パリティチャンクの計算）
パリティチャンクの計算に係る処理は、上述した補償範囲の設定と、設定した補償範囲のデータチャンクを利用したパリティチャンクの計算とを含む。
【００８４】
補償範囲は、図６の例を参照しながら説明したように、上記の式（１）及び式（２）に基づいて設定することができる。ここでは、上記の式（１）及び式（２）で表現した技術的思想を一連の処理ステップの形式で表現したフロー図（図８）に基づいて説明する。なお、説明の中で、適宜、図９を参照する。
【００８５】
図８は、第２実施形態に係るパリティチャンクの計算処理の一例を示した図である。図９は、第２実施形態に係る補償範囲の設定方法の一例を示した図である。
（Ｓ１０１）範囲設定部１２２ａは、記憶部１２１から情報１２１ｂ、１２１ｃ、１２１ｄを読み出し、データチャンク数ｋ、パリティチャンク数ｍ、補償数ｃを取得する。ｋ、ｍ、ｃは、予め設定されているものとする。図９の例は、ｋが５、ｍが３、ｃが２の場合である。図９の中で、データチャンクは数字が付されたブロックで表現され、その数字はｉｄ＿ｄを表している。
【００８６】
（Ｓ１０２）範囲設定部１２２ａは、ｋ個のデータチャンクをｍ個のグループＧ（０）、…、Ｇ（ｍ−１）に分割する。つまり、範囲設定部１２２ａは、パリティチャンクと同じ数のグループを生成する。
【００８７】
図９（Ａ）の例では、５つのデータチャンクが、ｉｄ＿ｄが０のデータチャンクを含むグループＧ（０）、ｉｄ＿ｄが１、２のデータチャンクを含むグループＧ（１）、ｉｄ＿ｄが３、４のデータチャンクを含むグループＧ（２）に分割されている。説明の都合上、Ｇ（０）とＧ（１）の境界を境界＃１、Ｇ（０）とＧ（１）の境界を境界＃２、Ｇ（１）とＧ（２）の境界を境界＃３、Ｇ（２）とＧ（０）の境界を境界＃４と表記する。
【００８８】
（Ｓ１０３）範囲設定部１２２ａは、パラメータｓを初期値０に設定する（ｓ＝０）。
（Ｓ１０４）範囲設定部１２２ａは、Ｇ（ｓ）の先頭からＧ（ｓ＋ｃ−１）の末尾までの区間をｉｄ＿ｐがｓのパリティチャンクの補償範囲に設定する。つまり、範囲設定部１２２ａは、Ｇ（ｓ）を基準として補償数ｃと同じ数のグループを跨ぐように補償範囲を設定する。さらに言い換えると、範囲設定部１２２ａは、Ｇ（ｓ）の先頭に位置する境界から、ｃ個先の境界までの区間を補償範囲に設定する。
【００８９】
図９の例において、ｓが０の場合、範囲設定部１２２ａは、Ｇ（０）の先頭からＧ（１）の末尾までの区間をｉｄ＿ｐが０のパリティチャンクの補償範囲に設定する。つまり、図９（Ｂ）に示すように、Ｇ（０）の先頭に位置するデータチャンク（ｉｄ＿ｄ＝０）から、Ｇ（１）の末尾に位置するデータチャンク（ｉｄ＿ｄ＝２）までの区間が、ｉｄ＿ｐが０のパリティチャンクの補償範囲（補償範囲２０１）に設定される。
【００９０】
この例において、補償範囲２０１は、２つのグループＧ（０）、Ｇ（１）を跨ぐように設定されている。また、補償範囲２０１は、Ｇ（０）の先頭に位置する境界＃１から２個先の境界＃３までの区間に設定されている。
【００９１】
（Ｓ１０５）範囲設定部１２２ａは、設定した補償範囲の情報を管理情報１２１ａに追加し、管理情報１２１ａを更新する。
（Ｓ１０６、Ｓ１０７）範囲設定部１２２ａは、パラメータｓをインクリメントする（ｓ＝ｓ＋１）。そして、範囲設定部１２２ａは、ｓがｍと等しいか（ｓ＝ｍ）を判定する。ｓがｍと等しい場合、処理はＳ１０８へと進む。ｓがｍと等しくない場合、処理はＳ１０４へと進む。
【００９２】
つまり、補償範囲が未設定のパリティチャンクがある場合に処理はＳ１０４へと進む。図９（Ｃ）及び（Ｄ）に示すように、パラメータｓが更新されながらＳ１０４からＳ１０７の処理が繰り返し実行されることで、ｉｄ＿ｐが１、２のパリティチャンクに対応する補償範囲２０２、２０３が順次設定される。そして、全てのパリティチャンクについて補償範囲を設定し終えた場合に処理はＳ１０８へと進む。
【００９３】
（Ｓ１０８）パリティ計算部１２２ｂは、管理情報１２１ａを参照し、パリティチャンク毎に設定された補償範囲のデータチャンクを特定し、特定したデータチャンクを用いてパリティチャンクを計算する。
【００９４】
例えば、パリティ計算部１２２ｂは、補償範囲２０１に対応するパリティチャンク（ｉｄ＿ｐ＝０）を計算する際、管理情報１２１ａ（図６を参照）から補償範囲２０１に含まれるデータチャンクのｉｄ＿ｄ（ｉｄ＿ｄ＝０、１、２）を特定する。また、パリティ計算部１２２ｂは、管理情報１２１ａ（図５（Ａ）を参照）から、特定したｉｄ＿ｄに対応する記憶装置（記憶装置１４１、１４２、１４３）を認識する。
【００９５】
次に、パリティ計算部１２２ｂは、認識した記憶装置１４１、１４２、１４３にアクセスし、記憶装置１４１、１４２、１４３から読み出したデータチャンクを利用してｉｄ＿ｐが０のパリティチャンクを計算する。パリティチャンクとしてＲＳ符号を利用する場合、パリティ計算部１２２ｂは、複数のデータチャンクに基づく連立一次方程式を解いてパリティチャンクを計算する。そして、パリティ計算部１２２ｂは、管理情報１２１ａ（図５（Ｂ）を参照）から、計算したパリティチャンクを格納する記憶装置（記憶装置１４４）を特定し、特定した記憶装置１４４にパリティチャンクを書き込む。
【００９６】
Ｓ１０８の処理が完了すると、図８に示した一連の処理は終了する。
（復元方法）
次に、消失したデータチャンクの復元に係る処理の流れについて説明する。図１０は、第２実施形態に係る復元方法の一例を示した図である。
【００９７】
（Ｓ１１１）クライアント装置１１０から記憶装置の障害発生が通知されると、データ復元部１２２ｃは、消失したパリティチャンクを除いた残存するパリティチャンクのリストを生成する。但し、パリティチャンクを格納した記憶装置に障害が発生していない場合には、全てのパリティチャンクを含むリストが生成される。データ復元部１２２ｃは、生成したリストを記憶部１２１に格納する。
【００９８】
（Ｓ１１２、Ｓ１１３）データ復元部１２２ｃは、消失したデータチャンクと同じ数のパリティチャンクをリストから選択する。このとき、既に選択したパリティチャンクの組み合わせは選択されないようにする。そして、データ復元部１２２ｃは、選択可能なパリティチャンクがあるかを判定する。未選択の組み合わせがなく、選択可能なパリティチャンクの組み合わせがない場合、データ復元部１２２ｃは、クライアント装置１１０に復元失敗を通知して図１０に示した一連の処理を終了する。一方、選択可能なパリティチャンクの組み合わせがある場合、処理はＳ１１４へと進む。
【００９９】
（Ｓ１１４）データ復元部１２２ｃは、選択した各パリティチャンクの補償範囲が、消失したデータチャンクを含むかを判定する。選択した各パリティチャンクの補償範囲が、消失したデータチャンクを含む場合、処理はＳ１１５へと進む。一方、選択した各パリティチャンクの補償範囲が、消失したデータチャンクを含まない場合、処理はＳ１１２へと進む。つまり、消失したデータチャンクを補償範囲に含まないパリティチャンクがある場合に、Ｓ１１２の選択が再び行われる。
【０１００】
（Ｓ１１５）データ復元部１２２ｃは、消失した全てのデータチャンクが補償範囲のいずれかに含まれるかを判定する。消失した全てのデータチャンクが補償範囲のいずれかに含まれる場合、処理はＳ１１６へと進む。一方、消失したデータチャンクのいずれかが補償範囲に含まれない場合、処理はＳ１１２へと進む。つまり、選択したパリティチャンクの補償範囲のいずれにも含まれないデータチャンクがある場合、そのデータチャンクを復元することはできないため、この場合にはＳ１１２の選択が再び行われる。
【０１０１】
（Ｓ１１６、Ｓ１１７）データ復元部１２２ｃは、選択したパリティチャンク及び補償範囲に含まれる残存するデータチャンクに基づく連立一次方程式（ＲＳ符号を利用する場合）を解いて、消失したデータチャンクを復元する。そして、データ復元部１２２ｃは、復元したデータチャンクを予備の記憶装置に格納し、復元処理が正常終了したことをクライアント装置１１０に通知する。
【０１０２】
Ｓ１１７の処理が完了すると、図１０に示した一連の処理は終了する。
以上、ストレージ装置１２０の動作について説明した。上述した補償範囲の設定方法を適用することで、図７に示したようにリカバリ速度の改善を果たしつつ、信頼性の向上を実現することが可能になる。
【０１０３】
以上、第２実施形態について説明した。
【符号の説明】
【０１０４】
１０  ストレージ装置
１１  記憶部
１２  制御部
２０、２１、２２、２３、２４、３０、３１、３２  記憶装置
４０、４１、４２  補償範囲
Ｄ０、Ｄ１、Ｄ２、Ｄ３、Ｄ４  データ
Ｐ０、Ｐ１、Ｐ２  パリティ
【図１】
0006369298.tif 000004
【図２】
0006369298.tif 000005
【図３】
0006369298.tif 000006
【図４】
0006369298.tif 000007
【図５】
0006369298.tif 000008
【図６】
0006369298.tif 000009
【図７】
0006369298.tif 000010
【図８】
0006369298.tif 000011
【図９】
0006369298.tif 000012
【図１０】
0006369298.tif 000013