説明

記憶装置、記憶装置の制御方法、及び記憶装置の制御プログラム

【課題】データが復元される可能性が高い記憶装置の提供を課題とする。
【解決手段】本発明の記憶装置は、複数の記憶ユニットでホスト装置からのデータを冗長に格納する。第一記憶ユニットから該第一記憶ユニットを交換すべき旨の情報を受け取ると、該第一記憶ユニットに格納されたデータを冗長関係の他の記憶ユニットによって復元して予備記憶ユニットに書き込む。第一記憶ユニットから送信された該第一記憶ユニットを交換すべき旨の情報を受け取ると、該ホスト装置からの該第一記憶ユニットに書き込むべきデータを該予備記憶ユニットに書き込む。該ホスト装置からのデータの書き込みを行った該予備記憶ユニットの領域を記憶する。該他記憶ユニットによる復元を失敗した領域に対応する該予備記憶ユニットの領域が該ホスト装置からのデータの書き込みを行っていない領域であるときに、該第一記憶ユニットの情報を読み出す。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は記憶装置に関する。
【背景技術】
【0002】
記憶装置は記憶されたデータの保存の可能性を高めるために複数の記憶ユニットを冗長な構成とする。記憶装置には例えばディスクアレイ装置がある。ディスクアレイ装置は複数のディスク装置を有する。RAID(Redundant Array of Independent Disks)は、独立した複数のディスク装置を冗長構成とすることにより、データの保存の信頼性を高めるデータ記録方式である。RAIDを構成するディスク装置をメンバディスクという。メンバディスクの一台が故障した場合、他のメンバディスクに格納されたデータにより故障したメンバディスクが有するデータを復元することができる。故障したディスクを置き換えることにより、データの保護が実現できる。ディスク装置はデータ保護に関する高信頼性が求められるため、ディスク装置自身が故障予知を報告する機能(SMART(Self−Monitoring, Analysis and Reporting Technology))を有する。故障予知を出力したRAIDのメンバディスクは代替のディスク装置に交換される。
【0003】
故障予知の出力をしたメンバディスク(以下、故障予知ディスクという)のデータは、故障予知ディスク以外のメンバディスク(以下、正常ディスクという)に格納されたデータによって復元(リカバリ)される。復元したデータはRAIDの予備のディスク(以下、予備ディスクという)に書き込まれる。上記の一連の復元処理はRebuild処理という。
【0004】
故障予知ディスクは将来に真の故障が発生する確率が高いため、可能な限り故障予知ディスクへのアクセスを抑止することが望ましい。しかし、ホストコンピュータからの書込データを格納する場合、RAIDを構成するメンバディスク間でデータの不整合が発生しないようにデータを書き込む必要がある。故障予知ディスクにデータを書き込むことによって、故障予知ディスクへのアクセスを行った結果、故障予知ディスクが真に故障した状態になる恐れがある。故障予知ディスクが真に故障した場合、Rebuild処理中に正常ディスクでデータを読み込めなかった時に、読み込めなかったデータを復元することができなかった。一方、故障予知ディスクに対して一切のデータの読み書きを行わない場合、正常ディスクに格納されたデータと故障予知ディスクとの間で、データの整合性がない領域が存在することとなり、データの整合性がない領域のデータは復元できない場合があった。
【0005】
従来技術として下記の文献がある。
【特許文献1】特開2005−157739号公報
【特許文献2】特開2006−79418号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
本発明は上記のような問題点を解決するために、データが復元される可能性が高い記憶装置の提供を課題とする。
【課題を解決するための手段】
【0007】
本発明を解決するための手段を以下に述べる。
【0008】
第一の手段による記憶装置は、複数の記憶ユニットによりホスト装置からのデータを冗長に格納する記憶装置であって、複数の記憶ユニットのデータを相互に復元可能なデータを格納する一つ以上の冗長データ記憶ユニットと、記憶ユニットの復元されたデータを格納する予備の記憶ユニットと、該冗長データ記憶ユニットと該予備記憶ユニットを制御する制御部とを有する。そして、制御部は、冗長データ記憶ユニットを構成する記憶ユニットから記憶ユニットを交換すべき旨の情報を受け取ると、冗長データ記憶ユニットによって復元した交換すべき旨を出力した記憶ユニットに格納されたデータおよびホスト装置からの交換すべき旨を出力した記憶ユニットに書き込むべきデータを該予備記憶ユニットに書き込む。また、制御部は、冗長データ記憶ユニットによるデータの復元が失敗した領域に対応する予備記憶ユニットの領域が該ホスト装置からのデータの書き込みを行っていない領域であるときに、該予備記憶ユニットの領域に対応するデータを該交換すべき旨を出力した記憶ユニットから読み出す。
【0009】
第二の手段による記憶装置は、第二の手段の制御部が更に、冗長データ記憶ユニットによる予備の記憶ユニットに書き込むデータの復元が失敗した領域に対応する予備の記憶ユニットの領域がホスト装置からのデータの書き込みを行った領域であると識別したときに、予備の記憶ユニットに格納されたデータにより冗長データ記憶ユニットのデータを復元する。
【0010】
第三の手段による記憶装置では、記憶ユニットは磁気ディスク装置である。
【0011】
第四の手段による記憶装置では更に、予め定めた所定数以上の復元を実行する処理が実行された場合に、記憶装置に異常が有る旨を出力する。
【0012】
第五の手段による記憶装置では、交換すべき旨を出力した記憶ユニットを交換すべき旨の情報が、交換すべき旨を出力した記憶ユニットの読出し及び書込みのエラーが発生する率を予め検出しておき、エラーが発生する率によって該交換すべき旨を出力した記憶ユニットが動作できなくなると予想される時期の情報である。
【発明の効果】
【0013】
本発明によってデータが復元される可能性が高い記憶装置の提供が可能となり、記憶装置のデータの保存の信頼性が高まる。
【発明を実施するための最良の形態】
【0014】
図1は、本実施例のストレージシステム(Storage System)1の構成図である。
【0015】
ストレージシステム1は、ホストコンピュータ(Host Computer)2とディスクアレイ装置(Disk Array Device)3とから構成される。ホストコンピュータ2はストレージシステム1の全体を制御する。また、ホストコンピュータ2はストレージシステム1で記憶するデータを管理する。ホストコンピュータ2は例えば、記憶するデータをディスクアレイ装置3に送信すること、あるいはディスクアレイ装置3に格納されたデータを読み出すことを行う。
【0016】
ディスクアレイ装置3は、ホストコンピュータ2から送られるデータを格納し、ホストコンピュータ2からの要求に応じて格納したデータを読み出す処理を行う。ディスクアレイ装置3はRAID(REDUNDANT ARRAY OF INDEPENDENT DISKS)を構成する。RAIDの構成とすることでデータを冗長に記憶することとなり、データをより確実に記憶することが可能となる。ディスクアレイ装置3は、チャネルアダプタ(Channel Adapter)4、コントローラ(Controller)5、ディスクインターフェース(Disk Interface)6、及び、複数のディスク装置(Disk Device)10を有する。
【0017】
チャネルアダプタ4は、ホストコンピュータ2とコントローラとの間を接続するインターフェースである。チャネルアダプタはホストコンピュータ2およびディスクアレイ装置3内のコントローラ5と接続する。
【0018】
コントローラ5は、ディスクアレイ装置3の全体を制御する。例えば、ホストコンピュータ2との間の制御、ホストコンピュータ2から受け取ったデータを一時格納するキャッシュメモリの制御、複数のディスク装置10で構成されるRAIDシステムの制御等を行う。コントローラ5はチャネルアダプタ4とディスクアレイ装置3内のディスクインターフェース6と接続する。
【0019】
ディスクインターフェース6は、コントローラ5と各ディスク装置10との間を接続するインターフェースである。各ディスク装置10は、データを格納する装置である。
【0020】
ディスク装置10はコントローラ5からの指示に応じてデータを格納する、あるいはコントローラ5からの指示に応じてデータをコントローラ5に送信する装置である。各ディスク装置10はSMART(Self−Monitoring, Analysis and Reporting Technology 自己診断、解析及び報告技術)機能を有する。SMARTは、ディスク装置10の読み出し及び書き込みのエラー率を予め検出しておき、エラー率によってディスク装置が動作できなくなると予想される時期をディスク装置内で求め、求めた予想時期を出力する機能である。SMARTはATA/ATAPIの規格に組み込まれている。
【0021】
複数のディスク装置10は、RAIDとして機能するディスク装置(冗長データ記憶ユニット)と予備のディスク装置(予備の記憶ユニット)とから構成される。予備のディスク装置は、RAIDとして機能するディスク装置が故障した場合、あるいは、SMARTによって故障の予知を出力した場合にRAIDとして機能するディスク装置と置き換えるためのディスク装置である。予備ディスクとRAIDとして機能するディスク装置とを置き換えてRAIDを再構築する処理はRebuild処理という。
【0022】
次に本実施例のコントローラ5の構成について説明する。図2は本実施例のコントローラ5の構成図である。コントローラ5は、CPU(Central Processing Unit)51、ROM52、キャッシュメモリ(Cache memory)53、RAM54を有し、それぞれはバス55によって接続される。
【0023】
CPU51はコントローラ5の全体の制御を行なう。CPU51はRAM54に展開された各プログラムを実行することにより、読出手段、書込手段、復元手段。RAM54は、CPU51から直接アクセスされる記憶素子である。RAM54にはROM52に格納された各プログラム(ファームウェア)が展開される。プログラムは例えば、ホストコンピュータ2とディスクアレイ装置3との間のインターフェースを制御するインターフェースプログラム、キャッシュメモリに格納されたデータの管理を制御するキャッシュ制御プログラム、複数のディスク装置10によって構成されるRAIDを制御するRAID制御プログラムなどである。また、RAM54には図3で説明するWriteBack監視テーブル7(以降WB監視テーブル7とする)が展開される。
【0024】
WriteBack処理はコントローラ5がキャッシュメモリ53のデータをディスクアレイ装置3内の各ディスク装置10に書き込む処理である。
【0025】
キャッシュメモリ53はホストコンピュータ2から送られるディスクアレイ装置3内の各ディスク装置10に格納すべきデータが一時格納される記憶領域である。キャッシュメモリ53に書き込みは行われていても、最終的な書き込み先のディスク装置にWriteBack処理がされていないデータをDirtyDataという。
【0026】
ディスクアレイ装置3は信頼性の向上のため冗長構成である場合が多い。冗長構成のディスクアレイ装置3は複数のコントローラを有する。ディスクアレイ装置3の互いのコントローラ間は接続する。図2では、コントローラ5は冗長構成となる他のコントローラ56に接続する。
【0027】
次に本実施例のWB監視テーブル7の構成について説明する。図3は本実施例のWB監視テーブル7の構成図である。WB監視テーブル7は、予備のディスク装置に対してRebuild処理を行うときに作成するテーブルである。
【0028】
コントローラ5が予備ディスクに対してRebuild処理を行う場合、Rebuild処理の開始から完了までの間、コントローラ5は予備のディスク装置に対するWrite Back処理の有無を監視する。コントローラ5はWrite Backを監視するためにWB監視テーブル7をRAM54上に展開する。なお、コントローラ5はRebuild処理を既に実行した領域をWrite Back処理の有無の監視の対象から除外する構成とすることも可能である。Rebuild処理が実行された後の領域はRAIDを構成するグループとして冗長な状態であり、故障を予知したディスク装置からデータを読み出すことがないためである。
【0029】
コントローラ5はRebuild処理の開始時にRAM54の領域にWB監視テーブル7を新たに作成する。コントローラ5はRebuild処理の完了時にRAM54の領域のWB監視テーブル7を解放する。なお、コントローラ5はRAM54の領域のWB監視テーブル7の作成および解放とディスクアレイ装置3の電源Onあるいは電源Offとを関連付けることも可能である。
【0030】
WRITEBACK処理はディスク装置10のブロック(Block)を単位とする。また、ディスク装置内のブロックを特定するために、各ブロックはLBA(Logical Block Address)が付される。1Blockを構成するデータの量は520Byteである。そのため、1Block毎にWRITEBACK処理の監視を行うと、WB監視テーブル7のサイズが大きくなりすぎる。例えばディスク装置の容量が36GByteの場合に1Block毎にWRITEBACK処理の監視を行うと、WB監視テーブルの大きさは約7.5GByteとなる。一方、ディスク装置に対するデータの書込み時でのWRITEBACK処理で要求されるLBAの範囲は可変である。
WRITEBACK処理の可変となる範囲は1Block乃至2,048Blockであり、128Blockを一回のWRITEBACK要求サイズとして使用されることが多い。そこで本実施例のWB監視テーブル7は128Blockを1セグメントとし、1セグメントに対してWRITEBACK処理の有無を管理する。例えばディスク装置の容量が36GByteの場合に1セグメント毎にWRITEBACK処理の監視を行うと、WB監視テーブルの大きさは約75kByte程度となる。1セグメントの範囲でのWRITEBACK処理の監視とすることにより、WB監視テーブル7がRAM54を占有する領域を小さくすることが可能となる。
【0031】
図3のWB監視テーブル7は、Disk LBA71とWB有無Flag72とから構成される。Disk LBA71は、予備のディスク装置のセグメントを単位とする場合のセグメントの先頭のブロックのLBAを示す。WB有無Flag72はDisk LBA71を先頭のブロックのアドレスとするセグメントに対してWriteBack処理が行われた否かを示すフラグである。
【0032】
また、ディスクアレイ装置3が搭載するディスク装置の全ての数のWB監視テーブル7をRAM54上に展開することはRAM54の領域を無駄に占有することとなる。したがって、コントローラ5毎にWB監視テーブル7を並行して展開する最大数を予め定めておく。例えばコントローラ5毎に4台のディスク装置に対応するWB監視テーブル7を持たせる。コントローラ5はRebuild処理を並行して4台以上のディスク装置に対して実行すると判別した場合、コントローラ5はWRITEBACK処理の監視を実施しない動作にすることとする。WB監視テーブル7を並行して展開する最大数が予め設定する値よりも多い場合には、ディスクアレイ装置3の動作を停止させて保守を行ったほうがよい場合もあるためである。
【0033】
本実施例のWB監視テーブル7はディスクアレイ装置3内で冗長構成となるコントローラの間で二重化を行わない構成とする。コントローラ毎に独立した構成とするため、ディスクアレイ装置3の片方のコントローラに異常が発生し、異常が発生したコントローラを再起動した場合、再起動したコントローラはWRITEBACKの監視をしないようにする。また、異常が発生した後、異常が発生したコントローラの処理を引き継いだコントローラはWRITEBACKの監視をしないようにする。また、本実施例では、処理の複雑化を回避するため、ディスクアレイ装置3全体の電源のOn/Offをする場合は、コントローラ5はWB監視テーブル7を記憶しないようにする。ディスクアレイ装置3全体の停電による電源のOn/Offを含む。
【0034】
次にRebuild処理中のWrite Back処理について説明する。図4はキャッシュメモリ53に格納された更新データを各ディスク装置に格納する際のデータの流れを説明する図である。
【0035】
更新データ533は、ホストコンピュータ2から送信されキャッシュメモリ53に一時格納された、ストレージシステム1で更新されたデータである。
コントローラ5は更新データ533を各ディスク装置に格納する。更新データ533はセグメント531の大きさで管理される。セグメント531は連続する複数のブロック532のデータの集合である。
【0036】
正常Disk14、故障予知Disk15、および予備Disk16はディスクアレイ装置3を構成するディスク装置10である。故障予知Disk15はSMARTによる故障の予知情報をコントローラ5に対して報知したディスク装置である。正常Disk14は故障予知Disk15がSMARTによる故障の予知情報をコントローラ5に対して報知した後も継続して正常に動作をするディスク装置である。正常Disk14と故障予知Disk15とは本実施例ではRAID1を構成するものとする。予備Disk16はディスクアレイ装置3に接続された予備のディスク装置である。
【0037】
本実施例では、故障予知ディスク15の故障の可能性を高めないためにRebuild処理中にコントローラ5が故障予知ディスク15に対してWRITEBACK処理を実施しない。故障予知ディスク15に対してWRITEBACK処理を実施しないため、RAIDを構成する正常ディスク14と故障予知ディスク15との間のデータは不整合の状態である。メンバディスク間のデータが不整合である状態とは、例えばRAID1の場合はミラー整合性、RAID5の場合はストライプ(Stripe)整合性が無い状態である。コントローラ5はデータが不整合の状態の領域については正常ディスクのデータを故障予知ディスクのデータによって復元することができない。そこで、コントローラ5はWRITEBACK時に故障予知ディスクへの書込みを実施しないかわりに、RAIDを構成するメンバディスク間でデータが不整合となるデータ領域をRAM54のWB監視テーブル7に記録する。データが不整合となるデータ領域とWRITEBACK処理を実施した範囲とは一致するためである。この構成により、コントローラ5は正常ディスク14でWRITEBACK処理を実施しない範囲のデータを読み出せない時に故障予知ディスクを使ったリカバリを行うことが可能となる。
【0038】
Rebuild中にWRITEBACK処理を実行する場合、コントローラ5は正常ディスク14と予備ディスク16に対してWriteBack処理を実行する。また、コントローラ5はWRITEBACK処理が要求されたセグメントをWB監視テーブル7に記録する。一方、コントローラ5は故障予知ディスク15に対してはWriteBack処理を実行しない。コントローラ5はRAIDを構成するメンバディスク間のデータの不整合の範囲をWB監視テーブル7に記録しているので、データの復元をすることが可能になる。
【0039】
次に、コントローラ5が実行するRebuild処理中のWRITEBACK処理の流れを説明する。図5はRebuild処理中のWRITEBACK処理の流れのフローチャートである。
【0040】
コントローラ5のキャッシュ制御手段はRAID制御手段を呼び出す。コントローラ5のRAID制御手段はキャッシュメモリ53に格納されたデータに応じて、WRITEBACK処理を実行するブロックの数がWB監視テーブル7で管理するセグメントを構成するブロックの数以上か否かを判定する(S01)。
【0041】
WRITEBACK処理を実行するブロック数がセグメントを構成するブロック数以上である場合(S01:Yes)、コントローラ5は正常ディスク14と予備ディスク16に対して通常のWrite処理を実行する(S02)。
【0042】
コントローラ5のRAID制御手段は、WB監視テーブル7の処理を行ったセグメントの先頭のLBA71に対応するWB有無Flag72を「0」から「1」に更新する(S04)。その後、コントローラ5のRAID制御手段は、キャッシュメモリ制御手段に対してWRITEBACK処理の完了応答を行う。
【0043】
一方、ホストコンピュータ2からWRITEBACK処理が要求されるブロックの数は変動する。したがって、セグメントの単位である128個のブロックに満たないブロック数のWRITEBACK処理の要求がある場合がある。 図6はセグメントのブロック数がWRITEBACK処理のブロック数よりも大きい場合の状態の説明図である。WRITEBACK処理を実行するブロック数がセグメントを構成するブロック数よりも少ない場合(S01:No)は、コントローラ5は以下のWrite処理(S03)を実行する。まず、コントローラ5は、正常ディスク14にWRITEBACK処理を実行する。
【0044】
コントローラ5のRAID制御手段はキャッシュメモリ53内にディスク装置10に書き込むデータを一時格納するためのデータバッファ領域を獲得する(S11)。コントローラ5が獲得するデータバッファの領域はセグメントの大きさである。コントローラ5はWRITEBACK処理の対象のセグメントを正常ディスク14から読み出す(S12)。コントローラ5は正常ディスク14から読み出したセグメントのデータをデータバッファに格納する。コントローラ5はデータバッファに格納されたデータをキャッシュメモリ53のDirtyDataによって上書きする(S13)。
【0045】
コントローラ5はデータバッファのデータのWriteBack処理を予備ディスク16に対して実行する。コントローラ5はWB監視テーブル7のフラグ732を更新する(S14)。本実施例ではフラグ732の値を”0”から”1”に更新する。
【0046】
コントローラ5は、正常ディスク14および予備ディスク16に対してWriteBack処理を実行する。正常ディスク14と予備ディスク16に対してWriteBack処理を実行する時期は並行して行っても良いし、正常ディスク14に対するWriteBack処理が完了した後で予備ディスク16へのWriteBack処理行ってよい。正常ディスク14に対するWriteBack処理が完了した後で予備ディスク16へのWriteBack処理を行う場合、WriteBack処理時のDirtyDataがセグメント内に含まれるため、コントローラ5はDirtyDataの上書き処理を省略することが出来る。しかし、コントローラ5は、並行したWriteBack処理の実行が出来なくなるため、並行したWriteBack処理と比較してWriteBack処理に要する時間は長くなる。
【0047】
また、S12においてコントローラ5が正常ディスク14のセグメントのブロックの読み出すときに、キャッシュメモリ53に格納されたDirtyDataに対応するブロックをスキップして読み込むことも可能である。しかし、コントローラ5は正常ディスク14に対するRead処理のコマンドの数が増加する。
【0048】
次に、S12において、セグメントの一部がキャッシュメモリ53に格納されており、コントローラ5がキャッシュメモリ53に格納されたセグメントの一部のデータをデータバッファに読み出す時に正常ディスク14からデータを読み出せない場合の処理について説明する。図7は、コントローラ5がキャッシュメモリに格納されたセグメントの一部のデータをデータバッファに展開する時に正常ディスク14からデータを読み出せない場合の処理を説明する図である。
【0049】
コントローラ5が正常ディスクの対象のセグメントに属するブロックのデータを読出せない場合(S21:No)は、コントローラ5は正常ディスク14から読出せないブロックに対応する故障予知ディスク15のブロックから読み出す(S22)。コントローラ5は故障予知ディスク15から読出したブロックのデータと正常ディスク14から読出したブロックのデータとからセグメントを構成するデータをデータバッファに作成する。その後、S13以降の処理を実行する。
【0050】
次に、予備ディスク16に対するRebuild処理時のコントローラ5の動作について説明する。図8はデータ復旧処理時のコントローラ5の処理のフローチャートである。図9はデータ復旧処理時のコントローラ5の処理のフローチャートの動作を説明する図である。
【0051】
コントローラ5はRebuild処理を開始する。コントローラ5はセグメントに対応するブロックのデータを正常ディスク14から読み出す(S31)。コントローラ5はデータを読み出せたか否かを判定する(S32)。例えば、ディスク装置が有する応答ステータスの値で媒体エラーの旨の結果を得た場合に正常に読み出せなかったと判定する。
【0052】
コントローラ5は正常ディスク14からWriteback処理の対象となるセグメントを読み出せない場合(S32:No)RAID制御プログラムを呼び出し、正常ディスク14から読み出せないブロックのデータについての復旧処理を実行する。
【0053】
一方、データを正常に読み出せなかった場合(S32:No)、読み出せなかったデータに対応するセグメントのWRITEBACK処理の有無をWB監視テーブル7のWB有無Flag72によって判別する(S33)。WRITEBACK処理が既に行われているセグメントに読み出せなかったブロックが含まれる場合、セグメントに対応する予備ディスク16内の各ブロックには既に正常ディスク14のデータを復元し得るデータが書き込まれている状態である。したがって、WB監視テーブル7のWB有無Flag72が「1」のセグメントに含まれるブロックの場合(S33:Yes)、コントローラ5は現在のセグメントに対するWrite処理をスキップする。
【0054】
WRITEBACK処理を以前に実施されたセグメントの場合、予備ディスクのセグメントに格納されたデータと正常ディスク14のセグメントに格納されたデータとはRAIDの冗長関係にある。したがって、故障予知ディスク15を使ったリカバリは不要であり、コントローラ5は予備ディスク16に対するWriteBack処理を実施することもなく、次のセグメントについてのRebuild処理を行う。
【0055】
なお、コントローラ5は正常ディスク14の読み出せなかったブロックのデータを予備ディスク16によってリカバリ処理を実行することも可能である。Rebuild処理時にリカバリ処理をすることにより、ディスクパトロールによるブロックの異常検出の時だけでなく、正常ディスク14の媒体エラーをリカバリする機会が増加する。これによりディスクアレイ装置3のデータ保存の可能性が高まる。
【0056】
一方、読み出せなかったブロックを含むセグメントについてWRITEBACK処理がなされていない場合(S33:No)、コントローラ5は正常ディスク14で読み出せなかったブロックを故障予知ディスク15から読み出してリカバリ処理を実行する(S34)。具体的にはコントローラ5は、正常ブロック14から読み出せないブロックに対応するデータを故障予知ディスク15から読み出し、読み出したデータをデータバッファに格納する。コントローラ5は処理の対象となるセグメントの残りのブロックを正常ディスク14から読み出しデータバッファに格納する(S35)。
【0057】
コントローラ5は、データバッファに格納されたセグメント単位のデータを予備ディスク16に対して書き込む(S36)。データを書込み後、コントローラ5は正しく書き込めたか否かの確認処理(Verify)を行う。コントローラ5は、正常ディスク14の最終のブロックまで完了するまで(S37)Rebuild処理を実行する。
具体的には、コントローラ5は故障予知ディスク15から読み出したデータブロックの次のLBAに該当するデータブロックを正常ディスク14から読み出す処理をS31から繰り返し、データバッファに格納する。コントローラ5はセグメントの最終のブロックをデータバッファに格納するまで繰り返す。
【0058】
コントローラ5は正常ディスクの最終のブロックまで完了した場合(S36:Yes)はRebuild処理を完了する。Rebuild処理が完了した場合、コントローラ5はRAM54上に格納されたWB監視テーブル7の領域を開放する。また、コントローラ5は故障予知ディスク15を故障とする。
【0059】
また、コントローラ5は予備ディスク16のセグメントはWRITEBACK処理を既に実行した領域か否かをWB監視テーブル7のWB有無フラグ72によって判別することも可能である。コントローラ5は既にWriteBack処理を行ったセグメントであると判別した場合、対象のセグメントのRebuild処理をスキップすることも可能である。
【0060】
次に、Rebuild処理の基準となるブロック数とWB監視テーブル7で監視するセグメントを構成するブロック数とが不一致の場合でのRebuild処理について説明する。セグメントの一部についてRebuild処理を実行することは部分的なRebuild(Partial Rebuild)という。
【0061】
Rebuild処理の基準となるブロック数がWB監視テーブル7で監視するセグメントのブロック数よりも少ない場合は、ブロック数が同一の場合と同様の処理によりRebuild処理が可能である。
【0062】
一方、Rebuild処理の基準となるブロック数がWB監視テーブル7で監視するセグメントのブロック数よりも多い場合、コントローラ5はRebuild処理の対象のブロック群をセグメント毎に切り分け、コントローラ5は切り分けたセグメント毎にRebuild処理を実行する。
【0063】
従来のWrite処理の失敗情報による管理は、故障予知ディスクに対するWriteコマンドの成否を管理することで、Rebuild処理時に正常ディスクのRead処理において媒体エラーが検出された場合の故障予知ディスクのデータの使用の可否を判断するものであった。従来の管理方法では、コントローラは、Write処理を失敗した故障予知ディスクの領域を使ったリカバリを実行する場合、Bad Dataを予備ディスクに書き込むことになる。一方、故障予知ディスクへのWrite処理は継続されるため故障予知ディスクが故障する可能性が高い。
【0064】
本実施例では、Rebuild処理時に正常ディスクでのデータ読み取りエラー時のリカバリを故障予知ディスクからデータを読み出すことによって行う。本実施例は、Rebuild処理において正常ディスクからデータをReadできない場合、WRITEBACK処理の状態に基づき故障予知Diskによる復元を行うことによりデータの復元可能性があがる。また、本実施例は故障予知DiskにWriteBack処理を行わないこととするため、故障予知Diskへの負担を軽減させることができる。本実施例により、Rebuild処理において復元できるデータが増加する。
【0065】
本実施例ではミラーリングであるRAID1について説明をしたが他のRAIDの構成に適用可能である。例えばRAID5の場合、複数の正常Diskによってデータを復元し、ディスク装置に書き込むデータを作成すればよい。
【図面の簡単な説明】
【0066】
【図1】本実施例のストレージシステム1の構成図である。
【図2】本実施例のコントローラ5の構成図である。
【図3】本実施例のWB監視テーブル7の構成図である。
【図4】キャッシュメモリ53に格納された更新データを各ディスク装置に格納する際のデータの流れを説明する図である。
【図5】Rebuild処理中のWRITEBACK処理の流れのフローチャートである。
【図6】セグメントのブロック数がWRITEBACK処理のブロック数よりも大きい場合の状態の説明図である。
【図7】コントローラ5がキャッシュメモリに格納されたセグメントの一部のデータをデータバッファに展開する時に正常ディスク14からデータを読み出せない場合の処理を説明する図である。
【図8】データ復旧処理時のコントローラ5の処理のフローチャートである。
【図9】データ復旧処理時のコントローラ5の処理のフローチャートの動作を説明する図である。
【符号の説明】
【0067】
1 ストレージシステム(Storage System)
2 ホストコンピュータ(Host Computer)
2 ディスクアレイ装置(Disk Array Device)
4 チャネルアダプタ(Channel Adapter)
5 コントローラ(Controller)
6 ディスクインターフェース(Disk Interface)
7 WB監視テーブル
10 ディスク装置(Disk Device)
14 正常Disk
15 故障予知Disk
16 予備Disk
51 CPU(Central Processing Unit)
52 ROM
53 キャッシュメモリ(Cache memory)
54 RAM
55 バス
71 Disk LBA
72 WB有無Flag
531 セグメント
532 LBA
533 更新データ


