(57)【要約】【課題】ディスクアレイのレベル変更処理や容量拡張処理時にメディアエラーが発生しても、レベル変更処理や容量拡張処理を中止せずに継続して実行可能にする。【解決手段】ディスクアレイコントローラ３０は、ディスクアレイ２０に記憶された複数のデータブロックを再配置してディスクアレイ２０の冗長レベルを変更する機能を有する。ディスクアレイコントローラ３０においては、再配置対象のデータブロックがディスクアレイ２０から読み出される。この読み出し時にはメディアエラーが発生したか否かが判別される。メディアエラーが発生した場合、再配置対象のデータブロックに対応する転送先位置に対して、当該転送先位置のリードアクセスに応答してメディアエラーの発生を引き起こすエラー情報が設定される。【選択図】      図１
2005293363.tif 000002
【特許請求の範囲】
【請求項１】
ディスクアレイに記憶された複数のデータブロックを再配置して前記ディスクアレイの冗長レベルを変更する機能を有するディスクアレイコントローラであって、
前記再配置対象のデータブロックを前記ディスクアレイから読み出す読出手段と、
前記読出手段により読み出される前記再配置対象のデータブロックにエラーが発生したか否かを判別する判別手段と、
前記判別手段により前記再配置対象のデータブロックに前記エラーが発生しなかったと判断された場合、前記読出手段により読み出された前記再配置対象のデータブロックを、当該再配置対象のデータブロックに対応する前記ディスクアレイ上の再配置先位置に書き込む手段と、
前記判別手段により前記再配置対象のデータブロックに前記エラーが発生しなかったと判断された場合、前記再配置対象のデータブロックに対応する前記再配置先位置に対して、当該再配置先位置の読み出しアクセスに応答してエラーの発生を引き起こすエラー情報を設定する手段とを具備することを特徴とするディスクアレイコントローラ。
【請求項２】
前記エラー情報を設定する手段は、前記再配置対象のデータブロックに対応する前記再配置先位置に、データおよび当該データとは無関係のエラー訂正コードを書き込む手段を含むことを特徴とする請求項１記載のディスクアレイコントローラ。
【請求項３】
前記エラー情報を設定する手段は、前記再配置対象のデータブロックに対応する前記再配置先位置を示す論理アドレス情報を不揮発性記憶部に記憶する手段を含み、
ホストからの読み出しアクセス要求で指定された論理アドレス情報が前記不揮発性記憶部に記憶されている場合、前記エラーを発生する手段をさらに具備することを特徴とする請求項１記載のディスクアレイコントローラ。
【請求項４】
ディスクアレイに記憶された複数のデータブロックを追加されたディスクドライブに再配置して前記ディスクアレイの記憶容量を拡張する機能を有するディスクアレイコントローラであって、
前記再配置対象のデータブロックを前記ディスクアレイから読み出す読出手段と、
前記読出手段により読み出される前記再配置対象のデータブロックにエラーが発生したか否かを判別する判別手段と、
前記判別手段により前記再配置対象のデータブロックに前記エラーが発生しなかったと判断された場合、前記読出手段により読み出された前記再配置対象のデータブロックを、当該再配置対象のデータブロックに対応する前記ディスクアレイ上の再配置先位置に書き込む手段と、
前記判別手段により前記再配置対象のデータブロックに前記エラーが発生しなかったと判断された場合、前記再配置対象のデータブロックに対応する前記再配置先位置に対して、当該再配置先位置の読み出しアクセスに応答してエラーの発生を引き起こすエラー情報を設定する手段とを具備することを特徴とするディスクアレイコントローラ。
【請求項５】
前記エラー情報を設定する手段は、前記再配置対象のデータブロックに対応する前記再配置先位置に、データおよび当該データとは無関係のエラー訂正コードを書き込む手段を含むことを特徴とする請求項４記載のディスクアレイコントローラ。
【請求項６】
前記エラー情報を設定する手段は、前記再配置対象のデータブロックに対応する前記再配置先位置を示す論理アドレス情報を不揮発性記憶部に記憶する手段を含み、
ホストからの読み出しアクセス要求で指定された論理アドレス情報が前記不揮発性記憶部に記憶されている場合、前記エラーを発生する手段をさらに具備することを特徴とする請求項４記載のディスクアレイコントローラ。
【請求項７】
ディスクアレイと、
前記ディスクアレイに記憶された複数のデータブロックを再配置して前記ディスクアレイの冗長レベルを変更する冗長レベル変更手段であって、前記再配置対象のデータブロックを前記ディスクアレイから読み出す読出手段と、前記読出手段により読み出される前記再配置対象のデータブロックにエラーが発生したか否かを判別する判別手段と、前記判別手段により前記再配置対象のデータブロックに前記エラーが発生しなかったと判断された場合、前記読出手段により読み出された前記再配置対象のデータブロックを、当該再配置対象のデータブロックに対応する前記ディスクアレイ上の再配置先位置に書き込む手段と、前記判別手段により前記再配置対象のデータブロックに前記エラーが発生しなかったと判断された場合、前記再配置対象のデータブロックに対応する前記再配置先位置に対して、当該再配置先位置の読み出しアクセスに応答してエラーの発生を引き起こすエラー情報を設定する手段とを含む冗長レベル変更手段とを具備することを特徴とする情報処理装置。
【請求項８】
前記エラー情報を設定する手段は、前記再配置対象のデータブロックに対応する前記再配置先位置に、データおよび当該データとは無関係のエラー訂正コードを書き込む手段を含むことを特徴とする請求項７記載の情報処理装置。
【請求項９】
前記エラー情報を設定する手段は、前記再配置対象のデータブロックに対応する前記再配置先位置を示す論理アドレス情報を不揮発性記憶部に記憶する手段を含み、
プログラムからの読み出しアクセス要求で指定された論理アドレス情報が前記不揮発性記憶部に記憶されている場合、前記エラーを発生する手段をさらに具備することを特徴とする請求項７記載の情報処理装置。
【請求項１０】
ディスクアレイと、
前記ディスクアレイに記憶された複数のデータブロックを追加されたディスクドライブに再配置して前記ディスクアレイの記憶容量を拡張する容量拡張手段であって、前記再配置対象のデータブロックを前記ディスクアレイから読み出す読出手段と、前記読出手段により読み出される前記再配置対象のデータブロックにエラーが発生したか否かを判別する判別手段と、前記判別手段により前記再配置対象のデータブロックに前記エラーが発生しなかったと判断された場合、前記読出手段により読み出された前記再配置対象のデータブロックを、当該再配置対象のデータブロックに対応する前記ディスクアレイ上の再配置先位置に書き込む手段と、前記判別手段により前記再配置対象のデータブロックに前記エラーが発生しなかったと判断された場合、前記再配置対象のデータブロックに対応する前記再配置先位置に対して、当該再配置先位置の読み出しアクセスに応答してエラーの発生を引き起こすエラー情報を設定する手段とを含む容量拡張手段とを具備することを特徴とする情報処理装置。
【請求項１１】
前記エラー情報を設定する手段は、前記再配置対象のデータブロックに対応する前記再配置先位置に、データおよび当該データとは無関係のエラー訂正コードを書き込む手段を含むことを特徴とする請求項１０記載の情報処理装置。
【請求項１２】
前記エラー情報を設定する手段は、前記再配置対象のデータブロックに対応する前記再配置先位置を示す論理アドレス情報を不揮発性記憶部に記憶する手段を含み、
プログラムからの読み出しアクセス要求で指定された論理アドレス情報が前記不揮発性記憶部に記憶されている場合、前記メディアエラーを発生する手段をさらに具備することを特徴とする請求項１０記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＲＡＩＤ（Redundant Array of Inexpensive Disks、またはRedundant Array of Independent Disks）のような冗長化されたディスクアレイを制御するディスクアレイコントローラおよび情報処理装置に関する。
【背景技術】
【０００２】
近年、サーバコンピュータ、パーソナルコンピュータのような情報処理装置においては、ディスクアクセス速度の向上、記憶データの保護を図るために、ＲＡＩＤのような冗長化されたディスクアレイが利用されている。ＲＡＩＤにおいては、たとえばＲＡＩＤ０、ＲＡＩＤ１、ＲＡＩＤ５のような幾つかの冗長レベル（ＲＡＩＤレベル）が定義されている。
【０００３】
ＲＡＩＤコントローラの多くは、障害が発生したディスクアレイを障害発生前の状態に復元するためのリビルド（Rebuild）機能を有している。このリビルド機能は、障害が発生したディスクドライブに記憶されていたデータの内容を、他のディスクドライブに記憶されているデータの内容を用いて復元する機能である。特許文献１には、リビルド機能を有するディスク制御装置が開示されている。
【特許文献１】特開平１０−４００２２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
また最近のＲＡＩＤコントローラにおいては、リビルド機能のような障害対策用機能のみならず、ディスクアレイの冗長レベル（ＲＡＩＤレベル）の変更や記憶容量の拡張を行うための機能の実現が必要とされている。
【０００５】
ディスクアレイの冗長レベル（ＲＡＩＤレベル）を変更するレベル変更処理や、記憶容量を拡張する容量拡張処理を行うためには、ディスクアレイに記憶されているデータブロック群を再配置することが必要である。
【０００６】
しかし、もし再配置対象のいずれかのデータブロックが記憶されているディスクアレイ上の記憶位置にメディアエラーがあると、レベル変更処理や、容量拡張処理は、実行することが出来ない。ここで、メディアエラーとは、リードリトライを所定回数繰り返してもデータをディスクドライブから正常にリードできないエラーを意味する。
【０００７】
このようなエラーのある記憶位置からは再配置対象のデータブロックを読み出すことができないので、その再配置対象のデータブロックを移動すべき転送先位置におけるデータの内容を保証することができなくなる。したがって、レベル変更処理や、容量拡張処理においては、もし再配置対象のデータブロックの読み出し時にエラーの発生が検出されると、その時点で処理を中止することが必要となる。もし中止しなければ、レベル変更後や容量拡張後において、データブロックを移動できなかった転送先位置がホストからリード要求された場合に、ディスクアレイから誤った値のデータがホストに転送されてしまう危険があるためである。
【０００８】
本発明は上記事情を考慮してなされたものであり、レベル変更処理や容量拡張処理中にメディアエラーのようなエラーが発生しても、レベル変更処理や容量拡張処理を中止せずに継続して実行することが可能なディスクアレイコントローラおよび情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述の課題を解決するため、本発明は、ディスクアレイに記憶された複数のデータブロックを再配置して前記ディスクアレイの冗長レベルを変更する機能を有するディスクアレイコントローラであって、前記再配置対象のデータブロックを前記ディスクアレイから読み出す読出手段と、前記読出手段により読み出される前記再配置対象のデータブロックにエラーが発生したか否かを判別する判別手段と、前記判別手段により前記再配置対象のデータブロックに前記エラーが発生しなかったと判断された場合、前記読出手段により読み出された前記再配置対象のデータブロックを、当該再配置対象のデータブロックに対応する前記ディスクアレイ上の再配置先位置に書き込む手段と、前記判別手段により前記再配置対象のデータブロックに前記エラーが発生しなかったと判断された場合、前記再配置対象のデータブロックに対応する前記再配置先位置に対して、当該再配置先位置の読み出しアクセスに応答してエラーの発生を引き起こすエラー情報を設定する手段とを具備することを特徴とする。
【００１０】
また、本発明は、ディスクアレイに記憶された複数のデータブロックをストライプユニット単位で、追加されたディスクドライブに再配置して前記ディスクアレイの記憶容量を拡張する機能を有するディスクアレイコントローラであって、前記再配置対象のデータブロックを前記ディスクアレイから読み出す読出手段と、前記読出手段により読み出される前記再配置対象のデータブロックにエラーが発生したか否かを判別する判別手段と、前記判別手段により前記再配置対象のデータブロックに前記エラーが発生しなかったと判断された場合、前記読出手段により読み出された前記再配置対象のデータブロックを、当該再配置対象のデータブロックに対応する前記ディスクアレイ上の再配置先位置に書き込む手段と、前記判別手段により前記再配置対象のデータブロックに前記エラーが発生しなかったと判断された場合、前記再配置対象のデータブロックに対応する前記再配置先位置に対して、当該再配置先位置の読み出しアクセスに応答してエラーの発生を引き起こすエラー情報を設定する手段とを具備することを特徴とする。
【発明の効果】
【００１１】
本発明によれば、レベル変更処理や容量拡張処理中にメディアエラーのようなエラーが発生しても、レベル変更処理や容量拡張処理を中止せずに継続して実行することが可能となる。
【発明を実施するための最良の形態】
【００１２】
以下、図面を参照して本発明の実施形態を説明する。  
［第１の実施形態］
図１には、本発明の第１実施形態に係る情報処理装置の構成が示されている。この情報処理装置は、例えばサーバコンピュータとして実現されている。この情報処理装置は、オペレーティングシステムおよび各種アプリケーションプログラムを実行するホスト（ホストコンピュータ）１０と、このホスト１０の外部記憶装置として用いられるディスクアレイ２０と、ディスクアレイコントローラ３０とから構成される。
【００１３】
ディスクアレイ２０は冗長化されたディスクアレイであり、情報処理装置に搭載される複数台のディスクドライブ（ＨＤＤ：ハードディスクドライブ）２１を用いて実現されている。ディスクアレイコントローラ３０はホスト１０からのディスクアクセス要求に応じてディスクアレイ２０を制御する。このディスクアレイコントローラ３０は、ディスクアレイ２０をＲＡＩＤとして動作させるためのディスク制御動作を実行する。
【００１４】
ディスクアレイコントローラ３０は、例えば、ＲＡＩＤ０（ストライピング）、ＲＡＩＤ１（ミラーリング）、ＲＡＩＤ５（分散データガーディング）のような複数種の冗長レベル（ＲＡＩＤレベル）をサポートしている。
【００１５】
ディスクアレイコントローラ３０は、図示のように、制御プロセッサ３１、ＲＡＭ３２、不揮発性メモリ３３、およびディスクコントローラ３４を備えている。これら制御プロセッサ３１、ＲＡＭ３２、不揮発性メモリ３３、およびディスクコントローラ３４は、バス３５に接続されている。
【００１６】
制御プロセッサ３１は、不揮発性メモリ３３からＲＡＭ３２にロードされるプログラム（ファームウェア）を実行する。このファームウェアにより、制御プロセッサ３１には、機能実行モジュールとして、図示のように、冗長レベル変更部１０１、容量拡張部１０２、メディアエラー検出部１０３、およびエラーデータライト部１０４が実現されている。
【００１７】
冗長レベル変更部１０１は、ディスクアレイ２０の冗長レベル（ＲＡＩＤレベル）を変更するための冗長レベル変更処理を実行する。この冗長レベル変更処理は、情報処理装置の稼働中に実行することができる。冗長レベル変更処理においては、ディスクアレイ２０の現在の冗長レベルとディスクアレイ２０の変更後の冗長レベルとの関係に基づいて、ディスクアレイ２０に記憶された複数のデータブロックを再配置する処理が行われる。再配置は、再配置対象のデータブロックをディスクアレイ２０からリードして転送先にコピーすることによって実行される。このレベル変更処理により、ディスクアレイ２０のＲＡＩＤレベルを、例えば、ＲＡＩＤ０からＲＡＩＤ１に、あるいはＲＡＩＤ０からＲＡＩＤ５に、変更することが出来る。
【００１８】
容量拡張部１０２は、ディスクアレイ２０の冗長レベルを変更することなく、追加されたディスクドライブを利用することによってディスクアレイ２０の記憶容量を拡張するための容量拡張処理を実行する。この容量拡張処理も、情報処理装置の稼働中に実行することができる。容量拡張処理においては、ディスクアレイ２０の現在の冗長レベルと追加されたディスクドライブの台数とに基づいて、ディスクアレイ２０に既に記憶されている複数のデータブロックをストライプユニット単位で、追加されたディスクドライブに再配置する処理が行われる。再配置は、再配置対象のデータブロックをディスクアレイ２０からリードして転送先にコピーすることによって実行される。
【００１９】
メディアエラー検出部１０３は再配置対象のデータブロックのリード時に、メディアエラーが発生したかどうかを判別する。エラーデータライト部１０４は、メディアエラーの発生が検出された時、再配置対象のデータブロックの再配置先位置（以下、転送先位置という）に対して、エラー情報を設定する。このエラー情報は、当該転送先位置がリードアクセスされた時にメディアエラーの発生を引き起こすための情報（エラーデータ）である。具体的には、エラーデータライト部１０４は、データとそのデータとは無関係のエラー訂正コード（ＥＣＣ）とをエラーデータとして転送先位置にライトする。これにより、転送先位置がリードアクセスされるたびに、メディアエラーが発生することになる。よって、正常にデータ再配置を行うことができなかった転送先位置がホスト１０によってリードアクセスされても、誤ったデータがホスト１０に転送されることを防止することができる。
【００２０】
エラーデータライト部１０４は、エラーデータを書き込むために、ライトロングコマンド（Write Long Command）をＨＤＤに発行する。ライトロングコマンドは、エラー訂正符号を含むライトデータをそのまま書き込むことをＨＤＤに指示するコマンドである。通常、ＨＤＤは、ＥＣＣ生成器によってライトデータからＥＣＣを生成し、そのライトデータとＥＣＣとをライトコマンドで指定された位置に書き込む。一方、ライトロングコマンドを受けた場合、ＨＤＤのＥＣＣ生成器の動作が抑止される。これにより、データとそのデータとは無関係のＥＣＣとを含むエラーデータを書き込むことができる。
【００２１】
ディスクコントローラ３４は、制御プロセッサ３１の制御の下に、ディスクアレイ２０を構成する各ＨＤＤを制御する。このディスクコントローラ３４は、例えばＩＤＥまたはＳＣＳＩインタフェースを介して各ＨＤＤを制御する。
【００２２】
次に、冗長レベル変更動作の例について説明する。
【００２３】
図２は、２台のＨＤＤ（ＨＤＤ＃０，ＨＤＤ＃１）から構成されたＲＡＩＤ０のディスクアレイを示している。２台のＨＤＤ（ＨＤＤ＃０，ＨＤＤ＃１）に跨って、複数のストライプＳ１，Ｓ２，Ｓ３が配置される。
【００２４】
各ストライプは、ＨＤＤ＃０上のストライプユニットと、ＨＤＤ＃１上のストライプユニットとから構成される。各ストライプユニットは、１以上のデータブロックを含む。図２では、各ストライプユニットに含まれるデータブロックが一つである場合を示している。ストライプＳ１は、ＨＤＤ＃０上に配置された論理ブロックアドレスＬＢＡ＝０のデータブロックと、ＨＤＤ＃１上に配置された論理ブロックアドレスＬＢＡ＝１のデータブロックとを含む。同様に、ストライプＳ２は、ＨＤＤ＃０上に配置された論理ブロックアドレスＬＢＡ＝２のデータブロックと、ＨＤＤ＃１上に配置された論理ブロックアドレスＬＢＡ＝３のデータブロックとを含み、ストライプＳ３は、ＨＤＤ＃０上に配置された論理ブロックアドレスＬＢＡ＝４のデータブロックと、ＨＤＤ＃１上に配置された論理ブロックアドレスＬＢＡ＝５のデータブロックとを含む。
【００２５】
なお、ストライプのことをストライプグループと称し、ストライプユニットのことをストライプと称することもある。
【００２６】
図３は、図２のＲＡＩＤ０のディスクアレイに１台のＨＤＤ（ＨＤＤ＃２）を追加し、３台のＨＤＤ（ＨＤＤ＃０，ＨＤＤ＃１，ＨＤＤ＃２）によってＲＡＩＤ５のディスクアレイを構成した例を示している。
【００２７】
図２のディスクアレイに記憶されていた論理ブロックアドレス０−５それぞれに対応するデータブロック群を図３のように３台のＨＤＤ（ＨＤＤ＃０，ＨＤＤ＃１，ＨＤＤ＃２）に再配置することにより、ＲＡＩＤレベルをＲＡＩＤ０からＲＡＩＤ５に変更することができる。
【００２８】
図３中、記号Ｐは、発生した障害を修復するための情報（パリティ）を示している。ストライプＳ１１は、ＨＤＤ＃０上に配置された論理ブロックアドレスＬＢＡ＝０のデータブロックと、ＨＤＤ＃１に配置された論理ブロックアドレスＬＢＡ＝１のデータブロックと、ＨＤＤ＃２上に配置されたパリティとを含む。ストライプＳ１１のパリティは、そのストライプＳ１１の２つのデータブロックから生成される。ストライプＳ１２は、ＨＤＤ＃０上に配置された論理ブロックアドレスＬＢＡ＝２のデータブロックと、ＨＤＤ＃１に配置されたパリティと、ＨＤＤ＃２上に配置された論理ブロックアドレスＬＢＡ＝３のデータブロックとを含む。ストライプＳ１２のパリティは、そのストライプＳ１２の２つのデータブロックから生成される。ストライプＳ１３は、ＨＤＤ＃０上に配置されたパリティと、ＨＤＤ＃１に配置された論理ブロックアドレスＬＢＡ＝４のデータブロックと、ＨＤＤ＃２上に配置された論理ブロックアドレスＬＢＡ＝５のデータブロックとを含む。ストライプＳ１３のパリティは、そのストライプＳ１３の２つのデータブロックから生成される。
【００２９】
上述のＲＡＩＤ０は、原理的には、図４に示すように１台のＨＤＤ上で構築することもできる。図４においては、論理ブロックアドレスが連続する２つのデータブロックによってストライプユニットが構成されている。
【００３０】
図５は、図４のＲＡＩＤ０のディスクアレイに１台のＨＤＤ（ＨＤＤ＃１）を追加し、２台のＨＤＤ（ＨＤＤ＃０，ＨＤＤ＃１）によってＲＡＩＤ１のディスクアレイを構成した例を示している。
【００３１】
図４のＨＤＤ＃０に記憶されていた論理ブロックアドレス０−３それぞれに対応するデータブロック群を図５のようにＨＤＤ＃２にコピーして再配置することにより、ＲＡＩＤレベルをＲＡＩＤ０からＲＡＩＤ１に変更することができる。
【００３２】
このように、冗長レベル変更処理においてはデータブロック単位でのデータ再配置が実行される。
【００３３】
もし、再配置対象のデータブロックのリード時にメディアエラーが発生しなかったならば、その再配置対象のデータブロックは通常通り転送先位置に書き込まれる。転送先位置は、再配置対象のデータブロックに割り当てられていた論理ブロックアドレスが新たに割り当てられるディスクアレイ上の記憶位置である。一方、再配置対象のデータブロックのリード時にメディアエラーが発生したならば、上述のエラーデータが転送先位置に書き込まれる。
【００３４】
図６には、冗長レベル変更部１０１の構成例が示されている。
【００３５】
冗長レベル変更部１０１は、再配置制御部１１１と、データリード部１１２と、データライト部１１３を備えている。再配置制御部１１１は、ディスクアレイ２０の現在の冗長レベルとディスクアレイ２０の変更後の冗長レベルとの関係に基づいて、再配置対象のデータブロック群とそれらデータブロック群それぞれの転送先位置を決定する。データリード部１１２は、再配置制御部１１１の制御の下、再配置対象のデータブロックをディスクコントローラ３４を通じてディスクアレイ２０からリードする。データライト部１１３は、再配置制御部１１１の制御の下、データリード部１１２によってリードされた再配置対象のデータブロックを、ディスクコントローラ３４を通じてディスクアレイ２０上の転送先位置にライトする。
【００３６】
メディアエラー検出部１０３は、データリード部１１２との通信によってリード動作の成功／失敗を監視することにより、メディアエラーの発生を検出する。メディアエラーの発生を検出すると、メディアエラー検出部１０３は、データライト部１１３の動作を禁止するとともに、エラーデータライト部１０４を起動する。
【００３７】
次に、図７のフローチャートを参照して、冗長レベル（ＲＡＩＤレベル）変更処理の具体的に手順を説明する。ここでは、図４のＲＡＩＤ０から図５のＲＡＩＤ１に変更する場合を例示して説明する。
【００３８】
冗長レベル変更部１０１は、まず、論理ブロックアドレスＬＢＡの値を初期値０に設定する（ステップＳ１０１）。次いで、冗長レベル変更部１０１は、論理ブロックアドレスＬＢＡの値が図４のＨＤＤ＃０に割り当てられている最終論理ブロックアドレスＬＢＡを越えるかいなかを判断し（ステップＳ１０２）、論理ブロックアドレスＬＢＡの値が最終論理ブロックアドレスＬＢＡを越えるまで、以下の処理を繰り返し実行する。
【００３９】
冗長レベル変更部１０１は、現在の論理ブロックアドレスＬＢＡ（ＬＢＡ＝０）で指定される再配置対象のデータブロックをＨＤＤ＃０（ソース側ＨＤＤ）からリードする（ステップＳ１０３）。メディアエラー検出部１０３は、このリード動作においてメディアエラーが発生したかどうかを判別する（ステップＳ１０４）。
【００４０】
メディアエラーの発生が検出されなかった場合、つまり現在の論理ブロックアドレスＬＢＡ（ＬＢＡ＝０）で指定される再配置対象のデータブロックをＨＤＤ＃０（ソース側ＨＤＤ）からリードできた場合には（ステップＳ１０４のＮＯ）、冗長レベル変更部１０１は、ステップＳ１０３でリードされた再配置対象のデータブロックを、その再配置対象のデータブロックに対応するＨＤＤ＃１（ターゲット側ＨＤＤ）上の転送先位置に書き込む（ステップＳ１０５）。この転送先位置は、論理ブロックアドレスＬＢＡ（ＬＢＡ＝０）が割り当てられるＨＤＤ＃１（ターゲット側ＨＤＤ）上の記憶位置である。これにより、現在のＬＢＡで指定されるソース側ＨＤＤのデータブロックが、そのＬＢＡで指定されるターゲット側ＨＤＤ上の記憶位置にコピーされたことになる。
【００４１】
一方、メディアエラーの発生が検出された場合、つまり現在の論理ブロックアドレスＬＢＡ（ＬＢＡ＝０）で指定される再配置対象のデータブロックをＨＤＤ＃０（ソース側ＨＤＤ）からリードできなかった場合には（ステップＳ１０４のＹＥＳ）、冗長レベル変更部１０１は、リードできなかった再配置対象のデータブロックに対応するＨＤＤ＃１（ターゲット側ＨＤＤ）上の転送先位置に、エラーデータをライトロングコマンドを用いて書き込む（ステップＳ１０６）。
【００４２】
次いで、冗長レベル変更部１０１は、現在の論理ブロックアドレスＬＢＡを＋１だけ増加した後（ステップＳ１０７）、ステップＳ１０２に戻る。ステップＳ１０２〜Ｓ１０７の処理が繰り返し実行されることにより、ディスクアレイ２０のＲＡＩＤレベルがＲＡＩＤ０からＲＡＩＤ１に変更される。
【００４３】
なお、ここでは、ＲＡＩＤ０からＲＡＩＤ１へのレベル変更を行うために全てのデータブロックを再配置対象としたが、一般には、目的とするレベル変更のために再配置が必要なデータブロックのみを再配置すればよい。すなわち、冗長レベル変更部１０１は、変更前のディスクアレイ２０のＲＡＩＤレベルおよびＨＤＤ台数と、ホスト１０から指定された変更後のディスクアレイ２０のＲＡＩＤレベルおよびＨＤＤ台数とに基づいて、再配置すべきデータブロック（転送元ブロック）それぞれの論理ブロックアドレスと、それら論理ブロックアドレスそれぞれに対応する転送先位置（転送先ブロック）を決定する。そして、冗長レベル変更部１０１は、転送元ブロック毎に図８のフローチャートで示される処理を実行する。
【００４４】
すなわち、冗長レベル変更部１０１は、まず、ディスクアレイ２０から転送元ブロックをリードする（ステップＳ１１１）。このリード動作でメディアエラーが発生しなかったならば（ステップＳ１１２のＮＯ）、冗長レベル変更部１０１は、リードした転送元ブロックを、その転送元ブロックに対応する転送先ブロックにライトする（ステップＳ１１３）。一方、ステップＳ１１１のリード動作でメディアエラーが発生したならば（ステップＳ１１２のＹＥＳ）、エラーデータライト部１０４は、エラーデータを転送先ブロックにライトする（ステップＳ１１４）。
【００４５】
なお、ある再配置対象データブロックのリード動作でメディアエラーが発生した転送元ブロックが、別の再配置対象データブロックの転送先ブロックとして使用されることもある。この場合、別の再配置対象データブロックを転送先ブロックに正常に書き込めなかった場合には、その転送先ブロックに対してもエラーデータがライトされる。
【００４６】
次に、図９のフローチャートを参照して、ディスクアレイ２０のＲＡＩＤレベル変更後におけるデータ読み出し動作について説明する。
【００４７】
制御プロセッサ３１は、ホスト１０によって実行されるファイルシステムやアプリケーションプログラムから送信されるリード要求を受信すると（ステップＳ２０１）、そのリード要求に含まれる論理ブロックアドレスで指定されるデータブロックをディスクアレイ２０からリードする（ステップＳ２０２）。制御プロセッサ３１は、ステップＳ２０２のリード動作でメディアエラーが発生したかどうかを判断する（ステップＳ２０３）。メディアエラーが発生しなかったならば（ステップＳ２０３のＮＯ）、制御プロセッサ３１は、ディスクアレイ２０からリードされたデータブロックをホスト１０に転送する（ステップＳ２０４）。一方、メディアエラーが発生したならば（ステップＳ２０３のＹＥＳ）、制御プロセッサ３１は、メディアエラーの発生をホスト１０に通知する（ステップＳ２０５）。エラーデータが書き込まれているブロックがホスト１０からリード要求された場合には必ずメディアエラーが発生するので、ホスト１０に誤ったデータが転送されることを防止することができる。
【００４８】
次に、容量拡張動作の例について説明する。
【００４９】
図１０は、２台のＨＤＤ（ＨＤＤ＃０，ＨＤＤ＃１）から構成されたＲＡＩＤ０のディスクアレイを示している。図１０では、各ストライプユニットに含まれるデータブロックが一つである場合を示している。図１１は、図１０のＲＡＩＤ０のディスクアレイに１台のＨＤＤ（ＨＤＤ＃２）を追加し、３台のＨＤＤ（ＨＤＤ＃０，ＨＤＤ＃１，ＨＤＤ＃２）によってＲＡＩＤ０のディスクアレイを構成した例を示している。図１０のディスクアレイに記憶されていた論理ブロックアドレス０−５それぞれに対応するデータブロック群を、図１１のように３台のＨＤＤ（ＨＤＤ＃０，ＨＤＤ＃１，ＨＤＤ＃２）にストライプユニット単位で再配置することにより、ＲＡＩＤレベルを変更することなくディスクアレイの記憶容量を拡張することが出来る。
【００５０】
図１２は、１台のＨＤＤ（ＨＤＤ＃０）上で構築されたＲＡＩＤ０のディスクアレイを示している。各ストライプユニットは、通常、論理ブロックアドレスが連続する２以上のデータブロックを含む。
【００５１】
図１３は、図１２のＲＡＩＤ０のディスクアレイに１台のＨＤＤ（ＨＤＤ＃１）を追加し、２台のＨＤＤ（ＨＤＤ＃０，ＨＤＤ＃１）によってＲＡＩＤ０のディスクアレイを構成した例を示している。図１２のディスクアレイに記憶されていたデータブロック群は図１３のように２台のＨＤＤ（ＨＤＤ＃０，ＨＤＤ＃１）にストライプユニット単位で再配置される。図１３においては、例えば、論理ブロックアドレスが連続する図１２の２つのストライプユニット０，１によって、一つのストライプＳ２１が構成されている。
【００５２】
このように、容量拡張処理においてはデータブロックそれぞれがストライプユニット単位での再配置される。
【００５３】
もし、再配置対象のデータブロックのリード時にメディアエラーが発生しなかったならば、その再配置対象のデータブロックは通常通り転送先位置に書き込まれる。転送先位置は、再配置対象のデータブロックに割り当てられていた論理ブロックアドレスが新たに割り当てられるディスクアレイ上の記憶位置である。一方、再配置対象のデータブロックのリード時にメディアエラーが発生したならば、上述のエラーデータが転送先位置に書き込まれる。
【００５４】
図１４には、容量拡張部１０２の構成例が示されている。
【００５５】
容量拡張部１０２は、再配置制御部２０１と、データリード部２０２と、データライト部２０３を備えている。再配置制御部２０１は、ディスクアレイ２０の現在の冗長レベルと追加されたディスクドライブの台数とに基づいて、再配置対象のデータブロック群とそれらデータブロック群それぞれの転送先位置を決定する。データリード部２０２は、再配置制御部２０１の制御の下、再配置対象のデータブロックをディスクコントローラ３４を通じてディスクアレイ２０からリードする。データライト部２０３は、再配置制御部２０１の制御の下、データリード部２０２によってリードされた再配置対象のデータブロックを、ディスクコントローラ３４を通じてディスクアレイ２０上の転送先位置にライトする。
【００５６】
メディアエラー検出部１０３は、データリード部２０２との通信によってリード動作の成功／失敗を監視することにより、メディアエラーの発生を検出する。メディアエラーの発生を検出すると、メディアエラー検出部１０３は、データライト部２０３の動作を禁止するとともに、エラーデータライト部１０４を起動する。
【００５７】
次に、図１５のフローチャートを参照して、容量拡張処理の手順を説明する。
【００５８】
容量拡張部１０２は、ディスクアレイ２０の現在の冗長レベルと追加されたディスクドライブの台数とに基づいて、再配置すべきデータブロック（転送元ブロック）それぞれの論理ブロックアドレスと、それら論理ブロックアドレスそれぞれに対応する転送先位置（転送先ブロック）を決定する。そして、容量拡張部１０２は、転送元ブロック毎に図１５のフローチャートで示される処理を実行する。
【００５９】
すなわち、容量拡張部１０２は、まず、ディスクアレイ２０から転送元ブロックをリードする（ステップＳ３０１）。このリード動作でメディアエラーが発生しなかったならば（ステップＳ３０２のＮＯ）、容量拡張部１０２は、リードした転送元ブロックを、その転送元ブロックに対応する転送先ブロックにライトする（ステップＳ３０３）。一方、ステップＳ３０１のリード動作でメディアエラーが発生したならば（ステップＳ３０２のＹＥＳ）、エラーデータライト部１０４は、ライトロングコマンドを用いてエラーデータを転送先ブロックにライトする（ステップＳ３０４）。
【００６０】
なお、容量拡張処理においても、リード動作でメディアエラーが発生した転送元ブロックが、別の再配置対象データブロックの転送先ブロックとして使用されることがある。この場合、別の再配置対象データブロックを転送先ブロックに正常に書き込めなかった場合には、その転送先ブロックに対してもエラーデータがライトされる。
【００６１】
またディスクアレイ２０の容量拡張後におけるデータ読み出し動作は、図９と同一の手順で実行される。
【００６２】
［第２の実施形態］
図１６は本発明の第２の実施形態に係る情報処理装置の構成を示すブロック図である。図１６において図１と同様の構成要素には同一参照番号を付してある。
【００６３】
第２実施形態においては、ディスクアレイコントローラ３０の制御プロセッサ３１は、図１のエラーデータライト部１０４の代わりに、エラーアドレス記録部１０５およびリード制御部１０６を備えている。エラーアドレス記録部１０５は、再配置対象のデータブロックのリード時にメディアエラーが発生した時、当該再配置対象のデータブロックに対応する転送先位置を示す論理ブロックアドレスＬＢＡをエラーアドレスとして不揮発性メモリ３３またはディスクアレイ２０のリザーブ領域２１０に保存する。冗長レベル変更前または容量拡張前における再配置対象のデータブロックに対応する論理ブロックアドレスＬＢＡが、冗長レベル変更後または容量拡張後における転送先位置の論理ブロックアドレスＬＢＡとなるので、エラーアドレス記録部１０５は、再配置対象のデータブロックのリード時にメディアエラーが発生した時、当該再配置対象のデータブロックの論理ブロックアドレスＬＢＡをエラーアドレスとして保存すればよい。
【００６４】
リード制御部１０６は、冗長レベル変更後または容量拡張後において、ホスト１０によって実行されるファイルシステムやアプリケーションプログラムから送信されるリードアクセス要求に含まれる論理ブロックアドレスＬＢＡが、エラーアドレスとして保存されているかどうかを判別する。もし保存されているならば、リード制御部１０６は、メディアエラーを発生する。
【００６５】
図１７は、冗長レベル変更部１０１とエラーアドレス記録部１０５とメディアエラー検出部１０３との関係が示されている。冗長レベル変更部１０１は、第１の実施形態と同様に、再配置制御部１１１と、データリード部１１２と、データライト部１１３とを備えている。メディアエラー検出部１０３は、データリード部１１２との通信によってリード動作の成功／失敗を監視することにより、メディアエラーの発生を検出する。メディアエラーの発生を検出すると、メディアエラー検出部１０３は、データライト部１１３の動作を禁止するとともに、エラーアドレス記録部１０５を起動する。エラーアドレス記録部１０５は、メディアエラー検出部１０３によってメディアエラーの発生が検出された再配置対象のデータブロックに対応する論理ブロックアドレスをエラーアドレスとして保存する。
【００６６】
次に、図１８のフローチャートを参照して、冗長レベル変更処理の手順を説明する。上述したように、冗長レベル変更部１０１は、変更前のディスクアレイ２０のＲＡＩＤレベルおよびＨＤＤ台数と、ホスト１０から指定された変更後のディスクアレイ２０のＲＡＩＤレベルおよびＨＤＤ台数とに基づいて、再配置すべきデータブロック（転送元ブロック）それぞれの論理ブロックアドレスと、それら論理ブロックアドレスそれぞれに対応する転送先位置（転送先ブロック）を決定する。そして、冗長レベル変更部１０１は、転送元ブロック毎に図１８のフローチャートで示される処理を実行する。
【００６７】
すなわち、冗長レベル変更部１０１は、まず、ディスクアレイ２０から転送元ブロックをリードする（ステップＳ４０１）。このリード動作でメディアエラーが発生しなかったならば（ステップＳ４０２のＮＯ）、冗長レベル変更部１０１は、リードした転送元ブロックを、その転送元ブロックに対応する転送先ブロックにライトする（ステップＳ４０３）。一方、ステップＳ４０１のリード動作でメディアエラーが発生したならば（ステップＳ４０２のＹＥＳ）、エラーアドレス記録部１０５は、メディアエラーが発生した転送元ブロックに対応する論理ブロックアドレスＬＢＡをエラーアドレスとして保存する（ステップＳ４０４）。
【００６８】
なお、上述したように、ある再配置対象データブロックのリード動作でメディアエラーが発生した転送元ブロックが、別の再配置対象データブロックの転送先ブロックとして使用されることもある。この場合、別の再配置対象データブロックを転送先ブロックに正常に書き込めなかった場合には、その転送先ブロックに新たに割り当てられるべき論理ブロックアドレスＬＢＡもエラーアドレスとして保存される。
【００６９】
図１９は、容量拡張部１０２とエラーアドレス記録部１０５とメディアエラー検出部１０３との関係が示されている。容量拡張部１０２は、第１の実施形態と同様に、再配置制御部２０１と、データリード部２０２と、データライト部２０３とを備えている。メディアエラー検出部１０３は、データリード部２０２との通信によってリード動作の成功／失敗を監視することにより、メディアエラーの発生を検出する。メディアエラーの発生を検出すると、メディアエラー検出部１０３は、データライト部２０３の動作を禁止するとともに、エラーアドレス記録部１０５を起動する。エラーアドレス記録部１０５は、メディアエラー検出部１０３によってメディアエラーの発生が検出された再配置対象のデータブロックに対応する論理ブロックアドレスをエラーアドレスとして保存する。
【００７０】
次に、図２０のフローチャートを参照して、容量拡張処理の手順を説明する。
【００７１】
上述したように、容量拡張部１０２は、ディスクアレイ２０の現在の冗長レベルと追加されたディスクドライブの台数とに基づいて、再配置すべきデータブロック（転送元ブロック）それぞれの論理ブロックアドレスと、それら論理ブロックアドレスそれぞれに対応する転送先位置（転送先ブロック）を決定する。そして、容量拡張部１０２は、転送元ブロック毎に図２０のフローチャートで示される処理を実行する。
【００７２】
すなわち、容量拡張部１０２は、まず、ディスクアレイ２０から転送元ブロックをリードする（ステップＳ５０１）。このリード動作でメディアエラーが発生しなかったならば（ステップＳ５０２のＮＯ）、容量拡張部１０２は、リードした転送元ブロックを、その転送元ブロックに対応する転送先ブロックにライトする（ステップ５０３）。一方、ステップＳ５０１のリード動作でメディアエラーが発生したならば（ステップＳ５０２のＹＥＳ）、エラーアドレス記録部１０５は、メディアエラーが発生した転送元ブロックに対応する論理ブロックアドレスＬＢＡをエラーアドレスとして保存する（ステップＳ５０４）。
【００７３】
なお、上述したように、容量拡張処理においても、ある再配置対象データブロックのリード動作でメディアエラーが発生した転送元ブロックが、別の再配置対象データブロックの転送先ブロックとして使用されることがある。この場合、別の再配置対象データブロックを転送先ブロックに正常に書き込めなかった場合には、その転送先ブロックに新たに割り当てられるべき論理ブロックアドレスＬＢＡもエラーアドレスとして保存される。
【００７４】
次に、図２１のフローチャートを参照して、ディスクアレイ２０のＲＡＩＤレベル変更後または容量拡張後におけるデータ読み出し動作について説明する。
【００７５】
制御プロセッサ３１は、ホスト１０によって実行されるファイルシステムやアプリケーションプログラムから送信されるリードアクセス要求を受信すると（ステップＳ６０１）、リード制御部１０６を用いて、リードアクセス要求に含まれる論理ブロックアドレスがエラーアドレスとして記憶されているかどうかを判別する（ステップＳ６０２）。リードアクセス要求に含まれる論理ブロックアドレスがエラーアドレスとして記憶されていない場合には（ステップＳ６０２のＮＯ）、制御プロセッサ３１は、リードアクセス要求に含まれる論理ブロックアドレスで指定されるデータブロックをディスクアレイ２０からリードする（ステップＳ６０２）。一方、リードアクセス要求に含まれる論理ブロックアドレスがエラーアドレスとして記憶されている場合には（ステップＳ６０２のＹＥＳ）、制御プロセッサ３１は、メディアエラーの発生をホスト１０に通知する（ステップＳ２０５）。エラーアドレスとして記憶されている論理ブロックアドレスがリード要求された場合には必ずメディアエラーが発生するので、ホスト１０に誤ったデータが転送されることを防止することができる。よって、第２の実施形態では、ディスクアレイ２０を構成する各ＨＤＤがライトロングコマンドをサポートしている必要はない。
【００７６】
なお、ディスクアレイ２０をソフトウェアによって制御するという、いわゆるソフトウェアＲＡＩＤにおいては、上記各実施形態における冗長レベル変更処理および容量拡張処理は、ホスト１０によって実行されるＲＡＩＤ制御プログラムによって実行することもできる。
【００７７】
また、上記各実施形態では、再配置対象のデータブロックにメディアエラーが発生した場合の処理について説明したが、メディアエラーに限らず、例えばリードエラーなどのように、再配置対象のデータブロックに当該データブロックを正常に読み出すことが出来ないエラーが発生した場合にも、同様の処理を適用することが出来る。
【００７８】
また、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組み合せてもよい。
【図面の簡単な説明】
【００７９】
【図１】本発明の第１の実施形態に係る情報処理装置の構成を示すブロック図。
【図２】図１の情報処理装置で用いられる、冗長レベル変更前のディスクアレイの構成の第１の例を示す図。
【図３】図１の情報処理装置で用いられる、冗長レベル変更後のディスクアレイの構成の第１の例を示す図。
【図４】図１の情報処理装置で用いられる、冗長レベル変更前のディスクアレイの構成の第２の例を示す図。
【図５】図１の情報処理装置で用いられる、冗長レベル変更後のディスクアレイの構成の第２の例を示す図。
【図６】図１の情報処理装置で用いられる冗長レベル変更部の構成例を示すブロック図。
【図７】図１の情報処理装置において実行される冗長レベル変更処理の手順を示す第１のフローチャート。
【図８】図１の情報処理装置において実行される冗長レベル変更処理の手順を示す第２のフローチャート。
【図９】図１の情報処理装置において実行されるデータ読み出し動作の手順を示すフローチャート。
【図１０】図１の情報処理装置で用いられる、容量拡張前のディスクアレイの構成の第１の例を示す図。
【図１１】図１の情報処理装置で用いられる、容量拡張後のディスクアレイの構成の第１の例を示す図。
【図１２】図１の情報処理装置で用いられる、容量拡張前のディスクアレイの構成の第２の例を示す図。
【図１３】図１の情報処理装置で用いられる、容量拡張後のディスクアレイの構成の第２の例を示す図。
【図１４】図１の情報処理装置で用いられる容量拡張部の構成例を示すブロック図。
【図１５】図１の情報処理装置において実行される容量拡張処理の手順を示すフローチャート。
【図１６】本発明の第２の実施形態に係る情報処理装置の構成を示すブロック図。
【図１７】図１６の情報処理装置で用いられる冗長レベル変更部とメディアエラー検出部とエラーアドレス記録部との関係を示すブロック図。
【図１８】図１６の情報処理装置において実行される冗長レベル変更処理の手順を示すフローチャート。
【図１９】図１６の情報処理装置で用いられる容量拡張部とメディアエラー検出部とエラーアドレス記録部との関係を示すブロック図。
【図２０】図１６の情報処理装置において実行される容量拡張処理の手順を示すフローチャート。
【図２１】図１６の情報処理装置におけるデータ読み出し処理の手順を示すフローチャート。
【符号の説明】
【００８０】
１０…ホスト、２０…ディスクアレイ、２１…ＨＤＤ（ディスクドライブ）、３０…ディスクアレイコントローラ、３１…制御プロセッサ、３３…不揮発性メモリ、３４…ディスクコントローラ、１０１…冗長レベル変更部、１０２…容量拡張部、１０３…メディアエラー検出部、１０４…エラーデータライト部。
【図１】
2005293363.tif 000003
【図２】
2005293363.tif 000004
【図３】
2005293363.tif 000005
【図４】
2005293363.tif 000006
【図５】
2005293363.tif 000007
【図６】
2005293363.tif 000008
【図７】
2005293363.tif 000009
【図８】
2005293363.tif 000010
【図９】
2005293363.tif 000011
【図１０】
2005293363.tif 000012
【図１１】
2005293363.tif 000013
【図１２】
2005293363.tif 000014
【図１３】
2005293363.tif 000015
【図１４】
2005293363.tif 000016
【図１５】
2005293363.tif 000017
【図１６】
2005293363.tif 000018
【図１７】
2005293363.tif 000019
【図１８】
2005293363.tif 000020
【図１９】
2005293363.tif 000021
【図２０】
2005293363.tif 000022
【図２１】
2005293363.tif 000023