(57)【要約】  ストレージコントローラがリビルド処理を行うと、ストレージコントローラ処理が集中するため、ストレージコントローラの負荷が大きい。  ストレージ装置は、ＲＡＩＤグループを構成し、同一バスに接続され、相互に通信する複数の記憶デバイスを備える。複数の記憶デバイスのそれぞれは、デバイスコントローラと、記憶媒体と、を有する。複数の記憶デバイスは、ＲＡＩＤストライプに含まれる、複数のデータ及び複数のデータに基づいて生成されるパリティのそれぞれを格納する。ＲＡＩＤグループに含まれる第一記憶デバイスの第一デバイスコントローラは、ＲＡＩＤグループに含まれる第一記憶デバイス以外の複数の記憶デバイスにＲＡＩＤストライプに含まれる複数のデータ及び／又は前記パリティの転送指示を送信し、転送された複数のデータ及び前記パリティに基づいてＲＡＩＤストライプの第一記憶デバイスに対応するデータ又はパリティを復元する。
2016135872.tif 000002
【特許請求の範囲】
【請求項１】
ＲＡＩＤグループを構成し、同一バスに接続され、相互に通信を行う複数の記憶デバイスを備え、
前記複数の記憶デバイスのそれぞれは、デバイスコントローラと、データを格納する記憶媒体と、を有し、
前記複数の記憶デバイスには、ＲＡＩＤストライプに含まれる、複数のデータ及び前記複数のデータに基づいて生成されるパリティのそれぞれが格納され、
前記ＲＡＩＤグループに含まれる第一記憶デバイスの第一デバイスコントローラは、
前記ＲＡＩＤグループに含まれる前記第一記憶デバイス以外の複数の記憶デバイスに前記ＲＡＩＤストライプに含まれる前記複数のデータ及び／又は前記パリティの転送指示を送信し、転送された前記複数のデータ及び前記パリティに基づいて前記ＲＡＩＤストライプの前記第一記憶デバイスに対応するデータ又はパリティを復元する
ことを特徴とするストレージ装置。
【請求項２】
前記複数の記憶デバイスそれぞれのデバイスコントローラは、
ＲＡＩＤ構成情報を受信し、
前記ＲＡＩＤ構成情報は、前記ＲＡＩＤグループのＲＡＩＤレベル、前記ＲＡＩＤストライプに含まれるデータの数及びパリティの数、前記ＲＡＩＤストライプに含まれるデータ及びパリティの１つあたりのサイズ並びに前記複数の記憶デバイスそれぞれの記憶領域を一意に識別する記憶デバイス識別情報を含む
ことを特徴とする請求項１に記載のストレージ装置。
【請求項３】
前記第一デバイスコントローラは、
前記ＲＡＩＤ構成情報に基づいて前記転送指示の送信先の複数の記憶デバイスを特定し、前記転送指示に前記特定した複数の記憶デバイスの転送対象データが格納されている範囲を指定する情報を含める
ことを特徴とする請求項２に記載のストレージ装置。
【請求項４】
前記第一デバイスコントローラは、
前記第一記憶デバイスのデータを復元する指示であるリビルド指示の受信に応じて、前記ＲＡＩＤグループに含まれる前記第一記憶デバイス以外の複数の記憶デバイスに前記転送指示を送信する
ことを特徴とする請求項３に記載のストレージ装置。
【請求項５】
前記第一デバイスコントローラは、
前記記憶媒体からデータを読み出し、前記読み出したデータにアンコレクタブルエラーが発生している場合、前記複数の記憶デバイスに対して、前記アンコレクタブルエラーが発生したデータに対応するＲＡＩＤストライプに含まれる前記複数のデータ及び／又は前記パリティの転送指示を送信し、転送された前記複数のデータ及び前記パリティに基づいて前記アンコレクタブルエラーが発生したデータを復元する
ことを特徴とする請求項２に記載のストレージ装置。
【請求項６】
前記第一デバイスコントローラは、前記復元したデータを前記記憶媒体に格納する
ことを特徴とする請求項５に記載のストレージ装置。
【請求項７】
前記複数の記憶デバイスのそれぞれの前記デバイスコントローラは、データ転送指示に応じて、前記記憶媒体に対するデータのリード及びライトを制御する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項８】
それぞれがデバイスコントローラと、データを格納する記憶媒体と、を有し、相互に通信を行う複数の記憶デバイスと、
前記複数の記憶デバイスとバスで接続され、前記複数の記憶デバイスをＲＡＩＤグループとして制御するストレージコントローラと、
を備え、
前記複数の記憶デバイスには、ＲＡＩＤストライプに含まれる、複数のデータ及び前記複数のデータに基づいて生成されるパリティのそれぞれが格納され、
前記ＲＡＩＤグループに含まれる第一記憶デバイスの第一デバイスコントローラは、
前記ＲＡＩＤグループに含まれる前記第一記憶デバイス以外の複数の記憶デバイスに前記ＲＡＩＤストライプに含まれる前記複数のデータ及び／又は前記パリティの転送指示を送信し、転送された前記複数のデータ及び前記パリティに基づいて前記ＲＡＩＤストライプの前記第一記憶デバイスに対応するデータ又はパリティを復元する
ことを特徴とするストレージ装置。
【請求項９】
前記ストレージコントローラは、第一記憶デバイスが接続されたことに応じて、
前記第一記憶デバイスに、前記ＲＡＩＤグループのＲＡＩＤレベル、前記ＲＡＩＤストライプに含まれるデータの数及びパリティの数、前記ＲＡＩＤストライプに含まれるデータ及びパリティの１つあたりのサイズ並びに前記複数の記憶デバイスそれぞれの記憶領域を一意に識別する記憶デバイス識別情報を含むＲＡＩＤ構成情報を送信する
ことを特徴とする請求項８に記載のストレージ装置。
【請求項１０】
前記ストレージコントローラは、第一記憶デバイスに対してリードデータ転送指示を送信し、
前記第一記憶デバイスの第一デバイスコントローラは、
前記リードデータ転送指示によって指定されたデータを前記記憶媒体から読み出し、
前記読み出したデータにアンコレクタブルエラーが発生している場合、前記複数の記憶デバイスに対して、前記アンコレクタブルエラーが発生したデータに対応するＲＡＩＤストライプに含まれる前記複数のデータ及び／又は前記パリティの転送指示を送信し、転送された前記複数のデータ及び前記パリティに基づいて前記アンコレクタブルエラーが発生したデータを復元し、前記復元したデータ及び前記アンコレクタブルエラーの発生を示すエラー情報を前記ストレージコントローラに転送する
ことを特徴とする請求項９に記載のストレージ装置。
【請求項１１】
前記ストレージコントローラは、
前記エラー情報に基づいて前記第一記憶デバイスのアンコレクタブルエラーの発生回数を管理し、
前記アンコレクタブルエラーの発生回数が所定値以上となった場合、前記ストレージコントローラに接続されている計算機に警告を通知する
ことを特徴とする請求項１０に記載のストレージ装置。
【請求項１２】
前記ストレージコントローラは、さらに計算機に接続され、
前記第一記憶デバイスに、前記第一記憶デバイスのデータを復元する指示であるリビルド指示を送信し、
前記第一デバイスコントローラは、前記リビルド指示を受信すると、ＲＡＩＤストライプ毎にデータを復元し、前記データの復元が完了した前記ＲＡＩＤストライプに対応するデバイスの論理記憶空間（ＬＢＡ）であるリビルド完了デバイスＬＢＡを前記ストレージコントローラに送信し、
前記ストレージコントローラは、
前記計算機からリード要求を受信し、前記リード要求の対象ＬＢＡが前記第一記憶デバイスに対応する場合、前記リビルド完了デバイスＬＢＡに基づいて、前記リード要求の対象ＬＢＡのデータ復元がされているかを判定し、
前記リード要求の対象ＬＢＡのデータが復元されている場合、前記第一記憶デバイスにリードデータ転送指示を送信する
ことを特徴とする請求項９に記載のストレージ装置。
【請求項１３】
前記ストレージコントローラは、
前記計算機からライト要求を受信し、前記ライト要求の対象ＬＢＡが前記第一記憶デバイスに対応する場合、前記リビルド完了デバイスＬＢＡに基づいて、前記ライト要求の対象ＬＢＡのデータ復元がされているかを判定し、
前記ライト要求の対象ＬＢＡのデータが復元されていない場合、前記ライト要求の対象ＬＢＡを含むＲＡＩＤストライプの更新後パリティを生成し、
前記更新後パリティを更新前パリティが格納されている第二記憶デバイスに書き込む
ことを特徴とする請求項１２に記載のストレージ装置。
【請求項１４】
前記複数の記憶デバイスのそれぞれの前記デバイスコントローラは、前記ストレージコントローラからのデータ転送指示に応じて、前記記憶媒体に対するデータのリード及びライトを制御する
ことを特徴とする請求項８に記載のストレージ装置。
【請求項１５】
デバイスコントローラと、データを格納する記憶媒体と、を有する記憶デバイスであって、
前記デバイスコントローラは、
複数の他の記憶デバイスと通信を行うように接続され、前記記憶デバイス及び前記複数の他の記憶デバイスがＲＡＩＤグループとして制御されている場合に、前記記憶媒体に、ＲＡＩＤストライプに含まれる、複数のデータ及び前記複数のデータに基づいて生成されるパリティのうち１つを格納し、
前記複数の他の記憶デバイスに対して、前記ＲＡＩＤストライプに含まれる前記複数のデータ及び／又は前記パリティの転送指示を送信し、転送された前記複数のデータ及び前記パリティに基づいて前記ＲＡＩＤストライプの前記記憶デバイスに対応するデータ又はパリティを復元する
ことを特徴とする記憶デバイス。
【請求項１６】
前記デバイスコントローラは、
ＲＡＩＤ構成情報を受信し、
前記ＲＡＩＤ構成情報は、前記ＲＡＩＤグループのＲＡＩＤレベル、前記ＲＡＩＤストライプに含まれるデータの数及びパリティの数、前記ＲＡＩＤストライプに含まれるデータ及びパリティの１つあたりのサイズ並びに前記複数の記憶デバイスそれぞれの記憶領域を一意に識別する記憶デバイス識別情報を含む
ことを特徴とする請求項１５に記載の記憶デバイス。
【請求項１７】
前記デバイスコントローラは、
前記ＲＡＩＤ構成情報に基づいて前記転送指示の送信先の複数の記憶デバイスを特定し、前記転送指示に前記特定した複数の記憶デバイスの転送対象データが格納されている範囲を指定する情報を含める
ことを特徴とする請求項１６に記載の記憶デバイス。
【請求項１８】
前記デバイスコントローラは、
前記記憶デバイスのデータを復元する指示であるリビルド指示の受信に応じて、前記ＲＡＩＤグループに含まれる前記他の複数の記憶デバイスに前記転送指示を送信する
ことを特徴とする請求項１７に記載の記憶デバイス。
【請求項１９】
前記デバイスコントローラは、
前記記憶媒体からデータを読み出し、前記読み出したデータにアンコレクタブルエラーが発生している場合、前記他の複数の記憶デバイスに対して、前記アンコレクタブルエラーが発生したデータに対応するＲＡＩＤストライプに含まれる前記複数のデータ及び／又は前記パリティの転送指示を送信し、転送された前記複数のデータ及び前記パリティに基づいて前記アンコレクタブルエラーが発生したデータを復元する
ことを特徴とする請求項１７に記載の記憶デバイス。
【請求項２０】
前記記憶媒体は、フラッシュメモリチップであり、
前記複数の記憶デバイスのそれぞれの前記デバイスコントローラは、前記フラッシュメモリチップに対するデータのリード及びライトを制御する
ことを特徴とする請求項１５に記載の記憶デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
ストレージ装置及び記憶デバイスに関する。
【背景技術】
【０００２】
近年、ストレージ装置に搭載される記憶デバイスとして、ＮＡＮＤ型フラッシュメモリ（ＦＭ）を記憶媒体として用いたＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）に代表される、ＨＤＤ(Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ)よりも高速にアクセス可能な記憶デバイスが普及している。さらに、ＲｅＲＡＭ（Ｒｅｓｉｓｔａｎｃｅ  Ｒａｎｄｏｍ Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）やＰＣＭ（Ｐｈａｓｅ  Ｃｈａｎｇｅ  Ｍｅｍｏｒｙ)等の、フラッシュメモリよりも高速にアクセス可能な半導体記憶媒体を備えた記憶デバイスの実用化に向けた開発が行われている。【０００３】
ストレージ装置においては、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ／Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）技術を用いて、システムを高可用化しているものが多い。ＲＡＩＤ技術とは、ストレージ装置のコントローラ（ストレージコントローラ）がホスト計算機などの上位装置から受け付けたライトデータからパリティなどの冗長データを生成し、ライトデータとパリティとをそれぞれ異なる記憶デバイスに分散格納する技術である。ＲＡＩＤ技術を採用することで、一部の記憶デバイスに障害が発生し、その記憶デバイスからデータを読み出せなくなった場合でも、その他の記憶デバイスに格納されている情報を用いて、データを復元することができる。【０００４】
例えば、特許文献１には、記憶デバイスの１つが故障した場合に、ストレージコントローラが故障した記憶デバイス以外の記憶デバイスからデータ及びパリティをリードし、ストレージコントローラがデータを復元し、新しい記憶デバイスに復元したデータをライトするという技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−９４９９４
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１に記載のリビルド処理を行うと、ストレージコントローラが複数の記憶デバイスからデータ／パリティを読み出し、データを復元し、復元したデータを新しい記憶デバイスに書き込むという処理が発生し、ストレージコントローラにデータが集中するため、ストレージコントローラの負荷が大きく、リビルド時の性能が低下するという課題がある。【０００７】
例えば、ストレージコントローラの負荷が高いと、通常のＩＯ処理性能が低下する。特に、ＳＳＤはＨＤＤと比べて高速アクセス可能であるが、ストレージコントローラがネックになると、ＳＳＤの性能を活かすことができず、ストレージ装置の性能は低下する。
【課題を解決するための手段】
【０００８】
ストレージ装置は、ＲＡＩＤグループを構成し、同一バスに接続され、相互に通信を行う複数の記憶デバイスを備える。複数の記憶デバイスのそれぞれは、デバイスコントローラと、データを格納する記憶媒体と、を有する。複数の記憶デバイスは、ＲＡＩＤストライプに含まれる、複数のデータ及び複数のデータに基づいて生成されるパリティのそれぞれを格納する。ＲＡＩＤグループに含まれる第一記憶デバイスの第一デバイスコントローラは、ＲＡＩＤグループに含まれる第一記憶デバイス以外の複数の記憶デバイスにＲＡＩＤストライプに含まれる複数のデータ及び／又は前記パリティの転送指示を送信し、転送された複数のデータ及び前記パリティに基づいてＲＡＩＤストライプの第一記憶デバイスに対応するデータ又はパリティを復元する。
【発明の効果】
【０００９】
本発明によれば、データ復元処理における復元後データの転送が不要になるため、データの転送回数が削減され、データの復元処理が高速になる。また、ストレージコントローラがデータ復元処理する際の負荷を低減できるため、データ復元処理中のストレージ装置の性能を向上することができる。
【図面の簡単な説明】
【００１０】
【図１】本実施形態の概要を示す。
【図２】ストレージシステムの物理構成を示す。
【図３】論理ボリュームとＲＡＩＤグループ（ＲＡＩＤ５）の対応関係を示す。
【図４】ＰＣＩｅバスのアドレスマップを示す。
【図５】ＲＡＩＤ構成情報を示す。
【図６】記憶デバイスの外観を示す。
【図７】記憶デバイスの物理構成を示す。
【図８】ＦＭチップの構成を示す。
【図９】記憶デバイスのアドレス変換テーブルを示す。
【図１０】ライト要求の動作フローを示す。
【図１１】リード要求の動作フローを示す。
【図１２】ストレージ装置におけるリビルド処理の動作フローを示す。
【図１３】記憶デバイスにおけるリビルド処理の動作フローを示す。
【図１４】リビルド中のＬＢＡの状態を示す。
【図１５】リビルド中のリード要求の動作フローを示す。
【図１６】リビルド中のライト要求の動作フローを示す。
【図１７】Ｉ／Ｏインターフェイスのアクセス要求キューを示す。
【図１８】記憶デバイスにおけるリビルド処理の動作フローを示す。
【図１９】論理ボリュームとＲＡＩＤグループ（ＲＡＩＤ１）の対応関係を示す。
【図２０】初期化シーケンスを示す。
【発明を実施するための形態】
【００１１】
図１は、本実施形態の概要を示す。ストレージ装置１０は、ストレージコントローラ１００と、記憶デバイス３１０〜３４０を備える。記憶デバイス３１０〜３４０はそれぞれが相互に通信可能な同一バスに接続されている。
【００１２】
ストレージコントローラ１００は、ストレージ装置１０の外部の計算機などからリード要求やライト要求を受信し、要求に従って記憶デバイスにアクセスする。
【００１３】
記憶デバイス３１０〜３４０のそれぞれは、デバイスコントローラ４１０と記憶媒体（不図示）を備える。デバイスコントローラ４１０は、記憶デバイスの外部の装置から受信したデータを記憶媒体に格納し、記憶媒体からデータを読み出して記憶デバイスの外部の装置に転送する。記憶媒体は、不揮発性半導体メモリであり、例えばフラッシュメモリである。
【００１４】
本実施形態では４台の記憶デバイスに基づいてＲＡＩＤ５（３Ｄａｔａ＋１Ｐａｒｉｔｙ）のＲＡＩＤグループが構成されているものとする。ＲＡＩＤ５ではＲＡＩＤストライプ毎に所定の規則でパリティが生成される。ＲＡＩＤストライプ０では、Ｄａｔａ０とＤａｔａ１とＤａｔａ２に基づいてＰａｒｉｔｙ０が生成されている。例えば、Ｄａｔａ０とＤａｔａ１とＤａｔａ２の排他的論理和演算（以下、ＸＯＲ演算）によりＰａｒｉｔｙ０が生成される。Ｄａｔａ０、Ｄａｔａ１、Ｄａｔａ２、Ｐａｒｉｔｙ０は、記憶デバイス３１０〜３４０に１つずつ分散格納される。記憶デバイスの障害等によりＤａｔａ１が読み出せなくなった場合、Ｄａｔａ０とＤａｔａ２とＰａｒｉｔｙ０のＸＯＲ演算によりＤａｔａ１が復元される。データの復元は、データの生成と言ってもよい。
【００１５】
次に本実施形態におけるデータ復元の処理を説明する。本実施形態ではデバイスコントローラ４１０は、ＸＯＲ演算の機能を備える。ＲＡＩＤストライプ０に属するＤａｔａ１を復元する場合、記憶デバイス３２０のデバイスコントローラ４１０は、ＲＡＩＤグループ内の他の記憶デバイス３１０、３３０、３４０に対して、ＲＡＩＤストライプ０に属するデータ及びパリティの転送を指示する。そして、記憶デバイス３２０のデバイスコントローラ４１０は、転送されたＤａｔａ０とＤａｔａ１とＰａｒｉｔｙ０のＸＯＲ演算を実行し、Ｄａｔａ１を復元する。
【００１６】
よって、データ復元に必要なデータ及びパリティデータを記憶デバイスに転送すれば記憶デバイスがデータを復元できるため、復元後のデータの転送が不要になる。これにより、データの復元処理が高速になる。また、ストレージコントローラ１００に負荷をかけることなくデータの復元を行うことができる。ストレージコントローラ１００の負荷を低減することでストレージ装置の性能が向上する。
【００１７】
図２〜５を用いて、ストレージ装置の構成を説明する。
【００１８】
図２は、本発明の実施例に係るストレージシステムの物理構成の一例である。本ストレージシステムは、ストレージ装置１０に、ホスト計算機（以下、ホスト）２０が接続される。ストレージ装置１０とホスト２０は、ネットワーク１７０を介して通信可能である。ネットワーク１７０は、例えば、ＳＡＮ（Storage  Area  Network）、ＬＡＮ（Local  Area  Network）などである。
【００１９】
ストレージ装置１０は、記憶装置３００と、記憶装置３００に接続されたストレージコントローラ１００とを有する。記憶装置３００は、複数の記憶デバイス（例えば、ＳＳＤ）３１０〜３４０と、複数の記憶デバイス３１０〜３４０それぞれと内部バス（例えば、PCI-Express(PCIe)バス）によって接続されるスイッチ３９０を有する。複数の記憶デバイス３１０〜３４０はスイッチ３９０を介して相互に接続されており、記憶デバイス間でＥｎｄ−ｔｏ−Ｅｎｄ通信が可能である。複数の記憶デバイス３１０〜３４０のそれぞれはスイッチ３９０を介してストレージコントローラ１００と接続される。ストレージコントローラ１００は、リード／ライト要求を記憶デバイスに振り分けるルータ等であってもよい。
【００２０】
ストレージコントローラ１００は、ホスト２０と通信を行うデバイスであるホストインターフェイス１１０、ストレージ装置１０全体の動作制御を行うＣＰＵ（Central  Processing  Unit）１２０、ＣＰＵ１２０がデータ転送時に使用するストレージ管理情報やホスト２０からライトされるデータや記憶装置３００からリードされたデータを一時的に記憶するメモリ１３０、記憶装置３００と通信を行うデバイスであるストレージインターフェイス１４０、及び、それらに内部バス（例えば、PCI-Express（ＰＣＩｅ）バス、AXI（Advanced  eXtensible  Interface）バス）１６０を通じて接続されるスイッチ１５０を有する。ここでは、全ての内部バス１６０には同一の記号が付されているが、それらの内部バスは、同一のバス規格のバスで構成されていてもよいし、異なるバス規格のバスを含んでいてもよい。また、ストレージコントローラ１００内のストレージインターフェイス１４０は、ＰＣＩｅバス１８０を介して複数の記憶デバイス３００と接続される。
【００２１】
ストレージコントローラ１００は、ホスト２０にＶＯＬ（論理ボリューム）を提供する。本実施例のＶＯＬは、複数の記憶デバイス３１０〜３４０でＲＡＩＤグループを構築しているＶＯＬを想定している。ストレージコントローラ１００は、ホスト２０からアクセス先情報を含んだアクセス要求を受ける。アクセス要求は、例えばリード要求又はライト要求である。アクセス要求に従うデータとは、リード要求に従ってＶＯＬからリードされるリード対象データ、又は、ライト要求に従ってＶＯＬにライトされるライト対象データである。アクセス先情報は、例えばアクセス先（リード元又はライト先）のＶＯＬのＩＤとそのＶＯＬのアクセス先の論理アドレス（ホストＬＢＡ（Logical  Block  Address）を含む。
【００２２】
本実施例では、記憶デバイス３１０〜３４０の４台を用いてＲＡＩＤ５（３Ｄａｔａ＋１Ｐａｒｉｔｙ）を構築したときの例を説明する。
【００２３】
図２０に本実施例における、初期化シーケンスを示す。図２０のように初期化時はＣＰＵ１２０が記憶デバイス３１０〜３４０各々にデバイス情報（例えば、論理記憶空間サイズと通信用空間サイズ）の他に「リビルド機能の有無」問い合わせる。各記憶デバイス３１０〜３４０は、ＣＰＵ１２０からの問い合わせに応じて、論理記憶空間サイズ、通信用空間サイズ及びリビルド機能の有無をＣＰＵ１２０に送信する。
【００２４】
このリビルド機能の有無とは、以降実施例１〜３に記載のリビルド処理方法に対応しているか否かを示すフラグであり、ＲＡＩＤグループを構成する全ての記憶デバイス３１０〜３４０から、リビルド機能「有」の返答があった場合に本発明のリビルド処理が有効になる。そして、ＣＰＵ１２０は、後述のＲＡＩＤ構成情報８１０を各記憶デバイス３１０〜３４０に送信する。
【００２５】
これにより、ＲＡＩＤグループ内に一つでもリビルド機能が持たない記憶デバイスがある場合に、本実施例の機能をオフにして、通常通りストレージコントローラ１００がリビルド処理を行うことができる。
【００２６】
図３に本実施例におけるＶＯＬ２００とＲＡＩＤグループ２１０の関係を示す。ホスト２０からはＶＯＬ２００が見えており、本実施例では、ホストＬＢＡは、１６ＫＢ単位に管理するため、Ｄａｔａ０、Ｄａｔａ１、・・・は全て１６ＫＢのデータである。また、記憶デバイス３１０〜３４０の４台は、それぞれデバイス＃を０、１、２、３とする。ＲＡＩＤグループ２１０のデバイス＃とデバイス内アドレスはホストＬＢＡの値を用いて以下の計算によって一意に決めることができる。具体的には、デバイス＃はホストＬＢＡの値をＲＡＩＤグループのデバイス数４台で割った余りとなる。また、デバイス内アドレスは、ホストＬＢＡの値をＲＡＩＤストライプ中のデータの個数３で割った値（端数切捨て）で求めることができる。ここで、ＲＡＩＤストライプとは、Ｄａｔａ０、Ｄａｔａ１、Ｄａｔａ２とＤａｔａ０〜２の１６ＫＢをビット毎にＸＯＲ演算したパリティデータとを一つにまとめた単位のことを指す。
【００２７】
次に具体例としてホスト２０のライトデータをＶＯＬ２００のホストＬＢＡ「０ｘ００００＿０００Ｅ」に書き込む例を説明する。この場合、デバイス＃は１４÷４の余りで２、デバイス内アドレスは、１４÷３で端数を切り捨てて４となり、ＲＡＩＤグループのデバイス数とＲＡＩＤストライプ当りのデータ個数が分かれば、計算で一意に求めることが可能となる。
【００２８】
また、ライトデータを書き込む際、対応するＲＡＩＤストライプ内のパリティが更新される。Ｄａｔａ１４が更新される場合は、ライトデータによる更新前データ、更新後データ、更新前のＰａｒｉｔｙ４の３つのＸＯＲ演算により更新後のＰａｉｒｔｙ４が生成される。
【００２９】
図４にＰＣＩｅバスのアドレスマップの一例を示す。このアドレスマップは、次のように作成される。まず、記憶デバイスの初期化時または、ストレージコントローラ１００が新たに記憶デバイスを認識したときに、ストレージコントローラ１００は各記憶デバイスにどのようなアドレス空間が設定されているかを問い合わせる。各記憶デバイスは、ストレージコントローラ１００に、アドレス空間の範囲（デバイス内アドレス）と論理記憶空間及び通信用空間それぞれのサイズを応答する。ストレージコントローラ１００は、その応答結果を用いて論理記憶空間上で記憶デバイスそれぞれを識別できるようにアドレスオフセットを設定してアドレスマップを作成する。そして、ストレージコントローラ１００は、アドレスマップをＰＣＩｅのルートコンプレックス（ストレージインターフェイス１４０）とスイッチ３９０に設定する。例えば、スイッチ内のメモリにアドレスマップが格納される。これにより、複数の記憶デバイスを備えたストレージ装置において各記憶デバイスのアドレスを一意に識別することが可能になり、スイッチ３９０は対応するアドレスにパケットをルーティングすることが可能となる。
【００３０】
図４では、デバイス＃０〜３の論理記憶空間のアドレスオフセットはそれぞれ「０ｘ００００＿００００」「０ｘ１０００＿００００」「０ｘ２０００＿００００」「０ｘ３０００＿００００」、デバイス＃０〜３の通信用空間のアドレスオフセットはそれぞれ「０ｘ０ＦＦ０＿００００」「０ｘ１ＦＦ０＿００００」「０ｘ２ＦＦ０＿００００」「０ｘ３ＦＦ０＿００００」が設定されている。ここで、通信用空間は、各記憶デバイス３１０〜３４０のプロセッサ４１５のレジスタやデータバッファ４１６の一部または全てをマッピングしている。この通信用空間のアドレスを用いることで、ストレージコントローラ１００との制御情報のやり取り、他の記録デバイスからリードしたデータの格納などを通信することができる。
【００３１】
図５にストレージコントローラ１００が各記憶デバイスにアクセスするために設定するＲＡＩＤ構成情報８１０を示す。ＲＡＩＤ構成情報８１０は、ストレージ装置１０のメモリ１３０に格納されている。
【００３２】
ＲＡＩＤグループ＃８１１は、ストレージ装置１０内でＲＡＩＤグループを一意に識別するための情報である。ＲＡＩＤレベル８１２は、そのＲＡＩＤグループのＲＡＩＤ制御の方式を示す。ＲＡＩＤレベルは、例えば、ＲＡＩＤ１、ＲＡＩＤ５、ＲＡＩＤ６、ＲＡＩＤ１０等である。ＲＡＩＤ構成８１３は、そのＲＡＩＤグループにおけるＲＡＩＤストライプ内のデータの数とパリティの数を示す。例えば、１つのＲＡＩＤストライプに対して、３つの記憶デバイスがデータを格納し、１つの記憶デバイスがパリティを格納する場合、ＲＡＩＤ構成は「３Ｄ１Ｐ」と表わされる。ストライプサイズ８１４は、ＲＡＩＤストライプ内でのデータ及びパリティそれぞれ１つあたりのサイズである。デバイス＃８１５は、ＲＡＩＤグループ内でデバイスを一意に識別する情報である。デバイスオフセット８１６は、複数の記憶デバイスを1つの論理記憶空間として使用する場合において、その論理アドレス空間における各記憶デバイスのアドレスの開始位置を示す。デバイスサイズ８１７は記憶デバイスの論理記憶空間のサイズを示しており、デバイスオフセット８１６からデバイスサイズ８１７分のアドレス空間が、各記憶デバイス内のアクセス可能な論理記憶空間となる。
【００３３】
ストレージコントローラ１００は前述のデバイス内アドレスだけでは、記憶デバイスを区別できないため、デバイス＃毎にアドレスオフセットを設定し、アドレスオフセットにデバイス内アドレスを足した値（デバイスＬＢＡ）を用いることで、ＰＣＩｅバスにつながった記憶デバイス３１０〜３４０の任意の記憶デバイスの記憶領域に一意にアクセスすることが可能となる。本発明では、初期化時、または新たにデバイスを認識したときに、同一ＲＡＩＤグループにある記憶デバイスの情報を全て含めたＲＡＩＤ構成情報８１０とリード/ライトコマンドのやり取りをするのに必要な通信用空間情報をそのＲＡＩＤグループ内の全ての記憶デバイスに通知する。本実施例では、通信用空間情報とは、各記憶デバイスの通信用空間のアドレスである。これにより、各記憶デバイスは、ＲＡＩＤグループ内の他の記憶デバイスにアクセスすることが可能となる。
【００３４】
また、ＲＡＩＤ構成情報８１０は各記憶デバイスについてリビルド処理中かを示す情報を備えてもよい。
【００３５】
本実施例では、ＲＡＩＤ構成情報８１０として、ＲＡＩＤグループ＃８１１、ＲＡＩＤレベル８１２、ＲＡＩＤ構成８１３、ストライプサイズ８１４、デバイス＃、デバイスオフセット８１６、デバイスサイズ８１７の例を記載したが、この情報に限定されず、実施例１〜３に記述するリビルド機能を備えた記憶デバイスがリビルド処理をするために、他の記憶デバイスにデータまたはパリティの転送指示ができるような情報であれば良い。例えば、ストレージコントローラ１００は、デバイスオフセット８１６とデバイスサイズ８１７の代わりに、デバイススタートアドレスとデバイスエンドアドレスを通知しても良いし、後述のバスにＳＡＳを利用した例で説明するが、デバイスを識別するデバイスアドレスとデバイスサイズを通知しても良い。本実施例では、デバイスオフセット８１６とデバイスサイズ８１７、デバイススタートアドレスとデバイスエンドアドレス、デバイスアドレスとデバイスサイズは、複数の記憶デバイスそれぞれの記憶領域を一意に識別する情報であり、記憶デバイス識別情報と呼ぶ。
【００３６】
次に図６〜９を用いて、記憶デバイスの構成について説明する。本実施例では、記憶デバイスに同一の機能を持った記憶デバイス３１０〜３４０を用いるため、記憶デバイス３１０を例にとり説明する。
【００３７】
図６は、記憶デバイス３１０の外観を示す。図６は、記憶デバイスがＰＣＩｅカードの形状で実装された際のイメージを示している。本図では、外観全体が記憶デバイスにあたり、デバイスコントローラ４１０を備える。デバイスコントローラ４１０には、ハードウェアロジック４０９がＬＳＩ（ＦＰＧＡやＡＳＩＣの形態を含む)として実装され、ＲＡＭ４１３も備えている。カードはこの他に、フラッシュメモリ（ＦＭ）４２１が実装されており、また、外部の装置とはカードエッジ４０８を通じて接続される。具体的にはＰＣＩｅコアがＬＳＩに実装され、信号線がカードエッジ４０８に向けて配線されている。なお、カードエッジ４０８はコネクタ形状でも構わない。また、図には示さないが、同装置のＲＡＭ４１３の揮発を保護するためにバッテリまたは同等の役割を果たすスーパーキャパシタが搭載されることもある。
【００３８】
本実施形態では、記憶媒体はフラッシュメモリとするが、他の種類の不揮発性半導体メモリである相変化メモリ（ＰＣＭ：Ｐｈａｓｅ  Ｃｈａｎｇｅ  Ｍｅｍｏｒｙ）、磁気抵抗メモリ（ＭＲＡＭ：Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、抵抗変化型メモリ（ＲｅＲＡＭ：Ｒｅｓｉｓｔａｎｃｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は強誘電体メモリ（ＦｅＲＡＭ：Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等であってもよい。
【００３９】
図７は、記憶デバイス３１０の構成例である。
【００４０】
記憶デバイス３１０は、記憶媒体であるＦＭ４２１と、デバイスコントローラ４１０とを有する。デバイスコントローラ４１０は、ＦＭ４２１と接続されており、ＦＭ４２１に対するデータのリード／ライト等のアクセスを制御する。
【００４１】
ＦＭ４２１は、複数（例えば３２個）のＦＭチップ４２０で構成される。ＦＭ４２１は、例えばＮＡＮＤ型のＦＭである。各ＦＭチップ４２０は、図８に示すように、複数のブロック（物理ブロック）を有し、各ブロックは、複数のページ（物理ページ）を有する。ＦＭ４２１では、ブロック単位でデータが消去され、ページ単位でデータがリード／ライトされる。本実施例では、ページ単位を１６ＫＢとして説明するが、ページは使用するＦＭチップ４２０により異なるため、そのサイズは限定されない。
【００４２】
デバイスコントローラ４１０は、ＲＡＭ（Random  Access  Memory）４１３、リビルド処理部４１８、データバッファ４１６、Ｉ／Ｏインターフェイス４１１、ＦＭインターフェイス４１７、プロセッサ４１５、及びそれらのデータ転送を中継するスイッチ４１４を有する。
【００４３】
ＲＡＭ４１３は、例えばＤＲＡＭ（Dynamic  Random  Access  Memory）であり、主にＦＭ管理情報を記憶する。ＦＭ管理情報は、例えば、一部のＦＭチップ４２０に格納されていて、その一部のＦＭチップ４２０から読み出されてＲＡＭ４１３に格納されてよい。なお、データバッファ４１６の役割の一部または全てをＲＡＭ４１３が有してもよい。ストレージコントローラ１００から受け取ったＲＡＩＤ構成情報８１０は、このＲＡＭ４１３に格納される。
【００４４】
Ｉ／Ｏインターフェイス４１１は、バス１８０を介してストレージコントローラ１００と接続され、ストレージコントローラ１００内の構成要素と通信するデバイスである。
【００４５】
プロセッサ４１５は、ＲＡＭ４１３に記憶されたＦＭ管理情報を基にデバイスコントローラ４１０全体を制御する。また、プロセッサ４１５は、同一ＲＡＩＤグループ内の他の記憶デバイスにリードを実行し、リビルド処理を行う。この処理の具体例は、後述する。
【００４６】
データバッファ４１６は、デバイスコントローラ４１０でのデータ転送処理途中のデータを一時的に格納する。
【００４７】
ＦＭインターフェイス４１７は、複数（例えば８）のバスによってＦＭチップ４２０と接続する。各バスには、複数（例えば４）のＦＭチップ４２０が接続される。
【００４８】
リビルド処理部４１８は、ＸＯＲ演算を行うハードウエア回路である。本実施例は、リビルド処理部４１８はハードウエア回路と説明したが、デバイスコントローラ４１０がリビルド処理の機能を備えていればよく、ハードウエアが行ってもプロセッサ４１５がプログラムを実行することで行ってもよい。
【００４９】
スイッチ４１４、Ｉ／Ｏインターフェイス４１１、プロセッサ４１５、データバッファ４１６、ＦＭインターフェイス４１７及びリビルド処理部４１８は、ＡＳＩＣやＦＰＧＡ（Field  Programmable  Gate  Array）として、一つの半導体素子内で構成されてもよいし、複数の個別専用ＩＣ（Integrated  Circuit）を相互に接続した構成であってもよい。
【００５０】
続いて、本実施例において記憶デバイス３１０がストレージコントローラ１００に提供する論理記憶空間について説明する。論理記憶空間は、複数の論理領域で構成され、各論理領域には論理アドレスが対応付けられている。ストレージコントローラ１００（ＣＰＵ１２０）は、論理アドレスを指定したアクセスコマンドを記憶デバイス３１０に発行することにより、指定した論理アドレスに対応する論理領域のデータをリード／ライトできる。複数のＦＭチップ４２０により構成される物理記憶空間を構成する複数の物理領域の各々には、記憶デバイス３１０内部のみで用いる物理アドレスが対応付けられている。本実施例において、記憶デバイス３１０の物理領域の位置を表す物理アドレスを「ＰＢＡ」（ＰＢＡは、Physical  Block  Addressの略）と呼び、記憶デバイス３１０の論理領域の位置を表す論理アドレスを「デバイスＬＢＡ」（ＬＢＡは、Logical  Block  Addressの略）と呼ぶ。ＰＢＡは、ＦＭのページサイズである１６ＫＢ単位の位置を表す。本実施例では、ＦＭのページサイズとＰＢＡの管理単位は同じ例を記載するが、異なっていても良い。記憶デバイス３１０は、ＰＢＡとデバイスＬＢＡとの対応付けを例えば次のアドレス変換テーブルで管理する。
【００５１】
図９は、アドレス変換テーブル７１０の構成例を示す。
【００５２】
アドレス変換テーブル７１０は、記憶デバイス３１０内のＲＡＭ４１３内に格納されており、記憶デバイス３１０が提供する論理記憶空間の論理領域毎に、レコードを有する。各レコードは、デバイスＬＢＡ７１１、ＰＢＡ７１２を有する。
【００５３】
デバイスＬＢＡ７１１は、記憶デバイス３１０が提供する論理記憶空間を所定サイズの論理領域に区切った論理領域の先頭アドレスを表す。本実施例では、前記論理領域サイズを１６ＫＢにした例を記載する。これは、ＦＭ２１０へのアクセスできる単位であるページ単位（本実施例では１６ＫＢ）と同じとすることで、１対１で対応させることができるので、ＦＭ２１０へのアクセス制御が容易になる。
【００５４】
なお、この論理領域サイズは、記憶デバイス３１０が提供する論理記憶空間のサイズより小さいサイズであれば任意に決めても良い。
【００５５】
ＰＢＡ７１２は、物理領域の位置を表すＰＢＡである。前述したように、本実施例では、記憶デバイス３１０の物理記憶空間は、１６ＫＢ毎に分割して管理される。図９の例では、デバイスＬＢＡ「０ｘ００００_００００」にＰＢＡ「０ｘ００００_００１０」が対応付けられている。これにより、リードコマンドで指定されたデバイスＬＢＡが「０ｘ００００_００００」の場合、デバイスコントローラ４１０は、ＰＢＡ「０ｘ００００_００１０」が表すページからデータをリードする。
【００５６】
なお、デバイスＬＢＡにＰＢＡが対応付けられていない場合、デバイスＬＢＡに対応したＰＢＡ７１２のレコードは「未割当」が格納される。
【００５７】
「未割当」とは、そのＬＢＡに対してデータが格納されていない状態を示す。つまり、ＬＢＡにＰＢＡが割り当てられていない状態である。記憶デバイスが、例えばゼロデータがＦＭに書き込まれることによりフォーマットされている場合、その状態を「未割当」として管理してもよい。
【００５８】
また、例えばゼロデータがＦＭに書き込まれてフォーマットされている場合、ＬＢＡにゼロデータが格納されているＰＢＡが割り当てられることになるため、割当済みの状態として管理してもよい。
【００５９】
図１０を用いてストレージ装置１０がホスト２０からライト要求を受けた場合の動作フローを説明する。点線の矢印は、制御情報のやり取りを、実線の矢印は、データのやり取りを示している。
【００６０】
まず、ホスト２０がストレージ装置１０にライト要求を発行する。ライト要求にはライト先の論理ボリュームのＩＤとホストＬＢＡ「０ｘ０００＿００００」とライトデータサイズ「４８ＫＢ」の情報が含まれる。ライト要求を受けたストレージ装置１０のＣＰＵ１２０は、メモリ１３０上にライトデータのサイズ分のメモリ領域を確保し、確保したメモリ領域のアドレス情報を含んだライトデータメモリ転送指示をホスト計算機２０に行う。ライトデータメモリ転送指示受けたホスト計算機２０は、指示されたメモリ領域にライトデータを転送し、データ転送が完了したら、ＣＰＵ１２０にライトデータメモリ転送完了を通知する。ライトデータメモリ転送完了通知を受けたＣＰＵ１２０は、メモリからライトデータを読み出してパリティデータを作成し、ライト先のデバイス＃とデバイス内アドレスを計算する。前記デバイス＃とデバイス内アドレス情報をもとに対象の複数の記憶デバイス３１０〜３４０を決定してライトデータ記憶デバイス転送指示を発行する。本実施例では、図３のＤａｔａ０、Ｄａｔａ１、Ｄａｔａ２、Ｐａｒｉｔｙ０を転送する指示をそれぞれ、記録デバイス３１０、記憶デバイス３２０、記憶デバイス３３０、記憶デバイス３４０に発行する。ライトデータ記憶デバイス転送指示には、それぞれＤａｔａ０、Ｄａｔａ１、Ｄａｔａ２、Ｐａｒｉｔｙ０が格納されているメモリ１３０のアドレス、ライトデータまたはパリティデータが格納されるデバイス内アドレスが含まれる。
【００６１】
ライトデータ記憶デバイス転送指示を受け取った各記憶デバイス３１０〜３４０のデバイスコントローラ４１０は、指定されたメモリ１３０のアドレスに基づいてメモリ１３０からライトデータまたはパリティデータを読み出して、指定されたデバイス内アドレスの領域に保存する。保存が完了した記憶デバイスは、ライトデータ記憶デバイス転送完了をＣＰＵ１２０に通知する。発行した全てのライトデータ記憶デバイス転送完了通知を受け取ったＣＰＵ１２０は、ホストにライト要求完了を通知する。
【００６２】
図１１を用いて、ストレージ装置１０がホスト２０からリード要求を受けた場合の動作フローを説明する。リード要求として、ホストＬＢＡ「０ｘ００００＿００００」、データサイズ「４８ＫＢ」を読み出す例を記載する。
【００６３】
まず、ホスト２０がストレージ装置１０にリード要求を発行する。リード要求を受けたＣＰＵ１２０は、デバイス＃とデバイス内アドレスを計算した結果を用いて、対象の記憶デバイスにリードデータメモリ転送指示を行う。リードデータメモリ転送指示には、リードデータを格納するメモリ１３０のアドレスが含まれる。
【００６４】
本実施例では、計算によりデバイス＃０の「０ｘ００００＿００００」、デバイス＃１の「０ｘ００００＿００００」、デバイス＃２の「０ｘ００００＿００００」のデータを読み出す。
【００６５】
リードデータメモリ転送指示を受けた記憶デバイス３１０、３２０、３３０は、それぞれ指示されたデータを指示されたメモリ１３０のアドレスに書込みを実施し、書込みが終了したら、リードデータメモリ転送完了をＣＰＵ１２０に通知する。全てのリードデータメモリ転送完了通知を受け取ったら、ホスト２０にメモリの領域情報を含んだリードデータホスト転送指示を行う。リードデータホスト転送指示には、リードデータが格納されているメモリ１３０の領域（アドレス）が含まれる。リードデータホスト転送指示を受け取ったホスト２０は、対象のメモリ領域から、リードデータを読み出してホストのメモリ転送し、完了したら、リード要求完了をＣＰＵ１２０に通知する。通知を受けたＣＰＵ１２０は、対象のメモリ領域を開放して、リード要求の完了処理を行う。
【実施例１】
【００６６】
本発明の実施例１として、図１における記憶デバイス３２０が故障して筺体から取り外されて記憶デバイス３２０を認識しなくなった状態から、新しい記憶デバイス３５０をストレージ装置１００に接続したときのリビルド処理の動作フローを図１２及び１３を用いて説明する。【００６７】
記憶デバイス３５０がＰＣＩｅバス１８０に接続されると、ストレージコントローラ１００のＣＰＵ１２０に通知される。これにより、ＣＰＵ１２０は、故障していた記憶デバイス３２０が新しい記憶デバイス３５０に交換されたことを認識する。ＣＰＵ１２０は、記憶デバイス３５０のデバイス情報（例えば、論理記憶空間サイズと通信用空間サイズ）およびデバイスリビルド機能の有無を問い合わせる。そして、ＣＰＵ１２０は、デバイス情報が故障した記憶デバイス３２０と同じで機能を持つことを確認する。ここで、ストレージコントローラ１００は、記憶デバイス３２０と同じ機能を持たない場合は、管理計算機の画面やアラームで保守員に交換した記憶デバイスの機能が異なることを知らせることで、ストレージシステム１０がエラー状態で動作することを防ぐことができる。その後、ＣＰＵ１２０は、図９のＣＰＩｅバスのアドレスマップに登録する。本実施例では、故障した記憶デバイス３２０と同一のデバイス＃を「１」、アドレスオフセットを「０ｘ１０００＿００００」とする。【００６８】
次に、ＲＡＩＤ構成情報８１０を記憶デバイス３５０に通知して、リビルド処理開始指示を記憶デバイス３５０に発行する。本実施例では、図５の情報をＲＡＩＤ構成情報としたが、ＲＡＩＤ構成が分かる情報であれば何でもよい。例えば、ＲＡＩＤストライプ中のデータ数を初期テーブルとして記憶デバイスが決めておくとすれば、ＲＡＩＤ構成８１３の情報を送らなくても良い。【００６９】
このＲＡＩＤ構成情報を取得した、記憶デバイス３５０のプロセッサ４１５は、記憶デバイス３５０のデータバッファ４１６に対応する通信用空間のデバイスＬＢＡを転送先に指定して、各記憶デバイス３１０、３３０、３４０に、リード対象デバイスＬＢＡの情報を含むリードデータバッファ転送指示を発行する。これにより、記憶デバイス３１０、３３０，３４０のプロセッサ４１５は、記憶デバイス３５０上に通信用空間としてマッピングされているデータバッファ４１６にデータを転送することができる。リードデータバッファ転送指示に指示したデバイスＬＢＡのＰＢＡが未割当のところは、データが格納されていないため、データは返さずにリードデータバッファ転送完了通知のときに未割当であることを通知する。これにより、記憶デバイス３５０のアドレス変換テーブル７１０の未割当状態を復元することができる。ＲＡＩＤストライプのデータのリードデータ転送完了通知が全て返ってくる毎にデータ復元処理を行い、復元したデータをＦＭに格納する。【００７０】
プロセッサ４１５は、全てのデバイス内アドレスで繰り返し実行し、全てのデバイス内アドレスのリビルド処理が完了したら、プロセッサ４１５は、リビルド完了通知をＣＰＵ１２０にすることで、リビルド処理が完了する。【００７１】
図１３は、記憶デバイス３５０のリビルド処理における動作フローである。【００７２】
記憶デバイス３５０がストレージ装置１００に接続された後、記憶デバイス３５０はストレージコントローラ１００からＲＡＩＤ構成情報８１０を受信する（ステップ１３０１）。プロセッサ４１５は、受信したＲＡＩＤ構成情報８１０をＲＡＭ４１３に格納する。【００７３】
次にプロセッサ４１５は、リビルド開始指示を受信し（ステップ１３０２）、リビルド処理を開始する。リビルド開始指示には、リビルドの範囲（デバイス内アドレスの範囲）の指示が含まれてよいが、図１３では記憶デバイス３５０の全範囲をリビルドするものとする。【００７４】
プロセッサ４１５は、ＲＡＩＤ構成情報８１０のＲＡＩＤレベル８１２及びＲＡＩＤ構成８１３を参照し、データ復元に必要なデータ／パリティを読み出すべきデバイス＃を特定する。本実施例では、ＲＡＩＤ５で３Ｄ１Ｐであるから、プロセッサ４１５は、デバイス＃０（記憶デバイス３１０）、＃２（記憶デバイス３３０）、＃３（記憶デバイス３４０）それぞれからデータ／パリティを読み出す必要があると判断する。次にプロセッサ４１５は、デバイスＬＢＡの先頭から順にデバイスＬＢＡを選択し、選択されたデバイスＬＢＡに対応するＲＡＩＤストライプの記憶デバイス３１０、３３０、３４０におけるデバイスＬＢＡ（リード対象デバイスＬＢＡ）を特定する。例えば、記憶デバイス３５０のデバイスＬＢＡが「０ｘ１０００＿００００」であれば、他の記憶デバイスのデバイスＬＢＡとして、記憶デバイス３１０の「０ｘ００００＿００００」、記憶デバイス３３０の「０ｘ２０００＿００００」、記憶デバイス３４０の「０ｘ３０００＿００００」を特定する。また、データのサイズはストライプサイズ８１４より、全て「１６ＫＢ」である。２つ目以降のＲＡＩＤストライプに対応するデバイスＬＢＡついては、ストライプサイズ（１６ＫＢ）分ずつシフトさせれば求めることができる。特定されたデバイスＬＢＡがデータ及び／又はパリティをリードする対象のデバイスＬＢＡとなる。【００７５】
次に記憶デバイス３５０のプロセッサ４１５は、リードされたデータ及び／又はパリティの格納先となるデータバッファ４１６の領域をそれぞれ決め、各領域に対応する記憶デバイス３５０の通信用空間のデバイスＬＢＡを特定する。そして、記憶デバイス３５０のプロセッサ４１５は、ＲＩＡＤグループ内の他の記憶デバイスそれぞれに対するリードデータバッファ転送指示を作成する。リードデータバッファ転送指示の送信先としてリード対象デバイスＬＢＡが指定され、リード対象データの格納先として通信用空間のデバイスＬＢＡが指定される。そして、プロセッサ４１５は、リードデータバッファ転送指示を各記憶デバイスへ送信する（ステップ１３０３）。【００７６】
リードデータバッファ転送指示を受信した記憶デバイス３１０、３３０、３４０それぞれのプロセッサ４１５は、アドレス変換テーブル７１０を参照して指定されたデバイスＬＢＡに対応するＰＢＡを特定し、データ／パリティをＦＭから読み出し、指定された記憶デバイス３５０の通信用空間のデバイスＬＢＡに対してデータ／パリティを送信し、リードデータバッファ転送完了通知を送信する。指定されたデバイスＬＢＡに対応するデータ／パリティがＦＭに格納されていない場合、つまりアドレス変換テーブル７１０が「未割当」の状態の場合、記憶デバイス３１０、３３０、３４０のそれぞれは、データ／パリティを送信することなく、リードデータバッファ転送完了通知に「未割当」であるという情報を含めて記憶デバイス３５０に送信する。また、指定されたデバイスＬＢＡに対応するデータ／パリティがアンコレクタブルエラーにより読み出せない場合、記憶デバイス３１０、３３０、３４０それぞれのデバイスコントローラ４１０はリードデータバッファ転送完了通知に「エラー」であるという情報を含めて記憶デバイス３５０に送信する。【００７７】
プロセッサ４１５は、各リードデータバッファ転送指示に対する完了通知があったかを管理しており、定期的に他の記憶デバイスすべてからリードデータバッファ転送完了通知を受信したか判断する（ステップ１３０４）。【００７８】
他の記憶デバイスすべてからリードデータバッファ転送完了通知を受信した場合（ステップ１３０４：Ｙｅｓ）はステップ１３０５に進み、受信していない場合（ステップ１３０４：Ｎｏ）は所定時間後に再度ステップ１３０４の判定を行う。【００７９】
プロセッサ４１５は、受信したリードデータバッファ転送完了通知をチェックする（ステップ１３０５）。【００８０】
データバッファに４１６にデータが格納されている場合、プロセッサ４１５は、データバッファ４１６からデータ及びパリティを読み出してリビルド処理部４１８にＸＯＲ演算を実行させ、データを復元する（ステップ１３０６）。続いて、プロセッサ４１５は、復元したデータをＦＭに格納し、格納先のＰＢＡをアドレス変換テーブル７１０のデバイスＬＢＡに対応付けて記録する（ステップ１３０７）。【００８１】
リードデータバッファ転送完了通知が「未割当」の場合、プロセッサ４１５は、アドレス変換テーブル７１０のデバイスＬＢＡに対応するＰＢＡ欄に「未割当」と記録する。【００８２】
ステップ１３０７またはステップ１３０８の処理が完了すると、プロセッサ４１５は、どこまでリビルド処理を完了したかを示す情報（リビルド処理完了アドレス情報）を更新し、全ストライプについて処理が完了したかをチェックし、未完了であれば（ステップ１３０９：Ｎｏ）、ステップ１３０３に戻る。完了していれば(ステップ１３０９：Ｙｅｓ)、プロセッサ４１５は、リビルド開始指示の送信元に対して、リビルド完了通知を送信し（ステップ１３１０）、処理を終了する。【００８３】
ステップ１３０５において、リードデータバッファ転送完了通知が「エラー」の場合、プロセッサ４１５は、リビルド開始指示の送信元に対して、リビルド不可であることを示すエラー通知を送信し、処理を終了する。本実施例のようにＲＡＩＤ５であれば、リードデータバッファ転送完了通知がエラーである場合、ＲＡＩＤストライプ内に２つ以上のアンコレクタブルエラーが発生していることになり、データを復元できないためである。【００８４】
本実施例ではＲＡＩＤ構成情報及びリビルド開始指示の送信元をストレージコントローラ１００とするが、ホスト計算機２０などの上位装置に直接接続されている場合は、その上位装置から情報及び指示を受信することになり、完了通知もその上位装置に送ることになる。【００８５】
以上、実施例１のようにリビルド処理をすることで、ストレージコントローラ１００へリビルド処理に使うデータが入力されることがないため、ストレージコントローラ１００に負荷がかからない。このため、リビルド処理によるストレージコントローラ１００の性能低下を防ぐことが可能となり、リビルド中のストレージ装置の性能が向上する。【００８６】
次にリビルド処理中の記憶デバイスへのアクセスについて説明する。【００８７】
通常、ストレージコントローラ１００は、リビルド処理中の記憶デバイスにはアクセスしない。例えばリード処理の場合、ストレージコントローラ１００のＣＰＵ１２０は、記憶デバイス３５０にリビルド開始指示を送信してからリビルド処理完了通知を受信するまでは、記憶デバイス３１０、記憶デバイス３３０、記憶デバイス３４０からリード対象のデバイスＬＢＡと同一のＲＡＩＤストライプのデータ及びパリティを読み出してメモリ１３０に転送し、ストレージコントローラ１００内でデータ復元処理をしてホスト２０に復元したデータを転送する。【００８８】
しかし、この場合、複数の記憶デバイスからのデータ及びパリティの読み出しと、データ復元処理によりホスト２０へのレスポンスが遅くなるという課題がある。このため、本実施例では、データ復元が完了している領域については、ＣＰＵ１２０はリビルド処理中の記憶デバイス３５０へアクセスする。【００８９】
ここで、記憶デバイスがリビルド処理を実行する場合、ストレージコントローラ１００は、リビルド処理の進捗状況を把握することができない。このため本実施例では、記憶デバイス３５０のプロセッサ４１５は、例えば先頭アドレスから順にリビルド処理を行っていくが、リビルド処理完了アドレス情報をストレージコントローラ１００に通知する。もしホストから、そのホストＬＢＡに対してリード要求があった場合、ＣＰＵ１２０は、リビルド処理完了通知を受ける前に、記憶デバイス３５０にリードデータメモリ転送指示を発行することができる。【００９０】
図１４はリビルド処理中のLBAの状態を図示した例である。本実施例では、デバイス＃１をリビルド処理の対象としているため、リビルド対象のLBAは0x1000_0000〜0x1FEF_FFFFとなる。図１４は0x1000_0000から0x1600_0000までデータ復元処理が完了していることを示し、0x1600_0000から0x1FEF_FFFFの範囲はデータ復元処理が行われていないことを示す。記憶デバイス３５０のプロセッサ４１５は、１つのＲＡＩＤストライプのデータ復元が完了すると、ＲＡＭ４１３にデータ復元処理が完了したアドレスを格納する。また、記憶デバイス３５０は、CPU１２０にリビルド処理完了アドレス0x1600_0000が通知する。ＣＰＵ１２０は、受信した記憶デバイス３５０のリビルド処理完了アドレスをメモリ１３０に格納する。【００９１】
プロセッサ４１５は、リビルド処理完了アドレスを、１つのＲＡＩＤストライプについてデータ復元が完了するたびに通知してもよいし、２つ以上のＲＡＩＤストライプについてデータ復元が完了した際に通知してもよい。また、ストレージコントローラ１２０が記憶デバイス３５０に対してリビルド処理完了アドレスを送信するよう要求を発行し、それに応じて記憶デバイス３５０のプロセッサ４１５がリビルド処理完了アドレスをストレージコントローラ１００に送信してもよい。【００９２】
図１５を用いて、図１４のリビルド処理中の状態のときに、ホストからリード要求があった場合についてのストレージコントローラの処理フローを説明する。【００９３】
まず、ＣＰＵ１２０は、ホスト２０からリード要求を受信すると、ホスト２０からのリード要求の対象となるデータが格納されている対象記憶デバイス＃と対象ＬＢＡを計算により求める（Ｓ１５００）。次に、ＣＰＵ１２０は、対象デバイスがリビルド中かを判定する（Ｓ１５０１）。ＲＡＩＤ構成情報８１０でリビルド中か管理されている場合は、ＣＰＵ１２０は、メモリ１３０のＲＡＩＤ構成情報８１０を参照して対象記憶デバイスがリビルド中かを判断する。【００９４】
もし、リビルド中でなければ、ＣＰＵ１２０は、通常通り対象記憶デバイスにリードデータメモリ転送指示を発行する（Ｓ１５０４）。もしリビルド中である場合は、ＣＰＵ１２０は、メモリ１３０に格納されている対象記憶デバイスのリビルド処理完了アドレスを参照し、対象ＬＢＡがリビルド完了しているかを判定する（Ｓ１５０２）。対象ＬＢＡがリビルド完了している場合は、ＣＰＵ１２０は、対象デバイスにリードデータメモリ転送指示を発行し、リード要求の対象となるデータを取得する（Ｓ１５０４）。もし、対象ＬＢＡがリビルド完了していなければ、ＣＰＵ１２０は、同一のＲＡＩＤストライプの対象ＬＢＡに対応する記憶デバイス＃及びＬＢＡを特定し、各記憶デバイスにリードデータメモリ転送指示を発行する。そして、ＣＰＵ１２０は、各記憶デバイスからのリードデータをメモリ１３０に転送してリード要求の対象となるデータの復元を行う（Ｓ１５０３）。そしてＣＰＵ１２０は、ホスト２０にリード要求の対象データを転送する（Ｓ１５０５）。【００９５】
これにより、ストレージコントローラ１００は、記憶デバイス３５０がリビルド中であっても、すでにデータ復元された領域であればリードデータを記憶デバイス３５０から読み出すことができるのでホストへのリードデータ転送のレスポンスが早くなるという利点がある。【００９６】
図１６に図１４のリビルド処理中の状態のときに、ホスト２０からライト要求があった場合についてのストレージコントローラ１００の処理フローを説明する。なお、ライトデータは、書き込むデータがデータの時とパリティの時で処理フローが変わる。【００９７】
具体的には、ＣＰＵ１２０は、ホスト２０からライト要求を受信すると、ホスト２０からのライト要求から対象記憶デバイス＃と対象ＬＢＡを計算により求める（Ｓ１６１０）。その後ライト要求のデータのライト対象記憶デバイスがリビルド中かを判定する（Ｓ１６１１）。Ｓ１６１１の判定結果がＹｅｓの場合、ＣＰＵ１２０は、メモリ１３０に格納されている対象記憶デバイスのリビルド処理完了アドレスを参照し、対象ＬＢＡはリビルドが完了しているかを判定する（Ｓ１６１２）。【００９８】
Ｓ１６１２の判定結果がＮｏの場合、ＣＰＵ１２０、同一ＲＡＩＤストライプの更新後のパリティデータを生成し、更新前のパリティデータが格納されている記憶デバイスにライトデータ記憶デバイス転送指示を発行して書き込む（Ｓ１６１３）。パリティデータが更新されていれば、その後のデータ復元処理において、更新後のデータが復元される。このため、ライト要求のデータを対象記憶デバイスに書き込む必要はない。【００９９】
またＳ１６１２の判定結果がＹｅｓの場合、ＣＰＵ１２０は、通常のライト処理と同様に同一ＲＡＩＤストライプの更新後のパリティデータを生成し、ライトデータ記憶デバイス転送指示により書き込む。さらにＣＰＵ１２０は、対象記憶デバイスへライトライトデータ記憶デバイス転送指示を発行する（Ｓ１６１４）。【０１００】
次にＳ１６１１の判定結果がＮｏの場合を説明する。Ｓ１６１１の判定結果がＮｏの場合は、ＣＰＵ１２０は、パリティデータのライト対象記憶デバイスがリビルド中かを判定する（Ｓ１６１５）。Ｓ１６１５の判定結果がＮｏの場合は、Ｓ１６１４と同様に通常のライト処理を行う（Ｓ１６１８）。Ｓ１６１５の判定結果がＹｅｓの場合は、対象ＬＢＡのデータ復元が完了しているかを判定する（Ｓ１６１６）。Ｓ１６１６の判定結果がＹｅｓの場合は、上述したＳ１６１４の処理を行う。Ｓ１６１６の判定結果がＮｏの場合は、対象デバイスへライトデータ記憶デバイス転送指示を発行する（Ｓ１６１７）。パリティデータを格納している記憶デバイスがリビルド中で対象ＬＢＡがリビルド完了していない場合、ライトデータが更新されていれば、その後のデータ復元処理において、更新後のパリティが復元される。このため、パリティデータを対象記憶デバイスに書き込む必要はない。【０１０１】
以上のように、リビルド中にホスト２０からライト要求が来た場合は、リビルド処理が完了していないときに、ライトデータまたは、パリティデータを書き込む必要がなくなる（後でリビルド処理をするときにリビルド処理して書き込む）ため、リビルド処理が完了していないＬＢＡに対しては、ライトデータ記憶デバイス転送指示を発行する必要がなくなる。これにより、リビルド中の記憶デバイスへのコマンドの発行を削減できる。よって、リビルド中の記憶デバイスの負荷が増加することによる、リビルド処理時間の増大を抑制できる。【０１０２】
本実施例では、記憶デバイスのリビルド処理中はストレージコントローラ１００がリード要求／ライト要求時の動作を変更する例（図１５、図１６）を説明した。しかし、図１２において、記憶デバイスがリビルド完了通知をリビルド開始指示の後に直ぐ（例えば、1つ目のＲＡＩＤストライプのデータ復元処理の開始前）に、ストレージコントローラ１００に返し、デバイスコントローラが図１５、１６の処理を行ってもよい。この場合、リビルド処理完了アドレスはデバイスコントローラ４１０内で管理されているので、デバイスコントローラ４１０は、図１５、１６と同様にリビルド処理が完了しているところと完了していないところで動作を分けることが可能となる。これにより、記憶デバイスのリビルド中もストレージコントローラはリビルドが完了しているものとして記憶デバイスにアクセスすることができ、ストレージコントローラの負荷を低減することができる。【０１０３】
また、本実施例では、デバイス内アドレスの全範囲のリビルド処理をする例を述べたが、記憶デバイスが、ストレージコントローラ１００から、データが有効なところを示す情報（データ有効情報）を貰って、有効なデバイス内アドレスのみをリビルド処理するとしても良い。こうすることにより、余計なリードコマンドを他の記憶デバイスに発行する必要がなくなるため、さらに高速にリビルド処理を行うことが可能となる。データ有効情報の具体例としては、例えば、図９のデバイス内アドレスの管理単位毎に「１」「０」のフラグをまとめた情報（ビットマップ情報）を送るとしても良いし、有効データの先頭アドレスとサイズのセットを複数まとめた情報（有効範囲情報）を通知するとしても良い。【０１０４】
図１７に記憶デバイス３４０を用いてＩ／Ｏインターフェイスのアクセス要求キューの例を示す。図１７のようにデバイス間通信用アクセス要求キュー４５０とストレージコントローラ用アクセス要求キュー４５１を別にすることで、ストレージコントローラ１００からのアクセス要求の優先度を上げて処理することが可能となり、他の記憶デバイスがリビルド処理中でリード要求をたくさん発行していた場合でもホストからのライト要求またはリード要求の処理速度を落とすことなく実現可能となる。
【実施例２】
【０１０５】
本発明の実施例２として、記憶デバイス内でＦＭからのリードデータがアンコレクタブルエラーで正常に読み出すことができなかったときのリビルド処理の動作について説明する。【０１０６】
従来は、記憶デバイス内でＦＭからのリードデータがアンコレクタブルエラーであれば、記憶デバイスは、ストレージコントローラ１００に対してアンコレクタブルエラーであることを通知し、ストレージコントローラ１００がＲＡＩＤグループ内の他の記憶デバイスからデータ／パリティを読み出してアンコレクタブルエラーとなったデータを復元していた。本実施例では、記憶デバイスがアンコレクタブルエラーであることをストレージコントローラ１００に報告することなく、記憶デバイスが記憶デバイス間での通信によりデータを復元する。これにより、ストレージコントローラの負荷が低減されとストレージコントローラと記憶デバイス間の通信回数が削減される。【０１０７】
図１８は、記憶デバイスにおいてアンコレクタブルエラーが発生した場合のリビルド処理の動作フローを示す。【０１０８】
デバイスコントローラ４１０が、リードデータメモリ転送指示を受信する（ステップ１８０１）。リード要求の送信元は本実施例ではストレージコントローラ１００とするが、ホスト計算機２０などの上位装置に直接接続されている場合は、その上位装置からリードデータメモリ転送指示を受信することになる。例えば、記憶デバイス３２０がリードデータメモリ転送指示（デバイスＬＢＡ「０ｘ１０００＿０００３」、転送サイズ「１６ＫＢ」）を受信したとして、以下の処理を説明する。【０１０９】
デバイスコントローラ４１０は、指示されたデバイスＬＢＡに対応するＰＢＡを特定し、ＦＭからデータを読み出す（ステップ１８０２）。次にデバイスコントローラ４１０は、読み出したデータのエラーチェックを行い、アンコレクタブルエラーが発生しているか判定する（ステップ１８０３）。具体的には、デバイスコントローラ４１０のＦＭインターフェイス４１７はエラーチェック機能を持っており、エラーチェック機能でリードデータが正常に読み出すことができているかを判定する。Ｓ１８０３の判定結果がＹｅｓの場合、ＦＭインターフェイス４１７はプロセッサ４１５にリードエラーを通知する。リードエラー通知を受けたプロセッサ４１５は、初期化時にストレージコントローラ１００から設定された図５のＲＡＩＤ構成情報を元に、対象データのＲＡＩＤストライプを特定する。この例では、図３のデバイス内アドレス「０ｘ０００＿０００３」のＲＡＩＤストライプのデータが対象となる。よって、プロセッサ４１５は、デバイスＬＢＡ「０ｘ００００＿０００３」、「０ｘ２０００＿０００３」、「０ｘ３０００＿０００３」、サイズは全て「１６ＫＢ」でリードデータバッファ転送指示を送信する（ステップ１８０４）。プロセッサ４１５は全てのリードデータバッファ転送完了通知が帰ってきたら、リビルド処理（３つのリードデータの各ビットのＸＯＲを取る処理）を行ってデータを復元する（ステップ１８０６）。復元したデータをストレージコントローラ１００に返却する（ステップ１８０７）。【０１１０】
これにより、ストレージコントローラ１００に一切負荷を与えずに（ストレージコントローラ１００が気づくことなく）アンコレクタブルエラーを回避することが可能となる。【０１１１】
さらに一度リビルド処理したデータは、デバイスＬＢＡ「０ｘ１０００＿０００３」にライト要求があったものとして、ＦＭに書き込みアドレス変換テーブル７１０を更新する（ステップ１８０８）。これにより、次回同一デバイスＬＢＡにリード要求がきたときに、データの復元処理をしなくてよくなる。ステップ１８０７とステップ１８０８は並行して実行してもよいし、順番が逆でもよい。【０１１２】
Ｓ１８０３の判定結果がＮｏの場合、プロセッサ４１５は、ＦＭから読み出したデータをストレージコントローラ１００に応答する（Ｓ１８０９）。【０１１３】
以上のように、リードデータメモリ転送指示の対象データにアンコレクタブルエラーが発生した場合、記憶デバイスがストレージコントローラにアンコレクタブルエラーの発生を通知する必要がない。よって、アンコレクタブルエラーが発生した場合も、ストレージコントローラの負荷が低減され、ストレージコントローラと記憶デバイス間の通信回数が削減される。【０１１４】
また、アンコレクタブルエラーをリビルド処理してデータを返却した場合は、コンプリションにアンコレクタブルエラーをリビルド処理したリードデータであることを含めて通知しても良い。その場合は、ストレージコントローラ１００はアンコレクタブルエラーが発生したことを認識できる。アンコレクタブルエラーが何度も発生する記憶デバイスは、記憶デバイスそのものが故障する可能性が高い。このため、例えば、ストレージコントローラ１００は、記憶デバイス毎にアンコレクタブルエラーの発生回数を管理し、アンコレクタブルエラーが所定の回数以上あった記憶デバイスについては、ストレージ管理者が管理する管理計算機に警告を通知し、管理計算機の画面に記憶デバイスの交換を勧めるメッセージを表示する。これにより、ストレージ管理者は早期に記憶デバイスの故障の可能性を知ることができ、故障する前に記憶デバイスの交換ができるため、計画的な保守が容易になる。
【実施例３】
【０１１５】
本発明の実施例３として、ＲＡＩＤ１のＲＡＩＤ構成のときのリビルド処理の動作について説明する。【０１１６】
図１９は、本実施例におけるＶＯＬ２００とＲＡＩＤグループ２１１の関係を示す。本例では、記憶デバイス３６０と記憶デバイス３７０の２台でＲＡＩＤグループ２１１を構築している。ホスト２０からホストＬＢＡ「０ｘ００００＿０００３」にデータサイズ「１６ＫＢ」のライト要求があった場合、記憶デバイス３６０、３７０のデバイス内アドレス「０ｘ０００＿０００３」に同一のデータが書き込まれる。【０１１７】
ここで、記憶デバイス３７０が故障して、新規記憶デバイスをＰＣＩｅバス１８０に接続した場合、実施例１と同様にストレージコントローラ１００は新規記憶デバイスにＲＡＩＤ構成情報を通知して、リビルド処理開始指示をする。すると、新規記憶デバイスは同一のＲＡＩＤグループに保存されているデバイスＬＢＡに対してリードデータバッファ転送指示を出して、リードしたリードデータをＦＭに格納することでリビルド処理が完了する。よって、実施例１と同一にストレージコントローラ１００に一切負荷を与えることなく、高速にリビルド処理することができる。【０１１８】
実施例３では、リビルド処理の例を説明したが、コピー処理に応用可能である。例えば、リビルド構成情報の代わりにコピー情報として、アドレスとサイズなどを指定して、デバイスにコピー処理開始指示をするとストレージコントローラ１００に一切負荷を与えずにコピー処理が可能となる。また、実施例１と同様にデバイス間通信用キューとストレージコントローラ用キューを設けておき、デバイス間通信用キューに要求を積むことで、ホストからのライト要求、リード要求に影響を与えることなくコピー処理を実現可能である。【０１１９】
以上の実施例１〜２の説明はＲＡＩＤ５でデータを格納する例で説明したが、ＲＡＩＤ１、ＲＡＩＤ６、ＲＡＩＤ１０、ＲＡＩＤ５０など、１つまたは複数の記憶デバイスが故障したときに修復可能なデータ格納形式であれば、ＲＡＩＤ構成に特に制限を設けない。リビルド処理を行いたい記憶デバイスにＲＡＩＤ構成情報とリビルド処理開始指示をすることで、記憶デバイスでＲＡＩＤ構成に基づいてリビルド処理をすることができる。【０１２０】
また、４台の記憶デバイスの例を説明したが、記憶デバイスの台数は、２台以上で構成されていれば台数に限定はない。【０１２１】
また、本実施例では、ＰＣＩｅバス１８０で記憶デバイスと通信する例を記載したが、これに限定されない。例えば、ＰＣＩｅバス１８０にＳＡＳやＩｎｆｉｎｉＢａｎｄを用いても良い。例えば、ＰＣＩｅバスの変わりにＳＡＳを用いる場合の例を説明する。図7に記載のＩ／Ｏインターフェイス４１１がイニシエータとターゲット機能を切り替える機能を備えたＳＡＳコントローラとなる。図１２を用いて、ＳＡＳの場合の動作を説明する。リビルド対象の記憶デバイス３５０は、ストレージコントローラ１００のＣＰＵ１２０から、ＲＡＩＤ構成情報８１０と共にリビルド開始指示を受け付けたら、ＳＡＳコントローラの機能をターゲットからイニシエータに変更する。その後、各記憶デバイス３１０〜３４０からデータ/パリティをリードして、リビルド処理を行う。リビルド処理が完了したらストレージコントローラ１００にリビルド完了通知すると共にＳＡＳコントローラをイニシエータからターゲット機能に切り替える。ここで、ＳＡＳの場合は、ＰＣＩｅとは異なり、イニシエータとターゲットでコネクションを結んでから通信を行う方式のため、ＲＡＩＤ構成情報８１０は、デバイスオフセット８１６の代わりにデバイスアドレスを用いる。このデバイスアドレスを用いて、特定の記憶デバイスとコネクションを結んだあとにデバイス内アドレスを用いてデータの通信を行う。以上のようにＳＡＳの場合でもＰＣＩｅと同様にリビルド処理を行うことが可能となる。【０１２２】
また、本実施例ではストレージコントローラからの指示でリビルド処理を行う例を記載したが、サーバ自体に記憶デバイス３１０〜３４０を挿して、サーバ上のプログラムでストレージコントローラと同等の処理を行っても良い。【０１２３】
また、本実施例では、バス構成として記憶装置のスイッチ３９０が一つの例を説明したが、スイッチ３９０が多段で接続される構成でも、ホストを介さないでデータ通信ができるバス構成であれば同一バス構成と呼んで良い。
【符号の説明】
【０１２４】
１０  ストレージ装置
２０  ホスト計算機
１００  ストレージコントローラ
１２０  ＣＰＵ
１３０  メモリ
３１０  記憶デバイス
３２０  記憶デバイス
３３０  記憶デバイス
３４０  記憶デバイス
【図１】
2016135872.tif 000003
【図２】
2016135872.tif 000004
【図３】
2016135872.tif 000005
【図４】
2016135872.tif 000006
【図５】
2016135872.tif 000007
【図６】
2016135872.tif 000008
【図７】
2016135872.tif 000009
【図８】
2016135872.tif 000010
【図９】
2016135872.tif 000011
【図１０】
2016135872.tif 000012
【図１１】
2016135872.tif 000013
【図１２】
2016135872.tif 000014
【図１３】
2016135872.tif 000015
【図１４】
2016135872.tif 000016
【図１５】
2016135872.tif 000017
【図１６】
2016135872.tif 000018
【図１７】
2016135872.tif 000019
【図１８】
2016135872.tif 000020
【図１９】
2016135872.tif 000021
【図２０】
2016135872.tif 000022
【国際調査報告】
2016135872.tif 000023
2016135872.tif 000024
2016135872.tif 000025
2016135872.tif 000026