【特許請求の範囲】
【請求項1】
複数の記憶ユニットによりホスト装置からのデータを冗長に格納する記憶装置であって、
該複数の記憶ユニットのデータを相互に復元可能なデータを格納する一つ以上の冗長データ記憶ユニットと、
該記憶ユニットの復元されたデータを格納する予備記憶ユニットと、
該冗長データ記憶ユニットと該予備記憶ユニットとを制御する制御部とを有し、
該制御部は、該冗長データ記憶ユニットを構成する記憶ユニットから該記憶ユニットを交換すべき旨の情報を受け取ると、該冗長データ記憶ユニットによって復元した該交換すべき旨を出力した記憶ユニットに格納されたデータおよび該ホスト装置からの該交換すべき旨を出力した記憶ユニットに書き込むべきデータを該予備記憶ユニットに書き込み、
該制御部は、該冗長データ記憶ユニットによるデータの復元が失敗した領域に対応する該予備記憶ユニットの領域が該ホスト装置からのデータの書き込みを行っていない領域であるときに、該予備記憶ユニットの領域に対応するデータを該交換すべき旨を出力した記憶ユニットから読み出す、
ことを特徴とする記憶装置。
【請求項2】
該制御部は更に、該冗長データ記憶ユニットによる予備記憶ユニットに書き込むデータの復元が失敗した領域に対応する該予備記憶ユニットの領域が該ホスト装置からのデータの書き込みを行った領域であると識別したときに、該予備記憶ユニットに格納されたデータにより該冗長データ記憶ユニットのデータを復元する
ことを特徴とする請求項1に記載の記憶装置。
【請求項3】
該記憶ユニットは磁気ディスク装置であることを特徴とする請求項1に記載の記憶装置。
【請求項4】
予め定めた所定数以上の復元を実行する処理が実行された場合に、記憶装置に異常が有る旨を出力する手段を更に有することを特徴とする請求項1に記載の記憶装置。
【請求項5】
該交換すべき旨を出力した記憶ユニットを交換すべき旨の情報は、該交換すべき旨を出力した記憶ユニットの読出し及び書込みのエラーが発生する率を予め検出しておき、該エラーが発生する率によって該交換すべき旨を出力した記憶ユニットが動作できなくなると予想される時期の情報であることを特徴とする請求項1に記載の記憶装置。
【請求項6】
複数の記憶ユニットによりホスト装置からのデータを冗長に格納する記憶装置の制御方法であって、
該複数の記憶ユニットのデータを相互に復元可能なデータを格納する一つ以上の冗長データ記憶ユニットと、該記憶ユニットの復元されたデータを格納する予備記憶ユニットと、該冗長データ記憶ユニットと該予備記憶ユニットとを制御する制御部とからなり、
該制御部が、
該冗長データ記憶ユニットを構成する記憶ユニットから該記憶ユニットを交換すべき旨の情報を受け取ると、該冗長データ記憶ユニットによって復元した該交換すべき旨を出力した記憶ユニットに格納されたデータおよび該ホスト装置からの該交換すべき旨を出力した記憶ユニットに書き込むべきデータを該予備記憶ユニットに書き込み、
該冗長データ記憶ユニットによるデータの復元が失敗した領域に対応する該予備記憶ユニットの領域が該ホスト装置からのデータの書き込みを行っていない領域であるときに、該予備記憶ユニットの領域に対応するデータを該交換すべき旨を出力した記憶ユニットから読み出す、
ことを特徴とする記憶装置の制御方法。
【請求項7】
複数の記憶ユニットによりホスト装置からのデータを冗長に格納する記憶装置の制御方法であって、
該複数の記憶ユニットのデータを相互に復元可能なデータを格納する一つ以上の冗長データ記憶ユニットと、該記憶ユニットの復元されたデータを格納する予備記憶ユニットと、該冗長データ記憶ユニットと該予備記憶ユニットとを制御する制御部とからなり、
該制御部が、
該冗長データ記憶ユニットを構成する記憶ユニットから該記憶ユニットを交換すべき旨の情報を受け取ると、該冗長データ記憶ユニットによって復元した該交換すべき旨を出力した記憶ユニットに格納されたデータおよび該ホスト装置からの該交換すべき旨を出力した記憶ユニットに書き込むべきデータを該予備記憶ユニットに書き込む手順、
該冗長データ記憶ユニットによるデータの復元が失敗した領域に対応する該予備記憶ユニットの領域が該ホスト装置からのデータの書き込みを行っていない領域であるときに、該予備記憶ユニットの領域に対応するデータを該交換すべき旨を出力した記憶ユニットから読み出す手順、
を実行させるための制御プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公開番号】特開2008−181425(P2008−181425A)
【公開日】平成20年8月7日(2008.8.7)
【国際特許分類】
【出願番号】特願2007−15529(P2007−15529)
【出願日】平成19年1月25日(2007.1.25)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】