(57)【要約】【課題】ＲＡＩＤ強制復旧後のデータ保証を充実する。【解決手段】強制復旧部３３が、ＲＡＩＤ装置が故障状態になったときに、最初のディスク及び最後のディスクが復旧可能か否かを判定し、復旧可能である場合には両方のディスクを強制復旧する。また、ステージング部３４及びライトバック部３５は、冗長度のない状態で書込まれたデータに対しては、データの整合性のチェックを行いながらデータの読書を行い、整合が取れていない場合には、被疑ディスクのデータを復旧する。【選択図】図２
2014119831.tif 000002
【特許請求の範囲】
【請求項１】
複数の記憶装置と、該複数の記憶装置からのデータの読出し及び該複数の記憶装置へのデータの書込みを制御する制御装置とを有するストレージ装置において、
前記制御装置は、
前記複数の記憶装置のうちいくつかの記憶装置が故障して冗長度のない冗長グループの状態である冗長無状態時に新たに記憶装置が故障した場合に、故障した複数の記憶装置の故障原因を基に、冗長グループの強制復旧の実行が可能か否かを判断する判断部と、
前記判断部により冗長グループの強制復旧の実行が可能であると判断された場合には、冗長無状態時に新たに故障した記憶装置を含む複数の記憶装置を冗長グループに組み込んで当該ストレージ装置を使用可能な状態として強制復旧を実行する復旧処理部と
を有することを特徴とするストレージ装置。
【請求項２】
前記冗長無状態時にデータの書込みを行う際に、書込み領域を示す書込情報を管理情報記憶領域に記憶しておき、前記強制復旧が実行された状態である強制復旧状態時に、該書込情報を基に、記憶装置からのデータの読出し及び記憶装置へのデータの書込みを行う読書部を
さらに有することを特徴とする請求項１に記載のストレージ装置。
【請求項３】
前記読書部は、前記強制復旧状態時に記憶装置からデータを読出す際に、読出すデータが前記冗長無状態時に書込みが行われた領域であるか否かを前記書込情報を基に判断し、書込みが行われた領域である場合には、前記冗長無状態以前に故障した記憶装置に対して最新のデータに更新する処理を行いながらデータの読出しを行うことを特徴とする請求項２に記載のストレージ装置。
【請求項４】
前記読書部は、前記強制復旧状態時に記憶装置へデータを書込む際に、パリティデータ生成のために記憶装置からのデータの読出しが必要であるか否かを判断し、データの読出しが必要であると判断した場合に、書込むデータが前記冗長無状態時に書込みが行われた領域であるか否かを前記書込情報を基に判断し、書込みが行われた領域である場合には、前記冗長無状態以前に故障した記憶装置に対して最新のデータに更新する処理を行いながらデータの書込みを行うことを特徴とする請求項２に記載のストレージ装置。
【請求項５】
前記複数の記憶装置はストライプ毎にデータと該データから作成されるパリティデータを記憶し、
前記読書部は、読出すデータ又は書込むデータを含む全ストライプについてデータとパリティデータを記憶装置から読出し、前記冗長無状態以前に故障した記憶装置のデータを他の記憶装置から読み出したデータ及びパリティデータから生成することによって該記憶装置のデータを最新のデータに更新することを特徴とする請求項３又は４に記載のストレージ装置。
【請求項６】
複数の記憶装置と、該複数の記憶装置からのデータの読出し及び該複数の記憶装置へのデータの書込みを制御する制御装置とを有するストレージ装置における制御方法において、
前記制御装置が、
前記複数の記憶装置のうちいくつかの記憶装置が故障して冗長度のない冗長グループの状態である冗長無状態時に新たに記憶装置が故障した場合に、故障した複数の記憶装置の故障原因を基に、冗長グループの強制復旧の実行が可能か否かを判断し、
冗長グループの強制復旧の実行が可能であると判断した場合には、冗長無状態時に新たに故障した記憶装置を含む複数の記憶装置を冗長グループに組み込んで当該ストレージ装置を使用可能な状態として強制復旧を実行する
ことを特徴とする制御方法。
【請求項７】
複数の記憶装置と、該複数の記憶装置からのデータの読出し及び該複数の記憶装置へのデータの書込みを制御するコンピュータとを有するストレージ装置で該コンピュータにより実行される制御プログラムにおいて、
前記コンピュータに、
前記複数の記憶装置のうちいくつかの記憶装置が故障して冗長度のない冗長グループの状態である冗長無状態時に新たに記憶装置が故障した場合に、故障した複数の記憶装置の故障原因を基に、冗長グループの強制復旧の実行が可能か否かを判断し、
冗長グループの強制復旧の実行が可能であると判断した場合には、冗長無状態時に新たに故障した記憶装置を含む複数の記憶装置を冗長グループに組み込んで当該ストレージ装置を使用可能な状態として強制復旧を実行する
処理を実行させることを特徴とする制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置、制御方法及び制御プログラムに関する。
【背景技術】
【０００２】
ビッグデータの時代により、性能や容量が異なる記憶装置に特性に応じてデータを自動的に振り分ける「ストレージ自動階層化」の技術が注目され、大容量で安価な磁気ディスク装置(例えば、４ＴＢのＳＡＴＡ−ＤＩＳＫ)の需要が高まっている。このような磁気ディスク装置でＲＡＩＤ（Redundant  Arrays  of  Inexpensive  Disks）を構成し、運用中に磁気ディスク装置が１台故障すると、ホットスペアの磁気ディスク装置にリビルド（Rebuild）が実施されるが、長時間を要することになる。ここで、リビルドとは、データを再構築することである。リビルド中は磁気ディスク装置は冗長度がない状態なので、リビルドが長時間続くと、ＲＡＩＤ故障に陥るリスクが高くなる。
【０００３】
ＲＡＩＤ故障などによるデータファイルの破損は、データベースに深刻な被害をもたらす。その理由は、整合性を失ったデータがストレージに書き込まれた場合、その原因を特定したり、システムを修復したり、データベースをリカバリしたりするのに多大な労力と時間が必要となるためである。
【０００４】
そこで、ＲＡＩＤ故障に至った場合、ＲＡＩＤ故障に陥ったＲＡＩＤ装置をＲＡＩＤ強制復旧により早急に運用可能な状態にするＲＡＩＤ強制復旧技術が知られている。例えば、ＲＡＩＤ５において２台の磁気ディスク装置が故障してＲＡＩＤ故障に至った場合、２台目の故障ディスク装置が一過性の故障などにより復旧可能である場合には、２台目の故障ディスク装置を復旧させることにより、ＲＡＩＤ強制復旧が行われる。
【０００５】
また、ＲＡＩＤ閉塞に際し、閉塞直前のＲＡＩＤ構成情報を記憶しておき、リカバリ要求がユーザ操作により与えられた場合に、記憶したＲＡＩＤ構成情報に基づいてＲＡＩＤを閉塞直前の状態に強制的に戻す技術が知られている（例えば、特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００２−３７３０５９号公報
【特許文献２】特開２００７−５２５０９号公報
【特許文献３】特開２０１０−１３４６９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、強制復旧させたＲＡＩＤ装置においては、冗長度がないことから、再びＲＡＩＤ故障となる危険性が高く、データの保証が十分ではないという問題がある。
【０００８】
本発明は、１つの側面では、強制復旧させたＲＡＩＤ装置において、データ保証をより充実することを目的とする。
【課題を解決するための手段】
【０００９】
本願の開示するストレージ装置は、１つの態様において、複数の記憶装置と、該複数の記憶装置からのデータの読出し及び該複数の記憶装置へのデータの書込みを制御する制御装置とを有するストレージ装置である。前記制御装置は、前記複数の記憶装置のうちいくつかの記憶装置が故障して冗長度のない冗長グループの状態である冗長無状態時に新たに記憶装置が故障した場合に、故障した複数の記憶装置の故障原因を基に冗長グループの強制復旧の実行が可能か否かを判断する。また、前記制御装置は、前記判断部により冗長グループの強制復旧の実行が可能であると判断された場合には、冗長無状態時に新たに故障した記憶装置を含む複数の記憶装置を冗長グループに組み込む。
【発明の効果】
【００１０】
１実施態様によれば、データ保証をより充実することができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施例に係るＲＡＩＤ装置の構成を示す図である。
【図２】図２は、ＣＰＵで実行される入出力制御プログラムの機能構成を示す図である。
【図３】図３は、slice＿bitmapの一例を示す図である。
【図４】図４は、ＲＡＩＤ強制復旧機能で復旧できないＲＡＩＤ状態の一例を示す図である。
【図５Ａ】図５Ａは、最後のディスクだけをＲＡＩＤ強制復旧する処理の処理フローを示すフローチャートである。
【図５Ｂ】図５Ｂは、最後のディスクと最初のディスクをＲＡＩＤ強制復旧する処理の処理フローを示すフローチャートである。
【図６】図６は、ＲＡＩＤ装置（ＲＬＵの状態）の状態遷移を示す図である。
【図７】図７は、ＲＡＩＤ装置の状態が「ＥＸＰＯＳＥＤ」の場合のライトバック処理の処理フローを示すフローチャートである。
【図８】図８は、ＲＡＩＤ強制復旧後のステージング処理の処理フローを示すフローチャートである。
【図９】図９は、ＲＡＩＤ強制復旧後のステージング処理の一例を示す図である。
【図１０】図１０は、ＲＡＩＤ強制復旧後のライトバック処理の処理フローを示すフローチャートである。
【図１１】図１１は、ライトバックの種類を説明するための図である。
【図１２】図１２は、ＲＡＩＤ強制復旧後のライトバック処理の一例を示す図である。
【発明を実施するための形態】
【００１２】
以下に、本願の開示するストレージ装置、制御方法及び制御プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【００１３】
まず、実施例に係るＲＡＩＤ装置について説明する。図１は、実施例に係るＲＡＩＤ装置の構成を示す図である。図１に示すように、ＲＡＩＤ装置２は、冗長系を構成する２台のＣＭ（Control  Module）２１と、ＤＥ（Device  Enclosure）２２とを有する。
【００１４】
ＣＭ２１は、ＲＡＩＤ装置２からのデータの読出し及びＲＡＩＤ装置２へのデータの書込みを制御するコントローラであり、ＣＡ（Chanel  Adapter）２１１と、ＣＰＵ２１２と、メモリ２１３と、ＤＩ（Device  Interface）２１４とを有する。ＣＡ２１１は、ＲＡＩＤ装置２を利用するコンピュータであるホスト１とのインタフェースであり、ホスト１からのアクセス要求を受け付け、ホスト１に応答する。ＣＰＵ２１２は、メモリ２１３に格納された入出力制御プログラムを実行することによって、ＲＡＩＤ装置２を制御する中央処理装置である。メモリ２１３は、ＣＰＵ２１２で実行される入出力制御プログラムやデータを格納する記憶装置である。ＤＩ２１４は、ＤＥ２２とのインタフェースであり、ＤＥ２２に対してデータの読出し及び書込みを指示する。
【００１５】
ＤＥ２２は、４台のディスク２２１を有し、ホスト１が利用するデータを記憶する。なお、ここでは、ＤＥ２２は、４台のディスク２２１を有し、ＲＡＩＤ５（３＋１）を構成する場合、すなわち各ストライプについて３台でデータを記憶し、１台でパリティデータを記憶する場合について説明する。しかしながら、ＤＥ２２は、４台以外のディスク２２１を有することもできる。ディスク２２１は、データの記録媒体として磁気ディスクを利用する磁気ディスク装置である。
【００１６】
次に、ＣＰＵ２１２で実行される入出力制御プログラムの機能構成について説明する。図２は、ＣＰＵで実行される入出力制御プログラムの機能構成を示す図である。図２に示すように、入出力制御プログラム３は、テーブル記憶部３１と、状態管理部３２と、強制復旧部３３と、ステージング部３４と、ライトバック部３５と、制御部３６とを有する。
【００１７】
テーブル記憶部３１は、ＲＡＩＤ装置２の制御に必要なデータを記憶する記憶部である。テーブル記憶部３１が記憶するデータは、図１に示したメモリ２１３に記憶される。具体的には、テーブル記憶部３１は、装置の状態、ＲＡＩＤレベルなどＲＡＩＤ装置２に関する情報を記憶するＲＬＵ＿ＴＢＬ、装置の状態、容量などディスクに関する情報を記憶するＰＬＵ＿ＴＢＬを記憶する。
【００１８】
また、テーブル記憶部３１は、slice＿bitmapの情報をＳＬＵ＿ＴＢＬとして記憶する。ここで、slice＿bitmapは、ＲＡＩＤ装置２が冗長度のない状態であるときに、データの書込みが行われた領域を示す情報であり、ＬＢＡ（Logical  Block  Address）で指定される所定の大きさの領域の状態を１ビットで表す。
【００１９】
図３は、slice＿bitmapの一例を示す図であり、１ボリューム＝０〜０ｘ１００００００ＬＢＡ（８ＧＢ）に対して１バイトのslice＿bitmapを用いる場合を示す。例えば、ＬＢＡ＝０〜０ｘ１ＦＦＦＦＦの範囲内の１ＧＢに対してslice＿bitmapの最下位ビットが割り当てられ、ＬＢＡ＝０ｘＥ０００００〜０ｘＦＦＦＦＦＦの範囲内の１ＧＢに対してslice＿bitmapの最上位ビットが割り当てられている。なお、先頭が０ｘである数字は１６進数を示す。また、slice＿bitmapのビット値「１」は、ＲＡＩＤ装置２が冗長度のない状態であるときに、対応する領域にデータの書込みが行われたことを示し、slice＿bitmapのビット値「０」は、ＲＡＩＤ装置２が冗長度のない状態であるときに、対応する領域にデータの書込みが行われていないことを示す。また、ここでは、１バイトのslice＿bitmapを用いる場合を説明したが、４バイトのslice＿bitmapを用いる場合には、全体の領域を３２等分して管理することが可能となる。
【００２０】
状態管理部３２は、ディスク２２１やＲＡＩＤ装置２の故障を検出し、ＰＬＵ＿ＴＢＬやＲＬＵ＿ＴＢＬを用いて、ディスク２２１やＲＡＩＤ装置２を管理する。状態管理部３２が管理する状態には、冗長度のある状態で利用可能であることを示す「ＡＶＡＩＬＡＢＬＥ」、故障であることを示す「ＢＲＯＫＥＮ」、冗長度がないことを示す「ＥＸＰＯＳＥＤ」がある。また、状態管理部３２が管理する状態には、ＲＡＩＤ強制復旧状態であることを示す「ＴＥＭＰＯＲＡＲＹ＿ＵＳＥ」などがある。また、状態管理部３２は、ＲＡＩＤ装置２の状態を変更した場合に、ライトバック部３５に構成変更通知を送る。
【００２１】
強制復旧部３３は、ＲＡＩＤ装置２が故障状態になったとき、すなわち、ＲＡＩＤ装置２の状況が「ＢＲＯＫＥＮ」になったときに、最初のディスク及び最後のディスクが復旧可能か否かを判定し、復旧可能である場合には両方のディスクを強制復旧する。ここで、「最初のディスク」とは全てのディスク２２１が正常である状態から最初に故障したディスクであり、被疑ディスクとも呼ばれる。また、「最後のディスク」とは、ＲＡＩＤ装置２が冗長度がない状態の時に新たに故障したディスクであり、最後のディスクが故障するとＲＡＩＤ装置２は故障状態となる。ＲＡＩＤ５では、２つのディスクが故障するとＲＡＩＤ装置２は故障状態となるため、２番目に故障したディスクが最後のディスクである。
【００２２】
図４は、ＲＡＩＤ強制復旧機能で復旧できないＲＡＩＤ状態の一例を示す図である。図４において、「ＢＲ」はディスクの状態が「ＢＲＯＫＥＮ」であることを示す。図４は、ＲＡＩＤ５において、ディスクが１台故障してＲＡＩＤ装置２が「ＥＸＰＯＳＥＤ」の状況にあるとき、コンペアエラーにより２台目のディスクが故障するとＲＡＩＤ装置２の強制復旧は可能でないことを示す。ここで、コンペアエラーとは、所定のデータをディスクに書き込んだ後に読み出して書き込んだデータと比較することにより発見されるエラーである。
【００２３】
コンペアエラーのようなハードウェア要因による故障の場合には、強制復旧部３３は、ＲＡＩＤ強制復旧を行うことはできない。一方、一時的にディスクへの負荷が高くなったことに起因するエラーなど、一過性の故障の場合には、強制復旧部３３は、ＲＡＩＤ強制復旧を行う。なお、強制復旧部３３は、ＲＡＩＤ強制復旧を行うと、ＲＡＩＤ装置２の状態を「ＴＥＭＰＯＲＡＲＹ＿ＵＳＥ」に変更する。
【００２４】
ステージング部３４は、ホスト１からの要求に基づいてＲＡＩＤ装置２が記憶するデータを読出す。ただし、ステージング部３４は、ＲＡＩＤ装置２の状態がＲＡＩＤ強制復旧が行われた状態である場合には、ＲＡＩＤ装置２が記憶するデータを読み出す前に、データの読出しを要求された領域に対応するslice＿bitmapの値をチェックする。
【００２５】
そして、slice＿bitmapの値が「０」である場合には、ＲＡＩＤ装置２が冗長度のないときにデータの書込みが行われた領域ではないので、ステージング部３４は、要求されたデータをディスク２２１から読出してホスト１に応答する。
【００２６】
一方、slice＿bitmapの値が「１」である場合には、ステージング部３４は、要求されたデータをディスク２２１から読出してホスト１に応答するとともに、データを読出した領域に対してデータの整合をとる処理を行う。すなわち、ステージング部３４は、ＲＡＩＤ装置２が冗長度のないときにデータの書込みが行われた領域に関して、データの整合性を図る処理を行う。具体的には、ステージング部３４は、ＲＡＩＤ装置２が冗長度のないときにデータの書込みが行われた領域に関して、被疑ディスクのデータをストライプ単位で他のディスクのデータを用いて最新のデータに更新する。その理由は、被疑ディスクは、最初に故障したディスクであるため、ＲＡＩＤ装置２が冗長度のないときにデータの書込みが行われた領域については古いデータが格納されているためである。なお、ステージング部３４によるデータの整合をとる処理の処理フローの詳細については後述する。
【００２７】
ライトバック部３５は、ホスト１からの要求に基づいてＲＡＩＤ装置２にデータを書込む。ただし、ライトバック部３５は、ＲＡＩＤ装置２の状態が冗長度のない場合には、slice＿bitmapのビットのうちデータを書込む領域に対応するビットを「１」に設定する。
【００２８】
また、ライトバック部３５は、データの書込みにあたってパリティを計算するためにディスク２２１からデータを読出す必要がある場合には、ＲＡＩＤ装置２が冗長度のないときにデータの書込みが行われた領域に関して、データの整合性を図る処理を行う。ライトバック部３５によるデータの整合をとる処理の処理フローの詳細についても後述する。
【００２９】
制御部３６は、入出力制御プログラム３全体の制御を行う処理部であり、具体的には、機能部間の制御の移動や機能部と記憶部の間のデータの受け渡しなどを行うことによって、入出力制御プログラム３を一つのプログラムとして機能させる。
【００３０】
次に、ＲＡＩＤ強制復旧を行う処理の処理フローについて図５Ａ及び図５Ｂを用いて説明する。図５Ａは、最後のディスクだけをＲＡＩＤ強制復旧する処理の処理フローを示すフローチャートであり、図５Ｂは、最後のディスクと最初のディスクをＲＡＩＤ強制復旧する処理の処理フローを示すフローチャートである。
【００３１】
図５Ａに示すように、ＲＡＩＤ装置は、１台のディスクの故障すなわち最初のディスクの故障を検出し、ＲＡＩＤ装置の状態を「ＲＬＵ＿ＥＸＰＯＳＥＤ」とする（ステップＳ１）。その後、ＲＡＩＤ装置は、もう１台のディスクの故障すなわち最後のディスクの故障を検出し、ＲＡＩＤ装置の状態を「ＲＬＵ＿ＢＲＯＫＥＮ」とする（ステップＳ２）。
【００３２】
そして、ＲＡＩＤ装置は、ＲＡＩＤ強制復旧を実施する（ステップＳ３）。すなわち、ＲＡＩＤ装置は、最後のディスクは復旧可能であるか否かを判定し（ステップＳ４）、復旧不可である場合にはＲＡＩＤ故障のまま処理を終了する。一方、復旧可能である場合には、ＲＡＩＤ装置は、最後のディスクを復旧し、ＲＡＩＤ装置の状態を「ＲＬＵ＿ＥＸＰＯＳＥＤ」とする（ステップＳ５）。
【００３３】
その後、ＲＡＩＤ装置は、最初のディスクが交換されると、最初のディスクをリビルドし、状態を「ＲＬＵ＿ＡＶＡＩＬＡＢＬＥ」とする（ステップＳ６）。そして、ＲＡＩＤ装置は、最後のディスクが交換されると、最後のディスクをリビルドし、状態を「ＲＬＵ＿ＡＶＡＩＬＡＢＬＥ」とする（ステップＳ７）。ここで、ＲＡＩＤ装置が状態を再度「ＲＬＵ＿ＡＶＡＩＬＡＢＬＥ」とするのは、リビルド中に状態を変更するためである。
【００３４】
これに対して、最後のディスクと最初のディスクをＲＡＩＤ強制復旧する処理では、図５Ｂに示すように、ＲＡＩＤ装置２は、１台のディスク２２１の故障すなわち最初のディスクの故障を検出する。そして、ＲＡＩＤ装置２は、状態を「ＲＬＵ＿ＥＸＰＯＳＥＤ」とする（ステップＳ２１）。そして、「ＲＬＵ＿ＥＸＰＯＳＥＤ」の状態でライトバックが行われると、ＲＡＩＤ装置２は、slice＿bitmapのビットのうちライトバックされた領域に対応するビットを更新する（ステップＳ２２）。
【００３５】
その後、ＲＡＩＤ装置２は、もう１台のディスク２２１の故障すなわち最後のディスクの故障を検出し、ＲＡＩＤ装置２の状態を「ＲＬＵ＿ＢＲＯＫＥＮ」とする（ステップＳ２３）。
【００３６】
そして、ＲＡＩＤ装置２は、ＲＡＩＤ強制復旧を実施する（ステップＳ２４）。すなわち、ＲＡＩＤ装置２は、最後のディスクは復旧可能であるか否かを判定し（ステップＳ２５）、復旧不可である場合にはＲＡＩＤ故障のまま処理を終了する。
【００３７】
一方、復旧可能である場合には、ＲＡＩＤ装置２は、最初のディスクは復旧可能であるか否かを判定し（ステップＳ２６）、復旧不可である場合には、最後のディスクを復旧し、状態を「ＲＬＵ＿ＥＸＰＯＳＥＤ」とする（ステップＳ２７）。その後、ＲＡＩＤ装置２は、最初のディスクが交換されると、最初のディスクをリビルドし、状態を「ＲＬＵ＿ＡＶＡＩＬＡＢＬＥ」とする（ステップＳ２８）。そして、ＲＡＩＤ装置２は、最後のディスクが交換されると、最後のディスクをリビルドし、状態を「ＲＬＵ＿ＡＶＡＩＬＡＢＬＥ」とする（ステップＳ２９）。ここで、ＲＡＩＤ装置２が状態を再度「ＲＬＵ＿ＡＶＡＩＬＡＢＬＥ」とするのは、リビルド中に状態を変更するためである。
【００３８】
一方、最初のディスクが復旧可能である場合には、ＲＡＩＤ装置２は、最初のディスクを復旧し、最初のディスクの状態を「ＰＬＵ＿ＴＥＭＰＯＲＡＲＹ＿ＵＳＥ」とする（ステップＳ３０）。そして、ＲＡＩＤ装置２は、最後のディスクを復旧し、最後のディスクの状態を「ＰＬＵ＿ＡＶＡＩＬＡＢＬＥ」とする（ステップＳ３１）。そして、ＲＡＩＤ装置２は、装置の状態を「ＲＬＵ＿ＴＥＭＰＯＲＡＲＹ＿ＵＳＥ」とする（ステップＳ３２）。
【００３９】
その後、最初のディスクが交換されると、ＲＡＩＤ装置２は、最初のディスクをリビルドする。あるいは、ＲＡＩＤ装置２は、ＲＡＩＤ診断を実行する（ステップＳ３３）。そして、ＲＡＩＤ装置２は、状態を（ＲＬＵ＿ＡＶＡＩＬＡＢＬＥ）とする。そして、ＲＡＩＤ装置２は、最後のディスクが交換されると、最後のディスクをリビルドし、状態を（ＲＬＵ＿ＡＶＡＩＬＡＢＬＥ）とする（ステップＳ３４）。ここで、ＲＡＩＤ装置２が状態を再度「ＲＬＵ＿ＡＶＡＩＬＡＢＬＥ」とするのは、リビルド中に状態を変更するためである。
【００４０】
このように、最初のディスク及び最後のディスクが復旧可能か否かを判定し、復旧可能である場合には両方のディスクを復旧することによって、ＲＡＩＤ装置２は、冗長度のあるＲＡＩＤ強制復旧を行うことができる。
【００４１】
次に、ＲＡＩＤ装置の状態遷移について説明する。図６は、ＲＡＩＤ装置（ＲＬＵの状態）の状態遷移を示す図である。図６に示すように、最後のディスクだけをＲＡＩＤ強制復旧する場合には、ディスクが全て正常に動作しているときは、ＲＡＩＤ装置の状態は、冗長度がある「ＡＶＡＩＬＡＢＬＥ」である（ＳＴ１１）。そして、１台のディスクすなわち最初のディスクが故障すると、ＲＡＩＤ装置の状態は、冗長度のない「ＥＸＰＯＳＥＤ」に移る（ＳＴ１２）。
【００４２】
その後、さらにもう１台のディスクすなわち最後のディスクが故障すると、ＲＡＩＤ装置の状態は、故障状態を示す「ＢＲＯＫＥＮ」に移る（ＳＴ１３）。そして、ＲＡＩＤ強制復旧により最後のディスクが復旧されると、ＲＡＩＤ装置の状態は、冗長度のない「ＥＸＰＯＳＥＤ」に移る（ＳＴ１４）。その後、最初のディスクの交換が行われると、ＲＡＩＤ装置の状態は、冗長度のある「ＡＶＡＩＬＡＢＬＥ」に移る（ＳＴ１５）。
【００４３】
これに対して、最後のディスクと最初のディスクをＲＡＩＤ強制復旧する場合には、ディスク２２１が全て正常に動作しているときは、ＲＡＩＤ装置２の状態は、冗長度がある「ＡＶＡＩＬＡＢＬＥ」である（ＳＴ２１）。そして、１台のディスク２１１すなわち最初のディスクが故障すると、ＲＡＩＤ装置２の状態は、冗長度のない「ＥＸＰＯＳＥＤ」に移る（ＳＴ２２）。
【００４４】
その後、さらにもう１台のディスク２２１すなわち最後のディスクが故障すると、ＲＡＩＤ装置２の状態は、故障状態を示す「ＢＲＯＫＥＮ」に移る（ＳＴ２３）。そして、ＲＡＩＤ強制復旧により最後のディスクと最初のディスクが復旧されると、ＲＡＩＤ装置２の状態は、冗長度はあるが一時的に使用可能な状態を示す「ＴＥＭＰＯＲＡＲＹ＿ＵＳＥ」に移る（ＳＴ２４）。その後、最初のディスクの交換又はＲＡＩＤ診断が行われると、ＲＡＩＤ装置２の状態は、冗長度のある「ＡＶＡＩＬＡＢＬＥ」に移る（ＳＴ２５）。
【００４５】
このように、ＲＡＩＤ強制復旧により最後のディスクと最初のディスクを復旧し、状態を「ＴＥＭＰＯＲＡＲＹ＿ＵＳＥ」とすることによって、ＲＡＩＤ装置２は、ＲＡＩＤ強制復旧後に冗長度のある状態で動作することができる。
【００４６】
次に、ＲＡＩＤ装置２の状態が「ＥＸＰＯＳＥＤ」の場合のライトバック処理の処理フローについて説明する。図７は、ＲＡＩＤ装置２の状態が「ＥＸＰＯＳＥＤ」の場合のライトバック処理の処理フローを示すフローチャートである。
【００４７】
図７に示すように、ライトバック部３５は、前回のライトバック処理の後、構成変更通知があったか否かを判定する（ステップＳ４１）。その結果、構成変更通知がなかった場合には、ＲＡＩＤ装置２の状態は「ＥＸＰＯＳＥＤ」のままなので、ライトバック部３５は、ステップＳ４３に進む。一方、構成変更通知があった場合には、ＲＡＩＤ装置２の状態に変更があったので、ライトバック部３５は、ＲＡＩＤ装置２は冗長度があるか否かを判定する（ステップＳ４２）。
【００４８】
その結果、冗長度がある場合には、ＲＡＩＤ装置２の状態は「ＥＸＰＯＳＥＤ」ではなくなったので、ライトバック部３５は、slice＿bitmapを初期化する（ステップＳ４４）。一方、冗長度がない場合には、ライトバック部３５は、ライト要求範囲に対してslice＿bitmapの対応するビットを「１」に設定する（ステップＳ４３）。
【００４９】
そして、ライトバック部３５は、ディスク２２１へのデータの書込み処理を行い（ステップＳ４５）、結果をホスト１に応答する（ステップＳ４６）。
【００５０】
このように、ＲＡＩＤ装置２の状態が「ＥＸＰＯＳＥＤ」の場合に、ライトバック部３５がライト要求範囲に対してslice＿bitmapの対応するビットを「１」に設定するので、ＲＡＩＤ装置２は、ＲＡＩＤ強制復旧状態時に整合性処理の対象領域を特定できる。
【００５１】
次に、ＲＡＩＤ強制復旧後のステージング処理の処理フローについて図８及び図９を用いて説明する。ここで、ＲＡＩＤ強制復旧後のステージング処理とは、ＲＡＩＤ装置２の状態が「ＲＬＵ＿ＴＥＭＰＯＲＡＲＹ＿ＵＳＥ」の状態のときのステージング処理である。
【００５２】
図８は、ＲＡＩＤ強制復旧後のステージング処理の処理フローを示すフローチャートであり、図９は、ＲＡＩＤ強制復旧後のステージング処理の一例を示す図である。図８に示すように、ステージング部３４は、ディスクリードの要求範囲のslice＿bitmapの値が「０」であるか「１」であるかを判定する（ステップＳ６１）。
【００５３】
その結果、slice＿bitmapの値が「０」である場合には、ディスクリードの要求範囲はＲＡＩＤ装置２が冗長度のない状態でデータの書込みが行われた領域でないので、ステージング部３４は、従来と同様に、要求範囲のディスクリードを行う（ステップＳ６２）。そして、ステージング部３４は、リードした結果をホスト１に応答する（ステップＳ６３）。
【００５４】
一方、slice＿bitmapの値が「１」である場合には、ディスクリードの要求範囲はＲＡＩＤ装置２が冗長度無の状態でデータの書込みが行われた領域なので、ステージング部３４は、要求範囲に該当するストライプ単位でディスクリードを行う（ステップＳ６４）。
【００５５】
例えば、図９において、ホスト１は、ＬＢＡ＝０ｘ１００〜０ｘ３ＦＦの範囲でステージング要求を行った際、４台のディスク0〜ディスク3にデータがストライプ0〜ストライプ2の３つのストライプに記憶データ５１として記憶されていたとする。ここで、記憶データ５１のうち、データ0、データ4及びデータ8は被疑ディスクであるディスク0が記憶し、データ1、データ5及びパリティ2はディスク1が記憶し、データ2、パリティ1及びデータ6はディスク2が記憶し、パリティ0、データ3及びデータ7はディスク3が記憶する。
【００５６】
また、記憶データ５１のうち網掛け部分がＬＢＡ＝０ｘ１００〜０ｘ３ＦＦに対応するデータであるとする。また、slice＿bitmap＝０ｘ０１であるとすると、図３から、ＬＢＡ＝０ｘ１００〜０ｘ３ＦＦの範囲は、ＲＡＩＤ装置２が冗長度のない状態でデータの書込みが行われた領域なので、読出データ５２のように３ストライプのデータが全て読み出される。すなわち、記憶データ５１のうち網掛けのないデータ0、データ1、データ8もパリティデータや他のデータとともに読み出される。
【００５７】
そして、ステージング部３４は、ディスクリードが正常であるか否かを判定し（ステップＳ６５）、正常である場合には、ステップＳ７０に進む。一方、正常でない場合には、ステージング部３４は、被疑ディスクのエラーであるか否かを判定する（ステップＳ６６）。その結果、被疑ディスク以外のエラーである場合には、データ保証を行うことができないので、ステージング部３４は、要求範囲分のＰＩＮデータを作成し（ステップＳ６７）、ＰＩＮデータとともにホスト１に異常応答を行う（ステップＳ６８）。ここで、ＰＩＮデータとは、データが不整合であることを示すデータである。
【００５８】
これに対して、被疑ディスクのエラーである場合には、ステージング部３４は、被疑ディスクのデータを他のデータ及びパリティデータから復旧する（ステップＳ６９）。すなわち、対象領域は、ＲＡＩＤ装置２が冗長度のない状態でデータの書込みが行われた領域なので、被疑ディスクは、最新のデータを記憶していない可能性がある。そこで、ステージング部３４は、被疑ディスクのデータを最新のデータに更新する。
【００５９】
例えば、図９において、エラー発生データ５３では、データ0の中でエラー発生ＬＢＡ＝０ｘ１０に対応するエラー箇所５３１が、パリティ生成に使われる他のデータ1、データ2及びパリティ0の対応箇所５３２、５３３及び５３４から復旧される。具体的には、ステージング部３４は、データ1、データ2及びパリティ0の対応箇所５３２、５３３及び５３４のデータの排他的論理和をとることによってエラー箇所５３１のデータを生成する。
【００６０】
そして、ステージング部３４は、データの整合がとれているか否かをコンペアチェックにより判定する（ステップＳ７０）。ここで、コンペアチェックとは、ストライプ毎に全データの排他的論理和をとった結果が全てのビットで０であるか否かを判定するチェックである。例えば、図９において、データ0、データ1、データ2及びパリティ0の排他的論理和をとった結果が全てのビットで０であるか否かが判定される。
【００６１】
そして、ステージング部３４は、データの整合がとれていない場合には、被疑ディスクのデータを同一ストライプの他のデータ及びパリティデータから復旧し、被疑ディスクを更新する（ステップＳ７１）。例えば、図９において、復旧データ５４では、データ1、データ2及びパリティ0の排他的論理和をとった結果がデータ0であり、データ5、パリティ1及びデータ3の排他的論理和をとった結果がデータ4である。また、パリティ2、データ6及びデータ7の排他的論理和をとった結果がデータ8である。
【００６２】
そして、ステージング部３４は、ホスト１にデータとともに正常応答を送る（ステップＳ７２）。
【００６３】
このように、リードの領域がＲＡＩＤ装置２が冗長度のない状態でデータの書込みが行われた領域である場合に、ステージング部３４が、被疑ディスクの整合をとる処理を行うことによって、ＲＡＩＤ装置２は、より高いレベルでのデータ保証を行うことができる。
【００６４】
次に、ＲＡＩＤ強制復旧後のライトバック処理の処理フローについて図１０〜図１２を用いて説明する。ここで、ＲＡＩＤ強制復旧後のライトバック処理とは、ＲＡＩＤ装置２の状態が「ＲＬＵ＿ＴＥＭＰＯＲＡＲＹ＿ＵＳＥ」の状態のときのライトバック処理である。
【００６５】
図１０は、ＲＡＩＤ強制復旧後のライトバック処理の処理フローを示すフローチャートであり、図１１は、ライトバックの種類を説明するための図であり、図１２は、ＲＡＩＤ強制復旧後のライトバック処理の一例を示す図である。図１０に示すように、ライトバック部３５は、ライトバックの種類を判定する（ステップＳ８１）。ここで、図１１に示すように、ライトバックの種類には、「Bandwidth」と「Readband」と「Small」がある。
【００６６】
「Bandwidth」とは、ディスクに書込むデータの大きさがパリティ計算に十分である場合であり、パリティ計算にディスクからデータを読出す必要がない場合である。例えば、図１１に示すように、書込みデータとして、１２８ＬＢＡの大きさのデータｘ、データｙ、データｚがあり、データｘ、データｙ、データｚからパリティが計算される。
【００６７】
「Readband」とは、ディスクに書込むデータの大きさがパリティ計算に不十分である場合であり、パリティ計算にディスクからデータを読出す必要がある場合である。例えば、図１１に示すように、書込みデータとして、１２８ＬＢＡの大きさのデータｘ、データｙがあり、旧データｚはディスクから読出されてパリティが計算される。
【００６８】
「Small」とは、「Readband」と同様に、ディスクに書込むデータの大きさがパリティ計算に不十分である場合であり、パリティ計算にディスクからデータを読出す必要がある場合である。ただし、ライトバックの処理は、ディスクに書込むデータの大きさがパリティ計算に必要なデータの５０％以上である場合には「Readband」であり、ディスクに書込むデータの大きさがパリティ計算に必要なデータの５０％未満である場合には「Small」である。例えば、図１１に示すように、書込みデータとして、１２８ＬＢＡの大きさのデータｘがある場合には、書込まれるデータｘとディスク内の旧データｘと旧パリティからパリティが計算される。
【００６９】
図１０に戻って、ライトバック部３５は、ライトバックの種類が「Bandwidth」である場合には、ディスクからデータを読出す必要はないので、従来と同様に、パリティを作成する（ステップＳ８２）。そして、ライトバック部３５は、データ、パリティのディスクへの書込みを行い（ステップＳ８３）、ホスト１に応答する（ステップＳ８４）。
【００７０】
一方、ライトバックの種類が「Bandwidth」でない場合には、ライトバック部３５は、ディスクライトの要求範囲のslice＿bitmapがヒットするか否か、すなわちslice＿bitmapの値が「０」であるか「１」であるかを判定する（ステップＳ８５）。
【００７１】
その結果、slice＿bitmapにヒットしない、すなわちslice＿bitmapの値が「０」である場合には、ディスクライトの要求範囲はＲＡＩＤ装置２が冗長度のない状態でデータの書込みが行われた領域でないので、ライトバック部３５は、従来と同様の処理を行う。すなわち、ライトバック部３５は、パリティを作成し（ステップＳ８２）、データ、パリティのディスクへの書込みを行い（ステップＳ８３）、ホスト１に応答する（ステップＳ８４）。
【００７２】
一方、slice＿bitmapにヒットした場合には、ライトバックの要求範囲はＲＡＩＤ装置２が冗長度無の状態でデータの書込みが行われた領域なので、ライトバック部３５は、要求範囲に該当するストライプ単位でディスクリードを行う（ステップＳ８６）。ここで、slice＿bitmapにヒットした場合とは、slice＿bitmapの値が「１」の場合である。
【００７３】
例えば、図１２において、ホスト１は、ＬＢＡ＝０ｘ１００〜０ｘ３ＦＦの範囲でライトバック要求を行った際、４台のディスク0〜ディスク3にデータがストライプ0〜ストライプ2の３つのストライプに記憶データ６１として記憶されていたとする。ここで、ストライプ0のライトバック種類は「Small」であり、ストライプ1のライトバック種類は「Bandwith」であり、ストライプ2のライトバック種類は「Readband」であるとする。また、記憶データ６１のうち、データ0、データ4及びデータ8は被疑ディスクであるディスク0が記憶し、データ1、データ5及びパリティ2はディスク1が記憶し、データ2、パリティ1及びデータ6はディスク2が記憶し、パリティ0、データ3及びデータ7はディスク3が記憶する。
【００７４】
また、記憶データ６１のうち網掛け部分がＬＢＡ＝０ｘ１００〜０ｘ３ＦＦに対応するデータであるとする。また、slice＿bitmap＝０ｘ０１であるとすると、ＬＢＡ＝０ｘ１００〜０ｘ３ＦＦの範囲は、図３から、ＲＡＩＤ装置２が冗長度のない状態でデータの書込みが行われた領域なので、読出データ６２のようにストライプ0及びストライプ2のデータが読み出される。すなわち、記憶データ６１のうち網掛けのないデータ0、データ1、データ8もパリティデータや他のデータとともに読み出される。なお、ストライプ1は、ライトバックの種類が「Bandwith」であるので、読み出されない。
【００７５】
そして、ライトバック部３５は、ディスクリードが正常であるか否かを判定し（ステップＳ８７）、正常である場合には、ステップＳ９２に進む。一方、正常でない場合には、ライトバック部３５は、被疑ディスクのエラーであるか否かを判定する（ステップＳ８８）。その結果、被疑ディスク以外のエラーである場合には、データ保証を行うことができないので、ライトバック部３５は、要求範囲分のＰＩＮデータを作成し（ステップＳ８９）、ＰＩＮデータとともにホスト１に異常応答を行う（ステップＳ９０）。
【００７６】
これに対して、被疑ディスクのエラーである場合には、ライトバック部３５は、被疑ディスクのデータを他のデータ及びパリティデータから復旧する（ステップＳ９１）。すなわち、対象領域は、ＲＡＩＤ装置２が冗長度のない状態でデータの書込みが行われた領域なので、被疑ディスクは、最新のデータを記憶していない可能性がある。そこで、ライトバック部３５は、被疑ディスクのデータを最新のデータに更新する。
【００７７】
例えば、図１２において、エラー発生データ６３では、データ0の中でエラー発生ＬＢＡ＝０ｘ１０に対応するエラー箇所６３１が、パリティ生成に使われる他のデータ1、データ2及びパリティ0の対応箇所６３２、６３３及び６３４から復旧される。具体的には、ライトバック部３５は、データ1、データ2及びパリティ0の対応箇所６３２、６３３及び６３４のデータの排他的論理和をとることによってエラー箇所６３１のデータを生成する。
【００７８】
そして、ライトバック部３５は、データの整合がとれているか否かをコンペアチェックにより判定する（ステップＳ９２）。例えば、図１２において、データ0、データ1、データ2及びパリティ0の排他的論理和をとった結果が全てのビットで０であるか否かが判定される。
【００７９】
その結果、データの整合がとれている場合には、ライトバック部３５は、ディスクライトを発行し（ステップＳ９６）、更新データをディスクに書込む。そして、ライトバック部３５は、ホスト１に正常応答を行う（ステップＳ９７）。
【００８０】
一方、データの整合がとれていない場合には、ライトバック部３５は、被疑ディスクのデータを同一ストライプの他のデータ及びパリティデータから復旧し、被疑ディスクを更新する（ステップＳ９３）。例えば、図１２において、ストライプ2のＬＢＡ＝０ｘ２０でデータの不整合が検出されたとすると、ライトバック部３５は、復旧データ６４において、パリティ2、データ6及びデータ7の排他的論理和をとった結果をデータ8とする。
【００８１】
そして、ライトバック部３５は、ディスクライトを発行し（ステップＳ９４）、復旧したデータ及び更新データをディスクに書込む。例えば、図１２において、ストライプ0については、ライトバック種類は「Small」であり、データの不整合は検出されなかったので、更新データのデータ2とパリティ0がディスクに書込まれる。また、ストライプ2については、ライトバック種類は「Readband」であり、データの不整合が検出されたので、被疑ディスクのデータ8、更新データのデータ6及びデータ7とパリティ2がディスクに書込まれる。そして、ライトバック部３５は、ホスト１に正常応答を行う（ステップＳ９５）。
【００８２】
このように、ライトバックの領域がＲＡＩＤ装置２が冗長度のない状態でデータの書込みが行われた領域である場合に、ライトバック部３５が、被疑ディスクの整合をとる処理を行うことによって、ＲＡＩＤ装置２は、より高いレベルでのデータ保証を行うことができる。
【００８３】
上述してきたように、実施例では、強制復旧部３３が、ＲＡＩＤ装置２が故障状態になったときに、最初のディスク及び最後のディスクが復旧可能か否かを判定し、復旧可能である場合には両方のディスクを強制復旧する。したがって、ＲＡＩＤ装置２は、ＲＡＩＤ強制復旧後に冗長度を備えることができ、データ保証を充実することができる。
【００８４】
また、実施例では、ＲＡＩＤ装置２が冗長度のない状態でデータの書込みを行う際に、ライトバック部３５がslice＿bitmapのビットのうちデータを書込む領域に対応するビットを「１」に設定する。そして、ステージング部３４は、データを読出すときに、slice＿bitmapのビットのうちデータを読出す領域に対応するビットの値が「１」であるか否かを判定し、「１」である場合には、ストライプ単位でディスク２２１からデータを読出す。そして、ステージング部３４は、ストライプ毎にデータの整合性をチェックし、整合がとれていない場合には、被疑ディスクのデータを他のデータ及びパリティデータから復旧する。また、ライトバック部３５は、ライトバックの種類が「Bandwidth」以外でデータを書込むときに、slice＿bitmapのビットのうちデータを書込む領域に対応するビットの値が「１」であるか否かを判定する。そして、ライトバック部３５は、「１」である場合には、ストライプ単位でディスク２２１からデータを読出す。そして、ライトバック部３５は、ストライプ毎にデータの整合性をチェックし、整合がとれていない場合には、被疑ディスクのデータを他のデータ及びパリティデータから復旧する。したがって、ＲＡＩＤ装置２は、データの整合性を向上することができ、データ保証を充実することができる。
【００８５】
なお、実施例では、ＲＡＩＤ５の場合を中心に説明したが、本発明はこれに限定されるものではなく、例えばＲＡＩＤ１、ＲＡＩＤ１＋０、ＲＡＩＤ６など冗長度を有するＲＡＩＤ装置にも同様に適用することができる。ＲＡＩＤ６の場合には、２つのディスクが故障すると冗長度がなくなるので、これら２つのディスクを被疑ディスクと見なすことで、本発明を同様に適用することができる。
【符号の説明】
【００８６】
１    ホスト
２    ＲＡＩＤ装置
３    入出力制御プログラム
２１    ＣＭ
２２    ＤＥ
３１    テーブル記憶部
３２    状態管理部
３３    強制復旧部
３４    ステージング部
３５    ライトバック部
３６    制御部
５１，６１    記憶データ
５２，６２    読出しデータ
５３，６３    エラー発生データ
５４，６４    復旧データ
２１１    ＣＡ
２１２    ＣＰＵ
２１３    メモリ
２１４    ＤＩ
２２１    ディスク
５３１，６３１    エラー箇所
５３２，５３３，５３４，６３２，６３３，６３４    対応箇所
【図１】
2014119831.tif 000003
【図２】
2014119831.tif 000004
【図３】
2014119831.tif 000005
【図４】
2014119831.tif 000006
【図５Ａ】
2014119831.tif 000007
【図５Ｂ】
2014119831.tif 000008
【図６】
2014119831.tif 000009
【図７】
2014119831.tif 000010
【図８】
2014119831.tif 000011
【図９】
2014119831.tif 000012
【図１０】
2014119831.tif 000013
【図１１】
2014119831.tif 000014
【図１２】
2014119831.tif 000015