(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0012】
以下、本発明の一実施形態に係るRAID(Redundant Array of Inexpensive Disks)を構成する各ドライブへのパトロール診断について図面を参照して説明する。
図1は、本発明の一実施形態に係る情報処理システムの概略図である。
図示するように情報処理システム100は、ホスト装置1a,1b,〜1m、ディスクアレイ装置1と、ドライブ群40とを含む。ホスト装置1a〜1mは、ディスクアレイ装置1と接続されている。ディスクアレイ装置1は、ドライブ群40と接続されている。ディスクアレイ装置1に接続されるホスト装置は1台であってもよい。ドライブ群40は、複数のドライブ#0〜#nを含む。複数のドライブ#0〜#nは、例えば、HDD(Hard Disk Drive)やSSD(Solid State Drive)などの記憶装置である。ドライブ#0〜#nは、RAIDによる冗長化構成とされている。なお、ドライブ#0〜#nは、ディスクアレイ装置1の内部に搭載されていてもよい。
【0013】
ホスト装置1a〜1mは、CPU(central processing unit)等のプロセッサを備えたコンピュータである。ホスト装置1a〜1mでは、CPUによりOS(operating system)が稼働している。OSは、ディスクアレイ装置1が管理する論理ボリュームを対象とするIO命令をディスクアレイ装置1へ出力する。
【0014】
ディスクアレイ装置1は、ドライブ群40のドライブ#0〜#nによってRAIDを構成して管理している。また、ディスクアレイ装置1は、ホスト装置1a等によるIO命令に従い、論理ボリュームに対応するドライブへの書き込みや、ドライブからの読み出しを行う。ディスクアレイ装置1は、ホスト制御部10と、キャッシュメモリ20と、ドライブ制御部30とを備えている。ホスト制御部10は、ホスト装置1a〜1mから受信したコマンドを解析して実行する。キャッシュメモリ20は、種々の情報を記憶する。例えば、キャッシュメモリ20は、ドライブ群40のドライブの構成情報を記憶する構成情報記憶領域21と、ホスト装置1a〜1mとの間で送受信するデータを格納するデータキャッシュ領域24を備えている。構成情報記憶領域21には、ドライブ情報記憶テーブル22と、SSD製品識別コードテーブル23とが格納される。これらのテーブルについては後述する。
【0015】
ドライブ制御部30は、ドライブ群40を制御する。ドライブ制御部30は、コマンド発行部31と、診断部33とを備える。コマンド発行部31は、ドライブ群40に含まれる各ドライブへコマンドを発行する。例えば、コマンド発行部31は、パトロール診断時に、診断対象のアドレスへリードコマンドまたはベリファイコマンドを発行する。また、コマンド発行部31は、SSD情報取得インターフェース32を備える。SSD情報取得インターフェース32は、SSDに対してNANDチップの構成情報を取得するコマンドを発行する。診断部33は、ドライブ群40の各ドライブに対するパトロール診断を行う。パトロール診断とは、HDDやSDDに故障が生じていないかどうかを検査する処理である。診断部33は、検査すべきアドレスを決定し、そのアドレスに対して、コマンド発行部31を介してリードコマンド等を発行する。診断部33は、リードコマンドに対する応答を確認し、例えば、コマンドに対する応答があれば当該アドレスは正常で、応答が無ければ当該アドレスは故障していると判定する。診断部33は、ドライブがSSDの場合に、ブロック単位でパトロール診断を行う機能を有している。
【0016】
ここで、
図6、
図7を用いてSSDに対するパトロール診断について説明する。
図6、
図7は、それぞれ、SSDへのアクセスを説明する第1の図、第2の図である。
SSDは、NANDチップと呼ばれるフラッシュメモリで構成された記憶素子を複数備えた記憶装置である。図示するように、記憶領域は、複数のブロックで構成されている。1ブロックの容量は、512KBや1MBである。また、各ブロックは、複数のセルによって構成されている。SSDでは、一度書き込んだデータについては、セル単位ではなく、ブロック単位で書き込みを行う。例えば、
図6の例では、LBA(Logical Block Addressing)1000〜1400のアドレスがブロック0と対応付けられている。そして、ホスト装置1a等が、LBA1000〜1400の何れかのアドレスに書き込んだデータを更新等するときには、当該データが格納されたセルではなく、ブロック0全体のデータを書き換える。
【0017】
また、一つのセルが劣化して読み書きができなくなった場合、通常は、SSDのコントローラがチップ内に持っている誤り訂正符号と別のセルのデータを用いて、読み出せなくなったデータを生成し、ブロック単位で別のブロックにデータをコピーして復旧する。しかし、ブロック内で複数のセルが劣化した場合、誤り訂正符号でも復旧できなくなる。すると、ブロック単位で読み書きができなくなり、同じブロック内の劣化していないセルに格納されたデータの読み書きもできなくなる。従って、ブロック内の任意のアドレスに対してデータを読み取れるかどうかをチェックすれば、ブロック内の別のアドレスに対してもチェックを実施したことになる。つまり、パトロール診断の対象ドライブがSSDの場合、複数セルの劣化による復旧不能な故障は、ブロック内の任意のアドレスに対するチェックの実施により検出可能である。本実施形態では、この性質を利用して、診断部33が、SSDに対してブロック単位でパトロール診断を行う。これにより、1アドレスずつ全アドレスを対象として診断を行う処理と比べ、パトロール診断の実行時間を短縮化することができる。例えば、
図6の構成例であれば、ブロック0〜ブロックnの各々に対し1回ずつ診断(ベリファイコマンド等を発行し、その応答を確認)すれば、診断部33は、LBA1000〜1400の範囲のアドレスが正常か異常かを診断することができる。
なお、ブロック単位での診断とは、各ブロックにつき1アドレスを対象とする診断を行い、それを全ブロック分繰り返すということである。
【0018】
ところで、SSDのブロックのサイズは、NANDチップの容量や数に依存するため、SSDの製品や世代によって異なる。ブロック単位での診断を行うためには、診断対象SSDのブロックサイズの情報が必要である。そこで、コマンド発行部31は、例えば、ドライブが接続されたときにINQUIRYコマンドを発行し、ドライブの製品識別コード、タイプ(HDDまたはSSD)、容量などの情報を取得する。また、タイプがSSDの場合、コマンド発行部31は、SSD情報取得インターフェース32を介して、SSDからNANDチップのブロックサイズの情報を取得し、キャッシュメモリ20の構成情報記憶領域21が記憶するドライブ情報記憶テーブル22に記録する。診断部33は、ドライブ情報記憶テーブル22に記録されたブロックサイズの情報を用いて、SSDに対するブロック単位のパトロール診断を実行する。
【0019】
また、SSD情報取得インターフェース32を介して、ブロックサイズの情報が取得できない場合、診断部33は、キャッシュメモリ20の構成情報記憶領域21が記憶するSSD製品識別コードテーブル23を参照して、INQUIRYコマンドにより得たSSDドライブの製品識別コードに対応するブロックサイズの情報を取得する。診断部33は、SSD製品識別コードテーブル23から読み出したブロックサイズの情報を用いて、SSDに対するブロック単位のパトロール診断を実行する。
【0020】
次にドライブ情報記憶テーブル22、SSD製品識別コードテーブル23について説明する。
図2は、本発明の一実施形態によるドライブ情報記憶テーブルの一例を示す図である。
図2に示すようにドライブ情報記憶テーブル22には、ドライブごとに「製品識別コード」、「タイプ」、「容量」、「パトロール診断アドレス」、「NANDブロックサイズ」の各情報を格納するフィールドが設けられている。例えば、
図2の例では、ドライブ#1の製品識別コードは「HDD80008」、タイプは「HDD」、容量は「8TB」、パトロール診断アドレスは「40000セクタ」、NANDブロックサイズは「無効」である。同様にドライブ#2の製品識別コードは「SSD16000A」、タイプは「SSD」、容量は「16TB」、パトロール診断アドレスは「10000セクタ」、NANDブロックサイズは「512KB」である。
【0021】
コマンド発行部31は、ドライブ#1が接続されたときにINQUIRYコマンドをドライブ#1へ発行し、製品識別コード(「HDD80008」)、ドライブタイプの情報(「HDD」)、ドライブ容量の情報(「8TB」)を取得し、取得した情報をドライブ#1に対応付けてドライブ情報記憶テーブル22へ登録する。ドライブタイプが「HDD」の場合、「NANDブロックサイズ」フィールドには「無効」を登録する。また、「パトロール診断アドレス」フィールドには「0」を登録する。そして、パトロール診断を実行したときに、診断部33が、次に診断すべきアドレスの値を「パトロール診断アドレス」フィールドに登録する。接続されたドライブがSSDの場合も同様に、コマンド発行部31は、INQUIRYコマンドの発行により取得した情報をそのドライブと対応付けてドライブ情報記憶テーブル22に格納する。SSDの場合、
図2のドライブ#2、#3に例示するように「NANDブロックサイズ」フィールドに、SSDへの書き込み単位であるブロックのサイズが登録される。このとき、接続されたSSDが、SSD情報取得インターフェース32に対応するSSDであれば、コマンド発行部31は、INQUIRYコマンドの発行により、ブロックサイズを取得することができる。しかし、接続されたSSDが、SSD情報取得インターフェース32に対応するSSDでは無い場合、INQUIRYコマンドの発行により、ブロックサイズを取得することができない可能性がある。このような場合、ドライブ制御部30は、INQUIRYコマンドの発行によって取得した製品識別コード(SSDのProduct Identification情報など)に基づいて、次に説明するSSD製品識別コードテーブル23を参照し、製品識別コードに対応するブロックサイズの情報を取得する。そして、ドライブ制御部30は、SSD製品識別コードテーブル23から取得したブロックサイズの情報を、ドライブ情報記憶テーブル22の「NANDブロックサイズ」フィールドに登録する。
【0022】
そして、診断部33は、ドライブの接続時にドライブ情報記憶テーブル22に格納された情報を用いて、パトロール診断を実行する。例えば、ドライブがHDDの場合、診断部33は、ドライブ情報記憶テーブル22を参照して、診断対象のドライブの「パトロール診断アドレス」フィールドからアドレスの値を取得し、当該アドレスに対して診断を行う。診断後、診断部33は、「パトロール診断アドレス」フィールドの値に診断したセクタサイズを加算する。加算後の値は、次回の診断アドレスを示す。
【0023】
ドライブがSSDの場合も同様に、診断部33は、ドライブ情報記憶テーブル22を参照して診断対象のドライブの「パトロール診断アドレス」フィールドからアドレスの値を取得し、当該アドレスに対して診断を行う。診断後、診断部33は、「パトロール診断アドレス」フィールドの値にブロックサイズの値を加算する。
図2のドライブ#2であれば、今回の診断アドレス10000に512を加算する。加算後の値は、次回の次の診断対象のブロックにおける診断用の1つのアドレスを示す。
【0024】
次にSSD製品識別コードテーブル23について説明する。
図3は、本発明の一実施形態によるSSD製品識別コードテーブルの一例を示す図である。
図3に例示するように、SSD製品識別コードテーブル23には、SSDの製品識別コードとNANDブロックサイズ(SSDのブロックサイズ)とが対応付けて格納されている。これらの情報は、市場に提供されている、あるいは、提供されていた、様々な世代の様々なSSD製品についての識別情報とブロックサイズの情報が収集されて登録されたものである。SSD製品識別コードテーブル23は、予めキャッシュメモリ20の構成情報記憶領域21に格納されている。SSD製品識別コードテーブル23を参照すると、SSDの識別情報が分かっていれば、そのSSDのブロックサイズの情報を取得することができる。従って、SSDのパトロール診断を行う際に、ブロック単位での診断を行うことができる。
【0025】
次にドライブ情報記憶テーブル22へSSDのブロックサイズ等を登録する処理について説明する。
図4は、本発明の一実施形態によるドライブ構成情報の登録処理の一例を示すフローチャートである。
前提として、キャッシュメモリ20には、ドライブ情報記憶テーブル22とSSD製品識別コードテーブル23が格納されているとする。
まず、ドライブ群40に新しいドライブが挿入される。ドライブ制御部30は、このドライブの挿入を検出する(ステップS101)。ドライブ制御部30は、コマンド発行部31へドライブの構成情報の取得を指示する。すると、コマンド発行部31が、INQUIRYコマンドを、挿入が検出されたドライブへ発行する(ステップS102)。挿入が検出されたドライブは、INQUIRYコマンドに対して自ドライブの構成に関する情報を回答する。ドライブ制御部30は、回答された情報の中から、製品識別コード、ドライブのタイプ、ドライブの容量の情報を、挿入が検出されたドライブ(例えば、ドライブの挿入位置を示すスロット番号)と対応付けてドライブ情報記憶テーブル22に登録する。また、コマンド発行部31は、ドライブ情報記憶テーブル22の「パトロール診断アドレス」フィールドに「0」を登録する(ステップS103)。
【0026】
次にドライブ制御部30は、回答された情報のタイプがSSDかどうかを判定する(ステップS104)。タイプがSSDではない場合(ステップS104;No)、後述するステップS112の処理を行う。タイプがSSDの場合(ステップS104;Yes)、ドライブ制御部30は、コマンド発行部31へSSDのブロックサイズ等の取得を指示する。すると、コマンド発行部31が、SSD情報取得インターフェース32を介して、所定の一般的なSSD情報取得コマンドを、挿入が検出されたドライブへ発行する(ステップS105)。ドライブ制御部30は、このコマンドへの応答がエラー応答かどうかを判定する(ステップS106)。
【0027】
SSD情報取得コマンドに対し、エラーが応答された場合(ステップS106;Yes)、ドライブ制御部30は、先にINQUIRYコマンドによって取得したドライブの製品識別コードをドライブ情報記憶テーブル22から読み出す。ドライブ制御部30は、SSD製品識別コードテーブル23を参照し(ステップS107)、読み出した製品識別コードに一致するデータが登録されているかどうか判定する(ステップS108)。
【0028】
一致する製品識別コードが登録されている場合(ステップS108;No)、ドライブ制御部30は、製品識別コードが一致したレコードの「NANDブロックサイズ」フィールドの値を読み出して(
図3)、その値を、ドライブ情報記憶テーブル22における対象となる製品識別コードが格納されたデータ(レコード)の「NANDブロックサイズ」フィールドに登録する(ステップS111)。
【0029】
一致する製品識別コードが登録されていない場合(ステップS108;Yes)、ドライブ制御部30は、ドライブ情報記憶テーブル22における対象となる製品識別コードが格納されたレコードの「NANDブロックサイズ」フィールドに「無効」を登録する(ステップS109)。
【0030】
また、SSD情報取得コマンドに対し、エラーが応答されなかった場合(ステップS106;No)、ドライブ制御部30は、SSD情報取得コマンドによって取得したブロックサイズの情報を、ドライブ情報記憶テーブル22における対象となる製品識別コードが格納されたレコードの「NANDブロックサイズ」フィールドに登録する(ステップS110)。
【0031】
以上の処理により、ドライブ制御部30は、挿入が検出されたドライブに関する構成情報のドライブ情報記憶テーブル22への登録を完了する(ステップS112)。このようにドライブの挿入時にドライブの構成情報の登録を行うので、ドライブ情報記憶テーブル22には、ドライブ群40に含まれるドライブ#0〜#nに関する構成情報がすべて登録される。特にドライブがSSDの場合、ドライブ情報記憶テーブル22には、ブロックサイズが取得できなかった場合を除き、ブロックサイズの情報が格納されている。診断部33は、このブロックサイズの情報を用いて、効率よくSSDのパトロール診断を行う。
【0032】
次に診断部33によるパトロール診断処理の流れについて説明する。
図5は、本発明の一実施形態によるパトロール診断処理の一例を示すフローチャートである。
診断部33は、例えば、所定の周期で所定回数だけドライブ#0〜#nに対するパトロール診断を行うものとする。
図5のフローチャートは、そのうちの1回のパトロール診断処理を示している。例えば、診断部33は、所定の周期で、以下に説明する処理を所定回数だけ行ってもよい。
パトロール診断を行うべきタイミングが到来すると、まず、診断部33は、ドライブ情報記憶テーブル22を参照し(ステップS201)、診断アドレスを取得する(ステップS202)。具体的には、診断部33は、ドライブ情報記憶テーブル22の診断対象ドライブにおける「パトロール診断アドレス」フィールドの値を読み出す。
【0033】
次に診断部33は、診断アドレスに対する診断を実施する(ステップS203)。具体的には、診断部33は、コマンド発行部31へ、診断アドレスに対する診断用コマンドの発行を指示する。コマンド発行部31は、指示されたアドレスへリードコマンド又はベリファイコマンドを発行する。診断部33は、発行されたコマンドに対する応答を取得して、診断アドレスが故障しているかどうかを判定する。例えば、診断部33は、コマンドに対して所定時間内に応答がある場合、故障していないと判定する。また、例えば、診断部33は、所定時間内に応答が無い場合やエラーコードが返ってきた場合、当該アドレスは故障していると判定する。
【0034】
今回の診断アドレスに対する診断を終えると、診断部33は、次回診断するアドレスを決定する。まず、診断部33は、ドライブ情報記憶テーブル22を参照し、ブロックサイズの情報を取得する。具体的には、診断部33は、ドライブ情報記憶テーブル22の診断対象ドライブにおける「NANDブロックサイズ」フィールドの値を参照する。診断部33は、ブロックサイズの登録の有無を判定する(ステップS204)。ブロックサイズの登録が有る場合とは、ドライブがSSDで、且つブロックサイズを取得できた場合である。ブロックサイズの登録が無い場合とは、ドライブがHDD、又は、ドライブがSSD且つブロックサイズが取得できなかった場合である。
【0035】
(SSDでブロックサイズが判明している場合)
ブロックサイズの登録が有る場合(ステップS204;Yes)、診断部33は、ブロックサイズ(「NANDブロックサイズ」フィールドの値)をドライブ情報記憶テーブル22から、読み出して取得する(ステップS206)。診断部33は、診断アドレスをブロックアドレス分進める(ステップS207)。例えば、診断部33は、今回の診断アドレスに、取得したブロックサイズを加算する。加算後の値は、次のブロックに含まれるアドレスである。診断部33は、加算後の値で「パトロール診断アドレス」フィールドの値を更新する。更新後の値は、次回の診断対象のアドレスである。
【0036】
(HDD、又は、SSDでブロックサイズ不明の場合)
ブロックサイズの登録が無い場合(ステップS204;No)、診断部33は、診断アドレスを診断セクタ分進める(ステップS205)。例えば、診断部33は、今回の診断アドレスに、今回診断を行ったセクタ分のアドレスを加算する。例えば、1セクタ分の診断を行ったのであれば、1セクタ分進めた次セクタのアドレスを算出する。診断部33は、算出した値で「パトロール診断アドレス」フィールドの値を更新する。更新後の値は、次回の診断対象のアドレスである。
【0037】
なお、ステップS205、S207の処理で、パトロール診断アドレスがドライブ情報記憶テーブル22のドライブ容量(「容量」フィールドの値)よりも大きい値であれば、診断部33は、「パトロール診断アドレス」フィールドに「0」を格納して、次回の診断は先頭から実施する。
【0038】
以上の処理により、診断部33は、今回の診断を完了する(ステップS208)。
このように診断部33は、診断対象がSSDでブロックサイズが判明している場合、ブロック単位で診断を行うことができるので、1回当たりの診断を短時間で行うことができる。また、ブロックの代表アドレスへ1回診断処理を行うだけでよいので、SSDの全領域に渡る診断についても短時間で完了することができる。また、診断対象がSSDでブロックサイズが不明な場合や診断対象がHDDの場合でも、一般的なパトロール診断と同様に診断を行うことができるので、ドライブ群40に含まれるドライブのタイプに関わらず、パトロール診断を行うことができる。
【0039】
複数のドライブを搭載し、それらをRAID構成で管理しているディスクアレイ装置に大容量ドライブが含まれる場合、全アドレスの診断に時間を要し、診断処理の完了前に故障が発生するというリスクがある。これに対し、本実施形態によれば、ドライブにSSDが含まれている場合、当該SSDのNANDチップの構成情報を取得し、記憶する領域を設ける。そして、パトロール診断を行うときには、ブロックごとに1つのアドレスの診断だけを行う処理を各ブロックに対して行う。これにより、SSDが大容量ドライブであっても短時間で効率的に全領域に対するパトロール診断を完了することができる。従って、大容量ドライブの場合に起こりがちな全アドレスの診断に時間を要し、診断処理の完了前に故障が発生するというリスクを低減し、早期な故障検知が可能になる。
【0040】
図8は、本発明の一実施形態における制御装置の最小構成を示す図である。
図示するように制御装置200は、少なくとも診断部201を備える。
診断部201は、ドライブ(記憶装置)に対してパトロール診断を行う機能を有している。診断部201は、対象の記憶装置がSSDの場合、ブロック単位でパトロール診断を行う。例えば、SSDがブロック0〜ブロックnで構成されている場合、診断部201は、ブロック0の任意のアドレスに対して診断を行い、ブロック0が故障しているかどうかを判定する。すると診断部201は、次にブロック1の任意のアドレスに対して1回の診断を行い、故障検知を行う。以下、同様に診断部201は、ブロック2〜nに対して、それぞれのブロックを代表するアドレスを任意に選択して、各ブロックに対して1回だけ診断を行う。これにより、SSDが大容量で、且つ、多数のSSDを対象にパトロール診断を行わなければならない状況でも、ストレージの全領域について1アドレスずつ全アドレスに対して診断を行う場合と比較して大幅に診断時間を削減することができる。
図1の構成と対比すると、制御装置200はドライブ制御部30、診断部201は診断部33に相当する。
【0041】
その他、本発明の趣旨を逸脱しない範囲で、上記した実施の形態における構成要素を周知の構成要素に置き換えることは適宜可能である。また、この発明の技術範囲は上記の実施形態に限られるものではなく、本発明の趣旨を逸脱しない範囲において種々の変更を加えることが可能である。
例えば、SSDに対する診断は、各ブロックに対して少なくとも1回(1アドレス)行えばよいが、その回数は1回に限定されない。パトロール診断の実行時間を短縮できる効果が得られる回数であればよい。例えば、各ブロックに対して2〜3回の診断を行ってもよい。また、ブロックに対する診断を行うアドレスは、必ずしも、今回診断を行ったアドレスにブロックサイズを加算した値に限定されない。例えば、今回診断を行ったアドレスにブロックサイズを加算した値から1を引いた値であってもよい。また、INQUIRYコマンドの発行によるドライブ情報記憶テーブル22へのドライブの構成情報の登録は、ドライブ挿入時に限定されない。なお、コマンド発行部31は、構成情報取得部の一例である。ドライブ#0〜#nは、記憶装置の一例である。