(57)【特許請求の範囲】
【請求項１】
フラッシュメモリを記憶媒体とする複数の記憶装置によって形成されたＲＡＩＤグループのいずれかの記憶装置のデータを更新する場合、前記いずれかの記憶装置の前記データが記憶された記憶領域とは異なる他の記憶領域に更新後のデータを書き込み、パリティデータは生成せず、
前記いずれかの記憶装置のガベージコレクション処理の起動時に、前記更新後のデータに基づいて、前記更新後のデータのパリティデータを生成し、当該パリティデータを前記他の記憶領域に書き込む、
制御部を有することを特徴とする情報処理装置。
【請求項２】
前記制御部は、
前記いずれかの記憶装置の前記データを更新する場合、前記いずれかの記憶装置の前記他の記憶領域に前記更新後のデータを書き込むとともに、前記ＲＡＩＤグループの前記いずれかの記憶装置とは異なる他の記憶装置に、前記更新後のデータを書き込む、
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記制御部は、
前記更新後のデータを書き込んだ後から前記いずれかの記憶装置がガベージコレクション処理を起動する前に前記ＲＡＩＤグループの前記いずれかの記憶装置とは異なる他の記憶装置が故障した場合、前記いずれかの記憶装置の前記データと、前記データのパリティデータとに基づいて、故障した記憶装置のデータを復元する、
ことを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
コンピュータが、
フラッシュメモリを記憶媒体とする複数の記憶装置によって形成されたＲＡＩＤグループのいずれかの記憶装置のデータを更新する場合、前記いずれかの記憶装置の前記データが記憶された記憶領域とは異なる他の記憶領域に更新後のデータを書き込み、パリティデータは生成せず、
前記いずれかの記憶装置のガベージコレクション処理の起動時に、前記更新後のデータに基づいて、前記更新後のデータのパリティデータを生成し、当該パリティデータを前記他の記憶領域に書き込む、
処理を実行することを特徴とするＲＡＩＤ制御方法。
【請求項５】
コンピュータに、
フラッシュメモリを記憶媒体とする複数の記憶装置によって形成されたＲＡＩＤグループのいずれかの記憶装置のデータを更新する場合、前記いずれかの記憶装置の前記データが記憶された記憶領域とは異なる他の記憶領域に更新後のデータを書き込み、パリティデータは生成せず、
前記いずれかの記憶装置のガベージコレクション処理の起動時に、前記更新後のデータに基づいて、前記更新後のデータのパリティデータを生成し、当該パリティデータを前記他の記憶領域に書き込む、
処理を実行させることを特徴とするＲＡＩＤ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）制御方法、およびＲＡＩＤ制御プログラムに関する。
【背景技術】
【０００２】
従来、複数の記憶装置を組み合わせて仮想的なディスクとして運用するＲＡＩＤ技術がある。ここで、特定のＲＡＩＤレベルでは、複数のデータからパリティデータを生成しておき、複数のデータのうちのいずれかのデータが失われた場合、複数のデータの失われたデータを除く他のデータと、パリティデータとから、失われたデータを復元する。また、フラッシュメモリを記憶媒体とする記憶装置がある。
【０００３】
関連する先行技術として、例えば、書き込みコマンドに付随する書き込みアドレス、サイズなどの条件を取得し、取得した条件から、データをパリティグループとして書き込むか、二重化グループとして書き込むか、を判定するものがある。また、データと、データの誤りを訂正するために使われる冗長情報とを異なる半導体記憶ドライブに各々書き込み、所定の数の第１データの各物理アドレスおよび論理アドレスと、冗長情報の物理アドレスとを対応付けたテーブルを記憶する技術がある。また、ＲＡＩＤ１の冗長性方式に従ってデータ冗長性を提供するためにストレージのコマンドを受け取り、ＲＡＩＤ５のデータ冗長性方式に従ってデータ冗長性を提供するためにコマンドを変換する技術がある。また、ｎ−１個のデータを書き込む毎にパリティを生成しｎ個目のデータとして書き込み、データの書き込み時ページの冗長領域に論理アドレスを格納し、この論理アドレスのパリティを生成し、ｎ個目のデータを書き込むページの冗長領域に書き込む技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−０１６１４７号公報
【特許文献２】特開２０１２−０６８８６２号公報
【特許文献３】特開２０１３−２５７９００号公報
【特許文献４】特開２０１０−１５２５５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術によれば、フラッシュメモリを記憶媒体とする複数の記憶装置で形成されるＲＡＩＤグループについて、データの更新があるたびにパリティデータを生成し、書き込み性能が劣化する。具体的には、パリティデータを生成するためには、更新前のデータと更新後のデータとパリティデータとを読み出して、パリティデータの計算を行うため、読み出しの分とパリティデータの計算の分、書き込み性能が劣化することになる。また、ＮＡＮＤ型フラッシュメモリは、書き込み可能な最大回数が決まっており、頻繁に書き込みが行われると故障の元となる。
【０００６】
１つの側面では、本発明は、フラッシュメモリを記憶媒体とする複数の記憶装置で形成されるＲＡＩＤグループについて、データを更新する際の書き込み性能を向上させることができる情報処理装置、ＲＡＩＤ制御方法、およびＲＡＩＤ制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、フラッシュメモリを記憶媒体とする複数の記憶装置によって形成されたＲＡＩＤグループのいずれかの記憶装置のデータを更新する場合、いずれかの記憶装置のデータが記憶された記憶領域とは異なる他の記憶領域に更新後のデータを書き込み、パリティデータは生成せず、いずれかの記憶装置のガベージコレクション処理の起動時に、更新後のデータに基づいて、更新後のデータのパリティデータを生成し、当該パリティデータを前記他の記憶領域に書き込む情報処理装置、ＲＡＩＤ制御方法、およびＲＡＩＤ制御プログラムが提案される。
【発明の効果】
【０００８】
本発明の一態様によれば、フラッシュメモリを記憶媒体とする複数の記憶装置で形成されるＲＡＩＤグループについて、データを更新する際の書き込み性能を向上させることができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、本実施の形態にかかる情報処理装置１０１の動作例を示す説明図である。
【図２】図２は、マルチレベルＲＡＩＤの動作例を示す説明図である。
【図３】図３は、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇの書き込み性能が低い理由を示す説明図である。
【図４】図４は、ディスクアレイ装置４００のハードウェア構成例を示す説明図である。
【図５】図５は、ＣＭ４１１のハードウェア構成例を示す説明図である。
【図６】図６は、ディスクアレイ装置４００の機能構成例を示す説明図である。
【図７】図７は、ＦＴＬアドレス変換表６１１の記憶内容の一例を示す説明図である。
【図８】図８は、データ更新時におけるＦＴＬアドレス変換表６１１の更新例を示す説明図である。
【図９】図９は、データ更新時におけるＳＳＤ４２３−１〜４の更新例を示す説明図である。
【図１０】図１０は、リカバリ時におけるＦＴＬアドレス変換表６１１の更新例を示す説明図である。
【図１１】図１１は、リカバリ時におけるＳＳＤ４２３−１〜４の更新例を示す説明図である。
【図１２】図１２は、読み出し処理手順の一例を示すフローチャートである。
【図１３】図１３は、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇ済データのｉｎ−ｐｌａｃｅ更新処理手順の一例を示すフローチャートである。
【図１４】図１４は、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇ化処理手順の一例を示すフローチャートである。
【図１５】図１５は、本実施の形態にかかるＲＡＩＤ制御方法の効果の一例を示す説明図である。
【図１６】図１６は、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇ済のデータの更新の一例を示す説明図である。
【発明を実施するための形態】
【００１０】
以下に図面を参照して、開示の情報処理装置、ＲＡＩＤ制御方法、およびＲＡＩＤ制御プログラムの実施の形態を詳細に説明する。
【００１１】
図１は、本実施の形態にかかる情報処理装置１０１の動作例を示す説明図である。情報処理装置１０１は、フラッシュメモリを記憶媒体とする複数の記憶装置を制御するコンピュータである。情報処理装置１０１は、例えば、ディスクアレイ装置やサーバである。フラッシュメモリを記憶媒体とする記憶装置は、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）と呼ばれる。具体的には、情報処理装置１０１は、複数のＳＳＤによってＲＡＩＤ技術によるＲＡＩＤグループを形成し、ＲＡＩＤグループによって形成された仮想的なディスクを、情報処理装置１０１のユーザに提供する。ＲＡＩＤグループは、１つの仮想的なディスクを形成する記憶装置のグループである。
【００１２】
また、ＲＡＩＤ技術には、仮想的なディスクの形成の仕方を表すＲＡＩＤレベルが存在する。ＲＡＩＤ１以上のＲＡＩＤレベルにより形成された仮想的なディスクは冗長性を有しており、いくつかの記憶装置が故障しても他の記憶装置からデータを復元することができる。
【００１３】
例えば、ＲＡＩＤ１は、レプリケーション（Ｒｅｐｌｉｃａｔｉｏｎ）と呼ばれる冗長化手法であり、一つの記憶装置に書き込まれたデータを、他の記憶装置にも書き込むことにより、冗長性を担保する技術である。また、ＲＡＩＤ５、６は、イレージャーコーディング（Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇ）と呼ばれる冗長化手法であり、複数のデータからパリティデータを生成しておくことにより、冗長性を担保する技術である。具体的には、ＲＡＩＤ５、６では、複数のデータのうちのいずれかのデータが失われた場合、複数のデータのいずれかのデータを除く他のデータと、パリティデータとから、いずれかのデータを復元する。以下、データの復元のことを、「リカバリ」と呼称する。
【００１４】
ここで、ＲＡＩＤ１と、ＲＡＩＤ５、６とについては、それぞれ利点と欠点とがあり、両者の利点を生かす方法として、ＲＡＩＤレベルを自動的に切り替える方法がある。以下、ＲＡＩＤレベルを自動的に切り替える方法のことを、「マルチレベル（Ｍｕｌｔｉ−Ｌｅｖｅｌ）ＲＡＩＤ」と称する。ＲＡＩＤ１と、ＲＡＩＤ５、６とのそれぞれの利点と欠点と、マルチレベルＲＡＩＤの詳細とについては、図２で説明する。また、以下の記載では、マルチレベルＲＡＩＤは、ＲＡＩＤ１とＲＡＩＤ５を切り替えるものとする。
【００１５】
しかしながら、マルチレベルＲＡＩＤにおいて、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇを行う際の書き込み性能が劣化する。具体的には、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇによりパリティデータを再計算することになるが、パリティデータを生成するためには、更新前のデータと更新後のデータとパリティデータとを読み出して、パリティデータの計算を行うことになる。従って、読み出しの分とパリティデータの計算の分、書き込み性能が劣化することになる。Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇに書き込み性能が低くなる理由についての詳細については、図３で示す。
【００１６】
また、フラッシュメモリ、特に、ＮＡＮＤ型フラッシュメモリは、書き込み可能な最大回数が決まっており、頻繁に書き込みが行われると故障の元となる。
【００１７】
Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇ済のデータの更新については、以下２通りの方法が考えられる。１つ目の方法は、データを上書き（ｉｎ−ｐｌａｃｅ）更新する方法である。この方法では、書き込み回数は、３回となる。しかしながら、この方法では、パリティデータの更新が発生して、書き込み性能が低下することになる。２つ目の方法は、別のＳＳＤにＲｅｐｌｉｃａｔｉｏｎする方法である。しかしながら、この方法では、書き込み回数が、３回から４回に増えてしまう。１つ目の方法であるｉｎ−ｐｌａｃｅ更新と、２つ目の方法である別のＳＳＤにＲｅｐｌｉｃａｔｉｏｎする方法との欠点については、図１６で説明する。
【００１８】
ここで、ＮＡＮＤ型フラッシュメモリには、ガベージコレクション（ＧＣ：Ｇａｒｂａｇｅ  Ｃｏｌｌｅｃｔｉｏｎ）処理が発生するまでは、旧データを残す特性がある。ＮＡＮＤ型フラッシュメモリにおけるＧＣ処理は、あるブロック内で使用されているデータだけを他のブロックにコピーし、あるブロックのデータを全て削除するという処理である。
【００１９】
そこで、本実施の形態では、あるＳＳＤのデータの更新時には前述のＳＳＤの更新前のデータを上書きせずに別の領域に更新後のデータを書き込み、パリティデータは生成せず、ＧＣ処理起動時に更新後のデータからパリティデータを生成することについて説明する。
【００２０】
図１を用いて、情報処理装置１０１の動作例について説明する。図１に示す情報処理装置１０１は、ＲＡＩＤグループを形成する複数のＳＳＤとして、ＳＳＤ１〜３を制御する。そして、ＳＳＤ１は、データＡを記憶しており、ＳＳＤ２は、データＢを記憶しており、ＳＳＤ３は、データＡ、Ｂのパリティデータとして、ＡとＢとの排他的論理和を示すＡｘｏｒＢを記憶している。ここで、図中では、ｘｏｒを、丸の中に＋を入れた記号で示す。
【００２１】
いずれかの記憶装置としてＳＳＤ１のデータＡを更新する場合、図１の上部の（１）で示すように、情報処理装置１０１は、ＳＳＤ１のデータＡが記憶された記憶領域とは異なる他の記憶領域に、データＡの更新後のデータＡ’を書き込む。ここで、情報処理装置１０１は、データＡ’を、レプリカとして、ＳＳＤ１とは異なるＳＳＤに書き込んでもよい。図１の例では、情報処理装置１０１は、レプリカとなるデータＡ’をＳＳＤ２に書き込む。
【００２２】
そして、情報処理装置１０１は、ＳＳＤ１のＧＣ処理の起動時に、データＡ’のパリティデータを生成するため、図１の下部の（２）で示すように、ＳＳＤ１からデータＡ、Ａ’を読み出すとともに、ＳＳＤ３からＡｘｏｒＢを読み出す。そして、情報処理装置１０１は、図１の下部の（３）で示すように、データＡ’に基づいて、データＡ’のパリティデータとして、パリティデータＡ’ｘｏｒＢを生成する。図１の例では、情報処理装置１０１は、ＡｘｏｒＡ’ｘｏｒ（ＡｘｏｒＢ）を算出して、Ａ’ｘｏｒＢを得る。
【００２３】
ここで、パリティデータＡ’ｘｏｒＢの生成方法は、図１に示した方法に限られない。例えば、情報処理装置１０１は、ＳＳＤ１からデータＡ’を読み出し、ＳＳＤ２からデータＢを読み出して、Ａ’ｘｏｒＢによりパリティデータＡ’ｘｏｒＢを生成してもよい。
【００２４】
パリティデータＡ’ｘｏｒＢの生成後、情報処理装置１０１は、図１の下部の（４）で示すように、パリティデータＡ’ｘｏｒＢを、ＳＳＤ３に格納する。これにより、情報処理装置１０１は、書き込みのたびに発生していたパリティデータの書き込み回数が減るため、書き込み性能を向上させることができる。次に、マルチレベルＲＡＩＤの動作例を、図２を用いて説明する。
【００２５】
図２は、マルチレベルＲＡＩＤの動作例を示す説明図である。マルチレベルＲＡＩＤは、図１で説明したように、ＲＡＩＤレベルを自動的に切り替える方法である。ここで、ＲＡＩＤ１は、２つの記憶装置に書き込むだけであるため、書き込み性能が高いという利点がある一方で、ユーザデータの２倍分の容量を消費するため、容量効率が劣化するという欠点がある。ＲＡＩＤ５、６は、ユーザデータの（ＲＡＩＤグループに含まれる記憶装置の個数）／（ＲＡＩＤグループに含まれる記憶装置の個数−パリティデータを記憶する記憶装置の個数）倍分しか容量を消費しないため、ＲＡＩＤ１に比べ容量効率がよいという利点がある。一方で、ＲＡＩＤ５、６は、パリティデータの更新があるため、ＲＡＩＤ１に比べ書き込み性能が劣化するという欠点がある。
【００２６】
従って、マルチレベルＲＡＩＤは、書き込み時ではＲＡＩＤ１で高い書き込み性能を得つつ、ある程度の時間が経過したら、古いデータをＲＡＩＤ５、６化して容量効率を向上させる、という技術である。
【００２７】
図２の例では、マルチレベルＲＡＩＤでは、データＡの書き込み時には、ＲＡＩＤ１により、ＳＳＤ１、ＳＳＤ２にデータＡを書き込む。そして、ある程度時間が経過した場合、マルチレベルＲＡＩＤでは、ＲＡＩＤ５により、ＳＳＤ１〜３に、それぞれ、データＡ〜Ｃを書き込み、ＳＳＤ４に、ＡｘｏｒＢｘｏｒＣにより生成したパリティＰを書き込む。
【００２８】
次に、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇの書き込み性能が低い理由について、図３を用いて説明する。
【００２９】
図３は、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇの書き込み性能が低い理由を示す説明図である。図３では、ＳＳＤ１〜３は、それぞれ、データＡ〜Ｃを記憶しており、ＳＳＤ４は、パリティデータＡｘｏｒＢｘｏｒＣを記憶しているとする。そして、図３では、データＡをＡ’に更新する例を用いて、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇの書き込み性能が低い理由を示す。
【００３０】
データＡをＡ’に更新する場合、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇを行う装置は、パリティデータのＲｅａｄ−Ｍｏｄｉｆｙ−Ｗｒｉｔｅを行うことになる。具体的には、前述の装置は、ＳＳＤ１からデータＡを読み出し、ＳＳＤ４からパリティデータＡｘｏｒＢｘｏｒＣを読み出し、メモリにあるデータＡ’をキャッシュとして用いて、下記（１）式によりパリティデータＡ’ｘｏｒＢｘｏｒＣをメモリ上に生成する。
【００３１】
Ａｘｏｒ（ＡｘｏｒＢｘｏｒＣ）ｘｏｒＡ’＝Ａ’ｘｏｒＢｘｏｒＣ  …（１）
【００３２】
そして、前述の装置は、生成したパリティデータを、ＳＳＤ４に書き込む。以上により、１回のデータの更新に対する処理を終了する。これに対し、Ｒｅｐｌｉｃａｔｉｏｎでは、単に２つの記憶装置に書き込むだけである。従って、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇは、Ｒｅａｄ−Ｍｏｄｉｆｙ−Ｗｒｉｔｅのうち、読み出しの分と、パリティデータの生成の分、書き込み性能が劣化することになる。
【００３３】
次に、情報処理装置１０１を、ディスクアレイ装置に適用した例を、図４で説明する。
【００３４】
図４は、ディスクアレイ装置４００のハードウェア構成例を示す説明図である。ディスクアレイ装置４００は、ＣＥ（Ｃｏｎｔｒｏｌｌｅｒ  Ｅｎｃｌｏｓｕｒｅ）４０１と、ＤＥ（Ｄｒｉｖｅ  Ｅｎｃｌｏｓｕｒｅ）４０２とを含む。
【００３５】
そして、ＣＥ４０１は、ＣＭ（Ｃｏｎｔｒｏｌｌｅｒ  Ｍｏｄｕｌｅ）４１１と、ＣＰＳＵ（ＣＥ  Ｐｏｗｅｒ  Ｓｕｐｐｌｙ  Ｕｎｉｔ）４１２と、ディスク４１３とを有する。また、ＤＥ４０２は、ＩＯＭ（Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）  Ｍｏｄｕｌｅ）４２１と、ＤＰＳＵ（ＤＥ  Ｐｏｗｅｒ  Ｓｕｐｐｌｙ  Ｕｎｉｔ）４２２と、ＳＳＤ４２３とを含む。ＩＯＭ４２１は、ＥＸＰ（ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）  Ｅｘｐａｎｄｅｒ）を含む。
【００３６】
ここで、ＣＭ４１１が、図１に示した情報処理装置１０１に相当する。また、ＳＳＤ４２３が、図１に示したＳＳＤ１〜３に相当する。
【００３７】
ＣＥ４０１は、ＣＭ４１１〜ディスク４１３を含む筐体である。ＣＭ４１１は、ディスクアレイ装置４００を制御する装置である。また、ＣＭ４１１は、ＣＭ間通信を行う。また、ＣＭ４１１は、ホスト装置と接続する。ＣＭ４１１の内部のハードウェア構成は、図５で説明する。ＣＰＳＵ４１２は、ＣＥ４０１内部の装置に電源を供給するユニットである。ディスク４１３は、ＣＭ４１１が使用する記憶装置である。
【００３８】
ＤＥ４０２は、ＩＯＭ４２１〜ＳＳＤ４２３を含む筐体である。ＩＯＭ４２１は、ＣＭ４１１とドライブ間とを制御するユニットである。ＤＰＳＵ４２２は、ＤＥ４０２内部の装置に電源を供給するユニットである。ＥＸＰ４２４は、ＳＡＳ接続用のｅｘｐａｎｄｅｒチップである。図４に示すＥＸＰ４２４は、ＳＳＤ４２３のそれぞれと接続する。
【００３９】
図５は、ＣＭ４１１のハードウェア構成例を示す説明図である。ＣＭ４１１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）５０１と、メモリ５０２と、不揮発性メモリ５０３と、ＩＯＣ（Ｉ／Ｏ  Ｃｏｎｔｒｏｌｌｅｒ）５０４と、ＣＡ（Ｃｈａｎｎｅｌ  Ａｄａｐｔｅｒ）５０５と、ＥＸＰ５０６と、ＳＣＵ（Ｓｙｓｔｅｍ  Ｃａｐａｃｉｔｏｒ  Ｕｎｉｔ）５０７とを含む。
【００４０】
ＣＰＵ５０１は、ＣＭ４１１の全体の制御を司る演算処理装置である。また、ＣＰＵ５０１は、他のＣＭ４１１のＣＰＵ５０１と接続する。メモリ５０２は、ＣＰＵ５０１のワークエリアとして使用される揮発性メモリである。不揮発性メモリ５０３は、本実施の形態におけるＲＡＩＤ制御プログラムを記憶する不揮発性メモリである。不揮発性メモリ５０３の記憶媒体としては、例えば、ＮＯＲフラッシュメモリ、ＮＡＮＤフラッシュメモリを採用することができる。
【００４１】
ＩＯＣ５０４は、ＣＰＵ５０１からのＩ／Ｏを制御する。図５の例では、ＩＯＣ５０４は、ＥＸＰ５０６や、他のＣＭ４１１のＥＸＰ５０６と接続し、ＣＰＵ５０１からのディスク４１３やＳＳＤ４２３へのＩ／Ｏを制御する。ＣＡ５０５は、ホスト装置と通信する通信インターフェースである。ＥＸＰ５０６は、ＳＡＳ接続用のｅｘｐａｎｄｅｒチップである。図５に示すＥＸＰ４２４は、ディスク４１３のそれぞれと、ＥＸＰ４２４と接続する。ＳＣＵ５０７は、停電時に、メモリ５０２のデータを、不揮発性メモリ５０３にバックアップするための電源を供給するユニットである。
【００４２】
図６は、ディスクアレイ装置４００の機能構成例を示す説明図である。ＣＭ４１１は、制御部６００と、Ｉ／Ｏ発行部６０７とを有する。そして、制御部６００は、マルチレベルＲＡＩＤ制御部６０１を有する。マルチレベルＲＡＩＤ制御部６０１は、読み出し部６０２と、書き込み部６０３と、生成部６０４と、削除部６０５と、復元部６０６とを有する。ここで、制御部６００は、記憶装置に記憶されたプログラムをＣＰＵ５０１が実行することにより、制御部６００の機能を実現する。記憶装置とは、具体的には、例えば、図５に示したメモリ５０２、不揮発性メモリ５０３、ディスク４１３などである。また、各部の処理結果は、メモリ５０２、ＣＰＵ５０１のレジスタや、ＣＰＵ５０１のキャッシュメモリ等に格納される。また、Ｉ／Ｏ発行部６０７は、ＩＯＣ５０４、ＥＸＰ５０６、ＥＸＰ４２４により実現される機能である。
【００４３】
また、ＳＳＤ４２３は、ＦＴＬ（Ｆｌａｓｈ  Ｔｒａｎｓｌａｔｉｏｎ  Ｌａｙｅｒ）管理部６１０と、ＦＴＬアドレス変換表６１１と、複数のＮＡＮＤブロック６１２とを有する。なお、ＦＴＬ管理部６１０と、ＦＴＬアドレス変換表６１１とは、ＣＭ４１１が有してもよい。この場合、ＦＴＬ管理部６１０は、記憶装置に記憶されたプログラムをＣＰＵ５０１が実行することにより、ＦＴＬ管理部６１０の機能を実現する。ＮＡＮＤブロック６１２は、書き込み単位となるページを複数有する。ＦＴＬアドレス変換表６１１は、論理アドレスに対応付けて、Ｉ／Ｏ用のアクセスに対応するブロック番号およびページ番号と、リカバリ用のアクセスに対応するブロック番号およびページ番号とを記憶する。ＦＴＬアドレス変換表６１１の記憶内容の一例は、図７で説明する。
【００４４】
ここで、リカバリ用のアクセスに対応するブロック番号およびページ番号を使用するのは、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇからのリカバリの時である。従って、以下、単に「リカバリ」と記載した場合、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇからのリカバリを指す。なお、Ｒｅｐｌｉｃａｔｉｏｎからのリカバリ時には、ＣＭ４１１は、別のＳＳＤから読み出すだけであり、リカバリ用のアクセスに対応するブロック番号およびページ番号は使用しない。
【００４５】
マルチレベルＲＡＩＤ制御部６０１は、Ｒｅｐｌｉｃａｔｉｏｎ先のアドレスや、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇ済みか？といったマルチレベルＲＡＩＤ用の管理を行う。
【００４６】
読み出し部６０２は、ＳＳＤ４２３からデータを読み出す。また、書き込み部６０３は、ＳＳＤ４２３にデータを書き込む。具体的には、読み出し部６０２は、ＳＳＤ４２３からデータを読み出す読み出し要求をＩ／Ｏ発行部６０７へ発行し、Ｉ／Ｏ発行部６０７から得た、読み出し要求に対応するデータを受け付ける。同様に、書き込み部６０３は、ＳＳＤ４２３にデータを書き込む書き込み要求をＩ／Ｏ発行部６０７へ発行する。ここで、読み出し部６０２と書き込み部６０３とは、ＳＳＤ４２３に読み出し要求や書き込み要求を発行する際に、Ｉ／Ｏ用のアクセスなのか、リカバリ用のアクセスなのかを指定する。
【００４７】
また、書き込み部６０３は、ＲＡＩＤグループのいずれかのＳＳＤ４２３のデータを更新する場合、いずれかのＳＳＤ４２３の更新前のデータが記憶された記憶領域とは異なる他の記憶領域に更新後のデータを書き込む。
【００４８】
また、書き込み部６０３は、いずれかのＳＳＤ４２３のデータを更新する場合、前述のＳＳＤ４２３の他の記憶領域に更新後のデータを書き込むとともに、ＲＡＩＤグループの前述のＳＳＤ４２３とは異なる他のＳＳＤ４２３に、更新後のデータを書き込む。
【００４９】
生成部６０４は、いずれかのＳＳＤ４２３のＧＣ処理の起動時に、更新後のデータに基づいて、更新後のデータのパリティデータを生成する。具体的には、読み出し部６０２が、更新後のデータを読み出すため、Ｉ／Ｏ用の読み出し要求を、ＧＣ処理を起動するＳＳＤ４２３に発行するとともに、更新前のデータを読み出すため、リカバリ用の読み出し要求を、ＧＣ処理起動時のＳＳＤ４２３に発行する。また、読み出し部６０２が、パリティデータを記憶するＳＳＤ４２３に、リカバリ用の読み出し要求を発行する。そして、生成部６０４は、読み出し部６０２が読み出した更新前のデータ、更新後のデータ、パリティデータから、更新後のデータのパリティデータを生成する。また、ＧＣの処理起動時には、生成部６０４は、ＦＴＬ管理部６１０から、ＧＣ処理を起動する旨の通知を受け付ける。
【００５０】
削除部６０５は、更新後のデータのパリティデータを生成した後、いずれかのＳＳＤ４２３とは異なる他のＳＳＤ４２３に書き込んだ更新後のデータを削除する。
【００５１】
また、更新後のデータを書き込んだ後から、更新後のデータを書き込んだＳＳＤ４２３がＧＣ処理を起動する前に、ＲＡＩＤグループのうちの更新後のデータを書き込んだＳＳＤ４２３とは異なるＳＳＤ４２３が故障したとする。この場合、復元部６０６は、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇからのリカバリとして、更新後のデータを書き込んだＳＳＤ４２３の更新前のデータと、この更新前のデータのパリティデータとに基づいて、故障したＳＳＤ４２３のデータを復元する。
【００５２】
また、復元部６０６は、更新後のデータを書き込んだＳＳＤ４２３が故障した場合、ＲＡＩＤグループの更新後のデータを書き込んだＳＳＤ４２３を除くＳＳＤ４２３のデータ、パリティデータに基づいて、更新前のデータを復元する。また、このとき、復元部６０６は、Ｒｅｐｌｉｃａｔｉｏｎからのリカバリとして、ＲＡＩＤグループの更新後のデータを書き込んだＳＳＤ４２３とは異なる他のＳＳＤ４２３に書き込んだ更新後のデータを読み出すことにより、更新後のデータを復元する。なお、復元部６０６は、復元したデータを、例えば、故障したＳＳＤ４２３に代えて交換したＳＳＤ４２３や、故障したＳＳＤ４２３を含むＲＡＩＤグループのホットスペアとして指定されたＳＳＤ４２３に書き込む。
【００５３】
Ｉ／Ｏ発行部６０７は、読み出し部６０２からの読み出し要求や、書き込み部６０３からの書き込み要求を、Ｉ／Ｏ用のアクセスなのか、リカバリ用のアクセスなのかを指定して、該当のＳＳＤ４２３のＦＴＬ管理部６１０に発行する。例えば、Ｉ／Ｏ用のアクセスなのか、リカバリ用のアクセスなのかを指定する方法としては、例えば、Ｉ／Ｏ発行部６０７は、読み出し要求や書き込み要求に、Ｉ／Ｏ用のアクセスなのか、リカバリ用のアクセスなのかを指定するタグを付与する。
【００５４】
ＦＴＬ管理部６１０は、Ｉ／Ｏ発行部６０７からのＩ／Ｏを受け付けて、ＦＴＬアドレス変換表６１１を参照して、ＮＡＮＤブロック６１２にアクセスする。また、ＦＴＬ管理部６１０は、ＧＣ処理を実行する。また、ＧＣ処理を実行する際に、ＦＴＬ管理部６１０は、ＣＭ４１１に、これからＧＣ処理を起動する旨を通知する。
【００５５】
図７は、ＦＴＬアドレス変換表６１１の記憶内容の一例を示す説明図である。図７に示すＦＴＬアドレス変換表６１１は、レコード７０１−１〜３を有する。ＦＴＬアドレス変換表６１１は、ＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓｉｎｇ）と、Ｉ／Ｏ用ブロック番号と、Ｉ／Ｏ用ページ番号と、リカバリ用ブロック番号と、リカバリ用ページ番号というフィールドを含む。
【００５６】
ＬＢＡフィールドには、ＣＭ４１１からアクセスされる際の論理ＬＢＡを示す値が格納される。Ｉ／Ｏ用ブロック番号フィールドには、ＬＢＡに対応するＩ／Ｏ用のブロック番号を示す値が格納される。Ｉ／Ｏ用ページ番号フィールドには、ＬＢＡに対応するＩ／Ｏ用のページ番号を示す値が格納される。リカバリ用ブロック番号フィールドには、ＬＢＡに対応するリカバリ用のブロック番号を示す値が格納される。リカバリ用ページ番号フィールドには、ＬＢＡに対応するリカバリ用のページ番号を示す値が格納される。なお、リカバリ用ブロック番号およびページ番号は、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇからのリカバリ時に使用される。Ｒｅｐｌｉｃａｔｉｏｎからのリカバリ時には、ＣＭ４１１は、別のＳＳＤから読み出すだけであり、リカバリ用ブロック番号およびページ番号を使用しない。
【００５７】
次に、データ更新時における、ＦＴＬアドレス変換表６１１の更新例と、データ更新時における、ＦＴＬアドレス変換表６１１の更新に対応するＳＳＤの更新例について、図８、図９を用いて説明する。また、リカバリ時における、ＦＴＬアドレス変換表６１１の更新例と、データ更新時における、ＦＴＬアドレス変換表６１１の更新に対応するＳＳＤの更新例について、図１０、図１１を用いて説明する。また、図８〜図１１に示す状態１、状態２は、それぞれ同一の状態であるとする。
【００５８】
図８は、データ更新時におけるＦＴＬアドレス変換表６１１の更新例を示す説明図である。また、図９は、データ更新時におけるＳＳＤ４２３−１〜４の更新例を示す説明図である。ここで、図８に示す表８０１〜８０３は、それぞれ、状態１〜３におけるＳＳＤ４２３−１〜４のＩＤとして「１〜４」のいずれかと、ＦＴＬアドレス変換表６１１の記憶内容とを対応付けたものである。そして、図８に示す表８０１〜８０３は、それぞれ、レコード８０１−１〜４、レコード８０２−１〜５、レコード８０３−１〜４を有する。
【００５９】
まず、状態１について、ＳＳＤ４２３−１は、レコード８０１−１が示すように、ＬＢＡ１００に対応するブロック番号０およびページ番号０で示される物理ＬＢＡに、データＡを記憶している。また、ＳＳＤ４２３−２は、レコード８０１−２が示すように、ＬＢＡ１００に対応するブロック番号１およびページ番号１で示される物理ＬＢＡに、データＢを記憶している。また、レコード８０１−３が示すように、ＳＳＤ４２３−３は、ＬＢＡ１００に対応するブロック番号２およびページ番号２で示される物理ＬＢＡに、データＣを記憶している。そして、レコード８０１−４が示すように、ＳＳＤ４２３−４は、ＬＢＡ１００に対応するブロック番号３およびページ番号３で示される物理ＬＢＡに、パリティデータとして、ＡｘｏｒＢｘｏｒＣを記憶している。また、レコード８０１−４が示すように、パリティデータは、Ｉ／Ｏ時には使用しないため、レコード８０１−４のＩ／Ｏブロック番号およびページ番号フィールドには、値が入っていない。
【００６０】
状態２は、状態１から、データＡをＡ’にｉｎ−ｐｌａｃｅ更新した状態である。ＳＳＤ４２３−１は、ＣＭ４１１の指示により、データＡ’用に割り当てられた物理ＬＢＡに、データＡ’を書き込む。図９の例では、データＡ’用に割り当てられた物理ＬＢＡは、ブロック番号１０およびページ番号１０で示される物理ＬＢＡである。そして、ＳＳＤ４２３−１は、レコード８０１−１の更新後の状態であるレコード８０２−１が示すように、Ｉ／Ｏ用のブロック番号およびページ番号を、データＡ’用に割り当てられた物理ＬＢＡを示すブロック番号１０およびページ番号１０で更新する。ここで、ＳＳＤ４２３−１は、レコード８０２−１のリカバリ用のブロック番号およびページ番号を更新しない。
【００６１】
また、ＳＳＤ４２３−２は、ＣＭ４１１の指示により、データＡ’のＲｅｐｌｉｃａｔｉｏｎ先として割り当てられた物理ＬＢＡに、データＡ’を書き込む。図９の例では、データＡ’用に割り当てられた物理ＬＢＡは、ブロック番号２０およびページ番号２０で示される物理ＬＢＡである。そして、ＳＳＤ４２３−２は、レコード８０２−３が示すように、ＬＢＡ２００に対応するＩ／Ｏ用のブロック番号およびページ番号を、データＡ’用に割り当てられた物理ＬＢＡを示すブロック番号２０およびページ番号２０で更新する。ここで、ＳＳ２に書き込んだデータＡ’は、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇからのリカバリには使用されない。従って、ＳＳＤ４２３−２は、レコード８０２−３のリカバリ用のブロック番号およびページ番号を空白のままとする。
【００６２】
状態３は、状態２から、Ｅｒｅａｓｕｒｅ  Ｃｏｄｉｎｇ化した状態である。ここで、新たなパリティデータを生成するために、ＣＭ４１１は、現在のパリティデータと、更新前のデータと、更新後のデータとを読み出す。図８、図９の例では、ＣＭ４１１は、ＳＳＤ４２３−１からＡ、Ａ’を読み出し、ＳＳＤ４２３−４からＡｘｏｒＢｘｏｒＣを読み出す。そして、ＣＭ４１１は、Ａｘｏｒ（ＡｘｏｒＢｘｏｒＣ）ｘｏｒＡ’を実行し、パリティデータとしてＡ’ｘｏｒＢｘｏｒＣを生成する。
【００６３】
そして、ＳＳＤ４２３−４は、ＣＭ４１１の指示により、ＣＭ４１１が生成したパリティデータＡ’ｘｏｒＢｘｏｒＣを書き込む。図９の例では、パリティデータＡ’ｘｏｒＢｘｏｒＣ用に割り当てられた物理ＬＢＡは、ブロック番号３０およびページ番号３０で示される物理ＬＢＡである。次に、ＳＳＤ４２３−４は、レコード８０３−４が示すように、ＬＢＡ２００に対応するリカバリ用のブロック番号およびページ番号を、パリティデータＡ’ｘｏｒＢｘｏｒＣ用に割り当てられた物理ＬＢＡを示すブロック番号３０およびページ番号３０で更新する。
【００６４】
また、ＳＳＤ４２３−１は、ＣＭ４１１の指示により、更新後のデータに対するＩ／Ｏ用ブロック番号およびページ番号を、リカバリ用ブロック番号およびページ番号にコピーする。具体的には、ＳＳＤ４２３−１は、レコード８０３−１が示すように、Ｉ／Ｏ用ブロック番号１０およびＩ／Ｏ用ページ番号１０を、リカバリ用ブロック番号およびページ番号にコピーする。また、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇ化したことにより、ＳＳＤ４２３−１は、ガベージコレクション処理により、更新前のデータＡを削除する。また、データＡ’のＲｅｐｌｉｃａｔｉｏｎが不要となるため、ＳＳＤ４２３−２は、データＡ’を削除する。
【００６５】
図１０は、リカバリ時におけるＦＴＬアドレス変換表６１１の更新例を示す説明図である。また、図１１は、リカバリ時におけるＳＳＤ４２３−１〜４の更新例を示す説明図である。ここで、図１０に示す表８０１、８０２は、それぞれ、図８に示した表８０１、８０２と同一であるため、説明を省略する。また、図１０に示す表１００１は、状態４におけるＳＳＤのＩＤと、ＦＴＬアドレス変換表６１１の記憶内容とを対応付けたものである。そして、図８に示す表１００１は、レコード１００１−１〜５を有する。
【００６６】
状態４は、状態２から、ＳＳＤ４２３−３が故障した状態である。この場合、ＣＭ４１１は、ＳＳＤ４２３−１、２、４のリカバリ用のブロック番号およびページ番号を読み出して、ＳＳＤ４２３−３が記憶していたデータを復元する。具体的には、ＣＭ４１１は、ＳＳＤ４２３−１から、ＬＢＡ１００のブロック番号０およびページ番号０に割り当てられた物理ＬＢＡに格納されたデータＡを読み出す。同様に、ＣＭ４１１は、ＳＳＤ４２３−２からデータＢを読み出し、ＳＳＤ４２３−４からパリティデータＡｘｏｒＢｘｏｒＣを読み出す。そして、ＣＭ４１１は、ＡｘｏｒＢｘｏｒ（ＡｘｏｒＢｘｏｒＣ）を行って、データＣを復元する。
【００６７】
次に、ディスクアレイ装置４００が実行する処理について、図１２〜図１４を用いて説明する。
【００６８】
図１２は、読み出し処理手順の一例を示すフローチャートである。読み出し処理は、ＣＭ４１１からの読み出し要求を受け付けた際に実行する。ＳＳＤ４２３は、受け付けた読み出し要求が、Ｉ／Ｏのための読み出し要求か否かを判断する（ステップＳ１２０１）。ここで、例えば、ＳＳＤ４２３は、読み出し要求に含まれる、Ｉ／Ｏ用のアクセスかリカバリ用のアクセスかを示すタグを参照することにより、Ｉ／Ｏのための読み出し要求か否かを判断することができる。
【００６９】
Ｉ／Ｏのための読み出し要求である場合（ステップＳ１２０１：Ｙｅｓ）、ＳＳＤ４２３は、Ｉ／Ｏ用ブロック番号、ページ番号から、論理ＬＢＡを物理ＬＢＡに変換する（ステップＳ１２０２）。一方、リカバリのための読み出し要求である場合（ステップＳ１２０１：Ｎｏ）、ＳＳＤ４２３は、リカバリ用ブロック番号、ページ番号から、論理ＬＢＡを物理ＬＢＡに変換する（ステップＳ１２０３）。
【００７０】
ステップＳ１２０２、またはステップＳ１２０３の処理終了後、ＳＳＤ４２３は、変換した物理ＬＢＡを読み出す（ステップＳ１２０４）。次に、ＳＳＤ４２３は、読み出したデータをＣＭ４１１に送信する。以上により、ＣＭ４１１、ＳＳＤ４２３は、読み出し処理を終了する。
【００７１】
図１３は、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇ済データのｉｎ−ｐｌａｃｅ更新処理手順の一例を示すフローチャートである。ＳＳＤ４２３は、ＣＭ４１１からのＩ／Ｏのための書き込み要求を受け付けて、物理ＬＢＡを割り当てて更新後のデータを書き込む（ステップＳ１３０１）。ここで、書き込み先は、更新前のデータを記憶するＳＳＤ４２３と同一のＳＳＤである。そして、ＳＳＤ４２３は、更新前のデータが記憶された物理ＬＢＡとは別の領域の物理ＬＢＡを割り当てて、更新後のデータを書き込む。
【００７２】
次に、ＣＭ４１１は、Ｒｅｐｌｉｃａｔｉｏｎ先の論理ＬＢＡを決定する（ステップＳ１３０２）。例えば、図８の状態２の例では、ＳＳＤ４２３−１のＬＢＡ１００という論理ＬＢＡに対して、ＳＳＤ４２３−２の２００というＲｅｐｌｉｃａｔｉｏｎ先の論理ＬＢＡを決定する。また、ここで決定される論理ＬＢＡは、更新前のデータを記憶するＳＳＤ４２３とは異なるＳＳＤ４２３の論理ＬＢＡである。
【００７３】
ＣＭ４１１は、決定したアドレスに対するＩ／Ｏのための書き込み要求をＳＳＤ４２３に送信する。書き込み要求を受け付けたＳＳＤ４２３は、物理ＬＢＡを割り当ててレプリカとなるデータを書き込む（ステップＳ１３０３）。そして、ＳＳＤ４２３は、ＦＴＬアドレス変換表６１１のＩ／Ｏ用ブロック番号、ページ番号を、割り当てた物理ＬＢＡで更新する（ステップＳ１３０４）。ここで、ＳＳＤ４２３は、リカバリ用ブロック番号、ページ番号の更新はしない。ステップＳ１３０４の処理終了後、ＣＭ４１１、ＳＳＤ４２３は、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇ済データのｉｎ−ｐｌａｃｅ更新処理を終了する。
【００７４】
図１４は、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇ化処理手順の一例を示すフローチャートである。ＣＭ４１１は、データを有するＳＳＤ４２３に対して、Ｉ／Ｏ用ブロック番号、ページ番号を用いて該当するＬＢＡを読み出す（ステップＳ１４０１）。具体的には、ＣＭ４１１は、データを有するＳＳＤ４２３に対して、該当するＬＢＡのＩ／Ｏのための読み出し要求を送信する。読み出し要求を受け付けたＣＭ４１１は、ＦＴＬアドレス変換表６１１のＩ／Ｏ用ブロック番号およびページ番号を用いて該当するデータを読み出し、ＣＭ４１１に送信する。
【００７５】
次に、ＣＭ４１１は、読み込んだデータからパリティデータを生成する（ステップＳ１４０２）。そして、ＣＭ４１１は、生成したパリティデータをＳＳＤ４２３に書き込む（ステップＳ１４０３）。具体的には、ＣＭ４１１は、生成したパリティデータを含む書き込み要求であって、リカバリのための書き込み要求を、ＳＳＤ４２３に送信する。書き込み要求を受け付けたＳＳＤ４２３は、ＦＴＬアドレス変換表６１１のリカバリ用ブロック番号およびページ番号で示される物理ＬＢＡに、パリティデータを書き込む。
【００７６】
また、ＣＭ４１１は、データを有するＳＳＤ４２３に対して該当するＬＢＡのＩ／Ｏ用ブロック番号、ページ番号を、リカバリ用ブロック番号、ページ番号にコピーする指示を行う（ステップＳ１４０４）。指示を受けたＳＳＤ４２３は、該当するＬＢＡのＩ／Ｏ用ブロック番号、ページ番号を、リカバリ用ブロック番号、ページ番号にコピーする。ステップＳ１４０４の処理終了後、ＣＭ４１１、ＳＳＤ４２３は、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇ化処理を終了する。
【００７７】
次に、図１５を用いて、本実施の形態にかかるＲＡＩＤ制御方法の効果の一例を説明し、従来手法として、図１６を用いて、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇ済のデータの更新の一例を説明する。ここで、図１５、図１６で示す状態１では、ＳＳＤ４２３−１〜３が、それぞれ、データＡ〜Ｃを記憶しており、ＳＳＤ４２３−４が、パリティデータＡｘｏｒＢｘｏｒＣを記憶しているとする。そして、図１５、図１６では、データＡを更新する例を用いて本実施の形態の効果について、説明する。
【００７８】
図１５は、本実施の形態にかかるＲＡＩＤ制御方法の効果の一例を示す説明図である。図１５に示す状態１から、ＡがＡ’にｉｎ−ｐｌａｃｅ更新された場合、状態２となる。このとき、ＣＭ４１１は、ＳＳＤ４２３−１にＡ’を書き込むとともに、ＳＳＤ４２３−２にＡ’を書き込む。そして、パリティの更新を行わない。このように、パリティの更新を行わないため、Ｒｅｐｌｉｃａｔｉｏｎ並みの書き込み性能となる。
【００７９】
そして、状態２から、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇ化された場合、状態３となる。このとき、ＣＭ４１１は、ＳＳＤ４２３−４に、パリティデータＡ’ｘｏｒＢｘｏｒＣを書き込む。以上により、ＣＭ４１１は、状態２、３において、Ｒｅｐｌｉｃａｔｉｏｎ時に発生した４回の書き込みを、３回の書き込みに減らすことができる。従って、ＣＭ４１１は、ｒｅｐｌｉｃａｔｉｏｎ同等の書き込み性能と、少ない書き込み回数とを同時に実現することが可能である。
【００８０】
また、状態２から、ＳＳＤ４２３−３が故障した場合、状態４となる。このとき、ＣＭ４１１は、ＳＳＤ４２３−１からＡを読み出し、ＳＳＤ４２３−２からＢを読み出し、ＳＳＤ４２３−４からパリティデータＡｘｏｒＢｘｏｒＣを読み出して、ＡｘｏｒＢｘｏｒＣを復元する。
【００８１】
図１６は、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇ済のデータの更新の一例を示す説明図である。図１６では、従来手法の２つの方法として、１つ目の方法であるｉｎ−ｐｌａｃｅ更新する方法と、２つ目の方法である別のＳＳＤにＲｅｐｌｉｃａｔｉｏｎする方法とを図示する。
【００８２】
まず、１つ目の方法について、状態１から、ＡがＡ’にｉｎ−ｐｌａｃｅ更新された場合、状態２．１となる。このとき、ｉｎ−ｐｌａｃｅ更新する装置は、ＳＳＤ４２３−１にデータＡ’を書き込み、ＳＳＤ４２３−２にデータＡ’を書き込み、ＳＳＤ４２３−４にパリティデータＡ’ｘｏｒＢｘｏｒＣを書き込む。ここで、パリティデータＡ’ｘｏｒＢｘｏｒＣを書き込むためにＲｅａｄ−Ｍｏｄｉｆｙ−Ｗｒｉｔｅが発生するため、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇ並みの書き込み性能となってしまう。また、状態２．１から、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇ化された場合、状態３．１となる。
【００８３】
また、２つ目の方法について、状態１から、Ａが別のＳＳＤにＲｅｐｌｉｃａｔｉｏｎされた場合、状態２．２となる。このとき、Ｒｅｐｌｉｃａｔｉｏｎする装置は、ＳＳＤ４２３−２、３にデータＡ’を書き込む。次に、また、状態２．２から、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇ化された場合、状態３．２となる。このとき、前述の装置は、ＳＳＤ４２３−１に、データＡ’を書き込むとともに、ＳＳＤ４２３−４に、パリティデータＡ’ｘｏｒＢｘｏｒＣを書き込む。このように、状態２．２、２．３において、書き込み回数が３回から４回となるため、書き込み性能が劣化することになる。
【００８４】
以上説明したように、ＣＭ４１１は、ＲＡＩＤグループ内のいずれかのＳＳＤ４２３のデータを更新する際にはいずれかのＳＳＤ４２３の更新前のデータが記憶された領域とは別の領域に更新後のデータを書き込み、パリティデータは生成しない。そして、ＣＭ４１１は、ＧＣ処理起動時に更新後のデータからパリティデータを生成し、生成したパリティデータを書き込む。これにより、ＣＭ４１１は、パリティの書き込み回数を減らすことができ、書き込み性能を向上させることができる。
【００８５】
また、ＣＭ４１１は、ＲＡＩＤグループ内のいずれかのＳＳＤ４２３を更新する場合、いずれかのＳＳＤ４２３とは異なる他のＳＳＤ４２３に、更新後のデータを書き込む。これにより、ＣＭ４１１は、いずれかのＳＳＤ４２３が故障したとしても、他のＳＳＤ４２３から更新後のデータを読み出すという、Ｒｅｐｌｉｃａｔｉｏｎからのリカバリを行うことができる。
【００８６】
また、ＣＭ４１１は、更新後のデータのパリティデータを生成した後、いずれかのＳＳＤ４２３とは異なる他のＳＳＤ４２３に書き込んだ更新後のデータを削除する。これにより、ＣＭ４１１は、不要となったデータを削除し、ＳＳＤ４２３の空き容量を増やすことができる。
【００８７】
また、更新後のデータを書き込んだ後から、更新後のデータを書き込んだＳＳＤ４２３がＧＣ処理を起動する前に、ＲＡＩＤグループの更新後のデータを書き込んだＳＳＤ４２３とは異なるＳＳＤ４２３が故障したとする。この場合、ＣＭ４１１は、更新後のデータを書き込んだＳＳＤ４２３の更新前のデータと、この更新前のデータのパリティデータとに基づいて、故障したＳＳＤ４２３のデータを復元する。具体的には、図１１の例を用いると、ＣＭ４１１は、ＳＳＤ４２３−３が故障しても、ＳＳＤ４２３−１、２、４のデータＡ、Ｂ、パリティデータＡｘｏｒＢｘｏｒＣから、ＳＳＤ４２３−３のＣを復元する。このように、ＣＭ４１１は、ＧＣ処理までは削除されない旧データを利用して、Ｅｒａｓｕｒｅ  Ｃｏｄｉｎｇからのリカバリを行うことができる。
【００８８】
なお、本実施の形態で説明したＲＡＩＤ制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本ＲＡＩＤ制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本ＲＡＩＤ制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【００８９】
また、本実施の形態で説明したＦＴＬ管理部６１０は、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣ（以下、単に「ＡＳＩＣ」と称す。）やＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）などのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によっても実現することができる。具体的には、例えば、上述したＦＴＬ管理部６１０をＨＤＬ記述によって機能定義し、そのＨＤＬ記述を論理合成してＡＳＩＣやＰＬＤに与えることにより、ＦＴＬ管理部６１０を製造することができる。
【００９０】
上述した実施の形態に関し、さらに以下の付記を開示する。
【００９１】
（付記１）フラッシュメモリを記憶媒体とする複数の記憶装置によって形成されたＲＡＩＤグループのいずれかの記憶装置のデータを更新する場合、前記いずれかの記憶装置の前記データが記憶された記憶領域とは異なる他の記憶領域に更新後のデータを書き込み、
前記いずれかの記憶装置のガベージコレクション処理の起動時に、前記更新後のデータに基づいて、前記更新後のデータのパリティデータを生成する、
制御部を有することを特徴とする情報処理装置。
【００９２】
（付記２）前記制御部は、
前記いずれかの記憶装置の前記データを更新する場合、前記いずれかの記憶装置の前記他の記憶領域に前記更新後のデータを書き込むとともに、前記ＲＡＩＤグループの前記いずれかの記憶装置とは異なる他の記憶装置に、前記更新後のデータを書き込む、
ことを特徴とする付記１に記載の情報処理装置。
【００９３】
（付記３）前記制御部は、
前記更新後のデータのパリティデータを生成した後、前記他の記憶装置に書き込んだ前記更新後のデータを削除する、
ことを特徴とする付記２に記載の情報処理装置。
【００９４】
（付記４）前記制御部は、
前記更新後のデータを書き込んだ後から前記いずれかの記憶装置がガベージコレクション処理を起動する前に前記ＲＡＩＤグループの前記いずれかの記憶装置とは異なる他の記憶装置が故障した場合、前記いずれかの記憶装置の前記データと、前記データのパリティデータとに基づいて、故障した記憶装置のデータを復元する、
ことを特徴とする付記１〜３のいずれか一つに記載の情報処理装置。
【００９５】
（付記５）コンピュータが、
フラッシュメモリを記憶媒体とする複数の記憶装置によって形成されたＲＡＩＤグループのいずれかの記憶装置のデータを更新する場合、前記いずれかの記憶装置の前記データが記憶された記憶領域とは異なる他の記憶領域に更新後のデータを書き込み、
前記いずれかの記憶装置のガベージコレクション処理の起動時に、前記更新後のデータに基づいて、前記更新後のデータのパリティデータを生成する、
処理を実行することを特徴とするＲＡＩＤ制御方法。
【００９６】
（付記６）コンピュータに、
フラッシュメモリを記憶媒体とする複数の記憶装置によって形成されたＲＡＩＤグループのいずれかの記憶装置のデータを更新する場合、前記いずれかの記憶装置の前記データが記憶された記憶領域とは異なる他の記憶領域に更新後のデータを書き込み、
前記いずれかの記憶装置のガベージコレクション処理の起動時に、前記更新後のデータに基づいて、前記更新後のデータのパリティデータを生成する、
処理を実行させることを特徴とするＲＡＩＤ制御プログラム。
【符号の説明】
【００９７】
Ａ〜Ｃ  データ
１〜３  ４２３、ＳＳＤ
１０１  情報処理装置
４００  ディスクアレイ装置
４１１  ＣＭ
６００  制御部
６０１  マルチレベルＲＡＩＤ制御部
６０２  読み出し部
６０３  書き込み部
６０４  生成部
６０５  削除部
６０６  復元部
６０７  Ｉ／Ｏ発行部
６１０  ＦＴＬ管理部
６１１  ＦＴＬアドレス変換表
【図１】
0006696280.tif 000002
【図２】
0006696280.tif 000003
【図３】
0006696280.tif 000004
【図４】
0006696280.tif 000005
【図５】
0006696280.tif 000006
【図６】
0006696280.tif 000007
【図７】
0006696280.tif 000008
【図８】
0006696280.tif 000009
【図９】
0006696280.tif 000010
【図１０】
0006696280.tif 000011
【図１１】
0006696280.tif 000012
【図１２】
0006696280.tif 000013
【図１３】
0006696280.tif 000014
【図１４】
0006696280.tif 000015
【図１５】
0006696280.tif 000016
【図１６】
0006696280.tif 000017