(57)【要約】【課題】再構築を行っている最中に不正なシステムダウンが発生しても、データコラプトの発生を抑制すること。【解決手段】複数台の記憶装置中の少なくとも１台の記憶装置が故障し、故障した記憶装置を新たな記憶装置に交換した場合に、故障していない記憶装置に対して再構築処理を実行する再構築モジュール２０４と、一定数のストライプの再構築処理を行う度に再構築処理が終了したストライプの位置情報を示す再構築完了ポイント情報２１２を不揮発性記憶装置に格納する再構築処理管理モジュール２０４と、不揮発性記憶装置に格納されている再構築完了ポイント情報２１２に対応するストライプと、再構築手段により現在再構築を行っているストライプとの間のストライプにライトアクセスする場合、交換していない記憶装置に対してデータを書き込んだ後に、交換された記憶装置に対してデータを書き込む書込モジュール２０１とを具備する。【選択図】    図６
2010128933.tif 000002
【特許請求の範囲】
【請求項１】
複数台の記憶装置をストライプ単位で管理し、前記複数台の記憶装置の同一ストライプの前記複数台の記憶装置の一部の記憶装置に格納されている分散データから生成される冗長コードを前記冗長コードの生成に用いたデータが格納されている記憶装置とは異なる１台以上の記憶装置に格納するアレイ型記憶装置であって、
前記複数台の記憶装置中の少なくとも１台の記憶装置が故障し、故障した記憶装置を新たな記憶装置に交換した場合に、故障していない記憶装置に格納されている分散データおよび／または冗長コードを用いて前記交換された記憶装置に分散データおよび／またはパリティをアドレスが下位のストライプから順に再構築処理を実行する再構築手段と、
前記再構築手段が一定数のストライプの再構築処理を行う度に再構築処理が終了したストライプの位置情報を示す完了位置情報を不揮発性記憶装置に格納する手段と、
前記不揮発性記憶装置に格納されている完了位置情報に対応するストライプと、前記再構築手段により現在再構築を行っているストライプとの間のストライプにライトアクセスする場合、前記交換していない記憶装置に対して分散データおよび／または冗長コードを書き込んだ後に、前記交換された記憶装置に対して分散データまたは冗長コードを書き込む手段とを具備することを特徴とするアレイ型記憶装置。
【請求項２】
前記不揮発性記憶装置に格納されている完了位置情報に対応するアドレス以下のストライプにライトアクセスする場合、複数の記憶装置の何れかに前記分散データを書込み、書き込まれる分散データが属するストライプ中の全分散データから生成される冗長コードを前記分散データを書き込んだ記憶装置とは異なる記憶装置に書き込む手段を更に具備することを特徴とする請求項１に記載のアレイ型記憶装置。
【請求項３】
前記不揮発性記憶装置に格納されている完了位置情報に対応するアドレス以下のストライプにライトアクセスする場合、交換されていない記憶装置に分散データおよび／または冗長コードを書き込む手段を更に具備することを特徴とする請求項１に記載のアレイ型記憶装置。
【請求項４】
不正なシステムダウンを検出する手段と、
前記検出手段が不正なシステムダウンを検出した場合に、前記完了ポイント情報に対応するストライプの後のストライプから前記再構築処理を行う旨を前記再構築手段に指示する手段とを具備することを特徴とする請求項１に記載のアレイ型記憶装置。
【請求項５】
複数台の記憶装置をストライプ単位で管理し、前記複数台の記憶装置の同一ストライプの前記複数台の記憶装置の一部の記憶装置に格納されている分散データから生成される冗長コードを前記冗長コードの生成に用いた分散データが格納されている記憶装置とは異なる１台以上の記憶装置に格納するアレイ型記憶装置の制御方法であって、
前記複数台の記憶装置中の少なくとも１台の記憶装置が故障し、故障した記憶装置を新たな記憶装置に交換した場合に、再構築手段を用いて故障していない記憶装置に格納されている分散データおよび／または冗長コードを用いて前記交換された記憶装置に分散データおよびパリティを再構築する再構築処理を実行し、
一定数のストライプの再構築処理を行う度に再構築処理が終了したストライプの位置を示す完了位置情報を不揮発性記憶装置に格納し、
前記不揮発性記憶装置に格納されている完了位置情報に対応するストライプと、前記再構築手段による再構築を行っているストライプとの間のストライプにライトアクセスする場合、前記交換していない記憶装置に対して分散データおよび／または冗長コードを書き込んだ後に、前記交換された記憶装置に対して分散データまたは冗長コードを書き込むことを特徴とするアレイ型記憶装置の制御方法。
【請求項６】
前記不揮発性記憶装置に格納されている完了位置情報に対応するアドレス以下のストライプにライトアクセスする場合、複数の記憶装置の何れかに前記分散データを書込み、書き込まれる分散データが属するストライプ中の全分散データから生成される冗長コードを前記分散データを書き込んだ記憶装置とは異なる記憶装置に書き込むことを特徴とする請求項５に記載のアレイ型記憶装置の制御方法。
【請求項７】
前記不揮発性記憶装置に格納されている完了位置情報に対応するアドレス以下のストライプにライトアクセスする場合、交換されていない記憶装置にデータおよび／または冗長コードを書き込む手段を更に具備することを特徴とする請求項５に記載のアレイ型記憶装置の制御方法。
【請求項８】
不正なシステムダウンを検出した場合に、前記完了位置情報に対応するストライプの後のストライプから前記再構築処理を行うことを具備することを特徴とする請求項５に記載のアレイ型記憶装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の記憶装置の一部の記憶装置が故障した場合に故障した記憶装置を新たな記憶装置に交換し、交換した記憶装置の再構築処理を行うアレイ型記憶装置およびアレイ型記憶装置の制御方法に関する。
【背景技術】
【０００２】
複数の記憶装置で構成されるアレイ型記憶装置では、ハードディスクドライブが故障しても、冗長性があるので故障したハードディスクドライブを置き換えた新たなハードディスクドライブにデータ等を再構築することができる。
【０００３】
記憶装置アレイシステムにおいて、再構築処理中の通常のライトリクエストに対して、リビルド対象のＨＤＤを含めた４台（全ＨＤＤ）に常に書込みを行う。
【特許文献１】特開平１０−１６１８１７号公報（要約、［００１０−００１１，００３４］）。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
通常、再構築は下位のアドレスからストライプ単位で行われる。そして、一定数のストライプの再構築が終了する度に、再構築が終了したストライプを示す再構築完了ポイント情報を不揮発性記憶装置に記録する。再構築完了ポイント情報の記録は一定数のストライプの再構築が終了する度に行われているので、再構築完了ポイント情報に記録されているストライプと実際に再構築が終了したストライプとが違う場合がある。
【０００５】
ところで、再構築完了ポイントが終了しているストライプにデータを書き込む場合、アレイを構成する記憶装置に同時にライトリクエストを発行する。しかし、同時に発行したリクエストが全て完了する前に不正なシステムダウンが発生した場合、リクエストを発行した対象のストライプのデータの状態が不定になってしまう。このままの状態で再構築を再開すると保存された再構築完了ポイントから行われる。再構築処理は常に正常であった記憶装置を参照し、交換された記憶装置に対して書き込みを行う。従って、不定なデータが正常であった記憶装置に残っていると，ターゲットのデータも不定になってしまい、データコラプトが発生する．
本発明の目的は、再構築を行っている最中に不正なシステムダウンが発生しても、データコラプトの発生を抑制することが可能なアレイ型記憶装置、およびアレイ型記憶装置の制御方法を提供することにある。
【課題を解決するための手段】
【０００６】
本発明の一例に係わるアレイ型記憶装置は、複数台の記憶装置をストライプ単位で管理し、前記複数台の記憶装置の同一ストライプの前記複数台の記憶装置の一部の記憶装置に格納されている分散データから生成される冗長コードを前記冗長コードの生成に用いた分散データが格納されている記憶装置とは異なる１台以上の記憶装置に格納するアレイ型記憶装置であって、前記複数台の記憶装置中の少なくとも１台の記憶装置が故障し、故障した記憶装置を新たな記憶装置に交換した場合に、故障していない記憶装置に格納されている分散データおよび冗長コードを用いて前記交換された記憶装置に分散データおよび／またはパリティをアドレスが下位のストライプから順に再構築処理を実行する再構築手段と、前記再構築手段が一定数のストライプの再構築処理を行う度に再構築処理が終了したストライプの位置情報を示す完了位置情報を不揮発性記憶装置に格納する手段と、前記不揮発性記憶装置に格納されている完了位置情報に対応するストライプと、前記再構築手段により現在再構築を行っているストライプとの間のストライプにライトアクセスする場合、前記交換していない記憶装置に対して分散データおよび／または冗長コードを書き込んだ後に、前記交換された記憶装置に対して分散データまたは冗長コードを書き込む手段とを具備することを特徴とする。
【発明の効果】
【０００７】
本発明によれば、再構築を行っている最中に不正なシステムダウンが発生しても、データコラプトの発生を抑制することが可能になる。
【発明を実施するための最良の形態】
【０００８】
本発明の実施の形態を以下に図面を参照して説明する。
【０００９】
まず、図１を参照して、本発明の一実施形態に係るＲＡＩＤシステムのシステム構成について説明する。
【００１０】
本サーバ１０は、図１に示されているように、ＣＰＵ１１１、ノースブリッジ１１２、主メモリ１１３、グラフィクスコントローラ１１４、サウスブリッジ１１９、ＢＩＯＳ−ＲＯＭ１２０、ハードディスクドライブ（ＨＤＤ）１２２Ａ〜１２２Ｃ、ＬＡＮコントローラ１２３、エンベデッドコントローラ／キーボードコントローラＩＣ（ＥＣ／ＫＢＣ）１２４、および電源コントローラ１２５等を備えている。
【００１１】
ＣＰＵ１１１は本サーバ１０の動作を制御するために設けられたプロセッサであり、ハードディスクドライブ（ＨＤＤ）１２２Ａ〜１２２Ｃから主メモリ１１３にロードされる、オペレーティングシステム（ＯＳ）および各種アプリケーションプログラムを実行する。ＯＳは、複数のウィンドウを表示画面上に表示するためのウィンドウシステムを有している。
【００１２】
また、ＣＰＵ１１１は、ＢＩＯＳ−ＲＯＭ１２０に格納されたシステムＢＩＯＳ（Basic Input Output System）も実行する。システムＢＩＯＳはハードウェア制御のためのプログラムである。
【００１３】
ノースブリッジ１１２はＣＰＵ１１１のローカルバスとサウスブリッジ１１９との間を接続するブリッジデバイスである。ノースブリッジ１１２には、主メモリ１１３をアクセス制御するメモリコントローラも内蔵されている。また、ノースブリッジ１１２は、ＡＧＰ（Accelerated Graphycs Port）バスなどを介してグラフィクスコントローラ１１４との通信を実行する機能も有している。
【００１４】
グラフィクスコントローラ１１４は、本サーバ１０のフロントディスプレイパネルとして使用されるＬＣＤ１７を制御する表示コントローラである。このグラフィクスコントローラ１１４はビデオメモリ（ＶＲＡＭ）を有しており、ＯＳ／アプリケーションプログラムによってビデオメモリに描画された表示データから、ＬＣＤ１７に表示すべき表示イメージを形成する映像信号を生成する。
【００１５】
サウスブリッジ１１９は、ＬＰＣ（Low Pin Count）バス上の各デバイスを制御する。また、サウスブリッジ１１９は、ＰＣＩ−Ｅｘｐｒｅｓｓ（ＰＣＩｅ）バスに接続されたデバイスと通信を行うためのＰＣＩｅコントローラを内蔵している。さらに、サウスブリッジ１１９は、ＢＩＯＳ−ＲＯＭ１２０をアクセス制御するための機能も有している。
【００１６】
ＰＣＩｅバスには、ディスクアレイコントローラ１２１が接続されている。ディスクアレイコントローラ１２１は、ＲＡＩＤ（Redundant Array Of Inexpensive Disks）機能を実現するためのコントローラである。ディスクアレイコントローラ１２１には、ハードディスクドライブ１２２Ａ〜１２２Ｃの３台のハードディスクドライブが接続されている。ディスクアレイコントローラ１２１は、３台のハードディスクドライブ１２２Ａ〜１２２Ｃへのデータの書込み、並びに３台のハードディスクドライブ１２２Ａ〜１２２Ｃからのデータの読み込みを制御する。ディスクアレイコントローラ１２１は、例えばＲＡＩＤ−５に対応している。
【００１７】
ＬＡＮコントローラ１２３は、本コンピュータをＬＡＮに接続するためのネットワークインターフェースである。
【００１８】
エンベデッドコントローラ／キーボードコントローラＩＣ（ＥＣ／ＫＢＣ）１２４は、電源制御、放熱制御のためのエンベデッドコントローラと、キーボード（ＫＢ）およびマウスを制御するためのキーボードコントローラとが集積された１チップマイクロコンピュータである。このエンベデッドコントローラ／キーボードコントローラＩＣ（ＥＣ／ＫＢＣ）１２４は、ユーザによるパワーボタン１４の操作に応じて本サーバ１０をパワーオン／パワーオフする機能を有している。
【００１９】
電源回路としてのＡＣ／ＤＣコンバータ１２６は、交流電圧を直流電圧に変換する。変換された直流電圧は、電源回路としての電源コントローラ１２５に出力される。電源コントローラ１２５は、直流電圧を用いて本サーバ１０の各コンポーネントに供給すべきシステム電力を生成する。電源コントローラ１２５は電圧供給指示手段としてのＥＣ／ＫＢＣ１２４からの指示に応じて、本サーバ１０の各コンポーネントにシステム電力を供給する。
【００２０】
図２は、一般的な３台のハードディスクドライブ１２２Ａ〜１２２ＣでＲＡＩＤ５を組んだ場合のデータ・パリティ配置の例である。ハードディスクドライブ１２２Ａ〜１２２Ｃのユーザエリアは、ストライプ（Ｓ1、Ｓ2、Ｓ3、Ｓ4、‥、Ｓn、‥）という単位で管理されて、それぞれのストライプには、分散データＤsd（ｓはストライプ番号、ディスク番号）が２台のハードディスクドライブに分散されて格納されると共に、分散データから生成されるパリティＰs（冗長コード）が１台のハードディスクドライブに格納される。パリティは他のハードディスクドライブに格納されている分散データの排他的論理和を演算することで求められる。
【００２１】
ところで、正常に３台のハードディスクドライブ１２２Ａ〜１２２Ｃで運用されている状態であったのが、図３に示すように１台のハードディスクドライブ１２２Ｃが故障して冗長性が失われた場合を考える。冗長性を回復するために、図４に示すように、ハードディスクドライブ１２２Ｃをハードディスクドライブ１２２Ｄに交換する。そして、冗長性の再構築を開始する。冗長性の再構築処理中、ある一定数のストライプの再構築が終了すると、終了したポイントの情報を不揮発性メモリや磁気記憶装置等の不揮発性記憶装置に保存する。
【００２２】
ところが、再構築完了ポイントは一定数のストライプの再構築が終了する度に更新されるので、図５に示すように、不揮発性記憶装置上に保存されている再構築完了ポイントの情報と現在時点の再構築完了ポイントは必ずしも一致しない。
【００２３】
この状態で、ストライプＳ3或いはストライプＳ4にライトアクセスする場合を考える。従来であれば、ハードディスクドライブ１２２Ａ，１２２Ｂ，１２２Ｄの３台のハードディスクドライブに同時にライトリクエストを発行する。しかし、同時に発行したリクエストが全て完了する前に不正なシステムダウンが発生した場合、リクエストを発行した対象のストライプのデータの状態が不定になってしまう。このままの状態で再構築を再開すると不揮発性記憶装置に保存された再構築完了ポイントから行われる。再構築処理は常に正常であった記憶装置を参照し、交換された記憶装置に対して書き込みを行う。従って、不定なデータが正常であった記憶装置に残っていると，ターゲットのデータも不定になってしまい、データコラプトが発生する。
【００２４】
本実施形態では、データコラプトの発生を抑制するように書込みを行う。先ず、データコラプトの発生を抑制するためのディスクアレイコントローラ１２１の構成を図６を参照して説明する。
【００２５】
ディスクアレイコントローラ１２１は、書込モジュール２０１、読出モジュール、再構築モジュール２０３、および再構築処理管理モジュール２０４等を備えている。
【００２６】
書込モジュール２０１は、オペレーティングシステムやアプリケーションソフトウェア等のホストから書込みを命じられたデータをハードディスクドライブ１２２Ａ，１２２Ｂ，１２２Ｄ中の２台のハードディスクドライブに書き込むと共に、分散されたデータから生成されるパリティＰs（冗長コード）を１台のハードディスクドライブに書き込む。
【００２７】
読出モジュール２０２は、オペレーティングシステムやアプリケーションソフトウェアからハードディスクドライブに書込みを命じられたデータを読み出す処理を実行する。
【００２８】
再構築モジュール２０３は、１台のハードディスクドライブに故障が発生した場合に、再構築処理を実行する。再構築処理とは、故障していないハードディスクドライブに格納されている分散データおよびパリティを用いて、故障した記憶装置に格納されていた情報を交換された記憶装置に再構築する処理のことである。また、再構築モジュール２０３は、アドレスが下位のストライプから順に再構築処理を実行し、一定数のストライプの再構築が終了する度に、再構築が終了した領域を示す再構築終了領域情報を発行する。再構築モジュール２０３は、再構築処理を開始すると再構築処理中であることを示す再構築処理情報２１１をイネーブルにする。そして、再構築処理が終了すると、再構築モジュール２０３は、再構築処理情報２１１をディスイネーブルにする。再構築処理が異常終了すると再構築処理情報２１１はイネーブルの状態なので、システムの起動時に再構築処理情報２１１を参照することで再構築処理が正常に終了したか異常終了したかを判別することができる。なお、再構築処理情報２１１は、揮発性メモリや磁気記憶装置等の不揮発性記憶装置に保存する。
【００２９】
また、再構築モジュール２０３は、現在再構築を行っているストライプ示す再構築中ストライプ情報を、ＤＲＡＭ等の揮発性メモリに記録する。揮発性メモリは、例えばディスクアレイコントローラ１２１内に設けられている。
【００３０】
再構築処理管理モジュール２０４は、再構築モジュール２０３が再構築終了領域情報を発行する度に、発行された再構築終了領域情報に基づいて再構築が終了した領域を示す再構築完了ポイント情報２１２を更新する。
【００３１】
次に、ディスクアレイコントローラ１２１のより詳細な構成を図７を参照して説明する。  
書込モジュール２０１は、再構築処理判別モジュール３０１、書込ストライプ判別モジュール３０２、第１書込処理実行モジュール３１１、第２書込処理実行モジュール３１２、および第３書込処理実行モジュール３１３等を備えている。
【００３２】
再構築処理判別モジュール３０１は、サウスブリッジ１１９がデータの書き込みを命令した場合、再構築処理情報２１１を参照し、現在再構築処理中であるか否かを判別する。再構築処理中ではないと判断した場合、再構築処理判別モジュール３０１は第１書込処理実行モジュール３１１にデータの書き込みを命令する。再構築処理中ではないと判断した場合、書込ストライプ判別モジュール３０２を呼び出す。
【００３３】
書込ストライプ判別モジュール３０２は、再構築完了ポイント情報２１２および再構築中ストライプ情報２１３を参照して、書込を命令されたストライプが再構築完了ポイント情報２１２に記録されているストライプのアドレス以下のストライプ、再構築完了ポイント情報２１２に記録されているストライプと現在再構築を行っているストライプとの間のストライプ、および再構築が完了していないストライプの何れのストライプであるかを判別する。
【００３４】
再構築完了ポイント情報２１２に記録されているストライプのアドレス以下のストライプであると判断した場合、書込ストライプ判別モジュール３０２は第１書込処理実行モジュール３１１にデータの書き込みを命令する。再構築完了ポイント情報２１２に記録されているストライプと現在再構築を行っているストライプとの間のストライプであると判断した場合、書込ストライプ判別モジュール３０２は、第２書込処理実行モジュール３１２にデータの書き込みを命令する。再構築が完了していないストライプであると判断した場合、書込ストライプ判別モジュール３０２は、第３書込処理実行モジュール３１３にデータの書き込みを命令する。
【００３５】
第１書込処理実行モジュール３１１は、正常な記憶装置でディスクアレイが構成されている場合と同様に、ハードディスクドライブ１２２Ａ、１２２Ｂ、１２２Ｄの全てにライトリクエストを同時に発行する。
【００３６】
第２書込処理実行モジュール３１２は、先ず交換されていないハードディスクドライブ１２２Ａ，１２２Ｂにライトリクエストを同時に発行する。そして、ハードディスクドライブ１２２Ａ、１２２Ｂに正常に処理を終えた場合に、第２書込処理実行モジュール３１２は、ハードディスクドライブ１２２Ｄにライトリクエストを発行する。
【００３７】
第３書込処理実行モジュール３１３は、交換されていないハードディスクドライブ１２２Ａ、１２２Ｂのみにライトリクエスト発行する。
【００３８】
次に、図８のフローチャートを参照して、ディスクアレイにデータを書き込む処理の手順を説明する。
【００３９】
先ず、再構築処理判別モジュール３０１は、再構築処理情報２１１を取得する（ステップＳ１１）。再構築処理情報２１１を参照し、再構築処理判別モジュール３０１は、イネーブルであるか否かを判別する（ステップＳ１２）。ステップＳ１２では再構築処理中であるか否かを判別している。再構築処理情報２１１がイネーブルであれば再構築処理中であり、再構築処理情報２１１がディスイネーブルであれば再構築処理中ではない。
【００４０】
イネーブルではないと判断した場合（ステップＳ１２のＮｏ）、再構築処理判別モジュール３０１は、第１書込処理実行モジュール３１１にデータの書き込みを命令する（ステップＳ１９）。
【００４１】
イネーブルであると判断した場合（ステップＳ１２のＹｅｓ）、書込ストライプ判別モジュール３０２を呼び出す。書込ストライプ判別モジュール３０２は再構築完了ポイント情報２１２を取得する（ステップＳ１３）。次に、書込ストライプ判別モジュール３０２は書込対象のアドレスが再構築完了ポイント情報２１２に記録されているアドレス以下であるか否かを判別する（ステップＳ１４）。つまり、このステップＳ１５では、データが書き込まれるアドレスが属するストライプが、既に再構築が完了しているか否かを判別する。書込対象のアドレスが再構築完了ポイント情報２１２の記録されているアドレス以下であれば、書込対象のアドレスは、既に再構築処理が完了したストライプに属する。書込対象のアドレスが再構築完了ポイント情報２１２の記録されているアドレス以下でなければ、書込対象のアドレスは、既に再構築処理が完了したストライプに属するかどうかは不明である。
【００４２】
ステップＳ１５においてアドレスが再構築完了ポイント情報２１２に記録されているアドレス以下であると判断した場合（ステップＳ１４のＹｅｓ）、書込ストライプ判別モジュール３０２は、第１書込処理実行モジュール３１１に書き込みを命令する（ステップＳ１８）。ステップＳ１４においてアドレスが再構築完了ポイント情報２１２に記録されているアドレス以下ではないと判断した場合（ステップＳ１４のＮｏ）、書込ストライプ判別モジュール３０２は再構築中ストライプ情報２１３を取得する（ステップＳ１５）。
【００４３】
書込ストライプ判別モジュール３０２は、書込対象のアドレスが再構築中ストライプ情報２１３に記録されているアドレスより以上であるか否かを判別する（ステップＳ１６）。ステップＳ１６では、書込対象のアドレスは再構築が完了していないストライプに属するか否かを判別している。書込対象のアドレスが再構築中ストライプ情報２１３に記録されているアドレスより以上であれば、書込対象のアドレスは再構築が完了していないストライプに属する。書込対象のアドレスが再構築中ストライプ情報２１３に記録されているアドレスより小さければ、書込対象のアドレスは再構築完了ポイント情報２１２に記録されているアドレスと再構築中ストライプ情報２１３に記録されているアドレスとの中間のアドレスである。つまり、書込対象のアドレスは再構築が完了しているストライプに属する。
【００４４】
ステップＳ１６において、書込対象のアドレスが再構築中ストライプ情報２１３に記録されているアドレスより以上であると判断した場合（ステップＳ１６のＹｅｓ）、書込ストライプ判別モジュール３０２は、第３書込処理実行モジュール３１３にデータの書き込みを命令する（ステップＳ１７）。書込対象のアドレスが再構築中ストライプ情報２１３に記録されているアドレスより以上ではないと判断した場合（ステップＳ１６のＮｏ）、書込ストライプ判別モジュール３０２は、第２書込処理実行モジュール３１２にデータの書き込みを命令する（ステップＳ１８）。
【００４５】
次に、第１書込処理実行モジュール３１１の書込処理を図９のフローチャートを参照して説明する。  
先ず、第１書込処理実行モジュール３１１は、書込対象のアドレスが属するストライプ中の分散データおよびパリティを読み出す（ステップＳ２１）。次に、第１書込処理実行モジュール３１１は、読み出した分散データおよびパリティに対してエラーチェックを行って、エラーの有無を判別する（ステップＳ２２）。
【００４６】
エラーがあると判断した場合（ステップＳ２２のＮｏ）、第１書込処理実行モジュール３１１は、異常処理を行う（ステップＳ２７）。エラーが無いと判断した場合（ステップＳ２２のＹｅｓ）、第１書込処理実行モジュール３１１は、新たに書き込まれる分散データで更新した状態でのパリティを計算する（ステップＳ２３）。次に、第１書込処理実行モジュール３１１は、全てのハードディスクドライブ１２２Ａ、１２２Ｂ、１２２Ｄに対してパリティおよび分散データの何れかを書き込む（ステップＳ２４）。
【００４７】
第１書込処理実行モジュール３１１は、読出モジュール２０２を用いて、分散データおよびパリティを書き込んだストライプ中のデータおよびパリティを読み出す（ステップＳ２５）。次に、第１書込処理実行モジュール３１１は、読み出した分散データおよびパリティに対してエラーチェックを行って、エラーの有無を判別する（ステップＳ２６）。エラーがあると判断した場合（ステップＳ２６のＮｏ）、第１書込処理実行モジュール３１１は、異常処理を行う（ステップＳ２７）。分散データおよびパリティにエラーが無いと判断した場合（ステップＳ２６のＹｅｓ）、第１書込処理実行モジュール３１１は、分散データおよびパリティを書き込んだストライプでの書込処理を終了する。
【００４８】
次に、第２書込処理実行モジュール３１２の書込処理を図１０のフローチャートを参照して説明する。  
先ず、第２書込処理実行モジュール３１２は、書込対象のアドレスが属するストライプ中のデータおよびパリティを読み出す（ステップＳ３１）。次に、第２書込処理実行モジュール３１２は、次に、第２書込処理実行モジュール３１２は、読み出した分散データおよびパリティに対してエラーチェックを行って、エラーの有無を判別する（ステップＳ３２）。
【００４９】
エラーがあると判断した場合（ステップＳ３２のＮｏ）、第２書込処理実行モジュール３１２は、異常処理を行う（ステップＳ４０）。エラーが無いと判断した場合（ステップＳ３２のＹｅｓ）、第２書込処理実行モジュール３１２は、新たに書き込まれるデータで更新した状態でのパリティを計算する（ステップＳ３３）。次に、第２書込処理実行モジュール３１２は、交換していない正常なハードディスクドライブ（ソースドライブ）１２２Ａ、１２２Ｂに対してパリティおよび／または分散データを書き込む（ステップＳ３４）。
【００５０】
第２書込処理実行モジュール３１２は、ソースドライブ１２２Ａ、１２２Ｂから書込対象のアドレスが属するストライプの分散データおよび／またはパリティを読み出す（ステップＳ３５）。次に、第２書込処理実行モジュール３１２は、読み出した分散データおよび／またはパリティに対してエラーチェックを行って、エラーの有無を判別する（ステップＳ３６）。
【００５１】
エラーがあると判断した場合（ステップＳ３６のＮｏ）、異常処理を行う（ステップＳ４０）。エラーがないと判断した場合（ステップＳ３６のＹｅｓ）、ハードディスクドライブ（ターゲットドライブ）１２２Ｄに分散データまたはパリティを書き込む（ステップＳ３７）。
【００５２】
第２書込処理実行モジュール３１２は、書込対象のアドレスが属するストライプの分散データおよびパリティを全ハードディスクドライブ１２２Ａ，１２２Ｂ，１２２Ｄから読み出す（ステップＳ３８）。次に、第２書込処理実行モジュール３１２は、読み出した分散データおよびパリティに対してエラーチェックを行って、エラーの有無を判別する（ステップＳ３９）。エラーがあると判断した場合（ステップＳ３９のＮｏ）、異常処理を行う（ステップＳ４０）。エラーが無いと判断した場合（ステップＳ３９のＹｅｓ）、分散データおよびパリティを書き込んだストライプでの書込処理を終了する。
【００５３】
次に、第３書込処理実行モジュール３１３の書込処理を図１１のフローチャートを参照して説明する。  
先ず、第３書込処理実行モジュール３１３は、交換していないハードディスクドライブ（ソースドライブ）１２２Ａ，１２２Ｂ中の書込対象のアドレスが属するストライプ中のデータおよびパリティを読み出す（ステップＳ５１）。次に、第３書込処理実行モジュール３１３は、次に、第３書込処理実行モジュール３１３は、読み出した分散データおよびパリティに対してエラーチェックを行って、エラーの有無を判別する（ステップＳ５２）。
【００５４】
エラーがあると判断した場合（ステップＳ５２のＮｏ）、第３書込処理実行モジュール３１３は、異常処理を行う（ステップＳ５７）。エラーが無いと判断した場合（ステップＳ５２のＹｅｓ）、第３書込処理実行モジュール３１３は、新たに書き込まれるデータで更新した状態でのパリティを計算する（ステップＳ５３）。次に、第３書込処理実行モジュール３１３は、ソースドライブ１２２Ａ、１２２Ｂに対してパリティおよび／または分散データを書き込む（ステップＳ５４）。
【００５５】
第３書込処理実行モジュール３１３は、ソースドライブ１２２Ａ、１２２Ｂから書込対象のアドレスが属するストライプの分散データおよび／またはパリティを読み出す（ステップＳ５５）。次に、第３書込処理実行モジュール３１３は、読み出した分散データおよび／またはパリティに対してエラーチェックを行って、エラーの有無を判別する（ステップＳ５６）。
【００５６】
エラーがあると判断した場合（ステップＳ５６のＮｏ）、異常処理を行う（ステップＳ５７）、分散データおよび／またはパリティを書き込んだストライプでの書込処理を終了する。
【００５７】
第２書込処理実行モジュール３１２が、上述した処理を行うことによって、ソースドライブ１２２Ａ，１２２Ｂに分散データおよび／またはパリティを書き込んだ後に、ターゲットドライブ１２２Ｄに分散データまたはパリティが書き込まれる。もし、ターゲットドライブ１２２Ｄにデータを書き込んでいる最中に不正なシステムダウンがあっても、ターゲットドライブ１２２Ｄに書き込まれているデータは異常であるが、ソースドライブ１２２Ａ，１２２Ｂには正常なデータが書き込まれている状態である。再度起動すると、再構築処理は再構築完了ポイント情報２１２に記録されているストライプから行われるので、ターゲットドライブ１２２Ｄの異常なデータはソースドライブ１２２Ａ，１２２Ｂ中のデータから正常なデータが書き込まれる。従って、データコラプトの発生を抑制することが可能になる。
【００５８】
なお、上述したＲＡＩＤはＲＡＩＤ−５であったが、ＲＡＩＤ−６の構成にも適用することができる。ＲＡＩＤ−６の場合、２台のハードディスクドライブが故障しても再構築処理を行うことができる。２台のハードディスクドライブが故障し、再構築処理中にライトアクセスを行う場合、交換されたターゲットドライブが２台になる。第２書込処理実行モジュール３１２は、一方のターゲットドライブに分散データおよび／またはパリティを書き込んだ後に、他方のターゲットドライブに分散データおよび／またはパリティを書き込む。ターゲットドライブに書き込む順番は一定であっても良いし、不定であっても良い。
【００５９】
なお、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組み合せてもよい。
【図面の簡単な説明】
【００６０】
【図１】本発明の一実施形態に係るＲＡＩＤシステムのシステム構成を示すブロック図。
【図２】３台のＨＤＤでＲＡＩＤ５を組んだ場合のデータ・パリティ配置の例を示す図。
【図３】図３に示す状態から１台のハードディスクドライブが故障した状態を示す図。
【図４】図４に示す状態から故障したハードディスクドライブを新たなハードディスクドライブに交換した状態を示す図。
【図５】図５において、不揮発性記憶装置上に保存されている再構築完了ポイントと現時点の再構築完了ポイントを示す図。
【図６】本発明の一実施形態に係わるディスクアレイコントローラの構成を示すブロック図。
【図７】本発明の一実施形態に係わるディスクアレイコントローラの構成を示すブロック図。
【図８】本発明の一実施形態に係わるディスクアレイにデータを書き込む処理の手順を示すフローチャート。
【図９】図７に示す第１書込処理実行モジュールによる書込処理の手順を示すフローチャート。
【図１０】図７に示す第２書込処理実行モジュールによる書込処理の手順を示すフローチャート。
【図１１】図７に示す第３書込処理実行モジュールによる書込処理の手順を示すフローチャート。
【符号の説明】
【００６１】
１１９…サウスブリッジ，１２１…ディスクアレイコントローラ，１２２Ａ〜１２２Ｄ…ハードディスクドライブ，２０１…書込モジュール，２０２…読出モジュール，２０３…再構築モジュール，２０４…再構築処理管理モジュール，２１１…再構築処理情報，２１２…再構築完了ポイント情報，２１３…再構築中ストライプ情報，３０１…再構築処理判別モジュール，３０２…書込ストライプ判別モジュール，３１１…第１書込処理実行モジュール，３１２…第２書込処理実行モジュール，３１３…第３書込処理実行モジュール。
【図１】
2010128933.tif 000003
【図２】
2010128933.tif 000004
【図３】
2010128933.tif 000005
【図４】
2010128933.tif 000006
【図５】
2010128933.tif 000007
【図６】
2010128933.tif 000008
【図７】
2010128933.tif 000009
【図８】
2010128933.tif 000010
【図９】
2010128933.tif 000011
【図１０】
2010128933.tif 000012
【図１１】
2010128933.tif 000013