(57)【要約】【課題】ストレージ装置の故障発生時に生じるデータアクセスの停止期間を短縮できるようにする。【解決手段】  ストレージ装置１の動作が不調になるか、あるいは故障により、応答時間計測手段４ａで計測している経過時間「Ｔ」が動作不調検出時間「Ｔ１」を超えると、動作不調検出手段４ｂにより、ストレージ装置１が故障中の可能性があることを示す動作不調情報が、制御ノード７に対して出力される。制御ノード７では、動作不調情報が動作不調情報記憶手段７ｂに格納される。その後、アクセスノード８がストレージ装置１内の先頭のスライス１ａにアクセスしエラーになると、制御ノード７に対して、アクセスが失敗したことを示すアクセス関連情報を送信する。制御ノード７では、アクセス関連情報で示されるスライス１ａのリカバリ指示をディスクノード５，６に対して行う。【選択図】図１
2010097385.tif 000002
【特許請求の範囲】
【請求項１】
記憶領域が複数のスライスに分割して管理されている複数のストレージ装置に二重化して格納されたデータの管理処理をコンピュータに実行させるデータ管理プログラムであって、
前記コンピュータを、
前記複数のストレージ装置のうちの１つが故障中の可能性があることを示す動作不調情報を受け取ると、前記動作不調情報を動作不調情報記憶手段に格納する動作不調情報管理手段、
前記複数のストレージ装置のスライスをアクセス対象スライスとしてアクセス要求が出されたことを示すアクセス関連情報を受け取ると、前記動作不調情報記憶手段内の前記動作不調情報を参照して前記アクセス対象スライスが属する前記ストレージ装置が故障中である可能性の有無を判断し、故障の可能性がある場合、前記アクセス対象スライス内のデータと同じ内容の冗長データを格納する前記ストレージ装置へのデータ入出力機能を有するスライス管理手段へ、前記アクセス対象スライスに格納されていたデータのリカバリ処理を指示するリカバリ指示手段、
として機能させることを特徴とするデータ管理プログラム。
【請求項２】
前記アクセス関連情報は、ネットワークを介して前記複数のストレージ装置にアクセスを行うアクセスノードによる前記ストレージ装置内のスライスへのアクセスが失敗したときに、前記アクセスノードから送信されることを特徴とする請求項１記載のデータ管理プログラム。
【請求項３】
前記リカバリ指示手段は、前記アクセスノードから前記アクセス関連情報を受け取ると、前記アクセスノードに対して前記冗長データの格納場所を通知することを特徴とする請求項２記載のデータ管理プログラム。
【請求項４】
前記コンピュータを、さらに、
複数のセグメントで構成される仮想ディスクが定義されており、異なるストレージ装置に属する２つの前記スライスが前記セグメントそれぞれに割り当てられており、前記複数のストレージ装置それぞれの前記スライスごとに設けられ、前記スライスと前記セグメントとの割り当て関係を示すメタデータを記憶する仮想ディスクメタデータ記憶手段として機能させ、
前記アクセス関連情報は、ネットワークを介して前記複数のストレージ装置にアクセスを行うアクセスノードによる前記ストレージ装置内のスライスへのアクセスが失敗したときに前記アクセスノードから送信される、アクセスに失敗したスライスが割り当てられているセグメントを照会対象セグメントとして指定した割り当て関係の照会要求であり、
前記リカバリ指示手段は、
前記仮想ディスクメタデータ記憶手段から、前記アクセス関連情報で指定された前記照会対象セグメントに割り当てられている２つの被割り当てスライスの前記メタデータを検索し、前記動作不調情報記憶手段を参照し、検索により得られた前記メタデータに基づいて前記被割り当てスライスが属する前記ストレージ装置が故障中である可能性の有無を判断するメタデータ検索手段と、
前記メタデータ検索手段が故障中の可能性があると判断された場合、故障中の可能性がある前記ストレージ装置に属する前記被割り当てスライスの前記照会対象セグメントへの割り当てを解除し、他の前記スライスを前記照会対象セグメントに新規に割り当てるスライス割り当て手段と、
を有することを特徴とする請求項１記載のデータ管理プログラム。
【請求項５】
前記スライス割り当て手段は、前記照会対象セグメントへの新規のスライスの割り当てが完了すると、割り当て結果に応じて前記仮想ディスクメタデータ記憶手段内のメタデータを更新し、
前記メタデータ検索手段は、前記被割り当てスライスが属する前記ストレージ装置が故障中の可能性があると判断した場合、前記被割り当てスライスに代えて前記照会対象セグメントに対して新規のスライスの割り当てられるのを待ち、新規のスライスが割り当てられた後、前記照会対象セグメントに割り当てられたスライスのメタデータを前記仮想ディスクメタデータ記憶手段から取得し、前記アクセスノードに送信することを特徴とする請求項４記載のデータ管理プログラム。
【請求項６】
ストレージ装置が接続されると共に、前記ストレージ装置に格納するデータの管理を行う制御ノードにネットワーク経由で接続されたコンピュータに、前記ストレージ装置の動作診断処理を実行させるストレージ装置診断プログラムであって、
前記コンピュータを、
前記ストレージ装置に対して検査コマンドを発行し、前記検査コマンド発行から応答があるまでの経過時間を計測する応答時間計測手段、
前記経過時間が予め設定された動作不調検出時間に達しても応答がない場合、前記制御ノードに対して、前記ストレージ装置が故障中の可能性があることを示す動作不調情報を送信する動作不調検出手段、
前記動作不調情報を送信後に前記ストレージ装置から前記検査コマンドに対する応答が返されると、前記制御ノードに対して前記ストレージ装置の復帰を示す復帰情報を送信する復帰検出手段、
として機能させることを特徴とするストレージ装置診断プログラム。
【請求項７】
ストレージ装置が接続されると共に、前記ストレージ装置に格納するデータの管理を行う制御ノードにネットワーク経由で接続されたコンピュータに、前記ストレージ装置の動作診断処理を実行させるストレージ装置診断プログラムであって、
前記コンピュータを、
前記ストレージ装置に対して検査コマンドを発行し、前記検査コマンド発行から応答があるまでの経過時間を計測する応答時間計測手段、
前記経過時間が、予め設定された動作不調検出時間を超えた後、前記検査コマンドに対する応答取得前に前記ストレージ装置内のスライスへのアクセスがあると、アクセス対象スライスを指定したスライス異常通知を前記制御ノードに送信するスライス異常通知手段、
として機能させることを特徴とするストレージ装置診断プログラム。
【請求項８】
データを二重化して管理するマルチノードストレージシステムであって、
記憶領域が複数のスライスに分割して管理されたストレージ装置に対して検査コマンドを発行し、前記検査コマンド発行から応答があるまでの経過時間を計測する応答時間計測手段と、
前記経過時間が予め設定された動作不調検出時間に達しても応答がない場合、制御ノードに対して前記ストレージ装置が故障中の可能性があることを示す動作不調情報を送信する動作不調検出手段と、
前記動作不調情報を送信後に前記ストレージ装置から前記検査コマンドに対する応答が返されると、前記制御ノードに対して前記ストレージ装置の復帰を示す復帰情報を送信する復帰検出手段と、
を具備する複数のディスクノードと、
前記ディスクノードの１つから前記動作不調情報を受け取ると、前記動作不調情報を動作不調情報記憶手段に格納する動作不調情報管理手段と、
前記複数のストレージ装置のスライスをアクセス対象スライスとしてアクセス要求が出されたことを示すアクセス関連情報を受け取ると、前記動作不調情報記憶手段内の前記動作不調情報を参照して前記アクセス対象スライスが属する前記ストレージ装置が故障中である可能性の有無を判断し、故障の可能性がある場合、前記アクセス対象スライス内のデータと同じ内容の冗長データを格納する前記ストレージ装置が接続された前記ディスクノードへ、前記アクセス対象スライスに格納されていたデータのリカバリ処理を指示するリカバリ指示手段と、
を具備する前記制御ノードと、
を有することを特徴とするマルチノードストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータを二重化して管理するためのデータ管理プログラム、ストレージ装置診断プログラム、およびマルチノードストレージシステムに関し、特にストレージ装置の診断結果に応じてデータのリカバリ処理を行うデータ管理プログラム、ストレージ装置診断プログラム、およびマルチノードストレージシステムに関する。
【背景技術】
【０００２】
ネットワーク上でデータを管理するシステムの１つにマルチノードストレージシステムがある。マルチノードストレージシステムは、複数のディスクノード、少なくとも１つのアクセスノード、および制御ノードで構成される。ディスクノード、アクセスノード、および制御ノードは、ネットワークを介して接続されている。
【０００３】
マルチノードストレージシステム内では、仮想ディスクが定義されている。仮想ディスクは、複数のセグメントと呼ばれる複数の単位記憶領域で構成される。また、ディスクノードは、接続されたストレージ装置の記憶領域をスライスと呼ばれる単位に分割して管理する。そして、仮想ディスクを構成するセグメントと、各ディスクノードが管理するスライスとの対応関係が制御ノードで管理される。その対応関係を示すメタデータは、制御ノードからアクセスノードに通知される。
【０００４】
アクセスノードは、仮想ディスク内のデータを指定したデータアクセスを受け取ると、メタデータに基づいて、そのデータが格納されたセグメントに対応するスライスを判断する。そして、アクセスノードは、実際にデータが格納されたスライスを管理するディスクノードに対してアクセス要求を送信する。
【０００５】
このようなマルチノードストレージシステムにより、アクセスノードを使用するユーザは、ディスクノードに接続された多数のストレージ装置を、ローカルのディスク装置と同様に使用することができる。しかも、マルチノードストレージシステムでは、１つのセグメントに２つのスライスを割り当てることで、データを二重化することもできる。データの二重化を行っていれば、１台のストレージ装置が故障してもデータを消失させずにすむ。
【０００６】
なお、データを二重化していても、障害によりストレージ装置へのアクセスができなくなると、一部のセグメントに関して二重化状態が崩れてしまう。その場合、リカバリ処理が行われる。リカバリ処理では、制御ノードにより、二重化状態が崩れたセグメント（リカバリ対象セグメント）に対して新たなスライスが割り当てられる。そして、リカバリ対象セグメントに割り当てられた既存のスライス内のデータを、ディスクノードが新たに割り当てたスライスへコピーする。これにより、データの二重化状態が回復する。
【０００７】
また、仮想ディスクのセグメントに二重化のために割り当てられている２つのスライスは、それぞれプライマリスライスとセカンダリスライスとの属性が与えられている。アクセスノードは、プライマリスライスに対してアクセスを行う。もし、プライマリスライスを有するストレージ装置に障害が発生すると、制御ノードは、セカンダリスライスの属性を、プライマリスライスに変更する。その結果、アクセスノードは、リカバリ処理の完了を待たずに、障害が発生したストレージ装置に格納されていたデータへのアクセスが可能となる。
【特許文献１】国際公開第ＷＯ２００４／１０４８４５号パンフレット
【発明の開示】
【発明が解決しようとする課題】
【０００８】
ところで、アクセスノードからデータへのアクセスができなくなる障害の１つとして、ストレージ装置の機能障害がある。ストレージ装置に障害が発生した場合、まず、ディスクノードがその障害を検出する。障害を検出したディスクノードが、障害発生を制御ノードに通知することで、制御ノードが障害の発生を認識する。そして、制御ノードの管理の下、リカバリ処理が実行される。
【０００９】
しかし、故障の誤検出を防止するためには、ストレージ装置の障害の予兆（動作不調）をディスクノードが検知してから障害であると判断するまでに、ある程度の猶予期間を設ける必要がある。そのため、その猶予期間中はアクセスノードのアクセス先を別のストレージ装置に変更する処理が実行されず、その間、アクセスノードからのデータアクセスが停止してしまう。
【００１０】
プライマリスライスを有するストレージ装置に障害が発生した場合、障害発生直後から、そのプライマリスライスへのアクセスノードからのアクセスはエラーとなる。他方、ディスクノードは、回復不能な障害が発生したのか、あるいは一時的な問題であり、ある程度の猶予期間をおけばアクセス可能となるのかが不明である。そのためディスクノードは、所定の猶予期間が経過するまで、故障であるとの判断をしない。その結果、現在のセカンダリスライスをプライマリスライスに切り替えるタイミングが遅れ、アクセスノードによるアクセスの停止期間が長期化していた。
【００１１】
本発明はこのような点に鑑みてなされたものであり、ストレージ装置の故障発生時に生じるデータアクセスの停止期間を短縮できるデータ管理プログラム、ストレージ装置診断プログラム、およびマルチノードストレージシステムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記課題を解決するために、以下の機能をコンピュータで実現するためのデータ管理プログラムが提供される。このデータ管理プログラムは、記憶領域が複数のスライスに分割して管理されている複数のストレージ装置に二重化して格納されたデータの管理処理をコンピュータに実行させるものである。
【００１３】
データ管理プログラムを実行するコンピュータは、動作不調情報管理手段とリカバリ指示手段として機能する。動作不調情報管理手段は、複数のストレージ装置のうちの１つが故障中の可能性があることを示す動作不調情報を受け取ると、動作不調情報を動作不調情報記憶手段に格納する。リカバリ指示手段は、複数のストレージ装置のスライスをアクセス対象スライスとしてアクセス要求が出されたことを示すアクセス関連情報を受け取ると、動作不調情報記憶手段内の動作不調情報を参照してアクセス対象スライスが属するストレージ装置が故障中である可能性の有無を判断し、故障の可能性がある場合、アクセス対象スライス内のデータと同じ内容の冗長データを格納するストレージ装置へのデータ入出力機能を有するスライス管理手段へ、アクセス対象スライスに格納されていたデータのリカバリ処理を指示する。
【００１４】
また、上記課題を解決するために、以下の機能をコンピュータで実現するためのストレージ装置診断プログラムが提供される。ストレージ装置診断プログラムは、ストレージ装置がローカルに接続されると共に、ストレージ装置に格納するデータの管理を行う制御ノードにネットワーク経由で接続されたコンピュータに、ストレージ装置の動作診断処理を実行させるためのものである。
【００１５】
ストレージ装置診断プログラムを実行するコンピュータは、応答時間計測手段、動作不調検出手段、および復帰検出手段として機能する。応答時間計測手段は、ストレージ装置に対して検査コマンドを発行し、検査コマンド発行から応答があるまでの経過時間を計測する。動作不調検出手段は、経過時間が予め設定された動作不調検出時間に達しても応答がない場合、制御ノードに対して、ストレージ装置が故障中の可能性があることを示す動作不調情報を送信する。復帰検出手段は、動作不調情報を送信後にストレージ装置から検査コマンドに対する応答が返されると、制御ノードに対してストレージ装置の復帰を示す復帰情報を送信する。
【発明の効果】
【００１６】
ストレージ装置の障害発生時に生じるデータアクセス停止期間を短縮できる。
【発明を実施するための最良の形態】
【００１７】
以下、本発明の実施の形態を図面を参照して説明する。
図１は、実施の形態の概要を示す図である。図１には、マルチノードストレージシステムが示されている。マルチノードストレージシステムは、ストレージ装置１〜３に格納されたデータを二重化して管理するため複数のディスクノード４〜６、制御ノード７、およびアクセスノード８を有する。
【００１８】
ストレージ装置１〜３は、記憶領域が複数のスライスに分割して管理されている。また、ストレージ装置１〜３は、それぞれディスクノード４〜６に対してローカルに接続されている。ここで、ローカルに接続されているとは、ネットワーク経由での接続ではないことを意味している。
【００１９】
ディスクノード４は、応答時間計測手段４ａ、動作不調検出手段４ｂ、故障検出手段４ｃ、および復帰検出手段４ｄを有する。
応答時間計測手段４ａは、ローカルに接続されたストレージ装置１に対して検査コマンドを発行する。そして、応答時間計測手段４ａは、検査コマンドの発行から検査コマンドに対する応答がストレージ装置１から返されるまでの経過時間「Ｔ」を計測する。
【００２０】
動作不調検出手段４ｂには、動作不調検出時間「Ｔ１」が予め設定されている。例えば、動作不調検出手段４ｂの管理するメモリ内に動作不調検出時間「Ｔ１」が格納されている。動作不調検出時間「Ｔ１」には、例えば、ストレージ装置１の動作が正常な場合に検査コマンドに応答可能な時間（例えば１秒）が設定される。動作不調検出手段４ｂは、経過時間「Ｔ」が動作不調検出時間「Ｔ１」に達してもストレージ装置１からの応答がない場合、制御ノード７に対してストレージ装置１が故障中の可能性があることを示す動作不調情報を送信する。
【００２１】
故障検出手段４ｃには、動作不調検出時間「Ｔ１」よりも大きな値が故障検出時間「Ｔ２」として設定されている。故障検出時間「Ｔ２」には、例えば、ストレージ装置１の処理が過負荷であっても、故障していなければ検査コマンドに応答可能な時間の最大値（例えば１分）が設定される。故障検出手段４ｃは、経過時間「Ｔ」が故障検出時間「Ｔ２」に達してもストレージ装置１からの応答がない場合、制御ノード７に対してストレージ装置１に関する故障検出情報を送信する。
【００２２】
復帰検出手段４ｄは、動作不調情報を送信後にストレージ装置１から検査コマンドに対する応答が返されると、制御ノード７に対してストレージ装置１の復帰を示す復帰情報を送信する。
【００２３】
ディスクノード５は、ストレージ装置２にデータの入出力を行うスライス管理手段５ａを有する。同様に、ディスクノード６は、ストレージ装置３にデータの入出力を行うスライス管理手段６ａを有する。
【００２４】
なお、図１では省略しているが、ディスクノード４が有する各機能と同様の機能が、ディスクノード５，６にも含まれる。同様に、図１では省略しているが、ディスクノード５，６が有するスライス管理手段５ａ，６ａと同様の機能は、ディスクノード４にも含まれる。
【００２５】
制御ノード７は、動作不調情報管理手段７ａ、動作不調情報記憶手段７ｂ、およびリカバリ指示手段７ｃを有する。
動作不調情報管理手段７ａは、ディスクノード４〜６の１つから動作不調情報を受け取ると、動作不調情報を動作不調情報記憶手段７ｂに格納する。
【００２６】
動作不調情報記憶手段７ｂは、動作不調情報を記憶する。例えば、メモリの記憶領域の一部が動作不調情報記憶手段７ｂとして用いられる。
リカバリ指示手段７ｃは、複数のストレージ装置１〜３のスライスをアクセス対象スライスとしてアクセス要求が出されたことを示すアクセス関連情報を受け取ると、動作不調情報記憶手段７ｂ内の動作不調情報を参照してアクセス対象スライスが属するストレージ装置が故障中である可能性の有無を判断する。すなわち、アクセス対象スライスが属するストレージ装置に故障の可能性がある旨の動作不調情報が動作不調情報記憶手段７ｂに格納されていれば、故障の可能性ありと判断される。
【００２７】
リカバリ指示手段７ｃは、故障の可能性がある場合、アクセス対象スライス内のデータと同じ内容の冗長データを格納するストレージ装置が接続されたディスクノードへ、アクセス対象スライスに格納されていたデータのリカバリ処理を指示する。なお、リカバリ処理とは、アクセス対象スライス内の冗長データを他のストレージ装置にコピーし、データの二重化状態を回復する処理である。
【００２８】
なお、図１の例では、アクセス関連情報は、複数のストレージ装置１〜３にアクセスを行うアクセスノード８によるストレージ装置１内のスライスへのアクセスが失敗したときに、アクセスノード８から送信される。この場合、リカバリ指示手段７ｃは、アクセスノード８からアクセス関連情報を受け取ると、アクセスノード８に対して冗長データの格納場所を通知する。
【００２９】
このようなマルチノードストレージシステムによれば、過負荷などによりストレージ装置１の動作が不調になると、応答時間計測手段４ａが出力する検査コマンドに対するストレージ装置１からの応答時間は、動作不調検出時間「Ｔ１」より長くかかるが故障検出時間「Ｔ２」よりは短くなる。また、ストレージ装置１が故障していれば、検査コマンドに対する応答は、故障検出時間「Ｔ２」を過ぎても出されない。
【００３０】
ここで、ストレージ装置１の動作が不調になるか、あるいは故障により、応答時間計測手段４ａで計測している経過時間「Ｔ」が動作不調検出時間「Ｔ１」を超えたものとする。すると、動作不調検出手段４ｂにより、ストレージ装置１が故障中の可能性があることを示す動作不調情報が、制御ノード７に対して出力される。制御ノード７では、動作不調情報管理手段７ａにより、動作不調情報が動作不調情報記憶手段７ｂに格納される。
【００３１】
その後、アクセスノード８がストレージ装置１内の先頭のスライス１ａにアクセスすると、そのアクセスはエラーとなる。そこで、アクセスノード８は、制御ノード７に対して、ストレージ装置１の先頭のスライス１ａへのアクセスが失敗したことを示すアクセス関連情報を送信する。制御ノード７では、リカバリ指示手段７ｃが動作不調情報記憶手段７ｂを参照し、ストレージ装置１が故障中の可能性があることを認識する。そこで、リカバリ指示手段７ｃは、アクセス関連情報で示されるスライス１ａのリカバリ指示をディスクノード５，６に対して行う。
【００３２】
ここで、図１の例では、スライス１ａ内のデータ（data[A]）の冗長データがストレージ装置２の先頭のスライス２ａに格納されているものとする。また、ストレージ装置３の先頭のスライスが空き状態（有効なデータが格納されていない状態）であるものとする。この場合、リカバリ指示手段７ｃは、ディスクノード５のスライス管理手段５ａに対してスライス２ａのデータをスライス３ａにコピーすることを指示する。すると、スライス管理手段５ａは、スライス２ａのデータを読み出し、ディスクノード６に転送する。ディスクノード６では、スライス管理手段６ａがデータを受け取り、スライス３ａに書き込む。
【００３３】
リカバリ指示手段７ｃは、ストレージ装置２のスライス２ａにスライス１ａの冗長データが格納されていることを、アクセスノード８に通知する。これにより、アクセスノード８は、迅速にアクセス先をストレージ装置２のスライス２ａに変更できる。
【００３４】
その後、ストレージ装置１からの応答が故障検出時間「Ｔ２」を経過してもディスクノード４に対して出力されなかった場合、故障検出手段４ｃが故障検出時間「Ｔ２」の経過を検出する。そして、故障検出手段４ｃから制御ノード７へ、ストレージ装置１が故障したことを示す故障検出情報が送信される。制御ノード７では、リカバリ指示手段７ｃがストレージ装置２内のすべてのスライスについて、ディスクノード５へリカバリの指示を行う。
【００３５】
また、ストレージ装置１からの応答が故障検出時間「Ｔ２」経過前にディスクノード４に対して出力された場合、復帰検出手段４ｄが復帰を検出する。そして、復帰検出手段４ｄから制御ノード７へ、ストレージ装置１が復帰したことを示す復帰情報が送信される。制御ノード７では、動作不調情報管理手段７ａにより、ストレージ装置１が故障中の可能性があることを示す動作不調情報が、動作不調情報記憶手段７ｂから消去される。
【００３６】
このように、図１に示すマルチノードストレージシステムでは、ストレージ装置１〜３の故障検出時間を動作不調検出時間「Ｔ１」、故障検出時間「Ｔ２」（Ｔ１＜Ｔ２）の２段階にする。従来は、故障検出時間「Ｔ２」のみが存在し、ディスクノードが故障検出時間「Ｔ２」を検出するとリカバリ処理が開始されていた。そのため、故障検出時間「Ｔ２」を長くとりすぎるとリカバリ処理が遅れ、故障発生時にアクセス不能の期間も長期化していた。本実施の形態では、図１に示したように、ディスクノード４が動作不調検出時間「Ｔ１」を検出して制御ノード７に通知しておく。そして制御ノード７は、アクセスに失敗したスライス１ａのデータのみのリカバリ処理を指示する。これにより、アクセス不能の期間の長期化が防止される。
【００３７】
なお、図１では、ストレージ装置１〜３がそれぞれ個別のディスクノード４〜６に接続されているが、１つのノードで複数のストレージ装置がローカルに接続されるシステムもある。そのようなシステムでは、ストレージ装置が接続された１つのノードに、図１に示した制御ノード７とディスクノード４〜６との機能が内蔵されることとなる。
【００３８】
ところで、マルチノードストレージシステムでは、仮想ディスクを介してデータアクセスが行われる。このとき、仮想ディスク内の記憶領域とストレージ装置内の記憶領域との割り当て関係はメタデータを用いて管理できる。そこで、メタデータを用いて割り当て関係を管理する場合の例を用い、以下に、本実施の形態の詳細を説明する。
【００３９】
［第１の実施の形態］
図２は、第１の形態のマルチノードストレージシステム構成例を示す図である。本実施の形態では、ネットワーク１０を介して、複数のディスクノード１００，２００，３００、制御ノード５００、アクセスノード６００，７００、および管理ノード３０が接続されている。ディスクノード１００，２００，３００それぞれには、ストレージ装置１１０，２１０，３１０が接続されている。
【００４０】
ストレージ装置１１０には、複数のハードディスク装置（ＨＤＤ）１１１，１１２，１１３，１１４が実装されている。ストレージ装置２１０には、複数のＨＤＤ２１１，２１２，２１３，２１４が実装されている。ストレージ装置３１０には、複数のＨＤＤ３１１，３１２，３１３，３１４が実装されている。各ストレージ装置１１０，２１０，３１０は、内蔵するＨＤＤを用いたＲＡＩＤシステムである。本実施の形態では、各ストレージ装置１１０，２１０，３１０のＲＡＩＤ５のディスク管理サービスを提供する。
【００４１】
ディスクノード１００，２００，３００は、接続されたストレージ装置１１０，２１０，３１０に格納されたデータを管理し、管理しているデータをネットワーク１０経由で端末装置２１，２２，２３に提供する。また、ディスクノード１００，２００，３００は、冗長性を有するデータを管理している。すなわち、同一のデータが、少なくとも２つのディスクノードで管理されている。
【００４２】
制御ノード５００は、ディスクノード１００，２００，３００を管理する。例えば、制御ノード５００は、ディスクノード１００，２００，３００から新たなストレージ装置の接続通知を受け取ると、新たな仮想ディスクを定義し、その仮想ディスクを介して接続されたストレージ装置に格納されていたデータにアクセスできるようにする。
【００４３】
アクセスノード６００，７００には、ネットワーク２０を介して複数の端末装置２１，２２，２３が接続されている。また、アクセスノード６００，７００には、仮想ディスクが定義されている。そして、アクセスノード６００，７００は、端末装置２１，２２，２３からの仮想ディスクのデータのアクセス要求に応答して、ディスクノード１００，２００，３００内の対応するデータへアクセスする。
【００４４】
管理ノード３０は、管理者がマルチノードストレージシステムの運用を管理するために使用するコンピュータである。例えば、管理ノード３０では、ストレージ装置の動作上級などの情報を収集し、収集した情報を画面に表示する。管理ノード３０を使用する管理者は、画面に表示された情報を参照し、リカバリ処理が必要なストレージ装置を見つけた場合、そのストレージ装置のリカバリ処理の指示を管理ノード３０に入力する。すると、管理ノード３０から制御ノード５００に、ストレージ装置を指定したリカバリ要求が送信される。
【００４５】
図３は、第１の形態に用いる制御ノードのハードウェア構成例を示す図である。制御ノード５００は、ＣＰＵ（Central Processing Unit）５０１によって装置全体が制御されている。ＣＰＵ５０１には、バス５０７を介してＲＡＭ（Random Access Memory）５０２、ハードディスクドライブ（ＨＤＤ:Hard Disk Drive）５０３、グラフィック処理装置５０４、入力インタフェース５０５、および通信インタフェース５０６が接続されている。
【００４６】
ＲＡＭ５０２は、制御ノード５００の主記憶装置として使用される。ＲＡＭ５０２には、ＣＰＵ５０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ５０２には、ＣＰＵ５０１による処理に必要な各種データが格納される。ＨＤＤ５０３は、制御ノード５００の二次記憶装置として使用される。ＨＤＤ５０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、二次記憶装置としては、フラッシュメモリなどの半導体記憶装置を使用することもできる。
【００４７】
グラフィック処理装置５０４には、モニタ１１が接続されている。グラフィック処理装置５０４は、ＣＰＵ５０１からの命令に従って、画像をモニタ１１の画面に表示させる。モニタ１１としては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置がある。
【００４８】
入力インタフェース５０５には、キーボード１２とマウス１３とが接続されている。入力インタフェース５０５は、キーボード１２やマウス１３から送られてくる信号を、バス５０７を介してＣＰＵ５０１に送信する。なお、マウス１３は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００４９】
通信インタフェース５０６は、ネットワーク１０に接続されている。通信インタフェース５０６は、ネットワーク１０を介して、他のコンピュータとの間でデータの送受信を行う。
【００５０】
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。なお、図３では制御ノード５００のハードウェア構成を示したが、ディスクノード１００，２００，３００、アクセスノード６００，７００、および管理ノード３０も同様のハードウェア構成で実現することができる。ただし、ディスクノード１００，２００，３００は、図３に示した機能に加え、ストレージ装置１１０，２１０，３１０を外部接続するためのインタフェースを有している。
【００５１】
次に、マルチノードストレージシステムにおいて定義される仮想ディスクのデータ構造について説明する。
図４は、仮想ディスクのデータ構造を示す図である。本実施の形態では、仮想ディスク６０には仮想ディスク識別子「ＬＶＯＬ−Ｘ」が付与されている。ネットワーク経由で接続された３台のディスクノード１００，２００，３００には、個々のノードの識別のためにそれぞれ「ＳＮ−Ａ」、「ＳＮ−Ｂ」、「ＳＮ−Ｃ」というノード識別子が付与されている。そして、各ディスクノード１００，２００，３００に接続されているストレージ装置１１０，２１０，３１０は、ディスクノード１００，２００，３００のノード識別子と、各ディスクノード１００，２００，３００内でのディスクＩＤの組によってネットワーク１０で一意に識別される。
【００５２】
各ディスクノード１００，２００，３００が有するストレージ装置１１０，２１０，３１０それぞれにおいてＲＡＩＤ５のストレージシステムが構成されている。各ストレージ装置１１０，２１０，３１０で提供される記憶機能は、複数のスライス１１５ａ〜１１５ｃ，２１５ａ〜２１５ｃ，３１５ａ〜３１５ｃに分割されて管理されている。
【００５３】
仮想ディスク６０は、セグメント６１〜６３という単位で構成される。セグメント６１〜６３の記憶容量は、ストレージ装置１１０，２１０における管理単位であるスライスの記憶容量と同じである。例えば、スライスの記憶容量が１ギガバイトとするとセグメントの記憶容量も１ギガバイトである。仮想ディスク６０の記憶容量はセグメント１つ当たりの記憶容量の整数倍である。セグメント６１〜６３は、それぞれプライマリスライス６１ａ，６２ａ，６３ａとセカンダリスライス６１ｂ，６２ｂ，６３ｂとの組（スライスペア）で構成される。
【００５４】
同一セグメントに属する２つのスライスは別々のディスクノードに属する。個々のスライスを管理する領域には仮想ディスク識別子やセグメント情報や同じセグメントを構成するスライス情報の他にフラグがあり、そのフラグにはプライマリあるいはセカンダリなどを表す値が格納される。
【００５５】
図４の例では、仮想ディスク６０内のスライスの識別子を、「Ｐ」または「Ｓ」のアルファベットと数字との組合せで示している。「Ｐ」はプライマリスライスであることを示している。「Ｓ」はセカンダリスライスであることを示している。アルファベットに続く数字は、何番目のセグメントに属するのかを表している。例えば、１番目のセグメント６１のプライマリスライスが「Ｐ１」で示され、セカンダリスライスが「Ｓ１」で示される。
【００５６】
図５は、マルチノードストレージシステムの各装置の機能を示すブロック図である。アクセスノード６００は、メタデータ照会部６１０、アクセス用メタデータ記憶部６２０、およびスライスアクセス要求部６３０を有している。
【００５７】
メタデータ照会部６１０は、仮想ディスク６０を定義するメタデータを、制御ノード５００から取得する。具体的には、メタデータ照会部６１０は、アクセスノード６００の起動時に制御ノード５００に対して全メタデータの照会要求を送信する。すると、制御ノード５００から仮想ディスク６０に関する全メタデータが送られてくる。また、メタデータ照会部６１０は、スライスアクセス要求部６３０による任意のスライスへのデータアクセスがエラーとなったとき、アクセス対象のスライスが割り当てられたセグメントに関するメタデータの照会要求を制御ノード５００に送信する。すると、制御ノード５００から、該当セグメントの最新のメタデータが送られてくる。なお、メタデータ照会部６１０は、制御ノード５００からメタデータを取得すると、そのメタデータをアクセス用メタデータ記憶部６２０に格納する。
【００５８】
アクセス用メタデータ記憶部６２０は、仮想ディスク６０を定義するメタデータの記憶機能である。例えば、アクセスノード６００のＲＡＭの一部がアクセス用メタデータ記憶部６２０として使用される。なお、本実施の形態では、アクセスノード６００は常にプライマリスライスにアクセスを行う。そのため、アクセス用メタデータ記憶部６２０には、仮想ディスク６０のメタデータのうち、少なくともプライマリスライスに関するメタデータが格納されていればよい。
【００５９】
スライスアクセス要求部６３０は、端末装置２１，２２，２３からの仮想ディスク上でのデータのアクセス要求に応答して、ストレージ装置１１０，２１０，３１０のデータのアクセス要求（リード要求またはライト要求）をディスクノード１００，２００，３００に対して送信する。具体的には、スライスアクセス要求部６３０は、仮想ディスクのアドレスを指定したアクセス要求を受け取ると、まず、アクセス用メタデータ記憶部６２０を参照し、アクセス対象のデータが属するセグメントを判断する。次に、スライスアクセス要求部６３０は、該当するセグメントにプライマリスライスとして割り当てられたスライスを判断する。そして、スライスアクセス要求部６３０は、該当するスライスを管理するディスクノードに対して、そのスライス内のデータのアクセス要求を送信する。ディスクノードからアクセス結果が応答されると、スライスアクセス要求部６３０は、端末装置２１，２２，２３にアクセス結果を送信する。
【００６０】
なお、スライスアクセス要求部６３０は、アクセス先のディスクノードからエラーが返された場合、エラーが発生したセグメントをメタデータ照会部６１０に通知する。その後、スライスアクセス要求部６３０は、データアクセスのリトライを行う。リトライでは、アクセス用メタデータ記憶部６２０を参照して、プライマリスライスとした割り当てられたスライスを判断する処理から再度実行される。すなわち、前回のアクセス要求後にアクセス用メタデータ記憶部６２０内のメタデータが更新されていれば、更新後のメタデータに基づいてリトライ時のアクセス先となるディスクノードが判断される。
【００６１】
ディスクノード１００は、スライスアクセス処理部１２０、Ｔ１／復帰検出部１３０、Ｔ２検出部１４０、メタデータ記憶部１５０、およびスライス管理部１６０を有している。
【００６２】
スライスアクセス処理部１２０は、アクセスノード６００からのアクセス要求に応答して、ストレージ装置１１０に対するデータアクセスを行う。具体的には、スライスアクセス処理部１２０は、アクセスノード６００からアクセス要求を受け取ると、メタデータ記憶部１５０を参照し、アクセス対象となるセグメントに対して、割り当てられているストレージ装置１１０内のスライスを判断する。
【００６３】
次に、スライスアクセス処理部１２０は、アクセス要求で指定されている該当するスライス内のデータに対してアクセスする。例えば、データリードのアクセス要求であれば、スライスアクセス処理部１２０は、該当するデータをストレージ装置１１０から読み出す。また、データライトのアクセス要求であれば、スライスアクセス処理部１２０は、ストレージ装置１１０内の該当する記憶領域にアクセス要求に含まれるデータを書き込む。そして、スライスアクセス処理部１２０は、アクセス結果をアクセスノード６００に送信する。データリードのアクセス要求の場合、ストレージ装置１１０から読み出したデータがアクセス結果に含まれる。なお、ストレージ装置１１０がアクセスに対する応答を返せない状況にある場合（検査コマンドへの応答が返せない状況と同様）、スライスアクセス処理部１２０は、アクセスノード６００に対してエラーを返す（エラーメッセージを送信する）。
【００６４】
Ｔ１／復帰検出部１３０は、定期的にストレージ装置１１０に対して検査コマンドを送信し、応答の有無により故障の有無を判定する。具体的には、Ｔ１／復帰検出部１３０は、定期的にストレージ装置１１０へ”test unit ready”などの検査コマンドを発行する。また、Ｔ１／復帰検出部１３０は、内部に動作不調検出時間「Ｔ１」の値を保持している。例えば、Ｔ１／復帰検出部１３０が使用しているＲＡＭ内に「Ｔ１」の値が設定されている。Ｔ１としては、例えば、数秒から十数秒程度の時間が設定される。
【００６５】
そして、Ｔ１／復帰検出部１３０は、検査コマンド発行から動作不調検出時間が経過してもストレージ装置１１０から応答が返ってこない場合、故障の可能性有りと判定する。故障の可能性有りと判定した場合、Ｔ１／復帰検出部１３０は、制御ノード５００に対してＴ１経過通知を送信する。また、Ｔ１／復帰検出部１３０は、検査コマンド発行からＴ１経過後に、ストレージ装置１１０から応答が返されると、制御ノード５００に対して復帰通知を送信する。
【００６６】
Ｔ２検出部１４０は、故障の可能性有りと判定した後に、故障確定判定を行う。具体的には、Ｔ２検出部１４０は、内部に故障検出時間「Ｔ２」（Ｔ１＜Ｔ２）の値を予め保持している。例えば、Ｔ２検出部１４０が使用しているＲＡＭ内に「Ｔ２」の値が設定されている。Ｔ２としては、例えば、３０秒から１分程度の時間が設定される。
【００６７】
Ｔ２検出部１４０は、Ｔ１／復帰検出部１３０が検査コマンドを発行してからＴ２が経過するまでにストレージ装置１１０から応答が返ってこない場合、故障確定と判定する。故障確定と判定した場合、Ｔ２検出部１４０は、Ｔ２経過通知を制御ノード５００に送信する。
【００６８】
メタデータ記憶部１５０は、ディスクノード１００が管理しているスライスのメタデータの記憶機能である。例えば、ディスクノード１００のＲＡＭ内の一部の記憶領域がメタデータ記憶部１５０として使用される。
【００６９】
スライス管理部１６０は、ストレージ装置１１０内の各スライスのメタデータを管理する。具体的には、スライス管理部１６０は、ディスクノード１００起動時に、ストレージ装置１１０から各スライスのメタデータを読み出し、メタデータ記憶部１５０に格納する。また、スライス管理部１６０は、制御ノード５００からメタデータの収集要求があれば、メタデータ記憶部１５０に格納されているメタデータを制御ノード５００に送信する。さらにスライス管理部１６０は、制御ノード５００からメタデータの変更要求を受け取ると、その変更要求で指定されたメタデータの内容を変更する。この際、スライス管理部１６０は、メタデータ記憶部１５０内のメタデータと、ストレージ装置１１０内のメタデータとを変更する。
【００７０】
制御ノード５００は、仮想ディスクメタデータ記憶部５１０、メタデータ検索部５２０、ストレージ状態記憶部５３０、ストレージ状態管理部５４０、およびスライス割り当て管理部５５０を有している。
【００７１】
仮想ディスクメタデータ記憶部５１０は、仮想ディスク６０を構成するセグメントへのスライスの割り当て関係を示すメタデータを記憶する記憶機能である。例えば、ＲＡＭ５０２の記憶領域の一部が仮想ディスクメタデータ記憶部５１０として使用される。
【００７２】
メタデータ検索部５２０は、アクセスノード６００から照会されたセグメントに割り当てられたスライスのメタデータを仮想ディスクメタデータ記憶部５１０から検索し、検索結果をアクセスノード６００に応答する。また、メタデータ検索部５２０は、アクセスノード６００から照会されたスライスを有するストレージ装置が故障の可能性がある場合、アクセスノード６００から照会されたセグメントへのスライスの再割り当てをスライス割り当て管理部５５０に要求する。そして、メタデータ検索部５２０は、再割り当て結果を反映したメタデータを仮想ディスクメタデータ記憶部５１０より取得し、取得したメタデータをアクセスノード６００に応答する。なお、メタデータ検索部５２０は、各ストレージ装置の状態は、ストレージ状態記憶部５３０を参照することで判断する。
【００７３】
ストレージ状態記憶部５３０には、各ディスクノード１００，２００，３００に接続されているストレージ装置１１０，２１０，３１０の状態を記憶する記憶機能である。例えば、ＲＡＭ５０２の記憶領域の一部がストレージ状態記憶部５３０として使用される。ストレージ状態記憶部５３０に設定されるストレージ装置１１０，２１０，３１０の状態には、通常の状態と、Ｔ１経過後の状態とがある。Ｔ１経過後の状態は、検査コマンドへの無応答時間が動作不調検出時間が経過したことを示している。ストレージ装置の状態が、Ｔ１経過後の状態であれば、そのストレージ装置が故障している可能性があることが分かる。
【００７４】
ストレージ状態管理部５４０は、ディスクノード１００からの通知に応じて、ストレージ状態記憶部５３０内に示されるストレージ装置１１０の状態を変更する。具体的には、ディスクノード１００からＴ１経過通知を受け取ると、ストレージ状態管理部５４０は、ストレージ状態記憶部５３０内に示されるストレージ装置１１０の状態を、Ｔ１経過後の状態とする。また、ディスクノード１００から復帰通知を受け取ると、ストレージ状態管理部５４０は、ストレージ状態記憶部５３０内に示されるストレージ装置１１０の状態を、通常の状態とする。
【００７５】
スライス割り当て管理部５５０は、仮想ディスク６０のセグメントへのスライスの割り当てを管理する。例えば、スライス割り当て管理部５５０は、メタデータ検索部５２０から、故障の可能性があるストレージ装置内のアクセス対象となったスライスが通知されると、そのスライスが割り当てられているセグメントに対して、別のスライスを割り当てる。
【００７６】
また、スライス割り当て管理部５５０は、ディスクノード１００からＴ２経過通知を受け取ると、ストレージ装置１１０内のスライスが割り当てられたセグメントのリカバリ処理を開始する。スライス割り当て管理部５５０は、リカバリ処理において、リカバリ対象セグメントに割り当てられたスライスのうち、ストレージ装置１１０以外のストレージ装置２１０，３１０のスライスをすべてプライマリスライスとする。次に、スライス割り当て管理部５５０は、リカバリ対象セグメントのセカンダリスライスとして、ストレージ装置２１０，３１０のスライスを割り当てる。そして、スライス割り当て管理部５５０は、割り当て結果に応じたメタデータの更新要求をディスクノード２００，３００に送信する。ディスクノード２００，３００においてメタデータの更新が完了すると、スライス割り当て管理部５５０は、仮想ディスクメタデータ記憶部５１０内のメタデータを更新する。
【００７７】
リカバリ処理によりメタデータが更新された場合、リカバリ対象セグメントのプライマリスライスを管理するディスクノードは、ネットワーク１０経由でプライマリスライス内のデータをセカンダリスライスにコピーする。リカバリ処理に伴うデータのコピーは、プライマリスライスを管理するディスクノードとセカンダリスライスを管理するディスクノードとにおけるスライス管理部１６０に相当する機能の協働動作により実行される。
【００７８】
なお、図５では、２台のアクセスノード６００，７００のうちのアクセスノード６００の機能を代表で示しているが、アクセスノード７００も同様の機能を有している。また、３台のディスクノード１００，２００，３００のうちのディスクノード１００の機能を代表で示しているが、他のディスクノード２００，３００も同様の機能を有している。
【００７９】
次に、マルチノードストレージシステムの各ノードで管理されるメタデータについて詳細に説明する。本実施の形態におけるメタデータは、システムが停止している間は、ストレージ装置１１０，２１０，３１０に格納されている。マルチノードストレージシステムが起動されると、ストレージ装置１１０，２１０，３１０内のメタデータが読み出され、各ノードに保持される。
【００８０】
次に、各ノードで管理されているデータの構造について説明する。
図６は、ストレージ装置のデータ構造例を示す図である。ストレージ装置１１０には、スライス１１５ａ，１１５ｂ，１１５ｃ，・・・とは別に複数のメタデータ１１７ａ，１１７ｂ，１１７ｃ，・・・が格納されている。
【００８１】
ストレージ装置１１０に格納されたメタデータ１１７ａ，１１７ｂ，１１７ｃ，・・・は、ディスクノード１００の起動時にスライス管理部１６０によって読み出され、メタデータ記憶部１５０に格納される。
【００８２】
図７は、メタデータ記憶部のデータ構造例を示す図である。メタデータ記憶部１５０には、メタデータテーブル１５１が格納されている。メタデータテーブル１５１には、ディスクノードＩＤ、ディスクＩＤ、スライスＩＤ、状態、仮想ディスクＩＤ、セグメントＩＤ、仮想ディスクアドレス、ペアのディスクノードＩＤ、ペアのディスクＩＤ、ペアのスライスＩＤ、およびタイムスタンプの欄が設けられている。メタデータテーブル１５１内の横方向に並べられた情報同士が互いに関連付けられ、メタデータを示す１つのレコードを構成している。
【００８３】
ディスクノードＩＤの欄は、ストレージ装置１１０を管理しているディスクノード１００の識別情報（ディスクノードＩＤ）が設定される。
ディスクＩＤの欄には、ディスクノード１００に接続されているストレージ装置の識別情報（ディスクＩＤ）が設定される。本実施の形態ではディスクノード１００に１台のストレージ装置１１０しか接続されていないが、複数のストレージ装置が接続された場合、各ストレージ装置に異なるディスクＩＤが設定される。
【００８４】
スライスＩＤの欄には、メタデータに対応するスライスのストレージ装置１１０内での識別情報（スライスＩＤ）が設定される。
状態の欄には、スライスの状態を示す状態フラグが設定される。スライスが仮想ディスクのセグメントに割り当てられていない場合、状態フラグ「Ｆ」が設定される。仮想ディスクのセグメントのプライマリストレージに割り当てられている場合、状態フラグ「Ｐ」が設定される。仮想ディスクのセグメントのセカンダリストレージに割り当てられている場合、状態フラグ「Ｓ」が設定される。仮想ディスクのセグメントに割り当てることが決定したが、まだデータのコピーが行われていない場合、予約済を示す状態フラグ「Ｒ」が設定される。異常セグメントと判定された場合、異常であることを示す状態フラグ「Ｂ」が設定される。
【００８５】
仮想ディスクＩＤの欄には、スライスに対応するセグメントが属する仮想ディスクを識別するための識別情報（仮想ディスクＩＤ）が設定される。
セグメントＩＤの欄には、スライスが割り当てられたセグメントの識別情報（セグメントＩＤ）が設定される。
【００８６】
仮想ディスクアドレスの欄には、スライスが割り当てられているセグメントの先頭を示す仮想ディスク内でのアドレスが設定される。
ペアのディスクノードＩＤの欄には、ペアのスライス（同じセグメントに属する別のスライス）を有するストレージ装置を管理するディスクノードの識別情報（ディスクノードＩＤ）が設定される。
【００８７】
ペアのディスクＩＤの欄には、ペアのディスクノードＩＤで示されるディスクノード内で、ペアのスライスを有するストレージ装置を識別するための識別情報（ディスクＩＤ）が設定される。
【００８８】
ペアのスライスＩＤの欄には、ペアのスライスを、そのスライスが属するストレージ装置内で識別するための識別情報（スライスＩＤ）が設定される。
タイムスタンプの欄には、セグメントへのスライスの割り当てを行った時刻（タイムスタンプ）が設定される。図中のタイムスタンプの値は、「ｔ」に続く数が大きいほど、新しい時刻を示している。ｔｎの「ｎ」は自然数を示している。
【００８９】
図７にはディスクノード１００のメタデータ記憶部１５０の内容を示しているが、他のディスクノード２００，３００も同様のメタデータ記憶部を有している。そして、各ディスクノード１００，２００，３００のメタデータ記憶部に格納されたメタデータは、制御ノード５００からの要求に応じて制御ノード５００に送信される。制御ノード５００では、ディスクノード１００，２００，３００から収集したメタデータは、スライス割り当て管理部５５０により仮想ディスクメタデータ記憶部５１０に格納される。
【００９０】
図８は、仮想ディスクメタデータ記憶部のデータ構造例を示す図である。仮想ディスクメタデータ記憶部５１０には、仮想ディスクメタデータテーブル５１１が格納されている。仮想ディスクメタデータテーブル５１１には、ディスクノードＩＤ、ディスクＩＤ、スライスＩＤ、状態、仮想ディスクＩＤ、セグメントＩＤ、仮想ディスクアドレス、ペアのディスクノードＩＤ、ペアのディスクＩＤ、ペアのスライスＩＤ、およびタイムスタンプの欄が設けられている。仮想ディスクメタデータテーブル５１１内の横方向に並べられた情報が互いに関連付けられ、メタデータを示す１つのレコードを構成している。仮想ディスクメタデータテーブル５１１の各欄に設定される情報は、メタデータテーブル１５１の同名の欄と同種の情報である。
【００９１】
仮想ディスクメタデータテーブル５１１に格納されたメタデータは、アクセスノード６００，７００からの照会要求に応答して、アクセスノード６００，７００に送信される。アクセスノード６００，７００は、取得したメタデータを記憶する。アクセスノード６００であれば、アクセス用メタデータ記憶部６２０にメタデータが格納される。アクセスノード７００においても、アクセス用メタデータ記憶部６２０に相当する記憶機能にメタデータが格納される。
【００９２】
アクセス用メタデータ記憶部６２０のデータ構造は、仮想ディスクメタデータ記憶部５１０と同様である。なお、本実施の形態では、アクセスノード６００は常にプライマリスライスにアクセスする。そのため、アクセス用メタデータ記憶部６２０には、少なくともプライマリスライスに関するメタデータが格納されていればよい。また、各メタデータにおけるペアのディスクノードＩＤ、ペアのディスクＩＤ、ペアのスライスＩＤ、タイムスタンプの各欄のデータは無くてもよい。
【００９３】
次に、制御ノード５００内のストレージ状態記憶部５３０に格納されるデータについて説明する。
図９は、ストレージ状態記憶部のデータ構造例を示す図である。ストレージ状態記憶部５３０には、ディスク管理テーブル５３１が格納されている。ディスク管理テーブル５３１には、ディスクノードＩＤ、ディスクＩＤ、および状態の欄が設けられている。
【００９４】
ディスクノードＩＤの欄には、ディスクノードを一意に識別するための識別情報（ディスクノードＩＤ）が設定される。ディスクＩＤの欄には、ディスクノードに接続されたストレージ装置の識別情報（ディスクＩＤ）が設定される。
【００９５】
状態の欄には、各ストレージ装置の状態が設定される。状態には、「通常」と「Ｔ１」とがある。「通常」の状態とは、ストレージ装置が正常に動作している状態である。具体的には、定期的にディスクノードから出力される検査コマンドに対してストレージ装置から応答が返されている場合、そのストレージ装置の状態は「通常」に設定される。「Ｔ１」の状態とは、ストレージ装置の故障の可能性がある状態である。具体的には、定期的にディスクノードから出力される検査コマンドに対して、Ｔ１経過前にストレージ装置から応答が返されない場合、そのストレージ装置の状態は「Ｔ１」に設定される。
【００９６】
このような構成のマルチノードストレージシステムにおいて、検査コマンドに対するストレージ装置からの応答が、Ｔ１を経過しても返されない場合、以下のようなスライス切り替え処理が実行される。
【００９７】
図１０は、ストレージ装置故障時のスライス切り替え処理の手順を示すシーケンス図である。この例では、ディスクノード１００に接続されたストレージ装置１１０が故障したものとする。以下、図１０に示す処理をステップ番号に沿って説明する。
【００９８】
［ステップＳ１１］ディスクノード１００のＴ１／復帰検出部１３０は、定期的にストレージ装置１１０のディスク診断（動作確認）を行う。具体的には、Ｔ１／復帰検出部１３０は、定期的にストレージ装置１１０へ”test unit ready”の検査コマンドを発行する。ストレージ装置１１０が正常に動作していれば、ストレージ装置１１０からＴ１以内に応答が返される。
【００９９】
ストレージ装置１１０が故障している場合やストレージ装置１１０内部でデータの再生成処理が行われている場合などには、ストレージ装置１１０からＴ１以内に応答が返されない。
【０１００】
データの再生成処理は、ＲＡＩＤ５のディスク故障時に実行される処理である。すなわち、図２に示すようにストレージ装置１１０は、複数のＨＤＤ１１１〜１１４が実装されており、ＲＡＩＤ５システムを構成している。ＲＡＩＤ５では、データを分割して複数のＨＤＤに分散格納するストライピング処理が行われる。その際、データを修復するためのパリティデータが生成され、データとは別のＨＤＤに格納される。ストレージ装置１１０内の１台のＨＤＤが故障した場合、パリティデータを用いて、そのＨＤＤに格納されていたデータが再生成される。
【０１０１】
このようなデータの再生成処理は、ストレージ装置１１０内で自動的に実行される。例えば、ストレージ装置１１０内の４台のＨＤＤ１１１〜１１４の１台が故障した場合、ストレージ装置１１０内のＲＡＩＤコントローラによる故障したＨＤＤに格納されていたデータが再生成される。さらに、ＲＡＩＤコントローラは、稼動するＨＤＤが３台になったことにより、ストライピング処理によるデータの再配置を行う。このようなデータの再生成や再配置の処理中は、ストレージ装置１１０内のＲＡＩＤコントローラへの負荷が普段より大きくなる。そのため、データの再生成処理中にディスクノード１００からストレージ装置１１０に検査コマンドが入力されると、応答に通常より多くの時間がかかることがある。ただし、データの再生成などの処理はストレージ装置１１０の正常動作の１つである。そのため、再生成処理中に検査コマンドへの応答が遅れたとしても、ストレージ装置１１０全体としての故障ではない。
【０１０２】
図１０の例では、ストレージ装置１１０が故障しているため、検査コマンドを発行してからＴ１が経過しても、応答が返ってこない。その場合、まずＴ１／復帰検出部１３０がＴ１が経過したことを検出する。
【０１０３】
Ｔ１の経過を検出すると、Ｔ１／復帰検出部１３０は、制御ノード５００に対してＴ１経過通知を送信する。Ｔ１経過通知には、ディスクノード１００のディスクノードＩＤとストレージ装置１１０のディスクＩＤとが含まれる。Ｔ１／復帰検出部１３０は、その後もストレージ装置１１０からの応答を待つ。
【０１０４】
制御ノード５００のストレージ状態管理部５４０は、Ｔ１経過通知を受信すると、ストレージ装置１１０の状態を切り替える。すなわち、ストレージ状態管理部５４０は、Ｔ１経過通知に示されるディスクノードＩＤとディスクＩＤとの組みに対応する情報をストレージ状態記憶部５３０から検索する。そして、ストレージ状態管理部５４０は、該当するストレージ装置に関する情報の状態を「Ｔ１」に変更する。
【０１０５】
図１１は、状態変更後のストレージ状態記憶部の例を示す図である。図１１に示すように、ディスクノードＩＤ「ＳＮ−Ａ」とディスクＩＤ「１」との組に対応する状態が「Ｔ１」に変更されている。これにより、制御ノード５００では、ディスクノード１００に接続されたストレージ装置１１０に故障の可能性があることが認識できる。
【０１０６】
図１０の説明に戻る。
［ステップＳ１２］状態の切り替えが完了すると、ストレージ状態管理部５４０は、切り替え完了応答をディスクノード１００に送信する。
【０１０７】
［ステップＳ１３］一方、アクセスノード６００のスライスアクセス要求部６３０は、ユーザによる端末装置２１，２２，２３への操作入力などに応じて仮想ディスク６０内のデータへのアクセスが発生すると、アクセス用メタデータ記憶部６２０を参照し、アクセス対象のデータを管理しているディスクノードを判断する。図１０の例では、ディスクノード１００が管理するスライスへのリードのアクセスが発生したものとする。すると、スライスアクセス要求部６３０は、ディスクノード１００に対してアクセス対象データのリード要求を送信する。ディスクノード１００のスライスアクセス処理部１２０は、メタデータ記憶部１５０を参照して、アクセス対象スライスが自己の管理するストレージ装置１１０内のスライスであることを確認し、ストレージ装置１１０内の該当スライス内のデータを指定したリードアクセスを行う。
【０１０８】
図１０の例では、Ｔ１／復帰検出部１３０によるＴ１の経過が検出された後に、アクセスノード６００からのリード要求が出されている。この例では、ストレージ装置１１０は故障している。そのため、ストレージ装置１１０へのアクセスはエラーになる。ストレージ装置１１０が過負荷状態であっても、検査コマンドへの応答検出前（復帰前）であればデータアクセスもエラーとなる。
【０１０９】
なお、リード要求の場合には、プライマリスライスを有するストレージ装置に問題（故障または過負荷）がある場合にのみエラーとなる。他方、ライト要求の場合には、プライマリスライスを有するストレージ装置とセカンダリスライスを有するストレージ装置との少なくとも一方で問題（故障または過負荷）があるときにエラーとなる。すなわち、データのライトのアクセス要求を受け取ったディスクノード１００では、まず、スライスアクセス処理部１２０がデータ更新を行う。その後、スライス管理部１６０がメタデータ記憶部１５０を参照し、データが更新されたスライス（プライマリスライス）とペアとなるスライス（セカンダリスライス）を判断する。そして、スライス管理部１６０は、セカンダリスライスを管理するディスクノードに書き込み対象のデータを送信し、セカンダリスライスのデータ更新を要求する。スライスアクセス処理部１２０は、プライマリスライスとセカンダリスライスとの両方のデータ更新が完了したことを確認後、アクセスノード６００に対してライト要求の完了応答を返す。もし、プライマリスライスとセカンダリスライスとの少なくとも一方でデータ更新が失敗した場合、スライスアクセス処理部１２０はアクセスノード６００にエラーを応答する。
【０１１０】
図１０の例では、ストレージ装置１１０（ディスクノードＩＤ「ＳＮ−Ａ」）の故障により、ストレージ装置１１０（ディスクＩＤ「１」）の先頭のスライス（スライスＩＤ「１」）へのリード要求がエラーになっている。
【０１１１】
［ステップＳ１４］ディスクノード１００のスライスアクセス処理部１２０は、アクセスノード６００からのリード要求に対してエラーを応答する。すると、アクセスノード６００のスライスアクセス要求部６３０は、メタデータ照会部６１０に対してエラーの発生を通知する。このとき、スライスアクセス要求部６３０は、アクセスがエラーとなったセグメントに関する仮想ディスクＩＤとセグメントＩＤとについてもメタデータ照会部６１０に伝える。
【０１１２】
［ステップＳ１５］メタデータ照会部６１０は、制御ノード５００に対してセグメントを指定したメタデータの照会要求を送信する。照会要求で指定されるセグメント（照会対象セグメント）は、エラーによりアクセスが失敗したセグメントである。紹介対象セグメントを指定したメタデータの照会要求は、その紹介対象セグメントに割り当てられているスライスへのアクセスに失敗したことを意味している。
【０１１３】
メタデータの照会要求を請け受け取った制御ノード５００のメタデータ検索部５２０は、スライス割り当て管理部５５０へ照会対象セグメントへのスライスの再割り当てを要求する。
【０１１４】
具体的には、メタデータ検索部５２０は、照会要求を受け取ると、仮想ディスクメタデータ記憶部５１０から、照会対象セグメントに割り当てられたスライス（プライマリスライスとセカンダリスライス）のメタデータを検索する。次に、メタデータ検索部５２０は、ストレージ状態記憶部５３０を参照し、照会対象のセグメントに割り当てられたスライスを有するストレージ装置の状態を確認する。
【０１１５】
ここで、各スライスを有するストレージ装置の状態が「通常」であれば、メタデータ検索部５２０は、検索によって取得したメタデータのうち、プライマリスライスのメタデータをアクセスノード６００に送信する。
【０１１６】
スライスを有するストレージ装置の状態が「Ｔ１」であれば、照会対象セグメントのリカバリ処理（二重化回復処理）が開始される。そのリカバリ処理では、まずメタデータ検索部５２０が照会対象セグメントへのスライスの再割り当てを行う。例えば、照会対象セグメントのプライマリスライスを有するストレージ装置の状態が「Ｔ１」であれば、プライマリスライスの再割り当てが行われる。また、照会対象セグメントのセカンダリスライスを有するストレージ装置の状態が「Ｔ１」であれば、セカンダリスライスの再割り当てが行われる。
【０１１７】
図１０の例では、ストレージ装置１１０の状態が「Ｔ１」となっており、プライマリスライスの再割り当てが行われる。具体的には、メタデータ検索部５２０からスライス割り当て管理部５５０へ、仮想ディスクのセグメントを指定したプライマリスライスの再割り当て要求を出力する。すると、スライス割り当て管理部５５０は、仮想ディスクメタデータ記憶部５１０から、照会対象セグメントのセカンダリスライスを管理するディスクノード以外のディスクノードで管理されるスライスのうち、空き（状態が「Ｆ」）のスライスを検索する。
【０１１８】
次に、スライス割り当て管理部５５０は、見つけ出した空きスライスを、照会対象セグメントのセカンダリスライスとすることを決定する。また、スライス割り当て管理部５５０は、照会対象セグメントにセカンダリスライスとして割り当てられているスライスの状態を、プライマリスライスに変更することを決定する。
【０１１９】
図１０の例では、ディスクノード２００が管理するスライスをセカンダリスライスとして照会対象セグメントに割り当て、ディスクノード３００が管理するスライスの状態を、プライマリスライスからセカンダリスライスに変更することが決定される。スライス割り当て管理部５５０は、決定された再割り当ての内容に基づいて、仮想ディスクメタデータ記憶部５１０内のメタデータを更新する。
【０１２０】
［ステップＳ１６］スライス割り当て管理部５５０は、ディスクノード２００に対して、メタデータの変更要求を送信する。具体的には、スライス割り当て管理部５５０は、再割り当て後のセカンダリスライス用のメタデータの情報をディスクノード２００に送信する。すると、ディスクノード２００では、取得した情報に基づいて、ディスクノード２００内で保持するメタデータとストレージ装置２１０内のメタデータとの内容を変更する。これにより、ストレージ装置２１０内の空きスライスが、照会対象セグメントのセカンダリスライスに変更される。
【０１２１】
［ステップＳ１７］スライス割り当て管理部５５０は、ディスクノード３００に対して、メタデータの変更要求を送信する。具体的には、スライス割り当て管理部５５０は、再割り当て後のプライマリスライス用のメタデータの情報をディスクノード３００に送信する。すると、ディスクノード３００では、取得した情報に基づいて、ディスクノード３００内で保持するメタデータとストレージ装置３１０内のメタデータとの内容を変更する。これにより、ストレージ装置３１０内の照会対象セグメントに割り当てられていたスライスが、セカンダリスライスからプライマリスライスに変更される。
【０１２２】
［ステップＳ１８］ディスクノード２００から制御ノード５００に、メタデータの変更完了応答が送信される。
［ステップＳ１９］ディスクノード３００から制御ノード５００に、メタデータの変更完了応答が送信される。
【０１２３】
なお、図１０には示していないが、各ディスクノード２００，３００でメタデータの変更処理が完了すると、照会対象セグメントに対する二重化状態回復のためのデータコピーが開始される。具体的には、照会対象セグメントのプライマリスライスに変更されたディスクノード３００内のメタデータのデータが、ディスクノード３００からディスクノード２００へ転送される。そして、照会対象セグメントのセカンダリスライスとして新たに割り当てられたディスクノード２００内のスライスに、ディスクノード３００から送られたデータが格納される。データコピーが完了した時点で、紹介対象セグメントのリカバリ処理が完了する。
【０１２４】
このようにして、メタデータ照会要求に起因してスライスの再割り当てが行われる。このとき、スライス割り当て管理部５５０は、ストレージ装置の状態が「Ｔ１」であることにより再割り当てが行われたセグメント（再割り当て済セグメント）をＲＡＭ５０２内に記憶しておく。具体的には、再割り当て済セグメントの仮想ディスクＩＤとセグメントＩＤとの組が、ＲＡＭに記憶される。再割り当て後にストレージ装置が復帰した場合、復帰したストレージ装置のスライスのうち再割り当て済セグメントに割り当てられていたスライスは、空きスライスに変更されることとなる。
【０１２５】
図１２は、更新後の仮想ディスクメタデータ記憶部の内容を示す図である。図１２に示すように、ディスクノードＩＤ「ＳＮ−Ａ」、ディスクＩＤ「１」、スライスＩＤ「１」で示されるスライスのメタデータは、状態が「Ｆ」に変更されている。これにより、ストレージ装置１１０内のスライスの照会対象セグメント（セグメントＩＤ「１」）への割り当てが解除される。
【０１２６】
また、ディスクノードＩＤ「ＳＮ−Ｃ」、ディスクＩＤ「１」、スライスＩＤ「１」で示されるスライスのメタデータは、状態が「Ｐ」に変更されている。これにより、照会対象セグメントに割り当てられていたストレージ装置３１０内のスライスが、セカンダリスライスからプライマリスライスに変更される。
【０１２７】
さらに、ディスクノードＩＤ「ＳＮ−Ｂ」、ディスクＩＤ「１」、スライスＩＤ「２」で示されるスライスのメタデータは、状態が「Ｓ」に変更され、仮想ディスクＩＤに「ＶＬＯＸ−Ｘ」が設定され、セグメントＩＤに「１」が設定されている。これにより、照会対象セグメントのセカンダリスライスとして、ストレージ装置２１０内のスライスが割り当てられる。
【０１２８】
また、状態等の内容が変更された各メタデータは、タイムスタンプが「ｔ（ｎ＋１）」に更新されている。「ｔ（ｎ＋１）」はメタデータの更新時刻である。
図１０の説明に戻り、メタデータの更新が完了すると、スライス割り当て管理部５５０は、メタデータ検索部５２０に対してスライス再割り当ての完了を通知する。
【０１２９】
［ステップＳ２０］メタデータ検索部５２０は、アクセスノード６００に対して照会対象セグメントのプライマリスライスのメタデータを通知する。すると、アクセスノード６００のメタデータ照会部６１０は、取得したメタデータに基づいて、アクセス用メタデータ記憶部５６０内のメタデータを更新する。その後、メタデータ照会部６１０は、スライスアクセス要求部６３０に対して、メタデータの照会が完了したことを通知する。
【０１３０】
［ステップＳ２１］スライスアクセス要求部６３０は、メタデータの照会が完了すると、アクセス用メタデータ記憶部６２０を参照してアクセス対象のスライスを管理するディスクノードを判断し、そのディスクノードへリード要求（リードリトライ）を送信する。リトライ時には、アクセス対象のプライマリスライスは、ディスクノード３００で管理されたスライスとなっている。そのため、リードリトライはディスクノード３００に対して行われる。
【０１３１】
［ステップＳ２２］ディスクノード３００ではリード要求を受け取ると、ストレージ装置３１０内のスライスからデータを読み出し、読み出したデータをアクセスノード６００に送信する。すると、スライスアクセス要求部６３０は、アクセス指示を出した端末装置に対して取得したデータを送信する。
【０１３２】
［ステップＳ２３］図１０の例では、ストレージ装置１１０が故障しているため、検査コマンドの発行からＴ２が経過しても、ストレージ装置１１０からの応答は返ってこない。そのため、ディスクノード１００のＴ２検出部１４０は、検査コマンド発行からＴ２が経過したことを検出する。そして、Ｔ２検出部１４０は、制御ノード５００に対してＴ２経過通知を送信する。
【０１３３】
［ステップＳ２４］Ｔ２経過通知を受け取った制御ノード５００のスライス割り当て管理部５５０は、ストレージ装置１１０が故障により使用不可になったことを認識し、ストレージ装置４１０全体のリカバリ処理を開始する。
【０１３４】
このようにして、ストレージ装置１１０が故障した場合、故障検出時間の経過を待たずに、ストレージ装置１１０内のスライスがプライマリスライスとして割り当てられていたセグメント内のデータへのアクセスが可能となる。その結果、アクセスノード６００からのアクセスがエラーとなる期間が短くて済む。
【０１３５】
次に、正常に動作しているストレージ装置１１０の負荷が一時的に過大であったため検査コマンドへの応答が遅れた場合のスライス切り替え処理について説明する。
図１３は、ストレージ装置の負荷が過大となったときのスライス切り替え処理の手順を示すシーケンス図である。この例では、ディスクノード１００に接続されたストレージ装置１１０の負荷が一時的に過大になったものとする。なお、図１３のステップＳ３１〜ステップＳ４２の処理は、それぞれ図１０のステップＳ１１〜Ｓ２２の処理と同じである。そこで、ステップＳ４３以降の処理をステップ番号に沿って説明する。
【０１３６】
［ステップＳ４３］ディスクノード１００のＴ１／復帰検出部１３０は、検査コマンドに対するストレージ装置１１０からの応答を受信する。これによりＴ１／復帰検出部１３０は、ストレージ装置１１０がアクセス可能な状態に復帰したことを検出する。すると、Ｔ１／復帰検出部１３０は、制御ノード５００に対してストレージ装置１１０の復帰通知を送信する。
【０１３７】
［ステップＳ４４］制御ノード５００のスライス割り当て管理部５５０は、復帰通知を受け取ると、ディスクノード１００に対して、メタデータの変更要求を送信する。具体的には、スライス割り当て管理部５５０は、仮想ディスクメタデータ記憶部５１０を参照し、ストレージ装置１１０のスライスのうち、メタデータ照会に基づくスライスの再割り当てを行ったセグメント（再割り当て済セグメント）に割り当てられていたスライスを抽出する。そして、スライス割り当て管理部５５０は、該当するスライスのセグメントへの割り当てを解除（状態を「Ｆ」として空きスライスに変更）するためのメタデータ変更要求をディスクノード１００に送信する。
【０１３８】
［ステップＳ４５］ディスクノード１００のスライス管理部１６０は、メタデータ更新要求に基づいて、メタデータ記憶部１５０内の指定されたスライスのメタデータを更新する。スライス管理部１６０は、メタデータの更新後、変更完了応答を制御ノード５００に送信する。
【０１３９】
このようにして、ストレージ装置１１０の過負荷状態が解消し、ストレージ装置１１０が復帰した場合、ディスクノード１００側のメタデータを更新することで、メタデータ間の矛盾が防止される。すなわち、メタデータの再割り当てが行われたことにより、再割り当て済セグメントには、プライマリスライス、セカンダリスライス共に、ストレージ装置１１０のスライスとは異なるストレージ装置のスライスが割り当てられている。そのため、ストレージ装置１１０が復帰すると、再割り当て済セグメントに割り当てられたスライス（図１３の例ではプライマリスライス）が重複して存在することとなってしまう。そこで、ストレージ装置１１０内のスライスを空き（Free）の状態に変更することで、割り当て関係の矛盾の発生を防止している。
【０１４０】
ところで、ストレージ装置１１０のメタデータの変更をストレージ装置１１０復帰後に行うのは、復帰が確認できるまではストレージ装置１１０が故障している可能性が残されており、正常にメタデータを更新できない可能性があるためである。そこで、制御ノード５００は、スライスの再割り当てを行った場合、再割り当て済セグメントをＲＡＭ内に記憶している。再割り当て済セグメントを記憶しておくことで、ストレージ装置１１０復帰時に空き状態とすべきスライスを判断することができる。
【０１４１】
ここで、ストレージ装置１１０が復帰する前に制御ノード５００に障害が発生し、制御ノード５００のＲＡＭ５０２内のデータが失われる場合も有り得る。例えば、制御ノード５００に障害が発生したことにより、代替のノードに機能が引き継がれた場合（ファイルオーバ）や、制御ノード５００の再起動が行われた場合である。このような場合、制御ノード５００はメタデータを各ディスクノード１００，２００，３００から収集して、仮想ディスクメタデータテーブル５１１を再構築する。このとき、制御ノード５００がフェイルオーバまたは再起動する間に該当ディスクが復帰すると、再割り当て済セグメントに割り当てられたスライスを示すメタデータが３つ収集され矛盾が生じる。これを防ぐため、仮想ディスクメタデータテーブル５１１を再構築した制御ノード５００は、メタデータに付与されているタイムスタンプを参照して、空き状態とすべきスライスを判断する。
【０１４２】
図１４は、タイムスタンプを用いた矛盾解消処理を示すシーケンス図である。以下、図１４に示す処理をステップ番号に沿って説明する。なお、以下の処理は、制御ノード５００が再起動またはフェイルオーバされたときに実行される。
【０１４３】
［ステップＳ５１］制御ノード５００のスライス割り当て管理部５５０は、各ディスクノード１００，２００，３００に対して、メタデータ要求を送信する。
［ステップＳ５２］メタデータ要求を受信したディスクノード１００のスライス管理部１６０は、メタデータ記憶部１５０またはストレージ装置１１０からメタデータを取得し、制御ノード５００に送信する。他のディスクノード２００，３００も同様にメタデータを制御ノード５００に送信する。
【０１４４】
各ディスクノード１００，２００，３００からメタデータを収集した制御ノード５００では、スライス割り当て管理部５５０が、収集したメタデータに基づいて仮想ディスクメタデータテーブル５１１を再構成する。そして、スライス割り当て管理部５５０は、メタデータの整合性チェックを行う。整合性チェックでは、３つ以上のスライスが割り当てられているセグメントの存在の有無を確認する。次に、スライス割り当て管理部５５０は、該当するセグメントがある場合、割り当てられているスライスのメタデータを比較する。そして、スライス割り当て管理部５５０は、状態（プライマリスライスまたはセカンダリスライス）が同一のスライスのうち、タイムスタンプの時刻が最新のスライス以外を、割り当てを解除すべきスライスと判断する。
【０１４５】
［ステップＳ５３］スライス割り当て管理部５５０は、割り当てを解除すべきスライスを管理するディスクノード（図１４の例では、ディスクノード１００）に対して、該当するスライスの状態を「Ｆ」に変更するためのメタデータ変更要求を送信する。
【０１４６】
［ステップＳ５４］ディスクノード１００のスライス管理部１６０は、メタデータ変更要求に応じてメタデータ記憶部１５０とストレージ装置１１０とのメタデータの内容を更新する。そして、スライス管理部１６０は、変更完了の応答を制御ノード５００に返す。
【０１４７】
図１５は、再構成された仮想ディスクメタデータテーブルの例を示す図である。この例は、ステップＳ３８，Ｓ３９後の仮想ディスクメタデータテーブル５１１更新後、ステップＳ４３の復帰通知前に、制御ノード５００が再起動された場合を想定している。
【０１４８】
図１５の例では、ディスクノードＩＤ「ＳＮ−Ａ」、ディスクＩＤ「１」、およびスライスＩＤ「１」で特定されるスライスと、ディスクノードＩＤ「ＳＮ−Ｃ」、ディスクＩＤ「１」、およびスライスＩＤ「１」で特定されるスライスとが、セグメントＩＤ「１」のセグメントにプライマリスライス（状態「Ｐ」）として割り当てられている。そこで、スライス割り当て管理部５５０によって重複して割り当てられた２つのスライスのメタデータにおけるタイムスタンプが比較される。
【０１４９】
ディスクノードＩＤ「ＳＮ−Ａ」のスライスのタイムスタンプは「ｔ１」であり、ディスクノードＩＤ「ＳＮ−Ｃ」のスライスのタイムスタンプは「ｔ（ｎ＋１）」である。「ｔ（ｎ＋１）」は「ｔ１」よりも時刻が新しいため、ディスクノードＩＤ「ＳＮ−Ｃ」のスライスの方が正しいスライスである。従って、ディスクノードＩＤ「ＳＮ−Ａ」で示されるディスクノード１００に対して、ディスクＩＤ「１」のストレージ装置１１０内のスライスＩＤ「１」のスライスの状態を「Ｆ」（空き状態を示す）に変更するためのメタデータ変更要求が送信される。
【０１５０】
このようにして、ディスクノード１００からのＴ１経過通知に起因するメタデータの再割り当てからディスクノード１００からの復帰通知までの間に制御ノード５００の再起動やファイルオーバが発生しても、タイムスタンプを用いてメタデータの整合性を保つことができる。すなわち、フェイルオーバまたは再起動により実行できなかったメタデータの更新を、フェイルオーバまたは再起動後に行うことが可能となる。
【０１５１】
以上のように、第１の実施の形態によれば、故障検出時間「Ｔ２」と動作不調検出時間「Ｔ１」を分離することにより、以下の効果を持つ。
１．故障検出時間「Ｔ２」を長くとってもアクセスが長時間止まらない。
【０１５２】
ディスク装置は内部で切り替えが発生するため、故障ではないがしばらく不応答（分オーダ）になるものがある。このような装置を使用しても動作不調検出時間「Ｔ１」（例えば１秒）でアクセスを復帰できる。
【０１５３】
２．ディスク装置ごとに故障検出時間を調整しなくてよい。
従来のマルチノードストレージでは誤検出を起こさず、できるだけ早くアクセスを復帰させるためにディスク装置ごとに故障検出時間を調整する必要があった。第１の実施の形態によれば、故障検出時間「Ｔ２」を大部分の装置が応答する時間（例えば１分）に設定し、動作不調検出時間「Ｔ１」を例えば１秒に設定する。故障検出時間「Ｔ２」を長く設定したことで、どのようなタイプのストレージ装置であっても、故障の誤検出をすることがなくなる。
【０１５４】
このように、信頼性の高い故障検出と、動作不調時における短時間でのアクセス環境の回復とを両立することが可能となる。
［第２の実施の形態］
第２の実施の形態は、Ｔ２を用いずに、管理ノード３０からのディスクノード切り離し指示に基づいてリカバリ処理を開始するものである。
【０１５５】
第１の実施の形態では、ディスクノード１００が、検査コマンド発行からＴ２が経過するまでストレージ装置１１０から応答がなければ、ディスクノード１００からＴ２経過通知が出力される。ただし、Ｔ２として適切な値を決定するのが困難な場合がある。例えば、接続されるストレージ装置１１０，２１０，３１０の製造元や性能が異なる場合、適切なＴ２も異なってくる。
【０１５６】
また、第１の実施の形態で示したように、検査コマンドの発行からＴ１経過するまで無応答であれば、スライスの再割り当てをするようにしたことで、ストレージ装置の復帰を待たずにデータアクセスが可能となる。そのため、Ｔ２の検出を行わなくても、アクセスノードからのデータアクセスには影響がない。
【０１５７】
一方、ストレージ装置が故障しているのであれば、そのストレージ装置内のデータのリカバリが必要である。そこで、第２の実施の形態では、管理者がストレージ装置の故障を確認した場合に、管理ノード３０を介してストレージ装置の切り離しを指示できるようにした。
【０１５８】
図１６は、管理ノードからディスクノード切り離しを指示する場合の処理手順を示すシーケンス図である。なお、図１６に示すステップＳ６１〜Ｓ７２，Ｓ７４の処理は、それぞれ図１０に示したステップＳ１１〜Ｓ２２，Ｓ２４と同じ処理である。そこで、図１０とは異なるステップＳ７３の処理について説明する。
【０１５９】
［ステップＳ７３］管理ノード３０は、ディスクノード１００，２００，３００や制御ノード５００から、運用状況を示す各種情報を取得することができる。取得した情報は、管理ノード３０のモニタに表示される。従って、ストレージ装置１１０が検査コマンドに対する応答を返していないことも、管理ノード３０の画面に表示される。
【０１６０】
マルチノードストレージシステムの管理者は、管理ノード３０が画面を見ることで、ストレージ装置１１０が故障している可能性があることを認識する。管理者は、ストレージ装置１１０に対する各種制御コマンド（例えば再起動）を発行するなどの作業を行う。その結果、ストレージ装置１１０が故障していることが確認できると、管理者は、管理ノード３０に対してディスクノード１００の切り離しを指示する操作入力を行う。すると、管理ノード３０は、制御ノード５００に対してディスクノード切り離し要求を送信する。
【０１６１】
このディスクノード切り離し要求に応答して、制御ノード５００の制御の元、リカバリ処理（ステップＳ７４）が実行され、ディスクノード１００がマルチノードストレージシステムから切り離される。
【０１６２】
このようにして、管理者からの指示があるまで、ストレージ装置全体に対するリカバリ処理の開始を待つことができる。
［第３の実施の形態］
第３の実施の形態は、ディスクノードからのスライスを指定したスライス異常通知に基づいて、指定されたスライスが割り当てられていたセグメントへのスライスの再割り当てを行うものである。
【０１６３】
第１、第２の実施の形態では、アクセスノードからメタデータ照会要求があったときに、制御ノードにおいて、メタデータ照会の対象となるセグメントに対するスライスの再割り当てを行っている。この場合、メタデータの照会処理の延長で、ディスクノードのメタデータの変更処理が実施される。スライスの再割り当て処理によりメタデータが変更されるディスクノードが正常に動作していれば、図１０に示すメタデータ照会要求の送信（ステップＳ１５）からメタデータ通知（ステップＳ２０）までの時間は、短時間ですむ。
【０１６４】
ところが、メタデータを変更するディスクノードが過負荷の場合、ディスクノードから制御ノードへメタデータの変更完了の応答が返ってこない場合がある。すると、制御ノードからアクセスノードへのメタデータ通知も遅れてしまう。
【０１６５】
また、制御ノードでは、メタデータ照会要求に応じたメタデータ検索処理を１つのプロセスで実行している場合がある。それは、システムの設計上、複数のプロセスで並列実行するよりも、単一のプロセスで短い処理を繰り返し実行した方が、全体的に処理効率が高い場合があるためである。例えば、複数のプロセスでメタデータ照会要求に応じたメタデータ検索処理を行うと、受信したメタデータ照会要求の振り分け処理などの余分な処理が必要となり、かえって処理効率が低下する場合がある。さらに、メタデータ検索用のプロセスが多数起動されると、そのプロセスでメモリなどの資源が多く消費されてしまい、制御ノード全体の処理効率を低下させる原因にもなる。
【０１６６】
１つのプロセスで多数のメタデータ照会要求に応じた処理を受け持っている場合、１つの処理に時間がかかると、他のメタデータ照会要求に応じた処理が待たされることとなる。すると、アクセスノードがメタデータ照会の結果を取得するまでに時間がかかり、マルチノードストレージシステムとしてのサービス効率が低下する。
【０１６７】
そこで、第３の実施の形態では、各ディスクノードは、動作不調検出時刻「Ｔ１」を検出したストレージ装置内のスライスへのアクセス要求を受け取ると、制御ノードに対してスライス異常通知を行うようにする。制御ノードでは、メタデータ照会要求に応じた処理の延長としてスライス再割り当てを行うのではなく、ディスクノードからのスライス異常通知に応じてスライス再割り当てを行う。これにより、メタデータの照会要求への応答を遅延させずに、アクセス対象となったスライスが割り当てられていたセグメントの再割り当てが可能となる。
【０１６８】
第３の実施の形態のシステム構成は、図２に示した第１の実施の形態のシステム構成と同様である。ただし、ディスクノードと制御ノードとの機能が異なる。そこで、第３の実施の形態におけるディスクノードと制御ノードとの機能について説明する。
【０１６９】
図１７は、第３の実施の形態におけるマルチノードストレージシステムの各装置の機能を示すブロック図である。図２の各ディスクノード１００，２００，３００の内部機能を、図１７に示したディスクノード４００と同様の機能に置き換え、図２の制御ノード５００の内部機能を図１７に示した制御ノード８００と同様の機能に置き換えることで、第３の実施の形態に係るマルチノードストレージシステムが構築できる。
【０１７０】
ディスクノード４００は、スライスアクセス処理部４２０、Ｔ１／復帰検出部４３０、Ｔ２検出部４４０、メタデータ記憶部４５０、スライス管理部４６０、および被アクセススライス検出部４７０を有している。
【０１７１】
スライスアクセス処理部４２０は、図５に示したＴ１／復帰検出部１３０が有している機能を有する、さらに、スライスアクセス処理部４２０は、アクセスノード６００からのアクセス要求にエラーを返す場合、エラーとなったストレージ装置のスライスに関する情報を被アクセススライス検出部４７０に通知する機能を有している。
【０１７２】
Ｔ１／復帰検出部４３０は、図５に示したＴ１／復帰検出部１３０が有している機能に加え、Ｔ１を検出した場合、その旨を被アクセススライス検出部４７０に通知する機能を有している。また、Ｔ１／復帰検出部４３０は、Ｔ１検出後にストレージ装置４１０が復帰した場合、その旨を被アクセススライス検出部４７０に通知する機能を有している。
【０１７３】
Ｔ２検出部４４０は、図５に示したＴ２検出部１４０が有している機能に加え、Ｔ２を検出した場合、その旨を被アクセススライス検出部４７０に通知する機能を有している。
メタデータ記憶部４５０は、図５に示したメタデータ記憶部４５０が記憶している情報に加え、各スライスの二重化状態を示す情報を記憶している。二重化状態を示す情報としては、二重化状態には、正常とコピー中とがある。正常は、ペアとなったスライスとの間の二重化が保たれている（格納されているデータの同一性が保たれている）状態である。コピー中は、ペアとなったスライスとの間で二重化を確立するためにデータをコピーしている状態である。
【０１７４】
スライス管理部４６０は、図５に示したスライス管理部１６０が有している機能に加え、スライスの二重化状態を管理し、各スライスの現在の二重化状態をメタデータ記憶部４５０に設定する機能を有している。
【０１７５】
被アクセススライス検出部４７０は、アクセスノード６００からのアクセス要求がエラーとなったスライスに関するスライス異常通知を制御ノード８００に送信する。具体的には、被アクセススライス検出部４７０は、Ｔ１／復帰検出部４３０からの通知によって、ストレージ装置４１０のＴ１が検出されたこと、およびその後復帰したことを認識する。また、被アクセススライス検出部４７０は、Ｔ２検出部４４０からの通知によって、ストレージ装置４１０のＴ２が検出されたことを認識する。さらに、被アクセススライス検出部４７０は、スライスアクセス処理部４２０からの通知によって、ストレージ装置４１０内のスライスへのアクセスがエラーになったことを認識する。
【０１７６】
そして、被アクセススライス検出部４７０は、ストレージ装置４１０内のスライスへのアクセスがエラーになると、ストレージ装置４１０の状態を確認する。すなわち、被アクセススライス検出部４７０は、ストレージ装置４１０の検査コマンドに対する応答がなく、Ｔ１検出後であって、Ｔ２検出前であるか否かを判断する。この条件が満たされていた場合、被アクセススライス検出部４７０は、アクセス対象となっていたスライスを指定したスライス異常通知を制御ノード８００に送信する。
【０１７７】
制御ノード８００は、仮想ディスクメタデータ記憶部８１０、メタデータ検索部８２０、割り当て可否記憶部８３０、ストレージ状態管理部８４０、およびスライス割り当て管理部８５０を有している。
【０１７８】
仮想ディスクメタデータ記憶部８１０の機能は、図５に示した仮想ディスクメタデータ記憶部５１０の機能と同様である。
メタデータ検索部８２０の機能は、図５に示したメタデータ検索部５２０の機能と同様である。ただし、スライスの再割り当てをスライス割り当て管理部５５０に要求する機能は不要である。
【０１７９】
割り当て可否記憶部８３０は、ストレージ装置ごとに、そのストレージ装置内のスライスをセグメントに割り当て可能か否かを示す情報（割り当て可否情報）を記憶する記憶機能である。例えば、制御ノード８００のＲＡＭ内の記憶領域の一部が、割り当て可否記憶部８３０として使用される。
【０１８０】
ストレージ状態管理部８４０は、ディスクノード４００からの通知に応じて、ストレージ状態記憶部５３０内に示されるストレージ装置４１０の状態を変更する。具体的には、ディスクノード４００からＴ１経過通知を受け取ると、ストレージ状態管理部５４０は、割り当て可否記憶部８３０内に示されるストレージ装置４１０の状態を、割り当て不可の状態とする。また、ディスクノード４００から復帰通知を受け取ると、ストレージ状態管理部５４０は、ストレージ状態記憶部５３０内に示されるストレージ装置４１０の状態を、割り当て可の状態とする。
【０１８１】
スライス割り当て管理部８５０は、仮想ディスク６０のセグメントへのスライスの割り当てを管理する。例えば、スライス割り当て管理部８５０は、ディスクノード４００からスライス異常通知を受け取ると、スライス異常通知に示されるスライスが割り当てられているセグメントに対して、別のスライスを割り当てる。
【０１８２】
また、スライス割り当て管理部８５０は、ディスクノード４００からＴ２経過通知を受け取ると、ストレージ装置４１０内のスライスが割り当てられたセグメントのリカバリ処理を開始する。スライス割り当て管理部８５０は、リカバリ処理において、リカバリ対象セグメントに割り当てられたスライスのうち、ストレージ装置４１０以外のストレージ装置（正常動作ストレージ装置）のスライスをすべてプライマリスライスとする。次に、スライス割り当て管理部８５０は、リカバリ対象セグメントのセカンダリスライスとして、ストレージ装置２１０，３１０のスライスを割り当てる。そして、スライス割り当て管理部８５０は、割り当て結果に応じたメタデータの更新要求を、正常動作ストレージ装置を管理するディスクノードに送信する。メタデータの更新要求を受け取ったディスクノードにおいてメタデータの更新が完了すると、スライス割り当て管理部８５０は、仮想ディスクメタデータ記憶部８１０内のメタデータを更新する。
【０１８３】
次に、各ノードで管理されているデータの構造について説明する。
図１８は、メタデータ記憶部のデータ構造例を示す図である。メタデータ記憶部４５０には、メタデータテーブル４５１が格納されている。メタデータテーブル４５１には、ディスクノードＩＤ、ディスクＩＤ、スライスＩＤ、状態、仮想ディスクＩＤ、セグメントＩＤ、仮想ディスクアドレス、ペアのディスクノードＩＤ、ペアのディスクＩＤ、ペアのスライスＩＤ、タイムスタンプ、および二重化状態の欄が設けられている。メタデータテーブル４５１内の横方向に並べられた情報が互いに関連付けられ、メタデータを示す１つのレコードを構成している。メタデータテーブル４５１の二重化状態以外の各欄に設定される情報は、図７に示したメタデータテーブル１５１の同名の欄と同種の情報である。
【０１８４】
二重化状態の欄には、対応するスライスの二重化状態が設定される。ペアとなったスライスとの間の二重化が保たれていれば「正常」、ペアとなったスライスとの間でデータのコピー処理中であれば「コピー中」と設定される。
【０１８５】
図１９は、仮想ディスクメタデータ記憶部のデータ構造例を示す図である。仮想ディスクメタデータ記憶部８１０には、仮想ディスクメタデータテーブル８１１が格納されている。仮想ディスクメタデータテーブル８１１には、ディスクノードＩＤ、ディスクＩＤ、スライスＩＤ、状態、仮想ディスクＩＤ、セグメントＩＤ、仮想ディスクアドレス、ペアのディスクノードＩＤ、ペアのディスクＩＤ、ペアのスライスＩＤ、タイムスタンプ、および二重化状態の欄が設けられている。仮想ディスクメタデータテーブル８１１内の横方向に並べられた情報が互いに関連付けられ、メタデータを示す１つのレコードを構成している。仮想ディスクメタデータテーブル８１１の各欄に設定される情報は、メタデータテーブル４５１の同名の欄と同種の情報である。
【０１８６】
図２０は、割り当て可否記憶部のデータ構造例を示す図である。割り当て可否記憶部８３０には、割り当て可否管理テーブル８３１が格納されている。割り当て可否管理テーブル８３１には、ディスクノードＩＤ、ディスクＩＤ、および可／不可の欄が設けられている。
【０１８７】
ディスクノードＩＤの欄には、ディスクノードを一意に識別するための識別情報（ディスクノードＩＤ）が設定される。ディスクＩＤの欄には、ディスクノードに接続されたストレージ装置の識別情報（ディスクＩＤ）が設定される。
【０１８８】
可／不可の欄には、各ストレージ装置のスライスをセグメントに割り当て可能か否かを示すフラグが設定される。割り当てが可能な場合、可／不可の欄には「可」の値が設定される。割り当てが不可能な場合、可／不可の欄には「不可」の値が設定される。
【０１８９】
このような構成のマルチノードストレージシステムにおいて、検査コマンドに対するストレージ装置からの応答が、Ｔ１経過しても返されない場合、以下のようなスライス切り替え処理が実行される。
【０１９０】
図２１は、ストレージ装置故障時のスライス切り替え処理の手順を示すシーケンス図である。図２１の例では、ディスクノード４００のディスクノードＩＤは「ＳＮ−Ａ」であり、ディスクノード４００ａのディスクノードＩＤは「ＳＮ−Ｃ」であり、ディスクノード４００ｂのディスクノードＩＤは「ＳＮ−Ｃ」であるものとする。ディスクノード４００ａ，４００ｂは、ディスクノード４００と同じ機能（図１７参照）を有している。
【０１９１】
なお、図２１に示すステップＳ８８〜Ｓ９５の処理は、それぞれ図１０に示したステップＳ１６〜Ｓ１９，Ｓ２１〜Ｓ２４と同じ処理である。そこで、図１０とは異なる処理について説明する。
【０１９２】
［ステップＳ８１］ディスクノード４００のＴ１／復帰検出部４３０は、定期的にストレージ装置４１０の動作確認を行う。その詳細は、ステップＳ１１の説明と同様である。Ｔ１／復帰検出部４３０は、動作確認により、Ｔ１の経過を検出すると、制御ノード８００に対してＴ１経過通知を送信する。Ｔ１経過通知には、ディスクノード４００のディスクノードＩＤとストレージ装置４１０のディスクＩＤとが含まれる。Ｔ１／復帰検出部４３０は、その後もストレージ装置４１０からの応答を待つ。
【０１９３】
制御ノード８００のストレージ状態管理部８４０は、Ｔ１経過通知を受信すると、ストレージ装置４１０の状態を切り替える。すなわち、ストレージ状態管理部８４０は、Ｔ１経過通知に示されるディスクノードＩＤとディスクＩＤとの組みに対応する情報を割り当て可否記憶部８３０から検索する。そして、ストレージ状態管理部８４０は、該当するストレージ装置に関する情報の可／不可の情報を「不可」に変更する。
【０１９４】
図２２は、割り当て可否更新後の割り当て可否記憶部の例を示す図である。図２２に示すように、ディスクノードＩＤ「ＳＮ−Ａ」とディスクＩＤ「１」との組に対応する状態が「不可」に変更されている。これにより、制御ノード８００では、以後、ディスクノード４００に接続されたストレージ装置４１０のスライスをセグメントに割り当てることができないことを認識する。
【０１９５】
図２１の説明に戻る。
［ステップＳ８２］割り当て可否の切り替えが完了すると、ストレージ状態管理部８４０は、切り替え完了応答をディスクノード４００に送信する。
【０１９６】
［ステップＳ８３］一方、アクセスノード６００のスライスアクセス要求部６３０は、ユーザによる端末装置２１，２２，２３への操作入力などに応じて仮想ディスク６０内のデータへのアクセスが発生すると、アクセス用メタデータ記憶部６２０を参照し、アクセス対象のデータを管理しているディスクノードを判断する。図２１の例では、ディスクノード４００が管理するスライスへのリードのアクセスが発生したものする。すると、スライスアクセス要求部６３０は、ディスクノード４００に対してアクセス対象データのリード要求を送信する。ディスクノード４００のスライスアクセス処理部４２０は、メタデータ記憶部４５０を参照して、アクセス対象スライスが自己の管理するストレージ装置４１０内のスライスであることを確認し、ストレージ装置４１０内の該当スライス内のデータを指定したリードアクセスを行う。
【０１９７】
図２１の例では、Ｔ１／復帰検出部４３０によるＴ１の経過が検出された後に、アクセスノード６００からのリード要求が出されている。この場合、ストレージ装置４１０は故障しているか、検査コマンドに対する応答が直ぐに返せない程の過負荷状態である。ストレージ装置４１０が故障していれば、ストレージ装置４１０へのアクセスはエラーになる。また、ストレージ装置４１０が過負荷状態であれば、高い頻度でデータアクセスもエラーとなる。図２１の例では、ストレージ装置４１０（ディスクノードＩＤ「ＳＮ−Ａ」）の故障により、ストレージ装置４１０（ディスクＩＤ「１」）の先頭のスライス（スライスＩＤ「１」）へのリード要求がエラーになっている。
【０１９８】
［ステップＳ８４］ディスクノード４００のスライスアクセス処理部４２０は、アクセスノード６００からのリード要求に対してエラーを応答する。すると、アクセスノード６００のスライスアクセス要求部６３０は、メタデータ照会部６１０に対してエラーの発生を通知する。このとき、スライスアクセス要求部６３０は、アクセスがエラーとなったセグメントに関する仮想ディスクＩＤとセグメントＩＤとについてもメタデータ照会部６１０に伝える。
【０１９９】
［ステップＳ８５］一方、ディスクノード４００のスライスアクセス処理部４２０は、リード要求に応じたストレージ装置４１０へのデータリードに失敗すると、被アクセススライス検出部４７０に対してエラーの発生を通知する。その際、アクセス対象となったストレージ装置のスライスを示すディスクＩＤとスライスＩＤとの組みが、被アクセススライス検出部４７０に渡される。
【０２００】
被アクセススライス検出部４７０は、エラーが発生したストレージ装置の状態を判断する。すなわち、被アクセススライス検出部４７０は、Ｔ１／復帰検出部４３０からストレージ装置４１０のＴ１の経過が検出されたことの通知を受けたがまだ復帰の通知を受けていないという第１の条件と、Ｔ２検出部４４０からストレージ装置４１０のＴ２の経過が検出されたことの通知を受けていないとう第２の条件とが共に満たされるか否かを判断する。条件が満たされていれば、被アクセススライス検出部４７０は、ストレージ装置４１０は故障の可能性がるものの、まだ故障であるとの判断は確定していない（ストレージ装置４１０全体のリカバリ処理は開始されていない）と判断する。そこで、条件が満たされていた場合、被アクセススライス検出部４７０は、アクセス対象となったスライスの状態を異常（Ｂａｄ）とするべき旨をスライス管理部４６０に通知する。すると、スライス管理部４６０は、メタデータ記憶部４５０内のアクセス対象となったスライスに対応するメタデータを検索し、状態を「Ｂ（Ｂａｄ）」（異常であることを示す）に変更する。さらに、スライス管理部４６０は、ストレージ装置４１０が復帰するのを待って、ストレージ装置４１０内のアクセス対象スライスに対応するメタデータの状態を「Ｂ」に変更する。
【０２０１】
さらに、被アクセススライス検出部４７０は、上記第１と第２の条件が満たされた場合、制御ノード８００に対してスライス異常通知を送信する。スライス異常通知には、アクセス対象となったストレージ装置のスライスを示すディスクＩＤとスライスＩＤとの組みが含められる。
【０２０２】
スライス異常通知を受け取った制御ノード８００では、スライス割り当て管理部８５０がアクセス対象となったスライスが割り当てられているセグメント（リカバリ対象セグメント）へのスライス再割り当て処理を行う。具体的には、スライス割り当て管理部８５０は、仮想ディスクメタデータ記憶部８１０を参照し、スライス異常通知で示されたスライス（異常スライス）がリカバリ対象セグメントのプライマリスライスかセカンダリスライスかを判断する。
【０２０３】
異常スライスがプライマリスライスであれば、スライス割り当て管理部８５０は、リカバリ対象セグメントの現在のプライマリスライスの状態を空きに変更し、セカンダリスライスをプライマリスライスに変更する。その後、スライス割り当て管理部８５０は、新たなプライマリスライスを管理するディスクノードとは別のディスクノードで管理されている空きスライスを、リカバリ対象セグメントのセカンダリスライスとして割り当てる。
【０２０４】
異常スライスがセカンダリスライスであれば、スライス割り当て管理部８５０は、リカバリ対象セグメントの現在のセカンダリスライスの状態を空きに変更する。その後、スライス割り当て管理部８５０は、現在のプライマリスライスを管理するディスクノードとは別のディスクノードで管理されている空きスライスを、リカバリ対象セグメントのセカンダリスライスとして割り当てる。
【０２０５】
ところで、図２１の例では、アクセスノード６００からのリード要求に起因してスライス異常通知が出力されている。リード要求はプライマリスライスに対してのみ行われるため、このとき検出される異常スライスはプライマリスライスである。セカンダリスライスが異常スライスとして検出されるのは、ライト要求が出された場合である。例えば、ディスクノード４００のストレージ装置４１０の動作が正常（検査コマンドにＴ１内に応答を返す）であるときに、アクセスノード６００からディスクノード４００にライト要求が出されると、ストレージ装置４１０内のスライスデータが書き込まれる。この際、二重化を維持するために、スライス管理部４６０によって、アクセス対象のスライスとペアを組んでいるセカンダリスライスにも同じデータが書き込まれる。セカンダリスライスへのデータの書き込みがエラーになると、セカンダリスライスを管理するディスクノードから制御ノード８００へスライス異常通知が出される。そして、スライス割り当て管理部８５０では、異常スライスがセカンダリスライスであると認識し、リカバリ対象セグメントへのセカンダリスライスの再割り当て処理を行う。
【０２０６】
スライス割り当て管理部８５０は、リカバリ対象セグメントのスライスの再割り当ての内容が確定すると、仮想ディスクメタデータ記憶部８１０の内容を更新する。
図２３は、更新後の仮想ディスクメタデータ記憶部の内容を示す図である。図２３に示すように、ディスクノードＩＤ「ＳＮ−Ａ」、ディスクＩＤ「１」、スライスＩＤ「１」で示されるスライスのメタデータは、状態が「Ｂ」に変更されている。なお、状態「Ｂ」は、対応するスライスが異常であることを示す。これにより、ストレージ装置４１０内のスライスの照会対象セグメント（セグメントＩＤ「１」）への割り当てが解除される。
【０２０７】
また、ディスクノードＩＤ「ＳＮ−Ｃ」、ディスクＩＤ「１」、スライスＩＤ「１」で示されるスライスのメタデータは、状態が「Ｐ」に変更されている。これにより、リカバリ対象セグメントに割り当てられていたスライスが、セカンダリスライスからプライマリスライスに変更される。
【０２０８】
さらに、ディスクノードＩＤ「ＳＮ−Ｂ」、ディスクＩＤ「１」、スライスＩＤ「２」で示されるスライスのメタデータは、状態が「Ｓ」に変更され、仮想ディスクＩＤに「ＶＬＯＸ−Ｘ」が設定され、セグメントＩＤに「１」が設定されている。これにより、リカバリ対象セグメントに対してセカンダリスライスが割り当てられる。
【０２０９】
また、状態等の内容が変更された各メタデータは、タイムスタンプが「ｔ（ｎ＋１）」に更新されている。「ｔ（ｎ＋１）」はメタデータの更新時刻である。
メタデータの更新が完了したことで、メタデータ検索部８２０は、リカバリ対象セグメントへのメタデータ照会要求があれば、リカバリ対象セグメントのリカバリ後の状態を示すメタデータをアクセスノード６００に提供可能となる。
【０２１０】
以下、図２１の説明に戻る。
［ステップＳ８６］メタデータ照会部６１０は、制御ノード８００に対してセグメントを指定したメタデータの照会要求を送信する。照会要求で指定されるセグメント（照会対象セグメント）は、エラーによりアクセスが失敗したセグメントである。
【０２１１】
［ステップＳ８７］制御ノード８００のメタデータ検索部８２０は、仮想ディスクメタデータ記憶部８１０を参照し、照会対象セグメントのプライマリスライスのメタデータをアクセスノード６００に通知する。
【０２１２】
一方、スライス割り当て管理部８５０は、メタデータ照会に対するメタデータ検索とは別プロセスで、リカバリ対象セグメントのリカバリ処理を続行している。すなわち、スライス割り当てに続けて、ステップＳ８８〜ステップＳ９１の処理が行われる。そして、ステップＳ９２においてアクセスノード６００がディスクノード４００ｂにリードリトライをすると、ステップＳ９３で目的のデータが応答される。また、ステップＳ９４でＴ２の経過が通知されると、ステップＳ９５でリカバリ処理が行われる。
【０２１３】
以上のようにして、Ｔ２の経過が検出される前に、アクセス対象のスライスが割り当てられたセグメントのみのリカバリ処理を行うことができる。しかも、ディスクノード４００からのスライス異常通知に基づいてセグメントのリカバリ処理が行われる。そのため、メタデータ照会要求に応じたメタデータ検索処理の実行を阻害せずに済み、システム全体の処理効率の低下を防止できる。
【０２１４】
次に、正常に動作しているストレージ装置４１０の負荷が一時的に過大であったため検査コマンドへの応答が遅れた場合のスライス切り替え処理について説明する。
図２４は、ストレージ装置の負荷が過大となったときのスライス切り替え処理の手順を示すシーケンス図である。この例では、ディスクノード４００に接続されたストレージ装置４１０の負荷が一時的に過大になったものとする。なお、図２４のステップＳ１０１〜ステップＳ１１３の処理は、それぞれ図２１のステップＳ８１〜Ｓ９３の処理と同じである。そこで、ステップＳ１１４以降の処理をステップ番号に沿って説明する。
【０２１５】
［ステップＳ１１４］ディスクノード４００のＴ１／復帰検出部４３０は、検査コマンドに対するストレージ装置４１０からの応答を受信する。これによりＴ１／復帰検出部４３０は、ストレージ装置４１０がアクセス可能な状態に復帰したことを検出する。すると、Ｔ１／復帰検出部４３０は、制御ノード８００に対してストレージ装置４１０の復帰通知を送信する。
【０２１６】
制御ノード８００のストレージ状態管理部８４０は、復帰通知を受け取ると、割り当て可否記憶部８３０内の復帰したストレージ装置の割り当て可否の情報を「可」に変更する。
【０２１７】
［ステップＳ１１５］ストレージ状態管理部８４０は、割り当て可否記憶部８３０の変更後、ディスクノード４００に対して、確認応答を送信する。
なお、第１の実施の形態では、ストレージ装置が復帰するとリカバリ処理を行ったセグメント（第１の実施の形態では「照会対象セグメント」）に割り当てられていたスライスを空き（Ｆｒｅｅ）状態に変更している。他方、第３の実施の形態では、Ｔ１経過後にアクセスがあったスライスは、アクセスがあった時点で状態を「Ｂ（Ｂａｄ）」に変更している。そのため、ストレージ装置が復帰しても、メタデータの変更処理は不要である。
【０２１８】
ところで、検査コマンドによるストレージ装置の故障診断は、すべてのディスクノード４００，４００ａ，４００ｂで行われている。図２１の例は、１つのストレージ装置においてのみＴ１の経過が検出された場合である。他方、２台のストレージ装置で同時にＴ１の経過が検出されることも有り得る。このときＴ１の経過が検出された２台のストレージ装置それぞれのスライスでスライスペアを構成するセグメントがある場合、両方のスライスの状態を異常状態（状態「Ｂ」）にしてしまうと、そのセグメントのデータを喪失してしまう。そこで、そのような場合には、後にＴ１の経過が検出されたディスクノードでは、スライス異常通知を行わないこととする。
【０２１９】
図２５は、複数のディスクでＴ１経過が検出されたときのスライス割り当て処理を示すシーケンス図である。この例では、ディスクノード４００に接続されたストレージ装置４１０が故障し、ディスクノード４００ｂに接続されたストレージ装置の負荷が一時的に過大になったものとする。なお、図２５のステップＳ１２１〜ステップＳ１３１の処理は、それぞれ図２１のステップＳ８１〜Ｓ９１の処理と同じである。そこで、ステップＳ１３２以降の処理をステップ番号に沿って説明する。
【０２２０】
［ステップＳ１３２］ディスクノード４００ｂは、定期的にストレージ装置のディスク診断を行う。ストレージ装置が正常に動作していれば、ストレージ装置からＴ１以内に応答が返される。図２５の例では、ステップＳ１３１の処理を実行するまではディスクノード４００ｂのストレージ装置は正常に動作していたが、メタデータを変更したことによるコピー処理が完了する前に、ストレージ装置が過負荷状態となったものとする。ストレージ装置が過負荷であることにより、ディスクノード４００ｂは検査コマンド発行後Ｔ１が経過しても、正常な応答が返されていない。そこで、ディスクノード４００ｂはＴ１を検出し、制御ノード８００に対してＴ１経過通知を送信する。
【０２２１】
Ｔ１経過通知を受信した制御ノード８００のストレージ状態管理部８４０は、Ｔ１経過通知を受信すると、ディスクノード４００ｂに接続されたストレージ装置の状態を割り当て「不可」に切り替える。
【０２２２】
［ステップＳ１３３］状態の切り替えが完了すると、ストレージ状態管理部８４０は、切り替え完了応答をディスクノード４００ｂに送信する。
［ステップＳ１３４］その後、アクセスノード６００のスライスアクセス要求部６３０は、メタデータの照会が完了すると、アクセス用メタデータ記憶部６２０を参照してアクセス対象のスライスを管理するディスクノードを判断し、そのディスクノードへリード要求（リードリトライ）を送信する。
【０２２３】
このときディスクノード４００ｂでは、まだＴ２の検出も復帰の検出もされていないものとする。この場合、ディスクノード４００ｂは、リード要求におけるアクセス対象のスライスの状態をメタデータに基づいて確認する。このとき参照されるメタデータは、図２３に示した仮想ディスクメタデータテーブル８１１内のディスクノードＩＤが「ＳＮ−Ｃ」である各メタデータと同じである。すると、該当するスライス（この例では、図２３に示されたディスクノードＩＤ「ＳＮ−Ｃ」、ディスクＩＤ「１」、スライスＩＤ「１」のスライス）は、ステップＳ１２９のメタデータ更新要求によってセカンダリスライスからプライマリスライスに変更されている。そして、該当するスライス内のデータが、ディスクノード４００ａ内のペアとなるセカンダリスライスにコピーされている最中である。
【０２２４】
ディスクノード４００ｂは、アクセス対象のスライスがコピー中であるため、スライス異常通知を行わず、データのリードができるようになるのを待つ。
［ステップＳ１３５］その後、ディスクノード４００のＴ２検出部４４０は、検査コマンド発行からＴ２が経過したことを検出する。そして、Ｔ２検出部４４０は、制御ノード８００に対してＴ２経過通知を送信する。
【０２２５】
［ステップＳ１３６］Ｔ２経過通知を受け取った制御ノード８００のスライス割り当て管理部８５０は、ストレージ装置４１０が故障により使用不可になったことを認識し、ストレージ装置４１０全体のリカバリ処理を開始する。
【０２２６】
［ステップＳ１３７］一方、ディスクノード４００ｂは、検査コマンドに対するストレージ装置からの応答を受信する。すると、ディスクノード４００ｂは、制御ノード８００に対してストレージ装置の復帰通知を送信する。
【０２２７】
［ステップＳ１３８］ストレージ状態管理部８４０は、割り当て可否記憶部８３０の変更後、ディスクノード４００ｂに対して、確認応答を送信する。
このように、ストレージ装置内のスライス内のデータのコピー中（二重化状態が復旧していない状態）の場合、ディスクノードは、当該ストレージ装置のＴ１経過を検出し、当該スライスへのアクセスがあってもリード処理を継続する。すなわち、ディスクノードは、アクセス対象のスライスの状態を「Ｂ（Ｂａｄ）」に変更したり、制御ノード８００にスライス異常通知を送信したりしない。これにより、二重化回復のためのコピー処理が完了する前に、プライマリスライスが異常として取り扱われることを防ぐことができる。その結果、データのロストが防止される。
【０２２８】
次に、ディスクノードにおけるディスク診断処理の詳細な手順を説明する。なお、以下の処理は、ディスクノード４００が行うものとして説明するが、他のディスクノード４００ａ，４００ｂも同様の処理を定期的に実行する。
【０２２９】
図２６は、ディスク診断処理の手順を示すフローチャートである。以下、図２６に示す処理をステップ番号に沿って説明する。なお、この処理は予め設定された間隔で定期的に実行される。
【０２３０】
［ステップＳ１５１］Ｔ１／復帰検出部４３０は、検査コマンドをストレージ装置４１０に対して出力する。このときＴ１／復帰検出部４３０は、検査コマンドの出力時刻を内部メモリに記憶する。
【０２３１】
［ステップＳ１５２］Ｔ１／復帰検出部４３０は、検査コマンドが発行されてからＴ１が経過したか否かを判断する。具体的には、Ｔ１／復帰検出部４３０は、現在の時刻から検査コマンドの出力時刻を減算し、減算結果がＴ１以上であれば、Ｔ１が経過したものと判断する。Ｔ１が経過した場合、処理がステップＳ１５５に進められる。Ｔ１が経過していなければ、処理がステップＳ１５３に進められる。
【０２３２】
［ステップＳ１５３］Ｔ１／復帰検出部４３０は、診断完了チェックを行う。具体的には、Ｔ１／復帰検出部４３０は、ストレージ装置４１０から正常応答が返信されたかどうかを検査する。
【０２３３】
［ステップＳ１５４］Ｔ１／復帰検出部４３０は、正常応答が返信された場合、処理を終了する。正常応答が返信されていなければ、処理がステップＳ１５２に進められる。
［ステップＳ１５５］Ｔ１／復帰検出部４３０は、検査コマンドの送信からＴ１が経過すると、Ｔ１経過通知を制御ノード８００に送信する。
【０２３４】
［ステップＳ１５６］ディスクノード４００内の複数の要素の連携処理により、Ｔ２／復帰検出処理が実行される。この処理の詳細は後述する。この処理が終了すると、ディスク診断処理が終了する。
【０２３５】
図２７は、Ｔ２／復帰検出処理の手順を示すフローチャートである。以下、図２７に示す処理をステップ番号に沿って説明する。
［ステップＳ１６１］Ｔ２検出部４４０は、検査コマンドが発行されてからＴ２が経過したか否かを判断する。具体的には、Ｔ２検出部４４０は、Ｔ１／復帰検出部４３０から検査コマンドの出力時刻を取得する。そして、Ｔ２検出部４４０は、現在時刻から検査コマンドの出力時刻を減算し、減算結果がＴ２以上であれば、Ｔ２が経過したものと判断する。Ｔ２が経過した場合、処理がステップＳ１６２に進められる。Ｔ２が経過していない場合、処理がステップＳ１６３に進められる。
【０２３６】
［ステップＳ１６２］Ｔ２検出部４４０は、Ｔ２経過通知を制御ノード８００に対して送信する。その後、Ｔ２／復帰検出処理が終了する。
［ステップＳ１６３］スライスアクセス処理部４２０は、ストレージ装置４１０に対するアクセス要求が入力されたか否かを判断する。アクセス要求が入力された場合、処理がステップＳ１６５に進められる。アクセス要求が入力されていなければ、処理がステップＳ１６４に進められる。
【０２３７】
［ステップＳ１６４］Ｔ１／復帰検出部４３０は、診断完了チェックを行う。具体的には、Ｔ１／復帰検出部４３０は、ストレージ装置４１０から正常応答が返信されたかどうかを検査する。その後、処理がステップＳ１７０に進められる。
【０２３８】
［ステップＳ１６５］スライスアクセス処理部４２０は、アクセス対象のスライスがコピー中か否かを判断する。具体的には、スライスアクセス処理部４２０は、メタデータ記憶部４５０を参照し、アクセス対象のスライスの二重化状態を確認する。二重化状態として「コピー中」と設定されていれば、該当するスライスはコピー中である。コピー中であれば、処理がステップＳ１６６に進められる。コピー中でなければ、処理がステップＳ１６７に進められる。
【０２３９】
［ステップＳ１６６］スライスアクセス処理部４２０は、アクセス要求に応じたストレージ装置４１０へのアクセス処理を行う。なお、このアクセス処理はストレージ装置４１０が復帰するまで成功しない。そのため、スライスアクセス処理部４２０は、ストレージ装置４１０が復帰するのを待ち、アクセス要求に応じたデータリードまたはデータライトを実行する。その後、処理がステップＳ１７０に進められる。
【０２４０】
［ステップＳ１６７］アクセス対象のスライスがコピー中ではない場合、スライスアクセス処理部４２０から被アクセススライス検出部４７０へ、ストレージ装置４１０内のスライスへのアクセス要求があったことを通知する。被アクセススライス検出部４７０は、ストレージ装置４１０のディスク診断処理において、検査コマンド発行からＴ１経過後、Ｔ２経過／復帰前であることを確認し、スライス管理部４６０へメタデータの変更要求を送信する。メタデータの変更要求に応じて、スライス管理部４６０は、メタデータ記憶部４５０内のアクセス対象のスライスのメタデータに対し、状態を「Ｂ（Ｂａｄ）」とする更新を行う。また、スライス管理部４６０は、ストレージ装置４１０が復帰した場合は、ストレージ装置４１０内のメタデータも同様に更新する。
【０２４１】
［ステップＳ１６８］被アクセススライス検出部４７０は、制御ノード８００に対してスライス異常通知を行う。
［ステップＳ１６９］スライスアクセス処理部４２０は、アクセスエラーをアクセスノード６００に送信する。その後、処理がステップＳ１７０に進められる。
【０２４２】
［ステップＳ１７０］Ｔ１／復帰検出部４３０は、正常応答が返信された場合、処理をステップＳ１７１に進める。正常応答が返信されていなければ、処理をステップＳ１６１に進める。
【０２４３】
［ステップＳ１７１］Ｔ１／復帰検出部４３０は、復帰通知を制御ノード８００に送信する。その後、Ｔ２／復帰検出処理が終了する。
このようにして、リカバリ中のセグメントに割り当てられているスライスを有するストレージ装置でＴ１が検出され、そのスライスに対するアクセス要求があっても、スライス異常通知が行われない。その結果、複数のストレージ装置において同時にＴ１経過が検出された場合でも、データが消失するのを防止できる。
【０２４４】
以上のように、第３の実施の形態では、ディスクノードからの異常通知に基づいてスライスの再割り当てを行うようにしたため、メタデータ照会に応じたメタデータ検索処理を遅延させずに済む。これにより、アクセスノードは、スライス再割り当てに伴うメタデータ変更に時間がかかったとしても、メタデータ照会に対する応答を迅速に受け取ることができる。その結果、複数のストレージ装置が同時に不調に陥った場合でも、アクセスノードからのデータアクセスを可能な限り滞らせずにすむ。
【０２４５】
また、第３の実施の形態においても第１、第２の実施の形態と同様に、アクセスを長い時間止めることを抑えつつ、故障検出時間「Ｔ２」を長く設定することができる。すなわち、ストレージ装置ごとに故障検出時間「Ｔ２」を調整しなくてもよいという利点を有する。
【０２４６】
なお、第３の実施の形態の割り当て可否記憶部８３０に代えて、第１の実施の形態におけるストレージ状態記憶部５３０を用いることもできる。その場合、ストレージ状態記憶部５３０において状態が「正常」とされたストレージ装置は「割り当て可能」、状態が「Ｔ１」のストレージ装置は「割り当て不可」と判断する。
【０２４７】
また、上記第１の実施の形態において、第３の実施の形態と同様にＴ１経過が検出されたストレージ装置内のスライスを、リカバリ処理における割当不可とすることもできる。
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、制御ノードやディスクノードが有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disc）などがある。
【０２４８】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０２４９】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０２５０】
なお、本発明は、上述の実施の形態にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変更を加えることができる。
以上説明した実施の形態の主な技術的特徴は、以下の付記の通りである。
【０２５１】
（付記１）  記憶領域が複数のスライスに分割して管理されている複数のストレージ装置に二重化して格納されたデータの管理処理をコンピュータに実行させるデータ管理プログラムであって、
前記コンピュータを、
前記複数のストレージ装置のうちの１つが故障中の可能性があることを示す動作不調情報を受け取ると、前記動作不調情報を動作不調情報記憶手段に格納する動作不調情報管理手段、
前記複数のストレージ装置のスライスをアクセス対象スライスとしてアクセス要求が出されたことを示すアクセス関連情報を受け取ると、前記動作不調情報記憶手段内の前記動作不調情報を参照して前記アクセス対象スライスが属する前記ストレージ装置が故障中である可能性の有無を判断し、故障の可能性がある場合、前記アクセス対象スライス内のデータと同じ内容の冗長データを格納する前記ストレージ装置へのデータ入出力機能を有するスライス管理手段へ、前記アクセス対象スライスに格納されていたデータのリカバリ処理を指示するリカバリ指示手段、
として機能させることを特徴とするデータ管理プログラム。
【０２５２】
（付記２）  前記動作不調情報は、故障中の可能性がある前記ストレージ装置が接続されたディスクノードから、ネットワークを介して送信されることを特徴とする付記１記載のデータ管理プログラム。
【０２５３】
（付記３）  前記アクセス関連情報は、ネットワークを介して前記複数のストレージ装置にアクセスを行うアクセスノードによる前記ストレージ装置内のスライスへのアクセスが失敗したときに、前記アクセスノードから送信されることを特徴とする付記１記載のデータ管理プログラム。
【０２５４】
（付記４）  前記リカバリ指示手段は、前記アクセスノードから前記アクセス関連情報を受け取ると、前記アクセスノードに対して前記冗長データの格納場所を通知することを特徴とする付記３記載のデータ管理プログラム。
【０２５５】
（付記５）  前記スライス管理手段は、前記コンピュータに対してネットワークを介して接続され、前記冗長データを格納する前記ストレージ装置が接続されたディスクノードの一機能であることを特徴とする付記１記載のデータ管理プログラム。
【０２５６】
（付記６）  前記コンピュータを、さらに、
複数のセグメントで構成される仮想ディスクが定義されており、異なるストレージ装置に属する２つの前記スライスが前記セグメントそれぞれに割り当てられており、前記複数のストレージ装置それぞれの前記スライスごとに設けられ、前記スライスと前記セグメントとの割り当て関係を示すメタデータを記憶する仮想ディスクメタデータ記憶手段として機能させ、
前記アクセス関連情報は、ネットワークを介して前記複数のストレージ装置にアクセスを行うアクセスノードによる前記ストレージ装置内のスライスへのアクセスが失敗したときに前記アクセスノードから送信される、アクセスに失敗したスライスが割り当てられているセグメントを照会対象セグメントとして指定した割り当て関係の照会要求であり、
前記リカバリ指示手段は、
前記仮想ディスクメタデータ記憶手段から、前記アクセス関連情報で指定された前記照会対象セグメントに割り当てられている２つの被割り当てスライスの前記メタデータを検索し、前記動作不調情報記憶手段を参照し、検索により得られた前記メタデータに基づいて前記被割り当てスライスが属する前記ストレージ装置が故障中である可能性の有無を判断するメタデータ検索手段と、
前記メタデータ検索手段が故障中の可能性があると判断された場合、故障中の可能性がある前記ストレージ装置に属する前記被割り当てスライスの前記照会対象セグメントへの割り当てを解除し、他の前記スライスを前記照会対象セグメントに新規に割り当てるスライス割り当て手段と、
を有することを特徴とする付記１記載のデータ管理プログラム。
【０２５７】
（付記７）  前記スライス割り当て手段は、前記照会対象セグメントへの新規のスライスの割り当てが完了すると、割り当て結果に応じて前記仮想ディスクメタデータ記憶手段内のメタデータを更新し、
前記メタデータ検索手段は、前記被割り当てスライスが属する前記ストレージ装置が故障中の可能性があると判断した場合、前記被割り当てスライスに代えて前記照会対象セグメントに対して新規のスライスの割り当てられるのを待ち、新規のスライスが割り当てられた後、前記照会対象セグメントに割り当てられたスライスのメタデータを前記仮想ディスクメタデータ記憶手段から取得し、前記アクセスノードに送信することを特徴とする付記６記載のデータ管理プログラム。
【０２５８】
（付記８）  前記スライス割り当て手段は、前記動作不調情報記憶手段を参照し、前記照会対象セグメントに新規に割り当てるスライスとして、前記動作不調情報で示されていない前記ストレージ装置のスライスから選択することを特徴とする付記６記載のデータ管理プログラム。
【０２５９】
（付記９）  前記リカバリ指示手段は、前記複数のストレージ装置のいずれか１つが故障したことを示す故障検出情報を受け取ると、故障したストレージ装置内の各データと同じ内容の冗長データを格納する前記ストレージ装置へのデータ入出力機能を有するスライス管理手段へ、前記故障したストレージ装置内のすべてのデータのリカバリ処理を指示する指示することを特徴とする付記１記載のデータ管理プログラム。
【０２６０】
（付記１０）  前記動作不調情報管理手段は、故障中の可能性があるとされていた前記ストレージ装置の正常動作が確認されたことを示す復帰情報を受け取ると、前記動作不調情報記憶手段から、正常動作が確認された前記ストレージ装置の前記動作不調情報を消去することを特徴とする付記１記載のデータ管理プログラム。
【０２６１】
（付記１１）  ストレージ装置が接続されると共に、前記ストレージ装置に格納するデータの管理を行う制御ノードにネットワーク経由で接続されたコンピュータに、前記ストレージ装置の動作診断処理を実行させるストレージ装置診断プログラムであって、
前記コンピュータを、
前記ストレージ装置に対して検査コマンドを発行し、前記検査コマンド発行から応答があるまでの経過時間を計測する応答時間計測手段、
前記経過時間が予め設定された動作不調検出時間に達しても応答がない場合、前記制御ノードに対して、前記ストレージ装置が故障中の可能性があることを示す動作不調情報を送信する動作不調検出手段、
前記動作不調情報を送信後に前記ストレージ装置から前記検査コマンドに対する応答が返されると、前記制御ノードに対して前記ストレージ装置の復帰を示す復帰情報を送信する復帰検出手段、
として機能させることを特徴とするストレージ装置診断プログラム。
【０２６２】
（付記１２）  前記コンピュータを、さらに、
前記経過時間が、前記動作不調検出時間よりも大きな値が予め設定された故障検出時間に達しても応答がない場合、前記制御ノードに対して前記ストレージ装置に関する故障検出情報を送信する故障検出手段、
として機能させることを特徴とする付記１１記載のストレージ装置診断プログラム。
【０２６３】
（付記１３）  前記コンピュータを、さらに、
前記動作不調情報送信後、前記復帰情報または前記故障検出情報送信前に前記ストレージ装置内のスライスへのアクセスがあると、アクセス対象スライスを指定したスライス異常通知を前記制御ノードに送信するスライス異常通知手段、
として機能させることを特徴とする付記１２記載のストレージ装置診断プログラム。
【０２６４】
（付記１４）  ストレージ装置が接続されると共に、前記ストレージ装置に格納するデータの管理を行う制御ノードにネットワーク経由で接続されたコンピュータに、前記ストレージ装置の動作診断処理を実行させるストレージ装置診断プログラムであって、
前記コンピュータを、
前記ストレージ装置に対して検査コマンドを発行し、前記検査コマンド発行から応答があるまでの経過時間を計測する応答時間計測手段、
前記経過時間が、予め設定された動作不調検出時間を超えた後、前記検査コマンドに対する応答取得前に前記ストレージ装置内のスライスへのアクセスがあると、アクセス対象スライスを指定したスライス異常通知を前記制御ノードに送信するスライス異常通知手段、
として機能させることを特徴とするストレージ装置診断プログラム。
【０２６５】
（付記１５）  データを二重化して管理するマルチノードストレージシステムであって、
記憶領域が複数のスライスに分割して管理されたストレージ装置に対して検査コマンドを発行し、前記検査コマンド発行から応答があるまでの経過時間を計測する応答時間計測手段と、
前記経過時間が予め設定された動作不調検出時間に達しても応答がない場合、制御ノードに対して前記ストレージ装置が故障中の可能性があることを示す動作不調情報を送信する動作不調検出手段と、
前記動作不調情報を送信後に前記ストレージ装置から前記検査コマンドに対する応答が返されると、前記制御ノードに対して前記ストレージ装置の復帰を示す復帰情報を送信する復帰検出手段と、
を具備する複数のディスクノードと、
前記ディスクノードの１つから前記動作不調情報を受け取ると、前記動作不調情報を動作不調情報記憶手段に格納する動作不調情報管理手段と、
前記複数のストレージ装置のスライスをアクセス対象スライスとしてアクセス要求が出されたことを示すアクセス関連情報を受け取ると、前記動作不調情報記憶手段内の前記動作不調情報を参照して前記アクセス対象スライスが属する前記ストレージ装置が故障中である可能性の有無を判断し、故障の可能性がある場合、前記アクセス対象スライス内のデータと同じ内容の冗長データを格納する前記ストレージ装置が接続された前記ディスクノードへ、前記アクセス対象スライスに格納されていたデータのリカバリ処理を指示するリカバリ指示手段と、
を具備する前記制御ノードと、
を有することを特徴とするマルチノードストレージシステム。
【図面の簡単な説明】
【０２６６】
【図１】実施の形態の概要を示す図である。
【図２】第１の形態のマルチノードストレージシステム構成例を示す図である。
【図３】第１の形態に用いる制御ノードのハードウェア構成例を示す図である。
【図４】仮想ディスクのデータ構造を示す図である。
【図５】マルチノードストレージシステムの各装置の機能を示すブロック図である。
【図６】ストレージ装置のデータ構造例を示す図である。
【図７】メタデータ記憶部のデータ構造例を示す図である。
【図８】仮想ディスクメタデータ記憶部のデータ構造例を示す図である。
【図９】ストレージ状態記憶部のデータ構造例を示す図である。
【図１０】ストレージ装置故障時のスライス切り替え処理の手順を示すシーケンス図である。
【図１１】状態変更後のストレージ状態記憶部の例を示す図である。
【図１２】更新後の仮想ディスクメタデータ記憶部の内容を示す図である。
【図１３】ストレージ装置の負荷が過大となったときのスライス切り替え処理の手順を示すシーケンス図である。
【図１４】タイムスタンプを用いた矛盾解消処理を示すシーケンス図である。
【図１５】再構成された仮想ディスクメタデータテーブルの例を示す図である。
【図１６】管理ノードからディスクノード切り離しを指示する場合の処理手順を示すシーケンス図である。
【図１７】第３の実施の形態におけるマルチノードストレージシステムの各装置の機能を示すブロック図である。
【図１８】メタデータ記憶部のデータ構造例を示す図である。
【図１９】仮想ディスクメタデータ記憶部のデータ構造例を示す図である。
【図２０】割り当て可否記憶部のデータ構造例を示す図である。
【図２１】ストレージ装置故障時のスライス切り替え処理の手順を示すシーケンス図である。
【図２２】割り当て可否更新後の割り当て可否記憶部の例を示す図である。
【図２３】更新後の仮想ディスクメタデータ記憶部の内容を示す図である。
【図２４】ストレージ装置の負荷が過大となったときのスライス切り替え処理の手順を示すシーケンス図である。
【図２５】複数のディスクでＴ１経過が検出されたときのスライス割り当て処理を示すシーケンス図である。
【図２６】ディスク診断処理の手順を示すフローチャートである。
【図２７】Ｔ２／復帰検出処理の手順を示すフローチャートである。
【符号の説明】
【０２６７】
１〜３  ストレージ装置
１ａ，２ａ，３ａ  スライス
４〜６  ディスクノード
４ａ  応答時間計測手段
４ｂ  動作不調検出手段
４ｃ  故障検出手段
４ｄ  復帰検出手段
５ａ，６ａ  スライス管理手段
７  制御ノード
７ａ  動作不調情報管理手段
７ｂ  動作不調情報記憶手段
７ｃ  リカバリ指示手段
８  アクセスノード
【図１】
2010097385.tif 000003
【図２】
2010097385.tif 000004
【図３】
2010097385.tif 000005
【図４】
2010097385.tif 000006
【図５】
2010097385.tif 000007
【図６】
2010097385.tif 000008
【図７】
2010097385.tif 000009
【図８】
2010097385.tif 000010
【図９】
2010097385.tif 000011
【図１０】
2010097385.tif 000012
【図１１】
2010097385.tif 000013
【図１２】
2010097385.tif 000014
【図１３】
2010097385.tif 000015
【図１４】
2010097385.tif 000016
【図１５】
2010097385.tif 000017
【図１６】
2010097385.tif 000018
【図１７】
2010097385.tif 000019
【図１８】
2010097385.tif 000020
【図１９】
2010097385.tif 000021
【図２０】
2010097385.tif 000022
【図２１】
2010097385.tif 000023
【図２２】
2010097385.tif 000024
【図２３】
2010097385.tif 000025
【図２４】
2010097385.tif 000026
【図２５】
2010097385.tif 000027
【図２６】
2010097385.tif 000028
【図２７】
2010097385.tif 000029