(57)【要約】【課題】  フォーマットに要する時間長を短縮化することができる新規な記憶制御技術を提供する。【解決手段】  各記憶ユニット（９１１）に対応したユニットＩＤ及びカウント値を記憶するテーブル（９０８）が備えられる。コントローラ（９０９）は、第一ユニットＩＤを指定したフォーマット指示を受信し、その第一ユニットＩＤに対応したテーブル上のカウント値を更新する。コントローラは、第二ユニットＩＤを指定したライトコマンドを受信し、第二ユニットＩＤに対応したカウント値をテーブルから取得し、そのカウント値をデータに付加して記憶ユニットに書く。第二ユニットＩＤを指定したリードコマンドを受信した場合、コントローラは、記憶ユニットからデータを読み出し、第二ユニットＩＤに対応したカウント値をテーブルから取得し、そのカウント値と、読まれたデータに付加されているカウント値とを比較し、一致していれば、読まれたデータをコマンドの送信元に送信し、一致していなければ、そのデータを、コマンドの送信元に送信しない。【選択図】図７
2007058286.tif 000002
【特許請求の範囲】
【請求項１】
外部に存在する装置である外部装置と通信することができるストレージシステムにおいて、
データを記憶することができる複数の記憶ユニットと、
各記憶ユニットに対応したユニットＩＤ及び特定コードを記憶する管理記憶域と、
コントローラと
を備え、
前記コントローラが、
第一ユニットＩＤを指定したフォーマット指示を受信し、
（Ａ）前記第一ユニットＩＤに対応した前記管理記憶域上の特定コードを更新し、
第二ユニットＩＤを指定したコマンドを外部装置から受信し、
（Ｂ）前記コマンドに従って、前記第二ユニットＩＤに対応した或る記憶ユニットに、前記コマンド内のデータを書き込む場合、前記第二ユニットＩＤに対応した特定コードを前記管理記憶域から取得し、前記取得された特定コードを、前記コマンド内のデータに付加し、特定コードが付加されたデータを前記或る記憶ユニットに書き込み、
（Ｃ）前記コマンドに従って、前記第二ユニットＩＤに対応した或る記憶ユニットからデータを読み出した場合、前記第二ユニットＩＤに対応した特定コードを前記管理記憶域から取得し、前記取得された特定コードと、前記読み出されたデータに付加されている特定コードとを比較し、特定コードが互いに一致していれば、前記読み出されたデータを、前記コマンドの送信元に送信し、一方、特定コードが互いに一致していなければ、前記読み出されたデータを、前記コマンドの送信元に送信しない、
ストレージシステム。
【請求項２】
前記コントローラは、
前記コマンド内のデータを前記或る記憶ユニットに書き込む場合、前記データからデータ保証コードを求め、前記求められたデータ保証コードを前記データに付加し、前記データ保証コード及び前記特定コードが付加されたデータを、前記或る記憶ユニットに書込み、
前記或る記憶ユニットからデータを読み出した場合、特定コードが互いに一致していれば、前記読み出されたデータに付加されているデータ保証コードをチェックし、そのチェックの結果、エラーが検出されなければ、前記読み出されたデータを、前記コマンドの送信元に送信する、
請求項１記載のストレージシステム。
【請求項３】
前記コントローラは、前記データと前記データ保証コードとの間に、前記取得された特定コードを付加する、
請求項２記載のストレージシステム。
【請求項４】
前記コントローラは、前記或る記憶ユニットからデータを読み出した場合、特定コードが互いに一致していなければ、前記読み出されたデータに代えて、最近のフォーマット指示後に何も書かれていないことを示すデータを準備し、前記準備したデータを、前記コマンドの送信元に送信する、
請求項１記載のストレージシステム。
【請求項５】
前記コントローラは、前記管理記憶域上の特定コードの更新中では、外部装置からコマンドを受付けず、その更新が終了した直後に、外部装置からコマンドを受付ける、
請求項１記載のストレージシステム。
【請求項６】
前記コントローラは、前記特定コードを、一ブロック単位で付加する、
請求項１記載のストレージシステム。
【請求項７】
前記複数の記憶ユニットのうちの少なくとも一つの記憶領域が、データ領域と特定コード領域とに別れており、
前記コントローラは、前記或る記憶ユニットにデータを書き込む場合、前記データ領域の或る場所に前記データを書き込み、前記データ領域の或る場所に関連づいた、前記特定コード領域の或る場所に、前記データに付加された特定コードを書き込む、
請求項１記載のストレージシステム。
【請求項８】
前記コントローラは、マイクロプロセッサとハードウェア回路とを備え、
前記マイクロプロセッサが、外部装置から受信したコマンドを解析して、書込みと読出しのどちらを行うべきかを判断し、
前記ハードウェア回路が、前記判断の結果に応じて、前記（Ｂ）の処理又は前記（Ｃ）の処理を行う、
請求項１記載のストレージシステム。
【請求項９】
前記コントローラは、
前記（Ｂ）の処理において、前記取得された特定コードを多重化し、多重化された特定コードを、前記コマンド内のデータに付加し、
前記（Ｃ）の処理において、前記読み出されたデータに付加されている各特定コードを他の特定コードと比較し、特定コード同士が一致していなければ、前記読み出されたデータは不正であるとし、特定コード同士が一致していれば、前記第二ユニットＩＤに対応した特定コードを前記管理記憶域から取得し、前記取得された特定コードと、前記読み出されたデータに付加されている特定コードとの比較を行う、
請求項１記載のストレージシステム。
【請求項１０】
前記データに付加された各特定データは他の特定データから離れた場所に付加されている、
請求項９記載のストレージシステム。
【請求項１１】
前記複数のユニットには、前記（Ａ）、（Ｂ）及び（Ｃ）の処理が行われる第一種の記憶ユニットと、記憶ユニットの全域又は一部にフォーマット処理が施される第二種の記憶ユニットとが含まれており、
前記管理記憶域上には、各記憶ユニット毎に、フォーマットを必要とするか不要とするかを示すフォーマット要否情報が記憶されており、
前記コントローラは、前記フォーマット指示を受けた場合、前記第一ユニットＩＤに対応する前記管理記憶域上のフォーマット要否情報から、前記第一ユニットＩＤに対応する記憶ユニットがフォーマット必要か否かを判断し、不要と判断したら、前記（Ａ）、（Ｂ）及び（Ｃ）の処理を行うようにし、必要と判断したら、前記対応する記憶ユニットの全域又は一部をフォーマットし、前記（Ｂ）及び（Ｃ）の処理を行わないようにする、
請求項１記載のストレージシステム。
【請求項１２】
各記憶ユニットに対応する特定コードは、その記憶ユニットのユニットＩＤを指定したフォーマット指示を受けた回数を示すカウント値である、
請求項１記載のストレージシステム。
【請求項１３】
データを記憶することができる複数の記憶ユニットのうちの一つに対応した第一ユニットＩＤを有するフォーマット指示を受信し、
各記憶ユニットに対応したユニットＩＤ及び特定コードを記憶する管理記憶域から、前記第一ユニットＩＤに対応した特定コードを特定し、特定された特定コードを更新し、
第二ユニットＩＤを指定したコマンドを受信し、
前記コマンドに従って、前記第二ユニットＩＤに対応した或る記憶ユニットに、前記コマンド内のデータを書き込む場合、前記第二ユニットＩＤに対応した特定コードを前記管理記憶域から取得し、前記取得された特定コードを、前記コマンド内のデータに付加し、特定コードが付加されたデータを前記或る記憶ユニットに書き込み、
前記コマンドに従って、前記第二ユニットＩＤに対応した或る記憶ユニットからデータを読み出した場合、前記第二ユニットＩＤに対応した特定コードを前記管理記憶域から取得し、前記取得された特定コードと、前記読み出されたデータに付加されている特定コードとを比較し、特定コードが互いに一致していれば、前記読み出されたデータを、前記コマンドの送信元に送信し、一方、特定コードが互いに一致していなければ、前記読み出されたデータを、前記コマンドの送信元に送信しない、
記憶制御方法。
【請求項１４】
外部に存在する装置である外部装置と通信することができるストレージシステムにおいて、
データを記憶することができる複数の記憶ユニットと、
各記憶ユニットに対応したユニットＩＤ及び特定コードを記憶する管理記憶域と、
コントローラと
を備え、
前記コントローラが、
第一ユニットＩＤを指定したフォーマット指示を受信し、
前記第一ユニットＩＤに対応した前記管理記憶域上の特定コードを更新し、
前記管理記憶域上の特定コードの更新中では、外部装置からコマンドを受付けず、その更新が終了した直後に、外部装置からコマンドを受付け、第二ユニットＩＤを指定した前記コマンドを外部装置から受信し、
前記コマンドに従って、前記第二ユニットＩＤに対応した或る記憶ユニットに、前記コマンド内のデータを書き込む場合、前記第二ユニットＩＤに対応した特定コードを前記管理記憶域から取得し、前記取得された特定コードを、前記コマンド内のデータに付加し、且つ、前記データからデータ保証コードを求め、該データ保証コードも、前記データに付加し、前記データ保証コード及び前記特定コードが付加されたデータを、前記或る記憶ユニットに書込み、
前記コマンドに従って、前記第二ユニットＩＤに対応した或る記憶ユニットからデータを読み出した場合、前記第二ユニットＩＤに対応した特定コードを前記管理記憶域から取得し、前記取得された特定コードと、前記読み出されたデータに付加されている特定コードとを比較し、特定コードが互いに一致していれば、前記読み出されたデータに付加されているデータ保証コードをチェックし、そのチェックの結果、エラーが検出されなければ、前記読み出されたデータを、前記コマンドの送信元に送信し、一方、特定コードが互いに一致していなければ、前記読み出されたデータに代えて、最近のフォーマット指示後に何も書かれていないことを示すデータを準備し、前記準備したデータを、前記コマンドの送信元に送信する、
ストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶制御技術に関する。
【背景技術】
【０００２】
ホスト装置や別のストレージシステム等の外部の装置に接続することができるストレージシステムが知られている。ストレージシステムには、例えば、複数のメディアドライブ（例えば、ハードディスクドライブ）が備えられ、それら複数のメディアドライブにより、論理ユニット（以下、ＬＵ）が提供される。ストレージシステムは、外部装置からライトコマンドを受信し、そのライトコマンドに従って、データをＬＵ（論理ボリュームと呼ばれることもある）に書き込んだり、外部装置からリードコマンドを受信し、そのリードコマンドに従って、ＬＵからデータを読み出して外部装置に送信したりすることができる。ストレージシステムには、例えば、データをＬＵに書き込む場合に、そのデータに、そのデータに不正があるいか否かを検出するためのチェック用コードを付加し、当該データを読み出す場合に、当該データに付加されているチェック用コードをチェックすることにより、データの不正を検出し、以って、データの信頼性を向上しているものがある（本明細書では、そのチェック用コードを、便宜上、「データ保証コード」と言う）。データ保証コードとしては、例えば、データの論理演算値であるＬＲＣ（Longitudinal Redundancy Check）や、データの格納先となるＬＵの番号及び論理ブロックアドレス（ＬＢＡ）の一部（例えば後ろ２バイト）から構成されるコード（以後、便宜上、ＬＡ（Logical Address）と称する）がある。
【０００３】
この種のストレージシステムでは、ＬＵの使用前には、予め、メディアドライブ上のデータとデータ保証コードとの整合性をとっておく必要がある。つまり、予めフォーマットを行っておく必要がある。なぜなら、そうしておかないと、データ保証コードのチェックの結果、データとデータ保証コードとの間で矛盾が生じ、データに不正があると検出されてしまうからである。
【０００４】
一般的に、フォーマットでは、メディアドライブが有する記憶領域全体にデータ（例えば「０」という値）を書き込む必要があるが、近年のドライブ容量の増加に伴い、フォーマットに要する時間の長時間化が問題となる。
【０００５】
また、いわゆるクイックフォーマットという技術が知られている（例えば、特開２００３−２４１９０４号公報）。クイックフォーマットでは、フォーマットがバックグラウンドで実施される。この場合、ストレージシステムは、フォーマットを実施した箇所と未実施の箇所とを管理し、或る箇所を指定したアクセスコマンド（リードコマンド又はライトコマンド）が外部装置から受信した場合、フォーマットが実施済みの箇所が指定されている場合には、そのアクセスコマンドの処理を行う。しかし、フォーマットが未実施の箇所が指定されている場合には、ストレージシステムは、アクセスコマンドを処理する前に、その指定されている箇所についてフォーマットを行い、フォーマットが完了した後に、そのアクセスコマンドの処理を行うようにする。
【０００６】
【特許文献１】特開２００３−２４１９０４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
一般的なフォーマットでは、ドライブ上のデータとデータ保証コードとの整合性を合わせるために、使用するＬＵの全領域にデータの書き込みを実施する必要がある。ストレージシステムの出荷前に、工場にて、ＬＵの作成及びフォーマットを実施し、ストレージシステムが出荷された時点から即時に使用できるようにすることがある。しかし、近年のドライブの容量増加、及びストレージシステムの大容量化（すなわち、搭載されるメディアドライブの数の増加）に伴い、フォーマットが長時間になり、出荷作業の長時間化が問題となる。
【０００８】
また、ストレージシステムは、一般にＲＡＩＤ（Redundant Array of Independent Inexpensive Disks）になっており、ドライブ障害に対する冗長性を持っている。冗長度を越えたドライブ障害が発生した場合、障害の生じたドライブが交換され、交換後のドライブを使用しているＬＵについて再フォーマットが実施された後、テープ装置等の外部バックアップ装置からデータをロードすることによりデータのリストアが行われる。このような場合、至急の復旧が必要であり、外部バックアップ装置からのリストアを早期に実施できるように、いわゆるクイックフォーマットが行われることがある。しかし、クイックフォーマットといっても、バックグラウンドでフォーマットが実施されるため、クイックフォーマットが完全に完了するまでの間は、ストレージシステムの性能が大幅に劣化する（例えば、外部装置から受信したアクセスコマンドの処理に要する時間が長くなる）という問題がある。
【０００９】
従って、本発明の目的は、フォーマットに要する時間長を短縮化することができる新規な記憶制御技術を提供することにある。
【００１０】
本発明の他の目的は、後の説明から明らかになるであろう。
【課題を解決するための手段】
【００１１】
本発明に従うストレージシステムは、外部に存在する装置である外部装置と通信することができる。このストレージシステムは、データを記憶することができる複数の記憶ユニットと、各記憶ユニットに対応したユニットＩＤ及び特定コードを記憶する管理記憶域と、コントローラとを備える。前記コントローラが、第一ユニットＩＤを指定したフォーマット指示を受信し（例えばフォーマット指示受信手段）、（Ａ）前記第一ユニットＩＤに対応した前記管理記憶域上の特定コードを更新する（例えば特定コード更新手段）。前記コントローラは、第二ユニットＩＤを指定したコマンドを外部装置から受信し（コマンド受信手段）、（Ｂ）前記コマンドに従って、前記第二ユニットＩＤに対応した或る記憶ユニットに、前記コマンド内のデータを書き込む場合、前記第二ユニットＩＤに対応した特定コードを前記管理記憶域から取得し、前記取得された特定コードを、前記コマンド内のデータに付加し（例えば特定コード付加手段）、前記特定コードが付加されたデータを前記或る記憶ユニットに書き込む（例えばデータ書込み手段）。一方、前記コントローラは、（Ｃ）前記コマンドに従って、前記第二ユニットＩＤに対応した或る記憶ユニットからデータを読み出した場合（例えばデータ読出し手段）、前記第二ユニットＩＤに対応した特定コードを前記管理記憶域から取得し、前記取得された特定コードと、前記読み出されたデータに付加されている特定コードとを比較し（例えば特定コード比較手段）、特定コードが互いに一致していれば、前記読み出されたデータを、前記コマンドの送信元に送信し、一方、特定コードが互いに一致していなければ、前記読み出されたデータを、前記コマンドの送信元に送信しない（例えばデータ返送制御手段）。
【００１２】
本発明の第一の態様では、前記コントローラは、前記コマンド内のデータを前記或る記憶ユニットに書き込む場合、前記データからデータ保証コードを求め（例えば保証コード算出手段）、前記求められたデータ保証コードを前記データに付加し（例えば保証コード付加手段）、前記データ保証コード及び前記特定コードが付加されたデータを、前記或る記憶ユニットに書込むことができる（例えば前記データ書込み手段）。また、前記コントローラは、前記或る記憶ユニットからデータを読み出した場合、特定コードが互いに一致していれば、前記読み出されたデータに付加されているデータ保証コードをチェックし（例えば保証コードチェック手段）、そのチェックの結果、エラーが検出されなければ、前記読み出されたデータを、前記コマンドの送信元に送信することができる（例えば前記データ返送制御手段）。
【００１３】
ここで、前記コントローラ（例えば前記特定コード付加手段）は、前記データと前記データ保証コードとの間に、前記取得された特定コードを付加することができる。
【００１４】
本発明の第二の態様では、前記コントローラ（例えば前記データ返送制御手段）は、前記或る記憶ユニットからデータを読み出した場合、特定コードが互いに一致していなければ、前記読み出されたデータに代えて、最近のフォーマット指示後に何も書かれていないことを示すデータを準備し、前記準備したデータを、前記コマンドの送信元に送信することができる。
【００１５】
本発明の第三の態様では、前記コントローラは、前記管理記憶域上の特定コードの更新中では、外部装置からコマンドを受付けず、その更新が終了した直後に、外部装置からコマンドを受付けることができる。
【００１６】
本発明の第四の態様では、前記コントローラ（例えば前記特定コード付加手段）は、前記特定コードを、一ブロック単位で付加することができる。
【００１７】
本発明の第五の態様では、前記複数の記憶ユニットのうちの少なくとも一つの記憶領域を、データ領域と特定コード領域とに別けることができる。前記コントローラ（例えば前記データ書込み手段）は、前記或る記憶ユニットにデータを書き込む場合、前記データ領域の或る場所に前記データを書き込み、前記データ領域の或る場所に関連づいた、前記特定コード領域の或る場所に、前記データに付加された特定コードを書き込むことができる。
【００１８】
本発明の第六の態様では、前記コントローラは、マイクロプロセッサとハードウェア回路とを備えることができる。前記マイクロプロセッサが、外部装置から受信したコマンドを解析して、書込みと読出しのどちらを行うべきかを判断することができる。前記ハードウェア回路が、前記判断の結果に応じて、前記（Ｂ）の処理又は前記（Ｃ）の処理を行うことができる。
【００１９】
本発明の第七の態様では、前記コントローラは、前記（Ｂ）の処理において、前記取得された特定コードを多重化し、多重化された特定コードを、前記コマンド内のデータに付加することができる。また、前記コントローラは、前記（Ｃ）の処理において、前記読み出されたデータに付加されている各特定コードを他の特定コードと比較し、特定コード同士が一致していなければ、前記読み出されたデータは不正であるとし、特定コード同士が一致していれば、前記第二ユニットＩＤに対応した特定コードを前記管理記憶域から取得し、前記取得された特定コードと、前記読み出されたデータに付加されている特定コードとの比較を行うことができる。なお、前記データに付加された各特定データは他の特定データから離れた場所に付加されていてもよい。
【００２０】
本発明の第八の態様では、前記複数のユニットには、前記（Ａ）、（Ｂ）及び（Ｃ）の処理が行われる第一種の記憶ユニットと、記憶ユニットの全域又は一部にフォーマット処理が施される第二種の記憶ユニットとが含まれていてもよい。前記管理記憶域上には、各記憶ユニット毎に、フォーマットを必要とするか不要とするかを示すフォーマット要否情報が記憶されていてもよい。前記コントローラは、前記フォーマット指示を受けた場合、前記第一ユニットＩＤに対応する前記管理記憶域上のフォーマット要否情報から、前記第一ユニットＩＤに対応する記憶ユニットがフォーマット必要か否かを判断し、不要と判断したら、前記（Ａ）、（Ｂ）及び（Ｃ）の処理を行うようにし、必要と判断したら、前記対応する記憶ユニットの全域又は一部をフォーマットし、前記（Ｂ）及び（Ｃ）の処理を行わないようにすることができる（例えばフォーマット要否制御手段）。
【００２１】
本発明の第九の態様では、各記憶ユニットに対応する特定コードは、その記憶ユニットのユニットＩＤを指定したフォーマット指示を受けた回数を示すカウント値であるとすることができる。
【発明の効果】
【００２２】
本発明によれば、フォーマットに要する時間長を短縮化することができる新規な記憶制御技術が提供される。
【発明を実施するための最良の形態】
【００２３】
以下、図面を参照して、本発明の一実施形態について説明する。
【００２４】
フォーマットに要する時間長を短縮化することの究極的な方法としては、フォーマットを行わないという方法が考えられる。しかし、特に、データ保証コードの付加やチェックを行うことによってデータの信頼性を高めているストレージシステムには、その方法を適用しようということすら想到することはできない。なぜなら、その種のストレージシステムでは、フォーマットが必要であると考えられてきているからである。
【００２５】
しかし、本願発明者が考案した以下に例示する工夫により、ストレージシステムが、データ保証コードの付加やチェックを行う種類のストレージシステムであっても、フォーマットを行う必要性をなくすことができる。
【００２６】
以下、その工夫が適用された本実施形態の概要を説明する。
【００２７】
図６Ａは、本発明の一実施形態の概念図を示す。
【００２８】
ストレージシステム９０１を、外部に存在する装置（以下、外部装置）９２１に通信可能に接続することができる。外部装置９２１としては、例えば、ホスト装置、別のストレージシステム、及びストレージシステム９０１の保守端末のうちの少なくとも一つを採用することができる。
【００２９】
ストレージシステム９０１には、データを一時的に記憶することができる記憶域９０７と、データを記憶することができる記憶資源の一単位である記憶ユニット９１１と、記憶域９０７と記憶ユニット９１１との間のデータ転送を制御することができるコントローラ９０９とが備えられる。記憶ユニット９１１は、複数個備えることができる。各記憶ユニット９１１は、データを記憶することができる記憶メディア（例えばハードディスク）を備えた各メディアドライブ（例えばハードディスクドライブ）であっても良いし、一又は複数のメディアドライブが有する記憶資源を利用して設定される各論理ユニット（ＬＵ）であっても良いし、ＬＵを構成する複数の論理的な記憶デバイスの各々であっても良い。
【００３０】
また、このストレージシステム９０１は、ストレージシステム９０１の記憶資源における或る場所に、フォーマットカウント値テーブル（以下、「ＦＣＴ」と略記）９０８を備える。図６Ａでは、ＦＣＴ９０８は、コントローラ９０９が有する記憶資源に記憶されるが、それに代えて、例えば、記憶域９０７或いは記憶ユニット９１１に記憶されても良い。ＦＣＴ９０８には、各記憶ユニット９１１のＩＤ（例えばユニット番号）毎に、フォーマットカウント値（以下、「ＦＣＶ」と略記）が記録される。記憶ユニット９１１のＦＣＶとは、その記憶ユニット９１１に対して何回フォーマット指示が出されたかを示す数値である。図６Ａの例によれば、ユニット番号（図６Ａでは、記憶ユニットのユニット番号を略して「ＳＵ」と記している）が「０」の記憶ユニット９１１に対しては、フォーマット指示が１回出され、ユニット番号が「１」の記憶ユニット９１１に対しては、フォーマット指示が５回出されたことがわかる。
【００３１】
以下、本実施形態において行われる処理の流れの一例を説明する。
【００３２】
図６Ａに示すように、ストレージシステム９０１は、ユニット番号「０」を指定したフォーマット指示を外部装置９２１から受信する。この場合、図６Ｂに示すように、コントローラ９０９が、ＦＣＴ９０８にアクセスし、フォーマット指示におけるユニット番号「０」に対応したＦＣＶを所定の規則に従って更新する。例えば、コントローラ９０９は、ユニット番号「０」に対応したＦＣＶを１増やす。この結果、ユニット番号「０」に対応したＦＣＶは、「１」から「２」に変わる。
【００３３】
その後、図７Ａに例示するように、ストレージシステム９０１が、ユニット番号「０」を指定したライトコマンドを、外部装置９２１から受信したとする。
【００３４】
この場合、ライトコマンドに含まれている書込み対象のデータ「12345678」が、記憶域９０７に一時蓄積される。
【００３５】
そして、コントローラ９０９が、ライトコマンドに含まれているユニット番号「０」に対応したＦＣＶ「２」をＦＣＴ９０８から取得する。コントローラ９０９は、データ「12345678」を記憶域９０７から読出し、読み出されたデータ「12345678」に、取得されたＦＣＶ「２」を付加する。また、コントローラ９０９は、そのデータ「12345678」に、データ保証コード（図では「ＤＣ」と略記）も付加する。コントローラ９０９は、ＦＣＶ「２」及びデータ保証コードが付加されたデータ「12345678」を、ライトコマンドで指定されているユニット番号「０」に対応した記憶ユニット９１１に書き込む。
【００３６】
次に、図７Ｂに例示するように、ストレージシステム９０１が、ユニット番号「０」を指定したリードコマンドを、外部装置９２１から受信したとする。なお、ここでは、ユニット番号「０」に対応した記憶ユニット９１１には、ユニット番号「０」に対応したＦＣＶが「１」の場合に書き込まれたデータ「87654321」が格納されているものとする。
【００３７】
コントローラ９０９は、そのリードコマンドで指定されているデータを、リードコマンドで指定されているユニット番号「０」に対応した記憶ユニット９１１から読み出す。そして、コントローラ９０９は、ユニット番号「０」に対応したＦＣＶをＦＣＴ９０８から取得し、取得されたＦＣＶと、読み出されたデータに付加されているＦＣＶとを比較する。この結果、読み出されたデータが、「12345678」であれば、そのデータに付加されているＦＣＶは「２」なので（つまり、そのデータは、最新のフォーマット指示の受信後に書かれたデータなので）、ＦＣＴ９０８から取得されたＦＣＶ「２」と一致する。しかし、読み出されたデータが、「87654321」であれば、そのデータに付加されているＦＣＶは「１」なので（つまり、そのデータは、最新のフォーマット指示の受信前に存在するデータなので）、ＦＣＴ９０８から取得されたＦＣＶ「２」とは一致しない。
【００３８】
コントローラ９０９は、ＦＣＴ９０８から読み出されたＦＣＶと、データに付加されているＦＣＶとが一致しているとの判断結果が得られた場合には、データに付加されているデータ保証コードのチェックを行い、その結果、エラーが検出されなければ、データを記憶域９０７に書き込む。記憶域９０７に書かれたデータは、リードコマンドの送信元の外部装置９２１に送信される。
【００３９】
一方、コントローラ９０９は、ＦＣＴ９０８から読み出されたＦＣＶと、データに付加されているＦＣＶとが一致していないとの判断結果が得られた場合には、最新のフォーマット指示の受信後にデータが書かれていないことを、リードコマンドの送信元の外部装置９２１に通知する。具体的には、例えば、コントローラ９０９は、読み出されたデータ「87654321」に代えて、最新のフォーマット指示の受信後に何も書かれていないことを示すデータ（例えば、フォーマットされたことを示す所定コード群「00000000」）を、記憶域９０７に書く。記憶域９０７に書かれたデータは、外部装置９２１に送信される。これにより、実際には、リードコマンドで指定された箇所に、データ「87654321」が存在するのであるが、外部装置９２１に対して、その箇所に、最新のフォーマット指示後には、何も書かれていないと認識させることができる。
【００４０】
この実施形態によれば、ストレージシステム９０１が、データ保証コードの付加やチェックを行う種類のストレージシステムであっても、フォーマットを行う必要性をなくすことができる。
【００４１】
さて、以下、この実施形態のより詳細な具体例である幾つかの実施例について、説明する。
【実施例１】
【００４２】
図１は、本発明の第一実施例に係るシステム全体の構成例を示す。
【００４３】
複数台（一台であってもよい）の外部装置１００、１００、…と、ストレージシステム３とが、通信ネットワーク５１を介して通信可能に接続されている。
【００４４】
外部装置１００は、例えば、ＣＰＵ、メモリ及び表示装置等のハードウェア資源を備えるコンピュータ装置である。外部装置１００は、ストレージシステム３に対して、ＬＵ番号を指定したリードコマンドや、ＬＵ番号及び書込み対象データを有したライトコマンドを送信することができる。
【００４５】
通信ネットワーク５１としては、種々のものを採用することができる。具体的には、例えば、通信ネットワーク５１は、ＳＡＮ（Storage Area Network）又はＬＡＮ（Local Area Network）とすることができる。
【００４６】
ストレージシステム３は、例えば、多数のメディアドライブをアレイ状に配設して構成されたRAID（Redundant Array of Independent Inexpensive Disks）のようなディスクアレイシステムとすることができる。
【００４７】
ストレージシステム３は、外部装置１００からのデータの制御を行うコントローラ１と、データを記憶することができる複数のディスクドライブ（例えばハードディスクドライブ）１０とを備える。複数のメディアドライブ１０には、一又は複数の論理ユニット（ＬＵ）５３が用意される。
【００４８】
コントローラ１は、冗長性の向上、及び処理負荷の分散のために、複数個搭載されていてもよい。コントローラ１は、例えば、一又は複数枚の回路基板で構成することができる。コントローラ１は、外部装置１００とドライブ１０へのアクセスのために、上位インタフェース２及びドライブインタフェース９を有する。また、コントローラ１は、データ処理やデータ転送を行う処理部グループ３と、外部装置１００からの書込み対象データやドライブから読み出されたデータを一時的に記憶することができるキャッシュメモリ７と、キャッシュメモリ７より高速アクセスが可能なローカルメモリ８とを有する。
【００４９】
処理部グループ３には、処理部キャッシュ６が備えられる。また、処理部グループ３には、例えば、負荷分散のために複数の処理部が含まれている。具体的には、例えば、処理部グループ３には、データ処理用の第一の処理部４と、データ転送用の第二の処理部５とが含まれている。
【００５０】
第一の処理部４は、例えば、図示しないコンピュータプログラムを読み込んで実行するマイクロプロセッサとすることができる。第一の処理部４は、例えば、外部装置１００から受信したコマンドを解析してリードコマンドであるかライトコマンドであるかを判別することができる。
【００５１】
第二の処理部５は、例えば、データ転送の制御などを行うＬＳＩ（Large Scale Integration）であり、具体的には、例えば、ＡＳＩＣ（Application Specific Integrated Circuit）等のハードウェア回路とすることができる。第二の処理部５は、キャッシュメモリ７とドライブ１０間でのデータのやり取りの制御、ＲＡＩＤのパリティ演算、及びデータ保証コードの付加やチェックを実施する機能を有している。これにより、パリティ演算やデータ保証コードの付加やチェックのオーバヘッドの影響を、第一の処理部４から分離することができ、性能劣化を防ぐことができる。
【００５２】
後述するように、データにフォーマットカウント値（ＦＣＶ）を付加することにより、バックグラウンドでのフォーマット処理を行わずに済むが、ドライブ１０へのリード及びライトの際に、常に、ＦＣＶの付加或いはチェックが必要となり、処理オーバヘッドが増加すると考えられる。しかし、この第一実施例では、パリティ演算やデータ保証コードの付加やチェックと同様に、ＦＣＶの付加やチェックをハードウェアレベルで実施することができるので、性能劣化を抑えることが可能となる。
【００５３】
ストレージシステム３は、コントローラ１に、図２Ａに例示するフォーマットカウント値テーブル（ＦＣＴ）２５１を有している。ＦＣＴ２５１は、キャッシュメモリ７、ローカルメモリ８及び処理部キャッシュ６などのコントローラ１内の記憶資源に、単独で又は多重化して格納されてもよい。また、ＦＣＴ２５１は、複数のディスクドライブ１０のうちの少なくとも一つ（例えば、ストレージシステム３の制御のために参照される情報などが格納されるいわゆるシステムＬＵ）に格納され、そのドライブ１０からコントローラ１に読み出されて保持されてもよい。
【００５４】
ＦＣＴ２５１とは、ストレージシステム３内のどのＬＵ５３が現時点で何回フォーマットの指示を受けたかを管理するためのテーブルである。ＦＣＴ２５１に登録される情報項目としては、例えば、ＬＵ番号、何回目のフォーマットかを示すフォーマットカウント値、及び、フォーマットカウント値の最新の更新時間がある。なお、更新時間は、例えば、ストレージシステム３内の図示しないタイマから検出される時刻（例えば年月日時分秒）とすることができる。この更新時間は、例えば、外部装置１００からの要求に応じて、第一の処理部４が、外部装置１００に提供することができる。外部装置１００は、提供された更新時間を、履歴として管理することができる。
【００５５】
第二の処理部５は、ＦＣＶをデータに付加することができるが、ＦＣＶが付加されるデータの単位としては、ストレージシステム内で管理できる単位であれば、種々の単位を採用することができる。例えば、その単位は、１ビット単位であっても良いし、１ブロック単位（例えば５１２バイト単位）であっても良いし、ドライブ１０上にストライプされる単位（以下、ストライプ単位）であってもよい。但し、例えば１ビット単位のように、小さいデータ単位が採用された場合、所定のデータ量においてＦＣＶが占める割合が多くなるので、ディスクの使用効率が悪くなると考えられる。逆に、例えばストライプ単位のように、大きいデータ単位が採用された場合、書き込まれた以外の部分について、フォーマットデータの書き込みが発生し、処理オーバヘッドが増加する。そのため、小さすぎもせず大きすぎもしないデータ単位、例えば、１回の書込みで全ての領域が書き込まれるようなデータ単位、具体的には、例えば、１ブロック単位を採用することが、効果的であると考えられる。なお、１ブロックとは、ホスト装置１００の図示しないＯＳ（オペレーティングシステム）が送って来るコマンドの単位であり、一般的には５１２バイトである。
【００５６】
図２Ｂは、ＦＣＶ及びデータ保証コードが付加されたデータを有するデータ群の構造例を示す。
【００５７】
例えば、第二の処理部５とドライブ１０との間では、図２Ｂに例示するデータ群のやり取りが行われる。データ２００は、例えば、１ブロック単位のデータである。データ２００の下位（換言すれば後側）に、データ保証コードとして、例えば、ＬＲＣ（Longitudinal Redundancy Check）２０２とＬＡ２０３とが付加される。ＬＲＣ２０２は、データ２００の論理演算値である。ＬＡ２０３は、データ２００の格納先となるＬＵの番号及び論理ブロックアドレス（ＬＢＡ）の一部（例えば後ろ２バイト）から構成されるコードである。
【００５８】
ＦＣＶ２０１は、データ２００とデータ保証コード２０２、２０３の間に付加される。これにより、データ２００、データ保証コード２０２、２０３及びＦＣＶ２０１がドライブ１０の同一の領域に格納されるため、ドライブ１０からの読み出しを高速に行うことができる。また、リード時には、データ保証コード２０２、２０３のチェックよりも先にＦＣＶ２０１のチェックが行われるため、データ２００の直後に配置していたほうが、より効率良く処理を行うことができる。
【００５９】
また、このデータ群において、データ２００、ＦＣＶ２０１及びデータ保証コード２０２、２０３は、それぞれ、所定の位置に所定のサイズで存在するものである。これにより、データ群におけるアクセス場所を制御するだけで、データ群からデータ２００、ＦＣＶ２０１或いはデータ保証コード２０２、２０３を選択的に取得できるので、第二の処理部５を、ハードウェア回路とすることができる。
【００６０】
なお、本実施形態では、図２Ｂに例示したデータ群でドライブ１０に格納する方式に代えて又は加えて、図２Ｃに例示するような格納方式を採用することもできる。以下、便宜上、両方の格納方式が採用される場合を例に採って説明する。
【００６１】
第二の処理部５は、図２Ｂに例示したデータ群を、各ドライブ１０（又は各ＬＵ５３）に格納する場合には、図２Ｃに例示するように、データ群に含まれるＦＣＶ２０１、データ保証コード２０２、２０３及びデータ２００を、それぞれ、ドライブ１０（又はＬＵ５３）に設けられた専用の記憶領域３０１、３０２及び３０３に振り分けて記憶させることができる。
【００６２】
図２Ｃは、ドライブ１０全体の記憶領域であるディスク領域３００の構成例を示す。なお、この構成例は、ＬＵ５３にも適用することができる。
【００６３】
ディスク領域３００は、例えば、ＦＣＶが格納されるＦＣＶ領域３０１と、データ保証コードが格納されるデータ保証コード領域３０２と、データが格納されるデータ領域３０３とに分けられている。そして、このように領域が分けられていても、どのＦＣＶとどのデータ保証コードとどのデータによって上記一つのデータ群が構成されるかが分かるように、ＦＣＶ、データ保証コード及びデータが格納される。例えば、図２Ｃの例でいえば、第二の処理部５は、ＦＣＶ領域３０１の先頭アドレスＡにＦＣＶを格納するのであれば、同一のデータ群におけるデータ保証コードを、データ保証コード領域３０２の先頭アドレスＡに格納し、且つ、同一のデータ群におけるデータを、データ領域３０３の先頭アドレスＡに格納する。このように、第二の処理部５は、各領域３０１、３０２及び３０３のどのアドレスに格納するかを制御することによって、同一のデータ群を構成するＦＣＶ、データ保証コード及びデータを把握することができる。換言すれば、各領域３０１、３０２及び３０３のアドレスと、他の領域３０１、３０２又は３０３のアドレスとの対応付けを管理することで、同一のデータ群を構成するＦＣＶ、データ保証コード及びデータを把握できるように、それらをディスク領域３００に格納することができる。
【００６４】
図２Ｃのように、ＦＣＶ、データ保証コード及びデータのそれぞれの格納領域を分けることには、以下のような利点があると考えられる。例えば、全てのＦＣＶをまとめて更新したい場合（例えば初期化等）、ＬＵ５３の連続した一領域に集中して全てのＦＣＶが配置「されているため、効率良く更新することができると考えられる。
【００６５】
ストレージシステム３が初期構築された場合、ＬＵ５３上のＦＣＶは、初期値(例えば「０」)である必要がある。なぜなら、初期構築時にＦＣＶが初期値でなかった場合、フォーマット指示を受けてＦＣＶを更新することが繰り返されるうちに、たまたま、ＬＵ５３内のＦＣＶが、ＦＣＴ２５１のＦＣＶと同じになってしまい、その結果、最新のフォーマット指示の受信後に書かれたデータではないにもかかわらず、そのデータが、有効なデータとして判断されてしまう可能性が生じるためである。このため、ストレージシステム３の初期構築時には、ＬＵ５３上のＦＣＶが初期値であることを保証する必要が生じる。これは、例えば、ディスク領域３００のうち、ＦＣＶ領域３０１における全ＦＣＶを初期値に書き換える（以下、「初期フォーマット」と称する）機能を、ストレージシステム３に搭載することで、実現することができる。初期フォーマット機能によれば、ＦＣＶのみを初期値に書き換えられるだけであるため、ディスク領域３００全体に対するフォーマットと比べ、書込みしなければならないデータ量は大幅に少なく、短い時間で実施することができる。特に、図２Ｃのように、全てのＦＣＶが連続した一領域に集まっている場合、シーケンシャルに書き込みが行えるため、高速な初期フォーマットが可能となる。
【００６６】
以下、上述したストレージシステム３において行われる処理の流れの一例を、図３に例示したフローチャートを用いて説明する。
【００６７】
外部装置１００が、或るＬＵを初めて使用する場合、まず、そのＬＵの情報を初期化する必要がある。このため、外部装置１００は、そのＬＵのＬＵ番号を含んだフォーマット指示をストレージシステム３に送信する。ストレージシステム３は、ＬＵが指定されたフォーマット指示を受信する（ステップ１０１）。
【００６８】
これに応答して、第二の処理部５（或いは第一の処理部４）が、フォーマット指示で指定されているＬＵ番号に対応するＦＣＶをＦＣＴ２５１から特定し、特定されたＦＣＶを１増やす（ステップ１０２）。この時点から、ストレージシステム３は、外部装置１００から、リードコマンドやライトコマンドを受付け、受信したコマンドを処理することができる。ステップ１０２では、内部に存在するＦＣＴ２５１の更新のみが行われるが、そのＦＣＴ２５１の更新中は、コマンドを受付けることができない。しかし、その更新は、短時間で終了する。故に、実質的に、フォーマット指示を受信した直後から、ストレージシステム３は、外部装置１００からコマンドを受付けることができる。
【００６９】
フォーマット指示で指定されたＬＵのアクセスが可能になった後で、ストレージシステム３が、ＬＵ番号を含んだコマンドを外部装置１００から受信したとする（ステップ１０３）。受信するコマンドは、リードコマンドやライトコマンドといったアクセスコマンドに限らず、ストレージシステム３内でＬＵ５３へのアクセスが発生する処理、例えば、ストレージシステム３内でＬＵ間でのコピーを行うことのコマンドであってもよい。
【００７０】
第一の処理部４が、受信したコマンドを解析して、リードが必要であるかライトが必要であるかを判断する（ステップ１０４）。なお、受信したコマンドがライトコマンドの場合、それに含まれている書込み対象データが、キャッシュメモリ７に記憶される。
【００７１】
ステップ１０４の結果、ライトが必要であれば（ステップ１０５で「ライト」）、第一の処理部４が、そのことを第二の処理部５に通知する。その通知を受けた第二の処理部５は、キャッシュメモリ７からデータを読み出して、そのデータに、そのデータや上記コマンドから算出されるデータ保証コードを付加する（ステップ１１０）。更に、第二の処理部５は、コマンドで指定されているＬＵ番号（以下、当該ＬＵ番号）に対応したＦＣＶをＦＣＴ２５１から取得し、取得されたＦＣＶを、上記読み出されたデータに付加する（ステップ１１１）。第二の処理部５は、データ、ＦＣＶ及びデータ保証コードを含んだデータ群（例えば図２Ｂに例示した構造のデータ群）を、当該ＬＵに書込み（ステップ１１２）、それが完了した後、完了報告を、コマンドの送信元の外部装置１００に返す（ステップ１１３）。なお、完了報告を返すタイミングとしては、例えば、ステップ１１２の書込みが完了する前の時点（例えば、ライトが必要であると判断された時点）であっても良い。
【００７２】
一方、ステップ１０４の結果、リードが必要であれば（ステップ１０５で「リード」）、第一の処理部４が、そのことを第二の処理部５に通知する。その通知を受けた第二の処理部５は、当該ＬＵ５３から、そのコマンドで指定されているデータを読み出す（ステップ１２０）。この場合、第二の処理部５は、当該ＬＵ５３に、図２Ｂに例示したデータ群で存在すれば、そのデータ群を読み出すが、図２Ｃに例示したように、同一のデータ群を構成するデータ、ＦＣＶ及びデータ保証コードが分離して存在すれば、それらを別々に読出してデータ群を構築することができる。
【００７３】
第二の処理部５は、当該ＬＵに対応したＦＣＶをＦＣＴ２５１から取得し、取得されたＦＣＶと、読み出されたデータ群内のＦＣＶとを比較する（ステップ１２１）。
【００７４】
ステップ１２１の結果、互いに一致していれば（ステップ１２２で「同一」）、第二の処理部５は、上記読み出されたデータ群内のデータ保証コードをチェックし、そのデータ保証コードのチェックの結果、エラーが検出されなければ、そのデータ群内のデータを、キャッシュメモリ７に書き込む（ステップ１２３）。
【００７５】
一方、ステップ１２１の結果、一致していなければ（ステップ１２２で「異なる」）、第二の処理部５は、読み出したデータ群を破棄し、最近のフォーマット以後何も書かれていないことを示すフォーマットデータ（例えば、全てのビットが「０」であるデータ）を、キャッシュメモリ７に書き込む（ステップ１２４）。
【００７６】
ステップ１２３又はステップ１２４の後、第二の処理部５は、キャッシュメモリ７に書かれているデータを、コマンドの送信元の外部装置１００に送信する（ステップ１２５）。
【００７７】
以上が、第一実施例についての説明である。なお、この第一実施例において、例えば、図２ＣにおけるＦＣＶ領域３０１及びデータ保証コード領域３０２のうちの少なくとも一方が、コントローラ１に用意されていてもよい。そうすることにより、ドライブ１０でのシーク時間長を減らすことができる。
【００７８】
以上、この第一実施例によれば、ストレージシステム３には、各ＬＵ５３毎のＦＣＶが記録されるＦＣＴ２５１が用意される。ストレージシステム３は、ＬＵを指定したフォーマット指示を受信する都度、そのＬＵに対応したＦＣＶ（ＦＣＴ２５１上のＦＣＶ）を更新する。ストレージシステム３は、データをＬＵ５３に書く場合、そのＬＵ５３に対応したＦＣＶをＦＣＴ２５１から取得し、取得されたＦＣＶをデータに付加してＬＵ５３に格納する。そして、ストレージシステム３は、データをＬＵ５３から読み出す場合、そのＬＵ５３に対応したＦＣＶをＦＣＴ２５１から取得し、取得したＦＣＶと、読み出されたデータに付加されているＦＣＶとを比較する。ＦＣＶ同士が一致していれば、フォーマット後に書かれたデータであるとみなすことができるので、ストレージシステム３は、読み出されたデータを、読出し要求元に送る。一方、ＦＣＶ同士が一致していなければ（或いは読み出されたデータにＦＣＶが付加されていなければ）、フォーマット後に書かれたデータではないとみなすことができるので、ストレージシステム３は、その読み出されたデータを、読出し要求元には送らない。以上のことにより、ＬＵ５３のフォーマットを不要とすることができるので、フォーマットに要する時間長を実質的にゼロにすることができる。
【００７９】
また、上述した第一実施例によれば、データ保証コードによるデータの信頼性を維持しつつ、フォーマットを不要とすることができる。すなわち、データ保証コードを付けてデータをＬＵ５３に格納するような環境では、データとデータ保証コードの整合性を合わせる目的でフォーマットが必要であると考えられてきたにも関わらず、第一実施例で説明したような工夫により、そのようなフォーマットを不要にできた点が、この第一実施例において重要な点である。つまり、データ保証コードを付けてデータをＬＵ５３に格納するような環境において、フォーマットに要する時間長を実質的にゼロにできるのである。
【００８０】
また、上述した第一実施例によれば、フォーマット指示を受けた場合、ＦＣＴ２５１におけるＦＣＶの更新が行われた後、コマンドの受け付けが可能となる。その更新に要する時間長は、ドライブ１０への書込みに比べれば極めて短い。故に、ストレージシステム３は、フォーマット指示を受信した実質的に直後から、外部装置１００からコマンドを受付けることができる。
【実施例２】
【００８１】
以下、本発明の第二実施例を説明する。なお、その際、第一実施例との相違点を主に説明し、第一実施例との共通点については、説明を省略或いは簡略する（これは、後述の第三実施例についても同様である）。
【００８２】
データに付加されるＦＣＶは、そのデータがフォーマット指示後に書き込まれた有効なデータであるか、或いは、書き込みがされておらず無効なデータであるかを判定する重要な値である。
【００８３】
この第二実施例では、データに付加されるＦＣＶそれ自体の信頼性を高めるために、データに付加されるＦＣＶが二重化される（三重化以上の多重化が行われても良い）。
【００８４】
図４Ａは、本発明の第二実施例において、キャッシュメモリ７からドライブ１０（ＬＵ５３）への書込みの際に行われる処理の流れの一例を示す。
【００８５】
第二の処理部５は、データにデータ保証コードを付加した後（ステップ４０１）、当該ＬＵに対応したＦＣＶをＦＣＴ２５１から取得し、取得されたＦＣＶを二重化し、二重化されたＦＣＶを付加する（ステップ４０２）。具体的には、例えば、第二の処理部５は、図５Ａに例示するように、データ５００の先頭と最後尾の両方に、ＦＣＶを付加する。
【００８６】
次に、図４Ｂを参照して、ドライブ１０（ＬＵ５３）からキャッシュメモリ７へのデータの読出しの際に行われる処理の流れの一例を示す。
【００８７】
第二の処理部５は、当該ＬＵからデータを読み出す（ステップ４５１）。そして、第二の処理部５は、そのデータに付加されている二重化されたＦＣＶ同士を比較する（ステップ４５２）。
【００８８】
ステップ４５２の結果、ＦＣＶ同士が不一致であれば（ステップ４５３で「異なる」）、第二の処理部５は、ＦＣＶが不正と判断し、読出しをエラーにする（ステップ４５７）。具体的には、例えば、第二の処理部５は、読出しエラーを、コマンドの送信元に通知することができる。
【００８９】
ステップ４５２の結果、ＦＣＶ同士が一致していれば（ステップ４５３で「同一」）、第二の処理部５は、当該ＬＵに対応したＦＣＶをＦＣＴ２５１から取得し、取得したＦＣＶと、データに付加されているＦＣＶとを比較する（ステップ４５４）。
【００９０】
ステップ４５４の結果、一致が得られれば、図３のステップ１２３と同様の処理が行われ（ステップ４５５）、不一致が得られれば、図３のステップ１２４と同様の処理が行われる（ステップ４５６）。
【００９１】
以上、この第二実施例によれば、データに付加された複数のＦＣＶの各々が他のＦＣＶと一致しない場合には、ＦＣＶに不正が発生していると判断され、エラーとされる。これにより、データの不正を防ぐことができる。
【００９２】
なお、この第二実施例では、図５Ａに例示したように、データ５００の上下に、二重化されたＦＣＶ５０１と５０４とが付加される。ＦＣＶ５０１、５０４は、連続して配置されても良いが、物理的に近い場所となると、ドライブ１０への書き込みエラーや、ドライブ１０上におけるデータ書き変わり等が発生した場合に、両方のＦＣＶが共に不正になる可能性が高い。図５Ａに例示したように、各ＦＣＶ５０１、５０４を離して配置することにより、ＦＣＶ５０１、５０４が、ドライブ１０において、物理的に離れた領域に格納されることになる。このため、両方のＦＣＶ５０１、５０４が共に不正になってしまう可能性を抑えることができる。
【実施例３】
【００９３】
本発明の第三実施例に係るストレージシステムでは、フォーマットを不要とするＬＵと、フォーマットを必要とするＬＵとが混在することができる。フォーマットを必要とするＬＵ５３には、その全域に、フォーマット処理が行われる。この結果、そのＬＵ５３における全てのＦＣＶが最新の状態になり、ＬＵ５３の全領域が有効なデータとなる。
【００９４】
また、フォーマットを必要とするＬＵについて、ＦＣＶの付加やチェックすらも行わないようにすることができる。この場合、例えば、図５Ｂに例示するＦＣＴ２５３を採用することができる。このＦＣＴ２５３には、第一実施例で説明したＦＣＴ２５１の項目に加えて、各ＬＵ毎のフォーマット済みフラグが用意される。フォーマット済みフラグは、フォーマットを行う必要があるＬＵかどうかを判定するためのフラグである。フォーマットの必要なＬＵに対応するフォーマット済みフラグとして、ＯＮが設定され、フォーマットを不要とするＬＵには、フォーマット済みフラグとして、ＯＦＦが設定される。このＯＮ／ＯＦＦの設定は、第二の処理部５が行っても良いし、第一の処理部４が行っても良い。
【００９５】
第二の処理部５は、フォーマット指示を受信した場合、そのフォーマット指示で指定されているＬＵに対応したフォーマット済みフラグを参照し、そのフラグがＯＦＦになっていれば、図３のステップ１０２以降の処理を行う。しかし、第二の処理部５は、そのフラグがＯＮになっていれば、指定されたＬＵの全域又は一部領域を、フォーマットする。
【００９６】
また、第二の処理部５は、コマンドを受信した場合、コマンドで指定されているＬＵに対応したフォーマット済みフラグを参照し、そのフラグがＯＦＦになっていれば、図３のステップ１０４以降の処理を行う。しかし、第二の処理部５は、そのフラグがＯＮになっていれば、当該ＬＵについては、ＦＣＶの付加やチェックを行わず、当該ＬＵ５３の全領域を、一律に、有効なデータとすることができる。
【００９７】
フォーマットを不要とするＬＵに存在するデータの信頼性は、全域がフォーマットされたＬＵに存在するデータの信頼性に比べると、どうしても低くなる。逆に、フォーマットを不要とするＬＵは、フォーマットを必要とするＬＵに比べて、当然、フォーマットに要する時間長が短い。この第三実施例では、フォーマットを不要とするＬＵと、フォーマットを必要とするＬＵとを混在させることができるので、各々の短所を補い合うことができる。例えば、ユーザにとって重要であるデータを格納するＬＵ５３については、フォーマットを必要とするＬＵとすることができる。一方、副ボリューム、アーカイブボリューム、或いは画像配信用ボリューム等といった、データの信頼性が多少低くても問題がないＬＵについては、フォーマットを不要とするＬＵとすることができる。このようにすることで、システム全体での信頼性を低下させることなく、フォーマットを不要とするＬＵを導入することができる。
【００９８】
以上、本発明の一実施形態及び幾つかの実施例を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこれらの実施形態及び実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
【００９９】
例えば、ＦＣＶ同士の一致というのは、完全にＦＣＶ同士が一致していることに限らず、実質的に一致していればよい。例えば、一方のＦＣＶが「Ｎ」で、他方のＦＣＶが「−Ｎ」でも、一致としてもよい（例えばＮは０又は自然数）。
【０１００】
また、例えば、処理部グループ３は、一つのマイクロプロセッサで構築されても良いし、複数個のマイクロプロセッサで構築されても良い。後者の場合、複数個のマイクロプロセッサで処理が分担されても良い。
【図面の簡単な説明】
【０１０１】
【図１】図１は、本発明の第一実施例に係るシステム全体の構成例を示す。
【図２】図２Ａは、フォーマットカウント値テーブル２５１の構成例を示す。図２Ｂは、ＦＣＶ及びデータ保証コードが付加されたデータを有するデータ群の構造例を示す。図２Ｃは、ＬＵ５３の構成例を示す。
【図３】図３は、本発明の第一実施例に係るストレージシステム３において行われる処理の流れの一例を示すフローチャート。
【図４】図４Ａは、本発明の第二実施例において、キャッシュメモリ７からドライブ１０（ＬＵ５３）への書込みの際に行われる処理の流れの一例を示す。図４Ｂは、本発明の第二実施例において、ドライブ１０（ＬＵ５３）からキャッシュメモリ７へのデータの読出しの際に行われる処理の流れの一例を示す。
【図５】図５Ａは、本発明の第二実施例におけるデータ群の構成例を示す。図５Ｂは、本発明の第三実施例におけるＦＣＴ２５３の構成例を示す。
【図６】図６Ａは、本発明の一実施形態の概念図を示す。図６Ｂは、本発明の一実施形態においてフォーマット指示を受けた場合に行われる処理を示す。
【図７】図７Ａは、本発明の一実施形態においてライトコマンドを受けた場合に行われる処理の一例の説明図である。図７Ｂは、本発明の一実施形態においてリードコマンドを受けた場合に行われる処理の一例の説明図である。
【符号の説明】
【０１０２】
９０１…ストレージシステム  ９０７…記憶域  ９０８…フォーマットカウント値テーブル  ９０９…制御部  ９１１…記憶ユニット  ９２１…外部装置
【図１】
2007058286.tif 000003
【図２】
2007058286.tif 000004
【図３】
2007058286.tif 000005
【図４】
2007058286.tif 000006
【図５】
2007058286.tif 000007
【図６】
2007058286.tif 000008
【図７】
2007058286.tif 000009