(57)【特許請求の範囲】
【請求項１】
第１の記憶装置と第２の記憶装置とを含む複数の記憶装置と、
前記第１の記憶装置に記憶されたデータの第１の集合に基づいて、前記第２の記憶装置に記憶されたデータの第２の集合を、前記複数の記憶装置の何れかである復元先の記憶装置上に復元する処理を実行可能な第１の制御装置と、
前記第１の制御装置による復元の進捗を示す進捗情報を記憶する第３の記憶装置と、
前記第１の制御装置が停止したことを検出すると、前記第３の記憶装置に記憶された前記進捗情報に基づいて、前記第２の集合のうち未復元の部分の復元を行う第２の制御装置と、
を備え、
前記第２の制御装置および前記第３の記憶装置は、前記第１の制御装置と通信可能であり、前記複数の記憶装置を収納可能であり、前記第１の制御装置とは別個に電源が供給されるディスクシェルフに設けられる、
ストレージシステム。
【請求項２】
前記第１の制御装置は、前記第２の集合のうち未復元の部分に対応する前記第２の記憶装置上の位置を示す情報を前記進捗情報に登録し、
前記第２の制御装置は、前記進捗情報に基づいて前記復元先の記憶装置上の復元を開始する位置を決定する、
請求項１記載のストレージシステム。
【請求項３】
前記第２の制御装置は、前記第２の集合のうち未復元の部分を順次復元するとともに前記第３の記憶装置に記憶された前記進捗情報を更新し、
前記第１の制御装置は、自身が起動した際に前記第２の制御装置が復元の処理を実行中である場合、前記進捗情報に基づいて、前記第２の集合のうち未復元の部分の復元を前記第２の制御装置から引き継ぐ、
請求項１または２記載のストレージシステム。
【請求項４】
前記ディスクシェルフを複数有し、複数のディスクシェルフそれぞれは、ディスクシェルフ毎に管理される記憶装置の集合に対する復元を引き継ぐ、請求項１乃至３の何れか一項に記載のストレージシステム。
【請求項５】
第１の記憶部と第２の記憶部とを含む複数の記憶部と、
前記第１の記憶部に記憶されたデータの第１の集合に基づいて、前記第２の記憶部に記憶されたデータの第２の集合を、前記複数の記憶部の何れかである復元先の記憶部上に復元する処理を実行可能な制御装置による復元の進捗を示す進捗情報を記憶する第３の記憶部と、
前記制御装置が停止したことを検出すると、前記第３の記憶部に記憶された前記進捗情報に基づいて、前記第２の集合のうち未復元の部分の復元を行う制御部と、
を備え、
前記複数の記憶部、前記第３の記憶部および前記制御部は、前記制御装置とは別個に電源が供給される、
ストレージ装置。
【請求項６】
ストレージシステムで実行されるデータ復元方法であって、
第１の記憶装置と第２の記憶装置とを含む複数の記憶装置と、前記第１の記憶装置に記憶されたデータの第１の集合に基づいて、前記第２の記憶装置に記憶されたデータの第２の集合を、前記複数の記憶装置の何れかである復元先の記憶装置上に復元する処理を実行可能な第１および第２の制御装置と、前記複数の記憶装置および前記第２の制御装置を収納し、前記第１の制御装置とは別個に電源が供給されるディスクシェルフと、を有する前記ストレージシステムが、
前記第１の制御装置を用いて、前記第２の集合に属する部分を順次復元するとともに復元の進捗を示す進捗情報を前記ディスクシェルフが備える第３の記憶装置に格納し、
前記第２の制御装置を用いて、前記第１の制御装置が停止したことを検出すると、前記第３の記憶装置に記憶された前記進捗情報に基づいて、前記第２の集合のうち未復元の部分の復元を引き継ぐ、
データ復元方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はストレージシステム、ストレージ装置およびデータ復元方法に関する。
【背景技術】
【０００２】
現在、データを蓄積・利用するためのストレージシステムが利用されている。ストレージシステムは、複数の記憶装置と複数の記憶装置に格納されたデータへのアクセスを制御する制御装置とを含む。ストレージシステムでは、ＲＡＩＤ（Redundant Arrays of Independent Disks）の技術を利用することがある。ＲＡＩＤでは、データを分割・複製して、複数の記憶装置に分散して配置する。これにより、例えば、アクセスに伴う負荷が複数の記憶装置へ分散されることで高速化を図れる。また、例えば、複数の記憶装置を用いてデータが冗長化されることで高信頼化を図れる。
【０００３】
特に、データを分割して複数の記憶装置に配置する場合、１つのデータを分割した複数の分割データに基づいてデータ復元用のパリティデータを生成することがある。パリティデータは、対応する各分割データとは異なる記憶装置に配置される。これにより、記憶装置の故障などで何れかの分割データを失ったとしても、正常な記憶装置上の他の分割データとパリティデータとに基づいて、失った分割データを復元できる。
【０００４】
ここで、ある記憶装置で障害が発生した場合に、障害のあった記憶装置上のデータを予備の記憶装置などに復元する処理をリコンストラクションと呼ぶことがある。リコンストラクションでは、例えば正常な記憶装置上のパリティデータや各分割データを用いて、障害のあった記憶装置上の分割データやパリティデータを、予備の記憶装置上に復元する。
【０００５】
例えば、パリティデータの記憶装置上の位置を管理するための配置情報を作成することで、記憶装置上の任意の位置にパリティデータを動的に配置可能とする技術がある。各記憶装置に当該記憶装置の配置情報を格納しておき、何れかの記憶装置で障害が起こった場合に、他の記憶装置上の配置情報に基づいて、障害のあった記憶装置上のパリティデータを再作成し、再作成したパリティデータに関する配置情報をも作り直す提案がある。
【０００６】
また、データの再構築を行っている最中に、上位コンピュータからリードまたはライトアクセスが発生すると再構築を保留し、当該アクセスが終了した時点で現在のヘッド位置から最も近傍の対象ブロックから再構築を再開する提案がある。
【０００７】
なお、データを冗長化して記録するアレイ型記録装置において、データの記録要求に対し、当該データの書き込み完了時点で、当該データに対応する冗長データの書き込みが完了しているか否かに関わらず、要求元に記録終了を報告する提案がある。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平１０−１０５３４６号公報
【特許文献２】特開平８−２２１２１７号公報
【特許文献３】特開平４−３１２１４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
制御装置がリコンストラクションの実行を制御することがある。この場合、リコンストラクション中に制御装置が障害などで停止すると、リコンストラクションを続行不能になるという問題がある。
【００１０】
例えば、制御装置の交換などの保守作業後に、交換後の制御装置を用いてリコンストラクションを最初からやり直すことが考えられる。しかし、保守作業中はリコンストラクションが中断される。また、リコンストラクションを最初から再度行うため時間がかかる。このため、リコンストラクションの所要時間が増大して非効率的となる。更に、リコンストラクションの所要時間が増大するとリコンストラクション中に他の記憶装置で更に障害が発生する可能性も高まり、データの復元を行えなくなるリスクも高まる。
【００１１】
一側面によれば、本発明は、データの復元を効率的に行うことができるストレージシステム、ストレージ装置およびデータ復元方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
一実施態様によれば、ストレージシステムが提供される。ストレージシステムは、第１および第２の記憶装置を含む複数の記憶装置と第１の制御装置と第３の記憶装置と第２の制御装置と備える。第１の制御装置は、第１の記憶装置に記憶されたデータの第１の集合に基づいて、第２の記憶装置に記憶されたデータの第２の集合を、複数の記憶装置の何れかである復元先の記憶装置上に復元する処理を実行可能である。第３の記憶装置は、第１の制御装置による復元の進捗を示す進捗情報を記憶する。第２の制御装置は、第１の制御装置が停止したことを検出すると、第３の記憶装置に記憶された進捗情報に基づいて、第２の集合のうち未復元の部分の復元を行う。第２の制御装置および第３の記憶装置は、第１の制御装置と通信可能であり、複数の記憶装置を収納可能であり、第１の制御装置とは別個に電源が供給されるディスクシェルフに設けられる。
【００１３】
また、一実施態様によれば、ストレージ装置が提供される。ストレージ装置は、第１の記憶部と第２の記憶部とを含む複数の記憶部と第３の記憶部と制御部とを備える。第３の記憶部は、第１の記憶部に記憶されたデータの第１の集合に基づいて、第２の記憶部に記憶されたデータの第２の集合を、複数の記憶部の何れかである復元先の記憶部上に復元する処理を実行可能な制御装置による復元の進捗を示す進捗情報を記憶する。制御部は、制御装置が停止したことを検出すると、第３の記憶部に記憶された進捗情報に基づいて、第２の集合のうち未復元の部分の復元を行う。複数の記憶部、第３の記憶部および制御部は、制御装置とは別個に電源が供給される。
【００１４】
また、一実施態様によれば、ストレージシステムで実行されるデータ復元方法が提供される。データ復元方法では、第１の記憶装置と第２の記憶装置とを含む複数の記憶装置と、第１の記憶装置に記憶されたデータの第１の集合に基づいて、第２の記憶装置に記憶されたデータの第２の集合を、複数の記憶装置の何れかである復元先の記憶装置上に復元する処理を実行可能な第１および第２の制御装置と、複数の記憶装置および第２の制御装置を収納し、第１の制御装置とは別個に電源が供給されるディスクシェルフと、を有するストレージシステムが、第１の制御装置を用いて、第２の集合に属する部分を順次復元するとともに復元の進捗を示す進捗情報をディスクシェルフが備える第３の記憶装置に格納し、第２の制御装置を用いて、第１の制御装置が停止したことを検出すると、第３の記憶装置に記憶された進捗情報に基づいて、第２の集合のうち未復元の部分の復元を引き継ぐ。
【発明の効果】
【００１５】
一実施態様によれば、データの復元を効率的に行うことができる。
【図面の簡単な説明】
【００１６】
【図１】第１の実施の形態のストレージシステムを示す図である。
【図２】第２の実施の形態のストレージシステムを示す図である。
【図３】ストレージシステムのハードウェア例を示す図である。
【図４】ストレージシステムのソフトウェア例を示す図である。
【図５】ＲＡＩＤ４の例を示す図である。
【図６】ディスク装置の例を示す図である。
【図７】ＲＡＩＤグループ管理テーブルの例を示す図である。
【図８】リコンストラクション実行管理テーブルの例を示す図である。
【図９】リコンストラクション進捗管理テーブルの例を示す図である。
【図１０】ストレージシステムの制御例を示すフローチャートである。
【図１１】リコンストラクションの例を示すフローチャートである。
【図１２】ディスクシェルフによる監視の例を示すフローチャートである。
【図１３】コントローラ起動時の処理の例を示すフローチャートである。
【発明を実施するための形態】
【００１７】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態のストレージシステムを示す図である。ストレージシステム１は、記憶装置１ａ，１ｂ，１ｃ，１ｄを含む複数の記憶装置、当該複数の記憶装置以外の記憶装置１ｅおよび制御装置１ｆ，１ｇを有する。
【００１８】
記憶装置１ａ，１ｂ，１ｃは、ユーザなどが利用するユーザデータを記憶する。記憶装置１ｄは、スペアであり、他の記憶装置が故障した場合に、故障した記憶装置の代わりとして用いられる。記憶装置１ａ，１ｂ，１ｃ，１ｄとしては、例えば、磁気ディスク装置を利用できる。また、ＳＳＤ（Solid State Drive）など他の種類の記憶装置を用いてもよい。
【００１９】
ＲＡＩＤの技術により、記憶装置１ａ，１ｂ，１ｃを組合せて、１つの論理的な記憶装置として扱える。例えば、１つのデータブロックを分割した分割データを記憶装置１ａ，１ｂに分散して格納し、各分割データに応じたパリティデータを記憶装置１ｃに格納する（ＲＡＩＤ４）。分割したデータを複数の記憶装置に分散して配置する手法をストライピング（Striping）と呼ぶことがある。ここで、データブロックは、ストレージシステム１に接続されるアクセス元装置がストレージシステム１に対して書き込み／読み出しなどのアクセス要求を行う１単位である。読み出し時には、各分割データを読み出し、結合してデータブロックを生成しアクセス元装置に応答する。記憶装置１ａ，１ｂには、複数のデータブロックに対する複数の分割データが格納され得る。同様に、記憶装置１ｃには、複数のパリティデータが格納され得る。また、記憶装置１ｃにも分割データを配置し、記憶装置１ａ，１ｂ，１ｃのそれぞれに複数のパリティデータを分散して配置してもよい（ＲＡＩＤ５）。記憶装置を４以上用いてＲＡＩＤ５としてもよい。更に、記憶装置１ａ，１ｂ，１ｃを含む４以上の記憶装置のそれぞれに分割データおよび二種類のパリティデータを分散して配置してもよい（ＲＡＩＤ６）。以下の説明では、分割データを単にデータと呼ぶことがある。
【００２０】
記憶装置１ａ，１ｂ，１ｃのそれぞれは、複数のデータ（パリティデータを含む）の集合を記憶するということもできる。なお、記憶装置１ａ，１ｂに同一のデータを記憶させ、データの冗長化を図るものでもよい（ＲＡＩＤ１）。
【００２１】
記憶装置１ｅは、制御装置１ｆ，１ｇの処理に用いる情報を記憶する。記憶装置１ｅとしては、例えば、フラッシュメモリなどの半導体メモリを利用できる。
制御装置１ｆは、複数の記憶装置の何れかで障害が発生した場合に、正常な記憶装置に記憶されたデータの集合（以下、第１の集合という）に基づいて、障害が発生した記憶装置に記憶されたデータの集合（以下、第２の集合という）を、記憶装置１ｄ上に復元する処理を実行可能である。なお、第１の集合に属するデータと第２の集合に属するデータとは１対１に対応している。第１および第２の集合は、各記憶装置に記憶された全データの集合でもよいし、各記憶装置に記憶された一部のデータの集合でもよい。
【００２２】
例えば、上記のＲＡＩＤ４のようなデータ配置である場合に、記憶装置１ｂで障害が発生したとする。制御装置１ｆは、記憶装置１ａに記憶された第１の集合と記憶装置１ｃに記憶されたパリティデータの集合とを用いて、記憶装置１ｂに記憶されていた第２の集合を記憶装置１ｄ上に復元できる。また、例えば、上記のＲＡＩＤ１のようなデータ配置である場合に、記憶装置１ｂで障害が発生したとする。制御装置１ｆは、記憶装置１ａに記憶された第１の集合を複製して記憶装置１ｄ上に格納することで、記憶装置１ｂに記憶されていた第２の集合を復元できる。
【００２３】
制御装置１ｆは、記憶装置１ｄに第２の集合に属する部分（各部分は重複しない）を順次復元するとともに、復元の進捗情報を記憶装置１ｅに格納する。ＲＡＩＤ４〜６であれば、複数の記憶装置に跨る１つの論理的な記憶領域をストライプ（Stripe）と呼ばれる単位で管理することがある。例えば、記憶装置１ａ，１ｂ，１ｃに跨る４つのストライプが割り当てられているとする。このとき、記憶装置１ｂの第１の記憶領域を１つ目のストライプに割り当てる。記憶装置１ｂの第２の記憶領域を２つ目のストライプに割り当てる。記憶装置１ｂの第３の記憶領域を３つ目のストライプに割り当てる。記憶装置１ｂの第４の記憶領域を４つ目のストライプに割り当てる。この場合、第２の集合の第１の部分が第１の記憶領域に、第２の集合の第２の部分が第２の記憶領域に、第２の集合の第３の部分が第３の記憶領域に、第２の集合の第４の部分が第４の記憶領域に、それぞれ格納される。
【００２４】
制御装置１ｆは、第２の集合の復元を、当該部分単位に行える。例えば、第２の集合の第１の部分に対応する第１の集合の所定の部分に基づいて、当該第２の集合の第１の部分を復元する。例えば、制御装置１ｆは、第１の記憶領域（第２の集合の第１の部分に相当）の記憶装置１ｄへの復元を完了すると、第１の記憶領域について復元済であることを進捗情報に登録する。第２の記憶領域以降についても同様である。このように、第２の集合の各部分に対応する記憶領域により、進捗を管理できる。
【００２５】
制御装置１ｇは、制御装置１ｆと同様にして、記憶装置１ｄ上に第２の集合を復元する処理を実行可能である。ただし、制御装置１ｆ，１ｇは、復元の処理を排他的に行う。制御装置１ｇは、制御装置１ｆが停止したことを検出すると、記憶装置１ｅに記憶された進捗情報に基づいて、第２の集合のうち復元が未実行の部分に対する復元を引き継ぐ。
【００２６】
例えば、制御装置１ｇが制御装置１ｆの停止を検出した際に、第２の集合のうち第２の部分までが復元済であることが進捗情報に登録されていたとする。すると、制御装置１ｇは、第２の集合のうち未復元である第３および第４の部分についての復元を引き継ぐ。
【００２７】
第１の実施の形態のストレージシステムによれば、制御装置１ｆにより、記憶装置１ａに記憶されたデータの第１の集合に基づいて、記憶装置１ｂに記憶されたデータの第２の集合が復元先の記憶装置１ｄ上に復元される。このとき、制御装置１ｆにより、第２の集合の復元の進捗情報が記憶装置１ｅに格納される。制御装置１ｇにより、制御装置１ｆが停止したことが検出されると、記憶装置１ｅに記憶された進捗情報に基づいて、第２の集合のうち復元が未実行の部分の復元が引き継がれる。
【００２８】
これにより、データの復元を効率的に行うことができる。例えば、制御装置１ｆが停止して、復元が中断されたとしても、制御装置１ｇで復元の処理を引き継げる。このため、制御装置１ｆの故障などで復元の処理が中断されたとしても、制御装置１ｆの保守作業の完了を待たずに復元の処理を再開できる。よって、復元の処理の所要時間を短縮できる。このとき、制御装置１ｇは、制御装置１ｆが登録した進捗情報に基づいて、復元が未実行の部分に関してのみ復元の処理を行う。復元済の部分に対して再度復元の処理を実行すると、同じ処理を重複して実行することになり非効率的だからである。これにより、最初から処理を再開する場合に比べて所要時間を短縮できる。このようにして、データの復元を効率化できる。
【００２９】
なお、制御装置１ｇの機能は、ＲＡＩＤにより束ねた複数の記憶装置へのアクセスを制御するＲＡＩＤコントローラに実装してもよい。制御装置１ｆや記憶装置１ｅは、複数の記憶装置を収納するためのディスクシェルフに実装してもよい。ディスクシェルフは、複数の記憶装置を備えるストレージ装置と呼ぶこともできる。ＲＡＩＤコントローラとディスクシェルフとは電源供給を別個に行えることが多い。よって、ＲＡＩＤコントローラ（制御装置１ｇ）を保守作業などのために停止させたとしても、ディスクシェルフ（制御装置１ｆおよび記憶装置１ｅ）を動作させることができる。
【００３０】
また、制御装置１ｇも制御装置１ｆと同様に、進捗情報を記憶装置１ｅに登録してもよい。そして、交換などの保守作業により制御装置１ｆで復元の処理を再開できるようになったときに、当該進捗情報に基づいて制御装置１ｇから制御装置１ｆに復元の処理を引き継いでもよい。制御装置１ｆの方が制御装置１ｇよりも処理性能が高いことがあるからである。処理性能が高い方に復元の処理を実行させるようにすれば、所要時間をより短縮できる。その結果、データの復元を一層効率化できる。
【００３１】
［第２の実施の形態］
図２は、第２の実施の形態のストレージシステムを示す図である。ストレージシステム１００は、コントローラ１１０およびディスクシェルフ１２０を有する。
【００３２】
コントローラ１１０は、ディスクシェルフ１２０に収納された複数の磁気ディスク装置（以下、単にディスク装置という）を用いてＲＡＩＤを構築するＲＡＩＤコントローラである。コントローラ１１０は、複数のディスク装置に対するユーザデータの読み出し（Ｒｅａｄ）や書き込み（Ｗｒｉｔｅ）のアクセスを制御する。
【００３３】
ディスクシェルフ１２０は、複数のディスク装置を収納する。ディスク装置は、ＨＤＤ（Hard Disk Drive）と呼ばれることもある。
ストレージシステム１００は、ＮＡＳ（Network Attached Storage）として利用される。ストレージシステム１００は、ネットワーク１０に接続している。ネットワーク１０は、イーサネット（登録商標）のネットワーク（例えば、ＬＡＮ（Local Area Network））である。
【００３４】
サーバ２００は、ストレージシステム１００に記憶されたユーザデータにアクセスするコンピュータである。サーバ２００は、ネットワーク１０に接続している。例えば、サーバ２００は、ＮＦＳ（Network File System）、ＨＴＴＰ（HyperText Transfer Protocol）、ＣＩＦＳ（Common Internet File System）などのプロトコルを用いてストレージシステム１００にアクセスできる。また、サーバ２００は、ｉＳＣＳＩ（Internet Small Computer System Interface）、ＦＣＩＰ（Fibre Channel over Internet Protocol）などのＩＰ−ＳＡＮ（Internet Protocol - Storage Area Network）のためのプロトコルを用いてストレージシステム１００にアクセス可能としてもよい。
【００３５】
なお、ストレージシステム１００とサーバ２００とをファイバチャネル（ＦＣ：Fibre Channel）のネットワーク（例えば、ＳＡＮ）に接続し、サーバ２００からストレージシステム１００に対し、ＦＣのプロトコルを用いてアクセス可能としてもよい。
【００３６】
管理端末装置３００は、ストレージシステム１００の運用管理を行うコンピュータである。例えば、コントローラ１１０はＷｅｂサーバの機能を実行し、運用管理用のＧＵＩ（Graphical User Interface）を提供してもよい。例えば、管理者は、管理端末装置３００上のＷｅｂブラウザを用いて当該ＧＵＩを操作できる。例えば、管理者は、当該ＧＵＩを操作して、ストレージシステム１００の稼働状況を監視したり、ストレージシステム１００にリコンストラクションの実行を指示したりすることができる。なお、リコンストラクションは、リビルドと呼ばれることもある。
【００３７】
ここで、ストレージシステム１００は、ディスクアレイシステム（あるいは、ストレージシステム１００を１つの装置とみなしてディスクアレイ装置）と呼ばれることもある。ストレージシステム１００はファイルサーバの機能を有してもよく、その場合、ストレージシステム１００はファイルサーバと呼ばれることもある。
【００３８】
また、コントローラ１１０やディスクシェルフ１２０は、ラックマウント型でもよいし、タワー型でもよい。
図３は、ストレージシステムのハードウェア例を示す図である。コントローラ１１０は、ＣＰＵ（Central Processing Unit）１１１、ＲＯＭ（Read Only Memory）１１２、ＲＡＭ（Random Access Memory）１１３、ＦＣ  Ｉ／Ｆ（InterFace）１１４、ネットワークＩ／Ｆ１１５および管理用Ｉ／Ｆ１１６を有する。これらの各ユニットはコントローラ１１０内のバスに接続される。
【００３９】
ＣＰＵ１１１は、コントローラ１１０における情報処理を制御するプロセッサである。ＣＰＵ１１１は、ＲＯＭ１１２に記憶されているプログラムや処理に用いるデータの少なくとも一部を読み出し、ＲＡＭ１１３に展開してプログラムを実行する。
【００４０】
ＲＯＭ１１２は、ＣＰＵ１１１が実行する所定のＯＳ（Operating System）プログラムやＲＡＩＤ管理用のプログラムなどを記憶する不揮発性メモリである。ＲＯＭ１１２は、書き換え可能であってもよい。
【００４１】
ＲＡＭ１１３は、ＣＰＵ１１１が実行するプログラムや処理に用いるデータを一時的に記憶する揮発性メモリである。
ＦＣ  Ｉ／Ｆ１１４は、ディスクシェルフ１２０との間でＦＣによる通信を行う通信インタフェースである。ＦＣ  Ｉ／Ｆ１１４は、ＣＰＵ１１１の指示に従って、サーバ２００のデータアクセスに伴う通信を行う。
【００４２】
ネットワークＩ／Ｆ１１５は、ネットワーク１０を介してサーバ２００と通信を行う通信インタフェースである。
管理用Ｉ／Ｆ１１６は、ディスクシェルフ１２０との間でイーサネットによる通信を行う通信インタフェースである。管理用Ｉ／Ｆ１１６は、ＣＰＵ１１１の指示に従って、サーバ２００のデータアクセスに伴う通信以外の管理用の情報をディスクシェルフ１２０との間で送受信する。
【００４３】
なお、コントローラ１１０には、リコンストラクションの実行指示などをＣＰＵ１１１に入力するための操作パネルを設けてもよい。
ディスクシェルフ１２０は、ＣＰＵ１２１、ＲＯＭ１２２、ＲＡＭ１２３、フラッシュメモリ１２４、管理用Ｉ／Ｆ１２５、ＦＣ  Ｉ／Ｆ１２６およびディスク収納部１２７を有する。ＣＰＵ１２１、ＲＯＭ１２２、ＲＡＭ１２３、フラッシュメモリ１２４、管理用Ｉ／Ｆ１２５、ＦＣ  Ｉ／Ｆ１２６はディスクシェルフ１２０内のバスに接続される。ＦＣ  Ｉ／Ｆ１２６は、ディスク収納部１２７に接続される。
【００４４】
ＣＰＵ１２１は、ディスクシェルフ１２０における情報処理を制御するプロセッサである。ＣＰＵ１２１は、ＲＯＭ１２２に記憶されているプログラムや処理に用いるデータの少なくとも一部を読み出し、ＲＡＭ１２３に展開してプログラムを実行する。
【００４５】
ＲＯＭ１２２は、ＣＰＵ１２１が実行するプログラムを記憶する不揮発性メモリである。ＲＯＭ１２２は、書き換え可能であってもよい。
ＲＡＭ１２３は、ＣＰＵ１２１が実行するプログラムや処理に用いるデータを一時的に記憶する揮発性メモリである。
【００４６】
フラッシュメモリ１２４は、ＣＰＵ１２１が実行するプログラムの処理に用いるデータを記憶する不揮発性メモリである。
管理用Ｉ／Ｆ１２５は、コントローラ１１０との間でイーサネットによる通信を行う通信インタフェースである。
【００４７】
ＦＣ  Ｉ／Ｆ１２６は、コントローラ１１０との間でＦＣによる通信を行う通信インタフェースである。ＦＣ  Ｉ／Ｆ１２６は、コントローラ１１０から受信したアクセス要求に基づいて、ディスク収納部１２７に収納されたディスク装置群１３０へのアクセスを実行する。ディスク収納部１２７は、コントローラ１１０へアクセス結果を応答する。また、ＦＣ  Ｉ／Ｆ１２６は、ＣＰＵ１２１から命令を受けて、ディスク装置群１３０に対して命令に応じた処理を実行することもできる。
【００４８】
ディスク収納部１２７は、ディスク装置群１３０を収納する収納ユニットである。ディスク収納部１２７は、ディスク装置群１３０の個々のディスク装置を挿抜して収納可能な複数のスロットを有している。ディスク装置群１３０は、ディスク装置１３１，１３２，１３３，１３４，・・・を含む。ディスク装置１３１，１３２，１３３，１３４は、１つのＲＡＩＤグループ（“ＲＡＩＤグループ＃１”とする）に属する。それ以外のディスク装置は、“ＲＡＩＤグループ＃１”以外の何れかのＲＡＩＤグループに属する。
【００４９】
なお、ディスクシェルフ１２０には、ディスク装置１３１，１３２，１３３，１３４，・・・の全部または一部に代えて、ＳＳＤなどの他の種類の記憶装置を収納可能としてもよい。その場合、コントローラ１１０は、当該他の種類の記憶装置を用いてＲＡＩＤを構築してもよい。
【００５０】
図４は、ストレージシステムのソフトウェア例を示す図である。図４に示すユニット（ディスク装置群１３０を除く）の一部または全部は、コントローラ１１０およびディスクシェルフ１２０が実行するプログラムのモジュールであってもよい。また、図４に示すユニット（ディスク装置群１３０を除く）の一部または全部は、ＦＰＧＡ（Field Programmable Gate Array）やＡＳＩＣ（Application Specific Integrated Circuit）などの電子回路であってもよい。
【００５１】
コントローラ１１０は、記憶部１１１ａ、アクセス制御部１１１ｂおよび復元処理部１１１ｃを有する。
記憶部１１１ａは、アクセス制御部１１１ｂや復元処理部１１１ｃの処理に用いる各種の情報を記憶する。例えば、記憶部１１１ａは、ＲＡＩＤ４〜６におけるストライプの物理的な配置を管理するための情報を記憶する。また、リコンストラクションを実行しているか否かを管理するための情報や、リコンストラクションの進捗を管理するための情報を記憶する。記憶部１１１ａは、例えば、ＲＡＭ１１３上に実装できる。
【００５２】
アクセス制御部１１１ｂは、サーバ２００からの要求に基づいて、ディスク装置群１３０にアクセスする。具体的には、アクセス制御部１１１ｂは、サーバ２００からユーザデータの書き込み要求を受信すると、ディスク装置群１３０にユーザデータの書き込みを行わせ、その結果をサーバ２００に送信する。また、アクセス制御部１１１ｂは、サーバ２００からユーザデータの読み出し要求を受信すると、ディスク装置群１３０からユーザデータを読み出して、読み出したユーザデータをサーバ２００に送信する。例えば、サーバ２００上のＯＳは、ユーザデータを複数のデータブロックで管理し、コントローラ１１０に対する書き込みや読み出しの要求をデータブロック単位で行う。アクセス制御部１１１ｂは、ディスク装置群１３０へのデータアクセスに、ＦＣ  Ｉ／Ｆ１１４を用いる。
【００５３】
また、ディスク装置群１３０のディスク装置では、故障が発生することがある。アクセス制御部１１１ｂは、リコンストラクションの実行指示を受けると、復元処理部１１１ｃに処理を委譲する。アクセス制御部１１１ｂが、自身の機能により何れかのディスク装置の故障を検知して、復元処理部１１１ｃにリコンストラクションを行わせてもよい。
【００５４】
復元処理部１１１ｃは、リコンストラクションを実行する。復元処理部１１１ｃは、リコンストラクションの実行を制御するための通信を、ＦＣ  Ｉ／Ｆ１１４を用いて行う。復元処理部１１１ｃは、リコンストラクションの実行を開始すると、何れのディスク装置に対してリコンストラクションを実行中であるかを示す管理情報を記憶部１１１ａに格納する。また、復元処理部１１１ｃは、リコンストラクションの進捗を示す進捗情報を記憶部１１１ａに格納する。具体的には、復元処理部１１１ｃは、故障したディスク装置における、リコンストラクションが終了した部分を進捗情報に記録する。更に、復元処理部１１１ｃは、記憶部１２１ａにも上記管理情報および進捗情報を格納する。復元処理部１１１ｃは、管理情報および進捗情報を管理用Ｉ／Ｆ１１６を用いて、ディスクシェルフ１２０に送信する。
【００５５】
ディスクシェルフ１２０は、記憶部１２１ａ、監視部１２１ｂおよび復元処理部１２１ｃを有する。
記憶部１２１ａは、復元処理部１１１ｃ，１２１ｃの処理に用いる各種の情報（上記管理情報や進捗情報など）を記憶する。記憶部１２１ａは、例えば、ＲＡＭ１２３やフラッシュメモリ１２４上に実装できる。
【００５６】
監視部１２１ｂは、コントローラ１１０の死活監視を行う。例えば、監視部１２１ｂは、管理用Ｉ／Ｆ１２５を用いて、コントローラ１１０に対してｐｉｎｇを送信する。そして、所定時間内にｐｉｎｇ応答があれば、コントローラ１１０は起動していると判断する。一方、所定時間内にｐｉｎｇ応答がなければ、コントローラ１１０は停止していると判断する。監視部１２１ｂは、このようにして死活監視を行う。また、例えば、コントローラ１１０が停止する直前に、コントローラ１１０から停止する旨の通知を受信して、コントローラ１１０の停止を検出してもよい。
【００５７】
監視部１２１ｂは、コントローラ１１０が停止したことを検出すると、復元処理部１２１ｃに処理を委譲する。具体的には、ＣＰＵ１２１はＲＯＭ１２２に記憶されたリコンストラクション実行用のプログラムをＲＡＭ１２３上に読み出して実行し、復元処理部１２１ｃの機能を発揮する。
【００５８】
復元処理部１２１ｃは、コントローラ１１０がリコンストラクション中に停止した場合、リコンストラクションの処理を引き継ぐ。復元処理部１２１ｃは、ＦＣ  Ｉ／Ｆ１２６を介して、ディスク装置１３１，１３２，１３３，１３４，・・・に対するリコンストラクションを実行する。このとき、復元処理部１２１ｃは、記憶部１２１ａに記憶された管理情報に基づいて、リコンストラクションの対象とするディスク装置を判断する。また、復元処理部１２１ｃは、記憶部１２１ａに記憶された進捗情報に基づいて、復元対象のディスクのうちリコンストラクションを引き継ぐ部分を判断する。
【００５９】
復元処理部１２１ｃは、リコンストラクションを実行するとともに、記憶部１２１ａに記憶された進捗情報にリコンストラクションの進捗を登録する。
ここで、ストレージシステム１００ではＲＡＩＤ４を想定する。ただし、ＲＡＩＤ５，６など他のＲＡＩＤレベルでもよい。
【００６０】
図５は、ＲＡＩＤ４の例を示す図である。図５では、“ＲＡＩＤグループ＃１”を例示している。図５（Ａ）は通常時を示している。
ディスク装置１３１は、パリティデータを格納するためのディスク装置である（パリティディスクと呼ぶことがある）。ディスク装置１３１のディスク番号を“１”（図５では“ディスク＃１”と表記。以下、同様）とする。
【００６１】
ディスク装置１３２は、データブロックを分割したデータを格納するためのディスク装置である（データディスクと呼ぶことがある）。ディスク装置１３２のディスク番号を“２”とする。なお、以下の説明では第１の実施の形態と同様に、データブロックを分割したデータを単にデータと呼ぶことがある。
【００６２】
ディスク装置１３３は、データディスクである。ディスク装置１３３のディスク番号を“３”とする。
ディスク装置１３４は、ディスク装置１３１，１３２，１３３の何れかが故障した際に、故障したディスク装置の代わりに使用するスペアのディスク装置（スペアディスクと呼ぶことがある）である。ディスク装置１３４のディスク番号を“４”とする。
【００６３】
例えば、ディスク装置１３１，１３２，１３３の記憶領域はストリップ（Strip）と呼ばれる所定サイズの単位で分割されている。具体的には、次のようなストリップが設けられている。ディスク装置１３１には、“パリティ１−２”、“パリティ３−４”、“パリティ５−６”、・・・という名称のストリップが配置されている。ディスク装置１３２には“ストリップ１”、“ストリップ３”、“ストリップ５”、・・・という名称のストリップが配置されている。ディスク装置１３３には“ストリップ２”、“ストリップ４”、“ストリップ６”、・・・という名称のストリップが配置されている。
【００６４】
ここで、“パリティ１−２”は、“ストリップ１”、“ストリップ２”に対応するパリティを格納したストリップであることを示す。例えば、“ストリップ１”、“ストリップ２”の排他的論理和を“ストリップ１”、“ストリップ２”に対応するパリティとする。“パリティ１−２”のサイズは、“ストリップ１”、“ストリップ２”のサイズに等しい。同様に“パリティ３−４”は“ストリップ３”、“ストリップ４”に対応するパリティを格納したストリップである。また、“パリティ５−６”は“ストリップ５”、“ストリップ６”に対応したパリティを格納したストリップである。
【００６５】
“ＲＡＩＤグループ＃１”では、各ストリップを組合せてディスク装置１３１，１３２，１３３に跨る複数のストライプが設けられている。例えば、ストライプ番号“１”（図５では“ストライプ＃１”と表記。以下、同様）のストライプは、“パリティ１−２”、“ストリップ１”、“ストリップ２”の組である。“ストライプ＃１”は１つのデータブロックに対応し、この場合、当該１つのデータブロックは、ディスク装置１３２，１３３上の２つのストリップに分割されて配置されていることになる。ストライプ番号“２”のストライプは、“パリティ３−４”、“ストリップ３”、“ストリップ４”の組である。ストライプ番号“３”のストライプは、“パリティ５−６”、“ストリップ５”、“ストリップ６”の組である。例えば、あるストライプにデータブロックを格納する場合、当該データブロックを分割して、各ストリップに格納する。このように、ディスク装置１３１，１３２，１３３は、各ストリップに対応するデータの集合を記憶しているということができる。
【００６６】
図５（Ｂ）ではディスク装置１３３が故障した場合を想定した復元時（リコンストラクション）の処理を例示している。この場合、例えば、ディスク装置１３１上の“パリティ１−２”とディスク装置１３２上の“ストリップ１”に基づいて、スペアディスクであるディスク装置１３４上に“ストリップ２”を復元する。“ストリップ４”、“ストリップ６”についても同様である。
【００６７】
なお、パリティディスクが故障する場合もある。その場合は、リコンストラクションによって、各データディスクに配置された複数のストリップの排他的論理和を取り直して、パリティを再生成し、スペアディスクに格納する。
【００６８】
図６は、ディスク装置の例を示す図である。ディスク装置１３３は、ディスク１３３ａ，１３３ｂ，１３３ｃを有する。ディスク１３３ａ，１３３ｂ，１３３ｃは、それぞれがトラックを複数有している。データの書き込みや読み出しを行うための磁気ヘッドがトラックごとに設けられる。例えば、ディスク１３３ａは、当該トラックの１つとしてトラックＴｒを有する。ディスク１３３ａ，１３３ｂ，１３３ｃのうち、垂直に重なる複数のトラックはシリンダＣとして管理される。更に、トラックＴｒはセクタＳｃｔに分かれている。
【００６９】
例えば、ディスク１３３ａ上のｋ（ｋは１以上の整数）個のセクタ（例えば、０〜ｋ−１個目）を“ストリップ２”とし、次のｋ個のセクタ（例えば、ｋ〜２ｋ−１個目）を“ストリップ４”とする。ｋの値は、予め定められる。
【００７０】
例えば、セクタＳｃｔの位置は、シリンダＣを示す情報、トラックＴｒ上の磁気ヘッドを示す情報およびセクタ番号（図６の例ではセクタ番号“２”）の組により識別できる。
このように、各ストリップに対してディスク１３３ａ上の位置を対応付けることができる。また、ストライプと当該ストライプに対応する各ストリップ（ディスク装置１３１，１３２，１３３上の位置）との対応関係を示す情報は、記憶部１１１ａおよび記憶部１２１ａに予め格納される。このような情報は、ディスク装置１３１，１３２，１３３などに格納しておき、ＣＰＵ１１１，１２１がＲＡＭ１１３，１２３上に適宜読み出してもよい。
【００７１】
図７は、ＲＡＩＤグループ管理テーブルの例を示す図である。ＲＡＩＤグループ管理テーブル１４０は、記憶部１１１ａおよび記憶部１２１ａに格納される。ＲＡＩＤグループ管理テーブル１４０は、ディスク装置１３１，１３２，１３３などに格納しておき、ＣＰＵ１１１，１２１がＲＡＭ１１３，１２３に適宜読み出してもよい。ＲＡＩＤグループ管理テーブル１４０は、ＲＡＩＤグループ番号、ディスク番号およびディスク種別の項目を含む。
【００７２】
ＲＡＩＤグループ番号の項目には、ＲＡＩＤグループ番号が登録される。ディスク番号の項目には、ディスク番号が登録される。ディスク種別の項目には、パリティディスク、データディスクおよびスペアディスクを区別するための情報が登録される。
【００７３】
例えば、ＲＡＩＤグループ番号が“１”、ディスク番号が“１”、ディスク種別が“パリティ”であれば、ディスク番号“１”のディスク装置１３１が“ＲＡＩＤグループ＃１”に属し、パリティディスクであることを示す。
【００７４】
ここで、ディスク種別“データ”はデータディスクであることを示す。また、ディスク種別“スペア”はスペアディスクであることを示す。
なお、ストレージシステム１００は、複数のＲＡＩＤグループをまとめたアグリゲートと呼ばれる単位を管理してもよい。
【００７５】
図８は、リコンストラクション実行管理テーブルの例を示す図である。リコンストラクション実行管理テーブル１５０は、記憶部１２１ａに格納される管理情報である。リコンストラクション実行管理テーブル１５０は、復元処理部１１１ｃの処理に用いるため、記憶部１１１ａにも格納される。リコンストラクション実行管理テーブル１５０は、ディスク番号および状態の項目を含む。
【００７６】
ディスク番号の項目には、ディスク番号が登録される。状態の項目には、ディスク装置の状態を示す情報が登録される。
例えば、ディスク番号が“１”、状態が“正常”であれば、ディスク番号“１”のディスク装置１３１が正常に動作していることを示す。
【００７７】
また、ディスク番号が“３”、状態が“異常”であれば、ディスク番号“３”のディスク装置１３３で異常（故障などの障害）が発生して、データの読み出しや書き出しが不能であることを示す。
【００７８】
また、ディスク番号が“４”、状態が“リコンストラクション中”であれば、異常の発生したディスク装置（ここでは、ディスク装置１３３）のデータを、当該ディスク番号“４”のディスク装置１３４上に復元中であることを示す。
【００７９】
図９は、リコンストラクション進捗管理テーブルの例を示す図である。リコンストラクション進捗管理テーブル１６０は、記憶部１２１ａに格納される進捗情報である。リコンストラクション進捗管理テーブル１６０は、復元処理部１１１ｃの処理に用いるため、記憶部１１１ａにも格納される。リコンストラクション進捗管理テーブル１６０は、ストライプ番号および状態の項目を含む。
【００８０】
ストライプ番号の項目には、ストライプ番号が登録される。状態の項目には、リコンストラクションの実行状況を示す情報が登録される。
例えば、ストライプ番号が“１”、状態が“完了”であれば、故障したディスク装置のストライプ番号“１”に割り当てられたストリップ（例えば、ディスク装置１３３でいえば“ストリップ２”）について、復元が完了していることを示す。
【００８１】
また、例えば、ストライプ番号が“３”、状態が“未完了”であれば、故障したディスク装置のストライプ番号“３”に割り当てられたストリップ（例えば、ディスク装置１３３でいえば“ストリップ６”）について、復元が未完了であることを示す。
【００８２】
ここで、以下の説明では、記憶部１１１ａに記憶されたリコンストラクション実行管理テーブルおよびリコンストラクション進捗管理テーブルを、記憶部１２１ａに記憶された同名の各テーブルと区別するために符号を付さずに示す。
【００８３】
図１０は、ストレージシステムの制御例を示すフローチャートである。以下、図１０に示す処理をステップ番号に沿って説明する。
（ステップＳ１）アクセス制御部１１１ｂは、復元開始の指示を受け付ける。ここでは、ディスク装置１３３が故障し、ディスク装置１３３のデータをスペアディスクであるディスク装置１３４に復元する場合を想定する。復元開始の指示に、復元元／復元先のディスク装置を示す情報が含まれてもよい。アクセス制御部１１１ｂは、復元処理部１１１ｃに処理を委譲する。アクセス制御部１１１ｂは、復元元／復元先のディスク装置を示す情報を復元処理部１１１ｃに通知してもよい。
【００８４】
（ステップＳ２）復元処理部１１１ｃは、記憶部１２１ａに記憶されたリコンストラクション実行管理テーブル１５０を更新する。具体的には、復元処理部１１１ｃは、ディスク装置１３３（ディスク番号“３”）に“異常”を登録し、ディスク装置１３４（ディスク番号“４”）に“リコンストラクション中”を登録する。復元処理部１１１ｃは、当該更新内容を記憶部１１１ａに記憶されたリコンストラクション実行管理テーブルにも反映させる。復元処理部１１１ｃは、記憶部１２１ａに記憶されたリコンストラクション進捗管理テーブル１６０に故障したディスク装置１３３に割り当てられていたストライプ番号を登録する。この時点では、リコンストラクション進捗管理テーブル１６０の状態の項目は、全てのストライプ番号につき“未完了”である。
【００８５】
（ステップＳ３）監視部１２１ｂは、コントローラ１１０の死活監視を開始する。例えば、監視部１２１ｂは、リコンストラクション実行管理テーブル１５０に“リコンストラクション中”が登録されたことを検出し、これを契機として監視を開始する。あるいは、復元処理部１１１ｃからリコンストラクションの実行を開始する旨の通知を受け、これを契機として監視を開始してもよい。
【００８６】
（ステップＳ４）復元処理部１１１ｃは、リコンストラクションを実行する。詳細は後述する。
（ステップＳ５）監視部１２１ｂは、復元処理部１１１ｃがリコンストラクションを実行している間、コントローラ１１０の監視を実行する。詳細は後述する。
【００８７】
（ステップＳ６）復元処理部１１１ｃは、リコンストラクションを完了する。復元処理部１２１ｃがリコンストラクションを完了させることもある。
（ステップＳ７）復元処理部１１１ｃは、ディスク装置１３４についてリコンストラクション実行管理テーブル１５０に“正常”を登録する。また、復元処理部１１１ｃは、リコンストラクション進捗管理テーブル１６０の登録内容を初期化（例えば、クリア）する。
【００８８】
（ステップＳ８）監視部１２１ｂは、コントローラ１１０の死活監視を停止する。例えば、監視部１２１ｂは、リコンストラクション実行管理テーブル１５０に“リコンストラクション中”を示す情報がなくなったことを検出し、これを契機として監視を停止する。あるいは、復元処理部１１１ｃ，１２１ｃの何れかからリコンストラクションが完了した旨の通知を受け、これを契機として監視を停止してもよい。
【００８９】
このようにして、コントローラ１１０はリコンストラクションを行う。その際、ディスクシェルフ１２０はコントローラ１１０の死活監視を行う。
なお、ステップＳ７の後、復元処理部１１１ｃは、記憶部１１１ａ，１２１ａに記憶されたＲＡＩＤグループ管理テーブル１４０を更新する。具体的には、ディスク番号“４”（ディスク装置１３４）に“データ”を登録する。
【００９０】
また、ディスク装置１３３は、例えば管理者などによって新しいディスク装置に交換される。すると、復元処理部１１１ｃは、リコンストラクション実行管理テーブル１５０のディスク番号“３”を“正常”に変更する。その場合、例えば、交換された新しいディスク装置を新たなスペアディスクとして用いる。このため、復元処理部１１１ｃは、記憶部１１１ａ，１２１ａに記憶されたＲＡＩＤグループ管理テーブル１４０のディスク番号“３”（新しいディスク装置）に“スペア”を登録する。
【００９１】
なお、上記のＲＡＩＤグループ管理テーブル１４０の更新は、アクセス制御部１１１ｂまたは復元処理部１２１ｃが実行してもよい。
次に、上記ステップＳ４の具体的な手順を説明する。
【００９２】
図１１は、リコンストラクションの例を示すフローチャートである。以下、図１１に示す処理をステップ番号に沿って説明する。
（ステップＳ１１）復元処理部１１１ｃは、復元対象とするストライプを選択する。具体的には、復元処理部１１１ｃは、記憶部１１１ａに記憶されたリコンストラクション進捗管理テーブルを参照して、復元が未完了のストライプ番号を特定し、その中から１つストライプ番号を選択する。例えば、ストライプ番号の昇順に選択することが考えられる。
【００９３】
（ステップＳ１２）復元処理部１１１ｃは、選択したストライプ番号に対応するディスク装置１３１，１３２上のストリップに基づいてパリティ演算を行い、故障したディスク装置１３３上のデータを復元する。例えば、ストライプ番号“１”であれば、ディスク装置１３１上の“パリティ１−２”およびディスク装置１３２上の“ストリップ１”に基づいて、“ストリップ２”のデータを復元する。
【００９４】
（ステップＳ１３）復元処理部１１１ｃは、復元したデータをディスク装置１３４に書き込む。復元処理部１１１ｃは、ディスク装置１３４に対して、ディスク装置１３３と同じストリップ位置に、復元したデータを書き込んでもよい。
【００９５】
（ステップＳ１４）復元処理部１１１ｃは、選択したストライプについて、ディスク装置１３４への復元が完了したか否かを判定する。完了した場合、処理をステップＳ１５に進める。完了していない場合、処理をステップＳ１２に進める。
【００９６】
（ステップＳ１５）復元処理部１１１ｃは、選択したストライプについてリコンストラクションの“完了”を、記憶部１２１ａに記憶されたリコンストラクション進捗管理テーブル１６０に登録する。例えば、ストライプ番号“１”について、ディスク装置１３４上へ“ストリップ２”の復元が完了した場合、ストライプ番号“１”の状態を“完了”とする。復元処理部１１１ｃは、記憶部１１１ａに記憶されたリコンストラクション進捗管理テーブルについても同様に更新する。
【００９７】
（ステップＳ１６）復元処理部１１１ｃは、全ストライプの復元が完了したか否かを判定する。完了した場合、処理を終了する。復元が完了していないストライプがある場合、処理をステップＳ１１に進める。例えば、復元処理部１１１ｃは、記憶部１１１ａに記憶されたリコンストラクション進捗管理テーブルを参照して、全ストライプ番号に対して状態“完了”が登録されていれば、全ストライプの復元が完了したと判断する。一方、何れかのストライプ番号で状態“未完了”が登録されていれば、復元が完了していないストライプがあると判断する。
【００９８】
このようにして、復元処理部１１１ｃは、ディスク装置１３３のデータをディスク装置１３４に復元する。
次に、図１０のステップＳ５の具体的な手順を説明する。
【００９９】
図１２は、ディスクシェルフによる監視の例を示すフローチャートである。以下、図１２に示す処理をステップ番号に沿って説明する。
（ステップＳ２１）監視部１２１ｂは、コントローラ１１０の死活監視を行い、コントローラ１１０が停止したか否かを判定する。コントローラ１１０が停止した場合、処理をステップＳ２２に進める。コントローラ１１０が停止していない場合、本ステップＳ２１の処理を継続する。死活監視の方法としては、例えば、上述したようにｐｉｎｇを用いることができる。
【０１００】
（ステップＳ２２）監視部１２１ｂは、記憶部１２１ａに記憶されたリコンストラクション実行管理テーブル１５０に基づいて、リコンストラクション中のディスク装置があるか否かを判定する。リコンストラクション中のディスク装置がある場合、処理をステップＳ２３に進める。リコンストラクション中のディスク装置がない場合、監視を止めて処理を終了する。例えば、リコンストラクション実行管理テーブル１５０において、“リコンストラクション中”の状態のディスク装置がある場合、リコンストラクション中のディスク装置があると判断する。一方、同テーブルにおいて、“リコンストラクション中”の状態のディスク装置がない場合、リコンストラクション中のディスク装置がないと判断する。
【０１０１】
（ステップＳ２３）監視部１２１ｂは、リコンストラクション実行用のプログラムをＲＯＭ１２２から読み出してＲＡＭ１２３に格納する（ロード）。ＣＰＵ１２１は、ロードした当該プログラムを実行することで、復元処理部１２１ｃの機能を発揮する。
【０１０２】
（ステップＳ２４）復元処理部１２１ｃは、リコンストラクション実行管理テーブル１５０に基づいて、リコンストラクション中のディスク装置１３４を特定する。復元処理部１２１ｃは、記憶部１２１ａに記憶されたリコンストラクション進捗管理テーブル１６０に基づいて、ディスク装置１３４のうちリコンストラクションの再開ポイントを取得する。例えば、図９で説明したリコンストラクション進捗管理テーブル１６０では、ストライプ番号“１”、“２”が“完了”であり、ストライプ番号“３”、“４”が“未完了”である。例えば、復元処理部１２１ｃは、ストライプ番号の昇順にリコンストラクションを実行する。その場合、復元処理部１２１ｃはストライプ番号“３”を再開ポイントとして取得する。これにより、復元処理部１２１ｃは、ディスク装置１３４上のリコンストラクションを再開する位置を決定できる。
【０１０３】
（ステップＳ２５）復元処理部１２１ｃは、再開ポイントとして取得したストライプについてリコンストラクションを実行する。
このようにして、監視部１２１ｂは、コントローラ１１０の死活監視を行う。そして、コントローラ１１０が停止した場合には、復元処理部１２１ｃは、リコンストラクション進捗管理テーブル１６０に基づいて、復元処理部１１１ｃが実行途中であったリコンストラクションを引き継ぐ。
【０１０４】
なお、復元処理部１２１ｃによるリコンストラクションの手順は、図１１で説明した復元処理部１１１ｃによるリコンストラクションの手順と同様である。ただし、復元処理部１２１ｃが初回にステップＳ１１を実行する場合、ステップＳ２４で取得した再開ポイントを選択する。２回目以降にステップＳ１１を実行する場合は、復元処理部１１１ｃと同様である。また、ステップＳ１５では、復元処理部１２１ｃは、記憶部１２１ａに記憶されたリコンストラクション進捗管理テーブル１６０の更新を行うのみでよい。すなわち、復元処理部１２１ｃは、コントローラ１１０上のリコンストラクション進捗管理テーブルの更新は行わない。
【０１０５】
また、復元処理部１２１ｃがリコンストラクションを完了させる場合があることを先に述べた（図１０のステップＳ６の説明）。その場合、復元処理部１２１ｃは、記憶部１２１ａに記憶されたリコンストラクション実行管理テーブル１５０の更新およびリコンストラクション進捗管理テーブル１６０の初期化を行う。その方法は、図１０で説明したステップＳ７と同様である。
【０１０６】
以上のように、コントローラ１１０が停止してリコンストラクションを続行不能になった場合にもディスクシェルフ１２０が当該リコンストラクションを引き継ぐことで、リコンストラクションを効率的に行うことができる。
【０１０７】
ここで、ストレージシステム１００に搭載されるディスク装置の数は年々増大してきている。一方で、ディスク装置の故障率は下げ止まっており、中には故障率の高いディスク装置も存在する。このため、リコンストラクションを実行する頻度が高まってきている。また、ディスク装置単体の容量も増大している。このような要因により、リコンストラクションの所要時間が増大している。リコンストラクションの所要時間が増大することで、リコンストラクションの最中にコントローラ１１０が故障するリスクが高まっている。更に、リコンストラクションが長引くと、リコンストラクション中にＲＡＩＤグループ内の他のディスク装置で更に障害が発生する可能性も高まる。複数のディスク装置で同時に障害が発生すると、リコンストラクションが実行不能になり得る。このため、データの復元を行えなくなるリスクも高まってきている。
【０１０８】
これに対し、ストレージシステム１００によれば、コントローラ１１０の保守作業に時間がかかる場合にも、コントローラ１１０の保守作業の完了を待たずにリコンストラクションを再開できる。このとき、ディスクシェルフ１２０は、コントローラ１１０により記憶部１２１ａに登録されたリコンストラクション進捗管理テーブル１６０に基づいて、故障したディスク装置１３３のうち復元が未実行の部分に関してのみ復元の処理を行う。これにより、最初からリコンストラクションを再実行する場合に比べて、所要時間を短縮できる。このようにして、リコンストラクションを効率化することができる。
【０１０９】
ここで、復元処理部１２１ｃによるリコンストラクション実行中に、コントローラ１１０が交換または修理されて、交換後または修理後のコントローラ（当該コントローラもコントローラ１１０と同じ符号を用いる）が起動することがある。その場合、交換後または修理後のコントローラ１１０により、ディスクシェルフ１２０のリコンストラクションの処理を引き継いでもよい。そこで、コントローラ１１０の起動時の処理手順を説明する。
【０１１０】
図１３は、コントローラ起動時の処理の例を示すフローチャートである。以下、図１３に示す処理をステップ番号に沿って説明する。
（ステップＳ３１）保守作業後のコントローラ１１０が起動する。アクセス制御部１１１ｂは、ディスク装置群１３０にアクセスするための準備を完了させる。
【０１１１】
（ステップＳ３２）復元処理部１１１ｃは、記憶部１２１ａに記憶されたリコンストラクション実行管理テーブル１５０を読み出して、記憶部１１１ａに格納する。
（ステップＳ３３）復元処理部１１１ｃは、記憶部１１１ａに記憶されたリコンストラクション実行管理テーブルに基づいて、ディスクシェルフ１２０がリコンストラクションを実行中であるか否かを判定する。ディスクシェルフ１２０がリコンストラクションを実行中である場合、処理をステップＳ３４に進める。ディスクシェルフ１２０がリコンストラクションを実行中でない場合、処理を終了する。例えば、リコンストラクション実行管理テーブルにおいて、“リコンストラクション中”の状態のディスク装置がある場合、ディスクシェルフ１２０でリコンストラクション中であると判断する。一方、同テーブルにおいて、“リコンストラクション中”の状態のディスク装置がない場合、ディスクシェルフ１２０でリコンストラクション中でないと判断する。
【０１１２】
（ステップＳ３４）復元処理部１１１ｃは、復元処理部１２１ｃにリコンストラクションの停止を指示する。
（ステップＳ３５）復元処理部１１１ｃは、復元処理部１２１ｃからリコンストラクションを停止した旨の応答を受信する。
【０１１３】
（ステップＳ３６）復元処理部１１１ｃは、記憶部１１１ａに記憶されたリコンストラクション進捗管理テーブルに基づいて、リコンストラクションの再開ポイントを取得する。具体的な方法は、図１２のステップＳ２４と同様である。
【０１１４】
（ステップＳ３７）復元処理部１１１ｃは、リコンストラクションを実行する。
このようにして、コントローラ１１０が保守作業後に起動した際に、ディスクシェルフ１２０でリコンストラクションが実行されている場合には、コントローラ１１０が当該リコンストラクションを引き継ぐ。なお、ステップＳ３７の手順は、図１１で説明した手順と同様である。ただし、ステップＳ１１を初回に実行する際には、ステップＳ３６で再開ポイントとしたストライプを選択する。２回目以降にステップＳ１１を実行する場合は、復元処理部１１１ｃと同様である。
【０１１５】
また、ステップＳ３４，Ｓ３５において、ディスクシェルフ１２０はコントローラ１１０の死活監視を行うため、コントローラ１１０が起動したことを検出することもできる。ディスクシェルフ１２０は、コントローラ１１０が起動したことを検出したことを契機として、自身が実行中のリコンストラクションを自発的に停止してもよい。
【０１１６】
ここで、コントローラ１１０のＣＰＵ１１１は、アクセスなどの制御を行うため、ディスクシェルフ１２０のＣＰＵ１２１よりも高性能であることがある。この場合、リコンストラクションの処理をＣＰＵ１２１よりもＣＰＵ１１１に実行させた方が、短時間でリコンストラクションを完了できる可能性がある。したがって、コントローラ１１０の起動後に、ディスクシェルフ１２０からコントローラ１１０へリコンストラクションを引き継ぐことで、リコンストラクションを一層効率化できる。
【０１１７】
また、ストレージシステム１００では、コントローラ１１０に代替してリコンストラクションを行う機能をディスクシェルフ１２０に設ける。このようにすれば、既存の筐体に対して別筐体を設けなくてよいので、スペースを節約できる。また、ストレージシステム１００とディスクシェルフ１２０とは電源を個別に供給できることが多い。このため、コントローラ１１０を保守作業のために電源停止する場合に、ディスクシェルフ１２０でリコンストラクションを継続するような環境を、既存の装備を利用して低コストで実現できる。
【０１１８】
更に、ディスクシェルフ１２０は複数段設けることができる。その場合、例えば、ＲＡＩＤグループ管理テーブル１４０において、ディスクシェルフごとに（例えば、ディスクシェルフの識別情報に対応付けて）ＲＡＩＤグループを管理する。そして、復元処理部１１１ｃは、リコンストラクションの対象となっているディスクシェルフの所定の記憶部に、リコンストラクション実行管理テーブル１５０やリコンストラクション進捗管理テーブル１６０を格納する。このようにすれば、ディスクシェルフを複数段設ける場合にも、各ディスクシェルフにおいてリコンストラクションを引き継ぐことができる。したがって、ディスクシェルフを複数段設ける場合にも、リコンストラクションを効率化できる。
【０１１９】
なお、ＲＡＩＤ１により冗長化された２つのディスク装置のうちの一方が故障した場合に、スペアディスクに正常なディスク装置のデータを複製して、データの復旧を図ることも考えられる。その場合にも、ストレージシステム１００と同様にして、当該データ復旧を効率的に行うことができる。なお、ストライプ単位で復元済の部分を管理する代わりに、例えば、セクタ単位、あるいは、セクタの集合（ブロック）単位などで、故障したディスク装置に記憶されていたデータのうち、復元済／未復元の部分を管理してもよい。
【符号の説明】
【０１２０】
１  ストレージシステム
１ａ，１ｂ，１ｃ，１ｄ，１ｅ  記憶装置
１ｆ，１ｇ  制御装置
【図１】
0005891890.tif 000002
【図２】
0005891890.tif 000003
【図３】
0005891890.tif 000004
【図４】
0005891890.tif 000005
【図５】
0005891890.tif 000006
【図６】
0005891890.tif 000007
【図７】
0005891890.tif 000008
【図８】
0005891890.tif 000009
【図９】
0005891890.tif 000010
【図１０】
0005891890.tif 000011
【図１１】
0005891890.tif 000012
【図１２】
0005891890.tif 000013
【図１３】
0005891890.tif 000014