ストレージ制御装置及びストレージ装置のデータ回復方法
【課題】煩雑な作業を削減し、誤動作を防止する。
【解決手段】リカバリ対応表11aにリカバリ範囲が未登録のストレージの機種があるとき、リカバリ範囲検出手段12は、このストレージに格納されるエラー検出符号を書き換え、媒体エラーを発生させる。そして、ブロック単位ごとに媒体エラーの有無を調べ、エラー発生領域を検出し、リカバリ範囲を特定する。特定されたリカバリ範囲は、ストレージの機種に対応付けてリカバリ対応表11aに登録する。リカバリ処理手段13は、媒体エラー発生時、リカバリ対応表11aに基づいてリカバリの対象領域を特定し、リカバリ処理を行う。
【解決手段】リカバリ対応表11aにリカバリ範囲が未登録のストレージの機種があるとき、リカバリ範囲検出手段12は、このストレージに格納されるエラー検出符号を書き換え、媒体エラーを発生させる。そして、ブロック単位ごとに媒体エラーの有無を調べ、エラー発生領域を検出し、リカバリ範囲を特定する。特定されたリカバリ範囲は、ストレージの機種に対応付けてリカバリ対応表11aに登録する。リカバリ処理手段13は、媒体エラー発生時、リカバリ対応表11aに基づいてリカバリの対象領域を特定し、リカバリ処理を行う。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージ制御装置及びストレージ装置のデータ回復方法に関し、特に、冗長化されたストレージ群を管理し、媒体エラー発生時のデータ回復処理を行うストレージ制御装置及びストレージ装置のデータ回復方法に関する。
【背景技術】
【0002】
近年、ストレージ装置の大容量化が急速に進んでおり、ストレージ故障時に受ける被害はますます大きくなっている。このようなデータ損失を防ぎ、処理性能を向上するための技術として、RAID(Redundant Array of Inexpensive Disks)がある。また、近年、半導体記憶装置の大容量化と低価格化も急速に進んでおり、従来ハードディスク(HDD;Hard Disk Drive)で構成することが一般的であったRAID装置にも搭載されるようになってきている。このような半導体ディスク装置として、SSD(Solid State Drive)がある。SSDは、フラッシュメモリを利用した記憶装置で、高速、省電力、小型・計量、耐衝撃性などの特徴がある。
【0003】
一般に、半導体ディスク装置へのデータ書き込みの際には、データに誤り訂正符号(ECC;Error Correction Code)が付加される。データの読み出し時には、ECCを用いたデータのエラー検出と訂正処理が行われる。このECCを算出するデータ範囲は、半導体ディスク装置の製品の種別ごとに固有の値が設定されている。例えば、SSDのデータ領域の管理単位であるブロックごと、あるいは連続するブロックをまとめて、2ブロックまたは4ブロックごとなど、各々最適な範囲が設定される。また、バッファメモリから転送される単位量のデータをさらに複数のバンクに分割し、バンクごとにECCを設定する半導体ディスク装置がある。(例えば、特許文献1参照)。以下、製品の種別を機種と呼ぶ。機種は、例えば、製品に設定される型名または型番によって識別することができる。
【0004】
また、ECCなどのエラー検出符号によって媒体エラーが検出されたとき、RAID装置では、ストレージ制御装置が、冗長構成をとる他のストレージのデータを用いて、エラーが検出されたストレージ内のデータを回復する。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開平10−207726号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかし、従来のストレージ制御装置では、予めリカバリ範囲の設定が必要になるという問題がある。
RAID装置のデータ回復処理(以下、リカバリ処理とする)では、媒体エラーとなったデータ領域を含むエラー検出符号の対象範囲全体をリカバリ範囲として処理が行われる。例えば、エラー検出符号が2ブロック単位で生成される場合は、媒体エラーが検出された領域を含むエラー検出符号の対象領域である2ブロックがリカバリ範囲となる。また、2ブロック対応のリカバリ処理も必要となる。このため、リカバリ処理を制御するストレージ制御装置に対し、予めリカバリ範囲を登録しておくことが必要であった。
【0007】
特に、半導体ディスク装置は、機種ごとに固有のリカバリ範囲が設定され、かつ、後から変更することは難しい。このため、RAID構成に半導体ディスク装置を含む場合には、半導体ディスク装置の機種の仕様を調べ、事前に機種固有のリカバリ範囲の登録を行うという作業が必要であった。さらに、新規機種の追加や、機種が交換されたときは、リカバリ範囲に関する登録情報を変更しなければならなかった。しかしながら、機種変更や機種追加の度にリカバリ範囲を登録する作業は、非常に煩わしいものである。また、人手による作業であるため登録ミスや登録忘れもあり、このような場合には、ストレージ装置が誤動作する恐れがあった。なお、半導体ディスク装置に限らず、ストレージが格納するデータに対し、固有のエラー検出符号を付加する場合には、同様の問題が発生する。
【0008】
上記課題を解決するために、リカバリ範囲を自動で検出してデータ回復処理を行うことにより、煩雑な作業が削減され、かつ、誤動作の防止が可能なストレージ制御装置及びストレージ装置のデータ回復方法、が提供される。
【課題を解決するための手段】
【0009】
上記課題を解決するために、記憶手段と、リカバリ範囲検出手段と、リカバリ処理手段とを有し、冗長化されたストレージ群を管理し、媒体エラー発生時のデータ回復処理を行うストレージ制御装置が提供される。ストレージ群は、データ書き込み時、所定のリカバリ範囲ごとにデータのエラー検出符号を生成し、データとエラー検出符号とを対応付けて物理記憶領域に格納するストレージを有する。記憶手段には、ストレージ群について、ストレージ群に属するストレージと、ストレージに設定されるリカバリ範囲の大きさとが対応付けて登録されるリカバリ対応表が格納される。リカバリ範囲検出手段は、リカバリ対応表に未登録のストレージが検出されたときは、対応表に未登録のストレージの物理記憶領域に格納される任意のエラー検出符号を書き換える。エラー検出符号を書き換えたストレージの物理記憶領域のうち、エラー検出符号の書き換えによって媒体エラーが発生したエラー発生領域を検出する。そして、検出されたエラー発生領域をリカバリ範囲として特定し、特定されたリカバリ範囲をストレージに対応付けてリカバリ対応表に登録する。リカバリ処理手段は、通常運転時に媒体エラーが発生したときは、媒体エラーの生じたデータ領域と、データ領域に対応する故障ストレージとを検出する。また、リカバリ対応表を用いて故障ストレージに対応するリカバリ範囲を特定し、リカバリ範囲に基づいて媒体エラーの生じたデータ領域を含むデータ回復対象のリカバリ領域を算出する。そして、冗長化された他のストレージに格納されるデータを用いてリカバリ領域のデータの回復処理を行う。
【0010】
また、上記課題を解決するために、上記ストレージ制御装置と同様の処理手順を実行するストレージ装置のデータ回復方法が提供される。
【発明の効果】
【0011】
開示のストレージ制御装置及びストレージ装置のデータ回復方法によれば、リカバリ範囲が自動で検出されてリカバリ対応表に登録され、媒体エラー発生時にはリカバリ対応表を用いてリカバリ領域が特定されてデータ回復処理が行われる。これにより、予め登録するという煩雑な作業を削減し、かつ登録ミスによるストレージ装置の誤動作を防止することができる。
【図面の簡単な説明】
【0012】
【図1】第1の実施の形態のストレージ装置の構成例を示した図である。
【図2】リカバリ範囲の一例を示した図である。
【図3】リカバリ対応表の一例を示した図である。
【図4】第2の実施の形態のマルチノードディスクシステムの構成例を示した図である。
【図5】制御ノードのハードウェア構成例を示した図である。
【図6】ECCの書き換え手順の一例を示した図である。
【図7】リカバリブロック数の検出処理の一例を示した図である。
【図8】媒体エラー発生時のリカバリ処理の一例を示した図である。
【図9】リカバリ範囲検出処理の手順を示したフローチャートである。
【図10】最大LBA特定処理の手順を示したフローチャートである。
【図11】媒体エラー発生時のリカバリ処理の手順を示したフローチャートである。
【発明を実施するための形態】
【0013】
以下、実施の形態を、図面を参照して説明する。
図1は、第1の実施の形態のストレージ装置の構成例を示した図である。
ストレージ装置は、ストレージ制御装置1と、複数のストレージ20a,20b,20cを有するストレージ群2とを有する。
【0014】
まず、ストレージ群2について説明する。ストレージ群2を構成するストレージ20a,20b,20cは、冗長化されており、いずれかのストレージのデータ領域のデータに異常が検出されたときは、他のストレージの冗長データを用いて異常検出のデータ領域のデータを回復することができる。ストレージ20a,20b,20cの物理記憶領域は、所定のブロック単位に分割されて管理される。また、ストレージ20a,20b,20cは、データを物理記憶領域に書き込む際、1または連続する所定のブロック数ごとにエラー検出符号を生成し、データとともに物理記憶領域に格納する。何ブロックごとにエラー検出符号を生成するかは、予めストレージごとに決められている。この範囲は、ストレージの製品種別、すなわち機種ごとに固有となっている場合が多い。なお、エラー検出符号が生成される範囲は、リカバリ処理の対象のリカバリ範囲になる。エラー検出符号としては、ECCなどが用いられる。
【0015】
ストレージ制御装置1は、記憶手段11、リカバリ範囲検出手段12、リカバリ処理手段13及びアクセス手段14を有し、ストレージ群2に属するストレージ20a,20b,20cに媒体エラーが発生したときのデータ回復処理などを行う。
【0016】
記憶手段11には、リカバリ範囲検出手段12が生成したリカバリ対応表11aが格納される。リカバリ対応表11aには、ストレージ20a,20b,20cに対応付けて、それぞれがリカバリ処理を一括して行わなければならないリカバリ範囲の大きさが登録される。なお、リカバリ範囲は、ストレージの機種ごとに予め固有の値で設定されている場合が多い。そこで、リカバリ対応表11aでは、ストレージの機種に対応付けてリカバリ範囲の大きさを登録するとしてもよい。リカバリ範囲の大きさがストレージの機種に対応付けられているリカバリ対応表11aを用いるときは、対象のストレージの機種を特定し、特定されたストレージの機種に基づいてリカバリ対応表11aを検索する。
【0017】
リカバリ範囲検出手段12は、ストレージ群2に属するストレージ20a,20b,20cの機種ごとにリカバリ範囲を検出し、リカバリ対応表11aに登録する処理を行う。一般に、リカバリ範囲はストレージの機種固有であるので、リカバリ範囲の検出はストレージの1機種につき、1回行えばよい。リカバリ範囲の検出では、まず、対象ストレージの物理記憶領域に格納されるエラー検出符号を壊し、意図的に媒体エラーを発生させる。媒体エラーは、ストレージ20a,20b,20cがデータの読み出し要求を受けた時などに、読み出したデータから生成したエラー検出符号と、物理記憶領域に格納されるエラー検出符号とが不一致のときに発生する。エラー検出符号が破壊されると、対応するリカバリ範囲に該当する領域からデータを読み出したとき、媒体エラーが発生する。そこで、対象ストレージからデータを順次読み出し、媒体エラーが発生したエラー発生領域を検出する。そして、検出されたエラー発生領域に基づいて、リカバリ範囲を特定する。リカバリ範囲は、リカバリの対象となるサイズを示し、ブロック数やブロック数に応じた設定値で表される。特定されたリカバリ範囲は、処理を行ったストレージの機種に対応付けてリカバリ対応表11aに登録する。なお、媒体エラーの発生確認は、媒体エラーがチェックされる単位、例えば、ブロック単位で行う。詳細は、後述する。
【0018】
リカバリ処理手段13は、通常処理において、媒体エラーが検出されたとき、媒体エラーが発生したデータ領域を含むリカバリ領域のデータを回復させる。アクセス要求の応答として媒体エラーが検出されたときは、アクセス要求に基づいてデータ領域と、ストレージとを特定する。また、媒体エラーを通知した応答に媒体エラーの発生箇所が設定されているときは、これを用いて特定してもよい。こうして、エラー発生のストレージと、エラーのデータ領域とが特定された後は、エラー発生のストレージの機種を特定し、リカバリ対応表11aを検索して、このストレージの機種に対応するリカバリ範囲の大きさを抽出する。そして、抽出されたリカバリ範囲と、媒体エラーが検出されたデータ領域に基づいて、リカバリ領域を決定する。例えば、リカバリ範囲が2ブロックの場合は、媒体エラーが発生したデータ領域を含む2ブロックがリカバリ領域になる。そして、リカバリ領域を冗長構成に基づいて復元されるデータで上書きし、データの回復を行う。
【0019】
アクセス手段14は、リカバリ処理手段13及びリカバリ範囲検出手段12からの指示に従って、ストレージ群2に属するストレージ20a,20b,20cへ読み出し(R)要求または書き込み(W)要求を送信し、応答を受信する。エラーが発生したときは、応答にエラー通知が含まれる。受信した応答とエラー通知は、要求元のリカバリ範囲検出手段12及びリカバリ処理手段13に転送する。
【0020】
このような構成のストレージ装置の動作及びデータ回復方法について説明する。ここでは、リカバリ範囲は機種ごとに固有であるとする。
ストレージ群2のストレージ20a,20b,20cは、それぞれ機種固有のリカバリ範囲が設定されている。図2は、リカバリ範囲の一例を示した図である。(A)は2ブロックでエラー検出符号作成の場合、(B)は4ブロックでエラー検出符号作成の場合、(C)は8ブロックでエラー検出符号作成の場合、を示している。なお、図はブロックとエラー検出符号の関係を示したもので、物理記憶領域の構成を示すものではない。エラー検出符号は、物理記憶領域の任意の領域に格納される。
【0021】
(A)2ブロックでエラー検出符号作成の場合では、ブロック#0〜#1、ブロック#2〜#3というように、2ブロック単位でエラー検出符号が作成される。従って、リカバリ範囲201は、2ブロックになる。例えば、ブロック#0〜#1に対応するエラー検出符号が壊されると、ブロック#0及びブロック#1で媒体エラーが発生する。ブロック#2〜#3は正常に読み出すことができる。
【0022】
(B)4ブロックでエラー検出符号作成の場合では、ブロック#0〜#3、ブロック#4〜#7というように、4ブロック単位でエラー検出符号が作成される。従って、リカバリ範囲202は、4ブロックになる。例えば、ブロック#0〜#3に対応するエラー検出符号が壊されると、ブロック#0〜#3のすべてで媒体エラーが発生する。ブロック#4〜#7は正常に読み出すことができる。
【0023】
(C)8ブロックでエラー検出符号作成の場合では、ブロック#0〜#7というように、8ブロック単位でエラー検出符号が作成される。従って、リカバリ範囲203は、8ブロックになる。例えば、ブロック#0〜#7に対応するエラー検出符号が壊されると、ブロック#0〜#7のすべてで媒体エラーが発生する。
【0024】
ストレージ制御装置1の動作について説明する。
ストレージ制御装置1の立ち上がり時、あるいは、新たなストレージが接続されたとき、リカバリ範囲検出手段12が処理を開始する。リカバリ範囲検出手段12は、記憶手段11からリカバリ対応表11aを読み出し、管理下のストレージ20a,20b,20cの機種について、リカバリ範囲が登録されているか否かを照合する。未登録の機種があったときは、この機種に該当するストレージを用いてリカバリ範囲を検出する。ここで、ストレージ20aの機種が未登録であるとする。リカバリ範囲検出手段12は、アクセス手段14を介してストレージ20aに格納される任意のリカバリ範囲に対応するエラー検出符号を書き換え、エラー検出符号を破壊する。例えば、任意のブロックのデータを読み出し、付加されるエラー検出符号を書き換え、当該ブロックのデータとともに書き込んで、エラー検出符号を壊す。
【0025】
続いて、媒体エラーのエラー発生領域を検出する。アクセス手段14を介してブロックのデータを順次読み出し、媒体エラーの発生有無をチェックする。例えば、図2の例でブロック#1を対象範囲とするエラー検出符号を壊したとする。ブロック#0から順次データ読み出しを行うと、(A)の場合は、ブロック#0〜#1で媒体エラーが発生し、ブロック#2で正常となる。(B)の場合は、ブロック#0〜#3で媒体エラーが発生し、ブロック#4で正常となる。(C)の場合は、ブロック#0〜#7で媒体エラーが発生し、ブロック#8で正常となる。このようにエラー発生領域を検出すれば、リカバリ範囲が特定される。(A)の場合は2ブロック、(B)の場合は4ブロック、(C)の場合は8ブロックになる。特定されたリカバリ範囲は、リカバリ対応表11aに登録される。
【0026】
図3は、リカバリ対応表の一例を示した図である。
リカバリ対応表110は、ストレージ機種110aに対応付けて、リカバリ範囲としてリカバリブロック数110bが登録されている。例えば、ストレージ機種「XXXXXX」は、リカバリブロック数が「2ブロック(Block)」である。
【0027】
リカバリ処理手段13は、媒体エラーが通知されたときは、媒体エラーが発生したストレージ及びデータ領域を特定する。そして、リカバリ対応表11aを参照してこのストレージの機種に設定されるリカバリ範囲を特定し、リカバリ範囲とデータ領域からリカバリ領域を特定する。さらに、リカバリ領域のデータを冗長構成に基づいて復元し、復元データをリカバリ領域に上書きしてデータ回復処理を行う。
【0028】
上記のストレージ制御装置及びそのストレージ装置のデータ回復方法によれば、ストレージの機種に固有のリカバリ範囲が自動検出され、リカバリ対応表に登録される。そして、ストレージに媒体エラー発生時には、リカバリ対応表に基づいてリカバリ範囲のデータが回復される。このように、利用者が予め機種ごとのリカバリ範囲を登録しておかなくてもよいため、利用者に掛かる負担を削減し、利用者の利便性を向上させることができる。同様に、新たにストレージを追加する際の利用者の作業も軽減することができる。また、人手による作業ではないため、登録ミスや登録忘れを防止することが可能であり、結果として、ストレージ装置の誤動作を防ぐこともできる。
【0029】
以下、発明の実施の形態をRAID構成のマルチノードディスクシステムの場合で説明する。このマルチノードディスクシステムは、RAID0を除くすべてのRAIDレベルについて適用することができる。
【0030】
図4は、第2の実施の形態のマルチノードディスクシステムの構成例を示した図である。
マルチノードディスクシステムは、ネットワーク600を介して、制御ノード100、複数のディスクノード210,220、管理ノード300及びアクセスノード400が接続されている。
【0031】
制御ノード100は、ディスクノード210,220及びSSD211,212,221,222を管理するストレージ制御装置として機能する。そして、仮想的な論理ボリュームを、物理記憶領域を備えたSSD211,212,221,222に割り当てる割当制御や、SSD211,212,221,222に格納されるデータのエラー検出時にデータを回復させるデータ回復処理を行う。
【0032】
ディスクノード210にはSSD211,212、ディスクノード220にはSSD221,222、がそれぞれ接続されている。SSD211,212,221,222の物理記憶領域は、ブロック単位に分割されている。ディスクノード210,220は、例えば、IA(Intel Architecture)と呼ばれるアーキテクチャのコンピュータである。そして、接続されたSSD211,212,221,222に格納されるデータをアクセスノード400経由で端末装置に提供する。ブロック単位のデータ書き込み要求時には、SSD211,212,221,222の機種ごとに決まっている1または連続する複数のブロックごとにECCを作成し、データとともにSSD物理記憶領域に格納する。データ読み出し要求時には、ECCを用いたデータチェックを行い、データのエラーチェック結果とともに読み出しデータをアクセスノード400経由で端末装置に返す。ECC異常が検出されたときは、媒体エラーを発生させる。なお、図4では、ディスクノード210,220が複数のSSDを管理するとしたが、個々のSSDがディスクノード210,220の機能を有するとしてもよい。
【0033】
アクセスノード400は、ディスクノード210,220のそれぞれが管理しているデータの格納場所を認識しており、ネットワーク500を介して入力される端末装置からの要求に応答して、ディスクノード210,220へデータアクセスを行う。
【0034】
管理ノード300は、マルチノードディスクシステム全体を管理する。また、管理者の指示に従って、論理ボリュームの割当指示を制御ノード100に通知する。
次に、各ノードのハードウェア構成を、制御ノード100を例に説明する。
【0035】
図5は、制御ノードのハードウェア構成例を示した図である。
制御ノード100は、CPU(Central Processing Unit)101によって装置全体が制御されている。CPU101には、バス105を介してRAM(Random Access Memory)102、HDD103及び通信インタフェース104が接続されている。
【0036】
RAM102には、CPU101に実行させるOSやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM102には、CPU101による処理に必要な各種データが格納される。HDD103には、OSやアプリケーションのプログラムが格納される。通信インタフェース104は、ネットワーク600に接続されている。通信インタフェース104は、ネットワーク600を介して、ディスクノード210,220、管理ノード300及びアクセスノード400など、マルチノードディスクシステムを構成する他のコンピュータとの間でデータの送受信を行う。
【0037】
なお、図5には、制御ノード100のハードウェア構成を示したが、ディスクノード210,220、管理ノード300及びアクセスノード400のハードウェア構成も同様である。
【0038】
上記の構成のマルチノードディスクシステムにおける制御ノード100のデータ回復処理について、具体例を用いて説明する。
システムの立ち上がり時、制御ノード100は、管理下のSSD211,212,221,222に関するリカバリ範囲情報を持っているかどうかを確認する。リカバリ対応表を検索し、管理下のSSD211,212,221,222の機種が登録されているかどうかを確認する。登録されていない機種があれば、リカバリ範囲検出処理を起動する。また、動作中に、新たにSSDが追加されたときや交換された場合も、同様のチェックを行い、リカバリ対応表に未登録のSSDがあれば、リカバリ範囲検出処理を起動する。
【0039】
リカバリ範囲検出処理では、ECCを壊してECC異常を発生させ、ECC異常が発生したエラー発生領域に属するブロックの数を計測し、リカバリ対象のリカバリブロック数を検出する。ECCを壊すとは、ECCと、ECCの対象領域のデータとの関係を不整合にすることであり、ここでは正常なECCの値を書き換えることによって壊す。
【0040】
図6は、ECCの書き換え手順の一例を示した図である。
図6のECC2020は、ブロック#0〜#3の4ブロックのデータに基づいて生成され、SSDの記憶領域に格納されている。
【0041】
ECCの書き換えのため、メモリ上にある程度の余裕を持たせた適当な大きさのバッファを用意し、SCSI(Small Computer System Interface)の“read longコマンド”で1ブロックのデータを読み出す(1)。図6の例では、ブロック#1の部分を読み出している。コマンドを受け取ったSSDは、ブロック#1のデータに、ECCを付加した応答を返す。図6の例では、SSDからの読み出しデータとして、ブロック#1のデータ512バイト(B)と、Nバイト(B)のECC2022を受信する。読み出しデータに付加されてくるECCのサイズは、SSDの機種により異なる。SSDから“read longコマンド”を用いて読み出すときは、「1ブロックのバイト数+ECCのバイト数」を正確に指定しなければ、正常応答が返らない。このため、実際には、「1ブロックのバイト数+1バイト」から始めて、正常な応答が得られるまで、ECCのバイト数を1バイトずつ増やしながら、“read longコマンド”を発行する。なお、ブロック#1に付加されたECC2022は、ECC2020と同じであり、ブロック#0〜#3を対象範囲として生成されたものである。
【0042】
続いて、ECCの一部を壊す(2)。例えば、受信してバッファに格納されるECC2022の最後の1バイトを違う値に変更する。最後の1バイトについてビット反転を行うなどして、ECCを壊し、ECC2023を作成する。
【0043】
そして、壊したECC2023と、(1)で読み出したブロック#1のデータとを、“write longコマンド”を用いて書き込む(3)。例えば、ブロック#1の部分について、「1ブロックのバイト数+ECCのバイト数」を指定して書き込む。なお、“write longコマンド”によるデータ書き込みでは、ECCは再計算されない。
【0044】
こうして、書き換えられたECC2023が、ブロック#0〜#3のECCとしてSSDに書き込まれる。これによって、ブロック#0〜#3の4ブロックすべてについて、データを読み出したときにECC異常が発生する。
【0045】
リカバリブロック数の検出処理について説明する。図7は、リカバリブロック数の検出処理の一例を示した図である。
図7では、例としてSSDをSSD211、検出するリカバリブロック数は4であるとしている。
【0046】
リカバリブロック数の計測処理では、ある程度のまとまった空き領域にリカバリ範囲検出用の計測領域を確保する。計測領域として、リカバリ範囲として予測される最大の領域が含まれる領域を用意する。例えば、256ブロック分のデータを格納できるような領域が用意される。また、予めSSD211にこのような空き領域が用意されているとしてもよい。
【0047】
図7の例では、SSD211の空き領域に、256ブロック分の計測領域2110が確保される。また、SSD211のブロックは、ブロック#0から順に番号が付与されているとし、計測領域2110に含まれる最小のブロック番号(以下、LBA(Logical Block Address)とする)は、1022であるとする。すなわち、計測領域2110のブロック番号は、LBA1022〜LBA1278になる。
【0048】
次に、計測領域2110全体を、“writeコマンド”で上書きしておく。“writeコマンド”を用いれば、データの上書き処理時、リカバリブロック数ごとにECCが作成される。また、計測領域2110全体を“readコマンド”で読み出し、ECC異常などのエラーが発生していないことを確認する。
【0049】
こうして準備が整った後、計測領域2110の任意のブロック、例えば中央の1ブロックを対象ブロックとして、“read longコマンド”によってECCを含むデータを読み出す。図7の例では、計測領域2110のブロックのうち、128番目のブロック(LBA1150)2111が選択され、1ブロック分のデータとECCとが読み出される。続いて、読み出したECCを図6の手順で壊し、読み出したブロック2111のデータと、最後の1バイトを書き換えたECCとを“write longコマンド”で上書きする。こうして、ブロック2111を含むリカバリブロック数のブロックにECC異常が発生するようになる。
【0050】
ECC異常が発生するブロックを検出するため、対象ブロック(LBA1150)2111を中心として、前方向及び後方向に順次ECC異常が発生しているかどうかを確認する。なお、前方向とは、LBAが小さくなる方向をいい、後方向はその逆である。
【0051】
図7の例では、“write longコマンド”を行った対象ブロック(LBA1150)2111の後方向に次のブロック(LBA1151)2112について“readコマンド”を用いてデータ読み出しを行う。ここでは、ECC異常(NG)が検出される。ECC異常が検出されたときは、後方向に次のブロック(LBA1152)2113について“readコマンド”を用いてデータ読み出しを行う。ここでは、正常応答(OK)が得られる。このように、正常応答が返るまで、後方向に順番にブロックのデータ読み出しを繰り返す。そして、ECC異常が検出された最大LBAのブロック、図7の例ではブロック(LBA1151)2112を記憶しておく。また、ECC異常が検出された最大LBAのブロックまでにECC異常を検出したブロック数(この場合は1)を記憶しておくとしてもよい。
【0052】
次に、前方向についても同様の処理を行う。図7の例では、対象ブロック(LBA1150)2111から前方向に、ブロック(LBA1149)2114、ブロック(LBA1148)2115、ブロック(LBA1147)2116と、“readコマンド”を用いてデータ読み出しを行う。ここでは、ブロック(LBA1149)2114からはECC異常(NG)応答、ブロック(LBA1148)2115からはECC異常(NG)応答、ブロック(LBA1147)2116からは正常(OK)応答が得られている。そして、ECC異常が検出された最小LBAのブロック、図7の例ではブロック(LBA1148)2115を記憶しておく。また、ECC異常が検出された最小LBAのブロックまでにECC異常を検出したブロック数(この場合は2)を記憶しておくとしてもよい。
【0053】
こうして、ECC異常範囲は、ブロック(LBA1148)2115から(LBA1151)2112であることが検出される。リカバリ範囲は、LBAから、1151−1148+1=4と算出することができる。また、ECC異常を検出した後方向のブロック数(1)、前方向のブロック数(2)及び対象ブロック数(1)を合算するとしてもよい。
【0054】
さらに、ECC異常範囲の開始ブロックのLBA「1148」が、リカバリブロック数「4」で割り切れるかどうかを確認する。SSD211は、LBA0からブロック数「4」ごとにリカバリ範囲が設定されるので、ECC異常範囲の開始ブロック、すなわち、リカバリ領域の開始ブロックのLBAは、リカバリブロック数で割り切れる。この例では、ECC異常範囲の開始ブロックのLBA「1148」はリカバリブロック数「4」で割り切れるので、検出されたリカバリブロック数は正しいと判定される。
【0055】
上記の処理により特定されたリカバリブロック数「4」は、SSD211の機種に対応付けてリカバリ対応表に登録される。
次に、媒体エラー(ECC異常)発生時のリカバリ処理について説明する。
【0056】
図8は、媒体エラー発生時のリカバリ処理の一例を示した図である。
SSD211のブロック(LBA513)2121に対し、“readコマンド”で読み出しを行ったとき、ECC異常が検出されたとする。リカバリ対応表から得られる、SSD211のリカバリブロック数「4」を用いて、ブロック(LBA513)2121を含むリカバリ領域を算出する。リカバリ領域の開始ブロックのLBAは、エラー発生ブロックのLBAをリカバリブロック数で割った余りを引いた値であり、リカバリのサイズはリカバリブロック数になる。ここでは、リカバリ開始ブロック(LBA512)2122からリカバリ終了ブロック(LBA515)2123までが、リカバリ領域となる。このリカバリ領域のデータを、1ブロックずつ冗長構成からリカバリし、4ブロック分をリカバリする。
【0057】
上記のマルチノードディスクシステムによれば、SSDの機種ごとに固有のリカバリブロック数がSSDの空き領域を利用して自動的に検出される。これにより、利用者の登録作業を削減することができる。また、空き領域を用いるため、システムの動作に影響を及ぼさずに処理が行われる。
【0058】
次に、制御ノード100のリカバリ範囲検出処理手順及びデータ回復処理手順について、フローチャートを用いて詳細に説明する。
図9は、リカバリ範囲検出処理の手順を示したフローチャートである。
【0059】
リカバリ対応表に未登録のSSD機種が検出され、処理が開始される。
[ステップS01] システム運用に利用されていない空き領域に設定したリカバリブロック数の計測領域が正常であるかどうかを確認する。計測領域にブロック単位でデータを上書きして、ECCを作成させる。続いて、ブロック単位でデータ読み出しを行って、ECC異常などのエラーが発生しないことを確認する。
【0060】
[ステップS02] ステップS01で準備した計測領域の中央の1ブロックを読み出し、読み出しECCを書き換え、“write longコマンド”で上書きすることによってECCを破壊する。
【0061】
[ステップS03] ステップS02により発生するECC異常範囲の終了ブロック、すなわち、ECC異常範囲でLBAが最大のブロックを検出する最大LBA特定処理を行う。詳細は後述する。
【0062】
[ステップS04] ステップS02により発生するECC異常範囲の開始ブロック、すなわち、ECC異常範囲でLBAが最小のブロックを検出する最小LBA特定処理を行う。詳細は後述する。
【0063】
[ステップS05] ステップS03で検出されたECC異常範囲の開始ブロックの最小LBAと、終了ブロックの最大LBAとに基づいて、リカバリブロック数を算出する。また、ECC異常を検出したブロック数を記録しておき、このブロック数と、“write longコマンド”を用いた対象ブロックの数(1)とを合わせた数として求めてもよい。
【0064】
[ステップS06] ステップS04で特定されたECC異常範囲の開始ブロックの最小LBAを、ステップS05で算出されたリカバリブロック数で割る。
[ステップS07] ステップS06の計算結果が整数であるかどうか、すなわち、割りきれるかどうかを判定する。整数であるときは、処理をステップS08に進める。整数でないときは、算出されたリカバリブロック数が誤っている可能性があるので、リカバリ対応表に登録せず処理を終了する。
【0065】
[ステップS08] ステップS07で正しいと判定されたリカバリブロック数を、SSDの機種に対応付け、リカバリ対応表に登録し、処理を終了する。
ここで、最大LBA特定処理について説明する。図10は、最大LBA特定処理の手順を示したフローチャートである。
【0066】
[ステップS31] “write longコマンド”を用いてECCを壊すための書き込みを行ったブロックの次のブロックのLBAを特定する。LBA=書き込みを行ったブロックのLBA+1と算出することができる。
【0067】
[ステップS32] 指定されたLBAに相当する対象ブロックのデータを“readコマンド”で読み出し、媒体エラー(ECC異常)が発生するかどうかを確認する。
[ステップS33] ステップS32のデータ読み出しによって、媒体エラーが検出されたときは、処理をステップS34に進める。媒体エラーが検出されなかったときは、処理をステップS35に進める。
【0068】
[ステップS34] 媒体エラーが検出されたときは、対象ブロックのLBAをインクリメントし、ステップS32に処理を戻す。
[ステップS35] 媒体エラーが検出されなかったときは、対象ブロックの1つ前のLBAをECC異常範囲の最大LBAとし、処理を終了する。
【0069】
最小LBA特定処理について説明する。最小LBA特定処理では、図10に示した最大LBA特定処理が、LBAをインクリメントしながらECC異常発生の範囲を検出するのに対し、LBAをディクリメントしながら同様の処理を行う。従って、図10の処理手順を以下のように読み替えれば、最小LBA特定処理の手順になる。ステップS31の「次のブロック」は、「前のブロック(LBA=書き込みを行ったブロックのLBA―1)」と読み替える。ステップS34の「LBAをインクリメント」は、「LBAをディクリメント」と読み替える。そして、ステップS35の「最大LBA=対象LBA―1」は、「最小LBA=対象LBA+1」と読み替える。
【0070】
次に、媒体エラー(ECC異常)発生時のリカバリ処理について説明する。図11は、媒体エラー発生時のリカバリ処理の手順を示したフローチャートである。
[ステップS101] 媒体エラー(ECC異常)が発生したSSDの機種を特定する。
【0071】
[ステップS102] リカバリ対応表を用いて、ステップS101で特定されたSSDの機種に対応するリカバリブロック数を抽出する。
[ステップS103] 媒体エラーが検出されたブロックのLBAから、リカバリ開始ブロックのLBAを算出する。リカバリ開始ブロックのLBAは、媒体エラーの発生LBAをリカバリブロック数で割った余りを、媒体エラーの発生LBAから引いた値として算出される。
【0072】
[ステップS104] ステップS103で算出されたLBAのブロックをリカバリ開始ブロックとし、リカバリ開始ブロックからリカバリブロック数分のブロックをリカバリの対象として、冗長構成に基づくリカバリ処理を行う。
【0073】
以上の処理手順が行われることにより、媒体エラーが発生したデータ領域のリカバリ処理が実現される。
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、ストレージ制御装置が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。
【0074】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD(Digital Versatile Disc)、CD−ROM(Compact Disc Read Only Memory)などの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【0075】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【0076】
以上の実施の形態に関し、さらに以下の付記を開示する。
(付記1) 冗長化されたストレージ群を管理し、媒体エラー発生時のデータ回復処理を行うストレージ制御装置において、
データ書き込み時、所定のリカバリ範囲ごとに前記データのエラー検出符号を生成し、前記データと前記エラー検出符号とを対応付けて物理記憶領域に格納するストレージを有する前記ストレージ群について、前記ストレージ群に属する前記ストレージと、前記ストレージに設定される前記リカバリ範囲の大きさとが対応付けて登録されるリカバリ対応表が格納される記憶手段と、
前記リカバリ対応表に未登録の前記ストレージが検出されたときは、該ストレージの物理記憶領域に格納される任意の前記エラー検出符号を書き換え、該ストレージの物理記憶領域のうち前記エラー検出符号の書き換えによって前記媒体エラーが発生したエラー発生領域を検出し、検出された前記エラー発生領域を前記リカバリ範囲として特定し、特定された前記リカバリ範囲を前記ストレージに対応付けて前記リカバリ対応表に登録するリカバリ範囲検出手段と、
通常運転時に前記媒体エラーが発生したときは、前記媒体エラーの生じたデータ領域と、前記データ領域に対応する故障ストレージとを検出するとともに、前記リカバリ対応表を用いて前記故障ストレージに対応する前記リカバリ範囲を特定し、前記リカバリ範囲に基づいて前記媒体エラーの生じたデータ領域を含むデータ回復対象のリカバリ領域を算出し、冗長化された他のストレージに格納されるデータを用いて前記リカバリ領域のデータの回復処理を行うリカバリ処理手段と、
を有することを特徴とするストレージ制御装置。
【0077】
(付記2) 前記リカバリ範囲は、前記ストレージの製品種別ごとに予め決められた固有の大きさに設定されており、前記リカバリ対応表は、前記ストレージの製品種別を識別可能にする機種に対応付けて前記リカバリ範囲の大きさが登録されている、
ことを特徴とする付記1記載のストレージ装置。
【0078】
(付記3) 前記リカバリ範囲は、前記ストレージの物理記憶領域を所定のサイズで分割したブロックを単位として、1または連続する複数ブロックが接続される領域であり、
前記リカバリ範囲検出手段は、前記エラー検出符号を書き換えた後、前記ストレージから前記ブロック単位でデータ読み出しを行い、前記データ読み出しのときに前記媒体エラーが発生したブロックの数を計測し、計測されたリカバリブロック数または前記リカバリブロック数に応じた設定値を前記リカバリ範囲とする、
ことを特徴とする付記1記載のストレージ制御装置。
【0079】
(付記4) 前記リカバリ範囲検出手段は、読み出し命令によって任意の前記ブロックのデータを読み出し、該ブロックのデータとともに読み出される該ブロックを含む前記リカバリ範囲に対応する前記エラー検出符号を書き換え、該ブロックの領域の直後の前記ブロックから後方向に順次前記媒体エラーの検出有無を確認して前記リカバリ範囲の終了ブロックを検出するとともに、該ブロックの領域の直前の前記ブロックから前方向に順次前記媒体エラーの検出有無を確認して前記リカバリ範囲の開始ブロックを検出し、検出された前記開始ブロックから前記終了ブロックの範囲を前記リカバリ範囲とする、
ことを特徴とする付記3記載のストレージ制御装置。
【0080】
(付記5) 前記リカバリ範囲検出手段は、前記リカバリ範囲として予測される最大のデータ領域と前記エラー検出符号の格納領域とをリカバリ範囲検出用の計測領域として、対象の前記ストレージの物理記憶領域のうちユーザが利用していない空き領域に確保し、前記最大のデータ領域に所定のデータを書き込んで前記最大のデータ領域に対応する前記エラー検出符号を生成させ、前記計測領域を用いて前記リカバリ範囲を特定する、
ことを特徴とする付記3〜4記載のストレージ制御装置。
【0081】
(付記6) 前記リカバリ範囲検出手段は、前記物理記憶領域の先頭ブロックから前記媒体エラーが発生した連続ブロックの直前のブロックまでのブロック数を計測したブロック数が、計測された前記リカバリブロック数の整数倍であるかどうかを判定し、整数倍でないと判定されたときは、前記リカバリブロック数を無効とする、
ことを特徴とする付記3〜5記載のストレージ制御装置。
【0082】
(付記7) 前記ストレージは、該ストレージの製品種別ごとに予め決められた固有の大きさに前記リカバリ範囲が設定されており、データ書き込み時に、前記リカバリ範囲ごとに誤り訂正符号を付加し、書き込みデータとともに、前記書き込みデータに対応付けて前記誤り訂正符号を前記物理記憶領域に格納する半導体ディスクである、
ことを特徴とする付記1〜6記載のストレージ制御装置。
【0083】
(付記8) 冗長化されたストレージ群を管理し、媒体エラー発生時のデータ回復処理を行うストレージ装置のデータ回復方法において、
リカバリ範囲検出手段が、データ書き込み時、所定のリカバリ範囲ごとに前記データのエラー検出符号を生成し、前記データと前記エラー検出符号とを対応付けて物理記憶領域に格納するストレージを有する前記ストレージ群について、前記ストレージ群に属する前記ストレージと、前記ストレージに設定される前記リカバリ範囲の大きさとが対応付けて登録されるリカバリ対応表が格納される記憶手段から前記リカバリ対応表を読み出し、前記リカバリ対応表に未登録の前記ストレージが検出されたときは、該ストレージの物理記憶領域に格納される任意の前記エラー検出符号を書き換え、該ストレージの物理記憶領域のうち前記エラー検出符号の書き換えによって前記媒体エラーが発生したエラー発生領域を検出し、検出された前記エラー発生領域を前記リカバリ範囲として特定し、特定された前記リカバリ範囲を前記ストレージに対応付けて前記リカバリ対応表に登録する手順と、
リカバリ処理手段が、通常運転時に前記媒体エラーが発生したときは、前記媒体エラーの生じたデータ領域と、前記データ領域に対応する故障ストレージとを検出するとともに、前記リカバリ対応表を用いて前記故障ストレージに対応する前記リカバリ範囲を特定し、前記リカバリ範囲に基づいて前記媒体エラーの生じたデータ領域を含むデータ回復対象のリカバリ領域を算出し、冗長化された他のストレージに格納されるデータを用いて前記リカバリ領域のデータの回復処理を行う手順と、
を実行することを特徴とするストレージ装置のデータ回復方法。
【0084】
(付記9) 冗長化されたストレージ群を管理し、媒体エラー発生時のデータ回復処理を行うコンピュータを機能させるストレージ装置のデータ回復処理プログラムにおいて、
前記コンピュータを、
データ書き込み時、所定のリカバリ範囲ごとに前記データのエラー検出符号を生成し、前記データと前記エラー検出符号とを対応付けて物理記憶領域に格納するストレージを有する前記ストレージ群について、前記ストレージ群に属する前記ストレージと、前記ストレージに設定される前記リカバリ範囲の大きさとが対応付けて登録されるリカバリ対応表が格納される記憶手段から前記リカバリ対応表を読み出し、前記リカバリ対応表に未登録の前記ストレージが検出されたときは、該ストレージの物理記憶領域に格納される任意の前記エラー検出符号を書き換え、該ストレージの物理記憶領域のうち前記エラー検出符号の書き換えによって前記媒体エラーが発生したエラー発生領域を検出し、検出された前記エラー発生領域を前記リカバリ範囲として特定し、特定された前記リカバリ範囲を前記ストレージに対応付けて前記リカバリ対応表に登録するリカバリ範囲検出手段、
通常運転時に前記媒体エラーが発生したときは、前記媒体エラーの生じたデータ領域と、前記データ領域に対応する故障ストレージとを検出するとともに、前記リカバリ対応表を用いて前記故障ストレージに対応する前記リカバリ範囲を特定し、前記リカバリ範囲に基づいて前記媒体エラーの生じたデータ領域を含むデータ回復対象のリカバリ領域を算出し、冗長化された他のストレージに格納されるデータを用いて前記リカバリ領域のデータの回復処理を行うリカバリ処理手段、
として機能させることを特徴とするストレージ装置のデータ回復処理プログラム。
【符号の説明】
【0085】
1 ストレージ制御装置
11 記憶手段
11a リカバリ対応表
12 リカバリ範囲検出手段
13 リカバリ処理手段
14 アクセス手段
2 ストレージ群
20a,20b,20c ストレージ
【技術分野】
【0001】
本発明は、ストレージ制御装置及びストレージ装置のデータ回復方法に関し、特に、冗長化されたストレージ群を管理し、媒体エラー発生時のデータ回復処理を行うストレージ制御装置及びストレージ装置のデータ回復方法に関する。
【背景技術】
【0002】
近年、ストレージ装置の大容量化が急速に進んでおり、ストレージ故障時に受ける被害はますます大きくなっている。このようなデータ損失を防ぎ、処理性能を向上するための技術として、RAID(Redundant Array of Inexpensive Disks)がある。また、近年、半導体記憶装置の大容量化と低価格化も急速に進んでおり、従来ハードディスク(HDD;Hard Disk Drive)で構成することが一般的であったRAID装置にも搭載されるようになってきている。このような半導体ディスク装置として、SSD(Solid State Drive)がある。SSDは、フラッシュメモリを利用した記憶装置で、高速、省電力、小型・計量、耐衝撃性などの特徴がある。
【0003】
一般に、半導体ディスク装置へのデータ書き込みの際には、データに誤り訂正符号(ECC;Error Correction Code)が付加される。データの読み出し時には、ECCを用いたデータのエラー検出と訂正処理が行われる。このECCを算出するデータ範囲は、半導体ディスク装置の製品の種別ごとに固有の値が設定されている。例えば、SSDのデータ領域の管理単位であるブロックごと、あるいは連続するブロックをまとめて、2ブロックまたは4ブロックごとなど、各々最適な範囲が設定される。また、バッファメモリから転送される単位量のデータをさらに複数のバンクに分割し、バンクごとにECCを設定する半導体ディスク装置がある。(例えば、特許文献1参照)。以下、製品の種別を機種と呼ぶ。機種は、例えば、製品に設定される型名または型番によって識別することができる。
【0004】
また、ECCなどのエラー検出符号によって媒体エラーが検出されたとき、RAID装置では、ストレージ制御装置が、冗長構成をとる他のストレージのデータを用いて、エラーが検出されたストレージ内のデータを回復する。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開平10−207726号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかし、従来のストレージ制御装置では、予めリカバリ範囲の設定が必要になるという問題がある。
RAID装置のデータ回復処理(以下、リカバリ処理とする)では、媒体エラーとなったデータ領域を含むエラー検出符号の対象範囲全体をリカバリ範囲として処理が行われる。例えば、エラー検出符号が2ブロック単位で生成される場合は、媒体エラーが検出された領域を含むエラー検出符号の対象領域である2ブロックがリカバリ範囲となる。また、2ブロック対応のリカバリ処理も必要となる。このため、リカバリ処理を制御するストレージ制御装置に対し、予めリカバリ範囲を登録しておくことが必要であった。
【0007】
特に、半導体ディスク装置は、機種ごとに固有のリカバリ範囲が設定され、かつ、後から変更することは難しい。このため、RAID構成に半導体ディスク装置を含む場合には、半導体ディスク装置の機種の仕様を調べ、事前に機種固有のリカバリ範囲の登録を行うという作業が必要であった。さらに、新規機種の追加や、機種が交換されたときは、リカバリ範囲に関する登録情報を変更しなければならなかった。しかしながら、機種変更や機種追加の度にリカバリ範囲を登録する作業は、非常に煩わしいものである。また、人手による作業であるため登録ミスや登録忘れもあり、このような場合には、ストレージ装置が誤動作する恐れがあった。なお、半導体ディスク装置に限らず、ストレージが格納するデータに対し、固有のエラー検出符号を付加する場合には、同様の問題が発生する。
【0008】
上記課題を解決するために、リカバリ範囲を自動で検出してデータ回復処理を行うことにより、煩雑な作業が削減され、かつ、誤動作の防止が可能なストレージ制御装置及びストレージ装置のデータ回復方法、が提供される。
【課題を解決するための手段】
【0009】
上記課題を解決するために、記憶手段と、リカバリ範囲検出手段と、リカバリ処理手段とを有し、冗長化されたストレージ群を管理し、媒体エラー発生時のデータ回復処理を行うストレージ制御装置が提供される。ストレージ群は、データ書き込み時、所定のリカバリ範囲ごとにデータのエラー検出符号を生成し、データとエラー検出符号とを対応付けて物理記憶領域に格納するストレージを有する。記憶手段には、ストレージ群について、ストレージ群に属するストレージと、ストレージに設定されるリカバリ範囲の大きさとが対応付けて登録されるリカバリ対応表が格納される。リカバリ範囲検出手段は、リカバリ対応表に未登録のストレージが検出されたときは、対応表に未登録のストレージの物理記憶領域に格納される任意のエラー検出符号を書き換える。エラー検出符号を書き換えたストレージの物理記憶領域のうち、エラー検出符号の書き換えによって媒体エラーが発生したエラー発生領域を検出する。そして、検出されたエラー発生領域をリカバリ範囲として特定し、特定されたリカバリ範囲をストレージに対応付けてリカバリ対応表に登録する。リカバリ処理手段は、通常運転時に媒体エラーが発生したときは、媒体エラーの生じたデータ領域と、データ領域に対応する故障ストレージとを検出する。また、リカバリ対応表を用いて故障ストレージに対応するリカバリ範囲を特定し、リカバリ範囲に基づいて媒体エラーの生じたデータ領域を含むデータ回復対象のリカバリ領域を算出する。そして、冗長化された他のストレージに格納されるデータを用いてリカバリ領域のデータの回復処理を行う。
【0010】
また、上記課題を解決するために、上記ストレージ制御装置と同様の処理手順を実行するストレージ装置のデータ回復方法が提供される。
【発明の効果】
【0011】
開示のストレージ制御装置及びストレージ装置のデータ回復方法によれば、リカバリ範囲が自動で検出されてリカバリ対応表に登録され、媒体エラー発生時にはリカバリ対応表を用いてリカバリ領域が特定されてデータ回復処理が行われる。これにより、予め登録するという煩雑な作業を削減し、かつ登録ミスによるストレージ装置の誤動作を防止することができる。
【図面の簡単な説明】
【0012】
【図1】第1の実施の形態のストレージ装置の構成例を示した図である。
【図2】リカバリ範囲の一例を示した図である。
【図3】リカバリ対応表の一例を示した図である。
【図4】第2の実施の形態のマルチノードディスクシステムの構成例を示した図である。
【図5】制御ノードのハードウェア構成例を示した図である。
【図6】ECCの書き換え手順の一例を示した図である。
【図7】リカバリブロック数の検出処理の一例を示した図である。
【図8】媒体エラー発生時のリカバリ処理の一例を示した図である。
【図9】リカバリ範囲検出処理の手順を示したフローチャートである。
【図10】最大LBA特定処理の手順を示したフローチャートである。
【図11】媒体エラー発生時のリカバリ処理の手順を示したフローチャートである。
【発明を実施するための形態】
【0013】
以下、実施の形態を、図面を参照して説明する。
図1は、第1の実施の形態のストレージ装置の構成例を示した図である。
ストレージ装置は、ストレージ制御装置1と、複数のストレージ20a,20b,20cを有するストレージ群2とを有する。
【0014】
まず、ストレージ群2について説明する。ストレージ群2を構成するストレージ20a,20b,20cは、冗長化されており、いずれかのストレージのデータ領域のデータに異常が検出されたときは、他のストレージの冗長データを用いて異常検出のデータ領域のデータを回復することができる。ストレージ20a,20b,20cの物理記憶領域は、所定のブロック単位に分割されて管理される。また、ストレージ20a,20b,20cは、データを物理記憶領域に書き込む際、1または連続する所定のブロック数ごとにエラー検出符号を生成し、データとともに物理記憶領域に格納する。何ブロックごとにエラー検出符号を生成するかは、予めストレージごとに決められている。この範囲は、ストレージの製品種別、すなわち機種ごとに固有となっている場合が多い。なお、エラー検出符号が生成される範囲は、リカバリ処理の対象のリカバリ範囲になる。エラー検出符号としては、ECCなどが用いられる。
【0015】
ストレージ制御装置1は、記憶手段11、リカバリ範囲検出手段12、リカバリ処理手段13及びアクセス手段14を有し、ストレージ群2に属するストレージ20a,20b,20cに媒体エラーが発生したときのデータ回復処理などを行う。
【0016】
記憶手段11には、リカバリ範囲検出手段12が生成したリカバリ対応表11aが格納される。リカバリ対応表11aには、ストレージ20a,20b,20cに対応付けて、それぞれがリカバリ処理を一括して行わなければならないリカバリ範囲の大きさが登録される。なお、リカバリ範囲は、ストレージの機種ごとに予め固有の値で設定されている場合が多い。そこで、リカバリ対応表11aでは、ストレージの機種に対応付けてリカバリ範囲の大きさを登録するとしてもよい。リカバリ範囲の大きさがストレージの機種に対応付けられているリカバリ対応表11aを用いるときは、対象のストレージの機種を特定し、特定されたストレージの機種に基づいてリカバリ対応表11aを検索する。
【0017】
リカバリ範囲検出手段12は、ストレージ群2に属するストレージ20a,20b,20cの機種ごとにリカバリ範囲を検出し、リカバリ対応表11aに登録する処理を行う。一般に、リカバリ範囲はストレージの機種固有であるので、リカバリ範囲の検出はストレージの1機種につき、1回行えばよい。リカバリ範囲の検出では、まず、対象ストレージの物理記憶領域に格納されるエラー検出符号を壊し、意図的に媒体エラーを発生させる。媒体エラーは、ストレージ20a,20b,20cがデータの読み出し要求を受けた時などに、読み出したデータから生成したエラー検出符号と、物理記憶領域に格納されるエラー検出符号とが不一致のときに発生する。エラー検出符号が破壊されると、対応するリカバリ範囲に該当する領域からデータを読み出したとき、媒体エラーが発生する。そこで、対象ストレージからデータを順次読み出し、媒体エラーが発生したエラー発生領域を検出する。そして、検出されたエラー発生領域に基づいて、リカバリ範囲を特定する。リカバリ範囲は、リカバリの対象となるサイズを示し、ブロック数やブロック数に応じた設定値で表される。特定されたリカバリ範囲は、処理を行ったストレージの機種に対応付けてリカバリ対応表11aに登録する。なお、媒体エラーの発生確認は、媒体エラーがチェックされる単位、例えば、ブロック単位で行う。詳細は、後述する。
【0018】
リカバリ処理手段13は、通常処理において、媒体エラーが検出されたとき、媒体エラーが発生したデータ領域を含むリカバリ領域のデータを回復させる。アクセス要求の応答として媒体エラーが検出されたときは、アクセス要求に基づいてデータ領域と、ストレージとを特定する。また、媒体エラーを通知した応答に媒体エラーの発生箇所が設定されているときは、これを用いて特定してもよい。こうして、エラー発生のストレージと、エラーのデータ領域とが特定された後は、エラー発生のストレージの機種を特定し、リカバリ対応表11aを検索して、このストレージの機種に対応するリカバリ範囲の大きさを抽出する。そして、抽出されたリカバリ範囲と、媒体エラーが検出されたデータ領域に基づいて、リカバリ領域を決定する。例えば、リカバリ範囲が2ブロックの場合は、媒体エラーが発生したデータ領域を含む2ブロックがリカバリ領域になる。そして、リカバリ領域を冗長構成に基づいて復元されるデータで上書きし、データの回復を行う。
【0019】
アクセス手段14は、リカバリ処理手段13及びリカバリ範囲検出手段12からの指示に従って、ストレージ群2に属するストレージ20a,20b,20cへ読み出し(R)要求または書き込み(W)要求を送信し、応答を受信する。エラーが発生したときは、応答にエラー通知が含まれる。受信した応答とエラー通知は、要求元のリカバリ範囲検出手段12及びリカバリ処理手段13に転送する。
【0020】
このような構成のストレージ装置の動作及びデータ回復方法について説明する。ここでは、リカバリ範囲は機種ごとに固有であるとする。
ストレージ群2のストレージ20a,20b,20cは、それぞれ機種固有のリカバリ範囲が設定されている。図2は、リカバリ範囲の一例を示した図である。(A)は2ブロックでエラー検出符号作成の場合、(B)は4ブロックでエラー検出符号作成の場合、(C)は8ブロックでエラー検出符号作成の場合、を示している。なお、図はブロックとエラー検出符号の関係を示したもので、物理記憶領域の構成を示すものではない。エラー検出符号は、物理記憶領域の任意の領域に格納される。
【0021】
(A)2ブロックでエラー検出符号作成の場合では、ブロック#0〜#1、ブロック#2〜#3というように、2ブロック単位でエラー検出符号が作成される。従って、リカバリ範囲201は、2ブロックになる。例えば、ブロック#0〜#1に対応するエラー検出符号が壊されると、ブロック#0及びブロック#1で媒体エラーが発生する。ブロック#2〜#3は正常に読み出すことができる。
【0022】
(B)4ブロックでエラー検出符号作成の場合では、ブロック#0〜#3、ブロック#4〜#7というように、4ブロック単位でエラー検出符号が作成される。従って、リカバリ範囲202は、4ブロックになる。例えば、ブロック#0〜#3に対応するエラー検出符号が壊されると、ブロック#0〜#3のすべてで媒体エラーが発生する。ブロック#4〜#7は正常に読み出すことができる。
【0023】
(C)8ブロックでエラー検出符号作成の場合では、ブロック#0〜#7というように、8ブロック単位でエラー検出符号が作成される。従って、リカバリ範囲203は、8ブロックになる。例えば、ブロック#0〜#7に対応するエラー検出符号が壊されると、ブロック#0〜#7のすべてで媒体エラーが発生する。
【0024】
ストレージ制御装置1の動作について説明する。
ストレージ制御装置1の立ち上がり時、あるいは、新たなストレージが接続されたとき、リカバリ範囲検出手段12が処理を開始する。リカバリ範囲検出手段12は、記憶手段11からリカバリ対応表11aを読み出し、管理下のストレージ20a,20b,20cの機種について、リカバリ範囲が登録されているか否かを照合する。未登録の機種があったときは、この機種に該当するストレージを用いてリカバリ範囲を検出する。ここで、ストレージ20aの機種が未登録であるとする。リカバリ範囲検出手段12は、アクセス手段14を介してストレージ20aに格納される任意のリカバリ範囲に対応するエラー検出符号を書き換え、エラー検出符号を破壊する。例えば、任意のブロックのデータを読み出し、付加されるエラー検出符号を書き換え、当該ブロックのデータとともに書き込んで、エラー検出符号を壊す。
【0025】
続いて、媒体エラーのエラー発生領域を検出する。アクセス手段14を介してブロックのデータを順次読み出し、媒体エラーの発生有無をチェックする。例えば、図2の例でブロック#1を対象範囲とするエラー検出符号を壊したとする。ブロック#0から順次データ読み出しを行うと、(A)の場合は、ブロック#0〜#1で媒体エラーが発生し、ブロック#2で正常となる。(B)の場合は、ブロック#0〜#3で媒体エラーが発生し、ブロック#4で正常となる。(C)の場合は、ブロック#0〜#7で媒体エラーが発生し、ブロック#8で正常となる。このようにエラー発生領域を検出すれば、リカバリ範囲が特定される。(A)の場合は2ブロック、(B)の場合は4ブロック、(C)の場合は8ブロックになる。特定されたリカバリ範囲は、リカバリ対応表11aに登録される。
【0026】
図3は、リカバリ対応表の一例を示した図である。
リカバリ対応表110は、ストレージ機種110aに対応付けて、リカバリ範囲としてリカバリブロック数110bが登録されている。例えば、ストレージ機種「XXXXXX」は、リカバリブロック数が「2ブロック(Block)」である。
【0027】
リカバリ処理手段13は、媒体エラーが通知されたときは、媒体エラーが発生したストレージ及びデータ領域を特定する。そして、リカバリ対応表11aを参照してこのストレージの機種に設定されるリカバリ範囲を特定し、リカバリ範囲とデータ領域からリカバリ領域を特定する。さらに、リカバリ領域のデータを冗長構成に基づいて復元し、復元データをリカバリ領域に上書きしてデータ回復処理を行う。
【0028】
上記のストレージ制御装置及びそのストレージ装置のデータ回復方法によれば、ストレージの機種に固有のリカバリ範囲が自動検出され、リカバリ対応表に登録される。そして、ストレージに媒体エラー発生時には、リカバリ対応表に基づいてリカバリ範囲のデータが回復される。このように、利用者が予め機種ごとのリカバリ範囲を登録しておかなくてもよいため、利用者に掛かる負担を削減し、利用者の利便性を向上させることができる。同様に、新たにストレージを追加する際の利用者の作業も軽減することができる。また、人手による作業ではないため、登録ミスや登録忘れを防止することが可能であり、結果として、ストレージ装置の誤動作を防ぐこともできる。
【0029】
以下、発明の実施の形態をRAID構成のマルチノードディスクシステムの場合で説明する。このマルチノードディスクシステムは、RAID0を除くすべてのRAIDレベルについて適用することができる。
【0030】
図4は、第2の実施の形態のマルチノードディスクシステムの構成例を示した図である。
マルチノードディスクシステムは、ネットワーク600を介して、制御ノード100、複数のディスクノード210,220、管理ノード300及びアクセスノード400が接続されている。
【0031】
制御ノード100は、ディスクノード210,220及びSSD211,212,221,222を管理するストレージ制御装置として機能する。そして、仮想的な論理ボリュームを、物理記憶領域を備えたSSD211,212,221,222に割り当てる割当制御や、SSD211,212,221,222に格納されるデータのエラー検出時にデータを回復させるデータ回復処理を行う。
【0032】
ディスクノード210にはSSD211,212、ディスクノード220にはSSD221,222、がそれぞれ接続されている。SSD211,212,221,222の物理記憶領域は、ブロック単位に分割されている。ディスクノード210,220は、例えば、IA(Intel Architecture)と呼ばれるアーキテクチャのコンピュータである。そして、接続されたSSD211,212,221,222に格納されるデータをアクセスノード400経由で端末装置に提供する。ブロック単位のデータ書き込み要求時には、SSD211,212,221,222の機種ごとに決まっている1または連続する複数のブロックごとにECCを作成し、データとともにSSD物理記憶領域に格納する。データ読み出し要求時には、ECCを用いたデータチェックを行い、データのエラーチェック結果とともに読み出しデータをアクセスノード400経由で端末装置に返す。ECC異常が検出されたときは、媒体エラーを発生させる。なお、図4では、ディスクノード210,220が複数のSSDを管理するとしたが、個々のSSDがディスクノード210,220の機能を有するとしてもよい。
【0033】
アクセスノード400は、ディスクノード210,220のそれぞれが管理しているデータの格納場所を認識しており、ネットワーク500を介して入力される端末装置からの要求に応答して、ディスクノード210,220へデータアクセスを行う。
【0034】
管理ノード300は、マルチノードディスクシステム全体を管理する。また、管理者の指示に従って、論理ボリュームの割当指示を制御ノード100に通知する。
次に、各ノードのハードウェア構成を、制御ノード100を例に説明する。
【0035】
図5は、制御ノードのハードウェア構成例を示した図である。
制御ノード100は、CPU(Central Processing Unit)101によって装置全体が制御されている。CPU101には、バス105を介してRAM(Random Access Memory)102、HDD103及び通信インタフェース104が接続されている。
【0036】
RAM102には、CPU101に実行させるOSやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM102には、CPU101による処理に必要な各種データが格納される。HDD103には、OSやアプリケーションのプログラムが格納される。通信インタフェース104は、ネットワーク600に接続されている。通信インタフェース104は、ネットワーク600を介して、ディスクノード210,220、管理ノード300及びアクセスノード400など、マルチノードディスクシステムを構成する他のコンピュータとの間でデータの送受信を行う。
【0037】
なお、図5には、制御ノード100のハードウェア構成を示したが、ディスクノード210,220、管理ノード300及びアクセスノード400のハードウェア構成も同様である。
【0038】
上記の構成のマルチノードディスクシステムにおける制御ノード100のデータ回復処理について、具体例を用いて説明する。
システムの立ち上がり時、制御ノード100は、管理下のSSD211,212,221,222に関するリカバリ範囲情報を持っているかどうかを確認する。リカバリ対応表を検索し、管理下のSSD211,212,221,222の機種が登録されているかどうかを確認する。登録されていない機種があれば、リカバリ範囲検出処理を起動する。また、動作中に、新たにSSDが追加されたときや交換された場合も、同様のチェックを行い、リカバリ対応表に未登録のSSDがあれば、リカバリ範囲検出処理を起動する。
【0039】
リカバリ範囲検出処理では、ECCを壊してECC異常を発生させ、ECC異常が発生したエラー発生領域に属するブロックの数を計測し、リカバリ対象のリカバリブロック数を検出する。ECCを壊すとは、ECCと、ECCの対象領域のデータとの関係を不整合にすることであり、ここでは正常なECCの値を書き換えることによって壊す。
【0040】
図6は、ECCの書き換え手順の一例を示した図である。
図6のECC2020は、ブロック#0〜#3の4ブロックのデータに基づいて生成され、SSDの記憶領域に格納されている。
【0041】
ECCの書き換えのため、メモリ上にある程度の余裕を持たせた適当な大きさのバッファを用意し、SCSI(Small Computer System Interface)の“read longコマンド”で1ブロックのデータを読み出す(1)。図6の例では、ブロック#1の部分を読み出している。コマンドを受け取ったSSDは、ブロック#1のデータに、ECCを付加した応答を返す。図6の例では、SSDからの読み出しデータとして、ブロック#1のデータ512バイト(B)と、Nバイト(B)のECC2022を受信する。読み出しデータに付加されてくるECCのサイズは、SSDの機種により異なる。SSDから“read longコマンド”を用いて読み出すときは、「1ブロックのバイト数+ECCのバイト数」を正確に指定しなければ、正常応答が返らない。このため、実際には、「1ブロックのバイト数+1バイト」から始めて、正常な応答が得られるまで、ECCのバイト数を1バイトずつ増やしながら、“read longコマンド”を発行する。なお、ブロック#1に付加されたECC2022は、ECC2020と同じであり、ブロック#0〜#3を対象範囲として生成されたものである。
【0042】
続いて、ECCの一部を壊す(2)。例えば、受信してバッファに格納されるECC2022の最後の1バイトを違う値に変更する。最後の1バイトについてビット反転を行うなどして、ECCを壊し、ECC2023を作成する。
【0043】
そして、壊したECC2023と、(1)で読み出したブロック#1のデータとを、“write longコマンド”を用いて書き込む(3)。例えば、ブロック#1の部分について、「1ブロックのバイト数+ECCのバイト数」を指定して書き込む。なお、“write longコマンド”によるデータ書き込みでは、ECCは再計算されない。
【0044】
こうして、書き換えられたECC2023が、ブロック#0〜#3のECCとしてSSDに書き込まれる。これによって、ブロック#0〜#3の4ブロックすべてについて、データを読み出したときにECC異常が発生する。
【0045】
リカバリブロック数の検出処理について説明する。図7は、リカバリブロック数の検出処理の一例を示した図である。
図7では、例としてSSDをSSD211、検出するリカバリブロック数は4であるとしている。
【0046】
リカバリブロック数の計測処理では、ある程度のまとまった空き領域にリカバリ範囲検出用の計測領域を確保する。計測領域として、リカバリ範囲として予測される最大の領域が含まれる領域を用意する。例えば、256ブロック分のデータを格納できるような領域が用意される。また、予めSSD211にこのような空き領域が用意されているとしてもよい。
【0047】
図7の例では、SSD211の空き領域に、256ブロック分の計測領域2110が確保される。また、SSD211のブロックは、ブロック#0から順に番号が付与されているとし、計測領域2110に含まれる最小のブロック番号(以下、LBA(Logical Block Address)とする)は、1022であるとする。すなわち、計測領域2110のブロック番号は、LBA1022〜LBA1278になる。
【0048】
次に、計測領域2110全体を、“writeコマンド”で上書きしておく。“writeコマンド”を用いれば、データの上書き処理時、リカバリブロック数ごとにECCが作成される。また、計測領域2110全体を“readコマンド”で読み出し、ECC異常などのエラーが発生していないことを確認する。
【0049】
こうして準備が整った後、計測領域2110の任意のブロック、例えば中央の1ブロックを対象ブロックとして、“read longコマンド”によってECCを含むデータを読み出す。図7の例では、計測領域2110のブロックのうち、128番目のブロック(LBA1150)2111が選択され、1ブロック分のデータとECCとが読み出される。続いて、読み出したECCを図6の手順で壊し、読み出したブロック2111のデータと、最後の1バイトを書き換えたECCとを“write longコマンド”で上書きする。こうして、ブロック2111を含むリカバリブロック数のブロックにECC異常が発生するようになる。
【0050】
ECC異常が発生するブロックを検出するため、対象ブロック(LBA1150)2111を中心として、前方向及び後方向に順次ECC異常が発生しているかどうかを確認する。なお、前方向とは、LBAが小さくなる方向をいい、後方向はその逆である。
【0051】
図7の例では、“write longコマンド”を行った対象ブロック(LBA1150)2111の後方向に次のブロック(LBA1151)2112について“readコマンド”を用いてデータ読み出しを行う。ここでは、ECC異常(NG)が検出される。ECC異常が検出されたときは、後方向に次のブロック(LBA1152)2113について“readコマンド”を用いてデータ読み出しを行う。ここでは、正常応答(OK)が得られる。このように、正常応答が返るまで、後方向に順番にブロックのデータ読み出しを繰り返す。そして、ECC異常が検出された最大LBAのブロック、図7の例ではブロック(LBA1151)2112を記憶しておく。また、ECC異常が検出された最大LBAのブロックまでにECC異常を検出したブロック数(この場合は1)を記憶しておくとしてもよい。
【0052】
次に、前方向についても同様の処理を行う。図7の例では、対象ブロック(LBA1150)2111から前方向に、ブロック(LBA1149)2114、ブロック(LBA1148)2115、ブロック(LBA1147)2116と、“readコマンド”を用いてデータ読み出しを行う。ここでは、ブロック(LBA1149)2114からはECC異常(NG)応答、ブロック(LBA1148)2115からはECC異常(NG)応答、ブロック(LBA1147)2116からは正常(OK)応答が得られている。そして、ECC異常が検出された最小LBAのブロック、図7の例ではブロック(LBA1148)2115を記憶しておく。また、ECC異常が検出された最小LBAのブロックまでにECC異常を検出したブロック数(この場合は2)を記憶しておくとしてもよい。
【0053】
こうして、ECC異常範囲は、ブロック(LBA1148)2115から(LBA1151)2112であることが検出される。リカバリ範囲は、LBAから、1151−1148+1=4と算出することができる。また、ECC異常を検出した後方向のブロック数(1)、前方向のブロック数(2)及び対象ブロック数(1)を合算するとしてもよい。
【0054】
さらに、ECC異常範囲の開始ブロックのLBA「1148」が、リカバリブロック数「4」で割り切れるかどうかを確認する。SSD211は、LBA0からブロック数「4」ごとにリカバリ範囲が設定されるので、ECC異常範囲の開始ブロック、すなわち、リカバリ領域の開始ブロックのLBAは、リカバリブロック数で割り切れる。この例では、ECC異常範囲の開始ブロックのLBA「1148」はリカバリブロック数「4」で割り切れるので、検出されたリカバリブロック数は正しいと判定される。
【0055】
上記の処理により特定されたリカバリブロック数「4」は、SSD211の機種に対応付けてリカバリ対応表に登録される。
次に、媒体エラー(ECC異常)発生時のリカバリ処理について説明する。
【0056】
図8は、媒体エラー発生時のリカバリ処理の一例を示した図である。
SSD211のブロック(LBA513)2121に対し、“readコマンド”で読み出しを行ったとき、ECC異常が検出されたとする。リカバリ対応表から得られる、SSD211のリカバリブロック数「4」を用いて、ブロック(LBA513)2121を含むリカバリ領域を算出する。リカバリ領域の開始ブロックのLBAは、エラー発生ブロックのLBAをリカバリブロック数で割った余りを引いた値であり、リカバリのサイズはリカバリブロック数になる。ここでは、リカバリ開始ブロック(LBA512)2122からリカバリ終了ブロック(LBA515)2123までが、リカバリ領域となる。このリカバリ領域のデータを、1ブロックずつ冗長構成からリカバリし、4ブロック分をリカバリする。
【0057】
上記のマルチノードディスクシステムによれば、SSDの機種ごとに固有のリカバリブロック数がSSDの空き領域を利用して自動的に検出される。これにより、利用者の登録作業を削減することができる。また、空き領域を用いるため、システムの動作に影響を及ぼさずに処理が行われる。
【0058】
次に、制御ノード100のリカバリ範囲検出処理手順及びデータ回復処理手順について、フローチャートを用いて詳細に説明する。
図9は、リカバリ範囲検出処理の手順を示したフローチャートである。
【0059】
リカバリ対応表に未登録のSSD機種が検出され、処理が開始される。
[ステップS01] システム運用に利用されていない空き領域に設定したリカバリブロック数の計測領域が正常であるかどうかを確認する。計測領域にブロック単位でデータを上書きして、ECCを作成させる。続いて、ブロック単位でデータ読み出しを行って、ECC異常などのエラーが発生しないことを確認する。
【0060】
[ステップS02] ステップS01で準備した計測領域の中央の1ブロックを読み出し、読み出しECCを書き換え、“write longコマンド”で上書きすることによってECCを破壊する。
【0061】
[ステップS03] ステップS02により発生するECC異常範囲の終了ブロック、すなわち、ECC異常範囲でLBAが最大のブロックを検出する最大LBA特定処理を行う。詳細は後述する。
【0062】
[ステップS04] ステップS02により発生するECC異常範囲の開始ブロック、すなわち、ECC異常範囲でLBAが最小のブロックを検出する最小LBA特定処理を行う。詳細は後述する。
【0063】
[ステップS05] ステップS03で検出されたECC異常範囲の開始ブロックの最小LBAと、終了ブロックの最大LBAとに基づいて、リカバリブロック数を算出する。また、ECC異常を検出したブロック数を記録しておき、このブロック数と、“write longコマンド”を用いた対象ブロックの数(1)とを合わせた数として求めてもよい。
【0064】
[ステップS06] ステップS04で特定されたECC異常範囲の開始ブロックの最小LBAを、ステップS05で算出されたリカバリブロック数で割る。
[ステップS07] ステップS06の計算結果が整数であるかどうか、すなわち、割りきれるかどうかを判定する。整数であるときは、処理をステップS08に進める。整数でないときは、算出されたリカバリブロック数が誤っている可能性があるので、リカバリ対応表に登録せず処理を終了する。
【0065】
[ステップS08] ステップS07で正しいと判定されたリカバリブロック数を、SSDの機種に対応付け、リカバリ対応表に登録し、処理を終了する。
ここで、最大LBA特定処理について説明する。図10は、最大LBA特定処理の手順を示したフローチャートである。
【0066】
[ステップS31] “write longコマンド”を用いてECCを壊すための書き込みを行ったブロックの次のブロックのLBAを特定する。LBA=書き込みを行ったブロックのLBA+1と算出することができる。
【0067】
[ステップS32] 指定されたLBAに相当する対象ブロックのデータを“readコマンド”で読み出し、媒体エラー(ECC異常)が発生するかどうかを確認する。
[ステップS33] ステップS32のデータ読み出しによって、媒体エラーが検出されたときは、処理をステップS34に進める。媒体エラーが検出されなかったときは、処理をステップS35に進める。
【0068】
[ステップS34] 媒体エラーが検出されたときは、対象ブロックのLBAをインクリメントし、ステップS32に処理を戻す。
[ステップS35] 媒体エラーが検出されなかったときは、対象ブロックの1つ前のLBAをECC異常範囲の最大LBAとし、処理を終了する。
【0069】
最小LBA特定処理について説明する。最小LBA特定処理では、図10に示した最大LBA特定処理が、LBAをインクリメントしながらECC異常発生の範囲を検出するのに対し、LBAをディクリメントしながら同様の処理を行う。従って、図10の処理手順を以下のように読み替えれば、最小LBA特定処理の手順になる。ステップS31の「次のブロック」は、「前のブロック(LBA=書き込みを行ったブロックのLBA―1)」と読み替える。ステップS34の「LBAをインクリメント」は、「LBAをディクリメント」と読み替える。そして、ステップS35の「最大LBA=対象LBA―1」は、「最小LBA=対象LBA+1」と読み替える。
【0070】
次に、媒体エラー(ECC異常)発生時のリカバリ処理について説明する。図11は、媒体エラー発生時のリカバリ処理の手順を示したフローチャートである。
[ステップS101] 媒体エラー(ECC異常)が発生したSSDの機種を特定する。
【0071】
[ステップS102] リカバリ対応表を用いて、ステップS101で特定されたSSDの機種に対応するリカバリブロック数を抽出する。
[ステップS103] 媒体エラーが検出されたブロックのLBAから、リカバリ開始ブロックのLBAを算出する。リカバリ開始ブロックのLBAは、媒体エラーの発生LBAをリカバリブロック数で割った余りを、媒体エラーの発生LBAから引いた値として算出される。
【0072】
[ステップS104] ステップS103で算出されたLBAのブロックをリカバリ開始ブロックとし、リカバリ開始ブロックからリカバリブロック数分のブロックをリカバリの対象として、冗長構成に基づくリカバリ処理を行う。
【0073】
以上の処理手順が行われることにより、媒体エラーが発生したデータ領域のリカバリ処理が実現される。
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、ストレージ制御装置が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。
【0074】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD(Digital Versatile Disc)、CD−ROM(Compact Disc Read Only Memory)などの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【0075】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【0076】
以上の実施の形態に関し、さらに以下の付記を開示する。
(付記1) 冗長化されたストレージ群を管理し、媒体エラー発生時のデータ回復処理を行うストレージ制御装置において、
データ書き込み時、所定のリカバリ範囲ごとに前記データのエラー検出符号を生成し、前記データと前記エラー検出符号とを対応付けて物理記憶領域に格納するストレージを有する前記ストレージ群について、前記ストレージ群に属する前記ストレージと、前記ストレージに設定される前記リカバリ範囲の大きさとが対応付けて登録されるリカバリ対応表が格納される記憶手段と、
前記リカバリ対応表に未登録の前記ストレージが検出されたときは、該ストレージの物理記憶領域に格納される任意の前記エラー検出符号を書き換え、該ストレージの物理記憶領域のうち前記エラー検出符号の書き換えによって前記媒体エラーが発生したエラー発生領域を検出し、検出された前記エラー発生領域を前記リカバリ範囲として特定し、特定された前記リカバリ範囲を前記ストレージに対応付けて前記リカバリ対応表に登録するリカバリ範囲検出手段と、
通常運転時に前記媒体エラーが発生したときは、前記媒体エラーの生じたデータ領域と、前記データ領域に対応する故障ストレージとを検出するとともに、前記リカバリ対応表を用いて前記故障ストレージに対応する前記リカバリ範囲を特定し、前記リカバリ範囲に基づいて前記媒体エラーの生じたデータ領域を含むデータ回復対象のリカバリ領域を算出し、冗長化された他のストレージに格納されるデータを用いて前記リカバリ領域のデータの回復処理を行うリカバリ処理手段と、
を有することを特徴とするストレージ制御装置。
【0077】
(付記2) 前記リカバリ範囲は、前記ストレージの製品種別ごとに予め決められた固有の大きさに設定されており、前記リカバリ対応表は、前記ストレージの製品種別を識別可能にする機種に対応付けて前記リカバリ範囲の大きさが登録されている、
ことを特徴とする付記1記載のストレージ装置。
【0078】
(付記3) 前記リカバリ範囲は、前記ストレージの物理記憶領域を所定のサイズで分割したブロックを単位として、1または連続する複数ブロックが接続される領域であり、
前記リカバリ範囲検出手段は、前記エラー検出符号を書き換えた後、前記ストレージから前記ブロック単位でデータ読み出しを行い、前記データ読み出しのときに前記媒体エラーが発生したブロックの数を計測し、計測されたリカバリブロック数または前記リカバリブロック数に応じた設定値を前記リカバリ範囲とする、
ことを特徴とする付記1記載のストレージ制御装置。
【0079】
(付記4) 前記リカバリ範囲検出手段は、読み出し命令によって任意の前記ブロックのデータを読み出し、該ブロックのデータとともに読み出される該ブロックを含む前記リカバリ範囲に対応する前記エラー検出符号を書き換え、該ブロックの領域の直後の前記ブロックから後方向に順次前記媒体エラーの検出有無を確認して前記リカバリ範囲の終了ブロックを検出するとともに、該ブロックの領域の直前の前記ブロックから前方向に順次前記媒体エラーの検出有無を確認して前記リカバリ範囲の開始ブロックを検出し、検出された前記開始ブロックから前記終了ブロックの範囲を前記リカバリ範囲とする、
ことを特徴とする付記3記載のストレージ制御装置。
【0080】
(付記5) 前記リカバリ範囲検出手段は、前記リカバリ範囲として予測される最大のデータ領域と前記エラー検出符号の格納領域とをリカバリ範囲検出用の計測領域として、対象の前記ストレージの物理記憶領域のうちユーザが利用していない空き領域に確保し、前記最大のデータ領域に所定のデータを書き込んで前記最大のデータ領域に対応する前記エラー検出符号を生成させ、前記計測領域を用いて前記リカバリ範囲を特定する、
ことを特徴とする付記3〜4記載のストレージ制御装置。
【0081】
(付記6) 前記リカバリ範囲検出手段は、前記物理記憶領域の先頭ブロックから前記媒体エラーが発生した連続ブロックの直前のブロックまでのブロック数を計測したブロック数が、計測された前記リカバリブロック数の整数倍であるかどうかを判定し、整数倍でないと判定されたときは、前記リカバリブロック数を無効とする、
ことを特徴とする付記3〜5記載のストレージ制御装置。
【0082】
(付記7) 前記ストレージは、該ストレージの製品種別ごとに予め決められた固有の大きさに前記リカバリ範囲が設定されており、データ書き込み時に、前記リカバリ範囲ごとに誤り訂正符号を付加し、書き込みデータとともに、前記書き込みデータに対応付けて前記誤り訂正符号を前記物理記憶領域に格納する半導体ディスクである、
ことを特徴とする付記1〜6記載のストレージ制御装置。
【0083】
(付記8) 冗長化されたストレージ群を管理し、媒体エラー発生時のデータ回復処理を行うストレージ装置のデータ回復方法において、
リカバリ範囲検出手段が、データ書き込み時、所定のリカバリ範囲ごとに前記データのエラー検出符号を生成し、前記データと前記エラー検出符号とを対応付けて物理記憶領域に格納するストレージを有する前記ストレージ群について、前記ストレージ群に属する前記ストレージと、前記ストレージに設定される前記リカバリ範囲の大きさとが対応付けて登録されるリカバリ対応表が格納される記憶手段から前記リカバリ対応表を読み出し、前記リカバリ対応表に未登録の前記ストレージが検出されたときは、該ストレージの物理記憶領域に格納される任意の前記エラー検出符号を書き換え、該ストレージの物理記憶領域のうち前記エラー検出符号の書き換えによって前記媒体エラーが発生したエラー発生領域を検出し、検出された前記エラー発生領域を前記リカバリ範囲として特定し、特定された前記リカバリ範囲を前記ストレージに対応付けて前記リカバリ対応表に登録する手順と、
リカバリ処理手段が、通常運転時に前記媒体エラーが発生したときは、前記媒体エラーの生じたデータ領域と、前記データ領域に対応する故障ストレージとを検出するとともに、前記リカバリ対応表を用いて前記故障ストレージに対応する前記リカバリ範囲を特定し、前記リカバリ範囲に基づいて前記媒体エラーの生じたデータ領域を含むデータ回復対象のリカバリ領域を算出し、冗長化された他のストレージに格納されるデータを用いて前記リカバリ領域のデータの回復処理を行う手順と、
を実行することを特徴とするストレージ装置のデータ回復方法。
【0084】
(付記9) 冗長化されたストレージ群を管理し、媒体エラー発生時のデータ回復処理を行うコンピュータを機能させるストレージ装置のデータ回復処理プログラムにおいて、
前記コンピュータを、
データ書き込み時、所定のリカバリ範囲ごとに前記データのエラー検出符号を生成し、前記データと前記エラー検出符号とを対応付けて物理記憶領域に格納するストレージを有する前記ストレージ群について、前記ストレージ群に属する前記ストレージと、前記ストレージに設定される前記リカバリ範囲の大きさとが対応付けて登録されるリカバリ対応表が格納される記憶手段から前記リカバリ対応表を読み出し、前記リカバリ対応表に未登録の前記ストレージが検出されたときは、該ストレージの物理記憶領域に格納される任意の前記エラー検出符号を書き換え、該ストレージの物理記憶領域のうち前記エラー検出符号の書き換えによって前記媒体エラーが発生したエラー発生領域を検出し、検出された前記エラー発生領域を前記リカバリ範囲として特定し、特定された前記リカバリ範囲を前記ストレージに対応付けて前記リカバリ対応表に登録するリカバリ範囲検出手段、
通常運転時に前記媒体エラーが発生したときは、前記媒体エラーの生じたデータ領域と、前記データ領域に対応する故障ストレージとを検出するとともに、前記リカバリ対応表を用いて前記故障ストレージに対応する前記リカバリ範囲を特定し、前記リカバリ範囲に基づいて前記媒体エラーの生じたデータ領域を含むデータ回復対象のリカバリ領域を算出し、冗長化された他のストレージに格納されるデータを用いて前記リカバリ領域のデータの回復処理を行うリカバリ処理手段、
として機能させることを特徴とするストレージ装置のデータ回復処理プログラム。
【符号の説明】
【0085】
1 ストレージ制御装置
11 記憶手段
11a リカバリ対応表
12 リカバリ範囲検出手段
13 リカバリ処理手段
14 アクセス手段
2 ストレージ群
20a,20b,20c ストレージ
【特許請求の範囲】
【請求項1】
冗長化されたストレージ群を管理し、媒体エラー発生時のデータ回復処理を行うストレージ制御装置において、
データ書き込み時、所定のリカバリ範囲ごとに前記データのエラー検出符号を生成し、前記データと前記エラー検出符号とを対応付けて物理記憶領域に格納するストレージを有する前記ストレージ群について、前記ストレージ群に属する前記ストレージと、前記ストレージに設定される前記リカバリ範囲の大きさとが対応付けて登録されるリカバリ対応表が格納される記憶手段と、
前記リカバリ対応表に未登録の前記ストレージが検出されたときは、該ストレージの物理記憶領域に格納される任意の前記エラー検出符号を書き換え、該ストレージの物理記憶領域のうち前記エラー検出符号の書き換えによって前記媒体エラーが発生したエラー発生領域を検出し、検出された前記エラー発生領域を前記リカバリ範囲として特定し、特定された前記リカバリ範囲を前記ストレージに対応付けて前記リカバリ対応表に登録するリカバリ範囲検出手段と、
通常運転時に前記媒体エラーが発生したときは、前記媒体エラーの生じたデータ領域と、前記データ領域に対応する故障ストレージとを検出するとともに、前記リカバリ対応表を用いて前記故障ストレージに対応する前記リカバリ範囲を特定し、前記リカバリ範囲に基づいて前記媒体エラーの生じたデータ領域を含むデータ回復対象のリカバリ領域を算出し、冗長化された他のストレージに格納されるデータを用いて前記リカバリ領域のデータの回復処理を行うリカバリ処理手段と、
を有することを特徴とするストレージ制御装置。
【請求項2】
前記リカバリ範囲は、前記ストレージの物理記憶領域を所定のサイズで分割したブロックを単位として、1または連続する複数ブロックが接続される領域であり、
前記リカバリ範囲検出手段は、前記エラー検出符号を書き換えた後、前記ストレージから前記ブロック単位でデータ読み出しを行い、前記データ読み出しのときに前記媒体エラーが発生したブロックの数を計測し、計測されたリカバリブロック数または前記リカバリブロック数に応じた設定値を前記リカバリ範囲とする、
ことを特徴とする請求項1記載のストレージ制御装置。
【請求項3】
前記リカバリ範囲検出手段は、読み出し命令によって任意の前記ブロックのデータを読み出し、該ブロックのデータとともに読み出される該ブロックを含む前記リカバリ範囲に対応する前記エラー検出符号を書き換え、該ブロックの領域の直後の前記ブロックから後方向に順次前記媒体エラーの検出有無を確認して前記リカバリ範囲の終了ブロックを検出するとともに、該ブロックの領域の直前の前記ブロックから前方向に順次前記媒体エラーの検出有無を確認して前記リカバリ範囲の開始ブロックを検出し、検出された前記開始ブロックから前記終了ブロックの範囲を前記リカバリ範囲とする、
ことを特徴とする請求項2記載のストレージ制御装置。
【請求項4】
前記リカバリ範囲検出手段は、前記物理記憶領域の先頭ブロックから前記媒体エラーが発生した連続ブロックの直前のブロックまでのブロック数を計測したブロック数が、計測された前記リカバリブロック数の整数倍であるかどうかを判定し、整数倍でないと判定されたときは、前記リカバリブロック数を無効とする、
ことを特徴とする請求項2〜3記載のストレージ制御装置。
【請求項5】
冗長化されたストレージ群を管理し、媒体エラー発生時のデータ回復処理を行うストレージ装置のデータ回復方法において、
リカバリ範囲検出手段が、データ書き込み時、所定のリカバリ範囲ごとに前記データのエラー検出符号を生成し、前記データと前記エラー検出符号とを対応付けて物理記憶領域に格納するストレージを有する前記ストレージ群について、前記ストレージ群に属する前記ストレージと、前記ストレージに設定される前記リカバリ範囲の大きさとが対応付けて登録されるリカバリ対応表が格納される記憶手段から前記リカバリ対応表を読み出し、前記リカバリ対応表に未登録の前記ストレージが検出されたときは、該ストレージの物理記憶領域に格納される任意の前記エラー検出符号を書き換え、該ストレージの物理記憶領域のうち前記エラー検出符号の書き換えによって前記媒体エラーが発生したエラー発生領域を検出し、検出された前記エラー発生領域を前記リカバリ範囲として特定し、特定された前記リカバリ範囲を前記ストレージに対応付けて前記リカバリ対応表に登録する手順と、
リカバリ処理手段が、通常運転時に前記媒体エラーが発生したときは、前記媒体エラーの生じたデータ領域と、前記データ領域に対応する故障ストレージとを検出するとともに、前記リカバリ対応表を用いて前記故障ストレージに対応する前記リカバリ範囲を特定し、前記リカバリ範囲に基づいて前記媒体エラーの生じたデータ領域を含むデータ回復対象のリカバリ領域を算出し、冗長化された他のストレージに格納されるデータを用いて前記リカバリ領域のデータの回復処理を行う手順と、
を実行することを特徴とするストレージ装置のデータ回復方法。
【請求項1】
冗長化されたストレージ群を管理し、媒体エラー発生時のデータ回復処理を行うストレージ制御装置において、
データ書き込み時、所定のリカバリ範囲ごとに前記データのエラー検出符号を生成し、前記データと前記エラー検出符号とを対応付けて物理記憶領域に格納するストレージを有する前記ストレージ群について、前記ストレージ群に属する前記ストレージと、前記ストレージに設定される前記リカバリ範囲の大きさとが対応付けて登録されるリカバリ対応表が格納される記憶手段と、
前記リカバリ対応表に未登録の前記ストレージが検出されたときは、該ストレージの物理記憶領域に格納される任意の前記エラー検出符号を書き換え、該ストレージの物理記憶領域のうち前記エラー検出符号の書き換えによって前記媒体エラーが発生したエラー発生領域を検出し、検出された前記エラー発生領域を前記リカバリ範囲として特定し、特定された前記リカバリ範囲を前記ストレージに対応付けて前記リカバリ対応表に登録するリカバリ範囲検出手段と、
通常運転時に前記媒体エラーが発生したときは、前記媒体エラーの生じたデータ領域と、前記データ領域に対応する故障ストレージとを検出するとともに、前記リカバリ対応表を用いて前記故障ストレージに対応する前記リカバリ範囲を特定し、前記リカバリ範囲に基づいて前記媒体エラーの生じたデータ領域を含むデータ回復対象のリカバリ領域を算出し、冗長化された他のストレージに格納されるデータを用いて前記リカバリ領域のデータの回復処理を行うリカバリ処理手段と、
を有することを特徴とするストレージ制御装置。
【請求項2】
前記リカバリ範囲は、前記ストレージの物理記憶領域を所定のサイズで分割したブロックを単位として、1または連続する複数ブロックが接続される領域であり、
前記リカバリ範囲検出手段は、前記エラー検出符号を書き換えた後、前記ストレージから前記ブロック単位でデータ読み出しを行い、前記データ読み出しのときに前記媒体エラーが発生したブロックの数を計測し、計測されたリカバリブロック数または前記リカバリブロック数に応じた設定値を前記リカバリ範囲とする、
ことを特徴とする請求項1記載のストレージ制御装置。
【請求項3】
前記リカバリ範囲検出手段は、読み出し命令によって任意の前記ブロックのデータを読み出し、該ブロックのデータとともに読み出される該ブロックを含む前記リカバリ範囲に対応する前記エラー検出符号を書き換え、該ブロックの領域の直後の前記ブロックから後方向に順次前記媒体エラーの検出有無を確認して前記リカバリ範囲の終了ブロックを検出するとともに、該ブロックの領域の直前の前記ブロックから前方向に順次前記媒体エラーの検出有無を確認して前記リカバリ範囲の開始ブロックを検出し、検出された前記開始ブロックから前記終了ブロックの範囲を前記リカバリ範囲とする、
ことを特徴とする請求項2記載のストレージ制御装置。
【請求項4】
前記リカバリ範囲検出手段は、前記物理記憶領域の先頭ブロックから前記媒体エラーが発生した連続ブロックの直前のブロックまでのブロック数を計測したブロック数が、計測された前記リカバリブロック数の整数倍であるかどうかを判定し、整数倍でないと判定されたときは、前記リカバリブロック数を無効とする、
ことを特徴とする請求項2〜3記載のストレージ制御装置。
【請求項5】
冗長化されたストレージ群を管理し、媒体エラー発生時のデータ回復処理を行うストレージ装置のデータ回復方法において、
リカバリ範囲検出手段が、データ書き込み時、所定のリカバリ範囲ごとに前記データのエラー検出符号を生成し、前記データと前記エラー検出符号とを対応付けて物理記憶領域に格納するストレージを有する前記ストレージ群について、前記ストレージ群に属する前記ストレージと、前記ストレージに設定される前記リカバリ範囲の大きさとが対応付けて登録されるリカバリ対応表が格納される記憶手段から前記リカバリ対応表を読み出し、前記リカバリ対応表に未登録の前記ストレージが検出されたときは、該ストレージの物理記憶領域に格納される任意の前記エラー検出符号を書き換え、該ストレージの物理記憶領域のうち前記エラー検出符号の書き換えによって前記媒体エラーが発生したエラー発生領域を検出し、検出された前記エラー発生領域を前記リカバリ範囲として特定し、特定された前記リカバリ範囲を前記ストレージに対応付けて前記リカバリ対応表に登録する手順と、
リカバリ処理手段が、通常運転時に前記媒体エラーが発生したときは、前記媒体エラーの生じたデータ領域と、前記データ領域に対応する故障ストレージとを検出するとともに、前記リカバリ対応表を用いて前記故障ストレージに対応する前記リカバリ範囲を特定し、前記リカバリ範囲に基づいて前記媒体エラーの生じたデータ領域を含むデータ回復対象のリカバリ領域を算出し、冗長化された他のストレージに格納されるデータを用いて前記リカバリ領域のデータの回復処理を行う手順と、
を実行することを特徴とするストレージ装置のデータ回復方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【公開番号】特開2011−8663(P2011−8663A)
【公開日】平成23年1月13日(2011.1.13)
【国際特許分類】
【出願番号】特願2009−153359(P2009−153359)
【出願日】平成21年6月29日(2009.6.29)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成23年1月13日(2011.1.13)
【国際特許分類】
【出願日】平成21年6月29日(2009.6.29)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]