(57)【要約】  ストレージ装置（１）は、書き込みデータにＥＣＣを付加してストライプを生成し、所定数のストライプにパリティを付加した冗長グループを生成してＮＡＮＤフラッシュ（１１）に書き込む。ストレージ装置（１）は、ＮＡＮＤフラッシュから読み出された同一の冗長グループに属するストライプに誤りがあれば、誤りがあるストライプの訂正を行なうパリティ訂正制御部（１７３ａ）と、ＮＡＮＤフラッシュからそれぞれ読み出された同一の冗長グループに属する各ストライプとパリティをＥＣＣの生成単位ごとに組分けて、複数の分割ストライプと分割パリティを含む誤り訂正グループを複数生成し、同一の誤り訂正グループにおいて各分割ストライプに誤りがあるか否かを分割パリティにより検出し、誤りがある分割ストライプの訂正を行なうＥＣＣグループ訂正制御部（１７３ｂ）とを備えることにより、ＮＡＮＤフラッシュ（１１）のデータの修復率を向上できる。
2014061161.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータ記憶部と、
書き込みデータに第１の誤り訂正符号を付加して所定の書き込み容量のストライプデータを生成し、所定数の前記ストライプデータに第２の誤り訂正符号を付加した冗長グループを生成し、同一の冗長グループに属する複数のストライプデータと第２の誤り訂正符号を前記複数のデータ記憶部にそれぞれ対応付けて書き込む制御を行なう制御部と、
前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属するストライプデータに誤りがあるか否かを第２の誤り訂正符号により検出し、誤りがあるストライプデータの訂正を行なう第１の誤り検出訂正部と、
前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属する各ストライプデータと第２の誤り訂正符号を前記第１の誤り訂正符号の生成単位ごとに組分けて、複数の分割ストライプデータと分割第２の誤り訂正符号を含む誤り訂正グループを複数生成し、同一の誤り訂正グループにおいて各分割ストライプデータに誤りがあるか否かを分割第２の誤り訂正符号により検出し、誤りがある分割ストライプデータの訂正を行なう第２の誤り検出訂正部と、
を備えることを特徴とする記録再生装置。
【請求項２】
前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属するデータに誤りがあるか否かを第１の誤り訂正符号により検出し、誤りがあるデータの訂正を行えない場合、第１の誤り訂正符号の生成単位のいずれの位置で誤りが検出されたかを出力する誤り位置出力部を備え、
前記第２の誤り検出訂正部は、前記誤り位置出力部によって出力された誤り位置を含む誤り訂正グループで誤りがある分割ストライプデータの訂正を行う
ことを特徴とする請求項１に記載の記録再生装置。
【請求項３】
前記誤り訂正グループに複数の誤り位置がある場合、自装置と冗長化された装置内の複数のデータ記憶部に記憶されたデータのうち前記誤り訂正グループに対応するグループに属する、自装置の誤り位置と同じ位置の分割ストライプデータに誤りがなければ、誤りがない分割ストライプデータを受け取り、受け取った分割ストライプデータを自装置の該当する誤り位置に複製する複製部を
さらに備えることを特徴とする請求項２に記載の記録再生装置。
【請求項４】
書き込みデータに第１の誤り訂正符号を付加して所定の書き込み容量のストライプデータを生成し、所定数の前記ストライプデータに第２の誤り訂正符号を付加した冗長グループを生成し、同一の冗長グループに属する複数のストライプデータと第２の誤り訂正符号を複数のデータ記憶部にそれぞれ対応付けて書き込む制御が行われる記録再生装置のデータ誤り訂正装置が、
前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属するストライプデータに誤りがあるか否かを第２の誤り訂正符号により検出し、誤りがあるストライプデータの訂正を行ない、
前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属する各ストライプデータと第２の誤り訂正符号を前記第１の誤り訂正符号の生成単位ごとに組分けて、複数の分割ストライプデータと分割第２の誤り訂正符号を含む誤り訂正グループを複数生成し、同一の誤り訂正グループにおいて各分割ストライプデータに誤りがあるか否かを分割第２の誤り訂正符号により検出し、誤りがある分割ストライプデータの訂正を行なう
各処理を実行することを特徴とする誤り訂正方法。
【請求項５】
複数のデータ記憶部へのデータの書き込みおよび前記複数のデータ記憶部からのデータの読み出しを制御する制御装置において、
書き込みデータに第１の誤り訂正符号を付加して所定の書き込み容量のストライプデータを生成し、所定数の前記ストライプデータに第２の誤り訂正符号を付加した冗長グループを生成し、同一の冗長グループに属する複数のストライプデータと第２の誤り訂正符号を前記複数のデータ記憶部にそれぞれ対応付けて書き込む制御を行なう制御部と、
前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属するストライプデータに誤りがあるか否かを第２の誤り訂正符号により検出し、誤りがあるストライプデータの訂正を行なう第１の誤り検出訂正部と、
前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属する各ストライプデータと第２の誤り訂正符号を前記第１の誤り訂正符号の生成単位ごとに組分けて、複数の分割ストライプデータと分割第２の誤り訂正符号を含む誤り訂正グループを複数生成し、同一の誤り訂正グループにおいて各分割ストライプデータに誤りがあるか否かを分割第２の誤り訂正符号により検出し、誤りがある分割ストライプデータの訂正を行なう第２の誤り検出訂正部と、
を備えることを特徴とする制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記録再生装置などに関する。
【背景技術】
【０００２】
ＮＡＮＤ型のフラッシュメモリ（以降、「ＮＡＮＤフラッシュ」という）は、アクセス性能、容量およびコストのバランスのとれた不揮発性記憶媒体として近年多く用いられている。一方では、ＮＡＮＤフラッシュは、エラーレートが他の不揮発性記憶媒体と比較して高く、信頼性を阻害する要因となっている。【０００３】
このため、ＮＡＮＤフラッシュを制御するコントローラが、ＮＡＮＤフラッシュに書き込むデータにＥＣＣ（Error  Correcting  Code）を付加し、データの読み出し時に、ＥＣＣによるエラー訂正を行っている。【０００４】
また、読み出しデータに対して、複数の誤り訂正符号を用いて誤り訂正するＥＣＣ回路の技術が知られている（例えば、特許文献１参照）。例えば、ＥＣＣ回路は、読み出しデータに対して、第１誤り訂正符号（ハミング符号）を用いて第１誤り訂正する。そして、ＥＣＣ回路は、この第１誤り訂正結果を、第２誤り訂正符号（ＢＨＣ符号）を用いてさらに第２誤り訂正する。さらに、ＥＣＣ回路は、第２誤り訂正結果を、第３誤り訂正符号（ＲＳ符号）を用いて第３誤り訂正する。【０００５】
さらに、エラーレートが高くなっていることの対策として、例えば、ＮＡＮＤフラッシュを制御するコントローラが、ＲＡＩＤ（Redundant  Array  of  Inexpensive  Disks）５の構成を利用したデータをＮＡＮＤフラッシュに書き込む。ここで、ＲＡＩＤ５の構成とは、データが複数に分割された結果得られる複数のストライプデータにパリティが付加された構成である。そして、コントローラは、データの読み出し時に、パリティによるエラー訂正を行う。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−２１１２０９号公報
【特許文献２】特開平９−２１８７５４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来のＮＡＮＤフラッシュに対するエラーレートの対策では、ＮＡＮＤフラッシュのデータの修復率を向上できないという問題がある。【０００８】
例えば、近年、ＮＡＮＤフラッシュでは、微細化や多値化が進むとともに、ビットが壊れやすくなる等の信頼性が低下している。これに伴って、ＥＣＣでのエラー訂正が困難になってきている。また、データがＲＡＩＤ５の構成である場合であっても、複数のストライプデータにエラーが発生すると、パリティでのエラー訂正ができない。したがって、従来のＮＡＮＤフラッシュに対するエラーレートの対策以外で、ＮＡＮＤフラッシュのデータの修復率を向上する策が求められている。【０００９】
なお、上記課題は、ＮＡＮＤフラッシュに限らず、他の記憶媒体であっても、同様に生じる課題である。【００１０】
１つの側面では、本発明は、記憶媒体のデータの修復率を向上することを目的とする。
【課題を解決するための手段】
【００１１】
本願の開示する記録再生装置は、１つの態様において、複数のデータ記憶部と、書き込みデータに第１の誤り訂正符号を付加して所定の書き込み容量のストライプデータを生成し、所定数の前記ストライプデータに第２の誤り訂正符号を付加した冗長グループを生成し、同一の冗長グループに属する複数のストライプデータと第２の誤り訂正符号を前記複数のデータ記憶部にそれぞれ対応付けて書き込む制御を行なう制御部と、前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属するストライプデータに誤りがあるか否かを第２の誤り訂正符号により検出し、誤りがあるストライプデータの訂正を行なう第１の誤り検出訂正部と、前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属する各ストライプデータと第２の誤り訂正符号を前記第１の誤り訂正符号の生成単位ごとに組分けて、複数の分割ストライプデータと分割第２の誤り訂正符号を含む誤り訂正グループを複数生成し、同一の誤り訂正グループにおいて各分割ストライプデータに誤りがあるか否かを分割第２の誤り訂正符号により検出し、誤りがある分割ストライプデータの訂正を行なう第２の誤り検出訂正部とを備える。
【発明の効果】
【００１２】
本願の開示する装置の１つの態様によれば、記憶媒体のデータの修復率を向上できる。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施例１に係るストレージ装置のハードウェア構成を示す図である。
【図２Ａ】図２Ａは、ＮＡＮＤフラッシュの構成の一例を示す図である。
【図２Ｂ】図２Ｂは、ＮＡＮＤフラッシュに記憶されるデータのデータ構造を示す図である。
【図３】図３は、実施例１に係る読み出しデータのグループ化を説明する図である。
【図４】図４は、実施例１に係るデータ訂正の具体例を説明する図である。
【図５】図５は、データの書き込み処理のフローチャートを示す図である。
【図６】図６は、データの訂正処理のフローチャートを示す図である。
【図７】図７は、実施例２に係るストレージ装置のハードウェア構成を示す図である。
【図８】図８は、実施例２に係るデータ訂正の具体例を説明する図（１）である。
【図９】図９は、実施例２に係るデータ訂正の具体例を説明する図（２）である。
【図１０】図１０は、データの訂正処理のフローチャートを示す図である。
【発明を実施するための形態】
【００１４】
以下に、本願の開示する記録再生装置、誤り訂正方法および制御装置の実施例を図面に基づいて詳細に説明する。なお、本実施例によりこの発明が限定されるものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。以下では、ストレージ装置に本発明を適用した場合について説明する。
【実施例１】
【００１５】
［実施例１に係るストレージ装置の構成］
図１は、実施例１に係るストレージ装置のハードウェア構成を示す図である。図１に示すように、ストレージ装置１は、サーバ９と接続する。ストレージ装置１は、ＮＡＮＤフラッシュメモリ（以降、「ＮＡＮＤフラッシュ」という）１１、電源供給ユニット１２、停電時給電ユニット１３およびキャッシュメモリ１４を有する。さらに、ストレージ装置１は、ＣＰＵ１５、メモリコントローラ１６およびＮＡＮＤコントローラ１７を有する。また、ＮＡＮＤコントローラ１７とＮＡＮＤフラッシュ１１とが協働することで、例えば、記録再生装置として動作する。ストレージ装置１内に有するこれらのデバイスは、コントローラモジュール（ＣＭ：Controller  Module）内に備えるとしても良い。また、ストレージ装置１は、サーバ９と接続する。ストレージ装置１は、サーバ９からの命令に基づいてＮＡＮＤフラッシュメモリ１１へデータを書き込んだり、読み出したりする。【００１６】
ＮＡＮＤフラッシュ１１は、不揮発性の半導体記憶装置である。ＮＡＮＤフラッシュ１１は、サーバ９からユーザデータやプログラムを記憶する。すなわち、ＮＡＮＤフラッシュ１１は、サーバ９からのデータ保存先の記憶媒体（ストレージ）として用いられる。【００１７】
ＮＡＮＤフラッシュ１１は、ユーザデータを分割して得られる複数のストライプデータをそれぞれ記憶するとともに、所定数のストライプデータに付加されるパリティを記憶する。すなわち、ＮＡＮＤフラッシュ１１には、ユーザデータが、ＲＡＩＤ５構成で記憶される。なお、図１では、ＮＡＮＤフラッシュ１１が、２個搭載されているものとしたが、３個以上搭載されているものとしても良い。【００１８】
ここで、ＮＡＮＤフラッシュ１１の構成について、図２Ａを参照して説明する。図２Ａは、ＮＡＮＤフラッシュの構成の一例を示す図である。図２Ａに示すように、１個のＮＡＮＤフラッシュ１１は、４個のセルを備える。１個のセルには、ユーザデータの複数のストライプデータのうち１個のストライプデータが記憶される。例えば、後述するＮＡＮＤコントローラ１７がユーザデータを書き込む場合、ＮＡＮＤフラッシュ１１のそれぞれのセルに対応する書き込み部に、書き込み対象のストライプデータのライトコマンドを発行する。ライトコマンドを受け取った書き込み部は、ライトコマンドに対応するストライプデータをセルに書き込む。一方、ＮＡＮＤコントローラ１７がユーザデータを読み出す場合、ＮＡＮＤフラッシュ１１のそれぞれのセルに対応する読み出し部に、読み出し対象のストライプデータのリードコマンドを発行する。リードコマンドを受け取った読み出し部は、リードコマンドに対応するストライプデータをセルから読み出し、読み出したストライプデータをＮＡＮＤコントローラ１７に引き渡す。このようなＮＡＮＤフラッシュ１１は、複数のセルに記憶されるそれぞれのストライプデータによってＲＡＩＤ５構成を実現する。【００１９】
なお、１個のＮＡＮＤフラッシュ１１は４個のセルを備えるので、１個のＮＡＮＤフラッシュ１１に、異なるＲＡＩＤのそれぞれのストライプデータが記憶されるようにしても良い。例えば、１個目のＮＡＮＤフラッシュ１１に、１番目のＲＡＩＤのストライプデータ０、２番目のＲＡＩＤのストライプデータ０、３番目のＲＡＩＤストライプデータ０および４番目のＲＡＩＤストライプデータ０が記憶される。２個目のＮＡＮＤフラッシュ１１に、１番目のＲＡＩＤのストライプデータ１、２番目のＲＡＩＤのストライプデータ１、３番目のＲＡＩＤストライプデータ１および４番目のＲＡＩＤストライプデータ１が記憶される。このように記憶されることで、１つのＮＡＮＤフラッシュ１１が故障した場合でも、故障したＮＡＮＤフラッシュ１１のデータの復元が他のＮＡＮＤフラッシュ１１のデータを用いて可能となる。【００２０】
ここで、ＮＡＮＤフラッシュ１１に記憶されるユーザデータのデータ構造について、図２Ｂを参照して説明する。図２Ｂは、ＮＡＮＤフラッシュに記憶されるユーザデータのデータ構造を示す図である。図２Ｂに示すように、ＮＡＮＤフラッシュに記憶されるユーザデータは、複数のストライプデータと、複数のストライプデータに対応付けられるパリティとを有する。ここでは、７個のストライプデータとパリティとによってＲＡＩＤ５が構成されている。各ストライプデータおよびパリティは、それぞれＮＡＮＤフラッシュ１１への書き込み単位である４キロバイト（ＫＢ）のデータである。そして、各ストライプデータには、ユーザデータｄ１とＣＲＣ（Cyclic  Redundancy  Check）ｄ２とＥＣＣ（Error  Correcting  Code）ｄ３とが含まれる。ＣＲＣｄ２は、ユーザデータｄ１の誤りを検出する誤り検出符号であり、ＥＣＣｄ３は、ユーザデータｄ１の誤りを訂正する誤り訂正符号である。例えば、ストライプデータ０〜３が、それぞれ図２Ａのセル０〜３に記憶され、ストライプデータ４〜６およびパリティが、それぞれ図２Ａのセル４〜７に記憶される。なお、ＣＲＣｄ２は、後述するＣＲＣ生成部１７１ａによって生成され、ＥＣＣｄ３は、後述するＥＣＣ生成部１７２ａによって生成され、パリティは、後述するパリティ生成部１７１ｂによって生成される。【００２１】
図１に戻って、電源供給ユニット１２は、通常時、ストレージ装置１に電力を供給する。なお、ここでいう通常時とは、ストレージ装置１に電源が投入された後、停電が発生せずに運転している状態を指す。停電時供給ユニット１３は、停電発生時にＮＡＮＤフラッシュ１１、キャッシュメモリ１４、ＣＰＵ１５、メモリコントローラ１６およびＮＡＮＤコントローラ１７へ電力を供給する。停電時供給ユニット１３は、内部にコンデンサを備え、通常時に、電源供給ユニット１２からの電力をコンデンサに蓄電する。停電時供給ユニット１３は、停電時に、コンデンサに蓄電された電力を供給する。【００２２】
キャッシュメモリ１４は、例えば、ＤＩＭＭ（Dual  Inline  Memory  Module）やＤＤＲ  ＳＤＲＡＭ（Double  Date  Rate  Synchronous  DRAM）などの揮発性メモリである。キャッシュメモリ１４は、サーバ９からの書き込み命令に応じてＮＡＮＤフラッシュ１１に書き込むユーザデータを一時的に記憶する。また、キャッシュメモリ１４は、サーバ９からの読み出し命令に応じてＮＡＮＤフラッシュ１１から読み出したユーザデータを一時的に記憶する。【００２３】
ＣＰＵ（Central  Processing  Unit）１５は、ストレージ装置１の全体を制御する。例えば、ＣＰＵ１５は、サーバとのインタフェース制御を実行する。メモリコントローラ１６は、サーバ９からの命令に応じて、キャッシュメモリ１４へのデータの入出力制御を行う。なお、ＣＰＵ１５およびメモリコントローラ１６は、独立した構成であるとして説明したが、併合した構成であるメモリコントローラ内蔵のＣＰＵであっても良い。【００２４】
メモリコントローラ１６は、ＣＰＵ１５を介さずにキャッシュメモリ１４とＮＡＮＤフラッシュ１１との間のデータ転送を制御する。ＮＡＮＤコントローラ１７は、ＮＡＮＤフラッシュ１１へのデータの入出力制御を行う。さらに、ＮＡＮＤコントローラ１７は、ライトＤＭＡ（Direct  Memory  Access）１７１、コントローラ１７２およびリードＤＭＡ１７３を有する。ライトＤＭＡ１７１は、キャッシュメモリ１４からＮＡＮＤフラッシュ１１への書き込みデータの転送を制御する。リードＤＭＡ１７３は、ＮＡＮＤフラッシュ１１からキャッシュメモリ１４への読み出しデータの転送を制御する。コントローラ１７２は、書き込みデータおよび読み出しデータを制御する。【００２５】
ライトＤＭＡ１７１は、ＣＲＣ生成部１７１ａおよびパリティ生成部１７１ｂを有する。【００２６】
ＣＲＣ生成部１７１ａは、ＮＡＮＤフラッシュ１１にデータを書き込む際、データをＲＡＩＤ５で構成するために複数分割し、分割した分割データ毎に、誤り検出に用いられるＣＲＣを生成する。そして、ＣＲＣ生成部１７１ａは、生成したＣＲＣを、対応する分割データに付加する。かかる分割データは、ストライプデータに対応する。以降、分割データをストライプデータというものとする。【００２７】
パリティ生成部１７１ｂは、所定数のストライプデータに対応付けて、ＲＡＩＤ５で用いられるパリティを生成する。かかるパリティは、誤り訂正符号として用いられる。そして、パリティ生成部１７１ｂは、生成したパリティを１つのストライプデータとして所定数のストライプデータとともに書き込みデータとする。これにより、書き込みデータは、例えば、所定数のストライプデータとこれらに対応付けられたパリティとにより、ＮＡＮＤフラッシュ１１への書き込み単位である４ＫＢの並びとなる。なお、所定数は、例えば７個であるが、６個であっても、８個であっても良く、ＲＡＩＤ５を構成することができる数であれば良い。また、パリティ生成部１７１ｂは、制御部の一例である。【００２８】
コントローラ１７２は、ＥＣＣ生成部１７２ａおよびＥＣＣ訂正制御部１７２ｂを有する。【００２９】
ＥＣＣ生成部１７２ａは、書き込みデータの各ストライプデータをＥＣＣの生成単位ずつ、ＥＣＣを生成する。ＥＣＣの生成単位とは、ＥＣＣチェックを実行するためにＥＣＣを生成する単位のことである。かかるＥＣＣの生成単位は、ＮＡＮＤフラッシュ１１の仕様によって定められたＥＣＣの訂正能力に依存するものであり、一例として２２４バイトである。そして、この場合のＥＣＣは１６バイトである。そして、ＥＣＣ生成部１７２ａは、生成したＥＣＣとともに書き込みデータをＮＡＮＤフラッシュ１１に書き込む。なお、ＥＣＣ生成部１７２ａは、制御部の一例である。【００３０】
ＥＣＣ訂正制御部１７２ｂは、ＥＣＣ生成部１７２ａによって書き込まれたデータを読み出すと、読み出した読み出しデータのＥＣＣチェックを行う。そして、ＥＣＣ訂正制御部１７２ｂは、ＥＣＣチェックの結果、誤りが検出されなければ、読み出しデータをそのままリードＤＭＡ１７３へ出力する。一方、ＥＣＣ訂正制御部１７２ｂは、ＥＣＣチェックの結果、誤りが検出され且つ誤りが訂正可能なエラーである場合、ＥＣＣによって誤りを訂正し、訂正後の読み出しデータをリードＤＭＡ１７３へ出力する。なお、書き込まれたデータを読み出すタイミングは、例えば、サーバからの読み出し命令が発行された時である。【００３１】
また、ＥＣＣ訂正制御部１７２ｂは、ＥＣＣチェックの結果、誤りが検出され且つ誤りが訂正不可能なエラーである場合、誤りが検出されたＥＣＣの生成単位の位置をリードＤＭＡ１７３へ出力する。このとき、ＥＣＣ訂正制御部１７２ｂは、読み出しデータをそのままリードＤＭＡ１７３へ出力する。なお、ＥＣＣ訂正制御部１７２ｂは、位置出力部の一例である。【００３２】
リードＤＭＡ１７３は、パリティ訂正制御部１７３ａおよびＥＣＣグループ訂正制御部１７３ｂを有する。【００３３】
パリティ訂正制御部１７３ａは、ＥＣＣ訂正制御部１７２ｂから出力された読み出しデータのＣＲＣチェックを行う。そして、パリティ訂正制御部１７３ａは、ＣＲＣチェックの結果、誤りが検出されなければ、誤りが検出されなかった読み出しデータをメモリコントローラ１６へ出力する。【００３４】
また、パリティ訂正制御部１７３ａは、ＣＲＣチェックの結果、誤りが検出されると、ＲＡＩＤのパリティによって誤りが訂正可能であるか否かを判定する。そして、パリティ訂正制御部１７３ａは、ＲＡＩＤのパリティによって誤りが訂正可能であると判定した場合、誤りが検出されたストライプデータを、パリティを用いて訂正する。すなわち、パリティ訂正制御部１７３ａは、ＣＲＣチェックによって誤りが検出されたストライプデータが１個のみである場合、当該ストライプデータを他のストライプデータとパリティとを用いて訂正する。そして、パリティ訂正制御部１７３ａは、誤りが検出されたストライプデータを訂正すると、訂正されたストライプデータを含む読み出しデータをメモリコントローラ１６へ出力する。なお、パリティ訂正制御部１７３ａでは、ＣＲＣチェックによって誤りが検出されたストライプデータが２個以上ある場合、エラーした位置が特定できないため、パリティを用いて誤りを訂正できない。また、パリティ訂正制御部１７３ａは、第１の誤り検出訂正部の一例である。【００３５】
ＥＣＣグループ訂正制御部１７３ｂは、読み出しデータの中の２個以上のストライプデータで誤りが検出された場合、読み出したデータの各ストライプデータから１つずつ得られるＥＣＣの生成単位をグループ化する。ＥＣＣの生成単位によってグループ化するのは、ＥＣＣの生成単位で誤りが検出される位置を特定できるからである。すなわち、ＥＣＣ訂正制御部１７２ｂが、誤りが検出されたＥＣＣの生成単位の位置を出力するので、ＥＣＣグループ訂正制御部１７３ｂが、出力された位置を用いてグループ内の誤り位置を特定できるのである。なお、ＥＣＣの生成単位で作成されるグループを「ＥＣＣグループ」というものとする。【００３６】
また、ＥＣＣグループ訂正制御部１７３ｂは、ＥＣＣグループ毎の単位でＥＣＣグループに含まれるパリティを用いて誤りの訂正を制御する。例えば、ＥＣＣグループ訂正制御部１７３ｂは、ＥＣＣ訂正制御部１７２ｂによって出力された、誤りが検出されたＥＣＣの生成単位の位置を取得する。そして、ＥＣＣグループ訂正制御部１７３ｂは、取得したＥＣＣの生成単位の位置を含むＥＣＣグループを検出する。そして、ＥＣＣグループ訂正制御部１７３ｂは、検出したＥＣＣグループの単位で、当該ＥＣＣグループに含まれるパリティによって誤りが訂正可能であるか否かを判定する。そして、ＥＣＣグループ訂正制御部１７３ｂは、当該ＥＣＣグループに含まれるパリティによって誤りが訂正可能であると判定した場合、パリティを用いて、誤りが検出されたＥＣＣの生成単位を訂正する。すなわち、ＥＣＣグループ訂正制御部１７３ｂは、誤りが検出されたＥＣＣの生成単位の位置がＥＣＣグループ内で１個のみである場合、当該位置の生成単位を、同じグループ内のパリティを用いて訂正する。【００３７】
また、ＥＣＣグループ訂正制御部１７３ｂは、誤りが検出されたＥＣＣの生成単位を訂正すると、訂正された生成単位を含む読み出しデータをメモリコントローラ１６へ出力する。なお、グループ訂正制御部１７３ｂは、誤りが検出されたＥＣＣの生成単位の位置がＥＣＣグループ内で２個以上である場合、同じＥＣＣグループ内のパリティを用いて誤りを訂正できない。また、ＥＣＣグループ訂正制御部１７３ｂは、第２の誤り検出訂正部の一例である。【００３８】
［読み出しデータのグループ化］
ここで、ＥＣＣグループ訂正制御部１７３ｂによって作成される読み出しデータのグループ化について、図３を参照して説明する。図３は、実施例１に係る読み出しデータのグループ化を説明する図である。図３に示すように、読み出しデータは、ストライプデータ０〜６およびパリティを有するＲＡＩＤ５の構成である。各ストライプデータおよびパリティは、ＥＣＣの生成単位である２２４バイトずつに表される。そして、ＥＣＣは、ＥＣＣの生成単位毎に生成される。一例として、ストライプデータ０は、ＥＣＣの生成単位である２２４バイト毎に表され、ここではデータ０−０、データ０−１、・・・データ０−１７と表される。そして、各ＥＣＣは、データ０−０〜データ０−１７毎に生成される。同様に、パリティも、ＥＣＣの生成単位である２２４バイト毎に表され、ここではパリティ−０、パリティ−１、・・・パリティ−１７と表される。そして、各ＥＣＣは、パリティ−０〜パリティ−１７毎に生成される。ＥＣＣは、それぞれ１６バイトである。【００３９】
そして、ＥＣＣグループ訂正制御部１７３ｂは、読み出しデータの各ストライプデータおよびパリティから１つずつ得られるＥＣＣの生成単位をグループ化する。ここでは、ＥＣＣグループ訂正制御部１７３ｂは、ストライプデータ０のデータ０−０、ストライプデータ１のデータ１−０、ストライプデータ２のデータ２−０、・・・、パリティのパリティ−０をＥＣＣグループ０とする。ＥＣＣグループ訂正制御部１７３ｂは、ストライプデータ０のデータ０−１、ストライプデータ１のデータ１−１、ストライプデータ２のデータ２−１、・・・、パリティのパリティ−１をＥＣＣグループ１とする。【００４０】
［データ訂正の具体例］
このようにグループ化された読み出しデータについて、データの訂正の具体例を、図４を参照して説明する。図４は、実施例１に係るデータ訂正の具体例を説明する図である。図４の上図に示すように、読み出しデータのうちＣＲＣチェックによって誤りが検出されたストライプデータが、ストライプデータ１、ストライプデータ３、ストライプデータ５と２個以上あるとする。したがって、パリティ訂正制御部１７３ａでは、ＲＡＩＤのパリティそのものを用いて誤りを訂正できない。【００４１】
図４の下図に示すように、ＥＣＣグループ訂正制御部１７３ｂは、ＥＣＣグループ毎の単位でＥＣＣグループに含まれるパリティを用いて誤りの訂正を制御する。ここでは、ＥＣＣグループ訂正制御部１７３ｂは、誤りが検出されたＥＣＣの生成単位の位置を、ストライプデータ１のデータ１−０の位置として取得する。そして、ＥＣＣグループ訂正制御部１７３ｂは、取得したデータ１−０の位置を含むＥＣＣグループ０を検出する。そして、ＥＣＣグループ訂正制御部１７３ｂは、誤りが検出されたＥＣＣの生成単位の位置がＥＣＣグループ０内でデータ１−０の１個のみであるので、データ１−０を、ＥＣＣグループ０内の他のデータおよびパリティ−０を用いて訂正する。【００４２】
次に、ＥＣＣグループ訂正制御部１７３ｂは、誤りが検出されたＥＣＣの生成単位の位置を、ストライプデータ３のデータ３−２の位置として取得する。そして、ＥＣＣグループ訂正制御部１７３ｂは、取得したデータ３−２の位置を含むＥＣＣグループ２を検出する。そして、ＥＣＣグループ訂正制御部１７３ｂは、誤りが検出されたＥＣＣの生成単位の位置がＥＣＣグループ２内でデータ３−２の１個のみであるので、データ３−２を、ＥＣＣグループ２内の他のデータおよびパリティ−２を用いて訂正する。【００４３】
次に、ＥＣＣグループ訂正制御部１７３ｂは、誤りが検出されたＥＣＣの生成単位の位置を、ストライプデータ５のデータ５−１の位置として取得する。そして、ＥＣＣグループ訂正制御部１７３ｂは、取得したデータ５−１の位置を含むＥＣＣグループ１を検出する。そして、ＥＣＣグループ訂正制御部１７３ｂは、誤りが検出されたＥＣＣの生成単位の位置がＥＣＣグループ１内でデータ５−１の１個のみであるので、データ５−１を、ＥＣＣグループ１内の他のデータおよびパリティ−１を用いて訂正する。【００４４】
このようにして、読み出しデータのうち誤りが検出されたストライプデータが２個以上あっても、ＥＣＣグループ訂正制御部１７３ｂは、誤りのあるＥＣＣの生成単位の位置が同じＥＣＣグループでなければ、読み出しデータの誤りを訂正することができる。ここで、読み出しデータの誤りを訂正する他の方法として、ＲＡＩＤのストライプのサイズを小さくすることでＲＡＩＤの単位を増やし、ＲＡＩＤのパリティによって読み出しデータの誤りを訂正する方法も考えられる。しかしながら、ＲＡＩＤのストライプのサイズを小さくしてしまうと、ＣＲＣやパリティの冗長ビット数が増加することになり、書き込み時の性能が落ちてしまう。そこで、ＲＡＩＤのストライプのサイズを変えないで、ＥＣＣグループを利用して誤りを訂正することで、書き込み時の性能を落とさないで、ＮＡＮＤフラッシュ１１の信頼性を向上することができる。【００４５】
［データの書き込み処理およびデータの訂正処理のフローチャート］
次に、実施例１に係るデータの訂正処理について、図５および図６を参照して説明する。ここでは、一例として、サーバ９からデータの書き込み命令が発行された場合に、書き込み命令に応じてキャッシュメモリ１４のデータを書き込む書き込み処理について説明する。また、サーバ９からデータの読み出し命令が発行された場合に、読み出し命令に応じてＮＡＮＤフラッシュ１１から読み出したデータを訂正する処理について説明する。図５は、データの書き込み処理のフローチャートを示す図である。図６は、データの訂正処理のフローチャートを示す図である。【００４６】
図５に示すように、サーバ９から書き込み命令を受け取ったＣＰＵ１５は、ライトＤＭＡ１７１を起動する（ステップＳ１１）。そして、ＣＰＵ１５は、サーバ９からの書き込み命令に応じてキャッシュメモリ１４からユーザデータを読み出す（ステップＳ１２）。【００４７】
そして、ライトＤＭＡ１７１は、読み出されたユーザデータについて、ＲＡＩＤ５用のパリティを生成するとともに、ＣＲＣを生成する（ステップＳ１３）。例えば、ライトＤＭＡ１７１のＣＲＣ生成部１７１ａは、ＲＡＩＤ５で構成するためにユーザデータを複数のストライプデータに分割し、分割したストライプデータ毎にＣＲＣを生成する。そして、ライトＤＭＡ１７１のパリティ生成部１７１ｂは、所定数のストライプデータに対応付けて、ＲＡＩＤ５で用いられるパリティを生成する。そして、パリティ生成部１７１ｂは、生成したパリティを１つのストライプデータとして所定数のストライプデータとともに書き込みデータとする。【００４８】
続いて、コントローラ１７２は、書き込みデータについて、ＥＣＣを生成する（ステップＳ１４）。例えば、コントローラ１７２のＥＣＣ生成部１７２ａは、書き込みデータの各ストライプデータをＥＣＣの生成単位ずつ、ＥＣＣを生成する。【００４９】
そして、コントローラ１７２は、ＮＡＮＤフラッシュ１１へデータを書き込む。ここでいうデータは、具体的にはユーザデータとパリティとＣＲＣとＥＣＣである（ステップＳ１５）。すなわち、コントローラ１７２のＥＣＣ生成部１７２ａは、生成したＥＣＣとともに書き込みデータをＮＡＮＤフラッシュ１１へ書き込む。【００５０】
これにより、サーバ９からの書き込み命令に応じてキャッシュメモリ１４に保持されていたユーザデータは、ＮＡＮＤフラッシュ１１に書き込まれる。【００５１】
図６に示すように、サーバ９から読み出し命令を受け取ったＣＰＵ１５は、リードＤＭＡ１７３を起動する（ステップＳ２１）。そして、ＣＰＵ１５は、ＮＡＮＤフラッシュ１１からデータを読み出す（ステップＳ２２）。【００５２】
そして、コントローラ１７２のＥＣＣ訂正制御部１７２ｂは、読み出したデータについて、ＥＣＣチェックを行い（ステップＳ２３）、ＥＣＣによって訂正可能なエラー（ＥＣＣコレクタブルエラー）であるか否かを判定する（ステップＳ２４）。ＥＣＣコレクタブルエラーであると判定した場合（ステップＳ２４；Ｙｅｓ）、ＥＣＣ訂正制御部１７２ｂは、ＥＣＣによってデータを訂正する（ステップＳ２５）。そして、ＥＣＣ訂正制御部１７２ｂは、ＣＲＣチェックをすべく、ステップＳ２８に移行する。これは、ＥＣＣによってデータを訂正しても、ＣＲＣによって誤りが検出される場合があるからである。【００５３】
一方、ＥＣＣコレクタブルエラーでないと判定した場合（ステップＳ２４；Ｎｏ）、コントローラ１７２のＥＣＣ訂正制御部１７２ｂは、ＥＣＣによって訂正不可能なエラー（ＥＣＣアンコレクタブルエラー）であるか否かを判定する（ステップＳ２６）。ＥＣＣアンコレクタブルエラーであると判定した場合（ステップＳ２６；Ｙｅｓ）、コントローラ１７２のＥＣＣ訂正制御部１７２ｂは、エラー（誤り）があったＥＣＣの生成単位の位置をリードＤＭＡ１７３へ通知する（ステップＳ２７）。そして、ＥＣＣ訂正制御部１７２ｂは、ＣＲＣチェックをすべく、ステップＳ２８に移行する。【００５４】
一方、ＥＣＣアンコレクタブルエラーでないと判定した場合（ステップＳ２６；Ｎｏ）、すなわちＥＣＣによってデータにエラーがないと判定された場合、ＥＣＣ訂正制御部１７２ｂは、ＣＲＣチェックをすべく、ステップＳ２８に移行する。これは、ＥＣＣによってデータにエラーがないと判定された場合であっても、ＣＲＣによって誤りが検出される場合があるからである。【００５５】
続いて、リードＤＭＡ１７３は、読み出しデータまたは訂正された読み出しデータについて、ＣＲＣチェックを行い（ステップＳ２８）、ＲＡＩＤのパリティによって訂正可能なエラー（ＲＡＩＤコレクタブルエラー）であるか否かを判定する（ステップＳ２９）。【００５６】
ＲＡＩＤコレクタブルエラーであると判定した場合（ステップＳ２９；Ｙｅｓ）、リードＤＭＡ１７３のパリティ訂正制御部１７３ａは、１ページ（ストライプ）単位でデータを訂正する（ステップＳ３０）。すなわち、パリティ訂正制御部１７３ａは、ＣＲＣチェックによってエラーが検出されたストライプデータが１個のみである場合、当該ストライプデータを他のストライプデータとパリティとを用いて訂正する。パリティ訂正制御部１７３ａは、訂正した読み出しデータをメモリコントローラ１６へ出力する。そして、パリティ訂正制御部１７３ａは、ステップＳ３５に移行する。【００５７】
一方、ＲＡＩＤコレクタブルエラーでないと判定した場合（ステップＳ２９；Ｎｏ）、パリティ訂正制御部１７３ａは、ＲＡＩＤのパリティによって訂正不可能なエラー（ＲＡＩＤアンコレクタブルエラー）であるか否かを判定する（ステップＳ３１）。すなわち、パリティ訂正制御部１７３ａは、ＣＲＣチェックによってエラーが検出されたストライプデータが２個以上あるか否かを判定する。【００５８】
ＲＡＩＤアンコレクタブルエラーでないと判定した場合（ステップＳ３１；Ｎｏ）、パリティ訂正制御部１７３ａは、エラーが検出されないので、読み出しデータをメモリコントローラ１６へ出力する。そして、パリティ訂正制御部１７３ａは、ステップＳ３５へ移行する。【００５９】
一方、ＲＡＩＤアンコレクタブルエラーであると判定した場合（ステップＳ３１；Ｙｅｓ）、パリティ訂正制御部１７３ａは、エラーが検出されたストライプデータが２個以上あるので、エラーした位置が特定できず、パリティを用いてエラーを訂正できないと判断する。【００６０】
そして、リードＤＭＡ１７３のＥＣＣグループ訂正制御部１７３ｂは、ＥＣＣグループによって訂正可能なエラー（ＥＣＣグループコレクタブルエラー）であるか否かを判定する（ステップＳ３２）。例えば、ＥＣＣグループ訂正制御部１７３ｂは、ＥＣＣ訂正制御部１７２ｂによって通知された、エラーしたＥＣＣの生成単位の位置を取得する。そして、ＥＣＣグループ訂正制御部１７３ｂは、取得したＥＣＣの生成単位の位置を含むＥＣＣグループを検出する。そして、ＥＣＣグループ訂正制御部１７３ｂは、検出したＥＣＣグループの単位で、当該ＥＣＣグループに含まれるパリティによってエラーが訂正可能であるか否かを判定する。すなわち、ＥＣＣグループ訂正制御部１７３ｂは、ＥＣＣグループ単位でエラーがあるＥＣＣの生成単位が２個以上あるか否かを判定する。【００６１】
ＥＣＣグループコレクタブルエラーであると判定した場合（ステップＳ３２；Ｙｅｓ）、ＥＣＣグループ訂正制御部１７３ｂは、ＥＣＣの生成単位でデータを訂正する（ステップＳ３３）。例えば、ＥＣＣグループ訂正制御部１７３ｂは、ＥＣＣグループに含まれるパリティを用いて、エラーが検出されたＥＣＣの生成単位を訂正する。すなわち、ＥＣＣグループ訂正制御部１７３ｂは、エラーが検出されたＥＣＣの生成単位の位置がＥＣＣグループ内で１個のみである場合、当該位置の生成単位を、同じグループ内のパリティを用いて訂正する。そして、ＥＣＣグループ訂正制御部１７３ｂは、訂正された読み出しデータをメモリコントローラ１６へ出力する。そして、ＥＣＣグループ訂正制御部１７３ｂは、ステップＳ３５に移行する。【００６２】
一方、ＥＣＣグループコレクタブルエラーでないと判定した場合（ステップＳ３２；Ｎｏ）、ＥＣＣグループ訂正制御部１７３ｂは、ＥＣＣグループによって訂正不可能なエラーであると判断する。すなわち、ＥＣＣグループ訂正制御部１７３ｂは、エラーが検出されたＥＣＣの生成単位の位置がＥＣＣグループ内で２個以上あるので、同じＥＣＣグループ内のパリティを用いてエラーを訂正できないと判断する。この結果、読み出し失敗として、処理が終了する。【００６３】
ステップＳ３５では、メモリコントローラ１６は、キャッシュメモリ１４へユーザデータを書き込む（ステップＳ３５）。すなわち、メモリコントローラ１６は、リードＤＭＡ１７３から出力された読み出しデータをキャッシュメモリ１４へ書き込み、その後、読み出しデータをサーバ９に出力する。この結果、読み出し完了として、処理が終了する。【００６４】
これにより、ＮＡＮＤフラッシュ１１に書き込まれたユーザデータは、読み出し処理でエラーとなってもキャッシュメモリ１４に正しく書き込まれる。そして、メモリコントローラ１６は、正しいユーザデータをサーバ９に伝達することができる。【００６５】
［実施例１の効果］
上記実施例１によれば、ライトＤＭＡ１７１は、ＮＡＮＤフラッシュ１１にデータを書き込む際、データを複数に分割したストライプ毎にＣＲＣを生成し付加するとともに、連続した所定数のストライプに対応付けてパリティを生成する。そして、ＥＣＣ生成部１７２ａは、生成されたパリティを１つのストライプとして付加した書き込みデータの各ストライプをＥＣＣの生成単位ずつＥＣＣを生成し、生成したＥＣＣとともに書き込みデータをＮＡＮＤフラッシュ１１に書き込む。そして、ＥＣＣグループ訂正制御部１７３ｂは、書き込まれたデータを読み出す際、読み出したデータの中の複数のストライプで誤りが検出された場合、読み出したデータの各ストライプから１つずつ得られるＥＣＣの生成単位をグループ化する。そして、ＥＣＣグループ訂正制御部１７３ｂは、グループ毎の単位でパリティを用いて誤りの訂正を制御する。かかる構成によれば、ＮＡＮＤフラッシュ１１から読み出したデータの複数のストライプに誤りが検出された場合であっても、ＥＣＣグループ訂正制御部１７３ｂは、読み出したデータの各ストライプから得られるＥＣＣグループ毎の単位で誤りの訂正を制御する。このため、ＥＣＣグループ訂正制御部１７３ｂは、ＮＡＮＤフラッシュ１１のデータの修復率を向上できる。【００６６】
また、上記実施例１によれば、ＥＣＣ訂正制御部１７２ｂは、読み出したデータを、ＥＣＣを用いてチェックした結果、読み出したデータが訂正不可能な場合、ＥＣＣで示されるいずれの生成単位の位置で誤りが検出されたかを出力する。そして、ＥＣＣグループ訂正制御部１７３ｂは、出力された誤り位置を含むグループでパリティを用いて誤り訂正を制御する。かかる構成によれば、ＥＣＣグループ訂正制御部１７３ｂは、誤りが検出された位置を含むグループ単位を検出でき、検出したグループ単位で誤りの訂正を制御できるので、ＮＡＮＤフラッシュ１１のデータの修復率を向上できる。
【実施例２】
【００６７】
ところで、実施例１では、ストレージ装置１では、ＮＡＮＤフラッシュ１１、キャッシュメモリ１４、ＣＰＵ１５およびメモリコントローラ１６が２重化されていない場合について説明した。しかしながら、ストレージ装置１では、これに限定されず、ＮＡＮＤフラッシュ１１、キャッシュメモリ１４、ＣＰＵ１５およびメモリコントローラ１６が２重化されている場合であっても良い。これにより、ストレージ装置１は、２重化されたそれぞれの読み出しデータを突き合わせることで、ＮＡＮＤフラッシュ１１の信頼性をさらに向上することができる。【００６８】
そこで、実施例２では、ＮＡＮＤフラッシュ１１、キャッシュメモリ１４、ＣＰＵ１５およびメモリコントローラ１６が２重化されている場合のストレージ装置２について説明する。【００６９】
［実施例２に係るストレージ装置の構成］
図７は、実施例２に係るストレージ装置のハードウェア構成を示す図である。なお、図１に示すストレージ装置１と同一の構成については同一符号を示すことで、その重複する構成および動作の説明については省略する。実施例１と実施例２とが異なるところは、ストレージ装置２では、ＣＭ１ＡとＣＭ１Ｂとが２重化されている点である。そして、各ＣＭは、ＮＡＮＤフラッシュ１１、電源供給ユニット１２、停電時給電ユニット１３およびキャッシュメモリ１４、ＣＰＵ１５、メモリコントローラ１６およびＮＡＮＤコントローラ１７を有する。また、実施例１と実施例２とが異なるところは、ＣＭ１Ａ内のＮＡＮＤコントローラ１７に他ＣＭ通信部２０１とリードデータ用バッファ２０２と他ＣＭ間訂正制御部２０３を追加した点にある。また、実施例１と実施例２とが異なるところは、ＣＭ１Ｂ内のＮＡＮＤコントローラ１７に他ＣＭ通信部３０１とリードデータ用バッファ３０２と他ＣＭ間訂正制御部３０３を追加した点にある。【００７０】
他ＣＭ通信部２０１は、２重化された他のＣＭと通信する。例えば、他ＣＭ通信部２０１は、自ＣＭで誤りが検出されたＥＣＣの生成単位の位置をＣＭ１Ｂへ送信する。また、他ＣＭ通信部２０１は、ＣＭ１Ｂで誤りが検出されたＥＣＣの生成単位の位置を受信する。さらに、他ＣＭ通信部２０１は、ＣＭ１ＢへＥＣＣの生成単位のデータをリクエストし、リクエストに応じてデータを受信する。【００７１】
リードデータ用バッファ２０２には、ＮＡＮＤフラッシュ１１から読み出された読み出しデータが格納される。例えば、リードデータ用バッファ２０２には、誤りが検出されたＥＣＣの生成単位を含むＥＣＣグループが格納される。かかるリードデータ用バッファ２０２を用いて、後述する他ＣＭ間訂正制御部２０３が、他ＣＭ通信部２０１と協働して誤りが検出されたＥＣＣの生成単位を訂正する。【００７２】
ＥＣＣグループ訂正制御部１７３ｂは、実施例１で説明したとおりであるので簡略して説明する。例えば、ＥＣＣグループ訂正制御部１７３ｂは、誤りが検出されたＥＣＣの生成単位の位置を含むＥＣＣグループを検出し、検出したＥＣＣグループに含まれるパリティを用いて誤りの訂正を制御する。このとき、ＥＣＣグループ訂正制御部１７３ｂは、誤りが訂正可能、すなわち誤りが検出されたＥＣＣの生成単位の位置がＥＣＣグループ内で１個のみである場合、当該位置の生成単位を、同じグループに含まれるパリティを用いて訂正する。なお、ＥＣＣグループ訂正制御部１７３ｂは、誤りが訂正不可能、すなわち誤りが検出されたＥＣＣの生成単位の位置がＥＣＣグループ内で２個以上である場合、ＥＣＣグループに含まれるパリティを用いて誤りを訂正できない。【００７３】
他ＣＭ間訂正制御部２０３は、誤りが検出されたＥＣＣの生成単位の位置がＥＣＣグループ内で２個以上ある場合、２重化された他のＣＭ１Ｂ内のＮＡＮＤフラッシュ１１に記憶されたデータを利用して、誤りが検出されたＥＣＣの生成単位を訂正する。例えば、他ＣＭ間訂正制御部２０３は、他ＣＭ通信部２０１によるＣＭ１Ｂとの通信を用いて、同じ読み出しデータのＥＣＣグループについて、ＣＭ１Ｂで誤りがあったＥＣＣの生成単位の位置を取得する。そして、他ＣＭ間訂正制御部２０３は、取得した誤りのあったＥＣＣの生成単位の位置を用いて、ＣＭ１Ｂにおいて、ＥＣＣによる訂正不可能な誤りを検出したか否かを判定する。そして、他ＣＭ間訂正制御部２０３は、ＣＭ１Ｂにおいて、ＥＣＣによる訂正不可能な誤りを検出しなかったと判定した場合、誤りがないので、他ＣＭ通信部２０１によるＣＭ１Ｂとの通信を用いてＣＭ１ＢのＥＣＣグループの全データを取得する。そして、他ＣＭ間訂正制御部２０３は、ＣＭ１Ｂから取得されたＥＣＣグループの全データを、リードデータ用バッファ２０２に格納されたＥＣＣグループのデータに上書きする。【００７４】
また、他ＣＭ間訂正制御部２０３は、ＣＭ１Ｂにおいて、ＥＣＣによって訂正不可能な誤りを検出したと判定した場合、自ＣＭとＣＭ１Ｂとの同じＥＣＣグループで、それぞれ誤りがあったＥＣＣの生成単位の位置をチェックする。そして、他ＣＭ間訂正制御部２０３は、誤りがあったＥＣＣの生成単位の位置が全く重複しないか、または１箇所だけ重複する場合、他ＣＭ通信部２０１によるＣＭ１Ｂとの通信を用いて、訂正に必要なＥＣＣの生成単位を取得する。そして、他ＣＭ間訂正制御部２０３は、ＣＭ１Ｂから取得された訂正に必要なＥＣＣの生成単位を、リードデータ用バッファ２０２に格納されたＥＣＣグループの対応する位置に上書きする。さらに、他ＣＭ間訂正制御部２０３は、上書きされたＥＣＣの生成単位および同じＥＣＣグループ内のパリティを含むＥＣＣの生成単位を用いて誤りを訂正する。なお、他ＣＭ間訂正制御部２０３は、複製部の一例である。【００７５】
他ＣＭ通信部３０１は、２重化された他のＣＭと通信する。例えば、他ＣＭ通信部３０１は、他のＣＭ１Ａからリクエストを受信し、リクエストに応じたデータを送信する。ここでいうリクエストとは、一例として、該当するＥＣＣの生成単位のデータの送信要求であったり、誤りがあったＥＣＣの生成単位の位置の送信要求であったりする。【００７６】
リードデータ用バッファ３０２には、ＮＡＮＤフラッシュ１１から読み出された読み出しデータが格納される。リードデータ用バッファ３０２は、リードデータ用バッファ２０２と同様であるので、説明を省略する。【００７７】
他ＣＭ間訂正制御部３０３は、誤りが検出されたＥＣＣの生成単位の位置がＥＣＣグループ内で２個以上ある場合、２重化された他のＣＭ１Ａ内のＮＡＮＤフラッシュ１１に記憶されたデータを利用して、誤りが検出されたＥＣＣの生成単位を訂正する。他ＣＭ訂正制御部３０３は、他ＣＭ訂正制御部２０３の処理と同様であるので、説明を省略する。【００７８】
［データ訂正の具体例］
次に、実施例２に係るデータの訂正の具体例を、図８および図９を参照して説明する。図８および図９は、実施例２に係るデータ訂正の具体例を説明する図である。【００７９】
図８に示すように、ＣＭ１ＡにおけるＥＣＣグループ０で誤りが訂正不可能であるとする。すなわち、ＥＣＣグループ０で誤りが検出されたＥＣＣの生成単位の位置が、データ０−０とデータ２−０と２個以上あるとする。一方、２重化された他のＣＭ１ＢにおけるＥＣＣグループ０で誤りを検出しなかったとする。【００８０】
すると、ＣＭ１Ａの他ＣＭ間訂正制御部２０３は、ＣＭ１Ｂにおいて、ＣＭ１Ａで誤りが検出されたＥＣＣグループ０と同一のＥＣＣグループに誤りがないので、ＣＭ１ＢのＥＣＣグループ０の全データを取得する。そして、他ＣＭ間訂正制御部２０３は、ＣＭ１Ｂから取得されたＥＣＣグループ０の全データを、リードデータ用バッファ２０２に格納されたＥＣＣグループ０のデータに上書きする。これにより、他ＣＭ間訂正制御部２０３は、他のＣＭ１ＢのＥＣＣグループ０の誤りのないデータを利用することで、ＣＭ１Ａで誤りが訂正不可能であったＥＣＣグループ０を訂正することができる。【００８１】
また、ＣＭ１ＢにおけるＥＣＣグループ１で誤りが訂正不可能であるとする。すなわち、ＥＣＣグループ１で誤りが検出されたＥＣＣの生成単位の位置が、データ２−１とデータ４−１と２個以上あるとする。一方、２重化された他のＣＭ１ＡにおけるＥＣＣグループ１で誤りを検出しなかったとする。【００８２】
すると、ＣＭ１Ｂの他ＣＭ間訂正制御部３０３は、ＣＭ１Ａにおいて、ＣＭ１Ｂで誤りが検出されたＥＣＣグループ１と同一のＥＣＣグループに誤りがないので、ＣＭ１ＡのＥＣＣグループ１の全データを取得する。そして、他ＣＭ間訂正制御部３０３は、ＣＭ１Ａから取得されたＥＣＣグループ１の全データを、リードデータ用バッファ３０２に格納されたＥＣＣグループ１のデータに上書きする。これにより、他ＣＭ間訂正制御部３０３は、他のＣＭ１ＡのＥＣＣグループ１の誤りのないデータを利用することで、ＣＭ１Ｂで誤りが訂正不可能であったＥＣＣグループ１を訂正することができる。【００８３】
図９に示すように、ＣＭ１ＡにおけるＥＣＣグループ０で誤りが訂正不可能であるとする。すなわち、ＥＣＣグループ０で誤りが検出されたＥＣＣの生成単位の位置が、データ０−０とデータ２−０と２個以上あるとする。他方、ＣＭ１ＢにおけるＥＣＣグループ０で誤りが訂正不可能であるとする。すなわち、ＥＣＣグループ０で誤りが検出されたＥＣＣの生成単位の位置が、データ２−０とデータ３−０と２個以上あるとする。【００８４】
すると、ＣＭ１Ａの他ＣＭ間訂正制御部２０３は、誤りがあったＥＣＣの生成単位の位置が全く重複しないか、または１箇所だけ重複するかをチェックする。ここでは、他ＣＭ間訂正制御部２０３は、データ２−０が重複するが、データ０−０とデータ３−０とが重複しないので、１箇所だけ重複すると判断する。そこで、他ＣＭ間訂正制御部２０３は、ＣＭ１Ｂから、訂正に必要なデータ０−０を取得し、取得したデータ０−０をリードデータ用バッファ２０２に格納されたＥＣＣグループ０のデータ０−０の位置に上書きする。そして、他ＣＭ間訂正制御部２０３は、ＥＣＣグループ０内のパリティ−０を含むＥＣＣの生成単位のデータを用いてデータ２−０を訂正する。これにより、他ＣＭ間訂正制御部２０３は、他のＣＭ１ＢのＥＣＣグループ０の誤りのないデータを利用することで、ＣＭ１Ａで誤りが訂正不可能であったＥＣＣグループ０を訂正することができる。【００８５】
また、ＣＭ１Ｂの他ＣＭ間訂正制御部３０３は、ＣＭ１Ａから、訂正に必要なデータ３−０を取得し、取得したデータ３−０をリードデータ用バッファ３０２に格納されたＥＣＣグループ０のデータ３−０の位置に上書きする。そして、他ＣＭ間訂正制御部３０３は、ＥＣＣグループ０内のパリティ−０を含むＥＣＣの生成単位のデータを用いてデータ２−０を訂正する。これにより、他ＣＭ間訂正制御部３０３は、他のＣＭ１ＡのＥＣＣグループ０の誤りのないデータを利用することで、ＣＭ１Ｂで誤りが訂正不可能であったＥＣＣグループ０を訂正することができる。【００８６】
［データの訂正処理のフローチャート］
次に、実施例２に係るデータの訂正処理について、図１０を参照して説明する。ここでは、一例として、サーバ９からデータの読み出し命令が発行された場合に、読み出し命令に応じてＮＡＮＤフラッシュ１１から読み出したデータを訂正する処理について説明する。加えて、図１０では、図６におけるデータの訂正処理のフローチャートのうちエラー（誤り）があったＥＣＣグループがＥＣＣグループコレクタブルエラーでない場合（ステップＳ３２；Ｎｏ）の訂正処理について説明する。なお、ＥＣＣグループコレクタブルエラーとは、ＥＣＣグループで訂正可能なエラーであることをいう。【００８７】
まず、図６では、リードＤＭＡ１７３のＥＣＣグループ訂正制御部１７３ｂは、エラー（誤り）があったＥＣＣグループについて、ＥＣＣグループコレクタブルエラーであるか否かを判定する（ステップＳ３２）。すなわち、ＥＣＣグループ訂正制御部１７３ｂは、ＥＣＣグループ単位で誤りのあるＥＣＣの生成単位が２個以上あるか否かを判定する。ＥＣＣグループコレクタブルエラーであると判定した場合（ステップＳ３２；Ｙｅｓ）、ＥＣＣグループ訂正制御部１７３ｂは、エラーがあったＥＣＣグループについて、ＥＣＣの生成単位でデータを訂正する（ステップＳ３３）。【００８８】
一方、ＥＣＣグループコレクタブルエラーでないと判定した場合（ステップＳ３２；Ｎｏ）、ＥＣＣグループ訂正制御部１７３ｂは、エラーがあったＥＣＣグループについて、ＥＣＣグループアンコレクタブルエラーであるか否かを判定する（ステップＳ４１）。なお、ＥＣＣグループアンコレクタブルエラーとは、ＥＣＣグループで訂正不可能なエラーであることをいう。ＥＣＣグループアンコレクタブルエラーであると判定した場合（ステップＳ４１；Ｙｅｓ）、リードＤＭＡ１７３の他ＣＭ間訂正制御部２０３は、他ＣＭにおけるエラーしたＥＣＣの生成単位の位置をチェックする（ステップＳ４２）。【００８９】
続いて、他ＣＭ間訂正制御部２０３は、チェックの結果、エラーがあったＥＣＣグループと同一のＥＣＣグループについて、他ＣＭ１ＢでＥＣＣアンコレクタブルエラーを検出しているか否かを判定する（ステップＳ４３）。なお、ＥＣＣアンコレクタブルエラーとは、エラーがあったＥＣＣグループについてＥＣＣにより訂正不可能なエラーであることをいう。他ＣＭ１ＢでＥＣＣアンコレクタブルエラーを検出していると判定した場合（ステップＳ４３；Ｙｅｓ）、他ＣＭ間訂正制御部２０３は、ステップＳ４６に移行する。【００９０】
一方、他ＣＭ１ＢでＥＣＣアンコレクタブルエラーを検出していないと判定した場合（ステップＳ４３；Ｎｏ）、他ＣＭ通信部２０１は、他ＣＭ１ＢのＥＣＣグループの全データをリクエストする（ステップＳ４４）。【００９１】
そして、他ＣＭ間訂正制御部２０３は、メモリコントローラ１６を介して、自ＣＭのキャッシュメモリ１４に他ＣＭ１ＢのＥＣＣグループのデータを書き込む（ステップＳ４５）。例えば、他ＣＭ間訂正制御部２０３は、リクエストに応じて得られた他ＣＭ１ＢのＥＣＣグループの全データを取得する。そして、他ＣＭ間訂正制御部２０３は、取得したＥＣＣグループの全データを、リードデータ用バッファ２０２に格納されたＥＣＣグループのデータに上書きする。そして、他ＣＭ間訂正制御部２０３は、リードデータ用バッファ２０２に上書きされたＥＣＣグループのデータを、メモリコントローラ１６を介して、キャッシュメモリ１４に書き込み、その後、読み出しデータをサーバ９に出力する。この結果、読み出し処理完了として、処理が終了する。【００９２】
ステップＳ４６では、リードＤＭＡ１７３の他ＣＭ間訂正制御部２０３は、自ＣＭと他ＣＭ１ＢとでエラーがあったＥＣＣの生成単位の位置をチェックする（ステップＳ４６）。そして、他ＣＭ間訂正制御部２０３は、チェックの結果、エラーがあったＥＣＣの生成単位の位置が訂正可能なエラーの位置であるか否かを判定する（ステップＳ４７）。すなわち、他ＣＭ間訂正制御部２０３は、自ＣＭおよび他ＣＭ１ＢのそれぞれエラーがあったＥＣＣの生成単位の位置が全く重複しないか、または１箇所だけ重複するか否かを判定する。【００９３】
エラーがあったＥＣＣの生成単位の位置が訂正可能なエラーの位置でないと判定した場合（ステップＳ４７；Ｎｏ）、他ＣＭ間訂正制御部２０３は、エラーがあったＥＣＣグループについてエラーを訂正できないと判断する。この結果、読み出し失敗として、処理が終了する。【００９４】
一方、エラーがあったＥＣＣの生成単位の位置が訂正可能なエラーの位置であると判定した場合（ステップＳ４７；Ｙｅｓ）、他ＣＭ通信部２０１は、訂正に必要なデータであるＥＣＣの生成単位を他ＣＭ１Ｂへリクエストする（ステップＳ４８）。そして、リードＤＭＡ１７３の他ＣＭ間訂正制御部２０３は、他ＣＭ１Ｂのデータを使用して、エラーがあったＥＣＣグループのデータをＥＣＣの生成単位で訂正する（ステップＳ４９）。例えば、他ＣＭ間訂正制御部２０３は、リクエストに応じて得られた他ＣＭ１Ｂの訂正に必要なＥＣＣの生成単位を取得する。そして、他ＣＭ間訂正制御部２０３は、取得したＥＣＣの生成単位を、リードデータ用バッファ２０２に格納されたＥＣＣグループの対応する位置に上書きする。そして、他ＣＭ間訂正制御部２０３は、上書きされたＥＣＣの生成単位およびＥＣＣグループ内のパリティを含むＥＣＣの生成単位を用いてエラーがあったＥＣＣの生成単位を訂正する。【００９５】
そして、他ＣＭ間訂正制御部２０３は、メモリコントローラ１６を介して、訂正したＥＣＣグループのデータを自ＣＭのキャッシュメモリ１４に書き込み（ステップＳ５０）、その後、読み出しデータをサーバ９に出力する。この結果、読み出し処理完了として、処理が終了する。【００９６】
これにより、ＮＡＮＤフラッシュ１１に書き込まれたユーザデータは、読み出し処理でエラーとなってもキャッシュメモリ１４に正しく書き込まれる。そして、メモリコントローラ１６は、正しいユーザデータをサーバ９に伝達することができる。
【００９７】
［実施例２の効果］
上記実施例２によれば、他ＣＭ間訂正制御部２０３は、誤りがあったＥＣＣの生成単位の位置がＥＣＣグループ内で複数ある場合、自ＣＭと２重化されたＣＭ１ＢのＮＡＮＤフラッシュ１１に記憶されたデータを利用して、誤り位置のＥＣＣの生成単位を訂正する。すなわち、他ＣＭ間訂正制御部２０３は、ＣＭ１Ｂにおいて、誤り位置と同じ位置のＥＣＣの生成単位に誤りがなければ、誤りがないＥＣＣの生成単位を自ＣＭの誤りがあった位置に上書きすることにより、誤り位置のＥＣＣの生成単位を訂正する。かかる構成によれば、他ＣＭ間訂正制御部２０３は、自ＣＭと２重化されたＣＭ１Ｂの誤りがないＥＣＣの生成単位を利用して、誤りがあったＥＣＣの生成単位の誤りの訂正を制御できるので、さらにＮＡＮＤフラッシュ１１のデータの修復率を向上できる。【００９８】
［その他］
なお、実施例１、２のストレージ装置１、２は、ＮＡＮＤフラッシュ１１を、サーバ９からのデータ保存先の記憶媒体として用いるとして説明した。しかしながら、ストレージ装置１、２は、ＮＡＮＤフラッシュ１１を、停電が発生した場合のバックアップ先の記憶媒体として用いるとしても良い。かかる場合、ストレージ装置１、２は、サーバ９からのデータ保存先の記憶媒体としてＨＤＤ（Hard  Disk  Drive）を搭載するようにすれば良い。例えば、ストレージ装置１、２は、メモリコントローラ１７にＲＡＩＤコントローラを接続し、ＲＡＩＤコントローラ配下にＨＤＤを搭載する。かかる構成では、キャッシュメモリ１４は、通常時、サーバ９からの書き込み命令に応じてＨＤＤに書き込むユーザデータを一時的に記憶する。また、キャッシュメモリ１４は、通常時、サーバ９からの読み出し命令に応じてＨＤＤから読み出したユーザデータを一時的に記憶する。そして、停電時、メモリコントローラ１６は、キャッシュメモリ１４に一時的に記憶されたユーザデータのＮＡＮＤフラッシュ１１へのバックアップ処理を実行する。そして、復電時、メモリコントローラ１６は、リードＤＭＡ１７３から出力された読み出しデータをキャッシュメモリ１４へ書き戻す。かかる構成であっても、キャッシュメモリ１４に一時的に記憶されていたユーザデータは、停電時にＮＡＮＤフラッシュ１１に退避することができる。そして、停電時にＮＡＮＤフラッシュ１１に退避されたユーザデータは、復電時にキャッシュメモリ１４に正しく書き戻されることができる。【００９９】
また、図示したストレージ装置１、２の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、ストレージ装置１、２の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、ＣＲＣ生成部１７１ａとパリティ生成部１７１ｂとを誤り符号生成部として１個の部に統合しても良い。ＥＣＣグループ訂正制御部１７３ｂと他ＣＭ間訂正制御部２０３とをＥＣＣグループ訂正制御部として１個の部に統合しても良い。一方、パリティ訂正制御部１７３ａをＣＲＣチェック部とパリティ訂正制御部とに分散しても良い。
【符号の説明】
【０１００】
１、２  ストレージ装置
１Ａ、１Ｂ  ＣＭ
１１  ＮＡＮＤフラッシュ
１２  電源供給ユニット
１３  停電時給電ユニット
１４  キャッシュメモリ
１５  ＣＰＵ
１６  メモリコントローラ
１７  ＮＡＮＤコントローラ
１７１  ライトＤＭＡ
１７１ａ  ＣＲＣ生成部
１７１ｂ  パリティ生成部
１７２  コントローラ
１７２ａ  ＥＣＣ生成部
１７２ｂ  ＥＣＣ訂正制御部
１７３  リードＤＭＡ
１７３ａ  パリティ訂正制御部
１７３ｂ  ＥＣＣグループ訂正制御部
２０１、３０１  他ＣＭ通信部
２０２、３０２  リードデータ用バッファ
２０３、３０３  他ＣＭ間訂正制御部
【図１】
2014061161.tif 000003
【図２Ａ】
2014061161.tif 000004
【図２Ｂ】
2014061161.tif 000005
【図３】
2014061161.tif 000006
【図４】
2014061161.tif 000007
【図５】
2014061161.tif 000008
【図６】
2014061161.tif 000009
【図７】
2014061161.tif 000010
【図８】
2014061161.tif 000011
【図９】
2014061161.tif 000012
【図１０】
2014061161.tif 000013
【手続補正書】
【提出日】平成28年3月22日(2016.3.22)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のデータ記憶部と、
書き込みデータに第１の誤り訂正符号および誤り検出符号を付加して所定の書き込み容量のストライプデータを生成し、所定数の前記ストライプデータに第２の誤り訂正符号を付加した冗長グループを生成し、同一の冗長グループに属する複数のストライプデータと第２の誤り訂正符号を前記複数のデータ記憶部にそれぞれ対応付けて書き込む制御を行なう制御部と、
前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属するストライプデータに誤りがあるか否かを第１の誤り訂正符号により検出し、誤りがあるストライプデータの訂正を前記第１の誤り訂正符号により行なう第１の誤り検出訂正部と、
前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属するストライプデータに誤りがあるか否かを前記誤り検出符号により検出し、誤りがあるストライプデータを前記同一の冗長グループに属する第２の誤り訂正符号を用いて訂正できない場合には、前記同一の冗長グループに属する各ストライプデータと前記第２の誤り訂正符号を前記第１の誤り訂正符号の生成単位ごとに組分けて、複数の分割ストライプデータと各分割ストライプデータに対応付けられた第２の誤り訂正符号を含む誤り訂正グループを複数生成し、同一の誤り訂正グループに属する誤りがある分割ストライプデータの訂正を前記各分割ストライプデータに対応付けられた第２の誤り訂正符号により行なう第２の誤り検出訂正部と、
を備えることを特徴とする記録再生装置。
【請求項２】
前記第２の誤り検出訂正部は、前記第１の誤り訂正符号により訂正されたストライプデータを含む冗長グループおよび前記第１の誤り訂正符号により訂正できなかったストライプデータを含む冗長グループのいずれの場合も前記冗長グループに属するストライプデータに誤りがあるか否かを前記誤り検出符号により検出し、誤りがあると検出された場合であって、誤りがあるストライプデータを前記第２の誤り訂正符号を用いて訂正できない場合には、前記冗長グループに属する各ストライプデータと前記第２の誤り訂正符号を前記第１の誤り訂正符号の生成単位ごとに組分けて、複数の分割ストライプデータと各分割ストライプデータに対応付けられた第２の誤り訂正符号を含む誤り訂正グループを複数生成し、同一の誤り訂正グループに属する誤りがある分割ストライプデータの訂正を前記各分割ストライプデータに対応付けられた第２の誤り訂正符号により行なう
ことを特徴とする請求項１に記載の記録再生装置。
【請求項３】
前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属するデータに誤りがあるか否かを第１の誤り訂正符号により検出し、誤りがあるデータの訂正を行えない場合、第１の誤り訂正符号の生成単位のいずれの位置で誤りが検出されたかを出力する誤り位置出力部を備え、
前記第２の誤り検出訂正部は、前記誤り位置出力部によって出力された誤り位置を含む誤り訂正グループで誤りがある分割ストライプデータの訂正を行う
ことを特徴とする請求項１または請求項２に記載の記録再生装置。
【請求項４】
前記誤り訂正グループに複数の誤り位置がある場合、自装置と冗長化された装置内の複数のデータ記憶部に記憶されたデータのうち前記誤り訂正グループに対応するグループに属する、自装置の誤り位置と同じ位置の分割ストライプデータに誤りがなければ、誤りがない分割ストライプデータを受け取り、受け取った分割ストライプデータを自装置の該当する誤り位置に複製する複製部を
さらに備えることを特徴とする請求項３に記載の記録再生装置。
【請求項５】
書き込みデータに第１の誤り訂正符号および誤り検出符号を付加して所定の書き込み容量のストライプデータを生成し、所定数の前記ストライプデータに第２の誤り訂正符号を付加した冗長グループを生成し、同一の冗長グループに属する複数のストライプデータと第２の誤り訂正符号を複数のデータ記憶部にそれぞれ対応付けて書き込む制御が行われる記録再生装置のデータ誤り訂正装置が、
前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属するストライプデータに誤りがあるか否かを第１の誤り訂正符号により検出し、誤りがあるストライプデータの訂正を前記第１の誤り訂正符号により行ない、
前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属するストライプデータに誤りがあるか否かを前記誤り検出符号により検出し、誤りがあるストライプデータを前記同一の冗長グループに属する第２の誤り訂正符号を用いて訂正できない場合には、前記同一の冗長グループに属する各ストライプデータと前記第２の誤り訂正符号を前記第１の誤り訂正符号の生成単位ごとに組分けて、複数の分割ストライプデータと各分割ストライプデータに対応付けられた第２の誤り訂正符号を含む誤り訂正グループを複数生成し、同一の誤り訂正グループに属する誤りがある分割ストライプデータの訂正を前記各分割ストライプデータに対応付けられた第２の誤り訂正符号により行なう
各処理を実行することを特徴とする誤り訂正方法。
【請求項６】
前記第２の誤り検出訂正により行なう処理は、前記第１の誤り訂正符号により訂正されたストライプデータを含む冗長グループおよび前記第１の誤り訂正符号により訂正できなかったストライプデータを含む冗長グループのいずれの場合も前記冗長グループに属するストライプデータに誤りがあるか否かを前記誤り検出符号により検出し、誤りがあると検出された場合であって、誤りがあるストライプデータを前記第２の誤り訂正符号を用いて訂正できない場合には、前記冗長グループに属する各ストライプデータと前記第２の誤り訂正符号を前記第１の誤り訂正符号の生成単位ごとに組分けて、複数の分割ストライプデータと各分割ストライプデータに対応付けられた第２の誤り訂正符号を含む誤り訂正グループを複数生成し、同一の誤り訂正グループに属する誤りがある分割ストライプデータの訂正を前記各分割ストライプデータに対応付けられた第２の誤り訂正符号により行なう
ことを特徴とする請求項５に記載の誤り訂正方法。
【請求項７】
複数のデータ記憶部へのデータの書き込みおよび前記複数のデータ記憶部からのデータの読み出しを制御する制御装置において、
書き込みデータに第１の誤り訂正符号および誤り検出符号を付加して所定の書き込み容量のストライプデータを生成し、所定数の前記ストライプデータに第２の誤り訂正符号を付加した冗長グループを生成し、同一の冗長グループに属する複数のストライプデータと第２の誤り訂正符号を前記複数のデータ記憶部にそれぞれ対応付けて書き込む制御を行なう制御部と、
前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属するストライプデータに誤りがあるか否かを第１の誤り訂正符号により検出し、誤りがあるストライプデータの訂正を前記第１の誤り訂正符号により行なう第１の誤り検出訂正部と、
前記複数のデータ記憶部からそれぞれ読み出された同一の冗長グループに属するストライプデータに誤りがあるか否かを前記誤り検出符号により検出し、誤りがあるストライプデータを前記同一の冗長グループに属する第２の誤り訂正符号を用いて訂正できない場合には、前記同一の冗長グループに属する各ストライプデータと前記第２の誤り訂正符号を前記第１の誤り訂正符号の生成単位ごとに組分けて、複数の分割ストライプデータと各分割ストライプデータに対応付けられた第２の誤り訂正符号を含む誤り訂正グループを複数生成し、同一の誤り訂正グループに属する誤りがある分割ストライプデータの訂正を前記各分割ストライプデータに対応付けられた第２の誤り訂正符号により行なう第２の誤り検出訂正部と、
を備えることを特徴とする制御装置。
【請求項８】
前記第２の誤り検出訂正部は、前記第１の誤り訂正符号により訂正されたストライプデータを含む冗長グループおよび前記第１の誤り訂正符号により訂正できなかったストライプデータを含む冗長グループのいずれの場合も前記冗長グループに属するストライプデータに誤りがあるか否かを前記誤り検出符号により検出し、誤りがあると検出された場合であって、誤りがあるストライプデータを前記第２の誤り訂正符号を用いて訂正できない場合には、前記冗長グループに属する各ストライプデータと前記第２の誤り訂正符号を前記第１の誤り訂正符号の生成単位ごとに組分けて、複数の分割ストライプデータと各分割ストライプデータに対応付けられた第２の誤り訂正符号を含む誤り訂正グループを複数生成し、同一の誤り訂正グループに属する誤りがある分割ストライプデータの訂正を前記各分割ストライプデータに対応付けられた第２の誤り訂正符号により行なう
ことを特徴とする請求項７に記載の制御装置。
【国際調査報告】
2014061161.tif 000014
2014061161.tif 000015
2014061161.tif 000016
2014061161.tif 000017