(57)【要約】【課題】バッテリを不要としつつ、縮退時のデータ化けを抑制することが可能なアレイ型記憶装置を提供すること。【解決手段】先ず、ＨＤＤ０からデータＤ10、ＨＤＤ３からデータＤ13、ＨＤＤ２からパリティＰ1を読み込む（ステップＳ１１）。読み込んだデータＤ10、データＤ13、およびパリティＰ1からデータＤ11を計算する（ステップＳ１２）。更新されるデータＤ10'に対応するパリティＰ1'を演算する（ステップＳ１３）。パリティＰ1を読み込むことが出来ない状態にする（ステップＳ１４）。パリティＰ1が読み込めないようにした状態で、データＤ10'及び新しいパリティＰ1'をＨＤＤにライトする（ステップＳ１５）。データＤ10'及び新しいパリティＰ1'を書き込んだ後、パリティＰ1'をリードできるように変更する（ステップＳ１６）。【選択図】      図４
2009217719.tif 000002
【特許請求の範囲】
【請求項１】
複数台の記憶装置をストライプ単位で管理すると共に、ホストからライト命令されたデータを複数の記憶装置に分散して書き込み、前記複数台の記憶装置の同一ストライプの前記複数台の記憶装置の一部の記憶装置に格納されているデータから生成される冗長コードを前記冗長コードの生成に用いたデータが格納されている記憶装置とは異なる１台以上の記憶装置に格納する処理を実行するＲＡＩＤコントローラであって、
少なくとも１台の記憶装置が故障している縮退時に、前記ホストからライト命令された更新データを用いて正常な記憶装置に格納されている１台の記憶装置の一つのストライプに属するデータを更新する場合、更新されるデータが属するストライプ中の冗長コードを更新するための新たな冗長コードを演算する処理と、
前記新たな冗長コードの演算後、更新されるデータが属するストライプ中の冗長コードを読み出し不可状態にする処理と、
前記読み出し不可状態で、前記更新データを用いてデータを書き換える処理と、
前記読み出し不可状態で、前記冗長コードを前記新たな冗長コードに書き換える処理と、
読み出し不可状態の冗長コードを読み台可能な状態にする処理とを実行する
ことを特徴とするＲＡＩＤコントローラ。
【請求項２】
前記冗長コードを読み出し不可状態にするために、前記冗長コードが記録されている領域のＥＣＣを破壊することを特徴とする請求項１記載のＲＡＩＤコントローラ。
【請求項３】
複数台の記憶装置をストライプ単位で管理すると共に、ホストからライト命令されたデータを複数の記憶装置に分散して書き込み、前記複数台の記憶装置の同一ストライプの前記複数台の記憶装置の一部の記憶装置に格納されているデータから生成される冗長コードを前記冗長コードの生成に用いたデータが格納されている記憶装置とは異なる１台以上の記憶装置に格納する処理を実行するＲＡＩＤコントローラであって、
少なくとも１台の記憶装置が故障している縮退時に、前記ホストからライト命令された更新データを用いて正常な記憶装置に格納されている１台の記憶装置の一つのストライプに属するデータを更新する場合、更新されるデータが属するストライプ中の冗長コードを更新するための新たな冗長コードを演算する処理と、
前記新たな冗長コードの演算後、前記更新されるデータが属するストライプ中の冗長コードが書き換え中であることを示す書換中情報を故障していない記憶装置に格納する処理と、
前記書換中情報の生成後、前記更新データを用いてデータを更新する処理と、
前記データの更新後、前記冗長コードを前記新たな冗長コードに書き換える処理と、
前記新たな冗長コードが正常に書き込まれた場合に、前記書換中情報を削除する処理とを実行する
ことを特徴とするＲＡＩＤコントローラ。
【請求項４】
前記新たな冗長コード、または前記新たな冗長コードを演算するために必要なデータを故障していない記憶装置に書き込むことを特徴とする請求項３に記載のＲＡＩＤコントローラ。
【請求項５】
前記新たな冗長コードを演算するために必要なデータは、故障している記憶装置の前記更新されるデータが属するストライプに書き込まれているはずのデータであることを特徴とする請求項４に記載のＲＡＩＤコントローラ。
【請求項６】
複数台の記憶装置をストライプ単位で管理すると共に、ホストからライト命令されたデータを複数の記憶装置に分散して書き込み、前記複数台の記憶装置の同一ストライプの前記複数台の記憶装置の一部の記憶装置に格納されているデータから生成される冗長コードを前記冗長コードの生成に用いたデータが格納されている記憶装置とは異なる１台以上の記憶装置に格納するＲＡＩＤシステムであって、
少なくとも１台の記憶装置が故障している縮退時に、前記ホストからライト命令された更新データを用いて正常な記憶装置に格納されている１台の記憶装置の一つのストライプに属するデータを更新する場合、更新されるデータが属するストライプ中の冗長コードを更新するための新たな冗長コードを演算する処理と、
前記新たな冗長コードの演算後、更新されるデータが属するストライプ中の冗長コードを読み出し不可状態にする処理と、
前記読み出し不可状態で、前記更新データを用いて前記データ領域のデータを書き換えるための処理と、
前記読み出し不可状態で、前記冗長コードを前記新たな冗長コードに書き換えるための処理と、
読み出し不可状態の冗長コードを読み台可能な状態にするための処理とを実行するコントローラ
を具備することを特徴とするＲＡＩＤシステム。
【請求項７】
前記冗長コードを読み出し不可状態にするために、前記冗長コードが記録されている領域のＥＣＣを破壊することを特徴とする請求項６記載のＲＡＩＤシステム。
【請求項８】
複数台の記憶装置をストライプ単位で管理すると共に、ホストからライト命令されたデータを複数の記憶装置に分散して書き込み、前記複数台の記憶装置の同一ストライプの前記複数台の記憶装置の一部の記憶装置に格納されているデータから生成される冗長コードを前記冗長コードの生成に用いたデータが格納されている記憶装置とは異なる１台以上の記憶装置に格納するＲＡＩＤシステムであって、
少なくとも１台の記憶装置が故障している縮退時に、前記ホストからライト命令された更新データを用いて正常な記憶装置に格納されている１台の記憶装置の一つのストライプに属するデータを更新する場合、更新されるデータが属するストライプ中の冗長コードを更新するための新たな冗長コードを演算する処理と、
前記新たな冗長コードの演算後、前記更新されるデータが属するストライプ中の冗長コードが書き換え中であることを示す書換中情報を故障していない記憶装置に格納する処理と、
前記書換中情報の生成後、前記更新データを用いてデータを更新するための処理と、
前記書換中情報の生成後、前記冗長コードを前記新たな冗長コードに書き換えるための処理と、
前記新たな冗長コードが正常に書き込まれた場合に、前記書換中情報を削除するための処理とを実行するコントローラ
を具備することを特徴とするＲＡＩＤシステム。
【請求項９】
前記新たな冗長コード、または前記新たな冗長コードを演算するために必要なデータを故障していない記憶装置に書き込むことを特徴とする請求項８に記載のＲＡＩＤシステム。
【請求項１０】
前記新たな冗長コードを演算するために必要なデータは、故障している記憶装置の前記更新されるデータが属するストライプに書き込まれているはずのデータであることを特徴とする請求項９に記載のＲＡＩＤシステム。
【請求項１１】
複数台の記憶装置をストライプ単位で管理すると共に、ホストからライト命令されたデータを複数の記憶装置に分散して書き込み、前記複数台の記憶装置の同一ストライプの前記複数台の記憶装置の一部の記憶装置に格納されているデータから生成される冗長コードを前記冗長コードの生成に用いたデータが格納されている記憶装置とは異なる１台以上の記憶装置に格納するＲＡＩＤシステムの制御方法であって、
少なくとも１台の記憶装置が故障している縮退時に、前記ホストからライト命令された更新データを用いて正常な記憶装置に格納されている１台の記憶装置の一つのストライプに属するデータを更新する場合、更新されるデータが属するストライプ中の冗長コードを更新するための新たな冗長コードを演算し、
前記新たな冗長コードの演算後、更新されるデータが属するストライプ中の冗長コードを読み出し不可状態にし、
前記読み出し不可状態で、前記更新データを用いて前記データ領域のデータを書き換え、
前記読み出し不可状態で、前記冗長コードを前記新たな冗長コードに書き換え、
読み出し不可状態の冗長コードを読み台可能な状態にする
ことを特徴とするＲＡＩＤシステムの制御方法。
【請求項１２】
複数台の記憶装置をストライプ単位で管理すると共に、ホストからライト命令されたデータを複数の記憶装置に分散して書き込み、前記複数台の記憶装置の同一ストライプの前記複数台の記憶装置の一部の記憶装置に格納されているデータから生成される冗長コードを前記冗長コードの生成に用いたデータが格納されている記憶装置とは異なる１台以上の記憶装置に格納するＲＡＩＤシステムの制御方法であって、
少なくとも１台の記憶装置が故障している縮退時に、前記ホストからライト命令された更新データを用いて正常な記憶装置に格納されている１台の記憶装置の一つのストライプに属するデータを更新する場合、更新されるデータが属するストライプ中の冗長コードを更新するための新たな冗長コードを演算し、
前記新たな冗長コードの演算後、前記更新されるデータが属するストライプ中の冗長コードが書き換え中であることを示す書換中情報を当該冗長コードが格納されている記憶装置の管理情報領域に生成し、
前記書換中情報の生成後、前記更新データを用いてデータを更新し、
前記データの更新後、前記冗長コードを前記新たな冗長コードに書き換え、
前記新たな冗長コードが正常に書き込まれた場合に、前記書換中情報を削除する
ことを特徴とするＲＡＩＤシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数台の記憶装置でデータの冗長性を測ったＲＡＩＤのＲＡＩＤコントローラ、ＲＡＩＤシステム、およびＲＡＩＤシステムの制御方法に関する。
【背景技術】
【０００２】
アレイ型記憶装置では、ＨＤＤが故障し、冗長性がない状態(縮退)で、データライト中にシステムがクラッシュした場合、データライト中のパリティに対応する故障したＨＤＤ上にあったデータが化けてしまう可能性があった。
【０００３】
例えば、ＨＤＤ０、ＨＤＤ１、ＨＤＤ２、およびＨＤＤ３の４台のハードディスクでＲＡＩＤ５を組んでいる場合を考える。
【０００４】
ＨＤＤ０、ＨＤＤ１、およびＨＤＤ２に分散して書き込まれているデータＤ00〜Ｄ02に対応するパリティがＰ0、ＨＤＤ０、ＨＤＤ１、およびＨＤＤ３に分散して書き込まれているデータＤ10、Ｄ11、Ｄ13に対応するパリティがＰ1、…である。ここで、例えばパリティＰnがＨＤＤ２に存在する場合、以下の式で計算できる。
【数１】
2009217719.tif 000003
【０００５】
また、ＨＤＤ０のデータＤ10をデータＤ10'に更新する場合、（１０）式の条件を満たすように、パリティＰ1も新しいパリティＰ1'に更新する必要がある。
【０００６】
ここで、ＨＤＤ１が故障した場合のデータ書き換えを考える。この状態でＤ10をＤ10'に更新する場合、以下の手順で処理を行う。
【０００７】
(1)  Ｄ10およびＰ1を読み込む。
【０００８】
(2)  新たなＤ10'に対応する新たなパリティＰ1'を以下の（１１）式を用いて計算する。
【数２】
2009217719.tif 000004
【０００９】
(3)  新しいＤ10'および新しいパリティＰ1'をハードディスクドライブに書き込む。
【００１０】
このとき、例えばデータＤ10'を書き込んだ後、且つパリティＰ1'を書き込む前にシステムがクラッシュすると、データとパリティの整合が取れない状況が発生する。故障したＨＤＤ１上のデータＤ11を故障していないＨＤＤに格納されているデータから演算すると、
【数３】
2009217719.tif 000005
【００１１】
となり、データ化けが生じる。
【００１２】
これまでの技術では、このようなデータ化けを防ぐには、バッテリ等のハードウェアを実装する必要があった（例えば、特許文献１）。
【特許文献１】特開２００１−３４４０７号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
縮退時のデータ化けを防ぐためには上述した技術に開示されているように、バッテリ等のハードウェア等が必要であった。ところがバッテリには寿命があり、定期的にバッテリを交換する必要があり、バッテリの交換時期の管理が必要であった。
【００１４】
本発明の目的は、バッテリを不要としつつ、縮退時のデータ化けを抑制することが可能なＲＡＩＤコントローラ、ＲＡＩＤシステム、およびＲＡＩＤシステムの制御方法を提供することにある。
【課題を解決するための手段】
【００１５】
本発明の一例に係わる、複数台の記憶装置をストライプ単位で管理すると共に、ホストからライト命令されたデータを複数の記憶装置に分散して書き込み、前記複数台の記憶装置の同一ストライプの前記複数台の記憶装置の一部の記憶装置に格納されているデータから生成される冗長コードを前記冗長コードの生成に用いたデータが格納されている記憶装置とは異なる１台以上の記憶装置に格納するＲＡＩＤコントローラは、少なくとも１台の記憶装置が故障している縮退時に、前記ホストからライト命令された更新データを用いて正常な記憶装置に格納されている１台の記憶装置の一つのストライプに属するデータを更新する場合、更新されるデータが属するストライプ中の冗長コードを更新するための新たな冗長コードを演算する処理と、前記新たな冗長コードの演算後、更新されるデータが属するストライプ中の冗長コードを読み出し不可状態にする処理と、前記読み出し不可状態で、前記更新データを用いてデータを書き換える処理と、前記読み出し不可状態で、前記冗長コードを前記新たな冗長コードに書き換える処理と、読み出し不可状態の冗長コードを読み台可能な状態にする処理とを実行することを特徴とする。
【発明の効果】
【００１６】
本発明によれば、バッテリを不要としつつ、縮退時のデータ化けを抑制することが可能になる。
【発明を実施するための最良の形態】
【００１７】
本発明の実施の形態を以下に図面を参照して説明する。
【００１８】
まず、図１および図２を参照して、本発明の一実施形態に係るＲＡＩＤシステムの構成について説明する。このＲＡＩＤシステムは、ＮＡＳ（Network Attached Storage）として機能するアプライアンスサーバとして実現されている。
【００１９】
図１はアプライアンスサーバ１０の斜視図である。本サーバ１０は、サーバ本体１１から構成されている。サーバ本体１１は箱形の筐体を有している。サーバ本体１１の前面には、ＬＣＤ（Liquid Crystal Display）から構成されるフロントディスプレイパネル１７が組み込まれている。サーバ本体１１の前面には、本サーバ１０を電源オン／オフするためのパワーボタン１４などが配置されている。
【００２０】
次に、図２を参照して、本サーバ１０のシステム構成について説明する。
【００２１】
本サーバ１０は、図２に示されているように、ＣＰＵ１１１、ノースブリッジ１１２、主メモリ１１３、グラフィクスコントローラ１１４、サウスブリッジ１１９、ＢＩＯＳ−ＲＯＭ１２０、ＲＡＩＤコントローラ１２１、ハードディスクドライブ（ＨＤＤ）ＨＤＤ０〜ＨＤＤ５、ＬＡＮコントローラ１２３、エンベデッドコントローラ／キーボードコントローラＩＣ（ＥＣ／ＫＢＣ）１２４、および電源コントローラ１２５等を備えている。
【００２２】
ＣＰＵ１１１は本サーバ１０の動作を制御するために設けられたプロセッサであり、ハードディスクドライブ（ＨＤＤ）ＨＤＤ０〜ＨＤＤ５から主メモリ１１３にロードされる、オペレーティングシステム（ＯＳ）および各種アプリケーションプログラムを実行する。ＯＳは、複数のウィンドウを表示画面上に表示するためのウィンドウシステムを有している。
【００２３】
また、ＣＰＵ１１１は、ＢＩＯＳ−ＲＯＭ１２０に格納されたシステムＢＩＯＳ（Basic Input Output System）も実行する。システムＢＩＯＳはハードウェア制御のためのプログラムである。
【００２４】
ノースブリッジ１１２はＣＰＵ１１１のローカルバスとサウスブリッジ１１９との間を接続するブリッジデバイスである。ノースブリッジ１１２には、主メモリ１１３をアクセス制御するメモリコントローラも内蔵されている。また、ノースブリッジ１１２は、ＡＧＰ（Accelerated Graphycs Port）バスなどを介してグラフィクスコントローラ１１４との通信を実行する機能も有している。
【００２５】
グラフィクスコントローラ１１４は、本サーバ１０のフロントディスプレイパネルとして使用されるＬＣＤ１７を制御する表示コントローラである。このグラフィクスコントローラ１１４はビデオメモリ（ＶＲＡＭ）を有しており、ＯＳ／アプリケーションプログラムによってビデオメモリに描画された表示データから、ＬＣＤ１７に表示すべき表示イメージを形成する映像信号を生成する。
【００２６】
サウスブリッジ１１９は、ＬＰＣ（０ Pin Count）バス上の各デバイスを制御する。また、サウスブリッジ１１９は、ＰＣＩ−Ｘバスに接続されたデバイスと通信を行うためのＰＣＩ−Ｘコントローラを内蔵している。さらに、サウスブリッジ１１９は、ＢＩＯＳ−ＲＯＭ１２０をアクセス制御するための機能も有している。
【００２７】
ＲＡＩＤコントローラ１２１は、ＨＤＤ０，ＨＤＤ１，ＨＤＤ２，ＨＤＤ３の４台のハードディスクドライブを１台のハードディスクドライブとして取り扱ってＲＡＩＤ（Redundant Array Of Inexpensive Disks）を構成するための制御デバイスである。本実施形態の場合、ＨＤＤ０，ＨＤＤ１，ＨＤＤ２，ＨＤＤ３を用いてＲＡＩＤ５を構成する。ＲＡＩＤコントローラ１２１とサウスブリッジ１１９とは、例えばＰＣＩ−Ｘバスで接続されている。
【００２８】
ＬＡＮコントローラ１２３は、本コンピュータをＬＡＮに接続するためのネットワークインターフェースである。
【００２９】
エンベデッドコントローラ／キーボードコントローラＩＣ（ＥＣ／ＫＢＣ）１２４は、電源制御、放熱制御のためのエンベデッドコントローラと、キーボード（ＫＢ）およびマウスを制御するためのキーボードコントローラとが集積された１チップマイクロコンピュータである。このエンベデッドコントローラ／キーボードコントローラＩＣ（ＥＣ／ＫＢＣ）１２４は、ユーザによるパワーボタン１４の操作に応じて本サーバ１０をパワーオン／パワーオフする機能を有している。
【００３０】
電源回路としてのＡＣ／ＤＣコンバータ１２６は、交流電圧を直流電圧に変換する。変換された直流電圧は、電源回路としての電源コントローラ１２５に出力される。電源コントローラ１２５は、直流電圧を用いて本サーバ１０の各コンポーネントに供給すべきシステム電力を生成する。電源コントローラ１２５は電圧供給指示手段としてのＥＣ／ＫＢＣ１２４からの指示に応じて、本サーバ１０の各コンポーネントにシステム電力を供給する。
【００３１】
図３は、一般的な４台のＨＤＤでＲＡＩＤ５を組んだ場合のデータ・パリティ配置の例である。ＨＤＤ０〜ＨＤＤ３のそれぞれのハードディスクドライブは、ユーザエリアとＲＡＩＤ管理情報エリアに分けられる。ＲＡＩＤ管理情報エリアには、ＲＡＩＤアレイの構成情報やアレイに属するHDDの情報等が保存されている。ユーザエリアは、ストライプ（Ｓ0、Ｓ1、Ｓ2、Ｓ3、Ｓ4、‥、Ｓn、‥）という単位で管理されて、それぞれのストライプには、データＤsd（ｓはストライプ番号、ディスク番号）が３台のハードディスクドライブに分散されて格納されると共に、分散されたデータから生成されるパリティＰs（冗長コード）が１台のハードディスクドライブに格納される。パリティは他のハードディスクドライブに格納されているデータの排他的論理和を演算することで求められる。
【００３２】
上述したＲＡＩＤを組んでいる状態で、ＣＰＵ（ホスト）１１１からのライト命令によって、ストライプ１のハードディスクドライブ０のデータＤ10をＤ10'に更新する場合を考える。この時、ストライプ１のＨＤＤ０のデータＤ10をＤ10'に更新すると共に、ストライプ１のＨＤＤ２のパリティＰ1をＰ1'に更新する必要がある。通常の状態では問題がないが、１台のハードディスクドライブが故障している場合に、データＤ10'を書き込んだ後、且つパリティＰ1'を書き込む前にシステムがクラッシュすると、データとパリティの整合が取れない状況が発生する。
【００３３】
そこで、本ＲＡＩＤコントローラ１２１では、図４のフローチャートに示す手順でデータを書き換えることによって、書込みの途中でシステムの縮退時のデータ化けを防止する。図３のフローチャートに示す手順を以下に説明する。なお、図４に示すフローチャートは、ストライプ１のＨＤＤ０のデータＤ10をデータＤ10'に更新する例である。
【００３４】
先ず、ＨＤＤ０からストライプ１のデータＤ10、ＨＤＤ３からストライプ１のデータＤ13、ＨＤＤ２からストライプ１のパリティＰ1を読み込む（ステップＳ１１）。次いで、読み込んだデータＤ10、データＤ13、およびパリティＰ1から（１）式を用いて、故障しているＨＤＤ１に格納されているはずのデータＤ11を計算する（ステップＳ１２）。
【数４】
2009217719.tif 000006
【００３５】
次に、更新されるデータＤ10'に対応するパリティＰ1'を（２）式を用いて計算する（ステップＳ１３）。
【数５】
2009217719.tif 000007
【００３６】
次いで、パリティＰ1を読み込むことが出来ない状態にする（ステップＳ１４）。パリティＰ1を読み込むことが出来ないようにするために、例えば、パリティＰ1が書き込まれている各セクタのＥＣＣを破壊することで、メディアエラーを発生させることがあげられる。
【００３７】
次に、パリティＰ1が読み込めないようにした状態で、データＤ10'及び新しいパリティＰ1'をＨＤＤに書き込む（ステップＳ１５）。データＤ10'及び新しいパリティＰ1'を書き込んだ後、パリティＰ1'をリードできるように変更する（ステップＳ１６）。メディアエラーを発生させる方法の場合は、パリティＰ1'をライトした時点で、新たなＥＣＣが書き込まれるのでリード可能になるため、このステップは不要である。
【００３８】
このような方法を用いると、パリティＰ1を書き換える前にシステムがクラッシュした場合にデータＤ11をリードすると、パリティがリードできないため、リードエラーとなる。リードエラーとなることにより、ファイルシステム等の上位レベルでのデータリカバリを期待することができる。
【００３９】
なお、上述したようにパリティをリードできなくするのではなく、図５に示すようにＲＡＩＤ管理情報のパリティ書換中エリア情報０〜パリティ書換中エリア情報ｎに書き換え中のパリティに関するエリア情報、例えばストライプ番号を登録することにより、システムクラッシュ後に、書き換え中のデータがあったことを容易に検出できるようにしても良い。
【００４０】
ＲＡＩＤ管理情報に書き換え中のパリティに関する情報を登録する処理の手順について図６のフローチャートを参照して説明する。
【００４１】
先ず、ＨＤＤ０からデータＤ10、ＨＤＤ３からデータＤ13、ＨＤＤ２からパリティＰ1を読み込む（ステップＳ２１）。次いで、読み込んだデータＤ10、データＤ13、およびパリティＰ1から（３）式を用いて、故障しているＨＤＤ１に格納されているはずのデータＤ11を計算する（ステップＳ２２）。
【数６】
2009217719.tif 000008
【００４２】
次に、更新されるデータＤ10'に対応するパリティＰ1'を（４）式を用いて計算する（ステップＳ２３）。
【数７】
2009217719.tif 000009
【００４３】
次いで、パリティＰ1が格納されているＨＤＤ２のＲＡＩＤ管理情報のパリティ書換中エリア情報０〜パリティ書換中エリア情報ｎの何れかにストライプ番号を格納する（ステップＳ２４）。なお、パリティ書換中エリア情報への情報の書込みは、パリティＰ1が格納されておらず、且つ故障していないＨＤＤ０、ＨＤＤ３に格納しても良い。
【００４４】
データＤ10'及び新しいパリティＰ1'をＨＤＤにライトする（ステップＳ２５）。データＤ10'及び新しいパリティＰ1'を書き込んだ後、ＲＡＩＤ管理情報のパリティ書換中エリア情報０〜パリティ書換中エリア情報ｎの何れかに格納されたストライプ番号を削除する（ステップＳ２６）。
【００４５】
ＲＡＩＤ管理情報エリアに書き換え中のパリティに関する情報を登録することにより、システムクラッシュ後に、書き換え中のデータがあったことを容易に検出できるようにすることが可能となる。図４のフローチャートを参照して説明した方式では、書き換え中のデータがあったことが、実際にその場所をリードしてからでないと検出することができないが、本方式では簡単に検出でき、ユーザに通知することで、ファイルシステムのチェックプログラムを実行してもらう等の処置を促すことができる。
【００４６】
また、図７に示すように、データＤ10'および新たなパリティＰ'を書き込む前にＲＡＩＤ管理情報エリアのバックアップデータ０〜バックアップデータｎの何れかに、新たなパリティ、または新たなパリティを演算するために必要なデータを書き込んでおくと、パリティの書込みに失敗してもデータの修復も行うことが可能である。新たなパリティを演算するために必要なデータとしては、ステップＳ２２で演算された故障中のＨＤＤに格納されているデータＤ11である。また、書き込む処理は、図６のフローチャートに示すステップＳ２２の後、或いはステップＳ２４のパリティ書換中エリア情報に情報を書き込んだ後、或いは書き込んだ後に行う。なお、データＤ10'および新たなパリティＰ'の書込みに成功した場合は、ＲＡＩＤ管理情報エリアに書き込んだ新たなパリティ、または新たなパリティを演算するために必要なデータを削除する。
【００４７】
ＲＡＩＤ管理情報エリアにデータＤ11をＲＡＩＤ管理情報エリアに書き込み、ＨＤＤ１のユーザエリアにデータＤ10'を書き込んだ後、パリティＰ'の書込みに失敗した場合の修復方法について図８のフローチャートを参照して説明する。
【００４８】
先ず、パリティ書換中エリア情報ｉを取得する（ステップＳ３１）。パリティ書換中エリア情報から書込みを失敗したパリティＰ1'が属するストライプ番号のＨＤＤ０、ＨＤＤ３に格納されているデータＤ10'、Ｄ13およびＲＡＩＤ管理情報エリアのバックアップデータｉに格納されているデータＤ11を読み出す（ステップＳ３２）。データＤ10'、Ｄ11、Ｄ13からパリティＰ1'を演算する（ステップＳ３３）。演算されたパリティＰ1'をＨＤＤ２に書き込む（ステップＳ３４）。ＨＤＤ２のＲＡＩＤ管理情報エリアに格納されているパリティ書換中エリア情報iを削除する（ステップＳ３５）。
【００４９】
以上の処理で、パリティＰ1'の書込みに失敗した場合でも、ＲＡＩＤ管理情報エリアに格納されているデータを用いてパリティＰ1'を修復することが出来る。
【００５０】
［ＲＡＩＤ６］
以上、ＲＡＩＤ５の例について説明したが、上述した実施の形態はＲＡＩＤ６に適用することも出来る。以下にＲＡＩＤ６の場合について説明する。
【００５１】
図９に一般的な５台のＨＤＤを用いてＲＡＩＤ６を構成した場合のデータ・パリティ配置の例を示す。各ＨＤＤはユーザエリアとＲＡＩＤ管理情報エリアに分けられ、ＲＡＩＤ管理情報エリアには、ＲＡＩＤアレイの構成情報やアレイに属するＨＤＤの情報等が保存されている。
【００５２】
ストライプ０のデータＤ00〜Ｄ02に対応するパリティがＰ0及びＱ0、ストライプ１のＤ10〜Ｄ14に対応するパリティがＰ1及びＱ1、…である。ここで、例えばストライプｎのパリティＰnがＨＤＤ２に存在し、パリティＱnがＨＤＤ３に存在する場合、パリティＰnおよびパリティＱnは、以下の（５）式で計算できる。
【数８】
2009217719.tif 000010
【００５３】
また、例えばパリティＱnがＨＤＤ３に存在する場合、以下の（６）式で計算できる。
【数９】
2009217719.tif 000011
【００５４】
また、ＨＤＤ０のストライプ１のデータＤ10をＤ10'に更新する場合、（５）式及び（６）式の条件を満たすように、ストライプ１のパリティＰ1及びＱ1も新しいパリティＰ1'及びＱ1'に更新する必要がある。
【００５５】
ここで、ＨＤＤ１が故障している状態でのデータの書き換えを考える。ＨＤＤ０のストライプ１のデータＤ10をＤ10'に更新する場合、ＲＡＩＤ管理情報エリアにパリティ書換中エリア情報と共にバックアップデータを書き込んでおく例を図１０のフローチャートを参照して説明する。
【００５６】
先ず、ＨＤＤ０、ＨＤＤ２、ＨＤＤ３、およびＨＤＤ４のストライプ１に格納されているデータをそれぞれ読み出す（ステップＳ４１）。なお、本実施形態の場合、故障しているＨＤＤ１に格納されているＤ11を求められればよく、故障しているＨＤＤ１のストライプ１に格納されているデータはパリティＰ1，Ｑ１ではないので、パリティＰ1，Ｑ１の両方を読み出す必要はなく、パリティＰ1，Ｑ１の一方を読み出せばよい。つまり、このステップでは、ＨＤＤ０からデータＤ10、ＨＤＤ４からデータＤ14を読み出し、ＨＤＤ２からＰ1またはＨＤＤ３からＱ1を読み出す。
【００５７】
次に、故障しているＨＤＤ１のストライプ１に格納されているデータＤ11をステップＳ４１で読み出したデータから演算する（ステップＳ４２）。例えば、ステップＳ４１において、Ｄ10、Ｄ14、およびパリティＰ1を読み出した場合、（７）式からデータＤ11を演算する。
【数１０】
2009217719.tif 000012
【００５８】
次に、ストライプ１のパリティＰ1が格納されているＨＤＤ２のバックアップデータｉ及びストライプ１のパリティＱ1が格納されているＨＤＤ３のバックアップデータｊに、データＤ11を書き込む（ステップＳ４３）。バックアップデータｉ、ｊの物理アドレスは同じであってもよいし、異なっていてもよい。
【００５９】
さらに、新たなデータＤ10'、ステップＳ４１で読み出されたＤ13、およびステップＳ４２で演算されたデータＤ11と（８）、（９）式とを用いて、新しいパリティＰ1'、Ｑ1'をそれぞれ計算する（ステップＳ４４）。
【数１１】
2009217719.tif 000013
【００６０】
次に、ＨＤＤ２のパリティ書換中エリア情報ｉにストライプ１のストライプ番号（ストライプ１）を書き込み、ＨＤＤ３のパリティ書換中エリア情報ｊにストライプ１のパリティＱ１'をストライプ番号（ストライプ１）を書き込む（ステップＳ４５）。
【００６１】
ＨＤＤ０のストライプ１をデータＤ10'に更新すると共に、ＨＤＤ２のストライプ１にパリティＰ1'、ＨＤＤ３のストライプ１にパリティＱ1'をＨＤＤに書き込む（ステップＳ４６）。その後、ＨＤＤ２，３に書き込んだパリティ書換中エリアｉ，ｊ情報を削除する（ステップＳ４７）。
【００６２】
パリティ書換中エリア情報の削除は、すべてのデータの書き換えが終ってから実行してもよいが、パリティのＨＤＤ毎に独立して行うことも出来る。つまり、Ｄ10'及びＨＤＤ２のパリティＰ1'の書き込みが終ったら、Ｑ1'の書き込み完了を待たずにＨＤＤ２のパリティ書換中エリア情報ｉを削除し、Ｄ10'及びＨＤＤ３のパリティＱ1'の書き込みが終ったら、Ｐ1'の書き込み完了を待たずにＨＤＤ３のパリティ書換中エリア情報ｊを削除することが可能である。このようにすることで、処理効率を向上させることが出来る。
【００６３】
次に、上述した方法でデータを書き込んでいる最中に、パリティＰ1'の書込みに失敗した場合の修復方法について図１１のフローチャートを参照して説明する。
【００６４】
まず、パリティ書換中エリア情報を検索し、パリティ書換中エリア情報ｉに情報を見つけ、パリティ書換中エリア情報ｉを取得する（ステップＳ５１）。次に、パリティ書換中エリア情報ｉに対応するバックアップデータＤ11を読み込む。また、他のＨＤＤから対応するデータＤ10'、Ｄ14も読み込む（ステップＳ５２）。
【００６５】
ストライプ１のＨＤＤ２に書き込むべきパリティがパリティＰ1'であるかパリティＱ１'であるか否かを判別する（ステップＳ５３）。パリティがパリティＰ1'であるかパリティＱ１'であるかは、アドレスにより一意に決まるため、パリティ書換中エリア情報ｉに格納されているストライプ番号から判別できる。本実施形態の場合、パリティＰ1'であるため、データＤ10'、Ｄ14、およびバックアップデータＤ11からパリティＰ1'を演算し（ステップＳ５４）、演算されたパリティＰ1'を書き込む（ステップＳ５５）。最後に、パリティ書換中エリア情報ｉを削除する（ステップＳ５６）。なお、ステップＳ５３において、パリティＱであると判別された場合、データＤ10'、Ｄ14、およびバックアップデータＤ11からパリティＱ1'を演算し（ステップＳ６４）、演算されたパリティＱ1'を書き込む（ステップＳ６５）。
【００６６】
以上の処理で、パリティＰ1'の書込みに失敗した場合でも、ＲＡＩＤ管理情報エリアに格納されているデータを用いてパリティＰ1'を修復することが出来る。
【００６７】
上述した実施形態では、情報処理装置にＲＡＩＤシステムが組み込まれている例について説明したが、ＲＡＩＤコントローラとＨＤＤとを組み合わせたアレイ型記憶装置として提供することも出来る。この場合、情報処理装置とはＳＡＳ等のインタフェースで接続される。また、ＲＡＩＤコントローラの機能は、ソフトウェアで提供することも出来る。  
上記実施形態では、ストライプ単位でのデータ書き込みになっているが、ストライプの一部の書き込みで有っても良い。
【００６８】
なお、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成        要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組み合せてもよい。
【図面の簡単な説明】
【００６９】
【図１】本発明の第１の実施形態に係わる情報処理装置の構成を示す斜視図。
【図２】図１に示す情報処理装置のシステム構成を示すブロック図。
【図３】４台のＨＤＤでＲＡＩＤ５を組んだ場合のデータ・パリティ配置の例を示す図。
【図４】縮退時に正常なハードディスクドライブにデータを書き込む場合の処理の手順を示すフローチャート。
【図５】ＲＡＩＤ管理情報にパリティ書換中エリア情報を書き込んだ例を示す図。
【図６】ＲＡＩＤ管理情報に書き換え中のパリティに関する情報を登録する処理の手順にを示すフローチャート。
【図７】ＲＡＩＤ管理情報エリアのバックアップデータを書き込んだ例を示す図。
【図８】ＨＤＤ１のユーザエリアにデータＤ10'を書き込んだ後、パリティＰ'の書込みに失敗した場合の修復方法の手順を示すフローチャート。
【図９】５台のＨＤＤを用いてＲＡＩＤ６を構成した場合のデータ・パリティ配置の例を示す図。
【図１０】ＲＡＩＤ６の場合にＲＡＩＤ管理情報エリアにパリティ書換中エリア情報と共にバックアップデータを書き込んでおく手順を示すフローチャート。
【図１１】図１０に示した手順でのデータの書き込み時にパリティＰ1'の書込みに失敗した場合の修復方法の手順を示すフローチャート。
【符号の説明】
【００７０】
１０…アプライアンスサーバ，１１１…ＣＰＵ，１１３…主メモリ，１２１…ＲＡＩＤコントローラ，ＨＤＤ０〜ＨＤＤ５…ハードディスクドライブ。
【図１】
2009217719.tif 000014
【図２】
2009217719.tif 000015
【図３】
2009217719.tif 000016
【図４】
2009217719.tif 000017
【図５】
2009217719.tif 000018
【図６】
2009217719.tif 000019
【図７】
2009217719.tif 000020
【図８】
2009217719.tif 000021
【図９】
2009217719.tif 000022
【図１０】
2009217719.tif 000023
【図１１】
2009217719.tif 000024