(57)【特許請求の範囲】
【請求項１】
複数の記憶装置と、前記複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置と、前記複数の記憶装置のいずれかの代わりに使用される予備用記憶装置とを備えたストレージシステムにおいて、
前記ストレージ制御装置は、
前記複数の記憶装置のうちの第１の記憶装置が故障すると、前記第１の記憶装置に記録されていたデータと同一のデータを前記予備用記憶装置に格納するリビルド処理を実行するリビルド制御部と、
ホスト装置からのアクセス要求に応じて前記複数の記憶装置内のデータにアクセスするアクセス制御部であって、前記第１の記憶装置が故障したとき、前記複数の記憶装置のうちの前記第１の記憶装置を除く残りの記憶装置を用いて、前記ホスト装置からのアクセス要求に応じたアクセス処理を継続し、前記リビルド処理の実行中に前記ホスト装置から書き込み要求を受けたとき、前記第１の記憶装置に書き込むべきデータがある場合には、当該データを前記予備用記憶装置に書き込むアクセス制御部と、
前記リビルド処理を実行中の前記リビルド制御部が、前記複数の記憶装置のうちの第２の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれているかを判定し、当該データが書き込まれている場合には、当該データについての前記リビルド処理が完了していると判定し、当該データが書き込まれていない場合には、前記第１の記憶装置から前記予備用記憶装置に格納するデータを読み出すデータ復旧制御部と、
を有することを特徴とするストレージシステム。
【請求項２】
前記データ復旧制御部は、
前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていない場合には、前記第１の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
起動した前記第１の記憶装置から前記予備用記憶装置に格納するデータを読み出せなかった場合には、前記第２の記憶装置を再起動させ、再起動した前記第２の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする請求項１記載のストレージシステム。
【請求項３】
前記データ復旧制御部は、
前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていない場合には、前記第１の記憶装置が故障してから、前記アクセス制御部が前記予備用記憶装置にデータを書き込み可能になるまでの期間に、前記第２の記憶装置における前記読み出しに失敗したデータの位置に対して前記アクセス制御部によってデータが書き込まれたかを判定し、
データが書き込まれていない場合には、前記第１の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
データが書き込まれていた場合には、前記第２の記憶装置を再起動させ、再起動した前記第２の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする請求項１記載のストレージシステム。
【請求項４】
前記予備用記憶装置における全記憶領域は、あらかじめデータの読み出しエラーが発生する状態とされ、
前記データ復旧制御部は、前記リビルド制御部が前記第２の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置からのデータ読み出しを実行し、
データを正常に読み出すことができた場合には、当該データについての前記リビルド処理が完了していると判定し、
データの読み出しエラーが発生した場合には、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていないと判定する、
ことを特徴とする請求項１〜３のいずれか１項に記載のストレージシステム。
【請求項５】
前記データ復旧制御部は、前記第１の記憶装置が故障した後、前記ホスト装置からの読み出し要求に応じた前記第２の記憶装置からのデータ読み出しに失敗したとき、前記第１の記憶装置における読み出しを要求されたデータに対応する位置からデータを読み出すことを特徴とする請求項１記載のストレージシステム。
【請求項６】
複数の記憶装置と、前記複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置と、前記複数の記憶装置のいずれかの代わりに使用される予備用記憶装置とを備えたストレージシステムにおいて、
前記ストレージ制御装置は、
前記複数の記憶装置のうちの第１の記憶装置が故障すると、前記第１の記憶装置に記録されていたデータと同一のデータを前記予備用記憶装置に格納するリビルド処理を実行するリビルド制御部と、
ホスト装置からのアクセス要求に応じて前記複数の記憶装置内のデータにアクセスするアクセス制御部であって、前記第１の記憶装置が故障したとき、前記複数の記憶装置のうちの前記第１の記憶装置を除く残りの記憶装置を用いて、前記ホスト装置からのアクセス要求に応じたアクセス処理を継続するアクセス制御部と、
前記リビルド処理を実行中の前記リビルド制御部が、前記複数の記憶装置のうちの第２の記憶装置からのデータ読み出しに失敗したとき、前記第１の記憶装置が故障してから現在までの期間に、前記第２の記憶装置における読み出しに失敗したデータの位置に対して前記アクセス制御部によってデータが書き込まれたかを判定し、当該データが書き込まれていない場合には、前記第１の記憶装置から前記予備用記憶装置に格納するデータを読み出し、当該データが書き込まれていた場合には、前記第２の記憶装置を再起動させ、再起動した前記第２の記憶装置から前記読み出しに失敗したデータを再度読み出すデータ復旧制御部と、
を有することを特徴とするストレージシステム。
【請求項７】
複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置において、
前記ストレージ制御装置は、
前記複数の記憶装置のうちの第１の記憶装置が故障すると、前記第１の記憶装置に記録されていたデータと同一のデータを予備用記憶装置に格納するリビルド処理を実行するリビルド制御部と、
ホスト装置からのアクセス要求に応じて前記複数の記憶装置内のデータにアクセスするアクセス制御部であって、前記第１の記憶装置が故障したとき、前記複数の記憶装置のうちの前記第１の記憶装置を除く残りの記憶装置を用いて、前記ホスト装置からのアクセス要求に応じたアクセス処理を継続し、前記リビルド処理の実行中に前記ホスト装置から書き込み要求を受けたとき、前記第１の記憶装置に書き込むべきデータがある場合には、当該データを前記予備用記憶装置に書き込むアクセス制御部と、
前記リビルド処理を実行中の前記リビルド制御部が、前記複数の記憶装置のうちの第２の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれているかを判定し、当該データが書き込まれている場合には、当該データについての前記リビルド処理が完了していると判定し、当該データが書き込まれていない場合には、前記第１の記憶装置から前記予備用記憶装置に格納するデータを読み出すデータ復旧制御部と、
を有することを特徴とするストレージ制御装置。
【請求項８】
複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置におけるストレージ制御方法であって、
ホスト装置からのアクセス要求に応じて前記複数の記憶装置内のデータにアクセスし、
前記複数の記憶装置のうちの第１の記憶装置が故障すると、前記複数の記憶装置のうちの前記第１の記憶装置を除く残りの記憶装置を用いて、前記ホスト装置からのアクセス要求に応じたアクセス処理を継続するとともに、前記第１の記憶装置に記録されていたデータと同一のデータを予備用記憶装置に格納するリビルド処理を実行し、
前記リビルド処理の実行中に前記ホスト装置から書き込み要求を受けたとき、前記第１の記憶装置に書き込むべきデータがある場合には、当該データを前記予備用記憶装置に書き込み、
前記リビルド処理において前記複数の記憶装置のうちの第２の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における読み出しに失敗したデータに対応する位置に対して前記ホスト装置からの書き込み要求に応じてデータが書き込まれているかを判定し、
当該データが書き込まれている場合には、当該データについての前記リビルド処理が完了していると判定し、
当該データが書き込まれていない場合には、前記第１の記憶装置から前記予備用記憶装置に格納するデータを読み出す、
ことを特徴とするストレージ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム、ストレージ制御装置およびストレージ制御方法に関する。
【背景技術】
【０００２】
近年、ＨＤＤ（Hard Disk Drive）などの記憶装置を複数用いたストレージシステムが広く使用されている。このようなストレージシステムでは、記憶装置に対するデータアクセスの信頼性を向上させるために、記憶装置に対するアクセスを制御する制御装置が冗長化されているものが多い。例えば、二重化された制御装置の両系がハードウェア異常により停止した場合に、両系の電源オフ、オン処理を実行することで、一時的に発生していたハードウェア異常を復旧させるものがある。
【０００３】
また、ストレージシステムでは一般的に、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）技術を用いて、データが２つ以上の記憶装置に冗長化されるような記録制御が行われることで、記録されるデータの安全性が高められている。
【０００４】
さらに、データが冗長化されたストレージシステムにおいて、記憶装置が故障すると、故障した記憶装置に記憶されていたデータが再構築されて、他の記憶装置に格納される。このような処理は、一般に「リビルド処理」と呼ばれる。リビルド処理が実行されることで、データの冗長度が回復する。
【０００５】
多くのストレージシステムでは、ホットスペア（Hot Spare）と呼ばれる予備用記憶装置が用意されており、このホットスペアを用いてリビルド処理が行われることが多い。一方、ホットスペアを用いずに、故障した記憶装置を新たな記憶装置に交換したときに、交換された記憶装置に対してリビルド処理を行うものもある。例えば、ＲＡＩＤ−５によって管理された記憶装置の１つに障害が発生したとき、交換された記憶装置に対するパリティの再構築を、同じパリティグループ内の記憶装置ではなく、スナップショット用ミラー構成の同じ位置にある記憶装置からのデータコピーによって行うものがある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００４−２０６２３９号公報
【特許文献２】特開２００２−１０８５７１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、ストレージシステムにおいて、例えばＲＡＩＤ−５で管理されている状態など、データが２重に冗長化された状態から、１つの記憶装置が故障すると、データの冗長性が失われた状態のままリビルド処理が行われる。このようなデータの冗長性が失われた状態で、さらに別の記憶装置からのデータの読み出しに失敗することがある。このような読み出しの失敗は、例えば、ディスク媒体面の部分的な欠損などによって発生し得る。データの冗長性が失われた状態で、さらに別の記憶装置からのデータの読み出しに失敗してしまうと、そのデータが失われてしまう。
【０００８】
本発明はこのような課題に鑑みてなされたものであり、データロスト発生の可能性を低減したストレージシステム、ストレージ制御装置およびストレージ制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するために、複数の記憶装置と、複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように複数の記憶装置に対するデータ記録を制御するストレージ制御装置と、複数の記憶装置のいずれかの代わりに使用される予備用記憶装置とを備えたストレージシステムが提供される。このストレージシステムにおいて、ストレージ制御装置は、リビルド制御部と、データ復旧制御部とを有する。リビルド制御部は、複数の記憶装置のうちの第１の記憶装置が故障すると、第１の記憶装置に記録されていたデータと同一のデータを予備用記憶装置に格納するリビルド処理を実行する。データ復旧制御部は、リビルド処理を実行中のリビルド制御部が、複数の記憶装置のうちの第２の記憶装置からのデータ読み出しに失敗したとき、第１の記憶装置から予備用記憶装置に格納するデータを読み出す。
【００１０】
また、上記目的を達成するために、上記のストレージ制御装置と同様の処理を実行するストレージ制御装置およびストレージ制御方法が提供される。
【発明の効果】
【００１１】
上記のストレージシステム、ストレージ制御装置およびストレージ制御方法によれば、データロストの発生の可能性を低減することができる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態に係るストレージシステムの構成例を示す図である。
【図２】第２の実施の形態に係るストレージシステムの全体構成例を示す図である。
【図３】ＣＭのハードウェア構成例を示す図である。
【図４】ＣＭの処理機能の構成例を示すブロック図である。
【図５】ＲＡＩＤ管理テーブルに登録される情報の例を示す図である。
【図６】バッドデータ管理テーブルに登録される情報の例を示す図である。
【図７】非冗長ライト管理テーブルに登録される情報の例を示す図である。
【図８】サルベージ管理テーブルに登録される情報の例を示す図である。
【図９】ＨＤＤにおけるデータ記録フォーマットの例を示す図である。
【図１０】サルベージ処理が起動される状態の例を示す図である。
【図１１】サルベージ方法（１）の実行に必要な前処理を示す図である。
【図１２】サルベージ方法（１）の手順を示す図である。
【図１３】サルベージ方法（２），（３）の実行に必要な前処理を示す図である。
【図１４】サルベージ方法（２）の手順を示す図である。
【図１５】サルベージ方法（３）の手順を示す図である。
【図１６】リビルド処理手順の例を示すフローチャートである。
【図１７】アクセス制御部によるＩ／Ｏ処理手順の例を示すフローチャートである。
【図１８】サルベージ処理手順の例を示す図である。
【図１９】第３の実施の形態のＣＭにおけるホストリード処理手順の例を示すフローチャート（その１）である。
【図２０】第３の実施の形態のＣＭにおけるホストリード処理手順の例を示すフローチャート（その２）である。
【図２１】第４の実施の形態におけるＣＭの処理機能の構成例を示すブロック図である。
【図２２】ライト管理テーブルに登録される情報の例を示す図である。
【図２３】サルベージ方法（２ａ）の実行に必要な前処理を示す図である。
【図２４】サルベージ方法（２ａ）の手順を示す図である。
【図２５】第４の実施の形態でのＩ／Ｏ処理手順の例を示すフローチャートである。
【図２６】第４の実施の形態でのサルベージ処理手順の例を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、実施の形態について図面を参照して詳細に説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係るストレージシステムの構成例を示す図である。
【００１４】
ストレージシステム１は、ストレージ制御装置１０と、複数の記憶装置とを備える。ストレージシステム１が備える記憶装置は、ＨＤＤ、ＳＳＤ（Solid State Drive）などの不揮発性記憶装置である。図１では、ストレージシステム１が備える記憶装置として、記憶装置２１，２２，３１を例示している。
【００１５】
ストレージ制御装置１０は、図示しないホスト装置からの要求に応じて、ストレージシステム１内の記憶装置に対するアクセスを制御する。また、ストレージ制御装置１０は、記憶装置へのアクセス処理を、それぞれ複数の記憶装置の記憶領域によって構成される論理記憶領域ごとに管理する。以下、このような論理記憶領域をＲＬＵ（RAID Logical Unit）と呼ぶ。図１では例として、記憶装置２１，２２の各記憶領域が、１つのＲＬＵに属している。
【００１６】
ストレージ制御装置１０は、ＲＬＵに属する複数の記憶装置を、ＲＬＵに記録するデータが異なる記憶装置の記憶領域に冗長化されるように管理する。これにより、ＲＬＵに属するいずれかの記憶装置が故障した場合でも、ＲＬＵに記録されたデータは失われない。なお、ＲＬＵの管理に使用される方法としては、ＲＡＩＤ−１，４，５などがある。
【００１７】
さらに、ストレージシステム１には、ＲＬＵに属するいずれかの記憶装置の代わりに使用される予備用記憶装置が、あらかじめ用意されている。図１では例として、記憶装置３１が予備用であるものとする。
【００１８】
ストレージ制御装置１０は、リビルド制御部１１と、データ復旧制御部１２とを備える。リビルド制御部１１およびデータ復旧制御部１２の各処理は、例えば、ストレージ制御装置１０が備えるＣＰＵ（Central Processing Unit）が所定のプログラムを実行することで実現される。
【００１９】
リビルド制御部１１は、ＲＬＵに属する１つの記憶装置（ここでは記憶装置２２とする）が故障すると（ステップＳ１）、故障した記憶装置２２に記録されていたデータと同一のデータを予備用の記憶装置３１に格納する「リビルド処理」を実行する（ステップＳ２）。
【００２０】
ＲＬＵがＲＡＩＤ−１で管理されている場合、リビルド制御部１１は、ＲＬＵに属する他方の記憶装置２１から読み出したＲＬＵのデータを、予備用の記憶装置３１にコピーする。また、ＲＬＵがＲＡＩＤ−４，５のいずれかで管理されている場合（ただしこの場合、ＲＬＵは３つ以上の記憶装置によって構成される）、リビルド制御部１１は、ＲＬＵに属する故障していないすべての記憶装置からデータを読み出し、読み出したデータを基に故障した記憶装置に記録されていたデータを計算し、算出されたデータを予備用の記憶装置に格納する。
【００２１】
データ復旧制御部１２は、リビルド処理中において、リビルド制御部１１がデータの読み出しに失敗したとき（ステップＳ３）、予備用の記憶装置３１に格納すべきデータをサルベージする（復旧させる）処理を行う。図１では、リビルド処理中に記憶装置２１からのデータ読み出しに失敗した場合を示している。
【００２２】
データ復旧制御部１２は、故障している記憶装置２２からのデータ読み出しを試す。例えば、データ復旧制御部１２は、故障している記憶装置２２を再起動させ（ステップＳ４）、再起動した記憶装置２２から、読み出しに失敗したデータに対応する、予備用の記憶装置３１に格納すべきデータを読み出す（ステップＳ５）。ここで言う再起動とは、故障中の記憶装置２２の電源オフおよび電源オンを行って、記憶装置２２をリセットする処理である。なお、例えば、記憶装置２２の故障発生（ステップＳ１）の後に記憶装置２２の電源をオフした場合には、ステップＳ４の時点では記憶装置２２の電源が再度オンにされる。逆に、記憶装置２２の故障発生（ステップＳ１）の後に記憶装置２２の電源がオンのままになっていた場合、データ復旧制御部１２は、例えば、再起動の前に記憶装置２２からのデータ読み出しを実行し、読み出しができなかった場合に記憶装置２２を再起動して、再起動後の記憶装置２２から再度読み出しを実行してもよい。
【００２３】
記憶装置２２からのデータ読み出しに成功した場合（すなわち、データのサルベージに成功した場合）、データ復旧制御部１２は、読み出したデータを予備用の記憶装置３１に格納する。
【００２４】
このようなサルベージ処理により、リビルド処理時にデータの読み出しに失敗した場合でも、読み出しに失敗したデータに対応する、予備用の記憶装置３１に格納すべきデータを復元できる可能性が生じる。従って、データロストが発生する可能性を低減することができる。
【００２５】
なお、ストレージ制御装置１０は、ＲＬＵに属する記憶装置２２の故障が発生した後も、ＲＬＵに属する残りの記憶装置２１を用いて、ホスト装置からの要求に応じたＲＬＵへのアクセス処理を継続できる。データ復旧制御部１２による上記のサルベージ処理では、ホスト装置からの要求に応じたアクセス処理には使用されていない、故障中の記憶装置２１が再起動される。このため、ホスト装置からの要求に応じたアクセス処理に対して、サルベージ処理が与える影響が小さく、ホスト装置への応答速度が大きく低下しないようにすることができる。
【００２６】
〔第２の実施の形態〕
図２は、第２の実施の形態に係るストレージシステムの全体構成例を示す図である。
図２に示すストレージシステム１００は、ＣＥ（Controller Enclosure）２００と、ＤＥ（Drive Enclosure）３００とを含む。また、ＣＥ２００には、ホスト装置４００が接続されている。
【００２７】
ＣＥ２００は、ＣＭ（Controller Module）２０１，２０２を備える。ＣＭ２０１，２０２のそれぞれは、ホスト装置４００からのＩ／Ｏ（In/Out）要求に応じて、ＤＥ３００内の記憶装置に対するデータの読み書きを行う。ＣＭ２０１，２０２は、ＤＥ３００内の記憶装置によって実現される物理記憶領域をＲＡＩＤによって管理し、これらの物理記憶領域に対するアクセスを制御する。
【００２８】
なお、ＣＭ２０１，２０２は、例えばルータなどを介して互いに接続されていてもよい。また、ＣＭは、ＣＥ２００内に１つのみ設けられてもよいし、３つ以上設けられてもよい。ただし、ＣＭが複数設けられることで、ＤＥ３００に対するアクセス制御系統が冗長化され、アクセス制御処理の信頼性が向上する。
【００２９】
ＤＥ３００は、ＣＭ２０１，２０２からのアクセス制御対象となる複数の記憶装置を備える。本実施の形態において、ＤＥ３００は、記憶装置としてＨＤＤを備えるディスクアレイ装置である。なお、ＤＥ３００が備える記憶装置としては、ＳＳＤなどの他の種類の不揮発性記憶装置を使用することもできる。また、ＣＥ２００には、複数のＤＥ３００が接続されていてもよい。
【００３０】
ホスト装置４００は、ユーザの操作に応じて、ＣＭ２０１，２０２に対して、ＤＥ３００内のＨＤＤへのアクセスを要求する。ホスト装置４００は、例えば、ユーザの操作に応じて、ＣＭ２０１，２０２のいずれかを通じて、ＤＥ３００内のＨＤＤからのデータの読み出しや、ＤＥ３００内のＨＤＤに対するデータの書き込みを行うことができる。
【００３１】
なお、ＣＥ２００内のＣＭ２０１，２０２は、ともに同様の構成を有し、同様の処理を実行可能である。そこで、以下、ＣＭ２０１についてのみ説明し、ＣＭ２０２についての説明を省略する。
【００３２】
図３は、ＣＭのハードウェア構成例を示す図である。
ＣＭ２０１は、ＣＰＵ２１１によって装置全体が制御されている。ＣＰＵ２１１には、ＲＡＭ（Random Access Memory）２１２および複数の周辺機器が、バス２１７を介して接続されている。ＲＡＭ２１２は、ＣＭ２０１の主記憶装置として使用され、ＣＰＵ２１１に実行させるプログラムの少なくとも一部や、このプログラムによる処理に必要な各種データを一時的に記憶する。
【００３３】
ＣＰＵ２１１には、周辺機器の例として、ＳＳＤ２１３、入力Ｉ／Ｆ（インタフェース）２１４、ＣＡ（Channel Adapter）２１５およびＤＩ（Drive Interface）２１６が接続されている。
【００３４】
ＳＳＤ２１３は、ＣＭ２０１の二次記憶装置として使用され、ＣＰＵ２１１によって実行されるプログラムやその実行に必要な各種のデータなどを記憶する。なお、二次記憶装置としては、例えば、ＨＤＤなどの他の種類の不揮発性記憶装置が使用されてもよい。
【００３５】
入力Ｉ／Ｆ２１４には、操作キーなどを備える入力装置２１４ａが接続されている。入力Ｉ／Ｆ２１４は、入力装置２１４ａに対する操作入力に応じた信号をＣＰＵ２１１に出力する。
【００３６】
ＣＡ２１５は、ホスト装置４００とＣＭ２０１との間でデータを送受信するインタフェース処理を実行する。ＣＡ２１５とホスト装置４００とは、例えば、ＦＣ（Fibre Channel）規格に従って通信する。
【００３７】
ＤＩ２１６は、ＤＥ３００とＣＭ２０１との間でデータを送受信するインタフェース処理を実行する。ＤＩ２１６とＤＥ３００とは、例えば、ＳＡＳ（Serial Attached SCSI，SCSI：Small Computer System Interface）規格に従って通信する。
【００３８】
図４は、ＣＭの処理機能の構成例を示すブロック図である。
ＣＭ２０１は、アクセス制御部２２０、リビルド制御部２３０およびサルベージ制御部２４０を備える。アクセス制御部２２０、リビルド制御部２３０およびサルベージ制御部２４０の処理は、例えば、ＣＭ２０１のＣＰＵ２１１が所定のプログラムを実行することで実現される。
【００３９】
また、ＣＭ２０１の記憶装置には、ＲＡＩＤ管理テーブル２５０、バッドデータ（Bad Data）管理テーブル２６０、非冗長ライト管理テーブル２７０およびサルベージ管理テーブル２８０が記憶される。これらの各テーブルは、例えばＳＳＤ２１３に記憶される。
【００４０】
アクセス制御部２２０は、ホスト装置４００からのＩ／Ｏ要求に応じて、ＤＥ３００内のＨＤＤにアクセスする。アクセス制御部２２０は、例えば、ホスト装置４００からデータの読み出し要求を受けたとき、要求されたデータをＤＥ３００内の所定のＨＤＤから読み出して、ホスト装置４００に送信する。一方、アクセス制御部２２０は、ホスト装置４００からデータの書き込み要求を受けたとき、ホスト装置４００から受信した書き込み対象のデータを、ＤＥ３００内の所定のＨＤＤに書き込む。
【００４１】
なお、以下の説明では、アクセス制御部２２０がホスト装置４００からの読み出し要求に応じてＨＤＤからデータを読み出すことを「ホストリードする」と呼ぶ。また、アクセス制御部２２０がホスト装置４００からの書き込み要求に応じてＨＤＤにデータを書き込むことを「ホストライトする」と呼ぶ。
【００４２】
また、アクセス制御部２２０は、ＲＡＩＤ管理テーブル２５０に設定された情報に基づいて、ＤＥ３００内のＨＤＤに記録するデータをＲＡＩＤによって管理する。アクセス制御部２２０は、ＲＬＵ（RAID Logical Unit）ごとに記録データを所定のＲＡＩＤレベルによって管理する。ＲＬＵは、ＤＥ３００に搭載された複数のＨＤＤの物理記憶領域を組み合わせて構成される論理記憶領域であり、ＲＡＩＤグループとも呼ばれる。
【００４３】
ＲＡＩＤ管理テーブル２５０は、ＲＬＵごとに、ＲＬＵの識別番号、適用されるＲＡＩＤレベル、ＲＬＵに属するＨＤＤや論理ボリュームを示す情報、ＲＬＵの制御状態を示す情報などを保持する。アクセス制御部２２０は、ＲＡＩＤ管理テーブル２５０を参照することで、例えば、ホストライトする際の書き込み先のＨＤＤや、その書き込みの際に用いるＲＡＩＤレベルなどを判定する。なお、本実施の形態では、アクセス制御部２２０は、各ＲＬＵをデータが２重に冗長化されるＲＡＩＤレベルで管理する。データが２重に冗長化されるＲＡＩＤレベルとしては、例えば、ＲＡＩＤ−１，ＲＡＩＤ−４，ＲＡＩＤ−５がある。
【００４４】
また、アクセス制御部２２０は、ＲＬＵに属するＨＤＤのうちの１つが故障して、そのＲＬＵに記録されたデータの冗長性が失われてから、ホットスペアのＨＤＤに対するリビルド処理を開始するための準備が整うまでの期間に、そのＲＬＵに対するホストライトを行ったとき、データの書き込み先の位置情報を非冗長ライト管理テーブル２７０に登録する。
【００４５】
リビルド制御部２３０は、ＲＬＵに属するＨＤＤのうちの１つが故障したとき、故障したＨＤＤに記録されていたデータをホットスペアのＨＤＤに書き込む「リビルド処理」を実行する。リビルド制御部２３０は、リビルド処理の実行の際、ＲＡＩＤ管理テーブル２５０を参照することで、故障したＨＤＤに記録されていたデータをどのように生成するかを決定する。
【００４６】
また、リビルド制御部２３０は、リビルド処理の実行中に、ＲＬＵに属するＨＤＤのうち故障したＨＤＤ以外のＨＤＤからのデータの読み出しに失敗すると、読み出しに失敗したデータの位置情報をバッドデータ管理テーブル２６０およびサルベージ管理テーブル２８０に登録するとともに、サルベージ制御部２４０に、読み出しに失敗したデータのサルベージを要求する。なお、アクセス制御部２２０は、バッドデータ管理テーブル２６０に登録された位置のデータについての読み出し要求をホスト装置４００から受けたとき、ホスト装置４００に対してエラー応答する。
【００４７】
サルベージ制御部２４０は、リビルド制御部２３０によるリビルド処理において読み出しに失敗したデータをサルベージする。サルベージ管理テーブル２８０には、サルベージ処理の対象とされたデータ（すなわち、リビルド処理において読み出しに失敗したデータ）についての位置情報が登録されている。サルベージ制御部２４０は、サルベージ管理テーブル２８０に登録された位置情報に対応するデータについて順にサルベージ処理を実行することで、リビルド処理に対して非同期でサルベージ処理を実行できる。また、サルベージ制御部２４０は、非冗長ライト管理テーブル２７０などを参照しながら、後述するいくつかの処理パターンに従ってデータのサルベージを試みる。
【００４８】
図５は、ＲＡＩＤ管理テーブルに登録される情報の例を示す図である。
ＲＡＩＤ管理テーブル２５０には、ＲＬＵごとにレコード２５１が登録される。各レコード２５１には、対応するＲＬＵを識別するＲＬＵ番号が付与されている。以下の説明では、ｘｘ番のＲＬＵ番号を「ＲＬＵ＃ｘｘ」と表記し、ＲＬＵ番号が「ＲＬＵ＃ｘｘ」であるＲＬＵを、単に「ＲＬＵ＃ｘｘ」と呼ぶ。
【００４９】
各レコード２５１には、「ＲＡＩＤレベル」、「ディスク番号」、「論理ユニット番号」、「ＨＳディスク番号」および「ＲＡＩＤ状態」が登録される。
「ＲＡＩＤレベル」は、対応するＲＬＵの通常運用時におけるＲＡＩＤレベルを示す。本実施の形態では、「ＲＡＩＤレベル」には、ＲＡＩＤ−１，ＲＡＩＤ−４，ＲＡＩＤ−５のいずれかが設定される。
【００５０】
「ディスク番号」は、対応するＲＬＵを構成する物理記憶領域が属するＨＤＤの識別番号を示す。ＲＬＵは、複数のＨＤＤの物理記憶領域によって構成されるので、「ディスク番号」は、それらの複数のＨＤＤのそれぞれについて登録される。なお、以下の説明では、ｘｘ番のディスク番号を「ＤＩＳＫ＃ｘｘ」と表記し、ディスク番号が「ＤＩＳＫ＃ｘｘ」であるＨＤＤを、単に「ＤＩＳＫ＃ｘｘ」と呼ぶ。
【００５１】
また、「ディスク番号」によって識別されるＨＤＤのそれぞれには、「ディスク状態」が登録される。「ディスク状態」は、対応するＨＤＤの動作状態を示す。「ディスク状態」には、例えば、「正常」、「故障」および「ＨＳに退避中」のいずれかが設定される。「正常」は、対応するＨＤＤが正常に動作していることを示し、「故障」は、対応するＨＤＤが故障していることを示す。「ＨＳに退避中」は、対応するＨＤＤに記録されていたデータについてのホットスペアのＨＤＤへのリビルド処理が完了し、そのホットスペアのＨＤＤを組み込んでＲＬＵが運用されていることを示す。
【００５２】
「論理ユニット番号」は、対応するＲＬＵに設定された、論理ユニット（または論理ボリューム）と呼ばれる論理記憶領域の識別番号を示す。１つのＲＬＵには複数の論理ユニットを設定可能であり、「論理ユニット番号」は、設定された論理ユニットごとに登録される。なお、以下の説明では、論理ユニット番号を「ＬＵＮ」と省略して呼ぶ。また、ｘｘ番の論理ユニットを「ＬＵＮ＃ｘｘ」と表記し、論理ユニット番号が「ＬＵＮ＃ｘｘ」である論理ユニットを、単に「ＬＵＮ＃ｘｘ」と呼ぶ。
【００５３】
また、「論理ユニット番号」によって識別される論理ユニットのそれぞれには、「論理領域情報」および「物理領域情報」が登録される。「論理領域情報」には、論理ユニットに付与された論理アドレス（ＬＢＡ：Logical Block Address）の範囲が登録される。「物理領域情報」には、論理ユニットに対して割り当てられた、各ＨＤＤにおける物理アドレスの範囲が登録される。
【００５４】
なお、ＣＭ２０１は、アクセス先とするデータのＬＵＮおよびＬＢＡが指定されると、ＬＵＮが示す論理ユニットが属するＲＬＵのＲＡＩＤレベルと、その論理ユニットに割り当てられたＨＤＤの物理領域情報とから、データのアクセス先とするＨＤＤやＨＤＤ内のブロックの位置（ストライプ番号など）を特定することができる。
【００５５】
「ＨＳディスク番号」は、リビルド処理中のみ設定され、リビルド先とされているホットスペアのＨＤＤを識別する番号を示す。
「ＲＡＩＤ状態」は、対応するＲＬＵの状態を示す。「ＲＡＩＤ状態」には、例えば、「通常運用状態」、「非冗長状態」、「リビルド中」および「ＨＳに退避中」のいずれかが設定される。
【００５６】
「通常運用状態」は、ＲＬＵに属するいずれのＨＤＤにも異常がなく、データの冗長性を有する状態でＲＬＵが正常に運用されていることを示す。「非冗長状態」は、ＲＬＵに属するいずれか１つのＨＤＤが故障し、データの冗長性がない状態を示す。ただし、データの冗長性がない状態でも、「ＨＳディスク番号」にホットスペアのＨＤＤの識別番号が登録されて、リビルド処理の準備が整ってから、リビルド処理が完了するまでの間、「ＲＡＩＤ状態」には「リビルド中」が設定される。「ＨＳに退避中」は、ホットスペアのＨＤＤへのリビルド処理が完了し、そのホットスペアのＨＤＤを組み込んでＲＬＵが運用されている状態を示す。
【００５７】
図６は、バッドデータ管理テーブルに登録される情報の例を示す図である。
バッドデータ管理テーブル２６０には、リビルド制御部２３０またはサルベージ制御部２４０によってデータの読み出しが不可能と判定された、論理ユニット内のデータの位置情報が、論理ユニットの番号（ＬＵＮ）と論理アドレス（ＬＢＡ）との組み合わせとして登録される。
【００５８】
本実施の形態では、リビルド処理中にデータの読み出しに失敗すると、読み出しに失敗したデータに対応するＬＵＮおよびＬＢＡが、リビルド制御部２３０によってバッドデータ管理テーブル２６０に登録される。また、バッドデータ管理テーブル２６０に登録されたデータについてのサルベージ処理が成功した場合には、そのデータに対応する位置情報はバッドデータ管理テーブル２６０から消去される。一方、サルベージ処理が不可能であった場合、そのデータについての位置情報はバッドデータ管理テーブル２６０に登録されたままになる。
【００５９】
なお、バッドデータ管理テーブル２６０のデータ構造は、図６の例に限らず、例えば、ＬＵＮごとの全ＬＢＡに対して、読み出し失敗が発生したか否かを示すフラグ情報が対応付けられた構造であってもよい。また、バッドデータ管理テーブル２６０には、位置情報として、ＬＵＮおよびＬＢＡの代わりに、例えば、ＨＤＤのディスク番号およびＨＤＤにおける物理アドレスが登録されてもよい。
【００６０】
図７は、非冗長ライト管理テーブルに登録される情報の例を示す図である。
非冗長ライト管理テーブル２７０には、ＲＬＵのＲＡＩＤ状態が「非冗長状態」であるときに、そのＲＬＵに属する論理ユニットに対してホストライトが実行されたとき、書き込み先の位置を示す情報が、ＬＵＮとＬＢＡとの組み合わせとして登録される。
【００６１】
なお、非冗長ライト管理テーブル２７０のデータ構造は、図７の例に限らず、例えば、論理ユニットごとの全ＬＢＡに対して、「非冗長状態」におけるホストライトが実行されたか否かを示すフラグ情報が対応付けられた構造であってもよい。また、非冗長ライト管理テーブル２７０には、位置情報として、ＬＵＮおよびＬＢＡの代わりに、例えば、ＨＤＤのディスク番号およびＨＤＤにおける物理アドレスが登録されてもよい。
【００６２】
図８は、サルベージ管理テーブルに登録される情報の例を示す図である。
サルベージ管理テーブル２８０は、サルベージ処理の対象とするデータを示す情報を一時的に保持することで、サルベージ制御部２４０がサルベージ処理をリビルド処理とは非同期に実行できるようにするものである。サルベージ管理テーブル２８０には、サルベージ処理の対象とするデータ（すなわち、リビルド処理時に読み出しに失敗したデータ）を示す位置情報が、論理ユニットの番号（ＬＵＮ）、論理アドレス（ＬＢＡ）およびディスク番号の組み合わせとして登録される。
【００６３】
なお、サルベージ管理テーブル２８０には、ＬＵＮおよびＬＢＡの代わりに、ディスク番号が示すＨＤＤにおける物理アドレスが登録されてもよい。また、サルベージ処理に対象とするデータが通常時にＲＡＩＤ−１で管理されているデータである場合、サルベージ管理テーブル２８０には、ディスク番号のようなＨＤＤを識別する情報が登録されなくてもよい。なぜなら、ＲＡＩＤ−１で管理されている場合、サルベージ制御部２４０は、データの読み出しに失敗したＨＤＤが、ＲＬＵに属する２台のＨＤＤのうち故障していないＨＤＤであることを、容易に判別可能であるからである。
【００６４】
図９は、ＨＤＤにおけるデータ記録フォーマットの例を示す図である。
ＤＥ３００内の各ＨＤＤに記録されるデータは、一定長のブロックに分割される。また、各ＨＤＤにおいては、ブロックが格納されるブロック領域に対してＢＣＣ（Block Check Code）が付与されている。通常、ＢＣＣには誤り検出コードが記録され、ブロックが読み出されるとき、そのブロックに対応するＢＣＣを基に、読み出されるブロックの整合性がチェックされる。また、ＢＣＣには、対応するブロック領域の属性を示す情報を記録しておくこともできる。例えば、リビルド先となるホットスペアのＨＤＤにおいては、リビルド処理中にブロック領域に書き込むべきデータを生成できなかった場合、そのブロック領域に対応するＢＣＣに、「バッドデータ」を示す情報が書き込まれる。
【００６５】
次に、サルベージ処理について説明する。まず、図１０は、サルベージ処理が起動される状態の例を示す図である。この図１０では例として、ＲＡＩＤ−１の場合について説明する。
【００６６】
図１０の「状態１」において、ＲＬＵ＃００は、ＤＩＳＫ＃００，＃０１の各記憶領域によって構成され、これらの記憶領域がＲＡＩＤ−１で管理されている。この状態で、ＤＩＳＫ＃０１の故障が発生すると（ステップＳ１１）、リビルド制御部２３０は、ＤＩＳＫ＃０１に記録されていたＲＬＵ＃００のデータをホットスペアのＤＩＳＫ＃１０に格納するリビルド処理を実行する（ステップＳ１２）。ＲＬＵ＃００にはＲＡＩＤ−１が設定されているので、リビルド処理では、ＤＩＳＫ＃００に記録されているＲＬＵ＃００のデータがそのまま読み出されて、ホットスペアのＤＩＳＫ＃１０にコピーされる。
【００６７】
ここで、リビルド処理が正常に完了すると、ＤＩＳＫ＃０１に記録されていたＲＬＵ＃００のデータがホットスペアのＤＩＳＫ＃１０に完全に復元される。このとき、故障したＤＩＳＫ＃０１の代わりにホットスペアのＤＩＳＫ＃１０がＲＬＵ＃００に組み込まれることで、アクセス制御部２２０は、ＲＬＵ＃００におけるデータの冗長性が完全に回復した状態で、ホストリードやホストライトを続行できる。
【００６８】
しかしながら、図１０の「状態２」のように、リビルド処理の実行中に、リビルド制御部２３０がＤＩＳＫ＃００中のあるブロックからのデータ読み出しに失敗すると（ステップＳ１３）、読み出しに失敗したデータをホットスペアのＤＩＳＫ＃１０にコピーすることができなくなり、このデータを失ってしまう。これに対して、サルベージ制御部２４０は、読み出しに失敗したデータのサルベージ処理を行い、ホットスペアのＤＩＳＫ＃１０における対応する位置にリビルドデータが格納されるようにする。
【００６９】
具体的には、リビルド制御部２３０は、リビルド処理中にＤＩＳＫ＃００からのデータ読み出しに失敗すると、読み出しに失敗したデータの位置情報をサルベージ管理テーブル２８０に登録する（ステップＳ１４）。サルベージ制御部２４０は、サルベージ管理テーブル２８０に登録された位置情報が示すデータについてのサルベージ処理を実行する。
【００７０】
また、リビルド制御部２３０は、読み出しに失敗したデータの位置情報をバッドデータ管理テーブル２６０にも登録する（ステップＳ１５）。アクセス制御部２２０は、バッドデータ管理テーブル２６０に登録された位置情報に対応するデータに対する読み出し要求を、ホスト装置４００から受信したとき、ホスト装置４００に対してエラー応答する。これにより、アクセス制御部２２０による、データの読み出しに失敗したデータへの無駄なアクセスの発生が防止される。
【００７１】
なお、この時点では、バッドデータ管理テーブル２６０に対して位置情報が登録されなくてもよい。例えば、読み出しに失敗したデータについてのサルベージが不可能であったときに、サルベージ制御部２４０によってバッドデータ管理テーブル２６０に位置情報が登録されてもよい。
【００７２】
なお、上記のステップＳ１４，Ｓ１５の処理順は、逆であってもよいし、あるいは並列に実行されてもよい。
ところで、前述のように、リビルド処理とは、故障したＨＤＤに記録されていたデータを、リビルド先のＨＤＤ（本実施の形態ではホットスペアのＨＤＤ）に格納することである。図１０の例のように、ＲＡＩＤ−１のＲＬＵにおけるリビルド処理では、故障していないＨＤＤから読み出されたデータが、そのままリビルド先のＨＤＤにコピーされる。
【００７３】
サルベージ処理とは、本来、リビルド処理時に読み出しの失敗が発生した場合でも、何らかの方法により、故障したＨＤＤに記録されていたデータがリビルド先のＨＤＤに格納された状態にすることである。しかしながら、ＲＡＩＤ−１のＲＬＵにおけるサルベージ処理は、読み出しに失敗したデータと同じデータが、リビルド先のＨＤＤに格納された状態にすることと同等である。
【００７４】
これに対して、ＲＡＩＤ−４，５のＲＬＵにおけるリビルド処理では、故障したＨＤＤに記録されていたデータは、故障していない他のＨＤＤから読み出したデータを基に計算によってリビルドされる。このため、ＲＡＩＤ−４，５のＲＬＵにおけるサルベージ処理は、ＲＡＩＤ−１の場合とは異なり、読み出しに失敗したデータと同じデータがリビルド先のＨＤＤに格納された状態にすることとは同等でない。
【００７５】
そこで、以下の説明では、主としてＲＡＩＤ−１のＲＬＵにおけるサルベージ処理の手順について説明し、必要に応じて、ＲＡＩＤ−４，５のＲＬＵにおけるサルベージ処理の手順についても補足説明する。なお、ＲＡＩＤ−４，５の場合について補足説明する場合には、ＲＬＵがＤＩＳＫ＃００〜＃０４の記憶領域によって構成されるものとする。
【００７６】
サルベージ制御部２４０は、次のサルベージ方法（１）〜（３）を利用してサルベージ処理を実行する。
サルベージ方法（１）：ホットスペアのＨＤＤに記録されたデータを基にサルベージする。
【００７７】
サルベージ方法（２）：故障したＨＤＤを再起動させ、少なくとも再起動したＨＤＤから読み出したデータを基にサルベージする。
サルベージ方法（３）：データの読み出しに失敗したＨＤＤを再起動させ、少なくとも再起動したＨＤＤから読み出したデータを基にサルベージする。
【００７８】
以下、上記のサルベージ方法（１）〜（３）について、詳細に説明する。
図１１は、サルベージ方法（１）の実行に必要な前処理を示す図である。
図１１の「状態１１」は、図１０の「状態１」と同様に、ＲＬＵ＃００を構成するＤＩＳＫ＃０１の故障が発生した場合を示す。このとき、リビルド制御部２３０は、リビルド先とするホットスペアのＨＤＤを選択するが、リビルド先とするホットスペアのＨＤＤの全記憶領域を、あらかじめＢＣＣエラー状態にしておく。ここで言うＢＣＣエラー状態とは、ブロックのデータを読み出したときに、そのブロックに対応するＢＣＣから読み出しエラーが検出されるように、ＢＣＣに何らかの値が設定されている状態である。ただし、ＢＣＣエラー状態では、ＢＣＣには、前述したバッドデータを示す情報以外の値が設定されることが望ましい。ＢＣＣエラー状態と、ＢＣＣがバッドデータを示す状態とを区別することで、ＢＣＣがバッドデータを示したとき、そのＢＣＣに対応するブロックのデータについてはサルベージが不可能であったことを明確に認識できるようになる。
【００７９】
ところで、アクセス制御部２２０は、ＤＩＳＫ＃０１が故障した後も、データの冗長性がない状態のままで、残りのＤＩＳＫ＃００を用いてＲＬＵ＃００に対するホストリードおよびホストライトを継続する。ただし、図１１の「状態１２」に示すように、リビルド先とするホットスペアのＤＩＳＫ＃１０の準備が整ってから（具体的には、ＲＡＩＤ管理テーブル２５０におけるＲＬＵ＃００に対応するレコード２５１内の「ＨＳディスク番号」にＤＩＳＫ＃１０が設定されてから）、リビルド処理が完了するまでの期間、アクセス制御部２２０は、ホスト装置４００から書き込み要求を受けたとき（ステップＳ２１）、ＤＩＳＫ＃００だけでなく、リビルド先のＤＩＳＫ＃１０に対してもホストライトを行う（ステップＳ２２，Ｓ２３）。
【００８０】
ＲＬＵ＃００がＲＡＩＤ−１の場合、「状態１２」では、ホスト装置４００から書き込み要求されたデータをＤＩＳＫ＃００に書き込む（ステップＳ２２）とともに、同じデータを、ホットスペアのＤＩＳＫ＃１０における対応するブロックにも書き込む（ステップＳ２３）。ホットスペアのＤＩＳＫ＃１０では、データが書き込まれたブロックに対応するＢＣＣに誤り検出コードが上書きされ、このブロックは正常に読み出し可能な状態になる。これにより、もしＤＩＳＫ＃１０におけるホストライトされたブロックについて、リビルド処理が実行されていない場合でも、そのブロックには最新の書き込みデータが格納されていることになる。
【００８１】
ここで、ＲＬＵ＃００がＲＡＩＤ−４，５のいずれかの場合について補足説明する。ＲＡＩＤ−４，５のいずれかで運用されるＲＬＵがＤＩＳＫ＃００〜＃０４の各記憶領域によって構成されている場合、通常運用時のホストライトは次のように行われる。アクセス制御部２２０は、書き込みを要求されたデータを一定長に分割する。アクセス制御部２２０は、例えば、連続する分割データＤ０〜Ｄ３を基にパリティＰ０を計算する。ＲＡＩＤ−４の場合、アクセス制御部２２０は、分割データＤ０〜Ｄ３およびパリティＰ０を、それぞれあらかじめ決められたＨＤＤに書き込む。一方、ＲＡＩＤ−５の場合、アクセス制御部２２０は、分割データＤ０〜Ｄ３およびパリティＰ０を、ＤＩＳＫ＃００〜＃０４に分散させて書き込む。
【００８２】
例えばＤＩＳＫ＃０４が故障した状態で、新たな分割データＤ０〜Ｄ３の書き込みが要求された場合、図１１の「状態１２」に示す前処理は次のように行われる。例えば、ＤＩＳＫ＃０４に書き込むべきデータが分割データＤ３である場合、アクセス制御部２２０は、他のＤＩＳＫ＃００〜＃０３に、分割データＤ０〜Ｄ２、および、これらの分割データに基づくパリティＰ０を書き込む（ステップＳ２２）とともに、分割データＤ３をＤＩＳＫ＃１０に書き込む（ステップＳ２３）。また、例えば、ＤＩＳＫ＃０４に書き込むべきデータがパリティＰ０である場合、アクセス制御部２２０は、他のＤＩＳＫ＃００〜＃０３に、分割データＤ０〜Ｄ３を書き込む（ステップＳ２２）とともに、分割データＤ０〜Ｄ３に基づくパリティＰ０を計算して、算出したパリティＰ０をＤＩＳＫ＃１０に書き込む（ステップＳ２３）。
【００８３】
ただし、分割データＤ０〜Ｄ３のうち例えば分割データＤ３のみが更新される場合には、分割データＤ０〜Ｄ２が記録されたＨＤＤに対しては書き込みが行われない。従ってこの場合、故障したＤＩＳＫ＃０４に対する書き込みが必ず行われる訳ではなく、ＤＩＳＫ＃０４に分割データＤ３またはパリティＰ０が書き込まれる場合のみ、ＤＩＳＫ＃１０に分割データＤ３またはパリティＰ０が書き込まれることになる。
【００８４】
すなわち、ＲＡＩＤ−１，４，５のいずれの場合でも、図１１の「状態１２」に示す前処理では、アクセス制御部２２０は、ホスト装置４００から書き込みが要求されたとき、故障したＨＤＤに書き込むべきデータがある場合には、そのデータをホットスペアのＨＤＤに書き込む。
【００８５】
図１２は、サルベージ方法（１）の手順を示す図である。
リビルド制御部２３０は、ＤＩＳＫ＃０１に記録されたデータについてのリビルド処理の際、図１１の「状態１２」のような、ホスト装置４００からの要求に応じた書き込みがあったか否かに関係なく、ＤＩＳＫ＃００内の読み出し対象領域の全域からのデータ読み出しを行う。図１２の「状態１３」に示すように、リビルド制御部２３０による、ＤＩＳＫ＃０１に記録されたデータについてのリビルド処理が実行されているときに、ＤＩＳＫ＃００上のあるブロックからのデータ読み出しに失敗したとする（ステップＳ２４）。この場合、サルベージ制御部２４０は、読み出しに失敗したブロックに対応する、ホットスペアのＤＩＳＫ＃１０のブロックに、データが書き込まれているかを判定する。この判定処理は、ＤＩＳＫ＃１０の対応するブロックからのデータ読み出しに成功するか否かによって行われる（ステップＳ２５）。ＤＩＳＫ＃１０のブロックからのデータ読み出しに成功した場合、そのブロックにはホストライトによる最新のデータがすでに格納されていることになるので、サルベージ制御部２４０は、データのサルベージに成功したと判断する。一方、ＤＩＳＫ＃１０のブロックからのデータ読み出し時にＢＣＣエラーが検出された場合、サルベージ制御部２４０は、データのサルベージに失敗したと判断する。この場合、サルベージ制御部２４０は、他のサルベージ方法を試みる。
【００８６】
なお、以上の図１２に示したサルベージ方法（１）の手順は、ＲＬＵ＃００がＲＡＩＤ−４，５のいずれかの場合でも同様である。すなわち、サルベージ制御部２４０は、ホットスペアのＤＩＳＫ＃１０における対応するブロック（読み出しに失敗したブロックと同じストライプ番号のブロック）からのデータ読み出しに成功した場合、データのサルベージに成功したと判断する。
【００８７】
次に、図１３は、サルベージ方法（２），（３）の実行に必要な前処理を示す図である。
図１３の「状態２１」は、図１０の「状態１」と同様に、ＲＬＵ＃００を構成するＤＩＳＫ＃０１の故障が発生した場合を示す。ただし、「状態２１」は、ＤＩＳＫ＃０１が故障してから、リビルド先とするホットスペアのＤＩＳＫ＃１０の準備が整うまで（具体的には、ＲＡＩＤ管理テーブル２５０におけるＲＬＵ＃００に対応するレコード２５１内の「ＨＳディスク番号」にＤＩＳＫ＃１０が設定されるまで）の状態を示す。この「状態２１」では、アクセス制御部２２０は、ＤＩＳＫ＃００のみを用いてＲＬＵ＃００に対するホストリードおよびホストライトを継続する。
【００８８】
サルベージ方法（２），（３）の前処理として、アクセス制御部２２０は、「状態２１」においてホスト装置４００からＲＬＵ＃００に対する書き込み要求を受けると（ステップＳ３１）、ＤＩＳＫ＃００の対応するブロックにデータを書き込む。これとともに、アクセス制御部２２０は、データの書き込み位置を示す位置情報（データを書き込んだブロックに対応するＬＵＮおよびＬＢＡ）を、非冗長ライト管理テーブル２７０に登録する（ステップＳ３２）。
【００８９】
「状態２１」においてホストライトが発生すると、書き込まれるデータは冗長性がない状態となる。従って、非冗長ライト管理テーブル２７０には、ＲＬＵ＃００に記録されたデータのうち冗長性のないデータの位置情報が登録されることになる。
【００９０】
なお、以上の「状態２１」に示した前処理の手順は、ＲＬＵ＃００がＲＡＩＤ−４，５のいずれかの場合でも同様であり、アクセス制御部２２０は、ホストライトした位置の情報を非冗長ライト管理テーブル２７０に登録する。
【００９１】
図１４は、サルベージ方法（２）の手順を示す図である。
図１４の「状態２２」は、図１３の「状態２１」から、ホットスペアのＤＩＳＫ＃１０に対するリビルド処理が開始された状態を示す。ＲＬＵ＃００がＲＡＩＤ−１の場合、リビルド制御部２３０は、ＤＩＳＫ＃００に記録されたＲＬＵ＃００のデータを読み出して、ＤＩＳＫ＃１０にコピーする。このようなリビルド処理中に、リビルド制御部２３０が、ＤＩＳＫ＃００からのデータ読み出しに失敗したものとする（ステップＳ３３）。
【００９２】
サルベージ制御部２４０は、ＤＩＳＫ＃０１が故障してから現在までの間に、ＤＩＳＫ＃００における読み出しに失敗したブロック、またはそのブロックに対応するＤＩＳＫ＃１０のブロックの少なくとも一方に対して、ホストライトが行われたかを判定する。具体的には、サルベージ制御部２４０は、前述のサルベージ方法（１）においてホットスペアのＤＩＳＫ＃１０における対応するブロックからのデータ読み出しに失敗し、かつ、非冗長ライト管理テーブル２７０に、読み出しに失敗したブロックに対応する位置に対してホストライトが行われたことが登録されていない場合に、ＤＩＳＫ＃００，＃１０の少なくとも一方における対応するブロックに対してＤＩＳＫ＃０１の故障から現在までにホストライトが行われていないと判定する（ステップＳ３４）。
【００９３】
ホストライトが行われていないと判定された場合、ＤＩＳＫ＃００からの読み出しに失敗したデータに対応する、ホットスペアのＤＩＳＫ＃１０にリビルドすべきデータは、故障したＤＩＳＫ＃０１にのみ存在する可能性が高い。このことから、サルベージ制御部２４０は、故障したＤＩＳＫ＃０１を再起動させ（ステップＳ３５）、再起動したＤＩＳＫ＃０１から、ＤＩＳＫ＃１０にリビルドするデータを読み出すことができるかを試す。
【００９４】
図１４の「状態２３」に示すように、サルベージ制御部２４０は、読み出しに失敗したＤＩＳＫ＃００のブロックに対応する、再起動したＤＩＳＫ＃０１のブロックから、データを読み出す。データの読み出しに成功した場合、サルベージ制御部２４０は、読み出したデータを、ホットスペアのＤＩＳＫ＃１０における同じストライプ番号に対応するブロックにコピーする。この場合、データのサルベージに成功したことになる（ステップＳ３６）。
【００９５】
なお、以上の図１４に示したサルベージ方法（２）の手順は、ＲＬＵ＃００がＲＡＩＤ−４，５のいずれかの場合でも同様である。すなわち、サルベージ制御部２４０は、再起動したＤＩＳＫ＃０１における対応するブロックからのデータの読み出しに成功すると、読み出したデータを、ホットスペアのＤＩＳＫ＃１０における同じストライプ番号のブロックにコピーする。
【００９６】
図１５は、サルベージ方法（３）の手順を示す図である。
図１３の「状態２１」からリビルド処理が開始され、リビルド処理中に、リビルド制御部２３０がＤＩＳＫ＃００からのデータ読み出しに失敗したものとする（ステップＳ４１）。サルベージ制御部２４０は、図１５の「状態３１」に示すように、非冗長ライト管理テーブル２７０に、読み出しに失敗したブロックに対応する位置に対してホストライトが行われたことが登録されているかを判定する。
【００９７】
非冗長ライト管理テーブル２７０にホストライトが行われたことが登録されていた場合、読み出しに失敗したデータに対応するＤＩＳＫ＃０１のブロックには、最新のデータが登録されていない。これとともに、読み出しに失敗したデータに対応するＤＩＳＫ＃１０のブロックには、データが記録されておらず、このブロックはＢＣＣエラー状態になっているはずである。このことから、サルベージ制御部２４０は、読み出しに失敗したものの、最新のデータが残っている可能性のあるＤＩＳＫ＃００を再起動させ（ステップＳ４３）、再起動したＤＩＳＫ＃００における読み出し失敗位置から、データの読み出しを再度試みる。例えば、リビルド処理におけるデータ読み出しの失敗要因が一時的なものである場合などに、再起動後のデータ読み出しに成功する可能性がある。
【００９８】
図１５の「状態３２」に示すように、サルベージ制御部２４０は、再起動したＤＩＳＫ＃００における読み出し失敗位置からのデータの読み出しに成功した場合、読み出したデータを基に、ＤＩＳＫ＃１０に記録すべきデータをサルベージする（ステップＳ４４）。ＲＡＩＤ−１の場合、サルベージ制御部２４０は、再起動したＤＩＳＫ＃００から読み出したデータを、ホットスペアのＤＩＳＫ＃１０における対応するブロックにコピーする。
【００９９】
なお、ＲＬＵ＃００がＲＡＩＤ−４，５のいずれかであり、ＲＬＵ＃００の記憶領域がＤＩＳＫ＃００〜ＤＩＳＫ＃０４で構成され、ＤＩＳＫ＃０４が故障し、ＤＩＳＫ＃００からのデータ読み出しに失敗したものとすると、「状態３２」のステップＳ４４では、次のような処理が実行される。サルベージ制御部２４０は、サルベージ管理テーブル２８０に登録された位置情報を基に、データの読み出しに失敗したＨＤＤを判別し、判別したＨＤＤ（ここではＤＩＳＫ＃００）を再起動させる。サルベージ制御部２４０は、再起動したＤＩＳＫ＃００から読み出したデータと、残りの故障していないＤＩＳＫ＃０１〜０３における同じストライプ番号に対応するブロックから読み出したデータとを基に、ホットスペアのＤＩＳＫ＃１０に格納すべきデータを生成する。
【０１００】
例えば、ＤＩＳＫ＃００から分割データＤ０の読み出しに失敗し、この分割データＤ０に対応するパリティＰ０が故障したＤＩＳＫ＃０４に記録されているとする。この場合、サルベージ制御部２４０は、再起動したＤＩＳＫ＃００から読み出した分割データＤ０と、残りの故障していないＤＩＳＫ＃０１〜０３から読み出した分割データＤ１〜Ｄ３とを基に、パリティＰ０を計算し、ホットスペアのＤＩＳＫ＃１０に格納する。
【０１０１】
また、例えば、ＤＩＳＫ＃００から分割データＤ０の読み出しに失敗し、故障したＤＩＳＫ＃０４に分割データＤ３が記録されているとする。この場合、サルベージ制御部２４０は、再起動したＤＩＳＫ＃００から読み出した分割データＤ０と、残りの故障していないＤＩＳＫ＃０１〜０３から読み出した分割データＤ１，Ｄ２およびパリティＰ０から、分割データＤ３を計算し、ホットスペアのＤＩＳＫ＃１０に格納する。
【０１０２】
次に、上記のサルベージ方法（１）〜（３）を用いたサルベージ処理について、フローチャートを用いて説明する。まず、図１６は、リビルド処理手順の例を示すフローチャートである。
【０１０３】
［ステップＳ１０１］アクセス制御部２２０は、ＤＥ３００内のＨＤＤが故障したことを検出すると、故障したＨＤＤのディスク番号と、そのＨＤＤが属するＲＬＵのＲＬＵ番号とを、リビルド制御部２３０に通知する。以下、ＲＬＵ＃００に属する１つのＨＤＤが故障したものとして、説明を続ける。
【０１０４】
アクセス制御部２２０からの通知を受けたリビルド制御部２３０は、ＲＡＩＤ管理テーブル２５０からＲＬＵ＃００のレコード２５１を抽出し、抽出したレコード２５１において、故障したＨＤＤのディスク番号に対応する「ディスク状態」を「故障」に更新するとともに、「ＲＡＩＤ状態」を「非冗長状態」に更新する。
【０１０５】
故障したＨＤＤのディスク番号に対応する「ディスク状態」が「故障」に更新されることで、故障したＨＤＤはＲＬＵ＃００から切り離される。なお、故障したＨＤＤは、ＲＬＵ＃００から切り離された時点で、電源オフにされてもよい。あるいは、故障したＨＤＤは、例えば、新たなＨＤＤに交換される直前に電源オフにされてもよい。
【０１０６】
［ステップＳ１０２］リビルド制御部２３０は、リビルド先とするホットスペアのＨＤＤを準備する。具体的には、リビルド制御部２３０は、リビルド先とするホットスペアのＨＤＤを選択し、選択したＨＤＤのディスク番号を、ＲＡＩＤ管理テーブル２５０におけるＲＬＵ＃００のレコード２５１の「ＨＳディスク番号」に登録する。さらに、リビルド制御部２３０は、ＲＬＵ＃００のレコード２５１の「ＲＡＩＤ状態」を「リビルド中」に更新する。これにより、ホットスペアのＨＤＤの準備が完了し、リビルド処理を開始できる状態となる。
【０１０７】
［ステップＳ１０３］リビルド制御部２３０は、ＲＬＵ＃００に属する論理ユニットからリビルド対象とするデータ領域を、所定数のＬＢＡ単位で選択する。リビルド制御部２３０は、選択したデータ領域に対応するデータのリビルドを実行する。
【０１０８】
ここで言う「データのリビルド」とは、ホットスペアのＨＤＤに対して格納するデータを生成することであり、以下、生成されたデータを「リビルドデータ」と呼ぶ。例えば、ＲＬＵ＃００が正常時にＲＡＩＤ−１で管理されている場合、リビルド制御部２３０は、ＲＬＵ＃００に属する故障していないＨＤＤから単にデータを読み出すことで、リビルドデータを生成する。一方、ＲＬＵ＃００が正常時にＲＡＩＤ−４，５のいずれかで管理されている場合、リビルド制御部２３０は、ＲＬＵ＃００に属する故障していないＨＤＤの同一ストライプ番号の位置からデータを読み出し、読み出しデータを基にした計算によってリビルドデータを生成する。
【０１０９】
［ステップＳ１０４］ステップＳ１０３でのリビルドデータの生成時に、故障していないＨＤＤからのデータ読み出しに成功した場合（Ｓ１０４：Ｎｏ）、リビルド制御部２３０は、ステップＳ１０５の処理を実行する。一方、故障していないＨＤＤからのデータ読み出しに失敗して、リビルドデータを生成できなかった場合（Ｓ１０４：Ｙｅｓ）、リビルド制御部２３０は、ステップＳ１０６の処理を実行する。
【０１１０】
［ステップＳ１０５］リビルド制御部２３０は、ステップＳ１０３で生成したリビルドデータを、ホットスペアのＨＤＤにおける対応する領域に格納する。
［ステップＳ１０６］リビルド制御部２３０は、ステップＳ１０３で選択したデータ領域を示すＬＵＮおよびＬＢＡと、ステップＳ１０４でデータ読み出しに失敗したＨＤＤのディスク番号とを、サルベージ管理テーブル２８０に登録する。また、リビルド制御部２３０は、ステップＳ１０３で選択したデータ領域を示すＬＵＮおよびＬＢＡを、バッドデータ管理テーブル２６０に登録する。なお、サルベージ管理テーブル２８０およびバッドデータ管理テーブル２６０のどちらに対して先に情報を登録するかは、特に限定されるものではない。
【０１１１】
［ステップＳ１０７］リビルド制御部２３０は、ＲＬＵ＃００に属する全論理ユニットの全データ領域についてリビルド処理を完了したかを判定する。全データ領域のリビルド処理を完了していない場合（Ｓ１０７：Ｎｏ）、リビルド制御部２３０は、ステップＳ１０３の処理に戻り、次のデータ領域についてのリビルド処理を実行する。一方、全データ領域のリビルド処理を完了した場合（Ｓ１０７：Ｙｅｓ）、リビルド制御部２３０は、ステップＳ１０８の処理を実行する。
【０１１２】
［ステップＳ１０８］リビルド制御部２３０は、ＲＬＵ＃００についてのサルベージ制御部２４０によるサルベージ処理が完了したかを判定する。ここでは、リビルド制御部２３０は、サルベージ管理テーブル２８０にＲＬＵ＃００に属する位置情報が登録されていない場合に、ＲＬＵ＃００についてのサルベージ処理が完了したと判定する。なお、ＲＬＵ＃００のリビルド処理時にデータの読み出しに失敗しなかった場合（すなわち、ステップＳ１０４で「Ｎｏ」と判定された場合）、サルベージ管理テーブル２８０には、ＲＬＵ＃００に属する位置情報は登録されない。
【０１１３】
ＲＬＵ＃００についてのサルベージ処理が完了したと判定する（Ｓ１０８：Ｙｅｓ）と、リビルド制御部２３０は、ＲＡＩＤ管理テーブル２５０のＲＬＵ＃００のレコード２５１において、故障したＨＤＤに対応する「ディスク状態」を「ＨＳに退避中」に更新するとともに、「ＲＡＩＤ状態」を「ＨＳに退避中」に更新する。これにより、リビルド処理が完了する。
【０１１４】
次に、図１７は、アクセス制御部によるＩ／Ｏ処理手順の例を示すフローチャートである。この図１７は、Ｉ／Ｏ処理対象のＲＬＵ＃００に属する１つのＨＤＤが故障してから、ＲＬＵ＃００のリビルド処理が完了するまでの期間におけるＩ／Ｏ処理を示す。この期間とは、ＲＡＩＤ管理テーブル２５０のＲＬＵ＃００のレコード２５１において、故障したＨＤＤに対応する「ディスク状態」に「故障」が設定され、かつ、「ＲＡＩＤ状態」が「非冗長状態」または「リビルド中」が設定されている期間である。
【０１１５】
［ステップＳ１２１］アクセス制御部２２０は、ホスト装置４００から、ＲＬＵ＃００に対するＩ／Ｏ要求を受信する。
［ステップＳ１２２］Ｉ／Ｏ要求が読み出し要求である場合（Ｓ１２２：Ｙｅｓ）、ステップＳ１２３の処理が実行される一方、Ｉ／Ｏ要求が書き込み要求である場合（Ｓ１２２：Ｎｏ）、ステップＳ１２６の処理が実行される。
【０１１６】
［ステップＳ１２３］ホスト装置４００から読み出し要求を受信した場合（Ｓ１２２：Ｙｅｓ）、アクセス制御部２２０は、読み出し要求先のデータ領域の位置情報がバッドデータ管理テーブル２６０に登録されているかを判定する。アクセス制御部２２０は、対応する位置情報がバッドデータ管理テーブル２６０に登録されていなかった場合（Ｓ１２３：Ｎｏ）、ステップＳ１２４の処理を実行する。一方、アクセス制御部２２０は、対応する位置情報がバッドデータ管理テーブル２６０に登録されていた場合（Ｓ１２３：Ｙｅｓ）、ステップＳ１２５の処理を実行する。
【０１１７】
［ステップＳ１２４］アクセス制御部２２０は、読み出しを要求されたデータをＨＤＤから読み出して、ホスト装置４００に返信する。すなわち、アクセス制御部２２０は、ホスト装置４００に対して正常応答する。
【０１１８】
［ステップＳ１２５］アクセス制御部２２０は、ホスト装置４００に対して、要求されたデータを正常に読み出すことができなかったとして、エラー応答する。
なお、ホスト装置４００から読み出し要求を受信した場合（Ｓ１２２：Ｙｅｓ）、アクセス制御部２２０は、バッドデータ管理テーブル２６０を参照せずにデータの読み出しを実行してもよい。この場合、アクセス制御部２２０は、読み出しに成功した場合にはステップＳ１２４を実行する一方、読み出しに失敗した場合にはステップＳ１２５を実行する。ただし、読み出し対象のデータの位置情報がバッドデータ管理テーブル２６０に登録されている場合、そのデータの読み出しを正常に実行できない可能性が高い。このため、バッドデータ管理テーブル２６０を参照することで、アクセス制御部２２０による無駄なデータアクセスの実行を防止できる。
【０１１９】
［ステップＳ１２６］ホスト装置４００から書き込み要求を受信した場合（Ｓ１２２：Ｎｏ）、アクセス制御部２２０は、リビルド先とするホットスペアのＨＤＤの準備が完了しているかを判定する。具体的には、アクセス制御部２２０は、ＲＡＩＤ管理テーブル２５０のＲＬＵ＃００のレコード２５１において、「ＨＳディスク番号」にホットスペアのＨＤＤのディスク番号が設定されており、かつ、「ＲＡＩＤ状態」に「リビルド中」が設定されている場合に、ホットスペアのＨＤＤの準備が完了していると判定する。
【０１２０】
ホットスペアのＨＤＤの準備が完了している場合（Ｓ１２６：Ｙｅｓ）、アクセス制御部２２０は、ステップＳ１２７の処理を実行する。一方、ホットスペアのＨＤＤの準備が完了していない場合（Ｓ１２６：Ｎｏ）、アクセス制御部２２０は、ステップＳ１２８の処理を実行する。
【０１２１】
［ステップＳ１２７］アクセス制御部２２０は、ＲＬＵ＃００に属する故障していない所定のＨＤＤに対して、書き込み処理を行う。また、アクセス制御部２２０は、故障したＨＤＤに書き込むべきデータがある場合には、そのデータをホットスペアのＨＤＤに書き込む。
【０１２２】
このステップＳ１２７で実行される書き込み処理の内容は、図１１の「状態１２」で説明した通りである。ホットスペアのＨＤＤに書き込みが行われた場合、書き込みが行われたブロックに対応するＢＣＣには、ブロックに書き込まれたデータに基づく誤り検出コードが上書きされる。これにより、ブロックに書き込まれたデータが正常に読み出し可能な状態になるとともに、そのブロックに対応するＬＢＡに対してリビルド処理中にホストライトがあったことを、サルベージ制御部２４０がサルベージ処理中に認識できるようになる。
【０１２３】
なお、例えば、このステップＳ１２７において、故障していないＨＤＤに対するデータの書き込みが正常に行われなかったとしても、書き込みできなかったデータのサルベージを可能にするデータがホットスペアのＨＤＤに書き込まれる。このため、後のリビルド処理時に、書き込みできなかった位置からのデータ読み出しに失敗した場合でも、サルベージ制御部２４０は、少なくともホットスペアのＨＤＤに書き込まれたデータを基に、読み出しに失敗したデータをサルベージすることができる。
【０１２４】
［ステップＳ１２８］アクセス制御部２２０は、ＲＬＵ＃００に属する故障していない所定のＨＤＤに対して、書き込み処理を行う。
［ステップＳ１２９］アクセス制御部２２０は、データの書き込み位置を示す位置情報（データを書き込んだブロックに対応するＬＵＮおよびＬＢＡ）を、非冗長ライト管理テーブル２７０に登録する。
【０１２５】
なお、ステップＳ１２８，Ｓ１２９の処理の内容は、図１３の「状態２１」で説明した通りである。ステップＳ１２９の処理により、非冗長ライト管理テーブル２７０には、ＲＬＵ＃００に記録されたデータのうち冗長性のないデータの位置情報が登録されることになる。
【０１２６】
次に、図１８は、サルベージ処理手順の例を示す図である。この図１８の処理は、サルベージ制御部２４０が、サルベージ管理テーブル２８０に登録された位置情報を１つ選択するたびに実行される。また、サルベージ制御部２４０は、サルベージ管理テーブル２８０から選択した位置情報内のＬＵＮが設定されたＲＬＵを、ＲＡＩＤ管理テーブル２５０を基に特定する。ここでは、ＲＬＵ＃００が特定されたものとして説明する。
【０１２７】
［ステップＳ１４１］サルベージ制御部２４０は、ＲＡＩＤ管理テーブル２５０におけるＲＬＵ＃００のレコード２５１内の「ＨＳディスク番号」から、ホットスペアのＨＤＤ（ここではＤＩＳＫ＃１０とする）を認識する。サルベージ制御部２４０は、図１２の「状態１３」のステップＳ２５と同様の手順で、位置情報から特定されるホットスペアのＨＤＤのブロックから、データを読み出せるかを試す。この処理での読み出し位置は、ＲＡＩＤ−１の場合、読み出しに失敗したブロックと同じデータが格納される、ホットスペアのＨＤＤのブロックであり、ＲＡＩＤ−４，５のいずれかの場合、読み出しに失敗したブロックと同じストライプ番号に対応する、ホットスペアのＨＤＤのブロックである。
【０１２８】
［ステップＳ１４２］サルベージ制御部２４０は、ステップＳ１４１でのデータ読み出しに成功した場合には（Ｓ１４２：Ｙｅｓ）、ステップＳ１５１の処理を実行する。この場合、データのサルベージに成功したことになる。一方、サルベージ制御部２４０は、ステップＳ１４１でデータを読み出せなかった場合には（Ｓ１４２：Ｎｏ）、ステップＳ１４３の処理を実行する。
【０１２９】
なお、データのサルベージに成功した場合、例えば、サルベージ制御部２４０はさらに、読み出しに失敗したＨＤＤにおける対応するブロック（すなわち、リビルド処理時に読み出しに失敗したブロック）にも、データの書き込みを行ってもよい。ＲＬＵ＃００がＲＡＩＤ−１の場合、サルベージ制御部２４０は、ホットスペアのＤＩＳＫ＃１０から読み出したデータを、読み出しに失敗したＨＤＤにおける対応するブロックに書き込む。一方、ＲＬＵ＃００がＲＡＩＤ−４，５のいずれかの場合、サルベージ制御部２４０は、ＲＬＵ＃００に属する故障していないＨＤＤのうち読み出しに失敗したＨＤＤ以外のＨＤＤから、読み出しに失敗したブロックと同じストライプ番号のブロックのデータを読み出す。サルベージ制御部２４０は、読み出したこれらのデータと、ホットスペアのＤＩＳＫ＃１０から読み出したデータとを基に、読み出しに失敗したデータを計算し、算出されたデータを読み出しに失敗したＨＤＤにおける同じストライプ番号のブロックに書き込む。
【０１３０】
［ステップＳ１４３］ステップＳ１４１でのデータ読み出しでＢＣＣエラーが検出された場合（Ｓ１４３：Ｙｅｓ）、ステップＳ１４４の処理が実行される。一方、ステップＳ１４１でデータを読み出せなかった要因がＢＣＣエラー以外の要因である場合（ステップＳ１４３：Ｎｏ）、ステップＳ１４８の処理が実行される。なお、後者の場合の例としては、ホットスペアのＤＩＳＫ＃１０が故障している場合などがある。
【０１３１】
［ステップＳ１４４］サルベージ制御部２４０は、ＲＬＵ＃００内のＨＤＤが故障してから、ホットスペアのＤＩＳＫ＃１０の準備ができるまでの期間に、ＲＬＵ＃００に対して非冗長状態でのホストライトが行われたかを判定する。具体的には、サルベージ制御部２４０は、サルベージ管理テーブル２８０から選択した位置情報内のＬＵＮおよびＬＢＡが、非冗長ライト管理テーブル２７０に登録されているかを判定する。この判定処理は、図１４の「状態２２」のステップＳ３４、および、図１５の「状態３１」のステップＳ４２で説明した判定処理に対応する。
【０１３２】
同じＬＵＮおよびＬＢＡが非冗長ライト管理テーブル２７０に登録されていた場合（ステップＳ１４４：Ｙｅｓ）、サルベージ制御部２４０はステップＳ１４８の処理を実行する。一方、同じＬＵＮおよびＬＢＡが非冗長ライト管理テーブル２７０に登録されていない場合（ステップＳ１４４：Ｎｏ）、サルベージ制御部２４０はステップＳ１４５の処理を実行する。
【０１３３】
［ステップＳ１４５］ＲＬＵ＃００に属するＨＤＤの故障が発生してから現在までにＲＬＵ＃００に対するホストライトが行われていない場合（Ｓ１４２：ＮｏかつＳ１４６：Ｙｅｓの場合）、リビルドデータの生成に必要な最新のデータは、ホットスペアのＤＩＳＫ＃１０にも、読み出しに失敗したＨＤＤにも格納されていないと推定される。そこで、図１４の「状態２２，２３」に示したように、サルベージ制御部２４０は、故障しているＨＤＤからのデータ読み出しを試す。
【０１３４】
サルベージ制御部２４０は、ＲＡＩＤ管理テーブル２５０におけるＲＬＵ＃００のレコード２５１から、故障しているＨＤＤを認識し、そのＨＤＤの電源をオフした後オンにすることで、そのＨＤＤを再起動させる。この処理は、図１４の「状態２２」のステップＳ３５の処理に対応する。なお、サルベージ制御部２４０は、故障しているＨＤＤの電源がすでにオフである場合には、そのＨＤＤの電源を単にオンすることで再起動する。
【０１３５】
［ステップＳ１４６］サルベージ制御部２４０は、再起動したＨＤＤにおける、位置情報から特定されるブロック（すなわち、読み出しに失敗したブロックに対応する、故障したＨＤＤのブロック）から、データを読み出す。この処理での読み出し位置は、ＲＡＩＤ−１の場合、読み出しに失敗したブロックと同じデータが格納される、故障したＨＤＤのブロックであり、ＲＡＩＤ−４，５のいずれかの場合、読み出しに失敗したブロックと同じストライプ番号に対応する、故障したＨＤＤのブロックである。
【０１３６】
サルベージ制御部２４０は、データの読み出しに成功した場合（Ｓ１４６：Ｙｅｓ）、ステップＳ１４７の処理を実行する一方、データを読み出せなかった場合（Ｓ１４６：Ｎｏ）、ステップＳ１４８の処理を実行する。
【０１３７】
なお、例えば、ステップＳ１４５の時点で故障しているＨＤＤの電源がオンであった場合、サルベージ制御部２４０は、例えば、そのＨＤＤを再起動させる前に、そのＨＤＤからのデータ読み出しを行ってもよい。この場合、サルベージ制御部２４０は、データの読み出しに成功した場合にはステップＳ１４７の処理を実行する。その一方、サルベージ制御部２４０は、データの読み出しに失敗した場合には、ステップＳ１４５，Ｓ１４６の手順で、故障しているデータの再起動を行った後、データの読み出しに成功したかを判定する。
【０１３８】
［ステップＳ１４７］サルベージ制御部２４０は、ステップＳ１４６で再起動したＨＤＤから読み出したデータを、その読み出し元のブロックに対応する、ホットスペアのＤＩＳＫ＃１０のブロックに書き込む。これにより、データのサルベージに成功したことになる。以上のステップＳ１４６（Ｙｅｓの場合），Ｓ１４７の処理は、図１４の「状態２３」のステップＳ３６の処理に対応する。この後、ステップＳ１５１の処理が実行される。
【０１３９】
なお、ステップＳ１４７では、サルベージ制御部２４０はさらに、読み出しに失敗したＨＤＤにおける対応するブロック（すなわち、リビルド処理時に読み出しに失敗したブロック）にも、データの書き込みを行ってもよい。ＲＬＵ＃００がＲＡＩＤ−１の場合、サルベージ制御部２４０は、再起動したＨＤＤから読み出したデータを、読み出しに失敗したＨＤＤにおける対応するブロックに書き込む。一方、ＲＬＵ＃００がＲＡＩＤ−４，５のいずれかの場合、サルベージ制御部２４０は、ＲＬＵ＃００に属する故障していないＨＤＤのうち読み出しに失敗したＨＤＤ以外のＨＤＤから、読み出しに失敗したブロックと同じストライプ番号のブロックのデータを読み出す。サルベージ制御部２４０は、読み出したこれらのデータと、再起動したＨＤＤから読み出したデータとを基に、読み出しに失敗したデータを計算し、算出されたデータを読み出しに失敗したＨＤＤにおける同じストライプ番号のブロックに書き込む。
【０１４０】
また、ステップＳ１４７の完了後、サルベージ制御部２４０は、ステップＳ１４５で再起動したＨＤＤの動作をオフにして、このＨＤＤをＲＬＵ＃００から切り離すことが望ましい。なぜなら、ステップＳ１４５で再起動したＨＤＤは、一度故障したと判定されたＨＤＤであるので、その後に安定的に動作する可能性が低いからである。
【０１４１】
［ステップＳ１４８］非冗長ライト管理テーブル２７０にホストライトが行われたことが登録されていた場合（Ｓ１４４：Ｙｅｓ）、読み出しに失敗したブロックにのみ、それ以前にホストライトによって最新のデータが書き込まれたことになる。このため、図１５の「状態３１，３２」に示したように、サルベージ制御部２４０は、読み出しに失敗したブロックが属するＨＤＤからのデータ読み出しを試す。
【０１４２】
サルベージ制御部２４０は、サルベージ管理テーブル２８０から選択した位置情報内のディスク番号から、読み出しに失敗したＨＤＤを認識し、そのＨＤＤの電源をオフした後オンにすることで、そのＨＤＤを再起動させる。この処理は、図１５の「状態３１」のステップＳ４３に対応する。
【０１４３】
なお、ＲＬＵ＃００がＲＡＩＤ−１である場合、サルベージ制御部２４０は、サルベージ管理テーブル２８０に登録されたディスク番号を用いなくても、読み出しに失敗したＨＤＤを認識することができる。ＲＡＩＤ−１の場合、読み出しに失敗したＨＤＤは、ＲＬＵ＃００に属するＨＤＤのうち故障していないＨＤＤであると容易に判定できるからである。
【０１４４】
［ステップＳ１４９］サルベージ制御部２４０は、再起動したＨＤＤにおける、位置情報から特定されるブロック（すなわち、読み出しに失敗したブロック）から、データを読み出す。サルベージ制御部２４０は、データの読み出しに成功した場合（Ｓ１４９：Ｙｅｓ）、ステップＳ１５０の処理を実行する一方、データを読み出せなかった場合（Ｓ１４９：Ｎｏ）、ステップＳ１５２の処理を実行する。
【０１４５】
［ステップＳ１５０］サルベージ制御部２４０は、少なくとも再起動したＨＤＤから読み出したデータを基に、リビルドデータを生成し、生成したリビルドデータを、ホットスペアのＤＩＳＫ＃１０における対応するブロックに書き込む。
【０１４６】
図１５の「状態３２」のステップＳ４４で説明したように、ＲＬＵ＃００がＲＡＩＤ−１の場合、サルベージ制御部２４０は、再起動したＨＤＤから読み出したデータを、ホットスペアのＤＩＳＫ＃１０における対応するブロック（同じデータを格納すべきブロック）に書き込む。また、ＲＬＵ＃００がＲＡＩＤ−４，５のいずれかの場合、サルベージ制御部２４０は、再起動したＨＤＤと、ＲＬＵ＃００に属する残りの故障していないＨＤＤのそれぞれの同じストライプ番号からデータを読み出し、読み出したデータを基に、ホットスペアのＤＩＳＫ＃１０に格納すべきリビルドデータを計算する。サルベージ制御部２４０は、算出されたリビルドデータをホットスペアのＤＩＳＫ＃１０の同じストライプ番号に対応するブロックに書き込む。以上の処理により、データのサルベージに成功したことになる。
【０１４７】
［ステップＳ１５１］データのサルベージに成功したことから、サルベージ制御部２４０は、サルベージ管理テーブル２８０から選択した位置情報と同じＬＵＮおよびＬＢＡが登録された、バッドデータ管理テーブル２６０のレコードを消去する。
【０１４８】
［ステップＳ１５２］サルベージ制御部２４０は、サルベージ管理テーブル２８０から選択した位置情報（ＬＵＮ、ＬＢＡおよびディスク番号）を、サルベージ管理テーブル２８０から消去する。
【０１４９】
なお、サルベージ方法（１）〜（３）のいずれを用いてもデータのサルベージが不可能であった場合（Ｓ１４９：Ｎｏ）には、サルベージ管理テーブル２８０に登録された位置情報は消去される（Ｓ１５２）ものの、バッドデータ管理テーブル２６０に登録された位置情報はそのまま残る。アクセス制御部２２０は、リビルド処理完了後のホストリード時において、読み出し対象がバッドデータ管理テーブル２６０に登録された位置に対応する場合には、ホスト装置４００に対してエラー応答する。これにより、アクセス制御部２２０は、失ったデータに対する読み出し要求を受けたとき、ＨＤＤへの余計なアクセスを行うことなく、ホスト装置４００に対して応答できるようになる。
【０１５０】
なお、データのサルベージが不可能であった場合（Ｓ１４９：Ｎｏ）、サルベージ制御部２４０は、バッドデータ管理テーブル２６０に位置情報を残す代わりに、例えば、位置情報から特定されるホットスペアのＨＤＤのブロック（すなわち、読み出しに失敗したブロックに対応する、ホットスペアのＨＤＤのブロック）のＢＣＣに対して、バッドデータであることを示す情報を書き込んでもよい。「バッドデータ」は、例えば、対応するブロックのデータをロストしたことを示す。この場合、アクセス制御部２２０は、リビルド処理完了後に、サルベージが不可能であったデータの読み出し要求を受けたとき、ホットスペアのＤＩＳＫ＃１０の対応ブロックのＢＣＣから、データをロストしたことを明確に認識できるようになる。
【０１５１】
以上説明した図１６〜図１８の処理によれば、リビルド処理中にデータ読み出しに失敗した場合でも、データロストをできるだけ回避することができる。従って、ストレージシステムの信頼性を高めることができる。
【０１５２】
なお、図１８の処理では、サルベージ方法（１）〜（３）のうちサルベージ方法（１）を最初に実行した（ステップＳ１４１）。これにより、サルベージ対象のＲＬＵ＃００におけるホストライトおよびホストリードの処理に対して、サルベージ処理の負荷が与える影響をごく小さくすることができる。
【０１５３】
また、図１８の処理では、例えば、ステップＳ１４３，Ｓ１４４の判定処理を行わずに、サルベージ方法（２）（ステップＳ１４５，Ｓ１４６）、サルベージ方法（３）（ステップＳ１４８，Ｓ１４９）の順に実行してもよい。この場合、非冗長ライト管理テーブル２７０が不要になり、ＣＭ２０１に必要な記憶容量を小さくすることができる。
【０１５４】
また、サルベージ方法（２）は、故障しているためにホストリードやホストライトの対象として使用されていないＨＤＤを再起動するものである。一方、サルベージ方法（３）は、ホストリードおよびホストライトの対象のＨＤＤを再起動するので、ＨＤＤの動作が再開されるまでの間、ホスト装置４００への応答が待ち状態になってしまう。このことから、サルベージ方法（３）を用いた処理よりサルベージ方法（２）を用いた処理を先に実行することで、ホストライトおよびホストリードの処理に与える影響を小さくし、ホスト装置４００に対する応答速度をできるだけ低下させないようにすることができる。
【０１５５】
なお、上記の第２の実施の形態では、リビルド処理時にデータの読み出しに失敗したタイミングと非同期に、サルベージ処理が行われた。しかしながら、他の例として、データの読み出しに失敗したとき、リビルド処理を中断して即座にサルベージ処理が実行されてもよい。例えば、図１６のステップＳ１０４において読み出しに失敗したと判定したとき（Ｓ１０４：Ｙｅｓ）、バッドデータ管理テーブル２６０に位置情報が登録されるとともに（図１６のＳ１０６）、図１８の処理が実行される。ただし、データの読み出し失敗時にサルベージ処理を実行する場合には、サルベージ管理テーブル２８０へのデータ登録（図１６のＳ１０６）が不要になるので、図１８のステップＳ１５２の処理も不要になる。
【０１５６】
また、上記の第２の実施の形態では、リビルド処理中にデータ読み出しに失敗したとき、即座にバッドデータ管理テーブル２６０に位置情報を登録した。しかしながら、別の処理例として、データ読み出しに失敗した時点ではバッドデータ管理テーブル２６０に位置情報を登録せずに、データのサルベージが不可能と判定されたとき（図１８のＳ１４９：Ｎｏ）に、サルベージ制御部２４０が位置情報をバッドデータ管理テーブル２６０に登録してもよい。この場合、アクセス制御部２２０は、リビルド処理中のＲＬＵ＃００に対する読み出し要求をホスト装置４００から受信したとき、その読み出し元がリビルド処理においてデータの読み出しに失敗した位置であったとしても、一旦ＨＤＤからのデータ読み出しを試みる。
【０１５７】
〔第３の実施の形態〕
上記の第２の実施の形態では、アクセス制御部２２０は、ＲＬＵのリビルド処理が開始された後に、そのＲＬＵに対するホスト装置４００からの読み出し要求を受信したとき、読み出しの対象がバッドデータ管理テーブル２６０に登録されている場合には、無条件にホスト装置４００に対してエラー応答した。これに対して、以下の第３の実施の形態において、アクセス制御部２２０は、ホスト装置４００からの読み出し要求に応じてＨＤＤからのデータ読み出しを行い、読み出しに失敗した場合には、そのデータについてのサルベージ処理をサルベージ制御部２４０に実行させる。これにより、ＨＤＤの故障が生じた場合でも、ホスト装置４００から読み出しを要求されたデータを返信できる確率を高くする。
【０１５８】
なお、第３の実施の形態に係るストレージシステムにおいて、ＣＭのハードウェア構成や処理機能の基本的な構成は、第２の実施の形態のＣＭ２０１と同様である。そこで、以下、第３の実施の形態のＣＭ２０１の処理を、第２の実施の形態の図４に示した符号を用いて説明する。
【０１５９】
図１９および図２０は、第３の実施の形態のＣＭにおけるホストリード処理手順の例を示すフローチャートである。
まず、図１９のステップＳ１７１〜Ｓ１７６について説明する。
【０１６０】
［ステップＳ１７１］ここでは例として、ＲＬＵ＃００に属する１つのＨＤＤが故障しているものとする。この状態で、アクセス制御部２２０は、ＲＬＵ＃００からのデータの読み出し要求をホスト装置４００から受信すると、次のステップＳ１７２を実行する。
【０１６１】
［ステップＳ１７２］アクセス制御部２２０は、読み出し要求先のデータ領域の位置情報がバッドデータ管理テーブル２６０に登録されているかを判定する。アクセス制御部２２０は、対応する位置情報がバッドデータ管理テーブル２６０に登録されていなかった場合（Ｓ１７２：Ｎｏ）、ステップＳ１７３の処理を実行する。
【０１６２】
一方、アクセス制御部２２０は、対応する位置情報がバッドデータ管理テーブル２６０に登録されていた場合（Ｓ１７２：Ｙｅｓ）、その位置情報をサルベージ制御部２４０に通知して、サルベージ処理の実行を要求する。この実行要求に応じて、サルベージ制御部２４０は、図２０のステップＳ１４１の処理を実行する。
【０１６３】
［ステップＳ１７３］アクセス制御部２２０は、読み出しを要求されたデータをＨＤＤから読み出す。
［ステップＳ１７４］アクセス制御部２２０は、データの読み出しに成功した場合（Ｓ１７４：Ｙｅｓ）、ステップＳ１７５の処理を実行する。一方、データを読み出せなかった場合（Ｓ１７４：Ｎｏ）、アクセス制御部２２０は、読み出しに失敗したデータに対応する位置情報をサルベージ制御部２４０に通知して、サルベージ処理の実行を要求する。この実行要求に応じて、サルベージ制御部２４０は、図２０のステップＳ１４１の処理を実行する。
【０１６４】
［ステップＳ１７５］アクセス制御部２２０は、ステップＳ１７３でＨＤＤから読み出したデータを、ホスト装置４００に返信する。すなわち、アクセス制御部２２０は、ホスト装置４００に対して正常応答する。
【０１６５】
［ステップＳ１７６］アクセス制御部２２０は、ホスト装置４００に対して、要求されたデータを正常に読み出すことができなかったとして、エラー応答する。
次に、図２０の処理について説明する。図２０では、図１８と同様の処理が実行される処理ステップには同じステップ番号を付して示し、これらの詳細な処理内容の説明を省略する。
【０１６６】
アクセス制御部２２０からサルベージ処理の要求を受け付けたサルベージ制御部２４０は、前述のサルベージ方法（１）を用いて、ホットスペアのＨＤＤからのデータ読み出しを試す（Ｓ１４１）。サルベージ制御部２４０は、ホットスペアのＨＤＤからのデータ読み出しに成功した場合（Ｓ１４２：Ｙｅｓ）、ステップＳ１４２ａの処理を実行する。
【０１６７】
［ステップＳ１４２ａ］サルベージ制御部２４０は、ホットスペアのＨＤＤから読み出したデータを基に、ホスト装置４００に返信する読み出しデータを生成する。ＲＬＵ＃００がＲＡＩＤ−１の場合、読み出しデータは、ホットスペアのＨＤＤから読み出されたデータと同じである。一方、ＲＬＵ＃００がＲＡＩＤ−４，５のいずれかである場合、サルベージ制御部２４０は、ホットスペアのＨＤＤから読み出したデータと、ＲＬＵ＃００に属する故障していないＨＤＤのうち、読み出しに失敗したＨＤＤを除くＨＤＤから読み出したデータとを基に、読み出しデータを計算によって生成する。
【０１６８】
一方、ホットスペアのＨＤＤからのデータ読み出しに失敗し（Ｓ１４２：Ｎｏ）、その読み出し失敗要因がＢＣＣエラーであり（Ｓ１４３：Ｙｅｓ）、かつ、非冗長ライト管理テーブル２７０に対応する位置情報が登録されていない（Ｓ１４４：Ｎｏ）場合には、サルベージ制御部２４０は、前述のサルベージ方法（２）を用いた処理を行う。すなわち、サルベージ制御部２４０は、故障したＨＤＤを再起動させ（Ｓ１４５）、再起動したＨＤＤからのデータ読み出しを試みる。再起動したＨＤＤからのデータ読み出しに成功した場合（Ｓ１４６：Ｙｅｓ）、サルベージ制御部２４０は、ステップＳ１４７ａの処理を実行する。
【０１６９】
［ステップＳ１４７ａ］サルベージ制御部２４０は、ステップＳ１４５で再起動したＨＤＤから読み出したデータを基に、ホスト装置４００に返信する読み出しデータを生成する。ＲＬＵ＃００がＲＡＩＤ−１の場合、読み出しデータは、再起動したＨＤＤから読み出されたデータと同じである。一方、ＲＬＵ＃００がＲＡＩＤ−４，５のいずれかである場合、サルベージ制御部２４０は、再起動したＨＤＤから読み出したデータと、ＲＬＵ＃００に属する故障していないＨＤＤのうち、読み出しに失敗したＨＤＤを除くＨＤＤから読み出したデータとを基に、読み出しデータを計算によって生成する。
【０１７０】
また、ホットスペアのＨＤＤからのデータ読み出しの失敗要因がＢＣＣエラー以外の場合（Ｓ１４３：Ｎｏ）、または、非冗長ライト管理テーブル２７０に対応する位置情報が登録されていた場合（Ｓ１４４：Ｙｅｓ）、または、故障後に再起動したＨＤＤからのデータ読み出しに失敗した場合（Ｓ１４６：Ｎｏ）には、サルベージ制御部２４０は、前述のサルベージ方法（３）を用いた処理を行う。すなわち、サルベージ制御部２４０は、読み出しに失敗したＨＤＤを再起動させ（Ｓ１４８）、再起動したＨＤＤからのデータ読み出しを試みる。
【０１７１】
ここで、再起動したＨＤＤからのデータ読み出しに失敗した場合（Ｓ１４９：Ｎｏ）、サルベージ制御部２４０は、データのサルベージに失敗したことをアクセス制御部２２０に通知する。サルベージ失敗の通知を受けたアクセス制御部２２０は、ホスト装置４００に対してエラー応答する（図１９のＳ１７６）。
【０１７２】
一方、ステップＳ１４８でのデータ読み出しに成功した場合（Ｓ１４９：Ｙｅｓ）、または、ステップＳ１４２ａ，１４７ａのいずれかの処理後、サルベージ制御部２４０は、バッドデータ管理テーブル２６０に登録された、サルベージ対象のデータに対応する位置情報を、バッドデータ管理テーブル２６０から消去する（Ｓ１５１）。この後、サルベージ制御部２４０は、アクセス制御部２２０に対してサルベージに成功したことを通知するとともに、ステップＳ１４２ａ，１４７ａのいずれかで生成した読み出しデータ、またはステップＳ１４８で再起動したＨＤＤから読み出したデータを、アクセス制御部２２０に受け渡す。アクセス制御部２２０は、サルベージ制御部２４０から受け取ったデータをホスト装置４００に返信する（図１９のＳ１７５）。
【０１７３】
以上の第３の実施の形態によれば、リビルド処理中だけでなく、ＨＤＤの故障が生じ、かつ、ホスト装置４００からの読み出し要求に応じたデータの読み出しに失敗したときにも、サルベージ処理が実行される。従って、ＨＤＤの故障が発生した場合にホストリードを正常に実行できる可能性を高くすることができる。
【０１７４】
〔第４の実施の形態〕
上記の第２の実施の形態で示したサルベージ方法（２）では、ＲＬＵに属するＨＤＤの故障が発生してから現在までの期間にホストライトが行われたかを判定し、ホストライトが行われていなかった場合に、故障したＨＤＤを再起動させてそのＨＤＤからデータを読み出した。そして、サルベージ方法（２）では、上記の判定処理を、ホットスペアのＨＤＤからデータを読み出すことができるか（図１８のＳ１４２）、および、非冗長ライト管理テーブル２７０に対応する位置情報が登録されているか（図１８のＳ１４４）という２つの判定によって行った。
【０１７５】
これに対して、以下の第４の実施の形態におけるサルベージ処理では、ＲＬＵに属するＨＤＤの故障が発生してから現在までの期間にホストライトが行われたか否かを、ライト管理テーブルを用いて判定する。そして、ライト管理テーブルに基づき、ホストライトが行われていないと判定された場合に、故障したＨＤＤを再起動させてそのＨＤＤからデータを読み出す。以下、このようなライト管理テーブルに基づくサルベージ方法を、サルベージ方法（２ａ）と表す。
【０１７６】
図２１は、第４の実施の形態におけるＣＭの処理機能の構成例を示すブロック図である。なお、この図２１では、図４に対応する処理ブロックには同じ符号を付して示す。
第４の実施の形態において、ＣＭ２０１の記憶装置には、非冗長ライト管理テーブル２７０の代わりに、ライト管理テーブル２９０が記憶される。ライト管理テーブル２９０は、ＲＬＵに属するＨＤＤの故障が発生してからリビルド処理が完了するまでの期間に、そのＲＬＵに対して実行されたホストライトについての書き込み位置を示す位置情報が登録される。
【０１７７】
アクセス制御部２２０は、ＲＬＵに属するＨＤＤのうちの１つが故障して、そのＲＬＵに記録されたデータの冗長性が失われてから、ホットスペアのＨＤＤに対するリビルド処理が完了するまでの期間に、そのＲＬＵに対するホストライトを行ったとき、データの書き込み先の位置情報をライト管理テーブル２９０に登録する。
【０１７８】
サルベージ制御部２４０は、サルベージ処理の際にライト管理テーブル２９０を参照し、サルベージ対象のデータに対応する位置情報がライト管理テーブル２９０に登録されているか否かに応じて、サルベージ処理手順を決定する。
【０１７９】
図２２は、ライト管理テーブルに登録される情報の例を示す図である。
ライト管理テーブル２９０には、ＲＬＵのＲＡＩＤ状態が「非冗長状態」または「リビルド中」であるときに、そのＲＬＵに属する論理ユニットに対してホストライトが実行されたとき、書き込み先の位置を示す情報が、ＬＵＮとＬＢＡとの組み合わせとして登録される。
【０１８０】
なお、ライト管理テーブル２９０のデータ構造は、図２２の例に限らず、例えば、論理ユニットごとの全ＬＢＡに対して、「非冗長状態」または「リビルド中」におけるホストライトが実行されたか否かを示すフラグ情報が対応付けられた構造であってもよい。また、ライト管理テーブル２９０には、位置情報として、ＬＵＮおよびＬＢＡの代わりに、例えば、ＨＤＤのディスク番号およびＨＤＤにおける物理アドレスが登録されてもよい。
【０１８１】
次に、第４の実施の形態において実行されるサルベージ処理について説明する。まず、図２３は、サルベージ方法（２ａ）の実行に必要な前処理を示す図である。
図２３の「状態４１」は、図１０の「状態１」と同様に、ＲＬＵ＃００を構成するＤＩＳＫ＃０１の故障が発生した場合を示す。ただし、「状態４１」は、ＤＩＳＫ＃０１が故障してから、ホットスペアのＤＩＳＫ＃１０へのリビルド処理が完了するまでの期間における状態を示す。この期間には、図１３の「状態２１」のような、リビルド先とするホットスペアのＤＩＳＫ＃０１の準備が整うまでの期間も含む。
【０１８２】
サルベージ方法（２ａ）の前処理として、アクセス制御部２２０は、「状態４１」においてホスト装置４００からＲＬＵ＃００に対する書き込み要求を受けると（ステップＳ６１）、ＤＩＳＫ＃００の対応するブロックにデータを書き込む（ステップＳ６２）。これとともに、アクセス制御部２２０は、データの書き込み位置を示す位置情報（データを書き込んだブロックに対応するＬＵＮおよびＬＢＡ）を、ライト管理テーブル２９０に登録する（ステップＳ６３）。なお、このステップＳ６３での処理手順は、ＲＬＵ＃００がＲＡＩＤ−４，５のいずれかの場合でも同様であり、アクセス制御部２２０は、ホストライトした位置の情報を非冗長ライト管理テーブル２７０に登録する。
【０１８３】
なお、すでにホットスペアのＤＩＳＫ＃１０の準備が整っている場合、アクセス制御部２２０は、図１１の「状態１２」に示したステップＳ２３と同様に、ＤＩＳＫ＃００だけでなく、リビルド先のＤＩＳＫ＃１０に対してもホストライトを行ってもよい（ステップＳ６４）。例えば、ＲＬＵ＃００がＲＡＩＤ−１の場合、ステップＳ６４では、アクセス制御部２２０は、ホスト装置４００から書き込み要求されたデータを、ＤＩＳＫ＃１０にも書き込む。なお、ＲＬＵ＃００がＲＡＩＤ−４，５のいずれかである場合のステップＳ６４の処理は、図１１のステップＳ２３で説明した処理と同様である。このようなステップＳ６４の処理を実行することで、前述のサルベージ方法（１）も併用できるようになる。
【０１８４】
図２４は、サルベージ方法（２ａ）の手順を示す図である。
図２４の「状態４２」は、図２３の「状態４１」において、ホットスペアのＤＩＳＫ＃１０に対するリビルド処理が実行されている状態を示す。ＲＬＵ＃００がＲＡＩＤ−１の場合、リビルド制御部２３０は、ＤＩＳＫ＃００に記録されたＲＬＵ＃００のデータを読み出して、ＤＩＳＫ＃１０にコピーする。このようなリビルド処理中に、リビルド制御部２３０が、ＤＩＳＫ＃００からのデータ読み出しに失敗したものとする（ステップＳ６５）。
【０１８５】
サルベージ制御部２４０は、ＤＩＳＫ＃０１が故障してから現在までの期間に、ＲＬＵ＃００に対するホストライトが行われたかを判定する。なお、この期間にホストライトが行われた場合、ＤＩＳＫ＃００における読み出しに失敗したブロック、またはそのブロックに対応するＤＩＳＫ＃１０のブロックの少なくとも一方に対して、最新のデータが記録されている状態となる。
【０１８６】
サルベージ制御部２４０は、上記の判定処理を、読み出しに失敗したブロックに対応する位置情報がライト管理テーブル２９０に登録されているかによって行う。そして、登録されていない場合、サルベージ制御部２４０は、ＤＩＳＫ＃０１が故障してから現在までの期間にＲＬＵ＃００に対するホストライトが行われていないと判定する（ステップＳ６６）。この場合、ＤＩＳＫ＃００からの読み出しに失敗したデータに対応する、ホットスペアのＤＩＳＫ＃１０にリビルドすべきデータは、故障したＤＩＳＫ＃０１にのみ存在する可能性が高い。そこで、サルベージ制御部２４０は、故障したＤＩＳＫ＃０１を再起動させ（ステップＳ６７）、再起動したＤＩＳＫ＃０１から、ＤＩＳＫ＃１０にリビルドするデータを読み出すことができるかを試す。
【０１８７】
図２４の「状態４３」に示すように、サルベージ制御部２４０は、読み出しに失敗したＤＩＳＫ＃００のブロックに対応する、再起動したＤＩＳＫ＃０１のブロックから、データを読み出す。データの読み出しに成功した場合、サルベージ制御部２４０は、読み出したデータを、ホットスペアのＤＩＳＫ＃１０における対応するブロックにコピーする。この場合、データのサルベージに成功したことになる（ステップＳ６８）。
【０１８８】
なお、以上の図２４に示したサルベージ方法（２ａ）の手順は、ＲＬＵ＃００がＲＡＩＤ−４，５のいずれかの場合でも同様である。すなわち、サルベージ制御部２４０は、再起動したＤＩＳＫ＃０１における対応するブロックからのデータの読み出しに成功すると、読み出したデータを、ホットスペアのＤＩＳＫ＃１０における同じストライプ番号に対応するブロックにコピーする。
【０１８９】
次に、上記のサルベージ方法（２ａ）とサルベージ方法（１），（３）とを組み合わせたサルベージ処理の例について、フローチャートを用いて説明する。
まず、図２５は、第４の実施の形態でのＩ／Ｏ処理手順の例を示すフローチャートである。この図２５は、Ｉ／Ｏ処理対象のＲＬＵ＃００に属する１つのＨＤＤが故障してから、ＲＬＵ＃００のリビルド処理が完了するまでの期間におけるＩ／Ｏ処理を示す。この期間とは、ＲＡＩＤ管理テーブル２５０のＲＬＵ＃００のレコード２５１において、故障したＨＤＤに対応する「ディスク状態」に「故障」が設定され、かつ、「ＲＡＩＤ状態」が「非冗長状態」または「リビルド中」が設定されている期間である。
【０１９０】
なお、図２５では、図１７と同様の処理が実行される処理ステップには同じ符号を付して示し、その処理内容の説明を省略する。図２５では、図１７と比較して、ホスト装置４００から書き込み要求を受信したときの処理手順（ステップＳ１２６以降の処理手順）が異なる。
【０１９１】
すなわち、ホスト装置４００から書き込み要求を受信した場合（Ｓ１２２：Ｎｏ）、アクセス制御部２２０は、リビルド先とするホットスペアのＨＤＤの準備が完了しているかを判定する（Ｓ１２６）。ホットスペアのＨＤＤの準備が完了している場合（Ｓ１２６：Ｙｅｓ）、アクセス制御部２２０は、ＲＬＵ＃００に属する故障していない所定のＨＤＤに対して、書き込み処理を行う（Ｓ１２７）。また、アクセス制御部２２０は、故障したＨＤＤに書き込むべきデータがある場合には、そのデータをホットスペアのＨＤＤに書き込む。この後、ステップＳ１２９ａの処理が実行される。
【０１９２】
一方、ホットスペアのＨＤＤの準備が完了していない場合（Ｓ１２６：Ｎｏ）、アクセス制御部２２０は、ＲＬＵ＃００に属する故障していない所定のＨＤＤに対して、書き込み処理を行う（Ｓ１２８）。この後、ステップＳ１２９ａの処理が実行される。
【０１９３】
［ステップＳ１２９ａ］アクセス制御部２２０は、データの書き込み位置を示す位置情報（データを書き込んだブロックに対応するＬＵＮおよびＬＢＡ）を、ライト管理テーブル２９０に登録する。これにより、ライト管理テーブル２９０には、ＲＬＵ＃００に属するＨＤＤが故障してから、リビルド処理が完了するまでの期間に、ＲＬＵ＃００を書き込み先としたホストライトが行われた位置の情報が登録される。
【０１９４】
図２６は、第４の実施の形態でのサルベージ処理手順の例を示すフローチャートである。この図２６の処理は、図１８と同様に、サルベージ制御部２４０が、サルベージ管理テーブル２８０に登録された位置情報を１つ選択するたびに実行される。また、サルベージ制御部２４０は、サルベージ管理テーブル２８０から選択した位置情報内のＬＵＮが設定されたＲＬＵを、ＲＡＩＤ管理テーブル２５０を基に特定する。ここでは、ＲＬＵ＃００が特定されたものとして説明する。
【０１９５】
なお、図２６では、図１８と同様の処理が実行される処理ステップには同じ符号を付して示し、その処理内容の説明を省略する。
［ステップＳ１６１］サルベージ制御部２４０は、ＲＬＵ＃００内のＨＤＤが故障してから現在までの期間に、ＲＬＵ＃００に対して非冗長状態でのホストライトが行われたかを判定する。具体的には、サルベージ制御部２４０は、サルベージ管理テーブル２８０から選択した位置情報内のＬＵＮおよびＬＢＡが、ライト管理テーブル２９０に登録されているかを判定する。
【０１９６】
同じＬＵＮおよびＬＢＡがライト管理テーブル２９０に登録されていた場合（ステップＳ１６１：Ｙｅｓ）、ホットスペアのＤＩＳＫ＃１０と、読み出しに失敗したＨＤＤのいずれかに、ホストライトによる最新のデータが記録されている可能性が高いと推定される。そこで、サルベージ制御部２４０は、サルベージ方法（１）を用いたサルベージ処理、およびサルベージ方法（３）を用いたサルベージ処理を、順に試行する。
【０１９７】
まず、サルベージ制御部２４０は、サルベージ方法（１）を用いて、ホットスペアのＤＩＳＫ＃１０からデータを読み出す（Ｓ１４１）。ホットスペアのＤＩＳＫ＃１０からのデータ読み出しに成功した場合（Ｓ１４２：Ｙｅｓ）、データのサルベージに成功したことになり、ステップＳ１５１の処理が実行される。
【０１９８】
ホットスペアのＤＩＳＫ＃１０からのデータ読み出しに失敗した場合（Ｓ１４２：Ｎｏ）、サルベージ制御部２４０は、サルベージ方法（３）を用いて、読み出しに失敗したブロックが属するＨＤＤを再起動させ（Ｓ１４８）、再起動したＨＤＤからのデータ読み出しを試す（Ｓ１４９）。再起動したＨＤＤからのデータ読み出しに成功した場合（Ｓ１４９：Ｙｅｓ）、サルベージ制御部２４０は、少なくとも再起動したＨＤＤから読み出したデータを基に、リビルドデータを生成し、生成したリビルドデータを、ホットスペアのＤＩＳＫ＃１０における対応するブロックに書き込む（Ｓ１５０）。この後、ステップＳ１５１の処理が実行される。一方、再起動したＨＤＤからのデータ読み出しに失敗した場合（Ｓ１４９：Ｎｏ）、データのサルベージに失敗したことになり、ステップＳ１５２の処理が実行される。
【０１９９】
上記のステップＳ１６１（Ｙｅｓ），Ｓ１４１，Ｓ１４２（Ｎｏ），Ｓ１４８，Ｓ１４９（Ｙｅｓ），Ｓ１５０の処理では、図１８の処理と比較して、故障したＨＤＤからのデータ読み出しが実行されることなく、読み出しに失敗したＨＤＤからのデータ読み出しが実行される。このため、読み出しに失敗したＨＤＤからのデータを基にサルベージに成功する場合、サルベージに成功するまでの時間が短縮される。
【０２００】
なお、ステップＳ１６１で、対応する位置情報がライト管理テーブル２９０に登録されていた場合には、ステップＳ１４１，Ｓ１４２の処理を行うことなく、ステップＳ１４８の処理が実行されてもよい。この場合、図２５においては、ステップＳ１２６，Ｓ１２７の処理が不要になり、アクセス制御部２２０は、書き込み要求を受信した場合（Ｓ１２２：Ｎｏ）、無条件にステップＳ１２８，Ｓ１２９ａの処理を実行してもよい。
【０２０１】
次に、ステップＳ１６１で、同じＬＵＮおよびＬＢＡがライト管理テーブル２９０に登録されていない場合（ステップＳ１６１：Ｎｏ）には、ホットスペアのＤＩＳＫ＃１０にも、読み出しに失敗したＨＤＤにも、最新データは記録されていないと推定される。そこで、サルベージ制御部２４０は、サルベージ方法（２ａ）を用いて、故障したＨＤＤを再起動させ（Ｓ１４５）、再起動したＨＤＤからのデータ読み出しを試す（Ｓ１４６）。
【０２０２】
再起動したＨＤＤからのデータ読み出しに成功した場合（Ｓ１４６：Ｙｅｓ）、サルベージ制御部２４０は、読み出したデータを、その読み出し元ブロックに対応する、ホットスペアのＤＩＳＫ＃１０のブロックに書き込む（Ｓ１４７）。これにより、データのサルベージに成功したことになり、ステップＳ１５１の処理が実行される。一方、再起動したＨＤＤからのデータ読み出しに失敗した場合（Ｓ１４６：Ｎｏ）、データのサルベージに失敗したことになり、ステップＳ１５２の処理が実行される。
【０２０３】
上記のステップＳ１６１（Ｎｏ），Ｓ１４５，Ｓ１４６（Ｙｅｓ），Ｓ１４７の処理では、図１８の処理のようにホットスペアのＤＩＳＫ＃１０からのデータ読み出しを試すことなく、故障したＨＤＤからのデータ読み出しが実行される。このため、データのサルベージに成功するまでの時間が短縮される。一方、故障したＨＤＤからのデータ読み出しに失敗した場合（Ｓ１４６：Ｎｏ）には、リビルド処理時に読み出しに失敗したＨＤＤを再起動することなく、データのサルベージに失敗したと判定される。このため、アクセス制御部２２０によるＲＬＵ＃００に対するＩ／Ｏ処理が停止してしまう確率を低くすることができる。
【０２０４】
なお、以上の第４の実施の形態では、第２の実施の形態と同様に、リビルド処理とサルベージ処理とを非同期に実行するものとした。しかしながら、リビルド処理の際にデータの読み出しに失敗した時点で、図２６の示すサルベージ処理が実行されてもよい。
【０２０５】
また、図２６に示したサルベージ処理は、ホストリードの際にデータの読み出しに失敗した場合に実行されてもよい。
また、前述の第２の実施の形態で使用された非冗長ライト管理テーブル２７０には、ＨＤＤの故障が発生してから、リビルド先とするホットスペアのＨＤＤの準備が完了するまでの期間にホストライトが発生した場合に、位置情報が登録される。これに対して、第４の実施の形態で使用されるライト管理テーブル２９０は、ＨＤＤの故障が発生してからリビルド処理が完了するまでの期間にホストライトが発生した場合に、位置情報が登録される。このため、ライト管理テーブル２９０より、非冗長ライト管理テーブル２７０の方がデータ量を小さくできる可能性が高い。すなわち、第２の実施の形態の方が、第４の実施の形態と比較して、ホストライトが発生したことを記憶するテーブルの容量を小さくすることができる。
【０２０６】
以上の各実施の形態に関し、さらに以下の付記を開示する。
（付記１）  複数の記憶装置と、前記複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置と、前記複数の記憶装置のいずれかの代わりに使用される予備用記憶装置とを備えたストレージシステムにおいて、
前記ストレージ制御装置は、
前記複数の記憶装置のうちの第１の記憶装置が故障すると、前記第１の記憶装置に記録されていたデータと同一のデータを前記予備用記憶装置に格納するリビルド処理を実行するリビルド制御部と、
前記リビルド処理を実行中の前記リビルド制御部が、前記複数の記憶装置のうちの第２の記憶装置からのデータ読み出しに失敗したとき、前記第１の記憶装置から前記予備用記憶装置に格納するデータを読み出すデータ復旧制御部と、
を有することを特徴とするストレージシステム。
【０２０７】
（付記２）  前記ストレージ制御装置は、ホスト装置からのアクセス要求に応じて前記複数の記憶装置内のデータにアクセスするアクセス制御部であって、前記第１の記憶装置が故障したとき、前記複数の記憶装置のうちの前記第１の記憶装置を除く残りの記憶装置を用いて、前記ホスト装置からのアクセス要求に応じたアクセス処理を継続するアクセス制御部をさらに有することを特徴とする付記１記載のストレージシステム。
【０２０８】
（付記３）  前記アクセス制御部は、前記リビルド処理の実行中に前記ホスト装置から書き込み要求を受けたとき、前記第１の記憶装置に書き込むべきデータがある場合には、当該データを前記予備用記憶装置に書き込み、
前記データ復旧制御部は、
前記リビルド制御部が前記第２の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれているかを判定し、
データが書き込まれている場合には、当該データについての前記リビルド処理が完了していると判定し、
データが書き込まれていない場合には、前記第１の記憶装置から前記予備用記憶装置に格納するデータを読み出す、
ことを特徴とする付記２記載のストレージシステム。
【０２０９】
（付記４）  前記データ復旧制御部は、
前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていない場合には、前記第１の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
起動した前記第１の記憶装置から前記予備用記憶装置に格納するデータを読み出せなかった場合には、前記第２の記憶装置を再起動させ、再起動した前記第２の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする付記３記載のストレージシステム。
【０２１０】
（付記５）  前記データ復旧制御部は、
前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていない場合には、前記第１の記憶装置が故障してから、前記アクセス制御部が前記予備用記憶装置にデータを書き込み可能になるまでの期間に、前記第２の記憶装置における前記読み出しに失敗したデータの位置に対して前記アクセス制御部によってデータが書き込まれたかを判定し、
データが書き込まれていない場合には、前記第１の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
データが書き込まれていた場合には、前記第２の記憶装置を再起動させ、再起動した前記第２の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする付記３記載のストレージシステム。
【０２１１】
（付記６）  前記予備用記憶装置における全記憶領域は、あらかじめデータの読み出しエラーが発生する状態とされ、
前記データ復旧制御部は、前記リビルド制御部が前記第２の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置からのデータ読み出しを実行し、
データを正常に読み出すことができた場合には、当該データについての前記リビルド処理が完了していると判定し、
データの読み出しエラーが発生した場合には、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていないと判定する、
ことを特徴とする付記３〜５のいずれか１つに記載のストレージシステム。
【０２１２】
（付記７）  前記データ復旧制御部は、
前記リビルド制御部が前記第２の記憶装置からのデータ読み出しに失敗したとき、前記第１の記憶装置が故障してから現在までの期間に、前記第２の記憶装置における読み出しに失敗したデータの位置に対して前記アクセス制御部によってデータが書き込まれたかを判定し、
データが書き込まれていない場合には、前記第１の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
データが書き込まれていた場合には、前記第２の記憶装置を再起動させ、再起動した前記第２の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする付記２記載のストレージシステム。
【０２１３】
（付記８）  前記データ復旧制御部は、前記第１の記憶装置が故障した後、前記ホスト装置からの読み出し要求に応じた前記第２の記憶装置からのデータ読み出しに失敗したとき、前記第１の記憶装置における読み出しを要求されたデータに対応する位置からデータを読み出すことを特徴とする付記１記載のストレージシステム。
【０２１４】
（付記９）  複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置において、
前記ストレージ制御装置は、
前記複数の記憶装置のうちの第１の記憶装置が故障すると、前記第１の記憶装置に記録されていたデータと同一のデータを予備用記憶装置に格納するリビルド処理を実行するリビルド制御部と、
前記リビルド処理を実行中の前記リビルド制御部が、前記複数の記憶装置のうちの第２の記憶装置からのデータ読み出しに失敗したとき、前記第１の記憶装置から前記予備用記憶装置に格納するデータを読み出すデータ復旧制御部と、
を有することを特徴とするストレージ制御装置。
【０２１５】
（付記１０）  ホスト装置からのアクセス要求に応じて前記複数の記憶装置内のデータにアクセスするアクセス制御部であって、前記第１の記憶装置が故障したとき、前記複数の記憶装置のうちの前記第１の記憶装置を除く残りの記憶装置を用いて、前記ホスト装置からのアクセス要求に応じたアクセス処理を継続するアクセス制御部をさらに有することを特徴とする付記９記載のストレージ制御装置。
【０２１６】
（付記１１）  前記アクセス制御部は、前記リビルド処理の実行中に前記ホスト装置から書き込み要求を受けたとき、前記第１の記憶装置に書き込むべきデータがある場合には、当該データを前記予備用記憶装置に書き込み、
前記データ復旧制御部は、
前記リビルド制御部が前記第２の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれているかを判定し、
データが書き込まれている場合には、当該データについての前記リビルド処理が完了していると判定し、
データが書き込まれていない場合には、前記第１の記憶装置から前記予備用記憶装置に格納するデータを読み出す、
ことを特徴とする付記１０記載のストレージ制御装置。
【０２１７】
（付記１２）  前記データ復旧制御部は、
前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていない場合には、前記第１の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
起動した前記第１の記憶装置から前記予備用記憶装置に格納するデータを読み出せなかった場合には、前記第２の記憶装置を再起動させ、再起動した前記第２の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする付記１１記載のストレージシステム。
【０２１８】
（付記１３）  複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置におけるストレージ制御方法であって、
前記複数の記憶装置のうちの第１の記憶装置が故障すると、前記第１の記憶装置に記録されていたデータと同一のデータを予備用記憶装置に格納するリビルド処理を実行し、
前記リビルド処理において前記複数の記憶装置のうちの第２の記憶装置からのデータ読み出しに失敗したとき、前記第１の記憶装置から前記予備用記憶装置に格納するデータを読み出す、
ことを特徴とするストレージ制御方法。
【０２１９】
（付記１４）  ホスト装置からのアクセス要求に応じて前記複数の記憶装置内のデータにアクセスするアクセス処理をさらに含み、
前記アクセス処理では、前記第１の記憶装置が故障したとき、前記複数の記憶装置のうちの前記第１の記憶装置を除く残りの記憶装置を用いて、前記ホスト装置からのアクセス要求に応じたアクセス処理を継続する、
ことを特徴とする付記１３記載のストレージ制御方法。
【０２２０】
（付記１５）  前記アクセス処理では、前記リビルド処理の実行中に前記ホスト装置から書き込み要求を受けたとき、前記第１の記憶装置に書き込むべきデータがある場合には、当該データを前記予備用記憶装置に書き込み、
前記リビルド処理において前記第２の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における読み出しに失敗したデータに対応する位置に対して、前記アクセス処理によってデータが書き込まれているかを判定し、
データが書き込まれている場合には、当該データについての前記リビルド処理が完了していると判定し、
データが書き込まれていない場合には、前記第１の記憶装置から前記予備用記憶装置に格納するデータを読み出す、
ことを特徴とする付記１４記載のストレージ制御方法。
【０２２１】
（付記１６）  前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して、前記アクセス処理によってデータが書き込まれていない場合には、前記第１の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
起動した前記第１の記憶装置から前記予備用記憶装置に格納するデータを読み出せなかった場合には、前記第２の記憶装置を再起動させ、再起動した前記第２の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする付記１５記載のストレージ制御方法。
【０２２２】
（付記１７）  前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して、前記アクセス処理によってデータが書き込まれていない場合には、前記第１の記憶装置が故障してから、前記アクセス制御部が前記予備用記憶装置にデータを書き込み可能になるまでの期間に、前記第２の記憶装置における前記読み出しに失敗したデータの位置に対して、前記アクセス処理によってデータが書き込まれたかを判定し、
データが書き込まれていない場合には、前記第１の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
データが書き込まれていた場合には、前記第２の記憶装置を再起動させ、再起動した前記第２の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする付記１５記載のストレージ制御方法。
【０２２３】
（付記１８）  前記予備用記憶装置における全記憶領域は、あらかじめデータの読み出しエラーが発生する状態とされ、
前記リビルド処理において前記第２の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置からのデータ読み出しを実行し、
データを正常に読み出すことができた場合には、当該データについての前記リビルド処理が完了していると判定し、
データの読み出しエラーが発生した場合には、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていないと判定する、
ことを特徴とする付記１５〜１７のいずれか１つに記載のストレージ制御方法。
【０２２４】
（付記１９）  前記リビルド処理において前記第２の記憶装置からのデータ読み出しに失敗したとき、前記第１の記憶装置が故障してから現在までの期間に、前記第２の記憶装置における読み出しに失敗したデータの位置に対して、前記アクセス処理によりデータが書き込まれたかを判定し、
データが書き込まれていない場合には、前記第１の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
データが書き込まれていた場合には、前記第２の記憶装置を再起動させ、再起動した前記第２の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする付記１４記載のストレージ制御方法。
【０２２５】
（付記２０）  前記第１の記憶装置が故障した後、前記ホスト装置からの読み出し要求に応じた前記第２の記憶装置からのデータ読み出しに失敗したとき、前記第１の記憶装置における読み出しを要求されたデータに対応する位置からデータを読み出すことを特徴とする付記１３記載のストレージ制御方法。
【符号の説明】
【０２２６】
１  ストレージシステム
１０  ストレージ制御装置
１１  リビルド制御部
１２  データ復旧制御部
２１，２２，３１  記憶装置
【図１】
0005768587.tif 000002
【図２】
0005768587.tif 000003
【図３】
0005768587.tif 000004
【図４】
0005768587.tif 000005
【図５】
0005768587.tif 000006
【図６】
0005768587.tif 000007
【図７】
0005768587.tif 000008
【図８】
0005768587.tif 000009
【図９】
0005768587.tif 000010
【図１０】
0005768587.tif 000011
【図１１】
0005768587.tif 000012
【図１２】
0005768587.tif 000013
【図１３】
0005768587.tif 000014
【図１４】
0005768587.tif 000015
【図１５】
0005768587.tif 000016
【図１６】
0005768587.tif 000017
【図１７】
0005768587.tif 000018
【図１８】
0005768587.tif 000019
【図１９】
0005768587.tif 000020
【図２０】
0005768587.tif 000021
【図２１】
0005768587.tif 000022
【図２２】
0005768587.tif 000023
【図２３】
0005768587.tif 000024
【図２４】
0005768587.tif 000025
【図２５】
0005768587.tif 000026
【図２６】
0005768587.tif 000027