JP5286956B2 - 制御方法、ディスクアレイ装置 - Google Patents
制御方法、ディスクアレイ装置 Download PDFInfo
- Publication number
- JP5286956B2 JP5286956B2 JP2008154768A JP2008154768A JP5286956B2 JP 5286956 B2 JP5286956 B2 JP 5286956B2 JP 2008154768 A JP2008154768 A JP 2008154768A JP 2008154768 A JP2008154768 A JP 2008154768A JP 5286956 B2 JP5286956 B2 JP 5286956B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- parity
- buffer
- disk
- unit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1076—Parity data used in redundant arrays of independent storages, e.g. in RAID systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2211/00—Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
- G06F2211/10—Indexing scheme relating to G06F11/10
- G06F2211/1002—Indexing scheme relating to G06F11/1076
- G06F2211/1059—Parity-single bit-RAID5, i.e. RAID 5 implementations
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Description
記憶装置へのデータ書き込みエラーの制御技術に関する。
記憶装置の代表としてRAID(Redundant Arrays of Inexpensive(Independent)Disks)がある。RAIDはデータを冗長構成して記憶することで信頼性の高いストレージシステムを構築することができ、RAID5、6が多く活用されている。
しかしながらこれらRAID5、6などのRAIDシステムにおいて以下の問題がある。その問題は記憶装置へのデータ読み書きを管理するRAIDコントローラがデータのディスクへの書き込みに成功したが、そのデータに対応するパリティデータのディスクへの書き込みが失敗した場合に発生する。このような場合、RAIDコントローラがパリティデータをディスクへ書き込むリトライが成功するまで、RAIDコントローラはパリティバッファにパリティデータを保持し続ける。これはデータの冗長構成を保つためである。一方でパリティバッファの資源は限られている。
そのためRAIDコントローラがパリティバッファにパリティデータを保持し続けた状態で、ホストコンピュータから新たな書き込み命令を続けて受信したり、高負荷の書き込み処理を受信すると、パリティバッファの容量が不足する。その結果、RAIDコントローラがホストコンピュータに対して、エラー応答を返してしまう(ジョブアベンド)といった問題が起きる。
RAIDに関連する特許文献として以下のものがある。
特開2006−252414号公報
特開2003−167688号公報
本願発明の管理装置の制御方法は、パリティデータの書き込みエラーが発生した場合であっても、管理装置がシステムダウンしないようにパリティデータの管理を行うことを目的とする。
本願発明に係る管理装置の制御方法の第一の側面によれば、データを記憶する複数の記憶部に接続され、第1の格納領域と第2の格納領域を有する管理装置の制御方法において、該記憶部に記憶するためのデータを該第1の格納領域に保持し、該記憶部に記憶するためのデータから生成したパリティデータを該第2の格納領域に保持し、該パリティデータを該記憶部に書き込み処理し、該第2の格納領域に保持した該パリティデータと該記憶部に保持されたパリティデータを比較し、該第2の格納領域に保持した該パリティデータと該記憶部に保持されたパリティデータが異なる場合、該第2の格納領域に保持した該パリティデータが、該複数の記憶部においてストライプを構成する複数のデータを読み出すためのトリガー情報を該第2の格納領域に保持し、該パリティデータを再び該記憶部に書き込み処理するときに、該トリガー情報を参照して該複数のデータを読み出して、該パリティデータを再び生成して該記憶部に書き込むことを特徴とする。
本実施例の管理装置の制御方法は、パリティデータの書き込みエラーが発生した場合であっても、該パリティデータを書き込みトライした記憶部における記憶場所の情報を保持しておくことによって、管理装置がシステムダウンしないようにパリティデータの管理を行うことができる。
以下、RAIDシステムにおけるコントローラモジュール(CM)のバッファ容量の枯渇制御について説明する。
[1.RAIDシステム100]
図1は本実施例に係るRAIDシステム100の構成図である。本実施例に係るRAIDシステム100はRAID5である。本実施例に係るRAIDシステム100は、RAID5のいわゆる(3+1)の構成である。RAIDシステム100は、ホストコンピュータ101、CA(チャネルアダプタ)102、CM(コントローラモジュール)103、ディスク104、105、106、107から構成されている。RAIDシステム100は、RAID5であるので、各データのストライプは、3つのデータストライプと1のパリティストライプで構成されている。
[1.RAIDシステム100]
図1は本実施例に係るRAIDシステム100の構成図である。本実施例に係るRAIDシステム100はRAID5である。本実施例に係るRAIDシステム100は、RAID5のいわゆる(3+1)の構成である。RAIDシステム100は、ホストコンピュータ101、CA(チャネルアダプタ)102、CM(コントローラモジュール)103、ディスク104、105、106、107から構成されている。RAIDシステム100は、RAID5であるので、各データのストライプは、3つのデータストライプと1のパリティストライプで構成されている。
[1.1.ホストコンピュータ101]
ホストコンピュータ101は、書き込み命令、読み出し命令をCA102に出す。ホストコンピュータ101は、書き込み命令と共にディスク104〜107に書き込むデータをCA102に送る。
ホストコンピュータ101は、書き込み命令、読み出し命令をCA102に出す。ホストコンピュータ101は、書き込み命令と共にディスク104〜107に書き込むデータをCA102に送る。
[1.2.CA(チャネルアダプタ)102]
CA102は、ホストコンピュータ101とCM103との間で通信制御を行う。CA102は、ホストコンピュータ101からCM103への書き込み命令又は読み出し命令を処理して、ホストコンピュータ101とCM103との間のデータ転送を制御する。
[1.3.CM(コントローラモジュール)103]
CM103は、CA102を介してホストコンピュータ101から受信するデータをディスク104〜107に分散して格納する。本実施例において、CM103は、データ(New Data)108をディスク104に書き込み、パリティデータ(Old Parity)110をパリティデータ(New Parity)111に更新する場合を考える。
CA102は、ホストコンピュータ101とCM103との間で通信制御を行う。CA102は、ホストコンピュータ101からCM103への書き込み命令又は読み出し命令を処理して、ホストコンピュータ101とCM103との間のデータ転送を制御する。
[1.3.CM(コントローラモジュール)103]
CM103は、CA102を介してホストコンピュータ101から受信するデータをディスク104〜107に分散して格納する。本実施例において、CM103は、データ(New Data)108をディスク104に書き込み、パリティデータ(Old Parity)110をパリティデータ(New Parity)111に更新する場合を考える。
CM103はディスク104にデータ(New Data)108を書き込む場合、まずCM103はデータ(Old Data)109をディスク104から読み出す。
そしてCM103は、データ(Old Data)109に対応するパリティデータ(Old Parity)110をディスク107から読み出す。パリティデータ(Old Parity)110は、データ(Old Data)109、及びディスク105、106に格納されておりデータ109に対応するデータ(図2に記載のデータ205、206)の排他的論理和である。
CM103は、データ(New Data)108とデータ(Old Data)109とデータ(Old Parity)110の排他的論理和をとってデータ(New Parity)111を生成する。CM103は、データ(New Data)108をディスク104に、データ(New Parity)109をディスク107に書き込みを試みる。
CM103は、ディスク104にデータ(New Data)108を書き込み成功し、ディスク107にパリティデータ(New Parity)111を書き込み失敗した場合、ディスク104〜107に格納するデータ間で整合性が取れない問題が発生する。
ここで図2は本実施例に係るディスク104〜107に格納するデータを示すデータテーブル200である。データテーブル200は、データ(New Data)108をディスク104に書き込む前と書き込んだ後におけるディスク104〜107に格納しているデータを示している。データテーブル200に示すデータは、ディスク104〜107が格納する1ストライプ分のデータである。ディスク104〜107は、データテーブル200に示すデータ以外のデータも格納している。カラム201はディスク104に格納するデータ、カラム202はディスク105に格納するデータ、カラム203はディスク106に格納するデータ、カラム204はディスク107に格納するデータを示している。
CM103がディスク104、107にデータを書く前(Pre)では、ディスク104はデータ(Old Data)109を、ディスク105はデータ(Old Data)205を、ディスク106はデータ(Old Data)206を、ディスク107はパリティデータ(Old Parity)110を格納している。
そしてCM103がディスク104にデータ(New Data)108を書き込んだ後(After)では、ディスク104はデータ(New Data)108を、ディスク105はデータ(Old Data)205を、ディスク106はデータ(Old Data)206を、ディスク107はパリティデータ(Old Parity)110を格納している。
本実施例においてCM103は、ディスク107にパリティデータ(New Parity)111の書き込みを失敗する。そのためCM103がディスク104にデータ(New Data)108を書き込んだ後(After)において、ディスク104〜107に格納されるデータは、ディスク104〜107データ間で整合性がとれていない状態である。
CM103がディスク107にパリティデータ(Old Parity)110を書き込み失敗した場合、CM103は書き込みを失敗したパリティデータ(New Parity)111をパリティバッファに保持する。CM103はパリティデータ111をパリティバッファに保持した状態で、さらなるホストコストコンピュータ101からの書き込み命令などによりCM103によるディスク104〜107へのデータ書き込みが発生すると、CM103のパリティバッファの容量が足りなくなる問題が発生する。
<1.3.1.バッファ量の枯渇制御>
そこで本実施例に係るCM103は以下の処理を行い、上記問題であるCM103が有するパリティバッファの容量枯渇を制御する。
そこで本実施例に係るCM103は以下の処理を行い、上記問題であるCM103が有するパリティバッファの容量枯渇を制御する。
CM103は書き込みを失敗したパリティデータ(New Parity)111を他のディスクに書き込む。本実施例ではCM103はパリティデータ(New Parity)111をディスク106に書き込む。CM103がパリティデータ(New Parity)111をディスク106に書き込みし終わったら、パリティバッファ312を開放する。そしてCM103は、パリティデータ(New Parity)111の書き込みを失敗したディスク107をCM103から切り離す。ディスク107の切り離しは、CM103とディスク107の電気的な接続を遮断することである。
そしてディスク107へパリティデータ(New Parity)111の書き込みが可能になった場合(ディスク107が復旧した場合)、CM103はrebulid処理を行う。CM103はメモリ上にバッファを確保し、そのバッファにディスク104からデータ(New Data)108を、ディスク105からデータ(Old Data)205を、ディスク106からパリティデータ(New Parity)206を読み出す。CM103はディスク106から読み出したパリティデータ(New Parity)206をディスク107に書き込む。
CM103はデータ(New Data)108、データ(Old Data)205、パリティデータ(New Parity)111の排他的論理和(XOR)を計算してデータ(Old Data)206を生成する。ここでデータ(Old Data)206は、ディスク106に格納されていたデータであって、CM103がパリティデータ(New Parity)111に上書きしたデータである。CM103は生成したデータ(Old Data)206をディスク106に書き込む。CM103はバッファを開放する。
これによりCM103がパリティデータ(New Parity)111をディスク107に書き込めないことに起因するバッファ容量の枯渇を防ぐことができる。
図3は本実施例に係るCM103の機能ブロック図である。
CM103は、バッファ獲得部301、データ読み出し部302、パリティ生成部303、データ書き込み部304、整合判定部305、データ書き戻し部306、バッファ開放部307、RAID制御部601、及びRAIDリカバリ部602、データ確認部901、及びデータ生成部902を有している。またCM103はハード構成として、CPU308、キャッシュ309、メモリ310から構成されている。CPU308が、バッファ獲得部301、データ読み出し部302、パリティ生成部303、データ書き込み部304、整合判定部305、データ書き戻し部306、バッファ開放部307、RAID制御部601、及びRAIDリカバリ部602、データ確認部901、及びデータ生成部902を実行する。CPU308はCM103がこれら機能を実行して、キャッシュ309、メモリ310へのデータ、そのデータに対応するパリティデータを書き込み/読み出し制御を行う。以下、CM103が有する各機能について説明する。
[2.1.バッファ獲得部301]
CPU308がバッファ獲得部301を実行し、メモリ310上でデータバッファ311、パリティバッファ312の獲得処理を行う。ホストコンピュータ101からスモールライト(Small Write)のデータ書き込み命令があると、バッファ獲得部301は、データ(Old Data)109とデータ(Old Parity)110を読み出すためのデータバッファ311、パリティバッファ312をメモリ310上に確保する。より具体的にはバッファ獲得部301は、メモリ310の一定のアドレス範囲にデータ(Old Data)109とデータ(Old Parity)110を格納できる領域を割り当てる処理を行う。
CPU308がバッファ獲得部301を実行し、メモリ310上でデータバッファ311、パリティバッファ312の獲得処理を行う。ホストコンピュータ101からスモールライト(Small Write)のデータ書き込み命令があると、バッファ獲得部301は、データ(Old Data)109とデータ(Old Parity)110を読み出すためのデータバッファ311、パリティバッファ312をメモリ310上に確保する。より具体的にはバッファ獲得部301は、メモリ310の一定のアドレス範囲にデータ(Old Data)109とデータ(Old Parity)110を格納できる領域を割り当てる処理を行う。
そしてバッファ獲得部310がメモリ310上に獲得するデータバッファ311の容量は、データ(Old Data)109を格納できる最小限の容量であり、データ(Old Data)109と同じ大きさ若しくはそれに順ずる程度の容量である。同様にバッファ獲得部310がメモリ310上に獲得するパリティバッファ312の容量は、パリティデータ(Old Parity)110を格納できる最小限の容量であり、パリティデータ(Old Parity)110と同じ大きさ若しくはそれに順ずる程度の容量である。これはデータバッファ311、パリティバッファ312の容量枯渇の原因となるエラーの発生確率が低いことによる。換言すれば、データバッファ311、パリティバッファ312の容量は、エラーの発生確率とデータ書き込み処理に必要なメモリ容量を考慮した容量である。そのため、バッファ獲得部310は、予め定められたエラーの発生確率とデータ書き込み処理に必要なメモリ容量に応じて、データバッファ311及びパリティバッファ312を確保する。
またスモールライト(Small Write)は、RAIDシステム100における書き込み範囲が1ストライプの半分以下のブロック(0xC0 block以下)の書き込み処理である。
[2.2.データ読み出し部302]
CPU308がデータ読み出し部302を実行し、データバッファ311にデータ(Old Data)109、パリティバッファ312にパリティデータ(Old Parity)110を読み出す処理を行う。バッファ獲得部301がデータバッファ311、パリティバッファ312をメモリ310上に獲得した後、データ読み出し部302は、データバッファ311にデータ(Old Data)109、パリティバッファ312にパリティデータ(Old Parity)110を読み出す。データ読み出し部302は、データバッファ311にデータ(Old Data)109、パリティバッファ312にパリティデータ(Old Parity)110を格納する。
CPU308がデータ読み出し部302を実行し、データバッファ311にデータ(Old Data)109、パリティバッファ312にパリティデータ(Old Parity)110を読み出す処理を行う。バッファ獲得部301がデータバッファ311、パリティバッファ312をメモリ310上に獲得した後、データ読み出し部302は、データバッファ311にデータ(Old Data)109、パリティバッファ312にパリティデータ(Old Parity)110を読み出す。データ読み出し部302は、データバッファ311にデータ(Old Data)109、パリティバッファ312にパリティデータ(Old Parity)110を格納する。
[2.3.パリティ生成部303]
CPU308がパリティ生成部303を実行し、パリティデータ(New Parity)111を生成する。まずパリティ生成部303は、データバッファ311のデータ(Old Data)109とパリティバッファ312のパリティデータ(Old Parity)110の排他的論理和(XOR)を計算して中間結果を算出する。パリティ生成部303は、この中間結果を一時的に、パリティバッファ312に格納し、パリティデータ(Old Parity)110をパリティバッファ312から削除する。そしてパリティ生成部303は中間結果とキャッシュ309のデータ(New Data)108との排他的論理和(XOR)を計算してパリティデータ(New Parity)111を生成する。パリティ生成部303はパリティデータ(New Parity)111をパリティバッファ312に格納し、中間結果をパリティバッファ312から削除する。
CPU308がパリティ生成部303を実行し、パリティデータ(New Parity)111を生成する。まずパリティ生成部303は、データバッファ311のデータ(Old Data)109とパリティバッファ312のパリティデータ(Old Parity)110の排他的論理和(XOR)を計算して中間結果を算出する。パリティ生成部303は、この中間結果を一時的に、パリティバッファ312に格納し、パリティデータ(Old Parity)110をパリティバッファ312から削除する。そしてパリティ生成部303は中間結果とキャッシュ309のデータ(New Data)108との排他的論理和(XOR)を計算してパリティデータ(New Parity)111を生成する。パリティ生成部303はパリティデータ(New Parity)111をパリティバッファ312に格納し、中間結果をパリティバッファ312から削除する。
[2.4.データ書き込み部304]
CPU308がデータ書き込み部304を実行し、ディスク104にデータ(New Data)108を、ディスク107にパリティデータ(New Parity)111を書き込む処理を試みる。正常にデータ書き込み処理部304が書き込み処理を実行できれば、データ(New Data)108をディスク104、パリティデータ(New Parity)111をディスク107に書き込むことができる。
CPU308がデータ書き込み部304を実行し、ディスク104にデータ(New Data)108を、ディスク107にパリティデータ(New Parity)111を書き込む処理を試みる。正常にデータ書き込み処理部304が書き込み処理を実行できれば、データ(New Data)108をディスク104、パリティデータ(New Parity)111をディスク107に書き込むことができる。
しかしながら、ディスクへのタイミングの不一致、ディスク107へのゴミの混入などの原因により、データ書き込み部304はデータ(New Data)108をディスク104に書き込むことができるが、パリティデータ(New Parity)111をディスク107に書き込むことができない場合が発生する。この場合パリティバッファ312はパリティデータ(New Parity)を保持したままとなる。そのため新たにホストコンピュータ101からディスク104〜107へのデータ書き込み命令があると、パリティバッファ312の容量が不足するといった問題は生じる。そこで本実施例におけるRAIDシステム100では、ディスク107へ書き込み失敗したパリティデータ(New Parity)111をディスク106に一時的に書き込む。そしてRAIDシステム100はパリティバッファ312を開放する。具体的にはデータ書き込み部304が以下の処理を行って、ディスク106にパリティデータ(New Parity)111を書き込む。
データ書き込み部304がパリティデータ(New Parity)111をディスク107に書き込み失敗した場合、データ書き込み部304はパリティデータ(New Parity)111をディスク106に書き込む。より具体的にはデータ書き込み部304は、パリティデータ(New Parity)111を、ディスク106におけるパリティデータ(New Parity)111に対応したデータ(Old Data)206のアドレス範囲に書き込む。これはデータ書き込み部304がディスク106のデータ206をパリティデータ(New Parity)111に上書きすることである。そのためRAIDシステム100は、ディスク106に格納されていたデータ206を失う。CM103は、再びパリティデータ(New Parity)111をディスク107に書き込むと、ディスク104に格納されるデータ(New Data)108、ディスク105に格納されるデータ(Old Data)205、ディスク106に格納されるパリティデータ(New Parity)111からデータ(Old)206を作成する。そのためディスク106におけるデータ(Old Data)206のアドレス範囲にパリティデータ(New Parity)111を書き込むことによって、CM103はRAIDシステム100に格納するデータ全体の復元をできる。
パリティデータ(New Parity)111を書き込めたか否かは、整合判定部305が行う処理によって判定される。
またRAIDシステム100がホットスワップ(HS)機能を有している場合には、パリティデータ(New Parity)をそのホットスワップのディスクに書き込んでもよい。ホットスワップ機能は、RAIDシステム100が通電された状態のままディスク107を取り外し、代替ディスク(予備ディスク)に切り替える機能である。
またデータ書き込み部304は、パリティデータ(New Parity)111をディスク107に書き込みをリトライする場合、バッファに保持するデータの中からパリティデータ(New Parity)111を特定する。具体的にはデータ書き込み部304はデータの中にあるパリティビットを参照して、そのデータがパリティデータ(New Parity)111であるか否かを判別する。そしてデータ書き込み部304は、特定したパリティデータ(New Parity)111をディスク107に再び書き込む。
[2.5.整合判定部305]
CPU308が整合判定部305を実行し、ディスク107に格納されるパリティデータを読み出して、パリティバッファ312に格納するパリティデータ(New Parity)111とディスク107に格納するパリティデータとを比較する。パリティバッファ312に格納するパリティデータ(New Parity)111とディスク107に格納するパリティデータとを比較した結果、整合判定部305がパリティデータ(New Parity)111とディスク107に格納するパリティデータが一致しないと判定する場合、データ書き込み部304がパリティデータ(New Parity)111をディスク106に書き込むことができなかったと判定する。またパリティバッファ312に格納するパリティデータ(New Parity)111とディスク107に格納するパリティデータとを比較した結果、整合判定部305がパリティデータ(New Parity)111とディスク107に格納するパリティデータが一致すると判定する場合、データ書き込み部304がパリティデータ(New Parity)111をディスク106に書き込むことができたと判定する。
CPU308が整合判定部305を実行し、ディスク107に格納されるパリティデータを読み出して、パリティバッファ312に格納するパリティデータ(New Parity)111とディスク107に格納するパリティデータとを比較する。パリティバッファ312に格納するパリティデータ(New Parity)111とディスク107に格納するパリティデータとを比較した結果、整合判定部305がパリティデータ(New Parity)111とディスク107に格納するパリティデータが一致しないと判定する場合、データ書き込み部304がパリティデータ(New Parity)111をディスク106に書き込むことができなかったと判定する。またパリティバッファ312に格納するパリティデータ(New Parity)111とディスク107に格納するパリティデータとを比較した結果、整合判定部305がパリティデータ(New Parity)111とディスク107に格納するパリティデータが一致すると判定する場合、データ書き込み部304がパリティデータ(New Parity)111をディスク106に書き込むことができたと判定する。
[2.6.データ書き戻し部306]
CPU308がデータ書き戻し部306を実行し、データ(Old Data)109をデータバッファ311に書き戻す。データ書き込み部306がパリティデータ(New Parity)111をディスク107へ書き込み失敗した場合に、データ書き戻し部306はデータ(Old Data)109をデータバッファ311に書き戻す。
CPU308がデータ書き戻し部306を実行し、データ(Old Data)109をデータバッファ311に書き戻す。データ書き込み部306がパリティデータ(New Parity)111をディスク107へ書き込み失敗した場合に、データ書き戻し部306はデータ(Old Data)109をデータバッファ311に書き戻す。
[2.7.メモリ開放部307]
CPU308がメモリ開放部307を実行し、パリティバッファ312に格納するパリティデータ(New Parity)111を削除する。
CPU308がメモリ開放部307を実行し、パリティバッファ312に格納するパリティデータ(New Parity)111を削除する。
データ書き込み部304がパリティデータ(New Parity)111をディスク106に書き込むと、メモリ開放部307はパリティバッファ312に格納するパリティデータ(New Parity)111を削除する。またメモリ開放部307は、キャッシュ309に格納するデータ(New Data)108を削除する。これはRAIDシステム100が、ディスク104にデータ(New Data)108を、ディスク105にデータ205を、ディスク106にパリティデータ(New Parity)111を格納しているためである。つまりRAIDシステム100は、これらデータ(New Data)108、データ205、パリティデータ(New Parity)111からデータ206を作成できるので、パリティバッファ312にパリティデータ(New Parity)111を保持しておく必要はなく、またキャッシュ309にデータ(New Data)108を保持しておく必要はない。
なお本実施例において「データバッファ311、パリティバッファ312、キャッシュ309を開放する」は、データバッファ311、パリティバッファ312、キャッシュ309に格納されるデータを削除することを意味し、メモリ310、キャッシュ309を他のデータを保持して使用できるようにすることを意味する。
[2.8.RAID制御部601]
CPU308がRAID制御部601を実行し、RAIDリカバリ部602に対して、ディスク107の切り離しを依頼する。
CPU308がRAID制御部601を実行し、RAIDリカバリ部602に対して、ディスク107の切り離しを依頼する。
メモリ開放部307がパリティバッファ312、キャッシュ309を開放すると、RAID制御部601はRAIDリカバリ部602に対して、ディスク107の切り離しを依頼する。
またRAID制御部601が、RAIDリカバリ部602からrebuild処理の依頼を受信すると、RAID制御部601はバッファ獲得部301にバッファの確保を指示してrebuild処理を開始する。
[2.9.RAIDリカバリ部602]
CPU308がRAIDリカバリ部602を実行し、ディスク107をRAIDシステム100から切り離す。
CPU308がRAIDリカバリ部602を実行し、ディスク107をRAIDシステム100から切り離す。
RAIDリカバリ部602は、RAID制御部601の依頼に応じて、ディスク107をRAIDシステム100から切り離す。ディスク107の切り離し処理は、CM107とディスク107との電気的接続を遮断することである。そしてRAIDリカバリ部602は、RAIDシステム100のRAIDステータス(RAID STATUS)を「available」から「exposed」に変更する。RAIDリカバリ部602は、RAIDシステム100からディスク107を切り離しているか否かを管理する。ディスク107が切り離されているRAIDシステム100はexposed状態である。またexposed状態は、RAIDシステム100が冗長構成のない状態のことである。available状態は、RAIDシステム100が冗長構成になっている状態である。
さらにRAIDリカバリ部602は、パリティデータ(New Parity)111の書き込みを管理しており、パリティデータ(New Parity)111を書き込んだディスク(本実施例ではディスク106)の情報(フラグ)を保持している。つまりRAIDリカバリ部602は、パリティデータ(New Parity)111を書き込んだディスクがディスク106であることを示す情報を保持しておく。
またパリティデータ(New Parity)111の書き込みに失敗したディスク107が復旧すると、RAIDリカバリ部602は、RAID制御部601にrebuild処理を依頼する。rebuild処理は、RAIDシステム100における冗長構成でない状態(exposed状態)から冗長構成の状態(available状態)に復旧する処理である。
[2.10.データ確認部901]
CPU308がデータ確認部901を実行し、BCC1002を参照して、データブロック1001の論理的な正当性を確認する。
CPU308がデータ確認部901を実行し、BCC1002を参照して、データブロック1001の論理的な正当性を確認する。
[2.11.データ生成部902]
CPU308がデータ生成部902を実行し、データ(New Data)108、データ(Old Data)205、及びパリティデータ(New Parity)111の排他的論理和を計算して、データ(Old Data)206を生成する。
CPU308がデータ生成部902を実行し、データ(New Data)108、データ(Old Data)205、及びパリティデータ(New Parity)111の排他的論理和を計算して、データ(Old Data)206を生成する。
[3.パリティバッファ312の容量の枯渇制御に関するフローチャート]
図4は本実施例に係るCM103が処理するパリティバッファ312の容量枯渇の制御に関するフローチャートである。
図4は本実施例に係るCM103が処理するパリティバッファ312の容量枯渇の制御に関するフローチャートである。
ホストコンピュータ101からスモールライト(Small Write)のデータ書き込み命令があると、バッファ獲得部301は、データ(Old Data)109とデータ(Old Parity)110を読み出すためのデータバッファ311、パリティバッファ312をメモリ310上に確保する(ステップS401)。
バッファ獲得部301がデータバッファ311、パリティバッファ312をメモリ310上に獲得した後、データ読み出し部302は、データバッファ311にデータ(Old Data)109、パリティバッファ312にパリティデータ(Old Parity)110を読み出す(ステップS402)。データバッファ311はデータ(Old Data)109を、パリティバッファ312はパリティデータ(Old Parity)110を保持する(ステップS403)。
パリティ生成部303は、データバッファ311のデータ(Old Data)109とパリティバッファ312のパリティデータ(Old Parity)110の排他的論理和(XOR)を計算して中間結果を算出する(S404)。パリティ生成部303は、この中間結果を一時的に、パリティバッファ312に格納し、パリティデータ(Old Parity)110をパリティバッファ312から削除する(ステップS405)。そしてパリティ生成部303は中間結果とキャッシュ309に保持するデータ(New Data)108との排他的論理和(XOR)を計算してパリティデータ(New Parity)111を生成する(ステップS406)。パリティ生成部303はパリティデータ(New Parity)111をパリティバッファ312に格納し、中間結果をパリティバッファ312から削除する(ステップS407)。
そしてデータ書き込み部304は、データ(New Data)108をディスク104、パリティデータ(New Parity)111をディスク107に書き込みトライし、パリティデータ(New Parity)111の書き込みができたか否かを判別する(ステップS408)。整合判定部305は、ディスク107に格納されるパリティデータを読み出す。そして整合判定部305は、パリティバッファ312に格納するパリティデータ(New Parity)111とディスク107に格納するパリティデータとを比較する。パリティバッファ312に格納するパリティデータ(New Parity)111とディスク107に格納するパリティデータとを比較した結果、整合判定部305がパリティデータ(New Parity)111とディスク107に格納するパリティデータが一致しないと判定する場合、データ書き込み部304がパリティデータ(New Parity)111をディスク106に書き込むことができなかったと判定する(ステップS408 NO)。またパリティバッファ312に格納するパリティデータ(New Parity)111とディスク107に格納するパリティデータとを比較した結果、整合判定部305がパリティデータ(New Parity)111とディスク107に格納するパリティデータが一致すると判定する場合、データ書き込み部304がパリティデータ(New Parity)111をディスク106に書き込むことができたと判定する(ステップS408 YES)。
データ書き込み部304がデータ(New Data)108をディスク104、パリティデータ(New Parity)111をディスク107に書き込むことができたと判別する場合(ステップS408 YES)、バッファ開放部307は、パリティバッファ312に格納するパリティデータ(New Parity)111、及びデータバッファ311に格納するデータ(Old Data)109を削除する(ステップS415)。CM103はデータの書き込み処理を終了する。データ書き込み部304がパリティデータ(New Parity)111をディスク107に書き込むことができなかったと判別する場合(ステップS408 NO)、パリティバッファ312はパリティデータ(New Parity)111を保持したままとする(ステップS409)。
そしてデータ書き込み部304は、データ(New Parity)111をディスク106に書き込む(ステップS410)。より具体的にはデータ書き込み部304は、パリティデータ(New Parity)111を、ディスク106においてパリティデータ(New Parity)111に対応したデータ(Old Data)206が書き込まれているアドレス範囲に書き込む。これはデータ書き込み部304がディスク106のデータ206をパリティデータ(New Parity)111に上書きすることである。ここでデータ書き込み部304は、データ(Old Data)206のブロックIDを参照することによって、データ(Old Data)206を特定し、データ(Old Data)206のアドレス範囲にパリティデータ(New Parity)111を書き込む。またデータ書き込み部304はパリティデータ(New Parity)111のブロックID1004(図10参照。)に、パリティデータ(New Parity)111を書き込んだアドレス範囲(データ(Old Data)206が書き込まれていたアドレス範囲)を示す識別情報を書く。
そしてメモリ開放部307はパリティバッファ312からパリティデータ(New Parity)111を削除する(ステップS411)。さらにメモリ開放部307はキャッシュ309からデータ(New Data)108を削除する(ステップS412)。パリティデータ(New Parity)111はディスク106に格納されており、データ(New Data)108はディスク104に格納されているため、ディスク104〜106でデータの整合性が取れており、RAIDシステム100がデータ(Old Data)206を復元できる状態になっているためである。そしてディスク107にはパリティデータ(Old Parity)110が格納されており、ディスク104〜106のデータを整合性がないデータが格納されているため、CM103はディスク107を切り離す。
RAID制御部601はRAIDリカバリ部602に対して、ディスク107の切り離し(電気的接続の遮断)を依頼する。RAIDリカバリ部602は、RAID制御部601の依頼に応じて、ディスク107をRAIDシステム100から切り離す(ステップS413)。RAIDリカバリ部602は、RAIDシステム100のRAIDステータス(RAID STATUS)を「available」から「exposed」に変更する(ステップS414)。
上記図4のフローチャートに示すバッファ容量の枯渇制御を図解すると図5、6のように表すことができる。図5はCM103におけるパリティデータ(New Data)111のディスク106への書き込みを示す図である。また図6はCM103におけるディスク107の切り離しを示す図である。
CM103のバッファ獲得部301がデータバッファ311、パリティバッファ312をメモリ310上に確保する。続いてCM103のデータ読み出し部302がデータバッファ311にデータ(Old Data)109、パリティバッファ312にパリティデータ(Old Parity)110を読み出す。CM103のデータ読み出し部302は、データバッファ311にデータ(Old Data)109、パリティバッファ312にパリティデータ(Old Parity)110を保持する。パリティ生成部303は、データ(Old Data)109、パリティデータ(Old Parity)110、及びデータ(New Data)108との排他的論理和(XOR)を計算してパリティデータ(New Parity)111を生成する。パリティ生成部303はパリティデータ(New Parity)111をパリティバッファ312に格納する。そしてデータ書き込み部304は、データ(New Data)108をディスク104、パリティデータ(New Parity)111をディスク107に書き込みトライする。
データ書き込み部304がデータパリティデータ(New Parity)111をディスク107に書き込むことができなかった場合、パリティバッファ312はパリティデータ(New Parity)111を保持したままとする。そしてデータ書き込み部304は、データ(New Parity)111をディスク107に書き込む。メモリ開放部307はパリティバッファ312からパリティデータ(New Parity)111を削除する。さらにメモリ開放部307はキャッシュ309からデータ(New Data)108を削除する。
RAIDリカバリ部602は、ディスク107をRAIDシステム100から切り離し、RAIDシステム100のRAIDステータス(RAID STATUS)を「available」から「exposed」に変更する。
次にパリティデータ(New Parity)111の書き込みエラーから復旧にするために、CM103が実行する処理について説明する。
[4.rebuild処理に関するフローチャート]
図7は本実施例に係るrebuild処理に関するフローチャートである。また図8及び9は本実施例に係るrebuild処理に関する模式図である。
図7は本実施例に係るrebuild処理に関するフローチャートである。また図8及び9は本実施例に係るrebuild処理に関する模式図である。
データ書き込み部304がパリティデータ(New Parity)をディスク106に書き込むと、RAIDリカバリ部602はディスク107をRAIDシステム100から切り離してRAIDステータス(RAID STATUS)をExposed状態にしている(図4に記載のステップS413、S414の状態である)。
そしてパリティデータ(New Parity)111の書き込みに失敗したディスク107が復旧すると、CM107は以下の処理を行う。
図8に示すように、RAIDリカバリ部602はRAID制御部601にrebuild処理を依頼する。rebuild処理は、RAIDシステム100における冗長構成でない状態(exposed状態)から冗長構成の状態(available状態)に復旧する処理である。そしてRAID制御部601は、バッファ獲得部301にバッファの確保を指示してrebuild処理を開始する。
バッファ獲得部301はデータバッファ311、パリティバッファ312をメモリ310上に確保する(ステップS701)。そしてデータ読み出し部302はデータ(New Data)108とデータ(Old Data)205をデータバッファ311に読み出し、パリティデータ(New Parity)111をパリティバッファ312に読み出す(ステップS702)。
図10は本実施例に係るパリティデータ(New Parity)111の構成図である。
本実施例におけるデータ(New Data)108、データ(Old Data)109、パリティデータ(Old Parity)110のデータ構成も以下に示すパリティデータ(New Parity)111と同様の構成である。
パリティデータ(New Parity)111は512バイトのデータブロック(Data Block)1001と8バイトのBCC(Block Check Code)1002から構成されている。データブロック1001は、データ(New Data)108、データ(Old Data)205、及びデータ(Old Data)206におけるユーザデータ部分の排他的論理和をとった値である。BCC1002は、CM103がデータブロック1001の論理的な正当性を確認するのに用いる情報である。本実施例ではデータ確認部901が、BCC1002を参照して、データブロック1001の論理的な正当性を確認する。データブロック1001の論理的な正当性とは、データブロック1001の破損の有無、パリティデータ(New Parity)111のディスクにおける論理的なデータ位置があっているか否かである。
さらにBCC1002は、パリティデータ(New Parity)111の異常を検出するための冗長コードである2バイトのブロックCRC(Block CRC)1003とデータブロック1001の論理的なデータ位置をチェックするための位置情報である6バイトのブロックID(Block ID)1004から構成されている。
ブロックID1004は1ビットのBadフラグ(Bad Flag)1006、1ビットのパリティビット(parity bit)1007、6ビットのSLU番号1008、8ビットのディスク書き込み抜け検出用カウンタ1009、32ビットのカウンタ1010から構成されている。そしてブロックID1004は、ディスク106のどのブロックにパリティデータ(New Parity)111を記載したか否かを示す情報である。これによりCM103のデータ書き込み部304がパリティデータ(New Parity)111をディスク106に書き込んでも、データ読み出し部302はパリティデータ(New Parity)111を読み出すディスク106のブロックを特定することができ、パリティバッファ312に読み出すことができる。
Badフラグ1006は、パリティデータ(New Parity)111がエラーを含む(データが破損している)ことを示すフラグである。
パリティビット1007は、パリティデータ(New Parity)111がパリティデータであることを示す情報であり、「1」となっている。またパリティビット1007が「0」である場合には、そのデータがパリティデータではないことを示す。つまりパリティビット(パリティビット1007及び他のデータに含まれるパリティビット)は、データがパリティデータであるか否かを示す情報である。SLU番号1008は、パリティデータ(New Parity)111が存在する論理ユニットの識別番号を示すものである。
SLU番号1008は、パリティデータ(New Parity)111の存在有無の関係無しに、論理ユニットの識別番号を示すものである。
またディスク書き込み抜け検出用カウンタ1009は、ディスクへの書き込み抜けを検知するためのカウンタである。カウンタ1010は、データブロックの位置情報(Block ID)のうち、論理ユニット内の各ブロックで異なる値をとるフィールド、そのデータブロックが論理ボリューム内の所定のブロックアドレスのデータであることをチェックするための情報である。
そしてデータ書き込み部304は、データバッファ311、パリティバッファ312に保持するデータ(New Data)108、データ(Old Data)205、パリティデータ(New Parity)111の中からどのデータがパリティデータ(New Parity)111であるか否かを判別する(ステップS703)。これはそれぞれのデータ(データ(New Data)108、データ(Old Data)205、及びパリティデータ(New Parity)111)が有するパリティビットを参照して判別する。パリティデータ(New Parity)111のパリティビット1007は「1」であり、(New Data)108、データ(Old Data)205のパリティビットは「0」であるため、データ書き込み部304はパリティデータ(New Parity)111を特定することができる。またCM103はキャッシュ309、メモリ310とは異なる記憶部(図示せず。以下、他の記憶部と呼ぶ。)にパリティデータ(New Parity)111を本来書き込むディスクが107であることを示す情報を保持している。つまりCM103は他の記憶部にパリティデータ(New Parity)111を格納すべきディスクがディスク107であることを示す情報を保持している。
データ書き込み部304がデータのパリティビットを参照して、そのデータがパリティデータ(New Parity)111でないと判別する場合(ステップS703 NO)、データ書き込み部304は次のデータのパリティビットを参照して、そのデータがパリティデータ(New Parity)111であるか否かを判別する(ステップS703)。
データ書き込み部304がデータのパリティビットを参照して、そのデータがパリティデータ(New Parity)111であると判別する場合(ステップS703 YES)、データ書き込み部304はディスク107にパリティデータ(New Parity)111を再び書き込む(ステップS704)。データ書き込み部304はパリティデータ(New Parity)111を書き込む際に、他の記憶部に保持する情報を参照し、その情報からパリティデータ(New Parity)111を格納すべきディスクがディスク107であることを特定して、ディスク107にパリティデータ(New Parity)111を書き込む。
そしてデータ生成部902は、データ(New Data)108、データ(Old Data)205、及びパリティデータ(New Parity)111の排他的論理和を計算して、データ(Old Data)206を生成し、データバッファ311に保持する(ステップS705)。そしてデータ書き戻し部306は生成したデータ(Old Data)206をディスク106に書き込む(ステップS706)。そしてメモリ開放部207は、データバッファ311からデータ(New Data)108、データ(Old Data)205、206を削除する。またメモリ開放部207はパリティバッファ312からパリティデータ(New Parity)111を削除する(ステップS707)。
RAIDリカバリ部602は、RAIDシステム100のRAIDステータス(RAID STATUS)を「exposed」から「available」に変更する(ステップS708)。RAIDリカバリ部602がRAIDステータスを「available状態」に変更することによって、RAIDシステム100はシステムが冗長構成を持つ状態に復旧したことを特定する。
またRAIDシステム100がホットスワップ機能(図示せず。)を有する場合には、RAIDリカバリ部602が以下の判別処理を行う。RAIDリカバリ部602は、ホットスワップの予備ディスク(図示せず。)が存在するか否かを判別する。そしてRAIDリカバリ部602が、RAIDシステム100に予備ディスクがあると判別する場合、RAIDリカバリ部602は予備のディスクが未使用であるか否かを判別する。そしてRAIDリカバリ部602が予備のディスクが未使用であると判別する場合には、RAIDリカバリ部602はRAID制御部601にrebuild処理を依頼する。そしてRAID制御部601は、バッファ獲得部301にバッファの確保を指示してrebuild処理を開始し、CM103は図7に示すrebuild処理を開始してパリティデータ(New Parity)111の再書き込みを行う。
(実施例2)
次に本実施例に係るCM1100を搭載したRAIDシステムについて説明する。RAIDシステムの構成は図1に示すRAIDシステム100と同様の構成であり、CM103をCM1100に置換した構成である。図11は本実施例に係るCM1100の機能ブロック図である。
(実施例2)
次に本実施例に係るCM1100を搭載したRAIDシステムについて説明する。RAIDシステムの構成は図1に示すRAIDシステム100と同様の構成であり、CM103をCM1100に置換した構成である。図11は本実施例に係るCM1100の機能ブロック図である。
[5.CM1100]
CM1100は、CPU1101、キャッシュ1102、及びメモリ1103から構成される。そしてCPU1101は、バッファ獲得部1104、データ読み出し部1105、パリティ生成部1106、データ書き込み部1107、整合判定部1108、データ書き戻し部1109、バッファ開放部1110、RAID制御部1111、RAIDリカバリ部1112、データ確認部1113、データ生成部1114、ストライプチェック部1115、パリティビットチェック部1116、及びエラー検索部1117を実行し、RAIDシステムを制御する。またCM1100は、メモリ1103上にデータバッファ1118、パリティバッファ1119、エラーバッファ1120を設けて、RAIDシステムのデータ転送制御を行う。キャッシュ1102は、ホストコンピュータから書き込み命令のあったデータ、又はホストコンピュータから読み出し命令のあったデータを一時的に保持する。CM1100は、キャッシュ1102にデータを書き込んだ段階で、ホストコンピュータに完了応答する。CM1100はキャッシュ1102を有することによって、ホストコンピュータの動作とは非同期にキャッシュ1102上のデータをディスク11201〜1204に書き込むいわゆるライトバック動作を行うことができ、高速にデータ処理をすることができる。
[5.1.バッファ獲得部1104]
CPU1101がバッファ獲得部1104を実行し、メモリ1103上でデータバッファ1118、パリティバッファ1119の獲得処理を行う。ホストコンピュータからスモールライト(Small Write)のデータ書き込み命令があると、バッファ獲得部1104は、データ(Old Data)1206とデータ(Old Parity)1207を読み出すためのデータバッファ1118、パリティバッファ1119をメモリ1103上に確保する。より具体的にはバッファ獲得部1104は、メモリ1103の一定のアドレス範囲にデータ(Old Data)1206とパリティデータ(Old Parity)1207を格納できる領域を割り当てる処理を行う。
そしてバッファ獲得部1104がメモリ1103上に獲得するデータバッファ1118の容量は、データ(Old Data)1206を格納できる最小限の容量であり、データ(Old Data)1206と同じ大きさ若しくはそれに順ずる程度の容量である。同様にバッファ獲得部1104がメモリ1103上に獲得するパリティバッファ1119の容量は、パリティデータ(Old Parity)1207を格納できる最小限の容量であり、パリティデータ(Old Parity)1207と同じ大きさ若しくはそれに順ずる程度の容量である。これはデータバッファ1118、パリティバッファ1119の容量枯渇の原因となるエラーの発生確率が低いことによる。
[5.2.データ読み出し部1105]
CPU1101がデータ読み出し部1105を実行し、データバッファ1118にデータ(Old Data)1206、パリティバッファ1119にパリティデータ(Old Parity)1207を読み出す処理を行う。バッファ獲得部1104がデータバッファ1118、パリティバッファ1119をメモリ1103上に獲得した後、データ読み出し部1105は、データバッファ1118にデータ(Old Data)1206、パリティバッファ1119にパリティデータ(Old Parity)1207を読み出す。データ読み出し部1105は、データバッファ1118にデータ(Old Data)1206、パリティバッファ1119にパリティデータ(Old Parity)1207を格納する。
[5.3.パリティ生成部1106]
CPU1101がパリティ生成部1106を実行し、パリティデータ(New Parity)1208を生成する。パリティ生成部1106は、データバッファ1118のデータ(Old Data)1206とパリティバッファ1119のパリティデータ(Old Parity)1207、キャッシュ1102のデータ(New Data)1205との排他的論理和(XOR)を計算してパリティデータ(New Parity)1208を生成する。
[5.4.データ書き込み部1107]
CPU1101がデータ書き込み部1107を実行し、ディスク1201にデータ(New Data)1205を、ディスク1204にパリティデータ(New Parity)1208を書き込む処理を試みる。正常にデータ書き込み処理部1107が書き込み処理を実行できれば、データ(New Data)1205をディスク1201、パリティデータ(New Parity)1208をディスク1204に書き込むことができる。
CM1100は、CPU1101、キャッシュ1102、及びメモリ1103から構成される。そしてCPU1101は、バッファ獲得部1104、データ読み出し部1105、パリティ生成部1106、データ書き込み部1107、整合判定部1108、データ書き戻し部1109、バッファ開放部1110、RAID制御部1111、RAIDリカバリ部1112、データ確認部1113、データ生成部1114、ストライプチェック部1115、パリティビットチェック部1116、及びエラー検索部1117を実行し、RAIDシステムを制御する。またCM1100は、メモリ1103上にデータバッファ1118、パリティバッファ1119、エラーバッファ1120を設けて、RAIDシステムのデータ転送制御を行う。キャッシュ1102は、ホストコンピュータから書き込み命令のあったデータ、又はホストコンピュータから読み出し命令のあったデータを一時的に保持する。CM1100は、キャッシュ1102にデータを書き込んだ段階で、ホストコンピュータに完了応答する。CM1100はキャッシュ1102を有することによって、ホストコンピュータの動作とは非同期にキャッシュ1102上のデータをディスク11201〜1204に書き込むいわゆるライトバック動作を行うことができ、高速にデータ処理をすることができる。
[5.1.バッファ獲得部1104]
CPU1101がバッファ獲得部1104を実行し、メモリ1103上でデータバッファ1118、パリティバッファ1119の獲得処理を行う。ホストコンピュータからスモールライト(Small Write)のデータ書き込み命令があると、バッファ獲得部1104は、データ(Old Data)1206とデータ(Old Parity)1207を読み出すためのデータバッファ1118、パリティバッファ1119をメモリ1103上に確保する。より具体的にはバッファ獲得部1104は、メモリ1103の一定のアドレス範囲にデータ(Old Data)1206とパリティデータ(Old Parity)1207を格納できる領域を割り当てる処理を行う。
そしてバッファ獲得部1104がメモリ1103上に獲得するデータバッファ1118の容量は、データ(Old Data)1206を格納できる最小限の容量であり、データ(Old Data)1206と同じ大きさ若しくはそれに順ずる程度の容量である。同様にバッファ獲得部1104がメモリ1103上に獲得するパリティバッファ1119の容量は、パリティデータ(Old Parity)1207を格納できる最小限の容量であり、パリティデータ(Old Parity)1207と同じ大きさ若しくはそれに順ずる程度の容量である。これはデータバッファ1118、パリティバッファ1119の容量枯渇の原因となるエラーの発生確率が低いことによる。
[5.2.データ読み出し部1105]
CPU1101がデータ読み出し部1105を実行し、データバッファ1118にデータ(Old Data)1206、パリティバッファ1119にパリティデータ(Old Parity)1207を読み出す処理を行う。バッファ獲得部1104がデータバッファ1118、パリティバッファ1119をメモリ1103上に獲得した後、データ読み出し部1105は、データバッファ1118にデータ(Old Data)1206、パリティバッファ1119にパリティデータ(Old Parity)1207を読み出す。データ読み出し部1105は、データバッファ1118にデータ(Old Data)1206、パリティバッファ1119にパリティデータ(Old Parity)1207を格納する。
[5.3.パリティ生成部1106]
CPU1101がパリティ生成部1106を実行し、パリティデータ(New Parity)1208を生成する。パリティ生成部1106は、データバッファ1118のデータ(Old Data)1206とパリティバッファ1119のパリティデータ(Old Parity)1207、キャッシュ1102のデータ(New Data)1205との排他的論理和(XOR)を計算してパリティデータ(New Parity)1208を生成する。
[5.4.データ書き込み部1107]
CPU1101がデータ書き込み部1107を実行し、ディスク1201にデータ(New Data)1205を、ディスク1204にパリティデータ(New Parity)1208を書き込む処理を試みる。正常にデータ書き込み処理部1107が書き込み処理を実行できれば、データ(New Data)1205をディスク1201、パリティデータ(New Parity)1208をディスク1204に書き込むことができる。
しかしながら、ディスクへのタイミングの不一致、ディスク107へのゴミの混入などの原因により、データ書き込み部1107はデータ(New Data)1205をディスク1201に書き込むことができるが、パリティデータ(New Parity)1208をディスク1204に書き込むことができない場合が発生する。
本実施例に係るCM1100は、ディスク1204へ書き込み失敗したパリティデータ(New Parity)1208をパリティバッファ1119から開放し、パリティバッファ1119を開放するため以下の処理を行う。
バッファ獲得部1104がエラーバッファ1120をメモリ上に獲得する。そしてデータ書き込み部1107はエラーバッファ1120に書き込みエラーしたストライプ番号(stripe_no)1209、ディスク番号(Disk_no)1210、パリティビット(parity_bit)1211を書き込む。ストライプ番号1209、ディスク番号1210、パリティビット1211は、ディスク1201〜1204においてストライプを構成する複数のデータを読み出すためのトリガー情報である。ストライプ番号1209は、データ書き込み部1107が書き込みエラーしたパリティデータ(New Parity)1208の属するストライプの番号である。ディスク番号1210は、データ書き込む部1107がパリティデータ(New Parity)1208を書き込みエラーしたディスク1204を識別する番号である。またパリティビット1211は、パリティ生成部1106が新たにパリティデータ(New Parity)1208を生成する必要があるか否かを示す情報である。データ書き込み部1107がパリティデータ(New Parity)1208を書き込みエラーした場合には、パリティビットを「0」とする。
[5.5.整合判定部1108]
CPU1101が整合判定部1108を実行し、ディスク1204に格納されるパリティデータを読み出して、パリティバッファ1119に格納するパリティデータ(New Parity)1208とディスク1204に格納するパリティデータとを比較する。パリティバッファ1208に格納するパリティデータ(New Parity)1208とディスク1204に格納するパリティデータとを比較した結果、整合判定部1108がパリティデータ(New Parity)1208とディスク1204に格納するパリティデータが一致しないと判定する場合、データ書き込み部1107がパリティデータ(New Parity)1208をディスク1204に書き込むことができなかったと判定する。またパリティバッファ1119に格納するパリティデータ(New Parity)1208とディスク1204に格納するパリティデータとを比較した結果、整合判定部1108がパリティデータ(New Parity)1208とディスク1204に格納するパリティデータが一致すると判定する場合、データ書き込み部1107がパリティデータ(New Parity)1208をディスク1204に書き込むことができたと判定する。
[5.6.データ書き戻し部1109]
CPU1101がデータ書き戻し部1109を実行し、ディスク1201〜1204からデータ、パリティデータをデータバッファ、パリティバッファ、またはキャッシュ1102に書き戻す。
[5.7.バッファ開放部1110]
CPU1101がバッファ開放部1110を実行し、パリティバッファ1119に格納するパリティデータ(New Parity)1208を削除する。
[5.5.整合判定部1108]
CPU1101が整合判定部1108を実行し、ディスク1204に格納されるパリティデータを読み出して、パリティバッファ1119に格納するパリティデータ(New Parity)1208とディスク1204に格納するパリティデータとを比較する。パリティバッファ1208に格納するパリティデータ(New Parity)1208とディスク1204に格納するパリティデータとを比較した結果、整合判定部1108がパリティデータ(New Parity)1208とディスク1204に格納するパリティデータが一致しないと判定する場合、データ書き込み部1107がパリティデータ(New Parity)1208をディスク1204に書き込むことができなかったと判定する。またパリティバッファ1119に格納するパリティデータ(New Parity)1208とディスク1204に格納するパリティデータとを比較した結果、整合判定部1108がパリティデータ(New Parity)1208とディスク1204に格納するパリティデータが一致すると判定する場合、データ書き込み部1107がパリティデータ(New Parity)1208をディスク1204に書き込むことができたと判定する。
[5.6.データ書き戻し部1109]
CPU1101がデータ書き戻し部1109を実行し、ディスク1201〜1204からデータ、パリティデータをデータバッファ、パリティバッファ、またはキャッシュ1102に書き戻す。
[5.7.バッファ開放部1110]
CPU1101がバッファ開放部1110を実行し、パリティバッファ1119に格納するパリティデータ(New Parity)1208を削除する。
またバッファ開放部1110は、データバッファ1118に格納するデータ(Old Data)1206を削除する。またバッファ開放部1110は、キャッシュ1102に格納するデータ(New Data)1205を削除する。
またバッファ開放部1110は、エラーしたストライプが復旧した場合にはエラーバッファ1120を開放する。
なお本実施例において「データバッファ1118、パリティバッファ1119、エラーバッファ1120、及びキャッシュ1102を開放する」は、データバッファ1118、パリティバッファ1119、キャッシュ1102に格納されるデータを削除することを意味し、メモリ1103、キャッシュ1102を他のデータを保持して使用できるようにすることを意味する。
[5.8.RAID制御部1111]
RAID制御部1111は、RAIDリカバリ部1112からrebuild処理の依頼を受信すると、RAID制御部1111はバッファ獲得部1104にバッファの確保を指示してrebuild処理を開始する。
[5.9.RAIDリカバリ部1112]
パリティデータ(New Parity)111の書き込みに失敗したディスク107が復旧すると、CPU1101がRAIDリカバリ部1112を実行し、RAIDリカバリ部1112はRAID制御部1111にrebuild処理を依頼する。rebuild処理は、RAIDシステムにおける冗長構成でない状態(exposed状態)から冗長構成の状態(available状態)に復旧する処理である。
[5.10.データ確認部1113]
CPU1100がデータ確認部1113を実行し、BCCを参照して、データブロックの論理的な正当性を確認する。
[5.11.データ生成部1114]
CPU1101がデータ生成部1114を実行し、データ(New Data)1206、データ(Old Data)1302、1303の排他的論理和を計算して、パリティデータ(New Parity)1208を生成する。データ生成部1114は、RAID制御部1111が実行する復旧処理(rebuild処理)に基づいて、パリティデータ(New Parity)1208を生成する。
[5.12.ストライプチェック部1115]
CPU1101がストライプチェック部1115を実行し、ホストコンピュータから新たに書き込み命令又は読み出し命令のあったデータのストライプ番号をチェックする。具体的にはストライプチェック部1115は、エラーバッファ1120に格納するストライプ番号1209とホストコンピュータから新たに書き込み命令又は読み出し命令のあったデータのストライプ番号を比較して、一致するか否かを判別する。メモリ1103上にエラーバッファ1120がない場合、またストライプチェック部1115がエラーバッファ1120にストライプ番号1209がないと判別する場合には、ホストコンピュータから新たに書き込み命令又は読み出し命令のあったデータのストライプ番号をチェックしない。
[5.8.RAID制御部1111]
RAID制御部1111は、RAIDリカバリ部1112からrebuild処理の依頼を受信すると、RAID制御部1111はバッファ獲得部1104にバッファの確保を指示してrebuild処理を開始する。
[5.9.RAIDリカバリ部1112]
パリティデータ(New Parity)111の書き込みに失敗したディスク107が復旧すると、CPU1101がRAIDリカバリ部1112を実行し、RAIDリカバリ部1112はRAID制御部1111にrebuild処理を依頼する。rebuild処理は、RAIDシステムにおける冗長構成でない状態(exposed状態)から冗長構成の状態(available状態)に復旧する処理である。
[5.10.データ確認部1113]
CPU1100がデータ確認部1113を実行し、BCCを参照して、データブロックの論理的な正当性を確認する。
[5.11.データ生成部1114]
CPU1101がデータ生成部1114を実行し、データ(New Data)1206、データ(Old Data)1302、1303の排他的論理和を計算して、パリティデータ(New Parity)1208を生成する。データ生成部1114は、RAID制御部1111が実行する復旧処理(rebuild処理)に基づいて、パリティデータ(New Parity)1208を生成する。
[5.12.ストライプチェック部1115]
CPU1101がストライプチェック部1115を実行し、ホストコンピュータから新たに書き込み命令又は読み出し命令のあったデータのストライプ番号をチェックする。具体的にはストライプチェック部1115は、エラーバッファ1120に格納するストライプ番号1209とホストコンピュータから新たに書き込み命令又は読み出し命令のあったデータのストライプ番号を比較して、一致するか否かを判別する。メモリ1103上にエラーバッファ1120がない場合、またストライプチェック部1115がエラーバッファ1120にストライプ番号1209がないと判別する場合には、ホストコンピュータから新たに書き込み命令又は読み出し命令のあったデータのストライプ番号をチェックしない。
換言すれば、データ書き込み部1107がデータ(New Data)1205又はパリティデータ(New Parity)1208の書き込みを失敗した後に、新たにデータ書き込み部1107がデータ(New Data)1301をディスク1202に書き込む場合に、ストライプチェック部1115がデータ(New Data)1301を書き込むストライプをチェックする。
[5.13.パリティビットチェック部1116]
CPU1101がパリティビットチェック部1116を実行し、エラーバッファ1120にあるパリティビット1211をチェックする。
[5.13.パリティビットチェック部1116]
CPU1101がパリティビットチェック部1116を実行し、エラーバッファ1120にあるパリティビット1211をチェックする。
本実施例においてデータ書き込み部1107はパリティビット1211を、以下の場合に立てる(パリティビットを「1」とする。)。データ書き込み部1107がパリティビット1211を立てる場合は、データ書き込み部1107がデータ(New Data)1205を書き込み失敗して、データ書き込み部1107がパリティデータ(New Parity)1208を書き込み成功した場合である。データ書き込み部1107がパリティデータ(New Parity)1208を書き込み成功して、データ書き込み部1107がデータ(New Data)1205を書き込み成功した場合には、パリティビット1211を立てない(パリティビットを「0」とする。)。
パリティビットチェック部1116は、パリティビット1211をチェックして、CM1100は書き込みを失敗したデータがデータ(New Data)1205であるかパリティデータ(New Parity)1208であるかを判別することができる。[5.14.エラー検索部1117]
CPU1101がエラー検索部1117を実行し、ディスク1201〜1204を構成するストライプにおいてエラーがあるか否かを判別する。エラー検索部1117はエラーバッファ1120に保持するディスク番号1210とデータを書き込み又は読み出すディスクを示すディスク番号を比較して、データを書き込む又は読み出すストライプにエラーがあるか否かを判別する。[6.パリティバッファ1119の容量の枯渇制御に関するフローチャート]
図14は本実施例に係るCM1100が処理するパリティバッファ312の容量枯渇の制御に関するフローチャートである。
CPU1101がエラー検索部1117を実行し、ディスク1201〜1204を構成するストライプにおいてエラーがあるか否かを判別する。エラー検索部1117はエラーバッファ1120に保持するディスク番号1210とデータを書き込み又は読み出すディスクを示すディスク番号を比較して、データを書き込む又は読み出すストライプにエラーがあるか否かを判別する。[6.パリティバッファ1119の容量の枯渇制御に関するフローチャート]
図14は本実施例に係るCM1100が処理するパリティバッファ312の容量枯渇の制御に関するフローチャートである。
ホストコンピュータからスモールライト(Small Write)のデータ書き込み命令があると、バッファ獲得部1104は、データ(Old Data)1206とデータ(Old Parity)1207を読み出すためのデータバッファ1118、パリティバッファ1119をメモリ1103上に確保する(ステップS1401)。
バッファ獲得部1104がデータバッファ1118、パリティバッファ1119をメモリ1103上に獲得した後、データ読み出し部1105は、データバッファ1118にデータ(Old Data)1206、パリティバッファ1119にパリティデータ(Old Parity)1207を読み出す。データバッファ1118はデータ(Old Data)1206を、パリティバッファ1119はパリティデータ(Old Parity)1207を保持する(ステップS1402)。
パリティ生成部1106は、データバッファ1118のデータ(Old Data)1206とパリティバッファ1119のパリティデータ(Old Parity)1207の排他的論理和(XOR)、及びキャッシュ1102に保持するデータ(New Data)1205との排他的論理和(XOR)を計算してパリティデータ(New Parity)1208を生成する(ステップS1403)。
そしてデータ書き込み部1107は、データ(New Data)1205をディスク1201、パリティデータ(New Parity)1208をディスク1204に書き込みトライする(ステップS1404)。整合判定部1108はパリティデータ(New Parity)1208をディスク1204に書き込みできたか否かを判別する(ステップS1405)。整合判定部1108は、ディスク1204に格納されるパリティデータを読み出す。そして整合判定部1108は、パリティバッファ1119に格納するパリティデータ(New Parity)1208とディスク1204に格納するパリティデータとを比較する。パリティバッファ1119に格納するパリティデータ(New Parity)1208とディスク1204に格納するパリティデータとを比較した結果、整合判定部1108がパリティデータ(New Parity)1208とディスク1204に格納するパリティデータが一致しないと判定する場合、データ書き込み部1107がパリティデータ(New Parity)1208をディスク1204に書き込むことができなかったと判定する(ステップS1405 NO)。またパリティバッファ1119に格納するパリティデータ(New Parity)1208とディスク1204に格納するパリティデータとを比較した結果、整合判定部1108がパリティデータ(New Parity)1208とディスク1204に格納するパリティデータが一致すると判定する場合、データ書き込み部1107がパリティデータ(New Parity)1208をディスク1204に書き込むことができたと判定する(ステップS1405 YES)。
データ書き込み部1107がデータ(New Data)1205をディスク1201、パリティデータ(New Parity)1208をディスク1204に書き込むことができたと判別する場合(ステップS1405 YES)、バッファ開放部1104は、パリティバッファ1119に格納するパリティデータ(New Parity)1208、及びデータバッファ1118に格納するデータ(Old Data)1206を削除する。CM1100はデータの書き込み処理を正常に終了する。データ書き込み部1107がパリティデータ(New Parity)1208をディスク1204に書き込むことができなかったと判別する場合(ステップS1405 NO)、バッファ獲得部1104は、エラーバッファ1120を獲得する(ステップS1406)し、バッファ開放部1110はデータバッファ1118、パリティバッファ1119を開放する。
そして新たにデータ書き込み部1107がデータ(New Data)1301をディスク1202に書き込む場合に、ストライプチェック部1115がデータ(New Data)1301を書き込むストライプがデータを書き込み失敗したストライプであるか否かを判別する(ステップS1408)。
ストライプチェック部1115は、データ(New Data)1301を書き込むストライプがデータの書き込みを失敗したストライプでない場合(ステップS1408 NO)、CM1100はパリティバッファ312の容量枯渇の制御処理を正常に終了する。
ストライプチェック部1115は、データ(New Data)1301を書き込むストライプがデータの書き込みを失敗したストライプである場合(ステップS1408 YES)、パリティビットチェック部1116はエラーバッファ1120に保持するパリティビット1211をチェックする(ステップS1409)。
パリティビットチェック部1116がパリティビット1211は「0」であると判別する場合(ステップS1409 NO)、データ書き込み部1107はデータ(New Data)1301をディスク1202に書き込む(ステップS1410)。
パリティビットチェック部1116がパリティビット1211は「1」であると判別する場合(ステップS1409 YES)、CM1100は図22に記載のバッファ容量の枯渇制御を行う。
上記図14のフローチャートに示すバッファ容量の枯渇制御を図解すると図12、13のように表すことができる。図12はCM1100におけるパリティバッファ1119の開放を示す図である。また図13はCM1100におけるデータ(New Data)1301のディスク1202への書き込みを示す図である。
また図15はCM1100におけるディスク1202からのデータの読み出しを示す図である。
データ書き込み部1107がパリティデータ(New Parity)1208をディスク1204に書き込み失敗した場合に、ホストコンピュータから読み出し命令のあると、ストライプチェック部1115は読み出し命令のあったデータのストライプ番号とエラーバッファ1120に保持されるストライプ番号1209を比較する。そしてストライプ番号が一致したら、パリティビットチェック部1116は、エラーバッファ1120のパリティビット1211をチェックする。パリティビットが「0」である場合には、データ書き戻し部1109は、読み出し命令のあったデータをキャッシュ1106に読み出す。
[7.rebuild処理に関するフローチャート]
図18は本実施例に係るrebuild処理に関するフローチャートである。
[7.rebuild処理に関するフローチャート]
図18は本実施例に係るrebuild処理に関するフローチャートである。
CM1100がrebuild処理を行う場合、RAIDリカバリ部1112は、RAID制御部1111にrebuild処理を依頼する。
RAID制御部1111は、エラーバッファ1120のストライプ番号1209、ディスク番号1210を参照する(ステップS1801)。これはCM1100がどのストライプにおけるどのディスクにおいて書き込み失敗したかを検索するためである。
バッファ獲得部1104は、データバッファ1801、パリティバッファ1802をバッファ1103上に獲得する(ステップS1802)。
データ書き戻し部1109は、ディスク番号1210が示すディスク以外のディスクからデータをデータバッファ1801、パリティバッファ1802から読み出す(ステップS1803)。本実施例ではデータ書き込み部1107がディスク1204へパリティデータ(New Parity)1208を書き込み失敗している。そのため図17に記載するように、データ書き戻し部1109は、ディスク1201からデータ(New Data)1205、ディスク1202からデータ(New Data)1301、ディスク1203からデータ(Old Data)1303をデータバッファ1801に書き戻す。
パリティ生成部1106は、データ(New Data)1205、データ(New Data)1301、及びデータ(Old Data)1303の排他的論理和を計算してパリティデータ(New Parity)1803を生成し、パリティデータ(New Parity)1803をパリティバッファ1802に格納する(ステップS1804)。
データ書き込み部1107は、パリティデータ(New Parity)1803をディスク1204に書き込む(ステップS1805)。
バッファ開放部1110は、データバッファ1801、パリティバッファ1802を開放する(ステップS1806)。
さらにバッファ開放部1110は、エラーバッファ1120を開放して(ステップS1807)、CM1100はrebuild処理を終了する。
上記図18のフローチャートに示すrebuild処理を図解すると図16、17のように表すことができる。図16はRAIDリカバリ部1112がRAID制御部1111にrebuild処理の依頼を示す図である。図17は、エラーバッファ1120の開放を示す図である。
[8.データバッファ1118の容量の枯渇制御に関するフローチャート]
図21は本実施例に係るデータバッファ1118の容量の枯渇制御に関するフローチャートである。
図21は本実施例に係るデータバッファ1118の容量の枯渇制御に関するフローチャートである。
CM1100がデータ(New Data)1205をディスク1201に書き込み失敗し、パリティデータ(New Parity)1208を書き込み成功した場合に、CM1100が図21に記載のフローチャートの処理を実行する。
図19は、CM1100がデータ(New Data)1205をディスク1201に書き込み失敗し、パリティデータ(New Parity)1208を書き込み成功した場合を示す図である。
ホストコンピュータからスモールライト(Small Write)のデータ書き込み命令があると、バッファ獲得部1104は、データ(Old Data)1206とデータ(Old Parity)1207を読み出すためのデータバッファ1118、パリティバッファ1103をメモリ1103上に確保する。
データ読み出し部1105は、データバッファ1118にデータ(Old Data)1206、パリティバッファ1119にパリティデータ(Old Parity)1207を読み出す。データバッファ1118はデータ(Old Data)1206を、パリティバッファ1119はパリティデータ(Old Parity)1207を保持する。
パリティ生成部1106は、データ(Old Data)1206とパリティデータ(Old Parity)1207の排他的論理和(XOR)、及びデータ(New Data)1205との排他的論理和(XOR)を計算してパリティデータ(New Parity)1208を生成する。
データ書き込み部1107は、データ(New Data)1205をディスク1201、パリティデータ(New Parity)1208をディスク1204に書き込みトライする(ステップS1404)。整合判定部1108が、データ(New Data)1206をディスク1201に書き込むことができなかったと判定する場合、バッファ獲得部1104はエラーバッファ1120を獲得して、書き込みエラーしたストライプ番号2001、ディスク番号2002、及びパリティビット2003を格納する。バッファ開放部1110はデータバッファ1118、パリティバッファ1119を開放する。
そしてCM1100は、図21に記載の処理フローを実行する。CM1100は、ホストコンピュータから書き込み命令のあったデータ(New Data)2101をディスク1202に書き込む処理を実行する。
パリティビットチェック部1116がパリティビット1211は「1」であると判別する場合(ステップS1409 YES)、CM1100は図22に記載のバッファ容量の枯渇制御を行う。
まずバッファ獲得部1104は、データバッファ2103、パリティバッファ2104をメモリ1103上に確保する(ステップS2101)。
エラー検索部1117はデータ(New Data)2101のディスク番号とエラーバッファ1120に保持するディスク番号1210を比較する(ステップS2102)。エラー検索部1117はデータ(New Data)2101のディスク番号とディスク番号1210が一致するか否かを判別する。
エラー検索部1117はデータ(New Data)2101のディスク番号とディスク番号1210が一致すると判別する場合(ステップS2202 YES)、データ書き戻し部1109は、ディスク番号1210が示すディスク以外のディスクからデータ、パリティデータをデータバッファ2103、パリティバッファ2104から読み出す(ステップS2103)。パリティ生成部1106は読み出したデータとデータ(New Data)2101の排他的論理和を計算して、パリティデータ(New Parity)2102を生成する(ステップS2104)。データ書き込み部1107はパリティデータ(New Parity)2102をディスク1204に書き込む(ステップS2105)。
またエラー検索部1117がデータ(New Data)2101のディスク番号とディスク番号1210が一致しない場合(ステップS2102 NO)、データ書き戻し部1109はディスク1203からデータ(Old Data)1303をデータバッファ2103に読み出す。さらにデータ書き戻し部1109はディスク1204からパリティデータ(New Parity)1208をパリティバッファ2104に読み出す(ステップS2106)。パリティ生成部1106はデータ(New Data)2101、データ(Old Data)1303、及びパリティデータ(New Parity)1208の排他的論理和を計算してパリティデータ(New Parity)2102を生成する(ステップS2107)。そしてデータ書き込み部1107はデータ(New Data)2101をディスク1202に書き込み、パリティデータ(New Parity)2102をディスク1204に書き込む(ステップS2108)。
上記図21のフローチャートに示すバッファ容量の枯渇制御を図解すると図19、図20のように表すことができる。図19はCM1100におけるデータバッファ1118の開放を示す図である。また図20はCM1100におけるデータ(New Data)2101のディスク1202への書き込みを示す図である。
[9.データバッファ1118の容量の枯渇制御に関するフローチャート]
図23は本実施例に係るディスク1202に格納されるデータ(Old Data)1302を読み出すフローチャートである。
図23は本実施例に係るディスク1202に格納されるデータ(Old Data)1302を読み出すフローチャートである。
図23は、書き込みエラーしているストライプに対してホストコンピュータからデータの読み出し命令があった場合、CM1100が処理するフローチャートの図である。
ストライプチェック部1115は、データ書き戻し部1109が読み出したデータ(Old Data)2301が属するストライプ番号をチェックする(ステップS2301)。ストライプチェック部1115は、データ(Old Data)2301が属するストライプ番号とエラーバッファ2305に保持するストライプ番号2302を比較して一致するか否かを判別する。
ストライプチェック部1115が、データ(Old Data)2301が属するストライプ番号とストライプ番号2302が一致しないと判別する場合(ステップS2301 NO)、CM1100はデータ読み出し処理を正常に終了する。ストライプチェック部1115がデータ(Old Data)2301が属するストライプ番号とストライプ番号2302が一致すると判別する場合(ステップS2301 YES)、パリティビットチェック部2402はエラーバッファ2305に保持するパリティビット2304をチェックする(ステップS2302)。パリティビットチェック部2402が、パリティビット2304が「0」であると判別する場合(ステップS2302 NO)、データ書き戻し部1109は、データ(Old Data)2301をキャッシュ1102に読み出し、読み出し処理を正常に終了する(ステップS2303)。パリティビットチェック部2402が、パリティビット2304が「1」であると判別する場合(ステップS2302 YES)、エラー検索部1117はデータ(Old Data)2301を格納していたディスクのディスク番号をチェックする(ステップS2304)。エラー検索部1117はデータ(Old Data)2301を格納していたディスクのディスク番号とエラーバッファ2305に保持するディスク番号2303が一致するか否かを判別する。
エラー検索部1117がデータ(Old Data)2301を格納していたディスクのディスク番号とディスク番号2303が一致しないと判別する場合(ステップS2304 NO)、データ書き戻し部1109はデータ(Old Data)2301をキャッシュ1102に書き戻す(ステップS2305)。エラー検索部1117がデータ(Old Data)2301を格納していたディスクのディスク番号とディスク番号2303が一致すると判別する場合(ステップS2304 YES)、バッファ獲得部1104はデータバッファ、パリティバッファを確保する(ステップS2306)。データ書き戻し部1109はディスク番号2303以外のディスクからデータをデータバッファ、パリティバッファに書き戻す(ステップS2307)。例えば図22に示すようにディスク番号2301はディスク1202を示すので、データ書き戻し部1109はディスク1201、1203、1204よりデータ、パリティデータをそれぞれデータバッファ、パリティバッファに読み出す。
そしてパリティ生成部1106は、データバッファ、パリティバッファに読み出したデータ、パリティデータの排他的論理和を計算してデータ(New Data)2306を生成する(ステップS2308)。上記図23のフローチャートに示すデータ(Old Data)1302の読み出しを図解すると図22のように表すことができる。
101…ホストコンピュータ
102…チャネルアダプタ(CA)
103…コントローラモジュール(CM)
104…ディスク
105…ディスク
106…ディスク
107…ディスク
108…データ(New Data)
109…データ(Old Data)
110…パリティデータ(Old Parity)
111…パリティデータ(New Parity)
200…データテーブル
301…バッファ獲得部
302…データ読み出し部
303…パリティ生成部
304…データ書き込み部
305…整合判定部
306…データ書き戻し部
307…メモリ開放部
601…RAID制御部
602…RAIDリカバリ部
901…データ確認部
902…データ生成部
102…チャネルアダプタ(CA)
103…コントローラモジュール(CM)
104…ディスク
105…ディスク
106…ディスク
107…ディスク
108…データ(New Data)
109…データ(Old Data)
110…パリティデータ(Old Parity)
111…パリティデータ(New Parity)
200…データテーブル
301…バッファ獲得部
302…データ読み出し部
303…パリティ生成部
304…データ書き込み部
305…整合判定部
306…データ書き戻し部
307…メモリ開放部
601…RAID制御部
602…RAIDリカバリ部
901…データ確認部
902…データ生成部
Claims (4)
- データを記憶する複数の記憶部に接続され、第1の格納領域と第2の格納領域を有する管理装置の制御方法において、
該記憶部に記憶するためのデータを該第1の格納領域に保持し、
該記憶部に記憶するためのデータから生成したパリティデータを該第2の格納領域に保持し、
該パリティデータを該記憶部に書き込み処理し、該第2の格納領域に保持した該パリティデータと該記憶部に保持されたパリティデータを比較し、
該第2の格納領域に保持した該パリティデータと該記憶部に保持されたパリティデータが異なる場合、該第2の格納領域に保持した該パリティデータが、該複数の記憶部においてストライプを構成する複数のデータを読み出すためのトリガー情報を該第2の格納領域に保持し、
該パリティデータを再び該記憶部に書き込み処理するときに、該トリガー情報を参照して該複数のデータを読み出して、該パリティデータを再び生成して該記憶部に書き込む
ことを特徴とする制御方法。 - 請求項1に記載の制御方法において、
該トリガー情報は、該記憶部における該パリティデータを書き込むストライプを示す情報を含むことを特徴とする制御方法。 - 請求項1に記載の制御方法において、
該第2の格納領域に保持した該パリティデータのストライプに新たなデータの書き込み処理があった場合、該新たなデータを用いて新たなパリティデータを生成し、該記憶部に書き込むことを特徴とする制御方法。 - データを記憶する複数の記憶部と、
該記憶部に記憶するための該データを保持する第1の格納領域と、
該記憶部に記憶するためのデータから生成したパリティデータを保持する第2の格納領域と、
該パリティデータを該記憶部に書き込み処理し、該第2の格納領域に保持した該パリティデータと該記憶部に保持されたパリティデータを比較し、該第2の格納領域に保持した該パリティデータと該記憶部に保持されたパリティデータが異なる場合、該第2の格納領域に保持した該パリティデータが、該複数の記憶部においてストライプを構成する複数のデータを読み出すためのトリガー情報を該第2の格納領域に保持し、該パリティデータを再び該記憶部に書き込み処理するときに、該トリガー情報を参照して該複数のデータを読み出して、該パリティデータを再び生成して該記憶部に書き込む制御部と、
を備えることを特徴とするディスクアレイ装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008154768A JP5286956B2 (ja) | 2008-06-13 | 2008-06-13 | 制御方法、ディスクアレイ装置 |
US12/480,851 US8225136B2 (en) | 2008-06-13 | 2009-06-09 | Control method and storage device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008154768A JP5286956B2 (ja) | 2008-06-13 | 2008-06-13 | 制御方法、ディスクアレイ装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2009301303A JP2009301303A (ja) | 2009-12-24 |
JP5286956B2 true JP5286956B2 (ja) | 2013-09-11 |
Family
ID=41415857
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008154768A Expired - Fee Related JP5286956B2 (ja) | 2008-06-13 | 2008-06-13 | 制御方法、ディスクアレイ装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8225136B2 (ja) |
JP (1) | JP5286956B2 (ja) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7930586B1 (en) * | 2008-02-07 | 2011-04-19 | At&T Intellectual Property Ii, L.P. | Error rate reduction for memory arrays |
CN101615145B (zh) * | 2009-07-24 | 2011-12-07 | 中兴通讯股份有限公司 | 一种提高存储器数据缓存可靠性的方法和装置 |
US8812798B2 (en) * | 2011-08-18 | 2014-08-19 | International Business Machines Corporation | Indication of a destructive write via a notification from a disk drive that emulates blocks of a first block size within blocks of a second block size |
US9053809B2 (en) * | 2011-11-09 | 2015-06-09 | Apple Inc. | Data protection from write failures in nonvolatile memory |
JP2013131192A (ja) * | 2011-12-22 | 2013-07-04 | Fujitsu Ltd | ストレージ装置及びストレージ装置の制御方法 |
WO2013160970A1 (en) * | 2012-04-27 | 2013-10-31 | Hitachi, Ltd. | Storage system and storage control apparatus |
CN103823637B (zh) * | 2013-11-29 | 2017-07-07 | 华为技术有限公司 | 一种数据处理方法及设备 |
US10353606B2 (en) | 2017-10-12 | 2019-07-16 | International Business Machines Corporation | Partial data replay in a distributed memory buffer system |
US10929226B1 (en) | 2017-11-21 | 2021-02-23 | Pure Storage, Inc. | Providing for increased flexibility for large scale parity |
US10872010B2 (en) | 2019-03-25 | 2020-12-22 | Micron Technology, Inc. | Error identification in executed code |
CN113883691B (zh) * | 2021-10-26 | 2023-02-17 | Tcl空调器(中山)有限公司 | 空调器参数的读取方法、装置、空调器和存储介质 |
Family Cites Families (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5301297A (en) * | 1991-07-03 | 1994-04-05 | Ibm Corp. (International Business Machines Corp.) | Method and means for managing RAID 5 DASD arrays having RAID DASD arrays as logical devices thereof |
US5313585A (en) * | 1991-12-17 | 1994-05-17 | Jeffries Kenneth L | Disk drive array with request fragmentation |
US5708668A (en) * | 1992-05-06 | 1998-01-13 | International Business Machines Corporation | Method and apparatus for operating an array of storage devices |
US5598549A (en) * | 1993-06-11 | 1997-01-28 | At&T Global Information Solutions Company | Array storage system for returning an I/O complete signal to a virtual I/O daemon that is separated from software array driver and physical device driver |
US5504858A (en) * | 1993-06-29 | 1996-04-02 | Digital Equipment Corporation | Method and apparatus for preserving data integrity in a multiple disk raid organized storage system |
US5390327A (en) * | 1993-06-29 | 1995-02-14 | Digital Equipment Corporation | Method for on-line reorganization of the data on a RAID-4 or RAID-5 array in the absence of one disk and the on-line restoration of a replacement disk |
US5774643A (en) * | 1995-10-13 | 1998-06-30 | Digital Equipment Corporation | Enhanced raid write hole protection and recovery |
US5822584A (en) * | 1995-10-13 | 1998-10-13 | Compaq Computer Corporation | User selectable priority for disk array background operations |
US6067635A (en) * | 1995-10-27 | 2000-05-23 | Lsi Logic Corporation | Preservation of data integrity in a raid storage device |
US5742752A (en) * | 1995-12-29 | 1998-04-21 | Symbios Logic Inc. | Method for performing a RAID stripe write operation using a drive XOR command set |
US5720025A (en) * | 1996-01-18 | 1998-02-17 | Hewlett-Packard Company | Frequently-redundant array of independent disks |
US5805788A (en) * | 1996-05-20 | 1998-09-08 | Cray Research, Inc. | Raid-5 parity generation and data reconstruction |
US6151641A (en) * | 1997-09-30 | 2000-11-21 | Lsi Logic Corporation | DMA controller of a RAID storage controller with integrated XOR parity computation capability adapted to compute parity in parallel with the transfer of data segments |
US6233696B1 (en) * | 1997-12-31 | 2001-05-15 | Emc Corporation | Data verification and repair in redundant storage systems |
US6725392B1 (en) * | 1999-03-03 | 2004-04-20 | Adaptec, Inc. | Controller fault recovery system for a distributed file system |
US6665773B1 (en) * | 2000-12-26 | 2003-12-16 | Lsi Logic Corporation | Simple and scalable RAID XOR assist logic with overlapped operations |
JP3590015B2 (ja) | 2001-11-30 | 2004-11-17 | 株式会社東芝 | ディスクアレイ装置および冗長データをもつ論理ドライブの一貫性回復方法 |
JP3682256B2 (ja) * | 2001-11-30 | 2005-08-10 | 株式会社東芝 | ディスクアレイ装置及び同装置におけるパリティ処理方法 |
JP2006079380A (ja) * | 2004-09-10 | 2006-03-23 | Hitachi Ltd | ディスクアレイ装置 |
US7392458B2 (en) * | 2004-11-19 | 2008-06-24 | International Business Machines Corporation | Method and system for enhanced error identification with disk array parity checking |
JP4435705B2 (ja) | 2005-03-14 | 2010-03-24 | 富士通株式会社 | 記憶装置、その制御方法及びプログラム |
JP4754852B2 (ja) * | 2005-03-15 | 2011-08-24 | 富士通株式会社 | ストレージ制御装置および方法 |
US7305579B2 (en) * | 2005-03-22 | 2007-12-04 | Xiotech Corporation | Method, apparatus and program storage device for providing intelligent rebuild order selection |
JP3699473B2 (ja) * | 2005-03-30 | 2005-09-28 | 富士通株式会社 | ディスクアレイ装置 |
US7644303B2 (en) * | 2005-10-07 | 2010-01-05 | Agere Systems Inc. | Back-annotation in storage-device array |
US7752489B2 (en) * | 2007-05-10 | 2010-07-06 | International Business Machines Corporation | Data integrity validation in storage systems |
-
2008
- 2008-06-13 JP JP2008154768A patent/JP5286956B2/ja not_active Expired - Fee Related
-
2009
- 2009-06-09 US US12/480,851 patent/US8225136B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US8225136B2 (en) | 2012-07-17 |
JP2009301303A (ja) | 2009-12-24 |
US20090313498A1 (en) | 2009-12-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5286956B2 (ja) | 制御方法、ディスクアレイ装置 | |
US10417124B2 (en) | Storage system that tracks mapping to a memory module to be detached therefrom | |
US8812901B2 (en) | Methods and apparatus for marking writes on a write-protected failed device to avoid reading stale data in a RAID storage system | |
US9377960B2 (en) | System and method of using stripes for recovering data in a flash storage system | |
US8943358B2 (en) | Storage system, apparatus, and method for failure recovery during unsuccessful rebuild process | |
US10120769B2 (en) | Raid rebuild algorithm with low I/O impact | |
JP3682256B2 (ja) | ディスクアレイ装置及び同装置におけるパリティ処理方法 | |
US9575844B2 (en) | Mass storage device and method of operating the same to back up data stored in volatile memory | |
US7487289B2 (en) | Apparatus and method for detecting disk write omissions | |
US20110029716A1 (en) | System and method of recovering data in a flash storage system | |
US20120117345A1 (en) | Method and apparatus for backup and restore in a dynamic chunk allocation storage system | |
EP2942713A1 (en) | Storage system and storage apparatus | |
CN101923441B (zh) | 混合磁盘冗余阵列的写请求处理方法、控制器和存储*** | |
JP2013506190A (ja) | ストライプベースのメモリ動作 | |
US10204003B2 (en) | Memory device and storage apparatus | |
US10067833B2 (en) | Storage system | |
JP2006139478A (ja) | ディスクアレイシステム | |
US8015435B2 (en) | Data writing method | |
US10229742B2 (en) | Flash memory device | |
JP5398551B2 (ja) | バックアップ方法、コントローラ、及びディスクアレイシステム | |
CN112612639A (zh) | 操作存储器***的方法、操作主机的方法和计算*** | |
JP5579431B2 (ja) | ソリッド・ステート・ドライブ装置および平準化管理情報の退避・回復方法 | |
US7398448B2 (en) | Storage system has the function of preventing drive write error | |
US20060015769A1 (en) | Program, method and apparatus for disk array control | |
CN108304139B (zh) | 一种在固态盘阵列中实现空间释放的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20110315 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20130507 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20130520 |
|
LAPS | Cancellation because of no payment of annual fees |