(57)【特許請求の範囲】
【請求項１】
ストレージの記憶領域に論理的に割り当てられた複数のＬＢＡに対するアクセスを制御するストレージ制御装置において、
前記複数のＬＢＡをグループ化した各グループのビット情報であって、エラーが発生したエラー領域が含まれるか否かを示すビット情報を記憶するビット情報記憶部と、
データの読み出し時にいずれかのＬＢＡにおいてエラーが発生した場合、前記いずれかのＬＢＡに対応するセクタ内に不良セクタであることを示すフラグ情報を書き込み、前記ビット情報記憶部に記憶された前記いずれかのＬＢＡを含むグループに対応するビット情報を、当該グループにエラー領域が含まれることを示す値に設定し、
前記ビット情報記憶部に記憶された各グループのビット情報を参照して、エラー領域が含まれるグループを特定し、特定した前記グループに含まれる複数のＬＢＡにおけるデータの読み出し結果に基づいて、前記不良セクタであることを示すフラグ情報が書き込まれたセクタを、前記グループにおけるエラー領域として特定する制御部と、
を有することを特徴とするストレージ制御装置。
【請求項２】
前記制御部は、
前記記憶領域に対する書き込み要求を受け付けた場合、特定した前記エラー領域が前記書き込み要求の書き込みの範囲に含まれるか否かを判定し、
特定した前記エラー領域が前記書き込みの範囲に含まれると判定した場合、特定した前記エラー領域を含むグループに対応するビット情報を、当該グループにエラー領域が含まれないことを示す値に設定する、
ことを特徴とする請求項１に記載のストレージ制御装置。
【請求項３】
前記制御部は、
前記記憶領域に対する書き込み要求を受け付けた場合、前記書き込み要求の書き込みの範囲に含まれるＬＢＡを含むグループのうち、エラー領域が含まれることを示す値に設定されたビット情報に対応するグループを抽出し、
抽出した前記グループ毎に、前記グループに含まれるエラー領域が、前記書き込みの範囲に含まれるか否かを判定し、
前記書き込みの範囲にエラー領域が含まれると判定したグループがある場合、当該グループに対応するビットを、当該グループにエラー領域が含まれないことを示す値に設定する、
ことを特徴とする請求項１に記載のストレージ制御装置。
【請求項４】
前記制御部は、
不良セクタ一覧の送信要求を受け付けたことに応じて、前記ビット情報記憶部に記憶された各グループのビット情報を参照して、エラー領域が含まれるグループを特定し、
特定した前記グループに含まれる複数のＬＢＡにおけるデータの読み出し結果に基づいて、前記不良セクタであることを示すフラグ情報が書き込まれたセクタを特定し、
特定した前記セクタに対応するＬＢＡを含む不良セクタ一覧を、前記送信要求の要求元に送信する、
ことを特徴とする請求項１に記載のストレージ制御装置。
【請求項５】
コンピュータが、
ストレージの記憶領域に論理的に割り当てられた複数のＬＢＡをグループ化し、グループ毎に、エラーが発生したエラー領域が含まれるか否かを示すビット情報を管理し、
データの読み出し時にいずれかのＬＢＡにおいてエラーが発生した場合、前記いずれかのＬＢＡに対応するセクタ内に不良セクタであることを示すフラグ情報を書き込み、前記いずれかのＬＢＡを含むグループに対応するビット情報を、当該グループにエラー領域が含まれることを示す値に設定し、
各グループのビット情報を参照して、前記記憶領域からエラー領域が含まれるグループを特定し、
特定した前記グループに含まれるＬＢＡにおけるデータの読み出し結果に基づいて、前記不良セクタであることを示すフラグ情報が書き込まれたセクタを、前記グループにおけるエラー領域として特定する、
処理を実行することを特徴とするストレージ制御方法。
【請求項６】
コンピュータに、
ストレージの記憶領域に論理的に割り当てられた複数のＬＢＡをグループ化し、グループ毎に、エラーが発生したエラー領域が含まれるか否かを示すビット情報を管理し、
データの読み出し時にいずれかのＬＢＡにおいてエラーが発生した場合、前記いずれかのＬＢＡに対応するセクタ内に不良セクタであることを示すフラグ情報を書き込み、前記いずれかのＬＢＡを含むグループに対応するビット情報を、当該グループにエラー領域が含まれることを示す値に設定し、
各グループのビット情報を参照して、前記記憶領域からエラー領域が含まれるグループを特定し、
特定した前記グループに含まれるＬＢＡにおけるデータの読み出し結果に基づいて、前記不良セクタであることを示すフラグ情報が書き込まれたセクタを、前記グループにおけるエラー領域として特定する、
処理を実行させることを特徴とするストレージ制御プログラム。
【請求項７】
不良セクタ一覧の送信要求を受け付けたことに応じて、各グループのビット情報を参照して、エラー領域が含まれるグループを特定し、
特定した前記グループに含まれる複数のＬＢＡにおけるデータの読み出し結果に基づいて、前記不良セクタであることを示すフラグ情報が書き込まれたセクタを特定し、
特定した前記セクタに対応するＬＢＡを含む不良セクタ一覧を、前記送信要求の要求元に送信する、
処理を前記コンピュータに実行させることを特徴とする請求項６に記載のストレージ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置、ストレージ制御方法、およびストレージ制御プログラムに関する。
【背景技術】
【０００２】
従来、記憶装置における最小のアクセス単位となるセクタからエラーが発生した場合、エラーが発生したセクタの位置を、ストレージ制御装置のメモリに記憶する技術がある。
【０００３】
関連する先行技術として、例えば、複数のブロックに束ねて管理する基本テーブルとブロック間の差分情報とに分割された管理情報に基づいて不揮発性メモリを管理するコントローラが、束ねられた範囲で異なる部分を、差分情報を用いて管理するものがある。また、記録媒体の各セクタに対して連続してデータを記録するとき、複数のブロックの中の所定数のブロックを交替ブロックとし、二次欠陥のあるセクタを含むブロックをブロック単位で交替ブロックと交替する技術がある。また、互いに重複しない第１物理アドレスが個々に割り当てられる複数の第１ブロックのうちの初期欠陥ブロックを記憶する第２ブロックの情報と、後発欠陥ブロックを記憶する第３ブロックの情報と、論理アドレスとに基づき第１物理アドレスを求める技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−２４１８９６号公報
【特許文献２】特開平９−２５９５３８号公報
【特許文献３】特開２０１０−１４６４９５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術によれば、ストレージにおけるエラー領域を管理する管理情報に費やされるメモリの記憶容量が増大する場合がある。具体的には、ストレージの記憶領域が増大するにつれて、管理情報に費やされるメモリの記憶容量が増大することになる。そして、管理情報に費やされるメモリの記憶容量が、ストレージ制御装置のメモリの記憶容量を超えてしまう場合がある。
【０００６】
１つの側面では、本発明は、ストレージにおけるエラー領域を管理する管理情報に費やされるメモリの記憶容量を低減することができるストレージ制御装置、ストレージ制御方法、およびストレージ制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、ストレージの記憶領域に論理的に割り当てられた複数の単位領域をグループ化し、グループ毎に、エラーが発生したエラー領域が含まれるか否かを示すビット情報を管理し、各グループのビット情報を参照して、記憶領域からエラー領域が含まれるグループを特定し、特定したグループに含まれる単位領域におけるデータの読み出し結果に基づいて、グループにおけるエラー領域を特定するストレージ制御装置、ストレージ制御方法、およびストレージ制御プログラムが提案される。
【発明の効果】
【０００８】
本発明の一態様によれば、ストレージにおけるエラー領域を管理する管理情報に費やされるメモリの記憶容量を低減することができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、本実施の形態にかかるストレージ制御装置１０１の動作例を示す説明図である。
【図２】図２は、ストレージシステム２００の構成例を示す説明図である。
【図３】図３は、ＣＭ２０１のハードウェア構成例を示す説明図である。
【図４】図４は、装置管理用ＰＣ２０３のハードウェア構成例を示す説明図である。
【図５】図５は、ＣＭ２０１の機能構成例を示す説明図である。
【図６】図６は、リビルド処理内の不良セクタ作成例を示す説明図である。
【図７】図７は、セクタ内に付与する不良セクタフラグの一例を示す説明図である。
【図８】図８は、不良セクタ情報５１０の記憶内容の一例を示す説明図である。
【図９】図９は、不良セクタ情報登録処理手順の一例を示すフローチャートである。
【図１０】図１０は、不良セクタ一覧参照処理手順の一例を示すフローチャートである。
【図１１】図１１は、ホスト装置２０２からの書き込み処理手順の一例を示すフローチャートである。
【図１２】図１２は、ビットオフ制御処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に図面を参照して、開示のストレージ制御装置、ストレージ制御方法、およびストレージ制御プログラムの実施の形態を詳細に説明する。
【００１１】
図１は、本実施の形態にかかるストレージ制御装置１０１の動作例を示す説明図である。ストレージ制御装置１０１は、記憶装置１０２の記憶領域を制御するコンピュータである。例えば、ストレージ制御装置１０１は、複数の記憶装置１０２の記憶領域を制御して、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）技術によるＲＡＩＤグループにより形成された仮想的なボリュームを利用者に提供する。
【００１２】
ＲＡＩＤ技術は、複数の記憶装置１０２を組み合わせて仮想的なボリュームとして運用する技術である。ここで、ＲＡＩＤには、仮想的なディスクの形成の仕方を表すＲＡＩＤレベルが存在する。ＲＡＩＤレベルは、ＲＡＩＤ０〜ＲＡＩＤ６までのＲＡＩＤレベルが存在する。また、ＲＡＩＤには、ＲＡＩＤ０＋１というように、複数のＲＡＩＤレベルを組み合わせたレベルも存在する。本実施の形態は、どのＲＡＩＤレベルであっても適用することができる。
【００１３】
記憶装置１０２は、不揮発性の記憶媒体を有する記憶装置であれば、どのような記憶装置でもよい。例えば、記憶装置１０２として、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、光ディスクドライブ等を採用することができる。
【００１４】
ここで、ＲＡＩＤグループを形成するストレージの記憶装置１０２の１つが故障したとする。この場合、ストレージ制御装置１０１は、リビルド処理を行い、冗長性を復旧させる。具体的には、ストレージ制御装置１０１は、故障した記憶装置１０２を交換した記憶装置１０２に対して、または、ホットスペアに設定された記憶装置１０２に対して、故障した記憶装置１０２が記憶していたデータを復元する。
【００１５】
リビルド処理の内容として、ストレージ制御装置１０１は、ＲＡＩＤグループに含まれる、故障した記憶装置１０２以外の他の記憶装置１０２からデータを読み出す。そして、ストレージ制御装置１０１は、読み出したデータに基づいて、故障した記憶装置１０２が記憶していたデータを復元する。読み出したデータに基づき故障した記憶装置１０２が記憶していたデータを復元する方法は、ＲＡＩＤレベルによって異なる。例えば、ＲＡＩＤレベルが１であれば、読み出したデータそのものが、故障した記憶装置１０２が記憶していたデータとなる。また、ＲＡＩＤレベルが５であれば、各記憶装置１０２から読み出したデータの排他的論理和により得られた値が、故障した記憶装置１０２が記憶していたデータとなる。
【００１６】
ここで、リビルド処理の過程で、ＲＡＩＤグループに含まれる他の記憶装置１０２から、あるセクタのデータを読み出した際に、あるセクタが媒体エラー等の要因で、失敗し、エラーが発生する場合がある。ここで、セクタとは、記憶装置１０２の記憶領域を、記憶装置１０２における最小のアクセス単位で分割した領域である。また、セクタを特定するアドレスの指定方法としては、ＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓｉｎｇ）方式やＣＨＳ（Ｃｙｌｉｎｄｅｒ  Ｈｅａｄ  Ｓｅｃｔｏｒ）方式がある。本実施の形態では、セクタを特定するアドレスの指定方法が、ＬＢＡ方式であるとする。
【００１７】
ここで、１つのＬＢＡが示す記憶領域は、ホストからのアクセスの最小の単位領域となる。また、セクタとＬＢＡとが１対１対応となる場合もあるし、セクタとＬＢＡとが１対複数となる場合もある。セクタとＬＢＡとが１対１対応となる場合には、例えば、１セクタのサイズ＝１ＬＢＡのサイズ＝５１２［Ｂｙｔｅ］となる。また、セクタとＬＢＡとが１対複数となる場合には、例えば、１セクタのサイズ＝４ＬＢＡのサイズ＝２０４８［Ｂｙｔｅ］となる。また、エラーが発生したエラー領域を、「不良セクタ」と呼称する。ここで、リビルド処理の過程でエラーとなったＬＢＡについて、セクタとＬＢＡとが１対１対応となる場合には、エラーが発生したＬＢＡに１対１で対応するセクタが、不良セクタとなる。また、セクタとＬＢＡとが１対複数の対応となる場合には、エラーが発生したＬＢＡに対応するセクタが、不良セクタとなる。
【００１８】
不良セクタが発生した場合、不良セクタに記憶されていたデータは失われたため、ストレージ制御装置１０１は、読み出した記憶装置１０２と、復元したデータを書き込む予定の記憶装置１０２に対して、該当のセクタのデータを０で初期化する。さらに、ストレージ制御装置１０１は、該当のセクタが不良セクタであるか否かを示す情報を有効に設定し、該当のセクタ内に設定した情報を書き込む。リビルド処理の一例については、図６で示す。また、セクタの具体的なデータ構造については、図７で示す。
【００１９】
以下、該当のセクタ内に書き込む、該当のセクタが不良セクタであるか否かを示す情報を、「不良セクタフラグ」と呼称する。このように、各セクタは、セクタ自身が不良セクタか否かを、セクタ自身の不良セクタフラグで管理する。不良セクタフラグが無効であれば、該当のセクタは不良セクタではないことを示し、不良セクタフラグが有効であれば、該当のセクタは不良セクタであることを示す。
【００２０】
ここで、不良セクタが発生した際に、不良セクタのＬＢＡをストレージ制御装置１０１のメモリに記憶することが考えられる。このように、不良セクタの一覧をメモリに記憶することにより、記憶装置１０２の利用者が、どの記憶装置１０２やどのＬＢＡに不良セクタが存在するのかを閲覧することを容易にすることができる。
【００２１】
しかしながら、ストレージにおける不良セクタを管理する管理情報に費やされるメモリの記憶容量が増大する場合がある。具体的には、ストレージの記憶領域が増大するにつれて、管理情報に費やされるメモリの記憶容量が増大することになる。そして、ストレージ制御装置１０１のメモリの空き領域を大量に消費したり、管理情報に費やされるメモリの記憶容量が、ストレージ制御装置１０１のメモリの記憶容量を超えてしまったりする場合がある。例えば、２５６［ＴＢｙｔｅ］の全不良セクタを管理する場合、２５６［ＴＢｙｔｅ］／５１２（Ｂｙｔｅ／ＬＢＡ）＊８（１ＬＢＡのサイズ）＝４［ＴＢｙｔｅ］の空き容量を消費することになる。
【００２２】
また、メモリの空き領域を大量に消費することを避けるため、メモリ上に保持する不良セクタの一覧を、１つの記憶装置１０２あたり有限個、例えば数個までとすることが考えられる。しかし、有限個を上回る不良セクタが発生した場合、記憶装置１０２に不良セクタは存在するが、記憶装置１０２のどこにあるかはわからない、いわゆる離散状態となる。ここで、不良セクタの存在するＬＢＡが明確であれば、記憶装置１０２の利用者の装置からの不良セクタの上書きにより、メモリ上に保持している不良セクタの一覧から、上書きしたセクタを消去することができる。しかし、離散状態となった場合には、不良セクタの上書きにより、記憶装置１０２の不良セクタを削除できたとしても、記憶装置１０２の全ての不良セクタが消去されたか不明であるため、不良セクタの一覧から消去することができない。
【００２３】
１つの記憶装置１０２あたりに保持する不良セクタの個数を増やせば、上述した状況に陥る可能性が減少するが、メモリの消費量とのトレードオフとなる。
【００２４】
そこで、本実施の形態では、記憶装置１０２の記憶領域において、グループ毎に不良セクタを含むか否かを示すビットから不良セクタを含むグループを特定し、特定したグループを読み出して不良セクタを特定することについて説明する。
【００２５】
図１を用いて、ストレージ制御装置１０１の動作例について説明する。図１の例では、説明の簡略化のため、１つの記憶装置１０２を表示する。図１で示す記憶装置１０２は、リビルド処理の過程でエラーが発生した記憶装置１０２か、復元したデータを書き込む予定の記憶装置１０２のいずれかである。
【００２６】
ストレージ制御装置１０１は、ビット情報１２２を、ビット情報記憶部１２０に記憶する。ここで、ビット情報１２２は、ボリューム１１１に割り当てられたストレージに論理的に割り当てられたＬＢＡをグループ化した各グループ１１２のビットであって、不良セクタが含まれるか否かを示すビットである。
【００２７】
ここで、グループ１１２に含まれるＬＢＡは、複数であればどのようなものでもよい。例えば、グループ１１２は、ボリューム１１１を２以上のＬＢＡのデータ長で分割した領域である。また、グループ１１２は、ボリューム１１１のＬＢＡの下位数ビットに応じて、ＬＢＡをグループ分けされたものでもよい。ただし、後の工程でグループ１１２に含まれる各ＬＢＡを読み出すため、特に記憶装置が、シーケンシャルアクセスが高性能でありランダムアクセスが低性能なＨＤＤ等であれば、グループ１１２に含まれるＬＢＡは、連続することが好ましい。また、あるＬＢＡが、複数のグループ１１２に含まれるようにしてもよいが、ビット情報１２２の全体のデータ量が増えることになるため、１つのＬＢＡは、１つのグループだけに含まれることが好ましい。
【００２８】
図１の例では、ボリューム１１１を２以上のＬＢＡのデータ長で５分割したグループ１１２−１〜５のいずれかに、各ＬＢＡが含まれる。図１の例では、実線で区切られた横長の矩形が、１つのグループ１１２を示す。また、実線と破線とで区切られた矩形が、１つのＬＢＡを示す。また、図１の例では、グループ１１２−１〜５は、それぞれ、ビット情報１２２−１〜５に対応する。ここで、グループ１１２−３は、不良セクタであるＬＢＡ１００２を含み、グループ１１２−５は、不良セクタであるＬＢＡ２０ＸＸ、２０ＹＹを含むものとする。図１の例では、不良セクタを×の記号で示す。
【００２９】
このように、グループ１１２−３、５には不良セクタが含まれるため、グループ１１２−３、５に対応するビット情報１２２−３、５は、対応するグループに不良セクタが含まれることを示す値を有する。これに対し、グループ１１２−１、２、４に対応するビット情報１２２−１、２、４は、対応するグループに不良セクタが含まれないことを示す値を有する。以下の説明では、対応するグループに不良セクタが含まれることを示す値を、「オン」とし、対応するグループに不良セクタが含まれないことを示す値を、「オフ」とする。例えば、ビットの値が１であればオンとし、ビットの値が０であればオフとする。また、ビットの値が１であればオフとし、ビットの値が０であればオンとしてもよい。図１の例では、オンに設定されたビットを、墨塗りで示す。
【００３０】
また、複数のビット情報１２２は、ストレージ制御装置１０１のメモリ上にどのように記憶されてもよいが、管理のし易さといった点で、ビットマップとして記憶されることが好ましい。ここで、ビットマップとは、複数のビット情報１２２から構築される配列のことである。以下、複数のビット情報１２２から構築される配列を、ビットマップ１２１とする。ビットマップ１２１が、ストレージにおけるエラー領域を管理する管理情報となる。ビットマップ１２１の内部におけるビット情報１２２の順序も、どのビット情報１２２がどのグループ１１２に対応しているかさえ特定できればどのような順序でもよい。例えば、管理をし易くするため、ビットマップ１２１の内部におけるビット情報１２２の順序は、ビット情報１２２に含まれるＬＢＡの昇順としてもよいし、降順としてもよい。図１の例では、ビットマップ１２１の内部におけるビット情報１２２の順序は、ビット情報１２２に含まれるＬＢＡの昇順とする。また、ボリューム１１１に一切不良セクタが存在しない状態でビットマップ１２１を保持するのは無駄なので、ストレージ制御装置１０１は、初めて不良セクタが発生した場合にビットマップ１２１を獲得する。
【００３１】
ストレージ制御装置１０１は、図１の（１）で示すように、ビット情報記憶部１２０に記憶されたビットマップ１２１を参照して、ボリューム１１１から不良セクタが含まれるグループを特定する。図１の例では、ストレージ制御装置１０１は、オンに設定されたビット情報１２２−３、５から、グループ１１２−３、５を特定する。
【００３２】
次に、ストレージ制御装置１０１は、図１の（２）で示すように、特定したグループに含まれるＬＢＡにおけるデータを読み出す。図１の例では、ストレージ制御装置１０１は、グループ１１２−３に含まれる全ＬＢＡのデータと、グループ１１２−５に含まれる全ＬＢＡのデータとを読み出す。
【００３３】
そして、ストレージ制御装置１０１は、図１の（３）で示すように、特定したグループ１１２に含まれるＬＢＡのデータに対する読み出し結果に基づいて、特定したグループ１１２における不良セクタを特定する。図１の例では、グループ１１２−３に含まれる全セクタに対する読み出しの過程でＬＢＡ１００２を読み出した際に、ＬＢＡ１００２には不良セクタフラグが有効に設定されているため、エラーが発生する。ストレージ制御装置１０１は、ＬＢＡ１００２への読み出しに対するエラーにより、ＬＢＡ１００２が不良セクタであることを特定する。同様に、ストレージ制御装置１０１は、ＬＢＡ２０ＸＸ、２０ＹＹが不良セクタであることを特定する。なお、図１の（３）において、セクタとＬＢＡとが１対複数の対応となる場合には、ストレージ制御装置１０１は、特定したグループ１１２における不良セクタに対応する複数のＬＢＡを出力する。
【００３４】
以上により、ストレージ制御装置１０１は、ボリューム１１１の不良セクタを最大数まで管理できるとしたときに、不良セクタのＬＢＡを一つずつ記憶する方式に比べ、不良セクタを特定するために用いるデータサイズを削減することができる。例えば、一つのグループのデータ量を１［ＭＢｙｔｅ］とし、２５６［ＴＢｙｔｅ］の記憶装置１０２の全不良セクタを管理する場合、データサイズは、２５６［ＴＢｙｔｅ］／１［ＭＢｙｔｅ］／８［Ｂｉｔ／Ｂｙｔｅ］＝３２［ＭＢｙｔｅ］となる。同一の条件で、不良セクタのＬＢＡを一つずつ記憶する方式では、データサイズは４［ＴＢｙｔｅ］であったため、本実施の形態にかかる方式は、不良セクタのＬＢＡを一つずつ記憶する方式に比べデータサイズを削減することができる。
【００３５】
なお、図１では、ストレージ制御装置１０１は、複数の記憶装置１０２の記憶領域を制御して、ＲＡＩＤグループを形成する例を説明したが、これに限らない。例えば、本実施の形態は、ストレージ制御装置１０１が、１つの記憶装置１０２の記憶領域を制御し、利用者に１つの記憶装置１０２の記憶領域を提供してもよい。
【００３６】
図２は、ストレージシステム２００の構成例を示す説明図である。ストレージシステム２００は、ＣＭ（Ｃｏｎｔｒｏｌｌｅｒ  Ｍｏｄｕｌｅ）２０１＃０、＃１と、ホスト装置２０２と、装置管理用ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）２０３と、ＤＥ（Ｄｅｖｉｃｅ  Ｅｎｃｌｏｓｕｒｅ）２０４とを有する。ＣＭ２０１は、図１で示したストレージ制御装置１０１に相当する。
【００３７】
ＣＭ２０１は、ディスクアクセスを制御するコントローラである。また、ＣＭ２０１＃０、＃１は、ＣＭ間通信により接続される。ＣＭ２０１は、図２の例で示すように、複数個のＣＭ２０１を有して、ＣＭ２０１を冗長構成としてもよい。ＣＭ２０１の内部のハードウェアについては、図３で説明する。ホスト装置２０２は、ストレージシステム２００が提供するボリュームを利用する装置である。例えば、ホスト装置２０２は、Ｗｅｂサーバや、ＤＢ（ＤａｔａＢａｓｅ）サーバである。装置管理用ＰＣ２０３は、Ｗｅｂブラウジング機能を有するコンピュータである。装置管理用ＰＣ２０３のハードウェアについては、図４で説明する。
【００３８】
ＤＥ２０４は、複数のディスク２１１を格納する筐体である。ディスク２１１は、図１で示した記憶装置１０２に相当する。図２の例では、ＣＭ２０１＃０は、ディスク２１１＃０〜＃２により、ＲＡＩＤ５のＲＡＩＤグループを構築し、ボリューム＃０の記憶領域として割り当てられる。また、ＣＭ２０１＃１は、ディスク２１１＃３〜＃７により、ＲＡＩＤ６のＲＡＩＤグループを構築し、ボリューム＃１の記憶領域として割り当てられる。ＲＡＩＤグループにより形成されたボリュームが、図１で示したボリューム１１１に相当する。ホスト装置２０２は、ボリューム＃０、＃１にアクセスする。
【００３９】
（ＣＭ２０１のハードウェア構成例）
図３は、ＣＭ２０１のハードウェア構成例を示す説明図である。ＣＭ２０１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３０１と、フラッシュＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０２と、キャッシュメモリ３０３と、ＣＡ（Ｃｈａｎｎｅｌ  Ａｄａｐｔｏｒ）３０４と、装置管理ＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）モジュール３０５と、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）ポート３０６と、ＤＩ（Ｄｉｓｋ  Ｉｎｔｅｒｆａｃｅ）３０７とを有する。
【００４０】
ＣＰＵ３０１は、ＣＭ２０１の全体の制御を司る演算処理装置である。フラッシュＲＯＭ３０２は、本実施の形態にかかるストレージ制御プログラムを記憶する不揮発性メモリである。フラッシュＲＯＭ３０２の記憶媒体としては、例えば、ＮＡＮＤフラッシュを採用することができる。キャッシュメモリ３０３は、ＣＰＵ３０１のワークエリアとして使用される揮発性メモリである。キャッシュメモリ３０３は、ビットマップ１２１を含む不良セクタ情報を記憶する。不良セクタ情報については、図５で説明する。従って、キャッシュメモリ３０３が、図１で示したビット情報記憶部１２０に相当する。また、キャッシュメモリ３０３は、フラッシュＲＯＭ３０２から読み出したストレージ制御プログラムを記憶する。
【００４１】
ＣＡ３０４は、ホスト装置２０２と通信する通信インターフェースである。装置管理ＧＵＩモジュール３０５は、Ｗｅｂブラウザによる装置の状態表示や管理機能を提供するモジュールである。ＬＡＮポート３０６は、装置管理用ＰＣ２０３と接続する通信インターフェースである。ＤＩ３０７は、ディスク２１１と通信する通信インターフェースである。
【００４２】
（装置管理用ＰＣ２０３のハードウェア構成例）
図４は、装置管理用ＰＣ２０３のハードウェア構成例を示す説明図である。装置管理用ＰＣ２０３は、ＣＰＵ４０１と、ＲＯＭ４０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）４０３と、を含む。また、装置管理用ＰＣ２０３は、ディスクドライブ４０４と、ディスク４０５と、通信インターフェース４０６と、を含む。また、装置管理用ＰＣ２０３は、ディスプレイ４０７と、キーボード４０８と、マウス４０９とを含む。また、ＣＰＵ４０１〜ディスクドライブ４０４と、通信インターフェース４０６〜マウス４０９とは、バス４１０によってそれぞれ接続される。
【００４３】
ＣＰＵ４０１は、装置管理用ＰＣ２０３の全体の制御を司る演算処理装置である。ＲＯＭ４０２は、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。ＲＡＭ４０３は、ＣＰＵ４０１のワークエリアとして使用される揮発性メモリである。
【００４４】
ディスクドライブ４０４は、ＣＰＵ４０１の制御に従ってディスク４０５に対するデータのリードおよびライトを制御する制御装置である。ディスクドライブ４０４には、例えば、磁気ディスクドライブ、光ディスクドライブ、ソリッドステートドライブなどを採用することができる。ディスク４０５は、ディスクドライブ４０４の制御で書き込まれたデータを記憶する不揮発性メモリである。例えばディスクドライブ４０４が磁気ディスクドライブである場合、ディスク４０５には、磁気ディスクを採用することができる。また、ディスクドライブ４０４が光ディスクドライブである場合、ディスク４０５には、光ディスクを採用することができる。また、ディスクドライブ４０４がソリッドステートドライブである場合、ディスク４０５には、半導体素子によって形成された半導体メモリ、いわゆる半導体ディスクを採用することができる。
【００４５】
通信インターフェース４０６は、ネットワークと内部のインターフェースを司り、外部装置からのデータの入出力を制御する制御装置である。具体的に、通信インターフェース４０６は、通信回線を通じてネットワークを介して他の装置に接続される。通信インターフェース４０６には、例えば、モデムやＬＡＮアダプタなどを採用することができる。
【００４６】
ディスプレイ４０７は、マウスカーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する装置である。ディスプレイ４０７には、例えば、ＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）、ＴＦＴ（Ｔｈｉｎ  Ｆｉｌｍ  Ｔｒａｎｓｉｓｔｏｒ）液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００４７】
キーボード４０８は、文字、数字、各種指示などの入力のためのキーを有し、データの入力を行う装置である。また、キーボード４０８は、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス４０９は、マウスカーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う装置である。マウス４０９は、ポインティングデバイスとして同様に機能を有するものであれば、トラックボールやジョイスティックなどであってもよい。
【００４８】
また、ホスト装置２０２のハードウェアは、ＣＰＵと、ＲＯＭと、ＲＡＭと、ディスクドライブと、ディスクと、通信インターフェースとを有する。次に、ＣＭ２０１の機能構成図を、図５を用いて説明する。
【００４９】
（ＣＭ２０１の機能構成例）
図５は、ＣＭ２０１の機能構成例を示す説明図である。ＣＭ２０１は、制御部５００を有する。制御部５００は、第１特定部５０１と、第２特定部５０２と、抽出部５０３と、判定部５０４と、設定部５０５と、を含む。制御部５００は、記憶装置に記憶されたプログラムをＣＰＵ３０１が実行することにより、各部の機能を実現する。記憶装置とは、具体的には、例えば、図３に示したフラッシュＲＯＭ３０２などである。また、各部の処理結果は、ＣＰＵ３０１のレジスタや、キャッシュメモリ３０３等に格納される。
【００５０】
また、ＣＭ２０１は、キャッシュメモリ３０３に含まれる不良セクタ情報５１０にアクセス可能である。不良セクタ情報５１０は、ボリューム単位の不良セクタの有無、およびＬＢＡを管理する情報である。不良セクタ情報５１０は、不良セクタ管理情報５１１と、ビットマップ１２１とを含む。不良セクタ情報５１０の記憶内容の一例を、図８で示す。
【００５１】
第１特定部５０１は、ビットマップ１２１を参照して、ボリュームから不良セクタが含まれるグループ１１２を特定する。
【００５２】
第２特定部５０２は、第１特定部５０１が特定したグループ１１２に含まれるセクタに対する読み出し結果に基づいて、第１特定部５０１が特定したグループ１１２における不良セクタを特定する。
【００５３】
次に、ビット情報１２２をオンに設定する機能について説明する。ビット情報１２２をオンに設定する機会は、図１で説明したように、リビルド処理の過程の読み出しによりエラーが発生した場合である。設定部５０５は、ボリュームのいずれかのセクタからエラーが発生した場合、いずれかのセクタを含むグループ１１２に対応するビット情報１２２を、オンに設定する。
【００５４】
次に、ビット情報１２２をオフに設定する機能について説明する。ビット情報１２２をオフに設定する機会は、ホスト装置２０２からの書き込みが発生した場合である。ビット情報１２２をオフに設定する方法としては、大きく分けて２つある。まず、１つ目の方法について説明する。
【００５５】
判定部５０４は、ボリュームに対する書き込み要求を受け付けた場合、第２特定部５０２が特定したセクタが書き込み要求の書き込みの範囲に含まれるか否かを判定する。ここで、判定部５０４は、第２特定部５０２が特定した不良セクタの全てが、書き込みの範囲に含まれているか否かを判定してもよい。または、判定部５０４は、第２特定部５０２が特定した不良セクタの最小のＬＢＡと最大のＬＢＡを特定し、特定した最小のＬＢＡが書き込みの範囲の最小値以上であり、かつ、特定した最大のＬＢＡが書き込みの範囲の最大値以下であるかを判定してもよい。次に、設定部５０５は、第２特定部５０２が特定した不良セクタが書き込みの範囲に含まれると判定部５０４が判定した場合、第２特定部５０２が特定した不良セクタを含むグループ１１２に対応するビット情報１２２を、オフに設定する。
【００５６】
例えば、グループ１１２−１が、ＬＢＡ０〜９を有し、グループ１１２−２が、ＬＢＡ１０〜１９を有するものとする。書き込みの範囲のＬＢＡがＬＢＡ５〜１５であり、第２特定部５０２が特定した不良セクタが、ＬＢＡ７、１２であるとする。この場合、判定部５０４は、第２特定部５０２が特定した不良セクタが書き込み要求の書き込みの範囲に含まれると判定する。そして、設定部５０５は、グループ１１２−１、２に対応するビット情報１２２−１、２を、オフに設定する。
【００５７】
次に、ビットをオフに設定する機能の２つ目の方法について説明する。抽出部５０３は、ボリュームに対する書き込み要求を受け付けた場合、書き込み要求の書き込みの範囲に含まれるセクタを含むグループ１１２のうち、オンに設定されたビット情報１２２に対応するグループ１１２を抽出する。次に、判定部５０４は、抽出部５０３が抽出したグループ１１２に対応して、抽出したグループ１１２に含まれており、第２特定部５０２が特定した不良セクタが、書き込みの範囲に含まれるか否かを判定する。そして、設定部５０５は、第２特定部５０２が特定した不良セクタが書き込みの範囲に含まれると判定したグループがある場合、該当のグループ１１２に対応するビットを、オフに設定する。
【００５８】
例えば、グループ１１２−１が、ＬＢＡ０〜９を有し、グループ１１２−２が、ＬＢＡ１０〜１９を有し、グループ１１２−３が、ＬＢＡ２０〜２９を有するものとする。このうち、グループ１１２−１、２、３に対応するビット情報１２２−１、２、３がオンであるとする。そして、書き込みの範囲のＬＢＡがＬＢＡ５〜２５であり、第２特定部５０２が特定した不良セクタが、ＬＢＡ２、１２、２８であるとする。
【００５９】
この場合、抽出部５０３は、グループ１１２−１、２、３を抽出する。次に、判定部５０４は、グループ１１２−１について、グループ１１２−１に含まれる不良セクタＬＢＡ２が、書き込みの範囲に含まれないと判定する。また、判定部５０４は、グループ１１２−２について、グループ１１２−２に含まれる不良セクタＬＢＡ１２が、書き込みの範囲に含まれると判定する。また、判定部５０４は、グループ１１２−３について、グループ１１２−３に含まれる不良セクタＬＢＡ２８が、書き込みの範囲に含まれないと判定する。そして、設定部５０５は、グループ１１２−２に対応するビット情報１２２−２を、オフに設定する。
【００６０】
（リビルド処理の一例）
図６は、リビルド処理内の不良セクタ作成例を示す説明図である。図６では、ＤＥ２０４に含まれるディスク２１１＃ｘ、＃ｙによりＲＡＩＤ１のＲＡＩＤグループを形成しているとする。さらに、ＤＥ２０４に含まれるディスク２１１＃ｚが、ディスク２１１＃ｘ、＃ｙのホットスペアディスクとして存在するものとする。
【００６１】
図６の例では、ディスク２１１＃ｙが故障したため、ＣＭ２０１は、リビルド処理として、ディスク２１１＃ｚにディスク２１１＃ｘが記憶していたデータを復元し、冗長性を復旧させる。具体的には、図６の例では、ディスク２１１＃ｙはＲＡＩＤ１のＲＡＩＤグループに属するため、ＣＭ２０１は、ディスク２１１＃ｙのペアとなるディスク２１１＃ｘからデータを読み出し、読み出したデータを、ディスク２１１＃ｚに書き込む。
【００６２】
そして、図６の例では、ＣＭ２０１が、ディスク２１１＃ｘからデータを読み出した際に、あるＬＢＡで媒体エラーの要因で失敗したとする。この場合、ＣＭ２０１は、ディスク２１１＃ｘにおける不良セクタの不良セクタフラグを有効に設定し、ディスク２１１＃ｘにおける読み出しに失敗したセクタを書き込む予定であったセクタの不良セクタフラグを有効に設定する。また、不良セクタのデータは失われたため、読み出しに失敗したＬＢＡのデータを０データで初期化する。セクタの具体的なデータ構造については、図７で説明する。図６の例では、不良セクタを×の記号で示す。
【００６３】
図７は、セクタ内に付与する不良セクタフラグの一例を示す説明図である。図７では、セクタのデータ構造を用いて、セクタ内に付与する不良セクタフラグの一例について説明する。
【００６４】
１セクタとなる１つのＬＢＡが示す記憶領域７００は、５２０［Ｂｙｔｅ］の記憶領域である。記憶領域７００のうち、データを記憶する記憶領域７０１の記憶容量が５１２［ｂｙｔｅ］であり、チェックコードを記憶する記憶領域７０２の記憶容量が８［Ｂｙｔｅ］である。
【００６５】
記憶領域７０２のうち、ＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）を記憶する記憶領域７０３の記憶容量が２［Ｂｙｔｅ］であり、Ｂｌｏｃｋ  ＩＤを記憶する記憶領域７０４の記憶容量が６［Ｂｙｔｅ］である。
【００６６】
記憶領域７０４のうち、不良セクタフラグを記憶する記憶領域７０５の記憶容量が［１ｂｉｔ］であり、ＬＵＮ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ  Ｎｕｍｂｅｒ）番号とＬＢＡの一部とにより作成された値を記憶する記憶領域７０６の記憶容量が［４７ｂｉｔ］である。
【００６７】
図８は、不良セクタ情報５１０の記憶内容の一例を示す説明図である。不良セクタ情報５１０に含まれる不良セクタ管理情報５１１は、ボリューム番号と、ビットマップ１２１のアドレスとを記憶する情報である。ボリューム番号は、ＲＡＩＤグループにより形成されたボリュームを識別する番号である。ビットマップ１２１のアドレスは、ビットマップ１２１が確保された領域の先頭アドレスである。
【００６８】
また、不良セクタ情報５１０に含まれるビットマップ１２１は、グループ１１２に不良セクタが含まれるか否かを示すビット情報１２２の配列である。
【００６９】
次に、図９〜図１２を用いて、フローチャートとして示したＣＭ２０１が実行する処理を説明する。
【００７０】
図９は、不良セクタ情報登録処理手順の一例を示すフローチャートである。不良セクタ情報登録処理は、リビルド処理中に媒体エラー等により読み出せなかった不良セクタを検出した際に行う処理である。
【００７１】
ＣＭ２０１は、不良セクタが発生したボリュームのビットマップ１２１が存在するか否かを判断する（ステップＳ９０１）。不良セクタが発生したボリュームのビットマップ１２１が存在しない場合（ステップＳ９０１：Ｎｏ）、ＣＭ２０１は、キャッシュメモリ３０３から、不良セクタが発生したボリュームのビットマップ１２１を獲得する（ステップＳ９０２）。
【００７２】
ステップＳ９０２の処理終了後、または、不良セクタが発生したボリュームのビットマップ１２１が既に存在する場合（ステップＳ９０１：Ｙｅｓ）、不良セクタが発生したボリュームのビットマップ１２１のうち、不良セクタに対応するビット情報１２２をオンに設定する（ステップＳ９０３）。そして、ＣＭ２０１は、不良セクタ管理情報を終了する。
【００７３】
図１０は、不良セクタ一覧参照処理手順の一例を示すフローチャートである。不良セクタ一覧参照処理は、装置管理用ＰＣ２０３から、不良セクタの一覧を送信する要求を受け付けた際に実行する処理である。
【００７４】
ＣＭ２０１は、ビットマップ１２１が存在するか否かを判断する（ステップＳ１００１）。例えば、不良セクタ情報を参照する要求に、対象のボリューム番号が含まれる場合には、ＣＭ２０１は、該当のボリューム番号が設定された不良セクタ管理情報５１１を検索する。そして、ＣＭ２０１は、検索してみつかった不良セクタ管理情報５１１のビットマップ１２１のアドレスに、有効なアドレスが設定されていれば、ビットマップ１２１が存在すると判断する。
【００７５】
ビットマップ１２１が存在する場合（ステップＳ１００１：Ｙｅｓ）、ＣＭ２０１は、存在したビットマップ１２１のうちのオンに設定されたビットに対応するグループ１１２を特定する（ステップＳ１００２）。
【００７６】
次に、ＣＭ２０１は、特定したグループ１１２の各ＬＢＡの読み出し結果から、不良セクタＬＢＡリストを作成する（ステップＳ１００３）。そして、ＣＭ２０１は、作成した不良セクタＬＢＡリストを、装置管理用ＰＣ２０３に送信する（ステップＳ１００４）。不良セクタＬＢＡリストには、例えば、不良セクタとなったＬＢＡの一覧が含まれる。また、例えば、ＣＭ２０１は、不良セクタＬＢＡリストに基づいて、不良セクタＬＢＡを表示するＷｅｂページを生成し、生成したＷｅｂページを装置管理用ＰＣ２０３に送信してもよい。装置管理用ＰＣ２０３は、受信した不良セクタＬＢＡリストやＷｅｂページを、ディスプレイ４０７に表示する。
【００７７】
一方、ビットマップ１２１が存在しない場合（ステップＳ１００１：Ｎｏ）、ＣＭ２０１は、「不良セクタなし」を示す情報を装置管理用ＰＣ２０３に送信する（ステップＳ１００５）。ステップＳ１００４と同様に、装置管理用ＰＣ２０３は、「不良セクタなし」を示す情報をディスプレイ４０７に表示する。ステップＳ１００４またはステップＳ１００５の処理終了後、ＣＭ２０１は、不良セクタ一覧参照処理を終了する。
【００７８】
図１１は、ホスト装置２０２からの書き込み処理手順の一例を示すフローチャートである。ホスト装置２０２からの書き込み処理は、ホスト装置２０２から書き込み要求を受け付けた際に行う処理である。
【００７９】
ＣＭ２０１は、書き込み対象のボリュームのビットマップ１２１が存在するか否かを判断する（ステップＳ１１０１）。書き込み対象のボリュームのビットマップ１２１が存在する場合（ステップＳ１１０１：Ｙｅｓ）、ＣＭ２０１は、存在したビットマップ１２１を参照して、書き込むＬＢＡの範囲を含むグループ１１２に対応するビットのうち、オンに設定されたビットがあるか否かを判断する（ステップＳ１１０２）。
【００８０】
オンに設定されたビットがある場合（ステップＳ１１０２：Ｙｅｓ）、ＣＭ２０１は、オンに設定されたビットに対応するグループ１１２を特定する（ステップＳ１１０３）。そして、ＣＭ２０１は、特定したグループ１１２の各ＬＢＡの読み出し結果から、不良セクタＬＢＡリストを作成する（ステップＳ１１０４）。次に、ＣＭ２０１は、書き込み対象のボリュームに対して書き込み処理を実行する（ステップＳ１１０５）。そして、ＣＭ２０１は、ビットオフ制御処理を実行する（ステップＳ１１０６）。ビットオフ制御処理については、図１２で説明する。
【００８１】
一方、書き込み対象のボリュームのビットマップが存在しない場合（ステップＳ１１０１：Ｎｏ）、または、オンに設定されたビットがない場合（ステップＳ１１０２：Ｎｏ）、ＣＭ２０１は、書き込み対象のボリュームに対して書き込み処理を実行する（ステップＳ１１０７）。ステップＳ１１０６またはステップＳ１１０７の処理終了後、ＣＭ２０１は、ホスト装置２０２からの書き込み処理を終了する。
【００８２】
なお、ホスト装置２０２からの読み出し処理について、ＣＭ２０１は、読み出し対象のボリュームからデータを読み出すだけであり、不良セクタ管理情報５１１やビットマップ１２１を用いることはないので、説明を省略する。
【００８３】
図１２は、ビットオフ制御処理手順の一例を示すフローチャートである。ビットオフ制御処理は、ホスト装置２０２からの書き込み処理により、不良セクタを上書きできたＬＢＡに対応するビットをオフにする処理である。
【００８４】
ＣＭ２０１は、全グループ１１２の中から、書き込むＬＢＡの範囲を含むグループを抽出する（ステップＳ１２０１）。そして、ＣＭ２０１は、書き込むＬＢＡの範囲を含むグループ１１２に対応するビット情報１２２のうち、未評価のビット情報を選択する（ステップＳ１２０２）。次に、ＣＭ２０１は、作成した不良セクタＬＢＡリストの選択したビットに対応するグループ１１２のＬＢＡの範囲と、書き込むＬＢＡの範囲とを比較する（ステップＳ１２０３）。そして、ＣＭ２０１は、書き込むＬＢＡの範囲が選択したビット情報１２２に対応するグループ１１２のＬＢＡの範囲を全て包含するか否かを判断する（ステップＳ１２０４）。書き込むＬＢＡの範囲が選択したビット情報１２２に対応するグループ１１２のＬＢＡの範囲を全て包含する場合（ステップＳ１２０４：Ｙｅｓ）、ＣＭ２０１は、選択したビット情報１２２をオフに設定する（ステップＳ１２０５）。
【００８５】
ステップＳ１２０５の処理終了後、ＣＭ２０１は、書き込むＬＢＡの範囲を含むグループ１１２に対応するビット情報１２２に未評価のビット情報１２２がないか否かを判断する（ステップＳ１２０６）。また、書き込むＬＢＡの範囲が選択したビット情報１２２に対応するグループ１１２のＬＢＡの範囲を包含しない場合（ステップＳ１２０４：Ｎｏ）も、ＣＭ２０１は、ステップＳ１２０６の処理を実行する。書き込むＬＢＡの範囲を含むグループ１１２に対応するビット情報１２２に未評価のビット情報１２２がある場合（ステップＳ１２０６：Ｎｏ）、ＣＭ２０１は、ステップＳ１２０２の処理に移行する。
【００８６】
一方、書き込むＬＢＡの範囲を含むグループ１１２に対応するビット情報１２２に未評価のビットがない場合（ステップＳ１２０６：Ｙｅｓ）、ＣＭ２０１は、書き込み対象のボリュームのビットマップ１２１の各ビット情報１２２が全てオフか否かを判断する（ステップＳ１２０７）。書き込み対象のボリュームのビットマップ１２１の各ビット情報１２２が全てオフである場合（ステップＳ１２０７：Ｙｅｓ）、ＣＭ２０１は、書き込み対象のボリュームのビットマップ１２１を解放する（ステップＳ１２０８）。
【００８７】
ステップＳ１２０８の処理終了後、書き込み対象のボリュームのビットマップ１２１の各ビット情報１２２のうちオンのビット情報１２２がある場合（ステップＳ１２０７：Ｎｏ）、ＣＭ２０１は、ビットオフ制御処理を終了する。
【００８８】
また、ビットオフ制御処理は、図１２で示した処理に限られない。例えば、ＣＭ２０１は、図１２で示すフローチャートの代わりに、作成した不良セクタＬＢＡリストの全てのＬＢＡが、書き込むＬＢＡの範囲に含まれていれば、作成した不良セクタＬＢＡリストの全てのＬＢＡに対応するビット情報１２２をオフにしてもよい。そして、ビットをオフにした結果、ビットマップ１２１の各ビットが全てオフとなった場合、ＣＭ２０１は、該当のビットマップ１２１を解放する。この処理は、図１２で示したフローチャートに比べて簡素であるため、図１２で示したフローチャートに比べてＣＭ２０１にかかる負荷を抑制することができる。
【００８９】
以上説明したように、ＣＭ２０１は、グループ１１２毎に不良セクタを含むか否かを示すビットから不良セクタを含むグループ１１２を特定し、特定したグループ１１２を読み出して不良セクタを特定する。これにより、ＣＭ２０１は、不良セクタを特定するために用いる不良セクタ情報５１０のデータサイズについて、１グループにつき１ビットで済み、不良セクタ情報５１０のデータサイズを抑えることができる。従って、ＣＭ２０１は、ボリュームに存在する不良セクタを、キャッシュメモリ３０３の容量を抑えつつ、理論上の最大数までＬＢＡ単位で管理することができる。
【００９０】
また、ＣＭ２０１は、ボリュームのいずれかのセクタからエラーが発生した場合、いずれかのセクタを含むグループ１１２に対応するビット情報１２２を、オンに設定する。これにより、不良セクタ情報５１０のデータサイズを抑えた状態でも、ＣＭ２０１は、オンに設定されたビット情報１２２に対応するグループ１１２から不良セクタを特定すればよく、不良セクタの一覧を正しく提供することができる。
【００９１】
また、ＣＭ２０１は、書き込み要求の書き込みの範囲に含まれ、かつ、オンに設定されたビット情報１２２が、特定した不良セクタが書き込みの範囲にあると判定したグループ１１２に対応するビット情報１２２を、オフに設定する。これにより、ＣＭ２０１は、上書きにより不良セクタが消去された場合でも、ＣＭ２０１は、不良セクタ情報５１０が示す不良セクタの有無と、ボリュームに含まれる不良セクタの有無とを一致させることができる。
【００９２】
また、ＣＭ２０１は、書き込み要求の書き込みの範囲に含まれ、かつ、オンに設定されたビット情報１２２に対応するグループ１１２のうち、特定した不良セクタが書き込みの範囲にあると判定したグループ１１２に対応するビット情報１２２を、オフに設定する。このように、上書きにより不良セクタが複数消去された場合でも、ＣＭ２０１は、複数の不良セクタの各不良セクタに対応する各グループ１１２で、ビット情報の値を設定する。これにより、ＣＭ２０１は、上書きにより不良セクタが複数消去された場合でも、不良セクタ情報５１０が示す不良セクタの有無と、ボリュームに含まれる不良セクタの有無とを一致させることができる。
【００９３】
なお、本実施の形態で説明したストレージ制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本ストレージ制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本ストレージ制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【００９４】
上述した実施の形態に関し、さらに以下の付記を開示する。
【００９５】
（付記１）ストレージの記憶領域に論理的に割り当てられた複数の単位領域に対するアクセスを制御するストレージ制御装置において、
前記複数の単位領域をグループ化した各グループのビット情報であって、エラーが発生したエラー領域が含まれるか否かを示すビット情報を記憶するビット情報記憶部と、
前記ビット情報記憶部に記憶された各グループのビット情報を参照して、エラー領域が含まれるグループを特定し、特定した前記グループに含まれる複数の単位領域におけるデータの読み出し結果に基づいて、前記グループにおけるエラー領域を特定する制御部と、
を有することを特徴とするストレージ制御装置。
【００９６】
（付記２）前記制御部は、
いずれかの単位領域においてエラーが発生した場合、前記いずれかの単位領域を含むグループに対応するビット情報を、当該グループにエラー領域が含まれることを示す値に設定する、
ことを特徴とする付記１に記載のストレージ制御装置。
【００９７】
（付記３）前記制御部は、
前記記憶領域に対する書き込み要求を受け付けた場合、特定した前記単位領域が前記書き込み要求の書き込みの範囲に含まれるか否かを判定し、
特定した前記単位領域が前記書き込みの範囲に含まれると判定した場合、特定した前記単位領域を含むグループに対応するビット情報を、当該グループにエラー領域が含まれないことを示す値に設定する、
ことを特徴とする付記１または２に記載のストレージ制御装置。
【００９８】
（付記４）前記制御部は、
前記記憶領域に対する書き込み要求を受け付けた場合、前記書き込み要求の書き込みの範囲に含まれる単位領域を含むグループのうち、エラー領域が含まれることを示す値に設定されたビット情報に対応するグループを抽出し、
抽出した前記グループに対応して、前記グループに含まれる単位領域であってエラー領域が、前記書き込みの範囲に含まれるか否かを判定し、
抽出した前記グループに含まれる当該単位領域が前記書き込みの範囲に含まれると判定したグループがある場合、当該グループに対応するビットを、当該グループにエラー領域が含まれないことを示す値に設定する、
ことを特徴とする付記１または２に記載のストレージ制御装置。
【００９９】
（付記５）前記エラー領域は、前記ストレージの記憶装置における最小のアクセス単位の記憶容量を有する領域で管理されることを特徴とする付記１〜４のいずれか一つに記載のストレージ制御装置。
【０１００】
（付記６）前記ストレージは、ＲＡＩＤで構成された記憶装置のグループを含むことを特徴とする付記１〜５のいずれか一つに記載のストレージ制御装置。
【０１０１】
（付記７）コンピュータが、
ストレージの記憶領域に論理的に割り当てられた複数の単位領域をグループ化し、グループ毎に、エラーが発生したエラー領域が含まれるか否かを示すビット情報を管理し、
各グループのビット情報を参照して、前記記憶領域からエラー領域が含まれるグループを特定し、
特定した前記グループに含まれる単位領域におけるデータの読み出し結果に基づいて、前記グループにおけるエラー領域を特定する、
処理を実行することを特徴とするストレージ制御方法。
【０１０２】
（付記８）コンピュータに、
ストレージの記憶領域に論理的に割り当てられた複数の単位領域をグループ化し、グループ毎に、エラーが発生したエラー領域が含まれるか否かを示すビット情報を管理し、
各グループのビット情報を参照して、前記記憶領域からエラー領域が含まれるグループを特定し、
特定した前記グループに含まれる単位領域におけるデータの読み出し結果に基づいて、前記グループにおけるエラー領域を特定する、
処理を実行させることを特徴とするストレージ制御プログラム。
【符号の説明】
【０１０３】
１０１  ストレージ制御装置
１０２  記憶装置
１１１  ボリューム
１２０  ビット情報記憶部
１１２  グループ
１２１  ビットマップ
１２２  ビット情報
２０１  ＣＭ
２１１  ディスク
５００  制御部
５０１  第１特定部
５０２  第２特定部
５０３  抽出部
５０４  判定部
５０５  設定部
５１０  不良セクタ情報
【図１】
0006693181.tif 000002
【図２】
0006693181.tif 000003
【図３】
0006693181.tif 000004
【図４】
0006693181.tif 000005
【図５】
0006693181.tif 000006
【図６】
0006693181.tif 000007
【図７】
0006693181.tif 000008
【図８】
0006693181.tif 000009
【図９】
0006693181.tif 000010
【図１０】
0006693181.tif 000011
【図１１】
0006693181.tif 000012
【図１２】
0006693181.tif 000013