ストレージシステム、ストレージ制御装置およびストレージ制御方法
【課題】データロスト発生の可能性を低減する。
【解決手段】ストレージ制御装置10は、RLUに属する記憶装置21,22を、データが異なる記憶装置に冗長化されるように管理する。リビルド制御部11は、記憶装置22が故障すると、記憶装置22に記録されていたデータと同一のデータを予備用の記憶装置31に格納するリビルド処理を実行する。データ復旧制御部12は、リビルド処理を実行中のリビルド制御部11が、記憶装置21からのデータ読み出しに失敗したとき、記憶装置22を再起動させ、再起動した記憶装置22から予備用の記憶装置31に格納するデータを読み出す。
【解決手段】ストレージ制御装置10は、RLUに属する記憶装置21,22を、データが異なる記憶装置に冗長化されるように管理する。リビルド制御部11は、記憶装置22が故障すると、記憶装置22に記録されていたデータと同一のデータを予備用の記憶装置31に格納するリビルド処理を実行する。データ復旧制御部12は、リビルド処理を実行中のリビルド制御部11が、記憶装置21からのデータ読み出しに失敗したとき、記憶装置22を再起動させ、再起動した記憶装置22から予備用の記憶装置31に格納するデータを読み出す。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージシステム、ストレージ制御装置およびストレージ制御方法に関する。
【背景技術】
【0002】
近年、HDD(Hard Disk Drive)などの記憶装置を複数用いたストレージシステムが広く使用されている。このようなストレージシステムでは、記憶装置に対するデータアクセスの信頼性を向上させるために、記憶装置に対するアクセスを制御する制御装置が冗長化されているものが多い。例えば、二重化された制御装置の両系がハードウェア異常により停止した場合に、両系の電源オフ、オン処理を実行することで、一時的に発生していたハードウェア異常を復旧させるものがある。
【0003】
また、ストレージシステムでは一般的に、RAID(Redundant Arrays of Inexpensive Disks)技術を用いて、データが2つ以上の記憶装置に冗長化されるような記録制御が行われることで、記録されるデータの安全性が高められている。
【0004】
さらに、データが冗長化されたストレージシステムにおいて、記憶装置が故障すると、故障した記憶装置に記憶されていたデータが再構築されて、他の記憶装置に格納される。このような処理は、一般に「リビルド処理」と呼ばれる。リビルド処理が実行されることで、データの冗長度が回復する。
【0005】
多くのストレージシステムでは、ホットスペア(Hot Spare)と呼ばれる予備用記憶装置が用意されており、このホットスペアを用いてリビルド処理が行われることが多い。一方、ホットスペアを用いずに、故障した記憶装置を新たな記憶装置に交換したときに、交換された記憶装置に対してリビルド処理を行うものもある。例えば、RAID−5によって管理された記憶装置の1つに障害が発生したとき、交換された記憶装置に対するパリティの再構築を、同じパリティグループ内の記憶装置ではなく、スナップショット用ミラー構成の同じ位置にある記憶装置からのデータコピーによって行うものがある。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2004−206239号公報
【特許文献2】特開2002−108571号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
ところで、ストレージシステムにおいて、例えばRAID−5で管理されている状態など、データが2重に冗長化された状態から、1つの記憶装置が故障すると、データの冗長性が失われた状態のままリビルド処理が行われる。このようなデータの冗長性が失われた状態で、さらに別の記憶装置からのデータの読み出しに失敗することがある。このような読み出しの失敗は、例えば、ディスク媒体面の部分的な欠損などによって発生し得る。データの冗長性が失われた状態で、さらに別の記憶装置からのデータの読み出しに失敗してしまうと、そのデータが失われてしまう。
【0008】
本発明はこのような課題に鑑みてなされたものであり、データロスト発生の可能性を低減したストレージシステム、ストレージ制御装置およびストレージ制御方法を提供することを目的とする。
【課題を解決するための手段】
【0009】
上記目的を達成するために、複数の記憶装置と、複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように複数の記憶装置に対するデータ記録を制御するストレージ制御装置と、複数の記憶装置のいずれかの代わりに使用される予備用記憶装置とを備えたストレージシステムが提供される。このストレージシステムにおいて、ストレージ制御装置は、リビルド制御部と、データ復旧制御部とを有する。リビルド制御部は、複数の記憶装置のうちの第1の記憶装置が故障すると、第1の記憶装置に記録されていたデータと同一のデータを予備用記憶装置に格納するリビルド処理を実行する。データ復旧制御部は、リビルド処理を実行中のリビルド制御部が、複数の記憶装置のうちの第2の記憶装置からのデータ読み出しに失敗したとき、第1の記憶装置から予備用記憶装置に格納するデータを読み出す。
【0010】
また、上記目的を達成するために、上記のストレージ制御装置と同様の処理を実行するストレージ制御装置およびストレージ制御方法が提供される。
【発明の効果】
【0011】
上記のストレージシステム、ストレージ制御装置およびストレージ制御方法によれば、データロストの発生の可能性を低減することができる。
【図面の簡単な説明】
【0012】
【図1】第1の実施の形態に係るストレージシステムの構成例を示す図である。
【図2】第2の実施の形態に係るストレージシステムの全体構成例を示す図である。
【図3】CMのハードウェア構成例を示す図である。
【図4】CMの処理機能の構成例を示すブロック図である。
【図5】RAID管理テーブルに登録される情報の例を示す図である。
【図6】バッドデータ管理テーブルに登録される情報の例を示す図である。
【図7】非冗長ライト管理テーブルに登録される情報の例を示す図である。
【図8】サルベージ管理テーブルに登録される情報の例を示す図である。
【図9】HDDにおけるデータ記録フォーマットの例を示す図である。
【図10】サルベージ処理が起動される状態の例を示す図である。
【図11】サルベージ方法(1)の実行に必要な前処理を示す図である。
【図12】サルベージ方法(1)の手順を示す図である。
【図13】サルベージ方法(2),(3)の実行に必要な前処理を示す図である。
【図14】サルベージ方法(2)の手順を示す図である。
【図15】サルベージ方法(3)の手順を示す図である。
【図16】リビルド処理手順の例を示すフローチャートである。
【図17】アクセス制御部によるI/O処理手順の例を示すフローチャートである。
【図18】サルベージ処理手順の例を示す図である。
【図19】第3の実施の形態のCMにおけるホストリード処理手順の例を示すフローチャート(その1)である。
【図20】第3の実施の形態のCMにおけるホストリード処理手順の例を示すフローチャート(その2)である。
【図21】第4の実施の形態におけるCMの処理機能の構成例を示すブロック図である。
【図22】ライト管理テーブルに登録される情報の例を示す図である。
【図23】サルベージ方法(2a)の実行に必要な前処理を示す図である。
【図24】サルベージ方法(2a)の手順を示す図である。
【図25】第4の実施の形態でのI/O処理手順の例を示すフローチャートである。
【図26】第4の実施の形態でのサルベージ処理手順の例を示すフローチャートである。
【発明を実施するための形態】
【0013】
以下、実施の形態について図面を参照して詳細に説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係るストレージシステムの構成例を示す図である。
【0014】
ストレージシステム1は、ストレージ制御装置10と、複数の記憶装置とを備える。ストレージシステム1が備える記憶装置は、HDD、SSD(Solid State Drive)などの不揮発性記憶装置である。図1では、ストレージシステム1が備える記憶装置として、記憶装置21,22,31を例示している。
【0015】
ストレージ制御装置10は、図示しないホスト装置からの要求に応じて、ストレージシステム1内の記憶装置に対するアクセスを制御する。また、ストレージ制御装置10は、記憶装置へのアクセス処理を、それぞれ複数の記憶装置の記憶領域によって構成される論理記憶領域ごとに管理する。以下、このような論理記憶領域をRLU(RAID Logical Unit)と呼ぶ。図1では例として、記憶装置21,22の各記憶領域が、1つのRLUに属している。
【0016】
ストレージ制御装置10は、RLUに属する複数の記憶装置を、RLUに記録するデータが異なる記憶装置の記憶領域に冗長化されるように管理する。これにより、RLUに属するいずれかの記憶装置が故障した場合でも、RLUに記録されたデータは失われない。なお、RLUの管理に使用される方法としては、RAID−1,4,5などがある。
【0017】
さらに、ストレージシステム1には、RLUに属するいずれかの記憶装置の代わりに使用される予備用記憶装置が、あらかじめ用意されている。図1では例として、記憶装置31が予備用であるものとする。
【0018】
ストレージ制御装置10は、リビルド制御部11と、データ復旧制御部12とを備える。リビルド制御部11およびデータ復旧制御部12の各処理は、例えば、ストレージ制御装置10が備えるCPU(Central Processing Unit)が所定のプログラムを実行することで実現される。
【0019】
リビルド制御部11は、RLUに属する1つの記憶装置(ここでは記憶装置22とする)が故障すると(ステップS1)、故障した記憶装置22に記録されていたデータと同一のデータを予備用の記憶装置31に格納する「リビルド処理」を実行する(ステップS2)。
【0020】
RLUがRAID−1で管理されている場合、リビルド制御部11は、RLUに属する他方の記憶装置21から読み出したRLUのデータを、予備用の記憶装置31にコピーする。また、RLUがRAID−4,5のいずれかで管理されている場合(ただしこの場合、RLUは3つ以上の記憶装置によって構成される)、リビルド制御部11は、RLUに属する故障していないすべての記憶装置からデータを読み出し、読み出したデータを基に故障した記憶装置に記録されていたデータを計算し、算出されたデータを予備用の記憶装置に格納する。
【0021】
データ復旧制御部12は、リビルド処理中において、リビルド制御部11がデータの読み出しに失敗したとき(ステップS3)、予備用の記憶装置31に格納すべきデータをサルベージする(復旧させる)処理を行う。図1では、リビルド処理中に記憶装置21からのデータ読み出しに失敗した場合を示している。
【0022】
データ復旧制御部12は、故障している記憶装置22からのデータ読み出しを試す。例えば、データ復旧制御部12は、故障している記憶装置22を再起動させ(ステップS4)、再起動した記憶装置22から、読み出しに失敗したデータに対応する、予備用の記憶装置31に格納すべきデータを読み出す(ステップS5)。ここで言う再起動とは、故障中の記憶装置22の電源オフおよび電源オンを行って、記憶装置22をリセットする処理である。なお、例えば、記憶装置22の故障発生(ステップS1)の後に記憶装置22の電源をオフした場合には、ステップS4の時点では記憶装置22の電源が再度オンにされる。逆に、記憶装置22の故障発生(ステップS1)の後に記憶装置22の電源がオンのままになっていた場合、データ復旧制御部12は、例えば、再起動の前に記憶装置22からのデータ読み出しを実行し、読み出しができなかった場合に記憶装置22を再起動して、再起動後の記憶装置22から再度読み出しを実行してもよい。
【0023】
記憶装置22からのデータ読み出しに成功した場合(すなわち、データのサルベージに成功した場合)、データ復旧制御部12は、読み出したデータを予備用の記憶装置31に格納する。
【0024】
このようなサルベージ処理により、リビルド処理時にデータの読み出しに失敗した場合でも、読み出しに失敗したデータに対応する、予備用の記憶装置31に格納すべきデータを復元できる可能性が生じる。従って、データロストが発生する可能性を低減することができる。
【0025】
なお、ストレージ制御装置10は、RLUに属する記憶装置22の故障が発生した後も、RLUに属する残りの記憶装置21を用いて、ホスト装置からの要求に応じたRLUへのアクセス処理を継続できる。データ復旧制御部12による上記のサルベージ処理では、ホスト装置からの要求に応じたアクセス処理には使用されていない、故障中の記憶装置21が再起動される。このため、ホスト装置からの要求に応じたアクセス処理に対して、サルベージ処理が与える影響が小さく、ホスト装置への応答速度が大きく低下しないようにすることができる。
【0026】
〔第2の実施の形態〕
図2は、第2の実施の形態に係るストレージシステムの全体構成例を示す図である。
図2に示すストレージシステム100は、CE(Controller Enclosure)200と、DE(Drive Enclosure)300とを含む。また、CE200には、ホスト装置400が接続されている。
【0027】
CE200は、CM(Controller Module)201,202を備える。CM201,202のそれぞれは、ホスト装置400からのI/O(In/Out)要求に応じて、DE300内の記憶装置に対するデータの読み書きを行う。CM201,202は、DE300内の記憶装置によって実現される物理記憶領域をRAIDによって管理し、これらの物理記憶領域に対するアクセスを制御する。
【0028】
なお、CM201,202は、例えばルータなどを介して互いに接続されていてもよい。また、CMは、CE200内に1つのみ設けられてもよいし、3つ以上設けられてもよい。ただし、CMが複数設けられることで、DE300に対するアクセス制御系統が冗長化され、アクセス制御処理の信頼性が向上する。
【0029】
DE300は、CM201,202からのアクセス制御対象となる複数の記憶装置を備える。本実施の形態において、DE300は、記憶装置としてHDDを備えるディスクアレイ装置である。なお、DE300が備える記憶装置としては、SSDなどの他の種類の不揮発性記憶装置を使用することもできる。また、CE200には、複数のDE300が接続されていてもよい。
【0030】
ホスト装置400は、ユーザの操作に応じて、CM201,202に対して、DE300内のHDDへのアクセスを要求する。ホスト装置400は、例えば、ユーザの操作に応じて、CM201,202のいずれかを通じて、DE300内のHDDからのデータの読み出しや、DE300内のHDDに対するデータの書き込みを行うことができる。
【0031】
なお、CE200内のCM201,202は、ともに同様の構成を有し、同様の処理を実行可能である。そこで、以下、CM201についてのみ説明し、CM202についての説明を省略する。
【0032】
図3は、CMのハードウェア構成例を示す図である。
CM201は、CPU211によって装置全体が制御されている。CPU211には、RAM(Random Access Memory)212および複数の周辺機器が、バス217を介して接続されている。RAM212は、CM201の主記憶装置として使用され、CPU211に実行させるプログラムの少なくとも一部や、このプログラムによる処理に必要な各種データを一時的に記憶する。
【0033】
CPU211には、周辺機器の例として、SSD213、入力I/F(インタフェース)214、CA(Channel Adapter)215およびDI(Drive Interface)216が接続されている。
【0034】
SSD213は、CM201の二次記憶装置として使用され、CPU211によって実行されるプログラムやその実行に必要な各種のデータなどを記憶する。なお、二次記憶装置としては、例えば、HDDなどの他の種類の不揮発性記憶装置が使用されてもよい。
【0035】
入力I/F214には、操作キーなどを備える入力装置214aが接続されている。入力I/F214は、入力装置214aに対する操作入力に応じた信号をCPU211に出力する。
【0036】
CA215は、ホスト装置400とCM201との間でデータを送受信するインタフェース処理を実行する。CA215とホスト装置400とは、例えば、FC(Fibre Channel)規格に従って通信する。
【0037】
DI216は、DE300とCM201との間でデータを送受信するインタフェース処理を実行する。DI216とDE300とは、例えば、SAS(Serial Attached SCSI,SCSI:Small Computer System Interface)規格に従って通信する。
【0038】
図4は、CMの処理機能の構成例を示すブロック図である。
CM201は、アクセス制御部220、リビルド制御部230およびサルベージ制御部240を備える。アクセス制御部220、リビルド制御部230およびサルベージ制御部240の処理は、例えば、CM201のCPU211が所定のプログラムを実行することで実現される。
【0039】
また、CM201の記憶装置には、RAID管理テーブル250、バッドデータ(Bad Data)管理テーブル260、非冗長ライト管理テーブル270およびサルベージ管理テーブル280が記憶される。これらの各テーブルは、例えばSSD213に記憶される。
【0040】
アクセス制御部220は、ホスト装置400からのI/O要求に応じて、DE300内のHDDにアクセスする。アクセス制御部220は、例えば、ホスト装置400からデータの読み出し要求を受けたとき、要求されたデータをDE300内の所定のHDDから読み出して、ホスト装置400に送信する。一方、アクセス制御部220は、ホスト装置400からデータの書き込み要求を受けたとき、ホスト装置400から受信した書き込み対象のデータを、DE300内の所定のHDDに書き込む。
【0041】
なお、以下の説明では、アクセス制御部220がホスト装置400からの読み出し要求に応じてHDDからデータを読み出すことを「ホストリードする」と呼ぶ。また、アクセス制御部200がホスト装置400からの書き込み要求に応じてHDDにデータを書き込むことを「ホストライトする」と呼ぶ。
【0042】
また、アクセス制御部220は、RAID管理テーブル250に設定された情報に基づいて、DE300内のHDDに記録するデータをRAIDによって管理する。アクセス制御部220は、RLU(RAID Logical Unit)ごとに記録データを所定のRAIDレベルによって管理する。RLUは、DE300に搭載された複数のHDDの物理記憶領域を組み合わせて構成される論理記憶領域であり、RAIDグループとも呼ばれる。
【0043】
RAID管理テーブル250は、RLUごとに、RLUの識別番号、適用されるRAIDレベル、RLUに属するHDDや論理ボリュームを示す情報、RLUの制御状態を示す情報などを保持する。アクセス制御部220は、RAID管理テーブル250を参照することで、例えば、ホストライトする際の書き込み先のHDDや、その書き込みの際に用いるRAIDレベルなどを判定する。なお、本実施の形態では、アクセス制御部220は、各RLUをデータが2重に冗長化されるRAIDレベルで管理する。データが2重に冗長化されるRAIDレベルとしては、例えば、RAID−1,RAID−4,RAID−5がある。
【0044】
また、アクセス制御部220は、RLUに属するHDDのうちの1つが故障して、そのRLUに記録されたデータの冗長性が失われてから、ホットスペアのHDDに対するリビルド処理を開始するための準備が整うまでの期間に、そのRLUに対するホストライトを行ったとき、データの書き込み先の位置情報を非冗長ライト管理テーブル270に登録する。
【0045】
リビルド制御部230は、RLUに属するHDDのうちの1つが故障したとき、故障したHDDに記録されていたデータをホットスペアのHDDに書き込む「リビルド処理」を実行する。リビルド制御部230は、リビルド処理の実行の際、RAID管理テーブル250を参照することで、故障したHDDに記録されていたデータをどのように生成するかを決定する。
【0046】
また、リビルド制御部230は、リビルド処理の実行中に、RLUに属するHDDのうち故障したHDD以外のHDDからのデータの読み出しに失敗すると、読み出しに失敗したデータの位置情報をバッドデータ管理テーブル260およびサルベージ管理テーブル280に登録するとともに、サルベージ制御部240に、読み出しに失敗したデータのサルベージを要求する。なお、アクセス制御部220は、バッドデータ管理テーブル260に登録された位置のデータについての読み出し要求をホスト装置400から受けたとき、ホスト装置400に対してエラー応答する。
【0047】
サルベージ制御部240は、リビルド制御部230によるリビルド処理において読み出しに失敗したデータをサルベージする。サルベージ管理テーブル280には、サルベージ処理の対象とされたデータ(すなわち、リビルド処理において読み出しに失敗したデータ)についての位置情報が登録されている。サルベージ制御部240は、サルベージ管理テーブル280に登録された位置情報に対応するデータについて順にサルベージ処理を実行することで、リビルド処理に対して非同期でサルベージ処理を実行できる。また、サルベージ制御部240は、非冗長ライト管理テーブル270などを参照しながら、後述するいくつかの処理パターンに従ってデータのサルベージを試みる。
【0048】
図5は、RAID管理テーブルに登録される情報の例を示す図である。
RAID管理テーブル250には、RLUごとにレコード251が登録される。各レコード251には、対応するRLUを識別するRLU番号が付与されている。以下の説明では、xx番のRLU番号を「RLU#xx」と表記し、RLU番号が「RLU#xx」であるRLUを、単に「RLU#xx」と呼ぶ。
【0049】
各レコード251には、「RAIDレベル」、「ディスク番号」、「論理ユニット番号」、「HSディスク番号」および「RAID状態」が登録される。
「RAIDレベル」は、対応するRLUの通常運用時におけるRAIDレベルを示す。本実施の形態では、「RAIDレベル」には、RAID−1,RAID−4,RAID−5のいずれかが設定される。
【0050】
「ディスク番号」は、対応するRLUを構成する物理記憶領域が属するHDDの識別番号を示す。RLUは、複数のHDDの物理記憶領域によって構成されるので、「ディスク番号」は、それらの複数のHDDのそれぞれについて登録される。なお、以下の説明では、xx番のディスク番号を「DISK#xx」と表記し、ディスク番号が「DISK#xx」であるHDDを、単に「DISK#xx」と呼ぶ。
【0051】
また、「ディスク番号」によって識別されるHDDのそれぞれには、「ディスク状態」が登録される。「ディスク状態」は、対応するHDDの動作状態を示す。「ディスク状態」には、例えば、「正常」、「故障」および「HSに退避中」のいずれかが設定される。「正常」は、対応するHDDが正常に動作していることを示し、「故障」は、対応するHDDが故障していることを示す。「HSに退避中」は、対応するHDDに記録されていたデータについてのホットスペアのHDDへのリビルド処理が完了し、そのホットスペアのHDDを組み込んでRLUが運用されていることを示す。
【0052】
「論理ユニット番号」は、対応するRLUに設定された、論理ユニット(または論理ボリューム)と呼ばれる論理記憶領域の識別番号を示す。1つのRLUには複数の論理ユニットを設定可能であり、「論理ユニット番号」は、設定された論理ユニットごとに登録される。なお、以下の説明では、論理ユニット番号を「LUN」と省略して呼ぶ。また、xx番の論理ユニットを「LUN#xx」と表記し、論理ユニット番号が「LUN#xx」である論理ユニットを、単に「LUN#xx」と呼ぶ。
【0053】
また、「論理ユニット番号」によって識別される論理ユニットのそれぞれには、「論理領域情報」および「物理領域情報」が登録される。「論理領域情報」には、論理ユニットに付与された論理アドレス(LBA:Logical Block Address)の範囲が登録される。「物理領域情報」には、論理ユニットに対して割り当てられた、各HDDにおける物理アドレスの範囲が登録される。
【0054】
なお、CM201は、アクセス先とするデータのLUNおよびLBAが指定されると、LUNが示す論理ユニットが属するRLUのRAIDレベルと、その論理ユニットに割り当てられたHDDの物理領域情報とから、データのアクセス先とするHDDやHDD内のブロックの位置(ストライプ番号など)を特定することができる。
【0055】
「HSディスク番号」は、リビルド処理中のみ設定され、リビルド先とされているホットスペアのHDDを識別する番号を示す。
「RAID状態」は、対応するRLUの状態を示す。「RAID状態」には、例えば、「通常運用状態」、「非冗長状態」、「リビルド中」および「HSに退避中」のいずれかが設定される。
【0056】
「通常運用状態」は、RLUに属するいずれのHDDにも異常がなく、データの冗長性を有する状態でRLUが正常に運用されていることを示す。「非冗長状態」は、RLUに属するいずれか1つのHDDが故障し、データの冗長性がない状態を示す。ただし、データの冗長性がない状態でも、「HSディスク番号」にホットスペアのHDDの識別番号が登録されて、リビルド処理の準備が整ってから、リビルド処理が完了するまでの間、「RAID状態」には「リビルド中」が設定される。「HSに退避中」は、ホットスペアのHDDへのリビルド処理が完了し、そのホットスペアのHDDを組み込んでRLUが運用されている状態を示す。
【0057】
図6は、バッドデータ管理テーブルに登録される情報の例を示す図である。
バッドデータ管理テーブル260には、リビルド制御部230またはサルベージ制御部240によってデータの読み出しが不可能と判定された、論理ユニット内のデータの位置情報が、論理ユニットの番号(LUN)と論理アドレス(LBA)との組み合わせとして登録される。
【0058】
本実施の形態では、リビルド処理中にデータの読み出しに失敗すると、読み出しに失敗したデータに対応するLUNおよびLBAが、リビルド制御部230によってバッドデータ管理テーブル260に登録される。また、バッドデータ管理テーブル260に登録されたデータについてのサルベージ処理が成功した場合には、そのデータに対応する位置情報はバッドデータ管理テーブル260から消去される。一方、サルベージ処理が不可能であった場合、そのデータについての位置情報はバッドデータ管理テーブル260に登録されたままになる。
【0059】
なお、バッドデータ管理テーブル260のデータ構造は、図6の例に限らず、例えば、LUNごとの全LBAに対して、読み出し失敗が発生したか否かを示すフラグ情報が対応付けられた構造であってもよい。また、バッドデータ管理テーブル260には、位置情報として、LUNおよびLBAの代わりに、例えば、HDDのディスク番号およびHDDにおける物理アドレスが登録されてもよい。
【0060】
図7は、非冗長ライト管理テーブルに登録される情報の例を示す図である。
非冗長ライト管理テーブル270には、RLUのRAID状態が「非冗長状態」であるときに、そのRLUに属する論理ユニットに対してホストライトが実行されたとき、書き込み先の位置を示す情報が、LUNとLBAとの組み合わせとして登録される。
【0061】
なお、非冗長ライト管理テーブル270のデータ構造は、図7の例に限らず、例えば、論理ユニットごとの全LBAに対して、「非冗長状態」におけるホストライトが実行されたか否かを示すフラグ情報が対応付けられた構造であってもよい。また、非冗長ライト管理テーブル270には、位置情報として、LUNおよびLBAの代わりに、例えば、HDDのディスク番号およびHDDにおける物理アドレスが登録されてもよい。
【0062】
図8は、サルベージ管理テーブルに登録される情報の例を示す図である。
サルベージ管理テーブル280は、サルベージ処理の対象とするデータを示す情報を一時的に保持することで、サルベージ制御部240がサルベージ処理をリビルド処理とは非同期に実行できるようにするものである。サルベージ管理テーブル280には、サルベージ処理の対象とするデータ(すなわち、リビルド処理時に読み出しに失敗したデータ)を示す位置情報が、論理ユニットの番号(LUN)、論理アドレス(LBA)およびディスク番号の組み合わせとして登録される。
【0063】
なお、サルベージ管理テーブル280には、LUNおよびLBAの代わりに、ディスク番号が示すHDDにおける物理アドレスが登録されてもよい。また、サルベージ処理に対象とするデータが通常時にRAID−1で管理されているデータである場合、サルベージ管理テーブル280には、ディスク番号のようなHDDを識別する情報が登録されなくてもよい。なぜなら、RAID−1で管理されている場合、サルベージ制御部240は、データの読み出しに失敗したHDDが、RLUに属する2台のHDDのうち故障していないHDDであることを、容易に判別可能であるからである。
【0064】
図9は、HDDにおけるデータ記録フォーマットの例を示す図である。
DE300内の各HDDに記録されるデータは、一定長のブロックに分割される。また、各HDDにおいては、ブロックが格納されるブロック領域に対してBCC(Block Check Code)が付与されている。通常、BCCには誤り検出コードが記録され、ブロックが読み出されるとき、そのブロックに対応するBCCを基に、読み出されるブロックの整合性がチェックされる。また、BCCには、対応するブロック領域の属性を示す情報を記録しておくこともできる。例えば、リビルド先となるホットスペアのHDDにおいては、リビルド処理中にブロック領域に書き込むべきデータを生成できなかった場合、そのブロック領域に対応するBCCに、「バッドデータ」を示す情報が書き込まれる。
【0065】
次に、サルベージ処理について説明する。まず、図10は、サルベージ処理が起動される状態の例を示す図である。この図10では例として、RAID−1の場合について説明する。
【0066】
図10の「状態1」において、RLU#00は、DISK#00,#01の各記憶領域によって構成され、これらの記憶領域がRAID−1で管理されている。この状態で、DISK#01の故障が発生すると(ステップS11)、リビルド制御部230は、DISK#01に記録されていたRLU#00のデータをホットスペアのDISK#10に格納するリビルド処理を実行する(ステップS12)。RLU#00にはRAID−1が設定されているので、リビルド処理では、DISK#00に記録されているRLU#00のデータがそのまま読み出されて、ホットスペアのDISK#10にコピーされる。
【0067】
ここで、リビルド処理が正常に完了すると、DISK#01に記録されていたRLU#00のデータがホットスペアのDISK#10に完全に復元される。このとき、故障したDISK#01の代わりにホットスペアのDISK#10がRLU#00に組み込まれることで、アクセス制御部220は、RLU#00におけるデータの冗長性が完全に回復した状態で、ホストリードやホストライトを続行できる。
【0068】
しかしながら、図10の「状態2」のように、リビルド処理の実行中に、リビルド制御部230がDISK#00中のあるブロックからのデータ読み出しに失敗すると(ステップS13)、読み出しに失敗したデータをホットスペアのDISK#10にコピーすることができなくなり、このデータを失ってしまう。これに対して、サルベージ制御部240は、読み出しに失敗したデータのサルベージ処理を行い、ホットスペアのDISK#10における対応する位置にリビルドデータが格納されるようにする。
【0069】
具体的には、リビルド制御部230は、リビルド処理中にDISK#00からのデータ読み出しに失敗すると、読み出しに失敗したデータの位置情報をサルベージ管理テーブル280に登録する(ステップS14)。サルベージ制御部240は、サルベージ管理テーブル280に登録された位置情報が示すデータについてのサルベージ処理を実行する。
【0070】
また、リビルド制御部230は、読み出しに失敗したデータの位置情報をバッドデータ管理テーブル260にも登録する(ステップS15)。アクセス制御部220は、バッドデータ管理テーブル260に登録された位置情報に対応するデータに対する読み出し要求を、ホスト装置400から受信したとき、ホスト装置400に対してエラー応答する。これにより、アクセス制御部220による、データの読み出しに失敗したデータへの無駄なアクセスの発生が防止される。
【0071】
なお、この時点では、バッドデータ管理テーブル260に対して位置情報が登録されなくてもよい。例えば、読み出しに失敗したデータについてのサルベージが不可能であったときに、サルベージ制御部240によってバッドデータ管理テーブル260に位置情報が登録されてもよい。
【0072】
なお、上記のステップS14,S15の処理順は、逆であってもよいし、あるいは並列に実行されてもよい。
ところで、前述のように、リビルド処理とは、故障したHDDに記録されていたデータを、リビルド先のHDD(本実施の形態ではホットスペアのHDD)に格納することである。図10の例のように、RAID−1のRLUにおけるリビルド処理では、故障していないHDDから読み出されたデータが、そのままリビルド先のHDDにコピーされる。
【0073】
サルベージ処理とは、本来、リビルド処理時に読み出しの失敗が発生した場合でも、何らかの方法により、故障したHDDに記録されていたデータがリビルド先のHDDに格納された状態にすることである。しかしながら、RAID−1のRLUにおけるサルベージ処理は、読み出しに失敗したデータと同じデータが、リビルド先のHDDに格納された状態にすることと同等である。
【0074】
これに対して、RAID−4,5のRLUにおけるリビルド処理では、故障したHDDに記録されていたデータは、故障していない他のHDDから読み出したデータを基に計算によってリビルドされる。このため、RAID−4,5のRLUにおけるサルベージ処理は、RAID−1の場合とは異なり、読み出しに失敗したデータと同じデータがリビルド先のHDDに格納された状態にすることとは同等でない。
【0075】
そこで、以下の説明では、主としてRAID−1のRLUにおけるサルベージ処理の手順について説明し、必要に応じて、RAID−4,5のRLUにおけるサルベージ処理の手順についても補足説明する。なお、RAID−4,5の場合について補足説明する場合には、RLUがDISK#00〜#04の記憶領域によって構成されるものとする。
【0076】
サルベージ制御部240は、次のサルベージ方法(1)〜(3)を利用してサルベージ処理を実行する。
サルベージ方法(1):ホットスペアのHDDに記録されたデータを基にサルベージする。
【0077】
サルベージ方法(2):故障したHDDを再起動させ、少なくとも再起動したHDDから読み出したデータを基にサルベージする。
サルベージ方法(3):データの読み出しに失敗したHDDを再起動させ、少なくとも再起動したHDDから読み出したデータを基にサルベージする。
【0078】
以下、上記のサルベージ方法(1)〜(3)について、詳細に説明する。
図11は、サルベージ方法(1)の実行に必要な前処理を示す図である。
図11の「状態11」は、図10の「状態1」と同様に、RLU#00を構成するDISK#01の故障が発生した場合を示す。このとき、リビルド制御部230は、リビルド先とするホットスペアのHDDを選択するが、リビルド先とするホットスペアのHDDの全記憶領域を、あらかじめBCCエラー状態にしておく。ここで言うBCCエラー状態とは、ブロックのデータを読み出したときに、そのブロックに対応するBCCから読み出しエラーが検出されるように、BCCに何らかの値が設定されている状態である。ただし、BCCエラー状態では、BCCには、前述したバッドデータを示す情報以外の値が設定されることが望ましい。BCCエラー状態と、BCCがバッドデータを示す状態とを区別することで、BCCがバッドデータを示したとき、そのBCCに対応するブロックのデータについてはサルベージが不可能であったことを明確に認識できるようになる。
【0079】
ところで、アクセス制御部220は、DISK#01が故障した後も、データの冗長性がない状態のままで、残りのDISK#00を用いてRLU#00に対するホストリードおよびホストライトを継続する。ただし、図11の「状態12」に示すように、リビルド先とするホットスペアのDISK#10の準備が整ってから(具体的には、RAID管理テーブル250におけるRLU#00に対応するレコード251内の「HSディスク番号」にDISK#10が設定されてから)、リビルド処理が完了するまでの期間、アクセス制御部220は、ホスト装置400から書き込み要求を受けたとき(ステップS21)、DISK#00だけでなく、リビルド先のDISK#10に対してもホストライトを行う(ステップS22,S23)。
【0080】
RLU#00がRAID−1の場合、「状態12」では、ホスト装置400から書き込み要求されたデータをDISK#00に書き込む(ステップS22)とともに、同じデータを、ホットスペアのDISK#10における対応するブロックにも書き込む(ステップS23)。ホットスペアのDISK#10では、データが書き込まれたブロックに対応するBCCに誤り検出コードが上書きされ、このブロックは正常に読み出し可能な状態になる。これにより、もしDISK#10におけるホストライトされたブロックについて、リビルド処理が実行されていない場合でも、そのブロックには最新の書き込みデータが格納されていることになる。
【0081】
ここで、RLU#00がRAID−4,5のいずれかの場合について補足説明する。RAID−4,5のいずれかで運用されるRLUがDISK#00〜#04の各記憶領域によって構成されている場合、通常運用時のホストライトは次のように行われる。アクセス制御部220は、書き込みを要求されたデータを一定長に分割する。アクセス制御部220は、例えば、連続する分割データD0〜D3を基にパリティP0を計算する。RAID−4の場合、アクセス制御部220は、分割データD0〜D3およびパリティP0を、それぞれあらかじめ決められたHDDに書き込む。一方、RAID−5の場合、アクセス制御部220は、分割データD0〜D3およびパリティP0を、DISK#00〜#04に分散させて書き込む。
【0082】
例えばDISK#04が故障した状態で、新たな分割データD0〜D3の書き込みが要求された場合、図11の「状態12」に示す前処理は次のように行われる。例えば、DISK#04に書き込むべきデータが分割データD3である場合、アクセス制御部220は、他のDISK#00〜#03に、分割データD0〜D2、および、これらの分割データに基づくパリティP0を書き込む(ステップS22)とともに、分割データD3をDISK#10に書き込む(ステップS23)。また、例えば、DISK#04に書き込むべきデータがパリティP0である場合、アクセス制御部220は、他のDISK#00〜#03に、分割データD0〜D3を書き込む(ステップS22)とともに、分割データD0〜D3に基づくパリティP0を計算して、算出したパリティP0をDISK#10に書き込む(ステップS23)。
【0083】
ただし、分割データD0〜D3のうち例えば分割データD3のみが更新される場合には、分割データD0〜D2が記録されたHDDに対しては書き込みが行われない。従ってこの場合、故障したDISK#04に対する書き込みが必ず行われる訳ではなく、DISK#04に分割データD3またはパリティP0が書き込まれる場合のみ、DISK#10に分割データD3またはパリティP0が書き込まれることになる。
【0084】
すなわち、RAID−1,4,5のいずれの場合でも、図11の「状態12」に示す前処理では、アクセス制御部220は、ホスト装置400から書き込みが要求されたとき、故障したHDDに書き込むべきデータがある場合には、そのデータをホットスペアのHDDに書き込む。
【0085】
図12は、サルベージ方法(1)の手順を示す図である。
リビルド制御部230は、DISK#01に記録されたデータについてのリビルド処理の際、図11の「状態12」のような、ホスト装置400からの要求に応じた書き込みがあったか否かに関係なく、DISK#00内の読み出し対象領域の全域からのデータ読み出しを行う。図12の「状態13」に示すように、リビルド制御部230による、DISK#01に記録されたデータについてのリビルド処理が実行されているときに、DISK#00上のあるブロックからのデータ読み出しに失敗したとする(ステップS24)。この場合、サルベージ制御部240は、読み出しに失敗したブロックに対応する、ホットスペアのDISK#10のブロックに、データが書き込まれているかを判定する。この判定処理は、DISK#10の対応するブロックからのデータ読み出しに成功するか否かによって行われる(ステップS25)。DISK#10のブロックからのデータ読み出しに成功した場合、そのブロックにはホストライトによる最新のデータがすでに格納されていることになるので、サルベージ制御部240は、データのサルベージに成功したと判断する。一方、DISK#10のブロックからのデータ読み出し時にBCCエラーが検出された場合、サルベージ制御部240は、データのサルベージに失敗したと判断する。この場合、サルベージ制御部240は、他のサルベージ方法を試みる。
【0086】
なお、以上の図12に示したサルベージ方法(1)の手順は、RLU#00がRAID−4,5のいずれかの場合でも同様である。すなわち、サルベージ制御部240は、ホットスペアのDISK#10における対応するブロック(読み出しに失敗したブロックと同じストライプ番号のブロック)からのデータ読み出しに成功した場合、データのサルベージに成功したと判断する。
【0087】
次に、図13は、サルベージ方法(2),(3)の実行に必要な前処理を示す図である。
図13の「状態21」は、図10の「状態1」と同様に、RLU#00を構成するDISK#01の故障が発生した場合を示す。ただし、「状態21」は、DISK#01が故障してから、リビルド先とするホットスペアのDISK#10の準備が整うまで(具体的には、RAID管理テーブル250におけるRLU#00に対応するレコード251内の「HSディスク番号」にDISK#10が設定されるまで)の状態を示す。この「状態21」では、アクセス制御部220は、DISK#00のみを用いてRLU#00に対するホストリードおよびホストライトを継続する。
【0088】
サルベージ方法(2),(3)の前処理として、アクセス制御部220は、「状態21」においてホスト装置400からRLU#00に対する書き込み要求を受けると(ステップS31)、DISK#00の対応するブロックにデータを書き込む。これとともに、アクセス制御部220は、データの書き込み位置を示す位置情報(データを書き込んだブロックに対応するLUNおよびLBA)を、非冗長ライト管理テーブル270に登録する(ステップS32)。
【0089】
「状態21」においてホストライトが発生すると、書き込まれるデータは冗長性がない状態となる。従って、非冗長ライト管理テーブル270には、RLU#00に記録されたデータのうち冗長性のないデータの位置情報が登録されることになる。
【0090】
なお、以上の「状態21」に示した前処理の手順は、RLU#00がRAID−4,5のいずれかの場合でも同様であり、アクセス制御部220は、ホストライトした位置の情報を非冗長ライト管理テーブル270に登録する。
【0091】
図14は、サルベージ方法(2)の手順を示す図である。
図14の「状態22」は、図13の「状態21」から、ホットスペアのDISK#10に対するリビルド処理が開始された状態を示す。RLU#00がRAID−1の場合、リビルド制御部230は、DISK#00に記録されたRLU#00のデータを読み出して、DISK#10にコピーする。このようなリビルド処理中に、リビルド制御部230が、DISK#00からのデータ読み出しに失敗したものとする(ステップS33)。
【0092】
サルベージ制御部240は、DISK#01が故障してから現在までの間に、DISK#00における読み出しに失敗したブロック、またはそのブロックに対応するDISK#10のブロックの少なくとも一方に対して、ホストライトが行われたかを判定する。具体的には、サルベージ制御部240は、前述のサルベージ方法(1)においてホットスペアのDISK#10における対応するブロックからのデータ読み出しに失敗し、かつ、非冗長ライト管理テーブル270に、読み出しに失敗したブロックに対応する位置に対してホストライトが行われたことが登録されていない場合に、DISK#00,#10の少なくとも一方における対応するブロックに対してDISK#01の故障から現在までにホストライトが行われていないと判定する(ステップS34)。
【0093】
ホストライトが行われていないと判定された場合、DISK#00からの読み出しに失敗したデータに対応する、ホットスペアのDISK#10にリビルドすべきデータは、故障したDISK#01にのみ存在する可能性が高い。このことから、サルベージ制御部240は、故障したDISK#01を再起動させ(ステップS35)、再起動したDISK#01から、DISK#10にリビルドするデータを読み出すことができるかを試す。
【0094】
図14の「状態23」に示すように、サルベージ制御部240は、読み出しに失敗したDISK#00のブロックに対応する、再起動したDISK#01のブロックから、データを読み出す。データの読み出しに成功した場合、サルベージ制御部240は、読み出したデータを、ホットスペアのDISK#10における同じストライプ番号に対応するブロックにコピーする。この場合、データのサルベージに成功したことになる(ステップS36)。
【0095】
なお、以上の図14に示したサルベージ方法(2)の手順は、RLU#00がRAID−4,5のいずれかの場合でも同様である。すなわち、サルベージ制御部240は、再起動したDISK#01における対応するブロックからのデータの読み出しに成功すると、読み出したデータを、ホットスペアのDISK#10における同じストライプ番号のブロックにコピーする。
【0096】
図15は、サルベージ方法(3)の手順を示す図である。
図13の「状態21」からリビルド処理が開始され、リビルド処理中に、リビルド制御部230がDISK#00からのデータ読み出しに失敗したものとする(ステップS41)。サルベージ制御部240は、図15の「状態31」に示すように、非冗長ライト管理テーブル270に、読み出しに失敗したブロックに対応する位置に対してホストライトが行われたことが登録されているかを判定する。
【0097】
非冗長ライト管理テーブル270にホストライトが行われたことが登録されていた場合、読み出しに失敗したデータに対応するDISK#01のブロックには、最新のデータが登録されていない。これとともに、読み出しに失敗したデータに対応するDISK#10のブロックには、データが記録されておらず、このブロックはBCCエラー状態になっているはずである。このことから、サルベージ制御部240は、読み出しに失敗したものの、最新のデータが残っている可能性のあるDISK#00を再起動させ(ステップS43)、再起動したDISK#00における読み出し失敗位置から、データの読み出しを再度試みる。例えば、リビルド処理におけるデータ読み出しの失敗要因が一時的なものである場合などに、再起動後のデータ読み出しに成功する可能性がある。
【0098】
図15の「状態32」に示すように、サルベージ制御部240は、再起動したDISK#00における読み出し失敗位置からのデータの読み出しに成功した場合、読み出したデータを基に、DISK#10に記録すべきデータをサルベージする(ステップS44)。RAID−1の場合、サルベージ制御部240は、再起動したDISK#00から読み出したデータを、ホットスペアのDISK#10における対応するブロックにコピーする。
【0099】
なお、RLU#00がRAID−4,5のいずれかであり、RLU#00の記憶領域がDISK#00〜DISK#04で構成され、DISK#04が故障し、DISK#00からのデータ読み出しに失敗したものとすると、「状態32」のステップS44では、次のような処理が実行される。サルベージ制御部240は、サルベージ管理テーブル280に登録された位置情報を基に、データの読み出しに失敗したHDDを判別し、判別したHDD(ここではDISK#00)を再起動させる。サルベージ制御部240は、再起動したDISK#00から読み出したデータと、残りの故障していないDISK#01〜03における同じストライプ番号に対応するブロックから読み出したデータとを基に、ホットスペアのDISK#10に格納すべきデータを生成する。
【0100】
例えば、DISK#00から分割データD0の読み出しに失敗し、この分割データD0に対応するパリティP0が故障したDISK#04に記録されているとする。この場合、サルベージ制御部240は、再起動したDISK#00から読み出した分割データD0と、残りの故障していないDISK#01〜03から読み出した分割データD1〜D3とを基に、パリティP0を計算し、ホットスペアのDISK#10に格納する。
【0101】
また、例えば、DISK#00から分割データD0の読み出しに失敗し、故障したDISK#04に分割データD3が記録されているとする。この場合、サルベージ制御部240は、再起動したDISK#00から読み出した分割データD0と、残りの故障していないDISK#01〜03から読み出した分割データD1,D2およびパリティP0から、分割データD3を計算し、ホットスペアのDISK#10に格納する。
【0102】
次に、上記のサルベージ方法(1)〜(3)を用いたサルベージ処理について、フローチャートを用いて説明する。まず、図16は、リビルド処理手順の例を示すフローチャートである。
【0103】
[ステップS101]アクセス制御部220は、DE300内のHDDが故障したことを検出すると、故障したHDDのディスク番号と、そのHDDが属するRLUのRLU番号とを、リビルド制御部230に通知する。以下、RLU#00に属する1つのHDDが故障したものとして、説明を続ける。
【0104】
アクセス制御部220からの通知を受けたリビルド制御部230は、RAID管理テーブル250からRLU#00のレコード251を抽出し、抽出したレコード251において、故障したHDDのディスク番号に対応する「ディスク状態」を「故障」に更新するとともに、「RAID状態」を「非冗長状態」に更新する。
【0105】
故障したHDDのディスク番号に対応する「ディスク状態」が「故障」に更新されることで、故障したHDDはRLU#00から切り離される。なお、故障したHDDは、RLU#00から切り離された時点で、電源オフにされてもよい。あるいは、故障したHDDは、例えば、新たなHDDに交換される直前に電源オフにされてもよい。
【0106】
[ステップS102]リビルド制御部230は、リビルド先とするホットスペアのHDDを準備する。具体的には、リビルド制御部230は、リビルド先とするホットスペアのHDDを選択し、選択したHDDのディスク番号を、RAID管理テーブル250におけるRLU#00のレコード251の「HSディスク番号」に登録する。さらに、リビルド制御部230は、RLU#00のレコード251の「RAID状態」を「リビルド中」に更新する。これにより、ホットスペアのHDDの準備が完了し、リビルド処理を開始できる状態となる。
【0107】
[ステップS103]リビルド制御部230は、RLU#00に属する論理ユニットからリビルド対象とするデータ領域を、所定数のLBA単位で選択する。リビルド制御部230は、選択したデータ領域に対応するデータのリビルドを実行する。
【0108】
ここで言う「データのリビルド」とは、ホットスペアのHDDに対して格納するデータを生成することであり、以下、生成されたデータを「リビルドデータ」と呼ぶ。例えば、RLU#00が正常時にRAID−1で管理されている場合、リビルド制御部230は、RLU#00に属する故障していないHDDから単にデータを読み出すことで、リビルドデータを生成する。一方、RLU#00が正常時にRAID−4,5のいずれかで管理されている場合、リビルド制御部230は、RLU#00に属する故障していないHDDの同一ストライプ番号の位置からデータを読み出し、読み出しデータを基にした計算によってリビルドデータを生成する。
【0109】
[ステップS104]ステップS103でのリビルドデータの生成時に、故障していないHDDからのデータ読み出しに成功した場合(S104:No)、リビルド制御部230は、ステップS105の処理を実行する。一方、故障していないHDDからのデータ読み出しに失敗して、リビルドデータを生成できなかった場合(S104:Yes)、リビルド制御部230は、ステップS106の処理を実行する。
【0110】
[ステップS105]リビルド制御部230は、ステップS103で生成したリビルドデータを、ホットスペアのHDDにおける対応する領域に格納する。
[ステップS106]リビルド制御部230は、ステップS103で選択したデータ領域を示すLUNおよびLBAと、ステップS104でデータ読み出しに失敗したHDDのディスク番号とを、サルベージ管理テーブル280に登録する。また、リビルド制御部230は、ステップS103で選択したデータ領域を示すLUNおよびLBAを、バッドデータ管理テーブル260に登録する。なお、サルベージ管理テーブル280およびバッドデータ管理テーブル260のどちらに対して先に情報を登録するかは、特に限定されるものではない。
【0111】
[ステップS107]リビルド制御部230は、RLU#00に属する全論理ユニットの全データ領域についてリビルド処理を完了したかを判定する。全データ領域のリビルド処理を完了していない場合(S107:No)、リビルド制御部230は、ステップS103の処理に戻り、次のデータ領域についてのリビルド処理を実行する。一方、全データ領域のリビルド処理を完了した場合(S107:Yes)、リビルド制御部230は、ステップS108の処理を実行する。
【0112】
[ステップS108]リビルド制御部230は、RLU#00についてのサルベージ制御部240によるサルベージ処理が完了したかを判定する。ここでは、リビルド制御部230は、サルベージ管理テーブル280にRLU#00に属する位置情報が登録されていない場合に、RLU#00についてのサルベージ処理が完了したと判定する。なお、RLU#00のリビルド処理時にデータの読み出しに失敗しなかった場合(すなわち、ステップS104で「No」と判定されなかった場合)、サルベージ管理テーブル280には、RLU#00に属する位置情報は登録されない。
【0113】
RLU#00についてのサルベージ処理が完了したと判定する(S108:Yes)と、リビルド制御部230は、RAID管理テーブル250のRLU#00のレコード251において、故障したHDDに対応する「ディスク状態」を「HSに退避中」に更新するとともに、「RAID状態」を「HSに退避中」に更新する。これにより、リビルド処理が完了する。
【0114】
次に、図17は、アクセス制御部によるI/O処理手順の例を示すフローチャートである。この図17は、I/O処理対象のRLU#00に属する1つのHDDが故障してから、RLU#00のリビルド処理が完了するまでの期間におけるI/O処理を示す。この期間とは、RAID管理テーブル250のRLU#00のレコード251において、故障したHDDに対応する「ディスク状態」に「故障」が設定され、かつ、「RAID状態」が「非冗長状態」または「リビルド中」が設定されている期間である。
【0115】
[ステップS121]アクセス制御部220は、ホスト装置400から、RLU#00に対するI/O要求を受信する。
[ステップS122]I/O要求が読み出し要求である場合(S122:Yes)、ステップS123の処理が実行される一方、I/O要求が書き込み要求である場合(S122:No)、ステップS126の処理が実行される。
【0116】
[ステップS123]ホスト装置400から読み出し要求を受信した場合(S122:Yes)、アクセス制御部220は、読み出し要求先のデータ領域の位置情報がバッドデータ管理テーブル260に登録されているかを判定する。アクセス制御部220は、対応する位置情報がバッドデータ管理テーブル260に登録されていなかった場合(S123:No)、ステップS124の処理を実行する。一方、アクセス制御部220は、対応する位置情報がバッドデータ管理テーブル260に登録されていた場合(S123:Yes)、ステップS125の処理を実行する。
【0117】
[ステップS124]アクセス制御部220は、読み出しを要求されたデータをHDDから読み出して、ホスト装置400に返信する。すなわち、アクセス制御部220は、ホスト装置400に対して正常応答する。
【0118】
[ステップS125]アクセス制御部220は、ホスト装置400に対して、要求されたデータを正常に読み出すことができなかったとして、エラー応答する。
なお、ホスト装置400から読み出し要求を受信した場合(S122:Yes)、アクセス制御部220は、バッドデータ管理テーブル260を参照せずにデータの読み出しを実行してもよい。この場合、アクセス制御部220は、読み出しに成功した場合にはステップS124を実行する一方、読み出しに失敗した場合にはステップS125を実行する。ただし、読み出し対象のデータの位置情報がバッドデータ管理テーブル260に登録されている場合、そのデータの読み出しを正常に実行できない可能性が高い。このため、バッドデータ管理テーブル260を参照することで、アクセス制御部220による無駄なデータアクセスの実行を防止できる。
【0119】
[ステップS126]ホスト装置400から書き込み要求を受信した場合(S122:No)、アクセス制御部220は、リビルド先とするホットスペアのHDDの準備が完了しているかを判定する。具体的には、アクセス制御部220は、RAID管理テーブル250のRLU#00のレコード251において、「HSディスク番号」にホットスペアのHDDのディスク番号が設定されており、かつ、「RAID状態」に「リビルド中」が設定されている場合に、ホットスペアのHDDの準備が完了していると判定する。
【0120】
ホットスペアのHDDの準備が完了している場合(S126:Yes)、アクセス制御部220は、ステップS127の処理を実行する。一方、ホットスペアのHDDの準備が完了していない場合(S126:No)、アクセス制御部220は、ステップS128の処理を実行する。
【0121】
[ステップS127]アクセス制御部220は、RLU#00に属する故障していない所定のHDDに対して、書き込み処理を行う。また、アクセス制御部220は、故障したHDDに書き込むべきデータがある場合には、そのデータをホットスペアのHDDに書き込む。
【0122】
このステップS127で実行される書き込み処理の内容は、図11の「状態12」で説明した通りである。ホットスペアのHDDに書き込みが行われた場合、書き込みが行われたブロックに対応するBCCには、ブロックに書き込まれたデータに基づく誤り検出コードが上書きされる。これにより、ブロックに書き込まれたデータが正常に読み出し可能な状態になるとともに、そのブロックに対応するLBAに対してリビルド処理中にホストライトがあったことを、サルベージ制御部240がサルベージ処理中に認識できるようになる。
【0123】
なお、例えば、このステップS127において、故障していないHDDに対するデータの書き込みが正常に行われなかったとしても、書き込みできなかったデータのサルベージを可能にするデータがホットスペアのHDDに書き込まれる。このため、後のリビルド処理時に、書き込みできなかった位置からのデータ読み出しに失敗した場合でも、サルベージ制御部240は、少なくともホットスペアのHDDに書き込まれたデータを基に、読み出しに失敗したデータをサルベージすることができる。
【0124】
[ステップS128]アクセス制御部220は、RLU#00に属する故障していない所定のHDDに対して、書き込み処理を行う。
[ステップS129]アクセス制御部220は、データの書き込み位置を示す位置情報(データを書き込んだブロックに対応するLUNおよびLBA)を、非冗長ライト管理テーブル270に登録する。
【0125】
なお、ステップS128,S129の処理の内容は、図13の「状態21」で説明した通りである。ステップS129の処理により、非冗長ライト管理テーブル270には、RLU#00に記録されたデータのうち冗長性のないデータの位置情報が登録されることになる。
【0126】
次に、図18は、サルベージ処理手順の例を示す図である。この図18の処理は、サルベージ制御部240が、サルベージ管理テーブル280に登録された位置情報を1つ選択するたびに実行される。また、サルベージ制御部240は、サルベージ管理テーブル280から選択した位置情報内のLUNが設定されたRLUを、RAID管理テーブル250を基に特定する。ここでは、RLU#00が特定されたものとして説明する。
【0127】
[ステップS141]サルベージ制御部240は、RAID管理テーブル250におけるRLU#00のレコード241内の「HSディスク番号」から、ホットスペアのHDD(ここではDISK#10とする)を認識する。サルベージ制御部240は、図12の「状態13」のステップS25と同様の手順で、位置情報から特定されるホットスペアのHDDのブロックから、データを読み出せるかを試す。この処理での読み出し位置は、RAID−1の場合、読み出しに失敗したブロックと同じデータが格納される、ホットスペアのHDDのブロックであり、RAID−4,5のいずれかの場合、読み出しに失敗したブロックと同じストライプ番号に対応する、ホットスペアのHDDのブロックである。
【0128】
[ステップS142]サルベージ制御部240は、ステップS141でのデータ読み出しに成功した場合には(S142:Yes)、ステップS151の処理を実行する。この場合、データのサルベージに成功したことになる。一方、サルベージ制御部240は、ステップS141でデータを読み出せなかった場合には(S142:No)、ステップS143の処理を実行する。
【0129】
なお、データのサルベージに成功した場合、例えば、サルベージ制御部240はさらに、読み出しに失敗したHDDにおける対応するブロック(すなわち、リビルド処理時に読み出しに失敗したブロック)にも、データの書き込みを行ってもよい。RLU#00がRAID−1の場合、サルベージ制御部240は、ホットスペアのDISK#10から読み出したデータを、読み出しに失敗したHDDにおける対応するブロックに書き込む。一方、RLU#00がRAID−4,5のいずれかの場合、サルベージ制御部240は、RLU#00に属する故障していないHDDのうち読み出しに失敗したHDD以外のHDDから、読み出しに失敗したブロックと同じストライプ番号のブロックのデータを読み出す。サルベージ制御部240は、読み出したこれらのデータと、ホットスペアのDISK#10から読み出したデータとを基に、読み出しに失敗したデータを計算し、算出されたデータを読み出しに失敗したHDDにおける同じストライプ番号のブロックに書き込む。
【0130】
[ステップS143]ステップS141でのデータ読み出しでBCCエラーが検出された場合(S143:Yes)、ステップS144の処理が実行される。一方、ステップS141でデータを読み出せなかった要因がBCCエラー以外の要因である場合(ステップS143:No)、ステップS148の処理が実行される。なお、後者の場合の例としては、ホットスペアのDISK#10が故障している場合などがある。
【0131】
[ステップS144]サルベージ制御部240は、RLU#00内のHDDが故障してから、ホットスペアのDISK#10の準備ができるまでの期間に、RLU#00に対して非冗長状態でのホストライトが行われたかを判定する。具体的には、サルベージ制御部240は、サルベージ管理テーブル280から選択した位置情報内のLUNおよびLBAが、非冗長ライト管理テーブル270に登録されているかを判定する。この判定処理は、図14の「状態22」のステップS34、および、図15の「状態31」のステップS42で説明した判定処理に対応する。
【0132】
同じLUNおよびLBAが非冗長ライト管理テーブル270に登録されていた場合(ステップS144:Yes)、サルベージ制御部240はステップS148の処理を実行する。一方、同じLUNおよびLBAが非冗長ライト管理テーブル270に登録されていない場合(ステップS144:No)、サルベージ制御部240はステップS145の処理を実行する。
【0133】
[ステップS145]RLU#00に属するHDDの故障が発生してから現在までにRLU#00に対するホストライトが行われていない場合(S142:NoかつS146:Yesの場合)、リビルドデータの生成に必要な最新のデータは、ホットスペアのDISK#10にも、読み出しに失敗したHDDにも格納されていないと推定される。そこで、図14の「状態22,23」に示したように、サルベージ制御部240は、故障しているHDDからのデータ読み出しを試す。
【0134】
サルベージ制御部240は、RAID管理テーブル250におけるRLU#00のレコード241から、故障しているHDDを認識し、そのHDDの電源をオフした後オンにすることで、そのHDDを再起動させる。この処理は、図14の「状態22」のステップS35の処理に対応する。なお、サルベージ制御部240は、故障しているHDDの電源がすでにオフである場合には、そのHDDの電源を単にオンすることで再起動する。
【0135】
[ステップS146]サルベージ制御部240は、再起動したHDDにおける、位置情報から特定されるブロック(すなわち、読み出しに失敗したブロックに対応する、故障したHDDのブロック)から、データを読み出す。この処理での読み出し位置は、RAID−1の場合、読み出しに失敗したブロックと同じデータが格納される、故障したHDDのブロックであり、RAID−4,5のいずれかの場合、読み出しに失敗したブロックと同じストライプ番号に対応する、故障したHDDのブロックである。
【0136】
サルベージ制御部240は、データの読み出しに成功した場合(S146:Yes)、ステップS147の処理を実行する一方、データを読み出せなかった場合(S146:No)、ステップS148の処理を実行する。
【0137】
なお、例えば、ステップS145の時点で故障しているHDDの電源がオンであった場合、サルベージ制御部240は、例えば、そのHDDを再起動させる前に、そのHDDからのデータ読み出しを行ってもよい。この場合、サルベージ制御部240は、データの読み出しに成功した場合にはステップS147の処理を実行する。その一方、サルベージ制御部240は、データの読み出しに失敗した場合には、ステップS145,S146の手順で、故障しているデータの再起動を行った後、データの読み出しに成功したかを判定する。
【0138】
[ステップS147]サルベージ制御部240は、ステップS146で再起動したHDDから読み出したデータを、その読み出し元のブロックに対応する、ホットスペアのDISK#10のブロックに書き込む。これにより、データのサルベージに成功したことになる。以上のステップS146(Yesの場合),S147の処理は、図14の「状態23」のステップS36の処理に対応する。この後、ステップS151の処理が実行される。
【0139】
なお、ステップS147では、サルベージ制御部240はさらに、読み出しに失敗したHDDにおける対応するブロック(すなわち、リビルド処理時に読み出しに失敗したブロック)にも、データの書き込みを行ってもよい。RLU#00がRAID−1の場合、サルベージ制御部240は、再起動したHDDから読み出したデータを、読み出しに失敗したHDDにおける対応するブロックに書き込む。一方、RLU#00がRAID−4,5のいずれかの場合、サルベージ制御部240は、RLU#00に属する故障していないHDDのうち読み出しに失敗したHDD以外のHDDから、読み出しに失敗したブロックと同じストライプ番号のブロックのデータを読み出す。サルベージ制御部240は、読み出したこれらのデータと、再起動したHDDから読み出したデータとを基に、読み出しに失敗したデータを計算し、算出されたデータを読み出しに失敗したHDDにおける同じストライプ番号のブロックに書き込む。
【0140】
また、ステップS147の完了後、サルベージ制御部240は、ステップS145で再起動したHDDの動作をオフにして、このHDDをRLU#00から切り離すことが望ましい。なぜなら、ステップS145で再起動したHDDは、一度故障したと判定されたHDDであるので、その後に安定的に動作する可能性が低いからである。
【0141】
[ステップS148]非冗長ライト管理テーブル270にホストライトが行われたことが登録されていた場合(S144:Yes)、読み出しに失敗したブロックにのみ、それ以前にホストライトによって最新のデータが書き込まれたことになる。このため、図15の「状態31,32」に示したように、サルベージ制御部240は、読み出しに失敗したブロックが属するHDDからのデータ読み出しを試す。
【0142】
サルベージ制御部240は、サルベージ管理テーブル280から選択した位置情報内のディスク番号から、読み出しに失敗したHDDを認識し、そのHDDの電源をオフした後オンにすることで、そのHDDを再起動させる。この処理は、図15の「状態31」のステップS43に対応する。
【0143】
なお、RLU#00がRAID−1である場合、サルベージ制御部240は、サルベージ管理テーブル280に登録されたディスク番号を用いなくても、読み出しに失敗したHDDを認識することができる。RAID−1の場合、読み出しに失敗したHDDは、RLU#00に属するHDDのうち故障していないHDDであると容易に判定できるからである。
【0144】
[ステップS149]サルベージ制御部240は、再起動したHDDにおける、位置情報から特定されるブロック(すなわち、読み出しに失敗したブロック)から、データを読み出す。サルベージ制御部240は、データの読み出しに成功した場合(S149:Yes)、ステップS150の処理を実行する一方、データを読み出せなかった場合(S149:No)、ステップS152の処理を実行する。
【0145】
[ステップS150]サルベージ制御部240は、少なくとも再起動したHDDから読み出したデータを基に、リビルドデータを生成し、生成したリビルドデータを、ホットスペアのDISK#10における対応するブロックに書き込む。
【0146】
図15の「状態32」のステップS44で説明したように、RLU#00がRAID−1の場合、サルベージ制御部240は、再起動したHDDから読み出したデータを、ホットスペアのDISK#10における対応するブロック(同じデータを格納すべきブロック)に書き込む。また、RLU#00がRAID−4,5のいずれかの場合、サルベージ制御部240は、再起動したHDDと、RLU#00に属する残りの故障していないHDDのそれぞれの同じストライプ番号からデータを読み出し、読み出したデータを基に、ホットスペアのDISK#10に格納すべきリビルドデータを計算する。サルベージ制御部240は、算出されたリビルドデータをホットスペアのDISK#10の同じストライプ番号に対応するブロックに書き込む。以上の処理により、データのサルベージに成功したことになる。
【0147】
[ステップS151]データのサルベージに成功したことから、サルベージ制御部240は、サルベージ管理テーブル280から選択した位置情報と同じLUNおよびLBAが登録された、バッドデータ管理テーブル260のレコードを消去する。
【0148】
[ステップS152]サルベージ制御部240は、サルベージ管理テーブル280から選択した位置情報(LUN、LBAおよびディスク番号)を、サルベージ管理テーブル280から消去する。
【0149】
なお、サルベージ方法(1)〜(3)のいずれを用いてもデータのサルベージが不可能であった場合(S149:No)には、サルベージ管理テーブル280に登録された位置情報は消去される(S152)ものの、バッドデータ管理テーブル260に登録された位置情報はそのまま残る。アクセス制御部220は、リビルド処理完了後のホストリード時において、読み出し対象がバッドデータ管理テーブル260に登録された位置に対応する場合には、ホスト装置400に対してエラー応答する。これにより、アクセス制御部220は、失ったデータに対する読み出し要求を受けたとき、HDDへの余計なアクセスを行うことなく、ホスト装置400に対して応答できるようになる。
【0150】
なお、データのサルベージが不可能であった場合(S149:No)、サルベージ制御部240は、バッドデータ管理テーブル260に位置情報を残す代わりに、例えば、位置情報から特定されるホットスペアのHDDのブロック(すなわち、読み出しに失敗したブロックに対応する、ホットスペアのHDDのブロック)のBCCに対して、バッドデータであることを示す情報を書き込んでもよい。「バッドデータ」は、例えば、対応するブロックのデータをロストしたことを示す。この場合、アクセス制御部220は、リビルド処理完了後に、サルベージが不可能であったデータの読み出し要求を受けたとき、ホットスペアのDISK#10の対応ブロックのBCCから、データをロストしたことを明確に認識できるようになる。
【0151】
以上説明した図16〜図18の処理によれば、リビルド処理中にデータ読み出しに失敗した場合でも、データロストをできるだけ回避することができる。従って、ストレージシステムの信頼性を高めることができる。
【0152】
なお、図18の処理では、サルベージ方法(1)〜(3)のうちサルベージ方法(1)を最初に実行した(ステップS141)。これにより、サルベージ対象のRLU#00におけるホストライトおよびホストリードの処理に対して、サルベージ処理の負荷が与える影響をごく小さくすることができる。
【0153】
また、図18の処理では、例えば、ステップS143,S144の判定処理を行わずに、サルベージ方法(2)(ステップS145,S146)、サルベージ方法(3)(ステップS148,S149)の順に実行してもよい。この場合、非冗長ライト管理テーブル270が不要になり、CM201に必要な記憶容量を小さくすることができる。
【0154】
また、サルベージ方法(2)は、故障しているためにホストリードやホストライトの対象として使用されていないHDDを再起動するものである。一方、サルベージ方法(3)は、ホストリードおよびホストライトの対象のHDDを再起動するので、HDDの動作が再開されるまでの間、ホスト装置400への応答が待ち状態になってしまう。このことから、サルベージ方法(3)を用いた処理よりサルベージ方法(2)を用いた処理を先に実行することで、ホストライトおよびホストリードの処理に与える影響を小さくし、ホスト装置400に対する応答速度をできるだけ低下させないようにすることができる。
【0155】
なお、上記の第2の実施の形態では、リビルド処理時にデータの読み出しに失敗したタイミングと非同期に、サルベージ処理が行われた。しかしながら、他の例として、データの読み出しに失敗したとき、リビルド処理を中断して即座にサルベージ処理が実行されてもよい。例えば、図16のステップS104において読み出しに失敗したと判定したとき(S104:Yes)、バッドデータ管理テーブル260に位置情報が登録されるとともに(図16のS106)、図18の処理が実行される。ただし、データの読み出し失敗時にサルベージ処理を実行する場合には、サルベージ管理テーブル280へのデータ登録(図16のS106)が不要になるので、図18のステップS152の処理も不要になる。
【0156】
また、上記の第2の実施の形態では、リビルド処理中にデータ読み出しに失敗したとき、即座にバッドデータ管理テーブル260に位置情報を登録した。しかしながら、別の処理例として、データ読み出しに失敗した時点ではバッドデータ管理テーブル260に位置情報を登録せずに、データのサルベージが不可能と判定されたとき(図18のS149:No)に、サルベージ制御部240が位置情報をバッドデータ管理テーブル260に登録してもよい。この場合、アクセス制御部220は、リビルド処理中のRLU#00に対する読み出し要求をホスト装置400から受信したとき、その読み出し元がリビルド処理においてデータの読み出しに失敗した位置であったとしても、一旦HDDからのデータ読み出しを試みる。
【0157】
〔第3の実施の形態〕
上記の第2の実施の形態では、アクセス制御部220は、RLUのリビルド処理が開始された後に、そのRLUに対するホスト装置400からの読み出し要求を受信したとき、読み出しの対象がバッドデータ管理テーブル260に登録されている場合には、無条件にホスト装置400に対してエラー応答した。これに対して、以下の第3の実施の形態において、アクセス制御部220は、ホスト装置400からの読み出し要求に応じてHDDからのデータ読み出しを行い、読み出しに失敗した場合には、そのデータについてのサルベージ処理をサルベージ制御部240に実行させる。これにより、HDDの故障が生じた場合でも、ホスト装置400から読み出しを要求されたデータを返信できる確率を高くする。
【0158】
なお、第3の実施の形態に係るストレージシステムにおいて、CMのハードウェア構成や処理機能の基本的な構成は、第2の実施の形態のCM201と同様である。そこで、以下、第3の実施の形態のCM201の処理を、第2の実施の形態の図4に示した符号を用いて説明する。
【0159】
図19および図20は、第3の実施の形態のCMにおけるホストリード処理手順の例を示すフローチャートである。
まず、図19のステップS171〜S176について説明する。
【0160】
[ステップS171]ここでは例として、RLU#00に属する1つのHDDが故障しているものとする。この状態で、アクセス制御部220は、RLU#00からのデータの読み出し要求をホスト装置400から受信すると、次のステップS172を実行する。
【0161】
[ステップS172]アクセス制御部220は、読み出し要求先のデータ領域の位置情報がバッドデータ管理テーブル260に登録されているかを判定する。アクセス制御部220は、対応する位置情報がバッドデータ管理テーブル260に登録されていなかった場合(S172:No)、ステップS173の処理を実行する。
【0162】
一方、アクセス制御部220は、対応する位置情報がバッドデータ管理テーブル260に登録されていた場合(S172:Yes)、その位置情報をサルベージ制御部240に通知して、サルベージ処理の実行を要求する。この実行要求に応じて、サルベージ制御部240は、図20のステップS141の処理を実行する。
【0163】
[ステップS173]アクセス制御部220は、読み出しを要求されたデータをHDDから読み出す。
[ステップS174]アクセス制御部220は、データの読み出しに成功した場合(S174:Yes)、ステップS175の処理を実行する。一方、データを読み出せなかった場合(S174:No)、アクセス制御部220は、読み出しに失敗したデータに対応する位置情報をサルベージ制御部240に通知して、サルベージ処理の実行を要求する。この実行要求に応じて、サルベージ制御部240は、図20のステップS141の処理を実行する。
【0164】
[ステップS175]アクセス制御部220は、ステップS173でHDDから読み出したデータを、ホスト装置400に返信する。すなわち、アクセス制御部220は、ホスト装置400に対して正常応答する。
【0165】
[ステップS176]アクセス制御部220は、ホスト装置400に対して、要求されたデータを正常に読み出すことができなかったとして、エラー応答する。
次に、図20の処理について説明する。図20では、図18と同様の処理が実行される処理ステップには同じステップ番号を付して示し、これらの詳細な処理内容の説明を省略する。
【0166】
アクセス制御部220からサルベージ処理の要求を受け付けたサルベージ制御部240は、前述のサルベージ方法(1)を用いて、ホットスペアのHDDからのデータ読み出しを試す(S141)。サルベージ制御部240は、ホットスペアのHDDからのデータ読み出しに成功した場合(S142:Yes)、ステップS142aの処理を実行する。
【0167】
[ステップS142a]サルベージ制御部240は、ホットスペアのHDDから読み出したデータを基に、ホスト装置400に返信する読み出しデータを生成する。RLU#00がRAID−1の場合、読み出しデータは、ホットスペアのHDDから読み出されたデータと同じである。一方、RLU#00がRAID−4,5のいずれかである場合、サルベージ制御部240は、ホットスペアのHDDから読み出したデータと、RLU#00に属する故障していないHDDのうち、読み出しに失敗したHDDを除くHDDから読み出したデータとを基に、読み出しデータを計算によって生成する。
【0168】
一方、ホットスペアのHDDからのデータ読み出しに失敗し(S142:No)、その読み出し失敗要因がBCCエラーであり(S143:Yes)、かつ、非冗長ライト管理テーブル270に対応する位置情報が登録されていない(S144:No)場合には、サルベージ制御部240は、前述のサルベージ方法(2)を用いた処理を行う。すなわち、サルベージ制御部240は、故障したHDDを再起動させ(S145)、再起動したHDDからのデータ読み出しを試みる。再起動したHDDからのデータ読み出しに成功した場合(S146:Yes)、サルベージ制御部240は、ステップS147aの処理を実行する。
【0169】
[ステップS147a]サルベージ制御部240は、ステップS145で再起動したHDDから読み出したデータを基に、ホスト装置400に返信する読み出しデータを生成する。RLU#00がRAID−1の場合、読み出しデータは、再起動したHDDから読み出されたデータと同じである。一方、RLU#00がRAID−4,5のいずれかである場合、サルベージ制御部240は、再起動したHDDから読み出したデータと、RLU#00に属する故障していないHDDのうち、読み出しに失敗したHDDを除くHDDから読み出したデータとを基に、読み出しデータを計算によって生成する。
【0170】
また、ホットスペアのHDDからのデータ読み出しの失敗要因がBCCエラー以外の場合(S143:No)、または、非冗長ライト管理テーブル270に対応する位置情報が登録されていた場合(S144:Yes)、または、故障後に再起動したHDDからのデータ読み出しに失敗した場合(S146:No)には、サルベージ制御部240は、前述のサルベージ方法(3)を用いた処理を行う。すなわち、サルベージ制御部240は、読み出しに失敗したHDDを再起動させ(S148)、再起動したHDDからのデータ読み出しを試みる。
【0171】
ここで、再起動したHDDからのデータ読み出しに失敗した場合(S149:No)、サルベージ制御部240は、データのサルベージに失敗したことをアクセス制御部220に通知する。サルベージ失敗の通知を受けたアクセス制御部220は、ホスト装置400に対してエラー応答する(図19のS176)。
【0172】
一方、ステップS148でのデータ読み出しに成功した場合(S149:Yes)、または、ステップS142a,147aのいずれかの処理後、サルベージ制御部240は、バッドデータ管理テーブル260に登録された、サルベージ対象のデータに対応する位置情報を、バッドデータ管理テーブル260から消去する(S151)。この後、サルベージ制御部240は、アクセス制御部220に対してサルベージに成功したことを通知するとともに、ステップS142a,147aのいずれかで生成した読み出しデータ、またはステップS148で再起動したHDDから読み出したデータを、アクセス制御部220に受け渡す。アクセス制御部220は、サルベージ制御部240から受け取ったデータをホスト装置400に返信する(図19のS175)。
【0173】
以上の第3の実施の形態によれば、リビルド処理中だけでなく、HDDの故障が生じ、かつ、ホスト装置400からの読み出し要求に応じたデータの読み出しに失敗したときにも、サルベージ処理が実行される。従って、HDDの故障が発生した場合にホストリードを正常に実行できる可能性を高くすることができる。
【0174】
〔第4の実施の形態〕
上記の第2の実施の形態で示したサルベージ方法(2)では、RLUに属するHDDの故障が発生してから現在までの期間にホストライトが行われたかを判定し、ホストライトが行われていなかった場合に、故障したHDDを再起動させてそのHDDからデータを読み出した。そして、サルベージ方法(2)では、上記の判定処理を、ホットスペアのHDDからデータを読み出すことができるか(図18のS142)、および、非冗長ライト管理テーブル270に対応する位置情報が登録されているか(図18のS144)という2つの判定によって行った。
【0175】
これに対して、以下の第4の実施の形態におけるサルベージ処理では、RLUに属するHDDの故障が発生してから現在までの期間にホストライトが行われたか否かを、ライト管理テーブルを用いて判定する。そして、ライト管理テーブルに基づき、ホストライトが行われていないと判定された場合に、故障したHDDを再起動させてそのHDDからデータを読み出す。以下、このようなライト管理テーブルに基づくサルベージ方法を、サルベージ方法(2a)と表す。
【0176】
図21は、第4の実施の形態におけるCMの処理機能の構成例を示すブロック図である。なお、この図21では、図4に対応する処理ブロックには同じ符号を付して示す。
第4の実施の形態において、CM201の記憶装置には、非冗長ライト管理テーブル270の代わりに、ライト管理テーブル290が記憶される。ライト管理テーブル290は、RLUに属するHDDの故障が発生してからリビルド処理が完了するまでの期間に、そのRLUに対して実行されたホストライトについての書き込み位置を示す位置情報が登録される。
【0177】
アクセス制御部220は、RLUに属するHDDのうちの1つが故障して、そのRLUに記録されたデータの冗長性が失われてから、ホットスペアのHDDに対するリビルド処理が完了するまでの期間に、そのRLUに対するホストライトを行ったとき、データの書き込み先の位置情報をライト管理テーブル290に登録する。
【0178】
サルベージ制御部240は、サルベージ処理の際にライト管理テーブル290を参照し、サルベージ対象のデータに対応する位置情報がライト管理テーブル290に登録されているか否かに応じて、サルベージ処理手順を決定する。
【0179】
図22は、ライト管理テーブルに登録される情報の例を示す図である。
ライト管理テーブル290には、RLUのRAID状態が「非冗長状態」または「リビルド中」であるときに、そのRLUに属する論理ユニットに対してホストライトが実行されたとき、書き込み先の位置を示す情報が、LUNとLBAとの組み合わせとして登録される。
【0180】
なお、ライト管理テーブル290のデータ構造は、図22の例に限らず、例えば、論理ユニットごとの全LBAに対して、「非冗長状態」または「リビルド中」におけるホストライトが実行されたか否かを示すフラグ情報が対応付けられた構造であってもよい。また、ライト管理テーブル290には、位置情報として、LUNおよびLBAの代わりに、例えば、HDDのディスク番号およびHDDにおける物理アドレスが登録されてもよい。
【0181】
次に、第4の実施の形態において実行されるサルベージ処理について説明する。まず、図23は、サルベージ方法(2a)の実行に必要な前処理を示す図である。
図23の「状態41」は、図10の「状態1」と同様に、RLU#00を構成するDISK#01の故障が発生した場合を示す。ただし、「状態41」は、DISK#01が故障してから、ホットスペアのDISK#10へのリビルド処理が完了するまでの期間における状態を示す。この期間には、図13の「状態21」のような、リビルド先とするホットスペアのDISK#01の準備が整うまでの期間も含む。
【0182】
サルベージ方法(2a)の前処理として、アクセス制御部220は、「状態41」においてホスト装置400からRLU#00に対する書き込み要求を受けると(ステップS61)、DISK#00の対応するブロックにデータを書き込む。これとともに、アクセス制御部220は、データの書き込み位置を示す位置情報(データを書き込んだブロックに対応するLUNおよびLBA)を、ライト管理テーブル290に登録する(ステップS62)。なお、このステップS62での処理手順は、RLU#00がRAID−4,5のいずれかの場合でも同様であり、アクセス制御部220は、ホストライトした位置の情報を非冗長ライト管理テーブル270に登録する。
【0183】
なお、すでにホットスペアのDISK#10の準備が整っている場合、アクセス制御部220は、図11の「状態12」に示したステップS23と同様に、DISK#00だけでなく、リビルド先のDISK#10に対してもホストライトを行ってもよい(ステップS64)。例えば、RLU#00がRAID−1の場合、ステップS64では、アクセス制御部220は、ホスト装置400から書き込み要求されたデータを、DISK#10にも書き込む。なお、RLU#00がRAID−4,5のいずれかである場合のステップS64の処理は、図11のステップS23で説明した処理と同様である。このようなステップS64の処理を実行することで、前述のサルベージ方法(1)も併用できるようになる。
【0184】
図24は、サルベージ方法(2a)の手順を示す図である。
図24の「状態42」は、図23の「状態41」において、ホットスペアのDISK#10に対するリビルド処理が実行されている状態を示す。RLU#00がRAID−1の場合、リビルド制御部230は、DISK#00に記録されたRLU#00のデータを読み出して、DISK#10にコピーする。このようなリビルド処理中に、リビルド制御部230が、DISK#00からのデータ読み出しに失敗したものとする(ステップS65)。
【0185】
サルベージ制御部240は、DISK#01が故障してから現在までの期間に、RLU#00に対するホストライトが行われたかを判定する。なお、この期間にホストライトが行われた場合、DISK#00における読み出しに失敗したブロック、またはそのブロックに対応するDISK#10のブロックの少なくとも一方に対して、最新のデータが記録されている状態となる。
【0186】
サルベージ制御部240は、上記の判定処理を、読み出しに失敗したブロックに対応する位置情報がライト管理テーブル290に登録されているかによって行う。そして、登録されていない場合、サルベージ制御部240は、DISK#01が故障してから現在までの期間にRLU#00に対するホストライトが行われていないと判定する(ステップS66)。この場合、DISK#00からの読み出しに失敗したデータに対応する、ホットスペアのDISK#10にリビルドすべきデータは、故障したDISK#01にのみ存在する可能性が高い。そこで、サルベージ制御部240は、故障したDISK#01を再起動させ(ステップS67)、再起動したDISK#01から、DISK#10にリビルドするデータを読み出すことができるかを試す。
【0187】
図24の「状態43」に示すように、サルベージ制御部240は、読み出しに失敗したDISK#00のブロックに対応する、再起動したDISK#01のブロックから、データを読み出す。データの読み出しに成功した場合、サルベージ制御部240は、読み出したデータを、ホットスペアのDISK#10における対応するブロックにコピーする。この場合、データのサルベージに成功したことになる(ステップS68)。
【0188】
なお、以上の図24に示したサルベージ方法(2a)の手順は、RLU#00がRAID−4,5のいずれかの場合でも同様である。すなわち、サルベージ制御部240は、再起動したDISK#01における対応するブロックからのデータの読み出しに成功すると、読み出したデータを、ホットスペアのDISK#10における同じストライプ番号に対応するブロックにコピーする。
【0189】
次に、上記のサルベージ方法(2a)とサルベージ方法(1),(3)とを組み合わせたサルベージ処理の例について、フローチャートを用いて説明する。
まず、図25は、第4の実施の形態でのI/O処理手順の例を示すフローチャートである。この図25は、I/O処理対象のRLU#00に属する1つのHDDが故障してから、RLU#00のリビルド処理が完了するまでの期間におけるI/O処理を示す。この期間とは、RAID管理テーブル250のRLU#00のレコード251において、故障したHDDに対応する「ディスク状態」に「故障」が設定され、かつ、「RAID状態」が「非冗長状態」または「リビルド中」が設定されている期間である。
【0190】
なお、図25では、図17と同様の処理が実行される処理ステップには同じ符号を付して示し、その処理内容の説明を省略する。図25では、図17と比較して、ホスト装置400から書き込み要求を受信したときの処理手順(ステップS126以降の処理手順)が異なる。
【0191】
すなわち、ホスト装置400から書き込み要求を受信した場合(S122:No)、アクセス制御部220は、リビルド先とするホットスペアのHDDの準備が完了しているかを判定する(S126)。ホットスペアのHDDの準備が完了している場合(S126:Yes)、アクセス制御部220は、RLU#00に属する故障していない所定のHDDに対して、書き込み処理を行う(S127)。また、アクセス制御部220は、故障したHDDに書き込むべきデータがある場合には、そのデータをホットスペアのHDDに書き込む。この後、ステップS129aの処理が実行される。
【0192】
一方、ホットスペアのHDDの準備が完了していない場合(S126:No)、アクセス制御部220は、RLU#00に属する故障していない所定のHDDに対して、書き込み処理を行う(S128)。この後、ステップS129aの処理が実行される。
【0193】
[ステップS129a]アクセス制御部220は、データの書き込み位置を示す位置情報(データを書き込んだブロックに対応するLUNおよびLBA)を、ライト管理テーブル290に登録する。これにより、ライト管理テーブル290には、RLU#00に属するHDDが故障してから、リビルド処理が完了するまでの期間に、RLU#00を書き込み先としたホストライトが行われた位置の情報が登録される。
【0194】
図26は、第4の実施の形態でのサルベージ処理手順の例を示すフローチャートである。この図26の処理は、図18と同様に、サルベージ制御部240が、サルベージ管理テーブル280に登録された位置情報を1つ選択するたびに実行される。また、サルベージ制御部240は、サルベージ管理テーブル280から選択した位置情報内のLUNが設定されたRLUを、RAID管理テーブル250を基に特定する。ここでは、RLU#00が特定されたものとして説明する。
【0195】
なお、図26では、図18と同様の処理が実行される処理ステップには同じ符号を付して示し、その処理内容の説明を省略する。
[ステップS161]サルベージ制御部240は、RLU#00内のHDDが故障してから現在までの期間に、RLU#00に対して非冗長状態でのホストライトが行われたかを判定する。具体的には、サルベージ制御部240は、サルベージ管理テーブル280から選択した位置情報内のLUNおよびLBAが、ライト管理テーブル290に登録されているかを判定する。
【0196】
同じLUNおよびLBAがライト管理テーブル290に登録されていた場合(ステップS144:Yes)、ホットスペアのDISK#10と、読み出しに失敗したHDDのいずれかに、ホストライトによる最新のデータが記録されている可能性が高いと推定される。そこで、サルベージ制御部240は、サルベージ方法(1)を用いたサルベージ処理、およびサルベージ方法(3)を用いたサルベージ処理を、順に試行する。
【0197】
まず、サルベージ制御部240は、サルベージ方法(1)を用いて、ホットスペアのDISK#10からデータを読み出す(S141)。ホットスペアのDISK#10からのデータ読み出しに成功した場合(S142:Yes)、データのサルベージに成功したことになり、ステップS151の処理が実行される。
【0198】
ホットスペアのDISK#10からのデータ読み出しに失敗した場合(S142:No)、サルベージ制御部240は、サルベージ方法(3)を用いて、読み出しに失敗したブロックが属するHDDを再起動させ(S148)、再起動したHDDからのデータ読み出しを試す(S149)。再起動したHDDからのデータ読み出しに成功した場合(S149:Yes)、サルベージ制御部240は、少なくとも再起動したHDDから読み出したデータを基に、リビルドデータを生成し、生成したリビルドデータを、ホットスペアのDISK#10における対応するブロックに書き込む(S150)。この後、ステップS151の処理が実行される。一方、再起動したHDDからのデータ読み出しに失敗した場合(S149:No)、データのサルベージに失敗したことになり、ステップS152の処理が実行される。
【0199】
上記のステップS161(Yes),S141,S142(No),S148,S149(Yes),S150の処理では、図18の処理と比較して、故障したHDDからのデータ読み出しが実行されることなく、読み出しに失敗したHDDからのデータ読み出しが実行される。このため、読み出しに失敗したHDDからのデータを基にサルベージに成功する場合、サルベージに成功するまでの時間が短縮される。
【0200】
なお、ステップS161で、対応する位置情報がライト管理テーブル290に登録されていなかった場合には、ステップS141,S142の処理を行うことなく、ステップS148の処理が実行されてもよい。この場合、図25においては、ステップS126,S127の処理が不要になり、アクセス制御部220は、書き込み要求を受信した場合(S122:No)、無条件にステップS128,S129aの処理を実行してもよい。
【0201】
次に、ステップS161で、同じLUNおよびLBAがライト管理テーブル290に登録されていない場合(ステップS144:No)には、ホットスペアのDISK#10にも、読み出しに失敗したHDDにも、最新データは記録されていないと推定される。そこで、サルベージ制御部240は、サルベージ方法(2a)を用いて、故障したHDDを再起動させ(S145)、再起動したHDDからのデータ読み出しを試す(S146)。
【0202】
再起動したHDDからのデータ読み出しに成功した場合(S146:Yes)、サルベージ制御部240は、読み出したデータを、その読み出し元ブロックに対応する、ホットスペアのDISK#10のブロックに書き込む(S147)。これにより、データのサルベージに成功したことになり、ステップS151の処理が実行される。一方、再起動したHDDからのデータ読み出しに失敗した場合(S146:No)、データのサルベージに失敗したことになり、ステップS152の処理が実行される。
【0203】
上記のステップS161(No),S145,S146(Yes),S147の処理では、図18の処理のようにホットスペアのDISK#10からのデータ読み出しを試すことなく、故障したHDDからのデータ読み出しが実行される。このため、データのサルベージに成功するまでの時間が短縮される。一方、故障したHDDからのデータ読み出しに失敗した場合(S146:No)には、リビルド処理時に読み出しに失敗したHDDを再起動することなく、データのサルベージに失敗したと判定される。このため、アクセス制御部220によるRLU#00に対するI/O処理が停止してしまう確率を低くすることができる。
【0204】
なお、以上の第4の実施の形態では、第2の実施の形態と同様に、リビルド処理とサルベージ処理とを非同期に実行するものとした。しかしながら、リビルド処理の際にデータの読み出しに失敗した時点で、図26の示すサルベージ処理が実行されてもよい。
【0205】
また、図26に示したサルベージ処理は、ホストリードの際にデータの読み出しに失敗した場合に実行されてもよい。
また、前述の第2の実施の形態で使用された非冗長ライト管理テーブル270には、HDDの故障が発生してから、リビルド先とするホットスペアのHDDの準備が完了するまでの期間にホストライトが発生した場合に、位置情報が登録される。これに対して、第4の実施の形態で使用されるライト管理テーブル290は、HDDの故障が発生してからリビルド処理が完了するまでの期間にホストライトが発生した場合に、位置情報が登録される。このため、ライト管理テーブル290より、非冗長ライト管理テーブル270の方がデータ量を小さくできる可能性が高い。すなわち、第2の実施の形態の方が、第4の実施の形態と比較して、ホストライトが発生したことを記憶するテーブルの容量を小さくすることができる。
【0206】
以上の各実施の形態に関し、さらに以下の付記を開示する。
(付記1) 複数の記憶装置と、前記複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置と、前記複数の記憶装置のいずれかの代わりに使用される予備用記憶装置とを備えたストレージシステムにおいて、
前記ストレージ制御装置は、
前記複数の記憶装置のうちの第1の記憶装置が故障すると、前記第1の記憶装置に記録されていたデータと同一のデータを前記予備用記憶装置に格納するリビルド処理を実行するリビルド制御部と、
前記リビルド処理を実行中の前記リビルド制御部が、前記複数の記憶装置のうちの第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出すデータ復旧制御部と、
を有することを特徴とするストレージシステム。
【0207】
(付記2) 前記ストレージ制御装置は、ホスト装置からのアクセス要求に応じて前記複数の記憶装置内のデータにアクセスするアクセス制御部であって、前記第1の記憶装置が故障したとき、前記複数の記憶装置のうちの前記第1の記憶装置を除く残りの記憶装置を用いて、前記ホスト装置からのアクセス要求に応じたアクセス処理を継続するアクセス制御部をさらに有することを特徴とする付記1記載のストレージシステム。
【0208】
(付記3) 前記アクセス制御部は、前記リビルド処理の実行中に前記ホスト装置から書き込み要求を受けたとき、前記第1の記憶装置に書き込むべきデータがある場合には、当該データを前記予備用記憶装置に書き込み、
前記データ復旧制御部は、
前記リビルド制御部が前記第2の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれているかを判定し、
データが書き込まれている場合には、当該データについての前記リビルド処理が完了していると判定し、
データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出す、
ことを特徴とする付記2記載のストレージシステム。
【0209】
(付記4) 前記データ復旧制御部は、
前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
起動した前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出せなかった場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする付記3記載のストレージシステム。
【0210】
(付記5) 前記データ復旧制御部は、
前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていない場合には、前記第1の記憶装置が故障してから、前記アクセス制御部が前記予備用記憶装置にデータを書き込み可能になるまでの期間に、前記第2の記憶装置における前記読み出しに失敗したデータの位置に対して前記アクセス制御部によってデータが書き込まれたかを判定し、
データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
データが書き込まれていた場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする付記3記載のストレージシステム。
【0211】
(付記6) 前記予備用記憶装置における全記憶領域は、あらかじめデータの読み出しエラーが発生する状態とされ、
前記データ復旧制御部は、前記リビルド制御部が前記第2の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置からのデータ読み出しを実行し、
データを正常に読み出すことができた場合には、当該データについての前記リビルド処理が完了していると判定し、
データの読み出しエラーが発生した場合には、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていないと判定する、
ことを特徴とする付記3〜5のいずれか1つに記載のストレージシステム。
【0212】
(付記7) 前記データ復旧制御部は、
前記リビルド制御部が前記第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置が故障してから現在までの期間に、前記第2の記憶装置における読み出しに失敗したデータの位置に対して前記アクセス制御部によってデータが書き込まれたかを判定し、
データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
データが書き込まれていた場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする付記2記載のストレージシステム。
【0213】
(付記8) 前記データ復旧制御部は、前記第1の記憶装置が故障した後、前記ホスト装置からの読み出し要求に応じた前記第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置における読み出しを要求されたデータに対応する位置からデータを読み出すことを特徴とする付記1記載のストレージシステム。
【0214】
(付記9) 複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置において、
前記ストレージ制御装置は、
前記複数の記憶装置のうちの第1の記憶装置が故障すると、前記第1の記憶装置に記録されていたデータと同一のデータを予備用記憶装置に格納するリビルド処理を実行するリビルド制御部と、
前記リビルド処理を実行中の前記リビルド制御部が、前記複数の記憶装置のうちの第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出すデータ復旧制御部と、
を有することを特徴とするストレージ制御装置。
【0215】
(付記10) ホスト装置からのアクセス要求に応じて前記複数の記憶装置内のデータにアクセスするアクセス制御部であって、前記第1の記憶装置が故障したとき、前記複数の記憶装置のうちの前記第1の記憶装置を除く残りの記憶装置を用いて、前記ホスト装置からのアクセス要求に応じたアクセス処理を継続するアクセス制御部をさらに有することを特徴とする付記9記載のストレージ制御装置。
【0216】
(付記11) 前記アクセス制御部は、前記リビルド処理の実行中に前記ホスト装置から書き込み要求を受けたとき、前記第1の記憶装置に書き込むべきデータがある場合には、当該データを前記予備用記憶装置に書き込み、
前記データ復旧制御部は、
前記リビルド制御部が前記第2の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれているかを判定し、
データが書き込まれている場合には、当該データについての前記リビルド処理が完了していると判定し、
データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出す、
ことを特徴とする付記10記載のストレージ制御装置。
【0217】
(付記12) 前記データ復旧制御部は、
前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
起動した前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出せなかった場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする付記11記載のストレージシステム。
【0218】
(付記13) 複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置におけるストレージ制御方法であって、
前記複数の記憶装置のうちの第1の記憶装置が故障すると、前記第1の記憶装置に記録されていたデータと同一のデータを予備用記憶装置に格納するリビルド処理を実行し、
前記リビルド処理において前記複数の記憶装置のうちの第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出す、
ことを特徴とするストレージ制御方法。
【0219】
(付記14) ホスト装置からのアクセス要求に応じて前記複数の記憶装置内のデータにアクセスするアクセス処理をさらに含み、
前記アクセス処理では、前記第1の記憶装置が故障したとき、前記複数の記憶装置のうちの前記第1の記憶装置を除く残りの記憶装置を用いて、前記ホスト装置からのアクセス要求に応じたアクセス処理を継続する、
ことを特徴とする付記13記載のストレージ制御方法。
【0220】
(付記15) 前記アクセス処理では、前記リビルド処理の実行中に前記ホスト装置から書き込み要求を受けたとき、前記第1の記憶装置に書き込むべきデータがある場合には、当該データを前記予備用記憶装置に書き込み、
前記リビルド処理において前記第2の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における読み出しに失敗したデータに対応する位置に対して、前記アクセス処理によってデータが書き込まれているかを判定し、
データが書き込まれている場合には、当該データについての前記リビルド処理が完了していると判定し、
データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出す、
ことを特徴とする付記14記載のストレージ制御方法。
【0221】
(付記16) 前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して、前記アクセス処理によってデータが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
起動した前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出せなかった場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする付記15記載のストレージ制御方法。
【0222】
(付記17) 前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して、前記アクセス処理によってデータが書き込まれていない場合には、前記第1の記憶装置が故障してから、前記アクセス制御部が前記予備用記憶装置にデータを書き込み可能になるまでの期間に、前記第2の記憶装置における前記読み出しに失敗したデータの位置に対して、前記アクセス処理によってデータが書き込まれたかを判定し、
データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
データが書き込まれていた場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする付記15記載のストレージ制御方法。
【0223】
(付記18) 前記予備用記憶装置における全記憶領域は、あらかじめデータの読み出しエラーが発生する状態とされ、
前記リビルド処理において前記第2の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置からのデータ読み出しを実行し、
データを正常に読み出すことができた場合には、当該データについての前記リビルド処理が完了していると判定し、
データの読み出しエラーが発生した場合には、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていないと判定する、
ことを特徴とする付記15〜17のいずれか1つに記載のストレージ制御方法。
【0224】
(付記19) 前記リビルド処理において前記第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置が故障してから現在までの期間に、前記第2の記憶装置における読み出しに失敗したデータの位置に対して、前記アクセス処理によりデータが書き込まれたかを判定し、
データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
データが書き込まれていた場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする付記14記載のストレージ制御方法。
【0225】
(付記20) 前記第1の記憶装置が故障した後、前記ホスト装置からの読み出し要求に応じた前記第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置における読み出しを要求されたデータに対応する位置からデータを読み出すことを特徴とする付記13記載のストレージ制御方法。
【符号の説明】
【0226】
1 ストレージシステム
10 ストレージ制御装置
11 リビルド制御部
12 データ復旧制御部
21,22,31 記憶装置
【技術分野】
【0001】
本発明は、ストレージシステム、ストレージ制御装置およびストレージ制御方法に関する。
【背景技術】
【0002】
近年、HDD(Hard Disk Drive)などの記憶装置を複数用いたストレージシステムが広く使用されている。このようなストレージシステムでは、記憶装置に対するデータアクセスの信頼性を向上させるために、記憶装置に対するアクセスを制御する制御装置が冗長化されているものが多い。例えば、二重化された制御装置の両系がハードウェア異常により停止した場合に、両系の電源オフ、オン処理を実行することで、一時的に発生していたハードウェア異常を復旧させるものがある。
【0003】
また、ストレージシステムでは一般的に、RAID(Redundant Arrays of Inexpensive Disks)技術を用いて、データが2つ以上の記憶装置に冗長化されるような記録制御が行われることで、記録されるデータの安全性が高められている。
【0004】
さらに、データが冗長化されたストレージシステムにおいて、記憶装置が故障すると、故障した記憶装置に記憶されていたデータが再構築されて、他の記憶装置に格納される。このような処理は、一般に「リビルド処理」と呼ばれる。リビルド処理が実行されることで、データの冗長度が回復する。
【0005】
多くのストレージシステムでは、ホットスペア(Hot Spare)と呼ばれる予備用記憶装置が用意されており、このホットスペアを用いてリビルド処理が行われることが多い。一方、ホットスペアを用いずに、故障した記憶装置を新たな記憶装置に交換したときに、交換された記憶装置に対してリビルド処理を行うものもある。例えば、RAID−5によって管理された記憶装置の1つに障害が発生したとき、交換された記憶装置に対するパリティの再構築を、同じパリティグループ内の記憶装置ではなく、スナップショット用ミラー構成の同じ位置にある記憶装置からのデータコピーによって行うものがある。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2004−206239号公報
【特許文献2】特開2002−108571号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
ところで、ストレージシステムにおいて、例えばRAID−5で管理されている状態など、データが2重に冗長化された状態から、1つの記憶装置が故障すると、データの冗長性が失われた状態のままリビルド処理が行われる。このようなデータの冗長性が失われた状態で、さらに別の記憶装置からのデータの読み出しに失敗することがある。このような読み出しの失敗は、例えば、ディスク媒体面の部分的な欠損などによって発生し得る。データの冗長性が失われた状態で、さらに別の記憶装置からのデータの読み出しに失敗してしまうと、そのデータが失われてしまう。
【0008】
本発明はこのような課題に鑑みてなされたものであり、データロスト発生の可能性を低減したストレージシステム、ストレージ制御装置およびストレージ制御方法を提供することを目的とする。
【課題を解決するための手段】
【0009】
上記目的を達成するために、複数の記憶装置と、複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように複数の記憶装置に対するデータ記録を制御するストレージ制御装置と、複数の記憶装置のいずれかの代わりに使用される予備用記憶装置とを備えたストレージシステムが提供される。このストレージシステムにおいて、ストレージ制御装置は、リビルド制御部と、データ復旧制御部とを有する。リビルド制御部は、複数の記憶装置のうちの第1の記憶装置が故障すると、第1の記憶装置に記録されていたデータと同一のデータを予備用記憶装置に格納するリビルド処理を実行する。データ復旧制御部は、リビルド処理を実行中のリビルド制御部が、複数の記憶装置のうちの第2の記憶装置からのデータ読み出しに失敗したとき、第1の記憶装置から予備用記憶装置に格納するデータを読み出す。
【0010】
また、上記目的を達成するために、上記のストレージ制御装置と同様の処理を実行するストレージ制御装置およびストレージ制御方法が提供される。
【発明の効果】
【0011】
上記のストレージシステム、ストレージ制御装置およびストレージ制御方法によれば、データロストの発生の可能性を低減することができる。
【図面の簡単な説明】
【0012】
【図1】第1の実施の形態に係るストレージシステムの構成例を示す図である。
【図2】第2の実施の形態に係るストレージシステムの全体構成例を示す図である。
【図3】CMのハードウェア構成例を示す図である。
【図4】CMの処理機能の構成例を示すブロック図である。
【図5】RAID管理テーブルに登録される情報の例を示す図である。
【図6】バッドデータ管理テーブルに登録される情報の例を示す図である。
【図7】非冗長ライト管理テーブルに登録される情報の例を示す図である。
【図8】サルベージ管理テーブルに登録される情報の例を示す図である。
【図9】HDDにおけるデータ記録フォーマットの例を示す図である。
【図10】サルベージ処理が起動される状態の例を示す図である。
【図11】サルベージ方法(1)の実行に必要な前処理を示す図である。
【図12】サルベージ方法(1)の手順を示す図である。
【図13】サルベージ方法(2),(3)の実行に必要な前処理を示す図である。
【図14】サルベージ方法(2)の手順を示す図である。
【図15】サルベージ方法(3)の手順を示す図である。
【図16】リビルド処理手順の例を示すフローチャートである。
【図17】アクセス制御部によるI/O処理手順の例を示すフローチャートである。
【図18】サルベージ処理手順の例を示す図である。
【図19】第3の実施の形態のCMにおけるホストリード処理手順の例を示すフローチャート(その1)である。
【図20】第3の実施の形態のCMにおけるホストリード処理手順の例を示すフローチャート(その2)である。
【図21】第4の実施の形態におけるCMの処理機能の構成例を示すブロック図である。
【図22】ライト管理テーブルに登録される情報の例を示す図である。
【図23】サルベージ方法(2a)の実行に必要な前処理を示す図である。
【図24】サルベージ方法(2a)の手順を示す図である。
【図25】第4の実施の形態でのI/O処理手順の例を示すフローチャートである。
【図26】第4の実施の形態でのサルベージ処理手順の例を示すフローチャートである。
【発明を実施するための形態】
【0013】
以下、実施の形態について図面を参照して詳細に説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係るストレージシステムの構成例を示す図である。
【0014】
ストレージシステム1は、ストレージ制御装置10と、複数の記憶装置とを備える。ストレージシステム1が備える記憶装置は、HDD、SSD(Solid State Drive)などの不揮発性記憶装置である。図1では、ストレージシステム1が備える記憶装置として、記憶装置21,22,31を例示している。
【0015】
ストレージ制御装置10は、図示しないホスト装置からの要求に応じて、ストレージシステム1内の記憶装置に対するアクセスを制御する。また、ストレージ制御装置10は、記憶装置へのアクセス処理を、それぞれ複数の記憶装置の記憶領域によって構成される論理記憶領域ごとに管理する。以下、このような論理記憶領域をRLU(RAID Logical Unit)と呼ぶ。図1では例として、記憶装置21,22の各記憶領域が、1つのRLUに属している。
【0016】
ストレージ制御装置10は、RLUに属する複数の記憶装置を、RLUに記録するデータが異なる記憶装置の記憶領域に冗長化されるように管理する。これにより、RLUに属するいずれかの記憶装置が故障した場合でも、RLUに記録されたデータは失われない。なお、RLUの管理に使用される方法としては、RAID−1,4,5などがある。
【0017】
さらに、ストレージシステム1には、RLUに属するいずれかの記憶装置の代わりに使用される予備用記憶装置が、あらかじめ用意されている。図1では例として、記憶装置31が予備用であるものとする。
【0018】
ストレージ制御装置10は、リビルド制御部11と、データ復旧制御部12とを備える。リビルド制御部11およびデータ復旧制御部12の各処理は、例えば、ストレージ制御装置10が備えるCPU(Central Processing Unit)が所定のプログラムを実行することで実現される。
【0019】
リビルド制御部11は、RLUに属する1つの記憶装置(ここでは記憶装置22とする)が故障すると(ステップS1)、故障した記憶装置22に記録されていたデータと同一のデータを予備用の記憶装置31に格納する「リビルド処理」を実行する(ステップS2)。
【0020】
RLUがRAID−1で管理されている場合、リビルド制御部11は、RLUに属する他方の記憶装置21から読み出したRLUのデータを、予備用の記憶装置31にコピーする。また、RLUがRAID−4,5のいずれかで管理されている場合(ただしこの場合、RLUは3つ以上の記憶装置によって構成される)、リビルド制御部11は、RLUに属する故障していないすべての記憶装置からデータを読み出し、読み出したデータを基に故障した記憶装置に記録されていたデータを計算し、算出されたデータを予備用の記憶装置に格納する。
【0021】
データ復旧制御部12は、リビルド処理中において、リビルド制御部11がデータの読み出しに失敗したとき(ステップS3)、予備用の記憶装置31に格納すべきデータをサルベージする(復旧させる)処理を行う。図1では、リビルド処理中に記憶装置21からのデータ読み出しに失敗した場合を示している。
【0022】
データ復旧制御部12は、故障している記憶装置22からのデータ読み出しを試す。例えば、データ復旧制御部12は、故障している記憶装置22を再起動させ(ステップS4)、再起動した記憶装置22から、読み出しに失敗したデータに対応する、予備用の記憶装置31に格納すべきデータを読み出す(ステップS5)。ここで言う再起動とは、故障中の記憶装置22の電源オフおよび電源オンを行って、記憶装置22をリセットする処理である。なお、例えば、記憶装置22の故障発生(ステップS1)の後に記憶装置22の電源をオフした場合には、ステップS4の時点では記憶装置22の電源が再度オンにされる。逆に、記憶装置22の故障発生(ステップS1)の後に記憶装置22の電源がオンのままになっていた場合、データ復旧制御部12は、例えば、再起動の前に記憶装置22からのデータ読み出しを実行し、読み出しができなかった場合に記憶装置22を再起動して、再起動後の記憶装置22から再度読み出しを実行してもよい。
【0023】
記憶装置22からのデータ読み出しに成功した場合(すなわち、データのサルベージに成功した場合)、データ復旧制御部12は、読み出したデータを予備用の記憶装置31に格納する。
【0024】
このようなサルベージ処理により、リビルド処理時にデータの読み出しに失敗した場合でも、読み出しに失敗したデータに対応する、予備用の記憶装置31に格納すべきデータを復元できる可能性が生じる。従って、データロストが発生する可能性を低減することができる。
【0025】
なお、ストレージ制御装置10は、RLUに属する記憶装置22の故障が発生した後も、RLUに属する残りの記憶装置21を用いて、ホスト装置からの要求に応じたRLUへのアクセス処理を継続できる。データ復旧制御部12による上記のサルベージ処理では、ホスト装置からの要求に応じたアクセス処理には使用されていない、故障中の記憶装置21が再起動される。このため、ホスト装置からの要求に応じたアクセス処理に対して、サルベージ処理が与える影響が小さく、ホスト装置への応答速度が大きく低下しないようにすることができる。
【0026】
〔第2の実施の形態〕
図2は、第2の実施の形態に係るストレージシステムの全体構成例を示す図である。
図2に示すストレージシステム100は、CE(Controller Enclosure)200と、DE(Drive Enclosure)300とを含む。また、CE200には、ホスト装置400が接続されている。
【0027】
CE200は、CM(Controller Module)201,202を備える。CM201,202のそれぞれは、ホスト装置400からのI/O(In/Out)要求に応じて、DE300内の記憶装置に対するデータの読み書きを行う。CM201,202は、DE300内の記憶装置によって実現される物理記憶領域をRAIDによって管理し、これらの物理記憶領域に対するアクセスを制御する。
【0028】
なお、CM201,202は、例えばルータなどを介して互いに接続されていてもよい。また、CMは、CE200内に1つのみ設けられてもよいし、3つ以上設けられてもよい。ただし、CMが複数設けられることで、DE300に対するアクセス制御系統が冗長化され、アクセス制御処理の信頼性が向上する。
【0029】
DE300は、CM201,202からのアクセス制御対象となる複数の記憶装置を備える。本実施の形態において、DE300は、記憶装置としてHDDを備えるディスクアレイ装置である。なお、DE300が備える記憶装置としては、SSDなどの他の種類の不揮発性記憶装置を使用することもできる。また、CE200には、複数のDE300が接続されていてもよい。
【0030】
ホスト装置400は、ユーザの操作に応じて、CM201,202に対して、DE300内のHDDへのアクセスを要求する。ホスト装置400は、例えば、ユーザの操作に応じて、CM201,202のいずれかを通じて、DE300内のHDDからのデータの読み出しや、DE300内のHDDに対するデータの書き込みを行うことができる。
【0031】
なお、CE200内のCM201,202は、ともに同様の構成を有し、同様の処理を実行可能である。そこで、以下、CM201についてのみ説明し、CM202についての説明を省略する。
【0032】
図3は、CMのハードウェア構成例を示す図である。
CM201は、CPU211によって装置全体が制御されている。CPU211には、RAM(Random Access Memory)212および複数の周辺機器が、バス217を介して接続されている。RAM212は、CM201の主記憶装置として使用され、CPU211に実行させるプログラムの少なくとも一部や、このプログラムによる処理に必要な各種データを一時的に記憶する。
【0033】
CPU211には、周辺機器の例として、SSD213、入力I/F(インタフェース)214、CA(Channel Adapter)215およびDI(Drive Interface)216が接続されている。
【0034】
SSD213は、CM201の二次記憶装置として使用され、CPU211によって実行されるプログラムやその実行に必要な各種のデータなどを記憶する。なお、二次記憶装置としては、例えば、HDDなどの他の種類の不揮発性記憶装置が使用されてもよい。
【0035】
入力I/F214には、操作キーなどを備える入力装置214aが接続されている。入力I/F214は、入力装置214aに対する操作入力に応じた信号をCPU211に出力する。
【0036】
CA215は、ホスト装置400とCM201との間でデータを送受信するインタフェース処理を実行する。CA215とホスト装置400とは、例えば、FC(Fibre Channel)規格に従って通信する。
【0037】
DI216は、DE300とCM201との間でデータを送受信するインタフェース処理を実行する。DI216とDE300とは、例えば、SAS(Serial Attached SCSI,SCSI:Small Computer System Interface)規格に従って通信する。
【0038】
図4は、CMの処理機能の構成例を示すブロック図である。
CM201は、アクセス制御部220、リビルド制御部230およびサルベージ制御部240を備える。アクセス制御部220、リビルド制御部230およびサルベージ制御部240の処理は、例えば、CM201のCPU211が所定のプログラムを実行することで実現される。
【0039】
また、CM201の記憶装置には、RAID管理テーブル250、バッドデータ(Bad Data)管理テーブル260、非冗長ライト管理テーブル270およびサルベージ管理テーブル280が記憶される。これらの各テーブルは、例えばSSD213に記憶される。
【0040】
アクセス制御部220は、ホスト装置400からのI/O要求に応じて、DE300内のHDDにアクセスする。アクセス制御部220は、例えば、ホスト装置400からデータの読み出し要求を受けたとき、要求されたデータをDE300内の所定のHDDから読み出して、ホスト装置400に送信する。一方、アクセス制御部220は、ホスト装置400からデータの書き込み要求を受けたとき、ホスト装置400から受信した書き込み対象のデータを、DE300内の所定のHDDに書き込む。
【0041】
なお、以下の説明では、アクセス制御部220がホスト装置400からの読み出し要求に応じてHDDからデータを読み出すことを「ホストリードする」と呼ぶ。また、アクセス制御部200がホスト装置400からの書き込み要求に応じてHDDにデータを書き込むことを「ホストライトする」と呼ぶ。
【0042】
また、アクセス制御部220は、RAID管理テーブル250に設定された情報に基づいて、DE300内のHDDに記録するデータをRAIDによって管理する。アクセス制御部220は、RLU(RAID Logical Unit)ごとに記録データを所定のRAIDレベルによって管理する。RLUは、DE300に搭載された複数のHDDの物理記憶領域を組み合わせて構成される論理記憶領域であり、RAIDグループとも呼ばれる。
【0043】
RAID管理テーブル250は、RLUごとに、RLUの識別番号、適用されるRAIDレベル、RLUに属するHDDや論理ボリュームを示す情報、RLUの制御状態を示す情報などを保持する。アクセス制御部220は、RAID管理テーブル250を参照することで、例えば、ホストライトする際の書き込み先のHDDや、その書き込みの際に用いるRAIDレベルなどを判定する。なお、本実施の形態では、アクセス制御部220は、各RLUをデータが2重に冗長化されるRAIDレベルで管理する。データが2重に冗長化されるRAIDレベルとしては、例えば、RAID−1,RAID−4,RAID−5がある。
【0044】
また、アクセス制御部220は、RLUに属するHDDのうちの1つが故障して、そのRLUに記録されたデータの冗長性が失われてから、ホットスペアのHDDに対するリビルド処理を開始するための準備が整うまでの期間に、そのRLUに対するホストライトを行ったとき、データの書き込み先の位置情報を非冗長ライト管理テーブル270に登録する。
【0045】
リビルド制御部230は、RLUに属するHDDのうちの1つが故障したとき、故障したHDDに記録されていたデータをホットスペアのHDDに書き込む「リビルド処理」を実行する。リビルド制御部230は、リビルド処理の実行の際、RAID管理テーブル250を参照することで、故障したHDDに記録されていたデータをどのように生成するかを決定する。
【0046】
また、リビルド制御部230は、リビルド処理の実行中に、RLUに属するHDDのうち故障したHDD以外のHDDからのデータの読み出しに失敗すると、読み出しに失敗したデータの位置情報をバッドデータ管理テーブル260およびサルベージ管理テーブル280に登録するとともに、サルベージ制御部240に、読み出しに失敗したデータのサルベージを要求する。なお、アクセス制御部220は、バッドデータ管理テーブル260に登録された位置のデータについての読み出し要求をホスト装置400から受けたとき、ホスト装置400に対してエラー応答する。
【0047】
サルベージ制御部240は、リビルド制御部230によるリビルド処理において読み出しに失敗したデータをサルベージする。サルベージ管理テーブル280には、サルベージ処理の対象とされたデータ(すなわち、リビルド処理において読み出しに失敗したデータ)についての位置情報が登録されている。サルベージ制御部240は、サルベージ管理テーブル280に登録された位置情報に対応するデータについて順にサルベージ処理を実行することで、リビルド処理に対して非同期でサルベージ処理を実行できる。また、サルベージ制御部240は、非冗長ライト管理テーブル270などを参照しながら、後述するいくつかの処理パターンに従ってデータのサルベージを試みる。
【0048】
図5は、RAID管理テーブルに登録される情報の例を示す図である。
RAID管理テーブル250には、RLUごとにレコード251が登録される。各レコード251には、対応するRLUを識別するRLU番号が付与されている。以下の説明では、xx番のRLU番号を「RLU#xx」と表記し、RLU番号が「RLU#xx」であるRLUを、単に「RLU#xx」と呼ぶ。
【0049】
各レコード251には、「RAIDレベル」、「ディスク番号」、「論理ユニット番号」、「HSディスク番号」および「RAID状態」が登録される。
「RAIDレベル」は、対応するRLUの通常運用時におけるRAIDレベルを示す。本実施の形態では、「RAIDレベル」には、RAID−1,RAID−4,RAID−5のいずれかが設定される。
【0050】
「ディスク番号」は、対応するRLUを構成する物理記憶領域が属するHDDの識別番号を示す。RLUは、複数のHDDの物理記憶領域によって構成されるので、「ディスク番号」は、それらの複数のHDDのそれぞれについて登録される。なお、以下の説明では、xx番のディスク番号を「DISK#xx」と表記し、ディスク番号が「DISK#xx」であるHDDを、単に「DISK#xx」と呼ぶ。
【0051】
また、「ディスク番号」によって識別されるHDDのそれぞれには、「ディスク状態」が登録される。「ディスク状態」は、対応するHDDの動作状態を示す。「ディスク状態」には、例えば、「正常」、「故障」および「HSに退避中」のいずれかが設定される。「正常」は、対応するHDDが正常に動作していることを示し、「故障」は、対応するHDDが故障していることを示す。「HSに退避中」は、対応するHDDに記録されていたデータについてのホットスペアのHDDへのリビルド処理が完了し、そのホットスペアのHDDを組み込んでRLUが運用されていることを示す。
【0052】
「論理ユニット番号」は、対応するRLUに設定された、論理ユニット(または論理ボリューム)と呼ばれる論理記憶領域の識別番号を示す。1つのRLUには複数の論理ユニットを設定可能であり、「論理ユニット番号」は、設定された論理ユニットごとに登録される。なお、以下の説明では、論理ユニット番号を「LUN」と省略して呼ぶ。また、xx番の論理ユニットを「LUN#xx」と表記し、論理ユニット番号が「LUN#xx」である論理ユニットを、単に「LUN#xx」と呼ぶ。
【0053】
また、「論理ユニット番号」によって識別される論理ユニットのそれぞれには、「論理領域情報」および「物理領域情報」が登録される。「論理領域情報」には、論理ユニットに付与された論理アドレス(LBA:Logical Block Address)の範囲が登録される。「物理領域情報」には、論理ユニットに対して割り当てられた、各HDDにおける物理アドレスの範囲が登録される。
【0054】
なお、CM201は、アクセス先とするデータのLUNおよびLBAが指定されると、LUNが示す論理ユニットが属するRLUのRAIDレベルと、その論理ユニットに割り当てられたHDDの物理領域情報とから、データのアクセス先とするHDDやHDD内のブロックの位置(ストライプ番号など)を特定することができる。
【0055】
「HSディスク番号」は、リビルド処理中のみ設定され、リビルド先とされているホットスペアのHDDを識別する番号を示す。
「RAID状態」は、対応するRLUの状態を示す。「RAID状態」には、例えば、「通常運用状態」、「非冗長状態」、「リビルド中」および「HSに退避中」のいずれかが設定される。
【0056】
「通常運用状態」は、RLUに属するいずれのHDDにも異常がなく、データの冗長性を有する状態でRLUが正常に運用されていることを示す。「非冗長状態」は、RLUに属するいずれか1つのHDDが故障し、データの冗長性がない状態を示す。ただし、データの冗長性がない状態でも、「HSディスク番号」にホットスペアのHDDの識別番号が登録されて、リビルド処理の準備が整ってから、リビルド処理が完了するまでの間、「RAID状態」には「リビルド中」が設定される。「HSに退避中」は、ホットスペアのHDDへのリビルド処理が完了し、そのホットスペアのHDDを組み込んでRLUが運用されている状態を示す。
【0057】
図6は、バッドデータ管理テーブルに登録される情報の例を示す図である。
バッドデータ管理テーブル260には、リビルド制御部230またはサルベージ制御部240によってデータの読み出しが不可能と判定された、論理ユニット内のデータの位置情報が、論理ユニットの番号(LUN)と論理アドレス(LBA)との組み合わせとして登録される。
【0058】
本実施の形態では、リビルド処理中にデータの読み出しに失敗すると、読み出しに失敗したデータに対応するLUNおよびLBAが、リビルド制御部230によってバッドデータ管理テーブル260に登録される。また、バッドデータ管理テーブル260に登録されたデータについてのサルベージ処理が成功した場合には、そのデータに対応する位置情報はバッドデータ管理テーブル260から消去される。一方、サルベージ処理が不可能であった場合、そのデータについての位置情報はバッドデータ管理テーブル260に登録されたままになる。
【0059】
なお、バッドデータ管理テーブル260のデータ構造は、図6の例に限らず、例えば、LUNごとの全LBAに対して、読み出し失敗が発生したか否かを示すフラグ情報が対応付けられた構造であってもよい。また、バッドデータ管理テーブル260には、位置情報として、LUNおよびLBAの代わりに、例えば、HDDのディスク番号およびHDDにおける物理アドレスが登録されてもよい。
【0060】
図7は、非冗長ライト管理テーブルに登録される情報の例を示す図である。
非冗長ライト管理テーブル270には、RLUのRAID状態が「非冗長状態」であるときに、そのRLUに属する論理ユニットに対してホストライトが実行されたとき、書き込み先の位置を示す情報が、LUNとLBAとの組み合わせとして登録される。
【0061】
なお、非冗長ライト管理テーブル270のデータ構造は、図7の例に限らず、例えば、論理ユニットごとの全LBAに対して、「非冗長状態」におけるホストライトが実行されたか否かを示すフラグ情報が対応付けられた構造であってもよい。また、非冗長ライト管理テーブル270には、位置情報として、LUNおよびLBAの代わりに、例えば、HDDのディスク番号およびHDDにおける物理アドレスが登録されてもよい。
【0062】
図8は、サルベージ管理テーブルに登録される情報の例を示す図である。
サルベージ管理テーブル280は、サルベージ処理の対象とするデータを示す情報を一時的に保持することで、サルベージ制御部240がサルベージ処理をリビルド処理とは非同期に実行できるようにするものである。サルベージ管理テーブル280には、サルベージ処理の対象とするデータ(すなわち、リビルド処理時に読み出しに失敗したデータ)を示す位置情報が、論理ユニットの番号(LUN)、論理アドレス(LBA)およびディスク番号の組み合わせとして登録される。
【0063】
なお、サルベージ管理テーブル280には、LUNおよびLBAの代わりに、ディスク番号が示すHDDにおける物理アドレスが登録されてもよい。また、サルベージ処理に対象とするデータが通常時にRAID−1で管理されているデータである場合、サルベージ管理テーブル280には、ディスク番号のようなHDDを識別する情報が登録されなくてもよい。なぜなら、RAID−1で管理されている場合、サルベージ制御部240は、データの読み出しに失敗したHDDが、RLUに属する2台のHDDのうち故障していないHDDであることを、容易に判別可能であるからである。
【0064】
図9は、HDDにおけるデータ記録フォーマットの例を示す図である。
DE300内の各HDDに記録されるデータは、一定長のブロックに分割される。また、各HDDにおいては、ブロックが格納されるブロック領域に対してBCC(Block Check Code)が付与されている。通常、BCCには誤り検出コードが記録され、ブロックが読み出されるとき、そのブロックに対応するBCCを基に、読み出されるブロックの整合性がチェックされる。また、BCCには、対応するブロック領域の属性を示す情報を記録しておくこともできる。例えば、リビルド先となるホットスペアのHDDにおいては、リビルド処理中にブロック領域に書き込むべきデータを生成できなかった場合、そのブロック領域に対応するBCCに、「バッドデータ」を示す情報が書き込まれる。
【0065】
次に、サルベージ処理について説明する。まず、図10は、サルベージ処理が起動される状態の例を示す図である。この図10では例として、RAID−1の場合について説明する。
【0066】
図10の「状態1」において、RLU#00は、DISK#00,#01の各記憶領域によって構成され、これらの記憶領域がRAID−1で管理されている。この状態で、DISK#01の故障が発生すると(ステップS11)、リビルド制御部230は、DISK#01に記録されていたRLU#00のデータをホットスペアのDISK#10に格納するリビルド処理を実行する(ステップS12)。RLU#00にはRAID−1が設定されているので、リビルド処理では、DISK#00に記録されているRLU#00のデータがそのまま読み出されて、ホットスペアのDISK#10にコピーされる。
【0067】
ここで、リビルド処理が正常に完了すると、DISK#01に記録されていたRLU#00のデータがホットスペアのDISK#10に完全に復元される。このとき、故障したDISK#01の代わりにホットスペアのDISK#10がRLU#00に組み込まれることで、アクセス制御部220は、RLU#00におけるデータの冗長性が完全に回復した状態で、ホストリードやホストライトを続行できる。
【0068】
しかしながら、図10の「状態2」のように、リビルド処理の実行中に、リビルド制御部230がDISK#00中のあるブロックからのデータ読み出しに失敗すると(ステップS13)、読み出しに失敗したデータをホットスペアのDISK#10にコピーすることができなくなり、このデータを失ってしまう。これに対して、サルベージ制御部240は、読み出しに失敗したデータのサルベージ処理を行い、ホットスペアのDISK#10における対応する位置にリビルドデータが格納されるようにする。
【0069】
具体的には、リビルド制御部230は、リビルド処理中にDISK#00からのデータ読み出しに失敗すると、読み出しに失敗したデータの位置情報をサルベージ管理テーブル280に登録する(ステップS14)。サルベージ制御部240は、サルベージ管理テーブル280に登録された位置情報が示すデータについてのサルベージ処理を実行する。
【0070】
また、リビルド制御部230は、読み出しに失敗したデータの位置情報をバッドデータ管理テーブル260にも登録する(ステップS15)。アクセス制御部220は、バッドデータ管理テーブル260に登録された位置情報に対応するデータに対する読み出し要求を、ホスト装置400から受信したとき、ホスト装置400に対してエラー応答する。これにより、アクセス制御部220による、データの読み出しに失敗したデータへの無駄なアクセスの発生が防止される。
【0071】
なお、この時点では、バッドデータ管理テーブル260に対して位置情報が登録されなくてもよい。例えば、読み出しに失敗したデータについてのサルベージが不可能であったときに、サルベージ制御部240によってバッドデータ管理テーブル260に位置情報が登録されてもよい。
【0072】
なお、上記のステップS14,S15の処理順は、逆であってもよいし、あるいは並列に実行されてもよい。
ところで、前述のように、リビルド処理とは、故障したHDDに記録されていたデータを、リビルド先のHDD(本実施の形態ではホットスペアのHDD)に格納することである。図10の例のように、RAID−1のRLUにおけるリビルド処理では、故障していないHDDから読み出されたデータが、そのままリビルド先のHDDにコピーされる。
【0073】
サルベージ処理とは、本来、リビルド処理時に読み出しの失敗が発生した場合でも、何らかの方法により、故障したHDDに記録されていたデータがリビルド先のHDDに格納された状態にすることである。しかしながら、RAID−1のRLUにおけるサルベージ処理は、読み出しに失敗したデータと同じデータが、リビルド先のHDDに格納された状態にすることと同等である。
【0074】
これに対して、RAID−4,5のRLUにおけるリビルド処理では、故障したHDDに記録されていたデータは、故障していない他のHDDから読み出したデータを基に計算によってリビルドされる。このため、RAID−4,5のRLUにおけるサルベージ処理は、RAID−1の場合とは異なり、読み出しに失敗したデータと同じデータがリビルド先のHDDに格納された状態にすることとは同等でない。
【0075】
そこで、以下の説明では、主としてRAID−1のRLUにおけるサルベージ処理の手順について説明し、必要に応じて、RAID−4,5のRLUにおけるサルベージ処理の手順についても補足説明する。なお、RAID−4,5の場合について補足説明する場合には、RLUがDISK#00〜#04の記憶領域によって構成されるものとする。
【0076】
サルベージ制御部240は、次のサルベージ方法(1)〜(3)を利用してサルベージ処理を実行する。
サルベージ方法(1):ホットスペアのHDDに記録されたデータを基にサルベージする。
【0077】
サルベージ方法(2):故障したHDDを再起動させ、少なくとも再起動したHDDから読み出したデータを基にサルベージする。
サルベージ方法(3):データの読み出しに失敗したHDDを再起動させ、少なくとも再起動したHDDから読み出したデータを基にサルベージする。
【0078】
以下、上記のサルベージ方法(1)〜(3)について、詳細に説明する。
図11は、サルベージ方法(1)の実行に必要な前処理を示す図である。
図11の「状態11」は、図10の「状態1」と同様に、RLU#00を構成するDISK#01の故障が発生した場合を示す。このとき、リビルド制御部230は、リビルド先とするホットスペアのHDDを選択するが、リビルド先とするホットスペアのHDDの全記憶領域を、あらかじめBCCエラー状態にしておく。ここで言うBCCエラー状態とは、ブロックのデータを読み出したときに、そのブロックに対応するBCCから読み出しエラーが検出されるように、BCCに何らかの値が設定されている状態である。ただし、BCCエラー状態では、BCCには、前述したバッドデータを示す情報以外の値が設定されることが望ましい。BCCエラー状態と、BCCがバッドデータを示す状態とを区別することで、BCCがバッドデータを示したとき、そのBCCに対応するブロックのデータについてはサルベージが不可能であったことを明確に認識できるようになる。
【0079】
ところで、アクセス制御部220は、DISK#01が故障した後も、データの冗長性がない状態のままで、残りのDISK#00を用いてRLU#00に対するホストリードおよびホストライトを継続する。ただし、図11の「状態12」に示すように、リビルド先とするホットスペアのDISK#10の準備が整ってから(具体的には、RAID管理テーブル250におけるRLU#00に対応するレコード251内の「HSディスク番号」にDISK#10が設定されてから)、リビルド処理が完了するまでの期間、アクセス制御部220は、ホスト装置400から書き込み要求を受けたとき(ステップS21)、DISK#00だけでなく、リビルド先のDISK#10に対してもホストライトを行う(ステップS22,S23)。
【0080】
RLU#00がRAID−1の場合、「状態12」では、ホスト装置400から書き込み要求されたデータをDISK#00に書き込む(ステップS22)とともに、同じデータを、ホットスペアのDISK#10における対応するブロックにも書き込む(ステップS23)。ホットスペアのDISK#10では、データが書き込まれたブロックに対応するBCCに誤り検出コードが上書きされ、このブロックは正常に読み出し可能な状態になる。これにより、もしDISK#10におけるホストライトされたブロックについて、リビルド処理が実行されていない場合でも、そのブロックには最新の書き込みデータが格納されていることになる。
【0081】
ここで、RLU#00がRAID−4,5のいずれかの場合について補足説明する。RAID−4,5のいずれかで運用されるRLUがDISK#00〜#04の各記憶領域によって構成されている場合、通常運用時のホストライトは次のように行われる。アクセス制御部220は、書き込みを要求されたデータを一定長に分割する。アクセス制御部220は、例えば、連続する分割データD0〜D3を基にパリティP0を計算する。RAID−4の場合、アクセス制御部220は、分割データD0〜D3およびパリティP0を、それぞれあらかじめ決められたHDDに書き込む。一方、RAID−5の場合、アクセス制御部220は、分割データD0〜D3およびパリティP0を、DISK#00〜#04に分散させて書き込む。
【0082】
例えばDISK#04が故障した状態で、新たな分割データD0〜D3の書き込みが要求された場合、図11の「状態12」に示す前処理は次のように行われる。例えば、DISK#04に書き込むべきデータが分割データD3である場合、アクセス制御部220は、他のDISK#00〜#03に、分割データD0〜D2、および、これらの分割データに基づくパリティP0を書き込む(ステップS22)とともに、分割データD3をDISK#10に書き込む(ステップS23)。また、例えば、DISK#04に書き込むべきデータがパリティP0である場合、アクセス制御部220は、他のDISK#00〜#03に、分割データD0〜D3を書き込む(ステップS22)とともに、分割データD0〜D3に基づくパリティP0を計算して、算出したパリティP0をDISK#10に書き込む(ステップS23)。
【0083】
ただし、分割データD0〜D3のうち例えば分割データD3のみが更新される場合には、分割データD0〜D2が記録されたHDDに対しては書き込みが行われない。従ってこの場合、故障したDISK#04に対する書き込みが必ず行われる訳ではなく、DISK#04に分割データD3またはパリティP0が書き込まれる場合のみ、DISK#10に分割データD3またはパリティP0が書き込まれることになる。
【0084】
すなわち、RAID−1,4,5のいずれの場合でも、図11の「状態12」に示す前処理では、アクセス制御部220は、ホスト装置400から書き込みが要求されたとき、故障したHDDに書き込むべきデータがある場合には、そのデータをホットスペアのHDDに書き込む。
【0085】
図12は、サルベージ方法(1)の手順を示す図である。
リビルド制御部230は、DISK#01に記録されたデータについてのリビルド処理の際、図11の「状態12」のような、ホスト装置400からの要求に応じた書き込みがあったか否かに関係なく、DISK#00内の読み出し対象領域の全域からのデータ読み出しを行う。図12の「状態13」に示すように、リビルド制御部230による、DISK#01に記録されたデータについてのリビルド処理が実行されているときに、DISK#00上のあるブロックからのデータ読み出しに失敗したとする(ステップS24)。この場合、サルベージ制御部240は、読み出しに失敗したブロックに対応する、ホットスペアのDISK#10のブロックに、データが書き込まれているかを判定する。この判定処理は、DISK#10の対応するブロックからのデータ読み出しに成功するか否かによって行われる(ステップS25)。DISK#10のブロックからのデータ読み出しに成功した場合、そのブロックにはホストライトによる最新のデータがすでに格納されていることになるので、サルベージ制御部240は、データのサルベージに成功したと判断する。一方、DISK#10のブロックからのデータ読み出し時にBCCエラーが検出された場合、サルベージ制御部240は、データのサルベージに失敗したと判断する。この場合、サルベージ制御部240は、他のサルベージ方法を試みる。
【0086】
なお、以上の図12に示したサルベージ方法(1)の手順は、RLU#00がRAID−4,5のいずれかの場合でも同様である。すなわち、サルベージ制御部240は、ホットスペアのDISK#10における対応するブロック(読み出しに失敗したブロックと同じストライプ番号のブロック)からのデータ読み出しに成功した場合、データのサルベージに成功したと判断する。
【0087】
次に、図13は、サルベージ方法(2),(3)の実行に必要な前処理を示す図である。
図13の「状態21」は、図10の「状態1」と同様に、RLU#00を構成するDISK#01の故障が発生した場合を示す。ただし、「状態21」は、DISK#01が故障してから、リビルド先とするホットスペアのDISK#10の準備が整うまで(具体的には、RAID管理テーブル250におけるRLU#00に対応するレコード251内の「HSディスク番号」にDISK#10が設定されるまで)の状態を示す。この「状態21」では、アクセス制御部220は、DISK#00のみを用いてRLU#00に対するホストリードおよびホストライトを継続する。
【0088】
サルベージ方法(2),(3)の前処理として、アクセス制御部220は、「状態21」においてホスト装置400からRLU#00に対する書き込み要求を受けると(ステップS31)、DISK#00の対応するブロックにデータを書き込む。これとともに、アクセス制御部220は、データの書き込み位置を示す位置情報(データを書き込んだブロックに対応するLUNおよびLBA)を、非冗長ライト管理テーブル270に登録する(ステップS32)。
【0089】
「状態21」においてホストライトが発生すると、書き込まれるデータは冗長性がない状態となる。従って、非冗長ライト管理テーブル270には、RLU#00に記録されたデータのうち冗長性のないデータの位置情報が登録されることになる。
【0090】
なお、以上の「状態21」に示した前処理の手順は、RLU#00がRAID−4,5のいずれかの場合でも同様であり、アクセス制御部220は、ホストライトした位置の情報を非冗長ライト管理テーブル270に登録する。
【0091】
図14は、サルベージ方法(2)の手順を示す図である。
図14の「状態22」は、図13の「状態21」から、ホットスペアのDISK#10に対するリビルド処理が開始された状態を示す。RLU#00がRAID−1の場合、リビルド制御部230は、DISK#00に記録されたRLU#00のデータを読み出して、DISK#10にコピーする。このようなリビルド処理中に、リビルド制御部230が、DISK#00からのデータ読み出しに失敗したものとする(ステップS33)。
【0092】
サルベージ制御部240は、DISK#01が故障してから現在までの間に、DISK#00における読み出しに失敗したブロック、またはそのブロックに対応するDISK#10のブロックの少なくとも一方に対して、ホストライトが行われたかを判定する。具体的には、サルベージ制御部240は、前述のサルベージ方法(1)においてホットスペアのDISK#10における対応するブロックからのデータ読み出しに失敗し、かつ、非冗長ライト管理テーブル270に、読み出しに失敗したブロックに対応する位置に対してホストライトが行われたことが登録されていない場合に、DISK#00,#10の少なくとも一方における対応するブロックに対してDISK#01の故障から現在までにホストライトが行われていないと判定する(ステップS34)。
【0093】
ホストライトが行われていないと判定された場合、DISK#00からの読み出しに失敗したデータに対応する、ホットスペアのDISK#10にリビルドすべきデータは、故障したDISK#01にのみ存在する可能性が高い。このことから、サルベージ制御部240は、故障したDISK#01を再起動させ(ステップS35)、再起動したDISK#01から、DISK#10にリビルドするデータを読み出すことができるかを試す。
【0094】
図14の「状態23」に示すように、サルベージ制御部240は、読み出しに失敗したDISK#00のブロックに対応する、再起動したDISK#01のブロックから、データを読み出す。データの読み出しに成功した場合、サルベージ制御部240は、読み出したデータを、ホットスペアのDISK#10における同じストライプ番号に対応するブロックにコピーする。この場合、データのサルベージに成功したことになる(ステップS36)。
【0095】
なお、以上の図14に示したサルベージ方法(2)の手順は、RLU#00がRAID−4,5のいずれかの場合でも同様である。すなわち、サルベージ制御部240は、再起動したDISK#01における対応するブロックからのデータの読み出しに成功すると、読み出したデータを、ホットスペアのDISK#10における同じストライプ番号のブロックにコピーする。
【0096】
図15は、サルベージ方法(3)の手順を示す図である。
図13の「状態21」からリビルド処理が開始され、リビルド処理中に、リビルド制御部230がDISK#00からのデータ読み出しに失敗したものとする(ステップS41)。サルベージ制御部240は、図15の「状態31」に示すように、非冗長ライト管理テーブル270に、読み出しに失敗したブロックに対応する位置に対してホストライトが行われたことが登録されているかを判定する。
【0097】
非冗長ライト管理テーブル270にホストライトが行われたことが登録されていた場合、読み出しに失敗したデータに対応するDISK#01のブロックには、最新のデータが登録されていない。これとともに、読み出しに失敗したデータに対応するDISK#10のブロックには、データが記録されておらず、このブロックはBCCエラー状態になっているはずである。このことから、サルベージ制御部240は、読み出しに失敗したものの、最新のデータが残っている可能性のあるDISK#00を再起動させ(ステップS43)、再起動したDISK#00における読み出し失敗位置から、データの読み出しを再度試みる。例えば、リビルド処理におけるデータ読み出しの失敗要因が一時的なものである場合などに、再起動後のデータ読み出しに成功する可能性がある。
【0098】
図15の「状態32」に示すように、サルベージ制御部240は、再起動したDISK#00における読み出し失敗位置からのデータの読み出しに成功した場合、読み出したデータを基に、DISK#10に記録すべきデータをサルベージする(ステップS44)。RAID−1の場合、サルベージ制御部240は、再起動したDISK#00から読み出したデータを、ホットスペアのDISK#10における対応するブロックにコピーする。
【0099】
なお、RLU#00がRAID−4,5のいずれかであり、RLU#00の記憶領域がDISK#00〜DISK#04で構成され、DISK#04が故障し、DISK#00からのデータ読み出しに失敗したものとすると、「状態32」のステップS44では、次のような処理が実行される。サルベージ制御部240は、サルベージ管理テーブル280に登録された位置情報を基に、データの読み出しに失敗したHDDを判別し、判別したHDD(ここではDISK#00)を再起動させる。サルベージ制御部240は、再起動したDISK#00から読み出したデータと、残りの故障していないDISK#01〜03における同じストライプ番号に対応するブロックから読み出したデータとを基に、ホットスペアのDISK#10に格納すべきデータを生成する。
【0100】
例えば、DISK#00から分割データD0の読み出しに失敗し、この分割データD0に対応するパリティP0が故障したDISK#04に記録されているとする。この場合、サルベージ制御部240は、再起動したDISK#00から読み出した分割データD0と、残りの故障していないDISK#01〜03から読み出した分割データD1〜D3とを基に、パリティP0を計算し、ホットスペアのDISK#10に格納する。
【0101】
また、例えば、DISK#00から分割データD0の読み出しに失敗し、故障したDISK#04に分割データD3が記録されているとする。この場合、サルベージ制御部240は、再起動したDISK#00から読み出した分割データD0と、残りの故障していないDISK#01〜03から読み出した分割データD1,D2およびパリティP0から、分割データD3を計算し、ホットスペアのDISK#10に格納する。
【0102】
次に、上記のサルベージ方法(1)〜(3)を用いたサルベージ処理について、フローチャートを用いて説明する。まず、図16は、リビルド処理手順の例を示すフローチャートである。
【0103】
[ステップS101]アクセス制御部220は、DE300内のHDDが故障したことを検出すると、故障したHDDのディスク番号と、そのHDDが属するRLUのRLU番号とを、リビルド制御部230に通知する。以下、RLU#00に属する1つのHDDが故障したものとして、説明を続ける。
【0104】
アクセス制御部220からの通知を受けたリビルド制御部230は、RAID管理テーブル250からRLU#00のレコード251を抽出し、抽出したレコード251において、故障したHDDのディスク番号に対応する「ディスク状態」を「故障」に更新するとともに、「RAID状態」を「非冗長状態」に更新する。
【0105】
故障したHDDのディスク番号に対応する「ディスク状態」が「故障」に更新されることで、故障したHDDはRLU#00から切り離される。なお、故障したHDDは、RLU#00から切り離された時点で、電源オフにされてもよい。あるいは、故障したHDDは、例えば、新たなHDDに交換される直前に電源オフにされてもよい。
【0106】
[ステップS102]リビルド制御部230は、リビルド先とするホットスペアのHDDを準備する。具体的には、リビルド制御部230は、リビルド先とするホットスペアのHDDを選択し、選択したHDDのディスク番号を、RAID管理テーブル250におけるRLU#00のレコード251の「HSディスク番号」に登録する。さらに、リビルド制御部230は、RLU#00のレコード251の「RAID状態」を「リビルド中」に更新する。これにより、ホットスペアのHDDの準備が完了し、リビルド処理を開始できる状態となる。
【0107】
[ステップS103]リビルド制御部230は、RLU#00に属する論理ユニットからリビルド対象とするデータ領域を、所定数のLBA単位で選択する。リビルド制御部230は、選択したデータ領域に対応するデータのリビルドを実行する。
【0108】
ここで言う「データのリビルド」とは、ホットスペアのHDDに対して格納するデータを生成することであり、以下、生成されたデータを「リビルドデータ」と呼ぶ。例えば、RLU#00が正常時にRAID−1で管理されている場合、リビルド制御部230は、RLU#00に属する故障していないHDDから単にデータを読み出すことで、リビルドデータを生成する。一方、RLU#00が正常時にRAID−4,5のいずれかで管理されている場合、リビルド制御部230は、RLU#00に属する故障していないHDDの同一ストライプ番号の位置からデータを読み出し、読み出しデータを基にした計算によってリビルドデータを生成する。
【0109】
[ステップS104]ステップS103でのリビルドデータの生成時に、故障していないHDDからのデータ読み出しに成功した場合(S104:No)、リビルド制御部230は、ステップS105の処理を実行する。一方、故障していないHDDからのデータ読み出しに失敗して、リビルドデータを生成できなかった場合(S104:Yes)、リビルド制御部230は、ステップS106の処理を実行する。
【0110】
[ステップS105]リビルド制御部230は、ステップS103で生成したリビルドデータを、ホットスペアのHDDにおける対応する領域に格納する。
[ステップS106]リビルド制御部230は、ステップS103で選択したデータ領域を示すLUNおよびLBAと、ステップS104でデータ読み出しに失敗したHDDのディスク番号とを、サルベージ管理テーブル280に登録する。また、リビルド制御部230は、ステップS103で選択したデータ領域を示すLUNおよびLBAを、バッドデータ管理テーブル260に登録する。なお、サルベージ管理テーブル280およびバッドデータ管理テーブル260のどちらに対して先に情報を登録するかは、特に限定されるものではない。
【0111】
[ステップS107]リビルド制御部230は、RLU#00に属する全論理ユニットの全データ領域についてリビルド処理を完了したかを判定する。全データ領域のリビルド処理を完了していない場合(S107:No)、リビルド制御部230は、ステップS103の処理に戻り、次のデータ領域についてのリビルド処理を実行する。一方、全データ領域のリビルド処理を完了した場合(S107:Yes)、リビルド制御部230は、ステップS108の処理を実行する。
【0112】
[ステップS108]リビルド制御部230は、RLU#00についてのサルベージ制御部240によるサルベージ処理が完了したかを判定する。ここでは、リビルド制御部230は、サルベージ管理テーブル280にRLU#00に属する位置情報が登録されていない場合に、RLU#00についてのサルベージ処理が完了したと判定する。なお、RLU#00のリビルド処理時にデータの読み出しに失敗しなかった場合(すなわち、ステップS104で「No」と判定されなかった場合)、サルベージ管理テーブル280には、RLU#00に属する位置情報は登録されない。
【0113】
RLU#00についてのサルベージ処理が完了したと判定する(S108:Yes)と、リビルド制御部230は、RAID管理テーブル250のRLU#00のレコード251において、故障したHDDに対応する「ディスク状態」を「HSに退避中」に更新するとともに、「RAID状態」を「HSに退避中」に更新する。これにより、リビルド処理が完了する。
【0114】
次に、図17は、アクセス制御部によるI/O処理手順の例を示すフローチャートである。この図17は、I/O処理対象のRLU#00に属する1つのHDDが故障してから、RLU#00のリビルド処理が完了するまでの期間におけるI/O処理を示す。この期間とは、RAID管理テーブル250のRLU#00のレコード251において、故障したHDDに対応する「ディスク状態」に「故障」が設定され、かつ、「RAID状態」が「非冗長状態」または「リビルド中」が設定されている期間である。
【0115】
[ステップS121]アクセス制御部220は、ホスト装置400から、RLU#00に対するI/O要求を受信する。
[ステップS122]I/O要求が読み出し要求である場合(S122:Yes)、ステップS123の処理が実行される一方、I/O要求が書き込み要求である場合(S122:No)、ステップS126の処理が実行される。
【0116】
[ステップS123]ホスト装置400から読み出し要求を受信した場合(S122:Yes)、アクセス制御部220は、読み出し要求先のデータ領域の位置情報がバッドデータ管理テーブル260に登録されているかを判定する。アクセス制御部220は、対応する位置情報がバッドデータ管理テーブル260に登録されていなかった場合(S123:No)、ステップS124の処理を実行する。一方、アクセス制御部220は、対応する位置情報がバッドデータ管理テーブル260に登録されていた場合(S123:Yes)、ステップS125の処理を実行する。
【0117】
[ステップS124]アクセス制御部220は、読み出しを要求されたデータをHDDから読み出して、ホスト装置400に返信する。すなわち、アクセス制御部220は、ホスト装置400に対して正常応答する。
【0118】
[ステップS125]アクセス制御部220は、ホスト装置400に対して、要求されたデータを正常に読み出すことができなかったとして、エラー応答する。
なお、ホスト装置400から読み出し要求を受信した場合(S122:Yes)、アクセス制御部220は、バッドデータ管理テーブル260を参照せずにデータの読み出しを実行してもよい。この場合、アクセス制御部220は、読み出しに成功した場合にはステップS124を実行する一方、読み出しに失敗した場合にはステップS125を実行する。ただし、読み出し対象のデータの位置情報がバッドデータ管理テーブル260に登録されている場合、そのデータの読み出しを正常に実行できない可能性が高い。このため、バッドデータ管理テーブル260を参照することで、アクセス制御部220による無駄なデータアクセスの実行を防止できる。
【0119】
[ステップS126]ホスト装置400から書き込み要求を受信した場合(S122:No)、アクセス制御部220は、リビルド先とするホットスペアのHDDの準備が完了しているかを判定する。具体的には、アクセス制御部220は、RAID管理テーブル250のRLU#00のレコード251において、「HSディスク番号」にホットスペアのHDDのディスク番号が設定されており、かつ、「RAID状態」に「リビルド中」が設定されている場合に、ホットスペアのHDDの準備が完了していると判定する。
【0120】
ホットスペアのHDDの準備が完了している場合(S126:Yes)、アクセス制御部220は、ステップS127の処理を実行する。一方、ホットスペアのHDDの準備が完了していない場合(S126:No)、アクセス制御部220は、ステップS128の処理を実行する。
【0121】
[ステップS127]アクセス制御部220は、RLU#00に属する故障していない所定のHDDに対して、書き込み処理を行う。また、アクセス制御部220は、故障したHDDに書き込むべきデータがある場合には、そのデータをホットスペアのHDDに書き込む。
【0122】
このステップS127で実行される書き込み処理の内容は、図11の「状態12」で説明した通りである。ホットスペアのHDDに書き込みが行われた場合、書き込みが行われたブロックに対応するBCCには、ブロックに書き込まれたデータに基づく誤り検出コードが上書きされる。これにより、ブロックに書き込まれたデータが正常に読み出し可能な状態になるとともに、そのブロックに対応するLBAに対してリビルド処理中にホストライトがあったことを、サルベージ制御部240がサルベージ処理中に認識できるようになる。
【0123】
なお、例えば、このステップS127において、故障していないHDDに対するデータの書き込みが正常に行われなかったとしても、書き込みできなかったデータのサルベージを可能にするデータがホットスペアのHDDに書き込まれる。このため、後のリビルド処理時に、書き込みできなかった位置からのデータ読み出しに失敗した場合でも、サルベージ制御部240は、少なくともホットスペアのHDDに書き込まれたデータを基に、読み出しに失敗したデータをサルベージすることができる。
【0124】
[ステップS128]アクセス制御部220は、RLU#00に属する故障していない所定のHDDに対して、書き込み処理を行う。
[ステップS129]アクセス制御部220は、データの書き込み位置を示す位置情報(データを書き込んだブロックに対応するLUNおよびLBA)を、非冗長ライト管理テーブル270に登録する。
【0125】
なお、ステップS128,S129の処理の内容は、図13の「状態21」で説明した通りである。ステップS129の処理により、非冗長ライト管理テーブル270には、RLU#00に記録されたデータのうち冗長性のないデータの位置情報が登録されることになる。
【0126】
次に、図18は、サルベージ処理手順の例を示す図である。この図18の処理は、サルベージ制御部240が、サルベージ管理テーブル280に登録された位置情報を1つ選択するたびに実行される。また、サルベージ制御部240は、サルベージ管理テーブル280から選択した位置情報内のLUNが設定されたRLUを、RAID管理テーブル250を基に特定する。ここでは、RLU#00が特定されたものとして説明する。
【0127】
[ステップS141]サルベージ制御部240は、RAID管理テーブル250におけるRLU#00のレコード241内の「HSディスク番号」から、ホットスペアのHDD(ここではDISK#10とする)を認識する。サルベージ制御部240は、図12の「状態13」のステップS25と同様の手順で、位置情報から特定されるホットスペアのHDDのブロックから、データを読み出せるかを試す。この処理での読み出し位置は、RAID−1の場合、読み出しに失敗したブロックと同じデータが格納される、ホットスペアのHDDのブロックであり、RAID−4,5のいずれかの場合、読み出しに失敗したブロックと同じストライプ番号に対応する、ホットスペアのHDDのブロックである。
【0128】
[ステップS142]サルベージ制御部240は、ステップS141でのデータ読み出しに成功した場合には(S142:Yes)、ステップS151の処理を実行する。この場合、データのサルベージに成功したことになる。一方、サルベージ制御部240は、ステップS141でデータを読み出せなかった場合には(S142:No)、ステップS143の処理を実行する。
【0129】
なお、データのサルベージに成功した場合、例えば、サルベージ制御部240はさらに、読み出しに失敗したHDDにおける対応するブロック(すなわち、リビルド処理時に読み出しに失敗したブロック)にも、データの書き込みを行ってもよい。RLU#00がRAID−1の場合、サルベージ制御部240は、ホットスペアのDISK#10から読み出したデータを、読み出しに失敗したHDDにおける対応するブロックに書き込む。一方、RLU#00がRAID−4,5のいずれかの場合、サルベージ制御部240は、RLU#00に属する故障していないHDDのうち読み出しに失敗したHDD以外のHDDから、読み出しに失敗したブロックと同じストライプ番号のブロックのデータを読み出す。サルベージ制御部240は、読み出したこれらのデータと、ホットスペアのDISK#10から読み出したデータとを基に、読み出しに失敗したデータを計算し、算出されたデータを読み出しに失敗したHDDにおける同じストライプ番号のブロックに書き込む。
【0130】
[ステップS143]ステップS141でのデータ読み出しでBCCエラーが検出された場合(S143:Yes)、ステップS144の処理が実行される。一方、ステップS141でデータを読み出せなかった要因がBCCエラー以外の要因である場合(ステップS143:No)、ステップS148の処理が実行される。なお、後者の場合の例としては、ホットスペアのDISK#10が故障している場合などがある。
【0131】
[ステップS144]サルベージ制御部240は、RLU#00内のHDDが故障してから、ホットスペアのDISK#10の準備ができるまでの期間に、RLU#00に対して非冗長状態でのホストライトが行われたかを判定する。具体的には、サルベージ制御部240は、サルベージ管理テーブル280から選択した位置情報内のLUNおよびLBAが、非冗長ライト管理テーブル270に登録されているかを判定する。この判定処理は、図14の「状態22」のステップS34、および、図15の「状態31」のステップS42で説明した判定処理に対応する。
【0132】
同じLUNおよびLBAが非冗長ライト管理テーブル270に登録されていた場合(ステップS144:Yes)、サルベージ制御部240はステップS148の処理を実行する。一方、同じLUNおよびLBAが非冗長ライト管理テーブル270に登録されていない場合(ステップS144:No)、サルベージ制御部240はステップS145の処理を実行する。
【0133】
[ステップS145]RLU#00に属するHDDの故障が発生してから現在までにRLU#00に対するホストライトが行われていない場合(S142:NoかつS146:Yesの場合)、リビルドデータの生成に必要な最新のデータは、ホットスペアのDISK#10にも、読み出しに失敗したHDDにも格納されていないと推定される。そこで、図14の「状態22,23」に示したように、サルベージ制御部240は、故障しているHDDからのデータ読み出しを試す。
【0134】
サルベージ制御部240は、RAID管理テーブル250におけるRLU#00のレコード241から、故障しているHDDを認識し、そのHDDの電源をオフした後オンにすることで、そのHDDを再起動させる。この処理は、図14の「状態22」のステップS35の処理に対応する。なお、サルベージ制御部240は、故障しているHDDの電源がすでにオフである場合には、そのHDDの電源を単にオンすることで再起動する。
【0135】
[ステップS146]サルベージ制御部240は、再起動したHDDにおける、位置情報から特定されるブロック(すなわち、読み出しに失敗したブロックに対応する、故障したHDDのブロック)から、データを読み出す。この処理での読み出し位置は、RAID−1の場合、読み出しに失敗したブロックと同じデータが格納される、故障したHDDのブロックであり、RAID−4,5のいずれかの場合、読み出しに失敗したブロックと同じストライプ番号に対応する、故障したHDDのブロックである。
【0136】
サルベージ制御部240は、データの読み出しに成功した場合(S146:Yes)、ステップS147の処理を実行する一方、データを読み出せなかった場合(S146:No)、ステップS148の処理を実行する。
【0137】
なお、例えば、ステップS145の時点で故障しているHDDの電源がオンであった場合、サルベージ制御部240は、例えば、そのHDDを再起動させる前に、そのHDDからのデータ読み出しを行ってもよい。この場合、サルベージ制御部240は、データの読み出しに成功した場合にはステップS147の処理を実行する。その一方、サルベージ制御部240は、データの読み出しに失敗した場合には、ステップS145,S146の手順で、故障しているデータの再起動を行った後、データの読み出しに成功したかを判定する。
【0138】
[ステップS147]サルベージ制御部240は、ステップS146で再起動したHDDから読み出したデータを、その読み出し元のブロックに対応する、ホットスペアのDISK#10のブロックに書き込む。これにより、データのサルベージに成功したことになる。以上のステップS146(Yesの場合),S147の処理は、図14の「状態23」のステップS36の処理に対応する。この後、ステップS151の処理が実行される。
【0139】
なお、ステップS147では、サルベージ制御部240はさらに、読み出しに失敗したHDDにおける対応するブロック(すなわち、リビルド処理時に読み出しに失敗したブロック)にも、データの書き込みを行ってもよい。RLU#00がRAID−1の場合、サルベージ制御部240は、再起動したHDDから読み出したデータを、読み出しに失敗したHDDにおける対応するブロックに書き込む。一方、RLU#00がRAID−4,5のいずれかの場合、サルベージ制御部240は、RLU#00に属する故障していないHDDのうち読み出しに失敗したHDD以外のHDDから、読み出しに失敗したブロックと同じストライプ番号のブロックのデータを読み出す。サルベージ制御部240は、読み出したこれらのデータと、再起動したHDDから読み出したデータとを基に、読み出しに失敗したデータを計算し、算出されたデータを読み出しに失敗したHDDにおける同じストライプ番号のブロックに書き込む。
【0140】
また、ステップS147の完了後、サルベージ制御部240は、ステップS145で再起動したHDDの動作をオフにして、このHDDをRLU#00から切り離すことが望ましい。なぜなら、ステップS145で再起動したHDDは、一度故障したと判定されたHDDであるので、その後に安定的に動作する可能性が低いからである。
【0141】
[ステップS148]非冗長ライト管理テーブル270にホストライトが行われたことが登録されていた場合(S144:Yes)、読み出しに失敗したブロックにのみ、それ以前にホストライトによって最新のデータが書き込まれたことになる。このため、図15の「状態31,32」に示したように、サルベージ制御部240は、読み出しに失敗したブロックが属するHDDからのデータ読み出しを試す。
【0142】
サルベージ制御部240は、サルベージ管理テーブル280から選択した位置情報内のディスク番号から、読み出しに失敗したHDDを認識し、そのHDDの電源をオフした後オンにすることで、そのHDDを再起動させる。この処理は、図15の「状態31」のステップS43に対応する。
【0143】
なお、RLU#00がRAID−1である場合、サルベージ制御部240は、サルベージ管理テーブル280に登録されたディスク番号を用いなくても、読み出しに失敗したHDDを認識することができる。RAID−1の場合、読み出しに失敗したHDDは、RLU#00に属するHDDのうち故障していないHDDであると容易に判定できるからである。
【0144】
[ステップS149]サルベージ制御部240は、再起動したHDDにおける、位置情報から特定されるブロック(すなわち、読み出しに失敗したブロック)から、データを読み出す。サルベージ制御部240は、データの読み出しに成功した場合(S149:Yes)、ステップS150の処理を実行する一方、データを読み出せなかった場合(S149:No)、ステップS152の処理を実行する。
【0145】
[ステップS150]サルベージ制御部240は、少なくとも再起動したHDDから読み出したデータを基に、リビルドデータを生成し、生成したリビルドデータを、ホットスペアのDISK#10における対応するブロックに書き込む。
【0146】
図15の「状態32」のステップS44で説明したように、RLU#00がRAID−1の場合、サルベージ制御部240は、再起動したHDDから読み出したデータを、ホットスペアのDISK#10における対応するブロック(同じデータを格納すべきブロック)に書き込む。また、RLU#00がRAID−4,5のいずれかの場合、サルベージ制御部240は、再起動したHDDと、RLU#00に属する残りの故障していないHDDのそれぞれの同じストライプ番号からデータを読み出し、読み出したデータを基に、ホットスペアのDISK#10に格納すべきリビルドデータを計算する。サルベージ制御部240は、算出されたリビルドデータをホットスペアのDISK#10の同じストライプ番号に対応するブロックに書き込む。以上の処理により、データのサルベージに成功したことになる。
【0147】
[ステップS151]データのサルベージに成功したことから、サルベージ制御部240は、サルベージ管理テーブル280から選択した位置情報と同じLUNおよびLBAが登録された、バッドデータ管理テーブル260のレコードを消去する。
【0148】
[ステップS152]サルベージ制御部240は、サルベージ管理テーブル280から選択した位置情報(LUN、LBAおよびディスク番号)を、サルベージ管理テーブル280から消去する。
【0149】
なお、サルベージ方法(1)〜(3)のいずれを用いてもデータのサルベージが不可能であった場合(S149:No)には、サルベージ管理テーブル280に登録された位置情報は消去される(S152)ものの、バッドデータ管理テーブル260に登録された位置情報はそのまま残る。アクセス制御部220は、リビルド処理完了後のホストリード時において、読み出し対象がバッドデータ管理テーブル260に登録された位置に対応する場合には、ホスト装置400に対してエラー応答する。これにより、アクセス制御部220は、失ったデータに対する読み出し要求を受けたとき、HDDへの余計なアクセスを行うことなく、ホスト装置400に対して応答できるようになる。
【0150】
なお、データのサルベージが不可能であった場合(S149:No)、サルベージ制御部240は、バッドデータ管理テーブル260に位置情報を残す代わりに、例えば、位置情報から特定されるホットスペアのHDDのブロック(すなわち、読み出しに失敗したブロックに対応する、ホットスペアのHDDのブロック)のBCCに対して、バッドデータであることを示す情報を書き込んでもよい。「バッドデータ」は、例えば、対応するブロックのデータをロストしたことを示す。この場合、アクセス制御部220は、リビルド処理完了後に、サルベージが不可能であったデータの読み出し要求を受けたとき、ホットスペアのDISK#10の対応ブロックのBCCから、データをロストしたことを明確に認識できるようになる。
【0151】
以上説明した図16〜図18の処理によれば、リビルド処理中にデータ読み出しに失敗した場合でも、データロストをできるだけ回避することができる。従って、ストレージシステムの信頼性を高めることができる。
【0152】
なお、図18の処理では、サルベージ方法(1)〜(3)のうちサルベージ方法(1)を最初に実行した(ステップS141)。これにより、サルベージ対象のRLU#00におけるホストライトおよびホストリードの処理に対して、サルベージ処理の負荷が与える影響をごく小さくすることができる。
【0153】
また、図18の処理では、例えば、ステップS143,S144の判定処理を行わずに、サルベージ方法(2)(ステップS145,S146)、サルベージ方法(3)(ステップS148,S149)の順に実行してもよい。この場合、非冗長ライト管理テーブル270が不要になり、CM201に必要な記憶容量を小さくすることができる。
【0154】
また、サルベージ方法(2)は、故障しているためにホストリードやホストライトの対象として使用されていないHDDを再起動するものである。一方、サルベージ方法(3)は、ホストリードおよびホストライトの対象のHDDを再起動するので、HDDの動作が再開されるまでの間、ホスト装置400への応答が待ち状態になってしまう。このことから、サルベージ方法(3)を用いた処理よりサルベージ方法(2)を用いた処理を先に実行することで、ホストライトおよびホストリードの処理に与える影響を小さくし、ホスト装置400に対する応答速度をできるだけ低下させないようにすることができる。
【0155】
なお、上記の第2の実施の形態では、リビルド処理時にデータの読み出しに失敗したタイミングと非同期に、サルベージ処理が行われた。しかしながら、他の例として、データの読み出しに失敗したとき、リビルド処理を中断して即座にサルベージ処理が実行されてもよい。例えば、図16のステップS104において読み出しに失敗したと判定したとき(S104:Yes)、バッドデータ管理テーブル260に位置情報が登録されるとともに(図16のS106)、図18の処理が実行される。ただし、データの読み出し失敗時にサルベージ処理を実行する場合には、サルベージ管理テーブル280へのデータ登録(図16のS106)が不要になるので、図18のステップS152の処理も不要になる。
【0156】
また、上記の第2の実施の形態では、リビルド処理中にデータ読み出しに失敗したとき、即座にバッドデータ管理テーブル260に位置情報を登録した。しかしながら、別の処理例として、データ読み出しに失敗した時点ではバッドデータ管理テーブル260に位置情報を登録せずに、データのサルベージが不可能と判定されたとき(図18のS149:No)に、サルベージ制御部240が位置情報をバッドデータ管理テーブル260に登録してもよい。この場合、アクセス制御部220は、リビルド処理中のRLU#00に対する読み出し要求をホスト装置400から受信したとき、その読み出し元がリビルド処理においてデータの読み出しに失敗した位置であったとしても、一旦HDDからのデータ読み出しを試みる。
【0157】
〔第3の実施の形態〕
上記の第2の実施の形態では、アクセス制御部220は、RLUのリビルド処理が開始された後に、そのRLUに対するホスト装置400からの読み出し要求を受信したとき、読み出しの対象がバッドデータ管理テーブル260に登録されている場合には、無条件にホスト装置400に対してエラー応答した。これに対して、以下の第3の実施の形態において、アクセス制御部220は、ホスト装置400からの読み出し要求に応じてHDDからのデータ読み出しを行い、読み出しに失敗した場合には、そのデータについてのサルベージ処理をサルベージ制御部240に実行させる。これにより、HDDの故障が生じた場合でも、ホスト装置400から読み出しを要求されたデータを返信できる確率を高くする。
【0158】
なお、第3の実施の形態に係るストレージシステムにおいて、CMのハードウェア構成や処理機能の基本的な構成は、第2の実施の形態のCM201と同様である。そこで、以下、第3の実施の形態のCM201の処理を、第2の実施の形態の図4に示した符号を用いて説明する。
【0159】
図19および図20は、第3の実施の形態のCMにおけるホストリード処理手順の例を示すフローチャートである。
まず、図19のステップS171〜S176について説明する。
【0160】
[ステップS171]ここでは例として、RLU#00に属する1つのHDDが故障しているものとする。この状態で、アクセス制御部220は、RLU#00からのデータの読み出し要求をホスト装置400から受信すると、次のステップS172を実行する。
【0161】
[ステップS172]アクセス制御部220は、読み出し要求先のデータ領域の位置情報がバッドデータ管理テーブル260に登録されているかを判定する。アクセス制御部220は、対応する位置情報がバッドデータ管理テーブル260に登録されていなかった場合(S172:No)、ステップS173の処理を実行する。
【0162】
一方、アクセス制御部220は、対応する位置情報がバッドデータ管理テーブル260に登録されていた場合(S172:Yes)、その位置情報をサルベージ制御部240に通知して、サルベージ処理の実行を要求する。この実行要求に応じて、サルベージ制御部240は、図20のステップS141の処理を実行する。
【0163】
[ステップS173]アクセス制御部220は、読み出しを要求されたデータをHDDから読み出す。
[ステップS174]アクセス制御部220は、データの読み出しに成功した場合(S174:Yes)、ステップS175の処理を実行する。一方、データを読み出せなかった場合(S174:No)、アクセス制御部220は、読み出しに失敗したデータに対応する位置情報をサルベージ制御部240に通知して、サルベージ処理の実行を要求する。この実行要求に応じて、サルベージ制御部240は、図20のステップS141の処理を実行する。
【0164】
[ステップS175]アクセス制御部220は、ステップS173でHDDから読み出したデータを、ホスト装置400に返信する。すなわち、アクセス制御部220は、ホスト装置400に対して正常応答する。
【0165】
[ステップS176]アクセス制御部220は、ホスト装置400に対して、要求されたデータを正常に読み出すことができなかったとして、エラー応答する。
次に、図20の処理について説明する。図20では、図18と同様の処理が実行される処理ステップには同じステップ番号を付して示し、これらの詳細な処理内容の説明を省略する。
【0166】
アクセス制御部220からサルベージ処理の要求を受け付けたサルベージ制御部240は、前述のサルベージ方法(1)を用いて、ホットスペアのHDDからのデータ読み出しを試す(S141)。サルベージ制御部240は、ホットスペアのHDDからのデータ読み出しに成功した場合(S142:Yes)、ステップS142aの処理を実行する。
【0167】
[ステップS142a]サルベージ制御部240は、ホットスペアのHDDから読み出したデータを基に、ホスト装置400に返信する読み出しデータを生成する。RLU#00がRAID−1の場合、読み出しデータは、ホットスペアのHDDから読み出されたデータと同じである。一方、RLU#00がRAID−4,5のいずれかである場合、サルベージ制御部240は、ホットスペアのHDDから読み出したデータと、RLU#00に属する故障していないHDDのうち、読み出しに失敗したHDDを除くHDDから読み出したデータとを基に、読み出しデータを計算によって生成する。
【0168】
一方、ホットスペアのHDDからのデータ読み出しに失敗し(S142:No)、その読み出し失敗要因がBCCエラーであり(S143:Yes)、かつ、非冗長ライト管理テーブル270に対応する位置情報が登録されていない(S144:No)場合には、サルベージ制御部240は、前述のサルベージ方法(2)を用いた処理を行う。すなわち、サルベージ制御部240は、故障したHDDを再起動させ(S145)、再起動したHDDからのデータ読み出しを試みる。再起動したHDDからのデータ読み出しに成功した場合(S146:Yes)、サルベージ制御部240は、ステップS147aの処理を実行する。
【0169】
[ステップS147a]サルベージ制御部240は、ステップS145で再起動したHDDから読み出したデータを基に、ホスト装置400に返信する読み出しデータを生成する。RLU#00がRAID−1の場合、読み出しデータは、再起動したHDDから読み出されたデータと同じである。一方、RLU#00がRAID−4,5のいずれかである場合、サルベージ制御部240は、再起動したHDDから読み出したデータと、RLU#00に属する故障していないHDDのうち、読み出しに失敗したHDDを除くHDDから読み出したデータとを基に、読み出しデータを計算によって生成する。
【0170】
また、ホットスペアのHDDからのデータ読み出しの失敗要因がBCCエラー以外の場合(S143:No)、または、非冗長ライト管理テーブル270に対応する位置情報が登録されていた場合(S144:Yes)、または、故障後に再起動したHDDからのデータ読み出しに失敗した場合(S146:No)には、サルベージ制御部240は、前述のサルベージ方法(3)を用いた処理を行う。すなわち、サルベージ制御部240は、読み出しに失敗したHDDを再起動させ(S148)、再起動したHDDからのデータ読み出しを試みる。
【0171】
ここで、再起動したHDDからのデータ読み出しに失敗した場合(S149:No)、サルベージ制御部240は、データのサルベージに失敗したことをアクセス制御部220に通知する。サルベージ失敗の通知を受けたアクセス制御部220は、ホスト装置400に対してエラー応答する(図19のS176)。
【0172】
一方、ステップS148でのデータ読み出しに成功した場合(S149:Yes)、または、ステップS142a,147aのいずれかの処理後、サルベージ制御部240は、バッドデータ管理テーブル260に登録された、サルベージ対象のデータに対応する位置情報を、バッドデータ管理テーブル260から消去する(S151)。この後、サルベージ制御部240は、アクセス制御部220に対してサルベージに成功したことを通知するとともに、ステップS142a,147aのいずれかで生成した読み出しデータ、またはステップS148で再起動したHDDから読み出したデータを、アクセス制御部220に受け渡す。アクセス制御部220は、サルベージ制御部240から受け取ったデータをホスト装置400に返信する(図19のS175)。
【0173】
以上の第3の実施の形態によれば、リビルド処理中だけでなく、HDDの故障が生じ、かつ、ホスト装置400からの読み出し要求に応じたデータの読み出しに失敗したときにも、サルベージ処理が実行される。従って、HDDの故障が発生した場合にホストリードを正常に実行できる可能性を高くすることができる。
【0174】
〔第4の実施の形態〕
上記の第2の実施の形態で示したサルベージ方法(2)では、RLUに属するHDDの故障が発生してから現在までの期間にホストライトが行われたかを判定し、ホストライトが行われていなかった場合に、故障したHDDを再起動させてそのHDDからデータを読み出した。そして、サルベージ方法(2)では、上記の判定処理を、ホットスペアのHDDからデータを読み出すことができるか(図18のS142)、および、非冗長ライト管理テーブル270に対応する位置情報が登録されているか(図18のS144)という2つの判定によって行った。
【0175】
これに対して、以下の第4の実施の形態におけるサルベージ処理では、RLUに属するHDDの故障が発生してから現在までの期間にホストライトが行われたか否かを、ライト管理テーブルを用いて判定する。そして、ライト管理テーブルに基づき、ホストライトが行われていないと判定された場合に、故障したHDDを再起動させてそのHDDからデータを読み出す。以下、このようなライト管理テーブルに基づくサルベージ方法を、サルベージ方法(2a)と表す。
【0176】
図21は、第4の実施の形態におけるCMの処理機能の構成例を示すブロック図である。なお、この図21では、図4に対応する処理ブロックには同じ符号を付して示す。
第4の実施の形態において、CM201の記憶装置には、非冗長ライト管理テーブル270の代わりに、ライト管理テーブル290が記憶される。ライト管理テーブル290は、RLUに属するHDDの故障が発生してからリビルド処理が完了するまでの期間に、そのRLUに対して実行されたホストライトについての書き込み位置を示す位置情報が登録される。
【0177】
アクセス制御部220は、RLUに属するHDDのうちの1つが故障して、そのRLUに記録されたデータの冗長性が失われてから、ホットスペアのHDDに対するリビルド処理が完了するまでの期間に、そのRLUに対するホストライトを行ったとき、データの書き込み先の位置情報をライト管理テーブル290に登録する。
【0178】
サルベージ制御部240は、サルベージ処理の際にライト管理テーブル290を参照し、サルベージ対象のデータに対応する位置情報がライト管理テーブル290に登録されているか否かに応じて、サルベージ処理手順を決定する。
【0179】
図22は、ライト管理テーブルに登録される情報の例を示す図である。
ライト管理テーブル290には、RLUのRAID状態が「非冗長状態」または「リビルド中」であるときに、そのRLUに属する論理ユニットに対してホストライトが実行されたとき、書き込み先の位置を示す情報が、LUNとLBAとの組み合わせとして登録される。
【0180】
なお、ライト管理テーブル290のデータ構造は、図22の例に限らず、例えば、論理ユニットごとの全LBAに対して、「非冗長状態」または「リビルド中」におけるホストライトが実行されたか否かを示すフラグ情報が対応付けられた構造であってもよい。また、ライト管理テーブル290には、位置情報として、LUNおよびLBAの代わりに、例えば、HDDのディスク番号およびHDDにおける物理アドレスが登録されてもよい。
【0181】
次に、第4の実施の形態において実行されるサルベージ処理について説明する。まず、図23は、サルベージ方法(2a)の実行に必要な前処理を示す図である。
図23の「状態41」は、図10の「状態1」と同様に、RLU#00を構成するDISK#01の故障が発生した場合を示す。ただし、「状態41」は、DISK#01が故障してから、ホットスペアのDISK#10へのリビルド処理が完了するまでの期間における状態を示す。この期間には、図13の「状態21」のような、リビルド先とするホットスペアのDISK#01の準備が整うまでの期間も含む。
【0182】
サルベージ方法(2a)の前処理として、アクセス制御部220は、「状態41」においてホスト装置400からRLU#00に対する書き込み要求を受けると(ステップS61)、DISK#00の対応するブロックにデータを書き込む。これとともに、アクセス制御部220は、データの書き込み位置を示す位置情報(データを書き込んだブロックに対応するLUNおよびLBA)を、ライト管理テーブル290に登録する(ステップS62)。なお、このステップS62での処理手順は、RLU#00がRAID−4,5のいずれかの場合でも同様であり、アクセス制御部220は、ホストライトした位置の情報を非冗長ライト管理テーブル270に登録する。
【0183】
なお、すでにホットスペアのDISK#10の準備が整っている場合、アクセス制御部220は、図11の「状態12」に示したステップS23と同様に、DISK#00だけでなく、リビルド先のDISK#10に対してもホストライトを行ってもよい(ステップS64)。例えば、RLU#00がRAID−1の場合、ステップS64では、アクセス制御部220は、ホスト装置400から書き込み要求されたデータを、DISK#10にも書き込む。なお、RLU#00がRAID−4,5のいずれかである場合のステップS64の処理は、図11のステップS23で説明した処理と同様である。このようなステップS64の処理を実行することで、前述のサルベージ方法(1)も併用できるようになる。
【0184】
図24は、サルベージ方法(2a)の手順を示す図である。
図24の「状態42」は、図23の「状態41」において、ホットスペアのDISK#10に対するリビルド処理が実行されている状態を示す。RLU#00がRAID−1の場合、リビルド制御部230は、DISK#00に記録されたRLU#00のデータを読み出して、DISK#10にコピーする。このようなリビルド処理中に、リビルド制御部230が、DISK#00からのデータ読み出しに失敗したものとする(ステップS65)。
【0185】
サルベージ制御部240は、DISK#01が故障してから現在までの期間に、RLU#00に対するホストライトが行われたかを判定する。なお、この期間にホストライトが行われた場合、DISK#00における読み出しに失敗したブロック、またはそのブロックに対応するDISK#10のブロックの少なくとも一方に対して、最新のデータが記録されている状態となる。
【0186】
サルベージ制御部240は、上記の判定処理を、読み出しに失敗したブロックに対応する位置情報がライト管理テーブル290に登録されているかによって行う。そして、登録されていない場合、サルベージ制御部240は、DISK#01が故障してから現在までの期間にRLU#00に対するホストライトが行われていないと判定する(ステップS66)。この場合、DISK#00からの読み出しに失敗したデータに対応する、ホットスペアのDISK#10にリビルドすべきデータは、故障したDISK#01にのみ存在する可能性が高い。そこで、サルベージ制御部240は、故障したDISK#01を再起動させ(ステップS67)、再起動したDISK#01から、DISK#10にリビルドするデータを読み出すことができるかを試す。
【0187】
図24の「状態43」に示すように、サルベージ制御部240は、読み出しに失敗したDISK#00のブロックに対応する、再起動したDISK#01のブロックから、データを読み出す。データの読み出しに成功した場合、サルベージ制御部240は、読み出したデータを、ホットスペアのDISK#10における対応するブロックにコピーする。この場合、データのサルベージに成功したことになる(ステップS68)。
【0188】
なお、以上の図24に示したサルベージ方法(2a)の手順は、RLU#00がRAID−4,5のいずれかの場合でも同様である。すなわち、サルベージ制御部240は、再起動したDISK#01における対応するブロックからのデータの読み出しに成功すると、読み出したデータを、ホットスペアのDISK#10における同じストライプ番号に対応するブロックにコピーする。
【0189】
次に、上記のサルベージ方法(2a)とサルベージ方法(1),(3)とを組み合わせたサルベージ処理の例について、フローチャートを用いて説明する。
まず、図25は、第4の実施の形態でのI/O処理手順の例を示すフローチャートである。この図25は、I/O処理対象のRLU#00に属する1つのHDDが故障してから、RLU#00のリビルド処理が完了するまでの期間におけるI/O処理を示す。この期間とは、RAID管理テーブル250のRLU#00のレコード251において、故障したHDDに対応する「ディスク状態」に「故障」が設定され、かつ、「RAID状態」が「非冗長状態」または「リビルド中」が設定されている期間である。
【0190】
なお、図25では、図17と同様の処理が実行される処理ステップには同じ符号を付して示し、その処理内容の説明を省略する。図25では、図17と比較して、ホスト装置400から書き込み要求を受信したときの処理手順(ステップS126以降の処理手順)が異なる。
【0191】
すなわち、ホスト装置400から書き込み要求を受信した場合(S122:No)、アクセス制御部220は、リビルド先とするホットスペアのHDDの準備が完了しているかを判定する(S126)。ホットスペアのHDDの準備が完了している場合(S126:Yes)、アクセス制御部220は、RLU#00に属する故障していない所定のHDDに対して、書き込み処理を行う(S127)。また、アクセス制御部220は、故障したHDDに書き込むべきデータがある場合には、そのデータをホットスペアのHDDに書き込む。この後、ステップS129aの処理が実行される。
【0192】
一方、ホットスペアのHDDの準備が完了していない場合(S126:No)、アクセス制御部220は、RLU#00に属する故障していない所定のHDDに対して、書き込み処理を行う(S128)。この後、ステップS129aの処理が実行される。
【0193】
[ステップS129a]アクセス制御部220は、データの書き込み位置を示す位置情報(データを書き込んだブロックに対応するLUNおよびLBA)を、ライト管理テーブル290に登録する。これにより、ライト管理テーブル290には、RLU#00に属するHDDが故障してから、リビルド処理が完了するまでの期間に、RLU#00を書き込み先としたホストライトが行われた位置の情報が登録される。
【0194】
図26は、第4の実施の形態でのサルベージ処理手順の例を示すフローチャートである。この図26の処理は、図18と同様に、サルベージ制御部240が、サルベージ管理テーブル280に登録された位置情報を1つ選択するたびに実行される。また、サルベージ制御部240は、サルベージ管理テーブル280から選択した位置情報内のLUNが設定されたRLUを、RAID管理テーブル250を基に特定する。ここでは、RLU#00が特定されたものとして説明する。
【0195】
なお、図26では、図18と同様の処理が実行される処理ステップには同じ符号を付して示し、その処理内容の説明を省略する。
[ステップS161]サルベージ制御部240は、RLU#00内のHDDが故障してから現在までの期間に、RLU#00に対して非冗長状態でのホストライトが行われたかを判定する。具体的には、サルベージ制御部240は、サルベージ管理テーブル280から選択した位置情報内のLUNおよびLBAが、ライト管理テーブル290に登録されているかを判定する。
【0196】
同じLUNおよびLBAがライト管理テーブル290に登録されていた場合(ステップS144:Yes)、ホットスペアのDISK#10と、読み出しに失敗したHDDのいずれかに、ホストライトによる最新のデータが記録されている可能性が高いと推定される。そこで、サルベージ制御部240は、サルベージ方法(1)を用いたサルベージ処理、およびサルベージ方法(3)を用いたサルベージ処理を、順に試行する。
【0197】
まず、サルベージ制御部240は、サルベージ方法(1)を用いて、ホットスペアのDISK#10からデータを読み出す(S141)。ホットスペアのDISK#10からのデータ読み出しに成功した場合(S142:Yes)、データのサルベージに成功したことになり、ステップS151の処理が実行される。
【0198】
ホットスペアのDISK#10からのデータ読み出しに失敗した場合(S142:No)、サルベージ制御部240は、サルベージ方法(3)を用いて、読み出しに失敗したブロックが属するHDDを再起動させ(S148)、再起動したHDDからのデータ読み出しを試す(S149)。再起動したHDDからのデータ読み出しに成功した場合(S149:Yes)、サルベージ制御部240は、少なくとも再起動したHDDから読み出したデータを基に、リビルドデータを生成し、生成したリビルドデータを、ホットスペアのDISK#10における対応するブロックに書き込む(S150)。この後、ステップS151の処理が実行される。一方、再起動したHDDからのデータ読み出しに失敗した場合(S149:No)、データのサルベージに失敗したことになり、ステップS152の処理が実行される。
【0199】
上記のステップS161(Yes),S141,S142(No),S148,S149(Yes),S150の処理では、図18の処理と比較して、故障したHDDからのデータ読み出しが実行されることなく、読み出しに失敗したHDDからのデータ読み出しが実行される。このため、読み出しに失敗したHDDからのデータを基にサルベージに成功する場合、サルベージに成功するまでの時間が短縮される。
【0200】
なお、ステップS161で、対応する位置情報がライト管理テーブル290に登録されていなかった場合には、ステップS141,S142の処理を行うことなく、ステップS148の処理が実行されてもよい。この場合、図25においては、ステップS126,S127の処理が不要になり、アクセス制御部220は、書き込み要求を受信した場合(S122:No)、無条件にステップS128,S129aの処理を実行してもよい。
【0201】
次に、ステップS161で、同じLUNおよびLBAがライト管理テーブル290に登録されていない場合(ステップS144:No)には、ホットスペアのDISK#10にも、読み出しに失敗したHDDにも、最新データは記録されていないと推定される。そこで、サルベージ制御部240は、サルベージ方法(2a)を用いて、故障したHDDを再起動させ(S145)、再起動したHDDからのデータ読み出しを試す(S146)。
【0202】
再起動したHDDからのデータ読み出しに成功した場合(S146:Yes)、サルベージ制御部240は、読み出したデータを、その読み出し元ブロックに対応する、ホットスペアのDISK#10のブロックに書き込む(S147)。これにより、データのサルベージに成功したことになり、ステップS151の処理が実行される。一方、再起動したHDDからのデータ読み出しに失敗した場合(S146:No)、データのサルベージに失敗したことになり、ステップS152の処理が実行される。
【0203】
上記のステップS161(No),S145,S146(Yes),S147の処理では、図18の処理のようにホットスペアのDISK#10からのデータ読み出しを試すことなく、故障したHDDからのデータ読み出しが実行される。このため、データのサルベージに成功するまでの時間が短縮される。一方、故障したHDDからのデータ読み出しに失敗した場合(S146:No)には、リビルド処理時に読み出しに失敗したHDDを再起動することなく、データのサルベージに失敗したと判定される。このため、アクセス制御部220によるRLU#00に対するI/O処理が停止してしまう確率を低くすることができる。
【0204】
なお、以上の第4の実施の形態では、第2の実施の形態と同様に、リビルド処理とサルベージ処理とを非同期に実行するものとした。しかしながら、リビルド処理の際にデータの読み出しに失敗した時点で、図26の示すサルベージ処理が実行されてもよい。
【0205】
また、図26に示したサルベージ処理は、ホストリードの際にデータの読み出しに失敗した場合に実行されてもよい。
また、前述の第2の実施の形態で使用された非冗長ライト管理テーブル270には、HDDの故障が発生してから、リビルド先とするホットスペアのHDDの準備が完了するまでの期間にホストライトが発生した場合に、位置情報が登録される。これに対して、第4の実施の形態で使用されるライト管理テーブル290は、HDDの故障が発生してからリビルド処理が完了するまでの期間にホストライトが発生した場合に、位置情報が登録される。このため、ライト管理テーブル290より、非冗長ライト管理テーブル270の方がデータ量を小さくできる可能性が高い。すなわち、第2の実施の形態の方が、第4の実施の形態と比較して、ホストライトが発生したことを記憶するテーブルの容量を小さくすることができる。
【0206】
以上の各実施の形態に関し、さらに以下の付記を開示する。
(付記1) 複数の記憶装置と、前記複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置と、前記複数の記憶装置のいずれかの代わりに使用される予備用記憶装置とを備えたストレージシステムにおいて、
前記ストレージ制御装置は、
前記複数の記憶装置のうちの第1の記憶装置が故障すると、前記第1の記憶装置に記録されていたデータと同一のデータを前記予備用記憶装置に格納するリビルド処理を実行するリビルド制御部と、
前記リビルド処理を実行中の前記リビルド制御部が、前記複数の記憶装置のうちの第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出すデータ復旧制御部と、
を有することを特徴とするストレージシステム。
【0207】
(付記2) 前記ストレージ制御装置は、ホスト装置からのアクセス要求に応じて前記複数の記憶装置内のデータにアクセスするアクセス制御部であって、前記第1の記憶装置が故障したとき、前記複数の記憶装置のうちの前記第1の記憶装置を除く残りの記憶装置を用いて、前記ホスト装置からのアクセス要求に応じたアクセス処理を継続するアクセス制御部をさらに有することを特徴とする付記1記載のストレージシステム。
【0208】
(付記3) 前記アクセス制御部は、前記リビルド処理の実行中に前記ホスト装置から書き込み要求を受けたとき、前記第1の記憶装置に書き込むべきデータがある場合には、当該データを前記予備用記憶装置に書き込み、
前記データ復旧制御部は、
前記リビルド制御部が前記第2の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれているかを判定し、
データが書き込まれている場合には、当該データについての前記リビルド処理が完了していると判定し、
データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出す、
ことを特徴とする付記2記載のストレージシステム。
【0209】
(付記4) 前記データ復旧制御部は、
前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
起動した前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出せなかった場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする付記3記載のストレージシステム。
【0210】
(付記5) 前記データ復旧制御部は、
前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていない場合には、前記第1の記憶装置が故障してから、前記アクセス制御部が前記予備用記憶装置にデータを書き込み可能になるまでの期間に、前記第2の記憶装置における前記読み出しに失敗したデータの位置に対して前記アクセス制御部によってデータが書き込まれたかを判定し、
データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
データが書き込まれていた場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする付記3記載のストレージシステム。
【0211】
(付記6) 前記予備用記憶装置における全記憶領域は、あらかじめデータの読み出しエラーが発生する状態とされ、
前記データ復旧制御部は、前記リビルド制御部が前記第2の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置からのデータ読み出しを実行し、
データを正常に読み出すことができた場合には、当該データについての前記リビルド処理が完了していると判定し、
データの読み出しエラーが発生した場合には、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていないと判定する、
ことを特徴とする付記3〜5のいずれか1つに記載のストレージシステム。
【0212】
(付記7) 前記データ復旧制御部は、
前記リビルド制御部が前記第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置が故障してから現在までの期間に、前記第2の記憶装置における読み出しに失敗したデータの位置に対して前記アクセス制御部によってデータが書き込まれたかを判定し、
データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
データが書き込まれていた場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする付記2記載のストレージシステム。
【0213】
(付記8) 前記データ復旧制御部は、前記第1の記憶装置が故障した後、前記ホスト装置からの読み出し要求に応じた前記第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置における読み出しを要求されたデータに対応する位置からデータを読み出すことを特徴とする付記1記載のストレージシステム。
【0214】
(付記9) 複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置において、
前記ストレージ制御装置は、
前記複数の記憶装置のうちの第1の記憶装置が故障すると、前記第1の記憶装置に記録されていたデータと同一のデータを予備用記憶装置に格納するリビルド処理を実行するリビルド制御部と、
前記リビルド処理を実行中の前記リビルド制御部が、前記複数の記憶装置のうちの第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出すデータ復旧制御部と、
を有することを特徴とするストレージ制御装置。
【0215】
(付記10) ホスト装置からのアクセス要求に応じて前記複数の記憶装置内のデータにアクセスするアクセス制御部であって、前記第1の記憶装置が故障したとき、前記複数の記憶装置のうちの前記第1の記憶装置を除く残りの記憶装置を用いて、前記ホスト装置からのアクセス要求に応じたアクセス処理を継続するアクセス制御部をさらに有することを特徴とする付記9記載のストレージ制御装置。
【0216】
(付記11) 前記アクセス制御部は、前記リビルド処理の実行中に前記ホスト装置から書き込み要求を受けたとき、前記第1の記憶装置に書き込むべきデータがある場合には、当該データを前記予備用記憶装置に書き込み、
前記データ復旧制御部は、
前記リビルド制御部が前記第2の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれているかを判定し、
データが書き込まれている場合には、当該データについての前記リビルド処理が完了していると判定し、
データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出す、
ことを特徴とする付記10記載のストレージ制御装置。
【0217】
(付記12) 前記データ復旧制御部は、
前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
起動した前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出せなかった場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする付記11記載のストレージシステム。
【0218】
(付記13) 複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置におけるストレージ制御方法であって、
前記複数の記憶装置のうちの第1の記憶装置が故障すると、前記第1の記憶装置に記録されていたデータと同一のデータを予備用記憶装置に格納するリビルド処理を実行し、
前記リビルド処理において前記複数の記憶装置のうちの第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出す、
ことを特徴とするストレージ制御方法。
【0219】
(付記14) ホスト装置からのアクセス要求に応じて前記複数の記憶装置内のデータにアクセスするアクセス処理をさらに含み、
前記アクセス処理では、前記第1の記憶装置が故障したとき、前記複数の記憶装置のうちの前記第1の記憶装置を除く残りの記憶装置を用いて、前記ホスト装置からのアクセス要求に応じたアクセス処理を継続する、
ことを特徴とする付記13記載のストレージ制御方法。
【0220】
(付記15) 前記アクセス処理では、前記リビルド処理の実行中に前記ホスト装置から書き込み要求を受けたとき、前記第1の記憶装置に書き込むべきデータがある場合には、当該データを前記予備用記憶装置に書き込み、
前記リビルド処理において前記第2の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における読み出しに失敗したデータに対応する位置に対して、前記アクセス処理によってデータが書き込まれているかを判定し、
データが書き込まれている場合には、当該データについての前記リビルド処理が完了していると判定し、
データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出す、
ことを特徴とする付記14記載のストレージ制御方法。
【0221】
(付記16) 前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して、前記アクセス処理によってデータが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
起動した前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出せなかった場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする付記15記載のストレージ制御方法。
【0222】
(付記17) 前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して、前記アクセス処理によってデータが書き込まれていない場合には、前記第1の記憶装置が故障してから、前記アクセス制御部が前記予備用記憶装置にデータを書き込み可能になるまでの期間に、前記第2の記憶装置における前記読み出しに失敗したデータの位置に対して、前記アクセス処理によってデータが書き込まれたかを判定し、
データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
データが書き込まれていた場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする付記15記載のストレージ制御方法。
【0223】
(付記18) 前記予備用記憶装置における全記憶領域は、あらかじめデータの読み出しエラーが発生する状態とされ、
前記リビルド処理において前記第2の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置からのデータ読み出しを実行し、
データを正常に読み出すことができた場合には、当該データについての前記リビルド処理が完了していると判定し、
データの読み出しエラーが発生した場合には、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていないと判定する、
ことを特徴とする付記15〜17のいずれか1つに記載のストレージ制御方法。
【0224】
(付記19) 前記リビルド処理において前記第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置が故障してから現在までの期間に、前記第2の記憶装置における読み出しに失敗したデータの位置に対して、前記アクセス処理によりデータが書き込まれたかを判定し、
データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
データが書き込まれていた場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする付記14記載のストレージ制御方法。
【0225】
(付記20) 前記第1の記憶装置が故障した後、前記ホスト装置からの読み出し要求に応じた前記第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置における読み出しを要求されたデータに対応する位置からデータを読み出すことを特徴とする付記13記載のストレージ制御方法。
【符号の説明】
【0226】
1 ストレージシステム
10 ストレージ制御装置
11 リビルド制御部
12 データ復旧制御部
21,22,31 記憶装置
【特許請求の範囲】
【請求項1】
複数の記憶装置と、前記複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置と、前記複数の記憶装置のいずれかの代わりに使用される予備用記憶装置とを備えたストレージシステムにおいて、
前記ストレージ制御装置は、
前記複数の記憶装置のうちの第1の記憶装置が故障すると、前記第1の記憶装置に記録されていたデータと同一のデータを前記予備用記憶装置に格納するリビルド処理を実行するリビルド制御部と、
前記リビルド処理を実行中の前記リビルド制御部が、前記複数の記憶装置のうちの第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出すデータ復旧制御部と、
を有することを特徴とするストレージシステム。
【請求項2】
前記ストレージ制御装置は、ホスト装置からのアクセス要求に応じて前記複数の記憶装置内のデータにアクセスするアクセス制御部であって、前記第1の記憶装置が故障したとき、前記複数の記憶装置のうちの前記第1の記憶装置を除く残りの記憶装置を用いて、前記ホスト装置からのアクセス要求に応じたアクセス処理を継続するアクセス制御部をさらに有することを特徴とする請求項1記載のストレージシステム。
【請求項3】
前記アクセス制御部は、前記リビルド処理の実行中に前記ホスト装置から書き込み要求を受けたとき、前記第1の記憶装置に書き込むべきデータがある場合には、当該データを前記予備用記憶装置に書き込み、
前記データ復旧制御部は、
前記リビルド制御部が前記第2の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれているかを判定し、
データが書き込まれている場合には、当該データについての前記リビルド処理が完了していると判定し、
データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出す、
ことを特徴とする請求項2記載のストレージシステム。
【請求項4】
前記データ復旧制御部は、
前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
起動した前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出せなかった場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする請求項3記載のストレージシステム。
【請求項5】
前記データ復旧制御部は、
前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていない場合には、前記第1の記憶装置が故障してから、前記アクセス制御部が前記予備用記憶装置にデータを書き込み可能になるまでの期間に、前記第2の記憶装置における前記読み出しに失敗したデータの位置に対して前記アクセス制御部によってデータが書き込まれたかを判定し、
データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
データが書き込まれていた場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする請求項3記載のストレージシステム。
【請求項6】
前記予備用記憶装置における全記憶領域は、あらかじめデータの読み出しエラーが発生する状態とされ、
前記データ復旧制御部は、前記リビルド制御部が前記第2の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置からのデータ読み出しを実行し、
データを正常に読み出すことができた場合には、当該データについての前記リビルド処理が完了していると判定し、
データの読み出しエラーが発生した場合には、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていないと判定する、
ことを特徴とする請求項3〜5のいずれか1項に記載のストレージシステム。
【請求項7】
前記データ復旧制御部は、
前記リビルド制御部が前記第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置が故障してから現在までの期間に、前記第2の記憶装置における読み出しに失敗したデータの位置に対して前記アクセス制御部によってデータが書き込まれたかを判定し、
データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
データが書き込まれていた場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする請求項2記載のストレージシステム。
【請求項8】
前記データ復旧制御部は、前記第1の記憶装置が故障した後、前記ホスト装置からの読み出し要求に応じた前記第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置における読み出しを要求されたデータに対応する位置からデータを読み出すことを特徴とする請求項1記載のストレージシステム。
【請求項9】
複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置において、
前記ストレージ制御装置は、
前記複数の記憶装置のうちの第1の記憶装置が故障すると、前記第1の記憶装置に記録されていたデータと同一のデータを予備用記憶装置に格納するリビルド処理を実行するリビルド制御部と、
前記リビルド処理を実行中の前記リビルド制御部が、前記複数の記憶装置のうちの第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出すデータ復旧制御部と、
を有することを特徴とするストレージ制御装置。
【請求項10】
複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置におけるストレージ制御方法であって、
前記複数の記憶装置のうちの第1の記憶装置が故障すると、前記第1の記憶装置に記録されていたデータと同一のデータを予備用記憶装置に格納するリビルド処理を実行し、
前記リビルド処理において前記複数の記憶装置のうちの第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出す、
ことを特徴とするストレージ制御方法。
【請求項1】
複数の記憶装置と、前記複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置と、前記複数の記憶装置のいずれかの代わりに使用される予備用記憶装置とを備えたストレージシステムにおいて、
前記ストレージ制御装置は、
前記複数の記憶装置のうちの第1の記憶装置が故障すると、前記第1の記憶装置に記録されていたデータと同一のデータを前記予備用記憶装置に格納するリビルド処理を実行するリビルド制御部と、
前記リビルド処理を実行中の前記リビルド制御部が、前記複数の記憶装置のうちの第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出すデータ復旧制御部と、
を有することを特徴とするストレージシステム。
【請求項2】
前記ストレージ制御装置は、ホスト装置からのアクセス要求に応じて前記複数の記憶装置内のデータにアクセスするアクセス制御部であって、前記第1の記憶装置が故障したとき、前記複数の記憶装置のうちの前記第1の記憶装置を除く残りの記憶装置を用いて、前記ホスト装置からのアクセス要求に応じたアクセス処理を継続するアクセス制御部をさらに有することを特徴とする請求項1記載のストレージシステム。
【請求項3】
前記アクセス制御部は、前記リビルド処理の実行中に前記ホスト装置から書き込み要求を受けたとき、前記第1の記憶装置に書き込むべきデータがある場合には、当該データを前記予備用記憶装置に書き込み、
前記データ復旧制御部は、
前記リビルド制御部が前記第2の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれているかを判定し、
データが書き込まれている場合には、当該データについての前記リビルド処理が完了していると判定し、
データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出す、
ことを特徴とする請求項2記載のストレージシステム。
【請求項4】
前記データ復旧制御部は、
前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
起動した前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出せなかった場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする請求項3記載のストレージシステム。
【請求項5】
前記データ復旧制御部は、
前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていない場合には、前記第1の記憶装置が故障してから、前記アクセス制御部が前記予備用記憶装置にデータを書き込み可能になるまでの期間に、前記第2の記憶装置における前記読み出しに失敗したデータの位置に対して前記アクセス制御部によってデータが書き込まれたかを判定し、
データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
データが書き込まれていた場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする請求項3記載のストレージシステム。
【請求項6】
前記予備用記憶装置における全記憶領域は、あらかじめデータの読み出しエラーが発生する状態とされ、
前記データ復旧制御部は、前記リビルド制御部が前記第2の記憶装置からのデータ読み出しに失敗したとき、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置からのデータ読み出しを実行し、
データを正常に読み出すことができた場合には、当該データについての前記リビルド処理が完了していると判定し、
データの読み出しエラーが発生した場合には、前記予備用記憶装置における前記読み出しに失敗したデータに対応する位置に対して前記アクセス制御部によってデータが書き込まれていないと判定する、
ことを特徴とする請求項3〜5のいずれか1項に記載のストレージシステム。
【請求項7】
前記データ復旧制御部は、
前記リビルド制御部が前記第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置が故障してから現在までの期間に、前記第2の記憶装置における読み出しに失敗したデータの位置に対して前記アクセス制御部によってデータが書き込まれたかを判定し、
データが書き込まれていない場合には、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出し、
データが書き込まれていた場合には、前記第2の記憶装置を再起動させ、再起動した前記第2の記憶装置から前記読み出しに失敗したデータを再度読み出す、
ことを特徴とする請求項2記載のストレージシステム。
【請求項8】
前記データ復旧制御部は、前記第1の記憶装置が故障した後、前記ホスト装置からの読み出し要求に応じた前記第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置における読み出しを要求されたデータに対応する位置からデータを読み出すことを特徴とする請求項1記載のストレージシステム。
【請求項9】
複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置において、
前記ストレージ制御装置は、
前記複数の記憶装置のうちの第1の記憶装置が故障すると、前記第1の記憶装置に記録されていたデータと同一のデータを予備用記憶装置に格納するリビルド処理を実行するリビルド制御部と、
前記リビルド処理を実行中の前記リビルド制御部が、前記複数の記憶装置のうちの第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出すデータ復旧制御部と、
を有することを特徴とするストレージ制御装置。
【請求項10】
複数の記憶装置に記録するデータが異なる記憶装置に冗長化されるように前記複数の記憶装置に対するデータ記録を制御するストレージ制御装置におけるストレージ制御方法であって、
前記複数の記憶装置のうちの第1の記憶装置が故障すると、前記第1の記憶装置に記録されていたデータと同一のデータを予備用記憶装置に格納するリビルド処理を実行し、
前記リビルド処理において前記複数の記憶装置のうちの第2の記憶装置からのデータ読み出しに失敗したとき、前記第1の記憶装置から前記予備用記憶装置に格納するデータを読み出す、
ことを特徴とするストレージ制御方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【公開番号】特開2013−41455(P2013−41455A)
【公開日】平成25年2月28日(2013.2.28)
【国際特許分類】
【出願番号】特願2011−178466(P2011−178466)
【出願日】平成23年8月17日(2011.8.17)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成25年2月28日(2013.2.28)
【国際特許分類】
【出願日】平成23年8月17日(2011.8.17)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]