(57)【特許請求の範囲】
【請求項１】
２台以上のハードディスクと、前記ハードディスクに対するデータの書き込みまたは読み出しを制御するアレイコントローラで構成されるディスクアレイ装置において、
前記アレイコントローラは、
不揮発性メモリとアドレス管理テーブルとを有しており、
前記ハードディスクに対するアクセスのないバックグラウンド動作で定期的に前記ハードディスクの書込みまたは読み出し動作の整合性チェックを行い、
前記ハードディスクのうちの１つのハードディスクに発生した書込みエラーにより不良と判断されたセクタのデータを、前記エラー発生のない他の正常なハードディスクにより再生し、
前記正常なハードディスクにより再生したデータを前記不揮発性メモリに退避させ、
前記不揮発性メモリに退避させたデータを前記アドレス管理テーブルにて管理し、
前記書込みエラーが発生した１つのハードディスクの交換または再構築時に、前記１つのハードディスク以外の他のハードディスクに読み出しエラーが発生していない場合には、前記他のハードディスクを用いて、前記書込みエラーが発生した１つのハードディスクを復旧させ、前記他のハードディスクに読み出しエラーが発生している場合には、前記他のハードディスクの読み出しを中止させ、前記読み出しを中止したデータについては、前記不揮発性メモリのデータを用いて前記書込みエラーが発生した１つのハードディスクを復旧させることを特徴とするディスクアレイ装置。
【請求項２】
請求項１に記載のディスクアレイ装置において、
前記アレイコントローラは、前記不揮発性メモリの各ブロックの使用回数を記録し、使用回数がしきい値を超えたブロックは保護ブロックとし、書込み制限を行うことを特徴とするディスクアレイ装置。
【請求項３】
請求項１に記載のディスクアレイ装置において、
前記アレイコントローラは、読み出し動作で前記ハードディスク内にエラーが発生した場合、
前記エラー発生のない前記正常なハードディスクにより再生したデータを前記エラー発生のあった前記ハードディスクに書き戻し、
前記書き戻す動作でエラーが発生したとき、前記不揮発性メモリにデータを退避させることを特徴とするディスクアレイ装置。
【請求項４】
請求項１に記載のディスクアレイ装置において、
前記不揮発性メモリには、退避データが記憶され、
前記アドレス管理テーブルには、エラー発生ハードディスクの識別番号と、エラー発生ハードディスク上のエラーデータの論理ブロックアドレスと、前記不揮発性メモリ上の前記退避データのアドレスとが記憶されることを特徴とするディスクアレイ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、２台以上のハードディスクに冗長性を持たせてデータの記録をするディスクアレイ装置に関する。
【背景技術】
【０００２】
現在、計算機システムには外部記憶装置としてハードディスクが多く使用されている。しかし、ハードディスクはその構造上エラーが発生する可能性がある。近年、ハードディスクの容量が増加し、故障発生の可能性はより高くなってきている。
【０００３】
そこで、重要なデータを保存する必要がある場合は、従来よりハードディスクの信頼性向上のために複数のハードディスクを用いるＲＡＩＤ（Redundant Arrays of Inexpensive Disks）システムが使用されている。
【０００４】
その１つとして、２台のハードディスクに同じデータを保存するＲＡＩＤ１システムがある。ＲＡＩＤ１システムは、ＲＡＩＤシステムの冗長レベルの一つであり、ミラーリングとも呼ばれる。２台のハードディスクにまったく同じデータを同時に書きこむ方式である。片方が破損しても、もう一方からデータを読み出せるのでシステムは問題無く稼動しつづけることができる。しかし、両方のハードディスクに同じデータを書き込むことになるため、実際に使用できる容量は本来のディスク容量の半分になる。
【０００５】
すなわち、ＲＡＩＤ１システムでは、アレイコントローラは、データ書込み時は両方のハードディスクにデータを書き込み、読込時は片方よりデータを読み出す。データ読出し時にエラーが発生した場合は、もう一方のハードディスクからデータを読み出す。
【０００６】
また、アレイコントローラは、もう一方のハードディスクに記憶されているデータにより、エラーが発生したハードディスクのデータを修復する機能を備えている。このように２台のハードディスクを使用することにより、使用できる記憶容量は減るものの、信頼性を向上させている。
【０００７】
しかし、ＲＡＩＤ１システムにおいてライトエラーが発生した場合、ハードディスクにハード的な故障が発生していると判断される。そして、その故障が発生したと判断されたハードディスクは計算機システムから物理的／論理的に切り離される。すなわち、アレイコントローラは、故障が発生しているハードディスクを切断し、そのハードディスクに記憶されている論理／物理変換テーブルを消去する。
【０００８】
そうなると、計算機システムは、故障が発生しているハードディスクを交換し、ＲＡＩＤ１システムの再構築をおこなうまでの間、１台のディスクのみで動くことになり、冗長性は失われる。
また、交換したハードディスクにより再構築を行う場合においても、コピー元の正常なハードディスクにリードエラーが発生し、再構築が不可となってしまう可能性がある。
【０００９】
このときの冗長性が失われる時間を削減するための手法として、ハードディスクの空き部分にハードディスクアレイを構築している他のハードディスクのバックアップデータを保存する方法が提案されている（特許文献１参照）。
【００１０】
また、ディスクアレイコントローラに不揮発性メモリを設け、セクタ障害が発生した際には一時的に不揮発性メモリに交替処理を行うディスクアレイ装置が提案されている（特許文献２参照）。
【特許文献１】特開２００６−１１３６４８号公報
【特許文献２】特開平１１−２４８４８号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
しかしながら、特許文献１に記載の技術では、ハードディスクの空き領域が少なくなると、データのバックアップ部分にデータを上書きしてしまうため、運用初期における冗長性の確保しかできない。
【００１２】
また、ハードディスク装置のもつ故障の可能性を減少することができないため、ハードディスクの故障によるデータ損失の危険は避けることができない。
【００１３】
また、特許文献２に記載の技術では、メモリに退避したデータと故障が発生しているハードディスクとの情報を管理する手段を設けていない。従って、メモリ上の退避データと故障が発生していないハードディスク上の正常データとの双方の使用ができない。
【００１４】
そこで、本発明は、ディスクアレイ装置においてライトエラー発生時に冗長性が失われることなく、再構築中にリードエラーが発生した場合に対する冗長性を保持及び向上させることを目的とするものである。
【課題を解決するための手段】
【００１５】
上記目的を達成するために、本発明のディスクアレイ装置は、２台以上のハードディスクと、ハードディスクに対するデータの書き込みまたは読み出しを制御するアレイコントローラとで構成される。そして、このディスクアレイ装置のアレイコントローラ上には、不揮発性メモリとアドレス管理テーブルとが設けられている。
【００１６】
ここで、ハードディスクに対するアクセスのないバックグラウンド動作で定期的に前記ハードディスクの書込みまたは読み出し動作の整合性チェックを行い、ハードディスクにおける書込みエラーが発生したセクタのデータを不良と判断し、この不良と判断されたデータを、エラー発生のない正常なハードディスクにより再生する。これにより、正常なハードディスクにより再生したデータを不揮発性メモリに退避させることができる。この不揮発性メモリに退避させたデータはアドレス管理テーブルによって管理される。そして、書込みエラーが発生した１つのハードディスクの交換または再構築時に、他のハードディスクに読み出しエラーが発生していない場合には、他のハードディスクを用いて、書込みエラーが発生した１つのハードディスクを復旧させ、他のハードディスクに読み出しエラーが発生している場合には、他のハードディスクの読み出しを中止させ、読み出しを中止したデータについては、不揮発性メモリのデータを用いて書込みエラーが発生した１つのハードディスクを復旧させる。
【００１７】
本発明のディスクアレイ装置によれば、ハードディスクだけでなく不揮発性メモリを有しているので、ライトエラーとなったセクタのデータを正常なハードディスクより読み取り、メモリに退避させることができ、これによりディスクアレイ装置の冗長性を保持することができる。
【００１８】
また、メモリに退避させたデータをアドレス管理テーブルにてセクタごとに管理することにより、最低限のメモリ容量でディスクアレイの冗長性を確保することができる。
また、再構築中にリードエラーが発生した場合に対する冗長性を保持及び向上させることができる。
【発明の効果】
【００１９】
本発明によれば、ディスクアレイ装置においてライトエラーの発生したデータを正常なハードディスクより読み取り、メモリに退避させることができるので、ライトエラー発生時に冗長性が失われることなく、要求されるディスクアレイ装置の冗長性を保持することができるという効果を奏する。
【００２０】
また、メモリに退避させたデータをセクタごとに管理することにより、ライトエラーの発生したデータの冗長性を失うことなく、ディスクアレイの冗長性の品質を向上させることができる。
また、再構築中にリードエラーが発生した場合に対する冗長性を保持及び向上させることができる。
【発明を実施するための最良の形態】
【００２１】
以下、本発明の一実施の形態例（以下、「本例」という。）を、図１〜１０を参照して説明する。
図１は、本例のディスクアレイ装置の構成例を示す図である。
図１に示されるように、本例のディスクアレイ装置は、ハードディスクＨＤＤ（hard disk drive）＃１（マスタ）と、ハードディスクＨＤＤ＃２（ミラー）と、アレイコントローラとから構成されている。
【００２２】
１は、ＲＡＩＤ１システムによるハードディスクＨＤＤ＃１（マスタ）、２は、ＲＡＩＤ１システムによるハードディスクＨＤＤ＃２（ミラー）を示している。図１に示される構成において、ハードディスクＨＤＤ＃１（マスタ）と同じデータが、ハードディスクＨＤＤ＃２（ミラー）に記録されている。
【００２３】
これらのハードディスクＨＤＤ＃１とハードディスクＨＤＤ＃２に対するデータの書き込みまたは読み出しは、アレイコントローラ３によって制御される。アレイコントローラ３には、不揮発性メモリ（フラッシュメモリ等）４が実装されている。
【００２４】
不揮発性メモリ４は、ハードディスクＨＤＤ＃１（マスタ）のセクタに書込みエラーが発生し、そのセクタが不良と判断された場合に、エラー発生のない正常なハードディスクＨＤＤ＃２（ミラー）に蓄積されたデータを、退避させるためのメモリである。逆に、ハードディスクＨＤＤ＃２（ミラー）のセクタに書込みエラーが発生し、そのセクタが不良と判断された場合にも、エラー発生のない正常なハードディスクＨＤＤ＃１（マスタ）に蓄積されたデータが不揮発性メモリ４に退避されるようになっている。
【００２５】
不揮発性メモリ４には、退避させたデータの不揮発性メモリ４上のアドレス１４と、退避させたデータの内容１５と、退避させた日時１６が記録されている。少なくとも、不揮発性メモリ４は、アドレス１４とデータの内容１５が記録されていればよく、退避させた日時１６は必須のものではない。このアレイコントローラ３は、ハードディスクＨＤＤ＃１（マスタ）と、ハードディスクＨＤＤ＃２（ミラー）の２台にてＲＡＩＤ１システム（ミラーリング）構成を構築する機能を有している。
【００２６】
また、アレイコントローラ３上には、アドレス管理テーブル５が用意されている。このアドレス管理テーブル５は、不揮発性メモリ４に退避させたデータのアドレスを、書込みエラーが発生したハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）の一方におけるセクタのデータのアドレスと関係づけて管理するテーブルである。
【００２７】
すなわち、アドレス管理テーブル５には、エラーが発生したハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）の識別番号（ＨＤＤＮｏ．）１１と、エラーが発生したハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）上のエラーデータの論理ブロックアドレスＬＢＡ（logical block address）１２と、不揮発性メモリ４上の退避データ１５のアドレス１３とが記憶されている。
【００２８】
このように、アドレス管理テーブル５には、まず、不良セクタが発生しているハードディスクの箇所が記憶される。そして、その不良セクタに対応するもう一方のハードディスクから取り出された正常データが退避された箇所、つまり不揮発性メモリ４に退避させたデータのアドレスが記録されていればよい。ここで、不良セクタが発生している箇所の記録には、ハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）内の全てのセクタに振り分けられた通し番号ＬＢＡ１２が使用される。
【００２９】
また、アレイコントローラ３は、図１には示されていないが、不揮発性メモリ４の各ブロックの使用回数を記録し、使用回数がしきい値を超えたブロックは保護ブロックとし、書込み制限を行うようにしている。また、アレイコントローラ３は、定期的にハードディスクＨＤＤ＃１（マスタ）と、ハードディスクＨＤＤ＃２（ミラー）のエラーチェックをバックグラウンド動作にて行うＢＣＣ（background sequential scan）機能を有している。
【００３０】
ここで、バックグラウンド動作とは、ハードディスクＨＤＤ＃１（マスタ）と、ハードディスクＨＤＤ＃２（ミラー）に対するホストからのアクセスがないときの動作を示している。
以下、ディスクアレイ装置におけるアレイコントローラ３の実行する動作について説明する。
【００３１】
図２は、ＲＡＩＤ１による動作を示すフローチャートである。
図２において、アレイコントローラ３は、ハードディスクＨＤＤ＃１（マスタ）、ハードディスクＨＤＤ＃２（ミラー）に対して、ホストからデータの書込み命令があるか否かを判断する（ステップＳ１）。
【００３２】
判断ステップＳ１で、ホストからのデータの書込み命令があるときは、アレイコントローラ３は、ハードディスクＨＤＤ＃１（マスタ）に、データの書込みを実行する（ステップＳ２）。ここで、アレイコントローラ３は、ＲＡＩＤ１システム（ミラーリング）構成を構築する機能を実現することになる。
【００３３】
すなわち、アレイコントローラ３は、ハードディスクＨＤＤ＃２（ミラー）上にハードディスクＨＤＤ＃１（マスタ）と同じデータの書込みを実行する（ステップＳ３）。なお、判断ステップＳ１で、データの書込み命令がないときは、処理を終了する。
このように、ハードディスクＨＤＤ＃１（マスタ）とハードディスクＨＤＤ＃２（ミラー）を設け、ＲＡＩＤ１システム（ミラーリング）構成を構築することにより、冗長性を保持したデータの記録を行うことができる。
【００３４】
図３は、バックグラウンド動作を示すフローチャートである。
図３において、アレイコントローラ３は、ハードディスクＨＤＤ＃１（マスタ）とハードディスクＨＤＤ＃２（ミラー）に対して、ホストからデータの書込みなどのアクセスがあるか否かを判断する（ステップＳ１１）。
【００３５】
判断ステップＳ１１で、アクセスがあるときは、アレイコントローラ３は、ハードディスクＨＤＤ＃１（マスタ）とハードディスクＨＤＤ＃２（ミラー）に、データの書込みなどのアクセス処理を実行する（ステップＳ１２）。
【００３６】
判断ステップＳ１１で、アクセスがないときは、アレイコントローラ３は、ハードディスクＨＤＤ＃１（マスタ）とハードディスクＨＤＤ＃２（ミラー）に対して、バックグラウンドでシーケンシャルにリード／ライト（読み出し及び書込み）動作を実行する（ステップＳ１３）。
【００３７】
すなわち、アレイコントローラ３は、ハードディスクＨＤＤ＃１（マスタ）の後に、ハードディスクＨＤＤ＃２（ミラー）を、連続して全周にわたって一定範囲ずつデータの読み出し及び書込みを行う。
【００３８】
バックグラウンド動作は、タイマ割り込みなどにより、定期的に実行され、定期的に終了される。続いて、アレイコントローラ３は、ハードディスクＨＤＤ＃１（マスタ）とハードディスクＨＤＤ＃２（ミラー）に対して、全周にわたってリード／ライト（読み出し及び書込み）動作が終了したか否かを判断する（ステップＳ１４）。
【００３９】
判断ステップＳ１４で、全周にわたってリード／ライト（読み出し及び書込み）動作が終了していないと判断されたときでも、つまり、バックグラウンド動作の途中であっても、ステップＳ１１でアクセス処理の割り込みがあった場合には、バックグラウンド動作は中断する。
【００４０】
そして、判断ステップＳ１１に戻って、ステップＳ１２でアクセス処理を実行した後に、ステップＳ１３でバックグラウンド動作を続行する。判断ステップＳ１４で、全周にわたってリード／ライト（読み出し及び書込み）動作が終了したら、処理を終了する。
【００４１】
図４は、書込み動作におけるメモリ書込みを示すフローチャートである。
図４において、アレイコントローラ３は、ハードディスクＨＤＤ＃１（マスタ）とハードディスクＨＤＤ＃２（ミラー）に対して、データの書込み処理を実行する（ステップＳ２１）。
【００４２】
すなわち、ホストからハードディスクＨＤＤ＃１（マスタ）とハードディスクＨＤＤ＃２（ミラー）にデータの書込み指示が発生した場合は、各々のハードディスクＨＤＤ＃１（マスタ）とハードディスクＨＤＤ＃２（ミラー）に同じデータの書込み処理を行う。
【００４３】
ここで、アレイコントローラ３は、データの書込み処理が正常に実行されたか否かを判断する（ステップＳ２２）。判断ステップＳ２２で、データの書込み処理が正常に実行されないと判断されたときは、アレイコントローラ３は、ＲＡＩＤ１システムにおいてライトエラーが発生し、ハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）にハード的な故障が発生していると判断する。そして、アレイコントローラ３が当該データのＬＢＡのセクタを不良セクタと判定する（ステップＳ２３）。
次に、アレイコントローラ３は、この書込み処理が正常に実行されないデータを不揮発性メモリ４の所定のアドレスに記録する（ステップＳ２４）。
【００４４】
そして、アレイコントローラ３は、データの書込みエラーが発生した不良ハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）の識別番号（ＨＤＤＮｏ．）、書込みエラーが発生したデータのＬＢＡ及び不揮発性メモリ４に記録したデータのアドレスを、アドレス管理テーブル５に記録する（ステップＳ２５）。
【００４５】
このようにして、ハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）へのデータの書込み処理が不可となった場合は、書き込みデータを、不揮発性メモリ４内の任意のアドレスに書き込むようにする。
これにより、記録データの冗長性を確保した上で、退避データのアドレスと不良ハードディスクの不良セクタとを対応つけて管理することができる。
【００４６】
判断ステップＳ２２で、データの書込み処理が正常に実行されたとき、ステップＳ２５で、データの書込みエラーが発生した不良ハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）の識別番号、書込みエラーが発生したデータのＬＢＡ及び不揮発性メモリ４に記録したデータのアドレスを、アドレス管理テーブル５に記録したとき、処理を終了する。
【００４７】
図５は、読出し動作におけるメモリ書込みを示すフローチャートである。
図５において、ディスクアレイコントローラ３は、アドレス管理テーブル５を確認して、不良セクタ情報があるか否かを判断する（ステップＳ３１）。
【００４８】
すなわち、ホストからハードディスクＨＤＤ＃１（マスタ）、ハードディスクＨＤＤ＃２（ミラー）に対してデータの読み出し指示が発生した場合は、ディスクアレイコントローラ３は、アドレス管理テーブル５を確認して、不良セクタの発生したハードディスクＨＤＤ＃１（マスタ）、ハードディスクＨＤＤ＃２（ミラー）の識別番号（ＨＤＤ  Ｎｏ）、不良セクタのＬＢＡ、データが書き込まれた不揮発性メモリ４のアドレスを読み出す。
【００４９】
判断ステップＳ３１で、不良セクタ情報があると判断されたときは、アレイコントローラ３は、不揮発性メモリ４内の当該データを読み出す（ステップＳ３２）。
【００５０】
ここで、読出し指示が発生した場合、アレイコントローラ３は、アドレス管理テーブル５上に読出指示のかかったセクタが有るか否かを確認する。アドレス管理テーブル５上に退避データ情報がある場合は、アレイコントローラ３は、アドレス管理テーブル５上に保存されている不揮発性メモリ４のアドレスに格納されているデータの読出しを行う。
【００５１】
判断ステップＳ３１で、不良セクタ情報がないと判断されたときは、アレイコントローラ３は、ハードディスクＨＤＤ＃１（マスタ）内のデータを読み出す（ステップＳ３３）。
ここで、アレイコントローラ３は、ハードディスクＨＤＤ＃１（マスタ）内のデータの読み出し処理が正常に実行されたか否かを判断する（ステップＳ３４）。
【００５２】
すなわち、判断ステップＳ３４で、データの読み出し処理が正常に実行されないとき、アレイコントローラ３は、ＲＡＩＤ１システムにおいてリードエラーが発生し、ハードディスクＨＤＤ＃１（マスタ）に読み出し故障が発生していると判断する。そして、アレイコントローラ３は、ハードディスクＨＤＤ＃２（ミラー）の内のデータを読み出す（ステップＳ３５）。
【００５３】
次に、アレイコントローラ３は、ハードディスクＨＤＤ＃２（ミラー）内のデータの読み出し処理が正常に実行されたか否かを判断する（ステップＳ３６）。
すなわち、判断ステップＳ３６で、データの読み出し処理が正常に実行されないとき、アレイコントローラ３は、ＲＡＩＤ１システムにおいてリードエラーが発生し、ハードディスクＨＤＤ＃２（ミラー）に読み出し故障が発生していると判断する。
【００５４】
このように、アレイコントローラ３は、アドレス管理テーブル５上に不良セクタデータ情報がない場合は、ハードディスクＨＤＤ＃１（マスタ）よりデータを読み出す。また、ハードディスクＨＤＤ＃１（マスタ）にて読み出しエラーが発生した場合は、ハードディスクＨＤＤ＃２（ミラー）よりデータを読み出す。
【００５５】
判断ステップＳ３６で、ハードディスクＨＤＤ＃２（ミラー）内のデータの読み出し処理が正常に実行されないとき、復旧不可能となる（ステップＳ３７）。
判断ステップＳ３６で、ハードディスクＨＤＤ＃２（ミラー）内のデータの読み出し処理が正常に実行されたとき、アレイコントローラ３は、ハードディスクＨＤＤ＃１（マスタ）にハードディスクＨＤＤ＃２（ミラー）のデータを書き戻す処理を実行する（ステップＳ３８）。
【００５６】
ここで、アレイコントローラ３は、ステップＳ３８のハードディスクＨＤＤ＃１（マスタ）にハードディスクＨＤＤ＃２（ミラー）のデータを書き戻す処理が正常に実行されたか否かを判断する（ステップＳ３９）。
【００５７】
すなわち、判断ステップＳ３９で、データの書き戻し処理が正常に実行されないとき、アレイコントローラ３は、ＲＡＩＤ１システムにおいてライトエラーが発生し、ハードディスクＨＤＤ＃１（マスタ）にハードウエア的な故障が発生していると判断する。
【００５８】
判断ステップＳ３９で、データの書き戻し処理が正常に実行されないとき、ディスクアレイコントローラ３は、当該データのＬＢＡのセクタを不良セクタとする（ステップＳ４０）。次に、アレイコントローラ３は、この書き戻し処理が正常に実行されないデータを不揮発性メモリ４の所定のアドレスに記録する（ステップＳ４１）。
【００５９】
そして、アレイコントローラ３は、データの書き戻しエラーが発生した不良ハードディスクＨＤＤ＃１（マスタ）の識別番号、書き戻しエラーが発生したデータのＬＢＡ及び不揮発性メモリ４に記録したデータのアドレスを、アドレス管理テーブル５に記録する（ステップＳ４２）。
【００６０】
すなわち、ハードディスクＨＤＤ＃２（ミラー）にて読み出しが完了した場合、ハードディスクＨＤＤ＃１（マスタ）にて読み出しエラーとなったセクタのデータをハードディスクＨＤＤ＃２（ミラー）のデータを用いて書き戻す。書き戻し処理にてエラーが発生した場合は、図４の書込み動作にて説明した書込み時でのメモリ書込みと同様に不揮発性メモリ４へとデータを退避させる。
【００６１】
判断ステップＳ３４で、ハードディスクＨＤＤ＃１（マスタ）のデータの読み出し処理が正常に実行されたとき、または、判断ステップＳ３９で、ハードディスクＨＤＤ＃１（マスタ）のデータの書き戻し処理が正常に実行されたときは処理を終了する。また、ステップＳ４２で、データの書き戻しエラーが発生した不良ハードディスクＨＤＤ＃１（マスタ）、ハードディスクＨＤＤ＃２（ミラー）の識別番号、書き戻しエラーが発生したデータのＬＢＡ及び不揮発性メモリ４に記録したデータのアドレスを、アドレス管理テーブル５に記録したときにも、処理を終了する。
【００６２】
図６は、バックグラウンド動作におけるメモリ書込みを示すフローチャートである。
図６において、アレイコントローラ３は、図３に示したバックグラウンド動作でリードエラー（読み出しエラー）が発生したか否かを判断する（ステップＳ５１）。
【００６３】
すなわち、判断ステップＳ５１で、データの読み出し処理が正常に実行されないとき、アレイコントローラ３は、ＲＡＩＤ１システムにおいてリードエラーが発生し、ハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）に読み出し故障が発生していると判断する。
【００６４】
判断ステップＳ５１で、バックグラウンド動作でリードエラー（読み出しエラー）が発生していないときは、アレイコントローラ３は、バックグラウンド動作でリード／ライト（読み出し及び書込み）動作を続行する（ステップＳ５２）。
【００６５】
判断ステップＳ５１で、バックグラウンド動作でリードエラー（読み出しエラー）が発生しているときは、アレイコントローラ３は、データの読み出し処理が正常に実行されないハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）に、他方のハードディスクＨＤＤ＃２（ミラー）またはハードディスクＨＤＤ＃１（マスタ）のデータを書き戻す（ステップＳ５３）。
【００６６】
次に、アレイコントローラ３は、ステップＳ５３の一方のハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）に、他方のハードディスクＨＤＤ＃２（ミラー）またはハードディスクＨＤＤ＃１（マスタ）のデータを書き戻す処理が正常に実行されたか否かを判断する（ステップＳ５４）。
【００６７】
すなわち、判断ステップＳ５４で、データの書き戻し処理が正常に実行されないとき、アレイコントローラ３は、ＲＡＩＤ１システムにおいてライトエラーが発生し、ハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）にハードウエア的な故障が発生していると判断する。
【００６８】
判断ステップＳ５４で、データの書き戻し処理が正常に実行されないとき、アレイコントローラ３は、当該データのＬＢＡのセクタを不良セクタとする（ステップＳ５５）。
次に、アレイコントローラ３は、この書き戻し処理が正常に実行されないデータを不揮発性メモリ４の所定のアドレスに記録する（ステップＳ５６）。
【００６９】
そして、アレイコントローラ３は、データの書き戻しエラーが発生した不良ハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）の識別番号、書き戻しエラーが発生したデータのＬＢＡ及び不揮発性メモリ４に記録したデータのアドレスを、アドレス管理テーブル５に記録する（ステップＳ５７）。
【００７０】
すなわち、バックグラウンド動作でリードエラー（読み出しエラー）が発生した場合、ハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）にて読み出しエラーとなったセクタのデータをハードディスクＨＤＤ＃２（ミラー）またはハードディスクＨＤＤ＃１（マスタ）のデータを用いて書き戻す。書き戻し処理にてエラーが発生した場合は、図４の書込み動作にて説明した書込み時でのメモリ書込みと同様に不揮発性メモリ４へとデータを退避させる。
【００７１】
判断ステップＳ５４で、ハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）のデータの書き戻し処理が正常に実行されたときは、処理を終了する。同様に、ステップＳ５７で、データの書き戻しエラーが発生した不良ハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）の識別番号、書き戻しエラーが発生したデータのＬＢＡ及び不揮発性メモリ４に記録したデータのアドレスを、アドレス管理テーブル５に記録したとき、処理を終了する。
【００７２】
このように、定期的なハードディスクＨＤＤ＃１（マスタ）及びハードディスクＨＤＤ＃２（ミラー）のメディアチェック指示が発生した場合、アレイコントローラ３は、各ディスクにてデータのエラーチェックを行う。
【００７３】
そこで、データの読み出しが不可であった場合は、アレイコントローラ３は、他方のディスク情報を用いて異常箇所の修復（他方ディスクのデータを書き戻す）を行う。ここで、書き戻し処理にてエラーが発生した場合は、図４の書込み動作にて説明した書込み時でのメモリ書込みと同様に不揮発性メモリ４へとデータを退避させる。
【００７４】
図７は、メモリ書込み動作を示すフローチャートである。
図７のメモリ書込み動作は、図４のステップＳ２４、図５のステップＳ４１、図６のステップＳ５６のメモリへの退避データの記録処理の詳細を示すものである。
【００７５】
図７において、アレイコントローラ３は、不揮発性メモリ４に対するデータ書込みがあるか否かを判断する（ステップＳ６１）。すなわち、アレイコントローラ３は、不揮発性メモリ４へとデータを退避させる書込みエラーによる退避データがあるか否かを判断する。
【００７６】
判断ステップＳ６１で、不揮発性メモリ４に対するデータ書込みがあるときは、アレイコントローラ３は、不揮発性メモリ４上の空き領域の先頭アドレスを検出する（ステップＳ６２）。
【００７７】
なお、アレイコントローラ３は、不揮発性メモリ４の各ブロックの使用回数を記録し、使用回数がしきい値を超えたブロックは保護ブロックとしているため、書込み制限を行っている領域は、除外される。
【００７８】
ここで、不揮発性メモリ４上の空き領域に限らず、次回書込み位置が予め決められているときは、この位置を検出する。
そこで、ディスクアレイコントローラ３は、ステップＳ６２で検出された先頭アドレスに退避データを書き込む（ステップＳ６３）。
【００７９】
図８は、メモリフルの動作を示すフローチャートである。
図８は、図７のメモリ書込み動作において、メモリフルの場合の処理の詳細を示すものである。
【００８０】
図８において、アレイコントローラ３は、不揮発性メモリ４に対するデータ書込みによりメモリフルとなるか否かを判断する（ステップＳ７１）。すなわち、アレイコントローラ３は、不揮発性メモリ４へとデータを退避させる退避データを書き込む空き領域があるか否かを判断する。
【００８１】
判断ステップＳ７１で、メモリフルのときは、アレイコントローラ３は、メモリフル情報を出力して、データ書込みエラーの発生しているハードディスクＨＤＤ＃２（ミラー）の交換をする（ステップＳ７２）。
【００８２】
すなわち、アレイコントローラ３は、図示しないアレイコントローラ３内のスイッチを用いてハードディスクＨＤＤ＃２（ミラー）との接続を切断して、予備のハードディスクＨＤＤ＃Ｘへの接続をする。
【００８３】
また、アレイコントローラ３は、ユーザに対して、メモリフル情報を図示しない表示部に出力して、データ書込みエラーの発生しているハードディスクＨＤＤ＃２（ミラー）の交換を促すことになる。
そして、ステップＳ７２で交換したハードディスクＨＤＤ＃２（ミラー）の不揮発性メモリ４の情報を消去する（ステップＳ７３）。
【００８４】
図９は、ＨＤＤ故障または再構築動作を示すフローチャートである。
図９は、図４の判断ステップＳ２２、図５の判断ステップＳ３９、図６の判断ステップＳ５４で、データの書込み処理が正常に実行されないときで、ハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）にハード的な故障が発生していると判断されたときの処理の詳細を示すものである。図９に示す動作は、オフライン時に実行される。
【００８５】
図９において、アレイコントローラ３は、一方のハードディスクＨＤＤ＃１（マスタ）  またはハードディスクＨＤＤ＃２（ミラー）が故障し、ハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）の交換または再構築作業が発生したか否かを判断する（ステップＳ８１）。
【００８６】
すなわち、アレイコントローラ３は、一方のハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）にデータ書込みエラーが発生しているため、ハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）の交換が必要か否かを判断する。
【００８７】
また、アレイコントローラ３は、ハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）の交換のため、ＲＡＩＤ１システム（ミラーリング）構成の再構築を実行するか否かを判断する。
【００８８】
判断ステップＳ８１で、一方のハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）が故障し、ハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）の交換または再構築作業が発生したとき、以下の処理を実行する。
【００８９】
すなわち、アレイコントローラ３は、他方のハードディスクＨＤＤ＃２（ミラー）またはハードディスクＨＤＤ＃１（マスタ）を用いて、一方のハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）を復旧させる（ステップＳ８２）。
【００９０】
ここで、他方のハードディスクＨＤＤ＃２（ミラー）またはハードディスクＨＤＤ＃１（マスタ）にないデータについては、アレイコントローラ３は、不揮発性メモリ４のデータを用いて一方のハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）を復旧させる（ステップＳ８３）。
これにより、ＲＡＩＤ１システム（ミラーリング）構成を再構築することができる。
【００９１】
図１０は、ＨＤＤ故障または再構築時のエラーデータ復旧動作を示すフローチャートである。図１０は、図９のステップＳ８２のエラーデータ復旧動作の詳細を示すものである。
【００９２】
図１０において、アレイコントローラ３は、他方のハードディスクＨＤＤ＃２（ミラー）またはハードディスクＨＤＤ＃１（マスタ）にデータ読み出しエラーが発生したか否かを判断する（ステップＳ９１）。
【００９３】
すなわち、アレイコントローラ３は、他方のハードディスクＨＤＤ＃２（ミラー）またはハードディスクＨＤＤ＃１（マスタ）にデータ読み出しエラーが発生しているため、正しいデータの読み出しができないか否かを判断する。
【００９４】
判断ステップＳ９１で、他方のハードディスクＨＤＤ＃２（ミラー）またはハードディスクＨＤＤ＃１（マスタ）にデータ読み出しエラーが発生したとき、以下の処理を実行する。
すなわち、アレイコントローラ３は、他方のハードディスクＨＤＤ＃２（ミラー）またはハードディスクＨＤＤ＃１（マスタ）のデータ読み出しを中止させる（ステップＳ９２）。
【００９５】
ここで、他方のハードディスクＨＤＤ＃２（ミラー）またはハードディスクＨＤＤ＃１（マスタ）のデータ読み出しを中止したデータについては、ディスクアレイコントローラ３は、不揮発性メモリ４のデータを用いて一方のハードディスクＨＤＤ＃１（マスタ）またはハードディスクＨＤＤ＃２（ミラー）を復旧させる（ステップＳ９３）。
【００９６】
図９に説明したように、アレイコントローラ３は、復旧時に交換したハードディスクに他方のハードディスクのデータをすべてコピーするが、図１０で示したように、アドレス管理テーブル５上に保存されているセクタのデータ（コピー元でエラーが発生しているデータ）は不揮発性メモリ４より読出し、交換後のハードディスクへ読み出したデータをと書き込む。
【００９７】
従って、上記の図６のバックグラウンド動作にて述べたハードディスクのチェックを定期的に行うことにより、すでにエラーデータを見つけて退避させているので、復旧時にコピー元のハードディスクのアドレス管理テーブル５に記憶されていない他のセクタでエラーが発生する可能性を減らすことができる。
【００９８】
本例では、アレイコントローラ３は、データ書込みエラー発生時にハードディスクの切り離しを行わず、データを正常なハードディスクから読込み、ディスク装置と比べて駆動部分が無くエラー発生確率の小さい不揮発性メモリ４に退避させるため、通常のディスクアレイ装置のように冗長性が失われないようにすることができる。
【００９９】
また、再構築を行う場合においても、通常運用時にバックグラウンドにてハードディスクをバックグラウンド動作にスキャンする機能を用いてハードディスクをチェックしておくことにより、再構築の際にコピー元でリードエラーが発生しても不揮発性メモリ４に保管されているデータにより補填することができるので、不完全な再構築となることを防ぐことができる。
【０１００】
上記構成によれば、従来のディスクアレイ装置に不揮発性メモリを追加することにより従来のディスクアレイ装置より冗長性が低下する期間を減らすことができるため、より信頼性の高いディスクアレイ装置を実現することができる。
従って、高い信頼性が要求されるＦＡ（Factory Automation）用途のコンピュータや重要なデータを保存する必要のある用途に使用されるコンピュータ等に適用することができる。
【０１０１】
なお、上述した本実施の形態例に限らず、本発明の要旨を逸脱しない限り、適宜変更しうることは言うまでもない。
【図面の簡単な説明】
【０１０２】
【図１】本発明の一実施の形態によるディスクアレイ装置の構成例を示す説明図である。
【図２】ＲＡＩＤ１による動作を示すフローチャートである。
【図３】バックグラウンド動作を示すフローチャートである。
【図４】書込み動作におけるメモリ書込みを示すフローチャートである。
【図５】読込み動作におけるメモリ書込みを示すフローチャートである。
【図６】バックグラウンド動作におけるメモリ書込みを示すフローチャートである。
【図７】メモリ書込み動作を示すフローチャートである。
【図８】メモリフルの動作を示すフローチャートである。
【図９】ＨＤＤ故障または再構築動作を示すフローチャートである。
【図１０】ＨＤＤ故障または再構築時のエラーデータ復旧動作を示すフローチャートである。
【符号の説明】
【０１０３】
１…ハードディスク（マスタ  ）、２…ハードディスク（ミラー）、３…アレイコントローラ、４…不揮発性メモリ、５…アドレス管理テーブル
【図１】
0004951493.tif 000002
【図２】
0004951493.tif 000003
【図３】
0004951493.tif 000004
【図４】
0004951493.tif 000005
【図５】
0004951493.tif 000006
【図６】
0004951493.tif 000007
【図７】
0004951493.tif 000008
【図８】
0004951493.tif 000009
【図９】
0004951493.tif 000010
【図１０】
0004951493.tif 000011