(57)【特許請求の範囲】
【請求項１】
複数のメディアドライブと、
前記複数のメディアドライブの各々に対してリードコマンドを発行することができるコントローラと
を備え、
前記コントローラが、
（Ａ）複数のデータブロックを指定した第一リードコマンドを或るメディアドライブに発行し、
（Ｂ）前記第一リードコマンドについてのタイムアウトを検出した場合、前記第一リードコマンドが指定する前記複数のデータブロックに含まれる一部のデータブロックを指定した第二リードコマンドを生成して、前記第二リードコマンドを前記或るメディアドライブに発行し、
（Ｃ１）前記第一リードコマンドのタイムアウト検出時に発行された、前記一部のデータブロックに対する前記第二リードコマンドについてのタイムアウトを検出することなく、前記一部のデータブロックを受信した場合、前記第二リードコマンドを一回以上前記或るメディアドライブに対して発行することにより、前記第一リードコマンドで指定された前記複数のデータブロックを前記或るメディアドライブから読み出し、
（Ｃ２）前記第一リードコマンドのタイムアウト検出時に発行された、前記一部のデータブロックに対する前記第二リードコマンドについてのタイムアウトを検出した場合、前記或るメディアドライブを閉塞する、
ことを特徴とするストレージシステム。
【請求項２】
前記或るメディアドライブは、リードコマンドで指定されたデータブロックの読出し時間長の制限に関わるパラメータの値を変更不可能に有するメディアドライブである、
請求項１記載のストレージシステム。
【請求項３】
前記或るメディアドライブは、ＳＡＴＡの規格に従うインタフェースを有するハードディスクドライブである、
請求項２記載のストレージシステム。
【請求項４】
前記一部のデータブロックを構成するデータブロックの数は、リードコマンドが発行されてからタイムアウトとなるまでの時間長を、前記或るメディアドライブ内での一つのデータブロックの読出し最大時間長で除算して得られる商の値以下である、
請求項１乃至３のうちのいずれか１項に記載のストレージシステム。
【請求項５】
前記コントローラは、前記第一リードコマンドについてタイムアウトが検出された後の一回目の第二リードコマンドで指定するデータブロックの数よりも、二回目以降の第二リードコマンドで指定するデータブロックの数を多くする、
請求項１乃至４のうちのいずれか１項に記載のストレージシステム。
【請求項６】
前記複数のメディアドライブには、スペア用のメディアドライブが含まれており、
前記コントローラは、前記第二リードコマンドを一回以上発行することにより前記複数のデータブロックを読み出した場合、前記複数のデータブロックを書込み対象としたライトコマンドを、前記スペア用のメディアドライブに発行する、
請求項１乃至５のうちのいずれか１項に記載のストレージシステム。
【請求項７】
前記コントローラは、前記第二リードコマンドを一回以上発行することにより前記複数のデータブロックを読み出した場合、前記複数のデータブロックを前記或るメディアドライブに上書きするためのライトコマンドを、前記或るメディアドライブに発行する、
請求項１乃至６のうちのいずれか１項に記載のストレージシステム。
【請求項８】
前記コントローラは、前記或るメディアドライブに対して前記第二リードコマンドを発行した場合、前記或るメディアドライブに関する表示を行い、且つ、前記第二リードコマンドについてタイムアウトが生じていないか或いは閉塞させたかに応じて、表示態様を違える、
請求項１乃至７のうちのいずれか１項に記載のストレージシステム。
【請求項９】
前記コントローラは、前記或るメディアドライブに対して前記第一リードコマンドを複数回送信することができ、前記複数回の送信において、タイムアウトを所定回数検出した場合には、前記或るメディアドライブを閉塞する、
請求項１乃至８のうちのいずれか１項に記載のストレージシステム。
【請求項１０】
（Ａ）複数のデータブロックを指定した第一リードコマンドを或るメディアドライブに発行し、
（Ｂ）前記第一リードコマンドについてのタイムアウトを検出した場合、前記第一リードコマンドが指定する前記複数のデータブロックに含まれる一部のデータブロックを指定した第二リードコマンドを生成して、前記第二リードコマンドを前記或るメディアドライブに発行し、
（Ｃ１）前記第一リードコマンドのタイムアウト検出時に発行された、前記一部のデータブロックに対する前記第二リードコマンドについてのタイムアウトを検出することなく、前記一部のデータブロックを受信した場合、前記第二リードコマンドを一回以上前記或るメディアドライブに対して発行することにより、前記第一リードコマンドで指定された前記複数のデータブロックを前記或るメディアドライブから読み出し、
（Ｃ２）前記第一リードコマンドのタイムアウト検出時に発行された、前記一部のデータブロックに対する前記第二リードコマンドについてのタイムアウトを検出した場合、前記或るメディアドライブを閉塞する、
ことを特徴とする記憶制御方法。
【請求項１１】
ＳＡＴＡの規格に従うインタフェースを有したＳＡＴＡ−ＨＤＤを含んだ複数のＨＤＤと、
前記複数のＨＤＤの各々に対してリードコマンドを発行することができるコントローラと
を備え、
前記コントローラが、
（Ａ）複数のデータブロックを指定した第一リードコマンドを前記ＳＡＴＡ−ＨＤＤに発行し、
（Ｂ）前記第一リードコマンドについてのタイムアウトを検出した場合、前記第一リードコマンドが指定する前記複数のデータブロックに含まれる一部のデータブロックを指定した第二リードコマンドを生成して、前記第二リードコマンドを前記ＳＡＴＡ−ＨＤＤに発行し、
（Ｃ１）前記第一リードコマンドのタイムアウト検出時に発行された、前記一部のデータブロックに対する前記第二リードコマンドについてのタイムアウトを検出することなく、前記一部のデータブロックを受信した場合、前記第二リードコマンドを一回以上前記ＳＡＴＡ−ＨＤＤに対して発行することにより、前記第一リードコマンドで指定された前記複数のデータブロックを前記ＳＡＴＡ−ＨＤＤから読み出し、前記ＳＡＴＡ−ＨＤＤから読み出された前記複数のデータブロックを書込み対象としたライトコマンドを、スペア用のＨＤＤ及び／又は前記ＳＡＴＡ−ＨＤＤに発行し、
（Ｃ２）前記第一リードコマンドのタイムアウト検出時に発行された、前記一部のデータブロックに対する前記第二リードコマンドについてのタイムアウトを検出した場合、又は、前記第一リードコマンドについてタイムアウトを所定回数検出した場合に、前記ＳＡＴＡ−ＨＤＤを閉塞する、
ストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶制御技術に関する。
【背景技術】
【０００２】
例えば、データセンタ等のような大規模なデータを取り扱うデータベースシステムでは、ホストコンピュータとは別に構成されたストレージシステムを用いてデータを管理する。このストレージシステムは、例えば、多数のメディアドライブをアレイ状に配設して構成されたRAID（Redundant Array of Independent Inexpensive Disks）のようなディスクアレイシステムである。ストレージシステムに搭載されるメディアドライブとして、例えば、ＳＡＴＡ（Serial ATA）の規格に従うインターフェースを有するハードディスクドライブ（以下、ＳＡＴＡ−ＨＤＤ）を採用することが考えられている（例えば特許文献１）。
【０００３】
【特許文献１】特開２００４−３４８８７６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、ＨＤＤには、一般に、ハードディスクと、ハードディスクに対するデータのアクセスを制御する制御部（例えば制御基板や記録ヘッド）とが備えられる。制御部は、データブロック群が指定されたリードコマンドを受け、そのデータブロック群を構成する各データブロック毎に、データブロックを読み出すための読出し処理を行うことで、それらデータブロック群を読み出すことができる。もし、或るデータブロックについて、読出し処理を行っても、そのデータブロックを読み出せなければ、制御部は、同一のデータブロックを読み出すための読出し処理を再度行うこと（つまり、読出しリトライを行うこと）で、一回の読出し処理では読み出せなかったデータブロックの読み出しを試みる。
【０００５】
ＨＤＤの状態によっては、リードコマンドで指定された複数のデータブロックを読み出すために、読出しリトライを頻繁に行う場合が生じ、故に、それら複数のデータブロックの読出しに要する時間が長くなるかもしれない。
【０００６】
その読出し時間長が長くなりすぎないようにするための方法として、読出し時間長を制限する方法が考えられる。ＨＤＤは、一般に、そのＨＤＤに設定されている種々のパラメータに基づいて動作する。ＨＤＤの種類によっては、そのパラメータとして、読出し時間長の制限に関わるパラメータ（以下、制限パラメータ）があり、且つ、その制限パラメータの値を変更することができるものがある。制限パラメータとしては、例えば、リトライ時間、及び／又は、リトライ回数がある。リトライ時間とは、例えば、一データブロックの読出しリトライに要する時間長、又は、データブロック群の読出しの際に行われる一回以上の読出しリトライのトータル時間長である。リトライ回数とは、例えば、同一のデータブロックに対する読出しリトライの最大回数、又は、データブロック群の読出しの際に行える読出しリトライの最大回数である。
【０００７】
制限パラメータの値が変更可能なＨＤＤとして、例えば、ファイバチャネルの規格に従うインターフェースを有したＨＤＤ（以下、ＦＣ−ＨＤＤ）がある。ＦＣ−ＨＤＤの制御部は、リードコマンドで指定されている複数のデータブロックを、そのＦＣ−ＨＤＤに設定されている制限パラメータの値に従って読み出すことができなければ、エラー（例えばタイムアウト）とすることができる。
【０００８】
このような事態は、ハードディスク上の或る領域から読出しを行う場合だけに生じるのかもしれないし、そうではなく、多くの領域から読出しを行う場合にも生じるかもしれない。後者の場合であれば、ＨＤＤを閉塞する必要があるであろう。前者の場合であれば、ＦＣ−ＨＤＤのようなＨＤＤであれば、制限パラメータの値を変更する（例えば、リトライ回数の値を増やす）ことで、対処することが可能であろう。
【０００９】
しかし、前者の場合であっても、制限パラメータの値を変更することができない種類のＨＤＤについては、上記のように対処することができない。このため、必要以上に、ＨＤＤが閉塞されてしまう可能性がある。その種のＨＤＤとして、例えば、ＳＡＴＡ−ＨＤＤが挙げられる。
【００１０】
従って、本発明の目的は、メディアドライブ、特に、読出し時間長の制限に関わるパラメータの値を変更不可能に有するメディアドライブを必要以上に閉塞しないようにすることにある。
【００１１】
本発明の他の目的は、後の説明から明らかになるであろう。
【課題を解決するための手段】
【００１２】
本発明に従うストレージシステムは、複数のメディアドライブと、前記複数のメディアドライブの各々に対してリードコマンドを発行することができるコントローラとを備える。前記コントローラが、複数のデータブロックを指定した第一リードコマンドを或るメディアドライブに発行する（第一コマンド発行手段を有する）。また、前記コントローラは、前記第一リードコマンドについてのタイムアウトを検出した場合、前記複数のデータブロックの一部のデータブロックを指定した第二リードコマンドを生成して、前記第二リードコマンドを前記或るメディアドライブに発行する（第二コマンド発行手段を有する）。また、前記コントローラは、前記第二リードコマンドについてのタイムアウトを検出することなく前記一部のデータブロックを受信した場合、前記第二リードコマンドを一回以上前記或るメディアドライブに対して発行することにより、前記第一リードコマンドで指定された前記複数のデータブロックを前記或るメディアドライブから読み出す。なお、リードコマンドでは、読出し対象となるデータブロックそれ自体が指定されてもよいし、読出し範囲が指定されても良い。
【００１３】
本発明の一つの態様では、前記或るメディアドライブは、リードコマンドで指定されたデータブロックの読出し時間長の制限に関わるパラメータの値を変更不可能に有するメディアドライブとすることができる。その或るメディアドライブは、ＳＡＴＡの規格に従うインタフェースを有するハードディスクドライブであるとすることができる。
【００１４】
本発明の一つの態様では、前記一部のデータブロックを構成するデータブロックの数は、リードコマンドが発行されてからタイムアウトとなるまでの時間長を、前記或るメディアドライブ内での一つのデータブロックの読出し最大時間長で除算して得られる商の値以下であるものとすることができる。
【００１５】
本発明の一つの態様では、前記コントローラは、前記第一リードコマンドについてタイムアウトが検出された後の一回目の第二リードコマンドで指定するデータブロックの数よりも、二回目以降の第二リードコマンドで指定するデータブロックの数を多くすることができる。
【００１６】
本発明の一つの態様では、前記複数のメディアドライブには、スペア用のメディアドライブが含まれていてもよい。前記コントローラは、前記第二リードコマンドを一回以上発行することにより前記複数のデータブロックを読み出した場合、前記複数のデータブロックを書込み対象としたライトコマンドを、前記スペア用のメディアドライブに発行することができる。
【００１７】
本発明の一つの態様では、前記コントローラは、前記第二リードコマンドを一回以上発行することにより前記複数のデータブロックを読み出した場合、前記複数のデータブロックを前記或るメディアドライブに上書きするためのライトコマンドを、前記或るメディアドライブに発行することができる。
【００１８】
本発明の一つの態様では、前記コントローラは、前記第二リードコマンドについてのタイムアウトを検出した場合には、前記或るメディアドライブを閉塞することができる（閉塞手段を有しても良い）。例えば、前記コントローラは、第二リードコマンドについて一回でもタイムアウトが検出されたら前記或るメディアドライブを閉塞しても良いし、二回以上タイムアウトが検出された場合にそれを閉塞しても良い。
【００１９】
本発明の一つの態様では、前記コントローラは、前記或るメディアドライブに対して前記第二リードコマンドを発行した場合、前記或るメディアドライブに関する表示を行い、且つ、前記第二リードコマンドについてタイムアウトが生じていないか或いは閉塞させたかに応じて、表示態様を違えることができる（表示手段を有する）。
【００２０】
本発明の一つの態様では、前記コントローラは、前記或るメディアドライブに対して前記第一リードコマンドを複数回送信することができ、前記複数回の送信において、タイムアウトを所定回数検出した場合には、前記或るメディアドライブを閉塞することができる（別の閉塞手段を有する）。
【００２１】
本発明に従う記憶制御方法は、複数のデータブロックを指定した第一リードコマンドを或るメディアドライブに発行し、前記第一リードコマンドについてのタイムアウトを検出した場合、前記複数のデータブロックの一部のデータブロックを指定した第二リードコマンドを生成して、前記第二リードコマンドを前記或るメディアドライブに発行し、前記第二リードコマンドについてのタイムアウトを検出することなく前記一部のデータブロックを受信した場合、前記第二リードコマンドを一回以上前記或るメディアドライブに対して発行することにより、前記第一リードコマンドで指定された前記複数のデータブロックを前記或るメディアドライブから読み出す。この記憶制御方法は、ストレージシステム、及び、そのストレージシステムに接続されたホスト装置のうちの一方によって、又は、双方が協働することによって、実現することができる。また、この記憶制御方法は、その方法における各動作をプロセッサに実行させるためのコンピュータプログラムがプロセッサに読み込まれて実行されることにより、実行することができる。
【発明の効果】
【００２２】
本発明によれば、メディアドライブを必要以上に閉塞しないようにすることができる。
【発明を実施するための最良の形態】
【００２３】
以下、図面を参照して、本発明の幾つかの実施例について説明する。
【実施例１】
【００２４】
図１は、本発明の第一実施例に係るストレージシステムを示す。
【００２５】
ストレージシステム１は、多重化（例えば二重化）されたディスクコントローラ１０、１０及び複数のメディアドライブ２０，２１を備える。また、ストレージシステム１は、一以上のホスト装置３と管理装置５とに接続されている。具体的には、例えば、ストレージシステム１は、ＳＡＮ（Storage Area Network）２を介して一以上のホスト装置３に接続され、ＬＡＮ（Local Area Network）４を介して管理装置５に接続されている。
【００２６】
ホスト装置３は、例えば、ＣＰＵ、メモリ及び表示装置等のハードウェア資源を備えるコンピュータ装置（例えばサーバマシン）である。ホスト装置３は、ストレージシステム１に対して、読出し対象データのリードコマンドや、ライトコマンド及び書き込み対象データを送信することができる。
【００２７】
管理装置５は、例えば、ＣＰＵ、メモリ及び表示装置等のハードウェア資源を備えるコンピュータ装置（例えばパーソナルコンピュータ）である。管理装置５では、例えば、図示しない管理プログラムが動作することができ、その管理プログラムによって記憶装置サブシステム１の動作状態を把握し、ストレージシステム１の動作を制御することができる。なお、管理装置５では、ｗｅｂブラウザ等のクライアントプログラムも動作することができ、ストレージシステム１からＣＧＩ（Common Gateway Interface）等によって供給される管理プログラムによって、ストレージシステム１の動作を制御することもできる。
【００２８】
ストレージシステム１には、共通のネットワークを介してホスト装置３及び管理装置５が接続されても良いし、それぞれ専用線を介してホスト装置３及び管理装置５が接続されても良い。ストレージシステム１は、ＲＡＩＤ（Redundant Array of Independent Disks）システムとすることができる。
【００２９】
メディアドライブ２１は、ＦＣ−ＨＤＤであり、メディアドライブ２０は、ＳＡＴＡ−ＨＤＤである。すなわち、この実施例では、ストレージシステム１に、複数種類のＨＤＤが混在していることになる。
【００３０】
各ディスクコントローラ１０は、ＨＤＤ２０、２１に対するデータの入出力を制御する。各ディスクコントローラ１０には、例えば、ＣＰＵ１０１、メモリ１０２、データ転送コントローラ１０４、チャネルインターフェース（以下、インターフェースを「I/F」と略記）１０５、ディスクI/F１０６、キャッシュメモリ１０７、及びLAN I/F１０８が設けられている。
【００３１】
メモリ１０２は、種々の情報を記憶することができる。
【００３２】
キャッシュメモリ１０７には、チャネルI/F１０５とディスクI/F１０６との間で送受信されるデータ（換言すれば、ホスト装置３とＨＤＤ２０、２１との間でやり取りされるデータ）が一時的に記憶される。
【００３３】
チャネルI/F１０５は、ＳＡＮ２に対するインターフェースであって、例えば、ファイバチャネルプロトコルによって、ホスト３との間でデータや制御信号を送受信する。
【００３４】
ディスクI/F１０６は、ＨＤＤ２０、２１に対するインターフェースであって、例えば、ファイバチャネルプロトコルによって、ＨＤＤ２０、２１との間でデータや制御信号を送受信する。
【００３５】
データ転送コントローラ１０４は、他のデータ転送コントローラ１０４に通信可能に接続されており、これにより、他のデータコントローラ１０との間でデータをやり取りすることができる。データ転送コントローラ１０４は、ＣＰＵ１０１、チャネルI/F１０５、ディスクI/F１０６、及びキャッシュメモリ１０７の間でのデータの転送を制御する。例えば、データ転送コントローラ１０４は、ＳＡＮ４を介してＨＤＤ２０、２１に読み書きされるデータを、インターフェース１０５、１０６間で、キャッシュメモリ１０７を介して転送する。
【００３６】
LAN I/F１０８は、ＬＡＮ４に対するインターフェースであって、例えば、ＴＣＰ／ＩＰプロトコルによって、管理装置５との間でデータや制御信号を送受信することができる。
【００３７】
ＨＤＤ２０、２１は、二重化されたディスクコントローラ１０の両方に接続されており、一方のディスクコントローラ１０に障害が発生した場合には他方のディスクコントローラ１０からアクセスできるようになっている。具体的には、例えば、各ＳＡＴＡ−ＨＤＤ２０は、ＦＣ（ファイバチャネル）プロトコルとＳＡＴＡプロトコルとの間のプロトコル変換を行うコンバータ１４及び一方のポートバイパス回路（以下、「PBC」）１２を介して一方のディスクコントローラ１０のディスクI/F１０６に接続され、且つ、コンバータ１４及び他方のPBC１２を介して他方のディスクコントローラ１０のディスクI/F１０６に接続されている。コンバータ１４は、例えば、二つのＰＢＣ１２，１２にそれぞれ接続される２つのポートを有し、接続をいずれかのポートに切替えるスイッチとしての機能を果たすこともできる。なお、ＦＣ−ＨＤＤ２１には、２つのポートが備えられており、プロトコル変換の必要が無いため、コンバータ１４を介さずに、二つのＰＢＣ１２に接続することができる。
【００３８】
ＣＰＵ１０１は、所定の記憶域（例えばメモリ１０２）から所定のコンピュータプログラムを読み出して実行することにより、各種処理を実行することができる。例えば、ホスト装置３からリードコマンドが受信された場合、ＣＰＵ１０１は、そのリードコマンドで指定されている読出し対象データをＨＤＤ２０又は２１から読み出してキャッシュメモリ１０７に書き込み、その後、その読出し対象データをキャッシュメモリ１０７から読み出してホスト装置３に送信することができる。また、例えば、ホスト装置３からライトコマンドと書き込み対象データとが受信された場合、書込み対象データはキャッシュメモリ１０７に一時格納され、ＣＰＵ１０１は、そのライトコマンドに従って、キャッシュメモリ１０７に格納された書込み対象データを、ＨＤＤ２０又は２１に書き込むことができる。
【００３９】
以上が、本実施例に係るストレージシステムの概要である。
【００４０】
ＨＤＤ２０も２１も、自分に設定されている種々のパラメータに基づいて動作することができる。例えば、ＦＣ−ＨＤＤ２１には、パラメータとして、リードコマンドに従う読出し時間長の制限に関わるパラメータ（以下、制限パラメータ）がある。制限パラメータは、例えば、リトライ時間、及び／又は、リトライ回数がある。読出しリトライとは、同一のデータブロックに対して再度行われる読出し処理を言う。リトライ時間とは、例えば、一データブロックの読出しリトライに要する時間長、又は、データブロック群の読出しの際に行われる一回以上の読出しリトライのトータル時間長である。リトライ回数とは、例えば、同一のデータブロックに対する読出しリトライの最大回数、又は、データブロック群の読出しの際に行える読出しリトライの最大回数である。
【００４１】
ディスクコントローラ（以下、「ＣＴＬ」と略記）１０は、ＨＤＤ２０、２１に関して所定種類のエラーが生じたことを検出した場合には、そのエラーに関わるＨＤＤ２０、２１に所定の信号を送ることにより、そのＨＤＤ２０、２１を閉塞させることができる。エラーの種類として、例えば、メディアエラー、ハードエラー及びインターフェースエラーがある。本実施例で言う「メディアエラー」とは、データブロックの読出しが物理的には可能であるにも関わらず（例えば、ハードディスク上の領域に傷などの損傷が無いにも関わらず）、そのデータブロックの読出しに失敗することを言う。本実施例で言う「ハードエラー」とは、ＨＤＤ内で生じたエラーであって、メディアエラー以外のことを言う。本実施例で言う「インターフェースエラー」とは、ＨＤＤ２０、２１とＣＴＬ１０との間（ＨＤＤ２０、２１それ自体及びＣＴＬ１０それ自体は含まれない）で生じたエラーのことを言う。ＣＴＬ１０は、例えば、ハードエラー及びインターフェースエラーに属する或る種のエラーが発生した場合には、エラーステータスを受けて解析することにより、ハードエラー又はインターフェースエラーを検出することができる。また、ＣＴＬ１０は、例えば、メディアエラーに属する或る種のエラー（例えば、ＥＣＣエラー或いはオフトラック）を、エラーステータスを受けて解析することにより検出してもよいし、図２Ａでタイムアウトを検出したが図２Ｂでタイムアウトを検出しなくなったことにより、推測しても良い。
【００４２】
上記の各種のエラーの性質に鑑みると、例えば、或るＨＤＤ２０又は２１に関わるエラーとして、ハードエラー及びインターフェースエラーが生じた場合には、そのＨＤＤ２０又は２１が閉塞されても良いが、メディアエラーが生じた場合には、そのＨＤＤ２０又は２１は必ずしも閉塞されなくても良い。
【００４３】
メディアエラーが生じないようにするための方法として、制限パラメータの値を調整する方法が考えられる。ＦＣ−ＨＤＤ２１のように、制限パラメータの値を変更することができるＨＤＤには、この方法を採用することができる。しかし、ＳＡＴＡ−ＨＤＤ２０のように、制限パラメータの値を変更することができるＨＤＤには、この方法を採用することができない。
【００４４】
そこで、この実施例に係るストレージシステム１では、ＳＡＴＡ−ＨＤＤ２０を必要以上に閉塞させないための種々の工夫が施されている。以下、それらの工夫を、本実施例の特徴の一つとして詳細に説明する。
【００４５】
図２Ａ及び図２Ｂは、本実施例の特徴の一つの概要を示す。なお、以下に説明するＣＴＬ１０が行う処理は、例えば、制御プログラムをＣＰＵ１０１が読み込んで実行することにより、行うことができる。
【００４６】
図２Ａに示すように、ＣＴＬ１０とコンバータ１４の両方が、リードコマンドを発行してから、そのリードコマンドで指定されたデータブロック群を受信するまでの時間長が、所定のタイムアウト時間長以内か否かを判定するタイムアウト判定機能を有している。ＣＴＬ１０は、例えば、各ＳＡＴＡ−ＨＤＤ２０別に、タイムアウト判定を行うことができるようになっている。ＣＴＬ１０（例えばメモリ１０２）に設定されているタイムアウト時間長ｔ１（例えば９秒）は、ストレージシステム１の上位に存在するホスト装置３（例えばサーバマシン）に設定されているタイムアウト時間長ｔ０よりも短く、且つ、コンバータ１４に設定されているタイムアウト時間長ｔ２（例えば７秒）よりも長くなっている。
【００４７】
ＣＴＬ１０は、ホスト装置３からリードコマンドを受け、ＳＡＴＡ−ＨＤＤ２０に対して、Ｎ個（Ｎは２以上の整数）のデータブロックを指定したリードコマンドを送信し、且つ、そのＳＡＴＡ−ＨＤＤ２０についての時間を計り始めることができる。そのリードコマンドでは、５つのデータブロック（以下、「ＢＬＫ」と略記）０−４が指定されているものとする（つまりＮ＝５であるとする）。
【００４８】
コンバータ１４は、ＳＡＴＡ−ＨＤＤ２０に対するリードコマンドを受け、そのリードコマンドを、ＦＣプロトコルに従うものからＳＡＴＡプロトコルに従うものに変換し、変換後のリードコマンドを、ＳＡＴＡ−ＨＤＤ２０に送信する。また、コンバータ１４は、リードコマンドの送信の際に、時間を計り始めることができる。
【００４９】
ＳＡＴＡ−ＨＤＤ２０は、ＢＬＫを記憶するハードディスク２７と、ハードディスク２７に対するＢＬＫの読み書きを制御する制御部（例えば、制御基板や磁気ヘッド）２６とを備えている。制御部２６は、ＢＬＫ０−４が指定されたリードコマンドを受信し、そのリードコマンドで指定されているＢＬＫ０−４の各々について、読出し処理を実行する。もし、読出し対象とするＢＬＫを読み出せなければ、制御部２６は、当該ＢＬＫについて読出しリトライを行い、それにより、一回の読出し処理では読み出せなかった当該ＢＬＫを読み出すことができる。図２Ａは、ＢＬＫ２及び３の各々を、一回の読出し処理では読出しできなかったが、その後で行った一回の読出しリトライにより、読み出すことができたことを示す。制御部２６は、ハードディスク２７から読み出したＢＬＫ０−４を、コンバータ１４に送信する。
【００５０】
コンバータ１４は、ＢＬＫ０−４を受信した場合、受信したＢＬＫ０−４を、ＣＴＬ１０に送信する。しかし、コンバータ１４は、ＢＬＫ０−４を受信する前に、計り始めた時間がタイムアウト時間長ｔ２になってしまったら、タイムアウト報告（タイムアウトを知らせるためのデータ）をＣＴＬ１０に送信する。
【００５１】
ＣＴＬ１０は、コンバータ１４からＢＬＫ０−４を受信した場合、リードコマンドの処理を正常に終了することができる。しかし、ＣＴＬ１０は、ＢＬＫ０−４を受信する前に、計り始めた時間がタイムアウト時間長ｔ１になってしまったら、或いは、タイムアウト報告をコンバータ１４から受信した場合には、タイムアウトとなり、図２Ｂの処理を実行する。
【００５２】
ＣＴＬ１０は、タイムアウトとなった場合、図２Ｂに示すように、そのタイムアウトが、メディアエラーによるものなのか否かを判定するための処理を実行する。具体的には、ＣＴＬ１０は、先のリードコマンドで指定したＮ個のＢＬＫのうちの一部（例えば先頭の一つのＢＬＫ０）を指定した新たなリードコマンド（すなわち、Ｎ個よりも少ないＭ個のＢＬＫを指定したリードコマンド）を生成し、その新たなリードコマンドを、先のリードコマンドの送信先と同一のＳＡＴＡ−ＨＤＤ２０に送信する。ここで、Ｍの値は、例えば、１以上の整数であり、且つ、タイムアウト時間ｔ１又はｔ２を、ＳＡＴＡ−ＨＤＤ２０内での１ＢＬＫに対する最大読出し時間長で除算して得られる商の値以下とすることができる。最大読出し時間長は、１ＢＬＫに対するリトライ回数（ＳＡＴＡ−ＨＤＤ２０に設定されているパラメータの値）に、１回の読出しリトライに要する時間長を掛けることで、求めることができる。例えば、リトライ回数が２であり、１回の読出しリトライに要する時間長が１．５秒であれば、最大読出し時間長は３秒となる。
【００５３】
ＣＴＬ１０が、その新たなリードコマンドを送信してからタイムアウト時間ｔ1になる前に、その新たなリードコマンドで指定したＢＬＫ（例えばＢＬＫ０）を受信することができた場合には、先に発生したタイムアウトは、メディアエラーによるものと考えられる。その場合、ＣＴＬ１０は、以後、そのタイムアウトが生じたＳＡＴＡ−ＨＤＤ２０に対するリード方法を通常の方法とは別の方法に変更するようにする。具体的には、例えば、ＣＴＬ１０は、先にタイムアウトとなったＳＡＴＡ−ＨＤＤ２０に対してリードコマンドを発行する際、以後、リードコマンドで指定するＢＬＫの数を、通常の数（Ｎ個）よりも少ない数（Ｍ個）とするようにする。
【００５４】
一方、ＣＴＬ１０が、上記新たなリードコマンドを送信してからその新たなリードコマンドで指定したＢＬＫを受けることなくタイムアウト時間ｔ1になった場合、或いは、タイムアウト報告をコンバータ１４から受けた場合には、先に発生したタイムアウトは、メディアエラーではない他のエラー（例えばハードエラー又はインターフェースエラー）によるものと考えられる。その場合、ＣＴＬ１０は、他のエラーに対応した処理を実行する（例えば、再びタイムアウトとなった当該ＳＡＴＡ−ＨＤＤ２０を閉塞させる）。
【００５５】
以下、本実施例で行われる処理の流れの一例を詳細に説明する。なお、以下の説明では、ＣＴＬ１０では、タイムアウトの監視が行われないものとするが、勿論、タイムアウトの監視、換言すれば、計時は、ＣＴＬ１０及びコンバータ１４の両方が行うことができるし、ＣＴＬ１０が行ってコンバータ１４が行わないこともできる。
【００５６】
図３は、通常のリード方法で行われる処理の流れの一例を示す。
【００５７】
ＣＴＬ１０は、ＳＡＴＡ−ＨＤＤ２０上に設定された論理ボリュームに対するリードコマンドをホスト装置３から受けた場合、所定の数ＮのＢＬＫを指定したリードコマンド（例えばホスト装置３からのリードコマンドそれ自体）を、その論理ボリュームを提供するＳＡＴＡ−ＨＤＤ２０に対して発行する（ステップＳ１１）。
【００５８】
そのＳＡＴＡ−ＨＤＤ２０に接続されているコンバータ１４が、そのＳＡＴＡ−ＨＤＤ２０に対するリードコマンドを受領する（Ｓ１２）。コンバータ１４は、その受領したリードコマンドのプロトコル変換を行い、タイマ監視（つまり計時）をスタートし（Ｓ１３）、プロトコル変換後のリードコマンドを、自分に接続されているＳＡＴＡ−ＨＤＤ２０に送信する。
【００５９】
ＳＡＴＡ−ＨＤＤ２０の制御部２６は、リードコマンドを受領し、そのリードコマンドで指定されている範囲、つまり、Ｎ個のＢＬＫの各々を読み出そうとする（Ｓ１４）。
【００６０】
Ｓ１４の際、例えば、ＳＡＴＡ−ＨＤＤ２０に設定されているパラメータ「一つのリードコマンドについてのリトライ回数」の値を超える回数の読出しリトライを行う前に（Ｓ１５でＮＯ）、指定されたＮ個のＢＬＫを読み出せた場合には（Ｓ１６でＹＥＳ）、制御部２６は、ＳＡＴＡ−ＨＤＤ２０に設定されているパラメータ「一つのＢＬＫについてのリトライ回数」の値を超える回数の読出しリトライを行っていなければ（Ｓ１９でＮＯ）、読み出されたＮ個のＢＬＫをコンバータ１４に送信する。Ｓ１６でＹＥＳの場合、制御部２６は、当該一つのリードコマンドについて読出しリトライを所定回数行っていれば（Ｓ１９でＹＥＳ）、当該Ｎ個のＢＬＫをリアサイン（つまり上書き）して（Ｓ２０）、読み出されたＮ個のＢＬＫをコンバータ１４に送信する。
【００６１】
Ｓ１４の際、例えば、上記Ｓ１５でＮＯであり、且つ、指定されたＮ個のＢＬＫを読み出せていない場合には（Ｓ１６でＮＯ）、制御部２６は、ＳＡＴＡ−ＨＤＤ２０に設定されているパラメータ「一つのＢＬＫについてのリトライ回数」の値を超える回数の読出しリトライを行ったか否かを判定する（Ｓ１７）。行っていなければ（Ｓ１７でＮＯ）、制御部２６は、Ｓ１５に戻るが、行っていれば（Ｓ１７でＹＥＳ）リードエラーとなる（Ｓ１８）。
【００６２】
コンバータ１４は、Ｓ１３を実行してからタイムアウト時間ｔ２を経過する前にＢＬＫを受信した場合には、タイマ監視をクリアにし（つまり計時を止め）（Ｓ２１）、受信したＢＬＫをＣＴＬ１０に送信する。しかし、コンバータ１４は、Ｓ１３を実行してからタイムアウト時間ｔ２を経過しても、ＢＬＫを受信しない場合には、タイムアウトとなり、タイムアウト報告をＣＴＬ１０に送信する（Ｓ３１）。
【００６３】
ＣＴＬ１０は、リードコマンドで指定したＢＬＫを受信した場合には、リードコマンドの処理を正常に終了することができるが（Ｓ２２）、タイムアウト報告を受領した場合には（Ｓ３２）、図４のＳ５１以降の処理を行うことになる。
【００６４】
図４は、ＣＴＬ１０がタイムアウト報告を受領した場合に行われる処理の流れの一例を示す。
【００６５】
ＣＴＬ１０は、先のリードコマンド（Ｓ１１でのリードコマンド）で指定したＢＬＫ群（Ｎ個のＢＬＫ）の一部を指定した新たなリードコマンドを生成し、その新たなリードコマンドを、先のリードコマンドの発行先となったＳＡＴＡ−ＨＤＤ２０に発行する。これにより、上記のＳ１２−Ｓ２１及びＳ３１と同じ処理が行われる（Ｓ５２−Ｓ６１及びＳ７１）。
【００６６】
ＣＴＬ１０は、発行するリードコマンドを、上記のような新たなリードコマンドにしても、再び、タイムアウト報告を受領した場合には（Ｓ７２）、タイムアウトが発生した原因がメディアエラーではない他のエラーが原因であると推測されるので、当該ＳＡＴＡ−ＨＤＤを閉塞する（Ｓ７３）。この場合、ＣＴＬ１０は、当該ＳＡＴＡ−ＨＤＤを閉塞したことを表示することができる。具体的には、例えば、ＣＴＬ１０は、管理装置５或いはホスト装置３等の所定の装置に、図５Ａに例示するような画面、すなわち、当該ＳＡＴＡ−ＨＤＤを閉塞したことを表す画面３００Ｃを表示させることができる。画面３００Ｃでは、例えば、ストレージシステム１に搭載されている複数のＨＤＤ２０、２１が表示され、且つ、閉塞されたＨＤＤの表示態様が、閉塞されていない他のＨＤＤの表示態様と異なっている（例えば閉塞されたＨＤＤのマークは黒く塗りつぶされている）。
【００６７】
ＣＴＬ１０は、上記のような新たなリードコマンドを発行したことで、タイムアウト報告を受領することなく、その新たなリードコマンドで指定したＢＬＫを受信することができた場合には、その新たなリードコマンドについての処理を終了する（Ｓ６２）。
【００６８】
また、上記のような新たなリードコマンドを発行したことでタイムアウト報告を受領しなくなったということは、先にタイムアウトが発生したのは、メディアエラーが原因であると推測される。この場合、ＣＴＬ１０は、当該ＳＡＴＡ−ＨＤＤ２０を直ちに閉塞するようなことはしない。
【００６９】
具体的には、例えば、ＣＴＬ１０は、当該ＳＡＴＡ−ＨＤＤ２０でメディアエラーが生じたことを表示する。具体的には、例えば、ＣＴＬ１０は、当該管理装置５或いはホスト装置３等の所定の装置に、図５Ｂに例示するような画面、すなわち、当該ＳＡＴＡ−ＨＤＤでメディアエラーが発生したことを表す画面３００Ｂを表示させることができる。
【００７０】
また、ＣＴＬ１０は、図３のＳ１１でのリードコマンドで指定した全てのＢＬＫを読出していなければ（Ｓ８１でＮＯ）、残りのＢＬＫを読み出すために、再度、Ｓ５１を実行する。なお、ＣＴＬ１０は、二回目以降のＳ５１でのリードコマンドで指定するＢＬＫの数を、一回目のＳ５１でのリードコマンドで指定したＢＬＫの数と同じにしても違えても良い。また、ＣＴＬ１０は、二回目以降の各回でのＳ５１で指定するＢＬＫの数も、同じにしても違えても良い。具体的には、例えば、ＣＴＬ１０は、図３のＳ１１でのリードコマンドについてタイムアウトが検出された場合には、Ｐ個（Ｐは１以上の整数）のＢＬＫを指定したリードコマンドを発行し、そのリードコマンドでタイムアウトを検出しなかった場合には、以後、Ｑ個（Ｐ＜Ｑ＜Ｎ）のＢＬＫを指定したリードコマンドを発行するようにしても良い。
【００７１】
Ｓ５１及びＳ６２が繰り返し行われることにより、図３のＳ１１でのリードコマンドで指定した全てのＢＬＫを読出したならば（Ｓ８１でＹＥＳ）、ＣＴＬ１０は、コレクション書込みを実行して（Ｓ８２）、Ｓ１１のリードコマンドの処理を終了する。当該コレクション書込みでは、例えば、ＣＴＬ１０は、Ｓ５１及びＳ６２の繰り返しによって得られたＮ個のＢＬＫを書き込み対象としたライトコマンドを生成し、そのライトコマンドを、図６Ａに例示するように、スペアのＳＡＴＡ−ＨＤＤ２０Ｓ（ＦＣ−ＨＤＤ２１であっても良い）に発行することができる。また、当該コレクション書込みでは、ＣＴＬ１０は、図６Ｃに例示するように、Ｓ５１及びＳ６２の繰り返しによって得られたＮ個のＢＬＫを、タイムアウトが発生したと検出されたＳＡＴＡ−ＨＤＤ２０Ｂに対して上書きすることができる。
【００７２】
以上が、第一実施例についての説明である。なお、上記の説明では、ＳＡＴＡ−ＨＤＤ２０を代表的に例に採り説明したが、例えば、図２Ａ及び図２Ｂの処理は、ＦＣ−ＨＤＤ２１など、他種のＨＤＤにも適用することができるし、ＨＤＤに限らず、他種のメディアドライブにも適用することができる。
【００７３】
上述した第一実施例によれば、ＨＤＤ２０、２１の上位に、ＨＤＤ２０、２１に対して発行されたリードコマンド（Ｎ個のＢＬＫを指定したリードコマンド）についてタイムアウトが発生したか否かを判定することができる機能（以下、タイムアウト判定機能）が搭載されている。そして、ＨＤＤ２０、２１に対するリードコマンドが発行された場合に、そのタイムアウト判定機能により、タイムアウトが発生したと判定された場合には、ＣＴＬ１０は、先に発行したリードコマンドで指定したＢＬＫ群の一部を指定したリードコマンドを、先のリードコマンド発行先のＨＤＤ（当該ＨＤＤ）に発行する。この場合、再びタイムアウトが発生したならば、先のタイムアウトの発生は、メディアエラーではない他のエラーが原因であると推測されるので、ＣＴＬ１０は、当該ＨＤＤを閉塞させる。しかし、タイムアウトが発生しなかったら、先のタイムアウトの発生は、メディアエラーが原因であると推測されるので、ＣＴＬ１０は、当該ＨＤＤを閉塞させず、以後、Ｎ個よりも少ない数のＢＬＫを指定したリードコマンドで、上記Ｎ個のＢＬＫを読み出すようにする。以上のことにより、必要以上にＨＤＤを閉塞しないようにすることができる。これは、特に、ＳＡＴＡ−ＨＤＤ２０、すなわち、制限パラメータ（例えばリトライ回数及び／又はリトライ時間）の値を設定変更不可能に有するメディアドライブに有効である。
【００７４】
また、上述した第一実施例によれば、図６Ａに例示したコレクション書込み（別の言い方をすればコレクションコピー）、すなわち、上記少ない数のＢＬＫを指定したリードコマンドが繰り返し発行されることにより取得されたＮ個のＢＬＫが、スペアのＨＤＤ２０Ｓ又は２１に書き込まれる。コレクション書込みの別法としては、例えば、図６Ｂに例示するように、タイムアウトが発生した当該ＳＡＴＡ−ＨＤＤ２０Ｂを閉塞し、他のＨＤＤ２０Ａ、２０Ｃ及び２０ＤからＢＬＫをＮ個ずつ読出して、読み出されたＢＬＫから、閉塞されたＳＡＴＡ−ＨＤＤ２０Ｂ内に格納されているＢＬＫを復元し、復元されたＢＬＫを、スペアのＨＤＤ２０Ｓ又は２１に書き込む方法が考えられる。しかし、この別法では、他のＨＤＤ２０Ａ、２０Ｃ及び２０ＤからのＮ個のＢＬＫの読出しの際に、或るＨＤＤについてタイムアウトが発生し、そのＨＤＤをも閉塞させなければならなくなる。つまり、別法では、二重閉塞が生じ得る。この第一実施例では、こういった二重閉塞を生じさせることなく、コレクション書込みを実行することができる。
【００７５】
また、上述した第一実施例によれば、図６Ｃに例示したコレクション書込み、すなわち、上記少ない数のＢＬＫを指定したリードコマンドが繰り返し発行されることにより取得されたＮ個のＢＬＫが、タイムアウトが発生したと検出されたＳＡＴＡ−ＨＤＤ２０Ｂに対して上書きされる。これにより、以後、同一のＳＡＴＡ−ＨＤＤ２０Ｂから同一のＮ個のＢＬＫを読み出す場合にタイムアウトが発生してしまうことの可能性を低減することができる。
【実施例２】
【００７６】
本発明の第二実施例を説明する。なお、以下の説明では、第一実施例との相違点を主に説明し、第一実施例との共通点については説明を簡略或いは省略する。
【００７７】
図７は、本発明の第二実施例において行われる処理の流れの一例を示す。
【００７８】
この第二実施例では、Ｎ個のＢＬＫを指定したリードコマンドを発行した場合に、タイムアウトが発生したならば、その原因がメディアエラーか否かに関係なく、そのリードコマンドの発行先のＨＤＤが閉塞される場合がある。
【００７９】
例えば、ＣＴＬ１０のメモリ１０２に、タイムアウト管理テーブル２５０が記憶される。タイムアウト管理テーブル２５０は、各ＨＤＤ毎に、ＨＤＤ番号と、そのＨＤＤにリードコマンドを発行した場合に生じたタイムアウトの回数とが記録される。
【００８０】
ＣＴＬ１０は、図３のＳ３２の後（つまり、Ｎ個のリードコマンドを発行した場合にタイムアウト報告を受領した後）、タイムアウト管理テーブル２５０における、当該ＨＤＤ（Ｎ個のリードコマンドの発行先）に対応したタイムアウト回数を増やす（Ｓ１１２）。そして、ＣＴＬ１０は、増やされたタイムアウト回数が、所定回数を超えていなければ（Ｓ１１３でＮＯ）、図４のＳ５１を行うが、所定回数を超えていれば（Ｓ１１３でＹＥＳ）、図４のＳ８２まで行った後（つまりコレクション書込みを行った後）、当該ＨＤＤを閉塞させる（図４のＳ７３）。
【００８１】
この第二実施例によれば、タイムアウトが発生した原因がメディアエラーであるとしても、タイムアウトが多発するような場合には、当該ＨＤＤが閉塞される。これにより、ストレージシステム１の信頼性の低減を抑えることができる。なお、当該ＨＤＤが閉塞された場合には、スペアのＨＤＤ２０Ｓ又は２１から、閉塞されたＨＤＤ内のＢＬＫを取得することが可能である。
【００８２】
以上、本発明の好適な幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
【００８３】
例えば、先のリードコマンドで指定したＮ個のＢＬＫよりも少ない数のＢＬＫを指定したリードコマンドを繰り返し発行する処理は、当該Ｎ個のＢＬＫを取得するまで行われてもよいし、ホスト装置３からの別のリードコマンドに従うリードコマンドを発行する場合にも行われても良い。
【００８４】
また、ＣＴＬ１０が有する種々の機能のうち、例えば、タイムアウトを検出する機能や、指定するＢＬＫの数を違えてリードコマンドを発行する機能は、ホスト装置３に搭載されていても良い。すなわち、例えば、図２Ａ及び図２ＢでＣＴＬ１０が行う処理は、ＣＴＬ１０の代わりに、ホスト装置３が行っても良い。
【図面の簡単な説明】
【００８５】
【図１】図１は、本発明の第一実施例に係るストレージシステムを示す。
【図２】図２Ａ及び図２Ｂは、本実施例の特徴の一つの概要を示す。
【図３】図３は、通常のリード方法で行われる処理の流れの一例を示す。
【図４】図４は、ＣＴＬ１０がタイムアウト報告を受領した場合に行われる処理の流れの一例を示す。
【図５】図５Ａは、ＳＡＴＡ−ＨＤＤを閉塞したことを表す画面の一例を示す。図５Ｂは、ＳＡＴＡ−ＨＤＤでメディアエラーが発生したことを表す画面の一例を示す。
【図６】図６Ａは、本発明の第一実施例で行われるコレクション書込みの説明図である。図６Ｂは、タイムアウトが生じたら直ちにＨＤＤを閉塞する場合に行い得るコレクション書込みの一例の説明図である。図６Ｃは、本発明の第一実施例で行われる別のコレクション書込みの説明図である。
【図７】図７は、本発明の第二実施例において行われる処理の流れの一例を示す。
【符号の説明】
【００８６】
１…ストレージシステム  ２…SAN  ３…ホスト装置  １０…ディスクコントローラ  １４…コンバータ  ２０…ＳＡＴＡ−ＨＤＤ  ２１…ＦＣ−ＨＤＤ  １０１…ＣＰＵ  １０２…メモリ  １０４…データ転送コントローラ  １０５…チャネルインターフェース  １０６…ディスクインターフェース  １０７…キャッシュメモリ  １０８…ＬＡＮインターフェース
【図１】
0004775843.tif 000002
【図２】
0004775843.tif 000003
【図３】
0004775843.tif 000004
【図４】
0004775843.tif 000005
【図５】
0004775843.tif 000006
【図６】
0004775843.tif 000007
【図７】
0004775843.tif 000008