(57)【要約】【課題】論理フォーマットの完了前の記憶媒体へのアクセスにおいて記憶媒体の負荷の増加の抑制およびフォーマット完了までの時間の短縮が可能になる。【解決手段】管理情報記憶部１ｃは、記憶媒体１ｂ１〜１ｂ４の記憶領域について論理フォーマットが行われたか否かを示す管理情報を記憶する。アクセス部１ａは、記憶媒体１ｂ１〜１ｂ４のフォーマットの際に、記憶媒体１ｂ１〜１ｂ４に設定されたストライプに未フォーマット識別子を書き込み、ストライプを構成する記憶領域への新規データの書き込みのアクセスの際に、アクセスの対象のストライプを構成する記憶領域に記憶されている既存データを読み出し、読み出した既存データから未フォーマット識別子を検出した場合には、アクセスの対象のストライプの記憶領域に新規データまたはフォーマットデータを書き込む。【選択図】図１
2011215682.tif 000002
【特許請求の範囲】
【請求項１】
複数の記憶媒体の記憶領域から構成されたストライプによりデータを分散して記憶するストレージ装置において、
前記複数の記憶媒体のフォーマットの際に、ストライプを構成する複数の記憶媒体の記憶領域の少なくとも一部にフォーマットが完了していないことを示す未フォーマット識別子を書き込み、前記ストライプを構成する記憶領域への新規データの書き込みのアクセスの際に、前記アクセスの対象のストライプを構成する記憶領域に記憶されている既存データを読み出し、読み出した既存データから前記未フォーマット識別子を検出した場合には、前記アクセスの対象のストライプを構成する記憶領域に前記新規データまたはフォーマットにより書き込まれるフォーマットデータを書き込むアクセス部を有することを特徴とするストレージ装置。
【請求項２】
前記アクセス部は、前記記憶媒体の記憶領域へのアクセスの際に、前記アクセスの対象のストライプを構成する記憶領域に記憶されている既存データを読み出し、前記読み出した既存データから前記未フォーマット識別子を検出した場合であって、前記アクセスにおいて前記アクセスの対象のストライプに前記新規データを書き込むときには、前記アクセスの対象のストライプを構成する記憶領域に当該新規データを書き込み、前記アクセスにおいて前記アクセスの対象のストライプに前記新規データを書き込まないときには、前記アクセスの対象のストライプを構成する記憶領域に前記フォーマットデータを書き込むことを特徴とする請求項１記載のストレージ装置。
【請求項３】
前記アクセス部は、前記記憶媒体の記憶領域へのアクセスの際に、前記アクセス対象のストライプを構成する記憶領域に記憶されている既存データを読み出し、
前記読み出した既存データから前記未フォーマット識別子を検出した場合、前記アクセスの対象のストライプを構成する記憶領域のうち、前記新規データを書き込む記憶領域に当該新規データを書き込み、前記新規データを書き込まない記憶領域に前記フォーマットデータを書き込むことを特徴とする請求項１記載のストレージ装置。
【請求項４】
前記アクセス部は、前記記憶媒体の記憶領域の記憶内容を順次読み出し、当該記憶領域から未フォーマット識別子を検出した場合には、前記アクセスの対象のストライプに前記フォーマットデータを書き込むことを特徴とする請求項１記載のストレージ装置。
【請求項５】
前記アクセス部は、前記ストライプへの新規データの書き込みのアクセスにより前記ストライプに記憶されている既存データのうちの一部の記憶領域を前記新規データにより更新する場合、前記新規データにより更新しない既存データを前記ストライプから読み出し、前記新規データと読み出した既存データとにより更新後のパリティデータである新規パリティを算出し、前記ストライプに記憶されている、前記新規データにより更新する既存データを前記新規データで更新すると共に、前記ストライプの更新前のパリティデータである既存パリティを前記新規パリティで更新することを特徴とする請求項１記載のストレージ装置。
【請求項６】
前記アクセス部は、前記ストライプへの新規データの書き込みのアクセスにより前記ストライプに記憶されている既存データのうちの一部を前記新規データにより更新する場合、前記新規データにより更新する既存データと前記ストライプの更新前のパリティデータである既存パリティとを読み出し、前記新規データと読み出した既存データと読み出した既存パリティとにより更新後のパリティデータである新規パリティを算出し、前記ストライプに記憶されている、前記新規データにより更新する既存データを前記新規データで更新すると共に、前記既存パリティを前記新規パリティで更新することを特徴とする請求項１記載のストレージ装置。
【請求項７】
複数の記憶媒体の記憶領域から構成されたストライプによりデータを分散して記憶するストレージ装置を制御するストレージ装置制御プログラムにおいて、
コンピュータを、
前記複数の記憶媒体のフォーマットの際に、ストライプを構成する複数の記憶媒体の記憶領域の少なくとも一部にフォーマットが完了していないことを示す未フォーマット識別子を書き込み、前記ストライプを構成する記憶領域への新規データの書き込みのアクセスの際に、前記アクセスの対象のストライプを構成する記憶領域に記憶されている既存データを読み出し、読み出した既存データから前記未フォーマット識別子を検出した場合には、前記アクセスの対象のストライプを構成する記憶領域に前記新規データまたはフォーマットにより書き込まれるフォーマットデータを書き込むアクセス部として機能させることを特徴とするストレージ装置制御プログラム。
【請求項８】
複数の記憶媒体の記憶領域から構成されたストライプによりデータを分散して記憶するストレージ装置を制御するストレージ装置制御方法において、
前記複数の記憶媒体のフォーマットの際に、ストライプを構成する複数の記憶媒体の記憶領域の少なくとも一部にフォーマットが完了していないことを示す未フォーマット識別子を書き込み、
前記ストライプを構成する記憶領域への新規データの書き込みのアクセスの際に、前記アクセスの対象のストライプを構成する記憶領域に記憶されている既存データを読み出し、
読み出した既存データから前記未フォーマット識別子を検出した場合には、前記アクセスの対象のストライプを構成する記憶領域に前記新規データまたはフォーマットにより書き込まれるフォーマットデータを書き込む、
ことを特徴とするストレージ装置制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本件は、ストレージ装置、ストレージ装置制御プログラムおよびストレージ装置制御方法に関する。
【背景技術】
【０００２】
磁気ディスク、光磁気ディスク、光ディスク等の記憶媒体を利用したストレージ装置では、記憶媒体をデータの読み書きに使用するために、予め記憶媒体を初期化するフォーマット処理が必要である。フォーマット処理には、記憶媒体のデジタル信号列をストレージ装置で読み書き可能な状態に規定パターンで書き直す物理フォーマットと、データ領域をホストＯＳの処理単位（例えば、ブロック単位）に区切って識別を施す論理フォーマットとがある。
【０００３】
物理フォーマットは、媒体のトラック単位の初期化処理であり、論理フォーマットは、物理フォーマットされたトラックのデータ領域のブロック単位のフォーマット処理を意味する。論理フォーマットでは、通常、媒体の全てのブロックについて処理が完了するまでに長時間（例えば、３０分以上）を要する。このため、記憶媒体を使用する際には、予め初期化処理としてフォーマット処理をフォーマットが完了するまで長時間待つ必要があった。
【０００４】
これに対して、例えば、ホストコンピュータ等によるアクセス要求が、フォーマットが完了していない領域に対する要求である場合には当該領域に対して先に論理フォーマットを実行してから要求を受け付けたアクセスを行う等により、記憶媒体の接続後であって論理フォーマットが完了していない状態でもホストコンピュータ等のアクセス要求の受け付けを可能にする技術が知られている。これによって、ホストコンピュータは、論理フォーマットの完了を待たずに接続された記憶媒体にアクセス要求を行うことができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００３−２９９３３号公報
【特許文献２】特開２００３−２９９３４号公報
【特許文献３】特開２００３−２４１９０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、上記の技術では、ホストコンピュータからアクセス要求がされた場合に、論理フォーマットおよびアクセスの両方の処理が連続して行われるので記憶媒体へのアクセス回数が増加し、ストレージ装置の処理の負荷および記憶媒体への負荷が大きいという問題点がある。
【０００７】
また、ホストコンピュータからのフォーマットが完了していない記憶領域に対するアクセス要求を受け付けた場合には、通常のアクセス要求の処理に比較してアクセス要求のデータを退避させる等の処理が加わり、アクセス要求の処理に要する時間が増加してアクセス要求の処理が遅延することになる。このため、なるべく早くフォーマット処理が完了した状態に移行させる方が望ましい。
【０００８】
本件はこのような点に鑑みてなされたものであり、論理フォーマットの完了前の記憶媒体へのアクセスにおいて記憶媒体の負荷の増加の抑制およびフォーマット完了までの時間の短縮が可能なストレージ装置、ストレージ装置制御プログラムおよびストレージ装置制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するために以下のようなストレージ装置が提供される。このストレージ装置は、複数の記憶媒体の記憶領域から構成されたストライプによりデータを分散して記憶する。このストレージ装置では、アクセス部は、複数の記憶媒体のフォーマットの際に、ストライプを構成する複数の記憶媒体の記憶領域の少なくとも一部にフォーマットが完了していないことを示す未フォーマット識別子を書き込み、ストライプを構成する記憶領域への新規データの書き込みのアクセスの際に、アクセスの対象のストライプを構成する記憶領域に記憶されている既存データを読み出し、読み出した既存データから未フォーマット識別子を検出した場合には、アクセスの対象のストライプを構成する記憶領域に新規データまたはフォーマットにより書き込まれるフォーマットデータを書き込む。
【００１０】
また、上記目的を達成するために以下のようなストレージ装置制御プログラムが提供される。このストレージ装置制御プログラムは、複数の記憶媒体の記憶領域から構成されたストライプによりデータを分散して記憶するストレージ装置を制御する。このストレージ装置制御プログラムでは、コンピュータを、複数の記憶媒体のフォーマットの際に、ストライプを構成する複数の記憶媒体の記憶領域の少なくとも一部にフォーマットが完了していないことを示す未フォーマット識別子を書き込み、ストライプを構成する記憶領域への新規データの書き込みのアクセスの際に、アクセスの対象のストライプを構成する記憶領域に記憶されている既存データを読み出し、読み出した既存データから未フォーマット識別子を検出した場合には、アクセスの対象のストライプを構成する記憶領域に新規データまたはフォーマットにより書き込まれるフォーマットデータを書き込むアクセス部として機能させる。
【００１１】
また、上記目的を達成するために以下のようなストレージ装置制御方法が提供される。このストレージ装置制御方法は、複数の記憶媒体の記憶領域から構成されたストライプによりデータを分散して記憶するストレージ装置を制御する。このストレージ装置制御方法では、複数の記憶媒体のフォーマットの際に、ストライプを構成する複数の記憶媒体の記憶領域の少なくとも一部にフォーマットが完了していないことを示す未フォーマット識別子を書き込む。次に、ストライプを構成する記憶領域への新規データの書き込みのアクセスの際に、アクセスの対象のストライプを構成する記憶領域に記憶されている既存データを読み出す。次に、読み出した既存データから未フォーマット識別子を検出した場合には、アクセスの対象のストライプを構成する記憶領域に新規データまたはフォーマットにより書き込まれるフォーマットデータを書き込む。
【発明の効果】
【００１２】
開示のストレージ装置、ストレージ装置制御プログラムおよびストレージ装置制御方法によれば、論理フォーマットの完了前の記憶媒体のアクセス時に記憶媒体の負荷の増加の抑制が可能となり、また、フォーマット完了までの時間の短縮が可能となる。
【図面の簡単な説明】
【００１３】
【図１】第１の実施の形態のストレージ装置を示す図である。
【図２】第２の実施の形態のストレージ装置のハードウェア構成を示す図である。
【図３】第２の実施の形態のストレージ装置で記憶されるデータのデータ構造例を示す図である。
【図４】第２の実施の形態のストレージ装置の機能を示すブロック図である。
【図５】第２の実施の形態のＢａｎｄｗｉｄｔｈ  Ｗｒｉｔｅを示す図である。
【図６】第２の実施の形態のＲｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅを示す図である。
【図７】第２の実施の形態のＳｍａｌｌ  Ｗｒｉｔｅを示す図である。
【図８】第２の実施の形態の未フォーマット識別子を書き込む動作を示す図である。
【図９】第２の実施の形態の未フォーマット識別子が書き込まれた記憶領域を示す図である。
【図１０】第２の実施の形態の未フォーマット識別子の書き込み中にデータの書き込みが競合した場合の動作を示す図である。
【図１１】第２の実施の形態のデータをＳｍａｌｌ  Ｗｒｉｔｅにより書き込む場合において記憶領域に未フォーマット識別子が書き込まれていたときの動作を示す図である。
【図１２】第２の実施の形態のデータをＲｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅにより書き込む場合において記憶領域に未フォーマット識別子が書き込まれていたときの動作を示す図である。
【図１３】第２の実施の形態のデータをＳｍａｌｌ  Ｗｒｉｔｅにより書き込む場合に読み出しエラーが生じたときの動作を示す図である。
【図１４】第２の実施の形態のデータをＳｍａｌｌ  Ｗｒｉｔｅにより書き込む場合に読み出しエラーが生じたときの動作を示す図である。
【図１５】第２の実施の形態のデータをＲｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅにより書き込む場合に読み出しエラーが生じたときの動作を示す図である。
【図１６】第２の実施の形態のデータをＲｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅにより書き込む場合に読み出しエラーが生じたときの動作を示す図である。
【図１７】第２の実施の形態の未フォーマット識別子が検出された領域に対して論理フォーマットが行われる場合の動作を示す図である。
【図１８】第２の実施の形態の未フォーマット識別子書き込み処理の手順を示すフローチャートである。
【図１９】第２の実施の形態のフォーマット中データ書き込み処理の手順を示すフローチャートである。
【図２０】第２の実施の形態の未フォーマット識別子検出処理の手順を示すフローチャートである。
【図２１】第２の実施の形態の未フォーマット識別子書き込み完了後データ書き込み処理の手順を示すフローチャートである。
【図２２】第２の実施の形態の未フォーマット識別子書き込み完了後データ書き込み処理の手順を示すフローチャートである。
【図２３】第２の実施の形態の未フォーマット識別子書き込み完了後データ書き込み処理の手順を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下、実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態のストレージ装置を示す図である。本実施の形態のストレージ装置１は、アクセス部１ａ、記憶媒体１ｂ１，１ｂ２，１ｂ３，１ｂ４、管理情報記憶部１ｃを有する。
【００１５】
記憶媒体１ｂ１，１ｂ２，１ｂ３，１ｂ４は、データを記憶可能な記憶領域を有する。記憶媒体１ｂ１，１ｂ２，１ｂ３，１ｂ４には、それぞれの記憶媒体の一部の記憶領域で構成されるストライプが設定されている。記憶媒体１ｂ１，１ｂ２，１ｂ３，１ｂ４が有する記憶領域に対して、ストライプ単位でアクセス部１ａによりデータが記憶される。
【００１６】
管理情報記憶部１ｃは、記憶媒体１ｂ１，１ｂ２，１ｂ３，１ｂ４の記憶領域について論理フォーマットが行われたか否かを示す管理情報を記憶する。
アクセス部１ａは、記憶媒体１ｂ１，１ｂ２，１ｂ３，１ｂ４の初期化の際に複数の記憶媒体１ｂ１，１ｂ２，１ｂ３，１ｂ４のストライプの少なくとも一部に論理フォーマットが完了していないことを示す未フォーマット識別子を書き込むと共に、未フォーマット識別子を書き込んだストライプを構成する記憶領域について論理フォーマットが完了した旨を示す管理情報を、管理情報記憶部１ｃに対して記憶させる。
【００１７】
ここで、未フォーマット識別子は、例えば、データの所定の位置に特定の値が設定されている所定のデータ構造を有するデータとすることができる。未フォーマット識別子は、記憶媒体１ｂ１〜１ｂ４のストライプに記憶される。未フォーマット識別子が記憶されているストライプは、管理情報上は論理フォーマットが完了したものとして扱われているが、実際は論理フォーマットが完了していない。
【００１８】
次に、アクセス部１ａは、ストライプの記憶領域への新規データの書き込みのアクセスの際に、アクセスの対象のストライプの記憶領域に記憶されている既存データを読み出す。
【００１９】
次に、アクセス部１ａは、アクセス対象のストライプから読み出した既存データから未フォーマット識別子を検出した場合には、アクセスの対象のストライプに新規データまたは論理フォーマットにより書き込まれるフォーマットデータを書き込む。ここで、未フォーマット識別子は、読み出したデータが所定の位置に特定の値を有するか否かによって検出することができる。
【００２０】
なお、本実施の形態のストレージ装置１は、記憶媒体１ｂ１，１ｂ２，１ｂ３，１ｂ４の４個の記憶媒体を有するが、これに限らず、記憶媒体は３個以下であってもよく、５個以上であってもよい。
【００２１】
このように、ストレージ装置１では、アクセス部１ａは、記憶媒体の初期化時に、記憶媒体をフォーマットせずに未フォーマット識別子を記憶媒体のストライプの一部を構成する記憶領域に書き込み、後で未フォーマット識別子をストライプから検出した際に、書き込み対象のデータまたはフォーマットデータをストライプに書き込む。これにより、アクセス部１ａによる論理フォーマットの完了前の記憶媒体１ｂ１，１ｂ２，１ｂ３，１ｂ４のアクセス時に、記憶媒体１ｂ１，１ｂ２，１ｂ３，１ｂ４の負荷の増加の抑制が可能となり、また、フォーマット完了までの時間の短縮が可能となる。
【００２２】
［第２の実施の形態］
次に、ストレージ装置１を、ＲＡＩＤ(Redundant Arrays of Inexpensive Disks)を構成するストレージ群を有するストレージ装置１００に適用した実施の形態を、第２の実施の形態として説明する。
【００２３】
図２は、第２の実施の形態のストレージ装置のハードウェア構成を示す図である。ストレージ装置１００は、装置全体の制御を行う制御部１１０ａ，１１０ｂ、記憶デバイス１２０ｃ〜１２０ｆ、制御部１１０ａ，１１０ｂとホストコンピュータ３００との接続制御を行うチャネルアダプタ１３０ｃ〜１３０ｆを有する。
【００２４】
ストレージ装置１００は、記憶デバイス１２０ｃ〜１２０ｆに対するデータの入出力を行う。ストレージ装置１００は、ＲＡＩＤ０〜６等のディスクアレイの機能を有し、複数の記憶デバイスをまとめて１台の記憶デバイスとして管理する。
【００２５】
ホストコンピュータ３００は、業務処理を実行するコンピュータであり、ファイバチャネルで構成されたＬＡＮ（Local Area Network）を介してストレージ装置１００とデータ通信可能に接続されている。ホストコンピュータ３００は、業務処理に使用するデータを、ストレージ装置１００への保存およびストレージ装置１００から読み出す。
【００２６】
制御部１１０ａは、ＣＰＵ（Central Processing Unit）１１１ａ、キャッシュメモリ１１２ａ、およびディスクアダプタ１１３ｃ，１１３ｄを有する。
ＣＰＵ１１１ａは、ＯＳ（オペレーティングシステム）などに従って処理を実行し、各種制御を行う。また、制御部１１０ａは、キャッシュメモリ１１２ａ、記憶デバイス１２０ｃ，１２０ｄ、チャネルアダプタ１３０ｃ，１３０ｄなどの資源管理を行う。
【００２７】
キャッシュメモリ１１２ａは、ＣＰＵ１１１ａがストレージ装置１００を制御するために必要な制御データを記憶する。また、キャッシュメモリ１１２ａは、記憶デバイス１２０ｃ，１２０ｄに読み書きされる入出力データを一時的に記憶する。
【００２８】
ディスクアダプタ１１３ｃ，１１３ｄは、それぞれ、対応する記憶デバイス１２０ｃ，１２０ｄとの接続制御を行う。
また、制御部１１０ａおよび制御部１１０ｂは、バス１４０によって接続されている。このバス１４０を介して、制御部１１０ａおよび制御部１１０ｂの間で、制御情報やデータが通信される。ここで、制御部１１０ｂは、制御部１１０ａと同一の構成であるため、説明を省略する。
【００２９】
記憶デバイス１２０ｃ〜１２０ｆは、ハードディスクドライブ（ＨＤＤ：Hard Disk Drive）であり、ホストコンピュータ３００から送信されたシステムの利用者のデータまたはバックアップデータを記憶する。なお、システムの利用者のデータおよびバックアップデータは１個のハードディスクに記憶されている必要はなく、複数のハードディスクに渡って記憶されていてもよい。また、１個のハードディスクに複数の利用者のデータおよびバックアップデータが記憶されていてもよい。また、記憶デバイス１２０ｃ〜１２０ｆは、例えば、ＳＳＤ（Solid State Drive）等の不揮発性半導体メモリやその他のデータの記憶が可能な記憶媒体を用いてもよい。
【００３０】
チャネルアダプタ１３０ｃ〜１３０ｆは、ホストコンピュータ３００と制御部１１０ａ，１１０ｂとの接続制御を行う。例えば、チャネルアダプタ１３０ｃは、ホストコンピュータ３００からの要求を受け付けて、制御部１１０ａとの接続制御を行う。制御部１１０ａ，１１０ｂは、それぞれ複数個（図２ではそれぞれ２個）のチャネルアダプタ１３０ｃ〜１３０ｆに接続可能になっている。すなわち、例えば制御部１１０ａは、冗長構成が実現されるように、２つの異なるチャネルアダプタ１３０ｃ，１３０ｄにそれぞれ接続されている。
【００３１】
なお、チャネルアダプタ１３０ｃ〜１３０ｆとホストコンピュータ３００との間の通信は、図２の例ではファイバチャネルで構成されたＬＡＮによって接続されているが、ファイバチャネル以外の接続方式によって接続されていてもよい。また、チャネルアダプタ１３０ｃ〜１３０ｆとホストコンピュータ３００との間の通信は、専用線やＶＰＮ（Virtual Private Network）を用いて、ストレージ装置１００をホストコンピュータ３００から遠隔地に設置するように構成してもよい。
【００３２】
なお、図２において、制御部１１０ａ，１１０ｂは、それぞれ２個図示し、ディスクアダプタ１１３ｃ〜１１３ｆおよびチャネルアダプタ１３０ｃ〜１３０ｆは、制御部１１０ａ，１１０ｂそれぞれに対してそれぞれ２個ずつ図示しているが、これらの数はそれぞれ任意である。
【００３３】
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。
図３は、第２の実施の形態のストレージ装置で記憶されるデータのデータ構造例を示す図である。本実施の形態では、図３に示すデータが、ストレージ装置１００が有する記憶デバイス１２０ｃ〜１２０ｆに記憶される。
【００３４】
図３に示すデータは、１ブロックが５２０バイト（５２０ｂｙｔｅｓ）の長さのデータであり、５１２バイトのデータ部と、８バイトのＢＣＣ（Block Check Code）を有する。ＢＣＣは、２バイトのＣＲＣ（Cyclic Redundancy Check）と、６バイトのブロックＩＤとを有する。データは、ストレージ装置１００における記憶デバイス１２０ｃ〜１２０ｆのストライプにおいて、ブロック毎に異なる記憶デバイスの記憶領域に記憶される。
【００３５】
データ部は、ストレージ装置１００に記憶されるデータ本体であり、ホストコンピュータ３００から送信されたデータを、所定の長さ（例えば、５２０バイト）を１ブロックとして、１ブロック毎に分割したものである。
【００３６】
ＢＣＣは、データ部の整合性を確認するための符号である。ＣＲＣは、データ部の誤りを検出するための冗長コードであり、データ部の値から所定の関数により生成される。また、ブロックＩＤは、データ部がストレージ装置１００において記憶されている記憶領域の位置の異常を検出するための情報であり、そのデータのブロックに固有の値である。
【００３７】
なお、データのデータ構造は、ストレージ装置１００の運用形態等に応じて、種々の変形例が考えられる。また、図３に示したもの以外の情報をデータに付加してもよい。
図４は、第２の実施の形態のストレージ装置の機能を示すブロック図である。本実施の形態のストレージ装置１００は、ホストコンピュータ３００とＬＡＮで接続されている。ストレージ装置１００は、フォーマット制御部１０１、アクセス部１０２、記憶デバイス１２０ｃ，１２０ｄ，１２０ｅ，１２０ｆ、管理情報記憶部１５１、フラグ記憶部１５２を有する。
【００３８】
フォーマット制御部１０１は、アクセス部１０２に対して、記憶デバイス１２０ｃ〜１２０ｆのストライプ１２００を構成する記憶領域の論理フォーマットを要求するフォーマット要求を送信する。
【００３９】
アクセス部１０２は、フォーマット制御部１０１からのフォーマット要求を受け付けると、記憶デバイス１２０ｃ〜１２０ｆの初期化を行う。アクセス部１０２は、記憶デバイス１２０ｃ〜１２０ｆの初期化の際に、論理フォーマットの完了を報告するフォーマット完了報告をフォーマット制御部１０１に送信し、複数の記憶デバイス１２０ｃ〜１２０ｆのストライプ１２００を構成する記憶領域のうち、冗長数よりも１多い個数の記憶デバイスの記憶領域に論理フォーマットが完了していないことを示す未フォーマット識別子を有するデータ１３０ａ１を書き込むと共に、未フォーマット識別子を有するデータ１３０ａ１を書き込んだストライプの記憶領域について論理フォーマットが完了した旨を示す管理情報を管理情報記憶部１５１に記憶させる。ここで、冗長数とは、記憶デバイス１２０ｃ〜１２０ｆのうちのいずれかが故障した場合にも記憶しているデータを復元可能な記憶デバイスの最大の個数である。例えば、ＲＡＩＤ５の冗長数は、１であり、ＲＡＩＤ６の冗長数は、２である。
【００４０】
データ１３０ａ１が有する未フォーマット識別子は、例えば、データ部の値が“０ｘ００００・・・０”（すべての位が“０”）であり、ブロックＩＤが“０ｘＦＦＦＦＦＦＦＦＦＦＦＦ”（以下、未フォーマットマークとする）に設定する。ここで、未フォーマット識別子は、本実施の形態における記憶デバイス１２０ｃ〜１２０ｆのストライプ１２００に記憶されるデータである。未フォーマット識別子は、未フォーマット識別子が記憶されているストライプが、管理テーブル上は論理フォーマットが完了したものとしてみなされると共に、実際は論理フォーマットが完了していないことを示す識別子である。なお、本実施の形態では、ブロックＩＤが“０ｘＦＦＦＦＦＦＦＦＦＦＦＦ”であることを未フォーマットマークに使用しているが、これに限らず、ブロックＩＤについて任意の値を未フォーマットマークに使用することができる。また、記憶デバイス１２０ｃ〜１２０ｆの記憶領域に記憶されるデータの任意の部分を未フォーマットマークの領域に用いることができる。
【００４１】
次に、アクセス部１０２は、ストライプ１２００の記憶領域への新規データの書き込みのアクセスの際に、アクセスの対象のストライプの記憶領域に記憶されている既存データを読み出す。
【００４２】
次に、アクセス部１０２は、読み出した既存データから未フォーマット識別子を検出した場合には、アクセスの対象のストライプの記憶領域に新規データまたは論理フォーマットにより書き込まれるフォーマットデータを書き込む。ここで、未フォーマット識別子は、記憶領域から読み出したデータがデータ部に“０ｘ００００・・・０”を有するか、また、ＣＲＣの値が“０”であるか、また、ブロックＩＤが未フォーマット識別子を有するデータ１３０ａ１のブロックＩＤに設定される未フォーマットマークである“ＦＦＦＦＦＦＦＦＦ”であるか、によって検出することができる。
【００４３】
また、アクセス部１０２は、ホストコンピュータ３００からのデータの書き込みのアクセス要求を受け付けた場合には、記憶デバイス１２０ｃ〜１２０ｆの記憶領域へのアクセスの際に、アクセスの対象のストライプの記憶領域に記憶されている既存データを読み出す。アクセス部１０２は、読み出した既存データから未フォーマット識別子を検出し、アクセスの対象のストライプの記憶領域に新規データを書き込むときには、アクセスの対象のストライプの記憶領域に当該新規データを書き込む。一方、アクセス部１０２は、読み出した既存データから未フォーマット識別子を検出し、かつアクセスの対象のストライプの記憶領域に新規データを書き込まないときには、アクセスの対象のストライプの記憶領域にフォーマットデータを書き込む。
【００４４】
また、アクセス部１０２は、記憶デバイス１２０ｃ〜１２０ｆの記憶領域の記憶内容を順次読み出してパトロールを行い、当該記憶領域から未フォーマット識別子を検出した場合には、未フォーマット識別子を検出したストライプの記憶領域にフォーマットデータを書き込む。これにより、未だホストコンピュータ３００によるデータ書き込みのアクセス要求がないストライプについても論理フォーマットが行われる。
【００４５】
また、アクセス部１０２は、パトロールにより記憶デバイス１２０ｃ〜１２０ｆのすべてのストライプにフォーマットデータの書き込みが完了したときには、フラグ記憶部１５２のフォーマットデータ書き込み完了フラグを有効に設定する。
【００４６】
また、アクセス部１０２は、詳しくは図６において後述するＲｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅによって、ストライプ１２００の記憶領域への新規データの書き込みのアクセスによりストライプ１２００の記憶領域に記憶されている既存データのうちの一部の記憶領域を、新規データにより更新することができる。この場合、アクセス部１０２は、新規データにより更新しない既存データをストライプ１２００から読み出す。次に、アクセス部１０２は、新規データと読み出した既存データとにより更新後のパリティデータである新規パリティを算出する。次に、アクセス部１０２は、新規データにより更新するストライプの記憶領域に記憶された既存データを新規データで更新すると共に、そのストライプの更新前のパリティデータである既存パリティを新規パリティで更新する。
【００４７】
また、アクセス部１０２は、詳しくは図７において後述するＳｍａｌｌ  Ｗｒｉｔｅによって、ストライプの記憶領域への新規データの書き込みのアクセスによりストライプの記憶領域に記憶されている既存データのうちの一部の記憶領域を、新規データにより更新することができる。この場合、アクセス部１０２は、新規データにより更新する既存データとストライプの更新前のパリティデータである既存パリティとを読み出す。次に、アクセス部１０２は、新規データと読み出した既存データと読み出した既存パリティとにより更新後のパリティデータである新規パリティを算出する。次に、アクセス部１０２は、新規データにより更新するストライプの記憶領域に記憶された既存データを新規データで更新すると共に、既存パリティを新規パリティで更新する。
【００４８】
記憶デバイス１２０ｃ〜１２０ｆは、ＲＡＩＤ５を構成し、データを記憶可能な記憶領域を有する。記憶デバイス１２０ｃ〜１２０ｆには、それぞれの記憶デバイスの一部の記憶領域で構成されるストライプ１２００が設定されている。記憶デバイス１２０ｃ〜１２０ｆが有する記憶領域に対して、ストライプ単位でアクセス部１０２によりデータが記憶される。なお、これに限らず、記憶デバイス１２０ｃ〜１２０ｆは、ＲＡＩＤ６またはその他のＲＡＩＤを構成してもよい。
【００４９】
管理情報記憶部１５１は、記憶デバイス１２０ｃ〜１２０ｆの記憶領域について、論理フォーマットが行われたか否かを示す管理情報を格納する管理テーブルを記憶する。この管理テーブルにより、記憶デバイス１２０ｃ〜１２０ｆの記憶領域について、ブロック毎にフォーマットが完了したか否かが管理される。なお、本実施の形態では、未フォーマット識別子が書き込まれた記憶領域については、フォーマットが完了していないが、管理テーブル上は、フォーマットが完了したものとみなされる。
【００５０】
フラグ記憶部１５２は、記憶デバイス１２０ｃ〜１２０ｆのすべてのストライプにフォーマットデータの書き込みが完了したか否かを示すフォーマットデータ書き込み完了フラグを記憶する。フォーマットデータ書き込み完了フラグは、記憶デバイス１２０ｃ〜１２０ｆのすべてのストライプにフォーマットデータの書き込みが完了していれば、有効を示す値（例えば、“１”）が設定される。一方、記憶デバイス１２０ｃ〜１２０ｆのストライプのうち、フォーマットデータの書き込みがされていないストライプがあれば、無効を示す値（例えば、“０”）が設定される。
【００５１】
本実施の形態のストレージ装置１００は、ＲＡＩＤ５で運用した場合、書き込み処理は、Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅ，Ｒｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅ，Ｓｍａｌｌ  Ｗｒｉｔｅの３種類の書き込み方法を使用可能である。Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅは、詳しくは図５において後述するが、あるストライプを構成するすべての記憶デバイスの記憶領域のデータを更新する書き込み方法である。また、Ｒｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅ，Ｓｍａｌｌ  Ｗｒｉｔｅは、ストライプにおける一部の記憶デバイスのデータを更新する書き込み方法である。
【００５２】
本実施の形態のストレージ装置１００は、ホストコンピュータ３００からのデータの書き込みのアクセス要求について、Ｒｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅ，Ｓｍａｌｌ  Ｗｒｉｔｅを使用する場合には、図２１から図２３において後述する未フォーマット識別子書き込み完了後データ書き込み処理でデータを書き込む。一方、データの書き込みのアクセス要求について、Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅを使用する場合には、ストレージ装置１００は、ホストコンピュータ３００に対してデータ書き込み報告を送信後、書き込み要求のパリティを作成し、データおよび作成したパリティを、記憶デバイス１２０ｃ〜１２０ｆのストライプに書き込む。
【００５３】
ここで、本実施の形態では、Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅ，Ｒｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅ，Ｓｍａｌｌ  Ｗｒｉｔｅのいずれの書き込み方法においても、ストライプのすべての記憶領域に対して、書き込み要求のデータ、フォーマットデータのいずれかを書き込む。これにより、ストライプのデータ構造は、論理フォーマットの後にデータを書き込んだ場合と同様になる。
【００５４】
ストレージ装置１００では、更新されるデータのブロックが記憶されている記憶領域と更新されないデータのブロックが記憶されている記憶領域とを解析し、書き込みの際に更新されるデータのブロックの数に応じて、これらの３種類の書き込み方法を使い分ける。３種類の書き込み方法を使い分けることにより、更新するデータのブロックが記憶されている記憶領域には書き込みを行い、更新しないデータのブロックが記憶されている記憶領域に書き込みを省略することで、記憶デバイスに対するアクセス時の負荷を軽減する。
【００５５】
以下に、３種類の書き込み方法の詳細を示す。
図５は、第２の実施の形態のＢａｎｄｗｉｄｔｈ  Ｗｒｉｔｅを示す図である。図５に従って、本実施の形態のストレージ装置１００におけるＢａｎｄｗｉｄｔｈ  Ｗｒｉｔｅを説明する。
【００５６】
Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅは、記憶デバイス１２０ｃ〜１２０ｆのストライプに新たに書き込まれるデータについてＸＯＲ（eXclusive OR：排他的論理和）演算することで、ストライプに書き込まれるデータの更新後のパリティ（parity）である新規パリティを作成し、新規データおよび新規パリティをストライプの記憶領域に書き込む書き込み方法である。Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅは、アクセス要求において、すべてのデータのブロックが新規データの書き込みにより更新される場合に適している。
【００５７】
Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅについて、具体例により説明する。ここで、図５に示すように、ストレージ装置１００が有する記憶デバイス１２０ｃ〜１２０ｆのストライプ１２０１ａ１に、書き込みのアクセス要求の対象の記憶領域に既に記憶されている更新対象の既存データであるデータ１３１ａ１、データ１３１ａ２、データ１３１ａ３およびデータ１３１ａ１〜１３１ａ３から生成された既存パリティである既存パリティのデータ１３１ａ４が記憶されているものとする。
【００５８】
ここで、図５におけるデータ１３１ａ１（データ  Ｏ１：ＢＣＣ  Ｂ１）の左側の“Ｏ１”は、“Ｏ”が「既存データ（Old）」であることを示す。また、“１”の番号は、本実施の形態において説明の便宜上割り当てた番号であり、後述する記憶デバイス１２０ｃ〜１２０ｆのストライプ１２０１ｂ１において、データ１３１ａ１と同一の記憶領域に対して書き込みのアクセス要求による更新により上書きで書き込まれる新規データであるデータ１３１ｂ１（の左側の“Ｎ１”の“１”）と対応していることを示す。
【００５９】
また、データ１３１ａ１の右側の“Ｂ１”は、“Ｂ”が「ＢＣＣ」であることを示し、“１番目”のＢＣＣであることを示す。この番号は、本実施の形態において説明の便宜上割り当てたものであり、異なるデータのＢＣＣ同士は互いに異なることを示す。
【００６０】
また、データ１３１ａ２（データ  Ｏ２：ＢＣＣ  Ｂ２）の左側の“Ｏ２”は、同様にストライプ１２０１ｂ１においてデータ１３１ａ２と同一の記憶領域に対して更新により書き込まれる新規データであるデータ１３１ｂ２と対応することを示す。また、データ１３１ａ３（データ  Ｏ３：ＢＣＣ  Ｂ３）の左側の“Ｏ３”は、同様にストライプ１２０１ｂ１の同一の記憶領域に対する新規データであるデータ１３１ｂ３と対応することを示す。また、既存パリティであるデータ１３１ａ４（データ  ＯＰ１：ＢＣＣ  Ｂ４）の左側の“ＯＰ１”は、“ＯＰ”が、既存データであるデータ１３１ａ１〜１３１ａ３から生成された「既存パリティ（Old Parity）」であることを示し、“１”は、同様にストライプ１２０１ｂ１の同一の記憶領域に対して更新により書き込まれる新規パリティであるデータ１３１ａ４と対応することを示す。
【００６１】
また、ホストコンピュータ３００からストレージ装置１００に対して新規データであるデータ１３１ｂ１，１３１ｂ２，１３１ｂ３の書き込みのアクセス要求があったものとする。
【００６２】
ストレージ装置１００のアクセス部１０２は、データ１３１ｂ１，１３１ｂ２，１３１ｂ３の書き込みのアクセス要求を受け付けると、データ１３１ｂ１と１３１ｂ２と１３１ｂ３とのＸＯＲ演算を行って新規パリティであるデータ１３１ｂ４を算出する。
【００６３】
次に、アクセス部１０２は、データ１３１ｂ１，１３１ｂ２，１３１ｂ３，１３１ｂ４を、アクセス要求の対象の既存のデータが記憶されていた記憶デバイス１２０ｃ〜１２０ｆのストライプに書き込む。これにより、既存のデータが記憶されていたストライプの記憶内容が上書きされてストライプ１２０１ａ１からストライプ１２０１ｂ１に更新される。
【００６４】
ここで、図５におけるデータ１３１ｂ１（データ  Ｎ１：ＢＣＣ  Ｂ５）の左側の“Ｎ１”は、“Ｎ”が「新規（New）データ」であることを示し、“５”の番号は、上記のように、ストライプ１２０１ａ１におけるデータ１３１ｂ１の書き込み対象の記憶領域に既に記憶されており、データ１３１ｂ１の書き込みにより更新される既存データであるデータ１３１ａ１と対応していることを示す。また、データ１３１ｂ２（データ  Ｎ２：ＢＣＣ  Ｂ２）の左側の“Ｎ２”は、同様にストライプ１２０１ａ１においてデータ１３１ｂ２が書き込まれる記憶領域に対する既存データであるデータ１３１ａ２と対応することを示す。また、データ１３１ｂ３（データ  Ｎ３：ＢＣＣ  Ｂ３）の左側の“Ｎ３”は、同様にストライプ１２０１ａ１においてデータ１３１ｂ３が書き込まれる記憶領域に対する既存データであるデータ１３１ａ３と対応することを示す。また、新規パリティであるデータ１３１ｂ４（データ  ＮＰ１：ＢＣＣ  Ｂ４）の左側の“ＮＰ１”は、“ＮＰ”が、新規データであるデータ１３１ｂ１〜１３１ｂ３から生成された「新規パリティ（New Parity）」であることを示し、“１”は、同様にストライプ１２０１ａ１が書き込まれる記憶領域に記憶されており、データ１３１ｂ４の書き込みより更新される既存パリティであるデータ１３１ａ４と対応することを示す。
【００６５】
図６は、第２の実施の形態のＲｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅを示す図である。図６に従って、本実施の形態のストレージ装置１００におけるＲｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅを説明する。
【００６６】
Ｒｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅは、更新対象以外の既存のデータである既存データを記憶デバイス１２０ｃ〜１２０ｆのストライプから読み出し、読み出した既存データおよび新たに書き込まれる新規データについてＸＯＲ演算することで新規パリティを作成し、新規データおよび新規パリティをストライプの記憶領域に書き込む書き込み方法である。Ｒｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅは、アクセス要求において、新規データで更新されるブロックと既存データが更新されないブロックとが混在する場合であって、更新されるブロックが更新されないブロックよりも多い場合に適している。
【００６７】
Ｒｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅについて、具体例により説明する。ここで、図６に示すように、ストレージ装置１００が有する記憶デバイス１２０ｃ〜１２０ｆのストライプ１２０１ｃ１に、書き込みのアクセス要求による更新対象の既存データであるデータ１３１ｃ１（データ  Ｏ４：ＢＣＣ  Ｂ９）、データ１３１ｃ２（データ  Ｏ５：ＢＣＣ  Ｂ１０）、データ１３１ｃ３（データ  Ｏ６：ＢＣＣ  Ｂ１１）および既存パリティであるデータ１３１ｃ４（データ  ＯＰ２：ＢＣＣ  Ｂ１２）が記憶されているものとする。さらに、ホストコンピュータ３００からストレージ装置１００に対して新規データであるデータ１３１ｄ２（データ  Ｎ４：ＢＣＣ  Ｂ１３），１３１ｄ３（データ  Ｎ５：ＢＣＣ  １４）の書き込みのアクセス要求があったものとする。
【００６８】
アクセス部１０２は、新規データであるデータ１３１ｄ２，１３１ｄ３の書き込みのアクセス要求を受け付けると、記憶デバイス１２０ｃ〜１２０ｆのストライプ１２０１ｃ１に記憶されている既存データであるデータ１３１ｃ１を読み出す。次に、アクセス部１０２は、読み出したデータ１３１ｃ１およびアクセス要求を受け付けたデータ１３１ｄ２と１３１ｄ３とのＸＯＲ演算を行って、新規パリティであるデータ１３１ｄ４を算出する。
【００６９】
次に、アクセス部１０２は、データ１３１ｄ２，１３１ｄ３，１３１ｄ４を、アクセス要求の対象の既存データが記憶されていた記憶デバイス１２０ｃ〜１２０ｆのストライプに書き込む。これにより、既存のデータが記憶されていたストライプの記憶内容が上書きされてストライプ１２０１ｃ１からストライプ１２０１ｄ１に更新される。
【００７０】
図７は、第２の実施の形態のＳｍａｌｌ  Ｗｒｉｔｅを示す図である。図７に従って、本実施の形態のストレージ装置１００におけるＳｍａｌｌ  Ｗｒｉｔｅを説明する。
Ｓｍａｌｌ  Ｗｒｉｔｅは、更新対象のデータに対応する既存のデータおよびストライプの既存のパリティを記憶デバイス１２０ｃ〜１２０ｆのストライプから読み出し、読み出した既存データおよび既存パリティならびに新たに書き込まれる新規データについてＸＯＲ演算することで新規パリティを作成し、新規データおよび新規パリティをストライプの記憶領域に書き込む書き込み方法である。Ｓｍａｌｌ  Ｗｒｉｔｅは、アクセス要求において、新規データで更新されるブロックと既存データが更新されないブロックとが混在する場合であって、更新されるブロックが更新されないブロックよりも少ない場合に適している。
【００７１】
Ｓｍａｌｌ  Ｗｒｉｔｅについて、具体例により説明する。ここで、図７に示すように、ストレージ装置１００が有する記憶デバイス１２０ｃ〜１２０ｆのストライプ１２０１ｅ１に、アクセス要求による更新対象の既存データであるデータ１３１ｅ１（データ  Ｏ７：ＢＣＣ  Ｂ１６）、データ１３１ｅ２（データ  Ｏ８：ＢＣＣ  Ｂ１７）、データ１３１ｅ３（データ  Ｏ９：ＢＣＣ  Ｂ１８）および既存パリティであるデータ１３１ｅ４（データ  ＯＰ３：ＢＣＣ  Ｂ１９）が記憶されているものとする。さらに、ホストコンピュータ３００からストレージ装置１００に対して新規データであるデータ１３１ｆ１（データ  Ｎ６：ＢＣＣ  Ｂ２０）の書き込みのアクセス要求があったものとする。
【００７２】
アクセス部１０２は、新規データであるデータ１３１ｆ１の書き込みのアクセス要求を受け付けると、記憶デバイス１２０ｃ〜１２０ｆのストライプ１２０１ｅ１に記憶されている既存データであって、アクセス要求のデータ１３１ｆ１に対応するデータ１３１ｅ１および既存パリティのデータ１３１ｅ４を読み出す。次に、アクセス部１０２は、ストライプから読み出したデータ１３１ｅ１，１３１ｅ４とアクセス要求を受け付けたデータ１３１ｆ１とのＸＯＲ演算を行って、新規パリティであるデータ１３１ｆ４を算出する。
【００７３】
次に、アクセス部１０２は、データ１３１ｆ１，１３１ｆ４を、アクセス要求の対象の既存のデータが記憶されていた記憶デバイス１２０ｃ〜１２０ｆのストライプに書き込む。これにより、既存のデータが記憶されていたストライプの記憶内容が上書きされて、ストライプ１２０１ｅ１からストライプ１２０１ｆ１に更新される。
【００７４】
次に、本実施の形態のストレージ装置１００における未フォーマット識別子を記憶デバイス１２０ｃ〜１２０ｆの記憶領域に書き込む動作について説明する。
図８は、第２の実施の形態の未フォーマット識別子を書き込む動作を示す図である。本実施の形態のストレージ装置１００は、記憶デバイス１２０ｃ〜１２０ｆの初期化時に論理フォーマットを行わずに、各ストライプの記憶領域に当該ストライプに論理フォーマットが行われていないことを示す未フォーマット識別子を書き込む。
【００７５】
ストレージ装置１００が未フォーマット識別子を書き込む処理について、具体例により説明する。ここで、図８に示すように、ストレージ装置１００が有する記憶デバイス１２０ｃ〜１２０ｆのすべての記憶領域は、論理フォーマットが行われていないフォーマット未完了領域であるものとする。また、ストライプ１２０２ａ１は、論理フォーマットが行われていないフォーマット未完了領域のうちの１個のストライプに割り当てられた記憶領域であるものとする。
【００７６】
ここで、ストライプ１２０２ａ１の各ブロックの左側の“−”は、ブロックのデータ部に記憶デバイス１２０ｃ〜１２０ｆの初期状態のまま上書きされていないことを示す。また、各ブロックの右側の“−”は、同様にブロックのＢＣＣが初期状態のまま上書きされていないことを示す。
【００７７】
さらに、フォーマット制御部１０１からアクセス部１０２に対して、記憶デバイス１２０ｃ〜１２０ｆの論理フォーマットの実行を要求するフォーマット要求があったものとする。
【００７８】
ストレージ装置１００のアクセス部１０２は、フォーマット制御部１０１からの記憶デバイス１２０ｃ〜１２０ｆのフォーマット要求を受け付けると、フォーマット制御部１０１に対して論理フォーマットの完了を報告するフォーマット完了報告を出力すると共に、記憶デバイス１２０ｃ〜１２０ｆの各ストライプに未フォーマット識別子を書き込む。ここで、未フォーマット識別子であるデータ１３２ａ１，１３２ａ２の左側の“０”は、データ１３２ａ１の有する値が“０ｘ００００・・・０”であることを示す。また、データ１３２ａ１，１３２ａ２の右側の“Ｍ”は、ＢＣＣのブロックＩＤが未フォーマットマークである“０ｘＦＦＦＦＦＦＦＦＦＦＦＦ”であって、かつ、ＣＲＣが“０”であることを示す。これにより、記憶デバイス１２０ｃ〜１２０ｆの各ストライプの一部の記憶領域に未フォーマット識別子であるデータ１３２ａ１，１３２ａ２が書き込まれることにより、フォーマットが完了しておらず、かつ、未フォーマット識別子が書き込まれていないフォーマット未完了領域であるストライプ１２０２ａ１から、一部の記憶領域に未フォーマット識別子が書き込まれているストライプ１２０２ｂ１に更新される。すなわち、ストライプ１２０２ａ１に未フォーマット識別子が書き込まれることにより、ストライプ１２０２ｂ１に示す未フォーマット識別子領域になる。また、このときアクセス部１０２は、ストライプ１２０２ｂ１の記憶領域が論理フォーマットされたものとして管理テーブルを更新する。
【００７９】
このとき、アクセス部１０２は、ストライプの記憶領域のうち、ＲＡＩＤの冗長数＋１の個数（例えば、２）の記憶デバイスのブロックに未フォーマット識別子を書き込む。これにより、例えば、アクセス部１０２がストライプ１２０２ｂ１の未フォーマット識別子を検出する際に、ストライプ１２０２ｂ１の記憶デバイス１２０ｃの記憶領域の読み取りエラーが生じた場合にも、記憶デバイス１２０ｄに書き込まれた未フォーマット識別子を検出することができる。従って、ストライプ１２０２ｂ１に書き込まれた未フォーマット識別子の検出が可能になる。また、ストライプのすべての記憶領域に未フォーマット識別子を書き込んだ場合に比較して、未フォーマット識別子の書き込みに要する時間が短縮でき、ストレージ装置１００の処理の負荷や記憶デバイス１２０ｃ〜１２０ｆの負荷を軽減できる。ここで、ＲＡＩＤの冗長数は、ＲＡＩＤを構成する記憶デバイスが同時に故障してもデータを復元可能な台数とする。例えば、ＲＡＩＤ５の場合、記憶デバイスが１台故障しても記憶しているデータを復元することができる。従って、ＲＡＩＤ５の冗長数は、１となる。ＲＡＩＤ６の冗長数は、同様に２となる。
【００８０】
なお、これに限らず、アクセス部１０２は、ストライプを構成する記憶領域のうち、１台の記憶デバイスの記憶領域のみに未フォーマット識別子を書き込んでもよく、３台以上の記憶デバイスの記憶領域に未フォーマット識別子を書き込んでもよい。また、アクセス部１０２は、ストライプを構成する記憶領域のうちすべての記憶デバイスの記憶領域に未フォーマット識別子を書き込んでもよい。
【００８１】
次に、アクセス部１０２は、未フォーマット識別子を書き込んだストライプの記憶領域が論理フォーマットされたものとして、管理情報記憶部１５１に記憶されている管理テーブルを更新する。これにより、未フォーマット識別子が書き込まれたストライプは、実際には論理フォーマットが完了していないが、論理フォーマットが完了したものとして扱われる。そして、未フォーマット識別子が書き込まれたストライプの記憶領域には、後にストライプから未フォーマット識別子が検出された際に、フォーマットデータやアクセス要求のデータが書き込まれる。
【００８２】
また、各ストライプに未フォーマット識別子を書き込んでいる際に、ホストコンピュータ３００からデータの書き込みのアクセス要求がされる場合も生じ得る。この場合については、図１０、図１８、図１９において後述する。
【００８３】
また、アクセス部１０２は、ストレージ装置１００の記憶デバイス１２０ｃ〜１２０ｆのＲＡＩＤ構成を示す装置情報を取得してＲＡＩＤ種別を判定し、構成がＲＡＩＤ１等のミラーリング構造である場合等、未フォーマット識別子の書き込みに適さない場合には、通常の論理フォーマットを実行してもよい。
【００８４】
図９は、第２の実施の形態の未フォーマット識別子が書き込まれた記憶領域を示す図である。本実施の形態のストレージ装置１００は、図８において前述したように、ＲＡＩＤを構成する記憶デバイス１２０ｃ〜１２０ｆについて、初期化時に各ストライプの記憶領域に未フォーマット識別子を書き込む。ストレージ装置１００により未フォーマット識別子が書き込まれたストライプの記憶領域を、図９に従って説明する。
【００８５】
本実施の形態のストレージ装置１００が有する記憶デバイス１２０ｃ〜１２０ｆは、初期化以前には、図９のストライプ１２０２ａ１，１２０２ａ２，１２０２ａ３，１２０２ａ４に示すように、すべての記憶領域について論理フォーマットが行われておらず、また、データが書き込まれていないフォーマット未完了領域である。
【００８６】
本実施の形態では、ストライプ１２０２ｂ１，１２０２ｂ２，１２０２ｂ３，１２０２ｂ４に示すように、アクセス部１０２が初期化処理として記憶デバイス１２０ｃ〜１２０ｆの各ストライプに未フォーマット識別子を書き込むことにより、未フォーマット識別子領域にする。このとき、アクセス部１０２は、上記のように各ストライプに対して冗長数＋１の個数の記憶領域に未フォーマット識別子を書き込むので、ストライプの全記憶領域に未フォーマット識別子を書き込んだ場合や、ストライプの全記憶領域に論理フォーマットを行った場合に比較して、未フォーマット書き込みの処理時間を短縮でき、ストレージ装置１００の処理の負荷や記憶デバイス１２０ｃ〜１２０ｆの負荷を軽減できる。
【００８７】
ここで、各ストライプを構成する記憶領域の個数と、未フォーマット識別子が書き込まれる記憶領域の個数との関係は、以下の通りとなる。例えば、３個のデータ記憶ドライブと１個のパリティドライブとの合計４個の記憶デバイスを用いるＲＡＩＤ５のシステムの場合、図９に示すように、同一ストライプを構成する４個の記憶領域中２個の記憶領域に未フォーマット識別子が書き込まれることになる。また、図示しない１５個のデータ記憶ドライブと１個のパリティドライブとの合計１６個の記憶デバイスを用いるＲＡＩＤ５のシステムの場合、１６個中２個の記憶領域に未フォーマット識別子が書き込まれることになる。このように、すべての記憶領域にフォーマットを完了させるフォーマットデータ（またはフォーマットが完了したものとみなさせる未フォーマット識別子等のデータ）を書き込む方法に比較して、ＲＡＩＤを構成する記憶デバイスの個数が多い場合にも、未フォーマット識別子を書き込む記憶領域の個数は、増加しない。このため、多数の記憶デバイスを有するＲＡＩＤシステムにおいて、未フォーマット書き込みに要する処理時間の短縮ならびにストレージ装置１００の処理の負荷や記憶デバイス１２０ｃ〜１２０ｆの負荷の軽減の効果がより大きくなる。
【００８８】
次に、本実施の形態のストレージ装置１００における未フォーマット識別子の書き込み中にデータの書き込みが競合した場合の動作について説明する。
図１０は、第２の実施の形態の未フォーマット識別子の書き込み中に、データの書き込みが競合した場合の動作を示す図である。図１０に従って、本実施の形態のストレージ装置１００において未フォーマット識別子の書き込み中にデータの書き込みが競合した場合の動作について説明する。
【００８９】
ここで、図１０に示すように、アクセス要求のデータが書き込まれるストライプである、ストレージ装置１００が有する記憶デバイス１２０ｃ〜１２０ｆのストライプ１２０２ｃ１には、フォーマットが行われておらず、未フォーマット識別子も書き込まれておらず、フォーマット未完了領域であるものとする。ここで、記憶デバイス１２０ｃ〜１２０ｆの各記憶領域についてフォーマット（および管理テーブル上においてフォーマットが完了したものとみなされる未フォーマット識別子の書き込みのいずれか）が完了したか否かについては、管理情報記憶部１５１に記憶されている管理テーブルに基づいて管理される。また、ホストコンピュータ３００からストレージ装置１００に対して新規データであるデータ１３２ｄ１（データ  Ｎ１１：ＢＣＣ  Ｂ３１）の書き込みのアクセス要求があるものとする。さらに、アクセス部１０２は、データ１３２ｄ１の書き込みのアクセス要求に応じて、データ１３２ｄ１およびデータ１３２ｄ１による更新後のパリティである新規パリティを記憶デバイス１２０ｃ〜１２０ｆに書き込むものとする。
【００９０】
ストレージ装置１００のアクセス部１０２は、図８において前述したように、フォーマット制御部１０１からのフォーマット要求を受け付けると、フォーマット制御部１０１に対して論理フォーマットの完了を報告するフォーマット完了報告を出力すると共に、記憶デバイス１２０ｃ〜１２０ｆのすべてのストライプに対して順に未フォーマット識別子を書き込んでいく。また、このときアクセス部１０２は、未フォーマット識別子を書き込んだ記憶領域が論理フォーマットされたものとして管理テーブルを更新する。
【００９１】
この未フォーマット識別子の書き込み時の処理について、詳しくは図１８において説明するが、アクセス部１０２は、このすべての記憶領域に対する未フォーマット識別子の書き込みの実行中に、ホストコンピュータ３００からのデータ１３２ｄ１の書き込みのアクセス要求を受け付けると、ホストコンピュータ３００に対してデータの書き込みの完了を報告するアクセス完了報告を出力する。
【００９２】
次に、管理テーブルを参照して、書き込みのアクセス要求の対象の記憶領域がフォーマット未完了領域であった場合、アクセス部１０２は、ホストコンピュータ３００から受け付けた新規データであるデータ１３２ｄ１を書き込むストライプにおける、データ１３２ｄ１の書き込みにより更新されない記憶領域に対して書き込むフォーマットデータであるデータ１３２ｄ２，１３２ｄ３を作成する。次に、アクセス部１０２は、データ１３２ｄ１〜１３２ｄ３のＸＯＲ演算を行って、新規パリティであるデータ１３２ｄ４を算出する。
【００９３】
次に、アクセス部１０２は、データ１３２ｄ１〜１３２ｄ４を、記憶デバイス１２０ｃ〜１２０ｆのフォーマット未完了領域であるストライプ１２０２ｃ１に書き込む。これにより、新規データであるデータ１３２ｄ１〜１３２ｄ３および新規データのパリティであるデータ１３２ｄ４がストライプ１２０２ｄ１に示すように書き込まれると共に、ストライプ１２０２ｄ１の論理フォーマットが完了する。また、このときアクセス部１０２は、ストライプ１２０２ｄ１の記憶領域が論理フォーマットされたものとして管理テーブルを更新する。
【００９４】
次に、アクセス部１０２は、次の記憶領域について未フォーマット識別子の書き込みを行う。以上の処理を繰り返すことで、記憶デバイス１２０ｃ〜１２０ｆのすべての記憶領域について未フォーマット識別子が書き込まれ、またはホストコンピュータ３００からの書き込みのアクセス要求のデータもしくはフォーマットデータが書き込まれる。
【００９５】
次に、本実施の形態のストレージ装置１００において、データを書き込む記憶領域に未フォーマット識別子が既に書き込まれていた場合の動作について説明する。
図１１は、第２の実施の形態のデータをＳｍａｌｌ  Ｗｒｉｔｅにより書き込む場合において、記憶領域に未フォーマット識別子が書き込まれていたときの動作を示す図である。図１１に従って、本実施の形態のストレージ装置１００においてデータをＳｍａｌｌ  Ｗｒｉｔｅにより書き込む場合に、書き込み先のストライプに対して既に記憶領域に未フォーマット識別子が書き込まれていたときの動作について説明する。
【００９６】
ここで、図１１に示すように、アクセス要求のデータが書き込まれるストライプである、ストレージ装置１００が有する記憶デバイス１２０ｃ〜１２０ｆのストライプ１２０２ｅ１には、未フォーマット識別子が書き込まれているものとする。また、ホストコンピュータ３００からストレージ装置１００に対して、新規データであるデータ１３２ｆ１の書き込みのアクセス要求があるものとする。さらに、アクセス部１０２は、データ１３２ｆ１の書き込みのアクセス要求に応じて、記憶デバイス１２０ｃ〜１２０ｆにデータ１３２ｆ１およびデータ１３２ｆ１による更新後のパリティである新規パリティをＳｍａｌｌ  Ｗｒｉｔｅにより書き込む予定であるものとする。
【００９７】
ストレージ装置１００のアクセス部１０２は、ホストコンピュータ３００からのデータ１３２ｆ１の書き込みのアクセス要求を受け付けると、ホストコンピュータ３００に対してデータの書き込みの完了を報告するアクセス完了報告を出力する。
【００９８】
次に、アクセス部１０２は、ホストコンピュータ３００から受け付けた新規データであるデータ１３２ｆ１を書き込むストライプであるストライプ１２０２ｅ１における、データ１３２ｆ１に対応する既存データであるデータ１３２ｅ１および既存パリティであるデータ１３２ｅ４を１２０２ｅ１から読み出す。これにより、アクセス部１０２は、読み出したストライプ１２０２ｅ１から未フォーマット識別子であるデータ１３２ｅ１を検出する。
【００９９】
本実施の形態では、アクセス部１０２は、読み出したデータ１３２ｅ１が、ＢＣＣのブロックＩＤが未フォーマットマーク（“０ｘＦＦＦＦＦＦＦＦＦＦＦＦ”）であって、かつ、ＣＲＣが“０”が設定されている未フォーマット識別子である場合、データ１３２ｅ１が記憶されていたストライプ１２０２ｅ１が未フォーマットであると判断する。ここで、本実施の形態では、ストライプに記憶されているデータのブロックＩＤが、偶然に未フォーマットマークと同一になってしまう可能性を考慮して、未フォーマット識別子の検出時には、データ部のＣＲＣが“０”であるか否かもチェックする。
【０１００】
本実施の形態では、未フォーマットマークが付されたデータのデータ部は、“０”が設定されるので、未フォーマットの記憶領域からデータを読み出してＣＲＣでチェックした場合には、ＢＣＣエラーとして扱われる（図２１のステップＳ４６参照）。そして、ＢＣＣエラーが発生した場合、さらにブロックＩＤから未フォーマットマークを検出したか否かを判定し、ブロックＩＤから未フォーマットマークを検出した場合に、未フォーマット識別子を検出したものとする。
【０１０１】
ここで、ストライプ１２０２ｅ１は、未フォーマット識別子が記憶されている記憶領域を含むストライプ（以下、未フォーマット識別子領域とする）であり、ストライプ１２０２ｅ１の既存パリティとして読み出されたデータ１３２ｅ４を記憶する記憶領域は、正しく算出されたパリティではない。このため、データ１３２ｅ１，１３２ｅ４は、Ｓｍａｌｌ  Ｗｒｉｔｅによる新規パリティの算出に使用することができない。従って、本実施の形態では未フォーマット識別子が検出されたストライプ１２０２ｅ１に対して、データ１３２ｆ１をＳｍａｌｌ  Ｗｒｉｔｅとして書き込む予定であっても、Ｓｍａｌｌ  Ｗｒｉｔｅを行わない。この場合、アクセス部１０２は、Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅと同様に、ホストコンピュータ３００から受け付けた新規データであるデータ１３２ｆ１を書き込むストライプにおける、データ１３２ｆ１の書き込みにより更新されない記憶領域に書き込むフォーマットデータであるデータ１３２ｆ２，１３２ｆ３を作成する。次に、アクセス部１０２は、データ１３２ｆ１〜１３２ｆ３のＸＯＲ演算を行って、新規パリティであるデータ１３２ｆ４を算出する。
【０１０２】
次に、アクセス部１０２は、データ１３２ｆ１〜１３２ｆ４を、記憶デバイス１２０ｃ〜１２０ｆの未フォーマット識別子領域であるストライプ１２０２ｅ１に書き込む。これにより、新規データであるデータ１３２ｆ１〜１３２ｆ３および新規データのパリティであるデータ１３２ｆ４がストライプ１２０２ｆ１に示すように書き込まれると共に、ストライプ１２０２ｆ１の論理フォーマットが完了する。なお、図１１の例では、Ｓｍａｌｌ  Ｗｒｉｔｅの読み出しにより既存データであるデータ１３２ｅ１から未フォーマット識別子が検出された場合を示すが、既存パリティであるデータ１３２ｅ４から未フォーマット識別子が検出された場合も同様である。
【０１０３】
図１２は、第２の実施の形態のデータをＲｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅにより書き込む場合において、記憶領域に未フォーマット識別子が書き込まれていたときの動作を示す図である。図１２に従って、本実施の形態のストレージ装置１００においてデータをＲｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅにより書き込む場合に、書き込み先のストライプに対して既に記憶領域に未フォーマット識別子が書き込まれていたときの動作について説明する。
【０１０４】
ここで、図１２に示すように、アクセス要求のデータが書き込まれるストライプである、ストレージ装置１００が有する記憶デバイス１２０ｃ〜１２０ｆのストライプ１２０２ｇ１には、未フォーマット識別子が書き込まれている未フォーマット識別子領域であるものとする。また、ホストコンピュータ３００からストレージ装置１００に対して新規データであるデータ１３２ｈ２，１３２ｈ３の書き込みのアクセス要求があるものとする。さらに、アクセス部１０２は、データ１３２ｈ１の書き込みのアクセス要求に応じて、記憶デバイス１２０ｃ〜１２０ｆにデータ１３２ｈ２，１３２ｈ３およびデータ１３２ｈ２，１３２ｈ３による更新後のパリティである新規パリティをＲｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅにより書き込む予定であるものとする。
【０１０５】
ストレージ装置１００のアクセス部１０２は、ホストコンピュータ３００からのデータ１３２ｈ２，１３２ｈ３の書き込みのアクセス要求を受け付けると、ホストコンピュータ３００に対してデータの書き込みの完了を報告するアクセス完了報告を出力する。
【０１０６】
次に、アクセス部１０２は、ホストコンピュータ３００から受け付けた新規データであるデータ１３２ｈ２，１３２ｈ３を書き込むストライプであるストライプ１２０２ｇ１における、アクセス要求によりデータが更新されない記憶領域に記憶されている既存データであるデータ１３２ｇ１を読み出す。これにより、アクセス部１０２は、ストライプ１２０２ｇ１から未フォーマット識別子を有するデータ１３２ｇ１を検出する。
【０１０７】
図１２では、図１１と同様に、アクセス部１０２は、読み出したデータ１３２ｇ１のＢＣＣにおけるＣＲＣの値が０であり、ブロックＩＤが未フォーマットマークである場合、データ１３２ｇ１が記憶されていたストライプ１２０２ｇ１が未フォーマット識別子領域であると判断する。
【０１０８】
ここで、ストライプ１２０２ｇ１は、未フォーマット識別子を有するデータが記憶されている記憶領域で構成されており、ストライプ１２０２ｇ１の既存データとして読み出されたデータ１３２ｇ１は、未フォーマット識別子を有するため、Ｒｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅによる新規パリティの算出にデータ１３２ｇ１を使用することができない。従って、図１２では、未フォーマット識別子が検出されたストライプ１２０２ｇ１に対して、データ１３２ｈ２，１３２ｈ３をＲｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅとして書き込む予定であっても、Ｒｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅを行わない。この場合、アクセス部１０２は、Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅと同様に、ホストコンピュータ３００から受け付けた新規データであるデータ１３２ｈ２，１３２ｈ３を書き込むストライプにおける、データ１３２ｈ２，１３２ｈ３の書き込みにより更新されない記憶領域に対して書き込むフォーマットデータであるデータ１３２ｈ１を作成する。次に、アクセス部１０２は、データ１３２ｈ１〜１３２ｈ３のＸＯＲ演算を行って、新規パリティであるデータ１３２ｈ４を算出する。
【０１０９】
次に、アクセス部１０２は、データ１３２ｈ１〜１３２ｈ４を、記憶デバイス１２０ｃ〜１２０ｆの未フォーマット識別子領域であるストライプ１２０２ｇ１に書き込む。これにより、新規データであるデータ１３２ｈ１〜１３２ｈ３および新規データのパリティであるデータ１３２ｈ４がストライプ１２０２ｈ１に示すように書き込まれると共に、ストライプ１２０２ｈ１の論理フォーマットが完了する。
【０１１０】
次に、本実施の形態のストレージ装置１００において、Ｓｍａｌｌ  ＷｒｉｔｅまたはＲｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅにおける書き込みの前の読み出しで、正常なデータおよび未フォーマット識別子のいずれも検出されなかった場合の動作について説明する。
【０１１１】
ストレージ装置１００は、Ｓｍａｌｌ  ＷｒｉｔｅおよびＲｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅを使用する書き込みにおいて、図６および図７において前述したように、書き込みの前に書き込み対象のストライプから一部のデータを読み出す。本実施の形態では、この書き込みの前のデータ読み出しを利用して、書き込み対象のストライプから未フォーマット識別子の検出を行う。ここで、記憶デバイスの障害等によりデータの読み出しに失敗する場合や、読み出しは成功したがデータのＢＣＣが不正であるＢＣＣエラーが発生する場合がある。また、図９において前述したように、本実施の形態ではストライプの一部の記憶領域のみに未フォーマット識別子を書き込むので、書き込みの前の読み出しにおいて未フォーマット識別子が書き込まれていない記憶領域のデータの読み出しを行う場合がある。このような場合には、未フォーマット識別子が書き込まれているストライプについて、未フォーマット識別子の検出が不可能になってしまう。なお、未フォーマット識別子が書き込まれていない記憶領域は、ＢＣＣが不正な値になるため、ＢＣＣエラーとして検出することができる。
【０１１２】
これに対して、本実施の形態のストレージ装置１００では、このような記憶デバイスの書き込みの前の読み出しにおいてエラーが発生した場合、同一のストライプにおける他の記憶デバイスの記憶領域からのデータの読み出しを試み、そのストライプの未フォーマット識別子を検出する。
【０１１３】
図１３および図１４は、第２の実施の形態のデータをＳｍａｌｌ  Ｗｒｉｔｅにより書き込む場合に読み出しエラーが生じたときの動作を示す図である。図１３および図１４に従って、本実施の形態のストレージ装置１００においてデータをＳｍａｌｌ  Ｗｒｉｔｅにより書き込む場合に、読み出しエラーが生じたときの動作について説明する。
【０１１４】
ここで、図１３に示すように、アクセス要求のデータが書き込まれるストライプである、ストレージ装置１００が有する記憶デバイス１２０ｃ〜１２０ｆのストライプ１２０２ｐ１には、未フォーマット識別子が書き込まれているものとする。また、ホストコンピュータ３００からストレージ装置１００に対して新規データであるデータ１３２ｑ１の書き込みのアクセス要求があるものとする。さらに、アクセス部１０２は、データ１３２ｑ１の書き込みのアクセス要求に応じて、記憶デバイス１２０ｃ〜１２０ｆにデータ１３２ｑ１およびデータ１３２ｑ１による更新後のパリティである新規パリティをＳｍａｌｌ  Ｗｒｉｔｅにより書き込む予定であるものとする。
【０１１５】
ストレージ装置１００のアクセス部１０２は、ホストコンピュータ３００からのデータ１３２ｑ１の書き込みのアクセス要求を受け付けると、ホストコンピュータ３００に対してデータの書き込みの完了を報告するアクセス完了報告を出力する。
【０１１６】
次に、アクセス部１０２は、ホストコンピュータ３００から受け付けた新規データであるデータ１３２ｑ１の書き込みをＳｍａｌｌ  Ｗｒｉｔｅで行うために、データ１３２ｑ１を書き込むストライプであるストライプ１２０２ｐ１における、データ１３２ｑ１に対応する既存データであるデータ１３２ｐ１および既存パリティであるデータ１３２ｐ４を読み出す。ここで、アクセス部１０２は、ストライプ１２０２ｐ１からのデータ１３２ｐ１の読み出しにおいて読み出しエラーを検出し、書き込みの前の読み出しに失敗しているものとする。
【０１１７】
次に、アクセス部１０２は、データ１３２ｑ１の書き込みの前の読み出しに失敗すると、ストライプ１２０２ｐ１のデータを復旧するために、ストライプ１２０２ｐ１を構成する他の記憶デバイスに記憶されているデータを読み出す。これにより、アクセス部１０２は、他の記憶デバイスから読み出したデータ１３２ｐ２，１３２ｐ３によって、ストライプ１２０２ｐ１の未フォーマット識別子（図１３ではデータ１３２ｐ２，１３２ｐ３のいずれか）を検出することができる。
【０１１８】
ここで、ストライプ１２０２ｑ１は、未フォーマット識別子が記憶されている記憶領域であり、既存のデータ１３２ｐ１，１３２ｐ２，１３２ｐ３，１３２ｐ４は、正規のデータでないため、Ｓｍａｌｌ  Ｗｒｉｔｅによる新規パリティの算出に使用することができない。従って、図１３では未フォーマット識別子が検出されたストライプ１２０２ｐ１に対して、データ１３２ｑ１をＳｍａｌｌ  Ｗｒｉｔｅとして書き込む予定であっても、Ｓｍａｌｌ  Ｗｒｉｔｅを行わない。
【０１１９】
この場合、アクセス部１０２は、図１４に示すように、Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅと同様に、ホストコンピュータ３００から受け付けた新規データであるデータ１３２ｑ１を書き込むストライプにおける、データ１３２ｑ１の書き込みにより更新されない記憶領域に対して書き込むフォーマットデータであるデータ１３２ｑ２，１３２ｑ３を作成する。次に、アクセス部１０２は、データ１３２ｑ１〜１３２ｑ３についてＸＯＲ演算を行って新規パリティであるデータ１３２ｑ４を算出する。
【０１２０】
次に、アクセス部１０２は、データ１３２ｑ１〜１３２ｑ４を、記憶デバイス１２０ｃ〜１２０ｆの未フォーマット識別子領域であるストライプ１２０２ｐ１に書き込む。これにより、新規データであるデータ１３２ｑ１〜１３２ｑ３および新規データのパリティであるデータ１３２ｑ４がストライプ１２０２ｑ１に示すように書き込まれると共に、ストライプ１２０２ｑ１の論理フォーマットが完了する。なお、図１３および図１４では、ストライプ１２０２ｐ１のデータが失われていることによる読み出しエラーが発生した場合について説明したが、ストライプ１２０２ｐ１に未フォーマット識別子が書き込まれている場合であって、アクセス部１０２により、読み出したデータ１３２ｐ４が未フォーマット識別子でなく、正規のデータでもないことが検出されたときについても同様である。
【０１２１】
図１５および図１６は、第２の実施の形態のデータをＲｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅにより書き込む場合に読み出しエラーが生じたときの動作を示す図である。図１５および図１６に従って、本実施の形態のストレージ装置１００においてデータをＲｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅにより書き込む場合に、読み出しエラーが生じたときの動作について説明する。
【０１２２】
ここで、図１５に示すように、アクセス要求のデータが書き込まれるストライプである、ストレージ装置１００が有する記憶デバイス１２０ｃ〜１２０ｆのストライプ１２０２ｒ１には、未フォーマット識別子が書き込まれているものとする。また、ホストコンピュータ３００からストレージ装置１００に対して新規データであるデータ１３２ｓ２，１３２ｓ３の書き込みのアクセス要求があるものとする。さらに、アクセス部１０２は、データ１３２ｓ２，１３２ｓ３の書き込みのアクセス要求に応じて、記憶デバイス１２０ｃ〜１２０ｆにデータ１３２ｓ２，１３２ｓ３およびデータ１３２ｓ２，１３２ｓ３による更新後のパリティである新規パリティをＲｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅにより書き込む予定であるものとする。
【０１２３】
ストレージ装置１００のアクセス部１０２は、ホストコンピュータ３００からのデータ１３２ｓ２，１３２ｓ３の書き込みのアクセス要求を受け付けると、ホストコンピュータ３００に対してデータの書き込みの完了を報告するアクセス完了報告を出力する。
【０１２４】
次に、アクセス部１０２は、ホストコンピュータ３００から受け付けた新規データであるデータ１３２ｓ２，１３２ｓ３の書き込みをＲｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅで行うために、データ１３２ｓ２，１３２ｓ３を書き込むストライプであるストライプ１２０２ｒ１における、更新されない既存データであるデータ１３２ｒ１を読み出す。ここで、アクセス部１０２は、ストライプ１２０２ｒ１からのデータ１３２ｒ１の読み出しにおいて、読み出しエラーを検出し、書き込みの前の読み出しに失敗しているものとする。
【０１２５】
次に、アクセス部１０２は、データ１３２ｓ２，１３２Ｓ３の書き込みの前の読み出しに失敗すると、ストライプ１２０２ｒ１のデータを復旧するために、ストライプ１２０２ｒ１における他の記憶デバイスに記憶されているデータ１３２ｒ２，１３２ｒ３，１３２ｒ４を読み出す。これにより、アクセス部１０２は、他の記憶デバイスから読み出したデータ１３２ｒ２，１３２ｒ３，１３２ｒ４によって、ストライプ１２０２ｒ１の未フォーマット識別子（図１５ではデータ１３２ｒ２，１３２ｒ３のいずれか）を検出することができる。
【０１２６】
ここで、ストライプ１２０２ｓ１は、未フォーマット識別子が記憶されている記憶領域であり、既存のデータ１３２ｒ１，１３２ｒ２，１３２ｒ３，１３２ｒ４は、正規のデータでないため、Ｒｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅによる新規パリティの算出に使用することができない。従って、図１５および図１６の例では未フォーマット識別子が検出されたストライプ１２０２ｒ１に対して、データ１３２ｓ２，１３２ｓ３をＲｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅとして書き込む予定であっても、Ｒｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅを行わない。
【０１２７】
この場合、アクセス部１０２は、図１６に示すように、Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅと同様に、ホストコンピュータ３００から受け付けた新規データであるデータ１３２ｓ２，１３２ｓ３を書き込むストライプにおける、データ１３２ｓ２，１３２ｓ３の書き込みにより更新されない記憶領域に対して書き込むフォーマットデータであるデータ１３２ｓ１を作成する。次に、アクセス部１０２は、データ１３２ｓ１〜１３２ｓ３のＸＯＲ演算を行って、新規パリティであるデータ１３２ｓ４を算出する。
【０１２８】
次に、アクセス部１０２は、データ１３２ｓ１〜１３２ｓ４を、未フォーマット識別子が書き込まれている未フォーマット識別子領域であるストライプ１２０２ｒ１に書き込む。これにより、新規データであるデータ１３２ｓ１〜１３２ｓ３および新規データの新規パリティであるデータ１３２ｓ４がストライプ１２０２ｓ１に示すように書き込まれると共に、ストライプ１２０２ｓ１の論理フォーマットが完了する。なお、図１５および図１６では、ストライプ１２０２ｒ１のデータが失われていることによる読み出しエラーが発生した場合について説明したが、ストライプ１２０２ｒ１に未フォーマット識別子が書き込まれている場合であって、アクセス部１０２により、読み出したデータ１３２ｒ１が未フォーマット識別子でなく、正規のデータでもないことが検出されたときについても同様である。
【０１２９】
図１７は、第２の実施の形態の未フォーマット識別子が検出された領域に対して論理フォーマットが行われる場合の動作を示す図である。本実施の形態のストレージ装置１００は、図８および図９において前述したように、ＲＡＩＤを構成する記憶デバイス１２０ｃ〜１２０ｆについて、初期化時に各ストライプの記憶領域に未フォーマット識別子を書き込む。その後、ストレージ装置１００では、ホストコンピュータ３００によるデータの書き込みのアクセス要求に応じて未フォーマット識別子が書き込まれた未フォーマット識別子領域に対してデータが書き込まれていくが、アクセスが一度もないストライプには、未フォーマット識別子が残り続けてしまうことになる。
【０１３０】
これに対して図１７では、ホストコンピュータ３００によるアクセス要求とは別の契機で記憶デバイス１２０ｃ〜１２０ｆのすべての記憶領域に対して読み書きを行って記憶デバイス１２０ｃ〜１２０ｆの機能を検査するディスクパトロールにより、ストライプの未フォーマット識別子の有無をチェックする。チェックの結果、未フォーマット識別子が検出されたストライプにはフォーマットデータが書き込まれ、これにより未フォーマット識別子領域の論理フォーマットを完了させる。
【０１３１】
以上のように、ストレージ装置１００により未フォーマット識別子が検出された領域に対して論理フォーマットを行う場合の動作を、図１７に従って説明する。
図１７に示すように、ストレージ装置１００には、ディスクパトロール前の状態として、記憶デバイス１２０ｃ〜１２０ｆの記憶領域から構成されるストライプ１２０２ｔ１〜１２０２ｔ４が記憶されているものとする。
【０１３２】
ストライプ１２０２ｔ１（データ  ０：ＢＣＣ  Ｍ，データ  ０：ＢＣＣ  Ｍ，データ  −：ＢＣＣ  −，データ  −：ＢＣＣ  −），１２０２ｔ４（データ  −：ＢＣＣ  −，データ  −：ＢＣＣ  −，データ  ０：ＢＣＣ  Ｍ，データ  ０：ＢＣＣ  Ｍ）は、未フォーマット識別子が書き込まれている未フォーマット識別子領域である。また、ストライプ１２０２ｔ２（データ  Ｆ：ＢＣＣ  Ｂ５１，データ  Ｆ：ＢＣＣ  Ｂ５２，データ  ＮＰ１６：ＢＣＣ  Ｂ５３，データ  Ｎ１８：ＢＣＣ  ５４），１２０２ｔ３（データ  Ｎ１９：ＢＣＣ  Ｂ５５，データ  ＮＰ１７：ＢＣＣ  Ｂ５６，データ  ＮＰ２０：ＢＣＣ  Ｂ５７，データ  Ｎ２１：ＢＣＣ  ５８）は、ホストコンピュータ３００による書き込みのアクセス要求のデータまたはフォーマットデータが書き込まれている。
【０１３３】
本実施の形態では、詳しくは図２０の未フォーマット識別子検出処理において後述するが、アクセス部１０２は、フォーマットデータ書き込み完了フラグが無効であって、かつ、未フォーマット識別子検出処理を未フォーマット識別子書き込み処理の実行完了後である場合、ディスクパトロールを実行する。アクセス部１０２は、ディスクパトロールにおいて、以上のストライプ１２０２ｔ１〜１２０２ｔ４に対して、ストレージ装置１００の各記憶領域をチェックし、各ストライプから未フォーマット識別子を検出する。そして、アクセス部１０２は、未フォーマット識別子を検出したストライプにフォーマットデータを書き込む。ディスクパトロールの実行後の記憶デバイス１２０ｃ〜１２０ｆの各ストライプを、ストライプ１２０２ｕ１，１２０２ｕ１，１２０２ｕ３，１２０２ｕ４に示す。
【０１３４】
ここで、ディスクパトロールの実行により、未フォーマット識別子領域であったストライプ１２０２ｔ１が、ストライプ１２０２ｕ１（データ  Ｆ：ＢＣＣ  Ｂ５９，データ  Ｆ：ＢＣＣ  Ｂ６０，データ  Ｆ：ＢＣＣ  Ｂ６１，データ  ＦＰ１：ＢＣＣ  Ｂ６２）のように、フォーマットデータが書き込まれてフォーマット完了領域となる。同様に、ディスクパトロールの実行により、未フォーマット識別子領域であったストライプ１２０２ｔ４が、ストライプ１２０２ｕ４（データ  ＦＰ２：ＢＣＣ  Ｂ６３，データ  Ｆ：ＢＣＣ  Ｂ６４，データ  Ｆ：ＢＣＣ  Ｂ６５，データ  Ｆ：ＢＣＣ  Ｂ６６）のように、フォーマットデータが書き込まれてフォーマット完了領域となる。一方、ストライプ１２０２ｕ２，１２０２ｕ３は、既にホストコンピュータ３００からの書き込みのアクセス要求のデータが書き込まれており、未フォーマット識別子が書き込まれていないので、フォーマットデータが書き込まれず、ディスクパトロールの実行の前後で記憶内容は変化しない。
【０１３５】
次に、アクセス部１０２は、ディスクパトロールによりストレージ装置１００内のすべてのストライプについてチェックが完了した場合には、フォーマットデータ書き込み完了フラグを有効にする。アクセス部１０２は、フォーマットデータ書き込み完了フラグが有効である場合、ディスクパトロールを実行しない。
【０１３６】
このように、本実施の形態のストレージ装置１００では、ディスクパトロールによって、ホストコンピュータ３００による書き込みのアクセス要求が一度もないストライプに対してフォーマットデータを書き込むことができる。なお、ディスクパトロールは、アクセスの頻度の統計データを取得してアクセスの頻度を予測する等により、ストレージ装置１００においてホストコンピュータ３００から記憶デバイス１２０ｃ〜１２０ｆへのアクセスの頻度が低下している際にするとよい。これにより、ストレージ装置１００の処理の負荷の集中を回避してディスクパトロール処理を実行することができる。
【０１３７】
また、ホストコンピュータ３００による書き込みのアクセス要求時に未フォーマット識別子が検出されることを抑制できるので、ホストコンピュータ３００による書き込みのアクセス要求時における処理の負荷も軽減できる。
【０１３８】
また、フォーマットデータ書き込み完了フラグが有効である場合には、ストレージ装置１００内のストライプにフォーマット未完了領域および未フォーマット識別子領域がなくなったと判断でき、ディスクパトロールの実行が不要になるので、ストレージ装置１００の処理の負荷を軽減できる。
【０１３９】
図１８は、第２の実施の形態の未フォーマット識別子書き込み処理の手順を示すフローチャートである。本実施の形態のストレージ装置１００は、記憶デバイス１２０ｃ〜１２０ｆが接続された場合に、記憶デバイス１２０ｃ〜１２０ｆを初期化するための論理フォーマット時に、記憶デバイス１２０ｃ〜１２０ｆの記憶領域に未フォーマット識別子を書き込む未フォーマット識別子書き込み処理を実行する。以下では、図１８に示す未フォーマット識別子書き込み処理をフローチャートのステップ番号に沿って説明する。
【０１４０】
［ステップＳ１１］アクセス部１０２は、フォーマット要求を行ったフォーマット制御部１０１に対してフォーマット完了を報告する。
［ステップＳ１２］アクセス部１０２は、ホストコンピュータ３００から記憶デバイス１２０ｃ〜１２０ｆのストライプに対するデータの書き込みのアクセス要求があるか否かを判定する。書き込みのアクセス要求があれば（ステップＳ１２  ＹＥＳ）、処理はステップＳ１３に進められる。一方、書き込みのアクセス要求がなければ（ステップＳ１２  ＮＯ）、処理はステップＳ１４に進められる。
【０１４１】
［ステップＳ１３］アクセス部１０２は、ホストコンピュータ３００から書き込みのアクセス要求が有った場合に、書き込みのアクセス要求のデータをストライプに書き込むフォーマット中データ書き込み処理（詳しくは図１９において後述）を実行する。その後、処理はステップＳ１７に進められる。
【０１４２】
［ステップＳ１４］アクセス部１０２は、管理情報記憶部１５１に記憶されている管理テーブルを参照して、フォーマットデータおよび未フォーマット識別子のいずれも書き込まれていないフォーマット未完了領域のストライプを１個取得する。
【０１４３】
［ステップＳ１５］アクセス部１０２は、記憶デバイス１２０ｃ〜１２０ｆの記憶領域のうち、ステップＳ１４で参照した管理テーブル上に記憶されている、論理フォーマットが完了していない記憶領域であるフォーマット未完了領域のストライプに対して、未フォーマット識別子を書き込む。このとき、アクセス部１０２は、図９において前述したように、未フォーマット識別子をストライプ単位で記憶領域に書き込む。
【０１４４】
［ステップＳ１６］アクセス部１０２は、ステップＳ１５で未フォーマット識別子を書き込んだストライプの記憶領域が論理フォーマットされたものとして管理テーブルを更新する。
【０１４５】
［ステップＳ１７］アクセス部１０２は、管理テーブル上で記憶デバイス１２０ｃ〜１２０ｆのすべての記憶領域の論理フォーマットが完了したか否かを判定する。管理テーブル上ですべての記憶領域について論理フォーマットが完了していれば（ステップＳ１７  ＹＥＳ）、処理は終了する。一方、管理テーブル上で論理フォーマットが行われていない領域があれば（ステップＳ１７  ＮＯ）、処理はステップＳ１３に進められる。
【０１４６】
図１９は、第２の実施の形態のフォーマット中データ書き込み処理の手順を示すフローチャートである。本実施の形態のストレージ装置１００は、未フォーマット識別子書き込み処理の実行中にアクセス要求があった場合、記憶デバイス１２０ｃ〜１２０ｆのストライプの記憶領域にアクセス要求のデータを書き込むフォーマット中データ書き込み処理を実行する。なお、フォーマット中データ書込み処理は、図１８において前述した未フォーマット識別子書き込み処理の実行中にホストコンピュータ３００からのデータの書き込みのアクセス要求が無ければ実行されない。以下では、図１９に示すフォーマット中データ書き込み処理をフローチャートのステップ番号に沿って説明する。
【０１４７】
［ステップＳ２１］アクセス部１０２は、アクセス要求のデータがキャッシュメモリ（例えば、キャッシュメモリ１１２ａ）に書き込まれた段階で、データ書き込みのアクセス要求を行ったホストコンピュータ３００に対してデータ書き込みの完了を報告する。
【０１４８】
［ステップＳ２２］アクセス部１０２は、管理情報記憶部１５１に記憶されている管理テーブルを参照して、記憶デバイス１２０ｃ〜１２０ｆのストライプを１個取得する。
［ステップＳ２３］アクセス部１０２は、管理テーブル上でアクセス要求に対応する書き込みの対象の記憶領域について論理フォーマットが完了しているか否かを判定する。管理テーブル上で書き込み対象の記憶領域の論理フォーマットが完了していれば（ステップＳ２３  ＹＥＳ）、処理はステップＳ２８に進められる。一方、管理テーブル上で書き込み対象の記憶領域の論理フォーマットが完了していなければ（ステップＳ２３  ＮＯ）、処理はステップＳ２４に進められる。
【０１４９】
［ステップＳ２４］アクセス部１０２は、アクセス要求においてデータが書き込まれず、更新されない記憶領域に書き込むフォーマットデータを作成する。
［ステップＳ２５］アクセス部１０２は、アクセス要求によりストライプが更新された後のパリティを作成する。このときアクセス部１０２は、Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅ，Ｒｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅ，Ｓｍａｌｌ  Ｗｒｉｔｅのうちのいずれかの方法を使用して更新後のパリティを作成する。また、アクセス部１０２は、アクセス要求における更新後のデータ、更新前のストライプのデータおよび更新前のストライプのパリティならびにステップＳ２４で作成したフォーマットデータのうち、使用する方法で必要なデータを用いて更新後のパリティを作成する。
【０１５０】
［ステップＳ２６］アクセス部１０２は、記憶デバイス１２０ｃ〜１２０ｆにおけるアクセス要求の対象のストライプの記憶領域に、アクセス要求のデータ、ステップＳ２４で作成したフォーマットデータおよびステップＳ２５で作成した更新後のパリティを書き込む。
【０１５１】
［ステップＳ２７］アクセス部１０２は、ステップＳ２６でデータを書き込んだストライプの記憶領域が論理フォーマットされたものとして管理テーブルを更新する。その後、処理は未フォーマット識別子書き込み処理に復帰する。
【０１５２】
［ステップＳ２８］アクセス部１０２は、アクセス要求のストライプの更新後のパリティを作成する。
［ステップＳ２９］アクセス部１０２は、記憶デバイス１２０ｃ〜１２０ｆにおけるアクセス要求の対象のストライプの記憶領域に、アクセス要求のデータおよびステップＳ２８で作成した更新後のパリティを書き込む。その後、処理は未フォーマット識別子書き込み処理に復帰する。
【０１５３】
図２０は、第２の実施の形態の未フォーマット識別子検出処理の手順を示すフローチャートである。本実施の形態のストレージ装置１００は、未フォーマット識別子書き込み処理の完了後に、例えば記憶デバイス１２０ｃ〜１２０ｆへのアクセスの頻度が低下している際等、ホストコンピュータ３００によるアクセス要求とは異なる契機で、未フォーマット識別子検出処理を実行する。未フォーマット識別子検出処理は、論理フォーマットが行われていないことを示す未フォーマット識別子が書き込まれているストライプを検出し、検出したストライプの記憶領域に対して論理フォーマットを行うディスクパトロールを実行する処理である。本実施の形態のストレージ装置１００は、フォーマットデータ書き込み完了フラグが無効であって、かつ、未フォーマット識別子検出処理を未フォーマット識別子書き込み処理の実行完了後である場合において、例えば所定時間の経過後等、任意の契機で実行する。図２０に示す未フォーマット識別子検出処理をフローチャートのステップ番号に沿って説明する。
【０１５４】
［ステップＳ３１］アクセス部１０２は、記憶デバイス１２０ｃ〜１２０ｆのストライプを構成する記憶領域から、記憶されているデータを順に１ストライプずつ読み出す。
［ステップＳ３２］アクセス部１０２は、ステップＳ３１でデータを読み出したストライプの記憶領域から未フォーマット識別子を検出したか否かを判定する。ストライプから未フォーマット識別子を検出していれば（ステップＳ３２  ＹＥＳ）、処理はステップＳ３３に進められる。一方、ストライプから未フォーマット識別子を検出していなければ（ステップＳ３２  ＮＯ）、処理はステップＳ３１に進められる。
【０１５５】
［ステップＳ３３］アクセス部１０２は、ステップＳ３２で未フォーマット識別子が検出されたストライプの記憶領域に書き込むフォーマットデータを作成する。
［ステップＳ３４］アクセス部１０２は、ステップＳ３２で未フォーマット識別子が検出されたストライプの記憶領域に、ステップＳ３３で作成したフォーマットデータを書き込む。
【０１５６】
［ステップＳ３５］アクセス部１０２は、記憶デバイス１２０ｃ〜１２０ｆのすべての記憶領域について、ステップＳ３１のデータの読み出しが完了したか否かについて判定する。すべての記憶領域についてデータの読み出しが完了していれば（ステップＳ３５  ＹＥＳ）、処理はステップＳ３６に進められる。一方、データの読み出しが完了してない記憶領域があれば（ステップＳ３５  ＮＯ）、処理はステップＳ３１に進められる。
【０１５７】
［ステップＳ３６］アクセス部１０２は、フォーマットデータ書き込み完了フラグを有効に設定する。その後、処理は終了する。
図２１から図２３は、第２の実施の形態の未フォーマット識別子書き込み完了後データ書き込み処理の手順を示すフローチャートである。本実施の形態のストレージ装置１００は、未フォーマット識別子書き込み処理の終了後にアクセス要求があった場合において、記憶デバイス１２０ｃ〜１２０ｆのストライプの記憶領域にＲｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅ，Ｓｍａｌｌ  Ｗｒｉｔｅによりアクセス要求のデータを書き込む場合、未フォーマット識別子書き込み完了後データ書き込み処理を実行する。以下では、図２１から図２３に示す未フォーマット識別子書き込み完了後データ書き込み処理をフローチャートのステップ番号に沿って説明する。
【０１５８】
［ステップＳ４１］アクセス部１０２は、アクセス要求のデータがキャッシュメモリ（例えば、キャッシュメモリ１１２ａ）に書き込まれた段階で、データ書き込みのアクセス要求を行ったホストコンピュータ３００に対してデータ書き込みの完了を報告するデータ書き込み報告を送信すると共に、書き込み先の記憶領域からデータを読み出す。
【０１５９】
［ステップＳ４２］アクセス部１０２は、ステップＳ４１でデータの読み出しに成功したか否かについて判定する。書き込み先からのデータの読み出しに成功していれば（ステップＳ４２  ＹＥＳ）、処理はステップＳ４３に進められる。一方、書き込み先からのデータの読み出しに失敗していれば（ステップＳ４２  ＮＯ）、処理はステップＳ５１に進められる。
【０１６０】
［ステップＳ４３］アクセス部１０２は、ステップＳ４１で読み出したデータのＢＣＣが正しいか否かを判定する。ＢＣＣが正しければ（ステップＳ４３  ＹＥＳ）、処理はステップＳ４４に進められる。一方、ＢＣＣが正しくなければ（ステップＳ４３  ＮＯ）、処理はステップＳ４６に進められる。
【０１６１】
［ステップＳ４４］アクセス部１０２は、アクセス要求のストライプの更新後のパリティを作成する。
［ステップＳ４５］アクセス部１０２は、アクセス要求の対象のストライプを構成する記憶デバイス１２０ｃ〜１２０ｆの記憶領域に、アクセス要求のデータおよびステップＳ４４で作成した更新後のパリティを書き込む。ここで、本実施の形態では、Ｒｅａｄ  Ｂａｎｄｗｉｄｔｈ  Ｗｒｉｔｅ，Ｓｍａｌｌ  Ｗｒｉｔｅのいずれの書き込み方法においても、１個のストライプを構成するすべての記憶領域に書き込み要求のデータ、フォーマットデータのいずれかを書き込む。これにより、ストライプのデータ構造は、ストライプを論理フォーマットした後にデータを書き込んだ場合と同様になる。その後、処理は終了する。
【０１６２】
［ステップＳ４６］アクセス部１０２は、ステップＳ４１でデータを読み出したストライプの記憶領域から未フォーマット識別子を検出したか否かを判定する。ストライプから未フォーマット識別子を検出していれば（ステップＳ４６  ＹＥＳ）、処理はステップＳ４７に進められる。一方、ストライプから未フォーマット識別子を検出していなければ（ステップＳ４６  ＮＯ）、処理はステップＳ５１に進められる。
【０１６３】
［ステップＳ４７］アクセス部１０２は、アクセス要求によってデータが書き込まれず、更新されない記憶領域に対して書き込むフォーマットデータを作成する。
［ステップＳ４８］アクセス部１０２は、アクセス要求のストライプの更新後のパリティを作成する。
【０１６４】
［ステップＳ４９］アクセス部１０２は、アクセス要求の対象のストライプを構成する記憶デバイス１２０ｃ〜１２０ｆの記憶領域に、アクセス要求のデータ、ステップＳ４７で作成したフォーマットデータおよびステップＳ４８で作成した更新後のパリティを書き込む。その後、処理は終了する。
【０１６５】
［ステップＳ５１］アクセス部１０２は、アクセス要求のデータがキャッシュメモリ（例えば、キャッシュメモリ１１２ａ）に書き込まれた段階で、データ書き込みのアクセス要求を行ったホストコンピュータ３００に対してデータ書き込み報告を送信すると共に、ステップＳ４１でデータの読み出しを行った記憶デバイスとは異なる記憶デバイスの書き込み先の記憶領域からデータを読み出す。
【０１６６】
［ステップＳ５２］アクセス部１０２は、ステップＳ５１でデータの読み出しに成功したか否かについて判定する。データの読み出しに成功していれば（ステップＳ５２  ＹＥＳ）、処理はステップＳ５３に進められる。一方、データの読み出しに失敗していれば（ステップＳ５２  ＮＯ）、処理はステップＳ６１に進められる。
【０１６７】
［ステップＳ５３］アクセス部１０２は、ステップＳ５１で読み出したデータのＢＣＣが正しいか否かを判定する。ＢＣＣが正しければ（ステップＳ５３  ＹＥＳ）、処理はステップＳ５４に進められる。一方、ＢＣＣが正しくなければ（ステップＳ５３  ＮＯ）、処理はステップＳ５６に進められる。
【０１６８】
［ステップＳ５４］アクセス部１０２は、アクセス要求のストライプの更新後のパリティを作成する。
［ステップＳ５５］アクセス部１０２は、アクセス要求の対象のストライプを構成する記憶デバイス１２０ｃ〜１２０ｆの記憶領域に、アクセス要求のデータおよびステップＳ５４で作成した更新後のパリティを書き込む。その後、処理は終了する。
【０１６９】
［ステップＳ５６］アクセス部１０２は、ステップＳ５１でデータを読み出したストライプの記憶領域から未フォーマット識別子を検出したか否かを判定する。未フォーマット識別子を検出していれば（ステップＳ５６  ＹＥＳ）、処理はステップＳ５７に進められる。一方、未フォーマット識別子を検出していなければ（ステップＳ５６  ＮＯ）、処理はステップＳ６１に進められる。
【０１７０】
［ステップＳ５７］アクセス部１０２は、アクセス要求によりデータが書き込まれず、更新されない記憶領域に対して書き込むフォーマットデータを作成する。
［ステップＳ５８］アクセス部１０２は、アクセス要求のストライプの更新後のパリティを作成する。
【０１７１】
［ステップＳ５９］アクセス部１０２は、アクセス要求の対象のストライプを構成する記憶デバイス１２０ｃ〜１２０ｆの記憶領域に、アクセス要求のデータ、ステップＳ５７で作成したフォーマットデータおよびステップＳ５８で作成した更新後のパリティを書き込む。その後、処理は終了する。
【０１７２】
［ステップＳ６１］アクセス部１０２は、ステップＳ４１およびステップＳ５１でデータの読み出しを行ったストライプからのデータの読み出しに失敗した際のエラー処理を実行する。この場合、例えばストレージ装置１００がＲＡＩＤ５であれば、ディスクアレイが故障しているものとして処理される。また、ストレージ装置１００がＲＡＩＤ６であれば、さらに異なる記憶デバイスのデータの読み出しを試みることができる。その後、処理は終了する。
【０１７３】
なお、本実施の形態では、論理フォーマットについて適用した場合について説明したが、これに限らず、物理フォーマットについても適用することができる。
このように、第２の実施の形態のストレージ装置１００では、ホストコンピュータ３００からのデータの書き込みのアクセス要求時に、未フォーマット識別子により書き込み先のストライプの論理フォーマットが完了しているか否かの判定をすることができる。論理フォーマットの完了前の記憶媒体へのアクセス時に記憶媒体の負荷の増加の抑制が可能となり、また、フォーマット完了までの時間の短縮が可能となる。
【０１７４】
また、未フォーマット識別子の書き込み数をＲＡＩＤの冗長数＋１にすることにより、すべての記憶デバイスにフォーマットデータを書き込む場合に比較して、記憶デバイスの初期設定時の所要時間を短縮することができると共に、記憶デバイスの初期設定時の負荷も軽減できる。
【０１７５】
また、未フォーマット識別子の書き込み中にホストコンピュータ３００からのデータ書き込みのアクセス要求があった場合には、アクセス要求のデータとフォーマットデータとを一度の処理でストライプに書き込むので、書き込み処理の回数が削減できる。
【０１７６】
なお、各実施の形態で示した以上の処理は、コンピュータに所定のプログラムを実行させることで実現できる。その場合、実現すべき処理内容を記述したプログラムが提供される。処理内容を記述したプログラムは、コンピュータ読み取り可能な記録媒体に記録しておくことができる。コンピュータ読み取り可能な記録媒体には、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリがある。磁気記録装置には、ハードディスク装置、フレキシブルディスク（ＦＤ）、磁気テープ（ＭＴ）等がある。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc − Read Only Memory）、ＣＤ−Ｒ（Recordable）、ＣＤ−ＲＷ（ReWritable）等がある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）等がある。
【０１７７】
プログラムを流通させる場合、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにプログラムを転送することもできる。
【０１７８】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラム又はサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送される毎に、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０１７９】
以上説明した第１の実施の形態、第２の実施の形態に関し、さらに以下の付記を開示する。
（付記１）  複数の記憶媒体の記憶領域から構成されたストライプによりデータを分散して記憶するストレージ装置において、
前記複数の記憶媒体のフォーマットの際に、ストライプを構成する複数の記憶媒体の記憶領域の少なくとも一部にフォーマットが完了していないことを示す未フォーマット識別子を書き込み、前記ストライプを構成する記憶領域への新規データの書き込みのアクセスの際に、前記アクセスの対象のストライプを構成する記憶領域に記憶されている既存データを読み出し、読み出した既存データから前記未フォーマット識別子を検出した場合には、前記アクセスの対象のストライプを構成する記憶領域に前記新規データまたはフォーマットにより書き込まれるフォーマットデータを書き込むアクセス部を有することを特徴とするストレージ装置。
【０１８０】
（付記２）  前記アクセス部は、前記記憶媒体の記憶領域へのアクセスの際に、前記アクセスの対象のストライプを構成する記憶領域に記憶されている既存データを読み出し、前記読み出した既存データから前記未フォーマット識別子を検出した場合であって、前記アクセスにおいて前記アクセスの対象のストライプに前記新規データを書き込むときには、前記アクセスの対象のストライプを構成する記憶領域に当該新規データを書き込み、前記アクセスにおいて前記アクセスの対象のストライプに前記新規データを書き込まないときには、前記アクセスの対象のストライプを構成する記憶領域に前記フォーマットデータを書き込むことを特徴とする付記１記載のストレージ装置。
【０１８１】
（付記３）  前記アクセス部は、前記記憶媒体の記憶領域へのアクセスの際に、前記アクセス対象のストライプを構成する記憶領域に記憶されている既存データを読み出し、
前記読み出した既存データから前記未フォーマット識別子を検出した場合、前記アクセスの対象のストライプを構成する記憶領域のうち、前記新規データを書き込む記憶領域に当該新規データを書き込み、前記新規データを書き込まない記憶領域に前記フォーマットデータを書き込むことを特徴とする付記１記載のストレージ装置。
【０１８２】
（付記４）  前記アクセス部は、前記記憶媒体の記憶領域の記憶内容を順次読み出し、当該記憶領域から未フォーマット識別子を検出した場合には、前記アクセスの対象のストライプに前記フォーマットデータを書き込むことを特徴とする付記１記載のストレージ装置。
【０１８３】
（付記５）  前記アクセス部は、前記ストライプへの新規データの書き込みのアクセスにより前記ストライプに記憶されている既存データのうちの一部の記憶領域を前記新規データにより更新する場合、前記新規データにより更新しない既存データを前記ストライプから読み出し、前記新規データと読み出した既存データとにより更新後のパリティデータである新規パリティを算出し、前記ストライプに記憶されている、前記新規データにより更新する既存データを前記新規データで更新すると共に、前記ストライプの更新前のパリティデータである既存パリティを前記新規パリティで更新することを特徴とする付記１記載のストレージ装置。
【０１８４】
（付記６）  前記アクセス部は、前記ストライプへの新規データの書き込みのアクセスにより前記ストライプに記憶されている既存データのうちの一部を前記新規データにより更新する場合、前記新規データにより更新する既存データと前記ストライプの更新前のパリティデータである既存パリティとを読み出し、前記新規データと読み出した既存データと読み出した既存パリティとにより更新後のパリティデータである新規パリティを算出し、前記ストライプに記憶されている、前記新規データにより更新する既存データを前記新規データで更新すると共に、前記既存パリティを前記新規パリティで更新することを特徴とする付記１記載のストレージ装置。
【０１８５】
（付記７）  前記複数の記憶媒体は、ＲＡＩＤを構成し、
前記アクセス部は、前記複数の記憶媒体の初期化の際に前記複数の記憶媒体の前記ストライプの前記記憶領域のうちの前記記憶媒体が故障しても記憶しているデータを復元可能な記憶媒体数である冗長数よりも１多い個数の記憶領域に前記未フォーマット識別子を書き込むと共に前記管理情報記憶部に対して前記未フォーマット識別子を書き込んだ前記ストライプの前記記憶領域について前記論理フォーマットが完了した旨を示す管理情報を記憶させる、
ことを特徴とする付記１記載のストレージ装置。
【０１８６】
（付記８）  前記複数の記憶媒体のすべてのストライプに前記フォーマットデータの書き込みが完了したか否かを示すフォーマットデータ書き込み完了フラグを記憶するフラグ記憶部を有し、
前記アクセス部は、前記複数の記憶媒体のすべてのストライプに前記フォーマットデータの書き込みが完了したときには、前記フォーマットデータ書き込み完了フラグを有効に設定する、
ことを特徴とする付記４記載のストレージ装置。
【０１８７】
（付記９）  複数の記憶媒体の記憶領域から構成されたストライプによりデータを分散して記憶するストレージ装置を制御するストレージ装置制御プログラムにおいて、
コンピュータを、
前記複数の記憶媒体のフォーマットの際に、ストライプを構成する複数の記憶媒体の記憶領域の少なくとも一部にフォーマットが完了していないことを示す未フォーマット識別子を書き込み、前記ストライプを構成する記憶領域への新規データの書き込みのアクセスの際に、前記アクセスの対象のストライプを構成する記憶領域に記憶されている既存データを読み出し、読み出した既存データから前記未フォーマット識別子を検出した場合には、前記アクセスの対象のストライプを構成する記憶領域に前記新規データまたはフォーマットにより書き込まれるフォーマットデータを書き込むアクセス部として機能させることを特徴とするストレージ装置制御プログラム。
【０１８８】
（付記１０）  複数の記憶媒体の記憶領域から構成されたストライプによりデータを分散して記憶するストレージ装置を制御するストレージ装置制御方法において、
前記複数の記憶媒体のフォーマットの際に、ストライプを構成する複数の記憶媒体の記憶領域の少なくとも一部にフォーマットが完了していないことを示す未フォーマット識別子を書き込み、
前記ストライプを構成する記憶領域への新規データの書き込みのアクセスの際に、前記アクセスの対象のストライプを構成する記憶領域に記憶されている既存データを読み出し、
読み出した既存データから前記未フォーマット識別子を検出した場合には、前記アクセスの対象のストライプを構成する記憶領域に前記新規データまたはフォーマットにより書き込まれるフォーマットデータを書き込む、
ことを特徴とするストレージ装置制御方法。
【符号の説明】
【０１８９】
１  ストレージ装置
１ａ  アクセス部
１ｂ１，１ｂ２，１ｂ３，１ｂ４  記憶媒体
１ｂａ  ストライプ
１ｃ  管理情報記憶部
【図１】
2011215682.tif 000003
【図２】
2011215682.tif 000004
【図３】
2011215682.tif 000005
【図４】
2011215682.tif 000006
【図５】
2011215682.tif 000007
【図６】
2011215682.tif 000008
【図７】
2011215682.tif 000009
【図８】
2011215682.tif 000010
【図９】
2011215682.tif 000011
【図１０】
2011215682.tif 000012
【図１１】
2011215682.tif 000013
【図１２】
2011215682.tif 000014
【図１３】
2011215682.tif 000015
【図１４】
2011215682.tif 000016
【図１５】
2011215682.tif 000017
【図１６】
2011215682.tif 000018
【図１７】
2011215682.tif 000019
【図１８】
2011215682.tif 000020
【図１９】
2011215682.tif 000021
【図２０】
2011215682.tif 000022
【図２１】
2011215682.tif 000023
【図２２】
2011215682.tif 000024
【図２３】
2011215682.tif 000025