"複数の記憶装置と、前記複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置と、前記複数の記憶装置のいずれかの代わりに使用される予備用記憶装置とを備えたストレージシステムにおいて、前記ストレージ制御装置は、前記複数の記憶装置のうちの第1の記憶装置が故障すると、前記第1の記憶装置に記録されていたデータと同一のデータを前記予備用記憶装置に格納するリビルド処理を実行するリビルド制御部と、前記リビルド処理を実行中の前記リビルド制御部が、前記複数の記憶装置のうちの第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出すデータ復旧制御部と、を有することを特徴とするストレージシステム。前記ストレージ制御装置は、ホスト装置からのアクセス要求に応じて前記複数の記憶装置内のデータにアクセスするアクセス制御部であって、前記第1の記憶装置が故障したとき、前記複数の記憶装置のうちの前記第1の記憶装置を除く残りの記憶装置を用いて、前記ホスト装置からのアクセス要求に応じたアクセス処理を継続するアクセス制御部をさらに有することを特徴とする請求項1記載のストレージシステム。前記アクセス制御部は、前記リビルド処理の実行中に前記ホスト装置から書き込み要求を受けたとき、前記第1の記憶装置に書き込むべきデータがある場合には、当該データを前記予備用記憶装置に書き込み、前記データ復旧制御部は、前記リビルド制御部が前記第2の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれているかを判定し、データが書き込まれている場合には、当該データについての前記リビルド処理が完了していると判定し、データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出す、ことを特徴とする請求項2記載のストレージシステム。前記データ復旧制御部は、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、起動した前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出せなかった場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、ことを特徴とする請求項3記載のストレージシステム。前記データ復旧制御部は、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていない場合には、前記第1の記憶装置が故障してから、前記アクセス制御部が前記予備用記憶装置にデータを書き込み可能になるまでの期間に、前記第2の記憶装置における前記読み出しに失敗したデータの位置に対して前記アクセス制御部によってデータが書き込まれたかを判定し、データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、データが書き込まれていた場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、ことを特徴とする請求項3記載のストレージシステム。前記予備用記憶装置における全記憶領域は、あらかじめデータの読み出しエラーが発生する状態とされ、前記データ復旧制御部は、前記リビルド制御部が前記第2の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置からのデータ読み出しを実行し、データを正常に読み出すことができた場合には、当該データについての前記リビルド処理が完了していると判定し、データの読み出しエラーが発生した場合には、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていないと判定する、ことを特徴とする請求項3~5のいずれか1項に記載のストレージシステム。前記データ復旧制御部は、前記リビルド制御部が前記第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置が故障してから現在までの期間に、前記第2の記憶装置における読み出しに失敗したデータの位置に対して前記アクセス制御部によってデータが書き込まれたかを判定し、データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、データが書き込まれていた場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、ことを特徴とする請求項2記載のストレージシステム。前記データ復旧制御部は、前記第1の記憶装置が故障した後、前記ホスト装置からの読み出し要求に応じた前記第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置における読み出しを要求されたデータに対応する位置からデータを読み出すことを特徴とする請求項1記載のストレージシステム。複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置において、前記ストレージ制御装置は、前記複数の記憶装置のうちの第1の記憶装置が故障すると、前記第1の記憶装置に記録されていたデータと同一のデータを予備用記憶装置に格納するリビルド処理を実行するリビルド制御部と、前記リビルド処理を実行中の前記リビルド制御部が、前記複数の記憶装置のうちの第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出すデータ復旧制御部と、を有することを特徴とするストレージ制御装置。複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置におけるストレージ制御方法であって、前記複数の記憶装置のうちの第1の記憶装置が故障すると、前記第1の記憶装置に記録されていたデータと同一のデータを予備用記憶装置に格納するリビルド処理を実行し、前記リビルド処理において前記複数の記憶装置のうちの第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出す、ことを特徴とするストレージ制御方法。ところで、ストレージシステムにおいて、例えばRAID-5で管理されている状態など、データが2重に冗長化された状態から、1つの記憶装置が故障すると、データの冗長性が失われた状態のままリビルド処理が行われる。このようなデータの冗長性が失われた状態で、さらに別の記憶装置からのデータの読み出しに失敗することがある。このような読み出しの失敗は、例えば、ディスク媒体面の部分的な欠損などによって発生し得る。データの冗長性が失われた状態で、さらに別の記憶装置からのデータの読み出しに失敗してしまうと、そのデータが失われてしまう。本発明はこのような課題に鑑みてなされたものであり、データロスト発生の可能性を低減したストレージシステム、ストレージ制御装置およびストレージ制御方法を提供することを目的とする。上記目的を達成するために、複数の記憶装置と、複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように複数の記憶装置に対するデータ記録を制御するストレージ制御装置と、複数の記憶装置のいずれかの代わりに使用される予備用記憶装置とを備えたストレージシステムが提供される。このストレージシステムにおいて、ストレージ制御装置は、リビルド制御部と、データ復旧制御部とを有する。リビルド制御部は、複数の記憶装置のうちの第1の記憶装置が故障すると、第1の記憶装置に記録されていたデータと同一のデータを予備用記憶装置に格納するリビルド処理を実行する。データ復旧制御部は、リビルド処理を実行中のリビルド制御部が、複数の記憶装置のうちの第2の記憶装置からのデータ読み出しに失敗したとき、第1の記憶装置から予備用記憶装置に格納するデータを読み出す。また、上記目的を達成するために、上記のストレージ制御装置と同様の処理を実行するストレージ制御装置およびストレージ制御方法が提供される。上記のストレージシステム、ストレージ制御装置およびストレージ制御方法によれば、データロストの発生の可能性を低減することができる。以下、実施の形態について図面を参照して詳細に説明する。第1の実施の形態図1は、第1の実施の形態に係るストレージシステムの構成例を示す図である。ストレージシステム1は、ストレージ制御装置10と、複数の記憶装置とを備える。ストレージシステム1が備える記憶装置は、HDD、SSDSolidStateDriveなどの不揮発性記憶装置である。図1では、ストレージシステム1が備える記憶装置として、記憶装置21,22,31を例示している。ストレージ制御装置10は、図示しないホスト装置からの要求に応じて、ストレージシステム1内の記憶装置に対するアクセスを制御する。また、ストレージ制御装置10は、記憶装置へのアクセス処理を、それぞれ複数の記憶装置の記憶領域によって構成される論理記憶領域ごとに管理する。以下、このような論理記憶領域をRLURAIDLogicalUnitと呼ぶ。図1では例として、記憶装置21,22の各記憶領域が、1つのRLUに属している。ストレージ制御装置10は、RLUに属する複数の記憶装置を、RLUに記録するデータが異なる記憶装置の記憶領域に冗長化されるように管理する。これにより、RLUに属するいずれかの記憶装置が故障した場合でも、RLUに記録されたデータは失われない。なお、RLUの管理に使用される方法としては、RAID-1,4,5などがある。さらに、ストレージシステム1には、RLUに属するいずれかの記憶装置の代わりに使用される予備用記憶装置が、あらかじめ用意されている。図1では例として、記憶装置31が予備用であるものとする。ストレージ制御装置10は、リビルド制御部11と、データ復旧制御部12とを備える。リビルド制御部11およびデータ復旧制御部12の各処理は、例えば、ストレージ制御装置10が備えるCPUCentralProcessingUnitが所定のプログラムを実行することで実現される。リビルド制御部11は、RLUに属する1つの記憶装置ここでは記憶装置22とするが故障するとステップS1、故障した記憶装置22に記録されていたデータと同一のデータを予備用の記憶装置31に格納するリビルド処理を実行するステップS2。RLUがRAID-1で管理されている場合、リビルド制御部11は、RLUに属する他方の記憶装置21から読み出したRLUのデータを、予備用の記憶装置31にコピーする。また、RLUがRAID-4,5のいずれかで管理されている場合ただしこの場合、RLUは3つ以上の記憶装置によって構成される、リビルド制御部11は、RLUに属する故障していないすべての記憶装置からデータを読み出し、読み出したデータを基に故障した記憶装置に記録されていたデータを計算し、算出されたデータを予備用の記憶装置に格納する。データ復旧制御部12は、リビルド処理中において、リビルド制御部11がデータの読み出しに失敗したときステップS3、予備用の記憶装置31に格納すべきデータをサルベージする復旧させる処理を行う。図1では、リビルド処理中に記憶装置21からのデータ読み出しに失敗した場合を示している。データ復旧制御部12は、故障している記憶装置22からのデータ読み出しを試す。例えば、データ復旧制御部12は、故障している記憶装置22を再起動させステップS4、再起動した記憶装置22から、読み出しに失敗したデータに対応する、予備用の記憶装置31に格納すべきデータを読み出すステップS5。ここで言う再起動とは、故障中の記憶装置22の電源オフおよび電源オンを行って、記憶装置22をリセットする処理である。なお、例えば、記憶装置22の故障発生ステップS1の後に記憶装置22の電源をオフした場合には、ステップS4の時点では記憶装置22の電源が再度オンにされる。逆に、記憶装置22の故障発生ステップS1の後に記憶装置22の電源がオンのままになっていた場合、データ復旧制御部12は、例えば、再起動の前に記憶装置22からのデータ読み出しを実行し、読み出しができなかった場合に記憶装置22を再起動して、再起動後の記憶装置22から再度読み出しを実行してもよい。記憶装置22からのデータ読み出しに成功した場合すなわち、データのサルベージに成功した場合、データ復旧制御部12は、読み出したデータを予備用の記憶装置31に格納する。このようなサルベージ処理により、リビルド処理時にデータの読み出しに失敗した場合でも、読み出しに失敗したデータに対応する、予備用の記憶装置31に格納すべきデータを復元できる可能性が生じる。従って、データロストが発生する可能性を低減することができる。なお、ストレージ制御装置10は、RLUに属する記憶装置22の故障が発生した後も、RLUに属する残りの記憶装置21を用いて、ホスト装置からの要求に応じたRLUへのアクセス処理を継続できる。データ復旧制御部12による上記のサルベージ処理では、ホスト装置からの要求に応じたアクセス処理には使用されていない、故障中の記憶装置21が再起動される。このため、ホスト装置からの要求に応じたアクセス処理に対して、サルベージ処理が与える影響が小さく、ホスト装置への応答速度が大きく低下しないようにすることができる。第2の実施の形態図2は、第2の実施の形態に係るストレージシステムの全体構成例を示す図である。図2に示すストレージシステム100は、CEControllerEnclosure200と、DEDriveEnclosure300とを含む。また、CE200には、ホスト装置400が接続されている。CE200は、CMControllerModule201,202を備える。CM201,202のそれぞれは、ホスト装置400からのI/OInOut要求に応じて、DE300内の記憶装置に対するデータの読み書きを行う。CM201,202は、DE300内の記憶装置によって実現される物理記憶領域をRAIDによって管理し、これらの物理記憶領域に対するアクセスを制御する。なお、CM201,202は、例えばルータなどを介して互いに接続されていてもよい。また、CMは、CE200内に1つのみ設けられてもよいし、3つ以上設けられてもよい。ただし、CMが複数設けられることで、DE300に対するアクセス制御系統が冗長化され、アクセス制御処理の信頼性が向上する。DE300は、CM201,202からのアクセス制御対象となる複数の記憶装置を備える。本実施の形態において、DE300は、記憶装置としてHDDを備えるディスクアレイ装置である。なお、DE300が備える記憶装置としては、SSDなどの他の種類の不揮発性記憶装置を使用することもできる。また、CE200には、複数のDE300が接続されていてもよい。ホスト装置400は、ユーザの操作に応じて、CM201,202に対して、DE300内のHDDへのアクセスを要求する。ホスト装置400は、例えば、ユーザの操作に応じて、CM201,202のいずれかを通じて、DE300内のHDDからのデータの読み出しや、DE300内のHDDに対するデータの書き込みを行うことができる。なお、CE200内のCM201,202は、ともに同様の構成を有し、同様の処理を実行可能である。そこで、以下、CM201についてのみ説明し、CM202についての説明を省略する。図3は、CMのハードウェア構成例を示す図である。CM201は、CPU211によって装置全体が制御されている。CPU211には、RAMRandomAccessMemory212および複数の周辺機器が、バス217を介して接続されている。RAM212は、CM201の主記憶装置として使用され、CPU211に実行させるプログラムの少なくとも一部や、このプログラムによる処理に必要な各種データを一時的に記憶する。CPU211には、周辺機器の例として、SSD213、入力I/Fインタフェース214、CAChannelAdapter215およびDIDriveInterface216が接続されている。SSD213は、CM201の二次記憶装置として使用され、CPU211によって実行されるプログラムやその実行に必要な各種のデータなどを記憶する。なお、二次記憶装置としては、例えば、HDDなどの他の種類の不揮発性記憶装置が使用されてもよい。入力I/F214には、操作キーなどを備える入力装置214aが接続されている。入力I/F214は、入力装置214aに対する操作入力に応じた信号をCPU211に出力する。CA215は、ホスト装置400とCM201との間でデータを送受信するインタフェース処理を実行する。CA215とホスト装置400とは、例えば、FCFibreChannel規格に従って通信する。DI216は、DE300とCM201との間でデータを送受信するインタフェース処理を実行する。DI216とDE300とは、例えば、SASSerialAttachedSCSI,SCSI:SmallComputerSystemInterface規格に従って通信する。図4は、CMの処理機能の構成例を示すブロック図である。CM201は、アクセス制御部220、リビルド制御部230およびサルベージ制御部240を備える。アクセス制御部220、リビルド制御部230およびサルベージ制御部240の処理は、例えば、CM201のCPU211が所定のプログラムを実行することで実現される。また、CM201の記憶装置には、RAID管理テーブル250、バッドデータBadData管理テーブル260、非冗長ライト管理テーブル270およびサルベージ管理テーブル280が記憶される。これらの各テーブルは、例えばSSD213に記憶される。アクセス制御部220は、ホスト装置400からのI/O要求に応じて、DE300内のHDDにアクセスする。アクセス制御部220は、例えば、ホスト装置400からデータの読み出し要求を受けたとき、要求されたデータをDE300内の所定のHDDから読み出して、ホスト装置400に送信する。一方、アクセス制御部220は、ホスト装置400からデータの書き込み要求を受けたとき、ホスト装置400から受信した書き込み対象のデータを、DE300内の所定のHDDに書き込む。なお、以下の説明では、アクセス制御部220がホスト装置400からの読み出し要求に応じてHDDからデータを読み出すことをホストリードすると呼ぶ。また、アクセス制御部200がホスト装置400からの書き込み要求に応じてHDDにデータを書き込むことをホストライトすると呼ぶ。また、アクセス制御部220は、RAID管理テーブル250に設定された情報に基づいて、DE300内のHDDに記録するデータをRAIDによって管理する。アクセス制御部220は、RLURAIDLogicalUnitごとに記録データを所定のRAIDレベルによって管理する。RLUは、DE300に搭載された複数のHDDの物理記憶領域を組み合わせて構成される論理記憶領域であり、RAIDグループとも呼ばれる。RAID管理テーブル250は、RLUごとに、RLUの識別番号、適用されるRAIDレベル、RLUに属するHDDや論理ボリュームを示す情報、RLUの制御状態を示す情報などを保持する。アクセス制御部220は、RAID管理テーブル250を参照することで、例えば、ホストライトする際の書き込み先のHDDや、その書き込みの際に用いるRAIDレベルなどを判定する。なお、本実施の形態では、アクセス制御部220は、各RLUをデータが2重に冗長化されるRAIDレベルで管理する。データが2重に冗長化されるRAIDレベルとしては、例えば、RAID-1,RAID-4,RAID-5がある。また、アクセス制御部220は、RLUに属するHDDのうちの1つが故障して、そのRLUに記録されたデータの冗長性が失われてから、ホットスペアのHDDに対するリビルド処理を開始するための準備が整うまでの期間に、そのRLUに対するホストライトを行ったとき、データの書き込み先の位置情報を非冗長ライト管理テーブル270に登録する。リビルド制御部230は、RLUに属するHDDのうちの1つが故障したとき、故障したHDDに記録されていたデータをホットスペアのHDDに書き込むリビルド処理を実行する。リビルド制御部230は、リビルド処理の実行の際、RAID管理テーブル250を参照することで、故障したHDDに記録されていたデータをどのように生成するかを決定する。また、リビルド制御部230は、リビルド処理の実行中に、RLUに属するHDDのうち故障したHDD以外のHDDからのデータの読み出しに失敗すると、読み出しに失敗したデータの位置情報をバッドデータ管理テーブル260およびサルベージ管理テーブル280に登録するとともに、サルベージ制御部240に、読み出しに失敗したデータのサルベージを要求する。なお、アクセス制御部220は、バッドデータ管理テーブル260に登録された位置のデータについての読み出し要求をホスト装置400から受けたとき、ホスト装置400に対してエラー応答する。サルベージ制御部240は、リビルド制御部230によるリビルド処理において読み出しに失敗したデータをサルベージする。サルベージ管理テーブル280には、サルベージ処理の対象とされたデータすなわち、リビルド処理において読み出しに失敗したデータについての位置情報が登録されている。サルベージ制御部240は、サルベージ管理テーブル280に登録された位置情報に対応するデータについて順にサルベージ処理を実行することで、リビルド処理に対して非同期でサルベージ処理を実行できる。また、サルベージ制御部240は、非冗長ライト管理テーブル270などを参照しながら、後述するいくつかの処理パターンに従ってデータのサルベージを試みる。図5は、RAID管理テーブルに登録される情報の例を示す図である。RAID管理テーブル250には、RLUごとにレコード251が登録される。各レコード251には、対応するRLUを識別するRLU番号が付与されている。以下の説明では、xx番のRLU番号をRLUxxと表記し、RLU番号がRLUxxであるRLUを、単にRLUxxと呼ぶ。各レコード251には、RAIDレベル、ディスク番号、論理ユニット番号、HSディスク番号およびRAID状態が登録される。RAIDレベルは、対応するRLUの通常運用時におけるRAIDレベルを示す。本実施の形態では、RAIDレベルには、RAID-1,RAID-4,RAID-5のいずれかが設定される。ディスク番号は、対応するRLUを構成する物理記憶領域が属するHDDの識別番号を示す。RLUは、複数のHDDの物理記憶領域によって構成されるので、ディスク番号は、それらの複数のHDDのそれぞれについて登録される。なお、以下の説明では、xx番のディスク番号をDISKxxと表記し、ディスク番号がDISKxxであるHDDを、単にDISKxxと呼ぶ。また、ディスク番号によって識別されるHDDのそれぞれには、ディスク状態が登録される。ディスク状態は、対応するHDDの動作状態を示す。ディスク状態には、例えば、正常、故障およびHSに退避中のいずれかが設定される。正常は、対応するHDDが正常に動作していることを示し、故障は、対応するHDDが故障していることを示す。HSに退避中は、対応するHDDに記録されていたデータについてのホットスペアのHDDへのリビルド処理が完了し、そのホットスペアのHDDを組み込んでRLUが運用されていることを示す。論理ユニット番号は、対応するRLUに設定された、論理ユニットまたは論理ボリュームと呼ばれる論理記憶領域の識別番号を示す。1つのRLUには複数の論理ユニットを設定可能であり、論理ユニット番号は、設定された論理ユニットごとに登録される。なお、以下の説明では、論理ユニット番号をLUNと省略して呼ぶ。また、xx番の論理ユニットをLUNxxと表記し、論理ユニット番号がLUNxxである論理ユニットを、単にLUNxxと呼ぶ。また、論理ユニット番号によって識別される論理ユニットのそれぞれには、論理領域情報および物理領域情報が登録される。論理領域情報には、論理ユニットに付与された論理アドレスLBA:LogicalBlockAddressの範囲が登録される。物理領域情報には、論理ユニットに対して割り当てられた、各HDDにおける物理アドレスの範囲が登録される。なお、CM201は、アクセス先とするデータのLUNおよびLBAが指定されると、LUNが示す論理ユニットが属するRLUのRAIDレベルと、その論理ユニットに割り当てられたHDDの物理領域情報とから、データのアクセス先とするHDDやHDD内のブロックの位置ストライプ番号などを特定することができる。HSディスク番号は、リビルド処理中のみ設定され、リビルド先とされているホットスペアのHDDを識別する番号を示す。RAID状態は、対応するRLUの状態を示す。RAID状態には、例えば、通常運用状態、非冗長状態、リビルド中およびHSに退避中のいずれかが設定される。通常運用状態は、RLUに属するいずれのHDDにも異常がなく、データの冗長性を有する状態でRLUが正常に運用されていることを示す。非冗長状態は、RLUに属するいずれか1つのHDDが故障し、データの冗長性がない状態を示す。ただし、データの冗長性がない状態でも、HSディスク番号にホットスペアのHDDの識別番号が登録されて、リビルド処理の準備が整ってから、リビルド処理が完了するまでの間、RAID状態にはリビルド中が設定される。HSに退避中は、ホットスペアのHDDへのリビルド処理が完了し、そのホットスペアのHDDを組み込んでRLUが運用されている状態を示す。図6は、バッドデータ管理テーブルに登録される情報の例を示す図である。バッドデータ管理テーブル260には、リビルド制御部230またはサルベージ制御部240によってデータの読み出しが不可能と判定された、論理ユニット内のデータの位置情報が、論理ユニットの番号LUNと論理アドレスLBAとの組み合わせとして登録される。本実施の形態では、リビルド処理中にデータの読み出しに失敗すると、読み出しに失敗したデータに対応するLUNおよびLBAが、リビルド制御部230によってバッドデータ管理テーブル260に登録される。また、バッドデータ管理テーブル260に登録されたデータについてのサルベージ処理が成功した場合には、そのデータに対応する位置情報はバッドデータ管理テーブル260から消去される。一方、サルベージ処理が不可能であった場合、そのデータについての位置情報はバッドデータ管理テーブル260に登録されたままになる。なお、バッドデータ管理テーブル260のデータ構造は、図6の例に限らず、例えば、LUNごとの全LBAに対して、読み出し失敗が発生したか否かを示すフラグ情報が対応付けられた構造であってもよい。また、バッドデータ管理テーブル260には、位置情報として、LUNおよびLBAの代わりに、例えば、HDDのディスク番号およびHDDにおける物理アドレスが登録されてもよい。図7は、非冗長ライト管理テーブルに登録される情報の例を示す図である。非冗長ライト管理テーブル270には、RLUのRAID状態が非冗長状態であるときに、そのRLUに属する論理ユニットに対してホストライトが実行されたとき、書き込み先の位置を示す情報が、LUNとLBAとの組み合わせとして登録される。なお、非冗長ライト管理テーブル270のデータ構造は、図7の例に限らず、例えば、論理ユニットごとの全LBAに対して、非冗長状態におけるホストライトが実行されたか否かを示すフラグ情報が対応付けられた構造であってもよい。また、非冗長ライト管理テーブル270には、位置情報として、LUNおよびLBAの代わりに、例えば、HDDのディスク番号およびHDDにおける物理アドレスが登録されてもよい。図8は、サルベージ管理テーブルに登録される情報の例を示す図である。サルベージ管理テーブル280は、サルベージ処理の対象とするデータを示す情報を一時的に保持することで、サルベージ制御部240がサルベージ処理をリビルド処理とは非同期に実行できるようにするものである。サルベージ管理テーブル280には、サルベージ処理の対象とするデータすなわち、リビルド処理時に読み出しに失敗したデータを示す位置情報が、論理ユニットの番号LUN、論理アドレスLBAおよびディスク番号の組み合わせとして登録される。なお、サルベージ管理テーブル280には、LUNおよびLBAの代わりに、ディスク番号が示すHDDにおける物理アドレスが登録されてもよい。また、サルベージ処理に対象とするデータが通常時にRAID-1で管理されているデータである場合、サルベージ管理テーブル280には、ディスク番号のようなHDDを識別する情報が登録されなくてもよい。なぜなら、RAID-1で管理されている場合、サルベージ制御部240は、データの読み出しに失敗したHDDが、RLUに属する2台のHDDのうち故障していないHDDであることを、容易に判別可能であるからである。図9は、HDDにおけるデータ記録フォーマットの例を示す図である。DE300内の各HDDに記録されるデータは、一定長のブロックに分割される。また、各HDDにおいては、ブロックが格納されるブロック領域に対してBCCBlockCheckCodeが付与されている。通常、BCCには誤り検出コードが記録され、ブロックが読み出されるとき、そのブロックに対応するBCCを基に、読み出されるブロックの整合性がチェックされる。また、BCCには、対応するブロック領域の属性を示す情報を記録しておくこともできる。例えば、リビルド先となるホットスペアのHDDにおいては、リビルド処理中にブロック領域に書き込むべきデータを生成できなかった場合、そのブロック領域に対応するBCCに、バッドデータを示す情報が書き込まれる。次に、サルベージ処理について説明する。まず、図10は、サルベージ処理が起動される状態の例を示す図である。この図10では例として、RAID-1の場合について説明する。図10の状態1において、RLU00は、DISK00,01の各記憶領域によって構成され、これらの記憶領域がRAID-1で管理されている。この状態で、DISK01の故障が発生するとステップS11、リビルド制御部230は、DISK01に記録されていたRLU00のデータをホットスペアのDISK10に格納するリビルド処理を実行するステップS12。RLU00にはRAID-1が設定されているので、リビルド処理では、DISK00に記録されているRLU00のデータがそのまま読み出されて、ホットスペアのDISK10にコピーされる。ここで、リビルド処理が正常に完了すると、DISK01に記録されていたRLU00のデータがホットスペアのDISK10に完全に復元される。このとき、故障したDISK01の代わりにホットスペアのDISK10がRLU00に組み込まれることで、アクセス制御部220は、RLU00におけるデータの冗長性が完全に回復した状態で、ホストリードやホストライトを続行できる。しかしながら、図10の状態2のように、リビルド処理の実行中に、リビルド制御部230がDISK00中のあるブロックからのデータ読み出しに失敗するとステップS13、読み出しに失敗したデータをホットスペアのDISK10にコピーすることができなくなり、このデータを失ってしまう。これに対して、サルベージ制御部240は、読み出しに失敗したデータのサルベージ処理を行い、ホットスペアのDISK10における対応する位置にリビルドデータが格納されるようにする。具体的には、リビルド制御部230は、リビルド処理中にDISK00からのデータ読み出しに失敗すると、読み出しに失敗したデータの位置情報をサルベージ管理テーブル280に登録するステップS14。サルベージ制御部240は、サルベージ管理テーブル280に登録された位置情報が示すデータについてのサルベージ処理を実行する。また、リビルド制御部230は、読み出しに失敗したデータの位置情報をバッドデータ管理テーブル260にも登録するステップS15。アクセス制御部220は、バッドデータ管理テーブル260に登録された位置情報に対応するデータに対する読み出し要求を、ホスト装置400から受信したとき、ホスト装置400に対してエラー応答する。これにより、アクセス制御部220による、データの読み出しに失敗したデータへの無駄なアクセスの発生が防止される。なお、この時点では、バッドデータ管理テーブル260に対して位置情報が登録されなくてもよい。例えば、読み出しに失敗したデータについてのサルベージが不可能であったときに、サルベージ制御部240によってバッドデータ管理テーブル260に位置情報が登録されてもよい。なお、上記のステップS14,S15の処理順は、逆であってもよいし、あるいは並列に実行されてもよい。ところで、前述のように、リビルド処理とは、故障したHDDに記録されていたデータを、リビルド先のHDD本実施の形態ではホットスペアのHDDに格納することである。図10の例のように、RAID-1のRLUにおけるリビルド処理では、故障していないHDDから読み出されたデータが、そのままリビルド先のHDDにコピーされる。サルベージ処理とは、本来、リビルド処理時に読み出しの失敗が発生した場合でも、何らかの方法により、故障したHDDに記録されていたデータがリビルド先のHDDに格納された状態にすることである。しかしながら、RAID-1のRLUにおけるサルベージ処理は、読み出しに失敗したデータと同じデータが、リビルド先のHDDに格納された状態にすることと同等である。これに対して、RAID-4,5のRLUにおけるリビルド処理では、故障したHDDに記録されていたデータは、故障していない他のHDDから読み出したデータを基に計算によってリビルドされる。このため、RAID-4,5のRLUにおけるサルベージ処理は、RAID-1の場合とは異なり、読み出しに失敗したデータと同じデータがリビルド先のHDDに格納された状態にすることとは同等でない。そこで、以下の説明では、主としてRAID-1のRLUにおけるサルベージ処理の手順について説明し、必要に応じて、RAID-4,5のRLUにおけるサルベージ処理の手順についても補足説明する。なお、RAID-4,5の場合について補足説明する場合には、RLUがDISK00~04の記憶領域によって構成されるものとする。サルベージ制御部240は、次のサルベージ方法1~3を利用してサルベージ処理を実行する。サルベージ方法1:ホットスペアのHDDに記録されたデータを基にサルベージする。サルベージ方法2:故障したHDDを再起動させ、少なくとも再起動したHDDから読み出したデータを基にサルベージする。サルベージ方法3:データの読み出しに失敗したHDDを再起動させ、少なくとも再起動したHDDから読み出したデータを基にサルベージする。以下、上記のサルベージ方法1~3について、詳細に説明する。図11は、サルベージ方法1の実行に必要な前処理を示す図である。図11の状態11は、図10の状態1と同様に、RLU00を構成するDISK01の故障が発生した場合を示す。このとき、リビルド制御部230は、リビルド先とするホットスペアのHDDを選択するが、リビルド先とするホットスペアのHDDの全記憶領域を、あらかじめBCCエラー状態にしておく。ここで言うBCCエラー状態とは、ブロックのデータを読み出したときに、そのブロックに対応するBCCから読み出しエラーが検出されるように、BCCに何らかの値が設定されている状態である。ただし、BCCエラー状態では、BCCには、前述したバッドデータを示す情報以外の値が設定されることが望ましい。BCCエラー状態と、BCCがバッドデータを示す状態とを区別することで、BCCがバッドデータを示したとき、そのBCCに対応するブロックのデータについてはサルベージが不可能であったことを明確に認識できるようになる。ところで、アクセス制御部220は、DISK01が故障した後も、データの冗長性がない状態のままで、残りのDISK00を用いてRLU00に対するホストリードおよびホストライトを継続する。ただし、図11の状態12に示すように、リビルド先とするホットスペアのDISK10の準備が整ってから具体的には、RAID管理テーブル250におけるRLU00に対応するレコード251内のHSディスク番号にDISK10が設定されてから、リビルド処理が完了するまでの期間、アクセス制御部220は、ホスト装置400から書き込み要求を受けたときステップS21、DISK00だけでなく、リビルド先のDISK10に対してもホストライトを行うステップS22,S23。RLU00がRAID-1の場合、状態12では、ホスト装置400から書き込み要求されたデータをDISK00に書き込むステップS22とともに、同じデータを、ホットスペアのDISK10における対応するブロックにも書き込むステップS23。ホットスペアのDISK10では、データが書き込まれたブロックに対応するBCCに誤り検出コードが上書きされ、このブロックは正常に読み出し可能な状態になる。これにより、もしDISK10におけるホストライトされたブロックについて、リビルド処理が実行されていない場合でも、そのブロックには最新の書き込みデータが格納されていることになる。ここで、RLU00がRAID-4,5のいずれかの場合について補足説明する。RAID-4,5のいずれかで運用されるRLUがDISK00~04の各記憶領域によって構成されている場合、通常運用時のホストライトは次のように行われる。アクセス制御部220は、書き込みを要求されたデータを一定長に分割する。アクセス制御部220は、例えば、連続する分割データD0~D3を基にパリティP0を計算する。RAID-4の場合、アクセス制御部220は、分割データD0~D3およびパリティP0を、それぞれあらかじめ決められたHDDに書き込む。一方、RAID-5の場合、アクセス制御部220は、分割データD0~D3およびパリティP0を、DISK00~04に分散させて書き込む。例えばDISK04が故障した状態で、新たな分割データD0~D3の書き込みが要求された場合、図11の状態12に示す前処理は次のように行われる。例えば、DISK04に書き込むべきデータが分割データD3である場合、アクセス制御部220は、他のDISK00~03に、分割データD0~D2、および、これらの分割データに基づくパリティP0を書き込むステップS22とともに、分割データD3をDISK10に書き込むステップS23。また、例えば、DISK04に書き込むべきデータがパリティP0である場合、アクセス制御部220は、他のDISK00~03に、分割データD0~D3を書き込むステップS22とともに、分割データD0~D3に基づくパリティP0を計算して、算出したパリティP0をDISK10に書き込むステップS23。ただし、分割データD0~D3のうち例えば分割データD3のみが更新される場合には、分割データD0~D2が記録されたHDDに対しては書き込みが行われない。従ってこの場合、故障したDISK04に対する書き込みが必ず行われる訳ではなく、DISK04に分割データD3またはパリティP0が書き込まれる場合のみ、DISK10に分割データD3またはパリティP0が書き込まれることになる。すなわち、RAID-1,4,5のいずれの場合でも、図11の状態12に示す前処理では、アクセス制御部220は、ホスト装置400から書き込みが要求されたとき、故障したHDDに書き込むべきデータがある場合には、そのデータをホットスペアのHDDに書き込む。図12は、サルベージ方法1の手順を示す図である。リビルド制御部230は、DISK01に記録されたデータについてのリビルド処理の際、図11の状態12のような、ホスト装置400からの要求に応じた書き込みがあったか否かに関係なく、DISK00内の読み出し対象領域の全域からのデータ読み出しを行う。図12の状態13に示すように、リビルド制御部230による、DISK01に記録されたデータについてのリビルド処理が実行されているときに、DISK00上のあるブロックからのデータ読み出しに失敗したとするステップS24。この場合、サルベージ制御部240は、読み出しに失敗したブロックに対応する、ホットスペアのDISK10のブロックに、データが書き込まれているかを判定する。この判定処理は、DISK10の対応するブロックからのデータ読み出しに成功するか否かによって行われるステップS25。DISK10のブロックからのデータ読み出しに成功した場合、そのブロックにはホストライトによる最新のデータがすでに格納されていることになるので、サルベージ制御部240は、データのサルベージに成功したと判断する。一方、DISK10のブロックからのデータ読み出し時にBCCエラーが検出された場合、サルベージ制御部240は、データのサルベージに失敗したと判断する。この場合、サルベージ制御部240は、他のサルベージ方法を試みる。なお、以上の図12に示したサルベージ方法1の手順は、RLU00がRAID-4,5のいずれかの場合でも同様である。すなわち、サルベージ制御部240は、ホットスペアのDISK10における対応するブロック読み出しに失敗したブロックと同じストライプ番号のブロックからのデータ読み出しに成功した場合、データのサルベージに成功したと判断する。次に、図13は、サルベージ方法2,3の実行に必要な前処理を示す図である。図13の状態21は、図10の状態1と同様に、RLU00を構成するDISK01の故障が発生した場合を示す。ただし、状態21は、DISK01が故障してから、リビルド先とするホットスペアのDISK10の準備が整うまで具体的には、RAID管理テーブル250におけるRLU00に対応するレコード251内のHSディスク番号にDISK10が設定されるまでの状態を示す。この状態21では、アクセス制御部220は、DISK00のみを用いてRLU00に対するホストリードおよびホストライトを継続する。サルベージ方法2,3の前処理として、アクセス制御部220は、状態21においてホスト装置400からRLU00に対する書き込み要求を受けるとステップS31、DISK00の対応するブロックにデータを書き込む。これとともに、アクセス制御部220は、データの書き込み位置を示す位置情報データを書き込んだブロックに対応するLUNおよびLBAを、非冗長ライト管理テーブル270に登録するステップS32。状態21においてホストライトが発生すると、書き込まれるデータは冗長性がない状態となる。従って、非冗長ライト管理テーブル270には、RLU00に記録されたデータのうち冗長性のないデータの位置情報が登録されることになる。なお、以上の状態21に示した前処理の手順は、RLU00がRAID-4,5のいずれかの場合でも同様であり、アクセス制御部220は、ホストライトした位置の情報を非冗長ライト管理テーブル270に登録する。図14は、サルベージ方法2の手順を示す図である。図14の状態22は、図13の状態21から、ホットスペアのDISK10に対するリビルド処理が開始された状態を示す。RLU00がRAID-1の場合、リビルド制御部230は、DISK00に記録されたRLU00のデータを読み出して、DISK10にコピーする。このようなリビルド処理中に、リビルド制御部230が、DISK00からのデータ読み出しに失敗したものとするステップS33。サルベージ制御部240は、DISK01が故障してから現在までの間に、DISK00における読み出しに失敗したブロック、またはそのブロックに対応するDISK10のブロックの少なくとも一方に対して、ホストライトが行われたかを判定する。具体的には、サルベージ制御部240は、前述のサルベージ方法1においてホットスペアのDISK10における対応するブロックからのデータ読み出しに失敗し、かつ、非冗長ライト管理テーブル270に、読み出しに失敗したブロックに対応する位置に対してホストライトが行われたことが登録されていない場合に、DISK00,10の少なくとも一方における対応するブロックに対してDISK01の故障から現在までにホストライトが行われていないと判定するステップS34。ホストライトが行われていないと判定された場合、DISK00からの読み出しに失敗したデータに対応する、ホットスペアのDISK10にリビルドすべきデータは、故障したDISK01にのみ存在する可能性が高い。このことから、サルベージ制御部240は、故障したDISK01を再起動させステップS35、再起動したDISK01から、DISK10にリビルドするデータを読み出すことができるかを試す。図14の状態23に示すように、サルベージ制御部240は、読み出しに失敗したDISK00のブロックに対応する、再起動したDISK01のブロックから、データを読み出す。データの読み出しに成功した場合、サルベージ制御部240は、読み出したデータを、ホットスペアのDISK10における同じストライプ番号に対応するブロックにコピーする。この場合、データのサルベージに成功したことになるステップS36。なお、以上の図14に示したサルベージ方法2の手順は、RLU00がRAID-4,5のいずれかの場合でも同様である。すなわち、サルベージ制御部240は、再起動したDISK01における対応するブロックからのデータの読み出しに成功すると、読み出したデータを、ホットスペアのDISK10における同じストライプ番号のブロックにコピーする。図15は、サルベージ方法3の手順を示す図である。図13の状態21からリビルド処理が開始され、リビルド処理中に、リビルド制御部230がDISK00からのデータ読み出しに失敗したものとするステップS41。サルベージ制御部240は、図15の状態31に示すように、非冗長ライト管理テーブル270に、読み出しに失敗したブロックに対応する位置に対してホストライトが行われたことが登録されているかを判定する。非冗長ライト管理テーブル270にホストライトが行われたことが登録されていた場合、読み出しに失敗したデータに対応するDISK01のブロックには、最新のデータが登録されていない。これとともに、読み出しに失敗したデータに対応するDISK10のブロックには、データが記録されておらず、このブロックはBCCエラー状態になっているはずである。このことから、サルベージ制御部240は、読み出しに失敗したものの、最新のデータが残っている可能性のあるDISK00を再起動させステップS43、再起動したDISK00における読み出し失敗位置から、データの読み出しを再度試みる。例えば、リビルド処理におけるデータ読み出しの失敗要因が一時的なものである場合などに、再起動後のデータ読み出しに成功する可能性がある。図15の状態32に示すように、サルベージ制御部240は、再起動したDISK00における読み出し失敗位置からのデータの読み出しに成功した場合、読み出したデータを基に、DISK10に記録すべきデータをサルベージするステップS44。RAID-1の場合、サルベージ制御部240は、再起動したDISK00から読み出したデータを、ホットスペアのDISK10における対応するブロックにコピーする。なお、RLU00がRAID-4,5のいずれかであり、RLU00の記憶領域がDISK00~DISK04で構成され、DISK04が故障し、DISK00からのデータ読み出しに失敗したものとすると、状態32のステップS44では、次のような処理が実行される。サルベージ制御部240は、サルベージ管理テーブル280に登録された位置情報を基に、データの読み出しに失敗したHDDを判別し、判別したHDDここではDISK00を再起動させる。サルベージ制御部240は、再起動したDISK00から読み出したデータと、残りの故障していないDISK01~03における同じストライプ番号に対応するブロックから読み出したデータとを基に、ホットスペアのDISK10に格納すべきデータを生成する。例えば、DISK00から分割データD0の読み出しに失敗し、この分割データD0に対応するパリティP0が故障したDISK04に記録されているとする。この場合、サルベージ制御部240は、再起動したDISK00から読み出した分割データD0と、残りの故障していないDISK01~03から読み出した分割データD1~D3とを基に、パリティP0を計算し、ホットスペアのDISK10に格納する。また、例えば、DISK00から分割データD0の読み出しに失敗し、故障したDISK04に分割データD3が記録されているとする。この場合、サルベージ制御部240は、再起動したDISK00から読み出した分割データD0と、残りの故障していないDISK01~03から読み出した分割データD1,D2およびパリティP0から、分割データD3を計算し、ホットスペアのDISK10に格納する。次に、上記のサルベージ方法1~3を用いたサルベージ処理について、フローチャートを用いて説明する。まず、図16は、リビルド処理手順の例を示すフローチャートである。[ステップS101]アクセス制御部220は、DE300内のHDDが故障したことを検出すると、故障したHDDのディスク番号と、そのHDDが属するRLUのRLU番号とを、リビルド制御部230に通知する。以下、RLU00に属する1つのHDDが故障したものとして、説明を続ける。アクセス制御部220からの通知を受けたリビルド制御部230は、RAID管理テーブル250からRLU00のレコード251を抽出し、抽出したレコード251において、故障したHDDのディスク番号に対応するディスク状態を故障に更新するとともに、RAID状態を非冗長状態に更新する。故障したHDDのディスク番号に対応するディスク状態が故障に更新されることで、故障したHDDはRLU00から切り離される。なお、故障したHDDは、RLU00から切り離された時点で、電源オフにされてもよい。あるいは、故障したHDDは、例えば、新たなHDDに交換される直前に電源オフにされてもよい。[ステップS102]リビルド制御部230は、リビルド先とするホットスペアのHDDを準備する。具体的には、リビルド制御部230は、リビルド先とするホットスペアのHDDを選択し、選択したHDDのディスク番号を、RAID管理テーブル250におけるRLU00のレコード251のHSディスク番号に登録する。さらに、リビルド制御部230は、RLU00のレコード251のRAID状態をリビルド中に更新する。これにより、ホットスペアのHDDの準備が完了し、リビルド処理を開始できる状態となる。[ステップS103]リビルド制御部230は、RLU00に属する論理ユニットからリビルド対象とするデータ領域を、所定数のLBA単位で選択する。リビルド制御部230は、選択したデータ領域に対応するデータのリビルドを実行する。ここで言うデータのリビルドとは、ホットスペアのHDDに対して格納するデータを生成することであり、以下、生成されたデータをリビルドデータと呼ぶ。例えば、RLU00が正常時にRAID-1で管理されている場合、リビルド制御部230は、RLU00に属する故障していないHDDから単にデータを読み出すことで、リビルドデータを生成する。一方、RLU00が正常時にRAID-4,5のいずれかで管理されている場合、リビルド制御部230は、RLU00に属する故障していないHDDの同一ストライプ番号の位置からデータを読み出し、読み出しデータを基にした計算によってリビルドデータを生成する。[ステップS104]ステップS103でのリビルドデータの生成時に、故障していないHDDからのデータ読み出しに成功した場合S104:No、リビルド制御部230は、ステップS105の処理を実行する。一方、故障していないHDDからのデータ読み出しに失敗して、リビルドデータを生成できなかった場合S104:Yes、リビルド制御部230は、ステップS106の処理を実行する。[ステップS105]リビルド制御部230は、ステップS103で生成したリビルドデータを、ホットスペアのHDDにおける対応する領域に格納する。[ステップS106]リビルド制御部230は、ステップS103で選択したデータ領域を示すLUNおよびLBAと、ステップS104でデータ読み出しに失敗したHDDのディスク番号とを、サルベージ管理テーブル280に登録する。また、リビルド制御部230は、ステップS103で選択したデータ領域を示すLUNおよびLBAを、バッドデータ管理テーブル260に登録する。なお、サルベージ管理テーブル280およびバッドデータ管理テーブル260のどちらに対して先に情報を登録するかは、特に限定されるものではない。[ステップS107]リビルド制御部230は、RLU00に属する全論理ユニットの全データ領域についてリビルド処理を完了したかを判定する。全データ領域のリビルド処理を完了していない場合S107:No、リビルド制御部230は、ステップS103の処理に戻り、次のデータ領域についてのリビルド処理を実行する。一方、全データ領域のリビルド処理を完了した場合S107:Yes、リビルド制御部230は、ステップS108の処理を実行する。[ステップS108]リビルド制御部230は、RLU00についてのサルベージ制御部240によるサルベージ処理が完了したかを判定する。ここでは、リビルド制御部230は、サルベージ管理テーブル280にRLU00に属する位置情報が登録されていない場合に、RLU00についてのサルベージ処理が完了したと判定する。なお、RLU00のリビルド処理時にデータの読み出しに失敗しなかった場合すなわち、ステップS104でNoと判定されなかった場合、サルベージ管理テーブル280には、RLU00に属する位置情報は登録されない。RLU00についてのサルベージ処理が完了したと判定するS108:Yesと、リビルド制御部230は、RAID管理テーブル250のRLU00のレコード251において、故障したHDDに対応するディスク状態をHSに退避中に更新するとともに、RAID状態をHSに退避中に更新する。これにより、リビルド処理が完了する。次に、図17は、アクセス制御部によるI/O処理手順の例を示すフローチャートである。この図17は、I/O処理対象のRLU00に属する1つのHDDが故障してから、RLU00のリビルド処理が完了するまでの期間におけるI/O処理を示す。この期間とは、RAID管理テーブル250のRLU00のレコード251において、故障したHDDに対応するディスク状態に故障が設定され、かつ、RAID状態が非冗長状態またはリビルド中が設定されている期間である。[ステップS121]アクセス制御部220は、ホスト装置400から、RLU00に対するI/O要求を受信する。[ステップS122]I/O要求が読み出し要求である場合S122:Yes、ステップS123の処理が実行される一方、I/O要求が書き込み要求である場合S122:No、ステップS126の処理が実行される。[ステップS123]ホスト装置400から読み出し要求を受信した場合S122:Yes、アクセス制御部220は、読み出し要求先のデータ領域の位置情報がバッドデータ管理テーブル260に登録されているかを判定する。アクセス制御部220は、対応する位置情報がバッドデータ管理テーブル260に登録されていなかった場合S123:No、ステップS124の処理を実行する。一方、アクセス制御部220は、対応する位置情報がバッドデータ管理テーブル260に登録されていた場合S123:Yes、ステップS125の処理を実行する。[ステップS124]アクセス制御部220は、読み出しを要求されたデータをHDDから読み出して、ホスト装置400に返信する。すなわち、アクセス制御部220は、ホスト装置400に対して正常応答する。[ステップS125]アクセス制御部220は、ホスト装置400に対して、要求されたデータを正常に読み出すことができなかったとして、エラー応答する。なお、ホスト装置400から読み出し要求を受信した場合S122:Yes、アクセス制御部220は、バッドデータ管理テーブル260を参照せずにデータの読み出しを実行してもよい。この場合、アクセス制御部220は、読み出しに成功した場合にはステップS124を実行する一方、読み出しに失敗した場合にはステップS125を実行する。ただし、読み出し対象のデータの位置情報がバッドデータ管理テーブル260に登録されている場合、そのデータの読み出しを正常に実行できない可能性が高い。このため、バッドデータ管理テーブル260を参照することで、アクセス制御部220による無駄なデータアクセスの実行を防止できる。[ステップS126]ホスト装置400から書き込み要求を受信した場合S122:No、アクセス制御部220は、リビルド先とするホットスペアのHDDの準備が完了しているかを判定する。具体的には、アクセス制御部220は、RAID管理テーブル250のRLU00のレコード251において、HSディスク番号にホットスペアのHDDのディスク番号が設定されており、かつ、RAID状態にリビルド中が設定されている場合に、ホットスペアのHDDの準備が完了していると判定する。ホットスペアのHDDの準備が完了している場合S126:Yes、アクセス制御部220は、ステップS127の処理を実行する。一方、ホットスペアのHDDの準備が完了していない場合S126:No、アクセス制御部220は、ステップS128の処理を実行する。[ステップS127]アクセス制御部220は、RLU00に属する故障していない所定のHDDに対して、書き込み処理を行う。また、アクセス制御部220は、故障したHDDに書き込むべきデータがある場合には、そのデータをホットスペアのHDDに書き込む。このステップS127で実行される書き込み処理の内容は、図11の状態12で説明した通りである。ホットスペアのHDDに書き込みが行われた場合、書き込みが行われたブロックに対応するBCCには、ブロックに書き込まれたデータに基づく誤り検出コードが上書きされる。これにより、ブロックに書き込まれたデータが正常に読み出し可能な状態になるとともに、そのブロックに対応するLBAに対してリビルド処理中にホストライトがあったことを、サルベージ制御部240がサルベージ処理中に認識できるようになる。なお、例えば、このステップS127において、故障していないHDDに対するデータの書き込みが正常に行われなかったとしても、書き込みできなかったデータのサルベージを可能にするデータがホットスペアのHDDに書き込まれる。このため、後のリビルド処理時に、書き込みできなかった位置からのデータ読み出しに失敗した場合でも、サルベージ制御部240は、少なくともホットスペアのHDDに書き込まれたデータを基に、読み出しに失敗したデータをサルベージすることができる。[ステップS128]アクセス制御部220は、RLU00に属する故障していない所定のHDDに対して、書き込み処理を行う。[ステップS129]アクセス制御部220は、データの書き込み位置を示す位置情報データを書き込んだブロックに対応するLUNおよびLBAを、非冗長ライト管理テーブル270に登録する。なお、ステップS128,S129の処理の内容は、図13の状態21で説明した通りである。ステップS129の処理により、非冗長ライト管理テーブル270には、RLU00に記録されたデータのうち冗長性のないデータの位置情報が登録されることになる。次に、図18は、サルベージ処理手順の例を示す図である。この図18の処理は、サルベージ制御部240が、サルベージ管理テーブル280に登録された位置情報を1つ選択するたびに実行される。また、サルベージ制御部240は、サルベージ管理テーブル280から選択した位置情報内のLUNが設定されたRLUを、RAID管理テーブル250を基に特定する。ここでは、RLU00が特定されたものとして説明する。[ステップS141]サルベージ制御部240は、RAID管理テーブル250におけるRLU00のレコード241内のHSディスク番号から、ホットスペアのHDDここではDISK10とするを認識する。サルベージ制御部240は、図12の状態13のステップS25と同様の手順で、位置情報から特定されるホットスペアのHDDのブロックから、データを読み出せるかを試す。この処理での読み出し位置は、RAID-1の場合、読み出しに失敗したブロックと同じデータが格納される、ホットスペアのHDDのブロックであり、RAID-4,5のいずれかの場合、読み出しに失敗したブロックと同じストライプ番号に対応する、ホットスペアのHDDのブロックである。[ステップS142]サルベージ制御部240は、ステップS141でのデータ読み出しに成功した場合にはS142:Yes、ステップS151の処理を実行する。この場合、データのサルベージに成功したことになる。一方、サルベージ制御部240は、ステップS141でデータを読み出せなかった場合にはS142:No、ステップS143の処理を実行する。なお、データのサルベージに成功した場合、例えば、サルベージ制御部240はさらに、読み出しに失敗したHDDにおける対応するブロックすなわち、リビルド処理時に読み出しに失敗したブロックにも、データの書き込みを行ってもよい。RLU00がRAID-1の場合、サルベージ制御部240は、ホットスペアのDISK10から読み出したデータを、読み出しに失敗したHDDにおける対応するブロックに書き込む。一方、RLU00がRAID-4,5のいずれかの場合、サルベージ制御部240は、RLU00に属する故障していないHDDのうち読み出しに失敗したHDD以外のHDDから、読み出しに失敗したブロックと同じストライプ番号のブロックのデータを読み出す。サルベージ制御部240は、読み出したこれらのデータと、ホットスペアのDISK10から読み出したデータとを基に、読み出しに失敗したデータを計算し、算出されたデータを読み出しに失敗したHDDにおける同じストライプ番号のブロックに書き込む。[ステップS143]ステップS141でのデータ読み出しでBCCエラーが検出された場合S143:Yes、ステップS144の処理が実行される。一方、ステップS141でデータを読み出せなかった要因がBCCエラー以外の要因である場合ステップS143:No、ステップS148の処理が実行される。なお、後者の場合の例としては、ホットスペアのDISK10が故障している場合などがある。[ステップS144]サルベージ制御部240は、RLU00内のHDDが故障してから、ホットスペアのDISK10の準備ができるまでの期間に、RLU00に対して非冗長状態でのホストライトが行われたかを判定する。具体的には、サルベージ制御部240は、サルベージ管理テーブル280から選択した位置情報内のLUNおよびLBAが、非冗長ライト管理テーブル270に登録されているかを判定する。この判定処理は、図14の状態22のステップS34、および、図15の状態31のステップS42で説明した判定処理に対応する。同じLUNおよびLBAが非冗長ライト管理テーブル270に登録されていた場合ステップS144:Yes、サルベージ制御部240はステップS148の処理を実行する。一方、同じLUNおよびLBAが非冗長ライト管理テーブル270に登録されていない場合ステップS144:No、サルベージ制御部240はステップS145の処理を実行する。[ステップS145]RLU00に属するHDDの故障が発生してから現在までにRLU00に対するホストライトが行われていない場合S142:NoかつS146:Yesの場合、リビルドデータの生成に必要な最新のデータは、ホットスペアのDISK10にも、読み出しに失敗したHDDにも格納されていないと推定される。そこで、図14の状態22,23に示したように、サルベージ制御部240は、故障しているHDDからのデータ読み出しを試す。サルベージ制御部240は、RAID管理テーブル250におけるRLU00のレコード241から、故障しているHDDを認識し、そのHDDの電源をオフした後オンにすることで、そのHDDを再起動させる。この処理は、図14の状態22のステップS35の処理に対応する。なお、サルベージ制御部240は、故障しているHDDの電源がすでにオフである場合には、そのHDDの電源を単にオンすることで再起動する。[ステップS146]サルベージ制御部240は、再起動したHDDにおける、位置情報から特定されるブロックすなわち、読み出しに失敗したブロックに対応する、故障したHDDのブロックから、データを読み出す。この処理での読み出し位置は、RAID-1の場合、読み出しに失敗したブロックと同じデータが格納される、故障したHDDのブロックであり、RAID-4,5のいずれかの場合、読み出しに失敗したブロックと同じストライプ番号に対応する、故障したHDDのブロックである。サルベージ制御部240は、データの読み出しに成功した場合S146:Yes、ステップS147の処理を実行する一方、データを読み出せなかった場合S146:No、ステップS148の処理を実行する。なお、例えば、ステップS145の時点で故障しているHDDの電源がオンであった場合、サルベージ制御部240は、例えば、そのHDDを再起動させる前に、そのHDDからのデータ読み出しを行ってもよい。この場合、サルベージ制御部240は、データの読み出しに成功した場合にはステップS147の処理を実行する。その一方、サルベージ制御部240は、データの読み出しに失敗した場合には、ステップS145,S146の手順で、故障しているデータの再起動を行った後、データの読み出しに成功したかを判定する。[ステップS147]サルベージ制御部240は、ステップS146で再起動したHDDから読み出したデータを、その読み出し元のブロックに対応する、ホットスペアのDISK10のブロックに書き込む。これにより、データのサルベージに成功したことになる。以上のステップS146Yesの場合,S147の処理は、図14の状態23のステップS36の処理に対応する。この後、ステップS151の処理が実行される。なお、ステップS147では、サルベージ制御部240はさらに、読み出しに失敗したHDDにおける対応するブロックすなわち、リビルド処理時に読み出しに失敗したブロックにも、データの書き込みを行ってもよい。RLU00がRAID-1の場合、サルベージ制御部240は、再起動したHDDから読み出したデータを、読み出しに失敗したHDDにおける対応するブロックに書き込む。一方、RLU00がRAID-4,5のいずれかの場合、サルベージ制御部240は、RLU00に属する故障していないHDDのうち読み出しに失敗したHDD以外のHDDから、読み出しに失敗したブロックと同じストライプ番号のブロックのデータを読み出す。サルベージ制御部240は、読み出したこれらのデータと、再起動したHDDから読み出したデータとを基に、読み出しに失敗したデータを計算し、算出されたデータを読み出しに失敗したHDDにおける同じストライプ番号のブロックに書き込む。また、ステップS147の完了後、サルベージ制御部240は、ステップS145で再起動したHDDの動作をオフにして、このHDDをRLU00から切り離すことが望ましい。なぜなら、ステップS145で再起動したHDDは、一度故障したと判定されたHDDであるので、その後に安定的に動作する可能性が低いからである。[ステップS148]非冗長ライト管理テーブル270にホストライトが行われたことが登録されていた場合S144:Yes、読み出しに失敗したブロックにのみ、それ以前にホストライトによって最新のデータが書き込まれたことになる。このため、図15の状態31,32に示したように、サルベージ制御部240は、読み出しに失敗したブロックが属するHDDからのデータ読み出しを試す。サルベージ制御部240は、サルベージ管理テーブル280から選択した位置情報内のディスク番号から、読み出しに失敗したHDDを認識し、そのHDDの電源をオフした後オンにすることで、そのHDDを再起動させる。この処理は、図15の状態31のステップS43に対応する。なお、RLU00がRAID-1である場合、サルベージ制御部240は、サルベージ管理テーブル280に登録されたディスク番号を用いなくても、読み出しに失敗したHDDを認識することができる。RAID-1の場合、読み出しに失敗したHDDは、RLU00に属するHDDのうち故障していないHDDであると容易に判定できるからである。[ステップS149]サルベージ制御部240は、再起動したHDDにおける、位置情報から特定されるブロックすなわち、読み出しに失敗したブロックから、データを読み出す。サルベージ制御部240は、データの読み出しに成功した場合S149:Yes、ステップS150の処理を実行する一方、データを読み出せなかった場合S149:No、ステップS152の処理を実行する。[ステップS150]サルベージ制御部240は、少なくとも再起動したHDDから読み出したデータを基に、リビルドデータを生成し、生成したリビルドデータを、ホットスペアのDISK10における対応するブロックに書き込む。図15の状態32のステップS44で説明したように、RLU00がRAID-1の場合、サルベージ制御部240は、再起動したHDDから読み出したデータを、ホットスペアのDISK10における対応するブロック同じデータを格納すべきブロックに書き込む。また、RLU00がRAID-4,5のいずれかの場合、サルベージ制御部240は、再起動したHDDと、RLU00に属する残りの故障していないHDDのそれぞれの同じストライプ番号からデータを読み出し、読み出したデータを基に、ホットスペアのDISK10に格納すべきリビルドデータを計算する。サルベージ制御部240は、算出されたリビルドデータをホットスペアのDISK10の同じストライプ番号に対応するブロックに書き込む。以上の処理により、データのサルベージに成功したことになる。[ステップS151]データのサルベージに成功したことから、サルベージ制御部240は、サルベージ管理テーブル280から選択した位置情報と同じLUNおよびLBAが登録された、バッドデータ管理テーブル260のレコードを消去する。[ステップS152]サルベージ制御部240は、サルベージ管理テーブル280から選択した位置情報LUN、LBAおよびディスク番号を、サルベージ管理テーブル280から消去する。なお、サルベージ方法1~3のいずれを用いてもデータのサルベージが不可能であった場合S149:Noには、サルベージ管理テーブル280に登録された位置情報は消去されるS152ものの、バッドデータ管理テーブル260に登録された位置情報はそのまま残る。アクセス制御部220は、リビルド処理完了後のホストリード時において、読み出し対象がバッドデータ管理テーブル260に登録された位置に対応する場合には、ホスト装置400に対してエラー応答する。これにより、アクセス制御部220は、失ったデータに対する読み出し要求を受けたとき、HDDへの余計なアクセスを行うことなく、ホスト装置400に対して応答できるようになる。なお、データのサルベージが不可能であった場合S149:No、サルベージ制御部240は、バッドデータ管理テーブル260に位置情報を残す代わりに、例えば、位置情報から特定されるホットスペアのHDDのブロックすなわち、読み出しに失敗したブロックに対応する、ホットスペアのHDDのブロックのBCCに対して、バッドデータであることを示す情報を書き込んでもよい。バッドデータは、例えば、対応するブロックのデータをロストしたことを示す。この場合、アクセス制御部220は、リビルド処理完了後に、サルベージが不可能であったデータの読み出し要求を受けたとき、ホットスペアのDISK10の対応ブロックのBCCから、データをロストしたことを明確に認識できるようになる。以上説明した図16~図18の処理によれば、リビルド処理中にデータ読み出しに失敗した場合でも、データロストをできるだけ回避することができる。従って、ストレージシステムの信頼性を高めることができる。なお、図18の処理では、サルベージ方法1~3のうちサルベージ方法1を最初に実行したステップS141。これにより、サルベージ対象のRLU00におけるホストライトおよびホストリードの処理に対して、サルベージ処理の負荷が与える影響をごく小さくすることができる。また、図18の処理では、例えば、ステップS143,S144の判定処理を行わずに、サルベージ方法2ステップS145,S146、サルベージ方法3ステップS148,S149の順に実行してもよい。この場合、非冗長ライト管理テーブル270が不要になり、CM201に必要な記憶容量を小さくすることができる。また、サルベージ方法2は、故障しているためにホストリードやホストライトの対象として使用されていないHDDを再起動するものである。一方、サルベージ方法3は、ホストリードおよびホストライトの対象のHDDを再起動するので、HDDの動作が再開されるまでの間、ホスト装置400への応答が待ち状態になってしまう。このことから、サルベージ方法3を用いた処理よりサルベージ方法2を用いた処理を先に実行することで、ホストライトおよびホストリードの処理に与える影響を小さくし、ホスト装置400に対する応答速度をできるだけ低下させないようにすることができる。なお、上記の第2の実施の形態では、リビルド処理時にデータの読み出しに失敗したタイミングと非同期に、サルベージ処理が行われた。しかしながら、他の例として、データの読み出しに失敗したとき、リビルド処理を中断して即座にサルベージ処理が実行されてもよい。例えば、図16のステップS104において読み出しに失敗したと判定したときS104:Yes、バッドデータ管理テーブル260に位置情報が登録されるとともに図16のS106、図18の処理が実行される。ただし、データの読み出し失敗時にサルベージ処理を実行する場合には、サルベージ管理テーブル280へのデータ登録図16のS106が不要になるので、図18のステップS152の処理も不要になる。また、上記の第2の実施の形態では、リビルド処理中にデータ読み出しに失敗したとき、即座にバッドデータ管理テーブル260に位置情報を登録した。しかしながら、別の処理例として、データ読み出しに失敗した時点ではバッドデータ管理テーブル260に位置情報を登録せずに、データのサルベージが不可能と判定されたとき図18のS149:Noに、サルベージ制御部240が位置情報をバッドデータ管理テーブル260に登録してもよい。この場合、アクセス制御部220は、リビルド処理中のRLU00に対する読み出し要求をホスト装置400から受信したとき、その読み出し元がリビルド処理においてデータの読み出しに失敗した位置であったとしても、一旦HDDからのデータ読み出しを試みる。第3の実施の形態上記の第2の実施の形態では、アクセス制御部220は、RLUのリビルド処理が開始された後に、そのRLUに対するホスト装置400からの読み出し要求を受信したとき、読み出しの対象がバッドデータ管理テーブル260に登録されている場合には、無条件にホスト装置400に対してエラー応答した。これに対して、以下の第3の実施の形態において、アクセス制御部220は、ホスト装置400からの読み出し要求に応じてHDDからのデータ読み出しを行い、読み出しに失敗した場合には、そのデータについてのサルベージ処理をサルベージ制御部240に実行させる。これにより、HDDの故障が生じた場合でも、ホスト装置400から読み出しを要求されたデータを返信できる確率を高くする。なお、第3の実施の形態に係るストレージシステムにおいて、CMのハードウェア構成や処理機能の基本的な構成は、第2の実施の形態のCM201と同様である。そこで、以下、第3の実施の形態のCM201の処理を、第2の実施の形態の図4に示した符号を用いて説明する。図19および図20は、第3の実施の形態のCMにおけるホストリード処理手順の例を示すフローチャートである。まず、図19のステップS171~S176について説明する。[ステップS171]ここでは例として、RLU00に属する1つのHDDが故障しているものとする。この状態で、アクセス制御部220は、RLU00からのデータの読み出し要求をホスト装置400から受信すると、次のステップS172を実行する。[ステップS172]アクセス制御部220は、読み出し要求先のデータ領域の位置情報がバッドデータ管理テーブル260に登録されているかを判定する。アクセス制御部220は、対応する位置情報がバッドデータ管理テーブル260に登録されていなかった場合S172:No、ステップS173の処理を実行する。一方、アクセス制御部220は、対応する位置情報がバッドデータ管理テーブル260に登録されていた場合S172:Yes、その位置情報をサルベージ制御部240に通知して、サルベージ処理の実行を要求する。この実行要求に応じて、サルベージ制御部240は、図20のステップS141の処理を実行する。[ステップS173]アクセス制御部220は、読み出しを要求されたデータをHDDから読み出す。[ステップS174]アクセス制御部220は、データの読み出しに成功した場合S174:Yes、ステップS175の処理を実行する。一方、データを読み出せなかった場合S174:No、アクセス制御部220は、読み出しに失敗したデータに対応する位置情報をサルベージ制御部240に通知して、サルベージ処理の実行を要求する。この実行要求に応じて、サルベージ制御部240は、図20のステップS141の処理を実行する。[ステップS175]アクセス制御部220は、ステップS173でHDDから読み出したデータを、ホスト装置400に返信する。すなわち、アクセス制御部220は、ホスト装置400に対して正常応答する。[ステップS176]アクセス制御部220は、ホスト装置400に対して、要求されたデータを正常に読み出すことができなかったとして、エラー応答する。次に、図20の処理について説明する。図20では、図18と同様の処理が実行される処理ステップには同じステップ番号を付して示し、これらの詳細な処理内容の説明を省略する。アクセス制御部220からサルベージ処理の要求を受け付けたサルベージ制御部240は、前述のサルベージ方法1を用いて、ホットスペアのHDDからのデータ読み出しを試すS141。サルベージ制御部240は、ホットスペアのHDDからのデータ読み出しに成功した場合S142:Yes、ステップS142aの処理を実行する。[ステップS142a]サルベージ制御部240は、ホットスペアのHDDから読み出したデータを基に、ホスト装置400に返信する読み出しデータを生成する。RLU00がRAID-1の場合、読み出しデータは、ホットスペアのHDDから読み出されたデータと同じである。一方、RLU00がRAID-4,5のいずれかである場合、サルベージ制御部240は、ホットスペアのHDDから読み出したデータと、RLU00に属する故障していないHDDのうち、読み出しに失敗したHDDを除くHDDから読み出したデータとを基に、読み出しデータを計算によって生成する。一方、ホットスペアのHDDからのデータ読み出しに失敗しS142:No、その読み出し失敗要因がBCCエラーでありS143:Yes、かつ、非冗長ライト管理テーブル270に対応する位置情報が登録されていないS144:No場合には、サルベージ制御部240は、前述のサルベージ方法2を用いた処理を行う。すなわち、サルベージ制御部240は、故障したHDDを再起動させS145、再起動したHDDからのデータ読み出しを試みる。再起動したHDDからのデータ読み出しに成功した場合S146:Yes、サルベージ制御部240は、ステップS147aの処理を実行する。[ステップS147a]サルベージ制御部240は、ステップS145で再起動したHDDから読み出したデータを基に、ホスト装置400に返信する読み出しデータを生成する。RLU00がRAID-1の場合、読み出しデータは、再起動したHDDから読み出されたデータと同じである。一方、RLU00がRAID-4,5のいずれかである場合、サルベージ制御部240は、再起動したHDDから読み出したデータと、RLU00に属する故障していないHDDのうち、読み出しに失敗したHDDを除くHDDから読み出したデータとを基に、読み出しデータを計算によって生成する。また、ホットスペアのHDDからのデータ読み出しの失敗要因がBCCエラー以外の場合S143:No、または、非冗長ライト管理テーブル270に対応する位置情報が登録されていた場合S144:Yes、または、故障後に再起動したHDDからのデータ読み出しに失敗した場合S146:Noには、サルベージ制御部240は、前述のサルベージ方法3を用いた処理を行う。すなわち、サルベージ制御部240は、読み出しに失敗したHDDを再起動させS148、再起動したHDDからのデータ読み出しを試みる。ここで、再起動したHDDからのデータ読み出しに失敗した場合S149:No、サルベージ制御部240は、データのサルベージに失敗したことをアクセス制御部220に通知する。サルベージ失敗の通知を受けたアクセス制御部220は、ホスト装置400に対してエラー応答する図19のS176。一方、ステップS148でのデータ読み出しに成功した場合S149:Yes、または、ステップS142a,147aのいずれかの処理後、サルベージ制御部240は、バッドデータ管理テーブル260に登録された、サルベージ対象のデータに対応する位置情報を、バッドデータ管理テーブル260から消去するS151。この後、サルベージ制御部240は、アクセス制御部220に対してサルベージに成功したことを通知するとともに、ステップS142a,147aのいずれかで生成した読み出しデータ、またはステップS148で再起動したHDDから読み出したデータを、アクセス制御部220に受け渡す。アクセス制御部220は、サルベージ制御部240から受け取ったデータをホスト装置400に返信する図19のS175。以上の第3の実施の形態によれば、リビルド処理中だけでなく、HDDの故障が生じ、かつ、ホスト装置400からの読み出し要求に応じたデータの読み出しに失敗したときにも、サルベージ処理が実行される。従って、HDDの故障が発生した場合にホストリードを正常に実行できる可能性を高くすることができる。第4の実施の形態上記の第2の実施の形態で示したサルベージ方法2では、RLUに属するHDDの故障が発生してから現在までの期間にホストライトが行われたかを判定し、ホストライトが行われていなかった場合に、故障したHDDを再起動させてそのHDDからデータを読み出した。そして、サルベージ方法2では、上記の判定処理を、ホットスペアのHDDからデータを読み出すことができるか図18のS142、および、非冗長ライト管理テーブル270に対応する位置情報が登録されているか図18のS144という2つの判定によって行った。これに対して、以下の第4の実施の形態におけるサルベージ処理では、RLUに属するHDDの故障が発生してから現在までの期間にホストライトが行われたか否かを、ライト管理テーブルを用いて判定する。そして、ライト管理テーブルに基づき、ホストライトが行われていないと判定された場合に、故障したHDDを再起動させてそのHDDからデータを読み出す。以下、このようなライト管理テーブルに基づくサルベージ方法を、サルベージ方法2aと表す。図21は、第4の実施の形態におけるCMの処理機能の構成例を示すブロック図である。なお、この図21では、図4に対応する処理ブロックには同じ符号を付して示す。第4の実施の形態において、CM201の記憶装置には、非冗長ライト管理テーブル270の代わりに、ライト管理テーブル290が記憶される。ライト管理テーブル290は、RLUに属するHDDの故障が発生してからリビルド処理が完了するまでの期間に、そのRLUに対して実行されたホストライトについての書き込み位置を示す位置情報が登録される。アクセス制御部220は、RLUに属するHDDのうちの1つが故障して、そのRLUに記録されたデータの冗長性が失われてから、ホットスペアのHDDに対するリビルド処理が完了するまでの期間に、そのRLUに対するホストライトを行ったとき、データの書き込み先の位置情報をライト管理テーブル290に登録する。サルベージ制御部240は、サルベージ処理の際にライト管理テーブル290を参照し、サルベージ対象のデータに対応する位置情報がライト管理テーブル290に登録されているか否かに応じて、サルベージ処理手順を決定する。図22は、ライト管理テーブルに登録される情報の例を示す図である。ライト管理テーブル290には、RLUのRAID状態が非冗長状態またはリビルド中であるときに、そのRLUに属する論理ユニットに対してホストライトが実行されたとき、書き込み先の位置を示す情報が、LUNとLBAとの組み合わせとして登録される。なお、ライト管理テーブル290のデータ構造は、図22の例に限らず、例えば、論理ユニットごとの全LBAに対して、非冗長状態またはリビルド中におけるホストライトが実行されたか否かを示すフラグ情報が対応付けられた構造であってもよい。また、ライト管理テーブル290には、位置情報として、LUNおよびLBAの代わりに、例えば、HDDのディスク番号およびHDDにおける物理アドレスが登録されてもよい。次に、第4の実施の形態において実行されるサルベージ処理について説明する。まず、図23は、サルベージ方法2aの実行に必要な前処理を示す図である。図23の状態41は、図10の状態1と同様に、RLU00を構成するDISK01の故障が発生した場合を示す。ただし、状態41は、DISK01が故障してから、ホットスペアのDISK10へのリビルド処理が完了するまでの期間における状態を示す。この期間には、図13の状態21のような、リビルド先とするホットスペアのDISK01の準備が整うまでの期間も含む。サルベージ方法2aの前処理として、アクセス制御部220は、状態41においてホスト装置400からRLU00に対する書き込み要求を受けるとステップS61、DISK00の対応するブロックにデータを書き込む。これとともに、アクセス制御部220は、データの書き込み位置を示す位置情報データを書き込んだブロックに対応するLUNおよびLBAを、ライト管理テーブル290に登録するステップS62。なお、このステップS62での処理手順は、RLU00がRAID-4,5のいずれかの場合でも同様であり、アクセス制御部220は、ホストライトした位置の情報を非冗長ライト管理テーブル270に登録する。なお、すでにホットスペアのDISK10の準備が整っている場合、アクセス制御部220は、図11の状態12に示したステップS23と同様に、DISK00だけでなく、リビルド先のDISK10に対してもホストライトを行ってもよいステップS64。例えば、RLU00がRAID-1の場合、ステップS64では、アクセス制御部220は、ホスト装置400から書き込み要求されたデータを、DISK10にも書き込む。なお、RLU00がRAID-4,5のいずれかである場合のステップS64の処理は、図11のステップS23で説明した処理と同様である。このようなステップS64の処理を実行することで、前述のサルベージ方法1も併用できるようになる。図24は、サルベージ方法2aの手順を示す図である。図24の状態42は、図23の状態41において、ホットスペアのDISK10に対するリビルド処理が実行されている状態を示す。RLU00がRAID-1の場合、リビルド制御部230は、DISK00に記録されたRLU00のデータを読み出して、DISK10にコピーする。このようなリビルド処理中に、リビルド制御部230が、DISK00からのデータ読み出しに失敗したものとするステップS65。サルベージ制御部240は、DISK01が故障してから現在までの期間に、RLU00に対するホストライトが行われたかを判定する。なお、この期間にホストライトが行われた場合、DISK00における読み出しに失敗したブロック、またはそのブロックに対応するDISK10のブロックの少なくとも一方に対して、最新のデータが記録されている状態となる。サルベージ制御部240は、上記の判定処理を、読み出しに失敗したブロックに対応する位置情報がライト管理テーブル290に登録されているかによって行う。そして、登録されていない場合、サルベージ制御部240は、DISK01が故障してから現在までの期間にRLU00に対するホストライトが行われていないと判定するステップS66。この場合、DISK00からの読み出しに失敗したデータに対応する、ホットスペアのDISK10にリビルドすべきデータは、故障したDISK01にのみ存在する可能性が高い。そこで、サルベージ制御部240は、故障したDISK01を再起動させステップS67、再起動したDISK01から、DISK10にリビルドするデータを読み出すことができるかを試す。図24の状態43に示すように、サルベージ制御部240は、読み出しに失敗したDISK00のブロックに対応する、再起動したDISK01のブロックから、データを読み出す。データの読み出しに成功した場合、サルベージ制御部240は、読み出したデータを、ホットスペアのDISK10における対応するブロックにコピーする。この場合、データのサルベージに成功したことになるステップS68。なお、以上の図24に示したサルベージ方法2aの手順は、RLU00がRAID-4,5のいずれかの場合でも同様である。すなわち、サルベージ制御部240は、再起動したDISK01における対応するブロックからのデータの読み出しに成功すると、読み出したデータを、ホットスペアのDISK10における同じストライプ番号に対応するブロックにコピーする。次に、上記のサルベージ方法2aとサルベージ方法1,3とを組み合わせたサルベージ処理の例について、フローチャートを用いて説明する。まず、図25は、第4の実施の形態でのI/O処理手順の例を示すフローチャートである。この図25は、I/O処理対象のRLU00に属する1つのHDDが故障してから、RLU00のリビルド処理が完了するまでの期間におけるI/O処理を示す。この期間とは、RAID管理テーブル250のRLU00のレコード251において、故障したHDDに対応するディスク状態に故障が設定され、かつ、RAID状態が非冗長状態またはリビルド中が設定されている期間である。なお、図25では、図17と同様の処理が実行される処理ステップには同じ符号を付して示し、その処理内容の説明を省略する。図25では、図17と比較して、ホスト装置400から書き込み要求を受信したときの処理手順ステップS126以降の処理手順が異なる。すなわち、ホスト装置400から書き込み要求を受信した場合S122:No、アクセス制御部220は、リビルド先とするホットスペアのHDDの準備が完了しているかを判定するS126。ホットスペアのHDDの準備が完了している場合S126:Yes、アクセス制御部220は、RLU00に属する故障していない所定のHDDに対して、書き込み処理を行うS127。また、アクセス制御部220は、故障したHDDに書き込むべきデータがある場合には、そのデータをホットスペアのHDDに書き込む。この後、ステップS129aの処理が実行される。一方、ホットスペアのHDDの準備が完了していない場合S126:No、アクセス制御部220は、RLU00に属する故障していない所定のHDDに対して、書き込み処理を行うS128。この後、ステップS129aの処理が実行される。[ステップS129a]アクセス制御部220は、データの書き込み位置を示す位置情報データを書き込んだブロックに対応するLUNおよびLBAを、ライト管理テーブル290に登録する。これにより、ライト管理テーブル290には、RLU00に属するHDDが故障してから、リビルド処理が完了するまでの期間に、RLU00を書き込み先としたホストライトが行われた位置の情報が登録される。図26は、第4の実施の形態でのサルベージ処理手順の例を示すフローチャートである。この図26の処理は、図18と同様に、サルベージ制御部240が、サルベージ管理テーブル280に登録された位置情報を1つ選択するたびに実行される。また、サルベージ制御部240は、サルベージ管理テーブル280から選択した位置情報内のLUNが設定されたRLUを、RAID管理テーブル250を基に特定する。ここでは、RLU00が特定されたものとして説明する。なお、図26では、図18と同様の処理が実行される処理ステップには同じ符号を付して示し、その処理内容の説明を省略する。[ステップS161]サルベージ制御部240は、RLU00内のHDDが故障してから現在までの期間に、RLU00に対して非冗長状態でのホストライトが行われたかを判定する。具体的には、サルベージ制御部240は、サルベージ管理テーブル280から選択した位置情報内のLUNおよびLBAが、ライト管理テーブル290に登録されているかを判定する。同じLUNおよびLBAがライト管理テーブル290に登録されていた場合ステップS144:Yes、ホットスペアのDISK10と、読み出しに失敗したHDDのいずれかに、ホストライトによる最新のデータが記録されている可能性が高いと推定される。そこで、サルベージ制御部240は、サルベージ方法1を用いたサルベージ処理、およびサルベージ方法3を用いたサルベージ処理を、順に試行する。まず、サルベージ制御部240は、サルベージ方法1を用いて、ホットスペアのDISK10からデータを読み出すS141。ホットスペアのDISK10からのデータ読み出しに成功した場合S142:Yes、データのサルベージに成功したことになり、ステップS151の処理が実行される。ホットスペアのDISK10からのデータ読み出しに失敗した場合S142:No、サルベージ制御部240は、サルベージ方法3を用いて、読み出しに失敗したブロックが属するHDDを再起動させS148、再起動したHDDからのデータ読み出しを試すS149。再起動したHDDからのデータ読み出しに成功した場合S149:Yes、サルベージ制御部240は、少なくとも再起動したHDDから読み出したデータを基に、リビルドデータを生成し、生成したリビルドデータを、ホットスペアのDISK10における対応するブロックに書き込むS150。この後、ステップS151の処理が実行される。一方、再起動したHDDからのデータ読み出しに失敗した場合S149:No、データのサルベージに失敗したことになり、ステップS152の処理が実行される。上記のステップS161Yes,S141,S142No,S148,S149Yes,S150の処理では、図18の処理と比較して、故障したHDDからのデータ読み出しが実行されることなく、読み出しに失敗したHDDからのデータ読み出しが実行される。このため、読み出しに失敗したHDDからのデータを基にサルベージに成功する場合、サルベージに成功するまでの時間が短縮される。なお、ステップS161で、対応する位置情報がライト管理テーブル290に登録されていなかった場合には、ステップS141,S142の処理を行うことなく、ステップS148の処理が実行されてもよい。この場合、図25においては、ステップS126,S127の処理が不要になり、アクセス制御部220は、書き込み要求を受信した場合S122:No、無条件にステップS128,S129aの処理を実行してもよい。次に、ステップS161で、同じLUNおよびLBAがライト管理テーブル290に登録されていない場合ステップS144:Noには、ホットスペアのDISK10にも、読み出しに失敗したHDDにも、最新データは記録されていないと推定される。そこで、サルベージ制御部240は、サルベージ方法2aを用いて、故障したHDDを再起動させS145、再起動したHDDからのデータ読み出しを試すS146。再起動したHDDからのデータ読み出しに成功した場合S146:Yes、サルベージ制御部240は、読み出したデータを、その読み出し元ブロックに対応する、ホットスペアのDISK10のブロックに書き込むS147。これにより、データのサルベージに成功したことになり、ステップS151の処理が実行される。一方、再起動したHDDからのデータ読み出しに失敗した場合S146:No、データのサルベージに失敗したことになり、ステップS152の処理が実行される。上記のステップS161No,S145,S146Yes,S147の処理では、図18の処理のようにホットスペアのDISK10からのデータ読み出しを試すことなく、故障したHDDからのデータ読み出しが実行される。このため、データのサルベージに成功するまでの時間が短縮される。一方、故障したHDDからのデータ読み出しに失敗した場合S146:Noには、リビルド処理時に読み出しに失敗したHDDを再起動することなく、データのサルベージに失敗したと判定される。このため、アクセス制御部220によるRLU00に対するI/O処理が停止してしまう確率を低くすることができる。なお、以上の第4の実施の形態では、第2の実施の形態と同様に、リビルド処理とサルベージ処理とを非同期に実行するものとした。しかしながら、リビルド処理の際にデータの読み出しに失敗した時点で、図26の示すサルベージ処理が実行されてもよい。また、図26に示したサルベージ処理は、ホストリードの際にデータの読み出しに失敗した場合に実行されてもよい。また、前述の第2の実施の形態で使用された非冗長ライト管理テーブル270には、HDDの故障が発生してから、リビルド先とするホットスペアのHDDの準備が完了するまでの期間にホストライトが発生した場合に、位置情報が登録される。これに対して、第4の実施の形態で使用されるライト管理テーブル290は、HDDの故障が発生してからリビルド処理が完了するまでの期間にホストライトが発生した場合に、位置情報が登録される。このため、ライト管理テーブル290より、非冗長ライト管理テーブル270の方がデータ量を小さくできる可能性が高い。すなわち、第2の実施の形態の方が、第4の実施の形態と比較して、ホストライトが発生したことを記憶するテーブルの容量を小さくすることができる。以上の各実施の形態に関し、さらに以下の付記を開示する。付記1複数の記憶装置と、前記複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置と、前記複数の記憶装置のいずれかの代わりに使用される予備用記憶装置とを備えたストレージシステムにおいて、前記ストレージ制御装置は、前記複数の記憶装置のうちの第1の記憶装置が故障すると、前記第1の記憶装置に記録されていたデータと同一のデータを前記予備用記憶装置に格納するリビルド処理を実行するリビルド制御部と、前記リビルド処理を実行中の前記リビルド制御部が、前記複数の記憶装置のうちの第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出すデータ復旧制御部と、を有することを特徴とするストレージシステム。付記2前記ストレージ制御装置は、ホスト装置からのアクセス要求に応じて前記複数の記憶装置内のデータにアクセスするアクセス制御部であって、前記第1の記憶装置が故障したとき、前記複数の記憶装置のうちの前記第1の記憶装置を除く残りの記憶装置を用いて、前記ホスト装置からのアクセス要求に応じたアクセス処理を継続するアクセス制御部をさらに有することを特徴とする付記1記載のストレージシステム。付記3前記アクセス制御部は、前記リビルド処理の実行中に前記ホスト装置から書き込み要求を受けたとき、前記第1の記憶装置に書き込むべきデータがある場合には、当該データを前記予備用記憶装置に書き込み、前記データ復旧制御部は、前記リビルド制御部が前記第2の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれているかを判定し、データが書き込まれている場合には、当該データについての前記リビルド処理が完了していると判定し、データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出す、ことを特徴とする付記2記載のストレージシステム。付記4前記データ復旧制御部は、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、起動した前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出せなかった場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、ことを特徴とする付記3記載のストレージシステム。付記5前記データ復旧制御部は、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていない場合には、前記第1の記憶装置が故障してから、前記アクセス制御部が前記予備用記憶装置にデータを書き込み可能になるまでの期間に、前記第2の記憶装置における前記読み出しに失敗したデータの位置に対して前記アクセス制御部によってデータが書き込まれたかを判定し、データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、データが書き込まれていた場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、ことを特徴とする付記3記載のストレージシステム。付記6前記予備用記憶装置における全記憶領域は、あらかじめデータの読み出しエラーが発生する状態とされ、前記データ復旧制御部は、前記リビルド制御部が前記第2の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置からのデータ読み出しを実行し、データを正常に読み出すことができた場合には、当該データについての前記リビルド処理が完了していると判定し、データの読み出しエラーが発生した場合には、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていないと判定する、ことを特徴とする付記3~5のいずれか1つに記載のストレージシステム。付記7前記データ復旧制御部は、前記リビルド制御部が前記第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置が故障してから現在までの期間に、前記第2の記憶装置における読み出しに失敗したデータの位置に対して前記アクセス制御部によってデータが書き込まれたかを判定し、データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、データが書き込まれていた場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、ことを特徴とする付記2記載のストレージシステム。付記8前記データ復旧制御部は、前記第1の記憶装置が故障した後、前記ホスト装置からの読み出し要求に応じた前記第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置における読み出しを要求されたデータに対応する位置からデータを読み出すことを特徴とする付記1記載のストレージシステム。付記9複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置において、前記ストレージ制御装置は、前記複数の記憶装置のうちの第1の記憶装置が故障すると、前記第1の記憶装置に記録されていたデータと同一のデータを予備用記憶装置に格納するリビルド処理を実行するリビルド制御部と、前記リビルド処理を実行中の前記リビルド制御部が、前記複数の記憶装置のうちの第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出すデータ復旧制御部と、を有することを特徴とするストレージ制御装置。付記10ホスト装置からのアクセス要求に応じて前記複数の記憶装置内のデータにアクセスするアクセス制御部であって、前記第1の記憶装置が故障したとき、前記複数の記憶装置のうちの前記第1の記憶装置を除く残りの記憶装置を用いて、前記ホスト装置からのアクセス要求に応じたアクセス処理を継続するアクセス制御部をさらに有することを特徴とする付記9記載のストレージ制御装置。付記11前記アクセス制御部は、前記リビルド処理の実行中に前記ホスト装置から書き込み要求を受けたとき、前記第1の記憶装置に書き込むべきデータがある場合には、当該データを前記予備用記憶装置に書き込み、前記データ復旧制御部は、前記リビルド制御部が前記第2の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれているかを判定し、データが書き込まれている場合には、当該データについての前記リビルド処理が完了していると判定し、データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出す、ことを特徴とする付記10記載のストレージ制御装置。付記12前記データ復旧制御部は、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、起動した前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出せなかった場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、ことを特徴とする付記11記載のストレージシステム。付記13複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置におけるストレージ制御方法であって、前記複数の記憶装置のうちの第1の記憶装置が故障すると、前記第1の記憶装置に記録されていたデータと同一のデータを予備用記憶装置に格納するリビルド処理を実行し、前記リビルド処理において前記複数の記憶装置のうちの第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出す、ことを特徴とするストレージ制御方法。付記14ホスト装置からのアクセス要求に応じて前記複数の記憶装置内のデータにアクセスするアクセス処理をさらに含み、前記アクセス処理では、前記第1の記憶装置が故障したとき、前記複数の記憶装置のうちの前記第1の記憶装置を除く残りの記憶装置を用いて、前記ホスト装置からのアクセス要求に応じたアクセス処理を継続する、ことを特徴とする付記13記載のストレージ制御方法。付記15前記アクセス処理では、前記リビルド処理の実行中に前記ホスト装置から書き込み要求を受けたとき、前記第1の記憶装置に書き込むべきデータがある場合には、当該データを前記予備用記憶装置に書き込み、前記リビルド処理において前記第2の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における読み出しに失敗したデータに対応する位置に対して、前記アクセス処理によってデータが書き込まれているかを判定し、データが書き込まれている場合には、当該データについての前記リビルド処理が完了していると判定し、データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出す、ことを特徴とする付記14記載のストレージ制御方法。付記16前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して、前記アクセス処理によってデータが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、起動した前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出せなかった場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、ことを特徴とする付記15記載のストレージ制御方法。付記17前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して、前記アクセス処理によってデータが書き込まれていない場合には、前記第1の記憶装置が故障してから、前記アクセス制御部が前記予備用記憶装置にデータを書き込み可能になるまでの期間に、前記第2の記憶装置における前記読み出しに失敗したデータの位置に対して、前記アクセス処理によってデータが書き込まれたかを判定し、データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、データが書き込まれていた場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、ことを特徴とする付記15記載のストレージ制御方法。付記18前記予備用記憶装置における全記憶領域は、あらかじめデータの読み出しエラーが発生する状態とされ、前記リビルド処理において前記第2の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置からのデータ読み出しを実行し、データを正常に読み出すことができた場合には、当該データについての前記リビルド処理が完了していると判定し、データの読み出しエラーが発生した場合には、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていないと判定する、ことを特徴とする付記15~17のいずれか1つに記載のストレージ制御方法。付記19前記リビルド処理において前記第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置が故障してから現在までの期間に、前記第2の記憶装置における読み出しに失敗したデータの位置に対して、前記アクセス処理によりデータが書き込まれたかを判定し、データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、データが書き込まれていた場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、ことを特徴とする付記14記載のストレージ制御方法。付記20前記第1の記憶装置が故障した後、前記ホスト装置からの読み出し要求に応じた前記第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置における読み出しを要求されたデータに対応する位置からデータを読み出すことを特徴とする付記13記載のストレージ制御方法。"