(57)【要約】【課題】テーブルを用いることなく、論理ディスクの作成後に当該論理ディスクを正常状態と同様に使用することを可能とする。【解決手段】コントローラ１３は、データ及び当該データの冗長データを対応付けて格納する論理ディスク１１を作成する。コントローラ１３は、論理ディスク１１が正常状態であることをメモリ１３１に設定する。コントローラ１３は、論理ディスク１１に格納されているデータの冗長データに矛盾があるか否かをチェックするパトロール処理を実行する。コントローラ１３は、データの冗長データに矛盾がある場合、当該データの冗長データを生成する。コントローラ１３は、生成された冗長データを、論理ディスク１１に格納されているデータに対応付けて当該論理ディスク１１に格納する。【選択図】      図１
2008257360.tif 000002
【特許請求の範囲】
【請求項１】
メモリを含み、ホストからの要求に応じてデータ及び当該データの冗長データを対応付けて格納する論理ディスクへのアクセスを制御するコントローラを備えるストレージ装置において、前記論理ディスクの作成後に当該論理ディスクに格納されているデータの冗長データを生成するＲＡＩＤ初期化方法であって、
前記論理ディスクを作成するステップと、
前記論理ディスクが作成された段階で、当該論理ディスクが前記ホストからのアクセスを受け付ける正常状態であることを、前記メモリに設定するステップと、
前記正常状態であることが設定されると、前記論理ディスクの先頭から順に、当該論理ディスクに格納されているデータの冗長データに矛盾があるかをチェックするパトロール処理を実行するステップとを具備し、
前記パトロール処理を実行するステップは、
前記論理ディスクに格納されているデータの冗長データに矛盾がある場合に、前記データの冗長データを、当該データに基づいて生成するステップと、
前記生成された冗長データを、前記データに対応付けて前記論理ディスクに格納するステップとを含む
ことを特徴とするＲＡＩＤ初期化方法。
【請求項２】
前記論理ディスクに対してデータを書き込むことを要求する前記ホストからの書き込み要求を受信するステップと、
前記受信された書き込み要求に応じてデータを書き込むことが要求されている前記論理ディスクの領域が、前記パトロール処理が実行されていない未完了領域であるかを判定するステップと、
前記未完了領域であると判定された場合に、前記受信された書き込み要求で指定される書き込みデータの冗長データを生成するステップと、
前記生成された冗長データを、前記書き込みデータに対応付けて前記論理ディスクに格納するステップと
を具備することを特徴とする請求項１記載のＲＡＩＤ初期化方法。
【請求項３】
前記生成するステップは、前記論理ディスクに格納されているデータの冗長データが生成される際に、当該データの正しさを確認するためのチェックコードを生成するステップを含み、
前記格納するステップは、前記生成されたチェックコードを前記データに付加して前記論理ディスクに格納するステップを含む
ことを特徴とする請求項１記載のＲＡＩＤ初期化方法。
【請求項４】
メモリを含み、ホストからの要求に応じてデータ及び当該データの冗長データを対応付けて格納する論理ディスクへのアクセスを制御するコントローラを備えるストレージ装置において、前記論理ディスクの作成後に当該論理ディスクに格納されているデータの冗長データを生成するＲＡＩＤ初期化方法であって、
前記論理ディスクを作成するステップと、
前記論理ディスクが作成された段階で、当該論理ディスクが前記ホストからのアクセスを受け付ける正常状態であることを、前記コントローラに含まれるメモリに設定するステップと、
前記正常状態であることが設定されると、前記論理ディスクの先頭から順に、当該論理ディスクに格納されているデータの冗長データを、当該データに基づいて生成するステップと、
前記冗長データが生成される都度、当該冗長データを、当該冗長データの生成に用いられたデータに対応付けて前記論理ディスクに格納するステップと
を具備することを特徴とするＲＡＩＤ初期化方法。
【請求項５】
マイクロプロセッサ及びメモリを含み、ホストからの要求に応じてデータ及び当該データの冗長データを対応付けて格納する論理ディスクへのアクセスを制御するコントローラを備えるストレージ装置において、前記論理ディスクの作成後に当該論理ディスクに格納されているデータの冗長データを生成するＲＡＩＤ初期化に用いられるＲＡＩＤ初期化プログラムであって、
前記マイクロプロセッサに、
前記論理ディスクを作成するステップと、
前記論理ディスクが作成された段階で、当該論理ディスクが前記ホストからのアクセスを受け付ける正常状態であることを、前記コントローラに含まれるメモリに設定するステップと、
前記正常状態であることが設定されると、前記論理ディスクの先頭から順に、当該論理ディスクに格納されているデータの冗長データに矛盾があるかをチェックするパトロール処理を実行するステップとを実行させ、
前記パトロール処理を実行するステップは、
前記論理ディスクに格納されているデータの冗長データに矛盾がある場合に、前記データの冗長データを、当該データに基づいて生成するステップと、
前記前記生成された冗長データを、前記データに対応付けて前記論理ディスクに格納するステップとを含む
ことを特徴とするＲＡＩＤ初期化プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、論理ディスク作成後に当該論理ディスクに格納されているデータの冗長データを生成するＲＡＩＤ初期化方法及びＲＡＩＤ初期化プログラムに関する。
【背景技術】
【０００２】
一般に、ストレージ装置（ディスクアレイ装置）は、複数のディスクドライブ、例えばハードディスクドライブ（ＨＤＤ：Hard Disk Drive）と、これらのＨＤＤと接続されたコントローラを備えている。この複数のＨＤＤは、例えばＲＡＩＤ（Redundant Array of Inexpensive Disk drives）１／１＋０またはＲＡＩＤ５のようなＲＡＩＤの手法により、例えば少なくとも１つの論理ディスク（ＲＡＩＤ論理ディスク）を構成する。
【０００３】
ストレージ装置に備えられたコントローラは、このような論理ディスク（複数のＨＤＤ）を管理する。コントローラは、例えばホスト（ホスト計算機）からのデータ読み出し／書き込み要求（ＩＯ要求）に対し、当該コントローラに接続された複数のＨＤＤを並列に動かすことにより、データの読み出し（リード）／書き込み（ライト）を分散して実行する。これによりストレージ装置においては、ホストから要求されたデータアクセスの高速化を図ることが可能となる。また、このようなストレージ装置においては、論理ディスクを構成するＨＤＤに格納されているデータに対する冗長データを、当該論理ディスクを構成する別のＨＤＤに格納しておく構成により、信頼性の向上を図ることもできる。この冗長データは、例えば論理ディスクを構成する複数のＨＤＤのうちの１つのＨＤＤが故障した場合に、当該故障したＨＤＤに格納されているデータを復元するために用いられるデータである。
【０００４】
上記したような冗長データを含むタイプの論理ディスクにおいては、当該論理ディスクが作成された後に当該論理ディスクに格納されているデータの冗長データを生成する必要がある。以下、このような冗長データを生成する処理をＲＡＩＤ初期化（処理）と称する。このＲＡＩＤ初期化によって、作成された論理ディスクに格納されているデータと冗長データとの整合性を取る。なお、論理ディスクが作成された場合、当該論理ディスクの内部には、不定データ（有用でないデータ）が格納されている。
【０００５】
通常、論理ディスクの作成からＲＡＩＤ初期化が完了するまでの間、当該論理ディスクは、通常の状態（正常状態）とは異なるステータス（状態）となる。ＲＡＩＤ初期化の方法としては、例えば論理ディスクを構成する全ドライブに０を書き込む方法（第１の方法）または当該論理ディスク内部のデータの冗長データのみを書き換える方法（第２の方法）等がある。
【０００６】
第１の方法においては、全ドライブに０が書込まれると、ＲＡＩＤ初期化が完了となる。なお、第１の方法でＲＡＩＤ初期化が実行されると、この間、ホストはストレージ装置に対してアクセスすることはできない。
【０００７】
一方、第２の方法においては、例えば論理ディスクの先頭から順に冗長データを生成して書き込み、当該論理ディスクの最後まで処理が終わるとＲＡＩＤ初期化が完了となる。なお、第２の方法においては、ホストはＲＡＩＤ初期化中であってもストレージ装置に対してアクセス可能である。
【０００８】
上記した第２の方法では、ＲＡＩＤ初期化中の論理ディスクの中で当該ＲＡＩＤ初期化を実行中の位置が管理、記憶されている。以下、このＲＡＩＤ初期化が実行されている位置を初期化ポインタと称する。この初期化ポインタにより、論理ディスク内部においてのＲＡＩＤ初期化を終えている領域（初期化完了領域）及びＲＡＩＤ初期化を終えていない領域（初期化未完了領域）が区別される。
【０００９】
例えば論理ディスクの初期化中に、初期化完了領域に対してホストからのＩＯ要求（読み出し要求または書き込み要求）があった場合には、当該初期化完了領域では冗長データが生成済みであるので、正常状態時と同様の処理が実行される。
【００１０】
一方、論理ディスクの初期化中に、初期化未完了領域に対してホストからデータの書き込み要求があった場合には当該データが論理ディスクに書き込まれる（ホストライト）。そのとき、書き込まれるデータの冗長データが作成され、当該データと共に冗長データも論理ディスクに書き込まれる。また、初期化未完了領域に対してホストからデータの読み込み要求があった場合には、正常状態と同様にデータが読み出される。このとき、読み込み要求があった領域に対してホストからの書き込み要求に応じて１度もデータが書き込まれていない場合、上記した不定データ（論理ディスク作成時に格納されているデータ）がホストに対して返される。
【００１１】
ところで、論理ディスクのＲＡＩＤ初期化中に、当該論理ディスクを構成する例えばある１つのＨＤＤが故障した場合を想定する。この場合、初期化完了領域及びホストからの書き込み要求に応じて書き込みがあった領域には、冗長データが生成されているので、縮退中であっても残りのＨＤＤに格納されているデータから復元処理を実行することができる。一方、初期化未完了領域であってホストライトのない領域には、冗長データは生成されていないので故障したＨＤＤに格納されているデータを復元することはできないが、この領域には不定データしか格納されていないので問題はない。
【００１２】
ＲＡＩＤ初期化が完了すると、論理ディスクは、正常状態となる。論理ディスクが正常状態である場合には、周期的に論理ディスクを構成する全ＨＤＤからデータをリードして、冗長データの矛盾がチェックされる。これにより、論理ディスク内のデータの整合性を確認する。以下、この処理をパトロールと称する。
【００１３】
さて、上記したＲＡＩＤ初期化において、第１の方法が用いられた場合、上記したようにＲＡＩＤ初期化中にホストは論理ディスクに対してアクセスすることができない。ＲＡＩＤ初期化の所要時間は、論理ディスクの要領に比例するため、ＨＤＤの要領増加によってＲＡＩＤ初期化にかかる時間は延び続けている。このため、ＲＡＩＤ初期化中に、一切アクセスできないということは好ましくない。
【００１４】
また、第２の方法が用いられた場合には、ホストは論理ディスクにアクセスすることは可能である。しかしながら、上記した論理ディスクが正常状態の場合と比較すると、ＩＯ性能は落ちる。また、上記した第１の方法に比べて、ＲＡＩＤ初期化に要する時間が長くなる。
【００１５】
初期化されていないディスクドライブのエリアの最初のエリアを示すポインタ及び各ドライブの全エリアの各々が初期化済みであるか否かを示すビットマップを用いてストレージシステムを初期化する技術が開示されている（例えば、特許文献１を参照）。この技術によれば、ストレージシステムがインストールしてすぐに使用可能になり、ユーザにはシステムはすでに初期化済みであるように見せることができる。
【特許文献１】特開２００５−１１３１７号公報
【発明の開示】
【発明が解決しようとする課題】
【００１６】
上記したようにポインタ及びビットマップ（テーブル）を用いることにより、論理ディスクの作成後、外部に対しては正常状態とすることで例えばホストからのアクセスを可能とすることができる。
【００１７】
しかしながら、上記したようにテーブルを用いる場合、論理ディスクの容量の増大に伴い、ストレージ装置に備えられるメモリ消費量も増大する。これにより、ＨＤＤの容量増加に対して十分なサイズのメモリ領域を確保することが難しくなることが考えられる。
【００１８】
本発明の目的は、テーブルを用いることなく、論理ディスクの作成後に当該論理ディスクを正常状態と同様に使用することができるＲＡＩＤ初期化方法及びＲＡＩＤ初期化プログラムを提供することにある。
【課題を解決するための手段】
【００１９】
本発明の１つの態様によれば、メモリを含み、ホストからの要求に応じてデータ及び当該データの冗長データを対応付けて格納する論理ディスクへのアクセスを制御するコントローラを備えるストレージ装置において、前記論理ディスクの作成後に当該論理ディスクに格納されているデータの冗長データを生成するＲＡＩＤ初期化方法であって、前記論理ディスクを作成するステップと、前記論理ディスクが作成された段階で、当該論理ディスクが前記ホストからのアクセスを受け付ける状態であることを、前記コントローラに含まれるメモリに設定するステップと、前記正常状態であることが設定されると、前記論理ディスクの先頭から順に、当該論理ディスクに格納されているデータの冗長データに矛盾があるかをチェックするパトロール処理を実行するステップとを具備し、前記パトロール処理を実行するステップは、前記論理ディスクに格納されているデータの冗長データに矛盾がある場合に、前記データの冗長データを、当該データに基づいて生成するステップと、前記生成された冗長データを、前記データに対応付けて前記論理ディスクに格納するステップとを含むことを特徴とするＲＡＩＤ初期化方法が提供される。
【発明の効果】
【００２０】
本発明によれば、テーブルを用いることなく、論理ディスクの作成後に当該論理ディスクを正常状態と同様に使用することを可能とする。
【発明を実施するための最良の形態】
【００２１】
以下、図面を参照して、本発明の実施形態について説明する。
【００２２】
図１は、本実施形態に係るストレージ装置を備えた計算機システムの構成を示すブロック図である。この計算機システムは、ストレージ装置１０及びホスト（ホスト計算機）２０から構成される。ホスト２０は、例えばＳＣＳＩ（Small Computer System Interface）またはファイバチャネル（Fibre Channel）のようなインタフェース（図示せず）によってストレージ装置１０と接続されている。ホスト２０は、例えばストレージ装置１０を外部記憶装置として利用する。
【００２３】
ストレージ装置１０は、複数のディスクドライブ、例えばハードディスクドライブ（ＨＤＤ：Hard Disk Drive）及びコントローラ１３を有する。
【００２４】
複数のＨＤＤは、例えばＲＡＩＤ（Redundant Array of Inexpensive Disk drive）１／１＋０またはＲＡＩＤ５のようなＲＡＩＤの手法により、例えば少なくとも１つの論理ディスクを構成する。本実施形態においては、ストレージ装置１０は、論理ディスク１１及び論理ディスク１２を含む複数の論理ディスクを有する。論理ディスク１１は、ＨＤＤ１１１及びＨＤＤ１１２を含む複数のＨＤＤから構成されている。また、論理ディスク１２は、ＨＤＤ１２１及びＨＤＤ１２２を含む複数のＨＤＤから構成されている。
【００２５】
論理ディスクは、例えば専用のソフト等を用いてＲＡＩＤの設定を行うことにより、ストレージ装置２０において内部的に作成（設定）される。論理ディスクが作成されると、当該論理ディスクを構成する複数のＨＤＤを、例えば単一の論理ディスクとして扱うことが可能となる。
【００２６】
なお、論理ディスクが新しく作成された場合、当該新しく作成された論理ディスクには、例えば不定データ（有用でないデータ）が格納されている。論理ディスク作成後、例えば不定データが格納されている領域に対してホストからのＩＯ要求（書き込み要求）があると、当該要求に応じたデータが当該領域に格納されている不定データに上書きされる。つまり、データが不定であるのは、論理ディスクが作成されてから、ホストからのＩＯ要求があるまでの間である。
【００２７】
このような例えばＲＡＩＤの手法により構成された論理ディスク１１（または論理ディスク１２）には、当該論理ディスク１１に格納されているデータを復元するための冗長データが、例えば当該データに対応付けて格納されている。
【００２８】
具体的には、上記したＲＡＩＤ１／１＋０（ミラーリング）の手法においては、例えば論理ディスクが２台のＨＤＤから構成された場合、一方のＨＤＤ（マスタディスク）には例えばホスト２０からの書き込み要求に応じて書き込まれたデータ（マスタデータ）が格納され、他方のＨＤＤ（シャドウディスク）には当該マスタデータのシャドウデータ（冗長データ）が格納される。なお、この冗長データは、マスタデータが格納されているＨＤＤ（マスタディスク）の領域に対応付けられたＨＤＤ（シャドウディスク）の領域に格納される。なお、ＲＡＩＤ１／１＋０の手法においては、２台のＨＤＤのうち、例えばシャドウディスクはマスタディスクのバックアップディスクとして動作する。
【００２９】
また、上記したＲＡＩＤ５（分散データガーディング）の手法においては、例えば論理ディスクが３台のＨＤＤから構成された場合、そのうちの２台のＨＤＤに格納されたデータの排他的論理和（Exclusive OR）によって得られるパリティデータ（冗長データ）が残りの１台のＨＤＤに格納される。この冗長データは、当該冗長データを得るために用いられたデータの各々が格納されている（２台の）ＨＤＤの領域に対応付けられた（残りの１台の）ＨＤＤの領域に格納される。なお、例えばＲＡＩＤ５の手法による論理ディスクにおいて、パリティデータを得るために用いられたデータの各々が格納される領域及び当該データの各々によって得られるパリティデータ（冗長データ）が格納される領域は、ストライプグループと呼ばれる領域である。また、パリティデータを得るために用いられた例えば複数のデータをパリティグループと称する。
【００３０】
コントローラ１３は、ＳＣＳＩまたはファイバチャネルのようなインタフェース（
図示せず）によって論理ディスク１１及び１２を含む複数の論理ディスクの各々（複数の論理ディスクの各々を構成する複数のＨＤＤ）と接続されている。コントローラ１３は、ホスト２０からのデータの読み出し／書き込み要求（ＩＯ要求）に応じて、複数の論理ディスクを構成する複数のＨＤＤを制御し、当該データの読み出し／書き込み処理を実行する。また、コントローラ１３は、ホスト２０とのデータの送受信を行う。
【００３１】
コントローラ１３は、例えば論理ディスクが正常状態（後述する）に設定されている場合には、周期的に、当該論理ディスク内のデータの冗長データの矛盾があるか否かをチェックする（以下、この処理をパトロールと表記）。具体的には、コントローラ１３は、論理ディスク内のデータから得られる冗長データが、当該データの冗長データが格納されるべき領域（当該データが格納されている領域に対応付けられている領域）に格納されているデータと一致するか否かを判定する。また、コントローラ１３は、論理ディスクが新しく作成された場合、当該論理ディスクの整合性を取るために当該論理ディスクに格納されているデータの冗長データを生成する。以下、この処理をＲＡＩＤ初期化（処理）と称する。
【００３２】
コントローラ１３は、メモリ１３１、不揮発性メモリ１３２及びマイクロプロセッサ１３３を含む。
【００３３】
メモリ１３１には、例えば論理ディスク１１へのアクセス（ＩＯ性能）に関する状態が設定される。つまり、メモリ１３１には、論理ディスク１１がホスト２０からのアクセスを受け付けるか否か等の状態が設定される。なお、例えば論理ディスク１１が通常動作している際の当該ストレージ装置２０のアクセスに関する状態、つまり、ホスト２０からのＩＯ要求に応じて当該論理ディスク１１に対する読み出しまたは書き込み処理が可能な状態を正常状態とする。論理ディスク１１が正常状態に設定されているときには、例えばホスト２０は、特別な制限を受けることなく当該論理ディスク１１に対してアクセスすることができる。また、メモリ１３１には、例えば論理ディスク１１における上記したパトロールが実行されている位置を示すパトロールポインタが格納される。このパトロールポインタにより、例えば論理ディスク１１内の領域において例えばパトロールが既に実行された完了領域及びパトロールがまだ実行されていない未完了領域が区別される。
【００３４】
不揮発性メモリ１３２には、コントローラ１３に含まれるマイクロプロセッサ１３３によって実行されるプログラム１３４が格納されている。例えば上記したようなコントローラ１３の処理は、マイクロプロセッサ１３３が不揮発性メモリ１３２に格納されているプログラム１３４を実行することにより実現されるものとする。このプログラム１３４は、例えばマイクロプロセッサ１３３で読み取り可能な記憶媒体に予め格納して頒布可能である。また、このプログラム１３４が、ネットワークを介してダウンロード（頒布）されてもよい。
【００３５】
次に、図２を参照して、例えば論理ディスク１１が作成された場合のコントローラ１３の動作について説明する。ここでは、論理ディスク１１が作成された場合について説明するが、例えば論理ディスク１２のような論理ディスク１１以外の論理ディスクが作成された場合であっても同様である。以下の説明についても同様である。
【００３６】
まず、ストレージ装置１０の内部に論理ディスク１１が新しく作成されたものとする（ステップＳ１、Ｓ２）。
【００３７】
次に、コントローラ１３は、論理ディスク１１を正常状態として、作成された論理ディスク１１のパトロール（１周目）を開始する（ステップＳ３）。このとき、コントローラ１３は、論理ディスク１１内のＲＡＩＤ初期化を実行する。
【００３８】
パトロール（１周目）が完了すると、ストレージ装置１０は、周期的にパトロール（２周目以降）を実行する（ステップＳ４、Ｓ５）。これにより、ＲＡＩＤ初期化が完了した論理ディスクであっても、常に当該論理ディスクに格納されているデータ及び当該データの冗長データの整合性を確保する。
【００３９】
なお、上記した１周目のパトロールが実行されている場合には、ＲＡＩＤ初期化中であるため、冗長データが生成されていない領域が存在する。一方、２周目以降のパトロールの実行されている場合には、１周目のパトロールの際にＲＡＩＤ初期化が完了しているため、論理ディスク内の全てのデータの冗長データは生成されている。このため、１周目のパトロールと２周目以降のパトロールとでは処理が異なる。
【００４０】
次に、図３のフローチャートを参照して、コントローラ１３による１周目のパトロールの処理手順について説明する。
【００４１】
まず、コントローラ１３は、例えば各種設定に応じてストレージ装置２０内部に新しく論理ディスク１１を作成する（ステップＳ１１）。
【００４２】
次に、コントローラ１３は、パトロールポインタを新しく作成された論理ディスク１１の先頭に設定する（ステップＳ１３）。このパトロールポインタは、例えば論理ディスク１１内の領域においてパトロールが実行されている位置を示す。また、パトロールポインタは、コントローラ１３に含まれるメモリ１３１に格納される。
【００４３】
コントローラ１３は、論理ディスク１１が作成された段階で、当該論理ディスク１１が正常状態であることを当該コントローラ１３に含まれるメモリ１３１に設定する（ステップＳ１３）。なお、論理ディスク１１が正常状態であることが設定されると、上記したようにコントローラ１３は、当該論理ディスク１１に対してパトロール処理を実行する。
【００４４】
コントローラ１３は、パトロールポインタが設定されている領域（ここでは、論理ディスク１１の先頭）に格納されているデータ（第１のデータ）及び当該第１のデータの冗長データが格納されるべき領域（第１のデータが格納されている領域に対応付けられた領域）に格納されているデータ（第２のデータ）を読み出す（ステップＳ１４）。このとき、コントローラ１３は、予め定められているパトロールの実行単位分の第１のデータ及び第２のデータを読み出す。
【００４５】
次に、コントローラ１３は、読み出された第１のデータの冗長データに矛盾があるか否かを判定する（ステップＳ１５）。コントローラ１３は、読み出された第１のデータから得られる当該第１のデータの冗長データ及び第２のデータが一致するか否かを判定する。このとき処理している領域は１周目のパトロールが完了していない領域（未完了領域）であるので、この領域のＲＡＩＤ初期化は実行されていない。このため、第１のデータから得られる当該第１のデータの冗長データ及び第２のデータは一致しない、つまり、第１のデータの冗長データに矛盾があると判定される。
【００４６】
しかしながら、後述するが、未完了領域に対してホスト２０からの書き込み要求があった場合には、当該要求に応じて書き込まれるデータの冗長データが作成される。よって、未完了領域であっても書き込み要求があった領域については、第１のデータから得られる当該第１のデータの冗長データ及び第２のデータは一致し、当該第１のデータの冗長データには矛盾がないと判定される。このような１周目のパトロール実行中に未完了領域に対してホスト２０からのＩＯ要求があった場合の処理については後述する。
【００４７】
第１のデータの冗長データに矛盾がないと判定された場合（ステップＳ１５のＹＥＳ）、コントローラ１３は、第１のデータの冗長データを生成する（ステップＳ１６）。
【００４８】
次に、コントローラ１３は、生成された第１のデータの冗長データを、当該第１のデータに対応付けて論理ディスク１１に書き込む（ステップＳ１７）。つまり、コントローラ１３は、第２のデータを生成された第１のデータの冗長データに書き換える。
【００４９】
ここで、図４及び図５を参照して、上記した図３のステップＳ１４〜ステップＳ１７の処理について説明する。図４は、例えば論理ディスク１１がＲＡＩＤ１／１＋０の手法により作成された論理ディスクである場合の図３のステップＳ１４〜ステップＳ１７の処理について具体的に説明するための図である。
【００５０】
図４に示すように、論理ディスク１１がＲＡＩＤ１／１＋０の手法による論理ディスクの場合には、コントローラ１３は、第１のデータ（ここでは、例えばＭ０）及び第２のデータ（ここでは、第１のデータＭ０に対応するＳ０）を読み出す。なお、読み出された第２のデータＳ０が格納されている領域は、第１のデータＭ０が格納されている領域に対応付けられた領域であるである。コントローラ１３は、第１のデータＭ０から得られる冗長データ及び第２のデータＳ０を比較する。
【００５１】
ここで、ＲＡＩＤ１／１＋０の手法による論理ディスク１１は、例えばマスタディスク及びシャドウディスクから構成される。通常、論理ディスク１１を構成する例えばマスタディスクには、マスタデータ（例えば第１のデータＭ０）が格納され、論理ディスク１１を構成するシャドウディスクには、マスタデータと同一のデータであるシャドウデータ（冗長データ）が格納される。つまり、例えば第１のデータＭ０の冗長データは、第１のデータＭ０と同一のデータである。よって、コントローラ１３は、第１のデータＭ０から得られる当該第１のデータＭ０の冗長データ（つまり第１のデータＭ０）及び第２のデータＳ０が一致するか否かを判定する。第１のデータＭ０及び第２のデータＳ０が一致しない場合、つまり、第１のデータＭ０の冗長データに矛盾がある場合には、コントローラ１３は、第１のデータＭ０に対応付けて当該第１のデータＭ０の冗長データを格納する。つまり、コントローラ１３は、第２のデータＳ０を第１のデータＭ０の冗長データに書き換える。なお、第１のデータＭ１〜Ｍｎ及び第２のデータＳ１〜Ｓｎの各々についても同様である。
【００５２】
図５は、例えば論理ディスク１１がＲＡＩＤ５の手法により作成された論理ディスクである場合の図３のステップＳ１４〜ステップＳ１７の処理について具体的に説明するための図である。
【００５３】
図５に示すように、論理ディスク１１がＲＡＩＤ５の手法による論理ディスクの場合には、コントローラ１３は、第１のデータ（ここではＤ０〜Ｄｎ）及び第２のデータ（ここではＰ）を読み出す。なお、読み出された第２のデータＰが格納されている領域は、第１のデータＤ０〜Ｄｎが格納されている領域に対応付けられている領域である。この場合、コントローラ１３は、読み出された第１のデータＤ０〜Ｄｎのデータから得られるパリティデータ（第１のデータＤ０〜Ｄｎの冗長データ）及び第２のデータＰが一致するか否かを判定する。なお、パリティデータは、例えば第１のデータＤ０〜Ｄｎの排他的論理和により算出される。第１のデータＤ０〜Ｄｎの冗長データ及び第２のデータＰが一致しない場合、つまり、第１のデータＤ０からＤｎの冗長データに矛盾がある場合には、コントローラ１３は、第１のデータＤ０〜Ｄｎの冗長データに対応付けて第１のデータＤ０〜Ｄｎから得られるパリティデータ（第１のデータＤ０〜Ｄｎの冗長データ）を格納する。つまり、コントローラ１３は、第２のデータＰを第１のデータＤ０〜Ｄｎのから得られるパリティデータに書き換える。
【００５４】
再び図３に戻ると、コントローラ１３は、メモリ１３１に設定されている（格納されている）パトロールポインタに基づいて、１周目のパトロールが論理ディスク１１の最後まで実行されたか否かを判定する（ステップＳ１８）。
【００５５】
１周目のパトロールが最後まで実行されていないと判定された場合（ステップＳ１８のＮＯ）、コントローラ１３は、パトロールポインタを進めてメモリ１３１に設定する（ステップＳ１９）。
【００５６】
パトロールポインタがメモリ１３１に設定されると、ステップＳ１４に戻って処理が繰り返される。
【００５７】
一方、ステップＳ１８において１周目のパトロールが論理ディスク１１の最後まで実行されたと判定された場合、コントローラ１３は、例えば周期的に２周目以降のパトロールを開始する（ステップＳ２０）。
【００５８】
なお、ステップＳ１５において第１のデータの冗長データに矛盾があると判定された場合、ステップＳ１８の処理が実行される。
【００５９】
次に、図６のフローチャートを参照して、１周目のパトロール中にホスト２０からＩＯ要求があった場合の処理手順について説明する。なお、以下の説明において、１周目のパトロールが既に実行されている論理ディスク１１の領域を完了領域、当該１周目のパトロールがまだ実行されていない論理ディスク１１の領域を未完了領域と称する。この完了領域または未完了領域は、上記したパトロールポインタによって区別される。
【００６０】
まず、コントローラ１３は、ホスト２０からのＩＯ要求を例えばＳＣＳＩまたはファイバチャネルのようなインタフェースを介して受信する（ステップＳ２１）。なお、ホスト２０からのＩＯ要求には、例えば論理ディスク１１に格納されているデータの読み出しを要求する読み出し要求または論理ディスク１１に対してデータの書き込みを要求する書き込み要求がある。
【００６１】
次に、コントローラ１３は、受信されたホスト２０からのＩＯ要求が読み出し要求（リード）であるか否かを判定する（ステップＳ２２）。これにより、コントローラ１３は、受信されたＩＯ要求が読み出し要求であるか書き込み要求であるかを判定する。
【００６２】
受信されたＩＯ要求が読み込み要求でない場合（ステップＳ２２のＮＯ）、つまり、受信されたＩＯ要求が書き込み要求である場合、コントローラ１３は、当該書き込み要求に応じたデータの書き込みの対象となる論理ディスク１１の領域が完了領域であるか否かを判定する（ステップＳ２３）。このとき、コントローラ１３は、メモリ１３１に格納されているパトロールポインタに応じて判定処理を実行する。
【００６３】
書き込みの対象となる領域が未完了領域である場合（ステップＳ２３のＮＯ）、コントローラ１３は、当該書き込み要求に応じて論理ディスク１１に書き込むデータ（書き込みデータ）の冗長データを生成する（ステップＳ２４）。
【００６４】
次に、コントローラ１３は、書き込みデータ及び生成された冗長データを論理ディスク１１に書き込む（ステップＳ２５）。
【００６５】
ここで、図７は、１周目のパトロール中の論理ディスク１１の状態を示す。なお、図７に示す論理ディスク１１は、ＲＡＩＤ５の手法による論理ディスクである。図７に示すように、論理ディスク１１は、複数のＨＤＤ（ＨＤＤ１１１〜１１４）から構成されている。また、論理ディスク１１は、例えばメモリ１３１に格納されているパトロールポインタにより完了領域及び未完了領域が区別されている。
【００６６】
このとき、例えば未完了領域に含まれる領域１１２ａに対して書き込み要求があった場合を想定する。なお、領域１１２ａは、ストライプグループ１１０に属する領域である。この場合、領域１１２ａと同一のストライプグループ１１０に属する領域（ＨＤＤ１１１の領域１１１ａ、ＨＤＤ１１３の領域１１３ａまたはＨＤＤ１１４の領域１１４ａ）に書き込みデータの冗長データが格納される。また、領域１１２ａには、書き込みデータが格納される。なお、ＲＡＩＤ５の手法による論理ディスクの場合、例えばデータが書き込まれる領域（ここでは領域１１２ａ）が属するストライプグループによって、冗長データが書き込まれる領域は異なる。ストライプグループ１１０において、例えば領域１１１ａ、１１２ａ及び１１３ａに第１のデータ（パリティグループ）が格納されている場合には、当該第１のデータの冗長データは領域１１４ａに格納される。一方、例えば領域１１１ａ、１１２ａ及び１１４ａに第１のデータ（パリティグループ）が格納されている場合には、当該第１のデータの冗長データは領域１１３ａに格納される。
【００６７】
図８を参照して、論理ディスク１１が例えばＲＡＩＤ１／１＋０の手法による論理ディスクである場合の未完了領域に対して書き込み要求があった場合の処理について具体的に説明する。
【００６８】
例えば論理ディスク１１がＲＡＩＤ１／１＋０の手法による論理ディスクの場合に未完了領域に対して書き込み要求があると、図８に示すように、書き込みデータ（ここではＭ０）がマスタディスクに書き込まれる。また、書き込みデータの冗長データ（ここでは、書き込みデータと同一のデータであるＳ０）がシャドウディスクに書き込まれる。
【００６９】
図９を参照して、論理ディスク１１が例えばＲＡＩＤ５の手法による論理ディスクである場合の未完了領域に対して書き込み要求があった場合の処理について具体的に説明する。
【００７０】
例えば論理ディスク１１がＲＡＩＤ５の手法による論理ディスクの場合に未完了領域に対して書き込み要求があると、図９に示すように、書き込みデータ（ここでは、Ｄ１）が書き込み要求に応じた領域に書き込まれる。また、書き込みデータが書き込まれた領域に対応付けられている領域（書き込みデータが書き込まれた領域と同一のストライプグループに属する領域）に格納されているデータ（Ｄ０〜Ｄｎ）から生成されるパリティデータ（ここでは、Ｐ）が、パリティグループに対応付けて格納される。ここで、パリティグループは、パリティデータＰを生成するために用いられるデータＤ０〜Ｄｎである。
【００７１】
再び図６に戻ると、ステップＳ２２において、受信されたホスト２０からのＩＯ要求が読み出し要求であると判定された場合、当該読み出し要求に応じて論理ディスク１１に対してデータの読み出し処理（リード処理）が実行される（ステップＳ２６）。コントローラ１３は、読み出されたデータをホスト２０に対して送出する。
【００７２】
また、ステップＳ２３において書き込みの対象となる領域が完了領域である場合、完了領域では既にＲＡＩＤ初期化が完了しているため、書き込みデータに基づいて当該書き込みデータの冗長データが新たに生成される。論理ディスク１１に対して、書き込みデータ及び生成された当該書き込みデータの冗長データの書き込み処理（ライト処理）が実行される（ステップＳ２７）。例えば論理ディスク１１がＲＡＩＤ１／１＋０の手法による論理ディスクの場合は、ステップＳ２４及びＳ２５と同様の処理によって、書き込み処理が実行される。
【００７３】
一方、図１０を参照して、論理ディスク１１が例えばＲＡＩＤ５の手法による論理ディスクである場合の完了領域に対して書き込み要求があった場合の処理について具体的に説明する。
【００７４】
例えば論理ディスク１１がＲＡＩＤ５の手法による論理ディスクの場合、完了領域に対して書き込み要求があった場合には、２リード２ライトで新たなパリティデータが生成できる。
【００７５】
ここで、例えば書き込み要求に応じて書き込まれる書き込みデータを新データＤ１とする。また、書き込み要求に応じて新データＤ１が書き込まれる領域に既に格納されているデータを旧データＤ１とする。また、旧データＤ１を含むパリティグループに対応付けて格納されている当該パリティグループの冗長データを旧パリティデータＰとする。
【００７６】
図１０に示すように、書き込みデータ（ここでは、新データＤ１）が書き込み要求に応じた領域に書き込まれる。このとき、完了領域には既に冗長データ（旧パリティデータＰ）が格納されている。この場合、新データＤ１が書き込まれる領域に格納されている旧データＤ１及び旧パリティデータＰが読み出される。そして、新データＤ１、読み出された旧データＤ１及び旧パリティデータＰから、当該新データＤ１を含むパリティグループの冗長データ（新パリティデータＰ）が生成される。生成された新パリティデータＰは、旧パリティデータが格納されている領域に格納（上書き）される。
【００７７】
つまり、旧データＤ１及び旧パリティデータＰが読み出され、新データＤ１及び新パリティデータＰが書き込まれることによって書き込み要求に対する冗長データの生成処理が実行される。よって、完了領域に対して書き込み要求があった場合、新データＤ１が含まれるパリティグループの全データを読み出すことなく、上記したように２リード２ライトにより冗長データの生成処理が実行できる。
【００７８】
なお、上記した図９で説明したように、書き込みデータＤ１が書き込まれた後、パリティグループの全データを読み出して（ペアリード）、新たなパリティデータを生成することも可能である。
【００７９】
次に、図１１のフローチャートを参照して、コントローラ１３による２周目以降のパトロールの処理手順について説明する。
【００８０】
まず、図３のステップＳ１２に相当するステップＳ３２の処理が実行される。次に、図３のステップＳ１４及びステップＳ１５の処理に相当するステップＳ３２及びステップＳ３３の処理が実行される。
【００８１】
第１のデータの冗長データに矛盾があると判定された場合（ステップＳ３３のＮＯ）、コントローラ１３は、エラー発生として扱う（ステップＳ３４）。
【００８２】
次に、図３のステップＳ１６〜ステップＳ１８に相当するステップＳ３５〜ステップＳ３７の処理が実行される。つまり、ステップＳ３４のエラー発生に対して、当該エラーとなった冗長データの修正処理を実行する。
【００８３】
ステップＳ３７においてパトロールが最後まで実行されたと判定された場合、当該パトロール（例えば２周目のパトロール）は完了する。そして、例えば３周目のパトロールが開始される。
【００８４】
一方、ステップＳ３７においてパトロールが最後まで実行されていないと判定された場合、図３のステップＳ１９に相当するステップＳ３８の処理が実行される。
【００８５】
なお、ここではエラー発生となった場合、当該エラー発生となった冗長データを新たに生成し、格納する（修正する）ものとして説明したが、例えば説明したように当該冗長データを修正するかまたはそのまま（修正処理は実行しない）にするかは、例えばストレージ装置１０の仕様に応じて決定される。
【００８６】
上記したように本実施形態においては、論理ディスク（例えば論理ディスク１１）の作成後に、コントローラ１３に含まれるメモリ１３１に正常状態を設定し、パトロールを開始する。このとき、第１のデータの冗長データに矛盾がある場合には、当該第１のデータの冗長データを生成する。また、パトロールの未完了領域に対してホスト２０から書き込み要求があった場合には、書き込みデータの冗長データを作成する。これにより、例えばホスト２０は、論理ディスク１１の作成後すぐに正常状態と同様に論理ディスク１１を使用することが可能となる。
【００８７】
なお、本実施形態において、例えば論理ディスク１１の１周目のパトロールの実行中に、例えば論理ディスク１１を構成する複数のＨＤＤのうちの１つが故障した場合であっても、パトロールの完了領域及び例えばホスト２０により書き込み要求があった領域については、既に冗長データが生成済みであるので当該故障により損失したデータを復元することができる。一方、パトロールの未完了領域については、冗長データはまだ生成されていないため、ＨＤＤの故障により損失したデータについては復元できない。しかしながら、未完了領域は、論理ディスク１１が作成されてからホスト２０による書き込み要求がない（つまり、データが書き込まれていない）領域であるので、有効なデータは格納されていないため問題はない。
【００８８】
［第１の変形例］
次に、図１２を参照して、本実施形態に係る第１の変形例について説明する。なお、本変形例に係るストレージ装置１０の構成については、前述した本実施形態に係るストレージ装置１０と同様の構成であるので、図１を用いて説明する。以下の各変形例についても同様にして図１を用いて説明する。
【００８９】
本変形例においては、前述した本実施形態とは異なり、１周目のパトロールの際、上述した第１のデータの冗長データに矛盾があるか否かの判定処理は実行されず、例えば論理ディスク１１に格納されている全てのデータの冗長データを生成することを特徴とする。
【００９０】
図１２のフローチャートを参照して、本変形例におけるコントローラ１３による１周目のパトロールの処理手順について説明する。
【００９１】
まず、図３のステップＳ１１〜ステップＳ１３の処理に相当するステップＳ４１〜ステップＳ４３の処理が実行される。
【００９２】
次に、コントローラ１３は、パトロールポインタが設定されている領域に格納されているデータを読み出す（ステップＳ４４）。このとき、コントローラ１３は、予め定められているパトロールの実行単位分のデータを読み出す。
【００９３】
コントローラ１３は、読み出されたデータの冗長データを生成する（ステップＳ４５）。コントローラ１３は、生成された冗長データを、読み出されたデータに対応付けて論理ディスク１１に格納する（ステップＳ４６）。
【００９４】
ここで、図１３及び図１４を参照して、上記した図１２のステップＳ４４〜ステップＳ４６の処理について説明する。図１３は、例えば論理ディスク１１がＲＡＩＤ１／１＋０の手法により作成された論理ディスクである場合の図１２のステップＳ４４〜ステップＳ４６の処理について具体的に説明するための図である。
【００９５】
図１３に示すように、論理ディスク１１がＲＡＩＤ１／１＋０の手法による論理ディスクの場合には、コントローラ１３は、データＭ０を読み出す。なお、このデータＭ０が格納されているのは、マスタディスクである。そして、コントローラ１３は、読み出された例えばデータＭ０（マスタデータ）の冗長データ（シャドウデータ）Ｓ０を生成する。なお、この冗長データＳ０は、データＭ０と同一のデータである。コントローラ１３は、生成された冗長データＳ０を、データＭ０に対応付けて論理ディスク１１に格納する。なお、データＭ０以外のマスタデータ、例えばデータＭ１〜Ｍｎについても同様である。
【００９６】
図１４は、例えば論理ディスク１１がＲＡＩＤ５の手法により作成された論理ディスクである場合の図１２のステップＳ４４〜ステップＳ４６の処理について具体的に説明するための図である。
【００９７】
図１４に示すように、論理ディスク１１がＲＡＩＤ５の手法による論理ディスクの場合には、コントローラ１３は、データＤ０〜Ｄｎ（パリティグループ）を読み出す。そして、コントローラ１３は、データＤ０〜Ｄｎから冗長データ（パリティデータ）Ｐを生成する。なお、この冗長データは、例えばデータＤ０〜Ｄｎの排他的論理和により算出される。コントローラ１３は、生成された冗長データＰを、データＤ０〜Ｄｎに対応付けて論理ディスク１１に格納する。
【００９８】
再び図１２に戻ると、図３のステップＳ１８の処理に相当するステップＳ４７の処理が実行される。このステップＳ４７の処理において１周目のパトロールが最後まで実行されていないと判定された場合、コントローラ１３は、パトロールポインタを進めてメモリ１３１に設定する（ステップＳ４８）。パトロールポインタがメモリ１３１に設定されると、ステップＳ４４に戻って処理が繰り返される。
【００９９】
一方、ステップＳ４７において１周目のパトロールが論理ディスク１１の最後まで実行されたと判定された場合、コントローラ１３は、例えば周期的に２周目以降のパトロールを開始する（ステップＳ４９）。なお、２周目以降のパトロールの処理は、前述した本実施形態と同様である。
【０１００】
上記したように本変形例においては、論理ディスク１１の作成後に、コントローラ１３に含まれるメモリ１３１に正常状態を設定し、パトロールを開始する。このとき、論理ディスク１１に格納されている全てのデータに対して冗長データを生成（ＲＡＩＤ初期化）することで、例えばホスト２０は、論理ディスク１１の作成後すぐに正常状態と同様に論理ディスク１１を使用することが可能となる。
【０１０１】
［第２の変形例］
次に、図１５〜図１８を参照して、本実施形態に係る第２の変形例について説明する。本変形例においては、前述した本実施形態における１周目のパトロールの際に、例えば論理ディスク１１に格納されているデータの正しさを確認するためのチェックコードを生成することを特徴とする。このチェックコードは、データに付加される確認用のコードである。
【０１０２】
図１５は、上記したチェックコードのデータ構造の一例を示す。図１５に示すように、チェックコード１０１は、例えば１セクタ５１２バイトのデータ１００に付加される８バイトのコードである。このチェックコード１０１には、例えばＬＤＩＳＫ番号１０２、論理ブロックアドレス（ＬＢＡ：Logical Block Address）１０３、及びＣＲＣ（Cyclic Redundancy Check）１０４が含まれる。
【０１０３】
チェックコード１０１に含まれるＬＤＩＳＫ番号１０２及び論理ブロックアドレス１０３によって、当該チェックコード１０１が付加されたデータが保存（格納）されている場所が正しいか否かをチェックできる。また、チェックコード１０１に含まれるＣＲＣ１０４によって、当該チェックコード１０１が付加されたデータの中身（内容）が正しいか否かを確認することができる。
【０１０４】
次に、図１６のフローチャートを参照して、本変形例におけるコントローラ１３による１周目のパトロールの処理手順について説明する。
【０１０５】
まず、前述した図３のステップＳ１１〜ステップＳ１４に相当するステップＳ５１〜ステップＳ５４の処理が実行される。なお、前述した図３のステップＳ１４と同様に、ステップＳ５４で読み出された第１のデータは、パトロールポインタが設定されている領域に格納されているデータである。また、第２のデータは、第１のデータの冗長データが格納されるべき領域（つまり、第１のデータが格納されている領域に対応付けられている領域）に格納されているデータである。
【０１０６】
次に、コントローラ１３は、読み出された第１のデータのチェックコードに矛盾があるか否かを判定する（ステップＳ５５）。コントローラ１３は、読み出された第１のデータに（正しい）チェックコードが付加されているか否かを判定する（ステップＳ５５）。このとき処理している領域は１周目のパトロールが完了していない領域（未完了領域）であるので、この領域のデータのチェックコードは生成されていない。このため、第１のデータのチェックコードには矛盾がある。
【０１０７】
しかしながら、後述するが、未完了領域に対してホスト２０からの書き込み要求があった場合には、当該要求に応じて書き込まれるデータのチェックコードが生成される。よって、未完了領域であっても書き込み要求があった領域については、第１のデータのチェックコードには矛盾がない。このような１周目のパトロール実行中に未完了領域に対してホスト２０からのＩＯ要求があった場合の処理については後述する。
【０１０８】
第１のデータのチェックコードに矛盾があると判定された場合（ステップＳ５５のＹＥＳ）、前述した図３のステップＳ１５に相当するステップＳ５６の処理が実行される。
【０１０９】
第１のデータの冗長データに矛盾があると判定された場合（ステップＳ５６のＹＥＳ）、コントローラ１３は、第１のデータの冗長データ及び当該第１のデータに付加するためのチェックコードを生成する（ステップＳ５７）。
【０１１０】
コントローラ１３は、生成された第１のデータの冗長データを、当該第１のデータに対応付けて論理ディスク１１に書き込む。つまり、コントローラ１３は、第１のデータの冗長データを第２のデータが格納されていた領域に書き込む。また、コントローラ１３は、生成されたチェックコードを第１のデータに付加して書き込む（ステップＳ５８）。
【０１１１】
次に、前述した図３のステップＳ１８に相当するステップＳ５９の処理が実行される。このステップＳ５９の処理において１周目のパトロールが最後まで実行されていないと判定された場合、コントローラ１３は、パトロールポインタを進めてメモリ１３１に設定する（ステップＳ６０）。パトロールポインタがメモリ１３１に設定されると、ステップＳ５４に戻って処理が繰り返される。
【０１１２】
ステップＳ５９において１周目のパトロールが論理ディスク１１の最後まで実行されたと判定された場合、コントローラ１３は、例えば周期的に２周目以降のパトロールを開始する（ステップＳ６１）。なお、２周目以降のパトロールの処理は、前述した本実施形態と同様である。
【０１１３】
一方、ステップＳ５５において第１のデータのチェックコードに矛盾がないと判定された場合、上記したステップＳ５６と同様の処理であるステップＳ６２の処理が実行される。
【０１１４】
第１のデータの冗長データに矛盾があると判定された場合（ステップＳ６２のＹＥＳ）、コントローラ１３は、前述した図３のステップＳ１６及びステップＳ１７に相当するステップＳ６３及びステップＳ６４の処理が実行される。ステップＳ６３及びステップＳ６４の処理が実行されると、上記したステップＳ５９の処理が実行される。
【０１１５】
一方、ステップ６２において第１のデータの冗長データに矛盾がないと判定された場合には、ステップＳ５９の処理が実行される。
【０１１６】
また、ステップＳ５６において第１のデータの冗長データ及び第２のデータが一致すると判定された場合、コントローラ１３は、第１のデータのチェックコードを生成する（ステップＳ６５）。コントローラ１３は、生成されたチェックコードを第１のデータに付加して書き込む（ステップＳ６６）。ステップＳ６６の処理が実行されると、上記したステップＳ５９の処理が実行される。
【０１１７】
次に、図１７のフローチャートを参照して、１周目のパトロール中にホスト２０からＩＯ要求があった場合の処理手順について説明する。なお、以下の説明において、１周目のパトロールが既に実行されている論理ディスク１１の領域を完了領域、当該１周目のパトロールがまだ実行されていない論理ディスク１１の領域を未完了領域とする。この完了領域または未完了領域は、パトロールポインタによって区別される。
【０１１８】
まず、前述した図６のステップＳ２１及びステップＳ２２の処理に相当するステップＳ７１及びステップＳ７２の処理が実行される。ステップＳ７２において、受信されたＩＯ要求が読み込み要求でないと判定された場合、前述した図６のステップＳ２３の処理に相当するステップＳ２３の処理が実行される。
【０１１９】
書き込みの対象となる領域が未完了領域である場合（ステップＳ７３のＮＯ）、コントローラ１３は、当該書き込み要求に応じて論理ディスク１１に書き込むデータ（書き込みデータ）の冗長データ及び当該書き込みデータに付加するためのチェックコードを生成する（ステップＳ７４）。
【０１２０】
次に、コントローラ１３は、生成された冗長データ及び生成されたチェックコードが付加された書き込みデータを論理ディスク１１に書き込む（ステップＳ７５）。
【０１２１】
ここで、図１８は、１周目のパトロール中の論理ディスク１１の状態を示す。なお、図１８に示す論理ディスク１１は、ＲＡＩＤ５の手法による論理ディスクである。図１８に示すように、論理ディスク１１は、複数のＨＤＤ（ＨＤＤ１１１〜１１４）から構成されている。また、論理ディスク１１は、例えばメモリ１３１に格納されているパトロールポインタにより完了領域及び未完了領域が区別されている。
【０１２２】
このとき例えば未完了領域に含まれる領域１１２ｂに対して書き込み要求があった場合には、当該領域１１２ｂに書き込まれる書き込みデータに付加されてチェックコードが例えば領域１１２ｃに書き込まれる。
【０１２３】
なお、書き込みデータの冗長データについては前述した図７と同様であるので、その詳しい説明は省略する。
【０１２４】
再び図１７に戻ると、ステップＳ７２において、受信されたホスト２０からのＩＯ要求が読み出し要求であると判定された場合、前述した図６のステップＳ２６と同様の処理が実行される。
【０１２５】
一方、ステップＳ７３において書き込みの対象となる領域が完了領域である場合、完了領域では既にＲＡＩＤ初期化及びチェックコードの生成が完了しているため、書き込みデータに基づいて当該書き込みデータの冗長データ及び当該書き込みデータのチェックコードが新たに生成される。そして、生成された当該書き込みデータの冗長データ及び生成されたチェックコードが付加された書き込みデータが論理ディスク１１に書き込まれる（ステップＳ７７）。
【０１２６】
上記したように本変形例においては、論理ディスク１１の作成後に、コントローラ１３に含まれるメモリ１３１に正常状態を設定し、パトロールを開始する。このとき、ＲＡＩＤ初期化と共に、第１のデータのチェックコードに矛盾がある場合には、当該第１のデータのチェックコードを生成する。これにより、１周目のパトロール中に、ＲＡＩＤ初期化だけでなく、当該論理ディスク１１に格納されている第１のデータにチェックコードを付加することが可能となる。また、本変形例においては、１周目のパトロールの未完了領域に対してホスト２０から書き込み要求があった場合にも、書き込みデータのチェックコードを付加することが可能となる。
【０１２７】
［第３の変形例］
次に、図１９を参照して、本実施形態に係る第３の変形例について説明する。本変形例においては、前述した第１の変形例における１周目のパトロールの際に、第２の変形例と同様に例えば論理ディスク１１に格納されているデータのチェックコードを生成することを特徴とする。
【０１２８】
図１９のフローチャートを参照して、本変形例におけるコントローラ１３による１周目のパトロールの処理手順について説明する。
【０１２９】
まず、前述した図１２のステップＳ４１からステップＳ４４の処理に相当するステップＳ８１からステップＳ８４の処理が実行される。
【０１３０】
次に、コントローラ１３は、ステップＳ４４において読み出されたデータの冗長データ及び当該読み出されたデータに付加するためのチェックデータを生成する（ステップＳ４５）。
【０１３１】
コントローラ１３は、生成された冗長データを論理ディスク１１に書き込む。また、コントローラ１３は、生成されたチェックデータをステップＳ４４において読み出されたデータに付加して書き込む（ステップＳ８６）。
【０１３２】
前述した図１２のステップＳ４７の処理に相当するステップＳ８７の処理が実行される。このステップＳ８７の処理において１周目のパトロールが最後まで実行されていないと判定された場合に、コントローラ１３は、パトロールポインタを進めてメモリ１３１に設定する（ステップＳ８８）。パトロールポインタがメモリ１３１に設定されると、ステップＳ８４に戻って処理が繰り返される。
【０１３３】
ステップＳ８７において１周目のパトロールが論理ディスク１１の最後まで実行されたと判定された場合、コントローラ１３は、例えば周期的に２周目以降のパトロールを開始する（ステップＳ８９）。なお、２周目以降のパトロールの処理は、前述した本実施形態と同様である。
【０１３４】
上記したように本変形例においては、論理ディスク１１の作成後に、コントローラ１３に含まれるメモリ１３１に正常状態を設定し、パトロールを開始する。このとき、ＲＡＩＤ初期化と共に、論理ディスク１１に格納されている全てのデータに対してチェックコードを生成する。これにより、１周目のパトロール中に、ＲＡＩＤ初期化だけでなく、当該論理ディスク１１に格納されているデータにチェックコードを付加することが可能となる。また、本変形例においても、前述した第２の変形例と同様に、１周目のパトロールの未完了領域に対してホスト２０から書き込み要求があった場合にも、書き込みデータのチェックコードを付加することが可能となる。
【０１３５】
なお、本願発明は、上記実施形態またはその各変形例そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態またはその各変形例に開示されている複数の構成要素の適宜な組合せにより種々の発明を形成できる。例えば、実施形態またはその各変形例に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態またはその各変形例に亘る構成要素を適宜組合せてもよい。
【図面の簡単な説明】
【０１３６】
【図１】本発明の実施形態に係るストレージ装置を備えた計算機システムの構成を示すブロック図。
【図２】論理ディスク１１が作成された場合のコントローラ１３の動作について説明するための図。
【図３】コントローラ１３による１周目のパトロールの処理手順を示すフローチャート。
【図４】論理ディスク１１がＲＡＩＤ１／１＋０の手法により作成された論理ディスクである場合の処理について具体的に説明するための図。
【図５】論理ディスク１１がＲＡＩＤ５の手法により作成された論理ディスクである場合の処理について具体的に説明するための図。
【図６】１周目のパトロール中にホスト２０からＩＯ要求があった場合の処理手順を示すフローチャート。
【図７】１周目のパトロール中の論理ディスク１１の状態を示す図。
【図８】論理ディスク１１がＲＡＩＤ１／１＋０の手法による論理ディスクである場合の未完了領域に対して書き込み要求があった場合の処理について具体的に説明するための図。
【図９】論理ディスク１１がＲＡＩＤ５の手法による論理ディスクである場合の未完了領域に対して書き込み要求があった場合の処理について具体的に説明するための図。
【図１０】論理ディスク１１がＲＡＩＤ５の手法による論理ディスクである場合の完了領域に対して書き込み要求があった場合の処理について具体的に説明するための図。
【図１１】コントローラ１３による２周目以降のパトロールの処理手順を示すフローチャート。
【図１２】本実施形態の第１の変形例におけるコントローラ１３による１周目のパトロールの処理手順を示すフローチャート。
【図１３】論理ディスク１１がＲＡＩＤ１／１＋０の手法により作成された論理ディスクである場合の処理について具体的に説明するための図。
【図１４】論理ディスク１１がＲＡＩＤ５の手法により作成された論理ディスクである場合の処理について具体的に説明するための図。
【図１５】チェックコードのデータ構造の一例を示す図。
【図１６】本実施形態の第２の変形例におけるコントローラ１３による１周目のパトロールの処理手順を示すフローチャート。
【図１７】１周目のパトロール中にホスト２０からＩＯ要求があった場合の処理手順を示すフローチャート。
【図１８】１周目のパトロール中の論理ディスク１１の状態を示す図。
【図１９】本実施形態の第３の変形例におけるコントローラ１３による１周目のパトロールの処理手順を示すフローチャート。
【符号の説明】
【０１３７】
１０…ストレージ装置、１１，１２…論理ディスク、１３…コントローラ、２０…ホスト、１１１，１１２，１２１，１２２…ＨＤＤ（格納装置）、１３１…メモリ、１３２…不揮発性メモリ、１３３…マイクロプロセッサ。
【図１】
2008257360.tif 000003
【図２】
2008257360.tif 000004
【図３】
2008257360.tif 000005
【図４】
2008257360.tif 000006
【図５】
2008257360.tif 000007
【図６】
2008257360.tif 000008
【図７】
2008257360.tif 000009
【図８】
2008257360.tif 000010
【図９】
2008257360.tif 000011
【図１０】
2008257360.tif 000012
【図１１】
2008257360.tif 000013
【図１２】
2008257360.tif 000014
【図１３】
2008257360.tif 000015
【図１４】
2008257360.tif 000016
【図１５】
2008257360.tif 000017
【図１６】
2008257360.tif 000018
【図１７】
2008257360.tif 000019
【図１８】
2008257360.tif 000020
【図１９】
2008257360.tif 000021