(57)【特許請求の範囲】
【請求項１】
複数のフラッシュメモリパッケージと、
前記複数のフラッシュメモリパッケージをＲＡＩＤグループとして制御するプロセッサと、前記プロセッサに接続されるキャッシュメモリと、前記プロセッサ及び前記キャッシュメモリに接続され、前記複数のフラッシュメモリパッケージのそれぞれに接続されるバッファメモリと、を含むシステムコントローラと、
を備え、
前記プロセッサは、コンピュータから送信される新データを、旧データを格納する第１フラッシュメモリパッケージへ転送し、
前記第１フラッシュメモリパッケージの第１メモリコントローラは、前記新データ及び前記旧データを有効な状態に維持しつつ、前記新データ及び前記旧データから中間パリティを生成するために前記新データを受信し、前記中間パリティを前記第１フラッシュメモリパッケージから前記バッファメモリへ転送し、
前記プロセッサはさらに、新パリティを生成するための中間パリティ送信コマンドと共に、前記中間パリティを、前記キャッシュメモリに格納することなく、前記バッファメモリ経由で、旧パリティを格納する第２フラッシュメモリパッケージへ転送し、
前記第２フラッシュメモリパッケージの第２メモリコントローラは、前記中間パリティ及び前記旧パリティから前記新パリティを生成するための前記中間パリティを受信し、前記新パリティを生成するための前記中間パリティ送信コマンドに関する完了応答を、前記プロセッサに転送し、
前記プロセッサはさらに、前記第２フラッシュメモリパッケージからの前記完了応答の受信に従って、前記旧データを無効化するための確定コマンドを前記第１フラッシュメモリパッケージへ転送し、
前記第１メモリコントローラは前記確定コマンドの受信後、前記旧データを削除する、
ストレージシステム。
【請求項２】
前記プロセッサは、前記第２フラッシュメモリパッケージからの前記完了応答の受信に従って、前記旧パリティを無効化するための他の確定コマンドを前記第２フラッシュメモリパッケージへ転送し、
前記第２メモリコントローラは前記他の確定コマンドの受信後、前記旧パリティを削除する、
請求項１に記載のストレージシステム。
【請求項３】
複数のフラッシュメモリパッケージと、
前記複数のフラッシュメモリパッケージをＲＡＩＤグループとして制御するプロセッサと、前記プロセッサに接続されるキャッシュメモリと、前記プロセッサ及び前記キャッシュメモリに接続され、前記複数のフラッシュメモリパッケージのそれぞれに接続されるバッファメモリと、を含むシステムコントローラと、
を備え、
前記プロセッサは、コンピュータから送信される新データを、旧データを格納する第１フラッシュメモリパッケージへ転送し、
前記第１フラッシュメモリパッケージの第１メモリコントローラは、前記新データ及び前記旧データを有効な状態に維持しつつ、前記新データ及び前記旧データから中間パリティを生成するために前記新データを受信し、前記中間パリティを前記第１フラッシュメモリパッケージから前記バッファメモリへ転送し、
前記プロセッサはさらに、前記中間パリティを前記キャッシュメモリに格納することなく前記バッファメモリ経由で、新Ｐパリティの生成を指示する第１中間パリティ送信コマンドと共に、旧Ｐパリティを格納する第２フラッシュメモリパッケージへ転送し、また新Ｑパリティの生成を指示する第２中間パリティ送信コマンドと共に、旧Ｑパリティを格納する第３フラッシュメモリパッケージへ転送し、
前記第２フラッシュメモリパッケージの第２メモリコントローラは、前記中間パリティ及び前記旧Ｐパリティから前記新Ｐパリティを生成するための前記中間パリティを受信し、前記新Ｐパリティを生成するための前記第１中間パリティ送信コマンドに関する第１完了応答を、前記プロセッサに転送し、
前記第３フラッシュメモリパッケージの第３メモリコントローラは、前記中間パリティ及び前記旧Ｑパリティから前記新Ｑパリティを生成するための前記中間パリティを受信し、前記新Ｑパリティを生成するための前記第２中間パリティ送信コマンドに関する第２完了応答を転送し、
前記プロセッサはさらに、前記第２フラッシュメモリパッケージからの前記第１完了応答及び第３フラッシュメモリパッケージからの前記第２完了応答の受信に従って、前記旧データを無効化するための第１確定コマンドを前記第１フラッシュメモリパッケージへ転送し、
前記第１メモリコントローラは前記第１確定コマンドの受信後、前記旧データを削除する、
ストレージシステム。
【請求項４】
前記プロセッサは、前記第１完了応答及び前記第２完了応答の受信に従って、前記旧Ｐパリティを無効化するための第２確定コマンドを前記第２フラッシュメモリパッケージへ転送し、
前記第２メモリコントローラは前記第２確定コマンドの受信後、前記旧Ｐパリティを削除する、
請求項３に記載のストレージシステム。
【請求項５】
前記プロセッサは、前記第１完了応答及び前記第２完了応答の受信に従って、前記旧Ｑパリティを無効化するための第３確定コマンドを前記第３フラッシュメモリパッケージへ転送し、
前記第３メモリコントローラは前記第３確定コマンドの受信後、前記旧Ｑパリティを削除する、
請求項４に記載のストレージシステム。
【請求項６】
前記新Ｑパリティの生成のために、ストライプ内のデータ列番号が用いられ、
前記第２中間パリティ送信コマンドは、前記データ列番号を含む、
請求項３に記載のストレージシステム。
【請求項７】
複数のフラッシュメモリパッケージと、
プロセッサと、キャッシュメモリと、バッファメモリと、を含むシステムコントローラと、
を備え、
前記プロセッサは、コンピュータから送信される新データを、旧データを格納する第１フラッシュメモリパッケージへ転送し、
前記第１フラッシュメモリパッケージの第１メモリコントローラは、前記新データ及び前記旧データを有効な状態に維持しつつ、前記新データ及び前記旧データから中間冗長データを生成するために前記新データを受信し、前記中間冗長データを前記第１フラッシュメモリパッケージから前記バッファメモリへ転送し、
前記プロセッサはさらに、新冗長データを生成するための中間冗長データ送信コマンドと共に、前記中間冗長データを、前記キャッシュメモリに格納することなく、前記バッファメモリ経由で、旧冗長データを格納する第２フラッシュメモリパッケージへ転送し、
前記第２フラッシュメモリパッケージの第２メモリコントローラは、前記中間冗長データ及び前記旧冗長データから前記新冗長データを生成するための前記中間冗長データを受信し、前記新冗長データを生成するための前記中間冗長データ送信コマンドに関する完了応答を、前記プロセッサに転送し、
前記プロセッサはさらに、前記第２フラッシュメモリパッケージからの前記完了応答の受信に従って、前記旧データを無効化するための確定コマンドを前記第１フラッシュメモリパッケージへ転送し、
前記第１メモリコントローラは前記確定コマンドの受信後、前記旧データを削除する、
ストレージシステム。
【請求項８】
前記プロセッサは、前記第２フラッシュメモリパッケージからの前記完了応答の受信に従って、前記旧冗長データを無効化するための他の確定コマンドを前記第２フラッシュメモリパッケージへ転送し、
前記第２メモリコントローラは前記他の確定コマンドの受信後、前記旧冗長データを削除する、
請求項７に記載のストレージシステム。
【請求項９】
複数のストレージデバイスと、
プロセッサと、キャッシュメモリと、バッファメモリとを含むシステムコントローラと、
を備え、
前記複数のストレージデバイスの中の、第１ストレージデバイスの第１デバイスコントローラは、新データの受信後、第１ストレージデバイスに格納される旧データ及び前記新データから中間パリティを生成し、
前記バッファメモリは、前記中間パリティを、前記キャッシュメモリに格納することなく転送し、
前記プロセッサは、新パリティを生成するための中間パリティ送信コマンドと共に、前記中間パリティを、旧パリティを格納する第２ストレージデバイスへ転送し、
前記第２ストレージデバイスの第２デバイスコントローラは、前記中間パリティ及び前記旧パリティから前記新パリティを生成するための前記中間パリティを受信し、前記新パリティを生成するための前記中間パリティ送信コマンドに関する完了応答を、前記プロセッサに転送し、
前記プロセッサはさらに、前記第２ストレージデバイスからの前記完了応答の受信に従って、前記旧データを無効化するための確定コマンドを前記第１ストレージデバイスへ転送し、
前記第１デバイスコントローラは、前記確定コマンドの受信後、前記旧データを削除する、
ストレージシステム。
【請求項１０】
前記プロセッサは、前記第２ストレージデバイスからの前記完了応答の受信に従って、前記旧パリティを無効化するための他の確定コマンドを前記第２ストレージデバイスへ転送し、
前記第２デバイスコントローラは前記他の確定コマンドの受信後、前記旧パリティを削除する、
請求項９に記載のストレージシステム。
【請求項１１】
複数のフラッシュメモリパッケージと、
前記複数のフラッシュメモリパッケージをＲＡＩＤグループとして制御するプロセッサと、前記プロセッサに接続されるキャッシュメモリと、前記プロセッサ及び前記キャッシュメモリに接続され、前記複数のフラッシュメモリパッケージのそれぞれに接続されるバッファメモリと、
を備え、
前記プロセッサは、新データを、旧データを格納する第１フラッシュメモリパッケージへ転送し、
前記第１フラッシュメモリパッケージの第１メモリコントローラは、前記新データ及び前記旧データを有効な状態に維持しつつ、前記新データ及び前記旧データから中間パリティを生成するために前記新データを受信し、前記中間パリティを前記第１フラッシュメモリパッケージから前記バッファメモリへ転送し、
前記プロセッサはさらに、新パリティを生成するための中間パリティ送信コマンドと共に、前記中間パリティを、前記キャッシュメモリに格納することなく、前記バッファメモリ経由で、旧パリティを格納する第２フラッシュメモリパッケージへ転送し、
前記第２フラッシュメモリパッケージの第２メモリコントローラは、前記中間パリティ及び前記旧パリティから前記新パリティを生成するための前記中間パリティを受信し、前記新パリティを生成するための前記中間パリティ送信コマンドに関する完了応答を、前記プロセッサに転送し、
前記プロセッサはさらに、前記第２フラッシュメモリパッケージからの前記完了応答の受信に従って、前記旧データを無効化するための確定コマンドを前記第１フラッシュメモリパッケージへ転送し、
前記第１メモリコントローラは前記確定コマンドの受信後、前記旧データを削除する、
システム。
【請求項１２】
前記プロセッサは、前記第２フラッシュメモリパッケージからの前記完了応答の受信に従って、前記旧パリティを無効化するための他の確定コマンドを前記第２フラッシュメモリパッケージへ転送し、
前記第２メモリコントローラは前記他の確定コマンドの受信後、前記旧パリティを削除する、
請求項１１に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージデバイスに格納される冗長コードを演算する技術に関する。
【背景技術】
【０００２】
複数のディスク装置とこれらを制御するストレージコントローラとを有し、各ディスク装置がパリティ作成機能を有するストレージシステムが知られている（例えば、特許文献１）。このストレージシステムにおいて、ストレージコントローラは、更新後データ（新データ）を、更新前データ（旧データ）を格納するディスク装置に送信する。ディスク装置は、旧データと新データとから新パリティを作成するために用いられる中間値（中間パリティ）を作成し、新データをディスクへ書き込み、旧データが格納されていた記憶領域を空にして空き領域とする。ディスク装置は、この中間パリティをストレージコントローラに送信し、ストレージコントローラは、中間パリティをストレージコントローラ内のキャッシュメモリ及び不揮発メモリとに格納する。そして、ストレージコントローラは、中間パリティをキャッシュメモリから読み出し、旧パリティが格納されているディスク装置へ送信する。このディスク装置は、受信した中間パリティと旧パリティとから新パリティを作成し、新パリティをディスクへ書き込み、旧パリティが格納されていた記憶領域を空にして空き領域とする。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】ＵＳ６，０９８，１９１
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１では、中間パリティをキャッシュメモリと不揮発メモリの両方へ格納するための処理により、ストレージコントローラの負荷が増加する。これにより、ストレージコントローラの性能がボトルネックとなり、ストレージシステムの性能が低下する。しかし、キャッシュメモリか不揮発メモリの一方にしか中間パリティを格納しないと、障害が発生した場合にデータロストとなる。
【課題を解決するための手段】
【０００５】
本発明の一態様であるストレージシステムは、複数の記憶媒体、及び複数の記憶媒体を制御するデバイスコントローラを有し、複数の記憶媒体でＲＡＩＤグループが構成されている複数の記憶デバイスと、プロセッサと、所定の通信ネットワークを介して複数の記憶デバイス及びプロセッサに接続されるバッファメモリと、所定の通信ネットワークを介してプロセッサ及びバッファメモリに接続されるキャッシュメモリと、を有するシステムコントローラとを備える。プロセッサは、ホスト計算機からのライト要求に伴う第１データを、キャッシュメモリに格納し、複数の記憶デバイスから、第１データの更新前のデータである更新前データを格納する第１記憶デバイスを特定し、特定した第１記憶デバイスに第１データを転送する。第１記憶デバイスの第１デバイスコントローラは、第１データ及び更新前データに基づく第２データを、第１記憶デバイスからシステムコントローラに送信する。プロセッサは、第２データをバッファメモリに格納し、複数の記憶デバイスから第２記憶デバイスを特定し、格納した前記第２データを特定した第２記憶デバイスに転送する。プロセッサは、更に、ライト要求の処理の段階を示す処理段階情報を管理する。
【図面の簡単な説明】
【０００６】
【図１】図１は、ストレージシステムの構成を示す。
【図２】図２は、ＦＭＰＫ１４４の構成を示す。
【図３】図３は、メニュー画面を示す。
【図４】図４は、実施例１におけるライト処理を示す。
【図５】図５は、実施例１におけるライトコマンド受領時のＭＰ１２１の動作を示す。
【図６】図６は、実施例１におけるＦＥＰＫ１１０のバッファ１１３への書き込み後のＭＰ１２１の動作を示す。
【図７】図７は、実施例１におけるＣＭ１３１への書き込み後のＭＰ１２１の動作を示す。
【図８】図８は、実施例１におけるライトコマンド応答後のＭＰ１２１の動作を示す。
【図９】図９は、実施例１におけるＢＥＰＫ１４０への書き込み後のＭＰ１２１の動作を示す。
【図１０】図１０は、実施例１における新データ送信コマンドの正常終了後のＭＰ１２１の動作を示す。
【図１１】図１１は、実施例１における中間パリティ受信コマンドの正常終了後のＭＰ１２１の動作を示す。
【図１２】図１２は、実施例１における中間パリティ送信コマンドの正常終了後のＭＰ１２１の動作を示す。
【図１３】図１３は、実施例１におけるデータＦＭＰＫ１４４Ａへ送信された新データ確定コマンドの正常終了後のＭＰ１２１の動作を示す。
【図１４】図１４は、実施例１におけるパリティＦＭＰＫ１４４Ｐへ送信された新データ確定コマンドの正常終了後のＭＰ１２１の動作を示す。
【図１５】図１５は、実施例１におけるＭＰ障害発生時のＭＰ１２１の動作を示す。
【図１６】図１６は、実施例１におけるパリティ生成後キューに登録がある場合のＭＰ１２１の動作を示す。
【図１７】図１７は、実施例１におけるパリティ生成前段階のＭＰ障害による引継ぎライト処理を示す。
【図１８】図１８は、実施例１におけるパリティ生成後段階のＭＰ障害による引継ぎライト処理を示す。
【図１９】図１９は、実施例１におけるＦＭＰＫ状態１を示す。
【図２０】図２０は、実施例１におけるＦＭＰＫ状態２を示す。
【図２１】図２１は、実施例１におけるＦＭＰＫ状態１下の新データ送信コマンドによる動作を示す。
【図２２】図２２は、実施例１におけるＦＭＰＫ状態２下の新データ送信コマンドによる動作を示す。
【図２３】図２３は、実施例１におけるＦＭＰＫ状態１下の中間パリティ受信コマンドによる動作を示す。
【図２４】図２４は、実施例１におけるＦＭＰＫ状態２下の中間パリティ受信コマンドによる動作を示す。
【図２５】図２５は、実施例１におけるＦＭＰＫ状態１下の中間パリティ送信コマンドによる動作を示す。
【図２６】図２６は、実施例１におけるＦＭＰＫ状態２下の中間パリティ送信コマンドによる動作を示す。
【図２７】図２７は、実施例１におけるＦＭＰＫ状態１下の新データ確定コマンドによる動作を示す。
【図２８】図２８は、実施例１におけるＦＭＰＫ状態２下の新データ確定コマンドによる動作を示す。
【図２９】図２９は、実施例１におけるＦＭＰＫ状態１下の通常リードコマンドによる動作を示す。
【図３０】図３０は、実施例１におけるＦＭＰＫ状態２下の通常リードコマンドによる動作を示す。
【図３１】図３１は、実施例１におけるＦＭＰＫ状態１下の通常ライトコマンドによる動作を示す。
【図３２】図３２は、実施例１におけるＦＭＰＫ状態２下の通常ライトコマンドによる動作を示す。
【図３３】図３３は、実施例１におけるシステム状態の遷移を示す。
【図３４】図３４は、実施例１のシステム状態１におけるデータの配置を示す。
【図３５】図３５は、実施例１のシステム状態２におけるデータの配置を示す。
【図３６】図３６は、実施例１のシステム状態３におけるデータの配置を示す。
【図３７】図３７は、実施例１のシステム状態４におけるデータの配置を示す。
【図３８】図３８は、実施例１のシステム状態５におけるデータの配置を示す。
【図３９】図３９は、実施例１のシステム状態６におけるデータの配置を示す。
【図４０】図４０は、実施例１のシステム状態７におけるデータの配置を示す。
【図４１】図４１は、実施例１のシステム状態ａにおけるデータの配置を示す。
【図４２】図４２は、実施例１のシステム状態Ａにおけるデータの配置を示す。
【図４３】図４３は、実施例１のシステム状態Ｂにおけるデータの配置を示す。
【図４４】図４４は、実施例１のシステム状態Ｃにおけるデータの配置を示す。
【図４５】図４５は、実施例１のシステム状態Ｄにおけるデータの配置を示す。
【図４６】図４６は、実施例１のシステム状態Ｅにおけるデータの配置を示す。
【図４７】図４７は、実施例１のシステム状態Ｆにおけるデータの配置を示す。
【図４８】図４８は、実施例１のシステム状態ｂにおけるデータの配置を示す。
【図４９】図４９は、実施例１のシステム状態ｃにおけるデータの配置を示す。
【図５０】図５０は、実施例１のシステム状態Ｇにおけるデータの配置を示す。
【図５１】図５１は、実施例１のシステム状態ｅにおけるデータの配置を示す。
【図５２】図５２は、実施例１のシステム状態ｆにおけるデータの配置を示す。
【図５３】図５３は、実施例１のシステム状態Ｉにおけるデータの配置を示す。
【図５４】図５４は、実施例２におけるライト処理を示す。
【図５５】図５５は、実施例２におけるパリティ生成前段階のＭＰ障害による引継ぎライト処理を示す。
【図５６】図５６は、実施例２におけるデータメディア更新中段階のＭＰ障害による引継ぎライト処理を示す。
【図５７】図５７は、実施例２におけるパリティメディア更新中段階のＭＰ障害による引継ぎライト処理を示す。
【図５８】図５８は、実施例２におけるパリティ生成後段階のＭＰ障害による引継ぎライト処理を示す。
【図５９】図５９は、実施例２における通常リードコマンドによる動作を示す。
【図６０】図６０は、実施例２における通常ライトコマンドによる動作を示す。
【図６１】図６１は、実施例２におけるＸＤＷＲＩＴＥコマンドによる動作を示す。
【図６２】図６２は、実施例２におけるＸＤＲＥＡＤコマンドによる動作を示す。
【図６３】図６３は、実施例２におけるＸＰＷＲＩＴＥコマンドによる動作を示す。
【図６４】図６４は、実施例３におけるライト処理を示す。
【図６５】図６５は、実施例３におけるパリティ生成前段階のＭＰ障害による引継ぎライト処理を示す。
【図６６】図６６は、実施例３におけるデータメディア更新中段階のＭＰ障害による引継ぎライト処理を示す。
【図６７】図６７は、実施例３におけるパリティメディア更新中段階のＭＰ障害による引継ぎライト処理を示す。
【図６８】図６８は、実施例４におけるライト処理を示す。
【図６９】図６９は、実施例４におけるパリティ生成前段階のＭＰ障害による引継ぎライト処理を示す。
【図７０】図７０は、実施例４におけるパリティ生成後段階のＭＰ障害による引継ぎライト処理を示す。
【図７１】図７１は、実施例４におけるＦＭＰＫ状態１ａを示す。
【図７２】図７２は、実施例４におけるＦＭＰＫ状態２ａを示す。
【図７３】図７３は、実施例４におけるＦＭＰＫ状態３ａを示す。
【図７４】図７４は、実施例４におけるＦＭＰＫ状態１ａ下の旧データ送信コマンドによる動作を示す。
【図７５】図７５は、実施例４におけるＦＭＰＫ状態２ａ下の旧データ送信コマンドによる動作を示す。
【図７６】図７６は、実施例４におけるＦＭＰＫ状態３ａ下の旧データ送信コマンドによる動作を示す。
【図７７】図７７は、実施例４におけるＦＭＰＫ状態１ａ下の新データ送信コマンドによる動作を示す。
【図７８】図７８は、実施例４におけるＦＭＰＫ状態２ａ下の新データ送信コマンドによる動作を示す。
【図７９】図７９は、実施例４におけるＦＭＰＫ状態３ａ下の新データ送信コマンドによる動作を示す。
【図８０】図８０は、実施例４におけるＦＭＰＫ状態１ａ下の新データ確定コマンドによる動作を示す。
【図８１】図８１は、実施例４におけるＦＭＰＫ状態２ａ下の新データ確定コマンドによる動作を示す。
【図８２】図８２は、実施例４におけるＦＭＰＫ状態３ａ下の新データ確定コマンドによる動作を示す。
【図８３】図８３は、実施例５におけるライト処理を示す。
【図８４】図８４は、実施例５におけるパリティ生成前段階のＭＰ障害による引継ぎライト処理を示す。
【図８５】図８５は、実施例５におけるパリティメディア更新中段階のＭＰ障害による引継ぎライト処理を示す。
【図８６】図８６は、実施例５におけるパリティ生成後段階のＭＰ障害による引継ぎライト処理を示す。
【図８７】図８７は、実施例６におけるライト処理を示す。
【図８８】図８８は、実施例６におけるパリティ生成前段階のＭＰ障害による引継ぎライト処理を示す。
【図８９】図８９は、実施例６におけるパリティメディア更新中段階のＭＰ障害による引継ぎライト処理を示す。
【図９０】図９０は、実施例６におけるパリティ生成後段階のＭＰ障害による引継ぎライト処理を示す。
【図９１】図９１は、実施例７におけるライト処理の第１処理を示す。
【図９２】図９２は、実施例７におけるライト処理の第２処理を示す。
【発明を実施するための形態】
【０００７】
以下、本発明の幾つかの実施例を説明する。
【０００８】
なお、以後の説明では、各種情報を「＊＊＊テーブル」で表現することがあるが、各種情報は、テーブル以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「＊＊＊テーブル」を「＊＊＊情報」と呼ぶことができる。
【０００９】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Central  Processing  Unit））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信インタフェース装置（例えば通信ポート）を用いながら行うため、処理の主語がプロセッサとされてもよい。プログラムを主語として説明された処理は、ストレージシステム、ストレージシステムが有するコントローラ、コントローラが有する後述のＭＰ−ＰＫ、或いは、ＭＰ−ＰＫ内のＭＰ（マイクロプロセッサ）が行う処理としても良い。また、プロセッサは、プロセッサが行う処理の一部又は全部を行うハードウェア回路を含んでも良い。コンピュータプログラムは、プログラムソースから各計算機にインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ又は記憶メディアであっても良い。
【実施例１】
【００１０】
――――ストレージシステムの構成――――
【００１１】
以下、本発明の適用例であるストレージシステムの構成について説明する。
【００１２】
図１は、ストレージシステムの構成を示す。ストレージシステムは、コントローラ１００、及びコントローラ１００に接続された記憶部２００を有する。図では、コントローラ１００及び記憶部２００は、ＢＥ−Ｉ／Ｆ（Back  End  Inter/Face）１４１を介して接続されている。
【００１３】
記憶部２００は、複数（又は１つの）のＦＭＰＫ（Flash  Memory  PacKage）１１４を有している。記憶部２００に採用される物理記憶媒体は、不揮発性半導体メモリ（例えばフラッシュメモリ）を有するメモリドライブ（例えばＳＳＤ（Solid  State  Drive））である。また、複数のＦＭＰＫ１１４で１又は複数のＲＡＩＤ（Redundant  Arrays  of  Inexpensive（or  Independent）Disks）グループ１４５が構成される。本実施例では、コントローラ１００により、複数のＦＭＰＫ１１４で、ＲＡＩＤレベル５のＲＡＩＤグループが形成されているものとする。また、本実施例では、１つのＲＡＩＤグループに含まれるＦＭＰＫは、それぞれ異なるバスに接続されているものとする。もし一つのバスに接続された複数のＦＭＰＫからＲＡＩＤグループを構成した場合、そのバスに障害が発生すると、すべてのＦＭＰＫへアクセスできなくなり、データの回復ができなくなるためである。ただし、同じバスに接続された複数のＦＭＰＫでＲＡＩＤグループを構成してもよい。
【００１４】
コントローラ１００には、１つ又は複数のホスト計算機３０、及び管理計算機２０が接続される。コントローラ１００とホスト計算機３０とは、所定の通信ネットワーク（例えば、ＳＡＮ（Storage  Area  Network））を介して接続され、コントローラ１００と管理計算機２０とは所定の通信ネットワーク（例えば、スイッチ、或いはＬＡＮ（LocalArea  Network）を含む）１５０を介して接続される。
【００１５】
コントローラ１００は、各種のパッケージ（ＰＫ）である、ＦＥＰＫ（Front  EndPacKage）１１０、ＭＰＰＫ（Micro  Processor  PacKage）１２０、ＣＭＰＫ（CacheMemory  PacKage）１３０、及びＢＥＰＫ（Back  End  PacKage）１４０などを含んで構成される。図１に示す例では、各種のパッケージ（ＰＫ）は、多重化され、複数であるが、複数種類のＰＫのうちの少なくとも１種類のＰＫが、単数であっても良い。ＦＥＰＫ１１０、ＭＰＰＫ１２０、ＣＭＰＫ（Cache  Memory  PacKage）１３０、及びＢＥＰＫ１４０は、所定の通信ネットワーク（例えば、スイッチを含む）１５０を介して接続される。
【００１６】
ＦＥＰＫ１１０は、１以上のＦＥ−Ｉ／Ｆ（Front  End  Inter/Face）１１１、転送回路１１２及びバッファ１１３を有する。ＦＥ−Ｉ／Ｆ１１０は、ホスト計算機３０等のフロントエンドに存在する通信装置と通信するためのインタフェース装置である。ＦＥ−Ｉ／Ｆ１１１は、例えば、ホスト計算機３０からのＩ／Ｏ要求（ライト要求又はリード要求）を受信し、受信したＩ／Ｏ要求を、バッファ１１３で一時的に格納し、転送回路１１２を介して、ＭＰＰＫ１２０に転送する。ＦＥＰＫ１１０は、ＣＰＵ等の制御デバイスを有しても良い。バッファ１１３は例えば、揮発性の半導体メモリである。なお、バッファ１１３は不揮発性の半導体メモリであっても良い。
【００１７】
ＢＥＰＫ１４０は、１以上のＢＥ−Ｉ／Ｆ１４１、転送回路１４２及びバッファ１４３を有する。ＢＥ−Ｉ／Ｆ１４１は、ＦＭＰＫ１４４と通信するためのインタフェース装置である。ＢＥ−Ｉ／Ｆ１４１は、例えば、ＦＭＰＫ１４４からデータを読み出し、そのデータを、バッファ１４３で一時的に格納する。転送回路１４２は、ＦＭＰＫ１４４からバッファ１４３へ書き込まれたデータをＣＭＰＫ１３０へ送る。また、転送回路１４２は、ＣＭＰＫ１３０から読み出したデータをバッファ１４３へ書き込む。また、ＢＥ−Ｉ／Ｆ１４１は、バッファ１４３へ書き込まれたデータＦＭＰＫ１４４へ送る。ＢＥＰＫ１４０は、ＣＰＵ等の制御デバイスを有しても良い。ＢＥＰＫ１４０は、ディスクアダプタ等、制御デバイスと記憶デバイスとのインタフェースであっても良い。バッファ１４３は例えば、揮発性の半導体メモリである。なお、バッファ１４３は不揮発性の半導体メモリであっても良い。
【００１８】
ＭＰＰＫ１２０は、複数（又は１つ）のマイクロプロセッサ（以下、ＭＰ）１２１、及び、ＭＰ１２１と内部パス１２３で接続される１つ又は複数のＬＭ（Local  Memory）１２２を有する。ＭＰ１２０は、ＦＥ−Ｉ／Ｆ１１１からのＩ／Ｏ要求を処理する。ＬＭ１２２は、ＳＭ（Shared  Memory）１３２が記憶している管理情報のうち必要部分を記憶したり、ＭＰ１２１で実行されるコンピュータプログラムを記憶する。本実施例のシステム構成においては、ＭＰＰＫ１２０は、ＦＥＰＫ１１０、ＣＭＰＫ１３０、ＢＥＰＫ１４０のそれぞれと内部ネットワークを介して接続されている。このため、ＭＰＰＫ１２０は、ＰＫ（ＭＰＰＫ１２０、ＦＥＰＫ１１０、ＣＭＰＫ１３０、ＢＥＰＫ１４０）間でのデータ転送や、ＦＥＰＫ１１０のバッファ１１３、ＣＭＰＫ１３０のＣＭ１３１、ＳＭ１３２、ＢＥＰＫ１４０のバッファ１４３へ転送されたデータの格納／削除等を制御することができる。
【００１９】
ＣＭＰＫ１３０は、ＣＭ１３１及びＳＭ１３２を有する。ＣＭ１３１及びＳＭ１３２は例えば揮発性の半導体メモリである。なお、ＣＭ１３１及びＳＭ１３２のうちの少なくとも一方が、不揮発性のメモリであっても良い。
【００２０】
ＣＭ１３１には、記憶媒体に対するＩ／Ｏ対象のデータが一時的に記憶される記憶領域がある。ＳＭ１３２には、種々の管理情報（ストレージシステムの動作に使用される情報）及びコンピュータプログラムが記憶される記憶領域がある。
【００２１】
ここで、ＢＥＰＫ１４０のバッファ１４３は、ＣＭ１３１から読みだされ、ＦＭＰＫ１４４へ送られるデータを格納する。一般的に、バッファはＣＭと比べて、容量が小さい。バッファには、ある一つの処理（例えば、Ｉ／Ｏ処理）が完了するまでの間、その処理にともなうデータが格納される。つまり、一連の処理が完了すると、バッファに格納されたデータは削除される。それに対して、ＣＭに格納されているデータは、あるＩ／Ｏ処理が完了しても、基本的に、ＣＭの容量が許す限り削除されることなくＣＭ上に残され、別のＩ／Ｏ処理でも再利用される。ＣＭには、Ｉ／Ｏ処理に関連するデータが格納されるが、Ｉ／Ｏ処理とは非同期にデータが削除される。データが削除される場合は、例えば、ＣＭに格納されているデータのうち、格納されてからの経過時間が長いデータから順に削除されても良いし、或いは最終アクセス時刻からの経過時間が長いデータから順に削除されても良い。ＣＭの領域、及びＣＭに格納されているデータは、ＭＰＰＫ、ＦＥＰＫ、ＢＥＰＫによって使われるため、ＣＭの負荷は高い。
【００２２】
各部のインタフェースの種類としては、ＦＣ（Fibre  Channel）、ＳＡＳ（Serial  Attached  SCSI）及びＳＡＴＡ(Serial  ATA)のうちの少なくとも１つがあって良い。
【００２３】
管理計算機２０は、例えば、表示装置及び入力装置を有する計算機である。管理計算機２０は、例えば、管理者からのＳＶＰ（SerVice  Processor）の操作に従い、ストレージシステムに対して種々の設定を行うことの命令を送信する。ＳＶＰ１１０は、管理者からの命令に応答して、ＳＭ１３２内の管理情報を更新したりＳＭ１３２に情報を設定したりする。管理情報は、ＣＭ１３１内のデータを格納する領域を示す領域情報と、ライト処理中のシステムの複数の状態の一つを示す処理段階情報とを含む。
【００２４】
図２は、ＦＭＰＫ１４４の構成例を示す。ＦＭＰＫ１４４は、通信インタフェースデバイス、記憶デバイス、及びそれらに接続された制御デバイスを有する。通信インタフェースデバイスは例えば、通信ネットワークに接続するポート１４４１、ＦＭ１４４３に接続するディスクＩ／Ｆ１４４６である。ＦＭコントローラ１４４７は、ポート１４４１、論理演算回路１４４２、ＣＰＵ１４４４、メモリ１４４５、ディスクＩ／Ｆ１４４６を含む。
【００２５】
記憶デバイスは例えば、メモリ１４４５及びＦＭ（Flash  Memory）１４４３である。制御デバイスは例えば、ＣＰＵ１４４４である。制御デバイスは、ＣＰＵ１４４４のようなプロセッサの他に、所定の処理（例えば圧縮、伸長、暗号化又は復号化）を行う専用ハードウェア回路を含んでも良い。専用ハードウェア回路は例えば、パリティ又は途中パリティを計算する論理演算（例えば、ＸＯＲ（exclusive  or）演算）回路１４４２である。以下の説明において、論理演算回路１４４２を、ＸＯＲ回路１４４２とする。
【００２６】
ＦＭ１４４３は、不揮発性の半導体メモリ（典型的にはＮＡＮＤ型のＦＭチップ）であり、ページ単位でデータの書き込み／読み出しが行われ、またブロック単位でデータの消去が行われる。ＦＭには、複数のブロックが含まれ、一つのブロックには複数のページが含まれる。また、ＦＭ１４４３に格納されているデータを書き換えようとしたとき、そのデータが格納されている物理領域（物理ページ）上に、データを上書くことができない。このため、ＦＭコントローラ１４４７が、ある物理ページに格納されたデータへの更新データを受領した場合、別の物理ページに受領したデータを書き込む。この際、論理ページアドレスと物理ページアドレスのマッピングが更新される。そして、ＦＭコントローラ１４４７は、更新前のデータを無効として無効データを得、更新後のデータを有効データとして管理する。無効なデータが格納された物理ページは消去される。有効データが格納された物理ページは論理ページに対応付けられており、無効データが格納された物理ページは論理ページに対応付けられていない。ＦＭ１４４３において、ある物理領域上のデータの書換えを行うためには、ブロック単位でその物理領域上のデータに対して消去処理（以下、ブロック消去）が実行される必要がある。消去処理が実行されたブロックは、空きブロックして再度データを書き込むことができる。なお、ＦＭ１４４３は、フラッシュメモリに限定されず、追記型のメモリ（例えば、相変化メモリ）でも良い。ＦＭコントローラ１４４７は、リクラメーション処理を行う。リクラメーション処理において、ＦＭコントローラ１４４７は、あるブロックに格納されている有効データ（論理ページが対応付けられているデータ）を他のブロックにコピーし、コピー元のブロックの有効データを無効データとして、そのブロックを消去する。その後、ＦＭコントローラ１４４７は、ブロック単位でデータの消去をする。
【００２７】
ＦＭＰＫ１４４のメモリ１４４５には、コントローラ１００からのアクセスのための論理ページとＦＭ１４４３内の物理ページとを関連付けるためのポインタテーブルが記憶されている。また、メモリ１４４５は、コントローラ１００からのデータを一時的に格納しても良い。メモリ１４４５は例えば、揮発性の半導体メモリである。なお、メモリ１４４５は不揮発性の半導体メモリであっても良い。
【００２８】
次に、複数のＦＭＰＫ１４４を用いるＲＡＩＤグループについて説明する。
【００２９】
コントローラ１００は、複数のＦＭＰＫ１４４から（図１参照）、ＲＡＩＤレベル５のＲＡＩＤグループを作成する。コントローラ１００は、作成したＲＡＩＤグループのアドレス空間から、連続する領域を複数の論理ボリューム（ＬＵ：Logical  Unit）に割り当てる。
【００３０】
コントローラ１００は、複数のＦＭＰＫ１４４上のアドレス空間に亘るストライプラインを割り当てる。ストライプラインを構成する複数のＦＭＰＫ１４４上のアドレス空間は、ユーザデータを格納するアドレス空間と、パリティデータを格納する１つのアドレス空間とを有する。ここでコントローラ１００は、例えば、複数のＦＭＰＫ１４４にＦＭＰＫ番号を割り当て、ストライプライン毎に、ユーザデータ及びパリティデータの夫々を割り当てるＦＭＰＫ番号をシフトさせる。コントローラ１００は、各ＲＡＩＤグループ、及びＬＵに関する情報を、ＬＭ１２２に書き込む。
【００３１】
以後、ＲＡＩＤグループに割り当てられている複数のＦＭＰＫ１４４のうち、ライトコマンドにより示されているユーザデータを格納するＦＭＰＫ１４４をデータＦＭＰＫ１４４Ａと呼び、そのユーザデータに基づくパリティデータを格納するＦＭＰＫ１４４をパリティＦＭＰＫ１４４Ｐと呼ぶ。
【００３２】
ストレージシステム１０は、ホスト計算機３０からのライト要求に従ってリードモディファイライト処理を行うことができる。リードモディファイライト処理は、或るストライプラインのうち、単一のＦＭＰＫ１４４の論理領域（ブロック或いはページ）内のユーザデータだけを更新するライト処理である。
【００３３】
以下において、ライト要求により指定された論理領域における更新前のユーザデータを旧ユーザデータ、その論理ページにおける更新後のユーザデータを新データ、旧ユーザデータに基づく更新前のパリティデータを旧パリティ、新ユーザデータに基づく更新後のパリティデータを新パリティと呼ぶ。以下の説明及び図面において、旧ユーザデータをｏＤ、新ユーザデータをｎＤ、旧パリティをｏＰ、新パリティをｎＰと呼ぶ。また、ＸＯＲ演算子を“＋”と記す。
【００３４】
リードモディファイライト処理は例えば、旧データと新データのＸＯＲ演算により中間パリティを生成し、中間パリティと旧パリティのＸＯＲ演算により新パリティを生成する。以下の説明及び図面において、中間パリティをｍＰと呼ぶ。つまり、ｍＰは（ｏＤ＋ｎＤ）により算出され、ｎＰは（ｏＰ＋ｍＰ）により算出される。
【００３５】
次に、ＦＭＰＫ１４４のパリティ演算機能の設定について説明する。
【００３６】
以下の実施例では、ＦＭＰＫ１４４が論理演算回路１４４２を有し、ＦＭＰＫ１４４が、コントローラ１００からの指示に従って中間パリティやパリティを生成するためのパリティ演算を行うことを説明する。コントローラ１００（ＭＰＰＫ１２０、ＢＥＰＫ１４０、ＦＥＰＫ１１０及びＣＭＰＫ１３０の何れか一つ以上）が論理演算機能を有してもよい。また、ＦＭＰＫ１４４とコントローラ１００の両方が論理演算機能を有している場合、どちらの論理演算機能を用いて、中間パリティ及び／又はパリティの演算を行わせるかについて、ユーザの操作に基づいて選択されても良い。
【００３７】
この場合、管理計算機２０は、ＦＭＰＫ１４４のパリティ演算機能の設定するためのメニュー画面を表示しても良い。図３は、メニュー画面を示す。このメニュー画面Ｇ１００は、ＦＭＰＫ設定欄Ｇ１０１と、論理ボリューム設定欄Ｇ１０４と、保存ボタンＢ１０と、キャンセルボタンＢ１１とを有する。
【００３８】
ＦＭＰＫ設定欄Ｇ１０１は、ＦＭＰＫ１４４のＸＯＲ機能の使用可否を設定するための入力欄である。ＦＭＰＫ設定欄Ｇ１０１は、ラジオボタンＧ１０２等、ＦＭＰＫ１４４のＸＯＲ機能の有効又は無効を入力するためのＧＵＩを有する。
【００３９】
論理ボリューム設定欄Ｇ１０４は、ＦＭＰＫ設定欄Ｇ１０１によりＦＭＰＫ１４４のＸＯＲ機能が有効に設定された場合に有効になる。論理ボリューム設定欄Ｇ１０４は、論理ボリューム番号表示欄Ｇ１０５と、ＸＯＲ機能設定欄Ｇ１０６とを有する。論理ボリューム番号表示欄Ｇ１０５は、ＦＭＰＫ１４４により作成されている論理ボリューム番号を表示する。ＸＯＲ機能設定欄Ｇ１０６は、論理ボリューム番号表示欄Ｇ１０５に示されている論理ボリュームについて、ＦＭＰＫ１４４のＸＯＲ機能の使用可否を設定するための入力欄である。ＸＯＲ機能設定欄Ｇ１０６は、ラジオボタン等、その論理ボリュームのＸＯＲ機能の有効又は無効を入力するためのＧＵＩを有する。
【００４０】
保存ボタンＢ１０は、メニュー画面Ｇ１００へ入力された設定を保存してメニュー画面Ｇ１００を閉じるためのボタンである。キャンセルボタンＢ１０は、メニュー画面Ｇ１００へ入力された設定を破棄してメニュー画面Ｇ１００を閉じるためのボタンである。
【００４１】
或る論理ボリュームについてＦＭＰＫ１４４のＸＯＲ機能が有効にされた場合、その論理ボリュームに対するライト処理において、ＦＭＰＫ１４４のＸＯＲ回路１４４２が中間パリティ又は新パリティを生成する。或る論理ボリュームについてＦＭＰＫ１４４のＸＯＲ機能が無効にされた場合、その論理ボリュームに対するライト処理において、コントローラ１００が中間パリティ又は新パリティを生成する。
【００４２】
これにより、ユーザは、ＦＭＰＫ１４４のＸＯＲ機能の使用可否と、論理ボリューム毎のＦＭＰＫ１４４のＸＯＲ機能の使用可否を設定することができる。上記の説明では、論理ボリュームの全領域には、ＲＡＩＤグループに基づく記憶領域が予め割当てられているものとした。しかし、論理ボリュームには、Ｔｈｉｎ  Ｐｒｏｖｉｓｉｏｎｉｎｇに従う論理ボリューム（仮想ボリューム）が適用されても良い。仮想ボリュームには予めデータを格納するための記憶領域が割当てられておらず、仮想ボリュームへのライト要求に応じて、仮想ボリュームに所定の単位で記憶領域が割当てられる。ライト要求が仮想ボリュームの記憶領域が割当てられた領域に対するものである場合は、必ずしも記憶領域を割当てる必要はない。コントローラ１００のＭＰＰＫ１２０が、記憶領域の割当てや、割当て済みまたは未割当て領域の管理を行う。
【００４３】
――――実施例１のライト処理――――
【００４４】
以下、正常時のライト処理について説明する。
【００４５】
ここでは、ストレージシステム１０が、ホスト計算機３０からのライトコマンドによりリードモディファイライト処理を行う場合について説明する。リードモディファイライト処理は、ＦＭＰＫ１４４に作成されたＲＡＩＤグループ内の少なくとも一つのページ内に格納されたデータを更新する。
【００４６】
この実施例では、コントローラ１００からＦＭＰＫ１４４へのＩ／Ｏコマンドとして、通常ライトコマンド及び通常リードコマンドに加え、新データ送信コマンド、中間パリティ受信コマンド、中間パリティ送信コマンド、新データ確定コマンドが定義されている。
【００４７】
図４は、実施例１におけるライト処理を示す。この図を含む以後のシーケンス図は、ホスト計算機３０と、コントローラ１００と、データＦＭＰＫ１４４Ａと、パリティＦＭＰＫ１４４Ｐの動作を示す。このシーケンス図のうち上部のシーケンス（Ｓ２３５０以前）の動作対象は、ＳＭ１３２、ＭＰ１２１、ＣＭ１３１、ＦＥＰＫ１１０内のバッファ１１３、ＦＥＰＫ１１０内のＩ／Ｆ１１１、ホスト計算機３０である。また、このシーケンス図のうち下部のシーケンス（Ｓ２３５０より後）の動作対象は、ＳＭ１３２、ＭＰ１２１、ＣＭ１３１、ＢＥＰＫ１４０内のバッファ１４３、ＢＥＰＫ１４０内のＩ／Ｆ１４１、データＦＭＰＫ１４４Ａ内のポート１４４１、データＦＭＰＫ１４４Ａ内のＸＯＲ回路１４４２、データＦＭＰＫ１４４Ａ内の記憶媒体ＤＦａ及び記憶媒体ＤＦｂ、パリティＦＭＰＫ１４４Ｐ内のポート１４４１、パリティＦＭＰＫ１４４Ｐ内のＸＯＲ回路１４４２、パリティＦＭＰＫ１４４Ｐ内の記憶媒体ＰＦａ及び記憶媒体ＰＦｂである。
【００４８】
ここで、データＦＭＰＫ１４４Ａにおいて、記憶媒体ＤＦａは、ＦＭ１４４３内のメモリ１４４５を示す。また、記憶媒体ＤＦｂはＦＭ１４４３の物理ページを示す。また、データＦＭＰＫ１４４Ａにおいて、記憶媒体ＤＦａは、ＦＭ１４４３内のメモリ１４４５を示す。また、記憶媒体ＤＦｂは、ＦＭ１４４３の物理ページを示す。パリティＦＭＰＫ１４４Ｐ内の記憶媒体ＰＦａは、パリティＦＭ１４４３内のメモリ１４４５を示す。また、記憶媒体ＰＦｂは、パリティＦＭ１４４３内の物理ページを示す。
【００４９】
また、このシーケンス図において、各動作対象の動作（ライフライン）の下には、ライト処理中の各動作対象へのアクセス回数を示す。
【００５０】
データＦＭＰＫ１４４Ａにおいて、ＤＦｂは、ライト処理前に旧ユーザデータを格納している物理ページであり、ＤＦａは、ＤＦｂと異なる物理ページであり、ライト処理後に新ユーザデータを格納する。また、パリティＦＭＰＫ１４４Ｐにおいて、ＰＦｂは、ライト処理前に旧パリティを格納している物理ページであり、ＰＦａはＰＦｂと異なる物理ページであり、ライト処理後に新パリティを格納する。
【００５１】
以下では説明のために、ライト処理中のストレージシステム１０の状態をシステム状態と呼び、以下で幾つかのシステム状態を定義する。後述するようにシステム状態に応じて障害発生時の処理を変更することで、障害発生時のデータロストを回避することができる。
【００５２】
まずホスト計算機３０は、旧ユーザデータを新ユーザデータへ更新するライトコマンドをストレージシステム１０内のコントローラ１００へ送る。
【００５３】
図５は、実施例１におけるライトコマンド受領時のＭＰ１２１の動作を示す。次にＭＰ１２１は、ホスト計算機３０からライトコマンドを受領する（Ｓ２１１０）。次にＭＰ１２１は、ＦＥＰＫ１１０のバッファ１１３内に新ユーザデータを書き込むための領域を確保する（Ｓ２１２０）。次にＭＰ１２１は、ホスト計算機３０へ書き込み準備完了を送信する（Ｓ２１３０）。
【００５４】
次に図４のコントローラ１００において、ＦＥＰＫ１１０のＩ／Ｆ１１１は、ホスト計算機からの新データをＳ２１２０で確保したバッファ１１３の領域へ書き込む。
【００５５】
図６は、実施例１におけるＦＥＰＫ１１０のバッファ１１３への書き込み後のＭＰ１２１の動作を示す。次にＭＰ１２１は、ホスト計算機３０からバッファ１１３への書き込みの完了を受領する（Ｓ２２１０）。次にＭＰ１２１は、二つのＣＭＰＫ１３０のＣＭ１３１に新ユーザデータを書き込むための領域を夫々確保する（Ｓ２２２０）。次にＭＰ１２１は、ＦＥＰＫ１１０へ、確保された二つのＣＭ１３１の領域への新ユーザデータの書き込みの指示を送信する（Ｓ２２３０）。
【００５６】
次に図４のコントローラ１００において、ＦＥＰＫ１１０の転送回路１１２は、バッファ１１３内の新ユーザデータを二重化して、Ｓ２２３０で確保した二つのＣＭ１３１の領域へ書き込む。
【００５７】
図７は、実施例１におけるＣＭ１３１への新ユーザデータの書き込み後のＭＰ１２１の動作を示す。次にＭＰ１２１は、ＦＥＰＫ１１０から二つのＣＭ１３１への書き込みの完了を受領する（Ｓ２３１０）。次にＭＰ１２１は、これら二つのＣＭ１３１に対応する二つのＳＭ１３２内の領域情報に、新ユーザデータが格納された二つのＣＭ１３１の領域を示す値（ＣＭ上のアドレス）を夫々書き込む（Ｓ２３２０）。次にＭＰ１２１は、これら二つのＣＭ１３１の領域に対応する二つのＳＭ１３２内の処理段階情報に、パリティ生成前段階を示す値を夫々書き込む（Ｓ２３３０）。次にＭＰ１２１は、このパリティ生成前段階をＳＭ１３２内のパリティ生成前キューへ登録する（Ｓ２３４０）。次にＭＰ１２１は、ＦＥＰＫ１１０に新ユーザデータを格納しているバッファ１１３の解放を指示する（Ｓ２３４５）。次にＭＰ１２１は、ホスト計算機３０へライトコマンドの正常終了を送信する（Ｓ２３５０）。ＭＰ１２１は、新ユーザデータのライト処理毎に、ＳＭ上に領域情報と処理段階情報を格納する。ＭＰに障害が発生した場合に、他のＭＰは処理段階情報を参照することで、ライト処理を引き継ぐことが可能となる。
【００５８】
この時のシステム状態を状態１と呼ぶ。
【００５９】
図８は、実施例１におけるライトコマンド応答後のＭＰ１２１の動作を示す。次にＭＰ１２１は、パリティ生成前キューに登録があることを検出すると（Ｓ２４１０）、ＢＥＰＫ１４０のバッファ１４３に新ユーザデータを書き込むための領域を確保する（Ｓ２４２０）。次にＭＰ１２１は、ＢＥＰＫ１４０に一つのＣＭ１３１から、新ユーザデータの読み込みの指示を送信する（Ｓ２４３０）。
【００６０】
次に図４のコントローラ１００において、ＢＥＰＫ１４０の転送回路１４２は、ＣＭ１３１から新ユーザデータを読み込み、バッファ１４３へ書き込む。
【００６１】
図９は、実施例１におけるＢＥＰＫ１４０のバッファ１４３への書き込み後のＭＰ１２１の動作を示す。次にＭＰ１２１は、ＢＥＰＫ１４０から読み込み完了を受領すると（Ｓ２５１０）、データＦＭＰＫ１４４Ａに新ユーザデータを書き込むための新データ送信コマンドを送る（Ｓ２５３０）。この新データ送信コマンドは、旧ユーザデータの論理ページを格納している論理ページを指定し、新ユーザデータを伴う。
【００６２】
この時、ＢＥＰＫ１４０のＩ／Ｆ１４１は、バッファ１４３から新ユーザデータを読み出し、データＦＭＰＫ１４４Ａへ送る。
【００６３】
次に図４のデータＦＭＰＫ１４４Ａにおいて、ＣＰＵ１４４４は、ポート１４４１を介して新データ送信コマンド及び新ユーザデータを受け、ＦＭ１４４３内のＤＦａへ新ユーザデータを書き込み、コントローラ１００へ正常終了を応答する。ここで、ＦＭＰＫ１４４３内では、ある論理ページアドレスに対応付けられた物理ページに、新ユーザデータ及び旧ユーザデータが格納され、保持される。格納された新ユーザデータ及び旧ユーザデータは、少なくとも、格納された新ユーザデータ及び旧ユーザデータに基づいて新パリティが生成され、生成された新パリティが物理ページに書き込まれるまで物理ページ内に保持される。
【００６４】
この時のシステム状態を状態２と呼ぶ。
【００６５】
図１０は、実施例１における新データ送信コマンドの正常終了後のＭＰ１２１の動作を示す。次にＭＰ１２１は、データＦＭＰＫ１４４Ａから新データ送信コマンドの正常終了を受領すると（Ｓ２６１０）、ＢＥＰＫ１４０のバッファ１４３の記憶領域を確保し（Ｓ２６２０）、データＦＭＰＫ１４４Ａに中間パリティを生成させて中間パリティを取得するための中間パリティ受信コマンドを、データＦＭＰＫ１４４Ａへ送る（Ｓ２６３０）。この中間パリティ受信コマンドは、旧ユーザデータの論理ページを格納している論理ページを指定する。
【００６６】
次に図４のデータＦＭＰＫ１４４Ａにおいて、ＣＰＵ１４４４は、ポート１４４１を介して中間パリティ受信コマンドを受け、ＤＦｂから旧ユーザデータを読み出し、ＤＦａから新ユーザデータを読み出し、旧ユーザデータ及び新ユーザデータをＸＯＲ回路１４４２へ送る。ＸＯＲ回路１４４２は、旧ユーザデータ及び新ユーザデータから中間パリティを算出する。ＣＰＵ１４４４は、ポート１４４１を介して、ＢＥＰＫ１４０へ中間パリティ受信コマンドの正常終了を応答し、コントローラ１００へ中間パリティを送る。
【００６７】
次に図４のコントローラ１００において、ＢＥＰＫ１４０のＩ／Ｆ１４１は、データＦＭＰＫ１４４Ａから受けた中間パリティをＳ２６２０で確保したバッファ１４３の記憶領域へ書き込む。
【００６８】
図１１は、実施例１における中間パリティ受信コマンドの正常終了後のＭＰ１２１の動作を示す。次にＭＰ１２１は、データＦＭＰＫ１４４Ａから中間パリティ受信コマンドの正常終了を受領すると（Ｓ３１１０）、中間パリティから新パリティを生成させて書き込むための中間パリティ送信コマンドを、パリティＦＭＰＫ１４４Ｐへ送る（Ｓ３１２０）。この中間パリティ送信コマンドは、旧パリティの論理ページを格納している論理ページを指定し、中間パリティを伴う。
【００６９】
この時、ＢＥＰＫ１４０のＩ／Ｆ１４１は、バッファ１４３から中間パリティを読み出し、パリティＦＭＰＫ１４４Ｐへ送る。ここで、ＭＰ１２１は、データＦＭＰＫ１４４Ａから読み出した中間パリティをＢＥＰＫ１４０のバッファ１４３に格納した後、ＣＭ１３１に格納することなく、パリティＦＭＰＫへ転送する。中間パリティを転送する際に、ＣＭ１３１を使わないことで、ＣＭ１３１の負荷が低減され、ストレージシステムの性能が向上する。また、各ＦＭＰＫ１４４は、バッファ１４３から近い位置に接続されているため、効率よく中間パリティを転送することができる。
【００７０】
次に図４のパリティＦＭＰＫ１４４Ｐにおいて、ＣＰＵ１４４４は、ポート１４４１を介して中間パリティ送信コマンド及び中間パリティを受け、ＰＦｂから旧パリティを読み出し、旧パリティ及び中間パリティをＸＯＲ回路１４４２へ送る。ＸＯＲ回路１４４２は、旧パリティ及び新パリティから新パリティを算出する。ＣＰＵ１４４４は、新パリティをＰＦａへ書き込み、コントローラ１００へ中間パリティ送信コマンドの正常終了を応答する。
【００７１】
この時のシステム状態を状態３とする。
【００７２】
図１２は、実施例１における中間パリティ送信コマンドの正常終了後のＭＰ１２１の動作を示す。次にＭＰ１２１は、パリティＦＭＰＫ１４４Ｐから中間パリティ送信コマンドの正常終了を受領すると（Ｓ３２１０）、ＭＰ１２１は、前述の二つのＳＭ１３２内の処理段階情報にパリティ生成後段階を示す値を夫々書き込む（Ｓ３２２０）。この時のシステム状態を状態４とする。次にＭＰ１２１は、ＢＥＰＫ１４０に対して、中間パリティが格納されているバッファ領域の解放を指示する。次にＭＰ１２１は、新データ確定コマンドをデータＦＭＰＫ１４４Ａへ送る（Ｓ３２３０）。この新データ確定コマンドは、旧ユーザデータの論理ページを格納している論理ページを指定する。
【００７３】
次に図４のデータＦＭＰＫ１４４Ａにおいて、ＣＰＵ１４４４は、ポート１４４１を介して新データ確定コマンドを受け、新ユーザデータを更新後のユーザデータとして確定し、コントローラ１００へ正常終了を応答する。これにより、コントローラ１００から送信される通常ライトコマンド及び通常リードコマンドに基づき新ユーザデータへのアクセスが可能になる。
【００７４】
この時のシステム状態を状態５とする。
【００７５】
図１３は、実施例１におけるデータＦＭＰＫ１４４Ａへの新データ確定コマンドの正常終了後のＭＰ１２１の動作を示す。次にＭＰ１２１は、データＦＭＰＫ１４４Ａから新データ確定コマンドの正常終了を受領すると（Ｓ３３１０）、新データ確定をパリティＦＭＰＫ１４４Ｐへ送る（Ｓ３３２０）。この新データ確定コマンドは、旧パリティを格納している論理ページを指定する。これにより、コントローラ１００から送信される通常ライトコマンド及び通常リードコマンドに基づく新パリティへのアクセスが可能になる。データＦＭＰＫ１４４Ａへの新データ確定コマンドの送信と、パリティＦＭＰＫ１４４Ｐへの新データ確定コマンドの送信の順序は逆でも良い。
【００７６】
次に図４のパリティＦＭＰＫ１４４Ｐにおいて、ＣＰＵ１４４４は、ポート１４４１を介して新データ確定コマンドを受け、新パリティを更新後のパリティとして確定し、コントローラ１００へ正常終了を応答する。
【００７７】
この時のシステム状態を状態６とする。
【００７８】
図１４は、実施例１におけるパリティＦＭＰＫ１４４Ｐへの新データ確定コマンドの正常終了後のＭＰ１２１の動作を示す。次にＭＰ１２１は、パリティＦＭＰＫ１４４Ｐから新データ確定コマンドの正常終了を受領すると（Ｓ３４１０）、処理段階情報を格納する二つのＳＭ１３２の領域をクリアし（Ｓ３４２０）、ライト処理を終了する。
【００７９】
この時のシステム状態を状態７とする。
【００８０】
以上がライト処理である。カッコ書きはＣＭへのアクセス回数を示す。
【００８１】
このライト処理において、ホスト計算機３０からの新ユーザデータは、ＣＭＰＫ１２０のＣＭ１２１へ二重化して書き込まれ（２回）、一方のＣＭ１２１から読み出して、ＢＥＰＫ１４０のバッファ１４３へ送られる。また、ＣＭ１２１からの新ユーザデータは、バッファ１４３へ書き込まれ、バッファ１４３からデータＦＭＰＫ１４４Ａへ送られる。また、データＦＭＰＫ１４４Ａからの中間パリティは、バッファ１４３へ書き込まれ、バッファ１４３からパリティＦＭＰＫ１４４Ｐへ送られる。これにより、一回のライト処理におけるＣＭ１３１へのアクセス回数は３回となり、ＣＭ１３１へのアクセス回数を低減することができる。
【００８２】
このように、ＦＭＰＫ１４４がパリティの算出を実行し、コントローラ１００がデータＦＭＰＫ１４４Ａから受けた中間パリティをＣＭ１３１へ書き込むことなく、中間パリティをバッファ１４３からパリティＦＭＰＫ１４４Ｐへ送る。これにより、ストレージコントローラにおけるＭＰ及びＣＭの負荷は低減され、ストレージシステムのライト処理性能が向上する。
【００８３】
ここで比較のため、従来のライト処理においてコントローラ１００がＣＭ１２１を用いてＲＡＩＤ５のパリティ演算を行う場合について説明する。この場合、コントローラ１００は、ホスト計算機からの新ユーザデータを二重化してＣＭへ書き込み（２回）、データＦＭＰＫ１４４Ａから旧ユーザデータを取得してＣＭ１２１へ書き込み（１回）、パリティＦＭＰＫ１４４Ｐから旧パリティを取得してＣＭ１２１へ書き込む（１回）。更にコントローラ１００は、ＣＭ１２１内の旧ユーザデータと新ユーザデータと旧パリティを読み出して（３回）から新パリティを算出して二つのＣＭ１２１へ二重化して書き込み（２回）、ＣＭ１２１内の新ユーザデータを読み出して（１回）、データＦＭＰＫ１４４Ａへ書き込み、ＣＭ１２１内の新パリティを読み出して（１回）、パリティＦＭＰＫ１４４Ｐへ書き込む。この場合、１回のライト処理中のＣＭ１３１へのアクセス回数は合計１１回になる。
【００８４】
本実施例では、ＦＭＰＫ１４４に近いＢＥＰＫ１４０のバッファ１４３を用いることで効率よく中間パリティを転送することができる。また、本実施例では、障害時の冗長構成を維持するため、異なるバスに接続された複数のＦＭＰＫ１４４でＲＡＩＤ５を構成する。これらの複数のＦＭＰＫ１４４がＢＥＰＫ１４０のバッファを共有することで、冗長構成を維持しつつ、バッファを用いた中間パリティの転送が可能となる。また、この実施例によれば、新ユーザデータを二つのＣＭＰＫ１２０に格納し、及び、その新ユーザデータに対応する処理段階情報をＳＭ１３２に格納することにより、ストレージシステム１０の信頼性を高めることができる。
【００８５】
なお、新ユーザデータが格納されるＣＭ１３１と、その新ユーザデータに対応する処理段階情報が格納されるＳＭ１３２とは、互いに異なるパッケージ内に設けられていても良い。また、ＦＭＰＫ１４４内のポインタテーブルは、メモリ１４４５に格納されるとしたが、ＦＭ１４４３に格納されても良い。
【００８６】
――――実施例１の引継ぎライト処理――――
【００８７】
以下、ＭＰ障害時の引継ぎライト処理について説明する。
【００８８】
引継ぎライト処理は、ライト処理中のＭＰ１２１に障害が発生した場合の処理である。この場合、他の障害のないＭＰ１２１は、このライト処理を引き継ぐ引継ぎライト処理を行う。ライト処理中、二つのＳＭ１３２に処理段階情報を格納することにより、障害のないＭＰ１２１は、処理段階情報を認識し、処理段階情報に応じた適切な引継ぎライト処理を行うことができる。もし、処理段階情報が失われると、データロストが発生する。データロストとはホスト計算機のライトデータが失われ、回復できない状態になることである。ストレージシステムにおいてデータロストは好ましくない状況である。このため、処理段階情報は二重化して格納される。また、ＭＰ障害発生時のデータロストを回避するために、以下の引継ぎライト処理が実行される。
【００８９】
引継ぎライト処理を説明する。図１５は、実施例１におけるＭＰ障害発生時のＭＰ１２１の動作を示す。まず障害のないＭＰＰＫ１２０のＭＰ１２１は、他のＭＰＰＫ１２０に障害が発生したことを検出する（Ｓ３６１０）。次にＭＰ１２１は、複数あるうちのＳＭ１３２からサーチされていない一つのＳＭ１３２を選択して（Ｓ３６２０）サーチし、サーチされたＳＭ１３２から処理段階情報のパリティ生成前段階を検出したか否かを判定する（Ｓ３６３０）。
【００９０】
パリティ生成前段階を検出した場合（Ｓ３６３０，ＹＥＳ）、ＭＰ１２１は、ＳＭ１３２内の領域情報に基づいて、このパリティ生成前段階をＳＭ１３２内のパリティ生成前キューへ登録し（Ｓ３６４０）、処理をＳ３６７０へ移行させる。
【００９１】
一方、パリティ生成前段階を検出しなかった場合（Ｓ３６３０，ＮＯ）、ＭＰ１２１は、サーチされたＳＭ１３２から処理段階情報のパリティ生成後段階を検出したか否かを判定する（Ｓ３６５０）。
【００９２】
パリティ生成後段階を検出した場合（Ｓ３６５０，ＹＥＳ）、ＭＰ１２１は、ＳＭ１３２内の領域情報に基づいて、このパリティ生成後段階をＳＭ１３２内のパリティ生成後キューへ登録し（Ｓ３６６０）、処理をＳ３６７０へ移行させる。
【００９３】
パリティ生成後段階を検出しなかった場合（Ｓ３６５０，ＮＯ）、ＭＰ１２１は、このフローを終了させる。
【００９４】
Ｓ３６４０の後、及びＳ３６６０の後、ＭＰ１２１は、全てのＳＭ１３２のサーチを完了したか否かを判定する（Ｓ３６７０）。全てのＳＭ１３２のサーチを完了していない場合（Ｓ３６７０，ＮＯ）、ＭＰ１２１は、処理をＳ３６２０へ移行させる。全てのＳＭ１３２のサーチを完了した場合（Ｓ３６７０，ＹＥＳ）、ＭＰ１２１は、このフローを終了させる。
【００９５】
パリティ生成前キューに登録がある場合のＭＰ１２１の動作は、前述のＳ２４１０〜Ｓ２４３０と同様である。つまり、ＭＰ１２１は、ＣＭ１３１に格納された新ユーザデータをＢＥＰＫ１４０に転送する段階から処理を引き継ぐ。
【００９６】
図１６は、実施例１におけるパリティ生成後キューに登録がある場合のＭＰ１２１の動作を示す。ＭＰ１２１は、パリティ生成後キューに登録があることを検出すると（Ｓ３７１０）、新データ確定コマンドをデータＦＭＰＫ１４４Ａへ送る（Ｓ３７２０）。つまり、何れかのＳＭ１３２にパリティ生成後キューの登録がある場合、ＭＰ１２１は、正常時のライト処理と同様、新データ確定コマンドをデータＦＭＰＫ１４４Ａへ送信する処理から引き継ぐ。
【００９７】
以上、障害の発生していないＭＰ１２１は、ＳＭ１３２に格納されている処理段階情報の種類に応じて、障害の発生したＭＰ１２１からライト処理の引継ぎを行うことができる。
【００９８】
――――実施例１の引継ぎライト処理の具体例――――
【００９９】
以下、ＭＰ１２１による、ＭＰ障害時の引継ぎライト処理の幾つかの具体例を説明する。
【０１００】
………………実施例１の引継ぎライト処理の第１の具体例
【０１０１】
ここでは、パリティ生成前段階のＭＰ障害による引継ぎライト処理について説明する。
【０１０２】
図１７は、実施例１におけるパリティ生成前段階のＭＰ障害による引継ぎライト処理を示す。このシーケンス図における動作の主要な要素は、正常時のライト処理のシーケンス図における動作の主要な要素と同様である。
【０１０３】
障害のないＭＰ１２１は、処理段階情報がパリティ生成前段階を示していることを認識すると、前述の正常時のライト処理と同様、新データ送信コマンドをデータＦＭＰＫ１４４Ａへ送る（Ｓ２５３０）。これにより、データＦＭＰＫ１４４Ａは、新ユーザデータを、ＤＦａ（メモリ１４４５）へ書き込む。
【０１０４】
次にコントローラ１００において、ＭＰ１２１は、正常時のライト処理と同様、中間パリティ受信コマンドをデータＦＭＰＫ１４４Ａへ送る（Ｓ２６３０）。これに応じて、データＦＭＰＫ１４４Ａは、中間パリティを算出してコントローラ１００へ送る。これにより、ＢＥＰＫ１４０は、中間パリティをバッファ１４３へ書き込む。
【０１０５】
次にコントローラ１００において、ＭＰ１２１は、正常時のライト処理と同様、中間パリティ送信コマンドをパリティＦＭＰＫ１４４Ｐへ送る（Ｓ３１２０）。これにより、パリティＦＭＰＫ１４４Ｐは、新パリティを算出し、新パリティを、ＰＦａ（メモリ１４４５）へ書き込む。
【０１０６】
次にコントローラ１００において、ＭＰ１２１は、正常時のライト処理と同様、新データ確定コマンドをデータＦＭＰＫ１４４Ａへ送る（Ｓ３２３０）。これにより、データＦＭＰＫ１４４Ａは、新ユーザデータを更新後のユーザデータとして確定する。
【０１０７】
次にコントローラ１００において、ＭＰ１２１は、正常時のライト処理と同様、新データ確定コマンドをパリティＦＭＰＫ１４４Ｐへ送る（Ｓ３３２０）。これにより、パリティＦＭＰＫ１４４Ｐは、新パリティを更新後のパリティとして確定する。
【０１０８】
以上が引継ぎライト処理の第１の具体例である。
【０１０９】
このように、ＳＭ１３２に処理段階を記録することで、あるＭＰ１２１に障害が発生しても、障害の発生していない他のＭＰ１２１がライト処理を引き継ぐことができる。ＭＰ障害時の処理段階情報がパリティ生成前段階を示す場合、障害の発生していない他のＭＰ１２１は、新ユーザデータをＣＭ１３１からＢＥＰＫ１４０に転送する段階から、ライト処理を引き継ぐ。
【０１１０】
………………実施例１の引継ぎライト処理の第２の具体例
【０１１１】
ここでは、パリティ生成後段階のＭＰ障害による引継ぎライト処理について説明する。
【０１１２】
図１８は、実施例１におけるパリティ生成後段階のＭＰ障害による引継ぎライト処理を示す。このシーケンス図における動作対象は、正常時のライト処理のシーケンス図における動作対象と同様である。障害のないＭＰ１２１は、処理段階情報がパリティ生成後段階を示していることを認識すると、正常時のライト処理と同様、新データ確定コマンドをデータＦＭＰＫ１４４Ａへ送る（Ｓ３２３０）。これにより、データＦＭＰＫ１４４Ａは、新ユーザデータを更新後のユーザデータとして確定する。
【０１１３】
次にコントローラ１００において、ＭＰ１２１は、正常時のライト処理と同様、新データ確定コマンドをパリティＦＭＰＫ１４４Ｐにも送る（Ｓ３３２０）。これにより、パリティＦＭＰＫ１４４Ｐは、新パリティを更新後のパリティとして確定する。
【０１１４】
以上が引継ぎライト処理である。
【０１１５】
このように、ＳＭ１３２に処理段階を記録することで、あるＭＰに障害が発生しても、他のＭＰは処理を引き継ぐことができる。ＭＰ障害時の処理段階情報がパリティ生成後段階を示す場合、障害の発生していない他のＭＰ１２１は、データＦＭＰＫ１４４Ａの新ユーザデータを確定させる段階から、ライト処理を引き継ぐ。パリティ生成後段階であれば、新ユーザデータがＦＭＰＫ１４４内に存在するため、再度、ＣＭ１３１からユーザデータを転送する必要がない。つまり、この引継ぎライト処理により、ＣＭ１３１へのアクセスが追加されることはない。
【０１１６】
――――実施例１のライト処理のＦＭＰＫ状態――――
【０１１７】
以下、ライト処理中のパリティＦＭＰＫ１４４Ｐの状態をＦＭＰＫ状態と呼び、以下では、このＦＭＰＫ状態のうち、「ＦＭＰＫ状態」１及び「ＦＭＰＫ状態２」について説明する。図１９は、実施例１におけるＦＭＰＫ状態１を示す。また、図２０は、実施例１におけるＦＭＰＫ状態２を示す。
【０１１８】
以下のＦＭＰＫ１４４の動作の説明において、データＦＭＰＫ１４４Ａにおける旧ユーザデータと、パリティＦＭＰＫ１４４Ｐにおける旧パリティとを、旧データと呼ぶ。また、データＦＭＰＫ１４４Ａにおける新ユーザデータと、パリティＦＭＰＫ１４４Ｐにおける新パリティとを、新データと呼ぶ。つまり、以下に説明するＦＭＰＫ１４４の動作は、データＦＭＰＫ１４４Ａの動作とパリティＦＭＰＫ１４４Ｐの動作とに適用することができる。また、追加データは、引継ぎライト処理により、コントローラ１００からＦＭＰＫ１４４へ再度送られてきた新ユーザデータを示す。ＦＭＰＫ１４４のＣＰＵ１４４４を主体とする動作を、ＦＭＰＫ１４４を主体として説明する。
【０１１９】
各ＦＭＰＫ１４４のメモリ１４４５には、コントローラ１００からのアクセスのための論理ページとＦＭ１４４３内の幾つかの物理ページとの関連付けを示すポインタテーブル１４４７が記憶されている。ポインタテーブル１４４７には、ＦＭＰＫ１４４内の全論理ページに対する物理ページの対応関係が含まれる。以下の説明において、ＦＭＰＫ１４４の論理ページのうち、コントローラ１００からＦＭＰＫ１４４へのコマンドにより指定されている論理ページを対象論理ページと呼ぶ。また、メモリ１４４５内に示されているポインタテーブル１４４７のエントリのうち、対象論理ページのエントリを対象エントリ１４４６と呼ぶ。
【０１２０】
対象エントリ１４４６は、対象論理ページを指定する論理アドレス（例えば、ＬＢＡ：Logical  Block  Address）である論理ページアドレスのフィールドと、旧物理ページを指定する物理アドレスである旧物理ページアドレスのフィールドと、その物理ページと異なる物理ページであって旧物理ページの候補となる新物理ページを指定する物理アドレスである新物理ページアドレスのフィールドとを有する。図面及び以下の説明において、対象エントリ１４４６のうち、論理ページアドレスをＬＡ、旧物理ページアドレスをｏＰＡ、新物理ページアドレスをｎＰＡと呼ぶ。また、図面及び以下の説明において、論理ページアドレスの値をＬＢＡｘｘｘｘ、旧物理ページアドレス及び新物理ページアドレスの値をｐ０、ｐ１、ｐ２と呼ぶ。
【０１２１】
図面において、対象エントリ１４４６内の物理ページアドレスからＦＭ１４４３内への矢印は、ポインタを表し、その物理ページアドレスが矢印の先の物理ページを指すことを表す。また、矢印が点線である場合、その矢印のポインタが削除されたことを表す。
【０１２２】
ＦＭＰＫ１４４は、コントローラ１００から対象論理ページに対する通常ライトコマンド及び通常リードコマンドを受けた場合、ポインタテーブルの対象エントリ１４４６に基づいて、対象論理ページと旧物理ページとを対応付け、旧物理ページにアクセスする。言い換えれば、コントローラ１００からの通常のアクセスは、旧物理ページだけに対して行われる。
【０１２３】
なお、対象エントリ１４４６は、論理ページアドレスの代わりにその論理ページを示す論理ページ番号を格納しても良い。対象エントリ１４４６は、物理ページアドレスの代わりに旧物理ページを示す物理ページ番号を格納しても良い。対象エントリ１４４６は、新物理ページアドレスの代わりに新物理ページを示す物理ページ番号を格納しても良い。ポインタテーブルは、ＣＰＵ１４４４により管理され、更新される。
【０１２４】
以下の説明において、ＦＭＰＫ１４４がデータを格納する物理アドレスの値を、対象エントリ１４４６の旧物理ページアドレス又は新物理ページアドレスに登録することを、そのデータへのポインタ接続と呼ぶ。また、ＦＭＰＫ１４４が、対象エントリ１４４６の旧物理ページアドレス又は新物理ページアドレスに登録された値を、別のデータを格納する物理ページの物理アドレスの値へ変更することを、そのデータのポインタ張替と呼ぶ。また、ＦＭＰＫ１４４が、対象エントリ１４４６の旧物理ページアドレス又は新物理ページアドレスに登録された値を削除することを、そのデータのポインタ削除と呼ぶ。これらは、ＣＰＵ１４４４がポインタテーブルの対象エントリ１４４６を更新することを意味する。
【０１２５】
「ＦＭＰＫ状態１」では、旧物理ページには旧データが格納されている。また、対象エントリ１４４６には、論理ページアドレスと旧物理ページアドレスが格納されている。ＦＭＰＫ状態２において、旧物理ページには旧データが格納されており、新物理ページには新データが格納されている。また、対象エントリ１４４６には、論理ページアドレスと旧物理ページアドレスと新物理ページアドレスが格納されている。「ＦＭＰＫ状態１」においては、旧データが有効データである。また、「ＦＭＰＫ状態２」においては、新データ及び旧データが有効データである。「ＦＭＰＫ状態２」においてリクラメーション処理が実行される場合、新データと旧データは有効データであるため、新データと旧データがそれぞれ格納されているブロックから、別の空きブロックにコピーされる。また、ＦＭコントローラ１４４７は、パリティ演算中の新データ及び／または旧データが含まれるブロックに対しては、リクラメーションが発生しないよう制御しても良い。いずれの場合も、ＦＭコントローラ１４４７は、新データ確定コマンドを受けるまで旧データを消去しない。これにより、後述の障害発生時の処理において、中間パリティを生成することが可能となる。以下では、ポインタテーブル内の対象エントリのみ示して説明するが、ＦＭコントローラ１４４７は、パリティ演算処理や、リード／ライト処理を、複数のエントリ（論理ページ）に対して並列に実行することができる。
【０１２６】
――――各コマンドによるＦＭＰＫ１４４の動作――――
【０１２７】
以下、各コマンドによるＦＭＰＫ１４４の動作について説明する。
【０１２８】
図２１は、実施例１におけるＦＭＰＫ状態１下の新データ送信コマンドによる動作を示す。この動作は、前述のＳ２５３０に対応する。ＦＭＰＫ１４４において、旧物理ページに旧データが格納されている。また、対象エントリ１４４６において、旧物理ページアドレスは旧物理ページを指している。まずＢＥＰＫ１４０は、対象論理ページを指定し新データを伴う新データ送信コマンドをＦＭＰＫ１４４へ送る（Ｓ５１１０）。次にＦＭＰＫ１４４は、新データをメモリ１４４５に一時的に格納し、その後ＦＭ１４４３の新物理ページへ書き込む（Ｓ５１２０）。次にＦＭＰＫ１４４は、対象エントリ１４４６の新物理ページアドレスに新物理ページを指定することにより、新データへのポインタ接続を行う（Ｓ５１３０）。次にＦＭＰＫ１４４は、正常終了応答をコントローラ１００へ送る（Ｓ５１４０）。この動作より、システム状態は状態１から状態２へ遷移する。この新データ送信コマンドにより、旧データが無効とされることなく、新データの書き込み後も、論理ページアドレスと旧物理ページアドレスの対応関係が維持される。後述のＦＭコントローラ１４４７が、新データ確定コマンドを受信すると、論理ページアドレスと旧物理ページアドレスの対応関係が解除される。また、新データ送信コマンドにより、中間パリティ生成前に新データをＦＭの物理ページに書き込むことができる。旧ユーザデータは、パリティＦＭＰＫ１４４Ｐにおいて、新パリティが物理記憶領域に書き込まれるまでは保持される。これにより、障害発生時においても旧ユーザデータを用いて、中間パリティを生成することが可能となる。これに対して、通常のライト処理は、図３１で説明する。
【０１２９】
図２２は、実施例１におけるＦＭＰＫ状態２下の新データ送信コマンドによる動作を示す。ＦＭＰＫ１４４において、旧物理ページに旧データが格納されており、新物理ページに新データが格納されている。また、対象エントリ１４４６において、旧物理ページアドレスは旧物理ページを指しており、新物理ページアドレスは新物理ページを指している。まずコントローラ１００は、対象論理ページを指定し追加データを伴う新データ送信コマンドをＦＭＰＫ１４４へ送る（Ｓ５２１０）。次にＦＭＰＫ１４４は、追加データをメモリ１４４５に一時的に格納し、その後ＦＭ１４４３の旧物理ページ及び新物理ページと異なる物理ページである追加物理ページへ書き込む（Ｓ５２２０）。次にＦＭＰＫ１４４は、対象エントリ１４４６の新物理ページアドレスに追加物理ページを指定することにより、新データから追加データへのポインタ張替を行う（Ｓ５２３０）。次にＦＭＰＫ１４４は、正常終了応答をコントローラ１００へ送る（Ｓ５２４０）。この処理において、ＦＭへ格納されている新データを旧データとはしない。新パリティ生成前の段階のため、旧データとしては、旧パリティを生成した際の旧データが維持される。新データ送信コマンドの処理では、ＦＭＰＫ状態はＦＭＰＫ状態２から遷移しない。つまり、ＦＭＰＫ状態１では、新データ送信コマンドの処理によりＦＭＰＫ状態２に遷移し、ＦＭＰＫ状態２では、新データ送信コマンドの処理によりＦＭＰＫ状態２であることが維持される。つまり、ＦＭＰＫの状態によらず、新データ送信コマンドによりＦＭＰＫ状態の遷移が発生する。これに対して、通常のライト処理は、図３２で説明する。
【０１３０】
図２３は、実施例１におけるＦＭＰＫ状態１下の中間パリティ受信コマンドによる動作を示す。まずコントローラ１００は、中間パリティ受信コマンドをＦＭＰＫ１４４へ送る（Ｓ５３１０）。この中間パリティ受信コマンドは、対象論理ページを指定する。次にＦＭＰＫ１４４は、異常終了応答をコントローラ１００へ送る（Ｓ５３２０）。
【０１３１】
図２４は、実施例１におけるＦＭＰＫ状態２下の中間パリティ受信コマンドによる動作を示す。ＦＭＰＫ１４４において、旧物理ページに旧データが格納されており、新物理ページに新データが格納されている。また、対象エントリ１４４６において、旧物理ページアドレスは旧物理ページを指しており、新物理ページアドレスは新物理ページを指している。つまり、論理ページアドレスに対して、旧物理ページと、新物理ページがマッピングされている。まずコントローラ１００は、中間パリティ受信コマンドをＦＭＰＫ１４４へ送る（Ｓ５４１０）。この中間パリティ受信コマンドは、対象論理ページを指定する。次にＦＭＰＫ１４４は、対象エントリ１４４６の旧物理ページアドレス及び新物理ページアドレスに夫々示されている旧データ及び新データを読み出し、ＸＯＲ回路１４４２により中間パリティを生成する（Ｓ５４２０）。ＦＭＰＫ１４４において、コントローラ１００からの新データ送信コマンドにより、旧データへのマッピングは維持されている。これにより、ＦＭコントローラは、ある論理ページアドレスに対する新ユーザデータと旧ユーザデータを特定することができる。次にＦＭＰＫ１４４は、中間パリティの応答をコントローラ１００へ送る（Ｓ５４３０）。また、図２２のように、追加データがＦＭに格納されている状態でも同様の処理が行われる。つまり、ＦＭコントローラは、追加ユーザデータと旧ユーザデータから、中間パリティを生成する。ＦＭＰＫ１４４では、他のユーザデータの中間パリティ生成処理が、通常のリード／ライト処理が並列して多数実行され、これらの処理にもメモリ１４４５が使用される。このため、ライトされた新ユーザデータをメモリ１４４５に維持し、中間パリティ生成後に中間パリティをＦＭに書き込むと、新ユーザデータをメモリに格納している時間が長くなり、リード／ライト処理の性能低下の要因となる。本実施例では、ＦＭコントローラは、新データをＦＭへ書き込んだ後、中間パリティ受信コマンドを受けた際に、新ユーザデータと旧ユーザデータを読み出し、中間パリティの生成を行う。このため、中間パリティの生成において、ＦＭＰＫ１４４のメモリ１４４５に新ユーザデータ及び旧ユーザデータを格納する時間を短くできる。これにより、リード／ライト処理に使用できるメモリの領域が大きくなり、ＦＭＰＫ１４４の処理性能が向上する。
【０１３２】
図２５は、実施例１におけるＦＭＰＫ状態１下の中間パリティ送信コマンドによる動作を示す。ＦＭＰＫ１４４において、旧物理ページに旧パリティが格納されている。また、対象エントリ１４４６において、旧物理ページアドレスは旧物理ページを指している。まずＢＥＰＫ１４０は、対象論理ページを指定し中間パリティに関連する中間パリティ送信コマンドをＦＭＰＫ１４４へ送る（Ｓ５５１０）。次にＦＭＰＫ１４４は、中間パリティをメモリ１４４５に一時的に格納し、対象エントリ１４４６の旧物理ページアドレスに示されている旧物理ページから旧パリティを読み出し、メモリ１４４５に一時的に格納し、ＸＯＲ回路１４４２により中間パリティと旧パリティから新パリティを生成し、新物理ページへ書き込む（Ｓ５５２０）。次にＦＭＰＫ１４４は、対象エントリ１４４６の新物理ページアドレスに新物理ページを指定することにより、新パリティへのポインタ接続を行う（Ｓ５５３０）。次にＦＭＰＫ１４４は、正常終了応答をコントローラ１００へ送る（Ｓ５５４０）。
【０１３３】
図２６は、実施例１におけるＦＭＰＫ状態２下の中間パリティ送信コマンドによる動作を示す。ＦＭＰＫ１４４において、旧物理ページに旧パリティが格納されており、新物理ページに新パリティが格納されている。また、対象エントリ１４４６において、旧物理ページアドレスは旧物理ページを指しており、新物理ページアドレスは新物理ページを指している。まずコントローラ１００は、対象論理ページを指定し中間パリティを伴う中間パリティ送信コマンドをＦＭＰＫ１４４へ送る（Ｓ５６１０）。次にＦＭＰＫ１４４は、対象エントリ１４４６の旧物理ページアドレスに示されている旧物理ページから旧データを読み出し、ＸＯＲ回路１４４２により中間パリティと旧データから追加パリティを生成し、旧物理ページ及び新物理ページと異なる追加物理ページへ書き込む（Ｓ５６２０）。次にＦＭＰＫ１４４は、対象エントリ１４４６の新物理ページアドレスに追加物理ページを指定することにより、新データから追加データへのポインタ張替を行う（Ｓ５６３０）。次にＦＭＰＫ１４４は、正常終了応答をコントローラ１００へ送る（Ｓ５６４０）。このように、ＦＭＰＫ状態１においても、ＦＭＰＫ状態２においても、ＦＭコントローラが中間パリティ送信コマンドを受信した場合、旧パリティと中間パリティから追加パリティ（新パリティと同一）を生成することができる。
【０１３４】
図２７は、実施例１におけるＦＭＰＫ状態１下の新データ確定コマンドによる動作を示す。この処理によって、データＦＭＰＫ１４４Ａであれば新データが確定し、パリティＦＭＰＫ１４４Ｐであれば新パリティが確定する。ＦＭＰＫ１４４において、旧物理ページに旧データが格納されている。また、対象エントリ１４４６において、旧物理ページアドレスは旧物理ページを指している。まずコントローラ１００は、新データ確定コマンドをＦＭＰＫ１４４へ送る（Ｓ５７１０）。この新データ確定コマンドは、対象論理ページを指定する。次にＦＭＰＫ１４４は、正常終了応答をコントローラ１００へ送る（Ｓ５７２０）。つまり、すでに新データが確定している状態のため、ＦＭＰＫ状態１は正常な状態と認識される。この処理は、新データ及び新パリティが確定した後、ＳＭ１３２での処理段階情報がクリアされる前に、システム障害が発生した場合に、ＦＭＰＫ状態を確認するために実行される。
【０１３５】
図２８は、実施例１におけるＦＭＰＫ状態２下の新データ確定コマンドによる動作を示す。この処理によって、データＦＭＰＫ１４４Ａであれば新データが確定し、パリティＦＭＰＫ１４４Ｐであれば新パリティが確定する。この処理により、ＦＭＰＫ１４４の状態が、ＦＭＰＫ状態２からＦＭＰＫ状態１へ遷移する。ＦＭＰＫ１４４において、旧物理ページに旧データが格納されており、新物理ページに新データが格納されている。また、対象エントリ１４４６において、旧物理ページアドレスは旧物理ページを指しており、新物理ページアドレスは新物理ページを指している。まずコントローラ１００は、新データ確定コマンドをＦＭＰＫ１４４へ送る（Ｓ５８１０）。この新データ確定コマンドは、対象論理ページを指定する。次にＦＭＰＫ１４４は、対象エントリ１４４６の旧物理ページアドレスに新物理ページを指定することにより、旧データから新データへのポインタ張替を行い、対象エントリ１４４６の新物理ページアドレスから新物理ページを削除することにより、新データのポインタ削除を行う（Ｓ５８２０）。次にＦＭＰＫ１４４は、正常終了応答をコントローラ１００へ送る（Ｓ５８３０）。これ以降、ＦＭコントローラがリード要求を受けた場合、新データを応答する。このように、ＦＭＰＫ状態１においても、ＦＭＰＫ状態２においても、新データ確定コマンドを受信すると、ＦＭＰＫ状態１となることが保証される。
【０１３６】
図２９は、実施例１におけるＦＭＰＫ状態１下の通常リードコマンドによる動作を示す。まずコントローラ１００は、通常リードコマンドをＦＭＰＫ１４４へ送る（Ｓ４３１０）。この通常リードコマンドは、対象論理ページを指定する。次にＦＭＰＫ１４４は、対象エントリ１４４６の旧物理ページアドレスに示されている旧データを読み出し、旧データの応答をコントローラ１００へ送る（Ｓ４３２０）。
【０１３７】
図３０は、実施例１におけるＦＭＰＫ状態２下の通常リードコマンドによる動作を示す。ＦＭＰＫ１４４において、旧物理ページに旧データが格納されており、新物理ページに新データが格納されている。状態２では、あるＬＢＡに対して旧物理ページと新物理ページの両方がマッピングされている。つまり、ストレージシステムとして、新データの書き込みが完了していない状態である。まずコントローラ１００は、通常リードコマンドをＦＭＰＫ１４４へ送る（Ｓ４４１０）。この通常リードコマンドは、対象論理ページを指定する。次にＦＭＰＫ１４４は、対象エントリ１４４６の旧物理ページアドレスに示されている旧データを読み出し、旧データの応答をコントローラ１００へ送る（Ｓ４４２０）。
【０１３８】
図３１は、実施例１におけるＦＭＰＫ状態１下の通常ライトコマンドによる動作を示す。ＦＭＰＫ１４４において、旧物理ページに旧データが格納されている。また、対象エントリ１４４６において、旧物理ページアドレスは旧物理ページを指している。まずコントローラ１００は、対象論理ページを指定し新データを伴う通常ライトコマンドをＦＭＰＫ１４４へ送る（Ｓ４１１０）。次にＦＭＰＫ１４４は、新データをＦＭ１４４３の新物理ページへ書き込む（Ｓ４１２０）。次にＦＭＰＫ１４４は、対象エントリ１４４６の旧物理ページアドレスに新物理ページを指定することにより、旧データから新データへのポインタ張替を行う（Ｓ４１３０）。次にＦＭＰＫ１４４は、正常終了応答をコントローラ１００へ送る（Ｓ４１４０）。この動作より、ＦＭＰＫの状態は、ＦＭＰＫ状態１から遷移しない。
【０１３９】
図３２は、実施例１におけるＦＭＰＫ状態２下の通常ライトコマンドによる動作を示す。ＦＭＰＫ１４４において、旧物理ページに旧データが格納されており、新物理ページに新データが格納されている。また、対象エントリ１４４６において、旧物理ページアドレスは旧物理ページを指しており、新物理ページアドレスは新物理ページを指している。まずコントローラ１００は、対象論理ページを指定し追加データを伴う通常ライトコマンドをＦＭＰＫ１４４へ送る（Ｓ４２１０）。次にＦＭＰＫ１４４は、追加データをＦＭ１４４３の旧物理ページ及び新物理ページと異なる物理ページである追加物理ページへ書き込む（Ｓ４２２０）。次にＦＭＰＫ１４４は、対象エントリ１４４６の旧物理ページアドレスに追加物理ページを指定することにより、旧データのポインタ張替を行う（Ｓ４２３０）。次にＦＭＰＫ１４４は、対象エントリ１４４６の新物理ページアドレスから新物理ページを削除することにより、新データのポインタ削除を行う（Ｓ４２４０）。次にＦＭＰＫ１４４は、正常終了応答をコントローラ１００へ送る（Ｓ４２５０）。この動作より、システム状態はＦＭＰＫ状態２からＦＭＰＫ状態１へ遷移する。
【０１４０】
――――システム状態の遷移――――
【０１４１】
図３３は、実施例１における各処理及びシステム障害の発生によるシステム状態の遷移を示す。この実施例において取り得るシステムの状態は、前述のシステム状態１〜７に加え、障害が発生したシステムの状態を示す、システム状態ａ、システム状態ｂ、システム状態ｃ、システム状態ｅ、システム状態ｆ、システム状態Ａ、システム状態Ｂ、システム状態Ｃ、システム状態Ｄ、システム状態Ｅ、システム状態Ｆ、システム状態Ｇ、システム状態Ｉがある。ＦＭＰＫにおける各処理を説明した図面番号をカッコ書きで示す。また、図中の「パリティ更新前段階」「パリティ更新後段階」はＳＭ１３２内の処理段階情報の内容を示す。「ＳＭをクリア」は、新データ及び新パリティが確定しＳＭ１３２からＦＭＰＫに関する処理段階情報が削除されたことを示す。システム状態１〜３では、データＦＭＰＫ１４４Ａ内で論理ページと旧ユーザデータが格納された物理ページの対応関係が保持されている。また、システム状態１〜３では、パリティＦＭＰＫ１４４Ｐ内で論理ページと旧パリティが格納された物理ページの対応関係が保持されている。このため、システム状態１〜３で障害が発生した場合、コントローラ１００がデータＦＭＰＫ１４４Ａに新ユーザデータを送信することで中間パリティを生成することが可能であり、中間パリティと旧パリティから新パリティを生成することが可能である。システム状態４〜６では、データＦＭＰＫ１４４Ａ内で論理ページと新ユーザデータが格納された物理ページの対応関係が保持されている。また、システム状態４〜６では、パリティＦＭＰＫ１４４Ｐ内で論理ページと新パリティが格納された物理ページの対応関係が保持されている。このため、システム状態４〜６で障害が発生した場合、コントローラ１００がデータＦＭＰＫ１４４Ａ及びパリティＦＭＰＫ１４４Ｐに新データ確定コマンドを送信することで、新ユーザデータ及び新パリティを確定できる。以上のように、ＳＭ１３２に格納する処理段階情報は「パリティ更新前段階」と「パリティ更新後段階」の２段階である。これにより、障害発生時のデータロストを回避しつつ、処理段階情報を管理するための負荷を低減することができる。詳細に処理段階情報を管理すると、処理段階情報を記録するためのＳＭ１３２へのアクセスが増え、ＳＭ１３２へのアクセスによる負荷が増加する。
【０１４２】
まず、正常時のシステムの状態遷移について説明する。
【０１４３】
図３４は、実施例１のシステム状態１におけるデータの配置を示す。以後の説明において、コントローラ１００内の二つのＦＥＰＫ１１０を、夫々ＦＥＰＫ１１０Ａ及びＦＥＰＫ１１０Ｂと呼ぶ。また、コントローラ１００内の二つのＭＰＰＫ１２０を、夫々ＭＰＰＫ１２０Ａ及びＭＰＰＫ１２０Ｂと呼ぶ。また、コントローラ１００内の二つのＣＭＰＫ１３０を、夫々ＣＭＰＫ１３０Ａ及びＣＭＰＫ１３０Ｂと呼ぶ。また、コントローラ１００内の二つのＢＥＰＫ１４０を、夫々ＢＥＰＫ１４０Ａ及びＢＥＰＫ１４０Ｂと呼ぶ。また、ＲＡＩＤグループを構成する複数のＦＭＰＫ１４４のうち、データＦＭＰＫ１４４Ａ及びパリティＦＭＰＫ１４４Ｐ以外のＦＭＰＫ１４４を他データＦＭＰＫ１４４Ｅと呼ぶ。また、図面及び以下の説明において、ライト処理による更新前のユーザデータである旧ユーザデータをｏＤｉ、更新後のユーザデータである新ユーザデータをｎＤｉ、ｏＤｉと同一ストライプ内で他データＦＭＰＫ１４４Ｅに格納されているユーザデータである他ユーザデータをｏＤｘ、中間パリティをｍＰ、旧パリティをｏＰ、新パリティをｎＰと呼ぶ。図面及び以下の説明において、ライト処理中のＭＰＰＫ１４４ＡのＭＰ１２１を処理中ＭＰと呼ぶ。
【０１４４】
システム状態１は、コントローラ１００による新データ送信コマンドの送信前である。ＣＭＰＫ１３０ＡのＣＭ１３１とＣＭＰＫ１３０ＢのＣＭ１３１の両方が、新ユーザデータを格納している。また、ＣＭＰＫ１３０ＡのＳＭ１３２とＣＭＰＫ１３０ＢのＳＭ１３２の両方が、パリティ生成前段階を示す。データＦＭＰＫ１４４Ａは、旧ユーザデータを格納している。また、パリティＦＭＰＫ１４４Ｐは、旧パリティを格納している。また、他データＦＭＰＫ１４４Ｅは、他ユーザデータを格納している。また、データＦＭＰＫ１４４Ａにおける対象エントリ１４４６の旧物理ページアドレスは旧ユーザデータを指している。また、パリティＦＭＰＫ１４４Ｐにおける対象エントリ１４４６の旧物理ページアドレスは旧パリティを指している。
【０１４５】
状態１において、コントローラ１００が新データ送信コマンドをデータＦＭＰＫ１４４Ａへ送ることにより、システム状態は状態２へ遷移する。
【０１４６】
図３５は、実施例１のシステム状態２におけるデータの配置を示す。この状態は、コントローラ１００による新データ送信コマンドが完了した後である。新データ送信コマンドにより、ＣＭＰＫ１３０ＡのＣＭ１３１内の新ユーザデータは、ＢＥＰＫ１４０Ａを介してデータＦＭＰＫ１４４Ａへ送られている。これにより、ＢＥＰＫ１４０Ａは、新ユーザデータを格納している。また、データＦＭＰＫ１４４Ａは、旧ユーザデータ及び新ユーザデータを格納している。また、データＦＭＰＫ１４４Ａにおける対象論理ページアドレスには新物理ページアドレスと旧物理ページアドレスの両方が対応付けられている。新物理ページアドレスは新ユーザデータが格納され物理ページを、旧物理ページアドレスは旧ユーザデータが格納された物理ページを指している。
【０１４７】
システム状態２において、コントローラ１００が中間パリティ受信コマンドをデータＦＭＰＫ１４４Ａへ送り、中間パリティ送信コマンドをパリティＦＭＰＫ１４４Ｐへ送ることにより、システム状態は状態３へ遷移する。
【０１４８】
図３６は、実施例１のシステム状態３におけるデータの配置を示す。この状態は、コントローラ１００による中間パリティ受信コマンドが完了した後で、中間パリティ送信コマンドが完了した後である。中間パリティ受信コマンドにより、データＦＭＰＫ１４４Ａで生成された中間パリティは、ＢＥＰＫ１４０Ａのバッファ１７４３へ送られている。中間パリティ送信コマンドにより、ＢＥＰＫ１４０Ａのバッファ１４３内の中間パリティは、ＣＭへ格納されることなくパリティＦＭＰＫ１４４Ｐへ送られ、パリティＦＭＰＫ１４４Ｐにより生成された新パリティは、パリティＦＭＰＫ１４４Ｐへ書き込まれている。これにより、ＢＥＰＫ１４０Ａのバッファ１４３は、新ユーザデータ及び中間パリティを格納している。パリティＦＭＰＫ１４４Ｐにおける対象論理ページアドレスには新物理ページアドレスと旧物理ページアドレスの両方が対応付けられている。新物理ページアドレスは新パリティが格納され物理ページを、旧物理ページアドレスは旧パリティが格納された物理ページを指している。少なくともこの段階まで、データＦＭＰＫ１４４Ａにおいて対象論理ページアドレスと旧ユーザデータが格納された旧物理ページとの対応関係は保持される。このため、後述するように状態１〜３において障害が発生した場合に、データＦＭＰＫ１４４Ａへ新データを送信することで中間パリティを生成することができる。
【０１４９】
システム状態３において、コントローラ１００がＳＭ１３２の処理段階情報をパリティ更新後段階へ変更することにより、システム状態は状態４へ遷移する。
【０１５０】
図３７は、実施例１のシステム状態４におけるデータの配置を示す。この状態は、コントローラ１００による中間パリティ送信コマンドが送信され、パリティＦＭＰＫにおいて新パリティのライトが完了した後で、ＭＰがＳＭ１３２内の処理段階情報をパリティ生成後段階に更新した後である。処理段階情報は、冗長化のためにＣＭＰＫ１３０ＡのＳＭ１３２とＣＭＰＫ１３０ＢのＳＭ１３２の両方に格納される。
【０１５１】
システム状態４において、コントローラ１００が新データ確定コマンドをデータＦＭＰＫ１４４Ａへ送ることにより、システム状態は状態５へ遷移する。
【０１５２】
図３８は、実施例１のシステム状態５におけるデータの配置を示す。この状態は、コントローラ１００による新ユーザデータへの新データ確定コマンドが完了した後である。これにより、データＦＭＰＫ１４４Ａにおける対象エントリ１４４６の旧物理ページアドレスは新ユーザデータを指しており、新物理ページアドレスはクリアされている。パリティＦＭＰＫ１４４Ｐにおいて、新パリティがＦＭの物理ページへライトされた後は、データＦＭＰＫ１４４Ａにおける旧データは不要となる。新データ確定コマンドにより、論理ページと旧データが格納された旧物理ページとのマッピングは解除され、旧物理ページは消去される。ＦＭを備える記憶デバイスにおいては、リクラメーションやウェアレベリング等の処理のために空き領域が必要となる。よって、本実施例では、旧データが不要となった段階で、旧データをマッピングから外すことにより消去し、適切な処理を行うことでＦＭに空きブロック（空き容量）を確保することができる。
【０１５３】
システム状態５において、コントローラ１００が新データ確定コマンドをパリティＦＭＰＫ１４４Ｐへ送ることにより、システム状態は状態６へ遷移する。
【０１５４】
図３９は、実施例１のシステム状態６におけるデータの配置を示す。この状態は、コントローラ１００によるパリティＦＭＰＫ１４４Ｐへの新データ確定コマンドが完了した後である。これにより、パリティＦＭＰＫ１４４Ｐにおける対象エントリ１４４６の旧物理ページアドレスは新パリティを指しており、新物理ページアドレスはクリアされている。
【０１５５】
システム状態６において、コントローラ１００がＳＭ１３２の処理段階情報をクリアすることにより、システム状態はシステム状態７へ遷移する。
【０１５６】
図４０は、実施例１のシステム状態７におけるデータの配置を示す。このシステム状態７は、コントローラ１００により、ＳＭ１３２の処理段階情報がクリアされた後である。この処理により、ＣＭＰＫ１３０ＡのＳＭ１３２とＣＭＰＫ１３０ＢのＳＭ１３２の両方が、クリアされる。
【０１５７】
以下、状態１〜７のそれぞれにおいて、システム障害が発生した場合の復旧処理を説明する。
【０１５８】
ここでのシステム障害は、複数のＭＰＰＫ１２０、複数のＣＭＰＫ１３０、複数のＢＥＰＫ１４０、複数のＦＭＰＫ１４４の同時一点障害である。このシステム障害において、一つの種類のパッケージにおいて障害が発生したパッケージの数は１以下である。また、このシステム障害は、同時に複数の種類のパッケージに障害が発生したことを含む。以下に説明するように、複数種類のパッケージに同時に障害が発生した場合であっても、データロストを発生させずに復旧することが可能である。
【０１５９】
状態１において、システム障害が発生することにより、システム状態は状態ａへ遷移する。
【０１６０】
図４１は、実施例１のシステム状態ａにおけるデータの配置を示す。このシステム状態ａは、ライト処理中のＭＰＰＫ１２０Ａと、ＣＭＰＫ１３０Ａと、新ユーザデータを格納しているＢＥＰＫ１４０Ａと、他ユーザデータを格納しているＦＭＰＫ１４４Ｃとに、障害が発生した場合を示す。図面において障害が発生した部分を“Ｘ”で示す。図面及び以下の説明において、障害が発生したＭＰＰＫ１２０Ａの処理を引き継いだＭＰＰＫ１４４ＢのＭＰ１２１を引継ぎＭＰと呼ぶ。引継ぎＭＰは、ＣＭＰＫ１３０ＢのＳＭ１３２内の処理段階情報がパリティ生成前段階を示すことを検出する。これに応じて、引継ぎＭＰは、新データ送信コマンドを送信する。
【０１６１】
システム状態ａにおいて、コントローラ１００が新データ送信コマンドをデータＦＭＰＫ１４４Ａへ送ることにより、システム状態はシステム状態Ａへ遷移する。
【０１６２】
図４２は、実施例１のシステム状態Ａにおけるデータの配置を示す。このシステム状態Ａは、コントローラ１００による新データ送信コマンドが完了した後である。新データ送信コマンドにより、障害の無いＣＭＰＫ１３０ＢのＣＭ１３１内の新ユーザデータは、障害の無いＢＥＰＫ１４０Ｂを介してデータＦＭＰＫ１４４Ａへ送られている。これにより、ＢＥＰＫ１４０Ｂは、新ユーザデータを格納している。また、データＦＭＰＫ１４４Ａは、旧ユーザデータ及び新ユーザデータを格納している。また、データＦＭＰＫ１４４Ａにおける対象エントリ１４４６の新物理ページアドレスは新ユーザデータを指している。
【０１６３】
システム状態Ａにおいて、コントローラ１００が中間パリティ受信コマンドをデータＦＭＰＫ１４４Ａへ送り、中間パリティ送信コマンドをパリティＦＭＰＫ１４４Ｐへ送ることにより、システム状態は状態Ｂへ遷移する。
【０１６４】
図４３は、実施例１のシステム状態Ｂにおけるデータの配置を示す。この状態は、ＢＥＰＫ１４０による中間パリティ受信コマンドが完了した後で、中間パリティ送信コマンドが完了した後である。中間パリティ受信コマンドにより、データＦＭＰＫ１４４Ａで生成された中間パリティは、ＢＥＰＫ１４０Ｂへ送られている。中間パリティ送信コマンドにより、ＢＥＰＫ１４０Ｂのバッファ内の中間パリティは、ＣＭ１３１に格納されることなく、パリティＦＭＰＫ１４４Ｐへ送られ、パリティＦＭＰＫ１４４Ｐにより生成された新パリティは、パリティＦＭＰＫ１４４Ｐへ書き込まれている。これにより、ＢＥＰＫ１４０Ｂは、新ユーザデータ及び中間パリティを格納している。パリティＦＭＰＫ１４４Ｐは、旧パリティ及び新パリティを格納している。
【０１６５】
システム状態Ｂにおいて、コントローラ１００がＳＭ１３２の処理段階情報を変更することにより、システム状態はシステム状態Ｃへ遷移する。
【０１６６】
図４４は、実施例１のシステム状態Ｃにおけるデータの配置を示す。この状態は、コントローラ１００によるパリティ送信コマンドが完了した後で、ＳＭ１３２内の処理段階情報を更新した後である。これにより、ＣＭＰＫ１３０ＢのＳＭ１３２は、パリティ生成後段階を示す。
【０１６７】
システム状態Ｃにおいて、コントローラ１００が新データ確定コマンドをデータＦＭＰＫ１４４Ａへ送ることにより、システム状態はシステム状態Ｄへ遷移する。
【０１６８】
図４５は、実施例１のシステム状態Ｄにおけるデータの配置を示す。このシステム状態Ｄは、コントローラ１００による新ユーザデータへの新データ確定コマンドが完了した後である。これにより、データＦＭＰＫ１４４Ａにおける対象エントリ１４４６の旧物理ページアドレスは新ユーザデータを指しており、新物理ページアドレスはクリアされている。
【０１６９】
システム状態Ｄにおいて、コントローラ１００が新データ確定コマンドをパリティＦＭＰＫ１４４Ｐへ送ることにより、システム状態はシステム状態Ｅへ遷移する。
【０１７０】
図４６は、実施例１のシステム状態Ｅにおけるデータの配置を示す。このシステム状態は、コントローラ１００による新パリティへの新データ確定コマンドが完了した後である。これにより、パリティＦＭＰＫ１４４Ｐにおける対象エントリ１４４６の旧物理ページアドレスは新パリティを指しており、新物理ページアドレスはクリアされている。
【０１７１】
システム状態Ｅにおいて、コントローラ１００がＳＭ１３２の処理段階情報をクリアすることにより、システム状態はシステム状態Ｆへ遷移する。
【０１７２】
図４７は、実施例１のシステム状態Ｆにおけるデータの配置を示す。このシステム状態Ｆでは、ＣＭＰＫ１３０ＢのＳＭ１３２に格納された処理段階情報は、クリアされている。このシステム状態Ｆは、パリティ生成に関連するライト処理が完了した状態である。システム状態がシステム状態Ｆに遷移することでデータロストが発生せずにライト処理が完了したことが確定する。
【０１７３】
システム状態２において、システム障害が発生することにより、システム状態はシステム状態ｂへ遷移する。
【０１７４】
図４８は、実施例１のシステム状態ｂにおけるデータの配置を示す。このシステム状態ｂは、システム状態ａと同様、ライト処理中のＭＰＰＫ１４４Ａと、ＣＭＰＫ１３０Ａと、新ユーザデータを格納しているＢＥＰＫ１４０Ａと、他ユーザデータを格納しているＦＭＰＫ１４４Ｃとに、障害が発生した場合を示す。引継ぎＭＰは、ＣＭＰＫ１３０ＢのＳＭ１３２内の処理段階情報がパリティ生成前段階を示すことを検出する。これに応じて、引継ぎＭＰは、新データ送信コマンドを送信する。このシステム状態ｂにおいて、旧ユーザデータが新ユーザデータのライト対象の論理ページと対応付けられているため、新データを送信することで、中間パリティの生成を行うことができる。
【０１７５】
システム状態ｂにおいて、コントローラ１００が新データ送信コマンドをデータＦＭＰＫ１４４Ａへ送ることにより、システム状態は状態Ａへ遷移する。この後、システム状態は、システム状態Ｂ→Ｃ→Ｄ→Ｅ→Ｆと遷移することができる。
【０１７６】
システム状態３において、システム障害が発生することにより、システム状態はシステム状態ｃへ遷移する。
【０１７７】
図４９は、実施例１のシステム状態ｃにおけるデータの配置を示す。この状態は、状態ａと同様、ライト処理中のＭＰＰＫ１４４Ａと、ＣＭＰＫ１３０Ａと、新ユーザデータを格納しているＢＥＰＫ１４０Ａと、他ユーザデータを格納しているＦＭＰＫ１４４Ｃとに、障害が発生した場合を示す。引継ぎＭＰは、ＣＭＰＫ１３０ＢのＳＭ１３２内の処理段階情報がパリティ生成前段階を示すことを検出する。これに応じて、引継ぎＭＰは、新データ送信コマンドを送信する。また、データＦＭＰＫ１４４Ａは、旧ユーザデータ及び新ユーザデータを格納している。また、データＦＭＰＫ１４４Ａの対象エントリ１４４６において、旧物理ページアドレスは旧ユーザデータを指しており、新物理ページアドレスは新ユーザデータを指している。また、パリティＦＭＰＫ１４４Ｐは、旧パリティ及び新パリティを格納している。また、パリティＦＭＰＫ１４４Ｐの対象エントリ１４４６において、旧物理ページアドレスは旧パリティを指しており、新物理ページアドレスは新パリティを指している。システム状態ｃのデータＦＭＰＫにおいて、旧ユーザデータと新ユーザデータのライト対象の論理ページとの対応が維持されているため、新データを送信することで、中間パリティの生成を行うことができる。
【０１７８】
システム状態ｃにおいて、コントローラ１００が新データ送信コマンドをデータＦＭＰＫ１４４Ａへ送ることにより、システム状態は状態Ｇへ遷移する。
【０１７９】
図５０は、実施例１のシステム状態Ｇにおけるデータの配置を示す。このシステム状態Ｇは、コントローラ１００による新データ送信コマンドが完了した後である。システム状態Ａと同様、新データ送信コマンドにより、障害の無いＣＭＰＫ１３０ＢのＣＭ１３１内の新ユーザデータは、障害の無いＢＥＰＫ１４０Ｂを介してデータＦＭＰＫ１４４Ａへ送られている。これにより、ＢＥＰＫ１４０Ｂは、新ユーザデータを格納している。システム状態ＧのデータＦＭＰＫ１４４Ａにおいて、旧ユーザデータと新ユーザデータのライト対象の論理ページとの対応が維持されているため、新データを送信することで、中間パリティの生成を行うことができる。また、状態ＧのパリティＦＭＰＫ１４４Ｐにおいて、旧パリティと対象の論理ページの対応が維持されているため、中間パリティを送信することで、新パリティの生成を行うことができる。
【０１８０】
システム状態Ｇにおいて、コントローラ１００が中間パリティ受信コマンドをデータＦＭＰＫ１４４Ａへ送り、中間パリティ送信コマンドをパリティＦＭＰＫ１４４Ｐへ送ることにより、システム状態はシステム状態Ｂへ遷移する。この後、状態Ｃ，Ｄ，Ｅ，Ｆと遷移できる。
【０１８１】
状態４において、システム障害が発生することにより、システム状態は状態Ｃへ遷移する。この後、システム状態は、システム状態Ｄ→Ｅ→Ｆと遷移することができる。
【０１８２】
システム状態５において、システム障害が発生することにより、システム状態はシステム状態ｅへ遷移する。
【０１８３】
図５１は、実施例１のシステム状態ｅにおけるデータの配置を示す。このシステム状態ｅは、システム状態ａと同様、ライト処理中のＭＰＰＫ１４４Ａと、ＣＭＰＫ１３０Ａと、新ユーザデータを格納しているＢＥＰＫ１４０Ａと、他ユーザデータを格納しているＦＭＰＫ１４４Ｃとに、障害が発生した場合を示す。引継ぎＭＰは、ＣＭＰＫ１３０ＢのＳＭ１３２内の処理段階情報がパリティ生成後段階を示すことを検出する。つまり、コントローラ１００によるパリティ送信コマンドが完了した後で、ＳＭ１３２内の処理段階情報を更新した後である。これに応じて、引継ぎＭＰは、データＦＭＰＫ１４４Ａへ新データ確定コマンドを送信する。また、データＦＭＰＫ１４４Ａは、新ユーザデータを格納している。また、データＦＭＰＫ１４４Ａの対象エントリ１４４６において、旧物理ページアドレスは新ユーザデータを指している。また、パリティＦＭＰＫ１４４Ｐは、旧パリティ及び新パリティを格納している。また、パリティＦＭＰＫ１４４Ｐの対象エントリ１４４６において、旧物理ページアドレスは旧パリティを指しており、新物理ページアドレスは新パリティを指している。
【０１８４】
システム状態ｅにおいて、コントローラ１００が新データ確定コマンドをデータＦＭＰＫ１４４Ａへ送ることにより、システム状態は状態Ｄへ遷移する。この後、システム状態は、システム状態Ｅ→Ｆと遷移することができる。
【０１８５】
システム状態６において、システム障害が発生することにより、システム状態はシステム状態ｆへ遷移する。
【０１８６】
図５２は、実施例１のシステム状態ｆにおけるデータの配置を示す。この状態は、システム状態ａと同様、ライト処理中のＭＰＰＫ１４４Ａと、ＣＭＰＫ１３０Ａと、新ユーザデータを格納しているＢＥＰＫ１４０Ａと、他ユーザデータを格納しているＦＭＰＫ１４４Ｃとに、障害が発生した場合を示す。引継ぎＭＰは、ＣＭＰＫ１３０ＢのＳＭ１３２内の処理段階情報がパリティ生成後段階を示すことを検出する。つまり、コントローラ１００によるパリティ送信コマンドが完了した後で、ＳＭ１３２内の処理段階情報を更新した後である。これに応じて、引継ぎＭＰは、データＦＭＰＫ１４４Ａへ新データ確定コマンドを送信する。また、データＦＭＰＫ１４４Ａは、新ユーザデータを格納している。また、データＦＭＰＫ１４４Ａの対象エントリ１４４６において、旧物理ページアドレスは新ユーザデータを指している。また、パリティＦＭＰＫ１４４Ｐは、新パリティを格納している。また、パリティＦＭＰＫ１４４Ｐの対象エントリ１４４６において、旧物理ページアドレスは新パリティを指している。
【０１８７】
システム状態ｆにおいて、コントローラ１００が新データ確定コマンドをデータＦＭＰＫ１４４Ａへ送ることにより、システム状態は状態Ｉへ遷移する。
【０１８８】
図５３は、実施例１のシステム状態Ｉにおけるデータの配置を示す。このシステム状態ｆは、システム状態ａと同様、ライト処理中のＭＰＰＫ１４４Ａと、ＣＭＰＫ１３０Ａと、新ユーザデータを格納しているＢＥＰＫ１４０Ａと、他ユーザデータを格納しているＦＭＰＫ１４４Ｃとに、障害が発生した場合を示す。この状態は、コントローラ１００による新ユーザデータへの新データ確定コマンドが完了した後である。これに応じて、引継ぎＭＰは、パリティＦＭＰＫ１４４Ｐへ新データ確定コマンドを送信する。また、データＦＭＰＫ１４４Ａは、新ユーザデータを格納している。また、データＦＭＰＫ１４４Ａの対象エントリ１４４６において、旧物理ページアドレスは新ユーザデータを指している。また、パリティＦＭＰＫ１４４Ｐは、新パリティを格納している。また、パリティＦＭＰＫ１４４Ｐの対象エントリ１４４６において、旧物理ページアドレスは新パリティを指している。
【０１８９】
システム状態Ｉにおいて、コントローラ１００が新データ確定コマンドをパリティＦＭＰＫ１４４Ｐへ送ることにより、システム状態は状態Ｅへ遷移する。この後、システム状態は、システム状態Ｆへ遷移することができる。
【０１９０】
システム状態７において、システム障害が発生することにより、システム状態はシステム状態Ｆへ遷移する。ここで、システム状態７はＦＭＰＫ１４４に格納されたデータが確定しており、処理段階情報がクリアされているため、システム障害が発生して状態Ｆになっても追加の処理を必要としない。したがって、システム障害が発生してもシステム状態７又は状態Ｆに遷移することができるならば、このＲＡＩＤのストライプ列におけるｏＤｉ、障害の発生していないｏＤ１…ｏＤｙ、をホスト計算機３０はリードすることがでる。よって、障害の発生したoDxもストライプ列内のｏＤ１…ｎＤｉ…ｏＤｙ、ｎＰをＸＯＲすることでホスト計算機３０はリードすることができるため、データロストは発生しない。
【０１９１】
ここでは、ＭＰＰＫ１２０、ＣＭＰＫ１３０、ＢＥＰＫ１４０の夫々の数を、２としたが、３以上であっても良い。ＭＰＰＫ１２０、ＣＭＰＫ１３０、ＢＥＰＫ１４０の何れかの数が１であっても、その一つの部分に障害が発生していない場合、同様の動作を行うことができる。
【０１９２】
以上に説明した状態遷移によれば、システム状態１〜７の何れにおいてシステム障害が発生してもデータロストは発生しない。つまり、複数のＭＰＰＫ１２０、複数のＣＭＰＫ１３０、複数のＢＥＰＫ１４０、複数のＦＭＰＫ１４４において同時一点障害が発生しても、データロストは発生しない。これにより、ストレージシステム１０の信頼性を向上させることができる。なお、本実施例では、ＦＭＰＫ１４４の代わりに、ＸＯＲ機能を有する他のストレージシステムを接続し、中間パリティ及び／又はパリティの演算処理を他のストレージ装置に行わせることで実施することもできる。また、通常のフラッシュメモリの場合では、データの上書きが出来ないことから、通常ライトでは論理ページに新物理ページが割当てられる。本実施例では、通常、新物理ページが割当てられた場合に無効扱いとされる旧物理ページに格納されているデータを用いるので、本実施例により、ライト処理回数及び消去回数が増加することがない。すなわち、本実施例では、フラッシュメモリの寿命が縮まることがない。
【実施例２】
【０１９３】
この実施例は、ＦＭＰＫ１４４が、ＳＣＳＩコマンドの要求に基づくＸＯＲ機能をサポートしている場合を示す。ＳＣＳＩコマンドは例えば、ＸＤＷＲＩＴＥ、ＸＤＲＥＡＤ、ＸＰＷＲＩＴＥである。ストレージシステム１０におけるその他の構成は、実施例１と同様である。本実施例では、これらのＳＣＳＩコマンドをサポートしていれば、記憶媒体は、フラッシュメモリデバイスに限定されない。
【０１９４】
――――実施例２のライト処理――――
【０１９５】
正常時のライト処理について説明する。
【０１９６】
図５４は、実施例２におけるライト処理を示す。このシーケンス図において、データＦＭＰＫ１４４Ａ内のＤＦａ及びＤＦｂは夫々、データＦＭＰＫ１４４Ａ内のメモリ１４４５、ＦＭ１４４３（物理ページ）を示す。また、パリティＦＭＰＫ１４４Ｐ内のＤＦａ及びＤＦｂは夫々、パリティＦＭＰＫ１４４Ｐ内のメモリ１４４５、ＦＭ１４４３（物理ページ）を示す。また、このシーケンス図におけるその他の動作の主要な要素は、実施例１のライト処理のシーケンス図における動作の主要な要素と同様である。
【０１９７】
本実施例では、ＳＭ１３２に格納される処理段階情報は「パリティ生成前」、「データメディア更新中」、「パリティメディア更新中」及び「パリティ生成後」である。本実施例では、実施例１と比較すると、ＳＭ１３２に格納される処理段階情報が多い。まずＭＰ１２１は、実施例１のライト処理と同様に、Ｓ２１１０〜Ｓ２３５０の処理を行う。これに応じてＭＰ１２１は、新ユーザデータを格納している二つのＣＭ１３１の領域に対応する二つのＳＭ１３２内の処理段階情報の値を、データメディア更新中に変更する。
【０１９８】
次にＭＰ１２１は、ＸＤＷＲＩＴＥコマンドをデータＦＭＰＫ１４４Ａへ送る（Ｓ６２１０）。このＸＤＷＲＩＴＥコマンドは、旧ユーザデータを格納している論理ページを指定し、新ユーザデータを伴う。この時、ＭＰ１２１からの指示により、ＢＥＰＫ１４０はバッファ１４３を確保し、ＣＭ１２１から新ユーザデータを読み出し、確保したバッファ１４３へ書き込む。次にＭＰ１２１は、バッファ１４３から新ユーザデータを読み出し、新ユーザデータをデータＦＭＰＫ１４４Ａへ送る。
【０１９９】
次にデータＦＭＰＫ１４４Ａは、コントローラ１００からＸＤＷＲＩＴＥコマンド及び新ユーザデータを受ける。これに応じて、データＦＭＰＫ１４４Ａは、新ユーザデータをＦＭ１４４３へ書き込む。次にデータＦＭＰＫ１４４Ａは、ＦＭ１４４３内の旧ユーザデータと新ユーザデータを読み出し、ＸＯＲ回路１４４２により中間パリティを生成し、中間パリティをメモリ１４４５へ書き込む。次にデータＦＭＰＫ１４４Ａは、ＸＤＷＲＩＴＥコマンドを正常に終了したことをコントローラ１００へ送る。
【０２００】
次にＭＰ１２１は、データＦＭＰＫ１４４ＡからＸＤＷＲＩＴＥコマンドの正常終了を受ける。これに応じて、ＭＰ１２１は、ＸＤＲＥＡＤコマンドをデータＦＭＰＫ１４４Ａへ送る（Ｓ６２２０）。このＸＤＲＥＡＤコマンドは、中間パリティを格納しているメモリ１４４５のアドレスを指定する。なお、中間パリティを格納しているメモリ１４４５のアドレスは、メモリ１４４５に格納されている。
【０２０１】
次にデータＦＭＰＫ１４４Ａは、コントローラ１００からＸＤＲＥＡＤコマンドを受ける。これに応じて、データＦＭＰＫ１４４Ａは、メモリ１４４５内の情報に基づきメモリ１４４５内の中間パリティを読み出し、中間パリティをコントローラ１００へ送ると共に、ＸＤＲＥＡＤコマンドの正常終了をコントローラ１００へ送る。
【０２０２】
この時、ＢＥＰＫ１４０は、データＦＭＰＫ１４４Ａから中間パリティを受け、バッファ１４３へ書き込む。次にＭＰ１２１は、データＦＭＰＫ１４４ＡからＸＤＲＥＡＤコマンドの正常終了を受ける。これに応じて、ＭＰ１２１は、処理段階情報の値を、パリティメディア更新中に変更する。
【０２０３】
次にＭＰ１２１は、ＸＰＷＲＩＴＥコマンドをパリティＦＭＰＫ１４４Ｐへ送る（Ｓ６４１０）。このＸＰＷＲＩＴＥコマンドは、旧パリティを格納している論理ページを指定し、中間パリティを伴う。この時、ＭＰ１２１からの指示により、ＢＥＰＫ１４０は、バッファ１４３から中間パリティを読み出し、パリティＦＭＰＫ１４４Ｐへ送る。
【０２０４】
次にパリティＦＭＰＫ１４４Ｐは、コントローラ１００からＸＰＷＲＩＴＥコマンド及び中間パリティを受ける。これに応じて、パリティＦＭＰＫ１４４Ｐは、中間パリティを受け、メモリ１４４５へ書き込む。パリティＦＭＰＫ１４４Ｐは、ＰＦｂ内の旧パリティとメモリ１４４５内の中間パリティとのＸＯＲ演算により、新パリティを生成し、ＦＭ１４４３へ書き込む。次にパリティＦＭＰＫ１４４Ｐは、ＸＰＷＲＩＴＥコマンドの正常終了をコントローラ１００へ送る。
【０２０５】
次にＭＰ１２１は、ＳＭ１３２に格納されている処理段階情報をクリアする。
【０２０６】
以上がライト処理である。
【０２０７】
このように、コントローラ１００は、データＦＭＰＫ１４４Ａから受けた中間パリティをＣＭ１３１へ書き込むことなく、中間パリティをバッファ１４３からパリティＦＭＰＫ１４４Ｐへ送る。これにより、ライト処理中のＣＭ１３１へのアクセス回数は３回となり、ＣＭ１３１へのアクセス回数を低減することができる（段落０２０８参照）。
【０２０８】
また、この実施例によれば、新ユーザデータ、処理段階情報の夫々を、二つのＣＭＰＫ１２０に格納することにより、ストレージシステム１０の信頼性を高めることができる。
【０２０９】
また、この実施例によれば、新データ確定コマンド（Ｓ３２３０及びＳ３３２０の）が不要であることから、ストレージシステム１０の速度を高めることができる。
【０２１０】
また、この実施例において、ストレージシステム１０に採用される記憶媒体は、磁気記憶媒体や光記憶媒体等、他の不揮発性記憶媒体であっても良い。
【０２１１】
――――実施例２の引継ぎライト処理の具体例――――
【０２１２】
以下、ＭＰ障害時の引継ぎライト処理の幾つかの具体例を説明する。
【０２１３】
………………実施例２の引継ぎライト処理の第１の具体例
【０２１４】
ここでは、パリティ生成前段階のＭＰ障害による引継ぎライト処理について説明する。
【０２１５】
図５５は、実施例２におけるパリティ生成前のＭＰ障害による引継ぎライト処理を示す。このシーケンス図における動作対象は、正常時のライト処理のシーケンス図における動作対象と同様である。
【０２１６】
障害のないＭＰ１２１は、他のＭＰ１２１に障害が発生したことを認識すると、処理段階情報がパリティ生成前を示していることを認識する。これに応じて、ＭＰ１２１は、新ユーザデータを格納している二つのＣＭ１３１の領域に対応する二つのＳＭ１３２内の処理段階情報の値を、データメディア更新中に変更する。
【０２１７】
次にＭＰ１２１は、正常時と同様、Ｓ６２１０〜Ｓ６４１０の処理を行う。つまり、障害が発生していないＭＰ１２１は、ＸＤＷＲＩＴＥコマンドをデータＦＭＰＫ１４４Ａへ送る処理（Ｓ６２１０）からライト処理を引き継ぐ。ＣＭ１２１には、新ユーザデータが格納されているので、ＢＥＰＫ１４０は、ＭＰ１２１からの指示により、ＣＭ１２１から新ユーザデータを読み出し、バッファ１４３へ書き込み、バッファ１４３から新ユーザデータを読み出し、新ユーザデータをデータＦＭＰＫ１４４Ａへ送る。これにより、障害の発生していないＭＰ１２１がライト処理を引き継ぎ、正常にライト処理を行う事が出来る。
【０２１８】
次にＭＰ１２１は、ＳＭ１３２に格納されている処理段階情報をクリアする。
【０２１９】
以上が引継ぎライト処理である。
【０２２０】
このように、パリティ生成前にＭＰ障害が発生しても、障害の発生していない他のＭＰ１２１が、ＳＭ１３２に格納されている処理段階情報に基づき、ライト処理を引き継いでライト処理を正常に行うことができる。ＭＰ障害時の処理段階情報が、パリティ生成前だった場合、ＭＰ１２１は、ＸＤＷＲＩＴＥコマンドをデータＦＭＰＫ１４４Ａへ送る処理（Ｓ６２１０）からライト処理を引き継ぐ。
【０２２１】
………………実施例２の引継ぎライト処理の第２の具体例
【０２２２】
ここでは、データメディア更新中段階のＭＰ障害による引継ぎライト処理について説明する。
【０２２３】
図５６は、実施例２におけるデータメディア更新中のＭＰ障害による引継ぎライト処理を示す。このシーケンス図における動作対象は、正常時のライト処理のシーケンス図における動作対象と同様である。図面及び以下の説明において、複数のＦＭＰＫ１４４で構成されているＲＡＩＤグループ内で旧ユーザデータ以外のユーザデータを他ユーザデータと呼び、他ユーザデータを格納しているＦＭＰＫ１４４を他データＦＭＰＫ１４４Ｅと呼ぶ。また、図面及び以下の説明において、他ユーザデータをｏＤ１，…，ｏＤｎと呼ぶ。
【０２２４】
障害の発生していないＭＰ１２１は、他のＭＰ１２１で障害が発生していることを認識すると、処理段階情報がデータメディア更新中を示していることを認識する。これに応じて、ＭＰ１２１は、通常リード（ＲＥＡＤ）コマンドを他データＦＭＰＫ１４４Ｅへ送る（Ｓ６５１０）。つまり、障害の発生していないＭＰ１２１は、新パリティを生成する処理から、ライト処理を引き継ぐ。この通常リードコマンドは、他ユーザデータを格納している論理ページを指定する。これに応じて、他データＦＭＰＫ１４４Ｅは、他ユーザデータを読み出し、他ユーザデータをコントローラ１００へ送る。これにより、ＢＥＰＫ１４０は、他ユーザデータをバッファ１４３へ書き込み、更に他ユーザデータをＣＭ１２１へ書き込む。
【０２２５】
次にＭＰ１２１は、ＣＭ１２１内の新ユーザデータ及び他ユーザデータのＸＯＲ演算により、新パリティを生成し、新パリティを二つのＣＭ１２１へ書き込む（Ｓ６５２０）。次にＭＰ１２１は、これらの二つのＣＭ１２１に対応する二つのＳＭ１３２内の処理段階情報にパリティ生成後を示す値を夫々書き込む。
【０２２６】
次にＭＰ１２１は、通常ライト（ＷＲＩＴＥ）コマンドをデータＦＭＰＫ１４４Ａへ送る（Ｓ６５３０）。この通常ライトコマンドは、新ユーザデータを伴う。これにより、ＢＥＰＫ１４０は、ＣＭ１２１内の新ユーザデータをバッファ１４３へ書き込み、データＦＭＰＫ１４４Ａへ送る。これに応じて、データＦＭＰＫ１４４Ａは、新ユーザデータをＦＭ１４４３へ書き込む。
【０２２７】
次にＭＰ１２１は、通常ライトコマンドをパリティＦＭＰＫ１４４Ｐへ送る（Ｓ６５４０）。この通常ライトコマンドは、新パリティを伴う。これにより、ＢＥＰＫ１４０は、ＣＭ１２１内の新パリティをバッファ１４３へ書き込み、パリティＦＭＰＫ１４４Ｐへ送る。これに応じて、パリティＦＭＰＫ１４４Ｐは、新パリティをＦＭ１４４３へ書き込む。
【０２２８】
次にＭＰ１２１は、ＳＭ１３２に格納されている処理段階情報をクリアする。
【０２２９】
以上が引継ぎライト処理である。
【０２３０】
このように、データメディア更新中にＭＰ障害が発生しても、他のＭＰ１２１がライト処理を引き継いで引継ぎライト処理を行うことができる。ＭＰ障害時の処理段階情報が、データメディア更新中だった場合、障害の発生していないＭＰ１２１は、他データをＦＭＰＫからＣＭ１３１に転送する段階からライト処理を引き継ぐ。
【０２３１】
………………実施例２の引継ぎライト処理の第３の具体例
【０２３２】
ここでは、パリティメディア更新中段階のＭＰ障害による引継ぎライト処理について説明する。
【０２３３】
図５７は、実施例２におけるパリティメディア更新中段階のＭＰ障害による引継ぎライト処理を示す。このシーケンス図における動作対象は、正常時のライト処理のシーケンス図における動作対象と同様である。
【０２３４】
障害のないＭＰ１２１は、他のＭＰ１２１で障害が発生していることを認識すると、処理段階情報がパリティメディア更新中を示していることを認識する。これに応じて、ＭＰ１２１は、前述のＳ６５１０、Ｓ６５２０、Ｓ６５４０を行う（図５６参照）。これにより、ＣＭ１２１内の新パリティがパリティＦＭＰＫ１４４Ｐへ書き込まれる。
【０２３５】
次にＭＰ１２１は、ＳＭ１３２に格納されている処理段階情報をクリアする。
【０２３６】
以上が引継ぎライト処理である。
【０２３７】
このように、パリティメディア更新中段階にＭＰ障害が発生しても、他のＭＰ１２１がライト処理を引き継いで引継ぎライト処理を行うことができる。ＭＰ障害時の処理段階情報が、パリティメディア更新中だった場合、他データをＦＭＰＫ１４４ＥからＣＭ１３１に転送する段階からライト処理を引き継ぐ。
【０２３８】
………………実施例２の引継ぎライト処理の第４の具体例
【０２３９】
ここでは、パリティ生成後段階のＭＰ障害による引継ぎライト処理について説明する。
【０２４０】
図５８は、実施例２におけるパリティ生成後段階のＭＰ障害による引継ぎライト処理を示す。このシーケンス図における動作対象は、正常時のライト処理のシーケンス図における動作対象と同様である。
【０２４１】
障害のないＭＰ１２１は、障害が発生しているＭＰ１２１を認識すると、処理段階情報がパリティ生成後を示していることを認識する。これに応じて、ＭＰ１２１は、前述のＳ６５３０及びＳ６５４０を行う。これにより、ＣＭ１２１内の新ユーザデータがデータＦＭＰＫ１４４Ａへ書き込まれる。また、ＣＭ１２１内の新パリティがパリティＦＭＰＫ１４４Ｐへ書き込まれる。
【０２４２】
次にＭＰ１２１は、ＳＭ１３２に格納されている処理段階情報をクリアする。
【０２４３】
以上が引継ぎライト処理である。
【０２４４】
このように、パリティ生成後段階にＭＰ障害が発生しても、障害の発生していない他のＭＰ１２１がライト処理を引き継いで引継ぎライト処理を行うことができる。また、同様に、複数のＭＰＰＫ１２０、複数のＣＭＰＫ１３０、複数のＢＥＰＫ１４０において同時一点障害が発生しても、データロストは発生しない。これにより、ストレージシステム１０の信頼性を向上させることができる。ＭＰ障害時の処理段階情報が、パリティ生成後だった場合、障害の発生していないＭＰ１２１は、新ユーザデータをデータＦＭＰＫ１４４Ａに書き込み、及び新パリティをパリティＦＭＰＫ１４４Ｐに書き込む処理から引き継ぐ。
【０２４５】
――――実施例２の各コマンドによるＦＭＰＫ１４４の動作――――
【０２４６】
以下、各コマンドによるＦＭＰＫ１４４の動作について説明する。
【０２４７】
図５９は、実施例２における通常リードコマンドによる動作を示す。以下の説明において、コントローラ１００からＦＭＰＫ１４４へのコマンドにより指定されている論理ページを対象論理ページと呼ぶ。また、ＦＭＰＫ１４４のメモリ１４４５内のポインタテーブルのエントリのうち、対象論理ページに対応するエントリを対象エントリ１４４６と呼ぶ。対象エントリ１４４６は、対象論理ページを指定する論理アドレスである論理ページアドレスのフィールドと、対象論理ページに対応する物理ページを指定する物理アドレスである物理ページアドレスのフィールドとを有する。また、図面及び以下の説明において、対象エントリ１４４６のうち、論理ページアドレスをＬＡ、旧物理ページアドレスをＰＡと呼ぶ。また、論理ページアドレスの値をＬＢＡｘｘｘｘ、物理ページアドレスの値をｐ０、ｐ１と呼ぶ。
【０２４８】
実施例２において、通常リードコマンドを受けるＦＭＰＫ１４４は、他データＦＭＰＫ１４４Ｅに相当する。まず他データＦＭＰＫ１４４Ｅは、コントローラ１００のＢＥＰＫ１４０から、通常リードコマンドを受ける（Ｓ７１１０）。この通常リードコマンドは、旧データを格納している対象論理ページを指定する。次に他データＦＭＰＫ１４４Ｅは、対象エントリ１４４６の物理ページアドレスに示されている旧物理ページから旧データを読み出す（Ｓ７１２０）。次に他データＦＭＰＫ１４４Ｅは、旧データを含むデータ応答をコントローラ１００へ送る（Ｓ７１３０）。
【０２４９】
図６０は、実施例２における通常ライトコマンドによる動作を示す。実施例２において、通常ライトコマンドを受けるＦＭＰＫ１４４は、データＦＭＰＫ１４４Ａ又はパリティＦＭＰＫ１４４Ｐに相当する。まずＦＭＰＫ１４４Ａ又は１４４Ｐは、コントローラ１００のＢＥＰＫ１４０から、通常ライトコマンドを受ける（Ｓ７２１０）。この通常ライトコマンドは、旧データを格納している対象論理ページを指定し、新データを伴う。次にＦＭＰＫ１４４Ａ又は１４４Ｐは、旧物理ページと異なる新物理ページへ新データを書き込む（Ｓ７２２０）。次にＦＭＰＫ１４４Ａ又は１４４Ｐは、対象エントリ１４４６の物理ページアドレスに新物理ページを指定することにより、新データへのポインタ接続を行う（Ｓ７２３０）。次にＦＭＰＫ１４４Ａ又は１４４Ｐは、正常終了応答をコントローラ１００へ送る（Ｓ７２４０）。
【０２５０】
図６１は、実施例２におけるＸＤＷＲＩＴＥコマンドによる動作を示す。実施例２において、ＸＤＷＲＩＴＥコマンドを受けるＦＭＰＫ１４４は、データＦＭＰＫ１４４Ａに相当する。まずデータＦＭＰＫ１４４Ａは、コントローラ１００のＢＥＰＫ１４０から、ＸＤＷＲＩＴＥコマンドを受ける（Ｓ７３１０）。このＸＤＷＲＩＴＥコマンドは、旧データを格納している対象論理ページを指定し、新データを伴う。次にデータＦＭＰＫ１４４Ａは、旧物理ページと異なる新物理ページへ新データを書き込む（Ｓ７３２０）。次にデータＦＭＰＫ１４４Ａは、旧物理ページ内の旧データと新物理ページ内の新データとを読み出し、ＸＯＲ回路１４４２により中間パリティを生成し、メモリ１４４５へ書き込む（Ｓ７３３０）。次にデータＦＭＰＫ１４４Ａは、対象エントリ１４４６の物理ページアドレスに新物理ページを指定することにより、新データへのポインタ接続を行う（Ｓ７３４０）。次にＦＭＰＫ１４４は、正常終了応答をコントローラ１００へ送る（Ｓ７３５０）。このＸＤＷＲＩＴＥコマンドにより、ＣＭ１３１の負荷、及びデータＦＭＰＫ１４４Ａへのアクセス回数を軽減させながら、中間パリティをメモリ１４４５に書き込むことができ、且つ、新データを確定することができる。本実施例では、ＦＭＰＫ１４４内のデータを確定するのに、実施例１のような新データ確定コマンド（Ｓ３２３０及びＳ３３２０の）が不要である。
【０２５１】
図６２は、実施例２におけるＸＤＲＥＡＤコマンドによる動作を示す。実施例２において、ＸＤＲＥＡＤコマンドを受けるＦＭＰＫ１４４は、メモリ１４４５に、当該中間パリティが書き込まれているデータＦＭＰＫ１４４Ａに相当する。まずデータＦＭＰＫ１４４Ａは、コントローラ１００のＢＥＰＫ１４０から、ＸＤＲＥＡＤコマンドを受ける（Ｓ７４１０）。このＸＤＲＥＡＤコマンドは、中間パリティを格納しているアドレスを指定する。次にデータＦＭＰＫ１４４Ａは、メモリ１４４５内の中間パリティを読み出す（Ｓ７４２０）。次にデータＦＭＰＫ１４４Ａは、中間パリティを含むデータ応答をコントローラ１００へ送る（Ｓ７４３０）。
【０２５２】
図６３は、実施例２におけるＸＰＷＲＩＴＥコマンドによる動作を示す。実施例２において、ＸＰＷＲＩＴＥコマンドを受けるＦＭＰＫ１４４は、パリティＦＭＰＫ１４４Ｐに相当する。まずパリティＦＭＰＫ１４４Ｐは、コントローラ１００のＢＥＰＫ１４０から、ＸＰＷＲＩＴＥコマンドを受ける（Ｓ７５１０）。このＸＰＷＲＩＴＥコマンドは、旧パリティを格納している対象論理ページを指定し、中間パリティを伴う。次にパリティＦＭＰＫ１４４Ｐは、中間パリティをメモリ１４４５へ書き込む（Ｓ７５２０）。次にパリティＦＭＰＫ１４４は、対象エントリ１４４６の物理ページアドレスに示されている旧物理ページから旧パリティを読み出し、メモリ１４４５から中間パリティを読み出し、ＸＯＲ回路１４４２により新パリティを生成し、旧物理ページと異なる新物理ページへ、新パリティを書き込む（Ｓ７５３０）。次にパリティＦＭＰＫ１４４Ｐは、対象エントリ１４４６の物理ページアドレスに新物理ページを指定することにより、新パリティへのポインタ接続を行う（Ｓ７５４０）。次にパリティＦＭＰＫ１４４Ｐは、終了応答をコントローラ１００へ送る（Ｓ７３５０）。このＸＰＷＲＩＴＥ処理により、ＣＭ１３１の負荷、及びデータＦＭＰＫ１４４Ａへのアクセス回数を軽減させながら、新パリティを生成し、且つ、新パリティを確定することができる。本実施例では、データを確定するのに、実施例１のような新データ確定コマンド（Ｓ３２３０及びＳ３３２０）が不要である。
【実施例３】
【０２５３】
この実施例も、実施例２と同様、ＦＭＰＫ１４４が、標準ＳＣＳＩコマンドのＸＯＲ機能をサポートしている場合を示す。ストレージシステム１０におけるその他の構成は、実施例１と同様である。また、本実施例でも、実施例２と同様に、ＳＭ１３２に格納される処理段階情報は「パリティ生成前」、「データメディア更新中」、「パリティメディア更新中」及び「パリティ生成後」である。
【０２５４】
――――実施例３のライト処理――――
【０２５５】
以下、正常時のライト処理について説明する。
【０２５６】
図６４は、実施例３におけるライト処理を示す。このシーケンス図においても、データＦＭＰＫ１４４Ａ内のＤＦａ及びＤＦｂは夫々、データＦＭＰＫ１４４Ａ内のメモリ１４４５、ＦＭ１４４３（物理ページ）を示す。また、パリティＦＭＰＫ１４４Ｐ内のＤＦａ及びＤＦｂは夫々、パリティＦＭＰＫ１４４Ｐ内のメモリ１４４５、ＦＭ１４４３（物理ページ）を示す。また、このシーケンス図における動作の主要な要素は、実施例２のライト処理のシーケンス図における動作の主要な要素と同様である。
【０２５７】
まずＭＰ１２１は、実施例１及び実施例２のライト処理と同様に、Ｓ２１１０〜Ｓ２３５０の処理を行う。これに応じてＭＰ１２１は、実施例２のライト処理と同様に、新ユーザデータを格納している二つのＣＭ１３１の領域に対応する二つのＳＭ１３２内の処理段階情報の値を、パリティ生成前からデータメディア更新中へ変更する。本実実施例では、ＭＰ１２１又はＣＭ１３１の同時一点障害にも、対応することができる。
【０２５８】
次にＭＰ１２１は、通常リードコマンドをデータＦＭＰＫ１４４Ａへ送る（Ｓ６１１０）。この通常リードコマンドは、旧ユーザデータを格納している論理ページを指定する。これに応じて、データＦＭＰＫ１４４Ａは、旧ユーザデータを読み出し、旧ユーザデータをコントローラ１００へ送る。これにより、ＢＥＰＫ１４０は、旧ユーザデータをバッファ１４３へ書き込み、更に旧ユーザデータを二つのＣＭ１２１へ書き込む。次にＭＰ１２１は、これらの二つのＣＭ１２１に対応する二つのＳＭ１３２内の処理段階情報にデータメディア更新中段階を示す値を夫々書き込む。
【０２５９】
次にＭＰ１２１は、実施例２のライト処理と同様にして、ＸＤＷＲＩＴＥコマンドをデータＦＭＰＫ１４４Ａへ送る（Ｓ６２１０）。このＸＰＷＲＩＴＥコマンドは、旧ユーザデータを格納している論理ページを指定し、新ユーザデータを伴う。これにより、データＦＭＰＫ１４４Ａにおいて、新ユーザデータが格納され、メモリ１４４５に中間パリティが格納される。
【０２６０】
次にＭＰ１２１は、実施例２のライト処理と同様にして、ＸＤＲＥＡＤコマンドをデータＦＭＰＫ１４４Ａへ送る（Ｓ６２２０）。このＸＤＲＥＡＤコマンドは、中間パリティを格納している論理ページを指定する。これにより、ＢＥＰＫ１４０のバッファ１４３に中間パリティが格納される。
【０２６１】
次にＭＰ１２１は、通常リードコマンドをパリティＦＭＰＫ１４４Ｐへ送る（Ｓ６３１０）。この通常リードコマンドは、旧パリティを格納している論理ページを指定する。これに応じて、パリティＦＭＰＫ１４４Ｐは、旧パリティを読み出し、旧パリティをコントローラ１００へ送る。これにより、ＢＥＰＫ１４０は、旧パリティをバッファ１４３へ書き込み、更に旧パリティを二つのＣＭ１２１へ書き込む。次にＭＰ１２１は、処理段階情報の値を、パリティメディア更新中段階に変更する。
【０２６２】
次にＭＰ１２１は、実施例２のライト処理と同様にして、ＸＰＷＲＩＴＥコマンドをパリティＦＭＰＫ１４４Ｐへ送る（Ｓ６４１０）。このＸＰＷＲＩＴＥコマンドは、旧パリティを格納している論理ページを指定し、中間パリティを伴う。これにより、パリティＦＭＰＫ１４４Ｐに新パリティが格納される。
【０２６３】
次にＭＰ１２１は、ＳＭ１３２に格納されている処理段階情報をクリアする。
【０２６４】
以上がライト処理である。
【０２６５】
このように、コントローラ１００は、データＦＭＰＫ１４４Ａから受けた旧ユーザデータと、パリティＦＭＰＫ１４４Ｐから受けた旧パリティをＣＭ１３１へ書き込むものの、データＦＭＰＫ１４４Ａから受けた中間パリティをＣＭ１３１へ書き込むことなく、中間パリティをバッファ１４３からパリティＦＭＰＫ１４４Ｐへ送る。このため、ライト処理中のＣＭ１３１へのアクセス回数は７回となり、ＣＭ１３１へのアクセス回数を低減できる。これにより、ライト処理中のＣＭ１３１へのアクセス回数を軽減することができるため、ＣＭ１３１へのアクセス回数を低減され、ストレージシステムのライト処理性能が向上する。
【０２６６】
また、この実施例によれば、新ユーザデータ、旧ユーザデータ、旧パリティ、処理段階情報の夫々を、二つのＣＭＰＫ１２０に格納することにより、一方のデータがロストしても、他方のデータを使用することができるので、ストレージシステム１０の信頼性を高めることができる。
【０２６７】
――――実施例３の引継ぎライト処理――――
【０２６８】
以下、引継ぎライト処理の幾つかの具体例を説明する。
【０２６９】
………………実施例３の引継ぎライト処理の第１の具体例
【０２７０】
ここでは、パリティ生成前段階のＭＰ障害による引継ぎライト処理について説明する。
【０２７１】
図６５は、実施例３におけるパリティ生成前段階のＭＰ障害による引継ぎライト処理を示す。このシーケンス図における動作対象は、正常時のライト処理のシーケンス図における動作対象と同様である。
【０２７２】
障害のないＭＰ１２１は、障害の発生したＭＰ１２１を認識すると、処理段階情報がパリティ生成前を示していることを認識する。これに応じて、ＭＰ１２１は、正常時のライト処理と同様にして、Ｓ６１１０〜Ｓ６４１０の処理を行う。つまり、障害が発生していないＭＰ１２１は、ＸＤＷＲＩＴＥコマンドをデータＦＭＰＫ１４４Ａへ送る処理（Ｓ６２１０）から引き継ぐ。ＣＭ１２１には、新ユーザデータが格納されているので、ＢＥＰＫ１４０は、ＭＰ１２１からの指示により、ＣＭ１２１から新ユーザデータを読み出し、バッファ１４３へ書き込み、バッファ１４３から新ユーザデータを読み出し、新ユーザデータをデータＦＭＰＫ１４４Ａへ送る。これにより、障害の発生していないＭＰ１２１がライト処理を引き継ぎ、正常にライト処理を行う事が出来る。
【０２７３】
次にＭＰ１２１は、ＳＭ１３２に格納されている処理段階情報をクリアする。
【０２７４】
以上が引継ぎライト処理である。
【０２７５】
このように、パリティ生成前段階にＭＰ障害が発生しても、障害の発生していない他のＭＰ１２１が、処理段階情報に基に、ライト処理を引き継いで引継ぎライト処理を行うことができる。
【０２７６】
………………実施例３の引継ぎライト処理の第２の具体例
【０２７７】
ここでは、データメディア更新中段階のＭＰ障害による引継ぎライト処理について説明する。
【０２７８】
図６６は、実施例３におけるデータメディア更新中段階のＭＰ障害による引継ぎライト処理を示す。このシーケンス図における動作対象は、正常時のライト処理のシーケンス図における動作対象と同様である。
【０２７９】
障害のないＭＰ１２１は、ＭＰ障害を認識すると、処理段階情報がデータメディア更新中を示していることを認識する。これに応じて、ＭＰ１２１は、通常ライトコマンドをデータＦＭＰＫ１４４Ａへ送る（Ｓ６０１０）。この通常ライトコマンドは、旧ユーザデータを伴う。この時、ＭＰ１２１からの指示により、ＢＥＰＫ１４０は、ＣＭ１２１から旧ユーザデータを読み出し、バッファ１４３へ書き込み、バッファ１４３から旧ユーザデータを読み出し、旧ユーザデータをデータＦＭＰＫ１４４Ａへ送る。
【０２８０】
次にＭＰ１２１は、正常時と同様、Ｓ６１１０〜Ｓ６４１０の処理を行う。つまり、処理段階情報がデータメディア更新中である場合、障害の発生していないＭＰ１２１は通常リードコマンドをデータＦＭＰＫ１４４Ａへ送る段階からライト処理を引き継ぐ（Ｓ６１１０）。
【０２８１】
次にＭＰ１２１は、ＳＭ１３２に格納されている処理段階情報をクリアする。
【０２８２】
以上が引継ぎライト処理である。
【０２８３】
このように、データメディア更新中段階にＭＰ障害が発生しても障害の発生していない他のＭＰ１２１が、処理段階情報に基づき、ライト処理を引き継いで引継ぎライト処理を行うことができる。
【０２８４】
………………実施例３の引継ぎライト処理の第３の具体例
【０２８５】
ここでは、パリティメディア更新中段階のＭＰ障害による引継ぎライト処理について説明する。
【０２８６】
図６７は、実施例３におけるパリティメディア更新中段階のＭＰ障害による引継ぎライト処理を示す。このシーケンス図における動作対象は、正常時のライト処理のシーケンス図における動作対象と同様である。
【０２８７】
障害のないＭＰ１２１は、障害の発生しているＭＰを認識すると、処理段階情報がパリティメディア更新中を示していることを認識する。これに応じて、ＭＰ１２１は、ＣＭ１２１内の旧ユーザデータと旧パリティと新ユーザデータとを読み出し、ＸＯＲ演算により新パリティを生成し、二つのＣＭ１２１へ書き込む（Ｓ６０２０）。つまり、処理段階情報がパリティメディア更新中である場合、障害の発生していないＭＰ１２１は、ＣＭ１２１に格納してある旧ユーザデータ、旧パリティ及び新ユーザデータから新パリティを生成する処理からライト処理を引き継ぐ。
【０２８８】
ＭＰ１２１は、正常時と同様、Ｓ６４１０の処理を行う。
【０２８９】
次にＭＰ１２１は、ＳＭ１３２に格納されている処理段階情報をクリアする。
【０２９０】
以上が引継ぎライト処理である。
【０２９１】
このように、パリティメディア更新中段階にＭＰ障害が発生しても、障害の発生していない他のＭＰ１２１が、処理段階情報に基づき、ライト処理を引き継いで引継ぎライト処理を行うことができる。
【０２９２】
この実施例において、記憶部２００における記憶デバイスは、ＦＭ１４４３に限定されない。
【０２９３】
この実施例によれば、ＭＰＰＫ１２０と、デステージ中のＲＡＩＤグループを構成するＦＭＰＫ１４４との同時一点障害に耐え、データロストを防ぐことができる。ここでのデステージは、ＣＭ１２１に格納されたデータを、ＦＭＰＫ１４４内のＦＭ１４４３へ書き込むことである。また、同様に、複数のＭＰＰＫ１２０、複数のＣＭＰＫ１３０、複数のＢＥＰＫ１４０、複数のＦＭＰＫ１４４において同時一点障害が発生しても、データロストは発生しない。これにより、ストレージシステム１０の信頼性を向上させることができる。従って、ストレージシステム１０の信頼性を向上させることができる。
【実施例４】
【０２９４】
ストレージシステム１０におけるその他の構成は、実施例１と同様である。
【０２９５】
――――実施例４のライト処理――――
【０２９６】
以下、正常時のライト処理について説明する。
【０２９７】
図６８は、実施例４におけるライト処理を示す。このシーケンス図における動作対象は、実施例１のライト処理のシーケンス図における動作対象と同様である。
【０２９８】
この実施例では、コントローラ１００からＦＭＰＫ１４４へのＩ／Ｏコマンドとして、旧データ送信コマンド、新データ送信コマンド、新データ確定コマンドが定義されている。また、この実施例では、ＳＭ１３２に格納される処理段階情報は、パリティ生成前及びパリティ生成後である。
【０２９９】
以下では説明のために、ライト処理中のパリティＦＭＰＫ１４４Ｐの状態をＦＭＰＫ状態と呼び、以下で幾つかのＦＭＰＫ１４４の状態を定義する。
【０３００】
まずＭＰ１２１は、実施例１のライト処理と同様に、Ｓ２１１０〜Ｓ２３５０の処理を行う。これに応じてＭＰ１２１は、実施例１のライト処理と同様に、二つのＳＭ１３２内の処理段階情報の値を、パリティ生成前と登録する。
【０３０１】
次にＭＰ１２１は、通常リードコマンドをデータＦＭＰＫ１４４Ａへ送る（Ｓ８１１０）。この通常リードコマンドは、旧ユーザデータを格納している論理ページを指定する。これに応じて、データＦＭＰＫ１４４Ａは、ＦＭ１４４３から旧ユーザデータを読み出し、旧ユーザデータをコントローラ１００へ送ると共に、通常リードコマンドの正常終了をコントローラ１００へ送る。
【０３０２】
この時、ＢＥＰＫ１４０は、データＦＭＰＫ１４４Ａから旧ユーザデータを受け、バッファ１４３へ書き込む。
【０３０３】
次にＭＰ１２１は、データＦＭＰＫ１４４Ａから通常リードコマンドの正常終了を受ける。
【０３０４】
この時のパリティＦＭＰＫ１４４Ｐの状態をＦＭＰＫ状態１ａとする。このパリティＦＭＰＫ１４４ＰのＦＭＰＫ状態を図７１に示す。
【０３０５】
これに応じて、ＭＰ１２１は、旧データ送信コマンドをパリティＦＭＰＫ１４４Ｐへ送る（Ｓ８１２０）。この旧データ送信コマンドは、旧パリティを格納している論理ページを指定し、旧ユーザデータを伴う。この時、ＭＰ１２１からの指示により、ＢＥＰＫ１４０は、バッファ１４３から旧ユーザデータを読み出し、旧ユーザデータをパリティＦＭＰＫ１４４Ｐへ送る。ＭＰＰＫ１２０がＣＭＰＫ１３０及びＢＥＰＫ１４０と内部ネットワークで接続されているため、ＭＰＰＫ１２０がＣＭＰＫ１３０とＢＥＰＫ１４０へのデータ格納を制御できる。よって、このように、データＦＭＰＫ１４４から読み出した旧ユーザデータをＢＥＰＫ１４０のバッファに格納した後、ＣＭ１３１に格納することなくパリティＦＭＰＫ１４４Ｐに転送することができ、ＣＭ１３１へのアクセス負荷を低減することができる。
【０３０６】
次にパリティＦＭＰＫ１４４Ｐは、コントローラ１００から旧データ送信コマンド及び旧ユーザデータを受ける。これに応じて、パリティＦＭＰＫ１４４Ｐは、旧ユーザデータをＦＭ１４４３へ書き込み、旧データ送信コマンドの正常終了をコントローラ１００へ送る。
【０３０７】
次にＭＰ１２１は、パリティＦＭＰＫ１４４Ｐから旧データ送信コマンドの正常終了を受ける。
【０３０８】
この時のパリティＦＭＰＫ１４４Ｐの状態をＦＭＰＫ状態２ａとする。このパリティＦＭＰＫ１４４ＰのＦＭＰＫ状態を図７２に示す。
【０３０９】
これに応じてＭＰ１２１は、新データ送信コマンドをパリティＦＭＰＫ１４４Ｐへ送る（Ｓ８１３０）。この新データ送信コマンドは、旧ユーザデータ及び旧パリティを格納している論理ページを指定し、新ユーザデータを伴う。この時、ＭＰ１２１からの指示により、ＢＥＰＫ１４０は、ＣＭ１２１から新ユーザデータを読み出し、バッファ１４３へ書き込み、バッファ１４３から新ユーザデータを読み出し、新ユーザデータをパリティＦＭＰＫ１４４Ｐへ送る。
【０３１０】
次にパリティＦＭＰＫ１４４Ｐは、コントローラ１００から新データ送信コマンド及び新ユーザデータを受ける。この実施例の新データ送信コマンドによるＦＭＰＫ１４４の動作は、実施例１と異なる。これに応じて、パリティＦＭＰＫ１４４Ｐは、新ユーザデータをメモリ１４４５へ書き込み、ＦＭ１４４３から旧ユーザデータ及び旧パリティを読み出し、ＸＯＲ回路１４４２により新パリティを生成し、新パリティをＦＭ１４４３へ書き込む。次にパリティＦＭＰＫ１４４Ｐは、新データ送信コマンドの正常終了をコントローラ１００へ送る。
【０３１１】
次にＭＰ１２１は、パリティＦＭＰＫ１４４Ｐから新データ送信コマンドの正常終了を受ける。これに応じてＭＰ１２１は、処理段階情報の値を、パリティ生成後段階に変更する。
【０３１２】
この時のパリティＦＭＰＫ１４４Ｐの状態をＦＭＰＫ状態３ａとする。パリティＦＭＰＫ１４４ＰのＦＭＰＫ状態を図７３に示す。
【０３１３】
次にＭＰ１２１は、通常ライトコマンドをデータＦＭＰＫ１４４Ａへ送る（Ｓ８１４０）。この通常ライトコマンドは、新ユーザデータを伴う。この時、ＭＰ１２１からの指示により、ＢＥＰＫ１４０は、バッファ１４３から新ユーザデータを読み出し、新ユーザデータをデータＦＭＰＫ１４４Ａへ送る。ここで、ＢＥＰＫ１４０は、Ｓ８１３０でバッファに格納した新ユーザデータをデータＦＭＰＫ１４４Ａへ送信する。ＭＰＰＫ１２０がＣＭＰＫ１３０及びＢＥＰＫ１４０を制御できるため、再度ＣＭＰＫ１３０から新ユーザデータを読み出す必要がない。これにより、ＣＭＰＫ１３０へのアクセス負荷を低減することができる。
【０３１４】
次にデータＦＭＰＫ１４４Ａは、コントローラ１００から通常ライトコマンド及び新ユーザデータを受ける。これに応じて、データＦＭＰＫ１４４Ａは、新ユーザデータをＦＭ１４４３へ書き込み、通常ライトコマンドの正常終了をコントローラ１００へ送る。通常ライトコマンドの処理は、図３１と同様である。
【０３１５】
次にＭＰ１２１は、データＦＭＰＫ１４４Ａから通常ライトコマンドの正常終了を受ける。これに応じて、ＭＰ１２１は、新データ確定コマンドをパリティＦＭＰＫ１４４Ｐへ送る（Ｓ８１５０）。この新データ確定コマンドは、新パリティを格納している論理ページを指定する。
【０３１６】
次にパリティＦＭＰＫ１４４Ｐは、コントローラ１００から新データ確定コマンドを受ける。これに応じて、パリティＦＭＰＫ１４４Ｐは、新パリティを更新後のパリティとして確定し、新データ確定コマンドの正常終了をコントローラ１００へ送る。
【０３１７】
次にＭＰ１２１は、パリティＦＭＰＫ１４４Ｐから新データ確定コマンドの正常終了を受ける。これに応じて、ＭＰ１２１は、処理段階情報の値をクリアする。
【０３１８】
以上がライト処理である。
【０３１９】
このように、コントローラ１００は、データＦＭＰＫ１４４Ａから受けた旧ユーザデータをＣＭ１３１へ書き込むことなく、旧ユーザデータをバッファ１４３からパリティＦＭＰＫ１４４Ｐへ送る。これにより、ライト処理中のＣＭ１３１へのアクセス回数は３回となり、ＣＭ１３１へのアクセス回数を低減することができる。
【０３２０】
また、この実施例によれば、新ユーザデータ、処理段階情報の夫々を、二つのＣＭＰＫ１２０に格納することにより、ストレージシステム１０の信頼性を高めることができる。
【０３２１】
――――実施例４の引継ぎライト処理の具体例――――
【０３２２】
以下、ＭＰ障害時の引継ぎライト処理の幾つかの具体例を説明する。適切な段階でＳＭ１３２に処理段階情報を格納することで、あるＭＰ１２１の障害時に、障害の発生していない他のＭＰ１２１がデータロストすることなくライト処理を引き継ぐことができる。
【０３２３】
………………実施例４の引継ぎライト処理の第１の具体例
【０３２４】
ここでは、パリティ生成前段階のＭＰ障害による引継ぎライト処理について説明する。
【０３２５】
図６９は、実施例４におけるパリティ生成前段階のＭＰ障害による引継ぎライト処理を示す。このシーケンス図における動作対象は、正常時のライト処理のシーケンス図における動作対象と同様である。
【０３２６】
障害のないＭＰ１２１は、他のＭＰ１２１の障害を認識すると、ＳＭ１３２の処理段階情報が、パリティ生成前段階を示していることを認識する。これに応じて、ＭＰ１２１は、正常時のライト処理と同様にして、Ｓ８１１０〜Ｓ８１５０の処理を行う。
【０３２７】
次にＭＰ１２１は、ＳＭ１３２に格納されている処理段階情報をクリアする。
【０３２８】
以上が引継ぎライト処理の第１の具体例である。本実施例では、処理段階情報がパリティ生成前の段階であれば、データＦＭＰＫ１４４Ａに旧ユーザデータが存在し、旧ユーザデータを読み出せることが保証されている。よって、引継ぎ処理を行うＭＰ１２１は、旧ユーザデータの読み出し（Ｓ８１１０）から処理を引き継ぐことで、ライト処理を完了することができる。
【０３２９】
………………実施例４の引継ぎライト処理の第２の具体例
【０３３０】
図７０は、実施例４におけるパリティ生成後段階のＭＰ障害による引継ぎライト処理を示す。このシーケンス図における動作対象は、正常時のライト処理のシーケンス図における動作対象と同様である。
【０３３１】
障害のないＭＰ１２１は、他のＭＰ１２１の障害を認識すると、ＳＭ１３２の処理段階情報が、パリティ生成後段階を示していることを認識する。これに応じて、ＭＰ１２１は、正常時のライト処理と同様にして、新ユーザデータをＣＭ１３１からＢＥＰＫ１４０に転送し、Ｓ８１４０及びＳ８１５０の処理を行う。
【０３３２】
次にＭＰ１２１は、処理段階情報をクリアする。
【０３３３】
以上が引継ぎライトの第２の具体例処理である。本実施例では、処理段階情報がパリティ生成後の段階であれば、パリティＦＭＰＫ１４４Ｐ内の物理ページに新パリティが書き込まれていることが保証されている。よって、引継ぎ処理を行うＭＰ１２１は、新ユーザデータの書き込み（Ｓ８１４０）から処理を引き継ぐことで、ライト処理を完了することができる。
【０３３４】
これらの引継ぎライト処理によれば、パリティ生成前段階及びパリティ生成後段階の何れにおいてＭＰ障害が発生しても、他のＭＰ１２１がライト処理を引き継いで引継ぎライト処理を行うことができる。また、同様に、複数のＭＰＰＫ１２０、複数のＣＭＰＫ１３０、複数のＢＥＰＫ１４０、複数のＦＭＰＫ１４４において同時一点障害が発生しても、データロストは発生しない。
【０３３５】
――――実施例４のＦＭＰＫ１４４に対するライト処理――――
【０３３６】
以下、前述のライト処理におけるＦＭＰＫの状態について説明する。
【０３３７】
ここでのＦＭＰＫ１４４は、パリティＦＭＰＫ１４４Ｐに相当する。
【０３３８】
図７１は、実施例４におけるＦＭＰＫ状態１ａにおけるパリティＦＭＰＫ１４４Ｐの状態を示す。以下の説明において、コントローラ１００からパリティＦＭＰＫ１４４Ｐへのコマンドにより指定されている論理ページを対象論理ページと呼ぶ。また、ＦＭＰＫ１４４のメモリ１４４５内のポインタテーブルのエントリのうち、対象論理ページに対応するエントリを対象エントリ１４４６と呼ぶ。対象エントリ１４４６は、対象論理ページを指定する論理アドレスである論理ページアドレスのフィールドと、旧物理ページを指定する物理アドレスである旧物理ページアドレスのフィールドと、新物理ページを指定する物理アドレスである新物理ページアドレスのフィールドと、暫定物理ページを指定する物理アドレスである暫定物理ページアドレスのフィールドとを有する。また、図面及び以下の説明において、対象エントリ１４４６のうち、論理ページアドレスをＬＡ、旧物理ページアドレスをｏＰＡ、新物理ページアドレスをｎＰＡ、暫定物理ページアドレスをｔＰＡと呼ぶ。また、論理ページアドレスの値をＬＢＡｘｘｘｘ、旧物理ページアドレス及び新物理ページアドレス及び暫定物理ページアドレスの値をｐ０、ｐ１、ｐ２、ｐ３、ｐ４と呼ぶ。
【０３３９】
ＦＭＰＫ状態１ａ下のパリティＦＭＰＫ１４４Ｐにおいて、旧物理ページには旧パリティが格納されている。また、対象エントリ１４４６には、論理ページアドレスと旧物理ページアドレスとが対応付けて格納されている。
【０３４０】
図７２は、実施例４におけるＦＭＰＫ状態２ａを示す。ＦＭＰＫ状態２ａ下のパリティＦＭＰＫ１４４Ｐにおいて、旧物理ページには旧パリティが格納されており、暫定物理ページには旧ユーザデータが格納されている。また、対象エントリ１４４６には、論理ページアドレスと旧物理ページアドレスと暫定物理ページアドレスとが対応付けて格納されている。
【０３４１】
図７３は、実施例４におけるＦＭＰＫ状態３ａを示す。ＦＭＰＫ状態３ａ下のパリティＦＭＰＫ１４４Ｐにおいて、旧物理ページには旧データが格納されており、暫定物理ページには旧ユーザデータが格納されており、新物理ページには新パリティが格納されている。また、対象エントリ１４４６には、論理ページアドレスと旧物理ページアドレスと暫定物理ページアドレスと新物理ページアドレスとが対応付けて格納されている。
【０３４２】
――――実施例４の各コマンドによるＦＭＰＫ１４４の動作――――
【０３４３】
以下、実施例４における各ＦＭＰＫ状態下及び、各ＦＭＰＫ状態下でシステム障害が発生した場合の各コマンドによるＦＭＰＫ１４４の動作について説明する。
【０３４４】
図７４は、実施例４におけるＦＭＰＫ状態１ａ下の旧データ送信コマンドによる動作を示す。まずパリティＦＭＰＫ１４４Ｐは、コントローラ１００のＢＥＰＫ１４０から、旧データ送信コマンドを受ける（Ｓ９１１０）。この旧データ送信コマンドは、旧ユーザデータを伴う。次にパリティＦＭＰＫ１４４Ｐは、旧物理ページと異なる暫定物理ページへ旧ユーザデータを書き込む（Ｓ９１２０）。次にパリティＦＭＰＫ１４４Ｐは、対象エントリ１４４６の暫定物理ページアドレスに暫定物理ページを指定することにより、旧ユーザデータへのポインタ接続を行う（Ｓ９１３０）。次にパリティＦＭＰＫ１４４Ｐは、正常終了応答をコントローラ１００へ送る（Ｓ９１４０）。旧データ送信コマンドによって、パリティＦＭＰＫ１４４Ｐは、受信したデータを旧パリティへの上書きデータとせず、旧パリティとは異なる物理ページへ書き込むことができる。ＦＭＰＫ状態１ａのパリティＦＭＰＫに旧データ送信コマンドを送信することで、ＦＭＰＫ状態２ａに遷移する。
【０３４５】
図７５は、実施例４におけるＦＭＰＫ状態２ａ下のパリティＦＭＰＫ１４４Ｐにおける旧データ送信コマンドによる動作を示す。まずパリティＦＭＰＫ１４４Ｐは、コントローラ１００のＢＥＰＫ１４０から、旧データ送信コマンドを受ける（Ｓ９２１０）。この旧データ送信コマンドは、旧ユーザデータを伴う。次にパリティＦＭＰＫ１４４Ｐは、暫定物理ページと異なる物理ページである追加暫定物理ページを確保し、旧ユーザデータを追加暫定物理ページへ書き込む（Ｓ９２２０）。次にパリティＦＭＰＫ１４４Ｐは、対象エントリ１４４６の暫定物理ページアドレスに追加暫定物理ページを指定することにより、暫定物理ページの第１暫定データから追加暫定物理ページの第１暫定データへのポインタ張替を行う（Ｓ９２３０）。次にパリティＦＭＰＫ１４４Ｐは、正常終了応答をコントローラ１００へ送る（Ｓ９２４０）。この処理は、パリティ生成前の段階で、旧データ送信（Ｓ８１２０）後に障害が発生した場合に、引継ぎライト処理の中で行われる。つまり、ＦＭＰＫ状態２ａのパリティＦＭＰＫに対して、旧データ送信コマンドを送信しても、ＦＭＰＫ状態２ａと同じ状態をとることができる。
【０３４６】
図７６は、実施例４における状態３ａ下のパリティＦＭＰＫ１４４Ｐにおける旧データ送信コマンドによる動作を示す。まずＦＭＰＫ１４４は、コントローラ１００のＢＥＰＫ１４０から、旧データ送信コマンドを受ける（Ｓ９３１０）。この旧データ送信コマンドは、第１暫定データを伴う。次にパリティＦＭＰＫ１４４Ｐは、第１暫定データを追加暫定物理ページへ書き込む（Ｓ９３２０）。次にパリティＦＭＰＫ１４４Ｐは、対象エントリ１４４６の暫定物理ページアドレスに追加暫定物理ページを指定することにより、暫定物理ページの第１暫定データから追加暫定物理ページの第１暫定データへのポインタ張替を行う（Ｓ９３３０）。次にパリティＦＭＰＫ１４４Ｐは、正常終了応答をコントローラ１００へ送る（Ｓ９３４０）。この処理は、パリティ生成前の段階で、新データ送信（Ｓ８１３０）後に障害が発生した場合に、引継ぎライト処理の中で行われる。つまり、ＦＭＰＫ状態３ａのパリティＦＭＰＫに対して、旧データ送信コマンドを送信しても、ＦＭＰＫ状態３ａと同じ状態をとることができる。
【０３４７】
図７７は、実施例４におけるＦＭＰＫ状態１ａ下の新データ送信コマンドによる動作を示す。まずパリティＦＭＰＫ１４４Ｐは、コントローラ１００のＢＥＰＫ１４０から、新データ送信コマンドを受ける（Ｓ９４１０）。この新データ送信コマンドは、第２暫定データを伴う。第２暫定データは、前述のライト処理における新ユーザデータに相当する。次にＦＭＰＫ１４４は、異常終了応答をコントローラ１００へ送る（Ｓ９４２０）。
【０３４８】
図７８は、実施例４におけるＦＭＰＫ状態２ａ下の新データ送信コマンドによる動作を示す。まずパリティＦＭＰＫ１４４Ｐは、コントローラ１００のＢＥＰＫ１４０から、新データ送信コマンドを受ける（Ｓ９５１０）。この新データ送信コマンドは、新ユーザデータを伴う。次にＦＭＰＫ１４４は、新ユーザデータをメモリ１４４５へ書き込む（Ｓ９５２０）。次にＦＭＰＫ１４４は、旧物理ページ内の旧パリティと暫定物理ページ内の旧ユーザデータとメモリ１４４５内の新ユーザデータとを読み出し、ＸＯＲ回路１４４２により新パリティを生成し、新物理ページへ書き込む（Ｓ９５３０）。次にＦＭＰＫ１４４は、対象エントリ１４４６の新物理ページアドレスに新物理ページを指定することにより、新パリティへのポインタ接続を行う（Ｓ９５４０）。次にＦＭＰＫ１４４は、正常終了応答をコントローラ１００へ送る（Ｓ９５５０）。ＦＭＰＫ状態２ａのパリティＦＭＰＫに対して新データ送信コマンドを送信することで、ＦＭＰＫ状態３ａに遷移する。
【０３４９】
図７９は、実施例４におけるＦＭＰＫ状態３ａ下の新データ送信コマンドによる動作を示す。まずパリティＦＭＰＫ１４４Ｐは、コントローラ１００のＢＥＰＫ１４０から、新データ送信コマンドを受ける（Ｓ９６１０）。この新データ送信コマンドは、新ユーザデータを伴う。次にＦＭＰＫ１４４は、新ユーザデータをメモリ１４４５へ書き込む（Ｓ９６２０）。次にパリティＦＭＰＫ１４４Ｐは、旧物理ページ内の旧データと暫定物理ページ内の旧ユーザデータとメモリ１４４５内の新ユーザデータとを読み出し、ＸＯＲ回路１４４２により新データを生成し、新物理ページと異なる物理ページである追加物理ページを確保し、新データを追加物理ページへ書き込む（Ｓ９６３０）。次にパリティＦＭＰＫ１４４Ｐは、対象エントリ１４４６の新物理ページアドレスに追加物理ページを指定することにより、新物理ページ内の新データから追加物理ページ内の新データへのポインタ張替を行う（Ｓ９６４０）。次にパリティＦＭＰＫ１４４Ｐは、正常終了応答をコントローラ１００へ送る（Ｓ９６５０）。この処理は、パリティ生成前の段階で、新データ送信（Ｓ８１３０）後に障害が発生した場合に、引継ぎライト処理の中で行われ、図７６に続いて行われる。つまり、ＦＭＰＫ状態３ａのパリティＦＭＰＫに対して、旧データ送信コマンドを送信しても、ＦＭＰＫ状態３ａと同じ状態をとることができる。このように、ＭＰ１２１は、処理段階情報がパリティ生成前であれば、障害発生の有無によらず、旧データリードから処理からコマンドの発行を行うことで、ＦＭＰＫ状態３ａに遷移することができる。
【０３５０】
図８０は、実施例４における状態１ａ下の新データ確定コマンドによる動作を示す。まずパリティＦＭＰＫ１４４Ｐは、コントローラ１００のＢＥＰＫ１４０から、新データ確定コマンドを受ける（Ｓ９７１０）。この新データ確定コマンドは、新データを格納している論理ページを指定する。次にパリティＦＭＰＫ１４４Ｐは、正常終了応答をコントローラ１００へ送る（Ｓ９７２０）。この処理は、パリティ生成後の段階で、新データ確定コマンド送信（Ｓ８１５０）後に障害が発生した場合に、引継ぎライト処理の中で行われる。
【０３５１】
図８１は、実施例４における状態２ａ下の新データ確定コマンドによる動作を示す。まずパリティＦＭＰＫ１４４Ｐは、コントローラ１００のＢＥＰＫ１４０から、新データ確定コマンドを受ける（Ｓ９８１０）。この新データ確定コマンドは、新データを格納している論理ページを指定する。次にパリティＦＭＰＫ１４４Ｐは、異常終了応答をコントローラ１００へ送る（Ｓ９８２０）。
【０３５２】
図８２は、実施例４における状態３ａ下の新データ確定コマンドによる動作を示す。まずパリティＦＭＰＫ１４４Ｐは、コントローラ１００のＢＥＰＫ１４０から、新データ確定コマンドを受ける（Ｓ９９１０）。この新データ確定コマンドは、新データを格納している論理ページを指定する。次にパリティＦＭＰＫ１４４Ｐは、対象エントリ１４４６の旧物理ページアドレスに新物理ページを指定することにより、旧物理ページ内の旧データから新物理ページ内の新データへのポインタ張替を行い、暫定物理ページアドレスをクリアすることにより、暫定物理ページ内の第１暫定データへのポインタ削除を行う（Ｓ９９２０）。次にパリティＦＭＰＫ１４４Ｐは、正常終了応答をコントローラ１００へ送る（Ｓ９９３０）。この処理によって、パリティ生成後の段階で、新データ確定コマンド送信前に障害が発生しても、パリティＦＭＰＫ１４４Ｐ内で新パリティが確定した状態に遷移することができる。以上のように、各コマンドを定義することで、システム障害が発生しても、その処理を引き継ぐことができ、データロストは発生しない。また、本実施例では、処理段階情報を「パリティ生成前」、「パリティ生成後」の２段階として障害時の処理を引き継ぐことで、処理段階情報を記録するためのＳＭ１３２へのアクセス回数を減らし、負荷を低減することができる。
【実施例５】
【０３５３】
この実施例は、実施例２と同様の機能を有しているが、ＦＭＰＫ１４４が有するＸＯＲ回路１４４２が、ＳＣＳＩコマンドのＸＰＷＲＩＴＥ機能のみをサポートしている場合を示す。また、この実施例では、ＳＭ１３２に格納される処理段階情報は、パリティ生成前、パリティメディア更新中、及びパリティ生成後である。
【０３５４】
――――実施例５のライト処理――――
【０３５５】
以下、正常時のライト処理について説明する。
【０３５６】
図８３は、実施例５におけるライト処理を示す。このシーケンス図において、データＦＭＰＫ１４４Ａ内のＤＦａ及びＤＦｂは夫々、データＦＭＰＫ１４４Ａ内のメモリ１４４５、ＦＭ１４４３（物理ページ）を示す。また、パリティＦＭＰＫ１４４Ｐ内のＤＦａ及びＤＦｂは夫々、パリティＦＭＰＫ１４４Ｐ内のメモリ１４４５、ＦＭ１４４３（物理ページ）を示す。また、このシーケンス図における動作の主要な要素は、実施例２のライト処理のシーケンス図における動作の主要な要素と同様である。
【０３５７】
まずＭＰ１２１は、実施例１のライト処理と同様に、Ｓ２１１０〜Ｓ２３５０の処理を行う。これに応じてＭＰ１２１は、実施例１のライト処理と同様に、新ユーザデータを格納している二つのＣＭ１３１の領域に対応する二つのＳＭ１３２内の処理段階情報の値を、パリティ生成前に変更する。
【０３５８】
次にＭＰ１２１は、実施例４のライト処理と同様に、Ｓ８１１０の処理を行う。これにより、ＢＥＰＫ１４０は、データＦＭＰＫ１４４Ａから旧ユーザデータを受け、バッファ１４３へ書き込む。これに応じてＭＰ１２１は、処理段階情報の値を、パリティメディア更新中に変更する。
【０３５９】
次にＭＰ１２１は、ＸＰＷＲＩＴＥコマンドをパリティＦＭＰＫ１４４Ｐへ送る（Ｓ８３２０）。このＸＰＷＲＩＴＥコマンドは、旧パリティを格納している論理ページを指定し、旧ユーザデータを伴う。この時、ＭＰ１２１からの指示により、ＢＥＰＫ１４０は、バッファ１４３から旧ユーザデータを読み出し、旧ユーザデータをパリティＦＭＰＫ１４４Ｐへ送る。
【０３６０】
次にパリティＦＭＰＫ１４４Ｐは、コントローラ１００からＸＰＷＲＩＴＥコマンド及び旧ユーザデータを受ける。これに応じてパリティＦＭＰＫ１４４Ｐは、旧ユーザデータをメモリ１４４５へ書き込み、ＦＭ１４４３から旧パリティを読み出し、メモリ１４４５から旧ユーザデータを読み出し、ＸＯＲ回路１４４２により中間パリティを生成し、中間パリティをＦＭ１４４３内のメモリ１４４５へ書き込む。次にパリティＦＭＰＫ１４４Ｐは、ＸＰＷＲＩＴＥコマンドの正常終了をコントローラ１００へ送る。
【０３６１】
次にＭＰ１２１は、パリティＦＭＰＫ１４４ＰからＸＰＷＲＩＴＥコマンドの正常終了を受ける。
【０３６２】
これに応じて、ＭＰ１２１は、ＸＰＷＲＩＴＥコマンドをパリティＦＭＰＫ１４４Ｐへ送る（Ｓ８３３０）。このＸＰＷＲＩＴＥコマンドは、中間パリティを格納しているメモリ１４４５の物理アドレスを指定し、新ユーザデータを伴う。この時、ＭＰ１２１からの指示により、ＢＥＰＫ１４０は、ＣＭ１２１から新ユーザデータを読み出し、新ユーザデータをバッファ１４３へ書き込み、バッファ１４３から新ユーザデータを読み出し、新ユーザデータをパリティＦＭＰＫ１４４Ｐへ送る。
【０３６３】
次にパリティＦＭＰＫ１４４Ｐは、コントローラ１００からＸＰＷＲＩＴＥコマンド及び新ユーザデータを受ける。これに応じてパリティＦＭＰＫ１４４Ｐは、新ユーザデータをメモリ１４４５へ書き込み、メモリ１４４５から中間パリティを読み出し、メモリ１４４５から新ユーザデータを読み出し、ＸＯＲ回路１４４２により中間パリティと新ユーザデータから新パリティを生成し、新パリティをＦＭ１４４３へ書き込む。次にパリティＦＭＰＫ１４４Ｐは、ＸＰＷＲＩＴＥコマンドの正常終了をコントローラ１００へ送る。
【０３６４】
次にＭＰ１２１は、パリティＦＭＰＫ１４４ＰからＸＰＷＲＩＴＥコマンドの正常終了を受ける。これに応じてＭＰ１２１は、処理段階情報の値を、パリティ生成後段階に変更する。
【０３６５】
次にＭＰ１２１は、通常ライトコマンドをデータＦＭＰＫ１４４Ａへ送る（Ｓ８３４０）。この通常ライトコマンドは、新ユーザデータを伴う。
【０３６６】
次にデータＦＭＰＫ１４４Ａは、コントローラ１００から通常ライトコマンド及び新ユーザデータを受ける。これに応じてデータＦＭＰＫ１４４Ａは、新ユーザデータをＦＭ１４４３へ書き込み、通常ライトコマンドの正常終了をコントローラ１００へ送る。
【０３６７】
次にＭＰ１２１は、データＦＭＰＫ１４４Ａから通常ライトコマンドの正常終了を受ける。これに応じてＭＰ１２１は、処理段階情報の値をクリアする。
【０３６８】
以上がライト処理である。
【０３６９】
このように、コントローラ１００は、データＦＭＰＫ１４４Ａから受けた旧ユーザデータをＣＭ１３１へ書き込むことなく、旧ユーザデータをバッファ１４３からパリティＦＭＰＫ１４４Ｐへ送る。これにより、ライト処理中のＣＭ１３１へのアクセス回数が軽減され、ＣＭ１３１へのアクセス回数を低減することができる。
【０３７０】
また、この実施例によれば、新ユーザデータ、処理段階情報の夫々を、二つのＣＭＰＫ１２０に格納することにより、ストレージシステム１０の信頼性を高めることができる。
【０３７１】
――――実施例５の引継ぎライト処理の具体例――――
【０３７２】
以下、ＭＰ障害時の引継ぎライト処理の幾つかの具体例を説明する。
【０３７３】
………………実施例５の引継ぎライト処理の第１の具体例
【０３７４】
ここでは、パリティ生成前段階のＭＰ障害による引継ぎライト処理について説明する。
【０３７５】
図８４は、実施例５におけるパリティ生成前段階のＭＰ障害による引継ぎライト処理を示す。このシーケンス図における動作対象は、正常時のライト処理のシーケンス図における動作対象と同様である。
【０３７６】
障害のないＭＰ１２１は、他のＭＰ１２１で障害が発生していることを認識すると、処理段階情報がパリティ生成前を示していることを認識する。これに応じて、ＭＰ１２１は、正常時のライト処理と同様にして、Ｓ８１１０〜Ｓ８３４０の処理を行う。つまり、処理段階情報がパリティ生成前である場合、ＭＰ１２１は、データＦＭＰＫ１４４ＡからＢＥＰＫ１４０のバッファ１４３へ、旧ユーザデータを送信する処理からライト処理を引き継ぐ。
【０３７７】
次にＭＰ１２１は、ＳＭ１３２に格納されている処理段階情報をクリアする。
【０３７８】
以上が引継ぎライト処理である。
【０３７９】
………………実施例５の引継ぎライト処理の第２の具体例
【０３８０】
ここでは、パリティメディア更新中段階のＭＰ障害による引継ぎライト処理について説明する。
【０３８１】
図８５は、実施例５におけるパリティメディア更新中段階のＭＰ障害による引継ぎライト処理を示す。このシーケンス図における動作対象は、正常時のライト処理のシーケンス図における動作対象と同様である。
【０３８２】
障害のないＭＰ１２１は、他のＭＰで障害が発生していることを認識すると、処理段階情報がパリティメディア更新中を示していることを認識する。これに応じて、ＭＰ１２１は、実施例２における、パリティメディア更新中のＭＰ障害による引継ぎライト処理と同様に、Ｓ６５１０、Ｓ６５２０の処理を行う（図５６参照）。つまり、障害の発生していないＭＰ１２１は、新パリティを生成する処理から、ライト処理を引き継ぐ。
【０３８３】
次にＭＰ１２１は、通常ライトコマンドをパリティＦＭＰＫ１４４Ｐへ送る（Ｓ８３６０）。この通常ライトコマンドは、新パリティを伴う。これにより、ＢＥＰＫ１４０は、ＣＭ１２１内の新パリティをバッファ１４３へ書き込み、パリティＦＭＰＫ１４４Ｐへ送る。これに応じて、パリティＦＭＰＫ１４４Ｐは、新パリティをＦＭ１４４３へ書き込む。
【０３８４】
次にＭＰ１２１は、パリティＦＭＰＫ１４４Ｐから通常ライトコマンドの正常終了を受ける。これに応じてＭＰ１２１は、処理段階情報の値を、パリティ生成後に変更する。
【０３８５】
次にＭＰ１２１は、通常ライトコマンドをデータＦＭＰＫ１４４Ａへ送る（Ｓ８３７０）。この通常ライトコマンドは、新ユーザデータを伴う。これにより、ＢＥＰＫ１４０は、ＣＭ１２１内の新ユーザデータをバッファ１４３へ書き込み、データＦＭＰＫ１４４Ａへ送る。これに応じて、データＦＭＰＫ１４４Ａは、新ユーザデータをＦＭ１４４３へ書き込む。
【０３８６】
次にＭＰ１２１は、ＳＭ１３２に格納されている処理段階情報をクリアする。
【０３８７】
以上が引継ぎライト処理である。
【０３８８】
………………実施例５の引継ぎライト処理の第３の具体例
【０３８９】
ここでは、パリティ生成後段階のＭＰ障害による引継ぎライト処理について説明する。
【０３９０】
図８６は、実施例５におけるパリティ生成後段階のＭＰ障害による引継ぎライト処理を示す。このシーケンス図における動作の主要な要素は、正常時のライト処理のシーケンス図における動作の主要な要素と同様である。
【０３９１】
障害のないＭＰ１２１は、ＭＰ障害を認識すると、処理段階情報がパリティ生成後を示していることを認識する。これに応じて、ＭＰ１２１は、前述のパリティメディア更新中のＭＰ障害による引継ぎライト処理と同様に、Ｓ８３７０の処理を行う。つまり、障害の発生していないＭＰ１２１は、通常ライトコマンドをデータＦＭＰＫ１４４Ａへ送る（Ｓ８３７０）処理からライト処理を引き継ぐ。
【０３９２】
次にＭＰ１２１は、ＳＭ１３２に格納されている処理段階情報をクリアする。
【０３９３】
以上が引継ぎライト処理である。
【０３９４】
これらの引継ぎライト処理（第１の具体例〜第３の具体例）によれば、本実施例では、処理段階情報が、パリティ生成前段階、パリティメディア更新中段階、パリティ生成後段階の何れにおいてＭＰ障害が発生しても、障害の発生していない他のＭＰ１２１がライト処理を引き継いで引継ぎライト処理を行うことができる。また、同様に、複数のＭＰＰＫ１２０、複数のＣＭＰＫ１３０、複数のＢＥＰＫ１４０において同時一点障害が発生しても、データロストは発生しない。これにより、ストレージシステム１０の信頼性を向上させることができる。従って、ストレージシステム１０の信頼性を向上させることができる。
【０３９５】
また、この実施例によれば、ＦＭＰＫ１４４のＸＰＷＲＩＴＥ機能を用いて、実施例２と同様の機能を実現できる。
【実施例６】
【０３９６】
この実施例は、実施例５と同様の構成を有し、実施例５よりストレージシステム１０の信頼性を向上させる場合を示す。この実施例では、ＳＭ１３２に格納される処理段階情報は、パリティ生成前、パリティメディア更新中、及びパリティ生成後である。
【０３９７】
――――実施例６のライト処理――――
【０３９８】
以下、正常時のライト処理について説明する。
【０３９９】
図８７は、実施例６におけるライト処理を示す。このシーケンス図における動作対象は、実施例２のライト処理のシーケンス図における動作対象と同様である。
【０４００】
まずＭＰ１２１は、実施例１のライト処理と同様に、Ｓ２１１０〜Ｓ２３５０の処理を行う。これに応じてＭＰ１２１は、新ユーザデータを格納している二つのＣＭ１３１に対応する二つのＳＭ１３２内の処理段階情報の値を、パリティ生成前に変更する。
【０４０１】
次にＭＰ１２１は、実施例４のライト処理と同様に、Ｓ６３１０の処理を行う。これにより、パリティＦＭＰＫ１４４Ｐ内の旧パリティは、バッファ１４３へ書き込まれる。
【０４０２】
次にＭＰ１２１は、実施例４及び実施例５のライト処理と同様に、Ｓ８１１０の処理を行う。これにより、データＦＭＰＫ１４４Ａ内の旧ユーザデータは、バッファ１４３へ書き込まれる。これに応じてＭＰ１２１は、処理段階情報の値を、パリティメディア更新中に変更する。
【０４０３】
次にＭＰ１２１は、実施例５のライト処理と同様に、Ｓ８３２０〜Ｓ８３４０の処理を行う。これにより、パリティＦＭＰＫ１４４Ｐにおいて、中間パリティが生成され、メモリ１４４５へ書き込まれる。また、ＣＭ１２１内の新ユーザデータがバッファ１４３へ書き込まれ、パリティＦＭＰＫ１４４Ｐにおいて、新パリティが生成され、ＦＭ１４４３へ書き込まれる。
【０４０４】
これに応じてＭＰ１２１は、ＳＭ１３２に格納されている処理段階情報をクリアする。
【０４０５】
以上がライト処理である。
【０４０６】
このように、コントローラ１００は、データＦＭＰＫ１４４Ａから受けた旧ユーザデータをＣＭ１３１へ書き込むことなく、旧ユーザデータをバッファ１４３からパリティＦＭＰＫ１４４Ｐへ送る。これにより、ライト処理中のＣＭ１３１へのアクセス回数を低減することができる。
【０４０７】
また、この実施例によれば、新ユーザデータ、処理段階情報、旧パリティの夫々を、二つのＣＭＰＫ１２０に格納することにより、ストレージシステム１０の信頼性を高めることができる。
【０４０８】
――――実施例６の引継ぎライト処理の具体例――――
【０４０９】
以下、ＭＰ障害時の引継ぎライト処理の幾つかの具体例を説明する。
【０４１０】
………………実施例６の引継ぎライト処理の第１の具体例
【０４１１】
ここでは、パリティ生成前段階のＭＰ障害による引継ぎライト処理について説明する。
【０４１２】
図８８は、実施例６におけるパリティ生成前段階のＭＰ障害による引継ぎライト処理を示す。このシーケンス図における動作対象は、正常時のライト処理のシーケンス図における動作対象と同様である。
【０４１３】
障害のないＭＰ１２１は、他のＭＰ１２１で障害が発生していることを認識すると、処理段階情報がパリティ生成前を示していることを認識する。これに応じて、ＭＰ１２１は、正常時のライト処理と同様にして、Ｓ６３１０〜Ｓ８３４０の処理を行う。つまり、障害の発生していないＭＰ１２１は、パリティＦＭＰＫ１４４Ｐ内の旧パリティを、バッファ１４３へ書き込む処理からライト処理を引き継ぐ。
【０４１４】
これに応じてＭＰ１２１は、ＳＭ１３２に格納されている処理段階情報をクリアする。
【０４１５】
以上が引継ぎライト処理である。
【０４１６】
………………実施例６の引継ぎライト処理の第２の具体例
【０４１７】
ここでは、パリティメディア更新中段階のＭＰ障害による引継ぎライト処理について説明する。
【０４１８】
図８９は、実施例６におけるパリティメディア更新中段階のＭＰ障害による引継ぎライト処理を示す。このシーケンス図における動作の主要な要素は、正常時のライト処理のシーケンス図における動作の主要な要素と同様である。
【０４１９】
障害のないＭＰ１２１は、他のＭＰ１２１で障害が発生していることを認識すると、処理段階情報がパリティメディア更新中を示していることを認識する。これに応じて、ＭＰ１２１は、通常ライトコマンドをパリティＦＭＰＫ１４４Ｐへ送る（Ｓ８２１０）。つまり、障害の発生していないＭＰ１２１は、通常ライトコマンドをパリティＦＭＰＫ１４４Ｐへ送る処理から、ライト処理を引き継ぐ。この通常ライトコマンドは、旧パリティを伴う。これにより、ＢＥＰＫ１４０は、ＣＭ１２１内の旧パリティをバッファ１４３へ書き込み、旧パリティをパリティＦＭＰＫ１４４Ｐへ送る。これに応じて、パリティＦＭＰＫ１４４Ｐは、旧パリティをＦＭ１４４３へ書き込む。
【０４２０】
次にＭＰ１２１は、パリティＦＭＰＫ１４４Ｐから通常ライトコマンドの正常終了を受ける。これに応じてＭＰ１２１は、ＸＰＷＲＩＴＥコマンドをパリティＦＭＰＫ１４４Ｐへ送る（Ｓ８２２０）。この通常ライトコマンドは、旧ユーザデータを伴う。これにより、ＢＥＰＫ１４０は、ＣＭ１２１内の旧ユーザデータをバッファ１４３へ書き込み、旧ユーザデータをデータＦＭＰＫ１４４Ａへ送る。これに応じて、パリティＦＭＰＫ１４４Ｐは、旧ユーザデータをメモリ１４４５へ書き込み、ＦＭ１４４３内の旧パリティとメモリ１４４５内の旧ユーザデータから中間パリティを生成し、ＦＭ１４４３へ書き込む。
【０４２１】
次にＭＰ１２１は、パリティＦＭＰＫ１４４ＰからＸＰＷＲＩＴＥコマンドの正常終了を受ける。これに応じてＭＰ１２１は、正常時のライト処理と同様に、Ｓ８３３０、Ｓ８３４０の処理を行う。
【０４２２】
これに応じてＭＰ１２１は、ＳＭ１３２に格納してある処理段階情報をクリアする。
【０４２３】
以上が引継ぎライト処理である。
【０４２４】
………………実施例６の引継ぎライト処理の第３の具体例
【０４２５】
ここでは、パリティ生成後段階のＭＰ障害による引継ぎライト処理について説明する。
【０４２６】
図９０は、実施例６におけるパリティ生成後段階のＭＰ障害による引継ぎライト処理を示す。このシーケンス図における動作対象は、正常時のライト処理のシーケンス図における動作対象と同様である。
【０４２７】
障害のないＭＰ１２１は、他のＭＰ１２１で障害が発生していることを認識すると、処理段階情報がパリティ生成後段階を示していることを認識する。これに応じて、次にＭＰ１２１は、通常ライトコマンドをデータＦＭＰＫ１４４Ａへ送る（Ｓ８２３０）。障害の発生していないＭＰ１２１は、通常ライトコマンドをデータＦＭＰＫ１４４Ａへ送る処理から、ライト処理を引き継ぐ。この通常ライトコマンドは、新ユーザデータを伴う。
【０４２８】
次にデータＦＭＰＫ１４４Ａは、コントローラ１００から通常ライトコマンド及び新ユーザデータを受ける。これに応じてデータＦＭＰＫ１４４Ａは、ＣＭ１３１内の新ユーザデータをＦＭ１４４３へ書き込み、通常ライトコマンドの正常終了をコントローラ１００へ送る。
【０４２９】
次にＭＰ１２１は、データＦＭＰＫ１４４Ａから通常ライトコマンドの正常終了を受ける。これに応じてＭＰ１２１は、ＳＭ１３２に格納してある処理段階情報の値をクリアする。
【０４３０】
以上が引継ぎライト処理である。
【０４３１】
これらの引継ぎライト処理（第１〜第３の具体例）によれば、パリティ生成前段階、パリティメディア更新中段階、パリティ生成後段階の何れにおいてＭＰ障害が発生しても、障害の発生していない他のＭＰ１２１がライト処理を引き継いで引継ぎライト処理を行うことができる。また、同様に、複数のＭＰＰＫ１２０、複数のＣＭＰＫ１３０、複数のＢＥＰＫ１４０、複数のＦＭＰＫ１４４において同時一点障害が発生しても、データロストは発生しない。これにより、ストレージシステム１０の信頼性を向上させることができる。従って、ストレージシステム１０の信頼性を向上させることができる。
【０４３２】
この実施例によれば、ＦＭＰＫ１４４のＸＰＷＲＩＴＥ機能を用いて、実施例２と同様の機能を実現できる。また、この実施例によれば、実施例５と比べて、旧パリティを二つのＣＭ１２１へ書き込むことにより、信頼性を向上させることができる。
【実施例７】
【０４３３】
この実施例は、実施例１をＲＡＩＤレベル６に適用する場合を示す。
【０４３４】
コントローラ１００は、複数のＦＭＰＫ１４４を用いてＲＡＩＤレベル６のＲＡＩＤグループを構築する。このＲＡＩＤグループは、リードソロモン方式を用いる。ユーザデータをＤ［０］，Ｄ［１］，…，Ｄ［ｎ−１］とし、Ｑパリティ生成係数をＡ［０］，Ａ［１］，…，Ａ［ｎ−１］とすると、Ｐパリティ及びＱパリティは次式により求められる。
【０４３５】
Ｐ  ＝  Ｄ［０］＋Ｄ［１］＋…＋Ｄ［ｎ−１］  …  （Ｅｐ）
【０４３６】
Ｑ  ＝Ａ［０］・Ｄ［０］＋Ａ［１］・Ｄ［１］＋…＋Ａ［ｎ−１］・Ｄ［ｎ−１］  …  （Ｅｑ）
【０４３７】
また、ストライプ内のデータ列番号をｉ（ｉは、０，１，…，ｎ−１）とすると、ＦＭＰＫ１４４のメモリ１４４５は、Ａ［ｉ］を格納している。Ａ［ｉ］は、ＸＯＲ回路１４４２に格納されても良い。
【０４３８】
――――実施例７のライト処理――――
【０４３９】
以下、正常時のライト処理について説明する。
【０４４０】
図面は、実施例７におけるライト処理を、第１処理と第２処理に分けて示す。図９１は、実施例７におけるライト処理の第１処理を示し、図９２は、実施例７におけるライト処理の第２処理を示す。
【０４４１】
以下の説明において、旧ユーザデータから生成されたＰパリティを旧パリティ、旧ユーザデータから生成されたＱパリティを旧Ｑパリティ、新ユーザデータから生成されるＰパリティを新パリティ、新ユーザデータから生成されるＱパリティを新Ｑパリティと呼ぶ。
【０４４２】
以下の説明において、ＲＡＩＤグループを構成する複数のＦＭＰＫ１４４のうち、旧パリティを格納しているＦＭＰＫ１４４をパリティＦＭＰＫ１４４Ｐ、旧Ｑパリティを格納しているＦＭＰＫ１４４をパリティＦＭＰＫ１４４Ｑと呼ぶ。ストレージシステム１０においてパリティＦＭＰＫ１４４Ｑ以外の構成は実施例１と同様である。パリティＦＭＰＫ１４４ＱがＡ［ｉ］を特定するために、コントローラ１００は、データ列番号を示す情報をパリティＦＭＰＫ１４４Ｑへ送る。
【０４４３】
この実施例では、コントローラ１００からＦＭＰＫ１４４へのＩ／Ｏコマンドとして、新たに、Ｑパリティ用中間パリティ送信コマンドが定義されている。
【０４４４】
第１処理のシーケンス図に示されている各動作対象は、実施例１のライト処理のシーケンス図に示されている各動作対象と同様である。第２処理のシーケンス図における動作対象は、第１処理のシーケンス図における動作対象に加え、パリティＦＭＰＫ１４４Ｑ内のポート１４４１、パリティＦＭＰＫ１４４Ｑ内のＸＯＲ回路１４４２、パリティＦＭＰＫ１４４Ｑ内の記憶媒体ＱＦａ及び記憶媒体ＱＦｂである。パリティＦＭＰＫ１４４Ｑにおいて、記憶媒体ＱＦａ及びＱＦｂは、ＦＭ１４４３内の二つの物理ページを夫々示す。
【０４４５】
以下、ライト処理の第１処理について説明する。
【０４４６】
まずＭＰ１２１は、実施例１のライト処理と同様に、Ｓ２１１０〜Ｓ３１２０の処理を行う。これにより、ＢＥＰＫ１４０のバッファ１４３は、中間パリティを格納している。また、パリティＦＭＰＫ１４４ＰのＦＭ１４４３は、旧パリティ及び新パリティを格納している。
【０４４７】
以下、ライト処理の第２処理について説明する。
【０４４８】
次にＭＰ１２１は、Ｑパリティ用中間パリティ送信コマンドをパリティＦＭＰＫ１４４Ｑへ送る（Ｓ９１１０）。このＱパリティ用中間パリティ送信コマンドは、旧Ｑパリティを格納している論理ページを指定し、中間パリティとデータ列番号を伴う。この時、ＭＰ１２１からの指示により、ＢＥＰＫ１４０は、バッファ１４３から中間パリティを読み出し、中間パリティをパリティＦＭＰＫ１４４Ｑへ送る。
【０４４９】
次にパリティＦＭＰＫ１４４Ｑは、コントローラ１００からＱパリティ用中間パリティ送信コマンド及び中間パリティ及びデータ列番号を受ける。これに応じて、パリティＦＭＰＫ１４４Ｑは、中間パリティをメモリ１４４５へ書き込み、ＦＭ１４４３内の旧Ｑパリティを読み出し、メモリ１４４５内の中間パリティを読み出し、データ列番号に基づいてメモリ１４４５内のＱパリティ生成係数を読み出し、ＸＯＲ回路１４４２により新Ｑパリティを生成し、新ＱパリティをＦＭ１４４３へ書き込む。次にパリティＦＭＰＫ１４４Ｑは、Ｑパリティ用中間パリティ送信コマンドの正常終了をコントローラ１００へ送る。
【０４５０】
次にＭＰ１２１は、パリティＦＭＰＫ１４４Ｑから正常終了を受ける。これに応じて、ＭＰ１２１は、処理段階情報の値を、パリティ生成後段階に変更する。
【０４５１】
次にＭＰ１２１は、新データ確定コマンドをパリティＦＭＰＫ１４４Ｐへ送る（Ｓ９１２０）。この新データ確定コマンドは、新ユーザデータを格納している論理ページを指定する。
【０４５２】
次にデータＦＭＰＫ１４４Ａは、コントローラ１００から新データ確定コマンドを受ける。これに応じて、データＦＭＰＫ１４４Ａは、新ユーザデータを更新後のユーザデータとして確定し、新データ確定コマンドの正常終了をコントローラ１００へ送る。
【０４５３】
次にＭＰ１２１は、データＦＭＰＫ１４４Ａから新データ確定コマンドの正常終了を受ける。これに応じて、ＭＰ１２１は、新データ確定コマンドをパリティＦＭＰＫ１４４Ｐへ送る（Ｓ９２３０）。この新データ確定コマンドは、新パリティを格納している論理ページを指定する。
【０４５４】
次にパリティＦＭＰＫ１４４Ｐは、コントローラ１００から新データ確定コマンドを受ける。これに応じて、パリティＦＭＰＫ１４４Ｐは、新パリティを更新後のＰパリティとして確定し、新データ確定コマンドの正常終了をコントローラ１００へ送る。
【０４５５】
次にＭＰ１２１は、パリティＦＭＰＫ１４４Ｐから新データ確定コマンドの正常終了を受ける。これに応じて、ＭＰ１２１は、新データ確定コマンドをパリティＦＭＰＫ１４４Ｑへ送る（Ｓ９２４０）。この新データ確定コマンドは、新Ｑパリティを格納している論理ページを指定する。
【０４５６】
次にパリティＦＭＰＫ１４４Ｑは、コントローラ１００から新データ確定コマンドを受ける。これに応じて、パリティＦＭＰＫ１４４Ｑは、新Ｑパリティを更新後のＱパリティとして確定し、新データ確定コマンドの正常終了をコントローラ１００へ送る。
【０４５７】
次にＭＰ１２１は、パリティＦＭＰＫ１４４Ｑから新データ確定コマンドの正常終了を受ける。これに応じて、ＭＰ１２１は、ＳＭ１３２に格納されている処理段階情報の値をクリアする。
【０４５８】
以上がライト処理である。
【０４５９】
このように、コントローラ１００は、データＦＭＰＫ１４４Ａから受けた中間パリティをＣＭ１３１へ書き込むことなく、中間パリティをバッファ１４３からパリティＦＭＰＫ１４４Ｐ及びパリティＦＭＰＫ１４４Ｑへ送る。これにより、ライト処理中のＣＭ１３１へのアクセス回数を低減することができる。
【０４６０】
また、実施例１と同様に、複数のＭＰＰＫ１２０、複数のＣＭＰＫ１３０、複数のＢＥＰＫ１４０、複数のＦＭＰＫ１４４において同時一点障害が発生しても、データロストは発生しない。これにより、ストレージシステム１０の信頼性を向上させることができる。従って、ストレージシステム１０の信頼性を向上させることができる。
【０４６１】
以上の各実施例によれば、ＣＭ１３１へのアクセス回数を削減することにより、ＣＭＰＫ１３０との通信における通信オーバーヘッドを削減することができ、ＣＭ１２１の負荷を軽減させ、ストレージシステム１０のスループットを向上させることができる。
【０４６２】
また、以上の各実施例によれば、新ユーザデータ、処理段階情報の夫々を、二つのＣＭＰＫ１２０に格納することにより、ストレージシステム１０の信頼性を高めることができる。
【０４６３】
また、以上の各実施例によれば、ライト処理中に、複数のＭＰＰＫ１２０、複数のＣＭＰＫ１３０、複数のＢＥＰＫ１４０の同時一点障害が発生した場合でも、データロストを防ぐことができる。
【０４６４】
なお、前述の各実施例において、パリティの代わりに、ハミング符号、冗長コード等が用いられても良い。
【０４６５】
また、コントローラ１００の動作における各工程の順序は、交換されることがある。例えば、Ｓ３２３０とＳ３３２０は交換可能である。また、例えば、Ｓ８１２０とＳ８１３０は交換可能である。
【０４６６】
また、各論理領域群は、ＲＡＩＤグループに基づくストライプで良く、各論理領域は、ストライプを構成する要素で良く、不揮発メモリと１対１で対応して良い。各論理領域群は、ライト要求の送信元装置（例えば、ホスト計算機又は別のストレージシステム）に提供される論理ユニットの構成要素でも良いし、送信元装置に提供される仮想的な論理ユニット（例えばThin  Provisioningに従う論理ユニット）を構成する複数の仮想セグメント（仮想的な記憶領域）のいずれかに動的に割り当てられる領域群（仮想セグメントに対するライトに応じてそのライト先の仮想セグメントに割り当てられる領域群）であっても良い。後者の場合、記憶領域プールが、複数の論理セグメントで構成されていて、論理セグメントは、１以上の論理領域群で構成されていて、論理セグメント単位で、仮想セグメントに割り当てられても良い。記憶領域プールは、複数の論理ユニットで構成されて良く、その場合、各論理ユニットが、２以上の論理セグメントで構成されていて良い。
【０４６７】
なお、本明細書では、例えば、下記（表現１）〜（表現４）のストレージシステムが説明された。
【０４６８】
（表現１）複数の記憶媒体、及び前記複数の記憶媒体を制御するデバイスコントローラを有し、前記複数の記憶媒体でＲＡＩＤグループが構成されている複数の記憶デバイスと、プロセッサと、所定の通信ネットワークを介して前記複数の記憶デバイス及び前記プロセッサに接続されるバッファメモリと、前記所定の通信ネットワークを介して前記プロセッサ及び前記バッファメモリに接続されるキャッシュメモリとを有するシステムコントローラと、を備え、前記プロセッサは、ホスト計算機からのライト要求に関連する第１データを、前記キャッシュメモリに格納し、前記複数の記憶デバイスから、前記第１データの更新前のデータである更新前データを格納する第１記憶デバイスを特定し、特定した第１記憶デバイスに前記第１データを転送し、前記第１記憶デバイスの第１デバイスコントローラは、前記第１データ及び前記更新前データに基づく第２データを、前記第１記憶デバイスから前記システムコントローラに送信し、前記プロセッサは、前記第２データを前記バッファメモリに格納し、前記複数の記憶デバイスから第２記憶デバイスを特定し、格納した前記第２データを特定した第２記憶デバイスに転送し、前記プロセッサは、更に、前記ライト要求の処理の段階を示す処理段階情報を管理する、ストレージシステム。
【０４６９】
（表現２）前記第２データは、中間パリティであり、前記第２記憶デバイスは、更新前のパリティデータを格納している記憶デバイスであり、前記第１デバイスコントローラは、前記第１記憶デバイスに格納されている前記第１データと、前記更新前データに基づき前記中間パリティを算出し、算出した前記中間パリティを前記システムコントローラへ送信し、前記プロセッサは、前記中間パリティを前記バッファメモリに格納し、格納した前記中間パリティを前記第２記憶デバイスに転送し、前記第２記憶デバイスの第２デバイスコントローラは、転送された中間パリティと更新前のパリティに基づいて更新後のパリティを算出し、算出した更新後のパリティを前記第２記憶デバイスへ書き込む、表現１に記載のストレージシステム。
【０４７０】
（表現３）前記記憶媒体の夫々は、フラッシュメモリであり、前記更新前データは、前記フラッシュメモリの第１物理領域に格納されており、前記第１デバイスコントローラは、前記第１データを前記フラッシュメモリの第１物理領域とは異なる第２物理領域に格納し、前記更新後のパリティが前記第２記憶デバイスのフラッシュメモリに格納されるまで、前記更新前データと前記第１物理領域との対応関係、及び前記第１データと前記第２物理領域との対応関係を保持する、表現２に記載のストレージシステム。
【０４７１】
（表現４）前記第１デバイスコントローラは、ライト要求により指定される第１論理領域に、前記更新前のデータを格納している第１物理領域を割り当て、前記第１記憶デバイス内で前記第１物理領域と異なる物理領域である第２物理領域へ、前記第２メモリからの第１データを書き込み、前記更新後のパリティが前記第２記憶デバイスへ書き込まれた後、前記第１デバイスコントローラは、前記第１論理領域に前記第２物理領域を割り当てる、表現３に記載のストレージ制御装置。
【０４７２】
これらの表現において、システムコントローラ及び追加システムコントローラは例えば、ＭＰ１２１に対応する。デバイスコントローラの夫々は例えば、ＦＭＰＫ１４４のＣＰＵ１４４４に対応する。記憶デバイスの夫々は例えば、ＦＭＰＫ１４４のＦＭ１４４３に対応する。第１メモリは例えば、ＳＭ１３２に対応する。第１データは例えば、新ユーザデータに対応する。第２データは例えば、中間パリティ、或いは旧ユーザデータに対応する。
【符号の説明】
【０４７３】
１０：ストレージシステム、１００：コントローラ、１１２：転送回路、１１３：バッファ、１２３：内部パス、１４２：転送回路、１４３：バッファ、１５０：通信ネットワーク、２００：記憶部、１４４１：ポート、１４４２：論理演算回路、１４４３：ＦＭ（Flash  Memory）、１４４４：ＣＰＵ（Central  Processing  Unit）、１４４５：メモリ、１４４６：対象エントリ。
【図１】
0005933755.tif 000002
【図２】
0005933755.tif 000003
【図３】
0005933755.tif 000004
【図４】
0005933755.tif 000005
【図５】
0005933755.tif 000006
【図６】
0005933755.tif 000007
【図７】
0005933755.tif 000008
【図８】
0005933755.tif 000009
【図９】
0005933755.tif 000010
【図１０】
0005933755.tif 000011
【図１１】
0005933755.tif 000012
【図１２】
0005933755.tif 000013
【図１３】
0005933755.tif 000014
【図１４】
0005933755.tif 000015
【図１５】
0005933755.tif 000016
【図１６】
0005933755.tif 000017
【図１７】
0005933755.tif 000018
【図１８】
0005933755.tif 000019
【図１９】
0005933755.tif 000020
【図２０】
0005933755.tif 000021
【図２１】
0005933755.tif 000022
【図２２】
0005933755.tif 000023
【図２３】
0005933755.tif 000024
【図２４】
0005933755.tif 000025
【図２５】
0005933755.tif 000026
【図２６】
0005933755.tif 000027
【図２７】
0005933755.tif 000028
【図２８】
0005933755.tif 000029
【図２９】
0005933755.tif 000030
【図３０】
0005933755.tif 000031
【図３１】
0005933755.tif 000032
【図３２】
0005933755.tif 000033
【図３３】
0005933755.tif 000034
【図３４】
0005933755.tif 000035
【図３５】
0005933755.tif 000036
【図３６】
0005933755.tif 000037
【図３７】
0005933755.tif 000038
【図３８】
0005933755.tif 000039
【図３９】
0005933755.tif 000040
【図４０】
0005933755.tif 000041
【図４１】
0005933755.tif 000042
【図４２】
0005933755.tif 000043
【図４３】
0005933755.tif 000044
【図４４】
0005933755.tif 000045
【図４５】
0005933755.tif 000046
【図４６】
0005933755.tif 000047
【図４７】
0005933755.tif 000048
【図４８】
0005933755.tif 000049
【図４９】
0005933755.tif 000050
【図５０】
0005933755.tif 000051
【図５１】
0005933755.tif 000052
【図５２】
0005933755.tif 000053
【図５３】
0005933755.tif 000054
【図５４】
0005933755.tif 000055
【図５５】
0005933755.tif 000056
【図５６】
0005933755.tif 000057
【図５７】
0005933755.tif 000058
【図５８】
0005933755.tif 000059
【図５９】
0005933755.tif 000060
【図６０】
0005933755.tif 000061
【図６１】
0005933755.tif 000062
【図６２】
0005933755.tif 000063
【図６３】
0005933755.tif 000064
【図６４】
0005933755.tif 000065
【図６５】
0005933755.tif 000066
【図６６】
0005933755.tif 000067
【図６７】
0005933755.tif 000068
【図６８】
0005933755.tif 000069
【図６９】
0005933755.tif 000070
【図７０】
0005933755.tif 000071
【図７１】
0005933755.tif 000072
【図７２】
0005933755.tif 000073
【図７３】
0005933755.tif 000074
【図７４】
0005933755.tif 000075
【図７５】
0005933755.tif 000076
【図７６】
0005933755.tif 000077
【図７７】
0005933755.tif 000078
【図７８】
0005933755.tif 000079
【図７９】
0005933755.tif 000080
【図８０】
0005933755.tif 000081
【図８１】
0005933755.tif 000082
【図８２】
0005933755.tif 000083
【図８３】
0005933755.tif 000084
【図８４】
0005933755.tif 000085
【図８５】
0005933755.tif 000086
【図８６】
0005933755.tif 000087
【図８７】
0005933755.tif 000088
【図８８】
0005933755.tif 000089
【図８９】
0005933755.tif 000090
【図９０】
0005933755.tif 000091
【図９１】
0005933755.tif 000092
【図９２】
0005933755.tif 000093