(57)【特許請求の範囲】
【請求項１】
複数のディスクと、
発生し得るエラーの種類毎に、前記複数のディスクについて、エラーの発生を示す情報を格納するエラー表と、
前記複数のディスク及びこれらへの読出し及び書込みの経路について、発生したエラーに応じた点数を格納する統計加点表と、
前記エラー表を予め定められた時間間隔で周期的に初期化すると共に、エラーが発生した場合、当該エラーの種類についての前記エラー表に当該エラーの発生を示す情報が格納されているか否かを判断し、前記情報が格納されていない場合、前記統計加点表において当該エラーが発生したディスクに第１の点数を加算すると共に当該エラーが発生したディスクへの経路に前記第１の点数より小さい第２の点数を加算し、かつ、当該エラーの種類についての前記エラー表に当該エラーが発生したディスクについてのエラーの発生を示す情報を格納し、前記情報が格納されている場合、前記統計加点表において当該エラーが発生したディスクに前記第１の点数を加算すると共に当該エラーが発生したディスクへの経路に前記第１の点数より大きい第３の点数を加算し、かつ、当該エラーの種類についての前記エラー表に当該エラーが発生したディスクについてのエラーの発生を示す情報を格納し、前記統計加点表においてその点数が予め定められた閾値を超えた経路又はディスクを、当該ディスクアレイ装置から切り離す制御部とを備える
ことを特徴とするディスクアレイ装置。
【請求項２】
前記制御部が、前記閾値を、前記経路について、前記ディスクについての前記閾値より小さい値とし、前記統計加点表においてその点数が前記小さい値の閾値を超えた経路を、当該ディスクアレイ装置から切り離す
ことを特徴とする請求項１に記載のディスクアレイ装置。
【請求項３】
前記ディスクへの経路の各々が、二重化された経路であり、
前記制御部が、前記ディスクを当該ディスクアレイ装置から切り離す場合、前記二重化された経路の各々を介して、前記切り離すべきとされたディスクに対して予め定められた同一の命令を発行して、前記二重化された経路を介しての前記切り離すべきとされたディスクからの前記命令に対する応答に基づいて、前記切り離すべきとされたディスクを当該ディスクアレイ装置から切り離すか否かを決定する
ことを特徴とする請求項１に記載のディスクアレイ装置。
【請求項４】
複数のディスクと、発生し得るエラーの種類毎に、前記複数のディスクについて、エラーの発生を示す情報を格納するエラー表と、前記複数のディスク及びこれらへの読出し及び書込みの経路について、発生したエラーに応じた点数を格納する統計加点表と、前記エラー表と統計加点表とに基づいて所定の経路又はディスクを当該ディスクアレイ装置から切り離す制御部とを備えるディスクアレイ装置の制御方法であって、
前記制御部が、
前記エラー表を予め定められた時間間隔で周期的に初期化し、
エラーが発生した場合、当該エラーの種類についての前記エラー表に当該エラーの発生を示す情報が格納されているか否かを判断し、
前記情報が格納されていない場合、前記統計加点表において当該エラーが発生したディスクに第１の点数を加算すると共に当該エラーが発生したディスクへの経路に前記第１の点数より小さい第２の点数を加算し、かつ、当該エラーの種類についての前記エラー表に当該エラーが発生したディスクについてのエラーの発生を示す情報を格納し、
前記情報が格納されている場合、前記統計加点表において当該エラーが発生したディスクに前記第１の点数を加算すると共に当該エラーが発生したディスクへの経路に前記第１の点数より大きい第３の点数を加算し、かつ、当該エラーの種類についての前記エラー表に当該エラーが発生したディスクについてのエラーの発生を示す情報を格納し、
前記統計加点表においてその点数が予め定められた閾値を超えた経路又はディスクを、当該ディスクアレイ装置から切り離す
ことを特徴とするディスクアレイ制御方法。
【請求項５】
発生し得るエラーの種類毎に、複数のディスクについて、エラーの発生を示す情報を格納するエラー表と、
前記複数のディスク及びこれらへの読出し及び書込みの経路について、発生したエラーに応じた点数を格納する統計加点表と、
前記エラー表を予め定められた時間間隔で周期的に初期化すると共に、エラーが発生した場合、当該エラーの種類についての前記エラー表に当該エラーの発生を示す情報が格納されているか否かを判断し、前記情報が格納されていない場合、前記統計加点表において当該エラーが発生したディスクに第１の点数を加算すると共に当該エラーが発生したディスクへの経路に前記第１の点数より小さい第２の点数を加算し、かつ、当該エラーの種類についての前記エラー表に当該エラーが発生したディスクについてのエラーの発生を示す情報を格納し、前記情報が格納されている場合、前記統計加点表において当該エラーが発生したディスクに前記第１の点数を加算すると共に当該エラーが発生したディスクへの経路に前記第１の点数より大きい第３の点数を加算し、かつ、当該エラーの種類についての前記エラー表に当該エラーが発生したディスクについてのエラーの発生を示す情報を格納し、前記統計加点表においてその点数が予め定められた閾値を超えた経路又はディスクを、当該ディスクアレイ装置から切り離す制御部とを備える
ことを特徴とするディスクアレイ制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ディスクアレイ装置、ディスクアレイ制御方法及びディスクアレイ制御装置に関し、特に、ディスク異常に見える経路異常が発生した場合に、その異常経路を正しく縮退させることができるディスクアレイ装置、ディスクアレイ制御方法及びディスクアレイ制御装置に関するものである。
【背景技術】
【０００２】
記憶装置において、切り離し可能な部位毎に障害検出回数をカウントし、その結果を用いた統計的分析により故障発生部位の判定及び切り離しを行う技術が提案されている（特許文献１参照）。
【０００３】
また、アレイディスク制御装置において、障害の発生時に、管理テーブルの値を増加させ、その値が閾値を上回った場合に、当該インタフェースを切り離す技術が提案されている（特許文献２参照）。
【０００４】
また、ディスクアレイ装置において、障害の発生時に、部品の障害ポイントを減点して、そのポイントがポイント基準値を下回った場合に、当該部品を縮退する技術が提案されている（特許文献３参照）。
【特許文献１】特開平１１−２９６３１１号公報
【特許文献２】特開平１０−２７５０６０号公報
【特許文献３】特開２００４−２５２６９２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明者は、図７に示すディスクアレイ装置について、単にディスクD00 〜D2B のみならず、複数の経路P1〜P7についても、統計加点処理を行って縮退させることを検討した。しかし、ディスク及び経路の双方について統計加点処理による縮退を行う場合、以下のような問題があることを発見した。
【０００６】
即ち、このようなディスクアレイ装置において、コントローラモジュールCM#0に内蔵される制御部RoC#0 とスイッチ部BE Exp（SAS スイッチ）間の経路P1（又はP2）に異常が発生したとする。この場合、ディスクD00 〜D2B のいずれにアクセスしても、制御部RoC#0 からはSAS エラータイムアウトに見える。SAS エラータイムアウトは、通常、ディスク異常の場合に返るエラーである。このため、制御部RoC#0 は、アクセスしたディスクが異常と判断して統計加点を行い、その点数が閾値を超えた場合（SAS エラータイムアウトが４回発生した場合に相当する）に、当該ディスクを縮退させる。縮退させたディスクは、保守を行なわない限り、再び使用することができない。
【０００７】
以下、図７のディスクアレイ装置における、経路異常又はディスク異常を縮退させる処理を、図８〜図１０に従って説明する。
【０００８】
今、制御部RoC#0 とスイッチ部BE Exp#0との間の経路P1が異常であるとする。これに起因して、制御部RoC#0 からは、複数のディスクD00 〜D2B において、同一のSAS エラータイムアウトが発生したように見える。例えば、説明の簡単化のために、制御部RoC#0 から、ディスクD19 、D05 、D20 、D19 、D05 、D20 、D19 、D05 、D20 、D19 において、この順にエラーが発生したように見えたとする。なお、「D19 」において数字19は当該ディスクのIDを示す（他についても同じ）。
【０００９】
図８（Ａ）に示すように、ディスクアレイ装置の初期状態においては、統計加点表２５における全ての経路及びディスクの点数が「０」とされる。統計加点表２５において、経路及びディスクの点数が「２５５」を越えると、当該経路又はディスクは切り離される（縮退される）。
【００１０】
最初に、制御部RoC#0 からディスクD19 へのアクセスにおいて、制御部RoC#0 が、SAS エラータイムアウトを検出する。これに応じて、制御部RoC#0 は、統計加点表２５において、制御部RoC#0 から当該ディスクD19 までの経路である経路P1及びP4に「１０」を加算し、当該ディスクD19 に「８０」を加算する。SAS エラータイムアウトは、前述のように、ディスク異常の場合に返るエラーであるので、当該ディスクに対して当該経路よりも十分に高い点数を加える。具体的には、ディスクの点数を経路の点数の数倍（この場合は８倍）を加える。これにより、図８（Ｂ）に示すように、更新された統計加点表２５が得られる。なお、これらにおいて、加算された部分に下線を付して示す（以下、図８（Ｃ）〜図１０において同じ）。
【００１１】
この後、制御部RoC#0 が、更新された統計加点表２５をチェックして、切り離すべき、即ち、「２５５」以上の点数を持つ経路又はディスクが存在するか否かを調べる。この場合、切り離すべき経路又はディスクが存在しないので、制御部RoC#0 は、これ以後のディスクへのアクセスを通常通りに実行する。
【００１２】
この後、以上と同様にして、複数のディスクへのアクセスが繰り返され、その都度、当該経路に「１０」が加算され、当該ディスクに「８０」が加算される。これにより、図８（Ｃ）〜図１０（Ｃ）に示すように、順次、統計加点表２５が更新され、その都度、「２５５」以上の点数を持つ経路又はディスクが存在するか否かが調べられる。
【００１３】
即ち、統計加点表２５は、ディスクD05 へのアクセスにより図８（Ｃ）に示すように、ディスクD20 へのアクセスにより図８（Ｄ）に示すように、ディスクD19 へのアクセスにより図９（Ａ）に示すように、ディスクD05 へのアクセスにより図９（Ｂ）に示すように、ディスクD20 へのアクセスにより図９（Ｃ）に示すように、ディスクD19 へのアクセスにより図９（Ｄ）に示すように、ディスクD05 へのアクセスにより図１０（Ａ）に示すように、ディスクD20 へのアクセスにより図１０（Ｂ）に示すように、ディスクD19 へのアクセスにより図１０（Ｃ）に示すように、順次、更新される。
【００１４】
制御部RoC#0 が図１０（Ｃ）の統計加点表２５をチェックすると、ディスクD19 の点数が「２５５」を越えているので、制御部RoC#0 は、このディスクD19 を当該ディスクアレイ装置から切り離す（縮退させる）。
【００１５】
以上から判るように、相当回数のディスクD へのアクセスを経ても、本来の異常個所である制御部RoC#0 とスイッチ部BE Exp#0との間の経路P1を切り離すことができない。その一方で、正常なディスクD19 が切り離されてしまう。
【００１６】
更に、ディスクD19 が切り離された後も、統計加点表２５の点数はそのままであるので、その後も他の正常なディスクが切り離されてしまう。例えば、図１０（Ｃ）の状態の後、ディスクD05 へのアクセスがあると、正常なディスクD05 は切り離されてしまう。ディスクD20 についても同様である。従って、ディスクD へのアクセスを繰り返すうちに、全てのディスクD について同じエラーが発生し、複数の正常なディスクD が縮退されてしまう。この結果、RAID閉塞となってしまい、ホストコンピュータ１の入出力処理が実行できず、ジョブ異常となってしまう。
【００１７】
本来であれば、制御部CM#0を縮退させ、ホストコンピュータ１から制御部CM#1の経路を経由したリトライを行ない、制御部CM#1から当該ディスクD へアクセスし、入出力処理を続行させることが望ましい。このためには、ディスク異常ではない場合には、ディスクD の縮退を起こすことなく、正しい異常個所（又は、被疑箇所）を縮退させることが望ましい。
【００１８】
本発明は、ディスクへのアクセス時にディスクが異常であるかのように見えるエラーが発生した場合に、正しい異常箇所を縮退させることができるディスクアレイ装置を提供することを目的とする。
【００１９】
また、本発明は、ディスクアレイ装置において、ディスクへのアクセス時にディスクが異常であるかのように見えるエラーが発生した場合に、正しい異常箇所を縮退させることができるディスクアレイ制御方法を提供することを目的とする。
【００２０】
また、本発明は、ディスクアレイ装置において、ディスクへのアクセス時にディスクが異常であるかのように見えるエラーが発生した場合に、正しい異常箇所を縮退させることができるディスクアレイ制御装置を提供することを目的とする。
【課題を解決するための手段】
【００２１】
このディスクアレイ装置は、複数のディスクと、エラー表と、統計加点表と、制御部とを備える。エラー表は、発生し得るエラーの種類毎に、前記複数のディスクについて、エラーの発生を示す情報を格納する。統計加点表は、前記複数のディスク及びこれらへの読出し及び書込みの経路について、発生したエラーに応じた点数を格納する。制御部は、前記エラー表を予め定められた時間間隔で周期的に初期化すると共に、エラーが発生した場合、当該エラーの種類についての前記エラー表に当該エラーの発生を示す情報が格納されているか否かを判断し、前記情報が格納されていない場合、前記統計加点表において当該エラーが発生したディスクに第１の点数を加算すると共に当該エラーが発生したディスクへの経路に前記第１の点数より小さい第２の点数を加算し、かつ、当該エラーの種類についての前記エラー表に当該エラーが発生したディスクについてのエラーの発生を示す情報を格納し、前記情報が格納されている場合、前記統計加点表において当該エラーが発生したディスクに前記第１の点数を加算すると共に当該エラーが発生したディスクへの経路に前記第１の点数より大きい第３の点数を加算し、かつ、当該エラーの種類についての前記エラー表に当該エラーが発生したディスクについてのエラーの発生を示す情報を格納し、前記統計加点表においてその点数が予め定められた閾値を超えた経路又はディスクを、当該ディスクアレイ装置から切り離す。
【００２２】
好ましくは、このディスクアレイ装置の一実施態様によれば、前記制御部が、前記閾値を、前記経路について、前記ディスクについての前記閾値より小さい値とし、前記統計加点表においてその点数が前記小さい値の閾値を超えた経路を、当該ディスクアレイ装置から切り離す。
【００２３】
好ましくは、このディスクアレイ装置の一実施態様によれば、前記ディスクへの経路の各々が、二重化された経路であり、前記制御部が、前記ディスクを当該ディスクアレイ装置から切り離す場合、前記二重化された経路の各々を介して、前記切り離すべきとされたディスクに対して予め定められた同一の命令を発行して、前記二重化された経路を介しての前記切り離すべきとされたディスクからの前記命令に対する応答に基づいて、前記切り離すべきとされたディスクを当該ディスクアレイ装置から切り離すか否かを決定する。
【００２４】
このディスクアレイ装置の制御方法は、複数のディスクと、発生し得るエラーの種類毎に、前記複数のディスクについて、エラーの発生を示す情報を格納するエラー表と、前記複数のディスク及びこれらへの読出し及び書込みの経路について、発生したエラーに応じた点数を格納する統計加点表と、前記エラー表と統計加点表とに基づいて所定の経路又はディスクを当該ディスクアレイ装置から切り離す制御部とを備えるディスクアレイ装置の制御方法である。このディスクアレイ装置の制御方法において、前記制御部が、前記エラー表を予め定められた時間間隔で周期的に初期化し、エラーが発生した場合、当該エラーの種類についての前記エラー表に当該エラーの発生を示す情報が格納されているか否かを判断し、前記情報が格納されていない場合、前記統計加点表において当該エラーが発生したディスクに第１の点数を加算すると共に当該エラーが発生したディスクへの経路に前記第１の点数より小さい第２の点数を加算し、かつ、当該エラーの種類についての前記エラー表に当該エラーが発生したディスクについてのエラーの発生を示す情報を格納し、前記情報が格納されている場合、前記統計加点表において当該エラーが発生したディスクに前記第１の点数を加算すると共に当該エラーが発生したディスクへの経路に前記第１の点数より大きい第３の点数を加算し、かつ、当該エラーの種類についての前記エラー表に当該エラーが発生したディスクについてのエラーの発生を示す情報を格納し、前記統計加点表においてその点数が予め定められた閾値を超えた経路又はディスクを、当該ディスクアレイ装置から切り離す。
【００２５】
このディスクアレイ制御装置は、エラー表と、統計加点表と、制御部とを備える。エラー表は、発生し得るエラーの種類毎に、前記複数のディスクについて、エラーの発生を示す情報を格納する。統計加点表は、前記複数のディスク及びこれらへの読出し及び書込みの経路について、発生したエラーに応じた点数を格納する。制御部は、前記エラー表を予め定められた時間間隔で周期的に初期化すると共に、当該エラーの種類についての前記エラー表に当該エラーの発生を示す情報が格納されているか否かを判断し、前記情報が格納されていない場合、前記統計加点表において当該エラーが発生したディスクに第１の点数を加算すると共に当該エラーが発生したディスクへの経路に前記第１の点数より小さい第２の点数を加算し、かつ、当該エラーの種類についての前記エラー表に当該エラーが発生したディスクについてのエラーの発生を示す情報を格納し、前記情報が格納されている場合、前記統計加点表において当該エラーが発生したディスクに前記第１の点数を加算すると共に当該エラーが発生したディスクへの経路に前記第１の点数より大きい第３の点数を加算し、かつ、当該エラーの種類についての前記エラー表に当該エラーが発生したディスクについてのエラーの発生を示す情報を格納し、前記統計加点表においてその点数が予め定められた閾値を超えた経路又はディスクを、当該ディスクアレイ装置から切り離す。
【発明の効果】
【００２６】
このディスクアレイ装置、ディスクアレイ制御方法及びディスクアレイ制御装置によれば、あるエラーが発生した場合において、これと同一種類のエラーが未だ発生していない場合、エラーが発生した（と推定される）ディスク（エラーディスク）への経路に第２の点数が加算される。同一種類のエラーが既に発生している場合、前記経路に第３の点数が加算される。即ち、異常が発生していると考えられる経路へ加算される点数が、一時的に変更される（大きくされる）。具体的には、当該経路への加点は、異常が発生していない場合、エラーディスクへの加点である第１の点数より小さく、異常が発生している場合、第１の点数より大きくされる。そして、その点数が予め定められた閾値を超えた経路又はディスクが、当該ディスクアレイ装置から切り離される。
【００２７】
これにより、ディスクへの多数回のアクセスが繰り返される前に、正常なディスクを切り離すことなく、本来の異常個所である異常経路を、ディスクアレイ装置から切り離すことができる（縮退させることができる）。また、ディスクへの多数回のアクセスが繰り返されても、他の正常なディスクが切り離されてしまうことを防止することができる。更に、エラーが発生した（ように見えた）ディスクへ他の経路からアクセスして（リトライして）、入出力処理を続行させることができる。以上から、ディスクへのアクセスを繰り返すうちに、全てのディスクについて同じエラーが発生し、複数の正常なディスクが縮退されてしまうことを防止することができ、RAID閉塞によりホストコンピュータの入出力処理の実行が停止してジョブ異常となることを防止することができる。
【００２８】
このディスクアレイ装置の一実施態様によれば、経路についての閾値がディスクについての閾値より小さくされる。これにより、経路の異常がある場合に、より早く異常経路をディスクアレイ装置から切り離すことができる。
【００２９】
このディスクアレイ装置の一実施態様によれば、ディスクを当該ディスクアレイ装置から切り離す場合、切り離すべきとされたディスクに対して発行された命令に対する応答に基づいて、ディスクを当該ディスクアレイ装置から切り離すか否かが決定される。これにより、経路の異常がある場合に、切り離すべきとされたディスクを切り離すことを防止して、結果として、異常経路をディスクアレイ装置から切り離すことができる。
【発明を実施するための最良の形態】
【００３０】
図１は、この例のディスクアレイ装置の構成の一例を示す図である。ディスクアレイ装置（RAID装置）は、ホストコンピュータ（HOST）１に接続され、制御装置（コントロールエンクロージャ：CE）２と、ディスクエンクロージャ（DE）３とを備える。ディスクエンクロージャ３は、複数個設けられ、制御装置２に直列に接続される。このディスクアレイ装置は、後述するように、その書込み及び読出しの経路が二重化されている。
【００３１】
ホストコンピュータ１は、周知のように、ホストバスアダプタ（HBA ）１１により、ディスクアレイ装置にデータの書込み及び読出しを依頼する（要求する）。ホストバスアダプタは、例えばチャネル制御装置からなる。この例のホストコンピュータ１は、例えば４個のホストバスアダプタ１１を備え、書込み及び読出しの経路を二重化する。例えば、ホストバスアダプタHBA#0 及びHBA#2 は偶数のIDを持つディスクD への書込み及び読出しを行い、そのために、コントローラモジュールCM#0に接続される。ホストバスアダプタHBA#1 及びHBA#3 は奇数のIDを持つディスクD への書込み及び読出しを行い、そのために、コントローラモジュールCM#1に接続される。
【００３２】
なお、個々のホストバスアダプタHBA#0 等を区別する場合、「HBA#0 」等のように表す。他についても同様である。
【００３３】
制御装置２は、このディスクアレイ装置の全体を制御するディスクアレイ制御装置であり、２個のコントローラモジュール（CM）２０と複数のディスクD00〜D0Bとを備える。２個のコントローラモジュール２０により、全てのディスクD へのデータの書込み及び読出しの経路が二重化される。
【００３４】
コントローラモジュール２０は、各々、２個のチャネルアダプタ（AC）２１と、制御部（RoC ）２２と、スイッチ部（BE Exp）２３とを備える。制御部２２は、各々、エラー表２４と、経路／ディスク統計加点表（以下、統計加点表）２５とを備える。２個のチャネルアダプタ２１により、ホストコンピュータ１からコントローラモジュール２０へのデータの書込み及び読出しの経路が二重化される。
【００３５】
即ち、コントローラモジュールCM#0の２個のチャネルアダプタCAが、ホストバスアダプタHBA#0 及びHBA#2 に接続される。また、コントローラモジュールCM#1の２個のチャネルアダプタCAが、ホストバスアダプタHBA#1 及びHBA#3 に接続される。これにより、ホストコンピュータ１と制御部RoC#0 及びRoC#1 との間の経路が、前述のように、二重化（実際には、四重化）される。
【００３６】
制御装置２は、実際には、１個のディスクエンクロージャ３（DE#0）を含む。このディスクエンクロージャDE#0は、直列に接続されるディスクエンクロージャ３の先頭に接続される。２個のスイッチ部（BE Exp）２３と複数のディスクD00 〜D0B とが、制御装置２内のディスクエンクロージャ３（DE#0）を構成する。このディスクエンクロージャ３（DE#0）のみが、２個のスイッチ部（BE Exp）２３の間を接続する経路P3を備える。この点を除いて、ディスクエンクロージャDE#0はディスクエンクロージャDE#0等と同様の構成を備え、また、スイッチ部２３はスイッチ部３０と同様の構成を備え、例えばSAS （Serial Attached SCSI）スイッチからなる。
【００３７】
ディスクエンクロージャ３は、２個のスイッチ部３０（Exp ）と、これらの間を接続する経路（DE内経路）と、このDE内経路に接続された複数のディスク（例えば、磁気ディスク装置）とを備える。スイッチ部３０は、例えばSAS スイッチからなる。２個のスイッチ部３０により、ディスクエンクロージャ３内におけるディスクD へのデータの書込み及び読出しの経路が二重化される。
【００３８】
２個のスイッチ部３０は、各々、他のディスクエンクロージャ３における対応するスイッチ部３０と接続される。例えば、スイッチ部BE Exp#0はスイッチ部EXP#10と接続され、スイッチ部EXP#10はスイッチ部EXP#20と接続される。これにより、前述のように、複数のディスクエンクロージャ３は直列に接続される。
【００３９】
ディスクエンクロージャ３において、図面の簡単化のために、例えば「D00 」等の記号が、１個のディスクD を表す。ディスクD00 は、例えばID=00 のディスクである。ディスクD のIDは、ディスクD の識別情報であり、当該ディスクアレイ装置において一意に定まる。ディスクD のID「00」において、上位桁は当該ディスクD の属するディスクエンクロージャ３の順番（識別情報）を表し、下位桁は当該ディスクD の当該ディスクエンクロージャ３における順番（識別情報）を表す。
【００４０】
この例では、１個のディスクエンクロージャ３には例えば１２個のディスクD が設けられる。また、この例では、例えば１０個のディスクエンクロージャ３が設けられる。従って、この例のディスクアレイ装置は１２０個のディスクD を備える。なお、図１は、図面の簡単化のために、３個のディスクエンクロージャ３のみを示す。ディスクD は、例えばハードディスクドライブからなる。この例のハードディスクドライブは、SAS インタフェースを備える。
【００４１】
なお、ハードディスクドライブが、他のインタフェース、例えばSATA（Serial ATA）又はFC（Fibre Channel）を備えるものであっても良い。この場合、エラーの種類がSAS エラータイムアウトではない他の種類のエラーとなるので、各々のインタフェースで規定されているエラーの種類に応じて、エラー表２４が構成される。また、スイッチ部２３及び３０も、当該インタフェースで規定されているスイッチング等を行うスイッチ部に変更される。
【００４２】
また、ディスクD が、ハードディスクドライブ以外の不揮発性記憶装置、例えば不揮発性半導体メモリ（フラッシュメモリ等）を用いた半導体ディスクであっても良い。即ち、ディスクD は円盤状の記憶媒体を備えるものには限られない。
【００４３】
例えば、ホストコンピュータ１のホストバスアダプタ１１が、チャネルアダプタ２１を介して、制御部２２にデータの書込み又は読出しを依頼する。これに応じて、制御部２２は、当該データを格納すべき又は格納されているディスクD にアクセスして、当該データの書込み又は読出しを行う。このアクセス時、当該ディスクD に応じて、その書込み又は読出しの経路も定まる。
【００４４】
このようにディスクD にアクセスした場合、制御部２２は、周知のように、ディスクD からの応答を監視して、当該ディスクアクセスにおけるエラーの発生を検出する。そして、制御部２２は、エラーが発生した場合、当該エラーの種類についてのエラー表（当該エラー表という）２４を参照して、当該エラー表２４に当該エラーの発生を示す情報が格納されているか否かを判断する。即ち、当該エラーの種類（同一の種類）のエラーが、いずれかのディスクD （当該エラーの発生したディスクD を含む、以下同じ）において、既に発生しているか否かを調べる。
【００４５】
図２（Ａ）はエラー表２４の構成を示す。エラー表２４は、複数のディスクにおいて、同一のエラーが発生しているか否かを判断するためのものである。このため、エラー表２４は、発生し得るエラーの種類毎に、複数のディスクD について、エラーの発生を示す情報を格納する。従って、エラー表２４は、当該ディスクアレイ装置において起こり得るエラーの種類ｎ毎に設けられる。エラーの種類は約３０種類ある。従って、例えばエラーの種類が３０であれば、ｎ=30 である。
【００４６】
エラーの種類としては、例えば以下のようなものがある。即ち、ディスクに発生した何らかのエラーである「SAS エラータイムアウト」、フレーム転送中に発生した何らかのエラーである「Request Completed With Error」、データオーバーランが発生した場合のエラーである「Data Overrun」、タイムアウトが発生した場合のエラーである「Command Timeout 」、データアンダーランが発生した場合のエラーである「Data Underrun 」、指定されたポートが使用出来ない場合のエラーである「Port Unavailable」等である。
【００４７】
エラー表２４は、各々、全てのディスクについて、各々のエラーの発生を示す情報（エラー情報）を格納可能なビットマップからなる。即ち、ディスクアレイ装置が１０個のエンクロージャを備えるので、エラー表２４は、各々、１０個のエントリを備える。１個のエントリが１個のディスクエンクロージャ３に対応する。１個のディスクのエラー情報が１ビットで管理される。即ち、あるディスクD にエラーが発生した場合、当該ディスクD に対応するビットが「０」から「１」とされる。
【００４８】
１個のエントリのビットマップは、１６桁の２進数（ｂ）又は４桁の１６進数（ｈ）で表される。１個のエントリのビットマップにおいて、先頭のビットから順に、スロットSlot#0等に対応する。スロットSlot#0は１個のディスクD#X0に対応する。ここで、「X 」は当該ディスクエンクロージャ３のIDである。先頭から１２ビットが各々のディスクD に対応する。残りの４ビットは予備のビットである（使用されない）。これにより、エラー表２４は、起こり得るエラーの種類毎に、全てのディスクD について当該エラーの発生の有無を示すことができる。
【００４９】
また、制御部２２は、エラー表２４を所定の時間間隔で周期的に初期化する。即ち、全てのビットを「０」とする。所定の時間間隔は、例えば５秒とされ、経験的に予め定められる。従って、エラー表２４は、発生し得るエラーの種類毎に、当該エラーが最初に発生していずれかのビットが「１」とされてから５秒を経過すると、初期化される。
【００５０】
これにより、制御部２２は、当該初期化の後に同一の種類のエラーが発生したとしても、通常時の加点処理（後述する）を行う。従って、統計加点表２５において、縮退されなかったディスクD （及び経路）の点数はそのまま残り加点が続行されるので、ディスクD に異常がある場合には、正しく当該ディスクD を縮退させることができる。
【００５１】
なお、この初期化処理において、制御部２２が、統計加点表２５において、縮退された経路及びディスクの点数を「０」とするようにしても良い。
【００５２】
当該エラー表２４に当該エラーの発生を示す情報が格納されていない場合、制御部２２は、同一種類のエラーは未だ発生していないと判断し、通常時の加点処理を行う。即ち、制御部２２は、統計加点表２５において、当該エラーが発生したディスクD （以下、エラーディスクD という）に第１の点数を加算すると共に、当該エラーディスクD への経路に、第１の点数より小さい第２の点数を加算する。更に、制御部２２は、当該エラーの種類についてのエラー表２４に、当該エラーディスクD についてのエラーの発生を示す情報を格納する。即ち、当該ディスクD に対応するビットを「１」とする（以下同じ）。
【００５３】
当該エラー表２４に当該エラーの発生を示す情報が格納されている場合、制御部２２は、同一種類のエラーは既に発生していると判断し、異常時の加点処理を行う。即ち、制御部２２は、統計加点表２５において、当該エラーディスクD に第１の点数を加算すると共に、当該エラーディスクD への経路（加算すべき経路）に、第１の点数より大きい第３の点数を加算する。制御部２２は、当該加算に先立って、加算すべき経路を抽出する。更に、制御部２２は、当該エラーについてのエラー表２４に、当該エラーディスクD についてのエラーの発生を示す情報を格納する。
【００５４】
図２（Ｂ）は統計加点表２５の構成を示す。統計加点表２５は、複数のディスク及びこれらへの読出し及び書込みの経路について、発生したエラーに応じた点数を格納する。統計加点表２５は、経路部２５１とディスク部２５２とを備える。なお、図３以降においては、両者を一体として示している。
【００５５】
経路部２５１は、当該ディスクアレイ装置における全ての経路について、当該経路毎に、当該経路において発生した（と推定される）エラーに応じた点数（統計加点）を格納する。例えば、経路P1について、点数「１０」を格納する。ディスク部２５２は、当該ディスクアレイ装置が備える全てのディスクD について、当該ディスクD 毎に、当該ディスクD において発生した（と推定される）エラーに応じた点数（統計加点）を格納する。例えば、ディスクD00 について、点数「０」を格納する。
【００５６】
第１及び第２の点数は、通常時の加点であり、閾値（後述する）が定まると、これに応じて経験により予め定められる。この時、第１の点数が第２の点数より十分に大きくされる。これは、種々の要因に依るが、SAS エラータイムアウトが本来はディスク異常を示すエラーであるので第１の点数の方が大きくされ、その比率は、例えば当該ディスクアレイ装置における経路故障とディスク故障の比率に依存して定まる。例えば、閾値が「２５５」である場合、第１の点数は「８０（閾値の約１／３）」とされ、第２の点数は「１０（閾値の約１／２５）」とされる。
【００５７】
加算すべき経路は、制御部２２から当該エラーディスクまでの経路と、制御部２２から当該エラーと同一のエラーの発生したいずれかのディスクまでの経路とを比較して、重なる経路である。
【００５８】
第３の点数は、異常時の加点であり、第１の点数が定まると、これに基づいて経験により予め定められる。第３の点数は、第１の点数より十分に大きくされ、例えば、第１の点数「８０」の１．５倍の「１２０」とされる。これは、当該エラーと同一のエラーが既に発生しているので、ディスクに異常が発生している確率よりも経路に異常が発生している確率が高いためである。これにより、経路異常をより早く検出することができる。
【００５９】
以上のように、異常時の加点処理は、経路へ加算する点数を、「１０」から「１２０」へと一時的に大きくして加算する処理である。これにより、複数のディスクD においてエラーが発生している場合には、当該ディスクに至る経路が異常であると判断し、当該経路を縮退させることができ、かつ、特定のディスクD でのみエラーが発生している場合には、ディスクが異常（不良）であると判断し、当該ディスクD を縮退させることができる。
【００６０】
この後、制御部２２は、統計加点表２５を調べて、統計加点表２５において、その点数が予め定められた閾値を超えた経路又はディスクを抽出し、これを当該ディスクアレイ装置から切り離す。このように、制御部２２は、エラー表２４と統計加点表２５とに基づいて、所定の経路又はディスクを当該ディスクアレイ装置から切り離すことができる。
【００６１】
以上により、このディスクアレイ装置においては、ディスクアクセスにおいて、同一の種類のエラーが発生した場合、統計加点表２５への加点が、ディスク（の切り離し）より経路（の切り離し）に寄与するようにされる。これにより、ディスクより経路を優先的に切り離すことができる。従って、当該ディスクへ他の経路（ホストコンピュータ１経由又は他の内部経路) でのリトライを行うことができ、複数のディスクD の切り離しによるAID 閉塞を防止して、ホストコンピュータ１の入出力命令を続行することができる。
【００６２】
以下、図１のディスクアレイ装置において、ディスク異常に見える経路異常を正しく縮退させる処理を、図３〜図５に従って説明する。なお、この例では、制御部RoC#0 が処理を行うが、制御部RoC#1 についても同様である。また、この例では、経路P1の異常が検出されるが、他の経路P2等についても同様である。
【００６３】
今、制御部RoC#0 とスイッチ部BE Exp#0との間（経路P1）が異常であるとする。この異常に起因して、制御部RoC#0 からは、複数のディスクD において、同一のエラー（SAS エラータイムアウト）が発生したように見える（認識される）。説明の簡単化のために、例えば、制御部RoC#0 が、ID= １９のディスクD19(DE#1/Slot#9)、ID= ０５のディスクD05(DE#0/Slot#5)、ID= ２０のディスクD20(DE#2/Slot#0)の３個のディスクに、この順に、アクセスするとする。この場合、制御部RoC#0 からは、当該３個のディスクにおいて、この順に、エラーが発生したように見える。
【００６４】
図３（Ａ）に示すように、ディスクアレイ装置の初期状態においては、SAS エラータイムアウトについてのエラー表２４における全てのビットは「０」とされ、統計加点表２５における全ての経路及びディスクの点数も「０」とされる。統計加点表２５において、経路及びディスクの点数が「２５５」を越えると、当該経路又はディスクは切り離される（縮退される）。即ち、「２５５」が経路及びディスクの切り離しの閾値である。閾値はディスクの切り離し（又は縮退）処理における閾値である。
【００６５】
なお、図３〜図５において、エラー表２４については、SAS エラータイムアウトについてのエラー表２４のみを示す。
【００６６】
最初に、制御部RoC#0 からディスクD19 へのアクセスにおいて、制御部RoC#0 が、SAS エラータイムアウトを検出する。実際には、経路P1が異常であり、ディスクD19は異常ではない。しかし、制御部RoC#0 は、ディスクD19 においてSAS エラータイムアウトが発生したように認識する。この時点では、制御部RoC#0 は、経路P1が異常であることを検出できない。
【００６７】
SAS エラータイムアウトの検出に応じて、制御部RoC#0 は、図３（Ａ）のSAS エラータイムアウトについてのエラー表２４（以下、単にエラー表２４と言う）をチェックし、当該ディスクD19 以外のディスクにおいて当該エラーと同一のエラーが発生しているか否かを調べる。これにより、この時点では、全てのビットが「０」であるので、制御部RoC#0 は、いずれかのディスクにおいて当該エラーと同一のエラーは発生していないと判断する。
【００６８】
そこで、制御部RoC#0 は、エラー表２４について所定の処理を行い、統計加点表２５について通常時（異常を検出しない場合）の処理を行なう。即ち、エラー表２４において、当該ディスクD19 のビットが「１」とされる。また、統計加点表２５において、当該ディスクD19 に第１の点数「８０」が加算される。また、制御部RoC#0 から当該ディスクD19 までの経路において加算すべき経路が求められ、統計加点表２５において、これらに第２の点数「１０」が加算される。
【００６９】
この場合における加算すべき経路は、当該エラーと同一のエラーは発生していないので、制御部RoC#0 から当該ディスクD19 までの経路「P1」及び経路「P4」である。
【００７０】
これにより、図３（Ｂ）に示すように、更新されたエラー表２４及び統計加点表２５が得られる。なお、これらにおいて、加算された部分に下線を付して示す（以下、図４〜図５において同じ）。
【００７１】
この後、制御部RoC#0 が、更新された統計加点表２５をチェックして、切り離すべき経路又はディスクが存在するか否かを調べる。即ち、統計加点表２５において、「２５５」以上の点数を持つ経路又はディスクが存在するか否かが調べられる。この場合、切り離すべき経路又はディスクが存在しないので、制御部RoC#0 は、これ以後のディスクへのアクセスを通常通りに実行する。
【００７２】
次に、制御部RoC#0 からディスクD05 へのアクセスにおいて、制御部RoC#0 が、SAS エラータイムアウトを検出する。これに応じて、制御部RoC#0 は、エラー表２４（図３（Ｂ））をチェックし、当該ディスクD05 以外のディスクにおいて当該エラーと同一のエラーが発生しているか否かを調べる。これにより、制御部RoC#0 は、この時点で、他のディスクD19 のビットが「１」であるので、当該ディスクD19 において当該エラーと同一のエラーが発生していると判断する。
【００７３】
そこで、制御部RoC#0 は、エラー表２４について所定の処理を行い、統計加点表２５について異常時（異常を検出しない場合）の処理を行なう。即ち、エラー表２４において、当該ディスクD05 のビットが「１」とされる。また、統計加点表２５において、制御部RoC#0 から当該ディスクD05 までの経路において加算すべき経路が求められ、これらに第３の点数が加算され、当該ディスクD05 に第１の点数（「８０」）が加算される。
【００７４】
ここで、加算すべき経路は、ディスクD05 までの経路と他のディスクD19 までの経路とを比較して重なる経路であるので、経路「P1」である。
【００７５】
これにより、図４（Ａ）に示すように、更新されたエラー表２４及び統計加点表２５が得られる。この後、制御部RoC#0 が、更新された統計加点表２５をチェックして、切り離すべき経路又はディスクが存在しないと判断して、これ以後のディスクへのアクセスを通常通りに実行する。
【００７６】
次に、制御部RoC#0 からディスクD20 へのアクセスにおいて、制御部RoC#0 が、SAS エラータイムアウトを検出する。これに応じて、制御部RoC#0 は、エラー表２４（図４（Ａ））をチェックし、当該ディスクD05 において当該エラーと同一のエラーが発生していると判断する。なお、制御部RoC#0 は、エラー表２４の先頭（ディスクD00 ）から順にチェックするので、ディスクD19 より先にディスクD05 のビット「１」を検出し、この検出の時点でエラー表２４のチェックを終了する。
【００７７】
制御部RoC#0 は、エラー表２４について所定の処理を行い、統計加点表２５について異常時の処理を行なう。即ち、エラー表２４において、当該ディスクD20 のビットが「１」とされる。また、統計加点表２５において、制御部RoC#0 から当該ディスクD05 までの経路において加算すべき経路「P1」が求められ、これに第３の点数「１２０」が加算され、当該ディスクD20 に第１の点数「８０」が加算される。
【００７８】
これにより、図４（Ｂ）に示すように、更新されたエラー表２４及び統計加点表２５が得られる。この後、制御部RoC#0 が、更新された統計加点表２５をチェックして、切り離すべき経路又はディスクが存在しないと判断して、これ以後のディスクへのアクセスを通常通りに実行する。
【００７９】
次に、制御部RoC#0 からディスクD19 へのアクセスにおいて、制御部RoC#0 が、SAS エラータイムアウトを検出する。これに応じて、制御部RoC#0 は、エラー表２４（図４（Ｂ））をチェックし、当該ディスクD05 において当該エラーと同一のエラーが発生していると判断する。
【００８０】
制御部RoC#0 は、エラー表２４について所定の処理を行い、統計加点表２５について異常時の処理を行なう。即ち、エラー表２４において、当該ディスクD19 のビットが「１」とされる。なお、実際には、当該ビットの「１」を新たな値「１」で上書きするので、変更されない。また、統計加点表２５において、制御部RoC#0 から当該ディスクD19 までの経路において加算すべき経路「P1」が求められ、これに第３の点数「１２０」が加算され、当該ディスクD19 に第１の点数「８０」が加算される。
【００８１】
これにより、図５に示すように、更新されたエラー表２４及び統計加点表２５が得られる。この後、制御部RoC#0 が、更新された統計加点表２５をチェックして、切り離すべき経路又はディスクが存在するか否かを調べる。この場合、統計加点表２５において、制御部RoC#0 とスイッチ部BE Exp#0との間の経路P1の点数「３７０」が閾値「２５５」を越えていることが検出される。そこで、制御部RoC#0 は、本来の故障箇所（正しくは被疑箇所）は経路「P1」と判断する。
【００８２】
制御部RoC#0 は、当該経路P1及びこれに接続されたスイッチ部BE Exp#0を、周知の手段により、当該ディスクアレイ装置から論理的に切り離す（縮退させる）。これにより、制御部RoC#0 は、本来の故障箇所を正常に切り離すことができたものと判断する。
【００８３】
以上の図３〜図５に示す処理と図８〜図１０に示す処理との比較から、以下のことがわかる。
【００８４】
即ち、図３〜図５に示す処理によれば、本来の故障箇所である制御部RoC#0 とスイッチ部BE Exp#0との間の経路P1を正しく検出することができるのに対し、図８〜図１０に示す処理によれば多数回のディスクへのアクセスを経ても、なお、経路P1を正しく検出することができないことに加えて、本来正常なディスクを縮退させてしまうという不都合を生じる。従って、図３〜図５に示す処理の方が正しく本来の故障箇所を検出することができ、かつ、ディスクの不要な縮退を生じることを防止することができる。
【００８５】
また、本来の故障箇所である経路P1を検出するまでに、図３〜図５に示す処理によればディスクへのアクセスが４回で済む。これに対し、図８〜図１０に示す処理によれば１０回のアクセスを経ても、当該経路P1を検出できない。従って、図３〜図５に示す処理の方がより早く本来の故障箇所を検出することができる。
【００８６】
以上、ディスクアレイ装置を、その実施の形態に基づいて説明したが、このディスクアレイ装置は、その主旨の範囲内で種々変形することができる。
【００８７】
例えば、図１の例においては経路への点数の加算を「８０」から一時的に「１２０」に大きくしたが、これに代えて（又は、これに加えて）、経路の点数の閾値を「２５５」から一時的により小さい点数、例えば「２００」にするようにしても良い。即ち、制御部２２が、閾値を、経路について、ディスクについての閾値より小さい値とし、経路／ディスク統計加点表２５においてその点数が小さい値の閾値を超えた経路を、当該ディスクアレイ装置から切り離す。
【００８８】
具体的には、制御部２２（例えば制御部RoC#0 ）は、エラー表２４をチェックして、当該エラーと同一のエラーが発生していると判断した場合に、当該エラーについての閾値を「２５５」から小さい値「２００」とする。この場合、ディスクの点数の閾値は「２５５」のままとする。これにより、ディスクの異常検出は通常通り行うことができると共に、より早く、例えば統計加点表２５が図４（Ｂ）のように更新された（点数が「２５０」となった）時点で、当該経路P1及びこれに接続されたスイッチ部BE Exp#0を、縮退させることができる。
【００８９】
また、図１の例においては経路及びディスクの点数が閾値を超えた場合に当該経路及びディスクを切り離すが、更に、ディスクの切り離し処理に先立って、そのディスクを切り離すか否かを判断する最終判断処理を実行するようにしても良い。即ち、制御部２２が、ディスクを当該ディスクアレイ装置から切り離す場合、切り離すべきとされたディスクに対して予め定められた命令を発行して、この命令に対する応答に基づいて、ディスクを当該ディスクアレイ装置から切り離すか否かを決定する。
【００９０】
具体的には、制御部２０（例えば制御部RoC#0 ）が、あるディスクの点数が閾値を超えて当該切り離しの前に、当該ディスクが接続されているスイッチ部BE Expに対して複数のI/O(Test Unit Ready)命令を発行する。I/O(Test Unit Ready)命令は、各々のディスクへの経路が二重化されていることを利用して、２個発行される。例えば、ディスクD19 の点数が閾値を越えた場合、制御部RoC#0 が、I/O(Test Unit Ready)命令を、経路P1及び経路P4（経路Ａ）を介してスイッチ部BE Exp（EXP#10) に対して発行し、かつ、経路P1、経路P3及び経路P5（経路Ｂ）を介してスイッチ部BE Exp（EXP#11) に対して発行する。制御部RoC#0 は、２個のI/O(Test Unit Ready)命令に対する応答に基づいて、図６に示すように、ディスクの切り離しを行うか否かを判断する。
【００９１】
パターン１の場合、経路Ａ及び経路Ｂを介して２個の命令が共に正常に返信されたのであるから、ディスク、経路Ａ及び経路Ｂには異常が無い。従って、制御部RoC#0 は、当該ディスクを切り離す。パターン２の場合、経路Ａについては正常に返信されたのであるから、ディスク、経路Ａには異常が無い。従って、制御部RoC#0 は、当該ディスクを切り離すことなく、経路Ａを構成せず経路Ｂを構成する経路P3及びP5に点数「１２０」を加算する。パターン３の場合、パターン２とは逆であるので、制御部RoC#0 は、当該ディスクを切り離すことなく、経路Ｂを構成せず経路Ａを構成する経路P1及びP4に点数「１２０」を加算する。パターン４の場合、２個の命令の返信が異常であるから、ディスクではなく、経路Ａ及び経路Ｂに共通の経路P1が異常である確率が高い。従って、制御部RoC#0 は、当該ディスクを切り離すことなく、経路P1に点数「１２０」を加算する。
【００９２】
これにより、ディスクの異常検出は通常通り行うことができると共に、所定の命令を発行し応答を待つ必要はあるが、より早く、かつ、正確に、当該経路P1及びこれに接続されたスイッチ部BE Exp#0を、縮退させることができる。
【００９３】
以上説明したように、このディスクアレイ装置、ディスクアレイ制御方法及びディスクアレイ制御装置によれば、同一種類のエラーが既に発生している場合、異常が発生していると考えられる経路へ加算される点数を一時的に大きくすることにより、正常なディスクを切り離すことなく、本来の異常個所である異常経路を、ディスクアレイ装置から切り離すことができ、他の正常なディスクが切り離されることを防止することができる。これにより、エラーが発生した（ように見えた）ディスクへ他の経路からアクセスして（リトライして）、入出力処理を続行させることができる。この結果、ディスクへのアクセスを繰り返すうちに複数の正常なディスクが縮退されてRAID閉塞を引き起こし、ホストコンピュータの入出力処理の実行が停止してジョブ異常となることを防止することができる。
【図面の簡単な説明】
【００９４】
【図１】本発明のディスクアレイ装置の構成の一例を示す図である。
【図２】エラー表及び統計加点表の説明図である。
【図３】図１のディスクアレイ装置の経路異常検出の説明図である。
【図４】図１のディスクアレイ装置の経路異常検出の説明図である。
【図５】図１のディスクアレイ装置の経路異常検出の説明図である。
【図６】図１のディスクアレイ装置の経路異常検出の説明図である。
【図７】本発明者の検討したディスクアレイ装置の構成図である。
【図８】図７のディスクアレイ装置の経路異常検出の説明図である。
【図９】図７のディスクアレイ装置の経路異常検出の説明図である。
【図１０】図７のディスクアレイ装置の経路異常検出の説明図である。
【符号の説明】
【００９５】
１  ホストコンピュータ（HOST）
２  制御装置（CE）
３  ディスクエンクロージャ（DE）
１１  ホストバスアダプタ（HBA ）
２０  コントローラモジュール（CM）
２１  チャネルアダプタ（AC）
２２  制御部（RoC ）
２３  スイッチ部（BE Exp）
２４  エラー表
２５  経路／ディスク統計加点表
３０  スイッチ部（Exp ）
【図１】
0004542163.tif 000002
【図２】
0004542163.tif 000003
【図３】
0004542163.tif 000004
【図４】
0004542163.tif 000005
【図５】
0004542163.tif 000006
【図６】
0004542163.tif 000007
【図７】
0004542163.tif 000008
【図８】
0004542163.tif 000009
【図９】
0004542163.tif 000010
【図１０】
0004542163.tif 000011